From 33a08a235ec460c2b55eea08964d18e1b9eeceb4 Mon Sep 17 00:00:00 2001 From: _0Steven <42909981+SuicidalSteve@users.noreply.github.com> Date: Mon, 22 Feb 2021 13:09:50 +0100 Subject: [PATCH 001/118] Turbines- I mean horizontal water wheels - Make water wheels work and be able to be placed horizontally --- src/generated/resources/.cache/cache | 4 +- .../assets/create/blockstates/fluid_pipe.json | 168 +++++++++--------- .../create/blockstates/water_wheel.json | 7 + .../java/com/simibubi/create/AllBlocks.java | 2 +- .../waterwheel/WaterWheelBlock.java | 28 +-- 5 files changed, 112 insertions(+), 97 deletions(-) diff --git a/src/generated/resources/.cache/cache b/src/generated/resources/.cache/cache index 463f09ef7..be14b563c 100644 --- a/src/generated/resources/.cache/cache +++ b/src/generated/resources/.cache/cache @@ -140,7 +140,7 @@ de8a40b7daf1497d5aecee47a43b3e0b1d030b00 assets/create/blockstates/fancy_scoria_ fc9ac0a7e7191b93516719455a17177fa6524ecc assets/create/blockstates/fancy_weathered_limestone_bricks_slab.json b2a7c321b1795f20e7433f81a55ce4683de081b8 assets/create/blockstates/fancy_weathered_limestone_bricks_stairs.json 6372fe02ba0065acb0758121c45a15a1a8fdc5de assets/create/blockstates/fancy_weathered_limestone_bricks_wall.json -48086bf71a824faf14841b698050cc8544b09a9b assets/create/blockstates/fluid_pipe.json +cedc68a9c3ab47a94bd8200889316a708c25950a assets/create/blockstates/fluid_pipe.json f0eaab18e16c4f3f65ebf3b55b08f0dc445720fe assets/create/blockstates/fluid_tank.json 5408d92ab02af86539ac42971d4033545970bb3a assets/create/blockstates/fluid_valve.json e9da1794b6ece7f9aa8bcb43d42c23a55446133b assets/create/blockstates/flywheel.json @@ -379,7 +379,7 @@ a2454400b1cf9889f70aebdc89c52a1be25f543c assets/create/blockstates/tiled_glass_p a8094531617e27a545c4815ab2062bf0ffca3633 assets/create/blockstates/turntable.json 69dfe8afaa8eb6105dae9f76ab8b7847bf90b8c6 assets/create/blockstates/vertical_framed_glass.json c4db76b9d36cfb098df0d158cb6f8b82768ebe14 assets/create/blockstates/vertical_framed_glass_pane.json -d995547bcd71603ba7378d8998098e462030bfd0 assets/create/blockstates/water_wheel.json +d31fce8315c8715521d66b5dcc166c84e949dd1d assets/create/blockstates/water_wheel.json f182669f7547964f9f2ef67916568556870def7b assets/create/blockstates/weathered_limestone.json 27e6740834c0f673acc3531371512daa6dcab025 assets/create/blockstates/weathered_limestone_bricks.json abb74e4f4c2b9851670cb6ad794281b0f7be0f5a assets/create/blockstates/weathered_limestone_bricks_slab.json diff --git a/src/generated/resources/assets/create/blockstates/fluid_pipe.json b/src/generated/resources/assets/create/blockstates/fluid_pipe.json index 80a25280c..d4179b0cb 100644 --- a/src/generated/resources/assets/create/blockstates/fluid_pipe.json +++ b/src/generated/resources/assets/create/blockstates/fluid_pipe.json @@ -60,10 +60,10 @@ }, { "when": { + "north": "true", "down": "false", - "up": "true", "south": "false", - "north": "true" + "up": "true" }, "apply": { "model": "create:block/fluid_pipe/lu_x" @@ -71,10 +71,10 @@ }, { "when": { + "north": "false", "down": "false", - "up": "true", "south": "true", - "north": "false" + "up": "true" }, "apply": { "model": "create:block/fluid_pipe/ru_x" @@ -82,10 +82,10 @@ }, { "when": { + "north": "true", "down": "true", - "up": "false", "south": "false", - "north": "true" + "up": "false" }, "apply": { "model": "create:block/fluid_pipe/ld_x" @@ -93,10 +93,10 @@ }, { "when": { + "north": "false", "down": "true", - "up": "false", "south": "true", - "north": "false" + "up": "false" }, "apply": { "model": "create:block/fluid_pipe/rd_x" @@ -104,10 +104,10 @@ }, { "when": { + "north": "false", "down": "true", - "up": "true", "south": "false", - "north": "false" + "up": "true" }, "apply": { "model": "create:block/fluid_pipe/ud_x" @@ -115,10 +115,10 @@ }, { "when": { + "north": "false", "down": "false", - "up": "true", "south": "false", - "north": "false" + "up": "true" }, "apply": { "model": "create:block/fluid_pipe/ud_x" @@ -126,10 +126,10 @@ }, { "when": { + "north": "false", "down": "true", - "up": "false", "south": "false", - "north": "false" + "up": "false" }, "apply": { "model": "create:block/fluid_pipe/ud_x" @@ -137,10 +137,10 @@ }, { "when": { + "north": "true", "down": "false", - "up": "false", "south": "true", - "north": "true" + "up": "false" }, "apply": { "model": "create:block/fluid_pipe/lr_x" @@ -148,10 +148,10 @@ }, { "when": { + "north": "true", "down": "false", - "up": "false", "south": "false", - "north": "true" + "up": "false" }, "apply": { "model": "create:block/fluid_pipe/lr_x" @@ -159,10 +159,10 @@ }, { "when": { + "north": "false", "down": "false", - "up": "false", "south": "true", - "north": "false" + "up": "false" }, "apply": { "model": "create:block/fluid_pipe/lr_x" @@ -170,10 +170,10 @@ }, { "when": { + "north": "false", "down": "false", - "up": "false", "south": "false", - "north": "false" + "up": "false" }, "apply": { "model": "create:block/fluid_pipe/none_x" @@ -181,10 +181,10 @@ }, { "when": { - "south": "true", - "west": "true", + "east": "false", "north": "false", - "east": "false" + "south": "true", + "west": "true" }, "apply": { "model": "create:block/fluid_pipe/lu_y" @@ -192,10 +192,10 @@ }, { "when": { - "south": "true", - "west": "false", + "east": "true", "north": "false", - "east": "true" + "south": "true", + "west": "false" }, "apply": { "model": "create:block/fluid_pipe/ru_y" @@ -203,10 +203,10 @@ }, { "when": { - "south": "false", - "west": "true", + "east": "false", "north": "true", - "east": "false" + "south": "false", + "west": "true" }, "apply": { "model": "create:block/fluid_pipe/ld_y" @@ -214,10 +214,10 @@ }, { "when": { - "south": "false", - "west": "false", + "east": "true", "north": "true", - "east": "true" + "south": "false", + "west": "false" }, "apply": { "model": "create:block/fluid_pipe/rd_y" @@ -225,21 +225,10 @@ }, { "when": { - "south": "true", - "west": "false", + "east": "false", "north": "true", - "east": "false" - }, - "apply": { - "model": "create:block/fluid_pipe/ud_y" - } - }, - { - "when": { "south": "true", - "west": "false", - "north": "false", - "east": "false" + "west": "false" }, "apply": { "model": "create:block/fluid_pipe/ud_y" @@ -247,10 +236,21 @@ }, { "when": { - "south": "false", - "west": "false", + "east": "false", + "north": "false", + "south": "true", + "west": "false" + }, + "apply": { + "model": "create:block/fluid_pipe/ud_y" + } + }, + { + "when": { + "east": "false", "north": "true", - "east": "false" + "south": "false", + "west": "false" }, "apply": { "model": "create:block/fluid_pipe/ud_y" @@ -258,10 +258,10 @@ }, { "when": { - "south": "false", - "west": "true", + "east": "true", "north": "false", - "east": "true" + "south": "false", + "west": "true" }, "apply": { "model": "create:block/fluid_pipe/lr_y" @@ -269,10 +269,10 @@ }, { "when": { - "south": "false", - "west": "true", + "east": "false", "north": "false", - "east": "false" + "south": "false", + "west": "true" }, "apply": { "model": "create:block/fluid_pipe/lr_y" @@ -280,10 +280,10 @@ }, { "when": { - "south": "false", - "west": "false", + "east": "true", "north": "false", - "east": "true" + "south": "false", + "west": "false" }, "apply": { "model": "create:block/fluid_pipe/lr_y" @@ -291,10 +291,10 @@ }, { "when": { - "south": "false", - "west": "false", + "east": "false", "north": "false", - "east": "false" + "south": "false", + "west": "false" }, "apply": { "model": "create:block/fluid_pipe/none_y" @@ -302,10 +302,10 @@ }, { "when": { + "east": "true", "down": "false", "up": "true", - "west": "false", - "east": "true" + "west": "false" }, "apply": { "model": "create:block/fluid_pipe/lu_z" @@ -313,10 +313,10 @@ }, { "when": { + "east": "false", "down": "false", "up": "true", - "west": "true", - "east": "false" + "west": "true" }, "apply": { "model": "create:block/fluid_pipe/ru_z" @@ -324,10 +324,10 @@ }, { "when": { + "east": "true", "down": "true", "up": "false", - "west": "false", - "east": "true" + "west": "false" }, "apply": { "model": "create:block/fluid_pipe/ld_z" @@ -335,10 +335,10 @@ }, { "when": { + "east": "false", "down": "true", "up": "false", - "west": "true", - "east": "false" + "west": "true" }, "apply": { "model": "create:block/fluid_pipe/rd_z" @@ -346,10 +346,10 @@ }, { "when": { + "east": "false", "down": "true", "up": "true", - "west": "false", - "east": "false" + "west": "false" }, "apply": { "model": "create:block/fluid_pipe/ud_z" @@ -357,10 +357,10 @@ }, { "when": { + "east": "false", "down": "false", "up": "true", - "west": "false", - "east": "false" + "west": "false" }, "apply": { "model": "create:block/fluid_pipe/ud_z" @@ -368,10 +368,10 @@ }, { "when": { + "east": "false", "down": "true", "up": "false", - "west": "false", - "east": "false" + "west": "false" }, "apply": { "model": "create:block/fluid_pipe/ud_z" @@ -379,10 +379,10 @@ }, { "when": { + "east": "true", "down": "false", "up": "false", - "west": "true", - "east": "true" + "west": "true" }, "apply": { "model": "create:block/fluid_pipe/lr_z" @@ -390,10 +390,10 @@ }, { "when": { + "east": "true", "down": "false", "up": "false", - "west": "false", - "east": "true" + "west": "false" }, "apply": { "model": "create:block/fluid_pipe/lr_z" @@ -401,10 +401,10 @@ }, { "when": { + "east": "false", "down": "false", "up": "false", - "west": "true", - "east": "false" + "west": "true" }, "apply": { "model": "create:block/fluid_pipe/lr_z" @@ -412,10 +412,10 @@ }, { "when": { + "east": "false", "down": "false", "up": "false", - "west": "false", - "east": "false" + "west": "false" }, "apply": { "model": "create:block/fluid_pipe/none_z" diff --git a/src/generated/resources/assets/create/blockstates/water_wheel.json b/src/generated/resources/assets/create/blockstates/water_wheel.json index c9b0731b7..fe99163df 100644 --- a/src/generated/resources/assets/create/blockstates/water_wheel.json +++ b/src/generated/resources/assets/create/blockstates/water_wheel.json @@ -1,5 +1,12 @@ { "variants": { + "facing=down": { + "model": "create:block/water_wheel", + "x": 180 + }, + "facing=up": { + "model": "create:block/water_wheel" + }, "facing=north": { "model": "create:block/water_wheel", "x": 90 diff --git a/src/main/java/com/simibubi/create/AllBlocks.java b/src/main/java/com/simibubi/create/AllBlocks.java index aea45c42e..5c35fd66c 100644 --- a/src/main/java/com/simibubi/create/AllBlocks.java +++ b/src/main/java/com/simibubi/create/AllBlocks.java @@ -335,7 +335,7 @@ public class AllBlocks { public static final BlockEntry WATER_WHEEL = REGISTRATE.block("water_wheel", WaterWheelBlock::new) .initialProperties(SharedProperties::wooden) .properties(Block.Properties::nonOpaque) - .blockstate(BlockStateGen.horizontalWheelProvider(false)) + .blockstate(BlockStateGen.directionalBlockProviderIgnoresWaterlogged(false)) .addLayer(() -> RenderType::getCutoutMipped) .transform(StressConfigDefaults.setCapacity(16.0)) .simpleItem() diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/waterwheel/WaterWheelBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/waterwheel/WaterWheelBlock.java index ce91f8c47..11060e7f9 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/waterwheel/WaterWheelBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/waterwheel/WaterWheelBlock.java @@ -3,6 +3,7 @@ package com.simibubi.create.content.contraptions.components.waterwheel; import com.simibubi.create.AllBlocks; import com.simibubi.create.AllFluids; import com.simibubi.create.AllTileEntities; +import com.simibubi.create.content.contraptions.base.DirectionalKineticBlock; import com.simibubi.create.content.contraptions.base.HorizontalKineticBlock; import com.simibubi.create.foundation.advancement.AllTriggers; import com.simibubi.create.foundation.block.ITE; @@ -28,7 +29,7 @@ import net.minecraft.world.IWorld; import net.minecraft.world.IWorldReader; import net.minecraft.world.World; -public class WaterWheelBlock extends HorizontalKineticBlock implements ITE { +public class WaterWheelBlock extends DirectionalKineticBlock implements ITE { public WaterWheelBlock(Properties properties) { super(properties); @@ -51,10 +52,10 @@ public class WaterWheelBlock extends HorizontalKineticBlock implements ITE 0 ^ !clockwise ? -flow.y * clockwiseMultiplier : -flow.y; } + if (wf.getAxis() == Axis.Y) { + if (side.getAxis() == Axis.Z) + flowStrength = flow.x < 0 ^ !clockwise ? flow.x * clockwiseMultiplier : flow.x; + if (side.getAxis() == Axis.X) + flowStrength = flow.z > 0 ^ !clockwise ? -flow.z * clockwiseMultiplier : -flow.z; + } + if (te.getSpeed() == 0 && flowStrength != 0 && !world.isRemote) { AllTriggers.triggerForNearbyPlayers(AllTriggers.WATER_WHEEL, world, pos, 5); if (FluidHelper.isLava(fluid.getFluid())) @@ -148,23 +156,23 @@ public class WaterWheelBlock extends HorizontalKineticBlock implements ITE Date: Mon, 22 Feb 2021 13:44:09 +0100 Subject: [PATCH 002/118] ...Update imports - Remove a singular now unused import from WaterWheelBlock.java cause I apparently just forgot to do so. --- .../contraptions/components/waterwheel/WaterWheelBlock.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/waterwheel/WaterWheelBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/waterwheel/WaterWheelBlock.java index 11060e7f9..b36ef1110 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/waterwheel/WaterWheelBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/waterwheel/WaterWheelBlock.java @@ -4,7 +4,6 @@ import com.simibubi.create.AllBlocks; import com.simibubi.create.AllFluids; import com.simibubi.create.AllTileEntities; import com.simibubi.create.content.contraptions.base.DirectionalKineticBlock; -import com.simibubi.create.content.contraptions.base.HorizontalKineticBlock; import com.simibubi.create.foundation.advancement.AllTriggers; import com.simibubi.create.foundation.block.ITE; import com.simibubi.create.foundation.config.AllConfigs; From 7ae89ef4e31bd1a1138cab401597fc2efa9ad758 Mon Sep 17 00:00:00 2001 From: grimmauld Date: Thu, 20 May 2021 08:31:35 +0200 Subject: [PATCH 003/118] Dynamic trees compat (WIP) --- build.gradle | 2 + .../java/com/simibubi/create/compat/Mods.java | 34 +++++++++++++++ .../compat/dynamictrees/DynamicTree.java | 42 +++++++++++++++++++ .../BlockBreakingMovementBehaviour.java | 11 +++-- .../actors/SawMovementBehaviour.java | 15 +++++++ .../components/saw/SawTileEntity.java | 10 ++++- .../create/foundation/utility/TreeCutter.java | 39 ++++++++++++----- 7 files changed, 139 insertions(+), 14 deletions(-) create mode 100644 src/main/java/com/simibubi/create/compat/Mods.java create mode 100644 src/main/java/com/simibubi/create/compat/dynamictrees/DynamicTree.java diff --git a/build.gradle b/build.gradle index c1cdabd3f..fafdf0df7 100644 --- a/build.gradle +++ b/build.gradle @@ -126,6 +126,8 @@ dependencies { runtimeOnly fg.deobf("mezz.jei:jei-1.16.4:${jei_version}") // implementation fg.deobf("curse.maven:druidcraft-340991:3101903") + implementation fg.deobf("curse.maven:dynamictrees-252818:3302576") + // i'll leave this here commented for easier testing //runtimeOnly fg.deobf("vazkii.arl:AutoRegLib:1.4-35.69") diff --git a/src/main/java/com/simibubi/create/compat/Mods.java b/src/main/java/com/simibubi/create/compat/Mods.java new file mode 100644 index 000000000..0fb250033 --- /dev/null +++ b/src/main/java/com/simibubi/create/compat/Mods.java @@ -0,0 +1,34 @@ +package com.simibubi.create.compat; + +import net.minecraftforge.fml.ModList; + +import java.util.Optional; +import java.util.function.Supplier; + +/** + * For compatibility with and without another mod present, we have to define load conditions of the specific code + */ +public enum Mods { + DYNAMICTREES; + + /** + * @return a boolean of whether the mod is loaded or not + */ + public boolean isLoaded() { + return ModList.get().isLoaded(asId()); + } + + public String asId() { + return name().toLowerCase(); + } + + /** + * Simple hook to run code if a mod is installed + * @param toRun will be run if the mod is loaded + */ + public Optional runIfInstalled(Supplier> toRun) { + if (isLoaded()) + return Optional.of(toRun.get().get()); + return Optional.empty(); + } +} diff --git a/src/main/java/com/simibubi/create/compat/dynamictrees/DynamicTree.java b/src/main/java/com/simibubi/create/compat/dynamictrees/DynamicTree.java new file mode 100644 index 000000000..e115b6879 --- /dev/null +++ b/src/main/java/com/simibubi/create/compat/dynamictrees/DynamicTree.java @@ -0,0 +1,42 @@ +package com.simibubi.create.compat.dynamictrees; + +import java.util.function.BiConsumer; + +import javax.annotation.Nullable; + +import com.ferreusveritas.dynamictrees.api.TreeHelper; +import com.ferreusveritas.dynamictrees.blocks.branches.BranchBlock; +import com.ferreusveritas.dynamictrees.util.BranchDestructionData; +import com.simibubi.create.foundation.utility.AbstractBlockBreakQueue; + +import net.minecraft.block.Block; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.util.Direction; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public class DynamicTree extends AbstractBlockBreakQueue { + private final BlockPos startCutPos; + + public DynamicTree(BlockPos startCutPos) { + this.startCutPos = startCutPos; + } + + @Override + public void destroyBlocks(World world, ItemStack toDamage, @Nullable PlayerEntity playerEntity, BiConsumer drop) { + BranchBlock start = TreeHelper.getBranch(world.getBlockState(startCutPos)); + if (start == null) + return; + + BranchDestructionData data = start.destroyBranchFromNode(world, startCutPos, Direction.DOWN, false, playerEntity); + + // Feed all the tree drops to drop bi-consumer + data.leavesDrops.forEach(stackPos -> drop.accept(stackPos.pos.add(startCutPos), stackPos.stack)); + start.getLogDrops(world, startCutPos, data.species, data.woodVolume).forEach(stack -> drop.accept(startCutPos, stack)); + } + + public static boolean isDynamicBranch(Block block) { + return TreeHelper.isBranch(block); + } +} diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/BlockBreakingMovementBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/BlockBreakingMovementBehaviour.java index 14c090563..419a5a577 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/BlockBreakingMovementBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/BlockBreakingMovementBehaviour.java @@ -166,10 +166,10 @@ public class BlockBreakingMovementBehaviour extends MovementBehaviour { float breakSpeed = MathHelper.clamp(Math.abs(context.getAnimationSpeed()) / 500f, 1 / 128f, 16f); destroyProgress += MathHelper.clamp((int) (breakSpeed / blockHardness), 1, 10 - destroyProgress); world.playSound(null, breakingPos, stateToBreak.getSoundType().getHitSound(), SoundCategory.NEUTRAL, .25f, 1); - + if (destroyProgress >= 10) { world.sendBlockBreakProgress(id, breakingPos, -1); - + // break falling blocks from top to bottom BlockPos ogPos = breakingPos; BlockState stateAbove = world.getBlockState(breakingPos.up()); @@ -178,8 +178,9 @@ public class BlockBreakingMovementBehaviour extends MovementBehaviour { stateAbove = world.getBlockState(breakingPos.up()); } stateToBreak = world.getBlockState(breakingPos); - + context.stall = false; + if (shouldDestroyStartBlock(stateToBreak)) BlockHelper.destroyBlock(context.world, breakingPos, 1f, stack -> this.dropItem(context, stack)); onBlockBroken(context, ogPos, stateToBreak); ticksUntilNextProgress = -1; @@ -195,6 +196,10 @@ public class BlockBreakingMovementBehaviour extends MovementBehaviour { data.putInt("Progress", destroyProgress); } + protected boolean shouldDestroyStartBlock(BlockState stateToBreak) { + return true; + } + public boolean canBreak(World world, BlockPos breakingPos, BlockState state) { float blockHardness = state.getBlockHardness(world, breakingPos); return BlockBreakingKineticTileEntity.isBreakable(state, blockHardness); diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/SawMovementBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/SawMovementBehaviour.java index e8ec8a692..a24d69459 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/SawMovementBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/SawMovementBehaviour.java @@ -5,6 +5,7 @@ import com.simibubi.create.content.contraptions.components.saw.SawBlock; import com.simibubi.create.content.contraptions.components.saw.SawRenderer; import com.simibubi.create.content.contraptions.components.saw.SawTileEntity; import com.simibubi.create.content.contraptions.components.structureMovement.MovementContext; +import com.simibubi.create.foundation.utility.AbstractBlockBreakQueue; import com.simibubi.create.foundation.utility.TreeCutter; import com.simibubi.create.foundation.utility.VecHelper; @@ -22,6 +23,8 @@ import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.items.ItemHandlerHelper; +import java.util.Optional; + public class SawMovementBehaviour extends BlockBreakingMovementBehaviour { @Override @@ -57,6 +60,13 @@ public class SawMovementBehaviour extends BlockBreakingMovementBehaviour { protected void onBlockBroken(MovementContext context, BlockPos pos, BlockState brokenState) { if (brokenState.isIn(BlockTags.LEAVES)) return; + + Optional dynamicTree = TreeCutter.findDynamicTree(brokenState.getBlock(), pos); + if (dynamicTree.isPresent()) { + dynamicTree.get().destroyBlocks(context.world, null, (stack, dropPos) -> dropItemFromCutTree(context, stack, dropPos)); + return; + } + TreeCutter.findTree(context.world, pos).destroyBlocks(context.world, null, (stack, dropPos) -> dropItemFromCutTree(context, stack, dropPos)); } @@ -80,6 +90,11 @@ public class SawMovementBehaviour extends BlockBreakingMovementBehaviour { SawRenderer.renderInContraption(context, ms, msLocal, buffer); } + @Override + protected boolean shouldDestroyStartBlock(BlockState stateToBreak) { + return !TreeCutter.canDynamicTreeCutFrom(stateToBreak.getBlock()); + } + @Override protected DamageSource getDamageSource() { return SawBlock.damageSourceSaw; diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/saw/SawTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/saw/SawTileEntity.java index f7eca3cc1..1af805fd6 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/saw/SawTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/saw/SawTileEntity.java @@ -3,6 +3,7 @@ package com.simibubi.create.content.contraptions.components.saw; import java.util.ArrayList; import java.util.LinkedList; import java.util.List; +import java.util.Optional; import java.util.Random; import java.util.function.Predicate; import java.util.stream.Collectors; @@ -18,6 +19,7 @@ import com.simibubi.create.foundation.item.ItemHelper; import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; import com.simibubi.create.foundation.tileEntity.behaviour.belt.DirectBeltInputBehaviour; import com.simibubi.create.foundation.tileEntity.behaviour.filtering.FilteringBehaviour; +import com.simibubi.create.foundation.utility.AbstractBlockBreakQueue; import com.simibubi.create.foundation.utility.TreeCutter; import com.simibubi.create.foundation.utility.VecHelper; import com.simibubi.create.foundation.utility.recipe.RecipeConditions; @@ -280,7 +282,7 @@ public class SawTileEntity extends BlockBreakingKineticTileEntity { * RecipeConditions.isOfType(IRecipeType.STONECUTTING, * AllRecipeTypes.CUTTING.getType()) : * RecipeConditions.isOfType(AllRecipeTypes.CUTTING.getType()); - * + * */ Predicate> types = RecipeConditions.isOfType(AllRecipeTypes.CUTTING.getType(), @@ -366,6 +368,12 @@ public class SawTileEntity extends BlockBreakingKineticTileEntity { @Override public void onBlockBroken(BlockState stateToBreak) { + Optional dynamicTree = TreeCutter.findDynamicTree(stateToBreak.getBlock(), breakingPos); + if (dynamicTree.isPresent()) { + dynamicTree.get().destroyBlocks(world, null, this::dropItemFromCutTree); + return; + } + super.onBlockBroken(stateToBreak); TreeCutter.findTree(world, breakingPos).destroyBlocks(world, null, this::dropItemFromCutTree); } diff --git a/src/main/java/com/simibubi/create/foundation/utility/TreeCutter.java b/src/main/java/com/simibubi/create/foundation/utility/TreeCutter.java index d1191082d..e92c788c3 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/TreeCutter.java +++ b/src/main/java/com/simibubi/create/foundation/utility/TreeCutter.java @@ -5,6 +5,7 @@ import java.util.Collections; import java.util.HashSet; import java.util.LinkedList; import java.util.List; +import java.util.Optional; import java.util.Set; import java.util.function.BiConsumer; import java.util.function.Predicate; @@ -14,6 +15,10 @@ import javax.annotation.Nullable; import com.simibubi.create.AllTags; +import com.simibubi.create.compat.Mods; + +import com.simibubi.create.compat.dynamictrees.DynamicTree; + import net.minecraft.block.BambooBlock; import net.minecraft.block.Block; import net.minecraft.block.BlockState; @@ -36,30 +41,44 @@ import net.minecraft.world.World; public class TreeCutter { public static final Tree NO_TREE = new Tree(Collections.emptyList(), Collections.emptyList()); + public static boolean canDynamicTreeCutFrom(Block startBlock) { + return Mods.DYNAMICTREES.runIfInstalled(() -> () -> DynamicTree.isDynamicBranch(startBlock)).orElse(false); + } + + @Nonnull + public static Optional findDynamicTree(Block startBlock, BlockPos pos) { + if (canDynamicTreeCutFrom(startBlock)) { + return Mods.DYNAMICTREES.runIfInstalled(() -> () -> new DynamicTree(pos)); + } + return Optional.empty(); + } + /** * Finds a tree at the given pos. Block at the position should be air * - * @param reader + * @param world * @param pos * @return null if not found or not fully cut */ @Nonnull - public static Tree findTree(@Nullable IBlockReader reader, BlockPos pos) { - if (reader == null) + public static AbstractBlockBreakQueue findTree(@Nullable IBlockReader world, BlockPos pos) { + if (world == null) return NO_TREE; List logs = new ArrayList<>(); + logs.add(pos); + List leaves = new ArrayList<>(); Set visited = new HashSet<>(); List frontier = new LinkedList<>(); // Bamboo, Sugar Cane, Cactus - BlockState stateAbove = reader.getBlockState(pos.up()); + BlockState stateAbove = world.getBlockState(pos.up()); if (isVerticalPlant(stateAbove)) { logs.add(pos.up()); for (int i = 1; i < 256; i++) { BlockPos current = pos.up(i); - if (!isVerticalPlant(reader.getBlockState(current))) + if (!isVerticalPlant(world.getBlockState(current))) break; logs.add(current); } @@ -78,7 +97,7 @@ public class TreeCutter { BlockPos offset = current.offset(direction); if (visited.contains(offset)) continue; - if (!isChorus(reader.getBlockState(offset))) + if (!isChorus(world.getBlockState(offset))) continue; frontier.add(offset); } @@ -88,7 +107,7 @@ public class TreeCutter { } // Regular Tree - if (!validateCut(reader, pos)) + if (!validateCut(world, pos)) return NO_TREE; visited.add(pos); @@ -102,7 +121,7 @@ public class TreeCutter { continue; visited.add(currentPos); - if (!isLog(reader.getBlockState(currentPos))) + if (!isLog(world.getBlockState(currentPos))) continue; logs.add(currentPos); addNeighbours(currentPos, frontier, visited); @@ -118,7 +137,7 @@ public class TreeCutter { continue; visited.add(currentPos); - BlockState blockState = reader.getBlockState(currentPos); + BlockState blockState = world.getBlockState(currentPos); boolean isLog = isLog(blockState); boolean isLeaf = isLeaf(blockState); boolean isGenericLeaf = isLeaf || isNonDecayingLeaf(blockState); @@ -133,7 +152,7 @@ public class TreeCutter { BlockPos offset = currentPos.offset(direction); if (visited.contains(offset)) continue; - BlockState state = reader.getBlockState(offset); + BlockState state = world.getBlockState(offset); BlockPos subtract = offset.subtract(pos); int horizontalDistance = Math.max(Math.abs(subtract.getX()), Math.abs(subtract.getZ())); if (isLeaf(state) && state.get(LeavesBlock.DISTANCE) > distance From ad37c5d949f6051b86d34fa57dd26dc788e7b31a Mon Sep 17 00:00:00 2001 From: grimmauld Date: Thu, 20 May 2021 08:39:22 +0200 Subject: [PATCH 004/118] fix javadoc --- src/main/java/com/simibubi/create/compat/Mods.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/simibubi/create/compat/Mods.java b/src/main/java/com/simibubi/create/compat/Mods.java index 0fb250033..cf9ec4e2a 100644 --- a/src/main/java/com/simibubi/create/compat/Mods.java +++ b/src/main/java/com/simibubi/create/compat/Mods.java @@ -12,19 +12,23 @@ public enum Mods { DYNAMICTREES; /** - * @return a boolean of whether the mod is loaded or not + * @return a boolean of whether the mod is loaded or not based on mod id */ public boolean isLoaded() { return ModList.get().isLoaded(asId()); } + /** + * @return the mod id + */ public String asId() { return name().toLowerCase(); } /** * Simple hook to run code if a mod is installed - * @param toRun will be run if the mod is loaded + * @param toRun will be run only if the mod is loaded + * @return Optional.empty() if the mod is not loaded, otherwise an Optional of the return value of the given supplier */ public Optional runIfInstalled(Supplier> toRun) { if (isLoaded()) From 918c8082b1a279c1caafb6cd9c5541d9ef6bcc3c Mon Sep 17 00:00:00 2001 From: grimmauld Date: Thu, 20 May 2021 08:42:29 +0200 Subject: [PATCH 005/118] clear unnecessary diffs --- .../create/foundation/utility/TreeCutter.java | 22 +++++++++---------- 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/simibubi/create/foundation/utility/TreeCutter.java b/src/main/java/com/simibubi/create/foundation/utility/TreeCutter.java index e92c788c3..598ec71cd 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/TreeCutter.java +++ b/src/main/java/com/simibubi/create/foundation/utility/TreeCutter.java @@ -56,29 +56,27 @@ public class TreeCutter { /** * Finds a tree at the given pos. Block at the position should be air * - * @param world + * @param reader * @param pos * @return null if not found or not fully cut */ @Nonnull - public static AbstractBlockBreakQueue findTree(@Nullable IBlockReader world, BlockPos pos) { - if (world == null) + public static Tree findTree(@Nullable IBlockReader reader, BlockPos pos) { + if (reader == null) return NO_TREE; List logs = new ArrayList<>(); - logs.add(pos); - List leaves = new ArrayList<>(); Set visited = new HashSet<>(); List frontier = new LinkedList<>(); // Bamboo, Sugar Cane, Cactus - BlockState stateAbove = world.getBlockState(pos.up()); + BlockState stateAbove = reader.getBlockState(pos.up()); if (isVerticalPlant(stateAbove)) { logs.add(pos.up()); for (int i = 1; i < 256; i++) { BlockPos current = pos.up(i); - if (!isVerticalPlant(world.getBlockState(current))) + if (!isVerticalPlant(reader.getBlockState(current))) break; logs.add(current); } @@ -97,7 +95,7 @@ public class TreeCutter { BlockPos offset = current.offset(direction); if (visited.contains(offset)) continue; - if (!isChorus(world.getBlockState(offset))) + if (!isChorus(reader.getBlockState(offset))) continue; frontier.add(offset); } @@ -107,7 +105,7 @@ public class TreeCutter { } // Regular Tree - if (!validateCut(world, pos)) + if (!validateCut(reader, pos)) return NO_TREE; visited.add(pos); @@ -121,7 +119,7 @@ public class TreeCutter { continue; visited.add(currentPos); - if (!isLog(world.getBlockState(currentPos))) + if (!isLog(reader.getBlockState(currentPos))) continue; logs.add(currentPos); addNeighbours(currentPos, frontier, visited); @@ -137,7 +135,7 @@ public class TreeCutter { continue; visited.add(currentPos); - BlockState blockState = world.getBlockState(currentPos); + BlockState blockState = reader.getBlockState(currentPos); boolean isLog = isLog(blockState); boolean isLeaf = isLeaf(blockState); boolean isGenericLeaf = isLeaf || isNonDecayingLeaf(blockState); @@ -152,7 +150,7 @@ public class TreeCutter { BlockPos offset = currentPos.offset(direction); if (visited.contains(offset)) continue; - BlockState state = world.getBlockState(offset); + BlockState state = reader.getBlockState(offset); BlockPos subtract = offset.subtract(pos); int horizontalDistance = Math.max(Math.abs(subtract.getX()), Math.abs(subtract.getZ())); if (isLeaf(state) && state.get(LeavesBlock.DISTANCE) > distance From 9763631984aca214c641584397e0ebe8928bfe85 Mon Sep 17 00:00:00 2001 From: grimmauld Date: Sat, 26 Jun 2021 19:13:44 +0200 Subject: [PATCH 006/118] Fix up the dynamic trees --- build.gradle | 6 ++++- .../compat/dynamictrees/DynamicTree.java | 27 ++++++++++++++++--- .../components/saw/SawTileEntity.java | 2 ++ 3 files changed, 31 insertions(+), 4 deletions(-) diff --git a/build.gradle b/build.gradle index fafdf0df7..ff291cd2a 100644 --- a/build.gradle +++ b/build.gradle @@ -107,6 +107,10 @@ repositories { maven { url = "https://www.cursemaven.com" } + maven { + //location of the maven for dynamic trees + url "http://harleyoconnor.com/maven" + } } configurations { @@ -126,7 +130,7 @@ dependencies { runtimeOnly fg.deobf("mezz.jei:jei-1.16.4:${jei_version}") // implementation fg.deobf("curse.maven:druidcraft-340991:3101903") - implementation fg.deobf("curse.maven:dynamictrees-252818:3302576") + implementation fg.deobf("com.ferreusveritas.dynamictrees:DynamicTrees-1.16.5:0.10.0-Beta12.1") // i'll leave this here commented for easier testing diff --git a/src/main/java/com/simibubi/create/compat/dynamictrees/DynamicTree.java b/src/main/java/com/simibubi/create/compat/dynamictrees/DynamicTree.java index e115b6879..fa6463858 100644 --- a/src/main/java/com/simibubi/create/compat/dynamictrees/DynamicTree.java +++ b/src/main/java/com/simibubi/create/compat/dynamictrees/DynamicTree.java @@ -6,10 +6,12 @@ import javax.annotation.Nullable; import com.ferreusveritas.dynamictrees.api.TreeHelper; import com.ferreusveritas.dynamictrees.blocks.branches.BranchBlock; +import com.ferreusveritas.dynamictrees.blocks.branches.TrunkShellBlock; import com.ferreusveritas.dynamictrees.util.BranchDestructionData; import com.simibubi.create.foundation.utility.AbstractBlockBreakQueue; import net.minecraft.block.Block; +import net.minecraft.block.BlockState; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.util.Direction; @@ -17,7 +19,7 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; public class DynamicTree extends AbstractBlockBreakQueue { - private final BlockPos startCutPos; + private BlockPos startCutPos; public DynamicTree(BlockPos startCutPos) { this.startCutPos = startCutPos; @@ -26,9 +28,16 @@ public class DynamicTree extends AbstractBlockBreakQueue { @Override public void destroyBlocks(World world, ItemStack toDamage, @Nullable PlayerEntity playerEntity, BiConsumer drop) { BranchBlock start = TreeHelper.getBranch(world.getBlockState(startCutPos)); - if (start == null) + if (start == null) //if start is null, it was not a branch + start = setBranchToShellMuse(world, world.getBlockState(startCutPos)); //we check for a trunk shell instead + + if (start == null) //if it is null again, it was neither a branch nor a trunk shell and thus we return return; + // Play and render block break sound and particles + world.playEvent(null, 2001, startCutPos, Block.getStateId(world.getBlockState(startCutPos))); + // Actually breaks the tree + BranchDestructionData data = start.destroyBranchFromNode(world, startCutPos, Direction.DOWN, false, playerEntity); // Feed all the tree drops to drop bi-consumer @@ -36,7 +45,19 @@ public class DynamicTree extends AbstractBlockBreakQueue { start.getLogDrops(world, startCutPos, data.species, data.woodVolume).forEach(stack -> drop.accept(startCutPos, stack)); } + private BranchBlock setBranchToShellMuse(World world, BlockState state){ + Block block = state.getBlock(); + if (block instanceof TrunkShellBlock){ + TrunkShellBlock.ShellMuse muse = ((TrunkShellBlock)block).getMuse(world, startCutPos); + if (muse != null){ + startCutPos = muse.pos; //the cut pos is moved to the center of the trunk + return TreeHelper.getBranch(muse.state); + } + } + return null; + } + public static boolean isDynamicBranch(Block block) { - return TreeHelper.isBranch(block); + return TreeHelper.isBranch(block) || block instanceof TrunkShellBlock; } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/saw/SawTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/saw/SawTileEntity.java index 1af805fd6..2e4edd2a1 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/saw/SawTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/saw/SawTileEntity.java @@ -410,6 +410,8 @@ public class SawTileEntity extends BlockBreakingKineticTileEntity { return true; if (block instanceof ChorusPlantBlock) return true; + if (TreeCutter.canDynamicTreeCutFrom(block)) + return true; return false; } From abd6e9780161851d2fac4cf47d287caa0b72b8b9 Mon Sep 17 00:00:00 2001 From: Daniel Amberson Date: Sun, 4 Jul 2021 12:15:29 -0500 Subject: [PATCH 007/118] polished bell assets: part 1 the currently named "peculiar bell" has been tweaked, and the stands for the bell have been completely remodeled the cursed bell has not been touched, waiting on an animated texture from kryppers before proceeding --- .../models/block/peculiar_bell/bell.json | 25 ++++--- .../block/peculiar_bell/block_ceiling.json | 66 ++++++++++++----- .../peculiar_bell/block_double_wall.json | 70 ++++++++++-------- .../block/peculiar_bell/block_floor.json | 60 +++++++++++---- .../peculiar_bell/block_single_wall.json | 57 +++++++------- .../models/block/peculiar_bell/item.json | 25 ++++--- .../assets/create/textures/block/bell.png | Bin 836 -> 727 bytes .../create/textures/block/bell_frame.png | Bin 561 -> 782 bytes .../create/textures/block/bell_frame_side.png | Bin 586 -> 700 bytes 9 files changed, 187 insertions(+), 116 deletions(-) diff --git a/src/main/resources/assets/create/models/block/peculiar_bell/bell.json b/src/main/resources/assets/create/models/block/peculiar_bell/bell.json index d6e26bbc3..2e6436a27 100644 --- a/src/main/resources/assets/create/models/block/peculiar_bell/bell.json +++ b/src/main/resources/assets/create/models/block/peculiar_bell/bell.json @@ -2,12 +2,12 @@ "credit": "Made with Blockbench", "textures": { "0": "create:block/bell", - "particle": "create:block/bell" + "particle": "create:block/bell" }, "elements": [ { - "from": [14, 7, 7], - "to": [16, 9, 9], + "from": [13, 7, 7], + "to": [15, 9, 9], "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 8]}, "faces": { "north": {"uv": [10.5, 6, 9.5, 7], "texture": "#0"}, @@ -19,8 +19,8 @@ } }, { - "from": [0, 7, 7], - "to": [2, 9, 9], + "from": [1, 7, 7], + "to": [3, 9, 9], "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 8]}, "faces": { "north": {"uv": [9.5, 6, 10.5, 7], "texture": "#0"}, @@ -32,8 +32,8 @@ } }, { - "from": [3, 0, 3], - "to": [13, 2, 13], + "from": [3, 1, 3], + "to": [13, 3, 13], "faces": { "north": {"uv": [0, 15, 5, 16], "texture": "#0"}, "east": {"uv": [0, 15, 5, 16], "texture": "#0"}, @@ -44,8 +44,8 @@ } }, { - "from": [4, 2, 4], - "to": [12, 11, 12], + "from": [4, 3, 4], + "to": [12, 12, 12], "faces": { "north": {"uv": [8, 0, 12, 4.5], "texture": "#0"}, "east": {"uv": [8, 0, 12, 4.5], "texture": "#0"}, @@ -55,8 +55,8 @@ } }, { - "from": [7, 11, 7], - "to": [9, 15, 9], + "from": [7, 12, 7], + "to": [9, 16, 9], "faces": { "north": {"uv": [8, 6, 9, 8], "texture": "#0"}, "east": {"uv": [8, 6, 9, 8], "texture": "#0"}, @@ -86,7 +86,8 @@ { "name": "Bell", "origin": [8, 8, 8], + "color": 0, "children": [0, 1, 2, 3, 4, 5, 6] } ] -} +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/peculiar_bell/block_ceiling.json b/src/main/resources/assets/create/models/block/peculiar_bell/block_ceiling.json index 2616af7a7..97d3b5e92 100644 --- a/src/main/resources/assets/create/models/block/peculiar_bell/block_ceiling.json +++ b/src/main/resources/assets/create/models/block/peculiar_bell/block_ceiling.json @@ -3,35 +3,67 @@ "textures": { "1": "create:block/bell_frame_side", "2": "create:block/bell_frame", - "particle": "create:block/bell" + "particle": "create:block/bell" }, "elements": [ { - "from": [0.1, 0, 0], - "to": [15.9, 16, 16], - "rotation": {"angle": 0, "axis": "x", "origin": [8, 8, 8]}, + "from": [15, 4, 4], + "to": [16, 12, 12], + "rotation": {"angle": 0, "axis": "y", "origin": [0, 16, 0]}, "faces": { - "east": {"uv": [0, 0, 16, 16], "rotation": 180, "texture": "#1"}, - "west": {"uv": [0, 0, 16, 16], "rotation": 180, "texture": "#1"}, - "up": {"uv": [0, 0, 15.8, 16], "texture": "#2"} + "north": {"uv": [16, 8, 15, 0], "texture": "#2"}, + "east": {"uv": [0, 8, 8, 0], "texture": "#2"}, + "south": {"uv": [1, 8, 0, 0], "texture": "#2"}, + "west": {"uv": [16, 8, 8, 0], "texture": "#2"}, + "up": {"uv": [4, 11, 12, 12], "rotation": 270, "texture": "#1"}, + "down": {"uv": [4, 4, 12, 5], "rotation": 90, "texture": "#1"} } }, { - "from": [15.9, 0, 0], - "to": [0.1, 16, 16], - "rotation": {"angle": 0, "axis": "x", "origin": [8, 8, 8]}, + "from": [0, 4, 4], + "to": [1, 12, 12], + "rotation": {"angle": 0, "axis": "y", "origin": [0, 16, 0]}, "faces": { - "east": {"uv": [0, 0, 16, 16], "rotation": 180, "texture": "#1"}, - "west": {"uv": [0, 0, 16, 16], "rotation": 180, "texture": "#1"}, - "up": {"uv": [0, 0, 16, 16], "texture": "#2"} + "north": {"uv": [16, 8, 15, 0], "texture": "#2"}, + "east": {"uv": [8, 8, 16, 0], "texture": "#2"}, + "south": {"uv": [1, 8, 0, 0], "texture": "#2"}, + "west": {"uv": [8, 8, 0, 0], "texture": "#2"}, + "up": {"uv": [4, 11, 12, 12], "rotation": 270, "texture": "#1"}, + "down": {"uv": [4, 4, 12, 5], "rotation": 90, "texture": "#1"} + } + }, + { + "from": [0, 12, 2], + "to": [2, 16, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [0, 16, 0]}, + "faces": { + "north": {"uv": [14, 16, 16, 12], "texture": "#2"}, + "east": {"uv": [0, 16, 12, 12], "texture": "#2"}, + "south": {"uv": [14, 16, 12, 12], "texture": "#2"}, + "west": {"uv": [12, 12, 0, 8], "texture": "#2"}, + "up": {"uv": [11, 14, 0, 12], "rotation": 90, "texture": "#1"}, + "down": {"uv": [12, 14, 0, 16], "rotation": 270, "texture": "#1"} + } + }, + { + "from": [14, 12, 2], + "to": [16, 16, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [0, 16, 0]}, + "faces": { + "north": {"uv": [16, 16, 14, 12], "texture": "#2"}, + "east": {"uv": [0, 12, 12, 8], "texture": "#2"}, + "south": {"uv": [12, 16, 14, 12], "texture": "#2"}, + "west": {"uv": [12, 16, 0, 12], "texture": "#2"}, + "up": {"uv": [11, 12, 0, 14], "rotation": 90, "texture": "#1"}, + "down": {"uv": [12, 16, 0, 14], "rotation": 270, "texture": "#1"} } } ], "groups": [ { - "name": "Frame", + "name": "block_double_wall", "origin": [8, 8, 8], + "color": 0, "children": [0, 1] - } - ] -} + }, 2, 3] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/peculiar_bell/block_double_wall.json b/src/main/resources/assets/create/models/block/peculiar_bell/block_double_wall.json index 52a9e266d..623a83eb7 100644 --- a/src/main/resources/assets/create/models/block/peculiar_bell/block_double_wall.json +++ b/src/main/resources/assets/create/models/block/peculiar_bell/block_double_wall.json @@ -1,32 +1,40 @@ { - "credit": "Made with Blockbench", - "textures": { - "1": "create:block/bell_frame_side", - "particle": "create:block/bell" - }, - "elements": [ - { - "from": [0.1, 0, 0], - "to": [15.9, 16, 16], - "faces": { - "south": {"uv": [0, 0, 16, 16], "texture": "#1"}, - "north": {"uv": [0, 0, 16, 16], "texture": "#1"} - } - }, - { - "from": [15.9, 0, 0], - "to": [0.1, 16, 16], - "faces": { - "south": {"uv": [0, 0, 16, 16], "texture": "#1"}, - "north": {"uv": [0, 0, 16, 16], "texture": "#1"} - } - } - ], - "groups": [ - { - "name": "Frame", - "origin": [8, 8, 8], - "children": [0, 1] - } - ] -} + "credit": "Made with Blockbench", + "textures": { + "1": "create:block/bell_frame_side", + "particle": "create:block/bell" + }, + "elements": [ + { + "from": [4, 4, 0], + "to": [12, 12, 1], + "faces": { + "north": {"uv": [4, 4, 12, 12], "texture": "#1"}, + "east": {"uv": [5, 4, 4, 12], "texture": "#1"}, + "south": {"uv": [12, 4, 4, 12], "texture": "#1"}, + "west": {"uv": [12, 4, 11, 12], "texture": "#1"}, + "up": {"uv": [12, 4, 4, 5], "texture": "#1"}, + "down": {"uv": [12, 11, 4, 12], "texture": "#1"} + } + }, + { + "from": [4, 4, 15], + "to": [12, 12, 16], + "faces": { + "north": {"uv": [4, 4, 12, 12], "texture": "#1"}, + "east": {"uv": [5, 4, 4, 12], "texture": "#1"}, + "south": {"uv": [12, 4, 4, 12], "texture": "#1"}, + "west": {"uv": [12, 4, 11, 12], "texture": "#1"}, + "up": {"uv": [12, 4, 4, 5], "texture": "#1"}, + "down": {"uv": [12, 11, 4, 12], "texture": "#1"} + } + } + ], + "groups": [ + { + "name": "Frame", + "origin": [8, 8, 8], + "color": 0, + "children": [] + }, 0, 1] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/peculiar_bell/block_floor.json b/src/main/resources/assets/create/models/block/peculiar_bell/block_floor.json index 6738c29b4..63cc96caa 100644 --- a/src/main/resources/assets/create/models/block/peculiar_bell/block_floor.json +++ b/src/main/resources/assets/create/models/block/peculiar_bell/block_floor.json @@ -3,33 +3,63 @@ "textures": { "1": "create:block/bell_frame_side", "2": "create:block/bell_frame", - "particle": "create:block/bell" + "particle": "create:block/bell" }, "elements": [ { - "from": [0.1, 0, 0], - "to": [15.9, 16, 16], + "from": [15, 4, 4], + "to": [16, 12, 12], "faces": { - "east": {"uv": [0, 0, 16, 16], "texture": "#1"}, - "west": {"uv": [0, 0, 16, 16], "texture": "#1"}, - "down": {"uv": [0, 0, 15.8, 16], "texture": "#2"} + "north": {"uv": [16, 0, 15, 8], "texture": "#2"}, + "east": {"uv": [0, 0, 8, 8], "texture": "#2"}, + "south": {"uv": [1, 0, 0, 8], "texture": "#2"}, + "west": {"uv": [16, 0, 8, 8], "texture": "#2"}, + "up": {"uv": [12, 4, 4, 5], "rotation": 90, "texture": "#1"}, + "down": {"uv": [12, 11, 4, 12], "rotation": 270, "texture": "#1"} } }, { - "from": [15.9, 0, 0], - "to": [0.1, 16, 16], + "from": [0, 4, 4], + "to": [1, 12, 12], "faces": { - "east": {"uv": [0, 0, 16, 16], "texture": "#1"}, - "west": {"uv": [0, 0, 16, 16], "texture": "#1"}, - "down": {"uv": [0, 0, 16, 16], "texture": "#2"} + "north": {"uv": [16, 0, 15, 8], "texture": "#2"}, + "east": {"uv": [8, 0, 16, 8], "texture": "#2"}, + "south": {"uv": [1, 0, 0, 8], "texture": "#2"}, + "west": {"uv": [8, 0, 0, 8], "texture": "#2"}, + "up": {"uv": [12, 4, 4, 5], "rotation": 90, "texture": "#1"}, + "down": {"uv": [12, 11, 4, 12], "rotation": 270, "texture": "#1"} + } + }, + { + "from": [0, 0, 2], + "to": [2, 4, 14], + "faces": { + "north": {"uv": [14, 12, 16, 16], "texture": "#2"}, + "east": {"uv": [0, 12, 12, 16], "texture": "#2"}, + "south": {"uv": [14, 12, 12, 16], "texture": "#2"}, + "west": {"uv": [12, 8, 0, 12], "texture": "#2"}, + "up": {"uv": [0, 14, 12, 16], "rotation": 270, "texture": "#1"}, + "down": {"uv": [0, 14, 11, 12], "rotation": 90, "texture": "#1"} + } + }, + { + "from": [14, 0, 2], + "to": [16, 4, 14], + "faces": { + "north": {"uv": [16, 12, 14, 16], "texture": "#2"}, + "east": {"uv": [0, 8, 12, 12], "texture": "#2"}, + "south": {"uv": [12, 12, 14, 16], "texture": "#2"}, + "west": {"uv": [12, 12, 0, 16], "texture": "#2"}, + "up": {"uv": [0, 16, 12, 14], "rotation": 270, "texture": "#1"}, + "down": {"uv": [0, 12, 11, 14], "rotation": 90, "texture": "#1"} } } ], "groups": [ { - "name": "Frame", + "name": "block_double_wall", "origin": [8, 8, 8], + "color": 0, "children": [0, 1] - } - ] -} + }, 2, 3] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/peculiar_bell/block_single_wall.json b/src/main/resources/assets/create/models/block/peculiar_bell/block_single_wall.json index 7bee57b84..605614397 100644 --- a/src/main/resources/assets/create/models/block/peculiar_bell/block_single_wall.json +++ b/src/main/resources/assets/create/models/block/peculiar_bell/block_single_wall.json @@ -1,30 +1,29 @@ { - "credit": "Made with Blockbench", - "textures": { - "1": "create:block/bell_frame_side", - "particle": "create:block/bell" - }, - "elements": [ - { - "from": [0.1, 0, 0], - "to": [15.9, 16, 16], - "faces": { - "north": {"uv": [0, 0, 16, 16], "texture": "#1"} - } - }, - { - "from": [15.9, 0, 0], - "to": [0.1, 16, 16], - "faces": { - "north": {"uv": [0, 0, 16, 16], "texture": "#1"} - } - } - ], - "groups": [ - { - "name": "Frame", - "origin": [8, 8, 8], - "children": [0, 1] - } - ] -} + "credit": "Made with Blockbench", + "textures": { + "1": "create:block/bell_frame_side", + "particle": "create:block/bell" + }, + "elements": [ + { + "from": [4, 4, 0], + "to": [12, 12, 1], + "faces": { + "north": {"uv": [4, 4, 12, 12], "texture": "#1"}, + "east": {"uv": [4, 4, 5, 12], "texture": "#1"}, + "south": {"uv": [12, 4, 4, 12], "texture": "#1"}, + "west": {"uv": [11, 4, 12, 12], "texture": "#1"}, + "up": {"uv": [12, 4, 4, 5], "texture": "#1"}, + "down": {"uv": [12, 11, 4, 12], "texture": "#1"} + } + } + ], + "groups": [ + { + "name": "Frame", + "origin": [8, 8, 8], + "color": 0, + "children": [0] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/peculiar_bell/item.json b/src/main/resources/assets/create/models/block/peculiar_bell/item.json index f79362efc..d4d7060da 100644 --- a/src/main/resources/assets/create/models/block/peculiar_bell/item.json +++ b/src/main/resources/assets/create/models/block/peculiar_bell/item.json @@ -1,14 +1,14 @@ { "credit": "Made with Blockbench", - "parent": "block/block", + "parent": "block/block", "textures": { "0": "create:block/bell", "particle": "create:block/bell" }, "elements": [ { - "from": [14, 7, 7], - "to": [16, 9, 9], + "from": [13, 7, 7], + "to": [15, 9, 9], "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 8]}, "faces": { "north": {"uv": [10.5, 6, 9.5, 7], "texture": "#0"}, @@ -20,8 +20,8 @@ } }, { - "from": [0, 7, 7], - "to": [2, 9, 9], + "from": [1, 7, 7], + "to": [3, 9, 9], "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 8]}, "faces": { "north": {"uv": [9.5, 6, 10.5, 7], "texture": "#0"}, @@ -33,8 +33,8 @@ } }, { - "from": [3, 0, 3], - "to": [13, 2, 13], + "from": [3, 1, 3], + "to": [13, 3, 13], "faces": { "north": {"uv": [0, 15, 5, 16], "texture": "#0"}, "east": {"uv": [0, 15, 5, 16], "texture": "#0"}, @@ -45,8 +45,8 @@ } }, { - "from": [4, 2, 4], - "to": [12, 11, 12], + "from": [4, 3, 4], + "to": [12, 12, 12], "faces": { "north": {"uv": [8, 0, 12, 4.5], "texture": "#0"}, "east": {"uv": [8, 0, 12, 4.5], "texture": "#0"}, @@ -56,8 +56,8 @@ } }, { - "from": [7, 11, 7], - "to": [9, 15, 9], + "from": [7, 12, 7], + "to": [9, 16, 9], "faces": { "north": {"uv": [8, 6, 9, 8], "texture": "#0"}, "east": {"uv": [8, 6, 9, 8], "texture": "#0"}, @@ -87,7 +87,8 @@ { "name": "Bell", "origin": [8, 8, 8], + "color": 0, "children": [0, 1, 2, 3, 4, 5, 6] } ] -} +} \ No newline at end of file diff --git a/src/main/resources/assets/create/textures/block/bell.png b/src/main/resources/assets/create/textures/block/bell.png index cd05091a99c2ccee7bb9cdfd7e98f2d81da5b7af..df12de3909e7ae10e17e643b1be53528516654d5 100644 GIT binary patch delta 683 zcmV;c0#yCP2G<3UBpLy8Qb$4nuFf3k00004XF*Lt006O%3;baPks%m=Y)M2xR9Hvt zmpe-&K@i7l7Q@>>Gx5cOnfORfK@klM48%k<5Wm1(Bp9e%Vj`!3(TRQmAGjhW1_lO- zD5!~Yn0bi1D;jyh92lH1H~*Tcxpth{?Vbrt{J}y$s=FRtT|H}&kK-IT-1u`r_dknt zx^vB4p?jo->RKC!K7HnYzGV&Y+Qso6Cs$iVP0d-VYj5Pa`>O)o-Pm;d@WTDLdBB^L zPQN=m`k54O!j@jLr?Rk@ejxR(`6_!RDP4Jv@hT)c{pFI}nobc65Pq zESTOn38E4OJccYHBCv8q#*JPWQ4WO?)&J2bPzD2-1eKHnk&!ij0TIf9crGCaXk!d> zYygn+(jijT&ka-9052S7=&nJeaOMcRfVSiT=fL{%)tjU%2V}8EIA1$)4JvXwd^BF@ z3v6)b#M>ma&Q^!K>*vz-Wv^lm0Cf!rk`Va0AW9C8f5%=!9A$8gFfg`sq-B7*My{HQ znj<=i%~xx(x9ydGSLJ{#*7)62Xn9-?uApw%t?aDj*xwz59tBFq)$>MVkUvk4HrdaA zX}45Lt)HM2l{DPeC8z^Qfro;4YeH%Ra2@4JN~ldpZ9so-HUEH|vk9pUfKpShKlnf; zcnjj5SG9_T9~D8B(W?Cl{2EruV)fxcDZRUW@@G7nay7w!H>2)@CS-IzEFc3TqLc%S zVGc5;Xx9N45v5$foQ^YL5*MN$`C*#**5UV(lh}YHbw7&41}w~9(&pALzn2_s1K=^T zJr2x4#*~cCA_+IHT9grT4U-(n`xl~De=cJ_t+Bajfzic^`g<*;@k|e*e~%EX$Z9lW R1poj507*p#PDHLkV1gvc$Q&AK?FJv@>oeUwCf?KH(p%tmY4vymB zs0C+#2GK#mS=2=Y6~S3M6zY`0!9ggAm@Y=?Rwzjg-RuxY;d#Gv-*ayy$-!-MXGmzc=Kl)91rFK%k`<z(WTz1pp@5bd$iu9a9fJ%GC%!R2|4{(4Llie`(e1FhdLuS@8AEWz$ra z&fRQGY(VP8Z7|1m*6oXlXbS@rnv*+)Rl_`&s0b!r9@tN#xJ|2lAY~1L4*%#(xdbmZ zzfVsJTkCH9w5x>kGKPV!-Hu}v{^v9fv2gH2!DIZ{y5*e+aOyV91vqwOXYrF801qSt zXLqLoVvpi9e-;Vd_pdr`hTZKZJeb@7R_e!Xm^HiSeNMkPuG|2yC6DN+0(mMBtlz&F z{(GT}y5iPCcPB3uYR7ea9yPSXSmZ_2-LcQ5xR5+_@V*0xR@>ZUkH1l*VIa5-vs_H>Q97=J z8Jq{vO5Oa%t6dmMG_Erw@c0<&0rx8yhKZ+E+7r$rwyG5E0|IwC*U$bWhcr)S>fPht ZUj&)85vR6~L*M`a002ovPDHLkV1j#>e^USe diff --git a/src/main/resources/assets/create/textures/block/bell_frame.png b/src/main/resources/assets/create/textures/block/bell_frame.png index 4855d47a15ec8551ca5c5c221bc62b1d2c7a9cd7..959d0d165aad7b4bf3b7ecf28ef2719c52faa674 100644 GIT binary patch delta 707 zcmV;!0zCb(1daxfEhSKLZ)Rz1WdHyu&y|rqNW(xJ#a~mkA{9Y9NO8zeoh%d;ag->L zQZ9d};K6Y}-ralLy#s`LnQ2y64A6AjOvNQJn_CeBujoM-gAfsunPnu>3mJ4AU-$6w z^)AY@@W0Wo<}C*JMB-Uym^Se`@${x`aNZ{lv68G3pA(OpbV1@rt}7nDaW1+n@XU~z zNzD<5h{a+XD{ah5rbawP98oo$@`bF&D(8PK&RV(3n)l={4CeLaG}md4AdW>Okfe?j zRI!0FY(#0*NwJWkeW`;#?D~`BQpmLdMvi$@ph0&1;D7MDTdOcR;Uxtnp!>yfK1PAS zF3_ks&iAq7G)@5jGjOH1{FOQ|^GSNGrA3Z_fo`H!`LZN>E zyr0oG<$$4Epl{Xdt+|iW2OvXTE!_YIhrn2ove!DiySKf!KhL=RLHYsFg>uc~kyOwC z000SaNLh0L01FcU01FcV0GgZ_0003mNklKR`BICgvKKeHsI;y z$50Ve@buy%2D2Dz27K}?P&SzJ@Xmi{hWpR|FgVx>g2h05Gcb#R;n>=%U^y6w&d~?U zGeP-aj#aQWSmMCp_fSy;0BKf~WPxKCfExe;AXk7eDFAK&%z4;s2LX_`JaV2BZmOy91Pu3_t;h3$TFVSXvjNsBESWR2TwaF#vx8p$#73 z^uWmI!Uz=t1IGXV_xyi)d>uR*u>p{u!A`df!eRhgLPC!PWdBO*$}%wWR-ziPs@VQN zast5zK=B{edl1!tlhb|v<8nGWfJL8KMghaA856)XI2w`T6&Jvz2A&Q;3h-eR0L!JI p+}Igq{U5?39)Q9Ek~dfw00?Y{03*jds!$<0e(*o|-K|-ioN$wZaiIIfwm(LJ zz%J0N+xGXdZ8uK<|1)ruc)TT1i* z000JJOGiWiDgY_~Dx6b>IsgCw32;bRa{vGf6951U69E94oEQKA00(qQO+^Rg1{xA1 z3N$7iYybcNElET{R5;6HJUQLxKLa!cfQf-Zzyf2KXKrC6MI+4R6uV&5fKdYmhXITO ao*M!F=?Qo4#Z3tS0000L zQZ9d};K6Y}-ralLy#s`LnQ2y64A6AjOvNQJn_CeBujoM-gAfsunPnu>3mJ4AU-$6w z^)AY@@W0Wo<}C*JMB-Uym^Se`@${x`aNZ{lv68G3pA(OpbV1@rt}7nDaW1+n@XU~z zNzD<5h{a+XD{ah5rbawP98oo$@`bF&D(8PK&RV(3n)l={4CeLaG}md4AdW>Okfe?j zRI!0FY(#0*NwJWkeW`;#?D~`BQpmLdMvi$@ph0&1;D7MDTdOcR;Uxtnp!>yfK1PAS zF3_ks&iAq7G)@5jGjOH1{FOQ|^GSNGrA3Z_fo`H!`LZN>E zyr0oG<$$4Epl{Xdt+|iW2OvXTE!_YIhrn2ove!DiySKf!KhL=RLHYsFg>uc~kyOwC z000SaNLh0L01FcU01FcV0GgZ_0002pNklee^!@C!s89smi4OM?Rqya`4{QunkpMl2|%0mOd@L=SvMA3uQ08pS| z1E7F3&)kBdhY3n!fMaW~GAx~P5spCs6btA8rvaeoQj}zYV_X2I0mK5F1~}LXGRUj& z!Z9v@(*S9GITVZwV8p_zV*CFf|KkGX%Z{Q(BOwjw0Nns4QZ!=&jIbQHx?w;ELui8s zR2Tt3i3*e^Kys&+9K}dTj3=l2{Ku9+&;ckWK?Y{03*jds!$<0e(*o|-K|-ioN$wZaiIIfwm(LJ zz%J0N+xGXdZ8uK<|1)ruc)TT1i* z000JJOGiWiDgY_~Dx6b>IsgCw32;bRa{vGf6951U69E94oEQKA00(qQO+^Rg1{xA0 z6CVsCYXATMMoC0LR5;6HU>F619Gp#@?(_fTbf5qD)G*@HjLbLB+=5jt6Q!9|-)#kR{00000NkvXXu0mjf6~5;2 From 202f81aa7c23f1623644d2647fd0a45889f42360 Mon Sep 17 00:00:00 2001 From: reidbhuntley Date: Sun, 4 Jul 2021 14:23:34 -0400 Subject: [PATCH 008/118] The Polishing - Added new Potato Cannon projectile types and tweaked values of existing types - Potato projectiles can now catch fire and ignite entities like arrows - Made splitting potato projectiles more consistent - Lectern Controller can now be pick-blocked in creative and be placed by Schematicannon - Fixed Schematicannon treating schematics with a single block in them as empty - Soul base particles now also disappear early if their location gets lit - Renamed Cursed Bell to Haunted Bell --- src/generated/resources/.cache/cache | 42 ++--- .../{cursed_bell.json => haunted_bell.json} | 64 +++---- .../resources/assets/create/lang/en_ud.json | 2 +- .../resources/assets/create/lang/en_us.json | 14 +- .../assets/create/lang/unfinished/de_de.json | 14 +- .../assets/create/lang/unfinished/es_es.json | 14 +- .../assets/create/lang/unfinished/es_mx.json | 14 +- .../assets/create/lang/unfinished/fr_fr.json | 14 +- .../assets/create/lang/unfinished/it_it.json | 14 +- .../assets/create/lang/unfinished/ja_jp.json | 14 +- .../assets/create/lang/unfinished/ko_kr.json | 14 +- .../assets/create/lang/unfinished/nl_nl.json | 14 +- .../assets/create/lang/unfinished/pl_pl.json | 14 +- .../assets/create/lang/unfinished/pt_br.json | 14 +- .../assets/create/lang/unfinished/ru_ru.json | 14 +- .../assets/create/lang/unfinished/zh_cn.json | 14 +- .../assets/create/lang/unfinished/zh_tw.json | 14 +- .../create/models/item/cursed_bell.json | 3 - .../create/models/item/haunted_bell.json | 3 + .../resources/assets/create/sounds.json | 24 +-- .../data/create/advancements/aesthetics.json | 4 +- .../{cursed_bell.json => haunted_bell.json} | 2 +- .../data/create/tags/blocks/brittle.json | 2 +- .../com/simibubi/create/AllBlockPartials.java | 2 +- .../java/com/simibubi/create/AllBlocks.java | 10 +- .../com/simibubi/create/AllEntityTypes.java | 2 +- .../com/simibubi/create/AllSoundEvents.java | 4 +- .../com/simibubi/create/AllTileEntities.java | 8 +- .../MysteriousItemConversionCategory.java | 2 +- ...edBellBlock.java => HauntedBellBlock.java} | 14 +- ...java => HauntedBellMovementBehaviour.java} | 6 +- ...BellPulser.java => HauntedBellPulser.java} | 6 +- ...Entity.java => HauntedBellTileEntity.java} | 8 +- .../curiosities/bell/PeculiarBellBlock.java | 10 +- .../curiosities/bell/SoulBaseParticle.java | 11 +- .../curiosities/bell/SoulParticle.java | 15 +- .../curiosities/bell/SoulPulseEffect.java | 2 +- .../curiosities/weapons/PotatoCannonItem.java | 25 ++- .../weapons/PotatoCannonProjectileTypes.java | 171 +++++++++++++++--- .../weapons/PotatoProjectileEntity.java | 10 +- .../item/LecternControllerBlock.java | 20 +- .../item/LecternControllerTileEntity.java | 6 + .../content/schematics/SchematicPrinter.java | 4 +- .../create/foundation/utility/VecHelper.java | 14 ++ .../assets/create/lang/default/tooltips.json | 8 +- .../{cursed_bell => haunted_bell}/bell.json | 0 .../block_ceiling.json | 0 .../block_double_wall.json | 0 .../block_floor.json | 0 .../block_single_wall.json | 0 .../{cursed_bell => haunted_bell}/item.json | 0 ...l_convert.ogg => haunted_bell_convert.ogg} | Bin ...rsed_bell_use.ogg => haunted_bell_use.ogg} | Bin 53 files changed, 436 insertions(+), 264 deletions(-) rename src/generated/resources/assets/create/blockstates/{cursed_bell.json => haunted_bell.json} (55%) delete mode 100644 src/generated/resources/assets/create/models/item/cursed_bell.json create mode 100644 src/generated/resources/assets/create/models/item/haunted_bell.json rename src/generated/resources/data/create/loot_tables/blocks/{cursed_bell.json => haunted_bell.json} (86%) rename src/main/java/com/simibubi/create/content/curiosities/bell/{CursedBellBlock.java => HauntedBellBlock.java} (63%) rename src/main/java/com/simibubi/create/content/curiosities/bell/{CursedBellMovementBehaviour.java => HauntedBellMovementBehaviour.java} (84%) rename src/main/java/com/simibubi/create/content/curiosities/bell/{CursedBellPulser.java => HauntedBellPulser.java} (87%) rename src/main/java/com/simibubi/create/content/curiosities/bell/{CursedBellTileEntity.java => HauntedBellTileEntity.java} (91%) rename src/main/resources/assets/create/models/block/{cursed_bell => haunted_bell}/bell.json (100%) rename src/main/resources/assets/create/models/block/{cursed_bell => haunted_bell}/block_ceiling.json (100%) rename src/main/resources/assets/create/models/block/{cursed_bell => haunted_bell}/block_double_wall.json (100%) rename src/main/resources/assets/create/models/block/{cursed_bell => haunted_bell}/block_floor.json (100%) rename src/main/resources/assets/create/models/block/{cursed_bell => haunted_bell}/block_single_wall.json (100%) rename src/main/resources/assets/create/models/block/{cursed_bell => haunted_bell}/item.json (100%) rename src/main/resources/assets/create/sounds/{cursed_bell_convert.ogg => haunted_bell_convert.ogg} (100%) rename src/main/resources/assets/create/sounds/{cursed_bell_use.ogg => haunted_bell_use.ogg} (100%) diff --git a/src/generated/resources/.cache/cache b/src/generated/resources/.cache/cache index ac128f123..2c3e2d5e0 100644 --- a/src/generated/resources/.cache/cache +++ b/src/generated/resources/.cache/cache @@ -68,7 +68,6 @@ f0031f5e970b3d5695472ed384950b8631b015ed assets/create/blockstates/creative_moto fe2f78b94c20944399101e7369e2d43324297fb6 assets/create/blockstates/crushing_wheel.json a1dd6cb3daa97ea871290ef7b178d28b564ee2a2 assets/create/blockstates/crushing_wheel_controller.json b1126c191877cff86b4e2de83e1fcbd151451cb7 assets/create/blockstates/cuckoo_clock.json -e8f1222b21e8e2e67d18252f7d3c9eefa650d3b9 assets/create/blockstates/cursed_bell.json b496452f2f7dbbba385e1fc10b560ec266e4b5e7 assets/create/blockstates/cyan_sail.json 4de72f65bff4e5d9c8153fa3adeee6b61d6f912b assets/create/blockstates/cyan_seat.json 2c04d57e56849f243aec8a1e769574d24daac1e9 assets/create/blockstates/cyan_valve_handle.json @@ -182,6 +181,7 @@ a5ec5401ba9f3e102a2e1b35837f643847afbca4 assets/create/blockstates/gray_seat.jso 13059309684db0cc7a0f1f4fce2407cf06cce80a assets/create/blockstates/green_seat.json f4a0fc68e8daaa0a47cdc951ced4310057a874b0 assets/create/blockstates/green_valve_handle.json 6ab675fa06317e6d07c0c1a453e7bb43e3f46b3b assets/create/blockstates/hand_crank.json +a895a7a0b47273301f21090882e06b64600e4e54 assets/create/blockstates/haunted_bell.json 4572b90f5d6c586e145f2c7a55664c3cb734bd2b assets/create/blockstates/honey.json be3bef7e091d8b50bfc1c6b7275946d1f636aefd assets/create/blockstates/horizontal_framed_glass.json 18d9fdaa1352a7e2ec91135e46dae5c02ccd8f8f assets/create/blockstates/horizontal_framed_glass_pane.json @@ -410,21 +410,21 @@ a3a11524cd3515fc01d905767b4b7ea782adaf03 assets/create/blockstates/yellow_seat.j 6801fa1f466f172700e573e5b8ee8ee5f9ca4583 assets/create/blockstates/yellow_valve_handle.json 7f39521b211441f5c3e06d60c5978cebe16cacfb assets/create/blockstates/zinc_block.json b7181bcd8182b2f17088e5aa881f374c9c65470c assets/create/blockstates/zinc_ore.json -391e1552053f8fbb148b0bdf2e61f74ae4782100 assets/create/lang/en_ud.json -9d41edd2a78d074f0e80fbc95b6eb9f1303ef7f5 assets/create/lang/en_us.json -f05c04c9b1e79c446492af47a9bfcde73cefd138 assets/create/lang/unfinished/de_de.json -3b2ed3f1b4910e5cc03af089bf2ddfc1421cfc1f assets/create/lang/unfinished/es_es.json -e9ad51b0ad0e1088f121fb2444ef2019c11a2e80 assets/create/lang/unfinished/es_mx.json -f6f8a3f4b3bf685e324c9216b5bb0467c68da796 assets/create/lang/unfinished/fr_fr.json -d05b807ead4cc5dbae6444de5e91525a385d9b20 assets/create/lang/unfinished/it_it.json -055d6b4d130fedfe0232c351663bd9a1934d1a46 assets/create/lang/unfinished/ja_jp.json -064c4e1d5923dc5a75b178940cb36c42f764a6ad assets/create/lang/unfinished/ko_kr.json -762c1bdec8a3f2ecb4047fbb5b975ffbc1792374 assets/create/lang/unfinished/nl_nl.json -43c113585d98162f8cbe5ec02af06f6f8ae55cbc assets/create/lang/unfinished/pl_pl.json -3ab83a3d7d925821d73e9ab6064d3b479d7c21e6 assets/create/lang/unfinished/pt_br.json -51c20e7a0c4b2af9242ee31cf0cf1516b9f312a5 assets/create/lang/unfinished/ru_ru.json -95bf20119493721c3067319f165e2542295918c0 assets/create/lang/unfinished/zh_cn.json -9604bfe416e4f747efda84b419ec99f2b38bd544 assets/create/lang/unfinished/zh_tw.json +adf2c2d7bc22ad8a655f8e69bbd87c80c4302c61 assets/create/lang/en_ud.json +bdb41187a99a7d7af5dde2a26eb6e644dfd10629 assets/create/lang/en_us.json +5c8a02adbe232cec72e6d7d899bacaf0c282ea29 assets/create/lang/unfinished/de_de.json +3963e65414c527a0e4e92da8d55c96ff42213be9 assets/create/lang/unfinished/es_es.json +fbea2bf4a74ebe23ffda354c45784fd2c3b3804c assets/create/lang/unfinished/es_mx.json +b29c33e9df2cfc7dd868ca8f4cc901e1de3f3062 assets/create/lang/unfinished/fr_fr.json +37f1232f8546b27421b1dc9b695afe3794008abf assets/create/lang/unfinished/it_it.json +30c99e865611944878eda5d76fe4a25db3169f4e assets/create/lang/unfinished/ja_jp.json +415152cfe1167a4cb7d6bbed86ba9f93e5ddab33 assets/create/lang/unfinished/ko_kr.json +4892bbd017e2eb57d7d21a864d44e12e5e372feb assets/create/lang/unfinished/nl_nl.json +0f5a4a40a433042bdfe1ab4c1145eb4c0315f567 assets/create/lang/unfinished/pl_pl.json +87c7009c0ff6cec3e7566f79adc7d46b791e04c2 assets/create/lang/unfinished/pt_br.json +3e7c8a28ae968f1953f611878ab002722f17dd51 assets/create/lang/unfinished/ru_ru.json +e7191fb4ea0a56f638b99f5bc5b7cf21bf487f45 assets/create/lang/unfinished/zh_cn.json +11d4948953f19bfe823238790d573895ddc4fb16 assets/create/lang/unfinished/zh_tw.json 487a511a01b2a4531fb672f917922312db78f958 assets/create/models/block/acacia_window.json b48060cba1a382f373a05bf0039054053eccf076 assets/create/models/block/acacia_window_pane_noside.json 3066db1bf03cffa1a9c7fbacf47ae586632f4eb3 assets/create/models/block/acacia_window_pane_noside_alt.json @@ -1299,7 +1299,6 @@ b359064405d189e2802969715cd5f682ddbf0bb1 assets/create/models/item/crushed_urani 2bb791db62dce6bf2e2227f9b607c131828471fd assets/create/models/item/crushed_zinc_ore.json 823c91f63565db54ec3944a1e90e7aee18e41062 assets/create/models/item/crushing_wheel.json dae5cffa4e1263d6a113469f79fba8695fa8232a assets/create/models/item/cuckoo_clock.json -9826c00050ba493f844e8812cc45153a156c5317 assets/create/models/item/cursed_bell.json 3e3edc9ccded444496d3336926b93bbf1234cd84 assets/create/models/item/cyan_seat.json 523cd531eadaadc45fb356ca58b99a8fe206c3a7 assets/create/models/item/cyan_valve_handle.json f786a43e296d9f10d7c302fe3ae9cddf4ba9984e assets/create/models/item/dark_oak_window.json @@ -1419,6 +1418,7 @@ e7daa31c1fc445d542bad476dfe1d6a8811f2070 assets/create/models/item/gray_seat.jso ecb9f32f62d3fa43fb226ab85adc2eb229fdfb77 assets/create/models/item/green_valve_handle.json 398b1a7c76c7bdb6a23b1248fdce98f6d835467f assets/create/models/item/hand_crank.json dee43bf1a9c211a752fac2c07aeba123f7f0c914 assets/create/models/item/handheld_worldshaper.json +bdbc76719ebf3dc28b013d30fb00dc6ce92b0ceb assets/create/models/item/haunted_bell.json f0d5af58e23e2705b3ef675c30bdf85ed9567c57 assets/create/models/item/honey_bucket.json 068729724f5f7b276b9bc378e533898a92e8debe assets/create/models/item/honeyed_apple.json 955e8accadb47f9b360e5fd48cd959c507b00f2d assets/create/models/item/horizontal_framed_glass.json @@ -1659,8 +1659,8 @@ d080b1b25e5bc8baf5aee68691b08c7f12ece3b0 assets/create/models/item/windmill_bear 866fbb0ce2878a73e0440d1caf6534c8bd7c384f assets/create/models/item/zinc_ingot.json a80fb25a0b655e76be986b5b49fcb0f03461a1ab assets/create/models/item/zinc_nugget.json b1689617190c05ef34bd18456b0c7ae09bb3210f assets/create/models/item/zinc_ore.json -f3231c27d43ff511b7d8532603111706ebcc155e assets/create/sounds.json -5d0cc4c0255dc241e61c173b31ddca70c88d08e4 data/create/advancements/aesthetics.json +bbe7fc4aef29420319f59d02d4cd376a78244e70 assets/create/sounds.json +0f1b4b980afba9bf2caf583b88e261bba8b10313 data/create/advancements/aesthetics.json 187921fa131b06721bfaf63f2623a28c141aae9a data/create/advancements/andesite_alloy.json 0ea2db7173b5be28b289ea7c9a6a0cf5805c60c7 data/create/advancements/andesite_casing.json 83c046bd200623933545c9e4326f782fb02c87fa data/create/advancements/arm_blaze_burner.json @@ -2463,7 +2463,6 @@ ba084fc3c680c9dea0d03fc664a831dfed18e52e data/create/loot_tables/blocks/crimson_ c28fa42746a4d5ca2f824001b67e58673810169e data/create/loot_tables/blocks/crushing_wheel.json 205f5899101262f31f5c1a88bb7d954918d08d04 data/create/loot_tables/blocks/crushing_wheel_controller.json d370ee874b5b6b98e9a8c368218fe61f644d956d data/create/loot_tables/blocks/cuckoo_clock.json -da983da67346f3dda63505a83f59db6f8131f69b data/create/loot_tables/blocks/cursed_bell.json 28ae0ee8a0b1fb6becae6264de687fe17940708e data/create/loot_tables/blocks/cyan_sail.json 49a14b9e93abdf02a7aef9c0c4085ac89617fae4 data/create/loot_tables/blocks/cyan_seat.json fe24fd296812fea3f838defa2ca6270523d9d48e data/create/loot_tables/blocks/cyan_valve_handle.json @@ -2577,6 +2576,7 @@ d014357b3a467b23473c8223f32471a04a9ff94c data/create/loot_tables/blocks/gray_sea a71599eecd3f1179e3d0367623460e798828aa6d data/create/loot_tables/blocks/green_seat.json 865ebead9601b29e6326dc9e1d4c1ca92f3b7a3b data/create/loot_tables/blocks/green_valve_handle.json 9bdc47ea3ffc52f037f12f40f387e6b72a352c4e data/create/loot_tables/blocks/hand_crank.json +c61b386376d19aaf89df3447a26b976a672efec5 data/create/loot_tables/blocks/haunted_bell.json 22012e7759f1dbccbb06bcaf0311a54190270825 data/create/loot_tables/blocks/horizontal_framed_glass.json 5d3f585539942f13bbc458a0a002849c1f034fc1 data/create/loot_tables/blocks/horizontal_framed_glass_pane.json 1b28cc5e1e535aa0c62d4a75ad76fcb40bf6232c data/create/loot_tables/blocks/hose_pulley.json @@ -3685,7 +3685,7 @@ d3fdb8ece6cb072a93ddb64a0baad5ac952117a4 data/create/recipes/weathered_limestone 0f3c993eb6dd3f37953f304b8fad15bf60469ef4 data/create/recipes/weathered_limestone_cobblestone_wall_from_weathered_limestone_cobblestone_stonecutting.json 6eceb25fabbb6b389ca35de3b829ad061c9c456a data/create/recipes/weathered_limestone_pillar.json 11667414f73bc2d00bda7c5c1a7d2934bf6e9165 data/create/recipes/weathered_limestone_pillar_from_weathered_limestone_stonecutting.json -558c1052ca384f1c014f9b404d21268764a493ee data/create/tags/blocks/brittle.json +6558ef43f28c92cc558fbfc572f38496f1ed479e data/create/tags/blocks/brittle.json 330bfb3850ba3964b10b1bccbc3cbb9b012cae54 data/create/tags/blocks/fan_heaters.json 57b942386a15c874d1ca9cd6a8032c11a5599fc2 data/create/tags/blocks/fan_transparent.json c81ea194e808985847159b201140d4aa4cbcca65 data/create/tags/blocks/safe_nbt.json diff --git a/src/generated/resources/assets/create/blockstates/cursed_bell.json b/src/generated/resources/assets/create/blockstates/haunted_bell.json similarity index 55% rename from src/generated/resources/assets/create/blockstates/cursed_bell.json rename to src/generated/resources/assets/create/blockstates/haunted_bell.json index 707d3c41f..5f0997b92 100644 --- a/src/generated/resources/assets/create/blockstates/cursed_bell.json +++ b/src/generated/resources/assets/create/blockstates/haunted_bell.json @@ -1,123 +1,123 @@ { "variants": { "attachment=floor,facing=north,powered=false": { - "model": "create:block/cursed_bell/block_floor" + "model": "create:block/haunted_bell/block_floor" }, "attachment=ceiling,facing=north,powered=false": { - "model": "create:block/cursed_bell/block_ceiling" + "model": "create:block/haunted_bell/block_ceiling" }, "attachment=single_wall,facing=north,powered=false": { - "model": "create:block/cursed_bell/block_single_wall" + "model": "create:block/haunted_bell/block_single_wall" }, "attachment=double_wall,facing=north,powered=false": { - "model": "create:block/cursed_bell/block_double_wall" + "model": "create:block/haunted_bell/block_double_wall" }, "attachment=floor,facing=south,powered=false": { - "model": "create:block/cursed_bell/block_floor", + "model": "create:block/haunted_bell/block_floor", "y": 180 }, "attachment=ceiling,facing=south,powered=false": { - "model": "create:block/cursed_bell/block_ceiling", + "model": "create:block/haunted_bell/block_ceiling", "y": 180 }, "attachment=single_wall,facing=south,powered=false": { - "model": "create:block/cursed_bell/block_single_wall", + "model": "create:block/haunted_bell/block_single_wall", "y": 180 }, "attachment=double_wall,facing=south,powered=false": { - "model": "create:block/cursed_bell/block_double_wall", + "model": "create:block/haunted_bell/block_double_wall", "y": 180 }, "attachment=floor,facing=west,powered=false": { - "model": "create:block/cursed_bell/block_floor", + "model": "create:block/haunted_bell/block_floor", "y": 270 }, "attachment=ceiling,facing=west,powered=false": { - "model": "create:block/cursed_bell/block_ceiling", + "model": "create:block/haunted_bell/block_ceiling", "y": 270 }, "attachment=single_wall,facing=west,powered=false": { - "model": "create:block/cursed_bell/block_single_wall", + "model": "create:block/haunted_bell/block_single_wall", "y": 270 }, "attachment=double_wall,facing=west,powered=false": { - "model": "create:block/cursed_bell/block_double_wall", + "model": "create:block/haunted_bell/block_double_wall", "y": 270 }, "attachment=floor,facing=east,powered=false": { - "model": "create:block/cursed_bell/block_floor", + "model": "create:block/haunted_bell/block_floor", "y": 90 }, "attachment=ceiling,facing=east,powered=false": { - "model": "create:block/cursed_bell/block_ceiling", + "model": "create:block/haunted_bell/block_ceiling", "y": 90 }, "attachment=single_wall,facing=east,powered=false": { - "model": "create:block/cursed_bell/block_single_wall", + "model": "create:block/haunted_bell/block_single_wall", "y": 90 }, "attachment=double_wall,facing=east,powered=false": { - "model": "create:block/cursed_bell/block_double_wall", + "model": "create:block/haunted_bell/block_double_wall", "y": 90 }, "attachment=floor,facing=north,powered=true": { - "model": "create:block/cursed_bell/block_floor" + "model": "create:block/haunted_bell/block_floor" }, "attachment=ceiling,facing=north,powered=true": { - "model": "create:block/cursed_bell/block_ceiling" + "model": "create:block/haunted_bell/block_ceiling" }, "attachment=single_wall,facing=north,powered=true": { - "model": "create:block/cursed_bell/block_single_wall" + "model": "create:block/haunted_bell/block_single_wall" }, "attachment=double_wall,facing=north,powered=true": { - "model": "create:block/cursed_bell/block_double_wall" + "model": "create:block/haunted_bell/block_double_wall" }, "attachment=floor,facing=south,powered=true": { - "model": "create:block/cursed_bell/block_floor", + "model": "create:block/haunted_bell/block_floor", "y": 180 }, "attachment=ceiling,facing=south,powered=true": { - "model": "create:block/cursed_bell/block_ceiling", + "model": "create:block/haunted_bell/block_ceiling", "y": 180 }, "attachment=single_wall,facing=south,powered=true": { - "model": "create:block/cursed_bell/block_single_wall", + "model": "create:block/haunted_bell/block_single_wall", "y": 180 }, "attachment=double_wall,facing=south,powered=true": { - "model": "create:block/cursed_bell/block_double_wall", + "model": "create:block/haunted_bell/block_double_wall", "y": 180 }, "attachment=floor,facing=west,powered=true": { - "model": "create:block/cursed_bell/block_floor", + "model": "create:block/haunted_bell/block_floor", "y": 270 }, "attachment=ceiling,facing=west,powered=true": { - "model": "create:block/cursed_bell/block_ceiling", + "model": "create:block/haunted_bell/block_ceiling", "y": 270 }, "attachment=single_wall,facing=west,powered=true": { - "model": "create:block/cursed_bell/block_single_wall", + "model": "create:block/haunted_bell/block_single_wall", "y": 270 }, "attachment=double_wall,facing=west,powered=true": { - "model": "create:block/cursed_bell/block_double_wall", + "model": "create:block/haunted_bell/block_double_wall", "y": 270 }, "attachment=floor,facing=east,powered=true": { - "model": "create:block/cursed_bell/block_floor", + "model": "create:block/haunted_bell/block_floor", "y": 90 }, "attachment=ceiling,facing=east,powered=true": { - "model": "create:block/cursed_bell/block_ceiling", + "model": "create:block/haunted_bell/block_ceiling", "y": 90 }, "attachment=single_wall,facing=east,powered=true": { - "model": "create:block/cursed_bell/block_single_wall", + "model": "create:block/haunted_bell/block_single_wall", "y": 90 }, "attachment=double_wall,facing=east,powered=true": { - "model": "create:block/cursed_bell/block_double_wall", + "model": "create:block/haunted_bell/block_double_wall", "y": 90 } } diff --git a/src/generated/resources/assets/create/lang/en_ud.json b/src/generated/resources/assets/create/lang/en_ud.json index 42c97f237..da95af074 100644 --- a/src/generated/resources/assets/create/lang/en_ud.json +++ b/src/generated/resources/assets/create/lang/en_ud.json @@ -69,7 +69,6 @@ "block.create.crushing_wheel": "\u05DF\u01DD\u01DD\u0265M bu\u0131\u0265sn\u0279\u0186", "block.create.crushing_wheel_controller": "\u0279\u01DD\u05DF\u05DFo\u0279\u0287uo\u0186 \u05DF\u01DD\u01DD\u0265M bu\u0131\u0265sn\u0279\u0186", "block.create.cuckoo_clock": "\u029E\u0254o\u05DF\u0186 oo\u029E\u0254n\u0186", - "block.create.cursed_bell": "\u05DF\u05DF\u01DD\u15FA p\u01DDs\u0279n\u0186", "block.create.cyan_sail": "\u05DF\u0131\u0250S u\u0250\u028E\u0186", "block.create.cyan_seat": "\u0287\u0250\u01DDS u\u0250\u028E\u0186", "block.create.cyan_valve_handle": "\u01DD\u05DFpu\u0250H \u01DD\u028C\u05DF\u0250\u039B u\u0250\u028E\u0186", @@ -183,6 +182,7 @@ "block.create.green_seat": "\u0287\u0250\u01DDS u\u01DD\u01DD\u0279\u2141", "block.create.green_valve_handle": "\u01DD\u05DFpu\u0250H \u01DD\u028C\u05DF\u0250\u039B u\u01DD\u01DD\u0279\u2141", "block.create.hand_crank": "\u029Eu\u0250\u0279\u0186 pu\u0250H", + "block.create.haunted_bell": "\u05DF\u05DF\u01DD\u15FA p\u01DD\u0287un\u0250H", "block.create.honey": "\u028E\u01DDuoH", "block.create.horizontal_framed_glass": "ss\u0250\u05DF\u2141 p\u01DD\u026F\u0250\u0279\u2132 \u05DF\u0250\u0287uoz\u0131\u0279oH", "block.create.horizontal_framed_glass_pane": "\u01DDu\u0250\u0500 ss\u0250\u05DF\u2141 p\u01DD\u026F\u0250\u0279\u2132 \u05DF\u0250\u0287uoz\u0131\u0279oH", diff --git a/src/generated/resources/assets/create/lang/en_us.json b/src/generated/resources/assets/create/lang/en_us.json index 04be2bdfa..22a6fa3d6 100644 --- a/src/generated/resources/assets/create/lang/en_us.json +++ b/src/generated/resources/assets/create/lang/en_us.json @@ -72,7 +72,6 @@ "block.create.crushing_wheel": "Crushing Wheel", "block.create.crushing_wheel_controller": "Crushing Wheel Controller", "block.create.cuckoo_clock": "Cuckoo Clock", - "block.create.cursed_bell": "Cursed Bell", "block.create.cyan_sail": "Cyan Sail", "block.create.cyan_seat": "Cyan Seat", "block.create.cyan_valve_handle": "Cyan Valve Handle", @@ -186,6 +185,7 @@ "block.create.green_seat": "Green Seat", "block.create.green_valve_handle": "Green Valve Handle", "block.create.hand_crank": "Hand Crank", + "block.create.haunted_bell": "Haunted Bell", "block.create.honey": "Honey", "block.create.horizontal_framed_glass": "Horizontal Framed Glass", "block.create.horizontal_framed_glass_pane": "Horizontal Framed Glass Pane", @@ -1191,6 +1191,7 @@ "create.subtitle.blaze_munch": "Blaze Burner munches", "create.subtitle.funnel_flap": "Funnel Flaps", "create.subtitle.schematicannon_finish": "Schematicannon dings", + "create.subtitle.haunted_bell_use": "Haunted Bell tolls", "create.subtitle.scroll_value": "Scroll-input clicks", "create.subtitle.crafter_craft": "Crafter crafts", "create.subtitle.controller_put": "Controller thumps", @@ -1201,13 +1202,12 @@ "create.subtitle.wrench_rotate": "Wrench used", "create.subtitle.potato_hit": "Vegetable impacts", "create.subtitle.saw_activate_wood": "Mechanical Saw activates", + "create.subtitle.haunted_bell_convert": "Haunted Bell awakens", "create.subtitle.deployer_polish": "Deployer applies polish", "create.subtitle.deny": "Declining boop", "create.subtitle.controller_click": "Controller clicks", "create.subtitle.schematicannon_launch_block": "Schematicannon fires", "create.subtitle.copper_armor_equip": "Diving equipment clinks", - "create.subtitle.cursed_bell_use": "Cursed Bell tolls", - "create.subtitle.cursed_bell_convert": "Cursed Bell awakens", "create.subtitle.controller_take": "Lectern empties", "create.subtitle.mechanical_press_activation": "Mechanical Press clangs", "create.subtitle.contraption_assemble": "Contraption moves", @@ -1438,10 +1438,10 @@ "block.create.peculiar_bell.tooltip": "PECULIAR BELL", "block.create.peculiar_bell.tooltip.summary": "A decorative brass bell. Placing it above a _Soul Fire_ or _Soul Campfire_ may cause a spooky transformation to occur...", - "block.create.cursed_bell.tooltip": "CURSED BELL", - "block.create.cursed_bell.tooltip.summary": "A spooky brass bell haunted by lost souls of the Nether.", - "block.create.cursed_bell.tooltip.condition1": "When Held or Rang", - "block.create.cursed_bell.tooltip.behaviour1": "Highlights nearby dark spots on which Hostile Mobs could spawn.", + "block.create.haunted_bell.tooltip": "HAUNTED BELL", + "block.create.haunted_bell.tooltip.summary": "A spooky brass bell haunted by lost souls of the Nether.", + "block.create.haunted_bell.tooltip.condition1": "When Held or Rang", + "block.create.haunted_bell.tooltip.behaviour1": "Highlights nearby _dark spots_ on which _Hostile Mobs_ could spawn.", "_": "->------------------------] Ponder Content [------------------------<-", 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 d041cb02d..ba0f1d8ff 100644 --- a/src/generated/resources/assets/create/lang/unfinished/de_de.json +++ b/src/generated/resources/assets/create/lang/unfinished/de_de.json @@ -73,7 +73,6 @@ "block.create.crushing_wheel": "Mahlwerkrad", "block.create.crushing_wheel_controller": "Mahlwerkrad Steurung", "block.create.cuckoo_clock": "Kuckucksuhr", - "block.create.cursed_bell": "UNLOCALIZED: Cursed Bell", "block.create.cyan_sail": "Türkises Segel", "block.create.cyan_seat": "Türkiser Sitz", "block.create.cyan_valve_handle": "Türkiser Ventilgriff", @@ -187,6 +186,7 @@ "block.create.green_seat": "Grüner Sitz", "block.create.green_valve_handle": "Grüner Ventilgriff", "block.create.hand_crank": "Handkurbel", + "block.create.haunted_bell": "UNLOCALIZED: Haunted Bell", "block.create.honey": "Honig", "block.create.horizontal_framed_glass": "Horizontal Gerahmtes Glas", "block.create.horizontal_framed_glass_pane": "Horizontal Gerahmte Glasscheibe", @@ -1192,6 +1192,7 @@ "create.subtitle.blaze_munch": "Lohe kaut glücklich", "create.subtitle.funnel_flap": "UNLOCALIZED: Funnel Flaps", "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", @@ -1202,13 +1203,12 @@ "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.deployer_polish": "UNLOCALIZED: Deployer applies polish", "create.subtitle.deny": "UNLOCALIZED: Declining boop", "create.subtitle.controller_click": "UNLOCALIZED: Controller clicks", "create.subtitle.schematicannon_launch_block": "Bauplankanone schießt", "create.subtitle.copper_armor_equip": "UNLOCALIZED: Diving equipment clinks", - "create.subtitle.cursed_bell_use": "UNLOCALIZED: Cursed Bell tolls", - "create.subtitle.cursed_bell_convert": "UNLOCALIZED: Cursed Bell awakens", "create.subtitle.controller_take": "UNLOCALIZED: Lectern empties", "create.subtitle.mechanical_press_activation": "Mechanische Presse wird aktiviert", "create.subtitle.contraption_assemble": "UNLOCALIZED: Contraption moves", @@ -1439,10 +1439,10 @@ "block.create.peculiar_bell.tooltip": "UNLOCALIZED: PECULIAR BELL", "block.create.peculiar_bell.tooltip.summary": "UNLOCALIZED: A decorative brass bell. Placing it above a _Soul Fire_ or _Soul Campfire_ may cause a spooky transformation to occur...", - "block.create.cursed_bell.tooltip": "UNLOCALIZED: CURSED BELL", - "block.create.cursed_bell.tooltip.summary": "UNLOCALIZED: A spooky brass bell haunted by lost souls of the Nether.", - "block.create.cursed_bell.tooltip.condition1": "UNLOCALIZED: When Held or Rang", - "block.create.cursed_bell.tooltip.behaviour1": "UNLOCALIZED: Highlights nearby dark spots on which Hostile Mobs could spawn.", + "block.create.haunted_bell.tooltip": "UNLOCALIZED: HAUNTED BELL", + "block.create.haunted_bell.tooltip.summary": "UNLOCALIZED: A spooky brass 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 _dark spots_ on which _Hostile Mobs_ could spawn.", "_": "->------------------------] 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 20b84538e..da7917f72 100644 --- a/src/generated/resources/assets/create/lang/unfinished/es_es.json +++ b/src/generated/resources/assets/create/lang/unfinished/es_es.json @@ -73,7 +73,6 @@ "block.create.crushing_wheel": "Rueda trituradora", "block.create.crushing_wheel_controller": "Controlador de Rueda trituradora", "block.create.cuckoo_clock": "Reloj Cucú", - "block.create.cursed_bell": "UNLOCALIZED: Cursed Bell", "block.create.cyan_sail": "Vela cian", "block.create.cyan_seat": "Asiento cian", "block.create.cyan_valve_handle": "Asa de válvula cian", @@ -187,6 +186,7 @@ "block.create.green_seat": "Asiento verde", "block.create.green_valve_handle": "Asa de válvula verde", "block.create.hand_crank": "Manivela", + "block.create.haunted_bell": "UNLOCALIZED: Haunted Bell", "block.create.honey": "Miel", "block.create.horizontal_framed_glass": "Cristal con marco horizontal", "block.create.horizontal_framed_glass_pane": "Panel de cristal con marco horizontal", @@ -1192,6 +1192,7 @@ "create.subtitle.blaze_munch": "Blaze mastica felizmente", "create.subtitle.funnel_flap": "UNLOCALIZED: Funnel Flaps", "create.subtitle.schematicannon_finish": "Acabados de Schematicannon", + "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", @@ -1202,13 +1203,12 @@ "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.deployer_polish": "UNLOCALIZED: Deployer applies polish", "create.subtitle.deny": "UNLOCALIZED: Declining boop", "create.subtitle.controller_click": "UNLOCALIZED: Controller clicks", "create.subtitle.schematicannon_launch_block": "Disparos de Schematicannon", "create.subtitle.copper_armor_equip": "UNLOCALIZED: Diving equipment clinks", - "create.subtitle.cursed_bell_use": "UNLOCALIZED: Cursed Bell tolls", - "create.subtitle.cursed_bell_convert": "UNLOCALIZED: Cursed Bell awakens", "create.subtitle.controller_take": "UNLOCALIZED: Lectern empties", "create.subtitle.mechanical_press_activation": "La Prensa Mecánica se activa", "create.subtitle.contraption_assemble": "UNLOCALIZED: Contraption moves", @@ -1439,10 +1439,10 @@ "block.create.peculiar_bell.tooltip": "UNLOCALIZED: PECULIAR BELL", "block.create.peculiar_bell.tooltip.summary": "UNLOCALIZED: A decorative brass bell. Placing it above a _Soul Fire_ or _Soul Campfire_ may cause a spooky transformation to occur...", - "block.create.cursed_bell.tooltip": "UNLOCALIZED: CURSED BELL", - "block.create.cursed_bell.tooltip.summary": "UNLOCALIZED: A spooky brass bell haunted by lost souls of the Nether.", - "block.create.cursed_bell.tooltip.condition1": "UNLOCALIZED: When Held or Rang", - "block.create.cursed_bell.tooltip.behaviour1": "UNLOCALIZED: Highlights nearby dark spots on which Hostile Mobs could spawn.", + "block.create.haunted_bell.tooltip": "UNLOCALIZED: HAUNTED BELL", + "block.create.haunted_bell.tooltip.summary": "UNLOCALIZED: A spooky brass 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 _dark spots_ on which _Hostile Mobs_ could spawn.", "_": "->------------------------] Ponder Content [------------------------<-", diff --git a/src/generated/resources/assets/create/lang/unfinished/es_mx.json b/src/generated/resources/assets/create/lang/unfinished/es_mx.json index d72d4c061..8b5ccfdd7 100644 --- a/src/generated/resources/assets/create/lang/unfinished/es_mx.json +++ b/src/generated/resources/assets/create/lang/unfinished/es_mx.json @@ -73,7 +73,6 @@ "block.create.crushing_wheel": "Rueda Trituradora", "block.create.crushing_wheel_controller": "UNLOCALIZED:Crushing Wheel Controller", "block.create.cuckoo_clock": "Reloj Cuco", - "block.create.cursed_bell": "UNLOCALIZED: Cursed Bell", "block.create.cyan_sail": "Vela Cian", "block.create.cyan_seat": "Asiento Cian", "block.create.cyan_valve_handle": "Manija de Válvula Cian", @@ -187,6 +186,7 @@ "block.create.green_seat": "Asiento Verde", "block.create.green_valve_handle": "Manija de Válvula Verde", "block.create.hand_crank": "Manivela", + "block.create.haunted_bell": "UNLOCALIZED: Haunted Bell", "block.create.honey": "Miel", "block.create.horizontal_framed_glass": "Vidrio Enmarcado Horizontal", "block.create.horizontal_framed_glass_pane": "Panel de Vidrio Enmarcado Horizontal", @@ -1192,6 +1192,7 @@ "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", @@ -1202,13 +1203,12 @@ "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.deployer_polish": "UNLOCALIZED: Deployer applies polish", "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.cursed_bell_use": "UNLOCALIZED: Cursed Bell tolls", - "create.subtitle.cursed_bell_convert": "UNLOCALIZED: Cursed Bell awakens", "create.subtitle.controller_take": "UNLOCALIZED: Lectern empties", "create.subtitle.mechanical_press_activation": "UNLOCALIZED: Mechanical Press clangs", "create.subtitle.contraption_assemble": "UNLOCALIZED: Contraption moves", @@ -1439,10 +1439,10 @@ "block.create.peculiar_bell.tooltip": "UNLOCALIZED: PECULIAR BELL", "block.create.peculiar_bell.tooltip.summary": "UNLOCALIZED: A decorative brass bell. Placing it above a _Soul Fire_ or _Soul Campfire_ may cause a spooky transformation to occur...", - "block.create.cursed_bell.tooltip": "UNLOCALIZED: CURSED BELL", - "block.create.cursed_bell.tooltip.summary": "UNLOCALIZED: A spooky brass bell haunted by lost souls of the Nether.", - "block.create.cursed_bell.tooltip.condition1": "UNLOCALIZED: When Held or Rang", - "block.create.cursed_bell.tooltip.behaviour1": "UNLOCALIZED: Highlights nearby dark spots on which Hostile Mobs could spawn.", + "block.create.haunted_bell.tooltip": "UNLOCALIZED: HAUNTED BELL", + "block.create.haunted_bell.tooltip.summary": "UNLOCALIZED: A spooky brass 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 _dark spots_ on which _Hostile Mobs_ could spawn.", "_": "->------------------------] Ponder Content [------------------------<-", diff --git a/src/generated/resources/assets/create/lang/unfinished/fr_fr.json b/src/generated/resources/assets/create/lang/unfinished/fr_fr.json index 17f930584..87de2a97f 100644 --- a/src/generated/resources/assets/create/lang/unfinished/fr_fr.json +++ b/src/generated/resources/assets/create/lang/unfinished/fr_fr.json @@ -73,7 +73,6 @@ "block.create.crushing_wheel": "Roue de concassage", "block.create.crushing_wheel_controller": "Contrôleur de roue de concassage", "block.create.cuckoo_clock": "Horloge à coucou", - "block.create.cursed_bell": "UNLOCALIZED: Cursed Bell", "block.create.cyan_sail": "Voile cyan", "block.create.cyan_seat": "Siège cyan", "block.create.cyan_valve_handle": "Vanne cyan", @@ -187,6 +186,7 @@ "block.create.green_seat": "UNLOCALIZED: Green Seat", "block.create.green_valve_handle": "UNLOCALIZED: Green Valve Handle", "block.create.hand_crank": "Manivelle", + "block.create.haunted_bell": "UNLOCALIZED: Haunted Bell", "block.create.honey": "UNLOCALIZED: Honey", "block.create.horizontal_framed_glass": "Fenêtre en verre horizontale", "block.create.horizontal_framed_glass_pane": "Vitre encadrée horizontale", @@ -1192,6 +1192,7 @@ "create.subtitle.blaze_munch": "UNLOCALIZED: Blaze Burner munches", "create.subtitle.funnel_flap": "UNLOCALIZED: Funnel Flaps", "create.subtitle.schematicannon_finish": "Fin de schémacanon", + "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", @@ -1202,13 +1203,12 @@ "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.deployer_polish": "UNLOCALIZED: Deployer applies polish", "create.subtitle.deny": "UNLOCALIZED: Declining boop", "create.subtitle.controller_click": "UNLOCALIZED: Controller clicks", "create.subtitle.schematicannon_launch_block": "Tir de schémacanon", "create.subtitle.copper_armor_equip": "UNLOCALIZED: Diving equipment clinks", - "create.subtitle.cursed_bell_use": "UNLOCALIZED: Cursed Bell tolls", - "create.subtitle.cursed_bell_convert": "UNLOCALIZED: Cursed Bell awakens", "create.subtitle.controller_take": "UNLOCALIZED: Lectern empties", "create.subtitle.mechanical_press_activation": "Activation de la presse mechanique", "create.subtitle.contraption_assemble": "UNLOCALIZED: Contraption moves", @@ -1439,10 +1439,10 @@ "block.create.peculiar_bell.tooltip": "UNLOCALIZED: PECULIAR BELL", "block.create.peculiar_bell.tooltip.summary": "UNLOCALIZED: A decorative brass bell. Placing it above a _Soul Fire_ or _Soul Campfire_ may cause a spooky transformation to occur...", - "block.create.cursed_bell.tooltip": "UNLOCALIZED: CURSED BELL", - "block.create.cursed_bell.tooltip.summary": "UNLOCALIZED: A spooky brass bell haunted by lost souls of the Nether.", - "block.create.cursed_bell.tooltip.condition1": "UNLOCALIZED: When Held or Rang", - "block.create.cursed_bell.tooltip.behaviour1": "UNLOCALIZED: Highlights nearby dark spots on which Hostile Mobs could spawn.", + "block.create.haunted_bell.tooltip": "UNLOCALIZED: HAUNTED BELL", + "block.create.haunted_bell.tooltip.summary": "UNLOCALIZED: A spooky brass 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 _dark spots_ on which _Hostile Mobs_ could spawn.", "_": "->------------------------] Ponder Content [------------------------<-", diff --git a/src/generated/resources/assets/create/lang/unfinished/it_it.json b/src/generated/resources/assets/create/lang/unfinished/it_it.json index 8bab297b1..260bed699 100644 --- a/src/generated/resources/assets/create/lang/unfinished/it_it.json +++ b/src/generated/resources/assets/create/lang/unfinished/it_it.json @@ -73,7 +73,6 @@ "block.create.crushing_wheel": "Ruota di frantumazione", "block.create.crushing_wheel_controller": "Telecomando per ruota di frantumazione", "block.create.cuckoo_clock": "Orologio a cucù", - "block.create.cursed_bell": "UNLOCALIZED: Cursed Bell", "block.create.cyan_sail": "Vela ciano", "block.create.cyan_seat": "Sedile ciano", "block.create.cyan_valve_handle": "Maniglia per valvola ciano", @@ -187,6 +186,7 @@ "block.create.green_seat": "Sedile verde", "block.create.green_valve_handle": "Maniglia per valvola verde", "block.create.hand_crank": "Manovella", + "block.create.haunted_bell": "UNLOCALIZED: Haunted Bell", "block.create.honey": "Miele", "block.create.horizontal_framed_glass": "Finestra di vetro orizzontale", "block.create.horizontal_framed_glass_pane": "Pannello di finestra di vetro orizzontale", @@ -1192,6 +1192,7 @@ "create.subtitle.blaze_munch": "Il blaze lo gusta felicemente", "create.subtitle.funnel_flap": "UNLOCALIZED: Funnel Flaps", "create.subtitle.schematicannon_finish": "Finiture cannoneschematico", + "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", @@ -1202,13 +1203,12 @@ "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.deployer_polish": "UNLOCALIZED: Deployer applies polish", "create.subtitle.deny": "UNLOCALIZED: Declining boop", "create.subtitle.controller_click": "UNLOCALIZED: Controller clicks", "create.subtitle.schematicannon_launch_block": "Tiri del cannoneschematico", "create.subtitle.copper_armor_equip": "UNLOCALIZED: Diving equipment clinks", - "create.subtitle.cursed_bell_use": "UNLOCALIZED: Cursed Bell tolls", - "create.subtitle.cursed_bell_convert": "UNLOCALIZED: Cursed Bell awakens", "create.subtitle.controller_take": "UNLOCALIZED: Lectern empties", "create.subtitle.mechanical_press_activation": "Pressa meccanica attiva", "create.subtitle.contraption_assemble": "UNLOCALIZED: Contraption moves", @@ -1439,10 +1439,10 @@ "block.create.peculiar_bell.tooltip": "UNLOCALIZED: PECULIAR BELL", "block.create.peculiar_bell.tooltip.summary": "UNLOCALIZED: A decorative brass bell. Placing it above a _Soul Fire_ or _Soul Campfire_ may cause a spooky transformation to occur...", - "block.create.cursed_bell.tooltip": "UNLOCALIZED: CURSED BELL", - "block.create.cursed_bell.tooltip.summary": "UNLOCALIZED: A spooky brass bell haunted by lost souls of the Nether.", - "block.create.cursed_bell.tooltip.condition1": "UNLOCALIZED: When Held or Rang", - "block.create.cursed_bell.tooltip.behaviour1": "UNLOCALIZED: Highlights nearby dark spots on which Hostile Mobs could spawn.", + "block.create.haunted_bell.tooltip": "UNLOCALIZED: HAUNTED BELL", + "block.create.haunted_bell.tooltip.summary": "UNLOCALIZED: A spooky brass 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 _dark spots_ on which _Hostile Mobs_ could spawn.", "_": "->------------------------] Ponder Content [------------------------<-", diff --git a/src/generated/resources/assets/create/lang/unfinished/ja_jp.json b/src/generated/resources/assets/create/lang/unfinished/ja_jp.json index dfd0616e8..bdda4720a 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ja_jp.json +++ b/src/generated/resources/assets/create/lang/unfinished/ja_jp.json @@ -73,7 +73,6 @@ "block.create.crushing_wheel": "破砕ホイール", "block.create.crushing_wheel_controller": "破砕ホイールコントローラー", "block.create.cuckoo_clock": "鳩時計", - "block.create.cursed_bell": "UNLOCALIZED: Cursed Bell", "block.create.cyan_sail": "水色の帆", "block.create.cyan_seat": "水色のシート", "block.create.cyan_valve_handle": "水色のバルブハンドル", @@ -187,6 +186,7 @@ "block.create.green_seat": "緑色のシート", "block.create.green_valve_handle": "緑色のバルブハンドル", "block.create.hand_crank": "ハンドクランク", + "block.create.haunted_bell": "UNLOCALIZED: Haunted Bell", "block.create.honey": "ハチミツ", "block.create.horizontal_framed_glass": "横型ガラス窓", "block.create.horizontal_framed_glass_pane": "横型ガラス窓板", @@ -1192,6 +1192,7 @@ "create.subtitle.blaze_munch": "ブレイズの咀嚼音", "create.subtitle.funnel_flap": "ファンネルがはためく", "create.subtitle.schematicannon_finish": "概略図砲が作業を終える", + "create.subtitle.haunted_bell_use": "UNLOCALIZED: Haunted Bell tolls", "create.subtitle.scroll_value": "スクロールのカチカチ音", "create.subtitle.crafter_craft": "メカニカルクラフターがクラフトする", "create.subtitle.controller_put": "UNLOCALIZED: Controller thumps", @@ -1202,13 +1203,12 @@ "create.subtitle.wrench_rotate": "レンチを使う", "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.deployer_polish": "UNLOCALIZED: Deployer applies polish", "create.subtitle.deny": "UNLOCALIZED: Declining boop", "create.subtitle.controller_click": "UNLOCALIZED: Controller clicks", "create.subtitle.schematicannon_launch_block": "概略図砲が発射する", "create.subtitle.copper_armor_equip": "UNLOCALIZED: Diving equipment clinks", - "create.subtitle.cursed_bell_use": "UNLOCALIZED: Cursed Bell tolls", - "create.subtitle.cursed_bell_convert": "UNLOCALIZED: Cursed Bell awakens", "create.subtitle.controller_take": "UNLOCALIZED: Lectern empties", "create.subtitle.mechanical_press_activation": "メカニカルプレスがガーンと鳴る", "create.subtitle.contraption_assemble": "からくりが動く", @@ -1439,10 +1439,10 @@ "block.create.peculiar_bell.tooltip": "UNLOCALIZED: PECULIAR BELL", "block.create.peculiar_bell.tooltip.summary": "UNLOCALIZED: A decorative brass bell. Placing it above a _Soul Fire_ or _Soul Campfire_ may cause a spooky transformation to occur...", - "block.create.cursed_bell.tooltip": "UNLOCALIZED: CURSED BELL", - "block.create.cursed_bell.tooltip.summary": "UNLOCALIZED: A spooky brass bell haunted by lost souls of the Nether.", - "block.create.cursed_bell.tooltip.condition1": "UNLOCALIZED: When Held or Rang", - "block.create.cursed_bell.tooltip.behaviour1": "UNLOCALIZED: Highlights nearby dark spots on which Hostile Mobs could spawn.", + "block.create.haunted_bell.tooltip": "UNLOCALIZED: HAUNTED BELL", + "block.create.haunted_bell.tooltip.summary": "UNLOCALIZED: A spooky brass 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 _dark spots_ on which _Hostile Mobs_ could spawn.", "_": "->------------------------] Ponder Content [------------------------<-", diff --git a/src/generated/resources/assets/create/lang/unfinished/ko_kr.json b/src/generated/resources/assets/create/lang/unfinished/ko_kr.json index dd6dc4268..4eba546a8 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ko_kr.json +++ b/src/generated/resources/assets/create/lang/unfinished/ko_kr.json @@ -73,7 +73,6 @@ "block.create.crushing_wheel": "분쇄 휠", "block.create.crushing_wheel_controller": "분쇄 휠 컨트롤러", "block.create.cuckoo_clock": "뻐꾸기 시계", - "block.create.cursed_bell": "UNLOCALIZED: Cursed Bell", "block.create.cyan_sail": "청록색 날개", "block.create.cyan_seat": "청록색 좌석", "block.create.cyan_valve_handle": "청록색 밸브 손잡이", @@ -187,6 +186,7 @@ "block.create.green_seat": "초록색 좌석", "block.create.green_valve_handle": "초록색 밸브 손잡이", "block.create.hand_crank": "핸드 크랭크", + "block.create.haunted_bell": "UNLOCALIZED: Haunted Bell", "block.create.honey": "꿀", "block.create.horizontal_framed_glass": "수평 유리", "block.create.horizontal_framed_glass_pane": "수평 유리판", @@ -1192,6 +1192,7 @@ "create.subtitle.blaze_munch": "블레이즈가 행복하게 섭취함", "create.subtitle.funnel_flap": "UNLOCALIZED: Funnel Flaps", "create.subtitle.schematicannon_finish": "청사진 대포가 끝남", + "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", @@ -1202,13 +1203,12 @@ "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.deployer_polish": "UNLOCALIZED: Deployer applies polish", "create.subtitle.deny": "UNLOCALIZED: Declining boop", "create.subtitle.controller_click": "UNLOCALIZED: Controller clicks", "create.subtitle.schematicannon_launch_block": "청사진 대포가 발포함", "create.subtitle.copper_armor_equip": "UNLOCALIZED: Diving equipment clinks", - "create.subtitle.cursed_bell_use": "UNLOCALIZED: Cursed Bell tolls", - "create.subtitle.cursed_bell_convert": "UNLOCALIZED: Cursed Bell awakens", "create.subtitle.controller_take": "UNLOCALIZED: Lectern empties", "create.subtitle.mechanical_press_activation": "압착기가 가동됨", "create.subtitle.contraption_assemble": "UNLOCALIZED: Contraption moves", @@ -1439,10 +1439,10 @@ "block.create.peculiar_bell.tooltip": "UNLOCALIZED: PECULIAR BELL", "block.create.peculiar_bell.tooltip.summary": "UNLOCALIZED: A decorative brass bell. Placing it above a _Soul Fire_ or _Soul Campfire_ may cause a spooky transformation to occur...", - "block.create.cursed_bell.tooltip": "UNLOCALIZED: CURSED BELL", - "block.create.cursed_bell.tooltip.summary": "UNLOCALIZED: A spooky brass bell haunted by lost souls of the Nether.", - "block.create.cursed_bell.tooltip.condition1": "UNLOCALIZED: When Held or Rang", - "block.create.cursed_bell.tooltip.behaviour1": "UNLOCALIZED: Highlights nearby dark spots on which Hostile Mobs could spawn.", + "block.create.haunted_bell.tooltip": "UNLOCALIZED: HAUNTED BELL", + "block.create.haunted_bell.tooltip.summary": "UNLOCALIZED: A spooky brass 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 _dark spots_ on which _Hostile Mobs_ could spawn.", "_": "->------------------------] Ponder Content [------------------------<-", diff --git a/src/generated/resources/assets/create/lang/unfinished/nl_nl.json b/src/generated/resources/assets/create/lang/unfinished/nl_nl.json index d0630f074..bd61167df 100644 --- a/src/generated/resources/assets/create/lang/unfinished/nl_nl.json +++ b/src/generated/resources/assets/create/lang/unfinished/nl_nl.json @@ -73,7 +73,6 @@ "block.create.crushing_wheel": "Verpulveraar", "block.create.crushing_wheel_controller": "UNLOCALIZED: Crushing Wheel Controller", "block.create.cuckoo_clock": "UNLOCALIZED: Cuckoo Clock", - "block.create.cursed_bell": "UNLOCALIZED: Cursed Bell", "block.create.cyan_sail": "UNLOCALIZED: Cyan Sail", "block.create.cyan_seat": "UNLOCALIZED: Cyan Seat", "block.create.cyan_valve_handle": "UNLOCALIZED: Cyan Valve Handle", @@ -187,6 +186,7 @@ "block.create.green_seat": "UNLOCALIZED: Green Seat", "block.create.green_valve_handle": "UNLOCALIZED: Green Valve Handle", "block.create.hand_crank": "UNLOCALIZED: Hand Crank", + "block.create.haunted_bell": "UNLOCALIZED: Haunted Bell", "block.create.honey": "UNLOCALIZED: Honey", "block.create.horizontal_framed_glass": "UNLOCALIZED: Horizontal Framed Glass", "block.create.horizontal_framed_glass_pane": "UNLOCALIZED: Horizontal Framed Glass Pane", @@ -1192,6 +1192,7 @@ "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", @@ -1202,13 +1203,12 @@ "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.deployer_polish": "UNLOCALIZED: Deployer applies polish", "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.cursed_bell_use": "UNLOCALIZED: Cursed Bell tolls", - "create.subtitle.cursed_bell_convert": "UNLOCALIZED: Cursed Bell awakens", "create.subtitle.controller_take": "UNLOCALIZED: Lectern empties", "create.subtitle.mechanical_press_activation": "UNLOCALIZED: Mechanical Press clangs", "create.subtitle.contraption_assemble": "UNLOCALIZED: Contraption moves", @@ -1439,10 +1439,10 @@ "block.create.peculiar_bell.tooltip": "UNLOCALIZED: PECULIAR BELL", "block.create.peculiar_bell.tooltip.summary": "UNLOCALIZED: A decorative brass bell. Placing it above a _Soul Fire_ or _Soul Campfire_ may cause a spooky transformation to occur...", - "block.create.cursed_bell.tooltip": "UNLOCALIZED: CURSED BELL", - "block.create.cursed_bell.tooltip.summary": "UNLOCALIZED: A spooky brass bell haunted by lost souls of the Nether.", - "block.create.cursed_bell.tooltip.condition1": "UNLOCALIZED: When Held or Rang", - "block.create.cursed_bell.tooltip.behaviour1": "UNLOCALIZED: Highlights nearby dark spots on which Hostile Mobs could spawn.", + "block.create.haunted_bell.tooltip": "UNLOCALIZED: HAUNTED BELL", + "block.create.haunted_bell.tooltip.summary": "UNLOCALIZED: A spooky brass 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 _dark spots_ on which _Hostile Mobs_ could spawn.", "_": "->------------------------] Ponder Content [------------------------<-", diff --git a/src/generated/resources/assets/create/lang/unfinished/pl_pl.json b/src/generated/resources/assets/create/lang/unfinished/pl_pl.json index 2ef7a4458..940c00f7c 100644 --- a/src/generated/resources/assets/create/lang/unfinished/pl_pl.json +++ b/src/generated/resources/assets/create/lang/unfinished/pl_pl.json @@ -73,7 +73,6 @@ "block.create.crushing_wheel": "Koło kruszące", "block.create.crushing_wheel_controller": "Sterownik koła kruszącego", "block.create.cuckoo_clock": "Zegar z kukułką", - "block.create.cursed_bell": "UNLOCALIZED: Cursed Bell", "block.create.cyan_sail": "Błękitny żagiel", "block.create.cyan_seat": "Błękitne siedzenie", "block.create.cyan_valve_handle": "Błękitne pokrętło", @@ -187,6 +186,7 @@ "block.create.green_seat": "Zielone siedzenie", "block.create.green_valve_handle": "Zielone pokrętło", "block.create.hand_crank": "Ręczna korba", + "block.create.haunted_bell": "UNLOCALIZED: Haunted Bell", "block.create.honey": "Miód", "block.create.horizontal_framed_glass": "Poziome oprawione szkło", "block.create.horizontal_framed_glass_pane": "Pozioma oprawiona szyba", @@ -1192,6 +1192,7 @@ "create.subtitle.blaze_munch": "Płomyk szczęśliwie przeżuwa", "create.subtitle.funnel_flap": "Lejek trzepocze", "create.subtitle.schematicannon_finish": "Schematoarmata skończyła", + "create.subtitle.haunted_bell_use": "UNLOCALIZED: Haunted Bell tolls", "create.subtitle.scroll_value": "Kliknięcie", "create.subtitle.crafter_craft": "Mechaniczny stół rzemieślniczy konstruuje", "create.subtitle.controller_put": "UNLOCALIZED: Controller thumps", @@ -1202,13 +1203,12 @@ "create.subtitle.wrench_rotate": "Klucz skrzypi", "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.deployer_polish": "Aplikator poleruje", "create.subtitle.deny": "Dźwięk odmowy", "create.subtitle.controller_click": "UNLOCALIZED: Controller clicks", "create.subtitle.schematicannon_launch_block": "Schematoarmata strzela", "create.subtitle.copper_armor_equip": "Sprzęt do nurkowania pobrzękuje", - "create.subtitle.cursed_bell_use": "UNLOCALIZED: Cursed Bell tolls", - "create.subtitle.cursed_bell_convert": "UNLOCALIZED: Cursed Bell awakens", "create.subtitle.controller_take": "UNLOCALIZED: Lectern empties", "create.subtitle.mechanical_press_activation": "Mechaniczna prasa się uruchamia", "create.subtitle.contraption_assemble": "Maszyna przesuwa się", @@ -1439,10 +1439,10 @@ "block.create.peculiar_bell.tooltip": "UNLOCALIZED: PECULIAR BELL", "block.create.peculiar_bell.tooltip.summary": "UNLOCALIZED: A decorative brass bell. Placing it above a _Soul Fire_ or _Soul Campfire_ may cause a spooky transformation to occur...", - "block.create.cursed_bell.tooltip": "UNLOCALIZED: CURSED BELL", - "block.create.cursed_bell.tooltip.summary": "UNLOCALIZED: A spooky brass bell haunted by lost souls of the Nether.", - "block.create.cursed_bell.tooltip.condition1": "UNLOCALIZED: When Held or Rang", - "block.create.cursed_bell.tooltip.behaviour1": "UNLOCALIZED: Highlights nearby dark spots on which Hostile Mobs could spawn.", + "block.create.haunted_bell.tooltip": "UNLOCALIZED: HAUNTED BELL", + "block.create.haunted_bell.tooltip.summary": "UNLOCALIZED: A spooky brass 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 _dark spots_ on which _Hostile Mobs_ could spawn.", "_": "->------------------------] Ponder Content [------------------------<-", 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 cd60e31b3..a27f10296 100644 --- a/src/generated/resources/assets/create/lang/unfinished/pt_br.json +++ b/src/generated/resources/assets/create/lang/unfinished/pt_br.json @@ -73,7 +73,6 @@ "block.create.crushing_wheel": "Roda de Moer", "block.create.crushing_wheel_controller": "UNLOCALIZED: Crushing Wheel Controller", "block.create.cuckoo_clock": "UNLOCALIZED: Cuckoo Clock", - "block.create.cursed_bell": "UNLOCALIZED: Cursed Bell", "block.create.cyan_sail": "UNLOCALIZED: Cyan Sail", "block.create.cyan_seat": "UNLOCALIZED: Cyan Seat", "block.create.cyan_valve_handle": "UNLOCALIZED: Cyan Valve Handle", @@ -187,6 +186,7 @@ "block.create.green_seat": "UNLOCALIZED: Green Seat", "block.create.green_valve_handle": "UNLOCALIZED: Green Valve Handle", "block.create.hand_crank": "UNLOCALIZED: Hand Crank", + "block.create.haunted_bell": "UNLOCALIZED: Haunted Bell", "block.create.honey": "UNLOCALIZED: Honey", "block.create.horizontal_framed_glass": "UNLOCALIZED: Horizontal Framed Glass", "block.create.horizontal_framed_glass_pane": "UNLOCALIZED: Horizontal Framed Glass Pane", @@ -1192,6 +1192,7 @@ "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", @@ -1202,13 +1203,12 @@ "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.deployer_polish": "UNLOCALIZED: Deployer applies polish", "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.cursed_bell_use": "UNLOCALIZED: Cursed Bell tolls", - "create.subtitle.cursed_bell_convert": "UNLOCALIZED: Cursed Bell awakens", "create.subtitle.controller_take": "UNLOCALIZED: Lectern empties", "create.subtitle.mechanical_press_activation": "UNLOCALIZED: Mechanical Press clangs", "create.subtitle.contraption_assemble": "UNLOCALIZED: Contraption moves", @@ -1439,10 +1439,10 @@ "block.create.peculiar_bell.tooltip": "UNLOCALIZED: PECULIAR BELL", "block.create.peculiar_bell.tooltip.summary": "UNLOCALIZED: A decorative brass bell. Placing it above a _Soul Fire_ or _Soul Campfire_ may cause a spooky transformation to occur...", - "block.create.cursed_bell.tooltip": "UNLOCALIZED: CURSED BELL", - "block.create.cursed_bell.tooltip.summary": "UNLOCALIZED: A spooky brass bell haunted by lost souls of the Nether.", - "block.create.cursed_bell.tooltip.condition1": "UNLOCALIZED: When Held or Rang", - "block.create.cursed_bell.tooltip.behaviour1": "UNLOCALIZED: Highlights nearby dark spots on which Hostile Mobs could spawn.", + "block.create.haunted_bell.tooltip": "UNLOCALIZED: HAUNTED BELL", + "block.create.haunted_bell.tooltip.summary": "UNLOCALIZED: A spooky brass 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 _dark spots_ on which _Hostile Mobs_ could spawn.", "_": "->------------------------] Ponder Content [------------------------<-", diff --git a/src/generated/resources/assets/create/lang/unfinished/ru_ru.json b/src/generated/resources/assets/create/lang/unfinished/ru_ru.json index 5229d9134..b22e1adb9 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ru_ru.json +++ b/src/generated/resources/assets/create/lang/unfinished/ru_ru.json @@ -73,7 +73,6 @@ "block.create.crushing_wheel": "Колесо дробления", "block.create.crushing_wheel_controller": "Контроллер колеса дробления", "block.create.cuckoo_clock": "Часы с кукушкой", - "block.create.cursed_bell": "UNLOCALIZED: Cursed Bell", "block.create.cyan_sail": "Бирюзовый парус", "block.create.cyan_seat": "Бирюзовое сииденье", "block.create.cyan_valve_handle": "Бирюзовый ручной вентиль", @@ -187,6 +186,7 @@ "block.create.green_seat": "Зелёное сиденье", "block.create.green_valve_handle": "Зелёный ручной вентиль", "block.create.hand_crank": "Рукоятка", + "block.create.haunted_bell": "UNLOCALIZED: Haunted Bell", "block.create.honey": "Мёд", "block.create.horizontal_framed_glass": "Горизонтальное обрамлённое стекло", "block.create.horizontal_framed_glass_pane": "Горизонтальная обрамлённая стеклянная панель", @@ -1192,6 +1192,7 @@ "create.subtitle.blaze_munch": "Всполох радостно жуёт", "create.subtitle.funnel_flap": "UNLOCALIZED: Funnel Flaps", "create.subtitle.schematicannon_finish": "Схематичная пушка закончила работу", + "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", @@ -1202,13 +1203,12 @@ "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.deployer_polish": "UNLOCALIZED: Deployer applies polish", "create.subtitle.deny": "UNLOCALIZED: Declining boop", "create.subtitle.controller_click": "UNLOCALIZED: Controller clicks", "create.subtitle.schematicannon_launch_block": "Выстрелы схематичной пушки", "create.subtitle.copper_armor_equip": "UNLOCALIZED: Diving equipment clinks", - "create.subtitle.cursed_bell_use": "UNLOCALIZED: Cursed Bell tolls", - "create.subtitle.cursed_bell_convert": "UNLOCALIZED: Cursed Bell awakens", "create.subtitle.controller_take": "UNLOCALIZED: Lectern empties", "create.subtitle.mechanical_press_activation": "Механический пресс активирован", "create.subtitle.contraption_assemble": "UNLOCALIZED: Contraption moves", @@ -1439,10 +1439,10 @@ "block.create.peculiar_bell.tooltip": "UNLOCALIZED: PECULIAR BELL", "block.create.peculiar_bell.tooltip.summary": "UNLOCALIZED: A decorative brass bell. Placing it above a _Soul Fire_ or _Soul Campfire_ may cause a spooky transformation to occur...", - "block.create.cursed_bell.tooltip": "UNLOCALIZED: CURSED BELL", - "block.create.cursed_bell.tooltip.summary": "UNLOCALIZED: A spooky brass bell haunted by lost souls of the Nether.", - "block.create.cursed_bell.tooltip.condition1": "UNLOCALIZED: When Held or Rang", - "block.create.cursed_bell.tooltip.behaviour1": "UNLOCALIZED: Highlights nearby dark spots on which Hostile Mobs could spawn.", + "block.create.haunted_bell.tooltip": "UNLOCALIZED: HAUNTED BELL", + "block.create.haunted_bell.tooltip.summary": "UNLOCALIZED: A spooky brass 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 _dark spots_ on which _Hostile Mobs_ could spawn.", "_": "->------------------------] Ponder Content [------------------------<-", 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 42177778b..00a2bd401 100644 --- a/src/generated/resources/assets/create/lang/unfinished/zh_cn.json +++ b/src/generated/resources/assets/create/lang/unfinished/zh_cn.json @@ -73,7 +73,6 @@ "block.create.crushing_wheel": "粉碎轮", "block.create.crushing_wheel_controller": "粉碎轮控制器", "block.create.cuckoo_clock": "布谷鸟闹钟", - "block.create.cursed_bell": "UNLOCALIZED: Cursed Bell", "block.create.cyan_sail": "青色风帆", "block.create.cyan_seat": "青色坐垫", "block.create.cyan_valve_handle": "青色阀门手轮", @@ -187,6 +186,7 @@ "block.create.green_seat": "绿色坐垫", "block.create.green_valve_handle": "绿色阀门手轮", "block.create.hand_crank": "手摇曲柄", + "block.create.haunted_bell": "UNLOCALIZED: Haunted Bell", "block.create.honey": "蜂蜜", "block.create.horizontal_framed_glass": "竖直边框玻璃", "block.create.horizontal_framed_glass_pane": "竖直边框玻璃板", @@ -1192,6 +1192,7 @@ "create.subtitle.blaze_munch": "烈焰人:咀嚼", "create.subtitle.funnel_flap": "UNLOCALIZED: Funnel Flaps", "create.subtitle.schematicannon_finish": "蓝图加农炮:叮", + "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", @@ -1202,13 +1203,12 @@ "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.deployer_polish": "UNLOCALIZED: Deployer applies polish", "create.subtitle.deny": "UNLOCALIZED: Declining boop", "create.subtitle.controller_click": "UNLOCALIZED: Controller clicks", "create.subtitle.schematicannon_launch_block": "蓝图加农炮:发射", "create.subtitle.copper_armor_equip": "UNLOCALIZED: Diving equipment clinks", - "create.subtitle.cursed_bell_use": "UNLOCALIZED: Cursed Bell tolls", - "create.subtitle.cursed_bell_convert": "UNLOCALIZED: Cursed Bell awakens", "create.subtitle.controller_take": "UNLOCALIZED: Lectern empties", "create.subtitle.mechanical_press_activation": "辊压机:工作中", "create.subtitle.contraption_assemble": "UNLOCALIZED: Contraption moves", @@ -1439,10 +1439,10 @@ "block.create.peculiar_bell.tooltip": "UNLOCALIZED: PECULIAR BELL", "block.create.peculiar_bell.tooltip.summary": "UNLOCALIZED: A decorative brass bell. Placing it above a _Soul Fire_ or _Soul Campfire_ may cause a spooky transformation to occur...", - "block.create.cursed_bell.tooltip": "UNLOCALIZED: CURSED BELL", - "block.create.cursed_bell.tooltip.summary": "UNLOCALIZED: A spooky brass bell haunted by lost souls of the Nether.", - "block.create.cursed_bell.tooltip.condition1": "UNLOCALIZED: When Held or Rang", - "block.create.cursed_bell.tooltip.behaviour1": "UNLOCALIZED: Highlights nearby dark spots on which Hostile Mobs could spawn.", + "block.create.haunted_bell.tooltip": "UNLOCALIZED: HAUNTED BELL", + "block.create.haunted_bell.tooltip.summary": "UNLOCALIZED: A spooky brass 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 _dark spots_ on which _Hostile Mobs_ could spawn.", "_": "->------------------------] Ponder Content [------------------------<-", diff --git a/src/generated/resources/assets/create/lang/unfinished/zh_tw.json b/src/generated/resources/assets/create/lang/unfinished/zh_tw.json index a33475dc0..6282f594a 100644 --- a/src/generated/resources/assets/create/lang/unfinished/zh_tw.json +++ b/src/generated/resources/assets/create/lang/unfinished/zh_tw.json @@ -73,7 +73,6 @@ "block.create.crushing_wheel": "粉碎輪", "block.create.crushing_wheel_controller": "粉碎輪控制器", "block.create.cuckoo_clock": "布穀鳥鐘", - "block.create.cursed_bell": "UNLOCALIZED: Cursed Bell", "block.create.cyan_sail": "藍綠色風帆", "block.create.cyan_seat": "藍綠色坐墊", "block.create.cyan_valve_handle": "藍綠色閥門開關", @@ -187,6 +186,7 @@ "block.create.green_seat": "綠色坐墊", "block.create.green_valve_handle": "綠色閥門開關", "block.create.hand_crank": "手搖把手", + "block.create.haunted_bell": "UNLOCALIZED: Haunted Bell", "block.create.honey": "蜂蜜", "block.create.horizontal_framed_glass": "豎直邊框玻璃", "block.create.horizontal_framed_glass_pane": "豎直邊框玻璃片", @@ -1192,6 +1192,7 @@ "create.subtitle.blaze_munch": "烈焰使者開心地吃著", "create.subtitle.funnel_flap": "UNLOCALIZED: Funnel Flaps", "create.subtitle.schematicannon_finish": "藍圖大炮完成任務", + "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", @@ -1202,13 +1203,12 @@ "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.deployer_polish": "UNLOCALIZED: Deployer applies polish", "create.subtitle.deny": "UNLOCALIZED: Declining boop", "create.subtitle.controller_click": "UNLOCALIZED: Controller clicks", "create.subtitle.schematicannon_launch_block": "藍圖大炮發射", "create.subtitle.copper_armor_equip": "UNLOCALIZED: Diving equipment clinks", - "create.subtitle.cursed_bell_use": "UNLOCALIZED: Cursed Bell tolls", - "create.subtitle.cursed_bell_convert": "UNLOCALIZED: Cursed Bell awakens", "create.subtitle.controller_take": "UNLOCALIZED: Lectern empties", "create.subtitle.mechanical_press_activation": "液壓機工作", "create.subtitle.contraption_assemble": "UNLOCALIZED: Contraption moves", @@ -1439,10 +1439,10 @@ "block.create.peculiar_bell.tooltip": "UNLOCALIZED: PECULIAR BELL", "block.create.peculiar_bell.tooltip.summary": "UNLOCALIZED: A decorative brass bell. Placing it above a _Soul Fire_ or _Soul Campfire_ may cause a spooky transformation to occur...", - "block.create.cursed_bell.tooltip": "UNLOCALIZED: CURSED BELL", - "block.create.cursed_bell.tooltip.summary": "UNLOCALIZED: A spooky brass bell haunted by lost souls of the Nether.", - "block.create.cursed_bell.tooltip.condition1": "UNLOCALIZED: When Held or Rang", - "block.create.cursed_bell.tooltip.behaviour1": "UNLOCALIZED: Highlights nearby dark spots on which Hostile Mobs could spawn.", + "block.create.haunted_bell.tooltip": "UNLOCALIZED: HAUNTED BELL", + "block.create.haunted_bell.tooltip.summary": "UNLOCALIZED: A spooky brass 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 _dark spots_ on which _Hostile Mobs_ could spawn.", "_": "->------------------------] Ponder Content [------------------------<-", diff --git a/src/generated/resources/assets/create/models/item/cursed_bell.json b/src/generated/resources/assets/create/models/item/cursed_bell.json deleted file mode 100644 index 91c68bdc6..000000000 --- a/src/generated/resources/assets/create/models/item/cursed_bell.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "create:block/cursed_bell/item" -} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/item/haunted_bell.json b/src/generated/resources/assets/create/models/item/haunted_bell.json new file mode 100644 index 000000000..eba6aa5d0 --- /dev/null +++ b/src/generated/resources/assets/create/models/item/haunted_bell.json @@ -0,0 +1,3 @@ +{ + "parent": "create:block/haunted_bell/item" +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/sounds.json b/src/generated/resources/assets/create/sounds.json index 134c2f29f..bfcbfc44e 100644 --- a/src/generated/resources/assets/create/sounds.json +++ b/src/generated/resources/assets/create/sounds.json @@ -128,18 +128,6 @@ } ] }, - "cursed_bell_convert": { - "sounds": [ - "create:cursed_bell_convert" - ], - "subtitle": "create.subtitle.cursed_bell_convert" - }, - "cursed_bell_use": { - "sounds": [ - "create:cursed_bell_use" - ], - "subtitle": "create.subtitle.cursed_bell_use" - }, "deny": { "sounds": [ { @@ -199,6 +187,18 @@ ], "subtitle": "create.subtitle.fwoomp" }, + "haunted_bell_convert": { + "sounds": [ + "create:haunted_bell_convert" + ], + "subtitle": "create.subtitle.haunted_bell_convert" + }, + "haunted_bell_use": { + "sounds": [ + "create:haunted_bell_use" + ], + "subtitle": "create.subtitle.haunted_bell_use" + }, "mechanical_press_activation": { "sounds": [ { diff --git a/src/generated/resources/data/create/advancements/aesthetics.json b/src/generated/resources/data/create/advancements/aesthetics.json index 59a86f429..d723cbe38 100644 --- a/src/generated/resources/data/create/advancements/aesthetics.json +++ b/src/generated/resources/data/create/advancements/aesthetics.json @@ -28,8 +28,8 @@ "trigger": "create:bracket_apply", "conditions": { "accepted_entries": [ - "create:large_cogwheel", - "create:cogwheel" + "create:cogwheel", + "create:large_cogwheel" ] } }, diff --git a/src/generated/resources/data/create/loot_tables/blocks/cursed_bell.json b/src/generated/resources/data/create/loot_tables/blocks/haunted_bell.json similarity index 86% rename from src/generated/resources/data/create/loot_tables/blocks/cursed_bell.json rename to src/generated/resources/data/create/loot_tables/blocks/haunted_bell.json index ce719523e..ec8bd3826 100644 --- a/src/generated/resources/data/create/loot_tables/blocks/cursed_bell.json +++ b/src/generated/resources/data/create/loot_tables/blocks/haunted_bell.json @@ -6,7 +6,7 @@ "entries": [ { "type": "minecraft:item", - "name": "create:cursed_bell" + "name": "create:haunted_bell" } ], "conditions": [ diff --git a/src/generated/resources/data/create/tags/blocks/brittle.json b/src/generated/resources/data/create/tags/blocks/brittle.json index 9372a9a4f..4cc8d6e48 100644 --- a/src/generated/resources/data/create/tags/blocks/brittle.json +++ b/src/generated/resources/data/create/tags/blocks/brittle.json @@ -25,7 +25,7 @@ "create:furnace_engine", "create:redstone_link", "create:peculiar_bell", - "create:cursed_bell", + "create:haunted_bell", "#minecraft:doors", "#minecraft:beds", "minecraft:flower_pot", diff --git a/src/main/java/com/simibubi/create/AllBlockPartials.java b/src/main/java/com/simibubi/create/AllBlockPartials.java index c198f1bc3..49fcaceca 100644 --- a/src/main/java/com/simibubi/create/AllBlockPartials.java +++ b/src/main/java/com/simibubi/create/AllBlockPartials.java @@ -94,7 +94,7 @@ public class AllBlockPartials { SPOUT_TOP = get("spout/top"), SPOUT_MIDDLE = get("spout/middle"), SPOUT_BOTTOM = get("spout/bottom"), PECULIAR_BELL = get("peculiar_bell/bell"), - CURSED_BELL = get("cursed_bell/bell"), + HAUNTED_BELL = get("haunted_bell/bell"), SPEED_CONTROLLER_BRACKET = get("rotation_speed_controller/bracket"), diff --git a/src/main/java/com/simibubi/create/AllBlocks.java b/src/main/java/com/simibubi/create/AllBlocks.java index 5a7c66cd7..18befa726 100644 --- a/src/main/java/com/simibubi/create/AllBlocks.java +++ b/src/main/java/com/simibubi/create/AllBlocks.java @@ -115,8 +115,8 @@ import com.simibubi.create.content.contraptions.relays.gauge.GaugeBlock; import com.simibubi.create.content.contraptions.relays.gauge.GaugeGenerator; import com.simibubi.create.content.contraptions.relays.gearbox.GearboxBlock; import com.simibubi.create.content.curiosities.armor.CopperBacktankBlock; -import com.simibubi.create.content.curiosities.bell.CursedBellBlock; -import com.simibubi.create.content.curiosities.bell.CursedBellMovementBehaviour; +import com.simibubi.create.content.curiosities.bell.HauntedBellBlock; +import com.simibubi.create.content.curiosities.bell.HauntedBellMovementBehaviour; import com.simibubi.create.content.curiosities.bell.PeculiarBellBlock; import com.simibubi.create.content.logistics.block.belts.tunnel.BeltTunnelBlock; import com.simibubi.create.content.logistics.block.belts.tunnel.BrassTunnelBlock; @@ -1320,10 +1320,10 @@ public class AllBlocks { .onRegister(addMovementBehaviour(new BellMovementBehaviour())) .register(); - public static final BlockEntry CURSED_BELL = - REGISTRATE.block("cursed_bell", CursedBellBlock::new) + public static final BlockEntry HAUNTED_BELL = + REGISTRATE.block("haunted_bell", HauntedBellBlock::new) .transform(BuilderTransformers.bell()) - .onRegister(addMovementBehaviour(new CursedBellMovementBehaviour())) + .onRegister(addMovementBehaviour(new HauntedBellMovementBehaviour())) .register(); // Materials diff --git a/src/main/java/com/simibubi/create/AllEntityTypes.java b/src/main/java/com/simibubi/create/AllEntityTypes.java index bb6268498..0b763e565 100644 --- a/src/main/java/com/simibubi/create/AllEntityTypes.java +++ b/src/main/java/com/simibubi/create/AllEntityTypes.java @@ -47,7 +47,7 @@ public class AllEntityTypes { public static final EntityEntry POTATO_PROJECTILE = register("potato_projectile", PotatoProjectileEntity::new, () -> PotatoProjectileRenderer::new, - EntityClassification.MISC, 4, 20, true, true, PotatoProjectileEntity::build).register(); + EntityClassification.MISC, 4, 20, true, false, PotatoProjectileEntity::build).register(); public static final EntityEntry SEAT = register("seat", SeatEntity::new, () -> SeatEntity.Render::new, EntityClassification.MISC, 0, Integer.MAX_VALUE, false, true, SeatEntity::build).register(); diff --git a/src/main/java/com/simibubi/create/AllSoundEvents.java b/src/main/java/com/simibubi/create/AllSoundEvents.java index d98fbe2d9..2d7b4afa0 100644 --- a/src/main/java/com/simibubi/create/AllSoundEvents.java +++ b/src/main/java/com/simibubi/create/AllSoundEvents.java @@ -204,11 +204,11 @@ public class AllSoundEvents { .category(SoundCategory.BLOCKS) .build(), - CURSED_BELL_CONVERT = create("cursed_bell_convert").subtitle("Cursed Bell awakens") + HAUNTED_BELL_CONVERT = create("haunted_bell_convert").subtitle("Haunted Bell awakens") .category(SoundCategory.BLOCKS) .build(), - CURSED_BELL_USE = create("cursed_bell_use").subtitle("Cursed Bell tolls") + HAUNTED_BELL_USE = create("haunted_bell_use").subtitle("Haunted Bell tolls") .category(SoundCategory.BLOCKS) .build(); diff --git a/src/main/java/com/simibubi/create/AllTileEntities.java b/src/main/java/com/simibubi/create/AllTileEntities.java index 7ec222efc..51c604488 100644 --- a/src/main/java/com/simibubi/create/AllTileEntities.java +++ b/src/main/java/com/simibubi/create/AllTileEntities.java @@ -120,7 +120,7 @@ import com.simibubi.create.content.curiosities.armor.CopperBacktankInstance; import com.simibubi.create.content.curiosities.armor.CopperBacktankRenderer; import com.simibubi.create.content.curiosities.armor.CopperBacktankTileEntity; import com.simibubi.create.content.curiosities.bell.BellRenderer; -import com.simibubi.create.content.curiosities.bell.CursedBellTileEntity; +import com.simibubi.create.content.curiosities.bell.HauntedBellTileEntity; import com.simibubi.create.content.curiosities.bell.PeculiarBellTileEntity; import com.simibubi.create.content.logistics.block.belts.tunnel.BeltTunnelInstance; import com.simibubi.create.content.logistics.block.belts.tunnel.BeltTunnelRenderer; @@ -683,9 +683,9 @@ public class AllTileEntities { .renderer(() -> BellRenderer::new) .register(); - public static final TileEntityEntry CURSED_BELL = Create.registrate() - .tileEntity("cursed_bell", CursedBellTileEntity::new) - .validBlocks(AllBlocks.CURSED_BELL) + public static final TileEntityEntry HAUNTED_BELL = Create.registrate() + .tileEntity("cursed_bell", HauntedBellTileEntity::new) + .validBlocks(AllBlocks.HAUNTED_BELL) .renderer(() -> BellRenderer::new) .register(); diff --git a/src/main/java/com/simibubi/create/compat/jei/category/MysteriousItemConversionCategory.java b/src/main/java/com/simibubi/create/compat/jei/category/MysteriousItemConversionCategory.java index 16d2d67dd..079191032 100644 --- a/src/main/java/com/simibubi/create/compat/jei/category/MysteriousItemConversionCategory.java +++ b/src/main/java/com/simibubi/create/compat/jei/category/MysteriousItemConversionCategory.java @@ -23,7 +23,7 @@ public class MysteriousItemConversionCategory extends CreateRecipeCategory { +public class HauntedBellBlock extends AbstractBellBlock { - public CursedBellBlock(Properties properties) { + public HauntedBellBlock(Properties properties) { super(properties); } @Override public TileEntity createTileEntity(BlockState state, IBlockReader world) { - return AllTileEntities.CURSED_BELL.create(); + return AllTileEntities.HAUNTED_BELL.create(); } @Override - public Class getTileEntityClass() { - return CursedBellTileEntity.class; + public Class getTileEntityClass() { + return HauntedBellTileEntity.class; } @Override public void playSound(World world, BlockPos pos) { - AllSoundEvents.CURSED_BELL_USE.playOnServer(world, pos, 4f, 1f); + AllSoundEvents.HAUNTED_BELL_USE.playOnServer(world, pos, 4f, 1f); } @Override public void onBlockAdded(BlockState state, World world, BlockPos pos, BlockState oldState, boolean isMoving) { if (oldState.getBlock() != this) - withTileEntityDo(world, pos, CursedBellTileEntity::startEffect); + withTileEntityDo(world, pos, HauntedBellTileEntity::startEffect); } } diff --git a/src/main/java/com/simibubi/create/content/curiosities/bell/CursedBellMovementBehaviour.java b/src/main/java/com/simibubi/create/content/curiosities/bell/HauntedBellMovementBehaviour.java similarity index 84% rename from src/main/java/com/simibubi/create/content/curiosities/bell/CursedBellMovementBehaviour.java rename to src/main/java/com/simibubi/create/content/curiosities/bell/HauntedBellMovementBehaviour.java index 7976cf8a1..506e9ae1e 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/bell/CursedBellMovementBehaviour.java +++ b/src/main/java/com/simibubi/create/content/curiosities/bell/HauntedBellMovementBehaviour.java @@ -5,7 +5,7 @@ import com.simibubi.create.content.contraptions.components.structureMovement.Mov import net.minecraft.util.math.BlockPos; -public class CursedBellMovementBehaviour extends BellMovementBehaviour { +public class HauntedBellMovementBehaviour extends BellMovementBehaviour { public static final int DISTANCE = 3; @@ -19,8 +19,8 @@ public class CursedBellMovementBehaviour extends BellMovementBehaviour { @Override public void visitNewPosition(MovementContext context, BlockPos pos) { if (!context.world.isRemote && getRecharge(context) == 0) { - CursedBellPulser.sendPulse(context.world, pos, DISTANCE, true); - setRecharge(context, CursedBellTileEntity.RECHARGE_TICKS); + HauntedBellPulser.sendPulse(context.world, pos, DISTANCE, true); + setRecharge(context, HauntedBellTileEntity.RECHARGE_TICKS); playSound(context); } } diff --git a/src/main/java/com/simibubi/create/content/curiosities/bell/CursedBellPulser.java b/src/main/java/com/simibubi/create/content/curiosities/bell/HauntedBellPulser.java similarity index 87% rename from src/main/java/com/simibubi/create/content/curiosities/bell/CursedBellPulser.java rename to src/main/java/com/simibubi/create/content/curiosities/bell/HauntedBellPulser.java index 3948d8491..6c0ef3d79 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/bell/CursedBellPulser.java +++ b/src/main/java/com/simibubi/create/content/curiosities/bell/HauntedBellPulser.java @@ -13,13 +13,13 @@ import net.minecraftforge.fml.common.Mod.EventBusSubscriber; import net.minecraftforge.fml.network.PacketDistributor; @EventBusSubscriber -public class CursedBellPulser { +public class HauntedBellPulser { public static final int DISTANCE = 3; public static final int RECHARGE_TICKS = 8; @SubscribeEvent - public static void cursedBellCreatesPulse(TickEvent.PlayerTickEvent event) { + public static void hauntedBellCreatesPulse(TickEvent.PlayerTickEvent event) { if (event.phase != TickEvent.Phase.END) return; if (event.side != LogicalSide.SERVER) @@ -30,7 +30,7 @@ public class CursedBellPulser { if (event.player.world.getGameTime() % RECHARGE_TICKS != 0) return; - if (event.player.isHolding(AllBlocks.CURSED_BELL::is)) + if (event.player.isHolding(AllBlocks.HAUNTED_BELL::is)) sendPulse(event.player.world, event.player.getBlockPos(), DISTANCE, false); } diff --git a/src/main/java/com/simibubi/create/content/curiosities/bell/CursedBellTileEntity.java b/src/main/java/com/simibubi/create/content/curiosities/bell/HauntedBellTileEntity.java similarity index 91% rename from src/main/java/com/simibubi/create/content/curiosities/bell/CursedBellTileEntity.java rename to src/main/java/com/simibubi/create/content/curiosities/bell/HauntedBellTileEntity.java index c99d1cf64..486a2445c 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/bell/CursedBellTileEntity.java +++ b/src/main/java/com/simibubi/create/content/curiosities/bell/HauntedBellTileEntity.java @@ -17,7 +17,7 @@ import net.minecraft.util.SoundEvents; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; -public class CursedBellTileEntity extends AbstractBellTileEntity { +public class HauntedBellTileEntity extends AbstractBellTileEntity { public static final int DISTANCE = 10; public static final int RECHARGE_TICKS = 65; @@ -25,7 +25,7 @@ public class CursedBellTileEntity extends AbstractBellTileEntity { public int effectTicks = 0; - public CursedBellTileEntity(TileEntityType type) { + public HauntedBellTileEntity(TileEntityType type) { super(type); } @@ -34,7 +34,7 @@ public class CursedBellTileEntity extends AbstractBellTileEntity { @Override public PartialModel getBellModel() { - return AllBlockPartials.CURSED_BELL; + return AllBlockPartials.HAUNTED_BELL; } @Override @@ -46,7 +46,7 @@ public class CursedBellTileEntity extends AbstractBellTileEntity { return false; if (!world.isRemote) - CursedBellPulser.sendPulse(world, pos, DISTANCE, true); + HauntedBellPulser.sendPulse(world, pos, DISTANCE, true); startEffect(); diff --git a/src/main/java/com/simibubi/create/content/curiosities/bell/PeculiarBellBlock.java b/src/main/java/com/simibubi/create/content/curiosities/bell/PeculiarBellBlock.java index ae11068e0..8033bc7b6 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/bell/PeculiarBellBlock.java +++ b/src/main/java/com/simibubi/create/content/curiosities/bell/PeculiarBellBlock.java @@ -69,13 +69,13 @@ public class PeculiarBellBlock extends AbstractBellBlock if (world.isRemote()) { spawnConversionParticles(world, pos); } else if (world instanceof World) { - AllSoundEvents.CURSED_BELL_CONVERT.playOnServer((World) world, pos); + AllSoundEvents.HAUNTED_BELL_CONVERT.playOnServer((World) world, pos); } - return AllBlocks.CURSED_BELL.getDefaultState() - .with(CursedBellBlock.field_220133_a, state.get(field_220133_a)) - .with(CursedBellBlock.field_220134_b, state.get(field_220134_b)) - .with(CursedBellBlock.POWERED, state.get(POWERED)); + return AllBlocks.HAUNTED_BELL.getDefaultState() + .with(HauntedBellBlock.field_220133_a, state.get(field_220133_a)) + .with(HauntedBellBlock.field_220134_b, state.get(field_220134_b)) + .with(HauntedBellBlock.POWERED, state.get(POWERED)); } public void spawnConversionParticles(IWorld world, BlockPos blockPos) { diff --git a/src/main/java/com/simibubi/create/content/curiosities/bell/SoulBaseParticle.java b/src/main/java/com/simibubi/create/content/curiosities/bell/SoulBaseParticle.java index ce3f4820f..fd17c7d16 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/bell/SoulBaseParticle.java +++ b/src/main/java/com/simibubi/create/content/curiosities/bell/SoulBaseParticle.java @@ -6,6 +6,7 @@ import net.minecraft.client.particle.IAnimatedSprite; import net.minecraft.client.renderer.ActiveRenderInfo; import net.minecraft.client.world.ClientWorld; import net.minecraft.particles.ParticleType; +import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.vector.Quaternion; import net.minecraft.util.math.vector.Vector3f; @@ -27,11 +28,11 @@ public class SoulBaseParticle extends CustomRotationParticle { @Override public void tick() { - if (this.age++ >= this.maxAge) { - this.setExpired(); - } else { - this.selectSpriteLoopingWithAge(animatedSprite); - } + selectSpriteLoopingWithAge(animatedSprite); + + BlockPos pos = new BlockPos(posX, posY, posZ); + if (age++ >= maxAge || !SoulPulseEffect.canSpawnSoulAt(world, pos)) + setExpired(); } @Override diff --git a/src/main/java/com/simibubi/create/content/curiosities/bell/SoulParticle.java b/src/main/java/com/simibubi/create/content/curiosities/bell/SoulParticle.java index ce36d72b4..302ecc398 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/bell/SoulParticle.java +++ b/src/main/java/com/simibubi/create/content/curiosities/bell/SoulParticle.java @@ -8,7 +8,6 @@ import net.minecraft.client.world.ClientWorld; import net.minecraft.particles.ParticleType; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.vector.Quaternion; -import net.minecraft.world.LightType; public class SoulParticle extends CustomRotationParticle { @@ -54,20 +53,18 @@ public class SoulParticle extends CustomRotationParticle { @Override public void tick() { + animationStage.tick(); - this.animationStage.tick(); + animationStage = animationStage.getNext(); - this.animationStage = animationStage.getNext(); - - if (animationStage == null) - this.setExpired(); - if (world.getLightLevel(LightType.BLOCK, new BlockPos(posX, posY, posZ)) > 7) - this.setExpired(); + BlockPos pos = new BlockPos(posX, posY, posZ); + if (animationStage == null || !SoulPulseEffect.canSpawnSoulAt(world, pos)) + setExpired(); } public void setFrame(int frame) { if (frame >= 0 && frame < totalFrames) - this.setSprite(animatedSprite.get(frame, totalFrames)); + setSprite(animatedSprite.get(frame, totalFrames)); } @Override diff --git a/src/main/java/com/simibubi/create/content/curiosities/bell/SoulPulseEffect.java b/src/main/java/com/simibubi/create/content/curiosities/bell/SoulPulseEffect.java index 13923f0e3..7fbacdffa 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/bell/SoulPulseEffect.java +++ b/src/main/java/com/simibubi/create/content/curiosities/bell/SoulPulseEffect.java @@ -71,7 +71,7 @@ public class SoulPulseEffect { .collect(Collectors.toList()); } - public boolean canSpawnSoulAt(World world, BlockPos at) { + public static boolean canSpawnSoulAt(World world, BlockPos at) { EntityType dummy = EntityType.ZOMBIE; double dummyWidth = 0.2, dummyHeight = 0.75; double w2 = dummyWidth / 2; diff --git a/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoCannonItem.java b/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoCannonItem.java index 578378447..403fc88be 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoCannonItem.java +++ b/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoCannonItem.java @@ -25,6 +25,7 @@ import net.minecraft.item.ShootableItem; import net.minecraft.item.UseAction; import net.minecraft.util.ActionResult; import net.minecraft.util.ActionResultType; +import net.minecraft.util.Direction.Axis; import net.minecraft.util.Hand; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.vector.Vector3d; @@ -113,22 +114,32 @@ public class PotatoCannonItem extends ShootableItem { ShootableGadgetItemMethods.getGunBarrelVec(player, hand == Hand.MAIN_HAND, new Vector3d(-.05f, 0, 0)) .subtract(player.getPositionVec() .add(0, player.getEyeHeight(), 0)); - - Vector3d lookVec = player.getLookVec(); PotatoCannonProjectileTypes projectileType = PotatoCannonProjectileTypes.getProjectileTypeOf(itemStack) .orElse(PotatoCannonProjectileTypes.FALLBACK); + Vector3d lookVec = player.getLookVec(); + Vector3d motion = lookVec.add(correction).normalize().scale(projectileType.getVelocityMultiplier()); + float soundPitch = projectileType.getSoundPitch() + (Create.RANDOM.nextFloat() - .5f) / 4f; + boolean spray = projectileType.getSplit() > 1; + Vector3d sprayBase = VecHelper.rotate(new Vector3d(0,0.1,0), + 360*Create.RANDOM.nextFloat(), Axis.Z); + float sprayChange = 360f / projectileType.getSplit(); + for (int i = 0; i < projectileType.getSplit(); i++) { PotatoProjectileEntity projectile = AllEntityTypes.POTATO_PROJECTILE.create(world); projectile.setItem(itemStack); - Vector3d motion = lookVec.scale(projectileType.getVelocityMultiplier()) - .add(correction); - if (spray) - motion = VecHelper.offsetRandomly(motion, Create.RANDOM, 0.25f); + + Vector3d splitMotion = motion; + if (spray) { + float imperfection = 40*(Create.RANDOM.nextFloat() - 0.5f); + Vector3d sprayOffset = VecHelper.rotate(sprayBase, i * sprayChange + imperfection, Axis.Z); + splitMotion = splitMotion.add(VecHelper.lookAt(sprayOffset, motion)); + } + projectile.setPosition(barrelPos.x, barrelPos.y, barrelPos.z); - projectile.setMotion(motion); + projectile.setMotion(splitMotion); projectile.setShooter(player); world.addEntity(projectile); } diff --git a/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoCannonProjectileTypes.java b/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoCannonProjectileTypes.java index 6c43183d5..ff466020f 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoCannonProjectileTypes.java +++ b/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoCannonProjectileTypes.java @@ -6,6 +6,8 @@ import java.util.Optional; import java.util.function.BiConsumer; import java.util.function.Consumer; +import com.mojang.datafixers.util.Pair; +import com.simibubi.create.AllItems; import com.simibubi.create.Create; import net.minecraft.block.Block; @@ -14,6 +16,8 @@ import net.minecraft.block.Blocks; import net.minecraft.entity.Entity; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.passive.FoxEntity; +import net.minecraft.item.Food; +import net.minecraft.item.Foods; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.item.Items; @@ -46,7 +50,7 @@ public class PotatoCannonProjectileTypes { FALLBACK = create("fallback").damage(0) .register(), - POTATO = create("potato").damage(4) + POTATO = create("potato").damage(5) .reloadTicks(15) .velocity(1.25f) .knockback(1.5f) @@ -54,32 +58,32 @@ public class PotatoCannonProjectileTypes { .onBlockHit(plantCrop(Blocks.POTATOES.delegate)) .registerAndAssign(Items.POTATO), - BAKED_POTATO = create("baked_potato").damage(3) + BAKED_POTATO = create("baked_potato").damage(5) .reloadTicks(15) - .velocity(1.05f) + .velocity(1.25f) .knockback(0.5f) .renderTumbling() - .onEntityHit(ray -> ray.getEntity() - .setFireTicks(10)) + .onEntityHit(ray -> ray.getEntity().setFire(3)) .registerAndAssign(Items.BAKED_POTATO), - CARROT = create("carrot").damage(3) - .renderTowardMotion(140, 1) + CARROT = create("carrot").damage(4) + .reloadTicks(12) .velocity(1.45f) - .knockback(0.5f) - .soundPitch(1.25f) + .knockback(0.3f) + .renderTowardMotion(140, 1) + .soundPitch(1.5f) .onBlockHit(plantCrop(Blocks.CARROTS.delegate)) .registerAndAssign(Items.CARROT), - GOLDEN_CARROT = create("golden_carrot").damage(8) - .reloadTicks(20) - .knockback(0.5f) + GOLDEN_CARROT = create("golden_carrot").damage(12) + .reloadTicks(15) .velocity(1.45f) + .knockback(0.5f) .renderTowardMotion(140, 2) - .soundPitch(1.25f) + .soundPitch(1.5f) .registerAndAssign(Items.GOLDEN_CARROT), - SWEET_BERRIES = create("sweet_berry").damage(1) + SWEET_BERRIES = create("sweet_berry").damage(3) .reloadTicks(10) .knockback(0.1f) .velocity(1.05f) @@ -88,22 +92,108 @@ public class PotatoCannonProjectileTypes { .soundPitch(1.25f) .registerAndAssign(Items.SWEET_BERRIES), + CHOCOLATE_BERRIES = create("chocolate_berry").damage(4) + .reloadTicks(10) + .knockback(0.2f) + .velocity(1.05f) + .renderTumbling() + .splitInto(3) + .soundPitch(1.25f) + .registerAndAssign(AllItems.CHOCOLATE_BERRIES.get()), + POISON_POTATO = create("poison_potato").damage(5) .reloadTicks(15) .knockback(0.05f) .velocity(1.25f) .renderTumbling() - .onEntityHit(potion(Effects.POISON, 4)) + .onEntityHit(potion(Effects.POISON, 1,160)) .registerAndAssign(Items.POISONOUS_POTATO), - CHORUS_FRUIT = create("chorus_fruit").damage(2) + CHORUS_FRUIT = create("chorus_fruit").damage(3) .reloadTicks(15) .velocity(1.20f) .knockback(0.05f) .renderTumbling() .onEntityHit(chorusTeleport(20)) - .registerAndAssign(Items.CHORUS_FRUIT) + .registerAndAssign(Items.CHORUS_FRUIT), + APPLE = create("apple").damage(5) + .reloadTicks(10) + .velocity(1.45f) + .knockback(0.5f) + .renderTumbling() + .soundPitch(1.1f) + .registerAndAssign(Items.APPLE), + + HONEYED_APPLE = create("honeyed_apple").damage(6) + .reloadTicks(15) + .velocity(1.35f) + .knockback(0.1f) + .renderTumbling() + .soundPitch(1.1f) + .onEntityHit(potion(Effects.SLOWNESS, 2,160)) + .registerAndAssign(AllItems.HONEYED_APPLE.get()), + + GOLDEN_APPLE = create("golden_apple").damage(1) + .reloadTicks(100) + .velocity(1.45f) + .knockback(0.05f) + .renderTumbling() + .soundPitch(1.1f) + .onEntityHit(foodEffects(Foods.GOLDEN_APPLE)) + .registerAndAssign(Items.GOLDEN_APPLE), + + ENCHANTED_GOLDEN_APPLE = create("enchanted_golden_apple").damage(1) + .reloadTicks(100) + .velocity(1.45f) + .knockback(0.05f) + .renderTumbling() + .soundPitch(1.1f) + .onEntityHit(foodEffects(Foods.ENCHANTED_GOLDEN_APPLE)) + .registerAndAssign(Items.ENCHANTED_GOLDEN_APPLE), + + BEETROOT = create("beetroot").damage(2) + .reloadTicks(5) + .velocity(1.6f) + .knockback(0.1f) + .renderTowardMotion(140, 2) + .soundPitch(1.6f) + .registerAndAssign(Items.BEETROOT), + + MELON_SLICE = create("melon_slice").damage(3) + .reloadTicks(8) + .knockback(0.1f) + .velocity(1.45f) + .renderTumbling() + .soundPitch(1.5f) + .registerAndAssign(Items.MELON_SLICE), + + GLISTENING_MELON = create("glistening_melon").damage(5) + .reloadTicks(8) + .knockback(0.1f) + .velocity(1.45f) + .renderTumbling() + .soundPitch(1.5f) + .onEntityHit(potion(Effects.GLOWING, 1, 100)) + .registerAndAssign(Items.GLISTERING_MELON_SLICE), + + MELON_BLOCK = create("melon_block").damage(8) + .reloadTicks(20) + .knockback(2.0f) + .velocity(0.95f) + .renderTumbling() + .soundPitch(0.9f) + .onBlockHit(placeBlockOnGround(Blocks.MELON.delegate)) + .registerAndAssign(Blocks.MELON), + + PUMPKIN_BLOCK = create("pumpkin_block").damage(6) + .reloadTicks(15) + .knockback(2.0f) + .velocity(0.95f) + .renderTumbling() + .soundPitch(0.9f) + .onBlockHit(placeBlockOnGround(Blocks.PUMPKIN.delegate)) + .registerAndAssign(Blocks.PUMPKIN) ; public static void registerType(ResourceLocation resLoc, PotatoCannonProjectileTypes type) { @@ -184,30 +274,59 @@ public class PotatoCannonProjectileTypes { onBlockHit.accept(world, ray); } - private static Consumer potion(Effect effect, int seconds) { + private static Consumer potion(Effect effect, int level, int ticks) { return ray -> { Entity entity = ray.getEntity(); if (entity instanceof LivingEntity) - ((LivingEntity) entity).addPotionEffect(new EffectInstance(effect, seconds)); + ((LivingEntity) entity).addPotionEffect(new EffectInstance(effect, ticks, level - 1)); + }; + } + + private static Consumer foodEffects(Food food) { + return ray -> { + Entity entity = ray.getEntity(); + if (entity instanceof LivingEntity) { + for (Pair effect : food.getEffects()) { + if (Create.RANDOM.nextFloat() < effect.getSecond()) + ((LivingEntity) entity).addPotionEffect(effect.getFirst()); + } + } }; } private static BiConsumer plantCrop(IRegistryDelegate cropBlock) { return (world, ray) -> { - BlockPos pos = ray.getPos(); - if (!world.isAreaLoaded(pos, 1)) + BlockPos hitPos = ray.getPos(); + if (!world.isAreaLoaded(hitPos, 1)) return; - BlockState blockState = world.getBlockState(pos); - if (!world.getBlockState(pos.up()) + Direction face = ray.getFace(); + BlockPos placePos = hitPos.offset(face); + if (!world.getBlockState(placePos) .getMaterial() .isReplaceable()) return; if (!(cropBlock.get() instanceof IPlantable)) return; - if (!blockState.canSustainPlant(world, pos, Direction.UP, (IPlantable) cropBlock.get())) + BlockState blockState = world.getBlockState(hitPos); + if (!blockState.canSustainPlant(world, hitPos, face, (IPlantable) cropBlock.get())) return; - world.setBlockState(pos.up(), cropBlock.get() - .getDefaultState(), 3); + world.setBlockState(placePos, cropBlock.get().getDefaultState(), 3); + }; + } + + private static BiConsumer placeBlockOnGround(IRegistryDelegate block) { + return (world, ray) -> { + if (ray.getFace() != Direction.UP) + return; + BlockPos hitPos = ray.getPos(); + if (!world.isAreaLoaded(hitPos, 1)) + return; + BlockPos placePos = hitPos.up(); + if (!world.getBlockState(placePos) + .getMaterial() + .isReplaceable()) + return; + world.setBlockState(placePos, block.get().getDefaultState(), 3); }; } diff --git a/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoProjectileEntity.java b/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoProjectileEntity.java index be80dd36d..6640b7b57 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoProjectileEntity.java +++ b/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoProjectileEntity.java @@ -134,6 +134,10 @@ public class PotatoProjectileEntity extends DamagingProjectileEntity implements } LivingEntity livingentity = (LivingEntity) target; + + if (type.getReloadTicks() < 10) + livingentity.hurtResistantTime = type.getReloadTicks() + 10; + if (knockback > 0) { Vector3d appliedMotion = this.getMotion() .mul(1.0D, 0.0D, 1.0D) @@ -184,8 +188,10 @@ public class PotatoProjectileEntity extends DamagingProjectileEntity implements } @Override - public boolean attackEntityFrom(DamageSource p_70097_1_, float p_70097_2_) { - if (this.isInvulnerableTo(p_70097_1_)) + public boolean attackEntityFrom(DamageSource source, float amt) { + if (source == DamageSource.IN_FIRE || source == DamageSource.ON_FIRE) + return false; + if (this.isInvulnerableTo(source)) return false; pop(getPositionVec()); remove(); diff --git a/src/main/java/com/simibubi/create/content/logistics/item/LecternControllerBlock.java b/src/main/java/com/simibubi/create/content/logistics/item/LecternControllerBlock.java index 989fe2d92..339806dbb 100644 --- a/src/main/java/com/simibubi/create/content/logistics/item/LecternControllerBlock.java +++ b/src/main/java/com/simibubi/create/content/logistics/item/LecternControllerBlock.java @@ -1,9 +1,14 @@ package com.simibubi.create.content.logistics.item; +import java.util.ArrayList; + import javax.annotation.Nullable; +import com.simibubi.create.AllItems; import com.simibubi.create.AllSoundEvents; import com.simibubi.create.AllTileEntities; +import com.simibubi.create.content.schematics.ISpecialBlockItemRequirement; +import com.simibubi.create.content.schematics.ItemRequirement; import com.simibubi.create.foundation.block.ITE; import net.minecraft.block.BlockState; @@ -16,10 +21,11 @@ import net.minecraft.util.ActionResultType; import net.minecraft.util.Hand; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockRayTraceResult; +import net.minecraft.util.math.RayTraceResult; import net.minecraft.world.IBlockReader; import net.minecraft.world.World; -public class LecternControllerBlock extends LecternBlock implements ITE { +public class LecternControllerBlock extends LecternBlock implements ITE, ISpecialBlockItemRequirement { public LecternControllerBlock(Properties properties) { super(properties); @@ -89,4 +95,16 @@ public class LecternControllerBlock extends LecternBlock implements ITE requiredItems = new ArrayList<>(); + requiredItems.add(new ItemStack(Blocks.LECTERN)); + requiredItems.add(new ItemStack(AllItems.LINKED_CONTROLLER.get())); + return new ItemRequirement(ItemRequirement.ItemUseType.CONSUME, requiredItems); + } } diff --git a/src/main/java/com/simibubi/create/content/logistics/item/LecternControllerTileEntity.java b/src/main/java/com/simibubi/create/content/logistics/item/LecternControllerTileEntity.java index 9329019de..029a6688e 100644 --- a/src/main/java/com/simibubi/create/content/logistics/item/LecternControllerTileEntity.java +++ b/src/main/java/com/simibubi/create/content/logistics/item/LecternControllerTileEntity.java @@ -48,6 +48,12 @@ public class LecternControllerTileEntity extends SmartTileEntity { compound.putUniqueId("User", user); } + @Override + public void writeSafe(CompoundNBT compound, boolean clientPacket) { + super.writeSafe(compound, clientPacket); + compound.put("Controller", controller.write(new CompoundNBT())); + } + @Override protected void fromTag(BlockState state, CompoundNBT compound, boolean clientPacket) { super.fromTag(state, compound, clientPacket); diff --git a/src/main/java/com/simibubi/create/content/schematics/SchematicPrinter.java b/src/main/java/com/simibubi/create/content/schematics/SchematicPrinter.java index 4006b976a..50c05fb04 100644 --- a/src/main/java/com/simibubi/create/content/schematics/SchematicPrinter.java +++ b/src/main/java/com/simibubi/create/content/schematics/SchematicPrinter.java @@ -22,7 +22,6 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.util.Direction; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.MutableBoundingBox; -import net.minecraft.util.math.vector.Vector3i; import net.minecraft.world.World; import net.minecraft.world.gen.feature.template.PlacementSettings; import net.minecraft.world.gen.feature.template.Template; @@ -119,7 +118,8 @@ public class SchematicPrinter { } public boolean isWorldEmpty() { - return blockReader.getBounds().getLength().equals(new Vector3i(0,0,0)); + return blockReader.getAllPositions().isEmpty(); + //return blockReader.getBounds().getLength().equals(new Vector3i(0,0,0)); } @FunctionalInterface diff --git a/src/main/java/com/simibubi/create/foundation/utility/VecHelper.java b/src/main/java/com/simibubi/create/foundation/utility/VecHelper.java index 7491d635c..a2cb48d26 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/VecHelper.java +++ b/src/main/java/com/simibubi/create/foundation/utility/VecHelper.java @@ -60,6 +60,20 @@ public class VecHelper { return vec; } + public static Vector3d lookAt(Vector3d vec, Vector3d fwd) { + fwd = fwd.normalize(); + Vector3d up = new Vector3d(0,1,0); + double dot = fwd.dotProduct(up); + if (Math.abs(dot) > 1 - 1.0E-3) + up = new Vector3d(0, 0, dot > 0 ? 1 : -1); + Vector3d right = fwd.crossProduct(up).normalize(); + up = right.crossProduct(fwd).normalize(); + double x = vec.x * right.x + vec.y * up.x + vec.z * fwd.x; + double y = vec.x * right.y + vec.y * up.y + vec.z * fwd.y; + double z = vec.x * right.z + vec.y * up.z + vec.z * fwd.z; + return new Vector3d(x, y, z); + } + public static boolean isVecPointingTowards(Vector3d vec, Direction direction) { return Vector3d.of(direction.getDirectionVec()) .dotProduct(vec.normalize()) > 0.125; // slight tolerance to activate perpendicular movement actors diff --git a/src/main/resources/assets/create/lang/default/tooltips.json b/src/main/resources/assets/create/lang/default/tooltips.json index de63406a8..6fca14d13 100644 --- a/src/main/resources/assets/create/lang/default/tooltips.json +++ b/src/main/resources/assets/create/lang/default/tooltips.json @@ -220,10 +220,10 @@ "block.create.peculiar_bell.tooltip": "PECULIAR BELL", "block.create.peculiar_bell.tooltip.summary": "A decorative brass bell. Placing it above a _Soul Fire_ or _Soul Campfire_ may cause a spooky transformation to occur...", - "block.create.cursed_bell.tooltip": "CURSED BELL", - "block.create.cursed_bell.tooltip.summary": "A spooky brass bell haunted by lost souls of the Nether.", - "block.create.cursed_bell.tooltip.condition1": "When Held or Rang", - "block.create.cursed_bell.tooltip.behaviour1": "Highlights nearby dark spots on which Hostile Mobs could spawn.", + "block.create.haunted_bell.tooltip": "HAUNTED BELL", + "block.create.haunted_bell.tooltip.summary": "A spooky brass bell haunted by lost souls of the Nether.", + "block.create.haunted_bell.tooltip.condition1": "When Held or Rang", + "block.create.haunted_bell.tooltip.behaviour1": "Highlights nearby _dark spots_ on which _Hostile Mobs_ could spawn.", "create.gui.chromatic_projector.title": "Chromatic Projector", "create.gui.chromatic_projector.filter.invert": "Invert", diff --git a/src/main/resources/assets/create/models/block/cursed_bell/bell.json b/src/main/resources/assets/create/models/block/haunted_bell/bell.json similarity index 100% rename from src/main/resources/assets/create/models/block/cursed_bell/bell.json rename to src/main/resources/assets/create/models/block/haunted_bell/bell.json diff --git a/src/main/resources/assets/create/models/block/cursed_bell/block_ceiling.json b/src/main/resources/assets/create/models/block/haunted_bell/block_ceiling.json similarity index 100% rename from src/main/resources/assets/create/models/block/cursed_bell/block_ceiling.json rename to src/main/resources/assets/create/models/block/haunted_bell/block_ceiling.json diff --git a/src/main/resources/assets/create/models/block/cursed_bell/block_double_wall.json b/src/main/resources/assets/create/models/block/haunted_bell/block_double_wall.json similarity index 100% rename from src/main/resources/assets/create/models/block/cursed_bell/block_double_wall.json rename to src/main/resources/assets/create/models/block/haunted_bell/block_double_wall.json diff --git a/src/main/resources/assets/create/models/block/cursed_bell/block_floor.json b/src/main/resources/assets/create/models/block/haunted_bell/block_floor.json similarity index 100% rename from src/main/resources/assets/create/models/block/cursed_bell/block_floor.json rename to src/main/resources/assets/create/models/block/haunted_bell/block_floor.json diff --git a/src/main/resources/assets/create/models/block/cursed_bell/block_single_wall.json b/src/main/resources/assets/create/models/block/haunted_bell/block_single_wall.json similarity index 100% rename from src/main/resources/assets/create/models/block/cursed_bell/block_single_wall.json rename to src/main/resources/assets/create/models/block/haunted_bell/block_single_wall.json diff --git a/src/main/resources/assets/create/models/block/cursed_bell/item.json b/src/main/resources/assets/create/models/block/haunted_bell/item.json similarity index 100% rename from src/main/resources/assets/create/models/block/cursed_bell/item.json rename to src/main/resources/assets/create/models/block/haunted_bell/item.json diff --git a/src/main/resources/assets/create/sounds/cursed_bell_convert.ogg b/src/main/resources/assets/create/sounds/haunted_bell_convert.ogg similarity index 100% rename from src/main/resources/assets/create/sounds/cursed_bell_convert.ogg rename to src/main/resources/assets/create/sounds/haunted_bell_convert.ogg diff --git a/src/main/resources/assets/create/sounds/cursed_bell_use.ogg b/src/main/resources/assets/create/sounds/haunted_bell_use.ogg similarity index 100% rename from src/main/resources/assets/create/sounds/cursed_bell_use.ogg rename to src/main/resources/assets/create/sounds/haunted_bell_use.ogg From 1a273753eb6e3794c4322c9848c4166896eca68a Mon Sep 17 00:00:00 2001 From: reidbhuntley Date: Sun, 4 Jul 2021 21:56:18 -0400 Subject: [PATCH 009/118] Top-up - Copper Backtank now recharges the durability of pneumatic tools in the wearer's inventory rather than being used as a separate durability source - Potato Cannon and Extendo Grip now become inactive instead of breaking when running out of durability --- .../curiosities/armor/CopperBacktankItem.java | 50 ++++++++++++++++++- .../armor/IBackTankRechargeable.java | 7 +++ .../curiosities/tools/ExtendoGripItem.java | 38 +++++++------- .../tools/ExtendoGripRenderHandler.java | 4 +- .../curiosities/weapons/PotatoCannonItem.java | 12 +++-- 5 files changed, 86 insertions(+), 25 deletions(-) create mode 100644 src/main/java/com/simibubi/create/content/curiosities/armor/IBackTankRechargeable.java diff --git a/src/main/java/com/simibubi/create/content/curiosities/armor/CopperBacktankItem.java b/src/main/java/com/simibubi/create/content/curiosities/armor/CopperBacktankItem.java index 7e537816d..a17233f13 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/armor/CopperBacktankItem.java +++ b/src/main/java/com/simibubi/create/content/curiosities/armor/CopperBacktankItem.java @@ -1,7 +1,14 @@ package com.simibubi.create.content.curiosities.armor; +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import com.google.common.collect.Streams; import com.simibubi.create.foundation.config.AllConfigs; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.entity.player.PlayerInventory; import net.minecraft.inventory.EquipmentSlotType; import net.minecraft.item.BlockItem; import net.minecraft.item.ItemGroup; @@ -11,10 +18,16 @@ import net.minecraft.nbt.CompoundNBT; import net.minecraft.util.ActionResultType; import net.minecraft.util.NonNullList; import net.minecraft.util.math.MathHelper; +import net.minecraftforge.event.TickEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.LogicalSide; +import net.minecraftforge.fml.common.Mod.EventBusSubscriber; +@EventBusSubscriber public class CopperBacktankItem extends CopperArmorItem { public static final int DURABILITY_BAR = 0xefefef; + public static final int RECHARGES_PER_TICK = 4; private BlockItem blockItem; public CopperBacktankItem(Properties p_i48534_3_, BlockItem blockItem) { @@ -41,7 +54,7 @@ public class CopperBacktankItem extends CopperArmorItem { public void fillItemGroup(ItemGroup p_150895_1_, NonNullList p_150895_2_) { if (!isInGroup(p_150895_1_)) return; - + ItemStack stack = new ItemStack(this); CompoundNBT nbt = new CompoundNBT(); nbt.putInt("Air", AllConfigs.SERVER.curiosities.maxAirInBacktank.get()); @@ -65,4 +78,39 @@ public class CopperBacktankItem extends CopperArmorItem { return orCreateTag.getInt("Air"); } + @SubscribeEvent + public static void rechargePneumaticTools(TickEvent.PlayerTickEvent event) { + PlayerEntity player = event.player; + if (event.phase != TickEvent.Phase.START) + return; + if (event.side != LogicalSide.SERVER) + return; + if (player.isSpectator()) + return; + ItemStack tankStack = BackTankUtil.get(player); + if (tankStack.isEmpty()) + return; + + PlayerInventory inv = player.inventory; + + List toCharge = Streams.concat(Stream.of(player.getHeldItemMainhand()), inv.offHandInventory.stream(), + inv.armorInventory.stream(), inv.mainInventory.stream()) + .filter(s -> s.getItem() instanceof IBackTankRechargeable && s.isDamaged()) + .collect(Collectors.toList()); + + int charges = RECHARGES_PER_TICK; + for (ItemStack stack : toCharge) { + while (stack.isDamaged()) { + if (BackTankUtil.canAbsorbDamage(event.player, ((IBackTankRechargeable) stack.getItem()).maxUses())) { + stack.setDamage(stack.getDamage() - 1); + charges--; + if (charges <= 0) + return; + } else { + return; + } + } + } + + } } diff --git a/src/main/java/com/simibubi/create/content/curiosities/armor/IBackTankRechargeable.java b/src/main/java/com/simibubi/create/content/curiosities/armor/IBackTankRechargeable.java new file mode 100644 index 000000000..eb0c753a8 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/curiosities/armor/IBackTankRechargeable.java @@ -0,0 +1,7 @@ +package com.simibubi.create.content.curiosities.armor; + +public interface IBackTankRechargeable { + + int maxUses(); + +} diff --git a/src/main/java/com/simibubi/create/content/curiosities/tools/ExtendoGripItem.java b/src/main/java/com/simibubi/create/content/curiosities/tools/ExtendoGripItem.java index 1cf868e5a..de6e50ad4 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/tools/ExtendoGripItem.java +++ b/src/main/java/com/simibubi/create/content/curiosities/tools/ExtendoGripItem.java @@ -6,6 +6,7 @@ import com.google.common.collect.ImmutableMultimap; import com.google.common.collect.Multimap; import com.simibubi.create.AllItems; import com.simibubi.create.content.curiosities.armor.BackTankUtil; +import com.simibubi.create.content.curiosities.armor.IBackTankRechargeable; import com.simibubi.create.foundation.advancement.AllTriggers; import com.simibubi.create.foundation.config.AllConfigs; import com.simibubi.create.foundation.networking.AllPackets; @@ -26,7 +27,6 @@ import net.minecraft.item.ItemStack; import net.minecraft.item.Rarity; import net.minecraft.nbt.CompoundNBT; import net.minecraft.util.DamageSource; -import net.minecraft.util.Hand; import net.minecraft.util.LazyValue; import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.BlockRayTraceResult; @@ -50,7 +50,7 @@ import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod.EventBusSubscriber; @EventBusSubscriber -public class ExtendoGripItem extends Item { +public class ExtendoGripItem extends Item implements IBackTankRechargeable { private static DamageSource lastActiveDamageSource; public static final int MAX_DAMAGE = 200; @@ -86,8 +86,8 @@ public class ExtendoGripItem extends Item { PlayerEntity player = (PlayerEntity) event.getEntityLiving(); CompoundNBT persistentData = player.getPersistentData(); - boolean inOff = AllItems.EXTENDO_GRIP.isIn(player.getHeldItemOffhand()); - boolean inMain = AllItems.EXTENDO_GRIP.isIn(player.getHeldItemMainhand()); + boolean inOff = isActiveExtendoGrip(player.getHeldItemOffhand()); + boolean inMain = isActiveExtendoGrip(player.getHeldItemMainhand()); boolean holdingDualExtendo = inOff && inMain; boolean holdingExtendo = inOff ^ inMain; holdingExtendo &= !holdingDualExtendo; @@ -198,17 +198,14 @@ public class ExtendoGripItem extends Item { return; if (player.world.isRemote) return; - Hand hand = Hand.MAIN_HAND; - ItemStack extendo = player.getHeldItemMainhand(); - if (!AllItems.EXTENDO_GRIP.isIn(extendo)) { - extendo = player.getHeldItemOffhand(); - hand = Hand.OFF_HAND; + ItemStack main = player.getHeldItemMainhand(); + ItemStack off = player.getHeldItemOffhand(); + for (ItemStack stack : new ItemStack[]{main, off}) { + if (isActiveExtendoGrip(stack)) { + if (!BackTankUtil.canAbsorbDamage(player, ((IBackTankRechargeable) stack.getItem()).maxUses())) + stack.damageItem(1, player, p -> {}); + } } - if (!AllItems.EXTENDO_GRIP.isIn(extendo)) - return; - final Hand h = hand; - if (!BackTankUtil.canAbsorbDamage(player, maxUses())) - extendo.damageItem(1, player, p -> p.sendBreakAnimation(h)); } @Override @@ -226,7 +223,8 @@ public class ExtendoGripItem extends Item { return BackTankUtil.showDurabilityBar(stack, maxUses()); } - private static int maxUses() { + @Override + public int maxUses() { return AllConfigs.SERVER.curiosities.maxExtendoGripActions.get(); } @@ -244,7 +242,7 @@ public class ExtendoGripItem extends Item { public static void bufferLivingAttackEvent(LivingAttackEvent event) { // Workaround for removed patch to get the attacking entity. lastActiveDamageSource = event.getSource(); - + DamageSource source = event.getSource(); if (source == null) return; @@ -314,9 +312,13 @@ public class ExtendoGripItem extends Item { .sendToServer(new ExtendoGripInteractionPacket(target, event.getHand(), event.getLocalPos())); } + public static boolean isActiveExtendoGrip(ItemStack stack) { + return AllItems.EXTENDO_GRIP.isIn(stack) && stack.getDamage() != stack.getMaxDamage() - 1; + } + public static boolean isHoldingExtendoGrip(PlayerEntity player) { - boolean inOff = AllItems.EXTENDO_GRIP.isIn(player.getHeldItemOffhand()); - boolean inMain = AllItems.EXTENDO_GRIP.isIn(player.getHeldItemMainhand()); + boolean inOff = isActiveExtendoGrip(player.getHeldItemOffhand()); + boolean inMain = isActiveExtendoGrip(player.getHeldItemMainhand()); boolean holdingGrip = inOff || inMain; return holdingGrip; } diff --git a/src/main/java/com/simibubi/create/content/curiosities/tools/ExtendoGripRenderHandler.java b/src/main/java/com/simibubi/create/content/curiosities/tools/ExtendoGripRenderHandler.java index 17fadd6c2..5113e063a 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/tools/ExtendoGripRenderHandler.java +++ b/src/main/java/com/simibubi/create/content/curiosities/tools/ExtendoGripRenderHandler.java @@ -59,8 +59,8 @@ public class ExtendoGripRenderHandler { boolean rightHand = event.getHand() == Hand.MAIN_HAND ^ player.getPrimaryHand() == HandSide.LEFT; ItemStack offhandItem = getRenderedOffHandStack(); - boolean notInOffhand = !AllItems.EXTENDO_GRIP.isIn(offhandItem); - if (notInOffhand && !AllItems.EXTENDO_GRIP.isIn(heldItem)) + boolean notInOffhand = !ExtendoGripItem.isActiveExtendoGrip(offhandItem); + if (notInOffhand && !ExtendoGripItem.isActiveExtendoGrip(heldItem)) return; MatrixStack ms = event.getMatrixStack(); diff --git a/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoCannonItem.java b/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoCannonItem.java index 403fc88be..ae9cb8c0b 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoCannonItem.java +++ b/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoCannonItem.java @@ -8,6 +8,7 @@ import com.simibubi.create.AllEntityTypes; import com.simibubi.create.Create; import com.simibubi.create.CreateClient; import com.simibubi.create.content.curiosities.armor.BackTankUtil; +import com.simibubi.create.content.curiosities.armor.IBackTankRechargeable; import com.simibubi.create.content.curiosities.zapper.ShootableGadgetItemMethods; import com.simibubi.create.foundation.config.AllConfigs; import com.simibubi.create.foundation.utility.AnimationTickHolder; @@ -37,7 +38,7 @@ import net.minecraft.world.World; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; -public class PotatoCannonItem extends ShootableItem { +public class PotatoCannonItem extends ShootableItem implements IBackTankRechargeable { public static ItemStack CLIENT_CURRENT_AMMO = ItemStack.EMPTY; public static final int MAX_DAMAGE = 100; @@ -77,7 +78,8 @@ public class PotatoCannonItem extends ShootableItem { return BackTankUtil.showDurabilityBar(stack, maxUses()); } - private int maxUses() { + @Override + public int maxUses() { return AllConfigs.SERVER.curiosities.maxPotatoCannonShots.get(); } @@ -98,6 +100,9 @@ public class PotatoCannonItem extends ShootableItem { @Override public ActionResult onItemRightClick(World world, PlayerEntity player, Hand hand) { ItemStack stack = player.getHeldItem(hand); + if (stack.getDamage() == getMaxDamage(stack) - 1) + return ActionResult.pass(stack); + return findAmmoInInventory(world, player, stack).map(itemStack -> { if (ShootableGadgetItemMethods.shouldSwap(player, stack, hand, this::isCannon)) @@ -150,8 +155,7 @@ public class PotatoCannonItem extends ShootableItem { player.inventory.deleteStack(itemStack); } - if (!BackTankUtil.canAbsorbDamage(player, maxUses())) - stack.damageItem(1, player, p -> p.sendBreakAnimation(hand)); + stack.damageItem(1, player, p -> {}); Integer cooldown = findAmmoInInventory(world, player, stack).flatMap(PotatoCannonProjectileTypes::getProjectileTypeOf) From e561ac8e73fd50096e3d99d9c4b2f9149a477712 Mon Sep 17 00:00:00 2001 From: reidbhuntley Date: Sun, 4 Jul 2021 23:34:04 -0400 Subject: [PATCH 010/118] Immersive pumpkin chuckin' - Block items shot by the Potato Cannon now spawn a FallingBlock entity when they hit the side of a block --- .../weapons/PotatoCannonProjectileTypes.java | 26 ++++++++++++++----- 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoCannonProjectileTypes.java b/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoCannonProjectileTypes.java index ff466020f..676293c6b 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoCannonProjectileTypes.java +++ b/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoCannonProjectileTypes.java @@ -15,6 +15,7 @@ import net.minecraft.block.BlockState; import net.minecraft.block.Blocks; import net.minecraft.entity.Entity; import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.item.FallingBlockEntity; import net.minecraft.entity.passive.FoxEntity; import net.minecraft.item.Food; import net.minecraft.item.Foods; @@ -316,17 +317,30 @@ public class PotatoCannonProjectileTypes { private static BiConsumer placeBlockOnGround(IRegistryDelegate block) { return (world, ray) -> { - if (ray.getFace() != Direction.UP) - return; BlockPos hitPos = ray.getPos(); if (!world.isAreaLoaded(hitPos, 1)) return; - BlockPos placePos = hitPos.up(); + Direction face = ray.getFace(); + BlockPos placePos = hitPos.offset(face); if (!world.getBlockState(placePos) - .getMaterial() - .isReplaceable()) + .getMaterial() + .isReplaceable()) return; - world.setBlockState(placePos, block.get().getDefaultState(), 3); + + if (face == Direction.UP) { + world.setBlockState(placePos, block.get().getDefaultState(), 3); + } else if (world instanceof World) { + double y = ray.getHitVec().y - 0.5; + if (!world.isAirBlock(placePos.up())) + y = Math.min(y, placePos.getY()); + if (!world.isAirBlock(placePos.down())) + y = Math.max(y, placePos.getY()); + + FallingBlockEntity falling = new FallingBlockEntity((World) world, placePos.getX() + 0.5, y, + placePos.getZ() + 0.5, block.get().getDefaultState()); + falling.fallTime = 1; + world.addEntity(falling); + } }; } From 92bf76761e7d6b245672596d84d3626bc2a9093c Mon Sep 17 00:00:00 2001 From: Jozufozu Date: Sun, 4 Jul 2021 23:50:52 -0700 Subject: [PATCH 011/118] Assembling cogs - Cogwheels and Large Cogwheels can now be created via sequenced assembly - Higher return at lower cost - Might want to nerf? - Add placement helper for Deployers on belts/depots/etc. - Multiple SequencedAssemblyRecipes can now start with the same item --- src/generated/resources/.cache/cache | 32 ++--- .../resources/assets/create/lang/en_ud.json | 2 + .../resources/assets/create/lang/en_us.json | 2 + .../assets/create/lang/unfinished/de_de.json | 4 +- .../assets/create/lang/unfinished/es_es.json | 4 +- .../assets/create/lang/unfinished/es_mx.json | 4 +- .../assets/create/lang/unfinished/fr_fr.json | 4 +- .../assets/create/lang/unfinished/it_it.json | 4 +- .../assets/create/lang/unfinished/ja_jp.json | 4 +- .../assets/create/lang/unfinished/ko_kr.json | 4 +- .../assets/create/lang/unfinished/nl_nl.json | 4 +- .../assets/create/lang/unfinished/pl_pl.json | 4 +- .../assets/create/lang/unfinished/pt_br.json | 4 +- .../assets/create/lang/unfinished/ru_ru.json | 4 +- .../assets/create/lang/unfinished/zh_cn.json | 4 +- .../assets/create/lang/unfinished/zh_tw.json | 4 +- .../recipes/sequenced_assembly/cogwheel.json | 63 ++++++++++ .../sequenced_assembly/large_cogwheel.json | 49 ++++++++ .../java/com/simibubi/create/AllBlocks.java | 10 +- .../java/com/simibubi/create/AllItems.java | 10 ++ .../components/AssemblyOperatorBlockItem.java | 50 ++++++++ .../AssemblyOperatorUseContext.java | 16 +++ .../components/deployer/DeployerBlock.java | 14 ++- .../mixer/BasinOperatorBlockItem.java | 40 ------ .../itemAssembly/SequencedAssemblyRecipe.java | 24 +++- .../processing/ProcessingRecipe.java | 11 +- .../create/foundation/data/AssetLookup.java | 6 +- .../data/recipe/CreateRecipeProvider.java | 12 +- .../recipe/SequencedAssemblyRecipeGen.java | 21 +++- .../models/item/incomplete_cogwheel.json | 66 ++++++++++ .../item/incomplete_large_cogwheel.json | 119 ++++++++++++++++++ 31 files changed, 510 insertions(+), 89 deletions(-) create mode 100644 src/generated/resources/data/create/recipes/sequenced_assembly/cogwheel.json create mode 100644 src/generated/resources/data/create/recipes/sequenced_assembly/large_cogwheel.json create mode 100644 src/main/java/com/simibubi/create/content/contraptions/components/AssemblyOperatorBlockItem.java create mode 100644 src/main/java/com/simibubi/create/content/contraptions/components/AssemblyOperatorUseContext.java delete mode 100644 src/main/java/com/simibubi/create/content/contraptions/components/mixer/BasinOperatorBlockItem.java create mode 100644 src/main/resources/assets/create/models/item/incomplete_cogwheel.json create mode 100644 src/main/resources/assets/create/models/item/incomplete_large_cogwheel.json diff --git a/src/generated/resources/.cache/cache b/src/generated/resources/.cache/cache index a0fe1e44d..8702004a0 100644 --- a/src/generated/resources/.cache/cache +++ b/src/generated/resources/.cache/cache @@ -410,21 +410,21 @@ a3a11524cd3515fc01d905767b4b7ea782adaf03 assets/create/blockstates/yellow_seat.j 6801fa1f466f172700e573e5b8ee8ee5f9ca4583 assets/create/blockstates/yellow_valve_handle.json 7f39521b211441f5c3e06d60c5978cebe16cacfb assets/create/blockstates/zinc_block.json b7181bcd8182b2f17088e5aa881f374c9c65470c assets/create/blockstates/zinc_ore.json -391e1552053f8fbb148b0bdf2e61f74ae4782100 assets/create/lang/en_ud.json -9d41edd2a78d074f0e80fbc95b6eb9f1303ef7f5 assets/create/lang/en_us.json -f05c04c9b1e79c446492af47a9bfcde73cefd138 assets/create/lang/unfinished/de_de.json -3b2ed3f1b4910e5cc03af089bf2ddfc1421cfc1f assets/create/lang/unfinished/es_es.json -e9ad51b0ad0e1088f121fb2444ef2019c11a2e80 assets/create/lang/unfinished/es_mx.json -f6f8a3f4b3bf685e324c9216b5bb0467c68da796 assets/create/lang/unfinished/fr_fr.json -d05b807ead4cc5dbae6444de5e91525a385d9b20 assets/create/lang/unfinished/it_it.json -055d6b4d130fedfe0232c351663bd9a1934d1a46 assets/create/lang/unfinished/ja_jp.json -064c4e1d5923dc5a75b178940cb36c42f764a6ad assets/create/lang/unfinished/ko_kr.json -762c1bdec8a3f2ecb4047fbb5b975ffbc1792374 assets/create/lang/unfinished/nl_nl.json -43c113585d98162f8cbe5ec02af06f6f8ae55cbc assets/create/lang/unfinished/pl_pl.json -3ab83a3d7d925821d73e9ab6064d3b479d7c21e6 assets/create/lang/unfinished/pt_br.json -51c20e7a0c4b2af9242ee31cf0cf1516b9f312a5 assets/create/lang/unfinished/ru_ru.json -95bf20119493721c3067319f165e2542295918c0 assets/create/lang/unfinished/zh_cn.json -9604bfe416e4f747efda84b419ec99f2b38bd544 assets/create/lang/unfinished/zh_tw.json +ec48e6d3d500ae94b910d902eb7ed2c8de652fda assets/create/lang/en_ud.json +95e9847bfc97f2ee8e9e48dbd4be8f988f1d48e9 assets/create/lang/en_us.json +4a1af3b7290cb8bd548033d399496de8f0fc1b93 assets/create/lang/unfinished/de_de.json +0d644f8b37a6986cd6296fb6dc4946a375f8d412 assets/create/lang/unfinished/es_es.json +32514e1e911174add48b7fcbbf392ee92272dde1 assets/create/lang/unfinished/es_mx.json +867cd892814aee14f1cc51e2ae8a0985d2fbb014 assets/create/lang/unfinished/fr_fr.json +4dcb9c9eec28e1b9317b9f1c0b4c3d55399e04e6 assets/create/lang/unfinished/it_it.json +f1a4ac058eadf0124bef710c5e7fc63de69b43ee assets/create/lang/unfinished/ja_jp.json +31501180c743cd9104f028228785da5902b1ad6b assets/create/lang/unfinished/ko_kr.json +84f6f5d577de562c1cfbed4a4e559548518e4a87 assets/create/lang/unfinished/nl_nl.json +471e6c2caf80e6314b928e9f437445facc754bca assets/create/lang/unfinished/pl_pl.json +89fae2843334e2ce8864129fe8aa92b692670879 assets/create/lang/unfinished/pt_br.json +90607465325ebe61298bd694a89e284f2e01ce42 assets/create/lang/unfinished/ru_ru.json +ea755903e75859f53cbe38bd0286f4d4fc69abc5 assets/create/lang/unfinished/zh_cn.json +017a50c4585558f62c296c5e59e6e112a71f51af assets/create/lang/unfinished/zh_tw.json 487a511a01b2a4531fb672f917922312db78f958 assets/create/models/block/acacia_window.json b48060cba1a382f373a05bf0039054053eccf076 assets/create/models/block/acacia_window_pane_noside.json 3066db1bf03cffa1a9c7fbacf47ae586632f4eb3 assets/create/models/block/acacia_window_pane_noside_alt.json @@ -3554,6 +3554,8 @@ a9096822db9d12b6014d6d34e52de5821305c03f data/create/recipes/scoria_cobblestone_ a513468ce4d55fe3b3919bd76ba2bd5b6fac4d4e data/create/recipes/scoria_pillar.json 2e0ecbd3619f080d0fc6fe48307c5a5bcc2e91b4 data/create/recipes/scoria_pillar_from_scoria_stonecutting.json 073b7c585b6733e6b984f34b9658566c47540968 data/create/recipes/sequenced_assembly/clockwork_component.json +fafe9cd8b83fd9449f4040c7c2185341a4066d21 data/create/recipes/sequenced_assembly/cogwheel.json +f12f4d7f11b7ca9cdbc36791bbedbd7f14f75acd data/create/recipes/sequenced_assembly/large_cogwheel.json 4e817b521623966fa24186731a70f0e14c03168e data/create/recipes/smelting/aluminum_ingot_compat_silents_mechanisms.json ae90f50589bc06b44765ac8cbb9fbdc2b58fdb32 data/create/recipes/smelting/brass_ingot_from_crushed.json 64cbf425effba00ff2e31d95cffc2be2e0191932 data/create/recipes/smelting/bread.json diff --git a/src/generated/resources/assets/create/lang/en_ud.json b/src/generated/resources/assets/create/lang/en_ud.json index 42c97f237..5b61261d0 100644 --- a/src/generated/resources/assets/create/lang/en_ud.json +++ b/src/generated/resources/assets/create/lang/en_ud.json @@ -473,6 +473,8 @@ "item.create.honey_bucket": "\u0287\u01DD\u029E\u0254n\u15FA \u028E\u01DDuoH", "item.create.honeyed_apple": "\u01DD\u05DFdd\u2C6F p\u01DD\u028E\u01DDuoH", "item.create.incomplete_clockwork_component": "\u0287u\u01DDuod\u026Fo\u0186 \u029E\u0279o\u028D\u029E\u0254o\u05DF\u0186 \u01DD\u0287\u01DD\u05DFd\u026Fo\u0254uI", + "item.create.incomplete_cogwheel": "\u05DF\u01DD\u01DD\u0265\u028Dbo\u0186 \u01DD\u0287\u01DD\u05DFd\u026Fo\u0254uI", + "item.create.incomplete_large_cogwheel": "\u05DF\u01DD\u01DD\u0265\u028Dbo\u0186 \u01DDb\u0279\u0250\uA780 \u01DD\u0287\u01DD\u05DFd\u026Fo\u0254uI", "item.create.iron_sheet": "\u0287\u01DD\u01DD\u0265S uo\u0279I", "item.create.linked_controller": "\u0279\u01DD\u05DF\u05DFo\u0279\u0287uo\u0186 p\u01DD\u029Eu\u0131\uA780", "item.create.minecart_contraption": "uo\u0131\u0287d\u0250\u0279\u0287uo\u0186 \u0287\u0279\u0250\u0254\u01DDu\u0131W", diff --git a/src/generated/resources/assets/create/lang/en_us.json b/src/generated/resources/assets/create/lang/en_us.json index 04be2bdfa..882d8b81c 100644 --- a/src/generated/resources/assets/create/lang/en_us.json +++ b/src/generated/resources/assets/create/lang/en_us.json @@ -479,6 +479,8 @@ "item.create.honey_bucket": "Honey Bucket", "item.create.honeyed_apple": "Honeyed Apple", "item.create.incomplete_clockwork_component": "Incomplete Clockwork Component", + "item.create.incomplete_cogwheel": "Incomplete Cogwheel", + "item.create.incomplete_large_cogwheel": "Incomplete Large Cogwheel", "item.create.iron_sheet": "Iron Sheet", "item.create.linked_controller": "Linked Controller", "item.create.minecart_contraption": "Minecart Contraption", 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 d041cb02d..76c128d7a 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: 1090", + "_": "Missing Localizations: 1092", "_": "->------------------------] Game Elements [------------------------<-", @@ -480,6 +480,8 @@ "item.create.honey_bucket": "Honigeimer", "item.create.honeyed_apple": "Honigapfel", "item.create.incomplete_clockwork_component": "UNLOCALIZED: Incomplete Clockwork Component", + "item.create.incomplete_cogwheel": "UNLOCALIZED: Incomplete Cogwheel", + "item.create.incomplete_large_cogwheel": "UNLOCALIZED: Incomplete Large Cogwheel", "item.create.iron_sheet": "Eisenblech", "item.create.linked_controller": "UNLOCALIZED: Linked Controller", "item.create.minecart_contraption": "Loren Vorrichtung", 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 20b84538e..f81158ad8 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: 853", + "_": "Missing Localizations: 855", "_": "->------------------------] Game Elements [------------------------<-", @@ -480,6 +480,8 @@ "item.create.honey_bucket": "Cubo de miel", "item.create.honeyed_apple": "UNLOCALIZED: Honeyed Apple", "item.create.incomplete_clockwork_component": "UNLOCALIZED: Incomplete Clockwork Component", + "item.create.incomplete_cogwheel": "UNLOCALIZED: Incomplete Cogwheel", + "item.create.incomplete_large_cogwheel": "UNLOCALIZED: Incomplete Large Cogwheel", "item.create.iron_sheet": "Lámina de hierro", "item.create.linked_controller": "UNLOCALIZED: Linked Controller", "item.create.minecart_contraption": "Artilugio de vagoneta", diff --git a/src/generated/resources/assets/create/lang/unfinished/es_mx.json b/src/generated/resources/assets/create/lang/unfinished/es_mx.json index d72d4c061..caed954f6 100644 --- a/src/generated/resources/assets/create/lang/unfinished/es_mx.json +++ b/src/generated/resources/assets/create/lang/unfinished/es_mx.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 1457", + "_": "Missing Localizations: 1459", "_": "->------------------------] Game Elements [------------------------<-", @@ -480,6 +480,8 @@ "item.create.honey_bucket": "Cubeta de Miel", "item.create.honeyed_apple": "UNLOCALIZED: Honeyed Apple", "item.create.incomplete_clockwork_component": "UNLOCALIZED: Incomplete Clockwork Component", + "item.create.incomplete_cogwheel": "UNLOCALIZED: Incomplete Cogwheel", + "item.create.incomplete_large_cogwheel": "UNLOCALIZED: Incomplete Large Cogwheel", "item.create.iron_sheet": "Lámina de Hierro", "item.create.linked_controller": "UNLOCALIZED: Linked Controller", "item.create.minecart_contraption": "Artefacto de Vagón", diff --git a/src/generated/resources/assets/create/lang/unfinished/fr_fr.json b/src/generated/resources/assets/create/lang/unfinished/fr_fr.json index 17f930584..040b84f30 100644 --- a/src/generated/resources/assets/create/lang/unfinished/fr_fr.json +++ b/src/generated/resources/assets/create/lang/unfinished/fr_fr.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 1342", + "_": "Missing Localizations: 1344", "_": "->------------------------] Game Elements [------------------------<-", @@ -480,6 +480,8 @@ "item.create.honey_bucket": "Seau de miel", "item.create.honeyed_apple": "UNLOCALIZED: Honeyed Apple", "item.create.incomplete_clockwork_component": "UNLOCALIZED: Incomplete Clockwork Component", + "item.create.incomplete_cogwheel": "UNLOCALIZED: Incomplete Cogwheel", + "item.create.incomplete_large_cogwheel": "UNLOCALIZED: Incomplete Large Cogwheel", "item.create.iron_sheet": "Plaque de Fer", "item.create.linked_controller": "UNLOCALIZED: Linked Controller", "item.create.minecart_contraption": "Engin de wagonnet", diff --git a/src/generated/resources/assets/create/lang/unfinished/it_it.json b/src/generated/resources/assets/create/lang/unfinished/it_it.json index 8bab297b1..b418f05fb 100644 --- a/src/generated/resources/assets/create/lang/unfinished/it_it.json +++ b/src/generated/resources/assets/create/lang/unfinished/it_it.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 870", + "_": "Missing Localizations: 872", "_": "->------------------------] Game Elements [------------------------<-", @@ -480,6 +480,8 @@ "item.create.honey_bucket": "Secchio di miele", "item.create.honeyed_apple": "UNLOCALIZED: Honeyed Apple", "item.create.incomplete_clockwork_component": "UNLOCALIZED: Incomplete Clockwork Component", + "item.create.incomplete_cogwheel": "UNLOCALIZED: Incomplete Cogwheel", + "item.create.incomplete_large_cogwheel": "UNLOCALIZED: Incomplete Large Cogwheel", "item.create.iron_sheet": "Lamiera di ferro", "item.create.linked_controller": "UNLOCALIZED: Linked Controller", "item.create.minecart_contraption": "Contrazione per carrello da miniera", diff --git a/src/generated/resources/assets/create/lang/unfinished/ja_jp.json b/src/generated/resources/assets/create/lang/unfinished/ja_jp.json index dfd0616e8..b7c0f1124 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ja_jp.json +++ b/src/generated/resources/assets/create/lang/unfinished/ja_jp.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 236", + "_": "Missing Localizations: 238", "_": "->------------------------] Game Elements [------------------------<-", @@ -480,6 +480,8 @@ "item.create.honey_bucket": "ハチミツ入りバケツ", "item.create.honeyed_apple": "リンゴのハチミツかけ", "item.create.incomplete_clockwork_component": "UNLOCALIZED: Incomplete Clockwork Component", + "item.create.incomplete_cogwheel": "UNLOCALIZED: Incomplete Cogwheel", + "item.create.incomplete_large_cogwheel": "UNLOCALIZED: Incomplete Large Cogwheel", "item.create.iron_sheet": "鉄板", "item.create.linked_controller": "UNLOCALIZED: Linked Controller", "item.create.minecart_contraption": "からくり付きトロッコ", diff --git a/src/generated/resources/assets/create/lang/unfinished/ko_kr.json b/src/generated/resources/assets/create/lang/unfinished/ko_kr.json index dd6dc4268..5f71560ad 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ko_kr.json +++ b/src/generated/resources/assets/create/lang/unfinished/ko_kr.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 923", + "_": "Missing Localizations: 925", "_": "->------------------------] Game Elements [------------------------<-", @@ -480,6 +480,8 @@ "item.create.honey_bucket": "꿀 양동이", "item.create.honeyed_apple": "UNLOCALIZED: Honeyed Apple", "item.create.incomplete_clockwork_component": "UNLOCALIZED: Incomplete Clockwork Component", + "item.create.incomplete_cogwheel": "UNLOCALIZED: Incomplete Cogwheel", + "item.create.incomplete_large_cogwheel": "UNLOCALIZED: Incomplete Large Cogwheel", "item.create.iron_sheet": "철 판", "item.create.linked_controller": "UNLOCALIZED: Linked Controller", "item.create.minecart_contraption": "광산 수레 장치", diff --git a/src/generated/resources/assets/create/lang/unfinished/nl_nl.json b/src/generated/resources/assets/create/lang/unfinished/nl_nl.json index d0630f074..d51e454b1 100644 --- a/src/generated/resources/assets/create/lang/unfinished/nl_nl.json +++ b/src/generated/resources/assets/create/lang/unfinished/nl_nl.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 1723", + "_": "Missing Localizations: 1725", "_": "->------------------------] Game Elements [------------------------<-", @@ -480,6 +480,8 @@ "item.create.honey_bucket": "UNLOCALIZED: Honey Bucket", "item.create.honeyed_apple": "UNLOCALIZED: Honeyed Apple", "item.create.incomplete_clockwork_component": "UNLOCALIZED: Incomplete Clockwork Component", + "item.create.incomplete_cogwheel": "UNLOCALIZED: Incomplete Cogwheel", + "item.create.incomplete_large_cogwheel": "UNLOCALIZED: Incomplete Large Cogwheel", "item.create.iron_sheet": "IJzeren Platen", "item.create.linked_controller": "UNLOCALIZED: Linked Controller", "item.create.minecart_contraption": "UNLOCALIZED: Minecart Contraption", diff --git a/src/generated/resources/assets/create/lang/unfinished/pl_pl.json b/src/generated/resources/assets/create/lang/unfinished/pl_pl.json index 2ef7a4458..35edf4492 100644 --- a/src/generated/resources/assets/create/lang/unfinished/pl_pl.json +++ b/src/generated/resources/assets/create/lang/unfinished/pl_pl.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 212", + "_": "Missing Localizations: 214", "_": "->------------------------] Game Elements [------------------------<-", @@ -480,6 +480,8 @@ "item.create.honey_bucket": "Wiadro miodu", "item.create.honeyed_apple": "Jabłko w miodzie", "item.create.incomplete_clockwork_component": "UNLOCALIZED: Incomplete Clockwork Component", + "item.create.incomplete_cogwheel": "UNLOCALIZED: Incomplete Cogwheel", + "item.create.incomplete_large_cogwheel": "UNLOCALIZED: Incomplete Large Cogwheel", "item.create.iron_sheet": "Arkusz żelaza", "item.create.linked_controller": "UNLOCALIZED: Linked Controller", "item.create.minecart_contraption": "Maszyna w wagoniku", 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 cd60e31b3..9808e9245 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: 1764", + "_": "Missing Localizations: 1766", "_": "->------------------------] Game Elements [------------------------<-", @@ -480,6 +480,8 @@ "item.create.honey_bucket": "UNLOCALIZED: Honey Bucket", "item.create.honeyed_apple": "UNLOCALIZED: Honeyed Apple", "item.create.incomplete_clockwork_component": "UNLOCALIZED: Incomplete Clockwork Component", + "item.create.incomplete_cogwheel": "UNLOCALIZED: Incomplete Cogwheel", + "item.create.incomplete_large_cogwheel": "UNLOCALIZED: Incomplete Large Cogwheel", "item.create.iron_sheet": "Placas de Ferro", "item.create.linked_controller": "UNLOCALIZED: Linked Controller", "item.create.minecart_contraption": "UNLOCALIZED: Minecart Contraption", diff --git a/src/generated/resources/assets/create/lang/unfinished/ru_ru.json b/src/generated/resources/assets/create/lang/unfinished/ru_ru.json index 5229d9134..e117ac7f1 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ru_ru.json +++ b/src/generated/resources/assets/create/lang/unfinished/ru_ru.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 769", + "_": "Missing Localizations: 771", "_": "->------------------------] Game Elements [------------------------<-", @@ -480,6 +480,8 @@ "item.create.honey_bucket": "Ведро мёда", "item.create.honeyed_apple": "Яблоко в меду", "item.create.incomplete_clockwork_component": "UNLOCALIZED: Incomplete Clockwork Component", + "item.create.incomplete_cogwheel": "UNLOCALIZED: Incomplete Cogwheel", + "item.create.incomplete_large_cogwheel": "UNLOCALIZED: Incomplete Large Cogwheel", "item.create.iron_sheet": "Железный лист", "item.create.linked_controller": "UNLOCALIZED: Linked Controller", "item.create.minecart_contraption": "Вагонеточная штуковина", 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 42177778b..9be5e1556 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: 253", + "_": "Missing Localizations: 255", "_": "->------------------------] Game Elements [------------------------<-", @@ -480,6 +480,8 @@ "item.create.honey_bucket": "蜂蜜桶", "item.create.honeyed_apple": "蜜渍苹果", "item.create.incomplete_clockwork_component": "UNLOCALIZED: Incomplete Clockwork Component", + "item.create.incomplete_cogwheel": "UNLOCALIZED: Incomplete Cogwheel", + "item.create.incomplete_large_cogwheel": "UNLOCALIZED: Incomplete Large Cogwheel", "item.create.iron_sheet": "铁板", "item.create.linked_controller": "UNLOCALIZED: Linked Controller", "item.create.minecart_contraption": "装配过的矿车", diff --git a/src/generated/resources/assets/create/lang/unfinished/zh_tw.json b/src/generated/resources/assets/create/lang/unfinished/zh_tw.json index a33475dc0..e13ef84a4 100644 --- a/src/generated/resources/assets/create/lang/unfinished/zh_tw.json +++ b/src/generated/resources/assets/create/lang/unfinished/zh_tw.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 248", + "_": "Missing Localizations: 250", "_": "->------------------------] Game Elements [------------------------<-", @@ -480,6 +480,8 @@ "item.create.honey_bucket": "蜂蜜桶", "item.create.honeyed_apple": "蜂蜜蘋果", "item.create.incomplete_clockwork_component": "UNLOCALIZED: Incomplete Clockwork Component", + "item.create.incomplete_cogwheel": "UNLOCALIZED: Incomplete Cogwheel", + "item.create.incomplete_large_cogwheel": "UNLOCALIZED: Incomplete Large Cogwheel", "item.create.iron_sheet": "鐵板", "item.create.linked_controller": "UNLOCALIZED: Linked Controller", "item.create.minecart_contraption": "裝修過的礦車", diff --git a/src/generated/resources/data/create/recipes/sequenced_assembly/cogwheel.json b/src/generated/resources/data/create/recipes/sequenced_assembly/cogwheel.json new file mode 100644 index 000000000..52d588d43 --- /dev/null +++ b/src/generated/resources/data/create/recipes/sequenced_assembly/cogwheel.json @@ -0,0 +1,63 @@ +{ + "type": "create:sequenced_assembly", + "ingredient": { + "item": "create:shaft" + }, + "transitionalItem": { + "item": "create:incomplete_cogwheel" + }, + "sequence": [ + { + "type": "create:deploying", + "ingredients": [ + { + "item": "create:incomplete_cogwheel" + }, + { + "tag": "minecraft:planks" + } + ], + "results": [ + { + "item": "create:incomplete_cogwheel" + } + ] + }, + { + "type": "create:cutting", + "ingredients": [ + { + "item": "create:incomplete_cogwheel" + } + ], + "results": [ + { + "item": "create:incomplete_cogwheel" + } + ], + "processingTime": 20 + }, + { + "type": "create:cutting", + "ingredients": [ + { + "item": "create:incomplete_cogwheel" + } + ], + "results": [ + { + "item": "create:incomplete_cogwheel" + } + ], + "processingTime": 40 + } + ], + "results": [ + { + "item": "create:cogwheel", + "count": 12, + "chance": 12.0 + } + ], + "loops": 4 +} \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/sequenced_assembly/large_cogwheel.json b/src/generated/resources/data/create/recipes/sequenced_assembly/large_cogwheel.json new file mode 100644 index 000000000..005b9169c --- /dev/null +++ b/src/generated/resources/data/create/recipes/sequenced_assembly/large_cogwheel.json @@ -0,0 +1,49 @@ +{ + "type": "create:sequenced_assembly", + "ingredient": { + "item": "create:andesite_alloy" + }, + "transitionalItem": { + "item": "create:incomplete_large_cogwheel" + }, + "sequence": [ + { + "type": "create:deploying", + "ingredients": [ + { + "item": "create:incomplete_large_cogwheel" + }, + { + "tag": "minecraft:wooden_slabs" + } + ], + "results": [ + { + "item": "create:incomplete_large_cogwheel" + } + ] + }, + { + "type": "create:cutting", + "ingredients": [ + { + "item": "create:incomplete_large_cogwheel" + } + ], + "results": [ + { + "item": "create:incomplete_large_cogwheel" + } + ], + "processingTime": 50 + } + ], + "results": [ + { + "item": "create:large_cogwheel", + "count": 3, + "chance": 12.0 + } + ], + "loops": 8 +} \ No newline at end of file diff --git a/src/main/java/com/simibubi/create/AllBlocks.java b/src/main/java/com/simibubi/create/AllBlocks.java index 5a7c66cd7..6f8d6fc2a 100644 --- a/src/main/java/com/simibubi/create/AllBlocks.java +++ b/src/main/java/com/simibubi/create/AllBlocks.java @@ -40,7 +40,7 @@ import com.simibubi.create.content.contraptions.components.flywheel.FlywheelBloc import com.simibubi.create.content.contraptions.components.flywheel.FlywheelGenerator; import com.simibubi.create.content.contraptions.components.flywheel.engine.FurnaceEngineBlock; import com.simibubi.create.content.contraptions.components.millstone.MillstoneBlock; -import com.simibubi.create.content.contraptions.components.mixer.BasinOperatorBlockItem; +import com.simibubi.create.content.contraptions.components.AssemblyOperatorBlockItem; import com.simibubi.create.content.contraptions.components.mixer.MechanicalMixerBlock; import com.simibubi.create.content.contraptions.components.motor.CreativeMotorBlock; import com.simibubi.create.content.contraptions.components.motor.CreativeMotorGenerator; @@ -457,7 +457,7 @@ public class AllBlocks { .properties(AbstractBlock.Properties::nonOpaque) .blockstate(BlockStateGen.horizontalBlockProvider(true)) .transform(StressConfigDefaults.setImpact(8.0)) - .item(BasinOperatorBlockItem::new) + .item(AssemblyOperatorBlockItem::new) .transform(customItemModel()) .register(); @@ -468,7 +468,7 @@ public class AllBlocks { .blockstate((c, p) -> p.simpleBlock(c.getEntry(), AssetLookup.partialBaseModel(c, p))) .addLayer(() -> RenderType::getCutoutMipped) .transform(StressConfigDefaults.setImpact(4.0)) - .item(BasinOperatorBlockItem::new) + .item(AssemblyOperatorBlockItem::new) .transform(customItemModel()) .register(); @@ -693,7 +693,7 @@ public class AllBlocks { .initialProperties(SharedProperties::softMetal) .blockstate((ctx, prov) -> prov.simpleBlock(ctx.getEntry(), AssetLookup.partialBaseModel(ctx, prov))) .addLayer(() -> RenderType::getCutoutMipped) - .item(BasinOperatorBlockItem::new) + .item(AssemblyOperatorBlockItem::new) .transform(customItemModel()) .register(); @@ -923,7 +923,7 @@ public class AllBlocks { .blockstate(BlockStateGen.directionalAxisBlockProvider()) .transform(StressConfigDefaults.setImpact(4.0)) .onRegister(addMovementBehaviour(new DeployerMovementBehaviour())) - .item() + .item(AssemblyOperatorBlockItem::new) .transform(customItemModel()) .register(); diff --git a/src/main/java/com/simibubi/create/AllItems.java b/src/main/java/com/simibubi/create/AllItems.java index aecc4270a..9679c255f 100644 --- a/src/main/java/com/simibubi/create/AllItems.java +++ b/src/main/java/com/simibubi/create/AllItems.java @@ -88,6 +88,16 @@ public class AllItems { public static final ItemEntry CLOCKWORK_COMPONENT = ingredient("clockwork_component"); + public static final ItemEntry INCOMPLETE_COGWHEEL = + REGISTRATE.item("incomplete_cogwheel", SequencedAssemblyItem::new) + .model(AssetLookup.existingItemModel()) + .register(); + + public static final ItemEntry INCOMPLETE_LARGE_COGWHEEL = + REGISTRATE.item("incomplete_large_cogwheel", SequencedAssemblyItem::new) + .model(AssetLookup.existingItemModel()) + .register(); + public static final ItemEntry BLAZE_CAKE_BASE = REGISTRATE.item("blaze_cake_base", HiddenIngredientItem::new) .tag(AllItemTags.UPRIGHT_ON_BELT.tag) diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/AssemblyOperatorBlockItem.java b/src/main/java/com/simibubi/create/content/contraptions/components/AssemblyOperatorBlockItem.java new file mode 100644 index 000000000..fcba185b0 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/components/AssemblyOperatorBlockItem.java @@ -0,0 +1,50 @@ +package com.simibubi.create.content.contraptions.components; + +import com.simibubi.create.AllBlocks; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.item.BlockItem; +import net.minecraft.item.BlockItemUseContext; +import net.minecraft.util.ActionResultType; +import net.minecraft.util.Direction; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.BlockRayTraceResult; +import net.minecraft.util.math.vector.Vector3d; + +public class AssemblyOperatorBlockItem extends BlockItem { + + public AssemblyOperatorBlockItem(Block block, Properties builder) { + super(block, builder); + } + + @Override + public ActionResultType tryPlace(BlockItemUseContext context) { + BlockPos placedOnPos = context.getPos() + .offset(context.getFace() + .getOpposite()); + BlockState placedOnState = context.getWorld() + .getBlockState(placedOnPos); + if (operatesOn(placedOnState)) { + if (context.getWorld() + .getBlockState(placedOnPos.up(2)) + .getMaterial() + .isReplaceable()) + context = adjustContext(context, placedOnPos); + else + return ActionResultType.FAIL; + } + + return super.tryPlace(context); + } + + protected BlockItemUseContext adjustContext(BlockItemUseContext context, BlockPos placedOnPos) { + BlockPos up = placedOnPos.up(2); + return new AssemblyOperatorUseContext(context.getWorld(), context.getPlayer(), context.getHand(), context.getItem(), new BlockRayTraceResult(new Vector3d((double)up.getX() + 0.5D + (double) Direction.UP.getXOffset() * 0.5D, (double)up.getY() + 0.5D + (double) Direction.UP.getYOffset() * 0.5D, (double)up.getZ() + 0.5D + (double) Direction.UP.getZOffset() * 0.5D), Direction.UP, up, false)); + } + + protected boolean operatesOn(BlockState placedOnState) { + return AllBlocks.BASIN.has(placedOnState) || AllBlocks.BELT.has(placedOnState) || AllBlocks.DEPOT.has(placedOnState) || AllBlocks.WEIGHTED_EJECTOR.has(placedOnState); + } + +} diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/AssemblyOperatorUseContext.java b/src/main/java/com/simibubi/create/content/contraptions/components/AssemblyOperatorUseContext.java new file mode 100644 index 000000000..80fde6127 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/components/AssemblyOperatorUseContext.java @@ -0,0 +1,16 @@ +package com.simibubi.create.content.contraptions.components; + +import javax.annotation.Nullable; + +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.BlockItemUseContext; +import net.minecraft.item.ItemStack; +import net.minecraft.util.Hand; +import net.minecraft.util.math.BlockRayTraceResult; +import net.minecraft.world.World; + +public class AssemblyOperatorUseContext extends BlockItemUseContext { + public AssemblyOperatorUseContext(World p_i50056_1_, @Nullable PlayerEntity p_i50056_2_, Hand p_i50056_3_, ItemStack p_i50056_4_, BlockRayTraceResult p_i50056_5_) { + super(p_i50056_1_, p_i50056_2_, p_i50056_3_, p_i50056_4_, p_i50056_5_); + } +} diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerBlock.java index 43d4d656b..8934429fa 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerBlock.java @@ -6,6 +6,7 @@ import com.simibubi.create.AllItems; import com.simibubi.create.AllShapes; import com.simibubi.create.AllTileEntities; import com.simibubi.create.content.contraptions.base.DirectionalAxisKineticBlock; +import com.simibubi.create.content.contraptions.components.AssemblyOperatorUseContext; import com.simibubi.create.foundation.block.ITE; import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; import com.simibubi.create.foundation.tileEntity.behaviour.filtering.FilteringBehaviour; @@ -15,11 +16,13 @@ import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.block.material.PushReaction; import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.BlockItemUseContext; import net.minecraft.item.ItemStack; import net.minecraft.item.ItemUseContext; import net.minecraft.pathfinding.PathType; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.ActionResultType; +import net.minecraft.util.Direction; import net.minecraft.util.Hand; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockRayTraceResult; @@ -109,22 +112,27 @@ public class DeployerBlock extends DirectionalAxisKineticBlock implements ITE getTileEntityClass() { return DeployerTileEntity.class; } - + @Override public void onBlockAdded(BlockState state, World world, BlockPos pos, BlockState oldState, boolean isMoving) { super.onBlockAdded(state, world, pos, oldState, isMoving); withTileEntityDo(world, pos, DeployerTileEntity::redstoneUpdate); } - + @Override public void neighborChanged(BlockState state, World world, BlockPos pos, Block p_220069_4_, BlockPos p_220069_5_, boolean p_220069_6_) { withTileEntityDo(world, pos, DeployerTileEntity::redstoneUpdate); } - + @Override public boolean allowsMovement(BlockState state, IBlockReader reader, BlockPos pos, PathType type) { return false; } + @Override + protected Direction getFacingForPlacement(BlockItemUseContext context) { + if (context instanceof AssemblyOperatorUseContext) return Direction.DOWN; + else return super.getFacingForPlacement(context); + } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/mixer/BasinOperatorBlockItem.java b/src/main/java/com/simibubi/create/content/contraptions/components/mixer/BasinOperatorBlockItem.java deleted file mode 100644 index e6831212e..000000000 --- a/src/main/java/com/simibubi/create/content/contraptions/components/mixer/BasinOperatorBlockItem.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.simibubi.create.content.contraptions.components.mixer; - -import com.simibubi.create.AllBlocks; - -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.item.BlockItem; -import net.minecraft.item.BlockItemUseContext; -import net.minecraft.util.ActionResultType; -import net.minecraft.util.Direction; -import net.minecraft.util.math.BlockPos; - -public class BasinOperatorBlockItem extends BlockItem { - - public BasinOperatorBlockItem(Block block, Properties builder) { - super(block, builder); - } - - @Override - public ActionResultType tryPlace(BlockItemUseContext context) { - BlockPos placedOnPos = context.getPos() - .offset(context.getFace() - .getOpposite()); - BlockState placedOnState = context.getWorld() - .getBlockState(placedOnPos); - if (AllBlocks.BASIN.has(placedOnState) || AllBlocks.BELT.has(placedOnState) - || AllBlocks.DEPOT.has(placedOnState) || AllBlocks.WEIGHTED_EJECTOR.has(placedOnState)) { - if (context.getWorld() - .getBlockState(placedOnPos.up(2)) - .getMaterial() - .isReplaceable()) - context = BlockItemUseContext.func_221536_a(context, placedOnPos.up(2), Direction.UP); - else - return ActionResultType.FAIL; - } - - return super.tryPlace(context); - } - -} \ No newline at end of file diff --git a/src/main/java/com/simibubi/create/content/contraptions/itemAssembly/SequencedAssemblyRecipe.java b/src/main/java/com/simibubi/create/content/contraptions/itemAssembly/SequencedAssemblyRecipe.java index d0f5f70fc..cf78dce9c 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/itemAssembly/SequencedAssemblyRecipe.java +++ b/src/main/java/com/simibubi/create/content/contraptions/itemAssembly/SequencedAssemblyRecipe.java @@ -5,6 +5,7 @@ import java.util.HashSet; import java.util.List; import java.util.Optional; import java.util.Set; +import java.util.stream.Stream; import com.simibubi.create.AllRecipeTypes; import com.simibubi.create.Create; @@ -12,6 +13,7 @@ import com.simibubi.create.content.contraptions.processing.ProcessingOutput; import com.simibubi.create.content.contraptions.processing.ProcessingRecipe; import com.simibubi.create.foundation.fluid.FluidIngredient; import com.simibubi.create.foundation.utility.Lang; +import com.simibubi.create.foundation.utility.Pair; import net.minecraft.client.Minecraft; import net.minecraft.inventory.IInventory; @@ -53,7 +55,9 @@ public class SequencedAssemblyRecipe implements IRecipe { public static > Optional getRecipe(World world, C inv, IRecipeType type, Class recipeClass) { - return getRecipe(world, inv.getStackInSlot(0), type, recipeClass).filter(r -> r.matches(inv, world)); + //return getRecipe(world, inv.getStackInSlot(0), type, recipeClass).filter(r -> r.matches(inv, world)); + return getRecipes(world, inv.getStackInSlot(0), type, recipeClass).filter(r -> r.matches(inv, world)) + .findFirst(); } public static > Optional getRecipe(World world, ItemStack item, @@ -73,6 +77,24 @@ public class SequencedAssemblyRecipe implements IRecipe { return Optional.empty(); } + public static > Stream getRecipes(World world, ItemStack item, + IRecipeType type, Class recipeClass) { + List all = world.getRecipeManager() + .listAllOfType(AllRecipeTypes.SEQUENCED_ASSEMBLY.getType()); + + return all.stream() + .filter(it -> it.appliesTo(item)) + .map(it -> Pair.of(it, it.getNextRecipe(item).getRecipe())) + .filter(it -> it.getSecond() + .getType() == type && recipeClass.isInstance(it.getSecond())) + .map(it -> { + it.getSecond() + .enforceNextResult(() -> it.getFirst().advance(item)); + return it.getSecond(); + }) + .map(recipeClass::cast); + } + private ItemStack advance(ItemStack input) { int step = getStep(input); if ((step + 1) / sequence.size() >= loops) diff --git a/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingRecipe.java b/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingRecipe.java index e3b90a337..e3fc4095f 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingRecipe.java +++ b/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingRecipe.java @@ -44,11 +44,11 @@ public abstract class ProcessingRecipe implements IRecipe< private IRecipeType type; private IRecipeSerializer serializer; private AllRecipeTypes enumType; - private Optional> forcedResult; + private Supplier forcedResult; public ProcessingRecipe(AllRecipeTypes recipeType, ProcessingRecipeParams params) { - this.forcedResult = Optional.empty(); + this.forcedResult = null; this.enumType = recipeType; this.processingDuration = params.processingDuration; this.fluidIngredients = params.fluidIngredients; @@ -144,7 +144,7 @@ public abstract class ProcessingRecipe implements IRecipe< } public void enforceNextResult(Supplier stack) { - forcedResult = Optional.of(stack); + forcedResult = stack; } public List rollResults() { @@ -152,8 +152,7 @@ public abstract class ProcessingRecipe implements IRecipe< NonNullList rollableResults = getRollableResults(); for (int i = 0; i < rollableResults.size(); i++) { ProcessingOutput output = rollableResults.get(i); - ItemStack stack = i == 0 && forcedResult.isPresent() ? forcedResult.get() - .get() : output.rollOutput(); + ItemStack stack = i == 0 && forcedResult != null ? forcedResult.get() : output.rollOutput(); if (!stack.isEmpty()) results.add(stack); } @@ -226,5 +225,5 @@ public abstract class ProcessingRecipe implements IRecipe< public AllRecipeTypes getEnumType() { return enumType; } - + } diff --git a/src/main/java/com/simibubi/create/foundation/data/AssetLookup.java b/src/main/java/com/simibubi/create/foundation/data/AssetLookup.java index f677efa7c..78f8b11df 100644 --- a/src/main/java/com/simibubi/create/foundation/data/AssetLookup.java +++ b/src/main/java/com/simibubi/create/foundation/data/AssetLookup.java @@ -66,7 +66,7 @@ public class AssetLookup { p.withExistingParent(c.getName(), p.modLoc(path)); }; } - + public static NonNullBiConsumer, RegistrateItemModelProvider> customGenericItemModel( String... folders) { return (c, p) -> { @@ -110,6 +110,10 @@ public class AssetLookup { return (c, p) -> p.getExistingFile(p.modLoc("item/" + c.getName())); } + public static NonNullBiConsumer, RegistrateItemModelProvider> itemModel(String name) { + return (c, p) -> p.getExistingFile(p.modLoc("item/" + name)); + } + public static NonNullBiConsumer, RegistrateItemModelProvider> itemModelWithPartials() { return (c, p) -> p.withExistingParent("item/" + c.getName(), p.modLoc("item/" + c.getName() + "/item")); } diff --git a/src/main/java/com/simibubi/create/foundation/data/recipe/CreateRecipeProvider.java b/src/main/java/com/simibubi/create/foundation/data/recipe/CreateRecipeProvider.java index 46d903c9d..f3c4c24aa 100644 --- a/src/main/java/com/simibubi/create/foundation/data/recipe/CreateRecipeProvider.java +++ b/src/main/java/com/simibubi/create/foundation/data/recipe/CreateRecipeProvider.java @@ -50,11 +50,15 @@ public abstract class CreateRecipeProvider extends RecipeProvider { static ITag.INamedTag redstone() { return Tags.Items.DUSTS_REDSTONE; } - + static ITag.INamedTag planks() { return ItemTags.PLANKS; } + static ITag.INamedTag woodSlab() { + return ItemTags.WOODEN_SLABS; + } + static ITag.INamedTag gold() { return AllTags.forgeItemTag("ingots/gold"); } @@ -78,7 +82,7 @@ public abstract class CreateRecipeProvider extends RecipeProvider { static IItemProvider cog() { return AllBlocks.COGWHEEL.get(); } - + static IItemProvider largeCog() { return AllBlocks.LARGE_COGWHEEL.get(); } @@ -98,7 +102,7 @@ public abstract class CreateRecipeProvider extends RecipeProvider { static ITag.INamedTag iron() { return Tags.Items.INGOTS_IRON; } - + static ITag.INamedTag ironNugget() { return AllTags.forgeItemTag("nuggets/iron"); } @@ -142,7 +146,7 @@ public abstract class CreateRecipeProvider extends RecipeProvider { static ITag.INamedTag copperSheet() { return AllTags.forgeItemTag("plates/copper"); } - + static ITag.INamedTag copperNugget() { return AllTags.forgeItemTag("nuggets/copper"); } diff --git a/src/main/java/com/simibubi/create/foundation/data/recipe/SequencedAssemblyRecipeGen.java b/src/main/java/com/simibubi/create/foundation/data/recipe/SequencedAssemblyRecipeGen.java index 9fae5a6fa..ce2c58985 100644 --- a/src/main/java/com/simibubi/create/foundation/data/recipe/SequencedAssemblyRecipeGen.java +++ b/src/main/java/com/simibubi/create/foundation/data/recipe/SequencedAssemblyRecipeGen.java @@ -6,9 +6,11 @@ import com.simibubi.create.AllBlocks; import com.simibubi.create.AllItems; import com.simibubi.create.Create; import com.simibubi.create.content.contraptions.components.deployer.DeployerApplicationRecipe; +import com.simibubi.create.content.contraptions.components.saw.CuttingRecipe; import com.simibubi.create.content.contraptions.itemAssembly.SequencedAssemblyRecipeBuilder; import net.minecraft.data.DataGenerator; +import net.minecraft.item.ItemStack; public class SequencedAssemblyRecipeGen extends CreateRecipeProvider { @@ -27,7 +29,7 @@ public class SequencedAssemblyRecipeGen extends CreateRecipeProvider { // .addStep(CuttingRecipe::new, rb -> rb.averageProcessingDuration()) // .addStep(FillingRecipe::new, rb -> rb.require(Fluids.WATER, 100)) // ) - + CLOCKWORK_COMPONENT = create("clockwork_component", b -> b.require(I.goldSheet()) .transitionTo(AllItems.INCOMPLETE_CLOCKWORK_COMPONENT.get()) .addOutput(AllItems.CLOCKWORK_COMPONENT.get(), 12) @@ -38,6 +40,23 @@ public class SequencedAssemblyRecipeGen extends CreateRecipeProvider { .addStep(DeployerApplicationRecipe::new, rb -> rb.require(I.cog())) .addStep(DeployerApplicationRecipe::new, rb -> rb.require(I.largeCog())) .addStep(DeployerApplicationRecipe::new, rb -> rb.require(I.ironNugget())) + ), + + COGWHEEL = create("cogwheel", b -> b.require(I.shaft()) + .transitionTo(AllItems.INCOMPLETE_COGWHEEL.get()) + .addOutput(new ItemStack(AllBlocks.COGWHEEL.get(), 12), 12) + .loops(4) + .addStep(DeployerApplicationRecipe::new, rb -> rb.require(I.planks())) + .addStep(CuttingRecipe::new, rb -> rb.duration(20)) + .addStep(CuttingRecipe::new, rb -> rb.duration(40)) + ), + + LARGE_COGWHEEL = create("large_cogwheel", b -> b.require(I.andesite()) + .transitionTo(AllItems.INCOMPLETE_LARGE_COGWHEEL.get()) + .addOutput(new ItemStack(AllBlocks.LARGE_COGWHEEL.get(), 3), 12) + .loops(8) + .addStep(DeployerApplicationRecipe::new, rb -> rb.require(I.woodSlab())) + .addStep(CuttingRecipe::new, rb -> rb.duration(50)) ) ; diff --git a/src/main/resources/assets/create/models/item/incomplete_cogwheel.json b/src/main/resources/assets/create/models/item/incomplete_cogwheel.json new file mode 100644 index 000000000..312e9bdcf --- /dev/null +++ b/src/main/resources/assets/create/models/item/incomplete_cogwheel.json @@ -0,0 +1,66 @@ +{ + "credit": "Made with Blockbench", + "parent": "create:block/large_wheels", + "texture_size": [32, 32], + "textures": { + "0": "create:block/axis", + "3": "create:block/axis_top", + "1_2": "create:block/cogwheel" + }, + "elements": [ + { + "name": "Axis", + "from": [6, 0, 6], + "to": [10, 16, 10], + "shade": false, + "faces": { + "north": {"uv": [6, 0, 10, 16], "texture": "#0"}, + "east": {"uv": [6, 0, 10, 16], "texture": "#0"}, + "south": {"uv": [6, 0, 10, 16], "texture": "#0"}, + "west": {"uv": [6, 0, 10, 16], "texture": "#0"}, + "up": {"uv": [6, 6, 10, 10], "texture": "#3"}, + "down": {"uv": [6, 6, 10, 10], "texture": "#3"} + } + }, + { + "name": "GearCaseInner", + "from": [2, 7, 2], + "to": [14, 9, 14], + "faces": { + "north": {"uv": [0, 6, 6, 7], "texture": "#1_2"}, + "east": {"uv": [0, 6, 6, 7], "texture": "#1_2"}, + "south": {"uv": [0, 6, 6, 7], "texture": "#1_2"}, + "west": {"uv": [0, 6, 6, 7], "texture": "#1_2"}, + "up": {"uv": [4, 0, 10, 6], "texture": "#1_2"}, + "down": {"uv": [4, 0, 10, 6], "texture": "#1_2"} + } + }, + { + "name": "GearCaseInnerDiagonal", + "from": [2, 7.1, 2], + "to": [14, 8.9, 14], + "rotation": {"angle": -45, "axis": "y", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [0, 6, 6, 7], "texture": "#1_2"}, + "east": {"uv": [0, 6, 6, 7], "texture": "#1_2"}, + "south": {"uv": [0, 6, 6, 7], "texture": "#1_2"}, + "west": {"uv": [0, 6, 6, 7], "texture": "#1_2"}, + "up": {"uv": [4, 0, 10, 6], "texture": "#1_2"}, + "down": {"uv": [4, 0, 10, 6], "texture": "#1_2"} + } + }, + { + "name": "GearCaseOuter", + "from": [4, 6, 4], + "to": [12, 10, 12], + "faces": { + "north": {"uv": [0, 4, 4, 6], "texture": "#1_2"}, + "east": {"uv": [0, 4, 4, 6], "texture": "#1_2"}, + "south": {"uv": [0, 4, 4, 6], "texture": "#1_2"}, + "west": {"uv": [0, 4, 4, 6], "texture": "#1_2"}, + "up": {"uv": [0, 0, 4, 4], "texture": "#1_2"}, + "down": {"uv": [0, 0, 4, 4], "texture": "#1_2"} + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/item/incomplete_large_cogwheel.json b/src/main/resources/assets/create/models/item/incomplete_large_cogwheel.json new file mode 100644 index 000000000..3c44e8315 --- /dev/null +++ b/src/main/resources/assets/create/models/item/incomplete_large_cogwheel.json @@ -0,0 +1,119 @@ +{ + "credit": "Made with Blockbench", + "parent": "create:block/large_wheels", + "texture_size": [32, 32], + "textures": { + "0": "create:block/axis", + "3": "create:block/axis_top", + "particle": "block/stripped_spruce_log", + "4": "create:block/large_cogwheel" + }, + "elements": [ + { + "name": "GearCaseInnerRotated", + "from": [-2, 6.9, -2], + "to": [18, 8.9, 18], + "rotation": {"angle": 45, "axis": "y", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [0, 10, 10, 11], "texture": "#4"}, + "east": {"uv": [0, 10, 10, 11], "texture": "#4"}, + "south": {"uv": [0, 10, 10, 11], "texture": "#4"}, + "west": {"uv": [0, 10, 10, 11], "texture": "#4"}, + "up": {"uv": [0, 0, 10, 10], "texture": "#4"}, + "down": {"uv": [0, 0, 10, 10], "texture": "#4"} + } + }, + { + "name": "Axis", + "from": [6, 0, 6], + "to": [10, 16, 10], + "shade": false, + "faces": { + "north": {"uv": [6, 0, 10, 16], "texture": "#0"}, + "east": {"uv": [6, 0, 10, 16], "texture": "#0"}, + "south": {"uv": [6, 0, 10, 16], "texture": "#0"}, + "west": {"uv": [6, 0, 10, 16], "texture": "#0"}, + "up": {"uv": [6, 6, 10, 10], "texture": "#3"}, + "down": {"uv": [6, 6, 10, 10], "texture": "#3"} + } + }, + { + "name": "GearCaseInner", + "from": [-2, 7, -2], + "to": [18, 9, 18], + "faces": { + "north": {"uv": [0, 10, 10, 11], "texture": "#4"}, + "east": {"uv": [0, 10, 10, 11], "texture": "#4"}, + "south": {"uv": [0, 10, 10, 11], "texture": "#4"}, + "west": {"uv": [0, 10, 10, 11], "texture": "#4"}, + "up": {"uv": [0, 0, 10, 10], "texture": "#4"}, + "down": {"uv": [0, 0, 10, 10], "texture": "#4"} + } + }, + { + "name": "GearCaseOuter", + "from": [1, 5.5, 1], + "to": [15, 10.5, 15], + "faces": { + "north": {"uv": [10, 0, 12.5, 7], "rotation": 90, "texture": "#4"}, + "east": {"uv": [10, 0, 12.5, 7], "rotation": 90, "texture": "#4"}, + "south": {"uv": [10, 0, 12.5, 7], "rotation": 90, "texture": "#4"}, + "west": {"uv": [10, 0, 12.5, 7], "rotation": 90, "texture": "#4"}, + "up": {"uv": [1.5, 1.5, 8.5, 8.5], "texture": "#4"}, + "down": {"uv": [1.5, 1.5, 8.5, 8.5], "texture": "#4"} + } + }, + { + "name": "GearCaseOuter", + "from": [-1, 5.5, 1], + "to": [1, 10.5, 15], + "faces": { + "north": {"uv": [10, 0, 12.5, 1], "rotation": 90, "texture": "#4"}, + "east": {"uv": [10, 0, 12.5, 7], "rotation": 90, "texture": "#4"}, + "south": {"uv": [10, 6, 12.5, 7], "rotation": 90, "texture": "#4"}, + "west": {"uv": [10, 0, 12.5, 7], "rotation": 90, "texture": "#4"}, + "up": {"uv": [7, 15, 14, 16], "rotation": 90, "texture": "#4"}, + "down": {"uv": [7, 15, 14, 16], "rotation": 90, "texture": "#4"} + } + }, + { + "name": "GearCaseOuter", + "from": [15, 5.5, 1], + "to": [17, 10.5, 15], + "faces": { + "north": {"uv": [10, 6, 12.5, 7], "rotation": 90, "texture": "#4"}, + "east": {"uv": [10, 0, 12.5, 7], "rotation": 90, "texture": "#4"}, + "south": {"uv": [10, 0, 12.5, 1], "rotation": 90, "texture": "#4"}, + "west": {"uv": [10, 0, 12.5, 7], "rotation": 90, "texture": "#4"}, + "up": {"uv": [0, 15, 7, 16], "rotation": 270, "texture": "#4"}, + "down": {"uv": [0, 15, 7, 16], "rotation": 270, "texture": "#4"} + } + }, + { + "name": "GearCaseOuter", + "from": [1, 5.5, -1], + "to": [15, 10.5, 1], + "faces": { + "north": {"uv": [10, 0, 12.5, 7], "rotation": 90, "texture": "#4"}, + "east": {"uv": [10, 0, 12.5, 1], "rotation": 90, "texture": "#4"}, + "south": {"uv": [10, 0, 12.5, 7], "rotation": 90, "texture": "#4"}, + "west": {"uv": [10, 6, 12.5, 7], "rotation": 90, "texture": "#4"}, + "up": {"uv": [7, 14, 14, 15], "rotation": 180, "texture": "#4"}, + "down": {"uv": [0, 14, 7, 15], "texture": "#4"} + } + }, + { + "name": "GearCaseOuter", + "from": [1, 5.5, 15], + "to": [15, 10.5, 17], + "faces": { + "north": {"uv": [10, 0, 12.5, 7], "rotation": 90, "texture": "#4"}, + "east": {"uv": [10, 6, 12.5, 7], "rotation": 90, "texture": "#4"}, + "south": {"uv": [10, 0, 12.5, 7], "rotation": 90, "texture": "#4"}, + "west": {"uv": [10, 0, 12.5, 1], "rotation": 90, "texture": "#4"}, + "up": {"uv": [0, 14, 7, 15], "texture": "#4"}, + "down": {"uv": [7, 14, 14, 15], "rotation": 180, "texture": "#4"} + } + } + ] +} From b0d43767308434f37c74ee96070d47ede78ef394 Mon Sep 17 00:00:00 2001 From: kotakotik22 <61428759+kotakotik22@users.noreply.github.com> Date: Mon, 5 Jul 2021 16:22:55 +0200 Subject: [PATCH 012/118] Make shape builder public --- .../java/com/simibubi/create/AllShapes.java | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/simibubi/create/AllShapes.java b/src/main/java/com/simibubi/create/AllShapes.java index 6ffb1c167..97e80c7e6 100644 --- a/src/main/java/com/simibubi/create/AllShapes.java +++ b/src/main/java/com/simibubi/create/AllShapes.java @@ -232,57 +232,57 @@ public class AllShapes { return Block.makeCuboidShape(x1, y1, z1, x2, y2, z2); } - private static class Builder { + public static class Builder { VoxelShape shape; public Builder(VoxelShape shape) { this.shape = shape; } - Builder add(VoxelShape shape) { + public Builder add(VoxelShape shape) { this.shape = VoxelShapes.or(this.shape, shape); return this; } - Builder add(double x1, double y1, double z1, double x2, double y2, double z2) { + public Builder add(double x1, double y1, double z1, double x2, double y2, double z2) { return add(cuboid(x1, y1, z1, x2, y2, z2)); } - Builder erase(double x1, double y1, double z1, double x2, double y2, double z2) { + public Builder erase(double x1, double y1, double z1, double x2, double y2, double z2) { this.shape = VoxelShapes.combineAndSimplify(shape, cuboid(x1, y1, z1, x2, y2, z2), IBooleanFunction.ONLY_FIRST); return this; } - VoxelShape build() { + public VoxelShape build() { return shape; } - VoxelShaper build(BiFunction factory, Direction direction) { + public VoxelShaper build(BiFunction factory, Direction direction) { return factory.apply(shape, direction); } - VoxelShaper build(BiFunction factory, Axis axis) { + public VoxelShaper build(BiFunction factory, Axis axis) { return factory.apply(shape, axis); } - VoxelShaper forDirectional(Direction direction) { + public VoxelShaper forDirectional(Direction direction) { return build(VoxelShaper::forDirectional, direction); } - VoxelShaper forAxis() { + public VoxelShaper forAxis() { return build(VoxelShaper::forAxis, Axis.Y); } - VoxelShaper forHorizontalAxis() { + public VoxelShaper forHorizontalAxis() { return build(VoxelShaper::forHorizontalAxis, Axis.Z); } - VoxelShaper forHorizontal(Direction direction) { + public VoxelShaper forHorizontal(Direction direction) { return build(VoxelShaper::forHorizontal, direction); } - VoxelShaper forDirectional() { + public VoxelShaper forDirectional() { return forDirectional(UP); } From 4801c6f73bcc3b86746ae7158c14a12d946f0b91 Mon Sep 17 00:00:00 2001 From: reidbhuntley Date: Mon, 5 Jul 2021 11:32:57 -0400 Subject: [PATCH 013/118] Revert "Top-up" This reverts commit 1a273753 --- .../curiosities/armor/CopperBacktankItem.java | 50 +------------------ .../armor/IBackTankRechargeable.java | 7 --- .../curiosities/tools/ExtendoGripItem.java | 38 +++++++------- .../tools/ExtendoGripRenderHandler.java | 4 +- .../curiosities/weapons/PotatoCannonItem.java | 12 ++--- 5 files changed, 25 insertions(+), 86 deletions(-) delete mode 100644 src/main/java/com/simibubi/create/content/curiosities/armor/IBackTankRechargeable.java diff --git a/src/main/java/com/simibubi/create/content/curiosities/armor/CopperBacktankItem.java b/src/main/java/com/simibubi/create/content/curiosities/armor/CopperBacktankItem.java index a17233f13..7e537816d 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/armor/CopperBacktankItem.java +++ b/src/main/java/com/simibubi/create/content/curiosities/armor/CopperBacktankItem.java @@ -1,14 +1,7 @@ package com.simibubi.create.content.curiosities.armor; -import java.util.List; -import java.util.stream.Collectors; -import java.util.stream.Stream; - -import com.google.common.collect.Streams; import com.simibubi.create.foundation.config.AllConfigs; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.entity.player.PlayerInventory; import net.minecraft.inventory.EquipmentSlotType; import net.minecraft.item.BlockItem; import net.minecraft.item.ItemGroup; @@ -18,16 +11,10 @@ import net.minecraft.nbt.CompoundNBT; import net.minecraft.util.ActionResultType; import net.minecraft.util.NonNullList; import net.minecraft.util.math.MathHelper; -import net.minecraftforge.event.TickEvent; -import net.minecraftforge.eventbus.api.SubscribeEvent; -import net.minecraftforge.fml.LogicalSide; -import net.minecraftforge.fml.common.Mod.EventBusSubscriber; -@EventBusSubscriber public class CopperBacktankItem extends CopperArmorItem { public static final int DURABILITY_BAR = 0xefefef; - public static final int RECHARGES_PER_TICK = 4; private BlockItem blockItem; public CopperBacktankItem(Properties p_i48534_3_, BlockItem blockItem) { @@ -54,7 +41,7 @@ public class CopperBacktankItem extends CopperArmorItem { public void fillItemGroup(ItemGroup p_150895_1_, NonNullList p_150895_2_) { if (!isInGroup(p_150895_1_)) return; - + ItemStack stack = new ItemStack(this); CompoundNBT nbt = new CompoundNBT(); nbt.putInt("Air", AllConfigs.SERVER.curiosities.maxAirInBacktank.get()); @@ -78,39 +65,4 @@ public class CopperBacktankItem extends CopperArmorItem { return orCreateTag.getInt("Air"); } - @SubscribeEvent - public static void rechargePneumaticTools(TickEvent.PlayerTickEvent event) { - PlayerEntity player = event.player; - if (event.phase != TickEvent.Phase.START) - return; - if (event.side != LogicalSide.SERVER) - return; - if (player.isSpectator()) - return; - ItemStack tankStack = BackTankUtil.get(player); - if (tankStack.isEmpty()) - return; - - PlayerInventory inv = player.inventory; - - List toCharge = Streams.concat(Stream.of(player.getHeldItemMainhand()), inv.offHandInventory.stream(), - inv.armorInventory.stream(), inv.mainInventory.stream()) - .filter(s -> s.getItem() instanceof IBackTankRechargeable && s.isDamaged()) - .collect(Collectors.toList()); - - int charges = RECHARGES_PER_TICK; - for (ItemStack stack : toCharge) { - while (stack.isDamaged()) { - if (BackTankUtil.canAbsorbDamage(event.player, ((IBackTankRechargeable) stack.getItem()).maxUses())) { - stack.setDamage(stack.getDamage() - 1); - charges--; - if (charges <= 0) - return; - } else { - return; - } - } - } - - } } diff --git a/src/main/java/com/simibubi/create/content/curiosities/armor/IBackTankRechargeable.java b/src/main/java/com/simibubi/create/content/curiosities/armor/IBackTankRechargeable.java deleted file mode 100644 index eb0c753a8..000000000 --- a/src/main/java/com/simibubi/create/content/curiosities/armor/IBackTankRechargeable.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.simibubi.create.content.curiosities.armor; - -public interface IBackTankRechargeable { - - int maxUses(); - -} diff --git a/src/main/java/com/simibubi/create/content/curiosities/tools/ExtendoGripItem.java b/src/main/java/com/simibubi/create/content/curiosities/tools/ExtendoGripItem.java index de6e50ad4..1cf868e5a 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/tools/ExtendoGripItem.java +++ b/src/main/java/com/simibubi/create/content/curiosities/tools/ExtendoGripItem.java @@ -6,7 +6,6 @@ import com.google.common.collect.ImmutableMultimap; import com.google.common.collect.Multimap; import com.simibubi.create.AllItems; import com.simibubi.create.content.curiosities.armor.BackTankUtil; -import com.simibubi.create.content.curiosities.armor.IBackTankRechargeable; import com.simibubi.create.foundation.advancement.AllTriggers; import com.simibubi.create.foundation.config.AllConfigs; import com.simibubi.create.foundation.networking.AllPackets; @@ -27,6 +26,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.item.Rarity; import net.minecraft.nbt.CompoundNBT; import net.minecraft.util.DamageSource; +import net.minecraft.util.Hand; import net.minecraft.util.LazyValue; import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.BlockRayTraceResult; @@ -50,7 +50,7 @@ import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod.EventBusSubscriber; @EventBusSubscriber -public class ExtendoGripItem extends Item implements IBackTankRechargeable { +public class ExtendoGripItem extends Item { private static DamageSource lastActiveDamageSource; public static final int MAX_DAMAGE = 200; @@ -86,8 +86,8 @@ public class ExtendoGripItem extends Item implements IBackTankRechargeable { PlayerEntity player = (PlayerEntity) event.getEntityLiving(); CompoundNBT persistentData = player.getPersistentData(); - boolean inOff = isActiveExtendoGrip(player.getHeldItemOffhand()); - boolean inMain = isActiveExtendoGrip(player.getHeldItemMainhand()); + boolean inOff = AllItems.EXTENDO_GRIP.isIn(player.getHeldItemOffhand()); + boolean inMain = AllItems.EXTENDO_GRIP.isIn(player.getHeldItemMainhand()); boolean holdingDualExtendo = inOff && inMain; boolean holdingExtendo = inOff ^ inMain; holdingExtendo &= !holdingDualExtendo; @@ -198,14 +198,17 @@ public class ExtendoGripItem extends Item implements IBackTankRechargeable { return; if (player.world.isRemote) return; - ItemStack main = player.getHeldItemMainhand(); - ItemStack off = player.getHeldItemOffhand(); - for (ItemStack stack : new ItemStack[]{main, off}) { - if (isActiveExtendoGrip(stack)) { - if (!BackTankUtil.canAbsorbDamage(player, ((IBackTankRechargeable) stack.getItem()).maxUses())) - stack.damageItem(1, player, p -> {}); - } + Hand hand = Hand.MAIN_HAND; + ItemStack extendo = player.getHeldItemMainhand(); + if (!AllItems.EXTENDO_GRIP.isIn(extendo)) { + extendo = player.getHeldItemOffhand(); + hand = Hand.OFF_HAND; } + if (!AllItems.EXTENDO_GRIP.isIn(extendo)) + return; + final Hand h = hand; + if (!BackTankUtil.canAbsorbDamage(player, maxUses())) + extendo.damageItem(1, player, p -> p.sendBreakAnimation(h)); } @Override @@ -223,8 +226,7 @@ public class ExtendoGripItem extends Item implements IBackTankRechargeable { return BackTankUtil.showDurabilityBar(stack, maxUses()); } - @Override - public int maxUses() { + private static int maxUses() { return AllConfigs.SERVER.curiosities.maxExtendoGripActions.get(); } @@ -242,7 +244,7 @@ public class ExtendoGripItem extends Item implements IBackTankRechargeable { public static void bufferLivingAttackEvent(LivingAttackEvent event) { // Workaround for removed patch to get the attacking entity. lastActiveDamageSource = event.getSource(); - + DamageSource source = event.getSource(); if (source == null) return; @@ -312,13 +314,9 @@ public class ExtendoGripItem extends Item implements IBackTankRechargeable { .sendToServer(new ExtendoGripInteractionPacket(target, event.getHand(), event.getLocalPos())); } - public static boolean isActiveExtendoGrip(ItemStack stack) { - return AllItems.EXTENDO_GRIP.isIn(stack) && stack.getDamage() != stack.getMaxDamage() - 1; - } - public static boolean isHoldingExtendoGrip(PlayerEntity player) { - boolean inOff = isActiveExtendoGrip(player.getHeldItemOffhand()); - boolean inMain = isActiveExtendoGrip(player.getHeldItemMainhand()); + boolean inOff = AllItems.EXTENDO_GRIP.isIn(player.getHeldItemOffhand()); + boolean inMain = AllItems.EXTENDO_GRIP.isIn(player.getHeldItemMainhand()); boolean holdingGrip = inOff || inMain; return holdingGrip; } diff --git a/src/main/java/com/simibubi/create/content/curiosities/tools/ExtendoGripRenderHandler.java b/src/main/java/com/simibubi/create/content/curiosities/tools/ExtendoGripRenderHandler.java index 5113e063a..17fadd6c2 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/tools/ExtendoGripRenderHandler.java +++ b/src/main/java/com/simibubi/create/content/curiosities/tools/ExtendoGripRenderHandler.java @@ -59,8 +59,8 @@ public class ExtendoGripRenderHandler { boolean rightHand = event.getHand() == Hand.MAIN_HAND ^ player.getPrimaryHand() == HandSide.LEFT; ItemStack offhandItem = getRenderedOffHandStack(); - boolean notInOffhand = !ExtendoGripItem.isActiveExtendoGrip(offhandItem); - if (notInOffhand && !ExtendoGripItem.isActiveExtendoGrip(heldItem)) + boolean notInOffhand = !AllItems.EXTENDO_GRIP.isIn(offhandItem); + if (notInOffhand && !AllItems.EXTENDO_GRIP.isIn(heldItem)) return; MatrixStack ms = event.getMatrixStack(); diff --git a/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoCannonItem.java b/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoCannonItem.java index ae9cb8c0b..403fc88be 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoCannonItem.java +++ b/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoCannonItem.java @@ -8,7 +8,6 @@ import com.simibubi.create.AllEntityTypes; import com.simibubi.create.Create; import com.simibubi.create.CreateClient; import com.simibubi.create.content.curiosities.armor.BackTankUtil; -import com.simibubi.create.content.curiosities.armor.IBackTankRechargeable; import com.simibubi.create.content.curiosities.zapper.ShootableGadgetItemMethods; import com.simibubi.create.foundation.config.AllConfigs; import com.simibubi.create.foundation.utility.AnimationTickHolder; @@ -38,7 +37,7 @@ import net.minecraft.world.World; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; -public class PotatoCannonItem extends ShootableItem implements IBackTankRechargeable { +public class PotatoCannonItem extends ShootableItem { public static ItemStack CLIENT_CURRENT_AMMO = ItemStack.EMPTY; public static final int MAX_DAMAGE = 100; @@ -78,8 +77,7 @@ public class PotatoCannonItem extends ShootableItem implements IBackTankRecharge return BackTankUtil.showDurabilityBar(stack, maxUses()); } - @Override - public int maxUses() { + private int maxUses() { return AllConfigs.SERVER.curiosities.maxPotatoCannonShots.get(); } @@ -100,9 +98,6 @@ public class PotatoCannonItem extends ShootableItem implements IBackTankRecharge @Override public ActionResult onItemRightClick(World world, PlayerEntity player, Hand hand) { ItemStack stack = player.getHeldItem(hand); - if (stack.getDamage() == getMaxDamage(stack) - 1) - return ActionResult.pass(stack); - return findAmmoInInventory(world, player, stack).map(itemStack -> { if (ShootableGadgetItemMethods.shouldSwap(player, stack, hand, this::isCannon)) @@ -155,7 +150,8 @@ public class PotatoCannonItem extends ShootableItem implements IBackTankRecharge player.inventory.deleteStack(itemStack); } - stack.damageItem(1, player, p -> {}); + if (!BackTankUtil.canAbsorbDamage(player, maxUses())) + stack.damageItem(1, player, p -> p.sendBreakAnimation(hand)); Integer cooldown = findAmmoInInventory(world, player, stack).flatMap(PotatoCannonProjectileTypes::getProjectileTypeOf) From 8abdbb68f2b077fe0b98e99051c4cfa3624cb5f8 Mon Sep 17 00:00:00 2001 From: reidbhuntley Date: Mon, 5 Jul 2021 12:08:43 -0400 Subject: [PATCH 014/118] Lectern controller keepalive fix --- .../content/logistics/item/LinkedControllerClientHandler.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/simibubi/create/content/logistics/item/LinkedControllerClientHandler.java b/src/main/java/com/simibubi/create/content/logistics/item/LinkedControllerClientHandler.java index 860fc3f38..daf63ded0 100644 --- a/src/main/java/com/simibubi/create/content/logistics/item/LinkedControllerClientHandler.java +++ b/src/main/java/com/simibubi/create/content/logistics/item/LinkedControllerClientHandler.java @@ -188,7 +188,7 @@ public class LinkedControllerClientHandler { // Keepalive Pressed Keys if (packetCooldown == 0) { if (!pressedKeys.isEmpty()) { - AllPackets.channel.sendToServer(new LinkedControllerInputPacket(pressedKeys, true)); + AllPackets.channel.sendToServer(new LinkedControllerInputPacket(pressedKeys, true, lecternPos)); packetCooldown = PACKET_RATE; } } From 159f96ca57c28c055c8898c28a90269d2cebb355 Mon Sep 17 00:00:00 2001 From: kotakotik22 <61428759+kotakotik22@users.noreply.github.com> Date: Mon, 5 Jul 2021 18:30:23 +0200 Subject: [PATCH 015/118] Processing recipe generation addon utilities --- .../processing/ProcessingRecipeBuilder.java | 4 +- .../data/recipe/CreateRecipeProvider.java | 2 +- .../data/recipe/ProcessingRecipeGen.java | 43 +++++++++++++------ 3 files changed, 34 insertions(+), 15 deletions(-) diff --git a/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingRecipeBuilder.java b/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingRecipeBuilder.java index be0045bae..305d5e06a 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingRecipeBuilder.java +++ b/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingRecipeBuilder.java @@ -230,8 +230,8 @@ public class ProcessingRecipeBuilder> { if (!(recipeType.serializer instanceof ProcessingRecipeSerializer)) throw new IllegalStateException("Cannot datagen ProcessingRecipe of type: " + typeName); - this.id = Create.asResource(typeName + "/" + recipe.getId() - .getPath()); + this.id = new ResourceLocation(recipe.getId().getNamespace(), + typeName + "/" + recipe.getId().getPath()); this.serializer = (ProcessingRecipeSerializer) recipe.getSerializer(); } diff --git a/src/main/java/com/simibubi/create/foundation/data/recipe/CreateRecipeProvider.java b/src/main/java/com/simibubi/create/foundation/data/recipe/CreateRecipeProvider.java index f3c4c24aa..ba8bd3183 100644 --- a/src/main/java/com/simibubi/create/foundation/data/recipe/CreateRecipeProvider.java +++ b/src/main/java/com/simibubi/create/foundation/data/recipe/CreateRecipeProvider.java @@ -33,7 +33,7 @@ public abstract class CreateRecipeProvider extends RecipeProvider { } @FunctionalInterface - interface GeneratedRecipe { + public interface GeneratedRecipe { void register(Consumer consumer); } diff --git a/src/main/java/com/simibubi/create/foundation/data/recipe/ProcessingRecipeGen.java b/src/main/java/com/simibubi/create/foundation/data/recipe/ProcessingRecipeGen.java index 920d5ef13..58d35e2ab 100644 --- a/src/main/java/com/simibubi/create/foundation/data/recipe/ProcessingRecipeGen.java +++ b/src/main/java/com/simibubi/create/foundation/data/recipe/ProcessingRecipeGen.java @@ -17,6 +17,7 @@ import net.minecraft.data.DirectoryCache; import net.minecraft.data.IDataProvider; import net.minecraft.item.crafting.Ingredient; import net.minecraft.util.IItemProvider; +import net.minecraft.util.ResourceLocation; import net.minecraftforge.fluids.FluidAttributes; public abstract class ProcessingRecipeGen extends CreateRecipeProvider { @@ -37,14 +38,14 @@ public abstract class ProcessingRecipeGen extends CreateRecipeProvider { generators.add(new PressingRecipeGen(gen)); generators.add(new FillingRecipeGen(gen)); generators.add(new EmptyingRecipeGen(gen)); - + gen.addProvider(new IDataProvider() { - + @Override public String getName() { return "Create's Processing Recipes"; } - + @Override public void act(DirectoryCache dc) throws IOException { generators.forEach(g -> { @@ -57,22 +58,22 @@ public abstract class ProcessingRecipeGen extends CreateRecipeProvider { } }); } - + public ProcessingRecipeGen(DataGenerator p_i48262_1_) { super(p_i48262_1_); } - + /** * Create a processing recipe with a single itemstack ingredient, using its id * as the name of the recipe */ - protected > GeneratedRecipe create(Supplier singleIngredient, + protected > GeneratedRecipe create(String namespace, Supplier singleIngredient, UnaryOperator> transform) { ProcessingRecipeSerializer serializer = getSerializer(); GeneratedRecipe generatedRecipe = c -> { IItemProvider iItemProvider = singleIngredient.get(); transform - .apply(new ProcessingRecipeBuilder<>(serializer.getFactory(), Create.asResource(iItemProvider.asItem() + .apply(new ProcessingRecipeBuilder<>(serializer.getFactory(), new ResourceLocation(namespace, iItemProvider.asItem() .getRegistryName() .getPath())).withItemIngredients(Ingredient.fromItems(iItemProvider))) .build(c); @@ -81,22 +82,40 @@ public abstract class ProcessingRecipeGen extends CreateRecipeProvider { return generatedRecipe; } + /** + * Create a processing recipe with a single itemstack ingredient, using its id + * as the name of the recipe + */ + protected > GeneratedRecipe create(Supplier singleIngredient, + UnaryOperator> transform) { + return create(Create.ID, singleIngredient, transform); + } + /** * Create a new processing recipe, with recipe definitions provided by the * function */ - protected > GeneratedRecipe create(String name, - UnaryOperator> transform) { + protected > GeneratedRecipe create(ResourceLocation name, + UnaryOperator> transform) { ProcessingRecipeSerializer serializer = getSerializer(); GeneratedRecipe generatedRecipe = - c -> transform.apply(new ProcessingRecipeBuilder<>(serializer.getFactory(), Create.asResource(name))) + c -> transform.apply(new ProcessingRecipeBuilder<>(serializer.getFactory(), name)) .build(c); all.add(generatedRecipe); return generatedRecipe; } + /** + * Create a new processing recipe, with recipe definitions provided by the + * function + */ + protected > GeneratedRecipe create(String name, + UnaryOperator> transform) { + return create(Create.asResource(name), transform); + } + @SuppressWarnings("unchecked") - private > ProcessingRecipeSerializer getSerializer() { + protected > ProcessingRecipeSerializer getSerializer() { ProcessingRecipeSerializer serializer = (ProcessingRecipeSerializer) getRecipeType().serializer; return serializer; } @@ -105,7 +124,7 @@ public abstract class ProcessingRecipeGen extends CreateRecipeProvider { public final String getName() { return "Create's Processing Recipes: " + getRecipeType(); } - + protected abstract AllRecipeTypes getRecipeType(); } From 0b40a57227030f7f3f871244807b15bb8a39f0f8 Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Tue, 6 Jul 2021 00:54:24 +0200 Subject: [PATCH 016/118] Instant Spook - Clockwork Component -> Precision Mechanism - Re-organized bell models - Added a little warm-up timer for held haunted bells - Tweaks to all Sequenced assembly recipes - Fixed missing particle of incomplete cogwheels - Sequenced Assembly mid-products are no longer stackable --- src/generated/resources/.cache/cache | 74 +-- .../create/blockstates/haunted_bell.json | 64 +-- .../create/blockstates/peculiar_bell.json | 64 +-- .../resources/assets/create/lang/en_ud.json | 4 +- .../resources/assets/create/lang/en_us.json | 14 +- .../assets/create/lang/unfinished/de_de.json | 14 +- .../assets/create/lang/unfinished/es_es.json | 14 +- .../assets/create/lang/unfinished/es_mx.json | 14 +- .../assets/create/lang/unfinished/fr_fr.json | 14 +- .../assets/create/lang/unfinished/it_it.json | 14 +- .../assets/create/lang/unfinished/ja_jp.json | 14 +- .../assets/create/lang/unfinished/ko_kr.json | 14 +- .../assets/create/lang/unfinished/nl_nl.json | 14 +- .../assets/create/lang/unfinished/pl_pl.json | 14 +- .../assets/create/lang/unfinished/pt_br.json | 14 +- .../assets/create/lang/unfinished/ru_ru.json | 14 +- .../assets/create/lang/unfinished/zh_cn.json | 14 +- .../assets/create/lang/unfinished/zh_tw.json | 14 +- .../models/block/haunted_bell_ceiling.json | 3 + .../block/haunted_bell_double_wall.json | 3 + .../models/block/haunted_bell_floor.json | 3 + .../block/haunted_bell_single_wall.json | 3 + .../models/block/peculiar_bell_ceiling.json | 3 + .../block/peculiar_bell_double_wall.json | 3 + .../models/block/peculiar_bell_floor.json | 3 + .../block/peculiar_bell_single_wall.json | 3 + .../create/models/item/haunted_bell.json | 2 +- ...on => incomplete_precision_mechanism.json} | 2 +- .../create/models/item/peculiar_bell.json | 2 +- ...omponent.json => precision_mechanism.json} | 2 +- .../advancements/clockwork_component_eob.json | 4 +- .../create/advancements/extendo_grip.json | 2 +- .../create/advancements/potato_cannon.json | 2 +- ...omponent.json => precision_mechanism.json} | 8 +- .../create/advancements/speed_controller.json | 2 +- .../crafting/kinetics/mechanical_arm.json | 2 +- .../kinetics/rotation_speed_controller.json | 2 +- .../mechanical_crafting/extendo_grip.json | 2 +- .../mechanical_crafting/potato_cannon.json | 2 +- .../recipes/sequenced_assembly/cogwheel.json | 38 +- .../sequenced_assembly/large_cogwheel.json | 40 +- ...omponent.json => precision_mechanism.json} | 41 +- .../com/simibubi/create/AllBlockPartials.java | 4 +- .../java/com/simibubi/create/AllItems.java | 14 +- .../category/SequencedAssemblyCategory.java | 2 +- .../SequencedAssemblySubCategory.java | 2 +- .../itemAssembly/SequencedAssemblyItem.java | 2 +- .../curiosities/bell/HauntedBellPulser.java | 37 +- .../advancement/AllAdvancements.java | 6 +- .../foundation/data/BuilderTransformers.java | 11 +- .../data/recipe/CreateRecipeProvider.java | 4 +- .../recipe/MechanicalCraftingRecipeGen.java | 4 +- .../recipe/SequencedAssemblyRecipeGen.java | 46 +- .../data/recipe/StandardRecipeGen.java | 4 +- .../create/lang/default/advancements.json | 4 +- .../assets/create/lang/default/tooltips.json | 6 +- .../block_ceiling.json | 0 .../block_double_wall.json | 0 .../block_floor.json | 0 .../block_single_wall.json | 0 .../bell.json => haunted_bell.json} | 11 +- .../models/block/haunted_bell/bell.json | 436 ------------------ .../block/haunted_bell/block_ceiling.json | 37 -- .../block/haunted_bell/block_double_wall.json | 32 -- .../block/haunted_bell/block_floor.json | 35 -- .../block/haunted_bell/block_single_wall.json | 30 -- .../models/block/haunted_bell/item.json | 93 ---- .../item.json => peculiar_bell.json} | 0 .../models/item/incomplete_cogwheel.json | 17 +- .../item/incomplete_large_cogwheel.json | 20 +- ...png => incomplete_precision_mechanism.png} | Bin ..._component.png => precision_mechanism.png} | Bin 72 files changed, 442 insertions(+), 994 deletions(-) create mode 100644 src/generated/resources/assets/create/models/block/haunted_bell_ceiling.json create mode 100644 src/generated/resources/assets/create/models/block/haunted_bell_double_wall.json create mode 100644 src/generated/resources/assets/create/models/block/haunted_bell_floor.json create mode 100644 src/generated/resources/assets/create/models/block/haunted_bell_single_wall.json create mode 100644 src/generated/resources/assets/create/models/block/peculiar_bell_ceiling.json create mode 100644 src/generated/resources/assets/create/models/block/peculiar_bell_double_wall.json create mode 100644 src/generated/resources/assets/create/models/block/peculiar_bell_floor.json create mode 100644 src/generated/resources/assets/create/models/block/peculiar_bell_single_wall.json rename src/generated/resources/assets/create/models/item/{incomplete_clockwork_component.json => incomplete_precision_mechanism.json} (51%) rename src/generated/resources/assets/create/models/item/{clockwork_component.json => precision_mechanism.json} (56%) rename src/generated/resources/data/create/advancements/{clockwork_component.json => precision_mechanism.json} (66%) rename src/generated/resources/data/create/recipes/sequenced_assembly/{clockwork_component.json => precision_mechanism.json} (53%) rename src/main/resources/assets/create/models/block/{peculiar_bell => bell_base}/block_ceiling.json (100%) rename src/main/resources/assets/create/models/block/{peculiar_bell => bell_base}/block_double_wall.json (100%) rename src/main/resources/assets/create/models/block/{peculiar_bell => bell_base}/block_floor.json (100%) rename src/main/resources/assets/create/models/block/{peculiar_bell => bell_base}/block_single_wall.json (100%) rename src/main/resources/assets/create/models/block/{peculiar_bell/bell.json => haunted_bell.json} (87%) delete mode 100644 src/main/resources/assets/create/models/block/haunted_bell/bell.json delete mode 100644 src/main/resources/assets/create/models/block/haunted_bell/block_ceiling.json delete mode 100644 src/main/resources/assets/create/models/block/haunted_bell/block_double_wall.json delete mode 100644 src/main/resources/assets/create/models/block/haunted_bell/block_floor.json delete mode 100644 src/main/resources/assets/create/models/block/haunted_bell/block_single_wall.json delete mode 100644 src/main/resources/assets/create/models/block/haunted_bell/item.json rename src/main/resources/assets/create/models/block/{peculiar_bell/item.json => peculiar_bell.json} (100%) rename src/main/resources/assets/create/textures/item/{incomplete_clockwork_component.png => incomplete_precision_mechanism.png} (100%) rename src/main/resources/assets/create/textures/item/{clockwork_component.png => precision_mechanism.png} (100%) diff --git a/src/generated/resources/.cache/cache b/src/generated/resources/.cache/cache index cba0911c2..aca2f76ab 100644 --- a/src/generated/resources/.cache/cache +++ b/src/generated/resources/.cache/cache @@ -181,7 +181,7 @@ a5ec5401ba9f3e102a2e1b35837f643847afbca4 assets/create/blockstates/gray_seat.jso 13059309684db0cc7a0f1f4fce2407cf06cce80a assets/create/blockstates/green_seat.json f4a0fc68e8daaa0a47cdc951ced4310057a874b0 assets/create/blockstates/green_valve_handle.json 6ab675fa06317e6d07c0c1a453e7bb43e3f46b3b assets/create/blockstates/hand_crank.json -a895a7a0b47273301f21090882e06b64600e4e54 assets/create/blockstates/haunted_bell.json +34076c9caafe48daa87cc783e96d4c81b0b164c0 assets/create/blockstates/haunted_bell.json 4572b90f5d6c586e145f2c7a55664c3cb734bd2b assets/create/blockstates/honey.json be3bef7e091d8b50bfc1c6b7275946d1f636aefd assets/create/blockstates/horizontal_framed_glass.json 18d9fdaa1352a7e2ec91135e46dae5c02ccd8f8f assets/create/blockstates/horizontal_framed_glass_pane.json @@ -305,7 +305,7 @@ c17d334e938dcb742550ba8307ca8266a1fc9b49 assets/create/blockstates/paved_weather cb23aef25f3106b06c8fa8f152c638bb0d2185d8 assets/create/blockstates/paved_weathered_limestone_slab.json d62b0992cec1de45dad1f2c273132225f4ef33a0 assets/create/blockstates/paved_weathered_limestone_stairs.json e29e245d06c46dac94fcd0e01a9bf7fa8e02fb87 assets/create/blockstates/paved_weathered_limestone_wall.json -7734d96271a199579e3ebb0bebf8bcd1cbec0992 assets/create/blockstates/peculiar_bell.json +005cc195712aca252326ae8239ed0caf9a69a314 assets/create/blockstates/peculiar_bell.json 30971f2f76fe56f144178c33ad6bde5fc9fb61c3 assets/create/blockstates/pink_sail.json 919a79e4a4a5fab0aac3ef48e1c786017d6aa001 assets/create/blockstates/pink_seat.json 471a3bb474a0ae0453143888d561256cce894e3f assets/create/blockstates/pink_valve_handle.json @@ -410,21 +410,21 @@ a3a11524cd3515fc01d905767b4b7ea782adaf03 assets/create/blockstates/yellow_seat.j 6801fa1f466f172700e573e5b8ee8ee5f9ca4583 assets/create/blockstates/yellow_valve_handle.json 7f39521b211441f5c3e06d60c5978cebe16cacfb assets/create/blockstates/zinc_block.json b7181bcd8182b2f17088e5aa881f374c9c65470c assets/create/blockstates/zinc_ore.json -34e7619c5f0e1559b30fd74e9ac6b2df0fecebfa assets/create/lang/en_ud.json -ed63be2abd8021a72528d48ade842a0c6d85c86f assets/create/lang/en_us.json -b9ed3430d65113ad12f950e1d40a3a83fbfb31c3 assets/create/lang/unfinished/de_de.json -f711933e82d78045c61f06a6127a1b7ae675c489 assets/create/lang/unfinished/es_es.json -541e387b3cfbff383c184bea905ea0773431ebce assets/create/lang/unfinished/es_mx.json -265820a60d244ba055d7035703a67e2c934e799f assets/create/lang/unfinished/fr_fr.json -4f37230b84a39c0142dcb1833a719d1a740016bb assets/create/lang/unfinished/it_it.json -45d16773521011b79743ba068f3a57e4f6028a74 assets/create/lang/unfinished/ja_jp.json -dae91b76b48b91a47a77135c9185901fc579d745 assets/create/lang/unfinished/ko_kr.json -acf4d7bfe6dcdbd9515d237daae5a1ba0917fd69 assets/create/lang/unfinished/nl_nl.json -95ca0ee6942917dfec8c8229a920e7043bd50f3d assets/create/lang/unfinished/pl_pl.json -c11d5dbe2042260d93245c622ee7b64f5a827981 assets/create/lang/unfinished/pt_br.json -81fd37851ce0b7d6ec6f385e51c5689e0a056140 assets/create/lang/unfinished/ru_ru.json -e36a36cffbd08d27ced84e3d14057c4b0cb1e68a assets/create/lang/unfinished/zh_cn.json -ea0369a293ad2e2c814de9938687ad5a700db9f4 assets/create/lang/unfinished/zh_tw.json +a882a728871c8ecdd2d770f0a1b966bc2ed273d7 assets/create/lang/en_ud.json +15548ffa979fd01f90977502cda07ced1a599505 assets/create/lang/en_us.json +563389d30c2837ec3579e9b1f7d90ab3be23da5e assets/create/lang/unfinished/de_de.json +b954db488cad0cbf25e8c1916e326caf28187b62 assets/create/lang/unfinished/es_es.json +b3d34fddc0be87a9a485d215efc989b45dca8f52 assets/create/lang/unfinished/es_mx.json +882c93b17de0ebfb2c09ed1abf183d0aa1956f42 assets/create/lang/unfinished/fr_fr.json +e1c09d72895f253b4eb1a32a5b3bddadff6fae69 assets/create/lang/unfinished/it_it.json +52e81f7f0591d5feedfde8ce5431d0fd4ab18dfc assets/create/lang/unfinished/ja_jp.json +0982c6bb817926faa1803b5d733f1b89d216b47a assets/create/lang/unfinished/ko_kr.json +4d2683c83ccd02e5f9ccb924e5895b5b12704c84 assets/create/lang/unfinished/nl_nl.json +67dd006a5965872a731944de028ac4bd24e594b6 assets/create/lang/unfinished/pl_pl.json +e89d828bf5d66b9c08e83c3870dc9fc8bcd35ca3 assets/create/lang/unfinished/pt_br.json +a2f8789e4091cabbb8eff972840e34164ef2845e assets/create/lang/unfinished/ru_ru.json +e1937c326a4e7109d444cc721d478c66ce085798 assets/create/lang/unfinished/zh_cn.json +428639c35caf7d9c973b1b80d270ef125bd3a3b3 assets/create/lang/unfinished/zh_tw.json 487a511a01b2a4531fb672f917922312db78f958 assets/create/models/block/acacia_window.json b48060cba1a382f373a05bf0039054053eccf076 assets/create/models/block/acacia_window_pane_noside.json 3066db1bf03cffa1a9c7fbacf47ae586632f4eb3 assets/create/models/block/acacia_window_pane_noside_alt.json @@ -821,6 +821,10 @@ a68cd40ffb769b195437107f4a2c2188b222b74a assets/create/models/block/gray_sail.js 17b651233c62b928f0228562a7f6e7a2b7b2d6b7 assets/create/models/block/green_sail.json 1438b8ce54ac5557b8f10dcef94f3525eae19461 assets/create/models/block/green_seat.json cc7ce9b6bc687ad5027a67c3bf22bdf5bcd71674 assets/create/models/block/green_valve_handle.json +29e09bf70184cc1d09fce31aea908a2ab56fa9e4 assets/create/models/block/haunted_bell_ceiling.json +942c2ae8a3546bd91f8489094f9e7516ff026e61 assets/create/models/block/haunted_bell_double_wall.json +44371c13450dd41d84769a3a50250de1d86e75c5 assets/create/models/block/haunted_bell_floor.json +57e48a613ce2c81992623a46792fca4bcafb33ce assets/create/models/block/haunted_bell_single_wall.json 5163171ed77af879fa06f290bf24b1bb99735c94 assets/create/models/block/honey.json b1e94d2858c3a8807def6c5131b6f63fe586fb91 assets/create/models/block/horizontal_framed_glass.json d13df8a5920c5778d98081fb0e97f045e2fd46a2 assets/create/models/block/horizontal_framed_glass_pane_noside.json @@ -1037,6 +1041,10 @@ f924c6104378768a3a645f5e77f9ed80d2c31e5a assets/create/models/block/paved_weathe 46e3eeeefd47f7e6007e53bb1b22de2c6c2a5923 assets/create/models/block/paved_weathered_limestone_wall_post.json c7941c0bcbdf7ec7e2d34679afac744cf81b7489 assets/create/models/block/paved_weathered_limestone_wall_side.json 39aaea370e31fa032e471d3b8f0ebf0586ee1a03 assets/create/models/block/paved_weathered_limestone_wall_side_tall.json +29e09bf70184cc1d09fce31aea908a2ab56fa9e4 assets/create/models/block/peculiar_bell_ceiling.json +942c2ae8a3546bd91f8489094f9e7516ff026e61 assets/create/models/block/peculiar_bell_double_wall.json +44371c13450dd41d84769a3a50250de1d86e75c5 assets/create/models/block/peculiar_bell_floor.json +57e48a613ce2c81992623a46792fca4bcafb33ce assets/create/models/block/peculiar_bell_single_wall.json 1b5f9e819cd4b5f5fe6e8c24920b916e8d93c95e assets/create/models/block/pink_sail.json ecc60ce7ee6b753073a99c597db95d6d9df3d438 assets/create/models/block/pink_seat.json 7ada61878d3a3c1d3cc33bcf9a80c21b8f9aaff2 assets/create/models/block/pink_valve_handle.json @@ -1261,7 +1269,6 @@ a47fbe5f2da79080d99ef0975bfa8da4d08f8be4 assets/create/models/item/chiseled_scor fe67c3f380d17735a9436a4579a8be1a02b8e4a0 assets/create/models/item/chute.json 6680a68526576ded5dac2aa3bc9fb9de3e744146 assets/create/models/item/cinder_flour.json c1da21be9f1af4f7a2ef4ec9cd92195d65ada316 assets/create/models/item/clockwork_bearing.json -47fb26e7a75c7bd521f46cdf9c11885769e1c94e assets/create/models/item/clockwork_component.json 0a2a0f0aafeab0088172f77afd40c1fa2cc1f2b8 assets/create/models/item/clutch.json dcb09deae110077bcddf090996b51cc66e9a7de3 assets/create/models/item/cogwheel.json 7717e3b21cff39f497f07687c70c1fa40eaa756d assets/create/models/item/content_observer.json @@ -1418,13 +1425,13 @@ e7daa31c1fc445d542bad476dfe1d6a8811f2070 assets/create/models/item/gray_seat.jso ecb9f32f62d3fa43fb226ab85adc2eb229fdfb77 assets/create/models/item/green_valve_handle.json 398b1a7c76c7bdb6a23b1248fdce98f6d835467f assets/create/models/item/hand_crank.json dee43bf1a9c211a752fac2c07aeba123f7f0c914 assets/create/models/item/handheld_worldshaper.json -bdbc76719ebf3dc28b013d30fb00dc6ce92b0ceb assets/create/models/item/haunted_bell.json +e17d9c90e621e9a39f38bb2d90a122f09a5f169d assets/create/models/item/haunted_bell.json f0d5af58e23e2705b3ef675c30bdf85ed9567c57 assets/create/models/item/honey_bucket.json 068729724f5f7b276b9bc378e533898a92e8debe assets/create/models/item/honeyed_apple.json 955e8accadb47f9b360e5fd48cd959c507b00f2d assets/create/models/item/horizontal_framed_glass.json f0e3b2b8a553b6e61746c922c27302dabfff71b6 assets/create/models/item/horizontal_framed_glass_pane.json ff92f6a9dfb73a6ee1eaaed3279c89390ff04a80 assets/create/models/item/hose_pulley.json -94a09bbd2ca14a72f9f79ca9364a2c342c1637e3 assets/create/models/item/incomplete_clockwork_component.json +153a185852af79654f0fb216c4b1b8e69c85ee8a assets/create/models/item/incomplete_precision_mechanism.json 9d605ce0da83a73b535bce45c107e604364e2b20 assets/create/models/item/iron_sheet.json 52e435014cb03e93411666c4799ebff206e55fc9 assets/create/models/item/item_drain.json 83fa8699318e51f838b483b40b3e897c34ed53d1 assets/create/models/item/jungle_window.json @@ -1539,7 +1546,7 @@ d60c4fb6e0e68d8f6c137a0c601145c342236c18 assets/create/models/item/paved_limesto 5ec22c676e301a7004ff7d127d20b46f49063c64 assets/create/models/item/paved_weathered_limestone_slab.json d81f85aea5e683539a0f3c805c154b76a9d88a9d assets/create/models/item/paved_weathered_limestone_stairs.json 910eaf2f571bae883b888d13f305bd848d278577 assets/create/models/item/paved_weathered_limestone_wall.json -2c0c9e7b131d9eb87b595abcbd68d2c55c443e58 assets/create/models/item/peculiar_bell.json +477cf0b4dd4482353668f6307f3f94d0fd77dd62 assets/create/models/item/peculiar_bell.json 9664f171c7856661776c5c4ef0b6880a77db648e assets/create/models/item/pink_seat.json 7d12cc24b86fcb3f0ca6fee650d1dee683859c0d assets/create/models/item/pink_valve_handle.json 04ce23dc141bedccc75b4512263da8b498f13205 assets/create/models/item/piston_extension_pole.json @@ -1574,6 +1581,7 @@ b97c891ebe74e7850ef1f982e4cc043338baa30f assets/create/models/item/potato_cannon 417c301eb7e54f14c564975570f59d048cc88987 assets/create/models/item/powdered_obsidian.json 1e501c1f2e9250aaaadcf17db62646d08177d4e1 assets/create/models/item/powered_latch.json 3a6dfc7f36e31ebfcd650c3144a7f2210e8a4f9f assets/create/models/item/powered_toggle_latch.json +7459efc8f20d093a8b0ef987eaace8cb0ad0aaa8 assets/create/models/item/precision_mechanism.json 4a3c3d81097d56bbd3aefeeb9eb7db87f514b5b4 assets/create/models/item/propeller.json 4b8a27ff05ed5331889dfc4b0b4562f3e94b0dfe assets/create/models/item/pulse_repeater.json a598b2f5eb34b061e81efb8a55267a02f8e08a61 assets/create/models/item/purple_seat.json @@ -1680,8 +1688,7 @@ de13a091928d5ab539d567411dd5c522cdcdd668 data/create/advancements/brass_casing.j 9531baa67bb3aee5e2723b1ab0578ff87bcb42b0 data/create/advancements/chromatic_eob.json f37551a788dfb3ff3d65db97a03c0420edf2c041 data/create/advancements/chute.json 0ffacd497176afdb26670783b65d383ac6236c19 data/create/advancements/clockwork_bearing.json -18511a1a11f2b362438cfcd961750963a43b7155 data/create/advancements/clockwork_component.json -df4a08ee0bd8d26977fdf2e45cce1d3b2f972033 data/create/advancements/clockwork_component_eob.json +fcb3a56a40d245a2fc95799b4b4da90756b58bd6 data/create/advancements/clockwork_component_eob.json 870ca791c418a1bc24f7b12284f5788c84911b92 data/create/advancements/compact.json d1015e059a2f2008a364b6d045a011a6d671f20d data/create/advancements/copper_casing.json 8e2a12a26218a46665c46f350ef9c3418a901988 data/create/advancements/crafter.json @@ -1690,7 +1697,7 @@ e9e1789de5cd5577a801a09d489a13f2c98779dc data/create/advancements/cuckoo.json 2a96fad5b44b62f233c9af5b4a637faf32ce24af data/create/advancements/deployer.json 20e04d0ac916996efedc35ab80e2b4ac4001582c data/create/advancements/dual_extendo_grip.json 04eaf829696d735244c0e4798dd3bdeb26e13a32 data/create/advancements/electron_tube.json -23b99d6745120e5ee11bcf6e3f6d55beb1be64f6 data/create/advancements/extendo_grip.json +e15f8093da07cb2292de49620f2aa776f5a6099a data/create/advancements/extendo_grip.json b1699baaadaac7ebce642c09428519d156e21594 data/create/advancements/fan.json 5aa76cba3b40a1c234ffa84a89ecca630990fc0f data/create/advancements/fan_lava.json 716a9816558300a3652ed8d8d568517017813f5c data/create/advancements/fan_smoke.json @@ -1719,7 +1726,8 @@ c9c4060ed207226b69fada2d61e01a97d7077eae data/create/advancements/nixie_tube.jso 449eb8a9e6102bb342c96eb8b19e743eb6979bfa data/create/advancements/pipe_collision.json 4b621e5bb48fbb120853ec02c05c915d86bd6dd8 data/create/advancements/pipe_spill.json 72025d8bf73ab8096c29f12d0c8d9a346f09cd64 data/create/advancements/polished_rose_quartz.json -77421567ff8eb4bdbe6c16bc3f0ae0ed1cc29e5e data/create/advancements/potato_cannon.json +69c45c653458d3076313bba3483bf26fb3946292 data/create/advancements/potato_cannon.json +6378090ee972356a3b772aa3d140cf52d396e60d data/create/advancements/precision_mechanism.json 62d29ec01eff5d21968636a0479361ecdc11ae30 data/create/advancements/press.json f80479b50e248ee8d6d1abb7d08866cf711ac2b2 data/create/advancements/recipes/building_blocks/andesite.json 5012e9d559439d0d62d0b34c2e39de048e8c7699 data/create/advancements/recipes/building_blocks/blasting/aluminum_ingot_compat_silents_mechanisms.json @@ -2382,7 +2390,7 @@ e0b9edc5e59647e7dd99be17369b263dadf407d4 data/create/advancements/refined_radian fc12b590ab8f5ac901db21c67ba3850f157e1421 data/create/advancements/root.json c1f162e773518f6b1481221e3e63f9ba33fed647 data/create/advancements/shadow_steel.json 6c1a67e193a4c5af356b31a1d5b5e9d3faeca87e data/create/advancements/shifting_gears.json -17f0cf050d0024559d0100925e325117bf3b20e3 data/create/advancements/speed_controller.json +65132cb27041c848230781cca8020a2e5ae4365e data/create/advancements/speed_controller.json a203d509a6038f0bad707e232a425388e62e1ae1 data/create/advancements/speedometer.json f7bb8f08a08e22ec1e6bb098d65d06233e8fbcec data/create/advancements/splitter_tunnel.json b69d174d7a5e9eab8ca013b66bc9d02244d7f9a3 data/create/advancements/spout.json @@ -2950,7 +2958,7 @@ d214afbd44e580f5fd1ebb4f16f07ffe34d87cba data/create/recipes/crafting/kinetics/l d7d96071874a87edf7bbdcf7a462f95a130d2991 data/create/recipes/crafting/kinetics/magenta_seat.json 5836881feef8fa8b18e4cceb9c3a9a2748b8cf3a data/create/recipes/crafting/kinetics/magenta_seat_from_other_seat.json 2ea43d6527dcb734578067ff442ec20395b0093b data/create/recipes/crafting/kinetics/magenta_valve_handle_from_other_valve_handle.json -edf33830927a6b1583c77aa5faeed1e80ef3631f data/create/recipes/crafting/kinetics/mechanical_arm.json +659cd6acdd15511c4b0a396740118b99b76a619d data/create/recipes/crafting/kinetics/mechanical_arm.json 946389078db31de69a7dc4fec5feebddf48dcfc3 data/create/recipes/crafting/kinetics/mechanical_bearing.json a5c7aad0d86cbb66b8688d295e62547da4a2ce0f data/create/recipes/crafting/kinetics/mechanical_crafter.json 4372830100d39c4a89ff397a62b01940e1a28cb3 data/create/recipes/crafting/kinetics/mechanical_drill.json @@ -2985,7 +2993,7 @@ af84b939ced1c0254a27469f857f571afbadc4f6 data/create/recipes/crafting/kinetics/r 0827e86e4b5f9d7023ccc19922bcbbaefd5b42d8 data/create/recipes/crafting/kinetics/red_seat_from_other_seat.json 5a10019d23726940152e26af3239d55d16bc7880 data/create/recipes/crafting/kinetics/red_valve_handle_from_other_valve_handle.json af525e135eb927b64462120d201ecae7a7ec61ed data/create/recipes/crafting/kinetics/rope_pulley.json -eab3a50d3252106bb244c6662404ba51d647a641 data/create/recipes/crafting/kinetics/rotation_speed_controller.json +1b918eb77b3e0fb2234c4c2c0d52e730ae7f3ffa data/create/recipes/crafting/kinetics/rotation_speed_controller.json d0d7fb94621f6f02fa3137666f20e677022d9d5b data/create/recipes/crafting/kinetics/sail_frame.json 66922e18791c87fadb7629cdf32d3dd2f50ccd13 data/create/recipes/crafting/kinetics/secondary_linear_chassisfrom_conversion.json a17db27e61baa45f8a6ecb46a6d2a5a464704f8b data/create/recipes/crafting/kinetics/sequenced_gearshift.json @@ -3326,10 +3334,10 @@ bbf64f7eb3868e354756e57348493e2b1ae6b0d9 data/create/recipes/limestone_cobblesto 327bb8a6535b60bb65d0dda9d5205e988bc82526 data/create/recipes/limestone_pillar.json c2e15ac0c9109bad3face6d13efc32d7116b4c25 data/create/recipes/limestone_pillar_from_limestone_stonecutting.json 88173753ceaf121c5430bbf928a40e3c046dbfe0 data/create/recipes/mechanical_crafting/crushing_wheel.json -5ad44ffe3befafba6ae45096cf77b80d00d8eca2 data/create/recipes/mechanical_crafting/extendo_grip.json +14e322d4de8fae35d952274376497740bb3d5962 data/create/recipes/mechanical_crafting/extendo_grip.json de7fea84434753873dfa2b929d9b5f5f86ac6a5c data/create/recipes/mechanical_crafting/flywheel.json e491fd8a8873308270f9dc2a57ac8f2c70431dcc data/create/recipes/mechanical_crafting/furnace_engine.json -06deb1679f4086e014e96fff40b6983365076a10 data/create/recipes/mechanical_crafting/potato_cannon.json +6ebd36ff54059038badefad239284ec1724fdf1d data/create/recipes/mechanical_crafting/potato_cannon.json 98f877bf8f3f8a686fc6cf7479a0fba5744248ce data/create/recipes/milling/allium.json 8c7e1cbc87c7ca7df2bf949957e89422fef8ad94 data/create/recipes/milling/aluminum_ore.json bcff4d30ae09a0729bce8b2dbde4ddd6719a998b data/create/recipes/milling/andesite.json @@ -3553,9 +3561,9 @@ f7b7ff190929ae525297fecb3c116f32fc05fd88 data/create/recipes/scoria_cobblestone_ a9096822db9d12b6014d6d34e52de5821305c03f data/create/recipes/scoria_cobblestone_wall_from_scoria_cobblestone_stonecutting.json a513468ce4d55fe3b3919bd76ba2bd5b6fac4d4e data/create/recipes/scoria_pillar.json 2e0ecbd3619f080d0fc6fe48307c5a5bcc2e91b4 data/create/recipes/scoria_pillar_from_scoria_stonecutting.json -073b7c585b6733e6b984f34b9658566c47540968 data/create/recipes/sequenced_assembly/clockwork_component.json -fafe9cd8b83fd9449f4040c7c2185341a4066d21 data/create/recipes/sequenced_assembly/cogwheel.json -f12f4d7f11b7ca9cdbc36791bbedbd7f14f75acd data/create/recipes/sequenced_assembly/large_cogwheel.json +23c9f4c033e5e04539c6c48e1253c95ad58ecf34 data/create/recipes/sequenced_assembly/cogwheel.json +eb8f0341d5fffab74003297af8bc36dd936b06fc data/create/recipes/sequenced_assembly/large_cogwheel.json +bf48a1da348c4fc536f2082aeead28ad7de7756e data/create/recipes/sequenced_assembly/precision_mechanism.json 4e817b521623966fa24186731a70f0e14c03168e data/create/recipes/smelting/aluminum_ingot_compat_silents_mechanisms.json ae90f50589bc06b44765ac8cbb9fbdc2b58fdb32 data/create/recipes/smelting/brass_ingot_from_crushed.json 64cbf425effba00ff2e31d95cffc2be2e0191932 data/create/recipes/smelting/bread.json diff --git a/src/generated/resources/assets/create/blockstates/haunted_bell.json b/src/generated/resources/assets/create/blockstates/haunted_bell.json index 5f0997b92..aff248286 100644 --- a/src/generated/resources/assets/create/blockstates/haunted_bell.json +++ b/src/generated/resources/assets/create/blockstates/haunted_bell.json @@ -1,123 +1,123 @@ { "variants": { "attachment=floor,facing=north,powered=false": { - "model": "create:block/haunted_bell/block_floor" + "model": "create:block/haunted_bell_floor" }, "attachment=ceiling,facing=north,powered=false": { - "model": "create:block/haunted_bell/block_ceiling" + "model": "create:block/haunted_bell_ceiling" }, "attachment=single_wall,facing=north,powered=false": { - "model": "create:block/haunted_bell/block_single_wall" + "model": "create:block/haunted_bell_single_wall" }, "attachment=double_wall,facing=north,powered=false": { - "model": "create:block/haunted_bell/block_double_wall" + "model": "create:block/haunted_bell_double_wall" }, "attachment=floor,facing=south,powered=false": { - "model": "create:block/haunted_bell/block_floor", + "model": "create:block/haunted_bell_floor", "y": 180 }, "attachment=ceiling,facing=south,powered=false": { - "model": "create:block/haunted_bell/block_ceiling", + "model": "create:block/haunted_bell_ceiling", "y": 180 }, "attachment=single_wall,facing=south,powered=false": { - "model": "create:block/haunted_bell/block_single_wall", + "model": "create:block/haunted_bell_single_wall", "y": 180 }, "attachment=double_wall,facing=south,powered=false": { - "model": "create:block/haunted_bell/block_double_wall", + "model": "create:block/haunted_bell_double_wall", "y": 180 }, "attachment=floor,facing=west,powered=false": { - "model": "create:block/haunted_bell/block_floor", + "model": "create:block/haunted_bell_floor", "y": 270 }, "attachment=ceiling,facing=west,powered=false": { - "model": "create:block/haunted_bell/block_ceiling", + "model": "create:block/haunted_bell_ceiling", "y": 270 }, "attachment=single_wall,facing=west,powered=false": { - "model": "create:block/haunted_bell/block_single_wall", + "model": "create:block/haunted_bell_single_wall", "y": 270 }, "attachment=double_wall,facing=west,powered=false": { - "model": "create:block/haunted_bell/block_double_wall", + "model": "create:block/haunted_bell_double_wall", "y": 270 }, "attachment=floor,facing=east,powered=false": { - "model": "create:block/haunted_bell/block_floor", + "model": "create:block/haunted_bell_floor", "y": 90 }, "attachment=ceiling,facing=east,powered=false": { - "model": "create:block/haunted_bell/block_ceiling", + "model": "create:block/haunted_bell_ceiling", "y": 90 }, "attachment=single_wall,facing=east,powered=false": { - "model": "create:block/haunted_bell/block_single_wall", + "model": "create:block/haunted_bell_single_wall", "y": 90 }, "attachment=double_wall,facing=east,powered=false": { - "model": "create:block/haunted_bell/block_double_wall", + "model": "create:block/haunted_bell_double_wall", "y": 90 }, "attachment=floor,facing=north,powered=true": { - "model": "create:block/haunted_bell/block_floor" + "model": "create:block/haunted_bell_floor" }, "attachment=ceiling,facing=north,powered=true": { - "model": "create:block/haunted_bell/block_ceiling" + "model": "create:block/haunted_bell_ceiling" }, "attachment=single_wall,facing=north,powered=true": { - "model": "create:block/haunted_bell/block_single_wall" + "model": "create:block/haunted_bell_single_wall" }, "attachment=double_wall,facing=north,powered=true": { - "model": "create:block/haunted_bell/block_double_wall" + "model": "create:block/haunted_bell_double_wall" }, "attachment=floor,facing=south,powered=true": { - "model": "create:block/haunted_bell/block_floor", + "model": "create:block/haunted_bell_floor", "y": 180 }, "attachment=ceiling,facing=south,powered=true": { - "model": "create:block/haunted_bell/block_ceiling", + "model": "create:block/haunted_bell_ceiling", "y": 180 }, "attachment=single_wall,facing=south,powered=true": { - "model": "create:block/haunted_bell/block_single_wall", + "model": "create:block/haunted_bell_single_wall", "y": 180 }, "attachment=double_wall,facing=south,powered=true": { - "model": "create:block/haunted_bell/block_double_wall", + "model": "create:block/haunted_bell_double_wall", "y": 180 }, "attachment=floor,facing=west,powered=true": { - "model": "create:block/haunted_bell/block_floor", + "model": "create:block/haunted_bell_floor", "y": 270 }, "attachment=ceiling,facing=west,powered=true": { - "model": "create:block/haunted_bell/block_ceiling", + "model": "create:block/haunted_bell_ceiling", "y": 270 }, "attachment=single_wall,facing=west,powered=true": { - "model": "create:block/haunted_bell/block_single_wall", + "model": "create:block/haunted_bell_single_wall", "y": 270 }, "attachment=double_wall,facing=west,powered=true": { - "model": "create:block/haunted_bell/block_double_wall", + "model": "create:block/haunted_bell_double_wall", "y": 270 }, "attachment=floor,facing=east,powered=true": { - "model": "create:block/haunted_bell/block_floor", + "model": "create:block/haunted_bell_floor", "y": 90 }, "attachment=ceiling,facing=east,powered=true": { - "model": "create:block/haunted_bell/block_ceiling", + "model": "create:block/haunted_bell_ceiling", "y": 90 }, "attachment=single_wall,facing=east,powered=true": { - "model": "create:block/haunted_bell/block_single_wall", + "model": "create:block/haunted_bell_single_wall", "y": 90 }, "attachment=double_wall,facing=east,powered=true": { - "model": "create:block/haunted_bell/block_double_wall", + "model": "create:block/haunted_bell_double_wall", "y": 90 } } diff --git a/src/generated/resources/assets/create/blockstates/peculiar_bell.json b/src/generated/resources/assets/create/blockstates/peculiar_bell.json index 1c4ad76a6..c688d01c7 100644 --- a/src/generated/resources/assets/create/blockstates/peculiar_bell.json +++ b/src/generated/resources/assets/create/blockstates/peculiar_bell.json @@ -1,123 +1,123 @@ { "variants": { "attachment=floor,facing=north,powered=false": { - "model": "create:block/peculiar_bell/block_floor" + "model": "create:block/peculiar_bell_floor" }, "attachment=ceiling,facing=north,powered=false": { - "model": "create:block/peculiar_bell/block_ceiling" + "model": "create:block/peculiar_bell_ceiling" }, "attachment=single_wall,facing=north,powered=false": { - "model": "create:block/peculiar_bell/block_single_wall" + "model": "create:block/peculiar_bell_single_wall" }, "attachment=double_wall,facing=north,powered=false": { - "model": "create:block/peculiar_bell/block_double_wall" + "model": "create:block/peculiar_bell_double_wall" }, "attachment=floor,facing=south,powered=false": { - "model": "create:block/peculiar_bell/block_floor", + "model": "create:block/peculiar_bell_floor", "y": 180 }, "attachment=ceiling,facing=south,powered=false": { - "model": "create:block/peculiar_bell/block_ceiling", + "model": "create:block/peculiar_bell_ceiling", "y": 180 }, "attachment=single_wall,facing=south,powered=false": { - "model": "create:block/peculiar_bell/block_single_wall", + "model": "create:block/peculiar_bell_single_wall", "y": 180 }, "attachment=double_wall,facing=south,powered=false": { - "model": "create:block/peculiar_bell/block_double_wall", + "model": "create:block/peculiar_bell_double_wall", "y": 180 }, "attachment=floor,facing=west,powered=false": { - "model": "create:block/peculiar_bell/block_floor", + "model": "create:block/peculiar_bell_floor", "y": 270 }, "attachment=ceiling,facing=west,powered=false": { - "model": "create:block/peculiar_bell/block_ceiling", + "model": "create:block/peculiar_bell_ceiling", "y": 270 }, "attachment=single_wall,facing=west,powered=false": { - "model": "create:block/peculiar_bell/block_single_wall", + "model": "create:block/peculiar_bell_single_wall", "y": 270 }, "attachment=double_wall,facing=west,powered=false": { - "model": "create:block/peculiar_bell/block_double_wall", + "model": "create:block/peculiar_bell_double_wall", "y": 270 }, "attachment=floor,facing=east,powered=false": { - "model": "create:block/peculiar_bell/block_floor", + "model": "create:block/peculiar_bell_floor", "y": 90 }, "attachment=ceiling,facing=east,powered=false": { - "model": "create:block/peculiar_bell/block_ceiling", + "model": "create:block/peculiar_bell_ceiling", "y": 90 }, "attachment=single_wall,facing=east,powered=false": { - "model": "create:block/peculiar_bell/block_single_wall", + "model": "create:block/peculiar_bell_single_wall", "y": 90 }, "attachment=double_wall,facing=east,powered=false": { - "model": "create:block/peculiar_bell/block_double_wall", + "model": "create:block/peculiar_bell_double_wall", "y": 90 }, "attachment=floor,facing=north,powered=true": { - "model": "create:block/peculiar_bell/block_floor" + "model": "create:block/peculiar_bell_floor" }, "attachment=ceiling,facing=north,powered=true": { - "model": "create:block/peculiar_bell/block_ceiling" + "model": "create:block/peculiar_bell_ceiling" }, "attachment=single_wall,facing=north,powered=true": { - "model": "create:block/peculiar_bell/block_single_wall" + "model": "create:block/peculiar_bell_single_wall" }, "attachment=double_wall,facing=north,powered=true": { - "model": "create:block/peculiar_bell/block_double_wall" + "model": "create:block/peculiar_bell_double_wall" }, "attachment=floor,facing=south,powered=true": { - "model": "create:block/peculiar_bell/block_floor", + "model": "create:block/peculiar_bell_floor", "y": 180 }, "attachment=ceiling,facing=south,powered=true": { - "model": "create:block/peculiar_bell/block_ceiling", + "model": "create:block/peculiar_bell_ceiling", "y": 180 }, "attachment=single_wall,facing=south,powered=true": { - "model": "create:block/peculiar_bell/block_single_wall", + "model": "create:block/peculiar_bell_single_wall", "y": 180 }, "attachment=double_wall,facing=south,powered=true": { - "model": "create:block/peculiar_bell/block_double_wall", + "model": "create:block/peculiar_bell_double_wall", "y": 180 }, "attachment=floor,facing=west,powered=true": { - "model": "create:block/peculiar_bell/block_floor", + "model": "create:block/peculiar_bell_floor", "y": 270 }, "attachment=ceiling,facing=west,powered=true": { - "model": "create:block/peculiar_bell/block_ceiling", + "model": "create:block/peculiar_bell_ceiling", "y": 270 }, "attachment=single_wall,facing=west,powered=true": { - "model": "create:block/peculiar_bell/block_single_wall", + "model": "create:block/peculiar_bell_single_wall", "y": 270 }, "attachment=double_wall,facing=west,powered=true": { - "model": "create:block/peculiar_bell/block_double_wall", + "model": "create:block/peculiar_bell_double_wall", "y": 270 }, "attachment=floor,facing=east,powered=true": { - "model": "create:block/peculiar_bell/block_floor", + "model": "create:block/peculiar_bell_floor", "y": 90 }, "attachment=ceiling,facing=east,powered=true": { - "model": "create:block/peculiar_bell/block_ceiling", + "model": "create:block/peculiar_bell_ceiling", "y": 90 }, "attachment=single_wall,facing=east,powered=true": { - "model": "create:block/peculiar_bell/block_single_wall", + "model": "create:block/peculiar_bell_single_wall", "y": 90 }, "attachment=double_wall,facing=east,powered=true": { - "model": "create:block/peculiar_bell/block_double_wall", + "model": "create:block/peculiar_bell_double_wall", "y": 90 } } diff --git a/src/generated/resources/assets/create/lang/en_ud.json b/src/generated/resources/assets/create/lang/en_ud.json index d4f9640af..fbbbb1a06 100644 --- a/src/generated/resources/assets/create/lang/en_ud.json +++ b/src/generated/resources/assets/create/lang/en_ud.json @@ -437,7 +437,6 @@ "item.create.chocolate_glazed_berries": "s\u01DD\u0131\u0279\u0279\u01DD\u15FA p\u01DDz\u0250\u05DF\u2141 \u01DD\u0287\u0250\u05DFo\u0254o\u0265\u0186", "item.create.chromatic_compound": "punod\u026Fo\u0186 \u0254\u0131\u0287\u0250\u026Fo\u0279\u0265\u0186", "item.create.cinder_flour": "\u0279no\u05DF\u2132 \u0279\u01DDpu\u0131\u0186", - "item.create.clockwork_component": "\u0287u\u01DDuod\u026Fo\u0186 \u029E\u0279o\u028D\u029E\u0254o\u05DF\u0186", "item.create.copper_backtank": "\u029Eu\u0250\u0287\u029E\u0254\u0250\u15FA \u0279\u01DDddo\u0186", "item.create.copper_ingot": "\u0287obuI \u0279\u01DDddo\u0186", "item.create.copper_nugget": "\u0287\u01DDbbnN \u0279\u01DDddo\u0186", @@ -472,9 +471,9 @@ "item.create.handheld_worldshaper": "\u0279\u01DDd\u0250\u0265sp\u05DF\u0279oM \u01DD\u028C\u0131\u0287\u0250\u01DD\u0279\u0186", "item.create.honey_bucket": "\u0287\u01DD\u029E\u0254n\u15FA \u028E\u01DDuoH", "item.create.honeyed_apple": "\u01DD\u05DFdd\u2C6F p\u01DD\u028E\u01DDuoH", - "item.create.incomplete_clockwork_component": "\u0287u\u01DDuod\u026Fo\u0186 \u029E\u0279o\u028D\u029E\u0254o\u05DF\u0186 \u01DD\u0287\u01DD\u05DFd\u026Fo\u0254uI", "item.create.incomplete_cogwheel": "\u05DF\u01DD\u01DD\u0265\u028Dbo\u0186 \u01DD\u0287\u01DD\u05DFd\u026Fo\u0254uI", "item.create.incomplete_large_cogwheel": "\u05DF\u01DD\u01DD\u0265\u028Dbo\u0186 \u01DDb\u0279\u0250\uA780 \u01DD\u0287\u01DD\u05DFd\u026Fo\u0254uI", + "item.create.incomplete_precision_mechanism": "\u026Fs\u0131u\u0250\u0265\u0254\u01DDW uo\u0131s\u0131\u0254\u01DD\u0279\u0500 \u01DD\u0287\u01DD\u05DFd\u026Fo\u0254uI", "item.create.iron_sheet": "\u0287\u01DD\u01DD\u0265S uo\u0279I", "item.create.linked_controller": "\u0279\u01DD\u05DF\u05DFo\u0279\u0287uo\u0186 p\u01DD\u029Eu\u0131\uA780", "item.create.minecart_contraption": "uo\u0131\u0287d\u0250\u0279\u0287uo\u0186 \u0287\u0279\u0250\u0254\u01DDu\u0131W", @@ -482,6 +481,7 @@ "item.create.polished_rose_quartz": "z\u0287\u0279\u0250n\u1F49 \u01DDso\u1D1A p\u01DD\u0265s\u0131\u05DFo\u0500", "item.create.potato_cannon": "uouu\u0250\u0186 o\u0287\u0250\u0287o\u0500", "item.create.powdered_obsidian": "u\u0250\u0131p\u0131sqO p\u01DD\u0279\u01DDp\u028Do\u0500", + "item.create.precision_mechanism": "\u026Fs\u0131u\u0250\u0265\u0254\u01DDW uo\u0131s\u0131\u0254\u01DD\u0279\u0500", "item.create.propeller": "\u0279\u01DD\u05DF\u05DF\u01DDdo\u0279\u0500", "item.create.red_sand_paper": "\u0279\u01DDd\u0250\u0500 pu\u0250S p\u01DD\u1D1A", "item.create.refined_radiance": "\u01DD\u0254u\u0250\u0131p\u0250\u1D1A p\u01DDu\u0131\u025F\u01DD\u1D1A", diff --git a/src/generated/resources/assets/create/lang/en_us.json b/src/generated/resources/assets/create/lang/en_us.json index 15e8ad3d3..d98b944a5 100644 --- a/src/generated/resources/assets/create/lang/en_us.json +++ b/src/generated/resources/assets/create/lang/en_us.json @@ -443,7 +443,6 @@ "item.create.chocolate_glazed_berries": "Chocolate Glazed Berries", "item.create.chromatic_compound": "Chromatic Compound", "item.create.cinder_flour": "Cinder Flour", - "item.create.clockwork_component": "Clockwork Component", "item.create.copper_backtank": "Copper Backtank", "item.create.copper_ingot": "Copper Ingot", "item.create.copper_nugget": "Copper Nugget", @@ -478,9 +477,9 @@ "item.create.handheld_worldshaper": "Creative Worldshaper", "item.create.honey_bucket": "Honey Bucket", "item.create.honeyed_apple": "Honeyed Apple", - "item.create.incomplete_clockwork_component": "Incomplete Clockwork Component", "item.create.incomplete_cogwheel": "Incomplete Cogwheel", "item.create.incomplete_large_cogwheel": "Incomplete Large Cogwheel", + "item.create.incomplete_precision_mechanism": "Incomplete Precision Mechanism", "item.create.iron_sheet": "Iron Sheet", "item.create.linked_controller": "Linked Controller", "item.create.minecart_contraption": "Minecart Contraption", @@ -488,6 +487,7 @@ "item.create.polished_rose_quartz": "Polished Rose Quartz", "item.create.potato_cannon": "Potato Cannon", "item.create.powdered_obsidian": "Powdered Obsidian", + "item.create.precision_mechanism": "Precision Mechanism", "item.create.propeller": "Propeller", "item.create.red_sand_paper": "Red Sand Paper", "item.create.refined_radiance": "Refined Radiance", @@ -632,8 +632,8 @@ "advancement.create.flywheel.desc": "Successfully connect an engine to the Flywheel.", "advancement.create.overstress_flywheel": "High levels of Stress", "advancement.create.overstress_flywheel.desc": "Overstress a Furnace Engine.", - "advancement.create.clockwork_component": "Complex Curiosities", - "advancement.create.clockwork_component.desc": "Assemble a Clockwork Component.", + "advancement.create.precision_mechanism": "Complex Curiosities", + "advancement.create.precision_mechanism.desc": "Assemble a Precision Mechanism.", "advancement.create.mechanical_arm": "Busy Hands!", "advancement.create.mechanical_arm.desc": "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": "Play Me My Theme Tune!", @@ -1438,12 +1438,12 @@ "item.create.minecart_coupling.tooltip.behaviour1": "_Couples_ two Minecarts together, attempting to keep them at a _constant distance_ while moving.", "block.create.peculiar_bell.tooltip": "PECULIAR BELL", - "block.create.peculiar_bell.tooltip.summary": "A decorative brass bell. Placing it above a _Soul Fire_ or _Soul Campfire_ may cause a spooky transformation to occur...", + "block.create.peculiar_bell.tooltip.summary": "A decorative _Brass Bell_. Placing it right above open _Soul Fire_ may cause side-effects...", "block.create.haunted_bell.tooltip": "HAUNTED BELL", - "block.create.haunted_bell.tooltip.summary": "A spooky brass bell haunted by lost souls of the Nether.", + "block.create.haunted_bell.tooltip.summary": "A _Cursed Bell_ haunted by lost souls of the Nether.", "block.create.haunted_bell.tooltip.condition1": "When Held or Rang", - "block.create.haunted_bell.tooltip.behaviour1": "Highlights nearby _dark spots_ on which _Hostile Mobs_ could spawn.", + "block.create.haunted_bell.tooltip.behaviour1": "Highlights nearby _Lightless Spots_ on which _Hostile Mobs_ can spawn.", "_": "->------------------------] Ponder Content [------------------------<-", 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 e02dd5dc6..60557279b 100644 --- a/src/generated/resources/assets/create/lang/unfinished/de_de.json +++ b/src/generated/resources/assets/create/lang/unfinished/de_de.json @@ -444,7 +444,6 @@ "item.create.chocolate_glazed_berries": "Schokoladenglasierte Beeren", "item.create.chromatic_compound": "Chromatische Verbindung", "item.create.cinder_flour": "Aschenmehl", - "item.create.clockwork_component": "UNLOCALIZED: Clockwork Component", "item.create.copper_backtank": "UNLOCALIZED: Copper Backtank", "item.create.copper_ingot": "Kupferbarren", "item.create.copper_nugget": "Kupferklumpen", @@ -479,9 +478,9 @@ "item.create.handheld_worldshaper": "Geländeformer", "item.create.honey_bucket": "Honigeimer", "item.create.honeyed_apple": "Honigapfel", - "item.create.incomplete_clockwork_component": "UNLOCALIZED: Incomplete Clockwork Component", "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.iron_sheet": "Eisenblech", "item.create.linked_controller": "UNLOCALIZED: Linked Controller", "item.create.minecart_contraption": "Loren Vorrichtung", @@ -489,6 +488,7 @@ "item.create.polished_rose_quartz": "Polierter Rosenquarz", "item.create.potato_cannon": "UNLOCALIZED: Potato Cannon", "item.create.powdered_obsidian": "Pulverisierter Obsidian", + "item.create.precision_mechanism": "UNLOCALIZED: Precision Mechanism", "item.create.propeller": "Propeller", "item.create.red_sand_paper": "Rotes Schmirgelpapier", "item.create.refined_radiance": "Raffinierter Glanz", @@ -633,8 +633,8 @@ "advancement.create.flywheel.desc": "UNLOCALIZED: Successfully connect an 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.clockwork_component": "UNLOCALIZED: Complex Curiosities", - "advancement.create.clockwork_component.desc": "UNLOCALIZED: Assemble a Clockwork Component.", + "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!", @@ -1439,12 +1439,12 @@ "item.create.minecart_coupling.tooltip.behaviour1": "UNLOCALIZED: _Couples_ two Minecarts together, attempting to keep them at a _constant distance_ while moving.", "block.create.peculiar_bell.tooltip": "UNLOCALIZED: PECULIAR BELL", - "block.create.peculiar_bell.tooltip.summary": "UNLOCALIZED: A decorative brass bell. Placing it above a _Soul Fire_ or _Soul Campfire_ may cause a spooky transformation to occur...", + "block.create.peculiar_bell.tooltip.summary": "UNLOCALIZED: A decorative _Brass Bell_. Placing it right above open _Soul Fire_ may cause side-effects...", "block.create.haunted_bell.tooltip": "UNLOCALIZED: HAUNTED BELL", - "block.create.haunted_bell.tooltip.summary": "UNLOCALIZED: A spooky brass bell haunted by lost souls of the Nether.", + "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 _dark spots_ on which _Hostile Mobs_ could spawn.", + "block.create.haunted_bell.tooltip.behaviour1": "UNLOCALIZED: Highlights nearby _Lightless Spots_ on which _Hostile Mobs_ can spawn.", "_": "->------------------------] 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 d64bf6fed..00a2ad479 100644 --- a/src/generated/resources/assets/create/lang/unfinished/es_es.json +++ b/src/generated/resources/assets/create/lang/unfinished/es_es.json @@ -444,7 +444,6 @@ "item.create.chocolate_glazed_berries": "UNLOCALIZED: Chocolate Glazed Berries", "item.create.chromatic_compound": "Compuesto cromático", "item.create.cinder_flour": "Harina de ceniza", - "item.create.clockwork_component": "UNLOCALIZED: Clockwork Component", "item.create.copper_backtank": "UNLOCALIZED: Copper Backtank", "item.create.copper_ingot": "Lingote de cobre", "item.create.copper_nugget": "Pepita de cobre", @@ -479,9 +478,9 @@ "item.create.handheld_worldshaper": "Worldshaper", "item.create.honey_bucket": "Cubo de miel", "item.create.honeyed_apple": "UNLOCALIZED: Honeyed Apple", - "item.create.incomplete_clockwork_component": "UNLOCALIZED: Incomplete Clockwork Component", "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.iron_sheet": "Lámina de hierro", "item.create.linked_controller": "UNLOCALIZED: Linked Controller", "item.create.minecart_contraption": "Artilugio de vagoneta", @@ -489,6 +488,7 @@ "item.create.polished_rose_quartz": "Cuarzo rosado pulido", "item.create.potato_cannon": "UNLOCALIZED: Potato Cannon", "item.create.powdered_obsidian": "Obsidiana en polvo", + "item.create.precision_mechanism": "UNLOCALIZED: Precision Mechanism", "item.create.propeller": "Hélice", "item.create.red_sand_paper": "Papel de lija rojo", "item.create.refined_radiance": "Resplandor refinado", @@ -633,8 +633,8 @@ "advancement.create.flywheel.desc": "Conectar con éxito un motor a la rueda de inercia.", "advancement.create.overstress_flywheel": "Altos niveles de estrés", "advancement.create.overstress_flywheel.desc": "Sobrecargar un Motor de Horno.", - "advancement.create.clockwork_component": "UNLOCALIZED: Complex Curiosities", - "advancement.create.clockwork_component.desc": "UNLOCALIZED: Assemble a Clockwork Component.", + "advancement.create.precision_mechanism": "UNLOCALIZED: Complex Curiosities", + "advancement.create.precision_mechanism.desc": "UNLOCALIZED: Assemble a Precision Mechanism.", "advancement.create.mechanical_arm": "Manos ocupadas!", "advancement.create.mechanical_arm.desc": "Crea un brazo mecánico, selecciona las entradas y salidas, colócalo en el suelo y dale energía; luego observa cómo hace todo el trabajo por ti.", "advancement.create.musical_arm": "Tócame la melodía!", @@ -1439,12 +1439,12 @@ "item.create.minecart_coupling.tooltip.behaviour1": "_Acopla_ dos Vagonetas, intentando mantenerlas a una _distancia constante_ mientras se mueven", "block.create.peculiar_bell.tooltip": "UNLOCALIZED: PECULIAR BELL", - "block.create.peculiar_bell.tooltip.summary": "UNLOCALIZED: A decorative brass bell. Placing it above a _Soul Fire_ or _Soul Campfire_ may cause a spooky transformation to occur...", + "block.create.peculiar_bell.tooltip.summary": "UNLOCALIZED: A decorative _Brass Bell_. Placing it right above open _Soul Fire_ may cause side-effects...", "block.create.haunted_bell.tooltip": "UNLOCALIZED: HAUNTED BELL", - "block.create.haunted_bell.tooltip.summary": "UNLOCALIZED: A spooky brass bell haunted by lost souls of the Nether.", + "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 _dark spots_ on which _Hostile Mobs_ could spawn.", + "block.create.haunted_bell.tooltip.behaviour1": "UNLOCALIZED: Highlights nearby _Lightless Spots_ on which _Hostile Mobs_ can spawn.", "_": "->------------------------] Ponder Content [------------------------<-", diff --git a/src/generated/resources/assets/create/lang/unfinished/es_mx.json b/src/generated/resources/assets/create/lang/unfinished/es_mx.json index 225b3fab6..65dfbb877 100644 --- a/src/generated/resources/assets/create/lang/unfinished/es_mx.json +++ b/src/generated/resources/assets/create/lang/unfinished/es_mx.json @@ -444,7 +444,6 @@ "item.create.chocolate_glazed_berries": "UNLOCALIZED: Chocolate Glazed Berries", "item.create.chromatic_compound": "Compuesto Cromático", "item.create.cinder_flour": "Ceniza Molida", - "item.create.clockwork_component": "UNLOCALIZED: Clockwork Component", "item.create.copper_backtank": "UNLOCALIZED: Copper Backtank", "item.create.copper_ingot": "Lingote de Cobre", "item.create.copper_nugget": "Pepita de Cobre", @@ -479,9 +478,9 @@ "item.create.handheld_worldshaper": "Pistola de Manipulación de Mundo", "item.create.honey_bucket": "Cubeta de Miel", "item.create.honeyed_apple": "UNLOCALIZED: Honeyed Apple", - "item.create.incomplete_clockwork_component": "UNLOCALIZED: Incomplete Clockwork Component", "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.iron_sheet": "Lámina de Hierro", "item.create.linked_controller": "UNLOCALIZED: Linked Controller", "item.create.minecart_contraption": "Artefacto de Vagón", @@ -489,6 +488,7 @@ "item.create.polished_rose_quartz": "Cuarzo Rosa Pulido", "item.create.potato_cannon": "UNLOCALIZED: Potato Cannon", "item.create.powdered_obsidian": "Polvo de Obsidiana", + "item.create.precision_mechanism": "UNLOCALIZED: Precision Mechanism", "item.create.propeller": "Hélice", "item.create.red_sand_paper": "Papel de Arena Roja", "item.create.refined_radiance": "Radiancia Refinada", @@ -633,8 +633,8 @@ "advancement.create.flywheel.desc": "UNLOCALIZED: Successfully connect an 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.clockwork_component": "UNLOCALIZED: Complex Curiosities", - "advancement.create.clockwork_component.desc": "UNLOCALIZED: Assemble a Clockwork Component.", + "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!", @@ -1439,12 +1439,12 @@ "item.create.minecart_coupling.tooltip.behaviour1": "UNLOCALIZED: _Couples_ two Minecarts together, attempting to keep them at a _constant distance_ while moving.", "block.create.peculiar_bell.tooltip": "UNLOCALIZED: PECULIAR BELL", - "block.create.peculiar_bell.tooltip.summary": "UNLOCALIZED: A decorative brass bell. Placing it above a _Soul Fire_ or _Soul Campfire_ may cause a spooky transformation to occur...", + "block.create.peculiar_bell.tooltip.summary": "UNLOCALIZED: A decorative _Brass Bell_. Placing it right above open _Soul Fire_ may cause side-effects...", "block.create.haunted_bell.tooltip": "UNLOCALIZED: HAUNTED BELL", - "block.create.haunted_bell.tooltip.summary": "UNLOCALIZED: A spooky brass bell haunted by lost souls of the Nether.", + "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 _dark spots_ on which _Hostile Mobs_ could spawn.", + "block.create.haunted_bell.tooltip.behaviour1": "UNLOCALIZED: Highlights nearby _Lightless Spots_ on which _Hostile Mobs_ can spawn.", "_": "->------------------------] Ponder Content [------------------------<-", diff --git a/src/generated/resources/assets/create/lang/unfinished/fr_fr.json b/src/generated/resources/assets/create/lang/unfinished/fr_fr.json index aa11a415f..efb79f420 100644 --- a/src/generated/resources/assets/create/lang/unfinished/fr_fr.json +++ b/src/generated/resources/assets/create/lang/unfinished/fr_fr.json @@ -444,7 +444,6 @@ "item.create.chocolate_glazed_berries": "UNLOCALIZED: Chocolate Glazed Berries", "item.create.chromatic_compound": "Composé chromatique", "item.create.cinder_flour": "Farine de braise", - "item.create.clockwork_component": "UNLOCALIZED: Clockwork Component", "item.create.copper_backtank": "UNLOCALIZED: Copper Backtank", "item.create.copper_ingot": "Lingot de cuivre", "item.create.copper_nugget": "Pépite de cuivre", @@ -479,9 +478,9 @@ "item.create.handheld_worldshaper": "Térraformeur portable", "item.create.honey_bucket": "Seau de miel", "item.create.honeyed_apple": "UNLOCALIZED: Honeyed Apple", - "item.create.incomplete_clockwork_component": "UNLOCALIZED: Incomplete Clockwork Component", "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.iron_sheet": "Plaque de Fer", "item.create.linked_controller": "UNLOCALIZED: Linked Controller", "item.create.minecart_contraption": "Engin de wagonnet", @@ -489,6 +488,7 @@ "item.create.polished_rose_quartz": "Quartz rose poli", "item.create.potato_cannon": "UNLOCALIZED: Potato Cannon", "item.create.powdered_obsidian": "Obsidienne concassée", + "item.create.precision_mechanism": "UNLOCALIZED: Precision Mechanism", "item.create.propeller": "Hélice", "item.create.red_sand_paper": "Papier de verre rouge", "item.create.refined_radiance": "Éclat raffiné", @@ -633,8 +633,8 @@ "advancement.create.flywheel.desc": "UNLOCALIZED: Successfully connect an 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.clockwork_component": "UNLOCALIZED: Complex Curiosities", - "advancement.create.clockwork_component.desc": "UNLOCALIZED: Assemble a Clockwork Component.", + "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!", @@ -1439,12 +1439,12 @@ "item.create.minecart_coupling.tooltip.behaviour1": "UNLOCALIZED: _Couples_ two Minecarts together, attempting to keep them at a _constant distance_ while moving.", "block.create.peculiar_bell.tooltip": "UNLOCALIZED: PECULIAR BELL", - "block.create.peculiar_bell.tooltip.summary": "UNLOCALIZED: A decorative brass bell. Placing it above a _Soul Fire_ or _Soul Campfire_ may cause a spooky transformation to occur...", + "block.create.peculiar_bell.tooltip.summary": "UNLOCALIZED: A decorative _Brass Bell_. Placing it right above open _Soul Fire_ may cause side-effects...", "block.create.haunted_bell.tooltip": "UNLOCALIZED: HAUNTED BELL", - "block.create.haunted_bell.tooltip.summary": "UNLOCALIZED: A spooky brass bell haunted by lost souls of the Nether.", + "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 _dark spots_ on which _Hostile Mobs_ could spawn.", + "block.create.haunted_bell.tooltip.behaviour1": "UNLOCALIZED: Highlights nearby _Lightless Spots_ on which _Hostile Mobs_ can spawn.", "_": "->------------------------] Ponder Content [------------------------<-", diff --git a/src/generated/resources/assets/create/lang/unfinished/it_it.json b/src/generated/resources/assets/create/lang/unfinished/it_it.json index 6a8e34a67..734ef9bcb 100644 --- a/src/generated/resources/assets/create/lang/unfinished/it_it.json +++ b/src/generated/resources/assets/create/lang/unfinished/it_it.json @@ -444,7 +444,6 @@ "item.create.chocolate_glazed_berries": "UNLOCALIZED: Chocolate Glazed Berries", "item.create.chromatic_compound": "Composto cromatico", "item.create.cinder_flour": "Cenere farinosa", - "item.create.clockwork_component": "UNLOCALIZED: Clockwork Component", "item.create.copper_backtank": "UNLOCALIZED: Copper Backtank", "item.create.copper_ingot": "Lingotto di rame", "item.create.copper_nugget": "Pepita di rame", @@ -479,9 +478,9 @@ "item.create.handheld_worldshaper": "Plasmatore del mondo portatile", "item.create.honey_bucket": "Secchio di miele", "item.create.honeyed_apple": "UNLOCALIZED: Honeyed Apple", - "item.create.incomplete_clockwork_component": "UNLOCALIZED: Incomplete Clockwork Component", "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.iron_sheet": "Lamiera di ferro", "item.create.linked_controller": "UNLOCALIZED: Linked Controller", "item.create.minecart_contraption": "Contrazione per carrello da miniera", @@ -489,6 +488,7 @@ "item.create.polished_rose_quartz": "Quarzo rosa levigato", "item.create.potato_cannon": "UNLOCALIZED: Potato Cannon", "item.create.powdered_obsidian": "Ossidiana in polvere", + "item.create.precision_mechanism": "UNLOCALIZED: Precision Mechanism", "item.create.propeller": "Elica", "item.create.red_sand_paper": "Carta vetrata rossa", "item.create.refined_radiance": "Radiance raffinata", @@ -633,8 +633,8 @@ "advancement.create.flywheel.desc": "Collega un motore ad un volano.", "advancement.create.overstress_flywheel": "Alti livelli di stress", "advancement.create.overstress_flywheel.desc": "Sovrastressa un motore fornace.", - "advancement.create.clockwork_component": "UNLOCALIZED: Complex Curiosities", - "advancement.create.clockwork_component.desc": "UNLOCALIZED: Assemble a Clockwork Component.", + "advancement.create.precision_mechanism": "UNLOCALIZED: Complex Curiosities", + "advancement.create.precision_mechanism.desc": "UNLOCALIZED: Assemble a Precision Mechanism.", "advancement.create.mechanical_arm": "Mani occupate!", "advancement.create.mechanical_arm.desc": "Costruisci un braccio meccanico, seleziona gli input e gli output, piazzalo e alimentalo; poi guardalo mentre fa il lavoro sporco al tuo posto.", "advancement.create.musical_arm": "DJ, metti su la musica!", @@ -1439,12 +1439,12 @@ "item.create.minecart_coupling.tooltip.behaviour1": "_Concatena_ due carrelli insieme, provando a tenerli uniti a una _distanza costante_ mentre si muovono.", "block.create.peculiar_bell.tooltip": "UNLOCALIZED: PECULIAR BELL", - "block.create.peculiar_bell.tooltip.summary": "UNLOCALIZED: A decorative brass bell. Placing it above a _Soul Fire_ or _Soul Campfire_ may cause a spooky transformation to occur...", + "block.create.peculiar_bell.tooltip.summary": "UNLOCALIZED: A decorative _Brass Bell_. Placing it right above open _Soul Fire_ may cause side-effects...", "block.create.haunted_bell.tooltip": "UNLOCALIZED: HAUNTED BELL", - "block.create.haunted_bell.tooltip.summary": "UNLOCALIZED: A spooky brass bell haunted by lost souls of the Nether.", + "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 _dark spots_ on which _Hostile Mobs_ could spawn.", + "block.create.haunted_bell.tooltip.behaviour1": "UNLOCALIZED: Highlights nearby _Lightless Spots_ on which _Hostile Mobs_ can spawn.", "_": "->------------------------] Ponder Content [------------------------<-", diff --git a/src/generated/resources/assets/create/lang/unfinished/ja_jp.json b/src/generated/resources/assets/create/lang/unfinished/ja_jp.json index cbb95de6b..a254e55ad 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ja_jp.json +++ b/src/generated/resources/assets/create/lang/unfinished/ja_jp.json @@ -444,7 +444,6 @@ "item.create.chocolate_glazed_berries": "チョコレートグレーズドベリー", "item.create.chromatic_compound": "色彩の化合物", "item.create.cinder_flour": "ネザーラックの粉", - "item.create.clockwork_component": "UNLOCALIZED: Clockwork Component", "item.create.copper_backtank": "UNLOCALIZED: Copper Backtank", "item.create.copper_ingot": "銅インゴット", "item.create.copper_nugget": "銅塊", @@ -479,9 +478,9 @@ "item.create.handheld_worldshaper": "携帯型ワールドシェーパー", "item.create.honey_bucket": "ハチミツ入りバケツ", "item.create.honeyed_apple": "リンゴのハチミツかけ", - "item.create.incomplete_clockwork_component": "UNLOCALIZED: Incomplete Clockwork Component", "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.iron_sheet": "鉄板", "item.create.linked_controller": "UNLOCALIZED: Linked Controller", "item.create.minecart_contraption": "からくり付きトロッコ", @@ -489,6 +488,7 @@ "item.create.polished_rose_quartz": "磨かれたローズクォーツ", "item.create.potato_cannon": "UNLOCALIZED: Potato Cannon", "item.create.powdered_obsidian": "黒曜石の粉", + "item.create.precision_mechanism": "UNLOCALIZED: Precision Mechanism", "item.create.propeller": "プロペラ", "item.create.red_sand_paper": "赤い紙やすり", "item.create.refined_radiance": "高貴な光輝", @@ -633,8 +633,8 @@ "advancement.create.flywheel.desc": "かまどエンジンを勢車に繋ぐ", "advancement.create.overstress_flywheel": "ハイレベル応力", "advancement.create.overstress_flywheel.desc": "かまどエンジンに超過応力をかける", - "advancement.create.clockwork_component": "UNLOCALIZED: Complex Curiosities", - "advancement.create.clockwork_component.desc": "UNLOCALIZED: Assemble a Clockwork Component.", + "advancement.create.precision_mechanism": "UNLOCALIZED: Complex Curiosities", + "advancement.create.precision_mechanism.desc": "UNLOCALIZED: Assemble a Precision Mechanism.", "advancement.create.mechanical_arm": "手が離せない!", "advancement.create.mechanical_arm.desc": "搬入元と搬出先を設定したメカニカルアームを設置して、稼働させ、あなたのために一生懸命労働している様子を見る", "advancement.create.musical_arm": "お気に入りの曲を流して!", @@ -1439,12 +1439,12 @@ "item.create.minecart_coupling.tooltip.behaviour1": "_2台_のトロッコを連結します。それらは移動中に_一定_の_距離_を保とうします。", "block.create.peculiar_bell.tooltip": "UNLOCALIZED: PECULIAR BELL", - "block.create.peculiar_bell.tooltip.summary": "UNLOCALIZED: A decorative brass bell. Placing it above a _Soul Fire_ or _Soul Campfire_ may cause a spooky transformation to occur...", + "block.create.peculiar_bell.tooltip.summary": "UNLOCALIZED: A decorative _Brass Bell_. Placing it right above open _Soul Fire_ may cause side-effects...", "block.create.haunted_bell.tooltip": "UNLOCALIZED: HAUNTED BELL", - "block.create.haunted_bell.tooltip.summary": "UNLOCALIZED: A spooky brass bell haunted by lost souls of the Nether.", + "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 _dark spots_ on which _Hostile Mobs_ could spawn.", + "block.create.haunted_bell.tooltip.behaviour1": "UNLOCALIZED: Highlights nearby _Lightless Spots_ on which _Hostile Mobs_ can spawn.", "_": "->------------------------] Ponder Content [------------------------<-", diff --git a/src/generated/resources/assets/create/lang/unfinished/ko_kr.json b/src/generated/resources/assets/create/lang/unfinished/ko_kr.json index f9725fa14..cadc40bd9 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ko_kr.json +++ b/src/generated/resources/assets/create/lang/unfinished/ko_kr.json @@ -444,7 +444,6 @@ "item.create.chocolate_glazed_berries": "UNLOCALIZED: Chocolate Glazed Berries", "item.create.chromatic_compound": "색채 혼합물", "item.create.cinder_flour": "잿가루", - "item.create.clockwork_component": "UNLOCALIZED: Clockwork Component", "item.create.copper_backtank": "UNLOCALIZED: Copper Backtank", "item.create.copper_ingot": "구리 주괴", "item.create.copper_nugget": "구리 조각", @@ -479,9 +478,9 @@ "item.create.handheld_worldshaper": "휴대용 세계편집기", "item.create.honey_bucket": "꿀 양동이", "item.create.honeyed_apple": "UNLOCALIZED: Honeyed Apple", - "item.create.incomplete_clockwork_component": "UNLOCALIZED: Incomplete Clockwork Component", "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.iron_sheet": "철 판", "item.create.linked_controller": "UNLOCALIZED: Linked Controller", "item.create.minecart_contraption": "광산 수레 장치", @@ -489,6 +488,7 @@ "item.create.polished_rose_quartz": "윤나는 장밋빛 석영", "item.create.potato_cannon": "UNLOCALIZED: Potato Cannon", "item.create.powdered_obsidian": "흑요석 가루", + "item.create.precision_mechanism": "UNLOCALIZED: Precision Mechanism", "item.create.propeller": "프로펠러", "item.create.red_sand_paper": "붉은 사포", "item.create.refined_radiance": "정제된 광채", @@ -633,8 +633,8 @@ "advancement.create.flywheel.desc": "화로엔진에 플라이휠을 연결하세요.", "advancement.create.overstress_flywheel": "정말 높은 피로", "advancement.create.overstress_flywheel.desc": "화로 엔진을 과부하하세요.", - "advancement.create.clockwork_component": "UNLOCALIZED: Complex Curiosities", - "advancement.create.clockwork_component.desc": "UNLOCALIZED: Assemble a Clockwork Component.", + "advancement.create.precision_mechanism": "UNLOCALIZED: Complex Curiosities", + "advancement.create.precision_mechanism.desc": "UNLOCALIZED: Assemble a Precision Mechanism.", "advancement.create.mechanical_arm": "할일이 많아!", "advancement.create.mechanical_arm.desc": "기계 팔을 조합하고, 입력부와 출력부를 정하고, 설치한 다음 돌리세요. 그리고 그것이 작동하는 것을 보세요.", "advancement.create.musical_arm": "볼륨 최대로!", @@ -1439,12 +1439,12 @@ "item.create.minecart_coupling.tooltip.behaviour1": "_두 수레를 묶어_ 이동할 때 고정된 _거리를 유지하게_ 합니다.", "block.create.peculiar_bell.tooltip": "UNLOCALIZED: PECULIAR BELL", - "block.create.peculiar_bell.tooltip.summary": "UNLOCALIZED: A decorative brass bell. Placing it above a _Soul Fire_ or _Soul Campfire_ may cause a spooky transformation to occur...", + "block.create.peculiar_bell.tooltip.summary": "UNLOCALIZED: A decorative _Brass Bell_. Placing it right above open _Soul Fire_ may cause side-effects...", "block.create.haunted_bell.tooltip": "UNLOCALIZED: HAUNTED BELL", - "block.create.haunted_bell.tooltip.summary": "UNLOCALIZED: A spooky brass bell haunted by lost souls of the Nether.", + "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 _dark spots_ on which _Hostile Mobs_ could spawn.", + "block.create.haunted_bell.tooltip.behaviour1": "UNLOCALIZED: Highlights nearby _Lightless Spots_ on which _Hostile Mobs_ can spawn.", "_": "->------------------------] Ponder Content [------------------------<-", diff --git a/src/generated/resources/assets/create/lang/unfinished/nl_nl.json b/src/generated/resources/assets/create/lang/unfinished/nl_nl.json index 86d19e33e..c667ce0d4 100644 --- a/src/generated/resources/assets/create/lang/unfinished/nl_nl.json +++ b/src/generated/resources/assets/create/lang/unfinished/nl_nl.json @@ -444,7 +444,6 @@ "item.create.chocolate_glazed_berries": "UNLOCALIZED: Chocolate Glazed Berries", "item.create.chromatic_compound": "UNLOCALIZED: Chromatic Compound", "item.create.cinder_flour": "UNLOCALIZED: Cinder Flour", - "item.create.clockwork_component": "UNLOCALIZED: Clockwork Component", "item.create.copper_backtank": "UNLOCALIZED: Copper Backtank", "item.create.copper_ingot": "Koperstaaf", "item.create.copper_nugget": "Koper klompje", @@ -479,9 +478,9 @@ "item.create.handheld_worldshaper": "UNLOCALIZED: Creative Worldshaper", "item.create.honey_bucket": "UNLOCALIZED: Honey Bucket", "item.create.honeyed_apple": "UNLOCALIZED: Honeyed Apple", - "item.create.incomplete_clockwork_component": "UNLOCALIZED: Incomplete Clockwork Component", "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.iron_sheet": "IJzeren Platen", "item.create.linked_controller": "UNLOCALIZED: Linked Controller", "item.create.minecart_contraption": "UNLOCALIZED: Minecart Contraption", @@ -489,6 +488,7 @@ "item.create.polished_rose_quartz": "UNLOCALIZED: Polished Rose Quartz", "item.create.potato_cannon": "UNLOCALIZED: Potato Cannon", "item.create.powdered_obsidian": "UNLOCALIZED: Powdered Obsidian", + "item.create.precision_mechanism": "UNLOCALIZED: Precision Mechanism", "item.create.propeller": "Propeller", "item.create.red_sand_paper": "UNLOCALIZED: Red Sand Paper", "item.create.refined_radiance": "UNLOCALIZED: Refined Radiance", @@ -633,8 +633,8 @@ "advancement.create.flywheel.desc": "UNLOCALIZED: Successfully connect an 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.clockwork_component": "UNLOCALIZED: Complex Curiosities", - "advancement.create.clockwork_component.desc": "UNLOCALIZED: Assemble a Clockwork Component.", + "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!", @@ -1439,12 +1439,12 @@ "item.create.minecart_coupling.tooltip.behaviour1": "UNLOCALIZED: _Couples_ two Minecarts together, attempting to keep them at a _constant distance_ while moving.", "block.create.peculiar_bell.tooltip": "UNLOCALIZED: PECULIAR BELL", - "block.create.peculiar_bell.tooltip.summary": "UNLOCALIZED: A decorative brass bell. Placing it above a _Soul Fire_ or _Soul Campfire_ may cause a spooky transformation to occur...", + "block.create.peculiar_bell.tooltip.summary": "UNLOCALIZED: A decorative _Brass Bell_. Placing it right above open _Soul Fire_ may cause side-effects...", "block.create.haunted_bell.tooltip": "UNLOCALIZED: HAUNTED BELL", - "block.create.haunted_bell.tooltip.summary": "UNLOCALIZED: A spooky brass bell haunted by lost souls of the Nether.", + "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 _dark spots_ on which _Hostile Mobs_ could spawn.", + "block.create.haunted_bell.tooltip.behaviour1": "UNLOCALIZED: Highlights nearby _Lightless Spots_ on which _Hostile Mobs_ can spawn.", "_": "->------------------------] Ponder Content [------------------------<-", diff --git a/src/generated/resources/assets/create/lang/unfinished/pl_pl.json b/src/generated/resources/assets/create/lang/unfinished/pl_pl.json index 5242eb574..879539ed5 100644 --- a/src/generated/resources/assets/create/lang/unfinished/pl_pl.json +++ b/src/generated/resources/assets/create/lang/unfinished/pl_pl.json @@ -444,7 +444,6 @@ "item.create.chocolate_glazed_berries": "Jagody w czekoladzie", "item.create.chromatic_compound": "Związek chromatyczny", "item.create.cinder_flour": "Rozżarzona mąka", - "item.create.clockwork_component": "UNLOCALIZED: Clockwork Component", "item.create.copper_backtank": "Miedziany zbiornik w plecaku", "item.create.copper_ingot": "Sztabka miedzi", "item.create.copper_nugget": "Bryłka miedzi", @@ -479,9 +478,9 @@ "item.create.handheld_worldshaper": "Ręczny kształter", "item.create.honey_bucket": "Wiadro miodu", "item.create.honeyed_apple": "Jabłko w miodzie", - "item.create.incomplete_clockwork_component": "UNLOCALIZED: Incomplete Clockwork Component", "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.iron_sheet": "Arkusz żelaza", "item.create.linked_controller": "UNLOCALIZED: Linked Controller", "item.create.minecart_contraption": "Maszyna w wagoniku", @@ -489,6 +488,7 @@ "item.create.polished_rose_quartz": "Wypolerowany kwarc różowy", "item.create.potato_cannon": "UNLOCALIZED: Potato Cannon", "item.create.powdered_obsidian": "Sproszkowany obsydian", + "item.create.precision_mechanism": "UNLOCALIZED: Precision Mechanism", "item.create.propeller": "Śmigło", "item.create.red_sand_paper": "Czerwony papier ścierny", "item.create.refined_radiance": "Świetlisty materiał", @@ -633,8 +633,8 @@ "advancement.create.flywheel.desc": "Skutecznie podłącz silnik do koła zamachowego.", "advancement.create.overstress_flywheel": "Wysoki poziom obciążenia", "advancement.create.overstress_flywheel.desc": "Przeładuj silnik spalinowy.", - "advancement.create.clockwork_component": "UNLOCALIZED: Complex Curiosities", - "advancement.create.clockwork_component.desc": "UNLOCALIZED: Assemble a Clockwork Component.", + "advancement.create.precision_mechanism": "UNLOCALIZED: Complex Curiosities", + "advancement.create.precision_mechanism.desc": "UNLOCALIZED: Assemble a Precision Mechanism.", "advancement.create.mechanical_arm": "Ręce pełne roboty", "advancement.create.mechanical_arm.desc": "Wytwórz ramię mechaniczne, wybierz miejsca wejścia i wyjścia, postaw je i wpraw w ruch. Patrz jak robi wszystko za Ciebie.", "advancement.create.musical_arm": "Zagraj coś dla mnie!", @@ -1439,12 +1439,12 @@ "item.create.minecart_coupling.tooltip.behaviour1": "_Łączy_ dwa wagoniki, próbując utrzymać je w stałej odległości od siebie.", "block.create.peculiar_bell.tooltip": "UNLOCALIZED: PECULIAR BELL", - "block.create.peculiar_bell.tooltip.summary": "UNLOCALIZED: A decorative brass bell. Placing it above a _Soul Fire_ or _Soul Campfire_ may cause a spooky transformation to occur...", + "block.create.peculiar_bell.tooltip.summary": "UNLOCALIZED: A decorative _Brass Bell_. Placing it right above open _Soul Fire_ may cause side-effects...", "block.create.haunted_bell.tooltip": "UNLOCALIZED: HAUNTED BELL", - "block.create.haunted_bell.tooltip.summary": "UNLOCALIZED: A spooky brass bell haunted by lost souls of the Nether.", + "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 _dark spots_ on which _Hostile Mobs_ could spawn.", + "block.create.haunted_bell.tooltip.behaviour1": "UNLOCALIZED: Highlights nearby _Lightless Spots_ on which _Hostile Mobs_ can spawn.", "_": "->------------------------] Ponder Content [------------------------<-", 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 217186b88..fe8c28dac 100644 --- a/src/generated/resources/assets/create/lang/unfinished/pt_br.json +++ b/src/generated/resources/assets/create/lang/unfinished/pt_br.json @@ -444,7 +444,6 @@ "item.create.chocolate_glazed_berries": "UNLOCALIZED: Chocolate Glazed Berries", "item.create.chromatic_compound": "UNLOCALIZED: Chromatic Compound", "item.create.cinder_flour": "UNLOCALIZED: Cinder Flour", - "item.create.clockwork_component": "UNLOCALIZED: Clockwork Component", "item.create.copper_backtank": "UNLOCALIZED: Copper Backtank", "item.create.copper_ingot": "UNLOCALIZED: Copper Ingot", "item.create.copper_nugget": "UNLOCALIZED: Copper Nugget", @@ -479,9 +478,9 @@ "item.create.handheld_worldshaper": "UNLOCALIZED: Creative Worldshaper", "item.create.honey_bucket": "UNLOCALIZED: Honey Bucket", "item.create.honeyed_apple": "UNLOCALIZED: Honeyed Apple", - "item.create.incomplete_clockwork_component": "UNLOCALIZED: Incomplete Clockwork Component", "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.iron_sheet": "Placas de Ferro", "item.create.linked_controller": "UNLOCALIZED: Linked Controller", "item.create.minecart_contraption": "UNLOCALIZED: Minecart Contraption", @@ -489,6 +488,7 @@ "item.create.polished_rose_quartz": "UNLOCALIZED: Polished Rose Quartz", "item.create.potato_cannon": "UNLOCALIZED: Potato Cannon", "item.create.powdered_obsidian": "UNLOCALIZED: Powdered Obsidian", + "item.create.precision_mechanism": "UNLOCALIZED: Precision Mechanism", "item.create.propeller": "Hélice", "item.create.red_sand_paper": "UNLOCALIZED: Red Sand Paper", "item.create.refined_radiance": "UNLOCALIZED: Refined Radiance", @@ -633,8 +633,8 @@ "advancement.create.flywheel.desc": "UNLOCALIZED: Successfully connect an 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.clockwork_component": "UNLOCALIZED: Complex Curiosities", - "advancement.create.clockwork_component.desc": "UNLOCALIZED: Assemble a Clockwork Component.", + "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!", @@ -1439,12 +1439,12 @@ "item.create.minecart_coupling.tooltip.behaviour1": "UNLOCALIZED: _Couples_ two Minecarts together, attempting to keep them at a _constant distance_ while moving.", "block.create.peculiar_bell.tooltip": "UNLOCALIZED: PECULIAR BELL", - "block.create.peculiar_bell.tooltip.summary": "UNLOCALIZED: A decorative brass bell. Placing it above a _Soul Fire_ or _Soul Campfire_ may cause a spooky transformation to occur...", + "block.create.peculiar_bell.tooltip.summary": "UNLOCALIZED: A decorative _Brass Bell_. Placing it right above open _Soul Fire_ may cause side-effects...", "block.create.haunted_bell.tooltip": "UNLOCALIZED: HAUNTED BELL", - "block.create.haunted_bell.tooltip.summary": "UNLOCALIZED: A spooky brass bell haunted by lost souls of the Nether.", + "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 _dark spots_ on which _Hostile Mobs_ could spawn.", + "block.create.haunted_bell.tooltip.behaviour1": "UNLOCALIZED: Highlights nearby _Lightless Spots_ on which _Hostile Mobs_ can spawn.", "_": "->------------------------] Ponder Content [------------------------<-", diff --git a/src/generated/resources/assets/create/lang/unfinished/ru_ru.json b/src/generated/resources/assets/create/lang/unfinished/ru_ru.json index 650d9ff49..7c2af855d 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ru_ru.json +++ b/src/generated/resources/assets/create/lang/unfinished/ru_ru.json @@ -444,7 +444,6 @@ "item.create.chocolate_glazed_berries": "Ягоды в шоколадной глазури", "item.create.chromatic_compound": "Хроматический компаунд", "item.create.cinder_flour": "Незераковая пыль", - "item.create.clockwork_component": "UNLOCALIZED: Clockwork Component", "item.create.copper_backtank": "UNLOCALIZED: Copper Backtank", "item.create.copper_ingot": "Медный слиток", "item.create.copper_nugget": "Кусочек меди", @@ -479,9 +478,9 @@ "item.create.handheld_worldshaper": "Ручной редактор мира", "item.create.honey_bucket": "Ведро мёда", "item.create.honeyed_apple": "Яблоко в меду", - "item.create.incomplete_clockwork_component": "UNLOCALIZED: Incomplete Clockwork Component", "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.iron_sheet": "Железный лист", "item.create.linked_controller": "UNLOCALIZED: Linked Controller", "item.create.minecart_contraption": "Вагонеточная штуковина", @@ -489,6 +488,7 @@ "item.create.polished_rose_quartz": "Полированный розовый кварц", "item.create.potato_cannon": "UNLOCALIZED: Potato Cannon", "item.create.powdered_obsidian": "Порошкообразный обсидиан", + "item.create.precision_mechanism": "UNLOCALIZED: Precision Mechanism", "item.create.propeller": "Пропеллер", "item.create.red_sand_paper": "Красная наждачная бумага", "item.create.refined_radiance": "Изысканное сияние", @@ -633,8 +633,8 @@ "advancement.create.flywheel.desc": "Успешно соедините двигатель с маховиком.", "advancement.create.overstress_flywheel": "Перенапряжение", "advancement.create.overstress_flywheel.desc": "Подайте слишком большую нагрузку на печной двигатель.", - "advancement.create.clockwork_component": "UNLOCALIZED: Complex Curiosities", - "advancement.create.clockwork_component.desc": "UNLOCALIZED: Assemble a Clockwork Component.", + "advancement.create.precision_mechanism": "UNLOCALIZED: Complex Curiosities", + "advancement.create.precision_mechanism.desc": "UNLOCALIZED: Assemble a Precision Mechanism.", "advancement.create.mechanical_arm": "Золотые руки!", "advancement.create.mechanical_arm.desc": "Создайте Механическую руку, выбирете входы и выходы, установите в мире и запитайте. Затем смотрите как она делает за вас всю работу.", "advancement.create.musical_arm": "Сбацай что-нибудь!", @@ -1439,12 +1439,12 @@ "item.create.minecart_coupling.tooltip.behaviour1": "_Соединяет_ две вагонетки вместе, пытаясь держать их на _определенной дистанции_ при движении.", "block.create.peculiar_bell.tooltip": "UNLOCALIZED: PECULIAR BELL", - "block.create.peculiar_bell.tooltip.summary": "UNLOCALIZED: A decorative brass bell. Placing it above a _Soul Fire_ or _Soul Campfire_ may cause a spooky transformation to occur...", + "block.create.peculiar_bell.tooltip.summary": "UNLOCALIZED: A decorative _Brass Bell_. Placing it right above open _Soul Fire_ may cause side-effects...", "block.create.haunted_bell.tooltip": "UNLOCALIZED: HAUNTED BELL", - "block.create.haunted_bell.tooltip.summary": "UNLOCALIZED: A spooky brass bell haunted by lost souls of the Nether.", + "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 _dark spots_ on which _Hostile Mobs_ could spawn.", + "block.create.haunted_bell.tooltip.behaviour1": "UNLOCALIZED: Highlights nearby _Lightless Spots_ on which _Hostile Mobs_ can spawn.", "_": "->------------------------] Ponder Content [------------------------<-", 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 927b4baf2..5339b452f 100644 --- a/src/generated/resources/assets/create/lang/unfinished/zh_cn.json +++ b/src/generated/resources/assets/create/lang/unfinished/zh_cn.json @@ -444,7 +444,6 @@ "item.create.chocolate_glazed_berries": "巧克力包层浆果", "item.create.chromatic_compound": "异彩化合物", "item.create.cinder_flour": "下界面粉", - "item.create.clockwork_component": "UNLOCALIZED: Clockwork Component", "item.create.copper_backtank": "UNLOCALIZED: Copper Backtank", "item.create.copper_ingot": "铜锭", "item.create.copper_nugget": "铜粒", @@ -479,9 +478,9 @@ "item.create.handheld_worldshaper": "手持式环境塑形器", "item.create.honey_bucket": "蜂蜜桶", "item.create.honeyed_apple": "蜜渍苹果", - "item.create.incomplete_clockwork_component": "UNLOCALIZED: Incomplete Clockwork Component", "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.iron_sheet": "铁板", "item.create.linked_controller": "UNLOCALIZED: Linked Controller", "item.create.minecart_contraption": "装配过的矿车", @@ -489,6 +488,7 @@ "item.create.polished_rose_quartz": "磨制玫瑰石英", "item.create.potato_cannon": "UNLOCALIZED: Potato Cannon", "item.create.powdered_obsidian": "黑曜石粉末", + "item.create.precision_mechanism": "UNLOCALIZED: Precision Mechanism", "item.create.propeller": "扇叶", "item.create.red_sand_paper": "红沙砂纸", "item.create.refined_radiance": "光辉石", @@ -633,8 +633,8 @@ "advancement.create.flywheel.desc": "将引擎成功连接到飞轮。", "advancement.create.overstress_flywheel": "高压", "advancement.create.overstress_flywheel.desc": "过载熔炉引擎。", - "advancement.create.clockwork_component": "UNLOCALIZED: Complex Curiosities", - "advancement.create.clockwork_component.desc": "UNLOCALIZED: Assemble a Clockwork Component.", + "advancement.create.precision_mechanism": "UNLOCALIZED: Complex Curiosities", + "advancement.create.precision_mechanism.desc": "UNLOCALIZED: Assemble a Precision Mechanism.", "advancement.create.mechanical_arm": "忙碌的手!", "advancement.create.mechanical_arm.desc": "制作机械臂,选择输入和输出,放置并给予它动力,然后看着它为你完成所有工作。", "advancement.create.musical_arm": "没人能在我的 BGM 里打败我!", @@ -1439,12 +1439,12 @@ "item.create.minecart_coupling.tooltip.behaviour1": "将两个矿车耦合在一起,在移动时将它们保持_恒定的距离_。", "block.create.peculiar_bell.tooltip": "UNLOCALIZED: PECULIAR BELL", - "block.create.peculiar_bell.tooltip.summary": "UNLOCALIZED: A decorative brass bell. Placing it above a _Soul Fire_ or _Soul Campfire_ may cause a spooky transformation to occur...", + "block.create.peculiar_bell.tooltip.summary": "UNLOCALIZED: A decorative _Brass Bell_. Placing it right above open _Soul Fire_ may cause side-effects...", "block.create.haunted_bell.tooltip": "UNLOCALIZED: HAUNTED BELL", - "block.create.haunted_bell.tooltip.summary": "UNLOCALIZED: A spooky brass bell haunted by lost souls of the Nether.", + "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 _dark spots_ on which _Hostile Mobs_ could spawn.", + "block.create.haunted_bell.tooltip.behaviour1": "UNLOCALIZED: Highlights nearby _Lightless Spots_ on which _Hostile Mobs_ can spawn.", "_": "->------------------------] Ponder Content [------------------------<-", diff --git a/src/generated/resources/assets/create/lang/unfinished/zh_tw.json b/src/generated/resources/assets/create/lang/unfinished/zh_tw.json index f1bca2b7f..659bdb216 100644 --- a/src/generated/resources/assets/create/lang/unfinished/zh_tw.json +++ b/src/generated/resources/assets/create/lang/unfinished/zh_tw.json @@ -444,7 +444,6 @@ "item.create.chocolate_glazed_berries": "巧克力甜莓", "item.create.chromatic_compound": "異彩化合物", "item.create.cinder_flour": "地獄麵粉", - "item.create.clockwork_component": "UNLOCALIZED: Clockwork Component", "item.create.copper_backtank": "UNLOCALIZED: Copper Backtank", "item.create.copper_ingot": "銅錠", "item.create.copper_nugget": "銅粒", @@ -479,9 +478,9 @@ "item.create.handheld_worldshaper": "地形雕塑器", "item.create.honey_bucket": "蜂蜜桶", "item.create.honeyed_apple": "蜂蜜蘋果", - "item.create.incomplete_clockwork_component": "UNLOCALIZED: Incomplete Clockwork Component", "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.iron_sheet": "鐵板", "item.create.linked_controller": "UNLOCALIZED: Linked Controller", "item.create.minecart_contraption": "裝修過的礦車", @@ -489,6 +488,7 @@ "item.create.polished_rose_quartz": "磨製玫瑰石英", "item.create.potato_cannon": "UNLOCALIZED: Potato Cannon", "item.create.powdered_obsidian": "黑曜石粉末", + "item.create.precision_mechanism": "UNLOCALIZED: Precision Mechanism", "item.create.propeller": "扇葉", "item.create.red_sand_paper": "紅砂紙", "item.create.refined_radiance": "光輝石", @@ -633,8 +633,8 @@ "advancement.create.flywheel.desc": "將引擎成功連接到飛輪。", "advancement.create.overstress_flywheel": "壓力過大", "advancement.create.overstress_flywheel.desc": "超載熔爐引擎。", - "advancement.create.clockwork_component": "UNLOCALIZED: Complex Curiosities", - "advancement.create.clockwork_component.desc": "UNLOCALIZED: Assemble a Clockwork Component.", + "advancement.create.precision_mechanism": "UNLOCALIZED: Complex Curiosities", + "advancement.create.precision_mechanism.desc": "UNLOCALIZED: Assemble a Precision Mechanism.", "advancement.create.mechanical_arm": "忙碌的手!", "advancement.create.mechanical_arm.desc": "製作機械手臂,選擇輸入和輸出,放置並給它動能; 然後看著它完成所有你交代的工作。", "advancement.create.musical_arm": "沒人能在我的BGM裡打敗我!", @@ -1439,12 +1439,12 @@ "item.create.minecart_coupling.tooltip.behaviour1": "將兩個礦車耦合在一起,在移動時將它們保持_恒定的距離_。", "block.create.peculiar_bell.tooltip": "UNLOCALIZED: PECULIAR BELL", - "block.create.peculiar_bell.tooltip.summary": "UNLOCALIZED: A decorative brass bell. Placing it above a _Soul Fire_ or _Soul Campfire_ may cause a spooky transformation to occur...", + "block.create.peculiar_bell.tooltip.summary": "UNLOCALIZED: A decorative _Brass Bell_. Placing it right above open _Soul Fire_ may cause side-effects...", "block.create.haunted_bell.tooltip": "UNLOCALIZED: HAUNTED BELL", - "block.create.haunted_bell.tooltip.summary": "UNLOCALIZED: A spooky brass bell haunted by lost souls of the Nether.", + "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 _dark spots_ on which _Hostile Mobs_ could spawn.", + "block.create.haunted_bell.tooltip.behaviour1": "UNLOCALIZED: Highlights nearby _Lightless Spots_ on which _Hostile Mobs_ can spawn.", "_": "->------------------------] Ponder Content [------------------------<-", diff --git a/src/generated/resources/assets/create/models/block/haunted_bell_ceiling.json b/src/generated/resources/assets/create/models/block/haunted_bell_ceiling.json new file mode 100644 index 000000000..8953c2bde --- /dev/null +++ b/src/generated/resources/assets/create/models/block/haunted_bell_ceiling.json @@ -0,0 +1,3 @@ +{ + "parent": "create:block/bell_base/block_ceiling" +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/haunted_bell_double_wall.json b/src/generated/resources/assets/create/models/block/haunted_bell_double_wall.json new file mode 100644 index 000000000..b3a17b341 --- /dev/null +++ b/src/generated/resources/assets/create/models/block/haunted_bell_double_wall.json @@ -0,0 +1,3 @@ +{ + "parent": "create:block/bell_base/block_double_wall" +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/haunted_bell_floor.json b/src/generated/resources/assets/create/models/block/haunted_bell_floor.json new file mode 100644 index 000000000..987b55e26 --- /dev/null +++ b/src/generated/resources/assets/create/models/block/haunted_bell_floor.json @@ -0,0 +1,3 @@ +{ + "parent": "create:block/bell_base/block_floor" +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/haunted_bell_single_wall.json b/src/generated/resources/assets/create/models/block/haunted_bell_single_wall.json new file mode 100644 index 000000000..a6bacf266 --- /dev/null +++ b/src/generated/resources/assets/create/models/block/haunted_bell_single_wall.json @@ -0,0 +1,3 @@ +{ + "parent": "create:block/bell_base/block_single_wall" +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/peculiar_bell_ceiling.json b/src/generated/resources/assets/create/models/block/peculiar_bell_ceiling.json new file mode 100644 index 000000000..8953c2bde --- /dev/null +++ b/src/generated/resources/assets/create/models/block/peculiar_bell_ceiling.json @@ -0,0 +1,3 @@ +{ + "parent": "create:block/bell_base/block_ceiling" +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/peculiar_bell_double_wall.json b/src/generated/resources/assets/create/models/block/peculiar_bell_double_wall.json new file mode 100644 index 000000000..b3a17b341 --- /dev/null +++ b/src/generated/resources/assets/create/models/block/peculiar_bell_double_wall.json @@ -0,0 +1,3 @@ +{ + "parent": "create:block/bell_base/block_double_wall" +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/peculiar_bell_floor.json b/src/generated/resources/assets/create/models/block/peculiar_bell_floor.json new file mode 100644 index 000000000..987b55e26 --- /dev/null +++ b/src/generated/resources/assets/create/models/block/peculiar_bell_floor.json @@ -0,0 +1,3 @@ +{ + "parent": "create:block/bell_base/block_floor" +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/peculiar_bell_single_wall.json b/src/generated/resources/assets/create/models/block/peculiar_bell_single_wall.json new file mode 100644 index 000000000..a6bacf266 --- /dev/null +++ b/src/generated/resources/assets/create/models/block/peculiar_bell_single_wall.json @@ -0,0 +1,3 @@ +{ + "parent": "create:block/bell_base/block_single_wall" +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/item/haunted_bell.json b/src/generated/resources/assets/create/models/item/haunted_bell.json index eba6aa5d0..c0f602bc8 100644 --- a/src/generated/resources/assets/create/models/item/haunted_bell.json +++ b/src/generated/resources/assets/create/models/item/haunted_bell.json @@ -1,3 +1,3 @@ { - "parent": "create:block/haunted_bell/item" + "parent": "create:block/haunted_bell" } \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/item/incomplete_clockwork_component.json b/src/generated/resources/assets/create/models/item/incomplete_precision_mechanism.json similarity index 51% rename from src/generated/resources/assets/create/models/item/incomplete_clockwork_component.json rename to src/generated/resources/assets/create/models/item/incomplete_precision_mechanism.json index 9dad96684..a8d39ded4 100644 --- a/src/generated/resources/assets/create/models/item/incomplete_clockwork_component.json +++ b/src/generated/resources/assets/create/models/item/incomplete_precision_mechanism.json @@ -1,6 +1,6 @@ { "parent": "minecraft:item/generated", "textures": { - "layer0": "create:item/incomplete_clockwork_component" + "layer0": "create:item/incomplete_precision_mechanism" } } \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/item/peculiar_bell.json b/src/generated/resources/assets/create/models/item/peculiar_bell.json index 686bce88e..4cc9e1942 100644 --- a/src/generated/resources/assets/create/models/item/peculiar_bell.json +++ b/src/generated/resources/assets/create/models/item/peculiar_bell.json @@ -1,3 +1,3 @@ { - "parent": "create:block/peculiar_bell/item" + "parent": "create:block/peculiar_bell" } \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/item/clockwork_component.json b/src/generated/resources/assets/create/models/item/precision_mechanism.json similarity index 56% rename from src/generated/resources/assets/create/models/item/clockwork_component.json rename to src/generated/resources/assets/create/models/item/precision_mechanism.json index 6f6237a26..18694533b 100644 --- a/src/generated/resources/assets/create/models/item/clockwork_component.json +++ b/src/generated/resources/assets/create/models/item/precision_mechanism.json @@ -1,6 +1,6 @@ { "parent": "minecraft:item/generated", "textures": { - "layer0": "create:item/clockwork_component" + "layer0": "create:item/precision_mechanism" } } \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/clockwork_component_eob.json b/src/generated/resources/data/create/advancements/clockwork_component_eob.json index fb730aff8..667bb88c4 100644 --- a/src/generated/resources/data/create/advancements/clockwork_component_eob.json +++ b/src/generated/resources/data/create/advancements/clockwork_component_eob.json @@ -1,5 +1,5 @@ { - "parent": "create:clockwork_component", + "parent": "create:precision_mechanism", "display": { "icon": { "item": "minecraft:oak_sapling" @@ -21,7 +21,7 @@ "conditions": { "items": [ { - "item": "create:clockwork_component" + "item": "create:precision_mechanism" } ] } diff --git a/src/generated/resources/data/create/advancements/extendo_grip.json b/src/generated/resources/data/create/advancements/extendo_grip.json index 94a9af017..bb4882b2b 100644 --- a/src/generated/resources/data/create/advancements/extendo_grip.json +++ b/src/generated/resources/data/create/advancements/extendo_grip.json @@ -1,5 +1,5 @@ { - "parent": "create:clockwork_component", + "parent": "create:precision_mechanism", "display": { "icon": { "item": "create:extendo_grip", diff --git a/src/generated/resources/data/create/advancements/potato_cannon.json b/src/generated/resources/data/create/advancements/potato_cannon.json index eccdc4cfb..9e1da2e5e 100644 --- a/src/generated/resources/data/create/advancements/potato_cannon.json +++ b/src/generated/resources/data/create/advancements/potato_cannon.json @@ -1,5 +1,5 @@ { - "parent": "create:clockwork_component", + "parent": "create:precision_mechanism", "display": { "icon": { "item": "create:potato_cannon", diff --git a/src/generated/resources/data/create/advancements/clockwork_component.json b/src/generated/resources/data/create/advancements/precision_mechanism.json similarity index 66% rename from src/generated/resources/data/create/advancements/clockwork_component.json rename to src/generated/resources/data/create/advancements/precision_mechanism.json index 0acda4115..a39f61f11 100644 --- a/src/generated/resources/data/create/advancements/clockwork_component.json +++ b/src/generated/resources/data/create/advancements/precision_mechanism.json @@ -2,13 +2,13 @@ "parent": "create:deployer", "display": { "icon": { - "item": "create:clockwork_component" + "item": "create:precision_mechanism" }, "title": { - "translate": "advancement.create.clockwork_component" + "translate": "advancement.create.precision_mechanism" }, "description": { - "translate": "advancement.create.clockwork_component.desc" + "translate": "advancement.create.precision_mechanism.desc" }, "frame": "task", "show_toast": true, @@ -21,7 +21,7 @@ "conditions": { "items": [ { - "item": "create:clockwork_component" + "item": "create:precision_mechanism" } ] } diff --git a/src/generated/resources/data/create/advancements/speed_controller.json b/src/generated/resources/data/create/advancements/speed_controller.json index b3cf5f1f0..38632e7d1 100644 --- a/src/generated/resources/data/create/advancements/speed_controller.json +++ b/src/generated/resources/data/create/advancements/speed_controller.json @@ -1,5 +1,5 @@ { - "parent": "create:clockwork_component", + "parent": "create:precision_mechanism", "display": { "icon": { "item": "create:rotation_speed_controller" diff --git a/src/generated/resources/data/create/recipes/crafting/kinetics/mechanical_arm.json b/src/generated/resources/data/create/recipes/crafting/kinetics/mechanical_arm.json index 2b924aa87..5a64f5c23 100644 --- a/src/generated/resources/data/create/recipes/crafting/kinetics/mechanical_arm.json +++ b/src/generated/resources/data/create/recipes/crafting/kinetics/mechanical_arm.json @@ -10,7 +10,7 @@ "tag": "forge:plates/brass" }, "I": { - "item": "create:clockwork_component" + "item": "create:precision_mechanism" }, "A": { "item": "create:andesite_alloy" diff --git a/src/generated/resources/data/create/recipes/crafting/kinetics/rotation_speed_controller.json b/src/generated/resources/data/create/recipes/crafting/kinetics/rotation_speed_controller.json index ad8bfbdff..76a4949f5 100644 --- a/src/generated/resources/data/create/recipes/crafting/kinetics/rotation_speed_controller.json +++ b/src/generated/resources/data/create/recipes/crafting/kinetics/rotation_speed_controller.json @@ -6,7 +6,7 @@ ], "key": { "B": { - "item": "create:clockwork_component" + "item": "create:precision_mechanism" }, "C": { "item": "create:brass_casing" diff --git a/src/generated/resources/data/create/recipes/mechanical_crafting/extendo_grip.json b/src/generated/resources/data/create/recipes/mechanical_crafting/extendo_grip.json index 3973118fd..c7fc84b1c 100644 --- a/src/generated/resources/data/create/recipes/mechanical_crafting/extendo_grip.json +++ b/src/generated/resources/data/create/recipes/mechanical_crafting/extendo_grip.json @@ -12,7 +12,7 @@ "tag": "forge:ingots/brass" }, "R": { - "item": "create:clockwork_component" + "item": "create:precision_mechanism" }, "H": { "item": "create:brass_hand" diff --git a/src/generated/resources/data/create/recipes/mechanical_crafting/potato_cannon.json b/src/generated/resources/data/create/recipes/mechanical_crafting/potato_cannon.json index 0a5b41b44..859513ed2 100644 --- a/src/generated/resources/data/create/recipes/mechanical_crafting/potato_cannon.json +++ b/src/generated/resources/data/create/recipes/mechanical_crafting/potato_cannon.json @@ -12,7 +12,7 @@ "item": "create:andesite_alloy" }, "R": { - "item": "create:clockwork_component" + "item": "create:precision_mechanism" }, "S": { "tag": "forge:ingots/copper" diff --git a/src/generated/resources/data/create/recipes/sequenced_assembly/cogwheel.json b/src/generated/resources/data/create/recipes/sequenced_assembly/cogwheel.json index 52d588d43..84ae9aa9e 100644 --- a/src/generated/resources/data/create/recipes/sequenced_assembly/cogwheel.json +++ b/src/generated/resources/data/create/recipes/sequenced_assembly/cogwheel.json @@ -1,7 +1,7 @@ { "type": "create:sequenced_assembly", "ingredient": { - "item": "create:shaft" + "item": "create:andesite_alloy" }, "transitionalItem": { "item": "create:incomplete_cogwheel" @@ -14,7 +14,7 @@ "item": "create:incomplete_cogwheel" }, { - "tag": "minecraft:planks" + "tag": "minecraft:wooden_buttons" } ], "results": [ @@ -35,28 +35,30 @@ "item": "create:incomplete_cogwheel" } ], - "processingTime": 20 - }, - { - "type": "create:cutting", - "ingredients": [ - { - "item": "create:incomplete_cogwheel" - } - ], - "results": [ - { - "item": "create:incomplete_cogwheel" - } - ], - "processingTime": 40 + "processingTime": 50 } ], "results": [ { "item": "create:cogwheel", "count": 12, - "chance": 12.0 + "chance": 22.0 + }, + { + "item": "create:andesite_alloy", + "chance": 2.0 + }, + { + "item": "minecraft:andesite" + }, + { + "item": "create:large_cogwheel" + }, + { + "item": "minecraft:stick" + }, + { + "item": "minecraft:iron_nugget" } ], "loops": 4 diff --git a/src/generated/resources/data/create/recipes/sequenced_assembly/large_cogwheel.json b/src/generated/resources/data/create/recipes/sequenced_assembly/large_cogwheel.json index 005b9169c..6fa8f6ff2 100644 --- a/src/generated/resources/data/create/recipes/sequenced_assembly/large_cogwheel.json +++ b/src/generated/resources/data/create/recipes/sequenced_assembly/large_cogwheel.json @@ -14,7 +14,23 @@ "item": "create:incomplete_large_cogwheel" }, { - "tag": "minecraft:wooden_slabs" + "tag": "minecraft:planks" + } + ], + "results": [ + { + "item": "create:incomplete_large_cogwheel" + } + ] + }, + { + "type": "create:deploying", + "ingredients": [ + { + "item": "create:incomplete_large_cogwheel" + }, + { + "tag": "minecraft:wooden_buttons" } ], "results": [ @@ -41,9 +57,25 @@ "results": [ { "item": "create:large_cogwheel", - "count": 3, - "chance": 12.0 + "count": 6, + "chance": 22.0 + }, + { + "item": "create:andesite_alloy", + "chance": 2.0 + }, + { + "item": "minecraft:andesite" + }, + { + "item": "create:cogwheel" + }, + { + "item": "minecraft:stick" + }, + { + "item": "minecraft:iron_nugget" } ], - "loops": 8 + "loops": 3 } \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/sequenced_assembly/clockwork_component.json b/src/generated/resources/data/create/recipes/sequenced_assembly/precision_mechanism.json similarity index 53% rename from src/generated/resources/data/create/recipes/sequenced_assembly/clockwork_component.json rename to src/generated/resources/data/create/recipes/sequenced_assembly/precision_mechanism.json index a48decec0..1a795ca46 100644 --- a/src/generated/resources/data/create/recipes/sequenced_assembly/clockwork_component.json +++ b/src/generated/resources/data/create/recipes/sequenced_assembly/precision_mechanism.json @@ -4,14 +4,14 @@ "tag": "forge:plates/gold" }, "transitionalItem": { - "item": "create:incomplete_clockwork_component" + "item": "create:incomplete_precision_mechanism" }, "sequence": [ { "type": "create:deploying", "ingredients": [ { - "item": "create:incomplete_clockwork_component" + "item": "create:incomplete_precision_mechanism" }, { "item": "create:cogwheel" @@ -19,7 +19,7 @@ ], "results": [ { - "item": "create:incomplete_clockwork_component" + "item": "create:incomplete_precision_mechanism" } ] }, @@ -27,7 +27,7 @@ "type": "create:deploying", "ingredients": [ { - "item": "create:incomplete_clockwork_component" + "item": "create:incomplete_precision_mechanism" }, { "item": "create:large_cogwheel" @@ -35,7 +35,7 @@ ], "results": [ { - "item": "create:incomplete_clockwork_component" + "item": "create:incomplete_precision_mechanism" } ] }, @@ -43,7 +43,7 @@ "type": "create:deploying", "ingredients": [ { - "item": "create:incomplete_clockwork_component" + "item": "create:incomplete_precision_mechanism" }, { "tag": "forge:nuggets/iron" @@ -51,26 +51,45 @@ ], "results": [ { - "item": "create:incomplete_clockwork_component" + "item": "create:incomplete_precision_mechanism" } ] } ], "results": [ { - "item": "create:clockwork_component", - "chance": 12.0 + "item": "create:precision_mechanism", + "chance": 60.0 }, { "item": "create:golden_sheet", - "chance": 2.0 + "chance": 8.0 }, { "item": "create:andesite_alloy", + "chance": 8.0 + }, + { + "item": "create:cogwheel", + "chance": 5.0 + }, + { + "item": "create:shaft", "chance": 2.0 }, { - "item": "create:cogwheel" + "item": "create:crushed_gold_ore", + "chance": 2.0 + }, + { + "item": "minecraft:gold_nugget", + "chance": 2.0 + }, + { + "item": "minecraft:iron_ingot" + }, + { + "item": "minecraft:clock" } ], "loops": 5 diff --git a/src/main/java/com/simibubi/create/AllBlockPartials.java b/src/main/java/com/simibubi/create/AllBlockPartials.java index 49fcaceca..0eff8e238 100644 --- a/src/main/java/com/simibubi/create/AllBlockPartials.java +++ b/src/main/java/com/simibubi/create/AllBlockPartials.java @@ -93,8 +93,8 @@ public class AllBlockPartials { SPOUT_TOP = get("spout/top"), SPOUT_MIDDLE = get("spout/middle"), SPOUT_BOTTOM = get("spout/bottom"), - PECULIAR_BELL = get("peculiar_bell/bell"), - HAUNTED_BELL = get("haunted_bell/bell"), + PECULIAR_BELL = get("peculiar_bell"), + HAUNTED_BELL = get("haunted_bell"), SPEED_CONTROLLER_BRACKET = get("rotation_speed_controller/bracket"), diff --git a/src/main/java/com/simibubi/create/AllItems.java b/src/main/java/com/simibubi/create/AllItems.java index 9679c255f..9292b4931 100644 --- a/src/main/java/com/simibubi/create/AllItems.java +++ b/src/main/java/com/simibubi/create/AllItems.java @@ -82,11 +82,11 @@ public class AllItems { PROPELLER = ingredient("propeller"), WHISK = ingredient("whisk"), BRASS_HAND = ingredient("brass_hand"), CRAFTER_SLOT_COVER = ingredient("crafter_slot_cover"), ELECTRON_TUBE = ingredient("electron_tube"); - public static final ItemEntry INCOMPLETE_CLOCKWORK_COMPONENT = - REGISTRATE.item("incomplete_clockwork_component", SequencedAssemblyItem::new) + public static final ItemEntry INCOMPLETE_PRECISION_MECHANISM = + REGISTRATE.item("incomplete_precision_mechanism", SequencedAssemblyItem::new) .register(); - public static final ItemEntry CLOCKWORK_COMPONENT = ingredient("clockwork_component"); + public static final ItemEntry PRECISION_MECHANISM = ingredient("precision_mechanism"); public static final ItemEntry INCOMPLETE_COGWHEEL = REGISTRATE.item("incomplete_cogwheel", SequencedAssemblyItem::new) @@ -344,10 +344,10 @@ public class AllItems { .register(); } - private static ItemEntry hiddenIngredient(String name) { - return REGISTRATE.item(name, HiddenIngredientItem::new) - .register(); - } +// private static ItemEntry hiddenIngredient(String name) { +// return REGISTRATE.item(name, HiddenIngredientItem::new) +// .register(); +// } @SafeVarargs private static ItemEntry taggedIngredient(String name, ITag.INamedTag... tags) { diff --git a/src/main/java/com/simibubi/create/compat/jei/category/SequencedAssemblyCategory.java b/src/main/java/com/simibubi/create/compat/jei/category/SequencedAssemblyCategory.java index 0e1b480c4..a15d9b477 100644 --- a/src/main/java/com/simibubi/create/compat/jei/category/SequencedAssemblyCategory.java +++ b/src/main/java/com/simibubi/create/compat/jei/category/SequencedAssemblyCategory.java @@ -40,7 +40,7 @@ public class SequencedAssemblyCategory extends CreateRecipeCategory subCategories = new HashMap<>(); public SequencedAssemblyCategory() { - super(itemIcon(AllItems.CLOCKWORK_COMPONENT.get()), new EmptyBackground(180, 115)); + super(itemIcon(AllItems.PRECISION_MECHANISM.get()), new EmptyBackground(180, 115)); } @Override diff --git a/src/main/java/com/simibubi/create/compat/jei/category/sequencedAssembly/SequencedAssemblySubCategory.java b/src/main/java/com/simibubi/create/compat/jei/category/sequencedAssembly/SequencedAssemblySubCategory.java index 15a078376..00f2784cb 100644 --- a/src/main/java/com/simibubi/create/compat/jei/category/sequencedAssembly/SequencedAssemblySubCategory.java +++ b/src/main/java/com/simibubi/create/compat/jei/category/sequencedAssembly/SequencedAssemblySubCategory.java @@ -121,12 +121,12 @@ public abstract class SequencedAssemblySubCategory { @Override public void draw(SequencedRecipe recipe, MatrixStack ms, double mouseX, double mouseY, int index) { deployer.offset = index; - AllGuiTextures.JEI_SLOT.draw(ms, 3, 14); ms.push(); ms.translate(-7, 50, 0); ms.scale(.75f, .75f, .75f); deployer.draw(ms, getWidth() / 2, 0); ms.pop(); + AllGuiTextures.JEI_SLOT.draw(ms, 3, 14); } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/itemAssembly/SequencedAssemblyItem.java b/src/main/java/com/simibubi/create/content/contraptions/itemAssembly/SequencedAssemblyItem.java index b8571fded..2ac7b3bbe 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/itemAssembly/SequencedAssemblyItem.java +++ b/src/main/java/com/simibubi/create/content/contraptions/itemAssembly/SequencedAssemblyItem.java @@ -12,7 +12,7 @@ import net.minecraft.util.math.MathHelper; public class SequencedAssemblyItem extends Item { public SequencedAssemblyItem(Properties p_i48487_1_) { - super(p_i48487_1_); + super(p_i48487_1_.maxStackSize(1)); } @Override diff --git a/src/main/java/com/simibubi/create/content/curiosities/bell/HauntedBellPulser.java b/src/main/java/com/simibubi/create/content/curiosities/bell/HauntedBellPulser.java index 6c0ef3d79..626089218 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/bell/HauntedBellPulser.java +++ b/src/main/java/com/simibubi/create/content/curiosities/bell/HauntedBellPulser.java @@ -1,8 +1,16 @@ package com.simibubi.create.content.curiosities.bell; +import java.util.UUID; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.TimeUnit; + +import com.google.common.cache.Cache; +import com.google.common.cache.CacheBuilder; import com.simibubi.create.AllBlocks; import com.simibubi.create.foundation.networking.AllPackets; +import com.simibubi.create.foundation.utility.IntAttached; +import net.minecraft.entity.Entity; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import net.minecraft.world.chunk.Chunk; @@ -17,6 +25,11 @@ public class HauntedBellPulser { public static final int DISTANCE = 3; public static final int RECHARGE_TICKS = 8; + public static final int WARMUP_TICKS = 10; + + public static final Cache> WARMUP = CacheBuilder.newBuilder() + .expireAfterAccess(250, TimeUnit.MILLISECONDS) + .build(); @SubscribeEvent public static void hauntedBellCreatesPulse(TickEvent.PlayerTickEvent event) { @@ -26,17 +39,31 @@ public class HauntedBellPulser { return; if (event.player.isSpectator()) return; - - if (event.player.world.getGameTime() % RECHARGE_TICKS != 0) + if (!event.player.isHolding(AllBlocks.HAUNTED_BELL::is)) return; - if (event.player.isHolding(AllBlocks.HAUNTED_BELL::is)) - sendPulse(event.player.world, event.player.getBlockPos(), DISTANCE, false); + Entity player = event.player; + boolean firstPulse = false; + + try { + IntAttached ticker = WARMUP.get(player.getUniqueID(), () -> IntAttached.with(WARMUP_TICKS, player)); + firstPulse = ticker.getFirst() + .intValue() == 1; + ticker.decrement(); + if (!ticker.isOrBelowZero()) + return; + } catch (ExecutionException e) { + } + + long gameTime = player.world.getGameTime(); + if (firstPulse || gameTime % RECHARGE_TICKS != 0) + sendPulse(player.world, event.player.getBlockPos(), DISTANCE, false); } public static void sendPulse(World world, BlockPos pos, int distance, boolean canOverlap) { Chunk chunk = world.getChunkAt(pos); - AllPackets.channel.send(PacketDistributor.TRACKING_CHUNK.with(() -> chunk), new SoulPulseEffectPacket(pos, distance, canOverlap)); + AllPackets.channel.send(PacketDistributor.TRACKING_CHUNK.with(() -> chunk), + new SoulPulseEffectPacket(pos, distance, canOverlap)); } } diff --git a/src/main/java/com/simibubi/create/foundation/advancement/AllAdvancements.java b/src/main/java/com/simibubi/create/foundation/advancement/AllAdvancements.java index 56573292e..ddf9fc087 100644 --- a/src/main/java/com/simibubi/create/foundation/advancement/AllAdvancements.java +++ b/src/main/java/com/simibubi/create/foundation/advancement/AllAdvancements.java @@ -365,11 +365,11 @@ public class AllAdvancements implements IDataProvider { .register(t, id + ":deployer"); Advancement clockwork_component = - itemAdvancement("clockwork_component", AllItems.CLOCKWORK_COMPONENT, TaskType.NORMAL).withParent(deployer) - .register(t, id + ":clockwork_component"); + itemAdvancement("precision_mechanism", AllItems.PRECISION_MECHANISM, TaskType.NORMAL).withParent(deployer) + .register(t, id + ":precision_mechanism"); Advancement clockwork_component_eob = deadEnd().withParent(clockwork_component) - .withCriterion("0", itemGathered(AllItems.CLOCKWORK_COMPONENT.get())) + .withCriterion("0", itemGathered(AllItems.PRECISION_MECHANISM.get())) .register(t, id + ":clockwork_component_eob"); Advancement extendo_grip = diff --git a/src/main/java/com/simibubi/create/foundation/data/BuilderTransformers.java b/src/main/java/com/simibubi/create/foundation/data/BuilderTransformers.java index b8976bad1..799a837af 100644 --- a/src/main/java/com/simibubi/create/foundation/data/BuilderTransformers.java +++ b/src/main/java/com/simibubi/create/foundation/data/BuilderTransformers.java @@ -224,10 +224,15 @@ public class BuilderTransformers { .sound(SoundType.ANVIL)) .addLayer(() -> RenderType::getCutoutMipped) .tag(AllBlockTags.BRITTLE.tag) - .blockstate((c, p) -> p.horizontalBlock(c.getEntry(), state -> - AssetLookup.partialBaseModel(c, p, state.get(BlockStateProperties.BELL_ATTACHMENT).getString()))) + .blockstate((c, p) -> p.horizontalBlock(c.getEntry(), state -> { + String variant = state.get(BlockStateProperties.BELL_ATTACHMENT) + .getString(); + return p.models() + .withExistingParent(c.getName() + "_" + variant, p.modLoc("block/bell_base/block_" + variant)); + })) .item() - .transform(ModelGen.customItemModel()); + .model((c, p) -> p.withExistingParent(c.getName(), p.modLoc("block/" + c.getName()))) + .build(); } } diff --git a/src/main/java/com/simibubi/create/foundation/data/recipe/CreateRecipeProvider.java b/src/main/java/com/simibubi/create/foundation/data/recipe/CreateRecipeProvider.java index f3c4c24aa..3a1055b90 100644 --- a/src/main/java/com/simibubi/create/foundation/data/recipe/CreateRecipeProvider.java +++ b/src/main/java/com/simibubi/create/foundation/data/recipe/CreateRecipeProvider.java @@ -123,8 +123,8 @@ public abstract class CreateRecipeProvider extends RecipeProvider { return AllItems.ELECTRON_TUBE.get(); } - static IItemProvider clockwork() { - return AllItems.CLOCKWORK_COMPONENT.get(); + static IItemProvider precisionMechanism() { + return AllItems.PRECISION_MECHANISM.get(); } static ITag.INamedTag copperBlock() { diff --git a/src/main/java/com/simibubi/create/foundation/data/recipe/MechanicalCraftingRecipeGen.java b/src/main/java/com/simibubi/create/foundation/data/recipe/MechanicalCraftingRecipeGen.java index b1bbb20ef..887751cbb 100644 --- a/src/main/java/com/simibubi/create/foundation/data/recipe/MechanicalCraftingRecipeGen.java +++ b/src/main/java/com/simibubi/create/foundation/data/recipe/MechanicalCraftingRecipeGen.java @@ -31,7 +31,7 @@ public class MechanicalCraftingRecipeGen extends CreateRecipeProvider { EXTENDO_GRIP = create(AllItems.EXTENDO_GRIP::get).returns(1) .recipe(b -> b.key('L', Ingredient.fromTag(I.brass())) - .key('R', I.clockwork()) + .key('R', I.precisionMechanism()) .key('H', AllItems.BRASS_HAND.get()) .key('S', Ingredient.fromTag(Tags.Items.RODS_WOODEN)) .patternLine(" L ") @@ -42,7 +42,7 @@ public class MechanicalCraftingRecipeGen extends CreateRecipeProvider { POTATO_CANNON = create(AllItems.POTATO_CANNON::get).returns(1) .recipe(b -> b.key('L', I.andesite()) - .key('R', I.clockwork()) + .key('R', I.precisionMechanism()) .key('S', Ingredient.fromTag(I.copper())) .patternLine("L") .patternLine("R") diff --git a/src/main/java/com/simibubi/create/foundation/data/recipe/SequencedAssemblyRecipeGen.java b/src/main/java/com/simibubi/create/foundation/data/recipe/SequencedAssemblyRecipeGen.java index ce2c58985..7795e749a 100644 --- a/src/main/java/com/simibubi/create/foundation/data/recipe/SequencedAssemblyRecipeGen.java +++ b/src/main/java/com/simibubi/create/foundation/data/recipe/SequencedAssemblyRecipeGen.java @@ -9,8 +9,11 @@ import com.simibubi.create.content.contraptions.components.deployer.DeployerAppl import com.simibubi.create.content.contraptions.components.saw.CuttingRecipe; import com.simibubi.create.content.contraptions.itemAssembly.SequencedAssemblyRecipeBuilder; +import net.minecraft.block.Blocks; import net.minecraft.data.DataGenerator; import net.minecraft.item.ItemStack; +import net.minecraft.item.Items; +import net.minecraft.tags.ItemTags; public class SequencedAssemblyRecipeGen extends CreateRecipeProvider { @@ -30,32 +33,47 @@ public class SequencedAssemblyRecipeGen extends CreateRecipeProvider { // .addStep(FillingRecipe::new, rb -> rb.require(Fluids.WATER, 100)) // ) - CLOCKWORK_COMPONENT = create("clockwork_component", b -> b.require(I.goldSheet()) - .transitionTo(AllItems.INCOMPLETE_CLOCKWORK_COMPONENT.get()) - .addOutput(AllItems.CLOCKWORK_COMPONENT.get(), 12) - .addOutput(AllItems.GOLDEN_SHEET.get(), 2) - .addOutput(AllItems.ANDESITE_ALLOY.get(), 2) - .addOutput(AllBlocks.COGWHEEL.get(), 1) //TODO add more junk + PRECISION_MECHANISM = create("precision_mechanism", b -> b.require(I.goldSheet()) + .transitionTo(AllItems.INCOMPLETE_PRECISION_MECHANISM.get()) + .addOutput(AllItems.PRECISION_MECHANISM.get(), 60) + .addOutput(AllItems.GOLDEN_SHEET.get(), 8) + .addOutput(AllItems.ANDESITE_ALLOY.get(), 8) + .addOutput(AllBlocks.COGWHEEL.get(), 5) + .addOutput(AllBlocks.SHAFT.get(), 2) + .addOutput(AllItems.CRUSHED_GOLD.get(), 2) + .addOutput(Items.GOLD_NUGGET, 2) + .addOutput(Items.IRON_INGOT, 1) + .addOutput(Items.CLOCK, 1) .loops(5) .addStep(DeployerApplicationRecipe::new, rb -> rb.require(I.cog())) .addStep(DeployerApplicationRecipe::new, rb -> rb.require(I.largeCog())) .addStep(DeployerApplicationRecipe::new, rb -> rb.require(I.ironNugget())) ), - COGWHEEL = create("cogwheel", b -> b.require(I.shaft()) + COGWHEEL = create("cogwheel", b -> b.require(I.andesite()) .transitionTo(AllItems.INCOMPLETE_COGWHEEL.get()) - .addOutput(new ItemStack(AllBlocks.COGWHEEL.get(), 12), 12) + .addOutput(new ItemStack(AllBlocks.COGWHEEL.get(), 12), 22) + .addOutput(AllItems.ANDESITE_ALLOY.get(), 2) + .addOutput(Blocks.ANDESITE, 1) + .addOutput(AllBlocks.LARGE_COGWHEEL.get(), 1) + .addOutput(Items.STICK, 1) + .addOutput(Items.IRON_NUGGET, 1) .loops(4) - .addStep(DeployerApplicationRecipe::new, rb -> rb.require(I.planks())) - .addStep(CuttingRecipe::new, rb -> rb.duration(20)) - .addStep(CuttingRecipe::new, rb -> rb.duration(40)) + .addStep(DeployerApplicationRecipe::new, rb -> rb.require(ItemTags.WOODEN_BUTTONS)) + .addStep(CuttingRecipe::new, rb -> rb.duration(50)) ), LARGE_COGWHEEL = create("large_cogwheel", b -> b.require(I.andesite()) .transitionTo(AllItems.INCOMPLETE_LARGE_COGWHEEL.get()) - .addOutput(new ItemStack(AllBlocks.LARGE_COGWHEEL.get(), 3), 12) - .loops(8) - .addStep(DeployerApplicationRecipe::new, rb -> rb.require(I.woodSlab())) + .addOutput(new ItemStack(AllBlocks.LARGE_COGWHEEL.get(), 6), 22) + .addOutput(AllItems.ANDESITE_ALLOY.get(), 2) + .addOutput(Blocks.ANDESITE, 1) + .addOutput(AllBlocks.COGWHEEL.get(), 1) + .addOutput(Items.STICK, 1) + .addOutput(Items.IRON_NUGGET, 1) + .loops(3) + .addStep(DeployerApplicationRecipe::new, rb -> rb.require(I.planks())) + .addStep(DeployerApplicationRecipe::new, rb -> rb.require(ItemTags.WOODEN_BUTTONS)) .addStep(CuttingRecipe::new, rb -> rb.duration(50)) ) ; diff --git a/src/main/java/com/simibubi/create/foundation/data/recipe/StandardRecipeGen.java b/src/main/java/com/simibubi/create/foundation/data/recipe/StandardRecipeGen.java index 1890fda3a..de5e26076 100644 --- a/src/main/java/com/simibubi/create/foundation/data/recipe/StandardRecipeGen.java +++ b/src/main/java/com/simibubi/create/foundation/data/recipe/StandardRecipeGen.java @@ -600,7 +600,7 @@ public class StandardRecipeGen extends CreateRecipeProvider { MECHANICAL_ARM = create(AllBlocks.MECHANICAL_ARM::get).unlockedBy(I::brassCasing) .returns(1) .viaShaped(b -> b.key('L', I.brassSheet()) - .key('I', I.clockwork()) + .key('I', I.precisionMechanism()) .key('A', I.andesite()) .key('C', I.brassCasing()) .patternLine("LLA") @@ -719,7 +719,7 @@ public class StandardRecipeGen extends CreateRecipeProvider { GAUGE_CYCLE = conversionCycle(ImmutableList.of(AllBlocks.SPEEDOMETER, AllBlocks.STRESSOMETER)), ROTATION_SPEED_CONTROLLER = create(AllBlocks.ROTATION_SPEED_CONTROLLER).unlockedBy(I::brassCasing) - .viaShaped(b -> b.key('B', I.clockwork()) + .viaShaped(b -> b.key('B', I.precisionMechanism()) .key('C', I.brassCasing()) .key('S', I.shaft()) .patternLine(" B ") diff --git a/src/main/resources/assets/create/lang/default/advancements.json b/src/main/resources/assets/create/lang/default/advancements.json index d56cccf97..1f35ae1b2 100644 --- a/src/main/resources/assets/create/lang/default/advancements.json +++ b/src/main/resources/assets/create/lang/default/advancements.json @@ -127,8 +127,8 @@ "advancement.create.flywheel.desc": "Successfully connect an engine to the Flywheel.", "advancement.create.overstress_flywheel": "High levels of Stress", "advancement.create.overstress_flywheel.desc": "Overstress a Furnace Engine.", - "advancement.create.clockwork_component": "Complex Curiosities", - "advancement.create.clockwork_component.desc": "Assemble a Clockwork Component.", + "advancement.create.precision_mechanism": "Complex Curiosities", + "advancement.create.precision_mechanism.desc": "Assemble a Precision Mechanism.", "advancement.create.mechanical_arm": "Busy Hands!", "advancement.create.mechanical_arm.desc": "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": "Play Me My Theme Tune!", diff --git a/src/main/resources/assets/create/lang/default/tooltips.json b/src/main/resources/assets/create/lang/default/tooltips.json index 6fca14d13..412cc7a7d 100644 --- a/src/main/resources/assets/create/lang/default/tooltips.json +++ b/src/main/resources/assets/create/lang/default/tooltips.json @@ -218,12 +218,12 @@ "item.create.minecart_coupling.tooltip.behaviour1": "_Couples_ two Minecarts together, attempting to keep them at a _constant distance_ while moving.", "block.create.peculiar_bell.tooltip": "PECULIAR BELL", - "block.create.peculiar_bell.tooltip.summary": "A decorative brass bell. Placing it above a _Soul Fire_ or _Soul Campfire_ may cause a spooky transformation to occur...", + "block.create.peculiar_bell.tooltip.summary": "A decorative _Brass Bell_. Placing it right above open _Soul Fire_ may cause side-effects...", "block.create.haunted_bell.tooltip": "HAUNTED BELL", - "block.create.haunted_bell.tooltip.summary": "A spooky brass bell haunted by lost souls of the Nether.", + "block.create.haunted_bell.tooltip.summary": "A _Cursed Bell_ haunted by lost souls of the Nether.", "block.create.haunted_bell.tooltip.condition1": "When Held or Rang", - "block.create.haunted_bell.tooltip.behaviour1": "Highlights nearby _dark spots_ on which _Hostile Mobs_ could spawn.", + "block.create.haunted_bell.tooltip.behaviour1": "Highlights nearby _Lightless Spots_ on which _Hostile Mobs_ can spawn.", "create.gui.chromatic_projector.title": "Chromatic Projector", "create.gui.chromatic_projector.filter.invert": "Invert", diff --git a/src/main/resources/assets/create/models/block/peculiar_bell/block_ceiling.json b/src/main/resources/assets/create/models/block/bell_base/block_ceiling.json similarity index 100% rename from src/main/resources/assets/create/models/block/peculiar_bell/block_ceiling.json rename to src/main/resources/assets/create/models/block/bell_base/block_ceiling.json diff --git a/src/main/resources/assets/create/models/block/peculiar_bell/block_double_wall.json b/src/main/resources/assets/create/models/block/bell_base/block_double_wall.json similarity index 100% rename from src/main/resources/assets/create/models/block/peculiar_bell/block_double_wall.json rename to src/main/resources/assets/create/models/block/bell_base/block_double_wall.json diff --git a/src/main/resources/assets/create/models/block/peculiar_bell/block_floor.json b/src/main/resources/assets/create/models/block/bell_base/block_floor.json similarity index 100% rename from src/main/resources/assets/create/models/block/peculiar_bell/block_floor.json rename to src/main/resources/assets/create/models/block/bell_base/block_floor.json diff --git a/src/main/resources/assets/create/models/block/peculiar_bell/block_single_wall.json b/src/main/resources/assets/create/models/block/bell_base/block_single_wall.json similarity index 100% rename from src/main/resources/assets/create/models/block/peculiar_bell/block_single_wall.json rename to src/main/resources/assets/create/models/block/bell_base/block_single_wall.json diff --git a/src/main/resources/assets/create/models/block/peculiar_bell/bell.json b/src/main/resources/assets/create/models/block/haunted_bell.json similarity index 87% rename from src/main/resources/assets/create/models/block/peculiar_bell/bell.json rename to src/main/resources/assets/create/models/block/haunted_bell.json index 2e6436a27..ede25ad47 100644 --- a/src/main/resources/assets/create/models/block/peculiar_bell/bell.json +++ b/src/main/resources/assets/create/models/block/haunted_bell.json @@ -1,14 +1,15 @@ { "credit": "Made with Blockbench", + "parent": "block/block", "textures": { - "0": "create:block/bell", + "0": "create:block/bell_anim", "particle": "create:block/bell" }, "elements": [ { "from": [13, 7, 7], "to": [15, 9, 9], - "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 8]}, + "rotation": {"angle": 0, "axis": "y", "origin": [7, 8, 8]}, "faces": { "north": {"uv": [10.5, 6, 9.5, 7], "texture": "#0"}, "east": {"uv": [9.5, 7, 10.5, 8], "rotation": 90, "texture": "#0"}, @@ -21,7 +22,7 @@ { "from": [1, 7, 7], "to": [3, 9, 9], - "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 8]}, + "rotation": {"angle": 0, "axis": "y", "origin": [9, 8, 8]}, "faces": { "north": {"uv": [9.5, 6, 10.5, 7], "texture": "#0"}, "east": {"uv": [10, 7, 10.5, 7.5], "texture": "#0"}, @@ -34,6 +35,7 @@ { "from": [3, 1, 3], "to": [13, 3, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 9, 8]}, "faces": { "north": {"uv": [0, 15, 5, 16], "texture": "#0"}, "east": {"uv": [0, 15, 5, 16], "texture": "#0"}, @@ -46,6 +48,7 @@ { "from": [4, 3, 4], "to": [12, 12, 12], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 9, 8]}, "faces": { "north": {"uv": [8, 0, 12, 4.5], "texture": "#0"}, "east": {"uv": [8, 0, 12, 4.5], "texture": "#0"}, @@ -57,6 +60,7 @@ { "from": [7, 12, 7], "to": [9, 16, 9], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 9, 8]}, "faces": { "north": {"uv": [8, 6, 9, 8], "texture": "#0"}, "east": {"uv": [8, 6, 9, 8], "texture": "#0"}, @@ -86,7 +90,6 @@ { "name": "Bell", "origin": [8, 8, 8], - "color": 0, "children": [0, 1, 2, 3, 4, 5, 6] } ] diff --git a/src/main/resources/assets/create/models/block/haunted_bell/bell.json b/src/main/resources/assets/create/models/block/haunted_bell/bell.json deleted file mode 100644 index 161de430f..000000000 --- a/src/main/resources/assets/create/models/block/haunted_bell/bell.json +++ /dev/null @@ -1,436 +0,0 @@ -{ - "credit": "Made with Blockbench", - "textures": { - "0": "create:block/bell_anim", - "particle": "create:block/bell" - }, - "elements": [ - { - "from": [ - 14, - 7, - 7 - ], - "to": [ - 16, - 9, - 9 - ], - "rotation": { - "angle": 0, - "axis": "y", - "origin": [ - 8, - 8, - 8 - ] - }, - "faces": { - "north": { - "uv": [ - 10.5, - 6, - 9.5, - 7 - ], - "texture": "#0" - }, - "east": { - "uv": [ - 9.5, - 7, - 10.5, - 8 - ], - "rotation": 90, - "texture": "#0" - }, - "south": { - "uv": [ - 9.5, - 6, - 10.5, - 7 - ], - "texture": "#0" - }, - "west": { - "uv": [ - 10, - 7, - 10.5, - 7.5 - ], - "texture": "#0" - }, - "up": { - "uv": [ - 9.5, - 5, - 10.5, - 6 - ], - "texture": "#0" - }, - "down": { - "uv": [ - 9.5, - 7, - 10.5, - 8 - ], - "texture": "#0" - } - } - }, - { - "from": [ - 0, - 7, - 7 - ], - "to": [ - 2, - 9, - 9 - ], - "rotation": { - "angle": 0, - "axis": "y", - "origin": [ - 8, - 8, - 8 - ] - }, - "faces": { - "north": { - "uv": [ - 9.5, - 6, - 10.5, - 7 - ], - "texture": "#0" - }, - "east": { - "uv": [ - 10, - 7, - 10.5, - 7.5 - ], - "texture": "#0" - }, - "south": { - "uv": [ - 10.5, - 6, - 9.5, - 7 - ], - "texture": "#0" - }, - "west": { - "uv": [ - 9.5, - 7, - 10.5, - 8 - ], - "rotation": 90, - "texture": "#0" - }, - "up": { - "uv": [ - 9.5, - 5, - 10.5, - 6 - ], - "rotation": 180, - "texture": "#0" - }, - "down": { - "uv": [ - 9.5, - 7, - 10.5, - 8 - ], - "rotation": 180, - "texture": "#0" - } - } - }, - { - "from": [ - 3, - 0, - 3 - ], - "to": [ - 13, - 2, - 13 - ], - "faces": { - "north": { - "uv": [ - 0, - 15, - 5, - 16 - ], - "texture": "#0" - }, - "east": { - "uv": [ - 0, - 15, - 5, - 16 - ], - "texture": "#0" - }, - "south": { - "uv": [ - 0, - 15, - 5, - 16 - ], - "texture": "#0" - }, - "west": { - "uv": [ - 0, - 15, - 5, - 16 - ], - "texture": "#0" - }, - "up": { - "uv": [ - 0, - 10, - 5, - 15 - ], - "texture": "#0" - }, - "down": { - "uv": [ - 5, - 10, - 10, - 15 - ], - "texture": "#0" - } - } - }, - { - "from": [ - 4, - 2, - 4 - ], - "to": [ - 12, - 11, - 12 - ], - "faces": { - "north": { - "uv": [ - 8, - 0, - 12, - 4.5 - ], - "texture": "#0" - }, - "east": { - "uv": [ - 8, - 0, - 12, - 4.5 - ], - "texture": "#0" - }, - "south": { - "uv": [ - 8, - 0, - 12, - 4.5 - ], - "texture": "#0" - }, - "west": { - "uv": [ - 8, - 0, - 12, - 4.5 - ], - "texture": "#0" - }, - "up": { - "uv": [ - 12, - 0, - 16, - 4 - ], - "texture": "#0" - } - } - }, - { - "from": [ - 7, - 11, - 7 - ], - "to": [ - 9, - 15, - 9 - ], - "faces": { - "north": { - "uv": [ - 8, - 6, - 9, - 8 - ], - "texture": "#0" - }, - "east": { - "uv": [ - 8, - 6, - 9, - 8 - ], - "texture": "#0" - }, - "south": { - "uv": [ - 8, - 6, - 9, - 8 - ], - "texture": "#0" - }, - "west": { - "uv": [ - 8, - 6, - 9, - 8 - ], - "texture": "#0" - }, - "up": { - "uv": [ - 8, - 5, - 9, - 6 - ], - "texture": "#0" - } - } - }, - { - "from": [ - 0, - 0, - 8 - ], - "to": [ - 16, - 16, - 9 - ], - "rotation": { - "angle": 0, - "axis": "y", - "origin": [ - 8, - 8, - 8.5 - ] - }, - "faces": { - "north": { - "uv": [ - 0, - 0, - 8, - 8 - ], - "texture": "#0" - } - } - }, - { - "from": [ - 0, - 0, - 7 - ], - "to": [ - 16, - 16, - 8 - ], - "rotation": { - "angle": 0, - "axis": "y", - "origin": [ - 8, - 8, - 8.5 - ] - }, - "faces": { - "south": { - "uv": [ - 0, - 0, - 8, - 8 - ], - "texture": "#0" - } - } - } - ], - "groups": [ - { - "name": "Bell", - "origin": [ - 8, - 8, - 8 - ], - "children": [ - 0, - 1, - 2, - 3, - 4, - 5, - 6 - ] - } - ] -} diff --git a/src/main/resources/assets/create/models/block/haunted_bell/block_ceiling.json b/src/main/resources/assets/create/models/block/haunted_bell/block_ceiling.json deleted file mode 100644 index 67da4ac5d..000000000 --- a/src/main/resources/assets/create/models/block/haunted_bell/block_ceiling.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "credit": "Made with Blockbench", - "textures": { - "1": "create:block/bell_frame_side", - "2": "create:block/bell_frame", - "particle": "create:block/bell" - }, - "elements": [ - { - "from": [0.1, 0, 0], - "to": [15.9, 16, 16], - "rotation": {"angle": 0, "axis": "x", "origin": [8, 8, 8]}, - "faces": { - "east": {"uv": [0, 0, 16, 16], "rotation": 180, "texture": "#1"}, - "west": {"uv": [0, 0, 16, 16], "rotation": 180, "texture": "#1"}, - "up": {"uv": [0, 0, 15.8, 16], "texture": "#2"} - } - }, - { - "from": [15.9, 0, 0], - "to": [0.1, 16, 16], - "rotation": {"angle": 0, "axis": "x", "origin": [8, 8, 8]}, - "faces": { - "east": {"uv": [0, 0, 16, 16], "rotation": 180, "texture": "#1"}, - "west": {"uv": [0, 0, 16, 16], "rotation": 180, "texture": "#1"}, - "up": {"uv": [0, 0, 16, 16], "texture": "#2"} - } - } - ], - "groups": [ - { - "name": "Frame", - "origin": [8, 8, 8], - "children": [0, 1] - } - ] -} diff --git a/src/main/resources/assets/create/models/block/haunted_bell/block_double_wall.json b/src/main/resources/assets/create/models/block/haunted_bell/block_double_wall.json deleted file mode 100644 index 52a9e266d..000000000 --- a/src/main/resources/assets/create/models/block/haunted_bell/block_double_wall.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "credit": "Made with Blockbench", - "textures": { - "1": "create:block/bell_frame_side", - "particle": "create:block/bell" - }, - "elements": [ - { - "from": [0.1, 0, 0], - "to": [15.9, 16, 16], - "faces": { - "south": {"uv": [0, 0, 16, 16], "texture": "#1"}, - "north": {"uv": [0, 0, 16, 16], "texture": "#1"} - } - }, - { - "from": [15.9, 0, 0], - "to": [0.1, 16, 16], - "faces": { - "south": {"uv": [0, 0, 16, 16], "texture": "#1"}, - "north": {"uv": [0, 0, 16, 16], "texture": "#1"} - } - } - ], - "groups": [ - { - "name": "Frame", - "origin": [8, 8, 8], - "children": [0, 1] - } - ] -} diff --git a/src/main/resources/assets/create/models/block/haunted_bell/block_floor.json b/src/main/resources/assets/create/models/block/haunted_bell/block_floor.json deleted file mode 100644 index 396f9e4e7..000000000 --- a/src/main/resources/assets/create/models/block/haunted_bell/block_floor.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "credit": "Made with Blockbench", - "textures": { - "1": "create:block/bell_frame_side", - "2": "create:block/bell_frame", - "particle": "create:block/bell" - }, - "elements": [ - { - "from": [0.1, 0, 0], - "to": [15.9, 16, 16], - "faces": { - "east": {"uv": [0, 0, 16, 16], "texture": "#1"}, - "west": {"uv": [0, 0, 16, 16], "texture": "#1"}, - "down": {"uv": [0, 0, 15.8, 16], "texture": "#2"} - } - }, - { - "from": [15.9, 0, 0], - "to": [0.1, 16, 16], - "faces": { - "east": {"uv": [0, 0, 16, 16], "texture": "#1"}, - "west": {"uv": [0, 0, 16, 16], "texture": "#1"}, - "down": {"uv": [0, 0, 16, 16], "texture": "#2"} - } - } - ], - "groups": [ - { - "name": "Frame", - "origin": [8, 8, 8], - "children": [0, 1] - } - ] -} diff --git a/src/main/resources/assets/create/models/block/haunted_bell/block_single_wall.json b/src/main/resources/assets/create/models/block/haunted_bell/block_single_wall.json deleted file mode 100644 index 7bee57b84..000000000 --- a/src/main/resources/assets/create/models/block/haunted_bell/block_single_wall.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "credit": "Made with Blockbench", - "textures": { - "1": "create:block/bell_frame_side", - "particle": "create:block/bell" - }, - "elements": [ - { - "from": [0.1, 0, 0], - "to": [15.9, 16, 16], - "faces": { - "north": {"uv": [0, 0, 16, 16], "texture": "#1"} - } - }, - { - "from": [15.9, 0, 0], - "to": [0.1, 16, 16], - "faces": { - "north": {"uv": [0, 0, 16, 16], "texture": "#1"} - } - } - ], - "groups": [ - { - "name": "Frame", - "origin": [8, 8, 8], - "children": [0, 1] - } - ] -} diff --git a/src/main/resources/assets/create/models/block/haunted_bell/item.json b/src/main/resources/assets/create/models/block/haunted_bell/item.json deleted file mode 100644 index 2c1c2327c..000000000 --- a/src/main/resources/assets/create/models/block/haunted_bell/item.json +++ /dev/null @@ -1,93 +0,0 @@ -{ - "credit": "Made with Blockbench", - "parent": "block/block", - "textures": { - "0": "create:block/bell_anim", - "particle": "create:block/bell" - }, - "elements": [ - { - "from": [14, 7, 7], - "to": [16, 9, 9], - "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 8]}, - "faces": { - "north": {"uv": [10.5, 6, 9.5, 7], "texture": "#0"}, - "east": {"uv": [9.5, 7, 10.5, 8], "rotation": 90, "texture": "#0"}, - "south": {"uv": [9.5, 6, 10.5, 7], "texture": "#0"}, - "west": {"uv": [10, 7, 10.5, 7.5], "texture": "#0"}, - "up": {"uv": [9.5, 5, 10.5, 6], "texture": "#0"}, - "down": {"uv": [9.5, 7, 10.5, 8], "texture": "#0"} - } - }, - { - "from": [0, 7, 7], - "to": [2, 9, 9], - "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 8]}, - "faces": { - "north": {"uv": [9.5, 6, 10.5, 7], "texture": "#0"}, - "east": {"uv": [10, 7, 10.5, 7.5], "texture": "#0"}, - "south": {"uv": [10.5, 6, 9.5, 7], "texture": "#0"}, - "west": {"uv": [9.5, 7, 10.5, 8], "rotation": 90, "texture": "#0"}, - "up": {"uv": [9.5, 5, 10.5, 6], "rotation": 180, "texture": "#0"}, - "down": {"uv": [9.5, 7, 10.5, 8], "rotation": 180, "texture": "#0"} - } - }, - { - "from": [3, 0, 3], - "to": [13, 2, 13], - "faces": { - "north": {"uv": [0, 15, 5, 16], "texture": "#0"}, - "east": {"uv": [0, 15, 5, 16], "texture": "#0"}, - "south": {"uv": [0, 15, 5, 16], "texture": "#0"}, - "west": {"uv": [0, 15, 5, 16], "texture": "#0"}, - "up": {"uv": [0, 10, 5, 15], "texture": "#0"}, - "down": {"uv": [5, 10, 10, 15], "texture": "#0"} - } - }, - { - "from": [4, 2, 4], - "to": [12, 11, 12], - "faces": { - "north": {"uv": [8, 0, 12, 4.5], "texture": "#0"}, - "east": {"uv": [8, 0, 12, 4.5], "texture": "#0"}, - "south": {"uv": [8, 0, 12, 4.5], "texture": "#0"}, - "west": {"uv": [8, 0, 12, 4.5], "texture": "#0"}, - "up": {"uv": [12, 0, 16, 4], "texture": "#0"} - } - }, - { - "from": [7, 11, 7], - "to": [9, 15, 9], - "faces": { - "north": {"uv": [8, 6, 9, 8], "texture": "#0"}, - "east": {"uv": [8, 6, 9, 8], "texture": "#0"}, - "south": {"uv": [8, 6, 9, 8], "texture": "#0"}, - "west": {"uv": [8, 6, 9, 8], "texture": "#0"}, - "up": {"uv": [8, 5, 9, 6], "texture": "#0"} - } - }, - { - "from": [0, 0, 8], - "to": [16, 16, 9], - "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 8.5]}, - "faces": { - "north": {"uv": [0, 0, 8, 8], "texture": "#0"} - } - }, - { - "from": [0, 0, 7], - "to": [16, 16, 8], - "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 8.5]}, - "faces": { - "south": {"uv": [0, 0, 8, 8], "texture": "#0"} - } - } - ], - "groups": [ - { - "name": "Bell", - "origin": [8, 8, 8], - "children": [0, 1, 2, 3, 4, 5, 6] - } - ] -} diff --git a/src/main/resources/assets/create/models/block/peculiar_bell/item.json b/src/main/resources/assets/create/models/block/peculiar_bell.json similarity index 100% rename from src/main/resources/assets/create/models/block/peculiar_bell/item.json rename to src/main/resources/assets/create/models/block/peculiar_bell.json diff --git a/src/main/resources/assets/create/models/item/incomplete_cogwheel.json b/src/main/resources/assets/create/models/item/incomplete_cogwheel.json index 312e9bdcf..50438130a 100644 --- a/src/main/resources/assets/create/models/item/incomplete_cogwheel.json +++ b/src/main/resources/assets/create/models/item/incomplete_cogwheel.json @@ -5,7 +5,8 @@ "textures": { "0": "create:block/axis", "3": "create:block/axis_top", - "1_2": "create:block/cogwheel" + "1_2": "create:block/cogwheel", + "particle": "block/stripped_spruce_log" }, "elements": [ { @@ -35,20 +36,6 @@ "down": {"uv": [4, 0, 10, 6], "texture": "#1_2"} } }, - { - "name": "GearCaseInnerDiagonal", - "from": [2, 7.1, 2], - "to": [14, 8.9, 14], - "rotation": {"angle": -45, "axis": "y", "origin": [8, 8, 8]}, - "faces": { - "north": {"uv": [0, 6, 6, 7], "texture": "#1_2"}, - "east": {"uv": [0, 6, 6, 7], "texture": "#1_2"}, - "south": {"uv": [0, 6, 6, 7], "texture": "#1_2"}, - "west": {"uv": [0, 6, 6, 7], "texture": "#1_2"}, - "up": {"uv": [4, 0, 10, 6], "texture": "#1_2"}, - "down": {"uv": [4, 0, 10, 6], "texture": "#1_2"} - } - }, { "name": "GearCaseOuter", "from": [4, 6, 4], diff --git a/src/main/resources/assets/create/models/item/incomplete_large_cogwheel.json b/src/main/resources/assets/create/models/item/incomplete_large_cogwheel.json index 3c44e8315..1a9e884e1 100644 --- a/src/main/resources/assets/create/models/item/incomplete_large_cogwheel.json +++ b/src/main/resources/assets/create/models/item/incomplete_large_cogwheel.json @@ -5,24 +5,10 @@ "textures": { "0": "create:block/axis", "3": "create:block/axis_top", - "particle": "block/stripped_spruce_log", - "4": "create:block/large_cogwheel" + "4": "create:block/large_cogwheel", + "particle": "block/stripped_spruce_log" }, "elements": [ - { - "name": "GearCaseInnerRotated", - "from": [-2, 6.9, -2], - "to": [18, 8.9, 18], - "rotation": {"angle": 45, "axis": "y", "origin": [8, 8, 8]}, - "faces": { - "north": {"uv": [0, 10, 10, 11], "texture": "#4"}, - "east": {"uv": [0, 10, 10, 11], "texture": "#4"}, - "south": {"uv": [0, 10, 10, 11], "texture": "#4"}, - "west": {"uv": [0, 10, 10, 11], "texture": "#4"}, - "up": {"uv": [0, 0, 10, 10], "texture": "#4"}, - "down": {"uv": [0, 0, 10, 10], "texture": "#4"} - } - }, { "name": "Axis", "from": [6, 0, 6], @@ -116,4 +102,4 @@ } } ] -} +} \ No newline at end of file diff --git a/src/main/resources/assets/create/textures/item/incomplete_clockwork_component.png b/src/main/resources/assets/create/textures/item/incomplete_precision_mechanism.png similarity index 100% rename from src/main/resources/assets/create/textures/item/incomplete_clockwork_component.png rename to src/main/resources/assets/create/textures/item/incomplete_precision_mechanism.png diff --git a/src/main/resources/assets/create/textures/item/clockwork_component.png b/src/main/resources/assets/create/textures/item/precision_mechanism.png similarity index 100% rename from src/main/resources/assets/create/textures/item/clockwork_component.png rename to src/main/resources/assets/create/textures/item/precision_mechanism.png From b87e707b49854088055c0ee85897cc849086725f Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Tue, 6 Jul 2021 01:16:44 +0200 Subject: [PATCH 017/118] Bell Voxelshapes --- .../java/com/simibubi/create/AllShapes.java | 10 +++- .../curiosities/bell/AbstractBellBlock.java | 48 +++++++++++-------- 2 files changed, 36 insertions(+), 22 deletions(-) diff --git a/src/main/java/com/simibubi/create/AllShapes.java b/src/main/java/com/simibubi/create/AllShapes.java index 6ffb1c167..c642695e1 100644 --- a/src/main/java/com/simibubi/create/AllShapes.java +++ b/src/main/java/com/simibubi/create/AllShapes.java @@ -108,7 +108,15 @@ public class AllShapes { PUMP = shape(2, 0, 2, 14, 5, 14).add(4, 0, 4, 12, 16, 12) .add(3, 12, 3, 13, 16, 13) .forDirectional(Direction.UP), - CRUSHING_WHEEL_CONTROLLER_COLLISION = shape(0, 0, 0, 16, 13, 16).forDirectional(Direction.DOWN) + CRUSHING_WHEEL_CONTROLLER_COLLISION = shape(0, 0, 0, 16, 13, 16).forDirectional(Direction.DOWN), + + BELL_FLOOR = shape(0, 0, 2, 16, 12, 14).forHorizontal(SOUTH), + BELL_WALL = shape(4, 4, 8, 12, 12, 16).add(3, 1, 3, 13, 13, 13) + .forHorizontal(SOUTH), + BELL_DOUBLE_WALL = shape(4, 4, 0, 12, 12, 16).add(3, 1, 3, 13, 13, 13) + .forHorizontal(SOUTH), + BELL_CEILING = shape(0, 4, 2, 16, 16, 14).add(3, 1, 3, 13, 13, 13) + .forHorizontal(SOUTH) ; diff --git a/src/main/java/com/simibubi/create/content/curiosities/bell/AbstractBellBlock.java b/src/main/java/com/simibubi/create/content/curiosities/bell/AbstractBellBlock.java index 36d98baa4..2b74cdd75 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/bell/AbstractBellBlock.java +++ b/src/main/java/com/simibubi/create/content/curiosities/bell/AbstractBellBlock.java @@ -2,6 +2,7 @@ package com.simibubi.create.content.curiosities.bell; import javax.annotation.Nullable; +import com.simibubi.create.AllShapes; import com.simibubi.create.foundation.block.ITE; import net.minecraft.block.BellBlock; @@ -31,26 +32,31 @@ public abstract class AbstractBellBlock exten return null; } - protected VoxelShape getShape(BlockState state) { - return VoxelShapes.fullCube(); - } - - @Override - public VoxelShape getCollisionShape(BlockState state, IBlockReader reader, BlockPos pos, ISelectionContext selection) { - return this.getShape(state); - } - @Override public VoxelShape getShape(BlockState state, IBlockReader reader, BlockPos pos, ISelectionContext selection) { - return this.getShape(state); + Direction facing = state.get(field_220133_a); + switch (state.get(field_220134_b)) { + case CEILING: + return AllShapes.BELL_CEILING.get(facing); + case DOUBLE_WALL: + return AllShapes.BELL_DOUBLE_WALL.get(facing); + case FLOOR: + return AllShapes.BELL_FLOOR.get(facing); + case SINGLE_WALL: + return AllShapes.BELL_WALL.get(facing); + default: + return VoxelShapes.fullCube(); + } } @Override - public boolean ring(World world, BlockState state, BlockRayTraceResult hit, @Nullable PlayerEntity player, boolean flag) { + public boolean ring(World world, BlockState state, BlockRayTraceResult hit, @Nullable PlayerEntity player, + boolean flag) { BlockPos pos = hit.getPos(); Direction direction = hit.getFace(); if (direction == null) - direction = world.getBlockState(pos).get(field_220133_a); + direction = world.getBlockState(pos) + .get(field_220133_a); if (!this.canRingFrom(state, direction, hit.getHitVec().y - pos.getY())) return false; @@ -76,15 +82,15 @@ public abstract class AbstractBellBlock exten Direction direction = state.get(field_220133_a); BellAttachment bellAttachment = state.get(field_220134_b); - switch(bellAttachment) { - case FLOOR: - case CEILING: - return direction.getAxis() == hitDir.getAxis(); - case SINGLE_WALL: - case DOUBLE_WALL: - return direction.getAxis() != hitDir.getAxis(); - default: - return false; + switch (bellAttachment) { + case FLOOR: + case CEILING: + return direction.getAxis() == hitDir.getAxis(); + case SINGLE_WALL: + case DOUBLE_WALL: + return direction.getAxis() != hitDir.getAxis(); + default: + return false; } } From b13ba431fbd213b215b770f397ed21075bc6b989 Mon Sep 17 00:00:00 2001 From: grimmauld Date: Tue, 6 Jul 2021 10:40:10 +0200 Subject: [PATCH 018/118] This change does not have to be here --- src/main/java/com/simibubi/create/AllBlocks.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/simibubi/create/AllBlocks.java b/src/main/java/com/simibubi/create/AllBlocks.java index ed3d59709..d4dcfa5c2 100644 --- a/src/main/java/com/simibubi/create/AllBlocks.java +++ b/src/main/java/com/simibubi/create/AllBlocks.java @@ -368,7 +368,7 @@ public class AllBlocks { public static final BlockEntry WATER_WHEEL = REGISTRATE.block("water_wheel", WaterWheelBlock::new) .initialProperties(SharedProperties::wooden) - .properties(Block.Properties::nonOpaque) + .properties(AbstractBlock.Properties::nonOpaque) .blockstate(BlockStateGen.directionalBlockProviderIgnoresWaterlogged(false)) .addLayer(() -> RenderType::getCutoutMipped) .transform(StressConfigDefaults.setCapacity(16.0)) From e5e633c87ed30aff2116c0df0137704b1478ae8b Mon Sep 17 00:00:00 2001 From: AeolianOwl <65692042+AeolianOwl@users.noreply.github.com> Date: Tue, 6 Jul 2021 04:36:25 -0500 Subject: [PATCH 019/118] Compressed panoramas (#1896) --- .../gui/title/background/panorama_0.png | Bin 389620 -> 337592 bytes .../gui/title/background/panorama_1.png | Bin 1814153 -> 981569 bytes .../gui/title/background/panorama_2.png | Bin 424254 -> 373176 bytes .../gui/title/background/panorama_3.png | Bin 408437 -> 358904 bytes .../gui/title/background/panorama_4.png | Bin 356773 -> 311792 bytes .../gui/title/background/panorama_5.png | Bin 311929 -> 261532 bytes 6 files changed, 0 insertions(+), 0 deletions(-) diff --git a/src/main/resources/assets/create/textures/gui/title/background/panorama_0.png b/src/main/resources/assets/create/textures/gui/title/background/panorama_0.png index 2a955e5f8c60046cc57882c30acd1122d4b8e5a5..4fd7a23168e715e2d9c00792f6eef6bfdc5c770b 100644 GIT binary patch literal 337592 zcmV(*K;FNJP)!|r9e}5iEQ4-M)=%oBvHglI!-vNT0WD`oW{g$ zy)YHvew=WvEeZ^p;~u)_ct9?ULxm3<-t1HJ5NF zj`QrCD3uWaIK@&*NLapI5>4OMJHMs3-SPsC%cdic>B5fLGZ@H-AkHCD$-Hf=fc-qW zMUSVn-<)!Hx@qPze0%A|!-RpV>9<3=#|y)b1y>((pMzwy)e6kv=q35&IRz`TKuBFV)26Zt=<+WaYo>XYZ5(^VqB^g4 z*Id?p|94D1dA;rXakp)-Z?P>GMGqKB8C>SnWexjA5$y@_$6x>czn=iA<~jZcaU6A? z7VzQ=&u_Vc6xzO?T2Xm@itDDr+pj+V$M3%rdf|oVfBO07ufF{9-FM&p>6--5!2?`qhsUMew%W zn3VMIfB)S_b|H|zl#0yKAVQC5FwX_YK_m!6gDiPA&gC56|DEpF-MIOWe?OI?^-uqMN^mT>yv+0I+eCJ@ zb<+|Un*#Fm{Cv5*(-B*?37MAOSMWuz6FK9hgz9@-XGN5j6DCTV=5?CX@qidpz&UN& zCG}W77ZCgU_A->m{Qmt%&FYL=T9ER5SQ~HD)YG=i)T`|0j4z)*C8u64m*Jy&*&f!e z4Z`a4``e7!dVSc=sWT}#6O=#%5yC9BuVi7hkYD1)%t^rBjL2hpiDu%)j50#6C4mh} zgfza@+FP>;jHqrD;7DuvcfeeeWy1j#g|GM4g4!_rR@7=rRLoc!Bp^o1`96fM-bxdE z7(D^|rQ@?18kI^9x=A_pk7pT5%%fxmDhYi=Sm8VGhfgzsF2~d1u5T1%A~ni7Z1Q<& zb-GQ;YRX$2H<=4wDgw6Snii!B$a02?B&pKUhHRP?L~2DxtQoFKq?M4FuDnYzlsHEk z-jFGvkpl|sOfQ;B1~y4LV=_$`Ic{L4%~_Rxpru+tx>1a$5Jo%VL7_~wb418!sv@&W zQkhv+yYY`i=ge9lq9mKsG@;1!RDAb|3Xs4~Nf23x_@P4L7XW9XGi3&|tOx7DuSgkq z&bgA`&>~CMnQ9s-JSReD<=;R&cbI%Dad|EZ9&iPA3Bi(ZDfBcX`>rqmBf-#~L|^1o z7bs>~Pm6?!%3b%}@SR3r<_uZqrGCjr?-qrhKwI4&F{?fwv9pYmjR|v&6JDkxe?jPz z&=f^HyBj$unYJ}B*j9?)l4V==gB_l ztf8!yQJaEH6fqN%js_wbvh^jlveFv689+suO#7sWbN&7{y8$do9Zc_6ad*GKoh%aLgV)D_-mYm+WMb4>nR8 z)>`Jsjyr%%Z!9b@GSfi%f>Ri&U{Po@tGO**qb~G9|G>KPuseBDkivy`seEs>NFwuC zV=TA|Px?WeU>-ffR^67akYqJu)AyPE=4D~-q<36vyr(RU64hq6{8l~K+&&7qhx*eS zQB0YcAdRZpx-{GZKS*hEa)%7mYiuD;OTZSh+ae7YxTIDxjJf)xBmD|x)~sYe1*B-d z70STiB2ywrDFlXi!x_rNQq&LkoG(IymV8((zi6E*63$2<%)Ig>e{NeGS7@!7VHb0E z)xw8?kfu#`C!#iF^fRoOt}u;xCLiXgiKCdzS#nB_no5E?^O6!GUnPUcwoD@BTfX2Q zS!tLkU}sYjgV`La=HW&iSW-0;^3kA&8G^uiFdG3&wKT&>QMwxjWmb|9$pR{r@SON= zPwJ{NUE!&4aW=&J}W{xktJ3RLN`hMN7yB|Jt3}WI{tmD|e$gHnnEdAtluL=U`4kdOOKq){GWSES zy9u4}FS1Ilws3#-m{GXrDw;2+{?Q|}_+|GR(40RUHEXgeQLI?eFlmr6Xo5hH-J_5*sDtk&{etea+!Dfhf`mh$rCeca3uuI0;LZL_elg+Vv8xZ!^JZhfKba~ zhE835*3f__m=Y+|*1M@b^W}0dYp2c9ntfRp?ZNBrKA271Sy41aQBFOnKP{)vAk+8& z!1*MOj53em)#}o~L4yTx%S#kK#(dciws|S#+xcd)!MN~Q-j9G7-qcv|#KG{?a_Dm@ zn0nKl#B|52vuL_jZi&_~rHn1qpRC62viG>-1tsAZ}i)6n(x;x8PXh zM;-3a&k9HyN37eX&U-v1C%8#@sTOk|ms&2}R;ycz$Fc8orlK9oS`sjQ`6LT7uKOEc zc2Iy^hbPRW8X>UwQ3jgRZ{R;~I<1zyIFdVK>E~4V6kBb(-$UFz>Zk!U(C;YLU?+~4Gn`z zKIx5@QDTft@z!M0*ovfMZdv#UPxYe-c^JF&`)v#-2TG=SU9f66do?-RF-Bo1(4Ntk zz1ASgI{JY4F@-9lULitZ^*oc=J}ye)PPPAa?<0%Cx%ca`5b;bZMePPERwbeZzE%J! zN6+lxXlU8%9bqE-7Z(C6ve`A4%QeZwZ>hm^Rd5dS1fniNTC#g#Th7H*$RvWC&U`)_ zZ0FAIF_-CXQ#yxi!6DZz#)!b?bH~XW_+8Eisks<{Erp;tE%;_?Fqp)bm70mqhasV7 zl<{jaok<0Q`y10i2}VaMzl*xd4CAMM0v#Z@8i+KRH+RUy+&vm9yu}PPMxy)4V4dd% z3YMXOsVrhCQVqW6Q#Qh4fpz8**udN*U8<}HkEsipmtl?o8LGTG)`eamC}$^prV!&` zL&+ogKKd~OK#3bD<+5OI5xmW`GT2~el7Y@9$}BO?+$rGxuoPbgd!=T~5!2aqF?6FR z$ghs?Wa&9iF9|FPWIvA?JsUg_X(ymS&vD|&nyR`X4tDbE&iB_+%k$&4ii*~w+Yf&J zy0rCIpRcXf^XzZ?%evNKBYQ|6KI~y#wpFf|r7^`dcjgx6(N8=3I4wn!r-$v!!{hVA z_3>fd7J0g?skJY-OdG`m0}_e)ahYAYD}@n-5}XBf@IT z0Y{3J+s*&9HVF^JiH1Z_c00%JERMACEGR=#5mCw#a2;n+W_xFkWv!x)NfoGIvHqY2 z0;P}~)JiBI%635zi+SXemASaEW@#Q&&`^aSz=ty5B~LP0z6j=%Kz4z3##t#`9sTnh zV?RdkHmd-IeDtHAqlJT3xHpx{((>a_c*7mYJT!~CHqoUeAliG+LhKP!qH|BUnX5`m zqT^O}Gsofr2A8{ae>?b%j1ff!84=H0LMocH9){7w4=$I~6(xCP9z@^!pr0xXH~nQ% z+Q%Qq$pfV#g38w-Ni_iaREzuc5Z3XE{~s&^Sq& zP%)$?Uhn4nF!ESbOExMqe=$5X)5abi*Cq=%U?2Iyfqt2mDdyVsQWdIeqQ6pZiIb<` zYt`45A^Eg5-;WOJGkFH3tGC|Efkz1cs6wh-lR%)Y08pW?Pp*5>hBTG;b3|I5PMv;= zub#&2-D;IvAHxehhJaS28Xw)FTOqEZ>{)YW{>rjOakoNieT4H&QZ0Ynvbf)lo?q&w z_kqlj*Vy!M==QT4sMXRcwq6MkzTQq?0fHS0rg2%@CYepg*>W1e(*TO6OH1a|;5=kNP=?gKB;}EN#Qm&eDK_gfza`cHkog^HQmRPeEjETqUYGpGpSpi%8ZU!_$w)k&jaPLU2OLQ-=D zD0jRLI1<1jw*Zbu5tXlk#4o60k4Bus(xExzl??Q*`TLYuso+hbNtL>i*#~#w2ih;o zZR#b#m+@Wn<6xgp(RK<@`Bk%O=%-TGNAZyhGmm@--|jR>!|Bp`p=Ac^3XkGRjx;=^ z6mXrp6PZ3Y7YZ0V^J<3sT&c}>h@2j^kJhA>YV2HYR)n$eDmHRRJjil8jr;yI?RvGP zlJ>fbT&jNbgrnw6JlahZ!}+4taSvY}jK@`*)b1cS!n$-NPz1t#T_a;0+kR=Se7p=o^e)yvmOy_9;t|HxC2%(_9SZ*(L$@R#1x23(GMlqGTD{Ff8 z44E91rg26aM0~n;#+5*-ELNrGN*iKIL7$Etb2M2G{*HyH3NW?~xQRI8yRmF-k|Am( z2F^Z;l!XrPjT#(%a=PllmG~jpEK6uQ&g_^DM@oXgs*2ThUCC0wQS4Wr9-bfbuF1!3 zIC`X1R(VdrvX;uyF%X)1;T54@zWj^@I(mv&W4fR5Xp)Mkv*bo%wb^H>(NLx4b+(t6m#Q+8K4k+Sg+PNjNBCjxUdg5=^ZS%6!fPg5 zggT;>Sv=={Ruy;iNj&R*9(D3_YBsDyC(lS=m*oKEJ+m!P&vRgQ?mr+e;uC2^Its#u(f$jG~$-B^^o5vb_v z3rc1`2foD_mew>+Z(ss65_ZXQ1iQbiExE$kOVqb>RLEY}wP8=Q-MST(xEu$m?k}vbL{FtH@n=o=6KT z2tK(puKmO!$~Mc-*>l_I`9L6RQ%(imK%${N5d4(iG^NX9cny0WRw9-v+or|Kx)hQ^ zOp7#uoFfKJxDlgEUC`D)de01#vQ&p)c)xpD*)`?FpROVe`u;}-r@jrZNo!<<#t3JO zeYm#f??+11!U9VzUa}CWp-H?Sq+Gz~R<}h6Km*Lr&@EE0uy|M(1|f~EQr>ne&^)hA zOU0LlfWo_1ec3zj4GVnfMbOPcdAZ=UK_A>P+}3$@&NY;tVpNASF-^e3x@YqA`RS3W zpmS^pJ4iK-VSF=Gi((@?RDR(3%40uHpj?&!vitP#g*W~9J7UILq`9lV|NDPkmlgV9 zxqW>6@MZt2Km3hij=ol&o*urvywy|%`ma1aee5413G|z+KTmoA*y^9QqnMw|iiWQ7 zaJ`bONfF}cZ?Es)`_a!IF57Sa#;-W0dy`^CI3e+>vLF3>Kl*7c_1Av&%b)z=Zv*JG zU%b50D}|qq4ocG%ug{gqtk5bkk~yxYVHiVtymQuvPdb}9K-IzUKOz3a8P0w-^%cC$ zit}=u5p*O>nBZ;<3vFEr*1H3rsQ8L3@QD4^Vxw zN-}^9778>k^)51CaS>yoO7c;2Lqb%%_}MKC2e?%B=i%{@8lF!%HBew+tSh?Rz;N!l zA!@E82Xa#=?lei0T|(j@4?*<3tQb3E#4wAnYg=%j^Xo>$M<3G!MCo0|nH>!b#J82H6WS8uMo!n>OG^Y|?|uQoV%cimftqh>;g1MZ?A|M`_q3mg4Ois!_1dT!*_W$!7xVK+4C+;Fa#` zEYi7LK>arC#!xwSS0V05y2dciw`KkVMdrL}+l0C~kxUE^W9<%Q3a9@>b~B;5Cv%^hCF4N`xZs@tF~GdXi1 zC!KVQ*^Ien<#%EQboXG6uqs&`w@3?gHd)Gj3{PeWsu8xrMP@cE-%HQRCz!&p<3<^k zyM2KOhm&)=L;L?UpXTb;fH9&+CZMHKo^4wJXZPXPR#&Uxb@nqBgX?qmONAnC z37?xx>{8YRk-=ale4kqOgjk00HDy$8n2<2;|4K_Kuyb)|sdCjhW4H@&c*l{&dwJOx zd<>~M444(P#WEabxgG46#rXexY3iLc!UybaRRo8vi-^$bC$snBqvwYTE}i`7XTSKA znOTi?AG9g7^V3-~nwut)KzC^}qi2zt^W<X$^%MW=Ih9K$#aEy!Rs$;=HfrsVYBRU_pp( zs~hXYgw70om&pGPtE~K~*ty?tc=*T12XS|+EJ>|e_=48frmLif)WT^sp+8V!rc&g2 z`fQ8}-GUS9TR*wuR;5+(`{AJP^l;r;tG(O%`@uZcJFGfJ_tb|n4#KOYfeFCT-CCOv zV-Bb>!pw6aSi3gNh$ngDg~M5JgRJwq3bkymH}7LqcUM&mNH{mB-dqkJd;s%UQs%~% z6h-Jkwkk&o59XPz1fhyrZA}uvSwo$-0%(i$fT(T z@0db6h@($uwSntUlkeu{Wzmtz&;1LupPDk<-4-&ZvK!=Z4F}$%4t)L6R;e+fxM4t` zb~NgM-p8oHv8$rkOnS?M@*@cg2Z~m@$dmXFi`o7V^F?!9rqZSYfkhKBP!MlK!O~G( z`~MMfUF(taHdF*iNi*I}@AVbZllQ+)y~-P;CtIgTB*A<*2V5tA^LjkikRS-0f@W;@ zfV8E8qhHZb09Iki6`dWWWhpRu7IWQ?0Vo;C{*ANwBd$uXVyedIqt6PVBm?Onty!tW zCJ}#cjVg#xS@5vn;Q6rxiQTb}{6+%v?>jZ3v7(>ysO-w|4v_20aCN{~EUT`#c1m_^ z+KcCkUgK4?7Z(W>HJSBBgNZ^6z?UtQ(pmEgYK!;bdL)!&rbX-7vAN;nF<~weqo#)$ z#iFlK)INNIxYF6X@gEc&PgZL-G+|F6U`Eyq#+q(uBHvv1yDK-7^$-%gd-wjkFW+F- z^WTrP_H!*;)_nIfKWc5Il+h^Tk7Gg$rx^gZX;Wy`*#7bNiU6nPDU+}`eXMpr8dXue z!JbEDvGus0=h=zBV@+@?)TIwt^2J#IW|4YUL{>D$Ij5ig@OuW7{eK^xaITlHy;+6z z!Yl#r&-!SMB}M2qXVd*WpO5}xz8!hb zV>p4YP`mu^f3+_ToM^@(q-moEX7-ggyBB%6-=1gSA&5Zs5m0t|Wh`Ja;06;*CXzDF zquNM85exBv04qzzI?ZycHZ~;?UARs;I66w^NG0kNAhgy{5fUhl5~ul|=q5rYw1IUl zln3I8bs3xINMgvo=nZ1#+Noe%iUxl}4uQrVVp!d#f0C6b74i|-gC)#);(daFG8*Md zMy)J-r5ufoI1Nv>75dQxcxf=EiL4!OIH1P_A$XXGljMxS2{tNto=sV~4Eha%3*w`O zN|IS=s+eebwZ=1=OIf#l8Nzfap%jQBfW0q2)c{sbJt%eq%{KaA<@j3r&>N3jszNitG*n z3$_#@%#*?OUk5o7>OBo+K0s?MVn?@%+i5bSQ4Ep#jEzU_5X7%t__ z%UcG1@0D=|ko)YTUbpK}ElPV;=B(NKC1rl$6VeMw@^At@KnHj&BLc8YadFS<00E2p zJ1d1QWmRs2AS{>-1^;5N%{QsNi@Y-T)HV}Kz?VD)+@-|VFs@^&3&Wb&+(cZn6r19u zS1^`5FL+8QH!KMWS;jc`oVy&}G=f*mT{8d#K{-#y^qwhSh^$D|M*{DN#x&Zx`EkIV zGyhZU9fSu1QzZ^b-izLAEo7N+CbrqA5?2;@?$&~LQ1<398BGl8Y~fM{SRajZXNk0q zOAL2GlG&jc(MBPE5JbcXhGJC7UNml7EUbg4vF9KZ@k>=g0dElL zWqiGFnh~NOp03fqth#Bbt)H$uNgcUP!56HnZ823b89vB=R)prsDa6mN>a=q2g3{D7EQ2G@K zJb++{f)D=YHIq2``1FA}7w;_6{aJB?4vHRDq09ti4#+1u>{d2JI07Hf%419iWrHR% zi-um%!bk0T*?l#$YUAb#QMnW(e{5VpClk)L(d)S^Xl-ds{p#gST#WdEvprZ~ZtDx( zJ&)TR?F8o?Nzoyhv%h9fz|3UJez|b;z*%o_iP*kfjA|D1kUCra!S}zr{?+TYvTic* zY+RLg*>@w`zQ~%3Ay+T-nIm;k=gkpBB0>qYM%+2iGDLeHIjjGrYUp$tWH$=V3cWlF zMA^2|hLy59qGWSm408eoQIMjdOf-Nskxm?*HDYV3`E1o65%+6rZrikGqVx_L&EkkG zs&$Qg#z-S;&=QMDs0}oW^d+Q96jKY`B)ISyu1N6F1x&ybrFIVgc#!ygNa3&NC25${ zfp}1%{gA~m8)^RRx9;;?)-78?WL4?Lhyypeu8J@N4vUG|B&_@ukm2L*Z zwf~{$fU#lq9np_R^EaSC8p9Ck=vkHWN2-o;5>F3B_MC0BXSJjD%bK?0cR)3v!KjY0 zYEY&!QtK(}Qf(A5?pIzUujRv0ap&TqrH#O>Xl7|CW;LZua)jwG>Cx==tS|ejJdV)- zdr}4fZ-inyMn-fS8R}|OMvFkg;V&Yr4RclNi)x5jz*smCe=H_A+`BFh8;`T)ODQTR z9KyOloIQkLJP9Ny?t8Lqwf2l=WgG2i2~|VLQLr7Ud>J;T*8PI?`+xw1V}i{>sRN{i z?+iaK{t6V0#I66{?19on(PTTI(Ne%NR8_LW!p;Z>=>+{tE6bkc)3coeiXgn2Vrf!1 zA)^)xYt^eL1l|U8?Z$O}QPSD}3 z2jkjhVSz|-K66bpdM4WAbch{ zV`FCAE^`hH6h1806?FjTNzBneneB#IL;XmlAf<^$rToi!!K)+j@pnc)HmA`|Aei6|%DJgcM4&QPf5L^tmouvgMn@5V9&mxv@WbC|YNiqm}3^nVEFIVVEhya&W z6)bbUAC;Fz8(jbtz!G8-(_AKd4k`MYF|q}~u8c$S~ttadJk8Jket_kVfrtDSpkK4MmBBsUx(QgXoSG*s{D%CfQ9TaClRv?&&KVvwsaY!v;3Z8*UXWpiU($@ znK%N)uu=q`vC*IOdJu^Ry8o7NFcUO-qX}Wz}J{01>xE ztx0pj3Kf0r*5I0^S43HDq0PmVjx0pU@$kH@++T)w$LL9_OItNkVgp%u{*Wbvp>*us zrL4|-b(i1F!zri}rKe7l3DODo5P1-f@%edr2|~@g7&N8JzU7X9gn3F%%&Wm`!Zeah zbIH8jAN9_@yH;#{PRF=W$E!O=7M=)kOb(=OX3H7#Bn|ScNkp3P6)Fdt9WbtEF>5V zZ)N}rer!-*Zu2IjU`t4E8);alWECy;3iy$qrCPAIjp{~ZNBaHI8Lwa!Wac3 zcl3^Ej8f^<2ku2Z@KXR6q^dfkqE0&_iVZhY@9@;4@Df4%r0EczW8p@<7nuD}`vz@6 zMHn$g_EG{PLP?^k5dh{|Qjoof(QYSXCqz-EJ66JatIW^F+?z#;O0!V|lmxOorn?;}ARKp^Kv~!T{!@(Gbw5B8UjrB%(vtfO8e~BSB7^6ukdHBhWO+69|c> z7^uP0zS?-657+x!&+1oSzkR45{`D1~$B=1g%4wrB;dnm$B)9M)Oq?IZ5R_aZz?F#B zOHeA@PAsnp(m5zr{y0sn5)4dSu@*Qq+sGh;Vu(G+#5sMA6WZ|<)XL6*95BDk5mM~3 z_`yk14bmDoeITAFP$XnnKLKqqnYI&%%7 z66CnvXY|q2)LysY=v6MMHU|WvPE1DC1z>Acx@>}fGG1kziCOE&I_Ix*gj*T~CW8j$ z2@@jkT){_>2}X6ZN3~VGdCYhq=7+6hFN!&N+1Of!;ky~H!Rb>6dqKgnplrRQ^IZHQ z$Vt<#$Iu9_aJdkVsKU04hAW4!W3xkI45s^?;%>z61-R@)NV`gUNyZ^_`_v@IMnVFfH zA1&|jG*lO4W<&t84!{dwh~zpU3>M$?TAf>^SsRx|;6j~~7KK!?14dW-Zf<-GmI_kJ)<`QdW? z$*;Z!%SgEOumZ0-R9q$r>eR^OMTLESE``(limB-7bcYX;-o1OrBJ{)WRzsviyevI} zDbc09QAsE$*6lq>VaIy6>ue=H_-}pm0m0JCqQquwM)i0iFPkD0-DqYmytei8=&Wo! z1mB$wDf+X|s2;Cd?@d_PoG)ylhi4JsZCNlE%toIwS?B0^nN1UkhZE6$m2o&6f^)3J z#eC^T5s7f2{8#oPNH+0YfUqSOs9;R5Ox3Ch^bT26xgdfdgN_l6#1Rh#NF`)UG11z2 z*NEW&VvmG+4ka_aSfwXFs!<^&Nc~m2j?Kk0z0*w=4P#ew*`;sQjm?cLT$s^B%w z#XhKE`Vc3G8k<^-S+%1N!?__yWMk-MZ3Mdg$W2!3D3Qo1qaBLbQPs$j{Hcwb({#N) z)#;E&t~D7_gOQ<1i-Sn*8r(Cni)qo;6Yu=mfbP1`Mnd))nj$Q^l5o5!MI(;`Z4zxr zIC>R20j(0y;_RQj0smx**^Jk$mmZY4%zO-;@B=D*VTh7-W)W|>c zaEt}#tMNWC9fBXW4i2@-z|3AYNhwWrVjfoWbhHMz%mrVe>%-24xo#I{40GVZWp9BK zWLzfx%_Nn>Q$}_tLg7ULO6pUK99`Whq02A6O`soo)AO=euNWI z$nRK%lM{2KMTq0Gwd7hdlL6juycx&XDbllFIvyuSaAQtfY80HOeB4f(8WFcsjO@KCPNZuRu@q>^oDo%zkKPIl&os4jmn&d#^cwY8 zeQ=XM$>E5KqUYK~Kz@ga0wEIt?gF3!Ev%_Tj;u0-Jge#ntX&i~SZ4^aQI(_a=s!T6 zuwoXlB0i&sEGlE7)(;tTY~2GSi3HyESq?wpP$i?q8k$%oc5X_IHsU#ju*j}z$sC0B z(}vz|#$9JmUs2=xwCXOj@hmE0zbd$y`1OXHyjheP8vS5C*)+y#WZvc4MTnymw3vDq zg87WIiVIZrs!xGnPMMNftO496jg7%Rgp)F>g+yWJ1f>sEWiZ_?3TB&?-u|g|H^EWA zfymJf^BFq>%I_d&OR*C8C%J*zV3`5-Jm=+s{R)18FcUB_Hyw&>Ug$pO#TDbcI+hG* zc5|(GasG{#E@tkT_lsccOMEhzZ{xRvZ{>7Tmwee*8R5ZQAI2*I|1JI>e90@x4G^DT z=uCXnlM~w9jd)FQ$0`mn?R>x80%pGx+%H@*bUN#zqCMt4n~(eA!4W3tmbnD02%8F= zl*T3?5HKn7F3~dW` z`{)zJ8lrg7(5A+un0dAu3fF}pIXgRZSJ z6jT7udn)b5DQsN(vfE3;#&eih2Tvy|V(-(Ue9SsHADLRiy%gv7K6h=HuoF1z(g&ek zXVekH_ubLEt{Z#^RjH`T-W=r%{nO#y{ZbjZz~ypIk1tkvZd!)H<;;g^*Pji zGRzewxjKX|Pu8##UWbn{RY;_kOz)x;4~5k&r>{VZzN++t+`}Ru z2QfSqxNblzQN;4}NSqlsyXPq*9HuPzkWEQ$M;pc~Cf&My?n@MML!Zquh*77Vfl+Hb zkYwy#^$ard$VhSKY}gLgaXM6=tZmA>l?v`O>!W2ug)YL_!|g%}YTYx6l%WU&#D*=M zqmdx(&a$~O#S%g6p)w3%2PC!XdoaaPvAcR9|&1@I<^&&Cz!yXA~Myl6Z zTf*04M!Hs9x0%$>9Ds)5sd3tpw|zruZx5nF$(CvVGmf0T>FL}|#rvuF=hB2cbaY%@ zXOwXAoCz$A4j2zvhmTRNol%Vt_BYJx=xvNVh7uD#m4Yl+D9+ZIjO*Y}mY9_w4>X9} z+hmA6TD%5lMN~$^!2sConYqJ@(Sm}K_y05{?q^2Tt0;?OenwDc1GztLU8l(qGk&fJ zL>YDgSBNq|p|0-=f-z%BR_{nF4RWS}lpP;`Yl0i?*cHa>kWKlogN7^n1SXp2P5?l9 z+55KhMn+16wK-G<;zmitxJsE5c4a}W&BO=SWXU(nFXpAKH%~309A0yw2x)5@F}+$Q zs-r+%Vb++2OZST+T zxSUGPTEmuAoOxi|a~A=f=hB{7ME zgk>L+K){>ZJXmqs;AF|yQ&4@oh%fLNiS?EDW5a3q+ zW@4282W5kMRHCuvs<;ssd8q8t*x9tX&J<2%$N2VnG?#2~Jh}q^+4GLL%N8qw8(Z|a zECR3KoWVFY7w-UvG;()UdS)OlL{^z0psBvw(GdVi+=z$c>3F;;oZ#Fio_Q~sq&s+> zm?C))U=FLCI{icH7dZnV#*O0V+v9~h5#cVl-~g}OpC@7io}3R+WxOHf1t<^2`jNNH zHSc^Vi|Mq_ZdJN4?M)BnAfEEM{K}q>dlD2Gp`6<3{}p8iEBuM@Zza>z4@Leom&$JM z=dBiU9-bvqT$G>uQ=(+frSmdl*U0sM?5otZEA~}^eTAptLaB*2nu(CZz?8Pp-SmSl zeY`x*gwpf|WAKTOGmRaq!4BhZcy`C;+jH529zJlFp=~!tEs)qv!4?v<+cPBGp}r5- zm03O;`9+t!xH_h0=&+wwep|MM^2NYjr$c-gwr zHWsfBdd)g0wm2USxcR~f5uOB?`V<<)wYCu8-~dS4l_LwcA$b7UnABV1m?UP%QJLes z@gZ5VcF-htnJnOBcta}Yd(P-ikccpt>hS*Ro~JmgejnuX^@)_lS1!(GPrDt^p;eow zsBYo7!{g5be%ZHxcl#LtSvGJ-P_)ihv4;!c+VGXb5@hEA{^23_y}gS%-Ww6D4;*On z;vha}f1XQlK6?m5i6;se=^}fFDvv~062SLE$?T(oE?~i7Dzt#iG5YY$UP4+w;Kj{c zimMeDeFhgGiAi69L%5Kh=87wMl!32#jBg4c@e5FPk$UaPa^GlJ}0}KguQc0bBX+PGRCpyqpg#@%K#IrIVF5tq_pHYps5Fs`*N6F_Y_eK zG*&nB;VxoQ?|}GRGI_C3uFd##k$-llT>EHK0RW9RO?(bGBTsWWmdUGda7Jw+Z-|Ut zFCNk1IdiQxg<=nsx|OGzP8FJnPAt}1tR%v*j?b5z*hb^R<6N<>0(B#5M)W6Qgky

R&cy-&FXm_+q``X$V zDkvAz-an_Z9+{L@pd{8NdA**YnmC{uDO*R}DEZ}!Tk8bCXX7x}VnL&ZG1hg=hl$~| z%Z|}G1cC+>&QGw%x=Uvyt}2e=^R5%oQKz!Ar1L{Hraf-aH;duhjiMZ5+Z%9+SiY}& zZe#v)cV_WUi~j}}xPz1wFF?QYk zjdu{vkH{9eA{9w-v)Bu1)L?0%xElJs%EgWU+tZ+)Xp_09YD{ zWSm{Um`f2`B`sYqO<+Zkw=UKQ6RW3=C2yj9))GUZ>l<4X-8y=lIO#E5TF)__=5$?U zYc@zc63=l82C1 z;^@JivM{G&9m#GPi!XFoTqJIv_~+T-qK2+u%S23v(dX@~&3Wx2f@$9UbMWwVhu=i` zG}dE-=!)37V0yLhgPrQkYuumuo&=#~C5ULQo`@&K88z33bb=C+89z}R$*RTa+D>2Q ziRmJ(gb)&ueVpZEDzS^0g~m>{V@*QyFLKu*ZR(teX_~NX73sLAii!xbDcYAR_jfPD zz@dG#Sh|`l=f%bj>V!K)IC)4LYrhiY?5Orm(@8=Hm8QuU(|npr-QB)<^yL|{5;wC| z3Ck*&_fA`1MdY%!qJoG&zWv!psUAQ2@%o`Gk5VpMbR{+&d(Od75!-$Mf|HBsbgK>UuTwFHgG|oS;R^ zKCq8p=8}j)-?Z1-TcbXgZCGHFL6ZA|qB8b3Be7uZ8Ar$pXyu0%XainoVi z_@1bxpg?SI4~GO-fXB;~2U>DFy}T@a0E@mWr|8SdQ>T4U3JvQ1!%xOQ3C}H&a!Who$e932`Iv&pxno z0uwEqn1^oN+T0Y=E;X~AF_9UrW9ifa(tUSC#|g|2vZi1<{^zZeOiCFtOlmN#ahz*w zq$Jq^yXvUX_3xPb$AzF<@=yN_2uB zwqnt2UH1;ByC$hR7jr81bk5D3A)?O>CLP?s^%JR?p}tH;ju9t z?32dpx*8$yFb>ri;peUQ-gH2c3};-|o>C;=H(ELs3a>@Ur`SzspzY;jE8s_op#8IM zb9ENu?!%eZwQ--YH@vf<-B;cBbV4-Y7d&kR)Zw!EY}=)RuK3_9dzWTK#BOi*ondOJ7=8`gT%++QuO~KCdP{1Ww!PKebPKc_K637 zEgwaG?!-VQXzV-=MlHffxDCDl5Isf7Rys^aa?7^fw}vid%*7zONu~AP*R5Tar>pf& zsX0OSpn7w7VaQ>z-FBFd$HVPh>tucSVXq@3IS=csUY7Ug<#KJzAh&IaAyNXN)cWBk zAN}xKALd<3?ZcP%L-l;Uwl-3dXwq19v&2b7WRC|3w!Uh1-N@(xh1+${&fVD&U*8p^ z*{I?z<9%ZF#MQxn^PKWITGv@;a;A+55?}fc%WJZ;kN|k|P<>8^*j&Z;xu^WMWyk9W zuiA|xJyEHhc+mBF@G z#pt|S&os0y-?SB%!P?Y%6kfT5_s#pnO<_~DU|XB>aPJhHKGpP%ES`$JdriDQmJa(l z96H{0*)}!J+uR$UHHo!I>q?V85`7Sp;NcZm%PJzWFq5?+0McMlG~^~d#{{Hh*{nlh`*cwr zwJyeKT6o_1#CzrFy!(*4s5e&O1aN@N^|cFi5QoH(09>eRM={H}fs*3ZrLnW;%KWy0 z*C*jD9($J=Z?<*&LbKcyD; zluH#u_n717fVC~p1(!-Zz;BE6Fjd_wOv_=aF3{ssP{;tFV|3XJ!^4EQk^{Z<{(k41 zN8Uqb(6|AMeKfannM+3DG6aX>hDo;5oUzu(vQ{)>$KjAM7%2Pxdsc=Fwin>ug$|Ra z2Lh4ghSmXDj3q$q43#30VH|Nuq|=m&XCvEsLcI&Db~oJ>3^}C|F>n`0-{i_bM0gJn z|K4Ur`z1$nVLBZ%bG*m*3xBxgtiwKFXu8%Gdhv5%a*pTxn^7J9*`B`p6rnXn}uoXSA#C? zPh)-7+R7R4q1_HI2+{7&3c4+;fOoX#OabTOpPOd}~ z6sV#eqqB6n#n*V?twmP`Z$K9_%=qlnxJcyOTXc6)_5#Yg7_L9$#fGLYJ)IBIIrEn7H@pG@*xM7jaX zc{QbU1Ot<(-Q0X`a#PFjiESr}V>mk>CR4#=5$U8!(*2%2dzc}z;j1Kws2_Digu%S- z;!&;ZsL4xS)!0>%u8Ikfb=xQ#=|yUComYP+Z$Bl@8G1tR6rx?r4I|2g-wB(O*~9Xm zU~g9~*_1)I%?06iOpWOifNFxOTo##SL_&SR8594^J6C3RcvQ**Iz?fh^{_-?<>mWw z1ZY`sZHjmF!w%ILs~66z;CKG8PXiNaA4*})?jIpJ-tU8k``Y)?g$-%0?;Z8f9Tst! zg?-vt@w>A3&G@n$hDz!+qSrIe5|fG7!RFt79ANCLg0j!j+-nQRy7|WHg%@@TwD3Hs zL92tDcP%X>6hWnLqt!=2DnO=3MV??)W;qVJY4p?&ab9FrC8P%U56i@(aby;O*VEwe^*Z zWUjNh)<6D7f5dg6L~o$QsGw^6?DeA@ZB2jYqZ?d<4uYl7Z5|x2M*+N zcR-$NArq7F| zOKr&7@kCmhnn0H_2r zlNc`2DIjYd-7w}U1vT0IZ4EJjc!Qy6MPnZ8($#om1dxxr9pf2+$F&FIG#8A(jS_9H zRfD!R`cP1X4FpH{7*i_4?rlnG4?7XIBwpS|8cr#Am+QcL4I{ePP6i3Eq?k+KEKe=@ z2zrD`?+vS9B9s*p63Pj%-Q&6qnhqnms3{LHOY=z3-UiYDFJi2Dm^6@d3^ogwpy-$~ zUIXtHM!ecR=+tEzF~a90KAEhWF?MulTrAs&H#Mn!I=iH`_v@+#VIkw8nGF4Gk;_{qg8VetxNj7Yd@NS5Idv*|V3k7h z*_sAT)$q@3)$Iu5u9l$5nnqEt=2g-F%iH2QPRWHQ+4fh<*Lj|8Ehx~v@&@1h^jtV=Xoe?+;5PE42ySGwaGxFwzfXWv3tUH~2at zk~AV9i^DhyIFa9Xk45LgCxCf8x)W8acD^Ii0_{DR7pB);q(Ndu;M^j9#qT77ODyFe z?>l(u!?PDvM07XEav}dHE~vK)+ENt~*T$^YIS+ghpBCp#qqBQ7Q3)15%4~-TTR};W z+r(xN8+6&h_eBP1GC^c?X#0WMZ^|cZMV>b~&80=nVqv+KylTgB8W)k7z?Dnoq_xXF zMd0#bZJ=ukm6vPlrzzv$Qs;&l$EKXuo>LSxQTW@MWVi<8RN^XZ7wNSbm5@oQ)hi`z zjztgD0HJrOIk}V~?AK=uYccamDIZH*J07mvA&o;$Thknq(S(ri((dQl<6IK=Q;BiI z^_LiP!Bw;N=D>mnS# z<0E9Ux9do|tDbsPWyXvb@MbTYC|=e%v&wf5C!+oH6S1afmr_{B)vUd#%XeV5!D#t5VIiSFzt9yK&sskS` zcHkuooxL4R;MI_)nfaNYFA2v3)oUGG58C3h!Ufk#t_a9(In# zx!jg~2-t~#`}coNlhfpdRJy&n8PJKmUYBiKQ%+yKElS@Q;e5ZPiM_3Yfk9A&@f1=N zNG1O4SC^QRVy|`SDWzY2bt%x>kS_bil<7!G`*CgWumnb10|&AD_Q2LeISj{^`;Z!ofjtC3BQ}Jh8SS{lg(5|ObMQxmJ*%0KZ z%5DT>!Z*!0_7t-FNxO~zUfu3pE>J(tmu0BVv$cIZqa>Tf`K$r?G;ravcNJ7sXcWu# z0_T;e*ayI?4P8Z;A>?FX*MuT0y_3DE&B!#MpTlu8s4IJ?01FF8^Com-83`j}_^n7X z6F<_^x*3L!-9KDPDw+I zz_0t#S(Je2J>>xl8igGVpdD>B!;*Yp#G54^=E0+7FqW}GLeZV(kP5Vxaio)BJ}9{bj;}N5)=o_gr_$ZdMhSkzEq!iU z(1dEv>Dgu8J`~`&l80NKJ7s_anXpAj)paa}Pt2`=-OV{C(J<1@qY^&*&FS#zs}Cvl zMo{bVx=pyDHwQ|aJC}pGaT6^`3~!kdMtoi5Ygs#0w{MS?z3a43=#{%9VVtkcWr6VR z`7nR~``;hhKAV=)bil0onyDNes>?q{&L3`*S?_hN@A8I-N|dn5(l{8F_9JMVsPWSt%rFQa-E5` zf?ByZkfR@{y5sQP{q`!x-J4t;{~26!QU*}ch?ZLLAt6T9XE+){{ZO;yF7atZc8OGU z8u__XK*yLt$!Cl!rW8D-Gqdbp&{Sc<2qdTD1EebW(cr;1*w!>@{! zPElOu`$vqrq9x)Vb~u-GG})C$0Cf?ceD9+e5m*b46@A*QgL))RxpyiJx?cMNGh;0C6pPp$d+~j+QDw5Junf*R&UQzVs8_V(ca3~l}cH5xTb{T z-LxS|`$rAj&Qm4P`HQ@d{7c@n!hn%ktqbPM`hq_}R}--}%+y+rK#e zo&WFCU(Vlp9bdi9AAAu%`t-BUPWK;9^L+dA#fz8sQ$3RXG2kTO^e78!PU7~gi&vZ| zwC_GXOit||$Q|*x(F?{O4i;k=kDwW4vfVZ-A;IP1@FG)I&?lU#}LgZU}T=&?{;DMV(q9OBX zhkCqAvfMh3as=FxBl3;<0M6MNzN02ZZSf*{m2)PSw&%~Zhk zwwQXz=vAcHMxdR5!Ll~SBFEFsvbMuCReR~uVz_q6fiu`72DlGSf)xR9Im^mB;(rYB z1UHqAKspyTRHO?Oc)U<+7^<*)f(Ak9z1sl{&3$La1@y+f(M1t1n>#iA*XYiECj4Uc zI?T*b71cv}GBjLgs}AC|H6K?7UWPt8O~4=$nicdd z=Yj@wv&%9McN?WaW7V1^cDln{(+2cXFa(l#D~qiO?PPA{3c^DVosNCzIHMU8@+uvU zk{J_@w)MrnRuF!I8=OTX(&Xu9~%Qbf)2r(9Vx4)`Z{? zZ$h?|NsGym|Wsi>TyTOw4fIT_%zrYJq{$}8}IbG^2YS)WS%o4gv8c{?-q{F5V6!o@(D^EBENcFNd&xd#HKcmgK$*3h{9|k721n`Kw6ALm0 zKDR)|$pQBNbPq(IwZqwWDC45y)&JP-82~k`(&wC$_m!NrR4Dt5aboQ;Wy>EsAV0_O zsfDEuM52=yOLWiD?k2lCv^o4Eg7$|0^63e~@zv`PAFeGW+41XmxCa?QuT0s)pzstF zCS*^kF0CDFc4>Px?m(ve?Jjzn_BH=p1ndLAOaL7w-h;PS-bThuh+|n<9Ik_ z7z1wWf_fNDyV*pv3+~tl@fyM*<~+szo$39L+ebX)xUOjZ@^?&M{9=2#j?zZ{?s)n- z9s9`jaEjOW5DII3d58HgJwH5{K=dKZr^Ju;^j4^`d>&WEdr}#N(Kb=d^BW5+zOl8q z^8rGn;b~immcDv5;bx5MB?Kr<O{Ddx*b%BdsG7RD$+-=ANSorQqkI!)7E7l&#{CcK|7_mqyM-$ z3)U~E#fwn24yw^B)==74j z+7#y>6^xKJ5}BCiL^0|KDI7|Zk<*xq592*;t_ak{d*wG%0rMp0y#aZDC{L>x-XMmm zJH&v=sWomeLpLxTtYetoj6j>7Y$o+AJ@a{0L4GE2ba<^DveOIzm|IXg&1SPqVH`_H zgEao^By{gwT^n&(zOx6$`?1 zPWzBwDrIIuihT(;f$6LZ%M^_Iafq{q z7^gT$`p|I%D`MUF`$PC^@a4AY1Wi*xsArihPR1BY!^`GHw`jw-k2xr0mwaHQOYys4 ztuN#ATsEh}qAwg8Qi~bV>f}j#3&aQQ2U9v*7||2SvuZ@U1=VvF>E26#NNUay3&|Mw za}o_N$Crz|4YC7fEB3_~|E~VI|~r__J`tBVdYM)E?I5Z~s1s%i-xM{ru}bx}EI*!zS~YJ7kHM5<~uu0Xa5{2uq^RZ#3z+plG8H)|B}zA@OtfEd=QM`-fwq7g#BxD(IlZg zf+V;%3!IMpJiV*CCxUANx{7(&Z-LW~JVWe`tRvd&Ka{*R4d|d*m8cs@8@T?tl9wNL zUh|%?>@s#MPzBu;>u^>XqHfy*gJZ`jKTknYgl_4bxH)GVmGm;S;1JoO&lxFM={y19 zU7i9dOPt4~$_?!YQZ!PK&txPPU+KJ2K41u`#DS#=Z0S-0#(>{oey8?8Ir7G=6`ywp zD1*)Q&>^4q6cl4ue_N15lUNP>oV%UIP;PjT@QB#sNIn;W2Vg{7wlEw$?y9k`PK&h9rvCHJowa_0fflHm#ms=WcGTN0f$dSmz55;pTNJF-txW@LSLC~E99<(l1 z>3cVHpJXJVTMEV=K5lN|twrlHv^vMYn{NcRrGr{>; z)$_TDz%Nt217t3zh~RkE0QVwJi1MQ+?_|ktX33)sIMwd9=&fAe(hk<*G5aS%Rz^D@ zXH4G+Q zHqUh`5H#Sh92wv6O<%^l@30?$`wTBJvMEJERerLK;T;RX&oWEcjkj%i(=Zh`*KHJH zFhzurHu2G1UL3Qqr3*oS)&aZbhc^eG2X}=nT&8u918rCkDPj;6p<&ATP!ePqK;dQp z9WJrZ$+7U%09-;A@6M*)1G?|JSl~~fyN^}LfnsHfmOxGTIKoitLoZ;4=w9dZLp)cb zK7g?|KzD>N(ak0T)E)$nWeg6#9SusmO(|~I3uPJ;;*tQpjr;7Db1IdgmxM^R9{3JE z9!y|*6Qx*r4BEkwIN8&|*+#yiJnI6Ie6n}qm^FBb?QP+m?dPO*1$+) z0gKC78}m_KF<*}ZVNL}R9$nEtPeP9+BkOG<+54+5EO9qaiB)#W1a5e*0g5VIHa%h! zzom51UJ~$@x>WVBd3(D?f2<(56R6BFR0NxWzSZ$?l-?7RWbwdyvE(Sfy1x%b<5?81 z@Zrl_cutLn^OjtW#>4;j zcbys5!f*Yi*f}oph@)!T7PuMq8l@;SJok)*Mgyz?L-&&d2^mYVgi%DGB2>kq zi|pEUf-ozm(IE-x)#$0jg~E&O?ZPnQM-X1vXBBv*2I^v4z$(^>&aRPfZNAI{QJ!}? z6bGgfbW;g%ce7(EF?Dn*H!VK7dl9DXq)`r7+4?|Y?fQWk6Nc0Sk|C}hjyR)g!)QzE z?7}#AT#-w7(82qSCz37i(3o$$OoKuB!dv0{}AX|p3TpC0$81M|)lx8Wo;<)3KUd_g6DQl8K*fSANo@@!aVPAT7= zQo+d|{X>$`R$ktZWwlpNI^U#ivlLhG_|WZ9m5h^*`I2kvcmzOpBB%Bf{{P^t?z zf@DP{X5hL-#BJ0og577=o=u`m7C00Z{f&S(O=%afQ4O3~d3kr*CzBizz{Nz17jtstBcnIEtah}!>~va_sCDT35I_y*b8 z!LflkoAE{3_g5Hr;1Kf5IA$Y664#wZd0IE!Q7l!3_#$Pi3!gU4)Om@AYE95f?>Uj) z>RGUP1E?&WIXj8cY7+T*fMS#%*9`}q0yA7fEfQv zG%~K4^m#x6JOQYDfSJJ6W#JON#uzs$SX+x|95U4d@hqEYO9)T2{I(TrFMEGG2OW1e z6PdnWy?xKfd7MuMr}J`9W^@~nh@{d`GZd~vk2KT5C6C{a}P zC|L){fh8_$_m3I$@v`NdkaVWa2JiKF$`DQW&tytWs*~O>EJYtb>)PcdKyzZ~{1~>;A$>IwUI@W9nUr z!SWTrkq#m~#>^zlE_D@ZW#YpS)?}BtaGet5bYE_z`XP1Ihm!3`#BQ+5?B3J7`rL%Ttu zsS9ZW3>NX>3Oh%-pQ(2Zjya{08_#pXR4IW=nxh@O+KkmF&!$sk@039%Y`Ctp9YYMn zwtQSWo-Pw9*ONF}i9I?XA8M4brv=%J+Pkiz3tL^zAGf(&Kgf%r0c#((Ge!wP?*nkI zVLI6sXzO#Ex8Ry75vltS(p22N=ep5VQ@ietQSj4I?C!Ng{gvdGJd)ZC?7b<@Ufr>u zLro~gIfm+3dxS0ZT6w?L`e7<#02|CxwP=ef1_et=? z-Aota7pa3q8TPe)PRhG!pIdb?~dNpA4!hQ+@UF?|b*V z*EBWg0uXtwr-C2j-SVF4bN)FFX?H&h^UY3YLMAkz)cAN_e(xt=SkJypcXxM22=4O! z@jW6~_1B|lANn5;zkKUvu?i_T*C0_uN#@E3o=K?Gd4F@q=J)yX#HoBy5_t@oZ=KDo zbUBYE>)q+rt}YrwvAp?kWY_wAd}6Y-8H{NPbhi__q7-QYjiK)9 z`E1=Pl86^Kr<{`XetudVTW92VCaS9y+}<2bYoNig8F9|KM3fmNOaiHWO$c5ta1>Df zyMwyTkz$ON)nepA=ptw~f@VVzTab9Yag8FWN9B=2u z$fddB9^Qg-#GS<$WSg;plZ_lh+EZOLHZcw!YT1Y5Ck?)-Dvx`|Or zawG##U4V|R@hpt?nJHoHcBGIxG^wOK)P*#BS^V2i>s~G;MXe3L#4!4?# zrLjNfc`l{&z8Pldzsu^Hoi9?ye132EhE-Uy$aP(bLvL{4K^_f0uxdKp+=k_T+UCNs zXjhpjWuJG+$)h!+@LE)G>aWQ|(@$>R53#8QF+S*xM(P*mWP^03Okt(+~8-R*Hl~ti2 z9husjt`4Jpgeix60`N=FOAx%~d?>18+4|Wg$fV?aGnL78YhCsKx{1Yz7!nnc3}r}E z3cGe;-wcF=2sJI=#5Eg*6IYdMNrGkluu2>{m1K;)nX{n;>-4;h1-da{ug2YWEkdEX zlOO2Lksh3|eo~+#`2mAni)9%4XySJ`w`!Q^g+jWDjCY&$)=0gt7!t~?S9v3@(8=Kk;dBJr=n6^<~Ky0@ik)2$-m=at! zU5%3C4LZ_bx^frWs<7^by^EHT-RC2uW$U;>441KFZ-kXvi2agsCc^SvAj!pKW7iLe z?pa%MVe{#7ZHHssl=4cHPGB&!^}V6=-DBOr(d*-8XFjQh96lf!wDfXYjd=@!}xL+>g9WUn(i(lf4Vw`%+vPG9}QYHkdaVku@I@2?W zO}fJ{luk~#3Uy`~rJ&HpZelKs<}OiYOAcR$ zzhgN}b?x1NIUSGdc6X>eyg9$bc~0`agvP%#xHsQd1Gp(I)OxIW^f74lr4aSpG&Pkd zb__JHwbKf2&CMY_ry@|f37Z<&RZ?j7^GVeXQKZ1tR+0wnLj`5oR%y&pH#9}VxNQAc z^K2fL-i0^Js-Vs4?_&4xP}8+ZQ>|8`X|737qRiGt-c=a9T1vfjn?RWB*1HVpEsDw2 z<$0>xwlPawnwq9Bt1}c6I4TTL;R0k@Myv9}RJP51X>|CRk1mD!vLJ%SaFUdn?!eIB zu~L4CWM{1xZ)FnNZ>Q=6(t9xKQ|VnF4h+w<<{+EMW)+@v;+%hlHx=|;RVC;l-%_cvjKh(F=_0XR*S#IT@XBYeYIV;h^1 z+mlfK8ap%94&Gv~z(4k(F)(C%JJ+k{k$5DxQ~Jbu0M?Q|{rQ{|g3!YlXXv`z zr2F^O1c~dFH^M31J{qLN(YL<+=5PPDssZIznzue5=b!!L=k($@+-t&smaZp3Yd23V zry<_+{KJ89C@N{PBp=QjP@W-6X|2bc|MVaGp$VPp`10-J!_y=G~Rx{^RvMtZw8m-?Jp@{n~XKxHXg(JRNUqoscAF z5iz@}<-DwC9^vKnQMULK-spo!X1z@`It3xA(d<=wvL8vYJ=Uj)>$hp zB3;Mbp&B8thg_}dJH)hLj(5W_&7nk8t5}d-)&|_hn<}n1B4JDxJM1J& zGS9P+ke<^iPnUH|(PrdfB-?Y&1?gl6>Z4&^Qd3eRWoT>{W{wPx(2t$;H`T+a{%$;Q?%FkmsQh z(VJ+F%hp&OQcWtB(7H(Tabj0D*<*5v$`H}QllMIN)4rAMeiP~R^l zJIgTx7L?p$_iTXtPPVt~mdW@uLajD0u>skN5=V9UcTq82=*!HZ)5(GbKzplG*UU)RfU9**4Hzx?%& zF7qJ;+Xt&3o4h*CMiZ5G&s0x9i!1rs4q1$V8doYtig`cfHa zbbtYIzHr3*P>@CLfRaY$>gZ`YRx*T1FGwFNssKQ`sD?8NMe^vzJ}j2&vv2?doG-t@ ze^58UCjdw#rXofQ+WWTa*#x0xsJ7i7n%kZBP-Q5lWqDGnL+5@AlfNgqFJnjd$*w^G zvFjo^M$5k)$lPhhURi+5?BgiLHr|t6udYWTqU5kJzFJ5ah!~?g7B|KxQMwUNHb5?4z7K8kt8%L86!4AkOY3 z-FoKYhCgVFaU|OxurpVImNyA-9T@zKEY>{{b5%)XyL`mEM3X>ljW-8kZ2dU4TFbgx za5znsBtNo_*kcqtps6^E+LhRRX)>sNJ|i5{_mr-XJ4ca+ z);=)7|3O*WTabw{YYgx8cp|@|$Y+`9(`rjw1#2N5HBwa_}`Qk;(zxSn|5aPDG(@GwB1>BR>h=P>@!fBrF?VmM`)O8Ulw2s%RU zbIq`YF)+-P!%_sqe-d7sr>#3hXfLvM6988PA!9T=58px9!l)1m)Bj&84S)0W`rEXRlL>CeqoyIr&w>3$xvE~QrSzL0h$NA(;f>_v}%!zU}LZRn4XFGYT!f6b9Gs?_;b z<4*RP(m6zKBwnVHx|;fK0iPj9obCz@?mh~(BJ!qGa5O!&HbCqZoF49f!WNCjT*g!k zkv>l4ylzWVb0(=tbzCJ)_!*3QC+>yT#Lk8i67U`dzVjvxDJZ7en=>R-ZM(ENyP@_2NNQ+I1}@R9W#(zwWYvCzS&ZdM zs09UM5c~ALHsKYz+bGk@$E_jSvK$s$RM-K06Ty9WWln_QVO^w!9F1eDFaag2nhKC{ z&?(u~fo9{lSw9kQp(vV2T2s1(x@0NU=~6fq^9|Z$JX%gV?haFHqlpafY)9Ar6PI{E zp=qB#qe=IEYuwlrsU`QScLhmd-JUvkK^Yz>CcqwWb_p%vlILwndbg;O3I-f=QwzbpY6}c$$ z>EVD&>@N^2y*3^E?t#PBFz4z6N=hB0{$`%ma79FhstrQA98^waQTF zAHP>TvQ5@`+(csm)tl1^jsl%^R#%y(i5;_LT`BYQ{&7v9w{5-ixGA*+7rYp4YYO)1 zTyME*YN>=tZ%?maquGUmMq*4V9j@)rrD0TAcLNW7c>lx|QL3j(E)NFF+SdZ^Q!cQg|_=(7RrtrU~j2GClqrIvUKj$S#>u zAx>A4rE)x2Dbd=+X1J06CdLUivt%ADapkP4Ebk-qz;l= zW}Y&Dw$W(>tCVV@m#sHK+c7*ft%;F^RUW^wR|CU=YpT#QOYP!`1^Yx2M+J2+=iyk# zhyp)ITPUq1_22T(2`MNG7J)nv)WqR^lc5!OlX#)Fu=7me7V>`|WKYsaJGmk#68@)-pSX13` zuO`&kpzw!AB+*nw$k_n2G*!TT>EUU$$6o5OTD$x8`zIp{9_LzTlB(`+@3?hezj@6D z?=;P=k6{GICy>?coS13>&r&bTmA5|UDX8XBLOuMk(=X!f%lPV0U(V^TzvcJ`^Tz(T zI*CD~EC=2qIcKO9uPdstI{ozN}ithUL`?sK~NX>=sc&PQ7HRoafV=T~cm?t!T zb(3vVO9H1{Xz|-xbCfK_DO1#0wze^KFWJTLYXOkG@0_aRvYf5D%Yo7uuoPcmsv(mL0iD0lf;o0ym%4lQXKEmd?^=>SODQs`e zg`Citj)dZapZ_ZTu!;q%{K^6pu9m zhe#u%Lz*{rt8)> zYT!hahFJFk+;#TBd8feVl&;%mKZ3M$Ysw%>9x6emo$R=qAWpVX9@frS>K!I~wLl66 zR+G}3ks(>GIwBuKe1MV%~j|aW%xDdmH=FwnNemw*k(PONfp)Nb4TzogSMx zi{p!cwH@0x9WdlRx6bvAHz7Vjh?IyA*(?;qM$QaAw9{LNUL>OWF3^YG(2V1hV5jS$ z?HCNDb}0+yqMxXCglgM+Lgyyr1Y!IF_t{vypQv+|9c5x^2uKWrDK0d%yR_`mEABDL zzOE`+2PJ2!R`K6)r*x^4KK=K30p36GG*8(#&O#Qj?qrXB(swu0R<>!VUzmcrPRqPdXz(JQ>Iv)cd?uu4e%J$~VM$KUowDKnS zF?y=VxSK0MdDZa_#*DndfG*1exf$ z8JX4RW1tMRYEbZ|s*V3x1xi)t5z@;SFF(33kMCcXI&Ipu;|*XcFvMpYCgYEe7jxbR z!N!B(GF)ytrwmghLBf)=d1kd;D$RkvBZMs*t7ufgJOeiDH@c6_C6+`Qv%TGWST3{8 zFas`WO$Ob*U@hR8Jz?_EIk>X4;j*`T!+ilRpP{^cnlj|oVT{-1ymh`vEj&6#w+Nn6 zu}tmUTL>%?Vxre=Hb`q(pScsR;kBXIopBzYrb6i-E83Q3@it>R38i&2rmxNCqs*Yok`?D@p!6J)TN*NFKFJ)>|Bj3+L5~ z59qA({^4EkjrBaevL4RoaDGIz5riEnWjY>DwnIw&6Z6mI?qr5g^=`=0`_48%`YPst z{A9UEo^*W^%Y<{Sj`nWo`yda)+|Resw7=gl&;reX8uu2@{K2bN#u_&#>d!5JzVdf0JS2~Y0}NLZCf0S zvzwe%L|PP|O!HT)uAMjQEPJTTo;>m3!Dx5VUJB#;BTa<9BX1} z)`xb4k;w-Al`g3u#jq+$oTKjWMw>yBq?i{Q?+i{GXio5iajwPzuYjyG zJ_?R(G9HMWLJXA02fcT_SHeT8s|q&HQ{TEMvimfpJUpwUFRj*M=>JL`h2)Z&K35GQ zP0(PYSjuLOGSOv66vB%UOsbI}%1_xZw%s;NTTO{<0cAbrouz>#3DW!hi;r{3H;0=< z0Bt~$za%@+_SQw~1-Infvgw~T3C5_pmZrK}@b=d3Vz3ufrvjdvy>i*M~p z_cmsNx2JM{nr;qRfDt`DUTZE*F^0@y1D_X~%iiQC!8Q7(aD+|OLk{KdA`+KB5xb5f4))EQHrbq5AP2lMYSwPU>9H-L|PkVe3XgTWQS9m<6PUfFPQ z(Vg=wJ6JaSs{CENvF)#cZ~BV&>n|De8pm1$T^b3Noo19f1#i+t*G>bAor|<%vp%wz z)0{arPmxVsf#u_sAs#sp*=rG8W5-401bhGzX)b@w)1>FI959;@m_cXb&iw8!0 z3jZ$#L7W~tiPJ|$LHEHXghdZ4Y*E09`>|TbP8Ly4~I+{heoDN zJn0#UgsK{I8>5oLnlS0Z4nqvLIlW(0G2_}*ZHF^y!o^G>HXw^6sT1PlR1OO+b}+E< zeR3!gf6RQ1a7eY0(GjV*5_cSyyPeHgt-HQ$gux4Yp56K2Zt3RZQ;0>$iGQYq0fz(4 zIJ|pn(b+O-nvc^wU(Od(AmeFbeS8__OqFn9TJ?42iBbK z$7# zmzgH|?H(~)%P}&8=YfW#Ln3ra68zykT_dZRamr()Gs`_a+qeF(>XXagk=jUd4xN=) z_wo!*a0lO#CMNpCdGrr+<(O}>z;>txgyiJ)5br~zx*e|rur3YOON#K{_argxV&dKm z_Rc+i-UkJ8O4vs}Se*>khc;79sEy_2-E6;1g$e^Mj&-W~v_MRx=NNzXtKWlQLpjzL zb_#>@Gj^3^jMwVZ(|K!ar!rmX7FWw`5M0pj-o9@)AIGDV+rO{MPow;9WTxpT;CTNK zPFJM9Wwa(a+YO-$RF`0x`=%kKF5%r9oYPU)Q7$59X5kRSB(a zVsDqqR3nmL8<+>)jEL2BBRw5h1jwMVr=d43pmrLJNI9V^FPDY2@3v)Y;4CGLJsEwYwr#V$Ab{^N>?n456ttWuY7?_7PjnHi z|J}P9DZvi+VlvoCOSm!W(vj^0@p&0K!mprbRx%G&D)kB#n!`NiqSjl${m<-XwQe~Fy*fv z4QM}3**TDOjR~osxPasFm=Qq*0Oefl0m>qrAn3*s#K{A5k^(^sP7X1Lk=wnB?j)dO>L9U1o8bT-t;OTCE(x5g0mJU=v1h zCdD8NHavf}yS1sn%p@VJ8oRlACC`UZ%eJQ*SkF+7TXGW7TuE;6KDq1T04?pHCt6L8 zmgxaDo^1&cLR-* z69(VLw%MG#?%KiJEZ!c4qF^=NY4W!2=%i*4D&b--DYvmYEe$!s5T%)kil!9aJv>db zf&A~!Ut7O5r*wN{ZvFDb{WRV3>0!EFzxwLy*I&P}J5$EtE=rK2zOe5kttz*l&iVcy z7R+Mpv+=mpFn%+B^atsK_hGt^?ex31+fVLt)R!my>c6w@V_;4)R2?7PfAsEBx{fyT zP2N5aCrx>J=%Zc2K9h+wPYy>soyimDTGMs8V76hr$S;YBpD$13M>;F)xq8~QrT7IG zpp!j0*L}v`wDoIF#tC@3Y+t=G&t7rl3r!sxR~~T-$N2;NZoj#?abJPRmg;!>ZaF`m zQDf?KgsDR~dGhT?IV0hs;96|g3xyYpm4P0RSbI2RA9P462Umv#bi(W2u)!>KfI`}{ z)J59c2GK(hB*nJ1v&;42{mp>H7qy(DU(ufVCtf9sdh$Ei?s{$`kFqt#H|kC^z>Jl0 zEnm9Kww!Y+sMBooWZr>I4fUQmjS9|8(ro*Dvg7aZy3$!`h2FA4$agqt0AECHdEKN= ziB|H|dzx!uqhRT>%CIgMSOkd9u?@YO=NQ7pg1XUx)+WsBkAxC3C?bml45eSzewaC_ zY<4Yltwfz1NL7HcqcGefRJ^v$&qL0jzllcL!R#~NvxwyxAnZBT$CW?GEQiVeJc4i!<~RJ2;P1 zP2>gk-q$|nDWU5c)dIBjkETOuGR{k*$|cMJjh4nC?8#N zx87Yvm1TLPW+k9D)w5lHK<8gAzC6r z_0k&08vI~^-@Qxv?AVCAUQi2GaP*eangE4l{yoHJFG*3cRriZ8KYw-q0SF{{?Lr6^ z$3q}IEJFLA=M0g=U(|zcTVaV`jkCpyn(9=>?axyByY>FF{`vd%u>HT%4+`8V9<`1z zlZpKLiStkFRRuO>QXX$EH8|^cd=YN!+Ntf2tj!ff_qi^%#5h~(NXSk-B$!P9SCV(} z8D!T}1vcZg)y{PAGBrvhh7fW4IWcC>#!cVs{e0BK32As2rnJf@vbWy6ze_}o;Dwul zaaK?re_{6s@fCx`48l9UWeJ_6NwkpBm`!eP$MQ#L@u?2#N9N@? zRoF60SR;Hkq=)kuAl%DpNq2b;myzJS6lrZ1%TOC*;xu&ut%$Q)h4KOHgZYD+FdHLy z?Hv;xXovP9k#6H8NU#WLf({{2{aT`sDI!K+sl`r?N}U>~t{CNG>x8G2*;xm)cV4!s z=9<%0+F%PZ8`*Ict%a_&qfSXWsvqz;OLcQp<_UbBhm6l?#VG14a#ajj zb2>HSgh)k7k}W58l1DSC9 zYG9+xsc6X^;Bgn|e)qhC+{$dwPblox>YV(gUlBQhOsVNZziUR0gkvPL0Z*`(bD|Eq z?iHwa4p=Lx1JZb_RRs5&%Hi1+ScliAyVN{sO3$$W4j~Bz2T=3utr%&fyQYUr=gclY z$nEj)NI6CyG$vFp=!mX4O>~fRXHFoS4TBntGPx=aT^(#neNV|F}iQCxCn*MZHR8ZSmGdG+tnMQhiLxy*jG5|?M$@!o;<*CYj%lUG9&i) zNz^IzGsV&WU5wjF1Hd6t&HT`;N&R%pIr-o-&|QBvyUa!5*l`95*}IBc8#$UY<6jv=8J4!+yy@%y@LE^KyzOn`;eJM}bpzyT`O|lNvIU}U9 z9;TGwk-PNHZeIs?X(c~$kP&X&%4&i$vUT^39@x4Cax9DJ)-~I+$85#3wJ~gjZJ4n2 z-jO}T*!|oUI?4utYhX?dWxVLlO$N>jJsB_yTWE0{oK=qN7rQTWN?_M8N;~k|hYYuS zwlB9X+2kyeU>SR#4iIY2HUL5TTelO7f_s$y7!yh8#!u~*Q)6Uul+S?$aU@bTT<5(*+SoY;iz`)z*yS<`~s@&fJJ;IG~E3u>s~t>{&@U z3L6Gk$*G>$^2GiZ*+nl$sKp-3hNd6K?iB|_50bUC-g9C%J=qo4kTHx(uut~sjRay# z>ka;yb&Qp#UCiro;C_IK>#h`ueMG1x3imcFdP;efMxNJ?1IDdT~pL?6NEy z#Q4e>wst$m8fhjB6{}s5H&jjY1dDyh!)=`f{J{B6EG}y=#Ij!LfkOh#R*G!Ze7mj9QpW0umk!hheTc znXhk@VIrEVs`deGr4rLPfOGk{b@o3gGE75Y)zI-b)~;!m<(!X)iL**9>oVA=r(Eoq z8M^gh70*a>9trkmuDl8cLn_v$dL|rsU1g9iPlY8r_ZHK zIb*saZfX~we0qPtBO%j#x~nLj35O4$t!BU%GP08PIoMlxUSBr_qgSk|n~G|{#fLN0 zIOr=!xi?A}ZLNdg!Gu;hk22I5Ek{&giaO?Yw%0$et&6n*VjS>bhzYgbe}a&a?WU5oR46R7vgVf~7qaT+RfP?~B`JT0*z=0!QriKm9Yyw|vtT*F@}qGb2N)SJ63Y5X&S z+vXlrE{TgD@Y=%fIb|C$0Y}Qz?)2dTOt44X{R1$+X0Ustj=#pKW(rO;&}M4My>)6y z(h=aQ^s#c1mH=f$pi8hOsBE^48Ez@M^M;Tm6E%RrizRmKr$Sfjut>* z#9GqUM$Sx20(9S`GS(W5V}_2HXcB8`f@(?U-jv)H9OfrR$97!HrKeG@Ll;;0G+^B; zD#ycZjHctyrQ;98G42p{9#PXY<-yUX0%%^X*BYKLID4XFH&p{RFAWwb?2HNIox{hRgtBv_a}jjjo$!1PcDF9s-CB37%?lr&n()caC|%~` zslgXs4E7S(RCox*rp-GXSeU|`^!`wWhnB5h8R7x z4?##=mbDLAjffx_dP(dokM-;Eu>CK7>qTpCF6Rr3i@?UeRTX0VEq434T~ zG>NC0)KiGKz*yZyX%HjfRjVvaOF@RUYjOfX^#QO098#Vv^>^Kw1bvi4sWPMh54Rc% zV$t?5L(=oot+K6XbxwseZ8c= zjI}p+n^`-5GKhgoy?Ml)4L-2cvUTCYBj8jxYK7zjI2$OoI$*jsR>uz^!R8$JzW|U+`qI3_cVAa1-t7v-*?F0^kY&v8O>-(QS94_m4_w?vzvHM6d zvnmu$=f4R4Gmr5*!Fm9I`{ngJo>+E=5!KKX)YF}%_J?`AeECulK^2s+uKJUoe*T-k z|I_>1)8FH-{%NM?Jou@K#g@^V_mBUdzwtXE#BY82>W}{V4=54$=G|LnGWFOi`gXnq z-HOnq8g{13=vU8rH4roz@1K6fOdJV5gJUW&0Tnl1OR(y^H(W2{EOLYd(jxPHYMkm6 zr!bW3{BpTGcQ+bVatl`v^=_3K02dD|ppo7BW|$4@wPE+P^a;LZ> z3dwAwprIF$GD1sM+!UNkb`$XG84{RH$7Wx|md=!$hQPyAE?a}nPnM<|s?s@82RkYl zHH%0IfX1PsngNxioRJIoc-KB#W@1mhv&R+6NK`1BQGQV7x-h-R>1Mc`(0C_gpT8sd zB2tQON~yWH7WGh*VAT~!J!OcQ1JeqZ-UC2t6)n(<-r(;ajcvUg~Y zS^Rz>$Bx(|K+Mr|9_9K5;a`OvZZ_8UFuKg?|| zO=8UGOf_$^pE6eiD!jd0iuVq#`rz9Pa07FSon6V_0L9D|wUOAlHmlQ! z)x~BZY1u;bB!}{eo`>c_#81h-vL9id?XeSu-*=i2e$Rz_nC1Ad^7z$2st!+C zHi*5#-0i`Dd_k&2ykZ9UN2JEpzIZb@(e48&g_0W+ENv@XM~nkAPc+UNyI#4J4tKna>hLQNWHtVun&lqx+{_O6(VbG3neisr9P~9Dg+evslzEH%MiQEHFpGxg!+>w zGfq%#>I)L)@_t9S)IflARf)<$Q-v8DX7)Nr!mL9ZO5FmEO5H7Mi-xwlX{g4YTs%TL z76sG|xgjTJCKyM7k@C2#!p^1w2B%~Y2vm`K?KbDL(@o)Bv!ll=LIO(A%;dVT7{->H za@s`WZZ+J+>8Ygrx@axl5%ZUHQHGcce_l0*oUM4`jOK{Rr#drQU#er}4MUNysJFN` zX^ss+3rXl+;fOiU9g+Z{iN9c2AB!%`4kzpA?mnG;p zOq2bJ*n#%pN3W!J^Tm9;G(0%j$M~n4sixZdwl;uA38_`8bGE_fe(mG!+u!}_*meBg z&wigF7cqwS9X+-<9O`(EK-3I&<-z8b-L1{4H!tov|4JG!MJH$p6_G$HxwxPjqCqlR zBXM9jPsZujA z7dH-a9Mm561h*;loW*e}m(JuH?vPR(x&!d6JsD(ct$o`hJbOCsHk8a=>V%&E-du6I z^B{AZuZ%UobWd3Xl9$B!=;ujS_gx8*0)S}xP<%uR7Cb8(R`>~3=x*CwZ0UL4EArP0b8lA)sonMx6mcr&JQj_4O zhyl$v`%PlRq-u3lSO>?;D&$f#VG@8t`^jxH1Q%W%t6UeaP{C_&CO1uRgQ+q>>M)Ys z)g_I?;Z#b=8RF+LLv7m$_+)ev1{UdQgwyT)yLWFPZo_5(GAZ0WVoD;eNPH+|>zhx+ zP}ovNF4P7jcaiD@&WJ<+Vk-3GgbpPX3|^ei1Sl zae)!?sWFiwJ)PJ)fIrevRTIr>pYeQ{{8Brbs2;q3ox1Jwx6uJyyu3Ykrl>gR*ol>Z zmz{Fl*ptC8lhMrp&GB&T26|d#h9c)pxB|V*33tM^PAvE@t8oRE19ui zkn&68WeU59M~)_zGkMj_B+RQHCt7jZqGRXel4K>XpV^iTdgWw&xC96u*Lk-|zdIiO z!GE_uXWxwR%XgjA1)sb+ytto<4PMu+_5S(Sm#51{K8y^NE&`kQG*rez?lyY!U;M9$ zEkS`ahlT=SDdJ9Udz!eEGW9fDQ;w-~0*@`rAAS7lqZh{*qqCgd?n-k==n_Sw^V92h zZ^_pD)<>rd)>(t18RB>%tM%Q(@^oz|7B%6vzrS?qfnA$?{`$=B!0|X=&Pz&Zd5r3W zREKEWww}*V0;DPDq;Qb_^&fqg#sd%ME|}5#qqpCqd{y+tp%2TpTsxvXyX&}bYUe>~ z?eo`Pv2$BfbrFOkAXXEgzCFx08ZDJM6jT>`BhZ8T4Wqr~phduQ3BdI&GZbzI7ip@Rdw`d=~WQ8Oq$jnPmg z6eLLO8<<$;9 z;>l{AKn*+&Ga|(fj>nDW1Wlsn#)F95RDqC)*4@7?n_OiDEsfa@w!7QlWKK$;h9mvY z+hxyMB(v$5>bgnEv#CF-LHgUeefxXg`smd?GrTX}zN4h_bf|)plN_Xw*^Izx3e13V zh|nHWn%4jLxB9lG&)<9%b77HHIU<+&D|S(iLwFi&B@rj5O(FpaWyukPMDT{%+vVuf zW_*ku@NOzCmtDPsgXT(;dNO{UaNRnUDE+`mA+&Ylgw^GIF}=(&EarE0!$VYS7@}oe zB09J)LPta-hxzt+@QL@Ql@c9JMpWna40b(uflPjoYZn8oimLeI|E9s3Na@%FT}wq=_5d6Iu_ zFJrg>DR&jT0B#s!tVpXmCE@VUmevYbIGlSBG!l+B@6T>d=B5x3ADB&IfZp#bt#)L% zicuGEjX-T(1i(@*;GqC*gIF=n&0VE&r=Ef0XrG-0+Q=+Q6C;^jHNgv?yT)JwE(1UA z6BDy#0f}3M*2n8{8jx<$k^*?C%W?7nJs+){! zp(1H_k#}*JnxmW`K#52b^_1Mdo2W_+9=;cph_rsmjMVr$IVFDhCt*yXN*K{}W=(i( z2$J}W_|OcP2F+pp2BhOGGjy_O5_|8*!^ydC$d*2QdCxiNjv0RDSZ(XT-0|LQA_&h2 zRw?^v5|7HR?cDxDk1LfWAO`YN%z{ko4%(^6xDo>e zKAmgQiFEY)y;ICdH5E=v;fr3asu!)2JQ8!-JemkLYo_@yV@!C=A%j&WNJCjo^N6Ck z%&t4TD?U;DcwlBPISDDc9_$`*IE|blHS_Rmjz}aP1T1b{vualpb-3LGxO^F+G~Q1$ zE>KTbsj10;?Ry}q@}EKXRZynG?30bd5^W+z_khGLoqijGLCDp^lr3rlh;3Q%-qGcF8rL!SiMI!a0eW zA}%Y!MAyg7Y#;!P4r79rM0$M8maA^9uL$H3<{n2la^+CZtvL`D2WW_v#BnSx!}Eu? z`2eLPg(OWyM}Zbvhbb)(pvF%c^Zi(|QOay8%?4&TT&no+a|tzOK4#E{B5{>z%1G-C z+8(>e@^Q8l*yv1PtC_+xy5yp!t3xdN&BwPgPa}+*4_*a61rTShU%xYP(`&!`{Ow4C zQQ+qG?)vl)q1lkQ8LZIE zX`q`2d^Jruq8pl86bxKpd4NB)S-hlHA<;18|07*mi_Df%JWNK`R<%l&BZ8Sm#3@X! zvZfL}v?MSTVlYyFmqEJ%1YBF{C8zVXF%p^mq{*RV(C>2Zow*TJ6>Cl6*j8w0U~>1> zlEku7Eh7~7`JygXxO94UARJM|%9b3D(=1)Pww%lG-XyX%pCR+doeld+s=cInSxt$`0V36mHMl%-uR^ZNb4pk=QmI8B&Tg{>ZN1M zl@;K!EIQN_<4U#tXw|#VLD%_sm=1_dgXnJ8tr_5f>4Ci^9rs&*m?x0@{T!vR4FzPT zk}nNE$=Puv{F!E8iJfLALuYnqT)T8{rTTENQ)kD>X!7Nkw?_pHmL>&JO@Arm$#yO= zFB#)zvL34J-o{F)=xoJISM?U0+mH*!2O!TNcKFB4G{-y?iP&bSJr0iHO_@VI11~i| zD9Xu#?$%}5G$mmgE7FZ7VK*bS*3X;d6iZ5+R(szY)w|g47mYV_jwN)IQ%%_ujB~bA zOr&2xA@$5ibSeoablSRHwvI<-(3Z$}lqN2_!l9OMI~BC@6cep95->Vo&Bg#(wJ%7o zXxCn|OSW$v#$+jE%>hKr$F(_xo1H5w1(;5XnhC!-X$I}k*o(VlPzm@j9a}jgE{(@k zL3?#Mfy>r+^%5Ugxt;8wY^dyoK4zG)vR-aCGSAx4BxYR0fCzKgwF&G7$zV*&)?L|x zY!KIDKy_y5v;1-dkU$dRTP5xjj8y+o?FM z#YQy;dh1;~GTqCvb;To2Q?7+7%OYLX4)I(<305ut^w%26e8)@R1JoVg^!tJjJYPn0TvHf7YMjr1`Gj%U13RcVi%o9ESu1Z z&Vc(M=P^M^j;){`@?V?AZ~QaIzvbVK8XWa0z6EzBbx{YOt3fnq+SlDoTZiyRht8}< z&&x(^rcUz|L|}W_wF6#~0L5B%GnvAcTrw<-j)xPG=(a7WJ_PZB)lZ}mMl!1(I-LzR za$RN$QX-q%+ACiey{m9**|1$7Z;8=6MWd;4VJPAGnM`3`j$5yGeM&E7OerP@^a= zQSd-1+(fPOtWgv6jOa;bDSzXphz?5^^q(`XSTTigu-gG(k{%QF01FujD0NtAQI{IxYHT&Q%RVj zqIf9gs8jo`4aa|QI$9vv3)0tjw>q>wF1bt*Ew$Gl-hBAxl5*W-#f&87V|3RXB5(&C zRy16%O{uHR9!Nr{RA@Pfy1QP^I9?!(3{=eVM>bwbntFB~q&gI zOdKp6&M;iNl)O`f?I{r>RrHmjOPX*4L;7P7e-};6({QVSV%l@1lt_zEB4G)IlechZ z;lypd6ORRM;25BN$+LGKSaY1&YyVvwV<3OQk*31~L^qVYYU92Qy@&VbYf74uw%$Ut z$~H(k9S%#An>y4%UI%dZh2oEESFE9W0Z=sFdi;Ql^i?=~{qF4$;c#%75**mAxlIBL z7nY0C;im{F_TB^<%`bCCtT#l#IX_NCV2ZNGu0S`<%rRW{29vK1LLECMxVsMfFar+* zhA<}y=P8c={$;HHPLhivKO$Ee5*of6p$W&f-S|;anF-J?9XC_`m4Pwn8SKt*H(z&DX z9UndOK{y;8VJIRik`H!Qa5%Cvfr8G@VJoIZ#JZCShESZd0e6?TnEHi8jDc1q)XR)M zR#gi=2DFf|U1`%6X5)={j5fU!B__~R-w@jmotIM!@HSKL=j-^iTfBTkt`MJ8;R zyJ)F}hPj(M|F@QWJl(6dzAc*Sb-OToNC+WuFk1|5gNJp8{85gM+EE1`axo>9Loo%R zCU|-{B;4s@=ymNY`a{5)1|V-uDM0`%v8|Ro%S(Ku=9q@1P*Sz0cDk|iD~0>HkX%9A zldpk)#hU}f$?a;}vC3R;$II8RKW9HHlgZ*00uN|vO^4q3ce(^(v@YgBUDH?No2 z&nP`)iU&TurVL}>eQ&ka9Zq*Y2Xz1Rx$8wOLXw0CsO%s-=dd9_x%P1?-Z=2dUWf*= zS?ot7S`1Ajs*kZ6Mb*O)`7bF7*rU;RzFLU=R^Y8^P%bxxoCn@<=-9Bd=xFrv#C{SJ<8QekR)JMqb8z& z4%FbYYa}{CZct>YNQp>FNFr@ttbx-Lu>acJ)(;Tw*zJZa^68?fTJUdktwQx>8Oy*!Z@)c)fJ3W*V3|=hYK?hGv*fSoQ1)>$NN14X#Phkm#(A zER#lj-7novEL@$ah*0psx9PA-Au|O3u0)Ew=6noyG(MYa9o(`!@wz5l7as5{A z{@y98;)(2{qasB$;%UfYJ}{O zq8-Q99Mx2{bT zzWJkx;$a0DsjKi#WIX+u_FKIxI|;s+5<2u6V}UyeMtl(kiOZFmA^k=S%&vdwed}=h z!q3r1Yhzs%d|B<{ZeZ7;q=hQ&s6e#VCI#(%fuaQo0IVAu6woM)fz*6p_7F5_T!95o zpN&Z@yK?1IOq0|p%GE)f|g-z>LaCXrgFo1`6ia*R`-8!pS;xe>B z7aan#P4Em-y0(sBrWE%q>~!L{ zK#)Z`-+N=et|1#L0o5sR<_F2Y85V1>BR=;vNm*|{{a_P&ji==uhnqgS{~q@1Xwp+U z=+NKz!M8{}`T3WRPfr`UGB-EIf7by!zH)dMrpGUT$@-lpH%w8z;jydJ35>GWE;#Q| zEs*-0(oLB%D!F7Ue_PkBqU8eGX0+kpDcRrmy7@OfSw>S55wH#}`ct7Ih&0MN6sm@z!4f#Lc z7{(v1El}JFwZ39UoFtr)^pl%A+Acp{+I4l6z4Z6;w+B6mF26EBHY_e`jwINnX zI9D?BAr>NdSM|es*Ew;EXQUV@ZO9SIT(WMMuTQN0*}ufVD%ct+yV&}96_Tn1?@>}< z+AafR;WVZUZ6C3naWfV2z&3~h6b~$+;S{#}o`8}MOC?YnK${-8HEpU$>zb++98)e& z5dJ^Zl8Qx^Dyhd|g$Sy;K3I$o<4xi*o=&$K!g9WJZB*weKBL6Jv2=*zFcr~Zo&mMY zC0tkK$XguhqoIORG{uPnM?i|#O_ksD*-Dan3Eu`&oKLx?{C;f)!P5t8lfDaSf9LL) zkF$pG7gM+m<0-_4XnzrCIpY;qg@6bvld{RvQFHMuNB<>mCgp7r31*(q0U7wqEGkhN7Lt;`!NhG+RO7 zN0<%qaa_VTtbuLb+jGygcn7gIYcFds$vjP>mNp82o=gnI)0b2YWiCSut(Rx%-4sb4 z-&t%{)?44FB;feiz$Gs$P(=JmUaap-<7~m51HG$=I^$l&M>Sl?m^bd$)ch&OG;V5W zw$TI6i(R215NQ?2iQ^o}=KLPr3AqDBC=g#Kr9y-GdZ%DOXji?d26SqRIOY>GK19rR zm}i6(P--K5bA**ckg=sSmg}1G)U82>(tJougr#ym6l$3Gz%PxwzS zEB*6QJXQxX6>@EM@Gk8a?;CC;FY)+J4qN$o&HJ*C|4Q(ID#yfKZVq*Om zlMQ%=fZ|ZBMh}_i5BVWM8@d}HW8-bm7uuxLO7FaO+Mu}WAF<%**WBSObtsmNb(Qw4 z6b>T%CUQHKfscqI2g1LY7rny$PF#6A4YEslvWfD6>b6O5TBfO%`FN0X<9LrCQJs8> z$&%GBqlt8l=hm{&*~yKPy$erOc3f~RWrlcl%51vehG6)xq+AN2bK=tJ0UcUZ;cF@f z1nEz)6QE8MSOFmbRVd)?Qn?T{CMoH~R31~7+rvp-T%O*ok~S3PPfc(i7|z(ub!deX zbz(lxc@x#Wv`iSJ@1R6XHQ8xVu<+FeYN*q;8OJ3#h@bXG2A^LPHjrj}nb?D%M&&$R zA|!E~3ay68H{E({qZ5r-1-ApyBJTb7w zwxCO~O~I8(+AE*G;4G}Q`1XM!1Po9~OqFX_vIxn7Bs{MU?)gT7n2Gf{H(6CNK4L7C zbu&QKei@}o)EvJ3(T4yo?1Q|z|1{@P%d{$}G{xlX8Q1-FLKB{0og2KsUQi`|@UyRt#TnJ^*@V_VPL7E>w>BllB1&Btg& zJ~(IA55Fs_y>Eu!40W~Q*r#a*^_U`V zqcvaPrbcIUnwCll(%hK_-Hy@Qwyors9&7yJUHB*cDE}vad9#Hyn*?N7EkcZSy@EIv z9?prguInaS+Yn@8DaDXB>C5&cV(ZDPBZ)cB(=_E&Y(@~OO6TkHbh)xmIF$)f$NH?% z1W~a8MMUw5BTA#BaFdx(4I{sSapyDK*tw6_i-G4n3mNw~;LMaCxygP^Kc7Wm5JC5` z1*QJ#u}-5_)loPeP00<4&GYc$+n{J3K*rOQIsOB3mW@e=F17(qhe|_d(E)mR=Vk#a z#Ia}l9-#o*Y82G%TbHA4FBci6din(Gm8BVnjQB;u4-ao7jixxH_v`~8zYkKe8WLMd zlKS;3Gw7|cg2Ia&aO9*eSBeNC>WqIG0#+BLPs4=94!N})ZEamDsv!{`u*kEb7cr$2 zLTg9^I~6X6{jjRPfcLg^lXzphX|u0u8tKE}AC7U8aVDw$@HoZ8r03=Q(cRtCIhSeM zz)!&0zu^S|-LrGbYxjrA8ReSd(j0V-aUUU9&Y2B%Lc78GCfZCP5q6W%+!^FHjI?*Q zm^0Nx%XgO{ggqg9#8@ZPKlXVj73$n*?^K>i&XC`SU!SGRgi>3ggtKU^R6^Wv&Lrzq zG4Dg3p_*LT3x|bs6!4i`;?woocxxJEtA~Gsr1(TmJTPFvjq9Rx<6y{i zrUg0V0YFT`F5Mc*Hz(NwrSty7t%qIrlRScnsVLqY_^~0Db+~W^MLHlPWUo|IEuKv} z5^rA4n{0}<;)k#9?Ep%nmczF{{b3a2w|u>Qtvr63EXlx*%kh>0eYvj7dgTs0%!h$M z|8#k4w{Bh59#wkI_0|176a174#n(kU%BPWXK5#;ns&jB_&+96IqyCAY?qQy-pou0Y zJYwSGq^cvS)DQ|>uEw`i*k?}2Ax1<4AZADY_)Gb*g+F`z@c;dD`Ok`-8Zq<)(|-*Oqi2zZ_4{XLOc@Y(*_sIF%D8nXxsy|CL);tLGCNQt>;)-pbUPI) z6Rj#F=wcn`4ZI&xaVUJM-n!xM=7zqZvVXa|d{Be2iy{-JbcB`(%{S=3kUxJY+1h}u zu}WgVoGo^16M9?ty77apCf$VI?udq+yTiG4N_#P#MP|kj9Nf0nTtVzeT1%Z-l*yevDJ__cwrrL z+=jO1+B+=cp&>Y$I1!ylRfn6;gt^2yXBMm%GXxh>7$=N2fT$ejnw!YB`95|{+?*AX z1O6<4^`mJ#=45P(Q=zkPcvvhgC4Xmz*wG4^+g$9jK@moE4;J?Xe}ca2hN`ZH=w^4@ z?8@<_UE_lIIQju&L?FMrzrtx=RuW=3+lTWT1mI?M~F(c|Ptp#;EBjsskck`0Lnd@xv!dJkomCA2|au zmYkTzW&OARh4j7|COv-|zW0mpcT4eqf3%pxWD<1^?+^_Ok+tAkJlMr$nB8@Y6)bxG zG$G)s_a{weyk8_g2IqXaz5I9h-}@*o6PbOiLYdf%UDRUd#WGXHb@=^pI;bar%ww4U z`?w!E2F~Q6c{oemVh^c+91UQUbplC%n#aQ?mLu*+6z@&pJ8Y$7V`6r)Wx zI2;5bL`b07P-r6#xK>@;ngVk%zxILwv65}hg(%l-9`P36GAB3jzBSRlP@6dakDo{^ zvh=P1G)s-6hqO~H>}5&Ngv?~g>(YU+L6Qeer71;08r1}K6*mQjD3fKrA*^<4_I<3` zR$-|gj}KEOAT&u>Rl&)?yp|7ehKib`iLWD44{zWk6KbehIDM5Z?;Ub24EF6>>shm;x1>a2xL`x`<^;VR&q+cB%H`WHlvs z31X0LB_DObtUYCDXi+0G=VUi3mq_In)!ur?z>MDC+^LT9wGHRhb4D!j@aDmeRXn=2 z!tpyp28(HlBJj`Z8xMS*M$QW$PX9mA4wN^P~azI*rzG|CD#eT5N_YU|yihP1vZ`piT4&f$D{nCBDAYh^cA zRa`U;9}co^9)1xCG0aZdUi|pBe)~W3Pdfd-e)ajk>;LrF!+%WUyD{ctijRX60!pzH zP+SABC?yUkY0!PnK*C5gSBaXafm&>4xat};4NE~qNXNJ5bj@S*{vSO5K*!mQn|G~N z8Zl5MF(sZP)YB7tet1Fe0q`t}?)2kh&p0SJ+L>bPkQr#7y)x=(g22KsI6bFJ?=KvZchpNpjt*xd#2bCJ4{g8Mo64~i_uf( zL#t~@BnkRrt`CMx8^4IJ2_VAj46J=mV=c%^pVFMCno}xy>KHI*V6vCx?KbbmoDcP~ z+1YZy!smQAF{CM`RRmd)~Wf~BTA5NN7p9F zj~R5V=4{yNM)6M^lXFbUq6UVNJOvLmm2C4(l-?%}<{}DkdtOyjh64;-IA)CXZ)gTa zi0Eg}%UpdrVuBYXkwBmV+leO5c+KarA!>egHCoRc(xwuX?CDX_vE|Qd1R)j1jWNgV zqUjiveNewjI3QxKH@+V$V2s9U>%yRmnz;N>eZp zwhW^yBLX#TTXZ^>)H*#~ZG%g1t|d%N!MlIq?*8S$CiuhWuPx4kDfISweH=-re2DKY zgh^+IhyjCtX^PJ2{k6~T7@j_V9h+4=Nu)nLJrNT4^36{ZP=psZpU?^Q@$$6{7M&k& z+Y*y?hMA+T>-F*J$v$uo*EbfJro+tubp7}JfqsD$x<9#&?CEqv@Z<4(rr!0Y z8yX&j!U%r*NPvs@uqm{=y1cxp5rpvv!@LC(61uD_ZlMkCQC03x?}??X>tl3+-iSR} zqBs|1CYEKsI3x(U^GDz9pBB$DSkqkyBe)&vsN zV)r)(I-DkP-x4HDDA6n0yjvF>&Vy|_1F2%pV3mW?8flsAW}yR8peY~bB4FLIt4M5= z{fdf~V;4k<6dF#PCd#t~KNaMIpsEFf6QDsU#mDTp ztjKB&$UH)!YdoArHdXQC(U11dVQ#RUGDH_Ty&9kS1#t-Nqaa}oEM8Jdzl`x1;&-NW zI3B6B;)9|Z)Qtx19}Qp33ByouwJmXEEKNd&BulahkQO$pM5YczH228Jd48p^ipo>iq5j%6qld4!3nPJ;Cz zg2p^j5WvK;_07(w>Mi%Jwd>`|FwVJF<`k9N)$PX+<9nxAVDBwuHk>74)P;|fx?0#B zC6_YQI!$Gs?7yZwm12bZRC3N#sRktk4DSN4N@GiG#<9PIDcbZ*y5&434_hk{5I}I$ z?2~?;AG1yE3ZmjnEowP~AM6IfOdg$)?4;3sz4L6y_$H)f{yYDhe;^0MwsZTB{w#g5 zVx{{GAcdQ-Pzb0{sz(@d47W<`AOTY6RYi9(#h@HM^fMUXP6y7vB96qe$H&0@oQgh< zw&#(FdBj$ez>HXIo2Nq!Xo_q7{OVJ^1P)Y{=c{US`$+(@lL5<2Se( zbg&A}DesU_PQfcm)l~#-Ij26;K6|c3v?T|#hT`m~1%L!J10oJaiqsR&!GEJh&W2Ez zkeN>kM2w}&lyip~5Nc0HxNM{V(4sYFv_OdYyej9DR7lf}8FU-_t>IE6^^14q zbkIX-@2;a3m%FwObIR+M&I_5qA(o%^{v(qx9Md$(R0EEpK4Qfv7~3$^!B&l=nPlcg z5RYZA76T*9QhZuso((M8nlRuAy`dRBIVLH}HWVeY90v$&gkT4JqX)0f;sh@De%-t; zVVMhfv)My(7avPt0qs**hdWt@zBp9k01x6DKss{NyZ}mk zb6L~gfA0{OEBG7<-X*LvORlce$6gV~isEd)L)F0qM_il593@X?gM2(NxRDpy`n8LK zG-;ogz>bJu@uzMBO8Y(UQVvC#<2&zHyb+nkK<=U)Jpdm{z&9YnaGGi#b`m5Q{7tEd z5s*-MfRZ)(nn4uHk(`1&MsuQ1j-qW2rI zZf)ag+*R3}MLp1a>lq|<)7`WJH)rD(1t1EWguZR5cp0;EV#2b>>BjEQ|M^$)lZ7ws zq`jbAjtW~XuNOT?;-WqIz=9*=)Flp6qF*KH!Mg^yOS2;?xNZtl08+M4W%`T9U3<@^bGF3~8+E?S!r8C_}lR1;_12MFMySdad^wV{D9+ZN4V-nAvf zK080totY_QNAx}cq z%0)6(7bPwP#cG50d>X+3c5r!Fe3%#ubs}j2VDeT|AEtoB(m05Ddu| zHnl1`i10HfAH>-!WNbhR^jhj&7rVc$#dU4DjMnv#r>$=v9&X<}T)J$>`tr-yUsA~S z{rQ)hY&8`b-%1a5=Dk1vs>$koM&`y6fAR-E_X5T9=@Q}!Dh6y^tL^n)zP_U1HAd;O zu9%?j59hBaWOI2il&{WVgkK;V)bsl!4an7tch~kl$HGo&Vv7|K?dCZBlmAhFp9l-+ z%d*01MViXCH4~3|La5aEYo8v2mApi8IVPn`+oXvh0yz%^xLlEOU?;lrE+Kju3-UTKcpR8@y2Ii4ScYjZDyKQwji!oiIwc(8Blwww} zilNrZuBp@Vnd|$1dJrGXV|JMpw=!etNH+l?VnALTe}3>!l{1H zchMN=U0wHouBBobk+H*;`(dhd*t2;T96cm`m%S#mJR;h%o?_0$?$>qe*Cs&QljTsT zBHIRaA_V)XWX^3Y*hw6|rj}gF<;Cq?sngh@t~!%D24e%=nDnXYiw{2eJNHJ80&+#j z$&b{Af&MnALKVPV$|55hMFh89!U5^cwaK;j0U@1gZZ>5==1c}KAA{7Z-O@U)n?jj> zzz>Vlxdc^gq7Cs?H{CE;mkY-;5LjHY7x#X6X%lY#;LD$U^uc$M-i$boHN?_XAT;hN z!h|XA37A$6c9%N(a|~NK;U=$*Xc=fiQ-BTtW^`kRRtJU5kfm4=Y0A||N>2&Apw>6U zE&F;zt}xPh+fcJ%G&g1rk!+*W?F%)&W}3bu>#w;`aYR%S? zM+l(`AKPHznDf8_yPb`cdB!lurCG%}QwFuB^Rhv?AK(?OlabTZNPe)hoPC1F$kU#w zRa0Y)*Ji(6^AuBJq1GXnC!s4ii`2{_`LeZ*Hk9N?s&?%8BGNF@9xKK(T3_B?-h6O( zN9mbOR>OtV0uVB;0Eq%xXQNd7W@#T!lyeP%mYCX|6a36r1DR)}8F2ow z%BPy$Cmnw*9;5MTiTUw>aQ(Hy9COq{-%yHxjoUkH(pd6RE>|i#nCHdTm#tlDse4ma zW%Or-^~lBTp_`9#2WynjTIx+EBvSsvDNv)FQ%u1}eUj@@<4o}`kc)=#*|_?{NaRrL z+F02+M~NnXDE*%skFK`Nu{#VBYubCj4D`EJI|ms33MrP2Gut*>N&fz#>^Zn})IMH1 z24@7EG;M+5yhwn0bZ{O>#2(G+)RRzX=%ryp>Wz>cx{|dY6^E+wJ|b(*F`YL-P;%Y!A(F#^x64N#eE8MZuYnXK zBGAA_7^I-`4d?W#5T`9^P`t$}G%v0ADPqiTuMNxH8-EksNMdR@Ml|Xmpsu3&5Px>AH@!{q-_`M3MpP`hDi8un48hE$!D~9bZtL zTsLXZSYVeF!OAV1HqavD&hKn^k{M-NB})iP!(DvwIOYi~*iD)hIW6L2!P1y0T4+4+ zfW4!KU7KTF!iZG$QbT05My8ieE%E4tEik$HC06kM}qfK23+188DI^ z04X++G*Si8{<0eF3WuKnwWr<5%%sFj8> zW)6Co<9S)fh(v{!tx0`A`?DA8vMzI-LzLuQ z?m(CSI^*LzH-FFIogCnzfR3|xyT?V<*ufu!68Tt>vq48v-3(M|LCPK$lgmh4h$$hD z62hTuc(XslB$;pM%-G-)1VuSj&VD)5eNBvSZ0;i%GH-CECDBz@&wl;8*9XN?_--i_ zCqLoy%*9$FEASab!dvK3WfC-bX`ppvms20X@p0fking0r01dg5fQoM(Qo2gFRcp6O z4`?g*VXdcAO5m^oGetJRJ4M^J>m~*L1JdPy%=$+!{8-)Ul!0&)x9TSq(;h*WE5 zYG0vZxHbWd!ody~l+F-+JcQV@HJLNgv12JRx@EB$`AVXyH`*u}`4|Lqb{9i}#`^Ss z`J4Ig`)Ah?14d@%lrAzl6un!HQ;3Q+WC(uJEe?XPo7nuSQcjaVg!mLwqSMOWAF6h& z1rdB$-1&i541zP8-i>i*UUD)8ntC0E+}*f54*Ss`22VZqo69#ju=zYC zZ;iS@P{~%RimKSU@-3^h*`R4c0+A6+ba-R3ALIf91H>eNHp9C?aLdg)6#6yE)hMaD zk9;T!u8U2z3He`Fd%>K@ZXa+@8?DnVgKVxLKzKU_RLBuv&oN=Zd5fLbt)kg&GKe3pwJdJIE+A{^fp*s8i;a!kUz@54a zkJs00KQo9Rl=?Ddo%8q>3>MDs*#~?nzx=;E)JUk#bW9X)(T@;bIgr7X>hqq}IeS8cYI6a@o{_AiN z6wF;F0P=k`2*?hr+`6_k$SPgl(+zIEaRxx!LTid@Bupn1BF)&0$&U;-VU^b1mCjig zX=_)}bvQEPMrz_LtF*0d4opH9-pJ()!)=O#XB?Y(tkaxr$9eEhrWQ`gwr+4UGa7Q?2~)CY$ULi%4c?eo zn|9SsdWmPvR4E8|buz^vAdP1L3JTmw17T>Y#11lcE4m?b&Nixp7i^-!a*UiOgs{n^ z#HO3WeE8tS?cMFCx2JF4-+Xp+y1BbO-rpH5Ax$aew=YlDM>ghpIiMNZ(G2OhNo4%y{ue2HQ`cu#awG=5mgB_78d$Fd5O8;m)Zpz#2`Ea$eO6G~%)fUpeb zOAU5c;W?AobS0Yw3!4Mw9x>eOa<@kGnKPed zq`E03RK?}kaC$IZ#dog=V{8@EBIpY3o#(z_PF%*R7I)L4NKWGU^`dbkjq+SA>stnqIS$UI`mrkf@ zzed8vC^C7-EmhzW8?8jNepfC`^5Dkl#$TurtGn zb{*^mSf33)JQWwqUcEbl5n>Bo(aBUP7Y>vlzng2m#lbZamZXN2E_yr(vz6$2JPdnf zFw}5nSlghMm@8O&IUef6cR!MoU0a=xH#PChwGBM9sc=PL))^C|CGj*}@xcY{!A4i$ zG$N2!nn&gYWHO`4!APgJqZgILBpXT0F+0yk)XttR@p3s25Mdcu9B0~xtTRb?sbm22 z();$)uP(3Oe_ov2Mg9~s$wn3sp3Y`}d!wf~K<_YM&SqK2aqvv23J`_+h9>eTTp|Qaun(@?5@k}sEjWneKB-Jrrg z`-Gs!lkcGZxt-?4aaJ09a%RmSicGU|96vR&%28@rXE1np$J}xNe+VDZvXli)@0^^` zhUADJAwwKA5AQ-#6>gw-f*6cuKOgy)K(g@9uC}^3L~4C|$bur51DJy|jyR%QoH|>v zsJNEcwq0XP-BkuN-qOR{KSaWD1W>Snh?;A_N4LDUH%f`KUV(}! zqj!&Y5;P`fZHtWFvC)|<5|`m)*s1p(rU;2pkx>~Z**P5uLoEK1tAaSPGRA%|X_Ntx z*47$wE(m^e#zKX%M96_ji%>FoeHj{f7GBKZB7^3WKmB6-r~Z~s)cB?_Izcx^H79L3 zeeJe}|KMMW|HHpm`d|NpC|Sm#NFS@+jWokE$NyOq5t+Lu_Mj@WR^y4Ec)YP_P$ZU) zW4d2Cmm)_~e0s$1D5b8QL>iqV?&b~16L2#7WDT(^&M)J;E*QHfc}$i3)C7l&L6u(6 z{5in|mAJccSj`uulMjKuP@;G)iF%mhtKLB!b1d0ZIUAb_y+?svcqHaTS!x&zblI>| zo+mPZc^5Pd)Ot<8wM8Wy=1LFlkT{Vmn~17=aWcEz)LltymXpSB-yG8Y%||KzMvQA3 zPa*yM_VDU7zi*ujXF44Fi@WoS+q=K{<72vew5Wf{ipPiZw26TPNs{i1o2Yk1YhvqT zpnuq-H4o=QE}?8)JhdEbWzaq9c_JjO=q{?CxEA~@^UD@28YXq5wKSOkMA8EMpX&lb zInLoC4R&nXn&xBrt)Jy@eIOy8VNs7qg9$s}tzE-J3>RdfH*vfg>C=*bbK5Ra?TBr* z7+zp^FEKt1MUJb;&4o~19`Vx{kB7q_yInquH~;VL+)^5Si0Wagt#@xyqlCORK#HX1 zF$cGF*fq_mam&YDW5F^I$_5H7t!@t!8nK8CSSYOvrY@YCN6+OAn!`4Irj#QO64L~i z_$K0=07+xuyn#C~qdj@#S7|Jw{b5Jf(B3xL71KHM5i8sjbfCH#$%OxK%o=AYfdUR- z^=a#gQQ9UuNEuHnAtC9mCSg})kE0{mtn}pRHcC0gyrD6aa*7!EX?^9hPkY4R#cyrn zq{H!Wha-YFbPzu|-ra0{-TDt2?1S+AP;{v&O<|&WB*^`v z0}p}nn)M8t_;hN8oMdyH!}XMENnPzI?TDN=a{?DLFCBbBrhb7xX}?*Rl)#|&6vBNN zUxj!R!W_ee4&Tg9YPp-sT*}vf?0YwV>nEqv?TBN&E-r2kZPc1F)3zo;yzKzS%hohS z-+l=!Rn>77FPDx}ol8Vq({mFy+XpOHqI-}v71BD;n9XbR-a~KK7)Gfx%2HzI7;$8u zcdy-96Rg{MlaGgAe5EkzrhrcZ3bz65tjG=n1ndqe{i#%@VyM&)OI=jH9CE>eEyF+nV%JyYqWssXX zAt9sq-$d=Lt!Im|WXOeH)<$6WP;JE#Usv&oSal*l&MQVz2osQ?X+30&XV8_}G>*)} zlA4gF^;Eze5E-pGg=Yd4YtrMC*|pi6sSHyX|&P zlb|{2#$Q_(jzg1xw276<)_9H70x4s*hSnCiQLPeFY3SMI9Lm-@=bcdTu$PybEVen( zgs_yYq}GA(5Y^;ch8^{_pT;~~#e;Vg0MO`1KS zGL5BO_=ybe@A2RBS4qNhJ%%~!dBf4oL_Fee6fAr$oauKtKE*O|$R@f7`#y~9gYS}3 z+=b|A&MGf68`Iy9ypq}Aufh?U|bq?B%F$sjkK`lQpsiFTx;ek@;Uz9 zfCjr@ZCfo>uqmdR(GJy)q?lbeXfSFY>G#`qDe|Wd`Sy4@znKp)y%5Q&9B9fQ<5G+N z!yeuw;1VH14bYO&OPA{izq>8urA3^Axj$Z)ot-L1>Efkf*=ImeiVpeH^Ddb8Dfyse8* zs{2%E#z(qr&2>ys*5^14bf$sQP}Yjos0TUVAk8|Qr3_A(+h>q4`cvD>1XOLMN_x~K==pf9FyB_@Gy8)F3Na@2v&FyB0Jkl!Ihhh6!4 z1iN^TSaA9f&u%f`_we})(=Tx?#bP=TyUWrr-HHi4wu|w>4<)ZKULssAmgz*AxFqak zpu}iw!0&|v!-fk-Eijv~^lHbr5n?k9MYGeLTqI9@yqRk%xrt=3Se#J1r83w$s>O%= zdAWzpahI-!(oMSN6P7g5$6NZxnX?6pr1&(#Yv2q?Nd`{n%3i#SBAfS0?P8$-bMH z2~Nk%#fcr$ox2;7?=Cws)OW8}kmN0sbi||ByUFl?Eg9>M{bHC&2um%G;yERkyC+?P z6LI8B4KY#kni&$H`H|2(Peb>q&F%)XZbVbP_oCiHbWaIaFA?1*O?RO>=#A-|r`|Uv z)42b+q^fpZlLi_w^=0iZZ|^CKF;6E<3`y*l)%#*iFSU=uzlE z(Cm|d7tNvdu*>W6NdR;sL4}C(!?u9bQj-rF=My3X4?qVL!O)AaLgaye-uLe2YmLm zNKajU5N%qypZovj{aAzMIR4}R!T8B1sg(H7`sdfyXHog;>#x`AIfP>}3Bp4hlf?Ot z{wRI4hNrWc?g7%P>$VN2pDB99nxKUzE`rXXUrDsZWx1u=B&vaLHcCmDUyyeX*#(-| z{C9~9nT}ONFyhyggD$=9b{()GH< zgt=7F#3UBkP0XVt)QoeqzGD+*pXQJYH7|gn;etijy7Z3=Dt$8eJ}`bUoKGV(Jfv(z z>mc<$lg-4TeS?*Sp0;?wK^gsx_~$+*pEEak>>7L5Lrt+p(LouaW3>;kw)NdS#joEz z+??JXroTC`=&#G0>voevYFkQmv{qvLjbIF)w|A$WYe-j&blIZXNW%b}LP{29%L1nod4>v*8 z^{_Z}sw~)jdY-MR)*Ay~jsa?Yu5g1MFUH5ZEdh1H%=pQYpLBbXvsmlQMed>dMtCqu zloCTjj@MPz5KkezYb_R+-Yu4wnOX}3l9ha9~9OyA*s$PMcE2T|J&dF_3wR;4H|4Mi~%88dVE^G{Q9D(cEA6l7tDSG1C9hpUed;n z3uhl;b$@eZ+KXuSswVy39R40*Y}Qsh{~vGUqr3DU{P*Uq$LktO46i#Z_ZR@>kEv#FxVzVux@5gwX(lo|r_cuSgJ(b5Z zoTMN;!k!pHe3S0yc;vK)=8*?Gi!>#NA?@1ibI;jMEJ}kNliBBTdry1Z;Vg6?-J#QD z=WR)elai7oMI5I-Vz=AL3I5xyKh-yjAg~uxHE2Uu@lgTaq@eCV?;|HXi@dLZ6vC5q z-Wjj;BU{enY^iPjK=msYtT@3RL~GP&7blqXh>9XL<9MX!Go>$J4wAA*FACjw&L-M@ z@Y@w8soM)(VobwKXy`YW-Bi^6qibikh0%5q#}0+E&by7iL6l7FBGQhfA*hZ3rU*lkB(P9;QFpGzZJHYN>>|Af3nC-sbTY!lF-5&PpdV-yE;$^*aX7aDZ}JEi!o|iPHC=rVBktrXempMWR6%K zP>0=pn`$Vzy8)-Yspgv4RFwLrDSVZ z0#T@%MqJDSN?UV?r&>hh+U#wb#=MXH30G0ELMMjwv^MJ!`#~~`PuMwW+HK5Gs49>XmpQo{ zhZipni8gfZGY0HF0eMT8O#sK?C{jT9^!NZ1_fVpSa&5-rIM%#2RL40b zSIVOxVFj9JKRh%%;c!l4bi9tY0#TKns(sZ{OmCWj;)^8K2<}FgdA+L=+O)-;QA`WQ*$D5$mylE6oEe@dQ??m8&jv+?DqON z5Nm^7=Y4k+ApzVun-1gbY$zZJ_y!@i<1~}C=eBZ1&zCD%vSn~k65oq?)FE5Ibd-AU zkpn2J{VL&l%FII*C5rUF>!1JAfBkoUv*g6v_VBcP_4fVsy6Q;B(@n5NwLLtZMS88} zr(X=8jzD7A4QmABPdURuN~)4VmCZOcyn1npJtLa6zpR%v9@BunL|;blvMxwp-2%LA zhif0u&x-%&FXjLKE+&NHyW8>dRvSpbTW`zSFq}BSOF^Hm?Xp}GAg8<2$;SjDtzqK( zrv({f*cuxDCWyJTzNJ)_lyuK^Q=X%jQ;Fg4(R(D6{J04T0V$CbU=14x;uH9a57zI~Z1GFiPP_;_kfa4C@Dzi@ zO#JlRnwpq_7il2vr&{dC$i{uz2COv0CIE}P2gartN2#N@*i>4!&NS1Rfx!K8alZkK z*J&S$mE$wC3Fn0HlZtkapXU%oTV)7IXg{W%!%y>X+d$WlsN>bg_nelTLN(;pP&QA zA~LSq;wf9=jf*40iO}9oiM1P>%0_drWQZ11zK_`KN+a^#rxI(0a)Sm$Hfmfb+2o~Ic1=lb zusb1Gir-7CNDT>jm2h&M7<~oRH{+``F_uHp#P;m`acn7 z!~|I^tO%J8q+p_Dw88p{y^{zz^&YUn(6Cyy2SMl+g{C}G6^*QNxXK&#ZBgWRL(;VG zj(ikH8X*&RZWanN+F&E2bXS8LGU%76b{&pNhKXV4N$-6m;1-tu+HVeCepo~pc@oYH z%Qto45&I+{y~OS4)zMPC2YCAEecFW178xAjuGV8tm;(<~0*B2&%1P0tPM)XYnKWg` z8x8@keuW8MjhuQNIyS{Ih1W?u_8hCh6iswbYC6YpeyQnj@e`28)CENCv#y(vR#Fhw zbBWBRkj{IF&8FC|ia?*qX*oHxA7`%D5INTYnfnY8!)9f!ZJKL0Kkhr64g3CKo|*cZ!i)v6Jx zs>i-j;s{xQ{uS>%S<<`wo*SoxoJgDFCjpz-&ZC5E8+z@eeB$G6JeZ#yHNN3TBm$Vn zIa*#Ini021j%1P9f&XQSYavGDrNu)kC4&{4s5JyuLeU|%@kFlIi=|ip*WbMR^S}P( z)`~JyOHJJ7oN9L>+OQ(|&{&#u)yy&q>+h!4EBZLak1ftZLlspy|HMvj=%7NNXvHt@ zl%W`@z5ww9gDeDcd9mPD)SU3*VH=F&gVOwxA~H!%3@JA_LD>Y-NGUPfz=S>Tnt;2-SrSD%p*LUU zj=i|KmE8(LKpk8hhJVGU@jL&a*4|!}=yKj(H~pXd zx5BqSJB%<5oGU8cpsu-)f;ff)ViAT;$2m>Y;YtTuKD|IPOF;^1T7Iy#5IC7S#SH8$ zqB=u$8)HW_LMd2eIVNOp5h0;7FauMEE3~6?#OL>14D?VYaJbOj+BfaZ9Q*+wy$|a7 z2HBy%_&hDP*HGkge`82zV@!h9Q$gng`!een(0V@f4%9L~4duS1w$U2Br(t9)CAE)=%t#_GAMvurh zRmF$FJx&zktQMrV%c7^-J7$x}ws629`%K9e-*UYiLU{N;{PoKp{cdjSi~?wiV+Et* z2+umPRh>E#Pn0#G6dcj`L~sF2##A{@?=LH)+?{YunUBfJbBXqjz#O0)*CjRd`YY%r zyO6ja%C{yzW*iJdQM{CNx^Y5VVutW>r-xz=OQ%q6sEI6?;LZ|Hgy17L}?u( z&}}+&Z(nQEF6is}ihD{3;?o zOG8cv@guv_^ssqIW;i%_u*irslDOp)4eXfn*PY1iSLWk5k>lS+Qo`>~DKwTn)JGrQ zxpjAM+cmfc_`K?@dBU_&oIn;rcIck;>p>e^P-5^Mltnpf&{LgVcxSjr&tX1*cvz5A zxlfit{G-+rA)7un8fzVnx3p@I>C8nu%||N79Onb8mPwS=H=S`(yA4u_dk*B+#3)sd!>1sTMLFJ8qIA20oMK;Xb(rbD~+c9nB; zKl#aTvq8hchf$q#r^ox4P^z5YE8Tt$w~F=et@3~W|4<*o{+te{<7~V0&BFo} zKTBWcIMapn>1i`GxVLu?Uqx*H)AW))qRkvfI@4O#ILG;LI^3{UB3yI1E=yZ@dc8b- zG94FO%!t?2Q*+vif5RsvuzOMb)h@Z>7av#)hiaEFytjQ zXIk);Oo}@^fkkU^K@6OKqc(hL^V~b+f??zj` zyZzy^Tu+Cao4@@tRp~0cuLIcpZng);AdNU}h>+9v&n%pw+%MnJRU1LO1n!K;}BS zXn`IlE6xx5 zl(dPVDBnJXKYAPfe-A__?c&?eOqplpgGiY0f()eht%I{pbAoY-1;q`t(pob`Ry%e- z-+Cv;VWt#?!`6FHg7ZF9RB95mmm;1>NB5YBLqiPRp;C4VfO=#6VQVb(Jy^5&m`ZwB z$v2N3J~2}+%%rSk!|a^K_R5;u@Q%hlD~_X~G@>5ITx96u+6gNxL+5N*7e)LVuzFRU z=W19ikLE;b51Fxmv6?(8mv@~^D!j5)raX8WU!o4 zAwg%^76KaBf(aa%8f(e6?b{uXLk8f^NRC z1E6lf{d$_6FS-p8Xa#SLnsy^4s325>wsGM57)eD3+z?VjK`kifm=#CU5rmJWixZS3 ztS*QVN74ggV&`;%j*QKav2IroDvvo4FYC)wI-D4L2t_;Ywh!W*uTM9}m9ZIDj3G6YVryqT0=3I2ZCzS_MzSJCYOPahpUa^hH~g|9BPVKF zFgR_}hWfBf$wh%Ms0jO11a?%WWJlYWd~+ITg*JZ#t~370Vxl z;|{qX5W*4%mJZjgxqiBBYF(OZqa_XmjzNPkr2qJgA_FM(ToO_h7xFz#lMF%C9*F;L z*G}?V0U*~T4rRL#Wo1b#*!ZoDT1KSeAA-ouR7BN!-S|lwlwDe*FyUl{nx!~RS#6G~ z!lgjK7acNB&}XIDK(^cew617_2Ehxy?Mp&m14JS1m7~Gr0w|McvhXd znO~rSlze-9=@MbGK~z4~S{cE&rMqxGRbh0@)1=6ee(lo_ z09Zh$zn4X?%k}Q&=JE2hwvFdsa5I!|c=6uXi%uYRg&jW!F|NXn>%hWiotwPTP;#7W z{cbsY5XV9Lr~e?u0K~#W;Q#d){u`>dg?&-yYnoSi82`2ZRFqECGe`3hPx~|nO-vOn zOqS}p+i&YLUO$+$i-06k)MbCQl-l~XyH|QkX&-9U!~=3Df^)`OA)W~(y$n-wJc<*) z!Ie~;%j*YHQtGaA#2L)7l9}$Zom3jeWs1v!^40vzAM| zE8&_(%{3Y?P}e4Wbq>fi_{Ng;P$#=nNUr%QJ1#V(J-N%tXHSyJ+EbZVEA2P4v*t&UzbZaW?hA^mMiX)K0^lP)A>@T8i5iQ zFw@CA!Clf-#-*V-hR@gs{myKLs34;jAOH*$8xa19mt{a9l`G|DE~s|(+At89{W#sW zE(pH32hr|83CxLvekLwbA95-QViw2A@(x}GXjFkJf>#_1B+fzuU+EA@R*-g#(d|me zxg>)xbNcxhuL%DGhq#$qT8QSt^cRk&-`uvx zA-RO4ne+nZ{J{K6LfF>MnXinJPPm0=I}8(mk`t35JJEp1%pkIEqjw?8)04hyYoreq zq#cZI%vI5D8HMysz)*}qNBD@X(nXWqPfk`BJCgD9%wVDrK^aa?-MZT8jFdjt#Jy_j z4mCIMI@WGajh+4t>cIt)-NzEy>B-_Q-dh7U72>W09z|WDRIo3mO5@)sBFU%Ey2mIV z?}Q-y@dm?)5UREGtA>#IfP0rFZP@5^{w}u^IX&P}VLp7Y!B&;O6#v#geG30QiX9~emsHB}zxJO^V&&i)0*9Cll~T1g zM^7KGMxsME<dFJ8Z9p;Kp8rAW+C5Y3|<<`ejJ>F!V%|B2FPz{DiN-_!mC_kwa7H%C)eB1wn@ zRQ@j8#xndX_csT9u6)pRHhKu6k1Kw3l>%G>+m&6zu{Whd0?LQ6JYf&|@)t zMn<&*c_8W_aY!yu&7sW|r#p%BB_!AOfV?m|I2cnH=Z4NY;Nu3?FV!Dgpfpt92WWP!?KnWmGVuI%jxK_;yS5m90P89jLZ($ zWA}a)VrSY*QwxC_;XFm?$0Z3k3-F6={ixL2dA*(2pT0lMDgAJof6`mTxZI6u#>392 z4X+{oqW52h@qLXPawcVqvYG`XtrbZ0GXX1=NaRy|Jk5DXU7fgwJu{y5I9KhsImzCx zOWQpfIe}udMgr*|zLCc?mNFwCkeJw0 zDKUDONazKVv!0-QutKj?rP+t=jh0~@zBavYREc`LUTdwCpW!byY~$NBjKwwO*&X5g!)D#KZtrhz zu1iyqo8!S0tJ1OT1+xwosav@*dZl1hM{Gf+X6cg z&;QAf^9;$m?yGmTNGIZ@_$$z3pAckL4_%^{&ae{CU9Il;RjN2BEHH>o>Jv2H0R0?H$!p z7R2SuYbt47Wl<>}F`~=xnC@n5NI8-9bWHuIs3}~Ud?xr3?7g!)Uow zb~%S(Km75lkD$>swq|w3u(8C6CViK6d4he`Jk2C5te~jEu|1i4dBiIl_GyFj80q@#w$!C>^u+mpm2Rum3f2N8!Z=Hb-KZFsv!QpP9BA^sq z`%nHOG2D!QNQ?hN(SvG1igy{p{DdqcWEo9f@+LATx0Q{*M=JSb5za%lqploI1nFe5k1a>nO#pT847OiAQ#G%%Kbvte|=m2GyIX+^qd| z2)0dl+Gxli>QxY{1ReCxviw1V4w~UqWLLsBZO_0fnl|^MUlKC~{f1`@9N4p>HP_qt z?oof*Ml!)<{WHhoFSXra81gBE-+!Nebgyr&Nz(ZBa`+qDm1#u}=@`Zu;=yaRa0uZt z!pEh5-a|*}m|26wn2}l%6|Bjk?XAW)A#k=eW5jN_GJfu3e4yiv=&v8gZ=T}-wp=sU zt3_UJepY^$fuM$M!P5i>2Dne?ISud>xGFDVUp^FT*%l3fo6lxDFy8^2GghmIN`EmQ zPt9ovn&C@p!P}t{E%uc$1V3x=I?Zspwg~B5+PoYsi`N1XWeV3)iE@$77_)79tQGw* zepj@s9YKkc)bu)W8P1Z5t0ABsa;tBjM1+Ecb$_OHyAUNQrEtc7IHOl@=IUe35ur8+ z{ZCL|c9P#?P8|~)y>)BwS_5ojM{z23&=^NL5?cGC^r@i@Q7SY6>kSfGc&-Wi_t!r9 zAm{S#X~`+Se)lv!{a~JsuHzg7A6Cxw?*87eqjlBsxqU8Jsj{yB)$1o}DZ0bwE{wtB zVWi+63|&r=lHbYr-4y=8{jC2&&~s7j<&Sk zm~qS2&eXiphAtEV#RPhpZy%4#$vuEmL@0h*Et1^MM3=2-d|WQz{iT;TCpJjfb3l)C z-3*b_+tabyYZ6N1K!vMbv+mgE49G-)&p8he!3o&7+JH?J&;mNWidR7%JG z_H9f?QKo(Lj2USgR!Rg&gL4m3-AJ9WuJ`j za-RS6t&w>?*B&7M`Ta8ethYZq9Ug}MLfQpT#nSaf2%q90eGG9$2C}JGB?Lg~;}8z> z^r!FJ2jTet+m;g2@AvI47cA9r7t&_spZ-`5I<2K@(6uvvcyep2}VPStd z&7U2YyK(rvw&Y}a=!clv{h(AC`cv&RV$G@>HW#2GlFia%}P^vH*okk@8+iA^DTj$hHVuS42yN}M-NQ1Qn3Frr;I6&>d zVxo78F-;X?oEtmecIx;{z_S@pt(hi2qGQS-L&H+K+5r#lxnMjPBmL4it)>bpLuz0s zP@I}mZ(S%&t~DRhVA@6hDu_dgrg#+kHbugQ)dx9^(pn-sc{r9*@?u85HbMoo2{Z0lGEx)r1WeV5>T2=*x<0*ocugLmfI46)6!6*)Uwss!YhxUynKE!Z zk6zr)VABT(w5fJm=Tn{%I21a@i`&!TFr6<~5lcaP>!p;asXNtCIq;Zv1S~S@JNStP zPte_Z_IXaoy=cC{F46hss4z|AnvvWLhVAblYP>0bWgGG@Hp^Hm&@*^&(WDTL%L!f3d$BP9t>JW@4^}FNy zaOedNJTArNQ5k7v7QRSK1d?)MzhprF48Kx_a`a3*758aH-bRFP*ApwQJxvXz=lp-L zNzD_^$4v|7uYrNeAPvhFvyWQjrl>=P%I-|mF|gjjTH@INU>7nK0&93GG$He@*}Kq! zzj1TMPVDxfI=<<$b~H#8CPym9(8!{aoe*YMjRQsmnp{=}uzP`KmGD6&gMhHulmrNR z_?JX8GJKsA8jxOq`C<~BhAC0v)rr=smK6f!wzhBs!avpAg)s4`DIu{*Xobmcv`3mx z`b*Poj561jm#L0%jp--SnypLa_{k}Zlg$B)hh)U3gy?cJ!lxzw;&EI;OOZ_8@mVRK zQx865bZo53@rCWCHxw zJJYCWaop7YgLM1z>t%#+qoJ{f5yu?jU7gyn7W7x=+7YNoy}3*IgH&$jb<t~R?4+$3{`5&x3 z#v1uLP`oVgUZ_pAPmh=P=sM(F=m`7uwo0Qnm!GcZc)cckGETW9 zdKu=hwJQ*47g%rjRNcBJNqWpB-ON);`QiLnQamqjQz$Z&UK)IYz>`51#}g5E2c#FR zUEs3maINI1p4Osa?*w>vHlgqdVePO3-Ycsn*Fw@~_`F+hIXK)WvUdGjzhz{%hxg<1 z6h8bE-$4P*B2ry6iIhw?NfcP+-KJc>-=FG6E?ELIeo{4nE{)Kxtk!iL7nC zo{Bs;Rh-!?)R9;01Xv6na+M(^2eA)~zH!QH7v0bd#%W~d6B{5L;=%dxJo7-Y*|`=) z=jr)`E;f%gI_#^+^G!S-yyX~j#!;)lrZ8u$Vv%B^L^l^H{<&xXVNuy72VxcemzSqM zHy?iEZoN6IPj3#V6i;9~O({DST3uP+1hf;G05NyHcKKZOJ?=SsHvgyd`A^J;?@!xw zY)@}%&~)g-)EIG8OLXqpVT^4bi4L$4ziR)P$T{G|!jAvxvVPBp^c=p-N$VJY{8j$R z+iool1l*P_qXJwJP9YsZq4~Ym-U8+#d+fKD<=eIX#-YDBw71LrVx+6}{9}o3f-jK8 zmP}|Z+a)2QtzCaQ8hl*w#NAdGtyc-zd2rghwR3AI;HV}S|K~J6hkKEip!D(tB{J27 z_6}MjSY!Z{a$=Ab5~NAFCkYWZhma(VHF{*|9cU+XW5*+oVZ@!HlFZtuS2Z$xqn-2o z%*x)RV^QNK*BRN4&;d%dr(^*=Q;Fl*XgB*XLo*I&;Zz+1ILADj$=gyUFg`q;T@!K_ z1WmgOJG14nYr+v@5DN``P!}n(q3aXi0)s#_-li0M4i14gb?KP;98{Ig*clqdsI*u6 zOn>%|{3yos<=5|XO0As@2s}7!W1?8K{`ePcnmGu6N*4;`|QUEr{g#)Lt0lPeLuZ>JY(2C-5n3R{LS9l_7z1e zjo?r95l4y&v5n3jaLGs|IaTP65+a}km#ugfeN3KhA(U2VAy>4Wd7E$2~&i`W}tw(aeVku>ClKZodyTB5}KZ2 zo(z-Rlqxzfk;e|-RBN>2y$gkQ63;pX!%m531JNP}?QXUxzlyuL_pTfx?3iDLP7WbE zT{}0C{{NZ!3vgMM@z6xP)*<-0dH?fI@xj1f z_H-=HjTCJgXJ!{8@$v8`u7ysvM?M34(Hh1*XYz7if4R+Hdy~#cKlGMHgqn~*h}l6Q zN4=cmEMBagBfV(#)_d#(kO_a&wEb3FbWOLi0kcOh#b14+FXoaw7Zubip)J@$mp6FU z=8W_O-d5`=PE|v9b9^E4{0c8KybC?@kS9z*c5W1>>1vijSPeG`pVi|WT1g_vIHjyE zl|?`;4pOn45|Scek=7;eG(^xsb3Yzj;DsQb|BjTJM&cQ^>efsLq8PI(O*w`&yX?7; z-&{4NXsi2bF_5z{m!{4n79flH|L8+Gv%sPyIZWrZ9!+c*Qk_fqyLh!j#kHHy$J~4@ zfGC;Q6**5L;wm5;@t<+=cWjProF=)3otlj~H!149(mpCn=uux(&7n>cPevH@Y_p5b z6(v+r?>9OInhk(o`?CPrMR}TI4#(2K_3d1>lCEzH zcEHSXn&Lhu4+EL@B zI28+D5a8~g7b>~_?Zk&t1AULr&(SvX$P(GHo)$M|NOP@Ts)gCClIzqB-uFH+B9`i& zL_r!=25$Z-2lgg`gTI?0`B*9SyP;4u2FE;*kulJ|wm8kgAUAm(KnO!(jy9~=m~xQoUu);o%`vQGaFL-$GXzO3VY(;#oE$zFE|;=Aa&SMY$OAvjM5FN%OS8 zZ~%SN6avz5o>*dKEV ze7+QW2o3X}$vahv|M@x@(0|W4(wvG29jz!U!QCzY)l1Jz~r6>`2Q{6$z zX^q^iYMoy0PLQ%2n2i^wdAKlc)D`HJv3CM}x~P^VCnqK4BujCJp8*s~JDC9YWZk{Q z%p?la6G;-U7`1YfRt=5~vk_e<#Ci=`f?|t(8>FuE<8s|2roPz^o8rSWj_9D@t z3@E2-pQ!c}F>=$elT__A&~EY>tk)f=3@~H>bZIsTXe|m`9k+}T$aY{^ey~gSovwz1hzwxJ{uO}e^$kk4{0%a z^0NwP_Z~KwAL+11TL7Cs;GIj{YVUbb_NBE!_)y^%?danPMYQiCuX(-p@2&J}(&X{% zA=<2QfE#*9n;htCwcY_d9`c$m>yFdoJl=@hwHAQT09FAX55qw8EXD5|H+Ba-GioiWeYW!f6#fdI9M2?SC^vd$hN z`}n)(5BAc@o4k1nDg zkT`|0{^jn`Is<0i`D-0=pg15@4DI_z`S<~R`Lkd$YwHFWkl_D%)DP4$={G$J?WRo- zElRnvn2807<3!|Wo@g2LGpe={6izisQ{c;#DF?^1m1A&~0*vfh+Cfk9Y?#PIP}Q50 z%wry0b+Uo4P5+EzKW_RlcE3qXJY|hS0Rtfn1;mK!(9gD3ReW4m*Q?l!lX@MUfaBA} z$3cK5^5$mG?w7RNjjNPw3&1@^Cp&5z2^%nSG>R}M3R!jwD+V;5{3K@ck-5l4CCocQ z5;^v6)ey>nWRw{bp+uJ+G%}5t(k>3MD}}u|c&wym9n~|h%7a13h(pQ*I*U~ifDqR0 z2J7)U{a`ki$6+X~XBQgPJK8`rC1w{LnVUpsj+ui->FJ@9R71kUDI(%zQ(vsu)^XOz z@(8J^-7XDXYs`BX7Het|0qR5AgSWofT?vbYD2d&9o-zOrZg$*=oqgzv0-h5jqy^MR z8|}6CBx00|#fWe)tAIf%pA9qE$Yc$Q=S-gZK{iJ*(4OSs(`Ej8tM8@sC?!!_ytk2w znx{Y63((P*Or+18F3=agOgc=RR z!5PC7*`l{h1L*raeWM&*{+`4n5-J0)*geQ@2lgC7PvjqPgB|iDSWl3#OLRc-vyS~W zo5Km(*c=RO00ZGjoEQ|~P{nyBF@#LA3P8dvz#HxB7NauiEI1#~&m*W2WPp%NZ{3$*z~m;*S@ z{i~uNq3RRPCd6#&w0}#NXPa?IZ*C6ETxAB+%d^Kr9!_b9 z<}Q+*Osipx=waMEwGg+}u2Q#{K^}&r6(F8kYw?cvk~j#QMprCvVjfvmmvz*j?y{)` z>>(P@0l~vQPZSb6(a-Uhif668_(bSU^FAW2{Ul22X%Hp$^e7s~PR5yAHPgrC2N)mjZs=;F@Ch^@6rtqmYl*4O;g=P<(a!Tm{kXFA9Qy{rh&cOpZi zrsC}bZ-yykrl{&VKOdl(mKuLGr#|@^8h9~#2=~yrwCV>(gc4*&=R};k;Z;->ShUeP z7RcQZ#HpOYrp@e(L!;<|sydAX9Sa6t>+ajqLedgewX&F29sS)IEQb$Cd_o7BIiVWG z>?;FCYrzeGny$T>xb&1Lq_4&S_t6~iSZUhX3>%OBWK_uZ=DK)ZS|2oYq1`q|;Xxh* zq4+bK2+ombRdFyd3O)8M6{DsHujU64Br1j&C0w+304|3y`-s37^7wIGzN_scg&k)v z&SZly8zivcFBh$!9_Sm#+reN$DA0{V+2w;Cmy~D`llT=sLj!>OO_5s|0yI zeCI@+NR1f$eDiAlojjZ~W#*>lonbaVEW(t>#lYcaX^{z0!k9ZFG)|#J;uxK?!&mqA zZX&jbBtLr@pq?Ul!)hTk!=aGj&V}O;KZR8!jC87U z1LD3dj%C|0uvjsLQUad{L`l;~VZXQ;&f?*?(`xW%sAC8*M>$Oa6SPAk%6*!UV@g%4 zHgCG4sg7=3#b}K+xklpSi;LE*mWHI#%K2{d`0{e8x)fDCjRAc6d>MzK)?ymAW?jO& zb4+@Wp$=?YAZ+*I59FH*Ak3DcryY)vrWxt4L--;882`B0I|Ns3yNopXNpb{Jyh;&p zJ<9enC(d+7>N-VAaOxFfAP0YfV}ui8(D zC=|W^>NYVUN9h@z^^;3G#LAnrDW}C@1rNKcl^w+qV%hH~xkFhEZjYBzz;W^;c?NVbO?Sto zTIc3^e?UQDP%2`HaX?y35>n0-&TrjETonSmW=aGj*itowj6$yo0Y-M~M9d7qHS)O`R->-~vj)a3=K?l899d#9Qhe%k7;N za?&}wk;_OQMt2xEi6b@Q1#JUzGf&TuTB~BsJJvnu zMAOd0TUV6Wht|#{yL76 zDT>y^aYmQ32m#Nx9-I^Mo0~f#T@JmS+*s-N!q?e9JR{?iv1yUkDj$QQ&{lo;X)xD1AW7sBrD?&|ex0JS0i%9D5g zfeoE~&Sbttvb%2q1AGT@8mXIh2X|A~W(3^Zg~s9I^u^3H4qb}W2a~(hiokrk1QT?& z8y{^`MRmsiYUg{;z3D`?aH2v&ibLdXe-mna8hI9C#eGEU{s)83j)7`Bw+uui!upo* zNfa3~MlR5Yo0So&mdMnLH?sp&@J6tQXMsQvZkDj31PL!#B2i+1MnUx>r?+=on-}w+Y#3nXlf0Kn4&mt)(>#ej=WT@=##Pn_S`S}M*!6O zQ5En3B?f&1x;2!3ev_gVx7EIC4gIBnZR?%AR`H{Ad%DmIfsNtDtHe9Mtk0%=tD+_) zAe-PInAgpSpOk7~8{ox{qN^Jl2n4N~-GH3~K_^;wi#zi4FLE71T0FoG&f<7h=Lac8 z_vP_qQ^G@WP9V^MxtP9VC;+p;yFBc*9zCmygx707y-|8XRso*Y@;DDuqtBhmFW*Ez z5;G_9uxJqR)8j3BbI3)(1$+CdEG4pW7p;h5v(MzGJgBwsIIiZmbxpIR`{cL^14!V} z#8g2^f>eawU%;G3Lsw|@v?z>dn_!&s-CNUCssJ{y1cc4Hi<|_(+EJ9Su}xMbHo5vj z!w^yw@VcG7fX!))t~dHiIn2#tN^@J(kC2EfNd9|f%(Ui`ajNQ?k*3hG9NqTBeTFqO zLPVQcbm>`9N|Vm(Q0ua5866Ps(gk_Q=I8RVl)xym!z0^a!;FVT+?D=@6aDB%UlN)U$$?<&gdkMMFSOPO198q$ ztg&c{1ly(i%EY##F6Qa%8}0y6SP+>g`t)EFJ!`rj;eQ<((@^9$GL6C8s3nv`0XlH3 z=-#rfX@EwLxW8mCO*9ID-c?4Ts7AVw(mJT1jx49pB(V^T_53{sT0{7}i*ONC0}A$a ze=1CI--3Eho!qlFw;}q1{Z94=5E5MIuO7Tm>5R^fGR2ro5KhC`)ir8`LIVIq{dPys zK^T%R8b$3N$sA2^ZcBiz%r3Z3j(0l20af9URLDeDZ*0)$l5ED3&i)+sL76CFKT&%>>=Iu07nQh=f#Dm%Ie#d^{4U~#6oIiX^^noM0$?$b;Bk5&IFK##Ql0Nn8k3A5L z!RRlIWE&n6(X&=RX%(F(dkwH*tG=f*z-_ChS!#MK=?ewwfL2ndPSZ+6@p9_rYKx|D zph(?u%m=eAR(aHts(mM0l+YBmnz3a}S6YKFuNagkN~$%a3^}0$F-M zAtc_HH)3nmd?EUvK=A&QF&nwBD zP;#zMYuZF(gFU=>(7g&hZLH;3+hS&$?T&$BLV^H~%W)}lq>0Od3OWwkC>dHk>dET% zJPkR{=OCgG^FYLmV`c!mbL~%4UCOeQasvJtkHyfmEJej0o$tmxREa62rYHh^#3)?% zp(k?z?qdMup5w)12!}z5V#_-H%W4yiK53YK0Cm!Oh_C6rT9y47lfQ>jL9?C8bwJD@ z-Xu^HAYP|o{iZ~AOdcX4!}L~Vcq+ucmuk3<%brq=HD?CYp73{5kNcyogZRGbop2d% z;*X$DNd13xuZk28`Bh-+GU@t3Z%*6naA<{tr7W)J38w z#xVM%YG+rXb{7~(u5;upM^6C7#bg}FXt)-yW*XDMQtOa%xWsvRCLwr)f(qRud-VtO zB(n8grvhRTG*OFiO6*%uq&hFKi4WjdHAhk@bS^Sy1FYCMEDDBH%MxPpM5#3)Iu+vr zwu)%8FJwU=#Rg(f8|5LC7u|o#IFHM+c*ViYAhj6NFioo3r}z_DsEt|2_Nvrj7|}4L zB+{IHkz1{t2OqP^rOpXb8b-5de*_;u`$?!(4Zn^&<>6tOgOa4qQa`8kFr_aV{QR;U zv?&uc%|H!ha_USoII6y~0*H^1Kgh#vm2c99OddC1s%{eVn_stjs_!HoJ7+q01lKQ^9!8|Ev3y=nqPDML&W z`SjGYQjOX}8orqL7qywVyj>c=lFP zHk;a84=)bKhJH*Q=KcA0`uv9<8Ni#{SuN(PTU(HU{8GDySs!Uqjd*D)F#zs9SqF>; zcQ6xGN^Ks&Lmy5|v1*eR!Z60}1&d8XB5oG=A=7rK0$|mL`-G}GxFO(^-SG1D)0?>j z#4_a#5G2C$&6x7md{ARvbYB;!qG3p{9Vj2u_~86fdtcf_f{SJiTFN0RX18~T)+AVe z;C4D*)F@M8cA^Ng`2={+D`9N}_Xtkryf(0gQ^_nCG^m` zeS%?WHFV<=ccrfNv{7Q<#29MSA*dZ#mVdAmrcwkb7;7;{8z@E(B8?*E=uNp0uGgHc z0*7mvdP6uR&xjQiLhaUoz%w@n2>M4FOe4>sn269;&{w3JbNM@^0eViLl=FQPB=#NY z>8Vt0;wi9ef2v~hHI%&0Ut&(sdCFN?fgOa7P3gM8W;Si6x)d?>bAg*Q57rjjqqUN7 zh;j~rl{8H4T9hr`tz~DTw^qm)4H6BaRlS$%#$JNrH?4`gVpFsYt0{R#bQB$sc3IxP zI6U2_yLtF1r>}-L29vZdyMaFIkX&Tu8tJat_u3L;wNXvW8)Wh(+4?! z0r6~T0QF3GlUa-I-Cm0Uwh&-!cNrqb{1#$sb%%c9B7XDrxJz}%^jkPR75Q3SJ|+4< zG$A&#Sg0=;Z$;FqL!B5?o@Yba4&{1}#dL)9*4g}eNy9umr1VCssrUmF^Ym~syi5FA z<)ye06?TH(sw1snk!2S^Nbzu?BpVI;3@Ay+h@(n{&Y?{~kwHp9%mrBVB9lpL@X*PrBbVFHiq<2IHq;^ATS?30Gyi+ zOb+o|Rau(&8$u#r&sTFy7+VunKK(&ykQf?c)a;_6KGnUw#$iU7!5)W23bae!JR(Ip-U(D2LL5EhdGwifP(^v?+4SGha6M5wKV{H`_UyKl(OVZ zH#b*=__+_>Gt*Z$GXT4tiY1!b5|$ZZ`ra!v7krM%ClI~wc;dXw*gd{3&6UHVci5`j z2e-qq9p@S!XLR#GJr)4G1Ndf>r#FQ>-BX8N1>or&{2$)fr7xM<<~RG9GDb$<6n^B# zpZxy6;e-Fkf99tEPAS$u_y73j|LTAGbHvdPi1^fpU!R=X+E$uGCK&P0Kn}}YBK#!EKSFb-SsxOXca3oD^$B2?NRCppPtXBH zjEj{|{wmFx+&-mLeXn&d;6BnxqiR!YVO|Z`1rr@&B(r950+u!mxs)0n}Y=}F#s zFFJ!fO3Bb3pB-KvHwMH$p3tS$VhOq^UIyF(yha#--knC9=gXXKMT*JwqJ;Q(BM+B6 z5N~U72nIp|r-H?`5Mq2;otW^2lwU(NfSc38YA>I|M_aoUc`u<>exteooU0W_{St-Q zyOC)y!_;grKP$BnBynz{mkueQMvonhh)S4nu6xbmdlHzRj>y8oe zgkf8cQF*6u%=d-88Kwuo^CRLjqeP`xz;=xixJZXA37C)u(3F@grL@!^w z8aMW(&wXYyj;A~-vijB#^YL)kLxbvE%P?d^CnLLu?fp1UFqm6t?R$A@+I6zM0&r-= zcb+2=vbH((CE$PEhv9!vjnF<2{X3J*>aBByDo|DbBmcHtdPZ%cFR!kVyLWTu@!>`K z=l{Upa=2~Bn~J_94*Pa&$G|OuG8G|g$T=k^7Oum{(Z(pXDF)<%^P$8`2ayT85wDMS z`NT^cz%hQ+d&GV3boOV=>q6g@9u%EtA7bvgbC~*EuMvttf4xrjjA-ewiUiCb)LwN(t+tQZz# zQxQJc{NOuuo09~=*S%5KsC z)nMg**WGXLMerwA(biR~JLLQ~Smhf4GySQZfAYg1>N0ZzmWKHO|*yXosV= zH^D2|;2`Lp;M+!z5qE%Bt=_g;fgYX=iOQ7a*WYfw)k@e`=Z?%FGn;$k#B5~T-meMF zM|c}?Lf0rYc(Lf{&*Ouf-Ym;M?DQLI@M@uV+&B!^`TKzO*69qEj)Kox~d2stdZ{b91 zU8|$No!`to!@-<#sf`J#kN&x)g)FK%<>a=bdTgsltxtrYSAwM(Cr3-g12iXCN5R#YTG$?Ra`Y$s_rH}RVO2% zFK$F=s(z`tsa1(IIA|Xz66S04=wjzEh=&2Sfv5A`b}n*vEQokG9($%oFzj%@%tqt! zcw9?gyN~bUy2BBA9IB18Uyr2>DK!!Q1x}2mR%R-v3+g(T6oWFJGQ77N(KW>Xt=azA z&j)H`b&;zI(*Uh{2vj|^rMGMdhmrsFKlL{pZW>~|eVNY2f9{|DWhCqBDi+xy8tS9- zi&ASu=KjomjTMc3Q|f_#gH%J->xWRV=Jd*MT-gzxci%!X1&6 zAV;W(al&v{P`fYRyif=X0|*eHb~1d55s9& zRH=-~y89WWMA33;wKh+mm`9Pu1SutH#_Z)4Plw}S$O92eD~ve~Dt1&Xw7EnVKs$Xm zO`=WIMs%3ZIcLwSecO-tUpMB2^a(S%s%bSCy*xW3s-Q1Lxj{-}m_MeRs|F@RX8;w2 z5`Lp{E&IXfZP6d-GN3n^))2ckmaHgj*coR`_hRQSq!oi5;DPj2(|_~j@POn;7{4@a zzB3;x(BLh3QW(q*NN6pk!8DmUdWM#Ufm)|u>uo!utGO@lHipu zTc0U|oH+dEmO6_hB6a!9EY`fe#wl~GRH<|K!e(9#M;Sf-#c2N$l8esmW_F)E6IYSu z*qKY6S8;TXqC5}W8U#bZU7*8#nwl=2gM(;g${c7__g=3=$wkm+aAIf^LG$eJ|a(|+O19IJpWH;McjPUEQ-jZJVL;BFj#b?0*i;MtQ2#8K@X-P_y4ZoAvx z9)?6;{OCh8JQWj&w|9F2*zC66z-@`lRF>r!?T{|=?@r;LUS9=r67r(%WD(SAdVRf^ z&8JoI_PdY$em%cB!o7mRDu&QM>A1<`7|h4huN5GKCh(7Z2LHMb@!$Wa?8Zxsmv3Gz zi#W>-M&1tWjV~2b$E8*OTmQMg@Z!x?DI(e_FyZRLm|kDsc{Q1dLM=^~GFNE=s?Mi6 zn|5MCN{TQ}Q%>0khn)OY*-}fj=CK-lug3s?AH~>B0s8sL;%uV1v~Y~fq35CT!l}27 z`#iluln9_fE9qt;s`7Nev`4n}}l z^+P3v#6y=Ph2RwtMkm>Ip@7lr0`U_k#H^h;B|$9%PmL`OmmqbxUk8U=vsy?yNm!pn z1<*ZCz+$E?&NuIFQS6IC(7Y17V51&J@2-+ttLtemh;r= z5<4#ns%Z3utO65{W0F?9l_2C+yunIenr2RFFpQg47m73@5+D9m|y9v+HdlR9=Kq#t{j}zIfBuz`3#>>EABTMqs8M>iN*8vLm&%UOzap6u`4LeMV z!Yhi$$l4fu^rh2DBLOC+$hBh#FN9hUdM5hj>IwjV^oKro3fVWa8P0x`UY?z$JRIiP z`(Eyf8k^8lp@`vq z{Y!)WnLoi*>>vMU^ndezn*|t6*-zH9%K_Do1F!S)lz;Z${&-%Bh2%~|Q}dewL*yjN@Mqw91z}UMP@e?UV-qc#kqnjBxE}W7HgrT6Q zigPWX>v8x+s`xZ64xFr;@6$MpO`A3IU6p!~ix5SfmKM)#LokCCbg70wD?~>>dVc>C z`I(OoKsYlK(1Q2_8s2GztzA`l)8x@KewNc-2&p?!#5 z1u>YH!PJ^jVzU$=A5)6FArrT1tJ|iGg-jrU!HO^uwAW6_#8JmouXMNv^wpX0Bd zuteeO)*8}9x*T&9b-r{pj8t6P)`Qkpse!R7IKX4Jy~!NqR$!6%uIv&+Iw z#Ru1&`4;uRe`M}c6{RhrFb!j1ZKW(hV=~_xO>}?UbKJlz}Jt3#xUXaHA0sK4B< zRn6Y}q8Mj*XVCZE6Fc4<5PbF+|0n-xyt>w9!T*q)c&+wH zf#B);U5yky!Zd~sip8Ue*$EDrh*+A?J2jVEf#lzTiui2E0;9#@*RlngOD*13RJa(2b*TnI-NN~T;NQI3J%QWToJpzz z4X5L_-66f}{(*ahZ&aw-KqdQQ|Bb`Y44)EIr7nPt_(0@W4{1<)f)>7|31EU%Sl;i! zi<~~Y6d-s_DYtT&(ud4%5X4~1SPXt-xBGZm{)Tb*+1m@LI|pgFwjoGqY)=)tqF4Xqj{HjQ*U#(8QfiZqJMARKslPD4ZlQAk9*B2BAjxs~RO zX0N&ff|Ksx97NaTo6EBofaBpv$wu59mLt(a5v;1gF*l90-?&dqc=Zz;!$eYQj9Vr` z_HvZNQ%QUOk&wF!RyB^@(M#tTycQ&OWw0=7*B){JF3vV0a&r&_IF=-iJPKbMl_2ZPX_}^rh{8{Xd^>Z_NOH{Hnf9hTMOaI2t zTCM?3h`{$gsezAn5JbU2=JE06S@?Dyk7cQfo*>P#AYsgkk9maNPl{Q(d6quh9aD7| zXPY6Xu)PVj(0Qq~b-u!3DLp@=E-F_`jg!guDIu-RGQgZM=NuBxxE>+Hkow45v<;%) z8y7>4^pKxBWHCF~TMk|A8enzaCV&))NyOZ>NgU{X7+qpS_wFwypvfp?r+cY`QP6c6 z(XM5x(f_QbY$@Jet*z7X-E#rsdhP+Jd-M8kTqeD&!7jwz&r=PzqYx|f`F2F7~In*r8C0SU_>2M)Ha5r-vz+L~3Z3 zQ$E(3C>a{lfZDzK7Hz+8@`-5w1Rsop4#TYSsNmxhSMpc z81vh{&GkQU?aVnP0) zghA`ajL^p~ODTzyr$d62DZnBlOdxF)FO-6qA}S(6&V$864IW^a0f#uQbVCgLFv ztsPs8h0s3eXFiR znjQ#;oNxEyD%RBuK78*XAb;)a-}~q@?|QUWBfh#V!8h{;iHsvh>EkJHrzTq1Z$!>V zvHbc07NMa@^Y%cJ;8K~h&wBSb`aSA1N>!yP>DRt7{~iA*F=7?2ipXh97_vyuUSIvQ ze*ph^P(P%}y6+RPGp8JS@rs1aXMOPX-CYzJrPc2G2&cowpeNEzW&^vp*ovq~uw}57 zV+3MAh-_e;itVK4ZY;Tq^+p{Ow>|zC_LI$DXVpPMijEU-iliZ;iuP%)02)lg-q?@K zHS6d&QI~lRAH8k`6GC_a0rkKx{fe~t2XVv`6Msk(<0$D4tC&4%Rf!TyGB)5J zPw90N2@zj}5g_&*h$OFsXi{vNEjEEb+f#`B9sN;>6F=W@`h<6met7nCwX%k~lMSTM} z>P8_=>2ODi+BpSGXNcbEjcPYCBlg~%2RPFfV6LrW?C}p^PTFhCm7mU`-q(n8bdnsp z6pzgix?Y|=oE~ItE$391rAw^!akVgV3|Ure(piEWQYX;}b8@R1#To-SU5P=9B%t@10MXk+sZ)Q{8 z5qZ}HICkY{-Z}A&ulB{%lx;VSVpeM_wU7hcBQwWI=btO*bd<{8<~iR@DY1xL-yO8J zrKka%D0MzCf3`h)`pJuCnxUiD(1qQ@Q8)T7pj~kR;#(Sj6Tt5O3cY;d3{oesNWy~& zSeg}_dzypQ`!u0f5Df7+DXBjtV;8sc_4@V6G-(y8(X$7H?!uInNUEDeVxYV zP#_3@5x-<_D^mjNG{vP>AFAn!4@e;Z*JG|>2d9Fw5O_lPf-_I=9T3f;iCnaDWy{+VgJP)>E@5sdJZC(*ciR1Y4Z-qpRlx6n#pE!AKOQZMay7`xn zHgwUvTC3{_L6abq#q@HdVFZz(txlS8a#A09aE!}mtYU5gJG#}+Vb8@3*uUgqB~PQY z2GK6o<^rfOb=^5tLC*ItR7MaDgEB8$oCYqY5Uf)OBN`Ocr>Y+x4;P5<0-Q6GL6J5P zp;CfK$8Z?uzx*2ZRTID#F&i!jYF(qvUz01!w*-Gx%45JMPUJ7z5GfNbYHYn-fvG&N zoK3Sk+*ao~e=tlNhxOig({j&z1NO-RJA!vAEC|O|6d(ycuzHd5)0@m>XOn&Bc^Y!R$sqgc-HbXj7Q>~#c3(4e8=BFH&?3d?XbuwflqU9hXyir647bp@s?_P3{soKA1KMX{ zIGUMAexbo1igL+Y;VF^ShAD41 z8$gE6HSz-_sM8oJYiBP~fDb*&t_YI_U=q)@b*))idlCH*@La0r-AK_QINvk?sDG^cCiBV!Byi(7%t-*!im72=M`5xT%7)rEphcF95MAWf;p%nx(kl!REDW2dn&7Hfj2HJ&##-&x$yNUzLL>z2s?FFD;c zxn~(%H+cFA*oUiY@MCIGB=8KoIhKT7bS03tU=)K0HfyM%0SBTLJPc667QVi5`g(i} zx!h<$F@_{K78O*CBdM*20jdP}-tk!Gh&AdxDGuOOup!l2(Y*mgteH_8)S5FLT>T(a zvIG@dke$0aT;xyi47K`qTyW zgN~g&@GtLvV}H`;*_RCIV`0Z;`5u=Z$EgO65h_Y4wA(w8^z3edktS2aY zt**Vfyaq@=9pdjjS_K=vhi$d~CXr<$#xbJ(0Y~maYXH6n&w}U~Ukj19{$sX!jl~Z} zcEsK8K03Vy-KY%)_7TH-?V!#jjlM;&x;rxFUt9$@qBHJkc6={P)M7@U%ihIkr%%?a zMBhmur4%!aswS;PYLG;{H3vatbgjq~r2upCZJ2i0;Kc0vY`{V72t9lR7s}Bc2TyW7G zCE~f%NWMN$jYZo4s@f})k@@_7NF1c;x76B?aNm^lF}e z5GwX$;`D--D+=c0wTeAJ>is>%E}@PI*;ow{ zBZu`;?=-e#nLJ1+7REVxWks zPJNCU7j?#G%v(W>iwh7_D;6FIn`yUHi69pWpc%)&pjvHF6^;R}NA?<1HNhZpm_0z;a!x5Zwla+aqE(;SE2WvM!3MdoYg#&C z0krGW#bIXQKvz6_0WC!uwtHSuKu94*-z+Y~pS5?0ds?iKjK_R*WC(hH>L5rsDTNe_ z_x+5!@L$kS;x&7Nxz9cJ-fK|8L$_c1;nL@_SFKR%+}ZVyB>+f6HX|2GaaxJ~rRkgv?n0R{m;`shqQ-s9jCp$D*+nIar-i4U$mjS^8R=lY&_nqnZw6{J zk`bh+FM;}ec+9M4AMYO$iiVkJQ!j@RkiG3o%rQb~@!z#O_a~&$dD&u+5~w>W?`JC# zs+2MgDIv!=SCJ+Xq<;;z3!_b^U#F-LMkfC;t)}FwHB3n%4Wc{_!@SJyMHa|FoJ5=F)%Cr&SKvNQ%<1a&%86a(B(}Y` zl>6e+7~=^ZScJ?K0n%_Xw5qg*5^WlE!+QtW#MJX&$KgvWPaa-GSn*jJxVl|bHO?o{ zv>eO}h*_L0eVp}J4gfYU^*GNW(gc?oMF4Y^`Y8{S>s9dVLvy9om-Q8C4cNg)+E812 z=dI1vp)S?+{vuEJL@$)o@003#liZXTA}bHD&mUgmlwuUzl)X=oo$R!fJB;Zkatm6B z?s<@dLn16RTwVIR79SE08U}bEM}Leu<;2|>V`7QH3|Pv79+yG~TUBx%&C%sjj~=Ca z4bt0u6k`x@F>oCGtJEQEHe+I}RSu;@6%wJG7;0^yv3Hh6?dVJVS2qZ7a7T|PI$suyEFwlo+0&C@_%KmvC-A)}e0M&4?-RZlbn7EP7dd@q zv-`m^Z%u<^@3n#xfmW}nFKy4?-QMYP_O`Z{O`f%7P?%MI%XZrYzp8e}N`MS%0A~sf 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

    JGr}`|BqXz2DikrX7dJ&&42s(l zD$JFh>lU59=@a%{iO23-_EARkkcK!-d66LVGEIau2TLm3o)!$>?l|qmc-&Frf#FIK zU91dym~gb#;$hbS!%blU(7-gXi-EC@FF=6eSH!Pri7inRMkUD!TS7)U11V(5G6!8Z z2tAq6!P^V1SeX{-c*n|)s+B`6S`CE7l-ab>h_WiLX0Zi29J^iP{0%_?X)`l=em*j{ z$V4UDRM5pcoK89XMO4No36)41G#I{gKK%shw5#8*zo}oXtLeJlytY4%|Ne0Ja5{c- zJigyw)tBxszv=({{pGK|8h2k_?tgxM{ONG_FVFY?_u=usyzKtz`OiOefA)3%lW%Uu zbNhH=$l=3b-nmZ2D;L%oKpq5d}Z;)7yCB)QsxK)k?@KN?5M`9f!KJV4*94Kl>%HG z3P*KHZy(w*&GeNWK{(9rc`*ReRf0;Si?>*oW8&s3LJ*~G5MwyR8lxy{C|Q;??ZXT~ zCs$C|(3--EbRi#2TEl*!>IDnxb@K&A4!RM~P0upv_6ZFXfK>Dlgl))RXHGPO6ND_=GUWl%T z{_@zKKOFn}n8q3Qr-A zSj<85)2<)yPUrXg_QR=fr< zq6@UbCV>43JS|`GXHfG*Ef^-7X09q)iWd#XC=7Iw!)|14} zQ7ACe3rAl06a`&SyV4N8cBM|T4GMu3kmW78LKFfc(n(C&)DU6>w9@pF+4FMQ0yG>` zNA?LkkBTYHFEvZlPj^^UW;2`8KIDN<_3KySHdiX?Pkt{`+-}IvggC&ff5rOF}B2bwzRj2BxSfWIyqSQZrm(rK`edXWz!G-^S~w{E69ulfL0?bgaRCkPR1`Ynb7SJ z-gR``LpP>3^eC*E1C4t*BMuX;C+M|KIU;T2TO{ujfo$xP=od``Cv4A{yQ?IkfDI9p*!!(o?cXr~nQTkZde- ztH3wfIbZO;Sw?xSW0V^nF#rzb6*jOa+7!C*X_M|KoXz|puBe=TrXdKohrkdf`tpA7 zfHLMnQ*4xPzg&l7OPhKDX?}uQnUMJMA-!QBbZ|s!N7Ahek4(C70tOetigY527l3R@ zkR#1%3eik9Kc73Vi-|_@B?<`A+sAKiRtwe7Sb&^|$@O-1IJ8(w*PRepGwq-D_lNfB z(pR0oo!FT)eVckr%k|`RY}@v9YTMipe7u~qN)G*(?jNonZol*9_V>5VcmC&2{0~2Q z|KI-Vc;{(bq=beiudbJ`mK7tQ`}H>LW0nZk?mfBv*H1{a>#7fTR@GQy0Am93-_vByBF3p~OCDHk#mP~@# zr7unPV4h`&oQ!yl>Z|I<-JP9KPTHK$rVeU1vFZVpP?3m}t|uh)t8|6%G_7c_WJ4=%hbUczYENcoLXg++=2u)5jNA?k1CLz)VZwo6s`_}&6@dWtxlwe1 zVlX;YkuZa4yaV4h7p-Sk=J>Rlzs*R3>_(80(2!& z3El-HPYfoGd&}5*MWUbF`MA;X=K2Qzr2Db$r`37htYR*g$Hxb_W=?}3yoRS9SNVa) zvaAd!U@|okCH9CPf{G@{xs3jn&`{mANYXVKUYUk63}{x6Z0ENkM(>_;abNQ%>~a8~ z5WJ!s7sNa;C?U1R+sN(@42bxN$=Zc!fe{cvK`k6A&%96&R5M*e7P(4%T%x>*@aYCQ z$TDk>1{cPLD8AJrLM1>v`1{~KCc(6dwH4EiLEtt_iKNiL=?x{YhI?RY*b=BU!&EKB z?BM|2n_*&o>USI;B7eqE@5?kjb69r0vlK$>d8Gln2Iz#$w0G!wO~pLy)t^G;WqK%q zOA47}@YS6!On2}g^n+>1X+Vcfl!owXf4yUB2U5m(Ib$Uh1O%pL-Xx`8=x}TgSIgCR zKYN=w!Gw4Pmgi&lYP))T-akA&Gz%|p`}mcXgAcvgeis@*a(i>#P}QqVmmi_xFMs^k z?>`V9D=cn#RbQ&hYI?)uznKjGn@@Is@J~K}_aFW*=imRmkr~?0{%=42&;Qjw{ma=; zCa)i>=DP0J%WXHmn%2YZdiZ9S045p(h5{JIx7U}4!;I+HkJHW5Prt0z!(`gDXOe?P z97`iY?2b=gz5kiyZLk0S@BblkLGFM0uYZ!jGTvO>YC?5&_i(2kOZ3zLeXB?tgE$Sg zbNo_W-(1-~jKBE$uPq$L`VW8ScXExwusd`=`!xv(FBm@D-Kng3JueqVR!sfNrA@=e zA6zV}d6t{-cmMGC^z_6Q3P+FtozJ|b(k&@T3E)%Io|zUA9l9f%L9@7@_Doz|*!k$AkE!0EUtZ!F+a)$ecT>UwyUiIwe8fypSIh!2 zMFQT#(=OtwHqLN!uAmz4d_Dw`dAeQuxC_lkWoZw*jDi?CbsRoPC>5JJ1w7Hg2#GTs z$V^su)DhI<9`YW`X67_{=1Bsl8T9nWp5RSKoomq5V_$&n3 ztB;)zk$^cPBVxj(=K!C0rm?P=(Hlq&L#fDI*d0nt*Lm~H1Z{sg_~;d<>hwidm}Jfq z>d=SQI*bW5WWyh5aY%r#vQ&bLYC(>h7y~P~AR{)!`wu&#j{&heAG`6?1-=VQ1BEa2 ztCT#L9kjP^WVB#c z2ygJIb|`@95wSkY`2MKjeC`!KBpw43XbF%Q#D(fmdtWbS{iS+1_5@d&kRd82MMd_S z4g`1Ih3JA2d75V=9Js^*o#0w{i?X*3(-)0GNnFm-Q$~rN^BKB$+7p4*eH;5pNA1Jf zge+wg)-W+7?3&20RR~aXv`B$*FNuLB=x|vh8{US!Ze|$W!@-AEBC@{oUS$ZA2!m(c z`OGK^tI;1|9fuzM`g8)_2D2psHm-LmR1F*;)S~(6B?UQ~P@UZEk9YeMwX8YeGN1|+ zO-{4Am{f<$1*hQCGuxl~`+fK9Q(Dnr z?>(;t9Q`UUE#+U;F^;kTmh{QkpDskV3M6I?4kGbHL5p3h5L*#9sDJtOm!6QM6@h0x z&7cDjqES#uk>8&AP#%gP2!Txp!CxrpgJFVQ;dI-dPbRO&^ZohD$Ns7N=acU|51zn! z9_IUMfjrUXd!oO{Ux;HV%J z*-jr0DHg;L(-R59q*lJ{956DLZ9A6%G{Z8AQI8DOIPA(kiZ676Po|x+WT2AqBf~Xw z$qT4p5teD415#>v0L>Awy`k51ky?yiNFI!$6Sl*7heYA!U$F8ZHwH9o8Cj7Er6A=1 zEIUE(HezAV!`ABT0z!lZy=8~H`X+V~-Mo+xkSWffTvG~IKIB+Z*|mhn8>xegWyWm( z8VV}_@kfl~Kr~i#AY6fXZg!CeHN%JLx*~Vf9$*Uecpb-;GfJmOo|)AQxW3Ft zJ_o`Fw?&h_ymD9GfQ!#Fl0Gq?P?|}JZLxii+KlJW%LOR=(8w#4(~J;ENyK9{0WpCA zcr&SH=XP1AP-<~+IF}j;5{N302AALxHrZ1;PLsyT{*3Uw4basT!RtXG3$|k}(Vas9 zsk)^?h{}Zl#l}z#p`I=oBJl=JIzqV@k4lURR-WOR{p1)FhS^{^0P;oID9PF^O~z~~ zpda;vmqa5NVA;hPO)eqxssuWzE9a9%LZMLr^oCL(vRm-xL*<5c<5$!+$#Y{*(lPkQFSkHI}HBqE+eFS@}}P5@0lh0wpfa;N^%s%RgVX z`*Qm-^mmVYCNalT8!FUFz)AVdcDYU6+kfViYM162nwB@!To{@~<;QMwKkmLt;WA?3_?>G!kHYD;_jg9O%JWDWwKrhC$pP!lQurO8r& z<62Tpv*gMvL`kE!3ftm3iP*uM5B%4qSg*FGnPAGFH%5lMuuD9IG|v(Fpcn^X%tjs= zvm3XfXa2H97KUJ68lUK6qr=u=s;pMYIUg|?aAx` zGK~IKPm-;Uz0W{DaKc;EUX!sPkiG!M4^$~xgmEWJd_c*TCL`(Sq4u6$M7mn*%=P5{ z{tk%qX3aJr#_oxudA@=~@$aMY#4g#6ghHkiUZ2X`5}qS&Jyi0H?O3ko0E_@6@w5Pe zo=&+4k7b<_E@)|-S22{m!k=6Nk?hIX5YHP3F?$ghJE*%g8;Rsw%4F3w9Dq(vc`yS+ z(agk%cEQp`gqW5Y&Ii4v1zb65I>La$l{_xG2 zIWU{~Fa=sXdAXOYV{GU1^I_+avHI+4wjg5EUIx1FdP=pn z>;BcB{RKm=uD7pV-6*zk{JX#Vg?jUi8&1x-nK_G;0#E3S=J*(>ZkXqIE}EEg_juCa zhv9ku>?Lqj_5PbXV^KB!JAd?hGuOAr$NlMWH2E>;uYdYeRW_*?Yo#R01a1g>`}#BO zW*iTPeTq6JnupwyO~=V%?wqC{`@TPLEIQZXG))X6R@LsYP@9xkOaaz6S67GvA^SsF zjB-`kC%&ov0;jGXpB~EON2#fgd`$^iH9bU=KB=95>})Qe{N%17YIGf9_eE<6y;aRAF7V?i`p(g9}Z2^1aA zWe4izvgXqd7eXGi6Mg92_0^t_r8fb> zkTVtIz7yvb`dzpHs;Au+Gh+lbmWjw8Z<@Ly>*esCY=I%{j*S#GRP+>PhS?+%&yPY6 zL^6t4g8)$>lta}_+P$y@tUiGND(LC&OnH5g!IzPMO2s#y&LIhjqGrk&f*#wlF#1ca z%@qHUD@?i{&%F+AAR_Ye^8TYUr8;t~*CB})k|_}zpb+kKaN zqY%%Zcf7eKE;J;AJ?vekGO=I}OW+b|ksTHmKLwr(Jw!=sU7Z|`&`+N8sc@F?JDZlZ z4tOL+pgjBJIwJCJn}s_LFFjeOU?2u+K>}jNK^3&Aa*&C@-*Vsu0rZA=ECk!b;A5Ho zG(QF5oQY9Y@47rCKev)ey!I=FpwmBuuX1S-v$4LW8er~AqicGehw$79j8IyT50dS2 zL33RJ9K7(%$OS5tC=p0I4hT4+cf^emARo415C~-(^H76Mj_2BfnhC=Q0Na5ceb6>J z@ba@}vtG~)ZOEsY&$@F9qZ~f&Pe}m%&6U4-l8^#CKiA9cW_8WRZvPA%7(cdq0*86Z z$LejcwEld=aw&5D@po5m|KRoNvl}p9c7O3F|Lyso{d98oc>nbD%>UtdeA+#IbNBxJ z-TS+Thx@19`-caPesh2K;o~hjQ`;Xud$q}3EM|Hi zg;4vXiudn7Kp_Gl|3w$ocRnSMDLQy$7v42Sq@pz0*WMJIfAU7R$Z5iSi15zw34_r|005HyGOZtmG`*b~ZEiizvSgvB` zSOy5R7QVHIAj7!?T-RMo*#!0V^?C)VQXrL)pdjrI-EB{SViD~1<80OSdJPwJBe$Jh zAxu2eMro4VvJ8?|+=|G^7|_$vIya}7*`X&#kqrOG3_u=`j|E@KRKS=1W2g}VL+pj8 zBIpDZCJo?Mi!z`PjmT`H9KM-HL$QyBzUcq3jmV%gzkVfojKKd9fyBG7p%7wJTy)xX zmY*`kks((i8r_gg2{Eo(99%hdKv}DFEju*~5(6nC@x~n2>>!D60~ocZSJ*^)$`*bJ z`bwR#&X4p{p`maX6ogs>0?l$N!NTju4qJ14u#^eoE0ejlQ=n?J+hMwX|*9KoL=gYX&GH;a5yTF zC4JNBF4A#shA7mZ=z;A(=ycr~LIcl|f+U2+1h|&KVBnJ}nRKxWz$8Oclwe`Dq-V2E z%+4X|Q&OZSn{1>J9e|Eq#E$$!zdyOdd=X{EFv5YfxnV7?JcLk=gug_XvKa{42yzFL zgwZCK#CnPMmUweg#sS`=Kt+WhAq2q=R-j#$5Fx+Pi!MY0$+3jOl*~jwc9aA}>Z57M zn_f!dj{!5j%yNe9YQCnB$&2*7KXmE?AM`n_)DUBT8qOWzl@ZBXm+}7b@c8_E|NMxw z+jHA?UNk`zx}0@^)2Ti3*PXpQMrzO|crIi6VSMWTpMQSS_w8YS@Cq1z0>M%P?Rd^B z4>Z-hAYHxsg-W9l+`&aKK4JUx{J5UYkR?jC?D2)3s_A?rDa`Vt5JU*7MkA;cP?`46 z&xhyzNj~YFx;O?DDW{d#vp<}6hhx`v^BLtSsZ{8Q78+*Mo~{6DBU1JfShAN+(Za-Q zb~7MF(DQazT{#v~ZlVDxeh5YU{PNFKEeDzUEAT-MGA>VvBVJ)ys;s>Ml&P63 zql3$Rb?wg%1H?^Nftrc;l+h7h0GTU;l6Ih*3K1^7m;L04IY&y1sAjGy>+u z(P6v2S+AB?+bbv5^QKvNJ&QH655t%mN(P?~PF^MELW}{c+)DwQ-iw3*m9-Z-c}un& zWXH>3s4^fFBOo>yaHW&+{CkCaHX>7vE_XOXdVY@0OIBou&rGnCMZ8q#>}&lMl`kOl zIo>Eo(*OaSTGGmIku*)-;b_*hcf)+#ssze&QHs*^q9RWSMXJ1E3fL)mFc>KRHV;4s z%|ORO=#g@<09U>Fl^)EIyrrIXO!{b&0;j8bfEXx2B*287DUs6jl$`ACa%)1dYOvjYiNWC(Kjl5zukY_E*grhp_lHa0&CaK>ZHLqGcs#Ui-yQlMEdP@qZf<|; z)%ugGs(t?XSCjwhpH*Le_?k!#k;EUhSp;J_kGa5*WGe+;*jOHCFW2rRXjawk*I)nW z`=2w4?!-qIX|cPZKXmuAr9WNr?(L_GW`*(JY@O&Lfgk_mmw)mv|NQR$>3iS#7;pri zL_bCe(BL=@-`qd_$)En&FMs_WxBLEg-r+x+^2?T<_+%>umh^&0AnHnAFuW zL*&?4KR!Ol2L{wL`@zX-!taI2HTiP)_^^9=-anIF_NOD$mvf7c5wFS0)O_YjV)qHd z=-KcA@;ZL!>=skRED#pvd1glC`mUu6IDHC}MsF(j85tLU^!UQquA@!?WS3_vWNtl~ zE&Y`Wg-u7yd%VD%Ph#+4kX{{PBEd9l(1owBmTW7hRG#^>9%4M)VqMEc)<_R>3I{?7a+yLSF2F~9@E;HXtxyHm3m;gmhcp9h)SGXA-g5fThi_VN4 z*d+nq8%py~EuiBz1`9#}3^CKsw4FM{^PEG4G~pW5_N}Tb7lP>JJcIavzY+9F1O(Kz zzu)bHIgh=+z=g9Bohq!zsOx~epT}d?xLjq@l=W{oKuS#W;YhOOEF}p#O}V|HhEaIqYCdJ~0c-LH2^1z7 zYmOWHlOyE5szs`)pQok?a|<6unQC3diIKS;n|RT5Uaed@@E9%v;u8_>;+;eQSWLa* zh&+fqi77}1;{dMHM-+AUqs>G_zLcs@PFxf!tY@juv zCt*TzLb0Mofhe3j1TRE(u#l1>5-Tk9f{`!*a!RD<)viOj{*Ly&(1`v79>|*kGPMk} z`8*4)2B|=RDT*CvMYm*IY^yY8v!%a#;!4zXzM9yGBC}Z(vBFCe6jdIv4?oHKRSw=U0-}BzGYV#1g=yNnpCvrX29mf zW`IElrbsip1WL_@p)@58r36vT5uV#xZb-nt{T2oX#HU>_%qtc+5CUzMM8}4z0Fof~ zyn@N0jAtPIH3&(u+_6(QV}o%;*NlNDTCt-@MX5pL%YwJ?9cbtRUZFq;u7~I$^uc%W zN@&9UxBirp#1Ia=+S}mekB1yhS`4&8gj$HO-U(Jf0_4^!tV0Zr?PM8)($eXTQ-P2P z+IE4D$S#L0lhLO?-*|EACD#fLz6qT;HkMDMfbL~8eYI*h4sNh}$G9OwhlgfDEunPo zCEhO7DiR;jW$GhWcY~L5LgU=%6_|NYnpKBuS{C@*xxZe*q!40oFrt#~>NLpJe^{do zOj#}EK=$!=dCKO#8xLOZ>6Mzr+W~9lGY}}_B{{~kh=yJNNdTZVo>}Ngq9I)w&-`f* zqOPY$P&oy~p>rkyzZ@`SQ%-tIff9usSoaJ^uHaOmP_A$cPH+VQhEqcrcIN>8saC9# zT|6OGxe7mn-DFL3e{(XsDQE}a|w zRc;wV2nINSDUZD6MTP*5nVXyd21;m{)1S`DMotpcd`uHEr<_Bf*sWR6E6@y304b30 z6a7CYB-D3xA!z9O$bmnUsUXz*gdk166eRwlK|{pSTZ%4Z8;Zo+o7>HH>l1#WGN9>+ zR+B@sY?yIk$VSQ}1Spx$=Zgf;^YJ|1-~ZK5wW1&Y{I3P9u{+l_TKN3)#6pTM>_O5K zM_e{yPm$y9jv|xy{bCqi-(0JcSf4hlJ@R4vB^LQI1IQVgMW#SugHIp|KF3gFn6$0| za_6ZqoWqgS$O@l29(Ofz#|u=uqkL+Yf!@MGTkxQ9H8`#CnubbZU?NV^ZG1eGQ4NkX zL?7uQ%4S9}=C81(4G45F#7bQVOqdj5S&b2om*$BWPEBv_HQ8n2H&YaVTZ7!yS3pb16b&$+b#qoV`lh{-8Aq@L(P7(0du?Fgf$jI|of zI*qu9Bc5MWsE&4gK7k-i3v)Z_a|Lolww})r;L|~EdwDZm5Ms_ea}-7b+zLHE41hp{ z0JE_&LBO$Bm&&8&U*Kzpm6MF)WjJ^P!HfEMQRx8MXz}7NCKbdXWcZ7oeghj`mo6E^ z5(1hbfNBzVp1SjLx%RduLo5NsnUx7c7;4-vbwU;Ib&43^!^3@q;=3dvY0^-T$Am=1 z80vIJJ)Ls;DIKKC3wd2%G0H&%)wlON0Tn`H38qxwsT+7<;-a-X6l5NQF7H;D_^{Z_ zmdZ#qN_aKc@eb)AJ(0-?M#ZjuX(xOIyw8|Zr%J;ix`VM&;QJP`ok>Z%H61%NIB5MY;-6fYcdTSoU zfDq9B#~mqeX^D&i#wC!5MrsaIQTx=LYDYK*rOhVDe{LTiZ`moO>MnpD$ zSDMOo{Ht#y4`aYq7Y6S7^~QEWM%v zP(gzU*E`StQ2%O#*V}TEdHVH-2dsiV8b0J%v3NrW$jpElRdlDX8;;=1snkRcU`) z!z`%;F+3l=`D=H&;5#N^Bc^MNh?Kw#{q!VXV<8k4AdZ~XHMC(b$zk%sZk)ht+d)!9 zuZN8_PC*hQ&&{R_*zu&pwCdaLvrpf=eRX|%yS={IXg_d95wM(NghXZB5utgRm{?Ua zT7V-cWE02BrSH|`)cy3&&s{tD^6t*FsOZo~PJT)Zk25Q?BeU&@-C1Z*5LEQ^PbLcryar(=X9 zzrf*j*dO@Zh}RQhNX;>ZO-JH0aW8bsKe#1D>JzE9t0kpB@+{Rk%s7j~`3(q4N4d7R8VBKtfTTF)i5qsQV#!0Ib@`}csOQFss{=m z6QO^*^5_4n*{q}^xH+ww;#tZ|8iwoZ*NTY77z;5`r&9dVFE*o(D$AyQ=&S=VJc>}% zeA0mp`hfk#iDfUQ<7WPVAXDHk1L%RUXoWMugOyg$L`8bbiy~uf9Ha9vP$&evao%JV zyV5x%n3Mp$`7ZHO=+ME7#(?)v?1Ix26_-J-7#GdHFl@J&nv{x6&C)kgvIisGR8d-= z1QxhO8bB<6z~c~s!l!p+BqMMdiFAp~$+mRIbU6yIj+Hb|T@^u!wUDeP0AC2lJXDJV zX^;XXUxKGGCrcfQ7jzs{T6746jP*yAU#bX#Vw@bqC;o%sd_J$1Yc@1rMKip)y$%|t z4#oJc4UK{zr(NdPe^Cd2|`JCL+35ACKM8Jq6D?rwMYz4zRE&$Nes`i7b- z&-2#4eEZ+uP_@>(-g#KHYLz%IaVxT0#o%r(%-<9-41=67PN=gz14E8Rp|Xfs00l8l z0W%It0K9-*epsJ)L;?bx#MS+BDXE*9GgG?Mn5Z@LP;d5XL7Kz+A*ORlsEwy z95pNnG>n3?oQa_n9JJyblrHflx&>%P;3R<{1nh6S#F=2KI6G78_mw0;;Il+oM4|^D zD*vi2v|&UMbf9Pw2>DHUdC$9u@h$RMIp!HLbzVha^za*c$roYL+$`4X42eD{YI{~C8!M7H<%k~KmDq5CpNl+p- z()l=!Fs@rKQ@PBfv!9VlF4YL$OL*wjTo#D0Y|Gy%*vpbg{&pW=z>ZEG| zwAbEcplj@`0?|ZJv5f|}WT#=!S~bADsc=}aeBjN@lIghVeFtU0%sXUfe7~)otg*| zL7ss_OOq2&G+jyFZMKdwjewvbT&#R9)nLJ+1haAO-M6MHK6v{{#JZ$ysm|L*-EdL= z(D&Q=^0$BEgDR^5MYdlQ7|uWn|LE${T60NmZ(kKfe(L+OY#3C*P2i6Mj2Ps7LtvSP?b(%pGIf z=q~;oqJa!Ih;R@Uz98gA(^&Z$5j9Nmr(AF=lEaxOuI_mH%*+*d9kRcY6l6yo9teur_O z&1v5V2Am^XuxaoXeOFIly66xLCW5-lNija~nBB9_secPu!HTu9KdU1l1v0$X)p7zx zc@j`^1a6F=;ZOQ_b-l-SW41W3a7iv6C?K2c>p=CM-a&?v^fC^dfvCqUU4m$61Jr47 z!4e&#kEdN)){~1^D{=q{f*nMaWTt3`XviOQ1BHoomf{@rIK=@>7{H*dTT7V*@PY>X zh3g0>S&i$#kbn#vd`lU+K{J`@Y%dxX`^cIOnV1C5W;xNoXD0Wi5Q;7*KL(e-GUO6VX@{T z@aNtCoJ35}j7=bht;?^a*!Y#C*ZT(PbD-~sm$&zj3WnW)hEw#{b+J+4Gdaf=7=VD6 z#=e4L0`*g`V2&9j(BP;z!0$!&8>Y4UA<2HWN&etJ+W)1W2Lh#)JD7sleshW9tZF|D zZyvCEYFkmp!xSWN#(v7kVA2d5LKMsK+Gj?1YKq%> zQ#xOrY&TGkI->)k9+`%BjSCc&PzybVG+`Q|A>D+pevNzpCLY|EQD!5gGA4>~IR5Zj zalYGaU{6e7+ z5l|R2G6|n22k6GSL-qtYVhv;ktd}SL2^pI=qScmZ1QG<+u#-1$ai|lRqFE z(Suj<2V~JgL5cUYhZ+h4SPIIsw>T+o(2kf3tL3#EfCyL=*Gteka6X$Q3V~6I*e#Aw zkL)@l2Q-7G`0yXma{w$xrwZ*NaKMJ#un;9@2H*yE{3GsyHeW&^1C21tb3aCXprnFJ zh94{iBjKF}w1c0bx>_cDi-Ve~fyNKer>h2GX+kOB#=5YYQ{$N29T`OJ8%GM1*&B(c zY}+&>VM;90%;2|jd=rrMC;SB7`h!pTWlI|{stu+kdyzD+Zg0Y>=gBl25k`ig(V@Q} zr4$r57=&YmU9iH{cCKcdwkyXFnbfUfha3E2P-&9u914o{q>vA0j2^mSYXr_K#tJIL zFEmuLIIiMFr?nZ1TV>0Ca9aNO|IrB^g&HLCp^SySj>dR|X2<1= zbyzy0_rd_Ov`0w_5Zn9aKVAlwRm}QnNsOdOsz8*EfgX6FTk#oa&>ZB+TQO993(;qt z;>S+`Y-Ip1oHD}JKZ=LCz0Pun_>2z>P6zmak?1o#sQ^IKMT%Yx_2MCxKxPL_P?7|b zJMDiRO4;xUa^4BG!WIH3nnlUyXy+Zp-j^@AQK^Ijfs(x0UTggfR5a()d1bD~Xxk`u zyi5&)M4Ds73@}k=;tB^~7>>M~bdbDN3|;G>w=!*V-q)Qqy@U|!q8OFNK*I@`0?7x3 zh)#)}kQFKg6iCv4zq^Ek!#mHM&&sps7h6!`kF2aNi@SCJJ&3GdJ~(8S-ap=L`nk!f zdVU}T@1B?z3!?Xh_Fq{$YXtjqpYkPj-6zmepL!P#RrI9FkOj+;_Otj6a%h`{h zD`3%@noQDosdbW#1WY@C8t>K(oDVXCCZXZVImlT>@BE3)))pM%A85t0S`}1IN`&E^ znjOqgNVsSf71}7vQF#7Gj>J*N7D1y0CSqEKI@%_UdwoP0IJ6W#95K(4jxe4#tb@{E z3^13fY&fqzI(rUeYLQaD(Ls5w#*$W5{Csx( zWJ5lzE3=41*yuB+WVi#Pbz(;Msoue*x^|Or8D3D#dJ zoNbyWY{jkPp$E}z8#kT?CKZ4ubltq7Cx6ix`0L;ZhF|M9*k^Ni=0v$T8~EXamm@Vo zFpV|i9=BMQYm!Is5J8j!J7R2xiPYPeiWr&_tJ4>(f7k>NXv0h64C_=$f$YVtm~<8; z8-a)8sQjchdPX%f>hujpse=wzZd#qTj2{Lkt-J?}yg~!bpw&Lj1B9&vU;~^6VcLQN zUK{@Qn7Zpt*MyN8MnXVd=LMUW1-;kr<6Fmt^ahorWU*!wiu77E7%~jVVe|M7Z_|Z2 z@B!e#6NiVhNO-&3p@rS^M_EjNJ!%M!;oL~=V*(vw`Kw>wDH1gE$yN9Elj`NY!N%DK z_y%M+;fM?;Y-=WU2Ofmny{Lnj1`Nqn`B6vzkh>@VGzHEa(HlvhjKvcohKQP`*i+Av_MvHm?cA$vo``6mK&fiw7h{4bH)kPkaUS@=gQ#H={n9!DH# z%n_0ga!M5jv?mu_BHcA4=^&K|KXgWXLTzo%0v)0M8jVzdfG!II%#{vYMbpqX!-=XG zOVk+>mWQnh3T<@hl+HE;@47uehiL-chuy1O!A#hKxF8Kydp*Ydmr4=!09ny8An+1d zum&Y39?>7Ph%T@~?O{v}Tm=9heP;;VwMu^^oz@RMZBdK7FJ6ywJ@Ovkm6^wixC zofqQXdHM)35q8G$rk~DTf7(`8!Rf@Cw6YSmeEp-RPao}{T<@t7htAXy2(cI~7WXab zl$Tvuzq)-rjIq2GYsjdfg@S!E%hQV;IPEqK>M+vNba|Ftv4C6CNoO~_ zJ3go`iWqsJvpw+?RK{t%zT95!w#}y65YJ1}yBvy8gV0oT(g&FH;=8IvX48|Gg7g$u zDy%`Bbs*AA$@RsiuDuY(@S9rQfSCk9Tv(nKu_>&+;?#GV8EPh$20~scxc2Pphu;K` z#m9IY^D!nWZB8f%!%&N3e@6@n!vv4Ibc^<;c7HTT*Z$E>6=8LLCX&dwDpN1q=uA|fcA;jlp*gi#UKZ$->N z*Nsd@NBO3yyXq15=e%TXrA2dn9PAB80EsjfyglaR0zTBGJ0y>DMd}Gjkw7@4uH0|I zGr+i|Yo$X%ZGf~waaBj`-5k10Q`N-#?0}3=OnTyi0WFn+U@eB!52|KmWQao(cVUMj zC*5>{bZO^^{cLA0xW|js2yQwJ6LJ6?PFQ`2NNMa52M42j6Zgz-N~dUOAR*q!3g$tT zL0SufkX@5sR5=k2|64od4j^%j#7TRA6XdosMbR-Lw&-!41fNDVoXgUlJ5CvbXQxwf z|8Ula#iz^J-Ne9)(fmgYG;A7m#b4Ckgz69y|D`<$SI&0G)BJR9B`^9-Lq88>`Dawo zJrCxo9R~0>>&D>@=V@s1*z@d8&Is(nRNHz*uof<68!?>fDFcH#juhS%@aB|wET+mL zsBTEU0uMm`U+?DPOi&iQ;uY+6T$%veAp>?$1fZBxa57Y2!1SL$c!dUPF!Ej%kvX;$ zjw3Ko@JMjlzdsyW;}DF~-S9~F9R~zP_b>+Wp`*f!K5x3Ho$D)5;CB$fr(}Uo5E8_w zM95w3v9p6mJG(*(*f2<-D;>eMb)=w|hH)U2Mn=$&6Y?(pXkZEND`tUc>%IOo3-pD} z0CaWi^*1a^t>QUq3M%UGM=Nz!!Tq?MJ*StLC24PEDmYU`285L0AmPP96_o9;AK;pw zm~_+f4Ti?1Na8l;civSG@Hnzi_`w!*A1uN{f;I3$iKJ6viZT{L3_aR8#e_TKQZ>>b zSmKN=gRb+oQYoHOKe>J*CePR0c%2$jd^F={xI|nbUeAnDMu)W4(wI{OXsjAk6(&R^ z*%53(8)RcgWoJ3kbho+NG+;o^9} zbgEZ`p-&)+ozzcoz~+Spgu%sCWjgf^fxn@45i-Z2HR6ccB4t?5l(u9C_Cr%5PJ}+$ zWyLgthN4O5+KG!8Ba#db0Y}YsvIR`lxze2+RFalVHfA7J-2e@~=wd=-DpDvDF4$d? z@*Mv~ZQ(?-xrnl`Ov%we%jLBn@WFNbApxVpLmA$E_T=hvdpf(L{j=-q{r385|Ckhrktr2OncRlPN+N$a_xFe4{&+r| zPJQnVTP_evlD0p;zI%z%b#7;*RAr$kh1e_$p_mcDQQ7gm@6Wah9Sc*iSgl5H)P@

    N=2O&}-6gpNzJhy@xb9A;hZb4fu`bnlk#|T*WNTn#5 zTZm^IiM@)%k(X0F){I}4?j19lR@a0Xx*bQd_E0-GXb*rvxH@2}n=ToU`G)(P+i6EK z0~-N6e`rRj^VhJDuMCa@mxdrnwz9x;Rz=&iyJo*@k6-xATlN>XJ-_hgJE!LK^7_Tg z-Ss=Kzk!6vKwnV>BsbeS;TkxTjyV;ZN5LG0%w?vRq}dn@(=CvnH1Dx_?Fcj~IS|66 zyfUNV+@2&oi1fN|3Eb!FkBi6qOaZ)g=d5cUFjeF(Xy3qk>C5DuXUI}JbJb7cHC!SP;O-15a>$DTe? z22!^-T+24g?$JXW0BXE)38>?Oz9tb5(UWE5#qL|*0^h2x(6u(a5Pkug%#=b^V1iF7 zq{-PZeE+EHKTD?v)AX>ee&lTPWLZC|Yb>TurhQRAwhP-__WdvI_mnrB!W;QB?HRTB z9$+8i;uJshgGKg*bbJJl$(^0)l1**3_~7gw3i!RQyX?ome~mQ9W||%k;}5iMRFE#q z;=u(>cV+mLe4**z7>0*Z?}|b^Q9t3A$9VX|c^rKp{M9*xh-sL1WztqjTPH1X!JUVk z(Ca7PdN|bSP-i^>ph^h?9j68ZVgpfOYWR(|J;6iQPZNIKvWED==~R|Jx_}2%;%+cG z=MHcN%~T8VkZ?DKm<|j@4LTyg^M@aU6;ASo>MAI8PtD|N2oAqy8$YOwM-r$9F2q<9qP_IUVRIrmpwN0hp?DobLrYawd}c=uOxF z1|V2%4_{?OG2f&|s63rc$HU>U_qCdUhh|+z(1gM>j660wS5r;XcC~r^!2>$MvJOpi zIGkcdlU6`Nay;C~A2LnSsBU=r;-)1ZN^|@MxSiVO*ZFf|^LD=nyU`$-~K#C;IL%Asj;~QHwY2}htgfv$Vw(=C?##C5@mJz}=8ywuCs_?2_=VnDXOI9pj% z0;-6Z`-r0TqX9ic?!6-4!7nQR($iUESY|t6t7pbM5F;90CESd$dgmK-XXXXB53BvH6PjaN$G zDy2Nw6#V0W#zb2&r-eo6Bw!7}*pf_`ItLFXPIj&e^Ur6kn$A5~E;g%sn|1Aj_-Y-- zNysFV^AR=ut*g|HUv9Pv1n01D?&Myoi*n%O7kJO{!m~90kuUwopZFL5m;d^|{BQo> z{@4G`zxQwb2mjaq)t~$~{?&i$kNuDT7x)*_v-a`B)jMx?_aC*}Gr)QWrmE&er#L5K zR+*05i|y+CJbELyo}Yb(M=@7W`oayYp6)N&_U-QUM%w@eW<77Zy%NKhIdt`Y7jcyE zIgM{GmY*wYq9}s{xvsruzp=c4@B3-2r{oaNH}z?Hk&Iu+lAkQ%u_is0qb`IwGTtX! zP10vW`zu$;Uwb(+F#LL+U7}@Z?ld(`LpUJ_1N=0N+hKUiO;$+m7qGUj&eTR%g;u!> zD1G(VfCtADkIBXPy{aJks0xr0@kx>#O^2}2g(%RUI`K%t5XlSI5JY4eVaXiAD(VI5 zs9{miyH1j*ABN?6n=CD2LeIp?%mmi@Bv|_G_kW9C26J>Wg0X3Q)h)jyzuxpZo%Vppk6M{xj7vg*bi*Ry$HQ3s`K^c!TI^U^X+!IUi(I! z1p;;&d@81qA86Ly z(}E+vWF-{n*YI-z!a)l}idk@(%DOoI2N}_TU%?2G8gL@KE?`81VKO~{K7>X#3RpE& zAffAu18iRDKqv&?{ORNE*NWyg{P#y3L>tTMoqo}ZBvWS~1lKz{%dBDs;L#@>T|Y`< ze06j4;NtwP*B&hw^|PzzFRpIhc=+Ux{ZIbLlgFtjtVH6#5dQ3O|Thj99|O)xD~7ueB;9_UQwp_=XzN?YoQ=FXf*VnH$Ywur)w(d)x6iTZ87~|y2H;UpfZSVe4y*wo82XPx< zk7Lr7`zLw+IM3t3X!An)d~k2~BkN5_YPuEC2I<{g3>)zw)0DlYBX+ z+v51P>IHGBEbF?&snzax=CT!JLX>vVSe{vzAcn*9k(r#fF+g{2hf7puEQ=Z}&s%}q*V{?ccKnD5p z)VjuTlaQhAi@ILa#yNNa9Mr!7#Oc&_yJLIX9@F-e@Vj0wmdk~&7?Yc-LADF-(K6$h$ijhp-cm0%A#c*}LT??f(zrM2v zW{1sXi&$k&4a^U-gIf}zyo_cT*Zy!5(>|I+cubWMRiQR=)KAecoP$f=^mOV4vZMv1 zm@-h&L$zJ)0AXu^6-oS}B(EWXggpGH-jsfiK|X3qlX`HO!MQt8JDLVv(Itd9yR z7NpIGR*u%95lw=!fMStUgkWOeO&N`-%#XaqAj1m_*l#`=ZqiF?yt^6R9P!5XG8g$r zf2z3pFBFfp083r4O9hWiO%a0$bY2>6lrw0|m`e~`q9s*Hi;O@zn4l+6M;)tT(KN$m zb4E|*G6&qXuh46n(;xlk|Akde?uf&8R+oktb3{`hBB4N&ln^KAxdu zOIje}iFl|5G6(`fP{RC_T8_dc7I;C@F7zIH=+1bLvx}+2cyD`xui@k7OonEi0q%fm zD$z7x$>!t?_H5v6PWS4IM(%~Pm0 zWc_Bjf>7@u;Koz|8NyZaD=Cx_B%!fPOg5(snyEpi4LC|H<+Lme0QzT8j+I4@pFr0H zpO6_*6IKmZdG?pm^cRxsYt8X%r}o)6UQ;jn!K>OqnzSQfbvO=#E2|KFUcM;OpRUR~ z5EH)k+x2QQ`7qaN_OkThe^@53R4Czv2s%Ui)d{%Eo1Z1oFGcD zjV3CZd9DVhpAw_MBaDg)F;O92P!{D;tU1Ap5I!x;{AV%CP|E_Cmt`*Oo56niUk(I9 zo{Bt>v@DtgQqj`VZ@&NS7rTRR($@pcRRxX<@=*Q4sK7>i!U1vs-2@c%z*9aRSUpYz z;MALqqfD$^h~j2Q=KNN23X(c>_=+MC;t;i$?Knf739Tu_X~`bYq7w(Du!hV2+$+FQy@ZtgfBk`aZe12j?GB26?F5_<1c(1 zjF7Pah61x8m(_Xc5fTUnW?Y#88x2$&Sv1pz<%Aw7=BPo6b}a7QmJbfa!`tk^zPP_D zAMVNrx8^&-H=f zA-!O5;!<1>rPOP9VWwT0XMNJS1_UcXEhp;5T=f;JtUoh?9~*FruSD%)#f4bRy?R@K zt|H#zD9wc8V(pWzx*)>3h-K4j_wRrAqxV00@%-iO-YI~bkWTjD1WwEt3V~l*5&vh; zgEsUe#oqt)%t=2$fusBWrd6!2u_R(a0cC=~g;1OuVe~&`Ia4Gir`{76t9<#ll8udUJHM0Ad8gdA{kTtk&eJ z-U<%<$W8bUqnt=0T{-Os@<%lg_UiJ2<)G#?lXy+$aU>fciaX&NdJQ(>qICejS{2#R z+(DPYA1IzJy>G#AneRTYu1~{0Ee97^ADyg#7@uA8zNwGtM#%=R*KaQtKV9ely^HcQd44OJ<5iwNIqnXz zWm4E_*gBR8%6ezI(}Bwnc_JZ5t-3v+C_la2eJS<*9!F>%6a2(!Obs(Vq24W-vcd-~ z`u;fiviE)8?Oo3rvdP?TPxF0o{mH3021Tzd+g@gM)^oVr2$JknjQPf!(kJK7PpVjGu8IJrU{pwbfNg~9Ow04?|pLjZxfci0|N4|bZwh|mCvPNE*%ki<`U;-yE9$UsQ|1`w;srSSwtQ0q)Mbf`zi0I;xv}cSnh`fC?N=7 zpl9MCd_aYCDd8kqsyTB;8~WlmHMs!w%Fuc=4wNNPfS|`m#)d9wqtul;pi6N8qlgpR za3Idk5&O@6tmSU1ql|hfscK;-YVLQVgUcq!7Ln zY7fT~t;reG78}SS1S1~7F-g%wMNeTgl*)NglShv5UYUe8Nj*HNt&>SVB_m-)3wiy3 zFX&>PiZDUCRwx?)=-xX<%n(Fi5DC;G493YQ2S6f+#9(RofSH>C8_mJ`gYlwhJJ-MC zSHib=fuS>E7Tn;1=otEfd*+S4*vicyBD0Azpy@`SFgivxU^G_aRE$GC4plNNlk~xq zEYs}8(Eq-l`a{Fe-vTX9c4{+>mD|L_`>W>Zaq;u}Jpz4LR}ZG?jFerOBpb6WkTT%W z!URnwOVGWu?IE3ZX?jej2840(N%GaU{(5u#YICAqk)Ly*l5l z?<`kmi+Woww#((#o80vRxf>9(1!Nd*!V!e-qAX&IK&3Ezzx0P3MU&qUF^yz{#}RV% zMNuz`$ho)c^VR0OD%ZZvJgb0%-*-OE9YM%|T_SON+;e%mS=>L{+}SQS%Uba`mdsYG zYOyFE-q}97d-2-c^VjZQym9Z&gS*>1TWYTEpKtG-Z64ge^Va=)PafTUGW3pvBCklF7sXaRbNDcAHg{Ib z^H4mqpc;5iF$tMtS*BcJVvi3vwcYj2;pnm>bbh?u-8{W~K49jyP98nD_xi*83dr@> z1J=^?=&!rYLlPN^6Hcugx*4#L1Z@BVcKR_SMoAcq-ys^!0uN#U#ik%Mri-X%eJXgT zx*JRj1QP_t!06PE$F@JkveC91s?yzWP!)jb{iI!=skTqksknp5l7rA3^%4s(Q#&Hw zdmKgl$DE+eLxFH&1J#HNdSn~n!$RHUNz5InpL6D*2Y_w-QB83Q$S)bBpu(;D739MO zkhYCP(L~&IRr8&TxeqUB1(IdZ;FG~Jpy~{$3V={{zOhqk&vQ)l5-gswhwI|4ZTX0d z7TzOopai!R>uS$;5SCF```J(6g+L1&&;IbwrsbjcXx@GReBe z=nI&FVK{QPpU$W=PRqqvthm4>EYvJ-;g!GujveqZ{+R4IC2Tw!zw`2vO0tuhS#$yILC52ODq+mX5rU5vxc1v-2M~-~Pdy=RdMqU68&xl^;7FjMFDm`K^x8lDIPftPtun-A+?e zdP}=>GbWdU9FNDYB{3u)ZyB-S!XT;BhPkNkh<0`-pU9G>c~*ai|Dc9k1I5rme#2S= zLwOO#$B%4BJ^1j&Xz6%70K6mpAG#KAl9Rd&E~Ut_fA>H84;Ya)C-7d>F89Kg1PeaLBk zodBeS)0r@H3LuJFuw`}=z@QjD%w3v@&5y6@5~8~DqXkV+7kDC0c{qo8RA*i7NoN*( z1mT;#V`1WM-}f)BUJ`GD1KHVj{my4zTP+tc=E1HRPYq3jCX<>3*G0nY9>|a-X8|rI zg5^(_FE(?58MVZR-z42Kt%O0cA>1Q~b7WG7S#?2|p_<5s7R9 zGLI^JaIw&$Ifj=D26G|KAQ=SZq5`)?cvJq#khuYWGguWt)eDCdr~J^s0VjUR-sc)7 zPH@0UMCp~Yp%&JKB*cUYX#5F5HZF)gwe<8m@Mb}lUGaLXkA(6(^hV)61wGVEUYRHTn>U9Kx1 z-3pzBZ86Rue!$S80xPJIwMZ|UR=(uV=?&u2nY>pKpRCq@>RGgBeb9IR`|lOkm@z=7WS5LDhw(Nf1YAZs=$I2&Xq0vO z&T{pjESF_fuHpOR)zW7}z!+QA7?OV01-Bqx!dLH@;*|7&8NwkLFyJZc zf-Zwm^ai)+)*MDKAOww!V?))1t(>$~E2A9f3JR;Q{-6K(fB3h5^%pTJhM;gddZjvSRzqilN6KB_$Lct}QsYt{>MDKyaljR{ z5H+I)8MB3h3toshjazherZ~8d@JCz}!w?`uK^V{=N0`Vkmng6B=M<|ZuQ=t4|MaoO zMbOhLfMy`zTevw0ltEm71ad&)EHX_Z7t%0x*uRuwm$QYEJf38ypJ{iqyWQ{1-bhV~ z{GHbyKe%%)os&D79gn95E1PpWItiWO!&QGha!d?^T)j#oJ)PNBU=(7BITJ()Ayiay z6e?My4FQCf6XFeGh3Jj3SePG3gMJv4T|tfN>4`$Kh+mu9Rx*bvHZXYSuaocV zRk~gki`D$p5|#NFDIibE$akEN@W!T8a9zzH+bOpThNy)9&E2!JW8(@f8KnqfwL2{% zv!Do88-QqTbdDe)v-D2(H226yrSi~XmCsW7sT@^4@+C^XZg-OaZ@{NAsB^H;Ho zoDhbjPmYxHLBCn97Qlg(uoa|ziUN77Kxsvo>5t|avOopK!+bW&{_rCGeZ}LrudO7GV3Nza<9HjKHtahj5zj}5DaLt(f($n#)x3^^DZ&lUf8ud`` z4{7?%GCM{%oQ=aUJx#l;cM-R;p<$X&(J)Dy-+|gq#-Rh80Kl;kOEsQQ}`Ob*2*=Je7eRqeNphN2ChK!@$WSGCx7O@`4|7%pQlqa{NQ`Igz2MJpCs&24ksosKuh!|mZf;hs?s{;cax zr|yWC1r59BPyG2DTU#C4et+stPCRM}p-TRu+D^Q7OpBbG(9y2XrCMfst;@Zz11{_?91PgYzx4Za( zG=-#qLv}%?-=G8sBdLte@g&M$C!oZ*E^jE3fnh7k$3x0=OX8sL!p|quWwO2O*UwsS zCj@phL@$8MMGN?fb`;E+z31W2tP&ks6KN<8;fg`P78s{6Q^WU2gjE>+<6lHL@CZQa zs+6FTMh%WZ2{|};GKmg;6-b6|1*`FM^J`7i< zp=Quoq;+h6<|D1R8X|I$jfbfsiNp#6nX!(?pm60bd5bv1hcp&7Ao9;kl{c#uR5o3E zyFV=I1-Q=MJ~C zEBQKPJTKH$jvgE=<6wJ-AUau)gVP1WTNJDBh*Q9)H8_~0%M`^{S0#}}#_KSEd_rts ziw__vS2n|uF|wOR;7PgW63=4Zpo$0{;}~GV@XB{OaHNwO{-jzx0*A`1619um9bz{Nk_u zt*?IPH{G|pD%WFoc{p@8w;186EFRq5ZdTRV*=E4G^h3Vh&|hCK+dkQS^5WnkBcEQL zrtZr{c_+(W&ypwLIgO8D>T#dk-fWvwgb*(SS`EF-<`nm_!<{}2D?pZ`nGiu$5$ zzz=qPv?G@qZ@TW~>g-;3f`3&$ef|MdE-u^lH&@%eb4b3Ps*a!thmZ-Be<#nsKII=U zfNM@fB=}AjD+2AZ&YRAepfoLu;jKH(*e+jQEKV@cR|VvkhuFv>@xC7nL~Kr&nLU}6 zGg^c5p#$0LX9Q*S82x~XnqC`{<>p0>JYJ2VZJbWmx83X`&}fkC zecknlcDc<5)}r#1i1^pP`SqXwx-JI9hYC!atIC;+MQ0_HYN+}`IX(n7dse-en{dqh*xtbTOw z9e(2Fj=}^s6+CuAMLejjaYTrW?nM~WzztX?UZF(!?QZ^1L3fC`+)wM>wB(e= zAcI45+#$IMBluDTI8i<92}K-})<=#4U#|f-kg%EvQD-KF-udPV`~*I|qAlo))u=eP z(6c7aNdSU&{Ma%(9Ctccy*=kh4BZW#r4*=-_(nZhhKwNf)1#D3>pl_U~ zkKF=dM!C^uwIxEXxvk+E`z`nqcp)H%`TassEj>k?_v=Y&EuT~ikoEHZQ_Dd|jEWMmT^ z+Ur}&b^i`Grm66uWqg@)3uHzi4xEeoA7jan78waP;jGR_awoiW#qgjg+bLVb3J^#| zvn%hAPfo&z1PDSL;58uD)oFSXDBw4TyM3=Ej6TMjw99*5O49w|^!)l(WkXGUNnR+5 zJN76#*jSata#0gU(lPt^(e#4@YBWJd&BLi-gc)kySh9$ zPdat|Ky3W{%WgBJ>t*}!&fyonyXeR4!?yhxY^LM^Jt%PzeGV_Cq&!>yZ~l#c_rLo; z`=^)VxbB)S;(xP@0P_h$oGIPjxwAT4zjx}GJ=vz2EPGl&6=~0$^@A(nMkh2INOYb;TFjWirQl?sH*;7_m zz7^1({r>H@UKg>^ClzjXZYKo_j6akj z;VK-Jz1tU-m6X+*Q9gsBB760cVX#5LP?b~D%tW*!KkhS{*Px(~S9SVeZTv^M?``w# zD&8C6XhZk?-isqup<}?HAxX;oA)>(Is&@Mvkxa&mv+Zm5E<`8r62vrK@0(|rSF$T4 z5m$UUvrnZ2@1wx0jFklwNQU^#2F}+EGR#E6W$G=TUS2gV;SE{9Mr8qjm!CWZ3Tuu3-_|Y%@w$D9zllp(=D}S-;3DLMpbj{d~hS7vigS)SNu`S(bDlYXQ#c;P#G0{8f zd&ytK zyt}ENtgDM6dwpF#TIBbZxRUbma(Z){zqT!3-;{4ZT)cHrzkXi6d8dBuyn5}dd~{Yl zIV;~dtI0{<$zsT+_ z(g%z5g!^xjz8JeQxw=7p(ieSyjMdyeOO_^w$+wJ=4^`>(Kl)exwe5QIv;X=3`@C)G z_4zP-0^=B6DUj)RE~~dzm8TiUtD5}z5o(kw?B2zt9C#ephjcAEaz(;Z*gdez-R+p-H#}P ziw^G}IOFIqBp)sK=SSsbs60$r7==r`fEGR)^WZ}nbAOwDnT%7Z@B7<{Xm6d`5>L7sa2JaltZxJ}h@#Xd2RdHUH8(5RG^TWh& z6>(FJf!{sf0tAZN*4rc^Pjn$>gwFR zo9c`qlae863a`MaLIH^Gy=RBh0aRxMsMaLz_J_K3xheg(oso8fOr| zNa2@7_DB)ev)#!V2%APXQ8*nB2Sqh=JH&yQLWQ_$2&NvHt_5N>w{o-2FbFlLdF5L8 z)9ZDn@`{1vd#*xPe!o&y^w^sQ&;Sx74OoL|6xRv1=nWwbmkpgU*0d4+6CFVx%}N4Q zqAQvt5m~z5<6C^W9JF!K90BM;jeARe#4YgmLuEmPf_o}AKK+WNJCxI-+c4XKdH2kF zLJml34zHMKG8k37xdc?ymwr`RwFBS*KQdq1QGF8EJT%ws>9$L5Psc-ZbGyH}J$7zy4Xc&0`;NBp{43vNOa6N2kkL}ii?)nR zv1X7I^I^Q)_kZ%2cfatx<2Ro*&p$q1Jv-dKXfPxriZgiqem{Kjazs%t&(d#B)i2(x zznYA{eAr*Q&sX?pnUG$mD8Q6Pk zH~gT2$BRMgjD|lb81(yNxB`OKgHFPScyI*J&f}3V4p2#LK}(q~QJ{*!yh1Sir@)(4 zepIOc@}pVX!ilj@Ph--B!bnBT43=PRCPFnH-T$bV5y+F+KGFNDkx+F}==ung?gg%7SW&JEk4IGi)9CPxao=ODf`HnK4%uxCJ~rfQV2MTiVF2 z$m7`A`_@QydPr5ODX--K(2x(D|KT`fcw#d6VA%%wPUFGGD`iL^%yJ zy0Tl3J~TtTLy=6OiKl1DvAla6{ou`A+W@NV?9d|@;~ztWzQdA9^XJS?3}w1+@`EE< zDqoli7eLHgvU&-6_tW+Vm&7Ttj@o6ldRV*hAQ@}!d#&9Rbe0dl_%<+)hOxbaaZ_G1 zxbVTb9BfUZur`w-vD8!08HyWa8KaV~?`R=B&^mR!amh18=-T1*&=Zp3Ec!VtjL;i7WnknKY<331F7;$%uir}^6 zPu@o!leQ>tlW9FoFVD_@?ic^+SN_gl#r2k5x5UU9e@xSUN>9^t;a~}R@@Mpgn8dr` zUs|8Nd++eqc4yaFvK`Z#JiYExZ{}oq-|b#(N ze2awT20ERnlzH%MVYaI-@Q*KYo3M?LV~ndP2M|j2V(-&zv)R!LLP1fw&bdK+7NcEK zOhDSN@5#uPb$NRvy>(I2GM-wGPx-ag62X1H9;H1$h1yPJ2-$Y&erR?DpvJkweZ!b)bg$H8ReTL1=VsHmsZtk zxm-96ZnUUZtHs)LFY%3(myDij;&RGMPK)XB;38;x{?Z)a`t!zzATuA6q{t zQRxmf)pBB#1l!=g$(9_&yO)ID|9 z-m=;k6wg{|2?w`F@(i0L(Gw(~GNNqXb`NZE%|My&h#n}9bYQ=( z905*~aLRPc#Yl-u1G(io-^$Bg6AC{25mDpEK& ztn?JW;-sC+7y~O=4k}K!OAckufUAO50GYtvZqT-#;iB6LQg!URF5YU5T@pHCIlq7f z3QK3^(+(s>C30D(tZXYU!}O(rXahS5H+i^|7 z@SzP?VgQb>QbO`9(iPGS)D*UpZcqsk2h61F#_Npeivu^9&A?<7J&-w$N!bsZB)dB$ zce3OHkhFC|&)E$1^ySO82cMt`zwb%zu!EZ-fxH9I4!H> z2UeR?%+vqUFfok42)~e|KVB7&$G++IgzI|f>&R%3T0^Y$DPLcg=o=G_$Lai#1xf5@ zhwO5kzQ!OYuvTZt3!n<#5IA%`3o~Q*0H?!ALb(xBW)5(Ewh-`@GMVKSzC#`Onxlps zk>UP?mWHPC2@8m3oXbv|mHC2ZfW~>cE&}y6BIs%C%z*5+R6Yzs9pA*# z6H9z*fx+CVkL@iRcQ`tt$aH5Jdpw_mfG$81~?JU3u zKrQuyi|Be+Ab6-C95r=E?|*Twq56`U^Sanp$#8s`bgmhWrdU((x+uDK?-AAYaiHW0 zS192Rodk$n_JY0zg9;MuLK=dI80%RIa9S%{pDOp^v?xTwLjTlp^X&nBi#Y>}Y^e!F znvT&C>wStyl?}C(@({Ha6ohGd!4IzcA8^#87|%ylnpzL26aa~~@g)E;qcna6V80P~ zXaWKvFETUU@FQe~`YRmHBoGfOyEqNekMq!oBC(ZY-XsSQ4usz{T~_&7ZFm+-S>`r- zbUfeaw@lrJPE~`B=)^NA6*CT$cdRuPgq#)L;f*}q%@h!7hMa<0W`=UuC z#A=jUE5@Nr1|a9K6sTPZLbL@J;|aOxEG}Y#?6}A^F!n@5=FTaLBwBwPN)!CC51pzQ zm}$`~aMZo%NcIQC0ZAVFo=3n@P7}`YYpw_!(`Il5uFs{%`_)cO+79H2>HbK0h}1p( zrrlw@-4EBd82NZSjK^j;?ik6qIHc<*pR;Jk?xb^&1wLKnST~4}1@!0$RRol9_;(PO zut8l_8KsjNK^PtD=fg*a^u5W9XCfiHJ)}4L{LrZK$9}qPlV+S^3p$6^0Knx(z|vW^ zAzcO+ZPfS!HGIS0DEMZja3hvhUNT8BXoEJGO_TYew<*v>@tS-R>{1Z(m&9_I>BO%wkdk zC4e@7w0(c#j}P4rzAltjK4CyAuCAd_PM&a$?p?Uq^~9LN>2!M_+>j|5*?cIVbLev- zM4g;|bkdDd5Sxb{G>=atQ0mg@pq(e?#QbXTZiZUDw6Ma#1vw_~&_f2*U6J z41}Qyn!=DTO{UO~xSh@=IBpEe$*%Mb-qec&!;)#49t(=hGzak9n^Y=R(=&K;woI0V z+n$F_QA;uEcKFtb+r6zV&@dk(kos9sOV@8p^KE*X<#jKp|f5MC65wSox@OTxD?)0?nP`9 zMl=CXq?^`?`q5r(2_7=&(@(~A8*}8{kbIuoNHeFN5i*jeBT)>eGfh=l%`egmG!+WR zbkxSZ26$;DOoE6zPcKmeh-p%L*LX%~<|=tOD%i(kFk%1>TnfqqG=P$HcSH?+X*4Ml zW#PGH75Na}7~#7RMEMCAM6j%xQgj+ZDWB1X)PnJk{Y$FQqcayz}8+S{bvkssa7Z|@bicZ&VJa(7Yg?&P~WFZ=!(PAM6`ylL;%Q`?P;>C~NY zc1IF$KxEEt6SKe-0?ng)G=s$2yTP;BplCDJA}(!VHJs@Os1SM|(zgn#8Jdg0H+-^nTkeV8fe|JBB(}vJDEfOdOBrtHK>jOODqA^)wk=X|B8gK4q`mtIu z=+x23>p*Z3O#?W$cOx!O*#}5J`9;8zNjOf%u*zVGMI!}pM&GA4eIYp4x zz7}P6Z;>o>;#=c1vpmrIDv9<+oIMG0Lv;M7Ex_XLB|>sG1IK{}nddraA)Ub+<&3=C zMiJ&P+Q2}A3zIjH&zB^;=Cjd&PC>~wd_*1Ojhpt0og=@90mKZ_Q;dm#4RdFYi}m{r zaF>=JUQVZ*vDuB?VQjCGl#0*toXbnG&hB5|qVH}~dFQ;uyhcKO&9 z6IpL%xr|4;Db=fm}4Zi3F=+S|;=`>DN#!~?KS<*mrqG%VaK z7U_UhO3w|sx6KFa(PbgddHKu^mlU{aHX|~3H~$9^E-!c%@d-9TZ*)y+tN$@n8|uUp zo-wA^d4yW6&P$K_&wVVRu0bwr_&V8ciYondHI4d&}N*LvN(C# z_a6`dvlLejt`D>1_imf_%jVB@<1d`D=Y8G|$;sPkYAHCrOp;4jM-H)C1aAk_3P5c- zJ?n?34Q>;HVh!&gGaJb8G9(4u(cz(>XahJe+fS590Bh0e(; zO(RI4qTk+wkXzI?Ac|4=VLx1OPXz&D33)*_T*f2Zv3Y?G*Ka@0ixFhS2_+NB#Qp1D6T@Z3+)SJ z!3I`Eeir1)YxPO3rqCEAc!A*MAz1^G>X{t@R^u?}>n-O&7gwX>Xv%>daRpt}_8f%Onw{ zDJ}H;!qftXqPwc5-PqiYhnwN>Vme&*`|F{(sry6LAM@c<49AS)uF3mjHSCLiU-vg< zcT;rNMSETLH;d^|O^4;QUyO&^Z>sIG?lwDJrOj1#dYLxYd@rX%F3f#4p0eKGd^mKElFRPO>FgiPtg5pFGMZmFIuv*D+8iG@d z;3ygn_CzHR2RA$#X+TgAG*aRkGnzoUBP+Gs1S+sqje}T003l5p(;sRCKvQr3*=NKm zAjgeDU5)UiRxs_iJ*3;)7lx7M72}%XwSQYPic5ks_UIb~n#<`%ezn&u(v?-QGUiT|GTqet0}RKOA42+RH<8)%E*6b1!$mYka{R(F)!G zcnFSi8603FrBDS7?l?sO0xEKdic_*u;m-F}UWr{cX%ieqcNQDh)eAp!fh^G`Y+!kClnb0_ zV`jy$plyyM$Kga6FZ$|>$*1LYZ?V)p*3KwDT`nNPpW8jkacT$hXwqj*3#j~B#rrgj zUwqL)ye`JQjh*)QrsBTYGpHdN#&Cn5@N$q6b5B6g`b}c!&scOk4F~f5mUJCp?P^gj zmy5H_l73(=BwIU8uXcy)o8!?pWvayPsx&b4W^8~5K8-1nOs2{cNlVVQtMkn&)KU#4 z1uKiXsN5A;mQHD*9a~p|IL*_CXVXPJku=U6j*8L?4^?GgWBan3|Aq%6$joxt&9O(E zf`P1peNhl{nW?pWE&+xP23n%0c%9CWn-*A?ntVz|G4obLVTa|8|H)Ihk_ z;|o6r#!6HktAo7 zM1nwDO7*+W@mlP;Ej{swG<@bF|M&!ts4f$wAIZTFNR#*&zsdj=mcpPsU3!<2BabBl zC7RX94#S3JjV!Wvff7@?QZAoM5;uDns@_|E1Zi>qK-}n5{Lx|E&U(q%!238()>skGU=uwAAf+0jp;*(|V zu3zYlkJKjT)$rv0?vu9rxNU!IyZ!$4x{^>L%D9y3gxsIb?l&1BR?7g3Fs6BMk&56uDEnx?O8KAy;#@v z($}jYXy;O0V5-zWD{M|S!&8YyYJQpgD=c#jl}4$+8_fczj)24aDlC*2#MEEOR~^+6 zE6#P)U{%@K3zHZ1#$X9yD8_&%Ubw&;m7@P>Z(_hD93EqA0T^hIK?6TSj%f$;23*_$4LopXj6z9dkPW z>dd7eu19B_&?DVZWFe=a_;c=WQLMFS37$u1km)5i{nzF2Z=-jAv!dZLyR1! zq?6k^3F>pecsKlnb5K!|HaaUAZg=_-MJnXi3J zXf@+KPy|m@ROJsw(kI*nits3mlszO1U#UV(p=w>}*bckr<#;glUA(9)KQzcZI>dKQ50BUCg5DkWA4(PQ95Ry2z{-+irZFh$dE=2K-=W^j% zsSW9uo%9iE2oKDqO?>#sIah`Rm#F2VDO^=w{6+BK8g7v~?x9cG>xw%!W8)JmoP9A- zmATw`@hN%f)0^SfKkAx3gX#379}i9ePsmt6Kb<PQP)?k6#*B~=!^TZ| z4S1V5-65_hUyC3(8It#3#3p!I+GV-#{Ki2{>8~6QfA6^ekH0hi?N5d~YhU4w^IJG{ zOOJ6Yp2Y5uj0X@%ll?e6ZBN@gf2XdtS#}4hO=D{$7(VI8zd*j*xdj?z{7#4^!$yRyRmFZ2HeG}Ts8u>sXQi)1v3uHm8c}7@=g@{r| z3UoChln!ueCwew(hECP1l*?p`G&6-4)&iqE@RX}u=Sw%_Wz3_H_e2X~g`*BW-hUvs zpm*BPQy=#uOe=^~n&PX@&|9QGCb=tl+JQ9x&>Xt<=thH`(TBkenYh9-@2QvddbwDk zd@8)s3>sY>DoMcQANaxnBLuFA;aaZBFBj#?^_vwVqWz&gw8Z786-~^q!w`%C;n3(Y zmj9!f%SG)&c`^f@dY=L8yv5@EIc&zULWB%aK|ed$k9*Utka*nSgt?*(2TuhO-{w57 zcSF;#Il0PT;GUG(P!>a3=N044S3FmBsWT^R94fK^htcR4u+7482ALB^jhhI%4LKq< zjqYPZ${&nTZXp8a^@U5P&X`3X-azq{p7g}WT-_eg4>R-8br9uvs?rn4+P}!?a%db? zyyr(7=#QxfTI^go%FB`3 zWVdLd9+SSze8Q7*g8llR)}hJpkuJkK1zP@T@9McyR*o_JSLU3)l9sI2O6a6_d5Icl z72Cr7e(!`ALK(Vzz(~nq$I_>GaH)E8hnAU!t=Yh0Z3SN;Zj3VRoKiJbz;PCI81O^} z@wn>VtHy9`Hyno8lRlKv${)Ifc9LI_*?}@2ba#Q|^@y=$bbtu&2SR?3OYfcvUeHrG z7SN)&>igyx)|#x=kWkdi(v^jkdX?pl$Y7%yt1d*0p9ren{)G*yR9rqW=owAo`Aw5* z;Vn*1?K-rRI(#_O4m1Uk^@g<4F?4fL6Mz#6LouTO!I_YVem;cmD&=rFHdNk(a(fA# z3!R^}Mp&p?*TPpT>|4CQbK3}|)q^V*ehJs0)mBwkWlQ2^lHRt{*RRvR`f>L`bNH3p z-QT*oy}>_??)SMSmnU;u7r2&Fl057BU%b8ftCv>~%j$=>TgMhEq<7k58GA;KEXLq! zUXpZEy2^C-45%Q=^{${vD_@=9>H`WtzgT?HmF!w0Ni6mgQ}2k?C(=}X1P}EnOg!5W z?7|NOD-CrDICx2~paUoHKUP!l9B5-+^=tkK9@Ex;Gy9_&-*i-Dm8>#LvHy`VjEvW< zyH^#AJ&pTga{2Q1@@oHLce;&Jmw_FoW9&vORQV!j)W(p11T8-zruM(W+f@Y0aPFKh zFrlpjXhWYoQhN}7sFhj($qbi$og{IltOxg5p9D7fK0JG3)|Pl!w#Id zF(kMIxBc>h+Cm)#2p9DL)D#Lo97JGHJR;#lgm>X-1e5$HZT7CZfuf2p5%5qyJI>kl zE3KJrIkbTq{CBz$4pCQRLSxk@oGZA8_!Whr#A>sKs9OG`qD>H2cxr8wk{}8&^jMC~ z&>pgGpN>s7b*o~?)3#<9zkl9czh4|*4yPMbg#HM~by==f%k_Gt-iEIGh_=hE(m(m< z{u8_|J>o+{J&CKWu{*4RbO{wg#Ok{&kQxjGuxe93lJ%grIC(C@#8Zb)ll!LdnJ)%_ z1e!$CX|-6!P=hlqOzQc-Z@KTPI16;AE{^E?v1@%{J(=8T^zLYj-{jYuDieA1VMtEn zwD%xA_1VFj`E3Rjx&9RTHg}iHb>(Q^A-|(hiS%{e97_Y=g>g%9fv0>4%T}JjrLb?B zszWe@wko-l!X1R6d1($Zg$5#TX1Bzfqo?NuNdOS11K3dS(oLH1yJQTJj{9N!o7XST zIHhk)&M69)2(~>#j@aLUY$Z<)>G*nCKB<>~a8ZA5O1{{uk#xV<*2~p`Oah{A$KmU@ z*El+a_9MZ!fd{Bz^49egWQnp)t|LArG;WF_FQe|`R zA`+uYYg3=j0}$T`&s>w=@Uc39vFMLwe<+5VqTA11i-k=@`jvx}#OPRb^cz9V4B03Z z{D>~B!dK9XxF`xjLR9hbVpNk~9`YA`;^=1;;rmnf*eX&UG3tUZeNEUswaDGqAQ`cUFuc>qWb1V8|SNvA(e8ZciQqT14w@uj*)<4 zq@k*FH0!);>5>)4Swpv}^mYh>bP#B5J1`dObkoU?efbC9ee=z~^R?f6?P10!z3X?J4E5O^ zYPAG$IH3*=PWZSvGiMRu7}o()IRK!~d?qP-vdrFG6&G1{Z<#(?rT4ehle7HJYI?NI zA8m^V+ibHg?_E@@J9T^NUCe0wN}fG+?Ve7PT-W`ObR_0PXkDz|GELVN@`orq} zdAVJr54QQ;Rq|k!ZWsBgOz+gxN^oqNApu}8V&89DTI(M0_(_KSU{*yw{q)(n+wG2N zo24Ih&1KWAXyZ&NxF^RX`J^8S9vq_%#J#4fH4kiIoUV)fWnR7Rn-bh3`$4>+?7@a% zNI~r@qGgGiV6D?}-$22Osb5ZMvvTJ>B)9KePZw#i=Hui8L7MTOQfDk`FqrVOS#o~o z;h3-6Y|&?{E?*ux?7!^OYDjAi+GKf3>SI!$rur~e$EiGwbu$&GWHD8nK3}xSqR*FY zS|1rRIoVkA+YA%gG+OUFta=ni=cXa4QK})o@_-6HHOi1c>LS=fE{tRxq}2E^y^9Hm za9Ym2IH}=wlUN8!>O;|{%7{=wyFn&8LyR^D)Sg@s>S^434j+M^)v^Fo$9CMb;}U$K zUd~vyD4HJgADZ?!xZ?kqyH~5}Q|Hd6AQ@lN5d069#%D^(%4s)DJZ`Wv4j>sa>Ov08 z53(WLctvPrY;V6xUqwRkAj?b>iG^W;7kc3Up8_pdvCeT$AUP-%-OwLT2di6IXM`a* zuZ2GGBXpBhF3$xL3mrlb$dI2M+r!rVFZ3cZBIb^$T>F?4DM%sT+ugn8kPiFlv>Up^ z*xly+p=rC^O-01s_v!`8(U)mV?@J9BoEEr>IvukT&R9cL_Ztq9`8v$O@M!Cl8eGv< zkx|e%qllvvwhq`f_Q97osO$;c>{#Soahtk#X>iXv91oUEid$%2QN)@OK3xdr5E2Ti zF{`c&I0kDMa^iFh7xWG_K~Bu3xtf56UW$8Ab6?>cAx~uTRb7G)ele()W~$+~O83Y! z^eG2-XH_Fr%V-aBeAo1Wd9=;g9pHGLc3FQabKhR_yTA11w_ktb2jBke&;I4V)c5+b zoDo5EgPEAYJ7y$bc5c`k%HgA-%V_QNn>OZfES`80CwZv*Lul9-q;Va>u{r4Unk<8F zW^PJD)AXS@4KjG6{5aPHVFpcbIZEouy4V!X7F9)3IsfPmWvDm!IvttCD1?FVy68@0 z-?=j#(7S$IlyFJkO*SOk+~R_^qKIqvUW1QZCEvJ-bynUrNe((maarP(!w=77QG(6` zmZor;@2dk=r=a+`zg;xr;2Vj(TQuV>ukNhMWt+c#FZSb8Z|D}7(*o3kHeYe;!(S#u z6r7dm@_jbZ;{D+R27aLlgu0FEK=5U(qgtjpoXcU; zdoRTF*+dfH35~p#H689i{|-=;QHN&!f$8A-&BRbaVZcFR5-{UKNl{de?Lo?0fR@o% z?L$AJ!Yjj%KYgHTX8x@hxvHHJ9A;B<_yF=6pOrWeb3Y2t3|J*BYuJxpV7x1gXh}6F z_mGTQV}Xhj?htVB-U^h&zWK8&re>l4kua~h-T{Vq8B(YpGeB|!$DvM`JL&X670nWn zM75!%!7g>_!P3pw90~)CE;QQ-KFSGrK`|dubSC6LAj6yOk2@*QI=CSEPLR4wAV|qM zv&zwFbWWhfq!X}802i?8+GbNr4^7Q!@QmsT-q5aGN%VSbCQ^j{zR8>*uRb4HY)nZ+` z(MFvX%c)ux)gmcYX}!cdWTnuuYMGVGq+aFKDlM03wdgW`$y#20quAvN2xX1+uBv)j z)F7~2tyas`n(x(ivpL&tx9jt>?K$7)Tgn_hua{J+-SPu8R{W>;1>a>|R@G!*E4uUU zX1%DW<<=gH<#M@LEtc!`Vzt_wovqgE)n>!@n(ys)wO#v6LEBA-roTN6H>bYAOQ}ZL zp;5J9F`P!ChzbQrk+{akN1a75YEC!{oED~v1hC5RXkJ%VF+5V~@Wi3{>OHN;q>fo# z>H+N3@*%tSApkst;4`0ZGO3>x!Vv+u3F*_Z6woz73e2HG<@(MH1>MvoTElKR@FIO0 z^i)BcT5DQ~Nq*T(*WL8&kbLhtd3xQwciBI`N#l z5AS#%cn$`bSU3R~#lZ->bmes6?pia(a@9MOx^()LFJS&D{$aa7jjBM@`sYggvx*!1 zdRL!9-Go)Fo+g_rX?D%^b^Gi^zuUJryX52R^uy=f^Q+;L+wr5wHmx0r5z zV;p~d@aX04dyyx5^R59qTAVF#YPhsxn!Mk2 z&$H=y?8UA3A$4W&>nqF544}?gpzu@DA8MwV^ELA-+_${pS1u`*m{^fTFj^oql14uu z88tcgFvabvM(XJ}@Q++Uuns=x0C+?m^^U4kF(aWVU?_AbMHTA<*z5#$;uG;zAvw|o zw>t+zl-5VJ=FK8-wX;GxPH>1rHsNpw$j%>2ky1sGrAgBRlrcl?wlDFEUPZ`L@w2u` zqB~z1fBc0(m?O?uPiq4hqCwGr)DH#*T~cIUG1@_mtt=wepnRrLW0y^aHT`PLPx^+Q zDKo(k6cL4?uSZHqPDR%NfaZt&u-*D`S_S!p zpao;^G>}=Zm=pYu2G*e1>T%aa{jjM>=s7*MdrtwxM_spf1tSPfq8AA$veZ`(k~tK~ z(xi9Jqp<@Nb=`?e68m#5fm%u5 z_HthkG(d6^TUT|^7IL4dnbEfcf`%N_EszVw3Si6$*yP<*i@In!wPyj(oH6=~7M4*I z*xS$^oP|VX2a;)t3u^#N)Ygzhr^_-u_vtU28}EXPeB^1kWqp(Bc`!9FgESB1gXZPn zo-XzL28MZ9hM08vRFx}0R1a+EB}#xIEH0}}(I>WL?;OG=DdgLyrUy#yOv$=0?v=%gAyk&SM<`XNEqxm>Y#@Pu(I!oq-(>0D zo2=>n&^-I##SUbqqyTa<+$7VLw+Lj3jupW`0a}TA=w}`8oS$u8f9>%PeEy3+@Y#29 z0kY&33uSSr4@pcE&;|txcF(kFX6h7Y8X#vHl2oETBFvv2$2&#p79N~Ys!zL7X6~D^+pUHarxyw81En<8$Oi!(;B5-|;j z)AiwSYjQ>p(jGl01MJ<9de)ou>g;T>IxB~g6teOi+I8tJ*^;d%!*oPgRJAt-m#V00 z%P&P@Dw4r72ni<&2d?pi%q0jreZ>T88Tk!1xH>9H#&>i{=~+E zXyZeY=nMtO!OGza!fq*xF^R;6*l6ybjsgNG6H|Tz0wzY0u%q8#rvIWKyr04cOo(0G z3UmSVs(O&l!Q8)51Ag0~SHg)Y3R%b@jo>_j(3>F+ioG{)d=!ZQG-V_rjknqa!_cWF zd0|-PNJ{YT1p#YA#TotK8;IM-mTY{~{YIbYG%T>!Ko&CTvTJc2DdYOM4KrV)bJwVI z6x2a6WQt{QX)Z!FLXU!ve5eA@v)OnVrfZImBgkxsj%E?Ail;H#ktEAef~O*4dMIJC5{|_P!EUXp5^1q^TwAt8z&)er2N4Ph2{C}6NaM)8660Kf;= zLK_gt)wZl3GyFBzi#&h87`L$LDoM`M>>nztAIXX@ZO?w}{QPr^^~1^+_8y(8%Ek|` z7FyA8Jx#xHICN=x3SCUfqI!6-D=SDoX31riE~aTQF`oC0@8KeSbKo$>J!s5RUL`f- zD&GZ`oK4AT@@Wt0ACnTj3w{8~XV7pMh*IsCNl6*oLV{VpwIYbhgnUtyxBKgFz4sk& z1^`QInprB2VQG;a&Bf7IT(o3nqkK}`IHNS=8dia8j;U1FDP+FKKfS-s?{Ct_XT{Rl zNqR!o*ruI^Vxu=YL3*YOu~a3HfxXK2=wG73_+}NgWPYTPN`X`q1qglv{qQe-;;L-| zb$v~dRuPLr2OLzudLowh)qqbw$eP-Ylyw48PayV)b;LKdEDDsMA-uDODS|k#BA+fw z!t@bcSY^IuLCc#lu$QT<&jPew#gI9s$5_oSKmi5nk{2AYYg&y>%P(Vi3Y-Qbe3O}A zhwCa|m!bLdxGS)67#2MMg#$of5aA6}gP}hjU508M1sCkC$#`O}swGe@F2=?ASk$A_ zRB-bZZlQCi6=$4ljbVV$V07U?-iQOIvdEAl^XL;{1|p779rdUOAOOZeuoXS_BVfKI zCfq}~M9Hwz8KR99wH00UETG8G?8N&gBu36!$VW#V(Ty?{Nxc-`@nOxA-VgwXsSyJ>O5?`GnlpQy{GvJAwt$5CwQ;tPfLGp->m~+2D)> zsbSY3?~$}yf5tryIgn0TSu?Ov?-7iK9|~aw#9{+0C?MLYIvj@`d!3JHdz~`~11nX} z$AsjQ-BAw{fB(hM_vzzt`aN0kyCSF+Y4W1!4&ksi4i6$|V0)*2m5iTRuK&RK#X^Eb zZ*^~Vuk7DEC5z5!L74n#==Vu_NXJzOhAvc3e`iSWmEn{VO~8azuAaHw~0XqLq5;A!Y=6Lf_d;9UW9B>!wWxZLgHmk*= zE@O8A0S4ozxIya+oQsO#tT)13rs52};gBe@jF;9i-fi8D!b}KC$%#8-n4x)HG|EA6 z)A=%gaF*U(2MiU)cax!_p*!TU^ibvAp+$32qF@`Z26ksQoF0T=30ML6p^#HMVi|)k zZ}1JgL*s6NL#qVoOpoCKBJ!pk-DL#{v*Lx5sz@k4qi?Mm-BvoJU_N9JnVGRTG)nDL z6GREHY9}E0b*8|HNobpet0HoppQ$Z|8=O8kae+Rmw@u8bLTN1od_?4OegXxc^S@)S z548g->Nu4GzYGauW7N4^9PE!nF+}2F%KlK7@>%iYD*8ZeuK|mWwX;`!T9Fo*3s=Lp z!==^5v^+1Dcq(7*D*%VT{-+^)6_lLyUl>zZ&&&@{l^;=w3Q9pk<5aT@FB`N40PIgY z5AKR^U>rD06Ey@AVIZ1dF9HqN)}f=>71LY@a5QLz5>GjSF;43lrfiD^1w!@&l6KC8 z=ruq%a1HG3N?^e;F3Bj`A|b^$^Nd>Y=b_zE(Y_sk!qBqxnexSQbAEOqtL=bh_G#yS zjNR+iCaY>Bfu{Ik>@lf})GZUMML1&Q6Yefa`)SSfdF!sCFyD|1UJ?aJ5^Xz~Q5@qw z(zL1>x0Wh=B;GS$XGGl9esI&q7`cd$dW)Sk4PfGy8d!4y{>*Zc4~Wd8h&s`uOrU;L zg|7yWK*q|TK{edM37xhBFSfCRqdbr{$L^6z#Q5HhII&YI%(CJFPz$SSzA+SV;xa^l z1J}jaw;0#}xK0hsh~YUYg?`S#Jn*%?#OM;C#0FlGEpjqq1~?#VhgA$wyhk@P2u?(! zBzazBm+o}tgXR#34c`vk!99xGH_Pg++$B=rfznW+Ow)hp;=%<=MOL0I9^Wf}{kSJe z;}ohqJ&Uvi7Xi(#I-ttg<}+`+{?1!(e(~LRzx2iL`@*~LzVqZsmuAP1x?F^eAtA3k zj?MQPpA(@hMmKn_U?<^6s`PtZr}uQeJPhGtnV!|BYP!-$s5*^R8L>Mk#4&@5+?#m? zH`D>WTxgh#Kw>f%Jp8jhP~>Y=MC7;_FdZ1XxQlB~)(^yRuo?%I7((4&j}Nxh8}}~W ze*N*gZ@u+}ci#Qd=fCjVzx0Ejd-KgNf8mR7zwyLA?ZN&+P+$NA)n0B%vGUS}DU^6S zRy<-JxQZIp<{?s$FjHW3&xg2AaEuqnYjCwU{chco^T;om_{sa~fS^s{uI;hCXX_(r zr>rPq+y8n|ub0aWqa9IX;Cu3VJ#R{rOvGDo!V&=i1Hk930>rWJz1JPNK#sy6RLDPNFIifJNEsb8{; zn*4_Ta2iE??9Mv;NOkB`crxei@RL?ktOln*AISj(0AOUkHb<>jWnvRHK@KCb@ewg_ z6fKHK{%3_i2&%toXrD6x(J-sik#M|H?-1>U&Q)cl?^53G z7y$pnLBm-LKt+s^h@EIHoP(%!T|_WW>-F~D{fFDLv+ZVEEjOS_I<#7E%H_JMH`}v& z^unB)*7J`@5B?1|Y(VCC~A`y3s`11A}14lWeacUJ}gW8F&+zWCP zjrOdw(f~(>np6#{Jt)S!#8qilh0lw_64N&weTQbB@FqUQ;ynOIVj?PJ{s)hB1*(Z8 z=+o7jzUgDWOO-Q2^8lqYy$Y`c7P5|Gqlhr%pi7*5$CaKICu?j7Ap=|dgJ__J`jIWl zkf9$5B>wtHq_GD~tQs0`%h1kQ()JmFPcU4vntnvKQI;jYmQ6o5^nWSo{^lzEyT`*f zkEdtjaE;uZH?T{@0=!+@edh7YO;)_KTz{>aPmsy)AsWSPXj9r5ErOS19c#IC&; zIXS`f!Lw&y|K4~0{?~u=JKy>C^QTYE6H}iEYpf!kzuujFtIZqlJUdP)#5n8lJ1{@b z2Im^J0axs1723HdvPT;Rno4~3(-5T|#BjkW2zePUR-SVjw+<}lip3Uzx92b=#2|z@ z!Qql7CdU;Ld`63lRh1NIM435d1vXR>PM|in-SOq&>gk7<&)@&>yTA3V-}uIF{_=Yt ze&@R%evh<2Gz6g&epT=?&*z&=BO2+hQ!PCP{L3NFY1hRdl4(^v|< zs*3)^fJpNXI+QPez!6rgyOaZ#*anJJL0Dm1{(H#+0a%Z(;1Z3JRXr|qIq$4G2$MIq9e-%Atp8#exyZP z-@q0-G!yQsDo1sP{q>G)pJCt>`92sH)66g%C7${JVY z5-Mq4rRXtQZ)b>7K;Td06uDgFswZ(ZI#(HjBmsLCWCe0^F2u*xaAqpat9C*rt5@}? z2bgfqeg)1Er~*Pjv(Ovje&7#9HWLij0&(3=XodZIQJtP^L@j-am`DayAzBwEBdK5q z7TYD%@MSQFSWgA2@nJaW7?dPPK1L=AjPPOMV~i_2k;Po`U3u|Db7G%zRp(x=);*f^?4DPoRaEnv8ZL5 zxQ8@?bd8Z3l;)_O^-%2Ytl9_N9BVP-eh$u#4!Pk#nVO35W_MWP_Aaoatm}}1=k~f8~$`{uD}cE zcqJdwk2&92y;KP`1o=esIZ2@BEUmL-E#c9TR)TxZ74Uc0dKyi6YqhhUt=H`#Nx?b++5!|zrgE( z@8c}_gH`>b+w&jYUc6N=7i6#EkW7bTd)?Ns3G$M0hfpE+V%x12NENos3aQ94m)tT8 zn>hoKicY2CD&rUgAB7TaOTIW!t>i{<2iIc@Pi1-7m=h&YIlf_=EanhsDtTU_C+k9! zq+=6Y)ets{gx|qW{@>l6z4`FrfB0|wZ~yv#@bCTK|HPm8{G0Dy?XL}^Ab`Z-k4+27 zAWh_ zi+VgB(HVUk3J#WF56&`1E6R?ok7v3%S(;#KT#7KSuLEqH2CA+%Q9Q5weGHLZn6D23 znpjv&3-N%JBOzyfXIS1H-C&5^$>sv2lD=Kxdn{AoU5q)xjo1tSUnve%obs9NL|s8N z`aMeMZgjTLCCDz|t{I?kR^?^oF^uHbnZAmF3+YKt*61=zE^%6w3}}23HZNR^8555l zm(fZHewVRb79yd7K-_E(ik;|Nfvba3gSpY!b&&4s~e ztI3PcvN{?u5@)WpSKba#d=x<4@ulqpEva&Bo2u}Y$Ld1N0k<6~&)5ya4}Jcf-}Zgq z$Ee~z{mXwTCRlyO6Pb|`;qT%12jK zlldy1&ty}gO=~{JElv-oST4n{8|1mrrEy}J>WD?-0>L}$>TJwE?oWUr6~n6?`s4&7 z%p8XnjSo{i;%gXu+#d6`gJ!6?NV5e7k>~HUCAs?3rYqCrX+J#Qd1JRS6C1wt`e{>5 zkH+(db-m5XtD(uK^zll?TET+)-= zBng^W^yI=rmF90RSC8xJvhB-7-rh&-Ui~03c3fKW_pIM zA^@l*#U9%Ikzt9RU1x(UaSlNLuAksHrr?9`22l#-x2|O*9+_^*-o<OkMkJscWMa zb@Yb%3e}o6NF0caez%*m&1(Cn{TFnMCn~#*g)Y^m{0LtNdSiS(T@lOHW!{V#?ggVH%SRaM zeAo%ZlK58)qwN#``~xDk92D9+-!$Mr?bc@m_3(rbf}Oc*M`3-vj3lNlr+VePB@3U( zvnF!YEKRh6PeC2hiPXVcCeUdoE{Y2}{6sE>oZaApl#(cof0Q-BCP7g%P0xKj=3=GO z)Q7H&p!u?@0pQ!N=KVl${T#(HPCp*Y&{^XRai;Srj+HQ=r`E}PT;cCiynh4+J#Xno zM*3eLcSk1~Qahy?GZQd}RCT+cU9oVtC&s}#>m?zbFt9MLFY)_^gjnX~jv$;`z9`G( zqFTEn8HHqCM5cn+U|=8sSWe7x(M}c*HklOjXU42UoN%-uD)=FDOkPZzKvG7{s?C4? zg?jtft8iMPwh=||e)b*069O^!_chnwU=*<~*+$(w+8HT7ds6N1~ANcSCu&|e~Fn-meSLxS;#zT;r!oY#y10fbc7fA)Cs%g@I)oi=HHuPi^eSeL#Ec=5biiI&rw&zu=MTY`Z!7WI&S z43Ov>KlWoEf(RWUZ=)!%QXb||5?~7j61~{b%tPBqzElQbb5-YD<+hGXHIf@4Zc*0h z3DTP)vtWXhjHm?z35VhixN$g~P%>v7z(Vg!Ib3AaspLGCS}+Q%jNWt_ep|TW6D9s5 z;|@tVCS@El)r%P34rKI_f!^CRNf|fE7Mz-G5~3Ry7_kujfcX03HyG>WY3ciG`*!jT zT5cj;)hkdE>pbcEtm&Pg4-rT?ObGBYaCy#9EpJ^0ijq-DUT`pHLovJ%RZki3a1CY| z_Od45w#C^oJ8SaIkS*F`*=38{X>~L3y}TYb*F$~XudasWVOk%v%`x2`lkJc#`=TE6 zMVBv+Ihn6|5acRdSW4HW%X2~}xk3dcrU@b$3QgIP>FM$GN!$3wXjCvu*2%Pulxc|z z=(^);Mf2$=2}mbK&YwY#?@BVXK) z=*p|%ln#YsMm%%!>O|y}u9SMHs;eAT1y$9k9-N>65mJTjkuQgMN++|tbFW@fS*4+V zXnHV2Jpu7~j)=p#gR=!;H3n&3jY9M@m6tXw$M@??u{SXEM6^f#gv<*yux71VMm&=yU-0*JzlDO!M{ zSfH_4=>Cw2k^I491$?HV*3PC*S+l$!3w9R@o73ysaGh zi#Uiprj9H^mX=5cWdvY4gotw7_x;|e7#I1k6g-yQBqE%Wk(9B57qB=FNs%ItCDyN* zQ0WCt2=0sZP;UCw#ZaJ+Xov`iy;N9F-!Z$WS9FVNuthXKg-V*8trm;TYI%3Nxp%g~ z>P1}Dq(K0JNi)C@1^URD1_PU8s!ysYkm_K5$Ope-C@>Q1i6CoMq{MtC_&_^50Y~EX z3xU-L)LIz6u6wpzfXN&PqNdu zD9T44zK;?c2n9RWA;|6n@pb)qu<>wtc@wE#CETwWm;}vfPM?Q=I9ELDH zac&LAF3Ky?BC0_oqmWnB0D0&@Y_?)RON~(7xxpl09Dd;QpZ}Sk_^F@%i68&{zxQW; z-%tMJPye2u_{kst@r#Rd4blm4L^H=5h!+aEc8*MqC+ak+&tMOV=nDj-90wV!L4hd7 z`^TKWn>xuFV?$KYSbQ9S^cZ$)g^-+-*z%Q z|KMd2_bGnn;e&tl-Td`*cs#4T)J~Vf^sCSM4^M|~94|JDd{E zp?~qo)6>;;+_@i{WV{-u7n>EX0W$DI3?{Dn>FJ#7vb%jVrFd5G8UCb}N`Q%wH2 zj}0+&=G?v^snDckLM(C$QA;BKhkhR9#ZPDff0lb!5|N@#xYGen#(PwLrw-OmT7OyF zCI@0Vmf^a;oL2hNus&m;HXHjEK%K)-XXBl~T`m^x)Vy$z?zC?alecBH$bHgl8Jlf| zTmb+puwTE$9<81=!f*lMA^VwKBF+V!4U}nHCSHrQty0Fjxx;su6&_2TjV=d4dsHhe zOlHcFuyF0u>}c5N+!X{}(VT8H*)&-%^c9tJ337}YPBN(fD7qj*2SaSMf3_3} zTAAO%YAhdlTAjW@LVi+P^+56Li)+e^X3-fqi(Vi!14AKcK=TMpbFi>Gn$Bt#pp zOok|nDuTof3k7rnVbK7b9OlO_sC06U##rRYP&6o&gEKAmK(C(3IKAPbUU(_XUc7km z-uoXimM`+G9h}2)2!@)>A&w6$G%*0v;HL3FdXG(mVyG};Eng(Se-iDHGKoX3OS0ii zen~i7NEt*^2Q#ONQ(Oo$)Je($`Soha_!{6dMwBlxu&M%({@P~aB2PDFRJs5ye{Sxd zs(|eVV>lNddX@z;Lb1)|8i+!LuX7FgC;HN1O2_f62Rb7K1Rop#1*MLaET_527lxsW zmvu;^*j)C@F>_Cq!JYBvz!V{xpO{^-3%@+_z~IdRFk$ggkLXgl@#B(W9}v4;B!BDa z&98jCd*KEk)4C|yWcu~@s{h8L*X||7-6{M2&GPXwdDe|jkNIvKuKK>sy9Z~7FXq{1 zUd$u1(|Wl&-)!6N)Zgrr4?j%Yk}tbRk}bW9Ox9?7C`0mW7(Qvo>wd`V=FQkUTFq;wpU=N+Z5=4YV^!4zVHUlZ3K}>)?k_QCKWgIMZzB?O>s(k0|H&IYR(|S?;;eYfWdHeqAXTS0{{>)c? zq01}AD{c?t_%Qe0ovFDyurSaHp{fZ0f(7_R1n6DZ$|>dLYUvHVxZMYYC5BYjPR*8i znR&CVhhA?T8 z=4DzglGWX0d6rUYW~0DnBT*eW;#_tCQ{0q~efbpyvd{U?vRc>W#rgTlnR2(Z;|f0n zZbKSenVW}E_@}EhCky=u&n4k>ByKbe0r@2+b{kv>PEsP|xgLMvHYubyux9iVmDKa7 zG+%~aFd>*iA^-HS;uSS4nL+BnWUcszk@~Tw&Eiz*1t?dqyUmP;@i=ZT(Ehz3>E z$T9|%tCij#r4=U-c69A(-;XXY|J2X@+|T~yue5!S8n*6PsQqvi{Z*@dGfs;LIqJI( zb;mW!o5D$B86OQIH;XpOOI@t;!wIP%>O?+qllrEC- z;jv%RQ#O5XS-r%L?GP*++CX7bq)!*clQb>ItZB1m9G`d1kCp3px7qLiT>JVW`RY}2 z;|t=aubk>%IIRBO;r0l-$=Iv>*mUo_@nm<}b$zl((&h2EP1BWcmqg*lQ@vzlkrd^! z=@#VLQ+hp3$1MA`X>pVE&y#_q`1++#79$sspOJye;@U9&JOmc`% zur&1E`-`}LxtXV@)9tZy1dcwm!$`s&KGCrbW+f()F7}RpWQ5!?D-JDey?LzWl9yn? zmPtVjo>VmFQFLokz%|j=#DTlKD5@$c7CvpPQU;5KG?Od4;FSk}ilgY+68->yjc-*n=wP2-M=a#;2x^{n~2A6i<>RRSjdw6 zgd%(nxiFK@UjPtbt)Kr#M_z+?Ysf1vSOi$R00zbKMnpYFwah1|_o@p%P!tmGe5M1A>7=-( zBG|FjEH$mL8K3A^_<*)|Rf>cxsz&d15iiW-h>*bOINq`tEmhcoz2W zOS6^WmrV$=xb>>cvCzCQ?vn1&XyH_X>0vzmLl+Z~V6%!$N6HQ4B4hxcVp0s;MF8s6 zI>n*>2BsV$BQf@&ToH1UA4)fLFLQs-`C8-_2>Kz+GdTpw?4c6%gSw+-ola*DoS=OQ1^vh1u%bxTQ7 zr|BO&yT~^j`rs)*u1+W4%nvk7uJ`roof_i13~)c!JuyXl27Ui?8Q4_CqUA0c73ljb zh*^|#vG-QTln59r9YIH)Xo$8mO3d0NJ1owpn0-#|qv&V@zp&yMr z`&GbHN^-_7fF1q07F7fQAHe7baCR9@06JebqDTuxb}cd<*{R?K6--1MdXEB!CBz<)6-smvdxkl%6L^UVR|&cO`d7~^9|v7Qhj@j4l~{A#s2G$)xqjn$$)wau!kPNx_x_%rEQ<1Mdm%qWW_)pV2`AwOdD(V-h9OS3FZb6k%a>2(e3EV$=aRU9zC_4} zd*>4J+Go%9m(6L{LLY)y)y|y4M!pwy<*YUB%v>cKxiSa`+$YEBKl%>hG^pL&9F)5-4EIQ{6t_Fa$C_@3T$finxfc~)e{lEqaC&id3qFQJ1e#<(c&pA|AKJh6 z@`_3-gSF)wq-vDI;M?RTZcyHj#j z*BUdzO0xUQs$J~9b(#Mx+CdiI?b4z~F@9#d-ge#dv-9s3>9dzFx4YeEVx{V{?dDK~ zuIf&7o^FCJk;x*@Z*;q|RFwqd3}=n?goZnP;{ZTwae$37LhOvJ-fFgy@N23iT$_pD zzzj>uOueHkJ8%sm5F_-`qsEkw3Vmu+veFco5BYlBZgJ9R4%PT6DivAr=7YOuzQWP_ zo9|_bK)k&4uj;$bizg$#HX*mfEg)i9)=FwUJGAlS0D#?L+kUM%29r&hB#sr%~f@F%jt&YsX zu@qCe*44y4vlvj}+{DKpNdeTp33l~e<|tx165T|kUXs4sEKZPse(qX{;y_|1OO z8rBI8LsUhhHe5k)_-`T77BzTrvzH8kNYeRwWl|+M`aS`q$@zL&D_O3GPR!M(bst~C!x%`0-r+$%Y#u}%fP8h0Z^vJn0ut%>QPjX<-{mf@L574#XdEl|>!IjlRnx&8`po8aD@fP-M&%%`c0g$6t#!9We-{e~cPFN_yO0 zBhSKVlKDFDuY3@<*KXvp~u5% zQTgI3w7hG2_sz3>I)Au=%o*X*r_*wRC0Ka_EF=T^{ofhn$r z*nT#VyiaFS@+)_0`lJ?B_%D`fFs($~GsrpJdEFK+wb=Mw@wW@PnRF=lDl>F zYW$hkkMFm|q0fFOowgYI{`T?BZF74|a=S8UCNI~EuJEQIb_>dMG-R2PIm=?h zCd203mxiNQ@qRP?S~*|E|Xf_mDp;2;&1fhL#Jq!rL=VbK_)S- z77I8=E(LACT;O^QuVzs*v7s3>6lb#FraKv6sU0$QKM80PnK1AOE=@b(z-6^f!z-!^ z)KVY8iD)!?IxkVchwtbsv^~1TMoU793&4ikc4CA&c0S+VcX1DkSke1l z<*plXTU|5t3gr}M@s^%(Y}h%T~$VS~GI*~F)}Q~-GFT^qQGp+wX}{^%Qa zk)zZF0DE#G3gHtYWCVawnV}#T-xixSt(b(&9MrooJWtE2P!-G_ED<I{U80xoqbI@rLGLhL2itbl7`?C4NO9v?aF*f!#m5(50GIdxSSPe(iUb&6$jO|-M^Hmux$p`zp7T+77YLnj2%FU@nrOwxS47*wGD;Gph%+p(bqxU%V>4kPkr9&ftVw|C+48Cr}IK z0zZV}5BP<*ci8GQiQHiPG~WT^vSiF(REE{)JcBW80@q!7|JF$z`gJT&q=iEm`?7XO zOYunH+@*2Lhf+f!qHR4)zwS9v13tsVJwB6lHChg?qa{*bhZ%P_o~Uot2+W_qC)eTQ~JP7 zfH`I!O{nIwQ29zVaY=?y$^d06!8)AqQhZx;EJ&XOu6zwr6nY5@r#xD@ubTQqhd>Cq zMUMg27ii&aa5Y{vD>olQz0bF9k6c$3s)H~@u}&_sAxh7=Lo~~L~3N{kp7v3n!1idN|GiA%Y8hkMyME;WICV%v+|rs z2EWj~m_E?+(gS0Tp>xClIV4j!)m6=4oDRtPx$a$JBz^bd-skSGzW>qYa#~NPuFb2~ z*9R7t>jzJp;)7ucGTmu98*blBuI`k_Z+;w4Im%1bkn|N=JY&3Ed2;v3x;+x?WjEx% z_w5Gzc11&^kmwgt5C#Shv=4U~nv%=?>8l^Vn7Vi{cIb|68-f`YX`hW2#ih>@&f01?w@Tm}-~QCmt?k_hOs+}IW~qJF&f2^zNIk56Flusy{> zYu{ABxHpfNz)}H_utXVZJpze85rEAeDnSieu2VwVXGgLQC(<{k?(*{T`Nz*MU*6nY z@Aikoet$gQY)DU(g=o0vodzSDWe=g(fa0O(#k^LECt)olVfobWl7aa@%sD4Ju1*OjHZ8W*E$&lM~s(lcLIk1R2W`-z_Tqrg+Z z+n49`6W0O!Dm#gK0muu=%o9toCIHcV!VAj_f1*C6D8t>0^YF${-beZyopBVSIffwA zBnGn`zV+SJo8MhNd9OeF#xDP$TYalpzrTL_+v|6~S-<&S{^ry- zX>-Cz!u>esBdYq@q%0FU-rid{*g8TTR}=vwgQ}()yfP&LLqn9=L~xuin5Iv6?KcUPYDh0`=^XE@pI{TV~XiO+Qm_e(?P4z0>KO>qYkMZP8Rk zvxLuhivDsKKIw;FNYZa)**BW*JIe>Zb~_!9hwHARm;XOe|I#x}x8`?35t$i>%)AfJ z@jX@Ts@hfM+OD#V-8OD)(Q0gU_W-#EjSx(kAR!?!>ZI4-gWl5#wgi?HLAR zQ`l~|t8G`6>#*Pb9-rqvsl*LOyZc(9gwu|rli$+ z6g1dV!qQocwlZmIA-g7s2Bk<5B@{m`?p{1WRTS-{=-Lqqn1Z85eb55xOyRFuNrU*x zRaBAitFEXjn````%8+jKq##6TM{KlrgCHm@m2LlY`kb)qM!Q4AtE$}oaV&W{MnAXWAZOcOK33(2u+QKDQtma(Wv8ol64u&8ky^u#au zwp{ZTz!`~sV~|bA3w;NN;lf8IsNv`b*hB(kum#5)wYZ8&Z?L4_#jMaVlt+?^!S3m4 z_wmEWr^m;qr)MJm%l>)rgp>Nw2_Q>Kba%7z<-lRC@@^za!kR~w&mPf6G9qFrx_%3v zk=6pK8A;}c$0uK9P`KeoFBLC3MROT2nFZi3S4V|}tfWCck-~zgTn=^b)YH<+k~E}= zIxN1G=AX)fAovVKmc@CUH#ztSr*;s^#_mJF)Fpj^j&!Mgcb3dR4HdJex~$~O;quM> zU3Q4Dk_=G^*`MZl$RegFmo*cj?RM?tl@OvY%+H6T&!%lwoApiCb*H1(*ql$0gb|R? zwS2e`F*%S`}N=4ROh;XP43+KR64o}467Vc>EW`tJ^i>_^f&cDznm6pkkE;{ zH=nm({>EdsZ9jYslh_w2R3zD4<81fUn+^Sy;cPq`Fz#+@`b<$YDv?P-GpNk7l#5{r zFZ*V9`d1GJNRyrqm&@s-bMbM>TSqHSqu%40FzVpR@y^EvsUWPj?U&3vTw2V4XsKK+ z*4620Z~Ct~v}ZcBJ`RWKO|8c>(IO26@#YK(JAblBkJ%Ic`K#)moiD%EqPW$c91q)R z{>Qi13r1ma=zO>LEo{__k1M=|Da?F#bGJX9UY$>ydVW>cOt8_0j}Be;4gh>g5Af;D zW*KbxGU+BFWI?YyMroN~k;nM+=Voc5k!PW_KC6o(mk!V~hn^l7&;{cDW-<(MW=|d& z*^mvHP^2r{jv|Y*nZ9;pV`%YVxaL{5pvNPT7l1NLc31(0f)N=#6ClW{S<@{cOaq;` zsu`=gXu(rKpDY(wi&w!1K`f`duH7`tq{Kn}mOcwrdW=uGnP1&((HfIRTG^3wMPV}L z>(d;DE+TtjxTg_dN;thSK3VM#ryqa(@bU5K^I3g_16rxu)kx?Z| zPCS;B?P&}K@$d-++p#~&EV6mvk0`3;>$_X$KiHOemCb1DA6^E9%uZcB0(zV;o8H$9 zIxT)N|J@xAK?Not(;aa=roy;o{4a*P}bG37Mm8E+BpTGY8Z!UiLkACv=zx(=+{`OxS z{=>g9{wKfp^ml&u<-hlnm%q9HCx5y9`m+x|{MGrJpUvO@t+(I)jaT2i|MmNyzCPY> z#_yin%lYN<^azVSy3#RO+jmV(Fu#4<9rwdP79QodE3JfD91War6Igv;JYhl3(BP8j zdHJ)a;g23q_RNcs_eig`&b3{H%|02Jx>0s9@uQ2-A)&1z=4#U~&!ZQQM8klf5RJU) zRxbxqZ`#G4DHa8;z@8bO>Ia8oC7*Op!!P$eZ&%%LEX) z!1^((NCm-nWIO>(>)Gw&d7@yxqQVvooU%jg_@q|ZlMSy!wSoAgAueYC^*COhpI*r8 zADJ_s7?;NWr?LDL0P6xF1zja|MRUhSPAWr-L{v*De@0!Ut{uXUPUrudOzanfaX)PZ=1ubiHdd*Kx~MrFaOEsq;U0@?-{ig{oA|dRjZB`RRibW zKQPQaJeYamE^l8=uWm2D^Lw|y@#XpV-tPZ9&;R7JpMU#LzaL;_%`j7pQIQhPE?jP! z@o*VWu5@F4FM#vLF(Hx-F3wCy35$$pm-)5S7k8yLdL1}d@ zT^aSp0rV!vYG$wL;qp*1^&$E*18^z+TB=1DnT!Y~fu)$HYSANOuc$es))itDgz*g- zkcbbcR|ahFv>-s8FV#I3$z_KB>|GD6&c@Ub7Xp(D$kn0o=KYVpWYfj3ZQmYFr*~%( zU9a&!E#`;0{nv^NtK5Z7S=;c`1&D=Q=T5+ zAI({MZ< z_q+Xv4-en{K!X3U-|vsPGXk0QJ2kAUA{hk{%rY5MPen>g%i01l6!vcJZkeY6os+F} z$vo;2>Ei5N-ytv$S2|HuE~=YakCUweD|zFB^8yL@v~ZX*m;<$wCW`4>OD4DF)6tLq&-?J^(p5SxBc-L~~z zQ~$y9;yq_JED%4{ejyVRw_y@2N zCaw%0;5m+$o-X6#!|L~!%TLeKzkIh|+1C}qXaPK}#l+SC@!RLs%d-0sA#OH5JbwJ` z(}_s%W*m=o{ah{n+PeQooAyV#h!#h{nZU5_UBLiJ`FBE zc9PtvqR^ATrymQ6SvxalvlIsnddcbdu=fd>2uP&kd$Zl50SNTo6j_~oS)$bPP(miw zCk_{0fvRDy6JSk@b8%R1zprk$H?)1)ALydMwf)-JL3lv!V7l{@@{CIpR0vcsB+I;7wc}j^rrih7B)h;6njzTJi^HC>z zx*rr=EpNN3+u%xfn+C{j1kJ@(8d}3i}}-1(<_-G zg_4CzD793p21BiL$SccIkx1zlpFUy^hgP$3hh3>srOI5DyCNv$C|=%g$PPV>7%4YY zp_heskryin;0h1ig?z%NHAQ|&(52@~ROt#z>Y;G@?F>{P)Q;LfVfN~o32*0)w1;o6|2^~jm}MtM%AoZC2>q$OBN9*wU;u$ z2t-$B%v)5?x19_qmEGGGuoJ%l2hA?i{II7@EsES_#S5-Hv?LKnex2uWEYm`NQYAXJ19(-QRkW8cKyeTk zWE4|Oe4O5iL~?%Eaf|juX8hvEVq=|zm_<<};`GH_kQS0wgX!XUt8LODInX*+wBvZm zW3QZ1v!(ur2Vbb`ke;APY161u3Jrn-qqyrZgspM%);pr1mQfa>EB zKJmX}9!ds4f)k_S1whyekuKHgjN+kjxoH;LmT*7QO)zY?oYuY#v>N6WZYFwL_^+-J zZ?S5+ejX2Z{gUCSTX+%8%XuP&av}uD_z9$x$pHXuONbE)uBg_%0Rsv?q0Gdz^G+Ka z_IdyE{r4X}xPbro{KVhE%ia}D(yr`AlgUQhYMMe%+iD`q#VtwyEh@ZR*#gQD4>)$` z`qlki>vf4U@n;-douiw$atO4y)TQIvimzRYBQ&{L_vlc1*ddlhr%Xyv7ZZJ_L=Jf7 z!GuJ#%com~mZ^n>VBK_{fddlw zG+bmEBc2XwJe@Y^wHP3amLAK5p+_A9t(K6|NFA})$Nz{=56!SH;XTCJl&Z9wEETi>rw^13OXh=9X8xR;OpMs}H;phgJy z`nvc1gEIXt$N^Ud2PvU1%%d(J_TzuK+x_oP=e3G++?wPPcgvMe8r zU8>kxt8r`;yl}*i{VFixLX}2eLtFlYnKEe+WwEF(96l7lOS>%tmfufK8V21^5XQx? zr%2gaa9Ki`jl{smu?>WXLy=>Tiix7Gt%^d#0}F!M1*2M5itsc$6A?!a*e(csm)FhV zZh2@Ol_U|y{9Uc8o5kt2ZzW1ZG6YncX0)=23r`BKgWKhJkC4Bab@F)j5KBZYdKzC|5 zB88js>-sYL8p^_`q-YLEG$bO85@Lwr`DCFfL$$UHk^Im=No{R`tAC`oz+pR)yNPM( zQ>l%H~Ci-b&t zFislV1!T)N40_4K)HiEzk<%KUJO$+`0c09{7S>{z_Mmv(Vi>1TsH~;W%BB5HT_z`k z{NRbG>1C*2^=bx|n5i4#6;LOKNHO+)n3zoH3A2w>;tOYB@H~ce#7sei2$goT@@}>I ze(Oy(fBL6i55r)ibQ+RTcNI!iA)q6QnDXdXFNF{ttjcz=4?3&np7{$uw#v10`nAkZ zLK$`J1=gdle&w@ny&+!06tk>nO#_6@LAhR+XR1d*Z1g>EUwwOjd-XKg6E%~Qw`w5Edu4P}aCYkUU9xlDpELBw8SKRdR{wulz4CxmfiRe|Qt4|xG!`~==nn4qhnS?Ht7xd?6YvbfHkYoyv|Mi571GkH&(r0c zdrXjtv6Qq9(}R^QfLgh#cBknyc{w9J@Z_a~E-L}ASHh>xWDiqAVS>s5pjqS~bPb9j zn;r;^x2DnATy2LaWZ|;R7Z_P0=E}HRbnjxiAq?l+Y&Xohy=urN&fvyzY;#%|o#0ph z(XVaL)tjHaY5HbvZc*N4-Xm#Mujl7KJv|KH{{FYcY`4F5fAiJta`WpSKYab4|6l$I zDRL}P_vKw1Uccd6QGt0w%Tbgw2 z^^Mm=gS?l3?{don!o0Vx?|j%HLU}>eV&RkEyS7g|uRhEp?Wlq+FI&!479?mIrAW=( z8>_9{MJ+~g&1hs(M=4Zf`2trr!+zH@#wX9gKxLM}M+an!(Ez2)BO?ICK7G@`yQtq! z3`=XqkZs>T9}jDvK0rFP{;bSDqXd9hHJ@uK2O8xh#TQb zaTB4~ahp9yx3~l?_`miI0cfv?Ht|4Uoj)C~bQ*s7&^S$X9#kPRK_ec&mMXiY7P*x( z(;4bRBz2J14<~u$$mh8+;nyueZum2C$pOUi@$=cJrzG;j?yS~jUA`#3c;c%J4HSU^ zrqXwnNxFJ*;mRw3(5tZx|AL0g_Td$rk=yQuV(7RaU=C-?oSuz(ghe4M*CuQRW;C(x zR(BocG9M($%fH^A=JAEOS^3IeGB8?}BmgL5YlSso-RKz}<%by z!ot#d_%xm6$2Z+4nP$&+YLze9&!$Hm;-eUDwVF#nkL0|$Nf;=*SRs~ACgY&-{0AS| zW*d!*JzxpGDdIoUUm1ZraY6^5pv=;ucs3r#1Jpw*!l&blZHuS@7Or>)9-!fE8aZN) zLRFXF51QDFT;w%)3o&R9TQk76Rce}S}oQq(vs*! z!Xy{C=4x8>L%pgNJ+6;~pU1^m_z&1ybC}Uh#5MsL-=ZmA8@On*9Gesey( zzYM;3FLTL^VUNdzlKx|0p)tq+LuB z1q&Frih-a4!!%2C$WQG(aOwn~eC-z9gR=&f4os1p%Q%>uzHI`AyPFNKTJbH}M zxDStZ@f0Q!$fgAd7wEJR799#FxzxDT{n*!5u9s<)LRp2=-`Mhzh&=d%5#=tZAtfxs zmUZ9`&TJfXC6^W@GB}Ch>nKM7IbMbdya(65c)DLUfQ3DML3V>*45h@wj4M9u#cS`z z^I@3I`@{3`wA=d>?jwb8bvy~%nBLsoh^w9Go9 zFy|`|WC5dqW)XrBcE~z#MV*f}ek3RcxKVIvD!%01lP`fjEqUbeDq!=Y?46gl027h##7}$^|dUpJ$R%RpxVrZmLx*qUHwbob9vIQ(Zl&7~jAPOh1 z!J_MmOCJL;{D`iQU?Vlean}}FH*C?6P6{cwyZ)61qL>dQv>N$N>>!oUpoyrq`h+ zy5=>GTjx5EM1cywG~+N_Fc^s*I-!;%Fw7`}W1>9~$N*R!I?FHKza!6_7leY|7eTMc zO#6le(fqXam5wzN%<9r~r{U6dH$53pxAhGeP5*S9y7f)lt(Tp5dcVGZMV>!Z9Vu() zD>8gz1F16u6`Xsiq1OVgNIZ!ggrBKe0jK~!1cW@M>8zSL3LB*=?O?-rN8eYYIP%dhyI0-o-??41>woh5<3ISX{-3A`$3Qt=jHGo+ zlv15=tmZU=Jh9PiI%i5fpeamh7LMgMw$~#9qYZ$fR#`BBjf0vV>hXB-sweieqj#T5 z%~ru!3~SE`5K|^60HMH!j_A4E^g5tCo#V|Jj-qt(-dm`=1V2761YE^y?PXJL;w^n! zspD!v`zJ{?XctmY|b7c1$;)4%xe&1p#vCnqGn*OENv>2GZG4IedVmMRzxNqM?31ZC{Q91dh@v zhvFls0`5n2B-cH2=H!?%gV!;eL4hKN8cz7KKLRPG zf}H=$<)*E-?bJ7yZh3h*gd|ClqrJ5GPy4jf1%kYmpp^VD zROW2>Xqf)xpQqUf8|s+GS(~*@xN}~P!>dHGh6qg%0l z{P=M3;Vu-w0VO3d)IPA3iGdtPief)Ml!XKZ7N)$N(|fp*%1aKIaKN!chLIHh!Gi$713j59;!}vTz>fVT?5b<3_Mg+u~F5y94BFIHq6K&|Vpy}#XT);)vwcC%*K)wj|XSh}1z zXfICDWUoG-FHZ;NV50kMn*YM+?S!ZwV)|~*H1U~6M-htu;E#STD%uMX*F?^%xO{ZP z5QVikJQ&zjF=lK=dvy{96vHST{a{<54FyyovS3P{j>bq+Oi%z#K(fCCh(_YW4lm$= ztVz2egn9rAaXXQ=%DGQdHX11wh?v;eoPRYh1)vInJg~uLLS~qUan0?tz;T1dA){c6 z&u*Jvecj%)QAJ^1CLF^Y9>rxZOnbFP8}=0a>LAL2bjUB(xH^>8d{`*TCa{_l2S?+$ zPlIR};p}~k&CsCUF;7*qzzS5{%daR6 zsCMAS*jnC?zw0b35Jj#6x?IzJGX`5GGASk zimR)JEn6t3yoF6HXeXd4jzCLFfBKVO!Bc@f4o7?dd<>zGm8+^c9FM?}ZxX4G$J5Qt zX4`L$=MzIb>iFjA>GjaI7<@G+uY$IO?h3VK2)*I(fUS`&^Sc)cdL4JRUyo>ctN~KP>t$tNq{l_wIh{FKw6q z{;&U^|MP$Szx(@tWQfF`z_%l}I4`8{)f~4buvcc5pI!LM`+f>bi6CVV(NUZjCgWYu!|8&HT)%m^G-7xnXQKfXMI@$4xU40LrCNk+5BVLtiD zfcc9{^;0jLsD`=vM=-O!Lo4rJ-F*Gwrh-aSXOvLqJBX&=vwXb)Lv59@PL^O_Q)xZ(hB--?l)6$c%eTsSPnVJGjv*gFx$^NNe2wK!8tMy{jxA=auB=PcDK;={! z*p6o(xPrfSJ$&IS`^p76&)m?-LNO|^QgwW)6r2pgq^X$I!qvkloA4w;DiP7RHh=Zi7wdH&d#T;W-HWzV zAo#kheZ>U|hog*ciI;gooy_TOVc0lunZN(`+i`TIK{vpsuf*d-_1wCu;f}&t#jh9I zifM6wn~XToIWzVM3-$-w%Bx2nG9(&22C7h#4#UBR-%U zr`;Di#v^|fAan1&%T}i!y!)%xGmul~iy*Z<((zWFcytLp3T-~RmTKSp9>ZdH4`tNMe`W%Tw0 z=0^wDaiz=$rMrth)l(E2i$fO)UL8JFiX;# zlP~pn#OloPWfuw91|{MVQm_xS7*BrZJT+DIkNdkn>u;vF3W1zRLALjx}0~* zc5_BE!`|ke7Si`LX|TC05Qjq-kRd0S&gW}yME0D>@oIit1U~@*`;JgBYaCQnS0y^& z36ZS<7Eve<9d=TcrU)#-z;GB>EKY_VEbzpm1rqg$U$6f$3tlZqT>A>0D2Hd=+Wzx}ssDJ(GxYEMl6Y)Dr)5F`!r9S!X*P z4cWmYx8Ws~xNET^0nY^oU^s#Sxdrgc05C>>cV_fn`b>R7Wc3z0m$9zj`zU?o(i6BqlkGBjkWWPeuXAGaM3OS#7Y0N1hy92eF0-)R z`#QP$?Bo0vCoiO|4@1?i<^+R(=Pj_#ZdjLH@Jm6B)%9=u%9rP1Ac7xHr*dbOBQ6?s z{w`Mj&F9 z-p&_g!4CAjb*pLmuE~^Q>ua~mRj8NwJdAzcp3lSYy=wp7Z{5A^o5dUNvsiC8&5GU# z!o}SeH;aDJ<$?OKC6b{VG!+ez(B+YE|LxDGUwu=XKWV1=be@K9_N1_k(Bn7{hrFWf zX*`}5$GW*4KmM=&!Jn0rT}a+`zI7ekFb*Ii&2-$^;rNpvZqIla8|ir^1EJoc*x`T84@GF(X$fBGwH1$=-enQYr`yWKhlH_iTdstymISc^U{o@FY484HG4H8A~oxa;asbzh3dl8Q4iPu zoPsa`IKDiIA?D+U02hs@HRLxA20I5fp@M^O8P&>EEUQMTF=MbTNB+B;EkE#JPcWcZ z!#+cT%~YOy-o?ssLK`LKxQ3eyhGaP>2I*kIM0IuZ`rUTj(+n1!$BD&J3(ck{Gu8W`$c~hMUdCBv>z0 zPp329!Jcmys4wTm#Rm?8naQ`D=p}3o?Lav;sEUk9@~J9ei)jS)aC+5+JhH2bF*#8T zLUt`0Ouqb!Ah0rQC>;*v!l0~%(xqB;?XtU}Q@pyprJw)dzxu<7u75&2=G7pkE_k%3 zu+%uM>HX4MRNmUopYu+2PSwT%0E5xYccR!`te-vc;Etn-6S(*ZKwp0Od5?8GfLQ(E zanJ0R9e}Zr&#u=}R}U!$UwAoR)({=jBD!;c`ukseGmV3@gD_4Tw=$scj3pde1@*kA znqKfU)Gyu?D46ot5Uo~i9^)bBG`37x-!79HT+G%85DMe2YOLk>H{y@nu2rr;ZId_xXjaL>z_@MZ*Efr|oBGRb^{SoUtWv9#fz`w+Ba-|k=c zKKRqqF-oa2NXEXYE(eq-Wv~QQ_JN_Gh{9eGUozCBF3bf`H6`vVg`N8<1UuzGj`*ho zs2*JlXS+5HU}8#v;>fElLqZTX1qHOIp}+EHt5}{rv`ek+EVV#L4`5GKfTHL&a0g&?Eet~giyk_6sTF!-Y2e&cuD)6~eIWC-FU@JKr23kI}1 z*vLkFt=yTUij3wwPNQo<(@}cK(%?^K!v)=h62{>bigl^*lV-!)3ARE7Wu!!nMvX=< z5?CVzornL)gqH))e2P8LGQ`K6B_k`};L)DZjm-;E>SU1WumF=8Q>~`Noj98D6tid< zHJ)fB0%yZUCwJv9!V*qmA7Dc>9B3>19|s-=jZWfGC`3M*(Y6FBztJwp5W;<&auovvI%RDaU|H$6+&lJn;NDaZ*o0^5-a;I@{R55ikN6CnB<>WrSbJup<|R zuvPp!Qly(mK_cNt;)2+hv~9ucN9M#S$E67@*1z%9SLbQ$npiJ(yWJ9+hhgg5hAauUZkvXg>ECOvwoPK*u7B@Ts#SVemA~|J#4_-9VnBsTS+4 z4~;@_udwrS$jjxl(|XXj20kfhD{tdAo-jJ6*Bf!wH2>_O2GhCOzWBrHOz)Cjtl}e({P) zjg(e)75KJOJmuY7guqCDRi$wprfC;D|$H9pJL6NPj+#E_AwjsZX)Q%hk) z4HVykhs%*%)d<4aEh#0isR;OCqRemNn2Ms4*Eii7=vTL1 zC-QIp+kfMNkuw0b-DU`}b(BwY*H-Zz_{=&F`f`9V(9cKTLnxO$648(bb$v$47?Ohw zIRGF^9%P$Bg#GfXFV_7!B6>RO;b|Y@>YQ-7={xOVFOXvz=^nmgO3zd`$)4yNDC~!? zza|iM3`#Nra2lymjw@efo04dbkDNT7suxpqb$z8^(@WPfsk}NA<=T_BW$9ZljVv;g z-lMFAX~(5_olS5OYd{&-7Kl;YbCZRRP1w-9UskXCm?kx)k%GIYFcO7xdq%Z>Dz2@gxzkplw@>%1F@pREfpQ>CCK3C(0#Y#8gl~m-HrCFAra31Slg9cvAj^KS5c^iVra(|Nj_d@aZM;DcI7UA@C?xP1KnblMF|CJkftyfd%* z_%gg4MkdqyVfy{29Y#V%oVID0!>dpQ^3GR8^09*0P?eR~1hm7GgQ!-G2cRoA8t0Q! zQlJX?vG>G-jjHi=A#pkSDaG;BYe4f@;QTIJQxex|(RD<5v5%P(ioNu8*Obus;^py) zR&*JkH)8i=bnsE2M(*@s-7}5`cQ>0G*!C%Mx`(};;&2jf^hklxw~?Pcw}8qP#-b-t zXe7vDY)+&Jh8PRqun`qVCqmOv^X5}DN<^bES%I?Tk6&^4Tc-78Py<*HHWSY+d&Y|o8AOO6@s4611DyISYoTnw} z6y+KdjSvmx#{4F%s0oakD2$SQ;V>F3QFGPg0y;0UAWb>rz=zSeiA@^93gZDb(gL#m z%PGBLIrkwau>8S~^mS@EVH!zvxrmZ|-ha zgs(_S-6=liZa%J$Nraw5>++!|qD64YXku;>m-({W?dcq@V|Xk^8Mz|Px|S@!b&jK{ zJuZrM9X_swg|o51SccSEG2tq)Z6}73k{_133=i+F^oTYS-c4 zfDx7#4aLy67eo?`kRp8+e!S(_%vcyoa|wg3>BT}gq_H)yJI>E}5|Y3Tp&$s2u+>Qi(`dyFCN<+(ZZfBF9MFCViauD=r#bP#Z}nVnh*>WCcEyOeXm8u* zmLv=`yYu+{^ZD^We{?Oy*;#mvh53g#yA((Y>@W!h`G$dbw!TRlGXO)M0D2l$iKWA% z;>c+{oCD;Siq3+t5P%GMlX8PmG^!NJ(g1%spi5i$RLfz`9Myd(>9xvSzzRC!fw49aS8Bu) zx`&L22Zih8K}@S?Gpcg{Q!Lv+L(1v99jv^IPqoW<&eI1chc?5rX={I=L=ylM(92?fJPp2cfAH)U zSvy%#l;K4<>V>{w*Cw%pY3BP%>a>Uuo=y?Rf(PH)m^+7~Nn!9r;+gm`6a{QiUNq&x zk?5)B%fG6&od<&Y8;4NZs2k49g*)NA2xhV7LmM#)2z7O%8M0w?6(-*RE(qg#5G{;W z@oqvud>tHsln&z$C<`s+XB)36^z^DcnLK~CwJ2;quHWercmc=gOIcw_z_RhaFjS}u%qsz;oumoF+oV_%dV0ZG#BMf|akMDheL60|J* zhka{s&EhQA?tG1%o}w#V!B$e?M-AAsVj!X6ND$G<6ev)ys!0<$!taqXT8Z3?$D0g4PruOVJMiSwHj$8lEx67McKX zOsxehQC@k0y!d7(GyKqjm>=XTRVWNTo=twpwpQ(??Ou6#-Eu)1^x&_G7g2^MJuM53YvhOy!%LWkT21y12O9G?l zKv17U0OW;Fxc5h5hS3lSyJ}DFT+6gf-1;$l0>sl$4aLeM&j!JQ_?K7=;vr~DAq>PZ zCcYRI1YSOfe`PMhzDE*Ah*&E~5J~HY4~DnXm~3gR_QT@&T=7+R0sty`fcb@a&-0Je zPQJyNXjO)B(%ifplw|ars6{xU+~>ts07#V^tzm3>Mj(o9<{?{02_#if6lUQ|A@^(qD3(dgCqMk73p zfJH+ihHsHx&L3V5+x3bVfn$W{KXD_evmD#>Gl|*&fU>Iu2(inITK4qakGA!k_DoCoXV*=IUXkUD5 z(e@hz!Y*`9Tm;&MB`uYubqq9aTL6j8~2;cbs6kHZAqRwKHP)v|EBdNMP|#mCn~q7tYPrNT*-_o_$=0Z1wR!^>zNm8}|A0F1m|l6{ z`m1;%Y)$s(Q6Y7OIyK$EIREj+M6^RiUtZLQf#$Upi{vr=CqzuTQt|s>Z z-kLTU#d_0}^r-9`7z3-T6R((TsgcEqt59;ds-TC|7>E%#8?x!CfE`RpJ@OT(@=V3ogAD_=Z zK8-Ig)63Jef2oeUasM(M_7}EKkJHQZ<>6`k_&j`kIFk*%>_;N}<6-{hdHiuVKJ3rm zKl{pP#|g)sYl>HVDP6&AHR_7VjXZwT1zgk4U61^6C7j>%dq!Zriolcc67)-hJ<4{K zCXw8alX_`JV}@O5XBCZKa7oUt!H?vEKyvmVyRWpUH^brMd=T`=0)Z=(Y_Xw0zcAo4 zvWnEMQV?h+QXxs>LE+`n`t~j>f%H6cILRRE*U=ZO5e-MzbRhE~($&-9{BpYd#?$Gy zAI|;c!Y%?LK)67La0H*rU`t02kd)LH94Qd2q|iT0*?N^GJVb1<*+ge&&xWQH%1E(o zMNT~pBPaD9*?obBz7p8jM+{#vWD+5}eu!|v&Og*kV+%m`{+_r~CP1 zM_J^tSMo{~>ZQrNn>Ih5`(bgv>RxTOcU^xgYNLhvOj@}hjmIa!>KWG}i+me0M-SO` zxJQTPS8*o0P~_B|yd2TKw_I)(%U=ARY`A>)oQKrqT^DHqs8k}KP0Jyo2MKlx&NNfQ8|Hw92_;vm);A*_lb)G_-}wLa+&Ucet{894{vTBDdM zl#PRrNnRSJJIEuA22 z#|=_w2S7>!9ki5yLHvPtsFREv_yTKYASy9C(4Boj4{c=?tqCP^BrSgDp5|mf%xE${ zn1LGVY|d9noHbglXFH*UiY%3OMs2{Os@+|%kjJ&|YZparHO=zv|Xj?B9W}FNJwN5iQ z2oeT1^bjK2kV3Vlrz)ZcE_Y{kAzDgNf{HAb12PfST7Wr*pa_f%daIB+H2^loX+%Lm zZo1JfG*S0r6i+@nlXGXO#5z%#W>7^S)tx=^6k0(pvXVxJPmLxLU_~Q@r~(o-;Ta(a z;vkgW1R80E32FQMJ~Y`a7aK<80D&jUV%kJDUi=Mbs&}XH`Pk2_{J=e1(yQm8dK%^@C)Y++^rG%yX0arg4dy|n zLdUb$MZO#kyTkt3T;aIepLYAhes_4;``w*Lr(9nofjax(K@xU5hB)Q1em>32-(QBs zZXl;);Fby16ARiC><{Lr%zmgqc;?@qoU`>>%4l75k|k`g+dBBvYO-}=A{(I z1B-zAw!NVAuP8H>wuyMs2w{r(Ezw!~gl~$j7pDqio1k^$cq`%HL3W$Vfv1Z>CQIr4 z;Wi!syQO2wftnYFW0WIjSR`dKyYiJ}n{}>+kwHok5E`OWLlQGw+e|9)S$_GC$l~RQ zU1>|6k51!`rI9xpD{#SVDJ8D-;z~GfT{HD@EH1#;={mAR;py<6JAJzkIxp?m#E=Y2ZGv znvtSi&V94EY3nXPv}6jg?$O}PoNux6Dv8yyYPzavtG1Z#p+rdahFY_t z>k(5Ly5r+0W;Z@a=x*~fH6c$DC)03b0V4TyD&%nbO3TUiYg8aam{r5Yzf zKknsHu^}T1pk8K)1CE!vvHMrG53E2QV-WIYjTFIRW+VimX60WQ0a< z253P04n;xjcxv=QVJg=!!dKH;L^}{@K26N8s;34RX*;fH3Q!yR3bZ;`X5j3mY3Q$b z<%5k%3-`tvM+w2KmZG8rB_*;V&Qe|m4uyx$g0S=}&^kW^)KVKrJ}kgkcI}WLPUiwO zG^x;n2+y7@f=1uT*b>`;S!4n_j)0b`P1oMvY~Q}ReSN#V*{;`Jd$Zkq@$Sv%Z(eyz zKb&X+okRH@nqVtb?668*gmNO70fSGjULqroLa*HC4>PbYs;SAks1uH-aBTtv!$J3)onlD$)3iXiPNkf*xBcS0Agrf0J4}b^n z6OKCJ&9euU>q1nMDH2hSBiYKl@%}^DV0@Yr{RtzEQ%zo#PI}s}i9Hm}j09a@b!|=b zXBg-<@atn{3G`jFSg)#;XBXyeQ*V6D#k|hU7G_C{cDX4auIz_s1#h0vmiLs&q&89W zI;|z=i4?WoU;LU7rv{>g8_#DG>`&+Y;cz^h4#(p@Pw(9ykB8%lLXy_gX*?fKhtoNZ z2mwReXPg z@Mt?32UuQ22YaE)zN1!XDBA2>A5bbEy$n{urLyXF5R+rNkln^gp=iZ{Tqlqddugd2 zidzRS|LUxO7dQOWNz-2S+P5qao>E$eHU|PyAF>IMwh=}#N+UT20G8MkBGf1RIv_~i zt~;0~5)*N!zG-eS-^}3U)e7fo9Fki4pjFYk&bKr?%Z<+FmXDe&p~DT|B6>)wNPpCD zbYO#t5gw=_1Sy;tFP8&EU;e2J3V4uW zxEGyTa2&F&$NZ~0A#4y9L>7`Bd}6+E4x|nST*mnPqW#px6yl?zw7pWn_LiihFsy_) z%|r)u>1A@t5D*45wo-c8y(yKrED>vlctY#)_5Ix!?_S^B64b<f1%%6pYI5<6?ADGDUqIuFmHq zttR62n2B(ji)J{Dxs43OPW7Etz(yPlM&mY~Q!FYvp2>+M3r@vik6hI8%3cLELy2;z zKG}~Px~uY0NWE28ZA_kR5D;nsPK?tDEu+BZ*_C5SmILs+%wZ9mSd2rP>6(DZ5cQIZ zx`Yf}6dXs<;|pL|2Y__&{_f_@>$_&@E9?P{NBi~3dzvsfp+=qBgALRG6`ful3XpB2 zEqfLOl;bpzBnYUKnMiFJ)y|Ntx6!p#s8iyh5Q+e%3&GR&A(N{`uhe&gLq1rsJHO}_ zPhiTD6|(v0<%jdb^6vloxcwK0^B)gq%&xu>Fn%Y)g<7l*5|PTSaTi`nWnFnH8@Bx` zr13F=5ppOeIFu{s*w_pOXTlXbUaH&M_5I!U&FkBZFV#so7}K5X(;l+RRyA}eV17ZP~rtc4x;@;9vM?Q`PW%NUpD-kA+_Z4(@Y z7Q7|4xSZ&ifqguuepRlDw=x`t=kR2hmd;gruhpq;J0={s12b7tBQasEoLKXr4H&v6 zpRLwZ20|4?fK{ggQCin@%Fw^u-frK&ef8%4RujZ2*Z{~OsMQ(e#phLnSi~0me%VhH z!ewPjitmQw31222u8H9eFGpVhm!y~4 z%P?MuJEVq?o4k0XslCd6UR9TFuHVcTFAtdOjpSSnasXCl8sji*`A8?6giV>iHRyVqMykEX%e0Ikj=9F$T~E(zsjS636=pele=g~6|QqE+`_qsIVH`5Qa;f){mse}huWX40= zt9%YRYA9D^(1X;D+JajKrQG-iYgzx%`P5J_!?adS&Sswg1L=Lx6l+8~0hfLGD~0}C zkA(;rC2GC!3PDO_D=niMf$(!5h8AX{Hi|&ztTct50?a-iJuIe?5CduY3=}hf>0nn2 znFsP~kOEt#CuQ;9j;OEOps=AGlvXt0j0pbgkg^?m{5x6A)s?bnm6wWJZxhk;?=EaO zzi63N=~=*755dl7rm11vShqqH@h%9Qzxw67uin4Cz1h-mnSL+cTpEi>JrFS)8OzF4 zCJ7wb4cLK*7S0NV+E$|2JkU;A<+PaSDw@ZlV~1#tzEp&+f-4)WiVctfcg%SM9YR@b zk06O*S?~f=kfyoTlsNs^E~~tXZ-LU#FyB~JpdO9!G?cv$Q@ zk1~}W=#Zdug2a)5AKUWDL)P+i0iwQX5$@)QQ3MlqZfLj0wk)O$}4{PG5jnU zyy0VVso$%15nzQ{#HBX?55!NteE%i!X}gJ*gqJ2C*&AKY=36eK^b%Xq8RM#DsX$VM?~73FixzF-B7rmDRab441t zT%1NvAq>v;UG@@1hi6H(IzbYD#3ATezpemPa&l58tVPE?DoMD|%Y@d$bG z(h_5_BuGD8hV=*kBZb#dUHkP(_GfkurxP&&zhltWTU0=K_^39JCpm@(x6njpM=S(F zP2PQt8JscP->ko4MsR-z-O5_52piKRxZmaH)@{6Y54i@`L86_t!OBKCWb6 zuz~!5L3fUkf=~@+SVYa(NP0>6g|z<~xRFGEXVP-Nt_Rn>;|h9D2a<>YD%E<#gPkaQ9w>4Mbs;8UKO+d(yh2HT%1np`>ch2hDHyI0AspIX4)7^D zhSOb#1fQ-+VMOISTo%)Kx(p{2uw3=4?nX;`kB_IZ*~&a*qZtIG7S6#)M$k3B0Dyqv zEy1pro{tA62dmYRnr?qMKJRwBm&4&W9**A43;LlY&`%E-)t%oJ(moqvA-5V?`VR)GS$C*W{pN$RZLz2Suhug9?_YoU?iCT(#d1Cb z9B*iyToAC|*ethj@$Xz`;lzk7-4hL)1E31{gMve-T-mb`O7p=WUScnS zf4op~T2t;w4Sc1`!g~&NsGKKP2+V~zV3BV&Zj;U!Im9V`!xbe8388uJeSWU!VM5W9 z2`O9PjjC#%Pej%WsK|#D0>ID(!qMg$@pVx(Z^9&6_O&RUAO%Xijn04#50ZfjM$k*O z0QGVJuZb+z*sKUtX)GNCLCXa^G9wBZ*HrE5`o?4$(O+o>pBlNYun;5MwqJkt_Wu2w zdm@~DN8~maC%fohEv3XC4x+YbHH@&qGx)K2(X3L*oSYysThMZ(TXATSY}yO-J0WsaA$@iEf+4t9ARXJv8SZ-}citZ~9-n+x*kl-GB4C z{qA-1UoI~uy66qmIDqahZ%XB4*?o@Ojhlx*VM+yj$bceX8L3+VK*Z5?Z6frW`#Ypi zWiCsp;h<6(`M1r@dh_=6t9P&No4l!9;_B3At{0S157fefL}5Thsb5gXN!44B8k54Q zIDpXIIW)bLEjgS?s3?Nc8RPq~wq?7jyXCQ8jtr}fuR_8<#zl3`6NUXqKje%0K|>)3 zHKFRDmd@%xL78Nrs>lms52>jSCWQ&|)`T(hHoI70d{BESvpa2dNjJE}MOa+Hv9Rb7}5 zUF$??r141qw>(v4UR_Ih7D3E=Nsg)ciCb;}pT7(b;r7srQkllrz>x8t>02EZZ$Pz8vjsjOsOmZqR zbh$U!1{^Yl8?{J1JK@Q%0JzYb`;K!GBd64X*S9r+4MRL{ecKm#*eygvlCj zSz)3!dZV$}Xl<7gQ%*RFnvm|bp8eW2!A#BgIz}K}q~{O}g_Q^p!42Q#Tat^Q!-3Aj z;`!*^mQSbgkmfcnyomyK;7~ygM=p9tVC4pp9L0@+*TLk$I$B;bEP_Z;870LU#EMn; z0xx0WVsb=sV_@F?;MX|sra5ixlWiO1{ee)?t z)Hzk5P*=5Oks{!BAPcYvtZPC`lb47G<#~0GcukXWh))(3VUlZdgz2)%d!ra6dVXjs zH;Ss3*mpzwTsm0(P>TmtId?8hmGVz}Y>Vpn2W8Pr3N6d|PG(X}nsV7gDEhHSghJWC z1e4%5cQ>EEf8F)I(TEC%?kjRYWK~#o9i?7BG9RA=SXo@1Rm~dJ>)k>CFpVlDTiPJs zZgIJ54x82RW_@|nFJ5)yeRFu%pWgT9*PF%bzPj(G?Q&NH#xgIB+bqU*d2XxyZF9J5PB-oGesy@;&+j%9+gJVNuAASkFYo&E zn|^rH4fmVowp;b>szo7n)hsTIPbG71PVby6Xz{C^GQLs9;4$$J&e$o+gg`1QM8&snPw3Ou>2QWJW zRdKQyUP2l{idH19zzYPx2fQ9ali<~=y1F=ER8G}EVHH5Epx|*Pz_9-nUab0yh;-`s z4$T!mcm*cbga7X>@f7SY2T3dsSiXcL|2nVV9 z_1(>9Z(n`+<`o^l5?Ruj*q5~b!AUcIWsY(n!mbSnDb5T4t$amIN10~w^=`(-cM~!_aaol=nZk|+@9KCu znhqGB=VeP5P=Cxg@a`kQzErU_#(>P(Izv@v+gUJ4&ygV!z&GWLyv`B;r9Aak6%cDO z5d-JRs8zXMMr!5cAcHkTl6WwdH~^+qRvv6(TTvH(QA7SS!y=PfF;K-=& z?$UY@y|XZCwTT0fd1DD!htuHuHJ2+U4WORJ5mVwRe6f!z8@>KY;YE5e0vqmPTg9n7 zEAAX{@(zP(00z!Yf`pHDix%Wsih7iL)CQKX2rm7qoNI%>D$kEWk?;#ZHTvc+h2igt zSZ$TCguW=yM-a*a2r7HC}}xzvKS3g6#4j< z+tSW0kkJtH%JeXbZ7Tx-a$iW;qA5l#7723pRkd9yQcFGk$|}Hx<|m<0;P7FApgD+F zX4iSM1QlL|Vo5$kKk7qN1TuozT)-(^IE=B!2luP1&M8u&el$N|ZMt8?Q~vDO$l8UE zrq+@!6^OW~D8|%iiWCZzyN~yPHJC)@N^S~l42|FrAG^^Dx{xB}MPtE7yTBqv_<(jw zVy*2=+BjIPqx!~F$0+=@hyw3>Jjmg z1ve%K9Y+Q#qlBs}v0GMMo-Su*07f>y5Q#x1pC0VTn4sx_3rd+*$eBD zv-qh?-?4MBgf7(N;NntVB_ip>DJd*=Rf4D{ijD8tnr#ZylN808>9gYJNLS08*5u5V z=1{cD50#7a;8{SM*~BW2@thlkgz~10cKtkvjK(U}Q1j@A~A#0O@G9D>n>9Ci zrchrT!sSaDP+Q`*$A-TB(qfZd9iXUJRKd<)GPnp=T6+WmyBuDPKHley={PJO572}D;?kzB!D`NSJu+9=-8Mhag z0P$=jf+zUY5A+Ed$eqSYR=8Z^`R`ucGsd)C1DAHF2qA~;s2Xp%DN`abcjDI$1Bt6G)$8eWqJfe)l8RFm7G9wrc>ZEGz`{u!n?q+q zo=OD_-}m~xa!UY$*zIN269MNj7sH7?GF~egD3ViQsPq9lRVuQ~Z`_ai3>_H{YN9$j zY$=Z-(}Pr%+(xP>A6U2Hm>#M^qd#eCA;hsjzQyY+yy+)knLQ5~II5H#;`9(odq!NH zE$!;cS31DeG})uPBB+5&YoQEU#PJ*ge1jmQbeGuNbv7LkDt)?j4blWSQP!C z3qAmaF^{5>@Xs$MI-E}4rohzxbf!hAAq0ZT&}9oHhD_+B`-w?z({9u3RibwMTclpUXEX$neI6Q0l;dm{^rm+9 z3MA^rIEVcz497f%3Fe~)EcHPxTQO5WVODh5hmaToMu{Rt3E2poQ(3ushmio@EG%EN z22)oV<@I{M6zriq`HfS`x*dx$+?0^C>DTT9tF%$Gu$fp!c8VFCP?4w5SH>qqqBzS; zxLlgSfY3?QRiZ5Mk)7}amhc1w08K!$zl8V&m}3N>zseZp7N=QU%gVHpS^1X;pO7&u zV+ftCu+7(pAO&Z#v(~8!~L9jyB;(E*NOoGK4T!S}wZl+X-ArgBUnm zYnRq#9HK3_^hA`jB4faT2(>g#Six^1sv3&}(N=J|#Q)?(Cy<7s*{e$HAWLaEl0~Uq z<)s1I?&ix`n3O7LcEXc`f_og=3;107X0}CU4%CwjsaRVp00`q8VgZ07>~-Z$-%>6c zr%h4{FG_F#C~_8o=pbTNP{HXwIwtxYvf6YS#h}_0MGw(lG7D$Xb;v^)a*Du_+<6J8 z<*EaT>_7^xST-*%6B{TQN8M^}_%4}DmsDEbR6_|PG9j#T<-e#YO#!7y5>BteKTXn! z-)E-AP>`F=o$5NBs*J`1!&dQuLK&GW&N7H9}I!ZaH@ryzvsTxCy$v`~ zplPW11-(DPsKy|s4ImZ;N`T*J8jT304Iu$FNeYh$2qixG4qhbj&N5Aw5=o*^e*98G zsJ4%QC@pKx{dy0j=JVL{s31EK5|hN`M+VhJc&3KVDut_ZWX}31Mnw5RBx=!bEE$k+ zhf5cVx`k~?e!-jgjxL>OLEdg9Lh8%HoN55Cv?7jd={-z&$YED2*J+tt(&rsx=tVJ( z+7vA;DZQk9BOAcFRtL8axz=E0Cnj0!sb4h& zquPerT)59pj9&T9vMv|%MtYkUl|_?rLOyz?9XqC%6ObY}Xgmk$3mAP2KD^*xBWb8l zi6RF=4~*o~0Q@vu248;~1bJf-yX>3v6MVf3$f>{D9bNJwe?`UKq2nw3=Rf|FKOM*M z%P-%5TDs9rY>OEz|XMH)~FBT<7A{cocx7wnD zwA6)t8>X??flRh4d5b*;AMISzawKwokSg#KnSmI?D)#f-e4{hKzy)E(DJKG`jct@e zR;5+c8*<7N3^WX3ZKhR#vNG~IWrA7#C|WV)z`xGE7Ofg4U(i=XwLy61pN&Qi^3paL zTCU3y7Ur#x#dKmD`y&CU!#GUq!Xkh(SrHJ=ln)u`U2RSGruR8?XVmKtj*4HJB+m54WgNjRLK zY5Fg7tW2RqL(|eF90O>kjvHWb|_xy$lcxD9r| zl{)!2;&_VHZeJdp(} z@X>IwgLx+mYiO~p9O*Q)v{T2iP8B3JqA{FmCDlU1bP*LprL-t2l-Ug~4SN#S}V9qXOsGqGLy^<unH)${@&G{j?I+LprtgCp?`X&Ul03 ztaL@(U$F`#f3}x^b1jLeItnQOQal_BVv{HY8{yWju!MQ_Rd|B$3_fUxU!-4|VSq<3 z$=0@j`9uhZzKRL;!^g*$mtCH!001m7`VFCzfG8{V$iPE0g(vfkUxK$VOPH4h*z`5F zH(o5|DO{x_juAo6^=_Zj{SjSO@nU;Pj11Cpv5_`siW+gO5hY;kmnIyKWtM?tYF;ASj{*LjhZrgD7E^@~DAb@9p#?#?fnWe93^&c$Ky^8-*r7u!hJm1QV## z-MSi111x3DDLRcE<9|hSDkRiGhQ>jiL;)nKG5#Vuc47P{&EzZlsla4$kl+wgehHfB z#P-rivZJj-P|(U3yp$^^qzYVIhhLG)4LoROL!cenv(roS%7`N&WeEd?B!6W|-mfkZ zN!bxVuGL7=yDJyrEfNPq7UkFLo^m2z>TMuxUn>+ZpjiB9TLNL;r*djcea!&_Q{W9A z1V%775|b>yY%P&wm{8QPBu!CZb% z!nGJgwOsT{Ss0c#ak@uw`i6963Y&&d!G}m$bE0h`mxWY80hLN8J{f6JC1$t@OO&MB zrB2c=vkPmz%*Z^AQ{a5J;Kt`JK-Er*I*f}E zl;oFL1{gQJ%l+(-64Reml6?4&idBsofVz4_7Q(bOu5?dN&o9J(cmhg=gj^`eXcRA1 zTU!K(kql9UE2^IfI!;@p5o&ZQ22%#S^b-!^HT=W5Trunu-z|xw#{gmizYhR0(l5I$N-7gZ5Z9hg-lX{AWL*N0e#pa8 zO;XUdtFHB#+nFinG=jskKagyEe2wt%T;!23!BX|)*rNEn_L4IRRaM`4-W8c5Pue=% z2!_72HG$I{Lp~CdQ6C_7ryx-9$LF1fWnUbj#(#W`2JES`qPOClv{8BS9SG5dedYnZ znA8U#U(lR%7jM>|)BQhjopnk05~FpXm3I+p0}2fXLS8vBW}>K)T|1x>9CC}6Lzgo) z&|N&|5dt)jk^Mhmy4a zgw#5Lm(|p?&AK6ZGv?Ad<&uo3&w)1HQ|L|#qEaGS7*vn)88O8yOT|euHp6-Cc;R9bix?i zgOhKf7ntl@Qm*Ht53v}|gJT4(#OfGuoiw17qLzX2L^^Y`sBYRtx2O+iM-TA=sDsMr zb@&8+7#I;5nY#tyjGa85+RH`eqpu?w*eC#EA<{ws)KKOk%+(Q413KdYCV;r-RE=Kz zsVDl>)D``Q^m*m-;WRQfO!MF!p17^Ac?D~(Pl=1_QPu|!gLiNWWflx&MoabRyyFH#xR3@Vo zKl^S&Fr*;-T~bq)A8+)H*@a19eng#nJ?V^1trd!|CLdRiEN3!+?~z z4m5*NmUVd##cEg6r>z+;m($62+KP`)`iHoHDUKAS*@zmBWS6?)guuAYOeua+2&vV8 zhp5R0E$vrg0;DkJFy$}*pmoO{pa#T%B*CKXpW*ro+kX z$U$X^WchUx=9?55F!UlOoCrZ}-vVItH8$z>v|$q?N!I39Ufp<9SEu1b136G|xSg^LZDp8p`8?O@ z8m28&b$k+eG@Qr$dP9jqS>-myP@g`*l*T5pjxun_f9XrWh@ZGXx?3JNdXg zi~2*9n8q|G^{P~HBZ$Dcjb4XU>#}WIxsUQmy(yfA@yM_|jw@eH!AF@qtEhM$UJK#7 znn(K_bn~67q##0|(@0_w1L(_q z_j0-Yc?bEbo3P{YRCA`O2!RI5um|CNBZ@07# zbI3-S0>GSnM24#fvKPLh5sMg5iW1qAJ!uq3hwx~MQdMn@6paQ~6{w2cF2@xL>3DMUN$72yC;3599hxR4Ac z|I-9kaW(O{=n>#~esg~x1fZB06_F%*3#F(cHn0G%WcYUNz#6b>9&7Rs*PfjzWMfx* zJhn|f(s~|x*)^^9RAos}z${#)!}xNl_UHP${q*rXzA!VGrk8R2co=u5%g5d2;}a=!bvQZ$fQ#qD^zbr0 zzD(3U0k9uG?9b1~`Q^OWooA4IzaRJK@#7If(nYE+r_J>`lPU)qzx>Jkr$TpRRNH1B zc@@#IcrlC@Mu6w%-Tvsp2}Lw<`k~Hknv1`EW@NB<;+LOtAzk7W+j7zp=xYw5^&C5k zdf2F7qd)!1_-*%cKUSVpymUB7k)uSJlZZAk5T**Er0`X{Y=OYbeT-G8>K<{HXQL87h!HN`kE9FjbLWD2+R!6SJ(Ex4Ck1uxWL{?>A{*f^}7yZS9<<|M1&oK4b%KTvW(RX>D;vD02 zJ`H&(%voyijAy`{227+-SxMpCo6qAZV9pwuARK-A;^{p2^c}w7hoG9(lG#)BWgS_h z_HdO}3WSdA(V;EjmxDNeDY)vy7AZ4#0Vf$!0airYh_M(?Sb2@E)lKk-^h!LaMIwiV zN%`&9GVP&GdyF@=g5WyB+XTqK?qGAB2sx%j!f8v!EAmS-RWD?C_-r~yWnZ`i; zJ4>^Lv_u8g$Y~Tk6cz=tEP9hNC^#yO1E_nt1DBq_&~6g42YU8Yer;5~t7RVCjSFcp zr&jSt2_(E%K17ax&603RiRUos0eG&QsPo9`#YO-`?Q9UE_3Qux3CXd(m)1#)-7Uv9 zh%#*A^T+8VL|ugn03FID?9d}o^-Xi9F_yeSh-ADR4!gct9f!-=D5iZ?f*aLL2}2TY zIv}SWkcef|qWk!_h$7{Dp-1?rU!$ZVHqi;}k-47-O*24fu880RVrwklMYAIb^tli9 z`Q$40G$M}uggAR1iTKlzzISnn2{tGkraDi~n-5?^YVgEeReP)pC(7tgWVkZRpVK6P z;EA6of<_uFzM$RWSmQYU`0()I@$ujTR)b6Qss~_=bYZA~Z|4^rhALptCI14Ct2&{i z)*Q!w`7tN}#vd%$Vf<5D;`hfsV!hdkNrIH4XAx0hUGVvXk&@A5Bw-IOs4v4w7z6+or$%G{lOj65`s5N9%zbem>p6l&uN3_>leUu{q zq*+k&+3}`jvSg*)scB`R?=m*XfFylfoWE)?5|9*WA{7j2STMR2Dd5+lPfA7%eLyvb zK{$*6pec>6o{?NO26JwuWDX^PFaOk|b6ra(6EM1Q{w-bDrqpwfR!9waX~C{axcXG0 z9q^G=7KD~8SbFJxPQz0+gpwpaqRCRV5lb&%Leh$Ha>#3_TEdv@#KS|hGFVEuc`a+vhTW;BaPCy zM98%DMCkSEa(&lDLmxkVA>M%sbBH)sGctK6oOvPb(x5DS3C74=)t_~X-@0AB>X*0M z`hL5*yJ2Vb>TdPs^=iFY_S@BZ+jO_9o13QZn|{0K*|}Y=@0xDAY&Oeov+6dB{&QRYRSZt@$FyjhfLqmEE7^MqR))n!3~#T zfJ9kvNA-%in4Lm@%8OHUF3$=s7cJV!S{}kOpdF4!b{UP0g?1pk$Ch4%PWnF#cF@JL z?@*gF{-vonL>$ak^@VwfL%BwU2_P4Jx3Ry%mN!L{`C>7SDf5X#?C*BZB~q6Y28mYJ z9*)D}YYCqE2420{Za{oF9e{_1F7+l1T+$V3)!$me#rGmx$upEH|=HX*@i{k z`ZAby82ZzptLhJJLkx2P&9lco#0jMAczJCG`SUbZ!+Ev1DpP;(Ufi4$a|OBH4V9U) zvnHau?Fmn9+aL&picWCC(h)dNM$)B0d)TqmihmkMwyzp|e0gCH=3S*$qfWbh_C47H zN>{OSzq}53@M0&`yf7&#zU_L`O(GrFI6PV|n3ui|Ob`3a^m$I5+m(d2zlheeU$7Hosx; z9?5v>)3oI9jGuVgCJ&}ANu~WyzmWkv*dSrBSo;WwSYPbkDqmcN104wnLk~atJNs^m z*p?dO7EK59?0SZCv3P!b1VSC+n7U#@l1IXWIw_~$Cg%(6ZaKzwrh#Y-9!iO{{H2A8 zB(TuHuO@UV9n5TRZ*Nc+KyU`|{^$+Kg4zM6+ncr5>^D9q-%Bc&zHY5ta{np#(6P)Y zan*;9&m#e`{mDObGIdhow(hfjtbIE{TJpKV+H$G^I{?-xJ$vVZ?-@%G*N z{&snH+uUqcZ@%c?eYLrN-@kp=-Sd6l-o5MY-ZtB}{oR|@_D%chU4Q$oxqnYp_xj!X z^}FuPXWgs!U3;1D?pCjFSFc|+Z#RqgubXwfxLs9mH_L6i_=g_{=-U%DQE^)H4MbMK zBmKy15Cc+QoStAq2fZp^`wEB`C+>N~@$qy%oQ}sM8jH?i@{#Ebs8M*Vvsw|?5L&CN zCC!Gyojj&Y`vFVqRlm{A?Et>$T<8QBelZY-FVFj|io=gy?W&wBJaWraN&b9-Q+48C zt~T2(htp|~U637Ig`by`Zw4;D;}yPOR};D~zZBWO70K$teh;jFw~-dK?-+OtA^6I{D8_%m;S{sCRlfb z7%&8$zB!!iSJs1qRu>OtyATx>0UyS_Et9MclL^H}KOtfRhxFdyLQ+MXim}tSoYts~ zs(s_t_(Un4bjeJY`7l~s5h;<9`0hLOeQf|c<|R~}rv)?J%g2~pWWrY!m>rKk6sqV;lG-`s2n>Jh-o-RV?N zi>q2}H!V=^@-K5VlKEyy(nf*jhOJT&^T)?W^DsJ3(aW_B)UCfPU2V5FV-5~gK%Mup zd>W6k1mfLWhS#J)CO}S>O(5)Y5r+-Hh$5O$=7$cehQ*G!x8 z^G1-l?HMnl3CrOD7W~o*GHESt5$R~SyF%)NwkZ*)UT-!83;fl2bXEWOWn!^8Rc;q>&w@!^}}(=U#U zZ{(eHDuVg`G(A3zr?dUds(QMr@^)V38z3hXO0>?GUE2gCUsQ9Et?1&(o zNW1`~p9z+@D2$CP2^3{EW==zv2cwb{-?pJIo-fR)&^wsW#?m{+E0=?Y^b{t_M*=#T zsq9A>&s}&)coI(n_43WDS3tDOB`ncj z81c^Mu{0gWv1^vh4b}OQUg|E>8 z&@)KX65PjWqBnyLcqbO-(E|xGY%s%Zo8>T!KUvm~$ML)8>3Mhg`p5CEp*yFqTSmBa?MW!_}Kl4ZNT>N9Hvd(lHI` ztReFc@8$Ug^`m)oPPlg>7!L)%CYPYzLp(sN+nWvb zmorH*c8TXDtth~{wLYHKQ3x)f1Br|u4x^(5#`WQD=fN}fyVK?K%lx5j$K-Xi1`iw) z6O*zf_QyBI^AP}w009@^fd@#19pm1%wo4F+Mw_M^0?Z(`KOYZx`gvThJNfWysGtFQ zmz!RxBY0)w4eDLKdxS%#OnYSx>!VeG?9Iss}V z>x*hKdO?RYM6T_%0MPC-cbR=L9u0(l?1ZbPd=3U=A|yiN<_D8#5j! zIxStSlGf-A^0TM<)KKO_^w|TGIv3Y;No7`eQe!1j~qAyLJ(@t5W5T$U}^UYve)vFbnaHX!EKQaT5L*FV1NrjWtK}O+)@Coe3dNfI2hIoSJd3y zZj2G^+qDFD&MI@%I;Zl5dIZC)3}^;Bw)kST9A+dCTs;+f@$}%?x36Dq?{9D3 z-rv4`b$kEn_Rakr^_z9a*SEWkPXGBspCEkG&99oNXQ-7K4Nzu&s2@fcJv@KR0F1{F zMYOsfc4c1aKxN!f-MXgs#6kUm>#2gho12@rZ{OgKSV7-Gd8k3_*5^?V&`WG>7qrLP zJ@}&pHOKPEsowDhYvWIh-i&&V8uou19Cv*codOvtDXu(!pR#_+4lJc&+4uTFG zA_K@QNAFVsF@Vt`H4air?ic5Q9M)H});esLoq|w@qeX;^Mj(`I*1l~cqXfH%QN*&C zCj4q7c#bQDaVa$6*m$TdZ0lC<01;o?K}brJ zMtB3YEC{If>~iDbQA9F%aI%LxGiwH%#}CzbAhBm>I8luC>zN$ZFd z+6lc{E^JtvtMh4GH{QTW3rI1?XLd?G!G*9>hBAgNXgg}@Lv|oTLabg)A3}CElKq5X z%0LEL6pfsrd8zitgN|p4WsC*Rlip~JtW@$o1V)z#qwJi|^Wk7(3uYzPm{5@Ww^h~K40_n6x%Zp5S za+)0vmmCKdG9Qkwq0Q_UY8q1EOCdtV2jr2BJf{XKw6lO8JBy)3?$8ncuiXP>|O>es${|Ni}Ud%NEBdSODiDHsrBX%5UBF*pnwqJMKj!oz2?9`LEy<%REtpu$Nk4}AW$iM~Q+mpv_riE#s~GSJ1Z69;L6T-b;oy0nX~w2Wz} zp><$E4y>(l5<1AB)9QGoPpgioBBq32>k2qO)Y_rsLb$?`f1;HGnGH|;30IbT*mWcb z&ki!8%F1?e3*(~X>;|a=(y?DNz&Qk!f?|1yMis<;kfz8wO3-HrhasD!*9H$|8eJZ* z?I=j!)D41029VY-MwJBNLSVifi7-GmEEEWpp8r;5k^)ez7)h`V$z^ppdJ8)tQeaK^ ziLvyI(jcO6F#1}wFdqhuex7F~F6>TcibMDsmJ;83i zz;3Rkv;R}5cor5kFp2doigr+27CLkb{_+47uNoyVd6Gh<5Y(70aR?@-6j>fQK@#2A z=YWRs@-TVh1<2j%fnhXS$PkcDqzZ{pTHC&u9lekS;gjGPWs6;9YcZVjlTxEi!NR{r z^3Z?zFGn;9G)L)*fErslPOqgR!>@x`p(-{1#cs!iW3v18dj0;h&%XNAufF{J^H*<} zb-W_?pC`I{$&~*?1~Z_$psR{E|D)g)`cHGdTGFOXqEN|cubPQ7$`rMQsQt5 z4)DcOTsux%@$<1eRMV?<^;thS47f6?G+o;NN0x$Fh7mzzK0j#d_TPzPr_PE;1=5&S%(Yb;VdFZG^a|Gmk&*0O4cdMPytH1 zg0n!P;V=%e2q}geWmHn|s&Crlgc2n(5)y1BQPn?uc*1gSHK(NuQ z%eQy88DPA29xh`&KZB8-CNon&)BNRJ_>DuOeBEI6Cjs%12 zb9_KFn*u^TXTZT5Ju7%HvojGEI7Au;lxR=uUFO~8^2hu0A0DRvW;gt^$J77k!|C^b zJpSVkhky2T{-fjcub)ppAM2kVE_ZGBaU@k*dePfuaU4|Ec<~)|e3>hpC-&>ZSd;&4 z7Ic8skTLh@OF0*Pzk1U*d~f>Z_n!_1wWNEbih86AR`L$tm{S{}Ja4bZ+PV$kc2fBT zdg*eS+Cwx8GgA937kWx;LX~Pk=~#n81csvi0j|idQaRLJbX@SOJ_6H(kV{p_f96KrYLAAv> zOR>_}A>ui7Bv_?^q5}qV3ahofjFrJhsj9m1d2N=KUgy{&gGro81xGBq8%qxY6@PIDDUKXtr~ zZv2_bl=0$KN~(|`(e%K!ty9X!heuoClT>*U2tm{*2|bK}wq%Up!R;N7A)^U^%{c)3 zk1MevNnevlLKT0>PAKLt>hojQU2is&don~#>+W>i%qn#hCXpx>jPhX<6%-}u$)ZZ~ z=h?u^Wxso-gdPM76nc^jZWg%}W>LSKW+#qGUtQ-g#Q6g<8u(5wv4ip2m5MWH7&{O< zx-KBF*)|P_4h8;%BU6d%ZG^N_5q^+eY3aENkd7wz7V2f-dfFc$gT(fhB+sT3UQVXE z*UU$e0C9BAmXu{AT)P^Vvo91rnbvzYrXp>LxJ*cop6>Fd zS@63yGcSf}-c^f-^Yk#+Kb+^Udf%ak{vJ-#?(9`U=gZ}U@y-{oVHiB6d8A~V&v7|4 z%G?5M1bd~0VqM=X>f@#Qr%y-i;#^L}zzm**G$V1bUJy@L9m7Wpi#YteXvT$GW`N_O z_12CkmdHYM@q&J@`pkJci0Hh0?9n>E_Du)&WMI1a6`rCcbGxx#4sPqQ@(|>6)tFN+ zSL;NdtlfLB5r~xmBA2>>uC8iqq7-_xU{_x+{()ytWAa7sCUrrNfsv zK+?ny_;hrpfcj5_vsiU$51n1#M+C8ooEE_X8z2T)6rnrUhx6&EH%|juLdFi-GeVf1 z1swFC5N}wqtghDNz_Jo}+>agi!w1u#e%m%)HE44gypV$j37>F>KCy%5<)d~=pQQwx zIY+2elzkkUPb0Lw6ad2DrduaSGB}dXcv_O4h*jZ{4ls_Vq?^VZ4CzZ*C}mWLqNHy} zql8w~yY2F(UDAhS+_YxiAo;Q$nKT=Hl^v0ZRnaoX1V_igXoVWtO1xGq4!!WIBr|R( zv<+PyY;^lo$K=Di3G!%~`r+XLOQA|iTnUqc;jB0<^bJpH)OE$8dB37WOKO}iz1x8< zWC#V=(4gc4o!~%MQ+Kfh==pT(&C1wj9XL@Fz#*8_1iItJ2W<_60#ub=BrU_ZgBcx! zUGGzw54#ssn_EP}9$Wn+s+i})lq4X$@ec#+0H1j42xLF=eg58}h`AV4=(sWrl86n5 z?6$3)mP0V3tf(Z(1SL@q{R^~LiQJ(=1G^WC!wmbe!n8XcttXsh0g678be9%tzgeJ- z64XTk(;!{`?A>y^IK677RWPP7^PIE<)wX$<&OPF`{^CJqfV-~7R75h{(w_FRHatM!2iF);D#o&4r6OF z3(cx(@YmRtk8Qn1D^H~iUA>)u`u;@B@D={V!aRJ=27mz)GPp&BX-rH|hzm4ke?I%5 zgIg2gB$&jQ>GD@!tyg37M>{>TP2fsSEt13eLMyqYlwe1efV5?qrMR5GDnM>sFLD5g zB296TsMSRyiGR-C&=*H4E5Q*Zsq@f)fn-u56&iII<=73p7_uXPR>RFKvB+|@%OsH$UG{aD>aWH6RME)hnAPV?M0;TVFLs=4qia_wGpRMHBzo)5IOnz5VPE!7N# zM1On`tWHMj`tk9JQh?Ni+QyNzzm!A4j-`rBDgc2LKccKiVQ*~Hd_KL;Au9e_y_nl`yl4K_Hi+vP{OV4FP!ffjhQ)nT{4N)~saq4CsT z`8egYjmNSr8VcznhDDkLue4D&!?sM9YlNJ;Iz)j+@RAxT4 z7{`&J4%rUF^cOZ=tO1~_PLQ#`&@d_j1=+h=(rMI(I@fvNt-foQjFu*)XzN;>iy$8O)6-)2GRT-CHFYwg8$LOPhJn zk-g;isw~C;`W3MNuIcav|7WY!fB0^TqQ2P;-wnRU=2&gv09PhR?8fPCxHLA=uOMSm zwOA2Tq$EGSj0I%sP^YY5jcFfsP=Pf_G!4Q)D~pD8-LL9RGjCV*x~aP5yeEs0FHwoj zhe9hbv6!&4?z-(}yZH|y?(xzdLHezWPjj+E3ptve!pdO19^2_NQg{_tZVfXYJ{N_hqC6b zJ-y!GpEVN!l>GGYWZPu%pwZPY3!`f^;W!4OAZT?WrGPqQ;4zsNHO7tfFA<@Kh|b29 z`iv++O{Hkumb-|e82HVrt0b%l{CHI(A1c`vrGeM=$v9_BL!kyIUhj!)7voE+#8RN6 z*uAF%GNifKVikKE(ujaM2ey7_RG8mFG5JNN6 zrJSRaQ%G%Q6HSuJ1cd$mpc4|)S3a;@UhOhUUbNm;lO8Q9KH0<6Uu-*$R*e5xuy&rZ zSuNhK+c(?g>uq_7<-DOg){9J!&L@(|0e6yR=p)i{;oNY4BJz7*y9)`ki;No|u~zTT z&Que!V>Y{v9?91$NX4VJ_@gBLK=euPVWuBRtpWj>iOT52%qI}hGY7HtcD4H1z0b#e z+pO-}VDQV1oI%KIvGg3Qpa-EDO82MZNTQ+l zl-``F1;09s4n=uAjmu%bxQuvPMq~=-!-#>d_Z}k=+J_8&n0%_<&GUM-xL+;5KGh$m z71L#AVEE!@d;fHvesUUqeEt5feti1H2F00{TO1Yrlqdp#fn~hLRZYfq{?b{ipJQS%aWbv zK{SHRjE=z-WM#oP?L^8?X}sAm`uK1X%z{It4NyMOuA z)qa>~JXbAb3 z1#h62XtA0YP4?nr5{v>eAglcFZ^ud_1WIb)0X|DFFl}_;E;0eIbji4`89uRNw9E*w zXxnZYy?X-eej+1gW_ZIF`^$JL`>b_RVwa?BV>3TgEZ zzu)UFUNr439R!WOz^5>0!1|# zv?Fe>y0Q#Hi`9C~P0(izn83w9)I{Ba^c5r3~ zNYTK9*VNe=bP)1%69N3dFf{v^UdhWSoOm~7v@_o|!~1^Rcs?C6W+W)&VLu+nnGPs5 zlw-arZ3l;7aXu|FLk&QhM1>hs&>gBESvJOlk^riz3M>@e+BNjij0Cu(7Y;LrYssvZ0>!jiyYEMu^(vb<({-6JwH4tc^7Y@$ePvTbS)yFFf`Yejm64pMDB z*GGmuieU+XFU)Pw4(2n2gqWb$7OrEX2qe)8NNtKHW6-Y;$8qPSm5%f@xQYVn*um66 zUqIPt9)Szkb{Q zWYhoZw)<+^vGdh!_tm=neBInP&52A_Le4-{sNFcporLXcNagdGU=lW?aUH^X`)}KA zVK$@pVknrL4=yv8_wkbicG6@bB7!k}`B`V)^r~C-P2Ds;x~}c&E%_CL0S#8(Lgm?0 zuZ7U1_NSbLnySyYYJO^$|F7>};%n->9c}eV$ZG zn`uY^RX2iCl4cy2{}2gIelV=rCA83r+OSSDBRdX53nb9$5OQ)Y3UiIzjBW1~n+(Yt zEV}l-a88SF4|~t?dd_RWCuj*jBnn=(;%ZOC#0$@pC-2e;g%Qj>%#!tP<)Xo()1mok zKjHMaknT5ot-m|t<@@#K3G;~{OXCdL?PX+ zFeE}D(#Z^h0vgBxC`_qWn>D7FR5Tz$C_06OdnP~}$O3=JE8qNJ4B_oXdhmcLA|d~q?baT`UL^9Y zbPMEK zilHssAUg_?4GSqkn}i?lK0zgo&px=2!JkiK%NTWy{8F-k$ih$}OpdHcQMmRNoVz4Q3ifQJneszD-yt-*_dv6xoY@6Hd>W=aaZR-sYWoB|@6nYuTqa4waoiA!q z7cva%h6mRi_54+Lsal^x=gHR<+L>29zChzK3yp>u1y(RG(DcyjnP{8^G;4phZrQo- zz14{P%Q#urH@Rt_9Yz{-O;PCDVt01cm8f^uQ!ju2@cRQ!sSA?A{BmW)tfKgrLEhLA zr83&k2N!hprn3PbCK+~-GB4E^8VxFVmiXED%GDQC_W=jVg{OP#y$K{PLCsFmL>0@k4vQw_y7QR>eJ{WK$2l- zC*4&La=PT!kZ}zG1g_4ZA?ClBqG@|jI_-ci(;tS1^GKKi#k4HvbgzAl500( zjLYXFFaQ?&MhkW|P(qXR5ll4!J^N&c!koso2Z5RWbmF*p7&aybW7>i#Kl!@2?w$a@ z{Nuye}eE%Q8$EgP}%2UrR9i*yGJ~W+4+{GumxxzR&ONNKb zbQp+MB%(^hAEk1~fg33lq2y9F%*?W<|DtDy7W7B>LA^=s#Uv`BU9gf04&cmE!xbl% zYq9y~Y{2V(>~%DGdBIC*UigVG_;Oa+)4RE)})3g>E!Y#q#<=ohs|4~821koy#?g%guO-P0JsFmO6E zV)_&Y0U|luqAexVR3u+igq2jEPo8!HEB)2$R?!YQys<#L6GLrS*XyNe6zr&1r(?>x z{A=%SH6X-%(wbLHp3WD(WQDsETZX3j$aa{Y_veqh;lu9yxC}D+!IH7p2ov9#Y4{qrg8RsH{82azUrE8Ja zRvS>gyeX*z(k|&~s2k>C;BUSn5-+xmK)5KGC=qA9$?Zr4PgRl?mxwx4Bue)6*X@ES z0>N?7)&Jt*1RliK;>!kxLFF2+1iX+5KU!aoZ8bJXWA+V~L_{Gm0&uSAUkz10@eOUL zdigKoUFx;1m_3LiDls!06F`0b(>3pSKi1M#0WSj^W2yln-l~Uy#j`Kd`E(|&K6~An zob);}QtC0Z7T9^Zi%4+0ZOi$s+G`2NIWvF|QMYo~Wf~-#`aMo=P{5bklEE!o;HXD* zJdYn7FR#LZ0#gK+fD~6?QFJRqgC!7R063p-N!A*Q`-|(9%fn?c5`M@A7TvsDO^ar# zSC>Uwwm3GO+NW#qbxP;jfEUpckT9U3hXXL{7^P1~=NO&+Xf$vJ2Io;p5?rwMbQvVh z)r#DdFPSulW8I8ZGgV7M%Nm6>YpSsIvL#<2khsX8rOD(RnUo3{?d;3d`w?C)mF;w2LnPhJCsg|g8D;=4FZ!8qMOCyh{9PRaQE8v>!~lqT=xRE5av+xtK%R%k zCA7;G?IbCypEi1RnR4>0EVs9Jt2X9GR}27oWIAHoSE@_L_+%V$$^t2(2V1;1-Adms z!Le|-+j+U0RVpP)ga!>{X5m!{FbG=8jqvQjsTXA*hZw*10_N*1fPOX zg?<AVLYhwO!LbcMW=4?uYZ`d77RNc3k$$rpJh71nn?vrw)JwVda_e94~%y? zgq_=!K@C-H*UP{Am)`!Tzx(FD|HbWp@NWGVZ&p9++kg4t;c_}GFXv@F`Lr-IGBj>K z;SW()t9n|rT12v%IW+(Urnro*h)BAppb2dh%j=~t*VB|Pe;&Vc49Wj)_NJ0a_W){0OPRo zNl=6c#D|10$ES(mm_ip=tpSpKCy~(v$Y4mVCONREczI;8)X~^#_)*W&7Y!ed{40n4 zhzga!0iz|jXlkUDN$23gV3pdp#W4gh*MpeJMYX)$ZpgEmww$+~J*OgdTS|Y~+nc8~&m~`o zpk0SQdkb@_)$($J7#*;8`GwZhl8xzZ>L&4GVqDgyi04WVK9CGue2{^2=F=`#7(`+- zWzt-(5X6pQ+TLncCW>4Q;8svlx13IG>3#&zmmRZ12zu+4K}q#reM)HB6y6j7sjx8~ zbt0UR{)c05qq3r?GI0zU>=J@S<#9-RioRUk-rSH|sxf4l<^f#kX=14B&4#ovfs&Y` zhq9AvW|+|C)J4!|5LhgBPcJxh=Z%~cgtDZC0atnO2?79$?qo%Q_>ZPO@fP(|XBRT$ zpN0TLA`fuv0;_rAs~A4F=p?PU&~QAS&W-`ODK$nhfCz6(mE_`2+2ue+sgR7`E3^DL zSEJeHdS;3bI)PdwmB%dUMnyQ*+|&zS$CyE~$g6I}XMdeIlrvnJ*^9Sbb*sfmb%;3D z@rQQs@KYVyG8ejDdIgY(p%BF^{LY_etR)Q1=HT218QDD(ihCzqN zSi&Hns;uEy#VDNtycA>|Be6>hSU}%cR8M0yEY@BrcDZ-Ojd-pb{7$1dFy19U)X0NAO3DGc}G0OoCaCx+NbH znJiH$4lk?q?iHq4_IDvs482ppc%j)}Jd9MHNJ0KeTeTKrfRLVfq=)F=X=Sy0Ua=#j z8hSd7&j);Oeqo655gKEec(3bY)$VtaR3a0=t!vn%!sLr6gPn%+|qPdh+q*rupx@&fgi@|VIbYOeSd%3 zG~2$rAq`rtHoK{R7&i~+cGaTbb<^T&YjteH5F_Z}R{Dh+fG^al7VUOE+JwlU$r*4i zW81F!t}XWp5bDp%O_6f+84|FA;q^i_5bLNZ^#RZDt1=T&vxf>2_r1dK8ekYaNH6>r zSJcJ99`(^wk*%=Uz#;ptIymvn>-^}l??3;nYgQnquScD1N+?M)n}j|w0GVN0SB1F# zq1?DzRqqGmJCK;gcwn9mrxYo!lodyN2qb1J`HfdgP%4UEBOe2)D`I!Ub3QzxwGXjEYPSJI!y6F z>!)FO-XDj-^8_EBpMUuH_;NTp*(oaIqZtei=!pY0TJ$1Y;JQFpZ1QIdoXcWA6xxf> zB}^>;^1IuPsSy)gr^EHlYPnfeO!NC?-7hQV`K@?Gly@~7?o>z+dR>2Ak4D1kct9!a zEJzsERsE24TTP8y=)lp6WMRuoL&%4SUHCCb8HYX0dwtFYaOOAzbi$7;-Md^kn5b>@6*uC5>zM5>q12zSrr!PaNATFR$i#|qUz+8

    XzSr&3s<9Eoyl`|@Nz%fAMcmeGZPoM+lCIAEy6n2ZhDm8_$ zDGD?Yhr?&pMu7}EpM>!#awcgvdq}|3YGwDdPGDh?Hq(k>qoPd)Xr76{=k-?K4Rf@l>mDmUZ;XFozE3eHX4iGzWCzv^yDtRsw zXAl21(;uS##C&q^R@m z!OQ%KIB-dbCb4bmxsTmw)2&JBS94RHPSg1azcqdKG+n+wof+2u%E zCOEtd({WhUt4_}FUPHq;42KON$`;DJShgHo6(KwIs!do@9;j5OaX=`hw}!(~wy17B z7hqhA_3|tf{XY@Vts#@q5W8Dk(u({WUOkh6K^T4w**0a!E#X4^Q?H0AX1!gQI&d*6J3#O`?XK0oh; zjMMw1X&(cLr+IEa`s4tUYLqxk(k#7!Q25^=3b!S+XwmGZF!oUh1R3LFN(=L*v!$Y8;Gh6iS(|Dnl+1`V}Qx@zN6T5K@zD z=^cmX9r|OiNi9(R%bA%_O|&aFBEVESiVg#e7!WzU3M~;5DfQ&+CDRynXuowjAUo_! zRrtaN`)-R3rH(^G#`uAk9!U_KxVw^Z&b9wn!r{hgZcsu381twAz-#C98QOum#*b=o zchlV7t!`g6H{Ie!A2Tb#+4{Bj!{W^2VqUDOMGIb(j{#gLgcl}5ps@$iyUyYw`8^y) zwV`#)Rb>gkkQ;4O+>w2|{Z*R_s_A+$wXCUS8qMoyAti zfzGBE(L){5QTwtwOvmHtIM&PKk+B5KUbpx~vwUUOf@d0PErSaK9RuoI?Vksuicjhy zz86aIPf&w(^htAJ1~yaaNAsW&$8rm!cN85}=>@tq4M3oVgo|+2z!RVxiHUOij%f9` z*<=Zn|Af%-EWx&tx_nh8w3gZ1LvF)!|$$A#GX`r}%gdCWALA zI~HLwgmp}3B^x8SVJ49Qh<(oo;?2yCWZH8^<3K#>yY;$Vd)bA;Dj+x&3O*H^e;q~p zy2-%c`yE}ZNWjr2*7f9ak=|h^$r!+1l$j$7^=k8tc#++#z$=yWNDQjt6XDoVd3aaZ z(*XhW0v$=k3ky9n?iY)(ZRJA22AG<&|0-@scB^vz_#$UFV$ET-cPmWA%wp#+S zrj|iCR3{0WbR0_g!WO%Z55_*sxAJv^G6XrsCw1tNE#(#&6i5NoEH!#YeX6#it#J7C zJFqK)n5oU_vFMlH8^%>eZ8i-Ok{qwupS=Z_?f^d`fRKQ?lS*V1cd^{{Vnx@-0PsK% z(NH2!V5XUjhR{{coRH|c{_VS0zxA8H{?p(5jW=)ax9bh41u!I{A>CVru!R$F87W{G z1FL|1qb^iTH1s}GyUZ9Rh8%F=Cw?wn(1RN&7xz>UwH!+fT^E-vBxPN}b;|-IvZ8c+ zls2FQkA74N>}KfIwqXhtNYDyRWTnUw_raa5EY*Z2Xe1!JI!*c2V#*Ni6@@4vMPoYE zQHeYgrN;4PfBNwBEWN^|XeGgcoT0nyry3w7Qi;OCv2_kVDw|>~BYDLju+kuL5>nd6 zSwDb@N-E1qE+G1bhm@blY#b0FgxW3_y@&~1GR2K-T{FU+@@4o6N^?d_{X&A5@yu5>C@-J&I$=(B$GEMUTv zTuBq8@hh=g2j^6(Y89h3v~`dLZ&5c5DDeQhXwK-m+&r%tsHd&!llgAJ6g4wZEQ`%*Il zaK4~;6F#Iu)tDNF0opz8cJilToQ!<_*&Fjn@vgK$)SV@u0qPvlTAO2V%%e(}+WOYj zXgI`|EBZD)0A}GqvqneIl7uCqjN#}Sc9o(r6Ah!hO>CJqMGD2UmF%0v$rX}$&Cl-a zVvAy7B{j;P!oW&o^l38;2395H@F}W=I}|D#I!n<2P=2MI=t`NnZ(YB6{ran~zW58j z^V47bwO?7UduOZ0H=62@%F36`CFIityhKr~8}ZYRAdi;pyZ)*LX0_PcH`s zW={wGt6}wcA$jz{=cnOxK6`~j`7q@!)+K@LdzXNak-Q{*65Jqk`P-~C>Cf4#Fq!Yr zDO_>_RpWDGDla>wf$OK!|LiY*35)MG%}op7ymCR(N2keJM1R?N^XYk*&nNm7TqxSN z)AWc4&jUGEbIGY?p`-EFO zEjB<%z~BL}M&6xW57L&!+ThWuV(|G*`1Kw`8 zFeGEnAcy@SR{_QNi<$Y+;bmf0v|0C!y;@qvwXeVX0B4#q$|Xe6s$Xv}Bo))xEW12| z^3u0!90qI*FC^QVdt#c^XI(|Lzy>kobh1+*I{HW2arEuyYx&k|)=k|vL_>^E3$MY| zD|Ac&kd&6^ET|jU@{CgTYpmfH(e$S-OIb|+kbz@$8Z6qk zZpjD0Mq`0=3NVX!Q|rleJ7wJLjAPcM@azkKi}W3(_e502X;_!fEO_{OYag(aR_3>FMjd$Fbua{ zdGMb?A#u(Ks)9V&>#7tsbP(9X5sryTYR9otA?*!5K31)QLCy=)c?N+};*X_~yn#UO~}mL-Mo97-JSNHbMKAFh|Gw{h|G*6f-D9lAt6yx6%(d> z046YELVW?mhu|wPK|)MWp%em2lte01RAz~6BjdKG*?Yg8ch>SezvcUszk9ozEnDl~ zcWYVaMWO&hqs6{Cpji8^v!f}gNJ9qJ&9q;eo5;m!r%jFd6wSDWWKk0ksHqqhAO88n^S}J@@VirY_Gw4+52yaW zJDmRmbBkgA*N?tRTWv5PgD7JezD9Xo`-Be@UTd#gQ;~#w3ALldnJM7{-pCQmSI7|C zwrTOtw#h@}DW55|rj|zh%#e2h1trY=-RRkf>}a=F z-2x&s7)9K+pV3&0m379nD<5lK?1HAGd+knnsehZVj0Ys+QOYY<1)GD{q&Mdz6oHS` z&9XoM#X?55 zg8+G4?I;}3PM7pxn=!H=a>%jSPt4j*9uTH{Y9F?;=^?+cYTfdRHrF9p`MBk}nPV0k z&u6#|spQ7Nle9`gB-&cPZhRFBwwos-NCtUjzg>TPd{CbT9M6HdFq5a-^0#QnH4196 z^sEvNpn$ws(_85Pa@xoM|&_2bq zb^bD}EJg{p2vH&h9TC>c)#~o<=GFcEe!n9V`!sK45l(?3c6Fwqf~Z(sff4GfyW5*3 z1t4u&h)*2xD4q~8@J(rnUwa10%96n2L)~^LH0QecS9pP*=f`IPJ+-EK2DU<#e!uj3 zk+LIUp6~bKz@z7?q%-m~RYYWf1xN@xpcCFuJjNvTb90ViqciD6C#G2!e&^Ma0GddTE3HaJ|t~#gIb4v+F4qHsb2bwvQcL(Gn8L7nKNhvWfjo!%Wb=ReZ z2ICdg?s#_DH-eS;Txp(_mFA3(JmozjsnnX)krSHT!G zKqWQCU3T*yLqtCQ6O`M!Z>%cpjCnaF+cKovEq$gaOn`vH*i-Qlx+_kKL~lQ$_s|W~ zdb0r{bZG92=Kk*H@zMKZAqN}8&T=CQXk-%ZP}J*fbMd`K(`vB-2c*&wqR>7<3OW~` zR)FI#l7nUtFB>laXszYQ#BYQYrjZ2X<^x?%Y5S)5P9K5{gA}kZSX8Vx zD>&#P&B!n#iqIoRkt*CG8%o~gYV`h($VGdzJi@h^?cq?2FLH)zIp$BmDu4jsKA?aj zN;l}XUbnAb-@m%Q-LzC(^{J;2bfk#ssHeh-)+`-xSXE4&m#r5n6%?J97o%49F^n>2 zRn+1JxnP#n!fO#jN^~fGJ`Yb%@QeOpIJ6d`Jz97XuO14p9P{inLS`rj1fewJzTP?L z7{`m*I3wZaobVwEU^u{$nws6Ti(vFSb}jJ|$9CBFGKQ;9q3M)@=%JZ*Wj#)QBrsS7 z6GKyNw5Lb4_{*BW_c}2n(0NOd*Wqz?da;;SH+= z*(AW!q|444di4+A?b+W)vV@x57H420s*B|1bpZEd^y%dF)I~>-^8fnrQKH!MOtLd@ z0C*dtny3%Pe^8l0hHBx`7bsnfia3#Yc6TeUZ~=;mh8`+NsF2AYuH_SSH4s7Z%dFnnv`>zaC6lF*3aTWv!)O@iA z5oRko_$dun2*L}A9yZWRj6EHPIx~WUZV+i{!(|zxrkP?2-#d5@-RyNN%;@dShgh6q zQpF}xz(Rj6cD|~|b2sLiNOs``?KH3N_K$~i&a%nfk^(B#%yo#p722(<=N-lC)JHLc(7Y@4@IBGCIyA= z2TzY#_&8mm&Y%OnIZ^?#mmWlS3^nq^O@JRABPEyTC0C<`ZjyO187+$=$~Iywh^z&H zORLO5Bk?bN`6}x7f01GV5^WM@*2|my?(UBIeou?goR0C4KoK$~+5Z0i7I|b4(Xlyq z9VnnU(Gq+dDJBqt`Spf7AF>;$L64e(`}y$+Nw3K!G%L~&!vQJHpWT7`DS+4WdC=?A z3eU=#Uk(^Cz?h*3g${wC848x5CA{mZYsP5WfDt2I<+4ng8A!W{+cOJ|t`}-UIP6G{ zll!efF?OeVu0WKKh}bLgmK$dPrtK9jO3e2%01tH79+gk!9L@<{r5TxJeexPWNXd@& z(T}3$dm88ik-mL}meVktr;c*78?^~ql(JlfZwT|OAk%->Y&CQ_%cCHi)iQA#e8Z`= zI>n-QhvAnNO$vfTMf3x(enn+8PH>}Zvt@qvh zfBWvk(b=GCFEWBANXc?Jb$!(_3y7O?V3VNWX35ItCj@E>5>qvv5ixx^nc@#F!=u;E zMbtPEX%OFAIU&6288}{I2`dRbvX@wigz^V|Ac#-|q+r1f*95;7B1SSCU z>seAJ9k@uTU00iRwOzk^{ThLLwy$z&j&@x+yd!#8&^BQ*h(aUaL}>?{DK(=t0yO*N zQR*EEg68PUxr%WMjE~$+eNBcMd=6bT_C7RexXiBj$Jce>fut27r}*A=sJw6kKK zD4Xi_-R;K*s!KZ($JdMb^Zm5<)=Ly-(Xd%mn|6No`UbVB!9&r~hqV$wRcYk~&@#pc zXYwLEEE&m(W}7!FAXJR)kh?6@cfem@+VtC`0wp9U%6jE?_Rsn0fY8T-SMlri#`jJe`;u-vSZ6 z@U1oiMXo})(!>17zqhxywI*e(2EElT)SaX2#|pAf6Nr^ z6PC=}Nl%JN?u5l(VDK+I1tH_mSd>zzP85o9C?&zdFue`)#E+fE;#m6>Kn1y04`pT~ zrK%&bp>FK6VE)Q3y)Y-_t&uAJY(z1rffm!7{<~SM*4`+_k?G__PsXry8ZHUe4BEE? zKurpvL!wb0XfZ5h7ks`%Aeq*L2t0f6@6b8BgFWjW30C09S%T@8S@{Wv zC(Eri8nUKsH$g!xfat^c*-QF3f<6$l-4fqXt(q(%iwxDeAf_hIU}i9sb1YPHOtgh5 zIHxIgL2D?Y2}6Mg4+U7fLj-&k0^q*1E7u0Q+C2?~hSaePQ2^zCa``%2F3`- zh|||vFb9Ptob4g6HNldY%x&}FKgK|3%)|bWt+v9TW(eDPn-c1N3vkf1nK%A=5$Oc(c*<{ zIa1YZ7i*H9PEBY2J1d`_=IJCVnem1#K**FK6*}!h1rLV8g5M}zvcjIuyj-kvjhX$j zSY%)9d*I_~0uv{FjZYMpu5=2f=tyKmD5eLmd62Ynfv3X;&u2y+o+bp2vY&%!hKgmOVc+l~!`bg8)&1L7~lh7eLUQ1|qD6M?Wilx~dhVEq7(r$g7G# ztpP;sBnj^_YnY6GdDG$0VYK7bx5~2sS9eiamzVIF$2s z>Cb;AC}X*iN|ToXel=~6OJMQ?TRP3e^ou=GbTI_~j27}$9;^g-bS~ErCsDC5an?-i z3}e7*obCjGJ?xwA1Tdn8wTS-5L20#{n{I4&`?}p!s~r^b5gYAVF~b!&^f2pt7+eSQ z6#@>r@~IsgP$S{cS;&it7WnDQk50@sX*SRSDjSgmePkexgZ*;A1TFqdKZ<9^36)ov zFQc6k8&(0w{}4xlX@2)ei4?@ZR67Ech|;eb&x;+y7NDY@ICx4}N7fRtzo+{2;g@fh zG~wOl6L8C@KTm^R2C90mVO!@o{t}&ULKDp*N9wxLt6$suRs?! z{ahrFuAH1I+LZ>#sq35D{V#t0^)G(@jV~3KX336?q5BMXgcMw%We=bQbZ|sOwgh~* zqwLc-Eh?3=QyQCd0e6gzqX;yS(%}xXL*_?mwu?C2rcWSqfM0ma0c#ijQBsug*Pr5z z*-JGGAi7(yMf62J0tm(Sg#dc%rz9EOh@<{$GqDi|szeF)gI@Sr{KaS9fT<>z&@r!b z?#Oo-&(@oC9@Mc&`G-~bq(E93t35&Lj_7Z-;p?S9 zxY_ymfzI(%*m0xT54hFFD`a-pf!!8EPcK11{Id>XPy=bfSwtWoQeiHDGc z3j47a5%vQ88rI=z6R-^gwcU+{Md~Kc}g$mAf-Fo8R9O-H7{4} z%~ga#h6^Jv%%qns{)w)vR`+=`2Ao20JuO~3pV1E-XeRt0`{A}+XN=B@`Xf5FE{j`v zue_}t3}}^!8WlFP!{zxSQsk&Mhv<{zFXQOxdKxu5O_alk-dwS2d z53gN$4ZBnJh6BsII+ISW>p?r%_%46YAUo0!lEZ6hL12tWh%Q?AkP+7m!R9k{TJjzf z!(1uvBXMe)R?s;&Yj3Sztmox&CJwc0IySgryI!%~u9xk0@#pVutQAR>Ig`mBC@qz7 zU3|mWn7R6o)h>M$uvZDOr_apQezQV(c(_CKEan7LF5L1w=lc$`Hj5ENoL%P0YOvLJ zXTZ@LYHs(NoBjG`*X}m!t=D}SfxMH25U9-%!LdioN|ihP@l1fPGiiKqia7&F7{WjP z>}FLpYlM>PbItpdy*r;b*-@zXb9Xk9K_h?<-S96z9@xdwy|@DC;0g*3d*zzvZ!^J% zF*OkD)ZC#6(d{T{wSJc}NKV=lJ5K;p9n!qD#kNOu`d z{v`$UuXc;7J7bzYs=QtIJ`abwSE)*e^T_&ns5c9E$O9{l4HBq5i2*QxFPK!HB2z7V zQnMHQekn5bWJK_vGEvgtvV)u{OsRHh0U^^t7?9yo6kEzrOwkYOZYCd%HLOUT&jX>B z;b@K6ZhAQl)9u=*8j6IEicbyEpRuwAf$d_IRZT*+kFFZ}iyBa=o}N8Xqyq{gfZMUo#R%pb!fN18v4pK6;NV zaG0qH0f?9+m9&un0>iHK;6J-~tMg-yhpX_Ta-R-oa;I~qvBqA>ZPa<=oU8trH+z~L z_iqODNYUV~lo$Cxr3qVJLsVoYW{($CQiLuPu|rjgC;>guLOj&jI28ku2xZpx(t z0<*|fz(sm=S@=|4>ie-giqYgmx>!|Nbzdx7J$psGZ5My`<_0?;D7YvHJ$NTU{A^{# zKiA2r?txp)TQdt_A~t{mb%h~HAKT}gZX!6J6i3x9n$AZuB<-znB#0cB&A44J?(g4bUhljzRZ_CJ*tc0*&|BI_ABaK3KMFO;c-=1l z&g+}6mP_J{r;sBQm`7VTH(R88dOT0$Ft0)-!05S`Y5v=1rU7}Sa0E!JE}MefRj9ON zCWC?CArRPZ_OD1%jSo9#$~3K3>+N<+!nKl&g~fcGsRCI|qjnXKY{ZM7BdBiBkxV)o zn`(^G?5jQ0%b{8=z(Ul>gXuX&Kt;n~@V#Bj)uvtk$v5wi3Bf(*>zF`GZjWZoBz*zkAiLeswrNG~`$z#u0>>7Aiz~lHL#?EV-EB zBoGPFL3<6e0!9LIr5$k;Cvm<2zvylr`u=?EA!FrR&a*@-wF&L7iLDlw}m4_sA~!ZEDbh8a?v!ts9|)3Viye55vfs0iCW(9Ch2v2_@*@m z6sk_n0PNt$O{1hPa{Gt_2N(7?xQt~i@^+&;=#KFnLIMb_kw`4>4vZ;Mki+w zl46z|=aUg=#J+PCr0QvoIBrRO&~@MhF4{0g@Od22W?0{ldV-dkNsypzOw$x_nT<1 ziormvi*C0}z~@sgoOC{i%8TsA>h)^#2eO4*tW+ThB=UCDLRj@ozxK*S9ClJ5<>h0I>?%v()y`aJe=#S6m3j#kLPU;(&F$FY@ zNwLcp(=u{4p$B5T+rTJ-kPQ+1AjI=HuI(`Wa511D0tV`U@dar{#pDDR{h)!K67MBZ zpeaU}F-lB!%9^cgF;w%fn|{b6G)C($XIo=u36Zb^MaUC2nJKc%L9I{+l?a;zuSdoA zRj)qfw_ZmNtCq4ri&bY}dR!@pIdg!Y>{D7~HPKoz9Qv!iP4l$tVlV+T(Sc#HS&(Hb zU!OlN4?`!MLbqG`5NsbVWR#b9Sx)2y%9ZV|>=H73bXmf4U!H#}<@fn!xp^dqjJWUg;0xx~!F%sAIp;#QW z+e7Fjdo#Ak!_MV!w5<~OakRQp19bF&y^DhFA2>9*L--N9u$%(gpLV|m=CI&pv}%Gf zsq#`0xBc*IH69zVm`)?W{^)i`#Y(li9BbbxLa{p57b9@2EGBqz9x$Dq+B4IXyh1xN z^&M11x@o?2#PF(IW(d_!!+7u=bp|7_zPi7;_|%xo;e0-wE{_K$XI}gODDz1qPO#P> ztLc(w_%Uj|@_jE%(7t&0s_O_-ql;%N-$V$|U9lLDnxZ^i%tix5_B2nACk$$Svs(StyWQK>^4A=e1}}l&w{el@X1!S}Ar)tB6=^DD z<*POjfloPR8`*C+yX|I+`HWt9<{18IVu`%kOXcMmx?EhtqL?P>t$c9?@o}@$q9~l5 ztkCSypTE2P_Vvx@_uDtOHv~|cppUuyk?Cp9OMiSiRx|1WL56@cXl38nt@neUy`%vn zBLrYW&}e#{s>fk?f8t;iN+ffG4jpeD9-T%E~Eg186A12sE?EoFw*m=*E_VLB&XVEWpd{1m$USuRkV_ggM0 z*TYL8pZOoZOzk-2Sg&z3Q+nL-x@`#xDl`GwXeQSRI>}L*cR?i5Ip+9qTtn z7L@FiEx)V*i)$%^mq*aiYN7+H30k(5?tEsmo&ONd`mXt5rDw35KrH z$8SIins1^7KOBVjQ->3HwE&i+Qs_|-mLGpDRXd!q$XIkPqZMd&DF&fFeTQW@p()m( zYs}AwlfuCe7P6xbVbBsrE|m=;C_fxDLaRKe51G&vR-ug^ewF`Vlel!DC%YaNG0=s2 z?FtPh^$bma@VhC2KXr36W7$$6glmXrry7XL#1LKHAZxYi3uSe@P!zfg!2j7VKXXZA zu5So;{)+XO%!!LrEHe#y?$9qA%r~2@*Vs&6Q&P>FEy@xf+n4i98G9heV$Kx_V0d9Z zPt07_n|AHhkb0#Qf`iJHRPNJxXtp5%D`LN{wSg3#yV(Q6+q(!DRH`aTODu=;lE9X6Xq z^ZhjZ*S~-G{>XHpsh8v!rG{l}w`=XYVX{Ghy53BfKrQD9)C98L``yaeZxKbRK9&&$$EqplUDQouGB*9v-vKM<0tc?OeN70MN_>xfV z3#24qXHloIrRSTiPoGCvz^6OL!(NCekn{k$uc~IB3#~gUm})vt-hB{CB|f=K7-Eu@ z`uRK@dj!+`=|BF5{ps}b{`=wisXRGc%C8fMqFD@5xgp0>H-0=pn*|N9!=;DV6-TI3B`4JBtQNnC}xSeeNQo*s6F*vGzOT0LexfVp%ya5=xjyj@XZ`3ZK#%K%FrC; z>wFm&p6LCA( zIbiIY|CSS(|Cgao5ZOx$=2H3tOxK1-f(fvpz&PoJ+0Ke2RE}t*>|7A5x_T|8G^s(? zXV{PpsIhY)wCN{LePazEuqIqB2r>~3W`R7x-Y{EudN~HX1oE}_Dfav#RcAzy18F$f z{hrdz=&5Zd7@?~F_}d?S3K`?=7}#YavXN`(f;*&zB(fvn(k;WGsEIvxD88sB`PEQ>web&;x7@xQ%Fs-@%4#} z0am^E`F<eX@#USQtyy5>)+58wCeO1w9KiAbt_CA&nTuyb!^^l++P`stL{dn%Et zdVRnDf*P8Blz8HX+(<@y@R^XYE#i)HAp|`GDWO^?f5pE4WD#@aKvNT7iQ9}d_}6H|c!3j6sy)UY{_ z!H9tPs#A5u84%^I=PNf(a~5Z zcSJp}RbUiH6$9VOA9@ise=+N-My8;By|eP=kTgacAOV|00AxU$za8lc?rpQWSvIYv z;*IzY23eN2mk7n$7^AlaC+@IO7`J#_u0H?jGxF~0a9R^i7Ooxmfm`P~(hhQnEj|P& zuX#7^0Fnm9Wg;WMGk3vl?^PD#Ivrh@>Zuk@E3(PTBvkF5}o2=LdO zF2)!Uh6xS3K#RelQ3g|f2=XUa+uW@j!(f?#`ul#teHg_BaIp~*jx2w z2`Ho%9!)j#(+e{IeMU@HKvHBN4pM8INFO%XVk68HFn-Y+U<#df5k?-!U7S*HQ-&qC z(o0l)m$8Ku{WIZ4s9Fho5E8;mOYO^|v#pguucC^$uDVpR0-=#F%+PZx{cyTmE^E z0)Kd+%$|?u5x0CgkFOn76ELC>&+fwiA^`;8e4Wp_7!Wy*U0oECEf97dyrt#4=kbTr zQt;Xc@f+5W7uzroDH7lHrded6`aHw@_N2Go(0tFkYMSQb%Ttsl4SYO}>b6Gaj?oap=9@Mbr0RG%YX|m>QE;v{ zXbA*A15&XPJu023+1;)PXPBvZO~ck6Jlz(vcR;Q$L6lgdiw*KGRs3jekwr{b0tD*g z>guhsQ&!@+cK2I=sA8^n1_x7uE#BTCT#b=_vdb2~;eoFVBf-Jy*X#P1>v4GfmB^0A zsXG&vI7BiIT~e4@DkwDp3nSn|XKEEXMAVvtsLcd&NHv4*NH{LHN|vEb*%oiiFS3N5 znG#%+6_hA{!kcYz8wG^mhmxgeYPYQJTC<3;PMA(s=w@1l9vP(tA{kUL0yiN~R}jl$ z0gz>{CaLL|4P7oo_tRcUPh}#^MTY*q-BLN=%J@vdR#;tWBN!nMkc^Jr8%pq z;HQ&tF)A;`L<8xaHo(Jdt^!h+2{dv+wf6kt^CN>^O|en5!MM<=c9IAbOUPgxoIy2v zkZunpf%waD4`--nLrSvG0VzQqHaIrBG)Mg^AphcS0=SA%eY@ZIl;KcT4qN9LQS7EK z3p1vaadgQ=Xf8@%tS(yolh0qn2%hA<`GHSIoXX-{sWd$saV;WP7LCR2%>u4&hk~a1 zi=W;6haX&*X70UE!mc<|C>}la+&paemvcvikPcMm8v%(?@I?A*+jYwkigt}e!$40f zg8!Msf*CEfb+9v2L#70|{qf)vD2C}WFS=^l->lnRd;ioSYKWrf_L4^5lkFRe!EeDj zdnpV40~@en5=vfC)N;T)Kmq>qkB^Ud?!t>l5k18LB;w@s6gI{RYxB5nH(okVNq*^$ z=d)5pRLTZe1kgo2oa0*6O|FUn&6zn!(m$;Lfnmj5HB@uN>R){J>YI1>Or)-}h3lRA z*rWII0OH|D5&*#5EEeCsz1M5!`O)hDz19N3py5k5ELUsfhv^>HurT9p!T`@o{a~UR+k{+fMFGm3d7y+9HBUpm|V!fCT zI$eb8tKS*{YQh>byW-ZW4W9$%g$Xf|M%rYnmZWLE+d!p`!fY0f#H9$0uJrbQRqZPU zMnBp(^z8k%RZqNiElnEi2MYbcvqN-d*#Bfd{;z+rV9xcwS^Xm{?DX9a$M3#}x&wK< z&MPy~rlCm&#j3w}77{XleDZ`KRkwyDds~b!(I0B7=l0l|Vwp z5XsW#oeS~0tH-?@He%2jy($mc8UXq6(!+_ExGbx7Qa1Z+rMZ6Th;-<)X%|4z$wi=x zN>^0iw&>VV#7^GvZk6j1DKZ*p88(qv?F;GhL>I;?5wTuR}iy_nj-@C{i^2ucB8Kb5vtZ<^;u**>NYfLuAmeK;B;W=^pKqW<-1pe z7*!R*3cb>!ve2;Bcai-6);c_`-4nen-w^PX3$k6P&L1C-7#$To7RsFV@pyrWb2qG(_5E(M@+5dY_Tx*vc>R2mKdcUxiCaoc z3FCz)(n4MT+mDaN3)!`1luk8Fj7xNZW=c!X!YCG$V@2i+0OyMcJTA5BKDH+S8nrc3 zqRYrKCjprpsiYE!;2U6voF9NFuUe8cw;?rV$`PPMJZ>O0y&cMOs=VH|8OnbpT2yGf zuq~t7(dVEFRZ&AyeKbVZ9Wf`DrxyfKkpu#>VEpQ)`9J&@+rRBL|NDRQE$TV`@c#LC zzXQpcx>LZCq0l^mYeWkjj-~B~7ftN}7% zu3GA}UaY#wH+|RrVZUC570pMXK)*T!x-`R_ORq}aO{Res5JfjBHas`kczH2XB_P;O z;|%N4D=&C9p+E&HCmX3bnDBXyOySYjq=F{dmJa*q8%4JT4A{wJr}O-DaZUU-4_$XO z#|Z9&PfQCf8isBe2*MMB^n@zO?z5f$=7uG7r0&#+0HCJpv00NffM8@aNYaIf=Sp#JUm4+GPD z*R_o1b`SIdp0*-oI-AeLt`X;WjE1A1eif56N{vdEr%!UxbJ7JMMl4#isvM?MxRZRp zi&F|#+51gDvYOLRxmVc4V2+P@9g`Mk{1*@)7=(+;1923{(q7m9i$D8W4htAE0#<_Q z2xTBJt|l8i5iP3fX1RF5gsm^;otMwL016AMl}}--SM{0jQ_Yu47Qv;tx}~tJ2&tw3 z*;v-Q+nx6#tXJF3a?|1?F4@8>xhaNJ_|KCeB40k;Fr6;Lq4x#_Vm;B53isv1)4O(g zyQ)4Or*qCS!F`^mf+xw2R8pPcCqQC|kT}Y;-0N_>U2ajoKXy0k<$w2he9+!DvBlcL zO?LvhQbDZ90ii~vzJtsl<~&n%sSiJT?P541Li9y;gDsF+ zh03~-v05>?@Fu((&6B1j$!SMxPQa|BNYaV)Ws+6AOLIyjd4KCU! zza)*MXm|?f$g{*7{xkQF(`Z(uE{TFZk?Mjo;aEycUF-*jFtdQn9@d@*vPyy0OHh>- zB}mK*9wa0zF_%y#g37yO0du8LfQ(|U#z#?xW)2}K;@$6m{BU*mNE?7qsw~t#hK#ov z_w*fYH<6ByfU;r#LOtDW(j?uCX4!;3f0+*rgkw`&tf+9BQ9yDl!pd0w(Je}0*TeI) z-)#W+lTRgJ*Zt+}ja{^cCFRZN>qJ8aG!sEo^?&y5TQ!oQv{Dgr2zy$1L8sm6L_r%| zbeXn3>DOjJZ<+Nr%>MYX{6`HK>GO-HkdNK8tec%rmhkbG+x>>@y&|{~Yq3|~E#qaC z6#ZwPH6sP2Tj&Hm_6Mc?Fq{X(JX7_C3?G(4pL0JR&)vh}d`krQ_yX1KMotWf-v1?; ztE*)x!aPXY+;{QOh*h75xJ91O+w9xrZteN;|NCzq`qfV5L|U#E(kF#r5k7#)I(q5k zI->;T4>VT=#Tn+&*VoYE!a5)(uk!R(Dth56p@~1>Z;F2@&EKcT%7CWe|h>-4xisYJpJakDzTm)C*R&K z#rBNHN=~($7nI!J`yMyJddfL6>`ckBhOvOel^u_==@Ow1vdPnR@J~iafF%YJzMP(6 z1j29)1EB(8a4`f?^9f{1IX>xv6?-k5IW-;l^8C3!F=Zcv68S|xLgIkoCL&b|#u^`e zfkJSiTYR%9Lq4@%v}Nvs3hXEVOn#HsFHk>01FlK|rq^t|s-wgTy5q|#P{}b$^1Lm= z9hvyV7XQGnrGXR5V9Qvb0MKVuV4~fV*gxF4)6MDgFa3|Nrx!zx8wr*(W>>cu`ZesCU#_BfRQN-8xs7 zX=?FFA00)3?2L?30xE!Sg)+=|fbdA929Y2)Jt6M=BVzURkFyk-?vs$$$aG;wVPt0%DNFYIa?v)_P1P@JMXOIjz z8rX}af`fU6V<8xZeJFkYD0z*3g4Rf zu4;)Rm#W90v6j!T2I^k;OseE9hI ztKY}>rpK{&7E3R6<6Lct>7e!n)41xxAh!Sww+7clJ(E|n*f0R55-jSzKNCWL$GPXZ`#8UFLv>%aYY1`Jw$K9Bo#uBFxh#8{~J5yk9Y!})yi_H}_1cd6{ zyz1C~1aY6*9-4px2u)29Nhv^t0j+`qsx=BnRjq3)*ql?B6cfP6r3ljNh-!Wryg0{u z=Y6WCddC1iLDz@@j)Ap{+zO-^F{eZ~mlBmzqE``uB3gSNW)hA}i;T^6+w6B+DAJE} zOk(Eww?BL!klE9Z3YR5WW^7>cKWy8jz(XXZGvadkkY0BAX_(MuzQ`lFQSHV13;3RTqmiXU}tOXhGUjjjMrHv#Y!hp1A*V8DD%L1mU6?nFBNpDG6l9 zZv6AV|1;;ynYr=DHVNr|yGGd*EcEYO8-)tL+y`n?J>%1wo!68eJ$0*@UkH}8Ghzy;;{T_93wj8rU6CF_~mneWR871N^&<-^~+9Q#-nh%Zhd ztdH|9oMNqD_<`fZF{mK zs{}3)ggu~bSDx??@?1TivAyOme);wLm-DJ!9*$=ak#7HJRc-2qy7K;h^Zwz$*kd>M zLzcECX1Ee1Ch#y}nx=o3v%#SV2li6an2~l;qCfrv@^bZyn@R##fQW?Vx!K*`tDVOA z86B`2qBqXkTOYEBCV!1i=X0`~tIiF8i0%>;SE;A_;mL;A`|M7A_82lk0#E}I+6%;|Kgg%!) z$bvPPQZPQ`S}aqf8gz~>YhekYJ6MP^Ne|?XsFNGisIr=?ukPDDRbV~;n;$Od5EVR} zhTGPsi5ZW?!#^wWm1lH~p%{sm2&0|N?d^X1H^2Hd!w>;Lm^wp4E@v>;B~#NJLLzB^ zVO9{1A;q8Km1si}Trt6ln5n~%>mROb(UAcq=?e=xr47&zh7xpMII8 zf_4SSL`Y&<*1IC2kT%bo^%8E#HXQ#%V7*)}ZZ}(wBPr55 zbCZd{R>4qis2+m(VW>VF`uB(a`8+-MLpRkMpCwCKah(gl4AYrNJxyP|yCrxqnAQ~i zijblMZzp+RKuQ2fn!26p8rgfFs((Bia1NKws|cVkhT>(bUVD1+hN!tZ9WS4+b)P*E zN2`RRdQE|>3AomgFeGmbU*<{)%hTF-kpF)^K7Q~7D8U4EsK2pUfr~kcSJXK%*L$NF zA$xt3(lHH`=VVv{fkyB0EQtAUG8-v?$@i@@jO0nif_6X=d=oOF-B5^7-Ad zJ`R)y-p5W&V_wYJg|k_U%Cx}@&rWG11u+#Iad-u^tjC+x^m;vQ2=B~6w=> zQ(TLH2x1y9Y9aw#FN`}tnwRoMixQqJtLtb@h*9!&Y2*ekbYTMIicJwIfA$n$xD3DE zJpiyIB}CrbsVjZy^>#(zUN7t2s`=q%XqhBiK{>Pt%9NL!m#bjZ;IW^d4+o}wFj6Lz zfW^j{)loLN0O*^-0|MiUIsF8UuM!j0c0rOR=+s&4<3Wjp8DLzE<_dr@n|ko_ou<6i z331w=j&yT$dYU+Cr;n=_9JC*8t`#Uk6d^k3LILZR+>9j!mdIt$t31ry zfn%NnSK*8A@KR(Shkzv7%V7HyHI{9u3&nzf2EDUv+fiZ?AC*UG;V;1}fIU!v=#d-~ zwk&YWc5J|_0Yog}_Rt*qpDuK#mnIW3%HX(`g+5X5QvZ`LUzH$qJ?8_;x?)y`pWpyx zbqjl?GX*)K^@;Qpvo5(%=@%ERo_+1F6SS^a{am|zT-Sg0$6q2JdO;R3(sYUvP)FTt zHa<$%uzw{~u=attWpbX66m`)CihxXT13PKq;dIGkC&ria@ODMthFJN^#4f7_WaK8z zppzlkFBKynA8Da|PygcSQN|Fl&OGo$QyH44b^M{5Po&^*~>AdfW~E= zs7q|U@yUQfrTiBbrJSdK3uBr6sHWKj6YFzO(mlIW@rV%_o?T}!y?y!m{+rM5o|!>Z zOb9MVpKDnEDbwA$ArN98o)LjD>*vwJ6frZ@X*J}dU5>bE(Yf?;&&Q#Af9g6|^U2Qy z6HSnxA>>0il*AHkU#_;k=+ZqJ0qR4lbt}z=Kf?;YD37rKcsabx&d+)zqYx99k<*5W zY-SV|@fo3VeA2Hrg?fnE%VzVX@7~sC{?)@t$vQ<{nVz8vwltIRWI=`4%Y|NY}2w!`5z=C&K*ghL+N>yiAMVeK_e)RkPWZv;G{Z zr~X7p7c%1EC+L)_SVdbnN}=oqlj*aI35dYywT`cqYkYm);tH#%qL{rztDpFBVIcY{ z2e&>`QFpccubRu~xyREu9ZuuDx6ohtVHjvI5*-;zlgm%zDzBX}JgkvV_ zy)H$ER~$iXNmNSxzegWF6MYx}3vA<3ShL&wcWM&?;6#H_W045-unBB8*c#^MGB-Ui zOq7mQ&0(Dmn2T7nJ>~$-dPR67J_>=+o3<6Z90{HO5Quxc@=jn|tl_~)hk5+n_YWAG zVw4N0qesYr-7Dfmme7R&IIJwvL$ReAhiW+C+YfXYRI(QnH7+s6L4GSNzCxar9y{S( zd71h0mDlM`Uu-Gh?odx@N z?o)*N#3iaQb$`xtAmANV7zE%=)7&ka&$r9nYLN>js>3)QqjIz$Pv8oM&4PG0?`~WK zRaAn}QR#tG(ZQMsmbC4BghmJ1;{e-q&XEHON@ei`k<|=R}NEoy_Y@S`HwH)JvYr&S$D>nlt43UBe zom5mF;UnLQCR+97N{9%0{RW1&Ni%7Rb{fwE%UZ63w1p1n4@n5MY$$DrXYhKp`ux?+ zX1RPmT^>(9G6VN~bGy6oxQ}SPm>Fx#dA+Q5?Q*|bY{|!YCuLcD;xJU9MBqL4$yhZ(8Q{v+7nKP_JGheEv&xWKDh4`phQ|Ash(?q!a^93qz&Stx#dMId^#g;EHVQ ziQ=d?Yy!3oHpAV;(u~+j1 zNVTr?L_{pg<1?4ubn9iZvVhuDaLhf-+$_!@1u{a&^$?oub~(Sjfly!01ekbzIG;#k zS0}_O1W}|T6Z~?3u0=k6ylHu{aE(r*^V)VwNMwU%QA>2lkP-v0e-VF31CVOAvQtgH z(OD5`6@c`Q4_K{$55H# zGgO~bUs71aNgpVc9uJtMELR*U)xnqUDUXC!#s&-2DEP>> zJisX>QeFula*PE_=7{1+lO4ro5sd^G5ATY`h%r-g2`K#}!aqpW4;ZbR@{hrmMRrmE zMr4jU3OSZy-`=!H<5d(6wIP}eJsLaao^f=f!6H#M0Q*VAno9bLm^KwdR~M|s5+R7g zqtr8U6LBFUx|86k=&a%_YZ86|!IA&**KY)1MS_`%G!~H2@P?1tXi8>g&K@0}41Kmz z@x)uCo3Y!r>3ScwOl^wE_S5w9Z{I-Qx^>Z8_bVP8%ArL+a&lHv<1qb&=S{dFUNa|U zW=Z5DA)Suh$AhN=oJ&*fHZG-83PZ}kbb1(>xBvM~3kzGl2Mo-_O+!r!+e(X>T%ScP zj2_HHgr{lv7ayM@P8y&I1~Rr@jg8MBGLqQp7kLC@TP_#pOFw#Zh>D527&*39w`__R zC<>bBHF*=zsUOLd999QTMEQ6#l*kM&1_$^h2o}k|z@@OOH+TCRqF6mY9ZvZFe%q1~ zZno>);TfZWsVxSxsP|04~?kP#{c(^ zPmmiFuvU07M_~rk{Zgosqr~_5tdIw@IZ_3R^!CAp%QqMuh)@|VJ;T;HW4)r%9mr+$fd8G6SP z^l$|38Dgd;@+DXr=DF*?M_Ks1^|b!g|i;*ikrwo8S(MPkhBDs)kx1r5K#I zqh&FS22ISyJ_(#@0$2Pi@Xb#P3anOw!3jaiNJ(ml3Y@;y!NMr!D=c~#VkO=-Meb@S zP5F{ek%xVS>{@X~rNIy1lEY|V6r2hoLxiq)t_W#gEOXwl%_aWwRqRAsh+5A4!y5$J&qGbb{_mkIHI~|2Ejbh zcaf(YIP`hEL28QaqQ2WKAz;1I;xQ(oBN{)A^ZRamo~AGE_Y?(AXTq%cqfmjtkpC36 znZY~1(UQ+_D-v@N>HCi_{G$XWV8J);x!)f_-Cc0AVoyDVi9#B5b&Xq2WP_?B@e;XwyLr?4-;k zVx*$K-^uD`+3ctBv(uSKyj#?pRzWT4=`-u95kAH$k4LPY565D}jWA))ArK>-<#{ic9^1MAfJ-s}90E+BD zp0>&V?0E7`is7h5Ak*~HlUv1{#H}_#W~E~1T+buB;Pm1g=9dg~AGYgi-ApTjAt~Ar z1fn8HjyOXln){N)1eDMT1(0D)<|Z6-6dX`S@FJJDOI%WJu8Sry<1#Kv^^6q;4HnPu zq8|_${*7R^oAqG^3A--TcoPp%9^vETcw0`gX{2BPCmdX_-a#f&!Gd{%uf2u@&o+xk z)rJ9oWm%bW(6?$gE^NvQ1LkAzOX8&6i{&IfV_@6_Ll1*X^yLUe3;g-9+nxuc;@z#P zz@$iZTHUYf{i@n7Jw3pvhzZ2j0h&jIfBh0Di1ZH1q~57&v{Tf;FFOD+zFNG3wJa+e zAtWj%V>7}=X%!R1Tka9!YzAbZIqb_00#Ad24=Q^|Ndyb0VwO%t&JMiVK@Jocon+t9 z2{39?a0<S9j^gGV?q z0eMtn!X?-VqoUMuCg?vO7)ib+L02CKUjcSOvVx1IVe;D@E zl+9K**6V&GgU{p9vt(4tr;E=ld3U>cbF@OWLOjG17=L_3=fq!Jhh4q=Y6-JyfO!Sk&zn z5U|vZ*o;Ndz8*rYatSwpcMP86lOR(H(r_G{C1Lp+Cc3)4(m(ZH?W51=0w7EYqBr!S$4Z@U6 zMlu7#DuIXT#>AlrgCYyU1q11UZhZ(_CIsXwWFpPw@YUdrEzAo3r(ezg;<5VJsdQ6h z{6aNo$OeEc8wb%`?F@{r|9rSyz>m!X(OHleDUA0!FY7cp3SETyuL4jiG@$tX3Km_c zbd}YMujpz)3_9eHtzb{UV2kcJ3u6={`}jZLB}fcPU#ab67|YxdVh@h0vG;8HXJ1nIpu2KTY*_CuaM;I4Iui z@-N57aon|e!dpnerkL$M_RcEukuZ3G8toh+(+~F17e|fiz^9J~B-(LWLrywEky9X! z2toMD8UgA7?g2iArM;E0rDrxYadtil0_;jYn9|2@+T&QxYjGROF2|}_1($(FNWN_- z^cSTTApW_26`9bOj48p@csztuC#?4N0Mer;fNaWgDjW6UPv6}*C!((Otd7@pQGe0Z zSVrX{IA&OQ$@Lz;`&76ta#V}sG=JX>@4M+Ym+?8L4bqcie$ivI_MMT|Jn>oIXvhZL zTwV7{S)xB42o55gN;1&Rr*3Fh&9`swzJ7c2cfPoX4bSB?4dMRS^$&;cltukZ*SRF) z@aD@H1anet2elx#CMP=F^owYskdzZ>n8(0x^SjHXh#KIK_J{YIzx?w4ufDv!X%;`8 zd&(B&HFO%$gbNTL#%1O6Ai@Tg#Brc&CVX0OgEuNW8~rnLS7QYHByktJoVwoMY`lS^fY@jZ7mStS043aaxvzP#5YFz$Mu)B(bjr=e|p)rkSM(J}B zYo@a$uw&?u4Bf_ao!RIB5DJj2)e5bIFC|tw7#{*uZOLyYc9>sD@|3=e)> z;%CPIDF=v23fFDDYZpvdsZp4sd5pfLQjO#lY9UoJ+(XvaRW{#{ArN{LHgpkwb0L|0 z#9$^OzV(y$*JsLw5WK)F z2p0?NkU6q6D;WS*`xQ2#Ik{R!WB9;KEPv!cIc3H#{m^b)mT|i#W@gX$D6OV}9H4`L zegq;czU4FBjL&>Ps6NFaFMKj21MEp-ph%S}5e9qy7g~mcnok*qHZ(i?qajI5WyhXu zF;IGQFyiKj_!uzy2pOG&LZDDG*Qb#h){4i|?;Hw%`al1Jw`GZgbebl+;(=_UI@*ro za3s2rw8b#*efnH=nr1Nk-b;c|Y?wiZPKxz0z6tJh{^p&Jf$&b?)|Yc>nXrg-=gI)V z2x<(gMOWCFuH?R%#eThHW=dC_fy(jMKfc^-+xzY6cOMVbjKo%fRMpeV`8@Qr;IV&w zN2S{^AA|_nVvT`ex%T>#M`1PSo2iv-GiKu2(MOvqXf9;XqV@7iG?j z_0kLE{c)gTS~vA=+n{-%LM}6UbT)Y(YxUdy^lS_ViXMcH#>&U}!HXQQxmtNt>O5af z(k=1DIA;UrydN|wl&Hy0wEBmoY>S8vn%{E$p{o#a+QvN z(GU3&0u78MpMl+={HdRgXJN^g_gE=@4$|h@i%gl5Y~&|k-3X`jQ^PJmoxQ4oR=toj$ z&KqjWV2%boS%MirEL)*T4_z}!lrWo|<1#g5ru?(}9lnQjQ%#DGF&E@$)RQlubQY(X z0nGI-OYGGC9C^+<#){}xH$-^|qpr75mS8%}fAr<6Z{FO#d$qgWw6FHt``wztmVw*V z^3Cn;cDved+MDg_ez&>Z8~AS4?RITgA)-;(J{|j)Q}@HeVZCZ@HtPdZX!EZ;U{dF9 zI1*iacXs_p48|NHe0+K7^Vpm9&KoePD_k%4+^M=i5*KCUb{c%~Fx_L6cIc2C~s=#hk2V16-R0i?xgxu5y=b zidnd_asI|9dKx}nE(65Ay4~IHci(k@^(XsKqggz5QF^y&%kG3UI3SJ0jmI!DbaYWI!VF?MR8ivA;e@KL| z>5yy^(`7%LT2#r2tf-;%wsKKVQjmS!1+#IXnJvB!-h1dZGtgz3P?%Kw2%Rs#Nz>`! zu);awRn_5x=7rZQnc^FWKa#XH0^J2#fJrA+=+$lkA=*N)A}r|30j&w%tLZpkiHmmS z>tYh693Vt zL5mtgCQ)SB{P-s_y+K~TZ ziUwlennn3#AO!kA8jkC@G}4*>UM&!^1$-TbFs9}DVVWPh@yBs`8s`t)_+gqho|{4* zbI$ZMl$F3$x4NPl{y0qE^&@5b6#0;7an zbJ?tz6-1u!I{9`7>#1@r%Zt^s2XFG~4sUOs>dkt!ptxREuA@`hXLaq@r^^SXuZmXP zD|uH}Oe+b4GgWyO9iw~MwrcirebHj#ODvOUh!HaZ=EITC?)P-3V1px&{4o=y-G<=( z@o;7mF!Td6m3>%&49p#mE2qpCEA^lOG2Ht_J-H2hB3d3fM=>xPSC_RjuUrDWZx`k4 z<-^p!@0j3Zy(`8IkO;wa$BqFOx{JiT+NZoHk3G3Y*JbvZKq(Qz%2)er!9!Th` zuD#7$Noe(y7mn9J0jn3FbPjJ(k}E3Gz{hJ*Rx~d4WCMGVrB(;Ri`Q=ng0T?7QO|k1 zU?>xm;e=Vb-TG|7g-ptv)I$h;KnIKQYPL*8876<_HX1qdTU=I`@`S%w1uFutAs&H@ zK|m*?IVN)eV;J!WDH-w9Ox(mVdUi|_Ld2(|r`Wd_Q%R%vdTnqF6XG}F5nNS{_J&Yp zyJQ;NIc1r+WI`N)%W$y3G8@JNkRGbl*WE9yu2ADt<5zXRKs`=Q; z7hIw-5F=vIJEU|&g#ZSq%@QmT)AkM)=7=hPn^vSSl@| zT-@!;tJJhG5u|(Ts)Mv5SiFhg647#W-g2O-e&~EZMnOze<$Kq<;y&P(UZN|g6=l0C z-NVyyc<^Nb6LGEU$L}7Gbo>0(4pbEQr%U&89$rqaxlfCg=P*x4Sav$(y1(obnQwRN zvXj?uV&X+8*1CH|T zBv^M}ZL9@W40YkvYvT~aX0sX-)aPOTr@#AX&EzK{)t!{1VXB%aVNw#Q%s8s@W6x4f zz1VTJSauZep2o!ZwH*jLoQLOA_lwWpeEa1smG|*{c{+6GzK2@k3-#GuVjBo`zj!+I zw1j|RHc?g03%#9ifx<8Wcl1UGOvP5FAJF*t!=aykdp;kr+lo0vL{$5o{?2?t_hchz|A7ip8d5j- zl7r<3o~?@1D@lZzgJA+C8fIk1;%OG07Yu?1BUlut3@FNa)J7L_SfnH&G8!RdBT)Hx zh>kHFW_9rzy7Fnf-iB`UX_pHQK@Yp25M7=l%f90kj#(OB(FK{WS8+k6)ge{$vS)u8 zARaFc!Pu5QH8u-|c?=xDg-jQb8q08MXjhgYkfvhhF*>>^*m78Fu(vOTHiytjv4*p3 z8+mipfQ%~>*}lv^r_W>n2%mE$ZCRBPEGZT0=?4o64Gx38C>$t)lC`VAye|3rftTJt;3i_BRx#inm39KdMOW>B3orCE6@NCkwuv? z>C!0tbQaH5B<}Dp9D zK9RE2%!4;E07RB#1XrMwrl-R=xGNjne-74l{!Xj%XaP)@y9pHs8?uB%85qc0~R2nxI1 zX1iXJQ5Y-@IW7F%$LHTYyc{pRE2!j~L>WkBzYjB7^$i{ua0Y&C94?_PxHTjIvR?U0alCe)N3!B^LYG-U(*!7h7zD#b2Y?w zf{}t|7;V)|gN2eQo$m9GPbWe!a@npIWVjz6o}Uh0lghT5L1kC%V@ay<6qu^V6V%0&CS8dmJfn|iR3!Y#CWiMtDC!JXBA zw^A@Tl7B|M+Sd~3xdM|k!(u3)OWF_}O-{BH0=@;)@yPI?L}^dNh3n^>Z;zd7x-cL? z9CFs<X>B=*7&1bDg5sq+-n&319)S%p;ol$en|e~c^QvnDM7 zfTdy-iO!P64%i0=TW8n#oZ#@4fKqVE6mXa#t5M;~0IZE(L!=Y{E(%!$r)s(Q5R>EaK(8sv9r#d19skb|%i@gOOYlMGz? zw}pe@LEZ{3V6vkK#71Mfl@H*gNzjsv(dP|EjF#@w#<%vyP+cs4QWtfMK7|3mxaz`5 zth~UvnWl^f)i@Xg_{SUzpXGISi_w8y#yrd+jqppmG#_MvSmhWn(=!0GN0#3ToV(g2L07X`^v| z%3wH8-pK(rO(9~@{^S7yy($rhBOqIIyt&z0H`!0r)De;jrnj zK~y7n{SsN`5<8N%T_4cXrwJy}q@`d~!g*;C$zh(nYGRzecy)7|YjLQ@p@J5QR!WoQ za(TN0Qqy&VwvkCC+-M1XPst7naGoxn1NeBn*kMuQBsZJ(t57HaRd9EhChw?fNPf78sUy+eS58wtviZ-y zdm@_1uyu;zK@(Y6-~)=>fe#~9W4pl@zK~D}D~!^e5o)N=P+WUd8D7prn*7<@yW{Bs zgUAikm^ZVfP1}AvP}^T_C{om{vzgV>$nL)w60;M`sx!=~(qa@|njNEqn2j$Tum9bL z=l3TP94PI?UkU=Pf$tch!B*R%y4~D{R5np5glaO_6}r^k93d}buI9`p+p2&KSLTh$ zT5~Ds3ZFQ0v`S|qA(cWb(K8dFLSzi03xhA?bcP?j#G{9vTx7*fSOFlej^?yW4m#bm z)XgXOb>Zj^6+s*RGkH59R=!#KuvLRmW(QX%s=N*c&XA|Wr9|hE6eJ=BWg?MmrxArq zaN3au`cmd{01Qau1L$-}VhdyR0jlClgp^ng2v@n5ZMuYq%E$eShNi+)zyQI9yl0l6AF2@jB31X#m(}1PKmo!cIcqJF^UVMoe0JVZZ_Q7{|G5 zHtY}sBuX*?67(`D!RRZg%Pe|ocG!imL|cu0M{r^gW9dL6wI}j6Z)#N`qd?U#`JyR@ ztNQtZwOb#NzX&6_;!X+Vzhp+0vYhz=W(}OepVx9rClvaUqWR?%N5>w$5E)0%`-nD0 z@t9(sCgdy`Kq503r(~oXT~oGVkI-YuYEgFOP~P}JgJHi!>|_XVI9!NqHkwbi+{hK% z^v%0D%;qFBw8-Fs-$&+o8TUd%pqJ^MU%B_&J6=d-wEGw&Qe@v<`X0{&s!vK3u||R5 zRcUi!a~YQ3fK9Q|B8<^2AiT@VzzeF*7xvz~hEaKI1|4JW05oiF$9hK1b7i za7@jy?|ZqI@w+`0^9lmk0UKx$2{9Tv?nn$xUUGum5J1GI6mkCZ`SEc6@$tw}xZ}{P zoAsO9-M4S=ZnkTHyx0?Y++niRgOpBXJB43>O0MqKlHi^R$Rd^&g$jDJwZ)P9;s z|1abGYUi``T84PfoNB|;j1*P%co_c056?@S~s?wi^Rc^8ZS_J=28D2B+vcsRuR%a0X^+F$^rmXJ`B$pCH#ul_Uv z1KM!p6w5}?*ipmGhtl}strbWL-6vz{cD^G%JsFZYS)3v{1al@5gOE%aq65z#M@T=> z#s`pi4VC_^!T_9AX?li3n=*);z0D0K3_;QnPlhO^P>^y?MUUS2y7k!>i3_@-DW}Zg zg4W(3%$8sL5XBfERI{2iWZ|1e1X7}(dK6_wgABZgL7S6Gor?b2X9y$K6#5i_gwZ38 zNvi?LAShJm(Ni0;SE%7z66e*{v_=c95l8_CEOu;gUJFuix>(N`$H|ssqRNm;HSP$( z@*fLX;w<(oeU%tol+lo6qEhO7;=J<`M>>y-)3j(!tVll|fg<<{H;(nhwJW+pB-9GC znSE1UB49+%u=O%C3L>Vv4uv0Kp%tgzg>or7bi_1!N^8!FuOn!=cK}a7u)m=9cDY2U zz#Sl~E^q-*kr144wI5IQ@#MWcKwkJt8G8*bTj%y4uk4a?A2;vDJg`Mn#f>N*&{m>2 zGZDJ8ai&f)<_?Qyg%B9xX*UScx(J6FAbgF?W+?BdmO$jrxOB?urT}BEzqrXn)^BAm>J0s6^=7e~eJcTn$Sm;JT{aEGt$0C)O zq?^io@$T*hRWSf=Xr+WlN5}}1-uuirXHFyltYM9Ky#rQ=&#nP!N_@HAip{AT?>Sj4 zmPkdr0MhKklab)l@l2_HymY6_aLQy3#WMFloV(N6GX%`ZPThc-4_$YnZnXgP4B;=o zxc{TCUcb5D?>Fs*3VHS|i7%)A@o-rZc=wDeMT1EmJbaTB@ahYnN*?QoQ%YoY!sEo{{+Mes8rp6pp;e3K;Q3p;HVpQ2%eEZp*Y0`0O0jwI%%@8<-ZiL<^A4PJPM=n z%rJQT!zW904yDKpcPumjkinTULX78uu{~c+(cnXhk`aV^XPNX+GqMaf1mC=g(}x(Z zSDw!<51XKm{{z>6tW_vPxT0B*nqjWM$s8v^S}b7#o0oP4YhN$bRS<=2(m@depgjt! zF&sThr_>$grjY1emY$4}oUHQGn`0Sh&LK99_3mcZt~UV1md!XSG&Y%!MEH@BLcWLi zmL?bpIKG3?k5ZQp1ml(6l4D;QLEyLo0t}wC7e1ffqaxto*sS`xT@m_#4Mm?o3m6c~ zjTa>d&oqJlr@-E~VQ*7E*yIgG@ z;#-ciVMNgy(%pidq9Cnosvf58<7p~0d7}W7D-1O1IkX|G6<%-U@+86~USo{dpnLGC z8VS0c#!3iBk_BhEM2q7qpRfS5d`!k& zVBD%lu6*B?fkdB2xOMf-=dWJh?zKL>xc=_r!Kpx9ef9QsxAvL$&xg~}sN`GE31!OC zapkq(=#7Bni%nFsb_>F*$>1vMMZIX7`*!*L%UQch*wmL|b;3&LXqiprJvD2-wUqcx zU?o#&<#q+VHsl=KA{qcBaSoumWkO3RESKpKOv|hBzEl_Q5JX}&rrxCG~x&xlS^3u2rMtx`)b+N%XKqcY>P16Sl`5o;yJ*h zkr@C-0+>d=EYb8Z2ca@#!tuhCBC_C?d+e;M+A^xpFFE`*%bq#5GvZE~XKycHutrc# z$7$PD%gek54gooM4aj12`C4A|YxzYkDm#=TtAPqgvlfYH<(DtQr7o{cfki8!KW4ci z&$&x|Rut+XM+#4}_)*k+Q~`5Qn^SY}-zpkf!X3k6Pw|e>Nh`LY&1a7Y9xJ;#69ZDS zp%aZ1Hke>9lz{~Z-T^b3yP?7rRoV0pR5jjAhs787H;f2Q&HUm-%LkbO>pu4e&)emdVV^bQxY205GL%rz1{A%tNpsY-M9Dq z&8r*#eRj9wAMkFs?cHwu>SlYtU3(9dPc`ycI&bfHJD@j);g@rFz6?I~XDAObuBhP1 zQciq^>ze}*_t!h01+-rnlr4c>l&Tv_1Pr2wAZKTk=@-}A)uHS;i>!SHjZ!E1*De-V zTTfj-|LYIO?=O@)Di|?ihV5j{S<93Bo{okZOK=FM%pc9z3ziSKm`V(l=m>dT|}(J;{+bxS;E zK|3T%w5A}T6vx=gqLrf`UV5A-kwz9g9HF&34^$G2HfjJz+3E+O(H#pxQ3p-cknJ%L;~jA( z_boeJagT(pLJ_9&QcYk?PzwLQjfk*CTAdkbB3!;%77%QZ{V({E81rd?W+utW=c^3T)V3O4XP zT2aNSSiH}9yOJ#J{AZ@&_2^o%L~}%OMAX?9#NzGU4(p^|EyjJ1n_w|_dh(H&R!`G!%9Wxuj_W%GS4^ZTLOfrr3U{kz&hc7C!5DtT zkik7ZdS|_-ZEp_Z)ha5Aq`J) zpD*O9FJIl<@7CQgUB&@^iBH|ww^=Z!6t=(58P?RAHsOVEr4}`poW%kONR4hvFk^Gi)D;jAphET-u5+FSrio6eD z8IS+ykTNMq58DnS$fanzaaPYR9VOQQ1Kqy#SfOGtd9bDWRjYBeK$ZtPhh(MZo}zGH zo-mkWUYLGP&NF3bYH%kZVI?tF5aN`Nv?nC06rkV;j&M)pbauONjWgoD>Plgyz^c}3 z&!0iVg6Y6&x!d_>8_&qQRs|nWp7BUic0?l$NCWxUQbdKPq_8zW```@*&0gLLA_ggd z+)raI$xh@-x$5JdhH4dJl@h{7`vxRq5J94?iT;@@NCN$GO^d?A)7$mJrMt*ed%(5r zC$bO>NO8K&pY~uAGx%xgHCR6R*EEkCd)hOzdZ}dbo-V*BnuvR5 zj6{c&9A3P;-Q&%G%oSzIM{!tatmpOisgf>(58*@q-a&fqPL~To{CMdum+9D1&i4;5 z=W{>)!RN2Kex&vXjF%YY+8S*)4+`er`^OjfzzsgT^_~9YfLoQ}(@FUtP~Uh2m!{f0 zJ$ZS3(1mgkGeH)9DF)P}w4($8&8J+r)Pmlzu+YYtKL%}X9` zNlGJdfA#k62up+aEg!uksVkT9sEo*(xP5!G|Mv4&Kn4qOUnk9z&fY&ANR4;N8$<7z zZS@c$G1-lq)!Hu-q&XZzN?nXHEgQTH%X1vKu#2Q8m$@s?!4go`UQUKG9?Oa1n1V)B zCV|8b?N9>QAJl)^*|hcVlXBw zYGN*JTQ!tWNN_ZgC>bCceoX8D(ByO}$U0oSGtNlmEeoMQ`a){p&x5)WSCPG%i>bi6ZM+j3qbZ2#sj`qhBXrC{rr7n+ z>eOMz1L+?gGqXwHwsez2iAt1Ea$y-tU?V5kTvnnh|DnzqmdsIMC?O57AUE*O%gv3} zE9(v?_E|;k2u?A!|Zdn+3xzT)8>o3)Uroa8avaRyRALMzDiLP>;YIS3QC2= z_I9P~nPpJ4FjNP>nf=V`2)=|7Z!n8mQ>b#hh)8)$F~BLmjk@fr`Q5@t>0u!d4L4I zsryaV+=wV|Z+BVn(Kjp+K@?hXZX)yfGF*D!0~eewS^`pnkwck!&^=RjiJ(segdl(p zn9rzeSIvnm;q<~XgxZmCW|gbjCBX-fz6n+hk6#o<2OEUQQh-zI=T{7RAD0yYDCEBpu8``kjF^cgo0# z&#^$bl=j*)l7*|BOMz6(5p-wV!N(G)aUbGF(@?$ic`J$nR$@9Q9|W(N3m0sv-aZv>V>_0}!m0R+kp-Aqgn8bf205I}5*=(G{E zCw^c7)F{H1L|`)Twpo(@A_XzW%Cm(|DAj>OXMCS7`t3C*3IT2E8#Gz@dM>s5K6f>8;`=?kTr7Gtz01(A8G;skqWsCI3$^X2eZs}wWa zlzXdhWuUV_i1C3B=1Qx@S&HCf9fWMmpwAVoh}J%gmYK7r5ja>IWtaD(WStQz3B2?{ zWBl80wx&)bJoxY&2!u=RLv~#dus+Nqc!NTC0!8#Nqoj41O;M19s3PF-rzHr9Uv*7Q zr5?eQ%ohRV5)!v%6k(fU<+VgQ+i6(MSXVPl&A}6eO}SD5>5}4TjBFiNghsUB;ALX2 zrk(0-HbXt;Zj0yHq+YFP&*J8vvoV-^d}`x~b6)}VaUi|2T)6clf4mw-V-rjRPY z^FvyWj^J~uMWHF7mROLh+J<$y%TE!&(zkTdk`sU)P{AI#s(Rio7F%z;Uzh;Oyt3S5 z<#|kuieXgrfhKt>8GyP(P>YB`04!K(M`)-VMnfUvr~7*G_I^XLLOsjivVa48_+f)? zjDi5nms(@pt^oUd@G=NXM5TdyynVI%;??fW?G~_<)!o3{ zVtj4c=sk+KCB{v84lR_{lsp$iS^F#jat|?x42qYZT#F=@RfHSusi9a#kXIvszT18C zmIzPHj7FM=e&^AW+24RAiNce{tY{p;I3-8>}@&9~cA z??pEcFDDqWTT}n?i`UGG9u8-wFeJiL*8$Q?jHh9T{u0KRpdbRGKQsV`T9YJVF0H+- zpE4OM1RBAyQz;b_Y=~d3mXnVLn}@zW^Q-CDw3g9t#npo(;GWMMb6B!9FD zL(j0}qNF0&(zb7X8VDtd)X0Hk6nO=NuUNvs=(Ahb`!z+mK)f|FQ&p^9MwEp-hH`RS zkz;}n2(?qT<E=5EQF7Wy;mVVl>v~+w!wP{7mjyQ0 zoxM?OI1OD_j~$J3f1%Erhs(Mi7W25Odv)QfNK6}t4uRCiq3-A9X{at^bLjC+>od>a zj>~RZoJU^(32G+da-v)CQKQyq&;mR~B)t%ByNZWkqpDQHhpebVW)Jkmq?B;!W58mE z;YAeXHte*}|5J9SC#@jTq5x;3vOpc0RUAPT`X9(Ro%XAC3hqENvXah?7P^lUYA=QI z;bWxELG>5LLb%Y}pmr-MgFPlRG#jJy!#DPc7$`uYT3rc~D9smeEHCIq&`4lbR5Dom zEMx)E;nmHSV?ff-$$qY$tM7<2w1+!}2lds%7)ent7yL&E7B9|}nGd3;FPHTfi^Y0T z-@Nu&Kwi5F<3dtu#2paDC9pFnbNMK-Z+baXu+Cq--ct@g9{Z=m*$05)OQX}4zw`B* zUwm;-#**Qz1~N7`1kCrwvU-BTP)Tx!D&gGI%f3c0^Go*zS zu!j|s+uB(9LIP;2`|XC3|MBSST``THe{uiKXRql00+w@!sNvAb2L(8Ad@=sC^|?O2 zZ68<6TriqTq3y*VvnN{l4o+7;%yXY+m(8l4dIFg%S{H59f{30d=-|zxgr~`~9m9CM zj7rJ^LW^}-1i_$n84}dc`-nMoN}9$#NTJjm8bI&>TO%rV%BI%Fc1?r_A{o(BP(aFQ z^TpJhN5YmYAOtNG7{P?=6|-V$@6!?Vt)EVWN*T77x*;yd(V&$?H`u#Utu2~dV*j$s z=Q^PLrhmTt4$Y!gjG^EPl->x9oJ!1Wed7GWX-}3@5rX49&w(%u@k|#)rZ_A<-_JhP3l=euFylO9<#K=wqnrU@(7$^Lfyksj~tXC*^KuaVcQ&A0I z;8}?xrYy3j1$!8jdP8hIjg5dyi_VSdxYEVg84rL1xnLLDSnr%_G zavu}%k1#Bs#h;@M)YRiq_JTQjO8>VeCN3`Ucm$+u!;j^gGV6) z6`g0+ULJgcOeh^l16VnGN)$bzq2m0s0>XP#;}g=PH_!^J^dsy!CCv~!@~3*)w2fBl zRdZ4_poOGbAOYNL+R!Un{NKeIXE&6Gc_eg3l<;9T&{P7D%`yfcFw2-o!=BUpg$wJx zceiO>BO`srnuet+!mU*8YFY8qxnW3%wF*bqDTS^^9m zgN#WkGiDgx-{3P!dvE0Jr;|55c>gI;1Joa1PGrmNX8Fr6UTxPc;~!sqquJry6E!Fp z50{?&m8xEq?z7CLgJ)fp7Jy`m?P~zwf^VHHiHIOga6mY!)fs$c z7MQk{<_y&dU1kxJk_rM3@<~rQ5JcRC&Y6F(sXJIO0!5$OteUM;cM;GDm)6vUUn6Ai zBzFbFvjTJu5{QkHhDr9s5-Qymfnr-NMH%w>`Kc!jZqBP6MsN)ekmzMCE^I|ImM=yr zj)k6<03U*^rsB4cvS?e^g7V~Q5CXDLk_U~$LI{PVggFlRiZ12he~SqPBVq8En#yvd z#GV2wAE}i@kXjCBg@|nl9{nIwFAz$3ve$Bhla?YE?O zt%oGiTO)Tg6J2}TNvd)%#NpXRr6{9VtibPg8+d0A_Y;gC@ZvNffzfiM5%LQu0E$4I zky-x>8|m9f{9-1;Hn^Vpapfa6GY6b5v^3rpJ1uLUw)t=(RMxxYe6tu^pSaayruA$D z1mY?W#ya)$rJoNz0=as#U;X~$fu2A7@cr?4q$~v*2^Yj9-BZ_{y7}|X0#k!lh%=N_ z)0W)ERQKq$9^Q19=myUhFS9W&_yDzLe(1aZ_;NT}e9N)RD>~Nv(v7e0_DUlRvq5BU zyjExY@Nzj`I^VKA_%NZ9h05@F>Q4mzxuQ5>my(5$=Xt2f^VO6izxezP39s7)#ryk5 z?@7e^nZeL#wSwgOGZp|gwEWt4Dth5lv>`n}W?B#3-NkxLOi&-n$VOfaOOfTxnc5cM zn5Mws`fk5kuaW1+rxTvIqB9a89ctV2XFFHPUPu5WXV+OtG91uOv>QO9a7;?56o61+ z5rjs-dv)1s?+}Rr>g5jg7z8Ov#*!=vD8fpZa*~}OqZKM#=N?wmjO05q(Cl>Tz(Ew! zRxn!Q#|OeZm^$QTFte*PGce}w^?m+c&kswYv>7!G1`-@{8Lh+WAaa)f(vXvZLd=;D zrcE5)w#yB%(i^ zGEHPT7!DWAXHbYcm<7AB4tCu4KxnZy|LEr9cs*hTOj8L`#nu59i+);XN>809jqDdH`LIK0_s|PO;XaBn zLZX2{iZ4$I$cmeTfJeX#)?v$;Hl?nhEZ}qlP1n(LPBld_o{QJSh_XToG&SkB{lk;q z>TuO!OI3e)e`7<@hN4k5uc>y|1yC3$_~vT2X{FsI*YSAnMFWbuq7=4*f@>xzeRtc` z?{0lc$yEpdHJ^Bk`MJ}JWTy5Kkst4Y z+K1ElJYG-_W3NKH> z1btZ@RpjVx@LsHkyc!Ds&8~Gy`0>!a+O1zs-GPb8FtQ7GBs}K0%q9pF$OY?1jBl6A zwP*k0AJ#QWW>3zfct3j~2_t}PX!F&8<9SfK8>-5j0s-8mXIe9L&azxObcO-oG7EzT z5^deQ*)5U0xx8*p-MG$6T3rp(MF>c!MtvBERXmB)8#RbGCXk$gODGnpF-mK&03dX7 z2+f~+-@NKd0+R#0ox(=n6P)7=3XWk9K6=WtiD}$|P)jfWd(`l`@gdhp9BQl)ftiD_ zVpYX7(8>;}l?sVK$<&ww^ofPWXcI^rp8YQ6NEnTRj?a%t%`3glO^08YsY$+4V*P~&6AV8*Z9Pd*Gz{+jth*(edn zki*DQBO|BKf|tJ>o;`uh{KjWKO5Aq422+INzKWp05*%}WBR!lHbm$e~y9%$*1>=SIX1SH>Eg7fCZ-5*XsCL-a)i zok%Z)HOTz$*GGMotbifAEZ&oC5M7ZfQn!<~1SKGINh)%!_c35-^+FUJ3RINRLJX95 zi^Wrn0Wgv(VeVjF5X?TI?{w+tTv);)=}h_s?( z?`ym+7S(k1a%QcUk4DXKg+y#emX~3`Oa?^+Dh%8Ua-b!tdZyf?r|$&A%94%$(|_;_ zgo+U$k(dnI9*Nuy?QX#mBtdR2`kVvlh{l^!4@r%3d$K#1aXg+v80poD; zQk@VF3F>9NSbWy{Y`2?C50QWLQuz#hyYRmuUT7bP40?RPHG1|*O`s-kG52`5j3D`H zvtn}dG*owZHlYgEu!TH`|1wRNsykIglX+X$T~!@=h?fKayB4Sosh%+7Z$cz{WL_O3 zw5U04$zjG9yuKVl$^jl276YjR?h>-DcF)pd-w~OXFJOqy6;Dye}vtk=5))0IMyd z0AW2C8WfK3nJ;?n_iCAl=|9BoX(uHZh*%AUKQ>ItcbznIA`*^;`R#>q}1p(DD!^j0kc;kX|tW z*e|{Y+)kfOzChsOX}n%z+f-;~W2V0JQ>q6q90C6YxqKONnreprpmKk$^B% z_;aNy|A`=&0p1E3&2({oKyGEcRf{aidxf#(A^{_5c_DTzTtnn2JIy7R{gcrOV75_B z$g!wT6&^LH05D06_yeD#vL0UdEf74m_{Gg;UstG9TE|t@nrZi3?uqa%n6SQHu9%=wgW|AXytyR<*@MA=*WbOw z2wYw>BwsNP0O^;WcmmL+pWZ(o&py6Kh!@hrG@iS$yA1dzHT7!g^&})1{z1>NpYB#G zz<7TWJSaHnMLh8cwPCn$ZAM1HSY9cQf}sc69$eCz{`k%Q%e(bQa${Bf{B`>$Z`Z&0 zV*7_*@9uYtgD;Qt5)IT$G#eW)wv%xFfP<023$e#pr6j0pO;8`>ORtnFg{bdSEIWzL zMA=qVOk<=ZwCEQNyJ?s%W^a8U*+rt!Go6(=gNRxHBS;ba<59YSHpy1{2`#r`<)HD3 z7D)>OHs&`|V}TO>3=JGmoCpdqA`gAETP@~6Uch%~XvtTcrc@r){ zgETS(Sr-QEOAn++k|6t2(+wkqs^h63+s)`%D&HPTXNbZ0;Y^WHTX>O>69UMC3R|IG z)e4a$dR1(xp7>xJDvm)CWpGhuipA&vJ-KZ)mmUGBnC+E7hB*TXGl=h{TMlT+hOjR} zXh`uM`P*h|hUO38PEu%v0y^=f?q!tOY#?bUWdnj^DrRfktsMHPKQm6H6G6}bWPDS; z89Mio#o)kS_4^)(G(cLm58 zih`)8G}FKT`Hn%qe!Lv|=~OpF`Y+n$AFo%Z!S}vhs{X+l0_kn8mvh%lrvqrCQISN- zS{ri0;1^`Fi__f_&7_7duvpB>XrQF&&tHkQ4y7xlq$OpF+$d39coc&%mTH?Y5XFd6 zZ~&qbbI;Z_xz}#lv1}^_Eh5q$?V&YJTo~}z!|_xOXczfQ&=2|iYA!;BSiz;MAC5Y0 zr3%E~-bx5|1waz5oO?t$wM(YZrjqdGhi-hc4KOAL zrk(iE@$fWg-bGv$E*%_AJX7w>i>2q4qGdYx6Hy5&$crL!NYNuuTiGqf z2sti0>e;wF3HTFr8O|4Fl~Qf0^XU{r^Ywp8y-3m}2l_cM*btXX4%Ca~u?VyxC}!je zhl-ZW6zV0wgXEP$4M|rf=}_!nDIsSkk%bsYV8FVvMEEHlgNSb^PZtFnx)@{{0?IhM zwoD&v;51mVX+vS1=7S+Xxe&gzW?|}p9u5tj;3HzI4z0;iRYRFeP=TGrx9`@a^l7#= zGfyIB3C&%eStQ6pSj<4X3&~_ExPT^_mADfi5W(3#DE`tcSdpZu)o_p1SGr)dgrsE##d+I^TFKO z#o}(U{Gwf9O2|zaN(JUE(dJSby=%tG8tu6Jt;Q7);SQ`PPtw+Z{q^l>od4Z>A6rMw zGc4-YtHs~jtv{Sc{*BG_G+!)5CNc+lpT?mXdgs4_i_@SJ0c%`_Ds~6GqWbd2NJlSB znI8m*>NG%YOSvg{4r3(wMR^>6IK)pbq>Hgk^C-vpYrL9IgU%=*Bn;(uUXv9yE4q0B zqG&8XKn6u#JO&wzB+yWR=Tv%V*50lx&=QgWXN9XT)$=QFP(fTFE@XjBawMN!hszJg z^=+y`2?9N4;Aur?JPq^DSG(2L$DCN&rP{!4q!W->*Uj3D?d6h#r(SScF@zVXkWi(| zCy9(-{wE;RIH)yU=!u}5#phfZVzlO9fO08`L0(dYM~Kp_ggnm21q$D~kFnzU>uu+y zy&hOydlSZV2aF7aM(wt`CEO7mkeNK03w;$};|s_^#-^^Vq|_zY&%Mv_zTziKB?@C* z%XWSC_V^GiO^E`!n6y1#yug%pAu3+UDSt#&hwvdz@TFl0njL{KL<7`B#OEr7MXW8r z29y$u71(Bxrq+E{Cv$(9aypjxuV}uo!9WNDW;%;k?AnfSJmcb%-Q7o%!sW0`@NrTX zDWzz!CEwr?gyiLyp>P(s-LXLzjF0D+wXsO7MX0Vl^S>$x(+0&@*TWtqM&ZDr; zPNr}&>`r822a*w@qlI3P9nH+ty`E4~>cubKZsx^^n-aI4FH8@8l?>Br-!DREWg|m{ zkP`p-KnLcoD#c;g5T*KudJ1YUE4<9jMy1H0DKcE1l_I;-CV@l$RWlyi;*)WS-#uO) zPcGw*h-AzM&>jx<_Ga~Nw|aB4dbMA^+N@q}n%iv)(%ou-$NlD^yInDn zsUJQ2>-xCY=Af*mx@mm|(tG%p)-Q@LROzD zJ@0p0q73~Rj)oTcOLaJ(VIIFAvL9UNiH#SLMMBU(6LY#Ok<82my32(~h88J5ys%_h zUk07|mz&LQvAo|jKYAOMjbtFA4^tedJ@oUrn~uFpScH|ck3_C673sveAudy5^gsT^ z-KCoU{r5*mIIUKQ^37`T5ANC@Pe_tpeb;nt&bzcrn5tKEbG#UAt|V)Mu!{u~6-ukN zM)rEUvy{NOZ&uZAiHeCku5su#z}G_2HSe=4pI}QJ_Zy` zH$G&TC=rYqr18mfOE|WM2SnYJAKj(8SvNNuUto+?o;`mZoE8%@!;Y#6XyDNn-|#8M zR1B0COeK5dODo{0-qb3iNHXPYY(W$+lJzPJ_Y#1PT%{!*WFUeNx;e%|VYjiaq(I?d zxkVWu&;TvRV9HOk5 zHcvGb<$mQw)t`{5Yv^`Vv&uRrK#{G9TQGI~+%+$~6!K?|R|D{=ludP(SR4Y8&HNTl z5TbU;Rzwn&5>AXFasyV!sZ42vQYESW2tgq32a+E-tXkG>Mcjj9Jy=X8tql5yNW?06}IWv{1<=&(BAEWIkqwQl-2KX+9nsZ&a&E~C9{A);^Uzxw$t z5RbW07D#0HAa2g}TKQok^b38oQeU%&Ga#4aw(?8w0+U42u7*9JtKjrF~!U@E<>zd?^4MUuu#QxiSb4U*Vd_6ee+KW4*bnOHXbem>I1jd zW;EAB60SqDABlw1z14=nh`yrrWPauKVnER}i-^7WiqYxDk2|n{%|PtyExthLQDEAA z$qOzBOq2@-Z6)WQmuYf9GxwWt;d&AD>S_L-jXct(hdQ)1j}W9hi|Y*>Mm*$!il&)> zN-#qH3`Il?+fuQM3Y3uT+53@1=)V4jIK0YBZNmjkN})d=k^sb?=;|3P2|#tJ8Mp0% zoa(JtlQX|dU-{s4<>VhQT-$Q9Fh(u!+kp@%vSzN$>|Cuj^JcT9gO7}8hSwXHL$L!! zd^}ADDi_5U&4^RzHFdTsqg3}mj+i!eLToY=C^(LcVP6P#iZrDt_Y0His@>kR==7+4 zc$MqX2&C&SjHi9ISe3IJY`A1ojo72wayo8I&0}Q{X{=gSKmds&DI`=-%PkXxQJ7Dk zv(X=W6AK+CQK46*DoW@Y>t>_Pg&{?$;RT5`J%NpOy-s~HHjG6uS~ab~1P)n`LuJvz z7~#F>LC=wcfYQ0&dW{CC*Wh*|-ox)aQR@?Qa8+M3A1Lf%bMQtl&$B}FNCxsb3WN#r8cbm= zrqo<5vqJruvvagmPOChkkV9BJHu{=8P%X&JaPG@(#`&pt76M=2esQl1LF)v_OF-b& zvZbDHnSIpNfjN``M`{p(UQs!9=zOzKH4ff@b?Ceg=e8viIZa05ub1nay7}sMaqB~x z6!`mu4Zzdi0zvoi1f6X&DT;$y1EnAZzG5V?MRbR5`u(A!#(Y|lnCJh&?P^E#KMll$ zm#P0?1vF=Ellffq-cY#t99E1?|1DZqn#Nt{y}mi7dAUs66>}^R^@DNib?b7+wr&3X z6G6@H4AW4G{jzOf1(thRc8(3xBBr>8m$G;VxIp8UD2Y~hOUvW~Zxm0gkZc)`+_gSx z$mpd>2rHwjW5-kvHx7jeNq{bw8>xy)v>%}X2#r%lU^?{pDY)#sh|9fMh-ATCHgxFA!L~(G!&o^eO(a@4@qmuFxoDN8w_IdN-@Zd+!?{J zoCARQD5BUGnMdSeO^S6$N)0Cj#VI*XoQi2+w8XK3f+E29Dx)CxV#cvQV>yYs_#oX} zJ{2!iVih?b4K~E@S)bV)Als@kIFzHz&?n9H(OY4x0=Fw~0yPWvnBrJ3TSN#7syayi z;#SH(9LAS3JjiVT7N!w3|1Db;4PnjDu5eK`{phRB$Ol0Dao&WC^g(Em6ngoD0Krwa z`+YH~dCc4M^qYFokS(~CB&LfqGZJ2iv704`J&Jy?6I??FhPT8}^sp>ft%~&u)iho* z9g#AlXon1BNEe3EC+})ZMWjB9NUD}8rxQOPgC?=sA0z8L{x*Am_SFqNTUoK67NDIr zAA8~?ZXKwu1rjBh60X9L7rN$h6%I;`bgB=k4?>&)tn2!Rmje-U$h90_?SMPqvXD1q#!3FTPaNBxpqa15xJ(J zKCXSk*I(|J+opPd91lZvuDXvt5^tWVFSRSsR5xCu*?fO?KVBm&q@+d#o-&AOX438b zI-=$fz4$?gq<;e>2^fI_FGnCr(L#;!#ZQVEMMfB*zRiR#Pa~-gMkyl`0W*b|P+%DV zaIrQj$vrbdX{%?i`t=koy*z-OV<*^#t2jRFZ*uLNjoj+0Ac{j@Et;SK zvmqXieea_U3+7! zNZ}{Zf@LPYUBqVgECZ>VUCELYJNj8t<$LCZP9X_3Ist$sl+&!295Ay$JG{HLl=46b z0SG3xb5avcJ3NZu<3rcewRDH7VB}~9B0JbMW=32bAk8JQ*vtDR`9@$q?KQp$U(5hv zXPQ4cbNOYOPW^b8H!(O_1<%dSXDwsR3!j0tQZz*-bdr#YO4%#Z17{femzT2&oGRv1 zkoEKXB{o-{nnH7uyqEUF4^UptIc?kJT=hza{TckaAD5tp2=Kp1l4 z(6{UD7wa_w{`O`;n)z=o!xjaQGOruuU=7-m5qw3DSE{A>2Athnuo z5Ia}@a4VNDy)SAy&i(uTOyp3Bgkr3dxe@3k)PrA~jHb-Y8B__f;t|{${-(+%Ru-xkWUhb)yu#49?k7HQ~%s zl`zmAfSr8D94ufG>{4lX0j`G>6bQ1E;!w3Cg^4k$0(bCEnV6&`3c+!au+OC-uY~p4 zQ@GFC4_QY?l4#LsjjqUtD-0DgS}(A-q#ntXh)7ojU1doNB1v{3Fcq$_rJ#-B%B&DE z3kVHS{l~aV#4H|1oXGiu8p7! z9rO4|4ri2@k~t!42~rtWyHXAeIw2P*@=~I7OTb7y;_^a3btxJwMv;r5%>Kbl&oFJc z!)_J6fYFzc(<3;z3g^QZbm4D$`KyCiCR7XNV-PGb$-+2Gwsf&4^VhlltDoQTlOl)| zO#zF1?fl~FRTTefvD)u8Hf1KOVT;FxA`2`V6X`Ggxm^56%QU4dv8ZucJXe4A#-$Jp z>F9(&Ls>7#2i_d}w+~&OYi5;ww^^+mCk|xJ7WTgNWyG=-?v%qRDf)Pse*b*&s-b29 z=^*3~^H2!g5vx4`g`90<7(*V;j54nxAWcJ8(!Rmnb<@!&PCND0i0gS>`_Kj4n=T4L zAIoV$7k~6Vq8I?!MSoh9{-E5)ad^5oLCBTbzHZ)2q97p=Vf*SeVI&C#Pa%0I0oTvi zHywsg&oVG(oAz!zv}G|5CU+<9`< z8&h3SvzLaL{}F_it&c@U3LJ4*3R%p$19ptU*y%of>=jyFHeN4X31QzW(EP9|?_$Yq zO%aFBvWF@5)(dAy1p@yO*wx!~b?n^55RWTKBA^xU!h4GhtU#m>T!l=#L3hW#0t@05 zlQ&7Ajn8InxS{IwP?59>2ecCMi~#~_eA8JJb7js83EXMmhZcGtj!*O_aVMmU82}h_ zMn_0e35XyTc8F8}ijsMcxRIk`Hf~7nT%VZ(F?YrfuA~7uFh@K+wTB-l)xP{m}4a~W!=L>~0AI~RXgM<*@ zEZW<}`OsJW=*dkqL3*GQtmav&1}LwfQ2C}(?Ly1!y)+-~F>}`y;1(M;#59&CC=<%+ zr4Pzg5`{RKC6|C1@nlUKBKdEn8qpaj!{mx=>nLE_#a$zTVidBaKzJ{ptv?Jdgh!%x z3(cuG93T6};0;;D%9SGG;vijQm}=RGrvN)Z#J@8FHhzV$r>c`Q8yCNP>!mt0o(3~g zVi^SvnRD1f*=h&-By7U?xf}R9`)t19eCZG8^YPRjFWnKLp8M0_Mdc8#3a2a%YQF{@ z(0p-A3FBE4rjxny9doHZo`&B)btQJKSIajyuAB)%2hx8i_cZa$^JwZ^jVEJ|-#rgM zzVt7d(%`U3w{p(6Mp%_Z(%fuUZ}#oerThJ}&+WP2EVe!@s9Mz|MkSGQ&S>%sUrUrytcH%w&} z5V1N#(k2$Gc768>5;0y_a7~b{L;_I6M!Y%*GwETLAJj}?=vA|Zd>0Y5A!eIWLdJyq zh>ig7FUV3GvquU58K7q!M-K8^+?-zYk1bKC`qFOP0mt@ zZAABX-!AAQF+=qPHG-3=&8q(St!Dy0x&jc}LT3CoPGX@t?bB(v*`iDvP(1wF#duTD zxV{`Qu&YrD#E6y)?^F`O0LGo!a*R3?JF}SPlQ>(HAEHql9bJOB*)&XbSKFI*wL$U| zGZ&5D;=`Go)EJAdpO_GPfTd8)mB8^Ct5}hX3(!Eaa*ogFbLcRc1- zz^V0M^gp%Eh3TFn#T`Q0oI-FE1j09flDrwjw~KFVB35NdwcFk3rO}YE^unE{T@0sjosgo8aXk!*55b6DyXB?xtqmF{k}SyO@TwG2OX(ij zLV_$sYMzmaxrv_svIT>5(QTBlGLvX|fwXEs)vpwX$nLNxxNU*(#i*k04a=kor6jUHE_&sidu#dot!#-d*_`*h7Q7()G>&i z`Rrvpq=eer&>bvtECWk-`fuh`s)R9%qj~;t9Lpk44uReiq`7WKO~CpYL&U$Q`s1ks znl!2bDJGrda%3O;z{K5aLkX18ps#{jS zxo=m$c{qJIU5paS4I_}dO)D;Shmj0bdw09=Y?u!!Nk%~%^i!P59JOO+ijY0T!Z__A zhUH8G5x7N*e_=)|i`X4tqt}-fYfy^FjN*&9V0Us`4g7RSPzI-s{PekAV*&;5+fdw0GKrb z8f7ry?7d-piS->{UKaI;Y1y4GjYjCezG4+N-$(%bSa0pCsHFnKDBh+`Tj`LGn(GU; z${>LNlPyF8mmx>bmP-j{5M>60)69V6LUVb#>FsfN;ou-x1F@1~CT0UKw&e-`-oO*n z_bMtl=TkspL^4!>IVlzj1#%&*(Ab@i!_ZL`YCUSfD6Ult56duZX6pK5NH)D{Kb+>ZQemd@w`IzMKh%tiC%#23zfl8h>%W9v(Y$gP^Eg88P2;5>MLlCUnET6& zHFSyNFzpTs*BBYXR5Au4r-ISUWLiKjNJ1b8*ptp&K~r`;9>{`XM4~$1%>C7nl+Z+m z)Hj3;68zNA>T|a|D*gZD7k3y0BfL||#Y)o!e*k;xo99lffWRTv-j|3NK!QNCo*?5Q zLwx+oafrqMAV6tNfK_lei{7Wga@?d~(Wm`S^Vtw)^wT5ZFr%E!Nty*%=+qtA2Zss6 z28pnJ@^OPY0>`Cf;e$C{ThKFs=v(S1O4q0=(id*g7_5dOD5O^4fZ@ra4PuZP^Eo^h zJY_LOT>KEN3``LvSp?@{!|x~oZr~O=K@dp3tMC5qKAzz7Fa%;`#-ow8Dp6Xh);(a9 zL~b@J1!xuy zgrqZ13q>`8=0HakqoMi5Fy?j?9GG62(3k@_s8?Z<@&eGYDNm}&F%;|8DfcfAKVPpGg*en+LH8%A1qnP&qhOf(0Ni#nsho zRo}12&2mB#6U;DJxgYabDi8hbK>d!J~&Sm+p4!sYjI4 zPxW@`2@c(FuAaTT(}F+9MH%UaK6M`h#I0nQ|9DDCu7Y($c-N7$kIFDW+D9M!aE+Eg zrqgB>b!UDLC?aymOR*4ND7q0M|EKtZrL7X!x)69J%RyL?S2zYlAu>qWNv`!JGf`?R zu4pQ(VLXVDBa1KY+RIRNWKPnlmGA6}@zTw^ki7Ofh>VtUezo2!5pqfMCsWhdMMo$1 zo8`*FpRHAGIRJhJ8)jX)@xc;zxfADZ!(`A)5zelGSo4ZQNU$Mt;qf1Su&sg#=|*Jy zV_+gYBzc8p8G?K*@h30pVnAvS284L)O4SvG%uYA3X1=itqq)nBL=G%n-q;3stbWK% z<_tyB{7GhpbI3laot;wP)d;4kZ*KOl?(e`3tW($184|H|y0V4qt-No;1vg?=*fO2y z;yy7t?86@4!8vAawU=bX6K9L>Gp6qNH|1JOlvx( zW(XD1DUUrZZaPqFzPi#Jt!OaN0fTU@8P(AwRhy-kaxp+=tXEVhxscfA7{y>#=HR;V zLVY|8;y9F~X`p~pIf@W)T?0=1K_)39;L-m$mP%K#3@Kk%mesh9=y@7O(*jy)mO?T6 zbdZpnLOWo5qGGBIWs%TgWC0v4+BMCp82rRxcN68KsfziWcEKYs1Ra7B4>m8vs}p#>flS}F&2F`1c6*s7 zd<_dhWyp!{lFC5yEkpPTf`Z9X!^P{+!nBb9GnIJaiH5*e zp6ZfrYBrJ#JxW~ZK!qPVsY44QgS?+mY?o-54YTJ}HylZRw^vy6-bVJ|1Bfa*BFZp6 z`J$B|BW{N1*Y&RT`dS;(F|KCR!dg<|NJs{UG)KCFaannukKq= z5{@~7i7|kQ?Y6b$k%<~QE7EYZthg&W&<3HtB&`|?gTtr|9Al6!ZNR+Sc>XYV>NaiT zyC~aLLz%X18?Urkx;l@A5weX3q7b%10AIo{JaD7~m^&a#$>E}8^>P_beXd-(Og+5$ zN)=0WSHMduBZN`-H5BYVAsk)^j;_!GA6+3W98k$CtTMn{8a}*rTrSikaSR?4U=3q2 z+Xfr5l5{qjG!d#PN51*uOUi$SotW_&Y;!(#O2MN2h@O#a-|pIw3pZ`M;&0imm;7Jx zp>n5j=^Lq5OWZv#yyTbgOPDuX5$MrBD!?Yxjl!`Rqal+u&FyZRw)x}p3$)V>k)SVF zzz5b$To$<0M3g@h9F)A)iHEOc(_4QTD21O6mo9~9n#$71Kh1>l+{q;am;~}ELeb1=RDXm67yuXz!t6Y?P!k+woX`x; zE5E>%XTaG6p@e=cm~h2Vz|fQ&A~Hs?A*V`LvgAgSyqYMirms)>wwDudV{k6x1(biE z1pV&K>({S*_X}n5;pAgF$)A{hU{o6>S2ap-c|W-Gp~_KFG*Ldm|tcFcca$^}=QWj;xU6g4c!DpJc59 zE67JT(byqZqclLc2_Ml0{(w|byN6T3rXxr4!P5~q=%S#=k)A?>ZAPmd4!Tl@l(XFr zp4!#=W4Oj*kMJ*gy(UnB)8Iv9;%Wx(hAPcWutEWJ`thh1<(1krIngR+s;_x0c;(db z0aCs^t`%r2frN7@TPUxQo|*|0Qe8%al4J8wFIrlz=pCe#A~_CgbV?TFxDD(3$e)-*f>fG5|{l@0Byz5!y-Z3oDxc< zUufX0UpmWn;4+lso(Du0#vE6bq3P0jnFZ#q$w@XYfbP-1nv)6(wdvB=CyNyy0{F_) z2LkPe=E&&8w)@pQP;zx*-Fa3oWOyC3UM+#s#0&s(Q9NJ0ghU;P$43K8eHM9?jWqc1 z6i{OfE{%__ks|>`U<}a!*dvb^QioA5XOu#BCYhlsG&rIcgoC2=Q9Ef8sy{!WBg`xF zXeHGI71&QRa4<0%rVJ2Be&IYd0DM3T?f7`f!2uWFa-2}3BZMJh=qrI@@pIp@f_S|H z;M|WdoptncKRsWD%K(9B&A!9|1CO38sHh(H02c?cIYuB-jM}Fc+Fu`*@wXcbMpp(L zo<^@%VNd6L|I&Rp4Id8PZJSUhCqZNR=Wc|EkcW{yQP?B)kG>%v;OqcU_OTa(JfNfu zK0QqgkXRIeRaOJpQY|}qQXs~X>rTUh^@z5bc){xu*K1%gX zsJ>gZjXJBt>7vg>z5LfsWC5k9Av)YR`B2Lb&j)@%>v%Y?tL?@U!srcxoQOnLYXG!EFn`> z@~tx6l4d$+rU;#Vdl;39oE)s$A(l~&lQS2loFc@?-H*-!D-dWk>jP9H3ECpE%z2Zu zQHHx(EFA-(0Ew2AQIHpS6;q|)7p8TN`HXKNmqi(lr=m?5WjhlrNs2P)78>Zv!B}lz zX8>Og;UKgb7GP2=Bo)MGU}cbH3!sT63vUjQ06rSLRK|obX>3KfNYnsfO9HuQ6x}qO zlWJ(t^Urx+I;_cwgt`PrUj`sI@PVGxovKgzvPfw5QdU5ut%x8jcv{85GAE0XCSP=o zaw`%54U%LF8@fJ_O&6MplVgbn2!lALiFpnJDA5L8MD|`+C3fEl(Ir=NWjFMWa{2-c zD+`Myl^6*~qp?@=!n-U+1qGbql4`SuQem@Nc}k95;nLue1b-ZfthE6JA&Ye5kk%;} z;lQu1=<)2AlEooTz)OgM3dr^%f}CLn7@Fcw$}%05F2>kCyZ-AEN**zG>94oKhwXYW zOv-T)M+76A!ejopvg$6jn9EV*UZ3)VVB~;)gdHFl+lrR#3)Gl2@f@M17k*4$7ux5E90XAFk-nPte%xxSZ?h`4P8PXYv>{}mI zlp8XK^WXvtI`xTP$v+fPtGel^z##~kIRX<$ToIqL#%J7<6U3?3OUQ*zP4;f%onn}p z^g@ol@F{Q!LXq8^jtpfOG zA0Wtr=G4^46@MYODR4qRg3LwIGE&%65uz(&MK2cP1;0s()@K|RWy~E`5f5%mnSwbX zP1@}swdz;iLS!=#M|DXbO&oS&ln70X668p&!OQ;{@aey?s`u4HVV0lrl)42|{MO*_ zzt|_DMNY_9mUJ_LDhfJi43VJP5}}a0aVCjaKVW&E=mD5wj0E|?6;65sKs=0oHmmB* ze(}!N+fj3f8Tc_^yOfVCv#;d<*1xpUZX~1onrUj11#{3>o9guj%W-P#IQB^S$!Xsr;nr&xpX;Rgw5r;Krg z%2y9qtY!mSL|kdsFgQ$?#I3?6(o{b5mWliaW+h)+Zc zB9zH%HWG=Y3`+nS+c5)um;m?1yU$ca}SFBQG_f6|O6-C3J{8-}~a!}yD zZC0+kNfI6xS9Z3_uFjy>hy6g3+K{K=h(mwqoxEG>hAt87e|o>Cf)SUBOe*8(b!cJ( z$Z}>yct#ZF$;03hq~aG;x@4F<>Xov`mtF(IKptGYrw4B33xV}em+!nO$B{7;%|2b^ z=Ks&sn?1RXEO~lZ2!c!I$y0af+kJa_tR;w3%>+f`#o{#BZgoNwLc{kd5_+)^_1^I0y_PdcOsUSm;1V&!l|)aoOqFOg z3_%B09L2vUhUg#ECgP?Q|M5n7;a9hFpUxZZ;(z|Oxdl^F@#w~EGDj&69*6HhS_omU z!cga3>$G1pSqp=}n>qw|pizeNxDG$?637LfXJ+}(q$sGvfIm(D`QWX6AkdlO1ORy- zQ{Ua1I(uFX!k&C*#}v#E#D-+KgtXdMeqOy!4>r4P8T0knTxjF^H4)_ea7`&1h~`kZ zZm1r1o9@$LX#2Wx3Lp29E$$0reVg_JbvQ_0Nq6nF>Nc&2F*ISlYMq<(4P@ zgRJs;rH`|)ORK|vi$NiAoo+XbDX4Y25^!-Qe#)Y1T9@zYYB}UPU9JX95h@tkL)D;F zH8I?A%vFO;^YzC`QGL3ZnHw_E;M3DS8unGO`lv%!_wD`i{WAHG3Iy!Cy;Fp`Q(9qZ ze!VYOgt6PqW7lm4eS=ZqMitWv-(djH(VucC4Ju;rb;R?!GP)>49iKEp0Dz<_?&i0g zDybgqx`esNvhy|}?-5}NGD$xz6hL@UsU2n;_Fg|CKs5l7wxF0W110puZbi0)*sx(5 zVgHqNN_-4B%@GC1hBUqk=j0!U%|`y|ZwY_~Py;{X4eUgn@&S&J_edF|k`I*kZ$ZaUhVJK`|XC2tff9`6rL(oA?;lKo|XOS zUF?Vk&c1oQxMJ1zo5R3yf~XF+=2-B|cf6egy2H${jjS3oMf^q}Q+qriadCBY0MHWZ zVK6p9H2+=xa2$v}Puu46f$RtPSRtC6JD=G2`(5|lJ4nptG)LG#-@S_m{1Yf1Tha-~ z0gW0zYjzmW2&9KRkLW=bPUd`_PXzWZ#g5^Ksp{q73V|e5La9r`FeH*h>U#0sz9md3 zn}IdUz(f;WC6N(Ts~gD#8VqPeeW45}M}s+UO*O?q3ksA9sYn!1P@otwlA{HmM~LhI z7A4E1kQ6!A8ELgLn2^Fa9uZWc7+sfxLmGl7v@&DJ8muOTRXLJB+=j6q?tUQvO_lDd(9{o!f+yz37>2+e^}Z*T}TN5>xDPItIMP*{Zz)Iu|#d>hT? zf8~*Wf_kG7#}!otn~^{OL$KYFKU7A}M_VewG(0s)!)4g^c8aq6^6&oU zZ$5u|Ho7**HI-C1`l*v3TwT`yCmT7=&b!ZrJYTT_?w4q!{Cc22e)(guF4Qqw7`&Wc zjb1KZsEjO$9|A`UGR85^1FVj}EU%|Cu>x9;ym1_05FpWqz$oFdbQD5V+$B91|g ztlLL}T?P|{YXWHmS213AU2`4C(|`3902v7sC9b$e3?-sQHGz&@f7KWjkNb7GPsrK% zAVQfFhrA1fu)4Evu3N9>h9Sne{lDI&dHU=7FcOd<0C6{Vpd z2$}bf^MjDVpkA`bYUCnEr=W^8uXS3$ zVM{mA^$f(TTl426h(bhxD019gKSMIcC2$x<#SSttdMT%vTwpv>5bZ5BJ%=kmrx72p))I9FM!P>p6fKBW%=$3jD@e{=rnty>{Q!*f@#m zvJm|}uk(QKxPa}H!X_>Qs2XfkBJ;9}1&;XN^G)>2G`?9>IklLwd39NA8(Mc>!9O#~JZVAatwT&joH6h6J|dPaEWA08J}GVjHR8^ z8yFGDsWn9D;E(z1WtgVx!^cPVyIsbF#MDjeqib|5%@{`8=JiZJSPuK)FtmSuN?P5t z-!Aj{-h3Kd#QT!RQ9==6CKpO%6fVELRm}A0Y4oxMpWx0|t}`RB+^XnA5aft*<%HgV zCOi`kCY=U|N<}Qd%&{T5%C$@`$6_P#pa(w+3XG3p3_fScY)9XDM{pok$!^97F{#5) zrqg+`6o^`{)3FTIrV4~7%n`Wt)Lv9CqPP=6JJZP7;~*#xbM_g3ZTr7_8Nuaj3WK*k zHu{&GA!2~t)Vnwwk@vD=3BKj)dHQm?`MM8{>uF*3&l3ZYPT;ed9i&`g#yw2z}T z+ik~m;;=J#BOxpRUnIl^zj3IDnI$xK((%hrTn^PdobiQw4JZ#PPHRCp-ykn1=S zf_%&$y{s;dbOG@4MD+IM+NBJ5M2lMoeC<7a7&9vBaWx64XVx91Su zt5K(D`opM0J4)G~^B;OIbi?uBoBB$tfC_F={Z~B~Vb67%kug zn_-#n%s{~vCq`s*C{YYqLy(^=Hz|HpiWKl21`QB$8!Na6ABhLl!}jU`MA*D$(A*O< zsa4x;H`_n|=?}X+TIcTN@Lt~lMSa+uPK(NMFw3{Wf~>)CPaR>=HM=YT5f@VB!`k@9 zok3_(Mg{hmat9W3N4VgRjg74sQ}j&FcUyH%ns=YyPnTG?y-fJKVea|3Cj`OmqVo!JXstLG|2dZ2u z(aV=^?y!70F-b1Ygw{CX7=E3F#U`{ojGN< zS>4caVn_6ejCT%n>uxR}Fwx9do{5N{8| za7sp*Ar#`|RS_>IcyTv&O){bi3d?{cJCg)>j;biwVyr0S=651bQDLqT0wW z5$l3+)LdD8z-N9&H*wrx~L4pg`*T;3;>?${N#&d^d9`_=y)Wn(|!Jap7*1X z`f;02$Ckam&2zQ{ONZ3?wjLt zq9>u!X9vZq=Bgl^n4d|1@fB&Xo|`f4dvXpl$ZS%g58Bg=V{oC4A|$~0u>in5M7UshP)KD@6EwIr4$M#*RZW8``!%0CSu+gmf(^) zkf|)W(AgQH0C*z-iQ+{pzv3clK!ou-C7R?IjEq1L#NI*!l)=Dkfs!mf`zX&dhi#Cn zD>=bgimp#Fl1#Ha=LOW1aE#tgQzZed@0wtY!7=g(+A_77f{vg7}Yqu;lbvtk@P3( z^JQUVezaW<`+bU*n@dRgz+rRuYBzRO8#rYJI$q(k%*TxLhe5ru&s6vaqlU)8vdfQ) zPYHw>vMnW$KvFX9(D~T+q+L4u}P_T0mzH)gJheuu@(^t>hY`{(aw0{g)%2IJX4 zEf90zQ-6a|cv^!xedv}=>s}E>T3V>)m!~))&Wvd)p#F7oUf=#4dQgK zG>r7RZ_m)6L%YPuF)*cm`)=u%U-aV_tlA@Ur#swI_78viH&4eA{J8q*%3!5hVCkAO z;6SJ)KgFiX&@Lbin|{Nvq6_M1gQludderLWDzC8cXKiuCM`Kec>novV^deb|;_C1< zw?9&gLumH7^{lT~tSD2ihJApJ&p6rP24JuQ z#e$L37MWZU7I17vP!yQ7!mdLVGDT7<%ZxTVUcN zvLsOy$R9m==ZhA4l%QS_AJQsaO!DFInPBC64ZHWr@o4bTlWe#L*c=c^B(Hbe+xNcJ zBkXOQvEw{33^1~KLjWV-+r8cUqEi^r8Tt9+vH3hUFS{1+d%MUOQB{*e)TFYXh~5+w z=c|HMJVvZVPNTm+^6A)R#t`!W8;#fxeTRs7oN1^=vkd`9g-~zuz%PO69=Wv#dH`D} zc{`bBGL%c1*>kl+L@84a7ktEFr&F-(1idH2<=d_W39OB6bYVJ)ilU1JH-$z=vUj`$ z_aor;j03*6#J9~!8sgPClbpo~wJNPdt+VKF>3ka5RN_u18GdwH{Tl#POOsEd(P0E( z-oph#zAwI>V+NHen^_1$ zB^+Z{V^S>y#V_%*q@ilixWzX(Rai`DlZYC|?M!@wZCQTz^6B@Ve`55YN57t?^EFSB z{z!GxU84@Z+{w2#aiz;Qw%Vl~&%C|N^qpNVqm(s199!f*EV<%rPxYeYK*(~m83;M$ zqY-zErLa4rfxBmYWucwC_Fh*z97mrPApgz9Cq^jG;jmMYkNNcDJ5}R$N1<&A_Zks- z^<=O@1pY~yZn=Ss$b|-@9gGf}Do+dLASNf|DR_yFLi92ZfB>65Ie00((jXLGPqd+@ zD~w|y{uZo!!-M7uE}HAu+y9ONp1xH_h~PH#!6wp>;VeRO~Fu zAA}tFCdiY^He)}Z9}M%$epAnBWMg01o$B??x3jQyf|D)iX&Xlh7Q2lqvc_Xc zt0--wBLi*u{q6(jSDglv+%sKRPbrxZiAp0XW{eUHJ|RDSLYwH|;ufoY4e!zNYmo40@CjNt-NC6TU{OCL3y^l|Oq(69NcJ<5lfBMsrT_^$;7e{P$ z&7AJGY%Zw9DNuTeUZeP>4|*Vu3X>2a3pVE|lYz%`g04}0awdcrc5g2}rP^mCJjnf> z55h9sc$!oq;MlIr)hh*WDl$6^u7v=^3bj!(y97TIOR)Y!>}>X5AZ#Dr_w4x*TX zjaqh<{kOyVtS}&m-zh{%BMeHjDgXqrfCUpJf}>JR0Af@pNtY?+>x3g(N~RxlkKMQ< zlht?H<-&a1JYzZR_8i}C_tTHB27qOGdU+urzJGu9L2xwemN6GQLm~)U5v~qn6bcjU zKg5fP!a;E;7=EwgiJCBiPExNRgpJ5IM>-bsXK{gs^Kd5E-)1qR1Oi0SwhrdZ>5GR*fEg9IXsZnsYxb1XP+6>42ZZ!3$M|V zt#kmeMgi>VI_Y}t)ib&>sH{fRbj?z6lv0X$_Qe3&T?={wz*|k9hK9U|Z0Kd%aSHm&?G_6AWXP>7L=GY0us?D75^8 zR_4->T&rlOR9FP}ZKCWb$Pk_Y6IM$D=*PNg$3TUzgiMZ*{K2$Q7 z(U7UlHy=jr6d-C-Nr9_1FPGJsS3;VM*=lB&=?VDDWnL~fua`tk81?QjYY6oG2_3lZ zx>O{WMCGDkhAzv70$s{kFd&4j{pX($JgZ_#V!KtuSdd7+n&@4~SFAR}yzkV~PPH)t*;TwSRVU-TaB%z+wVvB>Nzbdrd zA-ts%d!%@L$+_6Pn$+U%u=Ua)Ks8gsM4?ug^og@!7YSvN+&k?`Zt19pRR=!2 z0WfEM;0y*fLM{Z?Tp6CiSor1JF`*{@D&nJ@&BO~KFoDZc4s2)xD4$avyM~WE@#YnTK-BNJl)<#m69D4gR0DV8QZ(p4vY6Oj${^77>Z ziA->y4IF>|8VZy_-j{ur`)RtVdl`TwOSpRp(92$r-EZ+TEBO3;&gv5kHO;?%zqvz$ zR7P*^s(*IUH@!U9(u!NqCj@wlfuiZXQoCHw(N??J4)9NvgNmqT&pT#jn*i=~0R54R zMvcp6xywgP!-r57r!)W7;Z~QEJTn|GiH;r7H|~NI5YGYM`pKD*O+-!s)sqT}apcjC zvi3057BhoCFNLRGN&fV_wNlS;ij;+5ShCUEt@BONN~D2kUlsl{cF2}I98TxVO(_`LWzdxoM@@$9AG~J(GK9iok z{qhYu7h|KUKmnK$Ld5}YOfSV?&wISXoRdRp>>x7as->d?Es>Ta+I4DnWi)}YA)Q43 zBxre`5WG47=#;&#zx2*~?N@Y?Ov52+(3y!8h6DM?QniX?mlzuI0DvP)4*WsWD;EUU zQMIPL6CP27t{&^8Tfu9ZBZ^+VVbtKAMf&e_Bb#^X~KjykU%2Y5rl28;V<_%4{ zE_(ZZe)tk9MfA)Y75Yv)@93;+*Rcbu+zt=4*ZYM>xjd{GD%H+G1(miifOv7Xs)y=G zOWcW^<6%lmB&C&!Sml#z0FhDnuHj4}QFe`WhNS320le`IHi4Hh-7E$I3k^kG4gk+J zLIkZsNQ+&S%)WLPbm$(=hO>ICxY2|^jd!1A#ZLud)a@1##Q+48x#HdQ1a@Mz_d8aA zbQEV?b7{8A70z55FqVQx zhtmk@hQ^@iD8`rDG{mV7TYOrC{c)#2I}(}OvfK5e`K)xoOUIPo5=5eGpmU#35*9TM zUV4wrOT9hzcW<4~Ap@unQ9&hrd%8BSmpimDdDa9yGsceBS{PbLOg3|eDC_lSjsxnZ zqJRWrK0L;13V)m*r<sb+C5TR|I#j}dHx97hw$F!M=u@H=sUo)d z?69tT|Ni~%`Re7k+n@o^4Ljc!aDBfpBGNrTsog@JF&oG4acRd?X7n)R6rTW%CNoIj zp7IJJHiD&JdPDe75cx#!_R^(&n;wSOfTdPflva?`t{iA&YjZ%Y`1lb2gH%=Nab)c_ zHF76%h=L9#jE3s=`(xJ+^kf~_pV}Ik$thA61 zMZGTaO4%yZDhzDoDex9q9(D7hzuFcc$9E8HiJC0!JfHx-)=`}P)f0&f0Oax=FZa4GR(VZRJ5Tzm$R0v!?oI;;~ef|^rk(tb7 z@WP#q$td*r7Zuy;*14m#8EeLAp2_Vnxd1|jee z`RVFVKj!faUZ0RV%eJ!TBck5#bMHL`;Uf6eXH>3MvTK>{U@3p#EuCX8I5bn!)zuyX z6tMe3yJrx>?QOxV_|FCxLl0fQ-R^fgSgLd5|7O$8R6@E$>0a~(Ah#PD1y^D- z9LtR)wUdoyKtW%2Jvj%Yyt20LtdlS6*+={+B)611a?pYF9a{2_+7!OrK~jkUP~k5F zkNqz)QMR7{$owo0M-=d*vb^**thciaWU}=)k z6@=n38#A2_&)EEdioBZOX)|Cj>RD^Ya*&2`Q$^x_@`d2x4Q!%G11e%w4|E@0D*5;RfDKRiNAg7 zo<`F_V(Fo-&{Y}jr|t52*ZgjLF#He@l5j%I*yz4WW0?2$P^H9q?01RL&s5ExXJ*3E^R_)R{#gtSC;65L6HN%pP%QaG7|~fs*Mv)g{D55z9 zc#Q-cJ6@SlIyC`lo~?MkKR)k=-1Comuz6coc_p=JFSq%}`R?OPK9pNJ*E0=C2%PQ! z0pCV~WR`m0fB`S6amBzv!Bb3f*fV0A_qnJHDe5rZj2)-{3U?Z~#LaZNvmER|FE;W z<8&b+Te0&@gr} z;y_krfJAGy=9!d&?y9lr zw=Px56fr>;k!*8~Q9(e_!zzb9MB#pfkJ4KLt4vVM*iYAR;M7&9qeEi1ZP(j-Btx>&UKPM5^hQ!#mj`4D zT#hc_G0kKi)_bu%#rt79l3O+HupLhC@8|2~ahnt+9J?bv$a(rVJyKHC1f@S-!=t0A z{;02=$VG1R#S7MK?-W*i;z<+C;R9JgbuUpQr!V=*qBiL!2^`%abAtBhg1m}gZ1xcm zUhry*KOSjAKS!kY>tsh$WzF)_Hf$zu`|An!NXG+_46&z92)5S;@k>3QFYnQr*8yT0 zI3#`;p_I;BJfw%dBfEF`!;aCX?dM!R#Ad#31Xlp6^NzM!$$>z`4h1||kJg^ihD1G9 zC0VhI2(Hm4KcC_PANVV8c za5Fl#3eY8_7Xb~jY4!qPsOzCpCZLgFsLk{!_C(az_~eDX$En?~aRpma!T z`H;x`g?Oz?TIxMP1?C{4G>2T^Prj9$OYT(;$ggn6z$263Mxk&*xva>Ci_SDhfiH(G zjdP@Ch;T2(FMa116nt6_mbS_)xB zX<;P>h=J;Shn(`Q6Iv^*bkZFEdHHmp$j-?GC~w>bY#8upr)a0w?}`_p`HVw5O%Foy z)AI|V>HC+j)JoRK3qoC;QI$CpX!;F_iTx=&DFoz1hLQo&-z5q;#(O)M&Et5@ve~$* ziMcL}u`X462L^o@JfKvYr5G?Y%ea5qjtn*8P6`=?*t<%}nt@)05YeBJ)FQ_|x%0%P zLfVZecji(eHSpjGO6r&g*wJj>I(ku*GjEPvDiQ?(7BtZy0x7lwjBQhFPd@+n22r*m z$sc5FAu1VFEIMAUSjDsq6;?;uV9c|UBA~2GT5>WJ?J;M=1qo7l)MMKnKAleQcOvZ4 zkeoWErWv75yIyvxn559qcz zFA`Je%gtstnf=-Z0*CD|jw7_Tp5?dr+qWOr>s1q|{*aVGbWaG@B|;2DYRZ+A#7#bA zfnQIm&PuqbucX>hu$|8t(=s0kkZ}isfEOl_Wv+6mz)xE+*xV=j_3cw{YD^zVaD$$D zc%2q+1TjufmPb{qdL4pk<{RC_H$Q4YK`#ld%Ewwa6J8XjW*%b$+|E7~U-*MVGQa}C`kAbu$FW%kVRGs-cs2qT`{UPzAQl!i<@_-D!n)!>S! z*v|wg{n*=mWFQ9)7)oy~WpW^M(J2^kJiREhw$#si(u1sJp7mmbFf7^F@s;k@k|uoG z`P|ycd+6K8uqTp=LZjHTOEsW1>>)yIALM?-lz7gb8-56={4w(TI9=nou7kB4hjofD zY|aHeEePv&P<+QVLc3ssl;uXgT8#^G{uL2>!P~*dHJDk`{CvI=ui;}q?qqwJ&u?$0 z=nYAq4}vGQ41=%nqU`wci6HR$<$K)BRFF;WGI(fF>Fmdz#+mu4;j**p{?M>MNbcer z1Yxk0FpnGG0|x%@OgDh?Brv_+2P`Yv(z(v61whwcuJiBy_=g%>(DURwiHuJnWfrgA z4P?f9iX^EGRgnBTpaQP4GPjMQG*WrJfEkbj9Ybb}k@ucsvQe$5#FXnX4loi|BwF>| z(T8Wy!Y69{`1Xso19@=PSVMp!XLW`ktF4PRqEuB|>cL3C(%hIg)53^U6eFQ63=i%( zok1@V6ec!gw)^{ZJH5ZcuKhOgg2svfoCAy*4AELAx6+;~^E#bcC|W6r^ss{=X^X4P zj!F85qEhVj5%C8n*QN>H{t|EB9Z~HyPlZw(-<3Z+?RVOG@a;yBxZUpW=gZ~%ruyPP z_7NZ5y!x^a%SsFfe$0)+Kc7@lsVB*I*hT!+{WXY;i>>qd)p{uaK1Vvg?d$1&p(nsc z(;i2&1ccsh+E0Thq;JAsdT{&acihz z{XjwjKsQ1Y3QIZ#H``(BvFQD16+PLYP1trC>@+>79R{(l%B~X-RR228<}BCF3Az2AQUL-|8N|D zAZjp(F)!d7q6`2gZnwwf=DQT|W^!moU6OR>(S$UZj}u8irt-7fIzi9z z-bF%TSg{Rb41HKp*`tu*i`m)RWv*NFO+6xjZV*{9mBv?@{J=Sqx}HNWu*H+Qeq@-* zz8EuXVm`jN?eb~2J$R9tCSeQ{T~>Y|;{2V^x$Q@ebDQgJp5LyI(}aB8_UTCjGgRn_ zrBRh%2a#FtM78YbVp`BxK#^2b`l=hl3^g=`iNb}}X%4sPoRr1wAGV2R&5umn&Tzu2h>6#}wHjlX>D_Zwym#QG_BZJei> zpnPJ6m1W}ORcVyVhjC@}PRwMm*$%EIpYn2WaKY;1<`q8Zh@iaR`oLGHh=giT(4#ad zyY2bvJBNQwUB{d7Pd>b?Pi2&Go$UWEe5PBBWcLQ;}-whj|X&}$E z)$Sa6|Doq|THkYG?2{*yMZ{;wIZrS!Umr96tKOI8_s6w4b z#Zij@hLcP#EHSRfY1!9?b>gO!U#&vNFZSb4h!7=cFV8b5s;H4fd1GjsK|rH|G*ZCP zxMTjE^IUUtW$3bZEri;k_te(qbh_WX<%E$Kl*vhq=7`Va6(;+hthT*fyz2&R&?gTd zelP^0@~4sEbAu`A-sl;RLBo*Cxa%QSAe-0u$m`2DMB+_q4Ezaae;5ysH{lBG9egqdUea+4DaibeN?sL?qREc*zJb zUKAia$-a{bVg%(BQtUi^Y5rz&dSX6#nx=lBkXbGe<~9K$As~B^Bea9kOe}R$8eY$5 zxI?Zu0<6U)w3#0o7zPYe{!y*^`xpWsByt$`d5N2|cE zd<;Iy!5&G{VK*9nF`q;QAt6KCFn^yWTE|%-u?ntqfWk!6oV;Dr9dT7nq?5@t6!Jx* zu=)`jZ&(v~TUSvT15nh}RGLa}EVy1x(e+Ozve6g#OK(u&=$E%7gE?`OdlcMqeo!2I z3mjpjY3~xo832WPj@=A;`Vc*;TX5u9U0L*8;3>C}7&%tUa$#7Zaju;StZEP$;U{B> z3!cgWVmVMKX6izRDO5=RvQ+I$!y}A=J)|~(?bnl8^79T|cPJH&+;c)uXCORn=;wJuCB?p)Fn##xC5v}3Le$8wyqonHXx#VLI0JNspCH32TrM>` zt_HO!q^gUyv@m6HDl~!9BDi9RV+HlFY-AHHTrQu|LhGK0JXjr6{I}cf`tae;NV*@l zuz|+kzJG;bJZiVyz%qU2et%?oXNRu&427J*IQReRVnUpOzPq z(i~p{oPSct-Fh<%Tsf(NKi5>|AK$)`{KiwLnm67RtAq1R;;GE!Lun|_%f|^fap_lv zXnIPwBT7C$9k&g0>*;a73ZYEFfbN&a@#T+bGIv=j|BvtANVzl<+w99sbn<4-9y!hffk=s7w-^!n|yT^{| zkb(7>PncJYH2P_egO=Ad)2$(2y%EiGiw~R;`v3IoIcqO#*U=Q%|EBqWzuYG;XeMJp zD`nmKzd;;>@t*-?AHbVbD+uC?+=#4Vyrkf#wHS zF|akuNI2ow#W&63HK6E&KYsNNLjvr&CK9&o7wH>}^bGUx#zDHF4dgCOks-&r1WB5C zSuQZO16XJS{F84WN6*DctNnMMM~Do4e_wpmBJ=U5UGLhHq~XtwH&nmZ6Cf;0VEg*+ zOJn|k1A|lJkO12E$g@t~f8`ZdQHyI$$4&R`?74{uQksEp8KZ=QNa3A0=^x4=N%;2)lfZfub*tg5Y5)M=0*>q2{bi0=) z_)Sc5@+?<0kd1_?;Dfe}HAk<+vbSN#E&NOG)cG!cFX(V zcl#%>y#D(AgD=oV8TunORXT2Z95k z-L}5>YTotBb932`-Jkx)KX1I?j11s${^hTD{Lf#OfBmcd?egg}D8NHwC2>z*#T{Ob zW8V*?oBiCrpWiOi4d$W@-K?6xCbo=RnRiEW5Mlu$qfs?oMeoI6oBeIN9rxqmumcGt zx9NSp-{QCNj<$LJ>5r7>{hf+}r%vzRRlLWZaxk`&pcqosmoqi{DZr%y(dbb`8vM)w z1AID-oT#msB>58_0h2y<61ElEQCv|7c*K%^$F55~$^L10$MfhgA%Nw7_vr{`FZ0zN zqQ2c{IG;}MUSAfR%(m&Ouv6l_GynE#ZJCjK23H^E64_{g&#Qd?<#FgbpIdKZnw#3c zJ{~@M&b6{N%nwLn9z zgr-1;3mZ2qCYx0$&dd-8q+ToR0#?^D1JDJdpGaoXX={Cg4K4AhfPhEj@@0Nv*C`{bN|{h{*z?#1)&)e$A*Ye44n zq(AG0pzFOO33+NE$ROv5hw?psRbLzc8vJy=RN8xL;=+qpkEj$fT;spH5m0(^$xENJn*zyhk%TMr~&3K%iD=emEj=sY+Z=NR13EK z)2C-&#vzy%Bn;)*O&U|pFmu)JnqV_9>5qoIa?aPAb22eWc%*;P^a?~S&A>eOD*L7^(d<-#R<_ihiHNc;Pj7khv&f52ng zg~`R`G&hg!u-_e?5G@b)Rv)l(efw^w@z|(tQ3491Eez!99sNY3gl(M*+!U#l1co$; z9u=;x)H?ezM!iM*-~sJ?C1TPwwJFi}z=0?;Z!;)qJ>LV!?y984OVKdycH`CD1PU77 zhz1Om?>}%n_IEy|*|b_TBQwoZ}`n z)i(1o=@|x(AM+gtN%n27Sdx=d<$4Iw|sdY0m(3SZbHle69m^}o)(ozW) z;9@f^5vKwpkm1%lc6*aqO#`3oZt3{1Z@6xafrX z;bt7V-|aVfyJiQOP3v1?sP@FpCU4bHBkgow{`zM0e;#`>edchN$AiM_!_x+y%hmNE zAGxZ_stLHxUi?R%e}m$HkJhsUGr){vWX?F{u@T<2dm)|%2<;fQ#qNh8$Lq(z5fxSp z%H28i!-m0(eNd5oz#FA_9ug5+;1-Msa?To&=P2<37ZznN$Ur5J?m|xuxa$-_dhp^W z5fPJk7)RCz1cOrwIdJ}z`dCC4HG=oePr*74Pk-BPcF)7FzyDqH%a?h$UZ-&f5gb<2(?8z>f*!?Y9(RGce9E5$B&an`Yh)uH_P8@Xwch z|B2|{ZU|<1MlO`_aBrl=o}`?1WqNqm9jWSF{m-(7(mBee>xC!#2q4%b;~YswbM=x% z&*iEG|5b;1chl|$vw$n3D5H?##B2zxdxJyNF_vayLm`>nIVMu9fZ$OlkYnToBy&Pc z%4nQuoZ5%OG$$)36ZbFVo}wW-ra!MRUF{@0a_@$G_?E z64eGvzwtg0l_=u4xzfocPNm*mVvO?W)@em~shhU&UIo+|kzMz?Ue34ciApHJi-WvO3kapK zf{H4|S~dgo`u2YEs^l;y8+b;HL=QnLlCoDAd~B(x68G_VI68{f65d%M0cOr*bFnWn zr7?ez5Fs)`fkb|a;^4g?I4SQlg9CACk2zAzY9uUG| zL1f%4kMT~jzx>Ug_bTJSWI&{$G7@9?S(ZI>oay_2ogb%PzqYTh_S!qyZrR*mrKF&h z9)|wYZu7Jqm;_() z6c%*j%{R=Xy)$A(LoyeF9zVJP&v5Q97eS>=kv)SGY+C54GQHydxL>c2F@2a=xZP|> z(Kf@#7(kb+ORv{t(5{*b2fT?%q_9*LMj7bDM9bbHNx*=ywQErNFPz7r77SoXz$*I3 zyC9$}a^?_>w$QMi!hF}l>@ypnSR(3?$pWo0qHjEnHcQUrmj*oGeygDjIvU7}1#B;G zGN?{*l!$>;AXp=||Ab3qarl~@wWA8+J_QbzHU??opv>NAxAZ}89`=2IBbF;PQ9zG@ zXVovQwNpvNFA-#4e*l17%B)`~TAKg4M;HF{C(>)9XA)%wI%H7uCMRHtj6&zt-e2B* zlo;)8ZpY$?FX|KZbvm_E;wrwBD8%F`RHi6J-uS9?6HclF%m-6|j?n!&-I*=oh%Pm{ zl+uk3Z3eTzcj=2?}EsB8Mjp5?!d8Oquxy&iR-dEtHBK9oFt` zg{Mr!z_BwDM}Nh{SHOob?ArubkJS~suxGhPrXsS7;=(mi6lO1{cMow&oUrw*fHDef zY+{hc&0swzshHw1<~8?AZcB+xI0P29A}*M0Od(FBLV(e$ky4@@!eI2BUSo3{A&rDo zBebTPqkcm#R1{ek#KQg4aW`yp2rzkvj@s_L%+u!h51akpG^c-g-nTz43KE*y zl@?eA$CMw>n-NEfYB${oJNAJ&57)B^hX}2oYe=yg3c<(U=xk(vdU+!R+aAXfFdFE5%r z`K(+sWdne-4jICI;F8899aN$II73HfL%>s~L9OlwDKEDgOxa$6-6tvHI>i`RoG~sG2aPe6|OOZzYiqxRPRNEEtjl)eB*@ z2RvRPrEF3up9hFK00~Q)CkAsrnZ68pOudndmZD5^`yZ_}qHaiJLLP&p#ZG#Z1_lFd ztoGYo{Vj50tc-Xv2g@{;AHNv#T}jb=;s;Ux`LJO=nD*kTt_&9_Q)tdb{W1A||uWNclq`cAVb%i~?D%&cHru*69{+C{v0s zg7@BCcCwm7rr^v#q2wJAh-Adh)sTtc(AR$ui;zavpc=z|vE?kq-K}RFIP$U^apelg zU?V#Fq$Kur!we7nz#HxKduBOaUhM`+WMAPtY@HW-)`4CaFN)jp1HTZRu2Haa58}5AVQqjsT=SO5%xD#Npek@4b>05gDTFP3v#1`NVUvGTnp_0U<^!96}ex z;pCc55c@bhDTWbJ^U7s(lRZ-f@u=&_kyCO4P@xmTzcX7qtQ{%p01EfBk14Ph*P#=z zJ1V<$;?rjlXBfxF{Z?xQ@p)YhM3*e*gM8OFKkW$u`V}(hU2C5;>>j{tV`By)00fUw zKJL`?`0m`@jpxioyrMlpP3}sT)q~JXVNmiMb9{hH4oYaHLmD+ z{M-CCd3De!Z{RJHiPv$-kRXvvyA)J&$|n^%zIsIkYQA!cQ1C~WQXDVi6@o%90C1Hs zeWg7R0JFnbfG|VnW8GZ)WA;6H;Ti}uhZv17umKM{SJx==$?W96;YeLZ3+~B^j;md~ zRV^nEa4gR;D4JG)ZC~lBE`vVb{Gu;J$G*{&%M_>1fyD!On4}4lsk;mu~HZlkVi0xd0O)PH0Jd>Sv|sOv5_Jv zh-q;ah2oY7GI)3E_2R|a!7D@jl(`ICFXGmqtDG6{&I<2&$EN?hB*_3tXuJ9klGS@LDP#W(5x?jEjA*!H9 zqZE2!V#8$~$K?X%_iwk$d4B#|-}owzGDU10_2l+50I&b`KY;C@ep#lQCpPZbqW9_9 z@GRGL3Z`jxgE7F>VO(B2n-urAOMh#-2TJXHjXoL!Koz9_(!j8r&Ji0p{d5oOnAer0 znZCxG8IF)&2j$zJ_*xpI%zVWd82iOEP%#<<*0!&g`{h2rUmin8BpsL;Z}lUZQ=e-q zTxhqa89C|lqM`MJju2Ln6DeXZ3`Z^F2V;=;nQIuOQUkG<%SRb1fOZWQ4zRsgJQwPi zrx$3DdB#Qz1gLM=?!1+Bd6=(&$p>{HmF`O4&)a~R+4sMms+TEvHZSTwn3Z@r3H<3K zUR(fIKC+N~doKfXVlZ}jc#*8C!AfvqJv4l}1`{iaZ+&5s!ud6bnQVRH2EuyonG{{3?hWEus@yfVFh?nhWaC0kgfinm}O9u*#t< zr9JQwMMdYV7)6%)gMY>iDDWx*6zb&O`)tC7as{o8!kkStt_pB9W$r&6Hgq&*7TyJR zGvc4`Ua)l`>A2e&I=$Nb&X$ErNxd7(T__tiDONSnqr3)+A}^YeFuciT^cYFfRwYnQ z>21Q%Of73k2LN*f-^taD-d!jUr2J+;s+)eI1UqL5I-jQ#RijcGKuNGw){5Uw6{i6h zmGO7aQWBE@5PH`e*^T*~(!dQJQqw4qo4U>+q5y-tAanRPra@3)&_X%DM*}&`0fx{{ z?8!x1vP&!e6ttSyRZ43BFjue=JoF`RWCKFlA!N75&&d{JT)t3iw;g;z#(cdpwV>-d z;^vAVgr##kF-p|Xnc_z1YS?Vi=5(2mgY4sxAOK_VU9Oqy40ROA>tPB@k;vj&l;R0S zgr%0PlorF09B{;tRLPnZky7=QvWTb0r)}?b(^h~BTUcCv(q1PQrsPKisyNNubpoJ* z?Kqcd!rU4nzyYgYTOHf!nCAl@J`IN#>>K6bCOHY*w!b4oUY6JKcqJ$N%U_5d2EF@u z6h(ShI9Fq|^=*qB+Idl+X)J8@{dRYIFk6MpNp)#n*>F)uW@J=lXn+0}uZeT_fycS( zN(}YYD*!1-mJVrO{JRqj{HyTtW;BJ)g+U*9kUgP7(Z$=EY(aM>VVZ8fVBM)og%2Z% zT!YV68$3&P`72L_U%E15qhVdjrFD7{DVP0=zO27#4mTUg5d)Yv9-=G=?6zAdmMLHm zP#Y*u!+agD?Z;6ERl#n~By)lbK!VpaJ0UoX-TNdH;z`Hib99*0+i)%)u|SGr^ivwu zpYsGa`URtkS7tkbgNQ29IO;`OO}k;RF+%&0I4VEyhc|{Ny-4^lrjp95QlJeKK$aaP zLoFuZS5=zF@~3mfNU4yfA20wbA_#=fm?L-%i*Rf4YMUTdV=@9!;rUgIl3>geHI4@W zJ5A@+^|UnesHO&I%FrKqZO-y|HV9TSC8D*sBZ7q6zkTs;7i+|?5K`71!-DkW=eM;d zNGeZe0O~{D(r*w4tb8YdVY9-kAzg4}sKNDfXNk}Wol-I|)u5(^VMz7qui$biqs|XD zZ`a$~#0ckA8Lt0^8ocT};8L0-m|+C=UdcCdm~&C`L}w`MwLHScP=^$y6128E`f5yf zn`S#Y7@z?cV;M#iivwvlq`IL2QYRs>KB-@Fu9nrn|1XIknlabr|?sIn1;U!u5+NN-|7<{;hN|BxdX498&v~8U~lXi2+ z`%{%>X0q-JrP5uPwpa~4P1JR}+nf4DA}=LiM~S_PMlWlwx8+yg{3;@Wn&xTfez#LK zH&+qy2a1K{vo-c91GvC*ofjXAmu@Qe`t7`J`a4q-Q!13^k^$x5xirg<$8GHTAJgsY zyVI3uN?s*UI*Za|1_}vll$HzOuR4V04V}2I5(}=m#>skDn$+orW5VCkad3%me2_QT?vMd2>@W;oXnwvfd zY`U2h#9enh%rT<7dK+jpl|!q7#4o~L3i){BE7WNHc-(U$5Q^Rj>UDJVJmRK)i4yeH z%z$GI3K%xv{&w}UbcS0MkDN}T3?C>Rby7$JAGN@Mad<{^h;^GLmogC6hduao2QR(z zj0L{X6Qe+3UaIB^pYG6HEg4*rzql+D5a@`?>xNaNPZCW76t2&KDDRo+o8fRE(qVM5 zL3!!UT^bQCXlAhSfG3gweD*rBqdU#z`1bSG^Ej7lU|A z0E(OsRH&INPRWFfX}H}9M>Ref0VM89fM{(LCy*kw_?jn%WzK~}1Az)qwf(~dS4Vo` z_+!(A{FS!9o@F3eBNQ&O<|=MJR9WwrNK^5yiIM-Uk!l z+_kE1^T8Ehum3Y#?0r_TK8?JHZ8QXZG?%_3>k(89t6=pn&*9uE6^WS~Bs7*)f(hvk z-~gpFaNxe!kjfd107{Em>@iUa@DwxOu|7TM?i6y>o2ZxemYbHu=8YiXi)u@x?nN}= zA(5bhts@hKK!Lx1+TkRsU5(p?46b3%Z!rN{QgWbw|$B=aWa1mf%8zw1T#0U(Hx3)Ccq!l-&5Zo~Kb0+#bu1>y7y$;TE3;A;A350u(-| z5@`B@BD)ykz?0?TTp%RVc;0T%cheMyH;Q3(Dis4+Gh6e5i+Iw(utzo;wYlKf>rb6G z8Q}UL01Fj51L#x~8##dN%T{`i`V@QiqR~}>eEr)UThPR2>9_#;7sko}fC?;r6|Qlu z^Eo`uwLy$%>NAaS7rqGHG?{K!Ii=z3vug=3!9@2^gFusHK?I-QYzDgJm9UEr=rStR zWp1RV5nt@Mj^-fZA@b0>4RCZPM}|-}+?zu(*{mjT$hVND&neU6H8Go}#z*mukrs|K zQ6?FX!yW)iq~e^cs3t$?xuS)p^!zVq6^NsDg8zg_kJNc79kaBDZvM3KJs^MnpZ~1S zcYoKm&&y+TfB!;YzQ6uup1wTp?=55P_59=438mqg-};x>LoP6mw89WriFfK#e)(q5 z_sTK^x{;E5NvA_B@UX+TUTe6P(JYC>lXBG)Lll&1kYg6z)p4duoh~Sh@D`K{#II4M zR!^Rcw655dbtzL{3%Ov_rdyCo7y+|5Qfm3l@zAHnR-Nm@qy5pKAl0}NPQkv^g@%@E zSh$7qLjzYDGROns$)`}D_2^qZq!ktEZ<59Qi~*)N_9@ueEWYzsc|nxEDNc#&-Kg%z z#pTB0R?#&?d%&}zyfl?Dl@k@?pnxJvJt_l)voj7eLa^POZ#ik3n&o}EGq_yti+3++ zaUWuT@#ffN!<-nu9(_*m`(!u-r++cJidBMg_ zPl*(oFW1sVh|+NzRRBqm*8E#EMhR=m{6bhIF5r+$Fb*<0s)@KFMW{%6C<2h%WH)zg zj84UEBx~9~eew)X@u)QvnerqSN?+*PkL&Z)2BL_e9}1j?Q(jCQj1EV*s9t0QbL>A1 zo~+XV@Rhh_m1v|OPY|S!BW-$Jgf@8*j1-Gej}px+(vk^GJ+7iYby*O>SUf@NMoQO< zsMSkAE$cNJ+WKJ^fQr!w-@;0pr=9b4m&C|P_)W&ssmMOdKm%hRG*m{zI8;4>k1o|e@Hay5(i~r2$a9}Y-(Uj<%y*uy zUYuQi^d?DEt35D+&n37&59dSw`26R; z`}}wRusqI}FaMEdB!bKR4Ab4XyI<#@|8hpV1dDfrs-w;?-DiUb#&EHI9!DRT+9CSv zrP5}&>O+yCFH24H{{4%Vnw!gGX3n|YbWT_`c>0RYqAJ+|$hVgU*gnNDtO9-L5ZVI} z$#yP_K|+BYwxuLv#80$gtINq(u7N=9t-fg&YTMHV>pU1jqPb<*cDcq|WICHRKyr8N zSL)R@SW_%5#8i}Y3R8L)J;nkOAbiG9OQJ;MF4H52p|Np}p~5**G=zn` z-5&hLEz>iJYBnZbU2{pq^O|V|jgLiQe06y}`NB!($*`>g1Q`4Fj|Uekq8wQ9soD|4 zH6LOqT+ypXr#t|_6Z7q44zZ1^&j6D#WF^}5T>7FtU;Q${cUqd6&9%q7+pn*T4!}SP z1TyDM2s$$PtGWf3=73$f<6o5eyf#$U;(~}^Gzv)iJ<$qQz$02pLFx%x!8L)LYK%lg zjiR^EgB(KfZ*L1nDXv+_Kro!>zC>LwQ?eUF0-I_CpGXnY%RZ=J6#<*$)};;?h#4~G zrGJhS8bWmvMWcm2t36a%G@ygQJO+p`h_Ph=;6SNdAc`$*!G|Im8s4a-gwf$v4>qMv zIaHDYXUqsO8k55!pqzl+q*KOyIi>X2#axA3_9DGOT*ZV%FzeA%QbYc{u34T8f_4ZR z##-QXz9(hTV0V(`*ujh93pom>mRRJI2p+faX_8AmHTZN)16&4`=t-VJ-rEbkz<~Zk zI!+*lG8qXoari@9G!zqk27&}`D96i!zS(bGdLm-`@E$W805xPr4i!qfVe3`%(87ES zi<*S|QI@?E*y-MFvI){^FVk?99leK7GrRrMGyGqt8}8<+lzmePw(tifIHN`BRQXgL z6rc{bc>jgD8Tj~%Gw55P28=6Q#q8R%2%5p@X=jEXPb$OP;jkx<=U<&6{Or>XRws=^ zIhNQQTu$TUh(jQK=_?bRco&skB<4e2jQm(o8H-`*?-$nso9p}gFF$|(`LEOIvD?nu z!}k8@|N76jx37=)xBL6#y`a7oJgwfly-z|7VUY2Otz%j+V@>8na%q8o>7S45Nv0jc z`+8gjKt>UT;Y&@f1hOnkUXn<`s71HIC%l9qNaY>hvvaByEv90P|3MI~WaS=$l`84f z1V`GU{JmFOx-RKB3iu7(}4w zif%^-Ay<{E4y!AHAMBZsL||`xp(yI&2VoT=ZVEN2W(MrOywOAu^ST;JIBb4B`Z`C9T+x;Sx|9;T*rSvnQAhnqEGIb=Iysg>NRmrxwGfi;h{kc!6uCw(HlQwAp@P_z zL0OeRhf*)yQudm`M{iZv`n(M>CZq(v8W2xf!c0&}MX`N*r4NQPD0}oOuZWzU6c*bdZ_SPz*Vwq9u5O zfDVy)_Zs*bdK~4}DGz-{)UZ{uq8jpjrfu!rmP0(#dqKd;lr|p0hkhOgu`OZNvyl|TSSi|1m|_PVpiPTnE+~2A8ZTs3fjCud z7y^nz-9m%_!U8bL)_5re-yG2t7S*aYEpN6RI5vz@0H`w03Q7^=4lB!$C)L#RpEb8C zchYA7lYm`}?zCZclcA2#N%`%3mFMWwQ26k1UE$JeWJzX;O&IR|a=$PcN|+XB>${Z4 zP3|A;7&^PHdP~SqH19ToD&&Y{B$yb;EJj1vcH9%Gj71m>IEDo;a#u>lXPk)U_>X2S z)c`82=@>i2VK>v(jPB@d@WLR(+IRxVM?`GKq1nu&hOUI%ZZ|ZBxaV{8{ny*quebBP zW!68{f(dw}Fi<~4C5tow4|RSD4b-)FTyz>G#_<|{Tct-#WLuuDye z!nX}X;1-EuWvM{Gp@7*HwzQuMtgu0pZ~hJ0jtRlxNe5_xpM3~mg3v%AjH#~qAhJ(E zr-`n?j0Ak)z??Uli*S_6hQoF_hq!fGT`NRgAQAvIrL`{IIZtqLcNIrrlSwx-V|sbN zn5_gU-}bHuOBYeOy-yHQ?@%=n3-h6)ub-~7k7uxLv7C-Y7-jN@uc;LQ!GOXIZIVeZ z3sqAXdrh$iIV-G6RHl)FW>-!?9`uMQ7x_CmAyQxH3P&Ooc#?yujB85DElzK=6sMx* zl0uLs&YDf#0nzkc8f3kva0!fpXMsvxU>@qUzp9`ivdfcQkA6=ebu2YPqoqnh0&a(r z1>M3r%1PlOp3#;awHl?VQpGoyj240+^w1Gqk5QB8+CTZe24w;T;yGgImBo8C(;E~~ ztujCKToCB>1~JBCs^7@7t}iBj)QAZYcDJkZlLSzlG9mix)u}32Cq@7urjV1L2_%XM zCf93_)$`gMggY$fnklwqs6bFq*jpf$A?*#}iOp*PZN)|n z$y(I1ZfZcB#u1AZxMK!DMKokDMRL@uK7tLaJZ@KeqpazX$^MXZ@dUOeXm^Jv8lR^t zO{a6-P1^VnRtUg+S;v_H19q;@I$!VCN3G7c1LLQOgGf;+JJ2!KWWBXCrn4Am=w0^4 zFrp|qE6ia#dZO89^+YoY;)xb#ka_?pkO%`}6GLNl@8}fxenZNcJBKaI7ci?k=sbO* zVKNBU|9sdOsF#kAIn5^fS1%T@C(Er5et4Ri?#q05FpEW<#ga8}Q*ar%aZ9z*9LB9d zLrtT9BPZHp09qc7yD^lTx=1i32HO$DDL&CFi@h{Fpk%Zj*F^|~r7+-{HX0R?R77D5 znm>HnB71ll&Tq3Ix5P&ig3Bx1h&ed&{XQQZ0mP!l;=|dUPt)TvIo_jxjVWo${ffiE zf{hGTDyKAVuSct18D1$4JkKugVo+HrAaxsGkW?;{0N&!}=P%#heV3yg(LIroKb4qZ z$Ds9oDdT9>uoOL{TOT~@KszLmHoyvPe2m9~Dd+i&3px!cj{OVm8CB4zSnd1FWhtT2 zvHNkwjK@GXm-0@DkL~ zuWLm8lWWIm-x~WwA+?Ab5oM1MVi#wYyCsb)!$7ylaHvOGWXXS%T?QO+sUxi`!fG(w z0HZQulC+Z?M8Hl9_{4awS-b1$M0L`2K9N+75 z70)qWi(wSX=n?Kzq^?FI#Fdc-MFD6hOg(Zi>!9v_xyGEZLAhL`15JiH)^JCe)G>?p zlocI8XrF@Mql&=5-%6UV981-9?nDupaKJ*QXp{=B2ZUc7j0&BYyxx2aMPp}g2Md~b zPV+uJ{^ga?f4Fp( zQ96L0nBhe3t-PP!FTh^!^V{V<-IiLRQYUVr@~(6z&}%`ExCccaSm3T)LRg!qNHk_k z2PRkHfQa5IlZax9OJxyVaLaR=7XcklbMSea9IvPln-hBT8<(WL&Z5GC9*z_h444^+ zMY%IFg@PDEDcv93;NVMk?J4OLjye?RZ@HW-Owp#MdWy$&0L()4tBuN}J0C@2zdi0Y2#0H0r*pJW#BF!ns>}v-m7PQ|rI6fue$#$86j5SLl?=XjdgJ;L0lt3f(-ARt75^l}3R2+uFT8y-&ce!gLW zZBG!NDe?S)7t5k4Zy#mitCBaJ>A8W;n9e>S_h!=MV;~K-UNNOtIYLLVaJkD(c}V1= zVO6P%(I8>?{j?wPqAjY{T*`-17$~ z&C`bP<_PA#=6#TsZ_mqcZVzws_SEd&o88qAv7F}ZrP%-ks7Rp{1rswN69vnQS|o;> zt+-K!cFI4iKPLzooUZ4S9)lO)KJqHxegNsUAofOUkVq!6vH(9oz`thA{iVP5M>ah!gFY^BnZU;|!0@_!8kyZ%|Lr<`KiwxI z91W$PR7^x*#&h__B!X%WqBG3d0TJF7s35122<1*1%>|K01iDMA)AcfCv^$bU;DrfF zZF9YPM=&)IRSAu+;`x5PV-jYTH2HQ$NVVtMOLB;`1Hah~e&rF2z@J)X-(9}&&nb6) ztU4S7`mjE@ z5fOZ{s}li%ZC*L}QH7-Wjg9IbQp?8B|MiMhi*FE&TXe?SZO1Sv#zH-=|ZEGT~ zJHWjJl!YNdp$zVza`cU$)PgWkR|J%*8TjFcNSB~3cm1;`&au0^gE~SQTg9UWOA0#V z#&D8S{=^$OIp80MR!$m8D(y6JU_H0)Tl|fP;T#CPH%;|w8sZHB4$k--N0~v(bY9*| zh{5^CJXeQ8dQ{yU03SZQ(2*9hD_`J0KrX91KtkDHlh*F@B>v+4bZ}0K!jVIpITa;Io+h5SC9NX zmR#l%i4+a4&Fi%siI1XUEkFTa7kn0}D${VG{Zb560I$?Kf-~s$#u`|>7^7nm^D<;2 zu6lVDdN$#Oq2fI=k|PW_bNH(G2#Qj0uUHrnPaw3i~s}Symgf5+ab330MHo}cPNsOVVR%l^9 zo`zDfDZAkgE5JU^r+#8^uZ@jBVo^m1E-8-kOIW%O@vhW+DFIfZLKEmC^eMX)6Z?}V z!HvHHRvZx$bro=&(=_W;+4KY#5 zF44*{BFZbCOTSD=OMh6te0`-j;y^`M&DeI=+wy+BGb16HReI6Tz&{C@V5zwb05;E& zEUFXrEvMi_aNLxrWU?C9Re|MgIhc0Bg+y@|M)QB68C8Av)5A1} zjnchz?VRT@k*6V8$drgKpvM@wU_rPT2--RUI7z1&oVLJY+So>=$rioO zGoE3Qa{ufMwLYztgeT-XJH>@#-b9lab1(Yg@9UM~9PZ&q(t0;{2fH60x-_kd7-UUZh zcfMl;O|hqOR3^v|&!0e^E5{+JtmmtbQ&!v20(LF^$VwQJFg)<-lCG)DghNj})`RJs`Q`os_ zPsZSb8bel;D-Q}Jaa%BsrRzWwdN_;VJ`+N(fkeH~G*s87F#ucGquiEMuov`jqHeXg zL_A}pbEv=9PiC|&$a zz+4fVfgE&B4q$;X&T%gcN2`vvsA?!KB9U4{jIcz4hzNKW$QkotAh+SVda73Atun6P zIec+YE6nyOFft^-8(mP2ie+P7 zwufIfQ0U+Zsa`9B^CPYyD}pFie0LaHQcLMlt3upxHAvyQl<26cN%z%6&Syg(ZNZ!U zjuwv0-~&=TGOs!e4mR`-GvFzeXez|~$UP1s=UV`(R728h=~HU|p^;bk0i3qZc(A$x z*knb^E}aHsR;jYg(J1#SAjr7Gk)xGA`YijDg8{hh&eynyZS(~inUORG_v%qP<0Wb? zkGGFf?X?Ws5tQCH3+!}-V>+wiN<233N;|1Pk>w@^z0qSUYKYA$zCa6N4o&5uWS3Xx zX)7MIN-f=kGy)$}&tVr*#JT;>_t?{fhEWRXzZ?carFnBRyYhn&Dn|7r2?hmFn%Dk; zPUPLGBhWHv`|`q4W3>>FV$p{Llr(}e1+&CBEMk6)FA0Z{S5&c3(8)~HD;C|#R&wFp zg75%ZiAvYtZUYqpJpUOsAf0j_s1!rASrnl~FF@;$Z+>Fo0s&s5kO6 z)?9sdJJFs|1S#cE$qd%%vCH?@6J_Q-Mq6>g3Sodcb^uePD0EdgScSJYK@c(ey@sD2*l^l^GGsb{|>?eMf)f5Vl3`g$mjw!pbTAPGM|d3^XC73a(6})l*!x zu&x+sw^r3GL~F}0=8C}8CrWldk<87TMdG9x@TJ06kSfQzv)eI`ghdXCb;elvQ9x=v z`K|(ty&Wk)*r6R1%|d7*hbSv430VTcl6u0Nib`@iM1DL1rAs8C95lhYc#nU$@FwxI5kAKZt6o(4+O4ck)h<3Y4iT`~l(S~r167M8(9A=P*xcT-gA`|-Gg76_m~ zz(j`tlTZ^uzbPovsc2%;5 zCZw_}bnDgJ>IENBo1znA*B_rhDTt?@9=-!xzC?wi65|QK=hNHJ+sDA1v_r;s$4~R) z?$dQ(;O=#>=#o}64O+!UStLB<0lD*9B|3`6i0mp9B2-FDIRiFeLdh?+{6@O!E-{TN zfQV-lLZ=<}`{RD^&7!IS05e3N=B5OSK|`;rR52e8?po-H;LtX7CXngIXU#2PiE^i6l4E|2rc{;4B~ z^0z(*C{VexiLsn78Mn`YS$zQla!dys5fZEl3D4d$Z)+5p?@XE=UffKNP&hfn&uC_g zglmmy;xbQn?~oU>y^2~0awq{rBiUjH(>Qq3qn%wD{z(i$CV2SLB$>P?Rd-cH!L6vM zp^{dqV{00Kt@mN(y|ZkcM3=$$UVpsO_JEh0Es%?NpT7~L?Yv4CgUi>4owHV>rqgJd2cI-|2Anckt!Gztc5dj7$tk&5Ml^}CT3&`9xzv(>aQK&=$5X5TcvYv&Kn=fb2 z=kq7ue5V7i%e-n>)zBVVdVx+rq!trft|S*b7I1Mu;auC`7tJBj{Z1dmS7|MFn>fbs zOILSko&&hN+)0FNqj@XJDhcr?W0f&5yy_B5ZViLtGTPr{GL~XjJ`^>K3vQVe6zn`r zCmIGS@fqBrnGoWO*7Js07oMiCSVX!IBL|tof!#a~?0BU#`N|>s5|=-~d&#+(!T`T< z6dwd^OO-p7a&@v`%T$PYBh4|hH@T>m%#vi)lg4O44wcgQ1?0_@awN#@SMV6IYqeTc zMh{A*J4M^^wQy7+RaHtc%@EOQDkwJHTja1|3wG65d_Or=rB zu&ZubZ_xyXVms%jPd36mJh3K&g!}95Mx^7=KIT0J`eQL zdG8t&8I%i&o~r`X&xWpP{PvV0vu~IIj$PfRt;Kfz-$KB|mQpzvcWsIZ&#R6+>8CRS zQnu7SfcKBvIr`9gu%YmA4rKjyzP(=`*ZX{P+1$mAyik$^)9w{Ds&MoMHRx1Wr1_OF zS!=6n4v5{oy$x`9|7fa%JO0@ewc@4oH2YvKssjOcRt6xAbSv0wM^7f`C3Z%6PEIY1 zV~~ailmc_rJVG&i`lU<9y;6iq&@;yo2bsMgvAN$CZ*39&bh(%_NjtAZ*U{<7&JvLVx86?p_nFIwoOSVeZB9ly4G)=T5^TUh~Tq89_a0HN+Ezb!dSirIWo90PI6K><|X*`+CHWD90I^&B!B zo3!Zsx{fn8{7`0S1u>It0Moo5yqqKH3N_S&K8Up!WH>-orUxQ=FFkvaheF7*gv`kH!Nmd{m7#(?dkBvZ+7{{2lM7$Ws8$LuntC z)gq+=YcJ5?B8FI6VW(JF)L_df&H*muxt8#Tx9Puj1pCG9a^bgFGi5+C_{!3JJ0;uJ z17$}!Y0gpBpc%!|^=P0fLxcAdRk$=$2CI8;8q5BbNa+ft=$Od7RA)>}-16*!C zQIGA*u|IqVS)N)TQoqy*T>LoQuep`fl>^0r zrA4Pyo7z>G*+Vf~u1{6r#>7RZM;WOpMl=w3u?*f_-%V@I-`6 z0>9Zb_%3{sD!9;ut1s}}xD=74Fat~iI{6Jc@C1C2)RpM45GV3w8}LW~qb=Ap7~RI% zp#cK5+&vSn`eR)rMS7Qv4dYk5OAD6>coVJjL+f1xR&3{ zMs-pz51j5Ex+dXkcI9cOIy{N^g7A4R; zh-_DlQytF^12Jq^S2+cleUrzWUOsnB*i!?9L0rW z4?-bw*$8m+8pZX%_K0h3ye!qLHDe&7PcX%6A#9IzkG>Bp-cVj}`IeSFw;%34GuA^b z;<_`$$^AXY5sI?+!5>XcybQ-;kt?Uhl7_yFXUFTf>vwR?rqiHa*;uZ z4L}*D(=p1qrU%NEE>Lc;9oG|r(C6Fm z1|qBd(Q9bofh&4wKq3M&9x(EQaCtBdEI~7>hfof~R1{%z@JAn_csvN}GwuL?dj}^6 z5c7hpKY-mTCDtj>RWLO^5J@6fHNBl^A}#O6=0F_PT~qUnr%zuoO^ENO~0mZ;JVhRwiubv?bKDnmfC9F9*A zAv|5DJBj)E;v*Q-d*P3^BF$<@_|XiW{xXFh2T9~&Sw-Xv6MJ>OOdBSo?5YeM!w|*9 z`7}N1iVA~3-x%w#(=ZAdaHB=RMfKh0lY>-Xct@X(wg*GnmoE zUwz+z?SUc9g++XUhP!PZzJih&rwp5g1x9NK0a5#QHEDuF@IG)e;-HfOIZfPxh#?l< z5k8pA0FZ(1sru|r5DjO`{IuQdl+(79;Kp8yH#bjX`IsFa4n+U~IRLMRWOPUX?~p=# z5K}lYQxTE*%BxQTl8UYD0&I@X`0#HUvOmTqx}TEbGpZ|;%xcUD6dw)ev6I+~#xBEn z6;@2FHBnBf2W%*lJ$5EKcF02odI(Rp09w>Qy;$P=y*Kzm^tU$^I>~|1b0iF{9O-4y@cIqMp(5G&000GZ0aX5Vh+qLg z<;>0XerHxr=t&%udE5!5u#ZWi6hkkAlW#dr53;pdbdzwX!xCt5A|;A~1+E&7V<6-% z#@U<^vm<&vBsi%QkLp7alqHG;1SByNn2My;!b{CU_OMm-s9aXBn;dZ%Z>LsvtXy|h zCqY9|Z@1}oHC(9Cw)t`PnQdW?FYO2}^v#a0l;M+dPl$&X>IKm@`GKEYYY0%KF?2;8 zR7UbGZU1OsS85g}+mq)Gl_i3pAqesB}9z7G+2@O3HXi5e-ny*y9$tXpiIxNJ6O?GvA_V z2ei+~O*c7Tj6;@*6w}|)=M*U|_KpyuGQ(3S*QxP&WYiED3~ZJ0W_9tUz0mhoBYV8* z@^sLw@Jd{8M^pKOQ8y5;>m>4zS?G)uNA#(Uuuv# z`?$HC#ZuI2b^=gTk(SWLFs6v?f!Iu0@nV-ypppNup`~D))>4;crmk9nbcT_MZf2u| zFY3L{$3-uxAe<;*0sZM;@g%s?HnI~sHj)aV!6$Ihlpd%iY+h?kaXbnnB?5&If`INN zfbL?a!Xz%2%p$!UBNMISxv+?;fsqI}jRZ0uvE&4w1DvR%I^ib~!-a8i0|0zhpWK(| zFy=XH9QW$NGP7^kvKv#bdgVC+MjO#CzD8ZNoe&WyI~Fbnq^R9!qHS=3V6!6Pi;;c6 zvO21K6s#c#42*2xwhfh}`CAAI2A;UD9H{WwSxa8X-R)mzFStl(MA#l+M($s)UQUS(uGhux-V7dWb3n28{{n z+{VrTv|gi)>Go7IPZr&(RSx`cEEPaBDBMs96;lE$)H_uY2m`UcmZv~Y5JgUDr1tJU z=-FEz?&ikbb-hMQG|YlM>AN(0Vl6sBsjed@|FWyaOMug*Xy9=%Cow>ck}8*Agc@C# zHI0y8SR`R(2yzrg@wuOd#yLY{$F`kr>7Rop4ft!8{l<!arn`MQ)5&I;*b+^NG+_(2kEx<{=ic3yjK3PfTFdl*OXI4sK?S1sX+` z3(r?iYaj*8p4q33)+BHODI|FR= z!7N9d=-KQrnslfDqfF@JAhPLf4&?}0Dz=(G!E){-412tWg-9pUDu?1&M$t_rGe}Z! z$dfPG2`BddFopBY!*&>aN=c;m^nFx8&xz2^u+nR#XAsaU5f@1=*E2?^k(%tW6Ahw! zLMlaiff|R8|gzcVFe~vKRkMdMIR}pd}LOyPfA0 z%>Zfdb1YD~^r==MK;u9vTwzqnet%H9I1SmeI>5!ROvt7%WYm*urBF*@4551>V1QA} zW4Fn>@zg~XVNdtfgH2@;Q;Wnx<1I`k+%H>Ct3km414?+)5Dr50Fo0pb+wPCHRfV1{ zvYotX+5I@6#q*Ch*ckT*b+zdj55RCgU*g{o6s-$v&2k)vu;k^o6P+*KqdL$4knQrk zA7MZXP?c)Elo!OG;M5 zD7By_6LWHiQ+kw=WHv_RzRioq45`Ht5~aDo){ToK7bSiO@+Di zKkeoKB;MtP5QR;lsd<(sFEh0jE)$7_@(KQ6&D`8e&)r1rL-jDdV~PF-mw^9x+;H(+ zLg8W>06^BqD=1W&dJJx3!p_he--_&rj$IPWWeBu(Q$1pRGK$RNvr!szyPP7n1lrUK znBGC5Ye`-SW_LyJ$X2j;Y5kGiURlS)6BEw5vn~f z7Q5LvKc!)RP2UFJla<1G7=~bxcYbEHB!^ORK)YRIDoRj>sZ@E8>&T)eI?)bxt9RN9 zX{YE=)%krWjnz^BQ<&*y1`qiSiaKGU8X_wOV|u7jbP%6Ko=n#t-(QQfCPA8}GsW6bSVpKxoE7 zl9o5M67?z_ZCzIlU+gy|Vi*cNBkVt^F*Hm>dOg+lbprcF}9^9mc3ax_|l0UqfB~&}!rnl@Y?Q>R1@=L8sf$6L+K<5Tc;1^D!Z*!~(thUR=Y7 zCAff$XeuDGQl}S!*X#X3GB;2AoKj5)xDa=g%6o(3igNyAVrGPRF6t?MSlv4jH1WY6 zxlcDtQv*tkAk5pvm2rfQ0%Tdn+_5j27%t6mr}GfnXiW2Hn+~X7fd5KdotJllG2Acn z({AG{e%+Qcj;x6dkth4J=1U;URY-}FcGGw#oJv)l$N>Mx42(%!=TF8cXd6(;@QgS* zbbzB+MYf$rlmN%(G$p8_eY>GJ(>7aD8fC`qF#z01F%tL&P_;nzEl7#&^I6rB{6~7g z#hQ&q&PMId2oMWE0fpuMcaB_#iS8iac%MN_dz#ipfQ8At0O^!bo3MJ#zwsSDPPoE& zE?8nLS>GUSS{~E*d_cwVLHV}8`jSo?{V_~rdggp1w)DJ{xC7!-s<5Z`z)$zvz0GqM zRO-s7;|vN!7n*}o4#FCEl43X{g`&jB+OT~Tl&}_IG^X(I(QXf%dmMv`r}i8hh@2&;b#)pN7DK_8!rS{5*%_Dy zwI)}_qG5E(5~xw0IV>ol=SeH=e03jUmr7xHT&0_Hx1OyYw;<*Y2_~5 zyV}mN4kiFrGd9y(z4Xd=!T_DlQiG0+S{-gNKx_av;X=G-A-Epy@&FNo1rQ8+kM?wX z__EdeeD(S~G4LlBG(|t59#y#70AqJ=1#aM<3H@|)F(;20FmZkmc(edP&AVY?{dV{C zxF-c|o68Nr78MzR!>Z#-x&t(rut+HbLxl2U(_B!5Zo>?nSa7?ADJM9z0Wv|H<{;CU zfmA0DH8?oo235-Q)Jt*cpZarwV|^*C2WnJ%GNgIzbxGv}(DDx6s8<4O6F1dOr!c*v zv65J6bDN3`78CGY_qVe8pcVRF!f&XGFRl4QY0AJ6rZefPXd5@v11tX7iirxeJ&4?> zv*Kmzd)CCEvj;b}bs9~7-H=RMbhJw7QLK2_P0Ag1#(VfLl^(de2CCC=ZTE6 zXLHqs5Y)II@nur}4bCbj4oQV}LK4|EeV+I@JX zcla?R_?ll$W4hWCY$p2bOyeU#R1!y^Q7ppdAwQUrk>L39!X5$cmJ5l}O7E$jEVKfNQ5C6m_Oy}qG3p8@ zr{yWD=Y=$hyoxQb!mY-_zz14AB_6l}q(E>hF^7Xm;La@l_S_Px3L+EbJDl~I5*&QL7{lnk^Bmzb>Bq>ujme$^W0qh@K8!cO^m821(D z;gQ`G!U=_2XXMZzg?rf#)dRksr}rB{%tiSZ<`(l!K=gmM33I zTzYrq=YvBwEF=P1m9fN02q^e+b?wDk8%k|{y*(VVu#_z+k(Wed;b~M(q4QKWq92*5 zNI8AS`s|x(1Fs9v7NML2xSTFia(DHfoitq?Ob#LxI8F7%BFCPPb%tiJH8IzxmX1t( z%Js(ybz&^KSdRFQ5w)A<1|#rjSfdbZ^f>&GEE{>U<|cpicCYA&dI%g|Q{ttZ?0Gs- zZ%|y-2Q>2?r?8eaqZiW0W(~Ov;{=7Bu`8|*K&^}AWQJTyO%Np&S(U}&=GQi$lX&l6 z!GQ*yNx^F;N-jC_J{yq$fVop`V>Sc?C$p=#Z`1A6+NzBmxPyRs;>|u!{M}d+LqIKX zb_51O)$B;6M-*~J5KM)p5Nb}eK^k*uBOE9~QSUG1a!;j2q^`Efj!p3#3SC0Vvb$NmE|0=_L39(^6#g54v*A=vgRf>o;~(9dN2% zu#tp)5vz6NWnKH`t)-DuIZ7y$SR2Pap59UjB$~)d)A{r|CSP_V9}E_n`K)?mU!_n& z6>=9#Dl@h#C`btr{#A_}SS);^ITe^lBtAkJ#^1z&mMl)d3oG)-X)j=l??Y6HRgFUIx1TTU(ZUnDc z-)MG2_vWQjnq6I*nn?rnjpbz_YwK1wttWbB&ApmCSI z>u%~gBv+l{(@RjA#Chh>xUN4g!5FbMS?#Q3VtMWb21&nN%&%gxC z=iQDN1uQQ0?h|^MklTA4BmtNgI&IY9NyVItciu1`b5x?6XYzO(r<8t+? z8KjmGYP~1kW6)B7@C-`0ZhC^f8n}oQz6CU>F&M$EgB_swp;kh}3F^RPVcou47qRAexUk(nZO5d;JBgq8F2`;O1L{L^hG?)1RM4rq@^+KCb8M>GeIu z5;PkSeI}rxPVrAW-}!EbXqGRhiDZidB&ryMgr4#>;yG)x*3I+42QRRtm5On$1*lKk z*C9a#mh<&aU``(?joMZD4KJ(t@H)E2akU@_uym3~x&3f%0<5PVge0_n#@+_6g^9)6 zluL}wi|t{mIZtS(J%(X?Cp^i`vb^ku4Z+;|q$n_SqH!`Q!+#igw|9E&2myg;D97f- zz{vu6rx~((w_%)A^;{HDD;iJ)j73y*$ojl)lioxi-6B@PoVIdL1*Ssb)J(Y0Kq@3! zgW+ACrbW4{mNba>oo^UfF=^qLFG90vsh0e>DmYvMO1Pul(s*;Fss@87BZoHm2BLs-i9M*wH(Tt$_t#OQf&!sqguGX;(QvU+GuuJ! z8PNf@%j+K`?f@XK!6?#JmZM{_iaaQ(4CCrwbwa{fe4e@=oE-C)0fNC(o2t3G(Mk+HA0z3+%eNK)c0=(n5MJatolv<|q@YV13Wj ztR!Hh+U8PRj*u5PWz#jAVV`jUC znhOwJPry>Ye;O53V53HHe!~Xip-e+pxlXt6AQm-)KD4lc%aJ;wfCIl>O+pDNkTyRs zQEIO;SXp5?aIBO(_HmU!Kc`rb%%_Bwgbt`CQHtQQqOS*8*2!ScZpp7dR^dh!$CWM1 ztdMk;rl+^w;T)gSLZl0?U%yK=1dDplTGt} zyB8DXf3D1VvYw z?YH7cmyxBX?e=M8a;!W5r|<9ah-%^=K!lNlf5Tj@c%XPMkvk-OL=^BorP6Vmu_ms7@oITxKpSZ)#v(e);(q#+WcfLt?pn z*^3rJjnCCj5SGKb@`a=o_m;Ovm@!hHb2KsJ29uLQtL>Q)%ub8$bx|8a3!=26)fUS+ zD1kbLj9S^`(Jx!GgXe6wjwrxLM?1G<7IEp)T9~jWs#)pF3H^m{yOwPn{HgWMRZ^oc zBbflhW8d9!2}`7{J`f~PU-*}$i0EpgMTs1q^ir$l5%GCy%#7j~r5}?!-GRo+SFBbt?mmU7`(T(W0skEU>7*(rd8VQ1eAr2DaagyK!N(J^6$5#W4LwQLYWaWoB_ zB?;X6X3(j4*enM0On{^t-B=bC8+3sMM>$+r3rIy-OkjqqQEZ~+q=mkGZ2Y)&j0FRu zz5YVE%){EIx0g;g*P!oLQZao2%+!^_Kxl@gZ5_(>I@iQF<|8qpIm%}bjY9rH{*KKt zQywy*-T~rRSozi$BNu7m;1!4_2ub_w|9Su%kE4nr$+~+EpdwIsF@{Pw8qlk=uc(RM zDY2>WiM*;igeemF$39=hl;C`%P%SBwMXMl@AV)13(~4a7g~jzy1wL(1M+32;Sb(9# zy7-;EqR{FJR-=NKr@i&Kz8wImrv-$jEbrbANXx@H&`~C`5 zNPL{#X|{P&7%b9NYp$jSGH*Z&?0dkMI9$-nz5&V;H<2_oAy_D>LwF-VN$n{Lm_jz3 z&&v^jwO=Jnsp@rduUx|O?cxb_osq+yDRLO%tFaZI9qOg*vrhA)=2F>;|ouPteLTqhs;UvCrKHIDa~WWc_2W2+35q zRBy$ie5fv|=mRP;T-v(@&&O73BO({u{CS|GsUB+V{t09>?wfu{8Ej!=Ok0j1Ev)I; zBx-XlP#`Pa4%EDExW zz8@Hqc_9bDsMMugA2!N>I!_Ng{&9GEF7v3E%2$;|O{w`o2 zRY1UoAhN!`zUxNH>~+1Ld}Xi?LCdp9`|ZGx(0$3}{rsQ%#K>zVABtziT-7r zAWd6Id6@o_jRUEzfYf4!#KAnJnMw^?-PAxUl+gIO3-<;h)JIjs*KfGES;qj`Uz{FFMeZ3mJ3^xp6D~qIizDg#LJ@^+p5mCXe5w zvq`bbElRZGP|NTwi_R&amlobIMI3W5G{1;|q%igCNfTpG!XCWlE=3w+<5dW#5RV+F zK<6LaXngd7cwSCODA2`CQeZ1jptl_`4`hm3!a%WO(?0K70fO-h_gC#yLBK|;K?JfV zywjC(6N7*b7YWsxXe1$)-jOe{$`Z zf?ik9NUsLdF6z>$LwYre@^PTcXP#IvN|7d7{6njnEo>Hu8-7wfAPSYo@)ixNB8o2x zY^$U3{n7aO*~jg%U)5i~ekD1iHAwg)lG42p1qf#JXb;o;nDX#)0|?IMf)(}H!&?X7 zASaWJMU1*W890n&I5?v~^=n7U+%22<$BprS?B5D#X!2ihm$CVfG{I>f>{lg zeV&;JHn`m}mrP2IbZ`O^0^hgX2N3nht-oGn$?}$02M$Nae>M9s=e!v5Nj1RGMN#7Xl*ow{e*A-wl2uCIGhLTjpxS zgRp0IV9m#tIQ^A`6PkF=Dg|Mh<2sv#)Us+_!4!x(!5o?taocvk^Q28eTXVTw|N8SU zo^CWim7!cRMF3E+<)jW3PH1yi45j+4IKhp8ng>D@8zk7{gGyH?gb$y#q=%*_>-T|4 zW9T^sC)Kli$!+{7_BTKQp*QMKBplLf+s|JAZm(eoT9NslTlFO?D^ihhM0k~g=lipz zh18YHmP?-1myWkeRRXZ5?PWP+B-FwvxMW?+%O8i3{>`#>XE7^=y~tvYm%S^PItCH* zF4(FJ9m;Xl3_`|eq8yS=@>yq_qbYSAPf-Tw^gS7hQ!j^>jqeAhkcOJ7Y@#~F=g@uk z$}L&Iz|NV&Z!zteOlyFpTml)qf=3Nw zhr=8^+_b7uUWX(n1LEdsMN9b8;?V|7($~Tb9n@D&tlp)~o!H5-vn0BCKl&u|x`r&;0}I}OI)kfWZWs4g`-DLI zkO#yjxS|3`AHzjUDs(A{mB6-FHnhV)mM9?Wqpm9F@Pegu8&h(7r18Qt)vKBeR$I@m z(O@?W<4A5rMNBd;@24vWB0nV6RfJaCeCxcT7Q6b3I)ID%qDT3&4hVK>J#4(-g+38? z_6tyuDnPiEIBn1sJvR>&xIOO7tX16#Zv=qu!Z=Q}h^`b|5tN-YtDMt&Fd3x!?r<34 z1tqG>dHdl!i${Q!VS#;}i2zZ2$MH1tpf*FdKtV!d;cgj@G5Z6+x+c z2FxsnhA2m`PcxS$7?l@?IlSItPI zN>DA{iG_k*>)`^yX+6iKNfFytdss@FkOF%yAv*v7@z_a3K~zY4ucy;7#;VvzD?qp^ zNLx@TeB}LL%&v)ILP$2GVV&T&o7Y1XXIa}7SGE-yBY<@VH-vLP((|$2eMh+TXeqL* z3$f=(reZ^}WJH`xJ9%?I$i>Sc%>mhv&mNATkxn+z1)=PUmnK%rV0tkiUY`~*FjPhe z>CqiQQ65RKlNJ1$mLTyUXC88Bm(eZ#$p^l2wy(rZEr)>sULnK-d5S&ew^(*p+5#4X z{PAOR`EU=Ww5~*L{efX=&eyZ@=A%6Jj0h!=aX@o|Labmb9>m0~3_GDjgk|C--$3%i zuY|nm`s!om!;QKIMYvK)H8E$mP|I}8F1twOX%2a?NCe_=2j7+TEbg&Ot*WM4DLt%O z>-gqa{y(N?6nF)>Q#iRabOzdTWN|7N1v#+62XV#6IyW-0qKD16QkK-OHyZ(lAmn(8x$aQTSKDAYT=@W}}K@b|p1R z1=b%j3Z}tYX1rLvCCosKT7AqO#Fx}4F~%!wKBb&!A;Paf8i!vF{&?I(#D$q_p7miH z1q&+pW<1ESg!B671$F>dr0ioM$5PpnP58Xz1|^sT#2J@`&?75%W+a%rz&^(DP6B68 zB41ZC0Tz?uYci>17l1Kmmh2S{PU-;UAiE^why2G#7VR;-+jA_Q88*`SR9-ogp&8^g zda>=daHJP8-uQeZ5o(8M+f84w4dunE$x_~}Bcg!hH!T#@0XNjcPocrCh%F@@+pZ}N zpgr+hbYzfbu@hJ_D`qFE<5QYuz$44hxOk(E0DKFID0;mNvU7B`g5Boze0!ao3~_{pMIwu~IXr!`3q{`) zz>j7_C(@8Tqi%cp&5WOj|n#1;B@W{wz!jQKn8_-JwC|G0G2z76&K@$yBn&~l5cUP(8EtzfU<}kRT#XhKnLza|h zDlcXZYLw-7zwMug?(N=wyV*x-Yyj-ZJ1*5M;OO9SoAby*%bRrFe|d6g&(<7 z)sPlX+BJu*i%I~3v=-*%dhyO}0MfEV^_$&?k0^v^<97PJ;IK+N1^Ao8Hc`Kx94Qxu z`}l;C+fp=8v}eWSl}b^e&qzc1W^|L~P37;%+97f&`NpaSq(*b!bj@GkCzK zL%%)EG(>tI6l@?_O*ea~D#KD%U_oh=^EY8aag1bWPByfdUc~0p6MqXU%bAH1mQcJf zAP7|Gt8zqn*rkB>b|z9CVAYU&pcToJw{b@7rupX|r+5ip^V2w1rXb!8p~6>hic7^g zFoQe=FrcQERED5Fi_GvE4{?11%$hHX2s&5b5$bzrP>1K3ff9 zBtu#D6$ErqIN~k`G9#mc{;5>%QP&OLEt_Pg_gs`XT08tcZ~O=7zkWOUc5NclJU{R9 z#Ht{w0U+Xg;ZR&vF--8&@a{Pt8mcn@o?XP@ue;>Jo&ZQdx4$TSesVcm3;_A?pAVGm zm@In%RdcY<+6OhN~8Z!7INu+5LhLGDeT8w5jJUxbWy`DbGQ>1G^>$amO+s*qTneQm6EPwiZE&9`Inxz|Rr5fO-gXNXV*+*BEXzSzc!wb`l&4iR z5TcgZGjfAPsK%h}ANIYgT^q%v)C+l46I8v%p!j3|c2gT*;20|zl;8#@ElfB*yitql z9$p8cqTt`2OKY7znvLe*OR1!XG)Q9C3xMj2D#1=ub_SQ3zA5(|l5t9AsfZe9@@*b+#>Vk#0hdE-^ zX2M`dw@9GQAOccSt8g0g7Ha?K+$qsgrSz~WD}l2V4%ai898qTxb97UPs2HwnC>0}b z=vVW?BDTnp=tJ!^=~BU%zv9S8w)x61dG=+zu2qXQKl%}0o>~`=T3CL67){e+!+-kr z?v1H{2B~5PH-utazM35)E@iSpg_VF`?iqk!f)@NZav&w6IK2T_m+yM=LS0p?F{eE9 ziLd1LuH|vN5g)bT9&oL+6@{qsIuPPUFgTt2OnSuO5ADN z4Fsa!ddtF8Qtc;rq5`@tsj}8o9dZ>7t1rTmN2ZIgnI0FN#YkmlWfvQ>Vs=x6*k<)Q z^~#sDL2XsqL7E(t+*%U4V)+te6> z&)%7j0~pm&sma8M#$$1Xr{@Dr3Q|vWKuo04ppeTkQ01Ym7yHHm!RPa3OB#T@n7_nH zgi%9E;M9=j)xfc#x*3{rnMV4a1E^quOu#7%I?i*}>WHlIw}|8bCofX9OM(D3>yQa7 z;&jNO&MojkqSe7qEu~>2W5RkmS5OTWjAbuhxs`G@Mp^@%VGV?05S7Hm$Ub-wQ>^w{ z@Y@i6GEoQs3Zhc3C~)l|WgLEp3_oP)kt@vlr|H2^`+{f!3KGk6sAmR1bU_3)eozS1 zJnRwbg*le&@b2ISE_;Jn|c`|!W34R2y_~F1DFtI8Jb<^Vn^&L zwu#NdsvKT?ls2$(P1a(CAVO9XHnI$kfMyP{^MMC4$sFREx6OhmkvhgyjiR-=FMjYT zva1V(b83W3G!?0E(V=Jp2d3JI&?_$G6u>2&l1Sb8OAn3pZ6I4IS8D(4ceGTW{uWBz zG~G-H3CKp_U^h);A(i5?YTAT4zbRE$h7I;gjp|DfF^RM`1|xgBW(a$!$++h=mk?%K z*OA4=M~k{|8yQJ?)9mxWMymLGyWX8!$L85eQ!=q~uwDjkfgrYWAVHEFkxA4xRhiK% z9lY*55K+|#LyHhl6aLDeCwV(BuYktlOH{_qMg=I98WgFJ%m6m<=mX?EjBR$gmJn?yzRy38V0b&v<2h#LcE6Xe*1lO?K6xsAH5cAb2{9r?ws@s= zu*0gPykOoaqLu=zLsG>@NJlbfy%iH2iY!qI!-?2rH(y~ozxTTf^hW=ovI3zWXSqisKVw!>kfY z-q6ZsBfm;2D9DZcL~v-!A&TmcLzgRB!kwqB&8~o;G1wWGBeBt$Knw~Fkc2c5e&|t5 zE+VNgPF%n%(?00jtPO%jWMS5-l16;Kz|*}@hH3YV6yDfQlL>uAVnrJFfS+mJvZi%3D6ViU9$mO_@&iv!L?fx2)b%xOk+wRq zY|=C8aMwN~iYS~xNn(zQ5IPC>UqYp^0FfutzjkwAz1sVhK#lA>Y zqVlk-hp95*<6<0A6MLqGdxl9*hzKNhD)`noAmAwFFsdw+@uM7);t(SVNm)ifu}RU# zugmvpTYIJq;FnILMcO^)`)I;W4>k(YG{}Vud+c}QKv;(ePPe+x53jYAY&dckG(jE) z`E0#a$Wu=9If0Tf0|K#fjfp)SKv`EjWzg^Tey6iG16!{UZ~ z3lLDCm;^9VxRim@%bVpBEsYG`yWl0ok~B;8W$Pj|k3y$-4P(HH4STbPFentOMU^ly zFmu9Vb5A6bMnX(xAYmk|V)U#v$rWF#h>D&97*kll6D4VAlmacS&@~?rXgIr&2Vx~k zRSKe?&=|CYX7i)Kd+CmxA`x0<7ZQ2RPG7f4@Ofqs*zbP4y#ubIlcHvMMb6_ta1lum z+JOsU`S^5I`(A7oi>GT75c-X0N|XVT`llMSAqADcs9MqJ4l*yz#3A@jgim~?>UTbp zTpMFKuQHR6>f}$SHk$BFIav9sUKK{o=2rfRyXG0PgWlAUeizGz8~cqesQcNneza|N zGy;g`neoPH75Iffr%D*f>N+hp9Gx1f;lv)}0O2L~^K~6()FV|HLsW>f1KWX>7+y{; z3;MYTsF){?){53EK&g;TLyv23p`3aUhk5lX4vuq~p^O0Fh4jJ&R-t0+v{TSTNo7;L z;4EdUP4D1JAwS5XHjFzqt=5#|38lXfT)+A8@@t_e@Jy_QqEa>9+OIn5aW`TTU)-*& zn64V&ragN-ndFOR2(Y{2qXM6=>u<}vG>^i(fW-XN1IyuiKkmo}i*w6#Q-n(QGa1wu z11n`}jqXLJSkVBslo?_nWWzE=n2Db{?-M&)l!Z?=1x=q&A{eIyF8HCf4~2@`Tx8XU zmntMGfl&t!rZ6Wef9lvn`?wCUB9(`HQ3``D5G?cc{bX>cPDKT*2DyU8$vDEXeME|Z zMlnuaF%nj6zz>*!4u7gc`UlU`z_lngIU6LSOM80UqcFdeHoVv*jH@3?qD4X2RX`PS z_ZjSt64hh0Y1;XdF)p&jO-k5!eF0f1Q-0Af49xrezHa;;w}Yw+>+p1&9@lH0O`BVM zeI*MhNtxUBc-V=r6yG+}^q3sy>?f+AYrU36`cjg(cSO6a09z_f&gw}Gr9Lrv0~@_x z1PY8D;+q!1P2`OGiB7Rp2?bg-a5|B8CABTs7+4==&t*Zip#V}}rL>_+Q5Fq=V*>ed z*lv9~sT+{@>HdHHr@!a}5!R+cy0Wex%SCmBs2P<+_gUP)?BzSMj^1qg+c{T{bR#9e zy6(YRkb|Ie2mzBwDaqYQ9H8dB2ap+nBTUQ4dv@t4!AI^Splnj&$IE-c#ZmZ|O`zmQ zt-44g+4KzMa48-i5C%S!ZvD}Tk{Ex8F~zN6l7Ui?WZ;^6b0&<{y@P5E!5&vGcyyvB?H zns_Q=cfM$uZ6MUb&pYgEJDEO>aYeog-Kezi}V-KeXXVCcfbWK%*e4 zRglCpy}tlatuSSSLdUOX|1HMl1X%^L1wR$+O?BOin89Y{2U@Wu{AiKto@%aj9$-Qi zykKPS55N0#oo=^VDPCB9Nu8O2iM;VDOqr(&yfHz_Lj*JmVf@rP5!feybI2u9EX)ls$cIxEtQ8-5rkNt z6KOc+$QdrKquh%;eW2Cu0!6su8A;qOiNW`1NJiN*6#ZyROeGO#Dt_4TL)Zn@&^MLTLbIPoQDPG=g zUTP%cu8Bc^<=U?hfQ0Xq0I2NCAKFw9aEdQ=K8!`A?zf)R$sw#T2dZH}iTzV=@nU<9 zATg8L_oyMz!aBP!o%3pJxLiGFDeNmj?}QPx%=0A=3N5xa8F(ZC7sZ%Qt#O4>_9=;< zu2pR}f|4!T&O-p@4IqPA4D@&`S1~uc{XSv1*a3OFAAQ=p%c^Ll@zE|?h5E=%OjdY5 zYcH}wm%|uv5f`BujWrZ;IuBZkjF=vRJKP%k6%mUt(teZ61zhJ; zc7MQ2IK7kngRk=;Ze%<a5T0a>4?_~a8X<4FNd$m4RMa@#bJ&KP z$Iy@CHnVpA6tem8dUgl82;%EVxsAw#&} z>IsM_q3&aMvpblAra+O>MbQR-j-pD>ml#$b5se4Ylc4H328~uCH2xv6>Yw^@bx2VF zp#3ZgL75PnC5(12Py4cRpu1nce8EZX^L)Z}bPAd*`&?iv8>Yog`mexx1tXk&%xiXO zRXyG_EdYZtR|@Hm@|y)iSd{(n=m$l&sJyI4<2``_&~&Eur(DUz!S&&^CHi>ev}G(? z`lFpH@~nDJD@Q(EC`MvVnz4d1JPt_!Rw!&Vx8B|uxu?hddiN>_R7FveXEh?@rJ4L* zJke%Pv$lGg=Jat6$$=isVm@>wV@b~q`V^gJPv*x!dVoWb0y&uI<6-ue{){xVhc%0} z^t^>zWIzDVkEJtOhogs4Fm%mprrVM=W}!cfK_9O^XeU6~>+54A$dANq5&jK$mNIfs zM46�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

    hvKf=@})K5l_L0KLxiL= z$dO@48{4eml3n!AQRSR{aF1mk%TQG?x-V*eY+#n#h|qgf%WUnS`4T&AzcsD|nm$(5c(_;Kol$moJP6e?NEg)0-&>NdGQqJat5XG0M?Lv| ziEowuP#Bdx-PdcZ_y+TEPd&$($RBJLIR(U9eKE`l@obJJdK&GfNwA)Cb1%0Ib_BRm zlw!TKreV2lPAG{yBjbYB21&Hbl}4qLtp!8O{t-(gRC;aJyDNck?{@1;q24VPP<7rf za{x=q`OsHVElC>|Ez>!(HO{-6mR~CxNBYd@L^4_T&1ap3yblqev{BeQDDw7sT}yer z^RQ9Z_&MetQ730)HTMHi=z1Xc}u1X}7ylG!_=uBSwN zgQ|ETsx^kNn`7E9W1eHo4D9sl{Y*npb4V}dQiYx~MX>^dh?6H*gxG0G+eDst;-7O* z5c#~Vw+j(pbiFJTIH0LFqb5*~Udl@kvSKj)LsO4yu>Qhfn#G)UmXdQu2+lqBMg|=n z7J%v@PzTE|`GgmnyBbn<+`w!1b#qnVOC>(bR?mf;h+^D##!_Y&T&;ih^FR3V@<}Rk zONM6OgWQpf2&%p@pk8k($ip;k6FP}a?Hbv_*^M|)@0$@V@!uL3x@Qs?=z`oBb1eHBjVKKQFk5zRsmn{x8-s36^ zTIDy4mqHdLql9~UJBT^G+lO9UaW%&_;H&k1jBQ0&a)3DDqm|OZp9B{_fi&I%HVni75S9MwH43Pwu z;*)w=rNmz>Jd0)P|5)v<;c`pf4+Wh7dVb6a@*t zDoIEr<{#rfmODv9cpgh!QkeIokzMg6qS&G`M{aG~`=jOBT}3MHj(|78)1`$c8uogP zU(bvCAs*GTW(;ixcDUo~LdCyQHs(#Fe6n+-Q(5jLbE;~t$1kRIYSQuZ-XDRnKUVuf zH`HBH{8xOCq&WOs$$RA%c-*(b!MS48bp`k{t*1qv*C5>@^Exj=NMLcwr6f7j98JVk z+{>J(E`&fDStyaLpyu-P9kLrqwU{-%$UAR3F|tZAlP~&xY@6?5JV&6iHJO(*Fkrj; zlNiN~%;6)9x7CcUQx4IjR7^!2H+R6JPGgX#cciXdQP0Yj#p~yd+7QW94Z;;Lh&LxS zvEoYEn?i!4G&mmBvW)a|ih>p%5doV?;^~^cT*(xhx3BvS(&T*R=tSQ*of%V}kdLZ( z1v8J_zFkwWo!uJYZH7q2!7C?AuC|%vKjx&xvuijKPiagB7LKes18za`iwcRF=mXBV_+*a>u+zPm;~Q{`TQ^c^pAe=JKy)#&Dj9m z_l{tP&yO+I>)%GifBe<2stMn%{plb4ZnHH$DEs9_z#TEq$aAf{?!BXSY2F_H?A=@M z{nPHd`|j5Ee(NpW)0?%H%^MoXjzkbl6+SvrBao*3&ENe)W{w9==B*tU7_|$Qo-=c9 z*LiN4OB~nU-o7?(D)QCsSMX8U0*f3DM<7@5rg1-MzKdDUa@f~Oi?u;+x0fIdIGfxP zxg*Li()s3LZH%n-XpI?WYydSdtXxVS1qI-nzupn7$aBq7)L@^>o_#L2i_9d1dsjck z-bN@|W?R{iucM-Md{x{pholRhOx-mN#l}#KZnpB zc2g=06!k!{S>bzg>6EK+5y8%|mz;Hn5!!F^_qjE8cJ%`u=@EU zCV+QE0X-;bvb!=&B?>x6B?qOEaVbMfyikb=aXzx2gBIs?=d#=-48aR#?FF47yd8-u z^8u4*k1f2cYEZ!&l@OjsvHYVo+Dk50&25Y2tIVgGb)=cQIiVxpA_Ul>paCs( z_|4Gr(hR4UM(09goiEeh$He<_U)0-D1CKz>F(Ntukm0x~Z*gB&az5k*FNTLYu@|^WmhG#`1{G3_SDqF*FqVs7@LGYaEdAU+f%D zZgfxRuq!+A5dA)8`L8`1Cy{}~bRJB$?z&1TmGxca%&LCV1}$3J%Le9X6T8BAWfDS zlQkNJef3S{P9gy`s&hU-pB1+6klu8~+!EuPGlGh`FUOwSbL6Isuy2Q`2CJEdpf+R9 zRg@-nGy|edcMj#6n@kVNz{UMVebx|+ZCCFbe2RMF+qig z4@!7zA+{fWxc}t4mu+b+HTOUJ`Okm;{qOwO|Mp)WyNu($Vz+u5hreqQ5#jW3^G zMvQL#yxv=BPFMIYy|#iZ3R;lFy`u{*OlwX)@OVT1B> z$V`jG5xNNj*lL*>C%XOXI9G8veS3&F(lODPdOsWh< zOn4RA-ff(cN?6wdUAm*S2u?=5kG$q6P2k(ny>sZwWycNT7%Wso94ggGs5>4Sc6%Fht;5Ivf0Wn7 zjo6+ZV%;UL${9~aqTBAJw|EX7>-(DIud;x7y9D##57(NN9LC#uiG%r&^&oqL9V9If z)uqiJca5IXLuw-!VRvRNf;B2D+e|%mi%1t6?C5=AmOf{Y`r-cA&Wd?iSNZ62EvoeAB?) zeS{fpLSK(PLz)s26H={6*S+0c3|aenUD)Jq57#lGr;>JBN4vB+7dH|8Z{!5kI=!_T z8UhEFrVGutU?4Vbvt?~!@i%FskU4b(*EoSxEjQz%H>k7Q|gDeRKva1Z~1t5y623-Vz5aw z)+Q65q|Ik_n(z1fSk>6eOT!#$02y+uT)@NO&1?~zo`e~7)#N?#pNhFc&d=dE9)pY-Zf=8Q(5idLMg#>4HIA^5B~5%CKf@ zcyWUt-exv8tlQRiERvcJ2u`{-4e`#IWuo}fI(?KfMr2nlg<@TGO%3IVMY@tI5u8P} z)ChL2EK zT<*_*=lfs$?(h76|MkDEk=j^~qNYbdal=*v80A$U^4KU_ugKd987n~ z&~Od59y8b_@jhZ`6=mx_Cuc2Y#!hW7!Y$4FhQ?j<|LHIP{lEC*KeGq7^8EIzZ?CT} z<9ajeKYX2p!^Y!fL<(Ht&a?e^!A0_EDI>bZSG2|>^0>XSBSaN4*i#`KE3}kyRogt* zPYxZ0dK+PJ+wJ|LJkL3E?~+0lsY3W0TmLYYru%`DJlmVy2hpz|uk*`spn><=_qTE3 z(XQY_f%?`XCL-D<>K097g1Kx-9`T)s1^UdmKKK6hqHf)J#opQNF5R98Ci?23!-&uC zbKb1mG9$bl?d^m<*F&iJ^UXmoe%<$P^7s3AM25oN;yL zC3MVp89KKM1I{U+*t~|h6I9&lTxh2!=FU>RLDq17E)vaY_T*P zvKTe%qI*$dTKJ8enPKt;ye%{JQ=Nsi2oikPVYS3K8X9unhXj_#%;3EuYg? z8ldK@F1LmJHiC1^t9~GL6U6I4aPlA+E)Bw`GMr>4^le+jqXrN==RT)z9>5Pk%|v|` zXfG(96Pc3@};wE%{?^-s`xK*RI8yx!bywB>`XCh zrc{HFGRXjT+}fiq_01d<>2PxnBK6iN#5=aIxIY@ILA(eCynR2f%hCd{4#$D+)sk@` z8kpZTE!l`DWfE`eWvm8jOrwf%SbJ7O;_`rltMN>{%R0row711{ac*2AuVKs_FeAz~v}+*n@K@9$$-ylx?$|9|;sf3o)#`Q5+&{P{oo zlRrATckf5<`@a9L|LH&b-7i0B?yJAW2^(J?Nx#i#U-sS1oc=vKJG$F4P{^bva3Dr| zaQndW5>d;WADh)Zdhg!ceX$cXPF<=#k|myxg#O?B)t~?P?JXi=&L4mL25w>vAGhB6 zy0#~|m*u5DHFrd2Fji}>mZwWD-r3CL6o=q+)eH-@rC-f)dr?iX1#?vRWOOPc`gR|Y zrRfTu2S5{`2vA-Vdvej<9Rc#T_s!AmvLEk{22?~wMt6^5S3R4Dj$;g3ye?qv>os^< z6-U1&*EO>7Y{&bv$D&B60KFmvCkdn>vbU!=!2O)XI&8+FnHd=~vD3xxVMr+`&6TAs z3W1kLxyf!DgHBK z_B82t2Y(}BNQOjB>nqfHSG#ItjK_1|93>&&sien{#)_CcgHeYsSzLU^e?EDZBG2k0 z^L+pSd_aT0;vrC{magJIq8N7%9ueM$jzZ9hGTb;jb2w$9u3S+!n=OnWPRA(TSHds0H5#Yea6IQm0`-^F2WJE9|Nc);BY~D zuv&HNS!g||&;N08YL%5bkJwW#sJY^QjmgSHUEX5U8giE|nEav@SNQF23$exj?%Y3W zlQ}REL{W0@uc%^n`P1rHyJjFJ9o`Oa$b3fxr~o|Er2!d9_^|(rKl$VT@z4JP60P3sU;f#j z{_Q{f;NEQEN&oDR{@@?Jer-8tY|Yy7di?P1+ZNNC{p_dT-NzM6;`Y~X@7^6L>vx}D z_r70?#ryVtW=uxkl_<5g&pCQOlFAr2Z(VCN`>ho>V2n#_FN#^9*E1qKx4-}PYn@Rd zo;WAZu&MUfe!rhg@^m(pFlOn$aUBwAK@Za_$>Up)Ey{Yz(A(z>%b3wuNa-)PaepHk zlsSW96wR$hzHaV&Bg60OqeIU|&J3DSwY3-A+R7*90NEBHP>rB(=lD=eCa<`~OW*fK zAJltLsQY%b`+edeykFz{Ump!2ifj&ncPbMc@Cscdq;zk%wNSLA)B+U6N5 zHg`9cdv5phdK&YYVIutN`$cbhU{j%W-|XlOOoz7_q&hElR}D+LweHlWA7hvq?5?N8 zAMWQA5kbCwq33}*JNl_dSLkz{<4b?$OETMxYEWd#JSqop@TMt47% zAiF;pZ^%t(;=x01YCt=s{f|b3de7zlDJoL!dYj$@&41TSOXfrzF%bdIS^zW#;+auNxYq#Ih!U+$`fnEi9#Z|nWKPb#>gJM8`th1< zi=fvp#&&Ng6@A2`yS3#7#$ZUj{K4j$Q$ao8s_gC2_iPl0vHLa=3m(mSu^vC|y=_#! zyQa9u$z6{0a6J=;;=4P|DZkv>uBQ9fkqd`)5WSN2XL-2CLU3BglDxo?j)_)QL3=?-=!v4>1$1ZQR^Y)4V8D=84z5UV8zW3G2!MXjLx34qS!M{@e-;!>-H7td_br=~u z>0%D>|1p5y8+?r;HAFKruX+B-pZ>|d@0z}sc&%(cTz>YO$_nDt0y=W?^!+D)`bT^3 zlw~H&N>(N$6mKuLEa_@?&PtuJC>o^a!rE)jnIYL8cH@lW%iKr;X}NtcI*Od~25KoV zbe7^#IuQQt8X@hs&qq(P9{9s0epGYQR*JJ$GDRP4GX<`${OoO&|GCcd&%Hl=`5i%E~@-?B}3BuJK+CwP)L&mMrHCHN&4zjDd|n3l~7-VvZQ6 zgq2B2+mrzfSL(P`yglJhp)je*OdPiq;*Rd_NOMM3XcKzi$+#x|uA1+biob{$RhYZU9&k@nVWl7=k)j!VT*0sOiBdX<5 zh=7&P+|%euE^uT>uX05a$-(YM_RV&fH#;^k#DSCm@yc9{(HxP|4U;~IX&$EJlcn<5 zoueshV0V;<%j-_1D|@`wsaJ336_U}l&-;O_an6{+ zOAt}aJeP*x2a^q|-}P<#$-W=%Yt`l3n6^^fp~_kb2R$rjOnbKC$`6OAf9Hl<`f4x7 zLHLW|fp`s*Tk#m&9V1z6LXqR?zVAhG$SwEX)%)vX=HV?e|MpkE`u@uotnZ`$HiiA2 zN%S+!{I7oXt3UXi@AuZOc+5q9d%OSq`=8k29PGXQ{?C5)*MI*@i?Q}$4q_0~0V5aM>n7+DHn-b>y6>)ZR6&oAEW z%cn2@)j#_e|INSp*Vl;Ny@XJcEK5`!2QYpXnR?otGecs_7{s7FrYYgQ_Z)-nb(V_t?aGNe4ie;8x&*(3X=keue zKU@QyUiU4hnerMH*u=j)BG%`tW5-M8#Dre@`#JWP-Fb)9^LE_vTJ2*2-e6JeYj_bv z7Ek#nxS*_cwbY|tr180BTQA^KZ(mQYsAg>;1SuI2mERKGuY?}piE0jMM6G{+Jt*49 z!n8^`IKsC2Tm=0Rn3>;BEFgIk(fFYsj?w_(8KA`R(&b+iF{YHy7iY*K8{%Ft>*Ii9OpfYtl2&XktFKMId4CZ~jn>q_0K0M84hOC1jp8%E=F{wi;o4}EHgFH7g;~}&;r;0hg z+S1`W&r2Y*rK!>1XkqCoJVCD@GBlu5YM(OL$;~;q<6t$7oDuAXbShgW$Fj9DC8Q!4 znd}V^Epdvhd&EX@>#?R?ny(kj_jGjB+VBIbiGD*Wr)_Ih;7x{^jiNxrw@5dylRhjU zv0TDL*9^)8ECmemaJ=1iMGkZ1OE0ZOkoMs3Oy*OU)ub zV+Lb}5+ljYI2cuHt%vjp&?A13Tq8s`qc~~^?W>d^&02zP%)f(YFR@Ch8_W?Yrv2)K zF2E({FMs$=+E$#2xBCe|da+y1fB(0Cb1mtIxoWS!`SlMH?`V7LKl|>dP7ybid{u62 z)y`Nh#%X*@Wi7Xy4*tvk;y*w3y~H6IFU`FaU-kaAvefUL`Qz8OhKWiGDx)4t&x3AGg@&6 z%X3`s;eCkiL34y6n2=Ih}}&7{+%7%C)VoqLE3bsPZ^ zoVi_LQ>J;GW_e6K?F4u8F`2udeO72(4R{Uc1@}fx5wJW3tFMhDG=N@vOibBo4srvb zSfmI~B8MrTkuN?Se0}YpD-smPwz<@hAfu+4m{5kE!s$yA-pQ56)H)Ad&Fx@o0dmFq zm2qITs)5D|fe_}B8Kv8~*H#79{|oE+i` z2_tCGF)RZ4p=7s+S|-jFybi{e;N7Oin6Vl4*f1y%b21j!QjnKfj!DzZ64DX_6;FVL z3VuuJd2RmSIDO~}5Iclva_b8urfOD5i>-K?%)Y|0$U#ZWJR?39qOyZp+$5Y2TtP}3 zs10pr1Oh^UvMtuRTa!f`)>5*;toW~ZVS#L8MYZ)lWJ2e%hS!HYA<=64%(~TW=^-#? z5(J>qSlxfkYUM@AXGwx8z3pbzT~Tl#=@k#S(SE_#{$)bV$O=-FpnKe|F~0iI3^3~e z_hXG}tzqA3T!R)mYh1oK`d2CaftjVW8jSxY2B}JJQL_2qB>Bjx=WQgaD1Y*`3#lk7 zui(N5o<{?M_;${eNY!-)fr5JH&rHFyREg@;&m9A=vbOnf`cU6Ukf) z(@YU_ZTVy{;^{(mEdC|1NW=_Fgu+R;gm01052Na4)$%cHXl z5L;PqM$kUrIHD{y5}klfL0`pTekpUO(vu5zP4?EIU_LUz^}^+y*H|7I(cJmKBTsto zIUfZ_9316D5^dp@dfof2HB5kho8jUWL{3Y+2_~(er*OFqhW1&2hQy>Os)`G17BJYmfc=xBu|t%g?`WtFgK=hTC}! z$i03$&#&kGXWxD2xk|~Izs+cW^64`MIL0>r{_EF2xxJ|3-uAx7JfS8c7c9e8m?K(e zC%UyhCumP;y+_O+e*E#c-Hv_#M}PJw|LR}=n|MO-8|Q7cIvoX<(u*whv9PZ{oIn2f z_WhSnpI%;k6kj~&pWgrWgDqwtA43!X>~RPXKV3(G(QuoTW4SEeU8|g7}mCp z>oRYV+rGb?_dDq(j{ZdA4lu|(a=Ru-gxTF7^tc8lLAlyw{z?gz-un9-2ot^e(V>k$ z?=xKE!Wm$^`H$ySf?}yMSduT)cfDWpeN60`mmSrxHG53=&j>vnCDjTIBlC*%Wsd#g z?d^V1=7$|u2935kj(2H0r7Z=e?wo`9b~47Bsps%md-qIDFJ~F(40k7HveqZkNc3Ei zJmx&-yi^QDH6104{B4G!>h@{he>_j=T7c-36phxvxrpbv{2iJ(c6OYRTKQb2zS*~P zng!BIg-e?k&*Gz-6W-Z#VEMogGBPv-tfvSn?$6C z?vHD4&MB?VxgpHjTF}4k(JOExJoJ7|C!&dxf+yx<(MlaC^i17JF|@_*cs$)jO8?Xv zhQ8C=+j$wFLvp@ZW^q%qcZ7cy`*m^6sIo&@S>A4xHPL3DZ_R>n>5Ut?RMbcaHb1Hs6o2jw#RiZ{U!j(GpOqX<}?>c)#l(ZKQ~eYQq`5!G)_yqQ@5$x(z-X| zhM)H)$u!dt6(5aqfOwzdebUs_)M)DFN*o^Se-zrw^J1wYHT!yA*d#a)5JA!DTq_UJ zhQp^1b$5!NO*iMbGo=1RKbv!!n8uGVVm>nN>qK>c=t4Pd^GD`AE_%EcD7ErqEYbC} zBe&UYJNCZ&s@6Q02Ftn@rpgkecGgv&jy@Ir->xB1O_ty2Vc`tv>rI`siP~O|)+MpM z7{G?8Ucv=|1+cW}bsV)r`dLR0Ulq3l#S;$~CZc1~|DSLzP}OwHVq2HJDR`}=*&LE2IE zLuHu#PzY^SJ{6dJlxApCicC7CGH2!YqMBA@#(7-Zci!R z7B5!1$oN9Z*s^b?z8l8=Vm-jsK(fUQZAz21hqqHY8*75OkimSt_1-Mf)+loj{0uflCktY_M}NNUxQO|%=R8>#bCI&;+1x37 zGviWu@TrvMApOCmThJA%Zww-ddMnlq1RG;Uyxr+*SyB>v>$E#F-@G&Y@=(TK*K+&1 zU-$d@e*W9P`r8-*?)S0p-+lVLU^5(~@%KOc@OIt-_0Ac8|C?VE8d@^Zzj^zHTIJ|1 zGDpmEK4u{%bL5e;xoJ)BmJxXSt^b>U_ix4n3eV4NfFv)CVa@p|V{~rqLgSXX0@jr5L~7 zyWegH;j36dt(f_0+&e!$g(xnRAFnQ?EYhwB_#?O09_-r;;<$9^dY;2{Za0mRY?dvGgU>}a&bgnB$_;|w|8 z%-hn7Hm4$qH={Y5Bf&x+JSYmU#(Pc<2hdhfrtE4+Y`UGwtSsTq$=p5M#dH;&OL$wU zj20I_j{LOgG2BliZ%1ILG7DLV$3mzB(+F}dD8`XENZfT%W6woZ4Tet~Vu%`=e+yhM z+wRh{5Yu0X*`g=~zo>Q$E>W~Z?i!6k^G3*&udYe?or^}6sk@GP+L|JjD7Cg1Df+aj zMV84WE9Xhg2U8~|gpphu^b3@3XakYn=_wa{;kZemv>Czewe%dH1WI-{p7QcfQ#>&! z6hp0%d8I%iTE@p2bHEa5aL48F@(e)rA;y9P;*?Oljmd4ZWMcb@>J24^#<%qOjQ^4@ zvNU?9bc|#G$(0($rRX9IgYzoNWrZIGz2DoqGFNkqwp;EYrSQW2GVMMmHZVm!(_9`> z$zVLQxD>?zHjAQstO9P;uZzc_C{SCvhsiO! zIoFI8lwIlx#fsl5{+|(`1H0L08MrQlI&{-K+8CbYmLpyRcQ_hA&{sm%_7$|TL*5kokQ zOD)befzrW>eed`8xp}@_+oxl#PfaQ8Z69-B(eXJK3gRtf6b{DiHR9j=)i3|?AO5a6 zqx5ex+FyVDVQ(#F&d49m)2yluyT70P(Sf#W&Y1DT4_|-!-ItlT=f}`1#{(48YwC7J zRFBDhpEB|@2 ze9i$$4HBs=yhhBV;uCX}-d4=BJhXH2?BY924SJSJl8Bzb%Un{;I4=DWWo~b4>BN$E z3v0LA>v=zkpjaT_B##LA%g@&i{ebQ0K4Jz1$wDppbSi4w%i-_WhBWLR@!}0z_w(Mq zjhR_W&nam*)_9_5azLoLQpV(L%2LqsmIa5Eb&+#oQ)-d`Xzvl-4XTy$F;+8Kb3Kg- zyx;Z*4sAVM4P6q|g8u_QiDq}Bg?ORhPo+?+WSlzuevNdCwn!hh*5)h>1 zw`(3PyZemn-N!`Y?8H>$BwDZ{=Bl>7G&EX+4#Umc`y3yfQ57i(JVn6-xgH5;Tq%Qz zC8d^GJS2Qx+JPZ~3xJkoYg;!DgC60WgH7P$6@z5*FjJ%LJcldf9WT4mztW8eUoQ4> zQCDDwQ%&2g9}T&5#C&|~#?POSY*{<@_0GiNy&{EspmJ$?AlQ>_F?f$~-|8eoT)gpAS3c6QKdQb)46EYd1`bg6>Et zS^Bc25acwTP0WRZ7-Jq8^k?X;gA4>HSj#xZy8W5)_5B<%h}MXFA^Iy+#*oVA?&yCo zOmeljMkEV~f!x@N8>yKVX$CmyKUu_H7Sre+C|M_?nG;$c6tb(3iU=~Jc_#C^#3II_ z1vOH#x$6yT{)AITwWeFrNjnT+rx25a3KuxOy97{=2{Yjbu8nw_WhQ+Qs7AsSFd}E#W#lfBE&-1-v4D&zy{R?s8bc zpE|>=&Wk4~WlSF-i>-afx>M}X^>Jl$>=`qfIjlIk6Q#Un?7f9~?>*;m2)#ts#K*-( zMq<*Y8Ze*t$69Re=UBnkJc(VoRbHhmxr0v`cdqKYjDI zGx(n~!8u>jgtJ6?mNj#Gh7gmV&3Zm>Xp9QA{<3%9I#9d!E6~Kc&&X~1=7~lm=_o5> z2(z3oyM4O?U3_ydpI$kf!N>Vo(d^Ap)~$Gf@CNTnm2=%Jo17{ICWf7qEXviVp7_Mi z$KI^Z$mVt*las69%sCq0-pysr63-_aTU1siXrTTpFc&K)jow`BfbEL#MdrVc%x$>Y zOFvc?X5@SbJt)l>dd+a+$XeS1N<>4$x$A$VmAb>z(TNAedVz||awCXEP)*4G@NjqY zl!R+nG8H*u`dV<{Gh~kJw>{5cRDyOUX+0lLPLb!^BaE;rSk=Eh7F%QytFM@r>m=|; zNQLGLTp#r?Gegj$a-r1Oji2bA;_}&Y*K4t~$6X1}`=jB(+MU%DO^);5ow0aVYv10VhoIv^w3a?GvZ zr{%oO)rPVpGyI9o=Ymh5{IrDOEbm)(e-M_Sba&24&g>(M#LE3O=my{|Z3fP_#frrv z7M;#&UC33WulI~t-rM74=i^>x*^gU3L=Ui?d+$j4nZ01wrzR*hSKw@RI_8EVDT#Z| z^Eh^nXR?vLc~jWeVO%Z%b6L1+uvff)T8ph;R-ZyT$`LcZz29YJ>?t2Z=fI)IDxQ4F zOt_ref(oqyN4Y_{mh^hSwhU1XJjoRx&y+PgARC_FPYEnqk8lfw;y<|z%uc7Ut8!jt zmyj<>e1`&kS%@7DnVLnrQj=yRzn@o{;lylkz7Un2%C(sks-Md&cW#IK>(O5i%Qe0dG0_^l=9q(J((Ty4 zH13U=3wZOn1)b+*{ay?Y0Pdn{XuKymbs)J7%7n=T?;aB`+nuVeY7SwE3D6+Lx|{bj z$Dsna`(OXX-`UnZZJn3xhac}TDO>dRcK+Spe;W}YBk&)--Xmkov1*wI8)o+oe{6NK z4A2yresVdRi?B|VMv}&>M!Ej#um76U?q2?qs)EXMsDz$bAZCrh&Pm1ZfAot#IC}GD zH~JevOr)?qtEF7Cr`0qjh%Y|c<{y8gAbK@@*z!!57WNEI&-R038HJv;wnte&JgvCx zXd0)KeNZgo+>B^#2_SdMRQi^Ow-oGm%@az}JU~HTF49!+ledf3qhzzUpyJQ!CoH{N4pXU*s^`4TfntE1l8~b;m8U3N z@c4`Ote_hqYc;ttISJuP)MUgI8Lq`#6UI6}oN=>4K{v?@5ixXzalVa^1X2mUa9-UE z{csV`(_CF$Me1~uD7lIvjxBoD96<5n{5iTUn3EBmLZ{j&Qp+vBFN}hf3j+tpoc~&Z zFd#+j+@GP}6-RmQR^DjhfZbF6m6^=YVu`J97yG6*^We` zbRr8t0oa0Ng*2n7#OLJIujf0C)bv@+@X#quU?uKf^R*ZmUF1u(2gF`p?>#Vv($w)Z z$nU2Fi`h)|5-uYzgHL}2&1z9uaHySMu4YfISYWgY_$h*v1}8IuzsD`-63tQAn;A@@ z3EFYXyBP^%YeGe;O53bKMjdb(JgTS_rRCDhiH@m(%z`C%Lu8hxted0+GVk6rfc~qBvv1cM|@Ry0z}?iqWw}$a6U5 z`+IMt)>syZVp&<)96SC8e@dNq<<-|i%6JwhCD+$+oz^jINEF#mffTi7wN0Odu;ap| zXpr^xFm0Mj^%$E-8(&o?c%|f1KV`*ObLyN!Y!zSPBmGdb&~9=r0$)jOu$m0c`UT+q zs{R@O1wimZ@d+ZWFx12|M)UHXc0-E)(%4yK56*77<;=l4Jn{y&XUD?}BxlNHb$>GJ zK!9idqG-Oi%_-!VDA+Y-W-H1AN$Jeqm4Zj+TpLad4Z|_yuq%%ZT;3E<;~G&Tt1ri1 z3TIPdTjPrRnB;Y<`^_Eg8(*@enr`cErDw>Pe0b-0KEhx6HK&H)7yRsvfALl*Ak)3? z&0F`|(U0TUkC)>(UXGhL|L^|d-z^v5ysmk_#^3$J4>>aC>UGBTcYpW8x3^0;dS2)3 z?&>H-#B_78E=9#A$&7DVJ{J*Ffl_imT9v8+mF+3;V!xE+0Xs)Z>X9V8zn@?j{p8E% zfBGkX(jKCF$CuaF)+p`GMJp>%E=ca2@{SgWFRFqR0Y%v(ke^!elfNiOx|QN<^Q~xk zT?6VIx7&+Et`Y5&loW?x7IuusO{*Ta*v@l`sUre0^+SZB|b^& z^P<~jq5q0^kYdHgU9g1f-4Q*w=HM)s;eC;^h}%#u$Nlqd8N9?273_^?K17RC6Gika z^mK2@tSVnt%C5321GpiUzgsZ4@W-#k*}-mDwW$@dCBr^sXh%)5dhcUy z5esr?PjBf4dO%ok(1`TG(jk06TwZ!i_m5&R9U&XU3RwhUJ*G zJk*GnYrJbVWv*9Id@_(?3Bg4XCL9r+X%Ky_y3$GcgaoI1HOU~}yfZ4R6Cv(MR1qhE zkL}}qs#WT#f~b<%1CFC$WdqOlUcmZh0c^6&eL7Wbc3n(A1Cr~&%wc72|kF0wU!-|ANIw? zGSKvqRFKn41vUc0lcW_SXtijlemu}upNiMPUVz>)pvmUt)@Rs4T)s35N= zfnv7gN}`1!L@&qPYFhD}!W?reRXF}{BATVhVb_S#6fK62ucZpS@@LiJK;Or)qMWC2J=J(8_+tAb7OUpj-b8dD{S z)%8$F#Ls60Ej$ERM7b+F<3GWK(361B$eeugb7g%q)-OM1&ag$ z1@HCp5Mdc><*y=wt~34!rAc-jzR9r z_>cM;2Qm+R#)rkWs;54pn!b5Ex<<@1B9M37Kg56c8vG*Yj5)_j;WVav$$Aq6Q&?@gM() zxUl?Y|LH&0d_N1a*Owi0F?iI!`SE@&AhhW zAt?{JIevNV``-TLAOFd(e|-CI|IMGzh=(owZU6fAo-)R2onBev#Jqp=<2l9~cSh@6H0#<`(U|*D?(e-6bMqsZpXYVo za>694-}Z-8ZCZb{b^IrvU;pVJ|8Z;W-~HuZ-RFse@pry_x%GX{{8#_s&qoB_E9PM+ zq{ntFCeYO(T$AQh)(dNGPYkI)bVlB*vHU0r`i}QM$FSBPSGD_jU9cU(YUsVMXuid~ zi`S}3Q0JJElVnk&F&VH9j^_Ik>Uxu6vTyl%9Ht0(AHi!<2OOmpzd_Q46qwwCKw>IAed^uC-~4)BQ|6VgM^BC{JfeRvYLRH? zwh~s}36W;}@zF@p-y34H(U@Li*!OGV=9}|=6gd%FNMVHF*G%aGNeZ+#e`yV4ToLi@ znwSh}s|5q^?e{T!E1Rw2#n?6Jj3p)VXDZk`{^(uTQ-FdQOmiVKfKkrQGZ26>?|#6f;$4y zZ>~qM>7`=Vx-VJdTMx{0ysbqd8+ruKBs<*P^9r3=T#_iT{L}6bP`pN-lR6Nej@^k$ zF7}uP|M}KdgKSfB8YlrB^W$!6>9l4~r(>gZ!+k_G>Kbx(O}Z-z0r87=)E|h3!bUWZSnh3 z{m9aE1ntzbQuk*5(i#6p#QT^s-g&S-*yr{ETvAjiY44C2Kt)!S75#*pRy2pY(9BI0d?gwg!-PFImT)yr2N7uw(J(=bXA zR`!IvU?#i;+_S@0q{z!?| z;z~Ec%NXZi{O9fIniXKNYqoUPly2&#Nl=y7c_i1v)0~PohT#%~EKFTK^A+9lLpGi{gkI@X-yX}o~tz*mgb8t>9^V8ARBq{8vHGL%um1WU98CQLkGb?U1 z`1-)7zD$9ds}~_b!9l_VdGeY`@fl-Y1H;7Uc_J-}rCLD7xaC@2)Psto84|ci*O>p) zU;M>625Oy%?c3Wh@8YRRaDXwpy&kvMYNku8x%7zECi6$Um}3C<>dl>R-of5&{fKG}%Jaxvs)txIoA3xpb52Rr zd&JA$JlV~CyRH%g^~T`B7)g{-EETnDL`-KfH8|zXXsGFF3>`lu5}dJ&5h&JzjASP4 zvV3Q34Vw=wt)Z5gttQ2qYN81OXQ3k%07aXAoGaZ6Bv%#$Spsa%xJD-9OO4-1a+4?J zbBZP_W?{-8N+&aDlP|;TG2`19xiT6c)giOPB+#6%d(Y>9op=dc$ALvs&+>{{V{1>g zhSL7x|HyGC*#A^3C#4<$thudZSwfi${hKpla$kt3gI?e{!barSsQVp?VLE=S8AOmI z>nUPc^+$z7@WGNn5gu9k{;StW1)rzmA2k;UMX0&qW#$t(6^p&Q3rZ&Jidg#U)0jh5 zSJk4;WFbeb^I(5mLe|(-N+ARgg_bY$G@c5TT5yKbgKwyqH24(1O13?h;Ggv1_imh8 z+3bF$=HyG9t`g3Amb}XDR%w+fbM_BYTQTQ)F32CkaM~$ugF1j+F7gAnwiJCS2JCB@ zE?0VL?mmuxX;hcO1&|2!#Dawf#~vV^qrhDmR}E}vR`YEP60ux;E8?EQNJUfz`Y+a|MiWy>; z>i==F7}X*-KSMjNk|$O~dJRKzfk?L%?nwDj3`r{%VN^V<5-P=}jc5EXc9KaHM2a`K zL$MINzCmh;43%Qh=+{fzSvyLNrUg#ZJ^t1jsB?2QE6AP{2?zEWt6UEnn3*wJlU)(b zElTUS3Fd~`_*wYBmH6cPwm{EzNd!%GhZI>Jv6?E_;Z4l@XCZ!zY~ zIb)vJ`#H|*x{rC?uXBtsW5QJI8uM>|_|Jkl zjG+Cd^9TM@nwd&d{#6b$YP%?ATaZ+yH&!Ez#d=kT!u3tIH^kq4Z~yS)4>PtoMe*gwX5dUQ=AiIgSwYovC_@5;vK!Z@le|niBe&A?c zW_r}n`gH6f^FG3z)&o}$CJ6}TaeRSuY`r09g{*e4aJUXB$j>`YzLTf^G(^ve+{h@X zik~sWo-$;j1WLXbN6vUm z*8!qrR@T%ZPj$!*K@|oCEr}PV=N)V^jV-B`fsc*Pgpn*+!Ln{pwCf1v*5pfP(m`U~Zuf%We4qVO6qI(lH z6SXl3de@xb0k!6mx*+XIu_Ukt#-uX{*NGm{r-jtmnsfMizYHR{x1+R8&pAqi*+B1y z`fMm-rV;U4X`$H1+41O(+kRa$NBAN{ssNWXO(2gEju)GJ+Cdl#g!&QDnj1dwxZTf_ z=tbmKJpMI~5;IyO{_)TMK)d(P2X+Y$;ilx5*0 zW;-(PH9F$bSxBHizWUT&LtfjMGzNOKziakY=kfcPpLXiG9qtz&6({>0EBIR4TPrf| zzHfNPVPm5d&xtaexiX{m;r)t<^L55Nd<{g$3S1`T)SwKUyQHn!qfA6h9=2U4HRCwn zxI{(o*SzhHm)X4WyM3$ozxQ^I01xEFy{M=Y`Fz;0xyW6-+r6<5C=u+O5gmEFrzRuY zItgKT(K10wU{!NPfX=*R7Q!SS8A%&b_Xaib!+qiiWFSK)Y|G)B?3ZqR{qTw%E~)Q} zeW>}kL2HQTkb)}Y!vDDWn#V+Ss^Cbqv5$2;ceBL>Sk{>A5v;FPv z8C>U$2ovf+5h9mGY&2xUJc(~z;!7NAq;1o{L`$M9Br65I$5f5v*vixbs>6^8YIk>8 z8=sRw=N{x%;y!UjLT;!Kt??;_D#?d=#jeM2DzvBPv*v<=I?A@a12>jb@1{nV3(06< zkVtSCe$r2g!+^~m12^mw zt8H-sGGFDf>f0GY?HO(9N6?9l=QXD}AGUYCXh;T1omewOk=_}?BiG=yRQkVN!=5Cf za^3h~g5pf9Ym8|H!CAuQFP)O4V`50hL4KYw!75!p5H-Dscw)WbQk4|%Vb z-ECQEU;|Fpn<`%AHUc+Ss00||VQlB-*SMVJ#$)!2sH}7{J4hLT?w;bQT`Iok``-dIC{#zdE_y5_a|J(oYKM&beukrkI(}d@B4Xl#h zn$*liK4mFX;(c5cEYHYZMNkD^UFuvXwLhn~W8Va&&v`xDVe4#{Llix2fAZ<|r(a%w zc#sY99M`cg^2wFsioNwBl=~J^OMkiw^yAoSVE(ZP9j9*hTjhoP2SqH*(Qv~!NUxV! zUz2*nZRxYb`ZoqoL{oj?i%R=)-R~dTJxMtnrWjf=q+r@POF^9nOyNFZkA?VoXTH&q z{<3_fGTqVrE>)Ln&V2=J0Du)VhEToxm_mPTZ@y+NYl^*IUaGro+*0I`VjS&ZU8ac# z&B@m&IT9__jG=r^_=yHy%IV>p^XLuV*1gR^9r~iEYSsxln(f@C;2#Dh33f6)Aahmv z36%KNGexYFHcBAkK=>IqFBvf!yw`~E#{n)`u`RY!D)cRf9t~lO0?LUtnuxZF&okx> zoWT31!<=e#^V_+)QA@k1HBH53EV>oixZeG7I^t}88(@R`=6&hwfslNjgN;i!@7;tA z&Y5xHtc}~3TgGZI#*FvL*Gcza-Paf0d&UfutQ-MmbO`8QzYjpzJ)B>J6W zErJiKv(C{R9jd~f)vM-TMJNqkQrT6jNljTF;k0T6Fn|@mwan#3zvS%_*e$(b1qH_M z1k*sDZOYVYtWRB2bNYtp3sFMwj!?=On;=d7XEl=vyE1u5!W^y?T40pof1StWL`xni zRyUCkq)K9#Q?j57|E*t(Vs7v;sU?&_@xtbM=>Fs`6h@{glK^3nTZph0g94O&k(J+M z_4edByPWKySvfdgw;p}RLN4)E$O(zj5fC)hn?c&V7^3-f71iS_ZQ_Wn@OO^S){`yW zj1u+zd~2E)%rV0hniL)!LT~u~qqQ2p6T3J{EK&mllt3C0&OU?wOVG3qmMj4V*%k#C zt7d*#^)tk&m#3NQLeKB#^>Q4v7mf4@M%+@|`}FcikJ|0q`+KmZX_2#8!|>PpgD*?# zEiR|B?RTE~W(>vaZOb}Q=e@E-y7`!z_oBW)LrO`EH>s*vZ)?$n>xC7FTYo9iSu*}B z2kySbqKJSeCMhriC%A`-{}$x4Zwn2rG}s&~)6?gSxhZ5F6p7Q`C98_R_efP{7XP`o z#$X$hjgyVsa75IjIX-O82*uLf8&!OGF-+f;J+s#tYlP}dt^zH3CFtVDz3$ExnF;Q* zYgQLco%5=ZraZi-7(+8T1wT-zOWDkz0=Ui_Nro`2@QJVIX+@wU>e2d&}g`*FNj^Kakg+uO|G(%$#|pa1C}M&=wDGY4`M((^Lr zczb`_B4g`F>TXfnPL&};jy)E^PrrPI zf$shNe(QTaG=Z=Cyj1m>B0~ujY1ETzm%xI=Ml|S8xXM$NpU|--Go_#qatxn25g?sp z10Q2jEljZde!P}ryO<;D@w#*fv;+5DlSGUTfY(KwTfpr##hI7-2?N3U;G=iO3O;^9 zV0`Rgmvfv17*A!5^fEgmY6(6wP7Ke`&nZo^z&GzT_`^mSe}x|DU(YcnRR`JV59qfs z7kz2eoLC>uHzl2W%d}k^&utk{Rp(cr)Xf`S=Ne{8s-C)B9=@H| z_JLb!E;5?he*4ZC$}54Kit~0DWkf9)^EpFNTCqZ*MR8#8o0v5M`!XU@Sm1hpf-4Z< zjPBiPZw2pYu75M(Bkrn(HB^Y0l#Q60xeEn~Y8UfR*Tazx0lP0mC@H|EHCD?*s7yJW z>yQyaj-FPF*EUG?u_EjUoTa!IX_U_dFhC@gk(PG8xVzQX=L}TxsVXD?n1HKi&reHf z;HlZHW_dpO^=waOYB+69DHeHg5WK#Gf={y%;$y}Mlbe&gAVz11`757AV z&dP6_D}f)$P6q&zE3rDs%VDQay!4>Xo>bi?@sYBH;++PY%2&qHkqyN}F?{vt zHG(RZOKC?KKTw^y58cP7`5P6=WM6EdAN;^IB_k4nVMbK^2LqC!NVX4SrjZBX)|VKL z${WI3a=9V_Tx0|_Atk*g!8|9wO@Hv5Rz%_!@8>-t=i-+KMSSej>kXW^=KgxSc?M`! z3GwEbZ}0c(LLu=ioHRee$_=q`YX3VaFO3_I6Kl~LvmLG!DG@M**1P8{vjnwS6;b9w zWFRqH6#upO^<~%|&#+{v=z?A2CS?S7Trwjh&tb_g@JWIIF1o-D4mDHyk__Y2jEh{0 z&d%N%;=e4BVsX`ylh;sQcW{?UL0zNp4U8^@DXMj`0A4_$zZTG_9Pad*p-yvheDZ_f zCKNxBvPHy{l1cE4U6|JuVh3)AH%zjvLxyMVjAx3}2^{HkmJ(TJRoIoz1%Yo#dmPss zfYgO>F=QY6evQe=n8z@BCwu8y!o{+>95a6WHh+A3dpUk$mY-i8R0Sqy3Tx;a* z{?_)LQIJcIUAAQ(KW;}~N$h0jR!S5R!zd~=qK>9Vlro^ z2Qmv{X0)^VDrw8}bU$8gUZ9=cuW%emE_uqO1^a%*N=JNWTqt3Vt(v+xGvDX1$?*BI z_qHIvK%aEximtrD9P{<)fN1wM_YFvEU&|R?wL4i0Rk5v1vMp!D_0-?TSk-nkKq`!A zaYdk6xJ2`PCA)sDP@{Jyar-eVeSAH(<_+2%=VP};q)jz^&N*K9-pxRsdXKS%LB?Hd z!dwH8oY9>VWkGcByEg>xx9cj~%Azx$Cj=bkq8?NW%TBOKBrpdQ;m31;TH*fa9PQrB z9s)PB83_mzbp%R8C_b-9w`=R{}S;GX*)k2MUr*;}*b9&LNOkA)k@#!QA5S-U%@+G#w8 z4ibv#<-i%41^XGv*3*(l7-1qRH3+DnF*G4d$^IimXZGgJnt9&OiN?1%)vi{eWQ^)- z0eA1X&oR~ieynUlwXwJ~7*u#YcD-_cJICNeL7}Pf(m*fosL(h0!fwGNY(7Fqf+V%B z3TJ=5-1g?1uL=+Yq#;q!TvjvJbz$u_+YU2)-X&U@=(K31Z9gnkt!^NsviAFS4vd}8 zhyp%ut+@b#YgvXgRG-RABJ)0tReB@{%eUsQifM1>x-jaKIby)Hye9j)ZhmMKVZ;<& zQaZY81$?`%+-&#u(n~65K(h5x%<&Oo0cmnJ5NZz>L2QnL+{N7a_lG)gjJZ~a%Z};;W zvzSX7`B&moc$}m#C-Hx(RJb`cvYmq)A^~ItdbO`aE>KxPm2&#^5nI>Kt6L&`zgRHp z&9gCTRxK2EF5QhnA85jwREb2S7WT}D31&Kv0|l#dE{*C%L-gjEc|`Aon2v7UI zQ)kqKBdTh=uDMnyBn)vX(MUMv$ei}{MPUhpLTJtl9{bz+nbeV0H76bh)Lee~>))V5 z_jKc$^18_#Dl+NA+JP4zx?ozI~@plMxL50t$ zmeb6tTl+>sA#mO_*lt!+(jaRXxrgLGoY$O`h0K?I=eAeQ03GsbfsWuLb1@{;-dcVp z1;?)e@ewH!IdyfHyR4VwZ;2zM?7l2?U+lBbZXn|iC5`@#{@ zadRBEC8*n|?yR0$hxYW7=SsIP-(s$Cbs}j}H6EH_x8Q^yUfLB2DT)9&QrtD>_>%DA zyA*>HiD8YFgeKU-BAA_byjG+lNG^$caO8NzWEc>$Qqr`ku*3Mn=?6V~Lj~nL^^82D)aXM)*Vu6!rvHFJmQSCCQk7^3(AI2MkzvX( zDdm`vH5B|I{!2|=Xi4St9J#s1saQ}0#&;;KpKMYQA zaP*tGgxhz>W%(r8|8ajV&bRwCmyx{ONyt(Rxl9CErs5Ch(;M(Xyq+f0NfMt{5OX)i zia|@vSf9#cMSlwJv&d!n5M6O=_+$6#ipaSI*^HLGCL_=Rk981}OB97>>$2H^`J09Ht4? zGG0qPaW-Az2_#EFyEPb1;Vg?X`%NwK z+^@i@S;Exp7Tg!TTQW6m;c|9Wr!6%-6M-uIhgd=@)+KaTT$V#CiIZEL_T9<0jN z@QAm}|LHIO>RaKKH?zw$EGl_R zB12D4L9)$!%y&|&$W@ee&01x8`d6R@X~$pv-QWMoAN+jF?aRyOw`=s)t}XkcX5VHo zH%yzN$ddr;4@-zkOPjbW9XQ83(K%xQRSJn+)XSPpoAd1cfQMUe0YyRV8c_`O?#XS^ zkZmh5$<};kh{MNI>FD-85YBu=G>Of$MoWUAzO)43)_$DJigPuf`KOTvy}BXOuxrlS zN-TTx^9qgX0qhF}O|}E-%D=vypC8b!&6wo5auE=he%bqD^<#HPDyX;ZoJwIGUd^Ej(OWmLDp;Nc>nV`cj?|eZ9Y1+ukpW=X)@| z>zbuR#=qj?-uwjp%S2RUK7b_?*O;AME3ykz(6fpB?VO+XR=7WFvEVJYPsg^_k(*!l zu{qt@``)v8#6ti=>Qyn`FSUNdKDb=}tbAQ+yx&9@6_`xzfCSO*Kc&b>`KvY|RS#uXTPuZ4^gFDU0rAgtE3=0%c z*+|s@1NQGc&wrdiQ+COOHhjRZ?R%kyK{Le1<9EyLHQwd(nb=b+|g8CMTU^j z%qXYYrxt2&JI3}}s|KuED50K6mcP9fB*wa+6csBp(<9=ePd8GLXO4WH*KyoL>&qYB z?ypCGf4^2F2X8R0Yb*;4z7yq&sv3|G)A&DDLn2nTSbP`KT^b5fp}R54z>Zc5z?%AF zJ$Q1$RRO)>{E})Ig46ok?rpKu)^Il4H=3Xcz2Fij0K}_+>uuTcck+4Hd@hppRP#Zj zSQY<4H8h{=a=ckrEV-ZYR7TUAdO4cuiJdbli~^G9`zVVAb(=6~i)%i|WYr0qUzWdd zpJ)oNqs_TW(JU>ssQ}P{2eX36ZEuxdzTYn`a1I!HE*Bxe7}phry4NZib8;`3b#8SI zgo!iyq)i23pWubpyo09gmZX{OG3VnwM6Nxs1!sC68LdQ+fP+qa`dHB-+KjEAG5&|Y z{PW-Y@_jz=+BPGEWw>@C`line_Xh*@thb6ygI;ZUpIYPohvSb$)$qMuY^ zi}}L$FPLsb{Pi#Y{^#F+znQ=8FOk1CdcpOXr-K+P?V0v8&izmFn-7fW510rm3to#W zz?8A{k~qoBAMeh5_Z;W)M;YFFEU?_yUYg^*@3&l$3*+G7`?$Z)B%R`QZ*A@S`*i}M zdueT^cC*`w9ZuX`V5(Fu+uDn3lqlZjv##em3-2vQq%TFbewh2h6845UT2N^M^FFX~ zcge_cEIhxy-_;lN?{0lf8T!nJlN@Rp81v$xzRxh`(&n;6>eN^_^PI+EoA-0p2!tE! zHFq5oTfU9?dUKN~qahh`J13h&zO|7Pr-BQu`1XF5Ou^^d;pS}}$Y1XR!Tomh2)2-} zA#2(hO_HRmLBz8lmLzRjTQ2#U99KJ2<18$E+0tJ@Cz3hwT&H_$Z545x|Er#0wcV%r z*yc@&Y!__>fDbrV;hG_jAp0k>)YM4c@$PjI*VxRX0DaWG?(4vKY)tzUYwqKMvg+PksyZv?KG9b8<`(A#9m^J51U2jY0a;xk z46_t+9nTEDM$N*^56?_*zUm?XD9d_!Amu@LV1psQ-Y*zoGi8`VLrsia zlW~{!b16Q9WIeHL0H`E~5*hn29glx1DLK|_hv7B2PF9wHW_khUj<`Jx9bsT zf*#ZQyuI5>y#cj2idyJ%ZAIfYRf6o{!Q62Z%QAX15RgVtB_pT_rv&wBVyl`hF{dbz z!9d_K1)!&8pZ-QQNTk2iovZs^@?#%8eT(e;e%@b?gOh&|Kfc{v&C<*qW56rH@s@dw z{CeLagekH;fHzyxXI#ORUp_s(!@aZ+# z>5)Kz89VxR%~-S7`^(YsNZ#%z$ks5*?#ox^PMIJubnC#$*8B+{rn?7j;T%DU7*o{~ zkFsQR+j8KwI8g&}L?lClvzwv7?L{Pho+x%dA4r|;I6cx(RU_Nfeo z(Mh2=r7(mi??5*v%DHBgLlY&4<)w*DWj=aqIE&5bZO0y%F+tIe2w$YTbKJ2Tuj?Z3 zupMNIMl{nIlsd1QY>%H&;hdd54%%v0~G+wHXgW%#|S-bR$`x zErj)@55g)!sx&19WTE2}Z|8vKWixl7+RK245A`O8E?hdgh*u&}FW~^qUuxPLO)7O` z*>;MAPO}_e)MG8lNFxHGC}nM zJB4+i*1O&$p&UsOVrZmG?m|gUVc*@7Cxx;&wCh3E8Z26hA;&@S<}UOQe-nx+#Ck+Q z`E-wx*lDVn_k1BA*+K67Jt+ja=3NS^FXA_si}D|YL3|yx(4Y??^I7NC)@P+CDOKfy z=ul9M95~+rRPm^{tciny)09WBkrsp-Vw=fqj{RSaHZiAA{i&MPGRmx) zPmy0)@t?0&iZ6uGxik(33raIY#oJE=>YRkGnY{}QB5!0uJb$gl4(O12!)$YKoSw_h zYl@+ncnQ3&{5W8hgy%lQ{{;V4xMOTFKN^;b~F`21+VZlU=PNeprlfO%sxF0F{DhyHkG$`5uU|%9b!LMM|zs z${|KlBjo#Vj?A{TBcCB#%Ab{$1iI`zSSbiwokBHCw1bqeOB+XXRbmN}C}`?|^Jj5h z@_#Y92wzoBt&EH3kY-n_r-WvR;y+}hW)Une6g zpM8}g0XfXpd+U4KclQQi1Y5uu)?)W&-jJc<8G$wFo9DIA%Vxj);nzRDzd^?P``0f= z-+l8{1Ksxhs5C@FyAI#pwY!iuV(qV&jxXlcW_)eEb9NN59SI5iu5~hbFkisio^#N~ zwA~2W#57u2Uik2bvP81p8k2r2zTP1D(|po-?4D(4$T3ueRpPs};+5_U$a=y-ockROtm;Ejm{@ZH#a>K+*3*uV74s%l$weryJQUGM6WHu*)m5&I{ z6e~H9lgx(+*1~+WC70Bjz<7Af^NLvK@*v&vDdwEPnxm5vX3kTY^XbYuH21o> zQ8$}xJuC}iA8yYn;7YFbZBn2HM?DyGb%@{_Dbk>0!nd;W0pwmf7Y~RgG6-t2sVQ!5 z(UKGrx}Ejw6|t6L^|PO% zQ$faKX^+Y#i|yTQ6oQgtDiq@^h`F2vQ+#R`SUT3 z`4q2+to=5EJ@!kA^--|#6C23|^ETh3z>ppeRG85xFP+?QdAJ7K9 zB(rP|_MboX{<`lV356^*v2?LF?_*qR{8npF@&*6<|KeX1EE1~-yx*_hx_465|L%vo zM3Iz%s)dNRc#Y*bHs=;xBYWTJBsb%{&f;SAwo5cL#`uPf*?RxUcdx!u>wo!2f9$^f zKmX@H&xqF-a2@izkDq=2li&O93naMj=eVEO(tnA+{QF-?eb&GK$(QD9Vl?dSu6Hx8 z^ZK^#c0H!oPrkV%L3snYrkl627?5}hI)H^PXc;kWYCT_HZ{7X(e)9eO1cni>FGs`{ zG5_P={oQYV{4ouH^sR~p&&B6o|1V=}%_Vuw#CJxFF&Rg>eo1e?-`{6&n%jFG`=@-? zY}<%SS?5z?du-D&bW3|YcBtk&Bck?*{?;*0=QIl4?;UJONIqqT`~pPQ>=dicIVqIv zzCAz}9k6fLG`<17e+}wYUssasPr^lS9PC|R8_ZqhO=u#~5J*2Y%|0rZ2t zx3%W(W6GHtzsoGKTVvuGh3P*U0tpe5)pt|YNd6U3m2#C6uf?0ae7WHUV%m6nhxU>0 z?ReQ&nVt6^?x{(k+n1yH!mOH|Zv$yZ>%QN*L_=cS=e#KRy}#}m8v@?>?Xs#ydP~Ro z6=Q^haV14D-@q|{Hu!FzU(DTCa(6xE`N4j(M*zFeGJn!r7v8yn-@rkB2askyGv?&l z08bUTTWc+YqE=(_qda5p9Tq|N5l=fWYDgQ_fp!hJ`^*o)uItVYCHIS!a(T#4sND1_ zu0QCQm=e3rEUqiB|SA|EFQ01;5Q8QRhn*f2A81F-UwRe zl$6x(nZz_Gyu8!Ccr zI`zAWN6M};4u3XAuBiu4^g&Tp6XlkS{|iFfWWKmv|-Q1Vv0(5f) zTPhKW_gG+(xTeL&R(jN&*(qL2<(pn6K*&AFyU4O)34U%-i$pk+ZB^5t4HFvPXia)^ z;P%-2NfLjSQONB$a6XQCzTYozU23_kH7drCN}wg0v3XmEt)mVI8ugE9 zz_;%JwV#5RJa(HE=UIXdYF2t!3e4pDirqb=qf{FSqE?ZqghRVa@AXL?(KSR&(mLov z&+JXbOWfb@KpJ;%ktqCZkQ`Q1eWg^5q+Bk9eD4fUy|eb587B6#2<^IcM!YD8huhIn zh@AtpZAB<8?A@v96_c+o;$d+D1hD8~7Fm(j9MfQ~idWzNVeQhlYjxh_v14)pfhtdH z*PQ455@@9?*w=&5eW8!Zk$8SMy`!aZLRZxAGPM46t(ny-&^agyL;=s8+HiV znJdxm8rVnBI&QaPzwIxNtN!lucg+zmB9~Vcs!u%DUomzMbyvii`1U@`j-hkq&iL@!-SGSj=8x1j)l>n{bkx5c5GaBjR+*&Jlj8cN)KDWP>1D<8h;l>tS?%Q0~q6AL16Kv@_V* z5CNPU+Y$do0o3+<&TuPQ&@m6aMG+Rco%IqzIZGMo%dgXG=$p5O7sVz`9nr9SlheQW zuh@Zn1~?AuOR6QrX*9v)Xfiw3!Znzn^93@gO!1aEJcmGsn_2^TvjiO3Ugl8*Xn2*) z68#S;Uc95WtY;up9Z!^#u|;fCWwo9XrIX^r44v-F=~#g$=Az9&dQPwG*;jOMHJw5m z77W*_<*W)qAO+IaJ#HiiIC3}r5GQN0bm4a$24(ILG zL8Jh4osL87Dw+AJ!N_Hb8sa)o-R5>(^E!jshI`=}=nfU2UyGK=VDsJ`9mQ(~&PpEA zva~UB71yxAdB5glB}R`;gQhoD*H*&?40WXqt_nkUUD^%xkDGg2Si9pq{o%*A%sAt+ zMWg)r_n*IgyVxd%YXd);m)-haZnu$TGalFsW`X3!+s>GSdG5ZmI`@zMJ7h>^8Q$@u zInq&liQdq#wSCq4tKmE?N;vC0QvyPNK13VL-abFL=-;NvM20@KgX)%^*p-Z%7@l$sq zHSD$F{%2Gg(ahx+lUkv6>ky*Kr<}T)M(TSOHPIQHfu1VI?ygm>>v2IwlDQ#P^6h>p z^4P68XK2(z%5BNfvqbLPqDRef-McZslT&&uM?nXd7tNo;Z# z)v;+b@1u&%ly0*?U#Woz;E3daA#)KOVnL2LvqGxFsj=pOz_s3#ljG4dqMH{$Ad;v+ z8Vxl|h0r5pBk!AR!)s%~f9OeuPsI=vUOZ9NT;&$2fWb@Fy;U1tPLjN39gte1>W-UQ zj7Y(#LjI8ozkxmMDDc|oW6*VG2US}GO zhLp44&+dK`OO;!jg{AoGo4eF&tISm_>Zua}BQr&Fc)ezC!RDKm9_wb!eJ_it@>54Z(<9*KaM@jb^qo=`-P%LJOrRhyDT1b> zz0Yg#<)nT4dIzw+sH+wcKYV@vt^cjyQBx|AcxJ8dnVR}+d-Ik!R5_Kr!txv%dSufD zMsssaCX^L!wA09C)BHo3cs(aoL@3ni^UV0+?Z=;f`pKN(-p9xve*DJptNMvu1^GBA zaMCWYlqZNAxK^IhCeEdqfByWFuRs1~85CSSc5{c}ea5u3>$>m#0c`hn#5nWuB>NoK zbm(KWrF(wg+RL(mczM6Sr<@4Zj_ivNlM-DZEbxAf*Q0|;`RVYtb0U{$U;{cBr_|z2PIRGU+b~72GJ0eBrzgpM9OQ}GomJTBL_#*a2fL)=7xE4ZyuZHm`wMBX20Fh=fa4O z6R2{orGT86JI}K)I{tDgj&}Gs2bwmAd#XqVQiZ>t@T#w&jEAz4-{+JJtE9CeTRP9K zkOX4dJ;E3eRP+5Uxx`hRrNUSPq-kY~irk{Hs>n8iiR)Y$ zFA-fOLFYB4y#xeEK@BFhIPX?)^0oN6x!^XGDHm35h^BJ7HxgeRj-({|Z;v@@k4>Z? zU*gj`b?sWJt=v_Dy^ppKPqrb0?L6K^floU9B$2jgJTzWeQ!LiquQ@3hfUT>5)R&nv z)j^?0;kk|-HH7uqM`vyw)YQy!7>AcZcLxXIZOVi^tT~rY~?b{Dm_Vm@_`t*_gj)Iw4(5DEj#y^Ee!O}s5|s*f!tPQC9PC*m@=4Vhj7dXJ;E z=2RZIUsE&L<#vjV9J$yRSF+H>5c{GQxO?=?p=2~kL#SdaExfrD>PV(pDM3b^)s;xy zmKI>A6$S#hIHMozH@Dldy`AoOC^BQzBWA;K%$)No@473Gt!hh1I`ROp-g>sUU)M4! z3-3)@Th?0p)z=@6d;k8+PmcY-`1Eg4+wZ>n492><#bV7zaSQo|W9zGAoU<*xA-PEl z#+R?xHLfuRn|;Nrl*+n9S*{v>bl=4a%4-e;gQbM+8P9=s2vGhOqkVZfev8ij^vh3r z|K-~KusFINZwqVaDiKm_)`{@{+QHP;gtQ*td7hj6##-~fdO|OsKEHqa78&pF-(GI7 zLaFh|KH}cn?eT4WpNq)S_BO6-(cT9(<#~TQj#qcP-H!Wt&)BYv-5s5u-W*zPE9XdG z9IUrTj@Te7(rgB`iyA-@i$7S&#l5-H5BBVst~FX zb^KYZDy@M3*#+7%Pcsz>s@zb%_Qw1Wd_-`u(p?L2zF0>GeFx9k8Y;yejI5|%{+ z%Zs;L%#2l8ur{r8EY7*znu)=oj2u4_7|n*?mQZr%@Pk2MP1qI~-q#!^kTNVJ^-CJV z4g)ZJiUqoS@v{5Ml_LEaYty|ql4nN7w`+}njQ+B><=dG*`F4#h6q~)7*-vbn1*XBRR+<0tM2As&Wx2;5t#kUvaVE3pREweDervt-Q~k zl`h;&d0S;i;1NeIM+a}xU56|*-Hv=@0@rlKwJ07kRvAS#*!O|a_(a%&WhZPscjD(6&lvTbvea5JOHs>brUh$&$#Dz8_Kk<@wA)hnAns5n#$yuqDde_Q3xa7FLWELq8F#=04kXRGp z4O!CX+tGT@j2ZFvein!|XI2n*`bjGs>B!crDW;=vEQ0AMT^gyewgz-n*2jdSn^O)r zsIV?{IQQ-^F9-d!-rqCad&Z1H)7578k+VqunwxeP$7lsOF|-0Sdp#U+oA-wAUgfdJ zQsqoR_scm?{x~NEZu#=@JQl$qa8eCU^+BvY5New^t~20JSizk;fbMbpP(xziQ31MswcJ?tKPE@FV7AtaFArJ}LN3Gn_N>YjC}`mz2q!a>~{H zFCn@K_oy1GssUa8lFIJ#R8fbZxu55m5hJEKJI3`_P5erwL37O*l&5dF;D1`aqtxLB z9OI0bz}AjWpHLdU-M?~xIUoG!g zih#t0b~mL#5{dW1)IZ<-Ro$)vUgTVbnitGq*sOLOW34yRmScxfmvxDTgByv>QM zj$?ds9ouwO%TshyDANpkNV(frmf?B**!E>68xITGr1uH3JFiK!I7qB>6fcR3^Z2Jh5c%$yp2Mx zlt;i0Ne5DhY+{manM$8zy%O4RgFMb+Z;v;5FJL+u<{7(Yuw{S&@nSsTlu zzouC$zw2mD-by90dW(1Q6Xvy z%8I}Kz?rV(whoNHbPyFV_~NONKM>KQ=Kr{N9IB*p6?#1m#DBa#)|$o?I9Lw#ZRZOR{#r${lk&p$eEm674lfgz+Jr^V5=&7H1&CMTcyG3d zTuX3ib1%gqj+rRq(qDZ&^4OqSlrOi=LVtPY ztJbg@`Do2p3`LA9H^(wk>CI6;bb=!$jn+yZt(ooaJUxgSL5eiWKu{>lI#narrDj*w zraGXwe#Lj*93|T4Tl>1Y%uEq9tG74o3a)<9J+#qTjcKBm0%kAw@fA}dKY9K1{g*Gl z`pwtK=`t+&&9|?gUT;6Xy{&PpdB4t|yuOrT&w0M@`)lL}8e6IESh#EUQ%N)apcH`A zGb+K08Z)i{pg2^ALuK$Jak#tH%0AC)@B6v>M!)`tfAIYvk&+LQMU1>V>!AoVshRy^ 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

    bo1zJ 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

    Nj^hEt8kg%VR)oy1$MwKl0siXJ$C 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

    jN?yH)7HjG;Q#qPTs1o4R__=a*F^chH`ioZlXh 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

    G*km(7^9gaMCG0%6i= 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 gy3t@MiQ?&kB z47PTse@B;gltKD(^j*$HIe-YcsrOnWZ}UQ*pgrYw3CJwafJK0Xth6S^hP1oxvUM(5 z7f1(;g541gEjO0f5rW7MFqMogNpHD1e^8JJi7xkx6HwQ5%Bc(a>BXQw$^st8rW?* z7Hcm>X$>hyEn6Y6FVb*tLC807SfCzCE+rE>kIFo-f>E1hq?>XO705VaCItI$DTuJ3 z*xZ=_-F!_@Fd-qi_d2V3NJvT!0z~=;f+m${{=mWX@J=A9;$j_T&WCV(y5r} zer`}^S})a9&nPye3=h}q;|iaB@?judB=eCZ<@>KLrBFroWio86aI#Fj*xJbZE=w7J z{8M5mj2@1UI6VXJIUZ(0xO=>U2KKu# z`|q5|wXM}n$bADRa@T7_nn17ar{F?MA$50@Lk&5Qnd@#YTMkSK)cgqp$rJEk;lga!-izsW;krwb8 zkclu4i*_;O4c%&^2}e5MQ`9&#{T3^ck8$VaybtpIwr_wx`|TJ1iT~1n=7*nt^6&mP z{M$bNNLxC7hw0%p2J^B`nT%?#M8AfYl88%k# ziQ#p+z@z=9{mw&D1FcQE&$yKO48&}o#qn5!>o(0tmUi8?p%N(UO$n5Y>iVEf6)8P; zNA(P^PksOTUFYP;39!3FKp%CNmlAt=_EmCjx_B)0Y+qIyM!H6ya#6Cm1O&EY1&PD5ki$Wu!+rKo~fRQM>5*a`V zG&u;p43vX)4iWjkynXrp{hdhSwt0hKla?6)@%Hrc{^3DI-KpVOz0q^&h{?%C31&B< z0N3*iSpXK!L>_s#OYtyg4`$+cRtcBXvd>dYU?CD_Pn_auw3hM#6l%g8fwc57#dOS5 zOB*PQ$^)o0}Ur~6lj8$u8X*;fE5^MsVR3WD?S1anm8+=V<;_RTnfM0^9X)Dc5VbC9We zZA1rqN7MCjvt}JU6$s8dp*jhv%ZtChJ+?Og`u;9JNe{n$Wd!CTW@(T#jte?KPLQ@~ zZCaDUXQx-C7`2InMZbKyt2XW*%{M-vAD(Z0tGHjUy93$bh-$01*OYE&~;`;P> zO`1NuJs*KqB3pwZ%?nL zQ-SOe8>`$uUN5k+%C}Fi9f``CKAg@i$(NV=oak=3et`RpS75K>>4i#~7<4)bqS?;f z%RlYUfBRI*|MMUG2mt6z!pURHr?nO$r>jYCkuX#eT(uiBnw}RxHd2;&od;Wzzx>^A z{qb+!osPv#%(tjCt6UQv4DHP5j1EB%7cC1XD|FaWnzqJbI+hEQ;YP5=Vjd#AaA6a+Og>bn58{9?@e)5F%w8waY_YmY=6RZ*bY*4 zt$c+m*!eQ!A$9q^&`e2HoB60#Gnpftb1}wRl+M@9z}mHXFc(&(wW`+!JzVHo>Uko> z0Qj_N-ltq*5wx&ZT(x1?jfRbY>p00~I+vCOC@6JSgUpc`y8Q>Tuzxd8#isYQ?Vn*s z#a1Ep<6Fd6tYHD0V_u6-aMLB z>{3W%m3g}c|B!ll41X5YA(I-ocBlqCH=cJM>j-%uj;%mu<6=VSz@Gc!S5&{)7F6e4lQLaT97F_OJfC2M*-10lk;c&xVO>-uDj9s8{M$ZZ!CKXkVzy}l2 z+y$a~mAcWVg@u}|r-ViA!Vkh4AiR>TJ*Yb1g5Qg1{HQrLtQ#!8f z*3Qv49d#&9kwHES@5J-)N8WQiG4$K1@O@ta4QtlOO`;VWQ?M;#|MaICvET^FDfs!p zO;9Cw1p~1S*Wb$NXzX+guIA!n)Li#}BI*w=s!H10+B@VuND_jCxdb&|BdUGz^5y;g zgQ8romuZ?oQ)Qm)m$x_P`^QI>w6%3AQ#kIbj`ZJWe~fk5?1SZt4Px~^gC6X(3W&KD z(Ara5xKT#9P3>TT&N>HS^k|JHS9K-wn^$N^ZSH#xv?qa$FzF*dkkavBF*l`ax`-9z zZmu`5&@KY{>gXfu(o4(J7CQ0;eJ7}E^GRL~1psPob=}whG?A}rxu&*Hr>z_cmS

    1htr~mlH?K`*(?1hX{!{UnHVBa`hHG%NqJc$eK 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Ŗ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

    2>A%n;o)An5V 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%0D=;U+8iGr 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�uvbc$`C=ae)s?UUw;16$Iu*aw(RKQ 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 KMNUMnLSTXfJ&3XZ literal 1814153 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

    >$VN7Pi3M| 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

    3hd`vve3NzAS@SJbK3=%4;8)9*Uh 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�T$%Rnb=L}iUzcycgpobLF` zB;_iGZ8L)|_|T#61r%L}C}ND%nutza$1hZ8+ZkGscgl7#2fP%i-G3j`Q@oFpmQ~jy z`)xVD==R`sfJtwx^%3^qemk%sAY^Lz6j)k`uBYOhi4jf<#j_1M(y3fE9U~KDJH4bN zLghaX*>y)o-tr_f$XS^rsF5ux7Lljn6KC)^&nWnxqjo>0BTsitL*6CGr$|p4ltB;B z@DLB7YKg(nY{G)b(!Z(cp04xZoeq(zVfRXn$Xgia4D9SlEn*rj<0voH70GgBF#c}ht$v1 zPm|`#^-au!60z+#^JSjN=3fkXoqywT$zd0KzBeOt=5#3fJu`jfF&`njF<3`)7oXI7 z*BsN3J&wtzlr;!{MU-!-xv%R#;1vRspm^%9Hrj;*wi61C^qJ2zKWwBsbqV{Xk;OC2 zJFen34!L@SCf)Dtlb|A$n)UdkC~Kw+jqTvSwJ^)3>Md=9T^8xo8O9p0i7~f=Sx2$! zBUf?rbsE2gJ7dY(U5jLMf$t4-P~kmb2C!GP_IjY^zNqc3_JrEhxO@uQc^IK8A?JXQXMX{NU$nbbVC&0D_mdwYgb#)O@&S zx)51U$w=#whcA`I`-DDs*1dTrtih$|eePu0oAD>WOgfV6JYdVgXVfVtMKt7jj^YEQ z*NpOj=Ufujb5AIlNYLP&zCYMe-!O2RcnqkXn3ExfVp3E$=GMGuW%caU0Nm^e%8g@x znDriow%iA{6&OM(Csu00@Ce8c$#LBkk

    9YLP+p+yps1I?LHT%73e(5N1awbSTQK`kmF?ubBF$H+AFr|m#mEbO7Q#FM-B zRs0F|Y9(#B`@d^g+Z5tNzw0%a4BWK9NYmXj!^w5x93*E**!agr3dgbjHap6G+NQOP zYYBVTDje=Wtp@dP$>k(w?R7lDEmFkO|IFfI{&KXt-e^ob^jWTM2R%{IadR8I**gdK zKT97HDjOfPn{XYJtBV;|F|I&_nGC%`%t@nron#fE!MAh~$%GZ3jofl7ZirGSyIBuU z^F=M`ZZ6VkYm>5*BznU%^*UT;xhFg`JbRfG-?~*9*z0%sgyP|Loj>ek(`Oql4uMmz z<1cwzHTr94qz8@`coQz`r`s+YW#6f>xwFR3(n}YbV-`KE>Qm&91}s-f)glY?3LSFS zF8+=v{D#Pjcz>G59)*QR014?r4-4rT8N@pAKC_UmP>8y3Mqi)1R4WRH1&;wPJ1P!8 z{UP!`OX{_9PB{q}Y>JWHqG#pVXAs{Dou`yxhzq%VoQ(o31&LkRv6*{*FUG3&TGX=GF?H`- z>rEC>cZwV3QjH?ok;4|*r%&iCsm!6>P$kePS**|CS zC-70T>q|ZqXw;0^mTrb`?AO*oBSN2Ji0u(H16V_DYHGoVtIaUrp|hStevj|vP14zc zA%e44bbmYR{#iC)o-E!AGS>i&ymX#dmyK?kRX_ykVgP(kGI5`^#umR8M)*vsT!P5q z`f9G0!4I4d&(g>vh|0Daqx!K=Ei%Qft|M8$LoLn<_L73k16sbG2JaCmHCyOe1#_ed zhSX8I3VHtDN=ObaRkb^@ZpPG{l{YQ&NkxuzR=}=OhVVxz>jpzf3JYI zw1B%5)?K4EvISVZm*Ux^*`H??Z|V!bq3lX#w_N8>l;8LpH6fM(j35Om<1|m&?HBlJ z3h8;M=lvf?=N{K$|Nrsp+O=~#bgp&UQYt#HR4Q#NlEa-zHz6#Y=F~lekale=xd}r> zR4(L}!_Dr*opf_e4(n()x$h)g+@&1Sgmm0~*Z22-kH@xl?Q?j&U$5sY*F7rdH+HZY zjT4;#Z)+Ce`antyRwk~>vkE&5FbTc~Qo;6xis6IG;Z-%jq*(%cYsi(N4B+_Ag;?*} zh5E8^y-SGLOQRgFFs4&>)A03cj-!4O*{~Pg8ewuR;pX(<>!*fUJ}9D#z6^1b3*kiv z@y5y~h0g$C)Hzp1az9~@r&V@MlKiyL1FKJBy8hJ$v08C7ucn zQRW8OPr$EkYA%KsX;-GCNtC5G5CVNm22d43==I*$VhX~AM0$el|2(t{Oxp1_k+bwf z8B)u7ae%o6sNTvxnwq{hnMPhc?;i2i6wtk$v2wrJ{8asXj`bok#+qS>tadPDyR#Z2^%lOf;ZXMCDvrIcsD#v!w z8v2fZ5rk3lAU|&-^LLeKrlsWtwT4pi27TcpdbC7TgTqq;M1wtPz+?O9w}lo?E=U7u z_0bk!i)T_G)UTOtU=YQmoF<>TFSMCE7#&xEKabe+HqD3|w}0yw_hgLyUNd1bt9+mT z&F&28+nP8!g)$_MD`Q{cqi2S=N88cM{&)fCHNCR?E0sUag`g`($(fKCFsiO}gAeFo ze0x{O5edd4pt9(3_PQnTw~4~EO)?IY=ub_4NSl8LIsZ|9X491I(nr?aP2{O@v9X#p zyr4F`AZd%ZAB+eWxT@N)B~d2D(gljb#oFBr(OL`|L7^w=a7It2xPrR=Q{#|}S354Y zm>a@o=qs@0D>XlOs(qNkksNm&2tGujAH1s<*^6IJ_j9AUoFMkH_57~K=;RMXk);O! zie_>e(0!6P?Ud{8_o8${P(yqEl{`YpEOjm(%s4H2LV;SBl4ZKdx%>F{9HyDx__Ab$ z%VsY;A&Q%QLUDw~f6Cgw$w0dycTH&|ZqO)(C_z?re=*h_6o${!{Janw<0k*Y7hT7* z2rlsKpsKUv_v2;<-8z?g%UT0Ofg(>(bI5WRonmLE%;lDBSa}Qyd${5;Q)vuD_elQCS0bEq)oqRk8C!hJ8B-6A-yf~ zxZTup2iOIA*3`-u-=GWpR+^rgNP+X<4f}jKqEjQYOk!M?FVNn-nCB zQ+gNi!sTeTng#=+%AQRYc|NeRxNlECh} z)D_roJon{6fm0mb=!xXY4+ZZiaj8mLIS=oRW;PUa>ZaM}c-lo6Ud=G9lIeGM3C}I{ z*{CKCv%{J<_x+bjHp;sZgy2Ef`;ddGE~C@~d#cajmt&gv4b-eeVx0qoMy1~iyy5MZ zw|T8=g@tVs-YT>w!wKCp2b;CM2#NR|eg?Qz-76^S64H|mUQ?`k_$y^osl(>8aj-oV zYoeUwC7mg=vDS+RMR>rgov2$TzRh!+j=R92$ji|5FrkRPfvPeKw_6G95YyfNjd|j}NF<-RX3Ul|`OP0<3Yj?&ks!utdCPXaqH zF2yEm^ph+}Xh3u+af0A{j+GV!9dClaEAHV{N;%5d3-XB(_UaYn^*n|<)0Lti}(?n0m)qLgS z9^qHp)+Ei(ygsFOtY$u0b_n>w;fNld?$_Q*Q&_GFX%#5*~nbP3)7mV?mtkh_6$3X>Zk zWW621kNUqU78?(cA}+>p-8e#do=IHIYGqW0;7h%b9;FAu_P0-z zFuUhXFv~sDdovV_Lz9Ie(eQgtF?)1*9lCuI7_3ls(l7bs)Xn6e3q;xvMt&~o)kpe8 zqe=B+v!c{mG3Za4k*8QMynfw;R9NZoA4w{%n>gG@hI$2cTWR6fM+!@LUte5D_)Ab7vx4db&^_071~dLhzyAZg}uZHr9g zoV{JY(A#UhVnL9$g5Ce1L%sitpicgUyCPe~elkk=RU*qA488vdi&-ihweDC8G^?(j zlSsz!W<=BLHAcRHFxN}OEMfb+wvWo2AajW8Amj*z!O9=I2 zP#p`%{{HuxxK!5Svq8et55zch>vrCN=R!?@H}6_-9FSv zgpn9EN#3+;4BX6>zW&G#iQ`Z|xKFCyHJSc@5jBYx+{fua?2eSt$Efc;TrgYrJ;K1N z_D5L|v=L?$-!}zDe;t)eg(g+vE`}ahOLTq+mc1daS)!$0T%t|4_3}w6_(v{H=EK+V zVkedafDE6god=O60iqr674gL*l*()q^nwN6{45w*Pu0`@Dw2HVWhjPvx%yxKMzva# zz#fI5PZJw4OGA*s;TjvYVIZ7^n^))U9YnX%g*0+)Q7M>U&)3M)Nrj=+OWGSz&~|Uz z3DsKl>4L&H{s99?EbP?_TR-$rHo zd7v#LO=+#sj}*Q<&EVSwQy1P(wuIz`{9kW@wT zIy|Y0UnqR?OrG?TQp4_)kZ&y4LMO5Lr)kM{roF>}G3J;DSJq-79d+~Cdneb(iv0LC zNCj6@q3Ui@$&Vp4-fKiZlPq?d^oOcPMn@fMn)?Jk4)(lWv#R6mRE|&T2pg{e3%eWr z&y>l+;M?dZ^dw8U^n%2yPUO79L-)Z#JpSKQX^CUN$WDdxD)BhIcDh+4?o0n-=CxPi zS*+UXcV%?}s|vUB&fe!-q^T|_-h*TtxbL#!B1n;%aV}p*_fwY%p;mSK)SMQY6tFtk z$D2H8(x)s*+Sv?bso}2cNIj?H7SZ3%$iB71ve-qtWubodLx7bi%`5}E=Rs|C%4Qew zF2ZtB0(~`ZsXvTvz$3yAtBZj)W$7T^ONiebzt7l5W+$6c;p9z3hLzrC8!uI86`|HC z&hIA2F_d5L2@FFydhHw}4O;%3Jng(_m#eBu_$Obq)K{@SM)s5(%wx9mi_~9c$`s7{ zR|bFRiq)9iNy&*bFBS`(*BCzaWWkozJ`#tFa z+a!tbW5N%zs117gbohNssK$hP&LezRu!6vOrcBtHP^2e-iTf0bka08L9(z}iINes5 zwR7m(G#Rd8tz(BFt`)q_Z4~U`tlB3acN=?qM0UeFLE2J_T#V=zb|ZS&MX}#Qf+;@# z3zDXGCdt}OY(MddGo*;RxJmZQ*VLud`Q6C#eRB0KPMUw5Z*XPGN6b}AY5Rn^I9H{7 zb57FA_%UWnWFEve2iUK-pi)nl$w*A6VuA@^gx(N z*zOG7rX)-kIS#1FA!$9#nh8tm+a`pWqyHQ4kG_OoS;CXvL};$l?#w-AQR8lv7An2( zTw7$B`|sbc1=u^n#^+A`wR2>1fHpoaR58JbO52CSRcd}vN~5*3V({o`-W%r0z?A$D z0y>^9DVZ6@6*|z6TrHG*k2+l{^5iuRe^wqdgR1!H@VjiX)Qxy@w)Q-ryNhg5aO!+Y z3x1^~9~OP~hHkNg|HI?x*YZ>me3SP4w0^O*zjn^whKk>`8m7XP06KXreM_ouwD`v^CJ}x!qm^T$X2ua3A+%ZKe~Z)A`1BN9HLyRD+uH5&V@_NLuEAo zx+~zrpph{vTiuNaJul zZ2Yl|ES^w(2vUzCEX-e0L7Z6(S?^Hqbj|4B7_o6QD$V2}d&de(`ogxiMW(*EtEixe z@eBmyTZya;`p$gYLyDLAYL>R-m+f5T%TP}^Mv?OgszY5h&i@BD_P_u6(_+@IegRY z5v8t?wCIQVjfP}w#_w3v!?}C8YW&hu`v>dSDL7mL?r_5ba6h=;g@XIRBOR-eyY`A5 z`86OLKTRnlznd&7RHu=3^Yy$Sndy@}ZVsjUSTo3~5t#BC_b1CPkgcy^jhB*mE$3Z- z6NZ-yL=+kDdoSR!mNKw801juGj4^x0xDMNSes%2`KauzNMoT>@Ir$S~ zjbb5)s8(nfAFr^~~ZvT3VrJ7U1 z-Crax{u1`Gt3vXL)1?8#+yry4Yv4=9sV2&Ks_cTDG{nn@UU;FL05`6j9E1K~SFy9j z9@XSNptKix7W~*{R?3Kx$$txk_r2w6CXP_>SjkLxO16X^WQeqsyd?O1O?fs2&(^D6 zM61)!sJqEoui<<259`DS@)h6|%KO#PLk`umP^tq=S@w@w>mi$KcEVFYxONR1uq zB7v{e6tw=P{9ur4@J8rO-{E^ScdAbn`eUy$Gl6#rT~<4p31>Y6rVhw4D)8qj4sT4m zV?dc%C?a4idIv6Y=r>Zbf)o)aOdKu5$B#0bf(({&F+O*@h}7?=9es;_e=gAZc;t`( z-E5EkOT{MBnO;k&>^nC&QL)X#Fmdp%DT$}LQlt+D>z0*}5^nMND0__}TczFo)?RYa zap{O^#AIq@f)SKrL|EV?^I+gVYqN@-goDLO76{OTCMJd*8&)T;79M)@{aPji5pA3` zXA>6peF1sv&)$+$EVQw0cPLt7UZuDP1M0-bz~zVNL77JqHd%NnH9u!ekiafifO+-K zIS&tjM`)e!w2%I7c%+{%jZs)+S?c77nN;!Lh9Z18{-Q|p!FK5pp_Myyh8gzveHcOA?Ssh>y@)TsCPgZYJY-k)?QV z5bkzVK=wxv)qdW&mvRoW`xu9p!VWC7=nhu-ta;Z59x5VuTZ+R8+ss7+X0g)D&w_*i z)!QLY*{T_K{nmn5DaEo!AWe0+Iom9G?qp%wvVbP4a~~x$2j|NeN7(Jw|D%cm{;6ro z;wbEo;La60$I`|=)e1&%vI)W`>D)PoC&P_^UlR!F)^6OkfYqLD*(GLN1 zC6)290cLT)gFbvd9|2^?3usTU{PGSII20hmlLkB)iMr4qIbUc(&b{RQZ2m&HJy7%# zw?XrSBwGLHe-^EYf{%B=q5n1BD+CiPRL3)+Nn-s;N&>8k-=S)K2;b{t2lxq{#cC@f zVbRxAa)o%5U6akQe9KUCDokqD*dlC;P|pa~y>>!bFWLH5kL-W~u~&Y9ofx5q4=B<{8OrYSXdcQM6embt#i?;E#-eDmtR zf#vBxtWKW64cWUq;{KRqAN?66P4RlHWX~I+9D!)cEuj&$F+`WU1k$XI+*s*~bT~jb z)e@3suqxlKbC{CAfnMmbJr$Dk3yTaEE6lmU_T&$D8^>2+`;6=m_NM@SjYLvt zo;a_u8@Qw~PNby4*-1u~w?y}<#Ds0J>G8n(7)RK3JBTN^+8~^)#5ir-lL}{F#Ro^^ zwAbEMN@D#0w`yT(N;>Wy>%@4?+^Jr*Kz;@tcus%6o~@0mYk%uG-X$4@xJ@kZIlo)LBkpUBFze1?TI4Hs1eq? zerdT6yqFHmybFa0DcwuKPsz%gRd92NJ}*@tnmpA1d;Q7j1y{ zhkK0lTj5YHUJEfr|11zY_Uz22>78&uoslxmO^k|u>KFZ0(I^xtfauiz(Yh=?~;_vncB?i!xkXTZAH}V@?Ht2NoOb!sy_N{bmmR zB=&UG7KY4x@cZRZ24SLsfeaI?_mKDBlp8{<-1kJ6?)o3OTyqL{^j$8(N-cYKnUmuJ zRD+G=2UDxBjQuu0P3W=$H^RKKjA67cOWM zQT!C1G;}j@=4~k1Hs%<$`uez4-4=QWl$QUi=<*uFbO(tGWvW1&t5}+(V3(xiTR&0T zYUKvZwhp2Uyp$<2PT{yGcn*74XF``za~dM z2=~~E9SV|flfvIp)<$&tqctwMnPE^*<=Vo$8N&$8HGG$f{IhmS>v?=smV*AHV`@-4c!;5C{gzxF%o zZ2_-4M#?S)-0oWyVZpfu#)bDYS~LxB^11Q)iRC)aB7WUrbCvX{t=2dUNro7xJ)EkSSm_feE3ak z?^cH86idcylRRaF-I8SDIorg|EmbIRcs!1l5!8Y}a{{v5Tlxl=?qk%>pQ08CH|xJV zc@2Bs*g{y8S&*@aJlk$Rc(e`;Y#|Or#!N8Q+4B{UZ8tE=o(?bPr3XT_9|`owCZue! z`d9VecCpfQayyTA3jPeQy2)JaZa8d_n;2ZJ_4S?Bjgy^Y{ZLdEz~A)uln!VOAV-%%b*qqh)pB$O4) zVQ)}6he8Y8_nKGoRIb}IfMrjf2G{#QwJmrqJIc&24GvFvgs9RuWxVla$QIr<T}wWBWP&npf!fvse-P#`TSy&8-%U{Z%sSWYQP<+KV1zrhVT#J)w*rf-cLM#q zBcG7=0f8*VY{h(b^BOtl4mhY!BkzbzQg~+aW7f})n+tWEB920d%O?x7PYK6=K?^>t z(e;1&MQ<5`bFvnGMV~qgR1>5tM`kLnn;}q!aCESDrS7}P2f0_IvT({mp8JbIv#UTE z(sBnjLe7)MKGPcM@>b%!k0#gi0XZh?>bK-Ec1`YtAjd$iO{PXVlGpzTQqJdjkTZH} z=xJ^NzXzI#th1A(wo2$SMfcoO{hXl|aLxqD5R4SsjTe4OSrplF-Ux!o^&>#Z-6Hky z2f1|d0~jyv`1-Fv>H=1rA+;v7>W>|B{d=5U=Vap6S(2FU3i9R?VWM=BS=Ao!L$PA+ z)Dt|nTSzR`)2t_3Ab~zU?_=v@1A9jHkb~rjS5W%q zN}Nope-`T-z{=%m89*VWgCLtl@beZ`&?T9wV};C(Go|Kl1i@>z2BFu@H+V zRs}YGJq&g4Q*7g(P+aV5IlPFm27Zws{8!LKpu~yN+t=vNq@w>YdU!6F$kikd%s*ZxZ5{# zKRv+F|AlaN7`DunhLh*uQCVO_7AeVBoGsuujG46FmxPqxMX}vl8xVJCUb3=xO$VeI zKu@OOfe9^*s)Gpiu+xfD@IC9=WyJ-|@M@^5@R3djlv$IQae)d-HvWulk}F#BMGKN{ z-ReZsxz*PhD~!zfbITj9Fw_qn4BvKPO&a7XB;_R<*mgO*ccJ><@8a!?^X;|H2bZDV z4~2HkK@givs2FKEq`So^Ldzr>@kxcYonDjF@HXcsJsEukj7t-yd-s8>$Au~P#_jmt zw1trAjfT1&A^9Ij_pmyFl`y@L)vIW&RTT#)TbApO zCKy1R=sV3Z_!u$yAk;M-$Z`};kZ$)lzhVNucEsankfGz8ldp^_N~Uo0bo5c9;mg-$ zvK6CD=Y1ekDg5_!09@LtdP!d2r#Qz+6o`f_>a4#0@UPn1N_`#;T=h1IuJuV~XCDTsTe3j?9Et>8Vk8S6uC-qb8_&G*y_RtJnvaV)j=Ld@JpFrfYP_-G~ThnLY z58P8~|9&nRtIWko6s~S(?@Y2o?d?wsLsi$_LYEZmFuv*>xdtuaBzQEk*wE>sNju9s z$ks)|O&r+_di$~efxr3O4jwo)R_6GDo%8rjD5lubfJEeTP~Ua3<JQYxtOjJ}AdC#!*)| z_wEs!ewd8f{d-~!h+mzv4o_MA@!heDQ@F8F5$qr-#O=jrdFzOgBcKCDn6U@l7F^Xq zc{J6nb^xr>F1rpl9<x@`Pm`E8rc?VeJJMq1uEagArOGat92P5;B*AhwHo)XdApDZFRY4l9}5bhS6 zUkjo|MM3?o-jUfl6}pjb~wLK z4X5G0_8)@Ic%9C-x)|(RDYJ*^AsJ+ymrE5)Y!W@J5Pj5@;bC89P+co|&EX-goa8$LTGnZ@aHV}=yJdF+iP`{#)pV~^<$o^WHPCwd=!dq# zB?J22HOT!&;yfKga*CsEVub{;juL)uMb7=sIbs=Ats&Sspd)YLf!AsIWsN}8W{Yf3 z%c|3DR2K|>Sr10A93$@ozw3A{+4wyDl9C_zNtYoz(*nE);NvLX)XB8!Ea90cDi-Ts z3ia7$^L-J5;}v#f9S$LJtNWWA&Lf6I6PMqlzh{UpY;rwFBge&#uzfcQBgG_W#Z73) z*;Dgo?7wk4vQBi6w*&NUG^zjgmEpT@HO@Xez)n8e#3=h?k45{u40}7N|Y)7GUAOOA7H$Do;;+GE$C8s?LAR{dx_CuuNu7eYaz*?wi9>%SYNGzSMz`)RGIc86 zezCrl5HWUFu66v1eJl`erYEm%0yb(CZ2NIqwqv!35>DoNwNt}ypFTocA)TObhrZeE zqD6+ys)579(ez+sA=Ek@4^`=2AhVi~+0FEB3blUlW2o%;3w);b@vupw*h9w7+(b7V z%?re99j75STjciI_cpc3rL^36_PUoQbUeiMd_+|TG-I|XeyuXJ3%2pDOJRKb@k?AE zqspaxgEosYRVh~!l;DbZcz9V2JUt|?PB=t@RQrp~p%Ha3Cec60e5~EC-LCk|O;rZV zgy${#_uK20Ts>N%4qzMnZobC8*oe~~6Dzk7*OS^l6MiT6ZrhI47}ucuLkBrebWnkJ z&c#68tWWCsIEUsg^pPfJzY%Qwr-alkf^1?9$5tsmk5EqT#Jxr?C&np}k*u1xWcw&o z25j0)cpPs`1$LaMyLF2bl{DA*cxijxH4Ff+OK&{J3>H(e z>cHbMCWVs|>DG=TV6sB7)lBSM)e2o2HLE{0Ab=VgNSSW2y7l&AI3PNsU$Tu*S4J*k z=zV7De8i21k3s*KE7Dep%f_ve^l&#jYS9~k+sJx~xns|w5Xq&(4sJT#(Zra(+obxq)^{h(08ped>)PWMiT}c6{Lb|3t{k%jdopzk z%{zWV!^UV1-QYGCMLLBdz1bu1D&j4>2s>Oyo;e}2nO#x9mWVh;ZR-)|&Yghst6}G` zYD(85c0~EW(;otcMi0J+1{&YKrEFR}O36AbWTmYo4hBtrceY=F)_)v$y@=6@M^#NG z^>(1Hfml+iUPx=oLUvgvCZYT7#0A7}y#D(OGPZm4?=LoCqusUKzGW$a+ zp)C{qSA~SVA)I1Qe_;~7n1-By`nDk??CH8QBx>h!ps!UBjwMp$aj}&2H_=l?5ka^TO0L7bR*zmAU>Oc{B<1B05^_z!YM$# z{A*}OD(+TwNCJIll5Uk0(7HQQ;CxE83dgz>>7!Wv!n126a`;pqK4@QH7$#%SE#3zqN*p(zGl*Hj(A1uOZj*=W8tOG350M|Nz zcUqG=AVqoevN7hxF#)E~Fw<{pSfJ4|>3n&Y(#5e)P}o`Ro|BD*D9}9t?vibqCcYTdAbTsM+Z zz_`kXOMjbyY%jfr3)!D$?c4{}=I^yRVHkm#TVx9M4Z8*%(Uxj*HCrWl`b=(84Qqt| zDklovS%!V=S_|fMo+y2cEBnu}Sb73&*@`zY7EMu3x0Yo(T33p0KI;Rs`}t zQloxloRpv>S1%{{gYZYZC_}+>`-yiQJ?NN}1!daA#{CA67_Ed^W_g&X0@QFAYBj}%kIeXt;3VLc;Z4LS7AG+$m+X=acBK-ghjApND6dMP zaqU_OybVaX;C(Ot2I0>DZJu%zYE6N+y+e0zK&RP+Px;PG7!3+Qr`t%oCfU=faVE?s zLWw|QR;0b?vI15G&1hK6_~O`5L);)zm{*1OQ-$73wqEz z72bLOkBwVG7imWk{C*$KpL@tQFt}F1+1fcosFN5Q_m1+Xg;AAi{b{D5+S2X*@2%n) z*pVd~dtB4o+xjk=KP2Cmpn3I+K%{c?!Tw&6mE}U#7Y(toia!u{aHi2AIF;rwKzX%C zM<`oC*j8?AY&>oeD51=cLE9~=r;M`0|0uOMOK;#p)~TogcxSzJ2g5~3L62A*XOg;ZgxD>n-6lXUa(Y5AhrX=6A$ z-Rzu6)6Pn>wb(v`5LS)5oT?1m*|X~2O5mwJy1&k;?Fo+$sUjxzLh_%d@&7r#OXSa$ zIojdwy=FMEzg6y9u|Q@d)c3u3J*Ykwt=KemyCGqLxGRJ3`UfTcwn-b60#}TT^@Vy} zH7ar1xg)_(0GEVU$I!3tKOrof^@s95hlJm7*Gu;S(vY21@MT5DZAIHGLv;j%qn)ji zeq>OMRVPzSgdI-+t=uYC zjLVI%_jXC&hZmuE@-hi6bvYc+gUrAUfG&O^vZ-u(noAzb0JEx&Jz}gTQ!6)XHF~rzY|sZYXFjvD?$OK=EX0CY^Ky_wv?@Qs7`sD*7pzVq zb#sdHVjQMmvHqH6W-bPBTcthka)$6ntMZ;%apiM3XpP!xU&{4L29`};pO!l^WD^FH zS`V0zQD(CHBqg+36m;UQ_J^g??`Y=UtOD?%Re$X&$vIl^z9CxOjsvvZBx@^3&~G%8 z{4@#G*?o7!$3gua9rA^E_+yT$e)Ax_J3|BlTkJ-NYcWv_(p!*Rg!=Uf#F<7)V$i3QMQtq_rDb!6wO(&5A0aJXLvFQl42IY0bfWbvYs0?0aEIa z!m$u*d@a1*j9t8MQr8ljlaOH`I|L{;rTqA!yytlIwF&yTbi0OAeq|w6ORH3jGP|DA z78aq3sqvD$U0?BcZWjy@tqBFQ!Z-oZd#7ljj#gv?lh^C-)gjuXxvQ@vO1Inh404fL z3ggEbw2>wHm6^Cy_T>*HF5)8*0ivB??JtHK_6^1c43RX!g2vl3qC zV5&_?!uQPNb$BZ#>AM(CxIv%p&p}t(lK(DWioiX(IYR){akCtfM!4vq*ldyyui4hr_R6+Z_WA zjqbc<|7wr&)882qnDI)*ngF*=S&lrIRxMyOLz-FTNEM-yhz~5FNj5Zc1t80YN!)kD zLvFEp7&Pl~a76@lGiRddZ`g(z{`;PZ?+R6TzDSj9{wSt7NW2>dBvl_cV>8_?2V-^o zp(MLiJtS;9B)VQMEL09TL}(_zOj4xlC{=eLc0NpSS`nb6q$p?>ks!?vSBy4=dRaYr z1wDwY`-|RcS!BZEQzgoOny~Y@F9Lcatgw_hjtQzBkUs>dJR*eY^z5g&2{**{$!t}} za*VF9$Oukk*uM~n{;d@{T412qBX0axuqyz1wgWNpbn!aNRPk+Q4@DgzVof{(qO>Kn z8k1A^cj9@jhj@h|iOM;V-;<`kY?@G1&FW-$he^&n!FJgtn(!X;>c1v&SxzLP&varx z5ka>sI}WLCFgww|QsVZIZXFsBgq4?_;9ajW%sXgOU!79-jeIRybss;QWLkDp!RM^c z*@5seid#02Z;||3)eX+SWs(d8%5EFENvzx?52)%OX^cP6SxbJN-jHr{*d(D55Q zYLl(As*M8KwxX^%3{%QLg!)J;cE{$*a@wr~{G0*9bmg+Td-W*tZOAc+rm$r6Z^_n& zZ^Zke-R`e7&?-&5)rxICawFkqk(zK4bO==Ee&q%$P;|mB_>vhztk?Zm6L%K$b+aP+ zot|WU+BZaCXO9?hzOJ3j^!(2sr?o$>DZa;CIKp#0Y*Njg>$)dId=}W2=ITQF1tAx{ zmg{~?mibLmem?Hcmoz8pHq}{O|{CW~N(h z6Dw5!@epFo-r#O3#0%Rx!9tr_i11bwn`DgPyVnJh6355d9QQt66BShL7`H(zfhJ^ql@t=>R!bJ@zMjdz&&n8$6uP| z%aO>DCuy>Wllb1cU;I(OeF z@3uOKb$=1I2jI0~J_=n9?-ZKuFUBvUoXGu*$T{rnf2TTXYDP!i&#IbIXuBF|HL}Bx zfh*RIvpc2aRZm!}XW{3zFO0e?!`ztWUJ65N2v>I{o*3H|DKun>9j@JF>IJf*U zK64AChYRT))#NonC@^z7m;aQ#7<#ee0rmHC`!f)TZC%XkTder{eQ=FFU4lGMmYxS+ zIex`8kSNys#eDdQtDC0ei(ObMt#Vtzw|-vB0+Zt81N8*6a$X9Yoh(w#t5?v)^y!80I-{M8 zZIJ7YA>yOZUQYF5cGm`acpN3UL9{Xm$G5G%^jJsrZ5QS3-8(Grr}8x_#-)X>Q_ZE* zeBB_nrzg~Z_10l@Pb5w;UpP@%ow#+X*<0i<8_35lt;*A}pKWms&46t=Z?Mp#hVKa}i(8D1>myXfW( z;uul~qAI?CC#4nk9^Y}6=#(=p!F4`j$gr8oxdT$EY?uu z_`fpVe^Y^Hli+sAbH&H#QN@KK<-HMaS%yXJ(LT?hU_qd9Z4NmS?eW&+l2^%$q#UVD z4hD2r zUw?g;*g*pR5=Y)U(<)5^Wgj2BD_1Mr#XZW;Karg48=1)`$INnSeCjMHc*W}bc7s_R zond`pBO1e$gO5)GkI@P8GxQ1uX6Us`kZiE|PtzF?NLFAE7%AIi<=dBjCP-5A;Taw=Q}ig%LR-Gm3qM3DI> zy`iA}CcJ3sD6L6;*JRv#bv@zMQ5ye0sC`F~`njcHOPYRYqds_Abqr9}236>pO?*u) zi<6U|s4c=Kz>5^c7xId%`@kRU;H4zKOT#j!+C|PMP78zDu;2&4X3sd6V!s@?(0$MN zuvK!D(r+F3ECT1ZY9XkJ)?HPh~D*2_BzJ+*Y z4r%pT`n(_{m^J^k9?5{&4bXQ*Gt;(z{xk#sg-PS*m1e_nuM|F*;g(zaQ4mRXox|H_ zhOd#+L9Wx+!=U9k^;#C+8kpC`KynBv=Euuu)&gukE(kJT$fXT9X2Jo>#SOcbmJP3u z(h{9iPps2yC|=j1*YkA@_iC`28UmI6uf}^rI9W%Jm4USF?CR>hwa0nR;o=I)^cK|f zPorwYEcuS&iMf}(_Ijn7W#5l-WeI>y2^Nsw@w+6H&%d{{P`Mol5ZuY?7zcEZ7X>cdWqCa!fy#JQV zCMmO4akD~uDwpUvG(??WvL1OV)&9iO+~#Gi1(t=%C81rWLhCSz3TKWko2KETpGydH z?V+5jxIA_Tx=69{QWMCzzt}=h+Aq)LIxlH)p#Tb%?d&UOZm>5J%o6l}Z8{oxmN6f% zX}T6QOCsC0JtJ(#f5EDf1J0_3V(SqXp_r!~Uan9%p4==Nj;X(1q~YYr(iEBHJpA^# z%gjkoq+chA+b_ItQ@wW5>D>(yg>JbvSU7h4m30yES_?lse$im%n zALViR${?%;yyG; zptp#|?ci6`PxTxgMJ}W#%G{Xc>r4tWJDsZ~dhij(ddJO4+A~VKMYXT}LCl^*+jy6C z~;o)LY>;(>w!->)pnzke4sH$1R?8qgo{oeZOD7KxTvG3Yxbe>iAOS80#cGBWO zPbjynQLf*IV?T)-HLB@ku?WrYbYo=Y@{N==KLIO_nq?(IR@7?Q#1~5KaiZn%yQT>V z@OuKBeL{5oG8%YOfUw>R?(>(4lN1aI@aHY<)PTAvBkZOP`gak~Mv2nGAsjnlJe)Ly zJ2dF_DWq0;T*@OVO%V48a(E?)z(4E&4>HBn49aEvvBIOJ=rFzq`t2U2{4t5Un>en4 zq|b3$XSz?4=!14=87{v09{~C1p!K!N3pTK~z3~sBQzJ1Diu51_+uf9#o%H4iQ?#w* zlO@1!i}gGz-f*q~ecwzBQ|#|JsiT4ZVA%!p?taR^4U*pg!FL|n_a$KmW>iI7x`O^w z3OI(=9W(24oFE5pVQ15&%RRk_qJutSm2(=iDuvjMzh{8>b3XQPDzp*jwfc}B%G(6dww?-ZI=8~^jlJ*pYqUZ%E2BJ(eA4H>|qP**(RKW-ixyQWw*S{ zq|5z-+#t8wR?^{SsF9o<#vUQYW$2#VyM}Iigk^)_`DVcm#*f@Oi~pnO+~ZpM|2V$0 zvuj&h_qJ|ZO80w{RN7gQgiLNlYUwtF=^LW7oh>Djxph+mm1#cRJmD zlu=ck3Jl$x1Z`f5Qq#%LhUNEvKRa+w!^7=0jh*zLk}dla@p1@!FZ;-7pjWI>R=}1W z^T}J)p5*_QXq1aeYKXD;Y^8P=Lkg8%T?&rIE96QHA_a zoOJ}cVNUrD?7!vqD`CYSaYM$WHOwDBClX29xW`PhpE9#8IOPHM+e^akV?-lb?{DL1 zixxL>q>p~y%VfGbi@ENiY!LS>+h1T19$A@|&vR1!a&!ocM9-gP39e=?)WDu<$kJs{ zw)kU;ynBl+pp$Yr?5T zCc<<|)h#p?0JBQ)nSbG1U_`(mNvctTok)J#L89AzdWK{Tt$q}fvmD0ty_T=qu17|u z3LA*52;?dj%IbtI?&(O2%YYXz_+nb0cLO&~W>_<&!@S!|Iwr}M#Hs;g_JxJY6m*P} zmj`xSguLOAB)O0HBe3Gjl!8~ljexQ47)xx_)m_w(PlQw!pV`lc=D^Rx*!S<$|=Q$ZXVL=O}ZPpN^Qd$0j?K)B7Yq6pZ6> zpW!ikm7gG)?nrWHLQC`~jB~})9e8~BkZa%=n>!ek9c=Q_L|(vY*(RAH&cB7xk}#D- z$uo-UHWbY9P+$M8mnwNcQ1)j|;B8-d>-0S#4q1=CNX0hTO!TPnLZMUO7x*xtVFqpm znQ>5WbQDp!s%5O&rHpqbI4^}Bo?gL1b`0|8c<&)F8S=_ZXqF_0^>M!B4rLwoagu#p zW+|A_gg*qwiG2mX4nXa)`i-hxE>4kWtaGo~o7POx7U=18;bnN&6!ZBre2#$$L!$Sc z)@8t0x(9@)B|z6>!nJS|##6hc>gz@sr>B7(MaoFHnOd{x0q$Zee9=%6N|-RNUnn!q zDg_*kR0=I3*rl|_`cy|c%T?r+a6I)*Ke+eNJ>@n_QyS0Q-=_|3ByX4#e#qGcuT#*n zBC&+W%)j(-zJU6fA8+Y+|D>-0#ws&QA`KO0|Ip1+@U%)!K!SQ|S+V9|*Gf*Jug}z! zO37k9Kn*Vh9&wbjvY`nR=r5lz{BdAiHQ&V?wVI{D5AiR&enzQKfouE>Y}mV>Hij)Q zBT4p=I@N^jE0EpvE9cqB)xQvvQ9e(px=WZIpv^FKycr(kt1bxyU)~n}(mb4*brY@0Y(j_Ul<+-mn|CcmI>{?8o_5C})W-DX8TK;E0 zzd27bZ<13>rF%$ZdE`M)!qy)G+edoQ0?{WvU31^6Dh^`z@awfY<_e}V z#-aJD#|6eFf6>)+px<9tm}(};R;1k*027=;me5d2zSekM=|R}|@y4GDfAQfM(X%sqYbAPFe`ic}a&QP}mk7)3D=U3*Cm#@ zdfE0Md5pck&pRCuyhpDdnJahmR)4TT9vZoHp@mEzsMJc47B6_cP-gWOIqir=cP`Yz z3J&tm1a`$iTlVa6Zh3AP5qYwmKEGAdF~#g}l$#nf{7rc5ZM0qf$teD>sY0iX5s?9e z=}8eT)~n+DQS)#EBZ&i0CDnz;VCJ7x(CY}Bt-)|^RBU#DyU2xf!0VjiIy!OwQY11> z-uaVLnTRRGh{!Scla10iT_Xb=#5HzeX9<_ybrV?QiLa^v6GseR(mEGVHw?pFgwB~` z%*w~AQ!mirpVkdL<8qwX9tQJ>`N!b_{a*^XOx9GsZ4-FceIAC5Y#S6{ctZZ-+@W7<3>pFj=hoAZ2I?%Y74F^aapThr7C z?XW7Z7xdVOmlJz`AJXgXU;mUHC?c;KJ%J$|DZqp2G;Q9CL^=xirL`nTg~tmP4u_Gv zcfd#Ay*-g=zn>yBFOJ zNaAY4v#YuL4M>uA*ki~G5DWssQ2c3WOBBb#Le2f07`B@7m@9>VDT);8tVCp{Elpy!l8|h(J9ly1ZP}z_=k_33pk<; zv9kT?OSH2q_3U@PyGScfb93_FjAL2}e+OjH<+46E6?dD?5@^~3eROew6|4rCdjLAu z-nym=WVbwhMzSl%y?HiC48+0&Gsk5MPR8By^UWn~bJOEq7u+WqLWLioE0#4^=>}%n z<;ln^pWfLt@z{eqi2v za1>BPEmhC1vBCHUwFl|9I`qNf9!sG<_>woh4wxwt%dI<+;i(E*%+MCSe83xDJ?(cH z`Q=(d0e5(0TI3(Qi{N7iz^c#CY5%cJnWBY0KkD%5W$^wWQTo?!>Eg9O=ja5ctTs&1 zr(h&32iX6kIw#nkd>JE3L#;fCDLx*9=ov_boy4`ma`^J%WZ6&?xxgGWt@WkbE|G2X zV%eXS10j<%w|lA{ACKwbZzD8zUNyGl_V>_j)hs+?|NG_3K zA|O>HUEQJQCJ_uwI`(=fZ$o+G%yswR=j@t?`E7Y{zm-G@TRp;{XQ8!isj1*o`edQk z;?xwG$IQad=@F5$o)8k=fvz+Wz;KO1cay*d4A4aLE2H}PldsTn&wWpf+|@?eis862 zi+~bdRzKi1ouv*vBi9Wq3&|3#(Q; zYXrY5xPz(Mwh*x113w)@6lISS<6qOyftm%c^sp%z6ifNpuCBG8hz8-k5Z)!e;-r6r z<`@N9N9#%;UJK^Bm!fA@faYPBdmn|uZq;uSpVALuI)ezhkU|1FKX(+%mC9G zPjJ(8`57(CKHU{+jfuU5~f%y`XG0B$t@|lqV2l5dKIsrph%h0%R z;pq`;Uga3prL6HJJZ?dHqV*@)px+@(Rydd}l3An)XDaTqUT#UvKb`SVN>|ciD-hK% zCxHW7S?cXO?QIW8=@OK3(FZaN!eFR6u<*^|4%>t3HtIK4*bDQ(37`92Z4^VSZCx(sQ_z~0k7vr4%&FZ}@A>TB&)-2b7C%H-UnGFYJ zAQeZYYGaqksNb~5k=PgPaV;|Zh+0)WuA?1sgWp9B$f~-ZSceva z)(HW&Bd&47&rf9s=!k(055=vz`+#y@%jT|EfkY$^N3I>i*|G?~I;4@YveEcSMYE}Y z);FMbIoZHM7@bs5f*IeKS10&jx6d)X2Cpb$$Ef80QT$B&hM(eAZ)&4F%|}2~hnsf; zD%=KT=$NCl7IEY{pvXV6Q6ADx@ib1F5BlAjAeV-+P7Yc>)N7yE`ram*fZGUy>J922 zUZM~mObxV23s@9;)QwnmDBq)u(Aq7eP?8OA9php%mM#GgVFZd5Vc4wsoxs*DLVdwX z3mv$JzA4h9OA^#;tj7jR9PXl~jf_?Q)WC2R9l%3y6ik(NTAuRg~4i13A1?~`ZY%nxW|4>VAoC{!i zN89J%UH=l}=jr&eFIeFfko@zwg>tEeWj|=t;sLZskbC8_1(|~VUfT5pE@#;px%Efn zx6w&zmfEjlzWiq#=Wznc z`HwwIR8eZ2>E}|9F#%v=oVQ>zREULp49<_ns#XU>g^Q+= z#|$@l!ur3LF`kB9hyX{2ZG%Xn>E0Fv3yPr)!L z*P*`shFuSV_WyhZj1l1ILPRxNJ>XZ{M74`2jE=F`4KUcaP~AW_)F@uwj~>qt#AdwK zvLH(gEZH)~+`0ZfKhl;IYKGnQJW^6*pIu|O14quB{NiyJElTL7AZs-diPy^{)m=?McTvZ~^VPKUxy`JC5 z0XChHn+Ae`@1XPc_UX(i@U_1t7l;z-x$Y){yA#Z6U(!6wj=b8N$egEpB7K!UI_5in z=B5*Vs6#dIIe|oq^e+Mq&1P}O$(4U`Pn*=_rsuCFFwW?e$0@wi3R7Bx4i0ET4--Y$ z$44)qug9fg8qa_ACyk#HY*T>BWAjiM{Zi;-wpL-@&;q6y&)3_?30%4Gk5|QyI z*g(U_UTeD-+ej|`Y#*8eUl*{-k=^#$XYCzQ`YmkkLL1m0T5DLyeww%!b)cKckSE8e zRh|Op+B-Q@`vg$AX|5nJnCaf}of{XhNd*3Q?=AULH}=b+sc2szyXt8O*CCWHx`Ex+ z`+OmqizG{4_FaA$O9}#%&UyH?{$X;Pteq@}h90cBkex);^E z{#+$)0SMx+_*!=ck~_(jZ-~y}!Y?@9ecb%ZbflP+>0Y~pw7x+;?@v8sLUp+HEnTk6xZn?O!R@6{aw-N_O}y zJI(n;I=Hk(W>u%0emVnvNE+*>6-d?5mZo6yY2}}m&+Rch`>_v&7@*`MjfH_;qALXc zTQMm(nr_DuO(#oS0SWtW?mcc(;el@|qOq7{Qr`w2C7S#tg{xPpU7sR9etvs@f{vIj zga5P9oD92%ejx5WFVzbiqR?F)7+u8r3f8n)PFMPRXemBENcqWXuZW12(3O#&MI_6p zh3YFLn{S%aE7gspvz}a{w+n-1zuU)UnSJXVmc2i(Sgpxt?DbK-V1NxaIOdqFhf55; z04kQHhd)B&i1#lL&GWx zv>-zKfRJg|vPde`VYXgJ-@oP2--)HBd|g-?O)q$25V;Biw?*`>iAAQr#!~CHvKLnM z_CSDXieYvSAPykD+>pFh_UpK6k#B7B2&XwN1C90<7nmM;Z=Y%?jxOh(i$KmBiz1mQqJlzK+>gMtqxJwuq zGigz{gsvi=D(CJF0aK(lf!=^8ab`c8{bAhnPz_|5rWH(RqBxBMW&==*%s#u$&?b(q zerV?a;&DF-b@9JP%ZxjX-p6#=WRKwszVDbn2aYZ${D zj!hDeQ8U@jlKD<9i>`pd0t9d-i529=7*g-@Z7bBjEEm#|)T=g{IBaZ9hKYd-3@UdJ zJ$DnU^9_PDCB)cr1<6_jh7@CS+RhD>H#Eapk1eWVRa9oo)uu1lI@IQf*GUy_uX~HY zs#tVS_CqJtUTM&4{HVNe!nvi8vw{5bL0sQNE8!;X8=p5_X4Qh^0(%o9k6Af#gyxBLxe-KQZijMo%cA zEi6N(w<@QODvh&OX!C}obbN>n`l8^TV(|kVwZBGRm=#yS1<0GQ*+I3eRH*wsVQq7; z&fSDNJ*du$aAu?Om++ZySgTtENvjEtoGpHAE5=c>Scd;Mfm|K#`w#Qf&RBu4cW8lW z2sRqoomnSxuqYr*pp?odxsvcgdyyp4Im zW!-C9?%tHr>!N)!B+P$Fz~$e#|AHTnVY)&2Rs;LDXSmLr?nhZj9?IyS;oxGUYswL` zIgB~-&xImqYenk@C#Sl%sB?_}eefXgoL|5jQVm)OPsyoQq^9-G#vw)I_AO}6Kkz2P zMUgyX_1ZLzkr{q%UI8aj>eHBm{k<>O5x)W0)=0=S?Ui{WO*+4@&H@CcV4{`F9?IRt z$RI(qT~Bu2)|+D5d_tLeRDC-e-iy923~ycKq+RGzzsv9lR%>wonluPRQh`+rrt$bA z+|3~jf-_g}!n`+%BW#-@rt77eEZU}h`ea-pmF#5&?dbM)eDCjfMSf$p>{$YafupG& znAI?LKf{Mjf%A)$+pNUp#BQl@*T@O>Aq%LFVwR&+$S_I@=E`UZDAp^dKQcOj^}}kO z5%yXO-C`5iH+x{27@sy4kMXEii8yqMIaC$?B+x0cUeTJa zt{$x0#tz)&DAn6xbsbe;hj}xzq zeBpG=N2W40_)naae48UOXa~MNm!9=zN-9nOpDlyKX&-kf0~@r8xRz$hrk30(?LJlO z6T1e>pEga4oirz>&{Nn;L6r!<&g`%b^b6Uw>%@n5pKhbZ6^WVxUf?bth~`$H*D{=I zx8tL^#mcNFxO2*+d3NEn^p@jhVo`X`pnA9srF^BRR-G(Xl0041f{PgICydM{mPBSJ z1BaGD)#lne5VB{Sw$4Rn{TmTZFkQPfSC?p-35Rggle8D_YVeGZ-z}7lLVs*iz8&b# z$ODItuKi?*dzNy)vj;ZbIFtI-WN^-XT3VjFqW2p_~i)zi?@B43}$!qbAf94?W^%MwtjFSWRN zcC|4nc;~a2mG}s-sxmx6#eKkNP=RNkKo_wItzo%Jkkbh*n)a7o(-e#vF6hmqO1hwV zhcGe&HnrG>?*O!6hivP;EgFA~@dH7)Y>wQ|(!s@17e)(;sO59lL&p`KuL+hO$aNo= z62#C!OCP$Y*JjWz^&-`nh{ayVF?qyQ=mZgO(bin_!w+WTHoGjGaqp3|NC!GALNDkq zXA{Nx;B`r!uCfa9^Wge$cA zudlydMpHXNH1SXH9!AhrCp}99`Xl$5`Fi{3?U-}rmZDe_rXX}flE?T(mU_Ly`*%8V zf2rb=$u!1#UiiX-ZsP*Il4Ks}0Uy*G)-NN)#=_AP#6H}FVME3crh>_bjsG2xmyg=+ ztaPhg0M4q#j$Hq0$UAzUaas}r(=_vIk#724XSKNl^4YTG08%tZc~y{8tl9+p9>jjc zRjMV~T`(e@w$=D8&|c$1O%>3YbbsgvE2a3Tag|OF1S4&F!94QczLPy;U|))^a3C1m zetzDrMZo{-X!^TBz!GLH|$)7u$#+am8(8}lgb&A1IVa_eezxSbGxop!5x zqV?-#jp;XN!3ivXrCMiK?>P9AuU)qXS)zG=FV9ED_#1By=B};Mz!YuK2~@EZ`VN#h zOYG#`=4!0IGM%;#QdkA>%kTP2CV{~nscXj`8+0YoZUokz8Xoy+Ny_FMwTad$jZF!haJfJgiO)v_juvL5Fe zNx_t1&Y?Rd?7CvX8Th-3=)=U$`(QC&$O;=7_LI;1TQzsK3q}X{Egiatx^L6@N^+Bk zXJ)pXBezVQ=I*+8Q})ZW?h=M+rTYDpRZkfBeTXI#rlp zW{Nw`pcP}E=IIxSvK+CXb-y0>;@#!TQnWQS7TW&HH|)vpM7{tlkwT|<^fvUxo_l{o zR$a~~Lep?hjqA2t#XZZH(dF=^IFM*0rh2(ZdtIY^_sG&_z$LpF!+h}rM$I%iFXUBC zGYdNJS+YioqNGp&(}KW88CE=VF=_>jT;A3(;`B{K+)+ zrnDBjMd}|tdis0#%q{ubVDx@j(LNv-GH|g~ELP|YheBn4IA(8l(jwKI0W@b0yg-Zf zRF28--Q+&760b0iQTsQh;=Rgxu&D?dI7M%3mD<~0CG+3=$}Xh?gQh(uYst+0cc(^( zx$o_38K2S!Y)1S$h8t$w+zF5G$If`U6O_IF*!gkc>M9hb2|@F$DDPg}G-2o`BT;^F z5FE4~HNB<+H=wzrKWPJXftq4ti96ZRT^{s@9wRIHI@HkfkDNdOR+8Q)ygzL-3AtZ7Vuq2fGJ}z+t1U>W3kq%d_wf1n^v;U2>(EuDpPi zy_em-c9OgYz>aH z=K_-YZ7dS%`1RTXGxzGJ*_^_chY-6wkOtnGDp$(`mF$}B_6kS6Sy zQ#8dq_qVKX;=NRI6aNuTzXt(?j4~hJuuE65PNYup@GTUeOO|;oD7e4_Ik%`Y$SKwh zPw>7NTj6?oIX9=9eezdO_6)rEy_Y+7+h~%CzyD-*u1`*pbtegPz}Wd=o#9+xVNeSG zOlr#_1EXC=!GcQUKgZr?szdgAlYc8^betbFfot+%R4Cqy8YUS&pN`oC&8 z%S827$l`7tOpM%YT7SI)c;2@*pAo4mY&I~()T|_Sx3@SuJabz1d&lfQDgE2)iqrui zb0{y3cmI_cQTtvO?tHDB`-|DQ$lyYxy>n~WN2{7ieoYQx$ZAqCYRLUyusIRCu7~s@ z%#PVe6uZ-oFc;t9T&%$X6IPkkRF4a6WY7;Q*RM8f9JQ+H}YZu<9*sTE`%yvkb zgSRPH{zE0j;?u^M?}ERNdS{H2z?y%U{e$>d6yV$7KTB4mHb_Pdz?s&)jwMq1>cyK< zjXs&Cst+wsA0szHHfF9|ddV{7ZSDt(-R>!7kG`;z9F>pw86JZ5@Qa`e>PhC{LUdB~ zq>ZrHQ{)@bLQN^wbJ;e$r8GP5bi&ru3bdLioJ(E@>dBk00o!xfs^Gbz2M!HkWXq$) znou0rFpA&rBiVs#m(aEC%)kw@G?whcI1?l0E8E{*4BpPFadbp2y_!n1p^v0Pv$#13 z_tX(3-k^qQMpm;IBIjcTudz|#kRHqQtx`_MjKiY&%sGl+zWNZY#-LOvxJy33!!F7y z!UTENKYr5|CgnTjif2E;o%j!!ks;a%rH0gNf$1^o1QTt-OkpH2BP{J*1-jp>rGXlf zX@4q8gBxS6JK`$<*;Ot2@SveAXu%DP0Tl5?f#~=cAIylbylaI^3v%EM zuOjoxt=dVzP0rf3KyWyiB_#XFJ_D7v+VkVgFO2o~?tX&gz4EQLG ztP6k6?!9#ReWIW#NcnJj?WxDj58H4HdNi<|nq@5cKO!{Wq+B1Dhac>o1leWS9Q`&k z&>D|HuD;K#r4R%Dg0Ei2w7*CLXlqB9^~Nl)_a|8{cyq|M;n_F7M=g9L4; zov`Qu{mqGol&2BML@#&3p@JpaVY0#zKJ4$nL(wgay{m z&>yifXN6A3nDv=ee}ufu0{+PE-mcay)4ua0#Rd_6W2u`%(2EYFpZRh}8vb9)F7$Aj z{UY<0Vy9YolGBi4Qr~UW_^}YkWZ8|$0wka4W_Oj-E0Ky|ZA@6K!mLUSVU8VJvN~S< z{i5d0Z0vw+(%54BGEziXbF8Tu*ZBvj;xOSTVWCD4s9g>e8x<;EV4d2mI_pD=A#;Zs z*T*Q%_HnZ8$n4^}C|Xsa{k|V@Tz4}TcV*75-#S|xZlj({c7~s~GDUH}!H$E3)SN9q zo+j4YA*+#m$TVr947!7lZOR9#Y)>xoMc%7k+sXQiq;yS*d2PJRCK}wBrT8k0&}JCd zfea9(X2QGV*Pqo_IA$}E=-#pu_gJFWZL+sSGz;HPr~}hCLjK3!LuW!1{Z!4u z!Od#dwqnf=PMx$OX@59|1J+jHg*l`nq;l@MkCt_RQ2l6)`$@ThBvUZhQu6QUC|~SK zTGs}DJ4?81mYQ$jpk&z8EFc;80Pgp+p0_Iw0J6avu1WnYjbyww|Ec{yVeGTwRN}XUSp;xy{jZ%BxF~wJK!B+j5 z+8WM<5A^6&$_TH9IfXM{Vln>JN9u+MV8gn0%Ayqum6OaUIs#;2B3+_-?TjHOSPvuIHVFt7(ZDs~OE^B(P%BYtB7$9bJ zs&LaRxyQJkIsdp?wMim^4+Ax+xXx|htQkkBT{-e2_vp$I_u9pz>MES41NjWrzRe~X z_J*C$-7~Hfi*Va7sBCEw*^RgjAtd3H;oX8EY#4)?RPG9KM6F! zSf5stq;a#xLj~ACWnF=py@(+`O>U{t8!6amnUz98;%&jl9YqbglId5zcxU+l%Pe)| zN3I~~_y$_AzGb$%W_pum+w8!0*wwh+<~X(UB*-+tB@c1x?~uC{(N$?<6p4M7S@jBP3raT`r)71QV*AMXw&i5L7Stv2U4OR9xAjg-U{Cnouvv zG%`ju{qWOr1>hI9pbdKx<)iPVbI1lq2GQ;I0u#HGaSMmQ5cGTti~C1`rj4**yHdDT z_Bp05LaQNxrr>}9MPf^KLuE(NQ|XJ@(5rx6N*{lr8ruxH9>K`$wPA$8r}$^v09)$a zaBNTKNLuDQwL2g~7yg&A>d`iZw^thAT}ccukeNHwLQ_o7W?i`3KYFE!3^rbG;W!{7 z+BP4cYvvH<&##L%nKP4@pu>m{uOP(_a@~t2gF7#%DOTcV4z(|snWk9px(AGMMXu@5?PMFVu@91t@Fs0Vm<{=^`$4!!RZ+fM4Gs;)!rpU+0?OB>7 z;bKxUVa5+BJenb2EFoF_BC`UJT@R3#I@@d((4Zw3fZ}yF96m?lIyjFcwl#cQ1I-eW z@eP?~mFHyFWodbOc|?`K`Bhl-AYd3U2}W;~_y36%;nV{c;x#*2HU-L{Vj$!>;R2MW zFPyOmE8GsKUT4XE5KXaK&8OLpgMy%=S~}G*Ju=rntd$ob2?=|MsZ{$oA4zk#n1Y;Hj7??z4jUi(SFnT97|+aFLo>~2J_-zY z3oja6-)~&%%`Gx+tT*M=Hnrefn*|@J+j#lUa2Y(gl|N!`-G(^C&4N!7GL$;Pn$@@; zZsO17>?@|km%hLZZ@~wAP%$}cy=!o9rDK4`^}1eg=5M@vxOzGEy!e3W^Lk~?+Y1sk zSIqD4=26hXS-|KXc~^V$LyCJZy1mzTs?et6ehcHx1jA|)@BIk6=McWH4V1k|S&j7UQ<7LMHo^qOg=J%g1C;qudt_fb zEzyl^WSH20K{2vQVWmR$9)zpe@4CVN44>fXibS-;#of}qCYc`n4&f2#QsD}+XAilD zEz(?tnV1&x#1fq6<@8jTE|isO6hViP5@YfD0`pr~reHpBy38A$eH@XHpCYP}zZD}Y zc<2TAz_PZXn^3ywyxpPki<#k_{j+JMu&s*t#yPTClW z`fikPo*7R@3%z#aJHJtj?{U)(U@g@?2N$|t);}*TO|k>KTVWm7A@jV6vBR+8&PAjK z9Z+EDED?U1ITpG_n4o)x8uWYU((|7&{=cX3P(Lw?s68gQdQ($jP15cXB0p_ZUsOH< z{2?$m-K#bf_P7R)8=DnsW*@!BO{Fy~G4!Hy$88&D5KMeD54o5HyH{c^$yNBZ@`YW# z{*(CY?x-nQZ`^|sQdcGA?-ktCbPsb@C4@z-jF2$tAvk7czjRI|{!5Zm%egW>b|%?7 zNuK%fq`zI8I<;0bGi*f&Y)Zr07RHHAwT41}c9KQ-VES69emPWV2{$$a@wdjN_$hTI z`wgGVNU2fkUjdpCbM;B&{C0E*t_1JClLIF0n)5ew;pBdJ1pYDIzhj?r#5<+$r&MyA z!dvC?>h@ptVhRyn^StJcpQ%AO!F>X6t ztmeXV2sNi^eH35#1<7%?V&vQvU-(&58qScFN4})Q+43ks++xKsTB9@Lr4xy{S2js3 za_W7FMcSOZoyB#w@dtglm*{Kd?ep(<9!Kt+L$Tm6@2A+S&KeDCH z_7EcbO}@_Pye@OhBB^CQ4g-?uLY_W3|1-qJG_CgjyNi|Kr;v?FO0(?w?xr=ik0_VU zu~Z7|tvg5;vY=q0X6*>yahvEM{df{#o?pw7h3a+;;OQ^#JZL2Kl}};Q&UMRuq5d5Y z^-4dh6;j1ve9I54&q3@rQ+#56#27imic!u-Zwc22eYlDRt$tdLtp1mKTFobQZ1d~* z@rQD^GWBm|7UNQ@YH+h;aS2dAVBQ@ixoX+%93gxI6qD6+thJ16C-EM6>71qsyzt&t z{K|>Rsh{M^CKfu#*BUrTR#UQiUfts;uiB!-i_5iyIzm2fwZ? zcwrgsFSB}2*O-3gnwvCl)PJa84eS(7A7QSYo$d9JlM+qh{YSf1XmrFV4nB3_UY=f& zwkkp*0M1=d<%nfDsdw>1Jz?)Hy-+ubKOMcK$JHb3mkLD#2Y>Ty=%o`>y zeLDFG4=hZ(7f5(ZKaK|~iN(2NCM6L=OsZ?zyIQh09Vj5X`=_J~^Lal7f8etntErtrU`7@+y44Rg$RkCnz$acB zA5uSY`nCwM09;i{$h59WAa3QAqobpM@C~k2<`b-*AYKnkOtQGVe{&{&Fo=KcVl;m{~hWaH|qH zz?!w6_|1>%7(AD7dFfBo3cJ=%q1@Z7q%Dsq>{{H)Q_xSr=rQ?oe4q!kKTmypnN#mV zo=}Ia5vWIzoOr?LvnyBd-v5#+XzLe(Kh3TEXM*BwF|q?EKD?Nxajifevcc?4IGg9l z2EU3xNC(wInn8;<3k&klD2iA~M_p>J-}Ks#Y(mb*37E7{QjOF z+8?T={N_h?;#OuN*<(|t@h9a5Th%za%QXc?HWux7E4XKrI7PP1rX#ek*nF~!qps|} zyk{@2=A(Bu)n_c1+`>exN6_MT$*Dw4V2rjchQ#ap(9m@5{ogg*w zdmFkgL;Yi+(x}&fs8tEnbn2xAf-_(6!L^!yy&8Ts6Xpk_hcUS(UO2Ddpmn^$N0!zu z%~Nz8Aomyhg6UcIXRgUhn{>o)yZ~oP~8F?1T&D->is70d(vG{&)n< z&H}W0JX&ZT^48tmtwo~yXDJqv*{cLhrs&F?<$8JWTcxix<~d(&u}wTCvvSl!t-p1C zva(k?@;nEy_7GtP0UEb6yRJNFk6hGqf6|aYX^q9qn2p$6Knxkbyor0(h5yeDef$*H zAFIVJ{<`b?plMA$eufT8B73;(&dz4tohtNr`Wf*0Z|b{sjMG$-B7P-tJ=SLi;{R=J zeu6uH3{oU;_`86&266q5a6?_PNv2&2(aBAyuwM4p?3@Wk!^;tGu=n_SHDX=sfqQyM z9`v0v>#o9@fW##bw`h*Li*`@hX2;rP7Z|Y$H^Ue#@;-|fNiNEXkOYROtyWE+1~zu# zr>_w<2*^pY4X5o_a=**dj>Cq_G)YlyiRH*IHxRT|J_WnJP=arQ3l<4%4HzQwr|CYE0^2RSG$yOHr^nFWoMrRiCzs}J4)u@Up~W}e|45T?fqEW0 zQ%6X#=$Tn-BT5m;o`%7z_dwef%*bT8)DU?^xW^qQ@*r?;MvE+{*7yrmaxXdM|_>>seFSc3BAxj?GH9jC5 z*?TW6**rE5X4uMKb}AWz-l9ijUH~q^m2hsu-6`PPSyEqm0V5XfKbx4C=RY~ls2~EK z&xkYp1Us1Zxw=tKq{2K#?+ag+%IP8D)+hB9ss|LYL_4~;SFlgxcjW)YD;aZC(O@tj zh!7^5#3<#NPJ!`k!PTQuwrDB`6GVYvc7$Cc&tkn@#~k5XiW!ftjBu+}7G7HhG2k{F zyrKkiV$Tz_CaY`@>XlE(^^>+;2)W=(V#kM6IubyZV5yZ}Vh;^z6>P){$8mc%w_I~l zj$ko+nQ>(qchS}aQKS5$HE%vJl;Q*RFHzOjNb3*S6U4IPCW_ZQx?vr&%edrgZQWDQ*S*@!y(Z;6HbRTX{vsf$o&h`J813WSwo0zsh|~7ao+W z7p*hwDg|HNTd283d`?X!l&wVmu!eTK*9_sVy|+&?Oqfj_QUc?e7o~bZ=Kx*#6D+r1 zFoUI8sl!6HzTDNbph4^IXy1mD4{+;dUd7^~iz6Z=v!BvKmlhJQYy@Hx{1hP5Y_*=7 z8W3{Z*AMkGuQenbF9)ubK_l|RKRIq6KpIbj-ss(z;_Z_>v83!pbM=SaA+JdSI126Snj4- zYklOMV2FH;3Grf$%#KP=I$(GP^FvAYXTAumpknP3sc=}a`0QF)*V11cD@=Py)Z063 z6}jueldb)7LDv&H0iF}$g?Xf67BsZI; zy=0zk*2@8N#rei*mL3BtObY)sUsqUa;d7Xc;_5>%OKaOq1OiUa!$g!3Ew%;4Y6cMl zuu^JNrw-^v4#9is@YAKjlixWR*r@-L+4K8~zp$PpWqk`=_F-yw13r{7$yp_o&wFiu zlq5du=H9z@K(Caa07})mriT?Q)jFch9ZgI%HKsw3?k9L6P_XI6$_8-!SFmJ`bYVT%de0qSFDk2F;93^*`~iWI++{?}mGwB3~PfjcZ_`yD2`qWJA7FM4R1f zv09eQ#MnWc=#!=La0pBlSea;QXlG;4ZmIYI^|HCqQTL7o#faY!r+aL3hvucU<+(%M z3^ZyFF*Z_1DtN)KO%(h_U*|yuf)C%R)TQE`;7TKPBXR$B3#}kpZA7?!flHn zIyBlTzf^%qtabBeodjlsy}H# zAIx9+rsAG4uxR@d+*X-j9kvH@G@K%BKA0@ZUtxpzfHSV35B`-3P@-hIUCKx)EGI=y}~`gJB`xIq{ncHS;BmF8Yj z!5ts<^x?~*|0E19pZbMSlxkukv{9K61)I^?w~G-V3S+2#N&ASib8LF3{V;0T0=YKe z(g`!^f=%OK{9m-pV6r-6Tb@NPw}r1scq`Rh`N*vI8Y2y`u7IQeUV(%Dq|-IKA`z7# zh5+w4f$qWo_m*UpJ8sbUtQ@d#mO^E3^#7yi+~Zp8|37|RyLN1A>)ckYEv3@=B%QRa zNDg;~P>B{DhA;_pYS*@uLuJSz!j(Jj_=fI;5UvhL$K44bTsfBGkj`zt>-T4m{(Xj+j$&ZA{Kva0^8p17B&eX;<#th0SreQacok}zZ&ua{FGK|myA;5>Ed{hIg9^pn$P!Q;m|Er^Lj0< zf`89HlH4SOW+E{`aylu9q2vm&Up}(uga9C*vW4-s;iVA*Oi*H;AzLiVOPM#JlVBp* zU*t(nx>HY#=R(Ds$5@va))k~s&3kHAfm6xx9ET(JIDJsnERODlJXPqJUI;BfBCn&A zUCQ4S^Y1x`EyJ-AT(}fhj@!f%LB0Vs2h<59~eV1EKi3n(U z$6u;kn(JGi0Oey1CdvO~sqKv2PKwmNy7M*=LAYj86YVDd3eFZtNTa=Y!)!iWxnr{E ziC+N-ers@l;x;>fjDKbrZo79<&_cZ9@S`oQkAG!27fs(9;JD&>3(U$kAh3@!} zH8WybpBp8r$$lZ(S^AjvV!b3M$F_V5Ierdp14$Hif0(y3!h?lF9AA>`o)|sSk z86qQXiZ0FIR#( z){95#lD+lR%RBVyJA^rl&=5k%BZwKSwHIhOh#51X!%w+E1DCB8yAN`76-8yeb{`*hTtTTz8Ol`5m6K zNG5BOXL?|j_}ZC=Dj(x7m))inHa(rm64iFQ5_>kM&Vd?iXLQymO!S-A`H?b0>KX)} zK?c2OY?=0Zqrre(w~=<8AiY)s@r~3@a(@>5j?_0t>q-df70&gM$tLpB63La$G2j>^xUT>_6-YO9SbeY2fCg%I;4IA~J$tXYgllR#< zsyxW4O;2&jS7`eci;C{-4sEZanGx=@g>AvRP0 zc35rVR}b|ZhH7t{?yUJw5FKgSwKb1X72%dk<@5*xiH%<=LwFs&SU*|KI@W zpjn)QsCh+nJ?SCQv0~9fYP*@Cw7|FtrZkpT{+A?+Q@P2>dlKSY;df*ls*P_#YcdEw z7845I`=e$q=JF8xz`5l0LHM}yQxO|S0UgzJlYVqSw28bNZjEwu$lGJB62iaD+NpCl z8XQ_6l)D7?W0#p&JiwMYvpKy5OT;gTN!m8*zpO4!N=~Y4Wx75xlY)!f9sMKH%tfT} z4br-1s;5caDQmGWV~!(IMG5##yj+UpS;O?8XsYrOaMS!y7TmHd2i zo+*S>odVtQ0S|eeRVV&wASJpDb8BKviqew*UV*dZWaOzKqOFrumq)SQx0Dr``h#Fs zH}tI|C2b|eYtuUk@ahf@KBy$0v14qS29@_xR|ml3gwy|$(xR8hM8>Zr#PxCT`Qc!= zoj3v(j4S6q$#FL7&WzIdC-3lN^Jfx=eGdH)2vb`W z7z40|U0&HRV6z15lY`7^k0LpaX!+`Id28S zAv{?FUhyb-ZK9rJK;OB%5$GM(y5y=RSea1Md_=TJdW*1paXroMKmGUw zMc(gNUXn~oI$YnV<97EGzYRf8ycEh*9N%EV6T4`vyDt#`ipd^tpmMH}Z&`P7NNt04 zZac-RECQAd94j_`aU2dXMb%%lIMDS9N6K@oIh&RfWl6dOF5gH}_?GYAuRfOb6JUJ=uF>v}>p@xyS!>#_ zdA?XYKCwzqxooQk-W44=OiE0EkHX4X_eCEV=G}|22%|Fc^$g=$7Okj8m<_QeDcwfz zY5W+m9|;XgdUsrMdT)xH(Q^V^!yhM+A6R3{|G{<+7tq3*ep0r-afbRH*dfb^%Ky<` zgFikIkBJn?&@xm+VOq&^{@=z^)0S69r>!z{bEbJMt$v0`g$4tF|*a+bf2w^-B;(#_u^sDPf8FF)Q7u zx%SC)Yz;Fu32@wJ9Hhf_d3bnZ$ps&H(X^(WxRi;zfU@*A<_A^p0~c=50ipMj6cf3z zfN)H7D&^?CR&1PVWO$RW;2V4Qt?3kH0kwUUd`yvi7;nL&SDVe6%+l~qOQ2?yo8|587*rd_cRA&+#Dg1s!PWmY z0fDU870S^4XweY8cF3~k3_GB*t%*4J!$rqEg6?`;fxIWK3ozt$*O6)?xz$I=)zu^J zx_!3MZn;?&=qCoubRQjJ?VM@kKhPzYd5y6=W7vGpu;_Qkz!HN)!y`>IxrhSCtOVZ7 zF}nQFp+FYxejE%tXS{yxgu0xv*|pBx$iUz1TfMjuuqn}#R_rCNxIuh0Yzp`?28nmm0^ZXqGr%LKusbFBn&LIG zldPgGbsXS3humGYQXB3kcKOAtex0-25i)uyFqF|dZJz4oINfW}g>A<$RS<&UOHE7`F(l=Y`begOD-+9N8*15CfJ(2i4Vc9PC5j_$n=golzc znAPi=7}ra{>JQ`qe^$al+CKZJ?#{(g(LEw^N!>L(Zj(bcHc_T;;yC!9#pd)2YWRfI z4YGw2IAc2DkJ=$`i>lr_^D&STADkjF-g1=U%2S0r(cH4D?mBV=%&hEGL~kEuU07T9 zzawl12kL7#&?uBFjW@FAO9(@C!cwq*|G$3dW#61w90s8$eXwlG>@{e9k-G!+(5qR@ zO9gDc+P|{a=+R%;rf`FL@pztdY*drfvdNTxL$!7mE(H0*lbl25;T}$AbF#sK!|f~{ zW?ewhewr1k`7j+xBiDR`2Etu`t71s_dbXj3$2fN7%}R~cQNVs_JH1`lns4acZR253 z9`>ra2F+$@p8JublNp-@Dcjjc9hEK1mB!Dnpp)nCM5D$w@NMk?h8BRYrLsjNmum1n z5aXadxHbx>6NVMEQ!kZs_`98%YHauQN!#&@+6?huM>52F6-wW>nSEtlQkK^_~MwZNYbl$o|sJ>MGC{>=)h zW3Fk!<#8ylL!sOF8~eMMV~F&(aCADYk9^E_Ef$7mG7KCs=*l9{x9XCevB!P9 zU>vsVCp~Dr9{zrcxMUbn?Iv|&dU_($=oYX4hj-KHHl0a`e3bO&1eBQcHjY= z`ET=T9>#!fJ^Lv_<)1c!fS6}1%ThiCN z)4DS~DsKx@t)Z0XVN(0urt*3>DQw>J69?^5h~GiNHw%mq*lGYNYxSx$FXa}+*f>;j zR8+7ldeSK5bu}AI7YYj&iH`!uHX&I6<;fK z4}P<-*V?3f9!K~SM<~D3uxg$ST37b|p~V&68Dqsi8>4jZQ+fV3G1^OMu*RY-++|S( z^N&NFa`JZF!)I?a|7}Bf24LuTHs$EEB;{O89u$mzr?goah=Cu4#)f-Bg)cNKU33+n z?VpMihgfK^w3>n5$u%B?sTW0`g;#GPk24(JN#`-{DR+Dl>d7O;Cs{S`4IQ({IMX?9 zff(rC3|Pi^Fsylk-Ey--Ab;CHhd`H45Bg%*&0zWvLcdm&82HaB07!>hPrb|S-o8%* zmrC)qRTCF8BbJo#l@$9}$vBJVjU-d{Q)*sc!6za>S$;zT-NG2E%PCH#daK6)l znlCDbjaQ0S71Fb&n#gDa>E}0SEVJ{qAuQ=&Qd6yY&1MpJzA7L^Xyxl0an&g$ms_<9 zHtvxR)5A+>L6A|%C5xi@$cHY4^fb^vqw9{Lbi}%<$GCb1v)YbVHBK-3Q<^%ZoIxDn zbv;!comF|43)MK(;f8w1Nuj4OGsf|DqJi)=4hY5YAolC4;IR!=>YmXvydsJCmil|C zfi(RTr#j^z6eRsg+Bqw*HWqFr`bNxIro}TJgB;vW|d>l=?Z2GBrJR!9?DYL+A|PRvNy0zwrH`;SKxs zoe4(x!KDQG_AqJGANmkW#s$`gWskG&R#8)|PWq(uPjx-42XL+MIhOWNVp?CTzN6zF z_QWBD=T{jChH!0b+`bCR4;lsJ9I+145nnxQ9XLqpIhba?GN<~mvbSwuH>YG!c=Mg@ zyJ=)CX3^J}sHI&)4o8aAOBJGKL*(Zv(z*0709q~f^FjSQ%&T`je83DjPCb;zA2Ch= z@N3hEdLCR+l$>+RG%%7pCz7EZwa!eM0tK-|o$lqy^!|MHTgKg-B2&M=>6gz+)K8HB zoW}rFTxDI@E&L{we)%YnD&8mQuDg(>wjfR#JEPD9QXFSYY2fMB_(cE1N?g)lH_S4# z=X+(m1p+oP{qi`~0UA?3nB_+f7&dy1L(8TD*UTLbTjgupsX=#yXNg~X6YVUg|sM6VWh_m^rm z;S2 zlWt~}-)SW>MOvjqQ0Hl`dBZ8)#=9GVBcZ&LPtB8Thco_N2|VL!>ZV11Vs&nTY>ZC) zOZ>QM&oX{6_rHB=iwf~Ow2=G~C}1_MbZzpXmz^|PXyDoT%+nIS@fsAz|A)SnOc+Z4 zm{cAfVudBp_jVYx+rdOUZ8xw1%{#5KLz{qtRZ)Gy4+?U3qlw2oKjjyqvo3tQhKKH7 zhZh&kD>n(Rd5PNunBHAybVFfsMpck|&9iP}J@xdpJde^;;Mi4@iFq23B|S?rPEa>| zR_Ff@r!X;y5;kc?i9?TzMwBpv zSo@xqI1C%P$sB&30au3QkUQQhZKBZ!ZZ#3xqn7 zJ22K2b~7j{<-|5SIO;$C+Wxw2wx4-q_5`of6Bwf(`o-oCnfr;}jSFfPFu%t}E(&n0 z0n`>|*cM;c#AHjm00lgW5^#3Q(05O=_>Z8hMG3tw;bLBDqY*Py$pP`#aZ+~Q{QxXKp0|rI6 zjtG_Uz$~g`N)!&i`#r9X4M8Hn9z>O&qC7;E{vr1*+#;(_QFTKtsD|kqa8>!PS5Whf zc^P9nD51Hbnk=JCD>?fRXm-@(laHTh9I#ow65Kk2|4&v#)O+C=|2Vq4k0*^JhVkmC z33H4X6j?}m3Y?NjuDq!^SA_SwZhztTQv*T?A=tZV^1XQdqx2!bP0elHAXM!!eJj!R zT6P;d0vg7Bk-Xt`1$q^N+d_X$Wx_*oT46Kp6fVqCZ6z$Q#S)q+PynlwE?XDR^>^qmce>$3)o4( zGvPx&c*B0H#aXIMu)LaRJ&rbl&p-a=RrNrLJA}Pic z=vL9`rYXGgN$Nx&W86OA`DcV;4}p`t({vuzviC>noeRM9{5P7#W{A7J5K5niW*I)= zyRvnpEE8$FUG=O9R<$o}%d|ek(MufUqqGe=qujY6!>N}PFddFPF-d}4o2y*>y-N!MoHr*c(wZgyVJP; zkMasNj?y`OQ$%;eHoSb~!d86TdWUxLityQ5INey7okHB&!Ks0vbYw8FZ@XXRR4m>f z3!f>8#EqY;QzW~)Xjsex0d-7JKK~KDLah+Z4=2AGqc`KbM3stD`vYJXqJD&$IVHWJ zl^M{|b=c$}{LUJLq#~9eKF{JxS5GMm1I}-&v~kYG;oM<;De+#C)8Msu0eH;qDwN(Q zY^iW~wh6bV|JTZ&M)>w&CBzLRUNE2+M&2moryfx4x8xlaA-6sY0ycn@gF!dr*pil4 zb#n#E9Wz9yW@vZa;BOQ^v$R}yym6in&qvKl zAQ+PYUssljrB2Rim8kt#(g#p&S)pmdb=ZAlgO=!7xN{~vd#3* zY~fL^A+KmmqbdRygengQ;v(L=e;0wBR^YRl+FMpBpLl&%-ra6?R(&4U<==rz^M;vW zFun8ZDq`v!ax~YdC*8PpvjA@SSJbjWJME6%wMkF5`qFF)H)hcQaJ&$n|{ynMu{HmO<)+ykM zp#fgaxle+M>Gx4;xD&O<8Gq%`D@r7A)@hN5YA?jAd^nh2tj7t-Ra2T+SguP@8~ifI zfIv7EXR~A3uW`ycYxos?%`BMg>u?`{{vQb%BfD;3^^Yr?H_LvU0ejNGXAhBTLPcL3 z@)oO;YL;;vJQr&_6Dm)l#xx`u%OqR;L4&txua_&dN7*tT(65a6JQQDS)PLn=rM^{k zS1pqMZI<{9uD7(48qoipMdJ%itIm?PJoL~Nh08`5YtBqcs5R6TL}{L(>Uivl@x8hy zX69eJ6yoU}z+aBYICSEtp7rQA5<#eXXui_BCWrE48F4qA4mpJ>&*LTAzmX~2uo9{t z#I{D(-bMWfutA3up?y#4=tCeLw>u~J8R$K?AkVGiW4x+HON*VF*^|Zbbepea7aN(t zWalYk>F#<(l=PzV`ai;rqrA>EXz3250Z<<1V9QHUxvKi6a_URGM?x;jRDRna-Ui-0 z`<4e)tR@TgT4g-K~aijcJH>g0(q8spbD5$gl`85k;EaK{`FQ}!%6w6 zAV%7gwPUXvK9X}fA%TUjL>p?6Ly(k zOmLR{ZCSF6BUxJ{GIFqOayUY2I)kM8V(QGe;<~>t@@K*R?4VvforL*68k& z7vVmuav}aWf{Uee903FJ8D5 z-0aqU3Twt8;&_>L)F!b>`1k{!s9<*i%bJ|Mq}l-t4|_f}?HU<}GK%1? z3Gn+Ep>2{XYEp6C#sTZZUZqhk-u?fFU*!vjtVAXkYQlqMv)x?08_-OOrTE~n6KEr< zdZ;fVDc@a{X)j8jDrX%KxwQI4+J>Q_;g)ZR%W0fA``awYb7B=nZhueMpax&Br7jC>Y(!ignst@|FUb`qLCU;tIAn%E z`S(RdwjP=m5kJh~tjHcgfzRc0jDGsU`&r0e$hit+C!v1BUBya?dfuqd`0y`^9UGB> z550XHl`P9-)yE$OhRoj{od0jCD&{{Klx{9u{oW;jDLlfK&gV7t&ll{H$j5%TL(G5vS4S&V7gYe{HM znQ_Ur8Ut5;+(dSM?DxqZSh34`<`TTq(R2h^_?abh#zUcvjM^QhJ15Yj=wgNq9>u^f z-0u{~q7X%Px@45}+zgoWY#fy}<@0X)3Ws)5=LZ$A2ZPiTU z>Su;02M%B|=+Z3{f_-(PaiSYz#ZO?~rZeG+^x?))W4n9E>BfIP3DDIx7J-%YC!$m! zR9BQ_!mB=Jwew=2&%*X_h0*$)Oo-x2RJMd$Hj>yYcH#nT7gCrHwTWU}3o~oL#VkAF z1ZG~O+_FM3OxP*ox>R1>#tZr%({0(zSUE=seZQA2Oj{|qH`>l`ZF!{28xk~xVz}8` zKefXB;FE@T6VAz;}_m5Cz2d0;cCLnoShoQrOgI9UF z_hN0u*NzPePPTq`>v~o5?CXXMjOkqNKSqixlqr|Y1X}JGdeDztpUd}DKOXE3NEGG0 zR~|DELXRVdiyZFz`ta1v=30kfK^(gJ1o&bl<=RpqbQU=>3Ats7#~n6*)~h<~fDff- z?jd=kh%d3?jkJ)xHl3NNz>P)1bpt={@$;_3F9R7G(KflcNzbiuNF-+cv}zwSSUw!K{;J7yF{h1TrH4}}(J0xQvZLRoYVsj>|~$qaAt$i%x( z^DBc~zh^_Q>Ie*c>^SEjn7x?gURD78a;8_BKu^Cjkl&VibpznHpXT+d^i*baP{e0b z>EdQ!_98sdcq{^m3H8z7C(tA6E|{fSnL=Q_RgqB+0(m1}Wazr!=w8bD22~I3#B<7} zVdy{PT%n=#)Z)G>YjV`_``Vz~GG}MmbD}AML;XJLi>5h=5`=URS&ZXg-vSHLRBOE? zHNGOsCgJLw-Iji#%;1_&Jm~$LdV>~RCcT7GiwD5l1+-fS&VUP@)nhnqj@;9tJgP%7 zZDIrcBgo&9zr`Fs#_m_G35?!Qw=$*Gc@ua5}c z8&?5SYmm0hvj5pz1mXzXUZN+P!!PiTE}O{9H-Zb&QsDF6mA6HtFu5JK`XIaKT{5uY zBl*B_Wk`tdcHD7?SMjn2awBo-dPAg{x1)z6Q1AipqNNSfpCgR;6NEJt4k0F3j`0?# zNpny8U%djWhXQ;6uQ-Fc$EXV9RkL$;vz@{WLtHz~vJJ~&UK!6jzgkS9x!D=~(a#GicZl#VY2IODzqdWPUpj6^iSCM04R)#%@cwDd~`^#*Ju;D!5<>wW5-RduK0#E#}YD=3y9=NS;n({V}%RXr$# zmrg|ozbZ3LTzPOkJwc~>)johnWy4U%F2q!8(0*i^zeo7mR-0&M*!D-jYMl@K7(Ywm zw$+u|Jpxw&e2a!YUcxa5-NGK+(@aF*{9RV;O?6vT#tX_P<36A88v1=|%UrD(N~n88 z?Kw#gE4J#vluyDXp~ZE*%#hiKY281-H&^L}E?9rPsshU;N&!OFXXg|lC_lg}{~OFW zuD)zJLbBUNS!P`Qj$ZkgU~`kQOO|CS9aI!2v88N zl#J@Xu;fd?#MizNOeWlDCd;yvGeTw*+TmF;4@MX&gI<-=Zgm3H z^>8sQ);Ge2j@|yoE}df1=c%1t9)?a_N640rvNFr+hpbqy2p{+1uC)(%n&~OXyw(Rz zMEe0kL5DhRlju}r(_MDc9`71oV*Xm~o-qHuQJba{Q)Di-wa50FzK=qd!GGNQn2Tlh zV=Qh%j(sH|gliUkX{cP3nD1a3J}ROBsHqdUchy(Lc-CBCb$1 z{*c!CKLJc3R4Ki(DNj#*MRUQXf_V(h7aO6o`l4f6Uk1>`(CuwPFS#Ohj+!?@h=F`@ z;!_4ionbY&s;%CT=kb{2xr6x7!sq6upTN=-IIT!8vKd9{p`Ae{(x*n{6ZFb|8(7bi zDSt(30;maI%v)QiDNH)$>j@i)DTDE_1Krh~1h;IO+?Z4M$3sr1$u<*0U8K6a-Mx?3 zV)ii@;NLeRF|HVlH>0oqr1NmEm8A}|t~^7zi^cJ@ecu%rtaQU8sVQ|s zRqA|j@_B>S@4a9Kx9lA;K7-Q9e9Z*+O^u?07mwkRb10}y^?6E~ws)s+%rL3hTlbkn z?mKFN2VyOolCVr}$qj=q99n{n5}wAWufK$?HW6-|hMRK_B;Ab+xuLDYp~B6YEv>lw zlKGhfH^*zYcxzl7c671p+{x(1HsWWUGGD5_nO)rf2{26E4`+eJ3@BC7}ahDPIhcC#YY#X zhklwKpT_^FzDkBNtVZ4lWKz*t$VxA~;ahJ*Mi!D1Pb-Q1t2>YwdiibIKEpjc9|Xj% zRQ9wJHwMZV_IlSk82=2S4>Ydtu9~l19Ew@mGmz_0*G}i?ckU&>RUvGL338EWV~8%aniEuEDCoTy>|fdB*PUq^6sbD~Caz z1=Z+{K?6@1D1LIIkO_+n`+&P~qJP-X)QJ&@!zPFR5;$>v;oml{(<4InGEAna$;0TW zS>jsdXQp_WML?g9WfOxVGhWiy45|OYyI0(KO}ozXmqvCefAby7x|87-BV*54WZhpz z!rOY$mB+A4u;!CK;&Za@js&qVT4x^li(eiO*)~BBOou<4iyNpt%XSwwj^_o~DI%?I z){oP_?-9lnjk3G}bhT+hu%FOYuDzI#&$)rA&FCq|rv7EvK|Adpv+B)_)Gsx@IN+?* zzzK(AUQu35=9CV3>Dwu3qiz zAzAb$A0u1Vm{Ko;oL)=+*0##$GsVt?Z+U>{^4*1xl&|g+zgzpN=Kmo+hfc>(W;#2% z*ODc=SJskssk9V0)P`>#4$7TFT<2t%S=+d{WGNWWj=Hie=a()_`Dm zeK1x&z3G*K&xE^v;pfCTpLx=_9I(e&waubPDeN~5oCH3htalpEYk%MuaeEFnhrJN- z_Z3E6K`kc*)vz53({rA35wlOcutqljqpxbmv3Xh}Q=3+-5U5$GW)g+xMFzF)EA4yY zltiVa%~v0i?x&f8&$W>?SWCxv5_O^J@nF#yOR}`iC&K#%DScZMS$Y~Qyrw*QbX@(> zKS~OKuUb1=I&{4avt;iEyem<>j80VsHeQAO!nFmpD5MJCrDvR;Jq(2fTLk>iXwb~* ziF%f4^7q_;Km39~aRVh_ZX>bn3L++**-nocXJC=5QODN?hi#TczUH zJA8CF$4j-x$y6YZTVA2cvBtlT>JAah=dJ7o&PQpLoOzn!6q&;SYrSpI z=^)XVq;6=DpJ+Zk1+dQNZ{pualf>6kB*Zs!hj~>4Mk&s&#<1I6gVqTQnU`m}q)!i> zDW|V629HptPAb-mI@vYe%_xczxw-Jy{!!N6X<~hHPOKlcNK`s1T5Xc`$BZ7di!k)e zZ#=j9G5md4_s3if=zLgWH6_f|*g~DZ1p4uj_`QHI(_8wKlDOJ8qBAt8RoIJjhYZMv zhl*&(C_sWEEd11rRcWg2CNK7`f@AS(TqCf))u;X!7&MRnA>8B3F2gT+Nv_cGSR!`r zU_RzU^u9^rc9GfzKJy9lTS#r}iR5(oV83J8ckqB;WC?Kbi{vN0n7W%mP>$MS#Y@PV zyyKi8w!<>(Z19Q|=((A4bFpeJ3|eGko@T9@+f$Rkbhg5vj_sL*F4|uAKN*al_0#vE zA5470!Y9U=gKl`qNdD+CPo}mm@)Cuo0QP~T;4DfPY#1JM51M=xOn;*=fYZ*wkH%bv zt2XEWlC}B!?B$5dUBYi}Ut^N4q8*Q&o2F~^i<`0+<8#P4Hd-Mtd}1=QFMEbKPJL{N z=<^u`I(a?58aZlbAbp}l(@1;OSCa0k=`P7D)??RarRAPM4=?*ulnPUN##h#i{W6A{ z!UqkSNKgL%_Ua=OR$>87K%tA)!>0T&cw#Tuu?2dUblh6r&8~D9;K+v_C1Dbyz636a zU5l>JI(`;?2$QaU;(|=Pfp^4-GFE#z^p)GnK2oJPns0tk`R`GD@@^E8_{C9XsN|bF zc_`G!-m2!xa}95fD}Rq?;7I)a&uj3`-}M>5F|+K^hmwjZZ7AuhC-+w7G0@^}Yfmd? zzMyobal=v!FmfN(F{2}G{cIb6wrQGMq{OZ2mPF^iBd%yA1yA7pa(2Do?<2bG4vj8b zy5vxA`|lw}Vu|Jnkv|z>lFE+)M^+i&y0%7eN|Laj+x48do7Cr1rqFIDBwmK`8}ltr z7k)LGO1X4-lwxNA+*ea6K0B2o`^|$|#<<=q{{;xlI=5a~TR9|pn;FG@-PWRb1?<+zM790056R_54 zwmwD0a(12nWd6IL?2SI~;4%Zz%U$0-%&i?|SUmWOE;`CVxPIbKd0^*SLM~Hg1$8As z=iBbx8p#1rpcab*_r0Le!i4Q_XJK`dTcxB6o z3tI?xBWN#}go_YYOnmX1-h2hQl}GDwNCUi=6E|BGqe~)M#ueCiMvV`6WHK^pSABT-_uj@+pTi-3U|*$w6M}9f>%?tu3|N+)g@f#8 z*J(eqj|1q|BL>QDw$vw&Q+pPOodXYC1wt!!))Tbu4{>l(xHGxw*Q)3`bilU!Hr-Qggkzk3<&9CRsTn*=Js4&1x%Cbp%&ad{BfB$ znE9D4I`z|5{s1aBA>Jsc+e~zf6O`-oO3oWST2xtw`#?-A?&a&Q6I=s0rB`MAOZa|1 zkX6l0$vG0t&{RVgcNFvY5<Jr8(>_CcVx3( zvGEW5dTI*!+gPsgc7Ih1*c9k1-f@6d^~)$lP!mZunuf5Y?oEm)9Wu3I7xT;j;n@%a zuV+2^7aPQ_<)Z?~<22f<=i&A$5tYKu!Q?s4W=(@OQF7k94n>rFf_X8MBbnZ=U}&Fq zDrD;k@sv4{mF1+#;WC4r&1r_%fHx>I1hJFLHRE(nBH>LTXk!X3K9i5xL3@LvlSy}_ zHfH!w-&SGq^E6{PIz7bSKNRxVg}!J;;zpo^&6GKsd~F!;!ku~h0jVbq_=w(9pd+TW z5sXHHu?3taC@uw|*>4#LM2nYj?cyd;mW>*CP|Ds(=1_`+&{{Dl%Y4?aDGo@Zk6cGslL*OT9S> z>3^kbOiWi&Gk>oXA3X@-_wIyQ2J6ovai7Xv9)**Z_bt%cvt>%cEzG+5qy2lFYpElf ziT%rkDXPu?{{Kv`Y8qH1<3Il<2pAH*wJ}?XMLE>WgpB_p$Nhsh=Kf+>k{IYTuJR`jpK8zkqj~NaMQ%cfj@@$=iparKc)k;~d5e-pa$<#0fwC`x zu3Z`xE2|>py*|7$U9^LT<2G*D7A+O+FcaP-y&U8%v{OgqAK=NKeRPq`GKQ%>78 zkzaJsVu=YhP2_bwzX|g*CI&v>Nz!a^eqbu(6%Q6e;WNJA;4$*jkxByN?c}}{L7K2K zYEFKZatUV0I}*vj&av_TYU?hc1l%k~N9-1M>+{+^0^VB6H*aWbiE!)4MxmKy$NcDC zvR^OH#c5(3@;XMcjOJU05s(F;&P@mu;3f1L{cXwC-{aHw-W#821x}H#4&AAS`Bzbeo+#*r(}Lh4x@De+*B)xH~OZF}uMd zYJ`)f32M57TVBkDoz{yjN4Qx62UiP)FWjZta09+&U35q^S0XYFUm=#@#H*}#Ciuu^U@p4Y72><^h_C6xcJi65rZErn`3(bp`sp#?-<1=q zkmpk+He|P9y2pmPxjPIK6z^qF$AGdW725^lzZcluQ!YIKJf??M{yX-*Z5g>~x)hBk zGNT(PUBRSp*N7uuc<$wQ;j*PV1b`fClnreUz}kDiTpD&@_PeymC8y$G^b%kCNxFs05UvOMIL|@- zm!Xd9nP#P(ejXhJYc~Em)7$@Yh~XEZVh~VfXUmy0Y~hgWCTRW|%2b&G?|cE-y9h^h zXeDvCqx7beR7WjZAFr>1ZEq{$l~-3F+nIg$SOOt;O%z$nH@3zLZ0vhi!gsEO^XCE$ zCb*JJ+pk3?j-cV3^02Y{`aI<+)37kwWnKl_q#KCwapiFatAsV z`~P8tQ=>olk)r3ryy}>hxv^X3p;eeEE`^T~YeYq7tnGMbIN5$X$A}(uWh$+FdV@zJ zF-%C0djNJ^-agbvZxCoJxIT6x_iy6myoblowWr{X1e-jwLmyIs&2i}1G=qP{CM!ry z)CDAK{Ssp&-KXRudwRVouIv7dAh#>Sx6y0Yva3JY_k5Rk(Cn%RA6H>!$?LIGrIpV! z@w`&joS!#X0{)H_%8{Hra_PJCyWU zeYK%A<2Z1VCqC{M@r5LB7{&XYl*LLWgubb@Y$9E^~$s!xySc z39o;!*7Kl_Ipi%q1~^7RzI94{(pG-OO*WHKdD!S8E8Y-!ewk1`8QT(E@tQIe#^$h* zRL_(@-17Ciucu2cSX=0@TyB}M5wpR7FIuSLVSPHx_^z^0rg9|zTY#RLf|%5_Qtn#^ zn2A33ep@1|7S&Ta-A7sL4vBU|GQ>NSdb|!NOf_~Qa2(C))2mrBU7M)0pN}7}+=9gqxp7+I_eI1Ti*T33>t`%`Asj2zSSlEr3s)2h zzV$Jm$Uz?!^DiivywfeX>kg(N7~27D6ZFkK!wC+uWoPiXH#ol>m>~GscG*tQJsm}F z@!{k*0RkAHJ256bxq24ImGFgh?E;Q-`%y%~U-c^(4T|VVl-+`I+$($>7p{An2N?UQ zmaGLn^p0H>sjo}^h>1WUN}SNmdV)u z5n~S$E1D!yf>Vy8b7Pf-(DJu9o8pn` z520-*%cDq?)}t6Xk=$H$pRqHshjF%k68a8P_>2SGXN;I(L*39+yz-^_fj=3Ydm)~` z_n_r*SG|v4WN5oV^5_hBA`Aa>;n0t+tMj+ite`;hTuS*{>pqQDT2rqD{|}N+;Lwz1 z_z6MtU>eTyHk(v_C{1}qQD_~KV?;cKCh z56&G#RR#{?e^Wb5*?a;caZ|3F`2D7J(&xBVsyI@-F_V11iRx7$DwN;?O5n949tXwz ztZm{jh=8B(ouZcy^YAB-?agcEk~|<%hm!+?=oP|-J>b?0k(|4{x)#x z<~Hl=jtYH*A1{h5A8*Aj97fLV)tq~1DD4H^tT}Zp&RDT^pPTF*`_LD*Fi)ub@eXfG zA;HR7dlVBmn0IK1SJSUImV<&&d?L=OvfED!${b(?%^Bd;Zhb#342n1*VQ2@a32B3r zo?-G*Dw+a3r%;TRiBBtIk0Sd{@Phn*a)SN`xy?Z4C1ng!8v#N$vJaoSacJI`4f4kylSXe4q>$^Qc^M_XI9|811suLtnxps~5km%P5q zNBR5h{JyI7O{KmXry-ur9jv6D+HZoA@t~~{ldP=^Wngc~3vVhDjW4?!B08TdWO$ON z?#jIp3Uj{Bd6)L?Y`j?40j%hR=GB_ zFOf zvY&-@)lW7<6_15Z&K=K>{mu$R=rvVFe((TT+qI8Z+ok>C-}F}+s_=ogFoe($@-#1M!z+OC^Z2h|u*%EuNmTH*` zYpRjIw^%?p^9JDhc@!O~P{{O;mU3sYD9K505;0E!cmXHn$4##-0lMnl~m2iYVoLWN1?&O zQ+o1uVs15M3zcn*4E7>Zob{ZJ)5FYmFVf?-u|m6oM@_8g&CGhm?mj^+pk{P1hwa*@ zQ#Vl-a~b4D!>*lN%#Pa=42ov&huWEm3G$Zy2A!@P2u=eT%f&8MIeeaK|1dNAxTT5e z#9hkGxzy^Ako>~V!E?(nll^(J)If*m9|FlMiuAl`FohOrg8Klq53F*QHrh9#)at~< zQE*j}jGG8laAVv!7vqj4(_OijIZDLClRNUG+O&bkr@-iwE!0YGXtZt z`BywqldJmBpEIj>LpOeKrB8gapOHGkWg`pdYbt3A*0w4J#@(r=!;LLwC?nge@~!Zv>ka&Yq^E)o+_CK^=Q#NFQg|SFOopR)43Q zq$)R{*BI4XI0N=oCQmR@G@JbWdkA!kIN9{#C1Ais_%hx|$b-Ma#2Jk99l@#G1ZU0_Jj{*|&4tV#BNXl}B1KU_$q4FWoB>ZDa>KOhc<~udtUscl7*9cSXzBj7 z3YO17fY@O@l&{{RiDsb_i$WGA63UvFX5(brnFi^`s`{=@ApQf9>X#tA z^mip-%+))bO;|fiI^Ik_vzVv0b(=<;WlgR!c=jp3El*QJiNDC$878Uof}eB2wkJhs z&>@Gl>C$N06bk=4wAO)eBoe3&vBB3IIY$n58;14txJ2zUSXfDn$CU)aX4h}~|J1Y* zXz?mv;U8;Nay_2JIVzD?O%5xwKPIHTr#&G3?T`7|i1#Ne=dfwgQj9eDo4)ZGt2z=q zZ4xF4?Gi*eRL!PvVz#`G>DKi_*cX(duN=>S6q7euyV(Eq2D*9f04FR=Q2;So1^XoSS;}TY=PBj5x=HNBM;8xlgmZ%DHGL z%hVN~?@OJK<}C(U1``( zqQ$Rfc*N%FkO_vdbs=t>Q#4^&A}Zwajzi~g>)3QOJB1KqCS}MLne*8f;bOEsn!Q?=O_YAJ~-D&^$ zdLNiEpl9ii*=}mjq4d0S!%rG`y}?Rf3M7?g8Am9tDMKMpKxkP(*& z$2I83b9!+05@B(O=p(o7RdOojZRm)#%|$$!_$&v7@XKq6l^kW59zKqK0WxaMd-i37 z;e^w!LS|~A83X3Hu%x6jmX^mrNV#BX_y}X>d1`w=B5kd4DpJ%Q^2jheST;tD*~xwM zQe|YIw5(pq2;4g$s1ZUw)}}xB?nDm<{0)IgA|N&(^sKq)B7sqqcWk-Wq-ADX8a1V9 z;(VlKp&9aTYqVnX^9vXQOvjp0#!U9GJy>;$*1ZAUh3qiQc*&Q{aBbpf2jZp1;DL2| zhqp}St%SmRUi^JV!*l72)af7hfU(^4VNJkU-d45hK)d8Y!vr zEOWpuz@Gfv&!j4YJXJnj_DPqLU$R1fECIauT^Bk)a8Km4VD+wx`p{+zTKKkmblVcj zkM%2wLxw-^lyGFX(cwR^OOE{W2r}q9o^LZuVO-ODXvUbWiSSiDylP00{ga-3$;Mh* zJ}DbBG@jicTy~rE_TfWXEKE~oDay8M_P?DqyJU^vOjFb&)O97=%Ob!YSlnKC=_cG*AD9yFUn|+a7D7+K9sz0VjUj$C~O^4$~r7c=ITa z|Ij)(YQ(mywt;$JyBnxSIJ|DJA8Brwt}! zq05EMtIE+`W@Tz^u-S z-NclJrVV^^_iIqln9=;-6Nm54*L*e61X#KXeM7CP@PZ)6nsS3*jf!PIc*OrxxIsTT z^-wg{Jf!ZP3OZd<%$L(**l|l)z2`3@LF-rq75>tgIN$FSUm-wS8PbxOT_UVb=bot1Rcd+^qJW8BCIl6Hu5Hpf^3}7 zR$rC3&n+@Z!Q zN$2_nEWxoM7sY^4RZar3`xp?^iZ*^lMyQ$ld|gwbh`pI>A2K)_Ncs7 z8C>J~EN4&3gE!7dn#!$u${F}_-Cl6ac6yji8*f;fbHfas79hhx;j)4iHJXJgjw;bb4l3`0a<}6@O9J zUQqlfD_A=pxL`U=4z@IobyL&3(2wNh9RS2aEX|qM+R}!2G>ou`0cY{W^}cUIE@16;vhA>OZl2TnYT@fOQW( zP1%yCF`EZ(SlYw?YA+gjM1Pc}iS&?^PpX~_-Mq={AuY}1gy#Wek6}=+oMs@|_=+n% ztuQJ%gCvX&c}j`tlb6ZiG~&^`C$stwkIoR+ddY&au%AA;p^r?OzWl3vLB{tnZmu%P z{4uq$p%PD_Hsvax=yiqvL3}-6^1D)izF3QHrujt}_ zVbloubsCr&sh#wl-=KJ7$r6t=U@sOIMV!|H4AFAx;&!=2ivgm^p4Lu#ycIuq(BD4Z zK2p-pq4nZgd1MQ%)E&M2^G$;uuOnNH0c;v_$9}O6$-3hk!r4qNbg6yXNa3Vv9yypx z6B7`L4q7V-Wh`hK<|O?+-ER&OOPl+|a6dXbAk@kc4&W1JSzsO(b_q zhh}Ges2d?PWhuW%#UH@Q$HWQbgIko*b44>oxxv4=j6(uk4#Yl^|8&YO(F&?CMN#Y+ zl-k~aMN;j3xnR;SZpRRrpam8hc+kG4$&XVn=K~U3$s?ddgCwxOdT4>v5RC9gS?yBV zP#?ZPrDNPPwd!pgk9XKf6Te8|lwq#Hyy2r$RWBXBP;J^-%5bWu0d-jm5sy3bQ?GfZ zFzDs3!>8KdM$h!hT4)bpkbe!v<#Xn(gsJFBQUo!dAin6YlB`WpX@2od`4!h{88h9p zRz^v8Y5SKSqzg3$YWtx{OR-j}#YhoLMAWk%f5pipn_y*iGO{rTjs&yv%gZo}-+Hot zjl+gU(qva`!%t$n^9r&cTGCuReW^w_M;&r1qM#4tM#ID?PtA@zWXn=@ zAqD6o6h~PmrfG!2>er9?cm%trNg|3jxQreUu>3}G|M(VF4$ z(PcD_rhbL!9r+YB1s@2QhK?)$7@7Jj3#5 zqwkYr{0v_0hkogU#4>7{=|75;B8tAz+E}${k#O&WhtNWzzo+aJIECmw2d?6u3H8!e#3f^=B{P=f?$H^%4b?^UWY#oM>VkeoNkFTm7_^ zoWb=SKAzLlqeHonA5pQ0Exs%gN=-%X5_&uh_4Xkm}DOy9rm|W&*Q+OW8%@nFwt#B zxF*c197^A-5$5|#;M_$KEKM)_l*7CY4zEm2$#@R)B3g#I49V|U-W@jxM;H8^ z=`0mM!SyswR(Kr3(s?069C>pXYBRjrgcg1@zc^WOYYiGmaAux?`?hVYQL{b7PRM|b zs~==mvMk7SS~wbflBkcLqGo$J6)$$w2D800i=q?cNJf zZQf+1NRw_4kMHPok>cRub*i72<;-bX%(UmMg?1m2!is+fbLa$Ew@~ePpL)&Wz(M$* zG&DMikmFu)7$zOeQ{D$Gq$AE5-`I`zVx&&@vlPhCHrt~&P=bJ_eRvN&ITpdP$$Mo9 zpI)y^2G=_Qg#n;Sp&mGNr1SZEdm{7L#SP00p9y4T!bko>izq#J}=o>B)1c&IKPQ*6R&kJ$IwW9_Ln!gO544^}n_OHGc}Ii1MUR#-651YvluFs$l!1`Q}~=;Vs#(bfH0|*z_VQ@>0*uw2~P|IwxEERu(Yu17}p6x&`t&S-0(E%}Xtb?_JSnnT7l zS)=w6nziKwxY|JK;T7^GOf`*C<&jAKyvA8_n_*ifpIRf#^btOH2CJjMQg6*o zo5il7SA{$I=q4fzy2I?XEA8rI?4U;RW&*yz3|GfvvM><@b}&-&JsOjdtHl49|3t)> zD0em`)EqBwU_x}an4wwWO{sIH&jrX2F?@U@eJ?PV{ zYGOzkGupX$?&qOP?}dGo1AAfr4djn@H7*wa9j2XJEtn$l%n_ zNBr=aGL`V0Cw~puQa$>g!-=bUo-VYaR=LE0g*PbzKH5*{lRYZTQ}I9ztjTL)xpfgz z+|!nqubaoL@y6a*66(>ZZpx-WACtbeF=)-lrvVfkg91=9m!1r;C|IIuM{lygtiSlV{;1n|Plp#v>dZmFLE8d{BTP}49fpUZo z?Q5OP>f}TVJKZ4tj;B++7cy!4CjGIEj;=g?p>tODI4grCF|>Q;kYAl&He!FcLA>lZ z_J@JO&}2U7&pbA7qtHD|M_wOHx}GlV=Brk+zWyT%rXHUzJ2!cotdA+uK`-Tee}uMN zrb|jd+IICu6yfzx^R&_AB32FxS_?PHcx{lFc8j|B0`|i{m2`vh?`DI$;M&jR>tvx3 zbKNCHkiFr288Pz6P~K&6#L@heCk*LM>3b0=gkdCplMP%8plh}X07^zMs zca>t-LL7lM7?>y)kq{HA>tp%K4+1d%4|MF@#z6&ys^_8N;^NlA^-K3gHa_lMg~pbY-Lgq{@Rd+o!T zKJ_*<{2xcv6`}`>DzPJ?2~2u@=BS^XlZ_9Vj0lp3S|{p5sh+eV2tK>`)E&LVddjM<< zR6iZJh$10j|K(>>k(YDoQb~R5$NRqpNuBI{n4F4kif12SJ#rA3W({2{H@IA;*wHWW zqm}dfp%1>Y?=uq%j(wWc{y!LMnhDK<3V@~m_~;7#1K?FgIRwNaDU8?g z_bB&9e34nq2gUx0wbEqDlfw$D&1m#&DMR>(iNEp@ov?`w552>UJ?wR-oxdl9rV@iG z_|`+j$6^~E&D89()%b{&Jj^Ir^EO45-%OuG=jjx?YoHJ7v7kA`Vh*>PCdl53| zjLbi+VExGfrW~ZP2h-Ejk^P;2#^*5CT$F!g(IDBc>_UTZG=!*O$gk0-l30VNguyph?X#wxvR~WrlE`lb~KlYh8!F zO5jY%l#){@g-`ROuuN{7F`4eA_ELfK0qTuz3vCQE5w8zb>W^v_7q^iP>_gp|xx(h< z=!B(s>0}SAy97O1gAyB)V6t24@LxANeK);Fnv>OENJ(ZHTzYjDgLjkSVkmu0njBqd zTS1B5JbDnwBs(|tqve^}9hb1By3Y;o5rqjV1zX9!A*-Dorp4jU0>mrJjA||!^~8yx zA3;*{PyW)YkNokXU4-eQc0c2h;zw>SA#qlpmL1-|M_9tFg{&;OKV+-y{C0AzW_6KUab#R;f4S?YOV7F} zTs;-Nuo%yDR{0JA?LD;0J58+VorZp)(Ca6(`Znvpvz)n151h9`GouRID(F?x*u#nG zwD2ROdMj$MZwu+j!(>v{T_F#;95EnJR8$#)60O{*Jvu3uYeU>urNZA+9IJ|unh6AD z#w)J999^}~plx{)>HRIbM1%`HkeE1f?%H?WNSyg8S=$f`iWArOv%jN#`M>gBoki< zeP70?u?Lv-(9fWzzp?I}#JojPATuk`P3O;hD9jyZ-?XFF-K5w4vd&PNX&$DbfRE_3 zacrrO;|eB^>2aR}zyfK=b6QQOnsjr$dGHp4xpd8{i10#OP-Q$e%B^E@5ARb8X{-0k zw)hZ!Qe2Olk-UDw8<{4xQ-Em7tCP@7xNrwAXS;dtYG(rHOuBX2C>VjhisZC?y3n1W z+LDY^_?y{8vKqr%a5 zLPZUFhz>7{L%99q(&u;*d6fl1`+*H5hF0{D&To@=Zyn?=bI#zhMdA&H7dL(5G zsvC!5mU@SL{TsjWjVSzn;2{~Dm2Er@7Ei014G+J~ju7Zdb+ z_gU~w9Xa(6ywS?_iSQy(Z7@>Cn0G87UlkndHm~-kTWJ+7UZKJFDYy1m*qJI9)s~|} zVgiIrG$Ypx`5?j;{`o2n`ysb1K znu9wp=#`09v7bXY9SLI6lQP+xIq09C_O*4izb0gF`;-@6NiyApU-+v?GYi{p^a@+k z*{)tI*0eae#>=jo%REx@yCkD|c{f&Y#aX^`+Jkbn%ULhv4|p7F{6di# zv8^=Jt67N2WmY`8<)r#cu|a}4!N144-I^9l%ZYHvJ3V&_lfUI-LSKleEaYo;?K0%M zB2AqC$LL)cg~wq8&?NHY{QFFT+M-O9`wb+pH)(rb=7q1M+2G3EWXHvJrsN_O*{*Fn zu@Hk{xs3Q2jUpNYj#Yd`1`eAmj3>3pL_fwA_o+nqiTuvpAQH!#C^xqq0&Yea)_(4E z*Ism7C!*5lp4aOe*XD2D3#6E4=UG(CDYLDruh3Rw$bK8pRV$pAP*dY)St}bVn2|HK zz4PJERHZAav=Wb;=JC->Zf(F92x%fqp19n|&Q6&_S*rqz6Y{4{Q9lkJR$HJU^vi99 zK%gtQfgAq90#BbK3f*Cn<7Sa`z;;vd<6yZ?a7^ZxJWvrx=D+7s_;Ge>aC!Oyg9d;yiQveg}mae%2x0~iOaN({R!lCt$*W)Kij%1w4niTS%Ss{ICbzftx{s9Ht6@E2t{eS@`QO%Kv* zprAY?W^Q4><7t|!6Vc%jc9&wxMyT(Sao5MxY<<6D!1x%YwJM!7v`BU{Rv?>46P7w9 zbs1NjCKd;-lK;%wY7v|F+&T8B56>@z_4*K$-pIwzyMr0OfRYUO#4=^$DDr|^J9LL0 z388+!>|a|JZgX?3685PY8gvTgbWH}>G(~iFr9AE`@W_SFsyG9@Kl6aJ!(TO&7y6jC zL>ht4IM$*OZp+hT7_9Dt0}tqxRtt*4c{Yhts$&x%@&8nc9n@ z`*{)CoW~^Vr__U~s$ryR1K|e>6zbLNz;GG+MxJ5CA~@P0$HH9IPfxQ%xOV_5aQ-;? zvU-aLY&%gqX9I4>t?Ek3KVM5Kjtm`K10UEXPZ0`z=b$@vy5=mFUKU#7QHO3lz(PB- zXiYvVX{x;FGW0u@x65X}lEs<=S)!%p)r-aX7i|(Ko-V1BgQ0oqW(wTxeo)pXp5`s|!@FF*0B)q3r?|w#qJg0aM%F<&IJ6zC&deuscEFS&6P;VBKWb zUgSuALx)~{B?Wb21X6k+X~U=W;_Cw+*W(@^*EiKWD0lF)E`!{EfhQEj2jw<{U=tnF zw692WnP?7yXNKTpAiy4R`_Z6Wkk!OzRRvI9PShABghN(7)zmk}1!=S|zjkNW3XP&p^x*e85zg0eCDbT0CG%@WBXjnjP zL6R7lQaLvM!!vs$+4Ts_*^NlHwd8wyAz3R)iy-%Gsrlus@xBM1EOf?3RGdtDyjymh zQTxC+vrF&ktTD5~948}J(nGMu()!%dhgzd-OU*LPcnSY%5nh%m?jjZRXK8On)24|& z^2#;_$Tru@T8Al9+lk-)@23K-?Jea$XW+@{gynul^?7i`X3oWH!Y>u2yt+h^-*a-@ zTu!emvU8%QH?WH|3%|Sw&y6(KcsNxX-EX45d(M0}K}}jq_x1_N0^#N|z2OF0R4_Qw zg1Miv6#D+FcNn2AKG0A4QM!^^AgG=U47dlR$^(C(H3Ose0m-@%gR{gf`Nv%9)HvaW zM~sM;!`KCMl_aAj^!vmD2x_* zg<9#0=s)DE=Y?q}WUAi4wmG74y>*!vy!CHUC^sX0daVbody-~A5GI=5!kP4wXNe81 zmG4~ctQlA#+REju5#`Hh+xRaLq&GSLnu*Z&H99;B9_dR#raAJz95x7c*V*5^Rb*6S zen^U_9nU+Gbz-o%Z;X!i43d zmwjEUec?@5fa=JcU{Tq4VcQHsitKKZrUHE$4bDEtep^cUGG?|<4N_*({`Vc_-iBoe6nuR*0vMA}M;(0xItpk}vhQvS86;w2AeYdU4y$CuzVD2c>gygOvB zi_!=O_hB0iyBKcmUFAK@h1jTuhx15R!5A3(@fg>fg=poS5(G52%bEs zSEd`pb`iuT1^Sal(C>)h52O zMzF4cZe`A5DWhbpA|D?(^&x*F*UyeW*J17IFiE?22$TSCoL+mVb=ZEvMK3-r3|p$$ zZ*+GZ(QLLN4#)lagtheT?}Zy!ubTDt&l>*dxpt=ww>W%~U-rr7`MR!F^UidVIR_q*FXev_1Etl5c_H6Bpm$Yj(iLu(UHI~yKp+Y|V(O2X z8D_VX8D%^QbZR5`jnB(I%20LO%#Dtk$O@$?>!vW5PL5bB|u9w5~m9QtLlEVpa)2;0EeUNmV0) zs$$06*?9>vO7S9%Z7^zLqh53H*fw9VM+}Oa_gV++Y^I&hr^rrs-`+BM0JxTAx^IE{ zj6tGRfS@s!w!tEb?RZ`|YM*__DX7kbGKs|BMs8oDDFSw<-Pg0UTa1s53e{8xFKqzQ z>0oy+BMGMS3F+3a23tc z3mrH2h)_nl2H5FC8SAy%iCM!2_M9*@EYPv0gmlluvC5l%bFy_CKwf(dnh1-8oSo}M zLEoCWn)E5eTZ`h@7N-q&2YYu1G^WbqkQ zr6Bo^k_M+nd#Q)qWM;L=fOWtYcHoBcBkX+z@D_q7>iakPX#RGt-<1)d&R+|8^(h7= z@(AdMXG-A|i*4qQmA&jio4X&ias{!ve1|WH@41{D4*MY1ow&@AP;$dJOH^o5$fLtK zc{h0QkyvSntmYp}nEk#1Q-syF2dM9yPgCA^miX-Gwy)9xkvd^y9Q2|u9-d>Kq2*|A za&vJqOLHoeD68D0+xrbS-eb&liNG`1H|;Gl>>a8nP;B=#(jU)`(712Mem}Di&o;~8 zn{a>aG(z!)OA+|(Zv5kbuz6zM719%IjQEF7qDkh{dlpA)=z(349->ZzmPYKab>|77 zw(#^q9cg0$aSc&t;a|$pZ=RN$c(Qr!d5X~7*CX(nb`AnlBjVks7K5fxzPRAV6^B@&_c$|tbTz@ zl{fp{L1wyjZ2|d|yT;4`Ew|+BEi!)D`mJGFMUf_(QJ#E2p4kxHKx%iiD9_r7Gb^@*W9^*#u#5{BLn zfIpPfJ{dLH)DC}m+XFW_Cp+iS&S$TWGva6?KH1}GqYqM*`|E|@hyU1Q!+dGV;-$(x zoxK0=I5tj2Cq57$S9EC5-XBdG@;!nVFA3uLGJ$f?!BBNPXG;p_LkdAykb^-v5s=n0&a zL$wS4%?r52Sw~pbb0U;#bI}Ont7iPOnC!n==zFUH8S1?ZxF?BnsV{;EA=A_NaPVL! z#0)rsw7#J{E<@(0b&IL~;lkCzEQUPta4OWgQ%8NgF66)gFPOIb7}cZ}EBq8CO*ZKF zaNUZ0ixG{p&pwf@OBz%B*F@c=a1WO57R!?pY2mjxOYME&H~B4^X;!tZR4eKi7YBE>lix6NHa9VRuR8 zqlyeeY;rIZF|GdKPr=;= z{!W9K_;Ee==hW&GI&QB`&ud4VWOjG5-slAYCVn!EnoT~~Hb%=l?qGX6Px*{#RfT$` zB*7W0`NGGP^+vK=b2Zt*udM_D#hQpQEm@8Ke0>!xLT zn8}hYTuiEOvw7Lu4j11c?fxsOlHQvx2?VbG*`zKk3;D=t+d*@&F$5kmP&c+;56dip z1WK%_m%kcSTtpafpQAS6jWU$QpJe!SQ1^uNs&d5MXQG~KT#XYQk_o!Txk=Uac}2>& z0FQ~GL4=F+u2Ky+OOJ~SRunK=@gmmtNn6873gbqBQV08xyYvJx?!tJ-Y}ra6}a zmxqiF+~*sCUn~_G3whqQI})IgCdQblUd<$msg~r z7;G?uw7EgjOT4-a=-C{kG+lN3u%5>^GMJmd7r@6Ym$E=dz%LYB_{%j3O`AWmCtQ#QMzx}pvHu*YJ^?-++{!cbE&nxuc zF5;5Q#8#OshP{xBXNIXB+Z}A_8lO)DKAPTxP(=?YHS0~<%7;0Dw~eA)$7xUeyuC24 z5%3indZGSp<8)nL_<&mT5A*B?_{gwcSssIz*=tn=_AGSGTDX&P^F1r$H?3MdfnK-f z=lJLO#8T^K#zATunN0KO;nPJIAf8b{(V#EZcnDbd(l^AaPkW-4=kR5}(bq6h6!P3K zAP}uMCWBgoP%{Ix7BpKKq34M=4G<U^;KWf(h9+@T06Blr_dq%&jUCElv}phtGFM8w{7Aq`nbhw6kK*x&$ARapM(7@RIAJ)k3~Ksp_v1W}n#=7#1RKg=@hj=+SsE72FN;+gi^Sx-GNj;X|e zmu+w6cLAO^SIQ$t`e=gLQ+(l#~bpIAvx2MAV0zG7NgA9~RSU=v%Y80x8W_E@PW zy0r$sOp*w)xn9rnB%DGUb4vOIfy&q5Cg-z-mf#6(`D87W2N^AAEnXs@Do1;PFz{adSNbgPcZnL|0aGrk;@r+LT)}Lz)oIO1qq^M zTYQD9bWjgsLQ@jVl_fT)aEfN5pPmmT`)bqw^}z<$-G;vZ4VJD!OQ))49I?Un{;t$J zKt%{-q&{TLv*iEniEF%F$Hxobona4*<@JOMM7=K3(g#1*=UEO5U9v$4CW_V}ze)@5l#xM^YdP|-^ADX;|GWigV zO%OFJH(3T?iq&~Y^DZHKx)2{o6FFLCU~g0Lqr|)2$0$Q(?^wNpTyb?2ywS)FC}RdT zkaDDUnw4nsdp@yX&op<~NUnB-JRTs5f6(ZKDUyi>R>88W+j&GeI{OYg+m#Wn7vS|C zk_FVrP;|hmjU%4*x0{k-7E>=TY$aawzv;tgAML-s%g! zFBpA7n)DS(Pix>O2Wo80&DYU-0?ca4X%PTH=&x&HO^#JxxTseeg^NbGj6V%{sg2T0 z?&r+6jfiR`zvxrSOeAmbkldH(98y75gHSh4^@wt4KFGtqnCCncI7%KmfZBKSv??fo zXgE&QtoVon1OzDZTb_pH(qxwsUXVD(?Y9T>nd^+k6d5xdI)Coz9N+JPMSilctrUK- ztGhldNPJ>1*%MIhOMhoYo7qxqv~a%se$KHzVbm^**eLne01-uT?J<&4DQuo5TpK5K z0>9Cmwkn0|rxDYSm?N4cAh9xXmoN_j>6NaIVA3sPliGKb_e|#5)50q!H9(T+Cdu~G z9ojk<5XyqnQ9f|M0OkAO2Gif$X40Li>XK=v z9f=OlQj*AOc&KnMkZuPhnHj5`Xpm?1`9It*;a=GM{BiE2OKQbo*7oCui;Y5-=EI9P zj!CxdqYg`~iw z?LO)1oN`%es1{81Oh!J(OOb=k4!`8av??38%U(2-a{Zfl?Ic=LEh(GC=yeIp4zgaj zyYcmOy}FdTicWCe^PYeFOeAwEt? z_Xh-E+H?2zA6~nNuY86`v8%jO5IiD3&?|dnsamB+i?8XG49>#9kl=o<$9>9~I=%0m zzHQ}y?7v^p;}f9tK;!C_pzUMm3+3x5GdTEzuU0q7S<_3E{_XE8O){Bz;vT(XbBa8Q z`FE4DoybYd3X`V)VWqVpkwu9hp#_SWNq>iMc6%BUbq@0bC`!Ist5fXZ(WXX}V|}Zf zCA5NHF6BJ&mZ|0ZMW7Zdoam*co4Ot+lG=SPNq5U_Yp+?=T&o0P6J)*Alm*H>WL^fm zqn9uayx`$B7~L~gogy?=0GzU$xT$_Lq(g`7xn{z(UC$=+WC@I@&tC`uD1 znzyMGEvB%ECy`eu2434xviyYK#)Yk6|u+Y1f}9AMO^^_!{i?ah9GW zWe(*@R+De-F|w<~pZD?iG6r3;aZ;O9Oi9M_@cUC;*XhTBw^#3TR^&A{kp_HS>*2{# zO$%ERHpbMpZ_#Y`lXP2FA7i~9_hC}&ZE7`ba(bqDEKGg1j$ z>-a>p>bOaI%zW> z8%;9?E;{h39v-$K>6VV!=A@2(N-|F(d_aHvSz}D-W-EU1&Ae1f=&17_lQKe`?BH;v zilq!RJrJoEa{Ned8yN5Y0g7`qM?JN4ezh7*8$(7f<_Sm4s%>j5fRg*fhPR;sHCd&$ zoh~k!E@fJz}y5 zG<%&xHq+t@+VYf-tZE(<8MVJz2^H@ozt{>5Mhn;Jnag$L)k*()@w+#K8{B8DYZ?bX zFVgffd|hpLJZy`Z+GU!2by!&VbF1L()VT+Wh?UB;Fpb&`+x>FAhQ-K!y%*?kpx9E# zF>=PEkLZ9&rrfz&I9zCSxy{7S>LKm$jg|TbC7P( z9-SYr7upU8l#S+av4?omFa3{rEo@w^2F|{OPw$s+sXHH`q;Xw$!yKU79W_IDy%HXo zLyI~}4*cb*S%I6_=|ch?@EUp=x}D5DA&Y(U^I)g7bd|H~rgR|nD@@R(`Y*-jBB>|T zwgF+l)=R;+j1Zf$U|)Zkh=st+5-*`+&`;6(GK80z_f@zFc^OiepsOM}vwH>ePkN zGT%A@-26voo24o8u3ZOhtkJ;QF428)i-&vatD ziq&6{&B(^aE#i>@o@E}oe?jNGIXs6|hm3-6QO>yN5SL{-;cGRz+MokWKx*8}_}!iX z+Y|>oL)?VQA5rj;sXdd*Rne~6quqM+o;51xKHCgl@Q|f#l9yPZ=Zet%TUltNfA)(B zn!ujKRni#92u-KQ5{@(5&Gcf6uB^<9MzOqNTgvC^06wnR@zOXd)!ULd}|DZ1> z;d0VGhR!$Sbr}CWxpA0V6A9V=Zp6%uV9QY4v>n2^8 zSirg~U%E%u<#2s6X;}jRJyTDj*HuDM2Yf=EEwLl3!Zdv2YHS>`D}mfcxKsY+k5GGP zDLrto(_z?sL9YDGH?;evRPP<~+6Irb^X(!DR3q^0E529c&AA$fRmx1GuC^$Rnt+{8 zl2lHr-b`YbD9%yEozyrZ(pQq~!yevEmMzge&H}#qDc=i+Y<%VEcLdUU@OqGNBh|Nt zMM)iKz;9AbXLewJmPVKDC+ujK4N6L2a4Bk*gqC2G$3InrmaZpdd!o19_pbR(UAIK> znum8k)jLF6*sSGW_lBESi$=kYnUsy;YTjrFU;@>bMEQ+A}DjfS=@^VPv_X38-7Zj&9O|=Ael#n$C~J?TonW{x5}6D)7G)Q=so^va&`6} zE_;!3kGj+!tXf32I|ICKq`b-i|265Dw-U)f^}-L##X@BM+$5snmU1kCx&f#nl)xPWzGbDQEYlWb5GKAs0?bcs({utW z=8@9Q=luC&kmg*iq}r0m6~D*0w$o|d{!upi!V6wRDuqTp|BTq#gL;Q0Z*L*5{t336RsFjnOc&{;+t|Y(D&cvnEb*#A$EXik_@1DhF4YsV$`&Yh^Ztm4Y_9s;2c8}~HDd}o!kXA%NFF#w+A$A> z3}f);eq!M$T<}`Bz^pR^bbCq8I%laPYqqIJf#Rk~N==$+3=4X77wHR-|L@)1Q`>aA z`#oIB%MukaOQ0Vfz4KQ1f#TC-rU4enu~8lE=4vlC>G2C{#qc-z@17cOo$-J`1(H-c3SY*#LI0u@11tqKI3x!LofxKprm)B z#rMecBnTKC(fxK5=~< zEBpsQH`iUV5j*OK%pMn#X1PB4LO04J-oleZaN=3CdrmJGqfju^Z|^!`Wun;|blCU1nRC;tMZHG6(LwOWo?I zoaGaO{9S!=BhTSigPuN?6QFbtc&_N#w+B{RLu)Zt1(0W ziTRrXy&4}=%BGWBmT1$tQG(tz_U5|X!M*dSH7)U^m-NRC_sLcjqsY|QZ!ZxErOo3>1l8-kcwcjTZ^&;K@HP?< zE%=#TF22&Vx*fhAM{%~VnQ*AI{TTWr5Q%1)}E!D}Lo*{QRMdu56 zCuZm^@kwJC?i!32-D;pRqYk*~o7ORh-o0aA>3>)VE0~ z(_vT!H1iSg`hUz+M!*ST+1(4f1@O;)Qu)Hxwo03YLucg2-a19UYZZhy!fr~??3eam z&t|C~lwf|)s5a`GlWySLs%vk&!xt>@tlc+41aV!N!J8YX{Q=%Y(voVVo7+U)+UX-~t&wRmA-vGtTqjzXfgrf$!J@ z2|k{l>i+_pkLkr(q=0A2XTS8|Itpl&K)Pkqw<>&%qRhLw*Y5z+ZU(Z;JnvZPLuPd~ zi2h-}w_ankjyo0CBgl zZVv;-r?f8CmIeH?vNpVM1EDIYq-OZ|mkZV8s~PAoJPNS6cOQ6gIVh}%xIyX2_Vz-Dh2FwJBa<%nV%2fT^nR{rseH)U zK4k)Vj4Rt&p~1968>N52>+9f|)u{c^KK#xJZB2Y;LaJl96O>>$I(MG95%w@i#4^ol z-a=Otd(vV=%AzB*cT3^0=-6zKgZ06) zM$xm!w5uifgVj?Z1J5b3+Zw0~mf~mc3Eh!17_;zy@xVQE=ZUx~hl+D=b-tvnk}1io)bAsmSJ$>6bdJy8;WtEubp;EsJTUEU{TJv zPkB3dH3G0rrL=qsj!~U^h=X#rnicFq%mIM=PT?iA-8`FcR$j4;AfUK1le2fQP<5?$v@1Px?E-@Prgzp1h{7wJ7*T)-knoBI;omv*Pd|5{mu(<&H z&)oT$oW$6RGMu+52pC}>{Dh_#?iodIv7r-q&1LFURQaHd^wBRwD-5rnLL-J?W)~G?1JJ7*jN4~TqWlO7QpLyZJr5W&Dzd}Y z2opaa`&M82`$ZY2PLHJ|V^=IUh_Uk_(zVoJHFVl*f?ddg*L~BC2zmhjj6hQ2OpVyJ zx|lX|R-_m`Mwq1=4n^0wjLM zMVWC+0z8>6p_Zj@85}h!%P~X8GQCQ))%Tm(m-%I-`>MA%g*6YZ7X3j#y_)h5?Zrjl zu<)y^sLHJK8GOMUpCblJhqmw{S!PK z%3qO#*tRtqjCozR`@wG<*_c>)NRcqt$^~%>Aiet<05apUJpf_!6l>%KV`DggH{~v$3fISDnfx;1Th9iLTH|MgKlR_v z;GnzsC6GR9WnW#3>?t$~K7eeRHz~jRi+rtGhCC z48Xr~3e}%YB4bI(PWn)9iu2Ve(#TF_4Bh>2z1+k%+CE@4@cyJl&9nupu@myc)|G#o z++1~v78p*Rxd=_}Mr(NMRDsm)YszerbBDa~FwO6B2le7PG|?#Ffx_w~$_V_6TX~$F z|BYiQc8Q!_z#o6W;ozS$&2Hupl%WdqysObfOx_{@MHj$5e8LYTcMLzvIi80dC5O3Z zEJf@krtH*@q!cl^I~jHoHTUr{4pP!g$;Sr>V9-;g(lv9(mMNumg`WRkD5Jt9N*y7d zV86Zwt?wJ;z6&3%c6C;vAn9_i&^}mIO=_p+YL0&uTrnVWk)b`)B*cH(9#>`9jhhT% zM_j|q_v`-X#i!@s)8kYjw9aON@B6h!5txoI|7}IyNzQ&Eq0>!lU%<2@O)?3exqki> zcMaf!TD7b0NHoN?Ol2CWvd+qTvWxbPg)nMV;i@tMl)k5#D>8e4S`I3RS?ONSG<$30JY;PGIhcK=QWbF zP0&FU7TFI?DaW<{4WK@Lst11EaAi3*f0re0M4NE|fBB0*VS3v{y99Jumeyrv^1Bzq2SDxOR_Y~!18>!+ zO(TESDXbfbGvDc36hGpIi$z2p9**`ku3*1YVjSScAzMr_4Cly7b1Eu4w|ioK_mnPlaUimD zE4H1!M%KZI8HBC6fmuW|mf(ct{3g%uQFJQu|5t&z$0E0BX{YTZA31s1vjcWn*2y0m z*h?-_po~QvsCp%|bI_9a{=8}wYhptIdo8sMRJ)htj@^nDlBUE_0SB}%z^O`}P- zfjIM+cL;pmk`qvW-4k<+IHi^jJDL9_I4Z}@Z?q0{l_M90maC&2RGg;YKfz$|TQ ztxSeN9kr^1f9K7ky z-}!sUnoW4#V82Nj1fSj#_dbDqjJh9b-!DJJ^Aqvg=o_0Ap@l|~5g5w_dbO5jFke$C zQk|Ka%B-fUm2`#%hROqxTb~8hZ(;YB!Z_0G2D93>W*SC+x)ULtnJYBzfadj-owQM{6IbwFSPeFobA^hD! zFE~*1(WC-YGg3IeldSc7i`3IksJ$(HTiJm(O!6%1NF(QztdFDglni14ltQacqkr#3 zO6nLh|EVX673%}(x38(VHQTs(YGG|ssm{^JJ^}(CPTNkjoL=~-L*QZrQA`E{-P~jicdVEeL0}Cy3FG$;BE3<25D4Q zjgi3;r8dI+#}xzj_37HlGUAxC{B(oSLn4U7qpo@2xjzxJsU)ZQ_Nw_hlqCtXtBEzN zj$!$ZQ@55VzU**>d-v_fVN88@NR$bTxm_k-;ogSAM5BjTQ5YjlMIAsHE z`vNU<;+4~2=(6-x2 zW>`DVfj)E9X0CYHpJbhGhP(F4C${DZ4c}*s3hp3RgU4uBxag6T_1Xp1HfoMow3dj? z8dnQ`GNtED@@}A?jRP()BJ^+MRikR_D2_TOeiD3C4vvH=L-;Ho%Sr!aeVJpM>ZjyZ6QPFo{aJxm~Zi z3DneOKRP;v?C`@b?5+$+dMi{iRfpgLM7@RS2zPD#8^?`+c8L=9K}YKM!&fWBShhv8 zUDx9<(FLO7WPDV0)Z2BNrvfSOist<^gd8qmtF8%ya&Y;2$LJz&v=}_((%kbPw(Ipi zX^fKYBfZ0}wD6@OR#%`8{Y$mOA7vGwUiiVJ#=eod-im!KnwW*Hy@&S4Nu!B_`errt zI@@Mgk3akFCEWXcykn>Iu1We<3f*%X)`a@x;9It-`mI$BbHguE(wzeyDX&>1V0m)Y zN=8|3W@jZsHB2jK1A)1RL9b=dfIy#9PTInUazN+D9DFQO4tiA}2F8+q%=+TPB)j#< z=h3@Jqi{f+dCRcO_{tyPaj^6c5^J^UH&rVAaVfDsym7};H9jj>HEhxMVy5Qeb#Jv_ zuBVd^B)K)$#9@Y~`lh=u%pRTGL3pzusLfqc+)7^5sTqbc*)%9Dd;nUtO8aD0?tw~j z@ORQvy0>A%S3&r5+QJ2TepSEfs8hl@2Lk!fyG2v{Sp7uoTCZ0mW#HgAJ8~?v8@|{Z zXN0^Mxl27W7x6Hp%tsOyzz)7B>$kKAJlhEAJ_Gk~9>q8zcA7&aA#9l9zSeBO=DRzG zhC2QiC#M8uz8CoNi9jAPAW4|)01!qyJNeeHFH*pi^YC%8DSg!3$t|>%=tYKN`Zms5z7uo(Wj? zHyNy>Iyw7KP(F&bZ;vCK5f{#&Ri3#FZDNhq$QJ*vq4hVtPw0sN33HA$)LUVy>oe$^ z=NmRJ*~DgC?1RdI?WScq%-6diu93RH6%U}?STLn)AsbQj8Vx=i_{o5xk5#Y`~$Okm8+>`7*coESY3qSCaZDhGlKskSIr5K@Vc`_Sjx7JMO7a`|`484XCHIXUo6iz{fSoFQ z4BP?2YjTE4o0}Pefv?r1BNLP4bO1eR7DOMtvbZ8q>rLI{=Pbl}gr_Ez`E2>fLITd2 zqh^BQjkFi3;HCimn4VkPNUh#xoQlFt?z+btG*k0LcbNqpUGha*v??5bj);mBS0lhP zmaViIX~N6KsMF~|5_^DDY&m`yOnc{MPl!8{7QX>U`lp~UTYqVqvELlTs#Bc#k*9MO z)U=HwTNkU3PDh?oXmPO4I8@|hVj7`c9j&_*AigwCzjL0pvfWF#C{0x68RD{4LNWLf zPz5BfLxUFYhmy^OCk@NrHvmVtA}6E0JCO2J%1Mtl)wu-TPH*AJ5%s`h<;l=ojREW9 zO3`ikiWWT8rpHQDfISXEe4HwV=)rGI3LNW!RY$RWH)T?1ozi+b11B8-t0OJ)^jTxO zcsm`Yi0N1+5ZLhj`%8aD1*3ym1j5BB69zTg3}TX$6V$qG{oH_lY-VG<`d1%UhjT@@ zs8*&5$358s&E-V3GPO;0Fid3`M7OU|8q5VCUu`49iV%tUuOoJdl$Idv!?}s zl;|PabRV2R9@=Z$SneGKmUVTL@PI=l7__9QF-Es~nl4hL+bxB4J2-^OhhOEX;t*Tc z`}Dr3Fwv;oN~=vZk1oOTuPXw*+tf!pw)Hl+YlUZIs@1DCmCH4Lu-E?eu;@8?u9aTk zV0#A`*g^iVMe};)Ty5kU&7_)$gSULz_QnTmrD`5tQ|l&%jC}9h2VUQGo~cGk9un}_ za51!g7wJoZ9_*+fEo~(CpPgXevN!7yM$dmQ=v>Yl7k&onPO}T1)P`~)Z3^wd#OS9R*1qPSG8WtJwAu`@z;x5f1 zZce@)kq^#xHWyYo=H_ZPkz>w#g+!E2GE47amqSYG^=h4M0l**MMKsY8@caJF;py7_ zOO58Phnrvb>a|cRsPzU!TRo;dD6CiQqBpMTh0@%wLNsj=M!p21O$re9tQs**uwJTBSPto&TH>NnEXb zqIEU6XypzX{DWSv^#j8Ria*`-@mqP8*Qm-zy2m7H#9MJ~3@GLqYf zC%oSY(hH+aRT$da>p?du{|~<6f^l>YmUgW$&|B7#zCFq68$xc>V-SKDN;G1B2&&z{ zbib_qX$e7nYy73-rrlF<*!igNpp%@Kr$XX%6tL7==(rfa9F4wZEVSTVxPCn({|Gwl z9C~vJHt5_Vnnqmr_ZdsjW47M?ZE6GCH1Gj|)H!?-+$-} zW)G*Iv(6av2~ZPgQxEy$M%kz#P<@5SvU=EGag58nxs%`TBN|m+4TC;dBx!zzFU7|G#->JL_BH-8~6y}}P}<-fNATYtllS$c(alHnfp2M7CJwO4bcEc_EQAmb5Z zj@fCW$dyySzC%T;2u{u??eaG~BV<#Rf{l>ZjI+DWlRxc*n_Ca)7vKcu#2^XP>Q_n6Ja_!VI8OG>$6D(=|KlnI}$_Q8fnLSQ{dU3#A! z!B+V`pk3M1v#W+v6J4MlJ7nAaF>^k@Yn_(H)Z+cJ=yAF$^H6NK75MY~6lSC29=A~M zGU*%!&(Xr;+JL2>i8A7&Be{z;X%sgu2j5OTyjEftm+6q)ynnAF3`ZX#t)|t5k~(pP zLyul{^pT*#9B#IwA2_QXz>fMUY#^&|**gkQBm=W%>yiYX*A?@drsT;p^r4N$!MmY& z#mE|L{;ERUJ*QehjEojl>4}sqp%rH2>b8F1O2WWh)=?=9f!B$*N|&7IntUc5uhEAd zMpQJsU=-;`G4E+L))cp&Q=vbnC_DF~6!QxH=z9oq($opmPwgeQ|D@Dx>$TQB-X=<< zyrAxT|BDVg_C_vH-EzGWBd%9lf!f3pbp$`dUSQv8p%?C?c?(}rZJxv@Wu~Q1g?2xp z4haHA`GtVFzG8yD-P^NFeS~1AmcuK4;q8cskybSKN(z~XC!X7%+ombH3$UVfDL(dP zKxpSbp5w%cJHl7bzkF*-dEB{kdai2WpY(v+lh$1YSslL2LlmH7{RzzS zMZZs2+%BT;?Ve@tfMAW(JX%Ac#pzY(R#N{A@v?)T>fpLU>n`oRHZ!f2;%eIxlnrY2{ULlETw?SqS8?NKqMFuA%Ix zXxK<#I)trh9DPFz0!yA1fIWH{zTA$(zh|4_@KaDm%KW&t;v(*h6h0i~roH)pX#-S# zqOp;&F*|fvNX&u!N|fL3lGoRRb@QyFafPEYpsPUr`M{Y|r{4NVWme_OhLNu432~(2 z9=Llg-Hu>jecBSCarTrZ*i{As@8&mOG3%^fjQ=}7Ojl{C;tHqai|ahS)%lNnCUP>Z z%S`}l3CTYSJxOm4)$*g8TC(-}(my8Hj|1SH#2wsggfqpC#N{i=m~}h)6F>0@RZe4Q zN1=6_)r>7RAuWy-o8>gN?^+~PVDDm|ps_K1y;x=ZPLOcPwiywZJhP8hq!gq9vyy&aev{88X+!?#Qo zLz+)|eoh)@rNoy93KtEcAD9R`hyW)~Kx-a%00$#sRcrwcEszmWNS5~Te**2DE1KuT z(EAYc^(~53TLW#j7O36Es$EU?{lX6JhSPqwaGQBR*-W{qn|5=e*r{GI(_Iu~^ZJ)O zH$mAt%`rT1g6?j>+Ya8|Y?yY+rTnaZlE5U#gKkdb-?(h)wpqQW9YlrS%>(wpw=Fn% zQ>ag3g||_4kxBIfvuYcwy!GgHJ+o#yDZxBJbO1aKG%P@>Jq-JZ^VL4`QH^rgUJ-aB zWwEPvwS&ekLUfvR@@o+;B#R1>S5D-C%&DBt1r?Fx&ShiB?NcV5*U21a?mW%GYi&He z&s0u60kb`!zCU-Ayinp~lD7hdXPq~kv>=Ecj#l|e6^oqcFF-0lb*K;Hn z-|p0)54SY~)1Wkge{<~_d@q>xM&K8gxBcT8)Ju26i05J%*KY{Jx{Y_$^G2*|76R2R zK$L_0key~~*?B>(mWB`<`oI+4P~0N^Tc!YypJBv@HOIAFb%Q`;I|65XahL3x)vNZ8 z(+sW>pPmAW;>Hb9Z0bixIgeAv*fTb)pOCTJ-{8?namw|J8p)g#$n5aqzBbiXTOw8> z^wd1@Rf$L|p6lg{PRYlY$e*7aV_QpgI+q0aPjJmm>@lZ$SqH$32oC}ySs`J|IHkj( zcj;wz<+iDVPR@ar{6ypct>txYg)8)>3~kvjb&t>dl9PXyw`Zy$DWc)?X|VPQwK~Ph z0a;k3e|v-h2LLlDPySOK=UTFeU0=oyX1SgG>7TjUMgj&;&DoJ8{EMT>gv%qyV}`+& za3$2cRc9P862goq-TuW=!-k}t>T|rBIkZ8$j1SHAdZK^n0(HxHImB7QdI)+zv@+$@ z&v?qSDhwVs>CB&Gw-SFmNV58QK||Gf@rZJQpbGciB)YT7OkeGk%)k01ljEE-1G=zE`t_5b%*5cLBL{7@&r@PuLnUAwPLx8b*7Rd>}!>on=pG;iazw-13&x023rB-5eGJ^Ij>x#CroSU<9@ zpOp1Z&@4tI(yS~>T8N-b$vOn+v@<+kN8<~=dsJ6Z5A7G_95&j-Buw5@$}9K5=d?>p z)sVSn&G?R2fX^S2+n?enuwzFweq@;_FgveL&)@h~&=%R;g2@)E zb~EzEEcMEz!^-jv@tLOo^8Qx7bm7epdAUfB=1_(9km*ykb29dnNFEqi-8@Nqyc4(( z5}x3x_(g4Fc&n?BQFQ0p&~?nM_MYgAlXxHym90cDOCGdTTS0Q_k`a!N&u7efhqInyW@stb$A#7j8`maMPXY@BERYF-uXyNFpU=7VyFlnc;r#<5W2hQfyEV* zUaGnD{V&0lhXB*C;yv#V@^w<+IQfv7ijQXp)_9WK{sxXAjXq#a3^2~>^xTkuxh@-J zZ*@?3^d$qfog-}D2M>T3$L=;Tn4WOK5<`J7e@Jc>oy*X85;fONxWf;2-#XRr+CRI6 zCk3ujj^P+JIFJ$%UXe?i8EsjbHPb^H@heZ21`_z6{&Bhue;kQ9(?sq|nSxi= zGPDfn2LhFEP*abdj8!i*v+3q-!+d<4g`t5fwSyyE2XGS3VHQAF^BP(j8d!^)a#acK zz!HKr-mKS1<$f>F^$AIek741T9{{i4k8o2H{A&you&lSTd2h+_3hTL=nkn{e3!16S zaF+N@sE@hB9--C1;&2*0uRxduXOx|J%N<=mTiWL}g*eS_PMaO>-^A6DJIIH2ACNUX z9~ZQ3uOJNwd~Z%EpA9H4-`A^Hz5yPdp6GikZ#(*-rJ^8<7%cR-e}*Hco4E2Qpk0a( zLtKptxZtj8EfDXvH2UZrI!V2lO_;kYnPnpR5t7oI8SuOOI4gXzp6FFu7mer@$lv_W zCM#2v`C5{#!D_`g(&xR>ybIphoaeIF9rvll0(}xR~M?HZMuOB1CIQTxJYHZpN0DhDOLjmx@V-7WRlfO1l`KFs)UE zksX2sz|xc{+La14M?wWgyc&{j1k@|@-*|iNeNVA9CDWSgW99jzoNx7$**Rl;66{KmyYGV83Y4BE`gD>K3=pxUgOdiqVzL7>@P=6}**Nbg_I4Pm z@iq4yXPjO!Npj_)WYfTH$D`kBX5>GpsmToM%H5Ad^cqFxcY6?@Mo!N8M8UW>8Zj1 zv2dyBBk!m|TYZJLVT8~Lk`#LPm95pRQ{aii_))S2H>1k8?D`M(=}v6cbQ8(&XF=Ki z(IKwyX66eya!@7;q_`cU?C7b7f@U9|2+@A{71G_!s8!346J8i(?d=YBUzZ+!?J@>d z$Da5usDbW1xCfSe&wz@HAuh4vgFwVae}I=)&MN4-5oF%?{Uy`OZfObIVmGuASF1R;b_@)SI27!WUpjnOX zAO7HTSEealOc*rd@BpM2cM*mDFsVKMOanfi(ty30_b9 zBH8s$4Gtp8+6pSv`{nYgy|J9=40#-ZQW*VVZZk@3k}5KucQx$u(OhC{Y>RMdl8Lfl z1gg0g)@LCIXumgBz~Nn{^R^(OFH;7!VTf-Au=XU$rX+3@v0+XO^>b^62x=br*_$g` z*mSfhT=bT7`|L^Unlj6@!GPYtgG<$kH*w=r)-_oqU(F**Eq7>+bYs6v9N;ayYge0M z+c^W6#rS_Fq<6u6#)74KwNI(mpaAsV&;+!b;2>8c-zRIhkm}QT-^&u+e7>OJB^j^k z&`#qX|A=0vY{C`8Vfrz8Aq@CC5Ztu4f`oXWyE%z`4FwCCk*$DjIQi3rOce}%)`Wi9 zBprXNmxaFqw|Y(}+rRi=#PaNfzO>+NlwOiY1ni~cZ@^cCYLl3n65@Qmo#=}Eu$G1q zg`y#7Zu1vzSuymOJ^Qn5&o(Jl*sdMz00vAOUeXum9sn64yD>ILBX4iOzJ}@6b>$lV zt?Z_?EXN1A)e7qV8`d>Xn1d$vqgp4`+Wm@|8TfAmy}eCy(w}!hG01YD7O0;k$lDSU zGTSN?*LIPfw4!s%-H|N2vL}=;T|Pc&gabm%yi(ZME9!vn1oHR4;+JOVT8I#VpKQew zziKNo9oRa|uzazy?^9^Ck?@OvG~`iU%(SuuKG2%g_XN^CP+mSC5h}hU9}oy1*@s`A z;?}IAKChyuc=&`g+N8}f%Sff$z%rp3z3d6uDlZPWF~;u~h`f{G_L(7nqS}1xj1I?Y zLTD)`ula+vMnSHPV0Dwgl8xW3yS4)URi&+|`bI)ORn{i2evjH__`&AVQN;^O_19I= z{E>B2$bcN~--pD~s0KjvJWq6M8dhXRidm*(KfVevyX0pJ!N(8vljA{11jz#1cfnumNO9minpz`>KF77 zP5WJqtd^bV?5-B4%sJ{b@*D}R$P8E3=1TQwq{c!-JhX=up@{H1Y38#A1HQ{$%hFw# z(V7wki=D|Z5PoryY83I-QFg%Bl}Wu1>+z`XO4}#{0$DvWz%M*42Vc)Y#;j~s=IRtc zpReYJclj~{*Ds~YjjD5yc!et4AmgcFRE4L|JD{xo2Y1Z@PsMWY-kD(pnAg$g|2x*t zO+=U%W z6-#_96#7Lca&Z0bOgz8u)zfEaWD|;_o-uCZ ze+rk_d8I6yw?NW*9h@K~qm8!d7Dfr3Mv>d~diH_|hN_lIBZq|tC=h$~o!!!5&}EF3 zk|!MA7&3Epa|$&<1U%je+MZxO%D@w|HPt`3Gv0?pydj@dyoq>AT;boC4Vg?sXu ze%h>WYPhprFH?UJ`dr0VKU}K*BUSX<&u=5!r0>bWi|&#)s-`IG6M^ST4HkB&M#&qe zSZU<)?@d6_>i3|ZL%sZ}ALy@@&tHf+lCjVc8UL0NG_Awu(6l1b`D3y8CwbJt2_2Sj5jcJAwR3XD!2F-Czijhidf_ZhX(KNu5Mk zyQDS*Kp1rHP_mun=a%Ay+SQ@r-5a3WW6xyG+560;Ul~?5s_+EhWK5Cz#3t0%ST(`b z<{D)9Sywy2c{23EBIPFI^4-$M*#k^>DK+J9sJ~x)&uzt(f-O*fABMLUFWR`vR64gq;A!C-F;_V6sA6V zP&-NvIz%f9Raec`myTJcwh(D1blP4S+ungN)C{q`_cW3tqQtWZ&GCoX2$e5o+`TD&vg|_snJuDgrfl zgtKQrm;Ay=sZnJ8b zz_TYdsehHQoniN-@?Eg6f;E?S46Jnoh?O|t{V)_6mRcbVd2bz{95*q(ivQ!-0M+3= zYVu!ei13@Cr50Kvz!tqP5VyX^a^7M?fM%{{M?Ajz+cz~BE8clhPESi@46(!ip-3D} zbUfl}LeDHPaph>hXagF6?J6Cej;c;2ZuJWu|j5dgoj{ z{y~$A2f(vUGnPE=s3#f_T|5_q0!wt!;f5VEoo@(Dj3rq#N&cy0hb_8;#iWv6hJllA zlhf9u3Qqlgf>zxA4>0mFB#?@a=2XwZUfR@!vMz&JW?y9y1Z+S5hT=G@S2sf^{D3a4 zsH_xz`GwXln$A=U~iQQ{zZP@zomE z-1%2k+e&`u%UDeCUj`kUJ@gHm_X&RnIx`hF%_pEwzlp}C=+QTY5p|RsOQw|9>c-$1 zef(lST|VdtN3fD4L5JjEWh&s^OLwjvp{v4-9;4*-u<4U0z6Rqm6-CGP4lR?KahjQ~sGgO`YW%gz6^pAMqOUCQ>2 zb5m7DlKYe6OPhsTw8myVQcdpk^5x{MCLwDr@pyyUG$?9V*o5W~lgX`gjQs=K^AK;C zDSD6vdRMVFRe7NZ6HOczgal7UgPahU5nMA>*kczg~K4p`#|8}#HUzI^IZE3dk=>=MOtX`N1{y=lwxk$Gf(97ja!z9<({6*3Fr~{YSm_f z&X929M9kM1-N-4T@)m{G3Fj+?TNs)hTX7>v`1>gVbOrczO!C1;-5?9U$8HheEpT_3 z{F6yVKck|F{+UNo(!Cw1ekAV~4M0DxPFlz>rEgvArI;DgToM(YLk@h^fi-LJt}$fE z%3M`V*01k^rb6Bbnx}-2nCqS)6O@GkDjhl7(cVF)KJuG%v>`MX%-g6BJvF7c_77zD z&&cqjMcIFAGJzMt%-dSKp82e>@IhquXKt@zhjucyPyNRxP2e`s-=?)6rvwfvbdgIJ zdS^=*+&kJRlV*5%Hi2=kpaaJ^{0kShW8bEc{<=geF1ptStiKO0 zvCtab(;sk!X)aptV4YQld3cf-O<1k*_S6*b&(+MCrumgkm`)t+A;|STsxXVh(czz7 z*iM0B)j3a3FZE;3gq6lomfrIJdbijiK|c06|5C}CQL)HLS0@XvqraeJoY zp9y6%8lQlD&hg#a5UjFp*u&M!=S(79aS7Qe6VL^^Cfue5CGR3zhF#I#DX4F#T83X1 zk;z!qar{4~EYx5ZG5!wJEY>ArB$pTb3l z>-LS4+$~YW==$~R!ac-!Z=5D<%$&F5%l!lgS zznB&|a^7C%@O+l4;tlqWHpmXlUR=>&5q=!HK!~H}EYtnL4bP%{sh!kAw^H8;$|e!_ z^TO6Zjy}|Cx)!EGSEj`Qr+(tgSHg@IwYnsGaMBCBHA1M25>;GZA$4Hr7(NoMGH z0*aW*FEb>&fy5mZU*q1A*Q}&$5~0?v+KRaN%sxV}>}m_m$Xe&hDjE8PusCpf?_i{k z>Krg7{QQ}lao;%QfgrpGy+X2c08^s$pkIYvpWSzZTrS-7lE- z9ZE!VT;;4K@d~?a(hM#~y?+cEc!;(dOLEBX7!qWR6oTq0b{l z!9;^-Q)I<9bssS)^ROhU@ugq%p~kR;2M1e1X+TC8czXTRU8`)|+paTwjJ_q$Qa+9PshDx{u*0~OG zwXadp>iZ2%2HYk^hpBwL0`=j$x$DxQt}FBaMl?@(RJ+N-*TkS3qQCZkM13BiL!uXW zf)6|}lWes~ie3&;``)~%*gYxOTVd5RDXUN}#rFM-6$ouvS_aj}^{)wN)xyPE`8k=k z2bz2E4>`DZiAl|J(0vH~oI{H_b{%_copylR*$$qmr7h9xrYBbz(28a^9JI3$=4#T& zgHDLG%cyFWZbdj=OOG1=Iua`xAid~dtUlk$*s^v4-kteb5c~iQJdPiw-i?(c8zxXp zGAJY$x+I-euo7L=q7Th~BL9}2eV!xw1#aCW9%Xj_-C}ThLHq=BW0Z1eTrg_4L^3GP zx7EL8uB^!7?Gzr8W_%qGL_yWnahM;#vBbA9!>zEU4iC{Cz*Yq9(4x$A(NEB>Ri19s zz)Z#a@k-m^4UEmFuv4BP|8d{Tq@QdbXAo;=I%LUHHs%^S5k}$%cfr@8v>*vJ^_QYf&pTvJKH7(#^_O!eUsevCRmyJuSExZYnbH7 zA4HASOCNXnm8H>Jwp&i=UyI-aCfG=ga^O1oufYwOSM~Ap@``Z`Vs@hW4?~k)H0nn40QEDKeb>tzj_f-9qQ{v%$9MP zUKp`-gCfx^ta+1_ZeumRpA>-0uj(Q9PW48!BKuP4OdDPamS-PiR&M$v@U2nr+^i%d zp&9bPpK8-z7WuL00Qts$X#b;FhW1vpWAvE8^C(u`+Misg+7&J~(pmTI99>PvE4iH| zqsY;@;=oL|)~(f=_VAwe*v-L_4;p;EfF7D2J`=bwt73&JJ-|L7j@V-s-Glth zi-w~!FrS%t1Ya`Kw$l%oMHY~(bzvzX~tZDkt z3EJ8c$Z9sl0?`=sAfC0nV$ZMxK^y{D?nN@zRfGlCT>rr(^uCFH`i6fQ|Fr|_Pm`~v z@s2E)8WQ|SvFf>B^Tm44D&Y^VM#6`tUFF??HB4XiiAf@!@l&%XQqcwBd-M$NOvA$Hpj#- z@i@jz9rpWQ>QVSSsJ)2cbN*7@cMrh$?$C-$`qIOnaAu4qds}%G|40duKAGM$iBES? zaj4D0<@kp^`0C%alNVf7ceZN2Sa*wnjtXd!*n{RAGOCGT=C44VWK)!*y-N05?fVUY z+r0@Y@qVkc==nd2&crXNv<<@t4je#0R9wIfNOLI{L^HPpv@zO@X z`W1RWR1QV4Qx7{HUd81PIn@6Hs>{c@Qg9)`r#a6}iL*TjJ(SKcC-5W6uu{xwD8C$R zMW@@VUr;7!ETa~Bh64IH($asFfaF*=XdJ>DuiuyahZDBSVf*?yT0*81-9^8gQt5h! z^z?&)lwn77qhebN@oDyTVfLA)T)S04^2nRyr*kL_;Wh>Q!DXQ_&-}tsw?NXfkDS>V zAp8W_)wI%I@YRg3JG@L8S9>*vP+neqOKIgxtL6?XO|g=CS?pXJ_LU-knVitv`)MNo z$j$>%M{!@jVNmj<|L!98Cd@c`8rRg!h6wInqt8nKzK?)Gp$GJLyral)1hl zDPXFs3(DCd6sAeFYXSUmly&JOA$M|&-u?^Bd5kBpa;}HhijV~brp2D!cJs{}#wvzJ zKmw(o9zmsNj(;acvT#fLOT#YegNd>qgLiFXP8N`Ba(DCq?sV)m=wPCS68Jm$QAnDw)X~+jD_l!L}w%m zk$F&_SO_h9dh;R-fA0Nk7+dxd^%}*cZ27Gs`&wQfFN|k}gNxybm!-eIo}m*tWljmH z+sa~0%rcEOSp^&Eb-PGD2P^R_W2Ni+D6=O4WC%+GXZsrqBC7@P;(`X-b@_4c8On3W zf)+zOz7Wk03`Nf!P@rLT(yoZA2IPK})b;`TCPcN=dxTP$3Ow0KG-A2unY6^9n4%NzjEZjQK!|x)sH$ULE|YO z{~P({u))_ig7I=a8hxYHu;^W0B|1D+y|#-~b`Z#=IpJ7s)0ZPh2$^Gg2j1lw)1==K zn020TE`hjIKwj){pKKEkU{D*k@mD(L{7rnFXKw9F?w)!9RB&`s`h3LP`!-KL#j%Zp z`~w+oz_kXn30M*y+EvGc7A(p4ffb9|#}z%bxf^^vPtq2VMj%9S-SFNs(8<8R&B5QhNl5_dWE8J zvVF%a?BdwENmLM`cY7tSyKx)J=(iUA-HB?qm*AUi!lpCbFyh1G*oVD*-*xfGJ}iDb z{^Td0x=C0&G9&c5VEjSJHR6INk_Xnfgj(awvChgXj?a4wFJ2XF36^@eHH(sU!Z(YB z03}CTwp(-XmL(k&MvI%wytW`>b_>XgxJ7J5K`6nL!mdGax;~E%md#t*CkF%cMjnu#^91y)QNmI>}o=UQXar-8n zT}q3h_T4}KS@*RCa^+i?*It(s+{FytJ!13G84O*-^8CUPadSmr#B&K~Kz%o3Z$snU z*6VJ&>z2v?Y;J;z1-cZIzn9PUX{xIv(GmN-U6SwdpG!b;e}Rweluc9zAjMEO-WPWV zj02;Oxk$VQS?*G;fUD)pxh(eh)E-q^FgG)J*?Ub5q`O-b`@T6 zhx&4C6yUcakkJsD-uXtI|?*Kc@Sm$*s~If*6F zd73#fO|M%^baC%^F%{BPf@1gjue%6)QDY)xV;!N}+9Gl(zIlJ1nbZGdSIAVXqB7XM$tpra`LZ3?=7pCD>hW;#ZX;1_72==E+#)2nnvn9&M zd<+pLq}&JJ%QJ()#3ygn65UPchPKe|mi_5Ua#*SR-G83q~} zZ|2KRxwo506WcBEqG0a_p&~=V8b0{Wr68*f7eFI9xSGamW?{cJNwONt_(I78uYermX;yXL%a=UE1BJll5A7cT-Q8TToIhh! zrvtyXZIY{@7d)sFPQPR*l0zPJ&*KHh-U8Bde$md|uRa`{#V84|%hNn?^7|+ZQM>KY z55f~hjKJ)@t^<@~pZ-HTe3!_K(8H`V#L7&Y0JQ{&kz8Z&gs!}Wo7IJp)vAIYboaGZ zOXJ??Is@hY4DD4CHSBjpsmH z6@fl&s6^l3#QCjN$K}g@pzVPr`nX;8zd3C?Q{R{N^w$i0)=iznjmh*V!So!pL31?RRcSEQ-;)A?+{01KqRW+lP@LFHZK z$1@ms4w;!N`NH!HG_;U(mtUIV6_OjT#i|(eTr44LN4b=lp%V)z)u3J+wE_R=%8y2O zjee=LPl`1rx{^NoTkca|+_!z5- z^jaA)((_Ss3VL7`LpRyx>_3JlN6GWgXlX#F8E+t+TQTL01@nt+5!6bf=>OdW%1}Yp_ z*R7t8o%k_Bm)`(QJyxQagw+69(%RN|*Jb!FYUT+z=eu(|mvFETUzn=Ubge^VTM73b z7dNblG<*JTV;a%8 zQ-XO+kefAWbFA^dd+tv*ctjRn#}h?<4u`NiAzZ@(Y(#sJ&hH8fBZmq@yjs@Crg(&z zSxiB*j1m^d-$bk@*;Sn48cToCt(Cth3M;_6eA;K?o6GGh4s#6`hCn+}@YS87iu}Q= z_$;|8wf#x$oh45~%PwlykjPH8eN--^Fh4T1HidRX0$qaVK0@2bsqg&ZjzoF7b8X8f zUwy3AHfA2#acztt{twH@l+0~XOW}zuWj6V*A2yjQ8bM+v@>7pxZWJmY~b?v_Y>Z-M$EjUyN;QroxPD_n1ld)BL)<16T+KK+9p z8|hlnA+h{`gXq#8Mr{Zjx$@2G6I*=Jnv;TIFK?#i^RfcOrTL&$P4R0u+=B%%l~mXI zX~d`VDap4;t0G6V6?gl2O0nOul&)aqtib{+gg#0uHki^bZdkc0EK+&`f@H-YUoMuxb_%f7z(Qv~wIycV<|RPxq2Y zsX-P4?HFw_uGu=o3v;l^s7J@RXWqB3UO`?9q@}ln@WQ}4(+KNslHFtN?rF#l^t(hI zzF8Z?i2CwIJY#%EAVYV0#{Z!;u(wd~`y)e~g{K5MkZ^<}OTzXUIL3SVnWaV=u;GQT zXn{_za3T4Aro~D-kPntBxxQqQf`nRm;?6`&;cEt3y4#s_gq&Z_{;TE8n8! z*!ZtD6oiJg8a&vt$s$$g))Z*zY|FvoNwEKLos>(w zOyc;QCcDfQvRth6A=bPpw|`m$l^aPfLP;;gL+t%i1;01)(}m#hE>qj(sV|v?{N$qctK2Z55 zJQhk}*Q=DfZ6m~8KWemPv(ev~ZA#?bRN475HO=)oE<}Lv0HjG{G&WOZQRI)m5?^qE zP1%UV%&^Iv=+ku6AcQKD5LW_t(}@bBZV=kRs@)yy5R=TmcGXH84mvUV?SpUXTwWc) zW50`WV2wymNDq2qxBy!*!B-dMMEdyD+lVrY(T)>JWtv?h$miQ+ig)#c0oLu03>}dW z_8!EK7%nwM^yl_SkxS;>UH0=0l1}z>Y-Rq9XJVkWTP4#pairM=e?haRkC21%B_4Jl z7{1-n3tmlf{*5NHXv6ALdKmkI47c~tP7=#z{hy`5^2-%W&yd0i+lh`9a|}#K)=9iE zHs`iubtZD_Szdc#Nb_!dSBSSrngO*}14ifk8T^SO1%n>Bd;61>Y0J^fG=8ZPku?w( z099>cWeM0eAv04L&E-c4?NliE-Hp=swv>&>T`U^%&YZYLGp}gq%Livx?cJ}^%@P68NM<6G?uuA z?e?{+sdImh6FGI*s$8KWkIZBt?6usP=-y*B9vEA_9KJhSeP@O2F5wB$XlDJpUh~kt z1k96GKM_=?P&U{{42j}eB4uiFaXMh~JUVE<*qN}7MqnL68$29=D39J;tYhz22PkIk zvacmMFYeR21p!KzO-}OXJlRtsm$KF&&W54{pSjO-rSm<|mPEN{e*2$_Et03lwWsg| ze_^XdJ>_4kc0i(brQ@@8d+Z(PB|0H7*}=+cyG=fLg5StLh8#ShyEx7Z?ge9>4($VA zP%hOz2=zW1?@n`|9I)5#>K8Xdw6LuxWgk}jCNtV*tVTCq#UI5~T_a_W zk!B3~`ngN92n)n|p_=tHMYEA)i4(EgmHJ5REAvGn!SiN1`urs$k*E7eV&FF;*>!)h zY_oC8^fc3iy6XagjjatRwKXYA3A?1%QVSmi<2jT~JSC?JH0NG^ zu$i`0x0y9NO&F(vDqf~+B-N$dg?93Ej_lmLaaD{%Bqvu# z?932vFsLt2zD3{wnoKvTJL`dvle(8)j%{+SqC}ZkGm98{^$n|j1AUb}-1G{cgeu~# zA%>^h^oc^hF^14BimN4f1$4U=lY(hyr`=r83q$KzvyZ7CP~eE!$4><5m}@VHgpyA> zuyS%;nuf0?VV%zV-ZIYih-*C^ya09bzg05$LOyg z2WjZ$?}6Y$S8y~!6$>3m!5$v5rtBfCxgvSC10O^1ysj%0cl=$Vi_jkA;s#{d-_+hg^wV9^ zjo4~e%9ZW3!w032CH9Wtrssr>6C)0W#N8pQ{CSaUT>d5y zrnMgbX*6$P8g%fut~?Wq)ct)=7Y0NN@?)B$)wEclV}(+>S72sTpb1YjV3G03@GW|`)R;~eWdYPRr z${wIf`xKlLrXkGMg^XxVtViU<(74)iW5$p;mxQ!;6YkE{xT^7sY++o=bU$nSUMDyw z+4k(d@2uJU{tc2xF`$b*Nx?mK+unnYAhH*!spxlSF5hEX!sH^_;Y-p_(1b^Z9>A5W z|E-I(_M8=2Jcjz-AYr?$_8)sT2@OLy2By4u>UO~R42XEcIWA~!q8{5;_gy-4@(1riu07gE)9^TYZBp07>J?2?f0FSux!n$q zWcNBFdQzPpyt@CH$xX30qJAc{$Z@2wM5FHHW>$ItDZ!0-Ry6y_s5YNay$}8rV}X9Lxw7MTZ;e)jj$4|91o&o0IOzMVb!PtKo;&%24<#Y2W6nF$+ zG8n(*QsxKr>RKs|#FyE$n5`vFnR_{@IVFV5jL527WWq`G)exNXBszCHuRO3ySYz{EB~8l8as^baCx&#|HKeOexCfD z)xJHQG@))G-veaDCkB}6D8WVW1Q{nKlImz-C;&Xp(|D&;>h-(nCRMq}HYd;1@1s>) zwNic=+3hr{ohzDQJ;WVUXD{DsH8K*{TI;x+j^jh+AKie6!B2nfi{zkwTRN#y55K1h ze}(7R(5odYk$Zcsq+5aAbLW^Gd{vDO-M7Ss#@&+X8!ipq$38v2Em(mLy z!`S79Ne;;o*Q9N<=2+bSB1QnafZVOHCrTXW`y`gQF+>{Wif!0+;J`lh5{+BTFJ>0! zmNk}`elv2L`oAx)fo)QLOZS200#hC*D_^9fD&S-F;4=<0TTt5=;=6H*OVpVChX`{& zY0f;kjyKNR21?3<>XEM=ISUznxl-mYS$IzkHaZ#XjDGTw-GDc^HJ`N_9;}y+cjO4- z+Z55|*NE!|hT+>+l5zndtEx9d-6Op)~58RWO`% zN%}YmdV<9(_*?YqjH4bkC9K*`$gv0qjObG#e%ICCPsfJ~2^5aig6_YA0mR^J*@X*V z_+?}@{a_yBrQy_;xN!*zcxZX;o^f_Tvx%!yDoi>1Px2K!6Hcy1t9VmbHfRE zKydfTKx~O+8|2}7!!}D?ZKOYShIg>T@e~n$i1?liwg{1LT~z+x#rSIGo4HfW6&$^K zfZcW+F!knN2t^yVbL-O`#vqGdjCka9MpX-F(>}NxYHd7IwfDa2B`0ZI$$P^}QrPv8 zq8UGj3gbR=N%!0G(vfGBD1QEu?KDvxJ*=o_l5%tsyD|IZEI=JSar3OfxR*Ce{rg+1 z#CKrZ3cL)Uy#9dS&cm+6UL8VW7aic{bg;k&vXyk;7enTEkGkDXnPk@W2s0@SpEnMZ zp0@@YfIK1hJI~i7Hb^htXBZ~j362yD9V9zsjnqF^#QLqvBbNmS#90knWa_CUuU<}> zk8kwKd-bh%_sf@tqkNMn7o;fYHcM2eZM+XjkH+%v((1F2=c*O??JxNkuEVnqkh|zv z*cIuWZzyHACzdsz$=MS%`%!)1I@dP0`8H zO=Le>>^?Z@n)ZE?k6FT9p0&rm-H-5D3(jUqvtS_uk8;k{)2rELRy~JZKaQA{K=CUy zd~Z$cl5Z)XPKkrezl_~~E78zJ2$XH)UH5-T^QbP-}MzM?1q ze7vQus!g<(XV?$t+6G3{oDtp`aGCZ$zA>z-m0S#z^1#w=BCzzA^ME3cp&HM{|2S%J zH597vcsAE$`KVqH{~jy-l#*Z8!!Ut-skzk`_O1lI-Us-18@MT1KP(sYl+d0hkSihE zjCS73loFkM~g|u)JY1c}`v~n+SZ_ahme6YpO z{z%4;PshRkp!=~KP?$??g?km8yGjH%FDb#lB2QeX(~@wZbmj>Rt69Ws2J zV7|zZZysg6f6X7EFYY2NyK3gu1be`&s*iwAu@p;a9R~Q%#Ux%7<=%=CoiQz;86|kz@-tlK zCZdUxigrh$Q5O~IBa|y-hsz+WRrDqf8K-zcj>%{=R}x}X%rJ)-0{rJN7XOif+Y$eM zB3;EjUTpg&NFGHBPAC48$uSW6d9(Y~6gSCgELP=DbS;1?w;`Vb;{(a*VKN*QjZ=CL zPt1AGYbz%#=r)l^iG8}N+fbl|?=_d9dogiv@>m4vzT_@(l29~>*Weqh>IXv~C!URm zxE^T0FDuaRD-UrL17kF7UY)zPb*|=ugYd0^_DbCJJHAIM7npYwo>${=mdH4KLE+?P z^3d;!$@yjjd+*U)alsL!R)GdAPKT1O-Gyjk^U7`v-lw1y*gMw&R)cM{SJ*{?J-oxN z!w;D7ZczK!)do1hwr)&Hz9UsP8(#d>I!xicLT-yBp;2)AvW_+vA7zna%~Y4ei=-z+ z>;P`u-4*#+lH&!h^QsTv|K=!HklROIr$R4WSy940rMx6_+!t2F^pLnvsBR-YSR#Ez ztalvpGLQKMA5Fo#rZa$k#HraqAC;i$KnF^Iw6+W!6g)++mJ(ozcMzZb1E$fH^=P|D z>cN<{6mKb^fq_!7MV77A}E^D46(nBMze@)R&FGXQjpUVR$~ULK6+ znU)n@=l=u0hWAs|mgR8PO+%3swTZ!iqO#{3#jMOyb+wRg>v5VOL6)RR+s-lE0C`BD zd*Hnx(S8j|w8g*qz2r*zpj9z?34Kdpo{mI#0`B36HRVm7a`_O8=G$@OmaZ(^`Ik0I9LYwG8=o>D7o+=x|s{t@)&V{)-J-C5$~sN~snn6ESNEu$QM zA33_qKIyu~W~QP7jrxmEH*WcXQpTxm#yQL1RnTHyQnT2~H?A>W2GZpR`)Ij=#?L&A zES{ljq)H~m$sN`AxPz1+Ccj)qaD5>OQF#(saUpSTLc5o7WjCO2=p8@orL}R&W8lnWcS+#6mrHL*w&?7B{vhNm(VXP9i=8vX|0dvT~jx8xP^W9-5I`r1Aoa z(^ac6u_nspIyv=^k^Hf8WjB3ejr+|;@oy&c;|EDvneNq)GiBTC}#j1;p z4MJb9hyVjTgh}`1=?2NnT?UxeZD&pyW1y1e4PrM#a^_li?7DL!l)zu5uLxQ64txH8 zc1X9Gu3AGr*UdFd5Oz=VR1JnoKltdpQaFxG`Fi;@h33V1#-}FqQ*K%+R9V)_i1MWO z2KscLjjlS)SoV|}RS)lHz4GwZy^?6H@$FzsbI}*nh1;G6cRV5>&25`hCUw+<8G75$ z2od_sAKfC7-W;JsYY4e##w)|E!PQ^DHCwpLO86`oy-yCM>w_yFHb^bk;G3+)D9zg z;OI$xl&t6K;0%lQ!_UoanH^{B07W6IlB_*Nz)**ffiEdh$OD4BEw3gZ5v2xs&OP zCeI)%$n4-6R|=G4;HSL`=%0Cq_-Uw2_d)tcrr~ZdB9k{flUt8}bd&`VZ&7pnV}&G1 zd@S~$N?MexrsQz=UGIVwZxIh6Y0+OsXf3Y!7517v6=71$7iFq0 z(w;rsObc0O{mjc*!Ok%k?XjQTk3J>LunOSK*qrOq6vnml?%j^fiV6CXQTT8@bRskj zksVf731pL4pwTd51@IlJhe(k>K`-bdFDs_DTm?%eRuI@LcXBHZSVPBLtd%~yWliCJ z5PLu7+kRBHZv$o8erI2L>JjSM#8Jx8$y&2D{_rs@oYJw&%FvCiVc=ceSnJ&;=+aJh zZB0HQi~9aL&~pC&Ca{sD+|b9Xx;MzW8;aMC@McdA(S8^wuRvQuux-xWEleLdmsGy4 z;H(P1Ob~6oZRSOV5TfdIManyZ6`R;jPRtPWO1zo_4_XN=JVRi@*+H zk)7bmPMb*pf5$l5-g*vL)kfx9Sa-YhGvG7zlI$9^eU!*UZcy({Ht&Iu1msYnt{C6J zNrk=INAj@YO&mi3qd7o+7@FEgWUYk`bm=a-)wY3>fYKt03x%sy>YC$My+FB)xP84& z20w$R%5@KF(5Z)LCwYsHYQ`X8aR|db2p?UVoTq;LC}gClD^Y3Cup?mNNYM{MW>~E6 zplFp`K(txs(>+Sl>5EDct?L&&_H~|q3PE&-&hLKV zAdjacEfmE?U&9NXz3P4?(pM$m3|}wvs$wf6m!W%-AV-Dh6urT>Anw0Wp6fqWgA=!I z9PyS@9h5r4`W%4fGA?5SfJ$Q*8gNS}Y52;kDrkjhzk!3;U%w3aJ9c@h_5#(`J!@mH zda^^Rcel8`XNDasR2o%_{hSbP-Wsb@kuSmfw{;xP2DQ5+!JXcP2HFR4RZV(+H|1!X z&4w2|RYQJ`tK(N)`C3HQZ2ZxWD+}s|fO9CmEDwx=-ijjt68T2W$dqZ%FdcC>N7DJq z#r(;~7AN@Pb%giO$G=i3%)L+`$>S*`qSxlT07#HaHjqk^$1A}gg6QdHme}a>>LSsj zGx5G2+-uY-{j_yCdNRc{Ivo=^go$ic)oIe)B%3>)@Q*t9C@IcwoMa*Qp&-7LQYegL zk8k%wOing-mB77btLO-cJLoGCYNo7|9{iwfb4%?Rm-ESS^$Q+83Bw3JrWmg~;%3Yk ztl%B92XxEafgS zMo(%hrd<94zL6|}uUl#wtM(;1S7>j_!<^n3Kz(}e(5*g~q;B<;2C$YrpP(4DU6U{U z5*vDUc7A_3|1WY7?f8v|2RwOvKg;xYD^4FV4o~15GQ5J{=Uz}h<`Vy-+ia0jy2RD9 z2`3%!0|LB)c;=1NX^awbNLqk8LJvZ#2Un=Wk^~R^{6+-RPw^WMnJyEf4&S4;{*G^1 zu6|`uWhSoU-{hU5Z=f!)}e;z@@arH`x7*LKrJtbMGce?|!B_=C*F7bzuw zSXYZV9hM8CT=>LT*%Df=%zeDM#Ku%IsXOdp-b=|?fpB#l|LBy2EP&{;ZDH%b1saYf z8HA+dKZrB#2N)K~R6#YB%-QcOL{CrT^g&C!+errFrTTHYno=em+Rxov z#GjceJF=ZwznB_9zt32_2NaPfii8bk#!#7#$kD^}bvg^h#gCDM!Q-Tnyhjq^Wc~tDOIZM~Ay>7bU1_@`F_5nX%~neDoi-q$RZDqP@8-MfH#obxTbXb&%FH zqtRRWAXG<+R=(vOvPiOt@liiY@CfMdP-8kO6rqn_so&2rJOAQrk|u#OYJN;ag;dMX zh5Oa+v1Q0i*jVL_z??Kd3Gd|T+_2#>U^FGF`ObTO4)`=86zg+}G=z*N-|~>=_OWoC zp5oySuhoV~p6=Bz@|Tq(tFon0Qru{tfGDF22n|4BJhtjIvDliYFCmRfkbWEIH^NDA z75s6_Kv}5Kl+qR-Bz8$HNM#H2>RwV(F8X;b`NYQNabD&Lio9)&&(>f!1FD@VAD@xV zyTd_07iPXe{awQ_>fwKfS*Me&BgFsHsb3xeqQpU3m&p&>IGGDf6}(hr2cvm?K1d64 zZ|AA3afLgjGe3#({vE}%ns3xFh>|gY#@lq98#F?mnMCG(Y3M}d-#)$5csH%vV@-KV zmFC%W{4%4NIIDU@8-BFS3B};AKg8uPM&{vJ9we?{Oc9v^1fpGz3Os<8m1v&xpnubRhPhlYjL2c zziXOd+75zFTxzN&b%A{O@Tkk|eeVsG2A7Wite`8&0FTes6tqylZmyi6YjAa}$94ftveJQF^_T7Ry(Ol} zwk$C~ej8W1gevEE^4?@l>6q~_Pnjg`q|WVEciQhQHX14YVM_mwVEOA^w3zqzkrx!| zdY+7z^O)!NE7}QVx<}=d5e^@c9;Y3q5yLIpwpkjWFZc755ut|vC=+P=tBupAOFWCJ zxaR)DR$UXL&)55?q~#|cWeP3wxI;TW$olSOHn3GID5Ar64A6u7)JWPsLQTHYYH`jX z+i(eVTY}|M-cQk#^`K?<8yZ~Rj8Xl{b{At^oU@EP^xzFGD+`*?t?tBD)?oK&bvi4{ zpCQelX6~8zX4(Aa<`8d?I&^D#srHy`_Sco@G6&cf!(800R-<p>Y-Z-*8kg#kN#?eVrV@mr@;O9)s)kFi=8}J~ z+v^aIc7DUnJJ61UVt27|QxUfv@U^)qsig4MCwyNNV#N|)?EcOISg|s?aKj=iyyc`} zY%-P*1AjH|vL;Cupb5Y}`7M+U*KbcFFTL4HUE3Q<^!+Hky@%T_CqFF4sw`yA5o}S_ zb=?G8P`OR6V)lhr|4WOqgZEc%Bb=xIfNfy@TjH_Q+te3FC|?KD6U;qT{8@UU+Yx*N zv0VjLQ@4W+2_mYxb9i7N8Q&FA_ka~M&w2kvY0+Qmb3)(*>X1x`WW(J!4RJQ%WVY5o z!F!C?1;d$Am#^CXULL;f-K@_R^kC@-;>o(tD#>%kH~L}5?ZKa~g`!ctnCcySIWp|g zUN_SBZ6e%F+$?X*r`M78+jq!eo*!xTSt~K{Y9W{(yk#Z|@C}m{hpgL}TpDF#_d?WH z3+__C&sqomB_u`iinvxzcvu5bp5`nROm7C+d*x|Xtv8X$S35v{E7TXFyy{;emo6OG zL#X)&K;E5N;A6@@EcK1nc5-9l2>#K= zE$fU2_|?~-yPk3H165pP+;t9rh?fdi$0OsWZ`1A)!kgV|XYFQoETlwQ$E!YiD=RtX zq-Dr=-dSB4PoHA5IEcPuiD}-XJh7&~J5S{b0y64P`Ki!Sn6QB*eBXiom#d$H(%$k^ z`~h*bE$KjCjIQfY$#scGc7pkZ@BFoj>CQ^#c>M+PvTp{+KVH&9sBPz_zO)WtnS+#T z8+Y0tPL`gCgsc96KFUQ6OU~fcXjur}m5!e&v45^3pV(^h`ys~n{wmMmr*-mA_)iY5 zvQQ>oF-~`oZm{Af0-FX*Z-e|=j0NFd@L5jhj~jQ*^o}0*zZLWyQ{+Y5-ucRBZ-Vs? zM!)#J*){e1dBc%7Af?FmwgL_6E$PSO2TSnLa?Cb-(DUc4EY*Ql(yo-N}^f1D-^4izD~7m zd4BC4!^u$fy&7okBnT9#PqF2fzVRLvtwh@|0u_Kk!US5@&dA7?j#5r- zG_CgPJ+}zhyL9_XI0m4Zz3A9nvtD=9YMlPZt7jWg!7UqiCHbG<6>Jzw466H`R69J; z`)H`~+0qi=24P1q3{gy?Sny{^-1`vKT~dfmucTu~DCnqZko$sn0cZokT~ktGR&SOKHa3_6G`!)? z994@t86iwPhHrkyY##K7Xyb+!MR^?`N^j$kJK2!FQJUNcJH6q5$_;||4WY;|Fde?Tf^2(Ov*1s{*gP%F z+gmAFOZoeqB&>Qh;qgZB;zjGRN`G(}t4*U{FalFmN$kwdseB`DJ4EUzEipftFLSdK zE$ZhzeN=eK#o-e^m-1<~c7CC;Y)5>9l?PY-!gy~TCBKU{O?m^~8V}6DV6)=RDx(uU zpj?~aWjGKJ&?uBdt;bd}@%Tv+8oOehz%zfYyo9m+W<-^p_F=e=$ex{sPMONpx$&_4 zVcr?1PU8HuW{X_41oS6JlC)9EyA`USg86f;DP49dmVgbrxTT&M5?6hM_6)N?VfK`r z3{WRA0zD+|xlPt2uUfBLP>9RiI<<47Bynaz_y);)<5(uUH6E}foud5ge}%k;hi55I zb&28DQw-hD(-Kr^+KqF$m;gEKl$xeM5f`tHB-!!4O2WlQL*nZ7{k-{up>d+vj;p$+ zW{7#x+8owASso*8u|XCp{t~Jm-O=9cvBoFd4 zmNvGcZz9YNV-}u)7MN$~^u)VmD#%R$P?I)vTYLtdY`*NQvz7gR01WL+&?TN-Dy69u z+c!y?{m|GJT(yMQe@CpUun<49Nd4u9?40~M1iB|4Aa|4SJHKy;w~DT6a^du0i{!dc zNob|+H-c+|#O9)v(XNI9i$)vGFu?Ylm;|sNu3d$5mt%T(LKHx#9K9ko>^V_sm|km4 zq1xO7BQLdJ;bNe!42k%t?&pMUmj=N%Lj0b-x}eA37^yTBqH0l~|2P8Y!y)^!LxQO^ zhvSlP{V$D%2I^4}bm}J=g&T&FXI^6H^T9>b;RQqXT|J7-rdIe{Snd(f6c?H2{tm-> zRzHPZOBm(ty)JpAF4G7@G?X=#_y_I_>D7~{?<+^OcMr$6h1WISrTQNa_hX z^)b$w>E3mFiSxcou40qcU`HMsOCggi=&OP%4?uS=)g6&CKj-1=+Z9sc=a%=K!!<7A$ z9F(r~9tf^2DV$fRcvf!kr&Y{QZ284l+$r{}w*n?lM*Q~|=nBYTBUp*u=>n(i9{Vyt zzPJTtdDT8_f=<5&J;~=f=)_K|sS(9iQfmDuMPlz#FcdsOn|TM|R7+`xDI9E*_7$&+ zNd6*SVVKC0&;&Auq%pW6A=Q2Nh{Iu>F*#|XK^@wHo_nZKCy z%h5Mmz=TnGae00LBenAl@9bZV2I!A?1EGnU(GB#pE!$*=iCkhvx1_!Cy_>wqX2bh& zehnPKR4C~uO@QS-^sA%tCEF`!$aga1jj#MWA$uCi0Fx_Cary@!p^kE z3RZKP1$wnD4&P%~t@J-`p~FLJI0oC|VMU+)Z7Bb*5?jPXkObxE{U*|y{px;#X}Np~ zTz`Ui=%!$SzqG+2HMTC4-ja|3b&k0Qbzp(VZ^`sKd*fmbU?B|a!ud_iy| zOzC4+pUJuQ)_ytkb-}cMk=Qr; z7o|1JxnUns7MJ)>B>%05uwa(N)~sgaqx0XQwwfQK7uNz=nJ>$ETR~Je?W`KSQ?$(c& zAA_DGj*M%&0dNVLNUC2pUA|Jb>cP}{P@esRpG1%B!ZA2lmTUF*_R zM+R86LByBu=$Y`~wrngUPeC~)l=QQ!uTtEU+S&{>-FJj?iI(XE_H^Y~;3umNh*Q3V zNq(lEd2GB;4e;Z8SwMMz@r>Q#2SP)OL`9=}3=%#^Q_9I_c#>~6ReI!72_dEgn%a%` zySDcu8*2olySj%@Q(OIlq|p{BOdVEs8eiPy*?bleOrsH@X$c@|U?NmkKHLrY>w|EA}A~ z%dop0YIh+=y=CG;%$`xBwRgt&A3;TS)w?{|O+|ifw_y*hbb+do(kV|+rO+=)sQWdJ zB#4;UFT=0b|IyoToIK6S3bM;1r0!KV$a2>zYA{rSYh0$a9x2ZAM4v+dVP`#Crqoe0+cdiZIP7&1+k4^dkGmEX) zjsK4B{>FlRmHy+EJXgIUjre&tG$9E6lDHb54>kTX3tLp5hc~==cM60Te~#cy5q5^;xoIh4IW zovSYTO-OJPTG0yz{OWP6Ye|Kn#XjQ8kKMGKpBcR9Ix}TsyEVSXJz{3#_;Rt%2F{gG z;O@zbOuq@RVX0Sbo?vA_UFZlU^Rn-owb81JE6{LPwAi*?N)9}o_5)t*+IY`=#Om9~ zd&|=eua{0Q1KXGhfPHR>N?V zv?zKsmo;M_mdG@%PLyV;j#(^7T_%0uJPqPq*Mw4l(gsFL|G00sB3PuRd|!_yJ|`Y- zvZ?qPS)eo2+bnaXpFRY5!;Y~y`z#mx8)i5C*}GaNBpo;*wn%IV%QcSa|D)*K<67+h zKYm@iwrl6Db6cmayHqNjODAnBGK5J;y0xe*$4LmWYg;FTAr#^27P{RIp)Vn92Mt;?sc}V~>xoF%Ga6591oc zj{%J;>ofL=_kxfn+h`igw)n{*G-|HmvN;3z^0%$V2;XSuh@Y#w1;YNR-=LZMq6*KBhW=Fcb$^cvGph(T`Hw?L9QYGz)W%L(Zt z_?hvgX10Y*oOHkIJT^3>wUcfprcuG^&$N^`fZsRb$q#90-D9m5xN(n}(fjSSM%~U| zO24~C61pkernjDubugbxZ0`nb!;BkPZxwg` zzJa-Ja!H+ybnvGLS7>J>;N$7j)_!5)KiMhgetn7RSv=Vw^bar720LQ9wM2(n(t54% zr@g1Vw_T8&LLf!Ebo z8$u5xl7!Y4UwNqg8SLdy!5`UXdBwaG0pi7%-wWE)F#a2(N1q`18Z&!jtoZJCg*b=A zo@Aa{XDjkK%@L8ERXw8Kak53Ul~*jg_#`fcx@iN;56-g#&kPU$Act3SMdUfkSS!3- z5kUklDfWS>2bG6{gYg?H(2*>OFdg3uS}}3n42UBgUyxU_OQZ#i7s!#_hH&y_3@d(D zg&92fhNA|SbH{wCQ_kA&0SJ6bnEjqt??PPv({*sB`rC>z%)WBBZpJ%I{k3cC5%6)w zD7b19!irb-2lOmIqhQ?Ds&zQ4=Wd#$vjzBQfWG-Io19yqTXg}`gs_|6qDyHJog!Oe zow?w;Wf0b=2afJvB2~SMlL%DYJj31Bc>MzbpDxDOAL8=yZAGy#o8IwRYQ!(qUpiv< zMdycc9R6B~9)kv2VN>%zm?oF}bbua|fUh!0Pd53MVy>|6>s{i>IB_O(HxrhX;^G`T zJ2ZQdpYhej*{_97sc6Y4dA)_Kh!J^)(ob|Br*iuws0$@V4u29rJ*&M-CgB}j?$d$d z4$4di)Ff5u)ljdXXNQ$0puVXQU;^lU(Tbl6^`Kq|6x8=sGGq8&7GvhrZyD0GB+&YtgvN5+}dS}s~b zjJFsfhDzdWQ<0{&!0Pk|lyehZJuvcxpTeW(3K@SPH!_W>`1m?n^t4BPkQN&hAv@&~ zWX)V263ZZ+{*9sg`^*TPEICmD)nA|{b*kxmFq9SD_ei7{g&L_AQW5#gXKnCdW5Vbj zaPMP|mTDhz*vy`fLe^d1u-hErmS@^wa@lE4`Ul5-*}87X!3eIGR-KEL&62A2atW=h3ofVSB zMIjgX-SBi0ibJ*%7ZC>8P$s5|Z{?G`+GViG!Yt5J8#Mz%yd0rUAU;LvCD(>Z{mq%k zt^l>eM`Q0vqirD$t}3G@qN*-9ve2$_nUWL{Z0eb5*s(}*jJUpB3LW)DGtYb$4icV> zW|^Vv)k3;(^=fIHV@EydNMAAEl)#iQt*cAN?$e*&&^4Q^>jr+Y?=TD-C|Row)V*37Gk5PK zH}};#veVeof{l6eO z2v6L_h&ZdO!nOEX{um{q*DfTPu)GNI971-*NTxFKe>;a?jLXvSXY`A{DyuEURM>BP z)lY(3u925CO&Nc_LYobCC6iA7#BfhZ!8lvlLgM(>t}}M?r_oZ|<5Fmh+ObLuJ-1jq zcfS%$c^@Q99pEkQ4~QM7{b^9(B-K@|=Hjwd=o=;V`eXa9wS^6+9|x?qkR=oa+kGB6+7TR*kOMH5T>1^s!`8{P%hU`9+=ob)sUCgjJBznURg5dFUx%`M- z;MZ}`x1M)S^H2rd#0>uy4GEY=aSf48znR0s@`O6gez)Xz4`ZqiBfPK#D zsG75&|HH8nd&^6Pdn4Zznt7|xA<%RE@9&pr=RRD z&5{ED3&eSOn8slN`jmZp7YiG6H>w7#0&aPUonHwL<>Kn*MZTbN>U;j zX|7dhBdzmsV(Qsc@X86{kuuRRt$h>mFg=1=!L8(n3(4aNFR78Q-w48I2R6M((ri7- zs9gy(pJW)D9&<#`&aYK|vNX8H@{gEBQ}gf_NjUUhM_QlNMguy&hBe0S-1!Kn4YVhV z29H56NiL@JqPtWtXLbC4q8+I7Wcf`37lEJcM~g-jvMuDkL;kO0f{{l$@O^^x#%KR} zc~X|Q-rrc6asq$BgbT{wJ5 z(xGvN9n`KoAfk-gW&oD?@*Q)Z0J7H(ZgmAnyT2ix-mxv-)Mg2n%&wZWQd})$Nr0ms zq&XO`k}C95C%ngspJrLy(ETZdIe@L)IQ|``DI&;8%qIW7R${obkSgD6<}LJhizc{! z81m19$(QO}+{u5-bpN*Mfm^}M)#DphD{U_DH!4Rw7@Cqy1oo)01a>FHmn{6OEubBK zQgCh~Jk<-Tu`1Yo3JD63mw6Ue}V?W-r-7TRnqqMHuLv%0Lfkc?V90Q%EWr7-!^KV)Fk^t)w+g9&(@@6YU4#YNQWHnj`UVe(43ZA( zi2ihpeLalSQL!`~XMRrL8Ve_R`3IPxjYXmwU7Uf|XB~K{r4z;0(YK zZOOsZKan==Y~xD0wS1wcY!5l_oDWoe5p*ztFL#n7(L-R0Smm=q(f|h5U%Uf} z%6}%9gA~QbJIL3A8TmH}HT}fJp-qgBse~qC-DHbucGo0gr0K=TZKKajj#=0?oF+G` z3m|I^bNPL|!R1qHO?=K~G;evyhU6OHkkE`)y z6b}o|2Y&8W!fX4H`{TL7ky*EIje&nlarbCH;H6hCbST?shAylD4}3b?s9m}T3BGCE zPZo9m{^DN`ns|9<-X9v&Hgl8LUIy^JaBiYkU1=ReG>lP+ZUhk+SlrINweA%${kfbv@@bSl$BN-p_e?*rAZqed3~64c$1 z7WCk$}P;^UiF3?`D2Wp_dmGC`u^x~=nO49oF3UxY#Ag0T~eScZ8&hB zu=>90;2SmjNIG$fV~vRN;2GxXwv@sDp*;`Wom7Kw4pPFH4(_V3m1dE{do%~*x%Y9( zJJXfWO6f&8u&14TfSuNT)H&}WPF3^1B+TT$NZTN_!obyhwLLjNePo!S@d&790TVYP zH?_y{Y-ymh#a?0l-3&x@9tQJI+FD1|9Brh;#C6-tGr^2P22R$*6ABNGU(h}x1(bG{ zi=O=jyj4;6-P8U}mJJ?KeB%liEJMzlj6<}pom57epD|%XVImUTS)ym<2 zBDYh|W4f=<;seBn7&5-XyYb#X_N623*%f^q!THu7nnVZ&(*9XEo1>%@Tc z{+uG!2h z>DFCGamyt|yVHitPwyWT3`};A41;HZj)?H?1uK;_*fia`&zE2G@DA&G<3~Zws$Y(Y zt4E>UFKNcD9~H_iCHNCeIqM$$KmT&R-%_MBxpCGsxR@aE_hNCn@m|~E4g73g+pucS z0;HGY`X$msUK*ff2@7lv@=2P`(~q^6J%uA)qE(Accks|ZZoB_EY@NqfS$@d3)c8q8 zn78b0IUZeI(Z*jMba^jTR`^I^*uju=0AsC;Tb)23Lvq@_Cs#K0D44iOA#3R zVnMAwoyaT;j*a|PS~8hEp@=`8nm-McKtmRD4DKYcb2u0vJS&wF58Xf;w0DTk$?8s~ z&#Q7F^iA9FfU$jrL1>j{B0JpDSg9=A&J$09Xm~!|uFfeP@mYcpe<^D2wi;Me_cf#B zu=C~IS8DIcawb$^JV}&?=c+CDykRc^QzGw#+c80iW zoHB@=s3eS!vp5i%*Xia}EVLeEy?h~l+^u#DH;GOJ8soiX8TfBWJCnd|G6{G1 z9vcVQ4YlHimo9X_RD>sZN=5gOb^hTv|1UTIt#UCrWO>v?dsUi6ONhS24FdOA4(=li zX1V>PyaPP=Z0s8&r!0A(2P!5YyZ(p^BCb3|kB+1SksbU|3u5Si)Gb~!CqG{Q{T{m4 zLK5fDJ`6pau5^5e=8-mW+C;#IsqR)Ki-hBe(T&YObF${`$MlUtWiTT^D|A!U&SA*& z;tm}`d{Sj)am|}GJCPPZxFSxu8hkl{{N)^u?d>^;F#>>TgPL6M{MGbHnpSXoFW8_q$bPD=q8Hl@(yfALL8)x|K66l9Thz1AD>zD-5@4IlnNFPzwehe$Vk|E)H&xg zcj(wT44uwO4uHmpDc5yGy!l64tT`>bUyY41BVsDSuI~i}0=Jc&Eed@XQNOwapoXU* zkD8H345W?heqHpRG@&F2dR|LNqXH{yM}O0h^HknZcrm2f>~At07icq=3Pdf( z5NE2vbWb4lWQ15Z0=p+l*D|6{+S&-v6|>5<+joG`>+Vq|O|q+u$5}AmGCni^u(RPD zx=5=IU($qktXDS34^-FLXd*SOV&`oq}0e zVwmuBNhMn3q@UTP>4&<6gfpZ+@ujYF4H$Y{+iPE+KgM4CvQ^KZg8D>fnUZwgzMQK) z{aBUtfGbLe{{+aZlGQC!lHJHDF-YQ=ps(LwQt^X*_;}S#mm*9_ddT=?gRvx5uypE2V#+bEkpr2lO`GN7|SNxg%WU1!& z8(yvTPjbj5TF4RGj@PjBo&KF4$j}}y&kjb%wphcTa`fKo$5$2ITL4`*^$Z!g1x29Uz95i{?3>eU(*EHqO||#C2KZ z3%``-+`&WtwrU#4F$ws0%fU|v>~_Nlyt?Zmp{c<3dahkk*f#8UaksrJJ51ty+g)Da zEIih_be@S(QSvkh-4EaV@ZBDpj&G~@%h$^L;1 z=U!L1t|A(K5kL=Ie^Zl!QIm$qUV}gU<=n6I)%urJ+NNURNF^89LE z_TPVvNh0L+LBgns+WgVuyFe>^kS|KWUo;z_ym1UKXB?8&v2~L%_aSAKVzf9Z&p7v% z>n=Bw(6{3zKf)t<3u0M0QD~=pYvNU(`@ws@8#>Bj#555q_i*{^J+0jV{w_)1yjWCQ z_!QLW;!Ca>l}qBYhFU#q&QW*#8DEoTR{v-3mhnHRZWTFFMofgv&unk$5|3G9+jWehw@Frkh3rEF)n=)P|jah$k_c*C;U2b9a>LC~+WfIjl2EWQRGzgBde z)I~M3$FCQ?@YV*G8=vseE1hdhV2SZ5)G&$oAlQ(&4~$+)@opDp;m<<@Yw0OFt4;vxbEhDTdSVo+8{I+XmRBqeOiVE9GCI6}F{KRzd1}6zt zzeqLi<{4Ic^fAV{VsqRxgi{9Hn|II9!YFdlV)RKiQe+SEhUf-Gg$^9srm7guhg`1zD5b>L)P&UTXO+ zu+hrS>#Z55PIOh#EJ-gX?d;nmT!^K2<9Yo$^{EBoU6gZJl^Hk}2^_d-^sub^OsF7S z`@y?(21vXR+nS}!4Kl0gd9`F@JGWt>L;Lyr!}Culsu22 zi4U#OEJbEj#2w5I6k6HkPP27$3#kIK{fvDvvTPqW_d#TgxFk51e*QJ)noi$mruw=I z-B?)FS3+p6bjCq0x~(uP;v*ET@O9{sA9q={lq(z2i7wT@odP~HLx-M9J&Ge zsrz--Tzrok{!YYoTF!K5xUOX!yGL9wnPDuW(x!?}Wfq*~;1txq)ElIHdkF^b;hM7w zLaexGHYqHU=~Jn*^>q8gTJ1QF|3CbL%O?EmO7xt7pXyxWqa_8q^>HdrTU8ct+SXX= zA+ad?9)WsVt8g;OzZ07jcKUi7ue12gqS-x*e}q|on$#5l+BaibuEV8D>z?)EdGL4? zU-F$*=#Gq%hKBLr-|-7+qF^6|?t@)>73t-D_)NRjO{IN0sRqw)B6};SCdFYig{;Oz~{=kVm6QC$(th1bJv2>QUQ_0hG(No|tC{HBtdMUD})|arJrmLXmdXIO^uwzGCkk7##_sk2W)YK2taaLMZuaFsJN{<(w z=nxLaBeqVr(1po{`DBBU;&n^(QRGVZ&XOLwfT_M(G6C;&}x!;J#h zbaRMj+NI}G^q-@}+>W!D!E&M4iok9jRnOmH>}M>2niR6<#I<7T1DipfWX-Pu=)nVb=#y0bw1f|h7P)h@p~B|_q0dtQ42cTt$w9yRm%{b`@%lp z?eeSweW1Dcz_SF4V00HOKE7`|xcH1}ly(Ng8Y3M_a6Hd6abZU(d9TTT9U_lhsnm zO4Wb3^is}hufPT!LvW7Hkr2Y_a^lw`Z={6#K|ZFHRD-$k_H7|^hMbmxJPZnmQ$tCo zkVmb+>&FzQR^Tx~H%fGf1K$N3E}At{_T%XSrvxZ%%N>*bbJt}{kUDvVF3wy#FIf6Q zC?c+jQCZQg>mLG(9^C_W(u**Iq_Avft%iJHp;10U-f5j|UjQy1Cp;(&7B+8^NO8!d zrCc7|=qo&PLKHSuT)@Li56^5&AyCX*LdN*;PIGZmt%ARHS2;<2H#q#Q@T0;2c!=3G zuB>+UnaA2}cG)p3uImmkbEz@xfkHoTLV}@pq}1@+qG5WmrPTubDe~}7je@JY#@RQO z!{G;4S>T4Y6}}0Y-n*?DQGjHNT~6&d1H(f$28Gxs9aMjEg~d||JsF1hKO|mA^S}jd zB(ZH8(mo9ZoeThzo)^H#2&+rYlmcm?WWOl0(27w*B`iNQ2Cn%z#E!h|&=mvXX^o$4 zygu8!+8y>~PZuualeb({&5mA1JdG>OLZBHX_*eDf96$7-qTp@Sa^3g>%Rd-YH*o|U z4Bi=`A8A%UJHo(M-!nZm!P9Vr!tBFvWZA9*+{KfTWnYA=B$8L)K{eXXO1+};1)m(k zgfq6guF48CKIlK|n_v+6iya+;0LmyvNS#{(xo^I7G497}@dkDK}-nOFjCd&9{TD1{PZdY2XA8*=->o}bdPwiKKQ=zG(TuXgpz_^{Kw*Dmjo;`4;)67t$j=N@ zy||#@d)kPeW11Ll^()epabBST$~ZtF*mgm7ZJBRNxBgF zJB8sdcAwbb61xExlaoIW#MR=7k-bo}NV-nQg$@JeI9Yp1arFfSLnDJT!^Jvwc6(f8 zjKxCPca<&1b`Y}fzQQ!EUZ8b+=(@KR2(_}=_*rZD z?6rcwjg+~q@9P{*lj|;7Ubt$&3`Mc5CY74*P(u$W!FvFSY;Z=KfzKYW%#}F{@2>A4 zmaWx!=9!B}=!tR>16=>rta?fVt*wV7mhs}`#$P{>iK00C)79PA0v|3TUl)u(tJ{_I zIhy?y{O^yzu7QWG{kC}-qqA#YSWdIQQ&>%_brA>Q`MNB=S!IVWfgfLJeY~>V9J$`DbXS1 z{2bW*A)a@{biEX>L1lcD&Nz|4-g?s8Zs^cg1{DG_A`$SkaL zpWMfeYg&$q@Lgz0WAi7BVLW*b^@%e>hwjBXL}`Y|Cj;UonY5L9Rpb~76MNol^$-`+ zIetdnIBA869Jz?#@PSka`Q+LB2FX`vIxVoo-$bWhaGsfkZm9v%+H>)dbFXb|DTY#wKHKxSv(df9d z+MCaXYSEUzh1nI{`p=xUcevlT{So#29}19t61@5Wms`e4j_9~7n_y#w6S_d;94cQ& z^rASNT?&WAD1wwM_HX+9mgYvLpS|leo4$#LeInUS`s#K(-IZ>Tf&n+xksELx;{SX& zu9+4Y!XZI!k43ogyJO;Mb>j$6-WgV3noe@L3;7<>&d_PsPc+O+Ku_Mp@SoN%;pIfM zh*-0#5&k=^To~M~jhfZTQO?LxE>{HQX91xIez|Voed7IPmLkLfp3!#tXNGoRdzz4a zInH4TI!cNGXmyEB;g|2Q8g_#XDbyNbU75Yj6^vgPUCSb0vx~e6)AX3;SNpd#i_5}| zp25MQmS~n3Dm%)xE5dtZ-2Ar4hF8!>^<wpjX)3K?bs6Fu{2otX_0un4*2taBd`jW43R%5;$Tx}XD1gOn^dG&iQ0N-bzaiN zN>cR=d{~qT>Wiz4GCUVTKiG+U68llqNnGPLOQ6rkPPlnM;qBdrOao;^mTlcd!N@o1U8>%E~h%$_ym*!hHO1j1j zi2yzh)hfN$XqKX!uJON%WlvQ7KC(^0`qhR5&bPNI4<3(u@jvt(FJQNDlU@6E@bPqW zaXn|>V=l)Wteb!<5!ssQg}8SaZ<+d;n{r&->ORnaL?k%1Rg!vdC^TLGIne!Du<}J_ z?Jt3KvQJ+?gp^Z@wAqI6V*lgmozeO+`b?)%$v>Q`F9|GTKgUCQmwxL!x#I(P^f|^W zC+nWs^Q#jiDd48!Tmihr3lD9XSrNv_787!rvFtUhB3kTlTh~ z?nSw1y>0EEq%&F$I*#KtQ+0K{k~L`*@{7iRPn=qX?gUQA>F04?eKxLw(J$j#HUFr% zXlAh2D&@y7xD5&HnPj+WLbpUN6lSvJMB5PK9aidtU-bM!dN7o?p^RGgk1%^Lw`-OZ zyy7NW)WnD4@ms;#UYx_=JCZhpQu8i`)L7FdI0}!E*AKXgS}3zl8=V-;Pne+}Y<~q_ zy~^QtQv;7%wuKcxjWR|uy@-c1Gr+6cUB5R|&d1?>niuzlU-shjKx?ZZOgE(!yKUGo z(ao(c6&WHm#C{Oyy(KTK$|B9mF%s*-x7&R31K`v7rZX(oRsAD#4NkA69sDi` z*`y2#aBG@q+zzH{Gne2MF!E| ^lOEqO5v-qa;@e)@7tHXiAX~WXU@KMlQ*KDp;mEjKI-v^ZJiM1&592JgfUB1cHMY;vrL6f ziFB*BCN=l*-wPXAHfb6LX~qH^=?_h~M({fgy$q&JUyUj~4WB*wCU-tgyQT8)Ay4(o zdu`)Z-A<1DJjj#wQd6f>e_7Ww5mp)lREJgv2?)gET}z+GzBdxCfCExc)W8Tl)%>?phb8Y%JDn3*u0 zr-hl1d9|C2aFpr%3`q{~Wu%+vXHUAuwz+Z}A^#f?m?Ju9PbVyW!*<_>{&=h1pB16q za#1)aQbnbq2QA#()vAM~mk6`V#)fU{COUG~piQ|Q{Fe11zhT;Sy>mwe6pFVy4s$DQ zg;e&wDA9o+*&5THZ<;({0;%X&BI#TWpS#DlBZ7EALYRkV4jfFr^qT#xxauuL)e1f? z(@y7_^zJo@L*y7v3AnF-Ys?%kacQp_{rQfaO#Y8&S0p&A*?Cgryups82PtU1+NorK zhf`gnY)~a1H7f+@mPyL5()a14LqznRy`yPXtid)JJz`QKPW z&%LFSF;dav!P^?h%}j`z>y&?1V`W#y(%m;ebAeg{;ZNJ|n03Hb<)a4#m&L@CAkwTf z<6bkK_lgg$Zjd7JzHTAAg%jL5Xm*CSOKDor)evUU(|f^qz>6=yD+=W;lv@JJhIvrF z!rA??iVT~v;v!clkL0`Z2@$GOGcWz%B{B1i6q~QcUMAXUR2ZYli#vbt+B$$Q+cSZq zf3UoR&B3ac<&SQs8pBB+urZeofc*6;$*(`dX!D-<`oAGwN5#%(-kBrJ8cUOw8OYDOc^Bxy|_DGR8km!4!{y zS2xHXYZY6^m<_k-?HyxH@JyjLM~Pnt1L@1VklD90fM<^wnpq^THR@T%iNAjeCOc;g zN7uE0JFM~hRPn?doai3juogVONGtler&|!h60N;U^xO7rn?xVk1LFK@9FMTsdb3?Sca5-U)@d|k|GtWS*%;2k}i>k6+_WE=93x5jkDEJFh zk00YUNKY*ZY*KVMaqk?#Tz!^lpLqvrS5W#svh~v;{WYrL(w^^vBwPKT_)BTK<@4k$ z;{UdCbiKY_FOdba1B8w@aM6sP*K|>~#bkB6a5W!kJ%fx=I&YYdgBw(lvI00n+e~eE z^_h;h%=5S(6k;cJmfdZ2Bm=*>Z6bxdVW)Yt62~vql7Q+GWggE4!}x2PaiQOr1~A)0 z+@=2LmL*?^4|Gzx;bt~kM~QK=aM=AVW@{$W<7~iTnU!#{(_2NKd9K_;ox4Q1S-6X2 zxV6ayr^d?*o9{Iih|`1{k!Fe9nl46I7s0E?k!<_=5zDUK#dTl#EF^b}>$7^~kGF!l zFN2o#rS_H2xcElUS$gwgc?99}O4Sc$K!b4oxL~?t6Hiuw%hZR-HFz`ZS!3Pv{CE&ORn;w5z-#+Qd$YM;4SL{ZKO7x}NFh>(vT8 zKRDo=Yex>}^PxwLqm2x7-5-l@ZoLa|2S^7mYIk3$(F8z!wfaN6#p*~~?Tyo}&&~#b zQF_dX%gX9+=LC%?OA<*coLKKta4J*mLF^4J*`obIk>ICmXCL7ezEt~DM6*%99HTEv z|Hb>bJbC61JVPXi8Qf}D_r&=rD6~p@;&1*{H(MB`Kzkk$+zQFb z+1o~G+`E|tr$l`XU`Fm3&oi`rTxS=Jc~s#D@?oUH5g1l#4M;$7h-jyh0B`4{|d zQw_nijRu_;J}`ovAsfW;4L{7S9w7P~mlfC~YUa-1qQPtNs8bE@1*^7X(o*CqjE(cE z)5DCkTW^aQ+Ci&`ph2T zM|;_@Z=W{_PENv)vkqi=n#tibZvAlnERusmyvhuY@Ov>Q6uwT%f8z*+&r!uc!Ggz% zPrJ!WMvKcyIiYzuRvp?8Fc+bs#7(e+(SY5xzqXIw&KvrB5vIQ%@de7DaBKH-!h>FFZx<9c z_2FbDWGXH%+edW^ImSV4#|;fc8f4b>1B5J=dRzVP;24cJAt) z*e6~oeKkt0JRl{xXhE8_3F!RZ&%4s)kSY|m1!Pc(HO8!h)zj1r0`hBZ zYzj^^%Z1OZ$Krmt$;x(HR#tFvg)!4cwGxGL5R$Wgy8;btaWe|thqab}fLO3~bwb2)Hlh5`TIt)nC z;aotr(6gqp*EXv#Ynx#u#gsyjM3PTc98XhT<{P0D4p(|~dF@?cgk-5@1CieMb&Ynb zm*6(|?T_AGTm-$Y;O_l3hLv6cmX`^G+vHFbB>|mOf{G}8LYwd@!6L`049x)5fdhQG zKT7yqqx|S^;CqwphpeWEBL*?N;iIvaW|FR}Ej#2$Ye^iQ#-6kb9k>T}t@-5`9!Ghu zpr!OMZ>g8F8FXEkd%Qg*k?j^yW2R&U`+j~CkHpHfby93l0 zc7x7E#Drz&xRTqi;tnnhrU#1pqh%Wid0XMPE2N%|$=%9GAv$Y9jTN~Qy8eb3?M5y= z{`i|h$f^TFRks3=L8prd>t9^Fyvi5x9w(l52MEJ>wQ=y@8flXn^>I~Ry=xxBe?Of9 zn*UKCZfwnrzg*o;q3T?Y(9;1J!|3HZgb;+@oNt^|&nPwRW|x4^j{#>clHsWwuN`;sAu8i$o>)?Fq<9d0#vv)ZrVE+&#T2q-&U-YL55Sjsq#ZA~Bg@r_;Y0)LzF zW{CY-O*%XdBQO5cLOHJxt^J9EtAvEpK6151;(PU{xT|3I=@gh!M} zzb0}om}rL;vu+^G0kFIPPv><(FCJ3{xV#&~5fR~+t6p(}Kl&qM? zP}0|cAk|>EGHNkD6pcz#9vdF}G%+MQSoHzZw8HCr^GuF@_w>ZC8ufxXxHT}+xZXlL z%36M!zj2>*E97B9tf9I%I`=HV?5kDvyF*a*!@EGlhl9tDSa+@c4Od>nzsSojd4ujl z3`l(1q3#ltdS66=^Vo2TO#9qPfW@*NsEVm|X6WjDe6%n{%0aSxM8&U>*T6O9zE>@i?NJd=X(u2;^0&O^3XrINiI8 zlD1&dIg}OC;-1HA&P~SyI2+m(;&tRQBl;vTIke{32zlNQUQnNoaqACi$F?Ez!g18= zbGc(hm(KO0#dJ_FCK;gab3F+vg?`Hj#6 zdYCHg7}^Qb1^h2$qb}9x4Ob8IpdP-jBs?JY`F+hVPM)OxRtmg*YPhaMwMlsG)>dF=$9~b0?K-?@Zz;QfW3p5ruPwk7Bo-?tYurC zDU!Q_V;OMT4VZ@O>@?iA1^)s028-w$48QXYRur79WHmLb{B_m1puB=2>fs2S zoV8G_B9ndGYm#vU$uFMOQN9(v)HD+24H&1}r{I;}JsdOnmFf||9ls<4>6sdD$_W&^ zg1%l=j+;dD)meoV(yxT!V#{2%lf3;6{_Iu*A(wvP+2eNW=%yB6dpBl`p9m30i-|7b zmHZFHyl`KWcAd$aSl*4{AND>GeNjAYa-|yVIDbVGqbe*@`GJiNH?^kU(E0W%H=eP6 zi2k8g)rt1d{ZAspHhIOa0f$ssg~`_nU9<3f#-w^4xV!^n`a?tbmBlrW z=-6l95tA&hbG=6E;x9!qyi9i+6Exfzwf`~<0BO&lu90-uz>(hd_=}(paS@VS!*Ado zo2YBX{eBg$q;P$VK1c2WFLqgsU%0q={ccb=ZxpmE(?-KLUlI0Maix~bWB(h%trHL- z^3h()eQ!j&7H1iMI-zxh<)s%1hgKr-ZNk$;^`X^Z)U(gpxmG$I^l_rOu=F4G%U|}9 z>lh9bh!x~nYKAfMxhDD^<$JF}7K0>BW1uYSYT@MNP6+N_+!VV!$W+*0Yt82h-5MFS zO$bNV-3a(~a9o*b@v@WmC=ZG?wL|QM-uHloF#Q#oNvCQ4)J6}nWqx^Ax*co(gO*EF zV`PVj3{@T>@jqeKMd4ajj-!m%&C@6F@+Mn59W6CQkFeX{kZli_q7ALYS05>d=VTIh zRjMKvqW4%GGc_=+<`#I|tA#kjr_}JDrS4={M$%zRe9BQZe4Kk}l#0o^luB zb3TDb2XcblJ9N$*Q-7{>NI`b#|G|FV3Hv(%Vb?L`;1cygaE!DuQn)H{mfr?g+zCey zeckSmI3I;{3rX25vj47D(HibkQpXcWmo`6wCDc`N z+HoVrQDUKM%|*iQrILQ=e;1JtOq<>4bm!cYgzEpmI-Bs#z^iYxNB(FqU=BcL%^rm! zOQ=boRBgPPKS&dPW)$M+$N>;tI0If+7!bi0)s2nt%^2pO-5NTO1$J3pga{;eM zq8C}#FC6+@ z=%8)l32!U2hD5=MirZu9z=R3p_4r7a{1Wv^(tce=^q+u@&~veI)=g~Vczr9X{@Wba zvihLH2uIdzg>OuDc~gTcEzI=sBcdD}U^=1JPopra`t9jZMiHZ z&OI)M{r}@TJG--&w%uyGZMWT&O843%6+2sGk*v!%q{Bv+MOd9A#NJXkVcnt>lanKk zOXv_Mnys)UwTBLsXi!H;R*|l|zxn;yA3!&|A-B5+%P;|Z#L zS;{o8=}{M7Afx#}Y<(+tgtECWSP`uPUc{x4POZXMaf#GFw{nn+kBN>~^xBMeV**}r z{lE<|qv44m=S-=!6j3OF#Otcm8sV+e*z^7}e0)(Y6w+Q1fu>goj-<@|qkp`$8w(~> ztr!&ezBZXySs>0rM2!3X*cyr{_)?VuaO%}m;;29HbGj;aJ?UhJNdbOGdy&c!h|GO1 z=xd$=_88)&D@O1RQGFdbxCWv{%OZ+_1xCueaIk_;U{04&Y=ZZ*wj2+xd&UkdQI6j> z;hv1`GM~ba+$meok7mnr6@#H6YqY%~`zP(X(sMJjIIbWd-YtBB*B}?D?tD|+c31MP z&C2f^ST}ubtD3D7<5bUV-M6XIYKtVB85(=H^ZXVlT<~6y3|k!ACCorlny+Z4FpKlG z>S}!?VUWej~Td=yrwATAYJ7)V#{gA5&-Fb+|tZqIc{# z_eMAvs;|Y=Hp;9Uw`9RN>&a&&jP&E8-xl%}zU1zijH=IUg9BT9!USzzJ2FH`ckF>f z#WecoZusC<+pN$^9PA@M8h(Qi1Zpl93`oC)7(p2#hh`vyKl+{crNVkai|Eon1%D#{O!$J?77|)4e^u@fa?VEU->X?klSv7V;1!b_8$Pk0}1^zO=%<4E_-u&viK2s z(RVDhOB=u~Ao`&-uYU z03DbF|I7=`*6st@)ki`4CVduDTu+bO#n>FI_)G0jg{TM{z23`LTIJam@fM!u9k5#Z z!l?f6&4h(1vk4_sE#0VQKgW4sI{Xy~%YQv+@Rw&XUc4N}%&?^?My<4{<+M{0!BVb?e~V z8Sbm_FM$PIJ=M0N-bl%5nMJ8c`pHU=1Es7^Gvc#@iF(C?#rk`@M6Hxev4zeL%>=?b ztlOR|&b31hH`L8l>Ty=3L7n!-#1J*o-Z^Q4^i@!JokKEgP|DJjh)$M*~4#lK3Dm1y{we*{fS)aMzy+a;@Fot`=rXc;LAB9RxEKbajIoZ z4AdS>7iE!pojs(TfRAKE`|ZqIPg(pyvVB-2dVH@*j$>Chjnog*CjV3V+Km1rOF7xy zbm=AC3`pO&1&gLi049BtY!;ZX=I6P$o`ygd+hIAQW?do!QIhqI2axCZW<1#6P+&F3 z*^4Cn8K

    2*#8o6rJk8}A6+W^0?I3bACQE;8 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�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

    F`HZyA#ec_+CjSy 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 z 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

    ;}xw&=Q%CMF*XfSX8M!5|m!bFHfp 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�Ox zRBdoVUvau(WV?@%KE(8FT@z)iY!huH;2OUZQP3=3bC0>wr+O0AWi6EXrij!U0RF~T zqGjAc3K&T8MJJKVdjywWjtYW&n;U^|8$}1H@-A<5gL}n&TrAc$=mpk$HH#q`8;LwTwvN3k=Jr4FIcu_8jjOl(ln}O`Gg!4 zsq9uYi;0k()57t*`wagMWWRB_@{6E+8#O2o3K2d8p4ZcVPIX_boK-|Hc=;a%?VfT| zQkoOOu5KOYekmDOfA8MgASmyIJau9|wPT7X*;@i7t8UY*A5=CQeK8InC+PXS_EQF;(Y3GC6IWSH;~BFb=Bb&_*cY;!eVmrp-Pt9&my zyS_4MNVNBnA}WQj{g6+r;7P~S;9Ams4gyA@qj2 zM{vhF@^clE5`|1otQGA%ya#;CpdCtxj53hVSxU~*YHVo*@meDVRQXMOzGDk;evxQr zM0liFIW%L!0ESwgp=Mlrr)ZpJ{2hHoiY!n51-2U}gO@vK0#j1){=E+-ySj=$Zg`pkp%r~?m6tRV?_hWjeKrHJa#%{yaFH0>!it@p*GDQ{lDzg{R*N9k&Vq%p!}DQZJ+Wo@k%xK zE%nEJ@_k3ydsk!mQNCXCNT47xG}}P8-%il* z-w)GT3rC=h3k>A7y8J0tR$ZKXN6?h@3hkkWTC~!f^l*k%sqOzb`NgpJKPAZV=JwvAt`f_bGd6#P$dHQA%{n< zToLfzk-1AcrR4ahq@ZOynQu?qXPg-8$yLEq(URtVZq57Nm%&nSz-p>q=Ynm0j-wHq zMc0q#Ypy{h3yVbE)62`dlDoh$H6t_phv1U{<9rUoLOb8rif#kf3K(%G$+LL2^#>Ct_QF8=jA9 zzi?JQ-m+z@a;W4d`Q#FH(6lfmVPf8j8xe`YsCs%#bT&19n9C1=r+wq`duL`g0_$JE z(24e4!ZD`Uj}@lO9;Po)xb-s$TNN`|4bes2q^Oy$y|uuv=0#ZInr7nWN8mjZ{@OT% zW`Wj)!1jt6@H!L!`J7eO?0y?p!w9^N;5s*lVQ@AoVDN>sv>$xlOx%&?Kz(FYD&wbs++@B-~m6CV9lcrp( z5QbI%$G%7tcU#DW`)QfCJgN@?7mpZx;Izcff086cY>##^?fFE?1g*D0Jt$TWrYc65 zwgu!TuE1OUgjM;>1}$W*0|Jcr_eivGF<5d5-9*7WoY2NpFk#XC2B3KV|N9w+T2!fL zM6-o53mQ=b$|*RgxqBAPV67?zY^x2!qzt+lSiKM>XRs==!BPvrx@Lr1BK}0Vm`K|p ztcHKqF?%x!qnTIOIIZ*$b(H3R%E6@?IF}2nlomcJQvTea>&~)ZVjz5YNmf#01pmaB@Ny18&89eyj5?+DDlTYH#38{ zSVXMU(UYa_BTZQNVX0U`ND2XxD zTOYx-Z{iBk`ORe((<^$%SwHqEO(9(;rp;JsM^vI8sBX@Y11D$y{iVVO9kk9iFp4LG zyLQ!w+5W9rGx1w9y_Z18?|DQ&Bv|>G>RX4B?bZ#CS>5DW26d8{vC;{^-kUNtCC6zS z1VN4Bm`l2JhGW%z)|aVp2PY_ouo?*pK9x<);kVBaTKH9T&~CKGiv0e>#d*)fO$&6E zfaFCY`JXuQ{Tcdq8+D=K`Y(MVf@y#LjGrj@GQ#=ZSF0ob@h=mVCp^TE8u`Kqls2;S zH|Sb7N_y9VcGsW*a@VLUq(=l%lZTn6(oA*qDe48#=zj*<`HSy0gCX8mLJjl~Hlunw zv_ooQmI;q=L07kiSJFMpB4sYT);Vz1+_EqGh_)9Pn`=}&K{>vsGTYqA7>}qwO1gH` zyvJVt>x@b38PYjWa?CgeR339)Ni4|^M+N@>YFDLclo*aJi^I&v1jXsvQg`{GI^bYb zqo!F=NfUJkvNkdWS^i-4Z*CDtSdoFan@XmY#PPJr`pMPD=v%1%xX*ZAcvN_9{-5w2 zLSDNA^9-x#qdq0tcL!twH>l@~;G!X1RcDjsG!fRgW-kIw zae5mOEECnLIGw~#d+Q<#KlxqTKpWNFK|zg-ZGN*ED`C0EDd+!0A74s5ng+QvJcme<{WKKgez;=U$(w%(9}N(z1*w z%ITm^MU;ISB`?4XoMZv~@{p}_t@y}1O;Va?aT7C0Fm-_loQ~7aZBV5_887rSCAUR>W z?F0xE%I^7vC}_vVT5MfOK4M>HCUlZf>@EIPjC@N#cQ4Y~t#uxb@~H4(9!OZJCflCJ zvY;4nW0e7a$oA|M^-?X4DPYIF$m6Sg+*@fQX~sqW65YekuawrS-BEs&?xv~y1!+gi zO89&_PELOSc&sx(ww1;}%c`y5Gyfj{Sjis-(ne$-xCo%W_h5X@g2PD_L|$|&-Po$~ zDzNGz^XtZgK;MaOvgc2V#}lgEA9Ya8l_mXt+_ihtl4f4x!Ywc;M?Qzq z{ZyAvegx9}#tDj-1M^-yy)aeeQloQ-K+mz!$}%=DGKw{5RTT$`JJ zN;OF24{fy9%dwC_!Fn&(H3m{Zs>tqSEjG^DG(HZx#Oj5X0}EXBq(oe*ZpW%n_PeQ! zE5AerX->f}r08-jTTymQi&B_(Y)slt4^!v%ASut>kqp4vJdr%dJ2@BZNuQ2=pWd#- zBDUe`Z#lKd)B^YmHQAG3ZYCs+3RXoECuUA4A!~3H`<=RkKHD36j{vTTMJbe?f|IyH zXcsTJJJQGP>F*EIXqO@9MTbN>k%vsU*W{~%JmN5;)q#BS6@rbjf)4S`pT6fww?h@S zz_flbfipS#UC_1#$)KHn4&7m8$ShoqlxxSI3S=&Po)!sA?o7@pIIlp|DWaVQ(h22z zA1u3pgLwpN-WmV{Gs zt!##~SNCjWRh-6d#Rhu0$z>IA& z2ts(2JE@;$>bvB63oFE%V)@qsU3P0BK7&p4(eHF-rY+vK7L#Zlr|bheg_lQ zztgiD`7B~KQGZ9YLk*!0zh{Egrj&D3d4XRz(Hx!|yl?unz+v<^w|e1&272^vX=A^AsuQTtD~d1K|a74^SQ*90e8F zixzH;jEt0(Qu?{&8^PZP4HMu$^WZ8IZA+dh7Bm`GJ`-ABn?+kB7r9)M&g{jFSEy3m z#VO9i>nm^_!&lM;*8y#p;S)o`vtqMMWP_=A(|d(v0-1abEv9q~K}L~izjKsF^=8Ib zbGV4m!l_#c{7t)t z!svAh|Kk{zL*u-{jcW;B@PGfQWorL=z5{{NasQ=uzn!A$GL_JM!h?QmaWdR^(Zab*nrY^u!P{KF#6H}u<=&c*lX3ny#p ztmBORL=XOlo}2}yh|k+!yC(89rS;WQ-Ka*deSl}eZ^YaqVx4HcnDBg@-HK%9G$*U0 z3n=!Owgu$;y*WYX=Zy<@S=pAmz-|hHL{POHH*u$xr+dLN1|Y zX!e9D3_0aKa?`vRQhsFy%^ZC47i>Fxtdj*EFft+@T{$UwYFJCPYDD(`-uYf+wB8wt=I?-_F$-(rRJk63t)+FX9oT@;s`U@) zp|gJr>K9?k>31$I!Kx;^wmd;Epbzw;zvtv0d*7!f8o`SCf0}ujBF9!#HQ}K*O?SXZ z_SlnQ;=i2Rn~@L4&oq&iew1^dVH z7HNv2bkfElfq*BnGuD-MDzcRW;wERw7WM`gcx|Uwrg6T>(E!wl6bac&X|`SQIJd-T%JunKUb1MbNgFqX#iTj z!ceG!G_+Ga=%hNanas6L0R-fF$|j-m?N7nc|7k7y74q?HD+BZL86t2YFUl6J@<n!{+6S?dHsdx{N5=_#*mu`C%h*G^W7uf~q(-+7=yO_{> zgrsx_cy!pntNPF>$TS8E0>pnW<((^=Jwu1vV)fa$Zx(fV+~#-p(xjx*+k`GcZi^gC z*@`#;F+*T=4$(tgLfyF>Hu_6|jCJvZ-7_;&An!eLc{nGKY*)|^W(2n23du{NBr~{C z{6Wvs!ydZC*+|2$k3%jPa(^czO*q{7)GO*V?ek_mGPOd#w=D_B_VSZw1Xt)kb(8GB z4&a2NV)VS1fRA0b$I2f!0>zJVp8rPr&66nsm41wi^9eqxb+s++0oSGnn2KFEQmg!8 zaqU_s_vGndTU&cj(`+3n%4-NE{q zc^~Rjn&s*Z0c4Tx!5t;p0i#&N@0L!E*V^(xEe*L%kE8fJv(m z=d9W>+UHee3wQbG7r2AT(=D=$+lZKn6T)ADAtv4>@Vm5O?weJVx#7gA>gO2Y%80P; ztYqYQ)uI;U%p25z$_}tJNpG_4? zR;2p)hJU3rhJMDe*j4ho#E9vgy~_MuK3m^wTfrtT*O#Ex!{nNPFEo9Vb$TKRvXsV7 zbibuVjZq3;X2RQDWa5E@o+)pz^>&5FMQSY;#CZ{t1TPylRw{IZ)OIRTIYKMaLL;;o z_X*`i+6Bm{O8v2jbTmnro>xp;zZ-Z1AjK^3FxP~LrfB)t7q6~lW63`(-!WqD@U|OC>C_ya zl03uD%u$wW?hiw;y-@rjGLr^1?(afg#cMX>sw)Yqo3K(jY*rX1`ohZ+TAC%pV8>+2 zVJZCe+IuXV7zXs)wAZa2r-gFK<~uasPQzJ})fRCFd?Q*3ot)(XMzxb=!HPoo@woW+ zWb zyCne$1imEFUTi}i@pUj&_9~!!H{0(NDNX_R`OTSbB@2_igf=RIGPm1TfsmqP22gogEUi3X?{;o&#uh z?hNA>)rmPlP}@!5xry$C=}Lb4OdZ4oosLS)8z1FY#x9K18A6a{`I`JX`qX;{KX}f3 zJc4BtS-H&+QO}%2_iQMexux;DpOZ{`A63W~Q$4p5*`ZjA<(T()UL>h4OjxU2K-pfQ zJv7Uh)+30lJf|BbO>+~cs(vI5j#o+&b&H+5PVuSjTTEmu-G?vUhk5}e-wOm)!RGg+yN_?jwjPDi=wpr&z4GeH(axGBb4j$Y#`RNEBhzflhYOF(PGU4}d|N>*(SW$x6R#K#FE)s{cO4inOS3s;_lPXll&Fa@qA$2>z%oKh_f4s0oc zdo8J+Z^#yz#OZEC*_QH)>~4 zyq+iK>=@wT>Y-m+PPvLgn&nkRqi?rre9Dem#_MsFONcM;fsrnN@I%ihh6Z~i*||mF z!dsdJlyqbGmzV2=vVe$hd-4;HPiwH3-=W+#3;IQ|e@XJXPT=ki`anIXMJA>swHgE8 zz+y(z<9s~@*uOzi40Ug|)RQPU;&`ia-T{-2GTMEXSzBBW$FI@XNfHZfH1?U;YmWk3 zshX$kJ2YO$&tV3~SFZ$+h}njSIbGsWgF3PpS9goQ5b`i`Xp!;C*Q%lU*O9&f7VYc->p=CZkv2~__rC@m@ZKR zRp0x&^A@p@f0#9B{Z2HN+g4B6kx_(#>x=``bw2{U1+eucWC!3nss-bb1I7hy{IV~+ z7!&1*#0hnmQKalAJHD5D+23L8J2Am;b<8lPn$}>h>U>mnBI|1S&;fCuOA;JYf(5b6 zU9dgV3BZ8PoEp?j3;9K121JRU0MRoR;E4y2U4(VoSI+EGSsy@s$^Hk40*y93nf!2C z<_iFi)cv65&kh^FavvpGxYY2xI#PhpO5GpU%!Jb-!&?TTaMGt&yJej z+4X_qC-QSgl>2bJ$iXN?I<8E8B_32?UO?%l$%%a{2RXDwe|jWLfzJOQt_&)~#cSA6 zX*L~tqI|`zTudm%vS9NLOW-T*I0>6-X>f#Qi+ia%vw7mbX~c$#31*-Lq@&Au#Dz7# z;8Wsuo4|fU{hJ}S-qfz(p+ov8*xMEH@q1W>yYd2!-$-ARO1pN@q~-|cTK9g^Q5o)6 zw_$7LtIBxVl2=dZk3ZwW$IG<4zlyX*|2!5OAS1mfwVmg1+ji9)(co_b?P;4qJ<45D z<}G5*tl(9&D@)AT^8_d-sPZ~3x?U5WNAmxZ^Y4AY7kxyxcOU(I#$>C7dHLeU!0BOv z{d(^KosnE|O02%otaArjKH{D4(ty$+&Yi84uI0LGyYyfFK}VqsSKbv30G`<=R10ac zV9>ApBeR&4yDSFNL){l}V?r+SHCmDf76?R}LYb<{4*lka0Hizd)VNSpy=7`&f_}YQ)P5)yVy4?n(9U`2M6{lQJ(2R2 z@Rgvo$%*idXW0`uB~3P$yyKcUwo3no4J%&+Kfc&C7y6U)iuMQeZxX>XhD3d z56+GG{R*gh5%Dmj{U)|1!!}1#arH6#iX_IogLv64R@EIM7FnttXIVd0m&_*bUm<_P z?MNiD?lSNum*vrG8*LN9{?FRRKPt zU{o6F^aKuSLAFdKLMlkAMfp+IKBxJQc2_&U&6`3Y{CBu_hL(t3s14G|IJ zrG>)dFA{VY1LW4gk5`2Hk&|(kgwlHiU`X%I3nLDkj$SyZ}Hv~ccm z6Wi&y&<9u-EqbLXB+*>k2?dX-?MB*PGU!wt{Q^O8dU?)U%%sUaatZ>4$4T-tHi40d z4`<#>-7IL{B;?qWcF`e|ijjP*5ZW~$$a?WPtV#rL>ZcA374ne1-sMV;^%Kf6nI@U` zb&~QRsE>t^cR&r6O0oNoGu0KnoD4TumAg~tcm`he_C?*Kk@7b9!x58?tH1@)p)2qV z9NBAA)k>a9ot7&-&aM^%e#})1;5vEfM|GvT^TN9!p$nlrMS<^My_E>171=cfx?OWxroN~FEsP2gTu z3E`kAsQ&|Q$a=e~f}f9fHr~gu-Mu206!M%w5iL>4nn|#ef4T(zsZ65zPbc$7DAYi+ z%*CK=zhh%*Ww$*WW0DJQqBqRJNl(NClE>NAMr1RLgcp;(4%Su<=mn;qD#M|WK582$ zb}i{*mXK z>&8B;#k4{N+z)8v=!C|O4Tq4qHMh{2XF?F8GYSWb(28Y4-0Cd7mn^1$Wa?RhR%st| z?yNH_@Z^N6y>lr6WbDmO8|U27O8 zf1c7P7T|p8&>H2uV7b~LaLnY}xO!YCrEPDA&#pjT}!S-qy`TJCpu*H}~h0a8;x;{SWdN_OVASMHI7_kJ*x zjnY;VWk3;!xt4r#1GbiUg+}`>uEfzkBgiee+`2l)wwlW?IFHU42&;yaPGbEM4-Fq{ zJwdA3Xlw9y~~9GG_b=_8_D5hjiZN{o1A_j0<-A^An}vKV(Z zlCp`&UG!d5tMg1&Q4F;AtmdXhCTCh@5O%sR40o7n%`5B8qgeU>rCcReztL=2t}|@L zzFTL+ddqGH_Z%=vuSSZ}A~7M`b>_H%8e0S$@FPOt z{y<|35M&J57K?T(YH?I=&m&@L#reoGYlOc|$K*NdvwdaD>WO^Tp(2y2GMGV}st2un z!y!xfos{e~ltdO7pv#G!KiEQUyD?>x7T7*rynC^>H!-K2s#~@cYvT@v1p26GJkg-4 zZ%ImS+n@Ra6!Ti-FIpjviyb*3q(g1VB!>D{thXplpe>b0(Ky$-{@*v)-H;$#OR`+r#Mn@xBC#{?eZd`70O~8x$ z(;IGDtDm=9YOCff1Gf*L&%cBoyOI7Q%_GTO}Q-`8O zemeVw&U(3{ZVo#60dlsU=n2`!E%y_?CL;v&VK3wBipZ!S+VebY&quUqhi;n1cVy;i zQSk6=s`imdOdi}Mk_3ZsG@Q`EleE_epd8@^_Z66b!X17vy6#vmL4XyrCsfTXzIE0% z`MN(yGMD7z=8jcm%ysIBRk``>+QgfNyh{LOOXpCMs)YR83(Pl~5>4dvZgBRo-UYMg znz9jPLX^e0pr(&^ZOHQIK5TU~nofD)malsirB9wzQL|Rb7Q+8~z~^g046D%sr#a+b z;`zyZM9s%C!RLWWAxWf;aKA zs2ts%TJiZx(r;x0AN{E(qG@|Ij1owD{!l$MtbAmVf!SB=fwr2t-cr6fosW!mTUDJ_ zH9S=4=U&xWI3QWqwFaZgYrrd=@VbS&)xNFw%@q=0ktc7Efke)II@o+ zUr2a&dDMTzJW-03?14$wbou{p+E*IIuBii-L%!UM`xX^3X)4PfsM%zm$nS8RsCEK? zJS%=1-J_i{SrVz_q=U0RhOPVqxb@1Qo-FP*cp^z$Yjac z5P84GuDvI*lWaeX))}mp9KzL3vvk=UUC>TlThMTOru-v~w+}0MLRsTR;?LY`z696K zHC+-N&fK7xtr;H{6gQXsiK6sH_Yjlay8qst5s{1rL#nFD7GKdN)OILw_$PR?kLtS` z__{zYzeYYepfqh$YTB~_Fd7$wnNzrp!Pc}x7T?{mdF<*gpumHOF$Em=6Lpu(|HSE=g81<7(! z7lDt14_~1r_-Ik~qeJ@cyCtz2U1f~bk>~?@nwXO<2 zg-Yc~lS+^}^9*I6Y?f8QN%0T1ey%!S(RtjiB7(KLiRo)qunE=n6M4Qm>xhJV6O@)= zJQe%gozpO(ki8eQIRF99qWOpM`t_-hJgHczB%S!Ebr=@}^$+%iWl5>YFT zH1bmjKFez_9PR(X0(%Znb?!z}{j9(q*L2SG9Z=)BZsN(dJ4rc|LJk&(!Fl`Oi(4$G zH#!8kqu-{Z|K220z^O+K5ltt~)YkgKZYRRR9Hy%{JEf^(;FJ*Mx`DnoXOLeOJOg>+ zfy;e{{R{%Gb>c(cuRip!aTs`=9YFLRvQw#^rNk8`Xi|0F*k3w0zh^3;*~X?#N2lCf z^z@#(e!rmF)^f*=hV!>jPzIM;q+@RnKAh3(2Y##3xY;iF_qWD-7=m33u6le zcTCxKK)6vUA_Pd85NXpMH8NtuTa(AV^)EanxK%C z%*-CPZ2yc3aIF6~DDN0IjP37yLc<8uLY^vbDKD-UwwBj~gkbz2eWJAjhfnT!dvDtr zlKYY^VpII|kbMh1pN{2|X=gZOd_XU*6JAF{QKl!FDQ zB8)?h4gY$%RK5;n#QBa-e4dK%^i2EcEtR~UO0!V=_{u*TXOAniDHBgl1!%jSYy!&v zqX*5j&RXkMeYKwAsTP-diG3F9<5%b~_W-K^(5BW~J*?3AMnHPyqFTjV?<}gl?*OCv z(&+uWyV*$f=Pr`RecJzK?+{}SgeMJ28G8CY6guz4!S1bFF3i0YF!ES$mgVG~EbI%A z@dK+0#|Tn{fl-}&6l}k3Y-N=Ka4kuGF2gWSKAD+LQu=YKf6y(ogQLgxGOF@TG7)Z%$V_7wb^Wea zd=2Fd&~(N9yT+`X2*P;i=KfRJWLceqbGt@8B--)5fT_bd@sMsFRhniy-5BgkQ(asr zH6*6wz4#%jtyJFp0PK!Q!1t&wMUhXuML2aBjDRp ztWfPhm}B4?WpPgB-yy=X1{C;vaYN29PxxC<{&Dc@O#Qtsg=T|Lba|8-wBI7|dNWv3 zY8W1!85l;`a5URLusht5;WTyC|FndhF3^Bdd5sFLoY+ZljNXwsUi+H+r)PUJ5x@eE@eKG7ZcMF}2IyLgCcqJYpTKKSX-nk&-j8SDdYkehv3KI&n#lmtl!B6tFtGS;w)=+~w&+ z=8JYp)u3fn!s$O5tzE#4-RRv#n9yP%i={_RWm+Q{&>hwgy7B-4oo8r&EUWw%nU3d` zFK%=X*yu`Wdy$qi%h|EYgKS+*3K-=(On#$?+HJOD)DLXFhikOa?TGWnls7oe)~ALI z7i1weyt3>>c=DvkD4FWuJgE)0#*Xw(oJgUOs_4`kFZiN2gTi-fbDZYO(HhU!f^ltP=qeqp^ev zEBG*QE3L>OkuvZ40v$#kGioH+Js7YFEF5C4v{wzjP~WtLTbxJxqkoQbt3C|}3`bAXHv+D{hKN?rWU96Q zO*|s_gib_Rii{dfH)8!LQTCOtP0P(V%Hww)cXNstI{80Qoqs4kXO=mOwQ{98GTp(h zgfJ?n{!+*$N#V2(g@$QWysi+vPR++u#s#J5PI>tJ&{Tb-Tm~qag#OT>n^}!XRpwie za^|Y7(7UK{s}BiL;}NFL<&*rMRw>Er2E@Sy`I>N}a`uwT;T>c* zmheed)Ce=^xrx8^z6vF;>@eAasUb3du?>oSZ-v34(v;=W`T?#i@=p_A6>Si79Z+^Q zQSMb7CViMwu|nI~1jODUO{u~C(8G_Qo!@!FFMR*UMpJeYv^IaF#k%4H#bZV)W!hiF zozBc^NHuJig(7K;e)IT92M@Q~pK&i~T(@D$q}96T`+GK-bEwepdDQZmyYZ zvoWjv2Uh-wKz^tbp+$=%URbpa7dn{37uL z3>oE?7z}=X;b+Ifz+}Sx^oX{zNBmQNgcS0a{4TALawnVeVWLm=ObI1i5t8s#*7S-`DSd- zA`zERb8ksjovwaD3R!27L8nzDlkIe%^*)uYkX-Yc)DyjWolmY^K)h;#!DLCOl-T21 zdU`dS`WDB@9&^DbPViAb{df`eB zoOTc19WTzi3(q+dD^wpr+JaDq_rO8IF7pK!pZu*p@mqCy z6u6bdb2wz8-^i@aO`{xnp!&WxaV_|-z~7j;^?umOQfU1qH37a_zk%TP5eSPZI-cm( z1~~0HF6yAo+bukcgKx*I{M+dp^KrGkJ3Ac)K7Q`oESdXDV4JH^I!Oz8keR zlKy9>u|c{$o+*~gKbo}hb902=EEvi|^9b=^+d1?=C%#$wQDfo%jQzz)6*(v_b<;m8 zW+PvJax)ornO9zfwY!IH1Ze&m*7xLaQ$gTe81i3fP@Mp9b=77q)h7cn^Z)lLbJbD$ zH9_D~dPt{<|AvuoR$bXEC7-_#onXB}y2~i&?SR!cE~J-shUpC3v5CJ#zp?tqFo|Pb z4fL%8-_BujcI%Ljo3Xi-3Uq|;AKbucKJ}?JgnbJ=bRWmAnP<$KR&7bOaz)gwqScH- z?fE54(u&Bt$3Rz6OB`K)qX z6|V87ZCVN#MXI8MsOMbu?h^^JH3Z(t_8vQ5ci4yJSACt-@)CF0!kHI@WTveRZ+`@M z{OxdEt|7%VHhD=gxHV9oLY5&=+)mP>9%|n!$^(Jlu*jjYECtD(IgCt_?E9#r*31{}98q0)CQZ$$sukULZ~OzAHNo|q(Ej|z4GLgh zSY5;~+soZ3w2LuP*O80kh1*TaODS&O(7b6ADT$)E3w8APxuD<(ex#xZ{W1~O)v#RG z1VpWd2`H)F&M|Y{jLiGSU<|v;mlM|l44o$j-)lyPlTvb88kEHPKLgwlF+n?m_)a9L z;*Nm%X1a3faLy7*y?sHEk_5f3W%Wi8rPa%Qi8&=>r1i(()PKaCBZMh5H+ZK&^~*>$ z`;nr2RA9@;?l21=ph@4Us|B$jd;sM?o^z`lZx8!O6E%*_Hl zyj734MSUf0-vRHk^^Y3h`VwfEJ@VBMF~RDdth>Gl{>|?ZxoGwy+AVS$TDus$k_C1j z#HDN4NXwV&eF{Fhb1!_#OaCB<2v%_80N-#^?#AoxEO`*8?E(1oqVhRTJ(6!A+215x zL`8dT{M&eBaE?3@qrL_cD9eA72wz9spV`iiqu<`VmsZ>f}1QMy{>&h|UMKfvQ*oSpMI@AvEVd}gmn z;(6;Eh9UVZ26q0aUdecj-DW|5U<7OEdaNdRX%$QY}1zsAS_tO59Z$-is%SwWPmTN4+ z@4<{1IHn$n&K=fv536tydt7!a%j*pgM|fa69oKooxJ_iP>1%)YSyM2 zuh6h^!Hmy4zyJ%R5@P9qhE+iNR;q&|s5oilEESy8Y{xd%Y|qNX<#EI#1_SUBqOfel z*zcu}h`m$3I1<^A@h z*w=9Wt@V1@t$ka*=~Ww*r;1FwL|{&zI~G1A)xzuw?E+kw@yfzxN@?8M9n8-OGR2t$ ztc+j%E|NbFo+5SF=af&Mi_NjX8rJjeNN>-Kl^RwNkC@lQ_4-PV_iVpiiphX5(S}2^ zF?XoZJw-b-9a~aYcGM;g*F(n3N}TPP+bSpcx1OUhCuK)ieQ}~?THUj?lEwj3iPWv) z*_d@9`+E02LTya8LJ(U}Dm#7#D&7_cF6QL@~6(zHc5$2s>uq`reu3@a{*H_k&Z{EhgLE>a}VC~N#YLYvFoySwGq`(sg;=ux(8eVQn4oL*Z+sO~W- z2zn`-FcSPli@>s0t6S$fH0(j@(Oc{32YXS?ALhlwB8XGZFFAlWg8%QD8Jq9y?g`xZ z3tXQ-I2^Oa!cIG|KHT;paqFm;7mtkT6mQ7QS;}JiYyxnlFj#ICp;wVCM$6X=U*e+@KAwP=JyhF~Mhsn<9Eh5@RaY$cfT}{d{PPe61;{TT#@iE&BfbHzccWAG#)91F5 zcj}-s0m$M)#VO0Kj0xRWQ@lfQJqSnXPN)0r^n$HN^gOqV+<0D*jn9PRG*@ElKWKHM zw&-23haTK7r^lkvA-gRiB+CuF4AU0RfI5SOHnPYvN?JX@`V9W<;D_Vi@@D(Q*3O6E2-K4n`T2mUz?qV6EaiHaVQV$zuYu1BfMec>Y!Vd^(Z zNiOLRxP{U0zMja z$Cl2ah$V%1V}#XFHbD;T)wxLKoT~JYoPxxxFH&L2$Qc2lh6dK&G4%lqzIS+r(86;! zzu?MJ`~BdtFhLx_=DNF#GVj0``QE2N`~~4VYa?BrS`VxAU}yLQy|o@$S)gj!RhIWb zb}t<%7#w_&D)H~_F@esE@PZFObE^f=`D?LCABxu*ytiV~)7bA$$L>EtPPyTTgTK3_ zlF^XG;gUy&OY@Mq7D+~C=@*S0YPkFYfTid$@Xmx*_KR+dGinogvefh{w$T9Ib!=QOxUT&yJG*?3kHS% zPO#!R{Qc8Nqc!L*mn7IU@EX)MgZEDqy!JR8;e7hVs+5eZPhj~^@JTf`{kvwakvPZ3 zFr5|X_gyjI_(2-Ax(!(Wx&e5VNwIaiiB5>v{!x3$2HTUSG1j!N~${Ov$d9 z$jbMt=S-t3Pg5!k5++#@jfkLDFWiH^dOeA{?2L-W@vWNOMUnA!f=R|KE{8YNDHZ=9 zw)@Bu6~F)fj++_%1HXGw%QunlGJMoOS>J+$=PZ3L6N1*`-Orl}#sis2DNoYEs5k)l z_k8@iR&*aV;IP55lbonKQ&WuS*{n?)V9MWRy+m~?X7-D_f&x#otSvSDHXD0xAelj} zCdf%$Kc?CZUeak1+oimg(*l<>{Cg^wMBe5f9R6oHwd)XtaSwVeMXZdv>`Bw7g(p3D zAO~rM$oEXG<4b9HwPKRoq`>{on?HlSx`vb>`($gMC=R+cCaiA(%fYc#V7q~=`TPoN zGS#45Q)ml`kRdVe5+)Ij26_IUWFl}v2Z9{)JYkAQ!e??|H2FvCR9?@NUg^d1Q9JWc zh|>x&BEZn2V*!0z420HNu9(4XSSOmn>5vlsKEqF)53k9U_cs!+9Dr>2CyD?4h6Wm} z+t6gNEC9P3DXf(-ouI!@mF+N?wTquX4PqO1tc4z#IUCD7ww#uO#TlIQljKJv$zzj_ ztVs$Z3GbY3c!v}%OX=iOYXlRe;H&r~V&h}IUYkjuS;-a&pn<@O2OARM>CQq&FPv2? zn_)`WsL8Su=Hh`6>P%rIH`8o>U-d$)U|z;XONXe_GVpl^5My|@IXMY-%)n!gjYPKs zmG?13ox5AedB;p5ZaqazU8RjSLmmJT(|GnP;|wQ@=s*OAX)ZzLMN0tyrmAy98#|;T5C*ko)TqBiLtw%${;D z5lr7ZE)ACrv(D~DTc#D-zXR717|n)Ta8g}B%}VMC9p!Qb|E_{`)=Kn~GW#Ts3Z6$Q zFh|C0GLM4d3lQZ0}Tjfhr<)=bUS;;}YNH4!`h=b$ip_dNG$^XI|-#0e;($5c|4NGgX*`4q$ z`LzD)vX%&817XEtsDC~2{GVgyoqeOEE!mlqjkN0vkj+Fkzwr-m!n3(zs-ue}-J*Ia zr=Wws|8|tD#as0kAJ5MXS?;T}fU0Zd<|`4OU#xV4|J=#p8?0*@4SX^N@de&!1K@Ha zO5lA#FYu-*+e}9nlf^ITGZSSqf%G9dv?c0eaJn`h?CK+24A30d94z>pYkcDOC}iYc ze0_wybX5A8mVcXSqn8OLmd@jEBgPDTX*bLbMnAX+ym!`i*QkC@92pAG{t|5yQ*8Z= zCbAEK>C@))oi)+Qqmg+_E1Nmtx1fMCxEI-q9*>Lc8f{Ir+L_FG*yl!m9y~1eu2*Dh zBg?q-Z>Wl)X{P<@+lmDeuFy%n@O>|fFfFyF{ygE#b9w3_8N)=hFIgnJW&pM)P2#m7 zJrqBs8fC3GrWk0E_NBGx>H37bCqVyev}3Ls5u=)fXA3R)yBsTO$t9ABBcBbEhV9r+ z*HEUd+Ei&};$uyAyNj0-TY^RL%1(u=~f60i*QQ zW*JC-aF37%Vu)`*rRvMW!P8&|wI_);@Skn3<1XGW$_4dUaw?u(zq-ciEYA!uOn#FAN$_IZ?>5 zw_UGYJgxE!#~zB)Oz%c&nf^88baRGb#%I55LqzZ`rF-2*lR;;9b{pH1fZI5L^HSfvh*OjAF6P7sJ;wxYDR>#^}tjlrq#%F3X zz)Ux`+9v!zO4|`Sl1|;0K9#rUw(1FAV&oa}l%~ctV*3d3>xov`xohBjY%a;?FK|v3 zbf#5DI(;LgY6ZQ!UVgndK|Vd6EWEFWI=77)1o|2H7%~o-gzMF`v1ZCw zdl1u)Wy!3XeA27NHrm}ks6A43tA|5%Ht`k93g1udaITmnklZ@$gx86dY^it1d+QT7anh>u8^t8FrMObo|54F}qtYWTC=ZzmgT@UPjUr3dvC)y= zLK+MM@z&?n+cL7Cp9;=6UawpP2@4g&S8&MCJ&JQvE72;D@MPPAR|oTzLPE3bb}0Pd zgRkVJXT>e*HoeSu5*p;;d&+cw*Kb+};TN3dTQFD0zy1v0fw1weO0VcX;eiV#DbmdYMRg(|x(L_U77R}+|R?G!Kcd%xz)rGK@D*h`|-sX9{6@2Fl#}jf3 z4SzZ$C0mqVY$YDE6Z$evMB;{&K#2j(8sBEhWZX=ykJc<1DeZ)RLNTkyAU}i0j6fF| zCrVcjG8W@m2}4{;JJ2vvs*KJG3;)@yHHf;TzNP2_k4eblmAT;D%jCnR!bQN@3gD3J zda5E_ZQr7ZF63FjYfT6z9s865<#~7X5Wxvs@aRsdCX>~Ar&wbyRC;l%Tk$|l-HGF1 z$5zVFMczxcjW33QseO8kXt>+SwBmQ_;yX&3^;546L|+e{Elb>P7h~iR;yZc^Uc98w z^BEmePeDPXA1sNxxt8wNCvZ1fI7zY$%*S$p8g+8^!O*a`=ydxe&{G`2ESQPne6hc;o;@R@GJOC;$C$^{S6!}`& zRWqSVZ7{P_a0|e~0-QnEWWEPo2S-q*+KE5H6feGchujNA25eW&^awq(&6EEGIFo`S z;aN3dknahOJ;|qnm$Umi&zQ9Ay~r0PoH1UZl)DhZ4z?o~s60!2e3DJ^mYjY!L*hNB zXN6dNc7pX2!Y|QMOQ1O&)#kX}AT3dtx;xX0u%q}=suZN5=1|RsN5EE%;KNZchUOV! zbr@khNAjC#b*@$g|MF%h!GChKo-gy2eYsCu<(s*}M*}$C*`B!mOY6WVht39rwe_Ifb&BG))7~!IwvreTov)nlu1q02e#61E<$oxQ|6N4RA!YDONh|dH&7tJV zXbc{22L^*jiJ{7&rTN%PPf4Ru;1a``VAkaL1K{q9Z^7w4r#ZzB(1nRm2_fd3-mvhH z;L;x1$X)oUnW^(P90RgirJ^47*0$PJ*b(2?=S$I3&3mw!1$e#w$v#|xmqOqN$+~75 z%yLd}*rzYsL7nM=>L~aJIx$~TFhw~xVrg|$DKi%OCzA6#A*lRki@~ybq=PZ9$;|5u z`Mo05o6X@J4Hl;AxaAGF43U`OXyh|a`kUA#7^Tcyr;~jr_2NP@MHJz%t!56nUZ0r^ zlxS%071s0hyaeh1Rh(^6^~K04ToXt=zn`#w2;T_}A2EIl1M`eJ00P5kDk*n;4&m)m z28|kimss8RwVsP@Uc!gWkdtnLOHwZ_*z%jEE*!h|E4U9Z6r(W5VtKxDF$E85n++iQ zqRuWcvN>}D-Y*oih*WvM0VNX?Gm;R)f;#@)@806=-R@ZuXo}^rQ%9VOy_H`VCEzE+ zV=N#bTLV?2$wY^wQb+M=>s1^b$^3(!&6~+FVHwTP;T`0$4V1Q|&|wk3OU){tV@ZlT zscQXs?ww)Z`DMsCzBw~#KgqckZn2Tw$|9g1`wW+EBcRhCenU|m$-fzI)|-%X#@)4V za_Y-U)~Pk`eX$i@!Um?#D7dKtZs8$`l1o3hJ=u#SZ@|BP32d=QbmexznFNL9$0^0C zW^9yfQZMty>1gzzdB*JLdfubJj6aE0t8A(wStd;ecVtV*nyl-3B#fD~fmZR16tfZf zB7w;S{%Syd6bpU9?*(w%=(-7X)f4jl3mmo*>#gM9nIxRAny{?N*+P_$~wjWMO)&nCZ`U%p@r35cpx`(M4JN$FRT@pK)mup;}E0X&J2{!L7 zgWR=k&C))84_+_lXrx%+Lt^^~{`{QyD#(*eCMU>Pfb79IMXQU~VAh6}|I(Tru-k;xg5Rbd)fG0wkxQ zKwfmLbX+ZbX#SRHE?dp`8YYE9Wf&0^Ns+d9EOK+U$C^rA8nF1+Bn*IdK#v3~Fk)hK1h z48QpySFFk50S4+Z%GD!fTLqFhSrl`YH*c+jY`($UP{vu(B=p1CoBuilseNK_evJ6Y z*Fj=LO`l_$G4v>&tc}Z%lpZyH{^uBLc7SUCu#8FAQ>przRfwqQ%{!6wM`{2^xVPUp zU!Mg3+FOWT^hyeW%&sj}rj6j?@Zccl?J|ENGH!x9RKF&X!_S#}88B&I_4ID|bBXP~ z-3{&WQdQ2}E$%!AXaOT>y(dJ34<`%txEE^^Db3H)dHWPJG|hfFuq;4d_8APpdj`|9 z^_n&paj#k57h~akgD(pdU+u%f@3Q{n8Y%~F)RYgg=6-sRo!@Cx|=SjC8T za_mo8rR_gsd?JgV3|6=qasc47tYg0NlvIy=Ul|@vJFAhko)!4_@Pc;`z9waD!=5vQ zv5R?qT`YBbEn=pNd6;!lgt*LGo8yP z%zDA**l%^!p5GjXcTZ=R}KL_gU$`Sk5X|X!^|B!_EIX@ zK>zkpk4>{K&S594oZ?gQ5F6$$Im9+(1wej0`0n6faCpvRm0@f<CLb7k5n@$nCoY3N~l%JOwCkB>-^uSc|0(on>yY@tutj8 zo=ExU>;y;S#h>VbC)(A(`hCE8dR|1cmlyvui|@ZiIsJ|@n`T!m!dr^T5`y=WJMl`b zJZb5{DeMon)fzf>ZG`n@b=bl9BGDtj`ESK6ij#z`2ptJ7M`h-Gx<@@c7$}K1Nl!N} zj$rFlrj8Z29+JN(0n;Zh;+2xnLJE}<{=wGdpmx4guWtyLjOvU1s_Hn?8Eq1Zs@T@>WVX=t&}`-{QNoL!dp_x z;W4i2D~TlP!rj=$UG-V~k+G?~A6(M(d6JG$$_6-7Q^6knV=s=Tl{293*CYMGH8RTE z4+gOxo2dQ=aPL9an5?*}1&EtVd`iBDSQS5)xj>!B7yb{TZ4xc0>6CE?J243Z?D~eR zYute@d-C+X;xNkh10)=!x_CzAGYqW*oGweHh&fR>U)_!@572D!GEJH@Um`R}TRO*Q z6lJi&3qu}&C;qTc_{Dt{{{F*90{7#fx!*m*S6`uxLYXabTQ;0{+}LKhG9B+wBaWRL z=pGO*^7)s_P6@Bmk?e%T;)~#n#!@=6JY2J8pcH*+tX)5fliOT23mf|WJu^dOc?h_XD^#u|bHjMMnl`P4yYHgwoeLS7(wgI?Tnq9F_aC6#M!xJ7@8qMzNzFm4twgnBiZt==aY? zj%$kB)IdxTZPRBx>6k>S8z2RqWX;1!E0~pv;VK}tLI9a}XUT^b5vCZImGF{1(JDrq zmiJhC&`+EIWQf6nIKfMnvyPDgn`EHO>UK)hN8RM8b=O_s&Bif3*D=2c9(vi*@6P5i z=A~$_&?M25mL2x8YXsfUcZaBM>Bo93koIL&NQ7~2L4(rNsR%taOKlV3B%ETTS(-Ln ziY(;>9nd`h-j2|0v!{mp=XVBa={VpnPhpr2*s2$yeq%b^f_b(CUjy9XzgWILbEo+? zau#-=0=b`uFoUhDZN`T!t70w8+UjMuMsR16xQO%PR+CpPI6g5jBPdrtxk5BDWw~Yp z?6!IXe0r=EonN~YZF?0N7D2{6PxQ%BS>6Jiz#1QvCCZo>Ft5au53@hb)9v)Y|3X^` z4L^cwjzY0bfQ?xy<>Q8kb&)nx_^%>0WH+csJ6-4(evszr zQ4iT=4AIgf-5j7k%vZ>sBzIF8hg{SiM%CYmC4Yf0R$$|wxEUhuLyGPBfv*%7$?>l3 z;Q_<~8Js&`H;#|762OmYDkDotkncKJak9yXXwky9s(ORp76R&ntMmUm~QWoLCY-&aN-I- zh2K0&;s^bwBmYfNJ<{OD(~N%%I(VavT5@5j{lp=?C;$1}&_s%jlN8mv z*ZduWRZcOEd1lM5h_CpyS#`%bO4RNhgJ3_Dm;2$yc0GRH zf~i&`$^M2a%5js+IefXEZ8DR1?ers;e;zhzzo*0PBPw2AB= zPJg-`Tzv}r)lT&9hBDkNYnmvtmZE>pR@*A+;9JWk;BzLtnH)ZZYPl9lO*8u`OSE7G z;a}EGJ-6dYzR^i^$lP%`d;#wZ$vlC`y-*2E{oLgR`{F15OU*?vPL|=|SY@nd!W!QR zZ0*poc94=B`+}#H$z#C?d*#C;;n{TMF@tKaJjXw!bQ@OKU>7bd6s@jj5(59vn!QT%%Br?9rhdGEwv;|N4h3= zj-yH0fmsGa+?h72wuKd-rJA=7N%)6d&27|4$(Y84bKBXQH-dk2ovief?iarsm8*#FzMBW8*1SGo;?bO&f>f#Mc z>Da|4WRe*1hF7n!vX+)Ph%`8v*bfeCi7x77^Cte}<@iIc2fRa`&4ln$_GOmY2=dg* z#u`5q@UV!tQgMxk?DX48eweqwe6AWF+%2>^E9Z!=PU9sI>Csv`t(qXhi}yRJ;^>JR zdZT}I3R9wU7u$a8IXx0GJi{?dmE+`)9{VBK$69bYRz4yoKxSUgWgTkLquHiO96RT& z@)RYXL7eTmo2;pd)?U7foHXYMyp3(>#ewKzqp0P&dn1&Q20s8*!c?^zQLvCOt1 z9>BgYudd>LgNP`0LG}W6jcmq`sZ@E6WzyWS$=3_%yuo?!Sch#5 zxE4#1+>bX>Q6DFgYtP+6)tPvj zZW(YiKyr5UxK(hlAa5)9%tU-+!?B`i4OKha+5D+(nx&3?j&VXqm}Nv*dl(T^Nioya zs!Mo2`u$;2E!Vhe0cev!$1-u+<2Kijr$Ex!w@WulRX^!hY*e--dd)rs`1H`^l=VGV z>sX1Wpv5+f93?Z@nxIddpwxWU+{fFcaXBnz7tkNAXPo?)hBVc0KpB)iT#)G()tlK_ATwz3{u-lWVJ6U z0vMZQud_sg(F_(eIlB+P>0VvWwNIVceW!7KT{Ra^C{^Y~I6AN`(85?r*v&zBQ%O6XsH1l(!?M%MI-p!iU& zX}XwYSo0tm_`X)pD%qMSg3B45CUNSwX~G8U_Xc5w{yfWCf8*O`M#Yx|W1oDlF`Bfv z3(Bm>wm^yQa;jLGUA{}>N=)Jrws`xstD1LK#we#`At$lxdE#b_iZ)kE}tvnOq zCt_H3@l(T?IY5yrmDqn7dQJL~?j157g`^n<_L4SI1lPCV8rA1zI`AvyY%~3h6KS2C z+3Z|7|FF@W(6f=sDBUqP(!9&iWYfp{zDs%jCtR%)>ZugHBc&qVC}X7YT{yY$LG zEgZ^i$)4Gu6Ki&2p=cM^d3(qgdouapSJ74@waI5GhKKHBGD9BZfd77k&O$|;B)CH_ z+Lf;q;4WCcQ^tE@5~EMIOZ3{HHpZ~eNpr>F4Sw-yR2>1Cl z(j!|4dgyv^NjlMwLxgR8giC(Sti;PDbVF^~0X>H;x_XrVljyHBdCv>Cwo5YUqhx?)2NKu8Z-?B$O3cZa?8OVP|2|fp7z{3yzu8Zj zeI32vuaqQZ=e(AR7w4X4^163=gwjrO!@V1nz4euq;F>J-@s~&^^~_y#B*LghLH}Ig z0aHxS%fEv+ms+s-mH&n+1N#PIHEGkFI!XU136$6wa3kh8OU+8~-}__~VfO;0P{}d*uOeh#@&?dv>S&6rL(2m~V1&aC|0s%23}> z(w~fSe~%E{V&m_J?)7lKAGpLq+l1=%3hRByzbhn8dKSJ?fC9Z`?`bDC@pdrk`ul== zvcoj32I7?gedDj|_0epR!%ERg{)Gv|gzk0V0bsQq8Y#oS{HLa*%Dw3FS>Ynk+8+IV zH!`bpsZ-L*K#eegiPQg9=5&hDSXZsnC=il_6r1%1ShnGmTqtgRc+>c+je&fSKuiYgJ8C``6#tQ!7 zM6xHA#n;-3`FT=kdlJ-U0j3%W6huuF#U1CTKfobZc-sFCe_Y1YkzzJ6d~A}iO*-X^6?P|nXG-92@D3A^)MBFPSGXx5$>gnW9Z@{+ps%29C7LpaaJ;K&X| zYH_yTUexwt0Lo!%KE`PV_GW2xLXp=LA>GAPyof7#RY=VcKb2}0jdS(#7D#BIXj!IF zyH+L)nP&W&UlDEK??bJ11-(OGQhGCkW5STa0ttr+)UHTEdrKy5e>eCR}TTjQQ^M&wj12`;T3~q75rvr{o z65U5=_SH{Ql&;d|hwZ%P$((l$QcVI8KQVHB&XG5b%2U>pV2aWGsV7Z5u(la*(6o?oIxBfm@k66I^f>VGQRdRI}aOXXn7L zA>2fH(y%ZBoiPqRv!#fe<|Xa53BE&w`hG;`>Jf9Q@)fOzsZH|~9Uz>g64u}OWt*|s zee`LD=;OQIL}(N_nOJEXLLX>B`dsWj9V4|)zTwY z@b~aPrKPBMb3St48=1O*XennYHo=55gT(~&SrW(o(z2bp_emKOV{TA@*1x#>niOS_ zEJTlVLxX$BV2~iU-xV#I!xS}G7an`a$>F@!PtY&Ff_n{Lv#{b3>Fmm)T8)70k@vfC zAp0jNW8mj@ZPPlvim^j@pGIv7#?pQ~$@3M}r}6vSh^tq8LyulYl5^yNCfLeY!N$Cj zUantvrTqF4VD3khQt81T&#s3{ejJaNeFmM|nnz8$Q~=}soBd<7d#c_y)w+sqeM%v&gzodPoL>LDR9|Wmo-ibUcq(fo$+eu;ex{ zCr{wA0DbWseAW{$3ivV@DfIJJyrEs$pG+)b*F>qlda>)|5vM0vJKQt0W*warr$|kL zS3c^0@YE5@SWh|mZ$YnVfOSTNd0_{f{NzqIs&dmzadgft6q=mQ=w;rmYTBFQhR7+EHW{hQ?{28F7w~D1$kD-;h-ab$iJjHk)46V zvR5=D@Cmi+Qd47li`LB~Y`oQ4M?#1S!KWYv32aR3dOlPyU!n*5U_e#RuQ?0npSE$;WuGk)rnoE=#Qhj2|AkhC09=T9s#fqbcO zyHrpTAe=kd2%No{nylD*NOqfr({99J;&bEfHL1+cGFdUDew@l~Lh8=f5iLh);o;C3 zuqz_Fx`?eBBd-d}q};wQ1)hK|_ai!$%O+OtBxFog3)4Lg|$lx^p-UEk$8x@kcL#s_}$s*ur`M&$5A)b$?$CP^7+ znpEV1yX4pF@+zRzh;UoVTYqYMHFlfnR~C|@(BZHd=TkK7twuI)|WusA|wuN!O+R`1&>`QB`BS&30?I!7t(QJ!9WN|61{c3?Ri zr89hq*I2**QUr*WY6>10{70xhf0UZeek7Hw$z%S@4@klBV29141o|;bQ=w94U2`QB zo}Lg6*;;+V`3~ac2FI3!g+KJ>zc;>TV4G&w21ivWNwVwm} z{JqHG?*N~#-10x*p>3*AFaBm#Uht&ip?k)gAm_-*yiq89@w5t0R@?|PEuaS15AC)U zKew&+rDXm_(J)*!0hiDpq${K+&hV_0QmiOZeQ&SUwK-mc8bhOm8{RP?}I7Cs)tnI?kU zAy23GY0Wj)<~jJ)%LjZ-GqPE=3(s<@^iTngotGf@8sOny0Y3```+H0{;E>R9CWA z>?D3!aQOs5GS|H3+VLZ&-aW`$NH2XUg;#(ze~{c>ydPCPMw<++QZ^)w?y%@wbTaqb z{_zPzd}aJSP*Y}NV}nGu2V*ibjfpQ)6qB$aH@2f+_sK%x{45f4HPL3xlii`yuJyCy z!oPy7>7)3i&&*im?*Y^+n3_@51Kz+Wt>J#@1A2XTT{7^)KqMml*gJtvZ$gQ&Y4lfv z)LCEowsSSDWz~)|YA#T%vZ1?RM^wrbGwwLZT#{usTkSkYe8{D;wukt5@Kb*&r%={w zY%S475dB^m&RopvHLQ52{q|&SZar3HqCqUQXU#>`X=xI#%+X0O@B`UuEi@-cb(AXF zPMdH)(3Vd~IlLlk9BWsRJal?s5amHWY18ue`QB*VrP>q({j9muK6qP%@X+w$(f zz_`lCjj^|kzwzz+wW0M<3cQzb~I*0APy(Wm*rTDxTtk|Np_J?i}*+G-Fpx0N2W zlehw@x)r*xPNtjuHDm}S?ml50Q|ApwI*=dD6n_Przr!5|sXIbb3;8dY9&*Yy{-tiY z)xY>})-Zz4;uAL-dy+MyospvXQ}m1x$C}@Nu~yj0euSjxj*FWVcPuAm>6QE?4hcth zY4ROsR4(6e1;0MO{I{QcJpK+FS?@w#Q`b+gYTeG^Q|25HYEq2Aw+xyUe;jfhi93*- zY_vCxfJHpwGmPt6kuAe9y`|)*;Fi=NIedmtuG~?S! zgqID^4gshBY1J2s{t6a;gi7uc*BJT_{R)111s^N+@%yFWSBa~1iYs=)dE~_^SB&Gb zU!{_e490PJK#ewc~s<9GoKzE!!(&_2R25^ zh9d?B(-ev?Q=i?lB*>r<%!)PnTKpgnzOIVcxZ(6P1=Ze$yGs(=F?4Q9&hn&?H zkYP8+Vx1@IWX>>f2lo(DH0vAa^vc~h$+Z)n z?e_$JL)|n2ec%M1Vph>iB9RDsg~DK7K`z*}J2ff0kex(6_CRp@uKd+iCFs~W zv<^8i76q-rl%^$)W_q12LlJO2!Q7dih*G#-J z}P(FGR-xkm1CFUy|Ty>ryvzXeC>xJ=#uWl;bO0#{w;qM_ z`N|1y?OO1u8c1de-;>;TD7Ky_Om`P4em4~dwQP4PHzRKQzkxBwX;YZQKih1R#(-qr z6+$E)-z zhvQ1q?6QrpF&=_-6)o}LDBnzQpRXBXZT5zz44dEQYadb~wxLr&r5t=S&a(teO6OsjSLDTyN27n6EE8<<=VOL_WyXD_*^)i1FSeG5mhBucOYuu2*OW6w{1=#P|?jemN<4R4@TaPV%FxZS2AFmXd(wx#+aM)J;A zuAhm7{$k6H`ljp-4}#X7ML1!?anj=eQ^|HS=X5@9%8rd|YBRWZ^=E+O^iS)IH5MHl zQ^K6ZvP0iz_N8q{^nS7ufv`(UNM+!!40mPbQ!}tQm+*Pb1`+khfwC>qB75^WlG46L z-)?pd?45%J5?{6d9OQNeBU4p+w8fKu^rIBb^{u!Ee`|rB_$gL+I^R%x6867BL9%(4 zdMXc_1o9m*wv_^qoE|pxU^RQ+PpC1>-)y1vqpK&S^kPIZI>N1WH1la_Z6l{~jc)O+ zt|E(1<`^#zk)2?VX2pmS489~Oa8{Zx%qM-2YW@pur6UK%kt)jqOa8=g6x#CAXzVC> z_7s27@uQ60T60ILEVJe8!Ht9uGL$J4BU7dtW)5o zH`1k-!3fjXqY-{esvv;<0b`VnY#B2i=>K=}k-^sT5UYhq^9kd#miX2@#}Q|^-(SZ+ zu4q}c`{24lbR-8{Ne(FQBkXCAF^RsnIlMhb(!hm31Wr=Ot(5X=>gU8-a!?TVpF4WY zN311#)fq&;r`RFM@I9z+w=k4cOSH{wvDaF##u$d$1y~9w!8I<7@ zejicOi)EzsJ0UwjZ z(+w+_V2*E%T~7XOT%LDH5&1M#-Z8WC9xYR8XkH1%STW}P|+2pdI zash4Q${mC=6;fz7T|h~N1MrIt_0}W9vz?`i_sr@u##Nih)mtoLoaAda@%=-P|K=jo zHz6Jr+Xo;HV8uOu>yr6D8D7?zzD~};Ui<(<ftv5sxYP8@#^`U94^qif;(wd5 z=XMUx-GbNV*e~GvP2N^KfPzKP9g^m`_0c1R^9M&>@5!|uDfP-E|5!-uzd<@>pI<5O z;Xd>d-hrtdP6@a-WPh>tP8Og0A4TUL*V6yT@pE>zomN}x-qvlKQc>x$ZYu4pd^7aT_=XTIUHOJd2+=v4 z$|cM#B09d}8$w?~=&Q3r(QV&^A`GDjlhAeho!|fc(W6J_oX_X|e!ZSg_r?}&Kb&Dw z=^Gg`MH@|WK^oyZQD1q@m!q|Q_T3Mt)+dOuZ#@42(BHmltEvBU@K`fA40e>!UfgJ= zvV@wC{yUc7slHeWhZv?GTO&A~!4E=yS}B_*Yks%F{qIu$biqP?5H&2j>GZ?1`9Z+j zlZ?1j<(z8TdvPOT(i`%dX8zm^ZRPN=eP*yrf6o%h6B<`%dn^X|#eyEeSu^{*HClml z&&y>xf`qhnF}Y9SYv%-x3pC;BjTJ#ze}N7H!fFt{Vr*IyUSd8kU2)@uPsB4SzTZNA zdk+{}ij4i_#r+fckxQ3{VeMboTEL7gx7K_ueT72uXsw#h)ov)fP0T$h(uUZz@1;5_ z=#vX%WpQeYo{17sL%C}uIY6wMK)$q-X3QK+l+(Niu?vwet%iFCP>p@9GbK8v7GpMMyXdhLr+1G6%v6R!r@ z$wI|~bjpn{=$0)wI>rugI5$-V z>OF|`j8S+bToNca1yA{gM(ggxp3PP5_pYqx5?em<$Kxes*xpjQ_rB!qR=G@BqH3y6 zl7eQf=8~0_%@U9mXi5S}QdpkE{kuHbTUw3xH<9~WUy{hczk!7wS3S-}U>}UEyK$qB zPAkN1JRuiQ(Qe^xIhI2Dr8YhQW_y{z8nVC%_%3Zz5xC3}YZS6p!RtWkW59N1Z zGYXVN75_k?u6UHNamFjGsa!C!h>QF-!Tow%CxLe|OH=T29GjDa39a{`Q8Q4N$UrEz=EC%9VA-&AhN&k)Kf`NwaJ1 zLM+pWd{++<4{|OiWO=bggUVP7!ji@e4O(YD^)ji9AA{^l zfHPa<+}NcC%lKI0_m3ae^qahxb+QF& z4FlM+H!`af;LHl$F(=tOR><_7#n%5EvCpc0v_=L|{OwKt?A=D+5YIv2I5Nk&a;aXq z{c}Q;_MbQdR?wCMUbIN0m*OKP)e9YBi!;|{DnBike*5t@RL+=E>D*GUhF0%Zr2bN~ z>~Ui!(oQMuFVX(?dkHZ*jtFNY+}R4HWojw{(tUk&i+FMs z>~DV`3~M>b=oF8bRQ!oW%clFF#!E@Z+p}cq(wG)S>;dpdt{-&IkPBSOro8xM6n3u9 zRyQR+kUsryN-X~l@bfw$9LI|hO|xsS*_xnqk>3DCVxCi276y}d;8Cwg|aoR)p;bE!yWEt1~m z!__2=c0r4ePYwL#U+T3`J>{)KH!#LNF-)^FJr4<)?0WWFH{xD13e*y7A>5=qwx#Cek%0bq47cHEb!i3t(z> z(3%HWl|X!&OxKY|w=wEc8hyoRWWKNX9Vhz-OMV5kO2t>X;_uXW74_JDJ*z+d4*lgB z#(7Z!<D`Qd@v39|_1M4Jv(}up=KYNBv#;B8$ zrDXETzIWS7`8_&Ui}mLvC8Lf`<0mvr+dxi&8XD2w zUPHmd$e-8s@S1~Y{~viBhxwL*mHJ3}oPM14_fp*tKE46=_f{%)@26#@3E?5WuMWBY z)gT*1+y)dE!J;kNN5kY(oQtdUtcvG?^?@z`ze$)lQ2EGJx3Rhkkr+OB=1e>_N8ghK*J$c<#pYBmg&BjAuyEnyc zru-xjS^~DW$X1}AR`{jXeaʓ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

    1#L)zLNz*+#=SsA3nISu_u>+vnV zji1~xPl}CtVbi^IM*FpnQ+*vd&KC+Cma%tpb(ve^UKeDCJ3DOAteupVU{_+zpSu_V z+sT}8@DVwxgHfFhJ_z?{be??_Tp7e)x&fsE$Vb9olA+05D*V$V53_9ei|X!1#M~Z| zFL+@q+$09er^2EvSEsGr!8xvd-0E=nCH-tCdE~l!Z~J4Mew}~$2)0}Kl{dLz6ZO?B z>av#xZXS11&JT-4tK>(d#8obvr^vfUK3|JZQ-Xn`toUpqj$6bkLZ};@AaiA*jcYBk zao9ZMJ1wGI39hzk_)dx^-6NYO6_i}za<{|%*D0k7@sk%xgI$_^6C`)_`V4}fD1x<& zfMDSmPvzV?Y-Dv2Ke^8gX}b?aEPDU_+(qq8m$mrxLuw$~d|5O44umwNDEHFir-iR`X}N6Og>(1?k!d zAxqo44f9_t;L&=vXa=q^G_fWngndcm;2dp3B=NkRCQeLH%D`u<(?lX<(c|Wc_oWt7 zi}6S5%$4K#)fbxybL5p$f?PEiEV({-aYGg7R%7lR-FRz8Vbq?}AR&?b^N^P^0K%!K z6ifD?{lZk>^*;lKU??@Bo7>Pqt(w#RgWDwoCr;Ffa31XXxAR7F-(yAe5I@aS%yFsS z^OGCu2~GN&nC+(zU_Y(v)1XijsBzvXFO~OR+7p{0Q6V3fagZd4`v>)dpKvV@HWyp$ zr=0k=QUV?_@ZCA`(981}%35YUJ4?_`5MGIC9Y>9d73eP+|1T{sWUs9MQj$FTEUw7H zEZq!F?rWmp6X<|H8 z1jo>>S;qTP3whc>_9C92oZ8B7UBn;Z)-%i#uK418DuYOh##}67o{g%gQXT{rG5n*( zfxlUheIY&w)er4XQ}flN|2ELdJS#P7wuWl_#bLhd1`Rkz>g?iZK;}D$wvnbd z0G3a&9MWpS;G~|r;P_WEEDl2dP{H}t1<=GhRt9#=nMn8g>CU>m@kq0f-l z2RKbWi>w5%sLS!*x4hT^Ff({q7cA%?ZBgNh*%-@Ig;O_^3;@*cqq>#+iF(yKMCwN< ztL9srREK6e+$JSB++oEWasq{Mij02@E-ij=+&A)SYRF3DZ3``aH;YpSoM!=#Vhz;n zWBj6@|HBbFXDxPUm~Xs`Au*?9Wd>B2HfcRbH>)Dj2V&Gye$-(w+8+^&~i@ktD zex1mevyb3&JIqKgsP+`zKvzh~oL-Z;Ydv(- z!utWkkDW{+ly?7F){H+OJ-(_DQrVy{(n5tpM9B!LSX9Li+sM$?(+?Kib*=eI{}Ise z6{<7$C)9pJFJv3tTw3k{w%uC|AMFT%Z3iiBqNYI26NlL>x~d}@k?4h~Bdjk=8}o(~ z;L|riRqh>}cFUF#{*lsRrmQJUODZ%7Sk&v(5^w$?D;-pb^p!hp-9>Eq!K7j8o?HPL z4|UTvKA_FcF}YIA(9VFYpxuh-$w)lTq{G9gZHVVsQ71Y3jX|p2Of(-pmUyLkj!F6SZqO5%Nj-NbL zl=D3!^V%{r(A;VEpQiR)r=iHw4d6_Ia_KnKWxcvrrf}PTgNH zHcZ`{g4xquLpbs@!SaAqMK*EomL|(B74@pOh=2ik(j_q zBW3P!m#xJr#vR(3Hsq+ArsJ_eH^!>}z#XoTHXq&G#!${F1`qDSH+z^9yX!-ADDXct zJx1?`W)L?%Q(q|fo}x4vWtjuZn0?K%=n{MvxeJstUK3;ji)cy8cP>hp|YyDGgSYc_9BYFAa>k@s`4KJ z6_g#-TOwAnB-`0HE@;2IYaEi5g~m0TjQ^yJP^S+w61G5h7_RNDtws@=uLhrk3ke|a9m*qkVLwmip{F@!I{9g~M~3(fI`NQON6 zTDh$Cy53M|AM$zl-0@X**8x(V(d7eA36$V z?QQ01&$MHOB)aamwQv;3$}zvFBuuf;gdvy9#6KixMlqqpTN7#4Efw!zb$q+$*h)+ z<*~amsKrY)D=M+v5ZPNe0<ifigt0!u<38AglR zRPv>J&?VLAw>!|(F9O4dZOc?eH#D>59v0#-jUuDyt^GR>Oh#-`F6YRM=6 z(7au+w$0=+e_e?1W;^X6i-2i|XhQ|6qXyAlM7UPoS|>%MnSN*=#^&CZov_K9;|Zm5 zJ!=@$;0cDPeNUk0XN!pi=*b-A#60Cko9eHm&vA+-bAKg)KCGk7nXOvvrfsK3kF#4! zigymMcAjJyoOf}*cx$xQ;@*e`8~F8+mX>z#n3_D-KXT3*WtG~!R?(l6PJVPuPpNuo z++vIE^UvAP%M-l%_$je@x@aCg@$5W&O-R1tm62w84|bJX^EcT7N}H=Xs@-Sf(m7uV zu8NB+%(6oI(aqjOp&>`o&l7KTuKq&4_8MPC53gl7T0l$R8=Tk8kt}4Vx;8YxS1n~f zhrWNp&mBgWmmtem<4K^`5h>ad4#x@kOKQ-TZOT8Leom@xq%O8q5vVh3U0Y{j^V`kZ zbE^>tujuAu3!B$baTdE~uhC6M=B*#Q!H)ani4Ll*szCA&dQTy!Spq28NUnrGG+!}D z>FIuMJ;V*j(~mLjXHCeAWoS8`ux7WP6&#~Q!iQ6{<5rP(hiI#t-L+1RPrmWAjm9s{ z8LQVIaJ_8n2W~fBFVze(DhZI_`7Ws;9}QcIb(3P^4aeW!xl0>>Ykv^=>Zgd}3!#Ym zu9w5qWj0P9Xkxm953)!vUc}jig&qs=s)>62jMHTciuafI_;x46jKiresR!KD-KXO->oy>{oat? zJo{gRTG47y_u5);rRpLBza!9`o~ofId@v*d8?Hm&!0}ObI1YL-(4{FG(YYlC?a509 zex!E5M>T|Rhb4P}gr$F#{MKX{n<u=wqy*@y;B45ctT6gkoo*G25H3f{+ zF^IVyB}UD0sPB%?nx`Y1EEPQ5|J zx+A^YY$KdjV?xrpdNMqdpoZ4AB>5|3WMyGz+@EC_e-!CuS=J&=qf1TQ!dK?Ab;PlJZz9xWaN%qNEB%yu!q zv!BSvoN!=hI%tbLBM(9xHhZbpEo%FqhrSw$z95zvKzPMrBp*vU;^H2 zVzI*Dv;(M3V&Aat56~%{99e<}+1P#H7pshNKD`|KYNvgfFC^xCnIzBVUg3twajNIM z@}$GPQt^qsVElD?hi%Q1VQYUgmeE330H9B}DnIti#=Aghxkbly&}b7dq?0X3ht7>r zz3q_;&`D>Zi7Yfnd$JbqqK6TPs+aUo71S7BZgg-1(#xr@u&O*wFl8;)YYUBi1CgQg zvKaTmpx5~dyI_O*C^0<4v1Q5xR(7w~LkKLS4r?>?k(<5ta$m-TlZ7 ze=qx$5S7m1s3~4Oul=IMp+#-Ypq-<1tE_b7;1`hIaew0CpAy zbeUWon~{-0vi`y2k)DJK7(LMhe&rMwH=Pq*vr_Wha&3eQ(U;I5R+S}u)Qe$I zyZ(^#_?^2rLDC%qj;v!~cdqIE^2S+x zM!sO!&b16L<)Iv#TLyWX{7&>wf)6At1=GB*Bb33GDxT`2ohlG~C~LiEU?_K!%%lv>Hmj%4NX$ZXA*C^&lDqdURh86Eu!oI_ z{X?IZYjq^x-QrH{gyy0)Q6#jPC%&*kc zl4DsHR~ZynNr0acwpyV{!?iGwBe4pPquJI|PG^W;6F#SMxhuQoKdf$m7kd@j@s%f@ zO|>$x*Nf1WNa1OvWxNlPg|s9I&H;5))2xc{_tNf$B;bfAmdRPPpblLy46pN)+rNhA z3}|2QL~+t_`i?3;aWIlAH%paQd0HK=ZOGkIT?K#J0NQp{RF5RL?`IVt+ zG+v{QYN15O<$mI&qL7)DvJ1|(^Zie@flkOGL|q$6Lj&?sdjstK2W8@HNz5qw%zpm5 z?HYuWT1YQ3Ra*nHj5GYL_G|m3%|H2AyPcSBJnZ^KitVxxANj&_ssBI}=-iRzG02Fb zmzN4Sc9l|!ns_~9ol;4dRTrx$l`UMI1aN~0;5S2Iby9n^l~^WpVTDzZ^UAxC(ETN*sVW+~Q(gP(a8iWRxv@@sPY~16t~>AOeTW%>FnP zfc!RgT8v#^A#|V^Q*@X|b&1?!L$Pw3r9E7%9Hd*pnvYXm2_3p@h{#yiB#{;r_@Wsb z`J1`54i9MOpF1ywBd^F?ggtkST-m<(tACsZL(T zhBK|}8w&#~Y?3If8fUh*87_kzzZJpZt~w`6KwLnn-$G4jR!kye-O@7R59Oto2R~A@ z))|!1!%{H`ej|nL=NATt$Of^$F=Q`A(jy~y1j<~s_DnywVOleANqzvV^E@U4BTmp) z)yeE2jN_|uWNMNoY2I0xRUrWpq>ORo^hEjo*Hp?!DGblJM`${is8sUjYYdRJ*u+oM z1J@j;p9$wr;xAPp#1?_8mRA-SUp@@xF^zkaWXTCrd#!3;P)Mc?VoB|(0F(hpK6KAv zxZPV^2yU4qTc4B$PtDTHo`9)tQA#=*c3bWJT(^Pbip7}-Uu zn3|fBDnFG$NY0~$E+&;e&Ijnr;34))6Uv8+Qikp(f_VTZr)w4i^N8Edo(g_zv0j#8 ziEK1F3k)~Na=Cgv^w?N_V1?#-LBjo9B_LO`!SaXlRsn z*)qvF^B&eIsczqtp0gIt;7Z-Cojm--=_>rmmbbIN^VTjY04uFVavIbD8^46#mOT#` zmlqF0irzOqVsjwwl|U<%+^OZxqDiVi0lqyH=l(xL@~*=D#t zT(S|T`N>W6#78ZOc5Oj9G8=Lr+!FE5FP zh+^Y^N0)dLJkBJK4JwO=C$kv~Hd-K{sZV ztR;X1-2$`B(8)C+roWwZI3R znKpBox=&Wr?mq@TD)Z;FPN#s`sr)Ub@}U8#fq9|5T(+F>L}1vOg+!@9O`0+#^@AmF z%2GHy20oYw{pCjZT73C;ia}Uu9PfI?WVGu?+8&3`F995);a4t{v*UPCbpX;L zh$a+ElQg!%a-d?>FuSj|4*7L$Qytw8jp?EszKyM^K}M+E$-3TWxU69V520qs`j?Wk z=b-6?r!z!0Ws2kmylwo|f@WtYqIJ0qXpPmV18?))x5-;WHD4@h-rpg|T%4zU=2~z5 z2#ApF13L&UN3Xpfza>U+vl$1LXB+qH@ea?L15iRC!%Su1+&&**X=2{>>x!h3RadA z`py{)O>|K8KQQmE(V_ua%7Fvm%GboO%W1wxG~8hCTg%_xd3zUUe=-*ncZ~d5?YVORk8wVH&e<&1^pxJiyk;%$F9hhm7*7tQ{Wrc zjkfO}Ckj?H(>~vioO{_&to_Xn#En{rs3?)ZiHwHJ)@TFYOC`C~u9eWg1c3Nlq|^2o zZ3PEQ%+LFc>-0aVaMCg(!g9DZk=XA(cg7^t7vO8X&d$G?IcZHkG!ZZAlI<}f-g3)L z{$G}HSvT83IgSmJuhFru>#$pIZs*JPm)Xz!5^);k8KbKOTSe{u$73k zja4~9KKbO^?Hu)WyLZ8awRC0YVxBS+j=hQyf~3D#d7W+^(|ytYKhhNSv&)^nI_nx} zP~at5OSbBUfq*+%=Ix`JhkVJ0GIknVzKx8tH-RDd6!8m`EDsMFy19v`>oXRX|5V5Z z*b=Rye^WbfWBqPZqCeFL7=>!rI;-A~v9lVwd<0vK?01q+n!9Oxdz^ks_2clTqT2*# zWYe;8=bu&{0DpdnMm-bD{*lnL+J84PlzAjhB{|J9Ze>w}W!<}<++l3G?%y;)uZ;4g$DldD6uyVL z#D!!xC{Pyla)M@`Q5I}k*^F|mIZfS8IIq;9NdMedg_#E$*5bbh)?fZijFmrH&64Osu*LRordgPBS>*bW;dU~ znrIe$EZQUIa)bt!Bt#vtQ`FaO;x?S8_FBni%|g84zl|$s$oU9~&NuR)jetkB z3uqV||M{7lRc)QzWv!v{gbqFWV97n^uZi^yg_~p1L2P_8CIfWG=4ud7yo*|sGRW;% zMt%VvTSnR8p-It>Q|D>^u~Vh!{qShW=J@42?Xo=vr7Qb-B=C`lR_2UQ|6BSHSVCe` zv_|{!!naaQ=G^G!2y06os{z{8Eq16%Jr1QSl(C538sndWVnm|A!UJa{b0k_ow3 z$ZhqSXe(jCA%%HmNxnf=oi6;OWH#*A4sn}z_+TB57Ty@i{^>Av$|WH24Qc+U_V03p zHTD2lHVMAYV1)!2eVGBi2cJ46LyOaq_k5QWEeLB5PM1UxpNGnNY+$@WM=S9n+e-x2 zsr0LSu0Pz_V~~o4Xe?JedqV1|W2TGVtL>BwRUUgET~v_{I?U4l2?l+n2bsoZD-;$M zAGI)3CH(Xem@*8^Ce4~Dt}niPs7kc_rHLyeaSN8pN1;2*5=A-P|t&p@X< zgo4THt;SCW6kZQW=iLD2RkW226P&q_?c<6pvAW0;eB#@1hc+j`pqJT|7E6z>`pONQ zDi7OdP&3~Jf8zxpb7xB$U2jpXF;E}5=G$2vxub8!ugKegHIH2hz_~lAXDlq4$wjHSF zv-^bpP3h6dhbcATNri!B`1~m0>w;(ViwU9uEy96a;%SJ2pCY{PB1RC3zlsVRY}6Qz>BeIq|YGlAu_aQR=j zx;PgH$nEw7Ff3x{Y5b^tbPZMQX?Bpx(XNeiFF61{b0(!N(TVJ9D#6oR+ys#M`ZiwN zMl}w6wdYTA7rca)3N#1N1&a>K%p0D6d7RjsWV04~kr~~5>-uec-u>U-csW18nsCyJ zG4|`{_kb4}P~WmKkhxPo%3d%Jo0*E$DNI9l>IgifS(k1{F)sh^B>o6@c>*`=0ufTV z*C_Q^IeA4rD|9Eh{)m0nyLWHCVS`kEgf!>2a^f@13ro?l+@Bv^8oY}(oA8S^%1W=v zekd~keZ%9ai;QG3M%3%OK>M!-n|#?)2f$~2Mh2Bi>1i>S__gD-V?W<%$;^;Ta=W>h z;uF$3*1`f+gj)_IypnHrv%?OG-U+v2lVW&>*O75F~>3IIM1bfa1${fb5Rvj zd_KeXr{+wC8jgY&V>nK8%S~4?!X>PI{(^D#9DSnfX9QPr%BqCr^pyo`aqlcoCy%MJ zf1^HA3A(EM>Tet5Cq=*}V#!AyLQl+k;u(^0nk_I)wY7x~FE!YReopSjLUjWk49wrI zWIsMa*h_ly|NDkd&gkUplg8L*P95JIE>=N--;F0-xdmPe-sm57&{52NB`pJsmG^^c z=TVNx7|P!^{z~Q_M6lG>tyrVpE_ubcQDv3DF;JiH5lQ9KX&a}z+?}Jl;)T_j)LN{! zf&xF2T)-|da1}iMfiB+Ml~}`bIyb>-E5U&4Gq=)u@#wzC^G1ikMmDRY1&5N0u@8r& z>h)leQ;ipN_*I*5Xsqa^QOgriP*$%`;B>{@oM>3`H|vzeqU`Uar5Dg&JLK!#(S%mG z?K5`r=vpksS~X7gK2k=I>|Q0~MOHGnt6bE()AV2t(Y_GOsx+EJ{#F_g`6^%AJy-?C zK8_5lZ&O0f9N90w@e!!MKJuVtDzY0)hybVh`|;!Oz#sISnJn>=W2Pa{sCB)Mx&24{ zw^fJ6PxYO%%Oyq&K5YNBlq_V{w#6L{*FMn01!XYXu!X|@?&ydcCp!T;2FOP;lRn=tX=91G6Cfs)Ja7#5) znofEEOfe8$uo`pv>zAaxJf)v+FcMmZ&34lKEWp?Nj4)7+lw;r$VeSFbivFax?A=is zSM>(%m3Z7E8F(}g+G9!hNA_!O0fZkk6=nSL_eZH3zBxnto4F{_u%mjh8=(WeZrON) zoYgpCu=$0wOm5J*O>IyC*NrOYshNOsLY$9Hw?mvMIWx3cB1^LtJYgNwVy{~9?Mua5 zsjGa^;@4vT|M6|tc3nHKbL+UJbkKQA zrD9t#A=#azh!&~kklhI(?b=pyNG3_Sr7J?*4&8LS<963p4pU?jLYQ+16FRQ#cYS~V zfX8Fmwd?bFzhAHC6YZ}|wN88iX94^#7|#X|AR`H~N;AK5S(eOH9K>zMxYhu+PpPUN z>Y4>yK45z^+=2ZY<1U@*cSnV@yB0!!8oLVZa#}rtR~1DNDoE4d@tPL-g(Hg47XCpu z>0v#$(efs3z&R*}vPqclq5NYyYVVzbZ;~7Bqt3E_zl|B74vWA}(DgBUsm zj7_KRB}+?{!*lryS>8p3(feA!VnV;wdOO3fNxFZznsYg-DUECDEHS(PY}E^aw{cQk z9LD#53OY=p2wpIEC3wnLbiuwri0xUdzdzkm0y*`gXJC6oP7%Gpj9TX2^YozdM=8z! zRbX=qA~QxwzWo?SaSSDIBR;$qo*3PSM zArGMRvwBR;+&1#Z0r`|19m4Tuz(e=t`*slQl*qqyO@V5kd~>TjKBSm>0G&NDQkZI5 z8fb_LZ{*^BI!h{T--bw+6jv^m2{r`@GAkX-!TbQ9Ot>h}z5Y06&Pr9}BDZZ@+1;p& z=?qTy%1gIQMb!tb08hAOYWstG*C9J7z(~^?orb0_mLS4g=nyLQCCa5$9AYVOmQ8Cd zqmE%y0w~igUi0!p?cSb}>7Hb1&yua1?^7I$#?7_ZC3OligeHAJyWVDMJ4@RBk@vGP zRVW2;-L=@qj{2F5GkS3+NpK(d=)r%ztC&!ptH~K<9Ns?GiMeE5Ucq!T5jJ;JF~!hy zdBl4pvspzo(Bn3VX6tz)VpgW8ofzJB!xy}E6l!{Gk<8?@VEtDb+ttIBtkmyH#$VWd ziTos_V06N=>P{;cj)*jVBWRQWuN8BsJlF(m4oxmjc4*E|cHn7*PdBd-3o_Ky&A+l{wWvAuH&Mf}3sIvVFA6K*?{kZ(w3;^t9c+Iy}Ss ztKjj%?cmfh`Fq&WDNX(nTfpNqVn#-QZZ^1g%uJ|6gZ|U1tK7EL@s;ZumB;yj2a+;P zRE_PbHoILyUuaKdvBw<~Uz*H}ma9Ojlf2`oOqJ`JNA~58yjTTF|HED3+J}4vpZ>T- zrI)9*nmFu^4MK@FC>l&KD+8k8ke}7*d$Ux3^Fw{P8TUdXee2!HFPzYiS}_JKo!>@0 z{imk$7n6S~@{;m_#fTvQlnPN<-FwXD0L`Cq=S-F{-@sdPEHjuZ#a)o&p6?+|N#I|4 zrn+Qpih-)plB-XDqv{(1jKO6_YU+%8LyUZky*szb1d&Z8)KX)~Kd0ao>ReXd;FwHj z;)$Ywg`d_VN`4l_2z{UkrQG2hiB2IRED~?F zC(TxaQYPZ!CweRI`VF&gGhF2F9&%4H$jP|rU~?1EM8xa=UWDYLc7}3FFBZ=_2BPVP zkR__6;u>4@%C$gFpq&X8EVV?~gnQnC%+hKm^5;cUOm`HD#B&cX6TkC?bTd}bCdXbP zNbLI0M4}>%%IbMjIs|ha`d#kK{nSC#PhDNA%KOfES_N*_quvh}6_{zDK~!p~;Snu- zlX~4#ncDiS<{awRQ!v6acI5R7hA%3XPErf<4e->U`Eb`R%)S8S(@aF3EWTzUoTPY4 zp5mX}z^@q>{71|wMDO{}Ni7>}n44s#M*g6OfoeChYXtq*FB0<36C}c#;)B*v#Orr3 zjzs*6sm4Qu*Cl5CNk|tV*=E^%aaXZr)2Sa`;RRI!?osKugM6tcd$H%lXeX6~6-xe~ zCGyY~>l{Nm8UU=x*Zp_%jy~Sb-MxM#aSDSE_?W9SvoE4^1{@T4k8l;NyvNVR_E_T{ zo?08H6G()yTXCyMoyavC7TGT}*<8ECc# zsIrXMMzsR|poF}>#}i7@ZxNq_fvdfh-8W=l{(H=_ozy|7KRQcm3KmM`_@mG9WyiiZ zUJOz%_*v9s!&I+%DL?2IJKcB0m8 zluZk_RNj?8r6;u$=i^n)#d+m!HF)V$>|&|v-DLzf5h?X?X$X1qI%5UDzbJE4<6jo{ zWqP5N$AH^IpvPa|jN9mpbYje0^{v_bIfIPGbc0hkjuE+5|KZzul$TXPlwaPcbjsnc z6wF&{;>aWLar%%uL>h7DdNf+9nx#qwb6sMOy7cOdge8^ewT-_H+3uhloeK6+U7AiS znY3b0j%z$!|Gadqn8*F=qGI+dLCs{k{;9hz?!f~6LlOee!v)!L^bJgEuCI_2UWW=j z`>j~$XO*V8dl&KRXf14qp8s%myODP%^$)Vp?aA^S#+3`!Rp(97!l&l8%$T}^P`w{+ z`RDKU-T8ov^!l9}YBgo~BrSE>QB$ovt%}i?g4sgo*@gXLOW3%Af2%|}dk9Yd?vy7b zHU?p*l5b4gqPYY&f?<+r+EamP>{F4-L7O*$`duGN^-Fe<^7ym{LuLjpQ1<$5Q4y`3 zCy6rx%PciogKhp*AMYdRKC1DlJoOD`b)q>d1KxXG*;Y(?Bp8LV+2&O+)dHRpZ_t`# zqFH7}E;-aYFlI5js>vxp7NRT#G?DlV*#QL2=)Kab-bH>QxE)ZC?bZoN$L?g9XR- zV?);5Ci{u5%d@>MUy=)!&#!)U`^z|$GX4zZTUHQ(*>j>-|H;g#sBk#SYrfUEZn=Ga z>+yB5Qa_k&z{oMJS(WRQaNAgdieB1Dxz_a;R~1#9GjtbWPb+T| zhr^ni@mrizGvz=jT8GKitfZ7S8oMx$p@4@>w*bt>!gv40IGDC$Uz{8Mz&LwTSRq3O zoxM#?&6mGNHdv31Qrh>ef9WtoW^6M!l-#%)T z{M3D@78_;2&DdW4ikIIAH2K+vTx4W#gWKM->KD=nc>p(GjX6@uSE6%A3*ddAp?taM zFyUbxa*=d(v17sO;D%)Ip{CTVcHw7Ax1#VsZjc;WtX|xxX|u@i2i}UDM1?z=?3u`w zV(eNl|H`MAW|S)~%#YcHJu=(Wmc)b|!_4S&9RIy|W1C5E^{~GA9pR|>4#C-gXB`E5 zpt;{l)hR)tg~8x&$S{9fe@o%G#_*A1h}bDpui7RPKrA`fZ{qIE#W~$Vi6nc}0;Wi9 zET-DY695SU+eU1|``2r1@_)l!ySAe~C3fLYUcH<|hNNvus;hD?Lo@?;8A&NS)r!22 z1oA~BoAc%>{YPp>Xv1IT@o|*8>WFSlE{4|sPI4^8oo^ZG#IIAg<)U1N`hBCU`*{4R zWKU3c*6-|wd*JCl%~rwU!$B8w6_3kchCOx^O00w(Kj~5?>n2VkdDsAoAp1*To(Sa$ z{Anx+EpjXQWJ=eMFjhALksRFvieQ~pFS{enFgR|e_N5+Cp)<}51L1Nrrs;@HF8Q0x z@Ita&Us|`bnb`jLrGC~&s&Pe|KF<%IdIJ9`Uor2kOw~lod4_)QURkMrCO*46n4_-z zOVRlSJ=NiXrWVlafmwyc8q_ZRY7Y8)rJhazya8 z)H|5_z>?2xIO?94t%5JKQ|@(t@FMIbR6}p&pOVBN;AO4)Lxx%6LSb@(vL_8?Am9#JM(OEKl5xvBahu%TtwZ88 zmYB{5s!c#cfqbUrr0IXb6rl)*)*1J?Dq`qwwKQzOE)dgc1#`o`!LTPmtR^A2`&A-ab5a_DJ+NuYTqZ zkHsRv4g8k^<-=%4sj7)Yw$_$XGUhn?RkD37y8puEOo2{{bg===>xUVyvvkzJ5$zy) zWzzi4n1q(Pb`hmTF>z?>!RNYQ4$AFngGLz{<1%R@`sL=Em1~l84Yw}Hbhy_%k9j7j ztf3IR+@hJ6U0vsHE0&p*C;dDdZ>e`3B8BWG{qob+v1c2VHZUSzuRFbu2h%ZoPjcF< zJ$qcG#}Dk1|KZYYFpW7i-F4yoi+!>W>zsmH{~DD(G+-erPnbEA!1x&{39$@Oj54B% z38#sgU(>V~L=?@uZ*2SD6>rM+W4lM>Hm-51kh{cyOwBaFQK@Qs#ml(umyd=%GOO&< zxkhBfOz5LvcQ4cpR`B#dF@GKdC5wK(?*`cGQJ|sSkSZJ^K+QSh5M^=fEi|FnKc@hh zWZ7)9-=(<}UjY>w;ejid+T~CW_2@%o1{)OJ09qbf*+j&}83ss4HRC{zqg+T}78=J% z*^i7Rd7=DQ)NFRlZm-_L>7rR`QtBpfwMaeWDxd2veWk(Qwny%7mOcfy;ZOnBq#QQD zQw`!aS#rZCf};l=M)X8ciwU)DEu~>@&(+?~bMg_(VvfwPWZ}py)b^on3(&r-pBxU^$zSJ;rL} zBRz@FRrVoucwzQSL=Sb$&m6Q*{w0FVH^X0mu1%#uPPo!#5O z)h#odqI0dAV}^%)^N+K7XT=%S=(V#$>RvUPXwtko|$EO%jMMfVL*+l&R&R{5oEt?;!PCr%}U_8T`&PF~a4v-_V?(uHA!a7!YH;;=yo?EyU)k zYi5av!O_1IiRk@d-ZoIXF^EbH`pw{N>yEymf$Y&vwVL>#lNjd8`2#r1fai$>P-^gB z7v-}LrYp~=20!qcjc<(iI@Mk`iNCD8`^-T`?2a4z-;`*)PM-PGHz+k~!$J8TLKC@& zbmSy^>1vbUQw*DM^%$vq20tFI_`^?~;(_)sJBaZzvwXUVhb)?dM7(CzS3{eEBpCE$ zaAk-Qp%`N2f9Y7SU+$?tKSdf-wfCS?>Pf{?d$Ze?*>Oea@z3e!p;vDf_q#3;PkMu= zkxf}ehm^>lsHqr23>a7ZuMfV`AVNfM+ahdiyt$cuS)D4jmH%C5mzL;SQ>a|~~DPoGOk4m6e&yEG}u9Wjl$ zw8WDWfc-ow60UIm^o!waLR45=AJyj~cpj-*KI)jal@s*BjD^aZ;R2m&--1??!s&xv z_+A!!1?*UfJdg^M5=5R+sDJUhsD_bK62#R!a0rJ`F*R$GI2~WD0e3v)^;WWDQh>|21x~X?X(OT+jkW|6CQeGQo8bQq3t9POB4OBxK(C~`J9}bLjKf?Mk;;Nzs!rh z1#!~VY6H;k8EPlW!O@oh?W0gedrENoL<0mTP}uAY^;hJ`4n){th0?$ zMOZ~~$y6tu+H2(eH#1VVQm9?M8Hud!<)3Pf1{aw%l`q?V49SvDmRz`s+Y=;TLyC2$ zSY?Y(!JV7L`K{X~?2g2zq_}L(PoR&uQw*1Z|;c z2KE6W?`u_sw#j0fxbVEKQcLWgr|VV)UTY_;{RgwyPu}5W_~erRJ9_Bswu8t)(Y;6` zG?|p)JaMwc2i}j5wz8PH`KRA8JpNK|eaarj z-AaLJJ~Q7qMyo{>JqDZ%6vq?-Q7q9nwh?^PubdRy+z zk0lXT*9*oxL=f;xDIB!unw^KRbL7rdD8ff3m`$%jXej(_vx3Ystmc9ShYKp-oBU#{ zpaa`+@#~e2y#;EaLw+9EBf&AY@Ew%~74FnVk+PW7*9td(U;%4MA>PzN6L3yYk~df5 zLXjq$p?#^Ql9SOnNtqHSvdv?3>E*REyHwwSp1zwo(SL|_9cYU3Bh!uG6<&kc*9jh- zNxrJJf4j!u7KnVZIlP0vZ72UbaW$d_UHDgQE3lg5i>V?O966?%--klM-tg9HA&*;H zVl5$K1>Ee=6!MPIzdAzohsg|Oi9~g6TFkS5N!jR;09ZDOdPY^vOz-sO*NnBQ=xE^D z;3(71SPV*=+bSRNI|*pQ&`srWowzRG1G#q=bMfoDfhQ6N9|l*0f;mun+hIl#-KWBQM_%49IKkSTv~ zSS(X^Pi?pb?p`B#L?{W@(M5flLyuvur@M!^Zd;9cqWEMTil~`Y?FNJ*MqD1`WpLbM zKGGO{*x|^QLX%=(6~<*bE+u-5l{kqDJB}b-&ud$e{k>*gF43FdzeT_;U8_jdr^JX< ziVFfv(o#P)$foFWL|ecmOYlpk8W;m@X8iz0WAjJBsUyr!}(J*U0Lv*_l+=`MOfX?s=H{P$U!H* zvDX!uB)3a>{Mn|G>(==>3R3q+`Y5 z4$}{C8(%|#H*iS<{C``pH>SZ5EWId2{~FJcypiFF1xSk7;b-)5=H*|TxKZ0icfSH8 zL-ti}ChV69Fz@wc!UiT@4mEl2ByxH`B%K*-wbgC*w0&f}m@lTp~vwZO7;|n~^X~xxL zIkw`wY+{U5y$-rcYVxz`12Lygx2iN*2EKI@AM522`v$u9(&;VIifm<;pH#b%zZha- ztfKa4F?YY}=}zHk@}ZJk#T)F~-&H9`oKn0RRp`v;4v3RiBj5WH6m zMmkBKOlgo4mK1A<*IWs2p?KY#E)>8LCVdm;Za^%Bo>GQWL4$q%Jj~kngq{yrR3k(U zJp1Ms>)J(DC>PVQ23@#_G5*`}w0@MofN*S*1IQR?6(5L3qUg)J80XwIUjU)*SGsD< zCS?4_58jF^!S!gYwMZk2J&kcy7M)t8og_2NIi};-R1WmY|NFPKmHqMShkb!mUB?k@ zg4YD}IE6i)!vDe*%@|?)hD*S7eKfl%cc`R0Jkms#)Hx|;H=J4X1e2TP)3hAiI7P70 z+C7n;hvhaO85`a8D$qb*rc*mKTq4f+A;((P>dV5=ZHWs8dYXV)-aE!f@Rol{mpY*< z1gVo1X9=S$OShWYxKe#^vd80#K`|YXqGb61crFz8&t&8mGr#dI&!YxDCx-8g!Jj6H zX4~hjj%uDoTI&bfWgBr9w3u0dM~;}AOVu@@&ad~HU-SXBUF@pcsL;BDoUou3_dZ3a zwL$&txxfIg-USHg5&Q~kJV&5&Q80pJ1pT%i)sq=E>-2eht8CI?PX;L2q9NW3))ipr zC(!4W?&Do$(vUZ)Qjh?LhUa(=#@W*XFbN(+HgsW@jo%nKN6p?k5G; zZIs`zY|7Z-8Q172dW!vLI{QnXnJUvy;8B3sM?n7UAXQ(__^6ZLg&*G6(Z|d(y}u(B z>52j}4nC6^h8#Sltzbncf9j00Cd@n8NwexvD8;&oft_Dl+UPA-{B2~4|I%Opl@Xsk z%#~ZC6ikx8b&sED7N*0u6<#>%JZUWznS;?ysT{7Ip?pTr%fHBUON#en2ZTDB(^+Tr zIS=*xS7LuN^F|C#VBnS4d^HA!gePYZL;FearU6+T#Mm4 zdTgH*vCZrjL(re09Z_pg`9cFgFvuj=`5dVJH^RrY=90wsY(TRRC;A6{qh*84+nBra z4R<;)yZATFs{L-NalU}ilFUrJFP|WitU*b?X7(zk+Y9_GPQGW67las*!IE`ZWklU`hw^HcF5l z<4LO;ag6EMWg9W^K`KlZ=F4=HwwD7&%*2F5g7F3&4s!ml)U3Iir%evY;1NR_kQ!lQ zv1+E4SnYsaU?*QuM#|lYjhmkT^&1-bLTwR67WvbxMwWXdU+3`KM|t(f$%p3{!HD#| zSafk)4LHrjuo^TNG;vg<#msZkTh5be&{}NnGQwHns+kqvbZr)?x8!})nl|t^{q(f}jIP;y3$C0i_dz8Bks>sQDv^CJADSAr$N3c@jY1aAoS$;Y70%vAx|VVXdn8nS+S=+Bl~))|x4;$qhe<<;6(Q9~I^%cJbphMz{fyXu z3EkekIIeXn>?4+Pzln%%zFT1M&cu1#Xa!IV-xnO;7E>`jqO!yXOZ zaj;o`6Pr=#67`zA&emMw;REJJVD4p@fpy8ihf8SLc78JOb2v>~YL$QT2g@T((MD=& zrBs-!bc>dFq-}BvP=QYS6n_OFlZ){{X%=2bl@?a^OQ; z;K3kE{HJr?{TU3y`J0Oa)3{N<(VlUjp(F;A-*2buUx3))S5phni~NnBN99i8$4On* zdo7R)6zs(Wh`-Id*Jm02)ANXlnkJ+?~=W6&J~c%R}gVDias=f!ZN1{FBMGs`xElF9g%92mQ# z1ZREw-v_6d{6ixfNZ+||=J9F#dEpLq<4?^o9XW=xPQdkjrMd)sQwKi5e*y}Vs4pu! z%gj0~SGye5sy*pMrFG%xtoWmD;$SIzbM$$IVqklg;toz;iaA;GQaxBs2>1Q<#y;aF zwxUbT4Mt)%RI%qh6_}uPF_^Rq1}OKbM|izSImE?%d%kKF5V##=rGic46zQBP+H=U( zGTWwl+8Ji$RI{;oD$^3hPKlI<>I9uaQKBMqK(GRN=+?MquiC{@JO(^(9kYM^TfeI} zxWlZA0FS&BSP@IRZVWPgY;&z1KmmKV|LG!u>dw9K@ONLPT#wj&RJ^-9CGp4Mm`}cze z>QFmwj6=eWotOwEHt~aEuw%2n{3lB-oVF8mA^&tOa1Qhcly@dHoIs_H()eP$SN+lS zB0GCsE^Z(|bZWn4!h+~Ejs~mDB5ULX!#(d-fW&92Xz<>GUW7XEb0Me|-Z86yetse0 zACelVrRvU%qU(UOn8n+49O992!6&BR(#BQ|(4c>^4Afz6v81QS*QnOa#|So2G=W_{ zdDMOrk?D<{NQeFAnQj?anO|kG$uS)aNeVsZ0EWTAZM-9Y$K`S%sd~aU?=uvXQ#X19 z8?uttqs1M5xC(wTkLDMKYS}8j^1l?L|LrvAt$L}E5lRU`#X;A~_h6&ebYQCQ6ci6Au?G{=6iF{(um{d2B_}Cf@3TEzCfLHrTkk#MOhKOUhh>Vr z>9~zKW~GWQSf025`ukt^*W7~CPh=la}p8kd;^)+pOBj5shzPvyN=Q*fvSfYZRte=Y2f24 z$ijaFtL~W0i zZ(>|{obCYFL>lOmnkvC{;gA<41OCbvUOhx1+3T#9idGg| zTE?3l+%8?#Pp>r#(#ILs3YeGe?XFe4Vl@rQv&zk?aB)%I4L%KO?2&X?9%EXTqVFO&n9;Wu=N&QdY_BavR^^-G1K?Z8(HG%XcwQji~- zRR+adcabx&fs}v6Ib^|vGISW#uMhvO$U0tUf<8Pmn>8D8S`#{}JbqliFif+_2rXtJ zd%j!lp`ZvQ@k4@h5ALo<^x|FeH%d!RH~7(p%Wq@!Xo2-BM;PCo@=yDRACK+`rR!#W zR+GOmg8b!`+muJZ4NwD?^7I~lO0ovpZzKdR$8Sc#m$r$Q;dm!PO&MvaC1$PzI>}Bm ze7vceuY4(%65J?|Ecy%yr7;aPqTR60^OekybUL{_Q4yj=50`p71l2d$NJ1 z499{F|0ZL)BJ?Oz9k~&$1()a=Ik9tZ2Nx7FB6jtMwWsM3ie$3-!i6*@pEj#^&R?pz zA6X$cj7m?jWEQncTWZ)!>%KS!z2`>%;ADK8o{`N$DRFU%gXjS3AQb=-fAOTcU{0Hj zVgo8WGngrlsHdGA)SKW3e%4I^%E~pWxpb>S#0V`JocR8oD>|n|QNK8BxbNMr8z?Dj z7LWp*KknebE=iZ?PV0V%M`EU%0DzTeVbQNbT4m{14q}hKWUB9vGg4p5Qz^a_!MrZ^ z!?!X~G#Kz0?BWB%6%&N_`)hfHLF%MdIKsn>!aW?!K`{x>csjSpR&`C7Xk~e^O942k z9X)?JdDNicZ3p)AwVC2KwFl&TloYE#-F1U)(^~X?Wmp~>`$R(wNN1|!(a5_@{$p}@ zk2z-00gCj>pG4%8-oh+TpnmnkQl^TYjIox~sv~xp)t7czJk+l_!QY|mc53V+e5*A< zUnFMb&37_MjD3ihuw)Towbz95q!-$sDQ8F4r-IL`Y2nE1-<;k6 zn;1T~+1yAZcQ@&JLa76wwYLyp%oolGUbDAd@FMc!b`*SNG zTK+yGUGZoSd$T!Py8%L{pT?zd*ch1)FNgbc+y^!Ma_F>XYJchPl~0l!hYQcxp2Vq zEP2he*lopov7u_ra??FbN-*}1bcnIm1YWVMYK2Gfsg+##6HgS$?4E%=;8Do+N0&t$-Pne$$M#Mr*Gl!slW7!4Wn$`Rqg^0|z*1Mpw+)Ey$tezvklWq_VZ+Px|8j`6q!;3nfoDabcqa4JYXnh* zK0`eDbJt6&jL2 z$0_TmF#%)6*O~dG$<0=He_uGSDMjNm%&Y&73B_3%R9zM!8-knyLUA+D9kCn%XJn9`hZ(PVav)pRV0iAE!?xpjW&njq|&ZnRl>j zB`}B7ynzrfAov|z{ar3GRA*D!KLm%G+auUJZ?e1#%)#*Ig*v^3lnEUg^> z(BRGWjxo+YgK-eA@@?uKXQbrfU;K%kf>rxl?~J?xk1vn`hdhk(p2&q?h)}u1+tF@L-8;UE;GE*TmR;k3k20{%l!bLG8 zo5I%WLevFYt{x7RH5uApL)X%yHG@mG90=68NvFNqEpLp*kMZh%%!N?6&PS6w&YkP{mY3zu@cY63j%2 z-`C8UZza-n(&4Gt(Lt}q7dauaU)FPFSTPYDYQ z(z`x4Qlq9blV4%lODWCN@-$VA9BSUbd?tE;ov zeL%ja^$NP=0wig~+VGqaU>3ahpW)h8j(X_1;_yGEx-L{sd4Zeo4mID#@MmdxA`&UY zIwXPd6k-h8c^AM1q8qr~F^26cs45OM@u;%z9xi7WN7K1N)TgNY3pGfc!cSG1m3^co zq4=juZxG|9;;>-;?sd{i{H%Z=uGFLl7tb}rTfl1})P_T(Uiht%&^Jzs>LW)b|H3!R z_PhxLN`A_AF#Ob!iSm!|cNgh;7b%0<@Ll6}hcwNCTm=>a-zJSSj+}t*A{XcWh<5TT z)%};CzMq$)FLx88@XH0}U}X{(^~zXtrPF@MbjyyaS4G#poUziPvT~*9_g!L99x*e2 z{4KU!Gs~LEY{4AT7h+z#8)f9%-sfot1GTFm;fUU^c~T~PC%}!oR)WjmqkIbbxpDqf zUc&(jnb|*=EPYyHYezNLxy0?9)_Bs&Lt})zoOSFjb1hOfA#1GF+@(sf?U*tz?OE&Q z`gHi+EQ4u^{;cWoFiZZYy@~7nu^$-jYveRy8UHDc>}kU`~yUw)QOY(1u#7yXhakKiD`n>eA$+d4F6LVsr=n3Vj zCsbL+w6Mh&5pv#{fxsBTvQGTJKP-Agz|=moGK*8lRd=8?tI6*5zu&lhlfKT28x3AI z#dOVv5AIWKzbktMHNbb3an?cn*X3B}7QMj7fNeIrL0fY_Tl~hX2^|fBp)&s0SGeW3@e${&L)bqpn(}FS@UjM zgA1Xf3(5Tw*c63H8^)jC>7aJS{j(32cituMN)zR-Dhj#FUWeit&@S(rqojyt{MAF& zdH<2M>v(2CE-(Kx#arm$_L14+lSTOUQ2y0@{2npjl4hH;<}3b-(*$%c1Q{XxeSz(@ z4EVMo6Hg-=aUb?x@KbMdtJ^po>bIDJtkAI?o0nm}&Xv!b-+#t0*)<)$?8;=SveMX- z-^%Lmkez$*wMKf!@2D@3W+$FtoKIt#lu#&p&wKu>AE>zF!z#twd0^~wz$ve&CW`#E zNdet*aHv8ydQdXXMF0(7NN4`q(mYMGnWG%~toT}O!hdSy2%h$u>pnUStP;lVL1#=^ z@LkaBZ<#7Q6Q*|u@w-vj%qoN)dYz$4`79F!DpR{|wco%jSq2_{ZYKA&Qjbo~f;|nb z1N^YUm6(^?Oe~H&V@41;G2K*Baq9o?Zh`I@)l=4PqHir{^v*J?0dI7&Eq^JaqSRd@ z%PJ7L3Z>3~+o~+B%JhP*o}!~BdKuSnFhv)GsNX@2Z^)5Gi+UjBxE8ZKo;sI=IJ|qQ zn@da_Qp9V(6F1DdWE_2k!0T^zHfBi~H@Xib_ErETIS*nZs;rMd$(EtmEwIQCAnIYt)k^E4rp3{yGSeegx0*G(pT`~=c%?H zvUFT*@tOUdanY$|)koghZ@BDnK@A~$G47Y5@*o!rAu?>IjnoA^`~`F9GW%fTO(qcT zujqD_h`xpOx3tT4HsWXo#j`3ZI;6=YRhd~)Oem8RZKJMFVV4!+A`%c>r;jl1vi~f-D%@MN! z6t=y3BmG(oxgf&NTdZD_B%fz#;Ix|6V@Xlf+jqhHKW(tD2)**kPza9?Gd-#_G&?)$^t3JoI{%4Wj z_fhDhZ+k?r{((e(4yo0p%op7vCy3Bl=x+5T58aa>Rf=8!iP{-Ug4@p6348i?T%XqT z6kGC2=BX|B6pH@C4h7XGplBF$8b}0yggU|$TXuFC_OOGw{XcT*>OrVri<`$c_|Sc0 zNs(p9SG91$3_T)8{<8o22wkuIE^HoW7u#wD$Xth1L`h$TxtpYz4&HXxchc}6>yO0vuovE356p@mm@7L!0>{W2}7|U87>jv^HE=wb-4F`@Pe@7 zvF}4ldv*J?mf(U>6YYp=zWme=d3<7s=s*_c*7W{vp=ufO7E8<1C9KSpILe#;F~=;n zQ_o!>Io{7ZtHPg{F2+*specOZ2cCzEQg|4J8g48X6nKKV{bQ^brVI#7M$djp!ORL#$(4{9K zAbf@ca<@RZGm9S#oHwdhGubq*&d-aRVMn~!`iYl}JF>$(0o|IE?^$eFeu{4!x}w^r z-zHvvx~23i%Cm598pCTNSY0IaLG4d9;Nlu4&9~*HfjIj=nea@52-icDx#fq<;Ky?@8TCL67 zTiIFyjs1?Dg?TK;v0)V{6GkGic;^C+{tT~c!cbNZJ9+`=T!ES_w7ckkK*O~0}uK&G@ z$}RiS<@x*eV?z%S>5+yP%fKD$FU;T&Nw^qV{{qpeC9zA6%B_3T&3NajBc#52ZJ3|F z4VUoKu9aCPoZ$%KaJQ`8GcJ=8jtZ`gu#!9#5)cHnr7w6=h*@yJKGvaGGs+m)pqf@1 z>oQ+*8|M&I^e7OC>mYtDie4QgT8=9rdP_B1@D&!w#$ZXNb?T;=ZvWmdGC|>XVD&04 zTschA-VScWMn~87$j_EcRcjVsg`q|AUsjUPGRt~e@<~jmi(xfMU;0=k83pL; z`r-c#GXTaIn!WG|pC&hsGkUUt=bI;>)If7q(HLO0Q;!uU*@YU)6LjfOs-N@-)Xxh@ z%uW;opKd`L;%e85{xdUd62yC$;@_#qMqz+@_D-o@xvB+yj6C~ov@G>Grv3rjTqqAM zg}3dMkDHO{sp7*XFaQv*e2gL_?d%N|U(GtsD^~NecKj~;*x+`|m4zdLBT|-VWCDD+ z*H0BO#0z1e(*?;dO&X|OJ30UMK$> z6t{Y*BB={DVq3bf_0Flr=nlJHj#wD0B)+CMOxG{spm}BD*O}@`uCW{bicXp#k9>!c z+q!J1NZH^&FOdzd>_xr}*UUh`H#Qf=s9lz+-VN!epFzRDd*4A)Y*diADja@%0R}5I zU(L|%0>qg--^%QuQp=Jf$q_J>z6ivV9svnI7@STG-k}J*w+z1ai&fsH|Bs^DD%6n! z#3S68wYV(~O;J{yNaB@p9Eys$w;Hfk5_y5iFj#XcT;Y(rfWb!f+@5ORi}9 z?VmuxBRCF(d;#EE;R^gIlo|}?KSM*)*UBq~1;|#EV?;ZRM2Bv%kvu+E$Z*?Y|M>Q!s3wyhzQiprQ z-7B>_hT)+CT*wX~-j-LuXoFQg)a{ zn~l)sCUbPDyxGMAdV9&GvV>|LPE&p2I&Z4qw+f zD@OKN4xgIIr_MrS?8yQwZEwgc4%(fa`s)A8s+qK<5t!wS+xR&;)hfJ7 z1@3~UkVORClB2llW#f#yAr`;%d#{Q&D_79a=l(isbdoCHC@eXjhFRU0!APgGTdPuL zZfB;G#(8-j`z#aS-{t>olnb*=n#gLT&otpxzlu2c2-0WoL#mg%A}L5`zMusPoWMMR zj?%Ejw#haLI|URM(KThHXDO1h9Eob^0Wv|+Q|zrteZQHR`j7a;sv!QhFeI9JIF;`+ z#41Ox^fNq+ngg@Np6<=B3_rp$Dvs2+Y_$n%xPP7KW5E>fwUyQzA=Xa3Q=%9H`P5G$ zgf)q)t(_m4-45CT9x;jsgf}t+8y(SLny65SJ9#w>2cX~mtC3d8I;E4htXh34U9nLS zUk?O!VsI zcVRx(RdIuSZSx?bouMnWma1V|_!1+~{0+#P?cH!}>#y(V(K@WDd=%R=>=fP(E=d9- z?qEY4!E83}f*Kq4i9fzeevsK;=;WzA@&5lPI`_Di{y&bN?QCaT?b5xi+m_Nr=!#X? zS@~v2_9aQ8MVGlx-w?%aU0lMxeUqX%5pwUFzD%MsxfIF7m-vQ*kV~16t~~+asmc83Bslu!1RPJ{}fLry{ol8 z*H(Cs+W!6X6ybVxZQm=r5oIM$Hp#s};cgsSHW%DQYi4@OSGpOeA-q5-t$>k2Y?_ zylDf#SXo%t>*e5qCZvWu!GDzWqLF#`7eOK37{9_Maak}Nb`;y@j?@fT&fRT{A*B?% z#;s66v4Y@1WaQUZQPq5C5~YlnJZPt&iQ(-k%HdzY+>f)HF0W7!3N%YbyC5c8ZnSBzOggzq{7SQ&p+iko+wp zF;Q(fE~>eCvi^^oz`9x5uTGSw14fGxkv>FyX}fr3Ib#ho>$ZwC|4GEbmKytTrVeuP z$mN{Afcj;jgHZ8v_rYA!b8CEb#5(KL7$SrhS8AJ4G{#SHWs>w@{?L407$s}^;jKVPv4k>CR}@;I$;9z^ev(RVwa5$ z-U04;C!!VM2W;Y5zXty94a{4Bs)8@jK^K(so>H zthqhu>`;E}C`yt_dBEw2QuwE^&TWu$;s#Pajf+E>`ZQVhu9;Ng!Fe%I3n${M`G@1!J??Njc z+vvLxz6ck@Xdxj=d!Y)^#w7!fni`YP+WmjgTsC8Wy(abtXDgb?OD9n?ctmV`65ObI zXW?z@7qUXKzTA_YCDEI(B=jygv zmQSwS=qQI-3176I9gWi-5l4FgI8we7H%|5ujtF|-9ZnE5u*=CyvYK0*#;a^`Z6~l! z@fMabM#T0-*2(ZEJ8?q2&Jd#*9N;IO)Px_2)=ej;^xI_YrOI=y5|;*S zAl4D%o6mjG?R1qsyA6cmT?B>DReH#+^BvV~_OSD(nNn@Bb*}tynA|K`~FFb(hFs9g%lz2!QLiGmSf0ko>_re%*E2 zg;?nF6~U-dv6*c5LlY+bcE$mzsnY8sjQjfvb<-_<9>8(E>IUj; zN1Q7NzN708v&;f^F@l1bf9B_f316tD91Dne;}#Tno8HqeXty~VN%EZp-|}vr+DxH) zjQ?94VLyK&JW4*_EHK>3d1=c`lRD6xlixbY#| z^eKQ~*W8wALTUxajM3OA8F?7y&|Sc}O#sqOj^#xTww&vSoUtTm@8t8LgfX$Uk5=;r+OsaAf$lp1r)dv7 zP_^PT21oZ1X(JQ1S@E5AtrPLj%%AL0Wlf%F6wjd=V#vprO5RzngaZQLm`! z04l4gv$OWJOzjNydXGcWXV?+<} zGr+TJ3=2Y0vPH--%UQNMGSmv$KgOOo2)%Aq&&0{;u~5X?#%G9~ zW)(6oyIlh|`QU+Q-}IE*2i4*QVyB`*xJN(1?VrR~9k{7Yi`qV#=Mn`FAK0_*B=$R8 zH_`&E4bZZNIKCq&D+LKpe!2xNsRb93yf@KZH*0Twowkj( zbCYfh&O^#}{V9&iIbt;Xc}*w~GToIE82%j0;)BNf)t zE8ulLJLELSRR~O4CD_1x2=YoH+Qgc(I+;^M zzIQbVefaDvs-Jpk3lHS@r5v&Hkz5Bkhk-4GqR}(jj2A3h0-k$CDBu+7uI-q*%UZJS z2H<8?-JT-kMc7b?s4-{dLDu68-wiCTd@RnXKgo-wX&v*_?ZMRz!{Ewdb-V8j@48W-n0A~e ztxp3h#xa)GLosV{_u>6`QxI{^1G}n-M5chCKVPM-S`%?b(!6XsRI`95I6usJxtZlO zLSDKTr)~BBDpE|>mX9!c^=7S|4N_vcgA-N_&1fnSnyH&+$D^q(HPgWp?xvz?x=DpP z^-SHUpb^ho)<}J$jX48_Qac%`xpnSl@%JfNW#M27_QQMNbWtNZ?BedaO&6{tAK0UX z(hXaP=|XRS(uq99PkL40O*)?fxB`$L4GwPCWqXQy{!|h*)MtNRK(xtR_eF#at5qF7 zP0$3pF7q;?++YR#&0oke%n`~5sjEbA$rq2)p3UgE>ciCgcG^z@ui`kTHQ0X3%pNGq zc!1X~q&|JBdnPueerH;7)DzF)X2+r^aSxeooGz8A)DT^XYfCDaR=~1+%jiFlA$ACn zBn8!5aE_E&Hs#fz-le&Ww^zf&#H?gP>#{F=wnQ}Yf9q} zPS}3@mB;~#Kg7s+I?2zml}LYLt0lzR?aiJt>!R!E+O3kg&A_ZhNa}gr!bnrQwbORv zdwZ~Yso^G_@y7rvAhMN|vTvM&31R|Uy%gA)A_*_Eo{CTs_7C$La%|ft=4bxk$tu|~ z3tO3lky5{hoY^EY0=6EW6LB28z|s&P&=<}uJ2SO&)3*ZB{QPTMXyuD3za%_?b}zie z7?B>;J%gvuOrB9UORzRkK4|7YKSAAMod}TaBUYv<{<9lTirI&3av5kXzzdBv1y86* z-2>nu?MfT5cmn|jgc}a0EK zqOeZY`GB&4;i=Wu0>WB&sEjM)(M#M7=G5HSHbJQ3QZiBPUzrl9vK==Nz-?~Z1Yt3P ze4@m1TcBD^tK~g5$y8pM(mdM1Q7Vzs zJsb&awTuO}liMb%{JWug`>a_ckP{w!6dLC2e2No5EHWd6Tqv0!%`Ouht0H29RLAav zyfo9_eMt1Z8vxtWD=O<4H>8KaMdU1Zx9n&_qCWX!<01J8``E-9_>qggj5+&4P523O zLOL`D&f}H+5mEQV7qb!1{ttvtTunm$d@W*H{bbg(4e%kO zn-^5QT{4HDHc&Kiao7t7gh&uf*FD@KX(LUNqV^O&`2(lwW39|*IQYYV4R3Mg1K2_EUULh_#WVZO^bzjwbK`PQ-S>kq!30B@xjmag|wl(Fi^yyhs}$ICC=t*vF2 z;yuontQ#8q930Q@;28VfIuFqQfS_EiF{UP4wUXA&zqx%9cIno7-P@1i;7+2GIzZ$< zs3B*l*B2fnbu5Dpgew=rH2ny)`Ggt1pd)|X2<49*$hR=nE+k5y;w9$O3L}?pJAO1c;)b=|JB&w_U%5?an6UX)A>kGWCxEwj0bjRK*%=HCVLlPMz!fu0 zrJ+*J6a}WUu73ah0a1K>fXFGo`O0t5W6!FF!bQ_bzvLR41yYf$aBT*Br;7Ii6TFuX zaop-s;MoT-8>hs6ahwLuaQ2v5=?*HItMtBA*CfrPd zW{e@C9#{9i7M*QSRn1gv;q+K(c0-CyYOh4yCfzGM;!Aq&*z_nOso^JHU!v*6!}KC{`-e!f#bUiF06q;! z7h2SN+kSD9jf{|cdq%-&8-{-IjX{Z+TQgrb0<>K~#7rsidgox{6xbIiV12DJ8R%t0 z{;4Tx4tX7niDThG$FO^YoFMxB0a|U{cgL*Zd&=fh1bC5Y8J_Gkb>}_cqeL6_Oz^Q0 z(^v^t)5BV9${(ms3P9Ry0y1%zXIM#lTw~@ih`}X3@4c?)qKGOBGfK z4sK94&Bt;Eh)pNcML)=?ci@Ehm~c_UTHx7cixwraVR7?Kd*P7by{6rd;Er4f0KMJg zpV2yRf2Y}e7>_P=!0gANkH7Qdy#g*O0^wCVl)ACEh+7c?l4K!hp7jt7xdVkZk?U+o zMIC~lKh~SZ`vo)-fkHLS7hbXeCVj^pGx?#O(`suq>`~3x?J~-xU^B7j0-E+S^gZN; z`FYlFCO5x)gv&Ooh6y0b#nXklHo_{T5<^e8T%w!kol?^+s>>MN_xOY?*Rfg$&N5gg z3jS@MU!Tac_9buED z+1;WlmsDA<5jhb$fKK&lE)1)(y+=R4z5~6#skzX*`GOLDI#0ZNo2~+zL&tlgW?j~(*5r#AcM1btX=0G%DEbxa z?sv~Rp(F6L7WFW1%@bvHg>eSC&ob*7!$_BWaEXP3BZr-ku~~?1y%{}ZA;?DaEF`(s zPkxez=?SHg7EDE?>-6vB)9Nxbkg@AGMJ0_fF1}m*MLRZ59s$NI3sRMA%Au}(4BWQY zyHcZrjwpe75mblq*w`9m4DGp|>?mOxcfA&MXTk`*c@I3fdlg_@MQ|nA7&KYxQsjth zhyGwZuU+mkk1Rh9vdxj3hVu1hUtVx!@Oh;O9gp6yhKpiprIPA)47b#e1YHElP~6Vmu#A0~`ftn|(D1oSgxC{6ws$?6~NDEE9>e-43R^iSq*e2nZ~B_5q~r zogG~odlO;FrQ0bd)=J+Fdk4%n1P?Qf`x%8g3vS2_=BEL(nf45Cq0e;`JZ*~l zC_Z)=dqmLXetV!a*({Ytq^wA#oSdV(ik^93*2ZWk%bFip_zs|pT2%8^5h3P{XBVp~ zP9~xG9+ur<7CMpYpltKrKsbmS(yJamrk*g<82AQx^t<>#pLX8>?YO^O+drkcZ-iDq z@x6D~F2bOP-w?gmF=S%lIu0g;V2HN@aX7!<2OpNVn97U?k{4W|DyWtwL z8l3$HLh_MnX`S&vUa0;UDdWL<{cavI-b=wFjq`F(^%X7x?wbdlI@EwgAeplPvs=Cb zxUU$Yo;cNrUc0QsVRp{I;Cp^eC1Dr&z^SS1w{OtoMee8|)y3}MWo-io6jol{Uj*{d zz;Hzgz||?$CkNEKibd$ZTxFS(lxOMXv(!NN_e5#`zQ))f}`U{sr}! za(JKGI-yY<=3lcl-#W~E9|gk4+Fc5xwUbxm9+}EMvpU%$wT2xc933rq{JtiI>YFVl zG0Lu`X`XU*r7Lnn?Gq&tZ$>!XKNiZox+wX)167oeKS?X{8Fe!`McWPUBmE{y-tvXn z)Wj&}C)-hK+Ye2h$twN6oRp1tH-HgiAX0# zcztgeK7N0tl)vp4Wf8$E|3Ljs>X2*Qc(=rp5ua0a&(0$3KwHlX>Zw0D_5R%A&*+&L zGr>K{Kx#;Y_wgvXI2{hIMcL1jj6p9Ni5o1(@>}qpWm37O&o9gCyQp<76B8d(8rfmd z?5Q>P=qop?kMfFeI7fG=6fLMz(X!D$Ey4u*sQO<&rgWT7LP-9K=c=kH%{D_g`iDE0 zH_)LT?jTf_PO4rbSYgBJ54Ww_1U>_=&u|N?ws=D%|9y4CJfd_-HO5)iD7k{aEOpn8 zA%XI9(wANOTg#mN(JM2_xD|AbiHwtUiBq zfHPrk<-6BPiR&HUr?(HTs%W9_9L9~8sMYJ#oyl#K!>*KDq2A86`c<_13N1UHe8=C@ zFA%;vZil<>Umnx+!*bm*qS8bR^;KFMyXx<(PmpGw6LkNkChp~^Ha9%PT63+1ay^66 zUIkp1qiboVdK%Obv_0NTxx60Ufb-`^Muv^Y4Ob2@>Vl}XkN1!uulIG>0J(i;C}KjUGWjuycpqEYpPf)2eCRT00oEn;@K z@e{52%iE;pNlEZ(!;(ldu|lndmMtKMopZ|EW0Qgc@t1M4#U@d=TZR#{ZoVx0t8yju zB|Ct0+M~>U#j+Y+hDk2;Xc)ElI8EFaDx?@zk~%-7sxCjo#dqUPr*0}M7Y5ZG20s#X zCy5gg-S|(nfScLCO1P}OL5sbh4nI)H#FJBl z))=%vjSsLVvFW?T*@m!WNgWsLIO6|QQ!*4~F`rb6sBqREB zOu$$0BmRY`%>6T|5s#qBku6*ojqD%Pd^<@#%2{Uu7jc3jM=digo7WN8HmXo~O+8}f zXO=o1J)E4P@ty~n;;4`$0V)t!`n*v2xmS;=@d>E^KioD-o@fB+p6uE5!a}CW!X)x| zqi~V0#zoP5&!4J)A}ydO#Ru#8Wf3mqqTH@6UJ@u>bH6A^^HbeGCe(EC1GG&(J}P)C zMtvh90z!_c~e z>Q71Wzmbpgu(`2N^Ip0nKXtk4xToSvU=C^1^DWOR=d>gDR}*Ve8-g=z{(nQ}#^|uW zbVV6sTpRt&H-zf7{FIaMWhvoo^znF{sM~E;)BNG*?kg=zez=#p9krQ%3jUg=vAe2ZZZq+|29`Q;ikFi%nc#vJxMYI(ajhzBKJI?X`AznW6TsKqP==VcQuS+q zK)wxC)!enSiy=sjq-F;8=jte9p=EdRVm2hbLoSXHPlPIB`-fkxuSqgggc3`yM?ylC zHa?lCfO9exk?eAp%H%#bZkb?;5<0ww_Q*1fPT#aMRG#FJ_4QqnG(MsvN!@#X>-X2e zLN;76TT=GmCd!W1=X921`J869^n-ofkx!yl5*7po#REUbR~bon{Hp?}cbNJdwVv0I z2z7B}Zf15p0c`>e-j#pnkQ}cgFQm%rr0`GzW0LX(Ya+~WHavaNDDBdxe}^w%f65)O z>ub|4;j$+2p4bkbV2|#U->|ceKBK{?Eg`iYY@+wudej}G@z($+H^{wnPf`;3__ zz$ug9opmv59G3hV2^2Ken+M3+2u4BH>DU#T;&71Qy8$16z(^BNlH z2~&yAMUc26+PH>MJa*$)Xv8cs9)^i`~q#^aibFysp zy+>x^trn-=Y&du|EQr2yXHbJ)x$pJuXC6eAYTLOnD5%IR+{3+Tx1YCcy8fPGcqGuY z=AWY_)3v1z>B;Y8GSWmt!5VjB3oxCYGtHY7t0l=mQ>C)2K~KquXm-$4eS0V-kF~J1Wi9D3lE;zS_&7VM0Hr(R354zyvD4 zhqKlv;;#FS1>)d_nxjS5pUjPo?qjFOVcHlXZWAd^oubd7miXhac0BxxhzrrGr&2%S zmc4UT_L>j71>P^sH2*|Zt3vakRSOxg}I$4{6)G6ewQBGfo=c52PO~Xqrqm+!}$+Y1z(f{v@pD-vD9gNeN=*b>!yTI0?iUVf& z`5Y9#^YZYhQ-dGNHHQ)lb;LAeXZimp^`%9!bMf(q=n3q|^dsU;;yxy*-(&G1n8@q> z^C#R_vvZc>zg*HPFOTR4qWDIa@^#6sX_7+tvFgzsWv(+9sU-P1qGN+}1D4B3(CiOH z6J)YyieW-uqw@9fG5WPlz}f@k?-UOsd4mMVu)=Un%Wc2ETOpP@B*UK5$WFg&7?d_JS+LVDRqTi0@6F$DXH_0Dgsm4>+ z&II>AMe5mgYfCEZL;fcFz9yDzV63-!6g=0O{BfW4lksLEta9)suX3$F5g42-Uq`x7 zmQ3;f4N|PM$OH$b$4V}#TRXKE0fHs{8Q8hL`E;-s;n-7k%~8aW(l_aVx{7=BS+Usu zzu)&6r&B#!41E;-W(%60T6>m%9Yz9FUc+7@bO_z;6CeB zZa%LyQC~|dXWrDF0Tjpk`R&h0V}lfPEqq~tSD;2qZMRkxK39F78YM47DJ=rQKe`pU zYV|$Je#&J;m1k>YGh}0b+Du&oFt|{SjRerVEhH^xXNmaZZy+|h-$P}XI!q?>AEj+B zX~fABHYDc@369kFNG-QRO`hmEN?Y>key(CX*zjK~;G8%3lau+}X$DIu4!9Ba79GuK z)oC|v$JLoD4871y!T7uYg9j}xK(+5){)t79ygZ^LH%Jg<@3RI~TSTuT2s@LTuPs4{ zqtTq{7~3l=lbb+<748qyUtVRn1imKb?~3oNwq=C!IB#zVfvtq1nv*$9<86}9*~|!g;WP_!PF$D76J=M zsv85jbRrgxbzhjibIpUSkKHOuwshw(zo;7ho!;6ZQmtl+`!#7U;%o}>pUks9nEU!6 zeL@3z>VqhRHA>q9i{G#_{9T%_;i&K6(|OJ2`1rT<%mja*C1^>6I*~M8U(mzPy8Zg! zVGa{(@(}l{I_ZJ=ukS5t?j8|Al0=n%ikX=9fQgn!3+Ia;a_mZn`^n!lvD&cL%m4xh z?IcI)ZnoZ}-(Rcy#O^FhQH5Bc$)wqlxch8)^V&dFnv*K;W0HfHX~zqH0>rEBqx-OV zFwIi^WK3kq1!9lX&h*J11s54HLz>J}{q=Xs)}oL8Rcc_meGw^4Ppwc>_dGG2`4iWD z>2oYUi@cBUpm%ANx`juX*k7UQURmymEpon^7=&HwqDWIUmaAB*_jP7*-{dUDi=^gd zfzn7QZefBAkV=)mu2!n8e zn#@)jZD85kQGYpaLWrxz(g%`siD@^`MOO%jwXt#w)M=oWkqXNjMetVj{s8@2({54* zohhB>^HH6a%)`Zf-dU0Zqzu5(76fx%F+(n>7TDHAL0{cT`N0EssmQihs*5kbs)Eb> z3D6Dp;X|6v-a$6Np4vGRCe%@2R*{c9f1hpEwVj1lHGguLFO*55;Ld5=G_Sv(^hYyB z_)ST2r~L8$G+Ll%v}!x`>uzX`*ov|sd%co8{J`;kHmPMUC`&4*%l~quf7N^nZv2w&B)B7DpEP&o=OdK$nxHL zm~8@PD*gcv&dMvdC#}xW9{P?&Za0sT*H70nHQ*m~`H}GIhqQ5*Wj_gHr!%S85hds^ z?I+SzWaBbevG#{$0Km~pdn!RKitks!yHDm6}25Y>b_(>9HTzJ3OwMa3!triI%v6eruq%| z*l1>q|16%9ARZF?@!+SY#k~(wRplqxZhxzbCm^7)wA7urfwv|e6LDfEMN0nud3fbA zD2#fk!z4P}E1N;F54MzJn*Fc+h$pXgs^+6( zZR-*>tmm5N6@|=zd792!^uyR7YgyC}#|9Rw^Y-AcBcviv*mYc-Jl!IrZ(5Zv0S4wr z^a^p>#8Sgtm#BEZU8K$y^6{UIjispeNFlQNA^duPpD|CUXORk}X~=KN%GXezhu(L9 z6BJLjur_5iD;1}~Ni=ReGOZfNWTOv&X}wH07V<9%*>)J|^_K@Y)ouFZFT5@|c`(f5zo&fwNQh9sr9BYA)Y;&Pgxx%ziL+#KR!SW z^}*S{i-(tr1a6IDkQi)YWx=_5!;L&b12^nD~L~&luhgQ8+ z|2h+KegowhxcaFEI*9sRRQ0Uyun5;3A!0+_+P*2qBs6dxWISOD4KOXMD~YAehA5K{ z@93LI-&0&JQ3;wQaE(@&!Lb3-cQ+`r8ZcFIuIF;o8ZW)I<$dBi-E@Q$w@yo>Fg!C1 zd+1PnD&ry84>T{+4JhNizlpN0g~|yubw`e*x~XJXWjmossd#TqeG+~_e5@R+?G}M+ zyllHR>8z^XQ0`1*~z+8QO?%;pNg=D-MD*pwTwZF z&AMU35X!mkd;Y<7xn$m0ioFoG0$1Ucdld2uPV=ou^N!@!ZRKK5IVwws_~iv&66tTG z^8&(3P_mxXWYGmF>Tb**Th#>hO{pp)&sE^b6^@WX@&`Fx1@CtX8H~8}r?`i5W%%tB zObvcP|GH9Ixo4~Vgbdhx*S+kZtsZgC5sfP$7w_X_z!d}3-o-eUSXY>tGS*bYIuZmrVoyq392g_>4Gp`!f*v7BBea4E zrA@%8N8-;{VAiJQYYPN#QSA<;yJ3(Y0)ThVV46K@(&X%4{Gw}yV;KZnyd+n3ekIBO z{9>Lsgx{nD{eHr8()rz9ck?Reb~c7HY^YCF(#d z3n`-dHABrtflw3Q^H#(klY~cLHd_;-$s2G$B$0jt49$7qjE)-dM=kAT0%aM92s)(MkuEJ>*8!uiEe@}8xLfaW38DZxkm zmk$W8D4DJ3V!LIFmnl5W;N&lj*TLRFO5AA9m~w1En)u$~#%rU{x>!}%UuVDQ9?cc! zwIA_E{vr+$;r#N5L<|@O%dM%dHhs<=1Bp{tlC?s`sp`4_k#^f`2hcXt;r)$WTbTUm z4e1!v7Jo46c!0_&d*;b`DOun8r!~!#5jhTTQ%o`@39|GSg?xx``dw!r9_XpLTOHa6 zwt_-G3LdD$La4h1a-Tr-?WjoD6S*r^a;KPd&<_>UcI$D$?@?JJ;@e&DRrlyM!wBl&62Xeepw_u-PEJgT2ZR1eAmh6<$MSA(sa+Q ztY-8Z$7Z_=+LR4f#7nnBOXu8frSvqwP5WG*2jH9s45@>T?CRA9ETk>_w+UGJK(#Aj zve8#SgryR4Kjs&2!R(h{J5ni^b;JTJi~th>zvx;Q2Gem9hE3SPm>y29TS)Gf$5fYz z%C;aMKk>m7BM^H5r}>Y~ty(Cxhlq>&y%x4NmqA(1Rz9>IR0|bh?;NY$maB3t^*jR# zI441ld$G~uI%yj4HP~!<3K17PsL}MF3kpI%E4%h9v3f{8S^f{_JCVREn4F3Jmqk26 zWa&w8?L(#H-Z%c^Ao*3R@k1P&5?uy)c~H0A0{Op`iHqPx^VO|`!<_bh(vdBsRfp7p zHB$#IuN3VfJ!S#N|5X}`N%x~$$FITaD@YD*@W;kzgd|`~X)3jS$Z|$uu<;VV`C29c z8e_Tm;{qNx2XB3(%z1FGj%(r8+wSz1{SD39|YXV(WwT(z|8jq)W`N_=>YZT23hVk2?-uPz-_} zW!jj4G}RAZRQu-a8Yv%s{s$A26HuYm*@owB*c(!u8Q3V1+yyvSSEOc9r@nBu^NzsQ zife{AK@y9-=~6zaiqrW)v(TncG788?QTnOB#CKua2*luPx_kZ=)0AO9f4b(<7U0Ogy5XClRKc23NMVZDLaw^5t%n%ZOG~4Hmc(m>>s-cV#0oMlErtCUkU9=ch zGg=~L3%Ig5Ji{J=)X+u`;>4~F(%4R_#>sc1%F*NmQk4YUcb@F}gLIZw?$5oc8vAPX zj$?+%Ti8FJ@ya~9z7L%8l!w@+$|lJ?#A;4SL9VT^g_ypQhT5oM=QxQ@>KiIXBC6`` z)jS5_Krcx*8WxFsTQJWDEQnAvMi!HbR$?1Nea@mw$3BA;(Vz-;y&$KJt0q)kn#bB<{1wUE3kZXj6tWb$2;-wMc~HQTtEA9g~=dmZPsc zsk~9*7I>r9%E(rbEY3A^lgq&J$#`VcbC|U*O6m=T2!IOTAzI4}td&vwL6n)|=(0#x zcZ;5??Pmv|BP_;b*+4`)H)|g&Gp&dfYYGrg>Htm~9}D)xZopT!rqBC|P} zK5aw|OhBEkM~0h#R|OU^7`7p##=k5%@)lx&;UXyOAE-aLsy*L(c9hW!HJhf(d9S}F zHCD2u@`I$yhq;15f}II=C0H6eovMN;zj>_Laza@1npJ-zcYhwgA>ARQ>*uc{bg+BO zcHLjFcaNHLf|M6pmjQg3FHfdA{g$7yM~NLL$fXZpu|-&z`Nhc#OdXFRiR>i;D&VV& z(Ck57?hU}tk1IGgU1}ho?}S;tii=;Tq;Ra{TbRNLBnEw0l$G}W6^FP{8vN*8=T2JJ z2{yUJmTLWwBTkx!hMax0t(ckJ8W&_dV_>*nwu#>rHI}K#lQsPArXH^m; zS>Tvh7!a}PQ*eZ3wv=b))E(jIJNNHDv|qh{RMhnAmk13l+H-)FL8nw-w7Bnt{59Qh z%wW`f=Kla3nuA=U6wl~RvA`8u{cJ~}2PuTpQN3I?(hQugx}`pO?t1o6>1(jt$rd}@ zwq7X?9>NXBdLO*XNy!@e>7Am0;=MMIJ~O@I;uK-j1IflHlCWEFSp7JXsnajl>>4e| z?@=}@Xd%OdMZ4fC@y%ViUj)|WQV#sa)a|lZ1BF}@PtcU70dus4I)~u1FNtYHvyqY9 zBUdo!v+wA-IE6IXJI`B8M+k;Xsou8L}2Gp#w{J+5mq zi5GDqooKq7bat{#gPXrksai@*AY)kPju_5UYDL?quB*uNSrg9i1ldmR+hF6Gc47f@ z4=7&&>`!G{T_*4~1SWPCF-fUhB&3PfTp<_!#@XpF4`=3}QzX-Bx^T1Ll{skDm4+SU{O8}>kA!_UH@zFJsfd?q7!OkqI z@%TA7CAeu`6dN+3_SKPX%vKTdYy?I7Cm)vTJ~-A| z+7K*;is6NftS2ss?&iEqf#Br|;K2;ChizT#0qbRid)L-Dn~>icrpk^TVPqbh;PX+u zDtS}4SYBAuPxS!x$&6LBnu{9tRqgq-Ax>K;#G-KT4TcAjoqPPKj8eCYBE@<2-cn6k`W>P0P6E3CP&%$WR_HbEU}d zCMq%pbK>LOSFeV(`Pi&DBj!@w#EdzqYZ`*D0ExvTIL-G=?amM#%8?vWay?#So{x1zH8>`CH0m@4oV(=KU_MvVSm=#3=KxdBpDXPuVif zRya>p+ov>LVnvxIdFpsV*>>=%E4LksZegC&cX|dvuUQyTc2@X4g zAma^72M38WBa>>Q_qczPID;|4a}nT#QsBbjLE1Stt~*g_$f5n(Uit1VF`j_DAH;@^ z6-yKx63F*MH1!;8)dA~_+l=bbTl9(B1*y|I#=;L!h~>Ukr(_0Pj`VY@VJn`K;_C1+ z_l^9sU;CUB#Us?G{~>MTtJ##VhahUZC`yuU?b40Bn~ii+4zgQvarbM)z5M6h-$V^5 zltpN?DcWK}4H1Kit;R~Avm~b90<(vWeO*!Bq_c*9$@)jYDn0BJDf17Ai26fp@2W4Q z)>~d`wQoP4pE9T8x>r0#jLWrLLM!zT_+l(&&9TO0^$e~M%89#xQ&%j{%fJc0L*BehScS+ zSPag#!x|`a(L!DHZGegqa1?ckJ$&-3`vhmGbU67n)z=OWMrWoc?+*-kG@^A_RcMT& zS1X2b{=v^?@i-e@kM4`18F+q?R6n!WI)0bR$r1T;zKJfZv$ojKD^fIQY@FpD!d%cI z-S|8!O>#S#GVEffz!bphbj{64@_x0w-33gdzB$Eby7{E#5fTc7l zb%=AXMDUN`035Et-JxLdle@sLSsELjXYfVM%sRN@S|i%D-W-fZ9TK~<+^&FWaZ$1` zU_uhfbpyxEYJgMrEN}dC;J4{|2C1z;`c+jyTYMcj)$IPzK<|~pan^7L>bt-+-@{mB ztNV_tV@jdP%MM@5p?;JE25Am>Yn+J7Zrw0Lyyy3{ZmDavPFuAVc}3uHzN*RlEsv!(U9F6TIhmlC`Fi|)On4@^Bz{o{YO08Sa;yL9ZzM2!9Mh|);%mNu0$ zGVw9hH%P8FrQHT<@3~gmt!k{DNe*O$ZqOc%Gr24@S->jL4VJZ{LLWla;?9;b2g#QQqaT?d7zH6 zQG)3v^TlBJ?qwW{F}zA5E{J4%DA%Vj=eq>t4EBTNZiX|TiRtSMvH*kkP>owEk$k^u zcZ%~_?Yl^6ALT$G6BnG!)Y7gZk-35kH}2AQjFCX3r=Iw07VBokdR_e+{*RQ^9qk!L zfpy9gexfNDWmgVxdS-~7Sa7&_FYVS?pH?_EyqO>u38d*Z+=I&P;*#y!vou$mo0Moz zWO0n5q0PR8NnP>4XNzO=1-k z;l-Av8kIYo(O&hFf3YH4PxiPb?w?1AE3dEfzQRsiI6E-Z^QNJKE2#jZzoO6P#$fH6 zo5i-ed&5ez*@9<><9wGwj5-MyG_jBvn`)2|W+KWc(-r4E|- z2U5XGgW{dlq{MJSUO%IHly-lr_z}fJ2;l1Pl&-z99d6B^07CUz=(Nm~No*TD{R3gh zO|WE+dq3R&Fd{7G|2jD$=FB6Vw&V)78X(p3ojZ4uHm#-T%fWifx?L7ixfEvQyd#Z~ zH;PD)O_Y{^AVtnra*UcIBHfF`c3wtCS~#8SZ=Hv)DItg*2 ztwOr6laNGIW-B)QBNt9mu|9F?!l(qFkFudgf!|E!7xO&|_(sJ8{PY;U?0XpEuoQ)3A&|cEv`xB#v;;b9f<5 z{K9a$h_FHdsI6aSOIu*~6m7_Utm0lX%o0JlK}bNf^F@}R%g6&Cq2NJ&U{z@^DZ@Ss z%B95g2>m^L6IjmQSjjKEeg6`CV_GCTy8xdAi`;hEbcgWyTFo%Yrxd@<+YmuKVN^a{ zAMwcX1kPq14XbB$oW`GBCJT!TM@*~9NuTv^?4l{Fk!@vhAE$a zEx-;~d1iq$Kmv%8JPOIO;>zeDWqTixkENv$Ud}VAU>o64k?JBWE;2baG|Bu}+mM#Q za?XE={{2OHGzc3@%)53@6GyQ-hOKz`$p{Q)5nDOw#J=7-eHCkk!PmD6xc0Kn2Jd*ATOc4^3i8Xhjqoh4k^t!OaGY#!VpyKx79-;`!F z_=blrEYMSOj5-xL4tpA;=qA4O*VNM)b94&ONS6xJ_b5p}Y5tJda(0Z>cP%T>IsYVD zWwpJ^%l+%xxwjrd=gqKL1g`XV=D=Yak>jv^z&kj=rrM5C^%ijZ+jCNKXb?Qra+el& zhtT|+QDb4Je&F7e&5*^T$+jZL7V_So#dgMf&_fH3+|NI}o3ii`w(-{jwHNu+9%%DU z@DRCNue}i$%)t?7l92vf*^(@)0$-(>8(FrJ?SA23n2i**P+eDflODrYxIX19N@HIjU)_6Nu`f$6yqSWbIfn5w7n$7RSo8rP_ z!ldWTv&6V%Gn6#=>?ZNsxBPNH_+41|@7a|kqqZAv-k_(^A24Y8rJm)_HP2|)#rhnk z-7K)Vn*OA$@+^-))~~F$dkDbf=3K-dJ<&#{i-J0PkKPt*>YB|SKD)bxn+#-2o_cQq24p|zy5r}R`U9`ewx{O=md!RgvCH1<_;aY zAI4E;gFNdzePb5dK#DO#lV}|fDVJbTFPB^qMCZOI-1`QEM7zS*+7d(@j~)XNw>EX8 zo0MYulT&<=suk`6SXW$eyCV0QTzWzga!)R}vQVGr$F2G23;T_wv~=7tYw1jGC^fi| z!}~kR^c+ukk*p4Jm98hATOc8(t&^ZWtaUjqkorYsG*enbU-23JP7>UG!%4Rd2&L@% z|1fKDmr(S|X0e6X)(I}We~;_*>>rNgn6r}^?$D835kF+Y)) zs$Mw8M#8S6p>gUk+UJ=8;o4s2L17bl05lr>SqMbAgx^&vm4Z?o%>FelaI6fJ5{BnA zvbgRu6(Kd)7@C6w-_|77L+P1Y{e{!MJzJ7zY}G5_!v~EKUzJDjvTamev$=U}5lHm8 z%lez48D(08NuvR@Z_RA-!Ylgh|6h?WLb>#yO1E*Ovl-gvuC+3?=*yfX{sPq=BnEVX zIBpD4mhu_&B4TpO<7qYF3^L&J161OXLeRpXrBk97qO9YUIV^1;uB~Zi7|{Y z+EG$TV>7vU7qWdBU#@JeolGOrW1$!1n{s->UsHrrxh-(_@052nTNMl~JS(7coU6$qci})0?p;!NJ2mT|J5oN9lQ#>%%F4l+^RR)HxL}H3-I$zXxhhJ0wQ~9^ zbqBn@+PR$=#tc8gs4*jL=<|oa(5Nz|6A~&7Jju#Vn7V$QZ@c@pk#c}-J#28-?=8B# z+jnwZUSUdWf!Y^$=gww*!CQXim|RzD>FXgtRts!)8R@4EB@r$VO8gobUgFsb$CV68 zQ5$o^uw%S$zVOiT{9azUGjVYCKe&cMixV~vXZ}I0-2@;BIR}sQ@`pQ8#GXoP8j0AXshM|@pSfmR$Cr(Qa)Nmo)1U(=MVBt{aOnx{*-jFa=7x7JmLwKSnp z3c8wZ!i$|EP<$&*L~Zw*pq|SBJk<$GH-c%E!dOuik#0Jv>a!=hmd}jRhgb&yj)f=v z*-D08Mh2*~Y4l9A{=YmPNEa9ARbMdMMBP?URtV9DC3zmnCY+8{F&UKZ+GA z#f5Ok{W0phtEx|z2#?7pqxjksr_Rm#aM*tje!bULUPSa~1J&!T@V5#)+JEM+VA(Yb z>6;He>X!Gj(M1pC%47d3CLs?tE0LZ^Y`UE)wvA|j3Xf^Fzz;tZ=x?)NMOOkS z82zLXzoUYKm|;043*A89f<6j+mLc}|K|0@HTe>kxd;|8d5PpRF=f$#+=us@21nR{Z zE=f7llO_KmnZ`bO(+ZkvQ|?|G08S&D#K0rd#;**nIr_!Ouem}91O=?S(S&;Z%qn5J zeZnbUU!g}Y$PU)R3-20xQ#eS>PEwaWb^TVqh$S`Sq)iE`W4ny-+96!Ll4|m_2W!{{ ztl&=F_wNp~*F5soESe_1nXK5S8vSY74XS0JoL$8SSZ&UI9!+QiSwMYUGVM{ z)}M)ZrZ@V1Tp81{mRQqElNkjcf(No;WWyb^rfeCDnrZJ@bL&nMG{gcjJ1L=vbKfpA zn#4^m9gxd9jLMUZ)HP?}*=acQbLxmj$&Y=)iC{P#+?kIr*qRu76s<%PI_|<`u z5ab6TKm*loQPG2c{=r<9uWh%j$XJ(CwoNvXf);+#f5j(X(QtpT8xK{oaFtv^c;(U^ z;xfUidFp3BiCz(|PnBlqUj_wF8in!GjHOq=W4Apel(0aUB0z%vWV@k|cI_dp@1(p^ zhLC(+4om*%0mA}U>GaR+z;n=EoUDy>sl2zvk&{SfNQHXc%S8jd=A4qsa8kQWf^PVW zFittK2Hi*#o3%kC!P^mdN&XK&+#mlj#7jo}kj7GVP2To+jRCjMn7=}eWfYmU(-iw} zDqDg?i){Tb+{d#V;gZ&R{Owua`H0JvNz$j#F($*`bq~T4(BH`Q{pYa=s%BIEimb{- zg|}7A8IWgAK_A-B;`A~$J@%b8NjR{o@oy8Df3tV&_ zoFpRuKKiDjfv^YBHSHTpQ%GRLI3A27RZb8cw^NO z;u^v6jS6lbpWEq(oxO-fs3p$#$>(=z<}riMs_ZPHD(BVd{_~Z6Zo_}))jVq?d&Cs! z4LLsj$Wx_UQ_>*U_db{F@3Lwva4jFeyOqxFa+l;R3oH=rv|jO6m9|~*%ILhGrn^

    xMeZ{w%sa!*4pBu=(ObVruoer~tqYM#|cfjbL>f~g^j^e77$m&hB5%wdt=#9$K zN8MOYzT_oXsNIhl3q;Gi_@a<0l{?U^m@b=@9=4mrC@-8rg?zTh?#@2h)X%7pEBfuF_%HX?Mh-9N)So>b zrPdOOGA=IO8@?lWPK!lHZInxflF;NA@zgCJF6#AKl1~8gAO!Yc7ocy8a>bPX_pXQcCqd_>o+d17P;cfWEC|Mcz?8?YWh+C$(NA^6x zIivRneOfo`_9#HLCu(y-??5`>CpHku*kj4wist zU7$bvtZp}S`8yoh%pTaiNIZ!)+XBqau4awmC?9)tOYuA!z0`ZU^7kp>GunW)vtGcJ zo-a|Fx&=Ge61;y9uR6y89o$Vedz#b}A1qgO-^K4oTy-8t>S$Q#x7`Ls$2n~I0<7pK zwXJ)#c2S>T8;@It8JL?y;UC12(%A4tOU1hlq{W}Gl$#R%WPV`^Cs1|>Mh0|&;s__N zd&A6=U$hr}1?S|-!|oQz|G?#BypNVxOfNo5*h#3aT!X85Jn_g!Y{)+W6`x02M^qmN z39FytGcC%mFfO5*BLsbwb<6>tpvoF)x+E`MV1C#d^(Jkj#d6*;E5NMJ8-4PxetMha zUUPY|c<8l#Xh;1=5rJ@DE?r9TelJW38;Bk-8cS7GM(3-u z$`Sg)KP00nPaxCxQ5ruL=qHDn$7X1vi9I_XLaU1>55nDyly!=qoXY34;JrT-X$?kZ zNEToeo<>8cpqZ%HPg4pIW!&-<4gT73)`0stfAgD9=5wT`24LoM1mn~$r^KA= z+e#5rqw_b;WQbGc@6NxwJD2dR^Z0s;B08~omk=I{Vo_nN;BZWlJ_u+`TGAjh}qN}XSRL4AcLJNOx^;7DF9>KU}_tyL;Ls(qD zoD*0%Ii|hKh#zf(=KhR3vBy?%#JW`z4IFGQpEETLA0>&@h5Pl73R$+AjY->e$($^V z;Gab`xl*Ue7-sX515Y8bcNHH)2uo6+Ifg&XV#?7j8m5!vecVWR+9s%*#4{?cpwpmk zWQuuznfk03rXft&7A~?qbnGg)|CxKc%YFo-#6LmI+H1i`V7cL@ZYnsCCe0 znt`-t1I)Phsm^R(Sk0|5_IvMG8K)xu>z|r_R@1F0n!249U+$;;*(qyTzS;XA(e9ka z8Pv?Jl$ykcMt zn{%2kt0+tv16g=QE57nwLI0w6 z889v!vX$g|x*QjnQ#Z`EY;qaiTQ5nB6uFV&J(Zy$1$$}<4~~M##1*HXW^T}so){6g zEmC-r9S;j9KznO2aUQ-*i+d*j%wF*?PZI-64_hC*$>LBbb5rpP&PdE(c9KZn`J#CI zk6bwBjbM?BOgY93G7Z6vv0piL*3Lv~aj7|$1}uZ_7uF1=qkd>;9cPEX(q2}ekHhT= z5*na+P~)_w!CpBri)|j?gl_e#=27BOkr^G@LsKB#M11Qk3e!f@;gwfbhmC`HH5RXwiCrg z2m{Q(5)_f6ENm$={`MXG#tx-DXiFIdzhVEVLa(*ilcrtn${lc8CQ4!?-1iUfGejI@ z5{e8KH3_zv1)NZ-8(_9vwx~=vO4uGEw3)jIH+o8O4c#?K4=F?`VLGB+tm&I|snBW< zX8fCbH19tdgO@0KFimN#OEWS!^MtHoHisO%sSf$EwG`flTD(JRKnEZ`}KO^;@BZ#dMkKZ7z)jwQv+0d^w=(tDBdp;l@Jf4 zN#Y4UaBktia5a75O1%P-CPbLj7>A!BqAIkI+0^fgR3FIwUHAbnI?~TZDvIHM3Bk|5 zeR*uJBikT#2b{ou?U?XHG3_`dQ$zApRg^N2x>|>Zd)L{l+qkAS#5R1N;1ynI9nyNK?m zgmivqCVW>;lKe^4^UWTOn91b#}5PP_)ruL<1uZqe%s_!D08!az$a*kNWZO2 zrSP+j$n8w0WdxN?>tuf4&S>nd@EgBIHpM*8v~^wpx8KEGih+xnb|>JrzJ~XCbvo@_ z_0F}sgsf7oFOFdr*zBT#i79x5MpDoLL*CN-=MnKRp#iVJa=4^x9pq#?pc=C$v zq7kOpRc=_9mQQnXZlB9de)sWH9Z-lLT;v3n3+u^q@yr!}P37ZxHGk)4LC4OqI6EmF z)(E{;cyljJy_F=GjSKjVMl*9Ah$E}Z0mbr9quDq6igUOqdrT3eqq%2=!yRH0I0S{H}_Z&h_W!LX5>76gvI791K>Bwu-{r5O*a9rkQ+$%ERgCpn6gr~LE*7L9QS`~ zzsV*~RhP=>{EnTF4bDlUP=9GZw=ZXXr0f`aDL$-~+T*HD5eK&E9*d2v(lj5m zSt-|lpWYPJS-JBM*Kwpp^PkL0?@#j+xDCah-8 zT|CO?)?E5*AE0D-2XVHsrGJqMmvkyxN`%XOxixFjknNpvUv#T8Xroi{+z}o~YZ)mE zNEn4B3s!zyMA~!^0;#}lIOij?X!=QbyLWIuFTAS(OTLR=^Pz3{phc$UC4czTDsj30 z@1Mbh<^*R}+hzWqO9%#F8&BRA4Ce*=8ex)oEcVVi#yesJkCa#DeeH6lZx-Joui8ym zl&zkQ$7*uC5ZtzM?6HqalAqH0semfN?g@YJ1@zS6t2nH5r-+#Yw@Uy;&pa}Ax(4zV zbqan?)Gc&4a{$yYSpQ(&eu)cMNZ#NzrSS4Y-sOGY!J!yHaL;cl|I-=evQ?aUm8=Nt zIc5<8;#%8{Tsxwk{t)|$TjPps;bz_VR43PSJG2W}?>Vx3%a}et&BR5ll3=q&T}}0= zu$6G9IHP{TeZLZG>_l3IiLFinWA%33V@b+o>xUULkTUZWw2K0MUK*m04skgswEq{2 z^eWeAzEnuqd%yjsZr9?=bWuVGq|}D+i5dk$>%0J&fbvj)wx(bK=?oi(%L%5 z*`Hj4V<$Sc!Qcaj#2XU!MGda{F;VF@;ib*O0^K*CAeioif-bMSJKp(_n>Eg;13h~ zSGh_Plr};?p~;p#ipm2>fCLabE*f=8R(7$w)Y9ZI2TPye2i#^k|M5iop9yUV=BR(X zpa4*u-M%VJyhPK<>&xmt?jX#%E!e*#)m7&|^ogdfZX|EA<*63ML=Jm><4fn_hUyZD z+meB?`oZST0>{c2{Atr4?93uQx4PjgyVeaF+$?jbU)T<`vJHey0tGV_mupw8gJuN? zH)b{+4vS6jSE>erI` zqfX7q@w4Za)x$wJ?S4Pe41~dq9A582Y{D!m;Su(KT2&*(y@oToFWiGI3L!22Y8)fQ zy(jK-89p?wt7d+jFFZWA@)76@0b|Y0(qi0Y@dUCU4P!Z|*J^m1Th&!$%eh#}3P5dn zs0Y@QG~ve-Wga)V9f`SR%yY2-7MTdBUR&daAG4K}*lKM%A^#ctH> zEDz)>bO2mYTm`QP2~JZ>Wte8Gj4oqh zTBN8vnqixRdQ-|dpp?)!|Y4*`*}^+}R-sMn8VlG|&1_NV@trF&QLgTnRV^FDYY;HG^Co*7w^g{^!5w51j(_3&*%|A+bCenUr{E;j zDJ&%!V#gyN0|kzE@KM)CYO(UX0eI$o;ypWyveks*8}RhR*d%sG(Jtm-vT`s*`CuIy zGN3OZfQ^KFb1O6RZGg*F;d=liQRd};=GSbUVB3*6M#VPNR&Wc;pf2<9=YgH)vO^Md z`S(N#a@|Xq@|`dJRry3=6s+QNe)tN_)e1k+ztpmRcEIK-#i?u)52oN^mL@ICR|r@> zr+A&Gl6~oc(R8lwb(G>;RGOH z0iaSB?f^wf$xB_c)=n?aCLN_?6L0wCyC<1j0%UmxcE{pYtSCeF)-LO)$=HRNuA=9_ zJF-OOYA)zC@!rZ3rV3s`8DeU{G2u?D%n6U0Q4RER#bL>MFfK3Tc4)qSYbNY53D5Efl96VFwR0Ha&+QgJP6dccGVQ_sJVb$}eVF>>1_T zzS?KM_s=@(*wLfTCN8wavL~tWAAQ5$PfOKd1a2@BO(PU>Jd-r{>C1MZ$6Qq-rn)-0 z_T5lW@+TJrsFkEm!kxB#>6odM$uCC;w_h;^n27+LA~xXZRa<0e^k8n^oJ|rtINx3u z6*zYjX4mBGr~h|XX-Z&uK^nNZ3DU`yZ{$LfyJARDEf=KIy7!Ty*PtV&!LwBFzwp)D zJ*2$*_%emy%(MUT~%`Tu5ss@IxJw`8G{z z6PEvn2Iw07$qCYLw#B{9j=;=HX@ovhYKs@BBi(Bb5-vqK|LVMVjK5*yIA59qHB-KlL@S_<&*SQ||N(&`&h z3MiM~VZ2?JGRFL6y~ZCT=a&10d(Mz7ZG#r#^_5D3JvWB;il0M2&|t*M6no}G%96PCDrG5HD8GF|;_H4%`a(!`~sj@7jXD1m~5wnx!7 z6d4hEH^tmopcn0li(L>L^u5a%+BpAM7vCcd<_%&=7(eE5Ij|1<|84 zkzy8SuSqcX{)1s8xQe-#C2CZ8E+_7}rC#7$z6xzue_-26E}md<66rIf&Y$n%ht$f2 z!J?C@*H#Wz;#HDdq-nLWbcRL1F3N=f&Bwd|9Oqn%;=PZnC?p?m)A)`ix^k~Tmt|mX z^aaGlSH{X^;DbmNr!-wT4J_8)`&pW{Ebw zZb$^WpAoo2=v_} zHrfNM`9Ao+V}u?z>V;&()cocS+OR*!0{&M2D1=_TCEZN2$n!mh-z=YtN%4c!<1Iu@>BhHM&?Kp|1*pzoqBJVI|dyr>kd+z@4hNQ8(5Nl&@K!srI zxVh$eMM~dv))?x@7WXw7kELX}nK&#Zc>DNO`>)fR+oYlU`-FeI(u1RDK)tbHlJ0ZF z%rR&^1=W>@R3E?R=VQ~bh^^03wh5kv&=mkCsyH3(u65b-@3ijWKL@>@IGAUm3bc%YJpguc~xfq5C|{i0h$>Xv(JZfP;(y=L^A;*pz+ zT9DXa(*3;o$68waCYZ$G-%iS!81`!L(cO-fJYUcm^+#gM89I%v7_uLB+A2$-Z>$M# zKnC5g;DN#Zw(OyznILvhwvHjQbN9eiUmZFNjnsH+ zYM7&Wtb~jkJ&s(z<6k@Z)uK9UA6$Lew(8XzevJk`gxL~CSAsa|DphnLk@;Qm>Hy{N zTg{a#G^5t7K&50grjZ_~LEWputm_(Nhu>$R`{s(VmWoZ_o`?4}(55I=$ZwS+v}(L# zX2^86fsgB4MXT>Y0LU}iikmWgU{^#Do)lwIK*dhF1KFwbQY%2uJ30B7MOEz=Kphw- zZLF?Rxmsv)1N;6$nwkp%UjCI}6I7yqX!t;F*zD>pTWzxNpFs!xhauK(KVjfoRl*oG zyDE6t<@H*1$|=lO4;`DO{^y!e--ycynob8!4!^c&ie897X|b$=k#5*~~g1y^0lgv1eEO>2^}69@joeXgQwL2c?e@(l+N%wrp9SBeE==@3MTe0c~ z`16_*nzJC9g(FyWFzLkB4a*aR|RR#1HU2zzjP)7}6-l6diw+X>Yv_%N-ek^HZg zk#Jpk?HYRQS7kPHZu)Vv_T!1lH-5+JdRVa%I!kPT>HY|bS|i9`;wNkd&9W9T7ts}$ z!%cj|!TyTKtEEFLhXw!frO%ib)@n*tiHm`I?uADil>Ya$$HD?#;M}srR%jJasoIs%^i7R?G^j4di628AZkm-|{sJ!} zEnx`P913hOH?S{($46+s~tAMS0|Ju{2aFQaC-y0cYj0Y>huY7W7wtbW~3)mu$l z9@|P7xU+tdSv-?4bHix`ynu=XtkQ<=lQ5MJmrN)t`Y#{f6i|8F%Kjw z$||99GT&vcw0?pavXl}WLJNg$YIg%rgDFV1EXybWGR+yP{{@qeR=jB@cCpUjZE5ut za0yR>CD1v%NHqm4Ru0h7A>BMnn&}tkqvVQLD8Z@;Kt|Mx&~BqMcb;BoqP{3l;Jtaq zh(Ged%qc{nmyt@UNbwBl5NQa|-`C=tKI3zlzJH<&C%uGpdO9I}OqmTuuhK>OAnRNy znNPv+lh9L%ulmThZ{VjkRRl?I1xfEv%VWkh8tB=7@PW0UjeNswHc~Ale&|rxbz@6~ zBDVwZODGKj^JEeYR<@go~)RPn$^}%4G_C)hIh)dH6A=Kl;eO%v6zMwTC`q zOfzqGz@*@vL+vyGAI|oL`sNS&e=-_-4XQqvI97wpav1`F7G`v%QDb%=@S)nB|NKv# zH>Vs2z1?S2R}&um3;Z-KR=O%&NG0Xk5ts;8j2FY~Fodwa5w+VtJg;5947XQ)f^Dmz z{}NfV%9f>1ft$hr6*}MY<9Uy%EYr?+{Vk5McI+D!SGDz z)AT9oUeDOICJ7;^XBki+j&2)1S|ZoBWJtD$w^If_^2NvCO$(5qdO;%e^58?1yhwdT zyXYTH3aj#qi5Xx7wc%SVCzKsQW{**0b}Q|4wVJtq*A(E9 z!V;d~0l5MX2G{ir1AO-TNOo1Nid4d>jFcpl;PH+J1E%dIQ z;Sv033JEfmht=GJLhcv-9Fqe-DN?k}RkQ$XR-E`R!gVe%x?Zuw$de>Ty{aQka@efh z1z$pJeb8X?-EM3lNz$OAUJDpxbF-dUJ1oQ=+ZX7Y@|Uah0gM9_aWQ=DC(Z9HV}yBt zh?$(qJVQEluJ^M^5}JAlR5AHa)ERZlO^l^x3=^*PurE}$OpuO7JYsUWnJE;P+S2nB z|4p!m4``9H>%NTJ_T3;{PZp<8)?v~=XWHV9T8@(q84YlOk6HwL-g z4%@!eE10tR^q5gUG;I^O1N6U;|KGH>buy3MDxj_wugT9NH0_hqbk{6`S8HF{A1)P+ zJ5(o}I70u`ih`7BnG1K+p+7IfEOr|;^~Hp4Pi4nZu<|ChkXhO*LFy`ea3|48KgNuU zq?laq!K_@={-60BtFdRP!yDf7o8Tp2+V%o;)|-7Hg?Tc5S*-j%3w<7F6smG`o;w8> zBW<0(F{M4zf>VTU>AO{oVC3;^!Om!g&dL}2&DD7*SiDq&U-b(coUy`hpL~+9GRF?= zz+MYi{<{acK7T7Rnn}hntB?{dWVd-@?6psWz4aQ|PSOlLnsR@wdM)QE*tUCA*ET9H z++l0r09}!5h3;aypk#+^widd%eJ}{=>#~h(TF-K=yev3MN4g(lVdU2NSS>DO@pzCd zhL~}weQi^qt$LvvD0^vWYc2ADhVcdco`aKk^~ySA$x0(3`m(ypr0|I_{j^n>DbgAw zcRpf`G5VQ06O%}hJ)8-sZ_z@YuD~dKN*5Aih5a=5kAm^MTviu5>8GzHv6>;e>;`Qn zAo?0vhK65$5&1FW79$%^puY)>T7nA~!7I(DjrA=yWyh$(?Y8KZcJUlvLEwAkG-O4E zHYC$`tF4A*z9FDy8|r%;PS7gtH|ow08uj}urS9Bni4hnbK#bY`AFt6|=hO<}}s|tGQFQ|vZg{j*Gbjwa{IOgh= zm1)ukKvO29b~PHXTSKuJh;)?^jLdc^F5kzZO!1k0)8zoTGpJ^%4Gk9q21bB#E2UG* zZo@z!572(|;v!zh5j zQY*NLZ7khOikSx%2b`^QVhiIGg|N6s<^46+$&7AdFTO)vAFMg{0O-GY9BvBs6TEMg zG=fn4mym8ND~LGmE=+w2_PD=N5!tZs;tSh4pI zPu;vvo_*gorpcIu4t)d5p$@colN?F}Edu*m;U=WWWX&0hw}z!rg<#E!{e(oH8dcLU zySAEXxf{cb6jn3x@O?x(5FwA_DDz{hh*noC#J>xyh?)G5nzXyP*)TD|RC%D$NNQWf zH-?Y2trgibYfqbPe-BuHF#h|LylKF-T&pEUGu1*+_MYfk&Xa^n1Um;ltd$)|6MRIq z_HTi&D}ZU9L~3f!c+bXd1K_f5cA zn~F}6##twcC{Y2gD%k0~r_jOOivT$hE? zRr!iuei^TseEART9XnFdvQ*Sh`TLHB;1K-IU$Ahl?;YshNFZzG6% zJ|r%8$(H-RmJjT<5$SpLk6aK-sKo|T3HM7x-4P?Ry$pb(bP}HX^L?_nkKlXwdNF8@ z`93Wyq11bV=}1E-s8z-IWvAceYcDcgsgW~*BiTHK8tHix&Hed7nu3vZ!D zW;v2CK6bu%%C>an(y9FI1FyN*4Zu^ER+JTc|hx zHR}k((}R5f5!l_)&$Q5dt;b!pDE4Q)L_XPALkDaX*Uq3yGa$tGTqMs=_eihcf!l0lYtq|9$pk&_0hRHyt8~1c zeE&)mwj8g|0CiR+%ow~~Hgf!Db;?7@In&k`OcPc<-;r592c9Al(Vdnd}k)mU% zXth1dnSQiRY!hMbQoV~YgKe9*lac@%^Mmna^zPlr8j}&GKgNtpuO|oEgbBXebgfBI zR?pO?xbZrVN=DI;bgY26Wkyr1cugYiVU2+>v@^G0jE9CUrKuy{3N{LKyH0J`FsRPJ zcLtJP3{h@eu?Z^xC&Lre%;n^!BuS8h$LlklsT=>IMofVl!CR^>VmVA0o$s5+5U28= zu(1O{(pUL#A1ReMmTXcz3kr!l4QCFUy0-~jv}Zko1BYi>0)LpMF` zmpzdqYfck39f7_KtbDSTR;iGPrRX)5V#&4C)SL~g6P3sK`bm7;dn&^%RaCo+xccn~ zyVw|Zisu)6sVt5oA6PwahSS3Kz(Z8DnI|rRyQ=O$ zb?w9$K3aiX`icWva}oXIV3htosndT)(*;ZYwiWu<3s11J(0jLdDjtDbT~643Gf}n3 z*qe(hA4XdtrDrk`G@JeSgL3$g_H}iEE`iZfg0+Hz*d={?mZpg{@RhecK%>3u#6_}M zo(LD&;NujW!V6bYS73gEHYC?R_6@&r9+pF1^QD!%(ao6uj5=eCW1ns-nYm<7nlWN1 zH^&aN469K~0q0SXwv8|Gy9co@Pchk#NzA%QRbZ8%<)Yk}zkL%ri_jSsOEO9IYI4+- z=ig)jF~&MljY8KyYe?@=JE4S+?sJSR|F`#rds8nem{kxpY^x}TXL)1I8hb+#c1r2$ zKBk`Dv>`SEKZutGD?71zT!0DDX*b>keP!GEdFqQz$W8n<#(jU6}mb`h3Hw{JolgSc4~FC^dw+SjRg zx(|IcH`u|JWsA*Rxu?je__3ce>a6tcNJ~vgM9WgKUi|^6yha&|pL_KP9OJ8KpIi0_ zgeB~kq1M0CDlh&7cx=?QVC}PRI%PYyp;6w{eMjDu_r+M*hfiNEq+XEgn~6`H3CyK{ zNX;I+D+jKx(6|wHz-gt4jVuG2LAVnd%M1|MO46+@X-4Ni*B6Lej1i53MGHu+#aLgXI>HYQF#u&6@0dah5stJ_xLCN}I>@B}(AEeF*6yMA{?LhPH*IZhw+r}_z(!cm*QJ(W-ZT$o<#*O@dsc?Wm z0MlTu<=_nLtpfQI6#s?HvbttN3@B&py#VS1bqithQ@S{YG}mNP9%^Te{TD5^hI0G) zkxlJQM>OOD%8J?3p`ykqx=1pcFG=G!BJ*;@;c&< zX^KU9><^=Mwrw)g_i(VlZJU2M!x3Z-%Kav(HGTB%VCXMu^!DAv)B%oZ(|u4ek!PxT z_nGffAlUzqt;u-Xc4Z~a->z04&&VtY;mUm8jK1|@&3$?6p2m45wZvT^RhG?&6gB7m zwN&P2_rwD}{zKhtzhW9l(-v0>CWO6|^$CI_jOvV>qgPF@IFGt3|9GhmAU`3$Llu8a z78pwjI=<+|1M)_^zc2d5-y&cR8d|CUZ7T~)L0tY*wa*2m@>Z$(Zp8bRtz;X|>uC5s zceRm~INLg*L$#V#auwR~K=AED56Fa+oIYK*4u}8`IWx|-Lf!&R-jpifjU+lvKs2(% zALM&>NjB<#B?a4#ee`QAH)8*O*zI4N{j~t@2+mD7f-fNGqCl3)FFd+G6?OUv*$$i} z9IKy3MuyR;v8lJ4L7XE^B0+qL2-|P(7DiqYyz6rtUK6K#SE>GB&e?68vd?9}(;q#zjA+c=4 zB4I*7+A5%Dxr#7&YW(+HrtOo{EKU9e&e5}2*=OX$LyhX2F5I+QnNvc@G{9y5P@D6N zrQ3V~&q2-W3G%`ZAQoX}@wFpb9KZ9MRkcSR+`SuS zzd=Uc%A4Y->Hz%tE1Ctig)9ZZdmzwklLQ$Ft;xo}_(6L1kh1Bb;))%3Ni00v+i=Wp z@a9=6+DkN5Amk||J%W}QqSg1I&7Tw>wqUFIihSpPCVw#Irk^saW;3L2fQPgYFX!aC zBgr!%-)q5H*tt{#As@;5ei{yZj*IJ}nXH`a#E{wd@ha(`+5i2FTn-pxZsWVWR#GX$ z{?g7{YW*n(Zl4$tkI5=ksk0U7pF)!(pr+O8=pdx}2=O!D-F%aY3HT2hH0@PbAo z<5ND>yWwZlRcE1_TkR6w!240Je$ta~*e?r#ed2nuU;UDryfPY5Hk;h_g|rXWvE0;e zxY9eep20n6>V)89sxt76_8;o{Vt>WW#hON3=2QMKhvMElnS_>PwQ5kyb66H&G{kC& zw-gh=idXKdtf~@+il52$knjIHAVROM4B>Ob$k$gqvMyv+s z2q4Vqc=~!p*8#c4(Z*F~3!L^-iU5k>9XoajO3V;!8MDc%bCbS%C)Wdm1E@G{#owcg z>E(S8^Ym02{`e04@>TkuV_4d^=Yffv2n!Kio$%>4U-TCrVy8B{PP=9jS%Yh9B0r0u zgph~{G_>{(t=Q#91Lwj0W~^eGmUABJe#;10YnSzD?C6(Kh1(xIUM>9hzxgH4A)h&= z=}gPFSpRqZ7iZy+x2#+6-b6fQazS3Ba13xA&|4%Qr3^G~7SkpXW-HoNtsVn@W)_52 zH)u8`14ap*;1(EJ{z=fx*|=Oiu0KOM8GHgPLr6CDrO~JkoGr2`f2lma%UGIXk5nIp zdzBwnip~(9BOx2DkG&B%#>jpKBj&ldi~q)I%m`a-+&wsZ!L6Wrh%_Wp&rjeObCU$(@O=G+pxtezk;f8UsD=1A>jD%j3l7^ozdEM_Iw9!WF^*o@PRz zt8(hD&arf&>CFn{^3vQnh()#b0kqA+<*-4OFEk4CB1&`h^72G|{V}tccdAG}$F0%N zSD>`MU{d|myl*+S<}Y@Ic(yb!ce|Yy#{KeD@%k;hCY)5nJYT`_&`=0(789i!Wdmd> z0g=ANtkiNF$rUHltpXx1eEvzrJXWQ0YTTx(&hkm=*g?xp>O7oRYvOm+;5hSRnIP4L zReCfav)iP5kC9X~fZk++_N@7r1ut`#&DAuMJ9<;WeCe-{o}{AYuR> zZ$fP6rGD-%ljY4zu$eg@3ywJ?rq(+l!|muQfXT`31J+UbW)2hLzqqx z(!SfekYdQC6yN9^9imCc2_0<}Qq-hF5`A+m!pNoT_WS<+fqJy{y?oy9*X#LISY1^6$S*xs+Iu=Q-1i zuh7b}a5$n-Pdqk50P8TL^vfk+jETC|xe~V!tPH}YI0o)zMG~`Bvp^}Q#bn9yr=jmc z1U9C0~qydbeNW3rW%~uE# z)I^W{f*brdV5U`}>54XFfdRkakR7>}(EYtqyhb}Zi|u?PG|=Jae)LZ`Xo6%T@< zOQ?%(8YHAZy|5K~dIV;f&PRrKVOY{rjN~b@;`)3Blt=RqP|ERdlPo8XJhmI8Z_3hbPH1OZoE%e7VH}`q`aRqT(*2LirSinZ|TS}Hl1o< z?P*#-4%pC3?h`|^h5P~d!eUwI_z%lI9UKJqWhTwNc0ll33^MTIe2r2Ah)*JCPniZO z$;NAySN@-Y2vE!3ff5kX0lHchk&-ewem_A#=Wy*RpxfxN~ zF!MAa0}Av&+C7BlNinzNZrZfvLN?vTZ&c4rBeY0G5Gn{*;f8~b)23_bAlzI zDKIDF{vDldjIl4FeSYi4E^W|Z>RCOnIt!jKH{%p)zZ!Kr$hxa>Wv62YQcaPq9K-@N zJXpN3l^CR>)o#i^X1daqu!e#3eP^yHKrUKDw62P}PgkYcS_B!?d&~u2QGd$iM{Kr< z;+SYe<_W%e#^cV>=ie^~`#=|F%6fCqTF~w$|0d}+k) z*G1V=gpN(V-c6gP!MYr}cLP5genZlIO_H2!>fM7vJqQ`p=YHBU)k$G&*3SEft^4nNxQBGn=>k?OARw9P@(({)#&JPH&`eoLOV%xW`?cYwI@R zBlwjDRT6+@@BDlP=Qx8Bq2kC84|=_IiKHN}`vi9cJ$IZtqB$|xoJL5WZ{Z)e!lAj07+p)iH-IYgpOjv`ox4dH`N%f4NSz@bfwpM$bj!@N5DhlmtuL9J&*Hoetj% z39KYdi4q*m~Qh9Gyd=Y04_b`niTn3PPS8Lsh-od@LOr5lgS0R z>*)k@8GzG30OPGJ>$ZgXwSZj{pHS%(0;J*DS3Os0C2sXX|}_FZepSKQMze#^wnC_>1LzG={{GgIMpf|F-*!Fs=#mF z;t2EN_k2b`bRM+sAL#mNT%J?uVD@LKa$d1|>D*{ul~qo+3U66XksLI6e=;QYU(eu5 z`Wofbw^;_w$BXmCVM?0@g4S8ov4aQ5CG|I?rNY}m3KWo@58TosN)*8hEt>HauMOnVy;zMvt;nyC>rQGw{Um?cRoDlkLXDpxk3%EuGrMQuLo9Em~8k zy5kN7Y9{ktR<{ZgmEA`7YP4n4gWN&H)PE{_@3;j^-^k7eycmY@m(!c`r=GD`IW4Sg zLW(roFbS3oO?K$WgZVs8zpn&3@mLRyAN@6q-gj-_^}A&3=n;{L_q9Z1*g*VaRgeDR z8B79abn8KPMSLUIPid$K??u0kc-2*tN$zgD`B&Mf=2|@Z^d4?GerqrcW0O-Kn6J<7 z5yoDTe?p*5qtqBZ$zxA+3C@PySPBJ>=s7W8RfH4k$P!sQYVXJ@j76hsJBT|ql zfl@e;zu*n}#%w*^^Db+xUh^ST_y9Iquo~;~Umc(&0qB3T3bF7kVsy5*3QTEG+h6Hd zZ}pVK$jy7UzY>uy$q5++i2X031;-D4vCSlDp7f)4W(H1E-}_|XWo}IZ{wu+9ZyN-D zi`5F*Ni-kx_LeWJB+VTO&a|?wBIBvcE`RY^YD41x1%($bda0ZL?qN&iIImaB<=STY zTMx#GLQ}>JxdZL-tw^x=&Ps%qRywjqcWio;@|u(PRiq{WjQL`|$+~Lq4{F`J0bbw? zKfW<(vJ+U_fm3fTF6MWk*9e)zrZLNrwjgC=AVQv)oMim!YO0&uP#6z zy(;j9$rgzgM8GFW!_=!v5}UHzkqtgbuEoH;)i^CHf7xK_}#=D zjBUidTJdIPoq_m+R$qwUz)w1Up|S0V9{q`Vt1}BRIXkw_d)gml)gJCa`F{sc8AU~L zO2i1U;|NS;aX*IY1V_+?IQx%EGWJHl7`PiPR_d>)yu*?=$&wLfHhAVG-2-R-x%w#D z@P_oB>6-8C!B2^>)^2(wquprO842DX)g!@Kc;tMdN%I}9+ybWALxa^c3=MQ8yFyjX z6q^?LWzBk^CI*0Kir-q*C0bS3p5TIoxNkH5O`1B<> z&zvR^IaoNL^Y)?cNBHj+PEL`7M0uuNoq)@&ew4Nk*)3>)_Y@b)n`R~voSdiR_~L64 zEK!Tr6Ca`M)sc2n;1l;K^cfQ!pe$N|D&DJyhIon8S>}>lW53LW0g1k33m#84@7vCr z7e0|7IV`~s-BVbQ7J`gFt zbtoSBLM{wmjW*`YE@nj|&?WT4@*c!*7`ynDzZHC}kRlWAg5REI%8uIbI?KrCuhgj5 zMz6-wd?Uo;phxZ$rENr6eHYmJK=CXe)!=&^+%i9RfK!*41dM3@VrMFut|~iti$LML zZ4mRWizDu*8sx+Ca=+bSv2H;h{5`ct;zYkGhTf53Pe1d#L#T!)5-E~V!Nq{Jq9QBt zYFW`CU$w6nGz(W8r%G>|DOqjuuRp;k=9aqZ;@^Gk5W3(S(fa z`b@Cy8*>v|`#faQps{oqEhv)W{&pi(o_i&(v+amPH{v64(@?_C=jv5Yq`0GcJ#IAo zia$QVX$Mw%E3%*hpr^~CXE&a8qP7Ahc+!o6?k09qA+; z3P-;&D)7SF$;WDxOUa{6@m0YZ2a?q$rO_82be}KG9pwa_HFkInEf)BC1TL5Nfias} ziTiCM#I?DZY~OIo2XBQfjB%k_!)yxpi0@)P2(MlXDtOI7T#|RYZ6&K1Hj&pJy3;Zpr}lp3*UUx8eu^0@tiBc%lt!)K1z8zo~}GdtNzjfY{4f~rN0@tkC8_q zPSp-Mc$IoPymc7I2RnO+AF&fdx_2o@$C(G_Xa3R#(0;9ok(j^4Z;EN=LPGfcN*{Sl zp@~#rdmPK$kW+YYD*q|zcb68I`40(3zeg4%i4YPSa%MM;8`HgaCH`Ajbr!2i$;o4^ zw1=V@EuiYxy*SYpTgt90#1ioy^6=gd&EIB;tW;rnE|Rs5T1K^+PnsR3@iW(E86WhD zJfH+aPZ=4LBUB3Zz*f2cBgeaeVRld&)XI{C%R#d^(K;;!h^IdQ?oBA)Z00%%&ebUQ zCSh#v2w|_hcmlgN+o`t5peETkrK)k$Cpn|VKyZ(>f|Dgqla@M6CiUX^WQoAlO_OEV zYv2MdgmCAt7R5~&4Zoh6oInKFMtF3Xc)^a}TYgZZfDE5$m(o?m8U>`sTU2+8U{f)4L zGpmEe-A>N%OC9qMEa2bfRoP9DH_;K}y`v9+_s;SIN!YDQoP&#{bh6@7pWoM6_E5$M zsc6W*>E#1s-}C95ThBL)8kdbhpD!Aq7~`p<1012gKmR-()r7zOt&b?qIr~98{c6de=YUxvFz#Uv>{iAzy>YAn4(4Xj6LV8kb4QHF%x9y$q8_}&|$E^#8dlb1bezL0Kb*r)Q7DzjybL$vre2F#C#T?w@iHprC2-9 zQ8bW)9@-~*)!Q}`8Nqm&w0R>^l&H%)##4p>L0W2JKU2HzjCQJDC9sRUh4}x;1D}j5 ze%w$nN%G^2VRe(`wFb-LfrKQx>RG0usb<|VYPTD7$Cf6ZPMo9S5#IZUrDQ$Nx>X5%LAO9kukx4#ZrjDFI#HnYgI zt~8f1OjecRY|o?Id|B@i?CTkjpx&+XcR68r7x__aeu- zeAOGEZ72NHt_l{5m@S2#e8d_kb}ZnHpJXAW`zNEvhv@N~yk%no`Lyl z5C2D>pJJK$h9t$(ib>ERj~G=G#sB#gXnz+^*M?d*tExuuX^H}I! ze^@)qXZ@;ak<4LLRP98FTAA9#Fn`wI)Ztvw!(}q&Gg$D?BM!5BTpM{p=;43p;(Yv)RYd z+^q^PI~dvhf4lU#O#E~g*}D98AvQ(Bi`qNnzhy6CVr_Hj^8Hs0YhBIG-_9L4T?jT$_fe{)HIg(vxCdgitFCuAk; z75n%Kj?MK#Rdk*UU3^mh%C5K`H=SMGi!CDgzrRcDGQ#t3j)co`vIOA5zO@7Po2 zmC1%AncY7I+stKVm01%^&-waEMV}-2tU;e^r8B6*EipM27i{fzUDQT?5DECy$5SQV^Fb@L?Uug zru?X1ph&a$2bW>d8aiE=O~|!(qpQz{%gHqLfBsN?TAqu!l9!M`i`zcVT+b5=b1eJP zMmyCMhMy!vKAhvP(Ohzih;9gX4{wpBD*eBX^vA=|u7_wh8iuU>67LW!0?^xqwG^_k(ed6@9=N{RSlIH*u)K*m(-S@>@J{w`+vSYF*gxPHsFte3uU`#t1kB zH;y~TIdTyNiEXQOe=Sh<@SJ}a+?V1ij)=UUYS>G6hYqh^+Un+GF1c{jbkGr(3L#e1 zD_N5dBx&Px*b&6a6V=8xwj3t(kBJx5SZo2^YzTpBDv8id6bMYzko&!xZI-HmlvgRh zyIsPtF=oeG6$`m9C%m#+@t0p%`%1|WePbW+=*`5MZLAkSaPt{t;vYU^k2K%-md}PBIe< znHCMYw8Nm;C*?6OB}@;L$Pz}ayCu+U2U${k&CYG?TZHGgN52|3KRHpuy7g~%r_Q#g zXNnrT!7%p9HLpg^zWh^d?k(6e7`p9ght8Ij%t5ZMiAU^@H==*JY470|++p>%4&sbM zCCJ;~!Qg`hv!twBd&lkoOYYIpSYjI)`^K2rjQf^P6krN4|}fJ&2X3?{~~Y#(~piG z0Mi8%?%MlpyjJ@XT&z*`g7`NB*)>dF$*lK)jHX3IW?m5(t%bEOmPAfCB)V4K-+=6h z;;(WOALlfzFtrPyV>gx-Sg*v}#@7;)M#pV^GYRg$2^3x2@96Za=-xwIbIk+}F|zrF z$2`Bn9IlT(~6ZFfpVDyr~clJ8L2GrQ!+e2~uhvLq{ zOe85#+_AriWRtCo1n=JK=V@=MaB)og7U4~WWk`J!5O>-rD8W8t8M(A5AyIDJ67~`( z4%Ii?;)IPL%Z(x+mdwu!W^p$f`EQ=UM~bIO53VVS6)D{;ZUWP`TIPcPZGuJUuSXO9 zh9f;v=T56LC2V=XUlbsjGO}qPSXST1dKqOdnz-Z~e1j3{PPVYXrWxC?bXHtw{d7zJ zOX^C|QBRXYVZC#d#~oWgt8hWI3Dsk@;1g*s$zMR&80Qq@sl4V|8I?kKUI)}2`p!$7 zc)}BwkV@AYnt^-4Sb-euy`F@t5A1E=_kpq>nN2tM(y^dJ)W8qSwU?lDn)gFNZwdZ6 z;|9}Y(WLwn<~)L7``W z=)6(-N4jb@e3}aXL&dwK?>Ukyc%E&jeNvI?L--@bMJJEeuI;DelvfXC!Vse&bpm%| z$;oH7K_&NKW_Q?Ca58`>K4awD3O|H4<;x0KIwUBt+`H+S1Ga;d{?@#~`J`!(Be3oU zbIS$(2k9U-EX4~xm*21}sLW!qK~~-gY&r)H~`VAsk)W+sg zND15bTs3iwOrqiVQ*Z7i{&*)ccz=pacF$Zg*Szv8yyh`h$oR{d@8pO%|KQY~A-r8F z;TjZ)I0+?;<$GE~bhrnQy~MjbTLWD76=C0>7jnxBwQ3~uhpo_|ZjfY=i7m_8%n{uWU7ca6-+dgTQ{@Mh6}I4@|B z*E3H^nt|mp6N_dv?-VMCSu=tXH-tj|M-_61vz+xnW)xw#ypcXjefVU*Iw=CxSph*` ze|llQ{-SG>;OTJ#bKXnan4zYbY;77WcCwFqJC)Dis#iRcMw&GHzLZLKD#1^4gt3YR zcz0a%F{x)rUFaPyAlYTkvR@G$J_&5c`AHSPhiY|Ai74l`SIc^#GVDhlzL>@>12K7u z59T_`yub&Be1C+Mu%ujyjVe4QpmzDQ2$NkAl7jU)#VB2CXM8{!A+||DUQ;D+T1J^x zW>|-Frp8w5h#q{(92}h8YOFPLZ7sBbqNjL~-eK;aq{<|JOpMPRXKXmh!Zz9`a-3G$ zRhOIEk(EtGFV}1Lxn`cGzH}448uY?R9tRs_A50@}YQ>1TAEdr6Jy3sL%6$1^ljtR$SX(}!I{o~LY*X)yD|KW&C}!UoYMcegO3$rOjf`? z@}Iervg64ZJB*b6aYoTWlsE^4EfDL{zSGx-vI;#IK(FVh4n$(r|Yz6 zKaV9^JNUVOo9N8s1mtcc7+Dadyu)$J1)Cv%PpFMtt(5N{cxT{X)1A@H2lZ143BVbl zQEV@D?h#Hc#&CvX!baix;vYYreWv$G1KB+?$bXg>5AU-&_(@dH6EJdIZd1oSQYh8b z|J6NLFC6bu-K1vpooaQV^!)~fd;}*$n6Rk#TO7L_C;i4W z;PuXAD{b1#ZAzSYINzl{7M@NKm5g)x>Y?kD+N>{3T}NBL`rqTceyM2m=XDC*C%)LnI!MW$zf95M;=Z36uvVG=u+RJ!IvCd`ZIt?E;b7Kf zXoh-!0<5il7mq4@_uz?`8;ZO;W$Pre65|WLqT5Km@8cMNq`5Lbm`z27;_LV{ey6R zPXrvjx090LvhQtTUWY{9o-zNqQP6y1-5j&kdWm;<*Yr%fada#)p3j{SK13I$)NwI}i|yZ7b!ck!TQXzu;tXf#n_xvo`9pqYDaL4HH=lButp zzO7&hDQ+(*W;TiL-@%KQo$pLj(2_<4F@@Mxa=qOoH3~;?xmR7K-Jl(%ZWPkH2sy7; zO4hbeX8dG}l4e464uA`C20c22Tp|C}ufDlOGX|}6*TZ)#TWh$%L|J~(l`B_e}b&%0|=)to`0^`MQvWQ5iYCrmPL{XCgVsttqE$)0ZiPC<-MctO2E z_WTLG!n{Lgk7fTawes4Kwj+F@Brd~0n*iXwW2SF@@iy&He54bt&wG82 zf44f9Y+mO>*uilA)f@366ebc6#UXwsPSy1ZiOBB5V91ho%HN#FYCUu5Mx1Q^-m%<1 z@;p#{UF~6XoM5tNgtWbd66=P(trp!#4s|0lS#LOgck0VzJ+fQh0D&D*2-g=y)T#iY71}o|7yIs!2G*-Pr?|X+RNG z6N05Fh)cG()9jj^o!xA$4K?5t!?T!gCi+{MHNlBV<41hZE1pAJ?+ffnXAVO{Ub*cX6Fo(5zk`m8v3w{bL2|(N`0i_I@_H z5w`e@A$d7X(#VUJ!!skTjbDd}ZHTTO!iK3N(@Y_5@=YD*+w}jpp znw>bxX!_g_eS`vnWcFi?>ZIRzGW+_@Gq-%Q;EX#0C|w;fwhgNVv}t;S`ta**Y6*PT(>Z4<_ z#kK~1!A|ilIQNNRTRcmjH4fh5oi?>ufKFHA@Fu{khF?MW>LWI>>CPg|E*31t5B+z) z;`KgiaSeZr;*&qZIlZ@H$%@thwhIiujxeo%{^g8ms5|3XzfpWHROFPo{4V7ZKFsq> z%6XR*0rzle_1rP$jcK$a|L~9A-3Klde5DuQMyvuForqq}u< zzaD$Kc867>khYRIB|8`<2>P>7DIsO-Glavjf<22gYaRlZlJZJG&p-KF=&hT$k$=;- zbL#2DjvU46T;#(3pK7Qf^C|z`qOjyYHLhAklV$Y~r;ZL>!wZ+F_A4&hMqa|P#)7Yb ziN9DnHT(-Ejbp z-k32)wG&T(HmMu<#eXU59#9tUQ4&m#bZSU5oqM@)^0(R1Q|)Ss18$eK?%D{9K|5ZC z^vuO-;n>4I{Fra($=q>!i(eu$e4T^CRwp4(u~m+Rblt-bQp14#Zsk+_(SUOZ-tW~` z%;$Rf_z0G2$!~bA^Gzz(flm)m3xl=jBdPGDZ1o!O`H1z30>w+vzw92R&z6Cw^M^Wz z)kjYae1FAjHH#OXr>y)TtLc{A@vFoDV>?1{q=8?)IYL|LrOUxb==1KV$9{*Ed+==I z4m4ORP^2o4CQJR)mpup>K_zRSYGxQc+@G5VW)AtNTJ%tPY3}J=;1_F^7i=?1_+`eR z|GL4b>GgdHId2zWQC?MT5Q7lbG|a3&IR5hxqoMzZY41UTy_Hdje4pS!+-XhFeX#7O zV2i0%M2TbsF7ys-+bIksEb!R}oc~3*O>WvZ0M$f6@Jv6|D@t!a)fY-P*3^8)F8ek! zeYWTQrnYpuzpXJWqE+_eDzI$e*6yi*QEwOBd%AEgv*mOH8sJFFYnSBq7Xby>gdB_pj-)Se@lcJd$ z-T_OD2=9K!Fn|c#D$m= z%44BV=JIDc>~pUG!M3mXxtQW?+_$K|Z{aDHg=qDL1t6qzQyWcko9N;cXCw zgU8^ER*G0nK?`(R(tGey+&I1Zp}>C0QV~R(uTa>swkjiLSMq_|P~z+Fyyj)P=X7tH zV?dbEEXjQNbH+@rx`O6ej-GR;YwI`U>^Ln*(>}$OriYjJQ0RdIh5KSWz!uIbE71#H z61)0kD?MlZKP8(uf(P4rjwH7F)*0xZpRQu_Pc=I}#532ApO1kT2L%ZupE=O$`Tm2) z_qs%yLyt3)5|KaI5yD5sxOgLim1y=27}JXJZ6V45>Razo3KA^>qzo;f)eW(>5Ew2 z4kh~V2NTSDxA7Q-$jaGHv$zIXf&CF*sBEHJ#Nkt=?y)K6H;EhSQLSAbA|WxUnQ)IA z&n-Z-i@dr=kxFEEdMh3UIPa7<4f1lR>tNDrehO|bGDp|CM@0IP=A0EI>*Y(Wk)G-( z;aZe6x-R_EK7F^-T?LG2K+%q9AjJ5pzDlP z8bDj!&y$?DEW4qB6F?@YuikamV0)9$;C8-?tQvZ-QvQ_xz~u8}%INraTI+2(`ZNG$0VVA~ zhgP>aSP#_9NdQuIib@EjS4eLXlJ~{4Gy@$J>UG1u+Hz{lBUP=WsVI4L#L_NQ`7mQ2 zM=_NI(Y z7J>dFz$?EBT&WIH8&LMqggi*&w%r3Vs$lUJBY-viu(*dzy3upThG#tLN)KFe|UnW3rj0 z_T(j9SYbJ z8fY)FHI%PTnfH9eOC7q@xr_#Rx8kMFtKR$$P(~eZQ`1xD%Zv@kX^0jZ)Cu0h4374` z!Xf=oJGu3A+*^Zo(I~I}e(q{7x-#OCRJDs6%-{JyZgmm)2z?l1&V3E6{wcFvrhICy zwGs%!k6LD4nBlhE0RBOOTMI)5iN9*;HdXtlwZLQKiBo!pjR^wJ`zdG1mw%CUMGg&@@b4RikGpbV8 zZ&1t%CT1vJfaDZ@hV!U%ELJfqN_bPyeWp>lo7ONj#Hsen?Q;NUzm_qCXwcFKp%o#n zoJc?SSt{D%BD`rFkOgdfHT6p|K<6Q2NUmwxbV}7y!ZN^{e>|@V7IW7nx4ull$6JxSaTVfrLHRC@r=culKkkDma|KF=yt9{I{kjV6Z#8u=1gpVV}y&96|K zXYD*Utamy(PEGS8wnX);yNw^Utj+$#@U4`hBZ{sQOjAC@j3#-IQ}r@6aY=|4FL?Z} z9Ux1JH7_YEu5c%*4$6d_#|4-#*jEZp5UZ_V4b6EI2_=V2gBFoCVRB}m?CmxQiP84R zz{c8baEo?~^5M)DFbrL(p={}soj>GQLAX3@P}qJ~{&5wn{KEXSMHSMz7AyKuXtKv3 z+e5++v&RVy^MUCap7J%p*c%@8d5%kJQt-WT3Q+b|c9-itMYcDFf~!bo!Pr5gDji{Z zp+U7&FKxY-%J<2BA*IJ7mpb}+C0sJahri*Nsf~!P<>%)yTjm%XJ4n-w@Cr}Fbe7{NoKH226b0affFXOR z;XfP=$6lppde-axnwm^&EeNHq8job03fnPiGF$a8z4*Oq zn$cSv%?7%+Xi6C3?m1{^oTyBZ+^cC{jzgDzVBlg=kMD|o=h=?i?*aQgRKLm+nnpQ& z>lA-7B3gB{72&33c$3{|apVy^YFAPsD-4p`PKiE;_u*wl?n^B!EDL{ip;zt$rt1;QGK1q` z<`O2?c-HUUg8y*18QxVqI<7o>05l`wFJJXI&<~Qd5jK%CVl??=^$6~p1n*In;fhvO zM~G9;1N_atQVlFzgB27~W3~$vA2|MZaO+G+v$Wopn{itzPJspjqQ`-!Q=FIzq!3E* zwiXjA1q5T~$Whs&pVG{7FhF5?*qbp8EqcvK~&Ux+}0Tgs<=u$4_%RU4nwp4;v?^kX^D^;~6_E z5-3Y(-i_0YC&ms*$i>tkA>7T*Cpv1kL>Ve7@HDkY6L(=gXcnq$A>C7m{t!w17*%!EDa&Y(y3p;J1J5#a!J~D#mt<&~aZev5glSk?q9N=~K+UpN!PIzLT)$ z0IC0-QOJ@nUaAcSTMIF-(PwhQt3=?*IrZLC=)XerASE-2Uey2}ztX6wEmUe&h++{N z8v4s)bm^cMmfm|NUYnGy)dUF7j!nD|fSl@ozXxoslD}fJK4F*6Vd>6Y$!EKG!~;) z4et@t)uF!f#rDeOsx*$>7OVl-zcccMp1F25$?p3GQk-Mcop0n22~hek{BD7ZZ~-$d zmyoG5dY>G5E%zkk;4D8*(i-gtV@H5TQ0rFh{#t`Rd_s--<1W9t?SvDg1IW@6qH&c9 zWKM{H^02WlQ1eAEDXU&DO&uEUFf4^P5EN%n|K zw?Rbqb>yyBo>cV>4}C;wlZkGN!?URFFSr>Wc#(U7&mz40Q^NwD&!P8jxC_|NB3e3N z^9oUoUFKTy+WAxm7I0?r3m$zWv7E~sGfY~JDnGdKw-X(rKzw4`5G3z7uArsDx>W*o z3&UY0(UpN!Qof-++PNI`S{Fx~mKLE+2ph&^(}d3$i4^gecaPXb`!!BdfE!>Em-|)4 zA+Qm&{PXC_6FFIFx_< zk*2Fl+N$<&TQ0-9%ASYWnEPCQvY%kY%3p{I7&D_;CsB_%x)LjGh=#I*3C)MQj}uGB zMwnGQ;S#M#X1qv+%-o{uS_-$`*rtrohK(7pfS*$FGc(^scY%XSgZ8i~J~ePzByK)M z^^Ku?YDC;6%D@&j_YgngtYDQ*-C?4C;TKNj^6$)E6UcI|veul1L-KYm7A)OLNHNJX zM1J>o3i)8jx57uQyT@dtJJzrm)SUtCs<4t0DIJ^Lf+m>m_T%*cYoxqMhsY|B$X>fIg&t$%(G2WtD z?xgcQVNmA4k4HE$e8DuE7;4xGR^YO!lpOz2efX!35NAV&n&SSMy91wg+h!Zor*ZM< zkwC|*{!vUXx2xpn1&AuuG5UJ{c6JaAUr z_}8Rd$V86dm6f&3%pv@k?Lr>LS&D5sPRoDXe|)CMcfG6Q;1cqpk^AUcRs=qM+`T74 zJgP8CPmYjWx(n>b`9#{7BCzZNe>S)BF5plEW!UkLSvXa%8snHPpbLSx9mbxC+%IZi z@xN#t#0bXm3U0F11tMC-0Q}c6flHGf-qCJjp`lJ#9^!bDcX_@1ECfrtxC#-FRZ1Y3_{L2F`-ffsedhdAiJ z7uDPEo>3=}8hKeFku|yF|K!smnnaAW+el`~x_r!?&lY3YGbsz3I!NON?Yyjd5 z_VfFF_BUKM+4FmR`tfM7BWBEAGRk(*f8-Y=YR=G0dGI zx_j&YC^{RzmiqsXpR==@*0$Dtt-EbX(tRzJik+1!p^IG!NwVl>?svID=(2ORZg7Q3 zN)ab=$?Y}iOKv+;NQGU*6~b{-LM3I!4Uzsai|b zuE%doh%H!;T{m~}07I3IFykni6>L z(7}L%@EEvQ))fL(yHQVaY8)p7R~55KEYtag1WCWGccEP?WNx@a?Rmd4R{H_(hY#md zWD3qbdfWx7vF`4;m{eqPth@$Wa-M6Gl0 zf;bi-Zu?TC$z_~gVv1=^*PfKP&X6urStTD0j&9tKg0FOl-~7TgGgT#rG@BkO2WHnP zvD_hU_jKvqv4D=3*xKK;tHX?FpNV^lRFHFG0@0w?S#HFZj0N;j`aa(C8Go+S?3vfQmD2bsw zp9^fh=_ss>SCAUL9PIH9$(u&@RhFatDL3vbFzX`mzweq*q1Trnb;Le>?H=ZlOh^2U zMaBOz3kvQk;{+tQXAD`peZcRwKBUELZ87Zq2ff+wKh1(k8X*u@PpU_A_t2nllIix{ zFWe6;4y*TI%ymJx8OiO{2s7D?OmaQqRqYNR{upbSL2kflQ=th*gWx5*i2}cN8N1*E410{)y3y=aj>wx;@6npyyU8V?j z>V$t1KHsX=`bahC({gp$Wwnb%MDdVGS$&LAOZ~yGBkA5>p^PgHxYbf=md)uBFwts! z1?}S)_ln>M*zFm27U?Il(rA5esC#CZkYStNrzVYn@~{aPg;yu6kfrB&Zl>34GscvC zAyHp@EEyX~p4|LF?Acb$A$ZO-*$Nw(4SZlCiJ<)xGsSVDrEiU76Jx{eX0yqbx=WJM z2hqE1r1=A7VD1NA&F|y<1WQ%yUCB8xDIz~4il@teCr%=@*<#{Wx{c6o$}AsE0hc)g_b#vr zwJUB>xMl*-Cjr84>GHoQ74!^r&s*|n5$gqctW}>EfiGuKr^|qzc@}yv$3VTn9n*9$ zPK~ou>>1wDdP(a`avtqGCV9gt2h)}#otx>!kl*Ek>WTW`MbfM3^nT^Yn8R}fyu+~( z$=@^UZ<)Su$(~@MMN0!QKbq&L+f9)ku7#X2d?5{rn^s?(_vA2J)4EHt)u@YgF~*cW zP?g?CKX0SQ9bnD=mH7VTpkNEVq6X&x($`SQHF(Z7$Eq~SDkM^ZZ!$Yi`30IC)miW9tZ4Fr4J-0t7^15cBTyJYo~lzJ+PrusWo>y zyav8p6pViwd|rqO_7%{B--RK1%8eya{j%R|QAKQ@9m` z3XJ3V{fCCRv)7*`YT4Oq&7hE%$mKARYVHoI-~BYo-FsieugQ3B*H4p44|>Lpupco> zDJMt)XsAsy9}8(~Vkbu%IVmWb+tSho^6JnjKXhq7xeNEkkeSw1J(Tb4VYjfj7~b^| zM#l*Faz6bVzrGR&u3kL~<}NTBXm=$3=cNHjdF4;%y7n(a>j!#)fm;>@N-UL|(>Fo; zo#B$SoZg}wxpixx_tO;m`I&nilfpZYp%jYqC_d-%vk|JJ>>j1$HrcIj9&qT`GR{iz z9A$*R``Yy`tYF^J?Lp&!|7Myi>0h5r+gyYkFn_mMzx}S5xXQ5gjK@k0oNTX0%D8e? z`~(w98#W!qT#NBeu=j8-5IRGA!_lg%7tX$&LpHWR_!ui3BBIlJLG zOC{S!xfS=RTa8@BLi>8P@igp&VNW*8D!mNIZ)4jtp^gXA0#bzVe38 z%VZNMYxg3hv)K)jj}*s+CZhp(_#VA0bQFsG*knzxJ&1P4uLf-dXjnCORYwqOR}g&n zEgnq71}c1j=1OA48+dF!>KJm7wrU4l%2$1w-Ms2ArKtgR&cbd~^qM3yNpqvY2rr4k5HP|byZQb+dxh>E@a%8U#ZomHTtXVpxP#suHPq-4Re?u~CdwwjIRvLIY3F2mRy@0{^u?Nce`j8q?Y2fArxH~)BROhAx zFZbS~uM{IM{$gutXeU<6uXTUEe3ZE3%MD}H`_Olp>zR5|(6CYXQ|#V;4y*m(+yQDl zz~uAn(_#sUmFS-a^=QJRS9GkDzq$Q+fykwa2Ff*N_7hGz43>^c7{5tce90AkZlTBf z<%vmsOt%io(O~X$T}eK;N$>8#1YYD}T|L-0=iV@BFQu`Jm(BI4xk$hH+hH*KSV%`| z?2fI9mpBkP!z}wtkWGDjCVg2KHQ~EW%JyJ1^RlCGgQoGb5q*M2&VuI!$6PiaFZ8=_ zfEM3iI1NzpZEDT~>up9Ev(#z-Nt57rb^$Cb0?flo=V7mmX5rL6k3EtI zxjQLOSh#4nZuKjZdOa7|tdz{jM!q$mW1wV;wR?_|E+6?IRy?Quk0q@1#e8cnG84FK zena~2Qg7dFFll0#rkEkcgwpJovX;h{XxS|0)lGTK5HALsYflt!9QfoXJquklckYP- z>CFqgiR8+CU@pytF>oYR+LX)KeRJHzJ%6SgCx>?>uAq2FryENrf0{pYR;O*9Fhv5MZM!=H0Q*^DVv0o!qkVDMV3K?hcC2difc^- zc~(wIy7l5C)(LKaYUaLUbSs-Nr}W8v4wx&O@a9Jxp!la&sWV}vVVoX0@Izc5W8~FK zetcQh{L0f_Hs%)6+(ap-6#U53y`c|=xrZ-O&1{C5?23E3wNy=12|0s7z%6Fek5T*( z-AS$L{wVj9!$Hy~l-><3lttfQUW))i4*(WUSQWM}K=C#MvF#?Lj96+t)MmE2CMY^$ zy0U7wKzi5wsg;qtQm*QxxTOJm0}Wa5x{vBeluZ^~c{J5QhLhbecir%K;iZf4MN7?m z+M6zF$7)TigS)62fda~aOQRh~e>$V!c7UwaE%B?m*6l2lOuB%wEJS6UEv2NNg`UqU zxcWg{hcFhnyhcu`p`@vZe^&;wXS%9wjKN_H6f@;x+=@$rBcpre^`^qm9cdSLT1HCV zpgl6lamQ^H&uF@v`&ebbC+Oi z%&vGrwVe(L_X1&8_SD-J$y*R-3OSTNO?5F4nhe09MjwZ?|E}2+;qh=>U0~*3O>P-n zeaYQ1W0RAI`>o8|2Z_Z_hqnrzqVz2!TM-O)9zP03+@Nd<^x~<#KbsUMqkpKJYqfFo zy%U0OMM7GhI|;Qc{$09SH+Dq#2AKVyW^UB2wfe44Mfw5C)IzJt*N}JY<(4@!eu!s? z>o3#(h=8DD1F9_ttR@We-&n=j=T&eY0UNA)o5E`P*qZk(W=v~sYSLEZxo(H{FRNtB zTdjfGtu>I*RQP^MPPnl!RBCLDjL;4kwoyh zf59=1!m$7yX{<{&qp%X=CJplIqVkKLt9p&xSzNL?+Ucmc4Fz|Jp*6FnHvfvzN!=wm z{)!+wWQw~*pp(*Mh08{=w`9wt8*`!aZbuw@T$7VD&&tLe!CtD)grCe9VP1+9CwvdCR+c=8?MZ<~4>#$*TGMt@Sc zoTQ7e#=0W#m^|#A2OHm=M<(uvoQ%Ij^zHzQqjaY}iO(ix<{b{VNHu`xOu{X+#8OlK zrQb-ivB;~RC*0^=|7!~nQEiqj9OWxc4vP~lifNLqf-c{hUSP@}#+c8_W@&h}#5~wB z9OUJAA_Qofj-;EjiCT_4`3#hO?Xw^sjn(^OW{&k^q7FXh6K zd@!L!9TB8`AgWb9%C!Zm%vJx3!t4vXEgg$Jb4-fjuC$dfr z3j3xgMnQAIWp}{>hxB8#y2HE;w|bQW0&n;9D{fGZ*0Ll8&Y-zBaf-BLvHbm?^rSV= z$XV=NT9vs`6o|hFX6wW0!E1+g`($WJIh9 z^O?a2&o>lOqimq+-E6;fTu7ZjHWIBVrYbjZXOOOz>TwLFtHw6QZN-y$X$z>~KLr2Y zH4CyRfpJl+z8P9n%GOXU<5kms@V9o*n#(mGw<(-=G2ebRX=9mn7ijBZ(R0fwdwoSP z#P408SW6PZK7rNo56t}Pt5$CmGyWS(y{ z0h7Gv`ao)|SU$_9QJEv^3w!4ve>Wr!pZ|3n*|U(Gy7ynBxW-a^BLvQW3-9`)F>bcY zqzyXrjfz3_D6{l;*<#+|eO1gN(B%%y(;PC!u=tp1@l;ZYGRA$Rqa2xh3wYLhze(Ub z%nf%n@^ig7URC3n2F9!~;&F|m?vH-r!~x=#c|{u8_TtFpx$4LCIy{rQ(MzzBdzM#n z3AbYTPj?j9O={9?83 ztL;mPL5FsZzyU9Fy!Eop?EHH{_k=sQ1g-#G>uNc*=8!Ik?Qj2PvXhIs;AC+0cPEHk zn2jxiYm0~ksIF)zAls9ba>Fz;&%M_;_h2{_(hxoBZ_<^S$J}TJK6@cP869W6$SuO& zQ1^5XOIv3mnt9c~l=sQglLQDIaA;aA`=D0ay5y7dpm*W=)0D)<@fE<{foSij*qoF7 z{5n15#ci{XanWzfNC49FkCbv&FgH<%eu5O6=&h1R7Cl;~JS67R5_)r-;A|VXC|zG* zpZ>L5EVsI2HocvGeTY(Vbl-RGL6UQ_b#f>KrEj7<$^q7cz{I`=qJ*)ug=+!EWmv?A zXlC0Lm+FqcVr%MYuRc5gQt3_9#d|2{HaH4I2Q*eXvEFK1vu?KKA7l)~SJUMkul-gE zCRC|ajH`RCVSd6L@s6?}z^EpIgUScW(`i%oFmQ^}zpy8dxS#S&HhC+_0_ z1&#UXph11^g)DEFm*5n$&>CsAj*WY_hxCmn>;ft|R~xMkr{MPt;_#!u`sQ@R*Fec< zc;%x`JN47NiDr6!RQf-Yp-GIK8ICzKfpCLJb#gV@Jw8gC-oAqwevJL<@;&yAHBKdA z$eD>oN@N;SB7mRfzKlH$=^>SUgPo7;m7BICrRIX?bV0Bix9crB?Nm z_S;$CA$URhR8Lv!IN#>|jCBLKw;mqVxIk@zgq;T|zxX7jykviJQq9%SrU*>I#!TS8 z+*o)=1lf-NIkXE5DYkG^sGjmo=$TL>WeOU3nxH=yH{aN4;t9bTk`S?(Y-X= zb@=C1#&O2O(~@h;WMPy^|I=;esc$2DsIG35N%!pI z*0_-?)izz(n7WmmcrkBgS<62?d`%vjduF>0uwRJv>_IVIf7(*&Xax4;;q&vz)Cck72lrJ?K|QUhFt1NZ z_d-JSj)+0 z#!F+7Hcb!`Dc8&mY5Jl$;ZroAs{AVUWs=9(2)>hNJiBNh8?>cNnGJ8WuYQ^i_?72( z`$+dS0%wwh7oZ2ziSRV_t0g~e-XB#;BT4lg_p56>!#%tnUXI019L{c6>gU=AmNpnh z%sF%Q@l3@-X5d=YizOz3d!8noHu{z8ap2ZmH>zI-^%S%$9|!sb{!yiILd0b@ zrYP*?7xc}~OoxXHXiihHiRYEF%1zQ@Be2d)br!Yt zAU96_X~+vs0&B7ZDYNf#tX4pyW)(2L%~t5P0@k0@`K(W|w2 z7A@{Ok(PWV5ssE#V(aC34{k=^a!jA#J4-eAUH3@ru`T+Wqn9h+I9R;&d`2dX`O@YW+4;zcfWz zm0{Iv+f&6fy#XH}QO{ZT1hpWaK9MOxb*hEIEQkMoM?`mXwn~*JbA%_^r-{{^mB|axf0%GJh zv7|C1Q&D+~;&)^*yqUHkP#y4$!9*ET8bAjPr8PKH;Q@W0tjVOmoOsV-+8rQ;yzYcj zc3o$W!$9H#G4{YQPz5tM=y6WZ1Enuf*@iE^q9kHgZilul!MYmR`a7fIffHSLtf%%X zZ8~gLG6}6rqucAhNo0lWdM&eV`983YZ=DkyQ1bvhF=wEyb4W}mXnq+`-whL#{n&I= zJLNNe+A5vy6$5HV+ys9EYu+@O&AG?c zEZ(KmR1fp_Rg#L$scg38X5bwuN|J9!Y8c$@l9@;0k2al(ykvT-1+kpsIFCfFlGds{ zQc7j&=yz@tDFC4i1gB^x;sY}36Q!wYrCZ{nn3jlvA{Tc#V0Pr4Zi{96SMdC*8FdE` zGBroWZG{GwOA)Z{zhP$I8k3333#VSS%C7aT83#{%Y%mEbS7`6)gGo3fRpDviy5>U5 z#x2atNP(nH6a9bljOg5^4B*R^F{pf#s{IC*la+VXfo#+c+8%4mr~B8tKwYb2<<5{x z3<0O7BYmR0b_*Fd7zRA{-+E*gt`|%T&$&YDuL}&4RERMbo!Kdl5q)>q>X93;(@+?? zPZAQodtBldrdwG+ODMb52Rtkj!AlmC+TAEYms7gTx!A%K)5zRc4ZEqIj+ul;i0c(B zQh&D#U!rO(w@Nr=P*=}a#6>r96K9&BzH`(=2Khs;MqVpw3@>b+J8zXe5$hLv&|IYDnE zF8xRDJioF3{WmXr+)+4@O-k1NlNo&tKtKcSIe4|?;6A4J{U&m*QB6JkOfWxUU{^jw zDxk8JZuJ;Bc_zy;Gu(5YGZS-=*b|cP4knCO1V*Vy)nAmbyjz@miE=5c)auo}ajqXM zF#;FL9c7i`q~q3SRr{F1EOsKDIZs|ny&dH4aTr@{oiMEGW&A=m|MPaBR@O5+@js7Y zE3QmMc)JgbIMl49`o~KS2pzOk>TVCU1wjy58N?g)Vc$t@W>YU%mh5sg{z<>~j;k0U z#n@)D!@1D&pI^e#V=c2Ud<&Ch8qCjLkua7aLl=W!kr`Ayf#Sf#TC7S+4-ylZA#dOj zEC(!PSGSLI*H**FoF8@Nr=K=y_M7vnDih^8y4%!o6Fh+aK79#wy7jAYqJ~T`pGC4T%-i zPAR`%RK?z_T1kD+9@wyoPLHb&0?Nj~tkp1M$9SPjt&S3P;z!uPF6#j{v)Y#Nf^)U_ z!^5Mm+1gs*N)Y5HCq%~wj@hUDAU)3q7W)d6(LS>kIjWf|-Wv{6y22^(Ia+3qW|1?W zv4i*sz1qIc)1u=eV~iKl1ATgrlon93J{b)KB|qb@pJgj0H)iXX9>A@jq>0??J|MZ! z@Be4{FyqzCJM7-XVAZ_+)H_Uh0V8CBMW@4Ec5jO6vq;Z&3uKpf)H~vK4uQQ%Hw~oc zCRnRgm+pfi&2bwCe9<|8u?1dX)qrlhBw>6MV-EUPVvB)m$B4^B#;u{2GN8!S6h(#1-$_2PJU@@8*1T9%rgvBUf*ICl?pRV;D z_8k)1m;2y}m`$OI`?y(zmXSTp+$#|sQy+x;f&7Qc*nuJ;q?i@x-Xoi!j}P$TL(W1I zVoam+J1FdxnsPjQ<=FF7eC`FI4`^hRA;tvde{ zd@>cg@fX~Ed4S&VIB3?p^}S3`TSMrHG9nj#Q- zOixG3nU8j)=PmTZvIn^pM|C6n%E5oP&<|7;X|7Xv2^5FpnlV%eoyGv@q(Gh>2)Bv` znke-L^Go*29CUB3QtDO7W^HWEGhUJ(*%uBzP7h*V-~Jc#ky{3Gnc;}}Ji%$xpzHnW zr;VDq5l|gT3to;mKPD}?HaV@Jd-W^Yq9B-(8yzOs0O7|hUOj-4t!`0S>vOo2lz0`R z=AhuGbNDu-ZFwe2_k<49`xw+IFAi2c{zYjrpqmJuU`qv9TfvMHFpC7z?ZB5Z>iwrd z(X$uDz33O$uY>X@)EgPW2hlT5@C(=NBBZ5XIe^|X$&{4GVR9)oD(yQzx5Gw0=JNjy znhwbu*7MJtBa{&n-};Pn41OZ8=@8=^DDpdE;*oM7*Tu%BzK@Z*5%gZ9D?B3ky9pkl zl^B!IEv!fJwEsy2T@0@j2|3qGwqQjReHT~%kLre@-E*Xsbn}(XAN86Fv(Dv^#ee~N zx)=-LyjpF(5|5cs$_#G4ivzo}uxG?vUoSWKXHc`h;uYm@0kQIt2`AwLyU~StB+#SC z7Cj8iDZ?u0QI^b>&G-{PY&t_UY=6&0gwrZhEm~T!sHWSrh#U5uJfQ3^%^tGqRXq(H z1BhA+~ivDL_AM(09WGUsN6 z<UM@W*CH-JetLh&4HsztrCY zLvF-ezk}-<+0*B|6X%HOHp9J)*q#YuX$39cj^*yr3CAR9=x$I`mOvzH&5*qmNOcy@ zZwhRu7U>t-H7#%MeWt9oviDTPIKN+z*&!FY&u~k(ulFJ=^?r3uGGvO6juu(7kJT@W zzC#n-?=|Vkpye}IWHTwS_@HELtD|r?JC5ZX@~4TPTSM>o1KR;D6ks3!upfA|P!k~N zM!#sOp~dja>0}o73KWuHvC0x{S*8D7XDLR^sdBGqi?o6nwl+=Eh&w@n*Hr#3-9&~u z6vs~;M!DJTksT|Dbq;mkhwP$iDd%1AofTHsXV`~&{xk(t%b-OQNcp>ittU2lm1kTP z=kyQB&aeEl=ED!k-sT9!-n>XVc@tfs<9xzV?=F7YWo$5Ehi*t{J~blFDiUwZO}BN=SxoD-2#}r_asFhbI07t~L4yBZhQ&4;t)=%cS8 zx~X9T$w#a9Es)=FkZ10%KvyXt=W?N?en6Ngmx+(k+M+ZJ5u5?JB3cuoCUB$zL!RoAOw2^djuDeZcTX zyr!J1d9fXhkgx?}6U2=jr-v4p#??jBYoW+km&5q+Cul##wHNqCaM)mAl?J?gX=WZX zVC@pCnD3nJIwAaQI6f2*tbXhw8h9{UpO!*A1|&b3HeT~2?drKY>VhR$E-iv%6Y_b8 z)v=Exs5N49y+m5*9`!lET;&Kx#+pbM4)$2c6ZBIKEHNQ=K`c>?4bZuSb`FtD(yE*- zmBNcgjQ7xlTe!)uIMkC$vj{!yU@>xXy=vYm1NZbdK_$EUi{|>bqs(?at-wO>y-?Pn z?jAJ4|NIKN*3(k0hgsQK{qqzGle&97UE?en3(SGxh*R1@xy5B)O_ z*!TnaUr;?ruY>CD7SKwxCW(bLr3)r>UHC;DzuOTMh<6Hpic73QWiQP?;Xy&_g(QaIKE8PsT#(;^OcM=ALh-t9jOX`8m=Q2kHwq>6 zP|nmh5V65Eb4LgJY@oA8b(GW%L)^Bk<@u#)YogfL#7EfkU9MZ3+42BEO>f>(jC)$7 zM7RMUXHZ2?G^rwe`KYKxWAhOG=_*R^<<~Y@KI#~~OG#1PH*;~Lb#wHFQtYBj67pt< z(f<1iU@1>W?Q0(|3{^?a(2=fb@@Fqh4aCH&SeyCzC+J5`uH3hJ3l6N5st?7pef2AI z6x%aYB|GEw!NU&qB5Lvx#^MD!hRcj$FvZDY?jphy^w7g6iRkCSmZG$aQp=+xlY;J4 zGs69p8?62wRWqL7w$Q-%4<%6lg(T-dG1D{EgVmSWjt-1=h<_^SboKv+FIsjHdO*+Q4=ln1j2 z$!7Z=LzTd!dOiW$=3}BTs$l4A6kco5eiOR#F-$&KX7$?xb+DgTr|!QuDBWDLN##5n zt5?;XFvd9D#0n^iQzETDJ=VD1vst(dyUNXt_#jR)P*#3G=B=cc?K9zLUdfTNtxMz%CH7=Il6M3Xa&d_wvI4KU%ElTMb(xP(qKG~MKPC`jS@M z#r>wx54sYaHo&f{6?d7T5*_eyKT;R0`qrh)nPk)c5OwvYRnRE69ateFh`ZbS zLQ|1G1nDs#Do(b>HP@f!h?DPK1s<6_6@}{?s*G9b!1~`*1ujtbCGJfFnPQtkxjaL% z(kPY>?%N3_8iOQ{Bb(M^Mr)h!KJ|^eX0z53-Y&`Kkrztr2NcXmv_KdA4K|{*1U}kJ zfBoMBfF}b+%o6t^0bbC|9&xkWBiudu53`OJL~dG~DEO=qdIm*9G4aTL zbb;B`5H)Jmo#I7KsDdeD{7+m@`Yc%%qg_yVu8{F>gXvo!J{N;Vx&m@SEEoE!J8|GC z_mvWQz+=ly$hbL)bxBB7JDtHE{|9eJhMAAf(eo$e{6m2}PM}WZn9gqCyz9W#3rhCD zvoOVZ@Krh8=_a!I0T0igQvI0y>mPXFa`m2QQ8a6H+}-@0VCW4_z&#{W6;Pg;p10>z z^nLZjT)F}g;RVkRBCb%Vr)OOLEow`NQg_@H)8>^tEF$UwMsQ9OyEujXnf~q`_Ks=K zY>Fq#Rv!`uQGb1FBIuuD*^2zbZj2XW)K&2p z;ZQfkXRe}wov1J}zWi7YRBFv?&7%GoaSd6`2>FXwdzKRN)_k^iyuO(IC@H_qL+!jA z`+a_9v#$$Oe;jlPNkdK!D#1e( zy?>gIB9j$GVfd=?u1Qe!SBH;waw}@vSM0aB@^{5x>MN3o_=tFHIEcR! zklzofdiTz+0Z@9*PODCGXn$-w5E)NQOfJ&Y(%yS3%0Z`bfQ-a#XS5%ra0JL;LU1i` z_bmF~DkM^Y#ZDsIa3zr>$&HLrMT8V7h38SKZ+OgjVb`xazT*sUA17B1i-tQ#>GX(?6J={#~qph{rPJnI*i_^lq`@HuJ$% zB{m36?nsLytP8AuGe-+zC9N9xBh8i!k3}@^#4NZuvAm9*%QJ?V(TfMwC#Gdqz_u*3h<{ZY^tG2_2QxJBqd zQ<7fb!jfw_J^d!kkb-s775~`QpzN#u)RgnUQUmv3nQ6SBbT`IkB#*K_k!ua_`UzPw z3ilY=36{{xu!cfrKn77*~-KJib6A0Lq_Bb?5Qnp!@90xZA{)3r1vtV ze=%+2S=jv*_I9V;!PkqgTyZ42$dGHD%+8vY!HOHu0|YWcru`RBud`wwvLRmg9MYUc~DS7+_vVLyR-l=l4;2w)Qx7v zTRMIh_4#{gBiztJyQ>sxcC@b?Gr#`+U}f1G)6hdA!Yb+o zxv#xGjh2n`Lp}xvs$NJnPvVHJ_U+Gr-Jrxgj4sV0k%Trj9ky}D9TT#GV}3-x`->J8 zPWH2NUwc4ndJd6hX*My7A-&NCykyZ`uQN{A4X0(qTmJMVYD=x6VkjHJa$ZcasWyNY zoELr$QngBR$n0hHS<)bW$+aB*5RJ^4-Mr98aTO{jv5u?A9dQtK(x0($(^nuNt908T zjzV3=H;!@FJFB>iyv1B^2Y7DgICte|z_rEPsm;Lp?s`lBC zN!!hX+P3PeMA(8Tjc}#n7-KUVR<9!L04I6^+T-KwX&bh_BnsX!0)@8D?VAYUi<3cK0 zdQdgjyI`xe%TvwYbeoz*jlfO&0;^z2+ZdP|p)G(N`>&nT$4@{kn{ZV)@S&d}MWArFW%y z#s$$<@0FyRVysEDL!iVusOBS+=R0;6SS+V7S9Fj)*(!dWCs~&cgeNV+&gCeQm*+iW z{EEeED;$zN(G3puE6pc=!!KUIc$o@um$-V3x~?2s$tzg|Z{@*Dnqc)elaS-1Up3z| zZq6RsO=`hD6b#*U%j|v>k*;gr(Zf@Vrr6X8WO+kxB^N-quavR}MH&|~bE}-sDy!hF z(1WXj`NDjP*H6{Z7S;3Xf-;fhEtiC19CJvnA6JKXNi4w0&_?z_EZ?JkPkK5K_7>hY z%Tc(p98AHZ$*_N4THZ&bDg3$?m|}~SyCgnV#ah9KUP@@zUK`-erKDPJ%57n}b7C>V zdSsGu)s38Xf^o(Ek$eRJNmtl))>CIvy+TbfK5KSNS3tbnFII6b2~zak5ip@%_4#Ro zWu)#;&)B$KaM6Iod{y)IDA^6(5=S;MV* zOZ@u_i6{E|vyf+%kkeT9VqBdc=~YXXO23-enme?5L4Nu?>0yJapPA0!SA)OXcn#u( zKFBTlh8l6l!y-MUlK0kwu6U0GTic{po4-#?Ds)QOqB4hif`etMv7HrAi2fCcs+<`(2 z=pzfrH^~@7C-6^3HBFKR92&_$y3-U!sAYpz;?0Wl`^rzaKym(zO+f7uDq^w*9C?B? z<~ec+BXYx{&9B?5_ko|Nf%gZTYi9%1AHOs#(|B8ls41)BgH)MZ%Q<4n#XqsHhfLaC z&OLnTNluixMa8e_dG9|r;N|WE21Nsz9@s$jm^HqFkU<-Fky+7Zvr}b~JAaxuSH`LB zRVsFzTJeA_3skleuIrE0~@5 z?*;U23G?lGeOs7&bv^BhbLe+7@`!MtfmkWSR7wqW+mX1bPV^(PzcRK?G1FUw+HX?W z1NUl%TIX(rkc4)o9# zV*Cc5H_<+^V;X67%XiYY9<&ZgawK;!i(%1TyokZGP0Iw%4FF?65^4l|#<>qN2~R-( zs|)eJbDD9+x?{k*FN_}v5z>FD=RaT>{PcOY)oSq588ivgu~NycS8-a*esVov$1c?5~bjHK3i#&JpC4EEXYp9|Fvj2fn(5pTXm~aQI1nLjgk3I z30)zN$s>2nfr>-q-8!Kdp(jbIxT#mD=}2v0brrki3`qflo)G)dDjP0gCl%!5a5wdd zpGo*P+6FG21v#CieK|G8EkBT^TKAapKdx}-ujpR-DcUodKUtMhxrXDw`H8wCS0>_(aK~b7oO%ae zy$#>yUtYEGqf*aoR_glF^&4a2^`R~~_x$v8^_v(94)e%$@QP#IBhv4eLf6k0$|{hv zA!zp*rH0MeDWc~Lt5ufPhl*qks$t@71qt)K4OC}>yMGy1myk-*2-f?6j-rtCy~JHFNx|mYd7V?2tu^JhFCnA1Ilq|6?MK8ASzSrK0(ch*X1c@QCLGI41OB67 zW0+8VQFDng%%;er(8pYTe!PBe*!z~LP3J5%mn=OdqrrT4j|-|7>6!;-9_X!WZrJz( zD$i0C-vPg*W(VXPpa*VK)v~?zqKkY`PY?JfN$eX(=}WKR{~ZZLwiRjZwh2fCPTJ(7 zRuSDl`7W1;t_#=??k5K{b2m?tEbOPu!_aR+h|HeNa+kHCoV>wzj_^h>J(GMi2Ed)% z^RslN(bhg^mo}TtqvJkiq}=(g34P~MN1}&+v-C0{gGbe?myy5xFB6dV~#HAbCF$*r5OnU+WB z&Lex!WK~L)RmC^%{&0B6Cw@k-fFm(y4Tc7=%EN7+AF&AyVb z;Rm#7ON-3+&nv^q=~wpK#np&DxalM3>*Lm_g__n-4*$&sjL7ZymJHd-)K%1Czvx0c z@k!IVwvYZY3MuPeNcJl-EZs&4?Nd<2IST)H(jpAI(iSGC1eXL<}~Qo|JMdNEy#OIj&_$47`r!!mm3Ru-E?yZl$xB*Y9o8s6mggK00h@P zho-1@neX@4kgYvufknt`wi*5KeZaCw6PKwdAP@uCAI}Q@SvBzfj6sv6^vJ1Mzz}SO zKc|jU*X%=Tt=Y?a)QduBeClVE_=)q-Fy!MsxaKS zz9yKy7zoWH_I!$o4@*u~-U+I=ZX|K7Nhcd{$w%!*Xp?ILN*Q6tO&c%B3YuQ2d1#KSN>d3ZuW>{>ep9sCY5VM^%kr6Bda8eck@@sb`pYzWMLKoGJ!owV zI&W19H2EpX&lG>qOj`N+9&~*}v14|Uv-GRAfT-DFuLx2yum)nSL+CQr&3zWtd(Ep^ z%Spr?N3n)`(Bb#+2^YO_lH`q5)~a4yDAe35-p|Zx@u^B4W+w!)yQA(wpD=jp-N^Ri zq|aMPM`?7cu~w7!ZOXI|(O9Oan66*3Pg6g}JS*Ueo|HqsUMn(xt(t5zkh37#;Opzz zVzA$*5PGZM%|cyHJRkF5ZVmDq)STCA$P_6x8%ufB)>#zdt)H+kd=}8 zo_d|O^QxPS!l`@5F4<^Q4&@SGOtAZ%Qq{|lzDd$(PFES_^NF<7lsp?M;80CG(r~YC z_1A7SQ$A$WTasEr)grzgW7a4BU>~^Xd}>gb>}FBzO8S4?F2nuoP57j>tjVe^Nuscw zrk*!#`1~h%kzrm$_Q<5V2q2f$?jK;+_CXawaFSW5n;;*79nVvM3%$`YYt*ZL5@`u) z$anT+DqB_#m`|u9;pI8X_GD~(X#39gq<<6 zG0R{MvB*t-Gz+_NMDJZjC@Bza)X|quH#*iiuu8ltt#5-5*2sn9YB*ieXDVv%}QA{#BonavyKjUw7!RNg}fMDqC;jMTQPS@N{x2 zVM0s1P6Oj@pwPT^OZ{3!=op}0AdRpCEQ60SJK&64ialY{74+Kg!n(c0SqzuDKeRg9 z1z1Xlo9kv5^rPX~r^Y;5sL=ShJ$z?-NeRor^_cuNKD5tM=jjpvaw{Kh1S-8K0mf zvHp;au)h2cyz!OKgK)lS2b!v)cmmul@$>p*(#S#br$vT_>Gc=LH=|0-JKsa4tN2_g zapF5Q(>us?AUIy;fV?s5j*uvu+5JBf2DbY}OGASqpPMmihFo=PNfOKblEQ+kt*ZmwFvx>UPaY zfq53+{A>y7AAkKH-woqHa*AN|lKtiuSKB1>(a}X%sYg~E=`gEYOAgHXOKE<9#jU)9 zu%0H9PIA>dG}K}RB@Eqe6o7#IrGVgCj#hO(W~qu0-U=w;o@iB4|5;zlsvGPt)6fpC z^brBB<7uI9L{s?ewZQ$>xtD}oOz%saA2*~}0b3Gp$hKZuMW=JfXj#qs zyd-Pb*DFwEe^EWpy?&DNAJ-U8AZohSJ^uYY(z$faw-y~#zKwFfew@0`NmV+axB+bm zsWKy2%M5S=mIGfDWsvrrjx?3)zx~q3Svy=e^bs(##3a&#I?;#UqxE8+`dX#UZ#9)1 z%D_)6OzG4gku!O*td?{?S{eOIH1_}^VxIp|X>H=^hkkadZ;OpNZ&bQWuwLybIes|c5n!nTvFRJXaF z-xNcxu0ltKeh3+8>R4x=I@yp%l=cuG~M80>0#BCA9&Mir(QFiomiHUmKzevk*skl<#CLn zXphQmybf9-aVwE;SI#l`?UmOor2VeP%HR`ArPm9pRlPwow;0(OeC4Kg95*c3E*@2U zK1AHwjz@*lzMyD2oT+UG)_@Iw>v{jK*_kpvc?#To)$rrzar4C$L7Jg*7C z_Qm<{MlALoY4&zJv5#K&@HTYsh~Xc{&nTUR#N})%U<^&2f zi?^Yz8=_;bvG#20QY0BFAIbk8Ops?Dmo#4RHgN!R1cOkL)oICeMXG3eG1f*7;aLRe zS>Y}XO>7@qkz=N~oK{{5KeEsdkFtOF;{Osobg8dROM)I~6qY=yPx4oKO#mxl?Y&`k z?Gm8jbS>s)X_);bov+kfu(h`w6MfdM5^BAOI}fcg1OLL|A>gqsKB-=B1 z;kwPjXuRQ%y@WcsO}IUMES?G4J-6AGm7n^AG5D3e+dbs_CLGv>J~yb3Y(rhI1a{`pmr?s?aB9@2J`xfu|9@>J@BZtvAQWF{$2Rj zRwK#jA8PCoL;3&I$MLAtuSkl6hhV-8`sJqzn}zKVh|aiZ--T)Hor(;jX3HHEE$QNA z1q7QU{h;|`9{ReN5O=Hbxvjc|mhf2A2%jD2RXN|I`5h63i(il;+Vae864jZ6@cq!S zfV_h>42D`UZRS&Wk4KjQNIVV1W$cWdK_c)6?O7on&GWS+d%;Xkv?WSED2=%WnhP@( z^{<6+yo-)6IZB(BGAhiP!gQ(s&fI$rS07B|Z$+tDK+((SWr-J!+Fp0H3f2&Idn^_| zCD0>uQxJ^|T5n6ZhCexu53IH9P*7R=aYdGmk&w0rk4!5sN1psKPQ5QtE$$ZtAg8UP z2kt#c$IcXSoHv{5-rqv0gXqVN*re1{i3ek+f!XVjE7uGcs<5 zx%CyVaFNhp2RS(Mum1mG;vd3okLtFh+;i=OyS@T{#gh$+Kh1rlmrcb?DVdPDg1u&u zqGgG0sVNq8S=72nG}sd{ja=;K&kIdKMO7@jV}e#Zt)OV(<7G_*B2=<9>K z=z)jWFLS>0k_0Z6b>k!t1+G5Pg}IW}+M-0pa$H3+s>bfc>VL34Faje@AK>aXf**t9 zyxuJSDZCIqE#gQnnc&>S&y~1=Ws$v0E02)~8to?Gd^#~amATdxHCYcXZHcUwdaQYr z9oMD$8EJR6NMBF3_0o6cyUo*)Z2qbwXY578nHf8k!N!7klb=@g;xRVMx?k$*8iYif zVF#&oDZ|GJ1WskKo$UR0UWW>7T(nz20nig8k>@aCF%5B>&4Dbr9k4atmWC&_0x$Tv#He14;8FCn_R$!N^2Cv+gGx!rr{_v;M1zRC5& zV3$gf=I8EBLdS2@OxIQa%TK^QX!5MjE}(CoD!8UBjYC;+&}Cbr%N#FCd zLoE0VTe{0q#(2QWc+Vv4Fxl@ghd;Gf)EOYU1lP+@#sg8Q8GKuG&{q0SAMfl|lD7=~ zLRtTk>c=InTFmHGU2uRlJMc~0xe}KZ>Ww_f8*=?!THRNRg^1F-<5n9sW2X9#gA7CC zJ0V;@3B4jL2G}m0Heeiu)d+(DCU_~DtrGa~w_h8whZU}x0y47hp4`w6-@hVa zl|UPpDy%2Fu8%q#j2&QP>6kH$V2HR<31=~?AGSlS?{Md0lB`VWW1`QQFIElv!^7^> z{89D`QKoKJ4B^Hx%LAo&R3tfA&Sp;W8CLMCKzqvU^WyMU|?!N(NCCa}|pK0#J zP~1@sm8lK{dj3Rz1mW-tOIrFdC@ny=#Yo=Lg1l$crj-!Fvwu>hFXdf>ftZX)jh0oP5Xb3{g-CB?vH(j6ZM+rUtgchpIOdc8>1M?QiT1<-=}CH>mM(~ zwqZNQBy(SD*So46frR_bExC5gTl+i`8FK*TnpL|7d4bcJ-aMoLR@j|nsLQitQPeD* zO~2Jsx%#?E=T*XmWVl@uI9|}LrLm@C*X4%21Az6po2@T`e57i6ry@;4nws5(T$+mQ zBy}fgM%h{Q%$hUwgbcvYD;FIjeckZ~ZnCr1KN~R!s~jXGu<>6yb>=+klxL!&D9FJxdQDbld{}3%(FT7F{Ok(nrlhwTw z5BPVQnxTs9)!D`#YI12Y;hBznVuM(9$h;#Jt&7zXnl;1J*Y$E7yBr$ajogDeKT$q6 zjZ?0Vng;ug@Dg6Z_eWvJDrj>)hwJ>)Rp)mrXD8Lkgj{hsEw}qJa8t4rl!3(OJNRb~ zA?sr$X|`QGz0}j>M;C6Psza-cnM%LJ)$lZ%0|BDcad^XUuIp0(rU?2j-X?yB3#;K) zVne%4-Gpivq2Wb7A+A)}8YO9*U^y8Qb9;fP;pvYt|EgFj)vxL=Fj6WV1tjS3fgT=a@?loO>hMPlV zuNc$PrhPK8$}xoW$aMzyT%33K7an!Qs)!-jETL4dCLc`))4WNf@P4zbd64J6AmrIy zLtiIDeZ?t$s%O73>e)>!i~RDv$vmDuDp#{{i1+^y_?K8nlfUk<>A)QGXsMEN%jRw|P4te_^T;Six69M+gf{GmL16*sw8@}zhejwyqqN52E{mb7$z2e{|tnaL09vLM2z@lKv!^F=3CZS5E zN>>(KH?5{FJcbk2Nhn`8rjnTR6z44n8UIQsY*1F%mFM(W2c_RNlAU^~cDG4KH$j2q zg|k!-D9|Gr_T3!?Jn-|W$V7qA@MaoUb2OdL+g|HG{2^4m1F+m0pMAr%Uf(_7WInk! zNiwc@+@_)e8Vuj3;wId>5+FAd-V;p(HsW#k!dpuKpgUnLV1Ag3OkZCE7is#;JrhJ5 zn`ysqD#9yAjZv@5%oC0YkWbWK^U)8Y%@#od`9w+qbAWJAMX}L5r{|z&M&*WHoVt8# zkjT=xSMMx+Z`$%Ff6Q=H3f3TfHx1>HVt@$Tgq||*+&X5u2AEMF6KbwF!oEu*pZ}_v zm0-59&^w+>`p}Gn8F}T1!e!kpWV1mI*a4aya&6kK@d6fC5NSWxFwd<{r0R4~QY?at zIN0B%u?z#(S3G}ISeH&-f`M;WOMP#JHWID)hLpd7jqjUqA*^GGHHzokFcRVPLgX!R z?mM|0dy6svCb-jJ9;BYY?)X&y07LK^b+l7ZuowYZqk|UGJFJEM%5Ku>PR*SFWcNB5 zNKw@;v~36{wop=%^0rz(IiR!MXI|%Mf1}(AZ)ky9xz< z1DJsf0iq-yFc|UQSaT^d;^=p39gjMRaC%Su)1Dczx}PM$xZUERvJwm_rpiDq}dhxKh#fWNz2g2 z1N-+AGEaJ2R#^g6(M}H73-}lE|0`Y?8YlqhWhzITKcU(i7leFw30)QxX;+BvpYy+g zHuqqn=GRQ4!q=LZ=U&fJj`Hd*Fv7EmD-XkG2Km+uorx^UZaFf(8gUZkT{nBp5Jx#J zj7L+&DA}+|=EI6Rs60ylq5<}%9f&zl)p9~Sp}i^6D0;;&TouQuwloO~CuSbt4C@^v z0yKKHsCe+W!ScIN^@4nuOSZj&JCoU#!Nn?Xps2F%L?(XmIu=MIxxwQcY@6D=;=JN! zQtsJc=;Xh+dbeqZaD@HfxgqkSusV#os7GB#UC9S(jt*zSU2gr3c4+;}0Q4bMCoj^A z^T=OtT>S&e)XQTkM|pPF)JmuSW)n~PlyQp~v>?zWw)$`i98JOU<6)xndrHHP@4~+- zpu54rY^B{!LksztR}y;Nyvnk{)?_guYR)>DM)86+zX?zLkIHhHSx&zHrl_c>`fkUodY?~GN#D58Hj}P*1Qh;H!sNm4!r|@P z0D8sxY<`Jx(hj9hJ8n?e>3w-F)!*85P)40Hirw{%_nX*1Z122&MgoBduQUH9L^v;aid*?I7|l zNSV4o6jWi5p^JZDd*7|n9YDnIp^Qz6)M(MAQyMY+z!h$?$m$4|+HguyY*LS!}8Y}$mhQe##^FD~A5_qsdq?)mSA-`$a| zMEf4hlltmU@LoPQOSA@1Ecc1-Id*Q#t@FoP+hjk!CYE zeh&5c4A=JIj90gICQIJEPK54*uG-ggFpH>QRS@!L=(b@^3ykm^^=I5)_HvB9$*vQG z9_YHal9c?n9tKIraonI?qL;k>Dp!xv!xNe7|3#;#$ErgK%#Mi(Hn&E(VH$W{&mNfF z1WLY%iHVAQdexuJB)=%<))YL5-@>UHJWNP%Rb={}wSEAB3oe0KUYwV2T3@spSqmdA zJW95smh?1(?6-&iAI;mL5+0IJk$2}c>nlKc^~OfY-HFwtCqis#j9$A9JeGfkggfjf zmMREec)*K+eLSNnNDtt5=Pv9FLMbni9_XnX-O<;`p5{0DK<-Yde#qfJUx4@piqn`K z?NC8@zs6g9ER}flSxXyq$^-pI&zO!JiU^8IQ*xb`IcQQ$>je_h)mfq?zKZD;ZDwP9 zpOZ%AcR0J1SkGUrybwq@9%%C6a8Tq2vuIgPV(##Ou=BXSnX-Fr&6fBZCK=QK}EvMzem_|vYRfa-QyFEkAh zy=xYj<{AN{jVUB(dU3R3* z{J?eR=OM`0Gj31NOGeG^{pN8GBNzW9%u-xx_B9OBEW%GGA1%=-cR=jd1Rc2O5 zsQBpo)5X_K@sJC{mci>4X_LV4$X{(1Q(^ur8h$sQQs`KuVY$K56QnB3C}i3>b$G9aPtv zJ}yC*d)XjDPwNs;}>3+%h!L#s{@=8

    zGrDGzws;w!AJzV@KC%)%bQ=A2R^cs)SEeaR4xR`&DwYx!(svR*Uj{6nc24CAvSjx- zYk4j4*?02VB4uFTaa{e87&@&?Q#=e3Lxiv+qr4IYlB4+KmkU~+plxTdRDI$ke+4jJ zo&rKcINgL=rPxI;H99{N%@L8qyC$$K+MGeb)W+{Y`4_|8K-Er4^}3VnLT9~g{`K^3N1?ou*~zCQOB*T5|{kJ!!{B)Qa?scgFpbIgLh??cn3fyzhi z2zZ+n5~sv!m<(y^>fF({!r(;J^i$XZ0SD)Griy1bx6yuvdukBtK-Z6&FoOQH`SNh& z@w*@-b3`7avRD`upbgZ^`=wtt=z3^4R!P6U$7JVIq25ZjVjCr!so#)wR-dcbZe$l#d$8b=js24#Yq3dL?uFlB$f29b$3rL#ohC% zXi1JDitg}Iz0w7imhRb4AOcaX$#iiK{UCMBdbuP(WGBQ1aOx=y9`(ke!cMaV#1l7< zir$ku)p;fiq@D>EjAof*0Z;|q)>1KpXI;PjqLeN z^Qpk*hG8OGlf`<8kMXvAu@6-Vz*#2bx+?6Iy1NBBzaQx{$-d?1c?P^r^!@fh!w5NM zBqj>92i+N3OF${c`y)1bdCG?|~oUWp6ycB>Ab}o^qaBDHE z?(Sz{U6ARQaYgCh$`54qGSLXRyGO~WL&L%iGs3ZtKFAX|0D0(J^M-V68Zo2@N%Kb= z;IMn8?|IVb{e&z#DlFaSCVeo;RGM#U^-f;-t0^GTyZsjbn@|sz#A{ZBP$>Et#|`r) zR{;=y=Ky>^8=o-sTUDm9|A@@(LqC258mIu(0ZVBx=teUI8KMzp^(X)8isA339iijY zX&((d%i#{cd^t8zjT=R&XS6%kqKWKVD&wILbA?P?Bpwy!(qBB;QSt{@=mje) zsLBDl?d8%n16MdM8K?l84CJ$rk|>FaF8at*K{6j$nn$_7_gB?axWZFq_dwrdn>Nl3 zKJu4S(}S_C=*di6;rolcxeHxVjGkFL;A;syF2t>0D>w7HrfMdx8rIw3&QZ~LBzyTRW-#jhZv)KG*B&}m04b3OkjV7Vh zAZY3(_UQAdb0Ti`y@uS_8XXglHkvIzO&k&4f-guD(JC)7m5{}>&b~7A1h}J!H6yqH0M(gGV)K!2tDLrhEqDASZ_F}3b1g&Lkk90pX-sc9vbjT;J$r=xEJAt0(w&kF zZT9zcL_6LK^=+0_mss}#7z0Y%1}pmnT=6W#@JDXVb`V3v3m9_*f=Fq$nWBSc36QJH z^By}Qzo8y(l0KF%Q`Is>j|SMggwJStZPlH-n&MwU$@nHA*_PtCv0w+KZuGUskK{gF zd=+{8P&9N$NewCI2VKIl#=r7hBg(LcB6Z4hkV@-%zl;%U7y=#~B(VOiGIlNcEF@N) zX}{d4Yz>$>L3H{-95vs0o85KFY^(AHcu02dg}-Ky980N#-+BEvSBZDRX}@w*i)Coo zDmnibLB+leKmEoIj3AVl!x+x%Kfe<5!I42)zr@dQqS+A03SLRfggyNfEm`8O$n(5h4kc{d zw6lH0^w_T4dh>Lj>L&K?BY3RZhEmf;xctpHF-C5Gg*`0MuHkl%6CY<_SKw?hv1=P( zb?@dsM5r$VqMp+XTkLg<5d4yIXc(s+oQ*v?EO!<)lis6>=l|%pn4P_0^3g*yx>V0{ zv`j9x4Ly%-(R8YsOzY;DH`tk2EyjW&(7_=$EZjv;*pjLI)gGiYB@9TW*ZF~pfbLce zH&qwHiO!y$zl+dO3SGUx<#5bCucE{VS-qap9LhT4i6*>A|JcqY^e@f*0QEEjkx=2u z;TQZ0P+m1dMlEoy$DgV>(Kcdt!oI+X-%P4;bz$yIM_oqDEav$qNR^+Sq4ede)Wvak}39Dojc_@(&!6P8#3+fP`CN<5*NmSLs}gEgB5v;~3alWtWY-=%6b-HYMOOjKXs-*pd)B-&T87B6aa zF|&&)8pyDZCntLmV(iZX^V@Hf;r`^9IYis<*q}-6K5Hop5QU(x)^L#Xy`ueuYlZn% zxiu;0B=%*-sCTZ;T%yA|?D+!Gyw$n6madhebh#S2amo1`dFYF~w>iLUPX+8lEw#fWU5| zV6mpjkGJk`buk5u12t)m{HU2)(~Yn?{5PMo*c$M z**if^^Q1^eq1$G|byF$TKE|jIt~&a4bv^0pL}Kp3Q-+iea_3F$>WQi98scXa+22L= z&lLS(SDCkpG&%c%U3NJ!`x@W1SQSg~_aZDx0vEIHczyv5nGZ%H7V^s0)8JYe{XxSl zma7}-SsHRn|H*;D0W(n_rMA`pyk~F|I0&Q9pthMX~zj1=YVJFQKVtjZsG| zkU!Ej3&O-v2I`Lpq3o?9-yVkRI?|HS$Dx{u1)Av}B`#k;^ro~x<-Jzy3{7s(uKN#7 z@vr_ya;n5lZwT3)5ztG~=r8*wp|lTL=OrMr|AmS>gOr~OeSBn$4ZF1ME7A)nOO&|w6ly}s;KV~*^+)?C&P@KtU7<1 zaB#Z%>5Rf@*pA<|iKgLU-`RDS#;I9mOnvcL##wbR%XdJIQ(kguYj-t0oL;@JkWR?T&pPuIbT*a=xXY>1vE{^LZ!E9*#QI>*ZC9hg+}PQfhX`qa;RSmD2}hmj49%R zT=T9dum<+lrS`oG6@GA zq)P>FJgRSwnSQ8NWc)+=0G&Jnl7!s(@nO)Nab67Fgj+)1`cToz6KzLM&M^|$9P|jT zx#MIyus6cpUAhZSSV5fgHdgI}lyMbX?}NW(5cXR^efb7hcBrDc48@_6ON!D`Md~b$ zsE@BZuGwxGx(=E%h$}p3sx%og79?_nJdnk=GCA-YI*kK@Up`OS$EtfE7KYDlP6zAqE)PuiRds0k8jXu z3tky&saB0xR|?gML~MCD&|z9VGB$tU_dg9X3iz2G{1dgL6>T%Zc7o*G;4Rvpw)&m= z*)4oGOh7(G{e8QfbnJ?E^JuZcG`r*blT~Iv)jhu8h7(Il7f=^xC_iKmSg(my4_VcR zjNc7MKZ~Qab6aUGhWlO=Qa+gcYMrMGmgNlDcKg!F@m~z%hLVDgrV+E=Kn8|K47Hwha z%17Q?FOLw2o}J}i;yNo0n_Q3-yKKgou*xY}g4W43K4~0I&t{X}o2fCSlG)jF*G_mWS zU|u;+UbuvKABUIkHeI`Bg8b}0CwU>#wB)aCJdUIJ$bZW(w4mDfUI4zcLJ}3E`Jm%hune{r<%43^KP62bM(h zs(AqTV|xCb`CIfgJyY&gr83#=zgWhF&rO%~G}E|UknLwf?`_(tG0k9XVWw%tLG0Z} zH0*$WIXnk4^pfZOiEFsTZWZK_CLN`m+%z*>AZiVhWu)ZxRpNT1EnL5;tr42r3&QQ? zyXA)E>~cS4a=N?p^#pq*?>ld~Qpq6iFt>OPSi5(^t1l8}U(%yS_Ip5;L9?3qsR06k zCe=OhHqpg(pTgvpTreNh(D|~x;7j(ax?5?^{H4H)8dyj@fQH0tS5LwsIZ}V!dAT~4 zGS6Rs$GL9ZeP|hrI`!aw!gV+3wOm?G+rkh1th9J4r%s|^x#ISM51 zxWa@U^TfQQ&?uU-k)pdeXeMlY{oP|ACv36g4f8;@QMK<8PVk+Uqh#rZL2(ft$V{T> zV|(SYF2#LPN|L@h+@(rFwY`ofs%$YLsdIozrNh-9MofR78moD4I@~FQo5KeJEuy1K z0GrRD8igqB!hy|J*l@0!nM{e=Bml0W7qMGS@gd|3Et9V}?9W7u`Bg2r+2?@@XmXa; zyjWmbLMS&zrCD-7%>T0h`9PMsrz+i9l$h-)xvsM*F&PC`kJasLPm86B9cY*KpNV0@ zvtM@@#}<(KiiNlKUw9As=@se2I5Q%c7AI;7Lk(Pkd(7WXwZ|-i@u+Fd=t@4yEv1%M+ z-*?dmo3vlVB2AYs6-0hgv?#(})Nq%@bmR|nFXoO4!zY?*&0>72#?cZ!zTZuA(bPMT zTe*>NZ>nLz8u3cXHM8ZRqL%&mKs(>{0XW$zzK;oOqGhwjd5hm_8fk$obUFbzPBMOo z?D@FFNCN#KwaNk*C-2e910>4p^bS}8&G!SVk8P3^@~7Z6V(Ek`lx+T#VK!E|CxWZF znL_lNpF-Y2%)UqNwObZl_?#a=SsyoE@Qi5^BqKDFj-FCFbweg>Y07QV3@LHB0_;v` zbwMU8Bj_tO-X-lalSbtCJ;4qCZFi53p1G|ZS~K$^@lcxy@eusSAEOnD)|mx8t$VIA zcBX60zxwO#Xbx?f1tYhxrGEMxL3|4JgPDTzCsG`#<_vU3>mN-u+zC(4BZiI;e+J>I zgIRj5n|K&kG1e-kM;3v=l-NPpXr5IWk^Ghz+(ZAMzesF-{K{}=dhl$~?tgHgeohTY z#vJ0_MtQu~RFdq}%5KLoTZ=A+zIu#GkLo&*Eq+8^JNZ)JM6x6=geIblt5PGQ`%mq@ zg$5P+>VYHHVD#2Iak~aJa>HkmW+!x*K)q^2-2*Qw)8KM62*N(bYPJ>-0eqUX*cSmW zYwvliR7zsXHcI^V)o4hw=G_!D)mxhqF8DnMCuShXhj|nrI6Fx4auEdyFc{%zsf&>h z$>KtEiEqH9gD?ZHWGH8OJ04XAk$X=Bm$O;q;b{ng-qf z=P6XBmMY4P%A=6%+92fGEK+bDd#_}AY3onMF{Wx#!I*`Ua&ca zqutEP%*iFWx&E$PoGVaKLa@&unxh3tWEVwiJSDzItAW1O zr@_Q+-o7G()&*!;?+Yn~HsS5iZ0Udei~Y{X=U zQ?!#LR@#t;;EH`5dM2&>3CsVTT6mf&al(jah4if=$Lcv<7XkFY-BG*hN zGlOc;>2lopGeU{h(YrMwt{&rr{=ha8=RMW;4Vi6}Y=e0SfmMMkK0P7vIHZN+mStbH zs#&1Tv&a#<7ddb_LZdC@-NL>x55J)BVu#pq48o&G+g0fFDMgsVR7{0}->?CF>S3;V zz(H*@D1zl)mM@LphFmm>UGhqk!VR+g(f$F)e$b0o%O*6C7jDGiue)-;gpdn7z?|(7 z$P(yol&M*q&Z7ekj4dJAgY@pH@XJK{Zd-9!D&?gY>q`hUzm*KQb9 zU7j3A|8(hBJB#a;2i&vY4}blt4lFl6z}7a6;(W)|F^^SkS%E>djfd{5E`{|^-Xxwp zGG=M_4@MB`=1^tZbhHE}efg*nkg|?fo55K(O9%(-an)Q)iqyV@;*&Op1c>dZvGc@LzJ8UzcXs?ZUEf^KK zb2KLxM-E94i@>U;dpZp*=#9|#VNif3`aTCcNDQ^WqsC_9&L_;Oo*CKa^ohUQNijj7 z#@Bs+u!7x<;fnaZK{;O1*;*xU%k_*5`Y>)baCeX5r4~rh<$hkydiRxpgZZ zH5Z9l?NFMlRe*ua%dN@DxuYtANEMA}zJXoR2;LO!hU|2YdCIIc3hNH2dPS7@H%`l= z35ygK4l&&9Z7eC9<~h?NV?DI%CkxFJ5Mw>5{pn{Mo;Fp`THc-v;_ScUkuhU`9hrE zYA3SwZ?X%P&{}Ce(!GTTd2W+KIjLQLw|ptTKAf`)fbuD$`R#x*mwDg z-G;|_$^Vc_sAYK6L#k!-3M_^?B^>dHjbyz_R(`slRM1x4l)4o7iGuWJKRnqW)Q%a7`qRJHm(w5C~OMPR~t zF7=j;G_Us}*M2j)ID35Tm!-p>ShXw0=Gjh!whtiXxLq)3jlgN$2nt$5oVggvt;oPp{L7!m+qR<~y%V?Qg#GRg>>zTX%&p#e%Ed z=8zsyeQbov^-Dubm+B92x*^JmNPVJPtbsqqJ|}T*^%VW`R(15g!qs8lUdi>IGitQ- zmNeY?y=BRe!Ev&z3mIxxuuh>A7CjYORO3t~XRFc3Eo9i)*yyEv8G?GUq(RCK_;L zE^Z7`+6Sq>%&2;4q&EDNMN(4kmYJde*p9WDk+h_DfRHT7Ms2p$Laiy24Tm3XFu460J22zE!R;e9Y@{Y!BzJp^ zun!24xf*Q>M}M@<@RsBf>ZG|8gapjfx6Gl$dr>D(a3oLej1!|@`p3`Bqjv`q&m<=* z+iswDvXM)hu!${(z1}fH!el*Z;gBe7P%}0IhrV7RPburk^KwZ(Yxz<@o{hY=N+;B# z)Rkw*FP8nZt;VN5TqPU(Xq&ZdYIQf*vS%9DfXP_ZP97Pf_Lk)6C02FEC`U)(IX>9K zU~K`8P1S^ihWGJnFIH2kleKkwKws$b@n5GXVj7j zLp0>l#MX=AHGu@H5W}EDyt~l|NO2uD%6=j{R@pJd(^rv0y6+ve8;UW>>+Qq`{`iVz zwJ=Q9NyCVTF5}KWhlSvNklz-GS_vAx1=7{~%%4prpHg*-4A;u#W)tcwVKdpG3CPh1 z@r2QK!CQ3CdTE%lIU-r3;C?bwkASau>|2$kSic6%0tSCU*q5Er%s>O)3njE_yzSD%w#SC z;wX@atVgeC5EeZ8fVS>r08-GvmHaI+P+-qd#M-AS&*XEbg2<{{YJY%+{nrG&=(z)J zp4KFfv1K?&aoi;(u@_c-up-D3vG=dD!Q`L+V2yxM_#i(i4s$J zht`q{FoUi-7o2Y^RTbraqK>fVu?;OlLO46!tl}Ps#DWku`sJFk=y23OZ@Jo5w^z`7 zw_)~|euW*yY)3gbi1?~dQ_$YX5yVZ9S)0Tj+>#sGT~w=Y;NOJocL=`iCmo&esME3% zBJY???lmfW+zLUYw`{Y4aTlV4U*f0D&?+2&L6Wt56QLz{aP0`g;v(qHT*mn+fu9cB z>Uy@SiR_ANTt4@J`7=G?F3XcC&~^}9I%nX{J-Y=rI&8&0%nWUER0FdSYvlNFnWov}fVTtwHresbXgL$(3& zf%MgHSCy{P5ANGfSo}k|=^pSEq%(_2(k{iH5utG8zuPbqHQi#KWJ2FYZ+~uhX$GD= zwBFeG*Q(n>Pdk9!8R3Pa&{CXnj>O>yFp4M3((!^SFZDr#!a_V8HGMKx#4`1fwh)dm z*S=ExMX^{|q=qG&$~=1A0@m!^>a0enor##cyZ49M>YiwJ=hEMr#Y}62`Xa-A;XQr) zon|CY(y=^ngm6GxJt?vXNuqLdxMB7#LJ}Cs;Oc0ar=Jn0+Tzp)HQ2c6W;k?tV#lrC9uAMJ$pWbA!srxCVwxu`%6xVSunx#Wv`_v zSA%2UKhQLGC!KO|W4dO~=cO9kr9im!O!-@vqBTmC7YOe>%opg+` zTTOaEQ6(98)r%UTFb85*$CPvjs)H4dttkN6tVd4${(3VL&#wyBhh#Kl96*8@9{|cI z_)qig7A~;sLS&ao*EvFg8Q2$`SAijW7bRpRxSUoPP4_N{j`^E%#fok9y$u&#QeaI6 zjwXP3lg&-`huehw9&ialHSJSflDU&>Ms7p@hUF{F>k29?&khTR2i(Oczp}etVPfdj z3DX3pb{%8$6tMh`{=pN3i#8IyFT^7rj>?v`0~2d&vJ2{|S3co)AE_8Z-b(7$V|*{J z#U1RAi(vl(l(NkOwl)A+6GMIX1~+tSp_SVPc(onmUO?U9;na7($NZ1u3ptwQw#k%5 zlnrE1Zk$_WSQ_Cj3nNZ()fUf|nGf+QoSbjlxb7RLGC|vmEFNJT`#*}#J+8(6|Krzo z?Nsg1xz=gRDp5LYNm6#L+zDY4im*}{cbM)Zq+Q!Op%`}#Azcx2?oNDjxY;U-BoRy2n}}&I`hwcDeLjYMxt51MU9ETlDt_W8iiL z^L&KUNsVf*mb!bC@@a@1L&Z+^hT)3TK$~=Qmz4_@+e*7B`zfrNPI7H)B+RQQR;N9e zi=AN);~qk$Jcw7fzQAK#(d`$9Osa!fk!^kQ8guai<9mNWql2Mx0hao@&sTl&Imj1c z8?igqa+8+Nvq?`U^MS>_VP?=EvVN8Fz+AkulW~jc82Fue?Kv~$gS;o^v%H!E6s+;i zhp=u&(1p>$(tJY?v?)U4N{C-W+bK-baoP3ULR-6HeRjTwM2}ddY~k6wm>3O&@-sOF zEi)oRA%ltp{=^811>Gh2<%yPjN6q=NsqonoTtzb!NbO<*hhPsoMf^d?11QD(aGoIh z_~2%PIGn)0dzCZxeN@s8q^hyEs9yiL49nHWxe%=&}`s>ZVrA3Zv( zIi06^;E%asZ{BJa{b}Hv{NWsfWd{+SRAFMZuOL09nopE{CCuMXe9z95IPt13P~3t> z7>CR9vnfZ-HP2i;zA5JClCQin2_imEq)3Y(7Xw_d-r&$hF;pONe%Mh)oD~$ zXPP2^E#NB}hyCHIxnldnz1rEzJ3vd7H@pTcbFfaP0-# z1g}nySEwfYw%}}Td9?I86?~@1X8r$bSWCn=*hiPR4+sZS+Ci&qGii-H;u9}Q`Uq{Z zsVafz4H)=^R&JifhOO3hg)TW4>2S(t=jyM}D`Ul8LNG*eDn?^Y5Pq12M52Nbkl5+t z2XGJj(~XlOxVub(aivIx+gW=tq!bXUwo@`_+3t+YxN^c9F42yNbI-WAv;%;gSj-2tL6Zd>uZ?_6F+( z;`z>TFI6+EDqYv;qd)l@yhrBiZ&h$K+cy-e?^@Mc(bwJ_RZTjPjM|bAGkrQ2hR2;y zMeJlJKEkdKa1t3F#hRJnkvE~`4+zDFZ{yfTXwqH)@0_hJ;P5iLXo(BQR83UhL);Ve z81>!>(Gv@TytHKVkZx7CB%#PE5%@o%mZNq$dHg)mNk`c|%Z@)%(U#EwR_@rn%}Jb`?B8tUqh>tihDtp%Vr&#E6g zYAlY;#3S2Um!C_!5S zYA#1OEE-jHoE&fnsbwvFPT-HSYSbyCj9HI;_2>AeNNa(|H<3k#3|K}i-)vN-Y}6OA zyN-E8MHf1_ljt(f0vPY_&ky$UNGs>890V1uuVaKCGum-5a5)+;_sd z7o^o&CDeXll{>>cJlY0T5DswIm7?zzy~40;NqN|d^Ni!a3WseHY3QFTqG3Yt1JZz9 zRR^J+0?3#yVgF-fP4URog6%))^!TXgX4=xP0S!EM@ZUJ6-BFRU9b=gSmA_vqZ&JU? zA_{1VTxH(?anEVx+W+M0L1OAey(p5d?)f7#U310&it1|$6=v2m@k#~V={5D?3zfYk z8bP(SFeqk4#V1Bwg^+nAc{2&%`BCO~^~epi?{Rsy0dX$SA3~o!qE~mD>2BfT-+Z9p z@YBr8^2zt^%f*dqtDLhw^@jWdyka^w?&pSpjfkrS`yh1iI_TM9 z94$Agt}9y%wMFEPC&LzVZ)kWs(efq6@-lr0^|X_0>mX~Azx(%*Z$GAiyTZcy$~6uk z735CnEkpnIx~cuaIdgf4(-$m@kDLe_*E00hD~v7E^e%dAqBPO`sSU&;p}b$h>`eQx zntPDX1xL-bkHVmLq5)hOO=et$yJBm?Yu-UF23*_AN}v2hsFS$BzPJG8Gpo`GYtoc0 zt^r700OABX8qSz!?;T@FhG?Nu`?}lKH$OT!&cm2*Hye9*>SO4$-3)hKc=c|?DgGe% zC76eJzE!{lzSs?a?J6&z4jc%mHl;+a82d?Wt0YXec(Wbu_E~I%TIB|)ZHeU4K1PqF zdaM4~HjFS||0X6o0Xn-HSIwR;9*uZKF-TMLo-fDh%*wZ~%3E;+&Uhe<9)g`M3v5@b z6|S&h?$cEB4DE0x_H8J{BQeHkdG@guc7I%!{)CmGj zcfUM()_q-35vMw&$%Lx|$Y+V&YxIQG0Jbu&K2g#A64z%BvDQdb0>abj@ooj(n_m>W zzPQ9?Df=1OT&txAB7TI`EhTJD)NZo!wL~kSw!5T1KcZ=q*w{LI@f#{58wC+j{R&UG zsvg`t5|Pja;GZ`SuzM?(5htuh7OR-6;EJVmhR~QkRp%$Y2_~Jp?u?v<|1|(Rc$j#I zkr7b8V~Evpme6`jHH2mHJ^%XD(OsDRIjJ_yNePYD4KAQW*_M>2Zor>m<_&cUT@t zs$EhU+hWdngG@yU3TQ)ob|ZqTZ;{JhnmTev+e2eHA+(D!H-l@Q;YQ%qcaq*jTI`lZ zd!Sv~%SUP`enGyPm(;pA=X&{yrE|*^`6YJQ?f$YW#G1<^zl1$8%7cc`9!~Zm%c}Ie zIzN-@)i!nL7hyajq|X%jKLE#xQ~YSf<&yuDRM1pU^`A$&W|v|4Q7*M1bVWqJa*e%> z7goF_tpBEBRjNw=!cJNBsKc2n{0b^o-V)HD-y@gND<<4xmfldTLm}e>q6f($Fe>^k zdPQvF&2(xq0~7xx(`xkUMK*TFyz239&OQZ5u-S$1Ug&Uo&B^~sO!90Kd;{boL*RkG zxU*=<<67=tQV8VOx$y{L#35{$el5OC#m?C5mVJumxZ}Km%`jMfO4oRid%(OPR)muku1yQn%$(%j%+YwVb&CVi@(Nt5 zJw{lYNG-1Fnu5%TLr7yFh^M(`>~!?Fj9m9cCbwX_Ej=co(~64mz19|W$-~qMIxcxs zE}Q8PWKDK*Pc@NWZDlN_d}p=wK&#Uz)fL?4SBJEx{|O9~)kFmQsLU(h%DHPk2;)5A zn^sgis%ND5L!ReCF*7wUILeV-`472`QBsQ2^+9H-qlH;++Fo|>!iOZr7cd^Fs!Wah z1aQbLw)^IojRENMQ{eDtB4+ZPIln;M`4~LF;OW2Qgq*`A7NnUwE5E-MubO_8C|24Woraj!qj4 z4X$omCj zA6t7bDNfJy#W}Kg<)vccZ;B}pU3>~XI_TW-j&z+7jprX&0HBaSpZ2qKpVKM1Z)rRJ zcID+C^cqLJ720IOgMIfar2002EPE7QzKe9&mAL50ZEZW3x)q7T(?%acpG&nss(Jd8 zRV&D6*OyuyJuBKD%Jbd8*9bhiO5fk6*H{w%usa_LfsLgEnsOB^{*$Tu2Hba$O5GeQ z`z3{n_qL^v9JTj8UsfJ8=fm@J$k)in3vJ??6)oh+S2cEiV#iD)%X_0~41T?>0o9$5 zo0JaB$kkKazv7G=|Jz5fe-0Aus%WgJ;QU)?_Zs4RVrIj5@7?&Q@>uCGC+PaH%{~Xs zX(*`w4WqH5;(7}dR_ZPkHU28?FcQ4Cj8Q55p!VucT zHP{dwn`Kh@dcx0A>2yPPH21eMZK`NUUH09-PQ>a}E2(z?KJ|%}j*5MTb46F{&8&Fy!b3^f-P*=muP(z&T6v2xCA2^rz@*!*!ieY8mC(GbCJ7N2|3?7N+Pva*Wf( z;;?|x)#w!Oq;l^X$NH<31o}}s(#pUF4K(|kymH;a+gRfUbgfCjk`A+0JRdp2uBS4d zsz)vE3)I_|+zvz^gk>4p-r$DXUz|+HzJA8v`JC);egR*gW$&wk znh%q8IpVT=j~;+I`*5eY7*>sNi%PRdeKHh9SlIG-7_dQ zMBl#;Jz-2@iF)Cji4&wN`2z36GVQ?g4L#wv`qI_bom0dn|DZ?gq|^zz>9Vc)b&DkA z$yGzvhYQZ{Ri9BJ;88`jg4(Qm@Krv-;cIQvdGa<|i>s61;DR0a zQFv2L%C`tHbe3noSiU315Mgfp)$oW^1lWaFsD5`uK5odX)o8o++B?X3s_)zr+S6+IoSm`lt&ncWAmuy|)RYiHPr#XKUdp%7nlRLDI&FPp zK*TNP>TXwGZX$lVpII@A!x4|5st2llOKNm4Uppy8aNV zokZ(eA6*U~laXh7^I%>MWL-LuyNN9IbbE0xMtzl0zu-3~_J7*eaKazpdRuOCh@B-s z=O3Z$FGqfl!JGFU(g=!f175?HeT1&7a%_^X@v4h71C9gVsb*=p;l4X1`qf8=%!&y; z9@$>OdVWsyG8$Me8O%$p+8tDv7g$GW8TAN_<8~ zdg%-@EIaaDQ_Lq)5)>bhv?Xk|+xH!OU9=25`3jEaWx~cSvkb0}ad!o4_hKx`paiU% z`d^%OAkXAsw7lmA5cyj^OU7WX3l41Hd)m|+A&0ZLJ9xp`k?ST8a!&155Zb2>v)E)4 z>$_7ni57Q2G;@`N8W@25nHE(Y8WmrFv({9Dg4%eTl3v;1w7OUy(fLu{v-c53f_+nR zp~!r;0N0KyRJoYqk&J?#^tO9LVnGI@2dxw(y()QWb| z1*xPaoFc9dYuK6%2E#JXcp!Ktt6!v&{&Q0oSa@g^5l($>@#e{Bn!PNFkTuQ}xho@p z@vM<%1y5R*mr1Mqsx0-V8$zJV3NzZ)-l^3h>hvHR+ijRewQeHiwAk?PTFp(*(UQG{ zcg1r0`~>&>sW9we(!QP|JzA5YIc5rK;*6hz>vLUuH<8tN$B-m zR;9sZ*ohjwrZBh#nM?)EJ<2gw`N_1rO#y6>lyZI`a&<4LkSsBcJY-&cJD9zNjcm3v z4Y95*h3ZyY2KhjrveABW_Iw}x4UBgQCpI$biYYhidW2P|;*=wJcO|Tp(IcE8bv8IE zKS{ROeafhLU97Jqly1S52kr(&JmJ;36W#W&R@yHFC&zB9!@fzg9D|pF6!Pccaqk#y z_2^;^jyKMHt+f+^l$hrX_4?rY7NF3qH$ShWjC>O|v1$t7pibp8CAGwndy9CZlOwI( zVOHDUDLhY7l+Ka-PxS@cEA_VuQaI39-YM%yS=Km9|dyEFXKB#mR^YgU=Hs|J5_y7Jt0)t~3f$OEh^ z^{Nn(%Uq4;LR^kE|C#*{SQD(ntq7F0=OTZlDIO+~s3E?KMTN5i#_jWb;cHp3WAERD ztk@sI8sJ~YJeT2^gGu$??CJM0#&lQbwoPNyxn#VP92l}l^O+PC-Jd5m#5K|WEDc2Z zp?c;RYw1yo-b`ixTcLC-bcZaBVm;LjHyhzT)+ro2`EMUxt+cOCX9Wc`kY0Dfv*BWF zx2J56x3o1}@FJKJe;DoJNdIMKFzO?Ja$;A)1GVNmA`fg+L|8seg1>yEu3QAM)lkV- z)nyRX*Jw*{@L;P$Wv9!mmhM+Aq=qoi@!z=jE!q~4PfziZrh>Lau+u!wjC^WCr`PnE z`;h_FgJ@_2jZc-7L4!H2h&o@KFDSM4z>FV2#N2Mu;Wp`GEvDI z!;XKj-5%A&)Q2g`gW;-G%)0fv*hl?B(2@v!0txHP1(dA9Pt=~SUO?Aom|N=!^J{L5 zA%agahJb>ua54KXX@0h5t3&p%hmLSwbN%DU{AieUG+lFdtZ-4dfluAnz~(|8pxEO~ zUeKG$cUaN|kOey6$_t5e)R-t&thMU|I?HJQ7)@K_s%mgcr+HXAx-V=nWKvdygA$3_ z2S zKKs!mv(QfGx=>PVzv6P3ERV#O3_5Jx9M+{DN0ALvH-O%Qhv}Ci9()JadEzxVr^mkf zBI)&z4m$H5SDY~K$=3Jx;|Ahx!t;zIC75fZIjYvD&`DZV@Dz{hc;iH(EU-aGKO^U+ zdRK>`U2~(PZz%h_v5}7=*C6{W-I*=}JJ}G!@jh=-ouKznDSE_WhQCeK>3dMWK*}X% zQpab%ohl<)BszfU?uy>g@XJKqREwIZ{)<+VHq+dn1?nnl*6fuVem#`S#(o|oe2SGN zDh^ggL|BFCES?Zvy1~m&0BeQL9eUG*W;oQsH4YiJOOO(63#g6c$(@DhgToc%Q z`wg-tggR=@5rADL3g4NyJ_uHVeM|Cx^2JXMU@tCtp)fep-M zPlV^NCwm6F>(;+1P`-aPbCBUS$HZDQ4Shmv`lwlz=$K1{)xG{z;pXidm{YZ!eJgIE zUkJxev1Y@VsP?w{(@$X?096ZQ_nVE*IsXZHA>gj{`ylF-hkU$;uAc}!4EnQ-jW*k= zSKiu=-`6nPiSV&SuxG5agwD6z7tO}(h#nk;bB)nn4`j5HBtNUl1$QB4fNX%&OGX5t zyp$-E;M8vjw%6^|gP8O#v%|+k`(fV#i5{Rk zq~sJ1{y%%J(kByRX`*s?BZC*#VQOp{W4TU%rtTo{k6Wy-3Ji#7w6=bXR|ZEWQ_|V6 zps7-wodle3SCU>RD5I2ATWMu~VWi88c4!f#VVg-lK(1`ovR}0J;d>8$DipiMe6s7D zbBq%NRkg#Q(b={>g0N&mj6R}BVHRw%=(Pn08Gp6bMAlBES#hi+P;VL6HJVxZB*Mp(JLR z$1-oNDj@``nu#612c2(jR+g#CIypgP)jRsW26q)v&7||-mM~+lrbbO6!^h(khag4{ z=xGJUq~i_qT*!9@gvRQL=as{)Mw|NHk1XjaO3-I0-BP)Sx_XTHHBU9lSo>4?dpWw$ z$|l>(D)AE0fucMxdklK`PT?~}w_qH$+eatB!nItd%m7H|qMz);O*NFos1png)}>qB zwK;;h37M=8x=`pH&H5B8+)p$_*h{O%@J$Y%rXjrJ1iuRsT63ML~G20E}Nez zW?S{TS$Wfo_=Mz%VF3Tr<*ZZKaTnp0mv`XWNrhkpouL=4z_f&U#?D!mlMSDK3A^=wCFPiPrV#7l_Tw8+3ri}=t zZy7=9s9PRqcQcKRkTw)TlblDXWv=9Iv3PKFh+6*7D2sii;LDM`KS=f8n_5VF%=95Z zxg?wWwVPBkTSNc={Iatf{<>gzK%po<0^h_f-oq~t>xwbKJtk!egi7LOBPm_t3T(X$vE5n*;XQE3(Fajq^HpW`JBM^=1U^~9R4v5lWkmVAJlw@`F;Fn2`p zSGYzpcpv(+BjRjM(Kbh1#bhQY8Eg%OnZFPdq0qtOUnRBB)adkGbDb6UpJEUJJ;hd{ z9n`uO&O2LKLEiipw8O}%bE0G_%%ssAX@E3pgj2POHXYcB-wDPF@4^9&m8UQABUTR~ z&BG?`)*~8(FmE16xzp+cSus`Eb&I$?iccH#zTrJU5Ko{UUNQ(z+=hN7KEtuBFK<_> zi-~5b(cz;XK~#A8U2NB|_9W1yd}y&-k*}LcJ4Dnl10Npa@?HAc;j2kYGy zu2dfjt}ab7NEGKUQ@?x$g7;Z{9la!6=jJSnQ96yOJ!`NFboDUH)*E|QYIpNEtv-xV z_mP=AIcMmbP=EiVKFhqPAyW_8R2@_J&P_?mA7o!WZ+rB&_Hw@7ZY3s)ld&Jt*8K_H z*rnb!(Xh@;X2a}QoJ9Pu%<#zjMWOm8Vez9uPT1dsb0@SV8BtPa%jdyFPrysNwF*7u zAnrgT%=kx|Xk}xoB%mA#rwemY${)xk3m!~$o)&T$AQY0<)w>0k#5@PSF z{=fqf%5vnayI`Su`-Xsf0m^Qzs3>kF^2t%w+YGUN23a7!&>9^Ws5r<{HU~#Zr$;;x z7;^a`dXtDULo-B;^+l(BuF0S;4NyEF8Li_f(bc1cJ5*z4y^!J+m#%iQwYB5^c3*0( zZinieO5pmNN7!M5KMrz&+)2UPb&WpKD$9w$Qh&FgR{2+5>`Mfw6qsyM;30< zAiozWsaL>7!m!^H$Nrl(MqpH-?MrIGY!{hazq zzxNQbg6V=D3151%miSQBcZ2j{uAci?uG?v=U(6F98*J4ucgO0VB^YY|F0*P|Px@`+ zs7+HYBvuy>vtG}C0A`;Zt0dchv2J!U4}Wt%NsuzkL5%wFHS!P9x# zkh`x-QjY+s<<*EGSSWUtCK5Zg60iKL=xkz6Jdf@jaP670!tk7`cb`c&WKFezsnR{( zaLNPX(__%4_A*2@35i5DP2%ZuqKqko%u66~{Kb6Vdoa#u;x(wSq6m&x(Mr+*ZK@ViyU zWC!Ulr?~e7i$Ad~$MIW&oOfL?HE2ACRqsdkFV8>r2z*vo5Na6`2F(mW4(B6&Hq}2U z4}Ec5AP5K?R~yx%>dh=myI#@)Xrqfw*~ zn&^yG&=Z2&eKbWPi%J59nOts3;ER2UFWP3x8Vd;4Y`R_t9kK9fVzV*GdK>rcXyHp1 zGb3K$@{T1_k{1UQ8?2rAk>>41785%)%`efdCsAG$H;_ru75$#Cer$-{rRen0k9{k{ z$Tr@4Yl$;I$JldjXP}}A!tCnTAE3$VIe5t!FqK^}Mq0KZ$ zZUN$SK^*Mef~~PmVfK_xHbzfLe`&3+kZX?^-Fv@Ik)_!tT8^n+n6K5N9d}7{?|~vu zm$u5`Ry5iZbe20kk=!XZ6ildgZw66H5+8|5#sSijnS(Y^a}xOFA~jIeJO-Xhu~b zt`DOeXIm9&0uY}W6yP>!e^GdS2VtLq?P%hqO$X>{Gx2cYev+Yyl)tSn?`W@QN!IyDlUQ@CJeUz>`yw2d0XNv6iY`79*c=SwY%(#cEqeodg zSd^%u+lF4s(PNGv8{G>n{W`i@B0<*9R6GewKS{}kXitj>=kkLyaM2TU?;KGtbp7gg z;rYF!AJ61Hz9iT~&3*O@_%nKtwB2Z@**t;%u|!|*DXrjw9~P0?R}NToy}{L)jl{%- zv~x)s)nwzQ{gzv5Ebz#i@YFhs>kaUy&9a?oc~6}&n+0XaNIaL9p)LRrVpr%^=`l0@ zVT(|R7Pmt+Jf$xN^Ev9szBLAyf3-LtgDad?s)va#yRiaR$TdY6YgUOmyj$;?UR+a0 z*kM=XMv=~B@pm!TLg-y1;$wS=d%?!&JD*eCA0_TOV>Fm zvC9^Yl^ZRN;}O$>=*8*~cu{N3-%CYvWnS?KR7Q%CYkB@ARQ96+oIWaR-=G2I!@`p( z;?o@4J;>aeH z7S%Ob9oTmsOPH@qe>A@*H(00jrfaqjtJB8SUw}(I(xMkoj&Vr)8;P2xp-)ubk%)KX z*uns$-vRc}m>PeCdO%3GTl#Kj@#2Q71EZ?l6y#@sGLmh37XW7-EEfmTvnV0o1e)f* zqNGR2i*uFbbmr0-Y!D-PBMybnRYe=(sa;=Hj zJ;B(9h<~CKcP%-ziVjVs9Zf^8eP|WxYR0FyhShZpQzwD$J`7Mi;Fe2j+efrFONqzM zLkBBk3<{y_RlXTtL@v*Sf4xOEPZJ16DgXN)D4aG$Tz!gCC0bXa!HFX|{SN%O<(GcY-*uTZPOAO66-e|0u` zZo0kH6MaH$*rcc-xGD49v+j}HD~bWpao-fK2G zEKU2XM!{UVitu}gq#$cog0fsJXw)I@zT&Hf%senk$_l-$pj=aITly0H(zu~TvnT); z@^h%|_{WjW6njIuLFi{_39yk~dA3p~;fa}<_vQg@s<-zy;y|EijQNrRzeC&ZflG1w%!%LF?rZj19o_^!+vMuo_XrnL z4q^ELFx)q90Y$oHket1Ch{~KUYf`F+aR_njUO%UO9sGoQgY8~o!u1H*F31qWyvTLb z+M~PDqjc3?ydWFV0Xm->N|J1jG`A{pl4>=ylFb2(3r!j~5S5LuiLi;q8Z71>3I|N? zar$IHV-9ES%&wlQE^w>shsoA;mvzuA73kFxQgq(L`ilWY zvhI^hbI>*FkdQ=^YOX3X83050U4AsgE?bpvs_6V=?yEBeko=+V()Y@;jX7p^uEubjwLTH96qNAe5dcCupHXnfLVF866c~aWOIP% zS8f3Eo@BjP6Xhi333_VNutA|DZ53(vai#NN4Hqr}ez)DWirta_Uu1GNOjaMspHjas z8O@s%vPcm|=5tDo?&DXYjaIQS0A!jj8fTFvY#Ot)!z+1@Fy=T5i>joer+(0q`kJYK z*1Sd{xtB9FBZ!C>huoO@g00=p>^i;~v{u&Sk;(-U(lu8P5MaEma&D)qAI~-JDAxRh zzRuvI;I;Z0t0C{XOeh(#@XIXI{6|A``km{2cjuR>I;qmz45^U7OXiS#A1a;*s@+>5 zhM73mMD+<_cb1F9FU>+HkUK2NB>;rxoM^}pB0;=xMwAD zb(7wsw>beSaCv>pAZH&RF~L(>kenKB&`r%GYf8;4$I9Npw{qzT1>t#(GEh_I;`X0p zCV$*J_R@ENz3M}DtlaMaH*rAQ3hxSC%{Q=a#wdcfVg=(o|CCO+uYop*6-OIs=Mvpr zcj9z0wDzVTV)kO)Ckv^KNjPpf+6cVU=abTuFPlmKV~1@uRS@?10SoAUTty22fxr_A ztK{I6TUPIg#*87nNEOa4;5OLogUYzwUdJKoD?-1ZX^&;I)+bDJVMMMs^~foM2sLCP z_q4n6*%;2+^iiH&Mqx&Zr``b!3j@K`#0e9F+i966e3m@P*~I$y9HS>P*l>R<7Sv>( zm;v{X?-85nb49Z9pPbNIR-M^D8*GD)+$TMZ*FRy4ekm5y0yGc)lJG3s_pVY7+t#)d z_Dw-H9i>gPfgNgmE#DD?tsToWj8T70|0f?ArSI7up`naGG2S{2kdz4`@fdBzSs;>l z!zrsmY2`Peb((x%Y(taT(y`a6W9HSTVgQ^A=0##PHE>RulMqyYCdP zlxwGH*pgJ&5IJO~56>~k@>789Op=i9Id}`ll&2h`Rm{wlUfKJZRZ7z8h0&(fgk#e! zLLY*fb&DDiX^l+um-UP6sOY7Hv^N{>{l^~#qF<*l^8i4a_6d!Beq#4*!F0IlGVwCI z6xeK=0Y9rULrovy9L+VUoPQa7EKQN2D$Jdu-yZ_(t+1WCl;-2ZO;fB56uY1!v%r+` z0AkkT#vDrXl4AW!Z~gt1OW|~+4V6*;3-)rKt6lQ&XCSl z0K>Jj@p#N_#rVe&UmHmma!7Z)QWCp_a7r6&8>y}{J2pB-O(2f#Dc_|a*I!5T%`&#b zFdU{;x_);ERWWu>VHyLQ^n7X}a97t&cEq4Qc2ssb&Y8f}JP<|UIBQ+Js4YBty!6{R zo9tryw#TEaxiRWt&eANU#Y5b3Quhvn)E!Pux-Mi}q-P4bY_bYRliY96SQ>$8|m%ha`&9fTywjJk6sUIR7k zC8g^xVr!t`orHSNwc4hYn0UO!ygdr^DrPIqM>lB3wA{Z$DkZjXIgVahH3SDcJne(Z z3!&NZ*v5!7$p&(!Cq3nvOZCjVq}~^Nw2fQTN@H3_8LJ3-rtzh_TvIrT_)*AzFr}Lu zrFzE$&nqV-R^`BK-&E-1Onnl9v4wiBUDYP@BLk#o|KfnDwVKdK3fW|~;tsqsMe-to z5{N6B#~Ft}J><3rieJi8AtJ$Uy~19D~^vj$F8ic1%+{X6zV!WNl%%h zOIn3%%q&uP-fr3@%M{HmLUjS5CuWW8l}(VhmUiPBFz)}sv8jo{f7oQ)VP)^5Iqo!! zwP2Og#j6QNJwZCVO1&^akxCptEn5wx+*z5MOR;}pULeHmW^+04Hv{?2mZm#CEgJU; zkGQn+a4xZ#bc(}aJIZtO7D+S>yUG+c^)nCb-9b)w^M0LcZJRpS;H}jV&Tq)QT%%yE zNgf(3Qw;rBQm}y|4?ySDkUei!Xr_g{RBUV@9S(z|plJcSZxg~>iLN)t;Oi%B;{OXI zE?E$$x@aU0SRe#aJ72?W8UOaSa@u8~Vt5c)$23g-Q?3~JF~wkTV!fZDLma9b>BXzu z40&Div1Re-uNuPYe-jiV{i5#4Hx-2YyVW!***s@%c%4{PQmkmUqeOSZYy6cUT1Pp_ zElHq6M-mU`Vke>j%!6?sS3e&QtccV_J8P7LQVL2otE$h7bD^uPfskb&ykwoJ;_f(N zwRCYHVzF2jOr9JkTE`L}glqqHkOmkV)=H3n0>((IIC-ipj=%u!ulK&sF^6GNRPv*9?|YBr!TPUEW-Vznoo?I2d!L)>HzBGSX|`7 zx+MqB1B0sci+*RRmD618ahO!#(!MW$#uFhWehiwtLt%Fa!6BQ8)e57-^Ui`lNIa=O zq3I7?{Z+JWyf2Np*~_rIM~)4+XpF>7JKy4ijCC4;a%MEwMy8Iicd5b_cFWcjIt{)zSN9+A_DrjRDw<$<=REaZB}~4o@G0bli$tRHrM1R%_%*yD)o~ zTShGJ1t!NUOVXmXW}n58IrRIkH8Etj`>XTpYp^c!uOeg!X&ocD?*7gSnqyKCu3mEj zm=w=lk`lnrfS+Db=epE$NuN}Hp5$vooH{*p&x#lQm6gqMs*a#mykIOpOACbTz3|Gr z5&awwVPw==?HoR`n{e9BQ0b`YPKZ$#Q<*vOD+*pv&wR4n6gsXC7cFOA-@`~|dz?@< zSY-Zo^&S`-W|S=;`H!S1>9t_ToDisV3@}r(W>8qwF*HE! zaw|GwYIH6HRe2{*VK>a=5htud=QPpIR*2?YcPBv8$o4rE;{mU%F|9*1-cgxDDp@D1 zR~}x1sd_}sE@jx3yuBp{6;>g}pA|cfbg~38GjEG7vGVq9q2gcWn-k`J)q#N<6-)c* zF?xQHRlAy)|NOSR!hPF4NA2qg6n(!~b~rUJE5tNb_&lN5P?o$H>)u$BPan50nVvIF zNv~LWdv*5ro(YY=Zn5bVxnrvaiN~}ldA}Nw;C~`QN3nGC>(o*O?Bb_>!WE4-5*mBI z`A5Uu!mim?;#K61|A9Q~sRukaG7ro-LN~Tx>)&j(kkfd-zk*e9$dj%I(`eVX+_4>1)_&j3?I6{ts!Py zwfj#_=DMaSvJPDFAzD1Wpkt%OHLnkx>}#%|%4L9$v)SBTaOEbOMq#{&bc_V}ujoO^ zxSf8{t3k!#f|+s3VncR8$>Y(Xp}#x*sWl52L8HyBw+;QI*che27Va_v*aNA5g7H5u zbwr(&55~7Yx{ED2{T!?`V?Fz(XS{e5E_0{-dy$;+pMY1@g|qH2!>*H4go8nG@eB=V z)}My^Ha%xH;ArxB%*{JH*dke&BdJgjLb;S{YoMcjqRR(c^e)7u?*>^;)V>z_c@1T- z;110PbgNevB4AuTYoyif{ZD)|=1^%L#YPqGl4Id#&$k%PI`lEsFo*<^d6{K_f)_%p*0o2L zRxLy}1yy5d#AlbeW4N|F+z56pTkSF_%%%>ZCWC!*Db3roWCq&lFUuMjk8hBvl;rq5 zw}yT=B>JQ6pM{DnIrZ5E4K0~KfqZ1s9&eDGcHzf2>WsFBSToRVb|5!4UbKX#>c8wQ zl{tniXd<~3jatO~5MtC|#qcbaqElm5$FXH$gH|K`W-edfB4ZHt5?g);JF(c28~#^( zR+pUsJ#q^Qsl38@Grq|1-3G5>_cwQ}Tk9?)wQLKBmIVbWnor!fVPAqbk+` z$>5&Qe$u|xN{{on;eqqMUd`M?xW1>*{(v#rv12RhF-~R$C;C5XYPkb}2V=r!EW)*K zhBz&W_-YRaY9e7h{ie#PxingW|T4@@k-hkkv-$-#5oNA=NN-jriVAA>1<> z2}mzWM^M*T9cW_3eo=;sv8ZW5A93nHuql!s;?a)rP=oDV+SNVmOd~+R+E`>z>Rpmk z(8ce8*TJQllu%-3&ZlHalK&;d95S5p)lZ+E6=h8K(_N5@N;>3pb*NJcQ+FG)IwMp^ z`qY~u&0(<`^&MhlHG}=UirThv^d8hq!ah0Gk<48F0B1`&_RJ2)JSSW9NhgajwAP-- zOOe5`ARuw~0x;7Z*d7sjkY1ypiIWKHpayGxy^gXZu~@y^fXnGcDLNYaA95^?kS7Ez z)G~_(&C)v*tR=)y+u90R&k0<=aGQvcSd~Yf1p-*{I1pwxQ>5{#HenTkFjr~V`Ry%7 zKet-$h;;{MXF4W7l1mdsKO?jB#FD&W4u6CdXcpF{Be{+emJ&Xrk>Kp6~Za zkU0-xX#I86$n#U{Es~nS_E0o994wr1MwQ`o0||Eg-@cnwzAD3_I*{O0N&YaoIt;8xu@Ixu*g>RAT zn)2mhGArXX(25&k)crq%^^1Nv#NJkZYQeEbWwZ8!Q`6?=f^|sFR0Z&BFHCf$^x7jC{Hh;tj0mydZaYz?*<$z9jQpByc4QsQXb4d3GSjcPdz+3GI8`$t zfM66%@Hi%NO&7xz`>krJoSU2X68LKJnqQG^yg|ga8f0aEFyNpI4QD;X<88x?w6&Rm z4H*E%uDA1)OqI}a=-z9g><}>WMVKGM^;y>5Uy;*~_(}?hE5Bb^&?>LAnSgBmQRD7Z zWmx!;&0Pm(7ST2@Tp%M(ORJFNn{ZscJD`5?s=Q+{ptJZh2_0ozwYU8b*G>gxs;4=b z$=)`ZQH(CJF?XfxqmeVHo@%`ABmLLx;u8104bZ2-f1qYFJ>9xGJ^#ykXs#Y47fvBj z(on+lGuX@V;vLYVKY?h<>c}N|W~5Ol(WmnX{H$i^&qmZyuNc6K`mOmRX8aLhwmrjk zJdTxY@{+yDORQQZr!sVj*B8rn`(&MhpY=J zdX3}AuQD*sg!UThsTEs*@k5Wdl6J>XqHmy99rj6tBBt@yLvZz&LICK_U+Kzk?@0gSIcf#B z)K8wcPns^aRHe<<4zOhRCxQxYK{Yc8tz(IX{@#)QH{s|x5xf?wyVGROu7fwdP*`J; zvgr_Y-*h>A;FaOzx0+zss(87x}S;5|~RR`i#{cOSe`IPl(Su)cQ@j6K2o5&0$ z8apJEv7zD&FCEJAmMec9Q&EPr=e|0!*^)UeqF%Go(})iy*)CSgHL3^dsz=bP|C+&f zbf^q8ZH849S;Qa99ipsR2u)W07o_Bq0>bcG<)^8ODZ1Q0qg@nCx8a9(9zyG)6aw#E z)exKw*)5&|%|A^!SO$9JtZk$PHiz~g6G%@llFA-@2P1h(vIP2;jq|3Bhxop0bwGqud-NLjiOsa ztx&Irsc>-@5-4L?KK%}=S|+5q|MQd6UY!h$uww5c);hVYvl*IjOfzSvCPp^*9?efJ z5==E%*%!T6l!xig6GIBocUE;zp?a6X?+((bu>PRNXrj6$z>Dj!HJjtfW?!;_t?8Zf zibEp7#25Zze{}2O7+iBP4J|KzVD5?-2-m-`>i#A=g`h#cxGLN{G=O~d04ImVhU*q; zX|q;ik6m>91@Y2|1AieOHo3!=`cFF)R@aNomwHAjX-AtJ+1!DLa_LP0YBO=rgJl}tjV&W0j7dN1oK2V(vj~~x@K`(3ytQt=S zlEOfeW+V~&oRO5Ka@vT!e_y8U)X`pAv_g+!0N8f#BDFIf5HY1(Rof@mYZ;n93845G zUB6lpl!e%Fi|#;XSv9%w|3}fe__g%^aeQZIJKNf=dt0|HrHj&CcWo;&Btxh~OSk1Z z3FWq1H-t%1R8EBWx(x9R(N-?g&AzTlI4%*2xtD7Do!=j@$D=*kIp=fU@7L@3yh^)> zN-{7XY+}&jcVVf7VUT8-pxU9pytQQC?Yz%pnoCX;CC#MCkS3ixRAl+RR40d~MVnX_ zV4MT(qr zk5qdj4cY+lt!7yARfOWEWlIAy4hNR)jY6q>y&q+K=T)>^nfO!+KRt3fH+_Rio@ z#Tb2gWJs)05p&5XCD^h@#k>x8qx2z7w6rT_AhK*NMO8g&cZM1`zYBY&)9FPd9~mo- zp`^1-4$+a_i(*tHggHkj++OU6<~PyD=BK*sU1qlb!CPEYQB0Vf2*y0R1$6P{o(m!V zOCe$DEoys*&TJzeB>vwS*q$JC_f`FnhD}%UDp7Et>@{8NN^kxERVwqYCNkJt=JBZ6 zd<7%9O8&rAlv_oLxAv1~z2{mD`3U-=m*mCjR3n7JN4~PKbw=LeuVd2c9`dSY`J@CT zi)&@sI3KgXz8dc6NL25>D$&LL;plkNV8C4X>vn4^5X5|BIzqUfU>|=|df=R)_|Zh9 zVvCv?q&LqKG)H-E(%+l{={lXkytMx|3E!rs{;-71ysfpTy49Ayta?o?~l4t`B z#5!qjs3smY*1e{lOXW>x>d*^cVHVg+rL4CWe%QIs>LQ(zTSyJaWt(1fvq)GphTaaA zWMdtLn2HAY=MQ?I#Rx0Mf1>Yc?rdw`rM*a;v-@7~p~C>zS`bS7q`e@sYf?7jzmv7G zdZ}AekdgkyTo$+40KRPbPH+D7_9+V7v^4o?lOAKjILfKgT&-}(?RhBCZlq+=1`u4r z6n9IR;)Zg0C6Ie`syoc6`(;0@7r?B9ME1}`!58TGM15_f=mR$5`fW^N4$)+rUXK!o zX;}s3Jodlx_O*gGIy%||8}^xa&t}%`j)3@SmhrE-y)!zIpLi2D!FBQ@@%SiVK20(A zR^gKo1Xv=zPJUp5Nm&APUV@*cYZFnVm#O~`I%zh9B7-~I5Ism=0sQb+{UFy)DRgxd z6cYl^05|=x)!n>_tt_!a7e09w(Z_=6r1*tiwUqhjsOHmLL4K#6mE;;VKcvB6Bqbdn z1^x&YA)is|%MM)n1yw*Bd7YSwimwf82dpfObx%{q39k(3J>>%ot}yTjhj~|IUrNU5 zlRS-z-^m7WQ-~8-qcgD<{du|IDMKBwPZf3$@IQv%Ik#t$yB3DPcTIpQ%^+KH95Edu zOrFc_r;Cs`9MO*VDdOj55Bf&wYaWaPMLy1X`cJHo`vDqTDQbqvx9}ElksMY6d)r?_@oTa;-*2EjoOa+V1qKpOa6Hl0@-Myf{uv|;<#VYojlnr+ z(gmNC*#Qj(MlG7`7ajHk{%cWrg!eDaH_F+l$LuD!FlxD$9}3T--Dw`t5j%B}{PWZ=|OuvNs+QA%#5Lt`I! zs0&NZ z^L@zSgCAHf!G7FJV7)S{VB=jlhdnb!lvN7!g2j`cNedjDA5Bpvy6OgickO7h>*OG( z#|)9P-gTq0F-z?dxGFrRX|@x=*_Y>B02~sgE+Hco1m`pBpsoVp26TMv0Iv~56>Y@u z4A|+o5N`v|-zMFNZQ3aurc;;1=*-HH9XNjM7`O-LC(Fu`u4V~KFGy#^v8$}Baq8JY za90q_JR-xtA5_~Fq0R)!Cq|fjUL1F7Gn;iab40?+f+Du zIc~8OAwogH2H9_K-f}Q79Otz{{SjMlSLVcI0~mAsNBq$K<;(Gl-I0k>p_`#N#w0zT zcx#CJhdX1w#<^Xekzm>)eaH@>z(4p#?y&-nMx&Tnm6{bsD#vQMW1FY7cjhQLkY3;v3*d7Vg=wT>9s)P^1@T1YdGs{ivJaCc}>jpLVn zfoxY7zKhg%Iy9^&=lD3+3yK5V>+n{OSi;Aps@m}Sj=dsGv~3rXL$}?6?CC@2ARFa4 ztTPyIy~xa;8}^;O!N@?qbz|n76r$Fk3*d}S_9Y!fj0rnu7vHL|J+6#S;HKif1#34M zVJlOzg+)Ynr4!HOi%3DY01kDT?D5KMxT^FYa2tpVYFNxWlqma1ZBC}z$HbZz`>PMl z5O`}>iH2oqwfjh60(|@*Bd6?@Az;i%_uR&fOh^Bekh8q`g!%vBsSWp9yLGC-SSHLl>}DckZqL!ysJZPKx*Wx<8*~|9A)!q;zPMKqZ?VA0QSATKp>&Qv(akZ;6FiV{=?ay@AOs!o@l^1E{Jxrr>5tqB$ zgSH*X=|>A=H+{7>@ZT?-N8vii2h<17E;6dk#*MntTbNVfM)}uF#iKT(FqCxQNS#6p z(r*r2$DJ2Ve-u+6kZ5q1OyA5_ANH_8?;8ai>C8mk!W4Ym!aSd=+{ce9NV*WwPY z5VXj9L1Co(PK`naTVksB;r29cA8BjHpjvjfjEizw#t7kboKxyg^2HO3W#Hav9>0g%Z5pFuhl`DtO)i9B5*wV#QQw#u zqlYJiyub{h^u*?N4KMaVDZ?Vd+cS zSYomwM`}k@rH= zNm-EwbX2s!Kp^@lKja;u^8?CxriZLH6rb4$oOcE9d|0c$bKfX<&dXo~)NeJ=6K7%) z6FYItCj9X^0&84_mF_Rb@-4Cj)tS$A)h@klH1e+Ol0I-39blGMaRZdF|KOjsx*Peh zW-fwpvPggK(9~=s%v2bitQfvyiFFxvB95Jo4(~spVGag2&4I3^S(V$W15T8}{w4T} z=7a=qS?^vWn^^%guC;x1YLwi^xz{=27Ut#=t1=wJph?<H8F>5N>*^DyO0ehb`LbYZ8 zr6&%Mul{RM=ELi!4)lhL!>dSvzJMj+AYf#l?KP@4e_`d4sTMt5@Z^wHtCT@O+KERv zk~GY19}#yrSa$>dF;i`^i7f#gjQ!8)CEH^lagE8&Bd?5X3px5_`ZGlmg>=0g>b&=~~UA>O+nl#7>sR@u|<#7FKU3(ASw=Is4HGeM9znSMQFRDqFy@PL)%^{$ym*M0y;h+&vlerKC^$;EF8~)NA$nuQj7=EB% z>kXV=5%98SQ7 z0UDbR^c&}ju_#coz7x7^$4jNJI3xY7lTLe9>EvJ@qk7I%2ke3^Qh4jglTc~*TebgZ zyS%UV4Q5)Xn@Qnr;ia}>t1pa_lQ$Dg7U-u;Lx!;vbCJh0OC@kNX!!-+7Oz%V!GwHG zoL@#7cJdsks{}=4Ldk#7C9DqxHIvwWhsU7A82sS0sDpBOxOXYK5O7vi(M^_ki`S`9 z!Y+8tF&UB_m?l3Lo(gPSep7CTMYfXyg7Zwtxei28qeH~(dl;WcCi3k&{n`T@V{fNA ze5g zH9yIDY76ozz@}##@(-B{dg;)?aaNFTRPQ3Bns)F1vK9Jjwk-K4A>q}HQJUuuuD20o zNV5?6XWS>e~bXUmfLdSBtX3HZ@ z5$}_GPpQ?>DJFBujmqa3_!HRs@-N|+g+=`w;unkP%hE$P;HsmqP^{EvKs2LfpILLV zWx2a1!zAP=?}DBlAtaj!wX+z?s#u*6ebJwpX4>X7`n7H-6w*}@mHPCejY>_xJs2EU z@1Ry6W^Zs!UJ??D;e6X)0idZe&lQ{$)-rwoqhfJOY; z3s?fg?U+*qgJ+bD)Uzyjb%gSdyc?v44Ka z6w^wL-1V=O-5zMP)9X8v+pp#f7*g{763|8E>ci6S;f-F{&&yG|R@J@&%YP^o<%V_2 znE^3;cf|wCyyN#JVwOYmbBxOmR#}|zHHZ!qDT@K&&5eJ`my5p#;?6Bf#h)7^zgM3~52WhW)Z=xrUCp;f+7=D#F-@GIxcTjFGQMxCo{ZZlY6!Hv{12Bemt z`!N~xO|yG09N{D8qKN!H^M;(Ual5iSr`@wlvN`#~Ot@<%A2bA~=aWK=@;6YP`2>rA z^qO#Ias5x$ySNl+SP-caXMiv7gR3362jo(JQtl4-K~y8JD3bx!--IpWSp|C{xj+2# zZkfi1j}=unqC8QC+?J;NOYT+S7q%Lm>d1S%Vss3qGpHYQhUUTcqU&ub%S3&C(!;+g zFzz3)@87o8R&s6XIJG((PYCm+RLN>qyNW(omv3iRIh60KWD3zX^-dJAT+URxg&Gur zL8$fHsp&N>$HLuDPM#^=(S=zPCLP01lB%bZ-N(6;0`;ZVU_8px*&u7{XSp=mz%Rl~s@t0`c#FtRVD; zw}-cXFI;3VYMYwZ76uOVtQ5Q^tkPrcoQ!G*I&$iEX(vTB$v)Y#&DM^hn}tR{CVW7# zbT0Vbw?FLqw9Dliy`6Sj^LeCGmAsDI>I#iS>#+^~2`1gd<=AQ`Q*;sdFeaKWR#j8F z6DUaBL{Yw@`+dJC+HcHWYv=yd%!Y7{gIt0vMS&x29B7$t>PmE)bc+_z46O>RHzV23 zgci2LOq!1PM-nqF48O2QnI{(&4w{Y9JCZ1HqK$ZlL+(|a?;hdEc(Ct0m2VW?6nmT} zzJR5Mix^P{UU8#Jz=$OVR^x&KV9{-L>lc)+LVU9xGj{`+|IJ3feZEe^Rt6HP_F*bC zEz*zlcaA|p)(Ll@P3_!%`}E%j@qN;fA4a#3CW*qtO&>WGS(d8zUm$dYa*3FbAzxGm zs>eM8a#-L`UnjmkdX~H1p|KP;`-0BepzsD6y=uSl*DkZ_r|Oyzq->t@x+c3&21I;@ z;!ePA4bluNa>#w`0#^}koC7w#1y6Cf4tspozVese>EdotgyhL;!UV@~_FOcN^<%2V zuykT363G?DflEDbgJ}G>wuRb$JC^+m7U8WH!(q@hi13aqc)JgLBt+8FF-vcC<9~8g zC55Hd0a2L_-2EJ6T*?i&3I5^9Y+G5|<>xpf_w{BW>wl5A=2@sN+`?q*qubZ(?#Vgo zQx;b?Q7q3G4O1vmTaR^?{jg@F<=Kj+Y{Zci?4E+h=qfF~|>| z4LpXAKj9}IM$tVUjd#+=2(?tGqFFfxg`PdU@0(j*{~eY%33u6yZ8N4g`sKskwTQp8 z!XZqIJG+H7zEC42EXxM%-~-~!!Tt&+@WO% zNoTKIXbB%zE4wYgo(0Hi3nMqI&gZSc4c#vcyvpQy6AGseVBGmF zXpH9X8;;91MQh1Ez%K;jXezr>!~OQ%rg=UsNcn>vK{h!Yf;;$K_j!_&;w_4ttDB_X zE)qlv`=#|Peo`iGmk~ov2lktY@HLoVoBHcUBd2jGEr(LyiJuOv8em%f($VP7O*+|& zeWWYOZ=3`J>&ynCiBRleVD*L;gznk_Bp=p1;(d41UPmVSBL(O*O5GKzdTG?DF?*wc zF8tRYINLVdmqB1E?&YyN#1}Ro9W{gA1y=w)+m!9pn@sCfp7jB^7JHj`Q$?=4j~*#P zzl;BRTsGfN-bVBy?U;tf0HY!GaWD7cDD2#CKDU;kfcb_cTEITL=^nOIhsYJcgDNm1 zTD)=>P(5rk7G}m&hPY=0wEFv(80e9!O)YZ~8mVV;ta4(q&IA`XBcrA8`sr{x>IEd7?R=<-hxLDk@59sBk;}_k8%}lL@dE2q4 zjC2pNnqVqx-NUp^F|yylf=rA}W2rJ1^0>#~p4{vo^%fVO;K$qVlwj64hRL#Wjo}yS zS&vA-#&-;-HSz*-dZT?1A0-Y{TN|TWY1Jv}-Mfs+PeYu*RtCHdzorXa%1)Xzz-^ak zJ8cIWBV6@6a?!vlgL`Z@EFi2dBRs>0#bdV4XX{qOQ^&o$ls8r*wf*!~T=a4ff&#$TixR|R1w(j(G&STO851=TR zG;|(m`wJcOYNc0g`i6_Ifd?Ys06^6>T$0{KJXI-NRs^{;wYA?OI!qm>cdr!&`$pMb zR!zT3F&$D)tn`BKP*L(xxUuf4<^1hYZ>-}JrI}CI+Y2mv5y%V-q`);v;-x01mFm?A zqRn_F;2mq=&4!d}4%AZ`(KLn|I$|W$XmA&KvrlU}(ok^6K??78p}&+IsL$RCGeI%F zwB%n2|I$*puv&Sj3jG~B<0rqWWU6(cdv3rXxq8-u zeMc%Zft`nCiMpjMtgbpn2rBhHaDX;^Aod) zAzU^(fOtH=V!60`PsT7NqJQJ+r>lz2s{vq(&B~(LTlUDazK68}Q znq$DqC+T^KjEK`@UIn@B{fWq;6!je!(cB0<$`L(k4&O}CoikHifV?_*8`vl%llD&( z+ifA(L5OuzR;Ih-z(ZeVj|q_6^PA5!45P-U-Ll!0;ZF07m>um391 zO~YjiWMu;>+B2?T{bcMsyvIEFvPs)3iEb;{^+DNR32&A$t7oVm|B^rhQzDV~J|QjA ztR$%csQ3@5C&v~ytG8W5yr=m3aasPJX%k8!Ly!ZV&>K zy$JdEKDhAFh>GW;MNlF1VY+=id#!ASIr}&>uO9@Rk0xOfX3amYFEsXbz9 zltrO8YF|=$P$h%iwXo#6Q@}}OEYVI6O@x#Va1KgyeS(`lwJ8nsFk`4a`IWr>;M@~t z3|fl}-5!kM*{j!y-zg3b7zi7M6nlD%-_d4Vz5h3;gTE1 zK6|3;k$NMw?**~12v}x4b{OCHTR!=KVj9Qg>lmSUvU56Yw<6O0hV=6SL4xdU**@Sx zgq=APJqrth?H}A!+zzPcVAo9ajrtC`CrTffR+>~DWl7hI#2I+!OH!l=} z3-%3=UNJ~pKhss_Bc!Aa;H-mcp7kQc+9XpEk#!#^HUTUn|n?mYufUJob# zV!iPZhZ0Phjk>=^PDH;fYlc%+9``&R+)`~e|Gg1CLtE02Gvu>$H9DTOGbm2*^juIi zG-?xuPEw4?iyrU{(J1YFjxtAQs70;64yNJ>(u`aof@T15@H8Vm$Q-|-M>>QG`od9s|KxbM z$||{TEDQ6M^_TiH!lJPsx=8l_)rmQ^S)EUQFd!eCBWvtbw>wRZ6%!!)5`>6#JuNXJ zg)Z7EB+gzOBBS=2VQVLKVRmA4_|v)-<-lO1EB`1oc?16PH=ZFC@;*31UAh^+%NIi%po&B3lo+|T zFH2R+>E?HpRla3(8P8^eqOwzWe5p}0J5Y+M za-UtoByA=;W}{Zj&LG8iJNLD|+>I;bGuAlOkwP~*UYrUHrszaY?%qxv|MBKwKBB*d zhvxOE_y=RGq?ss=u%4o1r{gxnjVicM6rsP>)>(7l5np(^d>d{pdPx zR1V|2wnt4OA*T+&7T*(`sF8YqZ^3I6Ld4*;hY;_nOMDL%k}ke;oS!4x$;>QbNm>+b zQJ?q>BoX3B--& zU(X+ru=jyK$>hA>Z#WIGeA&HkM}VNe8{aL}K3iWFoQ%cB*#O1n213r9q0*wdSBG zzfU4;qXsTFutG}Q&QG|jAJBTB=Y$xtjd*3@(JLlxCl|OeBISfSX+WJix-3EZXY3o1 z9KhG_@{1V#Yo9E+fXTXIh?>pG9JuK%JPUXnLsukb{945=A3pZotRUo!o995F-l)sP z<)9Cn43zl=39>4x$RUU5)n+5qu>bU|#)pJ!cFg3(QQmFEjUSu>4kHd?BNwD9EhL(b zF++3|RBp-5F2Qf^?f;r0fvNUzc-_g>h7r8~2b&NViP2zkwxdUrPaQlX;lO|T#tHPw z3z*4S*e}k7_SVFiM)=Ol`>Z2O?$a+S%tLoiGQEw{WAcwt$+Jorr|p@Va2=}N!|t~f zVTzc&#J8hAXsc{Qw>v(cXLF)$w@75WBXmG!3%WJ55&X?8_-ix4B>SBv<{|sCllzc7 z(~jFg$u6CKWe{Wj6{rH#(06vg zO>~Ff9j?4Kde?_v`xhVKV)`ylH$Ti(lr#qRzP*FmDphNlP94pOvYPZv{oi?ff<@!# z(1*F&eOdOa;EBDu>OUw@C0sj(mXtKp1cTfM3}+XjCKWP4uNKHF0pU3JaFAajqtj{& z-Hu~O^bGYcvveuL_9sO(&Oq8;qo5Ev|A%tp5t}O9Wl(&U=yzPwU4xPv{Kkq8F7~~|BTSM#-3w=`cU4gG<}xqKwXrYi(O5^T-m_e5CKl}1P2{IA3?zn&Fv(67@qo8cf3kn z6{4GEs@H^Y(|CmO3m38fF8AZTAvBtpB;P^Zr+(6NC;vjr&>+?=sC#ZK@^GQ-3*Nz& z@YCrb$6D0G`|ctB58qS`Zu*VhXTQ5QIDcc=UO-#hgVSVx{$N37pb`@ao93RLqK!l| zFiC}XaK9{@N`Q)CB;!21$G854M*DLw@MQTgeboYA<6EKhH=n^UjuGx!g@pR^-k1jN zCx(4IREW=O!|ApM4a|Ssf^t2~H7IL(O(vcmCA$Jiq1D@g&l{C40nR`7q(S_A+9b47 zVH^bq5&x(prAoo%y+QuL$+q{u!Pj(?XFccAd@0*yUmuTw%pTy%X9ISe>}ZcUOiw=X zmvHer?#&ARdXtMUltA(x;6nq0yIAS#A9dPPx9$b(d5*oLlIwN_TTGW23B}=BPO{oc zO8Lr>-nTZzK<|TvOV#+!r|=J}n;61@O5Qq*%uRYpx^@p#^g<%|N`7!eO2sOmnycJ@wn!DVlB&vmt`FIYj}a`{(>;Ds z?axz6l@&bY@^WUL&_kcTCWil!FgHQBosuUe+Ls&A+4;yDPN0Rq@1>|L7xq1@S0{!% zQHV;t$Z9G%LBUFHHWcr%j#?iaQe`Nf&Zrj`TFpXcmB`E@H@9InINiFTl2@7yHqBL+ z{swwV`lT;V;k%uULlq)Go966a2VwFQrZ9TWviq~uB)jO=BI6F5I zvB&qIy48u!&dq)}^KsG&A`m|JjBe`1GqA+LE9Kk6;26L z$>|?oNJJyxPG9{pQbHnTk4WfbvTOoqVizO+D~$S-DeaV5)|8g0$LPD)m$*bMosgX- zjl1SAwQHg%%bQeW)uWx&hEx`2S*jre=pjW~_2F+g+)km_sL0GsK zp1MzHJ0%200{FP@_0W|IaN#^^gimwf@;u$yoW!Z{N)PJcp}WaK?_e6s~+ zGz1VnP4ks^|Cff=Xw&khgCCdkY)_OL&8VJykK35vUeoAWe?ei#EzH#{OLK$JoUeXJ z@jWBiK8n9WsNZYXb0L$^{o9B;uogbviTsx@m`+T3Njn{Hj9w!sh;xU_0kPWVpS*leUN4L$j6K7n9}CcULZ&H z@DH;oo!Ka4G{>Pw5hpc{wnaJ0&2UZsY98X|FMYGus_zs)Et3B}DT`t>j(z7S-1R;A z)2X3aO)$3~yL$i3SU>KmYZCtgSs=Dregd@Sk3mBSC`12>d|)RCh?HT4o8TeNR7Xb z`)C?fnmWz$aH;OMmZSY-A@G-VLfAAY{w3z~2K~KTFfTSC995GwmKN#|UWHK^=P+!U z6eH-OuiQUY?7Cc3L;q($eX5xB0FzblI6%1u({mhkK=-qs&tbnQ)m@|aCKYZ9)m)}W z?2h_G5@^7eUrpjTrTi&OmoKSU<;5SI#%)wjo75pPr20>J<0soF^PCH5KQ`$a!H@K) z-`h~>(p`!!4>M&xk}>5`lyV!Q6c!x1i|Sw3ewE&4_y1z$UCWX#UW5qnOUTS7oK1x= zn?DYG2}Y|ycFH7y#Q>|R4Z8#DDsJX}3M?|VXh!TKwD>-gTdlZ=P1ry#6nh>4FLU2Z zJBrbkaJce0cTGk*=Ig^OLU0A|8}`{l>Y?W41@9&NH}X4R!^Ly$t{JT5}42 z=qvl5$qc46Em}R^t^Ns>Ms3v1a&?9BPMV=L0fXOwX{`2js1iKQo;`=D$!9%s#cgQN z^qV?6zf&)QL^r5ES@-GM8&8mnKj|)oty!Nm`Nd{vj|+TWvX#RL7{k_{==%A=Emub? z@02P!)M3=-WoC@IuVfp=;Ha5$x!nVA@Iw+joYF83&$QEz_^Wr$qBQ1KlHv^tR}TaB zAfz~VQcel;$A-UD_hev>gptn;Yj%(i`SC2BotFm@4(S=12V9VcidU6bg<18mp>0XH zY8B11N&V3=Nv}?FGuEB5^xu6SLyHwZ@{fvnrFK9WjZC0Dv{YA$_Y84LQdflJ_OSjt zQ2ZBsph=fE?J_HKPu-oVD}B$=H4uj7Q_z=UoWB%sf1`QI#(=b~QQlxZ8-&5gzFbgyfvxW+4-d zR?Rc^gO#DYyP93t;`PHarfD@(A`foxdQVTQu%prU-Hk$o&( z_Y*Vur24nC&q!Yss(3@~MYj-p+l&|bxrV-|6qRZeeu$B<-nn za172OgxtF4T5+LoYo_Qj$z;JDBgNFQ$pi@QGmabgzH3LTA32n=_v+gys_h|#cHL-d z$32Sd!8V%FcFxtIo|ITF54BUr4b#seys%1`%GY_(U08~@#PYk`k>9MqFWg1GeyzV0 zOTl&K^{b?|q*-^7d9(6H@H<#BqG!0!nY0I$(rE$p7SPUB!?EEOE)l3dBs_*lzIdzD zEP03AO|8kt*sjs#LdibBmm;I$%DcMhbnuLZX0nT=u1Z2_ur&w%e0Z@1@>_#^`>Ng+ z0OyQ4h_hd>MM?s-qt&q#q}zfXPH#KON>TSi?vF2Ee}JM;Q_sdr#C3oR4J{%d=*phJ zm4>a=U8D2~p_4O|Dbf>TS<9tX8;r)N1GfUeEzU$mCm|8rVLi@){)6sCNiNVClo<@kl zB~#!%U*`&2jo3b)Utoy#=NC8CAW&mUrf`FhmrLitw%cje(7ZK4&>oh0Ue2OveTvzr z=;0)`Y@6)vNOaseT%pfEdKa3&B89xA&MHExa50b`u@4DFS@qI|ZYq0Bj=TFFw6dh9 z4Ye5E^X-B>skK(pd}{nlz%TEsU*J;3>>TktJo@%$H-Rm3nXGukC#0I^(6=eY3A9Ie2}(zlf5i*q3?d=p zz#dP*u;R{P&B+Hw>;24kL?g?+J}STzy<#WZbr_$`_o`(@@_nVDJe z-c68CIK7ygZ7m885c&9q`$RZMQM1bnvbT~;!o>%T5rVyqnhE`^dPel%4?>ZHMLmp$ z>sC+82h2yvPwuNRGf$Pm%=O3$7v)mb@vDfdSHOuz)0mAfN9bqW;0z8JSgRR*!lQ22 zJ=tr7Z&VrC`M{@5x|lM&*(7CiW$k??{Pvy=bz0 zaUKxhDH7Wyzn4BYhZm6ono5^rzE%*5v=XiDMBOZNL5SkPlst1V_ZTJw;k7a0&Q_C~ z*GD=&uqf4i>WemmB-ps!kSeXW5%#9as}WlFLtVu(Bp@TPm7UCYZYLy2j(xcg@2;=(yeAkJB;A>`(Um_!`BLH^)xKCfDPvlD2Zf(a zs*b7K;IE4loIJG4EC(~8=e+4^3fz1ToYkoI{Q#i4o1DzP^n( zkD6FZ_S(G3}JibIe$x~kv;#{9d|L)fl3k_&(8&jd3qA9}6ba0U=Y-+@Y z(MMm=A^r&6pV^dcV|f~>rhc<++-)+aheF{noc_o!j48Sv@is(z&d^`z)a8fv+>8-e zjwyncv)kEbz^OncoJu5-hdYVRfvb4O_8XnP-NVEUC|l``=y~K#deK1?WaDf*za)VB zplzi%`ioD`*jMBhF~Y;F!6BZhIB-`^PZ_4qBR?2sB}wIb9nnR*XFc!f4pi1ous5J7 zVd-Dgz~eP8^JmoWC$F1`svc@0_?|z*h~mvzV|)4Y5cC>fyuw&lWqp)oegvsno#1JC z5tIWDRuUXtfkTM~@am?0%xl5l-Nc~*gBVbC#1Oq8BCp)~-OUsPdw3t|;>5^GWn&X+&~&dHf@UIbT;w^}V5vBca(& zq}$xtYm>tEpt7A(?#=siMMe$~lnD#orKlv_-RlIhR@}XVNCdTut~AGmY{A`pXg+^H z+Dv}=iWIrxh*@%;^e6WKN^@$nKVV=#oyoN@t(W0)fB3|>>dVZulnH0nQv(a>O`S32 zM`Zoz-qs~Qv`C`fwlQ|@5#KT6*nS`=?H+{|zz-QqE%5pQIV=QsEP=%R!z}y#%C`;N zjYjO=F+c7Llf-V5(8PTJC82J1KF|3ZQspmbVJyPW%0Dt|DeVUK{vBWL?{2B$ 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%0AHf_YN5-i(t@&P=zwK;(D$iB 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

    8I^b7*9dSp= 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

    JX81Us2GpOxpDPv=zR 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

    5edOQeHOzt6_{_ewZ=$l9)v<`j(g&#b}ld;L+d5 zRYa549038%65PDpv7}HCw#0mJCIfTws5#g~>hXhy_Hi9+7gKhX#Hgt?IgUUA3!mH>zOF+&I+RM)CHJx@z zxB0B5y1Jd5DgSPqz^eQrguOd#y&I!^V)Bj;*S7{serRfD+WNG)+43)SY9U151Ii4D zbTQdK%J`>|`i<#Toe%TaYn)M-a^^6{E)H8xUhYEgcs+<)8pxAtiG_0UPS{1Rf9fg= z2pOU{KE||+sO2Wo^nH3FIA4wEHvP3vx3KuxZOnWLn**o6vm)Wow9rakU8uQU*AlpK#N2bgn>5jCp-B^lDHJEK5r0eQWJ|$9*_c7foCMqPI+xS`wI>!$7}D*Xr}eoa z*i3QaVwDt|O1@}4*EDIdo|_pK1(yrRmjOX1G}7;Gbngq%D0qs8CRv7g)fi*9>(dYi zC%o(%^8_w_Ck{Z}sl>fBLoe#d z_%d|}Ud*y-`l^=qGup=)wy35^>~E=+&B2mUA)!>QCo!9QK(xGb`-53P&fuTCSp)rW_VZPq80|e07 z{58zlD$DuR%RhEQ&roI6yQZ2W&<$}W_d(p?17fn?dj+utAQ9$H%R9?6_48i*3r*yG zT8JdPvvK&PKj>-bG+HvVKLrtLN#B2W-VNiUmx6ab1>@CzD@GB<}C}ZvWcErePLcvOXf=s2m{J&tyN~yJb z4tRG4Z`F~$0Yju=XgA0pE&5%5yA>?iCTx+eV08G)6r_0C2QHuoH~p^q3**@Bws^C{ z5AjMsFuKXcn*W0@b%Any`$+bP^au2YzipFmzzfj^juKdHE1=$eP)47fefY5a+(hh& z_&n_HO?v-gSeIlcMaU1fK)oL&hyIB^GaqZmO^f@)K%jG@$nFgDahGNhVVRb)=AEe9 z-EXeu_a$Z#t!6we%}p~~N4{?r?+TaIDZoI^9(ym?jAZ`(o&PCK6-WrD)KWeQD+RiP zi;Wr7AU@Cd9wocAV?8v#%EQJ7IhXzd@pq5Idv|F6_!{JWQ}cfuoqJr1{r|_WYuC+^Ljm>lk72m`YiO;{aWhv_x&P4YU}7!VIYE(*F9)} zwEEKl11^ZXap2{w#OvVb{*xNZgf^e4znF8EXZD#tEE;a;&eSyTL{xgXyd z3!UGprS}V?7HZIFN|$Y3Q>2zoaL(5a*(#n-A_f!r<|byZn~icVHN#d=?qS79MX`pQ zfa-u&h_W`uR3_F}4cv!TtP($q!}vbe45uEeq|c!z=c~f|xt_yvn-$8TbUAcn#JRM< z8tqyP_{gLrfVEv1!?PRk4e&}2)ZBCBosZLP!SrSH@yqmU{=!V*EQbr`=J|k_?@(bN z9=QwoeJ%TLU$bbK+qOhA;YB)HA%M-eqn=Ek@f_nNL*S?XsXnt2|7oJOWe0SPubxp;bDeX02jSzB z>^H5L$?BaMh)ene`W2f^1rvMZf|6Hqzip;u)SON9D1gt1P6JBj8%};&w!;d#Y#HC0 zmOaFENay{Grp_kDWW9Cuh0i;eu~_<5pT)mE8@H;MW)Fom+uJLk#nG>o^ zK@P6d-zc){?EgjDb468k%O;-Y8}YxqU=9n(%C#>An3UDBOW&F83vjbNM)I;nUJm+Z zykg@Jw{4D<&$09Y<{Xx82)2*0Q24qJD(PhM zb73?2X$%~>A2dX6B_W5XpF*`KhW}U8+mo!M=8gHC*a1$3H{g9DbcEh~Tqh?yIb5Lo z@X&yx#Ffmobu=&c6z@?<2(}H63NRzbC6O5AIz=}H9~)SJ$zS_*1Z=;RWP8dyrIzd+ zZx9Tah@_xVpoKv7@Ck?=4`1%+m&wZx zIXO(#{o|yRq5lD`(~SH>JS_T$JTR(ry}8gKX%-so-fqbId>nsQe}t}UhKFApp*{WC`TC|?by`S(Ju4YPa!P2`Nm-DX9$aU8`o`MCKU{alZz2~vK7 zM(@!3pf>&M44kxtS76z+9{Iry9RNu3=T(75mrZ6}IvT%UCmUb}uR^;3!6VZ9_sPze{<;?s?ouIg3pa}Jd{&l2~WjJRBb zcc{KjaL-0hua_OA?MjzbXQ_s%jA_x5mz3}(*eR<(IZ{B^o!DvD z7KRTYCa3t{H0-352Fo7?-2n_4?<-|C2UP%>fyNUx52q=&f{yvl=uQr1v^lJzo5a~I z5757?+Oyd`lWZx+Mh}ykzgTkZy)IeP(Sjb-CEGlU)cn#^ZN)@gVRUmTycbWDrn3VL zWbbd7WRl3#Pjd*y00j4_Dn>E*^EimPZuK`MC>9yR-UV zEO4ng^M>g=B8;j9Yzg(GFw8I(=CODlj4-=pM zNeY)y3(Jkg(Jm|X{-_JCFAanpHmk|Jmrtwt>n`~M!Y*0;jU)Qq& zCCgpCZX2%r0hk#US}5`W4xa$u*f}Dq-zJ~79=aGdX#Gn1X7*A5kwGWR_G0b3*a3q* zOCc`iWX!OF?nFu&blesC^jsLAotdZ{4Ii>6QoN2N!uy zG>IGZ+Qbq-F<);$0mjI35ctIWk<&$4sQppr9mAVkH0p;*8keZ-{_}My#)?e!f_g& zF-sb<54K+o(0HLLeIM@DYrxWG)e{S{nfgbACHl>mG1x5wJv*ot>^F`H9T&}&SCJ1!=xCi)y++KIm=Dx1zILM2=5KZJ~t zK7-txP21rmKL9;t0#>$Gow`k0vK=E*U*9o2aF<^H@#-x%cj*g|Y;5r!q)j9_gjB^& z_Ehj0(6!}O(4l-CB8$s&+fDTTlU>%w&NwXeyp{noNkc;;uE^>a1kb;P;_xh8eZ6HL zr!a;`0&((Z7vvlD|2@!W4U#CTF}*xyDkY$LyxPH42L~&1$R3s1yQ}2Qk|_lq6u$vDM4uxxxATE%=o2te}h9E}Q;w00(&~ z+wSm=L%bYvmK@(U2J%MfCE91#Ft%~9=LJ{#8FtuJwSf<=2Y|VqXa#oga3yWEzhIz9 z-Z6uz+_ukdfghIlV;XNSa$r%_Ey~I{C^MH3X6MqO^CJCwMW+@5QgIv$es{TGtHuc#A!jYp%u01KOgSIFmM2MZ2yde|o9VJS!YG&h^42IHcO?OTp+u6V4aB$#?}uc+0Z!Re zm$*}P4bbNbpg~w*Z_dRDJT*1yE4$2#eoHVC>`70t6^=S(8zW5tXhW&dU7~-cLJ$5e#%b*0 zUe`{Soj?weJnklEJNQ@G=H)unJkL3uPGndp`(-)wswmf#VBi1L2g3rymywQV^4A6C zM#OW7d6;2v--pSB=t^r{q8oryLK!1uPpxFqQr;DSMxQXCdZLoiB z+-DUqSF8>)?T~g3Fq<#abxFAIkN4e?-;cg85Jp zp3In%XQ0Vdwi?<1AwCIFGHoR9FDEG?FUcdfN!XmHF*nub%+4DrLKc!Znr%G6d%X! zio4moJ+iD8Icl>VU4v}Q;P41R1O8NS80)5ag79ZBLRs{#5t{yoUYS$f`!ZPTGf{t2 zd}ToaU3L>(TW@Y>%PHhUtLEToYkKy-prn~;fF9ZGmX=K7X>;_Uzet}maUbEl$@OkB zohFLYwVyzf%(;fYyr}GeU$rb1?HMIqPMe;t%b*24B7lh_?hCi@9xu%P@EtZ^@Iv<} zjKg~pCoVS(+80*x-Jx8-9MF?E`1K;BJxM{Sg;t{IxNR2P7Ts3aTbB=dOcxJ6>>t+( zqY}@99&74Xve!iQwL|J~Jr0r-35g_lx14*DMiZHR@t(Kc?-_!9H_`w(TE zY#eT^Lkv;zLtQW&{YVtLNBf9g@r(A4&GbH9EUSEw@*xu! zp=^*?R3q-g2b*lDVF}lnOZ;$0rVo+a6}W|0>8lM_c=Cm1BY7@_2PbqE==GE_iU`d- zxAwnzn*#!drvb{5M`*X!4`P-S*BrwONPYUqZQ80gvpEm7aIi75N=a6&>a+Gvx%Dw)Jl1Eldao})h2K^Eq@ z1_YGU`a==GJ%5Ig`8&1d)^e0l4EL#IchFhc^s5-@CbM%F7}z-9)6nW^d>^+2YxE>9 z+quMq$+)$X!41J=bFiyvyUZ0|?E((X0?);Uwl1#xx{>;fLG;@s`GhQ-t5*wp!9Qiz zvm^eX2K91#sljRB+U58nc5+`Xd`!bz^E;WF5)_)JzJe%P--s+^5)$Dlw#VelX_afp z59aHh_F<+4Adr+57FhA>7bdDq$pN*Yoe|2dIX|SyX@R`unX)z{@2x7~h-2FiIdmpO zx|`_PzfWyfoWPMky005T!v6qL_~&nOQXy%BMrz^Fkz0r5=z$Qd?6t76lyo<&V}{8;Kf4^x)KUZl(v4(Cl=U@YdR;Hpy#_8mdo_?Xe%y+Jyv zd=_ZPXFIlF$#w{}UIoaMR^lY5(t3=4x-uEYt%(te4Ju`m_TO52+X~qb#>^NFsn7#_ zq@O>g^~uAkqM*Yv%;=IpS0X&2FUCKVN6RB)h=G%CFGm-bOyobrfl%1qdhg0N{o*zJvvy~WV z_!g)k@k_vhlHYD49u%4PJI5s4&hFHZqfGhij#U^xhb5>#NzYem>M0E`?nrWI6~5}U z*ba!%AyfEk4~`9xG{Vv>AT3Z~0+)+))4U7`f#o%Vx}pWTo8iV)v#rtnJ|HXC#!@P@ zAeZkOUPiZ+(ai5R=~rai#lf|wNyeE);8=ky@gVplh#!!PdeArGw594zxYu$)CKyu% z9nI!QV&w?Fd75w4>&K?cOoz2R`i)We%g#1&37Qo8A`fSlJ$pb6OA+?eYXG8;z^y7np$m{H(9X=u?Z z-bV}d*9(<2y%a8VGq`6a;8B;Gn0||0G0K+j$St2IeZsZh?B+X5x9B;@BCrHg+=|nA zEyTs!>Y?{S@tK@#&@qZx0G3E0Szg9K? zj`W~hX*%Tjm0SA1KiC$l2t@ZDdeG^*z|R1@d}}VX|Dh-$A%Hh-+nB6J$mJieC-^#R z8vjyNRcRD>(gciHpJB2k(>&ajvl!1MkRNagm1wleI7Sf=6w-G zU}!k4>eTeAx(M-k?+PlhDors+djBC%JelF~PCf-(u`#^_abch;ZO?2nZ6`n6R~5k+ zFG}8%A`AP*?F`EvqOA;O1r5u;G&hmmhjQ>XH4#W2*>v=dY9v+u654FTF$^+;^M|>G zZ^Tx@=tzrkHpV|SA!{QfC~uPEc1!w2HD`fX{H9!_jRA0O2F+f%s?@G67>y?tn4U&~ zj(Y*MauIbE0n~Gwaq6_f62si)dT3Ss6*R3=zT%~*^7$|3gW0AVtkN0Q=o7@%;r>aI zhtfj^;X%5olr%d;?+;&i18;2LtvF`q^t(CYE-oVU?a$-KEwLM#WYZ{ckX`sLb5wtV0GJ=EWWVJmhbOe3pBO5~cNaNt6m930U zC-91&@SYjIUKLN|tv4;%I;I+I1%vd9W_!e%qcX?zzJrKFfG1eFs%x;hUf)1%`Q7wr z8vkt1+n*}B?l+pg?+6^I#Esjag0yemi>B;I8~VlV5)+#*ss?wn3(y`OK%9n86K}vq zH6}~Fq8~YWxf%NK3!H~Z*M5_XhqsVQv%&Xh-%^N4LA#*e>>J6=PxMdYrH*jhL;Q+5 zAd%@(5fj{7$R1)VZRRh!?lK|hDfO7$GBk6@_M@$AJ3PWX7B+Q!1^dHPMGwv}$2r7rvcgYhg0?H5yb#f6O(1PKi5046mwk*gQEK&jeL~ap zN4J_@idER}Ftc5~fi%TF>9H^{s_h?@r9CvYid%F;^2cah#6$AVd`x$P)Rn4sT2VD= zvg97$CE|aE%QQ{nQITQW)~9;Xo>9b`9K%TQ3lMH_TF|k-Ngs&2oQt^4HogB{A4X3Z z6S^0*k_dEKstLd8u5IWeZRdTdPl)7@y~}HQ{t!3AkE*zgFI{KciAziy*0wL>O)k(= zoWBhnhudPb9fX#Cx~0Xl`gfqAnxN6x_}+tJKg<8c^sFuB3~u4^$F3CdUCVG7g4B$1gqzS{MZT1lz%>&2b9nZ)zcE;}>o>TpY z2Y+%OzeyQr#Xm?bFxBp~J504kJH!4_0%Fmic+J#Ek4@4UDJb5zvQds+XC}#vIH>R+ z@x$dD{Z96WMPrD{!?=)G3565xL+ba+!rMBSFrE!7MmjE84lQ)R*c}p>e#7V-Y)>BV zCW%cUZnM6hP@kJg%o?Xojg)#nY=CYgLJ{+RI0q&&Zi*dKL&}$sp7a|gF)@FG%Wm`4 zCY2O^Fu-h6AnU$?^235*J%l=hR%wtpqnb(w>BbM^#+cvlGr|CC(i`|#vN#B9sRf6_$70wvzYoSWRMeBKs#$f*QOAd zViYjlZ_9sZe}=-YclEC~ya2bzAr`}Hyw^o-1T?#_K=x5TkXu9E`nekeu9seb9>&F) zEYln^^_BFMUfPV&mBY($OJCy|QlfMVvR5Dv4IIh)FrRp+=^k#qpXWG`h^a;iXK>0I zX#QoOxC?(rx11mqz7qcr3%oH2leqiYa<|TgYl^{h^{8P!!?T+WuJ7ha(c!#(r9$)+ zru_&rop2MT04EEBI&PLV+8v?UG!*(a6kvDm=yGYP`|Ob#h?s}3Onw0UOQ6mi6O#o1 zPiuu5Kx}L>oW)i5Fx-~#Cg(T6q%c->6Z96lW5}6j2zrV67IfHNptAu>J7VH4)ON*S zCc3t#fPtOIdr5D(S>+EP^S1KgR#YKXzcZ;!SC}%=hU7KQ(i7?-#FN~@HkBId>ElWK zpUqLVjH`1vw<4HDy~%snCXdM-*NGSyR*)o*xFwSQaOEwR1cv%iP&H@}v?L6VjJS45 zaLhJ;o{Lz2nO^;E*MS_nC5XS_ok~acIzN(gDoOf0+gc>kR zS#iG;XS~(#omjurb{m^rRX-t9hgjMwHaoL+)(3T&_92D8_8`(Sz%NY5Ak*ZI|%pU7(9@^3?3i^KAZ* z*yhwy!}7mH7_f8tLBzKJMP|WWX9arIL4Q+;m-SG5$jI0FVY86GalJgwjk4oNe5S8pv1}*R5uU?$?ewc)9EFjlh;gDx;iF4HvZwzkf=;1 zjaPDb%Z^wEeWf>nc(Jle+rjj9<*h*CTQ#m+k3$pTx=*v1?i#lio%*@^yck%7QFy8)OCQ3w|(jCj5$4-NkAT z#BVfrh=u;B=jBGN1FU>`+!$qy)AGl}z1_{&juV^@!kGDn2z4seX=| zMnKAwhzCHHmsl*<=LA+-Ny|5wF0Ydv&im$Lptx^$?h^rk^1OsCghRc{&?kKP1`xNL z$}aChGs^lLx{EQBC!ybY3a$_*w&tEXfdP32uJkiU4;6CR#!q?lEOB@l_VVpVbQrp^ z`8zkBRIwWLDi)agq4)`!;wWuDx#mVX^w%2kDF+>C9Gf@Qp}d6f>^JJ0tjtPwP#iSQB3?_HAOY}EDpuwg+Mv>pPV8E( zn|w%)Y3#?D_Ly5(5vKytixUQ+$mAc~%svWvk-t<$YApBx3Ks5tZ?PNx%jw(AW$EV98<>`CfBevO`-OhgrH8Tp# zw|T&AR(&EZJJ_kjS|_B2HnRDP%syE=KdGbu;+AR)qMXT^1+#chRhCX#VwPqYY$*4u zLk}%7Y(ou;3hd5)d4Rg58GbJ`pA6gIHZJH&RP;Xhsx3a~3hhQOc$I{6c;hdf_~fu2 z6yUn|s(6tgcz~mflfpyHci=36zYN8(Brd11N8*MpDd6HX7(l19sQT4(ube~6FZ*%%^`6_Abn?6L<1gkP5G1#xB|^ zV_6e<`sRGrKUnlD!W3=4cSXH6II-*iwdNU#vcPgVsiBMlVDEx|^*lI-$4cE9;gzp{ zZ9jZFR(T!oeu_9TizCtc=_P^~DNP4=UIH!YV7peR@3VN)L7otkJOmz9y7@9L$pZ~f z)+ap};NEhxcRQx*d4T4-Do_AM2?-^$d5GUEdR2tYUYMvHfE|Z(=BF0e?i1D$w_*Yg zW6x%yf&;H{@HZ3-HLic?8?tlVPh7|;T9d!xE2y>l`0~EvvdllYO+m8l$YM(4KK=Yy z69e&@A@LagO3Dy@07D%#iSlmzf(1^>r}rV7D|bwAf>N~y?yO1C3~=4XRQcyJoP>sV ztQf_0B4w2H2$c9ZAZms5j8ow!-b>oqFv)TXE8Zs53(V-T7*klJhOZ96PCsVJ?id=~ zl{pMgt7bB8h7SOt>`7DBaSMAnyg@d|mK^+3BMkLy_OJb}=9n|TaFfykBoB+hVK(o> zR$?d==D`-}A418mf#Ej7u!S9}XWZ_jULQ^d?ShSG#lL1HCtH{+$E;rQU+W9~sT;a* z9MGM&F%)w<9=*^>cn$ghBs4&*JD#K_-8r z*`1`D0edMDG!RP26qas>sl%q@r?~8nif`2hx$-|c#v}}Z-DY2q;T7|Pt8^T6HW}Tt zL$V1LI)^Zsh(Z*ex}1a{xB7`^Rw<4`ml;JX${5fF{sY@ek9v~dXTm|Cgfs08t3Pgj zR4G{jkiVOFgB*v?7<Yim%t7c<`hc>p=vB*W{i6*Z zR{$RQ33w9m@ltqqfU*CTO3@zGxJI@$_rKTl3{rVBlsN)eh$nfk?LwP?Gu&Ja@7gFo zNssrALMRL5nl)+JV|X$7e7*WN4|B$%F})Sez3qu(5_}l%CZ*2N&}{V&cML=0Lz1D5 z3F7O=?MkyGYJ5wQe3G8RDoQ9}>rVnyqtP=)!Sgpxl9|iN<0bMw*OlXCAMOJR|4!hk ziXsHB+|?yZO;5}H9~?C%@K!|%nwq7An+=w)pGDFWIfHxb3fU40vkOYgF6fe6!PTj1 z&Q|STQKC{iGp|Iqs*pqQpQ!wvq>?a!KREC)q*`sn&tYI3+dZK=UX2>p2=;(e$kSN~ zqoB6;q!6lslqLR;BxH8a?j?@^liVx#MmseXyfrmwpbb~?880Yj4>SMUjl23q)PBe` zfZ8+!Mh)uwU9aAwo&I*8tDwCSrIu5Y)(q!eenV0wb-gZ3AuW8*g>DyybG3<-+mT`!;%5;^h% z6RP90PlHlff`HIHLD`|EE>y0R;G7dkLzWORA^2Gu)3`h7Wv!y||n)ny#R*_pI;Wc}$P9MxnJi1T z>A~=8R%0X^VZx~quHCw-d(?Vy){NY#5R&a&rk7&dm>l^)|5 zR(QCTgM)bnixxT|FzOMpoDQ|FP>0vjb-A$D@$IDl)=}5{h7v~d4jCaBC{v#=%kCjI ze4u!WB;kMB{^DPUT^^gK*qluQ)taExY9I}~Cm`z0BrDihRVLwY z=Gvt_1S~FOw!)On*yI|tCW@g#i%E2y1!LNTDC27{^Fz{iLbKVCMG-(Wz~@@i1D}m15wwp=3;h@Ci}6gzJ*$qGzg$+fe8Cz zfv&Wlc{LB$zWx_&Q4TJ)k!~C8bxBj}P&iS1OpXufG^Cg_+%qBo0ueSDJOoXVpofW) z5zl7z*KwhVpiD))2(DWl$0DI`0|NtjGw3`(nK~xEFhJ@H#q!#lt41HTghEg5>SFv; zZz4fQ0Mi6O#-~8l3()rQdVrREp;ER&8B^i%DT6c{X2$_1%eqjpQ-P zEOZ``l{%U}zyn6Tx7^e!`gX`h#-!1DTGqxWE)&8in_}S_z5!2JI>t1ED+|?xUlJd* z4vw%skSy>NI&iUw8LD5ju0O0Sw_Ni_0-#*KTV^S2zGIlY()9O!eHQGVfuEhPm+ZNt zKQLDuSuq>mPhtsE@8PzO3S|j8wp$V_z$4(PyDUlb0oqv3DSJu$GtS_%3QfCo`I6?5 zSLHHh|Jd@c7H-X`k0JF;edc$d3k-Xust5zrng@mf?s+T75tA@}pG)C(-b=jqV@ypV zSZm)YO)Dw#bZ(~YD1`=m#}1Gx!U?0l-ZB3}?GVGPtYB*CT4P^{U8zv=1|@zKe~gv= z!*K2R#dv4Xyj>^OMq>PNt`PG#V$J+xbc^0%0xokU9#UbDX{0hXR?}^glGO|&FdWEE_e>8j-3wTg;CF@@VEg{rAXvSI7m;< z;3(!(>OUI(-ICO$d*>AIfp*HOrW1%#7vx%<{=3MBCPYrSH;~gX?djRd$AoJKtn==^r+4qGts-nwyOeH_Irvei#3X zz!JZPs00m_8F~xx)GL)P#no-GDcnA8nz&J<+h$n9CB|4%@eKfF1dwTb;=Adz3=mr1%^5b_TaQHhV?V&fIITRq~GN&vl!ktAW2e@vhu5%>vE%GCO3Z zzxeR$v6jqnruy1DDjh_e>Ucs;duc2b3aT$PkvB1wjczqbP8nkyy=3}a3}dd*1**pe zg2f(VFIktTf_|pfhP#^YF?>xRuH)t@@#h&ZtSZg~ehajs0WGDkxP>091z4kdliTUiPv~Z`m}A?; z_{BU6mW|ZW#DVTrRp35yC!vi^aEvH0r8v*R@~Zjhxa$ce`ZYV0dc*8rq@T#BoVr)+ z5A|RW*SI9kMT4(LNA0wWvjvwhHvw3=9=OVBO|$j2HZIi#{vZha<2am14;0TsIuNsk z;Jj;={MQ!Awx#mFHxLv4t;L_0S+zgMs|)*?awF9zNPdnt-Tg4=Fc}&Dkan-Mc+tu? z{bKfM(0EC|bCAj~ZB*G>P5DgOj^rspN_|-)^r)H49Iae}zD{NMoqU?)KgQ?^U;4yt~P${G@iyifZrcnFw->VARoOYDppNX zLqpFLQ=PLozW6Vpbh;mN|N8TVZ@^gjqfz?4fm>KOMZ4nH8P3P{m}GfbW;}Y zv7PCQonlKpd6Qei&pYVDOT3$(0j4WJ9P^jNku0f&UAadkBN#q9=>3><+dKRx$vR{s?_swg`noP^ zKYVN1K1y}oJ5i_*{I{blFH@^Bhd+PL{>qK$fj12@^;~Pz)+W;pQp(Rc@*B(HV~=TptOypa z<%}+fn0T7pnSp;7I=mdLe)n!bCk5)G)uA2y|Ir4@S_iNR)zu)Hpk4BW*dj2IwMEN) z>8c%=x;!P}64CFT755+cd@cXsH%!nuRkZ^R@2m=f7v++@5p+Evg5Z2Tk}!Jf7%4G* zVC2^X+}S8%EjhIA-agwwydOkBYAHK4QBTf)w$(D-8TN<0lQ=UlDiHH=+h*BKMkYq z7s+q8d`rr-i!8w{oqr7Hn`Vm*923&wPZ1R@5+HUIi zRhTKazS$=@MPCr4K+bJdAGe#uq-#^bf@{}Hk)ip#ZiAoxPpMT{`)3Dcz7oUx4*WJ# zaCyNJHg5^;L3F1rR<;Le7&p_r-MxArM6FesGhFO1>5C|f2~E(r&*IgV^?v%aNi`+I z%uOK`Zo?!$ro7L?VFK?O`fy#E;yOK!v2yu{_8ZHLT+z{K5AIh55n^H85M`?useA<4 z()ET~=x%CPG$^!6#KCj{We#hk?<|7GipWWr?HC zH#D0get+3`*5;i=w_c&=quY|hHgWAux)^#83q(=26BPoroeRCdq=ZL%Cb(e0 z8Jeiu43aM?CSOk0={eS#1SFHSL1 zLzF!(sLz_`w?z}a3m{ayft2F8*d|Hu!jPTBx$QIuk@tE`fyq~Xit47BkIl05f`#80 zuxnb8Wei>(AQ3n{J~rHnr_qVho%aTqg=aa2FvM+)WfZ>L;V_Orl`g0Q&*+>Jx*&wH z)>6R-m8B2a_ein{V^<&L25kvI>$vt=I{#&I^!o|}U|~~`7=;F!>KFP4JYsQQ(1&(A z#sd~!IM=@3)I{(`Ir=?Fg%(I8j%_v`omCzaS}sdX5%+4n2zzn^d6{(roLi(cjO8{< z>P_o9gf)jsu7y6Dqi%kcr>oPKl^q~d3~MqW{vhjdR_+^if@gFz z(;-zC1n&tXPO0k`dEOFldBsKS(Hd5Dk8_f^t{a|C@KSI%$xCtrL1KQd-C-twfe?+t zZ#UuE;VKzn{mYqCfdV0G=66xOtNvF1KD$B>zN0r79;0#=Ch@f5KAWyUP0>`|HRGo= zg6jy-oLX{g?3OeRPs@fwr)wsINA~k7_#Pn?Lp_bFWgWxXt5cH^maatek)I8EehZz< zqmwPZB=2QncOT_)CI$Sp4iR1S=$?gEWV5HCk9N5UF8p!Gwyyv_o0K zRfw?M?(q1!$vhBeEj#5N^kO70^B(^-ryP%r9l+@M@t|gC;<+d3XPcigKqUxdVUXHp z@YNDu05e?IPQsD<pblC>Oo;k!40^I`RluT!@7X0K=E$m{Y zR~Z{IQ{teg_Jv$DJnaG|NoGzzQ8eLFm+;|1uFEqW8!cZiyHAh*Tl0_?ljR!?%sSKeVrAMix^BpA zwTlj2d>+5vh6RGXb>z-S_#Bve7bw>><@eySbdolA!Kkeq+h5-}h7UyIuT>tC;^(mD_6Aizw(GE>q~bA7FWRB39cH zuI>IN^8BP<SioBzL8yAvNzTcn}( zN0^*VH@JmwImXxI)m!`<9CdB3QZRzvr&V9gIUwQ#^XDseamcH|aiod>zJm-_Hn(UgNoIO+ga3QhY z5K#UQ5LJTFM~+hhDyF2%vpbPSNozDcb_=nJsmJuKtN(Q_o?Ne||Fm8b&V4pi{tsyOq^I{7A@kizEd)6gC1LgFR99 zo9$dcwVr^K_i8;2AP%&{89_$_WES8 zNF-Qpf!Mt|aQ zr2nkZH@fIm(y}+mfXJvw4PNMkHL;X_+nFQx|4M^gU^6Ai0E4@c(%>zOp`5q#WF+8O%S)jPf zoSCZMKU#6pqlcp;P~(|Do&#^RvCYZLTb#ClZ_~K$jw;$UUWaCXyrXsS)#Xm8>CPE^ zDe|<5iUDu;QIcW+)f})Z9t3zVAF3=-{lR;A_R0~$&MCPnQzJb9NB#Cy)q5GQmxv@J zma&_CI9tB5?6q5vjWDVoht&VgV@lqUq%qpHw^Gm{+gWwPq`jmV#Yw7SY;Vna<*X>& zF1UCTTYvrt$Ya@zwy5XJ7Ina66KKd0+`9;kEvm91^V5U-)o}3=-U`TGZr0n$@WaqNP98rgF-if^ov+s6M{-&iQ#iH|qg7yfb>;nK6K6>w$+>LargchjW zrF}-*yOC%~X3|Z8xUNy^p5Jxr{YC0p=j{+&*^|9MR#3INwISbYk>Mrv$Y0vM;mD&< zVf}K;c4mvf|4v;Y05le9>jeOdaWX8!LrCXl z9Es-nyVw&{dZ;hT! zn4nTGSYRF7=&c*Zvz>bjNS09E?WlzPiQq3KsgUo4TYnXNdO^G^AdDB zW^OVkx(CY|ARrvR0^$QCq&hAwdw}V%zg5qW1JWK;Wl>@(k7#t{qtX)?SshaeRJ)C)U}Uufq-cs~NrEB+~`DciRO`o66D8dPti^UpmE zo6KWE_embTS4~OMOgdQrF4z8WlO*GpG~-GMX~d-`;n{P{7R~>-8X3g7H;nIRE3MgY z9dfZMCEN*zo8P>6ah&cyR(tX%w_iLi$SPjWthfMFs-pJDtd+~N`{4023GVS??yRU}= z?agl)yu4n2^pPKTLP*_B=5fOwNI3}F>K9r|(C^lD@>j>*void9^bx&g+XPoZ-BNSE z+&pzRIMF`!m0r$EXk@rSm`!3hg9^(2{N1MjbIqk#f`I7N4u3~s*iqsw$vDMBC3lRw2u{0&2`8Z}7_ zjss*vRS}Nwr}UN7H3CV_K(e@c4}WZaRAW+1f(!A-N)_(njBaTBTcYa-w~+C)BTW5q zAYT&+V$TnGu{-RLx zK1BDE_i;8**))wy(I2E7#&Py{=fNpn$m-U>8a6OYod+$NnSRQ!R_IF`NUdHX2Xo^$ zp|wsy9#D&DR#pFT_{J}C=VN(x^<=R|p8;>5NvPO?G0%r^_}^_SE)R~vj(pK_q zH*)uMSuNqXSFYQ2eUwW_;amADsCZtJ^x+Nhws&Gj5vztk+bQU{)RuqmpVs4d3=+hT z$QB=9ga&BO+}VF*qsf<%={u=v+7DJuDOd{%Ni!GeAWi%zooR>}`;YF!myd6kHWY>s zrNkUZR8A7Jh(5iwqw*2`(OJ@y8aUAu{WT2fjgL?)rmXAo=N+succelGD|JIZMJe@A zVyL9JN!+fi5|39AIqFhdcA1ThZZWs)%I&ILr;h(DWk^2PDBzi`NJ9$zyuXhR_<+!CMj zRpcG8E9^HAe7sVP2W%SFU~>cgeGh2n3!|2?iulGawdC2GLEJ$2uc5`6rC8)4D4&9k z4)548S(cc)YXlvilcHHrM3?=N{20zVy+!8pa_qnkU#W(e1KQ+Bx=E#z=bh#N&vJ@p z><(i64*Qt=9r=G?+W+p6AG|XS)0_QG70J2HnONRfmUJs_KHxGFs|1pnVo8j;kx|~} zQvRCjH6rO|#*Y)X;XMbVx{3DZs`@-+u+8mT?wt>zZG`H)_oDI@aAf{&xGe#{jo|WA z$Kl2hOFBf~F5`l3kk;}2dBuOJkK!^pHT}7#w-9^n*YyMeh?E;zy9>5|qMHGyjIBBP zlN+b@7Z*a6-r9;6h847T`IvsRs=&0#wlXOv2xqwNdU%Y)vH#j}U0pEm$`c)946A*O zDW3Y*dl7O1pcs*=No9kMZpX}?JIOu+H*D@y`Ui`-y*AIF)I44{-#?xciBA&o#{HJ9=nI0T=HqaW56NIK(a0lB<4%?sT!~`wfVqk;Sz5LSub$1p=h<(hruX|YcA^j#UxFY744Wd zEcr{c3xDiC?V@*#+(k~_q1}Pvf7~Y!cWp%digs#tLhJiRbuU%)LKU`CAAz~H&OUds zTO#NGX|t<|9|AlQ#9Jv|S97mSfI+MvYFycn}Swu6>O2;(*ehbGGrTaNs&A zrh^g~BVSED5H}X&$GrlSwzkRtiBA%qucEjd%fOzqoDhN8$qYW6>Qt^}8Jv9;cN{9p z*gW$Lal328dloN+@axW$skJ;mh;iIsPdFfc!>U-QUjz(P!nUyWnjKiTwQRi^Y4R3% zH;cUTvH1LHwU5e75KslC4iXsgnL)qw>Ix)%?kH0%orwNzIT3HG5YNrMJP(|kTMDQy z{MMJWc3GO}SbwQB(BLbGsSK08SGTh#Hk6>uJ%*oAZe+1j0*T$HqW!FYa!oh?B7cu* z&pf0bbG_E)mAfKL^@wfSFO*x}BC$WDAjgBWD+QtZ!8I*HZvI9dtyh*m7AF3S8@4xk zMHm;q0jcnS;~0mh+T)R?Z{UufO?8U*Ry}dh3$Tl)@@w&yxqBRX>BjhVV~CrzYx5@3 z;*VMZRNY^29GpWd+&tdT>uW|<+3$n@=RbC)UbJ&Y>GunM=*Ny^`({N3v@G+$F$FzmHHdN52mM zCn9D4Ag882e*{nTB~hs$Vd>iu?=Hbul=&(4x0B+e5jFZ1+2Sd-XvfTYDC7ng2yv}u zL8nqMzxM$F83&p8P;t^t@|1f`!=AFzQ`O&pWo>>4o{zFIe!KM*&*cV(7>kH;y zF0kcE-x|bsAjhRD8z2~TL~atX-=Vm{@kwgsLtF{V*n=MyvQ4`^U-vZPmK^h zaPe+#By;qoYV}z`jC?(_CP`~+o$J|=-}{L=FJXWK1b$CHGOD+LSgW;lXgRn$#$2d< zLvVck2_$JI=WBt7@E6YHi@m~o1=HH&}5SigvUsNl#<_>c6BFc`&|-i z)B#wJr3U(cGUSzWBH+6^G#~uHaJuXRp8e%~eG0J6-a>1yoGGQ6VuCwjBMz?Tu7CraM1_cQU~tG5o0}6h0>yli^*PmE@n+ z5a-!Mz))PCF^($WsT_ppkx{jvRW`(QZR*1Q&GmO5)-!q|W2EZ~Eh`fA8&G9&p?DXe z&c$vm^JY|Mo+L6=Mc_2FsJc~1=PGx3HU7k9)1y#W0ECGmx=)HsG`h85frD$)4tO3R zIeDfy33_m#bt;cd8x4p0}_uXUFV4yTqxpF{c71L=Z#S5e?l5ND@w3J|ZK z!8%mtQCtpyiYb>9FrqV@}cfN2xCjNL} zfQUfjZjurbf$Ox9QNEkYW9g?urK~xOM+w0qo_&1ZRVLhjS^_ z$;dDAp%v%66=hset{elouLHn{&|K{E4&M!c-H%X>2KN~E#tFGMjA|O~9=(TYe#%yo z)hQ<0Ha@HVR6%>V+e!632d;I~H;X4vkgGH<=8gf-hLVe;I%ma%{HsAX;^8h+r*B;+VK%#8jH5}l;~&MNc zt1{C!a(0A=P=s}g5Vb;{FL>(j(EbmExZjNeyrTxbUiYp0(CSy8ILRL3igACH#YRajnd~&?kTEQ$S?i9N z9h3Uhpj}gIE)Jm?Y>BSJf>?KjTy^eerAxu~dc$^iSGPcQ%Lj|5U99S@hAO%fO9SC{ z1^{GZm1SfvwroSCn5rRIx;O)Y;yWs}Uj*T_43ylTif|l1XmpLasBA!4 zWGnjY9{Lds7446LE^h(xK2ln0!qVFbw(?Qa)UTDuPNnMhI2Rv05l__JtmK|!sag;2 zKY|Ge>mg;01&HUjk=Qfos-|j|Eby)==i_NiG7@d&>qh16r`c@c&WPCZXl6|l$T4o$ zWk|lMD(p?mn>aU7)k2{G&xaeZ(D5R0j{<#S!MXq*1*;fCiz|Ste7hzWa^8pe;x9;P zidT{;q*?^55`YfxE_A~kvU#9A6Q}!x{nvuDc@Ve}iEf^HuLX&K zBYG*Fm9h)L#1FSUptmp6{LHGp!v=&^2rrtWQ-a-vfWNM!^$4^BaP)i23U znE3D7@+AUM0Iq%1 z89IU*apa|cQ^6E2_8z(fGcigW@O#2e(3OBT-q-UtQHmh3qgW~pc!^<$8BDJ8N zc+^C&cDorJ4fsP%g%f8b*P=4UR4Zjdw3Nyf- z`Hbb5JOYlln(TqrbXbsWDkD6cDrJFWZ4+2br2|Rm$yS^%nVY4;H~@n7%ltmDp%sv7 z^W-i#a1guNVRpTR4;A{0Q=yuDX7N3-d(7CgN1E}HBbckbUxkAC0m{xixd0jX$mw0E zB`|Z3JLlqXM|K#psKW$z`4ZbvuttVi$*cUM9?a^CR77JfAAx^1HfXW9_}+A37b)uA z57JutrI+I6m?i&FrNto7j%}#0On$EhqwN$=x=lvxSW`Q+l1Out?rO)~6`ID$$C~s* ztOfIj70ii955;4AR*U+N{ru>a48s*q>jp7!`Vqz11c@_!JI8IW>StEK1T>%~)|uWo zEMGWNe2!)e=y?Im!(nmyxFWrs-~676W|R-(KWvrlAMKC&AFi5V`Rv8AhJv zue8*tV}EOW7f`7_if}`P^0Vj(nYmE)YqYz>6Z~zszu~nZfZwgC!g&R`fUh<-h-VC5tikLt-bjVC6A&E2F*P}-;WaNkI%uSl* z`4R)X4ctnY1K}OHu7JOiC1Vm$=3xw7;O%suttcSQ~V zQx#YUED?&Iv@+_bWqo}?LXWA5a3P0V7%G|Pb||{lBox%Jwbz(FfE_OSK>0LR{=*EX zLl+LaRk96P`!UH(crVSTYu^l5o}z~_D?OqJcouip2_SgYQrJ;fPg>|BhQ=?T>^Qu(HX*R;pl*!CLE3aVS|Z}$Fp*bFJGhirUTfk;*;d(`wMURyH%{#@61$n z71b@0lmoib;e6xrP1;qJwJXX@MNXk6-Y#a|9hdr6*))Uvqr1c`!=BGn4Q0t)h$r@d z_j@XIx`|K*&bQLcftcM%|%a5-*78Ick{}?&|8+uOgO-)cDwv+q~>ArQ{2Q zyh;*WSBqcdp}ifPdlhf^p6T(q0Mlq+fLqWp>`>G_I9R28s-^>OU3D{YO0lhh&>Yf5KWp8|h61 zLW~i=AtmRC94&PGbfoL^%;XfD4XiKem`EA6yp*l~?3ZJ-d73Z-{@-^j{_;YowT`H& zO&7pTEtsKQlBay^vah&za#_Kve5sF!V5R)}+N|`kgz*le6fcQ$5AH??m%vVk8wg=Px@~beuL2Ct-i(^k-;aChFgQ zk4AR_>QDlrSbI%FWY7$&WFYwt#gI+?;{0BFEY_WRFsH-Ua&eAB2LN z+qUuZCdZFsl20oOE46B|zUiyu)e%Ynj(-32SR=L1mt}%9Y zKv_$~(|6iiZ|gg!5BC4Z>2O&lUqLLtjbwoeQpb+j5-YU^<+`LmYa>X1IF(nkO`lnE zV+Fo>owZG=wikNu#0SB9$`+|hQB#ItD`Vvy(uWWE5;x^0Wlk)3qJ-Vou2ALs>x1i* z0NeJyDE41}-Bw*7U%fj`^OQyol7+TR-61@E{q?x=!`$4pWthfBLi`Oiqh^xvCP)1a zvbQXy^3kZ3G2jX|V3#mA`d>S~Z7F}5_@U@+dfx+?y95&bx=|t~R*zy&TTu?J2Md9l zyp!Y(uPo^rY!w@S0tYH<(L7};%JWo_9iC{v57iv4M+5n-T?H)idmB|nbKA-~eVE!w zPcSfaPe9h=vAc#KVRym;G| z*QMHT3^~jPY_Vct!+g9&sC*G4*y6!u_*v#%T*P&Ut6{{!NZ{r1cN^se{z9dWrJGD= ztvUiV-%env_c7;mM}?g*g&Wx7q2YYO#A2f6UpDWe*a$pl8`9E{r5ltFC>}i3S0;8U z#B@8{y7#Cyf=HQT`Zjd)CKwBjcxnDL+(QiM0_)r$c4&{ti!G7Q6!(5-lof%xPOKh! zBZ@i@s#y3=*pQckl>RkcTo)&q?1I=0@El+H?n%azVyYL)eFwZHKq`j27_EOpPP(CN zQa=5{NLr?vW-R_GU%5m7TdeZdT#qw+a47#R7DTAhOh4MPcw31S@7x*24)=Od!Q&oM z5P4u{M&dkt2uQ-wGYekX$JFNo!`}&$*~%L5BR^Y#(Q;@l)IB)Vp9;-(Dw&nY6^C!8 zY8G<>-U3J<8%J<%hg%}QaOwgH-Wdj3CyL5u^98@Qb%sgD`~%03%mBml!UZm&GfK7H zlX_V}NC^+`umJGd(^3oKiUWD+Nd(E?6dn&R0JFd-%1TKg{(Q3deWr4DvO-l{$%u!^ z86{gpe&67~yeaXaBG^97J=+&A@Sj!#dr~^ETC>YgQx_CK>s^iCzE8X-#_+b^K%N#x z)QJ2t3c_5{?CUXvq!jWgY#LX5Qb7GYF? zR0w~B|Mw{$zjh-`PfWyE{BF0>7$BN~M$%Ny^!uwd0*JgQMsg52Vj1>JD{0-UyQEEB z{(60W{R=~$yFzbMji<* zw5x}TGZrU;s;Oh$EbJbvLm8KnP$jNdY%ZP?CrM$%O@nPdUNgE=%Mm$m(A_jgQ#LC6 zZnP9)@qNmp`6x=1j+0a>RhNt3(xk@GI+8UGeHbs(K8KDU zN{s|R*HA4l1=C0xP1n9)v-@q`({7hxoMO;g=lOBQ)efe{5nxQ~b$X;%E?{^pL$=*n zCRs}Ky3eXi$%vi>CnGaz0z*Q1%2M6(a0M5P%njOK?u{Mw7w?w7(s6BPHwR)qO>uG$ z9w5j2gFngBCxwj}&XlIyZ>MgIG!yNAF4Y<8QMCVWi!Xj~XpB~EQ>sx_V)|31`-;Qt ztIvv3uv>+7KLG^KBQxV6+&C>vEwgMuh3yQg)S=~%SDgALWhH=h?io8^p|pRGKVw@;B_s;OENZywPJEYT$`ey?S#;7)jxzLHnce{ zYI=%O4(M@hPf1o8NZl&w<9pDn=vHLEW%+xsM%zZO+h{@FDRGAH7l237Jc%o=rRjvF z=Y5v8pGsM!Td8Fj0)^n~N+BpFEj$k!mUlv@EZ`xYBAFk+&9FmVyR}gVSvughoCb`u zgIZ@NLhfHgmx!nZmQvrbR9opUZ#ijo4mD@Y(E}z<({o(7ZGuqg_}Uof4%a^^e0ZnS z*hlyd_A#N+zJ-K<(1kPbuV5jSP;D9ihd*ERBiHAWVJNunD0wB>5BxSJiND>`A3C0| zWqz~RN~_P7A$4AgFoJjSa0;@(A=T5P8T6F0_-$U-QDd&U$W<o-Uqdu|#u_t|X z2^l=5htr^2^Bi^2ICfz%wKFOfaFnxW)C>GWivy7GUaIan6#87h=dD&u@Vni=6@OW6 z`LlIRsO%Oykx+dfbUb}NBO9lI`bg(STs;Hr2QeP$^&+3k>Oo#*r0%!cH&E&v*Sc4j zq1iHC+igNpH7V=nbYV4PhgZit<4=DB7s7F>u?`Broez* z#z6r@@gK1sYxq%ZC%_s1qrg>gF)-@iEVTA}$}s{P5I3KyUlIpl%@0-Fle?r&swXRA zwa&*;-bLRS`3lRNXY}Tm;~cv^Xf44%K;P&uzsYwyFN(hl(iFquiJQo7-j(NI^lNB! z*kGM2vL0O;BQX=tWEzcxv>jIU2gsuV5+S~x8Bh-|Jpz=Cr0P?k+_{VKBu$3+-p0Ja zOycV-Zd8{lF)hV5jrMj=j;U;Rn8M&X`zHbEvVsaH)BQlB6} z5DFHm$7!zZHj?+naZKeup@JYZGflRj>|az{6)!JUu51tu>EA`W%gq4Y;QNWCe?tuZ z2Osc8*faxoaw2LXjEmH$X&=_(q%z|l%OQ`tX!2!R!j6EbPJ1a!dC*Go6T8K!+%i5! z*+SXBMDo*r|E-faV8X4lnc%UtDoSK6Oq1D;EYqz(HZ3)76OD207tHrKg8VB)#j6~| zBR|B*^~g(mtIs9=0f{$|ily8T<(>0YyiFWw9;(jBW8xc~BUX?{3e3fqj$r3(EV*g; z#ugbUrKL6Y*7zu>ISnc|&6X`QzTt5^+}WyXjSd`0f1_P&)mIPsyRmf9FTY`pGCg(3t&&%IIU&=!b;RH;ZTxr8>h;vff?ba>F0|-rI4&m) z3q*j-7ot{tK)L=F<=S{fKgSv_Pmu*TA0(9>MX4sZl*Rjo2I_YM&PoyRQ+!8V-0S4y zV?vaVaX*GMU&k+Wwr;amoWt8`jeSVEyEF=KzZhjVYrhixxp&1sgROkUMKPWs7e=}{ zu}z15RO}$U3LP7^Nf6d`<97JK)`E}G)uE+S-CkGj854oh@tcVc%vu|@qA*%X2DT$0 zcUo^1Rz4*ro2IrXJ`@jA1Ebc^X@S!Hm~nUln<9;NvFS0LqWXXZs^#l)o3X_~F`bJB(6tAFKx6X8#%x2+mF3z>x%P68Jc)ALX zsxIOuiAlA}f1cz^QgEK*+Vij$@G|12%xmUlCcRE}I@AB)uPa;T_a*Vd93Ezx|!lh@Ug>Yh|H0rqN3%}+9)E}3zS7;}^nOd5FPbu5 zZh>>sHnq2_v=Fm+Et*0Liz%9Gdikn$$j-GXR9Wl{yK%&g;c!G2(uE5d1<8E5PGuh# z-Mug_8m&FfZ6N&rz|yxn1N!r|FlT{v{MH#_@w^TwgHZn?i@T^_*cAj?V)u_4ooMkS zKQ-@sDdvLBDaVvU@iBER_~2=w+f(t@F5GzuJLLl=j%Xx+Ve&C04y12?+cv>C6rOk; zGmaV_==0@eQ;Yz|_zd;Toe55WN2{JhTL^vv+p(b*QM2&zTYv+x5zfsxqCAAD)^i^h zW2zSd^amYZ9OSW?_r^NxG=?71Ze9_i=rj|ZLkY!B9ai-(uvuvB zEiY@}K-cd-h)HS)5FHIup`7^4s3j|Ojrm&ZG;t;u`HOsLk8~RP_<>{Ua`c{P-f4nN;U5il@V)V-AVmQVWXgoAZcois|mE zd$4xa*l1|zH?#Wf62(jA;3D@J$wG2{G1>Ey;WMknuefeeOnnvi9I~n%`VW_uR^a!z z@cKbZ2jr&NOxV0J1^-&C3DT5P%VYFnlwq|~Q+^n8WD2l?*+=&FJAW_x58r#9uxY5^ zl@%fJCtQuYawsIwweEMMWRCRu`m_m#Z#YYqa*wnE^G3i|TkuNWrd-BS_KlJM)C1O} zA2Rq5l?qi)q4yn7H@4W>xXg52X_>?E@rH+)cDdoy8m;KVH^#PYzTvsUPUU4Rp7UJk z9Tgn#MoaQaEu%c_) z=JM3RvU!Tt)X@UIm{2ae*O@|Fl9Bkj3={tv`EMtVXyqE3DBCn&lFNN^gt%1Se$8pRp9<Eeg0s3x+7#Ms(u?O@PvqY3^b zN3L?V@j$t|Y-I1Ml?N~g_eUc}k_JaZH(TRw8=;TkBl^BG=R`ioUldPK;cH_<` zqOP+jy>|yO>yBgh=SjraA45VHYrkW`a9YfM%eD8^UaJ(iK+%E4C71F|R+Mso-WSmZ znnX=Izd03h#BFzzciB07rkZ}XK6Sa)7UO||t4!fvWbccKg5E`?rA*Wx2^d-@xd`q5 zo)9CC!@f>e{7l#hsHSr=%*B373xZ9&&Be1*OE`)Bb1tajadO-#%W6k9_wA6Ocr!n6 z>~gfDH+4$YVM6O$-VQt;G?{+YusJoc*rZ%%BF1jvSWVNGbtjw00 z_#$7bCJ#iGTm!GdI3Iv4E1Wn5?BSH+U^$DMRfwq=mfZ@RMb9@Ylh4wEi{A(Z9B@>8 z;L|jyzT__x;U>Uj1wb{ui4r_??=)2>pn7xlTR$Ae%%Y!P&_CabAXy3>Tq0@qZ>{z; z8DbJ6v6WZq!@=D<{Z@^_oV&U%pcl`g5VK-At!VZIMZ5K#mROe z1K6Z~eHdAn(@y$2SK!368e5F5DNFf43jo!uDHOmMa~muL+bsOz&A-&)HIx_$S3J&+ z4-F6{HI^KJobXIk9N?U$!1js;Wy*?NQ|c=~Q}&59w+%37FsB~4hy5ADVq_WjP*!`uZfgVP!0L@uua<^ zYi30rgGPa91!-v;JC($+MVX!V-a|=4;DA|U%*=T;1rQ7zs)qb1c*b{xqKlbrOCt8&MxVuioZ8Abs4~e*K8Cts|K=hAagOj?D=Tjj5 zK#OYyGHT)iw78Bn28F_D?k+a#O-d|5eq(~+xjs>p83Nsl>ua!VlBt0X&UtsDISmPF zP_~LtWrkLkP6>^zJ+w2X-W7G-9#GpIUGzd<7Cih!koXu{{fMwQQ6J{=$We70o;ZNd zt@?BtBR>pZfQMIF8%sIzDxU~IljDH|=_RFEMp$c&^}N91 z9ijU!6oqt7tAk+CX6$TE{b@7Auue@|55LY=$lF?LFdGQ+GnR1kzqcV6?cYjkB=lLP z6?9i1<1A}Im6))Xt^EL>x`x|<6VKVJ3aiZ)g^SAneO;Va=xM}jrSV}vDYfLf^YDT`!~+hEZx(k)wF#8lH^px(a~mTh90@(=PJrCq z?5pTSKdv%eXhpRbKDKOyHRx>s!k%#_Vj3O62@y5sf^UTxaZFpiwtmaIYwh{Z_s@g3&X2Leu zWX4&$HkGC0948nfkqU>Df=6pm<~GxcJ#3yD(Y@QiTrFvi8lUUhTto1^Sv0s_-i6$= zmrQ|srv32uDX0jh$AY%hgAp7pSbwz<=|)0H)rZ-&OCwBRcXRs_x}~Gbqrn9~iRpF0 zE^C2i#=sfE5>C_ErADSzx+EzBTfwgWMm1@0jeFt_AU*$I$pPlm8`x(r$v?DG%VG$U z-RTG;im&>Et=gELTT6(Yqiu9~x?9;)tY3uL5Zqy_!^~Hd7&--tYY;g)(SdlzTJskd zBz|-vH?uO3;9=UO-xE+J+YZ67pg+*y=nEdIvG}m_c7mu67R`sT5frc`r~=$N7h@GO zCPseLx_Y;ghoj51yG(KJr9Gtm3;X1A>nEV_3QT-ts~4wor~dvV@vf1}F#O_cg6jr4N%*cm3+}(*tn0(U%1Dy za9Z6VOxXA*PK_nk6B{uCJt8I_z?5>0&!S6>U9_{Npm2{caN8OvJ5*)4wn`oHC<=t^ zl1PZd)h>O|a7(g}sSDmFtlQ7dUs^hzckE0kD3#r5v8=^vOJ#3(KuB#{IS=?a<4G#Q zSyrt}aVh0WD`f%LesGGF7%xIrUeq|behH0TG|9MohiViMyr%Uum%efrjaWa+F`H-n z9@T=epo6BBQr;x{pvTc{<IA2s%fmSOp+k?QUC!TSbFwq?rP`)MGsIpg8)U8v>N;T?H%aNV&o;~mOo;zAa%Doy>^#RVE&K{(qXLc^RO9-n5+ zEd{2PWD;eM?gjS^*`|zY3L}<30_hW(G?>sMSN_6zLQPLYihMPyM{q2v%_4UcQ@@DX zN-SS(SP+KY2xhM5c<_%RA)w=&Tc!Y+2lnjZ(m`eGps>kBb=JNJmB4PAgfUJs_{>f- zprl69RbtZLD#y80tukKbq#6(E_$!vVN4x`x!bIlbzCd-^#5=aRolvUK1E;_8LHa+@ z#x;@~#7UFTZKvU_9YL;IFB%L}kkm7b?O%n1P2}#kqOUU;m!>vK_EYs+-@4t@L3g^0 zI259=!&^O~j^z^H5`xCe(ZsoE^hlUwhVErisZFha;w}?=Z`EAXPBB;OKiq?M*bW}}4b_m46Bv;- zi+73ex)9ZDWAvWQ#NN-H!E|2sk8XpLULjY%Gh{9nA36xWh=wIGlFe9O+Zp`*g&L*5 z5fOScJy(9ofghrTISRdc0(Iy{)C99-Tp>h79TWI6B@1%_?R17B?6Eunm)3ex~J zt@_BxwR289rw&gSF|d4)6vPNiVCgkb-824?k?tsUpzn4VA@cUlYXO>&Z+`-?w1x&l)F9k;&7l7Fj| zCzqP~Xw5Xtjr-)M@0ESDtY1U|RU2%BYD3M$yQekf(6LjZcQ(?nZ;ba?^(W=nxm10i@S@D)o2>6s&}*WFt*gVNGP8fJB^9I8kL9Hf(y`hlKXJ8dNU+oIJPv<*ho2c zS`;Q8!dW+@W+2VbvGT?->7&XcpCmsi$H`(xPha zlE~ldRxJ;-t;?kRDgaJYspt|Pvui>K=je}N9(gFgKT$Gt%*Z01i;!!Ps48;mY>8b< z4X%L-viPOY5n{-MIodl`@e*?r*&B=?QbLfbseOw z;8|Gk4vfhWTg2sxPR7Pa&J!-NL{(G5_UtjaGc3R62De@5(JskR4rmLgwOp`*eIQX@ zOnI$3<%e1NC$(fqr32+I8d3VH_zAp!K0&?_8|K^!iovNmwh2S3uQk=D7NjLJ9S8Gt z5zVEO3_4%oI3{ckCC*u)z>qf4l!LN0iHX&*ydD6WMUm_15==RjW!+yf${zmoiVOeGkahgP`rVz8* z)vBcxCpa+4sCdHrj?(-ipc0GWc_w(R4EQ>1$i`IKVx`wn)O2L6?ha5(8I1z+##7>! z4$`83^aTZ#e-+^rME}UME`(r<9DEbwR9(Sxe364msQc^lecOPhC2=$HXB1T7+PDVHZ z4Daj%mJZL++FjVXGIA0VATT34wsq{U(wsrL7fqiXO=Y%qTRWhG_L5%_OydSHGukH&mAa2vKC@sm8J+_fCr2JpT6iRZp=zF4X``j{*U|6{9_yNCE$9J=(u$q_qU3fkvm5W& zH^unq4;F{E$kbPDQyVsNjF`6;_bF$)oeZ|mnP8?RQBt{mFO1t9ZEiQ1_WWAK%`_s( z9P*RkCc|H4mupkj~Q-{v)7=y9t|3Gm_qlH7^NT{eHgLUNMXlhBoba6YrFD+)Q+G6Zfo_n86 z0Qcsbu()!f=-1no+RgB}XQ*a3!6vrB2 znFDJGl9uRrhvt3hs%tJF&G&^clqoqy2>Mp3PX|M%`J~RTCiUS;uBWr0@fOb4Npx~K zolciO25O=>008PS4QCYOGJ|tz^j^Sl3hv#};nWRs)Vn4)4@!!0)=jYmC!V1!(GQpP z|7%xTES5~DyD@Lz1IhtL@~hUj_>yZ(|B@f{X9D{oV-%BP_8088J(yePuB;JZ(wVUQDa%Y`cMPMPlsBX`4-VN~d4utdMJdaam z!xKAQ0@0soQ))`TL)GdEkBh;~?6w-VA6#}8H3}%*i?xdhHfy-^j1Lr&W1`lhmdT_3 zsucuzYf+VD^-dNym1;Bzky8{*r2gs z8J-v}t%n}YHm#^uZpOaeDA`$wX>@>^aw^C<7o4pJ`7TmbS^@61aG2zfTL<){X=JC% zrhc)zVl(>rt-S!9A%5h2xQ|;pVv@^{gf8haWmyJXA#bUvF_w`8sUi%nv&pm=)EWNP z0T$gW_e2c!e#QT9TX@Z-DTs}XYAnUj7bm(;GA<744^c`iQd|#q#g;T@6xgja#RSxE zg%+Do-Y@S>>7J#`KUDW372VJS>W0MVWGLwd zVr2Wd!o5FGHR)IN8@bvkS9a~aGDE)}x2W0lkEoXBVl)W3XjFhB47+^{6fapHqgZcy z%(yo1+kI$}LdTaOczd|P3Yu4Aab4{^vQ04?%4!yU_7@F&V<-lxCaifuv87R(Z1WS+@ z(19?l#ENFwrg7Xj$_I?DQX%)NvU82}F6NV?wVSoS9_ZpR1;<=8%W3r-{d3|j>xQqw zE()Rj&3d%<48s+My8tu_6J*zCpgqYqeS((!s;i3V$fmirIAOl)&QGjCmZldZ90m2E z!g(?xD4=iGCB-N*8UBHUhL$SPaX;%iZn_M~A!s+NyB3Hez;p96qu0VTf2r&W&-FBS zSD(bn?V`cUGDhK#J-AHqZklr}jh97pYNBdXoTo)83kn>wb1Vnv*B@nRwgEaQRpcBp zcJd@ulUsC%AN9bd7X)S+%

    ENrtBEs~54fZ*X1s?Uj{!;yN8dWUyH#XLmp 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

    b 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 qB+oRk8Ov{ai7Nc+Bd$Z?1E?Kk!@vE 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 z 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

    @!EqIr zl{6^wwq%&rp}ZIJ#EQqjV#<(a3aG5Gt#=8z(iG`(E5NKYSVsJ-y=j)2?5hi3G()6K z;QR#f38UzZMrPH1NtE&8ujkWnGxoUp<@uTu9CYrb4r% zDfhRUljJOGvCFC$p2^yEeM3oo&l_epf99j-$hxbK4_KS0Ob&*OkwJezpZxaNo!5Ty z=8--8rP>5w4oo<>RJ&WBNKh=(|594ao|VPW3F zR@y3kv}d~yIatNqY$XIKX5KjQ8tk(#ALn_xJ&Y~txV8K1n(}maGpgCsW$V-CF>4L* zRIysuwUi;|)G48%)N9|zRcf^7cejpxwN}^5R<2do+rtYr6Kl`zp4~sa{{D|XkKYQn zcQ?Hb_Kh3H6c6Jt&r|!PsjX^pt96`Z{bFfB-af4O+w!=qqXbF5<76D-va$57n>7$; zC&aa)kyBGCwlSs)fl7p(Wc~jqfD4a3__mzl;8P?rNPKFl7;lU9ThTv3OzJM zvNOg=st=F)C3Ftn2qx9mv@bRZMcY~`(ekwiFdb5wVl++?q~r;bX&h2yws_2m#5s<- zouaG>?M1ZT_PFe`PSu!(1Xn=x7#cZmxrHYD9)!S{Stln{uT^nw{U-pad z-L?*FboWsMhiSmKX6u-H`K)msAoRGFj1DII${Yfrg5HSuNkD%fsE_%+USoOn9D7FC3MtEn%sJWPwz&t z0`Ve6{Je}TUi@lYQ5Sd16_R%O>bSC7j(A7zUFw03gJ=d{QarW+mto$Tqk|X0`Y41f z_}6^Gs7&ysYt@?KwpTn;e-q1=W3Ymil`U%N$)O^hOFopyu7YhE*4ip^>w4zbQaTPj zov+$r8b;=^J%zMk9Av9DjG^AIW_Ay{6ZF`Z7-gELW^GxnB6;pV*gBh2rm>7`H>GOV z?eYHn>U4NE$gpgibW-x6+V$c3W?MR>cD$Jm<7wF*f9FS^|D*oEv)}iN->n7mJZi|w zA!_uEm)o!ZPF^ot3+vWOg;3tsXw#^zCGWq6*Kg0LigZ)U%o9=JE!J*&Hd?RR?owN@ z?q>^&r$nNC-}?$2LafrFYxG(MlJ=sdCy4S80N@tN2sV#ZCD{})>jwd?8v0CE+mQ5%B?L{Gzj=1q@iNCy=oMj zd#RiPF6@x3rQV&wkrY;cX^vGbMr<{lms6D~w36n|t%Akeq=^#Lo+gJd-sM zEtBsqu6x6Tan+!`!xS#2weib13wxyRE_Bm~+!jDgb4;tMQIr+DHs^R)sHn|-gl;F- zXC&R&_}q<=SpFc9sn(n4y4kg)IwC*r{K(m&nV71=CG-~n1>;CKZjavbvAw& z04Epij&4Al4B%z2@xOI5j*=h{A2u-LtD2(bh@fZPj)J71?`&GWvt#}7?etXDtew|N z(V0z+Cg4*F8OkwRh(qdEwrrhyps6?518*ow1edc(REUpc{3MC2m;|+vgFAwH7jPom zyvSDYrvyCAU9jNsMzJ)ufH^t|Vy{5exuK&tQZ7^+V99J|NZ?sVCXWM2<|AXZ!csG( zL>qyT7#+5B3uvA&ma--h3}NDwO(HnzhaCI~He9OWe(pW!Jhaf##i|;0?snx`;ldN% z%wZ6LRzoe2Xb0)b#|Ap2-mf9y^jg=x`NqM9VWR2?8}g?xRMWL+4S*?-NX+x#r(95I zA4Oygeiq$dR`NG79PV^d$`>-H$YWZy-qe5{{6qMCH(O}@UtROcyi^aMQ=`r=^I~L{`_BzpMTyz8#x%cg-Z!qvGOH8 zRJ%W4zyAKSZQGXfvQ`Qua^Z)w*3^91aB8~k+UC3PTe!q9A?~#Rn!Tq(QdL zvL{wZzqE%$rdNW)c$Ue9ZzT1gWL2T4l%id=IfD{>M0(AaVxy!%5_3()@7!xi@Rjxy zB-G$CsafKH_}+}n)+Vm}=)oyCaTdP zEYItb2p&Yp(lWC1yCJ=I><9Cv@ilZ5h9TYzIRd=11fv z5hAig63dtZj6wQIp!=|Ris}8EA&OLMOR1bHJ{Jw>ah`@W=6=L%SQ-Nl;C{zbU6mkB z1}GiesK>jY7WZ@)wGGZ2#bHRA8IHSsCOajUdlpG)AQqeO`e3x}@KN*gC1?8YZ}W13|KGE%2tfn1qrQtuO$iqn|$S?_d|Vp9d!Y1pOwzD6-t zHZWRI6y-P#_D?p-Xq6UnOCl6BWHIOm5~TtKXPMEw!DT~y6x~&@cX?K`>@J2_qDfMc zUT!W(3(wWtSE>!_3)Yge8>+bs23q5dEoioWpixCc!9-Bg89S342W_Z8ks(3f6oUB8 zY8mk`_WbleGVwl3?#hrssKlppUYu!a>h@pFU9H+6Y z+u@J@-nW1MpVC)v)vU1~^5PDb2=nyty51a5A;!Pb>lVMNFrx$? zmzdx;z3lX2&d$I9elN&+Fl`fRQ4Q^l)>*ej4NKaSERc>8@ytT~ZKhqPM)bS&ODG$^_COv?B;CK6^PRvJE` z$<7;BTS#cpt9ME@G=j{Ylc<%3ar~ks21#A3L?EG4fsE&^ZU7Ei;`6hZquWG0o6_wV zpGxJTc|Hvs+SYzU^l2&2reUl4v}p=0<@VlTT&!Nvm1YKdt)bwlJsa~~pQ?C@+j z__)>kRq>XxnSJ@VkpvID;`CE5r|C9!X2`>G*>u_J-C^PpXgIxO1hcqTW}`JNrB$4t zry-G9TWiyIrWS;K)KDe^XYheYBe}@wo8Aa+Wdm+Fq?{>vqfrKm4Et+CtLl#bEb2G` zkCYwtnG4oID+7;+#l<^ZhpM53LD|nh?cv!I>kalm{h!b?kI5@AbiRe8yPZ>pe1>#N zbA?WGAts0GkhchJ*qB66T}c})`rR2cyCZwt4KA_%uve(rZD!}C^g|h2t|*)9D(FL8 zs-Z=v&4#X~a9#1yE9rMY7@b8ekjRaZb!RLcqKy}rBUaU-t=Mpr#W)=Ts0aQ?RaKUh z@*0z92FvT_CJ%$WK41G=Asbt^(s_i}m{YiYK3S0aR~zPI3@0=W6&gz-y;7 z0(aO;(=^S;hVkR4%lYc9{|Mz$QskaaJH+MIrr3^`?oMT^t5nQ{N5}$0(|SE2=Q+L)?&#$rT;_Vn*8gF7{5ilun3D z0j!3gl!sC)L^5%TX5?l~CNnd35v&*q9Y7V=qDh2}MDkZ8^^n|SwkuYtp&>n_B&hk# z8uELMySr!lXigbIu3ICyI}V9-ROhUxAP_GlS&QTN-v%5Ga29d+a2XykI>(qoe_XNVYLYMRNAq=4%N+d-+S z$+7WBver8VI8K{E5;G_S4tx98sGDq@VNL=DFs}q`SF+2V7G1igbiGtt&_qF2%ox>j z?`=jL-d4f-2f3S`Y=YS|Oic1bl+erPp~nlT4GV@{V?yeH_6%iTiMV@)pdd77Tr#sG z@QN8jTLL$P8{#lf#M52GOv|>J;@=d^2aB@xeJ|FoR?|9F<5J*%I#JQ zpo#k9FJB*y^WDvXeCrv09y#~O^YQiE=ILsJlRK^&UX^%#s`2*bVGVbu;qkm)mU?rV z)y6TUr|Tmm2|}bGG)!FwmkjJ>dUhHIUCB_Kfvu!oGho_LV%s0(+H8uLV;9y`@C`o!ZYlEbJUBWh5Clf93AL(R#J6XxK2ldS9$IR8QhlXg4AW(TIxJY{YG5 zzG)S*}-a%SSToS-iiS| zc*0weD#%Xj5QReIJNdJ5(4VrIr^5}-R@u7rlMuKlT2hFm6gqG}AM?+BaAM>0eywaH z9&&;&cKr1IT2Wl&=0ld*{o9cWJ0!Y5BlscyZz6eIEQ zulx23!CLt8T!9sZUw?BkNSTcR(G6Mh!-n3J#KWAB%tM+Ou-LjoK8Gx0N){|9pLOj~ zin6V*t^2odYTgNmFEs2mX&7+ zx{w|8Zu4OrJ0#NUDbUYC&UqRWp+71Smul;#)0hDYz^S(*oFRxkKE8SR{QYfP-+%F}X?*qY_U3qVy`C>y=`z6ev42KLTUmxQtz~tr z)}hA^f7KGZd`sE{(cOcFBn!R%=B8)5M#9yQ$9_0KlqdCVX5aewgOA>SZy2-SA-{K< zn}t`eu7=9%>9Vawxp{lYR~_f$&wTTP-~RDuLz?oCXz}>^@&5Zi`B4aTQ*S6!!k}@I zei*-LnnHB$4WNIA+Kv1ljQ%1bcW9b9r>B{=H8NcK3TKo~vI_yE#$tF*iNbP;!UlL< z@o_P`vI1{uKOe&2ME|dhLU%e|$f4sGB;nMi9CIqI@|9-hVseb25y`lJRjhj-z;Xe_ zSu#~eGW8gK|MO!%AEaj=3RA=ClbmhW)TOL`o1u+IbC|`Dhe1tkNK~N~?&xAovF$K2 zW~4gIlCXhHwc*_m#drbx72~KTF*e@h#2{6Id+aV10!a=-xsYax?uj_%fzPi}a3oNF z45gm9i)@c&s$7oMYBQrM`|Z#x&6kJFCu}$fS^ROTnTi|IAD7%75+RrKRx61HIM_%z znR+aC{&C#pD+&_Vn^A6taUO(p^@#@h5U3&3|GKr!^ou7>onV+VrwEEQzbe0y`FQSE z6H7UHGIAJ%jg7UsyUS&Th{X=A@Kj_Ul;4)iZB-xtcBm!@$2W)+X?1nevMD=1lJUug zO(l^^otc5h+PPZ7fL!jxKCVOWR%hYi9j+CsPU^z~hf(NM#MP3-(aT*5sF@PiiD}?6 z4lEj6vxQx*7_Mtm+|MZ?Z%PNl$tXO^iv%s;boO2mtk& zFUvLgxL+K{ek?4@+N;uON|K9~4a_tUaIe?vaylG7eECuhT-RF1aa@<>=5##G)2p`+ z8}EgEr+x`TxER9AyNS9thK@@BzwGhS>z}(DT9N?#RPDl6tv$aPnby6H(dF+oweqGY^4q^ zYf3@++xG3?R5tgS^&i-WrFQFMOYcomBD(4tFGa^e+>)3<9fQG=fQ&U3~ZS1q#uHxlW^}C!U zejQRqf=8~1{~JHVb_Z}(b6!1~4Xh$2e11WX_n5_cQLL{)=}_Zn4khYpP?f+O;IhJtsChs><;^4rk|@jec>{29oPkI%MJt^x zV=WEmsVfaod|LPzfwqq+?evCsq|SZ-U{*y4SeMFe-?tH_|Gob|06LWj908$A11VV` zgC(iP4!^1P8$jYZr{pc~P<>mZ!$_Ri?R(AC4~ zp;ob!=l&)x-)(BD7%0K*=NZt0vTne-(s~9w)1k&; z=mGlf=5U-xwUAPthW^XU@OZ5DimKBNx3!lj&u))5#~IxZ7m>d%<)IGH?*NOK-C&*%DumZ!VJ9&McOI06Xiy0g_HRv&g|= z8m;d}C2+qVWKeA83JX@%q533lKjncdkR%#~!t$JrbbKkohD-$A%^~y*mp`0xVn?zX z2Z?N13$Ox1JuVFSR+Z`c{T7aygkoyA(UL4tRp4BdX^2`IlJ`q<7OvBxfjqU1H5vjI zL?A%>i*7%eqtD}GM+VN00@!P%?s9ZJIHJ8lhlnWtg~-(Bcl7}iwxk&70*Z8AeB`-^ z&*^X5om@ds+4}fsLz3P}v~I_baJ6X@-Y1l-9cVN`97)_a>|Pjct-+WfUa&jRIKih! zTiT)wZY0KQHY{rAR>zo!xnf^}Um?BiAHz6I0W;U#^=X=hQD|`F`=0}SwZP2eiUAAl zd3qXmomcTtfqA;zNzeA#t5;Flhc8}Q7mQkBki&F%#|d25%{P6IfD>8NbXJMtr|&fO z%zfRqW{U8fs_Oaj)@oD@@4vWx_UyLQnj~#oc{umrK8*)_S<0qf-Wh+7!{~}t($)q3 zR9t5L?|abS$~sST>NxH7>FK^x57#hHMF!s&E8Ul(h(d0(qR+}A+Q z49`x-QmR%RcOOts85>{;K0d_sfL;~SkKmH#_>qN%cl%6w1EDf8g8*k8l4>R~(5hE_ zqSJ#gkC070>L!e)Q~h~xohJ&y(y<0^jg;eLp9$|loKE&k&n(bjqmqCZgMS#`&aGys z55J4Qwq4*x{6eUGm=K3~SmZzQt!JCI*O%?n$CZL>*R_eafSp#kHT~joW9#yEO1Bd- zHlGNCTLfj>5)LjLRZrKtZ7uT9!_wbJh5HX)@c1RhDGx0wRj!8J?r&s%j?m9~NAUy% zv367CKAnfb`Ko|ySw(H7?(O!(IVlO~S)kwUL&y?RaPi7GBtKcP6quv&jGz()1LhE=w;5Ymo*`BQlqI8Ik)F%_*hqqgxG3 zfFi7yvSD~qtzil^9&@AAhajU$$tbk5u0+zI7*Ax?aAvk45p+ZbrDdj(oc~@ z=%d&2-Sjr$9dI|dg6b92kK^8Q*VXObz9(=xaK@0=`sw{ zG_UI_F^uDsC12M|Z$E5LTYZ}IO%OrmXvf=|C}}CZAW*9~@pUaFfO^2uFhk6!6$A0q zqBT!?aX*`Bjl;C91yvr(V?rrux1RG*WD#IM%$&Y+35CWX?B+@qZ|*-mOwY)mG&%@H zsb~U43D@hDdNNb)xmO7dPAM^=9DTSfJ~Y$9;9~nms#gMFNU4&8$Q7Rrk48xNI`KrO zzL*5C4|(TeoQ#C4+yDe}!vfekToWt)c|cW6Y?AhkhK5|lD$1x}D>R@%_(s@9rQOey zloP}dibt;8Z+kP(sIv&GZfHJQ5)yfxWzP78;{jSjyrEdGcm=T!A`WEXBM{;){Mt{w zShY~EV=GqFh^+W9rL|9<7KNa5r`F&`97g&2-7Mf6eE#I^ychE@4LvIT_D_0gyx$bmPg_3vbDAo!_loq5#YdCH(tjx zUbRB>lq4(1^u}RmUd;sFyWYvlndMcp%HjEH4W&pViJuiOwMH298ToGJlq5&|On+aX zC$AniGGGuAU9y6+Y%PSl5g1A9qs7(s8BlfU)ti}lwLL9e<{@(c9Lp$ys#L*MXGyn~ z%0Qbj07B$1ix9i)M-Ra^FW7-fX=uPq+CEj0ro>&L1$~zm>#o&@1BFWp??L9idhkTm z#Y4*v9ZG_X=q+<5?@}sTIIKZ(Y8=TMGqF}a={yk7M<+-n@E!ML9BDF4vUvR<5_F z=a%~-GJUd~EB0XIp6@(bAbzKqttDg)3)YV6|l4Kb3Y!*(3gT{Co zBqiBQmqm&Do7%E%JtRTItu_7V{SQxv`MRv1e(?$0*A*#Ph~aKXOv`#;a_?^Bz4-ZJ zUKWq87TzMFHbnxTjY3bBfq+EQtqWzl1g}LTS7}$0l6-K}&~}0Um0+jXJ{dm7#0;qd zmsKpq+Z43+b6|CYJ>vfOsn$wt_&PSYiJ`O9$c8yYw=hi2EkG`udcf-#X^BKJgeS*% z`kNQmOGa?PvY~7d040sgTB)0X2%rI?d*`LV1Bg1VK`m}gn>9c#t$H%741E<4=BDA( z$8{d0R7(=p%_MdHj4mBysOSnE01Xw)YO8h5vht2%FI?4jG`|foRNNraD;xUM0`cAf zCD;msg-cQDzinV4;)PDzCx~1jRO~F(oG_c2lJu29<_wej9$qL9nQ*fzZZATJS!38O z8(zLU;4_aGus$lzl47CPUmI5@)Z<^S=qZG}6nkc}!a`t*wv04Klz@q3$Ag z)P~j;7JRNT35QZ0Nj@ETNdjDjm1k-$`_?MB_iAFv2lP~3JbxMkk2mqT+_rAfnzzL2 z267X!tD+>#LqU*^4s{3VgA4F5xxx*H#-|G~^C1G$@SZRuao7jn-x2bi%qwcjzFb5a zRgDGo&Iz-y3)qrS2gL%HZHW$hd#S_s<{J}1-QNeT(LokEp*j!Nk|gdB9Ic+9GA~i> zhjJ3^a8l&GL1>;0QQT4STd?Mb#F)~w;!a|uOuF0Rl5(eQND>a3bxHl6Qn*}m>a5?C z$@$r~{@-QmXG1zdmPc#R4j=aCKAo?RA?P&RY^7cog}c&VEj&CuVFGI~69GbAt(vO! z+@KCJbYQU!FQ1RU{4*c_+;=`Q3&-Q>bThtryL98GAlG#z+&1)+GTcmK)%x~nTbJbr zpWXkx|IlyV9*56fExkuv&bCEtsJNj)J&)rs_7m>uTItb-O#&E$39L^Js-hu5V-YWA zdt^#O4qBpXRnRdoGE-61qY1*%E1xkq5t1}iPyrrGonSS`pwy60c&QG0^9nJ6@@^85 z>gCwX_p8kr_)oOlPz8h5xDc&TQN|SJp4A>O89KB$2o+L52eeSxvSwfmk}(fT$B%~+ z<^-Q~wt_6OTr}S&Z9^7|<=`^dA#lhq4{|#~rhDf&DoTVg-6lQitM}FqiEYo8CL*byI`j)Wc>=t<>JDO0E1xAcDF#71i*N zWllmH#)a)?5FBeU?Ep?1g}8=GX)}N{q?4uDYR-XhI#`pmD+dfoMoFv@gsHpqbN*T@ z87$Q;hso3hB%U$|@(xV1HL2=CEs4R0fn|?Dj{Z~DV8^-8nv8;>O$W^OUJycq&{KDy zzM9jyl=QHNW#eDf8f>3=e%GKqjwxWmQ^Z?e0aXZr>>$L4I}A;bKgV5B5KCjqRCecj z5f{Lr>JcS8$%z%VdQA3BlQY3XSBqtT*o@!H1GwQ<@)>6b_xl}IGb|>LsV;xTOXJ}~ z+==v{-Mtqdl&~hzb?LCX5!rMVDOAL!aqc}N=~=GGFm`5+a_Z1xsZA2)Eqc&Fde~AA zr%?vcs;)TdEc>QFk*cwQh!O^6-`8*EElBO>noIA}BCu%T1vw81?Im=!lf;bZl+eOjPpi2^Vo5s`$3!65J^VE+TZB!p~OCW3RL-FmeKR?a+ z{TDX|c>ALdp1=3}7~*u8#vx%oa!Rp(&lHm!=i`fKr>}i@`?KHvAjEe6+1r#wODT1U zEj@erJf)bW-5kcHY|En8btM$dGnRy?7LBl39)>;;I!@y-=bSCLxj5Jrq87GIH|^_# z80NZOs^Kk=!rmTFg0|el`OGlp#WIjO1+Y$o*@P{;Gajv93Uqs1hqLVyO(^k!$wb2S z`nx=Rpf5>Kk8UmTT|aeaKGXNzC(1K9HgV5b_&(9et;JYIV*d z&aV~}5XWKQd(kcduS0-&09FrXoo<5M&~1Iq7H%qMzt zRm2N9b4aXF*e>wg!sUD0lUidu27*WZ99VH#chcYitbV_lSn~OthScwpMuH!N(Sx-t zY>6X9hPy?vkOV_~DK|y7DJif3bh%y!UYY~=w6G_shGNcqrtYr8&WiQ7aQ%AXfZl2d z{vE~l2V0wDLsKZ%NRV*c%Xvhc_+>ZVWsyXLtvQWx7+S5~N(ceTPh?}6YR}1CSNv3= zxIY&1eiYJ!Ub1tcDP|!qTuM0-YGRvrK*=rRHjnReqjnneTd0z@z$u4NN}?Q83sr_8 znxQ{wBwI7hMDwAgG{qq6wgh3@u@`*g;c^`=W$9;m32AT!0ng6PxzF?Ea*aJr&M*0KEcp<%%KgXmQqW#x^9=y-v8{)`KOltnEvWt_^Tg(@NAx^ zA?v4~-Me`jw!*sgBlcB2_ZiIN`0@M4fBYZ)*?)F?v}MJk{aOs+Cl5XQ{2T7mXKS}& z2RBKM$CE@#tWz=goqJUn2KulLxc|B=i%F|m*_5m%rPgihraSXtZq_zkzaoUUHjI;q zj3i0JL{E8wyM0?1wi^*y3-r4Z=l>-dL_xZEdo}YK!GEe6iQ{(FFk*=+^vVUG%qgXF zRRsCQ(c88Q8UmbB*5aI^N_67q*byTa5-c_zG2IO8ft-D;`vkpP4OCL>xOc%&Jykx< zo5$=Zcc^^8W>a$JgN&&=yf0dXbIYzONiH*FqBUeP_L&@kw(bWYEtO!r!dCF^2yXdW z3DOS3>t8{&dYRzI>>TD z*-1pAWJ?~z}7cif#b63SMj6#;I+OBfrqtuOcF2HVg({$}h3iwn-g4il^A2Ze-h}@2e7j+4P zIfI$n;$c9Y42AY-4BcV415Ne18VM{*b>HgE+9cK@-nhM^GwnqOA0=x*=3YjlbV%y> z(awKi#^O%1E(v0;`p<-vol*XqSK184emiixxe^>=m*#*aDONz!ww?}QS(V#kE@<~hnd9iv62L2Fq$ ziC~x@B|SV`-cr4CUF+NP8Uv5LzFcuoqpSj3WFAgi7wwc6ckjm#zyIlvbEr3mH1#Oo zDHFHHQ_qD<80K`EhA-bdM2X`t4dZZG9}LE&PuJ^Ermgh0Q&Ia9fBt*_*gyU&A%qV< zcuzY|uWYq+Zqm`2^3QLM(tq_F^zo1Vq3?YE&o@cqhtE1^`Y(UJK3xBqv;HrBSl=mb zS*@EXea)&B7g{CdyTTKL2dG4iMkYR|*;}iWxlr0gGbPB8)7RUg8~$2C4(L>Ti!Fhs>=#>M0PqmBzE2A%(3Zr9A zRI*@XcY~qX8i(NNBa>A^>ROdPJ8RMhDGTaG_V6VmaM-#bwGX&9jQ4G2?Fm;cIBrcV z;{y(J2hyDCylp-aRJ3B^Ohi&M`ml#*r*YW^;V3h9#JaAip0CwviU|!JISjXirc=rX zdDeUt#^X4(st-@gGJ~OVwpKASpvN)hAy4_mW$T|?fG53r^E6L`n*G)9 z{dmaf=fC@no74E}b?;T|CPi+Cu#|e5^7*VX=>6ME-Hy*c|9txN-1hmCug~dU`_1XU zc`4F4#d2OQQQGxY5hQr5aH>uw6twd>J&N5eFOeB_j)I$_p7avMtM~_X$-94r$#W7H;QTl;8Ol}x& zkZ8vDs%Av07#o^s4*$M?+$S5-F+<^Qw&L0uW<+xsT<@e#g;8waP;P7ICB zi$Jp0+um{AClGP1dtu@Ex)92A`4VROEIQn4*6}%a`~mMlhdK4_I_Dl6y(=pe6Xg5_ za3|rn}-cgBAdLjYYsqQ3Wfoy;d>c;QW(5(-A^*5zO#6D!^h!9XXUmi*ex5rzFDPf^} z_}=?(A3lG4dh`A_z8OM%IByc;%NI9);MiWC=J%fsV`y*h%j;@Oli$4bXm%;B1XI;N z_v=6U*2gc_wWRLz`s(Siy8)~Pz_;33&0Lp2#vD7Y5@kRE^o_OrzFe(X7U~d575m0% zcoy^vVAKTuT>qG`Tw}?Oe{QBqi9nzDBe!bz{%ibyFIn5Z8t~FF=YlpmdPSA%e2`ca z4W||rEO$`*ZN#peu@%p?zu;Q+b`ZX^aiAy0XH$N_pyg&dAeGEeFIIIQa>ZFlz&{5d z@y!?W6tl&)Hl=QaqV&_|eX+IKR@$>6Vf-Z-6^^}`*{f6aswGa?WmoGh^#`@PENS2M z8HD6#LpsA|ydvvQ(Azb4mvzo;6RFLJLPY}9G!aPwXABE?7Pz*n<3?0_DM`qv-f_K_ zP5WJ_222C={2DbiseO|ZebzZjF&pqUTd-B3?A|0pRU`FvK)|a*J!1kEX6cj?F}C^dXjV2IEt)?0ADJ9x#?3!!u22oR(@NfO*Vj6V{iOq^BN4G@`-Yg!V&bUyHy-9N> zChvWV(vy`Cb}4(Li|}!_evpm>gH%NmE5dM9(bMRwf>A9YEg%|B-=yS#!JI{M0=AHf z**Nv9+O*~9$zM>MiWoiJupx0Qu=z>?vRKr-Lt>*u+SYqx1UkU|Ig{+M8!ywrU`))b z`X%*^!F|L#x!V(xQiB%?en+;8x>OLY*4WN+ES_?h>?ey1k&fh6tvL+C9uC^;PNi?d zkhaZ`{iGm10Vxo4WUJNqy-Zj&mS$Ew!Xp>sspr&VKi<{b0vrqk0jBSV=1NrV?JY!M zb{}Bw5DsU4JcRdB`YVr{^sQ8#$03xtt+56bi?nPk8t7Q#Ecc4k3x!uAv5J8!MsG}@ zQz990L;eY0Km6YJj)!r0st0TK_q?^o+9TZ70Ye#($gErOehv-m2bpYIOFPU`ww?t{ z^9(o5zDhDEn2+bz^Vma#plsk+47&@pw#Vyb)bP*y&hshv;mm&NFXw;g`}cq8X~{sT zUkoxP`Espmwac)Yt%QPK=PAue|pwFUG@|Mi|Aet-QYe z*M92mKk&Ew`18jtr%Ah}|FhaFqZHv+bsBEXs8rZ4>lv%kg%gOHj$>*;a8^>jAfdlF zkkLq}PObg(Ka?LlTzoCBV(jus2vlv zaX>c$0xd!|_rArTFRPG1j!srdFXp^fBXTFH*Svt>+qE{@MxC&k2%;^O_9nCUi8$YK?Q)H$$FMX1jZ9b)VwH#|a;f z5e>PT8sBd;{=AWz%b9*70J3hQ$r6vUqRsXWz0 ztZ3WmAMR}|K3Vzoo5S4VDarSqmVOU4^ak%v`zU3@DG4-@X#p1%?}gO}3DTg3kHvK} zWx`g+@{FYV1WVsJr9bfA?V;mga+A_;UFw_7YORJbIbt~5w$Xw%rD5!vLo}+1ISm#S zw2dK4ss$pU%@iR1^|CG7b;tvbb%Fz(A(K*gc)G5o{JxjtdoNC5jMFjv`u+Mh{OIv} zub<9qEme=x(4Y!;e_dPZ+kDJ1#W9b$YI}HEuFG1hnpKdfv{lohOX;>Q^OUsN^HQFb zZH$s?i;LcW|6Jaz)k-ZoiT%abbx8e6RITT!iOK+!1{OtONN!KDnlS?_Ikgt2sk;Ni zf+K=+6=9lgsV}v}Mo`ZAAM@Tgr|=Jc`oLtu{0t_Ypf9*VqTBWo`*CT(*iuWzrk8i; z6>Z)eC5s$H5Td!=cZLN``|%h24U%g=W*9&QAie`Ic6{Z2{dfbSc&`yr$3Ua-y*BlAqog>IeH%E zd`A4<;Q?i1llXi}?Yy@B{8!Um1Xx0Q?=Vb5C$B73AGX>TYvxX;N^w892*V-r2P(DS zro39)DC{Hg1UBN6>1m9ImWYwCXSb=ca-`lx78IY+dI?jjbQn$s&~_*~I$$)eXWyyA z2MfFpXp*dsKFc^t-*K*jjJXaZelY$F4V%u8GmkR#wXcZlz2KNYg{s4pgE4$_&Nh^) zY-LkTj7M&cgp6ZE36f)CX?vOzQJGTXa0~$|Z&ewTtq_(sJI+E?kG1G=%GSbZk`;Hy zGjS|;t`r9vfXNZ`!Expo4qPx%Jdrj}wF1_h5;z1&AjazsKv2!-ffJcq`+p2$61z*d zPss16$UYF(Pb^kgEaJzUunOQmjHS$pFpWm7E2kC#6Xc@wp?Sx<_=)@}6S#4~I`<$c z>!pCR%xC%!IkDEvP{seXXXF3+{*6TUwAm~M5T#=_X@?+xz>Xp}@oTs^O z@#$tL=hA9VcmC+dr&8PhiA6lrRIWH9U1UO!JeR z8joAq-hb~le5n>lI`%Fj#Q{0-ZQ4@mQe)~G%{wG(Qlkw39ILgAwDhSpDdi{$yFWqM z3{A%&Y#u*of07yCma5!;=mK;^WK+!!S4TDpFuE9x=6$fiHc|3!E2bCj3FD17=mO@4%-5te$Qhf zt{_lU=lss4RUVRxDJp=jQcTU9>CWh6hBPp`!`GA(d5F+%^S!#EL2rm8tD%Gfh;RP* z<1p@hKxFbk#IgIxy2~f{Q?QY~l{|%+S72O)E3g`z)S7FDxz&{qDKj|Y?&D`+%g*Ml z@jOiUs*F{a&9JsHU#7<5gufRIr=lKiZO~n zOpryCH?k7Sssxn_piEt!!Y6wm918Z3#PA2RT{Y%NsnATM6BTmw^mJ^o3EOCRC@K3^T$6u z4u@1O1$9}fP5=6@-+uZ1`*}#uW>lx*u(P*`A|?6E7YXBbs1DLP=U@koi#b)A19x1! z7)}msKqL!pr|#ov{pI~>eD~QLBCO9F>iXCnP5|A;w_7dddDD!0?Obk;w>C;5e6wI6 z6^}Nh*w~gqUeAOq_O3rIHDI()%Fm^k2UTRUWJ{q+70Op<`AYwkj7z>sLo`&^mrcQr zQ6%8r${cwNxWA2;jB%eY0}AF|vJSP=c)&9kbyq+tmAkWTti>k^coAgM0@;r|aL6C^ zY}PyuF=jUtZFXM$69%jx$svmr%pHuvya0ixzfzNkcX-jRpi;`Bjg{){l;3&0u(;c* zJ*`~%#=#=&1U@oFEy}QWL&QG`j7nyz;UEKJH>zeAN+6}^5;J~zxlF+Zu3xr#1H#ejZn`Iz@Y0&CxH+1 z&0$*BxEp1vNs^B5h{W;fEEJT$Apd59R#8N)8-DBc5`x@K;l-TH!u_%Q+An|e-~0dh zD{n5FV4&|b4V*ffa^hg_Q*B?IS4ru^=ck*SxzR2JViLu6n?2acCYpoh9yfnVx1SdM z&a*zY_u^}})7>N@>-iF?sa{R3{XPH47w?}kr`u#2u;ba53@W5nt0RoCqJ)GFOwBPL zhoMbsHX8o5FOOV1Meh6OwQBg^e(y&chW$X90eQcd*P$Xin2|R2&q9tLoWT*2=P^zX zXF)kpFs-q|??KbkXk7o`=^~`9joZ)b5jtmIiptKLPhv6rIhvX_HAQ1{R~yAw^ZT7*Oz3mEUje_9KR+MDBZ87cyIQzbB?DhlBA;;(pkF(H zu5kVnb<-{SG6e4Vq%KzDiw!$te%ha(Y+(r$-XU%p&T_Lx6 z$6!IL^?A(TIDuDqUi|a?#~t^b=Tjh1W=Os{91>zBN!;J_9oK#1jvJGExh3J(XeZ$I zDW=B6;OSdGhW_HlV43^W^iCP5iX5w<()gt}3zkcfPc&+^-wy}M=w);!av)NRS z^KdU~Um+4}jBmAywc!_jCj7xa*u|}S(Y>n^OwE`STCK_3`%Az1@a$MqYtujFpE&&d&j+&o5dy2}^?F`ZV?UJ-n3NN1Z8={b z*9$$E4KiwXhgm__sc-McAOGm(KlJzga+cqDRgRFonnTB-e>Y}RHV2uZ@B z11}ic&=%2FBF^UnlMv0%k%?@3M9t-Cry`4r?U<2=!543F-Os*jF(ddkiqPl9uz;~47m^j?dJYkRTP;0b(m}IP*IZoWnr7ol9A;;tt z)Lq_C_GG*f(=l_-L{syDHwf$Zb;F*5VGfzu^M3HEQ&Zx3HTHyu9)I>4%!u|IPsg1a zlu4U&Um*3NT_GRgD_?wuXK{DT9m(Sa*qpLrryoovJQU25^!yaa=?ZcIxQTv* z@mj}(_vNe}$y&u4enA0K~0_^cuYdgqByl(Dv!c8zrdKglc*2NE6yuHhZId9iu z3fH|!0$R;OpI=EN5v92!lDf6ax!1=7`v-g=vE>y_+R}~~MSWW8*wTPDQ%3-DT(4@s z_SYZ&;4eiDzx|uP(~lQHa!p^cDChMWn%$gk*a+o$gy!*PwWTEEG|uysxWo}lUi@?Z z`6sjTqtD|1?f-2lE!Bn;pN+$hKD+-T-+J$l{PTbL|M}~$|Ll+7e)eWvn=ZxXAr3iT zJM3c{^mw02owoX`KljaMty{4=KI4TpyD0FUOrO1d7~j5);{Z-+%qcE!*5fyCQW*8k z=3bYr{qoOE=coGF?MLtbEB^Vx+UK8t4#f;*LCIOY>$+Sn>ogA2IPERlRur<*ThU%> zC#%{=g7N6?b)kLChex{HW$F z#Lify2A@$b6pm)&m@(Vj8ny#TJ)72%8t+YeF?`HvgsNm|da3QaDItKnG0nmo7y5!g z-OZu{(YtX#66}n&`$vZ7Qy#Mis;Pgu1T@K2DlmJk&|vOW`Bs&zJciv0#mX_E2BTsh zDdjXXq_jZ5Pj&1iCn~RDZydX25RzOZ=4`J6{^R@v^hfAl2-+_T-f2MPN~TxFAO!xK zmE;}_d%2T{x_csKZ-A3ZMP`h0+Y(lQ znk)9GH3i&K_of^s8+o`j{_7E&G8(pNLE7-`SkUGeM0f zXUK+#$j%K;2?SQBWHvQ++QEx=8X#jMV_W5VfuGr+{JoQ8A>CyYo^KEaOg{Q|g zimVzI>u2xb7k)Oh_U6q)f9O2KToXC0m!+3|;|LhT?LV&PtC=&dYPE431U-E!)E)lR zpLy|X|Cr;?e)r9v_%n9BKA!7~yRMn=>D%iE&qu5Jdw=@9f6hPpXMg(R+dunTUldiX zVXbv7RdSE8mueY>^n1^4ZjOCcx?neLt9H1*bc8K+HqwxDx;@U}as43mfbyi_`J8RD z&d)pLbd%CC%PIB5sOq;qKK$;J!rqx1{X`E&6%+G)JPv8HgzxjIIiMjnanUf%7W3|QPUWbKt<-;n!my@UBYD|lI-99vOH!f{tX8^6X|=}6m2P5GOGvO*q*8LisRIKQE7&om z>83VP54|tgkO7Ge5@}c1BTwo#JqcSTgx}qc&k!vG4Gq_d>@LNO1WG~KBnqz>7G-sv z08tS~&>WvOT&kzO1u#Wr$isd!9}V=uHrXtQV zbDXPX-H-U4Bi;WODL+A@X%v^kHw{#5C8=a^Llq%-8GD9UsrsZYRZ>b1?vxG(Fo!rP zyWOGJ9EqS$G$(PIv%!qheN`)!JHe|^*G$@n3ixF_%HlN(gKZfo6Oir}KRyl-sw)p`<3pRKKH@YF@i3&0%df3Q9S<@er~V8shU1{| zv^m@!Qj`)l)?kO5>=_`E9=rApyOm}JbmFNer{~LdMi|f7?JuXelr~(h73yY#+4A^k z5mBl$CUJ@^ThBQzSJDb?JV?L16>zsXH%3eUsfYXUbZ%;2e($$F{Ol*EkG}rRf7w6( zd;h)vX(?8rMEv43{gofw|MGWUUOs#gP`H*Dn|Ht94s_hT`^80`3@A>=n5C6X2X8+*jC%^IAF|^$zG`8y{l`ZBR z*3AV!Y7J_6y}HzjnY5Na{UTVa1tvIKU0%KU3xE1A*U&N+^OS%)>`Los%H#Y7x%b+_ zQKDegJd<><7T~=x^mqk+goI?+zQAblFqura=f#v{Q)6y+sdnr*M_7fKD7tG{@~lsD ziwc%z>KSYIxb`U=ihgsj4t$H++Gx>xg;=o^qt0TS9=OS}nHBAa)!EtsKl^JNMoO}S0dh*L zYL)DtleE4kU^^xG>HgAX`ftW#chC>#xodyiW77JIZ`WeIHMwHT%pYTxyoI{QAS)U9zo5H7!1Z zF~<1fAg}(r|KsIf|1Z<3$3OXJu0Q&*?){>>#P#cVlOpZtRH%eU&K0#!n9!i^F-m8Y z{lEXlamame7fKgr3j=m_?#o@4e(;-G%X`OapG*oP1bhVTg6{o>k+^gu97Iw|&a7{xi#IWh?kqoi}S0(@gBH77AzrN%gj z%LWK1W^nqDPc&w!7O$oBGJa0UOIvr7GD%?uazN=?0JUyFn7tVo-z>JOQ9NRxNHOY$ zc}T4Ax&mwx62X143T^j?4S#YO1;?0IRpzNvlDi=b66{3Kl&d3oxT|W9kj-*Bt`jBO zz##%;j05XfXzQfUZPCc+$A@jcw@H~1X#KlT zJxBhT{K9#N?{Hm|*py@!#=jQZ=R_!i9Scf)7GAE&#tRb8Ik^ugc|43i_`=}QkSC8s zDS@)!R+NG70kNKZ4g&6$LH@8Cpu5U{(yBm67Kx zA03A)T>EWrh96T%%>TgQYqeMUTCHyFvb9wEnJlJnw^&MmK|fgP&}_PFn^k+bs#e=9 zT(fpsjMXkrSBHOGqfcZ0To`M00m;MfiLPor8r2BIh%?}=r`(}(dXKAb zl!#_(@bHOcmNBQgo3nS;%Sg`9*G^-%a#7cU0TWp`(3vBvq&DW^l-y^1X?m?Hc+;g? zsV*Utg_{2T47eLJZ&Pi$(OTPYG~tYXSdoLMW}8_cvk0&n)j}kBVhftK4~6P3dEB6$ z&!8Eli*7oy4eAc(V8@gOSG7j;Z)(_Q%Sz1`_tE5p*Epm+M0QS_T5X25ccWSx5fUxN zbz=RpoNk*3+;E;`MAL9qjN(TZy-zWI+}F$`ZPW0$DD?o9egr(8n~mraR0_`dbS$Vl z`1ceU%PkL_u9p+5C>EFQ{?isUHZW=p&ZMNBpSv6I=yXjZXK%9-AgawfY^EsEN&yT7 z1dTsPOq>sL7~;0{7v_HMCZsNL-RjRjKMt5+gwSyt_O8rf%CT8aA}-S6hkGf_-qquf zwohp%CK?$`-aIH9zagb6yyc>yxdC^Lcy{)KyXPt3d=g1&o5*$1vFYLF2ysB7N!)q( zpmpt#jJD}`a9cl|ic8VUQd11`JWT`6K@w1RN%8a3bquzIbeF>G8cn-?ew6S}eSdmC z_gZ`WwLg}A?z?h#_rL$o{SSIB018mj&8*d!dO);_bfQ(TL2~Y-(K!zT1@-AXoJ3;! znLqe*^X=(JfBrZA&HvVa{m=aBFD?&Hf5X4$Ki*nbk9mIRME8fd{K`*#oPi?B7`lb; z4>9BuG-o@n^|91H{dW61->e_LxOsjW|M>6wnZrDo#>cC+rW;zf0qsf>59gFpil>=+ zG~wBw_|2dF10S76$%nCBuk;2<$3wYn=TGj}bGdHzz0aTWKjWV^{L0V$)^GgqZ~d?T zPd3bc71QdTj%_oJM5HlAtyRPZ>75H~ctpwUI^}4GvVj zGo8L_E6S|B(+YgRJK!*RqE_o6)9lc5RLXamT)CyoGQs#pzhB zEo+tC;#P!3cK^6MxFTW4A1UihT-LQYO$(zuKu_gg2imo_#*rjGH9<$wp%BOeYBy5e5?89;bmaPBQ-U z9Xv1gOxlM*Ex1X!Rr)a-2Q!^F#MOro5k|qu#CPx>gK=?1i8ndr#KEVSfYxSuMLK@v zT-7K}hPGYAiJGRpxVA*2n!-5Vd`L#IjRf{k{SQJ}L$AAPQY#Ze<$B2f(I3^R?%vDL0Ehd|YCTck}%I?HC%_|LI}b-mX<5 z(o9P?b9(RQ@Z(Rv_}a%GzWV(2^>=>ocmD_f*S2o#OkO%{Qie`8NcT_6%hMEMOhZ2g z4!7g^elxhF%(-WU-^o_XRn=+<=j(cy#~|(T@rm=+Tt&;~TVsI=+tV1o`Qb@JYcEc} z^XESO&c}zHi@?qFmRyMyuHoPv7~KUsTgE z$w#-{G32wy^}LlahQId5&f7U(Rm-*51MstD*_zqu*Z%0`ul}Zd@ZxXyxBlluk~PMt zMk2vM;-b5KfV*CIR?m#BGR1fi)abzZDx&2q@oMhjwW>{C>5|zejqJ5j?(z_O*vS%X z3kqt3oMGb1JPP?wXR%*ZUrZBBqQVfSwHAl5s*9VAgRDh+CXMa8Miq|dT9}fj|4yv2 zP@;{l2LX*H{PjV?A$2B?S|1ae`thFTcGx-V*{YOazdXWEVV-tgZ<$s-n3k6+nVB5<`7ZL_TEUc9pTAi%8=$O+8(b9 zY64^BQTwK|j2>(O$a8{}anZ(R;+Qf8K5Dgj&QvQe8XDqn1`YnY;NTG&2N=_z)&NT< zWZ5GUaWrZLS%1}_egay?$Q?(;a`K_JTFJD>?4lnTecdERT&`PkWYK=$tOHR89tQgl zF=pe_lS>M*KcH;Q`-Mh#F=q5#0< zOxus8Q<4=7hB5W(>)f|O7^oLpoI30t13}hORADK+TpIzglyGMXby81bPqU@9uE2vl z?+j^s=`4dwijmDS-q+qk3UR$$I4ygeXEq*|ZN&-9jocm{A6p1N80_os-6(jXRV~kx z{at_0^I!hObU1XX&3L$e{${>8q+vLeqIt?qa~>ry&69bG<5Kz=xRsz~y=vRG4}+B7 z`QdFTFTVcKPp*sP@!2W7eXOQ|bhaF(pM3i8>}xOjl7M6M&29YbzUPpSHFl=Hwqs8J zRZbQa}G<>gRLXXVjRzOAVHQNzZ7RawCbC#9?tFO_b&ZF(vfa#GJ&6$&*$XMp|mZ zQLsvOAI`uxwcZd>Fv$1gO@;v$Y|W=f7xgyS+v|$HQ4>_2V80tj;eiLlOgtM&`q(nu zz#I4QqKed?ggq$f0^ppn0y795q)k6d(nsPNwN-ouR54snm5Vo99Ym&{D5W7%AUX|0 zJB0{2Dq*>C)z;@Cw-N&|34@r$^C2;}!q@dCcZ%@{LL@gI#p>wn*n4aEZcEXsrhzUT zlHEL~;jS43`G_at3rTRW6Z~iR$pYMucq=fwBWQ{;ZSIY~s-cn|}c^nqRJhpw>3U^*|-hUA>Y zYjw>9AJqsr|3*>V>y9~s4U|yN8G8F#cdfZyn0FXiL$f)_Ih1!D5X>@wEnOEiSH=wq za^I=Nltm$wUOTDZt&Y^fAAJ8#Bz*9E{Jp>Qd>TbxZ@N{9@zYN>uEo1Kv;Z>6e$uh4 zWmkN6f3|-9Q5S;Df@Q&H_zUcp{<;s7#Pi$b>GP$S{mI|DoLAdY{(S6E&sMG05?VXX z6Wl{nQ7#7oOIsk8tSotW^l?HG)b%GquUY2aFr3B+BGxoZ#(lf4-U6h+O~JTeG`l}P ziS_F6AOH2+V+Ug5w~xb!4g_G>a1hCf#*lch?)=aeOHfqowIH#D1U#WCCqs7Q*S=~s z#ze^R%loZCtMbLEW60lsd;hH$Gx--C9u~Q-_0#(`w{+}F!rrd+ORfLEjso3%@Z#`C ze$P)^Yv-#P9AmDfM2M_Yy_s5XLyo6I{|e>xcs(} z8Cv3RH$dS`6(9;^W)tN8-dz-8yz0u5i)YX|~aP zvcV-Sdn86bFnbx(v@xNJjITqADY=;5F!ZtE)*mN^@c_=L+EVxCZ?v4n;A%FcKEF<8 zNuM~&krM_h!1Qqtg%hjnm_+I?VB~74e{EET_eqa*jrU|YReeZL|Wfw#XNzn7Tg`ax@XzdT)A@0vF8*PGR}O+ znwk%E?Sg;CG6IV|-o|;9lv0f?c^ZM-e3u2yEaIYH8v9*T zU7&dDjxo{pqG^na>wQqkN>UaouRFzyi%XVTPZUctV66N( zy83y*GE;=y9QNV$$kQ}gt`Kday#0~qZyD8-`4^T9;4@bRm(IMS7y z1uE?5Ond-SNjjvh)a2L zusX(`Pne$><}`_*d~(>~0G9?7vk;7vF-zOwR@xbh^~WJ7{hfQlp&zUk4W<=k1SSTa z4Fj~r2uItdfR_OnQ4;@L+62BF0|g1C%)E;l(vChYq?o4Do~HLxSw<9c9QnsVOB@SP zRM0Z+cvjzkA{b3tjZC(kez)_tp@u4bqB`@CNu8E3MW5ZUr&=UP4-neAyePtk8(IOA z8B=G-)_xcJ%}Uwfl%>>$tV+$6;^9do42~2yL|k|SvBNiHib*UoM#fe*+qre_io)S# zMmD3*=fFcd2er2W0;bVU{hB>Ar zoy+2*F%{58Uf8`nsi*af0`D7JsBJ?e(YE>Ck5%A+VxP+7#yS zwe;A3zt;Xj;9z7crAkpP;|>;nTU?$3?pkVJjSHB6S;N~;&Q0WUzjcRkTEsCK922DC zX27=bx)s1am{)suRyH`KdS>SRrJOV8G3WV+&Kz5hqRmxomXbJYqNYBLkVq>N)g|)% z5Cz_@^;uL=8Dc7MD8rSCNE5W&1Zm^Y_cr-@lJMPD^aDpsvEc7(;y^WGO|jT~@%8)m zYOUvDueS2-FkXAFuzAxh(aY1zQ;v`mIe3H(c-eZ`csegPr#VIs(}@ab!H4uVNY#q< zXXavc^SHG3jbHjG_et5RYt1RlA3jf0e)GN8`O^p0xP0CLHR<&|6JxG5bN`>c%7+ni za7{W89~Yyrd_(kZwAJ0o2b2TnqNaeHGnW$816x>3XX%e@! zP*9^%#gq%0RRyx|G55R1ChD@deVBPC7D)^CkJ2oT$T*P8Ik|wtVT4UC#`$m%%BDu6 z8B%{xis6if25 zC)DH6Cc<$knQVhpt7=IpQNt*3U5z745+zLP*+kXPe{!CpRKQ|`$e+5_jT2mFl6TW? z(Bk&QV@hsYVdnI?^QBi6pTAvNU01bl+@0j%X}awwQ`H(8_UJHl>=#4)M%{BDRs9CAiabrN zIX8k7KUmO*+6A(J4zm7#bMbWRR!(++QmMF z>82AMprSYiic`k7r9AJYTw_OS-JMQvhVf}DtaLZkf!ZU@jKXK;I-Qo9>vuL01h5<; zRuKHUY;9cJFFsRyE)r<^Lg1zCYIuZi!1eP!i z&IlLDoAs!4NWEetBVV1}Mt4U;-M_mclEz@YQ!&yp$0B{RGR1rjne%l0$rSW>x#5Oj zg=&2uQ3>MB#-lkjq;uvIO4<%^XJ2Zu9?`@?eeB?o&1h0{w_jErB~2XyPOmSU_wj?x zDJjbDEHVv4Rkx(-2`!w(O4V9)njqJ#qS|1v)ZcB`=cO8W0Y zjp2YKV*r6YAExmi`_~JIl?8PM6gXtt%Cc=S#^-l;RHs9%kab(uZHp2pxSmpe_WTy5 zTz}F0!ynxK1Al*vcG>KRgZOv~$7y)8n76$mHcd%@6;d3b!%S}7lFrk6kcJ+6y>SqwG~R+C*wvH6xm zQ}h)tW+%+}ZCJ-_KvpatW}0uc+{yqOP=afbT)ewsylV9}7aB-}Ba?;+s2i0Y6>t`6 zO_x0-m7Lsp^2~@V@Lp1o6eK7&T-|CIhq~i5ZIHoY%RQqHYiSOMXtT{-c-8v_03atj#eaf58^?{!L$&Lopo{HS9DFSAojNvo4;(&V zg|y!-hu+C^7JglSV`=PR>}FmOR90Ksl4v0CBearFhe7#K)K1lH{Mlvj}y?n{eId$dXz~85s*S5MhcUf@r+*g`X zs7C!!&K=dkCx&?Bw2)wJq(=Eww+J9ZQN9wc#;FCxn?e}QBJGHR2qq`RXyfCoU;ZC_ zZb@B0HO_%TRTC1@)FOk%-8w%`79pQR{$0(nk31^fO3 z!Uby7V4wrA6+5eLclf+E;y49RyU^btdF)09f5?me0E>DjcjUgra zs*Ct4?}dp4aZHx*65b1%{RvwGJRJt>q}FrfT0>_q%~OtveaN-f=x*p*R26CgwW(^~ z>NV6Dq?*;WWpP?sjKOC_fd>$XE}IIA<4>e=Zwz0f43={f!pac>EqD8x|8Uf>m6tpI@wijDG2V5RAQZTw1zaMgJ#7u2q zLN!i)Im?Q$rUdrKc5@`-U>&E@`U=e+rbOHum@fb@!o!JO2<|G%Nkd%}Ud=6fd5%ZS zL0~^tKqKX!of9=!^w6~rZ8LMHLB>0JYAKduT-AEr7DMuz;0H_f=9twMKHpTL945+Z zM1Wwu#|Z5zryE6Q=ww(l@VIiS!}+=~P*V!J-$g(LZ)<;CH$yu1EDtIc!P+okXQ$Wq z_tpB&eEIxl7_zl?cQZ7UVwd%XhYhtYj&fqSzAP7R>WA|yc4@}p1}zsO(`rca-UlyL z>vgjNg=nJ(5EO_3&iYK^QwtxHgz)@Dn1^^e*`N3`D*ac(*(WKYLms7*Dw8eW+j=`r zGziRh0Z-+@B&tXmk{;$LS#q|Vuh;AQzvov|%JEPC<#>Ix;DCj9G|->TCwQnp;U>X? zWmD=!s%l+Sj;B<$4Q6iG!a5a&Dh6JB=)(|!K9C4&yy)x+VM_r~KJXlMH@M>{6w8$F z{!|Y#FJ7*H+uxIie&ImX<1qGZK zir6d>Vrejc1s9stZ6$2eB64VDr%63qYdnsJgl~thE}q+godWFtx|NjVko%%Pj$=`) zO;bwGPHEX{0k6ft6M+JnJ*^wZ$0Xud+DrZ+OH~C1E0Qs=YM~$M(T*5fOPHx5md4X7 zCkQ-9juXzXQfkj`J)}hXB&90>ly}2W z!qc?`@Y59XDV@gPW^4*5!BQ_Ka-}jC8NMD5+h!Vtgqe66Y5PcnRtTPwCWzT{PHL>R z?K<|3*n>HXc`?$^Qgq>#{s%TV@tPqHDH&HWS66OgVDe!9_Vd2t9e5Vu1__n)6IY%& zv&P*Gg6pjKi54YWFYSXctn|zBPw&U@2AUIlXIg`kb8C+?B?jozG_qI&C%1CgG@6ex zw|%nOnqxNfwU@|cho7z-cy&pv-1?d|AJ=d|h-VA}0shu~oM^jf3^$R@WA-$Pwt2{^ z-Y)j}ZxOSKBgT8!KH2QmBVjtPC%nx}ek6e~lHt7QbK7C_NnYo`7S6y?QLBX|#9SLJ zsPSl0yRO^1ZjvOW0i1WP3F5?1^XspNGHY_7xoJA$Cb_0jL;4(pXa{X7H)K=d(n)p- zU{m@C;<4@-T727V-j|Bio66Ip-#NA1m%r$Isc53A8xLqS1X7nP8H^RoWEpIrVW zADs+xvtJw2ahiUkDB11}o79|}Vy%GZf}1zO7RRcc)lL)mdlGLCF-yF8f4=?bFibfg zQjERTZ~ph44BUy{_r1^_nx&)FaLx8`D&V(5BCf`^2ratnyaS(yC#dqfsY%D z<|t_~eRn@Ry~9ZUEOJrBt+vE5cE4lN|JGNocFK@XCdETcmsXomR;pctMlQxabtU`? z7;!;KMKQ!^hP?5t?L^jB;Cb)J=^W%qjl{c2BAIeS;6Rt zUUYjtOc63>C(@kXxcJRJ^E8u6iC4 zl3V(>=ZO}{IEkLtnuJY}@VF{dAwDzi^(ld09Gprx;I!mus+LBv0?F~^apsh#wYZuF zLVju;JV`nPGIGw=Yj6bQ{35R|2hTFKL7H zOgG_^^W$|(G2GqEBNcx6A%-go`>Dnzi>swf3=dztIrjpkufq&QU$cbB&AJ~(Tayn+o46ckM~>h=DOTWa|WO?g=!owQY4~ytTbb8xtrzrq(n#mu}8N z!WD3gKrRt+DcTnk8X~TWWwd9sS*US=3aTfYLoyt?h*%yts5hG2pw!891Q3Nxx4P>T z!mCGFQ!*Za2HbpzXKzV@fd_tqk=e#Hl0~VjM4>|R`JPAy7Kte?qbCTvp3~DlNjU{i z44JA^e#%pu4SsXn%ezs$OP-SChre036_bKB;zm}zB)N$(ere&u*3x0_3;%f3KkzGC zsey>5&t%3^Lzf~Y!=Z8C8mhI_Or=5|s#NR$u~4?*v(Lt=TMeh%BOZ^&A>)4T=`NQY zo&~>qx+{pviFw-?j;{)?NwZyL6*W7Vq71<}d$S4DONfXL8# z>1Q}Pt~eIZxSdQw-Vw%llO*Ss)N4X~#ID1{+TrNG`UY4GC znI59_H!LMoeeqZRLeTKGsN&lc?ehok_@lMiy{0?N_|Gvu1>TsUEveKq0c^o&-Nl6xE=Jr6)erq(|XZsXPP z%kzS`{i39_P(XmmR%!i>s(}{=*kq}c6{frle~+pa(mEtB-VK9K-1H-*1;X74AJUq4 zK69^=2)M1)yT$<%xwW}h=V45{xbWUjMscH{B8r>Y@&#zP8P)=R-44lzRT`MEyYc!~ z3H?hHB?DeK_W8T;m_cYF>0LMs^tl&0hrsA=%)*~oxYoemL;yIuevTlTageVmyQ%!k z%4L$6yf8A-c!0=lXtIi1pP3Us8j;=529}Zo4?GAuqpsz3t$N%MSYVDOzNWFmWKB# ztWi9z#c2cCJ{rY%p3mULHHH`REjZ~wLUn91rBoU~>vxcVnI?*UwJr{UpX9@R)|F@C zAKWz(rzk}{;pqt`*;1un)~d;JQj%w*1r9L*H&Jy zom=@(vxH$vX$YL}b;FbMHNW>F4QaYPm0Hs<=DQoO^UQ1r@q`$F7yRa5 zl~_M{SZC-bRxB&bK(n{pneu0?rz8Rdvzi;W@0>O~DyK9wK~h$OB}2O4Mqtel94^+5 zBF2n_987{Dg8j%jQao7ayb(@C*u1Yb#c)iK)BAZ}BomUp%FiH1Oa(N>TXQ@2QMGm; zgpI}vH92wcw8VKEMeeiz$^cq%7Q`up4HwYQ@SaC91~OhXVGY9}hQ??{M1UtE!nCvu z_{^E=Q%D0YFW_HEV0SWQ1KKsEQTE)dw&J7*DGJ3i*45YnTGd^Xa7nE3E{=d&&sbBe z&81*>>Waq*L|RcZi&#bGO-MNPxUzzabJIeJKoe4jxpo;FjHXbI=Qq7Sr`^~1xx==NbD={ z455lWS1J)B&nL-j-rv||8TO0tT^8M1(sqJAMpvkx6vi?Mr0&O`1Xg-K_s_r zbJhnN40%XAP7>F#A=abuD$PwG%S5^<1c3)569G-7rNO8vrCEtdjO&|ENvxKKyVR zQvC9@w5WaW^iW*;KG9NoeYXI@QPV8x@Bgj0f6HHalSP(N6^G@N@-)h|=xI!g*}B$W z`$NCHm7+yUsfs2F9c*~~jyXz9nZ4v;2;cuvy<9a|)xP|-7^JQH&ime*>qE6ZS#9li z-kv|ZY|jSy%m4HL`YfV{~nAQE@|<1~q6?_`hAOf$GY> z7m=UltTeZNV~rdY8$+=O24PdJt*yu3-OE}!Qf4v_p*p9}w~huOoPlb<2^MPu6b$9g z+~{)X`RA%m48$9`K132$cs+lblWk^f)NZw9iIgVF9Q2heY|=Nvjvj{!|BRC*v)RL= zE+(7?wTG7k8Lnk3+=;!vF>weUKu~G>gnoG3DuUuZ8p~pX_QV#+AuTOn=AL(yX7NM? zDCgj`cpN+ge+}9-&1E=nO~&_*=p!@?K{v}x+TFa;MQ^}Qu$cHoqG02CK5L>eFy1vD zh2%v6uHIY4t(XgaD^N>HDv(itmv~p4nmy=DQ$&NOLmOxd;|qdt<&HcwA3fveSBoR! z*kCziyVN$Y91A`I;A|M``mhEv+$(G+OM$(Xgqz)CsEFHqIS3RLp~fk`4(gdTCjg1J z4am*k^&$e%E05`%^k)wn>vz7HzIda$ zSxZ)n0Kf|lkb|?_AW^ZN&AY6MetRdjM4jsMpj<`%XlS4 zpD7VHpEh$dFCHFh)swl@87bC*K7O69kcg-T0ZY2&sbHhWk z#8-b3cLVp4j;g*khAt!OAWjw`IRuYKqdD+^tbrI4lFA9b_lm%0B@h@l_KK4bX(yF3 zdNkSj`5}}7Emh=-4C2{$4O43xJNg_GJu!S>pFtT?d2Vse$>y*2zw8i&+xhJjMQ>bs zlE~1-gT(KSx0v`k<7>s4#|VN1d09B@QOcL7e;5Lkt4Bnqf$#Lr+!*F0MWle8@xuVf z{qC!X33CprF=Z7tSAm=(gC*g$M0!V(;DDLzcS8bOFOw)MCK-3Y5_6iiqEkdE&!uRf zlMUDsm8y?ekr|{t^JzX_3XtFUZq925L0q8__?Xv}yqzI}=@Wuh#W1TI47rm79zV~^ z6x|*YB8b#C!^`okb|kkpi^a(K@zsx7jVYe>Ux_3s9{K!o^iZ9qQZ!{uW}`-C%%x~s z6_dsS8TxW5CBWT>@rW^XQY5tp@n(n>0THvnC?fI!O3Z{ILSuM|k_OenYM7YAIF9vN zk=L832D9ha>&M!eK9?phUij2QmGCV04D}k~hacXkwX?=iVg|o!)p$r_goo|Y6Z?98 z{POzuy^5yq{mL)YqS7Z83qp5WYoxmM<+}XV(*8fc^OUkIYbD;4Qk;g|fuPWiq5b$; zrXjw1^HjIxXTJ5pX^BDYMI!xl`5M_&obllbw4`Z~TiJmIRs{o)%*qgaimI}KJ za^kO54=J&svwEAjxrF=?o^!8L1d45Q0?Wqz3aA@0V)9AxBV@@*q>2=#pVQy%{Ft3F z)FAM43G&~#-*&EejKp5}ObA*t?i0n?+n+pGB)ZO^bcegNyuKYp9SHrzV!+_+9J9(p6Sh0>sdc<g$_4wes0l0;X!ctE>lMBu$&m2+l6c3d*_LYZ!hjbMi z(dDL&&XMSN#n2izz@eoFkf=CuS!1hVcfk(W9EiM0;(@YOIGOHML7MO?XSbzpqa+U* zC4?-Tr6JAZn9~j(G=&fox>qPh-RR0z<2Q|)*+AhM(=|kw6~;tGx9$=#41*5M;fd2A zPn#CZ?3C4TnpS)qaR&e5Ikx0elu}z;4GkJZD^qsN_>>V6c0qW`IuV*ZcAv{BaKo`D{;vFkx*0V6 zm_T7S;8!jpC_Bj?nh%_4BA&_VXp@j?vkX+S6zA%ZZ=kJ_?Ob7+Qk!#m-x-amK|#|6 z{9{GOCPm?vDp1+sbPu}#)r<`|GCSO@aR(fYS|^y>=ZNiYo-fW3X3ZQp+KnNm472Ys z8#O`H`5`P6c*JsnU_;_8ql-_B#+C@nU493!!YP!(z&4KK`ErR8U#;a^W$W?&!@r<;^A9IE0P!kdT3=m(5x)fcCu)&84SI!o{U@BhY# z(b_)YfGxg2?JD=xWiQ9{YE_Xgig#H`*G9b5dCDKp@~zbV>g(+o!jrXX;Wxkk$v=Mk zm3hwJ{KoU^0%sD{hyKk4+>U;?RdrcVY?HQ_&2)Npr+H1+2!puKd_gZDVy2brHZgS7Yo)tZw=TLZiFz1 z4APhQnA28mQI|dS*{6MqYo0K<0E%5T2mh~C=bY$iHYOqmApmj0M}a!}xM;sTHtU$n z^0+2w?rC~EjRP@nwcY@rJs)R~j5WK25t=7Hs%O;5!TE!NlINJjNW#mZADS-xwP{C~ zNqWh_2zG%k`L6jE3kFOH|4{psi9;Hl#}_*H8Yemw`Adlm*Dg82_K@pI7|u1g4iCXe zig*o<9P{Z$=J?GdM`qO_SpXEQ1oiM1{?ZODuuT((v4?v~<2CEo1-Ta!7q~@$R@=-H z)91bB5c&Yarj8l)vSG$g8UJQ`iR`Gcxt*!^ytEm4I%&o+Ez3GMo^%#=r*?!;vg9D3iXs*x|>62_fH$I;4qFK zyf`)djjC}#=P(}n30m8B-dK>ne)ys_O)`yn4iZ##-OdqFzN`YVozvazkscSUC$_pi zo?mlj;`Hnzw7onCP1A@){&aru2mk0VhI+YNugg}zvsIPA zo=JoVfso4V-6OMBf@V~Pbj2#>3>_yy?!#Y32+z45o<&hxH#%3LEpUKg6sZ{dilm&z zbZ(|dOEM$FjuQAe&>Dx*vp00(O&HF)v*bYRkd{n3j6Up^j_CX|OADKI9B@u4`U4hi z{#Ij()!iO#l%DP=!sJ$|l@NAHzPJyOby2f??S$ci7+A{D=Y_h#o-t_shBG^ z;qti<7~(z3F}@qC4CAP(FCLHTJ`hd-!e!H9Wof~}&bMz2K27CabSJ7hht|Px4plic z#wF&zeM9+Y5(18RqOd-qV%V_T3SD$jApL`MKU4b;^%d^Iq5Z zHj0XWlLo2r>U!I)sF=_0do}7zNlK=B{oRbRUHe;SQu3|Us5p}W6aboI9f`Rl*48Nh zllzd-t%hKksA=Ef^)D5DUfXJ>kXtU*Hq+0)yf^F$MTCC5Ztujz$Jhg4t&oUQ9a9X;ckz`nvG^5=}&<;_#-KA$=N=t5X z5j~Q#iswy!$JuBbRyrRB5fQHbeHHf$9~|t4vtbG#-}7t5%JEAqRc(A^E;#X|3p;ap`0G+XECTTyOyF|&en*po~I z3xV9j5$X%ggM8#k!AM&<{jZpMARGfqa^+ByWBSnAbtC|J9eJ)E0^P0_nKVWL-YFM( zZ}uHLL5Pb%mjTjG04FQ%|LEvD*8md}MqX#n?>Z6ge&Qoq9D^ZUhd?-1>E2@?e&Sz) z@^cwJO->#d2B#kb(CBYM>p+z9+zdA6WKMK)VT9yk8@q0Ib3jad9);hW_ZX;^_jP;^ zHFF^z^N5V=!aZwhyC}S}PT^_5{j}e7{}8;PTeC#J*})&e?hHsCTWh>8QY_e}0Vq=F zm)5bYtM*8Ajq&Z)uXEF;hzU=dO0-nHrp)`O`L*<0k@@hXK{k$xZ*DMM)p(i}C}S|^ z1LnbFCVa8>RkW%O100#q9pxO#)WR9JbXm6+YTt56#%YcgkvvyASPuCR8YY3KgP2v- zW=Hp&FV{GjX^oAuDsf#Nqtgi@8y;_8zv0e!{_M^b*(4c;LtgdqQMr71|C2xQTX#1H zd3M*V@8R#A&*PZtkS{&Z4{u@tD>Yf|fbV(Jw@WdlgI<{=UPh_4QzzH89BqBrG)R8f zT5WrOy2WkN`>o|@hf)72Kl|cu|9%;CIgFXvd7t+xo^NrCY;!e>4q^o^5!f5r=d)c-DpCY{dx}< zTNBrnn(O#(&4wsATpLbckQ#tZ&Rz44R42(6syk@2gm5ZZ4Q<$)gh}rdkn`1| zM;&w`Sdc1m4rwq1-buePfj>;La%q90F;hxcHGYBwuZbLQR?C3I6jksz_`G7FX)s>e z74a=qGhhY*tbg1c4vPzXuB?^Sj`Ki}sPa2f*dR4QqT~q}Q(^D}bBdVw^uWV%t&`Lr zH*H3u5;Wz%QW78u!zZsP>Fn^l#|CW3s=!KovdH$crK+PQyQq6uTbuCc(HS(BQP9eC zy9dS}971hZ3pOV`aZm5^06P>Ea7$bOSbR{!4+rNMkv!kL+dvEPB;HM+$u6O3sz!>0@XT-EmDtuG2TG#s;IiPCV)p-@vMP`HY1^ZHx*FV@^~ zoHNHE%2IhG7^hyJKj|()o^gmQ}%+CTh@HAY~A{bdu;8K^TId$)nQ`3zM` z-yX*yP8;9aH7DQq>EM=gRXo^DsOBn((>Q@E&F z2N_gCvc^WsAxn$$w3dLwCIcyAu`gbr)?H|bF>r%b+5DYfkxdgD8``GxA2Pm4~77`KT7+p2P8YY`WsYmLq zBgaX3SW*+0Hxp_`l;7w#SQ2XiZWE(*H_Mbtbk+i%-p&jnq(ThkJgyTOz2MkS-u>*;*cWb~_op~(aGnpsFWZ-Of_S<{w1ko*FT3~_ zh)#&IDPkSwglRrX&vJCVg*;2{uM={wV)KDZy0ZD)f+J++^JIt1onD$me z16-3+y1Pm1cI6;3MXrWnY*h(74>I`tr|CEh#r^Ig4=S4FWjQUY<*H6R!)8TK=rSf?j;$tzva;7QZk6byjoF7jprf))kZG8BRl zqT|{RA(xDZRQd4_Z9d+FNrb~7hHNf#b6em2V{ZEi?xnzaE12wbIs>zj%VxszQ&D7_ z3NQ?eMW@ZBghO`Tw1ge)u02>9bn>?`Cyv~7mhIrU($LXM41%HD-!v&$-x)0I%>w0W zHf?>~?Su=SES}IB zC2Xh{=?SmPr#W-MRj62McrE439MFavb+zWy*F;XtGj<1FhoOcf$_6RYw%IcrZXtJw zX6I2SAEk=V)GDb}Hu8x_$T;*Ef4y!BIf66{YhRnO zl$EJ~Bhg!`7|X1+wubnXGaHCiD+fMUED~}N5Vkn~;|s!V+*|-p#DT*72-*h`oXJJR z&Vf#l{-Sa2Z=V$N3I-f`Rm@n(&R^Lt&^uPKEo*tWlx`iU02N@kTPcef*O+IGEO z*jZCG_Q)>F5+jWk;0LcKEV_8UJf>+ z!f8I{JVXiIBnJek90jq)s;?yD;~^Qqu*C)lCi3~Z*aw5C8-pq(PO$%2l6utjLY4_k zqm--cr6(JCLT3?iiDJ)#Anfd$kSgVgGh zoJ%_n-m#|98v-clsg^}J%X=E~r78z{m~mmL0)Ft$ohf=&KQVn)yj(rz!?n@FV+&d_M9?oP3?dwC$^=hJq=ijN)bX(~zkJLPpB;S`??en;O6 z1daGGJnVWxjos=JQ=G|nB%2|c=n_|tXN+F!vF_lPAacWw`#yN(nWKyOm}l_ZrWovY zjE$31==JYVOjM=dU$D|#i*!h!7&=jDp3|~a7uJCo&kp2b+?>^$QhWr}6OVZC zL6G^VT37Kz=5U-(ZvCKv(c!aCKc$WM*k`V&0zDD{FsiG&vOX6>Jj{0%j4dV3qCCHS zk37`tb$hyhU`}+H5A17^iZTx4)6+$OLTc4CW;o+#o*uq>$d0>N`)ch=YkfauV`$wOD?V}H*uS=S3ZnE~|>f0cFNIH){)t2b>=n`?pz)n-?DaM5=cWAOwk2H3UEbE{eTc zMolQ5r_!ie3gH@MSDO2EZaM8s3rNdMO% zd)9L;HYFi%vKT9g)y>;FB^=f$-u(NU-)Nt6Rkw9px)$N@EixTd8o)biE zo!0GB5mt>y$?=7Wr!QNTeX(nPt%R^Cu2IWdpM-bv}8I?u~R>5 zRqu1<)M4?}Hi7<&s_Pk1w}*HY09v-l{N#C;ZwB#v08h?r=SDaxN@-vO7C4473b?U? zq}+>WsSR&?Jzt;S-GP+kLNY0nCEH_DDcj*N-5tAL?|G??ELdtOUN>8==SFWi6oF;i zHr&;vo;d}1nxDrOmu)%aY!+^B4tK{f#P;TXV~IHp2kwRQ`Kg8Q^4W`r`##zG$!8D8 zsB}1jk=Ymu0uCG8~SMRI^>~0 zlyUmn%M&e7zI?OR)(hH#G%VT}%sI;3|Ga^0+}&kokr7At$n zhUplQ%ww9J|`879i^h?n1>=K)Od3=(7Fn^T}Sl0DK4Bm9UQ2GJICP{fy>Ya1}8B0W|f5l&H~@m$2% zn`gdxfDOz@pG{Ap_gWufVzMjwgQ>$M$Zub303s4dY#)+Kkb*5Kz_w%Jh@0*R_1+v~ zij(#+CjZtk?yu`KWKWQJJ#3t+vxdzmnJidDETb6P5OLXOWbVaXmvTycfAbPeS}n>2 zpvDxAqxx)zJA;UDQ%+H>4byR_-dRMaa~gy*`@5INZg^IeU!1ASJ_?TTOyV%C!BBAy z?7s|1HB|lZBC1Gd4LS;^DC2loH{Gh%sytrCG*G!>E2VVhgiXViN6SOVdCX}_X&mx& zEl;MUwqmw5tzFPnXR5N=bFgX=tGi zY3gZ3Y2g_5@{n)s_BDz8cMHB*619sKgUI``_szY~7)!(Le}R z^T+Hock!15UyJgUaz9CA`ybfk;vVp~*o`lmLmq@h{kHQ5DHBveoBIy&)oR>v?uocN zi7=HEpPL^f6;pmNr%jOZA?~@7F1enNdviA=nh#}$B3_p(u6UY)O9S^W?MAG)3mznL zB|M%#6JffQLZO5BD`BCY_&aHZCl;|yqiex>`lA1yoR>eNOu5=rQF z&4(QqieD8V{2bQ&Y!W!?OVFQO9pc!%#0sOOL!qU7dEF1{H9F(OCw2{k8SxtDOy zWoNS$ZM9V7H7O-05R0FG%ByhE>eN4Kn&h(RkmIU+`jl28ocx7|Hoz zUNRO+P3R29I03%GV5T_(=GM9%yvYApATWtJ8;^5T(S)?%!7 zPNyU2^(3>RSuUBN8_}443(`=KPaTi*JWj9f9|ht^^ECM~W>=Q1IK(AB-#~Kgpg=vLWJpivCp1*@>2$Cbx4K-`rx+M1_d3eR_&9Jc%sp3A9eV zTrT_k5YQ$1YKL8;c~^Ao%b2xdh*OZ<UX^-*F*xc~cQyT)y@o@!Ix!oDPuA8DzV_ zoD=QfQ#2RlW_r@;!~W^2cst%X%92eVb>G&W*9O!&xbdUlYRjgq+*yegp!3jtPmiV)7^3Cx;At*~s)Y1CqnhD{AWfOTa<|L=@NV4QWq zui9{YdV0cX2pE)ZWkbDEifx>aIA6Cc*^Cn>7Iv9?*sHItDTflP#a6+J8FpEcz2Hh? zl*ZNI-4jq@uLK6wX-)Cz{7NL(9z&DSq{1uWR!TWc#}pG)s!Q3pYC|h1aT7JxixvVM zPuGWDnnX!d_D{(+muMRE*sGaZtwUv7ZB?}h!d(iIheKN)yEFI=7>SbZpDrJ~cNe{D zDbG*y>xXMXYH;0_R^0+$O;s(Yi4HzRuQepKboaTxk77>Ds(D_VLo_P(${oT8Ey z&%3od+!4dZo$|pNSDa#i_GlfF?;jqug!p-O06Af)bcl8Z%mE{Se2i0Y;ajs^h>2jg_>Bh36B00s6mCfkn!MRS` zEw9bm!)nJt+{6P?%jg8f7YC`AE~RGc+axw`_hv}_xrA!s^K+JMq$ptjNFEMElzAv&g#nTdEg%uvsiA_hlCSj>1* zPq0d8_2nGRz|xGQ;N2C$@8s_8U`C*fwI{+RkEFeTFedbgISd(!PW7TJDZg~BO&m+{ z<#^dR0Fsbe@{{{d8SiXF2RVf#v=d-CU*Xb4?4O_>*9}2h))2dr9Q#yzDB}pE1X27f z&oX5z-SK(+Kr-^0eOi*I>E3bo+Ish*an4MMvJ{<{YLu;CQjCLnh$j5-vPBI zeW`K8w1VZQ)=Do|(jdY{l|>w@J@<6lOk(QiJ0K;N^Xs;@p1sAQi;t<|Ts1Bp?_O)I z&NHZW4Q^K*w??UFH~HbpV$d<&hvCh+y~7QRCyzQmcYeVtSc?pycK`9FQK;f z(JDw)P?}*pVA$OH`7#Wd_*dy7ohA~N?Mz^2nr=aK%}ad@HCUU1rYh|y5_9qz44KC? zjR-@wtY=_8x|S>3ghL0LB*l#0T$m4Ii23c~^3luZM#c@Y$FIM9_UdVgp>+Yc+F7mV z>pc`Y;&Fy3eYCAC7FyP^1sbBYahQ@wmRwqopDE>(Q|#k)E8$cK3UCXMIM)(Z4ug1U zjq?koIjNnXKcH6M)f+G(MV3~BjSR7^Cqqfv()I)|f!54XVh+$F%i&$}oP|*dp^ch$ zOKZnHx{P>*aa;?Er3!IU&we-p2f9&VE1MQoL7HkaBh8%77b| z_8=YSDfg3>_!PYCQ)5q3;F+3+BpK4|OEtxE>Gx>pxb%?vDVIY_DT0mGN@35JZNQXZ z)K20K?~Kph%y~#W zu@!SF169|CJSMsliy)9m!h#e05p?(gfq017a*DBkMZP$J=@|QOQpZ74|8KlWe~Tcw zufdEz=Kd)%PAT`toyQT%5@Z3SkvWNwwgrHn{0zKkB-|;fN&n~ptJu|8(0XFq9XAB4 znPRJw*jMVvzF>cZy#^c7OaS_LoRffd1+N&3Z7Z6jw?KMHnBtfY<22=A!c*c?OVG#G zA@xD_S}G>pFvU}AL$NXqQ=k1F=AdP*<+@xM_9#!tKtlS$lv?58D`B6#+xvs>`dglP zH7+Wepg`r{SAFr#?Ngn#(dfko-^ICogeSR@D2Ja22Ga2`@8$ygl#I6^+zRO{|3NNq zMgyNAB?F$Duu*4hCw!80DEOU=1Y;P8+fzv^!GW}4WGL@*PjgPIdS07ytOg=lqWg#Y z7VO5xM8MgD+l3x_2U`>8coE@%+4}HtrZtwi9RYwWv^T#>zgsr9R~I<6>`;swWjOx6 zD-wB1G|Y_bo;>?#1KW*if}!8cEDJx9$B+VVHMc5_;K6NYvEVr+q6m>@GI@=i8+r&Z zR_!<)k81`iyq?Ds{}q%+*@clU?AIlG?}0PNTyy4|X`g)dn8|qrKU+YW(;9{qiOw)aU9!+}+$`0;_N3BsE^x#{Je|_!6Cf(eCzL{~3|7Ee8M9av z`HX958gq7YbrQViX&`%VEkzA(w}*M284U(fsIO}sM|=VbZR`TV`lVHvN0zHZ=qct| zxVe4Gu4_{Er-gyleqysK=eShE_mFlo=b!od*SJ8)7{7pn&%^$M7Y8zUSaLHq@oAJ| zuOAow+>6_3gxxfc-)_V5xTwPL>;KQxUqD%sBiW*;WRkld2+AzTg05z`4MUfPKQlA) zU-%Y$W?Jx>Y2jyPX2yZ{-W}%V?x`+LiiiX5E;GF)+gp*7-K#Pq;>0=ba>-!Zwrx4y zTyDwz;$OzxD9HV3KAsEp69R^V)VsTTz)8>U4?~WRF8AyONG(*jJryWx`(eT&Z2<8d zPlqT;%lh>GDI%BMc;T(wCFiz?*B6&pyIey&oG<64;MjOfy1&1_!x(Bf{7*l7@!s2S z)EJ&WzkPOhj3K=F=<4!f*N)cp2Fj|R-X5z0JVF1-E~Ma(#?VRk;_i7VGf=(Vcva1o zb@9&a`u3B@Pj8>2Hfc23Op1&RYB6JGAHjDJ)whrdl3Z&T+MAbYB>^D7T0KWD;=*JQ+7}?(|}Mh z>cAvmdrLtQmL^@lC?qU_lRF1tP4ci58}gJgbZT}v9ZP|P&~6aTQPnhCFmm;f?gB>% zHKFY?Cnx@TBz#)en9@Z~04T?h7G24<_F8l)0D)~3Q8NcUJ=2OQk1i|63Il6<)itC* z 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

    FO-KgR{_lxXx_CA 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 z zh#`wJO9UyUT`sNb0L|K2Y@?eyawlgp;2pGX3*BzH@wRNM&&Vq%8&InbMpWb3tpS*D z9NV>PNrd(knus3#_HtwkdmnO#LJA(=Jzp=wh>ki%(CX!5R1|JwedLHPT!V8018y6K zZOsjnRcV;(yoVx&DEPO946F$!g7I>g?|C>TBCz^Sdydm7wyEpLupsY8|8RbrTl?`R zA2-X1M$g#mQr>peZSRfoVNze0y;pKL(Z6r1*Sq?&UH$ug^}480w>qBd#Vc5*6iPUd46?!j}|^(&W4xd z$%md~rz6F9dU_^VA|Z^sh=O_Rc5m16?(q?Zz;N@&sI2Y`2ZSO3BpWKwFw!DM*Sw?6 z$aE{ekWF+8cyf+t0bK+!iPe6c|59`LY7FxxK6FIO>HN?Z+w}+pZ(6}#6z)Ce@wd1E zdn+V5JCCWdhT#a*6B-ic%P?T6k;)rsqz?7GtOKW{DIq)RNqR_MFljlqc0BBLdUZE9Sqp@0jh;Ob4q1G9242DBUn%%LEK$Od@YBQH?zzW1FLU|M{`)-o5|!gBzWS`@PQz-OQh%G;NC1wz_F6s`P()cmGdsZr=XE z&%gS;zx$7W{n!7fT;HtKkBjw>*WzEV%0DZL@7nfhE1KXXl|72$o%`rpb?5^;-0xl= z+q?aaxN_U?jyPmVM4J~p5b`kqCcjnUK2RNo$usD>X={QIAp}rORrRgnjfFxoERx55 zQUNu=&4i4aiX}UU3HaK*0+A7X0D=M4bbxlsiu8(iKJwj+B&~gy7jk>LUd=lkD~C71 zZ==d?x{8P!EA@`R;JgW@0&oPZR@cT$|CCs?Hyfihztx`aR`{wTRw`op8qJV6uoM#! zF@D0k7*68_;X>a1%`MVKPkeOyb^eo|{bASlzkU1NH{X7jIYaYwhlr+AYCoUpIF92b zxR4;@_e~b648hpT zZ@5rnEyY5jLh$*B(wq3NC$?oz-a!mnm-D<*jH2I+h};OF@XlEvlV90rEJHqUo8TlX zfn0)b|H~GRr1e-z!%9uxT&7;n>}54FnI($0FbrfCU}H3yW>YCLz{Njs^|?>&W}%= zny^ej=^tr6SG&%+H@BUbb66jMvd?vajXE6uz)Z+ZrC~Ct;_Qm~a*f^S=OBObk&}cP z*Yv!so5V)``*In8Le`C;YKxbo`s5|`4a|-1Eig74Qc0AHwTiQPbg*dDH%l^UI;414 zA`RGkN*k+MP%oOfWkmCc1RKOLuarJ=l9so}L#BPq-xITPLyt#!*7i=4v#2yzZ3%fSNy03mPw$teMW3VtN!!w~db zj0eapVo@zsbDuYD3j)5?z5QjDupA7dLvK7D34j17gSfh|krWK}ZZVXevgz)3#j9RV zdS|w>Vz?v~?SarP8VD4HrXJU`%5jrQD0(-p@2_5bfxHX}Mq}FQ+BQPbUf9UM&bN^$ zxKKNM_33A%Y~MeAxZUq>kGJF1O7`*nQ_RUc2pF;$n!|nIs1&9`yprEx$T(SDgPSfe z5Q<}OeY32@5>C1VxzwG;i?M$2nD4M=AWL66zVfen;^EeE6{HCof_Hpj(dN@F3g~J=K7i2~N z&^lG44V4WtM7iXH+A3dtwRR4Bk2g2KJr4tJn6T6JKH-Pf$E%>dUNO*m4Z>a0*aZ`>2x}~@ZmB`BBBm} z*3t_D0Hd4pfHDz5eNu`7B!*y}==ZXAdcpWe!NFm>Y5`f1j%O9SKsN=r>G%J}AN{

    ~ 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

  1. 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Π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
  2. =tKJs!RmF~2o`a{;(tv+7C`i(Y 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∈&0_bG}0f8h; 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 z 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

    56jRG>y_|K)I$+i{GZ(B%JW!PBd+4_~F4W-YP2E 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

    Uoiy=71QZ&vA3c10RD%O*2#0>cHe_ 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
    *+ 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 z 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�iUutNF!8DF-Uu$PJ8? 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 nq5@4uq~`AbNr8ABwg6G*n}vi0Kh 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 M07*qoM6N<$f{?_W4*&oF diff --git a/src/main/resources/assets/create/textures/gui/title/background/panorama_5.png b/src/main/resources/assets/create/textures/gui/title/background/panorama_5.png index bbac982a868539ddbe31ffc5a22daf8c494ecccb..608c0f8e844eb3829b9673c23e9fd6bcde50f132 100644 GIT binary patch literal 261532 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

    Op$7{P45PvvQ`@-+~2Jkb5YR z1VlbHMP3$xpf5>=S&FQCMf7Ebsa~c0FjlKHG(kY2Ic@;Rco_Ay!v>Sx;6!zpvD3e# zVI+ne9}vTd7o0Vzv0M$zrtjL9bC{p!fcn-SMP}3hBl>)3eSmx5czo$Dz}u6LEH~Cn zJndWheODB{ZXbe$2Q^HJoFJk)>%Px9_r6y_;H$It+B^5&ugu)L7nt!p`HJYM{w>g! z>6S3~l9=1N+5hg`_qp{vnp00pb83xb_}+8PA5=~spR{c(*~>>}1#lKw(xguqvzVs; z!Map%a(NjEyOo1pA(zG=)E6R`j49dk{1n*Oo4$|jrS-d>ZMOm$FQiIFjO>an@%Vm7 z4O*P}X~ohdvaiDKQ+s;Kp=TT~bD@9T?b4g8lHWkx0;(|fdlg>G(d_=bcDp*a(=colw%}4q*ipdL{~Dcfe>*PMX1=<3usQ1jkFi3P zRyyKF3S;4*S^CE2-C%@MdUErGCn`o5vuD8J_2}s(#2#fY=AIHM_K%^ZVnI)@k8P`1 zChtk@I2}JqBoIHqsV;+iRsrcQbE zf(LB6(E-gL{LC(oS|hOu8-P+8bae3-uMTzBWr9t`VdKp#t#H%4!?ygPDZqqQHG&ey9V?|y(|=RmY5 zw>yycI#1J6wO%_ipn~;~`?NjbjZ>#Pm03`JGPZ~~M5IwcMmp^E^YbJoSDdQ4_nx(%ukZWQ`;k&36A!2xncc~zd4aFk z8Mi-rx1gsmjq$+9yNVc{V=NN~sQx;Ub?UjYNjg8(ElRvng^F1s%nPA``d=^KvIsVS z+DGvjOzJ4ruqsdUc{#HOLfdWW2TroX<(f`uH$~qZ78OYx(jY+YUf%TGv1{$U@#xR% z+4*Vbej3H?jd4Ob086E+P35edde;h&e7$l;lqz{X!OLH{xyu^C;F?10`%_T&^EOM* zCy@l|$a}=`Y>#UFOVDeJHkg#P#w}x}cA2yDnpre5 zIDj&$j52Gn5y#|2RQpcj%S?#>O;C7eFimC@!LGb{b2UuSyaBTz<`T@@xm(Eth}HCy z&B*HKoTka!vNvoqUl7BrRW^1(Q|vPMn0Q0Gw8We+5J&4o-Xf;Nf|;~ zZAAry2(|~M|Aa|d2ZwB?S9V0&zERBDIGcB@o3D(OOyAyZbh9Jw_xImxuP9))d;04f+)01f(jz{N-C)^W>do;RR<+%epSJY938KV zDrMDH>jQjKHE(vQP6m=EC8lO9o0!BR8lnZLXE`IO8CFwGWw7TwObAkXuAE*YWau)D zvo@W^vr-`iL^A&Xvo9#`#zZ$iMIs=d#kRm&w3g26r%nNK0j1ACNC}l0=RuSYyWj3d zdVCZ1OlY0z9$S3VgVbPCHQLb`HRf~I_@J6a>T4)AAgovNDJ)8KIY(Q+>Dx987oh{F`3>O|Jl>G;HHEk}{ zQrU9ZH1KBubG$=QoKeOi@`1|^gfy?vaC2`<+x~`G4Ws1%?3ZyyS2zJQX7vpX7$c-2 z_-#a7vRS!3J#Oe>;RFNL47rFuwm&D5*aYd@(j$O5``PQHs$sl~@~+Xg@B%)T@4jYm zzGgvA^tA`hh_YuyMJr32*6-SLuFQw1Mvo%50x81r3B+srN*t|#K%D#dUHH){Q%Dx> z^c$D+&A|*fNHzWX6{MBgoLikug~y7LGR?oXwWiig`fTsfHqXaQGCuvGo$hqh(TS;h z-4hO;uCWVS)5Sg}2!bJx$P#%C18}gy%2`Y@ya_e)-ezs%Y$VwdGIrDyZQ|B)PxHbO zcB1Y2M0JN7u?pt}W3p~$<|>+VA!p3!AvS{$rBZbB;|6IcaLAsfa>5zFfBNRk@)2oG z7S(Rj+5Ku=dzs3NVv5l}Cpqb0!gIP$uj*r{5tj}--oS0DxXbiejvyNwBueIx{J8C{ zH=fUHN1aeE$sZjvxG~RZ4mRADeA>X^Fr7I~F;RyeSZ4(%7@xHOO^8%eoZxEJ^3+MJ zVv&v6`{jUO>fu`@lVJ@qPUZ*83aph@!gEf+F3UuJhVn-Dys6#?EON=xMv{@(-e*>~ zeiRuU?Obn1OU+8*unx_d_N|-KeyfRX=m8@pivI~Im@-}AlYWnuf{rG9`Q+?{{Bbq{ zsoC@VXE1}A9MHi8_*r%7bz7`$V;JYyjU4%|l7jI=oS43_!HOA4 zZ>+M6Q--37`&s{+{q>LR_qyYLeSCo5?_XFSTF;28-LJpCDZBCkw2UhJ`9J@8 z|0jZ%6}8^)_Z#Z-d)=RVkPKB&t5YL}pxf;}>**EDZv=;~nKxL3XXbsN`2urrut*y;&o;}3;3g`<2$SjQ zFeyN=;^1#hTyI5Dfc5vT{-4RC?k+4l?M{CUim>xEd3fn_>5?%Y1zV2*o$K^PmG2TJPK2wC{6yM;b-M^!8lX~uar3&od{j{5&a2-x_>)8clMwj`OZ8Ep( z!lW;wrCVOUyJpFbt8+rwP4p+Lt&bDQ%t;p;QDYIz=GVN%(M9(7fM+ykHiexIKaN>l zu_+I@(=6IQc188dP<$~2((Eb)AqOZvO;&GVt`^%bUo!d4nGj0kUN^SRMM#s@n*mlq zM;^JVyQrl5(xa&p)xs8${NS?0nT=H zjv3l-Q;mY0s!P^g5fFSR8!jrY+rDu&wFBW-m^K#H(XuTSm$$Qx^}q!%yy!4@M3ShD zmg{qna6ngeSC&SxxcPmw3 z_9?JCQl<-v+O0yki@gstr5@|j>~U#<3)G$WwW_kG#GlO7Wde%6l$`CR%Hz%@mbGsc zn=h+IGE5nyzCgudw*RXBHRdZif3qYnO0s@wI`Ub(noO7|s!fHdJK`PjuGC|67NJkI zBguzV*~|~rD5~MG-Ewh($S8Z?<|v>h?}qJ`tb#O%Myg5Do$2O@co1)rlG-7RNze(b(CY4*td$%Ft)0#=v;bjNEK$QrVR zA!sYoQ>gVZJ}(GPD&n1vHy{H?5hD!OR%UWCT&D%=Y1sW8kj72?^s2=;7Ny$2A_&+^Cyc#~!FBcfk=jDYVt$m_%(| z@Kk#wt4A)38*)d`uK@kwmBDbXn>H$TWj5U4Il`<+wl|h)3`~*Bus(+>CZxGfMUSIa28#4^Z6Uu%c+qd>}eyIcY|!T zCK~u_@v{4nI*@P$UBqqlJWsDI`H|T?igOF{OIpEjvUC5rJ`j_J{x_a+m6TmYCK(HPB#0L6uZ0~3YPct;r@nXDb^Xl4dv zwDvUDf-&|hp=>!a$N$AElOqErr5w+_X8doXiyt=~7$f?WbevFS zr&4Xzbdg4^N1D!*OcAE$l9(wF?A<91wkk5p<-=Zp9hvdpH{)!vUNWZO+366XF}z*^ zJ0E51+oNV$Be3ybRsHi=0{Tq!KYs0fE%L8dN)(FM(g;vFlwwe8e+{OL6foZTJEE(PDiV^|MvBoaFQ`t z>Li(`4vM-)!khCnp47kJ@7f&x3P%Hw;`ToaOI?FZP z*RjgGG@2i}6aUa0q2ashfVoPM&3Z42efAfIOBs0X=u^2-z;q1QNyAzZ*=~v+oF;bMvl@P) z1TOubU{8p618MLtSH&ZOZQZUrp!?0{)tq_ukNLo+xwWuPuMbWGcb(SwY8;}^-K_xV^*K%+PoH-%(@^-=h5`VHF@70V z5M4EiqF-H@n6G}Ip8jYRSUzELM$%U{KuAm*93$|rBnLnqxp8niZ`I^j<3{^lrM87V z32tDzc5FTC$9kX#&f65sjc&ZHYtHEC`G@Qg-&r*jk1=Zyx8qIiz`a&Y^CY=4lBFI8 zwv}JD9l(!!M9)qTrJE0T*#h#RWSB=QV&=#|7#V3hKMpQyYk$h>swk@hvd5C{4YkA+ zeq1uEX5_$mv@K?h!JZ+fA`bxf3DN_M=(P#&_i{Fm9jBoQp$i$bUcl9iWPpbob~A@F zcjBA6Z$CIHcxrSeJk$o5##NFELT|!BYQBHo(IZ43qUPJ_7eR7Ojc*pr9MmiQ)(C&2 zJX(ejLx``)o^m)|pCC&{U{?`_kOD3QdIa}L%^zy&7_tXC|C})AQF`4~N^3!o8Sl_> z5M{v+FA~`Q)Z)5NE=9h^aazwbQDUj%D(Hd=3N#Oy{yX_p-j7u%JbfaCv3BqD2w( z#&Ou2r9!vEq8_Z?-}RIXr%yOS3G&LQ;*3W}i?JjQH!L|$JBR!30=`Kk@PR^5tj-r-%!lj)2b}-Rn*?MI-YqqTg&vHbJ+BNaRX5Ji>t*y+Sn%+~+(W=aiE4 zTRA+U#b1_{$vVnOz$pC)FK(kKHyGQsAzeK{PxhEaD>w`a2V0lSc^zxzqkbBNO;(Kq zLsXIa$YW4zsY;TIQA;@MDrH{X>-0xwNmE^kAF^kvj~~!%{u$^4fg92N!Wv6lEhAGE z4A_6n^nz^4#CAY=cp`6SPGO3b7_j}vBc&ZTLzCifn=3?szF9A2Dt}5h5MF({ZYLpq zmD3d80;A#{W+v6eF_%quVgl_S_TPkoR65})wR0WGB-jxe74%LfA@8Qc$>DqciD;^5 zH+%*yXh?tK+D0|bZLRuXIBpAUv@-8aP2fZ2x#|}YGoi{q_ddz0mCxCdiaqkK#L%|L z(-HEbV~`4cAouCpN;xDA8s9JWPBZ3xQxR(+`2U*_nI`19f? zM#G3soBP(|5Aj@SXHsrqM!urQfW#ECtZ8Q@r$$2bWt`9jQ}s2jbeIX8*|_`|SD+Yw zJGEFfx|5~_)@^sz4llXPc1uonnC=`a{Cus0vj56Q22b)^pVuBOkzHL;dz*m_o@~gS zYd%eB^aiUv@%0K6!9MvXzgcpY5}_3B?Vu^M6lDFIBXxTna(}JzNOhQf@rq6HvXJrl z5!??;--$d03%>C&rRUTO>c*nD3lKb$3dht{kn-}C@e0duDDU{sVKYmWp$?n{7e~(m z{!G3X?m*`2a?HKTlfq2XG~`9A8Xp3JBadAjeAn)ESBj44N%sn#BUX;u?6~dgezHA# zjN3|VV4-#ZOi|0N8%x%r!VRZ>lvyU;AY0k}-62La1*BcT()ojx-kk`FYRUz#&eMqz zRQuOv2Fb#n+~*pN$y!MJ%SkNRg7J$II|o=yH_XT!#1 zpmecl*x=<61iExD+_3_8=2~g0X3eZCZrNh?C)>Bn#vUkUchYDbX@mRpO6jX(X{c!w zk{*{*56KJ~(QhvgQ&26$sAtQwOQWS-i?FGL5lY{ifQ8I6Z})V0@4jWQE*=&m3Du?M zlZG#{Vi|4kn_L`ES&{<@eafGko3-}QaTTokc8o=7&~sssAm)#}u>e}Scn%B{*t6r? zkFwHs((h<=a$J7xRZmwdPU3#Rf!pfR0#w5DkCYX4%KGUS)SInsvL)E_@mN+gVP)n* z*7G~g@@mD42W5p{i%u{zSY4fpM6thNULy_*n|I|nP5rL6@5_d64ENs9WBZv0qaZS) z(NOOmowL1-{A5ATu>wtrDSO)0uRDKMgTt&F)qEVJ-2AMrYH5Op`QAUO`cu2f2hekF zg(svZ^m8F33WD8Ah_02lR7DHwcCD>vsxN?u9W>hb%zk#e|C6*++>D5q7z@9=3lbIu z5FJfPf4-fa2w$V4b*@ESY=RO7(Ham|Hpa~jA@DEoP;?b3aZj2`GC=%8e6wD2!{egC z7_zFQOmv|?1J%TmBZP#FoCq0y^r_}=r`eZ(Mp{9t*wd@#YMRwcn2ph#<+!Qr()(OS zxJA@)VsgC;?Ge;R-B!DB;!Y!=UnnCo)DmVAC$kzFvlB4FXV5q12V2R~(Ru0AZ6hbP zn`YnqMc$5&@MAy2F%qv&gpE$|gNO3mHuE=0 zw{Tc2Gky3bi^PHVdRyBUr*5I`NU-o4uwbDif* z+$sut_Uugho~t1tzSz0p!}SPBMs|bMPfSR5?pI&cxryAVu4BhX<6wx`hb=Lz-P;}T zz@a(04emuZVaHS<6-TDc%Kp-WBo|=A%Mp3qTM&V|(^^{w0JHeKZAYB^6)R=O6B-cp zzpp;nS}+smR;O9zcIN?c8#i(PDBvlJg?haVF9d28%@YI8Q^>^GGP1|<9yWEE@{H@h zQeh7`9n;+OZC-RkrmUywWUq5kS5F8PPv`O!SP&_|^-9_8gvyzN1Mx`*O!b$;LKwFc zVZMx&s6UG0aL23{gmI$bq*`s@U9J-R}rI0 z^qmfc593F$p>8>etc8f?Atqp*g$!#am;5j_7Zt|4{={BrovNE0VV50 zd`6&qi>wqFprkPSY}uo0xCv-4?lt!$QuA}em+M4SRn@6SCvf=F=iKMuGtTf59;eM8 z%CqF?O3buqev5^g9moVBsX(bAQ`Ehuahr4BXT8s3VT$3~dRKd_S5+f3nGYp6BeD-W z;@RZxf#t2t=Ct()z8Vxd6jDHrYBbmEkezEg4^4XWwV?*J{Gkq|QQURUb7wF$I^dF- zIA1f(%iJAM@ocQjtS0le8kf#EK63=$e^vKQPH5@`LP(4-%goms`nj0eseyOT;f>5~ zf1zjYT)lm0bCEBNZAzXu-|l@TYAyw2g|^4>4g~S$43c`_s*_g`KSo)`X2U(B8){%M%c} z+I}AAHtCo}#lzGyV**@?Il_k?1Bz}h75-Ib?$SIxcB5iD868{`Q-p#+*r&{X)MYu! znz6}ce-uW$liKUBt8m@H*NfaAFJg=_&>{cH6Pg`eN#_yt{oUC*uofpMivP4BlbS7O z(99){&hpKtc3Fd3&S)%H@e&&q=)gs>jk0@gSrWrZF?l2)vZrJMq0yG+>dEK`s)o_) zzqc-zo-LWpa7l^Kbt%dF1U+J`b&G^81$yki5@tnWNj$~X+uDhm{{^{7`;GGLg$5F) z+GPp2#>1o)gIZwsWnVz2(JDu40PA31Qs6L#OcwUQM+AS3;+Q$Lyour`cvrS6Vy3u~ zFL_D~)`ZQQ{0Iv#ayj(qRwe zr^98VPgf2gOHuu+%%8>%M+EMp)NEds13hn}1_EKvjdD4R#}B1JF!VLQN$7LM5u3K& z53>vG9IJ|+My0o+pP#!&`#0DIE=$(3z8C~&ymXcUwU$dR1E*9l+<;IrL(vPbW@ zlX=8&2VnS%!w)mV$~$TY=#gr~cz!uDOfvfDZnA6K34&J%f)sui0dUPeb?tP&7HirQ zz7GX`A4tG;Ld0>iBds*o?Z7V)tohJ4vw29E!AVR=iZ~B%lMXYr6~mve5$7Fkx#Wd( z`n1F31#S@vnuyH~hbk)eyeSb!9N!W_u$x}14~-U#aSB?h_;X>WDhklk{6chv&MK{N zuX7?(sgeN!WR&KT>Y^Bp>b#iMhooF6XLSpjB`?Cv#{od)FA#}ogWgqCnBB)>i#J=@zdQ8b%=_Am9<}%q?7T$QJ zo}c$WzQ3D%Q>Xra|NQ4FTH&w1{?2NFNc_Bie*Jzsi@Se)e^=c|Zuz~cda_W*u}5YW zP@dDApI`qPPt4c;tM*Ob{rmmX)#cGS?bu)O63$y$fG10dfmGb{PTw709KUN#7tPW%;DaSDq|- zO`8r_RDFzd1F8$)k+aVw6|(8h*$aq+#G%u9Jkbk+dv=h8$hgC?x|QMW zE3VO!!A?nBhMm|h@?cfH4)H_)V5$%AH7($;I2GwecD|+4$GNv$+^m1Y zxFSE(zt*&rO5A*Kv)}i`JMsn{L4Uef_jGJ~x3OndS;i@$pPrP^s0F9$9?OQO7QDFaMrrNb>o)S4ydoO8Yj-r?FJ%KQzj1g-Id4Q z8MLy<+`wm0#pkbcZsiiIijM>}^?O=p9YwF~gvQFZgHMfhYnk~V%QE@stWG8U8GlzC zmRQDaH5-v8r-wil0Go>8;oB7~XAW}{&(>Kd?oTuC9pI`^1iv|rA^2H*fjo|#xyCnW zyN)3Eu2(*%daT_Cn{+PNneT{a_{XGnP0_J-u3vRy{=awQG*`V~i#(Ngvb@`w{HDPW zKK8({Y&XZeOQ*h0l0p7n7xx+G=-tLLh@rE|XYMK%Yv)YgZMFdu%>c5D#3DqwZUfrQ zeoUlOVi~iw7Y+xWp!}gx(^fF#2&RhT77UQen9cuM8s!L&;*@TG1pAZYC;4B5S?duR zX`EY(RzWIa<_SE_>HA8jwW5A4BR-L+=ErD_K-auXH%zsdPa22LjzfwZE@B;>xck~2 zv8mFKn?zyViu4((X~ruJ*ffMTRavR^HGpy7IGZ#sWk#q|ZfhV5HA+wsaSkLO2kfYt zv2R;f4{fPs@kBjd<(d@19i`*XNqTRI(icP=izRiTM76S3F5?K6L`H{p)me4=N-$%y z*hAGF5~|Kl2)f0`f>u+FwhD(u)aglg2c7l8Lh-Y2zhwRun<>!=q>rlka1TVQIHbz9 zD*Z@J_Nvy?p({L~$>Q$H4^#`P!^A2SgQ5OuT)DjyAuJGSlo_3=1RWTtvF?hq?$Ja^ zz#C+k;R_lG-3g8UuI5)I86XWZ>OVlq)dyprVy~T^QDSX;r;1h%nvHD!lFV7I_oL5M@~Tkk9k5 z^QhXuV_H*D>wrhI`|*-8471P6f+ViTlCB<^I8;LV+__gq(vuJ=+|@wFF3&HA&XT69 zNEfwWhF9`ArmjuWZF+7to4H-5GZg1hl3_X3hh}BBuoeXlKU7&$p^L`X1K#Yf-D%ex z>VWLp{-fX(daetGO1joW!{371Qmcq%gH_95Th=R&S~O3OsVptkVcXvHlc!BUoC`c! zT~d!*(?^L4fshT^*F6Qpnjvn+jShWXxs^HD&}BAvfIUkRcVGL-g~M@EzBZW^qqNbB z`u^FV@+l}Z2VWQsnIY7$Uii`?&ke{<_b%=4)l6@(4UQ@gtkmO{H|k`@R*@Q8mn3*I z@{2n=eXlqTJ5h4oPO7CiWK$?t&153i|59cJ*iKgDP9Cf+x_@YxK4X-{Xb>|1|Fh&{ zDm6?KM3Nfc7YaS7kMur`u!b~AIcoX}r+0Wifvj={@COrNHHmYBj(g@V4j zYdyL8n-0~mjZPV=ORqLpCSSgJN7vS)Npce+UIb%&XHw;Yku9nZ$1e^CC?n=&7(KKy z-jCr@>YNjo3N#b=7XicEbB0HME1vK_OtI~hvhtnG z#rCc?4{F}V-W);CntQDhuR(=X6MuGXS2+HUOtUtCKM1dTiU)`MWYG_-^iRWsY_4Us zCuQ^rk|FyHKst%vmu1WN$AN!$>z!NTkg_23v~&&;z`YZU-9UN!+c3NuOBqjbUGr3j zw(5@=Y#oedua737%Ib7Oo!O5}FI^@PGxjL=HyVA+Wp@8U*oE2z%LSBq@10w>_z5#4 z%~v#|6Z$&tCOAde^P0N^xDH%cm(gL}aSpJ0xzb;SMr;vlp|I$Ejb=Yx=Ma>XET(?_ zgNEvvNC?CBJr{R*k;ODz^2ziRJny9~$9va(yUPM7K;KD!6Fs{0)8vA%4R}2%3oQzoV-F!4WPZb6=7Z9`|iInb%HiBdZk!rhOe=YRJ%NDm9FP} zJNQ{!K4j-jN|rd;VO;52z*q0tAAPfDjE`EPbTm7M>ws{9aVCQtdd~!k{QdpaZ>s9z zTjnS;_g>HPS@CKB0Z+>JOa*Ve%M)JG%B@54H*)W*OG0%kpRG)U|MQaEB6rULNj`*) z9es=4b0A~ENlsL%{B1=F8R2rMinx^;Udn3E&VI4_LW6At74PY^Wp^bqkkcCcC?_*3 zlgNgpqQLsZ6oEIf4%*o6 zl~FT_xExI*YH8;vQ^Ga>iP(4j+=?_;Z^+J7y(TH041exF_SkE-B~1@9tC-kOHMtG5 zTHSv$^Ds>nF`Vxu-(qu)u~*u+hp|}YxCz3G_SlI56zrzX|ftg z*z4HzWWHNtqQPAcuIpxw!C-Lm^o^{7An#bQBX#a|js;g$tH4-oTGbihz%}9gnmW0% zSyT>;kBUMt`=4T6yv@dsWim^h=-Xsxs-_>)o-jw9XIUmbtMD+MmB+_ta4%t3*zQ#i zFKX-qRga3^g~7Mw8Pp!<=v2rr>6%&1QUC6uY9t!TFxQFy(K;9hUIr?LQcqFuS-LE)&2+gvn0dPhEeVTB)10{Q?1Me3CQ(Xi3B9Gs>~9#^(}O z72f2{5?haGsJx)!#hT#tmXQZ12zd zl|{@mQ8|osGpe5pprD-Y&ezgokM5MM%}>;EzIaQH)|-Ay_#VfJLzOV~5}9F@04a(N zP2UD1x$uO$XjH0de9iS3QGLl^kuecp9T}+sMeZHYyUK`T1c2(@F%($UYCqY%dh>!z zuPh>|t7%FMzGMzVZ{t(z_d%Sq*gpCws#-+iGx#>`LjD@(HyHC)ih|p{9t!=vt4YNp z((D^wQMxTN92p8l76+r@=Y~B1WHySJSTGsIwTuivFIrJ$|4#o4MdDgNF%H#eM{j`% zWYn;7b59}M=Am>WdFxMlIr}IL`!l^7{wE6jK}t1=g42{_<|Ne`A(~i%fXEA|kF1O} z8MSn6#Af44l^r4hk8gT-vo1zV?fq^FG!=pLzkBePzB+6T9j_rq(Y%`Z*wjBx zwR(O!PQi!~qh_MFW1F*p9<1=I?$Fuvg~?p#UnzCDA51S;>OJl`;UQl)fJV-o6x9}Q z0Fx&30X_pReTl0?utr3g-V+reQ;n;;kK^PN>Opd@Idv;(;o|9NIC1%C+3$_>vd*eL z{m)G#a(}3WKSPe3>^i4}^k}d9z?6LALaKsZ+R>JGHFTj3!dMe9AYE6Gd&-@UwT@g< z+7liY{Pt7eNw-@>R#j5k>>@c*GcvRrnR3oRD&Vl72;MwML1PC=L_Ib~EnC9~DV3uf z_P+=hO<^+iPV?kFLOD>aco`4LR$&xWx1wv%Hs^q)Uzg!fRb|AGo5hi?b|sZ7t3NWP zNNvGc_=fvlb=g@}xyLzU5`_ZJ^+Gx_I{pd8EW*Jd>Yo|aY3_2#bZB}ch!?QIx)4UpVx+*-%KF>^lZ3VE{1UdThd_!HM`|`=tz`Dpl*tjMBls;?3HGBO zZKp|g0awriQz}m{0%-=P6bDKbOe8+_>(@`_qGsyh8Mm{~qG~^Z@7*}Zxn;ZFUO=63 zH7!dtVEu5|+N8S8AAbM5b6U#l(Bv5_zJDU}eQ&%XI*^5pgyI7K)MR*L-lp?YjUeP> zP>wgx<79>MD=jre2o#SY5v%Kb#Lb#BlSq86G68u3kib*|hmSsv8uLQEW%SRfyJ>%! zdNZA=oEej==vw})j_Ihuh=9peE@av9UW`3aneo__FTvYG`I|Ih!=|J%wcHWTHzXgfR; znIjYC^R5%m947h6q!7!U;urn={Q7yT0LYuaV9@&rhPS`ob^5m6-??`i!fiUJ4?XCy zMa#@=ZN`q>f%Ffx>23JQsZLSqQN}vA>@Gvcz0VM4ugWcOIPM#BZg>w@=d?DJy}u6| zlf}6o^Si<}t5&TO@vc75AJXr`U4A_`>?>Q=5xMhy>JqJ6=d3HLTD=L~vbF$Rcdy+h z#o6XA$=SJgt|n3K%#|je5f9Vi4HFzf_Ckxk8>^riVMSIUWrKa%{JC6RGttpijP-o3 z^%c7}nYWnl**Y?T^9ih|x{({We@LNdo;@=WGYlBR0RRy&DxGKp*| zftIHoCz+t^JxO2)XYs@r%(|Kju&29>lG_NWvk%L5XG#kfzP=iWrl*@Cz-5c_8NP53L^0WSUoSbKF~re)3G_=t{j zaVJjr0~uvos_4_KrPuU8u1LOVKs*xYb=n3ai7@&ks4)T0PxAhpDl^&JJ1=EK@lC-k z;6ri_~nf%N-0_e2;@oV zAYfKTwluvNu)1{QT<}_OqYq`Cg~qg_5s}fuOL9^{0PxN(NcL(m3q{#6!s?hI7i(OO z%qf=#zk$2(t9PU6W`zaZ9&VN^8vdQgLA-9~X|Cc-0N93$>Y}&h^bnJfIrfdx!-Rv4 zY?QAuooq&z6RsaAimpJJ?7N>@(QG>;9-(rqm)+y2jyLvijk^se>sGjqreC$>V+h@q z<*;==yo6#zbl%Ku`{`*(fy_+$^13@JveD>b1{^`R!JiO_wy?{u@D|X7-+>A1u zY27L8Ua@}8MBQfcOylZj*@LIk>6%ZTZFSCO%-woAadO2y^`3dsr#~HN zJRPBC_WSH!H4>3}8s|*eoXyzyRW+m4reddA7hloR^3mYiUR=gGeYkJx`o7%Gj$QR^ z`}~MOH^r+#*^oP6I2eeTsc?aB*eQ!petJrIf8OV;e8syWv(8=Y^yVV{m4&T^kioQ9 zx#Cy7@2ravFtg#}m3_eD0NKnbeYS!3)iIRYh@tPh#v)hWs0KlvnBt67S$|(W0#Y!2 z7Ctw{F;?fw!|}klKCMgKrFMEI`D^=y%*eP(CxQ0+MhMbXA-=eB;jftTL^8L6IU}1CYbN8s zF!-Q?@e@}R>rO%ghyoNIu4P%w^wil2w^5P#G0ndq)=(+a?lBk7LywVz#*}+YmSZGS zL`5qc^sL6cBX9O<6{SZvT)C4toR7qD&z&}d)fs;?O%NN{Ya-VX44>+_S%h2#0dVH;CyegLx8V+p^K0s7ZwNZzZb zXDwL?Gul9x{;!Or{Y06s_9&qNA@&t+uzn$cimepj_y6CZU&8 zZW?_nzTQ_l^b;2EvRw2-g}wG?z~nu`PfMpKP`lsHAMxnd=$@P8RP1p-W|*MGP+%S!*+_+!>O_ zxF2-QvAuN&?(p{}noiF_s@AUF&KvP1QhWq7h+zNz{zk@kZ~d(Cym|eV*YVmpdEdPa znhy0c_~K?hc$^}f^V1Wm{_NjP(Acn-KIQSfjaNaX{p))_146f8`iJ8KSYfQwKXGai zV$1xwbm?3O{c82TrIpx!PAECl8m5*_2m6Oh04A^A{C=R1T{W~`Mz7v+Zl3I)E)xvr zo0jKgb-&flFmolEUn7G$Aq50ry)WK_#`}`!z;3;jGRr;u)BI3}9aE?c9*Sb}oSt~N zz>KlKE;`bY?RSy>0r>Z{m9u&Z1-?Y3nPAM)%S5*RKKv<$HMAWqeT75R3IB>8BPp3n zoZPd*m|kX`oXOmXJ@NJ~*d1{3xySfvQ=6N{n;G@FDqQL@Zh+%~<*(Ej3LZR+wd9Bx z7Ff0A&-CWw+6yVL95Rl53daL4jNk3rHbH_B_a{L#GA~)#(8d&dt1iaiJ1P4-r^`1J zx1mC<{L^Q9fh&3AeLC+IfBJjUaYwf5pm!Q&F2GN4k9?-8BM-5S)p(dCBBH{^#fGW8 zxa~0dxSbNuYP2GR+Qu_wNK=zNGZVOMa^rY?(j{DVDCI6={3@&rPYzkkxml_y4Z?Fc zow=$x-j%)HIb$Y(U4$n-BC_?z+q19a@ru@TB6sxw${@vV&A`-X4yjl!wEko!-3Jt& zNF@_zT?Y=MaMKB!Bwxv@h6Tf))-MYMmf_JIs{sc|Y2FC*l$EeKlWCyhLjhu{3p2R< zDNg>P#`S!rSvE}?x2tc+bh%)%jUHTH3zK~UG5*W|mKddRW%i;jPLBqKn&DL0(;ABs zlYN<`^*87Fr%B=xhpQvRd-8KcJ`CD+1Z+0Wj0N(F;@jpPqqnTy_=-CgNi8{BXPb`C z|HgaoU}c4S9|4arNCga&d#j2Z&mH~vz~)f%(qCvY8CvjX(oib+y3TvF(6b8UkZ>~u z;eEw|MET83t5+^JfK9YE*x2{r+Rv{8FqM&^@9Kmd-SAP`;IyQi;uI%T*K~%OISvHT zrs0{>N-VbqkbI0U zP98ud?Rc*M7CA1p&q0@eT=2PDN;`}Z{GC;0;uMKSmwyC3GUXx6RY=?d_5VvcPn%#5 zM(W)z0lmAMq}=v3S+^+6jta4rFo*h!bS;`JtBj`(cTY59>fI>|VqtP|zG(c0War1heyXsw&E7E^xXD}F-75U12A1HiX9$Wn& zk>jN}6i~S#cZzWbdf)vD(GC)BU)TAm{4g916Z-RbwR1pP@Be-uYD=NtFOFL@3Dg&4 zm2a$c%?Z-xfBi7AqyFcv-nUK#U2pzAH}0E>9$bculFce1d*_0te;-kL#(h6$(|$0c zR$q@xamYFiC@DKO`_Sn0W3DYphFMA*+q z=3T76@mSCXKb4ITw`K-iD+~K^JuR#;Az%t-avyf${?RVPEe`b+!=z96&U74Jf^>5{ z0N1bfkNi6uH1bTkyM`DgN7q(`5gEf1oEWj`rj*0X=oz@YzfWmQfMXJ&H+pFMcXA|dX3 zmB5qdN9$V}F~Pp)R~EJw9~+;>6vH$K_6=;5_UksdzgE02?ByE`b1%;>d?`-gVW^W1 z84d8_Z)#mIsK~PYlVP78qpY04?>Hqm(ixlZB7h2-ds4BI%HIPM8dJfsbpfyal`|T` zV}-vQhpCrQKhPIUd^{Ce&honWKQ_Ra5n0qVs}O>tW5`$tm)*OswJ) zMeyvGq8r}CLLy7pmq&G1zLISum3_ZNGO>YyGz1WxI)CNu+utWI-78V|{`G?HCFh*? zI7Qr$Jd^e@?ubBwd&2xE>bT73)sG(+V)@=eM6OL}?9h)zb{u_i^ton?(tYjZe51eg zoi((I5!wta`3|7aD#&DdOLgpuS|z=%T9hc*hrZ;cD`2b*WOP) z|2rS7EhQUny~v+G712Mucp9+r^0~1ky4u*AX{N947Nrh;sTF;#6eFp?itsQ@`s8K}h`$<-ACrzoHnuQL|2-SMrrmFgC+6>-1(z^jhm)kzRhi3qT-{G078R)ov;%A;hT24m`=Nr^GIA1o!Z$%(BZ zk!QCDtB%NO<$ik2)O33N@!EO6n&YE9!c-mR$JOmZRcPdawGEtnctkv8TP`2|o#4np zI^*7Uz{Lc&S-_3Ek4dlUHmS*{!G*Q=9Rw+Lev6FP z>y=+$`|JDr`>WG=BQMuMyms!ja=%P+&y{KGAmJesOXd+!FNc7=$+}tAF^`HBDWunll!U4v^V^%g# zOLg=RPy3y9_6GCraba)Nsh@}AKwOk+nkn;WJPWAtvTft6nne)>{%_JPhhA!v6VeN2 z+Gxp`eOY2crwL8=>1%9aHc_Rown7^rDDLs^4A5{H6#yUqmSP>APW*$)>*SRnesqD- z%e`HoY7}-5x$GH@I~DxV?Lh5^3DWUcdNW51Ub?*7!US#}6QWd2I;7yz(=wLv>w-i3_?cRj(5YR|hu1ue>_GC-FW%R+uOD9@tkgrC|nNmmbK+h20;UHej{d=5)BpGv8;2`v|oU%0mA zqq)Xib~UTS)(ofsE(U81Nnvt)?5$ZL+3cSv{&99CG#DRGrhcjU^ZJvATvFVJ;dG%_ zd+lS|BIlGr+0tXB$H8FP%)5J=AtrgHkH8Q98B40SPZuJ{6C$L30pe&ZVg^DCbL<9t z!R_9M)SdeGCJy=C5xye!2KIM5eAHG{dzJK1^5?mE_o~tiC&qX#4ZIJr+%*tHbg#uPrdo6-vw7?-M15rRyXb4A;=lE&a-7Xj6~-n zU+h45EcP`dlg$S8Bm=satjR-R0*Q--gyQOZmFa|rq4E@bmo*zT}`9Q75Kfb#8V+$?lxLtW{1oxlYnQ zA{M7J{3X_#*D9k9+7IF7DtvU(0IsSaE71flL3q}<-RP;CdU1FC`_FT-jrd2J`v(&E z^}?Zi)d3G9#i?4-I9;n_Nu~Kn>=IH{wVDmZL`PSdRZ|@17(eUgx*8u%X%q|9-vV8KYfq zzUG7e9*@(7H#}U9UeYATgAJfsea0p~ee2w)a_w}|!rJSe9Zb=qrKue^8*J>~CsOn2 z3tjFM=xqG!=Ljp=jVL&I<=T6MV{_qnS41VPr~I4o;?g+DRUuxlXld_w*OJNrsc*cm zwf;h$Nn$-_clpbiVIVc)3g{Zpb3(44sWi_mDK7n#u(buFNOn&SWc{pA?*>Gb=c zYtw;8+n)HzTE{A0{@qY^t>Xmxc4F1c38K7M75Qh=qnkWNjWPnlK1)#8TAtCq>#d~V zk8Tm+ZA*C{f_9#DQxYfBml+VQ-5YXW;Xt-7{!l_{f=yk$okj=@5upj~Ddnryy6=l8 zy=;tAbhP1-{MYOC$5QL&LHZ}}b>F1f@=wK%RMWBgaQTbexQ}k7KHjIiqu=NGbbBd5 zh*Xzp0&l)L8x5q9*nFrlAuQr#HSV`vU~u}GfngP1l$VszO5Kz2+EiSu2&%z+0~nSOboEv)x=t8b(=BU{y z%Aijc3%>_~I_jyM35+lsJtJ7Ow)JL>6DVt>HI~96VD(=}V`%!kT1pCtyOdl5x=t z;k*>F;}gD>4a5Ixk=#$uL>t@XyI^plX|E55#`>tPl-o#&D|9#z0OzPL` zyZ?cCj(nrsx$`wED}FR9jL7q^y2IbS`}Ox@32|<$6Tb?Wrg;s2HKPkIj>m#V-BCOY zZGcp4d1%<&gd@u4ny0AZ&@@zJ#*J$Hr4J{IHjPCwKQB_Ut6+fOol*D09n{!ASYT{5 zeM`-kXi_uziiG(R&N5~Jd3c$QY$VYG3QKG@3Ie!B*v*G+=Qq6#X<9cWb!k)~5pH&2 zL*SCURTU^6V~)7xlS8uyFywIH$+#Owc>}Ku;&VkQ&#zuGR&9|?Dp;lV!&y~}U*|l= zhr*B)R>KS%xhMj+^<197zia-d5kV7gtf2Xd{iZ zSEbtfPqmKuJS~2yvEX0M0lRcLB`YVW1Z=xbXT~XyLLKFwOG+(DWjPjc=x!Xdmu1cUD~_?@**gEC zUkc@B%x-Q}?|i0;$)BcBoutDep_<0P* zG=7kMd#)zvxcfDwt@=$=O#=&V6!zOfpke^p&t~r@&Cd_2>5A}8gEH(!^%6RtzPpC} z6_9j{E>d?xn zT}QC>Fr<>J$y#R4f{BL94-sPa$0un7@F2Uv$+{$K?dms*9;p{TY_*o(LojG7nPNLw z&Z_rFqWDYh8h>hNsB)LwkL}}6ttG!WB;EHK@vzWD-r-<3|HX*WLm$`e)LSNRVZfta zd(2B_BH1@`_LZSBO3BI;Tf(u$6;pJ*5F`?uE)sT%XO9{k_H$@r4fJfJrr=+S2t=H-eB3W0di5E9$3_hKs>_{Wp97^321x*l>TqsN-7tc<|JOu^w zCBq}8>Y6Fi;0%tl^Fu;xIzcybmeeX#xVqUOuG=|wHx>Cj0u{06f%YSZrHspp&|Ur0dQW`J@u;##G2nhe7B z+P9}BcPA`YVG7Y?GspD(YTVY`qx?g3h3jQ!pRZI)vyfo(1#xQtf+n?xL6UPiHkZf# z#4nk{MZ=F0I(yW0Z@UeuiSkb>He|cmdxCBbtN()kHJPwy7VzcKXLjinw*JMSG7Aaw z{H|pIKW%Y3lFU+uo7LZ|&nMQknT)-8{1@t%Pks_7HLmyh5h?|>Ml_rNZS1uKMc`U~Ra4d5!H8@7hMe)$iRPK4J zCKt!AntIiB1&8dk07j@YC_Ug_d{8FjqWKNgKlh!zZ9JMCcpxpGvoqp!)OGGKX(38 z+I#DXMtB~I@IHr-M?ttKu0E>jn^u)mEmUS=?Z|D~}I#@Rn!l1^)T>V-Sy%qGP&2Fo{S$a94T zXFSZU*}xJ+oX5E@Ka`WvB8eL@2jIE-RH4yyifT zVFeB;eyYe?GOn|aem)w{gh^HT?*xFlB0oGRaUgCws>G8Q7noL}H+3|NYB?#;RDz#K zt&-(^@ms+ursf|+06{>$ztR3B2VIf#OFR`;b-YDQ_P4fej&Uw!O#J!7ePLv)VE4xT z={+^`@gC_a{50N4H{BK^)~z8i>g;bX4P4BN6=f|s^qV#Bo3u{n-bNbmc_@-PEClje zy=!3BNhddx zm&OwvDBGYNFCS7rW(+iLBG89;PgzVQCzZ!$2yaKq1H$VB6cgo!?sSIWxAssllDb%E z)`ov52i8E^_{e8uaN+Pre(V-DRt+QDg06UwYQ|}Gfg~tLBHO(gm${fyYj765QI*}C zf+ntSEc$pQMP*#-SWpf2j$1iTpym-j@3W5oMVF`?@38ar_1%QsbI$n;nCtuX`uwFj zzkdDn_CMVz1ysVoAqG;$>-B>0Uh%d5>Z3j4njp&v===LGcLS2S7qaeJaf`s|0zh(| za^T70bxzOD@+cqYlg=t12g?+$hTQg%y#sG>m#skkt=W+Q?4vf8rm#&WN&SVoTfT9 zKR!6vG_MKHPqeE}O!FEc+w8}BGzVoTA0kA3) z0^LgkGXLpUKDtrOrTRqjJ%clSZs|d+U4|3Y$!n}=vmwnf{PFYd4h6axf9lBQK$V8Y zzijq4#Z`;|-LtMmF{j+*ep>Kfk3IofZC>%uXW`NAa0K(@ES2%1ft{~QnV%W7i807g z>_VQG)GhG^+Y+?|IW9{8Qig^@N$9gBvT=vKMiA~iQtVC4sBM~&Id2C{M9T)?`w{32 z(Pr}pggbg?Y--0As7cri%HhW}&d$0Gls z!S#R5F<@^eEo)=UVXm_eW_tPjyu0^US@UDi9JQQt$JZ;qc6?>LB3>E0Njk4uYv*?G zJ|VvnBu%O_YAoE-_4n(ANMFIl*K1pJap(Q|{mzv=6YWp)ub;#1&Q!P@t@nsf}%4ueAKJmds*#@Q|3&+j+tL#*y=XWDH& zjL4AjVf4hQ^{zUnE_NymG+ukt2*sk^&Y2)^rT)ARJLj?=f1Sf)whnrYF$fgcdacZ? z|NQZfcmlCE0Y~|Wr~wq`5`D5if-IqW%_=3eW1Y}G9&{9_!Fj3>&@$#%9Xtsna&xw| zvn*O(M@l9qVH4SR720uK-aMFdKR8N7o4rD!p`_(__FE?W{3r`7;NDL{3Wt&N1Gy`W z_f(xANV%I9m}GRf5R7phuG`$BY<3+D__Olgk((FW!_i^|sGmUr0f26*wZ)~@K%+Zy za$uj)LuV8*67;$RHCVX4sittu8B?KiHJo^cAw^A*7l)^+<{|ZR==nun;@*wZxSrz9 zJ4ck2nbpqdXs<1=I*K&()2#+iQnv!g#OfcWDz|>%F^JqX0Ch}c0ot?|gN~lcRucRy zv9JvjC$pq2X%DBi6v~??Rrk+WqPH`I$XdH-=|iB$UUyIED~h-$9(|uew|3^a*LEQz z1&wWXE5CwR?pYW^V9@`^mXl?KVSp1)Q?VA&cv3hBCWVjDy^#_CP%@^?*`JK`e$FwU z0^DRRdCGHzDTwFsXC6bpyRH=n{f7=WYF!xYQA_xnNa)MhKn)bh=~Iz;0zWu zocE)1dR&K-alA`XeuJSHxo|Vqeqw@RdbxiyKhe2lsghnUe}<?E8T~WzS#M^_fPpMw(m78BAqo!p#z`;El zc%P>63?P@UY(SH_PXMKv{$vCNFKYr}IW*^VlTK;pkh`-x3L+iV!7Jn9(V>Jo5%3vX z+pnHHlXzw#k5Mx=5|~7JCVNP;xfpAy4YkpUNLX?=G$axxI zwoYO0QxE6GtJ51ql1KsI; zWMzeKc)hTusgFDSP7cRb{{*oSG{7iZZLzyQz9)-?Fpt^So5R$!X>RQ%#Ka-o4fWh# z&RM?uD>Oo#be7c}7tJPxQ<&np-BWoTx8)fZzB7+L5um4$Sjn+$sErncK@7niBct;u;e!$o={+Y z?&I%kC&?Bh73==<=$Nu1&yXXl(<9O=C-rh_PndMUoURf#Vm4V$Ecz|H zZ@$`OV>h@ocX(d*Tr=+v#CAS$OE3SkE;Eo&M>&U%K$B+EN-2~w|F`&>+Usmi;ch>E z|BNAv7C-fz68qVWr?fbT#-O1fQtYQQ#PLeKhu{5>z53KFh`q(-<1jI~&(KD+Z5!3Gylh>VlgyhUB>Rcm-(yi-5Z|P^eRmRi6oHY6vVg zfd(7Utgg^+wPHF_yvb~mT2O{gCnlHuMD#oETfdwVR)-HMtRXL`=SE;Vd@OFAy)bCw z3|wQnnQBQP-|{)@sbftQ-HP-O&a|v13Oph zM8KMwKssi`;rGKokgJ6?C%o_VL0S3E-Kgl!mLaC4WS44vo+*}_U;uWc)TD7YLjL4R z#*EE4VD*ShdK*pYK$2}4G*BJICXZqFGztZ;d8+-`T!NL(%RzTA+XV*5^udOfJBAm) ziS7P?n5yi`uqRa|t;WhH>|dmmmxj)US|FWaU|{bTF&J_Im-BzdJeuJ#H<1mXUh>1N z{G_aP6&A*$(9%YiKMAOe@=29p_0SIGGr1u1?k_7k>8Yv-pDA(bx-ZFS?F>)JdSgzt z?varX2LqG{hvfow%goykH?nn0$*?ueOy3&;iYIBPx7&UBDlWZeb?N~IIxXT|e0Zq_ zD~H^HBxL)tCu2w+h{T^R=_MXmqcC$F#OMYJqVnw5re2fpiyTnBpD*VjoXj zU%MWFDxtNci@J(gn~88t?>x*PTQg*<=7G{e5|8{a3rqb!s@Kdip(kMi%EDH==0Shwm9! zJT*1F_yZR)ekOpH8{Y4Ad(zCge7f4nCi#oYJ6G>{iVS{+h-NBHs936#&Q-jkTL_M- z0{Ta~ZzKEhg$BIUWB@iw7EoebZ}hwg9)i1;!6s%`*99l#kRO7trt791kmALJG;#p5 zVVWhP(PV0fUBz>DfRk~OXNqxauZA2)S7gqFf>+M4ox04Uu9{CoOoN;{{n9x(`@=Y* zPCb!e@Vq!b85I-Jup@4JG)(|*9qx4q7j>$Fle90$`ic#HRF!QETi)%+ck7?ODzoob zP`0;cZDe*7@M}lzA~RLL(N{{k&U^y5@?Z7lxX~s0EAuuSk(|W`H+sw8x|KL`9Z1YY zTl(R?#2Y8;f=L*lkU{P8x~snM;qKl&DT~W<)TaR}?@{U)=Pk=BK z39b42zPXAu3qGj0dk*mMe|Hz~{d^5b*PrFjd_hVSF8UcyX!5x#A==8&v|tXFGL$f> zj+Ff4sT5Y~WAJ6}D79(|#Dj$(^QK$JBu)AHZUM29-w`OxxDqM|-dmux)mDK{H9j^t z{2)$YXJPn@Iv?q-3Ia!IMqM7_!Q+#+=^$j=>h$;Gdw^FBn?Mpevj$I7d&6o&Qgh|N zq$$AXp;`tI0`JWvUjz@gpZ^BABw0yX9p^(^L^3SR3P4HVsgRmh>{aJ|yZ+OGp9*8X^Q zM>AL{I8=E`i9i?c2XHyf62{W5|6o6@QjyJ@moh>Rhs@PDew@~wzih+>$#I{^=VfR2 z>>o?CsOi0JizPJO#owlm($3FPYR5X1?0mK?Tjtvuh-zyQ4W8V+lGijtJj|#3M#92o{RR;&}a&c4x$e zGwRZwoRGGf5`z5aUgJpd`hD>u-m%!52FTFu>@K~F#)L*Ugx{L$$M{yp)x^9dfmei} zB}S5UGP6)q7t>@nD;p=%Xi0}p4js`dMipL^D%{PAkuC?C%?Q6w9f4>v41&Oen{rUia`dT}Lx3!i1&5s8;bYo5w zYW-mz@n}#$bnb+vO1z3Dr&XkeGs91x0S#d+v^vy*edR+o7b$B+eGW7aEp`J#0cblESN{w@pX`(W3%v}1(iabCRK}0P1(#vif0AdPizqGj- z$>gwVh7;&G`JE{t-6$rN*tg^>wFcLK0&tKbr^U*VGc6TC#Xb5EE1fEY$}+19JVJVb zat2z}`Epf2=xOJ|dhsq+#pU>{{amOIm8$V@*}>Sb-k4*A*+>7v$&pm^S6RJ96>#DD zSoZ`m!lRTMe@|&xjDq%@zdHU>V_2Od3KT(q&XiAmqi2RxUKL_K9%@_p;_ZywHqQiBpVbDHIa3l#_Ob(_iPK zT5AJz;JnkzIn(fn_LlD4i`dC1mK^K!eD^>fi@8w^%mFbos&O(+ZP><&FP}Ab@~E^VQPK0)q#5wOd*d~VJlZZ(b{ zUl4UxA84m#b;!;Vnqo1>vmHgUZ-Sk22A0?#<#p-e4Jz{JfrZ zP)@X^0cYhYWhY7V$!~T}0H*s)?u)?FOLxjd&>50d_hkgPuH<;1Eo9J!X&ne9XRKq@ z-VkMldXp%@B)~-Ur?KbcaU`R~n|OhZ_p^hSjH5sCUQCHO^7`t}L`$;~_>w%1s0<;b zcCR$35Q=c6xslrBDW6WK-DIg`wtlyJi&iFNrVh(2X$Y3e^3~7}HwB&sV4#IZQ|>Ce zP|5o&ET#-1q25kj`~#_Uhn%Iz^ zin@JO+Ta+bc}|EGF|w!32$K7HfL z(VAGMqsn6Xbrz@)eeAVm9wWF5*bd1~(5LvMmDA+o>vyy1thl=iK{v=rx{9YidrHh5 zJ2`{TqK4_E)_WqNQWHcD1qKdz!9p5k5(2i??=73pXe9fPDsoDw5{I}l7m3GUb!+A) z$VjTj%SFkYCn4u^qVRMo@EKI4?#jQ!RbgKQM~D+}K<~7uOBHxFIEDqi##(C#fO+YE zT9%f~r8K^K*2*ww%(k)9FB)ztmaNjIRROGXfZyyPFAP=en7beuWS&B)SF60-vpfzRkN; z)MY+fuWgPWQAX38v?_o=4i?*ACU-LwNoc%W=`+Lm=)snqYYxLC#5hc!TQ*y2GBr>p zy=2MYLbj3q>-8=cN%vxOiacQ+wUc6cCQ7NAkJDdZJ0Ru0CRm*NaenK_IRy$CmN0mA z5RT@^le!-+)5JdXc%IE2=4v~S;e=8n4|VhET%xTNl`d&AP8wUCQ2D)771C5|`1`b{ zQI@K$S{WURClop&M7N$=-dsFPHa7!;S^?Le!;AXPou2ZKMcmbN)l)sc_ASrhN{$dp zxYI>i|96==jSOJS?X~)-VNOPV24*v#w643}YlBCd*z-Dv6ZM9H$-~30z@_xdq`h5xw{(6*5_k86>R`qOudd7Zz`7GIY{_}m9 z&eC?A9iv#snliuQF_}6m;dbtwJMa{#h}_WI0cdOO%-`pI-p@~rY}?taIxDTzAc{S& zFgr)C?R$S$A9!Bq*n^)~E6(&`FZ(;`BUtsMc&!YoTsbN0Fn+K#>L2BKC)`LhROl6Q zDP>yZb{&ZJ+%H>Jx3Vepr|yo^4fM!2eV3`20k+x4CiBSKLT8=;hmvf&;V|c3lhO(B z=C5kOvc}DDETGQ;k;#a2;lS|+4pmpL_z9&1**OjlqxweQ5hsblhYc+2s4j8ab%I$9 zl+1)K2&G7=tLHbeo8G;0N4bfpQUk2^15@y4o&OoSS-k}!gNU!rJxm!6^`xN`B!6n{ zg!e{ak0`K8>8ut(r5j6iJSYPonxTDpuDlH%DjnFaR=zeoUR~!I_Q(-klo-`L;=oy{ zz6jAm*RnxR(GxK^d8khNT!yGCyhZ9gIpH^pFQn~B`bv2_P}f`1C5zr_*;>K^vTs)l zm6p(qBBX8HqU!zi{S|1G7;V+#zW+b|@!#?**3pFW%8fa)4yeE)gJ z|HnUnKNZY@B)4DBATQ(A*WT;g{OWe+L}ZgTUZb|5W@Q$3F5F$Er}fHMV<)}6#%fW2 zi!kdgBd$VwT6t6d6IX;@Sb`LHn1(4r*CD^Hc-WCw1Hl}O2x71)Z%txrA1~EZpN#2K z-7j@Lmg{9{WbAmRQ4&;7sQt~@&zzde!_7b-#u~BnbyvNl+cmb;Nv8@wI;L`|>$so_Jgil-KsPWVR#r)_3mt z$!MuNX0;Z~ms9H>ug#Rbo#8#YkS?F+#)4MZ2hfgsC}P0`7x^1nCsaqz50%vCyU}|o zf8Y9Pv3svhWMccOkm*QlQ#qJLy`u}(bt)T-A-r>uIMBkkSJo;53K}4*cb`D*(SzxH zQFxe@dhfe#R3C0ynsSB_1#|Plw;^+PI)M|Cw*Mdp~OzyAOS7-Bv&Z7CX1Ww|#0IA@O zz33a|M~aeyPZ|Y-Fp7B*f`KEZ3TugCJ>68OyxehjT~**1yOZU zHaw;updDWu$p*w-z8MP=oo7bMS_;mfvo5yrfSvG@M|j#|vxVFVETJxAlpGkJ|l=TT>Q}MGrDE9?j^s~ zjYM2F)-xpa3ANkj8xSFz{ss*h9#I9OHlds~YophCE`=vBr)dtgs^1q&8>#ykdl!3{ zKkdrGGR5#E_h%Y(p3ePE;;RHwzLQ?8LlkdmJg^`i`-{$_ z1a`en#}>d@Q{cNNMg0$Qu|aA?F_x5%U=})q_;e^eCjYRRm}!FEC@Bbgwm;{;#Y4~5qSlVA*3hRC{e|7z$Aa(uzV)tCRZsO)g$Zm`J?uEF3;2&!v$UpuRaAV{ z;;iytl@v<-L7K_3@FLaKDI=7HzPLLv4J!G1a$oyg=d^>ele{zgH=>jJXNu$S@4JTO zwetg*2XpnP;$$>emqbd?JI!WaJ8EGkcbe8(*R0A<0+!s>vkZ_*>>Kay*Sc{gM@I!z z%U@I#$t9{lcU%G|XI5%;BH9Lu-a%^S#8v6RqHp~85Sf%0H<9@#+?eg;Y|9+u_`y&U+~XssRbvKCE$wDzf9n{(YW5_AfDV0of*vn~m#Fr(^f zs+k9hmN_qn8c}{283Ot6CF+>fuE41^G z>o^=IJ&jeqow_s{jd%2$?-e3axy&Ntt|qHhelV981F3W;Fv8L7Li+%O%=Z9JtHU=~9<5py{n`BB@bBe^MazOcf+Z^O$DkVzt;U4gCIN0pF zTpPn;<98=-pugyj#_v7chQyuH0ohmo{%`;GA>vsoX72yz|NEa5Aa`vjkChXAI_8I>ok%= z%P4-8cZL!h%p_To);kmnGXkJWXar>=4?|PzxFB&goPgr$B7@RXdRrUtq37QPuopA^!(XTY_n(2TtY9}ZR1gbSUD4fS{0cq~ zP9oi>N_#KP<4?fa*t2Ntw2Bd&<^+Ay&0{Yo9Gzndl(-x)>(^tJDB#$dE;P?Q86{aX zpUri&e!(Z{Kw9Js;)yocT%7Q@HY2eriD`UmsC|$@>!F@_d|-LUA5UI%XU76W30S6J zYDGKVNC4Am9ypwK+P=su9z40mHX!Ul+a#3L3NgB~2EA5sZDq>=3LM6T`!!q2L znKxXATh%totIkp$Zf!`Go_{5AlNmI`;QlM-AZW*|5|KM9V(95-4Ewg~v|tAU zfQsRQW+pT^nY6x~AqLe-C6y^Ktu|^34_Ph5igPa>TPj70m=vg_5r*;Ao^!&oU}w#X}ej)0dy3CxdMF3}W|!BXUoh zxz*XySr1aKudggzPhhm3W>_f4uUPMr4c<*_*O4d4G2LDsyt;O1mdGWt7%R{1rYo#+ zV5L-EBpDLB5K&U3u<59$W}7%YG+)`Wj(c}eEvd##VMAwx6K5?|*xsyv zB6X^-^C9~p$9b9+u2IiQt|g`6y1ujXi><1h9dxsB*O@b15x^m%@F^*<&xrwZW!}sE zwXyq{Ao25LXG3H|wsAPdf^xiLv?=e(dKylM+0am!KvJO;!kj`!$}_WC!O0|;F^Iog z|KawZPomxpJ&THAvQ9?%*oU0T?DO-X-mJ|NHdWKe8z6$``Ni%~y~{IIo!VWemMHwr zk>l3KB#vH1?jZjtlLHQVbf|LdFUTBLpM>}q@*uuuEf2c>V-B(7gzh3gGQ4(kaV+HWW3b}$CIjL!{>OJK@}14S zQUmJn@gky$^n?-r$7s!$!3W7y#seYOo z`>SznpCrsTQW$r;9&Hj%<&roNk*zDvH8F8G(u^lH2|G;|jcS)d`^Gdg)ls6O0Xud%QC_W+n81ZXM7Z7aWPA)*y@`SGCfh>I@Sg*S`U4DlfBE5Rl-LLOD|32LfV#h z{hc|X#K>ojb#~C<1ybA#U>|V*@M;&YEy2$!3<{j)i@gOq_Q7tp+$JhsvUc^%Jp^UE0>U8%kql-14lYxZOAxuQlRg@I9m{Zdc#r(>$z z=e~u!xpj<@WOzGhkx|<+tR6ShW0+eML(hl0uYbD1pwPgzWcGKJ7d|wbn5Q01-!uKAEb1kc5_uquD(+r>*yO_?jX$+L#Hl=_iz& zg-T0@1u60%J7#$$7fLccnKov!FdfvvP-47mXV@3SO(tCsgta=IE$_X>0OF10_yTGLda zI$*!#fP-HBQfmWZp*)N)Y*2CmhouT_!(RT5iLnbM%Xcv`{}Q#^#jWy z_pj+EN{>>BNx^bznq$19{8!DW^4?h;AJ`_dU0Z#^nFomJ02FB~F{+vT>+ioZqn<lL;!k_hf)=2($G}r5ivwnBx2n?p7U3d(8IDGl%VeD~ z@LY{cM$S8Lvl3@FC0kKZeTfwGNufP3r=opARSD$W9;zU8k`Sj=jcwRMD_fC^^Pys| z;zXisEpzxX^+<`Qzsv_6%FUcGo4zfjUqfD-cCZQE>T4b7O3E8dhM^*>{IVMb+*_51hv62*zxA&9SC?NU$rE*>esTC19L3 zmbn1P@0(TE1yFFPsC=ucvYN-AR#%AqJ>0Hna+4k)=v9yY`p3mBaM2C0#VOT$m-~fe zK5UJ11IEF5*sWOr6NbnN!Uoh{CJ)`VC!YDsY|V`7rPQ~8W0-p{pR>#N4gqV<^@*A= z9@G5CfanyDsw52>sApv{)=EWD;GI7({ipso_r~Gr+;hn}m_eZ4p%Mj>GWFIy40$zF zy8VXx71ZMYj$3$r$s>xLcg@KQ@QC$U-P315QT-Gzw@7CHU`bbR;#-d2DaI*Px|e4h zFGyNLdkYRO>J=s2K$yx;%+<0F8s@yc)Uo$0t$8ql;?~*D@<0 z4LNss`9uP*VqtIx*KMLp8w9*iUHN|~eETzd$i@+NcM?_LvX{W_u#iSk-IU97$*r)Dp0mbW;RYQ6R zBA}~cy{u#I`$mGT!u0IpC2O6Pbxw=|{gSR(9jJQp7V?s6M&(#&*WJtBj-Y`*TI?G; zY0WgkZJs5t#Jk%vE_%mm8bh4&oWCWcz$dGB4~oeAcHEd*4eZ6QV<0UT)r9n8cX5!p zOr=L$@+g9S9N-$007 zafag~=X>%r2o4a}(+EqD!```*n;+J22HlJN_UW2vE_3>*Y|t+}gULMEy?pD66St9OV<8N3yIyQE z)@kqPuA#r0;dJgKVSa60U`APg7V!Q?^1e^%v~uO*)z2FaS6k2hwRdQU#b0l?$b1LAfPDB1mnr06?;0AJV1*iAFY#zS(oe-L+m&9&%-ON=nsPT!4P z=-)$jXTJ%%ehkuT+_@~Ql;Hr@%G*+T>B55DQ73Z8s@`cIU?K+N>PMx;$VarK^If~A zxGu~T0jSb^g&j!kgMJ9ARC519EX_loJHj6IrBPepoxR(SkloH~8ZG32F_K`<>6UvkkIi*}eo^|u$Dm?|;O+oi!#-z(W zOOBoAls_qL$XcgbzA1{C&`355wD9Q{=Wr4yd=FM1P35|G?b1?Kt_1dS9qX*93Pem{ zdhfKXRlCy%xYAA&j<70X5|Z5;>We>cd0S3BKWFr6(N$z{zI=D&L1 zv)8K6VCqysLl7U>E5CA+P}V?38-*mxDor$oUdbb^+q(fHh3Xfq^{i>8J57}Ra|}Pg zH-g@4;2;mgX|CFS_=8ni>vG&Tg;E)$j&6Ja*-N^4!j4OO#Xcb6wY2`%G(na!!x(n0 z(;VBUwWdB^dN{S=&GIp37o2wSn`q zXWQ`DXq>r7JXeR1m@y}Rt!t=6plWg|NyyfQw{TEx)f)5-%FoO@KYXev2N}9!svD6o zG^vi+CvV*M>9gHqP`oFyddyM$kENqOV$-j+KSyzR|Mm*Z%VD*iS(C7VryO{>d&n?J zs42Dl7o)u~6_*JrzN=myGHjhju%;R4IG5tcq5?_?9zrl#jR3JQTkO!bx(ZWRL@E(@ zr;r##r`>Q~f)+({D=-X*)=@_M{`pVMI@kFL@r(P9e|%>*=PIAvz>V z$ImgMH`ghchY6w(zt4Z_*Rtv$pul7L^{-HKw@OOstW$`I%)>e^wr z1fvvHn#5%h$OgeT+$Sch{39F+>-rT|Q7xPumleIZ#|gpSP`>hjG}Bp0WCz75-*f-= zJ~K%SuQJuXA?Y@=$y`VxXhY+waFri}$|5m-aob96hm}gz=AEszB$?|_>F|J;%<5$3 zHtvluG(}2jM<=loeqj5x7?LGS)_=u1J_QUNBmC)8&(eU9p2H>Z^N-rnR+oD)krRyJsYhF%^#S8_s^tqOw| zVg@3gmLZ|@^n$KwyTs~P)baR&kevzxZ$7x{;rlNh-Gs>)ST9~xo7WiuwCMcSO0iPxhI=4 z5}+($*_)??v&Nuw4yw}Ly_@Bs#_H_DcORa*>UP_H3X$Rr>NlGAsE=OhHj1oL_%OeU z!}iuBtubbB1XYD>~0Mh#o+YQ?Cl#S9gYT?4dSttgGx#+)*6^p)S znPc%w(muCNW~6TgCg6h`Rgd+kN5BlzI3TOs90G9k&-t8uRCd_B^&eJt+ncM0qRL1T z$C-{^@REHnc=j(wCxx*eMJD_k%w3MYN1#FQ6!YmwPTg}bJEmQ-vy<^ylo4US&lvPt z!xqsR6LC`a@u(8hK2+w?0Cu9gEuOV{^06@AjGpM$yh-vzfUu zW9^2zB!w4LmII(vwwj-%VSN5}p{~>8C?0KUa4vvXik2kn$Q6ObZ31M1RE&cu1XseU z&GuA?8XA}vI5Bg-)}Z&i=@kD{JI6PHV>8B+naw7txt}>z`yD9Y#){gSOq)b0?6!mg zIsrK<%5P%ab&DQSVL3`TBn8ARlKRQe8-ALwfoLS};pBv%vvkCZ@I+?lTs_+9#~7Rt za>BS{T-hs;YxM;s#P7#Pn37)<0i*I-t?S&LdKhAgGpiI zp;W0Y zOhO63Xlc4~1r}2L6qMP=c`()d)QGg%#Tr*}F!*98fIAfAA8pI02H*(o<5_c8aQ$4q z?~Q(qMy!+jN1LiuG||$=n-e>w84hjk!bBXtMKST{zl$iA^q8|QTgtf;&!;ZviuId| zetag%d0m@qNO!)pU()1#$7SfgSPU(qx||PCW$jOV`TaZ+QMVaHn|*DxrI4gk85^%5 z(sRQo)6B6gtsJq8XQks8Ux@rsN6si2Xw4P5 zuN2n3E|mz;M?gNJf)%uqI!ABqHl>gu5q63eLfVSvK2{D=I~iu4DrUH5%(I{UW&$l&pXQ=!oC<-|W`x+|jVx=vCG~Cw`$~%Aa zldk8_e&x8nD5Ggo4%_hLN~Nn{wh;Nb#_^Z(_-P?in+05?!o(Wh%REv-VU`VbHe_tz z1}9iSghvULl+GT3jD+>Vl2_@^|4b3IVlXB#TUnwQL$)aTT@n@T7jaPBBu|!|E?9GlG24VP%belWX`efKR#-jZh2F)gBftgWM73jz z=!ENF$R7BABfPysr-R{WPs_ytES?->9P^wjN0`5v_~I4HfQ>WtKB^8x8WZa=jPN;q z6dtfaZ#hXf%Mpx+6A_$We1aQ_BW$ zR4$?L)N!caQ8Otw9p$sG=wSH*8uI0k1Ss-4iG3^qT@ZHer!xt^vOc@(0e=H7A`!R{ zISLm_W%#<)y@!8u%}MUjM!xo6e3ZC*=lE5;fBz`eEyv}+s;}3VthRc+{;uMld!KuL z{v$+o&ic9M(3{t~?|8G6^44XViI@ia{#Tn)=^s!)+S;s02-8h}-702^Z*(H(CeUik z^|%hIM0~kTxWRBx*PldN%}_t>@4lI8sU=BDovUWYSg@ zwiU<~!`uc6$X!H~vaf3Pf+^LziDCCj_F-4gpw{PR=1l%fZroMn_JG9)FQBA@HD4~a{AGZSM3F)DE8r-rabBYtZ%DY!o|LL}n zN-h`Vp0EYz4k8~Uq&WReH>=EDmU?4u&4*^q{&B*j?7!_0hjDdUNOEhbL=z)TuVeB( z?L(bRSolSlF+T3SnjAWtoj*J}r>1k>W51S-LU435E#bcJAE|I>YGpThYGdM!r0Xu_ zoX~{9Ih@@h*xV{@_uCsKOAb?cH&m26H^Ct*GO})IN|N2ux1VoIg;%F6=^$#qF_UTk zpW%*K;&9#G*!{1~JybQ#mFOrD88OuwPWi6iLW-8NQAdl_xt<1n=7oQ_COrJ;uCvhV0x=!;7QUAWVV`^(bG0SXaDuu zoMFJO>6{QR0!(H=lJ9ul4I6S5SJN8VYi_HT25Dg=$7klO3XpX$s~)$EjG&I_VOHi| z`Pz>QM=&kvKlRGU$V}{mIPa1cgd0gka?`G=po%@*-uT{dV(1J_bI;6H4XNPGE!k3# z-C;kC-EQQj5YNcPu5;@4|8#)GA@a?HdPo2Gwb=;@PB4VavnuVm7=rC=h+aH4;mn8| ztczI4IpaKdV^%rzwM7w}Zt5(Ps)hSIf7w2Q=`*dj^`!Q%1GZcVF>6B#NsEy2s2K*K z7FIF#XCe`4h2}OEj?j5mq=WV4UDi`E8e|St(@k2>jjz$G0WnJnK0+#l7HHwzBa^2= zwTEYDTf*t*Irj!bHBu(=hqWOT5uk=d7S#vXo?(&DZFj}Zi{2T=J=tVNP<~c}B$ap1lhJxXp9UW-@p<1*zlfYZt=zQ1VEL3^wjb}(j%WUSt%uQeWTP5#!s8G|BOPr}jM2VXl<3@TU#yoIr+jw}m8-h*0mK*_GdaxU#M+k}%A4~vFK(W7uhN-xJOVuMhud2zP zJ~wA(m`FVYVn2`rz8%@N@Y%{38qwAHB>UFUX5iTfaCYE4BwincfY85FLEjbo_I2A$ z_F-#X+tGL&gseR|wksQKUnLXBz=Tt+qY#~t}P#QEV{WD85>&aEEJ44Qa z+w8y%AsCAla}syN?z!Aeia3_ahzs)O2$k!siYpa|bP+@%jgYkBKBS2 zeVJZFiO?anOoS3!SNs*58lLJJcNdtX8c4qS1a}sj_of%U_aWC!HaAs+BXrRfPpO~l zJbj+R`@OsBN+Kli$EnXCveHD9LpO8}TKi@`ou|>!qCUIXfct9d4Nx(WZ0%wISEwO7 zWIJ|^?YU?yp5qUk!m`g*Sms=tbx{TDUvcUgNha`QGL0p3?F2q&gv({F)D=~KRubpQ zE7H|l;%4?P^W=F2^-vtVzeqv3Ca!g><#%KqG7{c6Yk}-{j3^4UQMl07Wju@LRBBQv zAt$tTk}lewKBH3~iZa&`lV1B;e;?505@OY6MO)P>^Mm4fa6P4#wC)7f`;*+p%E1yQ zz^JI*z-Box_(~ZTD*6Ls1n~*rus-YxVmDe7e*~(@0^OD1Flgt|Aj{rWt5ek~a*1>l zld*o+xwTqw1Y$R7cjxEz%ILRO`fyuG?algglCnV_dO4nofC$*rqC)Z&iKPtfJQi9N z{03?3wI*Py75mS!+4pNlsvqcAYvnCP9K-0yV5O<3xo?Vgs$G$$XLOX0XGMJGodgae5)ZE+JT~KX!5*Q)|5H_q)Rs!=j_v zrz}!1kj%S!t71G^puazc(x^!XR*t*vPs*fK(y zjAhG#AJALU6gOFt&da1|H%QWPa!oExt=jAB{`~Bll>l*N z*|GYFd$TN_cM5qk!&I1mzE2a}a6 zzZ$61>Gv&(RuIg_+yte>Dy!uEO-o$czPJY?pnr}Qn5yf+CcfBI#5w*rOB`Pz@bubt z&=HUPzXxzDahZO;QQk{y6n()g?!IA~5i>>Z6wmLTDD(OykApJs@@hN;Pf{NBQ-GO* zN#P%r)G$L6n2ev-vhF#q6TUo;Gudc$KaJVWzSmhJMIg8Blud06DbH=84OxClWB3Y^YVDJaCJ%RZj4S8!S6#sWDVMRBEbudh%lDe&T0?aVaWj zDa3Ot)~O!A^+(E#)5lpy^wg|oC4%sl3j0Gu{Wr zKp+aKT@}6Gk>L_ZTeeS)_TMz1bHDWQ#!b zvFPNe87eY!@P&_xk0Y@!9Qeul9g41@ZeP1r2RuA-ApT;JX34=^*Q{-6EtXxLUw)OBun$Y}CvFJrEDG zK~B#i`nI=WKh)l3bq5sPFm0%Fv{cl?rago+Gjez(vGcF5FPLGse*gT+o#WE**XwJJ zo?rj^HCW*5wfBCF*IQU`e$H9UAQZ-TiTIVTSc;1GYkz|$bzdfT6&=Gw#vU~$oXSlq zr`e-x(H$JdWZo{?o$b_ONPrE2s(Fn29BnS{-9H98Aj(YL4~F$}s3 zXyM$oaVnlKG;<$4CK?=&)tz$A+^b>&#bHw%J1oPS>o~2h@#nnN#}`tvkQ33}U1B3y zm|@fZaIB)A zJ@x{Zu22^4%n!3$&SGg?fLG1?81%bh>w~Qi3KQJS8frV)-;N%h8(RD*aL4twDQc7f zLQU=Rgj>!wirOdO^+u$;Pi$ODkh^bPn=wd~ytC8OqDc&^UUOL&r_u{ePOAPNUFL_5 zuOi2=3~$#?Y42Cu)c|t)E(D|3290!2f-oYvQATn`_&dDk>pp+81UBX(z^ZcrqW0VJ z0CSqnkX>3~VQR{r-*G~!Dq65^et&KqlhFJdy;>RBviK{6T1N%6Ai~<)^oT< z9LjS<<&Ak1?sJX!G*RRd@002tZ~hDd`<2yC4IaBYGQp=PLuU6gvpm$FIn8W4m75@;DQabl(g4bhYVhu?QwPm!-fD#@W=d|4 zhy+&aJA(yay};^t8r_v^U-Ap{7G@#GgS(xokB}e@XIIa8vA+0l*roL5zAK+@F;7b? zdTmJ|Z*R7$I<@NbOO|*~7NE6^jaxqD^u@A~i4>Ot%ClOK$vx0~4S^fN$SO zb{?_r+%(E%Wqm55)S_4aejf7OhLEU*PW)Uj&CIN48^=`dHB0+KM7l;VFVrI z6>=1<{MnvzWw3Mdsy{=cyj5jzc=py}he+|WAXC1T7L=WqplW}r+TjkD4!R86z@JY; zM{)-M<4T|PZe{RN-}}Xpt?6mnr9n(e+8&NZC8KR!dY7%Z19PZ+x2gc$I9Cg|RJ$)b z@ZRBaBwmoYs24N$c{=cRPl~T(ivLpwWd~{>@|EeH+NX%0-v=HJ2?Y#8pj>D+%PNc0CQmRf(uc_{-9XHV`|3nZ)cg>y!87#9 zI`V6oR`6)?FT-JzAfW<2-Bn=D+tXkVa{U|d%pP@iZN+86$W{hOd*@ch=ec)!2W+Nii1N>|#DS9}@;}KP8s-2>Tg=c@RdnT!Ym~Ip4L0DrM8H%uM%%DNyh?*E z;Uj#jkJ-&2TC7Y0*;i-f6V*xjQrE{Y8SEvn^6xj*Al7a3zS1)eZlxZJ;`XR|x-ya= zY;o0Ds5b9{kvZmF2IPbiZgD-^`lxHuM<&B00(IZ?36!|mlyG&)Xs!H7nhUrZ63%JTX?EoVjiZ3%|2-E7wbU2h2$8 zc%YOKsX&;h0XVp0}yrd2Jz{1ybejIl+k`A_cpRMu_Mah1X>>#|GDhet z0Ac6L92lcI{4-7=@uISV9Lu+rV~+%7&zD}d{n3Nw!4+d`S(7dU74x3iswlQ@tmUzFX{ z1j@B>TVR<87pU_b;~#c}KgZs|Kj6lad7|Bq3&gAI-h$-L3!6B!vGru|F%QLCvhJm# z(Hu-%eY2>>5NZ!FT~Ze8oQuY4`8$$@+`4GbjY!!ZsXE$04mkVYeoOuSByJ9EU7I*UvIR+YVG@sRvgHp)G0 z;}i8+1~-g0*cA^f%@x8lKB~CS+ETt6? z0wPHza`Q+AC<3LZO*|DA2VAx;u8LmH4#U~p(v>2*Y>%tY=6Sy12C9+yg?Ot?-sy`o zypn_U3hkqpX+H^0+d9r>A%)hCT#1Rh@YGn| zjmDF*)R3otd}9PY`>i%v#fpT37qP9vt^M)4ef9{smEJG=860{t@!spDw-EIo@} zUw^;$D_`HQudlDK-23}$zrMa-x#M2#VEX3C{fbO0h)qWpDd4J**%M0T00Jhs@YT#e ztkbA*ds)l9lD9(hEUcRZ+iG=pOTSf5a6DW%Sea%{<@ARok1s773}RxsDk=AuNU<;h ze_n=vpJMHuQ~YgQL%0gt-+~69`gfwXVwd4##>r#B1I4@gh@{Z%c~RDhBoG_^D@HAb zbb8=U{aO_>eC{vLnZf-<|8ddM4l^nsvq6t2?&mSDVv5$A6KKk!yo_U2^UvSwr#1sj zZ~+k-Jtx8Hv+XQ0O+p)UInKGHhy~Es=z^2T0-K~)YT&5whz3Fi)~2v-e*2a81q9xd zAuWGkkyv!l#I$nxCZ{PvH;PZ?jp^S~yQM*6lv+e?D|KRh4X3x%I70O9qQQ#N`UfrJ zr>E5`6|#l_oKzhbjxw0HQE=_b-+N)crOjngGxL!9{Q$l+=Hr=68SXv(@%bF9GYADY zaqpyr0p`NMkFNT{S9I+|AEQ|DBxF8W3l9aozpNWsC-{x=Ldlq5EkIo^DKrK}1%P0` z6^90#+uVb9^r6We#I|saAWV=ywMfu`;nN>r5je}2~_Nv&u z3_AZu`-Di;lKyB~RE8_%CyqmrG82AwJ$TtL{92x!c-JHEvSX$no%Ejxgkto?RjuTj zwJFXp&FM^ncppH-(Z+F^JmSWOrQN4Sm=Io25L4bjG_--6_`NZY%Q;niyO@QAX$5_* z@olj+Q{2!sM1CBbwc5{qIn(h^fJh~Gpc;n{7gLm|>jIAX@ww{c_L~qwnSc zSE}=!t%-MVqTs+@U5NBiCEt;vCk5ikwe&Wi#_gG2h2VCk@s^y)aMy3G0Yqg+^aT8B z>Pln@w`%!A7+Z7w!=JxKdpNhVT$FeP6;0b?k0}1M{x2RXtOGfV{h+}ze1x-NN72l3 zwDa%(@I&RWlqmM_<-DXbval%UeQ<9vHOs^}0a)P@ai`akgof~X_ZU=CJr+rx&E?hE z-KAQ&0&9ij>*RsL-I4=$My}2N72LjQ?LCho=}=Pnp5Oj*uVyl2#L=@TClLmQh@zIq z+aV17lBX+$Ck<8h!Fk!()aa=h-Dje6v6R27!gMYC6+{nOTXDNh$=wkzo^uXyF_KlD z&dcG9$5|`e>7)ri@Mw&6bR+W5!3%?{!=ZN9wy*$XM;!^Jzp|YNxCoNh6MiJmy3R0K zEHzJ*G^_DukC@Us5?e?+xz{JrK7&wn7cAo;&AQ6dJ7X8IR>VMbQD&BIjcL>1Ftr+M zp_At4GrXYqqq7+9rhRxYU$Ma~b06+kJC#o)MU-sgK*{UmBEv`ty52DZa?C>cm5bS= zr54BOXJlI$yRCx#j*R1!t*ySUOHyR}>O>=tXD-jmm^_BTg+=1cC)T^AV@*SZD2fF~~X*gum=tr*_0?l)4`t9H(1nGk8KW>jscf<~fk45kXV?|EqCg0cneSQ}Cy?5n7 zjH%_;5FcARM?I7|GE-$*z4IN?8*(*MpV!{G8xE{oZHoZ=`=Mg&wVu??H<7pi=)haI zI}b#g?{~G!g37b{`|IoZ!_?xta#(n&D1B${t{*FSi;-PH_CNQS@8_s=E)L_be9FeG zRruj|(GN6UYiItf!a+-gMB7fL%F>nft`+dBo_BQD*Vm4AJL@|l^ZS8kcFWC?XfLL? zPK16U-~E7kZ37+eih4yHfb0BuI{=n1@csQ-Yl~6Cj+f!UTYTk>+=>TLcSqdcr$}|& zyzPi-rR-3|TN!pYA*25mru`=x$RsY36Skz{6#ByKgDs;D(!jd8P7&g)+`$8PXzbFMJt&q;JTAJgCZ;s;D>zh#=!&0 zLBSldA81=B+g9XBje%5O1^t_g02jdvHMu<$i`R3mKi(Fn|HgXnM$NZwiJ0AXBSj6@ zk@^8vV0zia;$ZO~!{qrmUvYry>!$S)6_Goc(S3UfoU3sz<4PAc; z^HQ^Lo<1A)=hy%E$9LB&KkxYe{QIw5M2CF+^*8Wzte+gH3e+9TN z&{j(G)Es}p2G@Q6{1ln9vGZ>XM;;B?&-9Z2ENvRcMP#L+a z?uQaelM|&vxtjW%XZ2j*tUs+J;TALm9!;xmTf2mfJ^){i4DUH^%?Db@nmuggoX-rVGv^3dV&fTOvN>BKt zmQ+?G6CDoXs6MwAjY%m11eq|_M9+&J!b6D*rxbJO_L;)mbCNf~;?hWGDU>2;6S+H{ z8cL&g;?)i@ew^-#Ic*z%_kn$yKUzWOu)B<>wCj}aqmQy_C@bbUC!)}PF-Z%l#IA>? zTqoH-dKUnzf`bw9x7CAG@^Tc-B^#yU+IZgXe@y6A)&RrflS-mfsNNlR*!dW%oE60| z1(LJ&rE6RFuHUjZVPdl{G%wCI4=JB!0GgS6 zi3=A#tVzg-^?RcAGb4Lsk&0_;fo&RNmL~7t1LrYfa&E@K66k889im+e7KFv|!PYa~ zG#TgAvNdiZLzJiNe4%g?PWnygM5;iO(cUKkFB;S&^%}_lcYDR96bn;&@Tu%>3;>*_ zmq9EJ)VXDI$zc92#W|Ky#l6c3>=7S~(Ma-gvzn09UNhpT>yhDZf~z~)ukQCep60mqIybK*8Y*%%0}ca=?CQj6_|8Ay}j&C z2yGP2Gc9zQ160bPQN=A{aj0yzJekvvnYU5yt|Ch5*M?A@6ih5NM5fgRcFbtD&rnD+2WGp_l-RF^T41R2cQ z(w@hyIDZ#x7~1cg^9D5dnbnx-djI+gR)HVm>9A(BIb(o4G#=iG8xg{4P-h&Q{ILd2rpVYKVKh#M|)!e@(92uF%E@ z^vd6)ejAfWq{MhsSGz?jkL@$MAdvQzS8RdMmqAO9S_UXEnrJRn$}N~~-o#va2I+$C z8;-#`VP!LufZj4`ZKxu28%w*4iB$E}+~o*bf1M~ocTi2h%|c9HG$49aI+ngXzY1p@ z{WAV2imGs}tmpLW9wFB~-L-5kxIc$3<_u5xl{GXP_5P{EUaUOX5q3R3@9AGPkclx6 z*on?f4v~|5qhQI&3>iwOLFyBx<2gg!!m>R)CcJWc6GZ$##kDv)q_?CzRecxgT*IhdPTnkD8qft-EP2=;tci42q=2f zX<{@;Cylp^U~B3!Pl@=z!y;RtQYB<=W&gfToYx4|iLpA0VoclZG_ zsF%#%27r?oKv@o8hpwOFy$5Sr6G>1P=%fNm85S82(7W68wr(;=rr!fm=!ty`FgZ6k zO`8^2gU7Ag=$oT;SXkNsl<_Ol4nE_Q0?Yq1m7sYpHTcwrt^lr*_ds#r0~MRAZ6kZ2 zoQ|>fYWqF6|1|^AYJF9<*pPb$PuuD68=ke<^$-!0X|3(8_fyJ|-z`|l&$BykoEOUw z)vTB%VClMgEZ8&(EwLQg)H9IEK=&cdg>v7Mrz$h=Jr~>d$Jn=SWn|UL237;>V#e&b z>O5Zq9rv0M{T3)m^~AD;d*+>MAFP_-Kfwp8l%Gc>R_YGh*&lUuO-+%qR*p&TJ%(QEt z#D``CtDi2F>OyK^{{^yH?_3gT2u@ewy;`1sd``JElLZ-vy=|XjY1M=DV<_(GBDugj z*z2By(6i`Z0D?T?J)j(;>jfNP(x0| zsoNRd(9)agSI!6X0`p8CJF;saA#r3~P4{g_AdyS{KAvZw9uu>ChHl2WKV~Y->iI1( zk?O-MMED6KNFBO`x~eWpM;WmxNf*wq2>@{GtGb=zu+s8UcOeHQD6=7;X7bOR5teA8 zS+$%LjJ%IYb9Q9B@QAgOrhO7>6Z&buv|f1+t4;F@ymuMGRD%NO9EYU%R`li5gXPiY?rnn*wmQWiVxNgzsQ?6`8RVE%b9k-3{V1~PBm8e2%v(c z0%Xl-3YNSz4EHwXKz%Enm^g3OQdsc)nK;U4;Ip8=WkT0bapzMw@n#Ze(p^_iGBUQxSM+?|eP~`F^!oT)vVBqLJ-QUR$I^wvZNed>3wfLG-hK z|DUn)_v`ERdi}iL+2(~5icS@p^}*VW@7)bW-yyC(#pXN*oR$(4>Ob%Jlf#Ki4`Vt0{VRd`^nU0btD{pG z_5A+n%K7rmE8bNXPwmr3EUNY{;W`qzbwXZA`5295y)KlB-8jWrbqf|FC~A${YUKlV zaiOnquZ&y=S9r}YUf85(#d>~6d_O<)_o=!)5}bp|CZr$Pg=7lsFfH%BRbl0IEQI|J>G0hF&<4%i0bQ2 zK4%i$YEi+#iAK-<%vi%LbN>KhYv}|epBC=$K6gQut_AVgJ8}~8joO^#X?=XU0rJ@P zS?9E5S7y|B8^Y zT(4K>7F&OvQ5JH$5|&Ma(+hj;VQkQX{jg#b87L7B4bF2V}_hK{gMFr8}Xw>VjZZUXOSA; zpshOKG-at>HZq$iQ(y-LOLbeoszP-A_vi%dOJqWDxMult=?nP&krN*~L(L`7Pg2pe zV-bDr4C+fG!#Zja_!vS3IK3NE^1;w!F!zRc+3N~Ag?~62w^23~*J&+>eccMCO9iv% zI$5d0f_~`|og5L_dt6R{7aFAd>IHLa(lJ}S%YdnjU>yeE2NK;LAcu&j}~M$hH6DhmJo{y#8;QNR-)E)VMqj z8h?}UM|DaO?qqoAQwmB?0V5&L&B-t+W7q1o^TJ*C>>aq z*8hwYGo^W0=rfpOy>Vpfh$qILR!3Ofjz6#%GPYxA$+QD=cJ9TPzA~QJ*C_aoML~o_y-=#7Nt`ZG^O;{&utM2{(Q*{<= z((KF;Rz|9N<~w}O^ZhG(WoBHNx4tpopYOoT%rnznk{>JMRki8Ip{|k=A|oR{zec=& z{7)>DVYHD>0ipZbY>#t6U-x*Q0hH3tIZ6+B%yFJ2u)0pncr19p24~UE+9NHP;r>39 zR->pD4Yo`5Ha@I_`1MUv4^*CaqX!$h76HfoL>~*d@jglp!}AkjwvR;R^nT>z$AY6W zGpnx5l>^wV5W4Y0G=O%_c|RYj{hyYj zyFVPG>9&?ntDLRf(8qd8|Nee&s5$ONgakK^F2_T2*-V@-vh<_+JD<y|=n)6pn;YpK{Y+r78yKEL|O3XSDAYWwo~rR~|n2`dJ> zK=)`jk8j6_R0VX19hMQsl+M{R+?Bt-pXQAIOn{NnMXULJ;r!D=fA!`{`-Eu zJ(k{}b;P`+%WQ8`Po6=IY6@a4>5nm0r6G>|9s@vPD%J7!^-cMb>4$5Uo5$1j5Q$xh zGo}F-SjvQ~8MXdzgct&8`WEQv>9ap@1>BIuOm|HIV2-$v1slPZT=Y0Y=DSvd@NW`h=W)(EIuJFlt9tj$;cH%LRg`uoN|FxEyDMszp zYO$w+|FIO8U7gi&Rg=<>L0g8o;`Z_2Zw8W@UPysD?3ob6KLCU#W2KC&xb2Lq3w$*L ziocUNw!fIwljp*jm2lsE7A{QtsB14UxB6cXq4%NDR6R{V&7k#WQ~+GXLXddPZSO%D z@#83Y;0$AKGXi*EbMovaXQ0%LtV0n}Q*7o0g}c9Sd+3*+2?f3#C6JOsUQIL1jljP# zpOw*Y)6CG5SK2P25cVrz8GO7#y!PU)=6-y_G9~1$IaPy51{U^Qh|By2A7(lGrb94cSdnHD-m5IrZOC|cGRQ%yjeV%Q8|3$wY`uqPn z&pF;7?d_wDG4JOro2CDGjE{4iE$(xkW1bHyv5&Lh&NX>oOzE1iGET6oEU5P|4Z=8-W)Li|;dd&1K-K6?UGRu- zF8@#mQ)U6YFI-Bug^{ldqjcb9!tx$Bj!A?GI!Rk1c+MeDN6z9M#?=6IuhSvVVrrYY zs{-yXMw>=Z!@_{ErKC;uCO2VXf`BoCo6;`q>qIJwNvgN4Q;$L#n}@{Hw$AU5qTH)J zCCJI~7x~{GjFo8?UR9GE)(Ey>EUAA?vX-xZeS1&RSH!>wimenUaU0*I*3x2b)9()6e`OQ-yc;m| zkEw4Pq)K@`O9ei;nb^QcLgca!U9jL;Jy4A1)GTy1JZ0w+81>fDTo{po$aH`}SrxWN z!D3{7Cuu8PB*n_591de!o>_|sJ+s{NIh2o!rEds#cS7V z7vR{1WHXVW;@{oPR7oVAZT^2CcHZwJb2Lwr{fusrBgTKcJ&?@A zh5v#wLX0Xl!a%f!FtnLHV8Naxvr`SR(gA#$lB9G#^UpCBusL3IBm;W*ZrSeRtkehJ zy|hJLbKkPJhAz$~5f6fs7)h%LWygk#1#0EFUV3g!P*-zDxWmQjOO6LDbaK+hc zA4Vk&FECE7^1chOz~iXRri&tfq0dTQqv1HKAvOr+*W_jGZ0Bi-JE$_Giwe(joq;H} z8L41qa34zFH<#)&dk)|E^tqw%ug`xB}5mebHRjN_VKVW6vv^pA<3?g zhx*3zsZl0e@v%sT1Jn?IY}7X&ZlN(y^R260e%&koZTeg37_jZ|F^0R5Cn368ARIO1 zg}lpX%wNNNaI&uBjv?#b z1)TGXmm^c{@VL;eq)(}H`LG7twH$^tfDfIcHu1yOB!ENYR#-8r8IjNN-iUNyt-V_T zJm^wKD+04GpTwS(%gkXH0D5d^D#Z#m@)X@TS2(G5#bFa7gp#w~n=~J^d={Z7lG1hbEwFL0-kz(Ou1iTB`$HvUeT%Y0nu^3b=aq;Lq z8cBO2iNe{K4h0iYY-}GY(Md5D0f4>)r(!C$-#!P&2OKWS^A6y(J3aCJn}HWkT)M9z zqZ4cs?Sn4sQY3L)@cV76X8R_Ca`fp;S*V?-VTP8IU4(!YYSv~Iqg!yf>I(oeHIHaEKmg*6&89lNqdPW8LTtHl=j*Pwx zXO3ujM0T}nyDOl{0prL?(of$d*fc!R_FF4+wrNRai&2Tmdl*IO626iH7uMpggfC2@ zb1=#K<{h^r`oaVXqe8=4pxMGP*+;y-t%hV$DLDqyGb8tu!CZ+!&8xUXF;cC5N3r|h zW>^~EnaXMenq;rB=9Dhryi*aULoFu*Rf`MCZE^Hs)*33Q0rO~e@i!sKUi!- zX5r%L2F!zNC{6Mkr#&>d(%#^k+ zX}Tbj>F4G3UfB^^+Yq$2*d+7B!B`#fN5gk;6Uqe%#S?c|iS}4FihC_9&A6gALj>~l zmX?9q)G~~|IFF@Af}o~B+|T606_!Evg#i;;&&ry?;Bc#%hj+QlX zDQGBRAb9nK(4(mW-9_^QjAQ*&ikfVptW0cve7$Os*tHiBJZ(xmX7pJ1u%3TXZXjzL znfA^O0q%e?wi!LfR@Ot+cq`utjdi+LRlf8vX<)xO3Vh>M17QkuW-TMPOtQ_5r>HQ&9`PV^SP@XeR0_OJi__`Co3`25A~ zWid657N1}H54Zf6k29rnbz9#Y`6=UzuJ3R9uQ4B`0eQw^-^Zz_CBw1y29FgS`g-+8 zC?k$kDsD|H0W_snA@E?1IF4bA*{< zg|9t<>SptUX)Fc3C0vcZjC2kM5K(>?YiXo_eVsdmXx7{<8j9OS3WEF3iM z^(_OG1Qkvv)>BgX~ z8Scp&iP2Iyl_VI|cd5v#oW4yz*zh}@MWwHLN=U#KgI850kXaC6yjHs0I{UjN4H8ae zfZ7XinQ%S7V_DSBB0UWq0Dp2znf4=?jDE8=w1TL+DGCv0C$Mekd?nZKo&i+! z9`w*I9aUeIjLA4dbuw9*bfZXxG+0}3S53QqaRHkTYm}IcH%h&!7bz9g6V_aht+bm+ z7&Qf{2nAC=c>WZ(f<11-$!eol)c3v-DmsH z$2b%>DVx4O^nZQ8p-=17y**my?5UiyD{@9x94R$d44>5cGTu;B$=??4zrHx4NAv|= z_0X|i_7Rasb((wks2HP{=^7M-eL%T(>;kE@>tan)rP}uj%4bf5y}Xnu8cduEA>Y{a zZL53l5RbbPH%ERE3=a3+ze$9JO&Iy{6cb>Q?wTMoE%243h0>U!Mnd1@Nbj$;mYmPM zXKC6?w1jZ(MHjEcpsRp2Iya(CUT-?BD40^WJoynE0lQSG9d$`i}PcL$r)qQ!F&>Sy(rdc z_No=9Bn0ljFciH{e__2IRlu{1lb`CIiJ-+R2+0t6!LEIod0coJiCL2_kkHXes-K+> zmR0DLWo=9Ar%Smlc$>e{U`R#iZHPqv@<(3jrb^VQbS*lSen{mIgRSH z`qUl7|E9vJRn%aTWt0yGGobzaY7We4#;*`4TJ@-zb%&+4Wr!^$nPX8;rRnk~l7^LR z>*Qys<)*&*To^4gQ0H-*GYbvb_bDwW|BBT#ab1ze1{tK8C8y(P)}0;@`4mXe9vkXkDpwEOWN?UCJZl$Uyt= z`d=o=sLJi)YupSyyKn|i`mKn~&OU?v>298X6 z@k^HHvZR5~yfzJXpHXLRlGWy8Ud0f8DU`Fsu0z`66ptR55Ad)|SlLlaE;0D?s?2R; z4AA5~?-Gh^R6Iu}4Uei{>0-zZ zSiHr#$XE(Y0TDTqjIRmUX)EUXC zfGly~F7QPmYd9)k@Tg)sG0g~(G+QboWHe+88^x5s@FeeT?h1)1%O940CQVG#6XnNd`)jCN(L*i*j@xSs9}(@DD?q@l7ZJt1=yaj}f^qxm)Cr0~q#7+PellcqR+)JR04S;T2G5Gi)P zq%djVI-n(Y916xEM~bq}^E1dy_zpylQ{ zv7=J)3=PK~_l{Oz4F^#Kx^K^$z_RwiYO^y*c8IwYXu`F`M`PAKLv?shh&lHT|I8}; zdf|Rx4a#Zg3Hz*Hxs}5Q63+ESo9EMj!E>HF#b8q4Gi(mk^7Px~IqYfgiQI-s<@2xGyTC zm#g{`0ThA=EF6UR(iau=(=iO-s|>~Z8a}jTT2u(;hzgI7+DXf-=teMe%GW>$%y8OED8V7X6)reil*J`xdjM{YbDqB)$E`@=%n#fd(}gls1RTywj_-M}%`c16@+`o~4)GSUiy2|ZwG-lsLY&1e zzej{^4#N#8WUdr1(8iAoC&-FCUbRMrD-t6w26T?_v=S^6j6yGwU=>A|p%w_NgBmZR zDOs{MQ!P9}3jx~hyU-ulQDJYF1;y=^O0jesljb&@OB(1El~Rziji(65H;rUR*?uKE zdO~-iO5xr8$SeCf?R@0X`%W#(TxOLrK`gE4tm4`Bmtof+dhT=%b=Vi?m0yPf#LGQ= zlx?Wt8K@0B=urQQ8WhgcRNKJv18JHSI_5|SnvOidCk_nzR8(B{(;B?O002kssAOmv zDj~Vv6k!Ut6hT7aH7?Wq3Z6{zZ~n}Cv+_Zu4HouPXzWomf(}XsS2LP4rIa<(lsc&! z8JGez3vs?DW&BYLC@{pSjYx2(N2cZ+3p@pSr#N%8MHv zH<-VFMW23hXgW21ay8w5>l4uoP>oO8v{>AqxAU?+JZ?|Ecg{2QfyX~-a+s#4*N17+ z<2e>8jXELR(!(_ku|Q%3(y;dYAwrYflx!+E4hOk9u!kG* zD|5W*%I-kbB`em29fjlwDamL9#Se)Zqzt!0LHTZ_TS4<)36^kwtk6vbR)-Ic_Y{2k zfkNdZ|XUzkc_PE3U|m_f5H#SOAf zqEW;ophoy*@WXMtp){i^fu$bBY-fZVl;H3JUK9@-x@ZyS?00I3!VW<)7>Z?7T8tVN zI5vr6m34uj^Q_=PLzH-BeO@{e(tzvBzD(A1J%G%Mq@ewB&4|7uQ;zEvNvp8W7VN80 z(aNZ+0&qym)5)0y&%zALn%z9+!rcJLtC*+woY{ywoB~tK#xV8v@+8Kd0(Xya+SBY* zUH3~8e=4*9YZX(oB=cVV#@@hbhGlc$ZL7{*;P7JQ=Cy~mMNXrz;jdl;Uqi9g1Rjep z6`fdr{QVmb`o_QW-#CftapKlQo6fT~<*9ve>ck{-%Wd~=LjU|Y-OST&KEJD9KRS2c zHuR^{{Q0ZK61KT}eDwN`hi25Rzc?JW)5(`DBJTd`U!kTcwy`ZH0uS%Wp}l|GM9Dg> zYHuG_ZE@ZBGuHI54_D(mtzvD$RLFyq zN1Bov3Y=E}a;?HHmA4hA5dbSd)W5DOHJCZxm^$6%v4OLVKO1;NHZhp|Q9LoJ>~8lC zM?(W;$b&)N^ISa1#k!19uJ)h-fWS3tz#;@)qljC&^W!sR?Gnvl05AvTc3L>B9EJ0f zW06y(A`oL+$tFV?4LK5Iq}U+}7Cd-TR;ky4-vR&%HjI~lu_j+3vfMSHjSX0y)c)BZ zEiSY*@3J6lw;P8dkzJ9pP6%0|a@kQD7;6(?NAS zOVm&g6DtyuY@h1$RS_55Vx<@aXUe5c9k%;uDd0n!EYAR0Ss7!UKsxd1U;LTt_ns5Z zIG~;&dh_bh-VtbXc_>fUhwH0pPY#6%kA>VnQg;#n@yF*^<1@7&OIN`*8rcM3B1)A_A? zHu14}w5!R+WZhW5_Tp3b59dCH(alD`t*op*IC;?{X=}N7n6zk}J7+2Y~c&H7Kg z{qC__V{vK4JvAcn)b+FoPgZx$>g6=JMdai?Km?9F85zxR8&yPsRgid3LUP}ZiVoV(~TPs`|eT=Fx^M3E0mJSK%JZ_1E|p+kg?w~#e8 zgj?94!Q>1s&D;^zvwJK^yQt$3B~lTz`Qp@@Dwmm(c2X3Vix*rZf%f5V=0eWF|0!yP z)MSdxQNeqNF1#qCISDfRUUh_}LPH_%l?09)v25xboYzkATPn`5K1?}JW>bek>z;)? zF66s1S^^0(8#@801Os2_&345}5i8I`16;xfOUO_HVeL{P;7U)cVp4Y-wwGZ4TvU$; zV8d>Rfr}!CrFy(hfrD8_UvO4dXCv6<0H_5T1g?K%S*#(yB#|XE z#dMGmT(wIC^)r(8iltV4M?_pmNoB){%Nh#_+$r@GnA@ajxe+=|DOJt}>yk?c4m*Lj z>A{8Q)SXl^&Pq|g(D!T3q+NAhA5w{<6G==@pOQH>b!IB+jAJJAfd_)?^!CB71Z#i1 z5)$E|WqsieCPsdL7h;2ucf|6j@Z;(HgO~R|^AlegoMZuaT3Hj$@=ktXT}{V%?+0ok z@WtZsw0-rX4_aGYIasqVbI(ePiZsm)CS&D+n+Ax96?<^h*)kqy20R05(?kGLBURGw zjzfJxgDdwL3L5S> zjpdbwI@nfT#SxHHlHwp(gP|H^U)chn`9(8}ZQX_WY4`$450-ZU>J07+ua37&nY^aK znn)bdU&RNIa%Pm=;O`J>1@c_{WiQS#sKh#O{n{CT@^J|?fMqKzEAu526hu$rK*a;) zcLVWXZFYAn^dQCC2r^pv!?|$&SEYo(mlDD5D6e3kUyybju!`0$1Q?-R_#ZJB4(2HcwX3>I!aAZkqL9-c)ZRg8UL!8SaXhgE|+ zh3#8=vo4a+JwvyI_b=AXrnJZQzP-Iic0j`Pj4eZBC_*F#BA~kyt=?X>7z?ngM<-e< z(VmI%N?Pf8x?65u;GpMN6WZTgNt_w6UVx3H23PrUpkX zcLp6~)|TK&U4e4mR!UWw1&`mRNpd3qxf+LA1@P>P0rT2Ei4fZcQ4C$Bx2D^loT8k!MEB(qS@IJ}|B>NrbFv z=hzMnN>g0ymX3mX9|G!db68EUQkuZ|?KI^*HHu`T@FmQX7y%fNJNkFQYycZTD5eQdFOwUbTe^(#^{n&Fl^(A? z`IX;@b!AbR8mZ`{GR;DCzebW5dUE}WyKr}$G4b~zHSup`q)P9P{+IkItxi(j(U;xaFk^b|XeOFGB}7rG!O7uPnJM{>D@Uo0U@ zgjQBX`J*lETWj?V;vjZ$Xv2LsIDn@gdrJ-F08hSC)in=5I9GTtDu$^rwmSRj?8KCoP_de!4Ic&#~JKXtz<>hq#)XT zj5z|BP+>WTk5m|?@BWTs49pW8L5ju9h9#)20uP5e6?`$&0-7w;L%$|u!Y@i!3G1B zl3C5d$9&o<$^hAC)#%hviH&_3*|M~w&RGIjE_x8{HFaP)V?%iV^ zt7VAv!J-LwT447-xaO4+Y3{kYG=K%}#GCuw>M@{$9`XHk!wM{IFLv8YxS#ru|2zK; zU-=LI2UBct`tyG+?!KAP-mS^iJe{{KFmG2Sf+Kjo<1rB(CTw}z)M5Zy1KtG}+^1;4 zIA+XOhe^ku?qMEs+O}v==gdtLP-w8~2ypk3ugQ)N0f4nctW~Edvh&71B&s-6K3*|L zP$J4Rw1QrfJ-?%s1vYI^;ic$~n70vr5`XuNz=qwdl| z)nfOMbPQyE2_lPK)>`zM@de7xyJ5q>hd&*@GC;j5?5lW_C35n-^*l;QT~>{CPp8Hn z5tDTVR5ok2`=vii?vOY{1lRSe}LYxNu zxkr>TO(dJT5}bVR{ab8h6F%lSc~lPP2LT#Aa^eU+C^b znUoSViP2SC+GTj`2J`NLOFPg%)T|!XW7$kuZf4%hrqOn;W`FvFyWhAwv(Uf%osa%2 zU;9iSSa-=XyhJ->&oj|RN9VC7L>3t6aj zg7;8->_HqNE-0<=PL`Upwwy%}$-m&r5-q;_MNO~+={RIK9Mw1os16rWc>V>}cD1C< zDw`hwMD$#bdHL8myW|4Iy|NsOa2Xu%DYx~Ptj8m-jT;4iW`N+2-a(z&kblpUoQ>&R3d1@=E!lBHUT1Z3Mls&wGr1jWuGl@{&=qeoEh zM(&mzEq5R5$-HH<=p$3rEnN4pICUQGZav)mVY7qM8wy>u^`ENqqb3ry9YW~ z(oxJ^#D-)c0J@@CDL71=Esyv92f1yu$L7wOt7YNDLr7S*9ybjgp+|Vw<1!wp`(~Z^ z9hjoh!x3{|Nt7ibfgBaDTEW^9iqq-X;WSLR0uO0;D;5rs5xDuM)Xhc^X9~pWQ9H51 z11m4P*0G>*x(i`TQuMT>2Wq)fLv;Yiwix~4B*QNR$HB@Ff}7Kp7LbsOHUrofne7 zOSV-;3>6AoA3cNX#tg#Z!2+cq{yWeZJF(Up7|cu17cReUp-&i9-sNM4l=u}ROkR!< z0)s7vpHg)q1D&z21&X#jb(qrn&fQT6a-=rke3y(xf#)DW9{FwHYdq^MTdT-F{MYvVkp?pRRRc*pwI&+F2{ zv}vB&BGghIDtkA64>q(l#hTNu+lG!ZH6saphC41mw^98qQh3)XD5V-;*97)sm46|{kuVp@p4F4d?P(g9q|iz!7VP$O zcFS!!bCqag=)B5+2{L2AEs`HVji{kPEqZ&=)k-y%gnjQ=ECBVS*nQzj z@i1^@lq5b1g@X?Pus6W;8e%!}i$dw<#cM2;oQoEAQ``7UxcJ4}+i_K;W-c>Z6z=4C z`cTI%q{1RBQ*|7Iz6Z-^Ty=pS0Jp8zZ37G}E_uo^jg7hk|~9vxOiVa zF1Bo+{+S=|-TJ!q)A_XZzL|w_Ans2nyp#GGJiNL}a3|x!iPn5seHe{ECgg6%19c0J z-n%;3M7FMj3Nfe-WEOOKeRn>erK=7rk+JLs`i7Q2gG4~PsK_%9?EfA+HO);*rTCyb ztQDVcZrDWyeFv65(Ys3tOE+`!$bZM(Mz@yNh^)OLH7Gg@iG{g^`_}JQKMC`}PVB+6`bycs_Ev>>TH*;u^~*BUv)D(1Zlx zNt?2a*Lk+B=XV5z<{&zHo~FuNEsvyLx$)Lr0`QMRkBzSiifX3<$)iWMH4)GzWXEV@ zc9ydH6wPWzUW6nv0L$>;AA4!t-F*Nl6r-<`GumcL--QX+3VTGEsTB-U(x{%_Od{6! zHQ*;Nfy>rGkr~e%8{YDE%pR8*MoW$ILyb2#uly3s=E#N~(rb`pOVM@$+=)*PmL??_ zfb)|qu&nF|_aST|ynNK6dorq0q#{Ynh1oO`2g*j?^vTbN`-yD^pnS?*8pJkIT}{J&~3~U>n7kp3LL+ z0vA6WIluFESvHFyeEP!EL*wxAuKnK2$1(55f&KG0bC$2)`9uH}k494tuWaqjeB+1#TPn%3305f3Nuuhzi$_nq_KNB1YF?Jj9kf3m zyMgiB0q@kwq1)ovdapoF>T31&(6{v1?Cu-ktNEY*?)|qO`qX4}u=4!+u(Q~i`9qg~ z?$7+*fA!!0BRTC#h?zV5u48X4q;QwTtpC_oKlRnmdidNXX~W%3S_pmbeo2I2R{s2x zIjsfnxBkh)n#1IaS)WeYz1wEr`s06jJ3Y4Xv30bn=JfnVfB9?A|Lm{6fffK0b!|A1TMOk;w9|aP5*e z-Yv#~B#4AZl=2jlw|L%CxEJbPD}qF4R_8?P4cI$8Ov`51Sj1CbTaFTF^>+p+X_@gL ziBSMu0%ZnlZh%g_Jb%aMtF>;Wo8{Y`v5FVfru*Q_raEPptcu3IiN$zY(ZwyoGx(zL z2*4tHGGLh<;MTb~h=Fi>5s`R09y&W7md7rHzy-`4rERDdIll?8W}Q_$F3Gm(IW+)>6=5j5%RM2?6K7RImk-K`k0Ol+PmFJ( z=9=297)whuvF;MC$F_Ua<6^|gg#X~h&KuMpNpNb<)=-fFQJM(3dC({x=9_iP4q^m7 zWOY0(I3k(IF_J?0@$uB1Mm=30=4i!6Ixp*}z9A7O&HmN5;AJdg7mLlk6ARiW=j_Ov zg71-xqzuCxh50yBaoV}+3}YSU6`UV={pCV8g|?*Va4B=|MD=i>`_t0K#MrwVyJ3F- zORLOZD0Cdv#ud?(_h`wj~vjZjn(I@)5_uDj{@{_A}nA^h-J%~CHHZLC-{qukB zoBzq5`qZ)Uu)=U7_ZZ9^j+VUb3?lHDrpeuV@0&&Un0+`?Nq6G&dF4Sf>CBG`bo;dV z<<{y3fSAP37*k-~#&FY}}>KqIYlKB8h zD+v1TB!{W38(t|7e)fEtC-yPTJ#5ruVS2|!4|t-~9ip*QTrLjB66wL_`L#l`U&0-3 z7?bODlW;3%HOk%EW!1OeQ^|r9$@e??S36Et#+Ru#uY3kc-~@cUR026b$z7pT_%IB7 zFlFHFhQ*2}L4u{ONs2%N?Z~L1tiyWQ>PCeKWGkG}b$eKiI{-g$RiIh}O%yjT;2$P1 z@h%Q)4qht^OzZNjvIC$ZkwkVA86XvK4CpV0%B|#a0+H>0v4jiy?L8dk| z83fm$n4!R=s05QuaZro?iPKeB6bNRhi3N(mrlZ`v%H5%GePR4)e4g50;S-eK6}&oe zv*B~#$}TprKsZwh+d8$ydjpBf)9Nb9m9O_v{=0j)y90v?-&QbkB>VqvM7&vFxACHQ ztVf|HF=|8K4ExofWdZxjua4)JZz5tFC|CDrP2Go+0(wvZDb}bDi_h-Fqn3%llB}f2 z#Rn$zPvmtQV4Z$Z9a%(<(eEi8x!pdy`PL6!=90jA*QVhf!E2I{ouEIcU>Ic=E%81y zpK*J0{A*|Xciq|-4(&humFZ7@`{BKtd1}HzH^(W6mZcX9FTS(!zx+=>`cM4Sr=A=@ z8F31b0M&uuMLLAJFfW^#8B1GM&uPmowzVg)t}5H63BxQ~?`zgh-;~zw*1d1r=Dt`@ zwORK_%Y$?0&HS^s?LYPNFaG>*ym@`@JT_@o4^!Hd)@o3aC-uZCBBa1IxFsbf&8-Z= z@EP`6c z@c295d+qD`a9-X0)ww?`tC?Hx<1@Rtk<*(gM>R4yGX;mZo_s#9H^)P3N)e_RjE)YWNpwT)Qj)-tOoKR= zu@@CeP9#N>t;=6Lwg13mUp(s1yf=Ro8lwy-@$F%Di_L70)A@n%@BfvL{*yoTVhYk( zhYOCScd+kMJ+ZCZ+n0CS!`-qPM|2zZIitaQyN$16xb3{vBqq^$v(x4|gsQ{@E`{W4e3j-}~6_?u_XEY&Kt{x!-vG>SP!GuaGuzgT+4(k@{ zWB2jJG`L7|Y2>rZEA2m8P`sy*g(p9}JjqfXhFhcrN^TxQ#YdSLiGm1`0B8M4w7Yt? zqDA7808EwY(b9|)3<4zfZC3tuR@b^bz&@%epNk&qk;e|m2%5@(&tuBE5gC;R$MDGZ z;=dF%iYb!i^-lB(T=$T#TsJc;p^JAK66!FyqxzBM>Q^~~4v!ugvr1}*MC$Vvs|JAV zKDmX1t7dt<7BLAMOQfz-i$Bth zwsE(=d3gNH^QS`|9?nzW4DKbu445E&KxEi@=9em};9TU)rA+fA%W8l1f&P8G{nGR4 zZ@ux?-Df3db@#)pzLIy(YN5g(yZnJ)`Q$(JRrHsgw@-+}FPN<)8Q}fBG;zd$RrJH~r=7rPJU2 z?Yp1(%FVN@m_+`4-+2Ddnp z9mYbb%Gjyxm1pz>P6vg znRTR|9JCUpMJ@7aac9c!*^xAW-#=tfpL}Q?v17(kC}C>YKGqhz{{Pu7i&P&DQw^+M zYPD9E7m&faV`>hq8ZG!Y3RjS-yHu96nl4_IY*QPuR5mnD4{5EU|^LF6>!s` zvXHIF$Qqq4_h_zLcHg=vVsN?n*C)!2qm}5C2z(34T}y^lMY;S{q`h(gPF2;za(+6? z)+UccjlEA|5zE*e81@szbTTXQUze7PE%l06pT-fGRGYB0*2W|~aZIA~@#^9J{Mor} z({ym(ZjU@qsr|t2(VR=5*@GH!Ic`}I+4C+h{U%g3$fTAKAI~*g|H|;$RXI4aLUEkq z`Zy!cz~htG=lmv{f(2c$v``5G3%O1*Fx}i7Ma13LZT(F<|Cp}-#`oG^dD%|};Tj1Y z=eESQb@VyH{0YgQ_^sFf#ury9h{M+nIzA_h?(y}TFCV8Z$UM6H7PLi{W=&16B{>iS zdK_d5wwuG8D5ny&5y3cp{K0b6w9Yes?Mutt{MDON@8A61`RkuOJiDFerZ0~C zZ~gkSzxR7@&K`4*=k5G`}rH2`3evi4QB2$@t0Adpg5m>{DcG<^&Ai`j1S&b$=8C|kKc!e$dk z40<3`44C%}@tfAMbBl3frb}5MCKOt$09qa0oVex>MsQI^ZtYP8TJyaWH@=7MTUpSm z^VLXU9Rf-`4To`SR%2G%;i|Tp--wg|89U00$_c{p@q^4GpR-eBYn*RPzxc!v#^qeq z;GIpqosp&zmI&{p_3ZKUs>HNY4HPc5?p~HXb6|LxB` zJtYv0AjK$Oav+vQ?3P)}>CF~`Wr;b#__N$W7zyTxu);5pwW*?+}z=u zk|yUxgV`Qecs0k>}m#IZZS2c1(e8E};dDP&weZ1!l^ep&Y?=IU!m4G&Gmp`0OGI z0pJY5XEm_Qh0YpV+8#}2`q3cB#}Kqn-sLduOodB-LnW7J{)j? zeHHSqA*tlV0uh&B(1Jlt5kW<(y#}*K%9%N%_@ZWl2&>>}7S9`AARcqzFG#ye1tdEC z+H=&fA#S){FFqT{c7j|F8b7PwF7ld$80+i21kHLq{TRxOtAVifG&71HU?Sy4lWt?q?l#&_fP& zx2#+5%WCe?RIg^8RPQGF?QWlg{0~Of`T9+_H`Ll}+c9*-Kihfd!SC5mk6PbsR=bL2a zS^GTOMW^g3!p6P5`XZ7{gKp$hg?u%?qk12s4oKYG>M(sp?9t=h5?(a8+B-LlxDdXB zP=T4=GGo=FHg^$NN0wJv&5#2M(Zmx$2pg{h)>`R>;04QICa>x7U4QB*yIz##{Uly8 z1;E;OQjsLq2$~d6-lD;_7@J?-b0y2)0u)rQrF3mDK;5dT2ElD^@Dl@71_%pf70bvsv>W-%3biP*C(s>mqpEWaB%7e2j~Zn&MbXXNNMJX2FO9tvYw-K zEU|-{s%cY+=ZWStYHnquKiPn}lXzj9zkL1p;`t3TbK@)Jb*&qh;@oZNE?DDnBhR-{ zL*_{*MXpkJzM7-8wk-5rz2Vo7zqPDQMMZQH5xP4qZ|+yoL}0t};l=fVh)=?=*j{X- z<#o$NEFvg>;pbe3FvnfOsMBeE&d@fE5bH56`EW8`v?FsR+9WIJ&~gk&X(| ztE`IREd(cv+{edoQ4m23OcsxLmqJ91vLp3k0OF-aO(iNW1y%!Wl^Yfv&M_c&c;@62 zlxpR)39!cv2@3Fz-w86j`wu{Nj+$mxPP}_)2JJxgy96kJu4TAkWd>8^r6_KS6yT0U z1>oxBxs@;TFDfYVHAaPo=A_|K*>sxsJ4*8(V$UmU>gTCUD6e$RYOitWB-?Q(j zXQfm^QG{QO6r<-tvdoJHC0McK6)?#{5&$LHsh^o$nuJBsyfSOl$l_|Hq1$6rw5VE+ zRejxsN{+O;qL6yH(C*I#md@_3f?KUF;j~B;HMgSOW8W!?8y{1BWgCtJlJfgrRT*}7L?lUsL2orfgY zBl#X6ROIOXuq;pPIExOw2+u7x$E`Ux-3;JA&V(a(f9ckE3WW5ynX1I$(6-gqPk(xT z{cR#XEqzj%RkqEiNe-oN~oyDK$at4k^q|?;@^}p;nuqy7(WW?p(IY zm=N&V0xJQTq-c?>*tmGOa^1+8hjcI_Z`EX!jRn8$9)Sv@?O;9~h zl8L~%7GoJ`UXA{=o)^8oMnoB$lz7P1g(3&biGJzlmSAiSmLA=+sV_1Wf()EkrFxef zkDz972eqPhdXZ#0Joj=2fz5`OcW`&okplMe&BMRxm%eeF^>Cb8Yp-4}!|*^@m4Y6& zg+l^h--Qi+Y?J0zBBGnU|NdcJ`kT9l^Z9)L_Tl>%bTY7tU|K#b@p+U@+4|avg14<=JRkvToF_O+% zGXU}-3!=zxJZ*ss>KFDx5mGi=RsXUF#2*6TKEnEJH*}PDjruFQ4X|cyj&Z-};F{vf zg$5X(r4H91CIPQvat*ezG=fPdTto8^M@UHx0)hT~q1-d1M9hxR%K{pla|&jKb3@)& zg*pH|DD+XdphQZ8Ki-*Mm@$BL*2BuDjJRb)9-zMfDwls5^_ig~sRld(gE;~+-n}mC zbt0)<%Gm$^(%kz$_s?xtH}CyN{$pb&gf}Vjg+Rwu=@0r|+< z?dU!j^@2KmS-5y!6)tW21AmC#-ev1QEn#K4d>`)YeKg+_!Yy$>#b|`w_e z=n1`e|7myo=C?okYAiODo!QX~9>9heRxnhrw zm)o4W6LaNP3&KaY)gJExT`;25%ccjuEYU2|CZ`G&!%-7Yr*3-eN%E>y5|Yh&nN4Q} z0Q=BO;msv4OKDL~9!&&IA@&#O>k&AE!%ZQI(wcd%;4J4*dXS` z3j2$+HBYm$LI~6N555Ud(gb_un_~k#wU$7aoT6WeFDecHt=wkBO&8siBycIQrxb_pE`(oW;$b!0! zn*;yz;&S38p}1c{!7UP)IM<&X9ALQ9aHbK!?`aJSj^gy87bDF(S+&NslVBZ2ie3 z-#Eyd^KOV6IXe!MhkHPw*_LHrI;^yW)VWB|q?J@&OGp7oRdh<74>O-087UJXsgSSV zm5o)Q`>6zOw`Cc+>3WYC?6dBCei$3&)*xkt@mf*a%LCp8R$7%ug>N?5OJH$0F&J%d z+lJiSlJ|kqoOPl_O1bNI2a{LeaRn$G*5mmH?8aNrVTTv^LS6(92csSLK)DoA_A3$> zP=b{~$H3MUzGF`LLy;O))0bD=E=0GmAI(7;**T@kx`eC?(0o7#u*qkJ6%90~;=2wm>EUv{t0pfxQP?}62?y~Sjqz?pgNg@FHkZ&4%O3Ked;!$Px>EB& zm-|eVpo&6pF=Q%q?l9_B>``KH2yr6DxhxP1<1QJLQW!HT!z;M@TTzUf>BN~Qs#v3* zRNgW8r;OULqmF5K)?Jhfjywv8^J|Y=E9mh!^Rr_Dh_df-x%8pHuUk3)u~O7}vI6lL z7jGCv@mUjkx60P3#OWSmeR;_(2n7I&8yBd#09eYXgXB7mzd`~`nlNYDM#?2$Z%*vm zLs;rV3T76-cPfHO0K2M^G$30OLkQj>7iJs!DbIsk8T*+>pW1XND7^#RiG6%il9U0xT!M}oHU;2! zAoQbLPpUvlk^Kwum9lZlmkQBJDAiS5l39xI6Zoq~*@I$c#;XU=7H*45Yy!=urEh`^ zxlEA(ovNNot!?q!!)~JVJ>?lQequni>t(r~-+mo03K=j1%*?93m0VI$u0fHIkm9*| zNtBWk*vK+UE6?Rfv5DE)_PMvk5vI}SK>OL2n2^Otg5sQE~M&eu08;DNGQ zUQe0XgF8AnQnTqU3{jr!RTs4cpB_r^8V(~a+nsk1)OuCQ4kcgfqSoN_as}T-2+nqn zrno*!?@r>a*8(XAvI$p)s&m-NUkkc)Gi@)X#agYFbJ{$DDof4hLJk zAQ=)c89i9M=XC(IB)3SGAWC)9k_u_48_iEkB8bR!2c|F{`0(Z@^(Kt2nWLXqU(xHS7L}B;g=^X

    !z*O0Hk;rz6_$)vJSb{!UPlvbA=*#UC6pK3NW4{&HK&Z- zN77*ahhg67qss+f}>gC}M8M#K1dTu& zzc)v`z3W?#jbsbbA+UX1Bb%K`W%?6;c7l&39oShlZO*Qs!@Phil)y$rSm~Gs3rEOP ze{=)m1E-L69IsZ5W2LR-U!Xsnw=G|fAbJQR7{vRmg|51A^gu96#aom>f8$sIugU3b zS+6|eN@)_t>*KTqQj5<-Tclmx`0>TSE{7X34*bH11b2s^N8R_-AqZWQ-j981Q48@c z)w@)Dz1WqWR9G_rq^LzzRm1&_49q0}81|wlDKD!IJ9Am`7S${et}KB`CkN_%9|&S1 zRdi%sM9y+qb|!EEIgRIwoXLNTwhvxokv^FDUlPJ-Q%gz>h4aN0AV4>w3m1zkRW@}O zg?-j?xiFYIfd!X8njq`7xx2I`7xnqf}G`On)VVN`};X2l-kc9y83 z>5(Yd9-USJV(RP(4SV2v*hBUAqHNF!RvrKjboH`jotOUv?kw@HUId$e$;VVqt$|YO zRsM$*iYqSFwh&42NE^TAi5^4RDsa~+YL+3Rp~Zyny^H`rkG-%YHG&Z zoWf#t5?ZAk$S1w{lN{ixS1480_AS9wp#9Of$k?7^HCP&JX9D_y|81g@`(0kRA#l(p z6o$cX)**wH&LK9Ot3|N;$_QC3Xy`VkgVk)>8U|8P)UKlQ zotI9j@P|3K6E;PZzxw4SCkXzwb?kVnu8K(dFs_^BNSelqGs}PR>(8%L+>5qckn9Ew z+udmmR^IB~jHb-7nvxiy&fzhl0@)}#D;Oap#4VgrU#Qi;PZ4I!@bG#;or}Ft z9Z@4%$&>ohxO%gM{_D~(BNenI7WA&)!)8njW$BuFt}JHG4C^X7cgVZ5F@s%#h4C(Q z@ zMlq)DGFh;eoLwpmuauDa2je44N!5Vv<)rH#rCD_lDdCZy_1Hla%9a=|Dxk*=9gP&< z2U~QEdQ|JsT2j_TtCe_`8)L*w;?skzn$OQ6S2*jmF0lXT-065FQAU&?C zL^-?QQY)AEVw|EskBhaMr{z+hk;JG7`7yZ5L)7Od_pqRi66 zVHbicDPPJ2FFN7GmW-Jz4;NDo9vPl0xu-Bn5-k?Rer#%*KWskEhnp*qKW5?Etl+3f z__=25x8K$)KUC9^bs|M^E{Z6Vhsm> z$Y?~y3wlnAI85?i|Jr+p9Bz`3U?@r+?jhzO87vLMUu>pb5f)_$*8<8Z(U=cB-?S}9G^TO z;xJI!!wcHq|9~i;uW*P_BS+ORiUeP{K_tyZ*T@s?wagbVAM&K9lAj7OR>FW-U416~ z?#WIlhKbxs8qe1eFR#wZpoP=qFeNeEI}B8Y9Nn3~>lFJBhv6^^DdI-5B=V4w5jx#` zPdwN0UY`KXwg;6kVMnaXwoLX7Rx(xK?TQ19{cpA$sH=btVTH-Hv=k47uw-Is-JTTC z@L&fGj|4nZa0LtEj*w7RU_BnYu{eZ3n5;_eTYR$Gm_$?^tm@-=gFxZKQW^}6cP$A+ z3tNFe3~^lmCV-VgGK5|sGt#=pevyW!dW?Zol>@etITvz;V-d`lGLb(ZEJ@1;!vGnX z*z%MDS(P%Kv2uNQWs<_#ife_N2iVc*e+5Mf8!B@QF~tteTLcpT9G{Xsi-%rqjG=Vk zE%kWY2NlLZ!Di1V=gE3d&Hz<=#AUt984L(pUgQVE>7wUYQ2vimvK= zZbU^Op$P2boD)fO74}Oe6qFDN#ue(YTZmQ!8B{R{=M`jx${wWcjw^(vZ1rvY+{R+5 zzDyejbqXodv_`^$1KbFp+<2VWcaZ4j!4Y+rmFa8LI%2G?yE8e!s5A}gE+UcG5Hp-# zS|QL*?xTRVTw2#K6+?_}fb6jw%cpqR2rz9%lFz*!lXV06vv_Zl%0M3WUSlj{B_hDS zbYMY@8=*zsTaDTA?TLqp%29KhBauT4#|k+SLPaB7Wqb!BJHoE-Y!Qq_$EyjdV>nfB zT2yH&R#a(?(7kw*e2tXr5?rkgTx8G=ou&OhzWI9aLJj%p;oX*T7Xl`M+QUWLM73+t zX(HmCPd50@ay&LDFNq!>Ph}y-txc7l&Al(XM@!R|N$iu1N;+7NKX`L5M9*gZ^kMqf zf9aZyCgrPx99YliZUcp;4r2|Nq-MxbnRSoFCLjXOGM=>h5o!DU`IDEg@4xbe_rCM} zPeyv5-p0geoDl&ZPwkFZKKPsCx2@MiyY^9QZ?9$QKeJG*CW0?x9@k)P3f`8 zfB7fho0!++bXpt_?azGt_Wp5u+kLU^+&y@_Z4uo)_rAuB8GW9%DP&jkNjj*_DlA|+ zE$6dW6trlglB}9{azrMws$BFZIc)hfuC+Ga+lH5vG-6gghq-On~^eZp#H>aLpo4buk$2FDgiB@?oJ^^;_P!A5XT!?-E0=N~F2L=>M z5^kCuDaSVxj-LrLopM$$dq;>h-%a__V9QB`Li8KrmWj>@Yp5 z0mR?K(_(yH_8OLT0OkR*=tYbSeQhBncu0`igCmrms`eL9Mb{r%yo(B(D$|>QwUw7x z0R)-!Q>qI6&75SwI0ah;4e$37JR~Nln1t+*W zM`6N#K^Nn)mGp}gwSv=}k{@Zfe~B*6A^^yWJIqy3hD5x~{czEgt{Y!S5uX$m5}~9X zR!u)b=eU9ZN`_!aM@WmLj1hjkmd^KP5v1nb3p%Sxd}lj@WCa5|ld`Tgg&uixGwHdfFoYgt1b4{hE0YDK`y z#xcs(P~^qq%RZvebdMZhAtJ!S)ED#RS{TmL_jF+>{$yoY5ZkhzcY%}YK`RYgn+~X1FEIxm=G}VFiLfIVN?AktL2{+Z znV*$P8aYlXB2KY#ucaHc#)9@LVc+oJX_hx{-eeBKckkA(JUNcf!`D~y>F#k_;>`~p zB*_oBpj?tbpG*&9BR`#K*%j@2&E0`r7T2DTCaVwu=6Azh8}sdzip*N>!9t zB}YIO@C7QVYP_r)(kdMRpX2vw1@I2&=`$QRSnP|9^k&E%%ZUz+5hCo(&Yl@ebD70h$CDx0M}rS_y?S@_IoT%t^Fz zTLm=H9IuPZz5kAv$OP2MGCl-1fMIS9p)Q;*WRxe&lj5)=z%s5h3$^udj&VvV)(p@3 zV(SVx7YUx_po)vAN@uOnu>(Z1Cp;nwhclpZY47dz9WYiOiO`gfIMAvAoOsn{{8o5I zxlDnU4Lt&O{9G>7nmP|KhHAxxHXs=la*-_TVjN|*-Aa{G@x#upCAt%-jXl^<7m{be zKj6i9rTuVJM~!Vs^*5AlqXpqMhTBE`1$hGZP)%Tz@!k9=0|#p6x%hyVj?5go;YbRc zXNNnn?nh^uCgS?=0p8cTZAL3B^gK;XMp$?|Bo;e!g0GgNfId(aAAZXDLD2q zv0PovbJOTy>ep9SclSRWD~kF?DEgV{V&2y+uhH7;@F*_cd!`(KB6^nfiFFcI7qXs-!(p4B+y}*}b=x>WRwe-;7Of==nY}eWpNE`J_X*s(r`pNa8=1^|J z*+jEEvNj^UsHK;w*%z1GVw)~2ul4EICW7H3v|E5J`BO} z%3r?|30F_XmA0E=M3ixGb@1CDnY#=-QN|q>7HITQ!0W?QbA-JCb2>?khn~EOz>5z| zs*=2tkskPbTs7NE_6D+(b3WX0VJL^EdKf|@2?6t`bW-^LgVg8Hgm})o~<~vRN6fied1)Q(|-CGbIHB|p~GR` z`l&`G2K88ISsv$`dC)aUj>m0X^YJ~Nx2Lzq6tiC+=e0XNw`%eP%snq&bAEDt^>}(r zZoxl$`S?rEt|MqZD2-)f2v*zd(8QO{35-m@E4>SNt>I2``o zKl$Bxo@`8Z>&h7%lxS42rPV9vgp&t3cU`?dTUTk!`JmXixPyGh6n$I`YUYjN?P~x0@4Wgief8Pb zo*ew0+m~_zFIC0kHZ}r2RAxx%;4tKcWP>GXi>Phz19Qt=1cy=05bF8Lki3o4A( zzfut@zAL0a0t31mk<(~gy7+|7^EaXjOmNPslcfS&=`!U-%Ub`enzJ%oM?ghkv8V(Z zj=F?Nxm@kh2cdaJ4JcfMxKQ=LW*Mj!A||mrE4L!s_vrO&V;Xko-iREEc=#E?DKFDP zgFv9Lf_oAT5?ocDA6C#rCJ9*T4%@48f_r3;7lLyDTc`w&l5W9i)q z^(@l7(44~m2RZPyJz!+Y0P(}Oj++HysD0B4#*ZidBBbN!)a1tk-5vN<`L_1l-8()j zxCjs#RmNE5uoY#uJlZP08J@ebyCmdxs0IMf%dVX46dwVXA}DR;*tuU#NH^Q>r(!FU zU@)nEG2cGNH|I%mg1!e|STUU4dcQBG_y8Z2#>=`=ESbQv^|S15Jk`-V$T{%w+ZNnQ z6mdtds4lytM@aD2<;}zEJo>}ehTS@myt)gro^Oom%-F-kBvYo){Km`m=bv0HC)-wI zjt+<8ONb8wMw#LG$$&V!L37%n=QbwNVbt@fXSbr-&3o_6^3CtRcC$1RSy%5P)qYgN zXe}#;sHRJ{it=GnGe4cqAAj=pYsDyu&^TCGCYmzvSoInhi%)| z)0Wpc*dERy-5wLw6=~=GP|sOP8(Hl`7E+4dosFG+Th7uRS*7R=05@K~JqZm|B4c|f z%$!9Y&lZlcQ-xHfNE*<<^}-4He@RvB*;~m!_uC);SAX>VPhA}?j2wI1)x9OrmiTQq z>%EBW2!gWm=p6(e&Y`gP72z#l5mYPZ%$;4r9rO;9;RU2YgKeQ{gX5l++Q;$^7U`=S z_~7aJ5phr{9XU7%b5q3ADjlWC;a{QfHO1fIv z64xy?2rf0DZV`#jvB0_$z7>L0BaT=t3Ny5{Y@7n)0*)1S)gVeqaU4oaCatr`p`F~(D$hn2t%B{|V%fJKTNyZI3&#`RT zCH?)6&;QOZ-n@N%&S528)`e+)@A~S+jm&Mjn!^12(Oc{_{D&_2{j}K@eY5-1_VU+0 z;$$*z+ozt*s?yEf9Oh7{U80# z>(3r%Gxoudv0<_kmQj^qK5lUDhQsU;biaA(ajLY5+*p{ zPlQ%bN`F~yvs?x!5UBRT_Ptn5rCEhICL4A~-xr{EBuQ3A<^F&F#>ej;+E<@l9aN9X z*ON@4uY7y6_Q!5-&b^?YOFk7YifrcHf)c$23hL#302~*yeoC7pT?HDI#elOH@({%# zV#{=goG4PJTjvwvCNLP#A4#=qyV{*nI1#X-z>{Hi$Nx_`C?IrIq9{im!Jt!GsNe#W z(ZAth!AqHULpjz~FBNqNa0%5-=-6k1h=@kg86e=O5a_)<{f@>1X3<@wtnN?`;y-Y4 zCYOpcEO{$SJvSJ97T*xiRi;WpI<8d8X#tcE62z#6wI;qi6gUcs!aZxozOaLUS4s8VurbyW7{`@)B`v}i7p969p(Ozu#O7!tt+ zgAA6{*h#ypLQ*X0gI7Qq%+a_^IWS@sjYd=)Cp9>i-Slkv6q<(@BzU4}+tq(pL1tuUg>xj;*kKxdi!2wu;`iePL9 z(g$G9yz*gpB)IL7?~}}s^6_#J$vac}Si#CiTRdzbZz=jq88pC^67)~=JJ z_m&ym+)Vo78a_AQe#0XuipO|&P@P&6b?^S{=8!Rv8XoEq>f-`2cgxtKV*je9%z@3k z-Hg@cq))C6n;!qzN9S2rRX!4z$d|YE(Zhs=k`C&a0Uhkge7PXv!wh|CzwrJPug@=0 z=a42`e06exBU1Sy_&NY$S4FJ%ALKfereY(f$-d++hogQfs1Z4M;|F}a^pAev4KTT-fudo$ElmWM5R)NM%>XMf zZbE|{4-6RU9{xe)xP~k*yr;}5)=xD!Mwj4HwT* zzyw#mQW)nw-}hQ=Gn_PW1GAKvxtK6j^8yqqQ_?gIA$BbJMDw$yA4bB?wfbfY$Xo>s zqg;Lf76i3AOwj=%vA@zBBJklc<&@=y=O0vV8HLlAIdLsF>PD$`78d7`hOKG%0iKFv z(_Rhq81fZ0P&W$9O`jTo| zaCY{(O$CIjeN&;r?fQ6ZQ_hdScc!12BAnd`=32r!X=yx&TLriSPTG;PxPCHctC7?3 z$FJ_c{JHlf#3YU$(`n1b#zSMU4Lxk4<__ETJlJ4$L0F;M*gZb=-jmb1oLA4tvr+U| z2FY!6d3bnmFd=x*`QO=86Qf_fG`%Rp`?=o9ggd0;C3>&pT#kaEyE#=q2tJPhVZ08NrolDkah%l=}EJ);!JoVU+TDMWc+|yeuChL(Q400 zE2S#zxsd=?f$udWloBsP(m)=d2~K{b^p~b zeu`uK{)cI9>D;d#p0`V+gg+G7VpJTdJyM%}YI9I{_aFJCu3WdX_{3uf89LZ zSj$Ow2u2JXe2z9v+qS`Y1%n-GJXkjM5ime>~5gLfES80ndDNfl+-JlqVqUSO2~H zVC@Mu)mc$PYFV8%M;>=eJJe@!msS7Yta740aqZOwh-7LV|7u{VE zQs;14bC=0w8Xp^l*a$R$?lJEwQD(0>Ka`a+s;L}*Dgg{}_qnk^!)sY0>#!HBR1iz? z^77E-pys>Tad}ln_3#p@D6YiERKM&$8MPheUII2fj1yQcc03Gza`AJpL6LMC!gPmW z0mo)nG~`uUJ#m5dAXAoek?dMMtdB*;H^ov4X|y1mO6I`8bUD{mr-78#fDilc+QbL6 zfugWKtzPePU3q$HD9iE{+bk z@mGHP`_-dE;+LCacb@0Nx~(81N*g;nf>~5@VQ_qq8W>VKP`t6F#4HW~N7>YK z)f{l#1X-Dw0dmLCf_Z$uY-TQ^=1vY@ei+h~O%=y9=`<|uC}dr?)@+&&qfn}=ljZBt z1~bbz#a1fWXSCMFEo|k4v-?jwxp?yBlen1SO?U@6Wip`nj?>tpg1>?j1Hi{j0tl8_ z@Dl?187k#LP?&S%4oDoHG$nb#;DPcVk_5q=$|U~|!0hA{TOL)sNkwmjD8S4CVb$dX z{JeHE_#@%Z00>FbaT|=ox?~Hpqn-DUZzpnA*8sH6m>~1<7U{F{z@^AY*aw$&QXrL; zNV$@4@N-~mjeGuIoh)U@ib3C9NLYyGx|5ZF_lHA{i2pq>lW-6{$|bpUAtjnK-T|R{ zP(fT|FKl%{Fxs`j^%Vs!$O2Uy9Wvx_2#%@mrUE^o(Z()HB}7z%m$0kj)n*%;*DwIG z8mlywFvIx6jnt3aEZp4+H!p=7h89eeQ4&fd3|?}Z(a-2Kkajmf29*g|JRTR8rtI!s zQ_x|WX3-RSpVw6c4`rUXcOI38ZP*)&$fWbKoJUFKZd<)RNxbt?@Zn}OEP-)!Ye#^2 zBK2=kQ*fosd|9?Q~&HZWJY}>X0k?8SSZ>|o+^4zaJeD(IUEajpnWdnm}iRQc* z4At2H$pKW19h~IDL=-^%t0n9xB;_3`eCZ-8^x#4(eK&GX#%IOfbcjjH?o?@_cHTNu zY-X`6^E{Ud*R7kN4oW0d#a4G|QzVhO!LL|?$KmU#&?&F00vsDpiN_mJE0%#fxvxyx z#_1KTrkTf|o>@ziQ?wf4-Mpo`Us_(C7WrebQDYA{GZ!&6u_yeIM}HIGInt23-r-cJK=r6j?QAYbkAiXAo)GoiRGeA4)p68qKAA+ zG)bW>PT6QD0H>s=bqJUD((Wc7mZIV}h|1Lj|CkXefKk{BTgnc5vtA=LuBjEUkP{@* zJhv!qogrL`oX6B5rPMpSbti>e0zh{SVy(3m%0zhJ37IFqB`;FPcCklO0mf5PmK(fc zng}cPh{x5A12^vDOw8m5X^#;NFApCquD$7Fe}8kAf>AvtB15#LW(| z<>Q!Sp64r~P;JwEn40AF>G5=iCWPhs>MGCR+SfO4KRO(NH69L61%Y{db-2n#WZSl7 zS+PAEJPd)TP*lUkcSI?=8WhgzQCe_BbTqqDdnWws$<^J%dYpCJ((`~H&+F~= z^3N!K;a68(qS!iVEX)EAl59CTJ{;hjc> zb2Ac!KuKa(qfoSQk$I4hH?6@k*J5L7L5NYIT5AW*VZEX9f;!^B&C1jYql5=Y(7O*E ztlY6-&4Q-TBvk94HB}1SOLz;BO!XWq?FcO#S^~t&qbaMs7MdT!)tx7}q^Nr!eubte zhI!~}i-=zQ9?**}0_5t&9bYbfol@uSY2(n?)~ci2c#$OUAp%4S5FOlN6*E5I`dk{j zL|)*jsPYu97p1*iPk}>6xPp@th_0zgNZ5^75n7Jx7I2M(UzXz{85IZm$o){P=MC@CONG4bkSa>((0T%Z|G_y?*m1 zucG7e`2Kr0=x0LaV=$)eOP2dQADU?TNH5D$U&CHEINVR$9o`}n5O4Xt}y82 z{f#7PuIL?aZ8{#NvkOnKOvc+amohre80lI6=Z`0DO- zzxiX|n0Y2yM!)c#@4x=sr=HbzGT=F2?jrLf%jT&dbLRS{$vpCC<$rm&q$*S8m%s7( z?|$%FwY_-u&GwgOa|1mEL-@NOUvi)Js+fk{Fz)! z)jfrtRC$_a8E?k6ZsxWN8|%Mg-Ok=K_J_8G(Ts)PzBni;cDAKK6v;Y>tb*&~lm<_C zwxV(tK`41C!aUD1wl&n5&dX_<$4bB(H`)4{g@z`IUPO@|iFj51d(9$^z2kF5XA-m% zVcT$EY?+M6gpHK6sX>tII4OogSmt15zDXSq4}Jbv$QFO3z*+{!{sR9XB?|1h+EJ9t zVxbebgn-Bfj%FE~mVCFIz>0s0Fx}$!p^}eUc!~9b7d~WH%A>=jK-eXFT6BVL50ML5 zx}bppgzIVtg$sA9emJme!HMyx2Z(zVN3ErZs z*_G;QjT9OaBic&R-E}|4CA9JySCOby3MC-|6%A~-DyEL`$(>*3tPm`PhA-2ZG{IZiuVyHn#RtLieP8YRa^ROWB{3a2MI8k1F9$cex{ytNi z3h1*7i}gZT2>2?&p$QB3>^qbEU%Ft}&Vv3Xl}5qI3M$9D#F8OKF3ZB2us~4vL=!Yc zK%yEBHAd0KJS-Kb96?Qa!%jQ`au$4#xb2)AqFi(*S;7d6yQrlhMSxw9$2_Gq>#|ML zMAR}-!6-c9mBl}Pd-{j>-)W;cn3WFgkQxyUHd|*^kBEAwykw!@zw6ViH`i?)aO`56 zyH8EsLtwoH?Ze#KW>CurCRjxIZQa}4@Z`a&8Vm6GhkT_sBjxe=)9b6_BrKviC9)7b zx#q8Y`o*_Ce3`fmJDVG1i>WwMSOBf%pGC!{%6F)Vq?HWO2Buk165uX5pa_}c`VCPC zi*%0fr|xtx$!l?d5I-NXl9p^n1e*YAxV^q!w%)hZotN{uO^p+FAnscp11wAPt@g+} z2+gzVod48?P${4x_MK}08+HSqRi}x|Y&iR75F?A0SJJ}~@{Mv?p|vh0gDOZq^+rLt z*{<`C)-H*hgSZQdU@;cqpr*i!t8=M^?&WrXp<4YfowyRl@d06G;O2?W;S3c*kG!%9 zoZ<@5%O#X!=?IKFioWfzfRy}Y@VNk^!wOkIm&IBeT`%O%m8e}?5h#fP@iq=C=&Ll* zmncVa!Ba0!-klvtg@b^yA08bowm>KHjCR?KJ5ZNO+cXES+D&x2o=GFilN@@c! zwMsn|m^tpnduRE(iR^C7{>ib8i9f`!+RSQ|4&D^2m>;H&NHlG#z8q)1c_vO5_e3la{zvgpWn99**;8 zCb?;J7=6Rr`}6zHZ-#Iw=82Xpy%d@nC9Clj{ma;x*1jS*btEuHpIUtO{hPNB>!A0< zY&0FXiKvVltwqrE^tOFfUVQ6=m%)bNvo2ONn~`|V7{w*Z`b(hQEAch5AfqmUp#9L0 zUz|uHlgg>0Go2yQH+Y9cNUijDx?8jXzIq;k@nVS5G+nLRnIcs6*?jft?oHo1vGmoZ zL&AEYlVpGcNn+DdkBv!p*7@e{N4-ky#uQCugbH%kpf-02T#ef*(JE3wjL1Iu=bE$kkES80-KxRe*^{y`jR^*<&7&fMyNkSE=4;ey* z9v0Lu6m@|?H-M2cpK9^J>zCb)%rG*b1nx!-$Q6P*5v6$#0xL7`%UqQ6uwXL-!VKfV zfx#oh)fq)CM9Y5}B0oedL2ry1uXw+>2l zc(~__=G}}SXUMgxo!5tTJDY7>0hBPbEn`&2FGv#ml~M{$4=}>GrC3cE7<`*172dYZ z-OSD0J=|+;DypJ7iAL>k1zFc9( zL`-@FrJSjo#eQa4t!D3@9Bis(rFmb&h7!jr4c8Om!zYXUTRk5uc?KGHCl4gb@2^*o z;dxqY)*nyn+Bd1J)yJimAZ|>$tW8DqhpMr85>7yd!%L9bZClr6?W_B?#}~&gx8Zt= z@N{q@^X&tc8sm|oy%&`>P6MklJ|{;YJ2CQcUj$oO#?Xm*1)+{1RWKRN(^anMl=b~* z&*o{)H+b7T8H!mhWXdWeC}bH~V`Ljgz?*Ngg|W^p8vvNtz>PPH3K~@vx8Cp$RgRDf zczLC@$-kWiI)(8eAPVm`iO?+N-$vRWpqcu_yA|~A-a_bn$}H4{WaqY~e3(m68p*Ci z*0;ghpN&zsqC^=GU{botRvcnL6q3Z70$9orH88#xR{~RCf)Ys*C>{w|A;K9JykWfNcNZFw@BXQ^*g|Yv)XTX*m&&=Dz6gmvzSTo z@aqX(=y2H=~R=pEAkR zxCeju_pfsR+WNL}+n)qovk$-5+RFmKo-&|cMVLk{i61a=C?rBpyuM1z|f*~X8 zTQ3c|M67oYYnG*Xx@kJ)BU|jzde1zz>*H+!=a+6FB96x^mGREo1`Dn{bH`di5H078 z%0ss7y?vVIxlKOy0-~Hgi_FxTocrqT-R;H>BK-1`*Ny|@({bp=P0Y9Jo16R{%zfL| zyw*nCkg|}$*~PZLoR;Z$upj->i|0>on)2I+)4KY3@uf#vds^UtnTH6Vf^oSL5BA#Q z<9X5_LP^5(@V0N8{j=YC`ReUy+j>|m{XBNI`r#+r7eD))MVaB4q(Uy!Pk;4G|Lk|a zeOkuiG+*P8bv<+WP#@=83QCFG(jW8NKhD=g2QFJ1rY%SNNn4v6?9mr0kC&i{0uJ=N zYzx>?Xb%BcACAZDHk`fq%W2(-H}P=1{$Ufd>QyI_64^gv;$~a(^K9Z6PvPcO6>VGF=~}g ziA8h%m_zcNBy>sE@g1ajPt|0uU;_mI;Wv(&DJ-mja)RG>>Hi#e)SjH4=wM!I(qMNV z*$zq;1$dGH&seR)IbX3gFvL3pU{1MeZ5E*5-rUL@ETI|c;U%X+eTx*Lv{g-Kko8_f|%liW{ZY&qYDa;p<`T^&ES?Ek}{D+k>QaxCjYwGUu70 zsRtZWLbla>S^VQux3ES{d7|i%H;h}3GOkE`wh_Bns@(cdnH`L=L=*1w@R~<1j19qS z4FV8$TEr^aX#BAE?!op{aq!kHuMDVEa@O8c!OK)!6Ai^> zgLc%-VFqN$KAUP<<+4&7uak(5*f636q|zvls$KpHtVy7aK&~C<;sF`}_}D9vY<jK8gTy{YqVv_&lL42Eh)r50a>DSYGiUfsXt+N-tjhZLf93nU15(5yV?bfq z%y_3>XMUJ%%$VK+1e9bqYVWa`Jv?rb`qv5RD8WQ02$Fqj$seN`u=+An<{PD*sp&SBBhCmAQay6TLDWyEHF=tRJY z4HA7Mx>8zy3Ci#b?`Qqz&CgiLbW*qFHsp~YKHwyyJBao#pTArl+mGMA0$|?9+!j(k zt+$wpihb;23xm~|_dEs`aT#q|Q#I32S$do9b87z5n8U0CXMn_{qaj+be}S!xDtw5j zZj=;R@V5Xh66q|koeCBu^2W>#xTjKrLw|l`c?1}k_RQ)(Z305Io*GX10c=^T!l;;{CAaW|K z7-efHwmO_vWg@uK!=~^TM|yL1M+-SC4HogLT961U=Ntx9GPuPGODCW3*5*@CnE;=e zho8A6ZfTVP{6y4n)rlfL3v#Z23%@EfgDt-{DW4D_TJ+N&?|=S%*Ve^EV`=SPk1Tf& zvn#e&0&D;ZiMeUrIj0iaf>i`}vA9p|3wJyozIsXZ7}L+WL{4XJj)Y?E8;GGa8_GVoeV8d`eyA$284oZj zVp)1NgJMqE$N1w$t52#?4Dya!7XO3euq;Y3| zCn(03DH(i*yJBFW`WUfnsl+u^%XjI~bwTq*6Cd}P`Nte%x)`S>sB&LvTSyrSbA@nZ zz&c}}dq7i3T{4T!IelcHszTY$vDbAh=bzOpz}|BDWBPpm!^ad`?407b^!0J$+je!%v}iN@XPHw1^&v`F+Swl=@a(OmXORJ#d<(Ii92_y5A0OF@vlQ5mH zy4{0co+E)O=`K8}IREU`X+2?jDCjBNNG7y3Dfd$h z&SISBmQZS2%W#`7!3|%GA>NQmag)cL+)Q_zjU_>c;d=?|NKzE77plHlb#JQJVE>jk zjTr+QuJqK#O6w?#a_x6JhjVEwr%fc-uW!d+zRg&H__?isF&$|$ZpHBN_Ik&SH+v_3 zKp)U;HCr*YYTH)Tp0fP;diUa8hw*<)WfEG~eD{5e)*^Pd>&RiGD+#e1F`h zOoZRH+qT}Y+TR}cm;=(izxTuSJomN>5_Z^VJJxHseEa?_3uPD6^};TH*WQGAj$MHBPccHeR1u9r>4pum26eWm3PzE_rom&*-D{JRJKzT>&5*|sb*W7|F+ z`~3m$x$EVIOgvi56i{^S*UO51K3t?PvOnMe__*IMw@;v|rt3j=<*d;`!y5((it4s% z^H`QJv$w~9(~Iim;Sbazi>`az6+Qik#co`tblWQ4@afl^vb42{m9qzto~D*bQ8&ft zrCCMD`!`)a0Y)E>GApY>FdkSXbXLN`S$tw%epMmdaYv+0s8yRzrSVF9FP6`wmqpE z3Eh=HzBe8o_c4#EjT}8?CrVZ{8C(S!b5+_>z0SIZj}7M<4%ljGatKyUosV2`8aPU8 zWW3V_H4{6Y4wtZ@k+>xoYX#%jiArH zh;Mn`q}XYTkr0pXM*2Cw6CqKaLTZoTqmCK^aMeEUZyXq@W0_) zdRoP>c|jf%WsS#okkprW(VmL*l-Te z>U8I>n!lCDv?;Jvel#AZM4yq^(Rx4ep@eCJqYMAELnCL^Bu-MIQ0GyIiq`};HkWfx zVNQp2)0|k_dNb4Qy3sGxWz4znLrqKt*8{$dbv4nY%c9n;50AC?W$lYC&)4ngvMjdr z-n;e7WlLiWHPg#-QHh>IgT}mDcA-tpx^+!fjaVnsO1oM&8*`XSSIr+(gNo@rcKg1& ziT1AB+W*mSegU$LOM7{JY0)r~;$QskADdZ(gHh&mUqz47(ULh~fEtfo5P%ACZwg`< zz!1oRLg4O3QP3UzN_x%k544B*SQ&N{y=e)VbIxOgh-=UaPf5BQV;{$G*zu@*e)_yD z9n6`pUw_{B2Wmv>{POp@F1O2*0XztKdwX#NG{i(k4cpf1x?Y*&!B&X&G-aY)oeG52 zGoEVMWYuV8F6nYA054qWT#cBNF-@g5C;N8Q7$GRZx8f@@y)CcxnqXfP&FWCq1hJxU zqm0Dw@^WYwQK4Dr%Pa(D_~W%>&u(`yY)?KU8I|S9UcpdP)no*vIZzQ{np4b!e4nFi z^?7fK7s|INB^oCpgeXyoHu-f8bM(`1?DR9|nmtcyI%;xN@It9PuRG6MTy~nQ>R=&M zGM6-yDrA&cQ_mYen=0kj$jG>=k^X|1WlcUdm1Tc8iIh}LdHlPtFWnTi1%#K?LuinI z=E5f8!7@atGP4iZtBm+Dh>WJFrxTR20t+=Sbmj^lQ0l1qXT2CP?i^-0#izv;?ez@{@8$J%?O&Rh$h$>>*$@_}(nZCX z0=&MBh&kPdhtKHUu$g*SpOgC{O!TRpnpM?xS@%1Ml1E&np@a#=c{uVFJnl` zOkSr;wPDcLrzdu!+}4sMK$VIdg` z+|yK!*2$}_p<>pQUamM3;1JoYg_$lUs1{tOnb0~E%M?uo4*)Eh##5UpQswLQ^8NdF ztfKufp2qF6ZZndm&6Z|FoAcchiMW}2yuLl+Y@wPi-5dg?+wF0`ll9`O_BI=J@Rw!P zZitKH7-Kw=`P`1ffAiZf>(VU`xj%l}D*>v{>dm^0A#e9Ldba0h&lv(t7Cv2jH2-q@ z^!>NL`HMe%!?qRn78PDfXi*^h8G4+mmLW&J6Fj9O!(dbEdA}PcTGjRzHDeSFB*qSC zhLg5y=H4j?7bb6GKDupHJdzt0(jJfdx?W(_5@Ymkb50Ohw(T14VSN{|@87?^y}gr# zBF#s;^>@x}E~&f^jUjfrOTp5K!1{bJfi6jDr@y{{xa`rHyQaHQ?IBjTPyq2Q|iol`A%IFn+KEBkqou?k2ukPaRyt}qNee^IoE|P zZ8}(;0%kbRXmPcIy7hWQ;ds-k?W)00{za|wlrl@w*&6N?Z2d6|(OaW!l%uIlgztm7 z!Xcq>k7NR@XXB+>6QzaMDKjy?5x!=vyocPH3_1NjZDnifEf==4DE||&) zvHUH8jIS?0j$;Bn*Z0KmnyDTaGWuL|w`hJy=oIaT%mdw)-rseo8qIA!_HXF!Z0qfM zNx4&r4AJdcOjo<)(bR5Rzg-sGz4=wTFPMZ=mx}%>y)kC<>$;jPja(6d7V7)kPcN@W zDWd1~dPVMjHlNUdJ$B?Wp|&>(GP+bpGnm*M<28AIO;w(sekcZUjU<+4W(tqqRGdED z3w39e?{9aUZr@&CmUZbWcooke?FfGEOJ6|p zxLvMq_dA>$d`|6)i9)9~?eI9;hN8uo8^>{57VNpM>uWeEd`%vY$7NYW#4LXO5YSP0l$9{$! zM~EsS-I#l+k~}6;x9NLXO2oGQV7d@=SLK|e(4|{z3lh8QWr--?(^vpbqk#?EzG!Mu zpTg&ehuHN*i-n1ryti`|m)rDx{VtE=?z!@>muqYB*bh~m)Bo_(kH7x%3pG>KzAob! z?zyX#lOvtfK}N^qhF*{P%EwPolHG|C8dVAUL1``z-96J3hh#QZQ+(^)CjPXgW8-vMWn}GdRWWkHH2E70(V~W(>!9FJoIGnqS21s=9CMv{} z-2wMU#2nL)8DqS^@|RDyW$77zPq7FRGB(z-6VS_yQIdAj-&>=iiQ$W&uu@f%+x50C zy=Pswn5}(b|HfqcNFtSWljqx$Ej>?O{r>hoNmx)ZnLSv!TafMADK+(44B^?9$D965G%9MWlS|iZDxAZTVTFkg%kPO6C`aXC^?8&7aEgYWFdCvtk;$4*DU;o@ z_J)D!Oeu2B7#8Bssxl{-d&UH89MihJzTKPqF^^AAx8MA7At;xd>-O|SIz8R52p>LQ z*W0C+)z&RP6W!m@Ae(74{m1VXF3i%j{qVe*N@MTl^d5<~ef@qvP<`Hycy7E$pPtrm zN{r6-8Am2QKmGjraHl5b7oRS@GnYXo3q8cY{U?9_|Mc(w90)9M^I26ho0<_$_eT^} z1P!PFaJcy*h`6v%jwFx@D96HA+ACo*vg5;y4k=4Md1Yg7`1t!06|x@?^M`14QOdNDHu<7Mqx$uqs~qHJ_WdxA-B9aYGj zc{UP1;d&=Re$q0^+L`AN3 z_lyTiz6!DzVR|1mSN8nBN))3Rgi17#CiKoKgde@+Mfgj6^y)wsF%n^flRcRMX!)pB zriT39nK&1tc+yUSQC0~Q3G#Vz&?~wkENduE0VbYRA2L!h0^%+4%VY@Q%4%Xv>7rVV zJeXChI2khhi1@c`HcmQl&1GYOSVa<3Zv6kj8WW(Bm^S!+s&aBt326v%{ly+n*DF+e zi#F9|4#togucPP&JH(?A)_O8bJ;^)zcs%e?BF6g<)r{w5p`g0!^8RN_6>9HDQ>Xh= z|0GE+RMpF7mUZ?%j>mms!2w9Ya(H>YzrNkeGSHf`v+;6&sPqsYd&KPfanMavij6ks zG2j2es#^O~vcE*d5?aY6;YYNXJ`zhfbY=F`t%s^+!UcwF6Y&|h>vLI^$+{?g?cZIU z?@&prYPas0c03-({eJfk(UM>lCPZ2(WxaQ*eCr$2nVrv?jgFjg}nVAf7o=qFoV?}Jun;Xl9b zzj#`ar-1%R{sZDn>fX)dx%HpF?@38*zyJ33>(AG0LgOeUps|?!xBtaI{J;FWKO1rI zWuitYgV=9fQ8%ku*DO(x3L!A)V!fLJn|MQ4Bh#F&b`HyVd42O}&bm-b?&bSI+f=EM z#OW-x4!=v&W6bZbug_0UH3h4PJ*}BpPDRQTsJ*Mk_Wd4E%Bwv;KYe@o9{EIH-d?WT zwk(^rm`NY%>nd6*T4!pq@6$|{ZW*=^YdI5`jc~w5HPDg5DP}tim37yw#ZmLzd5E(f zr-&HM0B!CkpQ`%4oYK%Lh@gmfW!}pa$-OX#qDXM!IlO(4JX28|KuT~uB|LDMdTJ{Q zQ6bx>)ZDmM_CK^VgI;}Hy3(jBW>}LA#K^Qwe`^>e*Q`vEXH5TU7q`Aw8IwAZeV}fGA91OEYb=l(1~L$az>wod{ZYf;|a> zC6f&wjBsqG)baV3(LaJxw5^qu3;mwr((9GTm?u~-N>UHa7I(`~^G{OR3u=AqVhmy50@ z9VgxW@!p!mz>nMQS&P`UAF#xqk=;Wdne_6B;dGZA0z-#`rLR#*$(RGo+%fKt;{oAr zaxTc&w!WE=)w``LfrzC=Y@Bc=@pN7AZjZ-t><0v)8K4YLYq&p-1FGTGR>h@z3=gMc zTbnTj6C9^WOP>ahzSs;IGdc}Pxxw%IV_P=>eqg#o#>{foc*&Z75qz1oCR`!alauyn=hr zo-GYtXGG5@_;w7&Yo>0ZOhG4Sn1(+sn-}h1640aYfBxzihpAw+140=F6qWxj2}3F~ zTxSoB3`C~A80b(4&1jSE3usKsOq>3JlF&7T9>2_(4JJD=B7_3ZeDs)n!6J_9WWm`k z%2tR{(3fYEg5f?3-q+H^&N+&K6Kz(xWTu>|4fsmBEoJ)H-fywT0SD;J(HB7vs^uuI zvniE32a^KW!&ld)^e=%tx^)qnfio*Z5lJ#GG*>WAobGi{yQYd%l?)RcSv!U=)&oD< zR57j)j+P(W)};>9bCx;$>oUj#qQR>us*~aIY0)EKL`EFLL@^iFl%ws~m|+)NrOp9m zd&%)d5yYe@2PIY~m0nt%PvvT=T)GLNVb(U_SPPP4Q~R2m(*?Plc=ZpQM&=XKw2;~o zV9Acmgt7_K5NHrbE6#FLGHqjuYNinwfGre6{7ze?Ohfc>?k0y|8vU z-cR0RS=L-Md--A%ZC}b*sRq`WYVXVa@i4P>S^x82y=Lyk7rm~ZvH9khUCrA}kVce< zgnO~W!7@IXJ6Jk1LYYDMC>rHPVD9PMKOhy>Dyk@#(|(VKd}+OBf&=kNhP}+B^xWeo0rR9V-7>j zsE~eyKhI&brMsa`U0GidL8A&GKU=9lXbCKyZ76p7&T(6RdbZ%b$wWG5Ghlk}*=uL5 zh!s|sUM+UuE@U;;eJUa#4OSiTv&_?+96PE$aEl8cr2Q(h!n%E~^pXWXz(woux5hDz zi^L<^fp`uOIRT6$WggRo9bn`|jE;>KFp%n&JiPIwImgGHqHT~i-~oa+I^z(BobfLN zZ7kX|iPg9dc8s|u3FnGM4N;WR!*71(dFl`+OzZMKAXBGHho!p1lW4M zkHm)(`Wim)gfKH}ACLRv@wUG{9uKa*Nf%i}fTCCH=`H{IcykX)D^?#IddJ=zTNmom z-tKQ>j`m*O9gq71AGg}-3^zfy5`N_2{`Po;gwOGIzmwR)W`Po2%#6O36t4Pr1QlBC z9zQ48RreO+p~(%3?Z&)?5G#|Q5^==oq#)-=raC9MDDjNx^t*D?Cl7=Wk-mTYU4xv+ zb+K*9{wva#ZrAHZ+g@pk`jK>^na=?i479ICccz>7e5c&*P@JJt+NqW`Ips@6Pe5-I z9#A3_vMSxF=tN+kP#RO7(yz>7IfrT`{&WbaIX%F$>z5co@K^kA4TaTo;TP4J{!l@Y z-(I-CA`wyy#VJg-8E0dKqm`@Lrj+uOzt7^5+E7Kud}>oER_P2sZM+yV{1od>d>T5; z6+J*5S*W{yWW~_ip%&u^sY(LR{Tpb&GB}eUGZ?%XhmJQJQ=J7C~X6AWe6nvS~P8K7Ykq@A>sdGOwl` zMyVbnn9M2sjNY$$_+va;n>nI=Q!}Wtj(M~(oyMHYA{%ClXpa9?ah1g*dhf{ifByCd zZJ8xfiO(ZQU@0m>ulKU~e!lgdooe@3WAQev_3OHrNmo@c_!$EHWjsocLiGkbIUbJ} z&j+o|mgSN!9Mg~K2R5Th?|lVSxmaf6wwQ`fH8n`5-rl}7&P13=A?l(^eiKKgQx%c| zuee;gY4aI4B9U*diC(venF(lfSjYH%PkulK^*M*x+WTsnWbnh`K9mceN@6s*nH=&6 zB{7A&k>e4HrzdnB#8FwY{L-4}X)MBwo9!!1QV5o70c?~ek0gPD>6m}d7s2jz!jTS3 zbq9_Ks$Wen>ADO+ZW5~5@DWa+&fqW8kC)ds%qzp3c-00wLJk>aFsH1^tS!Aa_uqP9aF7Nx}vWh3osds&OyPI`Hm+NI! zeQ#6sX3W^AU4}Dgpd}0%N`3-$57Th9QJxFVbBV1^med6117%k+Pc@v55STD&3SNN5S#l8J z05w##O^ReWnXATaaco$fd1W%}QVyVWr)H^!)9SSKE+p4Z8`lYHmm^oa0oB~!Hpqh?S&eon)fET|pw@@{xgDucg zl;DgAnz7$nsmk1&=EqgG6>5GlUYLj`DmkTw0&A6o58hRjBmudgfoP7bvZhm$BtaSz zJGv*xz>moBi3CRYUEcIEm*Zx^%ap3Dd}OE<=U6sXO)>JMbOhlU{>F@EY*2u|XwzF? zHWi)frzM_hy)J8C5+FGonhxuYr9A5{q@1La;e%^g*ou|rA}rdW4ArnPrR0SB&&XS0Ub0{>k zez~mg>W9~$QNE`9F?ff4Oj}f&p6=Y*d%gifwB||O1$=b0XO%^NMGJ5EX>{C3c4h|4 z(u#B#Vxz?#U=GbNS>c_?DuJBsGezl?B#psLgrE)xZL-H1@06a`~{7VUF6WwS5LfJglgr9}l1s zJ1l=;NY*;#DJ@5IE;7~mxaqdTA+vdDhM{!ba(t|XyO}aq_6bmfll3@%J}7aO)1vNd zFa!&nKLzfTX(}mGY!l3x=af(9hZXAJs?{;2b*&|<7S2{_Rd87yAfM{pIM>It?&WlM zDL1z{`80h_n%7ZhdpexbwM=Uyzn3zWh$e0`c{Xa=eGayYnFp!I#Bbtb;1BFaWP3nw z;+#h{LoG%$FDZRBmjS-?OedEaduwe6PblULw}>N;F3du>K3!WS-`o1RtD)$ApJIL- z`JkDD6L1xMdwZMvy*?Mgo@UW@>zBrlT2pjHh<9rbMcSXo*t*_$Y_~QaKi8y;rYhU^ zDZiZ3^m4t3VyndC{+RCE7fHxLw&^~?Ag2gV;R^$ZiT9o0L-9nW(ppPQ zMTLp(n6C9$c$PcW;zH=Hc@TDi^oek}7*HSH10=1f>UumLNN$hA=bWhERdnAUaa%m& zT<_{wV(iUM?4my5Fuq(sT0$vb4vmVfzF*Jmc0#Rq{{+_v@76bXaWbh!9@TM?$Gj~{=UrJrkCe^S8c zYE1q#x~g7p_%PiT))w9#`&$lW4K@AM=c`nD^V9dooRM-mf9jW+0Ze=Q{m*}?uC9(= zD>WD;j^VKc!>9~;PaC`_@DDpSPnShA8Qb55{v(`#%DUXNQY;Lg)qJ{_bz?GQz^5D% z)5m@X(R%3@AYv--c)~vB%z!atUY1L#h0DL9gd#qj1i#w;Md=Z*0CSS1DW-P71X;Q_ z7xM6xyhyFtDO0?92YID=@M8M-DUgeR{zfNto_C7o8jlPj)G>`3Q6hiw!zwq9=a z%9Q<=&y{z>EO3F3W5A`6qVb$gvx2bzApVShD9jIJe7(OcmyqqGY)fp7rQDU zBl+Jcd7HLtaXmTeC2M4<3uIQw4+PApl$vHcrG?K2wk!NAy3iyJQ z0Btn-H8vkIfCI{jQqQWGmsLJ{zh#VAB`;G5o-uSLI&J-#u&@tW1zz!2$X~}%f)g0G z&zghhtq`G+9ZKC7p)Km8l&uHSg`5b5uu|k?8DpKtUv|#jcZ4-#Dk!W?iU{AN{38m? znK(qKeBe$b@ub=X^s>zmR{Fm4mKmoRqa#9FBitF}E}W{5c$zUlS#L~IW`XjPXhYTq zZzanZmyjtC>f=KY8<1w&6AFz4U&WT56~F*)lHo_%64cBvZy>3cgy2BWjwRHxtX+H1 zM*^o399q;g5AOrz7i(4P3s#Xyt$B>(5XC)Ty5jRTYja{)p!yic^u;Z7s@s0}2g}ne zax%BNWiC3&`%@9vKy^Wr2ZwT5V}?ny-W^Q1e;!XN-96?T}yR?3CqxtX^@Hqe}k{~1CE$Znd zwcig|cC@Br4szy5=BSyOvpzGyX=IiaU`}!eczN`naNfFNGAqI^zbqHIBFrOtQEE!S zvl3Pn^d+)}bv}KT)ap$6*_Aj4*Vimxz9k_+dVjF&;N_l93$zDPV%WTVg7$#sdG6F? zg$k>|DOV+n{XoV9K8(!EwTg=5C%D7Hx(>9!beh5$MM>1bMe;*AI(4}D6n~X3hZ7%_ zx@|SfxIEi5YJhth#%BV`H_^O_xFX&lvIv|C--YZdHqTn-bph`V1dgCuWjh zZgb$1GLZ;WPOvK@F$y_e50B~Q#EXH&oP9U*cKb5wUVf^uJHvQegmho!8yjjiQ51I zIVCatkwC0>)FsT!31rm^Go&)Uw=(-iMXaHrK&(4IHBzKjDmQEF$x@GzD~|gT$**%= za1cD_6_ir9;u})qF!a6gn%rvq=;u@~1>ytjw0xmzBF1!nFrJ{*s;VyTX(m_p-=(-X zxd7Z*syaMXa%WS;c~xAorw%c5sZY1AYWID@m?8O%K2za`=YY7?$|4h+cwa z4_TBG;Hqo%fY&kZ2wdxv_#$Fl<0RTbkXhLlkPnS2)GE17+;Rp&MB3}3iZag@VYaf0 zZcaWHE#CoaSj*pnS$3I_BZkYwQp{CK!HjE1vdL_#)e%r~4|j(U7oR+e5))o?>5EfK z{ShimM@Q488gFLw*c10dP0s|#w1>B`w>cn_5|#M;`D&HCxnqHFQGNgZvri&kzy9s7 zOo|?0Y12;{5Hfd$l(dsuOf^5T@B6{#7?E){;b-{$_|}|K$K#H@F`LM`+V<%pQfXGj zZmgxM|zZym;gF>Pu+TNa?F7t>ic6~*Hwz8;SONFnOZFQGK>{$yfa9c zB3h#lsNM48O>bI*Sy81(p64M;bj-Wq=||gornQ{lMSn-upIEcpLo{`67;WnWZ(T*% zF`q7)ZFjyt6PN-%&zc2+{hUsVDGoI$GLIOV(Gz|vwj)WM#dxH#Kkb{{-K0&b4$7XR zf_YJBJP2`8!^55CWuYL2x7Dpdl7@$=0u%gD7;NOXtFcjNVmbHFtBj-VPa-Psyc2ce zK|nK2$A_^X)wOiLoODk32kps9li9l$XO9i2U^P)ybey`jD7dKNHkD3Xs2uVhfU#;s z5AKy#pEfZK)menGRqdd#P4*dw$0m{H&w4rrPWSxZ-eNvIU(49S$GBs`_r6>%Hx+bo zi=8O#)9s6OLw5Fhe??3p>4VJb`1!k3>N0-y<#)NaHAh0eh)_B5{p~eb9M-$8>lJ72 z<1z2Y8!%3_uKs{q?EQ$p{pnSk21iL6Qq$+>i?HE~w z!OWgVT4N)ks8(8WpgPZTDsZtF z*weuX_^3NuYd&hmbWZye z9M!5M`(Ujyr=fLqX3AVa`*0lS!_!7uFoU0?iWY?}Y;mp#sly(Y(Eho@+0QBhOtDkz z8l-Z|svg+rb9yD?ykm8P4|7^cqTR(z@$5q*i^Y3z*a~Sk+*Hh{OmW)P4C~XvfTTh; zAjuOcUo&kTPucVE_ZscS)j#vknnw%Vja%t_Yhk;_=|EF(L%tT{bSa+73!Io5#_8Zk zi*CYr@J{}bNETR(5%-io; z2yF7Cn}G*KL=Z+CM~DIrpu>?24Xeynag$1bNT26y<9rAjJ#nci>}dz_dBm$^{%FqIr6$Nv z{;zBA__?+B*SFoh3H$5Y@S{kbr>QQqD;JM*}_?`s%4Dlqp1dr}GeY&-{EX)yDtfCu%tr|jOv~pJ0(=||$2C=WGESN!m zq#!o`Wzx+3@6ZI+RZ z0P7by7Q#1^3<^ZeE^Xh3CbM^0!|AFfy~LlzHa^+>G}-*{Sf8M@Rno;H6f4jCIVQLy%?eekNkLImo%la27UlF1>}G2``j|6(n6+1~;;z*F zXf^VRs>8Hbis=P8a6$f52UMA%Qei&dp9wcpG~(Xnmo08J1faO6;&gUbC8WcDizo|R zpKfZoioo1=dWVwYj@t$lInYZsIr*q%B1UJD@*pGb&#peH;ZUp!Oj}AJZWi=Yg%NvuI)Hao|BF>1C}cH}EJ)Ju^sXta^lur|SN~F&l$LJX1$y@@2wo zN#~e!+Q5O2lFh4WFYna`Y$RAFITC%TW}KM`O#a9#K1*d$_rXUGhhr~ofHWLWCYCdh zVxUp z0ZV=p=*%#s29z9)=gn*(YrpJskN1>fzt}};{%Z+>+}8fs-{^3JCtDJby#2vK)8(RvTC`}f1f!A0iNSHx`>HjJ-$AMnT?o8!SOFNqxn-6 z3i7`9Rnx}bi#wt*TPG-w88YO{6Z4r&pFik5Af6DpX4{b+*z(gawnWt2s#0hxfOYdp z)(YWkRgUBKFsj7bxa+dq$uaGpXRPEX%qsI3}O2%Vq7RGTndr zE>U)7@81152~>Xn^Isu6bz4`vv5~Ir`TB{ZU8LEJni7?*T(|yoU3=0tfAM)sp_7Nl z-~Ra3bB&tVKl$A+&3bF`_SnC^IO<&uy%3idY`<-ONx&t?z42*=1!ftuiQQt#Mgb zOJd2Kal0%q{M?WEdVe6RRB5-{1^nCBx1&_g?$bJ9_A#X8glh3)HXMOupftxsml{(- zn}=iX+vYPvE;9d6k|;DvI8nAOWg}2>c|>UzlWL(6mG^pu{%Y5#%Q>tS)U3J^=Mcxq zDqX=~Bq96ssw5ze{EodF;H=(CIa|c{ilpgF>BX-vY>E{EX$j78VmLrhTyiSN$&4m1 zrOuC1f|7Z2wo{d|S_1b)0GQxJszSaFR8NDlyUHn;6PG2N2!p5SIUd0;$v7^Vb^&15I+gXzPiwwAsIu6H^`=ElY&pWawf8^Wy#}vQ-bHg~ z+O-iM7P`JlCXd!lL|Zr10b=>%9L-gUFo>>W9xRx+8c;n0i$JEEfM@xrS~eGQgorL? zz1#J&UM`6~DoNa`0(XL?8`~VEEMSe;h2FV7&ta*WneBp6hF#S-icA%W0gux;M^;Bj zR;*QSe@=%3e8FLiWqyrG7N&|hC#s6iV`{WjX~jWgPnWdhF-InSMMkQOo=?ncbd;$yjbSvXfiObe|r)@Is6Q&;0?BIl{ ziQf=?%(O8qgm>A4xA_glF?fst=4{SETZq7|#`7tuo5a>+2}!ny*>h%{no8 z^_AWtUNgc}E2D&U)hLu|`xZsc|++)i6!Vj$VGTF1*SY~CDZVN6f6!_WT>n|0kR$5)|x)U zYAm!!upe3hY7$Q=NV&6uvQH%N9P51&06uPD8AsA=u{I6&0n5E=sI%aytEzgB5IUED zh8A>P$OYf>jH-A%UT_e19CP{VUJ&S=KHjr+yP$ImdjqX2t42O+duB+dn_ES3O|e^E z;3T&l3C@KWu%%b09`m%5!O50!c`??`J()AStZG=Yj8seRen)DX*8iYXpEgq+)w^D7l<-k(O~Cv(cm`5WwbMz@*k*R z4a+j>gPvXU0_A!7MN`xIZN6f$jTzj_#vCTdO0O_VT>W$onj}%>%M%@;T#HO>8g2pq z(n^^<&K<$C(0Gp-KeCpV`sB^)!@rxAy$k`giP{y5m)02=DeW12}1J&x8p$KZI0 z90c+u4+F#8DYm(6ozhbF{$P0nlP*|8PgrSB+`VXQT@<8G50>IspMFiyo_i*hV@_u8 zWC+bFL1dx^l5nRSKs3L`53=9p)!qjXK?h)_MudYB9K;7C(k(?HtW1>JL4Jc-D31a6 zaQceP;19BQ#`AE03=|_;u$ZUe3S}Zz+2TA8l~C0Gj&-ZYY~5-AY(d$!EHZ}Ak&i3B z-@n~1pPM%`{o(WV`^ygE+q%NQ!i)W6Fb&HNzlCA*%_%SsXA4`VCB*I6e1&d0K zh@Kxq$0=!zrEDrE>uA=~Q3!D+Y}^KLK?I6~&dO$nSqwRxw{+5qq m?nL+a$!vm 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 FV1gpbLQDVv literal 311929 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

    lH`R)jaQ< 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�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�Ph#0&u>;kzb| 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 Date: Tue, 6 Jul 2021 19:35:27 +0900 Subject: [PATCH 020/118] Updates to ko_kr.json by red1854th (#1742) --- .../resources/assets/create/lang/ko_kr.json | 3380 +++++++++-------- 1 file changed, 1850 insertions(+), 1530 deletions(-) diff --git a/src/main/resources/assets/create/lang/ko_kr.json b/src/main/resources/assets/create/lang/ko_kr.json index 3e8843be4..ae7f495e5 100644 --- a/src/main/resources/assets/create/lang/ko_kr.json +++ b/src/main/resources/assets/create/lang/ko_kr.json @@ -1,59 +1,93 @@ { - "_": "->------------------------] Game Elements [------------------------<-", - "block.create.andesite_bricks": "안산안 벽돌", - "block.create.layered_andesite": "층이 있는 안산암", + "_": "->---------------------------] 게임 요소 [---------------------------<-", + + "block.create.acacia_window": "아카시아나무 판자 창문", + "block.create.acacia_window_pane": "아카시아나무 판자 창문판", + "block.create.adjustable_chain_gearshift": "연쇄 변속기", + "block.create.adjustable_crate": "조절식 상자", + "block.create.adjustable_pulse_repeater": "조절식 순간작동 중계기", + "block.create.adjustable_repeater": "조절식 중계기", + "block.create.analog_lever": "조절식 레버", + "block.create.andesite_belt_funnel": "안산암 벨트 퍼널", "block.create.andesite_bricks": "안산암 벽돌", "block.create.andesite_bricks_slab": "안산암 벽돌 반 블록", "block.create.andesite_bricks_stairs": "안산암 벽돌 계단", "block.create.andesite_bricks_wall": "안산암 벽돌 담장", + "block.create.andesite_casing": "안산암 틀", "block.create.andesite_cobblestone": "안산암 조약돌", "block.create.andesite_cobblestone_slab": "안산암 조약돌 반 블록", "block.create.andesite_cobblestone_stairs": "안산암 조약돌 계단", "block.create.andesite_cobblestone_wall": "안산암 조약돌 담장", + "block.create.andesite_encased_shaft": "안산암 틀을 씌운 축", + "block.create.andesite_funnel": "안산암 퍼널", "block.create.andesite_pillar": "안산암 기둥", - "block.create.fancy_andesite_bricks": "장식된 안산암 벽돌", - "block.create.fancy_andesite_bricks_slab": "장식된 안산암 벽돌 반 블록", - "block.create.fancy_andesite_bricks_stairs": "장식된 안산암 벽돌 계단", - "block.create.fancy_andesite_bricks_wall": "장식된 안산암 벽돌 담장", - "block.create.mossy_andesite": "이끼 낀 안산암", - "block.create.overgrown_andesite": "이끼로 뒤덮힌 안산암", - "block.create.paved_andesite": "포장된 안산암", - "block.create.paved_andesite_slab": "포장된 안산암 반 블록", - "block.create.paved_andesite_stairs": "포장된 안산암 계단", - "block.create.paved_andesite_wall": "포장된 안산암 담장", - - "block.create.dark_scoria": "짙은 스코리아", - "block.create.polished_dark_scoria": "윤나는 짙은 스코리아", - "block.create.dark_scoria_tiles": "짙은 스코리아 타일", - "block.create.dark_scoria_tiles_stairs": "짙은 스코리아 타일 계단", - "block.create.dark_scoria_tiles_slab": "짙은 스코리아 타일 반 블록", - "block.create.dark_scoria_bricks": "짙은 스코리아 벽돌", - "block.create.dark_scoria_bricks_stairs": "짙은 스코리아 벽돌 계단", - "block.create.dark_scoria_bricks_slab": "짙은 스코리아 벽돌 반 블록", - "block.create.dark_scoria_bricks_wall": "짙은 스코리아 벽돌 담장", + "block.create.andesite_tunnel": "안산암 터널", + "block.create.basin": "대야", + "block.create.belt": "벨트", + "block.create.birch_window": "자작나무 판자 창문", + "block.create.birch_window_pane": "자작나무 판자 창문판", + "block.create.black_sail": "검은색 캔버스", + "block.create.black_seat": "검은색 좌석", + "block.create.black_valve_handle": "검은색 밸브 손잡이", + "block.create.blaze_burner": "블레이즈 가열기", + "block.create.blue_sail": "파란색 캔버스", + "block.create.blue_seat": "파란색 좌석", + "block.create.blue_valve_handle": "파란색 밸브 손잡이", + "block.create.brass_belt_funnel": "황동 벨트 퍼널", + "block.create.brass_block": "황동 블록", + "block.create.brass_casing": "황동 틀", + "block.create.brass_encased_shaft": "황동 틀을 씌운 축", + "block.create.brass_funnel": "황동 퍼널", + "block.create.brass_tunnel": "황동 터널", + "block.create.brown_sail": "갈색 캔버스", + "block.create.brown_seat": "갈색 좌석", + "block.create.brown_valve_handle": "갈색 밸브 손잡이", + "block.create.cart_assembler": "수레 부착기", "block.create.chiseled_dark_scoria": "조각된 짙은 스코리아", + "block.create.chiseled_dolomite": "조각된 백운암", + "block.create.chiseled_gabbro": "조각된 반려암", + "block.create.chiseled_limestone": "조각된 석회암", + "block.create.chiseled_scoria": "조각된 스코리아", + "block.create.chiseled_weathered_limestone": "조각된 풍화된 석회암", + "block.create.chocolate": "초콜릿", + "block.create.chute": "도관", + "block.create.clockwork_bearing": "시계 회전장치", + "block.create.clutch": "단절기", + "block.create.cogwheel": "톱니바퀴", + "block.create.content_observer": "아이템 감지기", + "block.create.controller_rail": "제어 레일", + "block.create.copper_block": "구리 블록", + "block.create.copper_casing": "구리 틀", + "block.create.copper_ore": "구리 광석", + "block.create.copper_shingles": "구리 널판", + "block.create.copper_tiles": "구리 타일", + "block.create.copper_valve_handle": "구리 밸브 손잡이", + "block.create.creative_crate": "크리에이티브 상자", + "block.create.creative_fluid_tank": "크리에이티브 액체 탱크", + "block.create.creative_motor": "크리에이티브 모터", + "block.create.crimson_window": "진홍빛 판자 창문", + "block.create.crimson_window_pane": "진홍빛 판자 창문판", + "block.create.crushing_wheel": "분쇄용 바퀴", + "block.create.crushing_wheel_controller": "분쇄용 바퀴 제어기", + "block.create.cuckoo_clock": "뻐꾸기시계", + "block.create.cyan_sail": "청록색 캔버스", + "block.create.cyan_seat": "청록색 좌석", + "block.create.cyan_valve_handle": "청록색 밸브 손잡이", + "block.create.dark_oak_window": "짙은 참나무 판자 창문", + "block.create.dark_oak_window_pane": "짙은 참나무 판자 창문판", + "block.create.dark_scoria": "짙은 스코리아", + "block.create.dark_scoria_bricks": "짙은 스코리아 벽돌", + "block.create.dark_scoria_bricks_slab": "짙은 스코리아 벽돌 반 블록", + "block.create.dark_scoria_bricks_stairs": "짙은 스코리아 벽돌 계단", + "block.create.dark_scoria_bricks_wall": "짙은 스코리아 벽돌 담장", "block.create.dark_scoria_cobblestone": "짙은 스코리아 조약돌", "block.create.dark_scoria_cobblestone_slab": "짙은 스코리아 조약돌 반 블록", "block.create.dark_scoria_cobblestone_stairs": "짙은 스코리아 조약돌 계단", "block.create.dark_scoria_cobblestone_wall": "짙은 스코리아 조약돌 담장", - "block.create.fancy_dark_scoria_bricks": "장식된 짙은 스코리아 벽돌", - "block.create.fancy_dark_scoria_bricks_slab": "장식된 짙은 스코리아 벽돌 반 블록", - "block.create.fancy_dark_scoria_bricks_stairs": "장식된 짙은 스코리아 벽돌 계단", - "block.create.fancy_dark_scoria_bricks_wall": "장식된 짙은 스코리아 벽돌 담장", - "block.create.layered_dark_scoria": "층이 있는 짙은 스코리아", - "block.create.mossy_dark_scoria": "이끼 낀 짙은 스코리아", - "block.create.overgrown_dark_scoria": "이끼가 뒤덮힌 짙은 스코리아", - "block.create.paved_dark_scoria": "포장된 짙은 스코리아", - "block.create.paved_dark_scoria_slab": "포장된 스코리아 반 블록", - "block.create.paved_dark_scoria_stairs": "포장된 짙은 스코리 계단", - "block.create.paved_dark_scoria_wall": "포장된 짙은 스코리아 담장", - "block.create.polished_dark_scoria": "윤나는 짙은 스코리아", - "block.create.polished_dark_scoria_slab": "윤나는 짙은 스코리아 반 블록", - "block.create.polished_dark_scoria_stairs": "윤나는 짙은 스코리아 계단", - "block.create.polished_dark_scoria_wall": "윤나는 짙은 스코리아 담장", "block.create.dark_scoria_pillar": "짙은 스코리아 기둥", - + "block.create.deployer": "전개장치", + "block.create.depot": "아이템 거치대", "block.create.diorite_bricks": "섬록암 벽돌", "block.create.diorite_bricks_slab": "섬록암 벽돌 반 블록", "block.create.diorite_bricks_stairs": "섬록암 벽돌 계단", @@ -63,1743 +97,2029 @@ "block.create.diorite_cobblestone_stairs": "섬록암 조약돌 계단", "block.create.diorite_cobblestone_wall": "섬록암 조약돌 담장", "block.create.diorite_pillar": "섬록암 기둥", - "block.create.fancy_diorite_bricks": "장식된 섬록암 벽돌", - "block.create.fancy_diorite_bricks_slab": "장식된 섬록암 벽돌 반 블록", - "block.create.fancy_diorite_bricks_stairs": "장식된 섬록암 벽돌 계단", - "block.create.fancy_diorite_bricks_wall": "장식된 섬록암 벽돌 담장", - "block.create.layered_diorite": "층이 있는 섬록암", - "block.create.mossy_diorite": "이끼 낀 섬록암", - "block.create.overgrown_diorite": "이끼로 뒤덮힌 섬록암", - "block.create.paved_diorite": "포장된 섬록암", - "block.create.paved_diorite_slab": "포장된 섬록암 반 블록", - "block.create.paved_diorite_stairs": "포장된 섬록암 계단", - "block.create.paved_diorite_wall": "포장된 섬록암 담장", - - "block.create.dolomite_pillar": "백운암 기둥", "block.create.dolomite": "백운암", - "block.create.dolomite_stairs": "백운암 계단", - "block.create.dolomite_wall": "백운암 담장", - "block.create.dolomite_slab": "백운암 반 블록", "block.create.dolomite_bricks": "백운암 벽돌", - "block.create.dolomite_bricks_wall": "백운암 벽돌 담장", - "block.create.dolomite_bricks_stairs": "백운암 벽돌 계단", "block.create.dolomite_bricks_slab": "백운암 벽돌 반 블록", - "block.create.polished_dolomite": "윤나는 백운암", - "block.create.layered_dolomite": "층이 있는 백운암", + "block.create.dolomite_bricks_stairs": "백운암 벽돌 계단", + "block.create.dolomite_bricks_wall": "백운암 벽돌 담장", "block.create.dolomite_cobblestone": "백운암 조약돌", "block.create.dolomite_cobblestone_slab": "백운암 조약돌 반 블록", "block.create.dolomite_cobblestone_stairs": "백운암 조약돌 계단", "block.create.dolomite_cobblestone_wall": "백운암 조약돌 담장", - "block.create.fancy_dolomite_bricks": "장식된 백운암 벽돌", - "block.create.fancy_dolomite_bricks_slab": "장식된 백운암 벽돌 반 블록", - "block.create.fancy_dolomite_bricks_stairs": "장식된 백운암 벽돌 계단", - "block.create.fancy_dolomite_bricks_wall": "장식된 백운암 벽돌 담장", - "block.create.paved_dolomite": "포장된 백운암", - "block.create.paved_dolomite_slab": "포장된 백운암 반 블록", - "block.create.paved_dolomite_stairs": "포장된 백운암 계단", - "block.create.paved_dolomite_wall": "포장된 백운암 담장", - "block.create.polished_dolomite_slab": "윤나는 백운암 반 블록", - "block.create.polished_dolomite_stairs": "윤나는 백운암 계단", - "block.create.polished_dolomite_wall": "윤나는 백운암 담장", - "block.create.chiseled_dolomite": "조각된 백운암", - "block.create.mossy_dolomite": "이끼낀 백운암", - "block.create.overgrown_dolomite": "이끼로 뒤덮힌 백운암", "block.create.dolomite_pillar": "백운암 기둥", - + "block.create.encased_chain_drive": "연쇄 전달기", + "block.create.encased_fan": "공업용 선풍기", + "block.create.encased_fluid_pipe": "틀을 씌운 액체관", + "block.create.fancy_andesite_bricks": "복잡한 안산암 벽돌", + "block.create.fancy_andesite_bricks_slab": "복잡한 안산암 벽돌 반 블록", + "block.create.fancy_andesite_bricks_stairs": "복잡한 안산암 벽돌 계단", + "block.create.fancy_andesite_bricks_wall": "복잡한 안산암 벽돌 담장", + "block.create.fancy_dark_scoria_bricks": "복잡한 짙은 스코리아 벽돌", + "block.create.fancy_dark_scoria_bricks_slab": "복잡한 짙은 스코리아 벽돌 반 블록", + "block.create.fancy_dark_scoria_bricks_stairs": "복잡한 짙은 스코리아 벽돌 계단", + "block.create.fancy_dark_scoria_bricks_wall": "복잡한 짙은 스코리아 벽돌 담장", + "block.create.fancy_diorite_bricks": "복잡한 섬록암 벽돌", + "block.create.fancy_diorite_bricks_slab": "복잡한 섬록암 벽돌 반 블록", + "block.create.fancy_diorite_bricks_stairs": "복잡한 섬록암 벽돌 계단", + "block.create.fancy_diorite_bricks_wall": "복잡한 섬록암 벽돌 담장", + "block.create.fancy_dolomite_bricks": "복잡한 백운암 벽돌", + "block.create.fancy_dolomite_bricks_slab": "복잡한 백운암 벽돌 반 블록", + "block.create.fancy_dolomite_bricks_stairs": "복잡한 백운암 벽돌 계단", + "block.create.fancy_dolomite_bricks_wall": "복잡한 백운암 벽돌 담장", + "block.create.fancy_gabbro_bricks": "복잡한 반려암 벽돌", + "block.create.fancy_gabbro_bricks_slab": "복잡한 반려암 벽돌 반 블록", + "block.create.fancy_gabbro_bricks_stairs": "복잡한 반려암 벽돌 계단", + "block.create.fancy_gabbro_bricks_wall": "복잡한 반려암 벽돌 담장", + "block.create.fancy_granite_bricks": "복잡한 화강암 벽돌", + "block.create.fancy_granite_bricks_slab": "복잡한 화강암 벽돌 반 블록", + "block.create.fancy_granite_bricks_stairs": "복잡한 화강암 벽돌 계단", + "block.create.fancy_granite_bricks_wall": "복잡한 화강암 벽돌 담장", + "block.create.fancy_limestone_bricks": "복잡한 석회암 벽돌", + "block.create.fancy_limestone_bricks_slab": "복잡한 석회암 벽돌 반 블록", + "block.create.fancy_limestone_bricks_stairs": "복잡한 석회암 벽돌 계단", + "block.create.fancy_limestone_bricks_wall": "복잡한 석회암 벽돌 담장", + "block.create.fancy_scoria_bricks": "복잡한 스코리아 벽돌", + "block.create.fancy_scoria_bricks_slab": "복잡한 스코리아 벽돌 반 블록", + "block.create.fancy_scoria_bricks_stairs": "복잡한 스코리아 벽돌 계단", + "block.create.fancy_scoria_bricks_wall": "복잡한 스코리아 벽돌 담장", + "block.create.fancy_weathered_limestone_bricks": "복잡한 풍화된 석회암 벽돌", + "block.create.fancy_weathered_limestone_bricks_slab": "복잡한 풍화된 석회암 벽돌 반 블록", + "block.create.fancy_weathered_limestone_bricks_stairs": "복잡한 풍화된 석회암 벽돌 계단", + "block.create.fancy_weathered_limestone_bricks_wall": "복잡한 풍화된 석회암 벽돌 담장", + "block.create.fluid_pipe": "액체관", + "block.create.fluid_tank": "액체 탱크", + "block.create.fluid_valve": "액체 밸브", + "block.create.flywheel": "축 회전바퀴", + "block.create.framed_glass": "틀 유리", + "block.create.framed_glass_pane": "틀 유리판", + "block.create.furnace_engine": "화로 원동기", "block.create.gabbro": "반려암", - "block.create.gabbro_stairs": "반려암 계단", - "block.create.gabbro_slab": "반려암 반 블록", - "block.create.gabbro_wall": "반려암 담장", - "block.create.polished_gabbro": "윤나는 반려암", "block.create.gabbro_bricks": "반려암 벽돌", + "block.create.gabbro_bricks_slab": "반려암 벽돌 반 블록", "block.create.gabbro_bricks_stairs": "반려암 벽돌 계단", "block.create.gabbro_bricks_wall": "반려암 벽돌 담장", - "block.create.paved_gabbro_bricks": "포장된 반려암 벽돌", - "block.create.paved_gabbro_bricks_slab": "포장된 반려암 벽돌 반 블록", - "block.create.indented_gabbro": "반려암 겹 타일", - "block.create.indented_gabbro_slab": "반려암 겹 반 블록", - "block.create.slightly_mossy_gabbro_bricks": "이끼 낀 반려암 벽돌", - "block.create.mossy_gabbro_bricks": "이끼로 뒤덮힌 반려암 벽돌", - "block.create.chiseled_gabbro": "조각된 반려암", - "block.create.fancy_gabbro_bricks": "장식된 반려암 벽돌", - "block.create.fancy_gabbro_bricks_slab": "장식된 반려암 벽돌 반 블록", - "block.create.fancy_gabbro_bricks_stairs": "장식된 반려암 벽돌 계단", - "block.create.fancy_gabbro_bricks_wall": "장식된 반려암 벽돌 담장", "block.create.gabbro_cobblestone": "반려암 조약돌", "block.create.gabbro_cobblestone_slab": "반려암 조약돌 반 블록", "block.create.gabbro_cobblestone_stairs": "반려암 조약돌 계단", "block.create.gabbro_cobblestone_wall": "반려암 조약돌 담장", - "block.create.layered_gabbro": "층이 있는 반려암", - "block.create.mossy_gabbro": "이끼낀 반려암", - "block.create.overgrown_gabbro": "이끼로 뒤덮힌 반려암", - "block.create.paved_gabbro": "포장된 반려암", - "block.create.paved_gabbro_slab": "포장된 반려암 반 블록", - "block.create.paved_gabbro_stairs": "포장된 반려암 계단", - "block.create.paved_gabbro_wall": "포장된 반려암 담장", - "block.create.polished_gabbro": "윤나는 반려암", - "block.create.polished_gabbro_slab": "윤나는 반려암 반 블록", - "block.create.polished_gabbro_stairs": "윤나는 반려암 계단", - "block.create.polished_gabbro_wall": "윤나는 반려암 담장", - "block.create.gabbro_bricks_slab": "반려암 벽돌 반 블록", "block.create.gabbro_pillar": "반려암 기둥", - + "block.create.gantry_carriage": "다리 운반대", + "block.create.gantry_shaft": "다리 축", + "block.create.gearbox": "전환장치", + "block.create.gearshift": "전환기", + "block.create.glass_fluid_pipe": "유리 액체관", "block.create.granite_bricks": "화강암 벽돌", - "block.create.layered_granite": "층이 있는 화강암", - "block.create.fancy_granite_bricks": "장식된 화강암 벽돌", - "block.create.fancy_granite_bricks_slab": "장식된 화강암 벽돌 반 블록", - "block.create.fancy_granite_bricks_stairs": "장식된 화강암 벽돌 계단", - "block.create.fancy_granite_bricks_wall": "장식된 화강암 벽돌 담장", - "block.create.granite_bricks_slab": "화강함 벽돌 반 블록", - "block.create.granite_bricks_stairs": "화강함 벽돌 계단", - "block.create.granite_bricks_wall": "화강함 벽돌 담장", + "block.create.granite_bricks_slab": "화강암 벽돌 반 블록", + "block.create.granite_bricks_stairs": "화강암 벽돌 계단", + "block.create.granite_bricks_wall": "화강암 벽돌 담장", "block.create.granite_cobblestone": "화강암 조약돌", "block.create.granite_cobblestone_slab": "화강암 조약돌 반 블록", "block.create.granite_cobblestone_stairs": "화강암 조약돌 계단", "block.create.granite_cobblestone_wall": "화강암 조약돌 담장", "block.create.granite_pillar": "화강암 기둥", - "block.create.mossy_granite": "이끼 낀 화강암 벽돌", - "block.create.overgrown_granite": "이끼로 뒤덮힌 화강암 벽돌", - "block.create.paved_granite": "포장된 화강암", - "block.create.paved_granite_slab": "포장된 화강암 반 블록", - "block.create.paved_granite_stairs": "포장된 화강암 계단", - "block.create.paved_granite_wall": "포장된 화강암 담장", - - "block.create.limesand": "석회모래", + "block.create.gray_sail": "회색 캔버스", + "block.create.gray_seat": "회색 좌석", + "block.create.gray_valve_handle": "회색 밸브 손잡이", + "block.create.green_sail": "초록색 캔버스", + "block.create.green_seat": "초록색 좌석", + "block.create.green_valve_handle": "초록색 밸브 손잡이", + "block.create.hand_crank": "자가발전용 손잡이", + "block.create.honey": "꿀", + "block.create.horizontal_framed_glass": "가로 틀 유리", + "block.create.horizontal_framed_glass_pane": "가로 틀 유리판", + "block.create.hose_pulley": "액체관 도르래", + "block.create.item_drain": "흡수통", + "block.create.jungle_window": "정글 나무 판자 창문", + "block.create.jungle_window_pane": "정글 나무 판자 창문판", + "block.create.large_cogwheel": "큰 톱니바퀴 ", + "block.create.layered_andesite": "틀 안산암", + "block.create.layered_dark_scoria": "틀 짙은 스코리아", + "block.create.layered_diorite": "틀 섬록암", + "block.create.layered_dolomite": "틀 백운암", + "block.create.layered_gabbro": "틀 반려암", + "block.create.layered_granite": "틀 화강암", + "block.create.layered_limestone": "틀 석회암", + "block.create.layered_scoria": "틀 스코리아", + "block.create.layered_weathered_limestone": "틀 풍화된 석회암", + "block.create.light_blue_sail": "하늘색 캔버스", + "block.create.light_blue_seat": "하늘색 좌석", + "block.create.light_blue_valve_handle": "하늘색 밸브 손잡이", + "block.create.light_gray_sail": "회백색 캔버스", + "block.create.light_gray_seat": "회백색 좌석", + "block.create.light_gray_valve_handle": "회백색 밸브 손잡이", + "block.create.lime_sail": "연두색 캔버스", + "block.create.lime_seat": "연두색 좌석", + "block.create.lime_valve_handle": "연두색 밸브 손잡이", + "block.create.limesand": "석회 가루", "block.create.limestone": "석회암", - "block.create.limestone_stairs": "석회암 계단", - "block.create.limestone_slab": "석회암 반 블록", - "block.create.limestone_wall": "석회암 담장", "block.create.limestone_bricks": "석회암 벽돌", - "block.create.limestone_bricks_stairs": "석회암 벽돌 계단", "block.create.limestone_bricks_slab": "석회암 벽돌 반 블록", + "block.create.limestone_bricks_stairs": "석회암 벽돌 계단", "block.create.limestone_bricks_wall": "석회암 벽돌 담장", - "block.create.polished_limestone": "윤나는 석회암", - "block.create.polished_limestone_slab": "윤나는 석회암 반 블록", - "block.create.limestone_pillar": "석회암 기둥", - "block.create.layered_limestone": "층이 있는 석회암", - "block.create.chiseled_limestone": "조각된 석회암", - "block.create.fancy_limestone_bricks": "장식된 석회암 벽돌", - "block.create.fancy_limestone_bricks_slab": "장식된 석회암 벽돌 반 블록", - "block.create.fancy_limestone_bricks_stairs": "장식된 석회암 벽돌 계단", - "block.create.fancy_limestone_bricks_wall": "장식된 석회암 벽돌 담장", - "block.create.mossy_limestone": "이끼 낀 석회암", - "block.create.overgrown_limestone": "이끼로 뒤덮힌 석회암", - "block.create.paved_limestone": "포장된 석회암", - "block.create.paved_limestone_slab": "포장된 석회암 반 블록", - "block.create.paved_limestone_stairs": "포장된 석회암 계단", - "block.create.paved_limestone_wall": "포장된 석회암 담장", - "block.create.polished_limestone_stairs": "윤나는 석회암 계단", - "block.create.polished_limestone_wall": "윤나는 석회암 담장", "block.create.limestone_cobblestone": "석회암 조약돌", "block.create.limestone_cobblestone_slab": "석회암 조약돌 반 블록", "block.create.limestone_cobblestone_stairs": "석회암 조약돌 계단", "block.create.limestone_cobblestone_wall": "석회암 조약돌 담장", - - "block.create.natural_scoria": "자연 스코리아", - "block.create.scoria": "스코리아", - "block.create.scoria_stairs": "스코리아 계단", - "block.create.scoria_slab": "스코리아 반 블록", - "block.create.scoria_wall": "스코리아 담장", - "block.create.scoria_bricks": "스코리아 벽돌", - "block.create.polished_scoria": "윤나는 스코리아", - "block.create.polished_scoria_slab": "윤나는 스코리아 반 블록", - "block.create.scoria_pillar": "스코리아 기둥", - "block.create.layered_scoria": "층이 있는 스코리아", - "block.create.chiseled_scoria": "조각된 스코리아", - "block.create.fancy_scoria_bricks": "장식된 스코리아 벽돌", - "block.create.fancy_scoria_bricks_slab": "장식된 스코리아 벽돌 반 블록", - "block.create.fancy_scoria_bricks_stairs": "장식된 스코리아 벽돌 계단", - "block.create.fancy_scoria_bricks_wall": "장식된 스코리아 벽돌 담장", + "block.create.limestone_pillar": "석회암 기둥", + "block.create.linear_chassis": "선형 연결대", + "block.create.lit_blaze_burner": "불이 붙은 블레이즈 가열기", + "block.create.magenta_sail": "자홍색 캔버스", + "block.create.magenta_seat": "자홍색 좌석", + "block.create.magenta_valve_handle": "자홍색 밸브 손잡이", + "block.create.mechanical_arm": "기계식 팔", + "block.create.mechanical_bearing": "기계식 회전장치", + "block.create.mechanical_crafter": "기계식 제작기", + "block.create.mechanical_drill": "기계식 드릴", + "block.create.mechanical_harvester": "기계식 수확기", + "block.create.mechanical_mixer": "기계식 믹서기", + "block.create.mechanical_piston": "기계식 피스톤", + "block.create.mechanical_piston_head": "기계식 피스톤 머리", + "block.create.mechanical_plough": "기계식 경작기", + "block.create.mechanical_press": "기계식 압착기", + "block.create.mechanical_pump": "기계식 펌프", + "block.create.mechanical_saw": "기계식 톱", + "block.create.metal_bracket": "금속 지지대", + "block.create.millstone": "맷돌", + "block.create.minecart_anchor": "광산 수레 부착대", + "block.create.mossy_andesite": "이끼 낀 안산암", + "block.create.mossy_dark_scoria": "이끼 낀 짙은 스코리아", + "block.create.mossy_diorite": "이끼 낀 섬록암", + "block.create.mossy_dolomite": "이끼 낀 백운암", + "block.create.mossy_gabbro": "이끼 낀 반려암", + "block.create.mossy_granite": "이끼 낀 화강암", + "block.create.mossy_limestone": "이끼 낀 석회암", "block.create.mossy_scoria": "이끼 낀 스코리아", + "block.create.mossy_weathered_limestone": "이끼 낀 풍화된 석회암", + "block.create.mysterious_cuckoo_clock": "기이한 뻐꾸기시계", + "block.create.natural_scoria": "자연적인 스코리아", + "block.create.nixie_tube": "표시등", + "block.create.nozzle": "분출구", + "block.create.oak_window": "참나무 판자 창문", + "block.create.oak_window_pane": "참나무 판자 창문판", + "block.create.orange_sail": "주황색 캔버스", + "block.create.orange_seat": "주황색 좌석", + "block.create.orange_valve_handle": "주황색 밸브 손잡이", + "block.create.ornate_iron_window": "화려한 철제 창문", + "block.create.ornate_iron_window_pane": "화려한 철제 창문판", + "block.create.overgrown_andesite": "이끼로 뒤덮힌 안산암", + "block.create.overgrown_dark_scoria": "이끼로 뒤덮힌 짙은 스코리아", + "block.create.overgrown_diorite": "이끼로 뒤덮힌 섬록암", + "block.create.overgrown_dolomite": "이끼로 뒤덮힌 백운암", + "block.create.overgrown_gabbro": "이끼로 뒤덮힌 반려암", + "block.create.overgrown_granite": "이끼로 뒤덮힌 화강암", + "block.create.overgrown_limestone": "이끼로 뒤덮힌 석회암", "block.create.overgrown_scoria": "이끼로 뒤덮힌 스코리아", + "block.create.overgrown_weathered_limestone": "이끼 풍화된 석회암", + "block.create.paved_andesite": "포장된 안산암", + "block.create.paved_andesite_slab": "포장된 안산암 반 블록", + "block.create.paved_andesite_stairs": "포장된 안산암 계단", + "block.create.paved_andesite_wall": "포장된 안산암 담장", + "block.create.paved_dark_scoria": "포장된 짙은 스코리아", + "block.create.paved_dark_scoria_slab": "포장된 짙은 스코리아 반 블록", + "block.create.paved_dark_scoria_stairs": "포장된 짙은 스코리아 계단", + "block.create.paved_dark_scoria_wall": "포장된 짙은 스코리아 담장", + "block.create.paved_diorite": "포장된 섬록암", + "block.create.paved_diorite_slab": "포장된 섬록암 반 블록", + "block.create.paved_diorite_stairs": "포장된 섬록암 계단", + "block.create.paved_diorite_wall": "포장된 섬록암 담장", + "block.create.paved_dolomite": "포장된 백운암", + "block.create.paved_dolomite_slab": "포장된 백운암 반 블록", + "block.create.paved_dolomite_stairs": "포장된 백운암 계단", + "block.create.paved_dolomite_wall": "포장된 백운암 담장", + "block.create.paved_gabbro": "포장된 반려암", + "block.create.paved_gabbro_slab": "포장된 반려암 반 블록", + "block.create.paved_gabbro_stairs": "포장된 반려암 계단", + "block.create.paved_gabbro_wall": "포장된 반려암 담장", + "block.create.paved_granite": "포장된 화강암", + "block.create.paved_granite_slab": "포장된 화강암 반 블록", + "block.create.paved_granite_stairs": "포장된 화강암 계단", + "block.create.paved_granite_wall": "포장된 화강암 담장", + "block.create.paved_limestone": "포장된 석회암", + "block.create.paved_limestone_slab": "포장된 석회암 반 블록", + "block.create.paved_limestone_stairs": "포장된 석회암 계단", + "block.create.paved_limestone_wall": "포장된 석회암 담장", "block.create.paved_scoria": "포장된 스코리아", "block.create.paved_scoria_slab": "포장된 스코리아 반 블록", "block.create.paved_scoria_stairs": "포장된 스코리아 계단", "block.create.paved_scoria_wall": "포장된 스코리아 담장", - "block.create.polished_scoria_stairs": "윤나는 스코리아 계단", - "block.create.polished_scoria_wall": "윤나는 스코리아 담장", - "block.create.scoria_cobblestone": "스코리아 조약돌", - "block.create.scoria_cobblestone_slab": "스코리아 조약돌 반 블록", - "block.create.scoria_cobblestone_stairs": "스코리아 조약돌 계단", - "block.create.scoria_cobblestone_wall": "스코리아 조약돌 담장", - "block.create.scoria_bricks_slab": "스코리아 벽돌 반 블록", - "block.create.scoria_bricks_stairs": "스코리아 벽돌 계단", - "block.create.scoria_bricks_wall": "스코리아 벽돌 담장", - - "block.create.weathered_limestone": "풍화된 석회암", - "block.create.weathered_limestone_stairs": "풍화된 석회암 계단", - "block.create.weathered_limestone_wall": "풍화된 석회암 담장", - "block.create.weathered_limestone_slab": "풍화된 석회암 반 블록", - "block.create.polished_weathered_limestone": "윤나는 풍화된 석회암", - "block.create.polished_weathered_limestone_slab": "윤나는 풍화된 석회암 반 블록", - "block.create.weathered_limestone_bricks": "풍화된 석회암 벽돌", - "block.create.weathered_limestone_bricks_stairs": "풍화된 석회암 벽돌 계단", - "block.create.weathered_limestone_bricks_wall": "풍화된 석회암 벽돌 담장", - "block.create.weathered_limestone_bricks_slab": "풍화된 석회암 벽돌 반 블록", - "block.create.weathered_limestone_pillar": "풍화된 석회암 기둥", - "block.create.layered_weathered_limestone": "층이 있는 풍화된 석회암", - "block.create.chiseled_weathered_limestone": "조각된 풍화된 석회암", - "block.create.fancy_weathered_limestone_bricks": "장식된 풍화된 석회암 벽돌", - "block.create.fancy_weathered_limestone_bricks_slab": "장식된 풍화된 석회암 벽돌 반 블록", - "block.create.fancy_weathered_limestone_bricks_stairs": "장식된 풍화된 석회암 벽돌 계단", - "block.create.fancy_weathered_limestone_bricks_wall": "장식된 풍화된 석회암 벽돌 담장", - "block.create.mossy_weathered_limestone": "이끼 낀 풍화된 석회암", - "block.create.overgrown_weathered_limestone": "이끼로 뒤덮힌 풍화된 석회암", "block.create.paved_weathered_limestone": "포장된 풍화된 석회암", "block.create.paved_weathered_limestone_slab": "포장된 풍화된 석회암 반 블록", "block.create.paved_weathered_limestone_stairs": "포장된 풍화된 석회암 계단", "block.create.paved_weathered_limestone_wall": "포장된 풍화된 석회암 담장", + "block.create.pink_sail": "분홍색 캔버스", + "block.create.pink_seat": "분홍색 좌석", + "block.create.pink_valve_handle": "분홍색 밸브 손잡이", + "block.create.piston_extension_pole": "피스톤 연장대", + "block.create.polished_dark_scoria": "윤나는 짙은 스코리아", + "block.create.polished_dark_scoria_slab": "윤나는 짙은 스코리아 반 블록", + "block.create.polished_dark_scoria_stairs": "윤나는 짙은 스코리아 계단", + "block.create.polished_dark_scoria_wall": "윤나는 짙은 스코리아 담장", + "block.create.polished_dolomite": "윤나는 백운암", + "block.create.polished_dolomite_slab": "윤나는 백운암 반 블록", + "block.create.polished_dolomite_stairs": "윤나는 백운암 계단", + "block.create.polished_dolomite_wall": "윤나는 백운암 담장", + "block.create.polished_gabbro": "윤나는 반려암", + "block.create.polished_gabbro_slab": "윤나는 반려암 반 블록", + "block.create.polished_gabbro_stairs": "윤나는 반려암 계단", + "block.create.polished_gabbro_wall": "윤나는 반려암 담장", + "block.create.polished_limestone": "윤나는 석회암", + "block.create.polished_limestone_slab": "윤나는 석회암 반 블록", + "block.create.polished_limestone_stairs": "윤나는 석회암 계단", + "block.create.polished_limestone_wall": "윤나는 석회암 담장", + "block.create.polished_scoria": "윤나는 스코리아", + "block.create.polished_scoria_slab": "윤나는 스코리아 반 블록", + "block.create.polished_scoria_stairs": "윤나는 스코리아 계단", + "block.create.polished_scoria_wall": "윤나는 스코리아 담장", + "block.create.polished_weathered_limestone": "윤나는 풍화된 석회암", + "block.create.polished_weathered_limestone_slab": "윤나는 풍화된 석회암 반 블록", "block.create.polished_weathered_limestone_stairs": "윤나는 풍화된 석회암 계단", "block.create.polished_weathered_limestone_wall": "윤나는 풍화된 석회암 담장", + "block.create.portable_fluid_interface": "연결식 액체 전달기", + "block.create.portable_storage_interface": "연결식 아이템 전달기", + "block.create.powered_latch": "레드스톤 잠금기", + "block.create.powered_toggle_latch": "레버식 레드스톤 잠금기", + "block.create.pulley_magnet": "도르래 자석", + "block.create.pulse_repeater": "순간작동 중계기", + "block.create.purple_sail": "보라색 캔버스", + "block.create.purple_seat": "보라색 좌석", + "block.create.purple_valve_handle": "보라색 밸브 손잡이", + "block.create.radial_chassis": "반경 연결대", + "block.create.red_sail": "빨간색 캔버스", + "block.create.red_seat": "빨간색 좌석", + "block.create.red_valve_handle": "빨간색 밸브 손잡이", + "block.create.redstone_contact": "레드스톤 접촉기", + "block.create.redstone_link": "레드스톤 연동 장치", + "block.create.refined_radiance_casing": "빛의 틀", + "block.create.reinforced_rail": "보강된 레일", + "block.create.rope": "도르래 밧줄", + "block.create.rope_pulley": "밧줄 도르래", + "block.create.rotation_speed_controller": "회전 속도 제어기", + "block.create.sail_frame": "캔버스 틀", + "block.create.schematic_table": "설계도 탁자", + "block.create.schematicannon": "설계대포", + "block.create.scoria": "스코리아", + "block.create.scoria_bricks": "스코리아 벽돌", + "block.create.scoria_bricks_slab": "스코리아 벽돌 반 블록", + "block.create.scoria_bricks_stairs": "스코리아 벽돌 계단", + "block.create.scoria_bricks_wall": "스코리아 벽돌 담장", + "block.create.scoria_cobblestone": "스코리아 조약돌", + "block.create.scoria_cobblestone_slab": "스코리아 조약돌 반 블록", + "block.create.scoria_cobblestone_stairs": "스코리아 조약돌 계단", + "block.create.scoria_cobblestone_wall": "스코리아 조약돌 담장", + "block.create.scoria_pillar": "스코리아 기둥", + "block.create.secondary_linear_chassis": "이차 선형 연결대", + "block.create.sequenced_gearshift": "순서화 전환기", + "block.create.shadow_steel_casing": "어둠의 틀", + "block.create.shaft": "축", + "block.create.smart_chute": "지능형 도관", + "block.create.smart_fluid_pipe": "지능형 액체관", + "block.create.speedometer": "속도계", + "block.create.spout": "주입기", + "block.create.spruce_window": "가문비나무 판자 창문", + "block.create.spruce_window_pane": "가문비나무 판자 창문판", + "block.create.sticker": "부착기", + "block.create.sticky_mechanical_piston": "기계식 끈끈이 피스톤", + "block.create.stockpile_switch": "물량 감지기", + "block.create.stressometer": "부하계", + "block.create.tiled_glass": "칸 유리", + "block.create.tiled_glass_pane": "칸 유리판", + "block.create.turntable": "회전대", + "block.create.vertical_framed_glass": "세로 틀 유리", + "block.create.vertical_framed_glass_pane": "세로 틀 유리판", + "block.create.warped_window": "뒤틀린 판자 창문", + "block.create.warped_window_pane": "뒤틀린 판자 창문판", + "block.create.water_wheel": "물레바퀴", + "block.create.weathered_limestone": "풍화된 석회암", + "block.create.weathered_limestone_bricks": "풍화된 석회암 벽돌", + "block.create.weathered_limestone_bricks_slab": "풍화된 석회암 벽돌 반 블록", + "block.create.weathered_limestone_bricks_stairs": "풍화된 석회암 벽돌 계단", + "block.create.weathered_limestone_bricks_wall": "풍화된 석회암 벽돌 담장", "block.create.weathered_limestone_cobblestone": "풍화된 석회암 조약돌", "block.create.weathered_limestone_cobblestone_slab": "풍화된 석회암 조약돌 반 블록", "block.create.weathered_limestone_cobblestone_stairs": "풍화된 석회암 조약돌 계단", "block.create.weathered_limestone_cobblestone_wall": "풍화된 석회암 조약돌 담장", - - "block.create.tiled_glass": "타일 유리", - "block.create.framed_glass": "큰 유리", - "block.create.vertical_framed_glass": "수직 유리", - "block.create.horizontal_framed_glass": "수평 유리", - "block.create.oak_window": "참나무 유리창", - "block.create.spruce_window": "가문비나무 유리창", - "block.create.birch_window": "자작나무 유리창", - "block.create.jungle_window": "정글나무 유리창", - "block.create.dark_oak_window": "짙은 참나무 유리창", - "block.create.acacia_window": "아카시아 유리창", - "block.create.ornate_iron_window": "장식된 철 유리창", - - - "block.create.tiled_glass_pane": "타일 유리판", - "block.create.framed_glass_pane": "큰 유리판", - "block.create.vertical_framed_glass_pane": "수직 유리판", - "block.create.horizontal_framed_glass_pane": "수평 유리판", - "block.create.oak_window_pane": "참나무 유리판", - "block.create.spruce_window_pane": "가문비나무 유리판", - "block.create.birch_window_pane": "자작나무 유리판", - "block.create.jungle_window_pane": "정글나무 유리판", - "block.create.dark_oak_window_pane": "짙은 참나무 유리판", - "block.create.acacia_window_pane": "아카시아나무 유리판 ", - "block.create.ornate_iron_window_pane": "장식된 철 유리판", - - "block.create.black_seat": "검은색 좌석", - "block.create.blue_seat": "파란색 좌석", - "block.create.brown_seat": "갈색 좌석", - "block.create.cyan_seat": "청록색 좌석", - "block.create.gray_seat": "회색 좌석", - "block.create.green_seat": "초록색 좌석", - "block.create.light_gray_seat": "회백색 좌석", - "block.create.lime_seat": "연두색 좌석", - "block.create.light_blue_seat": "하늘색 좌석", - "block.create.magenta_seat": "자홍색 좌석", - "block.create.orange_seat": "주황색 좌석", - "block.create.pink_seat": "분홍색 좌석", - "block.create.red_seat": "빨간색 좌석", + "block.create.weathered_limestone_pillar": "풍화된 석회암 기둥", + "block.create.weighted_ejector": "발사대", + "block.create.white_sail": "하얀색 캔버스", "block.create.white_seat": "하얀색 좌석", - "block.create.yellow_seat": "노란색 좌석", - "block.create.purple_seat": "보라색 좌석", - - "block.create.copper_valve_handle": "구리 밸브 손잡이", - "block.create.black_valve_handle": "검은색 밸브 손잡이", - "block.create.blue_valve_handle": "파란색 밸브 손잡이", - "block.create.brown_valve_handle": "갈색 밸브 손잡이", - "block.create.cyan_valve_handle": "청록색 밸브 손잡이", - "block.create.gray_valve_handle": "회색 밸브 손잡이", - "block.create.green_valve_handle": "초록색 밸브 손잡이", - "block.create.light_blue_valve_handle": "하늘색 밸브 손잡이", - "block.create.light_gray_valve_handle": "회백색 밸브 손잡이", - "block.create.lime_valve_handle": "연두색 밸브 손잡이", - "block.create.magenta_valve_handle": "자홍색 밸브 손잡이", - "block.create.orange_valve_handle": "주황색 밸브 손잡이", - "block.create.pink_valve_handle": "분홍색 밸브 손잡이", - "block.create.red_valve_handle": "빨간색 밸브 손잡이", "block.create.white_valve_handle": "하얀색 밸브 손잡이", + "block.create.windmill_bearing": "풍차 회전장치", + "block.create.wooden_bracket": "나무 지지대", + "block.create.yellow_sail": "노란색 캔버스", + "block.create.yellow_seat": "노란색 좌석", "block.create.yellow_valve_handle": "노란색 밸브 손잡이", - "block.create.purple_valve_handle": "보라색 밸브 손잡이", + "block.create.zinc_block": "아연 블록", + "block.create.zinc_ore": "아연 광석", - "block.create.encased_fluid_pipe": "구리 케이스를 씌운 파이프", - "block.create.fluid_pipe": "액체 파이프", - "block.create.fluid_tank": "액체 탱크", - "block.create.fluid_valve": "액체 밸브", - "block.create.glass_fluid_pipe": "액체 파이프", - "block.create.mechanical_pump": "펌프", - "block.create.smart_fluid_pipe": "스마트 액체 파이프", - "block.create.creative_fluid_tank": "크리에이티브 탱크", - - "block.create.sail_frame": "풍차 날개 프레임", - "block.create.black_sail": "검은색 날개", - "block.create.blue_sail": "파란색 날개", - "block.create.brown_sail": "갈색 날개", - "block.create.cyan_sail": "청록색 날개", - "block.create.gray_sail": "회색 날개", - "block.create.green_sail": "초록색 날개", - "block.create.light_blue_sail": "하늘색 날개", - "block.create.light_gray_sail": "회백색 날개", - "block.create.lime_sail": "연두색 날개", - "block.create.magenta_sail": "자홍색 날개", - "block.create.orange_sail": "주황색 날개", - "block.create.pink_sail": "분홍색 날개", - "block.create.purple_sail": "보라색 날개", - "block.create.red_sail": "빨간색 날개", - "block.create.white_sail": "하얀색 날개", - "block.create.yellow_sail": "노란색 날개", - - "block.create.creative_motor": "크리에이티브 모터", - "block.create.encased_fan": "선풍기", - "block.create.flywheel": "플라이휠", - "block.create.furnace_engine": "화로 엔진", - "block.create.cogwheel": "톱니바퀴", - "block.create.encased_chain_drive": "케이스를 씌운 축", - "block.create.encased_shaft": "케이스를 씌운 축", - "block.create.belt": "컨베이어 벨트", - "block.create.adjustable_chain_gearshift": "벨트 변속기", - "block.create.gearbox": "기어박스", - "block.create.gearshift": "기어쉬프트", - "block.create.hand_crank": "핸드 크랭크", - "block.create.large_cogwheel": "큰 톱니바퀴", - "block.create.rotation_speed_controller": "회전 속도 컨트롤러", - "block.create.shaft": "축", - "block.create.speedometer": "속도 계측기", - "block.create.stressometer": "피로도 계측기", - "block.create.water_wheel": "물레방아", - "item.create.belt_connector": "기계식 벨트", - "item.create.vertical_gearbox": "수직 기어박스", - "block.create.clutch": "클러치", - "block.create.windmill_bearing": "풍차 베어링", - - "block.create.cart_assembler": "카트 조립기", - "block.create.linear_chassis": "어두운 직선 섀시", - "block.create.mechanical_arm": "기계 팔", - "block.create.mechanical_bearing": "베어링", - "block.create.mechanical_crafter": "기계식 조합기", - "block.create.mechanical_drill": "드릴", - "block.create.mechanical_harvester": "수확기", - "block.create.mechanical_mixer": "믹서", - "block.create.mechanical_piston": "기계식 피스톤", - "block.create.mechanical_piston_head": "기계식 피스톤 머리", - "block.create.mechanical_plough": "쟁기", - "block.create.mechanical_press": "압착기", - "block.create.mechanical_saw": "톱", - "block.create.millstone": "맷돌", - "block.create.minecart_anchor": "광산 수레 정박기", - "block.create.mysterious_cuckoo_clock": "뻐꾸기 시계?", - "block.create.crushing_wheel": "분쇄 휠", - "block.create.crushing_wheel_controller": "분쇄 휠 컨트롤러", - "block.create.cuckoo_clock": "뻐꾸기 시계", - "block.create.clockwork_bearing": "시계 베어링", - "block.create.deployer": "배포기", - "block.create.nozzle": "노즐", - "block.create.blaze_burner": "블레이즈 버너", - "block.create.brass_belt_funnel": "황동 깔때기", - "block.create.brass_block": "황동 블록", - "block.create.brass_casing": "황동 케이스", - "block.create.brass_funnel": "황동 깔때기", - "block.create.brass_tunnel": "황동 터널", - "block.create.pulley_magnet": "도르래 자석", - "block.create.radial_chassis": "원형 섀시", - "block.create.secondary_linear_chassis": "밝은 직선 섀시", - "block.create.sequenced_gearshift": "순서 기어쉬프트", - "block.create.piston_extension_pole": "피스톤 연장 축", - "block.create.portable_fluid_interface": "이동식 액체 인터페이스", - "block.create.portable_storage_interface": "이동식 아이템 인터페이스", - "block.create.content_observer": "정보 감지기", - "block.create.chute": "슈트", - "block.create.basin": "대야", - "block.create.depot": "아이템 거치대", - "block.create.adjustable_crate": "가변 창고", - "block.create.nixie_tube": "디지털 표시증", - "block.create.rope": "밧줄", - "block.create.rope_pulley": "밧줄 도르래", - "block.create.hose_pulley": "호스 도르래", - "block.create.item_drain": "아이템 배수구", - "block.create.schematic_table": "청사진 테이블", - "block.create.schematicannon": "청사진 대포", - "block.create.spout": "수도꼭지", - "block.create.sticky_mechanical_piston": "끈끈이 기계식 피스톤", - "block.create.turntable": "돌림판", "entity.create.contraption": "장치", + "entity.create.gantry_contraption": "다리 장치", "entity.create.seat": "좌석", "entity.create.stationary_contraption": "고정된 장치", "entity.create.super_glue": "강력 접착제", - "block.create.andesite_casing": "안산암 케이스", - "block.create.andesite_funnel": "안산암 깔때기", - "block.create.andesite_belt_funnel": "안산암 깔때기", - "block.create.andesite_tunnel": "안산암 터널", - "block.create.reinforced_rail": "강화된 레일", - "item.create.attribute_filter": "속성 필터 틀", - "item.create.furnace_minecart_contraption": "화로가 실린 광산 수레 장치", - "item.create.chest_minecart_contraption": "상자가 실린 광산 수레 장치", - "item.create.minecart_contraption": "광산 수레 장치", - "item.create.minecart_coupling": "광산 수레 커플링", - "block.create.andesite_encased_shaft": "안산암 케이스를 씌운 축", - "block.create.brass_encased_shaft": "황동 케이스를 씌운 축", - "block.create.powered_latch": "레드스톤 걸쇠", - "block.create.powered_toggle_latch": "레드스톤 토글 걸쇠", - "block.create.pulse_repeater": "펄스 리피터", - "block.create.redstone_contact": "동형 감지기", - "block.create.redstone_link": "레드스톤 링크", - "block.create.adjustable_pulse_repeater": "가변 펄스 리피터", - "block.create.adjustable_repeater": "가변 리피터", - "block.create.analog_lever": "아날로그 레버", - "block.create.stockpile_switch": "수량 스위치", - "block.create.controller_rail": "방향 레일", + "fluid.create.milk": "우유", + "fluid.create.potion": "물약", + "fluid.create.tea": "건축가의 차", - "block.create.creative_crate": "크리에이티브 창고", - "item.create.deforester": "산림파괴자", - "item.create.extendo_grip": "외장형 연장 팔", - "item.create.handheld_blockzapper": "휴대용 블록발사기", - "item.create.handheld_worldshaper": "휴대용 세계편집기", - "item.create.goggles": "엔지니어의 고글", - "item.create.red_sand_paper": "붉은 사포", - "item.create.sand_paper": "사포", - "item.create.schematic": "청사진", - "item.create.schematic_and_quill": "청사진과 깃펜", - "item.create.empty_schematic": "빈 청사진", - - "block.create.copper_block": "구리 블록", - "block.create.copper_casing": "구리 케이스", - "block.create.copper_ore": "구리 광석", - "block.create.copper_shingles": "구리 판자", - "block.create.copper_tiles": "구리 타일", - "block.create.refined_radiance_casing": "빛나는 케이스", - "block.create.shadow_steel_casing": "그림자 케이스", - "block.create.zinc_block": "아연 블", - "block.create.zinc_ore": "아연 광석", "item.create.andesite_alloy": "안산암 합금", + "item.create.attribute_filter": "특성 필터", + "item.create.bar_of_chocolate": "초콜릿 바", + "item.create.belt_connector": "벨트", "item.create.blaze_cake": "블레이즈 케이크", - "item.create.blaze_cake_base": "블레이즈 케이크 틀", - "item.create.brass_hand": "황동 손", - "item.create.brass_ingot": "황동 주괴", + "item.create.blaze_cake_base": "블레이즈 케이크 빵", + "item.create.brass_hand": "황동제 손", + "item.create.brass_ingot": "황동괴", "item.create.brass_nugget": "황동 조각", - "item.create.brass_sheet": "황동 판", - "item.create.chromatic_compound": "색채 혼합물", - "item.create.cinder_flour": "잿가루", - "item.create.copper_ingot": "구리 주괴", + "item.create.brass_sheet": "황동판", + "item.create.builders_tea": "건축가의 차", + "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_ingot": "구리괴", "item.create.copper_nugget": "구리 조각", - "item.create.copper_sheet": "구리 판", - "item.create.crafter_slot_cover": "조합기 슬롯 덮개", + "item.create.copper_sheet": "구리판", + "item.create.crafter_slot_cover": "제작 슬롯 덮개", + "item.create.crushed_aluminum_ore": "분쇄된 알루미늄 광석", "item.create.crushed_brass": "분쇄된 황동", "item.create.crushed_copper_ore": "분쇄된 구리 광석", - "item.create.crushed_gold_ore": "분쇄된 금 광석", - "item.create.crushed_iron_ore": "분쇄된 철 광석", + "item.create.crushed_gold_ore": "분쇄된 금광석", + "item.create.crushed_iron_ore": "분쇄된 철광석", + "item.create.crushed_lead_ore": "분쇄된 납 광석", + "item.create.crushed_nickel_ore": "분쇄된 니켈 광석", + "item.create.crushed_osmium_ore": "분쇄된 오스뮴 광석", + "item.create.crushed_platinum_ore": "분쇄된 백금 광석", + "item.create.crushed_quicksilver_ore": "분쇄된 수은 광석", + "item.create.crushed_silver_ore": "분쇄된 은광석", + "item.create.crushed_tin_ore": "분쇄된 주석 광석", + "item.create.crushed_uranium_ore": "분쇄된 우라늄 광석", "item.create.crushed_zinc_ore": "분쇄된 아연 광석", + "item.create.deforester": "삼림 파괴기", "item.create.dough": "반죽", - "item.create.electron_tube": "전지 튜브", - "item.create.empty_blaze_burner": "빈 블레이즈 버너", - "item.create.filter": "필터 틀", - "item.create.golden_sheet": "금 판", + "item.create.electron_tube": "진공관", + "item.create.empty_blaze_burner": "비어있는 블레이즈 가열기", + "item.create.empty_schematic": "비어있는 설계도", + "item.create.extendo_grip": "연장용 팔", + "item.create.filter": "필터", + "item.create.furnace_minecart_contraption": "장치를 붙인 화로가 실린 광산 수레", + "item.create.goggles": "공학자의 안경", + "item.create.golden_sheet": "금판", + "item.create.handheld_blockzapper": "휴대용 블록발사기", + "item.create.handheld_worldshaper": "휴대용 세계성형기", + "item.create.honey_bucket": "꿀 양동이", + "item.create.honeyed_apple": "꿀사과", "item.create.integrated_circuit": "집적 회로", - "item.create.iron_sheet": "철 판", + "item.create.iron_sheet": "철판", "item.create.lapis_sheet": "청금석 판", - "item.create.polished_rose_quartz": "윤나는 장밋빛 석영", + "item.create.minecart_contraption": "장치를 붙인 광산 수레", + "item.create.minecart_coupling": "광산 수레 이음쇠", + "item.create.polished_rose_quartz": "갈아낸 붉은 석영", "item.create.powdered_obsidian": "흑요석 가루", - "item.create.propeller": "프로펠러", - "item.create.refined_radiance": "정제된 광채", - "item.create.rose_quartz": "장밋빛 석영", - "item.create.shadow_steel": "그림자 강철", + "item.create.propeller": "날개", + "item.create.red_sand_paper": "붉은 사포 ", + "item.create.refined_radiance": "섬세한 섬광", + "item.create.rose_quartz": "붉은 석영", + "item.create.sand_paper": "사포", + "item.create.schematic": "설계도", + "item.create.schematic_and_quill": "설계도와 깃펜", + "item.create.shadow_steel": "그림자 금속", "item.create.super_glue": "강력 접착제", + "item.create.sweet_roll": "스위트롤", "item.create.tree_fertilizer": "나무 비료", + "item.create.vertical_gearbox": "세로 전환장치", "item.create.wand_of_symmetry": "대칭의 지팡이", "item.create.wheat_flour": "밀가루", - "item.create.whisk": "혼합기", - "item.create.wrench": "렌치", - "item.create.zinc_ingot": "아연 주괴", + "item.create.whisk": "거품기", + "item.create.wrench": "스패너", + "item.create.zinc_ingot": "아연괴", "item.create.zinc_nugget": "아연 조각", - "block.create.metal_bracket": "금속 지지대", - "block.create.wooden_bracket": "나무 지지대", - "block.create.lit_blaze_burner": "불타는 빈 블레이즈 버너", - "block.create.chocolate": "초콜릿", - "block.create.honey": "꿀", - "fluid.create.chocolate": "초콜릿", - "fluid.create.honey": "꿀", - "fluid.create.milk": "우유", - "fluid.create.potion": "포션", - "fluid.create.tea": "건축가의 차", - "item.create.builders_tea": "건축가의 차", - "item.create.bar_of_chocolate": "초콜릿 바", - "item.create.chocolate_bucket": "초콜릿 양동이", - "item.create.honey_bucket": "꿀 양동이", - - "_": "->------------------------] Advancements [------------------------<-", - "advancement.create.root": "Create모드에 어서오세요", - "advancement.create.root.desc": "멋진 장치들을 만들 시간입니다!", - "advancement.create.andesite_alloy": "합금..?", - "advancement.create.andesite_alloy.desc": "암석으로도 합금을 만들 수 있나요?", + "_": "->------------------------] 발전 과제 [------------------------<-", - "advancement.create.its_alive": "살아 움직이는", - "advancement.create.its_alive.desc": "당신의 첫 장치가 움직이는 것을 보세요.", - "advancement.create.shifting_gears": "기어 변환", - "advancement.create.shifting_gears.desc": "크기가 다른 톱니바퀴를 연결하여 장치의 속도를 바꿀 수 있습니다.", - "advancement.create.overstressed": "과부화", - "advancement.create.overstressed.desc": "직접 피로도의 한계를 경험해보세요.", - "advancement.create.belt": "켈프 드라이브", - "advancement.create.belt.desc": "두 축에 컨베이어 벨트를 이으세요.", + "advancement.create.root": "크리에이트", + "advancement.create.root.desc": "굉장한 장치들을 만들어볼 시간입니다!", + "advancement.create.andesite_alloy": "특이한 작명센스", + "advancement.create.andesite_alloy.desc": "크리에이트에는 이상한 이름을 가진 재료들이 많습니다. 안산암 합금도 그중 하나이지요.", + "advancement.create.its_alive": "움직인다!", + "advancement.create.its_alive.desc": "동적 장치를 회전하게 만드세요.", + "advancement.create.shifting_gears": "톱니바퀴 변속", + "advancement.create.shifting_gears.desc": "작은 톱니바퀴에 큰 톱니바퀴를 연결하고 회전하게 만드세요. 크기가 다른 톱니바퀴끼리 연결하면, 장치의 속도가 변경됩니다.", + "advancement.create.overstressed": "과부하", + "advancement.create.overstressed.desc": "부하의 한계를 경험하세요.", + "advancement.create.belt": "켈프 벨트", + "advancement.create.belt.desc": "축 2개에 벨트를 연결하세요.", "advancement.create.tunnel": "엄폐!", - "advancement.create.tunnel.desc": "터널을 이용해 벨트를 꾸며보세요.", - "advancement.create.splitter_tunnel": "분할 정복 알고리즘", - "advancement.create.splitter_tunnel.desc": "여러 황동 터널을 이용하여 분리기를 만드세요.", - "advancement.create.chute": "쏟아져 내려와", - "advancement.create.chute.desc": "수직 벨트역할을 하는 슈트를 설치하세요.", - "advancement.create.upward_chute": "공중 납치", - "advancement.create.upward_chute.desc": "아이템이 바람을 받은 슈트안에서 날아가는 것을 보세요.", - "advancement.create.belt_funnel": "펄럭거리는 깔기", - "advancement.create.belt_funnel.desc": "깔때기를 벨트나 아이템 거치대에 설치하여 특별한 모양을 만들어 보세요.", - "advancement.create.belt_funnel_kiss": "깔때기는 어떻게 태어나?", - "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_water": "축축한 세척", - "advancement.create.fan_water.desc": "아이템을 씻는 바람을 느껴보세요.", - "advancement.create.fan_smoke": "기계 풀무", - "advancement.create.fan_smoke.desc": "아이템을 굽는 바람을 느껴보세요.", - "advancement.create.wrench": "곡괭이여 잘 있거라", - "advancement.create.wrench.desc": "당신의 장치 설계를 도와줄 렌치를 만드세요.", - "advancement.create.goggles": "피로돋보기", - "advancement.create.goggles.desc": "장치에 대한 운동 정보를 가져다 줄 고글을 만드세요.", - "advancement.create.speedometer": "근데 얼마나 빨라?", - "advancement.create.speedometer.desc": "속도 계측기를 가동하세요. 고글을 통해 수치가 얼마나 되는지 보세요.", - "advancement.create.stressometer": "근데 얼마나 피로해?", - "advancement.create.stressometer.desc": "피로도 계측기를 가동하세요. 고글을 통해 수치가 얼마나 되는지 보세요.", - "advancement.create.aesthetics": "짠! 예술!", - "advancement.create.aesthetics.desc": "축, 파이프, 톱니바퀴에 지지대를 설치하세요.", - "advancement.create.reinforced": "짠! 강화!", - "advancement.create.reinforced.desc": "축, 파이프, 벨트에 적절한 케이스를 씌우세요.", - "advancement.create.water_wheel": "수력 동력화", - "advancement.create.water_wheel.desc": "물레방아를 설치하고 회전하게 만드세요!", - "advancement.create.chocolate_wheel": "초콜릿방아", - "advancement.create.chocolate_wheel.desc": "녹은 초콜릿으로 물레방아를 돌리세요.", - "advancement.create.lava_wheel": "불레방아", - "advancement.create.lava_wheel.desc": "이건 일어나지 않았어야 하는데...", - "advancement.create.cuckoo": "잘자...", - "advancement.create.cuckoo.desc": "뻐꾸기 시계가 잘 시간을 알리는 것을 관찰하세요.", - "advancement.create.millstone": "나만의 작은 분쇄기", - "advancement.create.millstone.desc": "멧돌을 설치하고 가동시키세요.", - "advancement.create.windmill": "선선한 바람", - "advancement.create.windmill.desc": "풍차 베어링을 작동시키세요.", - "advancement.create.maxed_windmill": "강한 바람", - "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": "'깡!'", - "advancement.create.press.desc": "프레스를 만들고 금속 판을 만들어보세요.", - "advancement.create.polished_rose_quartz": "장밋빛 다이아몬드", - "advancement.create.polished_rose_quartz.desc": "장밋빛 석영을 투명해지도록 열심히 사포질하세요.", - "advancement.create.electron_tube": "삐빅-", - "advancement.create.electron_tube.desc": "전지 튜브를 만드세요. 발전된 장치들에 쓰입니다.", - "advancement.create.mechanical_saw": "벌목기 가동", - "advancement.create.mechanical_saw.desc": "톱을 설치하고 가동시키세요.", - "advancement.create.basin": "대야 시스템", + "advancement.create.tunnel.desc": "벨트를 이용해 터널을 장식하세요.", + "advancement.create.splitter_tunnel": "분할 정복", + "advancement.create.splitter_tunnel.desc": "황동 터널을 일렬로 설치하여 아이템을 나누세요.", + "advancement.create.chute": "아래로 떨어지는", + "advancement.create.chute.desc": "세로로 된 벨트의 역할을 하는 도관을 설치하세요.", + "advancement.create.upward_chute": "바람 납치", + "advancement.create.upward_chute.desc": "도관 속 던진 아이템이 선풍기에 의해 올라가는 것을 관찰하세요.", + "advancement.create.belt_funnel": "퍼널 공정", + "advancement.create.belt_funnel.desc": "벨트나 아이템 거치대 위에 벽에다가 퍼널을 설치하여 특별한 유형의 퍼널을 만드세요.", + "advancement.create.belt_funnel_kiss": "퍼널은 어떻게 태어나?", + "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_water": "세밀한 세척", + "advancement.create.fan_water.desc": "아이템을 세척하는 바람을 느끼세요.", + "advancement.create.fan_smoke": "기계식 풍구", + "advancement.create.fan_smoke.desc": "아이템을 훈연하는 바람을 느끼세요.", + "advancement.create.wrench": "간편한 설정", + "advancement.create.wrench.desc": "장치를 쉽게 설정할 수 있는 스패너를 만드세요.", + "advancement.create.goggles": "부하 확인", + "advancement.create.goggles.desc": "장치의 동적 정보를 쉽게 확인할 수 있는 공학자의 안경을 만드세요.", + "advancement.create.speedometer": "속도를 얼마나 정확하게 측정해?", + "advancement.create.speedometer.desc": "속도계를 설치하고 동력을 공급하세요. 공학자의 안경을 쓰고 관찰하면 정확한 값을 알 수 있습니다.", + "advancement.create.stressometer": "부하를 얼마나 정확하게 측정해?", + "advancement.create.stressometer.desc": "부하계를 설치하고 동력을 공급하세요. 공학자의 안경을 쓰고 관찰하면 정확한 값을 알 수 있습니다.", + "advancement.create.aesthetics": "미적 감각!", + "advancement.create.aesthetics.desc": "축과 액체관, 톱니바퀴에다 지지대를 설치하세요.", + "advancement.create.reinforced": "튼튼 보강!", + "advancement.create.reinforced.desc": "축과 액체관, 벨트에다 어울리는 틀을 씌우세요.", + "advancement.create.water_wheel": "수력 활용", + "advancement.create.water_wheel.desc": "물레바퀴를 설치하고 회전하게 만드세요!", + "advancement.create.chocolate_wheel": "달콤한 동력", + "advancement.create.chocolate_wheel.desc": "물레바퀴를 녹은 초콜릿으로 회전하게 만드세요!.", + "advancement.create.lava_wheel": "불레바퀴", + "advancement.create.lava_wheel.desc": "물레바퀴를 용암으로 회전하게 만드세ㅇ... 어? 작동하면 안 되는데...", + "advancement.create.cuckoo": "벌써 이렇게나 시간이 지났어?", + "advancement.create.cuckoo.desc": "밤을 알리고 있는 뻐꾸기시계를 관찰하세요.", + "advancement.create.millstone": "작은 분쇄기", + "advancement.create.millstone.desc": "맷돌을 설치하고 동력을 공급하세요.", + "advancement.create.windmill": "산들바람", + "advancement.create.windmill.desc": "풍차를 가동하세요.", + "advancement.create.maxed_windmill": "거센바람", + "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": "눌러! 쾅!", + "advancement.create.press.desc": "기계식 압착기에 동력을 공급하여 재료를 판으로 만드세요.", + "advancement.create.polished_rose_quartz": "적색 다이아몬드", + "advancement.create.polished_rose_quartz.desc": "사포를 사용하여 붉은 석영을 투명해질 때까지 가세요.", + "advancement.create.electron_tube": "삐뽀삐뽀!", + "advancement.create.electron_tube.desc": "진공관을 만드세요. 진공관은 덜 원시적인 기계에 쓰입니다.", + "advancement.create.mechanical_saw": "회전하는 벌목기", + "advancement.create.mechanical_saw.desc": "기계식 톱을 설치하고 동력을 공급하세요.", + "advancement.create.basin": "커다란 대야", "advancement.create.basin.desc": "대야를 설치하고 아이템을 던져보세요.", - "advancement.create.mixer": "섞고 돌리고 섞고", - "advancement.create.mixer.desc": "대야 위에 믹서를 설치하고, 가동시켜 재료를 만드세요.", - "advancement.create.blaze_burner": "살아있는 불", - "advancement.create.blaze_burner.desc": "블레이즈 버너를 얻으세요.", - "advancement.create.compact": "자동 압축", - "advancement.create.compact.desc": "대야와 압착기를 이용하서 아이템을 섞어보세요.", - - "advancement.create.brass": "진짜 합금", - "advancement.create.brass.desc": "구리와 아연을 가지고 황동을 만드세요.", + "advancement.create.mixer": "섞어!", + "advancement.create.mixer.desc": "기계식 믹서기를 대야 위에 설치하고, 동력을 공급하여 재료들을 섞으세요.", + "advancement.create.blaze_burner": "살아있는 난로", + "advancement.create.blaze_burner.desc": "블레이즈 가열기를 얻으세요.", + "advancement.create.compact": "기계식 압축", + "advancement.create.compact.desc": "대야에 있는 작은 재료들을 압축하세요.", + "advancement.create.brass": "황금빛 합금", + "advancement.create.brass.desc": "분쇄된 구리와 분쇄된 아연으로 황동을 만드세요.", "advancement.create.brass_casing": "황동기 시대", - "advancement.create.brass_casing.desc": "새롭게 얻은 황동과 나무를 가지고 업그레이드된 케이스를 만드세요.", - "advancement.create.copper_casing": "구리 시대", - "advancement.create.copper_casing.desc": "구리 판을 이용해 구리 케이스를 만드세요.", - "advancement.create.spout": "쪼르록", - "advancement.create.spout.desc": "수도꼭지가 아이템에 액체를 채우는 것을 보세요.", - "advancement.create.spout_potion": "대규모 양조", - "advancement.create.spout_potion.desc": "수도꼭지가 병에 포션을 채우는 것을 보세요.", - "advancement.create.chocolate": "상상의 세계", - "advancement.create.chocolate.desc": "양동이에 녹은 초콜릿을 채우세요.", - "advancement.create.item_drain": "회전 배수", - "advancement.create.item_drain.desc": "아이템 배수구가 액체를 비우는 것을 보세요.", - "advancement.create.chained_item_drain": "구른다!", - "advancement.create.chained_item_drain.desc": "아이템이 여러 배수구 위를 굴러가는 것을 보세요.", + "advancement.create.brass_casing.desc": "새로 얻은 황동과 나무를 사용하여 고급 틀을 만드세요.", + "advancement.create.copper_casing": "구리기 시대", + "advancement.create.copper_casing.desc": "구리판과 나무를 사용하여 구리 틀을 만드세요.", + "advancement.create.spout": "쪼르륵", + "advancement.create.spout.desc": "주입기를 사용하여 아이템에 액체를 채우세요.", + "advancement.create.spout_potion": "양조장", + "advancement.create.spout_potion.desc": "주입기를 사용하여 유리병에 물약을 채우세요.", + "advancement.create.chocolate": "상상 속 세계", + "advancement.create.chocolate.desc": "녹은 초콜릿이 담긴 양동이를 얻으세요.", + "advancement.create.item_drain": "아래로 쏟아지는", + "advancement.create.item_drain.desc": "흡수통이 액체가 담긴 아이템을 흡수하는 것을 관찰하세요.", + "advancement.create.chained_item_drain": "굴러!", + "advancement.create.chained_item_drain.desc": "연결된 여러 개의 흡수통 위에서 구르는 아이템을 관찰하세요.", "advancement.create.glass_pipe": "액체 엿보기", - "advancement.create.glass_pipe.desc": "액체가 창이 달린 파이프를 지나는 것을 보세요. 직선 파이프에 렌치로 우클릭하면 창문이 생깁니다.", - "advancement.create.pipe_collision": "액체를 만나게하지 마세요!", - "advancement.create.pipe_collision.desc": "파이프 안에서 두 액체를 만나게 하세요.", - "advancement.create.pipe_spill": "누출 사고", - "advancement.create.pipe_spill.desc": "파이프 끝을 열어 액체가 밖으로 나오는 것을 보세요.", - "advancement.create.hose_pulley": "공업 펌프", - "advancement.create.hose_pulley.desc": "호스 도르래를 사용하여 액체를 채우거나 빨아들이세요.", - "advancement.create.infinite_water": "바다를 흡수하다", - "advancement.create.infinite_water.desc": "무한으로 인식되는 물 웅덩이에서 물을 끌어올리세요.", - "advancement.create.infinite_lava": "세계의 핵을 흡수하다", - "advancement.create.infinite_lava.desc": "무한으로 인식되는 용암 웅덩이에서 용암을 끌어올리세요.", - "advancement.create.infinite_chocolate": "상상 속에 잠기다", - "advancement.create.infinite_chocolate.desc": "무한으로 인식되는 초콜릿 웅덩이에서 초콜릿을 끌어올리세요..", - + "advancement.create.glass_pipe.desc": "액체가 유리창 액체관을 통해 전송되는 것을 관찰하세요. 곧은 액체관에 스패너를 사용하면 유리창 액체관이 됩니다.", + "advancement.create.pipe_collision": "그 액체를 섞지 마오", + "advancement.create.pipe_collision.desc": "액체관에서 두 가지 액체가 만나는 것을 관찰하세요.", + "advancement.create.pipe_spill": "물 샌다!", + "advancement.create.pipe_spill.desc": "액체관의 구멍에서 액체를 흡수하거나, 배출하는 것을 관찰하세요.", + "advancement.create.hose_pulley": "누출 사고", + "advancement.create.hose_pulley.desc": "액체관 도르래가 호스를 내려 액체를 흡수하거나, 배출하는 것을 관찰하세요.", + "advancement.create.infinite_water": "바다 흡수", + "advancement.create.infinite_water.desc": "무한하다고 간주되는 거대한 수역을 흡수하세요.", + "advancement.create.infinite_lava": "외핵 흡수", + "advancement.create.infinite_lava.desc": "무한하다고 간주되는 거대한 용암 바다를 흡수하세요.", + "advancement.create.infinite_chocolate": "상상 속으로!", + "advancement.create.infinite_chocolate.desc": "무한하다고 간주되는 거대한 초콜릿 퐁듀를 흡수하세요.", "advancement.create.crafter": "자동 조합", - "advancement.create.crafter.desc": "기계식 조합기를 설치하고 가동시키세요.", - "advancement.create.clockwork_bearing": "시계 제작", - "advancement.create.clockwork_bearing.desc": "시계 베어링에 구조물을 달고 작동시키세요.", - "advancement.create.nixie_tube": "스타일있게 표시하기", - "advancement.create.nixie_tube.desc": "디지털 표시등을 얻고 설치하세요.", - "advancement.create.deployer": "찌르고, 설치하고, 공격!", - "advancement.create.deployer.desc": "당신의 분신, 배포기를 설치하고 가동시키세요.", - "advancement.create.fist_bump": "하이파이브!", - "advancement.create.fist_bump.desc": "두 배포기를 서로 부딫치게 하세요.", - "advancement.create.crushing_wheel": "한 쌍의 거인들", - "advancement.create.crushing_wheel.desc": "더 많은 재료를 더 효율적으로 갈 분쇄 휠을 만드세요.", - "advancement.create.speed_controller": "엔지니어들이 이 장치를 싫어합니다", - "advancement.create.speed_controller.desc": "궁극의 회전속도 변경장치, 회전 속도 컨트롤러를 설치하세요.", + "advancement.create.crafter.desc": "기계식 제작기를 설치하고 동력을 공급하세요.", + "advancement.create.clockwork_bearing": "시계장치", + "advancement.create.clockwork_bearing.desc": "시계 회전장치를 가동하세요.", + "advancement.create.nixie_tube": "스타일의 표시", + "advancement.create.nixie_tube.desc": "표시등을 설치하세요.", + "advancement.create.deployer": "만들고, 설치하고, 공격!", + "advancement.create.deployer.desc": "전개장치를 설치하고 동력을 공급하세요. 사람의 손을 완벽하게 본뜬 장치입니다.", + "advancement.create.speed_controller": "마음대로", + "advancement.create.speed_controller.desc": "궁극적인 장치, 회전 속도 제어기를 설치하세요.", "advancement.create.flywheel": "공장의 심장", - "advancement.create.flywheel.desc": "화로엔진에 플라이휠을 연결하세요.", - "advancement.create.overstress_flywheel": "정말 높은 피로", - "advancement.create.overstress_flywheel.desc": "화로 엔진을 과부하하세요.", - "advancement.create.integrated_circuit": "복잡한 계산", - "advancement.create.integrated_circuit.desc": "집적 회로를 제작하세요.", - "advancement.create.mechanical_arm": "할일이 많아!", - "advancement.create.mechanical_arm.desc": "기계 팔을 조합하고, 입력부와 출력부를 정하고, 설치한 다음 돌리세요. 그리고 그것이 작동하는 것을 보세요.", - "advancement.create.musical_arm": "볼륨 최대로!", - "advancement.create.musical_arm.desc": "기계 팔이 주크박스를 작동시키는 것을 보세요.", - "advancement.create.arm_many_targets": "정리를 할 수 있는 정도의 능력", - "advancement.create.arm_many_targets.desc": "기계 팔에 10개 이상의 출력부를 설정하세요.", - "advancement.create.arm_blaze_burner": "연료를 줄 수 있는 정도의 능력", - "advancement.create.arm_blaze_burner.desc": "기계 팔이 블레이즈 버너에 연료를 넣도록 하세요.", - "advancement.create.chromatic_compound": "양극성 재료", - "advancement.create.chromatic_compound.desc": "색채 혼합물를 만드세요.", - "advancement.create.shadow_steel": "공허를 받아들이다", - "advancement.create.shadow_steel.desc": "무의 금속, 그림자 강철을 생성하세요.", - "advancement.create.refined_radiance": "빛으로 제련되다", - "advancement.create.refined_radiance.desc": "강력한 색채 물질, 정제된 빛을 생성하세요.", - "advancement.create.chromatic_age": "양극 시대", - "advancement.create.chromatic_age.desc": "빛과 어둠의 케이스를 제작하세요.", - "advancement.create.blaze_cake": "설탕 러시", - "advancement.create.blaze_cake.desc": "블레이즈 버너에게 줄 특별한 케이크를 만드세요.", - "advancement.create.extendo_grip": "띠요오옹!", - "advancement.create.extendo_grip.desc": "외장형 연장 팔을 드세요.", - "advancement.create.dual_extendo_grip": "궁극의 띠용!", - "advancement.create.dual_extendo_grip.desc": "쌍으로 외장형 연장 팔을 들어 인간을 뛰어넘은 사거리를 가지세요.", - - "advancement.create.zapper": "나는 스타일있게 건축해", - "advancement.create.zapper.desc": "당신의 건축을 도와줄 멋진 레이저 건, 휴대용 블록발사기를 만드세요.", - "advancement.create.upgraded_zapper": "화려한 빛이 날 감싸네", - "advancement.create.upgraded_zapper.desc": "완전히 업그레이드된 휴대용 블록발사기를 만들고 써보세요.", - "advancement.create.wand_of_symmetry": "빛나는 건축", + "advancement.create.flywheel.desc": "원동기를 회전바퀴에 성공적으로 연결하세요.", + "advancement.create.overstress_flywheel": "엄청난 부하", + "advancement.create.overstress_flywheel.desc": "화로 원동기를 과부하되게 만드세요", + "advancement.create.integrated_circuit": "복합한 계산", + "advancement.create.integrated_circuit.desc": "집적 회로를 조립하세요.", + "advancement.create.mechanical_arm": "바쁘다 바빠!", + "advancement.create.mechanical_arm.desc": "기계식 팔을 제작하고, 입력구와 출력구를 선택하고, 설치한 후 동력을 공급한 다음, 작업이 수행되는 것을 관찰하세요.", + "advancement.create.musical_arm": "흥이 넘친다!", + "advancement.create.musical_arm.desc": "기계식 팔이 주크박스에 음반을 넣는 것을 관찰하세요.", + "advancement.create.arm_many_targets": "체계화 프로그램", + "advancement.create.arm_many_targets.desc": "기계식 팔에 10개 이상의 출력부를 설정하세요.", + "advancement.create.arm_blaze_burner": "연소 프로그램", + "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.chromatic_compound": "양극성 자원", + "advancement.create.chromatic_compound.desc": "혼돈의 혼합물을 만드세요.", + "advancement.create.shadow_steel": "공허에서의 복귀", + "advancement.create.shadow_steel.desc": "혼돈의 혼합물에 세계 밖의 어둠을 노출하여 무의 금속, 어둠의 강철을 만드세요.", + "advancement.create.refined_radiance": "빛으로부터의 자극", + "advancement.create.refined_radiance.desc": "혼돈의 혼합물에 신호기의 빛을 쐬어 강렬한 색채를 지닌 물질, 섬세한 섬광을 만드세요.", + "advancement.create.chromatic_age": "극과 극", + "advancement.create.chromatic_age.desc": "빛과 어둠의 틀을 만드세요.", + "advancement.create.zapper": "새로운 건축 방식", + "advancement.create.zapper.desc": "휴대용 블록발사기 만드세요. 건축을 도와주는 빛의 레이저 총입니다.", + "advancement.create.upgraded_zapper": "빛의 강화", + "advancement.create.upgraded_zapper.desc": "완전히 강화된 휴대용 블록발사기를 사용해 보세요.", + "advancement.create.wand_of_symmetry": "빛의 거울", "advancement.create.wand_of_symmetry.desc": "대칭의 지팡이를 만드세요.", - "advancement.create.deforester": "빛나는 벌목", - "advancement.create.deforester.desc": "산림파괴자를 만들고, 숲에게 작별인사를 하세요.", - - "advancement.create.eob": "End of Beta", - "advancement.create.eob.desc": "이후 업데이트를 기다려주세요. <3", + "advancement.create.deforester": "빛의 벌목", + "advancement.create.deforester.desc": "삼림 파괴기를 만들고. 근처에 있는 숲에 작별 인사를 하세요.", + "advancement.create.extendo_grip": "띠요오용!", + "advancement.create.extendo_grip.desc": "연장용 팔을 손에 쥐세요.", + "advancement.create.dual_extendo_grip": "궁극의 띠용시대", + "advancement.create.dual_extendo_grip.desc": "연장용 팔을 이중으로 손에 쥐어 초인으로의 한 발짝을 내딛으세요.", + "advancement.create.eob": "베타의 끝", + "advancement.create.eob.desc": "이후에 나올 업데이트를 기대해주세요. <3", - "_": "->------------------------] UI & Messages [------------------------<-", - "itemGroup.create.base": "Create", - "itemGroup.create.palettes": "Create 팔레트", + "_": "->------------------------] UI & 메시지 [------------------------<-", - "death.attack.create.crush": "%1$s이(가) 분쇄 휠에 의해 가공되었습니다", - "death.attack.create.fan_fire": "%1$s이(가) 뜨거운 바람에 의해 익어버렸습니다", - "death.attack.create.fan_lava": "%1$s이(가) 용암 바람으로 구워졌습니다", - "death.attack.create.mechanical_drill": "%1$s이(가) 드릴에 관통당했습니다", - "death.attack.create.mechanical_saw": "%1$s이(가) 톱날에 반으로 갈라져 죽었습니다", - "death.attack.create.cuckoo_clock_explosion": "%1$s이(가) 조작된 뻐꾸기 시계에 의해 폭파당했습니다", + "itemGroup.create.base": "크리에이트 공학", + "itemGroup.create.palettes": "크리에이트 블록", - "create.block.deployer.damage_source_name": "배포기", - "create.block.cart_assembler.invalid": "카트조립기를 레일 위에 설치하세요", + "death.attack.create.crush": "%1$s이(가) 분쇄용 바퀴에 갈려나갔습니다", + "death.attack.create.fan_fire": "%1$s이(가) 뜨거운 바람에 익어버렸습니다", + "death.attack.create.fan_lava": "%1$s이(가) 불길 같은 바람에 구워졌습니다", + "death.attack.create.mechanical_drill": "%1$s이(가) 기계식 드릴에 관통당했습니다", + "death.attack.create.mechanical_saw": "%1$s이(가) 기계식 톱에 의해 반으로 잘려 나갔습니다", + "death.attack.create.cuckoo_clock_explosion": "%1$s이(가) 변경된 뻐꾸기시계에 의해 폭파당했습니다", + + "create.block.deployer.damage_source_name": "전개장치", + "create.block.cart_assembler.invalid": "레일에 설치하세요", "create.recipe.crushing": "분쇄", - "create.recipe.milling": "맷돌질", + "create.recipe.milling": "제분", "create.recipe.fan_washing": "세척", - "create.recipe.fan_washing.fan": "물과 선풍기", + "create.recipe.fan_washing.fan": "물과 공업용 선풍기", "create.recipe.fan_smoking": "훈연", - "create.recipe.fan_smoking.fan": "불과 선풍기", + "create.recipe.fan_smoking.fan": "불과 공업용 선풍기", "create.recipe.fan_blasting": "제련", - "create.recipe.fan_blasting.fan": "용암과 선풍기", + "create.recipe.fan_blasting.fan": "용암과 공업용 선풍기", "create.recipe.pressing": "압착", "create.recipe.mixing": "혼합", - "create.recipe.automatic_shapeless": "무형 자동 조합", - "create.recipe.automatic_brewing": "자동 양조", + "create.recipe.automatic_shapeless": "기계식 제작 (믹서기)", + "create.recipe.automatic_brewing": "기계식 양조", "create.recipe.packing": "압축", - "create.recipe.automatic_packing": "자동 압축", - "create.recipe.sawing": "제재", - "create.recipe.mechanical_crafting": "기계 조합", - "create.recipe.automatic_shaped": "유형 자동 조합", - "create.recipe.block_cutting": "블 절단", - "create.recipe.blockzapper_upgrade": "휴대용 블록발사기 업그레이드", + "create.recipe.automatic_packing": "기계식 압축", + "create.recipe.sawing": "톱질", + "create.recipe.mechanical_crafting": "기계식 제작", + "create.recipe.automatic_shaped": "기계식 제작 (제작기)", + "create.recipe.block_cutting": "블록 절단", + "create.recipe.wood_cutting": "나무 절단", + "create.recipe.blockzapper_upgrade": "휴대용 블록발사기", "create.recipe.sandpaper_polishing": "사포질", - "create.recipe.mystery_conversion": "?", + "create.recipe.mystery_conversion": "불가사의한 변환", "create.recipe.spout_filling": "채우기", - "create.recipe.draining": "배수", + "create.recipe.draining": "흡수", "create.recipe.processing.chance": "%1$s%% 확률", - "create.recipe.heat_requirement.none": "열이 필요하지 않음", - "create.recipe.heat_requirement.heated": "고온으로 가열됨", - "create.recipe.heat_requirement.superheated": "초고온으로 가열됨", + "create.recipe.heat_requirement.none": "가열기가 필요하지 않습니다", + "create.recipe.heat_requirement.heated": "가열", + "create.recipe.heat_requirement.superheated": "초가열", "create.generic.range": "범위", - "create.generic.radius": "반지름", + "create.generic.radius": "반경", "create.generic.width": "폭", "create.generic.height": "높이", "create.generic.length": "길이", "create.generic.speed": "속도", - "create.generic.delay": "딜레이", + "create.generic.delay": "지연", "create.generic.unit.ticks": "틱", "create.generic.unit.seconds": "초", "create.generic.unit.minutes": "분", - "create.generic.unit.rpm": "RPM", - "create.generic.unit.stress": "su", + "create.generic.unit.rpm": "RPM / 분당 회전수", + "create.generic.unit.stress": " 부하", "create.generic.unit.degrees": "°", - "create.generic.unit.millibuckets": "%1$smB", + "create.generic.unit.millibuckets": "%1$s 밀리양동이", "create.generic.clockwise": "시계 방향", - "create.generic.counter_clockwise": "시계 반대 방향", + "create.generic.counter_clockwise": "반시계 방향", - "create.action.scroll": "스크롤하세요", + "create.action.scroll": "스크롤", "create.action.confirm": "확인", "create.action.abort": "중단", "create.action.saveToFile": "저장", "create.action.discard": "삭제", - "create.keyinfo.toolmenu": "메뉴 세부정보 보기", - "create.keyinfo.scrollup": "Simulate Mousewheel Up (inworld)", - "create.keyinfo.scrolldown": "Simulate Mousewheel Down (inworld)", + "create.keyinfo.toolmenu": "집중", + "create.keyinfo.scrollup": "마우스 휠을 위로 이동 (세계에서)", + "create.keyinfo.scrolldown": "마우스 휠을 아래로 이동 (세계에서)", - "create.gui.scrollInput.defaultTitle": "옵션을 선택하세요:", - "create.gui.scrollInput.scrollToModify": "스크롤로 수정하기", - "create.gui.scrollInput.scrollToAdjustAmount": "스크롤로 수량 조절하기", - "create.gui.scrollInput.scrollToSelect": "스크롤로 선택", - "create.gui.scrollInput.shiftScrollsFaster": "쉬프트-스크롤로 빨리 수정하기", - "create.gui.toolmenu.focusKey": "[%1$s]를 눌러 세부정보 보기", - "create.gui.toolmenu.cycle": "스크롤로 순환", - "create.gui.symmetryWand.mirrorType": "반사", - "create.gui.symmetryWand.orientation": "방위", + "create.gui.scrollInput.defaultTitle": "옵션 선택:", + "create.gui.scrollInput.scrollToModify": "스크롤로 수정할 수 있습니다", + "create.gui.scrollInput.scrollToAdjustAmount": "스크롤로 수량을 조절할 수 있습니다", + "create.gui.scrollInput.scrollToSelect": "스크롤로 선택할 수 있습니다", + "create.gui.scrollInput.shiftScrollsFaster": "Shift을(를) 누르고 스크롤하면 빠르게 이동합니다", + "create.gui.toolmenu.focusKey": "[%1$s]을(를) 누르면 집중합니다", + "create.gui.toolmenu.cycle": "[스크롤]하면 모드를 변경합니다", + "create.gui.symmetryWand.mirrorType": "거울의 형태", + "create.gui.symmetryWand.orientation": "거울의 방향", - "create.symmetry.mirror.plane": "거울 모드", - "create.symmetry.mirror.doublePlane": "사각형 모드", - "create.symmetry.mirror.triplePlane": "팔각형 모드", + "create.symmetry.mirror.plane": "기본", + "create.symmetry.mirror.doublePlane": "사각형", + "create.symmetry.mirror.triplePlane": "팔각형", - "create.orientation.orthogonal": "수직으로", - "create.orientation.diagonal": "대각선으로", - "create.orientation.horizontal": "수평으로", - "create.orientation.alongZ": "Z좌표를 따라", - "create.orientation.alongX": "X좌표를 따라", + "create.orientation.orthogonal": "직각", + "create.orientation.diagonal": "대각", + "create.orientation.horizontal": "가로", + "create.orientation.alongZ": "Z 좌표", + "create.orientation.alongX": "X 좌표", "create.gui.blockzapper.title": "휴대용 블록발사기", "create.gui.blockzapper.replaceMode": "대체 모드", - "create.gui.blockzapper.searchDiagonal": "대각선을 따라", - "create.gui.blockzapper.searchFuzzy": "물질 경계 무시", - "create.gui.blockzapper.range": "범위", - "create.gui.blockzapper.needsUpgradedAmplifier": "업그레이드가 필요합니다", - "create.gui.blockzapper.patternSection": "패턴 설정", - "create.gui.blockzapper.pattern.solid": "원형", - "create.gui.blockzapper.pattern.checkered": "체스판", - "create.gui.blockzapper.pattern.inversecheckered": "반전된 체스판", - "create.gui.blockzapper.pattern.chance25": "랜덤으로 25% 채우기", - "create.gui.blockzapper.pattern.chance50": "랜덤으로 50% 채우기", - "create.gui.blockzapper.pattern.chance75": "랜덤으로 75% 채우기", - "create.gui.terrainzapper.title": "휴대용 세계편집기", - "create.gui.terrainzapper.placement": "설치방식", - "create.gui.terrainzapper.placement.merged": "선택한 블록에", - "create.gui.terrainzapper.placement.attached": "선택한 블록 옆에", - "create.gui.terrainzapper.placement.inserted": "선택한 블록 안에", - "create.gui.terrainzapper.brush": "브러쉬", - "create.gui.terrainzapper.brush.cuboid": "정육면체", - "create.gui.terrainzapper.brush.sphere": "구", - "create.gui.terrainzapper.brush.cylinder": "원통", - "create.gui.terrainzapper.tool": "도구", + "create.gui.blockzapper.searchDiagonal": "대각선으로 연결된 블록 포함", + "create.gui.blockzapper.searchFuzzy": "블록 간의 경계 무시", + "create.gui.blockzapper.range": "설치 범위", + "create.gui.blockzapper.needsUpgradedAmplifier": "증폭기를 강화해야 사용할 수 있습니다", + "create.gui.blockzapper.patternSection": "모양", + "create.gui.blockzapper.pattern.solid": "기본", + "create.gui.blockzapper.pattern.checkered": "체스판 모양", + "create.gui.blockzapper.pattern.inversecheckered": "반전된 체스판 모양", + "create.gui.blockzapper.pattern.chance25": "밀도 25%", + "create.gui.blockzapper.pattern.chance50": "밀도 50%", + "create.gui.blockzapper.pattern.chance75": "밀도 75%", + "create.gui.terrainzapper.title": "휴대용 세계성형기", + "create.gui.terrainzapper.placement": "기준", + "create.gui.terrainzapper.placement.merged": "중간", + "create.gui.terrainzapper.placement.attached": "밖", + "create.gui.terrainzapper.placement.inserted": "안", + "create.gui.terrainzapper.brush": "형태", + "create.gui.terrainzapper.brush.cuboid": "직육면체", + "create.gui.terrainzapper.brush.sphere": "구체", + "create.gui.terrainzapper.brush.cylinder": "원기둥", + "create.gui.terrainzapper.tool": "방식", "create.gui.terrainzapper.tool.fill": "채우기", - "create.gui.terrainzapper.tool.place": "설치", - "create.gui.terrainzapper.tool.replace": "대체", + "create.gui.terrainzapper.tool.place": "설치하기", + "create.gui.terrainzapper.tool.replace": "대체하기", "create.gui.terrainzapper.tool.clear": "지우기", "create.gui.terrainzapper.tool.overlay": "덮어씌우기", - "create.gui.terrainzapper.tool.flatten": "평탄화", + "create.gui.terrainzapper.tool.flatten": "다듬기", - "create.terrainzapper.shiftRightClickToSet": "쉬프트-우클릭으로 모양 설정하기", + "create.terrainzapper.shiftRightClickToSet": "Shift-오른쪽 버튼으로 모양을 선택할 수 있습니다", - "create.blockzapper.usingBlock": "현재 블록: %1$s", - "create.blockzapper.componentUpgrades": "부품 업그레이드:", - "create.blockzapper.component.body": "몸통", + "create.blockzapper.usingBlock": "사용 중: %1$s", + "create.blockzapper.componentUpgrades": "부품:", + "create.blockzapper.component.body": "몸체", "create.blockzapper.component.amplifier": "증폭기", - "create.blockzapper.component.accelerator": "가속기", - "create.blockzapper.component.retriever": "회수기", + "create.blockzapper.component.accelerator": "가속장치", + "create.blockzapper.component.retriever": "회수장치", "create.blockzapper.component.scope": "스코프", "create.blockzapper.componentTier.none": "없음", "create.blockzapper.componentTier.brass": "황동", - "create.blockzapper.componentTier.chromatic": "혼돈의 결정체", - "create.blockzapper.leftClickToSet": "좌클릭으로 블록 설정하기", - "create.blockzapper.empty": "블록이 없습니다!", + "create.blockzapper.componentTier.chromatic": "혼돈", + "create.blockzapper.leftClickToSet": "왼쪽 버튼으로 블록을 선택할 수 있습니다", + "create.blockzapper.empty": "블록이 인벤토리에 없습니다!", - "create.minecart_coupling.two_couplings_max": "광산 수레는 최대 2개의 커플링만 가질 수 있습니다", - "create.minecart_coupling.unloaded": "열차 일부분이 로딩되지 않은 청크에 있는 것 같습니다", - "create.minecart_coupling.no_loops": "커플링은 반복할 수 없습니다", - "create.minecart_coupling.removed": "광산 수레에서 모든 커플링을 제거했습니다.", - "create.minecart_coupling.too_far": "광산 수레들이 너무 멀리 떨어져 있습니다", + "create.minecart_coupling.two_couplings_max": "2개 이상의 이음쇠를 연결할 수는 없습니다", + "create.minecart_coupling.unloaded": "일부분이 불러와지지 않은 청크에 있는 것 같습니다", + "create.minecart_coupling.no_loops": "고리 모양으로 연결할 수는 없습니다", + "create.minecart_coupling.removed": "이 광산 수레에 연결되어 있는 이음쇠를 전부 제거했습니다", + "create.minecart_coupling.too_far": "너무 멀리 떨어져 있습니다", "create.contraptions.movement_mode": "이동 설정", - "create.contraptions.movement_mode.move_place": "멈췄을때 항상 블록을 설치함", - "create.contraptions.movement_mode.move_place_returned": "멈췄을떄 최초 위치에서만 블록을 설치함", - "create.contraptions.movement_mode.move_never_place": "멈춰도 블록을 설치하지 않음", - "create.contraptions.movement_mode.rotate_place": "멈췄을때 항상 블록을 설치함", - "create.contraptions.movement_mode.rotate_place_returned": "멈췄을떄 최초 위치에서만 블록을 설치함", - "create.contraptions.movement_mode.rotate_never_place": "멈춰도 블록을 설치하지 않음", - "create.contraptions.cart_movement_mode": "수레 장치 이동 설정", - "create.contraptions.cart_movement_mode.rotate": "장치가 항상 전방을 향함", - "create.contraptions.cart_movement_mode.rotate_paused": "수레가 회전할때 장치 행동을 멈춤", - "create.contraptions.cart_movement_mode.rotation_locked": "장치가 회전하지 않음", + "create.contraptions.movement_mode.move_place": "부착된 블록이 멈춰있을 때만 설치되어 있게 됨", + "create.contraptions.movement_mode.move_place_returned": "부착된 블록이 시작 위치에서만 설치되어 있게 됨", + "create.contraptions.movement_mode.move_never_place": "부착기가 파괴되었을 때만 부착된 블록이 설치되어 있게 됨", + "create.contraptions.movement_mode.rotate_place": "부착된 블록이 멈춰있을 때만 설치되어 있게 됨", + "create.contraptions.movement_mode.rotate_place_returned": "부착된 블록이 초기 각도 근처에서만 설치되어 있게 됨", + "create.contraptions.movement_mode.rotate_never_place": "부착기가 파괴되었을 때만 부착된 블록이 설치되어 있게 됨", + "create.contraptions.cart_movement_mode": "수레 장치 설정", + "create.contraptions.cart_movement_mode.rotate": "방향 회전", + "create.contraptions.cart_movement_mode.rotate_paused": "수레의 방향이 바뀌면 장치가 정지", + "create.contraptions.cart_movement_mode.rotation_locked": "방향 고정", "create.contraptions.windmill.rotation_direction": "회전 방향", - "create.contraptions.clockwork.clock_hands": "시계 바늘", - "create.contraptions.clockwork.hour_first": "시침 먼저", - "create.contraptions.clockwork.minute_first": "분침 먼저", - "create.contraptions.clockwork.hour_first_24": "24시간 바늘 먼저", + "create.contraptions.clockwork.clock_hands": "시계침", + "create.contraptions.clockwork.hour_first": "시침", + "create.contraptions.clockwork.minute_first": "분침", + "create.contraptions.clockwork.hour_first_24": "24시간", "create.logistics.filter": "필터", - "create.logistics.recipe_filter": "조합법 필터", + "create.logistics.recipe_filter": "제작법 필터", "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.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.gui.goggles.generator_stats": "발동 상태:", - "create.gui.goggles.kinetic_stats": "가동 상태:", - "create.gui.goggles.at_current_speed": "현재 에너지량", - "create.gui.goggles.base_value": "기본 수치", - "create.gui.gauge.info_header": "게이지 정보:", + "create.gui.goggles.generator_stats": "동적 근원 상태:", + "create.gui.goggles.kinetic_stats": "동적 장치 상태:", + "create.gui.goggles.at_current_speed": "(현재 속도에서)", + "create.gui.goggles.pole_length": "연장대 길이:", + "create.gui.goggles.fluid_container": "액체 저장 정보:", + "create.gui.goggles.fluid_container.capacity": "수용량: ", + "create.gui.assembly.exception": "장치를 가동할 수 없습니다:", + "create.gui.assembly.exception.unmovableBlock": "[%1$s,%2$s,%3$s]에 움직일 수 없는 블록(%4$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.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.goggles.contraptions.unmovable_block": "움직일 수 없는 블록: (%d, %d, %d)의 \"%s\"", - "create.gui.adjustable_crate.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.adjustable_crate.title": "조절식 상자", "create.gui.adjustable_crate.storageSpace": "저장 공간", - "create.gui.stockpile_switch.title": "수량 스위치", - "create.gui.stockpile_switch.invert_signal": "신호 반전", - "create.gui.stockpile_switch.move_to_lower_at": "최소 신호 발동 비율:%1$s%%", - "create.gui.stockpile_switch.move_to_upper_at": "최소 신호 유지 비율:%1$s%%", - "create.gui.sequenced_gearshift.title": "순서 기어쉬프트", - "create.gui.sequenced_gearshift.instruction": "설명", + "create.gui.stockpile_switch.title": "물량 감지기", + "create.gui.stockpile_switch.invert_signal": "신호 전환", + "create.gui.stockpile_switch.move_to_lower_at": "아이템이 차지하는 비율이 %1$s%% 이하일 때 신호", + "create.gui.stockpile_switch.move_to_upper_at": "아이템이 차지하는 비율이 %1$s%% 이상일 때 신호", + "create.gui.sequenced_gearshift.title": "순서화 전환기", + "create.gui.sequenced_gearshift.instruction": "지시", + "create.gui.sequenced_gearshift.instruction.turn_angle.descriptive": "각도 회전", "create.gui.sequenced_gearshift.instruction.turn_angle": "회전", "create.gui.sequenced_gearshift.instruction.turn_angle.angle": "각도", + "create.gui.sequenced_gearshift.instruction.turn_distance.descriptive": "피스톤/도르래/다리 장치를 회전 이동", "create.gui.sequenced_gearshift.instruction.turn_distance": "피스톤", "create.gui.sequenced_gearshift.instruction.turn_distance.distance": "거리", - "create.gui.sequenced_gearshift.instruction.wait": "정지", - "create.gui.sequenced_gearshift.instruction.wait.duration": "지속시간", - "create.gui.sequenced_gearshift.instruction.end": "마침", + "create.gui.sequenced_gearshift.instruction.delay.descriptive": "지연 시간", + "create.gui.sequenced_gearshift.instruction.delay": "지연", + "create.gui.sequenced_gearshift.instruction.delay.duration": "시간", + "create.gui.sequenced_gearshift.instruction.end.descriptive": "종료", + "create.gui.sequenced_gearshift.instruction.end": "종료", + "create.gui.sequenced_gearshift.instruction.await.descriptive": "새로운 레드스톤 신호가 전달될 때까지 대기", + "create.gui.sequenced_gearshift.instruction.await": "대기", "create.gui.sequenced_gearshift.speed": "속도, 방향", - "create.gui.sequenced_gearshift.speed.forward": "입력된 속도, 그대로 회전", - "create.gui.sequenced_gearshift.speed.forward_fast": "입력된 속도의 2배, 그대로 회전", - "create.gui.sequenced_gearshift.speed.back": "입력된 속도, 반대로 회전", - "create.gui.sequenced_gearshift.speed.back_fast": "입력된 속도의 2배, 반대로 회전", + "create.gui.sequenced_gearshift.speed.forward": "입력 속도, 그대로 회전", + "create.gui.sequenced_gearshift.speed.forward_fast": "입력 속도의 2배, 그대로 회전", + "create.gui.sequenced_gearshift.speed.back": "입력 속도, 반대로 회전", + "create.gui.sequenced_gearshift.speed.back_fast": "입력 속도의 2배, 반대로 회전", - "create.schematicAndQuill.dimensions": "청사진 크기: %1$sx%2$sx%3$s", - "create.schematicAndQuill.firstPos": "첫번쨰 위치 지정됨.", - "create.schematicAndQuill.secondPos": "두번째 위치 지정됨.", - "create.schematicAndQuill.noTarget": "[Ctrl]을 눌러 공기 블록을 선택하기.", - "create.schematicAndQuill.abort": "위치 제거됨.", - "create.schematicAndQuill.title": "청사진 이름", - "create.schematicAndQuill.convert": "저장하고 바로 설치하기", - "create.schematicAndQuill.fallbackName": "내 청사진", - "create.schematicAndQuill.saved": "%1$s로 저장됨", + "create.schematicAndQuill.dimensions": "설계도 크기: %1$sx%2$sx%3$s", + "create.schematicAndQuill.firstPos": "첫 번째 위치를 설정했습니다.", + "create.schematicAndQuill.secondPos": "두 번째 위치를 설정했습니다.", + "create.schematicAndQuill.noTarget": "[Ctrl]을(를) 누르면 허공을 선택할 수 있습니다.", + "create.schematicAndQuill.abort": "위치 설정을 제거했습니다.", + "create.schematicAndQuill.title": "설계도 이름:", + "create.schematicAndQuill.convert": "저장하고 즉시 적용", + "create.schematicAndQuill.fallbackName": "My Schematic", + "create.schematicAndQuill.saved": "%1$s으(로) 저장했습니다", - "create.schematic.invalid": "[!] 없는 아이템 - 청사진 테이블을 이용하세요", + "create.schematic.invalid": "[!] 잘못된 아이템 - 설계도 탁자를 사용하세요", "create.schematic.position": "위치", "create.schematic.rotation": "회전", - "create.schematic.rotation.none": "없음", - "create.schematic.rotation.cw90": "90도 시계방향 회전", - "create.schematic.rotation.cw180": "180도 시계방향 회전", - "create.schematic.rotation.cw270": "270도 시계방향 회전", - "create.schematic.mirror": "거울", - "create.schematic.mirror.none": "없음", + "create.schematic.rotation.none": "기본", + "create.schematic.rotation.cw90": "시계방향으로 90° 회전", + "create.schematic.rotation.cw180": "시계방향으로 180° 회전", + "create.schematic.rotation.cw270": "시계방향으로 270° 회전", + "create.schematic.mirror": "대칭 이동", + "create.schematic.mirror.none": "기본", "create.schematic.mirror.frontBack": "전-후", "create.schematic.mirror.leftRight": "좌-우", - "create.schematic.tool.deploy": "전개", - "create.schematic.tool.move": "X/Z좌표 이동", - "create.schematic.tool.movey": "Y좌표 이동", + "create.schematic.tool.deploy": "배치", + "create.schematic.tool.move": "X/Z 좌표 이동", + "create.schematic.tool.movey": "Y 좌표 이동", "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.move.description.0": "청사진을 수평 이동시킵니다.", - "create.schematic.tool.move.description.1": "청사진을 보고 [CTRL]-스크롤로 밉니다.", + "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.move.description.0": "설계도가 수평 이동합니다.", + "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.0": "설계도가 수직 이동합니다.", + "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.0": "구조물을 바로 배치합니다.", + "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.maxAllowedSize": "최대 청사진 파일 크기는:", + "create.schematics.uploadTooLarge": "설계도가 서버에서 지정한 제한을 초과합니다...", + "create.schematics.maxAllowedSize": "최대 설계도 크기:", - "create.gui.schematicTable.title": "청사진 테이블", "create.gui.schematicTable.refresh": "파일 새로고침", "create.gui.schematicTable.open_folder": "폴더 열기", - "create.gui.schematicTable.availableSchematics": "사용가능한 청사진", - "create.gui.schematicTable.noSchematics": "저장된 청사진 없음", - "create.gui.schematicTable.uploading": "업로딩 중...", - "create.gui.schematicTable.finished": "업로드 완료!", - "create.gui.schematicannon.title": "청사진 대포", - "create.gui.schematicannon.listPrinter": "재료 목록 프린터", - "create.gui.schematicannon.gunpowderLevel": "화약 용량 %1$s%%", - "create.gui.schematicannon.shotsRemaining": "남은 발포 수 : %1$s", - "create.gui.schematicannon.shotsRemainingWithBackup": "화약 여분: %1$s", - "create.gui.schematicannon.optionEnabled": "현재 활성화 됨", - "create.gui.schematicannon.optionDisabled": "현재 비활성화 됨", - "create.gui.schematicannon.showOptions": "대포 설치 설정 열기", - "create.gui.schematicannon.option.dontReplaceSolid": "온전한 블록을 대체하지 않음", - "create.gui.schematicannon.option.replaceWithSolid": "온전한 블록을 재료로 대체함", - "create.gui.schematicannon.option.replaceWithAny": "온전한 블록을 아무 재료로 대체함", - "create.gui.schematicannon.option.replaceWithEmpty": "온전한 블록을 공기로 채움", - "create.gui.schematicannon.option.skipMissing": "부족한 블록을 무시하고 진행", - "create.gui.schematicannon.option.skipTileEntities": "타일 엔티티를 보호", - "create.gui.schematicannon.slot.gunpowder": "화약을 넣어 대포 연료를 채우세요", - "create.gui.schematicannon.slot.listPrinter": "책을 넣어 건축 재료 체크리스트를 인쇄하세요", - "create.gui.schematicannon.slot.schematic": "여기에 청사진을 넣으세요. 건설 구역이 설정되어 있어야 합니다.", - "create.gui.schematicannon.option.skipMissing.description": "만약 대포가 설치에 필요한 블록을 찾지 못할 경우,건너뛰고 다음 블록 설치를 진행합니다.", - "create.gui.schematicannon.option.skipTileEntities.description": "대포가 상세정보가 든 상자같은 타일 엔티티 설치를 무시합니다.", - "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.schematicTable.title": "설계도 탁자", + "create.gui.schematicTable.availableSchematics": "사용 가능한 설계도", + "create.gui.schematicTable.noSchematics": "저장된 설계도가 없습니다", + "create.gui.schematicTable.uploading": "전송 중...", + "create.gui.schematicTable.finished": "전송 완료!", + "create.gui.schematicannon.title": "설계대포", + "create.gui.schematicannon.listPrinter": "재료 목록 인쇄", + "create.gui.schematicannon.gunpowderLevel": "화약: %1$s%%", + "create.gui.schematicannon.shotsRemaining": "남은 발포 수: %1$s", + "create.gui.schematicannon.shotsRemainingWithBackup": "남은 화약을 포함한 발포 수: %1$s", + "create.gui.schematicannon.optionEnabled": "활성화되어 있습니다", + "create.gui.schematicannon.optionDisabled": "비활성화되어 있습니다", + "create.gui.schematicannon.showOptions": "설치 설정", + "create.gui.schematicannon.option.dontReplaceSolid": "고체 블록을 대체하지 않습니다", + "create.gui.schematicannon.option.replaceWithSolid": "고체 블록을 고체 블록으로 대체합니다", + "create.gui.schematicannon.option.replaceWithAny": "고체 블록을 아무 블록으로 대체합니다", + "create.gui.schematicannon.option.replaceWithEmpty": "고체 블록을 공기로 대체합니다", + "create.gui.schematicannon.option.skipMissing": "부족한 아이템은 건너뜁니다", + "create.gui.schematicannon.option.skipTileEntities": "정보 블록을 보호합니다", + "create.gui.schematicannon.slot.gunpowder": "여기에 화약을 넣으면 대포에 연료를 채울 수 있습니다", + "create.gui.schematicannon.slot.listPrinter": "여기에 책을 넣으면 재료 목록이 불러와 집니다", + "create.gui.schematicannon.slot.schematic": "여기에 설계도를 넣으면 대포가 설계도대로 블록을 발포합니다. 설계도는 특정한 위치에 배치되어 있어야 합니다.", + "create.gui.schematicannon.option.skipMissing.description": "대포가 배치에 필요한 블록을 찾을 수 없는 경우, 그 블록을 건너뛰고 다음 위치에 블록을 설치합니다.", + "create.gui.schematicannon.option.skipTileEntities.description": "대포가 상자 같은 정보를 가진 블록을 대체하지 않습니다.", + "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.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": "중단됨", - "create.schematicannon.status.noGunpowder": "화약이 부족함", - "create.schematicannon.status.targetNotLoaded": "블록이 준비되지 않음", - "create.schematicannon.status.targetOutsideRange": "목표가 너무 멀리 떨어져 있습니다.", - "create.schematicannon.status.searching": "검색 중", + "create.schematicannon.status.paused": "일시 중지", + "create.schematicannon.status.stopped": "중단", + "create.schematicannon.status.noGunpowder": "화약이 부족합니다", + "create.schematicannon.status.targetNotLoaded": "목표가 불러와지지 않았습니다", + "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.schematicInvalid": "청사진 없음", - "create.schematicannon.status.schematicNotPlaced": "청사진이 전개되지 않음", - "create.schematicannon.status.schematicExpired": "청사진 파일이 제거됨", + "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.gui.filter.blacklist": "블랙리스트", - "create.gui.filter.blacklist.description": "위 목록에 맞지않는 아이템이면 통과합니다. 빈 블랙리스트는 모두 통과시킵니다.", - "create.gui.filter.whitelist": "화이트리스트", - "create.gui.filter.whitelist.description": "위 목록에 맞는 아이템이면 통과합니다. 빈 화이트리스트는 모두 통과시키지 않습니다.", - "create.gui.filter.respect_data": "상세정보 일치", - "create.gui.filter.respect_data.description": "위 목록 아이템의 내구도, 마법부여, 그리고 다른 NBT와 일치할 때 통과시킵니다.", - "create.gui.filter.ignore_data": "상세정보 무시", - "create.gui.filter.ignore_data.description": "상세정보와 상관없이 아이템 종류만 일치한다면 통과시킵니다.", + "create.materialChecklist": "재료 목록", + "create.materialChecklist.blocksNotLoaded": "* 경고 *\n\n관련된 청크가 불러와지지 않아 재료 목록이 부정확할 수 있습니다.", - "create.item_attributes.placeable": "설치할 수 있음", - "create.item_attributes.placeable.inverted": "설치할 수 없음", - "create.item_attributes.consumable": "먹을 수 있음", - "create.item_attributes.consumable.inverted": "먹을 수 없음", - "create.item_attributes.smeltable": "구워질 수 있음", - "create.item_attributes.smeltable.inverted": "구워질 수 없음", - "create.item_attributes.washable": "세척될 수 있음", - "create.item_attributes.washable.inverted": "세척될 수 없음", - "create.item_attributes.smokable": "훈연될 수 있음", - "create.item_attributes.smokable.inverted": "훈연될 수 없음", - "create.item_attributes.crushable": "분쇄될 수 있음", - "create.item_attributes.crushable.inverted": "분쇄될 수 없음", - "create.item_attributes.blastable": "용광로에 녹일 수 있음", - "create.item_attributes.blastable.inverted": "용광로에 녹일 수 없음", - "create.item_attributes.enchanted": "마법부여됨", - "create.item_attributes.enchanted.inverted": "마법부여되지 않음", - "create.item_attributes.damaged": "내구도가 닮", - "create.item_attributes.damaged.inverted": "내구도가 닳지 않음", - "create.item_attributes.badly_damaged": "심각하게 내구도가 닮", - "create.item_attributes.badly_damaged.inverted": "심각하게 내구도가 닳지 않음", - "create.item_attributes.not_stackable": "겹쳐질 수 없음", - "create.item_attributes.not_stackable.inverted": "겹쳐질 수 있음", - "create.item_attributes.equipable": "장착할 수 있음", - "create.item_attributes.equipable.inverted": "장착할 수 없음", - "create.item_attributes.furnace_fuel": "화로 연료로 쓸 수 있음", - "create.item_attributes.furnace_fuel.inverted": "화로 연료로 쓸 수 없음", - "create.item_attributes.in_tag": "%1$s로 등록됨", - "create.item_attributes.in_tag.inverted": "%1$s로 등록되지 않음", - "create.item_attributes.in_item_group": "%1$s탭에 속함", - "create.item_attributes.in_item_group.inverted": "%1$s탭에 속함", - "create.item_attributes.added_by": "%1$s모드가 추가함", - "create.item_attributes.added_by.inverted": "%1$s모드가 추가하지 않음", + "create.gui.filter.deny_list": "금지", + "create.gui.filter.deny_list.description": "위의 아이템과 일치하지 않는 아이템만 통과됩니다. 위에 아무 아이템도 없다면 모든 아이템이 다 통과됩니다.", + "create.gui.filter.allow_list": "허가", + "create.gui.filter.allow_list.description": "위의 아이템과 일치하는 아이템만 통과됩니다. 위에 아무 아이템도 없다면 모든 아이템이 다 통과할 수 없게 됩니다.", + "create.gui.filter.respect_data": "정보 존중", + "create.gui.filter.respect_data.description": "아이템의 내구도나 마법 부여, 여려가지 특성이 일치하는 아이템만 위의 아이템과 일치하는 아이템으로 취급합니다.", + "create.gui.filter.ignore_data": "정보 무시", + "create.gui.filter.ignore_data.description": "아이템의 특성에 상관없이 같은 아이템이라면 위의 아이템과 일치하는 아이템으로 취급합니다.", - "create.gui.attribute_filter.no_selected_attributes": "속성이 선택되지 않음", - "create.gui.attribute_filter.selected_attributes": "선택된 속성:", - "create.gui.attribute_filter.add_attribute": "리스트에 속성을 추가합니다", - "create.gui.attribute_filter.add_inverted_attribute": "리스트에 반대 속성을 추가합니다.", - "create.gui.attribute_filter.whitelist_disjunctive": "화이트리스트 (최소)", - "create.gui.attribute_filter.whitelist_disjunctive.description": "아이템이 선택된 속성 중 하나라도 가지고 있다면 통과시킵니다.", - "create.gui.attribute_filter.whitelist_conjunctive": "화이트리스트 (모두)", - "create.gui.attribute_filter.whitelist_conjunctive.description": "아이템이 선택된 속성 모두를 가지고 있어야 통과시킵니다.", - "create.gui.attribute_filter.blacklist": "블랙리스트", - "create.gui.attribute_filter.blacklist.description": "아이템이 선택된 속성이 없다면 통과시킵니다.", - "create.gui.attribute_filter.add_reference_item": "참고할 아이템을 추가하기", + "create.item_attributes.placeable": "설치할 수 있는", + "create.item_attributes.placeable.inverted": "설치할 수 없는", + "create.item_attributes.consumable": "먹을 수 있는", + "create.item_attributes.consumable.inverted": "먹을 수 없는", + "create.item_attributes.smeltable": "제련할 수 있는", + "create.item_attributes.smeltable.inverted": "제련할 수 없는", + "create.item_attributes.washable": "세척할 수 있는", + "create.item_attributes.washable.inverted": "세척할 수 없는", + "create.item_attributes.smokable": "훈연할 수 있는", + "create.item_attributes.smokable.inverted": "훈연할 수 없는", + "create.item_attributes.crushable": "분쇄할 수 있는", + "create.item_attributes.crushable.inverted": "분쇄할 수 없는", + "create.item_attributes.blastable": "용광로에 녹일 수 있는", + "create.item_attributes.blastable.inverted": "용광로에 녹일 수 없는", + "create.item_attributes.enchanted": "마법 부여가 되어있는", + "create.item_attributes.enchanted.inverted": "마법 부여가 되어있지 않은", + "create.item_attributes.damaged": "내구도가 닳은", + "create.item_attributes.damaged.inverted": "내구도가 닳지 않은", + "create.item_attributes.badly_damaged": "심하게 내구도가 닳은", + "create.item_attributes.badly_damaged.inverted": "심하게 내구도가 닳은", + "create.item_attributes.not_stackable": "겹쳐질 수 없는", + "create.item_attributes.not_stackable.inverted": "겹쳐질 수 있는", + "create.item_attributes.equipable": "장착할 수 있는", + "create.item_attributes.equipable.inverted": "장착할 수 없는", + "create.item_attributes.furnace_fuel": "화로의 연료로 사용할 수 있는", + "create.item_attributes.furnace_fuel.inverted": "화로의 연료로 사용할 수 없는", + "create.item_attributes.in_tag": "%1$s 태그가 있는", + "create.item_attributes.in_tag.inverted": "%1$s 태그가 없는", + "create.item_attributes.in_item_group": "'%1$s' 그룹에 속해 있는", + "create.item_attributes.in_item_group.inverted": "'%1$s' 그룹에 속해 있지 않은", + "create.item_attributes.added_by": "%1$s에 의해 추가된", + "create.item_attributes.added_by.inverted": "%1$s에 의해 추가되지 않은", + "create.item_attributes.has_enchant": "%1$s 마법이 부여된", + "create.item_attributes.has_enchant.inverted": "%1$s 마법이 부여되지 않은", + "create.item_attributes.color": "염색된 %1$s", + "create.item_attributes.color.inverted": "염색되지 않은 %1$s", + "create.item_attributes.max_enchanted": "마법 부여가 최고 등급인", + "create.item_attributes.max_enchanted.inverted": "마법 부여가 최고 등급이지 않은", + "create.item_attributes.fluid_container": "액체를 담을 수 있는", + "create.item_attributes.fluid_container.inverted": "액체를 담을 수 없는", + "create.item_attributes.has_fluid": "%1$s이(가) 담긴", + "create.item_attributes.has_fluid.inverted": "%1$s이(가) 담기지 않은", + "create.item_attributes.has_name": "사용자 지정 이름이 '%1$s'인", + "create.item_attributes.has_name.inverted": "사용자 지정 이름이 '%1$s'이지 않은", + "create.item_attributes.book_author": "%1$s이(가) 작성한", + "create.item_attributes.book_author.inverted": "%1$s이(가) 작성하지 않은", + "create.item_attributes.book_copy_original": "원본인", + "create.item_attributes.book_copy_original.inverted": "원본이지 않은", + "create.item_attributes.book_copy_first": "원본의 복사본인", + "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.astralsorcery_crystal": "%1$s 수정 속성을 가진", + "create.item_attributes.astralsorcery_crystal.inverted": "%1$s 수정 속성을 가지고 있지 않은", + "create.item_attributes.astralsorcery_constellation": "%1$s에 조율된", + "create.item_attributes.astralsorcery_constellation.inverted": "%1$s에 조율되지 않은", + "create.item_attributes.astralsorcery_perk_gem": "%1$s 퍽 속성을 가진", + "create.item_attributes.astralsorcery_perk_gem.inverted": "%1$s 퍽 속성을 가지고 있지 않은", + "create.item_attributes.astralsorcery_amulet": "%1$s이(가) 향상된", + "create.item_attributes.astralsorcery_amulet.inverted": "%1$s이(가) 향상되지 않은", - "create.tooltip.holdKey": "[%1$s]를 눌러 설명보기", - "create.tooltip.holdKeyOrKey": "[%1$s] 또는 [%2$s]를 눌러 설명보기", + "create.gui.attribute_filter.no_selected_attributes": "특성이 선택되지 않았습니다", + "create.gui.attribute_filter.selected_attributes": "특성 목록:", + "create.gui.attribute_filter.add_attribute": "선택한 특성을 목록에 추가", + "create.gui.attribute_filter.add_inverted_attribute": "선택한 특성에 반대되는 특성을 목록에 추가", + "create.gui.attribute_filter.allow_list_disjunctive": "허가 (아무)", + "create.gui.attribute_filter.allow_list_disjunctive.description": "목록에 나와 있는 특성이 하나라도 있는 아이템만 통과됩니다.", + "create.gui.attribute_filter.allow_list_conjunctive": "허가 (전부)", + "create.gui.attribute_filter.allow_list_conjunctive.description": "목록에 나와 있는 특성이 전부 있는 아이템만 통과됩니다.", + "create.gui.attribute_filter.deny_list": "금지", + "create.gui.attribute_filter.deny_list.description": "목록에 나와 있는 특성이 있지 않은 아이템만 통과됩니다.", + "create.gui.attribute_filter.add_reference_item": "참조할 아이템을 넣어주세요", + + "create.tooltip.holdForDescription": "[%1$s]을(를) 누르면 설명을 확인합니다", + "create.tooltip.holdForControls": "[%1$s]을(를) 누르면 조작법을 확인합니다", "create.tooltip.keyShift": "Shift", "create.tooltip.keyCtrl": "Ctrl", - "create.tooltip.speedRequirement": "회전속도 요구: %1$s", + "create.tooltip.speedRequirement": "요구 속도: %1$s", "create.tooltip.speedRequirement.none": "없음", "create.tooltip.speedRequirement.medium": "보통", "create.tooltip.speedRequirement.high": "빠름", - "create.tooltip.stressImpact": "피로도 부하: %1$s", + "create.tooltip.stressImpact": "동적 부하 영향력: %1$s", "create.tooltip.stressImpact.low": "낮음", "create.tooltip.stressImpact.medium": "보통", "create.tooltip.stressImpact.high": "높음", - "create.tooltip.stressImpact.overstressed": "과부하됨", - "create.tooltip.capacityProvided": "피로도 용량: %1$s", - "create.tooltip.capacityProvided.low": "적음", + "create.tooltip.stressImpact.overstressed": "과부하", + "create.tooltip.capacityProvided": "동적 부하 수용량: %1$s", + "create.tooltip.capacityProvided.low": "작음", "create.tooltip.capacityProvided.medium": "보통", "create.tooltip.capacityProvided.high": "큼", - "create.tooltip.capacityProvided.asGenerator": "", - "create.tooltip.generationSpeed": "%1$s %2$s만큼 발전함", - "create.tooltip.analogStrength": "레드스톤 출력: %1$s/15", + "create.tooltip.generationSpeed": "동력 생산: %1$s %2$s", + "create.tooltip.analogStrength": "전력: %1$s/15", - "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.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.logistics.when_multiple_outputs_available": "다수의 입력부가 존재할 때", - "create.mechanical_arm.selection_mode.round_robin": "순서대로 옮김", - "create.mechanical_arm.selection_mode.forced_round_robin": "순서대로 옮김(강제적)", - "create.mechanical_arm.selection_mode.prefer_first": "첫 포인트 우선", + "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.stack_size": "발사하는 아이템의 수량", - "create.tunnel.selection_mode.split": "분리", - "create.tunnel.selection_mode.forced_split": "강제 분리", - "create.tunnel.selection_mode.round_robin": "순차적 배분", - "create.tunnel.selection_mode.forced_round_robin": "강제 순차적 배분", - "create.tunnel.selection_mode.prefer_nearest": "가까운 곳 선호", - "create.tunnel.selection_mode.randomize": "랜덤", - "create.tunnel.selection_mode.synchronize": "입력부 동기화", + "create.logistics.when_multiple_outputs_available": "여러 출력구가 있을 때", - "create.tooltip.chute.header": "슈트 정보", - "create.tooltip.chute.items_move_down": "아이템이 아래로 이동합니다.", - "create.tooltip.chute.items_move_up": "아이템이 위로 이동합니다.", + "create.mechanical_arm.selection_mode.round_robin": "돌아가며 처리", + "create.mechanical_arm.selection_mode.forced_round_robin": "강제적으로 돌아가며 처리", + "create.mechanical_arm.selection_mode.prefer_first": "설정 순서 우선시", + + "create.tunnel.selection_mode.split": "분할", + "create.tunnel.selection_mode.forced_split": "강제적으로 분할", + "create.tunnel.selection_mode.round_robin": "돌아가며 처리", + "create.tunnel.selection_mode.forced_round_robin": "강제적으로 돌아가며 처리", + "create.tunnel.selection_mode.prefer_nearest": "가장 가까운 곳", + "create.tunnel.selection_mode.randomize": "무작위", + "create.tunnel.selection_mode.synchronize": "입력 동기화", + + "create.tooltip.chute.header": "도관 정보", + "create.tooltip.chute.items_move_down": "아이템이 아래로 이동", + "create.tooltip.chute.items_move_up": "아이템이 위로 이동", "create.tooltip.chute.no_fans_attached": "선풍기가 부착되지 않음", - "create.tooltip.chute.fans_push_up": "선풍기가 아래에서 밈", - "create.tooltip.chute.fans_push_down": "선풍기가 위에서 밈", - "create.tooltip.chute.fans_pull_up": "선풍기가 위에서 당김", - "create.tooltip.chute.fans_pull_down": "선풍기가 아래에서 당김", + "create.tooltip.chute.fans_push_up": "선풍기가 아래에서 밀어냄", + "create.tooltip.chute.fans_push_down": "선풍기가 위에서 밀어냄", + "create.tooltip.chute.fans_pull_up": "선풍기가 위에서 당겨냄", + "create.tooltip.chute.fans_pull_down": "선풍기가 아래에서 당겨냄", + "create.tooltip.chute.contains": "들어 있는 아이템: %1$s x%2$s", - "create.hint.mechanical_arm_no_targets.title": "목표 없음", - "create.hint.mechanical_arm_no_targets": "이 _기계 팔_은 _목표_가 설정되지 않은 것 같습니다. _기계 팔을 손에 들고_ 벨트, 아이템 거치대, 깔때기를 _우클릭_하여 목표로 지정하세요.", - "create.hint.horizontal_funnel.title": "깔때기가 수평임", - "create.hint.horizontal_funnel": "깔때기는 더이상 아이템을 _직접_ 이동시킬 수 없습니다. _벨트나 아이템 거치대_위에 깔때기를 설치하여 아이템을 이동시키세요.", - "create.hint.upward_funnel.title": "깔때기가 위를 바라보고 있음", - "create.hint.upward_funnel": "_기계 팔_, 선풍기가 부착된 _슈트_를 이용하거나, 혹은 아이템이 _던져져야만_ 이동시킬 수 있습니다. 아이템을 _수직으로_ 옮기고 싶다면 _슈트_를 사용해보세요.", - "create.hint.empty_bearing.title": "베어링 업데이트_", - "create.hint.empty_bearing": "_맨 손_으로 베어링을 _우클릭_하여 구조물을 _부착_하세요.", + "create.hint.hose_pulley.title": "무한한 공급량", + "create.hint.hose_pulley": "액체를 무한하다고 간주합니다.", + "create.hint.mechanical_arm_no_targets.title": "목표가 없음", + "create.hint.mechanical_arm_no_targets": "이 기계식 팔은 대상이 설정되어 있지 않습니다. 기계식 팔을 손에 들고 벨트, 아이템 거치대, 퍼널 등에 오른쪽 버튼을(를) 누르면 목표가 설정됩니다.", + "create.hint.empty_bearing.title": "회전장치 갱신", + "create.hint.empty_bearing": "비어있는 손으로 오른쪽 버튼을(를) 누르면 앞에 있는 구조물이 회전합니다.", + "create.hint.full_deployer.title": "전개장치에 아이템이 가득 참", + "create.hint.full_deployer": "이 _전개장치_에 아이템이 가득 찼습니다. 호퍼나 퍼널, 다른 수단을 써 아이템을 빼내세요.", - "create.gui.config.overlay1": "UNLOCALIZED: Hi :)", - "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", - "create.gui.config.overlay5": "UNLOCALIZED: Press ESC to exit this screen", - "create.gui.config.overlay6": "UNLOCALIZED: and save the new position", - "create.gui.config.overlay7": "UNLOCALIZED: Run /create overlay reset", - "create.gui.config.overlay8": "UNLOCALIZED: to reset to the default position", + "create.gui.config.overlay1": "안녕 :)", + "create.gui.config.overlay2": "이건 샘플 오버레이야.", + "create.gui.config.overlay3": "클릭하거나 드래그하면,", + "create.gui.config.overlay4": "이 미리 보기가 움직여.", + "create.gui.config.overlay5": "ESC를 누르면 이 화면에서 나가지고,", + "create.gui.config.overlay6": "변경된 위치가 저장될 거야.", + "create.gui.config.overlay7": "명령어 창에 /create overlay reset을 입력하면,", + "create.gui.config.overlay8": "오버레이가 기본 위치로 되돌아갈 거야.", "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.command.killTPSCommand.status.slowed_by.0": "[크리에이트]: 서버 틱이 현재 %s 밀리초만큼 느려졌습니다 :o", + "create.command.killTPSCommand.status.slowed_by.1": "[크리에이트]: 서버 틱이 지금 %s 밀리초만큼 느려졌습니다 >:)", + "create.command.killTPSCommand.status.slowed_by.2": "[크리에이트]: 서버 틱이 다시 정상 속도로 돌아왔습니다 :D", + "create.command.killTPSCommand.status.usage.0": "[크리에이트]: 사용법: /killtps stop 서버 틱 속도를 정상 속도로 되돌립니다", + "create.command.killTPSCommand.status.usage.1": "[크리에이트]: 사용법: /killtps start <틱 시간> 서버 틱 속도를 인위적으로 늦춥니다", + "create.command.killTPSCommand.argument.tickTime": "틱 시간", - "create.subtitle.schematicannon_launch_block": "청사진 대포가 발포함", - "create.subtitle.schematicannon_finish": "청사진 대포가 끝남", - "create.subtitle.slime_added": "슬라임이 철퍽거림", - "create.subtitle.mechanical_press_activation": "압착기가 가동됨", - "create.subtitle.mechanical_press_item_break": "금속이 부딫힘", - "create.subtitle.blockzapper_place": "블록이 순간이동됨", - "create.subtitle.blockzapper_confirm": "확인 효과음", - "create.subtitle.blockzapper_deny": "취소 효과음", - "create.subtitle.block_funnel_eat": "깔때기가 흡입함", - "create.subtitle.blaze_munch": "블레이즈가 행복하게 섭취함", + "create.contraption.minecart_contraption_too_big": "이 수레에 붙은 장치가 너무 큽니다", - "_": "->------------------------] 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.condition1": "When this", - "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", - "item.create.example_item.tooltip.action1": "These controls are displayed.", + "create.subtitle.schematicannon_launch_block": "설계대포가 무언가를 발포함", + "create.subtitle.schematicannon_finish": "설계대포가 알림을 울림", + "create.subtitle.slime_added": "철퍽거리는 소리", + "create.subtitle.mechanical_press_activation_belt": "기계식 압착기가 무언가를 압착함", + "create.subtitle.mechanical_press_activation": "기계식 압착기가 어딘가에 부딪히는 소리", + "create.subtitle.blockzapper_deny": "부정적인 효과음", + "create.subtitle.blockzapper_confirm": "긍정적인 효과음", + "create.subtitle.blockzapper_place": "휴대용 블록발사기가 블록을 발사함", + "create.subtitle.blaze_munch": "블레이즈 가열기가 무언가를 먹어 치움", - "block.create.andesite_encased_shaft.tooltip": "안산암 케이스 축", - "block.create.andesite_encased_shaft.tooltip.summary": "_크리에이티브_ _전용_ 아이템입니다. 축에 _안산암 케이스_를 씌운 것입니다. 케이스는 소모되지 않습니다.", - "block.create.brass_encased_shaft.tooltip": "황동 케이스 축", - "block.create.brass_encased_shaft.tooltip.summary": "_크리에이티브_ _전용_ 아이템입니다. 축에 _황동 케이스_를 씌운 것입니다. 케이스는 소모되지 않습니다.", + "_": "->------------------------] 아이템 설명 [------------------------<-", + + "item.create.example_item.tooltip": "예시 아이템 (그냥 설명만 확인하시면 됩니다)", + "item.create.example_item.tooltip.summary": "아이템에 대한 간단한 설명입니다. _밑줄_은 용어를 강조 표시합니다.", + "item.create.example_item.tooltip.condition1": "이것을 할 때", + "item.create.example_item.tooltip.behaviour1": "이것을 하면, 이 아이템이 이것을 수행합니다. (Shift을(를) 누르면 동작이 표시됩니다)", + "item.create.example_item.tooltip.condition2": "그리고, 이것을 할 때", + "item.create.example_item.tooltip.behaviour2": "원하는 만큼의 동작을 표시할 수 있습니다", + "item.create.example_item.tooltip.control1": "Ctrl을(를) 눌렀을 때", + "item.create.example_item.tooltip.action1": "이러한 조작법이 표시됩니다", "block.create.wooden_bracket.tooltip": "나무 지지대", - "block.create.wooden_bracket.tooltip.summary": "나무를 이용해 _축, 톱니바퀴, 파이프_를 꾸며보세요.", + "block.create.wooden_bracket.tooltip.summary": "_축_과 _톱니바퀴_, _액체관_을 장식할 수 있는 나무로 만든 지지대입니다.", "block.create.metal_bracket.tooltip": "금속 지지대", - "block.create.metal_bracket.tooltip.summary": "금속을 이용해 _축, 톱니바퀴, 파이프_를 꾸며보세요.", + "block.create.metal_bracket.tooltip.summary": "_축_과 _톱니바퀴_, _액체관_을 장식할 수 있는 견고한 공업용 지지대입니다.", - "block.create.andesite_casing.tooltip": "안산암 케이스", - "block.create.andesite_casing.tooltip.summary": "다양한 용도로 쓰일 수 있는 단순한 기계 케이스입니다. 장식용으로 써도 무방합니다. _축_이나 _벨트_에 _씌울 수 있습니다_.", + "block.create.copper_casing.tooltip": "구리 틀", + "block.create.copper_casing.tooltip.summary": "다양한 용도로 사용할 수 있는 견고한 틀입니다. 장식용으로 사용할 수 있습니다.", + "block.create.copper_casing.tooltip.condition1": "액체관에 사용했을 때", + "block.create.copper_casing.tooltip.behaviour1": "_액체관_에 _구리 틀_을 씌웁니다. 틀을 씌운 액체관은 연결이 고정되어, 주변 파이프의 변화에 반응하지 않습니다.", - "block.create.andesite_funnel.tooltip": "안산암 깔때기", - "block.create.andesite_funnel.tooltip.summary": "저장소간 아이템을 옮기는 일반적인 아이템 수송장치입니다. _레드스톤_ _신호_로 조정할 수 있습니다.", - "block.create.andesite_funnel.tooltip.condition1": "일반적인 사용처", - "block.create.andesite_funnel.tooltip.behaviour1": "_열린 면_은 _앞_에 있는 아이템을 가져오고 깔때기 _반대편_에 있는 _아이템 저장소_에 _옮겨 넣습니다_.", - "block.create.andesite_funnel.tooltip.condition2": "벨트, 아이템 거치대 등에 설치할 때", - "block.create.andesite_funnel.tooltip.behaviour2": "_장착된 장치_에 있는 아이템을 _가져가거나_, 반대편에서 아이템을 _가져옵니다_. 렌치를 이용하여 깔때기의 _방향_을 조정할 수 있습니다.", - "block.create.andesite_funnel.tooltip.condition3": "두 저장소사이에 수직으로 설치할 때", - "block.create.andesite_funnel.tooltip.behaviour3": "_아이템 칸이 없는_ 호퍼처럼 아이템을 _아래로_ 옮깁니다.", + "block.create.encased_fluid_pipe.tooltip": "틀을 씌운 액체관", + "block.create.encased_fluid_pipe.tooltip.summary": "_구리 틀_이 씌워진 액체관입니다.", - "block.create.andesite_tunnel.tooltip": "안산암 터널", - "block.create.andesite_tunnel.tooltip.summary": "벨트의 안전한 _덮개_이며, 벨트로 인한 구멍을 메울 훌륭한 수단입니다.", - "block.create.andesite_tunnel.tooltip.control1": "측면에서 렌치로 우클릭", - "block.create.andesite_tunnel.tooltip.action1": "터널에 창문이 존재할경우, _창문_ _셔터_를 조정합니다.", - - "block.create.brass_funnel.tooltip": "황동 깔기", - "block.create.brass_funnel.tooltip.summary": "저장소간 아이템을 옮기는 일반적인 아이템 수송장치입니다. _레드스톤_ _신호_로 조정할 수 있습니다. 필터도 넣을 수 있습니다.", - "block.create.brass_funnel.tooltip.condition1": "일반적인 사용처", - "block.create.brass_funnel.tooltip.behaviour1": "_열린 면_은 _앞_에 있는 아이템을 가져오고 깔때기 _반대편_에 있는 _아이템 저장소_에 _옮겨 넣습니다_.", - "block.create.brass_funnel.tooltip.condition2": "벨트, 아이템 거치대 등에 설치할 때", - "block.create.brass_funnel.tooltip.behaviour2": "_장착된 장치_에 있는 아이템을 _가져가거나_, 반대편에서 아이템을 _가져옵니다_. 렌치를 이용하여 깔때기의 _방향_을 조정할 수 있습니다.", - "block.create.brass_funnel.tooltip.condition3": "두 저장소사이에 수직으로 설치할 때", - "block.create.brass_funnel.tooltip.behaviour3": "_아이템 칸이 없는_ 호퍼처럼 아이템을 _아래로_ 옮깁니다.", - - "block.create.brass_tunnel.tooltip": "황동 터널", - "block.create.brass_tunnel.tooltip.summary": "벨트에 다양한 _필터링_, _분리_ 기능을 탑재해줄 _황동 터널_입니다.", - "block.create.brass_tunnel.tooltip.condition1": "측면에 순서대로 설치했을 때", - "block.create.brass_tunnel.tooltip.behaviour1": "_서로_ _연결된_ 황동 터널은 한 벨트의 아이템을 _다른 벨트로_ 옮길 수 있습니다.", - "block.create.brass_tunnel.tooltip.condition2": "필터링", - "block.create.brass_tunnel.tooltip.behaviour2": "_황동 터널_은 _입력_, _출력_필터를 설정할 수 있습니다. 터널 출력 필터에 _허용되지_ _않은_ 아이템은, _연결된_ _다른_ 터널로 옮겨집니다.", - "block.create.brass_tunnel.tooltip.condition3": "분리", - "block.create.brass_tunnel.tooltip.behaviour3": "_황동_ _터널_은 _연결된_ _벨트_에 아이템이 다양하게 _분배되도록_ 설정할 수 있습니다.", - "block.create.brass_tunnel.tooltip.control1": "측면에서 렌치로 우클릭", - "block.create.brass_tunnel.tooltip.action1": "터널에 창문이 존재할경우, _창문_ _셔터_를 조정합니다.", - "block.create.brass_tunnel.tooltip.control2": "상면에서 렌치로 우클릭", - "block.create.brass_tunnel.tooltip.action2": "연결된 _터널_의 분리 방식을 바꿉니다.", - - "block.create.copper_casing.tooltip": "구리 케이스", - "block.create.copper_casing.tooltip.summary": "다양한 용도로 쓰일 수 있는 견고한 기계 케이스입니다. 장식용으로 써도 무방합니다.", - "block.create.copper_casing.tooltip.condition1": "액체 파이프에 사용할 때", - "block.create.copper_casing.tooltip.behaviour1": "_액체_ _파이프_를 구리 케이스로 _덮습니다._ 케이스를 씌운 파이프는 _연결이 고정_되어, 다른 파이프와 상호작용하지 않습니다.", - - "block.create.encased_fluid_pipe.tooltip": "ENCASED FLUID PIPE", - "block.create.encased_fluid_pipe.tooltip.summary": "_구리 케이스_를 씌운 액체 파이프입니다.", - - "block.create.copper_valve_handle.tooltip": "구리 밸브 손잡이", - "block.create.copper_valve_handle.tooltip.summary": "_플레이어의_ _상호작용_이 필요한 정확한 _회전력_의 _근원_입니다. 근육통 주의하세요!", - "block.create.copper_valve_handle.tooltip.condition1": "사용할 때", - "block.create.copper_valve_handle.tooltip.behaviour1": "연결된 장치에 _회전력_을 _제공_합니다. 웅크리면 _반대로_ 회전시킵니다.", - - "block.create.fluid_pipe.tooltip": "FLUID PIPE", - "block.create.fluid_pipe.tooltip.summary": "_액체_를 수송시킬 때 쓰입니다. 액체를 옮기려면 _펌프_가 필요합니다.", - "block.create.fluid_pipe.tooltip.condition1": "액체 수송", - "block.create.fluid_pipe.tooltip.behaviour1": "_탱크_와 _대야_같은 _액체_ _저장소_에 연결할 수 있습니다. 노출된 파이프 구멍은 액체를 _흡입, 배출_할 수 있습니다. 누수에 주의하세요!", - "block.create.fluid_pipe.tooltip.control1": "렌치로 우클릭", - "block.create.fluid_pipe.tooltip.action1": "가능하면 파이프에 창문을 설치합니다.", - - - "block.create.hose_pulley.tooltip": "HOSE PULLEY", - "block.create.hose_pulley.tooltip.summary": "세계에 _많은 양_의 액체를 _배출_하거나 _흡수_하는데 쓰입니다.", - "block.create.hose_pulley.tooltip.condition1": "동력을 받을 때", - "block.create.hose_pulley.tooltip.behaviour1": "호스를 올리거나 내립니다. _호스의 위치_로 액체를 _채우거나 빼낼_ 높이가 정해집니다.", - "block.create.hose_pulley.tooltip.condition2": "액체가 도르래에 흡수될 때", - "block.create.hose_pulley.tooltip.behaviour2": "_호스 끝의 높이_에서 액체 블록을 _흡수_하기 시작합니다. _매우 많은 양의 액체_는 무한으로 간주됩니다.", - "block.create.hose_pulley.tooltip.condition3": "액체가 도르래에서 배출 될 때", - "block.create.hose_pulley.tooltip.behaviour3": "_호스 끝의 높이_에서 액체를 _채우기_ 시작합니다.", - - "block.create.fluid_tank.tooltip": "FLUID TANK", - "block.create.fluid_tank.tooltip.summary": "당신이 좋아하는 _액체_를 모두 _저장_하세요. 넓이와 높이를 조정할 수 있습니다.", - "block.create.fluid_tank.tooltip.condition1": "렌치로 우클릭", - "block.create.fluid_tank.tooltip.behaviour1": "창문 설정을 변경합니다.", - - "block.create.creative_fluid_tank.tooltip": "CREATIVE FLUID TANK", - "block.create.creative_fluid_tank.tooltip.summary": "이 액체 탱크는 모든 액체를 _무한정 복제_합니다. 넓이와 높이를 조정할 수 있습니다.", - "block.create.creative_fluid_tank.tooltip.condition1": "탱크에 액체가 들어있을 때", - "block.create.creative_fluid_tank.tooltip.behaviour1": "이 탱크에서 추출되는 액체는 _무한정 공급_됩니다. 이 탱크에 들어가는 액체는 _사라집니다_.", - "block.create.creative_fluid_tank.tooltip.condition2": "렌치로 우클릭", - "block.create.creative_fluid_tank.tooltip.behaviour2": "창문 설정을 변경합니다.", - - "block.create.fluid_valve.tooltip": "FLUID VALVE", - "block.create.fluid_valve.tooltip.summary": "파이프 속 액체의 흐름을 멈춥니다.", - "block.create.fluid_valve.tooltip.condition1": "설정가능한 흐름", - "block.create.fluid_valve.tooltip.behaviour1": "_회전력_은 밸브를 닫게만들어, 액체의 흐름을 _중지_시킵니다. _반대_ _방향의_ 회전력은 밸브를 다시 엽니다.", - - "block.create.mechanical_pump.tooltip": "MECHANICAL PUMP", - "block.create.mechanical_pump.tooltip.summary": "_회전력_을 가지고 액체를 파이프에서 _움직일_ _수_ _있게_ 합니다. 양방향 최대 범위가 있습니다. (기본설정은 16블록)", - "block.create.mechanical_pump.tooltip.condition1": "액체의 흐름", - "block.create.mechanical_pump.tooltip.behaviour1": "_회전력_이 파이프 안의 _액체_를 _움직이게_ 하는 압력을 발생시킵니다. 회전력의 방향을 _반전_시켜, 액체의 흐름을 _바꿀_ _수_ 있습니다.", - "block.create.mechanical_pump.tooltip.control1": "렌치로 우클릭", - "block.create.mechanical_pump.tooltip.action1": "_펌프_의 방향을 반전시켜, 흐름의 _기본_ _방향_을 바꿉니다.", - - "block.create.smart_fluid_pipe.tooltip": "SMART FLUID PIPE", - "block.create.smart_fluid_pipe.tooltip.summary": "_필터_가 있는 액체 파이프입니다. 어떤 액체가 지나갈 수 있는지 _특정_할 수 있습니다.", - "block.create.smart_fluid_pipe.tooltip.condition1": "액체가 흘러들어올 때", - "block.create.smart_fluid_pipe.tooltip.behaviour1": "_필터에 맞지 않는_ 액체는 멈춥니다.", - "block.create.smart_fluid_pipe.tooltip.condition2": "액체 용기에 접해있을 때", - "block.create.smart_fluid_pipe.tooltip.behaviour2": "_필터에 맞는_ 액체만 빼냅니다.", - - - "block.create.spout.tooltip": "SPOUT", - "block.create.spout.tooltip.summary": "액체 용기를 _리필_해주는 펌프입니다.", - "block.create.spout.tooltip.condition1": "액체 수송", - "block.create.spout.tooltip.behaviour1": "양동이나 물병같이 _액체를_ _담는_ _용기_가 아래에 있다면, 수도꼭지는 _자신이_ _가진_ _액체_로 채웁니다.", - "block.create.spout.tooltip.condition2": "액체 자동화", - "block.create.spout.tooltip.behaviour2": "수도꼭지가 _벨트_나 _아이템 거치대_위에 설치되어있다면, 아래를 지나가는 액체 용기와 _자동으로_ 반응합니다.", - - "block.create.item_drain.tooltip": "ITEM DRAIN", - "block.create.item_drain.tooltip.summary": "액체 용기를 _비우기위해_ 철창을 붙인 아이템 거치대입니다.", - "block.create.item_drain.tooltip.condition1": "액체 수송", - "block.create.item_drain.tooltip.behaviour1": "_양동이나 병같은_ 액체 용기가 옆에서 들어오면, 배수구는 자신의 용기에 액체를 _쏟아낼_ 것입니다. 아이템은 반대편으로 배출됩니다.", - - "block.create.mechanical_arm.tooltip": "MECHANICAL ARM", - "block.create.mechanical_arm.tooltip.summary": "_아이템_ 재배치를 위한 _고급_ _장치_입니다.", - "block.create.mechanical_arm.tooltip.condition1": "아이템 이동", - "block.create.mechanical_arm.tooltip.behaviour1": "_벨트_, _아이템 거치대_, _깔때기_, _기계_ _조합기_와 같은 접근가능한 인벤토리에서 아이템을 _가져오거나_ _놓을_ 수 있습니다.", - "block.create.mechanical_arm.tooltip.control1": "손에 있을 때", - "block.create.mechanical_arm.tooltip.action1": "_접근가능한_ _인벤토리_에 우클릭해서 기계 팔이 아이템을 _가져갈_ _곳_을 설정합니다. 한번 더 우클릭하여 아이템을 _놓을_ _곳_을 설정합니다.", - "block.create.mechanical_arm.tooltip.control2": "렌치를 들고 스크롤", - "block.create.mechanical_arm.tooltip.action2": "_기계_ _팔_이 아이템을 _놓을_ _패턴_을 설정합니다.", - - "block.create.copper_valve_handle.tooltip": "구리 밸브 손잡이", - "block.create.copper_valve_handle.tooltip.summary": "_플레이어의_ _상호작용_이 필요한 정확한 _회전력_의 _근원_입니다. 피곤해지지 않도록 주의하세요!", - "block.create.copper_valve_handle.tooltip.condition1": "사용할 때", - "block.create.copper_valve_handle.tooltip.behaviour1": "연결된 장치에 _회전력_을 _제공_합니다. 웅크리면 _반대로_ 회전시킵니다.", - - "block.create.seat.tooltip": "SEAT", - "block.create.seat.tooltip.summary": "앉아서 드라이브를 즐기세요! _움직이는 장치_에 _플레이어_를 _고정_시킵니다. 가구용으로도 좋습니다! 다양한 색깔이 존재합니다.", - "block.create.seat.tooltip.condition1": "좌석에 우클릭", - "block.create.seat.tooltip.behaviour1": "플레이어가 좌석에 _앉습니다_. _왼쪽 쉬프트_를 눌러 좌석에서 _일어섭니다_.", - - "block.create.chute.tooltip": "슈트", - "block.create.chute.tooltip.summary": "아이템을 _수직, 대각선으로_ 수송합니다. _아이템_ _저장소_에서 아이템을 뺴오거나 넣을 수 있습니다. _호퍼나 벨트_로 슈트의 옆면과 연결할 수 있습니다.", - "block.create.chute.tooltip.condition1": "선풍기 바람을 받을 때", - "block.create.chute.tooltip.behaviour1": "_선풍기_ _바람_을 받은 슈트는 아이템을 _위로_ 수송하거나, _벨트_, _아이템 거치대_에서 아이템을 빨아들일 수 있습니다", - - "block.create.depot.tooltip": "아이템 거치대", - "block.create.depot.tooltip.summary": "아이템을 _간편하게_ 두기에 좋은 블록입니다. 몇몇 장치에 상호작용 포인트를 제공합니다.", - "block.create.depot.tooltip.condition1": "우클릭", - "block.create.depot.tooltip.behaviour1": "_아이템 거치대_에서 아이템을 두거나 가져옵니다. _벨트_에 작용하는 블록, 장치도 _아이템 거치대_와 작용합니다.", + "block.create.seat.tooltip": "좌석", + "block.create.seat.tooltip.summary": "앉으세요! 이동하는 _장치_에 플레이어를 고정합니다. 가구로 사용해도 괜찮습니다! 다양한 색상으로 염색할 수 있습니다.", + "block.create.seat.tooltip.condition1": "좌석에다 오른쪽 버튼을 눌렀을 때", + "block.create.seat.tooltip.behaviour1": "플레이어가 _좌석_에 앉습니다. L-shift을(를) 누르면 좌석에서 일어납니다.", "item.create.blaze_cake.tooltip": "블레이즈 케이크", - "item.create.blaze_cake.tooltip.summary": "열심히 일하는 _블레이즈_ _버너_의 식사입니다. 그들을 더 화끈하게 만드세요!", + "item.create.blaze_cake.tooltip.summary": "열심히 일하는 _블레이즈 가열기_를 위한 맛있는 음식입니다. 화력 상승!", - "item.create.empty_blaze_burner.tooltip": "EMPTY BLAZE BURNER", - "item.create.empty_blaze_burner.tooltip.summary": "불타는 친구를 위한 작은 집입니다. 그들을 _좋은 곳_에 쓸 수 있을 겁니다.", - "item.create.empty_blaze_burner.tooltip.condition1": "블레이즈나 블레이즈 스포너에 사용했을 때", - "item.create.empty_blaze_burner.tooltip.behaviour1": "블레이즈를 _포획_합니다.", + "block.create.fluid_pipe.tooltip": "액체관", + "block.create.fluid_pipe.tooltip.summary": "_액체_를 수송할 수 있습니다. _액체_를 흐르게 만들려면 기계식 펌프가 필요합니다.", + "block.create.fluid_pipe.tooltip.condition1": "액체 이동", + "block.create.fluid_pipe.tooltip.behaviour1": "_탱크_나 _대야_ 같은 액체 저장소에 연결할 수 있습니다. 노출된 액체관의 구멍에서 액체를 흡수하거나 배출할 수 있습니다. 누출을 조심하세요!", + "block.create.fluid_pipe.tooltip.condition2": "스패너를 들고 오른쪽 버튼을 눌렀을 때", + "block.create.fluid_pipe.tooltip.behaviour2": "가능하다면, 액체관에 창을 냅니다.", - "item.create.wand_of_symmetry.tooltip": "SYMMETRY WAND", - "item.create.wand_of_symmetry.tooltip.summary": "설정된 반사 모드에 따라 블록 설치를 _똑같이_ _재현_합니다.", + "block.create.hose_pulley.tooltip": "액체관 도르래", + "block.create.hose_pulley.tooltip.summary": "액체를 _흡수_하거나 _배출_할 수 있습니다.", + "block.create.hose_pulley.tooltip.condition1": "동력을 받았을 때", + "block.create.hose_pulley.tooltip.behaviour1": "호스를 _올려_보내거나 _내려_보냅니다. 호스의 위치는 액체를 흡수하는 높이와 배출하는 높이를 결정합니다.", + "block.create.hose_pulley.tooltip.condition2": "도르래에서 액체가 당겨질 때", + "block.create.hose_pulley.tooltip.behaviour2": "아래로 내려간 _호스의 끝_에서 _액체를 흡수_하기 시작합니다. 매우 많은 양의 액체는 무한하다고 간주합니다.", + "block.create.hose_pulley.tooltip.condition3": "도르래에서 액체가 밀어질 때", + "block.create.hose_pulley.tooltip.behaviour3": "아래로 내려간 _호스의 끝_에서 _액체를 배출_하기 시작합니다.", + + "block.create.fluid_tank.tooltip": "액체 탱크", + "block.create.fluid_tank.tooltip.summary": "원하는 액체를 _저장_할 수 있습니다. _액체 탱크_끼리 연결하여, 탱크의 크기를 조절할 수 있습니다.", + "block.create.fluid_tank.tooltip.condition1": "스패너를 들고 오른쪽 버튼을 눌렀을 때", + "block.create.fluid_tank.tooltip.behaviour1": "탱크에 창을 제거하거나 창을 냅니다.", + + "block.create.creative_fluid_tank.tooltip": "크리에이티브 액체 탱크", + "block.create.creative_fluid_tank.tooltip.summary": "이 _액체 탱크_는 안에 들어간 액체를 무한대로 복제할 수 있습니다. 크리에이티브 액체 탱크끼리 연결하여, 탱크의 크기를 조절할 수 있습니다.", + "block.create.creative_fluid_tank.tooltip.condition1": "액체가 탱크 안에 있을 때", + "block.create.creative_fluid_tank.tooltip.behaviour1": "이 탱크는 탱크 안에 들어 있는 액체를 연결된 액체관에 무한대로 공급합니다. 이 탱크로 들어오는 액체는 모두 _사라집니다_.", + "block.create.creative_fluid_tank.tooltip.condition2": "스패너를 들고 오른쪽 버튼을 눌렀을 때", + "block.create.creative_fluid_tank.tooltip.behaviour2": "탱크에 창을 제거하거나 창을 냅니다.", + + "block.create.fluid_valve.tooltip": "액체 밸브", + "block.create.fluid_valve.tooltip.summary": "액체관을 따라 흐르는 액체의 흐름을 막습니다.", + "block.create.fluid_valve.tooltip.condition1": "흐름 조절", + "block.create.fluid_valve.tooltip.behaviour1": "_회전력_을 받으면 밸브가 닫혀, 액체가 흐르지 않게 됩니다. 반대 방향의 회전력을 받으면 밸브가 다시 열립니다.", + + "block.create.mechanical_pump.tooltip": "기계식 펌프", + "block.create.mechanical_pump.tooltip.summary": "_회전력_을 사용하여 _액체관_을 따라 액체를 흐르게 만듭니다. 양방향의 최대 범위가 정해져 있습니다. (기본적으로는 16블록입니다)", + "block.create.mechanical_pump.tooltip.condition1": "액체 흐름", + "block.create.mechanical_pump.tooltip.behaviour1": "_회전력_을 받으면 액체가 액체관을 통해 흐르도록 압력을 발생시킵니다. 반대 방향의 회전력을 받으면 액체가 흐르는 방향이 전환됩니다.", + "block.create.mechanical_pump.tooltip.control1": "스패너를 들고 오른쪽 버튼을 눌렀을 때", + "block.create.mechanical_pump.tooltip.action1": "_펌프_의 방향을 반대로 돌려, 흐름의 기본적인 방향을 전환합니다.", + + "block.create.smart_fluid_pipe.tooltip": "지능형 액체관", + "block.create.smart_fluid_pipe.tooltip.summary": "필터가 있는 _액체관_입니다. 액체관에 흐르는 액체를 설정할 수 있습니다.", + "block.create.smart_fluid_pipe.tooltip.condition1": "액체가 들어올 때", + "block.create.smart_fluid_pipe.tooltip.behaviour1": "액체가 _필터_와 일치하지 않는다면, 액체의 흐름을 막습니다.", + "block.create.smart_fluid_pipe.tooltip.condition2": "액체 저장소와 가까이 있을 때", + "block.create.smart_fluid_pipe.tooltip.behaviour2": "지능형 액체관이 저장소의 흐름에 시작에 있다면, 지능형 액체관은 필터와 일치하는 액체만 배출합니다.", + + "block.create.spout.tooltip": "주입기", + "block.create.spout.tooltip.summary": "아이템에 _액체_를 채워 넣는 장치입니다.", + "block.create.spout.tooltip.condition1": "액체 이동", + "block.create.spout.tooltip.behaviour1": "_양동이_나 _유리병_ 같은 액체가 담길 수 있는 아이템이 밑에 놓이면, 주입기가 저장된 액체를 주입합니다.", + "block.create.spout.tooltip.condition2": "액체 자동화", + "block.create.spout.tooltip.behaviour2": "_벨트_나 _아이템 거치대_ 위에 설치된 주입기는 액체가 담길 수 있는 아이템이 밑에 놓이면 자동으로 반응합니다.", + + "block.create.item_drain.tooltip": "흡수통", + "block.create.item_drain.tooltip.summary": "_액체가 담긴 아이템_을 흡수할 수 있는 철창이 박힌 통입니다", + "block.create.item_drain.tooltip.condition1": "액체 이동", + "block.create.item_drain.tooltip.behaviour1": "_물 양동이_나 _물병_ 같은 액체가 담긴 아이템이 퍼널을 통해 옆으로 들어오면, 액체가 담긴 아이템을 흡수하고, 흡수된 아이템을 반대쪽으로 튕겨냅니다.", + + "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.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_blockzapper.tooltip": "BLOCKZAPPER", - "item.create.handheld_blockzapper.tooltip.summary": "멀리있는 블록을 교체, 설치하는 놀라운 도구입니다.", - "item.create.handheld_blockzapper.tooltip.control1": "블록을 보고 좌클릭", - "item.create.handheld_blockzapper.tooltip.action1": "이 도구로 설치할 블록을 설정합니다.", - "item.create.handheld_blockzapper.tooltip.control2": "블록을 보고 우클릭", - "item.create.handheld_blockzapper.tooltip.action2": "해당 위치에 설정된 블록으로 설치하거나 교체합니다.", - "item.create.handheld_blockzapper.tooltip.control3": "웅크린 상태에서 우클릭", - "item.create.handheld_blockzapper.tooltip.action3": "_설정_ _창_을 엽니다.", + "item.create.handheld_blockzapper.tooltip": "블록발사기", + "item.create.handheld_blockzapper.tooltip.summary": "먼 곳에다 블록을 설치할 수 있는 특이한 장치입니다.", + "item.create.handheld_blockzapper.tooltip.control1": "블록에다 왼쪽 버튼을 눌렀을 때", + "item.create.handheld_blockzapper.tooltip.action1": "선택한 블록이 발사할 블록으로 설정됩니다.", + "item.create.handheld_blockzapper.tooltip.control2": "블록에다 오른쪽 버튼을 눌렀을 때", + "item.create.handheld_blockzapper.tooltip.action2": "블록이 설치되거나 대체됩니다.", + "item.create.handheld_blockzapper.tooltip.control3": "웅크리고 오른쪽 버튼을 눌렀을 때", + "item.create.handheld_blockzapper.tooltip.action3": "_설정 창_이 열립니다.", - "item.create.handheld_worldshaper.tooltip": "HANDHELD WORLDSHAPER", - "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": "휴대용 세계성형기", + "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": "TREE FERTILIZER", - "item.create.tree_fertilizer.tooltip.summary": "일반적인 나무 종류들의 성장을 촉진시킬 강력한 미네랄의 혼합물입니다.", + "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.deforester.tooltip": "DEFORESTER", - "item.create.deforester.tooltip.summary": "수 초 만에 나무를 쓰러뜨리는 _놀라운_ _도끼_입니다.", + "item.create.deforester.tooltip": "삼림 파괴기", + "item.create.deforester.tooltip.summary": "단숨에 나무를 절단할 수 있는 _빛의 도끼_입니다.", - "item.create.extendo_grip.tooltip": "EXTENDO GRIP", - "item.create.extendo_grip.tooltip.summary": "띠요오옹! 사용자의 _사거리_를 늘려줍니다.", - "item.create.extendo_grip.tooltip.condition1": "다른 손에 있을 때", - "item.create.extendo_grip.tooltip.behaviour1": "_기존_ _손_에있는 아이템의 사거리를 늘립니다.", + "item.create.extendo_grip.tooltip": "연장용 팔", + "item.create.extendo_grip.tooltip.summary": "띠요오용! 사용자의 _범위_가 많이 늘어납니다.", + "item.create.extendo_grip.tooltip.condition1": "주로 사용하지 않는 손에 있을 때", + "item.create.extendo_grip.tooltip.behaviour1": "_주로 사용하는 손_에 있는 아이템의 범위가 증가합니다.", - "item.create.filter.tooltip": "FILTER", - "item.create.filter.tooltip.summary": "장치의 _입력_과 _출력_을 필터 _아이템_ 목록에 따라 _조정_합니다.", + "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.behaviour1": "_설정_에 따라 아이템의 흐름을 제어합니다.", + "item.create.filter.tooltip.condition2": "오른쪽 버튼을 눌렀을 때", + "item.create.filter.tooltip.behaviour2": "_설정 창_이 열립니다.", - "item.create.attribute_filter.tooltip": "ATTRIBUTE FILTER", - "item.create.attribute_filter.tooltip.summary": "장치의 _입력_과 _출력_을 필터 _속성_ 목록에 따라 _조정_합니다.", + "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.behaviour1": "_설정_에 따라 아이템의 흐름을 제어합니다.", + "item.create.attribute_filter.tooltip.condition2": "오른쪽 버튼을 눌렀을 때", + "item.create.attribute_filter.tooltip.behaviour2": "_설정 창_이 열립니다.", - "item.create.empty_schematic.tooltip": "EMPTY SCHEMATIC", - "item.create.empty_schematic.tooltip.summary": "조합 재료로 쓰이거나 청사진 테이블에서 청사진을 불러올 때 쓰입니다.", + "item.create.empty_schematic.tooltip": "비어있는 설계도", + "item.create.empty_schematic.tooltip.summary": "_설계도 탁자_에서 설계도를 불러올 수 있습니다.", - "item.create.schematic.tooltip": "SCHEMATIC", - "item.create.schematic.tooltip.summary": "세계에 구조물을 _홀로그램으로_ 불러와 지정하고 설치합니다. 지정된 홀로그램은 _청사진_ _대포_의 _작업_ _영역_이 됩니다.", - "item.create.schematic.tooltip.condition1": "들고 있을 떄", - "item.create.schematic.tooltip.behaviour1": "UI의 도구로 _변경/설치_ 할 수 있습니다.", - "item.create.schematic.tooltip.control1": "웅크린 상태에서 우클릭", - "item.create.schematic.tooltip.action1": "정확한 _좌표_ 입력을 위한 창을 엽니다.", + "item.create.schematic.tooltip": "설계도", + "item.create.schematic.tooltip.summary": "원하는 위치에 홀로그램을 배치하고, 설계대포를 사용하여 구조물을 건설할 수 있습니다.", + "item.create.schematic.tooltip.condition1": "들고 있을 때", + "item.create.schematic.tooltip.behaviour1": "설계도의 _위치_를 지정할 수 있습니다.", + "item.create.schematic.tooltip.control1": "웅크리고 오른쪽 버튼을 눌렀을 때", + "item.create.schematic.tooltip.action1": "정확한 좌표를 입력할 수 있는 _설정 창_이 열립니다.", - "item.create.schematic_and_quill.tooltip": "SCHEMATIC AND QUILL", - "item.create.schematic_and_quill.tooltip.summary": "세계에 있는 구조물을 _.nbt파일_로 저장할 때 쓰입니다.", + "item.create.schematic_and_quill.tooltip": "설계도와 깃펜", + "item.create.schematic_and_quill.tooltip.summary": "구조물을 .nbt 파일로 저장할 수 있습니다.", "item.create.schematic_and_quill.tooltip.condition1": "1단계", - "item.create.schematic_and_quill.tooltip.behaviour1": "_두_ _모서리_를 우클릭으로 선택하세요.", + "item.create.schematic_and_quill.tooltip.behaviour1": "오른쪽 버튼을 눌러 구조물의 모서리를 지정합니다.", "item.create.schematic_and_quill.tooltip.condition2": "2단계", - "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": "_Scroll_를 이용하여 거리를 조정합니다.", - "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": "SCHEMATICANNON", - "block.create.schematicannon.tooltip.summary": "장착된 청사진을 바탕으로 블록들을 _발포_합니다. _화약_을 연료로 사용하고 주변 인벤토리 공간에서 아이템을 사용합니다.", - "block.create.schematicannon.tooltip.control1": "우클릭", - "block.create.schematicannon.tooltip.action1": "창을 엽니다.", + "block.create.schematicannon.tooltip": "설계대포", + "block.create.schematicannon.tooltip.summary": "_화약_을 연료로 사용하며, 상자 같은 저장소 안에 있는 아이템을 사용하여 설계도대로 구조물을 건설합니다.", + "block.create.schematicannon.tooltip.condition1": "오른쪽 버튼을 눌렀을 때", + "block.create.schematicannon.tooltip.behaviour1": "_설정 창_이 열립니다", - "block.create.schematic_table.tooltip": "SCHEMATIC TABLE", - "block.create.schematic_table.tooltip.summary": "_빈_ _청사진_에 저장된 청사진을 불러옵니다.", - "block.create.schematic_table.tooltip.condition1": "빈 청사진을 넣을 때", - "block.create.schematic_table.tooltip.behaviour1": "Schematics 폴더에서 선택한 파일을 업로드합니다.", + "block.create.schematic_table.tooltip": "설계도 탁자", + "block.create.schematic_table.tooltip.summary": "저장된 설계도를 _비어있는 설계도_에 기록할 수 있습니다.", + "block.create.schematic_table.tooltip.condition1": "비어있는 설계도가 올려졌을 때", + "block.create.schematic_table.tooltip.behaviour1": "_선택한 설계도_를 비어있는 설계도로 전송할 수 있습니다.", - "block.create.shaft.tooltip": "SHAFT", - "block.create.shaft.tooltip.summary": "_일직선_으로 _회전_을 전달합니다.", - - "block.create.cogwheel.tooltip": "COGWHEEL", - "block.create.cogwheel.tooltip.summary": " _일직선_이나 _옆_ _톱니바퀴_로 _회전_을 _전달_합니다.", - - "block.create.large_cogwheel.tooltip": "LARGE COGWHEEL", - "block.create.large_cogwheel.tooltip.summary": "큰 톱니바퀴입니다. 작은 톱니바퀴와 맞물렸을때, _회전 속도_가 _변합니다_.", - - "block.create.encased_shaft.tooltip": "ENCASED SHAFT", - "block.create.encased_shaft.tooltip.summary": "_일직선_으로 _회전_을 전달합니다. _벽을_ _넘어_ 회전을 보낼 때 유용합니다.", - - "block.create.gearbox.tooltip": "GEARBOX", - "block.create.gearbox.tooltip.summary": "_전후좌우_로 회전을 보냅니다. 한번 더 조합해서 설정을 바꿀 수 있습니다.", - - "block.create.gearshift.tooltip": "GEARSHIFT", - "block.create.gearshift.tooltip.summary": "연결된 축의 회전 방향을 _변경_합니다.", - "block.create.gearshift.tooltip.condition1": "레드스톤 신호를 받았을 때", - "block.create.gearshift.tooltip.behaviour1": "_출력_ 회전 방향을 _반전_시킵니다.", - - "block.create.clutch.tooltip": "CLUTCH", - "block.create.clutch.tooltip.summary": "연결된 축의 회전을 _끄고_ _킬_ 수 있습니다.", - "block.create.clutch.tooltip.condition1": "레드스톤 신호를 받았을 때", - "block.create.clutch.tooltip.behaviour1": "출력 방향 회전을 _멈춥니다_.", - - "block.create.encased_chain_drive.tooltip": "ENCASED_CHAIN_DRIVE", - "block.create.encased_chain_drive.tooltip.summary": "회전을 _직선으로_, 또는 다른 _케이스를 씌운 벨트_로 전달합니다. 이 블록들은 축이 없는 면에 붙일 때 서로 연결됩니다. 방향이 일치할 필요는 없습니다.", - "block.create.encased_chain_drive.tooltip.condition1": "연결되었을 때", - "block.create.encased_chain_drive.tooltip.behaviour1": "연결된 블록들은 이 축과 같은 회전속도와 방얗을 가집니다.", - - "block.create.adjustable_chain_gearshift.tooltip": "ADJUSTABLE CHAIN GEARSHIFT", - "block.create.adjustable_chain_gearshift.tooltip.summary": "케이스를 씌운 벨트와 같은 역할을 가집니다. 또한 레드스톤 신호 세기에 따라 _회전_ _속도_를 _조정_할 수 있습니다.", - "block.create.adjustable_chain_gearshift.tooltip.condition1": "레드스톤 신호 설정", - "block.create.adjustable_chain_gearshift.tooltip.behaviour1": "신호가 없다면, 인접한 벨트의 회전속도는 그대로 유지 됩니다. 최대 신호라면, 회전 속도가 정확히 2배가 됩니다. 중간 신호는 회전 속도를 1~2배 증가시킬 것입니다.", - - "item.create.belt_connector.tooltip": "BELT CONNECTOR", - "item.create.belt_connector.tooltip.summary": "두 개 이상의 _축_을 벨트로 연결할 수 있습니다. 연결된 축들은 _모두_ _같은_ _속도_와 _방향_을 가집니다. 벨트는 _아이템_이나 _엔티티_를 _옮길_ _수_ _있습니다_.", - "item.create.belt_connector.tooltip.control1": "축에다 우클릭", - "item.create.belt_connector.tooltip.action1": "첫번째 벨트 끝부분을 설정합니다. 두번째 축은 반드시 _수평_이나 _수직_, _대각선_ 방향에 있는 축에 연결해야합니다.", - "item.create.belt_connector.tooltip.control2": "웅크린 상태에서 우클릭", - "item.create.belt_connector.tooltip.action2": "첫번째 벨트 설정을 초기화합니다.", - - "item.create.goggles.tooltip": "GOGGLES", - "item.create.goggles.tooltip.summary": "_장치 정보_를 착용자의 시야에 띄어주는 안경입니다.", + "item.create.goggles.tooltip": "안경", + "item.create.goggles.tooltip.summary": "_장치의 정보_를 두 눈으로 직접 확인할 수 있도록, 시야가 증강되게 만들어주는 유용한 안경입니다.", "item.create.goggles.tooltip.condition1": "장착했을 때", - "item.create.goggles.tooltip.behaviour1": "해당 장치의 _속도_, _피로도_, _용량_을 레벨에 따라 에 따라 색상 UI를 보여줍니다.", - "item.create.goggles.tooltip.condition2": "계측기를 바라볼 때", - "item.create.goggles.tooltip.behaviour2": "계측기가 연결된 네트워크의 _속도_나 _스트레스_의 자세한 정보를 보여줍니다.", + "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": "WRENCH", - "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": "스패너", + "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.creative_motor.tooltip": "CREATIVE MOTOR", - "block.create.creative_motor.tooltip.summary": "회전 속도를 _조정_할 수 있는 장치입니다.", + "block.create.nozzle.tooltip": "분출구", + "block.create.nozzle.tooltip.summary": "_공업용 선풍기_의 앞에 붙이면 바람이 사방팔방으로 흩어져 나갑니다.", - "block.create.water_wheel.tooltip": "WATER WHEEL", - "block.create.water_wheel.tooltip.summary": "인접한 _물의_ _흐름_에서 얻은 회전을 제공합니다.", + "block.create.cuckoo_clock.tooltip": "뻐꾸기시계", + "block.create.cuckoo_clock.tooltip.summary": "공간을 장식하고 _시간_을 알려주는 정교한 장치입니다.", + "block.create.cuckoo_clock.tooltip.condition1": "동력을 받았을 때", + "block.create.cuckoo_clock.tooltip.behaviour1": "_현재 시각_을 표시합니다. 정오와 플레이어가 잠을 잘 수 있게 되는 시각에 작동합니다.", - "block.create.encased_fan.tooltip": "ENCASED FAN", - "block.create.encased_fan.tooltip.summary": "회전력을 _바람으로_ 전환합니다. 다양한 용도로 사용 가능합니다.", - "block.create.encased_fan.tooltip.condition1": "레드스톤 신호를 받을 때", - "block.create.encased_fan.tooltip.behaviour1": "장치 아래의 _열_을 _회전력_으로 _바꾸어_ 제공합니다. 날개가 아래를 바라보아야 합니다.", - "block.create.encased_fan.tooltip.condition2": "돌려질 때", - "block.create.encased_fan.tooltip.behaviour2": "들어오는 회적 속도에 따라 엔티티를 밀거나 당깁니다.", - "block.create.encased_fan.tooltip.condition3": "특정 블록을 통해 바람을 보낼 때", - "block.create.encased_fan.tooltip.behaviour3": "공기 흐름에 _액체_ 혹은 _불꽃_ 효과가 _추가_됩니다. 이는 아이템을 _공정_하는데 쓰일 수 있습니다.", + "block.create.turntable.tooltip": "회전대", + "block.create.turntable.tooltip.summary": "_회전력_을 받으면 회전합니다. 회전력을 받은 회전대 위에 올라서면 미묘한 멀미가 일어납니다.", - "block.create.nozzle.tooltip": "NOZZLE", - "block.create.nozzle.tooltip.summary": "덮힌 환풍기 _앞_에 붙여 환풍기의 효과를 _전방_으로 _확대_합니다.", - - "block.create.hand_crank.tooltip": "HAND CRANK", - "block.create.hand_crank.tooltip.summary": "간단한 회전력을 제공합니다. 플레이어의 _상호작용_이 필요합니다.", - "block.create.hand_crank.tooltip.condition1": "사용될 때", - "block.create.hand_crank.tooltip.behaviour1": "연결된 장치에 _회전력_을 _제공_합니다. 웅크리면 _반대로_ 회전시킵니다.", - - "block.create.cuckoo_clock.tooltip": "CUCKOO CLOCK", - "block.create.cuckoo_clock.tooltip.summary": "_시간의_ _흐름_을 알고 공간을 _꾸미는_ 데 좋은 공예품입니다.", - "block.create.cuckoo_clock.tooltip.condition1": "회전할 때", - "block.create.cuckoo_clock.tooltip.behaviour1": "현재 시각을 보여주고 하루에 두 번 울립니다. 점심과 플레이어가 바로 잘 수 있는 저녁에 울립니다.", - - "block.create.turntable.tooltip": "TURNTABLE", - "block.create.turntable.tooltip.summary": "_회전력_으로 _멀미_를 일으킵니다.", - - "block.create.millstone.tooltip": "MILLSTONE", - "block.create.millstone.tooltip.summary": "투입된 _재료_를 _가는_ 데 좋은 장치입니다. 측면 톱니바퀴나 바닥에 축을 이어 작동합니다. 결과물은 직접 빼내야 합니다.", - "block.create.millstone.tooltip.condition1": "회전 할 때", - "block.create.millstone.tooltip.behaviour1": "옆이나 위에서 투입된 아이템을 _맷돌질_합니다.", - "block.create.millstone.tooltip.condition2": "우클릭할때", - "block.create.millstone.tooltip.behaviour2": "결과물을 직접 꺼냅니다.", - - "block.create.crushing_wheel.tooltip": "CRUSHING WHEEL", - "block.create.crushing_wheel.tooltip.summary": "모든 것을 _부숴버리는_ 큰 바퀴입니다.", - "block.create.crushing_wheel.tooltip.condition1": "다른 분쇄 휠과 붙어있을 때", - "block.create.crushing_wheel.tooltip.behaviour1": "다양한 것을 _분쇄_하는 분쇄 기계를 형성합니다. 휠의 이빨이 _같은_ _속력_으로, _반대_ _방향_으로 맞물려야합니다.", - - "block.create.mechanical_press.tooltip": "MECHANICAL PRESS", - "block.create.mechanical_press.tooltip.summary": "아래있는 아이템을 _눌러버리는_ 힘센 피스톤입니다. _지속적인_ _회전력_이 필요합니다.", - "block.create.mechanical_press.tooltip.condition1": "레드스톤 신호를 받았을 때", - "block.create.mechanical_press.tooltip.behaviour1": "_아래 있는_ 아이템을 누르기 시작합니다.", - "block.create.mechanical_press.tooltip.condition2": "컨베이어 벨트 위에 있을 때", - "block.create.mechanical_press.tooltip.behaviour2": "_자동으로_ 벨트 위를 지나가는 아이템을 누릅니다.", - "block.create.mechanical_press.tooltip.condition3": "대야 위에 있을 때", - "block.create.mechanical_press.tooltip.behaviour3": "필요한 재료들이 _들어올_ _때마다_ 아이템을 _압축_시킵니다.", - - "block.create.basin.tooltip": "BASIN", - "block.create.basin.tooltip.summary": "믹서나 압착기와 같이 쓰이는 간편한 _아이템_ _저장소_입니다. 레드스톤 비교기와 호환됩니다.", - "block.create.basin.tooltip.condition1": "자동 배출", - "block.create.basin.tooltip.behaviour1": "벨트, 다른 대야, 아이템 거치대, 아이템 배수구와 같은 열린 인벤토리가 대야 아래 있다면, 아이템/액체 조합 결과가 자동으로 옮겨집니다. 자동화에 유용합니다.", - - "block.create.blaze_burner.tooltip": "BLAZE HEATER", - "block.create.blaze_burner.tooltip.summary": "길들인 _블레이즈_를 통해 _대야_를 달구는 블록입니다.", - "block.create.blaze_burner.tooltip.condition1": "대야 아래 설치 할 때", - "block.create.blaze_burner.tooltip.behaviour1": "대야를 이용한 조합법에 _열_을 제공합니다.", - "block.create.blaze_burner.tooltip.condition2": "연료가 블레이즈 버너에 사용되었을 때", - "block.create.blaze_burner.tooltip.behaviour2": "_불타는_ _시간_을 화로 연료로 사용되는 시간만큼 늘립니다. _특별한_ _연료_로 최고 화력을 얻으세요.", - - "block.create.reinforced_rail.tooltip": "REINFORCED RAIL", - "block.create.reinforced_rail.tooltip.summary": "목재로 안정된 레일입니다. _지지대_가 _필요하지_ _않습니다_.", - - "block.create.mechanical_mixer.tooltip": "MECHANICAL MIXER", - "block.create.mechanical_mixer.tooltip.summary": "아래있는 아이템을 조합할 혼합기입니다. _지속적인_ _회전력_과 한 칸 아래에 _대야_가 필요합니다.", - "block.create.mechanical_mixer.tooltip.condition1": "대야 위에 있을 때", - "block.create.mechanical_mixer.tooltip.behaviour1": "모든 필요한 아이템이 준비될 때마다 대야 안의 아이템을 섞기 시작합니다.", - "block.create.mechanical_mixer.tooltip.control1": "레드스톤 신호를 받았을 때", - "block.create.mechanical_mixer.tooltip.action1": "믹서를 멈춥니다. 재료를 _처음_ 조합할 때 유요합니다.", - - "block.create.mechanical_crafter.tooltip": "MECHANICAL CRAFTER", - "block.create.mechanical_crafter.tooltip.summary": "모든 조합법을 _자동화_할 장치입니다. 조합법대로 여러개를 _격자_로 설치하고, 화살표를 돌려 _한_ _곳으로_ _모이게_ 설정해야합니다.", - "block.create.mechanical_crafter.tooltip.condition1": "회전할 때", - "block.create.mechanical_crafter.tooltip.behaviour1": "모든 조합칸에 있는 아이템들을 조합하기 시작합니다.", - "block.create.mechanical_crafter.tooltip.condition2": "레드스톤 신호를 받을 때", - "block.create.mechanical_crafter.tooltip.behaviour2": "_현재_ _격자_ 안에 있는 아이템들로 _조합_을 _강제로_ 시도합니다.", - "block.create.mechanical_crafter.tooltip.control1": "전면을 렌치로 조정할 때", - "block.create.mechanical_crafter.tooltip.action1": "각 기계식 조합기의 아이템 이동 방향을 설정합니다. 모든 조합기의 방향은 _하나의_ _최종_ _조합기_로 이동해야하며, 최종 조합기는 조합기 _바깥으로_ 아이템을 운송해야합니다.", - "block.create.mechanical_crafter.tooltip.control2": "측면/후면에서 렌치로 조정할 때", - "block.create.mechanical_crafter.tooltip.action2": "인접한 조합기와 입력 공간을 _연결_합니다. 이를 통해 일일히 아이템을 넣는 노력을 줄일 수 있습니다.", - - "block.create.furnace_engine.tooltip": "FURNACE ENGINE", - "block.create.furnace_engine.tooltip.summary": "_화로의_ _작동_을 필요로 하는 강력한 회전 동력원입니다.", - "block.create.furnace_engine.tooltip.condition1": "작동하는 화로에 붙였을 때", - "block.create.furnace_engine.tooltip.behaviour1": "붙어있는(한칸 띄어져있는) _플라이휠_에 동력을 공급합니다. _용광로_는 _두_ _배_의 화력을 냅니다.", - - "block.create.flywheel.tooltip": "FLYWHEEL", - "block.create.flywheel.tooltip.summary": "붙어있는 _화로_ _엔진_에서 생산된 힘을 안정시키고 _동력화_하는 거대한 금속 바퀴입니다. 화로 엔진으로부터 _한_ _칸_ _떨어져_ 설치해야 합니다.", - "block.create.flywheel.tooltip.condition1": "작동하는 엔진에 붙었을 때", - "block.create.flywheel.tooltip.behaviour1": "엔진의 힘에 따라 연결된 장치에 _회전력_을 제공합니다.", - - "block.create.portable_storage_interface.tooltip": "PORTABLE STORAGE INTERFACE", - "block.create.portable_storage_interface.tooltip.summary": "움직이는 피스톤, 베어링, 수레, 밧줄 도르래에서 _아이템을_ _교환하는_ 장치입니다. 두 인터페이스는 _서로 마주보고_ _1-2블록_ 떨어져있어야 합니다.", - "block.create.portable_storage_interface.tooltip.condition1": "움직일 때", - "block.create.portable_storage_interface.tooltip.behaviour1": "_고정된 인터페이스_와 아이템을 주고 받습니다. 고정된 인터페이스에 아이템을 수송하는 것은 _움직이는 장치와 직접 수송하는 것_과 같습니다. 아이템이 이동하는 동안 움직이는 장치는 _멈춥니다_.", - "block.create.portable_storage_interface.tooltip.condition2": "레드스톤 신호를 받을 때", - "block.create.portable_storage_interface.tooltip.behaviour2": "활성화된 연결을 _해제_합니다.", - - "block.create.portable_fluid_interface.tooltip": "PORTABLE FLUID INTERFACE", - "block.create.portable_fluid_interface.tooltip.summary": "움직이는 피스톤, 베어링, 수레, 밧줄 도르래에서 _액체를_ _교환하는_ 휴대용 장치입니다. 두 인터페이스는 _서로 마주보고_ _1-2블록_ 떨어져있어야 합니다.", + "block.create.portable_fluid_interface.tooltip": "연결식 액체 전달기", + "block.create.portable_fluid_interface.tooltip.summary": "피스톤이나 회전장치, 광산 수레, 도르래에 의해 이동하는 구조물에 액체를 전달할 수 있는 연결식 액체 교환 장치입니다. 교환 장치끼리 서로 마주보고 1-2블록의 간격을 두고 있어야 액체가 전달됩니다.", "block.create.portable_fluid_interface.tooltip.condition1": "움직일 때", - "block.create.portable_fluid_interface.tooltip.behaviour1": "_고정된 인터페이스_와 액체를 주고 받습니다. 고정된 인터페이스에 액체를 수송하는 것은 _움직이는 장치에 직접 수송하는 것_과 같습니다. 액체가 이동하는 동안 움직이는 장치는 _멈춥니다_", - "block.create.portable_fluid_interface.tooltip.condition2": "레드스톤 신호를 받을 때", - "block.create.portable_fluid_interface.tooltip.behaviour2": "활성화된 연결을 _해제_합니다.", + "block.create.portable_fluid_interface.tooltip.behaviour1": "움직이지 않는 _액체 전달기_와 상호작용하여 액체를 교환할 수 있습니다. 움직이지 않는 액체 전달기에 액체를 배출하거나 방출하려면 액체 저장소와 장치가 직접 연결되어 있어야 합니다. 액체가 교환되는 동안은 장치가 잠시 멈춥니다.", + "block.create.portable_fluid_interface.tooltip.condition2": "레드스톤 신호를 받았을 때", + "block.create.portable_fluid_interface.tooltip.behaviour2": "교환 장치끼리 _연결되지 않게_ 됩니다.", - "block.create.rotation_speed_controller.tooltip": "ROTATION SPEED CONTROLLER", - "block.create.rotation_speed_controller.tooltip.summary": "해당 톱니바퀴의 속도를 _변경_할 수 있는 컨트롤러입니다.", - "block.create.rotation_speed_controller.tooltip.condition1": "큰 톱니바퀴와 연결되었을 때", - "block.create.rotation_speed_controller.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.mechanical_piston.tooltip": "MECHANICAL PISTON", - "block.create.mechanical_piston.tooltip.summary": "_피스톤_의 업그레이드 버전입니다. 회전력을 사용해 연결된 구조물을 옮깁니다. _피스톤_ _연장_ _축_을 후면에 붙여 이 장치의 사거리를 늘이거나 줄일 수 있습니다. 축이 없다면 움직이지 않습니다. _섀시_나 _슬라임_ _블록_을 붙여 일직선의 블록들을 움직일 수 있습니다.", - "block.create.mechanical_piston.tooltip.condition1": "회전될 때", - "block.create.mechanical_piston.tooltip.behaviour1": "붙어있는 구조물을 움직이기 시작합니다. 속도와 방향은 들어오는 회전 속도와 방향에 따라 달라집니다.", + "block.create.content_observer.tooltip": "아이템 감지기", + "block.create.content_observer.tooltip.summary": "설정된 _필터_와 일치하는 아이템을 감지합니다. 붙어있는 벨트나 도관, 저장소에 일치하는 아이템이 있다면 장치가 레드스톤 신호를 내보내고, _퍼널_이 아이템을 전송해도 장치가 레드스톤 신호를 내보냅니다.", - "block.create.piston_extension_pole.tooltip": "PISTON POLE", - "block.create.piston_extension_pole.tooltip.summary": "기계식 피스톤의 _사거리_를 늘려줍니다.", - "block.create.piston_extension_pole.tooltip.condition1": "기계식 피스톤에 연결했을 때", - "block.create.piston_extension_pole.tooltip.behaviour1": "피스톤의 사거리를 한 블록 늘립니다.", + "block.create.adjustable_crate.tooltip": "조절식 상자", + "block.create.adjustable_crate.tooltip.summary": "이 _아이템 저장소_는 용량을 수동으로 조절할 수 있습니다. 아이템을 최대 16묶음까지 넣을 수 있고, 레드스톤 비교기와 같이 사용할 수 있습니다.", + "block.create.adjustable_crate.tooltip.condition1": "오른쪽 버튼을 눌렀을 때", + "block.create.adjustable_crate.tooltip.behaviour1": "_설정 창_이 열립니다.", - "block.create.mechanical_bearing.tooltip": "MECHANICAL BEARING", - "block.create.mechanical_bearing.tooltip.summary": "큰 구조물을 _회전_시키거나 _바람으로부터_ 회전력을 얻습니다.", - "block.create.mechanical_bearing.tooltip.condition1": "회전될 때", - "block.create.mechanical_bearing.tooltip.behaviour1": "연결된 블록들을 돌리기 시작합니다. _섀시_나 _슬라임_ _블록_을 이용해 더 많은 블록을 움직이세요.", + "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.windmill_bearing.tooltip": "WINDMILL BEARING", - "block.create.windmill_bearing.tooltip.summary": "_바람_을 _회전력으로 바꾸는 데_ 사용됩니다. 당신의 디자인을 붙이고 도는 걸 감사하세요!", - "block.create.windmill_bearing.tooltip.condition1": "우클릭했을 때", - "block.create.windmill_bearing.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.sail_frame.tooltip": "SAIL FRAME", - "block.create.sail_frame.tooltip.summary": "유용한 건축 블록이며, _풍차 베어링_에 달아 동력을 만들 수도 있습니다.", + "item.create.sand_paper.tooltip": "사포", + "item.create.sand_paper.tooltip.summary": "_재료_를 _갈아낼_ 수 있는 거친 종이입니다. 전개장치를 사용하여 자동으로 재료를 갈아낼 수 있습니다.", + "item.create.sand_paper.tooltip.condition1": "사용하는 방법", + "item.create.sand_paper.tooltip.behaviour1": "_손_에 아이템을 들고, _반대 손_에 사포를 든 상태로 오른쪽 버튼을 누르거나 떨어져 있는 아이템을 바라보고 오른쪽 버튼을 누르면 아이템을 갈아냅니다.", - "block.create.white_sail.tooltip": "SAIL", - "block.create.white_sail.tooltip.summary": "유용한 건축 블록이며, _풍차 베어링_에 달아 동력을 만들 수도 있습니다. 다양한 색깔이 있습니다.", - "block.create.white_sail.tooltip.condition1": "염료를 들고 우클릭", - "block.create.white_sail.tooltip.behaviour1": "날개의 색깔을 바꿉니다.", + "item.create.builders_tea.tooltip": "건축가의 차", + "item.create.builders_tea.tooltip.summary": "하루를 시작하기 위한 완벽한 차입니다. -_동기_와 _포만감_을 줍니다.", - "block.create.clockwork_bearing.tooltip": "CLOCKWORK BEARING", - "block.create.clockwork_bearing.tooltip.summary": "현재 _인게임_ _시간_을 알려주는 _시침_, _분침_을 돌리는 업그레이드된 베어링입니다.", - "block.create.clockwork_bearing.tooltip.condition1": "회전될 때", - "block.create.clockwork_bearing.tooltip.behaviour1": "현재 시간에 맞춰 연결된 구조물을 _시침_으로써 돌리기 시작합니다. _다른_ _종류의_ _섀시_가 있다면, _분침_처럼 돌립니다.", + "item.create.refined_radiance.tooltip": "섬세한 섬광", + "item.create.refined_radiance.tooltip.summary": "_흡수의 빛_으로 제련된 혼돈의 혼합물입니다.", - "block.create.sequenced_gearshift.tooltip": "SEQUENCED GEARSHIFT", - "block.create.sequenced_gearshift.tooltip.summary": "연속으로 5개의 회전 명령을 내릴 수 있는 _프로그램이_ _가능한_ 장치입니다. 이것으로 베어링, 피스톤, 도르래의 움직임과 타이밍을 정할 수 있습니다. 빠른 속력에는 부정확해질 수 있습니다.", - "block.create.sequenced_gearshift.tooltip.condition1": "레드스톤 신호를 받을 때", - "block.create.sequenced_gearshift.tooltip.behaviour1": "입력 속도에 따른 프로그램된 명령들을 수행하기 시작합니다.", - "block.create.sequenced_gearshift.tooltip.condition2": "우클릭했을 때", - "block.create.sequenced_gearshift.tooltip.behaviour2": "설정 창을 엽니다.", + "item.create.shadow_steel.tooltip": "그림자 금속", + "item.create.shadow_steel.tooltip.summary": "_공허_에서 제련된 혼돈의 혼합물입니다.", - "block.create.cart_assembler.tooltip": "CART ASSEMBLER", - "block.create.cart_assembler.tooltip.summary": "레일 위에 설치되었을 때, 지나가는 _광산_ _수레_에 연결된 구조물을 _설치/해체_합니다. [Ctrl]키를 눌러 레일 종류에 따른 작동 방법을 알아보세요.", - "block.create.cart_assembler.tooltip.condition1": "단일 수레 장치", - "block.create.cart_assembler.tooltip.behaviour1": "_한 조립기_만 있다면, 구조물은 _한 수레에만_ 연결됩니다. _렌치_를 이용해 _특정 회전 동작_을 설정하세요.", - "block.create.cart_assembler.tooltip.condition2": "기차 장치", - "block.create.cart_assembler.tooltip.behaviour2": "_구조물로 연결된_ 두 카트 조립기는 _모두_ 수레를 가지고 있을 때 _구조물로 두 수레를 연결_합니다. 구조물은 _광산 수레 커플링_과 유사하게 기능합니다.", - "block.create.cart_assembler.tooltip.control1": "레일 위에 설치되었을 때", - "block.create.cart_assembler.tooltip.action1": "신호를 받았을 때 _조립_하고, 아니라면 _해체_합니다.", - "block.create.cart_assembler.tooltip.control2": "전동 레일 위에 설치되었을 때", - "block.create.cart_assembler.tooltip.action2": "신호를 받았을 때 _조립_하고 _가속_하지만, 아니라면 _해체_하고 _멈춥니다_.", - "block.create.cart_assembler.tooltip.control3": "탐지 레일 위에 설치되었을 때", - "block.create.cart_assembler.tooltip.action3": "해체된 수레를 _조립_하고, 조립된 수레를 _해체_합니다.", - "block.create.cart_assembler.tooltip.control4": "활성화 레일 위에 설치되었을 때", - "block.create.cart_assembler.tooltip.action4": "신호를 받았을 때 _해체_합니다.", - - "block.create.rope_pulley.tooltip": "ROPE PULLEY", - "block.create.rope_pulley.tooltip.summary": "_수직으로_ 붙은 구조물을 움직입니다. _섀시_나 _슬라임_ _블록_을 붙여 일직선의 블록들을 움직일 수 있습니다.", - "block.create.rope_pulley.tooltip.condition1": "회전될 때", - "block.create.rope_pulley.tooltip.behaviour1": "연결된 구조물을 움직이기 시작합니다. 속도와 방향은 들어오는 회전 속도, 방향에 따라 다릅니다.", - - "block.create.linear_chassis.tooltip": "TRANSLATION CHASSIS", - "block.create.linear_chassis.tooltip.summary": "연결된 구조물의 이동을 _도와주는_ 베이스 블록입니다.", - "block.create.linear_chassis.tooltip.condition1": "움직일 때", - "block.create.linear_chassis.tooltip.behaviour1": "섀시의 _기둥_ _방향_으로 붙어있는 모든 블록들을 같은 방향으로 옮깁니다. 블록들은 섀시가 끈끈할 때만 당겨집니다 ([Ctrl]를 누르세요).", - "block.create.linear_chassis.tooltip.condition2": "렌치로 조정할 때", - "block.create.linear_chassis.tooltip.behaviour2": "대상 섀시의 _사거리_를 조정합니다. 또는 CTRL을 눌러 인접한 모든 섀시의 사거리를 조정합니다.", - "block.create.linear_chassis.tooltip.control1": "슬라임 볼로 우클릭", - "block.create.linear_chassis.tooltip.action1": "대상 면을 끈끈하게 만듭니다. 당겨질 때, 섀시는 연결된 _모든_ _블록_을 움직이는 방향에 상관없이 당깁니다.", - - "block.create.secondary_linear_chassis.tooltip": "SECONDARY LINEAR CHASSIS", - "block.create.secondary_linear_chassis.tooltip.summary": "다른 타입의 직선 섀시와 _이어지지_ _않는_ 두번째 종류의 직선 섀시입니다.", - - "block.create.radial_chassis.tooltip": "ROTATION CHASSIS", - "block.create.radial_chassis.tooltip.summary": "연결된 구조물의 이동을 _도와주는_ 베이스 블록입니다.", - "block.create.radial_chassis.tooltip.condition1": "움직일 때", - "block.create.radial_chassis.tooltip.behaviour1": "섀시의 _원_ _방향_으로 붙어있는 모든 블록들을 같은 방향으로 옮깁니다. 블록들이 섀시가 끈끈한 면에 붙어있을 때만 움직입니다 ([Ctrl]를 누르세요).", - "block.create.radial_chassis.tooltip.condition2": "렌치로 조정할 때", - "block.create.radial_chassis.tooltip.behaviour2": "대상 섀시의 _사거리_를 조정합니다. 또는 CTRL을 눌러 인접한 모든 섀시의 사거리를 조정합니다.", - "block.create.radial_chassis.tooltip.control1": "슬라임 볼로 우클릭", - "block.create.radial_chassis.tooltip.action1": "대상 면을 끈끈하게 만듭니다. 당겨질 때, 끈끈한 면에 붙은 _모든_ _블록_을 움직이게 합니다", - - "block.create.mechanical_drill.tooltip": "MECHANICAL mechanical_drill", - "block.create.mechanical_drill.tooltip.summary": "블록을 _파괴하는_ 데 적합한 장치입니다. 베어링이나 기계식 피스톤으로 움직여집니다.", - "block.create.mechanical_drill.tooltip.condition1": "회전될 때", - "block.create.mechanical_drill.tooltip.behaviour1": "고정되어 블록을 부숩니다. 또한 해당영역의 엔티티에게 피해를 줍니다.", - "block.create.mechanical_drill.tooltip.condition2": "움직일 때", - "block.create.mechanical_drill.tooltip.behaviour2": "드릴이 부딫히는 모든 블록을 부숩니다.", - - "block.create.mechanical_harvester.tooltip": "MECHANICAL mechanical_harvester", - "block.create.mechanical_harvester.tooltip.summary": "중간 크기의 작물 자동화에 적합한 _작물_ _수확기_입니다. 베어링이나 기계식 피스톤으로 움직여집니다.", - "block.create.mechanical_harvester.tooltip.condition1": "움직일 때", - "block.create.mechanical_harvester.tooltip.behaviour1": "칼날에 닿는 모두 자란 작물을 수확하고 최초 성장 상태로 변경합니다.", - - "block.create.mechanical_plough.tooltip": "MECHANICAL PLOUGH", - "block.create.mechanical_plough.tooltip.summary": "다양한 용도로 쓸 수 있는 _쟁기_입니다. 기계식 피스톤, 베어링이나 기계식 피스톤으로 움직여집니다.", - "block.create.mechanical_plough.tooltip.condition1": "움직일 때", - "block.create.mechanical_plough.tooltip.behaviour1": "횃불, 눈, 레일 등 _통과되는_ 블록들을 부숩니다. 엔티티를 _해치지_ _않습니다_. _괭이_를 사용한 것처럼 땅도 갑니다.", - - "block.create.mechanical_saw.tooltip": "MECHANICAL mechanical_saw", - "block.create.mechanical_saw.tooltip.summary": "효율적인 _벌목_과 블록을 _제재_하는데 적합합니다. 베어링이나 기계식 피스톤으로 움직여집니다.", - "block.create.mechanical_saw.tooltip.condition1": "위를 바라볼 때", - "block.create.mechanical_saw.tooltip.behaviour1": "_제재_와 _석재_ _절단_ 조합법을 떨어진/투입된 아이템에 적용합니다. 결과물이 여러 종류고 필터가 적용이 되지 않았다면, 결과물은 _목록_ _순서_대로 배출됩니다.", - "block.create.mechanical_saw.tooltip.condition2": "옆을 바라볼 때", - "block.create.mechanical_saw.tooltip.behaviour2": "앞에 있는 원목을 자릅니다. 나무의 원목이라면, 나무가 쓰러지면서 아이템을 떨굽니다.", - "block.create.mechanical_saw.tooltip.condition3": "움직일 때", - "block.create.mechanical_saw.tooltip.behaviour3": "톱이 만나는 모든 나무를 벱니다.", - - "block.create.stockpile_switch.tooltip": "stockpile_switch", - "block.create.stockpile_switch.tooltip.summary": "붙어있는 _저장소_에 들어있는 아이템을 기반으로 레드스톤 신호를 보냅니다. 필터도 제공됩니다. _비교기_와 반대로, 수량 스위치는 신호가 반전되는 _임계점_을 조절할 수 있습니다.", - "block.create.stockpile_switch.tooltip.condition1": "우클릭 할 때", - "block.create.stockpile_switch.tooltip.behaviour1": "UI를 엽니다.", - - "block.create.content_observer.tooltip": "CONTENT OBSERVER", - "block.create.content_observer.tooltip.summary": "저장소나 벨트의 아이템을 등록된 _필터_를 이용해 _탐지_합니다. _인벤토리, 벨트, 슈트_ 안에 해당 아이템을 탐지하는 동안, 레드스톤 신호를 보냅니다. _깔대기_가 해당 아이템을 수송하면, _1틱_의 레드스톤 신호를 보냅니다.", - - "block.create.redstone_link.tooltip": "REDSTONE LINK", - "block.create.redstone_link.tooltip.summary": "_무선_ 레드스톤 단말기입니다. 아무 아이템으로 두 개의 _주파수_를 설정할 수 있습니다. 통신거리는 제한되어 있지만, 그래도 충분히 넓습니다.", - "block.create.redstone_link.tooltip.condition1": "신호를 줄 때", - "block.create.redstone_link.tooltip.behaviour1": "같은 주파주의 다른 단말기에서 레드스톤 신호를 받습니다.", - "block.create.redstone_link.tooltip.control1": "아이템을 들고 우클릭", - "block.create.redstone_link.tooltip.action1": "그 아이템으로 주파수를 설정합니다. 주파수는 최대 두가지 아이템 조합으로 이룰 수 있습니다.", - "block.create.redstone_link.tooltip.control2": "웅크린 상태에서 우클릭", - "block.create.redstone_link.tooltip.action2": "수신/발신 모드로 바꿉니다.", - - "block.create.nixie_tube.tooltip": "NIXIE TUBE", - "block.create.nixie_tube.tooltip.summary": "숫자와 문자를 나타내는 멋진 표시등입니다.", - "block.create.nixie_tube.tooltip.condition1": "레드스톤 신호를 받을 때", - "block.create.nixie_tube.tooltip.behaviour1": "_현재_ 레드스톤 _신호_ _세기_를 표시합니다.", - "block.create.nixie_tube.tooltip.condition2": "이름표를 사용할 때", - "block.create.nixie_tube.tooltip.behaviour2": "한 줄로 놓인 표시등에 _문자_를 표시합니다.", - - "block.create.redstone_contact.tooltip": "REDSTONE redstone_contact", - "block.create.redstone_contact.tooltip.summary": "_한_ _쌍_이 _서로_ _바라보고_ 있을 때 레드스톤 신호를 보냅니다. 베어링이나 기계식 피스톤으로 움직여집니다.", - "block.create.redstone_contact.tooltip.condition1": "다른 동형 감지기를 맞댈 때", - "block.create.redstone_contact.tooltip.behaviour1": "레드스톤 신호를 보냅니다.", - "block.create.redstone_contact.tooltip.condition2": "움직일 때", - "block.create.redstone_contact.tooltip.behaviour2": "지나가는 모든 고정된 동형 감지기를 작동시킵니다.", - - "block.create.adjustable_crate.tooltip": "ADJUSTABLE CRATE", - "block.create.adjustable_crate.tooltip.summary": "이 저장소는 용량을 _직접_ _정할_ 수 있습니다. 아무아이템이나 최대 16스택씩 담을 수 있습니다. 레드스톤 비교기와 호환됩니다.", - "block.create.adjustable_crate.tooltip.control1": "우클릭 했을 때", - "block.create.adjustable_crate.tooltip.action1": "창을 엽니다.", - - "block.create.creative_crate.tooltip": "THE ENDLESS CRATE", - "block.create.creative_crate.tooltip.summary": "이 상자는 아무 아이템을 _무한히_ 저장합니다. 청사진 대포 옆에 놓을 시 준비물을 _전부_ 공급합니다.", - "block.create.creative_crate.tooltip.condition1": "필터에 아이템을 설정할 시", - "block.create.creative_crate.tooltip.behaviour1": "선택된 아이템을 _무한정_으로 _빼낼_ 수 있습니다. 대신 _들어간_ 아이템은 _삭제_됩니다.", - - "block.create.deployer.tooltip": "DEPLOYER", - "block.create.deployer.tooltip.summary": " _때리고_, _사용하고_ _작동시킵니다_. 이 장치는 _플레이어_를 가능한 한 _흉내내려할_ _것입니다_. 주변 인벤토리에서 아이템을 쓰거나 넣을 수 있습니다.", - "block.create.deployer.tooltip.condition1": "회전될 때", - "block.create.deployer.tooltip.behaviour1": "팔을 늘려 한 칸앞에 있는 공간에서 행동합니다.", - "block.create.deployer.tooltip.condition2": "렌치로 우클릭할 때", - "block.create.deployer.tooltip.behaviour2": "_공격_ _모드_로 바꿉니다. 이 상태에서는 배포기가 아이템을 가지고 _부수거나_ _때리려고_ 할 것입니다.", - "block.create.deployer.tooltip.condition3": "필터를 설정했을 때", - "block.create.deployer.tooltip.behaviour3": "_필터_에 맞지 않는 아이템은 사용하지 않습니다. 필터에 맞지 않는 아이템은 빼내거나 넣을 수 없습니다.", - - "block.create.brass_casing.tooltip": "BRASS CASING", - "block.create.brass_casing.tooltip.summary": "다양한 용도로 쓰일 수 있는 단단한 기계 케이스입니다. 장식용으로 써도 무방합니다. _축_이나 _벨트_에 _씌울 수 있습니다_.", - - "block.create.pulse_repeater.tooltip": "PULSE REPEATER", - "block.create.pulse_repeater.tooltip.summary": "_1틱_의 레드스톤 신호를 보내는 간단한 리피터입니다.", - - "block.create.adjustable_repeater.tooltip": "FLEX REPEATER", - "block.create.adjustable_repeater.tooltip.summary": "최대 30분까지 _딜레이_를 설정할 수 있는 업그레이드된 _레드스톤_ _리피터_입니다.", - - "block.create.adjustable_pulse_repeater.tooltip": "FLEX PULSE REPEATER", - "block.create.adjustable_pulse_repeater.tooltip.summary": "최대 30분까지 _딜레이_를 설정할 수 있는 _펄스_ _리피터_입니다.", - - "block.create.analog_lever.tooltip": "ANALOG LEVER", - "block.create.analog_lever.tooltip.summary": "레드스톤 _신호_ _세기_를 자세히 _조정_할 수 있는 레버입니다.", - - "block.create.powered_toggle_latch.tooltip": "POWERED TOGGLE LATCH", - "block.create.powered_toggle_latch.tooltip.summary": "레드스톤 신호로 끄고 켤 수 있는 _레버_입니다.", - - "block.create.powered_latch.tooltip": "POWERED LATCH", - "block.create.powered_latch.tooltip.summary": "레드스톤 신호로 컨트롤 할 수 있는 _레버_입니다. 후면에서 들어오는 신호는 레버를 키고, 측면에서 들어오는 신호는 레버를 초기화합니다.", - - "block.create.controller_rail.tooltip": "CONTROLLER RAIL", - "block.create.controller_rail.tooltip.summary": "_광산 수레_의 _이동속도_를 _세밀하게_ _조정_할 수 있는 _양방향_ _전동 레일_입니다.", - "block.create.controller_rail.tooltip.condition1": "레드스톤 신호를 받을 때", - "block.create.controller_rail.tooltip.behaviour1": "_신호 세기에 따라_ 지나가는 수레를 _가속, 감속_합니다. 레드스톤 신호는 다른 방향 레일에도 전달됩니다. 두 방향레일에 다른 세기를 전달하면 중간 레일들은 두 세기 사이의 신호를 받습니다.", - - "block.create.speedometer.tooltip": "SPEEDOMETER", - "block.create.speedometer.tooltip.summary": "연결된 장치의 _회전_ _속도_를 _계측_하고 _나타냅니다_. 레드스톤 비교기와 호환됩니다.", - "block.create.speedometer.tooltip.condition1": "회전될 때", - "block.create.speedometer.tooltip.behaviour1": "속도에 따라 색깔을 나타냅니다. _초록색_은 _느림_을, _파랑색_은 _보통_, _보라색_은 _빠른_ _속도_를 나타냅니다. 몇몇 장치들은 작동하기 위해 일정수준 이상의 속도가 필요합니다.", - - "block.create.stressometer.tooltip": "STRESSOMETER", - "block.create.stressometer.tooltip.summary": "연결된 네트워크의 _전체_ _피로도_ _수치_를 _계측_하고 _나타냅니다_. 레드스톤 비교기와 호환됩니다.", - "block.create.stressometer.tooltip.condition1": "회전될 때", - "block.create.stressometer.tooltip.behaviour1": "피로도에 따라 색깔을 나타냅니다. _과부화된_ _네트워크_는 움직이는 것을 멈춥니다. 과부하는 네트워크에 _추가_ _피로도_ _용량_을 가진 장치를 설치하면 해결됩니다. ", - - "item.create.sand_paper.tooltip": "SAND PAPER", - "item.create.sand_paper.tooltip.summary": "재료들을 _윤내는 데_ 쓰이는 거친 종이입니다. 배포기가 자동으로 쓸 수 있습니다.", - "item.create.sand_paper.tooltip.condition1": "사용할 때", - "item.create.sand_paper.tooltip.behaviour1": "_다른 손_에있는 아이템과 _바닥에 있는 아이템_을 윤냅니다.", - - "item.create.super_glue.tooltip": "SUPER GLUE", - "item.create.super_glue.tooltip.summary": "블록 사이에 풀칠하면, 절대 떨어지지 않습니다.", - "item.create.super_glue.tooltip.condition1": "사용했을 때", - "item.create.super_glue.tooltip.behaviour1": "선택한 블록의 면을 _끈끈하게_ 만듭니다. 끈끈한 면에 붙은 다른 블록은 기계식 피스톤, 베어링 등에 _같이_ _움직이게_ 됩니다.", - "item.create.super_glue.tooltip.condition2": "다른 손에 들고 있을 때", - "item.create.super_glue.tooltip.behaviour2": "블록을 설치할 때 그것이 _설치된_ _곳_에 _자동으로_ 풀칠합니다.", - - "item.create.builders_tea.tooltip": "BUILDERS TEA", - "item.create.builders_tea.tooltip.summary": "하루를 시작하기에 좋은 음료입니다. _ 새로운 영감_을 줍니다.", - - "item.create.refined_radiance.tooltip": "REFINED RADIANCE", - "item.create.refined_radiance.tooltip.summary": "_흡수된_ _빛_으로 제련된 색채 혼합물입니다.", - - "item.create.shadow_steel.tooltip": "SHADOW STEEL", - "item.create.shadow_steel.tooltip.summary": "_공허_에서 제련된 색채 혼합물입니다.", - - "item.create.minecart_coupling.tooltip": "MINECART COUPLING", - "item.create.minecart_coupling.tooltip.summary": "당신의 모든 _수레들을 이어 _멋진 _기차_를 만들어보세요.", - "item.create.minecart_coupling.tooltip.condition1": "광산 수레에 사용할 때", - "item.create.minecart_coupling.tooltip.behaviour1": "_두 수레를 묶어_ 이동할 때 고정된 _거리를 유지하게_ 합니다.", - - "item.create.crafter_slot_cover.tooltip": "SLOT COVER", - "item.create.crafter_slot_cover.tooltip.summary": "기계 조합기에서 _빈_ _슬롯_을 표시하기 위해 쓰입니다. 조합기들은 정사각형 모양을 형성할 필요는 없습니다. 재료가 서로 대각선인 조합법이있을 때 유용합니다.", + "item.create.minecart_coupling.tooltip": "광산 수레 이음쇠", + "item.create.minecart_coupling.tooltip.summary": "_광산 수레_를 연결하여 장엄한 기차를 만들 수 있습니다.", + "item.create.minecart_coupling.tooltip.condition1": "광산 수레에 사용했을 때", + "item.create.minecart_coupling.tooltip.behaviour1": "두 광산 수레가 연결되어 이동할 때 일정한 거리를 유지하게 만듭니다.", "create.tooltip.wip": "WIP", - "create.tooltip.workInProgress": "Work in progress!", - "create.tooltip.randomWipDescription0": "Please keep this item away from children.", - "create.tooltip.randomWipDescription1": "A baby panda dies every time you use this item. Every. Time.", - "create.tooltip.randomWipDescription2": "Use at your own risk.", - "create.tooltip.randomWipDescription3": "This is not the item you are looking for, *finger-wiggles* please disperse.", - "create.tooltip.randomWipDescription4": "This item will self-destruct in 10 seconds. 10, 9, 8...", - "create.tooltip.randomWipDescription5": "Believe me, it's useless.", - "create.tooltip.randomWipDescription6": "By using this item, you hereby consent to our disclaimer and agree to its terms.", - "create.tooltip.randomWipDescription7": "This one maybe isn't for you. What about that one?", - "create.tooltip.randomWipDescription8": "Use it and regret your decision immediately.", + "create.tooltip.workInProgress": "제작 중!", + "create.tooltip.randomWipDescription0": "이 아이템을 어린이에 가까이 두지 마세요.", + "create.tooltip.randomWipDescription1": "이 아이템을 사용할 때마다 아기 판다가 죽습니다. 때.마.다.", + "create.tooltip.randomWipDescription2": "위험을 무릅쓰고 사용하세요.", + "create.tooltip.randomWipDescription3": "찾으시는 상품이 아닙니다. *손가락 흔들기* 해산해주세요.", + "create.tooltip.randomWipDescription4": "이 아이템은 10초 후에 자폭합니다. 10, 9, 8...", + "create.tooltip.randomWipDescription5": "날 믿어, 이 아이템은 쓸모없어.", + "create.tooltip.randomWipDescription6": "이 아이템을 사용함으로써 귀하는 당사의 권리 포기 각서에 동의하고 그 조건에 동의합니다.", + "create.tooltip.randomWipDescription7": "이건 널 위한 게 아닐지도 몰라, 이건 어때?", + "create.tooltip.randomWipDescription8": "사용하고 자신이 내린 결정을 후회하세요.", - "_": "Thank you for translating Create!" -} + + "_": "->------------------------] 분석 내용 [------------------------<-", + + "create.ponder.hold_to_ponder": "[%1$s]을(를) 누르면 이 아이템을 분석합니다", + "create.ponder.subject": "이 분석의 주제", + "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.replay": "다시 보기", + "create.ponder.think_back": "되짚어보기", + "create.ponder.slow_text": "천천히 읽기", + "create.ponder.shared.movement_anchors": "연결대나 강력 접착제의 도움으로 큰 구조물을 움직이게 만들 수 있습니다", + "create.ponder.shared.rpm32": "32 RPM / 분당 회전수", + "create.ponder.shared.sneak_and": "웅크리기 +", + "create.ponder.shared.storage_on_contraption": "장치에 저장소를 붙이면, 자동으로 떨어져 있는 아이템을 줍습니다", + "create.ponder.shared.behaviour_modify_wrench": "이러한 방식은 스패너를 사용하여 변경할 수 있습니다", + "create.ponder.shared.rpm8": "8 RPM / 분당 회전수", + "create.ponder.shared.ctrl_and": "Ctrl +", + "create.ponder.shared.rpm16_source": "근원: 16 RPM / 분당 회전수", + "create.ponder.shared.rpm16": "16 RPM / 분당 회전수", + "create.ponder.tag.kinetic_sources": "동적 근원", + "create.ponder.tag.kinetic_sources.description": "회전력을 만들어 내는 장치입니다.", + "create.ponder.tag.contraption_actor": "동작장치", + "create.ponder.tag.contraption_actor.description": "웅직이는 장치에 부착하면 특정한 행동을 보이는 장치입니다.", + "create.ponder.tag.arm_targets": "기계식 팔의 대상", + "create.ponder.tag.arm_targets.description": "기계식 팔의 입력구나 출력구로 선택할 수 있는 장치입니다.", + "create.ponder.tag.logistics": "아이템 이동", + "create.ponder.tag.logistics.description": "아이템을 옮기거나 옮기는 것을 도와주는 장치입니다.", + "create.ponder.tag.movement_anchor": "부착장치", + "create.ponder.tag.movement_anchor.description": "다양한 방법으로 구조물을 부착하여 움직이게 만드는 장치입니다.", + "create.ponder.tag.creative": "크리에이티브 모드", + "create.ponder.tag.creative.description": "일반적으로 서바이벌 모드에서는 이용할 수 없는 장치입니다.", + "create.ponder.tag.kinetic_relays": "동적 블록", + "create.ponder.tag.kinetic_relays.description": "회전력을 다른 방향으로 전달하는 장치입니다.", + "create.ponder.tag.windmill_sails": "날개 블록과 풍차 회전장치", + "create.ponder.tag.windmill_sails.description": "풍차에 이용할 수 있는 풍차의 힘을 결정하는 블록입니다. 이러한 블록들은 모두 동일한 효율을 냅니다.", + "create.ponder.tag.contraption_assembly": "블록 부착 아이템", + "create.ponder.tag.contraption_assembly.description": "구조물을 연결할 수 있는 도구, 장치입니다.", + "create.ponder.tag.decoration": "미적 블록", + "create.ponder.tag.decoration.description": "주로 장식용으로 이용되는 장치입니다.", + "create.ponder.tag.kinetic_appliances": "동적 기계장치", + "create.ponder.tag.kinetic_appliances.description": "회전력을 이용하는 장치입니다.", + "create.ponder.tag.redstone": "레드스톤 장치", + "create.ponder.tag.redstone.description": "레드스톤 공학에 이용할 수 있는 장치입니다.", + "create.ponder.tag.fluids": "액체 조종장치", + "create.ponder.tag.fluids.description": "액체를 전달하고 이용할 수 있는 장치입니다.", + + "create.ponder.adjustable_pulse_repeater.header": "조절식 순간작동 중계기를 통한 신호 제어", + "create.ponder.adjustable_pulse_repeater.text_1": "조절식 순간작동 중계기는 지연 후에 짧은 신호를 내보냅니다", + "create.ponder.adjustable_pulse_repeater.text_2": "스크롤하여, 지연 시간을 설정할 수 있습니다", + "create.ponder.adjustable_pulse_repeater.text_3": "설정할 수 있는 최대 지연 시간은 30분입니다", + + "create.ponder.adjustable_repeater.header": "조절식 중계기를 통한 신호 제어", + "create.ponder.adjustable_repeater.text_1": "조절식 중계기는 일반적인 중계기와 비슷하게 작동합니다", + "create.ponder.adjustable_repeater.text_2": "지연 후에 신호를 내보내고...", + "create.ponder.adjustable_repeater.text_3": "...지연 시간만큼 신호가 남습니다", + "create.ponder.adjustable_repeater.text_4": "스크롤하여, 지연 시간을 설정할 수 있습니다", + "create.ponder.adjustable_repeater.text_5": "설정할 수 있는 최대 지연 시간은 30분입니다", + + "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_4": "나머지 아이템은 계속 수송됩니다", + + "create.ponder.basin.header": "대야를 통한 아이템 처리", + "create.ponder.basin.text_1": "대야는 아이템과 액체를 저장하고 처리할 수 있습니다", + "create.ponder.basin.text_2": "처리되면, 대야는 대야의 측면 아래쪽에 처리된 아이템을 출력하려 합니다", + "create.ponder.basin.text_3": "아래에 출력 블록이 있다면, 대야에 출력 구멍이 나타납니다", + "create.ponder.basin.text_4": "다양한 블록들을 출력 블록으로 사용할 수 있습니다", + "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.bearing_modes.header": "기계식 회전장치의 회전 방식", + "create.ponder.bearing_modes.text_1": "회전장치가 작동을 멈출 때마다 구조물이 가장 가까운 각도에서 블록으로 되돌아갑니다", + "create.ponder.bearing_modes.text_2": "초기 각도에 근접해 있는 경우에만 설치되어 있게 만들거나 절대 설치되어 있지 않게 만들도록 설정할 수 있습니다", + + "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_2": "웅크리고 오른쪽 버튼을 누르면 선택을 취소할 수 있습니다", + "create.ponder.belt_connector.text_3": "벨트 전체에는 추가적인 축을 설치할 수 있습니다", + "create.ponder.belt_connector.text_4": "벨트를 통해 연결된 축은 동일한 속도와 방향으로 회전합니다", + "create.ponder.belt_connector.text_5": "추가된 축은 스패너로 해체할 수 있습니다", + "create.ponder.belt_connector.text_6": "벨트는 염료로 염색할 수 있습니다", + + "create.ponder.belt_directions.header": "벨트의 유효한 방향", + "create.ponder.belt_directions.text_1": "벨트는 아무 방향으로나 연결할 수 없습니다", + "create.ponder.belt_directions.text_2": "1. 수평으로 연결할 수 있습니다", + "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_transport.header": "벨트의 물류적 이용", + "create.ponder.belt_transport.text_1": "벨트가 이동하면 아이템과 기타 엔티티가 운송됩니다", + "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.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_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_6": "붙어있는 벨트에 황동 터널을 설치하면 터널끼리 연결할 수 있습니다", + "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.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_modes.header": "광산 수레 장치의 방향 설정", + "create.ponder.cart_assembler_modes.text_1": "장치가 수레의 움직임에 맞춰 회전됩니다", + "create.ponder.cart_assembler_modes.text_2": "부착기가 \"방향 고정\"으로 설정되면 장치의 방향이 변경되지 않습니다", + + "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.chain_drive.header": "연쇄 전달기를 통한 회전력 전달", + "create.ponder.chain_drive.text_1": "연쇄 전달기는 일렬로만 연결될 수 있습니다", + "create.ponder.chain_drive.text_2": "연결된 모든 축은 동일한 방향, 동일한 속도로 회전합니다", + "create.ponder.chain_drive.text_3": "전달기는 90도 회전되어 있어도 연결될 수 있습니다", + + "create.ponder.chain_gearshift.header": "연쇄 변속기를 통한 회전 속도 제어", + "create.ponder.chain_gearshift.text_1": "신호를 받지 않은 연쇄 변속기는 연쇄 전달기와 똑같이 작동합니다", + "create.ponder.chain_gearshift.text_2": "신호를 받으면, 연결된 연쇄 전달기에 속도가 2배로 빨라집니다", + "create.ponder.chain_gearshift.text_3": "신호를 받은 연쇄 변속기가 근원에 없다면, 변속기의 속도가 절반으로 줄어듭니다", + "create.ponder.chain_gearshift.text_4": "두 경우 모두, 신호를 받은 연쇄 변속기보다 연결된 연쇄 전달기가 2배 더 빠른 속도로 회전됩니다", + "create.ponder.chain_gearshift.text_5": "조절식 레버를 사용하면, 1에서 2배 사이의 속도 배율을 더 정확하게 조절할 수 있습니다", + "create.ponder.chain_gearshift.text_6": "12 RPM / 분당 회전수", + + "create.ponder.chute.header": "도관을 통한 아래 방향 아이템 이동", + "create.ponder.chute.text_1": "도관은 아이템을 수직으로 수송합니다", + "create.ponder.chute.text_2": "스패너를 사용하여, 도관에 창을 낼 수 있습니다", + "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.clockwork_bearing.header": "시계 회전장치를 통한 구조물 회전", + "create.ponder.clockwork_bearing.text_1": "시계 회전장치는 부착된 블록을 시계 바늘처럼 회전하게 만들 수 있습니다", + "create.ponder.clockwork_bearing.text_2": "회전력을 받으면 구조물이 시침처럼 현재 시각에 따라 회전합니다", + "create.ponder.clockwork_bearing.text_3": "3:00", + "create.ponder.clockwork_bearing.text_4": "4:00", + "create.ponder.clockwork_bearing.text_5": "회전장치를 오른쪽 버튼으로 누르면 구조물이 회전하거나 회전을 멈춥니다", + "create.ponder.clockwork_bearing.text_6": "시침 앞에는 두 번째 구조물을 추가할 수 있습니다", + "create.ponder.clockwork_bearing.text_7": "강력 접착제 등을 통해 두 구조물이 서로 부착되어 있지 않아야 합니다", + "create.ponder.clockwork_bearing.text_8": "이제, 두 번째 구조물이 분침처럼 회전합니다", + + "create.ponder.clutch.header": "단절기를 통한 회전력 제어", + "create.ponder.clutch.text_1": "단절기는 회전력을 다른 방향으로 전달하지 않습니다", + "create.ponder.clutch.text_2": "레드스톤 신호를 받으면, 연결이 끊어집니다", + + "create.ponder.cog_speedup.header": "톱니바퀴를 통한 변속", + "create.ponder.cog_speedup.text_1": "큰 톱니바퀴와 작은 톱니바퀴는 대각선으로 연결할 수 있습니다", + "create.ponder.cog_speedup.text_2": "큰 톱니바퀴에서 작은 톱니바퀴로 회전력이 전달되면 회전력이 2배로 빨라집니다", + "create.ponder.cog_speedup.text_3": "반대로 위치를 바꾸면, 전달되는 속도가 절반으로 줄어듭니다", + + "create.ponder.cogwheel.header": "톱니바퀴를 통한 회전력 전달", + "create.ponder.cogwheel.text_1": "톱니바퀴는 가까이에 있는 다른 톱니바퀴에다 회전력을 전달합니다", + "create.ponder.cogwheel.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": "한 쌍의 분쇄용 바퀴는 매우 효과적으로 아이템을 갈아낼 수 있습니다", + "create.ponder.crushing_wheels.text_2": "분쇄용 바퀴가 작동되려면, 바퀴가 안쪽으로 회전해야 합니다", + "create.ponder.crushing_wheels.text_3": "아이템을 바퀴 위에 던지거나 입력하면 아이템이 처리됩니다", + "create.ponder.crushing_wheels.text_4": "이러한 장치로 아이템을 자동으로 처리할 수 있습니다", + + "create.ponder.deployer.header": "전개장치의 이용", + "create.ponder.deployer.text_1": "전개장치는 회전력을 받으면, 플레이어의 상호작용을 따라 할 수 있습니다", + "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": "전개장치는 항상 2블록 앞의 위치에만 상호작용합니다", + "create.ponder.deployer.text_3": "바로 앞에 있는 블록이 직접적으로 상호작용을 방해하지는 않습니다", + "create.ponder.deployer.text_4": "전개장치는:", + "create.ponder.deployer.text_5": "블록을 설치하고,", + "create.ponder.deployer.text_6": "아이템을 사용하고,", + "create.ponder.deployer.text_7": "블록을 활성화하고,", + "create.ponder.deployer.text_8": "블록을 파괴하고,", + "create.ponder.deployer.text_9": "몬스터를 공격할 수 있습니다", + + "create.ponder.deployer_contraption.header": "장치에서의 전개장치의 이용", + "create.ponder.deployer_contraption.text_1": "움직이는 장치에서 전개장치가 이동하면...", + "create.ponder.deployer_contraption.text_2": "전개장치는 장소마다 작동하며, 전개장치는 붙어있는 저장소의 아이템을 사용할 수 있습니다", + "create.ponder.deployer_contraption.text_3": "필터 슬롯을 사용하여 사용할 아이템을 지정할 수 있습니다", + + "create.ponder.deployer_modes.header": "전개장치의 방식", + "create.ponder.deployer_modes.text_1": "기본적으로, 전개장치는 오른쪽 버튼을 누르는 상호작용을 따라합니다", + "create.ponder.deployer_modes.text_2": "스패너를 사용하면, 왼쪽 버튼을 따라하도록 설정할 수 있습니다", + + "create.ponder.deployer_redstone.header": "레드스톤을 통한 전개장치의 제어", + "create.ponder.deployer_redstone.text_1": "레드스톤 신호를 받으면, 전개장치가 작동되지 않습니다", + "create.ponder.deployer_redstone.text_2": "작동이 정지되기 전에, 전개장치는 모든 작동을 완료하고 정지됩니다", + "create.ponder.deployer_redstone.text_3": "따라서, 아주 짧은 시간 동안 신호를 차단하면 1번만 작동하게 만들 수 있습니다", + + "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.empty_blaze_burner.header": "비어있는 블레이즈 가열기의 이용", + "create.ponder.empty_blaze_burner.text_1": "비어있는 가열기를 들고 오른쪽 버튼을 누르면 블레이즈를 포획할 수 있습니다", + "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.fan_direction.header": "공업용 선풍기의 바람", + "create.ponder.fan_direction.text_1": "공업용 선풍기는 회전력을 사용하여 바람을 일으킬 수 있습니다", + "create.ponder.fan_direction.text_2": "회전력에 따라 바람의 방향과 힘이 달라집니다", + + "create.ponder.fan_processing.header": "선풍기를 통한 아이템 처리", + "create.ponder.fan_processing.text_1": "바람이 용암을 통과하면, 바람이 뜨거워집니다", + "create.ponder.fan_processing.text_2": "아이템에 뜨거운 바람을 쐬면 아이템이 제련됩니다", + "create.ponder.fan_processing.text_3": "음식 아이템에 뜨거운 바람을 쐬면 아이템이 소각됩니다", + "create.ponder.fan_processing.text_4": "대신에, 불을 사용하면 음식 아이템을 훈연할 수 있습니다", + "create.ponder.fan_processing.text_5": "바람이 물을 통과하면 바람으로 아이템을 세척할 수 있습니다", + "create.ponder.fan_processing.text_6": "세척은 제련, 훈연과 달리 새로운 처리를 할 수 있습니다", + "create.ponder.fan_processing.text_7": "선풍기의 속도는 처리 속도에 관여하지 않고 바람의 범위에만 영향을 줍니다", + "create.ponder.fan_processing.text_8": "또한, 선풍기는 아이템 거치대와 벨트에 놓인 아이템도 처리할 수 있습니다", + + "create.ponder.fan_source.header": "공업용 선풍기를 통한 회전력 생성", + "create.ponder.fan_source.text_1": "아래쪽에 있는 불이나 용암을 바라보고 있는 선풍기는 회전력을 생성할 수 있습니다", + "create.ponder.fan_source.text_2": "레드스톤 신호를 받으면, 선풍기가 회전력을 생성합니다", + + "create.ponder.flywheel.header": "축 회전바퀴를 통한 회전력 생성", + "create.ponder.flywheel.text_1": "축 회전바퀴는 화로 원동기에서 회전력을 생성할 수 있습니다", + "create.ponder.flywheel.text_2": "매우 큰 부하 수용량을 가지고 있습니다", + "create.ponder.flywheel.text_3": "용광로를 사용하면 원동기의 효율이 2배로 증가합니다", + + "create.ponder.funnel_compat.header": "퍼널의 호환성", + "create.ponder.funnel_compat.text_1": "퍼널은 여러 가지 블록과 원활하게 상호작용할 수 있습니다", + "create.ponder.funnel_compat.text_2": "톱", + "create.ponder.funnel_compat.text_3": "아이템 거치대", + "create.ponder.funnel_compat.text_4": "흡수통", + + "create.ponder.funnel_direction.header": "이동 방향", + "create.ponder.funnel_direction.text_1": "일반적으로 설치하면, 퍼널이 저장소에서 아이템을 꺼냅니다", + "create.ponder.funnel_direction.text_2": "웅크리고 설치하면, 퍼널이 저장소에 아이템을 넣습니다", + "create.ponder.funnel_direction.text_3": "스패너를 사용하면, 설치된 퍼널의 방향이 변경됩니다", + "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_redstone.header": "레드스톤 제어", + "create.ponder.funnel_redstone.text_1": "레드스톤 신호를 받으면, 퍼널이 작동되지 않습니다", + + "create.ponder.funnel_transfer.header": "직접 이동", + "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.text_2": "매우 큰 부하 수용량을 가지고 있습니다", + "create.ponder.furnace_engine.text_3": "용광로를 사용하면 원동기의 효율이 2배로 증가합니다", + + "create.ponder.gantry_carriage.header": "다리 운반대의 이용", + "create.ponder.gantry_carriage.text_1": "다리 운반대는 다리 축에서 움직일 수 있습니다", + "create.ponder.gantry_carriage.text_2": "다리 운반대는 부착된 블록을 움직이게 만들 수 있습니다", + + "create.ponder.gantry_cascaded.header": "계단식 다리", + "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_4": "전달되는 회전력에도 동일한 규칙이 적용됩니다", + + "create.ponder.gantry_redstone.header": "레드스톤을 통한 다리의 제어", + "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.gearbox.header": "전환장치를 통한 회전력 전달", + "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": "전환기는 회전력을 다른 방향으로 전달하지 않습니다", + "create.ponder.gearshift.text_2": "레드스톤 신호를 받으면, 축을 반대로 돌립니다", + + "create.ponder.hand_crank.header": "자가발전용 손잡이를 통한 회전력 생성", + "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.large_cogwheel.header": "큰 톱니바퀴를 통한 회전력 전달", + "create.ponder.large_cogwheel.text_1": "큰 톱니바퀴는 직각으로 연결할 수 있습니다", + "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_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_group.header": "선형 연결대의 집단 이동", + "create.ponder.linear_chassis_group.text_1": "선형 연결대는 옆에 있는 동일한 연결대 블록과 연결됩니다", + "create.ponder.linear_chassis_group.text_2": "장치에 의해 움직이면, 같이 이동됩니다", + "create.ponder.linear_chassis_group.text_3": "종류가 다르거나 다른 방향을 바라보는 연결대는 연결되지 않습니다", + + "create.ponder.mechanical_arm.header": "기계식 팔의 설정", + "create.ponder.mechanical_arm.text_1": "기계식 팔은 설치하기 전에, 입력구와 출력구를 지정해야 합니다", + "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_8": "퍼널이나 아이템 거치대로 이러한 문제를 어느 정도 해결할 수 있습니다", + + "create.ponder.mechanical_arm_filtering.header": "기계식 팔의 출력 필터", + "create.ponder.mechanical_arm_filtering.text_1": "입력구", + "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_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_5": "스패너를 들고 스크롤하면 팔을 설정할 수 있습니다", + "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_redstone.header": "레드스톤을 통한 기계식 팔의 제어", + "create.ponder.mechanical_arm_redstone.text_1": "레드스톤 신호를 받으면, 기계식 팔이 작동되지 않습니다", + "create.ponder.mechanical_arm_redstone.text_2": "작동이 정지되기 전에, 기계식 팔은 모든 작동을 완료하고 정지됩니다", + "create.ponder.mechanical_arm_redstone.text_3": "따라서, 아주 짧은 시간 동안 신호를 차단하면 1번만 작동하게 만들 수 있습니다", + + "create.ponder.mechanical_bearing.header": "기계식 회전장치를 통한 구조물 회전", + "create.ponder.mechanical_bearing.text_1": "기계식 회전장치는 부착된 블록을 회전하게 만들 수 있습니다", + "create.ponder.mechanical_bearing.text_2": "회전력을 받으면, 장치가 회전합니다", + + "create.ponder.mechanical_crafter.header": "기계식 제작기의 설정", + "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_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.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_drill.header": "기계식 드릴을 통한 블록 파괴", + "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_harvester.header": "장치에서의 기계식 수확기의 이용", + "create.ponder.mechanical_harvester.text_1": "움직이는 장치에서 기계식 수확기가 이동하면...", + "create.ponder.mechanical_harvester.text_2": "수확기가 다 자란 작물을 수확하고 다시 심습니다", + + "create.ponder.mechanical_mixer.header": "기계식 믹서기를 통한 아이템 처리", + "create.ponder.mechanical_mixer.text_1": "믹서기와 대야를 사용하면 일부 제작법과 맞는 아이템을 자동으로 제작할 수 있습니다", + "create.ponder.mechanical_mixer.text_2": "특정한 배치를 가지고 있지 않은 제작법과 몇 가지의 추가적인 제작법을 사용할 수 있습니다", + "create.ponder.mechanical_mixer.text_3": "그 제작법 중 일부는 블레이즈 가열기의 열기가 필요할 수 있습니다", + "create.ponder.mechanical_mixer.text_4": "두 가지의 제작법이 중복되는 경우 필터 슬롯을 사용하여 해결할 수 있습니다", + + "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_modes.header": "기계식 피스톤의 이동 방식", + "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_3": "게다가, 경작기는 땅을 경작할 수 있습니다", + "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_4": "압착기가 자동으로 아이템을 처리합니다", + + "create.ponder.mechanical_press_compacting.header": "기계식 압착기를 통한 아이템 압축", + "create.ponder.mechanical_press_compacting.text_1": "대야에 있는 아이템을 압착하면 아이템이 압축됩니다", + "create.ponder.mechanical_press_compacting.text_2": "같은 아이템을 2x2이나 3x3으로 사용하는 제작법과 몇 가지의 추가적인 제작법을 사용할 수 있습니다", + "create.ponder.mechanical_press_compacting.text_3": "그 제작법 중 일부는 블레이즈 가열기의 열기가 필요할 수 있습니다", + "create.ponder.mechanical_press_compacting.text_4": "두 가지의 제작법이 중복되는 경우 필터 슬롯을 사용하여 해결할 수 있습니다", + + "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_processing.header": "기계식 톱을 통한 아이템 처리", + "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_2": "톱니바퀴를 측면에 연결하여 회전력을 받을 수 있습니다", + "create.ponder.millstone.text_3": "아이템을 맷돌 위에 던지거나 입력하면 아이템이 처리됩니다", + "create.ponder.millstone.text_4": "시간이 지나고 맷돌에 오른쪽 버튼을 누르면 갈아낸 아이템을 얻을 수 있습니다", + "create.ponder.millstone.text_5": "이러한 장치로 아이템을 자동으로 처리할 수 있습니다", + + "create.ponder.nixie_tube.header": "표시등의 이용", + "create.ponder.nixie_tube.text_1": "레드스톤 신호를 받으면, 표시등은 레드스톤 신호의 전력을 표시합니다", + "create.ponder.nixie_tube.text_2": "모루로 이름을 바꾼 이름표를 사용하면 원하는 글씨를 표시할 수 있습니다", + + "create.ponder.piston_pole.header": "피스톤 연장대", + "create.ponder.piston_pole.text_1": "연결된 연장대가 없다면, 기계식 피스톤은 사용할 수 없습니다", + "create.ponder.piston_pole.text_2": "뒤에 추가된 연장대의 길이에 따라 피스톤의 거리가 바뀝니다", + + "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_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_8": "아이템 교환이 끝났다면, 장치가 다시 움직입니다", + + "create.ponder.portable_storage_interface_redstone.header": "레드스톤 제어", + "create.ponder.portable_storage_interface_redstone.text_1": "레드스톤 신호를 받으면, 전달기가 장치에 개입하지 않습니다", + + "create.ponder.powered_latch.header": "레드스톤 잠금기를 통한 신호 제어", + "create.ponder.powered_latch.text_1": "레드스톤 잠금기는 레드스톤 신호를 제어할 수 있는 레버입니다", + "create.ponder.powered_latch.text_2": "뒤쪽에서 신호를 주면, 잠금기가 켜집니다", + "create.ponder.powered_latch.text_3": "옆쪽에서 신호를 주면, 잠금기가 꺼집니다", + "create.ponder.powered_latch.text_4": "레드스톤 잠금기는 수동으로 전환할 수 있습니다", + + "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_4": "레버식 레드스톤 잠금기는 수동으로 전환할 수 있습니다", + + "create.ponder.pulse_repeater.header": "순간작동 중계기를 통한 신호 제어", + "create.ponder.pulse_repeater.text_1": "순간작동 중계기는 모든 레드스톤 신호를 잠깐의 신호로 단축합니다", + + "create.ponder.radial_chassis.header": "반경 연결대를 통한 블록 부착", + "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.redstone_contact.header": "레드스톤 접촉기", + "create.ponder.redstone_contact.text_1": "레드스톤 접촉기끼리 서로 마주 보면 레드스톤 신호를 방출합니다", + "create.ponder.redstone_contact.text_2": "접촉기 중 하나가 이동하는 장치에 포함되어 있어도 적용됩니다", + + "create.ponder.redstone_link.header": "레드스톤 연동 장치의 이용", + "create.ponder.redstone_link.text_1": "레드스톤 연동 장치는 레드스톤 신호를 무선으로 전송할 수 있습니다", + "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.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_3": "도르래가 멈춘 상태에서만 이동할 수 있습니다", + + "create.ponder.rope_pulley_modes.header": "밧줄 도르래의 이동 방식", + "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": "회전 속도 제어기는 회전력을 축에서 위에 있는 큰 톱니바퀴로 전달합니다", + "create.ponder.rotation_speed_controller.text_2": "옆쪽을 스크롤하여 회전 속도를 설정할 수 있습니다", + + "create.ponder.sail.header": "캔버스를 통한 풍차의 작동", + "create.ponder.sail.text_1": "캔버스는 풍차를 위한 블록입니다", + "create.ponder.sail.text_2": "강력 접착제나 연결대 블록 없이 연결될 수 있습니다", + "create.ponder.sail.text_3": "오른쪽 버튼을 누르면 염색할 수 있습니다", + "create.ponder.sail.text_4": "가위를 들고 오른쪽 버튼을 누르면 캔버스 틀로 만들 수 있습니다", + + "create.ponder.sail_frame.header": "캔버스 틀을 통한 풍차의 작동", + "create.ponder.sail_frame.text_1": "캔버스 틀은 풍차를 위한 블록입니다", + "create.ponder.sail_frame.text_2": "강력 접착제나 연결대 블록 없이 연결될 수 있습니다", + + "create.ponder.sequenced_gearshift.header": "순서화 전환기를 통한 회전 속도 제어", + "create.ponder.sequenced_gearshift.text_1": "순서화 전환기는 설정한 지시에 따라 회전됩니다", + "create.ponder.sequenced_gearshift.text_2": "오른쪽 버튼을 누르면 설정 창이 열립니다", + "create.ponder.sequenced_gearshift.text_3": "레드스톤 신호를 받으면 설정된 지시에 따라 회전하기 시작합니다", + "create.ponder.sequenced_gearshift.text_4": "완료되면, 다음 레드스톤 신호를 기다립니다", + "create.ponder.sequenced_gearshift.text_5": "레드스톤 비교기를 사용하면 현재 진행 상황을 알 수 있습니다", + + "create.ponder.shaft.header": "축을 통한 회전력 전달", + "create.ponder.shaft.text_1": "축은 일직선으로 회전합니다", + + "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.speedometer.header": "속도계를 통한 동적 정보 확인", + "create.ponder.speedometer.text_1": "속도계는 연결된 장치의 현재 속도를 표시합니다", + "create.ponder.speedometer.text_2": "공학자의 안경을 장착하면, 세부 정보를 확인할 수 있습니다", + "create.ponder.speedometer.text_3": "속도계의 측정값에 따라 비교기가 레드스톤 신호를 방출합니다", + + "create.ponder.stabilized_bearings.header": "안정적인 장치", + "create.ponder.stabilized_bearings.text_1": "기계식 회전장치는 움직이는 구조물에서 이동해도...", + "create.ponder.stabilized_bearings.text_2": "...방향이 유지됩니다", + "create.ponder.stabilized_bearings.text_3": "회전장치의 앞에 블록이 부착되어도...", + "create.ponder.stabilized_bearings.text_4": "부착된 구조물의 방향이 유지됩니다", + + "create.ponder.sticker.header": "부착기를 통한 블록 부착", + "create.ponder.sticker.text_1": "부착기는 레드스톤으로 제어할 수 있습니다", + "create.ponder.sticker.text_2": "신호를 받으면, 부착기가 블록을 부착합니다", + "create.ponder.sticker.text_3": "장치가 이동하면 부착된 블록도 같이 이동합니다", + "create.ponder.sticker.text_4": "다시 한번 신호를 받으면, 블록이 부착되지 않게 됩니다", + + "create.ponder.stressometer.header": "부하계를 통한 동적 정보 확인", + "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_5": "왼쪽 버튼을 누르면 강력 접착제를 제거할 수 있습니다", + + "create.ponder.valve_handle.header": "밸브 손잡이를 통한 회전력 생성", + "create.ponder.valve_handle.text_1": "밸브 손잡이를 사용하면 수동으로 회전력을 생성할 수 있습니다", + "create.ponder.valve_handle.text_2": "오른쪽 버튼을 누르면 반시계 방향으로 회전합니다", + "create.ponder.valve_handle.text_3": "전달되는 속도는 상대적으로 낮습니다", + "create.ponder.valve_handle.text_4": "웅크리고 오른쪽 버튼을 누르면 시계 방향으로 회전합니다", + "create.ponder.valve_handle.text_5": "밸브 손잡이는 염료로 염색할 수 있습니다", + + "create.ponder.water_wheel.header": "물레바퀴를 통한 회전력 생성", + "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_10": "이제, 발사대에 놓인 아이템의 양이 설정한 양에 도달한 경우에만 발사대가 작동됩니다", + "create.ponder.weighted_ejector.text_11": "다른 엔티티가 발사대를 밟으면, 항상 발사대가 작동합니다", + "create.ponder.weighted_ejector.text_2": "설치된 발사대는 지정한 위치에다 물체를 발사합니다", + "create.ponder.weighted_ejector.text_3": "이 범위 내에 아무 장소에 있는 지점에만 발사할 수 있습니다", + "create.ponder.weighted_ejector.text_4": "옆으로 발사할 수는 없습니다", + "create.ponder.weighted_ejector.text_5": "발사 지점이 선택되지 않거나 올바르지 않은 경우, 바로 앞에 물체를 발사합니다", + "create.ponder.weighted_ejector.text_6": "발사하려면 회전력이 필요합니다", + "create.ponder.weighted_ejector.text_7": "발사대에 아이템을 놓으면 발사대가 작동됩니다", + "create.ponder.weighted_ejector.text_8": "저장소가 발사 지점인 경우에는 발사대가 저장소에 공간이 생길 때까지 기다립니다", + "create.ponder.weighted_ejector.text_9": "스패너를 사용하여, 발사에 필요한 아이템의 양을 설정할 수 있습니다", + + "create.ponder.weighted_ejector_redstone.header": "레드스톤을 통한 발사대의 제어", + "create.ponder.weighted_ejector_redstone.text_1": "레드스톤 신호를 받으면, 발사대가 작동되지 않습니다", + "create.ponder.weighted_ejector_redstone.text_2": "또한, 관측기는 발사대가 작동하는 것 탐지할 수 있습니다", + + "create.ponder.weighted_ejector_tunnel.header": "발사대를 통한 아이템의 분할", + "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.windmill_source.header": "풍차 회전장치를 통한 회전력 생성", + "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_5": "스패너를 들고 스크롤하면 회전 방향을 설정할 수 있습니다", + "create.ponder.windmill_source.text_6": "회전장치에 오른쪽 버튼을 누르면 회전장치가 멈추고, 구조물을 편집할 수 있게 됩니다", + + "create.ponder.windmill_structure.header": "풍차 장치", + "create.ponder.windmill_structure.text_1": "최소 8개 이상의 날개 블록이 있는 구조물만 풍차로 사용할 수 있습니다", + + "_": "크리에이트를 번역해 주셔서 고맙습니다!" + +} \ No newline at end of file From e7788c42f5f1245ee3e087beecf629a5d444577b Mon Sep 17 00:00:00 2001 From: CKenJa <41111170+CKenJa@users.noreply.github.com> Date: Tue, 6 Jul 2021 19:37:53 +0900 Subject: [PATCH 021/118] Updates to ja_jp.json by CKenJa (#1883) --- .../resources/assets/create/lang/ja_jp.json | 735 ++++++++++-------- 1 file changed, 429 insertions(+), 306 deletions(-) diff --git a/src/main/resources/assets/create/lang/ja_jp.json b/src/main/resources/assets/create/lang/ja_jp.json index 6e05619b5..262e40f0e 100644 --- a/src/main/resources/assets/create/lang/ja_jp.json +++ b/src/main/resources/assets/create/lang/ja_jp.json @@ -3,7 +3,7 @@ "_": "->------------------------] Game Elements [------------------------<-", "block.create.acacia_window": "アカシアの窓", - "block.create.acacia_window_pane": "アカシアの窓パネル", + "block.create.acacia_window_pane": "アカシアの窓板", "block.create.adjustable_chain_gearshift": "可変チェーンギアシフト", "block.create.adjustable_crate": "可変クレート", "block.create.adjustable_pulse_repeater": "可変パルスリピーター", @@ -13,12 +13,12 @@ "block.create.andesite_bricks": "安山岩レンガ", "block.create.andesite_bricks_slab": "安山岩レンガのハーフブロック", "block.create.andesite_bricks_stairs": "安山岩レンガの階段", - "block.create.andesite_bricks_wall": "安山岩レンガの壁", + "block.create.andesite_bricks_wall": "安山岩レンガの塀", "block.create.andesite_casing": "安山岩ケーシング", "block.create.andesite_cobblestone": "安山岩の丸石", "block.create.andesite_cobblestone_slab": "安山岩の丸石のハーフブロック", "block.create.andesite_cobblestone_stairs": "安山岩の丸石の階段", - "block.create.andesite_cobblestone_wall": "安山岩の丸石の壁", + "block.create.andesite_cobblestone_wall": "安山岩の丸石の塀", "block.create.andesite_encased_shaft": "安山岩のケース入りシャフト", "block.create.andesite_funnel": "安山岩ファンネル", "block.create.andesite_pillar": "安山岩の柱", @@ -26,7 +26,7 @@ "block.create.basin": "鉢", "block.create.belt": "メカニカルベルト", "block.create.birch_window": "シラカバの窓", - "block.create.birch_window_pane": "シラカバの窓パネル", + "block.create.birch_window_pane": "シラカバの窓板", "block.create.black_sail": "黒色の帆", "block.create.black_seat": "黒色のシート", "block.create.black_valve_handle": "黒色のバルブハンドル", @@ -57,6 +57,7 @@ "block.create.cogwheel": "歯車", "block.create.content_observer": "コンテンツオブザーバー", "block.create.controller_rail": "コントローラーレール", + "block.create.copper_backtank": "銅のバックタンク", "block.create.copper_block": "銅ブロック", "block.create.copper_casing": "銅ケーシング", "block.create.copper_ore": "銅鉱石", @@ -67,45 +68,46 @@ "block.create.creative_fluid_tank": "クリエイティブ液体タンク", "block.create.creative_motor": "クリエイティブモーター", "block.create.crimson_window": "真紅の窓", - "block.create.crimson_window_pane": "真紅の窓パネル", + "block.create.crimson_window_pane": "真紅の窓板", "block.create.crushing_wheel": "破砕ホイール", "block.create.crushing_wheel_controller": "破砕ホイールコントローラー", "block.create.cuckoo_clock": "鳩時計", + "block.create.cursed_bell": "呪われた鐘", "block.create.cyan_sail": "水色の帆", "block.create.cyan_seat": "水色のシート", "block.create.cyan_valve_handle": "水色のバルブハンドル", "block.create.dark_oak_window": "ダークオークの窓", - "block.create.dark_oak_window_pane": "ダークオークの窓パネル", + "block.create.dark_oak_window_pane": "ダークオークの窓板", "block.create.dark_scoria": "ダークスコリア", "block.create.dark_scoria_bricks": "ダークスコリアレンガ", "block.create.dark_scoria_bricks_slab": "ダークスコリアレンガのハーフブロック", "block.create.dark_scoria_bricks_stairs": "ダークスコリアレンガの階段", - "block.create.dark_scoria_bricks_wall": "ダークスコリアレンガの壁", + "block.create.dark_scoria_bricks_wall": "ダークスコリアレンガの塀", "block.create.dark_scoria_cobblestone": "ダークスコリアの丸石", "block.create.dark_scoria_cobblestone_slab": "ダークスコリアの丸石のハーフブロック", "block.create.dark_scoria_cobblestone_stairs": "ダークスコリアの丸石の階段", - "block.create.dark_scoria_cobblestone_wall": "ダークスコリアの丸石の壁", + "block.create.dark_scoria_cobblestone_wall": "ダークスコリアの丸石の塀", "block.create.dark_scoria_pillar": "ダークスコリアの柱", "block.create.deployer": "デプロイヤー", "block.create.depot": "デポ", "block.create.diorite_bricks": "閃緑岩レンガ", "block.create.diorite_bricks_slab": "閃緑岩レンガのハーフブロック", "block.create.diorite_bricks_stairs": "閃緑岩レンガの階段", - "block.create.diorite_bricks_wall": "閃緑岩レンガの壁", + "block.create.diorite_bricks_wall": "閃緑岩レンガの塀", "block.create.diorite_cobblestone": "閃緑岩の丸石", "block.create.diorite_cobblestone_slab": "閃緑岩の丸石のハーフブロック", "block.create.diorite_cobblestone_stairs": "閃緑岩の丸石の階段", - "block.create.diorite_cobblestone_wall": "閃緑岩の丸石の壁", + "block.create.diorite_cobblestone_wall": "閃緑岩の丸石の塀", "block.create.diorite_pillar": "閃緑岩の柱", "block.create.dolomite": "苦灰岩", "block.create.dolomite_bricks": "苦灰岩レンガ", "block.create.dolomite_bricks_slab": "苦灰岩レンガのハーフブロック", "block.create.dolomite_bricks_stairs": "苦灰岩レンガの階段", - "block.create.dolomite_bricks_wall": "苦灰岩レンガの壁", + "block.create.dolomite_bricks_wall": "苦灰岩レンガの塀", "block.create.dolomite_cobblestone": "苦灰岩の丸石", "block.create.dolomite_cobblestone_slab": "苦灰岩の丸石のハーフブロック", "block.create.dolomite_cobblestone_stairs": "苦灰岩の丸石の階段", - "block.create.dolomite_cobblestone_wall": "苦灰岩の丸石の壁", + "block.create.dolomite_cobblestone_wall": "苦灰岩の丸石の塀", "block.create.dolomite_pillar": "苦灰岩の柱", "block.create.encased_chain_drive": "ケース入りチェーンドライブ", "block.create.encased_fan": "ケース入りファン", @@ -113,39 +115,39 @@ "block.create.fancy_andesite_bricks": "装飾された安山岩レンガ", "block.create.fancy_andesite_bricks_slab": "装飾された安山岩レンガのハーフブロック", "block.create.fancy_andesite_bricks_stairs": "装飾された安山岩レンガの階段", - "block.create.fancy_andesite_bricks_wall": "装飾された安山岩レンガの壁", + "block.create.fancy_andesite_bricks_wall": "装飾された安山岩レンガの塀", "block.create.fancy_dark_scoria_bricks": "装飾されたダークスコリアレンガ", "block.create.fancy_dark_scoria_bricks_slab": "装飾されたダークスコリアレンガのハーフブロック", "block.create.fancy_dark_scoria_bricks_stairs": "装飾されたダークスコリアレンガの階段", - "block.create.fancy_dark_scoria_bricks_wall": "装飾されたダークスコリアレンガの壁", + "block.create.fancy_dark_scoria_bricks_wall": "装飾されたダークスコリアレンガの塀", "block.create.fancy_diorite_bricks": "装飾された閃緑岩レンガ", "block.create.fancy_diorite_bricks_slab": "装飾された閃緑岩レンガのハーフブロック", "block.create.fancy_diorite_bricks_stairs": "装飾された閃緑岩レンガの階段", - "block.create.fancy_diorite_bricks_wall": "装飾された閃緑岩レンガの壁", + "block.create.fancy_diorite_bricks_wall": "装飾された閃緑岩レンガの塀", "block.create.fancy_dolomite_bricks": "装飾された苦灰岩レンガ", "block.create.fancy_dolomite_bricks_slab": "装飾された苦灰岩レンガのハーフブロック", "block.create.fancy_dolomite_bricks_stairs": "装飾された苦灰岩レンガの階段", - "block.create.fancy_dolomite_bricks_wall": "装飾された苦灰岩レンガの壁", + "block.create.fancy_dolomite_bricks_wall": "装飾された苦灰岩レンガの塀", "block.create.fancy_gabbro_bricks": "装飾された斑れい岩レンガ", "block.create.fancy_gabbro_bricks_slab": "装飾された斑れい岩レンガのハーフブロック", "block.create.fancy_gabbro_bricks_stairs": "装飾された斑れい岩レンガの階段", - "block.create.fancy_gabbro_bricks_wall": "装飾された斑れい岩レンガの壁", + "block.create.fancy_gabbro_bricks_wall": "装飾された斑れい岩レンガの塀", "block.create.fancy_granite_bricks": "装飾された花崗岩レンガ", "block.create.fancy_granite_bricks_slab": "装飾された花崗岩レンガのハーフブロック", "block.create.fancy_granite_bricks_stairs": "装飾された花崗岩レンガの階段", - "block.create.fancy_granite_bricks_wall": "装飾された花崗岩レンガの壁", + "block.create.fancy_granite_bricks_wall": "装飾された花崗岩レンガの塀", "block.create.fancy_limestone_bricks": "装飾された石灰岩レンガ", "block.create.fancy_limestone_bricks_slab": "装飾された石灰岩レンガのハーフブロック", "block.create.fancy_limestone_bricks_stairs": "装飾された石灰岩レンガの階段", - "block.create.fancy_limestone_bricks_wall": "装飾された石灰岩レンガの壁", + "block.create.fancy_limestone_bricks_wall": "装飾された石灰岩レンガの塀", "block.create.fancy_scoria_bricks": "装飾されたスコリアレンガ", "block.create.fancy_scoria_bricks_slab": "装飾されたスコリアレンガのハーフブロック", "block.create.fancy_scoria_bricks_stairs": "装飾されたスコリアレンガの階段", - "block.create.fancy_scoria_bricks_wall": "装飾されたスコリアレンガの壁", + "block.create.fancy_scoria_bricks_wall": "装飾されたスコリアレンガの塀", "block.create.fancy_weathered_limestone_bricks": "装飾された風化した石灰岩レンガ", "block.create.fancy_weathered_limestone_bricks_slab": "装飾された風化した石灰岩レンガのハーフブロック", "block.create.fancy_weathered_limestone_bricks_stairs": "装飾された風化した石灰岩レンガの階段", - "block.create.fancy_weathered_limestone_bricks_wall": "装飾された風化した石灰岩レンガの壁", + "block.create.fancy_weathered_limestone_bricks_wall": "装飾された風化した石灰岩レンガの塀", "block.create.fluid_pipe": "液体パイプ", "block.create.fluid_tank": "液体タンク", "block.create.fluid_valve": "液体バルブ", @@ -157,11 +159,11 @@ "block.create.gabbro_bricks": "斑れい岩レンガ", "block.create.gabbro_bricks_slab": "斑れい岩レンガのハーフブロック", "block.create.gabbro_bricks_stairs": "斑れい岩レンガの階段", - "block.create.gabbro_bricks_wall": "斑れい岩レンガの壁", + "block.create.gabbro_bricks_wall": "斑れい岩レンガの塀", "block.create.gabbro_cobblestone": "斑れい岩の丸石", "block.create.gabbro_cobblestone_slab": "斑れい岩の丸石のハーフブロック", "block.create.gabbro_cobblestone_stairs": "斑れい岩の丸石の階段", - "block.create.gabbro_cobblestone_wall": "斑れい岩の丸石の壁", + "block.create.gabbro_cobblestone_wall": "斑れい岩の丸石の塀", "block.create.gabbro_pillar": "斑れい岩の柱", "block.create.gantry_carriage": "ガントリーキャリッジ", "block.create.gantry_shaft": "ガントリーシャフト", @@ -171,11 +173,11 @@ "block.create.granite_bricks": "花崗岩レンガ", "block.create.granite_bricks_slab": "花崗岩レンガのハーフブロック", "block.create.granite_bricks_stairs": "花崗岩レンガの階段", - "block.create.granite_bricks_wall": "花崗岩レンガの壁", + "block.create.granite_bricks_wall": "花崗岩レンガの塀", "block.create.granite_cobblestone": "花崗岩の丸石", "block.create.granite_cobblestone_slab": "花崗岩の丸石のハーフブロック", "block.create.granite_cobblestone_stairs": "花崗岩の丸石の階段", - "block.create.granite_cobblestone_wall": "花崗岩の丸石の壁", + "block.create.granite_cobblestone_wall": "花崗岩の丸石の塀", "block.create.granite_pillar": "花崗岩の柱", "block.create.gray_sail": "灰色の帆", "block.create.gray_seat": "灰色のシート", @@ -190,7 +192,7 @@ "block.create.hose_pulley": "ホースプーリー", "block.create.item_drain": "アイテム排液口", "block.create.jungle_window": "ジャングルの窓", - "block.create.jungle_window_pane": "ジャングルの窓パネル", + "block.create.jungle_window_pane": "ジャングルの窓板", "block.create.large_cogwheel": "大きな歯車", "block.create.layered_andesite": "安山岩の組石", "block.create.layered_dark_scoria": "ダークスコリアの組石", @@ -201,6 +203,7 @@ "block.create.layered_limestone": "石灰岩の組石", "block.create.layered_scoria": "スコリアの組石", "block.create.layered_weathered_limestone": "風化した石灰岩の組石", + "block.create.lectern_controller": "書見台コントローラー", "block.create.light_blue_sail": "空色の帆", "block.create.light_blue_seat": "空色のシート", "block.create.light_blue_valve_handle": "空色のバルブハンドル", @@ -215,11 +218,11 @@ "block.create.limestone_bricks": "石灰岩レンガ", "block.create.limestone_bricks_slab": "石灰岩レンガのハーフブロック", "block.create.limestone_bricks_stairs": "石灰岩レンガの階段", - "block.create.limestone_bricks_wall": "石灰岩レンガの壁", + "block.create.limestone_bricks_wall": "石灰岩レンガの塀", "block.create.limestone_cobblestone": "石灰岩の丸石", "block.create.limestone_cobblestone_slab": "石灰岩の丸石のハーフブロック", "block.create.limestone_cobblestone_stairs": "石灰岩の丸石の階段", - "block.create.limestone_cobblestone_wall": "石灰岩の丸石の壁", + "block.create.limestone_cobblestone_wall": "石灰岩の丸石の塀", "block.create.limestone_pillar": "石灰岩の柱", "block.create.linear_chassis": "リニアシャーシ", "block.create.lit_blaze_burner": "燃焼中のブレイズバーナー", @@ -255,12 +258,12 @@ "block.create.nixie_tube": "ニキシー管", "block.create.nozzle": "ノズル", "block.create.oak_window": "オークの窓", - "block.create.oak_window_pane": "オークの窓パネル", + "block.create.oak_window_pane": "オークの窓板", "block.create.orange_sail": "橙色の帆", "block.create.orange_seat": "橙色のシート", "block.create.orange_valve_handle": "橙色のバルブハンドル", "block.create.ornate_iron_window": "鉄の装飾ガラス", - "block.create.ornate_iron_window_pane": "鉄の装飾ガラスパネル", + "block.create.ornate_iron_window_pane": "鉄の装飾ガラス板", "block.create.overgrown_andesite": "生い茂った安山岩", "block.create.overgrown_dark_scoria": "生い茂ったダークスコリア", "block.create.overgrown_diorite": "生い茂った閃緑岩", @@ -273,39 +276,40 @@ "block.create.paved_andesite": "舗装された安山岩", "block.create.paved_andesite_slab": "舗装された安山岩のハーフブロック", "block.create.paved_andesite_stairs": "舗装された安山岩の階段", - "block.create.paved_andesite_wall": "舗装された安山岩の壁", + "block.create.paved_andesite_wall": "舗装された安山岩の塀", "block.create.paved_dark_scoria": "舗装されたダークスコリア", "block.create.paved_dark_scoria_slab": "舗装されたダークスコリアのハーフブロック", "block.create.paved_dark_scoria_stairs": "舗装されたダークスコリアの階段", - "block.create.paved_dark_scoria_wall": "舗装されたダークスコリアの壁", + "block.create.paved_dark_scoria_wall": "舗装されたダークスコリアの塀", "block.create.paved_diorite": "舗装された閃緑岩", "block.create.paved_diorite_slab": "舗装された閃緑岩のハーフブロック", "block.create.paved_diorite_stairs": "舗装された閃緑岩の階段", - "block.create.paved_diorite_wall": "舗装された閃緑岩の壁", + "block.create.paved_diorite_wall": "舗装された閃緑岩の塀", "block.create.paved_dolomite": "舗装された苦灰岩", "block.create.paved_dolomite_slab": "舗装された苦灰岩のハーフブロック", "block.create.paved_dolomite_stairs": "舗装された苦灰岩の階段", - "block.create.paved_dolomite_wall": "舗装された苦灰岩の壁", + "block.create.paved_dolomite_wall": "舗装された苦灰岩の塀", "block.create.paved_gabbro": "舗装された斑れい岩", "block.create.paved_gabbro_slab": "舗装された斑れい岩のハーフブロック", "block.create.paved_gabbro_stairs": "舗装された斑れい岩の階段", - "block.create.paved_gabbro_wall": "舗装された斑れい岩の壁", + "block.create.paved_gabbro_wall": "舗装された斑れい岩の塀", "block.create.paved_granite": "舗装された花崗岩", "block.create.paved_granite_slab": "舗装された花崗岩のハーフブロック", "block.create.paved_granite_stairs": "舗装された花崗岩の階段", - "block.create.paved_granite_wall": "舗装された花崗岩の壁", + "block.create.paved_granite_wall": "舗装された花崗岩の塀", "block.create.paved_limestone": "舗装された石灰岩", "block.create.paved_limestone_slab": "舗装された石灰岩のハーフブロック", "block.create.paved_limestone_stairs": "舗装された石灰岩の階段", - "block.create.paved_limestone_wall": "舗装された石灰岩の壁", + "block.create.paved_limestone_wall": "舗装された石灰岩の塀", "block.create.paved_scoria": "舗装されたスコリア", "block.create.paved_scoria_slab": "舗装されたスコリアのハーフブロック", "block.create.paved_scoria_stairs": "舗装されたスコリアの階段", - "block.create.paved_scoria_wall": "舗装されたスコリアの壁", + "block.create.paved_scoria_wall": "舗装されたスコリアの塀", "block.create.paved_weathered_limestone": "舗装された風化した石灰岩", "block.create.paved_weathered_limestone_slab": "舗装された風化した石灰岩のハーフブロック", "block.create.paved_weathered_limestone_stairs": "舗装された風化した石灰岩の階段", - "block.create.paved_weathered_limestone_wall": "舗装された風化した石灰岩の壁", + "block.create.paved_weathered_limestone_wall": "舗装された風化した石灰岩の塀", + "block.create.peculiar_bell": "風変わりな鐘", "block.create.pink_sail": "桃色の帆", "block.create.pink_seat": "桃色のシート", "block.create.pink_valve_handle": "桃色のバルブハンドル", @@ -313,27 +317,27 @@ "block.create.polished_dark_scoria": "磨かれたダークスコリア", "block.create.polished_dark_scoria_slab": "磨かれたダークスコリアのハーフブロック", "block.create.polished_dark_scoria_stairs": "磨かれたダークスコリアの階段", - "block.create.polished_dark_scoria_wall": "磨かれたダークスコリアの壁", + "block.create.polished_dark_scoria_wall": "磨かれたダークスコリアの塀", "block.create.polished_dolomite": "磨かれた苦灰岩", "block.create.polished_dolomite_slab": "磨かれた苦灰岩のハーフブロック", "block.create.polished_dolomite_stairs": "磨かれた苦灰岩の階段", - "block.create.polished_dolomite_wall": "磨かれた苦灰岩の壁", + "block.create.polished_dolomite_wall": "磨かれた苦灰岩の塀", "block.create.polished_gabbro": "磨かれた斑れい岩", "block.create.polished_gabbro_slab": "磨かれた斑れい岩のハーフブロック", "block.create.polished_gabbro_stairs": "磨かれた斑れい岩の階段", - "block.create.polished_gabbro_wall": "磨かれた斑れい岩の壁", + "block.create.polished_gabbro_wall": "磨かれた斑れい岩の塀", "block.create.polished_limestone": "磨かれた石灰岩", "block.create.polished_limestone_slab": "磨かれた石灰岩のハーフブロック", "block.create.polished_limestone_stairs": "磨かれた石灰岩の階段", - "block.create.polished_limestone_wall": "磨かれた石灰岩の壁", + "block.create.polished_limestone_wall": "磨かれた石灰岩の塀", "block.create.polished_scoria": "磨かれたスコリア", "block.create.polished_scoria_slab": "磨かれたスコリアのハーフブロック", "block.create.polished_scoria_stairs": "磨かれたスコリアの階段", - "block.create.polished_scoria_wall": "磨かれたスコリアの壁", + "block.create.polished_scoria_wall": "磨かれたスコリアの塀", "block.create.polished_weathered_limestone": "磨かれた風化石灰岩", "block.create.polished_weathered_limestone_slab": "磨かれた風化石灰岩のハーフブロック", "block.create.polished_weathered_limestone_stairs": "磨かれた風化した石灰岩の階段", - "block.create.polished_weathered_limestone_wall": "磨かれた風化した石灰岩の壁", + "block.create.polished_weathered_limestone_wall": "磨かれた風化した石灰岩の塀", "block.create.portable_fluid_interface": "ポータブル液体インターフェース", "block.create.portable_storage_interface": "ポータブルストレージインターフェース", "block.create.powered_latch": "パワードラッチ", @@ -354,18 +358,18 @@ "block.create.rope": "ロープ", "block.create.rope_pulley": "ローププーリー", "block.create.rotation_speed_controller": "回転速度コントローラー", - "block.create.sail_frame": "帆のフレーム", + "block.create.sail_frame": "帆フレーム", "block.create.schematic_table": "概略図テーブル", "block.create.schematicannon": "概略図砲", "block.create.scoria": "スコリア", "block.create.scoria_bricks": "スコリアレンガ", "block.create.scoria_bricks_slab": "スコリアレンガのハーフブロック", "block.create.scoria_bricks_stairs": "スコリアレンガの階段", - "block.create.scoria_bricks_wall": "スコリアレンガの壁", + "block.create.scoria_bricks_wall": "スコリアレンガの塀", "block.create.scoria_cobblestone": "スコリアの丸石", "block.create.scoria_cobblestone_slab": "スコリアの丸石のハーフブロック", "block.create.scoria_cobblestone_stairs": "スコリアの丸石の階段", - "block.create.scoria_cobblestone_wall": "スコリアの丸石の壁", + "block.create.scoria_cobblestone_wall": "スコリアの丸石の塀", "block.create.scoria_pillar": "スコリアの柱", "block.create.secondary_linear_chassis": "セカンダリリニアシャーシ", "block.create.sequenced_gearshift": "シーケンスギアシフト", @@ -376,9 +380,9 @@ "block.create.speedometer": "速度メーター", "block.create.spout": "アイテム注液口", "block.create.spruce_window": "マツの窓", - "block.create.spruce_window_pane": "マツの窓パネル", + "block.create.spruce_window_pane": "マツの窓板", "block.create.sticker": "スティッカー", - "block.create.sticky_mechanical_piston": "粘着メカニカルピストン", + "block.create.sticky_mechanical_piston": "メカニカル粘着ピストン", "block.create.stockpile_switch": "在庫スイッチ", "block.create.stressometer": "応力メーター", "block.create.tiled_glass": "タイルガラス", @@ -387,17 +391,17 @@ "block.create.vertical_framed_glass": "縦型ガラス窓", "block.create.vertical_framed_glass_pane": "縦型ガラス窓板", "block.create.warped_window": "歪んだ窓", - "block.create.warped_window_pane": "歪んだ窓パネル", + "block.create.warped_window_pane": "歪んだ窓板", "block.create.water_wheel": "水車", "block.create.weathered_limestone": "風化した石灰岩", "block.create.weathered_limestone_bricks": "風化した石灰岩レンガ", "block.create.weathered_limestone_bricks_slab": "風化した石灰岩レンガのハーフブロック", "block.create.weathered_limestone_bricks_stairs": "風化した石灰岩レンガの階段", - "block.create.weathered_limestone_bricks_wall": "風化した石灰岩レンガの壁", + "block.create.weathered_limestone_bricks_wall": "風化した石灰岩レンガの塀", "block.create.weathered_limestone_cobblestone": "風化した石灰岩の丸石", "block.create.weathered_limestone_cobblestone_slab": "風化した石灰岩の丸石のハーフブロック", "block.create.weathered_limestone_cobblestone_stairs": "風化した石灰岩の丸石の階段", - "block.create.weathered_limestone_cobblestone_wall": "風化した石灰岩の丸石の壁", + "block.create.weathered_limestone_cobblestone_wall": "風化した石灰岩の丸石の塀", "block.create.weathered_limestone_pillar": "風化した石灰岩の柱", "block.create.weighted_ejector": "重量射出機", "block.create.white_sail": "白色の帆", @@ -412,7 +416,9 @@ "block.create.zinc_ore": "亜鉛鉱石", "entity.create.contraption": "からくり", + "entity.create.crafting_blueprint": "クラフトブループリント", "entity.create.gantry_contraption": "ガントリーからくり", + "entity.create.potato_projectile": "ポテト弾", "entity.create.seat": "シート", "entity.create.stationary_contraption": "付設からくり", "entity.create.super_glue": "超粘着剤", @@ -437,10 +443,13 @@ "item.create.chocolate_glazed_berries": "チョコレートグレーズドベリー", "item.create.chromatic_compound": "色彩の化合物", "item.create.cinder_flour": "ネザーラックの粉", + "item.create.clockwork_component": "時計仕掛け", + "item.create.copper_backtank": "銅のバックタンク", "item.create.copper_ingot": "銅インゴット", "item.create.copper_nugget": "銅塊", "item.create.copper_sheet": "銅板", "item.create.crafter_slot_cover": "クラフタースロットカバー", + "item.create.crafting_blueprint": "クラフトブループリント", "item.create.crushed_aluminum_ore": "砕いたアルミニウム鉱石", "item.create.crushed_brass": "砕いた真鍮", "item.create.crushed_copper_ore": "砕いた銅鉱石", @@ -455,7 +464,8 @@ "item.create.crushed_tin_ore": "砕いた錫鉱石", "item.create.crushed_uranium_ore": "砕いたウラン鉱石", "item.create.crushed_zinc_ore": "砕いた亜鉛鉱石", - "item.create.deforester": "デフォレスター", + "item.create.diving_boots": "潜水ブーツ", + "item.create.diving_helmet": "潜水ヘルメット", "item.create.dough": "生地", "item.create.electron_tube": "電子管", "item.create.empty_blaze_burner": "空のブレイズバーナー", @@ -465,16 +475,16 @@ "item.create.furnace_minecart_contraption": "からくりかまど付きトロッコ", "item.create.goggles": "エンジニアのゴーグル", "item.create.golden_sheet": "金板", - "item.create.handheld_blockzapper": "携帯型ブロックザッパー", "item.create.handheld_worldshaper": "携帯型ワールドシェーパー", "item.create.honey_bucket": "ハチミツ入りバケツ", "item.create.honeyed_apple": "リンゴのハチミツかけ", - "item.create.integrated_circuit": "集積回路", + "item.create.incomplete_clockwork_component": "組み立て中の時計仕掛け", "item.create.iron_sheet": "鉄板", - "item.create.lapis_sheet": "ラピスラズリ板", + "item.create.linked_controller": "リンクコントローラー", "item.create.minecart_contraption": "からくり付きトロッコ", "item.create.minecart_coupling": "トロッコ連結器", "item.create.polished_rose_quartz": "磨かれたローズクォーツ", + "item.create.potato_cannon": "ポテトキャノン", "item.create.powdered_obsidian": "黒曜石の粉", "item.create.propeller": "プロペラ", "item.create.red_sand_paper": "赤い紙やすり", @@ -499,7 +509,7 @@ "_": "->------------------------] Advancements [------------------------<-", "advancement.create.root": "Createへようこそ", - "advancement.create.root.desc": "素晴らしいからくり機構を作る時間だ!", + "advancement.create.root.desc": "素晴らしいからくり仕掛けを作る時間だ!", "advancement.create.andesite_alloy": "大いに押韻", "advancement.create.andesite_alloy.desc": "Createの素材には変な名前がついています、安山岩合金もその一つです", "advancement.create.its_alive": "こいつ…動くぞ!", @@ -508,51 +518,51 @@ "advancement.create.shifting_gears.desc": "大きい歯車と小さい歯車を噛み合わせて回転速度を変更する", "advancement.create.overstressed": "超過応力", "advancement.create.overstressed.desc": "応力の限界を肌で感じる", - "advancement.create.belt": "コンブ駆動", + "advancement.create.belt": "ベルトコンブア", "advancement.create.belt.desc": "2つのシャフトをメカニカルベルトで繋ぐ", - "advancement.create.tunnel": "隠せ!", - "advancement.create.tunnel.desc": "メカニカルベルトをトンネルで装飾する", + "advancement.create.tunnel": "隠れろ!", + "advancement.create.tunnel.desc": "メカニカルベルトをトンネルで飾る", "advancement.create.splitter_tunnel": "困難は分割せよ", "advancement.create.splitter_tunnel.desc": "真鍮トンネルで仕分け機を作る", "advancement.create.chute": "転がり落ちる", "advancement.create.chute.desc": "メカニカルベルトの垂直バージョン、シュートを設置する", - "advancement.create.upward_chute": "空への誘い", + "advancement.create.upward_chute": "机上の空論", "advancement.create.upward_chute.desc": "落ちているアイテムがファンで駆動するシュートに飛んでいく様子を見る", - "advancement.create.belt_funnel": "ファンネルのぶらさがってる、ひらひらしたやつ", - "advancement.create.belt_funnel.desc": "ベルトやデポ等の上に横向きのファンネルを置き、特殊形態にする", - "advancement.create.belt_funnel_kiss": "オウムと羽ばたき", + "advancement.create.belt_funnel": "ファンネルのひらひら", + "advancement.create.belt_funnel.desc": "ベルトやデポなどの上に横向きのファンネルを置き、特殊形態にする", + "advancement.create.belt_funnel_kiss": "コウノトリの羽ばたき", "advancement.create.belt_funnel_kiss.desc": "2つのベルトに載せたファンネルにキスをさせる", "advancement.create.fan": "メカニカルエアベンダー", "advancement.create.fan.desc": "ケース入りファンから出る風に乗る", - "advancement.create.fan_lava": "地熱暖房器具", + "advancement.create.fan_lava": "地熱ファンヒーター", "advancement.create.fan_lava.desc": "アイテムを精錬する熱風に巻き込まれる", - "advancement.create.fan_water": "奇妙な洗濯機", + "advancement.create.fan_water": "風変りな洗濯機", "advancement.create.fan_water.desc": "アイテムを洗浄する涼風に巻き込まれる", "advancement.create.fan_smoke": "メカニカルふいご", "advancement.create.fan_smoke.desc": "アイテムを燻製する暖風に巻き込まれる", - "advancement.create.wrench": "便利に設定", + "advancement.create.wrench": "便利な設定", "advancement.create.wrench.desc": "からくり作りに役立つレンチを作る", "advancement.create.goggles": "応力をこの目で", "advancement.create.goggles.desc": "機械からより多くの情報を手に入れるために、エンジニアのゴーグルを作る", "advancement.create.speedometer": "正確な速度は?", - "advancement.create.speedometer.desc": "動作中の速度メーターをゴーグルで見て、正確な値を読み取る", + "advancement.create.speedometer.desc": "動作中の回転速度メーターをゴーグルで見て、正確な値を読み取る", "advancement.create.stressometer": "正確な応力は?", "advancement.create.stressometer.desc": "動作中の応力メーターをゴーグルを通して見て、正確な値を読み取る", "advancement.create.aesthetics": "装飾ブーム!", "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.chocolate_wheel": "味わい深い原動機", "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.millstone": "ポケット粉砕機", + "advancement.create.millstone": "ポケットクラッシャー", "advancement.create.millstone.desc": "石臼を置いて、回転させる", - "advancement.create.windmill": "凱風快晴", + "advancement.create.windmill": "微風", "advancement.create.windmill.desc": "風車を組み立てる", "advancement.create.maxed_windmill": "雄風", "advancement.create.maxed_windmill.desc": "最強の風車を組み立てる", @@ -584,13 +594,13 @@ "advancement.create.copper_casing.desc": "銅と木材を使って銅ケーシングを作る", "advancement.create.spout": "ぱしゃぱしゃ", "advancement.create.spout.desc": "アイテム注液口が液体を充填している様子を見る", - "advancement.create.spout_potion": "大きな醸造台", + "advancement.create.spout_potion": "世界のお薬屋さん", "advancement.create.spout_potion.desc": "アイテム注液口がポーションを瓶に詰めているところを見る", "advancement.create.chocolate": "夢の世界", "advancement.create.chocolate.desc": "溶けたチョコレート入りバケツを手に入れる", "advancement.create.item_drain": "バケツをひっくり返したような", "advancement.create.item_drain.desc": "アイテム排液口が液体アイテムを空にしている様子を見る", - "advancement.create.chained_item_drain": "鉛筆転がし!", + "advancement.create.chained_item_drain": "アイテムころりん", "advancement.create.chained_item_drain.desc": "自動化したアイテム排液口の上を転がるアイテムを見る", "advancement.create.glass_pipe": "フロウ・スパイ", "advancement.create.glass_pipe.desc": "まっすぐな液体パイプにレンチを使って、窓から通る液体を見る", @@ -606,7 +616,7 @@ "advancement.create.infinite_lava.desc": "無限と言えるほどの大量の溶岩を吸引する", "advancement.create.infinite_chocolate": "空想に溺れて", "advancement.create.infinite_chocolate.desc": "無限と言えるほどの大量の溶けたチョコレートを吸引する", - "advancement.create.crafter": "自動作業台", + "advancement.create.crafter": "部品集結!", "advancement.create.crafter.desc": "メカニカルクラフターを設置して、回転力を供給する", "advancement.create.clockwork_bearing": "時計仕掛け", "advancement.create.clockwork_bearing.desc": "時計仕掛けのベアリングの上に構造物を組み立てる", @@ -620,10 +630,10 @@ "advancement.create.flywheel.desc": "かまどエンジンを勢車に繋ぐ", "advancement.create.overstress_flywheel": "ハイレベル応力", "advancement.create.overstress_flywheel.desc": "かまどエンジンに超過応力をかける", - "advancement.create.integrated_circuit": "複素数の計算", + "advancement.create.integrated_circuit": "複雑な計算", "advancement.create.integrated_circuit.desc": "集積回路を組み立てる", "advancement.create.mechanical_arm": "手が離せない!", - "advancement.create.mechanical_arm.desc": "搬入元と搬出先を設定したメカニカルアームを設置して、稼働させ、あなたのために一生懸命労働している様子を見る", + "advancement.create.mechanical_arm.desc": "搬入元と搬出先を設定したメカニカルアームを設置して稼働させ、あなたのために一生懸命働いている様子を見る", "advancement.create.musical_arm": "お気に入りの曲を流して!", "advancement.create.musical_arm.desc": "メカニカルアームがジュークボックスを使う様子を見る", "advancement.create.arm_many_targets": "整理整頓", @@ -644,14 +654,8 @@ "advancement.create.refined_radiance.desc": "究極の色彩、「高貴な光輝」を作る", "advancement.create.chromatic_age": "色彩の時代", "advancement.create.chromatic_age.desc": "光と闇のケーシングを作る", - "advancement.create.zapper": "風格ある建築", - "advancement.create.zapper.desc": "建築に役立つレーザー銃、ブロックザッパーを作る", - "advancement.create.upgraded_zapper": "究極の輝き", - "advancement.create.upgraded_zapper.desc": "ブロックザッパーを最大までアップグレードする", "advancement.create.wand_of_symmetry": "輝く鏡", "advancement.create.wand_of_symmetry.desc": "対象の杖を作る", - "advancement.create.deforester": "輝く斧", - "advancement.create.deforester.desc": "デフォレスターを作って、地元の森に別れを告げる", "advancement.create.extendo_grip": "ビヨヨーン!", "advancement.create.extendo_grip.desc": "マジックハンドを手に入れる", "advancement.create.dual_extendo_grip": "究極のビヨンビヨン時代", @@ -670,11 +674,21 @@ "death.attack.create.fan_lava": "%1$s は溶岩ファンによって焼死した", "death.attack.create.mechanical_drill": "%1$s はメカニカルドリルに突き刺さった", "death.attack.create.mechanical_saw": "%1$s はメカニカルソーで半分にカットされた", + "death.attack.create.potato_cannon": "%1$sは%2$sのポテトキャノンに撃ち抜かれた", + "death.attack.create.potato_cannon.item": "%1$sは%3$sで%2$sに撃た抜かれた", "death.attack.create.cuckoo_clock_explosion": "%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.only_ingame": "一時停止メニューで利用可能", + "create.menu.project_page": "プロジェクトページ", + "create.menu.report_bugs": "バグ報告", + "create.menu.support": "私たちを応援する", + "create.recipe.crushing": "粉砕", "create.recipe.milling": "製粉", "create.recipe.fan_washing": "一括洗浄", @@ -685,6 +699,7 @@ "create.recipe.fan_blasting.fan": "溶岩の奥のケース入りファン", "create.recipe.pressing": "プレス", "create.recipe.mixing": "混合", + "create.recipe.deploying": "使用", "create.recipe.automatic_shapeless": "自動不定形クラフト", "create.recipe.automatic_brewing": "自動醸造", "create.recipe.packing": "圧縮", @@ -694,11 +709,20 @@ "create.recipe.automatic_shaped": "自動定形クラフト", "create.recipe.block_cutting": "自動石切", "create.recipe.wood_cutting": "自動製材", - "create.recipe.blockzapper_upgrade": "携帯型ブロックザッパー", "create.recipe.sandpaper_polishing": "紙やすりでの研磨", "create.recipe.mystery_conversion": "神秘の変転", "create.recipe.spout_filling": "アイテム注液口による注入", "create.recipe.draining": "アイテムから排液", + "create.recipe.sequenced_assembly": "組立ライン", + "create.recipe.assembly.next": "次の工程: %1$s", + "create.recipe.assembly.step": "手順: %1$s:", + "create.recipe.assembly.progress": "進捗: %1$s/%2$s", + "create.recipe.assembly.pressing": "プレスする", + "create.recipe.assembly.spout_filling_fluid": "%1$sを注液", + "create.recipe.assembly.deploying_item": "%1$sを組み込む", + "create.recipe.assembly.cutting": "ソーでの切断", + "create.recipe.assembly.repeat": "%1$s回繰り返す", + "create.recipe.assembly.junk": "ランダムな仕損品", "create.recipe.processing.chance": "%1$s%%チャンス", "create.recipe.heat_requirement.none": "加熱不要", "create.recipe.heat_requirement.heated": "加熱が必要", @@ -751,20 +775,16 @@ "create.orientation.alongZ": "Z に沿る", "create.orientation.alongX": "X に沿る", - "create.gui.blockzapper.title": "携帯型ブロックザッパー", - "create.gui.blockzapper.replaceMode": "置換モード", - "create.gui.blockzapper.searchDiagonal": "対角線にフォロー", - "create.gui.blockzapper.searchFuzzy": "素材の境界を無視", - "create.gui.blockzapper.range": "範囲", - "create.gui.blockzapper.needsUpgradedAmplifier": "増幅アップグレードが必要", - "create.gui.blockzapper.patternSection": "模様", - "create.gui.blockzapper.pattern.solid": "敷き詰め", - "create.gui.blockzapper.pattern.checkered": "市松模様", - "create.gui.blockzapper.pattern.inversecheckered": "逆市松模様", - "create.gui.blockzapper.pattern.chance25": "25%", - "create.gui.blockzapper.pattern.chance50": "50%", - "create.gui.blockzapper.pattern.chance75": "75%", - "create.gui.terrainzapper.title": "携帯型ワールドシェーパー", + "create.gui.terrainzapper.title": "携帯型ブロックザッパー", + "create.gui.terrainzapper.searchDiagonal": "対角線にフォロー", + "create.gui.terrainzapper.searchFuzzy": "素材の境界を無視", + "create.gui.terrainzapper.patternSection": "模様", + "create.gui.terrainzapper.pattern.solid": "敷き詰め", + "create.gui.terrainzapper.pattern.checkered": "市松模様", + "create.gui.terrainzapper.pattern.inversecheckered": "逆市松模様", + "create.gui.terrainzapper.pattern.chance25": "25%", + "create.gui.terrainzapper.pattern.chance50": "50%", + "create.gui.terrainzapper.pattern.chance75": "75%", "create.gui.terrainzapper.placement": "配置", "create.gui.terrainzapper.placement.merged": "合併", "create.gui.terrainzapper.placement.attached": "添える", @@ -773,6 +793,8 @@ "create.gui.terrainzapper.brush.cuboid": "直方体", "create.gui.terrainzapper.brush.sphere": "球体", "create.gui.terrainzapper.brush.cylinder": "円筒", + "create.gui.terrainzapper.brush.surface": "表面", + "create.gui.terrainzapper.brush.cluster": "鉱石", "create.gui.terrainzapper.tool": "ツール", "create.gui.terrainzapper.tool.fill": "埋立", "create.gui.terrainzapper.tool.place": "設置", @@ -782,19 +804,8 @@ "create.gui.terrainzapper.tool.flatten": "なだらかに", "create.terrainzapper.shiftRightClickToSet": "シフト-右クリックで形状を選択", - - "create.blockzapper.usingBlock": "使用中: %1$s", - "create.blockzapper.componentUpgrades": "アップグレード部品:", - "create.blockzapper.component.body": "ボディー", - "create.blockzapper.component.amplifier": "範囲", - "create.blockzapper.component.accelerator": "連射", - "create.blockzapper.component.retriever": "回収", - "create.blockzapper.component.scope": "射程", - "create.blockzapper.componentTier.none": "無し", - "create.blockzapper.componentTier.brass": "真鍮", - "create.blockzapper.componentTier.chromatic": "色彩", - "create.blockzapper.leftClickToSet": "ブロックをスニークせず左クリックでブロックを選択", - "create.blockzapper.empty": "ブロック不足!", + "create.terrainzapper.usingBlock": "使用中: %1$s", + "create.terrainzapper.leftClickToSet": "ブロックをスニークせず左クリックでブロックを選択", "create.minecart_coupling.two_couplings_max": "トロッコを2つ以上連結させることはできません", "create.minecart_coupling.unloaded": "列車の一部のあるチャンクがロードされていません", @@ -1121,6 +1132,20 @@ "create.tooltip.chute.fans_pull_down": "ファンが下から吸い込んでいます", "create.tooltip.chute.contains": "内容物: %1$s x%2$s", + "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.key_bound": "周波数を割り当てました %1$s", + "create.linked_controller.frequency_slot_1": "キーバインド: %1$s、周波数 #1", + "create.linked_controller.frequency_slot_2": "キーバインド: %1$s、周波数 #2", + + "create.crafting_blueprint.crafting_slot": "材料スロット", + "create.crafting_blueprint.filter_items_viable": "フィルターが使えます", + "create.crafting_blueprint.display_slot": "表示スロット", + "create.crafting_blueprint.inferred": "レシピから推測", + "create.crafting_blueprint.manually_assigned": "手動割り当て", + "create.crafting_blueprint.secondary_display_slot": "第2表示スロット", + "create.crafting_blueprint.optional": "オプション", + "create.hint.hose_pulley.title": "底なし搬出", "create.hint.hose_pulley": "対象となる液体は無限とみなされています。", "create.hint.mechanical_arm_no_targets.title": "ターゲットが見つかりません", @@ -1148,32 +1173,45 @@ "create.command.killTPSCommand.argument.tickTime": "tickTime", "create.contraption.minecart_contraption_too_big": "このからくりトロッコは大きすぎて拾えません。", + "create.contraption.minecart_contraption_illegal_pickup": "神秘的な力がからくりカートを世界に縛り付けています。", "_": "->------------------------] Subtitles [------------------------<-", - "create.subtitle.cogs": "歯車がゴロゴロと鳴る", - "create.subtitle.slime_added": "スライムがぐしゃっとつぶれる", "create.subtitle.contraption_disassemble": "からくりが止まる", - "create.subtitle.wrench_rotate": "レンチを使う", + "create.subtitle.peculiar_bell_use": "風変わりな鐘が鳴る", "create.subtitle.mixing": "混ぜる音", "create.subtitle.mechanical_press_activation_belt": "メカニカルプレスがボンと鳴る", - "create.subtitle.blockzapper_confirm": "成功音", + "create.subtitle.fwoomp": "ポテトランチャーがズキューンと鳴る", + "create.subtitle.worldshaper_place": "ワールドシェーパーが設置する", "create.subtitle.depot_slide": "アイテムが滑る", - "create.subtitle.blockzapper_place": "ブロックを発射して設置する", + "create.subtitle.saw_activate_stone": "メカニカルソーが動作する", "create.subtitle.blaze_munch": "ブレイズの咀嚼音", - "create.subtitle.schematicannon_launch_block": "概略図砲が発射する", "create.subtitle.funnel_flap": "ファンネルがはためく", "create.subtitle.schematicannon_finish": "概略図砲が作業を終える", "create.subtitle.scroll_value": "スクロールのカチカチ音", + "create.subtitle.crafter_craft": "メカニカルクラフターがクラフトする", + "create.subtitle.controller_put": "コントローラのトントン音", + "create.subtitle.cranking": "ハンドクランクが回る", + "create.subtitle.wrench_remove": "機械を壊す", + "create.subtitle.cogs": "歯車がゴロゴロと鳴る", + "create.subtitle.slime_added": "スライムがぐしゃっとつぶれる", + "create.subtitle.wrench_rotate": "レンチが使用される", + "create.subtitle.potato_hit": "野菜が衝突する", + "create.subtitle.saw_activate_wood": "メカニカルソーが動作する", + "create.subtitle.deployer_polish": "デプロイヤーが磨く", + "create.subtitle.deny": "失敗音", + "create.subtitle.controller_click": "コントローラーのカチカチ音", + "create.subtitle.schematicannon_launch_block": "概略図砲が発射する", + "create.subtitle.copper_armor_equip": "潜水服がチャリンと鳴る", + "create.subtitle.cursed_bell_use": "呪われた鐘が鳴る", + "create.subtitle.cursed_bell_convert": "呪われた金が目覚める", + "create.subtitle.controller_take": "書見台が空になる", "create.subtitle.mechanical_press_activation": "メカニカルプレスがガーンと鳴る", "create.subtitle.contraption_assemble": "からくりが動く", - "create.subtitle.crafter_craft": "メカニカルクラフターがクラフトする", - "create.subtitle.blockzapper_deny": "失敗音", - "create.subtitle.cranking": "ハンドクランクが回る", "create.subtitle.crafter_click": "メカニカルクラフターのカチカチ音", - "create.subtitle.wrench_remove": "機械を壊す", "create.subtitle.depot_plop": "デプロイヤーにアイテムが入れられる", + "create.subtitle.confirm": "成功音", "_": "->------------------------] Item Descriptions [------------------------<-", @@ -1193,14 +1231,6 @@ "block.create.metal_bracket.tooltip": "金属ブラケット", "block.create.metal_bracket.tooltip.summary": "補強用の頑丈で工業的な欠片で_シャフト_、_歯車_、そして_パイプ_を_飾ろう_。", - "block.create.copper_casing.tooltip": "銅ケーシング", - "block.create.copper_casing.tooltip.summary": "様々な用途に使える丈夫なマシンケーシング。飾り付けにも安心してお使いいただけます。", - "block.create.copper_casing.tooltip.condition1": "液体パイプに使ったとき", - "block.create.copper_casing.tooltip.behaviour1": "_液体パイプ_を_銅ケーシング_で_覆います_。ケース入り液体パイプは_接続状態を固定_し、隣にパイプ等を置いても接続が変化しなくなります。", - - "block.create.encased_fluid_pipe.tooltip": "ケース入り液体パイプ", - "block.create.encased_fluid_pipe.tooltip.summary": "銅ケーシングに覆われた液体パイプ", - "block.create.seat.tooltip": "シート", "block.create.seat.tooltip.summary": "シートに座って乗り物を楽しもう!移動する_構造物_の上にプレイヤーを固定します。もちろん家具にも使えます。染色することも。", "block.create.seat.tooltip.condition1": "右クリックしたとき", @@ -1209,65 +1239,6 @@ "item.create.blaze_cake.tooltip": "ブレイズケーキ", "item.create.blaze_cake.tooltip.summary": "働き者の_ブレイズバーナー_達に美味しいご馳走を。彼らを燃え上がらせよう(物理)!", - "block.create.fluid_pipe.tooltip": "液体パイプ", - "block.create.fluid_pipe.tooltip.summary": "_液体_の輸送に使います。_液体_輸送にはメカニカルポンプが必要です。", - "block.create.fluid_pipe.tooltip.condition1": "液体輸送", - "block.create.fluid_pipe.tooltip.behaviour1": "_タンク_や_鉢_などの_液体コンテナ_に繋がります。また、_パイプ_の端が露出しているので液体を吹き出したり設置したりできます。液漏れ注意!", - "block.create.fluid_pipe.tooltip.condition2": "レンチで右クリックしたとき", - "block.create.fluid_pipe.tooltip.behaviour2": "可能ならパイプに窓を設けます。", - - "block.create.hose_pulley.tooltip": "ホースプーリー", - "block.create.hose_pulley.tooltip.summary": "ワールドの大量の_液体_を_吸引_したり、_放出_したりするのに使います。", - "block.create.hose_pulley.tooltip.condition1": "回転力を供給したとき", - "block.create.hose_pulley.tooltip.behaviour1": "ホースを_上げ下げ_して、どの程度の_高さ_まで_吸引_や_放出_を行うか決めます。", - "block.create.hose_pulley.tooltip.condition2": "プーリー本体から液体を吸い込むとき", - "block.create.hose_pulley.tooltip.behaviour2": "ホースの端がおろされた本体から_液体_ブロックを_吸引_し始めます。非常に_大量_の液体は_無限_と_みなされます_。", - "block.create.hose_pulley.tooltip.condition3": "プーリー本体に液体が押しこまれたとき", - "block.create.hose_pulley.tooltip.behaviour3": "ホースの端の_高さ_まで、_液体_の_放出_を始めます。", - - "block.create.fluid_tank.tooltip": "液体タンク", - "block.create.fluid_tank.tooltip.summary": "あなたのお気に入りのあらゆる_液体_を_貯蔵_できます。縦横に並べて大きさを調整できます。", - "block.create.fluid_tank.tooltip.condition1": "レンチで右クリックしたとき", - "block.create.fluid_tank.tooltip.behaviour1": "窓の付けたり、外したりします。", - - "block.create.creative_fluid_tank.tooltip": "クリエイティブ液体タンク", - "block.create.creative_fluid_tank.tooltip.summary": "この_液体タンク_は、あらゆる液体を無限に複製します。縦横に並べて大きさを調整できます。", - "block.create.creative_fluid_tank.tooltip.condition1": "液体がタンクに入っているとき", - "block.create.creative_fluid_tank.tooltip.behaviour1": "このタンクから何かを_取り出す_と、指定された液体が_無限_に_供給_されます。このタンクに_搬入_された液体は_消滅_します。", - "block.create.creative_fluid_tank.tooltip.condition2": "レンチで左クリックしたとき", - "block.create.creative_fluid_tank.tooltip.behaviour2": "窓を付け外しします。", - - "block.create.fluid_valve.tooltip": "液体バルブ", - "block.create.fluid_valve.tooltip.summary": "パイプ内の液体の流れを止めます。", - "block.create.fluid_valve.tooltip.condition1": "液体制御", - "block.create.fluid_valve.tooltip.behaviour1": "_回転力_を加えると_バルブ_は強制的に閉じ、_液体_の流れを止めます。_回転_方向を逆にするとバルブが再び開きます。", - - "block.create.mechanical_pump.tooltip": "メカニカルポンプ", - "block.create.mechanical_pump.tooltip.summary": "_回転力_を使って_パイプ_に沿って_液体_を輸送します。両方向に最大効果範囲があります。(デフォルト16ブロック)", - "block.create.mechanical_pump.tooltip.condition1": "液体輸送", - "block.create.mechanical_pump.tooltip.behaviour1": "_回転力_を加えると_パイプ_を流れる_液体_を移動させる圧力が発生します。_回転方向_を逆にすると、_液体_の流れる方向を切り替えられます。", - "block.create.mechanical_pump.tooltip.control1": "レンチで右クリックしたとき", - "block.create.mechanical_pump.tooltip.action1": "_ポンプ_の方向を反転させ、デフォルトの流れる方向を切り替えます。", - - "block.create.smart_fluid_pipe.tooltip": "スマート液体パイプ", - "block.create.smart_fluid_pipe.tooltip.summary": "フィルター付きの_液体パイプ_。どの_液体_を通過させるか設定できます。", - "block.create.smart_fluid_pipe.tooltip.condition1": "液体を搬入したとき", - "block.create.smart_fluid_pipe.tooltip.behaviour1": "フィルターに合わない液体を搬入したスマート液体パイプは、流れを遮断します。", - "block.create.smart_fluid_pipe.tooltip.condition2": "液体コンテナに隣接しているとき", - "block.create.smart_fluid_pipe.tooltip.behaviour2": "あらゆる容器から_流れ出す_スマート液体パイプは、その_フィルター_に_合った_液体のみを搬入します。", - - "block.create.spout.tooltip": "アイテム注液口", - "block.create.spout.tooltip.summary": "_液体_を注入する注液器。", - "block.create.spout.tooltip.condition1": "液体充填", - "block.create.spout.tooltip.behaviour1": "_バケツ_や_瓶_のような_容器アイテム_を下に置くと、貯蔵された_液体_でそれを満たします。", - "block.create.spout.tooltip.condition2": "液体自動化", - "block.create.spout.tooltip.behaviour2": "_ベルト_や_デポ_の上に置かれたアイテム注液口は、その下を通過する_容器アイテム_に反応します。", - - "block.create.item_drain.tooltip": "アイテム排液口", - "block.create.item_drain.tooltip.summary": "_液体アイテム_を空にする格子の付いたデポ。", - "block.create.item_drain.tooltip.condition1": "液体排液", - "block.create.item_drain.tooltip.behaviour1": "_バケツ_や_ボトル_などの_液体入り容器_を横から搬入すると、アイテム排液口はその_液体入り容器_に空にしようとします。その後、アイテムは反対側に排出されます。", - "item.create.wand_of_symmetry.tooltip": "対称の杖", "item.create.wand_of_symmetry.tooltip.summary": "対象の鏡をまたいだ範囲内のブロック設置を完全に複製します。", "item.create.wand_of_symmetry.tooltip.condition1": "ホットバーにあるとき", @@ -1277,16 +1248,7 @@ "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_blockzapper.tooltip": "携帯型ブロックザッパー", - "item.create.handheld_blockzapper.tooltip.summary": "離れた場所にブロックを設置または交換する新しいガジェット。", - "item.create.handheld_blockzapper.tooltip.control1": "ブロックを左クリックしたとき", - "item.create.handheld_blockzapper.tooltip.action1": "ターゲットのブロックをこのツールに設定します。", - "item.create.handheld_blockzapper.tooltip.control2": "ブロックを右クリックしたとき", - "item.create.handheld_blockzapper.tooltip.action2": "ターゲットブロックを_配置_または_置換_します。", - "item.create.handheld_blockzapper.tooltip.control3": "スニークしながら右クリックしたとき。", - "item.create.handheld_blockzapper.tooltip.action3": "_設定インターフェース_を開きます。", + "item.create.wand_of_symmetry.tooltip.action3": "_設定画面_を開きます。", "item.create.handheld_worldshaper.tooltip": "携帯型ワールドシェーパー", "item.create.handheld_worldshaper.tooltip.summary": "特色ある_風景_や_地形_を作成する便利なツール。", @@ -1295,44 +1257,50 @@ "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.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.deforester.tooltip": "デフォレスター", - "item.create.deforester.tooltip.summary": "一瞬で木を切り倒すことができる_輝く斧_。", - "item.create.extendo_grip.tooltip": "マジックハンド", "item.create.extendo_grip.tooltip.summary": "ビヨヨーン!着用者の_射程_を大幅に_伸ばし_ます。", "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.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.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.behaviour2": "_設定画面_を開きます。", "item.create.empty_schematic.tooltip": "空の概略図", "item.create.empty_schematic.tooltip.summary": "レシピの材料、および_概略図テーブル_での書き込みに使われます。", "item.create.schematic.tooltip": "概略図", - "item.create.schematic.tooltip.summary": "ワールドに設置できる構造物を保持します。ホログラムを必要に応じて配置し、_概略図砲_を使って建築します。", + "item.create.schematic.tooltip.summary": "ワールドに設置できる構造物を保存します。ホログラムを必要に応じて配置し、_概略図砲_を使って建築します。", "item.create.schematic.tooltip.condition1": "持ったとき", "item.create.schematic.tooltip.behaviour1": "画面上のツールを使ってホログラムを配置します。", "item.create.schematic.tooltip.control1": "スニークしながら右クリックしたとき", - "item.create.schematic.tooltip.action1": "正確な_座標_を入力する_インターフェース_を開きます", + "item.create.schematic.tooltip.action1": "正確な_座標_の入力_画面_を開きます", "item.create.schematic_and_quill.tooltip": "概略図と羽根ペン", "item.create.schematic_and_quill.tooltip.summary": "ワールドの構造物を.nbtファイルに保存できます。", @@ -1348,9 +1316,9 @@ "item.create.schematic_and_quill.tooltip.action3": "選択を_リセット_して削除します。", "block.create.schematicannon.tooltip": "概略図砲", - "block.create.schematicannon.tooltip.summary": "ブロックを撃って、展開された_概略図_をもとにワールドに設置します。隣接する収納ブロックからのアイテムを自動搬入し、_火薬_を燃料とします。", + "block.create.schematicannon.tooltip.summary": "ブロックを撃って、_概略図_をもとにワールドに設置します。隣接する収納ブロックからのアイテムを自動搬入し、_火薬_を燃料とします。", "block.create.schematicannon.tooltip.condition1": "右クリックしたとき", - "block.create.schematicannon.tooltip.behaviour1": "_インターフェース_を開きます。", + "block.create.schematicannon.tooltip.behaviour1": "_UI_を開きます。", "block.create.schematic_table.tooltip": "概略図テーブル", "block.create.schematic_table.tooltip.summary": "保存された構造物を_空の概略図_に書き込みます。", @@ -1362,7 +1330,7 @@ "item.create.goggles.tooltip.condition1": "着用したとき", "item.create.goggles.tooltip.behaviour1": "設置された機械の_回転速度_および、_機械_の_応力への影響_と_許容量_を_色付きのインジケーター_で表示します。", "item.create.goggles.tooltip.condition2": "計器を見たとき", - "item.create.goggles.tooltip.behaviour2": "計器が接続されているネットワークの_回転速度_または_応力_に関する詳細情報を表示します。", + "item.create.goggles.tooltip.behaviour2": "計器が接続されている動力ネットワークの_回転速度_または_応力_に関する詳細情報を表示します。", "item.create.goggles.tooltip.condition3": "液体コンテナを見たとき", "item.create.goggles.tooltip.behaviour3": "ブロックの_容量_と、その中に貯蔵されている_液体_の詳細情報を表示します。", @@ -1384,28 +1352,21 @@ "block.create.turntable.tooltip": "ターンテーブル", "block.create.turntable.tooltip.summary": "_回転力_を洗練された乗り物酔いに変えます。", - "block.create.portable_fluid_interface.tooltip": "ポータブル液体インターフェース", - "block.create.portable_fluid_interface.tooltip.summary": "ピストン、ベアリング、トロッコ、またはプーリーで移動する_構造物_との間で_液体_を_移動_させる可搬式の交換ポイント。2つのインターフェースは、互いに_向かい合って_、_1~2ブロック離す_必要があります。", - "block.create.portable_fluid_interface.tooltip.condition1": "動かしたとき", - "block.create.portable_fluid_interface.tooltip.behaviour1": "設置してある_ポータブル液体インターフェース_と相互作用して、構造物との間で液体を移動させます。_設置してあるインターフェース_に搬入、または搬出するパイプは、構造物のタンクと_直接_相互作用します。液体が交換される間、構造物は一時的に停止します。", - "block.create.portable_fluid_interface.tooltip.condition2": "レッドストーン信号を受けたとき", - "block.create.portable_fluid_interface.tooltip.behaviour2": "アクティブな接続を即座に_切断_します。", - "block.create.stockpile_switch.tooltip": "在庫スイッチ", - "block.create.stockpile_switch.tooltip.summary": "接続されたコンテナの_空き容量_に基づいてレッドストーン信号を切り替えます。便利なフィルターが付属しています。_コンパレータ―_とは違って、_在庫スイッチ_は、信号が反転される_しきい値_を設定できます。", + "block.create.stockpile_switch.tooltip.summary": "接続されたコンテナの_空き容量_によってレッドストーン信号を切り替えます。便利なフィルターが付属しています。_コンパレータ―_とは違って、_在庫スイッチ_は、信号が反転される_しきい値_を設定できます。", "block.create.stockpile_switch.tooltip.condition1": "右クリックしたとき", - "block.create.stockpile_switch.tooltip.behaviour1": "_設定インターフェース_を開きます。", + "block.create.stockpile_switch.tooltip.behaviour1": "_設定画面_を開きます。", "block.create.content_observer.tooltip": "コンテンツオブザーバー", - "block.create.content_observer.tooltip.summary": "設定された_フィルター_に一致する_コンテナ_や_メカニカルベルト_内の_アイテム_を_検出_します。観察している_収納ブロック_、_ベルト_、または_シュート_に一致するアイテムが含まれている場合、このは_レッドストーン信号_を発します。観察された_ファンネル_が一致するアイテムを_運搬_すると、このコンポーネントは_レッドストーンパルス_を発します。", + "block.create.content_observer.tooltip.summary": "設定された_フィルター_に一致する_コンテナ_や_メカニカルベルト_内の_アイテム_を_検出_します。観察している_収納ブロック_、_ベルト_、または_シュート_に一致するアイテムが含まれている場合、このは_レッドストーン信号_を発します。観察している_ファンネル_が一致するアイテムを_運搬_すると、このコンポーネントは_レッドストーンパルス_を発します。", "block.create.adjustable_crate.tooltip": "可変クレート", "block.create.adjustable_crate.tooltip.summary": "この_収納ブロック_は、容量を手動で調整できます。任意のアイテムを_16スタック_まで収納できます。_レッドストーンコンパレーター_に対応しています。", - "block.create.adjustable_crate.tooltip.condition": "右クリックしたとき", - "block.create.adjustable_crate.tooltip.behaviour1": "_インターフェース_を開きます。", + "block.create.adjustable_crate.tooltip.condition1": "右クリックしたとき", + "block.create.adjustable_crate.tooltip.behaviour1": "_UI_を開きます。", "block.create.creative_crate.tooltip": "クリエイティブクレート", - "block.create.creative_crate.tooltip.summary": "この_収納ブロック_は、あらゆるアイテムを無限に複製します。隣接する_概略図砲_へブロックを無限に供給します。", + "block.create.creative_crate.tooltip.summary": "あらゆるアイテムを無限に複製する_収納ブロック_。隣接する_概略図砲_へブロックを無限に供給します。", "block.create.creative_crate.tooltip.condition1": "フィルタースロットにアイテムが入っているとき", "block.create.creative_crate.tooltip.behaviour1": "このクレートから何かを_搬出_すると、指定されたアイテムが_無限_に_搬出_されます。このクレートに_搬入_されたアイテムは_消滅_します。", @@ -1424,27 +1385,61 @@ "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.shadow_steel.tooltip": "シャドウスチール", "item.create.shadow_steel.tooltip.summary": "_奈落の虚無_から鍛造した色彩素材。", + "item.create.shadow_steel.tooltip.condition1": "作業中", + "item.create.shadow_steel.tooltip.behaviour1": "この素材の使用方法は将来のリリースで実装予定です。", + + "item.create.linked_controller.tooltip": "リンクコントローラー", + "item.create.linked_controller.tooltip.summary": "_6つのボタン_に割り当てられた_レッドストーンリンク_周波数を_片手_で_制御_できます。", + "item.create.linked_controller.tooltip.condition1": "左クリック", + "item.create.linked_controller.tooltip.behaviour1": "コントローラーを_オンオフ_します。_制御_がオンのときは_移動_できません。", + "item.create.linked_controller.tooltip.condition2": "スニークしながら左クリック", + "item.create.linked_controller.tooltip.behaviour2": "手動_設定画面_を開きます", + "item.create.linked_controller.tooltip.condition3": "レッドストーンリンク受信機を左クリックしたとき", + "item.create.linked_controller.tooltip.behaviour3": "_割り当てモード_をオンにします。_6つのコントロール_のうち1つを押してリンクの周波数に_割り当て_ます。", + "item.create.linked_controller.tooltip.condition4": "書見台を左クリックしたとき", + "item.create.linked_controller.tooltip.behaviour4": "コントローラーを書見台に設置し、簡単に使えるようにします。(スニーク中に左クリックで取り出せます)", + + "item.create.diving_helmet.tooltip": "潜水ヘルメット", + "item.create.diving_helmet.tooltip.summary": "_銅のバックタンク_と一緒に使うと、長時間_水中_で_呼吸_できるようになるヘルメット。", + "item.create.diving_helmet.tooltip.condition1": "装備したとき", + "item.create.diving_helmet.tooltip.behaviour1": "バックタンクからゆっくりと_圧縮空気_を排出しながら、_水中呼吸_の効果を供給します。", + + "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.diving_boots.tooltip": "潜水ブーツ", + "item.create.diving_boots.tooltip.summary": "海底を歩けるようになる_重いブーツ_。", + "item.create.diving_boots.tooltip.condition1": "装備したとき", + "item.create.diving_boots.tooltip.behaviour1": "_沈むのが早くなり_、_泳げなく_なります。その代わり、水中で_歩行_と_ジャンプ_が可能になります。また、メカニカルベルトの影響を受けなくなります。", + + "item.create.crafting_blueprint.tooltip": "クラフトブループリント", + "item.create.crafting_blueprint.tooltip.summary": "壁に_貼り_、_材料_の_配置_を_指定_することで手作業でのクラフトを簡単にできます。各スロットが1つのレシピを表しています。", + "item.create.crafting_blueprint.tooltip.condition1": "空きスロットを左クリックしたとき", + "item.create.crafting_blueprint.tooltip.behaviour1": "_レシピ_や表示するアイテムを_設定_できる_クラフトメニュー_を開きます。", + "item.create.crafting_blueprint.tooltip.condition2": "設定済みスロットを左クリックしたとき", + "item.create.crafting_blueprint.tooltip.behaviour2": "_インベントリ_にある一致する材料で_設定されたレシピ_を_クラフト_します。_スニーク_すれば最大_スタック_分を一気にクラフトできます", "item.create.minecart_coupling.tooltip": "トロッコ連結器", "item.create.minecart_coupling.tooltip.summary": "壮大な列車を作るために_トロッコ_や_からくり車両_を_連結_しよう。", "item.create.minecart_coupling.tooltip.condition1": "トロッコに使ったとき", "item.create.minecart_coupling.tooltip.behaviour1": "_2台_のトロッコを連結します。それらは移動中に_一定_の_距離_を保とうします。", - "create.tooltip.wip": "WIP", - "create.tooltip.workInProgress": "作業中です!", - "create.tooltip.randomWipDescription0": "お子様の手の届かないところに保管してください。", - "create.tooltip.randomWipDescription1": "赤ちゃんパンダは、このアイテムを使うたびに死にます。そう、いつでもね。", - "create.tooltip.randomWipDescription2": "自己責任。", - "create.tooltip.randomWipDescription3": "これはあなたが探しているアイテムではありません。*人差し指を振って*ちっちっちっ、解散!", - "create.tooltip.randomWipDescription4": "このアイテムは10秒で自爆します。10、9、8 ...", - "create.tooltip.randomWipDescription5": "私を信じて、それは無駄だ。", - "create.tooltip.randomWipDescription6": "このアイテムを使うことにより、お客様は免責事項に同意し、その条件を承諾するものとします。", - "create.tooltip.randomWipDescription7": "これは君に向いていないかもしれない。あれはどう??", - "create.tooltip.randomWipDescription8": "それを使ったことをすぐ後悔するだろう。", + "block.create.peculiar_bell.tooltip": "風変わりな鐘", + "block.create.peculiar_bell.tooltip.summary": "装飾用の真鍮の鐘。_魂の炎_や_魂の焚き火_の上に置くと、不気味な変化が起こるかもしれません...", + "block.create.cursed_bell.tooltip": "呪われた鐘", + "block.create.cursed_bell.tooltip.summary": "ネザーに彷徨う魂が宿る、不気味な真鍮の鐘", + "block.create.cursed_bell.tooltip.condition1": "持ったとき、鳴らしたとき", + "block.create.cursed_bell.tooltip.behaviour1": "敵モブがスポーンする近くの暗い場所を示します", "_": "->------------------------] Ponder Content [------------------------<-", @@ -1461,6 +1456,11 @@ "create.ponder.replay": "最初から", "create.ponder.think_back": "戻る", "create.ponder.slow_text": "熟考(スロー再生)", + "create.ponder.exit": "終了", + "create.ponder.welcome": "思案画面へようこそ", + "create.ponder.categories": "Createで利用可能なカゴテリ", + "create.ponder.index_description": "アイテムをクリックすると、関連するアイテムやブロックの情報が表示されます。", + "create.ponder.index_title": "思案索引", "create.ponder.shared.movement_anchors": "シャーシや超粘着剤を使えば大きな構造物も動かせます", "create.ponder.shared.rpm32": "32 RPM", "create.ponder.shared.sneak_and": "スニーク +", @@ -1521,10 +1521,10 @@ "create.ponder.andesite_tunnel.text_4": "残ったものは、そのルートを進み続けます", "create.ponder.basin.header": "鉢によるアイテム加工", - "create.ponder.basin.text_1": "鉢には材料となるアイテムや液体を入れられます", + "create.ponder.basin.text_1": "鉢には素材となるアイテムや液体を入れられます", "create.ponder.basin.text_2": "鉢は完成品アイテムを斜め下へ搬出しようとします", - "create.ponder.basin.text_3": "搬出できる機械が存在する場合、鉢には搬出用の蛇口が表示されます", - "create.ponder.basin.text_4": "ここではいくつかの選択肢があります", + "create.ponder.basin.text_3": "搬出できるブロックが存在する場合、鉢には搬出用の蛇口が表示されます", + "create.ponder.basin.text_4": "搬出先のブロックにはいくつかの選択肢があります", "create.ponder.basin.text_5": "搬出したアイテムは下の収納ブロックに入ります", "create.ponder.basin.text_6": "搬出先がない場合、鉢は完成品アイテムを保持します", "create.ponder.basin.text_7": "これは、完成品アイテムを材料として再利用する必要がある場合に役立ちます", @@ -1533,7 +1533,7 @@ "create.ponder.bearing_modes.header": ":メカニカルベアリングの動作モード", "create.ponder.bearing_modes.text_1": "止まったとき、ベアリングは格子に沿った近い角度に構造物を配置します", - "create.ponder.bearing_modes.text_2": "通常のブロックに戻らないように設定したり、開始時の角度のみブロックに戻るように設定することもできます", + "create.ponder.bearing_modes.text_2": "通常のブロックに戻らないように設定したり、開始時の角度のみブロックに戻るように設定したりできます", "create.ponder.belt_casing.header": "ケース入りベルト", "create.ponder.belt_casing.text_1": "真鍮か安山岩のケーシングを使ってメカニカルベルトを飾れます", @@ -1542,16 +1542,16 @@ "create.ponder.belt_connector.header": "メカニカルベルトの使い方", "create.ponder.belt_connector.text_1": "メカニカルベルトを持って2つのシャフトを右クリックすると、シャフトにベルトコンベアを繋げて設置されます", "create.ponder.belt_connector.text_2": "誤ったシャフトをクリックしてしまった場合、スニークしながら右クリックでキャンセルできます", - "create.ponder.belt_connector.text_3": "ベルトの何処にでもシャフトを追加できます", + "create.ponder.belt_connector.text_3": "ベルト内のどこでも、シャフトを追加できます", "create.ponder.belt_connector.text_4": "ベルトを介して接続されたシャフトは、同じ速度・方向で回転します", "create.ponder.belt_connector.text_5": "追加したシャフトは、レンチで取り除けま", "create.ponder.belt_connector.text_6": "メカニカルベルトは見栄えのために染色できます", "create.ponder.belt_directions.header": "メカニカルベルトの有効な向きについて", "create.ponder.belt_directions.text_1": "ベルトは自由な方向に接続できるわけではありません", - "create.ponder.belt_directions.text_2": "1.水平方向", + "create.ponder.belt_directions.text_2": "1.水平", "create.ponder.belt_directions.text_3": "2.斜め", - "create.ponder.belt_directions.text_4": "3.垂直方向", + "create.ponder.belt_directions.text_4": "3.垂直", "create.ponder.belt_directions.text_5": "4.垂直方向のシャフトを水平に", "create.ponder.belt_directions.text_6": "これらはすべて接続可能な方向です。ベルトの長さは2~20ブロックの間で自由に接続できます", @@ -1562,7 +1562,7 @@ "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_3": "ブレイズケーキを与えると、バーナーはさらに火力を出せます", "create.ponder.blaze_burner.text_4": "供給作業は、デプロイヤーやメカニカルアームで自動化できます", "create.ponder.brass_funnel.header": "真鍮ファンネル", @@ -1581,7 +1581,7 @@ "create.ponder.brass_tunnel.text_7": "搬入したアイテムは、接続されているすべての搬出口に分配されます", "create.ponder.brass_tunnel.text_8": "アイテムをトンネルへ直接搬入することもできます", - "create.ponder.brass_tunnel_modes.header": "真鍮トンネルのモード", + "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": "アイテムはグループ内の全てのトンネルがアイテムを搬入できる場合のみ通過を許可します", @@ -1596,34 +1596,35 @@ "create.ponder.brass_tunnel_modes.text_9": "「ランダム」は、スタック全体をランダムに選択された搬出口に分配します ", "create.ponder.cart_assembler.header": "トロッコアセンブラによる構造物の移動", - "create.ponder.cart_assembler.text_1": "レッドストーン信号を受けたアセンブラは、通過するトロッコに接続された構造物を取り付けます", + "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": "2つのトロッコアセンブラが構造物を共有している場合...", - "create.ponder.cart_assembler_dual.text_2": "...どちらかにレッドストーン信号を受けると、列車が組み立てられます", + "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_3": "他のトロッコを使うこともできます", "create.ponder.cart_assembler_rails.text_4": "かまど付きトロッコは、構造物の収納ブロックから燃料を確保します", "create.ponder.chain_drive.header": "ケース入りチェーンドライブによる回転力の伝達", "create.ponder.chain_drive.text_1": "チェーンドライブは、一列に並べると回転を伝達します", - "create.ponder.chain_drive.text_2": "この様に接続された全てのシャフトは、回転方向が同じです", - "create.ponder.chain_drive.text_3": "列のどの部分でも90度回転させて設置できます", + "create.ponder.chain_drive.text_2": "このように、に接続された全てのシャフトは、回転方向が同じです", + "create.ponder.chain_drive.text_3": "列の任意の部分を90度方向を変えて設置できます", "create.ponder.chain_gearshift.header": "チェーンギアシフトによる回転速度の制御", "create.ponder.chain_gearshift.text_1": "信号を受けていないチェーンギアシフトは、チェーンドライブと同じように動作します", "create.ponder.chain_gearshift.text_2": "信号を受けている時は、列内の他のチェーンドライブに伝達される速度が2倍になります", - "create.ponder.chain_gearshift.text_3": "信号を受けているチェーンギアシフトが動力源に無い場合、速度が半分になります", + "create.ponder.chain_gearshift.text_3": "信号を受けているチェーンギアシフトが動力源でない場合、速度が半分になります", "create.ponder.chain_gearshift.text_4": "いずれの場合も、列内のチェーンドライブは常に「信号入りチェーンギアシフト」の2倍の速度で動作します", "create.ponder.chain_gearshift.text_5": "レッドストーン信号の強度で、比率を1と2の間でより正確に調整できます", "create.ponder.chain_gearshift.text_6": "12 RPM", @@ -1635,7 +1636,7 @@ "create.ponder.chute_upward.header": "シュートでの上方向へ運搬", "create.ponder.chute_upward.text_1": "シュートの上部または下部にファンを配置すると、アイテムを上方向へ運搬できます", - "create.ponder.chute_upward.text_2": "エンジニアのゴーグルを付けてシュートを見ると、移動方向の情報が表示されます", + "create.ponder.chute_upward.text_2": "エンジニアのゴーグルを付けてシュートを見ると、移動方向が表示されます", "create.ponder.chute_upward.text_3": "ブロックで詰まっている端では、アイテムを側面から搬出入する必要があります", "create.ponder.clockwork_bearing.header": "時計仕掛けのベアリングを使った構造物のアニメーション", @@ -1649,21 +1650,27 @@ "create.ponder.clockwork_bearing.text_8": "2つ目の構造物は分針として回転します", "create.ponder.clutch.header": "クラッチによる回転力の制御", - "create.ponder.clutch.text_1": "クラッチは直線に回転を伝達します", - "create.ponder.clutch.text_2": "レッドストーン信号を受けると、回転の伝達を停止します", + "create.ponder.clutch.text_1": "クラッチはまっすぐ回転を伝達します", + "create.ponder.clutch.text_2": "レッドストーン信号を与えると、回転の伝達が止まります", "create.ponder.cog_speedup.header": "歯車による回転速度変化", "create.ponder.cog_speedup.text_1": "大小の歯車は斜めに接続できます", - "create.ponder.cog_speedup.text_2": "大きな歯車から歯車に接続すると、伝達される回転速度が2倍になります", - "create.ponder.cog_speedup.text_3": "逆に接続すると、伝達される回転速度が半分になります", + "create.ponder.cog_speedup.text_2": "大きな歯車から歯車に接続すると、伝達先の回転速度が2倍になります", + "create.ponder.cog_speedup.text_3": "逆に接続すると、伝達先の回転速度が半分になります", "create.ponder.cogwheel.header": "歯車による回転力の伝達", "create.ponder.cogwheel.text_1": "歯車は隣接する歯車へ回転力を伝達します", "create.ponder.cogwheel.text_2": "このように連結された隣のシャフトは、逆方向に回転します", + "create.ponder.creative_fluid_tank.header": "クリエイティブ液体タンク", + "create.ponder.creative_fluid_tank.text_1": "クリエイティブ液体タンクは、液体を無限に供給できます", + "create.ponder.creative_fluid_tank.text_2": "液体容器アイテムで右クリックで液体を指定できます", + "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.text_1": "クリエイティブモーターは、コンパクトで調整可能な原動機です", + "create.ponder.creative_motor.text_2": "背面パネルを見ながらスクロールすると、モーターの回転速度を変更できます", "create.ponder.crushing_wheels.header": "破砕ホイールによるアイテム加工", "create.ponder.crushing_wheels.text_1": "一対の破砕ホイールは、非常に効果的にアイテムを粉砕できます", @@ -1679,7 +1686,7 @@ "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_2": "動作は、常に手前2ブロックの位置へ行われます", "create.ponder.deployer.text_3": "真正面のブロックが邪魔になることはありません", "create.ponder.deployer.text_4": "デプロイヤーは以下の動作に使えます", "create.ponder.deployer.text_5": "ブロックの設置", @@ -1693,31 +1700,42 @@ "create.ponder.deployer_contraption.text_2": "...稼働した場所ごとに稼働し、からくり内の収納ブロックのアイテムを使用します", "create.ponder.deployer_contraption.text_3": "フィルタースロットを使って、どのアイテムを使用するか指定できます", - "create.ponder.deployer_modes.header": "デプロイヤーのモード", + "create.ponder.deployer_modes.header": "デプロイヤーの動作モード", "create.ponder.deployer_modes.text_1": "デフォルトでは、デプロイヤーは右クリックの動作を模倣します", "create.ponder.deployer_modes.text_2": "レンチを使えば、左クリックの動作を模倣するように設定できます", + "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_redstone.header": "レッドストーン信号によるデプロイヤーの制御", "create.ponder.deployer_redstone.text_1": "レッドストーン信号を受けている間、デプロイヤーは稼働しません", "create.ponder.deployer_redstone.text_2": "デプロイヤーは停止する前に、開始したサイクルは終了させます", - "create.ponder.deployer_redstone.text_3": "その為、オフのパルス信号を使って丁度1サイクルだけ稼働させられます", + "create.ponder.deployer_redstone.text_3": "その為、反転したパルス信号を使って丁度1サイクルだけ稼働させられます", "create.ponder.depot.header": "デポの使い方", "create.ponder.depot.text_1": "デポは動かないメカニカルベルトのようなブロックです", - "create.ponder.depot.text_2": "右クリックして、手動でのアイテム搬出入できます", + "create.ponder.depot.text_2": "右クリックして、手動でアイテム搬出入できます", "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_1": "空のバーナーでブレイズを右クリックすると捕獲できます", "create.ponder.empty_blaze_burner.text_2": "また、ブレイズはスポーンブロックから直接捕獲することもできます", - "create.ponder.empty_blaze_burner.text_3": "これで、様々な機械で利用する理想的な熱源が得られます", + "create.ponder.empty_blaze_burner.text_3": "これで、様々な機械で利用できる理想的な熱源が得られます", "create.ponder.empty_blaze_burner.text_4": "空のブレイズバーナーは火打石と打ち金を使って火を付ければ装飾にも使えます", "create.ponder.empty_blaze_burner.text_5": "しかし、これは加工用の熱源には適していません", + "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_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": "溶岩を通過した気流は、加熱されます", @@ -1733,6 +1751,35 @@ "create.ponder.fan_source.text_1": "ファンを熱源に向けて設置すると、回転力を生成できます", "create.ponder.fan_source.text_2": "レッドストーン信号を受けると、回転力が生成されます", + "create.ponder.fluid_pipe_flow.header": "銅パイプを使った液体の移動", + "create.ponder.fluid_pipe_flow.text_1": "液体パイプは2つ以上の液体源と輸送先を繋ぐことができます", + "create.ponder.fluid_pipe_flow.text_2": "レンチを使うと、まっすぐなパイプに窓を付けられます", + "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_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_5": "パイプは、いくつかのブロックから直接液体を吸い込めます", + + "create.ponder.fluid_tank_sizes.header": "液体タンクのサイズ", + "create.ponder.fluid_tank_sizes.text_1": "液体タンクは複数組み合わせて容量を増やせます。", + "create.ponder.fluid_tank_sizes.text_2": "横幅は最大3ブロック", + "create.ponder.fluid_tank_sizes.text_3": "高さは30ブロック以上重ねられます", + "create.ponder.fluid_tank_sizes.text_4": "レンチを使って、タンクの窓を付け外しできます", + + "create.ponder.fluid_tank_storage.header": "液体タンクへの液体の貯蔵", + "create.ponder.fluid_tank_storage.text_1": "液体タンクは大量の液体を貯蔵することができます", + "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.flywheel.header": "勢車による回転力の生成", "create.ponder.flywheel.text_1": "かまどエンジンで回転力を生成するには、勢車が必要です", "create.ponder.flywheel.text_2": "これによって生成される回転力は、非常に大きな応力許容量を持っています", @@ -1745,9 +1792,9 @@ "create.ponder.funnel_compat.text_4": "アイテム排液口など", "create.ponder.funnel_direction.header": "運搬の方向", - "create.ponder.funnel_direction.text_1": "通常の配置では、収納ブロックからアイテムを搬出ます", + "create.ponder.funnel_direction.text_1": "通常の配置では、収納ブロックからアイテムを搬出します", "create.ponder.funnel_direction.text_2": "スニークしながら設置すると、収納ブロックにアイテムを搬入します", - "create.ponder.funnel_direction.text_3": "レンチを使って、設置後にファンネルのモードを変えられます", + "create.ponder.funnel_direction.text_3": "レンチを使って、設置後にファンネルの動作モードを変えられます", "create.ponder.funnel_direction.text_4": "ほとんどの方向で同じことができます", "create.ponder.funnel_direction.text_5": "ベルト上のファンネルは、ベルトの移動方向に応じて搬入/搬出が決まります", @@ -1768,18 +1815,18 @@ "create.ponder.furnace_engine.text_3": "溶鉱炉を使うと、エンジンの効率が2倍になります", "create.ponder.gantry_carriage.header": "ガントリーキャリッジの使い方", - "create.ponder.gantry_carriage.text_1": "ガントリーキャリッジは、ガントリーシャフトに取り付けてスライドさせられます", - "create.ponder.gantry_carriage.text_2": "ガントリーの仕掛けは、取り付けたブロックを動かせます", + "create.ponder.gantry_carriage.text_1": "ガントリーキャリッジは、ガントリーシャフトに取り付けてスライドできます", + "create.ponder.gantry_carriage.text_2": "ガントリーは、取り付けられたブロックを動かします", - "create.ponder.gantry_cascaded.header": "立体ガンドリー", + "create.ponder.gantry_cascaded.header": "立体ガントリー", "create.ponder.gantry_cascaded.text_1": "ガントリーシャフトは、超粘着剤を使わずにキャリッジに取り付けられます", "create.ponder.gantry_cascaded.text_2": "そのガントリーシャフトに取り付けたキャリッジも同様です", - "create.ponder.gantry_cascaded.text_3": "このように、ガントリー機構を立体的に接続すると、複数の移動軸をカバーできます", + "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_3": "また、シャフトの回転方向によっても決まります", "create.ponder.gantry_direction.text_4": "キャリッジへ伝達する回転力も同じルールが適用されます", "create.ponder.gantry_redstone.header": "ガントリーでの回転力の伝播", @@ -1793,11 +1840,11 @@ "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_3": "直角に曲げて伝達すると、鏡映しの方向に回転します", + "create.ponder.gearbox.text_4": "まっすぐ伝達すると、回転方向が逆になります", "create.ponder.gearshift.header": "ギアシフトによる回転力の制御", - "create.ponder.gearshift.text_1": "ギアシフトは、直線に回転を伝達します", + "create.ponder.gearshift.text_1": "ギアシフトは、まっすぐ回転を伝達します", "create.ponder.gearshift.text_2": "レッドストーン信号を受けると、回転方向を逆に伝達します", "create.ponder.hand_crank.header": "ハンドクランクによる回転力の生成", @@ -1806,6 +1853,34 @@ "create.ponder.hand_crank.text_3": "回転速度は比較的速めです", "create.ponder.hand_crank.text_4": "スニークしながら右クリックし続けると、時計回りに回転します", + "create.ponder.hose_pulley.header": "ホースプーリーを使った液体の吸入・放出", + "create.ponder.hose_pulley.text_1": "ホースプーリーは、大規模な液体の吸入や放出に使います", + "create.ponder.hose_pulley.text_2": "回転力の入出口はプーリーのホースの高さを変えるのに使います", + "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_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.text_3": "つまり、液体ネットワークはこのプーリーから液体を無限に出し入れできます", + + "create.ponder.hose_pulley_level.header": "ホースプーリーの吸入・放出レベル", + "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": "下から上に向かって放出します", + "create.ponder.hose_pulley_level.text_5": "ホースの端より上に放出されることはありません", + + "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.large_cogwheel.header": "大きな歯車による回転力の伝達", "create.ponder.large_cogwheel.text_1": "大きな歯車は、直角に接続できます", "create.ponder.large_cogwheel.text_2": "回転力の回転軸を変えてに伝達するのに役立ちます", @@ -1816,12 +1891,12 @@ "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_6": "CTRLを押しながらスクロールすると、接続している全てのシャーシブロックの範囲を一気に調整できます", "create.ponder.linear_chassis_attachment.text_7": "他の面にブロックを接着するには、超粘着剤を使う必要があります", "create.ponder.linear_chassis_attachment.text_8": "この仕組みを使えば、どんな形の構造物もからくりとして動かせます", "create.ponder.linear_chassis_group.header": "リニアシャーシをグループで動かす", - "create.ponder.linear_chassis_group.text_1": "リニアシャーシは、隣の同じシャーシブロックと接続します", + "create.ponder.linear_chassis_group.text_1": "リニアシャーシは、隣の同じ種類のシャーシと繋がります", "create.ponder.linear_chassis_group.text_2": "からくり機械で1つを動かすと、他のリニアシャーシも一緒に動きます", "create.ponder.linear_chassis_group.text_3": "異なる種類のシャーシや、別の方向を向いているシャーシは接続されません", @@ -1846,7 +1921,7 @@ "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_3": "アームは複数の有効な搬出先が設定されていると...", "create.ponder.mechanical_arm_modes.text_4": "...設定に従ってアイテムを分配します", "create.ponder.mechanical_arm_modes.text_5": "レンチを持ってスクロールすると設定を変えられます", "create.ponder.mechanical_arm_modes.text_6": "「順繰り分配」は、有効な全ての搬出先へ順番に搬出します", @@ -1860,8 +1935,8 @@ "create.ponder.mechanical_arm_redstone.text_3": "それを利用し、反転したパルス信号を使って1回だけ稼働させられます", "create.ponder.mechanical_bearing.header": "メカニカルベアリングによる構造物の移動", - "create.ponder.mechanical_bearing.text_1": "メカニカルベアリングは、前方にブロックを取り付けられます", - "create.ponder.mechanical_bearing.text_2": "回転力を供給すると、組み立てた構造物を回転できます", + "create.ponder.mechanical_bearing.text_1": "メカニカルベアリングは、手前にブロックを取り付けられます", + "create.ponder.mechanical_bearing.text_2": "回転力を供給すると、組み立てた構造物を回せます", "create.ponder.mechanical_crafter.header": "メカニカルクラフターの配置", "create.ponder.mechanical_crafter.text_1": "メカニカルクラフターは、あらゆるクラフトレシピを自動化できます", @@ -1885,7 +1960,7 @@ "create.ponder.mechanical_drill.header": "メカニカルドリルでブロックを破壊する", "create.ponder.mechanical_drill.text_1": "メカニカルドリルは回転力を供給すると、目の前のブロックを破壊します", - "create.ponder.mechanical_drill.text_2": "採掘速度は回転速度に依存します", + "create.ponder.mechanical_drill.text_2": "採掘速度は回転速度で決まります", "create.ponder.mechanical_drill_contraption.header": "からくりに組み込んでのメカニカルドリルの使い方", "create.ponder.mechanical_drill_contraption.text_1": "からくりの一部として、メカニカルドリルを動かすと...", @@ -1899,34 +1974,49 @@ "create.ponder.mechanical_mixer.text_1": "ミキサーと鉢があれば、いくつかのクラフトレシピを自動化できます", "create.ponder.mechanical_mixer.text_2": "自動化できるのは不定形レシピといくつかの追加レシピです", "create.ponder.mechanical_mixer.text_3": "レシピの中には、ブレイズバーナーの熱を必要とするものもあります", - "create.ponder.mechanical_mixer.text_4": "フィルタースロットは、2つのレシピが競合する場合に使えます", + "create.ponder.mechanical_mixer.text_4": "フィルタースロットは、2つのレシピが競合するときに使えます", "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_1": "メカニカルピストンは、手前にあるブロックを動かせます", + "create.ponder.mechanical_piston.text_2": "移動の速度と方向は、供給する回転力で決まります", + "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_2": "ブロックに戻らないように設定したり、動かし始めた場所でのみブロックに戻るように設定できます", + "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_2": "...当たり判定のないブロックが破壊します", "create.ponder.mechanical_plough.text_3": "さらに、プラウは土を耕やします", "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_4": "...プレス機が自動的にアイテムを保持し、加工します", + "create.ponder.mechanical_press.text_2": "加工するアイテムは下に落としたり、プレス機の下にあるデポに置いたりしてください", + "create.ponder.mechanical_press.text_3": "アイテムがベルトで供給されると...", + "create.ponder.mechanical_press.text_4": "...プレスが自動でアイテムを止め、加工します", "create.ponder.mechanical_press_compacting.header": "メカニカルプレスでの圧縮加工", "create.ponder.mechanical_press_compacting.text_1": "鉢に入れられたアイテムをプレスし、圧縮加工できます", "create.ponder.mechanical_press_compacting.text_2": "圧縮加工には、2x2、3x3のクラフトレシピに加え、いくつかの追加レシピがあります", "create.ponder.mechanical_press_compacting.text_3": "これらのレシピの中には、ブレイズバーナーの熱を必要とするものがあります", - "create.ponder.mechanical_press_compacting.text_4": "フィルタースロットは、2つのレシピが競合する場合に使えます", + "create.ponder.mechanical_press_compacting.text_4": "フィルタースロットは、2つのレシピが競合するときに使えます", + + "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_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_4": "液体ネットワーク内のポンプはそれぞれ別の速度で動かすことができます", + "create.ponder.mechanical_pump_speed.text_5": "向きを交互にすることで、流れの方向を揃えることができます", "create.ponder.mechanical_saw_breaker.header": "メカニカルソーによる伐採", "create.ponder.mechanical_saw_breaker.text_1": "メカニカルソーは回転力を供給すると、目の前の木を伐採できます", @@ -1941,7 +2031,7 @@ "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.mechanical_saw_processing.text_5": "フィルターがない場合、ソーは全ての加工を順番に繰り返します", "create.ponder.millstone.header": "石臼でのアイテム加工", "create.ponder.millstone.text_1": "石臼はアイテムを粉砕加工する機械です", @@ -1958,12 +2048,22 @@ "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": "移動しているからくりの液体タンクは、どんなパイプでも出し入れできません", + "create.ponder.portable_fluid_interface.text_2": "この機械は、からくりをブロックに戻すことなく液体を出し入れできます", + "create.ponder.portable_fluid_interface.text_3": "1~2ブロックの隙間を開けて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_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_3": "1~2ブロックの間隔をあけて、二つ目のインターフェースを設置しましょう", + "create.ponder.portable_storage_interface.text_3": "1~2ブロックの間隔をあけて、2つ目のインターフェースを設置しましょう", "create.ponder.portable_storage_interface.text_4": "両者がすれ違うたびに接続されます", - "create.ponder.portable_storage_interface.text_5": "接続されている間、設置されている方のインターフェースはからくり内全ての収納ブロックのように振る舞います", + "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_8": "しばらくの間アイテムのやり取りがないと、からくりは稼働を再開します", @@ -1975,19 +2075,19 @@ "create.ponder.powered_latch.text_1": "パワードラッチはレッドストーン信号で制御できるレバーです", "create.ponder.powered_latch.text_2": "後ろからの信号でオンに", "create.ponder.powered_latch.text_3": "側面からの信号でオフに戻ります", - "create.ponder.powered_latch.text_4": "パワードラッチは、手動でも切り替えられます", + "create.ponder.powered_latch.text_4": "パワードラッチは、手動でもオンオフできます", "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_4": "パワードトグルラッチは、手動で切り替えることもできます", + "create.ponder.powered_toggle_latch.text_4": "パワードトグルラッチは、手動でもオンオフもできます", "create.ponder.pulse_repeater.header": "パルスリピーターによる信号制御", "create.ponder.pulse_repeater.text_1": "パルスリピーターは、レッドストーン信号を短縮して1tickのパルス信号にします", "create.ponder.radial_chassis.header": "ラジアルシャーシによるブロックの取り付け", - "create.ponder.radial_chassis.text_1": "ラジアルシャーシは、同種のシャーシブロックと繋がります", + "create.ponder.radial_chassis.text_1": "ラジアルシャーシは、同じ種類のシャーシと繋がります", "create.ponder.radial_chassis.text_2": "からくり機械によって1つが動かされると、他も一緒に動きます", "create.ponder.radial_chassis.text_3": "ラジアルシャーシの側面を粘着面にできます", "create.ponder.radial_chassis.text_4": "もう一度クリックすると、他の全ての面も粘着面になります", @@ -2011,7 +2111,7 @@ "create.ponder.rope_pulley.header": "ローププーリーによる構造物の移動", "create.ponder.rope_pulley.text_1": "ローププーリーは、回転力を供給するとブロックを垂直に動かせます", - "create.ponder.rope_pulley.text_2": "移動の方向と速度は、供給される回転力に依存します", + "create.ponder.rope_pulley.text_2": "移動の方向と速度は、供給される回転力で決まります", "create.ponder.rope_pulley_attachment.header": "プーリーをからくりの一部として動かす", "create.ponder.rope_pulley_attachment.text_1": "プーリーがからくりによって動かされると...", @@ -2020,11 +2120,11 @@ "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_2": "ブロックに戻らないように設定したり、動かし始めた場所でのみブロックに戻るように設定したりできます", "create.ponder.rotation_speed_controller.header": "回転速度コントローラーの使い方", "create.ponder.rotation_speed_controller.text_1": "コントローラーは、側面の軸から上の大きな歯車に回転を伝達します", - "create.ponder.rotation_speed_controller.text_2": "側面のパネルを見てスクロールすると、伝達する回転速度を調整できます", + "create.ponder.rotation_speed_controller.text_2": "側面のパネルを見ながらスクロールすると、伝達する回転速度を調整できます", "create.ponder.sail.header": "帆による風車の組み立て", "create.ponder.sail.text_1": "帆は、風車を作るのに便利なブロックです", @@ -2038,7 +2138,7 @@ "create.ponder.sequenced_gearshift.header": "シーケンスギアシフトによる回転の制御", "create.ponder.sequenced_gearshift.text_1": "シーケンスギアシフトは、設定されたプログラムに従って回転を伝達します", - "create.ponder.sequenced_gearshift.text_2": "右クリックで設定インターフェースを開けます", + "create.ponder.sequenced_gearshift.text_2": "右クリックで設定画面を開けます", "create.ponder.sequenced_gearshift.text_3": "レッドストーン信号を受けると、設定されたプログラムを実行します", "create.ponder.sequenced_gearshift.text_4": "終了すると止まり、また次のレッドストーン信号を受けると同じように実行します", "create.ponder.sequenced_gearshift.text_5": "レッドストーンコンパレータで、現在の進捗を読み取れます", @@ -2055,22 +2155,36 @@ "create.ponder.smart_chute.text_3": "マウスホイールで搬出するスタック量を指定できます", "create.ponder.smart_chute.text_4": "レッドストーン信号で、スマートシュートを停止させることもできます", + "create.ponder.smart_pipe.header": "スマートパイプによる液体制御", + "create.ponder.smart_pipe.text_1": "スマートパイプは液体の種類によって流れを制御できます", + "create.ponder.smart_pipe.text_2": "搬入元に直接つなげることで、搬出する液体の種類を指定できます", + "create.ponder.smart_pipe.text_3": "フィルタースロットを右クリックして、液体の入ったアイテムを装着して指定することもできます", + "create.ponder.smart_pipe.text_4": "スマートパイプは、パイプネットワークの搬出先に設置すると指定された液体のみを流します", + "create.ponder.speedometer.header": "速度メーターによる動力情報の監視", "create.ponder.speedometer.text_1": "速度メーターは、接続された機械の現在の回転速度を表示します", "create.ponder.speedometer.text_2": "エンジニアのゴーグルを装着していると、より詳細な情報を得られます", "create.ponder.speedometer.text_3": "コンパレータは、速度メーターの測定値に応じたレッドストーン信号を出力します", + "create.ponder.spout_filling.header": "アイテム注液口によるアイテム充填", + "create.ponder.spout_filling.text_1": "注液口は、その下に用意されたアイテムを液体で満たすことができます", + "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_6": "...注液口が自動でアイテムを止め、加工します", + "create.ponder.stabilized_bearings.header": "からくりの角度の固定", - "create.ponder.stabilized_bearings.text_1": "メカニカルベアリングが動いている構造物に組み込まれているとき ...", + "create.ponder.stabilized_bearings.text_1": "メカニカルベアリングが動いている構造物に組み込まれているとき...", "create.ponder.stabilized_bearings.text_2": "...自身の角度を真っ直ぐに保とうとします", "create.ponder.stabilized_bearings.text_3": "ベアリングにブロックを取り付けると", "create.ponder.stabilized_bearings.text_4": "ベアリングに取り付けたサブのからくり全体が角度を真っ直ぐに保ったままになります", "create.ponder.sticker.header": "スティッカーを使ったブロックの付け外し", "create.ponder.sticker.text_1": "スティッカーは、ブロックの付け外しをレッドストーン信号で制御できます", - "create.ponder.sticker.text_2": "信号を受けると、状態が切り替わります", - "create.ponder.sticker.text_3": "付けているときは、からくりで動かされるとブロックも一緒に動きます", - "create.ponder.sticker.text_4": "もう一度信号を受けると、ブロックは離れます", + "create.ponder.sticker.text_2": "レッドストーン信号を受けると、状態が切り替わります", + "create.ponder.sticker.text_3": "付いているときは、からくりが動かされるとブロックも一緒に動きます", + "create.ponder.sticker.text_4": "もう一度信号を受けると、ブロックは外れます", "create.ponder.stressometer.header": "応力メーターによる動力情報の監視", "create.ponder.stressometer.text_1": "応力メーターは、接続された動力ネットワークの現在の応力許容量を表示します", @@ -2091,6 +2205,12 @@ "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.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_2": "水流を受ける面が多ければ多いほど、水車の回転速度は速くなります", @@ -2130,5 +2250,8 @@ "create.ponder.windmill_source.text_6": "いつでもベアリングを右クリックすれば、回転を停止させて構造物を組み立てなおせます", "create.ponder.windmill_structure.header": "からくり風車", - "create.ponder.windmill_structure.text_1": "帆とみなされるブロックが8個以上あれば、どのような構造物でも風車として動きます" -} \ No newline at end of file + "create.ponder.windmill_structure.text_1": "帆とみなされるブロックが8個以上あれば、どのような構造物でも風車として動きます", + + "_": "Thank you for translating Create!" + +} From 83d9b5d5188387e7d211fa676fe2632809491ea1 Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Tue, 6 Jul 2021 12:43:50 +0200 Subject: [PATCH 022/118] Post-PR datagen --- src/generated/resources/.cache/cache | 4 +- .../assets/create/lang/unfinished/ja_jp.json | 758 ++--- .../assets/create/lang/unfinished/ko_kr.json | 2904 ++++++++--------- 3 files changed, 1833 insertions(+), 1833 deletions(-) diff --git a/src/generated/resources/.cache/cache b/src/generated/resources/.cache/cache index aca2f76ab..b18583b2e 100644 --- a/src/generated/resources/.cache/cache +++ b/src/generated/resources/.cache/cache @@ -417,8 +417,8 @@ b954db488cad0cbf25e8c1916e326caf28187b62 assets/create/lang/unfinished/es_es.jso b3d34fddc0be87a9a485d215efc989b45dca8f52 assets/create/lang/unfinished/es_mx.json 882c93b17de0ebfb2c09ed1abf183d0aa1956f42 assets/create/lang/unfinished/fr_fr.json e1c09d72895f253b4eb1a32a5b3bddadff6fae69 assets/create/lang/unfinished/it_it.json -52e81f7f0591d5feedfde8ce5431d0fd4ab18dfc assets/create/lang/unfinished/ja_jp.json -0982c6bb817926faa1803b5d733f1b89d216b47a assets/create/lang/unfinished/ko_kr.json +9485ce91ec5be740d0f73acb6b489af9e92d3192 assets/create/lang/unfinished/ja_jp.json +b406848e8735a9ba2ba966ba66bc55a6679a8267 assets/create/lang/unfinished/ko_kr.json 4d2683c83ccd02e5f9ccb924e5895b5b12704c84 assets/create/lang/unfinished/nl_nl.json 67dd006a5965872a731944de028ac4bd24e594b6 assets/create/lang/unfinished/pl_pl.json e89d828bf5d66b9c08e83c3870dc9fc8bcd35ca3 assets/create/lang/unfinished/pt_br.json diff --git a/src/generated/resources/assets/create/lang/unfinished/ja_jp.json b/src/generated/resources/assets/create/lang/unfinished/ja_jp.json index a254e55ad..6311fa476 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ja_jp.json +++ b/src/generated/resources/assets/create/lang/unfinished/ja_jp.json @@ -1,10 +1,10 @@ { - "_": "Missing Localizations: 238", + "_": "Missing Localizations: 19", "_": "->------------------------] Game Elements [------------------------<-", "block.create.acacia_window": "アカシアの窓", - "block.create.acacia_window_pane": "アカシアの窓パネル", + "block.create.acacia_window_pane": "アカシアの窓板", "block.create.adjustable_chain_gearshift": "可変チェーンギアシフト", "block.create.adjustable_crate": "可変クレート", "block.create.adjustable_pulse_repeater": "可変パルスリピーター", @@ -14,12 +14,12 @@ "block.create.andesite_bricks": "安山岩レンガ", "block.create.andesite_bricks_slab": "安山岩レンガのハーフブロック", "block.create.andesite_bricks_stairs": "安山岩レンガの階段", - "block.create.andesite_bricks_wall": "安山岩レンガの壁", + "block.create.andesite_bricks_wall": "安山岩レンガの塀", "block.create.andesite_casing": "安山岩ケーシング", "block.create.andesite_cobblestone": "安山岩の丸石", "block.create.andesite_cobblestone_slab": "安山岩の丸石のハーフブロック", "block.create.andesite_cobblestone_stairs": "安山岩の丸石の階段", - "block.create.andesite_cobblestone_wall": "安山岩の丸石の壁", + "block.create.andesite_cobblestone_wall": "安山岩の丸石の塀", "block.create.andesite_encased_shaft": "安山岩のケース入りシャフト", "block.create.andesite_funnel": "安山岩ファンネル", "block.create.andesite_pillar": "安山岩の柱", @@ -27,7 +27,7 @@ "block.create.basin": "鉢", "block.create.belt": "メカニカルベルト", "block.create.birch_window": "シラカバの窓", - "block.create.birch_window_pane": "シラカバの窓パネル", + "block.create.birch_window_pane": "シラカバの窓板", "block.create.black_sail": "黒色の帆", "block.create.black_seat": "黒色のシート", "block.create.black_valve_handle": "黒色のバルブハンドル", @@ -58,7 +58,7 @@ "block.create.cogwheel": "歯車", "block.create.content_observer": "コンテンツオブザーバー", "block.create.controller_rail": "コントローラーレール", - "block.create.copper_backtank": "UNLOCALIZED: Copper Backtank", + "block.create.copper_backtank": "銅のバックタンク", "block.create.copper_block": "銅ブロック", "block.create.copper_casing": "銅ケーシング", "block.create.copper_ore": "銅鉱石", @@ -69,7 +69,7 @@ "block.create.creative_fluid_tank": "クリエイティブ液体タンク", "block.create.creative_motor": "クリエイティブモーター", "block.create.crimson_window": "真紅の窓", - "block.create.crimson_window_pane": "真紅の窓パネル", + "block.create.crimson_window_pane": "真紅の窓板", "block.create.crushing_wheel": "破砕ホイール", "block.create.crushing_wheel_controller": "破砕ホイールコントローラー", "block.create.cuckoo_clock": "鳩時計", @@ -77,37 +77,37 @@ "block.create.cyan_seat": "水色のシート", "block.create.cyan_valve_handle": "水色のバルブハンドル", "block.create.dark_oak_window": "ダークオークの窓", - "block.create.dark_oak_window_pane": "ダークオークの窓パネル", + "block.create.dark_oak_window_pane": "ダークオークの窓板", "block.create.dark_scoria": "ダークスコリア", "block.create.dark_scoria_bricks": "ダークスコリアレンガ", "block.create.dark_scoria_bricks_slab": "ダークスコリアレンガのハーフブロック", "block.create.dark_scoria_bricks_stairs": "ダークスコリアレンガの階段", - "block.create.dark_scoria_bricks_wall": "ダークスコリアレンガの壁", + "block.create.dark_scoria_bricks_wall": "ダークスコリアレンガの塀", "block.create.dark_scoria_cobblestone": "ダークスコリアの丸石", "block.create.dark_scoria_cobblestone_slab": "ダークスコリアの丸石のハーフブロック", "block.create.dark_scoria_cobblestone_stairs": "ダークスコリアの丸石の階段", - "block.create.dark_scoria_cobblestone_wall": "ダークスコリアの丸石の壁", + "block.create.dark_scoria_cobblestone_wall": "ダークスコリアの丸石の塀", "block.create.dark_scoria_pillar": "ダークスコリアの柱", "block.create.deployer": "デプロイヤー", "block.create.depot": "デポ", "block.create.diorite_bricks": "閃緑岩レンガ", "block.create.diorite_bricks_slab": "閃緑岩レンガのハーフブロック", "block.create.diorite_bricks_stairs": "閃緑岩レンガの階段", - "block.create.diorite_bricks_wall": "閃緑岩レンガの壁", + "block.create.diorite_bricks_wall": "閃緑岩レンガの塀", "block.create.diorite_cobblestone": "閃緑岩の丸石", "block.create.diorite_cobblestone_slab": "閃緑岩の丸石のハーフブロック", "block.create.diorite_cobblestone_stairs": "閃緑岩の丸石の階段", - "block.create.diorite_cobblestone_wall": "閃緑岩の丸石の壁", + "block.create.diorite_cobblestone_wall": "閃緑岩の丸石の塀", "block.create.diorite_pillar": "閃緑岩の柱", "block.create.dolomite": "苦灰岩", "block.create.dolomite_bricks": "苦灰岩レンガ", "block.create.dolomite_bricks_slab": "苦灰岩レンガのハーフブロック", "block.create.dolomite_bricks_stairs": "苦灰岩レンガの階段", - "block.create.dolomite_bricks_wall": "苦灰岩レンガの壁", + "block.create.dolomite_bricks_wall": "苦灰岩レンガの塀", "block.create.dolomite_cobblestone": "苦灰岩の丸石", "block.create.dolomite_cobblestone_slab": "苦灰岩の丸石のハーフブロック", "block.create.dolomite_cobblestone_stairs": "苦灰岩の丸石の階段", - "block.create.dolomite_cobblestone_wall": "苦灰岩の丸石の壁", + "block.create.dolomite_cobblestone_wall": "苦灰岩の丸石の塀", "block.create.dolomite_pillar": "苦灰岩の柱", "block.create.encased_chain_drive": "ケース入りチェーンドライブ", "block.create.encased_fan": "ケース入りファン", @@ -115,39 +115,39 @@ "block.create.fancy_andesite_bricks": "装飾された安山岩レンガ", "block.create.fancy_andesite_bricks_slab": "装飾された安山岩レンガのハーフブロック", "block.create.fancy_andesite_bricks_stairs": "装飾された安山岩レンガの階段", - "block.create.fancy_andesite_bricks_wall": "装飾された安山岩レンガの壁", + "block.create.fancy_andesite_bricks_wall": "装飾された安山岩レンガの塀", "block.create.fancy_dark_scoria_bricks": "装飾されたダークスコリアレンガ", "block.create.fancy_dark_scoria_bricks_slab": "装飾されたダークスコリアレンガのハーフブロック", "block.create.fancy_dark_scoria_bricks_stairs": "装飾されたダークスコリアレンガの階段", - "block.create.fancy_dark_scoria_bricks_wall": "装飾されたダークスコリアレンガの壁", + "block.create.fancy_dark_scoria_bricks_wall": "装飾されたダークスコリアレンガの塀", "block.create.fancy_diorite_bricks": "装飾された閃緑岩レンガ", "block.create.fancy_diorite_bricks_slab": "装飾された閃緑岩レンガのハーフブロック", "block.create.fancy_diorite_bricks_stairs": "装飾された閃緑岩レンガの階段", - "block.create.fancy_diorite_bricks_wall": "装飾された閃緑岩レンガの壁", + "block.create.fancy_diorite_bricks_wall": "装飾された閃緑岩レンガの塀", "block.create.fancy_dolomite_bricks": "装飾された苦灰岩レンガ", "block.create.fancy_dolomite_bricks_slab": "装飾された苦灰岩レンガのハーフブロック", "block.create.fancy_dolomite_bricks_stairs": "装飾された苦灰岩レンガの階段", - "block.create.fancy_dolomite_bricks_wall": "装飾された苦灰岩レンガの壁", + "block.create.fancy_dolomite_bricks_wall": "装飾された苦灰岩レンガの塀", "block.create.fancy_gabbro_bricks": "装飾された斑れい岩レンガ", "block.create.fancy_gabbro_bricks_slab": "装飾された斑れい岩レンガのハーフブロック", "block.create.fancy_gabbro_bricks_stairs": "装飾された斑れい岩レンガの階段", - "block.create.fancy_gabbro_bricks_wall": "装飾された斑れい岩レンガの壁", + "block.create.fancy_gabbro_bricks_wall": "装飾された斑れい岩レンガの塀", "block.create.fancy_granite_bricks": "装飾された花崗岩レンガ", "block.create.fancy_granite_bricks_slab": "装飾された花崗岩レンガのハーフブロック", "block.create.fancy_granite_bricks_stairs": "装飾された花崗岩レンガの階段", - "block.create.fancy_granite_bricks_wall": "装飾された花崗岩レンガの壁", + "block.create.fancy_granite_bricks_wall": "装飾された花崗岩レンガの塀", "block.create.fancy_limestone_bricks": "装飾された石灰岩レンガ", "block.create.fancy_limestone_bricks_slab": "装飾された石灰岩レンガのハーフブロック", "block.create.fancy_limestone_bricks_stairs": "装飾された石灰岩レンガの階段", - "block.create.fancy_limestone_bricks_wall": "装飾された石灰岩レンガの壁", + "block.create.fancy_limestone_bricks_wall": "装飾された石灰岩レンガの塀", "block.create.fancy_scoria_bricks": "装飾されたスコリアレンガ", "block.create.fancy_scoria_bricks_slab": "装飾されたスコリアレンガのハーフブロック", "block.create.fancy_scoria_bricks_stairs": "装飾されたスコリアレンガの階段", - "block.create.fancy_scoria_bricks_wall": "装飾されたスコリアレンガの壁", + "block.create.fancy_scoria_bricks_wall": "装飾されたスコリアレンガの塀", "block.create.fancy_weathered_limestone_bricks": "装飾された風化した石灰岩レンガ", "block.create.fancy_weathered_limestone_bricks_slab": "装飾された風化した石灰岩レンガのハーフブロック", "block.create.fancy_weathered_limestone_bricks_stairs": "装飾された風化した石灰岩レンガの階段", - "block.create.fancy_weathered_limestone_bricks_wall": "装飾された風化した石灰岩レンガの壁", + "block.create.fancy_weathered_limestone_bricks_wall": "装飾された風化した石灰岩レンガの塀", "block.create.fluid_pipe": "液体パイプ", "block.create.fluid_tank": "液体タンク", "block.create.fluid_valve": "液体バルブ", @@ -159,11 +159,11 @@ "block.create.gabbro_bricks": "斑れい岩レンガ", "block.create.gabbro_bricks_slab": "斑れい岩レンガのハーフブロック", "block.create.gabbro_bricks_stairs": "斑れい岩レンガの階段", - "block.create.gabbro_bricks_wall": "斑れい岩レンガの壁", + "block.create.gabbro_bricks_wall": "斑れい岩レンガの塀", "block.create.gabbro_cobblestone": "斑れい岩の丸石", "block.create.gabbro_cobblestone_slab": "斑れい岩の丸石のハーフブロック", "block.create.gabbro_cobblestone_stairs": "斑れい岩の丸石の階段", - "block.create.gabbro_cobblestone_wall": "斑れい岩の丸石の壁", + "block.create.gabbro_cobblestone_wall": "斑れい岩の丸石の塀", "block.create.gabbro_pillar": "斑れい岩の柱", "block.create.gantry_carriage": "ガントリーキャリッジ", "block.create.gantry_shaft": "ガントリーシャフト", @@ -173,11 +173,11 @@ "block.create.granite_bricks": "花崗岩レンガ", "block.create.granite_bricks_slab": "花崗岩レンガのハーフブロック", "block.create.granite_bricks_stairs": "花崗岩レンガの階段", - "block.create.granite_bricks_wall": "花崗岩レンガの壁", + "block.create.granite_bricks_wall": "花崗岩レンガの塀", "block.create.granite_cobblestone": "花崗岩の丸石", "block.create.granite_cobblestone_slab": "花崗岩の丸石のハーフブロック", "block.create.granite_cobblestone_stairs": "花崗岩の丸石の階段", - "block.create.granite_cobblestone_wall": "花崗岩の丸石の壁", + "block.create.granite_cobblestone_wall": "花崗岩の丸石の塀", "block.create.granite_pillar": "花崗岩の柱", "block.create.gray_sail": "灰色の帆", "block.create.gray_seat": "灰色のシート", @@ -193,7 +193,7 @@ "block.create.hose_pulley": "ホースプーリー", "block.create.item_drain": "アイテム排液口", "block.create.jungle_window": "ジャングルの窓", - "block.create.jungle_window_pane": "ジャングルの窓パネル", + "block.create.jungle_window_pane": "ジャングルの窓板", "block.create.large_cogwheel": "大きな歯車", "block.create.layered_andesite": "安山岩の組石", "block.create.layered_dark_scoria": "ダークスコリアの組石", @@ -204,7 +204,7 @@ "block.create.layered_limestone": "石灰岩の組石", "block.create.layered_scoria": "スコリアの組石", "block.create.layered_weathered_limestone": "風化した石灰岩の組石", - "block.create.lectern_controller": "UNLOCALIZED: Lectern Controller", + "block.create.lectern_controller": "書見台コントローラー", "block.create.light_blue_sail": "空色の帆", "block.create.light_blue_seat": "空色のシート", "block.create.light_blue_valve_handle": "空色のバルブハンドル", @@ -219,11 +219,11 @@ "block.create.limestone_bricks": "石灰岩レンガ", "block.create.limestone_bricks_slab": "石灰岩レンガのハーフブロック", "block.create.limestone_bricks_stairs": "石灰岩レンガの階段", - "block.create.limestone_bricks_wall": "石灰岩レンガの壁", + "block.create.limestone_bricks_wall": "石灰岩レンガの塀", "block.create.limestone_cobblestone": "石灰岩の丸石", "block.create.limestone_cobblestone_slab": "石灰岩の丸石のハーフブロック", "block.create.limestone_cobblestone_stairs": "石灰岩の丸石の階段", - "block.create.limestone_cobblestone_wall": "石灰岩の丸石の壁", + "block.create.limestone_cobblestone_wall": "石灰岩の丸石の塀", "block.create.limestone_pillar": "石灰岩の柱", "block.create.linear_chassis": "リニアシャーシ", "block.create.lit_blaze_burner": "燃焼中のブレイズバーナー", @@ -259,12 +259,12 @@ "block.create.nixie_tube": "ニキシー管", "block.create.nozzle": "ノズル", "block.create.oak_window": "オークの窓", - "block.create.oak_window_pane": "オークの窓パネル", + "block.create.oak_window_pane": "オークの窓板", "block.create.orange_sail": "橙色の帆", "block.create.orange_seat": "橙色のシート", "block.create.orange_valve_handle": "橙色のバルブハンドル", "block.create.ornate_iron_window": "鉄の装飾ガラス", - "block.create.ornate_iron_window_pane": "鉄の装飾ガラスパネル", + "block.create.ornate_iron_window_pane": "鉄の装飾ガラス板", "block.create.overgrown_andesite": "生い茂った安山岩", "block.create.overgrown_dark_scoria": "生い茂ったダークスコリア", "block.create.overgrown_diorite": "生い茂った閃緑岩", @@ -277,40 +277,40 @@ "block.create.paved_andesite": "舗装された安山岩", "block.create.paved_andesite_slab": "舗装された安山岩のハーフブロック", "block.create.paved_andesite_stairs": "舗装された安山岩の階段", - "block.create.paved_andesite_wall": "舗装された安山岩の壁", + "block.create.paved_andesite_wall": "舗装された安山岩の塀", "block.create.paved_dark_scoria": "舗装されたダークスコリア", "block.create.paved_dark_scoria_slab": "舗装されたダークスコリアのハーフブロック", "block.create.paved_dark_scoria_stairs": "舗装されたダークスコリアの階段", - "block.create.paved_dark_scoria_wall": "舗装されたダークスコリアの壁", + "block.create.paved_dark_scoria_wall": "舗装されたダークスコリアの塀", "block.create.paved_diorite": "舗装された閃緑岩", "block.create.paved_diorite_slab": "舗装された閃緑岩のハーフブロック", "block.create.paved_diorite_stairs": "舗装された閃緑岩の階段", - "block.create.paved_diorite_wall": "舗装された閃緑岩の壁", + "block.create.paved_diorite_wall": "舗装された閃緑岩の塀", "block.create.paved_dolomite": "舗装された苦灰岩", "block.create.paved_dolomite_slab": "舗装された苦灰岩のハーフブロック", "block.create.paved_dolomite_stairs": "舗装された苦灰岩の階段", - "block.create.paved_dolomite_wall": "舗装された苦灰岩の壁", + "block.create.paved_dolomite_wall": "舗装された苦灰岩の塀", "block.create.paved_gabbro": "舗装された斑れい岩", "block.create.paved_gabbro_slab": "舗装された斑れい岩のハーフブロック", "block.create.paved_gabbro_stairs": "舗装された斑れい岩の階段", - "block.create.paved_gabbro_wall": "舗装された斑れい岩の壁", + "block.create.paved_gabbro_wall": "舗装された斑れい岩の塀", "block.create.paved_granite": "舗装された花崗岩", "block.create.paved_granite_slab": "舗装された花崗岩のハーフブロック", "block.create.paved_granite_stairs": "舗装された花崗岩の階段", - "block.create.paved_granite_wall": "舗装された花崗岩の壁", + "block.create.paved_granite_wall": "舗装された花崗岩の塀", "block.create.paved_limestone": "舗装された石灰岩", "block.create.paved_limestone_slab": "舗装された石灰岩のハーフブロック", "block.create.paved_limestone_stairs": "舗装された石灰岩の階段", - "block.create.paved_limestone_wall": "舗装された石灰岩の壁", + "block.create.paved_limestone_wall": "舗装された石灰岩の塀", "block.create.paved_scoria": "舗装されたスコリア", "block.create.paved_scoria_slab": "舗装されたスコリアのハーフブロック", "block.create.paved_scoria_stairs": "舗装されたスコリアの階段", - "block.create.paved_scoria_wall": "舗装されたスコリアの壁", + "block.create.paved_scoria_wall": "舗装されたスコリアの塀", "block.create.paved_weathered_limestone": "舗装された風化した石灰岩", "block.create.paved_weathered_limestone_slab": "舗装された風化した石灰岩のハーフブロック", "block.create.paved_weathered_limestone_stairs": "舗装された風化した石灰岩の階段", - "block.create.paved_weathered_limestone_wall": "舗装された風化した石灰岩の壁", - "block.create.peculiar_bell": "UNLOCALIZED: Peculiar Bell", + "block.create.paved_weathered_limestone_wall": "舗装された風化した石灰岩の塀", + "block.create.peculiar_bell": "風変わりな鐘", "block.create.pink_sail": "桃色の帆", "block.create.pink_seat": "桃色のシート", "block.create.pink_valve_handle": "桃色のバルブハンドル", @@ -318,27 +318,27 @@ "block.create.polished_dark_scoria": "磨かれたダークスコリア", "block.create.polished_dark_scoria_slab": "磨かれたダークスコリアのハーフブロック", "block.create.polished_dark_scoria_stairs": "磨かれたダークスコリアの階段", - "block.create.polished_dark_scoria_wall": "磨かれたダークスコリアの壁", + "block.create.polished_dark_scoria_wall": "磨かれたダークスコリアの塀", "block.create.polished_dolomite": "磨かれた苦灰岩", "block.create.polished_dolomite_slab": "磨かれた苦灰岩のハーフブロック", "block.create.polished_dolomite_stairs": "磨かれた苦灰岩の階段", - "block.create.polished_dolomite_wall": "磨かれた苦灰岩の壁", + "block.create.polished_dolomite_wall": "磨かれた苦灰岩の塀", "block.create.polished_gabbro": "磨かれた斑れい岩", "block.create.polished_gabbro_slab": "磨かれた斑れい岩のハーフブロック", "block.create.polished_gabbro_stairs": "磨かれた斑れい岩の階段", - "block.create.polished_gabbro_wall": "磨かれた斑れい岩の壁", + "block.create.polished_gabbro_wall": "磨かれた斑れい岩の塀", "block.create.polished_limestone": "磨かれた石灰岩", "block.create.polished_limestone_slab": "磨かれた石灰岩のハーフブロック", "block.create.polished_limestone_stairs": "磨かれた石灰岩の階段", - "block.create.polished_limestone_wall": "磨かれた石灰岩の壁", + "block.create.polished_limestone_wall": "磨かれた石灰岩の塀", "block.create.polished_scoria": "磨かれたスコリア", "block.create.polished_scoria_slab": "磨かれたスコリアのハーフブロック", "block.create.polished_scoria_stairs": "磨かれたスコリアの階段", - "block.create.polished_scoria_wall": "磨かれたスコリアの壁", + "block.create.polished_scoria_wall": "磨かれたスコリアの塀", "block.create.polished_weathered_limestone": "磨かれた風化石灰岩", "block.create.polished_weathered_limestone_slab": "磨かれた風化石灰岩のハーフブロック", "block.create.polished_weathered_limestone_stairs": "磨かれた風化した石灰岩の階段", - "block.create.polished_weathered_limestone_wall": "磨かれた風化した石灰岩の壁", + "block.create.polished_weathered_limestone_wall": "磨かれた風化した石灰岩の塀", "block.create.portable_fluid_interface": "ポータブル液体インターフェース", "block.create.portable_storage_interface": "ポータブルストレージインターフェース", "block.create.powered_latch": "パワードラッチ", @@ -359,18 +359,18 @@ "block.create.rope": "ロープ", "block.create.rope_pulley": "ローププーリー", "block.create.rotation_speed_controller": "回転速度コントローラー", - "block.create.sail_frame": "帆のフレーム", + "block.create.sail_frame": "帆フレーム", "block.create.schematic_table": "概略図テーブル", "block.create.schematicannon": "概略図砲", "block.create.scoria": "スコリア", "block.create.scoria_bricks": "スコリアレンガ", "block.create.scoria_bricks_slab": "スコリアレンガのハーフブロック", "block.create.scoria_bricks_stairs": "スコリアレンガの階段", - "block.create.scoria_bricks_wall": "スコリアレンガの壁", + "block.create.scoria_bricks_wall": "スコリアレンガの塀", "block.create.scoria_cobblestone": "スコリアの丸石", "block.create.scoria_cobblestone_slab": "スコリアの丸石のハーフブロック", "block.create.scoria_cobblestone_stairs": "スコリアの丸石の階段", - "block.create.scoria_cobblestone_wall": "スコリアの丸石の壁", + "block.create.scoria_cobblestone_wall": "スコリアの丸石の塀", "block.create.scoria_pillar": "スコリアの柱", "block.create.secondary_linear_chassis": "セカンダリリニアシャーシ", "block.create.sequenced_gearshift": "シーケンスギアシフト", @@ -381,9 +381,9 @@ "block.create.speedometer": "速度メーター", "block.create.spout": "アイテム注液口", "block.create.spruce_window": "マツの窓", - "block.create.spruce_window_pane": "マツの窓パネル", + "block.create.spruce_window_pane": "マツの窓板", "block.create.sticker": "スティッカー", - "block.create.sticky_mechanical_piston": "粘着メカニカルピストン", + "block.create.sticky_mechanical_piston": "メカニカル粘着ピストン", "block.create.stockpile_switch": "在庫スイッチ", "block.create.stressometer": "応力メーター", "block.create.tiled_glass": "タイルガラス", @@ -392,17 +392,17 @@ "block.create.vertical_framed_glass": "縦型ガラス窓", "block.create.vertical_framed_glass_pane": "縦型ガラス窓板", "block.create.warped_window": "歪んだ窓", - "block.create.warped_window_pane": "歪んだ窓パネル", + "block.create.warped_window_pane": "歪んだ窓板", "block.create.water_wheel": "水車", "block.create.weathered_limestone": "風化した石灰岩", "block.create.weathered_limestone_bricks": "風化した石灰岩レンガ", "block.create.weathered_limestone_bricks_slab": "風化した石灰岩レンガのハーフブロック", "block.create.weathered_limestone_bricks_stairs": "風化した石灰岩レンガの階段", - "block.create.weathered_limestone_bricks_wall": "風化した石灰岩レンガの壁", + "block.create.weathered_limestone_bricks_wall": "風化した石灰岩レンガの塀", "block.create.weathered_limestone_cobblestone": "風化した石灰岩の丸石", "block.create.weathered_limestone_cobblestone_slab": "風化した石灰岩の丸石のハーフブロック", "block.create.weathered_limestone_cobblestone_stairs": "風化した石灰岩の丸石の階段", - "block.create.weathered_limestone_cobblestone_wall": "風化した石灰岩の丸石の壁", + "block.create.weathered_limestone_cobblestone_wall": "風化した石灰岩の丸石の塀", "block.create.weathered_limestone_pillar": "風化した石灰岩の柱", "block.create.weighted_ejector": "重量射出機", "block.create.white_sail": "白色の帆", @@ -417,9 +417,9 @@ "block.create.zinc_ore": "亜鉛鉱石", "entity.create.contraption": "からくり", - "entity.create.crafting_blueprint": "UNLOCALIZED: Crafting Blueprint", + "entity.create.crafting_blueprint": "クラフトブループリント", "entity.create.gantry_contraption": "ガントリーからくり", - "entity.create.potato_projectile": "UNLOCALIZED: Potato Projectile", + "entity.create.potato_projectile": "ポテト弾", "entity.create.seat": "シート", "entity.create.stationary_contraption": "付設からくり", "entity.create.super_glue": "超粘着剤", @@ -444,12 +444,12 @@ "item.create.chocolate_glazed_berries": "チョコレートグレーズドベリー", "item.create.chromatic_compound": "色彩の化合物", "item.create.cinder_flour": "ネザーラックの粉", - "item.create.copper_backtank": "UNLOCALIZED: Copper Backtank", + "item.create.copper_backtank": "銅のバックタンク", "item.create.copper_ingot": "銅インゴット", "item.create.copper_nugget": "銅塊", "item.create.copper_sheet": "銅板", "item.create.crafter_slot_cover": "クラフタースロットカバー", - "item.create.crafting_blueprint": "UNLOCALIZED: Crafting Blueprint", + "item.create.crafting_blueprint": "クラフトブループリント", "item.create.crushed_aluminum_ore": "砕いたアルミニウム鉱石", "item.create.crushed_brass": "砕いた真鍮", "item.create.crushed_copper_ore": "砕いた銅鉱石", @@ -464,8 +464,8 @@ "item.create.crushed_tin_ore": "砕いた錫鉱石", "item.create.crushed_uranium_ore": "砕いたウラン鉱石", "item.create.crushed_zinc_ore": "砕いた亜鉛鉱石", - "item.create.diving_boots": "UNLOCALIZED: Diving Boots", - "item.create.diving_helmet": "UNLOCALIZED: Diving Helmet", + "item.create.diving_boots": "潜水ブーツ", + "item.create.diving_helmet": "潜水ヘルメット", "item.create.dough": "生地", "item.create.electron_tube": "電子管", "item.create.empty_blaze_burner": "空のブレイズバーナー", @@ -482,11 +482,11 @@ "item.create.incomplete_large_cogwheel": "UNLOCALIZED: Incomplete Large Cogwheel", "item.create.incomplete_precision_mechanism": "UNLOCALIZED: Incomplete Precision Mechanism", "item.create.iron_sheet": "鉄板", - "item.create.linked_controller": "UNLOCALIZED: Linked Controller", + "item.create.linked_controller": "リンクコントローラー", "item.create.minecart_contraption": "からくり付きトロッコ", "item.create.minecart_coupling": "トロッコ連結器", "item.create.polished_rose_quartz": "磨かれたローズクォーツ", - "item.create.potato_cannon": "UNLOCALIZED: Potato Cannon", + "item.create.potato_cannon": "ポテトキャノン", "item.create.powdered_obsidian": "黒曜石の粉", "item.create.precision_mechanism": "UNLOCALIZED: Precision Mechanism", "item.create.propeller": "プロペラ", @@ -512,7 +512,7 @@ "_": "->------------------------] Advancements [------------------------<-", "advancement.create.root": "Createへようこそ", - "advancement.create.root.desc": "素晴らしいからくり機構を作る時間だ!", + "advancement.create.root.desc": "素晴らしいからくり仕掛けを作る時間だ!", "advancement.create.andesite_alloy": "大いに押韻", "advancement.create.andesite_alloy.desc": "Createの素材には変な名前がついています、安山岩合金もその一つです", "advancement.create.its_alive": "こいつ…動くぞ!", @@ -521,51 +521,51 @@ "advancement.create.shifting_gears.desc": "大きい歯車と小さい歯車を噛み合わせて回転速度を変更する", "advancement.create.overstressed": "超過応力", "advancement.create.overstressed.desc": "応力の限界を肌で感じる", - "advancement.create.belt": "コンブ駆動", + "advancement.create.belt": "ベルトコンブア", "advancement.create.belt.desc": "2つのシャフトをメカニカルベルトで繋ぐ", - "advancement.create.tunnel": "隠せ!", - "advancement.create.tunnel.desc": "メカニカルベルトをトンネルで装飾する", + "advancement.create.tunnel": "隠れろ!", + "advancement.create.tunnel.desc": "メカニカルベルトをトンネルで飾る", "advancement.create.splitter_tunnel": "困難は分割せよ", "advancement.create.splitter_tunnel.desc": "真鍮トンネルで仕分け機を作る", "advancement.create.chute": "転がり落ちる", "advancement.create.chute.desc": "メカニカルベルトの垂直バージョン、シュートを設置する", - "advancement.create.upward_chute": "空への誘い", + "advancement.create.upward_chute": "机上の空論", "advancement.create.upward_chute.desc": "落ちているアイテムがファンで駆動するシュートに飛んでいく様子を見る", - "advancement.create.belt_funnel": "ファンネルのぶらさがってる、ひらひらしたやつ", - "advancement.create.belt_funnel.desc": "ベルトやデポ等の上に横向きのファンネルを置き、特殊形態にする", - "advancement.create.belt_funnel_kiss": "オウムと羽ばたき", + "advancement.create.belt_funnel": "ファンネルのひらひら", + "advancement.create.belt_funnel.desc": "ベルトやデポなどの上に横向きのファンネルを置き、特殊形態にする", + "advancement.create.belt_funnel_kiss": "コウノトリの羽ばたき", "advancement.create.belt_funnel_kiss.desc": "2つのベルトに載せたファンネルにキスをさせる", "advancement.create.fan": "メカニカルエアベンダー", "advancement.create.fan.desc": "ケース入りファンから出る風に乗る", - "advancement.create.fan_lava": "地熱暖房器具", + "advancement.create.fan_lava": "地熱ファンヒーター", "advancement.create.fan_lava.desc": "アイテムを精錬する熱風に巻き込まれる", - "advancement.create.fan_water": "奇妙な洗濯機", + "advancement.create.fan_water": "風変りな洗濯機", "advancement.create.fan_water.desc": "アイテムを洗浄する涼風に巻き込まれる", "advancement.create.fan_smoke": "メカニカルふいご", "advancement.create.fan_smoke.desc": "アイテムを燻製する暖風に巻き込まれる", - "advancement.create.wrench": "便利に設定", + "advancement.create.wrench": "便利な設定", "advancement.create.wrench.desc": "からくり作りに役立つレンチを作る", "advancement.create.goggles": "応力をこの目で", "advancement.create.goggles.desc": "機械からより多くの情報を手に入れるために、エンジニアのゴーグルを作る", "advancement.create.speedometer": "正確な速度は?", - "advancement.create.speedometer.desc": "動作中の速度メーターをゴーグルで見て、正確な値を読み取る", + "advancement.create.speedometer.desc": "動作中の回転速度メーターをゴーグルで見て、正確な値を読み取る", "advancement.create.stressometer": "正確な応力は?", "advancement.create.stressometer.desc": "動作中の応力メーターをゴーグルを通して見て、正確な値を読み取る", "advancement.create.aesthetics": "装飾ブーム!", "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.chocolate_wheel": "味わい深い原動機", "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.millstone": "ポケット粉砕機", + "advancement.create.millstone": "ポケットクラッシャー", "advancement.create.millstone.desc": "石臼を置いて、回転させる", - "advancement.create.windmill": "凱風快晴", + "advancement.create.windmill": "微風", "advancement.create.windmill.desc": "風車を組み立てる", "advancement.create.maxed_windmill": "雄風", "advancement.create.maxed_windmill.desc": "最強の風車を組み立てる", @@ -597,13 +597,13 @@ "advancement.create.copper_casing.desc": "銅と木材を使って銅ケーシングを作る", "advancement.create.spout": "ぱしゃぱしゃ", "advancement.create.spout.desc": "アイテム注液口が液体を充填している様子を見る", - "advancement.create.spout_potion": "大きな醸造台", + "advancement.create.spout_potion": "世界のお薬屋さん", "advancement.create.spout_potion.desc": "アイテム注液口がポーションを瓶に詰めているところを見る", "advancement.create.chocolate": "夢の世界", "advancement.create.chocolate.desc": "溶けたチョコレート入りバケツを手に入れる", "advancement.create.item_drain": "バケツをひっくり返したような", "advancement.create.item_drain.desc": "アイテム排液口が液体アイテムを空にしている様子を見る", - "advancement.create.chained_item_drain": "鉛筆転がし!", + "advancement.create.chained_item_drain": "アイテムころりん", "advancement.create.chained_item_drain.desc": "自動化したアイテム排液口の上を転がるアイテムを見る", "advancement.create.glass_pipe": "フロウ・スパイ", "advancement.create.glass_pipe.desc": "まっすぐな液体パイプにレンチを使って、窓から通る液体を見る", @@ -619,7 +619,7 @@ "advancement.create.infinite_lava.desc": "無限と言えるほどの大量の溶岩を吸引する", "advancement.create.infinite_chocolate": "空想に溺れて", "advancement.create.infinite_chocolate.desc": "無限と言えるほどの大量の溶けたチョコレートを吸引する", - "advancement.create.crafter": "自動作業台", + "advancement.create.crafter": "部品集結!", "advancement.create.crafter.desc": "メカニカルクラフターを設置して、回転力を供給する", "advancement.create.clockwork_bearing": "時計仕掛け", "advancement.create.clockwork_bearing.desc": "時計仕掛けのベアリングの上に構造物を組み立てる", @@ -636,7 +636,7 @@ "advancement.create.precision_mechanism": "UNLOCALIZED: Complex Curiosities", "advancement.create.precision_mechanism.desc": "UNLOCALIZED: Assemble a Precision Mechanism.", "advancement.create.mechanical_arm": "手が離せない!", - "advancement.create.mechanical_arm.desc": "搬入元と搬出先を設定したメカニカルアームを設置して、稼働させ、あなたのために一生懸命労働している様子を見る", + "advancement.create.mechanical_arm.desc": "搬入元と搬出先を設定したメカニカルアームを設置して稼働させ、あなたのために一生懸命働いている様子を見る", "advancement.create.musical_arm": "お気に入りの曲を流して!", "advancement.create.musical_arm.desc": "メカニカルアームがジュークボックスを使う様子を見る", "advancement.create.arm_many_targets": "整理整頓", @@ -679,20 +679,20 @@ "death.attack.create.fan_lava": "%1$s は溶岩ファンによって焼死した", "death.attack.create.mechanical_drill": "%1$s はメカニカルドリルに突き刺さった", "death.attack.create.mechanical_saw": "%1$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.potato_cannon": "%1$sは%2$sのポテトキャノンに撃ち抜かれた", + "death.attack.create.potato_cannon.item": "%1$sは%3$sで%2$sに撃た抜かれた", "death.attack.create.cuckoo_clock_explosion": "%1$s は改ざんされた鳩時計に爆破された", "create.block.deployer.damage_source_name": "悪いデプロイヤー", "create.block.cart_assembler.invalid": "トロッコアセンブラはレールの上にのみ設置できます", - "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": "メニューに戻る", + "create.menu.configure": "設定...", + "create.menu.ponder_index": "思案索引", + "create.menu.only_ingame": "一時停止メニューで利用可能", + "create.menu.project_page": "プロジェクトページ", + "create.menu.report_bugs": "バグ報告", + "create.menu.support": "私たちを応援する", "create.recipe.crushing": "粉砕", "create.recipe.milling": "製粉", @@ -704,7 +704,7 @@ "create.recipe.fan_blasting.fan": "溶岩の奥のケース入りファン", "create.recipe.pressing": "プレス", "create.recipe.mixing": "混合", - "create.recipe.deploying": "UNLOCALIZED: Deploying", + "create.recipe.deploying": "使用", "create.recipe.automatic_shapeless": "自動不定形クラフト", "create.recipe.automatic_brewing": "自動醸造", "create.recipe.packing": "圧縮", @@ -718,16 +718,16 @@ "create.recipe.mystery_conversion": "神秘の変転", "create.recipe.spout_filling": "アイテム注液口による注入", "create.recipe.draining": "アイテムから排液", - "create.recipe.sequenced_assembly": "UNLOCALIZED: Sequenced Assembly", - "create.recipe.assembly.next": "UNLOCALIZED: Next: %1$s", - "create.recipe.assembly.step": "UNLOCALIZED: Step %1$s:", - "create.recipe.assembly.progress": "UNLOCALIZED: Progress: %1$s/%2$s", - "create.recipe.assembly.pressing": "UNLOCALIZED: Process in Press", - "create.recipe.assembly.spout_filling_fluid": "UNLOCALIZED: Spout %1$s", - "create.recipe.assembly.deploying_item": "UNLOCALIZED: Deploy %1$s", - "create.recipe.assembly.cutting": "UNLOCALIZED: Cut with Saw", - "create.recipe.assembly.repeat": "UNLOCALIZED: Repeat Sequence %1$s Times", - "create.recipe.assembly.junk": "UNLOCALIZED: Random junk", + "create.recipe.sequenced_assembly": "組立ライン", + "create.recipe.assembly.next": "次の工程: %1$s", + "create.recipe.assembly.step": "手順: %1$s:", + "create.recipe.assembly.progress": "進捗: %1$s/%2$s", + "create.recipe.assembly.pressing": "プレスする", + "create.recipe.assembly.spout_filling_fluid": "%1$sを注液", + "create.recipe.assembly.deploying_item": "%1$sを組み込む", + "create.recipe.assembly.cutting": "ソーでの切断", + "create.recipe.assembly.repeat": "%1$s回繰り返す", + "create.recipe.assembly.junk": "ランダムな仕損品", "create.recipe.processing.chance": "%1$s%%チャンス", "create.recipe.heat_requirement.none": "加熱不要", "create.recipe.heat_requirement.heated": "加熱が必要", @@ -780,16 +780,16 @@ "create.orientation.alongZ": "Z に沿る", "create.orientation.alongX": "X に沿る", - "create.gui.terrainzapper.title": "携帯型ワールドシェーパー", - "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.title": "携帯型ブロックザッパー", + "create.gui.terrainzapper.searchDiagonal": "対角線にフォロー", + "create.gui.terrainzapper.searchFuzzy": "素材の境界を無視", + "create.gui.terrainzapper.patternSection": "模様", + "create.gui.terrainzapper.pattern.solid": "敷き詰め", + "create.gui.terrainzapper.pattern.checkered": "市松模様", + "create.gui.terrainzapper.pattern.inversecheckered": "逆市松模様", + "create.gui.terrainzapper.pattern.chance25": "25%", + "create.gui.terrainzapper.pattern.chance50": "50%", + "create.gui.terrainzapper.pattern.chance75": "75%", "create.gui.terrainzapper.placement": "配置", "create.gui.terrainzapper.placement.merged": "合併", "create.gui.terrainzapper.placement.attached": "添える", @@ -798,8 +798,8 @@ "create.gui.terrainzapper.brush.cuboid": "直方体", "create.gui.terrainzapper.brush.sphere": "球体", "create.gui.terrainzapper.brush.cylinder": "円筒", - "create.gui.terrainzapper.brush.surface": "UNLOCALIZED: Surface", - "create.gui.terrainzapper.brush.cluster": "UNLOCALIZED: Cluster", + "create.gui.terrainzapper.brush.surface": "表面", + "create.gui.terrainzapper.brush.cluster": "鉱石", "create.gui.terrainzapper.tool": "ツール", "create.gui.terrainzapper.tool.fill": "埋立", "create.gui.terrainzapper.tool.place": "設置", @@ -809,8 +809,8 @@ "create.gui.terrainzapper.tool.flatten": "なだらかに", "create.terrainzapper.shiftRightClickToSet": "シフト-右クリックで形状を選択", - "create.terrainzapper.usingBlock": "UNLOCALIZED: Using: %1$s", - "create.terrainzapper.leftClickToSet": "UNLOCALIZED: Left-Click a Block to set Material", + "create.terrainzapper.usingBlock": "使用中: %1$s", + "create.terrainzapper.leftClickToSet": "ブロックをスニークせず左クリックでブロックを選択", "create.minecart_coupling.two_couplings_max": "トロッコを2つ以上連結させることはできません", "create.minecart_coupling.unloaded": "列車の一部のあるチャンクがロードされていません", @@ -1137,19 +1137,19 @@ "create.tooltip.chute.fans_pull_down": "ファンが下から吸い込んでいます", "create.tooltip.chute.contains": "内容物: %1$s x%2$s", - "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": "割り当てモード", + "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", - "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": "材料スロット", + "create.crafting_blueprint.filter_items_viable": "フィルターが使えます", + "create.crafting_blueprint.display_slot": "表示スロット", + "create.crafting_blueprint.inferred": "レシピから推測", + "create.crafting_blueprint.manually_assigned": "手動割り当て", + "create.crafting_blueprint.secondary_display_slot": "第2表示スロット", + "create.crafting_blueprint.optional": "オプション", "create.hint.hose_pulley.title": "底なし搬出", "create.hint.hose_pulley": "対象となる液体は無限とみなされています。", @@ -1178,45 +1178,45 @@ "create.command.killTPSCommand.argument.tickTime": "tickTime", "create.contraption.minecart_contraption_too_big": "このからくりトロッコは大きすぎて拾えません。", - "create.contraption.minecart_contraption_illegal_pickup": "UNLOCALIZED: A mystical force is binding this Cart Contraption to the world", + "create.contraption.minecart_contraption_illegal_pickup": "神秘的な力がからくりカートを世界に縛り付けています。", "_": "->------------------------] Subtitles [------------------------<-", "create.subtitle.contraption_disassemble": "からくりが止まる", - "create.subtitle.peculiar_bell_use": "UNLOCALIZED: Peculiar Bell tolls", + "create.subtitle.peculiar_bell_use": "風変わりな鐘が鳴る", "create.subtitle.mixing": "混ぜる音", "create.subtitle.mechanical_press_activation_belt": "メカニカルプレスがボンと鳴る", - "create.subtitle.fwoomp": "UNLOCALIZED: Potato Launcher fwoomps", - "create.subtitle.worldshaper_place": "UNLOCALIZED: Worldshaper zaps", + "create.subtitle.fwoomp": "ポテトランチャーがズキューンと鳴る", + "create.subtitle.worldshaper_place": "ワールドシェーパーが設置する", "create.subtitle.depot_slide": "アイテムが滑る", - "create.subtitle.saw_activate_stone": "UNLOCALIZED: Mechanical Saw activates", + "create.subtitle.saw_activate_stone": "メカニカルソーが動作する", "create.subtitle.blaze_munch": "ブレイズの咀嚼音", "create.subtitle.funnel_flap": "ファンネルがはためく", "create.subtitle.schematicannon_finish": "概略図砲が作業を終える", "create.subtitle.haunted_bell_use": "UNLOCALIZED: Haunted Bell tolls", "create.subtitle.scroll_value": "スクロールのカチカチ音", "create.subtitle.crafter_craft": "メカニカルクラフターがクラフトする", - "create.subtitle.controller_put": "UNLOCALIZED: Controller thumps", + "create.subtitle.controller_put": "コントローラのトントン音", "create.subtitle.cranking": "ハンドクランクが回る", "create.subtitle.wrench_remove": "機械を壊す", "create.subtitle.cogs": "歯車がゴロゴロと鳴る", "create.subtitle.slime_added": "スライムがぐしゃっとつぶれる", - "create.subtitle.wrench_rotate": "レンチを使う", - "create.subtitle.potato_hit": "UNLOCALIZED: Vegetable impacts", - "create.subtitle.saw_activate_wood": "UNLOCALIZED: Mechanical Saw activates", + "create.subtitle.wrench_rotate": "レンチが使用される", + "create.subtitle.potato_hit": "野菜が衝突する", + "create.subtitle.saw_activate_wood": "メカニカルソーが動作する", "create.subtitle.haunted_bell_convert": "UNLOCALIZED: Haunted Bell awakens", - "create.subtitle.deployer_polish": "UNLOCALIZED: Deployer applies polish", - "create.subtitle.deny": "UNLOCALIZED: Declining boop", - "create.subtitle.controller_click": "UNLOCALIZED: Controller clicks", + "create.subtitle.deployer_polish": "デプロイヤーが磨く", + "create.subtitle.deny": "失敗音", + "create.subtitle.controller_click": "コントローラーのカチカチ音", "create.subtitle.schematicannon_launch_block": "概略図砲が発射する", - "create.subtitle.copper_armor_equip": "UNLOCALIZED: Diving equipment clinks", - "create.subtitle.controller_take": "UNLOCALIZED: Lectern empties", + "create.subtitle.copper_armor_equip": "潜水服がチャリンと鳴る", + "create.subtitle.controller_take": "書見台が空になる", "create.subtitle.mechanical_press_activation": "メカニカルプレスがガーンと鳴る", "create.subtitle.contraption_assemble": "からくりが動く", "create.subtitle.crafter_click": "メカニカルクラフターのカチカチ音", "create.subtitle.depot_plop": "デプロイヤーにアイテムが入れられる", - "create.subtitle.confirm": "UNLOCALIZED: Affirmative ding", + "create.subtitle.confirm": "成功音", "_": "->------------------------] Item Descriptions [------------------------<-", @@ -1253,7 +1253,7 @@ "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.action3": "_設定画面_を開きます。", "item.create.handheld_worldshaper.tooltip": "携帯型ワールドシェーパー", "item.create.handheld_worldshaper.tooltip.summary": "特色ある_風景_や_地形_を作成する便利なツール。", @@ -1262,7 +1262,7 @@ "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.action3": "_設定画面_を開きます。", "item.create.tree_fertilizer.tooltip": "樹木の肥料", "item.create.tree_fertilizer.tooltip.summary": "一般的な種類の木の成長を早めるのに適したミネラルを配合した強力な肥料。", @@ -1273,39 +1273,39 @@ "item.create.extendo_grip.tooltip.summary": "ビヨヨーン!着用者の_射程_を大幅に_伸ばし_ます。", "item.create.extendo_grip.tooltip.condition1": "オフハンドに装備したとき", "item.create.extendo_grip.tooltip.behaviour1": "_メインハンド_で使うアイテムの_射程_を_伸ばし_ます。", - "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.condition2": "銅のバックタンクを装備したとき", + "item.create.extendo_grip.tooltip.behaviour2": "_耐久値_を消費しなくなります。代わりに_圧縮空気_をタンクから消費します。", - "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": "ポテトキャノン", + "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.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.behaviour2": "_設定画面_を開きます。", "item.create.empty_schematic.tooltip": "空の概略図", "item.create.empty_schematic.tooltip.summary": "レシピの材料、および_概略図テーブル_での書き込みに使われます。", "item.create.schematic.tooltip": "概略図", - "item.create.schematic.tooltip.summary": "ワールドに設置できる構造物を保持します。ホログラムを必要に応じて配置し、_概略図砲_を使って建築します。", + "item.create.schematic.tooltip.summary": "ワールドに設置できる構造物を保存します。ホログラムを必要に応じて配置し、_概略図砲_を使って建築します。", "item.create.schematic.tooltip.condition1": "持ったとき", "item.create.schematic.tooltip.behaviour1": "画面上のツールを使ってホログラムを配置します。", "item.create.schematic.tooltip.control1": "スニークしながら右クリックしたとき", - "item.create.schematic.tooltip.action1": "正確な_座標_を入力する_インターフェース_を開きます", + "item.create.schematic.tooltip.action1": "正確な_座標_の入力_画面_を開きます", "item.create.schematic_and_quill.tooltip": "概略図と羽根ペン", "item.create.schematic_and_quill.tooltip.summary": "ワールドの構造物を.nbtファイルに保存できます。", @@ -1321,9 +1321,9 @@ "item.create.schematic_and_quill.tooltip.action3": "選択を_リセット_して削除します。", "block.create.schematicannon.tooltip": "概略図砲", - "block.create.schematicannon.tooltip.summary": "ブロックを撃って、展開された_概略図_をもとにワールドに設置します。隣接する収納ブロックからのアイテムを自動搬入し、_火薬_を燃料とします。", + "block.create.schematicannon.tooltip.summary": "ブロックを撃って、_概略図_をもとにワールドに設置します。隣接する収納ブロックからのアイテムを自動搬入し、_火薬_を燃料とします。", "block.create.schematicannon.tooltip.condition1": "右クリックしたとき", - "block.create.schematicannon.tooltip.behaviour1": "_インターフェース_を開きます。", + "block.create.schematicannon.tooltip.behaviour1": "_UI_を開きます。", "block.create.schematic_table.tooltip": "概略図テーブル", "block.create.schematic_table.tooltip.summary": "保存された構造物を_空の概略図_に書き込みます。", @@ -1335,7 +1335,7 @@ "item.create.goggles.tooltip.condition1": "着用したとき", "item.create.goggles.tooltip.behaviour1": "設置された機械の_回転速度_および、_機械_の_応力への影響_と_許容量_を_色付きのインジケーター_で表示します。", "item.create.goggles.tooltip.condition2": "計器を見たとき", - "item.create.goggles.tooltip.behaviour2": "計器が接続されているネットワークの_回転速度_または_応力_に関する詳細情報を表示します。", + "item.create.goggles.tooltip.behaviour2": "計器が接続されている動力ネットワークの_回転速度_または_応力_に関する詳細情報を表示します。", "item.create.goggles.tooltip.condition3": "液体コンテナを見たとき", "item.create.goggles.tooltip.behaviour3": "ブロックの_容量_と、その中に貯蔵されている_液体_の詳細情報を表示します。", @@ -1358,20 +1358,20 @@ "block.create.turntable.tooltip.summary": "_回転力_を洗練された乗り物酔いに変えます。", "block.create.stockpile_switch.tooltip": "在庫スイッチ", - "block.create.stockpile_switch.tooltip.summary": "接続されたコンテナの_空き容量_に基づいてレッドストーン信号を切り替えます。便利なフィルターが付属しています。_コンパレータ―_とは違って、_在庫スイッチ_は、信号が反転される_しきい値_を設定できます。", + "block.create.stockpile_switch.tooltip.summary": "接続されたコンテナの_空き容量_によってレッドストーン信号を切り替えます。便利なフィルターが付属しています。_コンパレータ―_とは違って、_在庫スイッチ_は、信号が反転される_しきい値_を設定できます。", "block.create.stockpile_switch.tooltip.condition1": "右クリックしたとき", - "block.create.stockpile_switch.tooltip.behaviour1": "_設定インターフェース_を開きます。", + "block.create.stockpile_switch.tooltip.behaviour1": "_設定画面_を開きます。", "block.create.content_observer.tooltip": "コンテンツオブザーバー", - "block.create.content_observer.tooltip.summary": "設定された_フィルター_に一致する_コンテナ_や_メカニカルベルト_内の_アイテム_を_検出_します。観察している_収納ブロック_、_ベルト_、または_シュート_に一致するアイテムが含まれている場合、このは_レッドストーン信号_を発します。観察された_ファンネル_が一致するアイテムを_運搬_すると、このコンポーネントは_レッドストーンパルス_を発します。", + "block.create.content_observer.tooltip.summary": "設定された_フィルター_に一致する_コンテナ_や_メカニカルベルト_内の_アイテム_を_検出_します。観察している_収納ブロック_、_ベルト_、または_シュート_に一致するアイテムが含まれている場合、このは_レッドストーン信号_を発します。観察している_ファンネル_が一致するアイテムを_運搬_すると、このコンポーネントは_レッドストーンパルス_を発します。", "block.create.adjustable_crate.tooltip": "可変クレート", "block.create.adjustable_crate.tooltip.summary": "この_収納ブロック_は、容量を手動で調整できます。任意のアイテムを_16スタック_まで収納できます。_レッドストーンコンパレーター_に対応しています。", - "block.create.adjustable_crate.tooltip.condition1": "UNLOCALIZED: When R-Clicked", - "block.create.adjustable_crate.tooltip.behaviour1": "_インターフェース_を開きます。", + "block.create.adjustable_crate.tooltip.condition1": "右クリックしたとき", + "block.create.adjustable_crate.tooltip.behaviour1": "_UI_を開きます。", "block.create.creative_crate.tooltip": "クリエイティブクレート", - "block.create.creative_crate.tooltip.summary": "この_収納ブロック_は、あらゆるアイテムを無限に複製します。隣接する_概略図砲_へブロックを無限に供給します。", + "block.create.creative_crate.tooltip.summary": "あらゆるアイテムを無限に複製する_収納ブロック_。隣接する_概略図砲_へブロックを無限に供給します。", "block.create.creative_crate.tooltip.condition1": "フィルタースロットにアイテムが入っているとき", "block.create.creative_crate.tooltip.behaviour1": "このクレートから何かを_搬出_すると、指定されたアイテムが_無限_に_搬出_されます。このクレートに_搬入_されたアイテムは_消滅_します。", @@ -1390,44 +1390,44 @@ "item.create.refined_radiance.tooltip": "高貴な光輝", "item.create.refined_radiance.tooltip.summary": "_吸収した光輝_から鍛造した色彩素材。", - "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.condition1": "作業中", + "item.create.refined_radiance.tooltip.behaviour1": "この素材の使用方法は将来のリリースで実装予定です。", "item.create.shadow_steel.tooltip": "シャドウスチール", "item.create.shadow_steel.tooltip.summary": "_奈落の虚無_から鍛造した色彩素材。", - "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.condition1": "作業中", + "item.create.shadow_steel.tooltip.behaviour1": "この素材の使用方法は将来のリリースで実装予定です。", - "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": "リンクコントローラー", + "item.create.linked_controller.tooltip.summary": "_6つのボタン_に割り当てられた_レッドストーンリンク_周波数を_片手_で_制御_できます。", + "item.create.linked_controller.tooltip.condition1": "左クリック", + "item.create.linked_controller.tooltip.behaviour1": "コントローラーを_オンオフ_します。_制御_がオンのときは_移動_できません。", + "item.create.linked_controller.tooltip.condition2": "スニークしながら左クリック", + "item.create.linked_controller.tooltip.behaviour2": "手動_設定画面_を開きます", + "item.create.linked_controller.tooltip.condition3": "レッドストーンリンク受信機を左クリックしたとき", + "item.create.linked_controller.tooltip.behaviour3": "_割り当てモード_をオンにします。_6つのコントロール_のうち1つを押してリンクの周波数に_割り当て_ます。", + "item.create.linked_controller.tooltip.condition4": "書見台を左クリックしたとき", + "item.create.linked_controller.tooltip.behaviour4": "コントローラーを書見台に設置し、簡単に使えるようにします。(スニーク中に左クリックで取り出せます)", - "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": "潜水ヘルメット", + "item.create.diving_helmet.tooltip.summary": "_銅のバックタンク_と一緒に使うと、長時間_水中_で_呼吸_できるようになるヘルメット。", + "item.create.diving_helmet.tooltip.condition1": "装備したとき", + "item.create.diving_helmet.tooltip.behaviour1": "バックタンクからゆっくりと_圧縮空気_を排出しながら、_水中呼吸_の効果を供給します。", - "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": "銅のバックタンク", + "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.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": "潜水ブーツ", + "item.create.diving_boots.tooltip.summary": "海底を歩けるようになる_重いブーツ_。", + "item.create.diving_boots.tooltip.condition1": "装備したとき", + "item.create.diving_boots.tooltip.behaviour1": "_沈むのが早くなり_、_泳げなく_なります。その代わり、水中で_歩行_と_ジャンプ_が可能になります。また、メカニカルベルトの影響を受けなくなります。", - "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.tooltip": "クラフトブループリント", + "item.create.crafting_blueprint.tooltip.summary": "壁に_貼り_、_材料_の_配置_を_指定_することで手作業でのクラフトを簡単にできます。各スロットが1つのレシピを表しています。", "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", @@ -1438,8 +1438,8 @@ "item.create.minecart_coupling.tooltip.condition1": "トロッコに使ったとき", "item.create.minecart_coupling.tooltip.behaviour1": "_2台_のトロッコを連結します。それらは移動中に_一定_の_距離_を保とうします。", - "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": "風変わりな鐘", + "block.create.peculiar_bell.tooltip.summary": "装飾用の真鍮の鐘。_魂の炎_や_魂の焚き火_の上に置くと、不気味な変化が起こるかもしれません...", "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.", @@ -1461,11 +1461,11 @@ "create.ponder.replay": "最初から", "create.ponder.think_back": "戻る", "create.ponder.slow_text": "熟考(スロー再生)", - "create.ponder.exit": "UNLOCALIZED: Exit", - "create.ponder.welcome": "UNLOCALIZED: Welcome to Ponder", - "create.ponder.categories": "UNLOCALIZED: Available Categories in Create", - "create.ponder.index_description": "UNLOCALIZED: Click one of the icons to learn about its associated Items and Blocks", - "create.ponder.index_title": "UNLOCALIZED: Ponder Index", + "create.ponder.exit": "終了", + "create.ponder.welcome": "思案画面へようこそ", + "create.ponder.categories": "Createで利用可能なカゴテリ", + "create.ponder.index_description": "アイテムをクリックすると、関連するアイテムやブロックの情報が表示されます。", + "create.ponder.index_title": "思案索引", "create.ponder.shared.movement_anchors": "シャーシや超粘着剤を使えば大きな構造物も動かせます", "create.ponder.shared.rpm32": "32 RPM", "create.ponder.shared.sneak_and": "スニーク +", @@ -1526,10 +1526,10 @@ "create.ponder.andesite_tunnel.text_4": "残ったものは、そのルートを進み続けます", "create.ponder.basin.header": "鉢によるアイテム加工", - "create.ponder.basin.text_1": "鉢には材料となるアイテムや液体を入れられます", + "create.ponder.basin.text_1": "鉢には素材となるアイテムや液体を入れられます", "create.ponder.basin.text_2": "鉢は完成品アイテムを斜め下へ搬出しようとします", - "create.ponder.basin.text_3": "搬出できる機械が存在する場合、鉢には搬出用の蛇口が表示されます", - "create.ponder.basin.text_4": "ここではいくつかの選択肢があります", + "create.ponder.basin.text_3": "搬出できるブロックが存在する場合、鉢には搬出用の蛇口が表示されます", + "create.ponder.basin.text_4": "搬出先のブロックにはいくつかの選択肢があります", "create.ponder.basin.text_5": "搬出したアイテムは下の収納ブロックに入ります", "create.ponder.basin.text_6": "搬出先がない場合、鉢は完成品アイテムを保持します", "create.ponder.basin.text_7": "これは、完成品アイテムを材料として再利用する必要がある場合に役立ちます", @@ -1538,7 +1538,7 @@ "create.ponder.bearing_modes.header": ":メカニカルベアリングの動作モード", "create.ponder.bearing_modes.text_1": "止まったとき、ベアリングは格子に沿った近い角度に構造物を配置します", - "create.ponder.bearing_modes.text_2": "通常のブロックに戻らないように設定したり、開始時の角度のみブロックに戻るように設定することもできます", + "create.ponder.bearing_modes.text_2": "通常のブロックに戻らないように設定したり、開始時の角度のみブロックに戻るように設定したりできます", "create.ponder.belt_casing.header": "ケース入りベルト", "create.ponder.belt_casing.text_1": "真鍮か安山岩のケーシングを使ってメカニカルベルトを飾れます", @@ -1547,16 +1547,16 @@ "create.ponder.belt_connector.header": "メカニカルベルトの使い方", "create.ponder.belt_connector.text_1": "メカニカルベルトを持って2つのシャフトを右クリックすると、シャフトにベルトコンベアを繋げて設置されます", "create.ponder.belt_connector.text_2": "誤ったシャフトをクリックしてしまった場合、スニークしながら右クリックでキャンセルできます", - "create.ponder.belt_connector.text_3": "ベルトの何処にでもシャフトを追加できます", + "create.ponder.belt_connector.text_3": "ベルト内のどこでも、シャフトを追加できます", "create.ponder.belt_connector.text_4": "ベルトを介して接続されたシャフトは、同じ速度・方向で回転します", "create.ponder.belt_connector.text_5": "追加したシャフトは、レンチで取り除けま", "create.ponder.belt_connector.text_6": "メカニカルベルトは見栄えのために染色できます", "create.ponder.belt_directions.header": "メカニカルベルトの有効な向きについて", "create.ponder.belt_directions.text_1": "ベルトは自由な方向に接続できるわけではありません", - "create.ponder.belt_directions.text_2": "1.水平方向", + "create.ponder.belt_directions.text_2": "1.水平", "create.ponder.belt_directions.text_3": "2.斜め", - "create.ponder.belt_directions.text_4": "3.垂直方向", + "create.ponder.belt_directions.text_4": "3.垂直", "create.ponder.belt_directions.text_5": "4.垂直方向のシャフトを水平に", "create.ponder.belt_directions.text_6": "これらはすべて接続可能な方向です。ベルトの長さは2~20ブロックの間で自由に接続できます", @@ -1567,7 +1567,7 @@ "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_3": "ブレイズケーキを与えると、バーナーはさらに火力を出せます", "create.ponder.blaze_burner.text_4": "供給作業は、デプロイヤーやメカニカルアームで自動化できます", "create.ponder.brass_funnel.header": "真鍮ファンネル", @@ -1586,7 +1586,7 @@ "create.ponder.brass_tunnel.text_7": "搬入したアイテムは、接続されているすべての搬出口に分配されます", "create.ponder.brass_tunnel.text_8": "アイテムをトンネルへ直接搬入することもできます", - "create.ponder.brass_tunnel_modes.header": "真鍮トンネルのモード", + "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": "アイテムはグループ内の全てのトンネルがアイテムを搬入できる場合のみ通過を許可します", @@ -1601,35 +1601,35 @@ "create.ponder.brass_tunnel_modes.text_9": "「ランダム」は、スタック全体をランダムに選択された搬出口に分配します ", "create.ponder.cart_assembler.header": "トロッコアセンブラによる構造物の移動", - "create.ponder.cart_assembler.text_1": "レッドストーン信号を受けたアセンブラは、通過するトロッコに接続された構造物を取り付けます", + "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": "2つのトロッコアセンブラが構造物を共有している場合...", - "create.ponder.cart_assembler_dual.text_2": "...どちらかにレッドストーン信号を受けると、列車が組み立てられます", + "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_3": "UNLOCALIZED: If the Assembler is set to Lock Rotation, the contraptions' orientation will never change", + "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_3": "他のトロッコを使うこともできます", "create.ponder.cart_assembler_rails.text_4": "かまど付きトロッコは、構造物の収納ブロックから燃料を確保します", "create.ponder.chain_drive.header": "ケース入りチェーンドライブによる回転力の伝達", "create.ponder.chain_drive.text_1": "チェーンドライブは、一列に並べると回転を伝達します", - "create.ponder.chain_drive.text_2": "この様に接続された全てのシャフトは、回転方向が同じです", - "create.ponder.chain_drive.text_3": "列のどの部分でも90度回転させて設置できます", + "create.ponder.chain_drive.text_2": "このように、に接続された全てのシャフトは、回転方向が同じです", + "create.ponder.chain_drive.text_3": "列の任意の部分を90度方向を変えて設置できます", "create.ponder.chain_gearshift.header": "チェーンギアシフトによる回転速度の制御", "create.ponder.chain_gearshift.text_1": "信号を受けていないチェーンギアシフトは、チェーンドライブと同じように動作します", "create.ponder.chain_gearshift.text_2": "信号を受けている時は、列内の他のチェーンドライブに伝達される速度が2倍になります", - "create.ponder.chain_gearshift.text_3": "信号を受けているチェーンギアシフトが動力源に無い場合、速度が半分になります", + "create.ponder.chain_gearshift.text_3": "信号を受けているチェーンギアシフトが動力源でない場合、速度が半分になります", "create.ponder.chain_gearshift.text_4": "いずれの場合も、列内のチェーンドライブは常に「信号入りチェーンギアシフト」の2倍の速度で動作します", "create.ponder.chain_gearshift.text_5": "レッドストーン信号の強度で、比率を1と2の間でより正確に調整できます", "create.ponder.chain_gearshift.text_6": "12 RPM", @@ -1641,7 +1641,7 @@ "create.ponder.chute_upward.header": "シュートでの上方向へ運搬", "create.ponder.chute_upward.text_1": "シュートの上部または下部にファンを配置すると、アイテムを上方向へ運搬できます", - "create.ponder.chute_upward.text_2": "エンジニアのゴーグルを付けてシュートを見ると、移動方向の情報が表示されます", + "create.ponder.chute_upward.text_2": "エンジニアのゴーグルを付けてシュートを見ると、移動方向が表示されます", "create.ponder.chute_upward.text_3": "ブロックで詰まっている端では、アイテムを側面から搬出入する必要があります", "create.ponder.clockwork_bearing.header": "時計仕掛けのベアリングを使った構造物のアニメーション", @@ -1655,27 +1655,27 @@ "create.ponder.clockwork_bearing.text_8": "2つ目の構造物は分針として回転します", "create.ponder.clutch.header": "クラッチによる回転力の制御", - "create.ponder.clutch.text_1": "クラッチは直線に回転を伝達します", - "create.ponder.clutch.text_2": "レッドストーン信号を受けると、回転の伝達を停止します", + "create.ponder.clutch.text_1": "クラッチはまっすぐ回転を伝達します", + "create.ponder.clutch.text_2": "レッドストーン信号を与えると、回転の伝達が止まります", "create.ponder.cog_speedup.header": "歯車による回転速度変化", "create.ponder.cog_speedup.text_1": "大小の歯車は斜めに接続できます", - "create.ponder.cog_speedup.text_2": "大きな歯車から歯車に接続すると、伝達される回転速度が2倍になります", - "create.ponder.cog_speedup.text_3": "逆に接続すると、伝達される回転速度が半分になります", + "create.ponder.cog_speedup.text_2": "大きな歯車から歯車に接続すると、伝達先の回転速度が2倍になります", + "create.ponder.cog_speedup.text_3": "逆に接続すると、伝達先の回転速度が半分になります", "create.ponder.cogwheel.header": "歯車による回転力の伝達", "create.ponder.cogwheel.text_1": "歯車は隣接する歯車へ回転力を伝達します", "create.ponder.cogwheel.text_2": "このように連結された隣のシャフトは、逆方向に回転します", - "create.ponder.creative_fluid_tank.header": "UNLOCALIZED: Creative Fluid Tanks", - "create.ponder.creative_fluid_tank.text_1": "UNLOCALIZED: Creative Fluid Tanks can be used to provide a bottomless supply of fluid", - "create.ponder.creative_fluid_tank.text_2": "UNLOCALIZED: Right-Click with a fluid containing item to configure it", - "create.ponder.creative_fluid_tank.text_3": "UNLOCALIZED: Pipe Networks can now endlessly draw the assigned fluid from the tank", - "create.ponder.creative_fluid_tank.text_4": "UNLOCALIZED: Any Fluids pushed back into a Creative Fluid Tank will be voided", + "create.ponder.creative_fluid_tank.header": "クリエイティブ液体タンク", + "create.ponder.creative_fluid_tank.text_1": "クリエイティブ液体タンクは、液体を無限に供給できます", + "create.ponder.creative_fluid_tank.text_2": "液体容器アイテムで右クリックで液体を指定できます", + "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.text_1": "クリエイティブモーターは、コンパクトで調整可能な原動機です", + "create.ponder.creative_motor.text_2": "背面パネルを見ながらスクロールすると、モーターの回転速度を変更できます", "create.ponder.crushing_wheels.header": "破砕ホイールによるアイテム加工", "create.ponder.crushing_wheels.text_1": "一対の破砕ホイールは、非常に効果的にアイテムを粉砕できます", @@ -1691,7 +1691,7 @@ "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_2": "動作は、常に手前2ブロックの位置へ行われます", "create.ponder.deployer.text_3": "真正面のブロックが邪魔になることはありません", "create.ponder.deployer.text_4": "デプロイヤーは以下の動作に使えます", "create.ponder.deployer.text_5": "ブロックの設置", @@ -1705,42 +1705,42 @@ "create.ponder.deployer_contraption.text_2": "...稼働した場所ごとに稼働し、からくり内の収納ブロックのアイテムを使用します", "create.ponder.deployer_contraption.text_3": "フィルタースロットを使って、どのアイテムを使用するか指定できます", - "create.ponder.deployer_modes.header": "デプロイヤーのモード", + "create.ponder.deployer_modes.header": "デプロイヤーの動作モード", "create.ponder.deployer_modes.text_1": "デフォルトでは、デプロイヤーは右クリックの動作を模倣します", "create.ponder.deployer_modes.text_2": "レンチを使えば、左クリックの動作を模倣するように設定できます", - "create.ponder.deployer_processing.header": "UNLOCALIZED: Processing Items using Deployers", - "create.ponder.deployer_processing.text_1": "UNLOCALIZED: With a fitting held item, Deployers can process items provided beneath them", - "create.ponder.deployer_processing.text_2": "UNLOCALIZED: The Input items can be dropped or placed on a Depot under the Deployer", - "create.ponder.deployer_processing.text_3": "UNLOCALIZED: When items are provided on a belt...", - "create.ponder.deployer_processing.text_4": "UNLOCALIZED: The Deployer will hold and process them automatically", + "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_redstone.header": "レッドストーン信号によるデプロイヤーの制御", "create.ponder.deployer_redstone.text_1": "レッドストーン信号を受けている間、デプロイヤーは稼働しません", "create.ponder.deployer_redstone.text_2": "デプロイヤーは停止する前に、開始したサイクルは終了させます", - "create.ponder.deployer_redstone.text_3": "その為、オフのパルス信号を使って丁度1サイクルだけ稼働させられます", + "create.ponder.deployer_redstone.text_3": "その為、反転したパルス信号を使って丁度1サイクルだけ稼働させられます", "create.ponder.depot.header": "デポの使い方", "create.ponder.depot.text_1": "デポは動かないメカニカルベルトのようなブロックです", - "create.ponder.depot.text_2": "右クリックして、手動でのアイテム搬出入できます", + "create.ponder.depot.text_2": "右クリックして、手動でアイテム搬出入できます", "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_1": "空のバーナーでブレイズを右クリックすると捕獲できます", "create.ponder.empty_blaze_burner.text_2": "また、ブレイズはスポーンブロックから直接捕獲することもできます", - "create.ponder.empty_blaze_burner.text_3": "これで、様々な機械で利用する理想的な熱源が得られます", + "create.ponder.empty_blaze_burner.text_3": "これで、様々な機械で利用できる理想的な熱源が得られます", "create.ponder.empty_blaze_burner.text_4": "空のブレイズバーナーは火打石と打ち金を使って火を付ければ装飾にも使えます", "create.ponder.empty_blaze_burner.text_5": "しかし、これは加工用の熱源には適していません", - "create.ponder.encased_fluid_pipe.header": "UNLOCALIZED: Encasing Fluid Pipes", - "create.ponder.encased_fluid_pipe.text_1": "UNLOCALIZED: Copper Casing can be used to decorate Fluid Pipes", - "create.ponder.encased_fluid_pipe.text_2": "UNLOCALIZED: Aside from being conceiled, Encased Pipes are locked into their connectivity state", - "create.ponder.encased_fluid_pipe.text_3": "UNLOCALIZED: It will no longer react to any neighbouring blocks being added or removed", + "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_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": "溶岩を通過した気流は、加熱されます", @@ -1756,34 +1756,34 @@ "create.ponder.fan_source.text_1": "ファンを熱源に向けて設置すると、回転力を生成できます", "create.ponder.fan_source.text_2": "レッドストーン信号を受けると、回転力が生成されます", - "create.ponder.fluid_pipe_flow.header": "UNLOCALIZED: Moving Fluids using Copper Pipes", - "create.ponder.fluid_pipe_flow.text_1": "UNLOCALIZED: Fluid Pipes can connect two or more fluid sources and targets", - "create.ponder.fluid_pipe_flow.text_2": "UNLOCALIZED: Using a wrench, a straight pipe segment can be given a window", - "create.ponder.fluid_pipe_flow.text_3": "UNLOCALIZED: Windowed pipes will not connect to any other adjacent pipe segments", - "create.ponder.fluid_pipe_flow.text_4": "UNLOCALIZED: Powered by Mechanical Pumps, the Pipes can transport Fluids", - "create.ponder.fluid_pipe_flow.text_5": "UNLOCALIZED: No fluid is being extracted at first", - "create.ponder.fluid_pipe_flow.text_6": "UNLOCALIZED: Once the flow connects them, the endpoints gradually transfer their contents", - "create.ponder.fluid_pipe_flow.text_7": "UNLOCALIZED: Thus, the Pipe blocks themselves never 'physically' contain any fluid", + "create.ponder.fluid_pipe_flow.header": "銅パイプを使った液体の移動", + "create.ponder.fluid_pipe_flow.text_1": "液体パイプは2つ以上の液体源と輸送先を繋ぐことができます", + "create.ponder.fluid_pipe_flow.text_2": "レンチを使うと、まっすぐなパイプに窓を付けられます", + "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_7": "つまり、パイプブロック自体には液体は物理的に入っていないということです", - "create.ponder.fluid_pipe_interaction.header": "UNLOCALIZED: Draining and Filling fluid containers", - "create.ponder.fluid_pipe_interaction.text_1": "UNLOCALIZED: Endpoints of a pipe network can interact with a variety of blocks", - "create.ponder.fluid_pipe_interaction.text_2": "UNLOCALIZED: Any block with fluid storage capabilities can be filled or drained", - "create.ponder.fluid_pipe_interaction.text_3": "UNLOCALIZED: Source blocks right in front of an open end can be picked up...", - "create.ponder.fluid_pipe_interaction.text_4": "UNLOCALIZED: ...while spilling into empty spaces can create fluid sources", - "create.ponder.fluid_pipe_interaction.text_5": "UNLOCALIZED: Pipes can also extract fluids from a handful of other blocks directly", + "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_5": "パイプは、いくつかのブロックから直接液体を吸い込めます", - "create.ponder.fluid_tank_sizes.header": "UNLOCALIZED: Dimensions of a Fluid tank", - "create.ponder.fluid_tank_sizes.text_1": "UNLOCALIZED: Fluid Tanks can be combined to increase the total capacity", - "create.ponder.fluid_tank_sizes.text_2": "UNLOCALIZED: Their base square can be up to 3 blocks wide...", - "create.ponder.fluid_tank_sizes.text_3": "UNLOCALIZED: ...and grow in height by more than 30 additional layers", - "create.ponder.fluid_tank_sizes.text_4": "UNLOCALIZED: Using a Wrench, a tanks' window can be toggled", + "create.ponder.fluid_tank_sizes.header": "液体タンクのサイズ", + "create.ponder.fluid_tank_sizes.text_1": "液体タンクは複数組み合わせて容量を増やせます。", + "create.ponder.fluid_tank_sizes.text_2": "横幅は最大3ブロック", + "create.ponder.fluid_tank_sizes.text_3": "高さは30ブロック以上重ねられます", + "create.ponder.fluid_tank_sizes.text_4": "レンチを使って、タンクの窓を付け外しできます", - "create.ponder.fluid_tank_storage.header": "UNLOCALIZED: Storing Fluids in Fluid Tanks", - "create.ponder.fluid_tank_storage.text_1": "UNLOCALIZED: Fluid Tanks can be used to store large amounts of fluid", - "create.ponder.fluid_tank_storage.text_2": "UNLOCALIZED: Pipe networks can push and pull fluids from any side", - "create.ponder.fluid_tank_storage.text_3": "UNLOCALIZED: The contained fluid can be measured by a Comparator", - "create.ponder.fluid_tank_storage.text_4": "UNLOCALIZED: However, in Survival Mode Fluids cannot be added or taken manually", - "create.ponder.fluid_tank_storage.text_5": "UNLOCALIZED: You can use Basins, Item Drains and Spouts to drain or fill fluid containing items", + "create.ponder.fluid_tank_storage.header": "液体タンクへの液体の貯蔵", + "create.ponder.fluid_tank_storage.text_1": "液体タンクは大量の液体を貯蔵することができます", + "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.flywheel.header": "勢車による回転力の生成", "create.ponder.flywheel.text_1": "かまどエンジンで回転力を生成するには、勢車が必要です", @@ -1797,9 +1797,9 @@ "create.ponder.funnel_compat.text_4": "アイテム排液口など", "create.ponder.funnel_direction.header": "運搬の方向", - "create.ponder.funnel_direction.text_1": "通常の配置では、収納ブロックからアイテムを搬出ます", + "create.ponder.funnel_direction.text_1": "通常の配置では、収納ブロックからアイテムを搬出します", "create.ponder.funnel_direction.text_2": "スニークしながら設置すると、収納ブロックにアイテムを搬入します", - "create.ponder.funnel_direction.text_3": "レンチを使って、設置後にファンネルのモードを変えられます", + "create.ponder.funnel_direction.text_3": "レンチを使って、設置後にファンネルの動作モードを変えられます", "create.ponder.funnel_direction.text_4": "ほとんどの方向で同じことができます", "create.ponder.funnel_direction.text_5": "ベルト上のファンネルは、ベルトの移動方向に応じて搬入/搬出が決まります", @@ -1820,18 +1820,18 @@ "create.ponder.furnace_engine.text_3": "溶鉱炉を使うと、エンジンの効率が2倍になります", "create.ponder.gantry_carriage.header": "ガントリーキャリッジの使い方", - "create.ponder.gantry_carriage.text_1": "ガントリーキャリッジは、ガントリーシャフトに取り付けてスライドさせられます", - "create.ponder.gantry_carriage.text_2": "ガントリーの仕掛けは、取り付けたブロックを動かせます", + "create.ponder.gantry_carriage.text_1": "ガントリーキャリッジは、ガントリーシャフトに取り付けてスライドできます", + "create.ponder.gantry_carriage.text_2": "ガントリーは、取り付けられたブロックを動かします", - "create.ponder.gantry_cascaded.header": "立体ガンドリー", + "create.ponder.gantry_cascaded.header": "立体ガントリー", "create.ponder.gantry_cascaded.text_1": "ガントリーシャフトは、超粘着剤を使わずにキャリッジに取り付けられます", "create.ponder.gantry_cascaded.text_2": "そのガントリーシャフトに取り付けたキャリッジも同様です", - "create.ponder.gantry_cascaded.text_3": "このように、ガントリー機構を立体的に接続すると、複数の移動軸をカバーできます", + "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_3": "また、シャフトの回転方向によっても決まります", "create.ponder.gantry_direction.text_4": "キャリッジへ伝達する回転力も同じルールが適用されます", "create.ponder.gantry_redstone.header": "ガントリーでの回転力の伝播", @@ -1845,11 +1845,11 @@ "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_3": "直角に曲げて伝達すると、鏡映しの方向に回転します", + "create.ponder.gearbox.text_4": "まっすぐ伝達すると、回転方向が逆になります", "create.ponder.gearshift.header": "ギアシフトによる回転力の制御", - "create.ponder.gearshift.text_1": "ギアシフトは、直線に回転を伝達します", + "create.ponder.gearshift.text_1": "ギアシフトは、まっすぐ回転を伝達します", "create.ponder.gearshift.text_2": "レッドストーン信号を受けると、回転方向を逆に伝達します", "create.ponder.hand_crank.header": "ハンドクランクによる回転力の生成", @@ -1858,33 +1858,33 @@ "create.ponder.hand_crank.text_3": "回転速度は比較的速めです", "create.ponder.hand_crank.text_4": "スニークしながら右クリックし続けると、時計回りに回転します", - "create.ponder.hose_pulley.header": "UNLOCALIZED: Source Filling and Draining using Hose Pulleys", - "create.ponder.hose_pulley.text_1": "UNLOCALIZED: Hose Pulleys can be used to fill or drain large bodies of Fluid", - "create.ponder.hose_pulley.text_2": "UNLOCALIZED: With the Kinetic Input, the height of the pulleys' hose can be controlled", - "create.ponder.hose_pulley.text_3": "UNLOCALIZED: The Pulley retracts while the input rotation is inverted", - "create.ponder.hose_pulley.text_4": "UNLOCALIZED: On the opposite side, pipes can be connected", - "create.ponder.hose_pulley.text_5": "UNLOCALIZED: Attached pipe networks can either provide fluid to the hose...", - "create.ponder.hose_pulley.text_6": "UNLOCALIZED: ...or pull from it, draining the pool instead", - "create.ponder.hose_pulley.text_7": "UNLOCALIZED: Fill and Drain speed of the pulley depends entirely on the fluid networks' throughput", + "create.ponder.hose_pulley.header": "ホースプーリーを使った液体の吸入・放出", + "create.ponder.hose_pulley.text_1": "ホースプーリーは、大規模な液体の吸入や放出に使います", + "create.ponder.hose_pulley.text_2": "回転力の入出口はプーリーのホースの高さを変えるのに使います", + "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_7": "プーリーの吸入・放出速度は液体ネットワークの性能で決まります", - "create.ponder.hose_pulley_infinite.header": "UNLOCALIZED: Passively Filling and Draining large bodies of Fluid", - "create.ponder.hose_pulley_infinite.text_1": "UNLOCALIZED: When deploying the Hose Pulley into a large enough ocean...", - "create.ponder.hose_pulley_infinite.text_2": "UNLOCALIZED: It will provide/dispose fluids without affecting the source", - "create.ponder.hose_pulley_infinite.text_3": "UNLOCALIZED: Pipe networks can limitlessly take fluids from/to such pulleys", + "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": "UNLOCALIZED: Fill and Drain level of Hose Pulleys", - "create.ponder.hose_pulley_level.text_1": "UNLOCALIZED: While fully retracted, the Hose Pulley cannot operate", - "create.ponder.hose_pulley_level.text_2": "UNLOCALIZED: Draining runs from top to bottom", - "create.ponder.hose_pulley_level.text_3": "UNLOCALIZED: The surface level will end up just below where the hose ends", - "create.ponder.hose_pulley_level.text_4": "UNLOCALIZED: Filling runs from bottom to top", - "create.ponder.hose_pulley_level.text_5": "UNLOCALIZED: The filled pool will not grow beyond the layer above the hose end", + "create.ponder.hose_pulley_level.header": "ホースプーリーの吸入・放出レベル", + "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": "下から上に向かって放出します", + "create.ponder.hose_pulley_level.text_5": "ホースの端より上に放出されることはありません", - "create.ponder.item_drain.header": "UNLOCALIZED: Emptying Fluid Containers using Item Drains", - "create.ponder.item_drain.text_1": "UNLOCALIZED: Item Drains can extract fluids from items", - "create.ponder.item_drain.text_2": "UNLOCALIZED: Right-click it to pour fluids from your held item into it", - "create.ponder.item_drain.text_3": "UNLOCALIZED: When items are inserted from the side...", - "create.ponder.item_drain.text_4": "UNLOCALIZED: ...they roll across, emptying out their contained fluid", - "create.ponder.item_drain.text_5": "UNLOCALIZED: Pipe Networks can now pull the fluid from the drains' internal buffer", + "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.large_cogwheel.header": "大きな歯車による回転力の伝達", "create.ponder.large_cogwheel.text_1": "大きな歯車は、直角に接続できます", @@ -1896,12 +1896,12 @@ "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_6": "CTRLを押しながらスクロールすると、接続している全てのシャーシブロックの範囲を一気に調整できます", "create.ponder.linear_chassis_attachment.text_7": "他の面にブロックを接着するには、超粘着剤を使う必要があります", "create.ponder.linear_chassis_attachment.text_8": "この仕組みを使えば、どんな形の構造物もからくりとして動かせます", "create.ponder.linear_chassis_group.header": "リニアシャーシをグループで動かす", - "create.ponder.linear_chassis_group.text_1": "リニアシャーシは、隣の同じシャーシブロックと接続します", + "create.ponder.linear_chassis_group.text_1": "リニアシャーシは、隣の同じ種類のシャーシと繋がります", "create.ponder.linear_chassis_group.text_2": "からくり機械で1つを動かすと、他のリニアシャーシも一緒に動きます", "create.ponder.linear_chassis_group.text_3": "異なる種類のシャーシや、別の方向を向いているシャーシは接続されません", @@ -1926,7 +1926,7 @@ "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_3": "アームは複数の有効な搬出先が設定されていると...", "create.ponder.mechanical_arm_modes.text_4": "...設定に従ってアイテムを分配します", "create.ponder.mechanical_arm_modes.text_5": "レンチを持ってスクロールすると設定を変えられます", "create.ponder.mechanical_arm_modes.text_6": "「順繰り分配」は、有効な全ての搬出先へ順番に搬出します", @@ -1940,8 +1940,8 @@ "create.ponder.mechanical_arm_redstone.text_3": "それを利用し、反転したパルス信号を使って1回だけ稼働させられます", "create.ponder.mechanical_bearing.header": "メカニカルベアリングによる構造物の移動", - "create.ponder.mechanical_bearing.text_1": "メカニカルベアリングは、前方にブロックを取り付けられます", - "create.ponder.mechanical_bearing.text_2": "回転力を供給すると、組み立てた構造物を回転できます", + "create.ponder.mechanical_bearing.text_1": "メカニカルベアリングは、手前にブロックを取り付けられます", + "create.ponder.mechanical_bearing.text_2": "回転力を供給すると、組み立てた構造物を回せます", "create.ponder.mechanical_crafter.header": "メカニカルクラフターの配置", "create.ponder.mechanical_crafter.text_1": "メカニカルクラフターは、あらゆるクラフトレシピを自動化できます", @@ -1965,7 +1965,7 @@ "create.ponder.mechanical_drill.header": "メカニカルドリルでブロックを破壊する", "create.ponder.mechanical_drill.text_1": "メカニカルドリルは回転力を供給すると、目の前のブロックを破壊します", - "create.ponder.mechanical_drill.text_2": "採掘速度は回転速度に依存します", + "create.ponder.mechanical_drill.text_2": "採掘速度は回転速度で決まります", "create.ponder.mechanical_drill_contraption.header": "からくりに組み込んでのメカニカルドリルの使い方", "create.ponder.mechanical_drill_contraption.text_1": "からくりの一部として、メカニカルドリルを動かすと...", @@ -1979,49 +1979,49 @@ "create.ponder.mechanical_mixer.text_1": "ミキサーと鉢があれば、いくつかのクラフトレシピを自動化できます", "create.ponder.mechanical_mixer.text_2": "自動化できるのは不定形レシピといくつかの追加レシピです", "create.ponder.mechanical_mixer.text_3": "レシピの中には、ブレイズバーナーの熱を必要とするものもあります", - "create.ponder.mechanical_mixer.text_4": "フィルタースロットは、2つのレシピが競合する場合に使えます", + "create.ponder.mechanical_mixer.text_4": "フィルタースロットは、2つのレシピが競合するときに使えます", "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_1": "メカニカルピストンは、手前にあるブロックを動かせます", + "create.ponder.mechanical_piston.text_2": "移動の速度と方向は、供給する回転力で決まります", + "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_2": "ブロックに戻らないように設定したり、動かし始めた場所でのみブロックに戻るように設定できます", + "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_2": "...当たり判定のないブロックが破壊します", "create.ponder.mechanical_plough.text_3": "さらに、プラウは土を耕やします", "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_4": "...プレス機が自動的にアイテムを保持し、加工します", + "create.ponder.mechanical_press.text_2": "加工するアイテムは下に落としたり、プレス機の下にあるデポに置いたりしてください", + "create.ponder.mechanical_press.text_3": "アイテムがベルトで供給されると...", + "create.ponder.mechanical_press.text_4": "...プレスが自動でアイテムを止め、加工します", "create.ponder.mechanical_press_compacting.header": "メカニカルプレスでの圧縮加工", "create.ponder.mechanical_press_compacting.text_1": "鉢に入れられたアイテムをプレスし、圧縮加工できます", "create.ponder.mechanical_press_compacting.text_2": "圧縮加工には、2x2、3x3のクラフトレシピに加え、いくつかの追加レシピがあります", "create.ponder.mechanical_press_compacting.text_3": "これらのレシピの中には、ブレイズバーナーの熱を必要とするものがあります", - "create.ponder.mechanical_press_compacting.text_4": "フィルタースロットは、2つのレシピが競合する場合に使えます", + "create.ponder.mechanical_press_compacting.text_4": "フィルタースロットは、2つのレシピが競合するときに使えます", - "create.ponder.mechanical_pump_flow.header": "UNLOCALIZED: Fluid Transportation using Mechanical Pumps", - "create.ponder.mechanical_pump_flow.text_1": "UNLOCALIZED: Mechanical Pumps govern the flow of their attached pipe networks", - "create.ponder.mechanical_pump_flow.text_2": "UNLOCALIZED: When powered, their arrow indicates the direction of flow", - "create.ponder.mechanical_pump_flow.text_3": "UNLOCALIZED: The network behind is now pulling fluids...", - "create.ponder.mechanical_pump_flow.text_4": "UNLOCALIZED: ...while the network in front is transferring it outward", - "create.ponder.mechanical_pump_flow.text_5": "UNLOCALIZED: Reversing the input rotation reverses the direction of flow", - "create.ponder.mechanical_pump_flow.text_6": "UNLOCALIZED: Use a Wrench to reverse the orientation of pumps manually", + "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_5": "回転方向を逆にすると、流れの方向が逆になります", + "create.ponder.mechanical_pump_flow.text_6": "レンチを使って手動でポンプの向きを変えることもできます", - "create.ponder.mechanical_pump_speed.header": "UNLOCALIZED: Throughput of Mechanical Pumps", - "create.ponder.mechanical_pump_speed.text_1": "UNLOCALIZED: Regardless of speed, Mechanical Pumps affect pipes connected up to 16 blocks away", - "create.ponder.mechanical_pump_speed.text_2": "UNLOCALIZED: Speeding up the input rotation changes the speed of flow propagation...", - "create.ponder.mechanical_pump_speed.text_3": "UNLOCALIZED: ...aswell as how quickly fluids are transferred", - "create.ponder.mechanical_pump_speed.text_4": "UNLOCALIZED: Pumps can combine their throughputs within shared pipe networks", - "create.ponder.mechanical_pump_speed.text_5": "UNLOCALIZED: Alternating their orientation can help align their flow directions", + "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_4": "液体ネットワーク内のポンプはそれぞれ別の速度で動かすことができます", + "create.ponder.mechanical_pump_speed.text_5": "向きを交互にすることで、流れの方向を揃えることができます", "create.ponder.mechanical_saw_breaker.header": "メカニカルソーによる伐採", "create.ponder.mechanical_saw_breaker.text_1": "メカニカルソーは回転力を供給すると、目の前の木を伐採できます", @@ -2036,7 +2036,7 @@ "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.mechanical_saw_processing.text_5": "フィルターがない場合、ソーは全ての加工を順番に繰り返します", "create.ponder.millstone.header": "石臼でのアイテム加工", "create.ponder.millstone.text_1": "石臼はアイテムを粉砕加工する機械です", @@ -2053,22 +2053,22 @@ "create.ponder.piston_pole.text_1": "ポールが無いとメカニカルピストンは動きません", "create.ponder.piston_pole.text_2": "後ろに付けたポールの長さによって、伸び縮みする長さが決まります", - "create.ponder.portable_fluid_interface.header": "UNLOCALIZED: Contraption Fluid Exchange", - "create.ponder.portable_fluid_interface.text_1": "UNLOCALIZED: Fluid Tanks on moving contraptions cannot be accessed by any pipes", - "create.ponder.portable_fluid_interface.text_2": "UNLOCALIZED: This component can interact with fluid tanks without the need to stop the contraption", - "create.ponder.portable_fluid_interface.text_3": "UNLOCALIZED: Place a second one with a gap of 1 or 2 blocks inbetween", - "create.ponder.portable_fluid_interface.text_4": "UNLOCALIZED: Whenever they pass by each other, they will engage in a connection", - "create.ponder.portable_fluid_interface.text_5": "UNLOCALIZED: While engaged, the stationary interface will represent ALL Tanks on the contraption", - "create.ponder.portable_fluid_interface.text_6": "UNLOCALIZED: Fluid can now be inserted...", - "create.ponder.portable_fluid_interface.text_7": "UNLOCALIZED: ...or extracted from the contraption", - "create.ponder.portable_fluid_interface.text_8": "UNLOCALIZED: After no contents have been exchanged for a while, the contraption will continue on its way", + "create.ponder.portable_fluid_interface.header": "からくり液体交換", + "create.ponder.portable_fluid_interface.text_1": "移動しているからくりの液体タンクは、どんなパイプでも出し入れできません", + "create.ponder.portable_fluid_interface.text_2": "この機械は、からくりをブロックに戻すことなく液体を出し入れできます", + "create.ponder.portable_fluid_interface.text_3": "1~2ブロックの隙間を開けて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_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_3": "1~2ブロックの間隔をあけて、二つ目のインターフェースを設置しましょう", + "create.ponder.portable_storage_interface.text_3": "1~2ブロックの間隔をあけて、2つ目のインターフェースを設置しましょう", "create.ponder.portable_storage_interface.text_4": "両者がすれ違うたびに接続されます", - "create.ponder.portable_storage_interface.text_5": "接続されている間、設置されている方のインターフェースはからくり内全ての収納ブロックのように振る舞います", + "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_8": "しばらくの間アイテムのやり取りがないと、からくりは稼働を再開します", @@ -2080,19 +2080,19 @@ "create.ponder.powered_latch.text_1": "パワードラッチはレッドストーン信号で制御できるレバーです", "create.ponder.powered_latch.text_2": "後ろからの信号でオンに", "create.ponder.powered_latch.text_3": "側面からの信号でオフに戻ります", - "create.ponder.powered_latch.text_4": "パワードラッチは、手動でも切り替えられます", + "create.ponder.powered_latch.text_4": "パワードラッチは、手動でもオンオフできます", "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_4": "パワードトグルラッチは、手動で切り替えることもできます", + "create.ponder.powered_toggle_latch.text_4": "パワードトグルラッチは、手動でもオンオフもできます", "create.ponder.pulse_repeater.header": "パルスリピーターによる信号制御", "create.ponder.pulse_repeater.text_1": "パルスリピーターは、レッドストーン信号を短縮して1tickのパルス信号にします", "create.ponder.radial_chassis.header": "ラジアルシャーシによるブロックの取り付け", - "create.ponder.radial_chassis.text_1": "ラジアルシャーシは、同種のシャーシブロックと繋がります", + "create.ponder.radial_chassis.text_1": "ラジアルシャーシは、同じ種類のシャーシと繋がります", "create.ponder.radial_chassis.text_2": "からくり機械によって1つが動かされると、他も一緒に動きます", "create.ponder.radial_chassis.text_3": "ラジアルシャーシの側面を粘着面にできます", "create.ponder.radial_chassis.text_4": "もう一度クリックすると、他の全ての面も粘着面になります", @@ -2116,7 +2116,7 @@ "create.ponder.rope_pulley.header": "ローププーリーによる構造物の移動", "create.ponder.rope_pulley.text_1": "ローププーリーは、回転力を供給するとブロックを垂直に動かせます", - "create.ponder.rope_pulley.text_2": "移動の方向と速度は、供給される回転力に依存します", + "create.ponder.rope_pulley.text_2": "移動の方向と速度は、供給される回転力で決まります", "create.ponder.rope_pulley_attachment.header": "プーリーをからくりの一部として動かす", "create.ponder.rope_pulley_attachment.text_1": "プーリーがからくりによって動かされると...", @@ -2125,11 +2125,11 @@ "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_2": "ブロックに戻らないように設定したり、動かし始めた場所でのみブロックに戻るように設定したりできます", "create.ponder.rotation_speed_controller.header": "回転速度コントローラーの使い方", "create.ponder.rotation_speed_controller.text_1": "コントローラーは、側面の軸から上の大きな歯車に回転を伝達します", - "create.ponder.rotation_speed_controller.text_2": "側面のパネルを見てスクロールすると、伝達する回転速度を調整できます", + "create.ponder.rotation_speed_controller.text_2": "側面のパネルを見ながらスクロールすると、伝達する回転速度を調整できます", "create.ponder.sail.header": "帆による風車の組み立て", "create.ponder.sail.text_1": "帆は、風車を作るのに便利なブロックです", @@ -2143,7 +2143,7 @@ "create.ponder.sequenced_gearshift.header": "シーケンスギアシフトによる回転の制御", "create.ponder.sequenced_gearshift.text_1": "シーケンスギアシフトは、設定されたプログラムに従って回転を伝達します", - "create.ponder.sequenced_gearshift.text_2": "右クリックで設定インターフェースを開けます", + "create.ponder.sequenced_gearshift.text_2": "右クリックで設定画面を開けます", "create.ponder.sequenced_gearshift.text_3": "レッドストーン信号を受けると、設定されたプログラムを実行します", "create.ponder.sequenced_gearshift.text_4": "終了すると止まり、また次のレッドストーン信号を受けると同じように実行します", "create.ponder.sequenced_gearshift.text_5": "レッドストーンコンパレータで、現在の進捗を読み取れます", @@ -2160,36 +2160,36 @@ "create.ponder.smart_chute.text_3": "マウスホイールで搬出するスタック量を指定できます", "create.ponder.smart_chute.text_4": "レッドストーン信号で、スマートシュートを停止させることもできます", - "create.ponder.smart_pipe.header": "UNLOCALIZED: Controlling Fluid flow using Smart Pipes", - "create.ponder.smart_pipe.text_1": "UNLOCALIZED: Smart pipes can help control flows by fluid type", - "create.ponder.smart_pipe.text_2": "UNLOCALIZED: When placed directly at the source, they can specify the type of fluid to extract", - "create.ponder.smart_pipe.text_3": "UNLOCALIZED: Simply Right-Click their filter slot with any item containing the desired fluid", - "create.ponder.smart_pipe.text_4": "UNLOCALIZED: When placed further down a pipe network, smart pipes will only let matching fluids continue", + "create.ponder.smart_pipe.header": "スマートパイプによる液体制御", + "create.ponder.smart_pipe.text_1": "スマートパイプは液体の種類によって流れを制御できます", + "create.ponder.smart_pipe.text_2": "搬入元に直接つなげることで、搬出する液体の種類を指定できます", + "create.ponder.smart_pipe.text_3": "フィルタースロットを右クリックして、液体の入ったアイテムを装着して指定することもできます", + "create.ponder.smart_pipe.text_4": "スマートパイプは、パイプネットワークの搬出先に設置すると指定された液体のみを流します", "create.ponder.speedometer.header": "速度メーターによる動力情報の監視", "create.ponder.speedometer.text_1": "速度メーターは、接続された機械の現在の回転速度を表示します", "create.ponder.speedometer.text_2": "エンジニアのゴーグルを装着していると、より詳細な情報を得られます", "create.ponder.speedometer.text_3": "コンパレータは、速度メーターの測定値に応じたレッドストーン信号を出力します", - "create.ponder.spout_filling.header": "UNLOCALIZED: Filling Items using a Spout", - "create.ponder.spout_filling.text_1": "UNLOCALIZED: The Spout can fill fluid holding items provided beneath it", - "create.ponder.spout_filling.text_2": "UNLOCALIZED: The content of a Spout cannot be accessed manually", - "create.ponder.spout_filling.text_3": "UNLOCALIZED: Instead, Pipes can be used to supply it with fluids", - "create.ponder.spout_filling.text_4": "UNLOCALIZED: The Input items can be placed on a Depot under the Spout", - "create.ponder.spout_filling.text_5": "UNLOCALIZED: When items are provided on a belt...", - "create.ponder.spout_filling.text_6": "UNLOCALIZED: The Spout will hold and process them automatically", + "create.ponder.spout_filling.header": "アイテム注液口によるアイテム充填", + "create.ponder.spout_filling.text_1": "注液口は、その下に用意されたアイテムを液体で満たすことができます", + "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_6": "...注液口が自動でアイテムを止め、加工します", "create.ponder.stabilized_bearings.header": "からくりの角度の固定", - "create.ponder.stabilized_bearings.text_1": "メカニカルベアリングが動いている構造物に組み込まれているとき ...", + "create.ponder.stabilized_bearings.text_1": "メカニカルベアリングが動いている構造物に組み込まれているとき...", "create.ponder.stabilized_bearings.text_2": "...自身の角度を真っ直ぐに保とうとします", "create.ponder.stabilized_bearings.text_3": "ベアリングにブロックを取り付けると", "create.ponder.stabilized_bearings.text_4": "ベアリングに取り付けたサブのからくり全体が角度を真っ直ぐに保ったままになります", "create.ponder.sticker.header": "スティッカーを使ったブロックの付け外し", "create.ponder.sticker.text_1": "スティッカーは、ブロックの付け外しをレッドストーン信号で制御できます", - "create.ponder.sticker.text_2": "信号を受けると、状態が切り替わります", - "create.ponder.sticker.text_3": "付けているときは、からくりで動かされるとブロックも一緒に動きます", - "create.ponder.sticker.text_4": "もう一度信号を受けると、ブロックは離れます", + "create.ponder.sticker.text_2": "レッドストーン信号を受けると、状態が切り替わります", + "create.ponder.sticker.text_3": "付いているときは、からくりが動かされるとブロックも一緒に動きます", + "create.ponder.sticker.text_4": "もう一度信号を受けると、ブロックは外れます", "create.ponder.stressometer.header": "応力メーターによる動力情報の監視", "create.ponder.stressometer.text_1": "応力メーターは、接続された動力ネットワークの現在の応力許容量を表示します", @@ -2210,11 +2210,11 @@ "create.ponder.valve_handle.text_4": "スニーク状態で右クリックし続けると、時計回りに回転します", "create.ponder.valve_handle.text_5": "バルブハンドルは、染色できます", - "create.ponder.valve_pipe.header": "UNLOCALIZED: Controlling Fluid flow using Valves", - "create.ponder.valve_pipe.text_1": "UNLOCALIZED: Valve pipes help control fluids propagating through pipe networks", - "create.ponder.valve_pipe.text_2": "UNLOCALIZED: Their shaft input controls whether fluid is currently allowed through", - "create.ponder.valve_pipe.text_3": "UNLOCALIZED: Given Rotational Force in the opening direction, the valve will open up", - "create.ponder.valve_pipe.text_4": "UNLOCALIZED: It can be closed again by reversing the input rotation", + "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": "水車は隣接する水流から回転力を生み出します", diff --git a/src/generated/resources/assets/create/lang/unfinished/ko_kr.json b/src/generated/resources/assets/create/lang/unfinished/ko_kr.json index cadc40bd9..50285b8c0 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ko_kr.json +++ b/src/generated/resources/assets/create/lang/unfinished/ko_kr.json @@ -1,50 +1,50 @@ { - "_": "Missing Localizations: 925", + "_": "Missing Localizations: 250", "_": "->------------------------] Game Elements [------------------------<-", - "block.create.acacia_window": "아카시아 유리창", - "block.create.acacia_window_pane": "아카시아나무 유리판 ", - "block.create.adjustable_chain_gearshift": "벨트 변속기", - "block.create.adjustable_crate": "가변 창고", - "block.create.adjustable_pulse_repeater": "가변 펄스 리피터", - "block.create.adjustable_repeater": "가변 리피터", - "block.create.analog_lever": "아날로그 레버", - "block.create.andesite_belt_funnel": "안산암 깔때기", + "block.create.acacia_window": "아카시아나무 판자 창문", + "block.create.acacia_window_pane": "아카시아나무 판자 창문판", + "block.create.adjustable_chain_gearshift": "연쇄 변속기", + "block.create.adjustable_crate": "조절식 상자", + "block.create.adjustable_pulse_repeater": "조절식 순간작동 중계기", + "block.create.adjustable_repeater": "조절식 중계기", + "block.create.analog_lever": "조절식 레버", + "block.create.andesite_belt_funnel": "안산암 벨트 퍼널", "block.create.andesite_bricks": "안산암 벽돌", "block.create.andesite_bricks_slab": "안산암 벽돌 반 블록", "block.create.andesite_bricks_stairs": "안산암 벽돌 계단", "block.create.andesite_bricks_wall": "안산암 벽돌 담장", - "block.create.andesite_casing": "안산암 케이스", + "block.create.andesite_casing": "안산암 틀", "block.create.andesite_cobblestone": "안산암 조약돌", "block.create.andesite_cobblestone_slab": "안산암 조약돌 반 블록", "block.create.andesite_cobblestone_stairs": "안산암 조약돌 계단", "block.create.andesite_cobblestone_wall": "안산암 조약돌 담장", - "block.create.andesite_encased_shaft": "안산암 케이스를 씌운 축", - "block.create.andesite_funnel": "안산암 깔때기", + "block.create.andesite_encased_shaft": "안산암 틀을 씌운 축", + "block.create.andesite_funnel": "안산암 퍼널", "block.create.andesite_pillar": "안산암 기둥", "block.create.andesite_tunnel": "안산암 터널", "block.create.basin": "대야", - "block.create.belt": "컨베이어 벨트", - "block.create.birch_window": "자작나무 유리창", - "block.create.birch_window_pane": "자작나무 유리판", - "block.create.black_sail": "검은색 날개", + "block.create.belt": "벨트", + "block.create.birch_window": "자작나무 판자 창문", + "block.create.birch_window_pane": "자작나무 판자 창문판", + "block.create.black_sail": "검은색 캔버스", "block.create.black_seat": "검은색 좌석", "block.create.black_valve_handle": "검은색 밸브 손잡이", - "block.create.blaze_burner": "블레이즈 버너", - "block.create.blue_sail": "파란색 날개", + "block.create.blaze_burner": "블레이즈 가열기", + "block.create.blue_sail": "파란색 캔버스", "block.create.blue_seat": "파란색 좌석", "block.create.blue_valve_handle": "파란색 밸브 손잡이", - "block.create.brass_belt_funnel": "황동 깔때기", + "block.create.brass_belt_funnel": "황동 벨트 퍼널", "block.create.brass_block": "황동 블록", - "block.create.brass_casing": "황동 케이스", - "block.create.brass_encased_shaft": "황동 케이스를 씌운 축", - "block.create.brass_funnel": "황동 깔때기", + "block.create.brass_casing": "황동 틀", + "block.create.brass_encased_shaft": "황동 틀을 씌운 축", + "block.create.brass_funnel": "황동 퍼널", "block.create.brass_tunnel": "황동 터널", - "block.create.brown_sail": "갈색 날개", + "block.create.brown_sail": "갈색 캔버스", "block.create.brown_seat": "갈색 좌석", "block.create.brown_valve_handle": "갈색 밸브 손잡이", - "block.create.cart_assembler": "카트 조립기", + "block.create.cart_assembler": "수레 부착기", "block.create.chiseled_dark_scoria": "조각된 짙은 스코리아", "block.create.chiseled_dolomite": "조각된 백운암", "block.create.chiseled_gabbro": "조각된 반려암", @@ -52,32 +52,32 @@ "block.create.chiseled_scoria": "조각된 스코리아", "block.create.chiseled_weathered_limestone": "조각된 풍화된 석회암", "block.create.chocolate": "초콜릿", - "block.create.chute": "슈트", - "block.create.clockwork_bearing": "시계 베어링", - "block.create.clutch": "클러치", + "block.create.chute": "도관", + "block.create.clockwork_bearing": "시계 회전장치", + "block.create.clutch": "단절기", "block.create.cogwheel": "톱니바퀴", - "block.create.content_observer": "정보 감지기", - "block.create.controller_rail": "방향 레일", + "block.create.content_observer": "아이템 감지기", + "block.create.controller_rail": "제어 레일", "block.create.copper_backtank": "UNLOCALIZED: Copper Backtank", "block.create.copper_block": "구리 블록", - "block.create.copper_casing": "구리 케이스", + "block.create.copper_casing": "구리 틀", "block.create.copper_ore": "구리 광석", - "block.create.copper_shingles": "구리 판자", + "block.create.copper_shingles": "구리 널판", "block.create.copper_tiles": "구리 타일", "block.create.copper_valve_handle": "구리 밸브 손잡이", - "block.create.creative_crate": "크리에이티브 창고", - "block.create.creative_fluid_tank": "크리에이티브 탱크", + "block.create.creative_crate": "크리에이티브 상자", + "block.create.creative_fluid_tank": "크리에이티브 액체 탱크", "block.create.creative_motor": "크리에이티브 모터", - "block.create.crimson_window": "UNLOCALIZED: Crimson Window", - "block.create.crimson_window_pane": "UNLOCALIZED: Crimson Window Pane", - "block.create.crushing_wheel": "분쇄 휠", - "block.create.crushing_wheel_controller": "분쇄 휠 컨트롤러", - "block.create.cuckoo_clock": "뻐꾸기 시계", - "block.create.cyan_sail": "청록색 날개", + "block.create.crimson_window": "진홍빛 판자 창문", + "block.create.crimson_window_pane": "진홍빛 판자 창문판", + "block.create.crushing_wheel": "분쇄용 바퀴", + "block.create.crushing_wheel_controller": "분쇄용 바퀴 제어기", + "block.create.cuckoo_clock": "뻐꾸기시계", + "block.create.cyan_sail": "청록색 캔버스", "block.create.cyan_seat": "청록색 좌석", "block.create.cyan_valve_handle": "청록색 밸브 손잡이", - "block.create.dark_oak_window": "짙은 참나무 유리창", - "block.create.dark_oak_window_pane": "짙은 참나무 유리판", + "block.create.dark_oak_window": "짙은 참나무 판자 창문", + "block.create.dark_oak_window_pane": "짙은 참나무 판자 창문판", "block.create.dark_scoria": "짙은 스코리아", "block.create.dark_scoria_bricks": "짙은 스코리아 벽돌", "block.create.dark_scoria_bricks_slab": "짙은 스코리아 벽돌 반 블록", @@ -88,7 +88,7 @@ "block.create.dark_scoria_cobblestone_stairs": "짙은 스코리아 조약돌 계단", "block.create.dark_scoria_cobblestone_wall": "짙은 스코리아 조약돌 담장", "block.create.dark_scoria_pillar": "짙은 스코리아 기둥", - "block.create.deployer": "배포기", + "block.create.deployer": "전개장치", "block.create.depot": "아이템 거치대", "block.create.diorite_bricks": "섬록암 벽돌", "block.create.diorite_bricks_slab": "섬록암 벽돌 반 블록", @@ -109,52 +109,52 @@ "block.create.dolomite_cobblestone_stairs": "백운암 조약돌 계단", "block.create.dolomite_cobblestone_wall": "백운암 조약돌 담장", "block.create.dolomite_pillar": "백운암 기둥", - "block.create.encased_chain_drive": "케이스를 씌운 축", - "block.create.encased_fan": "선풍기", - "block.create.encased_fluid_pipe": "구리 케이스를 씌운 파이프", - "block.create.fancy_andesite_bricks": "장식된 안산암 벽돌", - "block.create.fancy_andesite_bricks_slab": "장식된 안산암 벽돌 반 블록", - "block.create.fancy_andesite_bricks_stairs": "장식된 안산암 벽돌 계단", - "block.create.fancy_andesite_bricks_wall": "장식된 안산암 벽돌 담장", - "block.create.fancy_dark_scoria_bricks": "장식된 짙은 스코리아 벽돌", - "block.create.fancy_dark_scoria_bricks_slab": "장식된 짙은 스코리아 벽돌 반 블록", - "block.create.fancy_dark_scoria_bricks_stairs": "장식된 짙은 스코리아 벽돌 계단", - "block.create.fancy_dark_scoria_bricks_wall": "장식된 짙은 스코리아 벽돌 담장", - "block.create.fancy_diorite_bricks": "장식된 섬록암 벽돌", - "block.create.fancy_diorite_bricks_slab": "장식된 섬록암 벽돌 반 블록", - "block.create.fancy_diorite_bricks_stairs": "장식된 섬록암 벽돌 계단", - "block.create.fancy_diorite_bricks_wall": "장식된 섬록암 벽돌 담장", - "block.create.fancy_dolomite_bricks": "장식된 백운암 벽돌", - "block.create.fancy_dolomite_bricks_slab": "장식된 백운암 벽돌 반 블록", - "block.create.fancy_dolomite_bricks_stairs": "장식된 백운암 벽돌 계단", - "block.create.fancy_dolomite_bricks_wall": "장식된 백운암 벽돌 담장", - "block.create.fancy_gabbro_bricks": "장식된 반려암 벽돌", - "block.create.fancy_gabbro_bricks_slab": "장식된 반려암 벽돌 반 블록", - "block.create.fancy_gabbro_bricks_stairs": "장식된 반려암 벽돌 계단", - "block.create.fancy_gabbro_bricks_wall": "장식된 반려암 벽돌 담장", - "block.create.fancy_granite_bricks": "장식된 화강암 벽돌", - "block.create.fancy_granite_bricks_slab": "장식된 화강암 벽돌 반 블록", - "block.create.fancy_granite_bricks_stairs": "장식된 화강암 벽돌 계단", - "block.create.fancy_granite_bricks_wall": "장식된 화강암 벽돌 담장", - "block.create.fancy_limestone_bricks": "장식된 석회암 벽돌", - "block.create.fancy_limestone_bricks_slab": "장식된 석회암 벽돌 반 블록", - "block.create.fancy_limestone_bricks_stairs": "장식된 석회암 벽돌 계단", - "block.create.fancy_limestone_bricks_wall": "장식된 석회암 벽돌 담장", - "block.create.fancy_scoria_bricks": "장식된 스코리아 벽돌", - "block.create.fancy_scoria_bricks_slab": "장식된 스코리아 벽돌 반 블록", - "block.create.fancy_scoria_bricks_stairs": "장식된 스코리아 벽돌 계단", - "block.create.fancy_scoria_bricks_wall": "장식된 스코리아 벽돌 담장", - "block.create.fancy_weathered_limestone_bricks": "장식된 풍화된 석회암 벽돌", - "block.create.fancy_weathered_limestone_bricks_slab": "장식된 풍화된 석회암 벽돌 반 블록", - "block.create.fancy_weathered_limestone_bricks_stairs": "장식된 풍화된 석회암 벽돌 계단", - "block.create.fancy_weathered_limestone_bricks_wall": "장식된 풍화된 석회암 벽돌 담장", - "block.create.fluid_pipe": "액체 파이프", + "block.create.encased_chain_drive": "연쇄 전달기", + "block.create.encased_fan": "공업용 선풍기", + "block.create.encased_fluid_pipe": "틀을 씌운 액체관", + "block.create.fancy_andesite_bricks": "복잡한 안산암 벽돌", + "block.create.fancy_andesite_bricks_slab": "복잡한 안산암 벽돌 반 블록", + "block.create.fancy_andesite_bricks_stairs": "복잡한 안산암 벽돌 계단", + "block.create.fancy_andesite_bricks_wall": "복잡한 안산암 벽돌 담장", + "block.create.fancy_dark_scoria_bricks": "복잡한 짙은 스코리아 벽돌", + "block.create.fancy_dark_scoria_bricks_slab": "복잡한 짙은 스코리아 벽돌 반 블록", + "block.create.fancy_dark_scoria_bricks_stairs": "복잡한 짙은 스코리아 벽돌 계단", + "block.create.fancy_dark_scoria_bricks_wall": "복잡한 짙은 스코리아 벽돌 담장", + "block.create.fancy_diorite_bricks": "복잡한 섬록암 벽돌", + "block.create.fancy_diorite_bricks_slab": "복잡한 섬록암 벽돌 반 블록", + "block.create.fancy_diorite_bricks_stairs": "복잡한 섬록암 벽돌 계단", + "block.create.fancy_diorite_bricks_wall": "복잡한 섬록암 벽돌 담장", + "block.create.fancy_dolomite_bricks": "복잡한 백운암 벽돌", + "block.create.fancy_dolomite_bricks_slab": "복잡한 백운암 벽돌 반 블록", + "block.create.fancy_dolomite_bricks_stairs": "복잡한 백운암 벽돌 계단", + "block.create.fancy_dolomite_bricks_wall": "복잡한 백운암 벽돌 담장", + "block.create.fancy_gabbro_bricks": "복잡한 반려암 벽돌", + "block.create.fancy_gabbro_bricks_slab": "복잡한 반려암 벽돌 반 블록", + "block.create.fancy_gabbro_bricks_stairs": "복잡한 반려암 벽돌 계단", + "block.create.fancy_gabbro_bricks_wall": "복잡한 반려암 벽돌 담장", + "block.create.fancy_granite_bricks": "복잡한 화강암 벽돌", + "block.create.fancy_granite_bricks_slab": "복잡한 화강암 벽돌 반 블록", + "block.create.fancy_granite_bricks_stairs": "복잡한 화강암 벽돌 계단", + "block.create.fancy_granite_bricks_wall": "복잡한 화강암 벽돌 담장", + "block.create.fancy_limestone_bricks": "복잡한 석회암 벽돌", + "block.create.fancy_limestone_bricks_slab": "복잡한 석회암 벽돌 반 블록", + "block.create.fancy_limestone_bricks_stairs": "복잡한 석회암 벽돌 계단", + "block.create.fancy_limestone_bricks_wall": "복잡한 석회암 벽돌 담장", + "block.create.fancy_scoria_bricks": "복잡한 스코리아 벽돌", + "block.create.fancy_scoria_bricks_slab": "복잡한 스코리아 벽돌 반 블록", + "block.create.fancy_scoria_bricks_stairs": "복잡한 스코리아 벽돌 계단", + "block.create.fancy_scoria_bricks_wall": "복잡한 스코리아 벽돌 담장", + "block.create.fancy_weathered_limestone_bricks": "복잡한 풍화된 석회암 벽돌", + "block.create.fancy_weathered_limestone_bricks_slab": "복잡한 풍화된 석회암 벽돌 반 블록", + "block.create.fancy_weathered_limestone_bricks_stairs": "복잡한 풍화된 석회암 벽돌 계단", + "block.create.fancy_weathered_limestone_bricks_wall": "복잡한 풍화된 석회암 벽돌 담장", + "block.create.fluid_pipe": "액체관", "block.create.fluid_tank": "액체 탱크", "block.create.fluid_valve": "액체 밸브", - "block.create.flywheel": "플라이휠", - "block.create.framed_glass": "큰 유리", - "block.create.framed_glass_pane": "큰 유리판", - "block.create.furnace_engine": "화로 엔진", + "block.create.flywheel": "축 회전바퀴", + "block.create.framed_glass": "틀 유리", + "block.create.framed_glass_pane": "틀 유리판", + "block.create.furnace_engine": "화로 원동기", "block.create.gabbro": "반려암", "block.create.gabbro_bricks": "반려암 벽돌", "block.create.gabbro_bricks_slab": "반려암 벽돌 반 블록", @@ -165,56 +165,56 @@ "block.create.gabbro_cobblestone_stairs": "반려암 조약돌 계단", "block.create.gabbro_cobblestone_wall": "반려암 조약돌 담장", "block.create.gabbro_pillar": "반려암 기둥", - "block.create.gantry_carriage": "UNLOCALIZED: Gantry Carriage", - "block.create.gantry_shaft": "UNLOCALIZED: Gantry Shaft", - "block.create.gearbox": "기어박스", - "block.create.gearshift": "기어쉬프트", - "block.create.glass_fluid_pipe": "액체 파이프", + "block.create.gantry_carriage": "다리 운반대", + "block.create.gantry_shaft": "다리 축", + "block.create.gearbox": "전환장치", + "block.create.gearshift": "전환기", + "block.create.glass_fluid_pipe": "유리 액체관", "block.create.granite_bricks": "화강암 벽돌", - "block.create.granite_bricks_slab": "화강함 벽돌 반 블록", - "block.create.granite_bricks_stairs": "화강함 벽돌 계단", - "block.create.granite_bricks_wall": "화강함 벽돌 담장", + "block.create.granite_bricks_slab": "화강암 벽돌 반 블록", + "block.create.granite_bricks_stairs": "화강암 벽돌 계단", + "block.create.granite_bricks_wall": "화강암 벽돌 담장", "block.create.granite_cobblestone": "화강암 조약돌", "block.create.granite_cobblestone_slab": "화강암 조약돌 반 블록", "block.create.granite_cobblestone_stairs": "화강암 조약돌 계단", "block.create.granite_cobblestone_wall": "화강암 조약돌 담장", "block.create.granite_pillar": "화강암 기둥", - "block.create.gray_sail": "회색 날개", + "block.create.gray_sail": "회색 캔버스", "block.create.gray_seat": "회색 좌석", "block.create.gray_valve_handle": "회색 밸브 손잡이", - "block.create.green_sail": "초록색 날개", + "block.create.green_sail": "초록색 캔버스", "block.create.green_seat": "초록색 좌석", "block.create.green_valve_handle": "초록색 밸브 손잡이", - "block.create.hand_crank": "핸드 크랭크", + "block.create.hand_crank": "자가발전용 손잡이", "block.create.haunted_bell": "UNLOCALIZED: Haunted Bell", "block.create.honey": "꿀", - "block.create.horizontal_framed_glass": "수평 유리", - "block.create.horizontal_framed_glass_pane": "수평 유리판", - "block.create.hose_pulley": "호스 도르래", - "block.create.item_drain": "아이템 배수구", - "block.create.jungle_window": "정글나무 유리창", - "block.create.jungle_window_pane": "정글나무 유리판", - "block.create.large_cogwheel": "큰 톱니바퀴", - "block.create.layered_andesite": "층이 있는 안산암", - "block.create.layered_dark_scoria": "층이 있는 짙은 스코리아", - "block.create.layered_diorite": "층이 있는 섬록암", - "block.create.layered_dolomite": "층이 있는 백운암", - "block.create.layered_gabbro": "층이 있는 반려암", - "block.create.layered_granite": "층이 있는 화강암", - "block.create.layered_limestone": "층이 있는 석회암", - "block.create.layered_scoria": "층이 있는 스코리아", - "block.create.layered_weathered_limestone": "층이 있는 풍화된 석회암", + "block.create.horizontal_framed_glass": "가로 틀 유리", + "block.create.horizontal_framed_glass_pane": "가로 틀 유리판", + "block.create.hose_pulley": "액체관 도르래", + "block.create.item_drain": "흡수통", + "block.create.jungle_window": "정글 나무 판자 창문", + "block.create.jungle_window_pane": "정글 나무 판자 창문판", + "block.create.large_cogwheel": "큰 톱니바퀴 ", + "block.create.layered_andesite": "틀 안산암", + "block.create.layered_dark_scoria": "틀 짙은 스코리아", + "block.create.layered_diorite": "틀 섬록암", + "block.create.layered_dolomite": "틀 백운암", + "block.create.layered_gabbro": "틀 반려암", + "block.create.layered_granite": "틀 화강암", + "block.create.layered_limestone": "틀 석회암", + "block.create.layered_scoria": "틀 스코리아", + "block.create.layered_weathered_limestone": "틀 풍화된 석회암", "block.create.lectern_controller": "UNLOCALIZED: Lectern Controller", - "block.create.light_blue_sail": "하늘색 날개", + "block.create.light_blue_sail": "하늘색 캔버스", "block.create.light_blue_seat": "하늘색 좌석", "block.create.light_blue_valve_handle": "하늘색 밸브 손잡이", - "block.create.light_gray_sail": "회백색 날개", + "block.create.light_gray_sail": "회백색 캔버스", "block.create.light_gray_seat": "회백색 좌석", "block.create.light_gray_valve_handle": "회백색 밸브 손잡이", - "block.create.lime_sail": "연두색 날개", + "block.create.lime_sail": "연두색 캔버스", "block.create.lime_seat": "연두색 좌석", "block.create.lime_valve_handle": "연두색 밸브 손잡이", - "block.create.limesand": "석회모래", + "block.create.limesand": "석회 가루", "block.create.limestone": "석회암", "block.create.limestone_bricks": "석회암 벽돌", "block.create.limestone_bricks_slab": "석회암 벽돌 반 블록", @@ -225,62 +225,62 @@ "block.create.limestone_cobblestone_stairs": "석회암 조약돌 계단", "block.create.limestone_cobblestone_wall": "석회암 조약돌 담장", "block.create.limestone_pillar": "석회암 기둥", - "block.create.linear_chassis": "어두운 직선 섀시", - "block.create.lit_blaze_burner": "불타는 빈 블레이즈 버너", - "block.create.magenta_sail": "자홍색 날개", + "block.create.linear_chassis": "선형 연결대", + "block.create.lit_blaze_burner": "불이 붙은 블레이즈 가열기", + "block.create.magenta_sail": "자홍색 캔버스", "block.create.magenta_seat": "자홍색 좌석", "block.create.magenta_valve_handle": "자홍색 밸브 손잡이", - "block.create.mechanical_arm": "기계 팔", - "block.create.mechanical_bearing": "베어링", - "block.create.mechanical_crafter": "기계식 조합기", - "block.create.mechanical_drill": "드릴", - "block.create.mechanical_harvester": "수확기", - "block.create.mechanical_mixer": "믹서", + "block.create.mechanical_arm": "기계식 팔", + "block.create.mechanical_bearing": "기계식 회전장치", + "block.create.mechanical_crafter": "기계식 제작기", + "block.create.mechanical_drill": "기계식 드릴", + "block.create.mechanical_harvester": "기계식 수확기", + "block.create.mechanical_mixer": "기계식 믹서기", "block.create.mechanical_piston": "기계식 피스톤", "block.create.mechanical_piston_head": "기계식 피스톤 머리", - "block.create.mechanical_plough": "쟁기", - "block.create.mechanical_press": "압착기", - "block.create.mechanical_pump": "펌프", - "block.create.mechanical_saw": "톱", + "block.create.mechanical_plough": "기계식 경작기", + "block.create.mechanical_press": "기계식 압착기", + "block.create.mechanical_pump": "기계식 펌프", + "block.create.mechanical_saw": "기계식 톱", "block.create.metal_bracket": "금속 지지대", "block.create.millstone": "맷돌", - "block.create.minecart_anchor": "광산 수레 정박기", + "block.create.minecart_anchor": "광산 수레 부착대", "block.create.mossy_andesite": "이끼 낀 안산암", "block.create.mossy_dark_scoria": "이끼 낀 짙은 스코리아", "block.create.mossy_diorite": "이끼 낀 섬록암", - "block.create.mossy_dolomite": "이끼낀 백운암", - "block.create.mossy_gabbro": "이끼낀 반려암", - "block.create.mossy_granite": "이끼 낀 화강암 벽돌", + "block.create.mossy_dolomite": "이끼 낀 백운암", + "block.create.mossy_gabbro": "이끼 낀 반려암", + "block.create.mossy_granite": "이끼 낀 화강암", "block.create.mossy_limestone": "이끼 낀 석회암", "block.create.mossy_scoria": "이끼 낀 스코리아", "block.create.mossy_weathered_limestone": "이끼 낀 풍화된 석회암", - "block.create.mysterious_cuckoo_clock": "뻐꾸기 시계?", - "block.create.natural_scoria": "자연 스코리아", - "block.create.nixie_tube": "디지털 표시증", - "block.create.nozzle": "노즐", - "block.create.oak_window": "참나무 유리창", - "block.create.oak_window_pane": "참나무 유리판", - "block.create.orange_sail": "주황색 날개", + "block.create.mysterious_cuckoo_clock": "기이한 뻐꾸기시계", + "block.create.natural_scoria": "자연적인 스코리아", + "block.create.nixie_tube": "표시등", + "block.create.nozzle": "분출구", + "block.create.oak_window": "참나무 판자 창문", + "block.create.oak_window_pane": "참나무 판자 창문판", + "block.create.orange_sail": "주황색 캔버스", "block.create.orange_seat": "주황색 좌석", "block.create.orange_valve_handle": "주황색 밸브 손잡이", - "block.create.ornate_iron_window": "장식된 철 유리창", - "block.create.ornate_iron_window_pane": "장식된 철 유리판", + "block.create.ornate_iron_window": "화려한 철제 창문", + "block.create.ornate_iron_window_pane": "화려한 철제 창문판", "block.create.overgrown_andesite": "이끼로 뒤덮힌 안산암", - "block.create.overgrown_dark_scoria": "이끼가 뒤덮힌 짙은 스코리아", + "block.create.overgrown_dark_scoria": "이끼로 뒤덮힌 짙은 스코리아", "block.create.overgrown_diorite": "이끼로 뒤덮힌 섬록암", "block.create.overgrown_dolomite": "이끼로 뒤덮힌 백운암", "block.create.overgrown_gabbro": "이끼로 뒤덮힌 반려암", - "block.create.overgrown_granite": "이끼로 뒤덮힌 화강암 벽돌", + "block.create.overgrown_granite": "이끼로 뒤덮힌 화강암", "block.create.overgrown_limestone": "이끼로 뒤덮힌 석회암", "block.create.overgrown_scoria": "이끼로 뒤덮힌 스코리아", - "block.create.overgrown_weathered_limestone": "이끼로 뒤덮힌 풍화된 석회암", + "block.create.overgrown_weathered_limestone": "이끼 풍화된 석회암", "block.create.paved_andesite": "포장된 안산암", "block.create.paved_andesite_slab": "포장된 안산암 반 블록", "block.create.paved_andesite_stairs": "포장된 안산암 계단", "block.create.paved_andesite_wall": "포장된 안산암 담장", "block.create.paved_dark_scoria": "포장된 짙은 스코리아", - "block.create.paved_dark_scoria_slab": "포장된 스코리아 반 블록", - "block.create.paved_dark_scoria_stairs": "포장된 짙은 스코리 계단", + "block.create.paved_dark_scoria_slab": "포장된 짙은 스코리아 반 블록", + "block.create.paved_dark_scoria_stairs": "포장된 짙은 스코리아 계단", "block.create.paved_dark_scoria_wall": "포장된 짙은 스코리아 담장", "block.create.paved_diorite": "포장된 섬록암", "block.create.paved_diorite_slab": "포장된 섬록암 반 블록", @@ -311,10 +311,10 @@ "block.create.paved_weathered_limestone_stairs": "포장된 풍화된 석회암 계단", "block.create.paved_weathered_limestone_wall": "포장된 풍화된 석회암 담장", "block.create.peculiar_bell": "UNLOCALIZED: Peculiar Bell", - "block.create.pink_sail": "분홍색 날개", + "block.create.pink_sail": "분홍색 캔버스", "block.create.pink_seat": "분홍색 좌석", "block.create.pink_valve_handle": "분홍색 밸브 손잡이", - "block.create.piston_extension_pole": "피스톤 연장 축", + "block.create.piston_extension_pole": "피스톤 연장대", "block.create.polished_dark_scoria": "윤나는 짙은 스코리아", "block.create.polished_dark_scoria_slab": "윤나는 짙은 스코리아 반 블록", "block.create.polished_dark_scoria_stairs": "윤나는 짙은 스코리아 계단", @@ -339,29 +339,29 @@ "block.create.polished_weathered_limestone_slab": "윤나는 풍화된 석회암 반 블록", "block.create.polished_weathered_limestone_stairs": "윤나는 풍화된 석회암 계단", "block.create.polished_weathered_limestone_wall": "윤나는 풍화된 석회암 담장", - "block.create.portable_fluid_interface": "이동식 액체 인터페이스", - "block.create.portable_storage_interface": "이동식 아이템 인터페이스", - "block.create.powered_latch": "레드스톤 걸쇠", - "block.create.powered_toggle_latch": "레드스톤 토글 걸쇠", + "block.create.portable_fluid_interface": "연결식 액체 전달기", + "block.create.portable_storage_interface": "연결식 아이템 전달기", + "block.create.powered_latch": "레드스톤 잠금기", + "block.create.powered_toggle_latch": "레버식 레드스톤 잠금기", "block.create.pulley_magnet": "도르래 자석", - "block.create.pulse_repeater": "펄스 리피터", - "block.create.purple_sail": "보라색 날개", + "block.create.pulse_repeater": "순간작동 중계기", + "block.create.purple_sail": "보라색 캔버스", "block.create.purple_seat": "보라색 좌석", "block.create.purple_valve_handle": "보라색 밸브 손잡이", - "block.create.radial_chassis": "원형 섀시", - "block.create.red_sail": "빨간색 날개", + "block.create.radial_chassis": "반경 연결대", + "block.create.red_sail": "빨간색 캔버스", "block.create.red_seat": "빨간색 좌석", "block.create.red_valve_handle": "빨간색 밸브 손잡이", - "block.create.redstone_contact": "동형 감지기", - "block.create.redstone_link": "레드스톤 링크", - "block.create.refined_radiance_casing": "빛나는 케이스", - "block.create.reinforced_rail": "강화된 레일", - "block.create.rope": "밧줄", + "block.create.redstone_contact": "레드스톤 접촉기", + "block.create.redstone_link": "레드스톤 연동 장치", + "block.create.refined_radiance_casing": "빛의 틀", + "block.create.reinforced_rail": "보강된 레일", + "block.create.rope": "도르래 밧줄", "block.create.rope_pulley": "밧줄 도르래", - "block.create.rotation_speed_controller": "회전 속도 컨트롤러", - "block.create.sail_frame": "풍차 날개 프레임", - "block.create.schematic_table": "청사진 테이블", - "block.create.schematicannon": "청사진 대포", + "block.create.rotation_speed_controller": "회전 속도 제어기", + "block.create.sail_frame": "캔버스 틀", + "block.create.schematic_table": "설계도 탁자", + "block.create.schematicannon": "설계대포", "block.create.scoria": "스코리아", "block.create.scoria_bricks": "스코리아 벽돌", "block.create.scoria_bricks_slab": "스코리아 벽돌 반 블록", @@ -372,28 +372,28 @@ "block.create.scoria_cobblestone_stairs": "스코리아 조약돌 계단", "block.create.scoria_cobblestone_wall": "스코리아 조약돌 담장", "block.create.scoria_pillar": "스코리아 기둥", - "block.create.secondary_linear_chassis": "밝은 직선 섀시", - "block.create.sequenced_gearshift": "순서 기어쉬프트", - "block.create.shadow_steel_casing": "그림자 케이스", + "block.create.secondary_linear_chassis": "이차 선형 연결대", + "block.create.sequenced_gearshift": "순서화 전환기", + "block.create.shadow_steel_casing": "어둠의 틀", "block.create.shaft": "축", - "block.create.smart_chute": "UNLOCALIZED: Smart Chute", - "block.create.smart_fluid_pipe": "스마트 액체 파이프", - "block.create.speedometer": "속도 계측기", - "block.create.spout": "수도꼭지", - "block.create.spruce_window": "가문비나무 유리창", - "block.create.spruce_window_pane": "가문비나무 유리판", - "block.create.sticker": "UNLOCALIZED: Sticker", - "block.create.sticky_mechanical_piston": "끈끈이 기계식 피스톤", - "block.create.stockpile_switch": "수량 스위치", - "block.create.stressometer": "피로도 계측기", - "block.create.tiled_glass": "타일 유리", - "block.create.tiled_glass_pane": "타일 유리판", - "block.create.turntable": "돌림판", - "block.create.vertical_framed_glass": "수직 유리", - "block.create.vertical_framed_glass_pane": "수직 유리판", - "block.create.warped_window": "UNLOCALIZED: Warped Window", - "block.create.warped_window_pane": "UNLOCALIZED: Warped Window Pane", - "block.create.water_wheel": "물레방아", + "block.create.smart_chute": "지능형 도관", + "block.create.smart_fluid_pipe": "지능형 액체관", + "block.create.speedometer": "속도계", + "block.create.spout": "주입기", + "block.create.spruce_window": "가문비나무 판자 창문", + "block.create.spruce_window_pane": "가문비나무 판자 창문판", + "block.create.sticker": "부착기", + "block.create.sticky_mechanical_piston": "기계식 끈끈이 피스톤", + "block.create.stockpile_switch": "물량 감지기", + "block.create.stressometer": "부하계", + "block.create.tiled_glass": "칸 유리", + "block.create.tiled_glass_pane": "칸 유리판", + "block.create.turntable": "회전대", + "block.create.vertical_framed_glass": "세로 틀 유리", + "block.create.vertical_framed_glass_pane": "세로 틀 유리판", + "block.create.warped_window": "뒤틀린 판자 창문", + "block.create.warped_window_pane": "뒤틀린 판자 창문판", + "block.create.water_wheel": "물레바퀴", "block.create.weathered_limestone": "풍화된 석회암", "block.create.weathered_limestone_bricks": "풍화된 석회암 벽돌", "block.create.weathered_limestone_bricks_slab": "풍화된 석회암 벽돌 반 블록", @@ -404,287 +404,287 @@ "block.create.weathered_limestone_cobblestone_stairs": "풍화된 석회암 조약돌 계단", "block.create.weathered_limestone_cobblestone_wall": "풍화된 석회암 조약돌 담장", "block.create.weathered_limestone_pillar": "풍화된 석회암 기둥", - "block.create.weighted_ejector": "UNLOCALIZED: Weighted Ejector", - "block.create.white_sail": "하얀색 날개", + "block.create.weighted_ejector": "발사대", + "block.create.white_sail": "하얀색 캔버스", "block.create.white_seat": "하얀색 좌석", "block.create.white_valve_handle": "하얀색 밸브 손잡이", - "block.create.windmill_bearing": "풍차 베어링", + "block.create.windmill_bearing": "풍차 회전장치", "block.create.wooden_bracket": "나무 지지대", - "block.create.yellow_sail": "노란색 날개", + "block.create.yellow_sail": "노란색 캔버스", "block.create.yellow_seat": "노란색 좌석", "block.create.yellow_valve_handle": "노란색 밸브 손잡이", - "block.create.zinc_block": "아연 블", + "block.create.zinc_block": "아연 블록", "block.create.zinc_ore": "아연 광석", "entity.create.contraption": "장치", "entity.create.crafting_blueprint": "UNLOCALIZED: Crafting Blueprint", - "entity.create.gantry_contraption": "UNLOCALIZED: Gantry Contraption", + "entity.create.gantry_contraption": "다리 장치", "entity.create.potato_projectile": "UNLOCALIZED: Potato Projectile", "entity.create.seat": "좌석", "entity.create.stationary_contraption": "고정된 장치", "entity.create.super_glue": "강력 접착제", "fluid.create.milk": "우유", - "fluid.create.potion": "포션", + "fluid.create.potion": "물약", "fluid.create.tea": "건축가의 차", "item.create.andesite_alloy": "안산암 합금", - "item.create.attribute_filter": "속성 필터 틀", + "item.create.attribute_filter": "특성 필터", "item.create.bar_of_chocolate": "초콜릿 바", - "item.create.belt_connector": "기계식 벨트", + "item.create.belt_connector": "벨트", "item.create.blaze_cake": "블레이즈 케이크", - "item.create.blaze_cake_base": "블레이즈 케이크 틀", - "item.create.brass_hand": "황동 손", - "item.create.brass_ingot": "황동 주괴", + "item.create.blaze_cake_base": "블레이즈 케이크 빵", + "item.create.brass_hand": "황동제 손", + "item.create.brass_ingot": "황동괴", "item.create.brass_nugget": "황동 조각", - "item.create.brass_sheet": "황동 판", + "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": "UNLOCALIZED: Chocolate Glazed Berries", - "item.create.chromatic_compound": "색채 혼합물", - "item.create.cinder_flour": "잿가루", + "item.create.chocolate_glazed_berries": "초콜릿 발린 열매", + "item.create.chromatic_compound": "혼돈의 혼합물", + "item.create.cinder_flour": "붉은 잿가루", "item.create.copper_backtank": "UNLOCALIZED: Copper Backtank", - "item.create.copper_ingot": "구리 주괴", + "item.create.copper_ingot": "구리괴", "item.create.copper_nugget": "구리 조각", - "item.create.copper_sheet": "구리 판", - "item.create.crafter_slot_cover": "조합기 슬롯 덮개", + "item.create.copper_sheet": "구리판", + "item.create.crafter_slot_cover": "제작 슬롯 덮개", "item.create.crafting_blueprint": "UNLOCALIZED: Crafting Blueprint", - "item.create.crushed_aluminum_ore": "UNLOCALIZED: Crushed Aluminum Ore", + "item.create.crushed_aluminum_ore": "분쇄된 알루미늄 광석", "item.create.crushed_brass": "분쇄된 황동", "item.create.crushed_copper_ore": "분쇄된 구리 광석", - "item.create.crushed_gold_ore": "분쇄된 금 광석", - "item.create.crushed_iron_ore": "분쇄된 철 광석", - "item.create.crushed_lead_ore": "UNLOCALIZED: Crushed Lead Ore", - "item.create.crushed_nickel_ore": "UNLOCALIZED: Crushed Nickel Ore", - "item.create.crushed_osmium_ore": "UNLOCALIZED: Crushed Osmium Ore", - "item.create.crushed_platinum_ore": "UNLOCALIZED: Crushed Platinum Ore", - "item.create.crushed_quicksilver_ore": "UNLOCALIZED: Crushed Quicksilver Ore", - "item.create.crushed_silver_ore": "UNLOCALIZED: Crushed Silver Ore", - "item.create.crushed_tin_ore": "UNLOCALIZED: Crushed Tin Ore", - "item.create.crushed_uranium_ore": "UNLOCALIZED: Crushed Uranium Ore", + "item.create.crushed_gold_ore": "분쇄된 금광석", + "item.create.crushed_iron_ore": "분쇄된 철광석", + "item.create.crushed_lead_ore": "분쇄된 납 광석", + "item.create.crushed_nickel_ore": "분쇄된 니켈 광석", + "item.create.crushed_osmium_ore": "분쇄된 오스뮴 광석", + "item.create.crushed_platinum_ore": "분쇄된 백금 광석", + "item.create.crushed_quicksilver_ore": "분쇄된 수은 광석", + "item.create.crushed_silver_ore": "분쇄된 은광석", + "item.create.crushed_tin_ore": "분쇄된 주석 광석", + "item.create.crushed_uranium_ore": "분쇄된 우라늄 광석", "item.create.crushed_zinc_ore": "분쇄된 아연 광석", "item.create.diving_boots": "UNLOCALIZED: Diving Boots", "item.create.diving_helmet": "UNLOCALIZED: Diving Helmet", "item.create.dough": "반죽", - "item.create.electron_tube": "전지 튜브", - "item.create.empty_blaze_burner": "빈 블레이즈 버너", - "item.create.empty_schematic": "빈 청사진", - "item.create.extendo_grip": "외장형 연장 팔", - "item.create.filter": "필터 틀", - "item.create.furnace_minecart_contraption": "화로가 실린 광산 수레 장치", - "item.create.goggles": "엔지니어의 고글", - "item.create.golden_sheet": "금 판", - "item.create.handheld_worldshaper": "휴대용 세계편집기", + "item.create.electron_tube": "진공관", + "item.create.empty_blaze_burner": "비어있는 블레이즈 가열기", + "item.create.empty_schematic": "비어있는 설계도", + "item.create.extendo_grip": "연장용 팔", + "item.create.filter": "필터", + "item.create.furnace_minecart_contraption": "장치를 붙인 화로가 실린 광산 수레", + "item.create.goggles": "공학자의 안경", + "item.create.golden_sheet": "금판", + "item.create.handheld_worldshaper": "휴대용 세계성형기", "item.create.honey_bucket": "꿀 양동이", - "item.create.honeyed_apple": "UNLOCALIZED: Honeyed Apple", + "item.create.honeyed_apple": "꿀사과", "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.iron_sheet": "철 판", + "item.create.iron_sheet": "철판", "item.create.linked_controller": "UNLOCALIZED: Linked Controller", - "item.create.minecart_contraption": "광산 수레 장치", - "item.create.minecart_coupling": "광산 수레 커플링", - "item.create.polished_rose_quartz": "윤나는 장밋빛 석영", + "item.create.minecart_contraption": "장치를 붙인 광산 수레", + "item.create.minecart_coupling": "광산 수레 이음쇠", + "item.create.polished_rose_quartz": "갈아낸 붉은 석영", "item.create.potato_cannon": "UNLOCALIZED: Potato Cannon", "item.create.powdered_obsidian": "흑요석 가루", "item.create.precision_mechanism": "UNLOCALIZED: Precision Mechanism", - "item.create.propeller": "프로펠러", - "item.create.red_sand_paper": "붉은 사포", - "item.create.refined_radiance": "정제된 광채", - "item.create.rose_quartz": "장밋빛 석영", + "item.create.propeller": "날개", + "item.create.red_sand_paper": "붉은 사포 ", + "item.create.refined_radiance": "섬세한 섬광", + "item.create.rose_quartz": "붉은 석영", "item.create.sand_paper": "사포", - "item.create.schematic": "청사진", - "item.create.schematic_and_quill": "청사진과 깃펜", - "item.create.shadow_steel": "그림자 강철", + "item.create.schematic": "설계도", + "item.create.schematic_and_quill": "설계도와 깃펜", + "item.create.shadow_steel": "그림자 금속", "item.create.super_glue": "강력 접착제", - "item.create.sweet_roll": "UNLOCALIZED: Sweet Roll", + "item.create.sweet_roll": "스위트롤", "item.create.tree_fertilizer": "나무 비료", - "item.create.vertical_gearbox": "수직 기어박스", + "item.create.vertical_gearbox": "세로 전환장치", "item.create.wand_of_symmetry": "대칭의 지팡이", "item.create.wheat_flour": "밀가루", - "item.create.whisk": "혼합기", - "item.create.wrench": "렌치", - "item.create.zinc_ingot": "아연 주괴", + "item.create.whisk": "거품기", + "item.create.wrench": "스패너", + "item.create.zinc_ingot": "아연괴", "item.create.zinc_nugget": "아연 조각", "_": "->------------------------] Advancements [------------------------<-", - "advancement.create.root": "Create모드에 어서오세요", - "advancement.create.root.desc": "멋진 장치들을 만들 시간입니다!", - "advancement.create.andesite_alloy": "합금..?", - "advancement.create.andesite_alloy.desc": "암석으로도 합금을 만들 수 있나요?", - "advancement.create.its_alive": "살아 움직이는", - "advancement.create.its_alive.desc": "당신의 첫 장치가 움직이는 것을 보세요.", - "advancement.create.shifting_gears": "기어 변환", - "advancement.create.shifting_gears.desc": "크기가 다른 톱니바퀴를 연결하여 장치의 속도를 바꿀 수 있습니다.", - "advancement.create.overstressed": "과부화", - "advancement.create.overstressed.desc": "직접 피로도의 한계를 경험해보세요.", - "advancement.create.belt": "켈프 드라이브", - "advancement.create.belt.desc": "두 축에 컨베이어 벨트를 이으세요.", + "advancement.create.root": "크리에이트", + "advancement.create.root.desc": "굉장한 장치들을 만들어볼 시간입니다!", + "advancement.create.andesite_alloy": "특이한 작명센스", + "advancement.create.andesite_alloy.desc": "크리에이트에는 이상한 이름을 가진 재료들이 많습니다. 안산암 합금도 그중 하나이지요.", + "advancement.create.its_alive": "움직인다!", + "advancement.create.its_alive.desc": "동적 장치를 회전하게 만드세요.", + "advancement.create.shifting_gears": "톱니바퀴 변속", + "advancement.create.shifting_gears.desc": "작은 톱니바퀴에 큰 톱니바퀴를 연결하고 회전하게 만드세요. 크기가 다른 톱니바퀴끼리 연결하면, 장치의 속도가 변경됩니다.", + "advancement.create.overstressed": "과부하", + "advancement.create.overstressed.desc": "부하의 한계를 경험하세요.", + "advancement.create.belt": "켈프 벨트", + "advancement.create.belt.desc": "축 2개에 벨트를 연결하세요.", "advancement.create.tunnel": "엄폐!", - "advancement.create.tunnel.desc": "터널을 이용해 벨트를 꾸며보세요.", - "advancement.create.splitter_tunnel": "분할 정복 알고리즘", - "advancement.create.splitter_tunnel.desc": "여러 황동 터널을 이용하여 분리기를 만드세요.", - "advancement.create.chute": "쏟아져 내려와", - "advancement.create.chute.desc": "수직 벨트역할을 하는 슈트를 설치하세요.", - "advancement.create.upward_chute": "공중 납치", - "advancement.create.upward_chute.desc": "아이템이 바람을 받은 슈트안에서 날아가는 것을 보세요.", - "advancement.create.belt_funnel": "펄럭거리는 깔기", - "advancement.create.belt_funnel.desc": "깔때기를 벨트나 아이템 거치대에 설치하여 특별한 모양을 만들어 보세요.", - "advancement.create.belt_funnel_kiss": "깔때기는 어떻게 태어나?", - "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_water": "축축한 세척", - "advancement.create.fan_water.desc": "아이템을 씻는 바람을 느껴보세요.", - "advancement.create.fan_smoke": "기계 풀무", - "advancement.create.fan_smoke.desc": "아이템을 굽는 바람을 느껴보세요.", - "advancement.create.wrench": "곡괭이여 잘 있거라", - "advancement.create.wrench.desc": "당신의 장치 설계를 도와줄 렌치를 만드세요.", - "advancement.create.goggles": "피로돋보기", - "advancement.create.goggles.desc": "장치에 대한 운동 정보를 가져다 줄 고글을 만드세요.", - "advancement.create.speedometer": "근데 얼마나 빨라?", - "advancement.create.speedometer.desc": "속도 계측기를 가동하세요. 고글을 통해 수치가 얼마나 되는지 보세요.", - "advancement.create.stressometer": "근데 얼마나 피로해?", - "advancement.create.stressometer.desc": "피로도 계측기를 가동하세요. 고글을 통해 수치가 얼마나 되는지 보세요.", - "advancement.create.aesthetics": "짠! 예술!", - "advancement.create.aesthetics.desc": "축, 파이프, 톱니바퀴에 지지대를 설치하세요.", - "advancement.create.reinforced": "짠! 강화!", - "advancement.create.reinforced.desc": "축, 파이프, 벨트에 적절한 케이스를 씌우세요.", - "advancement.create.water_wheel": "수력 동력화", - "advancement.create.water_wheel.desc": "물레방아를 설치하고 회전하게 만드세요!", - "advancement.create.chocolate_wheel": "초콜릿방아", - "advancement.create.chocolate_wheel.desc": "녹은 초콜릿으로 물레방아를 돌리세요.", - "advancement.create.lava_wheel": "불레방아", - "advancement.create.lava_wheel.desc": "이건 일어나지 않았어야 하는데...", - "advancement.create.cuckoo": "잘자...", - "advancement.create.cuckoo.desc": "뻐꾸기 시계가 잘 시간을 알리는 것을 관찰하세요.", - "advancement.create.millstone": "나만의 작은 분쇄기", - "advancement.create.millstone.desc": "멧돌을 설치하고 가동시키세요.", - "advancement.create.windmill": "선선한 바람", - "advancement.create.windmill.desc": "풍차 베어링을 작동시키세요.", - "advancement.create.maxed_windmill": "강한 바람", - "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": "'깡!'", - "advancement.create.press.desc": "프레스를 만들고 금속 판을 만들어보세요.", - "advancement.create.polished_rose_quartz": "장밋빛 다이아몬드", - "advancement.create.polished_rose_quartz.desc": "장밋빛 석영을 투명해지도록 열심히 사포질하세요.", - "advancement.create.electron_tube": "삐빅-", - "advancement.create.electron_tube.desc": "전지 튜브를 만드세요. 발전된 장치들에 쓰입니다.", - "advancement.create.mechanical_saw": "벌목기 가동", - "advancement.create.mechanical_saw.desc": "톱을 설치하고 가동시키세요.", - "advancement.create.basin": "대야 시스템", + "advancement.create.tunnel.desc": "벨트를 이용해 터널을 장식하세요.", + "advancement.create.splitter_tunnel": "분할 정복", + "advancement.create.splitter_tunnel.desc": "황동 터널을 일렬로 설치하여 아이템을 나누세요.", + "advancement.create.chute": "아래로 떨어지는", + "advancement.create.chute.desc": "세로로 된 벨트의 역할을 하는 도관을 설치하세요.", + "advancement.create.upward_chute": "바람 납치", + "advancement.create.upward_chute.desc": "도관 속 던진 아이템이 선풍기에 의해 올라가는 것을 관찰하세요.", + "advancement.create.belt_funnel": "퍼널 공정", + "advancement.create.belt_funnel.desc": "벨트나 아이템 거치대 위에 벽에다가 퍼널을 설치하여 특별한 유형의 퍼널을 만드세요.", + "advancement.create.belt_funnel_kiss": "퍼널은 어떻게 태어나?", + "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_water": "세밀한 세척", + "advancement.create.fan_water.desc": "아이템을 세척하는 바람을 느끼세요.", + "advancement.create.fan_smoke": "기계식 풍구", + "advancement.create.fan_smoke.desc": "아이템을 훈연하는 바람을 느끼세요.", + "advancement.create.wrench": "간편한 설정", + "advancement.create.wrench.desc": "장치를 쉽게 설정할 수 있는 스패너를 만드세요.", + "advancement.create.goggles": "부하 확인", + "advancement.create.goggles.desc": "장치의 동적 정보를 쉽게 확인할 수 있는 공학자의 안경을 만드세요.", + "advancement.create.speedometer": "속도를 얼마나 정확하게 측정해?", + "advancement.create.speedometer.desc": "속도계를 설치하고 동력을 공급하세요. 공학자의 안경을 쓰고 관찰하면 정확한 값을 알 수 있습니다.", + "advancement.create.stressometer": "부하를 얼마나 정확하게 측정해?", + "advancement.create.stressometer.desc": "부하계를 설치하고 동력을 공급하세요. 공학자의 안경을 쓰고 관찰하면 정확한 값을 알 수 있습니다.", + "advancement.create.aesthetics": "미적 감각!", + "advancement.create.aesthetics.desc": "축과 액체관, 톱니바퀴에다 지지대를 설치하세요.", + "advancement.create.reinforced": "튼튼 보강!", + "advancement.create.reinforced.desc": "축과 액체관, 벨트에다 어울리는 틀을 씌우세요.", + "advancement.create.water_wheel": "수력 활용", + "advancement.create.water_wheel.desc": "물레바퀴를 설치하고 회전하게 만드세요!", + "advancement.create.chocolate_wheel": "달콤한 동력", + "advancement.create.chocolate_wheel.desc": "물레바퀴를 녹은 초콜릿으로 회전하게 만드세요!.", + "advancement.create.lava_wheel": "불레바퀴", + "advancement.create.lava_wheel.desc": "물레바퀴를 용암으로 회전하게 만드세ㅇ... 어? 작동하면 안 되는데...", + "advancement.create.cuckoo": "벌써 이렇게나 시간이 지났어?", + "advancement.create.cuckoo.desc": "밤을 알리고 있는 뻐꾸기시계를 관찰하세요.", + "advancement.create.millstone": "작은 분쇄기", + "advancement.create.millstone.desc": "맷돌을 설치하고 동력을 공급하세요.", + "advancement.create.windmill": "산들바람", + "advancement.create.windmill.desc": "풍차를 가동하세요.", + "advancement.create.maxed_windmill": "거센바람", + "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": "눌러! 쾅!", + "advancement.create.press.desc": "기계식 압착기에 동력을 공급하여 재료를 판으로 만드세요.", + "advancement.create.polished_rose_quartz": "적색 다이아몬드", + "advancement.create.polished_rose_quartz.desc": "사포를 사용하여 붉은 석영을 투명해질 때까지 가세요.", + "advancement.create.electron_tube": "삐뽀삐뽀!", + "advancement.create.electron_tube.desc": "진공관을 만드세요. 진공관은 덜 원시적인 기계에 쓰입니다.", + "advancement.create.mechanical_saw": "회전하는 벌목기", + "advancement.create.mechanical_saw.desc": "기계식 톱을 설치하고 동력을 공급하세요.", + "advancement.create.basin": "커다란 대야", "advancement.create.basin.desc": "대야를 설치하고 아이템을 던져보세요.", - "advancement.create.mixer": "섞고 돌리고 섞고", - "advancement.create.mixer.desc": "대야 위에 믹서를 설치하고, 가동시켜 재료를 만드세요.", - "advancement.create.blaze_burner": "살아있는 불", - "advancement.create.blaze_burner.desc": "블레이즈 버너를 얻으세요.", - "advancement.create.compact": "자동 압축", - "advancement.create.compact.desc": "대야와 압착기를 이용하서 아이템을 섞어보세요.", - "advancement.create.brass": "진짜 합금", - "advancement.create.brass.desc": "구리와 아연을 가지고 황동을 만드세요.", + "advancement.create.mixer": "섞어!", + "advancement.create.mixer.desc": "기계식 믹서기를 대야 위에 설치하고, 동력을 공급하여 재료들을 섞으세요.", + "advancement.create.blaze_burner": "살아있는 난로", + "advancement.create.blaze_burner.desc": "블레이즈 가열기를 얻으세요.", + "advancement.create.compact": "기계식 압축", + "advancement.create.compact.desc": "대야에 있는 작은 재료들을 압축하세요.", + "advancement.create.brass": "황금빛 합금", + "advancement.create.brass.desc": "분쇄된 구리와 분쇄된 아연으로 황동을 만드세요.", "advancement.create.brass_casing": "황동기 시대", - "advancement.create.brass_casing.desc": "새롭게 얻은 황동과 나무를 가지고 업그레이드된 케이스를 만드세요.", - "advancement.create.copper_casing": "구리 시대", - "advancement.create.copper_casing.desc": "구리 판을 이용해 구리 케이스를 만드세요.", - "advancement.create.spout": "쪼르록", - "advancement.create.spout.desc": "수도꼭지가 아이템에 액체를 채우는 것을 보세요.", - "advancement.create.spout_potion": "대규모 양조", - "advancement.create.spout_potion.desc": "수도꼭지가 병에 포션을 채우는 것을 보세요.", - "advancement.create.chocolate": "상상의 세계", - "advancement.create.chocolate.desc": "양동이에 녹은 초콜릿을 채우세요.", - "advancement.create.item_drain": "회전 배수", - "advancement.create.item_drain.desc": "아이템 배수구가 액체를 비우는 것을 보세요.", - "advancement.create.chained_item_drain": "구른다!", - "advancement.create.chained_item_drain.desc": "아이템이 여러 배수구 위를 굴러가는 것을 보세요.", + "advancement.create.brass_casing.desc": "새로 얻은 황동과 나무를 사용하여 고급 틀을 만드세요.", + "advancement.create.copper_casing": "구리기 시대", + "advancement.create.copper_casing.desc": "구리판과 나무를 사용하여 구리 틀을 만드세요.", + "advancement.create.spout": "쪼르륵", + "advancement.create.spout.desc": "주입기를 사용하여 아이템에 액체를 채우세요.", + "advancement.create.spout_potion": "양조장", + "advancement.create.spout_potion.desc": "주입기를 사용하여 유리병에 물약을 채우세요.", + "advancement.create.chocolate": "상상 속 세계", + "advancement.create.chocolate.desc": "녹은 초콜릿이 담긴 양동이를 얻으세요.", + "advancement.create.item_drain": "아래로 쏟아지는", + "advancement.create.item_drain.desc": "흡수통이 액체가 담긴 아이템을 흡수하는 것을 관찰하세요.", + "advancement.create.chained_item_drain": "굴러!", + "advancement.create.chained_item_drain.desc": "연결된 여러 개의 흡수통 위에서 구르는 아이템을 관찰하세요.", "advancement.create.glass_pipe": "액체 엿보기", - "advancement.create.glass_pipe.desc": "액체가 창이 달린 파이프를 지나는 것을 보세요. 직선 파이프에 렌치로 우클릭하면 창문이 생깁니다.", - "advancement.create.pipe_collision": "액체를 만나게하지 마세요!", - "advancement.create.pipe_collision.desc": "파이프 안에서 두 액체를 만나게 하세요.", - "advancement.create.pipe_spill": "누출 사고", - "advancement.create.pipe_spill.desc": "파이프 끝을 열어 액체가 밖으로 나오는 것을 보세요.", - "advancement.create.hose_pulley": "공업 펌프", - "advancement.create.hose_pulley.desc": "호스 도르래를 사용하여 액체를 채우거나 빨아들이세요.", - "advancement.create.infinite_water": "바다를 흡수하다", - "advancement.create.infinite_water.desc": "무한으로 인식되는 물 웅덩이에서 물을 끌어올리세요.", - "advancement.create.infinite_lava": "세계의 핵을 흡수하다", - "advancement.create.infinite_lava.desc": "무한으로 인식되는 용암 웅덩이에서 용암을 끌어올리세요.", - "advancement.create.infinite_chocolate": "상상 속에 잠기다", - "advancement.create.infinite_chocolate.desc": "무한으로 인식되는 초콜릿 웅덩이에서 초콜릿을 끌어올리세요..", + "advancement.create.glass_pipe.desc": "액체가 유리창 액체관을 통해 전송되는 것을 관찰하세요. 곧은 액체관에 스패너를 사용하면 유리창 액체관이 됩니다.", + "advancement.create.pipe_collision": "그 액체를 섞지 마오", + "advancement.create.pipe_collision.desc": "액체관에서 두 가지 액체가 만나는 것을 관찰하세요.", + "advancement.create.pipe_spill": "물 샌다!", + "advancement.create.pipe_spill.desc": "액체관의 구멍에서 액체를 흡수하거나, 배출하는 것을 관찰하세요.", + "advancement.create.hose_pulley": "누출 사고", + "advancement.create.hose_pulley.desc": "액체관 도르래가 호스를 내려 액체를 흡수하거나, 배출하는 것을 관찰하세요.", + "advancement.create.infinite_water": "바다 흡수", + "advancement.create.infinite_water.desc": "무한하다고 간주되는 거대한 수역을 흡수하세요.", + "advancement.create.infinite_lava": "외핵 흡수", + "advancement.create.infinite_lava.desc": "무한하다고 간주되는 거대한 용암 바다를 흡수하세요.", + "advancement.create.infinite_chocolate": "상상 속으로!", + "advancement.create.infinite_chocolate.desc": "무한하다고 간주되는 거대한 초콜릿 퐁듀를 흡수하세요.", "advancement.create.crafter": "자동 조합", - "advancement.create.crafter.desc": "기계식 조합기를 설치하고 가동시키세요.", - "advancement.create.clockwork_bearing": "시계 제작", - "advancement.create.clockwork_bearing.desc": "시계 베어링에 구조물을 달고 작동시키세요.", - "advancement.create.nixie_tube": "스타일있게 표시하기", - "advancement.create.nixie_tube.desc": "디지털 표시등을 얻고 설치하세요.", - "advancement.create.deployer": "찌르고, 설치하고, 공격!", - "advancement.create.deployer.desc": "당신의 분신, 배포기를 설치하고 가동시키세요.", - "advancement.create.speed_controller": "엔지니어들이 이 장치를 싫어합니다", - "advancement.create.speed_controller.desc": "궁극의 회전속도 변경장치, 회전 속도 컨트롤러를 설치하세요.", + "advancement.create.crafter.desc": "기계식 제작기를 설치하고 동력을 공급하세요.", + "advancement.create.clockwork_bearing": "시계장치", + "advancement.create.clockwork_bearing.desc": "시계 회전장치를 가동하세요.", + "advancement.create.nixie_tube": "스타일의 표시", + "advancement.create.nixie_tube.desc": "표시등을 설치하세요.", + "advancement.create.deployer": "만들고, 설치하고, 공격!", + "advancement.create.deployer.desc": "전개장치를 설치하고 동력을 공급하세요. 사람의 손을 완벽하게 본뜬 장치입니다.", + "advancement.create.speed_controller": "마음대로", + "advancement.create.speed_controller.desc": "궁극적인 장치, 회전 속도 제어기를 설치하세요.", "advancement.create.flywheel": "공장의 심장", - "advancement.create.flywheel.desc": "화로엔진에 플라이휠을 연결하세요.", - "advancement.create.overstress_flywheel": "정말 높은 피로", - "advancement.create.overstress_flywheel.desc": "화로 엔진을 과부하하세요.", + "advancement.create.flywheel.desc": "원동기를 회전바퀴에 성공적으로 연결하세요.", + "advancement.create.overstress_flywheel": "엄청난 부하", + "advancement.create.overstress_flywheel.desc": "화로 원동기를 과부하되게 만드세요", "advancement.create.precision_mechanism": "UNLOCALIZED: Complex Curiosities", "advancement.create.precision_mechanism.desc": "UNLOCALIZED: Assemble a Precision Mechanism.", - "advancement.create.mechanical_arm": "할일이 많아!", - "advancement.create.mechanical_arm.desc": "기계 팔을 조합하고, 입력부와 출력부를 정하고, 설치한 다음 돌리세요. 그리고 그것이 작동하는 것을 보세요.", - "advancement.create.musical_arm": "볼륨 최대로!", - "advancement.create.musical_arm.desc": "기계 팔이 주크박스를 작동시키는 것을 보세요.", - "advancement.create.arm_many_targets": "정리를 할 수 있는 정도의 능력", - "advancement.create.arm_many_targets.desc": "기계 팔에 10개 이상의 출력부를 설정하세요.", - "advancement.create.arm_blaze_burner": "연료를 줄 수 있는 정도의 능력", - "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.chromatic_compound": "양극성 재료", - "advancement.create.chromatic_compound.desc": "색채 혼합물를 만드세요.", - "advancement.create.shadow_steel": "공허를 받아들이다", - "advancement.create.shadow_steel.desc": "무의 금속, 그림자 강철을 생성하세요.", - "advancement.create.refined_radiance": "빛으로 제련되다", - "advancement.create.refined_radiance.desc": "강력한 색채 물질, 정제된 빛을 생성하세요.", - "advancement.create.chromatic_age": "양극 시대", - "advancement.create.chromatic_age.desc": "빛과 어둠의 케이스를 제작하세요.", - "advancement.create.wand_of_symmetry": "빛나는 건축", + "advancement.create.mechanical_arm": "바쁘다 바빠!", + "advancement.create.mechanical_arm.desc": "기계식 팔을 제작하고, 입력구와 출력구를 선택하고, 설치한 후 동력을 공급한 다음, 작업이 수행되는 것을 관찰하세요.", + "advancement.create.musical_arm": "흥이 넘친다!", + "advancement.create.musical_arm.desc": "기계식 팔이 주크박스에 음반을 넣는 것을 관찰하세요.", + "advancement.create.arm_many_targets": "체계화 프로그램", + "advancement.create.arm_many_targets.desc": "기계식 팔에 10개 이상의 출력부를 설정하세요.", + "advancement.create.arm_blaze_burner": "연소 프로그램", + "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.chromatic_compound": "양극성 자원", + "advancement.create.chromatic_compound.desc": "혼돈의 혼합물을 만드세요.", + "advancement.create.shadow_steel": "공허에서의 복귀", + "advancement.create.shadow_steel.desc": "혼돈의 혼합물에 세계 밖의 어둠을 노출하여 무의 금속, 어둠의 강철을 만드세요.", + "advancement.create.refined_radiance": "빛으로부터의 자극", + "advancement.create.refined_radiance.desc": "혼돈의 혼합물에 신호기의 빛을 쐬어 강렬한 색채를 지닌 물질, 섬세한 섬광을 만드세요.", + "advancement.create.chromatic_age": "극과 극", + "advancement.create.chromatic_age.desc": "빛과 어둠의 틀을 만드세요.", + "advancement.create.wand_of_symmetry": "빛의 거울", "advancement.create.wand_of_symmetry.desc": "대칭의 지팡이를 만드세요.", - "advancement.create.extendo_grip": "띠요오옹!", - "advancement.create.extendo_grip.desc": "외장형 연장 팔을 드세요.", + "advancement.create.extendo_grip": "띠요오용!", + "advancement.create.extendo_grip.desc": "연장용 팔을 손에 쥐세요.", "advancement.create.potato_cannon": "UNLOCALIZED: Fwoomp!", "advancement.create.potato_cannon.desc": "UNLOCALIZED: Defeat an enemy with your Potato Cannon.", - "advancement.create.dual_extendo_grip": "궁극의 띠용!", - "advancement.create.dual_extendo_grip.desc": "쌍으로 외장형 연장 팔을 들어 인간을 뛰어넘은 사거리를 가지세요.", - "advancement.create.eob": "End of Beta", - "advancement.create.eob.desc": "이후 업데이트를 기다려주세요. <3", + "advancement.create.dual_extendo_grip": "궁극의 띠용시대", + "advancement.create.dual_extendo_grip.desc": "연장용 팔을 이중으로 손에 쥐어 초인으로의 한 발짝을 내딛으세요.", + "advancement.create.eob": "베타의 끝", + "advancement.create.eob.desc": "이후에 나올 업데이트를 기대해주세요. <3", "_": "->------------------------] UI & Messages [------------------------<-", - "itemGroup.create.base": "Create", - "itemGroup.create.palettes": "Create 팔레트", + "itemGroup.create.base": "크리에이트 공학", + "itemGroup.create.palettes": "크리에이트 블록", - "death.attack.create.crush": "%1$s이(가) 분쇄 휠에 의해 가공되었습니다", - "death.attack.create.fan_fire": "%1$s이(가) 뜨거운 바람에 의해 익어버렸습니다", - "death.attack.create.fan_lava": "%1$s이(가) 용암 바람으로 구워졌습니다", - "death.attack.create.mechanical_drill": "%1$s이(가) 드릴에 관통당했습니다", - "death.attack.create.mechanical_saw": "%1$s이(가) 톱날에 반으로 갈라져 죽었습니다", + "death.attack.create.crush": "%1$s이(가) 분쇄용 바퀴에 갈려나갔습니다", + "death.attack.create.fan_fire": "%1$s이(가) 뜨거운 바람에 익어버렸습니다", + "death.attack.create.fan_lava": "%1$s이(가) 불길 같은 바람에 구워졌습니다", + "death.attack.create.mechanical_drill": "%1$s이(가) 기계식 드릴에 관통당했습니다", + "death.attack.create.mechanical_saw": "%1$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.cuckoo_clock_explosion": "%1$s이(가) 조작된 뻐꾸기 시계에 의해 폭파당했습니다", + "death.attack.create.cuckoo_clock_explosion": "%1$s이(가) 변경된 뻐꾸기시계에 의해 폭파당했습니다", - "create.block.deployer.damage_source_name": "배포기", - "create.block.cart_assembler.invalid": "카트조립기를 레일 위에 설치하세요", + "create.block.deployer.damage_source_name": "전개장치", + "create.block.cart_assembler.invalid": "레일에 설치하세요", "create.menu.return": "UNLOCALIZED: Return to Menu", "create.menu.configure": "UNLOCALIZED: Configure...", @@ -695,29 +695,29 @@ "create.menu.support": "UNLOCALIZED: Support Us", "create.recipe.crushing": "분쇄", - "create.recipe.milling": "맷돌질", + "create.recipe.milling": "제분", "create.recipe.fan_washing": "세척", - "create.recipe.fan_washing.fan": "물과 선풍기", + "create.recipe.fan_washing.fan": "물과 공업용 선풍기", "create.recipe.fan_smoking": "훈연", - "create.recipe.fan_smoking.fan": "불과 선풍기", + "create.recipe.fan_smoking.fan": "불과 공업용 선풍기", "create.recipe.fan_blasting": "제련", - "create.recipe.fan_blasting.fan": "용암과 선풍기", + "create.recipe.fan_blasting.fan": "용암과 공업용 선풍기", "create.recipe.pressing": "압착", "create.recipe.mixing": "혼합", "create.recipe.deploying": "UNLOCALIZED: Deploying", - "create.recipe.automatic_shapeless": "무형 자동 조합", - "create.recipe.automatic_brewing": "자동 양조", + "create.recipe.automatic_shapeless": "기계식 제작 (믹서기)", + "create.recipe.automatic_brewing": "기계식 양조", "create.recipe.packing": "압축", - "create.recipe.automatic_packing": "자동 압축", - "create.recipe.sawing": "제재", - "create.recipe.mechanical_crafting": "기계 조합", - "create.recipe.automatic_shaped": "유형 자동 조합", - "create.recipe.block_cutting": "블 절단", - "create.recipe.wood_cutting": "UNLOCALIZED: Wood Cutting", + "create.recipe.automatic_packing": "기계식 압축", + "create.recipe.sawing": "톱질", + "create.recipe.mechanical_crafting": "기계식 제작", + "create.recipe.automatic_shaped": "기계식 제작 (제작기)", + "create.recipe.block_cutting": "블록 절단", + "create.recipe.wood_cutting": "나무 절단", "create.recipe.sandpaper_polishing": "사포질", - "create.recipe.mystery_conversion": "?", + "create.recipe.mystery_conversion": "불가사의한 변환", "create.recipe.spout_filling": "채우기", - "create.recipe.draining": "배수", + "create.recipe.draining": "흡수", "create.recipe.sequenced_assembly": "UNLOCALIZED: Sequenced Assembly", "create.recipe.assembly.next": "UNLOCALIZED: Next: %1$s", "create.recipe.assembly.step": "UNLOCALIZED: Step %1$s:", @@ -729,58 +729,58 @@ "create.recipe.assembly.repeat": "UNLOCALIZED: Repeat Sequence %1$s Times", "create.recipe.assembly.junk": "UNLOCALIZED: Random junk", "create.recipe.processing.chance": "%1$s%% 확률", - "create.recipe.heat_requirement.none": "열이 필요하지 않음", - "create.recipe.heat_requirement.heated": "고온으로 가열됨", - "create.recipe.heat_requirement.superheated": "초고온으로 가열됨", + "create.recipe.heat_requirement.none": "가열기가 필요하지 않습니다", + "create.recipe.heat_requirement.heated": "가열", + "create.recipe.heat_requirement.superheated": "초가열", "create.generic.range": "범위", - "create.generic.radius": "반지름", + "create.generic.radius": "반경", "create.generic.width": "폭", "create.generic.height": "높이", "create.generic.length": "길이", "create.generic.speed": "속도", - "create.generic.delay": "딜레이", + "create.generic.delay": "지연", "create.generic.unit.ticks": "틱", "create.generic.unit.seconds": "초", "create.generic.unit.minutes": "분", - "create.generic.unit.rpm": "RPM", - "create.generic.unit.stress": "su", + "create.generic.unit.rpm": "RPM / 분당 회전수", + "create.generic.unit.stress": " 부하", "create.generic.unit.degrees": "°", - "create.generic.unit.millibuckets": "%1$smB", + "create.generic.unit.millibuckets": "%1$s 밀리양동이", "create.generic.clockwise": "시계 방향", - "create.generic.counter_clockwise": "시계 반대 방향", + "create.generic.counter_clockwise": "반시계 방향", - "create.action.scroll": "스크롤하세요", + "create.action.scroll": "스크롤", "create.action.confirm": "확인", "create.action.abort": "중단", "create.action.saveToFile": "저장", "create.action.discard": "삭제", - "create.keyinfo.toolmenu": "메뉴 세부정보 보기", - "create.keyinfo.scrollup": "Simulate Mousewheel Up (inworld)", - "create.keyinfo.scrolldown": "Simulate Mousewheel Down (inworld)", + "create.keyinfo.toolmenu": "집중", + "create.keyinfo.scrollup": "마우스 휠을 위로 이동 (세계에서)", + "create.keyinfo.scrolldown": "마우스 휠을 아래로 이동 (세계에서)", - "create.gui.scrollInput.defaultTitle": "옵션을 선택하세요:", - "create.gui.scrollInput.scrollToModify": "스크롤로 수정하기", - "create.gui.scrollInput.scrollToAdjustAmount": "스크롤로 수량 조절하기", - "create.gui.scrollInput.scrollToSelect": "스크롤로 선택", - "create.gui.scrollInput.shiftScrollsFaster": "쉬프트-스크롤로 빨리 수정하기", - "create.gui.toolmenu.focusKey": "[%1$s]를 눌러 세부정보 보기", - "create.gui.toolmenu.cycle": "스크롤로 순환", - "create.gui.symmetryWand.mirrorType": "반사", - "create.gui.symmetryWand.orientation": "방위", + "create.gui.scrollInput.defaultTitle": "옵션 선택:", + "create.gui.scrollInput.scrollToModify": "스크롤로 수정할 수 있습니다", + "create.gui.scrollInput.scrollToAdjustAmount": "스크롤로 수량을 조절할 수 있습니다", + "create.gui.scrollInput.scrollToSelect": "스크롤로 선택할 수 있습니다", + "create.gui.scrollInput.shiftScrollsFaster": "Shift을(를) 누르고 스크롤하면 빠르게 이동합니다", + "create.gui.toolmenu.focusKey": "[%1$s]을(를) 누르면 집중합니다", + "create.gui.toolmenu.cycle": "[스크롤]하면 모드를 변경합니다", + "create.gui.symmetryWand.mirrorType": "거울의 형태", + "create.gui.symmetryWand.orientation": "거울의 방향", - "create.symmetry.mirror.plane": "거울 모드", - "create.symmetry.mirror.doublePlane": "사각형 모드", - "create.symmetry.mirror.triplePlane": "팔각형 모드", + "create.symmetry.mirror.plane": "기본", + "create.symmetry.mirror.doublePlane": "사각형", + "create.symmetry.mirror.triplePlane": "팔각형", - "create.orientation.orthogonal": "수직으로", - "create.orientation.diagonal": "대각선으로", - "create.orientation.horizontal": "수평으로", - "create.orientation.alongZ": "Z좌표를 따라", - "create.orientation.alongX": "X좌표를 따라", + "create.orientation.orthogonal": "직각", + "create.orientation.diagonal": "대각", + "create.orientation.horizontal": "가로", + "create.orientation.alongZ": "Z 좌표", + "create.orientation.alongX": "X 좌표", - "create.gui.terrainzapper.title": "휴대용 세계편집기", + "create.gui.terrainzapper.title": "휴대용 세계성형기", "create.gui.terrainzapper.searchDiagonal": "UNLOCALIZED: Follow Diagonals", "create.gui.terrainzapper.searchFuzzy": "UNLOCALIZED: Ignore Material Borders", "create.gui.terrainzapper.patternSection": "UNLOCALIZED: Pattern", @@ -790,352 +790,352 @@ "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.placement": "설치방식", - "create.gui.terrainzapper.placement.merged": "선택한 블록에", - "create.gui.terrainzapper.placement.attached": "선택한 블록 옆에", - "create.gui.terrainzapper.placement.inserted": "선택한 블록 안에", - "create.gui.terrainzapper.brush": "브러쉬", - "create.gui.terrainzapper.brush.cuboid": "정육면체", - "create.gui.terrainzapper.brush.sphere": "구", - "create.gui.terrainzapper.brush.cylinder": "원통", + "create.gui.terrainzapper.placement": "기준", + "create.gui.terrainzapper.placement.merged": "중간", + "create.gui.terrainzapper.placement.attached": "밖", + "create.gui.terrainzapper.placement.inserted": "안", + "create.gui.terrainzapper.brush": "형태", + "create.gui.terrainzapper.brush.cuboid": "직육면체", + "create.gui.terrainzapper.brush.sphere": "구체", + "create.gui.terrainzapper.brush.cylinder": "원기둥", "create.gui.terrainzapper.brush.surface": "UNLOCALIZED: Surface", "create.gui.terrainzapper.brush.cluster": "UNLOCALIZED: Cluster", - "create.gui.terrainzapper.tool": "도구", + "create.gui.terrainzapper.tool": "방식", "create.gui.terrainzapper.tool.fill": "채우기", - "create.gui.terrainzapper.tool.place": "설치", - "create.gui.terrainzapper.tool.replace": "대체", + "create.gui.terrainzapper.tool.place": "설치하기", + "create.gui.terrainzapper.tool.replace": "대체하기", "create.gui.terrainzapper.tool.clear": "지우기", "create.gui.terrainzapper.tool.overlay": "덮어씌우기", - "create.gui.terrainzapper.tool.flatten": "평탄화", + "create.gui.terrainzapper.tool.flatten": "다듬기", - "create.terrainzapper.shiftRightClickToSet": "쉬프트-우클릭으로 모양 설정하기", + "create.terrainzapper.shiftRightClickToSet": "Shift-오른쪽 버튼으로 모양을 선택할 수 있습니다", "create.terrainzapper.usingBlock": "UNLOCALIZED: Using: %1$s", "create.terrainzapper.leftClickToSet": "UNLOCALIZED: Left-Click a Block to set Material", - "create.minecart_coupling.two_couplings_max": "광산 수레는 최대 2개의 커플링만 가질 수 있습니다", - "create.minecart_coupling.unloaded": "열차 일부분이 로딩되지 않은 청크에 있는 것 같습니다", - "create.minecart_coupling.no_loops": "커플링은 반복할 수 없습니다", - "create.minecart_coupling.removed": "광산 수레에서 모든 커플링을 제거했습니다.", - "create.minecart_coupling.too_far": "광산 수레들이 너무 멀리 떨어져 있습니다", + "create.minecart_coupling.two_couplings_max": "2개 이상의 이음쇠를 연결할 수는 없습니다", + "create.minecart_coupling.unloaded": "일부분이 불러와지지 않은 청크에 있는 것 같습니다", + "create.minecart_coupling.no_loops": "고리 모양으로 연결할 수는 없습니다", + "create.minecart_coupling.removed": "이 광산 수레에 연결되어 있는 이음쇠를 전부 제거했습니다", + "create.minecart_coupling.too_far": "너무 멀리 떨어져 있습니다", "create.contraptions.movement_mode": "이동 설정", - "create.contraptions.movement_mode.move_place": "멈췄을때 항상 블록을 설치함", - "create.contraptions.movement_mode.move_place_returned": "멈췄을떄 최초 위치에서만 블록을 설치함", - "create.contraptions.movement_mode.move_never_place": "멈춰도 블록을 설치하지 않음", - "create.contraptions.movement_mode.rotate_place": "멈췄을때 항상 블록을 설치함", - "create.contraptions.movement_mode.rotate_place_returned": "멈췄을떄 최초 위치에서만 블록을 설치함", - "create.contraptions.movement_mode.rotate_never_place": "멈춰도 블록을 설치하지 않음", - "create.contraptions.cart_movement_mode": "수레 장치 이동 설정", - "create.contraptions.cart_movement_mode.rotate": "장치가 항상 전방을 향함", - "create.contraptions.cart_movement_mode.rotate_paused": "수레가 회전할때 장치 행동을 멈춤", - "create.contraptions.cart_movement_mode.rotation_locked": "장치가 회전하지 않음", + "create.contraptions.movement_mode.move_place": "부착된 블록이 멈춰있을 때만 설치되어 있게 됨", + "create.contraptions.movement_mode.move_place_returned": "부착된 블록이 시작 위치에서만 설치되어 있게 됨", + "create.contraptions.movement_mode.move_never_place": "부착기가 파괴되었을 때만 부착된 블록이 설치되어 있게 됨", + "create.contraptions.movement_mode.rotate_place": "부착된 블록이 멈춰있을 때만 설치되어 있게 됨", + "create.contraptions.movement_mode.rotate_place_returned": "부착된 블록이 초기 각도 근처에서만 설치되어 있게 됨", + "create.contraptions.movement_mode.rotate_never_place": "부착기가 파괴되었을 때만 부착된 블록이 설치되어 있게 됨", + "create.contraptions.cart_movement_mode": "수레 장치 설정", + "create.contraptions.cart_movement_mode.rotate": "방향 회전", + "create.contraptions.cart_movement_mode.rotate_paused": "수레의 방향이 바뀌면 장치가 정지", + "create.contraptions.cart_movement_mode.rotation_locked": "방향 고정", "create.contraptions.windmill.rotation_direction": "회전 방향", - "create.contraptions.clockwork.clock_hands": "시계 바늘", - "create.contraptions.clockwork.hour_first": "시침 먼저", - "create.contraptions.clockwork.minute_first": "분침 먼저", - "create.contraptions.clockwork.hour_first_24": "24시간 바늘 먼저", + "create.contraptions.clockwork.clock_hands": "시계침", + "create.contraptions.clockwork.hour_first": "시침", + "create.contraptions.clockwork.minute_first": "분침", + "create.contraptions.clockwork.hour_first_24": "24시간", "create.logistics.filter": "필터", - "create.logistics.recipe_filter": "조합법 필터", + "create.logistics.recipe_filter": "제작법 필터", "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.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.gui.goggles.generator_stats": "발동 상태:", - "create.gui.goggles.kinetic_stats": "가동 상태:", - "create.gui.goggles.at_current_speed": "현재 에너지량", - "create.gui.goggles.pole_length": "UNLOCALIZED: Pole Length:", - "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": "게이지 정보:", + "create.gui.goggles.generator_stats": "동적 근원 상태:", + "create.gui.goggles.kinetic_stats": "동적 장치 상태:", + "create.gui.goggles.at_current_speed": "(현재 속도에서)", + "create.gui.goggles.pole_length": "연장대 길이:", + "create.gui.goggles.fluid_container": "액체 저장 정보:", + "create.gui.goggles.fluid_container.capacity": "수용량: ", + "create.gui.assembly.exception": "장치를 가동할 수 없습니다:", + "create.gui.assembly.exception.unmovableBlock": "[%1$s,%2$s,%3$s]에 움직일 수 없는 블록(%4$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.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.adjustable_crate.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.adjustable_crate.title": "조절식 상자", "create.gui.adjustable_crate.storageSpace": "저장 공간", - "create.gui.stockpile_switch.title": "수량 스위치", - "create.gui.stockpile_switch.invert_signal": "신호 반전", - "create.gui.stockpile_switch.move_to_lower_at": "최소 신호 발동 비율:%1$s%%", - "create.gui.stockpile_switch.move_to_upper_at": "최소 신호 유지 비율:%1$s%%", - "create.gui.sequenced_gearshift.title": "순서 기어쉬프트", - "create.gui.sequenced_gearshift.instruction": "설명", - "create.gui.sequenced_gearshift.instruction.turn_angle.descriptive": "UNLOCALIZED: Turn by angle", + "create.gui.stockpile_switch.title": "물량 감지기", + "create.gui.stockpile_switch.invert_signal": "신호 전환", + "create.gui.stockpile_switch.move_to_lower_at": "아이템이 차지하는 비율이 %1$s%% 이하일 때 신호", + "create.gui.stockpile_switch.move_to_upper_at": "아이템이 차지하는 비율이 %1$s%% 이상일 때 신호", + "create.gui.sequenced_gearshift.title": "순서화 전환기", + "create.gui.sequenced_gearshift.instruction": "지시", + "create.gui.sequenced_gearshift.instruction.turn_angle.descriptive": "각도 회전", "create.gui.sequenced_gearshift.instruction.turn_angle": "회전", "create.gui.sequenced_gearshift.instruction.turn_angle.angle": "각도", - "create.gui.sequenced_gearshift.instruction.turn_distance.descriptive": "UNLOCALIZED: Turn to move Piston/Pulley/Gantry", + "create.gui.sequenced_gearshift.instruction.turn_distance.descriptive": "피스톤/도르래/다리 장치를 회전 이동", "create.gui.sequenced_gearshift.instruction.turn_distance": "피스톤", "create.gui.sequenced_gearshift.instruction.turn_distance.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": "마침", - "create.gui.sequenced_gearshift.instruction.await.descriptive": "UNLOCALIZED: Await new Redstone Pulse", - "create.gui.sequenced_gearshift.instruction.await": "UNLOCALIZED: Await", + "create.gui.sequenced_gearshift.instruction.delay.descriptive": "지연 시간", + "create.gui.sequenced_gearshift.instruction.delay": "지연", + "create.gui.sequenced_gearshift.instruction.delay.duration": "시간", + "create.gui.sequenced_gearshift.instruction.end.descriptive": "종료", + "create.gui.sequenced_gearshift.instruction.end": "종료", + "create.gui.sequenced_gearshift.instruction.await.descriptive": "새로운 레드스톤 신호가 전달될 때까지 대기", + "create.gui.sequenced_gearshift.instruction.await": "대기", "create.gui.sequenced_gearshift.speed": "속도, 방향", - "create.gui.sequenced_gearshift.speed.forward": "입력된 속도, 그대로 회전", - "create.gui.sequenced_gearshift.speed.forward_fast": "입력된 속도의 2배, 그대로 회전", - "create.gui.sequenced_gearshift.speed.back": "입력된 속도, 반대로 회전", - "create.gui.sequenced_gearshift.speed.back_fast": "입력된 속도의 2배, 반대로 회전", + "create.gui.sequenced_gearshift.speed.forward": "입력 속도, 그대로 회전", + "create.gui.sequenced_gearshift.speed.forward_fast": "입력 속도의 2배, 그대로 회전", + "create.gui.sequenced_gearshift.speed.back": "입력 속도, 반대로 회전", + "create.gui.sequenced_gearshift.speed.back_fast": "입력 속도의 2배, 반대로 회전", - "create.schematicAndQuill.dimensions": "청사진 크기: %1$sx%2$sx%3$s", - "create.schematicAndQuill.firstPos": "첫번쨰 위치 지정됨.", - "create.schematicAndQuill.secondPos": "두번째 위치 지정됨.", - "create.schematicAndQuill.noTarget": "[Ctrl]을 눌러 공기 블록을 선택하기.", - "create.schematicAndQuill.abort": "위치 제거됨.", - "create.schematicAndQuill.title": "청사진 이름", - "create.schematicAndQuill.convert": "저장하고 바로 설치하기", - "create.schematicAndQuill.fallbackName": "내 청사진", - "create.schematicAndQuill.saved": "%1$s로 저장됨", + "create.schematicAndQuill.dimensions": "설계도 크기: %1$sx%2$sx%3$s", + "create.schematicAndQuill.firstPos": "첫 번째 위치를 설정했습니다.", + "create.schematicAndQuill.secondPos": "두 번째 위치를 설정했습니다.", + "create.schematicAndQuill.noTarget": "[Ctrl]을(를) 누르면 허공을 선택할 수 있습니다.", + "create.schematicAndQuill.abort": "위치 설정을 제거했습니다.", + "create.schematicAndQuill.title": "설계도 이름:", + "create.schematicAndQuill.convert": "저장하고 즉시 적용", + "create.schematicAndQuill.fallbackName": "My Schematic", + "create.schematicAndQuill.saved": "%1$s으(로) 저장했습니다", - "create.schematic.invalid": "[!] 없는 아이템 - 청사진 테이블을 이용하세요", + "create.schematic.invalid": "[!] 잘못된 아이템 - 설계도 탁자를 사용하세요", "create.schematic.position": "위치", "create.schematic.rotation": "회전", - "create.schematic.rotation.none": "없음", - "create.schematic.rotation.cw90": "90도 시계방향 회전", - "create.schematic.rotation.cw180": "180도 시계방향 회전", - "create.schematic.rotation.cw270": "270도 시계방향 회전", - "create.schematic.mirror": "거울", - "create.schematic.mirror.none": "없음", + "create.schematic.rotation.none": "기본", + "create.schematic.rotation.cw90": "시계방향으로 90° 회전", + "create.schematic.rotation.cw180": "시계방향으로 180° 회전", + "create.schematic.rotation.cw270": "시계방향으로 270° 회전", + "create.schematic.mirror": "대칭 이동", + "create.schematic.mirror.none": "기본", "create.schematic.mirror.frontBack": "전-후", "create.schematic.mirror.leftRight": "좌-우", - "create.schematic.tool.deploy": "전개", - "create.schematic.tool.move": "X/Z좌표 이동", - "create.schematic.tool.movey": "Y좌표 이동", + "create.schematic.tool.deploy": "배치", + "create.schematic.tool.move": "X/Z 좌표 이동", + "create.schematic.tool.movey": "Y 좌표 이동", "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.move.description.0": "청사진을 수평 이동시킵니다.", - "create.schematic.tool.move.description.1": "청사진을 보고 [CTRL]-스크롤로 밉니다.", + "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.move.description.0": "설계도가 수평 이동합니다.", + "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.0": "설계도가 수직 이동합니다.", + "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.0": "구조물을 바로 배치합니다.", + "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.maxAllowedSize": "최대 청사진 파일 크기는:", + "create.schematics.uploadTooLarge": "설계도가 서버에서 지정한 제한을 초과합니다...", + "create.schematics.maxAllowedSize": "최대 설계도 크기:", "create.gui.schematicTable.refresh": "파일 새로고침", "create.gui.schematicTable.open_folder": "폴더 열기", - "create.gui.schematicTable.title": "청사진 테이블", - "create.gui.schematicTable.availableSchematics": "사용가능한 청사진", - "create.gui.schematicTable.noSchematics": "저장된 청사진 없음", - "create.gui.schematicTable.uploading": "업로딩 중...", - "create.gui.schematicTable.finished": "업로드 완료!", - "create.gui.schematicannon.title": "청사진 대포", - "create.gui.schematicannon.listPrinter": "재료 목록 프린터", - "create.gui.schematicannon.gunpowderLevel": "화약 용량 %1$s%%", - "create.gui.schematicannon.shotsRemaining": "남은 발포 수 : %1$s", - "create.gui.schematicannon.shotsRemainingWithBackup": "화약 여분: %1$s", - "create.gui.schematicannon.optionEnabled": "현재 활성화 됨", - "create.gui.schematicannon.optionDisabled": "현재 비활성화 됨", - "create.gui.schematicannon.showOptions": "대포 설치 설정 열기", - "create.gui.schematicannon.option.dontReplaceSolid": "온전한 블록을 대체하지 않음", - "create.gui.schematicannon.option.replaceWithSolid": "온전한 블록을 재료로 대체함", - "create.gui.schematicannon.option.replaceWithAny": "온전한 블록을 아무 재료로 대체함", - "create.gui.schematicannon.option.replaceWithEmpty": "온전한 블록을 공기로 채움", - "create.gui.schematicannon.option.skipMissing": "부족한 블록을 무시하고 진행", - "create.gui.schematicannon.option.skipTileEntities": "타일 엔티티를 보호", - "create.gui.schematicannon.slot.gunpowder": "화약을 넣어 대포 연료를 채우세요", - "create.gui.schematicannon.slot.listPrinter": "책을 넣어 건축 재료 체크리스트를 인쇄하세요", - "create.gui.schematicannon.slot.schematic": "여기에 청사진을 넣으세요. 건설 구역이 설정되어 있어야 합니다.", - "create.gui.schematicannon.option.skipMissing.description": "만약 대포가 설치에 필요한 블록을 찾지 못할 경우,건너뛰고 다음 블록 설치를 진행합니다.", - "create.gui.schematicannon.option.skipTileEntities.description": "대포가 상세정보가 든 상자같은 타일 엔티티 설치를 무시합니다.", - "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.schematicTable.title": "설계도 탁자", + "create.gui.schematicTable.availableSchematics": "사용 가능한 설계도", + "create.gui.schematicTable.noSchematics": "저장된 설계도가 없습니다", + "create.gui.schematicTable.uploading": "전송 중...", + "create.gui.schematicTable.finished": "전송 완료!", + "create.gui.schematicannon.title": "설계대포", + "create.gui.schematicannon.listPrinter": "재료 목록 인쇄", + "create.gui.schematicannon.gunpowderLevel": "화약: %1$s%%", + "create.gui.schematicannon.shotsRemaining": "남은 발포 수: %1$s", + "create.gui.schematicannon.shotsRemainingWithBackup": "남은 화약을 포함한 발포 수: %1$s", + "create.gui.schematicannon.optionEnabled": "활성화되어 있습니다", + "create.gui.schematicannon.optionDisabled": "비활성화되어 있습니다", + "create.gui.schematicannon.showOptions": "설치 설정", + "create.gui.schematicannon.option.dontReplaceSolid": "고체 블록을 대체하지 않습니다", + "create.gui.schematicannon.option.replaceWithSolid": "고체 블록을 고체 블록으로 대체합니다", + "create.gui.schematicannon.option.replaceWithAny": "고체 블록을 아무 블록으로 대체합니다", + "create.gui.schematicannon.option.replaceWithEmpty": "고체 블록을 공기로 대체합니다", + "create.gui.schematicannon.option.skipMissing": "부족한 아이템은 건너뜁니다", + "create.gui.schematicannon.option.skipTileEntities": "정보 블록을 보호합니다", + "create.gui.schematicannon.slot.gunpowder": "여기에 화약을 넣으면 대포에 연료를 채울 수 있습니다", + "create.gui.schematicannon.slot.listPrinter": "여기에 책을 넣으면 재료 목록이 불러와 집니다", + "create.gui.schematicannon.slot.schematic": "여기에 설계도를 넣으면 대포가 설계도대로 블록을 발포합니다. 설계도는 특정한 위치에 배치되어 있어야 합니다.", + "create.gui.schematicannon.option.skipMissing.description": "대포가 배치에 필요한 블록을 찾을 수 없는 경우, 그 블록을 건너뛰고 다음 위치에 블록을 설치합니다.", + "create.gui.schematicannon.option.skipTileEntities.description": "대포가 상자 같은 정보를 가진 블록을 대체하지 않습니다.", + "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.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": "중단됨", - "create.schematicannon.status.noGunpowder": "화약이 부족함", - "create.schematicannon.status.targetNotLoaded": "블록이 준비되지 않음", - "create.schematicannon.status.targetOutsideRange": "목표가 너무 멀리 떨어져 있습니다.", - "create.schematicannon.status.searching": "검색 중", + "create.schematicannon.status.paused": "일시 중지", + "create.schematicannon.status.stopped": "중단", + "create.schematicannon.status.noGunpowder": "화약이 부족합니다", + "create.schematicannon.status.targetNotLoaded": "목표가 불러와지지 않았습니다", + "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.schematicInvalid": "청사진 없음", - "create.schematicannon.status.schematicNotPlaced": "청사진이 전개되지 않음", - "create.schematicannon.status.schematicExpired": "청사진 파일이 제거됨", + "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": "UNLOCALIZED: Material Checklist", - "create.materialChecklist.blocksNotLoaded": "UNLOCALIZED: * Disclaimer *\n\nMaterial List may be inaccurate due to relevant chunks not being loaded.", + "create.materialChecklist": "재료 목록", + "create.materialChecklist.blocksNotLoaded": "* 경고 *\n\n관련된 청크가 불러와지지 않아 재료 목록이 부정확할 수 있습니다.", - "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": "상세정보 일치", - "create.gui.filter.respect_data.description": "위 목록 아이템의 내구도, 마법부여, 그리고 다른 NBT와 일치할 때 통과시킵니다.", - "create.gui.filter.ignore_data": "상세정보 무시", - "create.gui.filter.ignore_data.description": "상세정보와 상관없이 아이템 종류만 일치한다면 통과시킵니다.", + "create.gui.filter.deny_list": "금지", + "create.gui.filter.deny_list.description": "위의 아이템과 일치하지 않는 아이템만 통과됩니다. 위에 아무 아이템도 없다면 모든 아이템이 다 통과됩니다.", + "create.gui.filter.allow_list": "허가", + "create.gui.filter.allow_list.description": "위의 아이템과 일치하는 아이템만 통과됩니다. 위에 아무 아이템도 없다면 모든 아이템이 다 통과할 수 없게 됩니다.", + "create.gui.filter.respect_data": "정보 존중", + "create.gui.filter.respect_data.description": "아이템의 내구도나 마법 부여, 여려가지 특성이 일치하는 아이템만 위의 아이템과 일치하는 아이템으로 취급합니다.", + "create.gui.filter.ignore_data": "정보 무시", + "create.gui.filter.ignore_data.description": "아이템의 특성에 상관없이 같은 아이템이라면 위의 아이템과 일치하는 아이템으로 취급합니다.", - "create.item_attributes.placeable": "설치할 수 있음", - "create.item_attributes.placeable.inverted": "설치할 수 없음", - "create.item_attributes.consumable": "먹을 수 있음", - "create.item_attributes.consumable.inverted": "먹을 수 없음", - "create.item_attributes.smeltable": "구워질 수 있음", - "create.item_attributes.smeltable.inverted": "구워질 수 없음", - "create.item_attributes.washable": "세척될 수 있음", - "create.item_attributes.washable.inverted": "세척될 수 없음", - "create.item_attributes.smokable": "훈연될 수 있음", - "create.item_attributes.smokable.inverted": "훈연될 수 없음", - "create.item_attributes.crushable": "분쇄될 수 있음", - "create.item_attributes.crushable.inverted": "분쇄될 수 없음", - "create.item_attributes.blastable": "용광로에 녹일 수 있음", - "create.item_attributes.blastable.inverted": "용광로에 녹일 수 없음", - "create.item_attributes.enchanted": "마법부여됨", - "create.item_attributes.enchanted.inverted": "마법부여되지 않음", - "create.item_attributes.damaged": "내구도가 닮", - "create.item_attributes.damaged.inverted": "내구도가 닳지 않음", - "create.item_attributes.badly_damaged": "심각하게 내구도가 닮", - "create.item_attributes.badly_damaged.inverted": "심각하게 내구도가 닳지 않음", - "create.item_attributes.not_stackable": "겹쳐질 수 없음", - "create.item_attributes.not_stackable.inverted": "겹쳐질 수 있음", - "create.item_attributes.equipable": "장착할 수 있음", - "create.item_attributes.equipable.inverted": "장착할 수 없음", - "create.item_attributes.furnace_fuel": "화로 연료로 쓸 수 있음", - "create.item_attributes.furnace_fuel.inverted": "화로 연료로 쓸 수 없음", - "create.item_attributes.in_tag": "%1$s로 등록됨", - "create.item_attributes.in_tag.inverted": "%1$s로 등록되지 않음", - "create.item_attributes.in_item_group": "%1$s탭에 속함", - "create.item_attributes.in_item_group.inverted": "%1$s탭에 속함", - "create.item_attributes.added_by": "%1$s모드가 추가함", - "create.item_attributes.added_by.inverted": "%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.max_enchanted": "UNLOCALIZED: is enchanted at max level", - "create.item_attributes.max_enchanted.inverted": "UNLOCALIZED: is not enchanted at max level", - "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_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_constellation": "UNLOCALIZED: is attuned to %1$s", - "create.item_attributes.astralsorcery_constellation.inverted": "UNLOCALIZED: is not attuned to %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.astralsorcery_amulet": "UNLOCALIZED: improves %1$s", - "create.item_attributes.astralsorcery_amulet.inverted": "UNLOCALIZED: does not improve %1$s", + "create.item_attributes.placeable": "설치할 수 있는", + "create.item_attributes.placeable.inverted": "설치할 수 없는", + "create.item_attributes.consumable": "먹을 수 있는", + "create.item_attributes.consumable.inverted": "먹을 수 없는", + "create.item_attributes.smeltable": "제련할 수 있는", + "create.item_attributes.smeltable.inverted": "제련할 수 없는", + "create.item_attributes.washable": "세척할 수 있는", + "create.item_attributes.washable.inverted": "세척할 수 없는", + "create.item_attributes.smokable": "훈연할 수 있는", + "create.item_attributes.smokable.inverted": "훈연할 수 없는", + "create.item_attributes.crushable": "분쇄할 수 있는", + "create.item_attributes.crushable.inverted": "분쇄할 수 없는", + "create.item_attributes.blastable": "용광로에 녹일 수 있는", + "create.item_attributes.blastable.inverted": "용광로에 녹일 수 없는", + "create.item_attributes.enchanted": "마법 부여가 되어있는", + "create.item_attributes.enchanted.inverted": "마법 부여가 되어있지 않은", + "create.item_attributes.damaged": "내구도가 닳은", + "create.item_attributes.damaged.inverted": "내구도가 닳지 않은", + "create.item_attributes.badly_damaged": "심하게 내구도가 닳은", + "create.item_attributes.badly_damaged.inverted": "심하게 내구도가 닳은", + "create.item_attributes.not_stackable": "겹쳐질 수 없는", + "create.item_attributes.not_stackable.inverted": "겹쳐질 수 있는", + "create.item_attributes.equipable": "장착할 수 있는", + "create.item_attributes.equipable.inverted": "장착할 수 없는", + "create.item_attributes.furnace_fuel": "화로의 연료로 사용할 수 있는", + "create.item_attributes.furnace_fuel.inverted": "화로의 연료로 사용할 수 없는", + "create.item_attributes.in_tag": "%1$s 태그가 있는", + "create.item_attributes.in_tag.inverted": "%1$s 태그가 없는", + "create.item_attributes.in_item_group": "'%1$s' 그룹에 속해 있는", + "create.item_attributes.in_item_group.inverted": "'%1$s' 그룹에 속해 있지 않은", + "create.item_attributes.added_by": "%1$s에 의해 추가된", + "create.item_attributes.added_by.inverted": "%1$s에 의해 추가되지 않은", + "create.item_attributes.has_enchant": "%1$s 마법이 부여된", + "create.item_attributes.has_enchant.inverted": "%1$s 마법이 부여되지 않은", + "create.item_attributes.color": "염색된 %1$s", + "create.item_attributes.color.inverted": "염색되지 않은 %1$s", + "create.item_attributes.max_enchanted": "마법 부여가 최고 등급인", + "create.item_attributes.max_enchanted.inverted": "마법 부여가 최고 등급이지 않은", + "create.item_attributes.has_fluid": "%1$s이(가) 담긴", + "create.item_attributes.has_fluid.inverted": "%1$s이(가) 담기지 않은", + "create.item_attributes.has_name": "사용자 지정 이름이 '%1$s'인", + "create.item_attributes.has_name.inverted": "사용자 지정 이름이 '%1$s'이지 않은", + "create.item_attributes.book_author": "%1$s이(가) 작성한", + "create.item_attributes.book_author.inverted": "%1$s이(가) 작성하지 않은", + "create.item_attributes.book_copy_original": "원본인", + "create.item_attributes.book_copy_original.inverted": "원본이지 않은", + "create.item_attributes.book_copy_first": "원본의 복사본인", + "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.astralsorcery_crystal": "%1$s 수정 속성을 가진", + "create.item_attributes.astralsorcery_crystal.inverted": "%1$s 수정 속성을 가지고 있지 않은", + "create.item_attributes.astralsorcery_constellation": "%1$s에 조율된", + "create.item_attributes.astralsorcery_constellation.inverted": "%1$s에 조율되지 않은", + "create.item_attributes.astralsorcery_perk_gem": "%1$s 퍽 속성을 가진", + "create.item_attributes.astralsorcery_perk_gem.inverted": "%1$s 퍽 속성을 가지고 있지 않은", + "create.item_attributes.astralsorcery_amulet": "%1$s이(가) 향상된", + "create.item_attributes.astralsorcery_amulet.inverted": "%1$s이(가) 향상되지 않은", - "create.gui.attribute_filter.no_selected_attributes": "속성이 선택되지 않음", - "create.gui.attribute_filter.selected_attributes": "선택된 속성:", - "create.gui.attribute_filter.add_attribute": "리스트에 속성을 추가합니다", - "create.gui.attribute_filter.add_inverted_attribute": "리스트에 반대 속성을 추가합니다.", - "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": "참고할 아이템을 추가하기", + "create.gui.attribute_filter.no_selected_attributes": "특성이 선택되지 않았습니다", + "create.gui.attribute_filter.selected_attributes": "특성 목록:", + "create.gui.attribute_filter.add_attribute": "선택한 특성을 목록에 추가", + "create.gui.attribute_filter.add_inverted_attribute": "선택한 특성에 반대되는 특성을 목록에 추가", + "create.gui.attribute_filter.allow_list_disjunctive": "허가 (아무)", + "create.gui.attribute_filter.allow_list_disjunctive.description": "목록에 나와 있는 특성이 하나라도 있는 아이템만 통과됩니다.", + "create.gui.attribute_filter.allow_list_conjunctive": "허가 (전부)", + "create.gui.attribute_filter.allow_list_conjunctive.description": "목록에 나와 있는 특성이 전부 있는 아이템만 통과됩니다.", + "create.gui.attribute_filter.deny_list": "금지", + "create.gui.attribute_filter.deny_list.description": "목록에 나와 있는 특성이 있지 않은 아이템만 통과됩니다.", + "create.gui.attribute_filter.add_reference_item": "참조할 아이템을 넣어주세요", - "create.tooltip.holdForDescription": "UNLOCALIZED: Hold [%1$s] for Summary", - "create.tooltip.holdForControls": "UNLOCALIZED: Hold [%1$s] for Controls", + "create.tooltip.holdForDescription": "[%1$s]을(를) 누르면 설명을 확인합니다", + "create.tooltip.holdForControls": "[%1$s]을(를) 누르면 조작법을 확인합니다", "create.tooltip.keyShift": "Shift", "create.tooltip.keyCtrl": "Ctrl", - "create.tooltip.speedRequirement": "회전속도 요구: %1$s", + "create.tooltip.speedRequirement": "요구 속도: %1$s", "create.tooltip.speedRequirement.none": "없음", "create.tooltip.speedRequirement.medium": "보통", "create.tooltip.speedRequirement.high": "빠름", - "create.tooltip.stressImpact": "피로도 부하: %1$s", + "create.tooltip.stressImpact": "동적 부하 영향력: %1$s", "create.tooltip.stressImpact.low": "낮음", "create.tooltip.stressImpact.medium": "보통", "create.tooltip.stressImpact.high": "높음", - "create.tooltip.stressImpact.overstressed": "과부하됨", - "create.tooltip.capacityProvided": "피로도 용량: %1$s", - "create.tooltip.capacityProvided.low": "적음", + "create.tooltip.stressImpact.overstressed": "과부하", + "create.tooltip.capacityProvided": "동적 부하 수용량: %1$s", + "create.tooltip.capacityProvided.low": "작음", "create.tooltip.capacityProvided.medium": "보통", "create.tooltip.capacityProvided.high": "큼", - "create.tooltip.generationSpeed": "%1$s %2$s만큼 발전함", - "create.tooltip.analogStrength": "레드스톤 출력: %1$s/15", + "create.tooltip.generationSpeed": "동력 생산: %1$s %2$s", + "create.tooltip.analogStrength": "전력: %1$s/15", - "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.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.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": "발사 지점이 설정되었습니다", + "create.weighted_ejector.target_not_valid": "인접한 블록에다 발사합니다 (발사 지점이 올바르지 않습니다)", + "create.weighted_ejector.no_target": "인접한 블록에다 발사합니다 (발사 지점이 설정되지 않았습니다)", + "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": "순서대로 옮김(강제적)", - "create.mechanical_arm.selection_mode.prefer_first": "첫 포인트 우선", + "create.mechanical_arm.selection_mode.round_robin": "돌아가며 처리", + "create.mechanical_arm.selection_mode.forced_round_robin": "강제적으로 돌아가며 처리", + "create.mechanical_arm.selection_mode.prefer_first": "설정 순서 우선시", - "create.tunnel.selection_mode.split": "분리", - "create.tunnel.selection_mode.forced_split": "강제 분리", - "create.tunnel.selection_mode.round_robin": "순차적 배분", - "create.tunnel.selection_mode.forced_round_robin": "강제 순차적 배분", - "create.tunnel.selection_mode.prefer_nearest": "가까운 곳 선호", - "create.tunnel.selection_mode.randomize": "랜덤", - "create.tunnel.selection_mode.synchronize": "입력부 동기화", + "create.tunnel.selection_mode.split": "분할", + "create.tunnel.selection_mode.forced_split": "강제적으로 분할", + "create.tunnel.selection_mode.round_robin": "돌아가며 처리", + "create.tunnel.selection_mode.forced_round_robin": "강제적으로 돌아가며 처리", + "create.tunnel.selection_mode.prefer_nearest": "가장 가까운 곳", + "create.tunnel.selection_mode.randomize": "무작위", + "create.tunnel.selection_mode.synchronize": "입력 동기화", - "create.tooltip.chute.header": "슈트 정보", - "create.tooltip.chute.items_move_down": "아이템이 아래로 이동합니다.", - "create.tooltip.chute.items_move_up": "아이템이 위로 이동합니다.", + "create.tooltip.chute.header": "도관 정보", + "create.tooltip.chute.items_move_down": "아이템이 아래로 이동", + "create.tooltip.chute.items_move_up": "아이템이 위로 이동", "create.tooltip.chute.no_fans_attached": "선풍기가 부착되지 않음", - "create.tooltip.chute.fans_push_up": "선풍기가 아래에서 밈", - "create.tooltip.chute.fans_push_down": "선풍기가 위에서 밈", - "create.tooltip.chute.fans_pull_up": "선풍기가 위에서 당김", - "create.tooltip.chute.fans_pull_down": "선풍기가 아래에서 당김", - "create.tooltip.chute.contains": "UNLOCALIZED: Contains: %1$s x%2$s", + "create.tooltip.chute.fans_push_up": "선풍기가 아래에서 밀어냄", + "create.tooltip.chute.fans_push_down": "선풍기가 위에서 밀어냄", + "create.tooltip.chute.fans_pull_up": "선풍기가 위에서 당겨냄", + "create.tooltip.chute.fans_pull_down": "선풍기가 아래에서 당겨냄", + "create.tooltip.chute.contains": "들어 있는 아이템: %1$s x%2$s", "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", @@ -1151,33 +1151,33 @@ "create.crafting_blueprint.secondary_display_slot": "UNLOCALIZED: Secondary Display Slot", "create.crafting_blueprint.optional": "UNLOCALIZED: Optional", - "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": "목표 없음", - "create.hint.mechanical_arm_no_targets": "이 _기계 팔_은 _목표_가 설정되지 않은 것 같습니다. _기계 팔을 손에 들고_ 벨트, 아이템 거치대, 깔때기를 _우클릭_하여 목표로 지정하세요.", - "create.hint.empty_bearing.title": "베어링 업데이트_", - "create.hint.empty_bearing": "_맨 손_으로 베어링을 _우클릭_하여 구조물을 _부착_하세요.", - "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": "무한한 공급량", + "create.hint.hose_pulley": "액체를 무한하다고 간주합니다.", + "create.hint.mechanical_arm_no_targets.title": "목표가 없음", + "create.hint.mechanical_arm_no_targets": "이 기계식 팔은 대상이 설정되어 있지 않습니다. 기계식 팔을 손에 들고 벨트, 아이템 거치대, 퍼널 등에 오른쪽 버튼을(를) 누르면 목표가 설정됩니다.", + "create.hint.empty_bearing.title": "회전장치 갱신", + "create.hint.empty_bearing": "비어있는 손으로 오른쪽 버튼을(를) 누르면 앞에 있는 구조물이 회전합니다.", + "create.hint.full_deployer.title": "전개장치에 아이템이 가득 참", + "create.hint.full_deployer": "이 _전개장치_에 아이템이 가득 찼습니다. 호퍼나 퍼널, 다른 수단을 써 아이템을 빼내세요.", - "create.gui.config.overlay1": "UNLOCALIZED: Hi :)", - "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", - "create.gui.config.overlay5": "UNLOCALIZED: Press ESC to exit this screen", - "create.gui.config.overlay6": "UNLOCALIZED: and save the new position", - "create.gui.config.overlay7": "UNLOCALIZED: Run /create overlay reset", - "create.gui.config.overlay8": "UNLOCALIZED: to reset to the default position", + "create.gui.config.overlay1": "안녕 :)", + "create.gui.config.overlay2": "이건 샘플 오버레이야.", + "create.gui.config.overlay3": "클릭하거나 드래그하면,", + "create.gui.config.overlay4": "이 미리 보기가 움직여.", + "create.gui.config.overlay5": "ESC를 누르면 이 화면에서 나가지고,", + "create.gui.config.overlay6": "변경된 위치가 저장될 거야.", + "create.gui.config.overlay7": "명령어 창에 /create overlay reset을 입력하면,", + "create.gui.config.overlay8": "오버레이가 기본 위치로 되돌아갈 거야.", "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.command.killTPSCommand.status.slowed_by.0": "[크리에이트]: 서버 틱이 현재 %s 밀리초만큼 느려졌습니다 :o", + "create.command.killTPSCommand.status.slowed_by.1": "[크리에이트]: 서버 틱이 지금 %s 밀리초만큼 느려졌습니다 >:)", + "create.command.killTPSCommand.status.slowed_by.2": "[크리에이트]: 서버 틱이 다시 정상 속도로 돌아왔습니다 :D", + "create.command.killTPSCommand.status.usage.0": "[크리에이트]: 사용법: /killtps stop 서버 틱 속도를 정상 속도로 되돌립니다", + "create.command.killTPSCommand.status.usage.1": "[크리에이트]: 사용법: /killtps start <틱 시간> 서버 틱 속도를 인위적으로 늦춥니다", + "create.command.killTPSCommand.argument.tickTime": "틱 시간", - "create.contraption.minecart_contraption_too_big": "UNLOCALIZED: This Cart Contraption seems too big to pick up", + "create.contraption.minecart_contraption_too_big": "이 수레에 붙은 장치가 너무 큽니다", "create.contraption.minecart_contraption_illegal_pickup": "UNLOCALIZED: A mystical force is binding this Cart Contraption to the world", @@ -1186,14 +1186,14 @@ "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.mechanical_press_activation_belt": "기계식 압착기가 무언가를 압착함", "create.subtitle.fwoomp": "UNLOCALIZED: Potato Launcher fwoomps", "create.subtitle.worldshaper_place": "UNLOCALIZED: Worldshaper zaps", "create.subtitle.depot_slide": "UNLOCALIZED: Item slides", "create.subtitle.saw_activate_stone": "UNLOCALIZED: Mechanical Saw activates", - "create.subtitle.blaze_munch": "블레이즈가 행복하게 섭취함", + "create.subtitle.blaze_munch": "블레이즈 가열기가 무언가를 먹어 치움", "create.subtitle.funnel_flap": "UNLOCALIZED: Funnel Flaps", - "create.subtitle.schematicannon_finish": "청사진 대포가 끝남", + "create.subtitle.schematicannon_finish": "설계대포가 알림을 울림", "create.subtitle.haunted_bell_use": "UNLOCALIZED: Haunted Bell tolls", "create.subtitle.scroll_value": "UNLOCALIZED: Scroll-input clicks", "create.subtitle.crafter_craft": "UNLOCALIZED: Crafter crafts", @@ -1201,7 +1201,7 @@ "create.subtitle.cranking": "UNLOCALIZED: Hand Crank turns", "create.subtitle.wrench_remove": "UNLOCALIZED: Component breaks", "create.subtitle.cogs": "UNLOCALIZED: Cogwheels rumble", - "create.subtitle.slime_added": "슬라임이 철퍽거림", + "create.subtitle.slime_added": "철퍽거리는 소리", "create.subtitle.wrench_rotate": "UNLOCALIZED: Wrench used", "create.subtitle.potato_hit": "UNLOCALIZED: Vegetable impacts", "create.subtitle.saw_activate_wood": "UNLOCALIZED: Mechanical Saw activates", @@ -1209,10 +1209,10 @@ "create.subtitle.deployer_polish": "UNLOCALIZED: Deployer applies polish", "create.subtitle.deny": "UNLOCALIZED: Declining boop", "create.subtitle.controller_click": "UNLOCALIZED: Controller clicks", - "create.subtitle.schematicannon_launch_block": "청사진 대포가 발포함", + "create.subtitle.schematicannon_launch_block": "설계대포가 무언가를 발포함", "create.subtitle.copper_armor_equip": "UNLOCALIZED: Diving equipment clinks", "create.subtitle.controller_take": "UNLOCALIZED: Lectern empties", - "create.subtitle.mechanical_press_activation": "압착기가 가동됨", + "create.subtitle.mechanical_press_activation": "기계식 압착기가 어딘가에 부딪히는 소리", "create.subtitle.contraption_assemble": "UNLOCALIZED: Contraption moves", "create.subtitle.crafter_click": "UNLOCALIZED: Crafter clicks", "create.subtitle.depot_plop": "UNLOCALIZED: Item lands", @@ -1221,58 +1221,58 @@ "_": "->------------------------] 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.condition1": "When this", - "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", - "item.create.example_item.tooltip.action1": "These controls are displayed.", + "item.create.example_item.tooltip": "예시 아이템 (그냥 설명만 확인하시면 됩니다)", + "item.create.example_item.tooltip.summary": "아이템에 대한 간단한 설명입니다. _밑줄_은 용어를 강조 표시합니다.", + "item.create.example_item.tooltip.condition1": "이것을 할 때", + "item.create.example_item.tooltip.behaviour1": "이것을 하면, 이 아이템이 이것을 수행합니다. (Shift을(를) 누르면 동작이 표시됩니다)", + "item.create.example_item.tooltip.condition2": "그리고, 이것을 할 때", + "item.create.example_item.tooltip.behaviour2": "원하는 만큼의 동작을 표시할 수 있습니다", + "item.create.example_item.tooltip.control1": "Ctrl을(를) 눌렀을 때", + "item.create.example_item.tooltip.action1": "이러한 조작법이 표시됩니다", "block.create.wooden_bracket.tooltip": "나무 지지대", - "block.create.wooden_bracket.tooltip.summary": "나무를 이용해 _축, 톱니바퀴, 파이프_를 꾸며보세요.", + "block.create.wooden_bracket.tooltip.summary": "_축_과 _톱니바퀴_, _액체관_을 장식할 수 있는 나무로 만든 지지대입니다.", "block.create.metal_bracket.tooltip": "금속 지지대", - "block.create.metal_bracket.tooltip.summary": "금속을 이용해 _축, 톱니바퀴, 파이프_를 꾸며보세요.", + "block.create.metal_bracket.tooltip.summary": "_축_과 _톱니바퀴_, _액체관_을 장식할 수 있는 견고한 공업용 지지대입니다.", - "block.create.seat.tooltip": "SEAT", - "block.create.seat.tooltip.summary": "앉아서 드라이브를 즐기세요! _움직이는 장치_에 _플레이어_를 _고정_시킵니다. 가구용으로도 좋습니다! 다양한 색깔이 존재합니다.", - "block.create.seat.tooltip.condition1": "좌석에 우클릭", - "block.create.seat.tooltip.behaviour1": "플레이어가 좌석에 _앉습니다_. _왼쪽 쉬프트_를 눌러 좌석에서 _일어섭니다_.", + "block.create.seat.tooltip": "좌석", + "block.create.seat.tooltip.summary": "앉으세요! 이동하는 _장치_에 플레이어를 고정합니다. 가구로 사용해도 괜찮습니다! 다양한 색상으로 염색할 수 있습니다.", + "block.create.seat.tooltip.condition1": "좌석에다 오른쪽 버튼을 눌렀을 때", + "block.create.seat.tooltip.behaviour1": "플레이어가 _좌석_에 앉습니다. L-shift을(를) 누르면 좌석에서 일어납니다.", "item.create.blaze_cake.tooltip": "블레이즈 케이크", - "item.create.blaze_cake.tooltip.summary": "열심히 일하는 _블레이즈_ _버너_의 식사입니다. 그들을 더 화끈하게 만드세요!", + "item.create.blaze_cake.tooltip.summary": "열심히 일하는 _블레이즈 가열기_를 위한 맛있는 음식입니다. 화력 상승!", - "item.create.wand_of_symmetry.tooltip": "SYMMETRY WAND", - "item.create.wand_of_symmetry.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.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": "HANDHELD WORLDSHAPER", - "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": "휴대용 세계성형기", + "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": "TREE FERTILIZER", - "item.create.tree_fertilizer.tooltip.summary": "일반적인 나무 종류들의 성장을 촉진시킬 강력한 미네랄의 혼합물입니다.", + "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": "EXTENDO GRIP", - "item.create.extendo_grip.tooltip.summary": "띠요오옹! 사용자의 _사거리_를 늘려줍니다.", - "item.create.extendo_grip.tooltip.condition1": "다른 손에 있을 때", - "item.create.extendo_grip.tooltip.behaviour1": "_기존_ _손_에있는 아이템의 사거리를 늘립니다.", + "item.create.extendo_grip.tooltip": "연장용 팔", + "item.create.extendo_grip.tooltip.summary": "띠요오용! 사용자의 _범위_가 많이 늘어납니다.", + "item.create.extendo_grip.tooltip.condition1": "주로 사용하지 않는 손에 있을 때", + "item.create.extendo_grip.tooltip.behaviour1": "_주로 사용하는 손_에 있는 아이템의 범위가 증가합니다.", "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", @@ -1283,118 +1283,118 @@ "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.filter.tooltip": "FILTER", - "item.create.filter.tooltip.summary": "장치의 _입력_과 _출력_을 필터 _아이템_ 목록에 따라 _조정_합니다.", + "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.behaviour1": "_설정_에 따라 아이템의 흐름을 제어합니다.", + "item.create.filter.tooltip.condition2": "오른쪽 버튼을 눌렀을 때", + "item.create.filter.tooltip.behaviour2": "_설정 창_이 열립니다.", - "item.create.attribute_filter.tooltip": "ATTRIBUTE FILTER", - "item.create.attribute_filter.tooltip.summary": "장치의 _입력_과 _출력_을 필터 _속성_ 목록에 따라 _조정_합니다.", + "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.behaviour1": "_설정_에 따라 아이템의 흐름을 제어합니다.", + "item.create.attribute_filter.tooltip.condition2": "오른쪽 버튼을 눌렀을 때", + "item.create.attribute_filter.tooltip.behaviour2": "_설정 창_이 열립니다.", - "item.create.empty_schematic.tooltip": "EMPTY SCHEMATIC", - "item.create.empty_schematic.tooltip.summary": "조합 재료로 쓰이거나 청사진 테이블에서 청사진을 불러올 때 쓰입니다.", + "item.create.empty_schematic.tooltip": "비어있는 설계도", + "item.create.empty_schematic.tooltip.summary": "_설계도 탁자_에서 설계도를 불러올 수 있습니다.", - "item.create.schematic.tooltip": "SCHEMATIC", - "item.create.schematic.tooltip.summary": "세계에 구조물을 _홀로그램으로_ 불러와 지정하고 설치합니다. 지정된 홀로그램은 _청사진_ _대포_의 _작업_ _영역_이 됩니다.", - "item.create.schematic.tooltip.condition1": "들고 있을 떄", - "item.create.schematic.tooltip.behaviour1": "UI의 도구로 _변경/설치_ 할 수 있습니다.", - "item.create.schematic.tooltip.control1": "웅크린 상태에서 우클릭", - "item.create.schematic.tooltip.action1": "정확한 _좌표_ 입력을 위한 창을 엽니다.", + "item.create.schematic.tooltip": "설계도", + "item.create.schematic.tooltip.summary": "원하는 위치에 홀로그램을 배치하고, 설계대포를 사용하여 구조물을 건설할 수 있습니다.", + "item.create.schematic.tooltip.condition1": "들고 있을 때", + "item.create.schematic.tooltip.behaviour1": "설계도의 _위치_를 지정할 수 있습니다.", + "item.create.schematic.tooltip.control1": "웅크리고 오른쪽 버튼을 눌렀을 때", + "item.create.schematic.tooltip.action1": "정확한 좌표를 입력할 수 있는 _설정 창_이 열립니다.", - "item.create.schematic_and_quill.tooltip": "SCHEMATIC AND QUILL", - "item.create.schematic_and_quill.tooltip.summary": "세계에 있는 구조물을 _.nbt파일_로 저장할 때 쓰입니다.", + "item.create.schematic_and_quill.tooltip": "설계도와 깃펜", + "item.create.schematic_and_quill.tooltip.summary": "구조물을 .nbt 파일로 저장할 수 있습니다.", "item.create.schematic_and_quill.tooltip.condition1": "1단계", - "item.create.schematic_and_quill.tooltip.behaviour1": "_두_ _모서리_를 우클릭으로 선택하세요.", + "item.create.schematic_and_quill.tooltip.behaviour1": "오른쪽 버튼을 눌러 구조물의 모서리를 지정합니다.", "item.create.schematic_and_quill.tooltip.condition2": "2단계", - "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": "_Scroll_를 이용하여 거리를 조정합니다.", - "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": "SCHEMATICANNON", - "block.create.schematicannon.tooltip.summary": "장착된 청사진을 바탕으로 블록들을 _발포_합니다. _화약_을 연료로 사용하고 주변 인벤토리 공간에서 아이템을 사용합니다.", - "block.create.schematicannon.tooltip.condition1": "UNLOCALIZED: When R-Clicked", - "block.create.schematicannon.tooltip.behaviour1": "UNLOCALIZED: Opens the _Interface_", + "block.create.schematicannon.tooltip": "설계대포", + "block.create.schematicannon.tooltip.summary": "_화약_을 연료로 사용하며, 상자 같은 저장소 안에 있는 아이템을 사용하여 설계도대로 구조물을 건설합니다.", + "block.create.schematicannon.tooltip.condition1": "오른쪽 버튼을 눌렀을 때", + "block.create.schematicannon.tooltip.behaviour1": "_설정 창_이 열립니다", - "block.create.schematic_table.tooltip": "SCHEMATIC TABLE", - "block.create.schematic_table.tooltip.summary": "_빈_ _청사진_에 저장된 청사진을 불러옵니다.", - "block.create.schematic_table.tooltip.condition1": "빈 청사진을 넣을 때", - "block.create.schematic_table.tooltip.behaviour1": "Schematics 폴더에서 선택한 파일을 업로드합니다.", + "block.create.schematic_table.tooltip": "설계도 탁자", + "block.create.schematic_table.tooltip.summary": "저장된 설계도를 _비어있는 설계도_에 기록할 수 있습니다.", + "block.create.schematic_table.tooltip.condition1": "비어있는 설계도가 올려졌을 때", + "block.create.schematic_table.tooltip.behaviour1": "_선택한 설계도_를 비어있는 설계도로 전송할 수 있습니다.", - "item.create.goggles.tooltip": "GOGGLES", - "item.create.goggles.tooltip.summary": "_장치 정보_를 착용자의 시야에 띄어주는 안경입니다.", + "item.create.goggles.tooltip": "안경", + "item.create.goggles.tooltip.summary": "_장치의 정보_를 두 눈으로 직접 확인할 수 있도록, 시야가 증강되게 만들어주는 유용한 안경입니다.", "item.create.goggles.tooltip.condition1": "장착했을 때", - "item.create.goggles.tooltip.behaviour1": "해당 장치의 _속도_, _피로도_, _용량_을 레벨에 따라 에 따라 색상 UI를 보여줍니다.", - "item.create.goggles.tooltip.condition2": "계측기를 바라볼 때", - "item.create.goggles.tooltip.behaviour2": "계측기가 연결된 네트워크의 _속도_나 _스트레스_의 자세한 정보를 보여줍니다.", - "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.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": "WRENCH", - "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": "스패너", + "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": "NOZZLE", - "block.create.nozzle.tooltip.summary": "덮힌 환풍기 _앞_에 붙여 환풍기의 효과를 _전방_으로 _확대_합니다.", + "block.create.nozzle.tooltip": "분출구", + "block.create.nozzle.tooltip.summary": "_공업용 선풍기_의 앞에 붙이면 바람이 사방팔방으로 흩어져 나갑니다.", - "block.create.cuckoo_clock.tooltip": "CUCKOO CLOCK", - "block.create.cuckoo_clock.tooltip.summary": "_시간의_ _흐름_을 알고 공간을 _꾸미는_ 데 좋은 공예품입니다.", - "block.create.cuckoo_clock.tooltip.condition1": "회전할 때", - "block.create.cuckoo_clock.tooltip.behaviour1": "현재 시각을 보여주고 하루에 두 번 울립니다. 점심과 플레이어가 바로 잘 수 있는 저녁에 울립니다.", + "block.create.cuckoo_clock.tooltip": "뻐꾸기시계", + "block.create.cuckoo_clock.tooltip.summary": "공간을 장식하고 _시간_을 알려주는 정교한 장치입니다.", + "block.create.cuckoo_clock.tooltip.condition1": "동력을 받았을 때", + "block.create.cuckoo_clock.tooltip.behaviour1": "_현재 시각_을 표시합니다. 정오와 플레이어가 잠을 잘 수 있게 되는 시각에 작동합니다.", - "block.create.turntable.tooltip": "TURNTABLE", - "block.create.turntable.tooltip.summary": "_회전력_으로 _멀미_를 일으킵니다.", + "block.create.turntable.tooltip": "회전대", + "block.create.turntable.tooltip.summary": "_회전력_을 받으면 회전합니다. 회전력을 받은 회전대 위에 올라서면 미묘한 멀미가 일어납니다.", - "block.create.stockpile_switch.tooltip": "stockpile_switch", - "block.create.stockpile_switch.tooltip.summary": "붙어있는 _저장소_에 들어있는 아이템을 기반으로 레드스톤 신호를 보냅니다. 필터도 제공됩니다. _비교기_와 반대로, 수량 스위치는 신호가 반전되는 _임계점_을 조절할 수 있습니다.", - "block.create.stockpile_switch.tooltip.condition1": "우클릭 할 때", - "block.create.stockpile_switch.tooltip.behaviour1": "UI를 엽니다.", + "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": "CONTENT OBSERVER", - "block.create.content_observer.tooltip.summary": "저장소나 벨트의 아이템을 등록된 _필터_를 이용해 _탐지_합니다. _인벤토리, 벨트, 슈트_ 안에 해당 아이템을 탐지하는 동안, 레드스톤 신호를 보냅니다. _깔대기_가 해당 아이템을 수송하면, _1틱_의 레드스톤 신호를 보냅니다.", + "block.create.content_observer.tooltip": "아이템 감지기", + "block.create.content_observer.tooltip.summary": "설정된 _필터_와 일치하는 아이템을 감지합니다. 붙어있는 벨트나 도관, 저장소에 일치하는 아이템이 있다면 장치가 레드스톤 신호를 내보내고, _퍼널_이 아이템을 전송해도 장치가 레드스톤 신호를 내보냅니다.", - "block.create.adjustable_crate.tooltip": "ADJUSTABLE CRATE", - "block.create.adjustable_crate.tooltip.summary": "이 저장소는 용량을 _직접_ _정할_ 수 있습니다. 아무아이템이나 최대 16스택씩 담을 수 있습니다. 레드스톤 비교기와 호환됩니다.", - "block.create.adjustable_crate.tooltip.condition1": "UNLOCALIZED: When R-Clicked", - "block.create.adjustable_crate.tooltip.behaviour1": "UNLOCALIZED: Opens the _Interface_.", + "block.create.adjustable_crate.tooltip": "조절식 상자", + "block.create.adjustable_crate.tooltip.summary": "이 _아이템 저장소_는 용량을 수동으로 조절할 수 있습니다. 아이템을 최대 16묶음까지 넣을 수 있고, 레드스톤 비교기와 같이 사용할 수 있습니다.", + "block.create.adjustable_crate.tooltip.condition1": "오른쪽 버튼을 눌렀을 때", + "block.create.adjustable_crate.tooltip.behaviour1": "_설정 창_이 열립니다.", - "block.create.creative_crate.tooltip": "THE ENDLESS CRATE", - "block.create.creative_crate.tooltip.summary": "이 상자는 아무 아이템을 _무한히_ 저장합니다. 청사진 대포 옆에 놓을 시 준비물을 _전부_ 공급합니다.", - "block.create.creative_crate.tooltip.condition1": "필터에 아이템을 설정할 시", - "block.create.creative_crate.tooltip.behaviour1": "선택된 아이템을 _무한정_으로 _빼낼_ 수 있습니다. 대신 _들어간_ 아이템은 _삭제_됩니다.", + "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.controller_rail.tooltip": "CONTROLLER RAIL", - "block.create.controller_rail.tooltip.summary": "_광산 수레_의 _이동속도_를 _세밀하게_ _조정_할 수 있는 _양방향_ _전동 레일_입니다.", - "block.create.controller_rail.tooltip.condition1": "레드스톤 신호를 받을 때", - "block.create.controller_rail.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": "_신호의 세기_에 따라 _광산 수레_의 속도가 가속되거나 감속됩니다. 근처에 레일이 있다면 레일에 신호를 전파합니다. 두 제어 레일에 각자 다른 세기의 신호를 공급할 때 그 사이에 제어 레일이 연결되어 있다면, 사이에 있는 제어 레일은 두 세기의 사이 신호를 받습니다.", - "item.create.sand_paper.tooltip": "SAND PAPER", - "item.create.sand_paper.tooltip.summary": "재료들을 _윤내는 데_ 쓰이는 거친 종이입니다. 배포기가 자동으로 쓸 수 있습니다.", - "item.create.sand_paper.tooltip.condition1": "사용할 때", - "item.create.sand_paper.tooltip.behaviour1": "_다른 손_에있는 아이템과 _바닥에 있는 아이템_을 윤냅니다.", + "item.create.sand_paper.tooltip": "사포", + "item.create.sand_paper.tooltip.summary": "_재료_를 _갈아낼_ 수 있는 거친 종이입니다. 전개장치를 사용하여 자동으로 재료를 갈아낼 수 있습니다.", + "item.create.sand_paper.tooltip.condition1": "사용하는 방법", + "item.create.sand_paper.tooltip.behaviour1": "_손_에 아이템을 들고, _반대 손_에 사포를 든 상태로 오른쪽 버튼을 누르거나 떨어져 있는 아이템을 바라보고 오른쪽 버튼을 누르면 아이템을 갈아냅니다.", - "item.create.builders_tea.tooltip": "BUILDERS TEA", - "item.create.builders_tea.tooltip.summary": "하루를 시작하기에 좋은 음료입니다. _ 새로운 영감_을 줍니다.", + "item.create.builders_tea.tooltip": "건축가의 차", + "item.create.builders_tea.tooltip.summary": "하루를 시작하기 위한 완벽한 차입니다. -_동기_와 _포만감_을 줍니다.", - "item.create.refined_radiance.tooltip": "REFINED RADIANCE", - "item.create.refined_radiance.tooltip.summary": "_흡수된_ _빛_으로 제련된 색채 혼합물입니다.", + "item.create.refined_radiance.tooltip": "섬세한 섬광", + "item.create.refined_radiance.tooltip.summary": "_흡수의 빛_으로 제련된 혼돈의 혼합물입니다.", "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.shadow_steel.tooltip": "SHADOW STEEL", - "item.create.shadow_steel.tooltip.summary": "_공허_에서 제련된 색채 혼합물입니다.", + "item.create.shadow_steel.tooltip": "그림자 금속", + "item.create.shadow_steel.tooltip.summary": "_공허_에서 제련된 혼돈의 혼합물입니다.", "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.", @@ -1433,10 +1433,10 @@ "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.minecart_coupling.tooltip": "MINECART COUPLING", - "item.create.minecart_coupling.tooltip.summary": "당신의 모든 _수레들을 이어 _멋진 _기차_를 만들어보세요.", - "item.create.minecart_coupling.tooltip.condition1": "광산 수레에 사용할 때", - "item.create.minecart_coupling.tooltip.behaviour1": "_두 수레를 묶어_ 이동할 때 고정된 _거리를 유지하게_ 합니다.", + "item.create.minecart_coupling.tooltip": "광산 수레 이음쇠", + "item.create.minecart_coupling.tooltip.summary": "_광산 수레_를 연결하여 장엄한 기차를 만들 수 있습니다.", + "item.create.minecart_coupling.tooltip.condition1": "광산 수레에 사용했을 때", + "item.create.minecart_coupling.tooltip.behaviour1": "두 광산 수레가 연결되어 이동할 때 일정한 거리를 유지하게 만듭니다.", "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...", @@ -1449,223 +1449,223 @@ "_": "->------------------------] Ponder Content [------------------------<-", - "create.ponder.hold_to_ponder": "UNLOCALIZED: Hold [%1$s] to Ponder", - "create.ponder.subject": "UNLOCALIZED: Subject of this scene", - "create.ponder.pondering": "UNLOCALIZED: Pondering about...", - "create.ponder.identify_mode": "UNLOCALIZED: Identify mode active.\nUnpause with [%1$s]", - "create.ponder.associated": "UNLOCALIZED: Associated Entries", - "create.ponder.close": "UNLOCALIZED: Close", - "create.ponder.identify": "UNLOCALIZED: Identify", - "create.ponder.next": "UNLOCALIZED: Next Scene", - "create.ponder.previous": "UNLOCALIZED: Previous Scene", - "create.ponder.replay": "UNLOCALIZED: Replay", - "create.ponder.think_back": "UNLOCALIZED: Think Back", - "create.ponder.slow_text": "UNLOCALIZED: Comfy Reading", + "create.ponder.hold_to_ponder": "[%1$s]을(를) 누르면 이 아이템을 분석합니다", + "create.ponder.subject": "이 분석의 주제", + "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.replay": "다시 보기", + "create.ponder.think_back": "되짚어보기", + "create.ponder.slow_text": "천천히 읽기", "create.ponder.exit": "UNLOCALIZED: Exit", "create.ponder.welcome": "UNLOCALIZED: Welcome to Ponder", "create.ponder.categories": "UNLOCALIZED: Available Categories in Create", "create.ponder.index_description": "UNLOCALIZED: Click one of the icons to learn about its associated Items and Blocks", "create.ponder.index_title": "UNLOCALIZED: Ponder Index", - "create.ponder.shared.movement_anchors": "UNLOCALIZED: With the help of Chassis or Super Glue, larger structures can be moved.", - "create.ponder.shared.rpm32": "UNLOCALIZED: 32 RPM", - "create.ponder.shared.sneak_and": "UNLOCALIZED: Sneak +", - "create.ponder.shared.storage_on_contraption": "UNLOCALIZED: Inventories attached to the Contraption will pick up their drops automatically", - "create.ponder.shared.behaviour_modify_wrench": "UNLOCALIZED: This behaviour can be modified using a Wrench", - "create.ponder.shared.rpm8": "UNLOCALIZED: 8 RPM", - "create.ponder.shared.ctrl_and": "UNLOCALIZED: Ctrl +", - "create.ponder.shared.rpm16_source": "UNLOCALIZED: Source: 16 RPM", - "create.ponder.shared.rpm16": "UNLOCALIZED: 16 RPM", - "create.ponder.tag.kinetic_sources": "UNLOCALIZED: Kinetic Sources", - "create.ponder.tag.kinetic_sources.description": "UNLOCALIZED: Components which generate Rotational Force", - "create.ponder.tag.contraption_actor": "UNLOCALIZED: Contraption Actors", - "create.ponder.tag.contraption_actor.description": "UNLOCALIZED: Components which expose special behaviour when attached to a moving contraption", - "create.ponder.tag.arm_targets": "UNLOCALIZED: Targets for Mechanical Arms", - "create.ponder.tag.arm_targets.description": "UNLOCALIZED: Components which can be selected as inputs or outputs to the Mechanical Arm", - "create.ponder.tag.logistics": "UNLOCALIZED: Item Transportation", - "create.ponder.tag.logistics.description": "UNLOCALIZED: Components which help moving items around", - "create.ponder.tag.movement_anchor": "UNLOCALIZED: Movement Anchors", - "create.ponder.tag.movement_anchor.description": "UNLOCALIZED: Components which allow the creation of moving contraptions, animating an attached structure in a variety of ways", - "create.ponder.tag.creative": "UNLOCALIZED: Creative Mode", - "create.ponder.tag.creative.description": "UNLOCALIZED: Components not usually available for Survival Mode", - "create.ponder.tag.kinetic_relays": "UNLOCALIZED: Kinetic Blocks", - "create.ponder.tag.kinetic_relays.description": "UNLOCALIZED: Components which help relaying Rotational Force elsewhere", - "create.ponder.tag.windmill_sails": "UNLOCALIZED: Sails for Windmill Bearings", - "create.ponder.tag.windmill_sails.description": "UNLOCALIZED: Blocks that count towards the strength of a Windmill Contraption when assembled. Each of these have equal efficiency in doing so.", - "create.ponder.tag.contraption_assembly": "UNLOCALIZED: Block Attachment Utility", - "create.ponder.tag.contraption_assembly.description": "UNLOCALIZED: Tools and Components used to assemble structures moved as an animated Contraption", - "create.ponder.tag.decoration": "UNLOCALIZED: Aesthetics", - "create.ponder.tag.decoration.description": "UNLOCALIZED: Components used mostly for decorative purposes", - "create.ponder.tag.kinetic_appliances": "UNLOCALIZED: Kinetic Appliances", - "create.ponder.tag.kinetic_appliances.description": "UNLOCALIZED: Components which make use of Rotational Force", - "create.ponder.tag.redstone": "UNLOCALIZED: Logic Components", - "create.ponder.tag.redstone.description": "UNLOCALIZED: Components which help with redstone engineering", - "create.ponder.tag.fluids": "UNLOCALIZED: Fluid Manipulators", - "create.ponder.tag.fluids.description": "UNLOCALIZED: Components which help relaying and making use of Fluids", + "create.ponder.shared.movement_anchors": "연결대나 강력 접착제의 도움으로 큰 구조물을 움직이게 만들 수 있습니다", + "create.ponder.shared.rpm32": "32 RPM / 분당 회전수", + "create.ponder.shared.sneak_and": "웅크리기 +", + "create.ponder.shared.storage_on_contraption": "장치에 저장소를 붙이면, 자동으로 떨어져 있는 아이템을 줍습니다", + "create.ponder.shared.behaviour_modify_wrench": "이러한 방식은 스패너를 사용하여 변경할 수 있습니다", + "create.ponder.shared.rpm8": "8 RPM / 분당 회전수", + "create.ponder.shared.ctrl_and": "Ctrl +", + "create.ponder.shared.rpm16_source": "근원: 16 RPM / 분당 회전수", + "create.ponder.shared.rpm16": "16 RPM / 분당 회전수", + "create.ponder.tag.kinetic_sources": "동적 근원", + "create.ponder.tag.kinetic_sources.description": "회전력을 만들어 내는 장치입니다.", + "create.ponder.tag.contraption_actor": "동작장치", + "create.ponder.tag.contraption_actor.description": "웅직이는 장치에 부착하면 특정한 행동을 보이는 장치입니다.", + "create.ponder.tag.arm_targets": "기계식 팔의 대상", + "create.ponder.tag.arm_targets.description": "기계식 팔의 입력구나 출력구로 선택할 수 있는 장치입니다.", + "create.ponder.tag.logistics": "아이템 이동", + "create.ponder.tag.logistics.description": "아이템을 옮기거나 옮기는 것을 도와주는 장치입니다.", + "create.ponder.tag.movement_anchor": "부착장치", + "create.ponder.tag.movement_anchor.description": "다양한 방법으로 구조물을 부착하여 움직이게 만드는 장치입니다.", + "create.ponder.tag.creative": "크리에이티브 모드", + "create.ponder.tag.creative.description": "일반적으로 서바이벌 모드에서는 이용할 수 없는 장치입니다.", + "create.ponder.tag.kinetic_relays": "동적 블록", + "create.ponder.tag.kinetic_relays.description": "회전력을 다른 방향으로 전달하는 장치입니다.", + "create.ponder.tag.windmill_sails": "날개 블록과 풍차 회전장치", + "create.ponder.tag.windmill_sails.description": "풍차에 이용할 수 있는 풍차의 힘을 결정하는 블록입니다. 이러한 블록들은 모두 동일한 효율을 냅니다.", + "create.ponder.tag.contraption_assembly": "블록 부착 아이템", + "create.ponder.tag.contraption_assembly.description": "구조물을 연결할 수 있는 도구, 장치입니다.", + "create.ponder.tag.decoration": "미적 블록", + "create.ponder.tag.decoration.description": "주로 장식용으로 이용되는 장치입니다.", + "create.ponder.tag.kinetic_appliances": "동적 기계장치", + "create.ponder.tag.kinetic_appliances.description": "회전력을 이용하는 장치입니다.", + "create.ponder.tag.redstone": "레드스톤 장치", + "create.ponder.tag.redstone.description": "레드스톤 공학에 이용할 수 있는 장치입니다.", + "create.ponder.tag.fluids": "액체 조종장치", + "create.ponder.tag.fluids.description": "액체를 전달하고 이용할 수 있는 장치입니다.", - "create.ponder.adjustable_pulse_repeater.header": "UNLOCALIZED: Controlling signals using Adjustable Pulse Repeaters", - "create.ponder.adjustable_pulse_repeater.text_1": "UNLOCALIZED: Adjustable Pulse Repeaters emit a short pulse at a delay", - "create.ponder.adjustable_pulse_repeater.text_2": "UNLOCALIZED: Using the mouse wheel, the charge time can be configured", - "create.ponder.adjustable_pulse_repeater.text_3": "UNLOCALIZED: Configured delays can range up to 30 minutes", + "create.ponder.adjustable_pulse_repeater.header": "조절식 순간작동 중계기를 통한 신호 제어", + "create.ponder.adjustable_pulse_repeater.text_1": "조절식 순간작동 중계기는 지연 후에 짧은 신호를 내보냅니다", + "create.ponder.adjustable_pulse_repeater.text_2": "스크롤하여, 지연 시간을 설정할 수 있습니다", + "create.ponder.adjustable_pulse_repeater.text_3": "설정할 수 있는 최대 지연 시간은 30분입니다", - "create.ponder.adjustable_repeater.header": "UNLOCALIZED: Controlling signals using Adjustable Repeaters", - "create.ponder.adjustable_repeater.text_1": "UNLOCALIZED: Adjustable Repeaters behave similarly to regular Repeaters", - "create.ponder.adjustable_repeater.text_2": "UNLOCALIZED: They charge up for a set time...", - "create.ponder.adjustable_repeater.text_3": "UNLOCALIZED: ...and cool down for the same duration", - "create.ponder.adjustable_repeater.text_4": "UNLOCALIZED: Using the mouse wheel, the charge time can be configured", - "create.ponder.adjustable_repeater.text_5": "UNLOCALIZED: Configured delays can range up to 30 minutes", + "create.ponder.adjustable_repeater.header": "조절식 중계기를 통한 신호 제어", + "create.ponder.adjustable_repeater.text_1": "조절식 중계기는 일반적인 중계기와 비슷하게 작동합니다", + "create.ponder.adjustable_repeater.text_2": "지연 후에 신호를 내보내고...", + "create.ponder.adjustable_repeater.text_3": "...지연 시간만큼 신호가 남습니다", + "create.ponder.adjustable_repeater.text_4": "스크롤하여, 지연 시간을 설정할 수 있습니다", + "create.ponder.adjustable_repeater.text_5": "설정할 수 있는 최대 지연 시간은 30분입니다", - "create.ponder.analog_lever.header": "UNLOCALIZED: Controlling signals using the Analog Lever", - "create.ponder.analog_lever.text_1": "UNLOCALIZED: Analog Levers make for a compact and precise source of redstone power", - "create.ponder.analog_lever.text_2": "UNLOCALIZED: Right-click to increase its analog power output", - "create.ponder.analog_lever.text_3": "UNLOCALIZED: Right-click while Sneaking to decrease the power output again", + "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": "UNLOCALIZED: Using Andesite Tunnels", - "create.ponder.andesite_tunnel.text_1": "UNLOCALIZED: Andesite Tunnels can be used to cover up your belts", - "create.ponder.andesite_tunnel.text_2": "UNLOCALIZED: Whenever an Andesite Tunnel has connections to the sides...", - "create.ponder.andesite_tunnel.text_3": "UNLOCALIZED: ...they will split exactly one item off of any passing stacks", - "create.ponder.andesite_tunnel.text_4": "UNLOCALIZED: The remainder will continue on its path", + "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_4": "나머지 아이템은 계속 수송됩니다", - "create.ponder.basin.header": "UNLOCALIZED: Processing Items in the Basin", - "create.ponder.basin.text_1": "UNLOCALIZED: A Basin can hold Items and Fluids for Processing", - "create.ponder.basin.text_2": "UNLOCALIZED: After a processing step, basins try to output below to the side of them", - "create.ponder.basin.text_3": "UNLOCALIZED: When a valid component is present, the Basin will show an output faucet", - "create.ponder.basin.text_4": "UNLOCALIZED: A number of options are applicable here", - "create.ponder.basin.text_5": "UNLOCALIZED: Outputs will be caught by the inventory below", - "create.ponder.basin.text_6": "UNLOCALIZED: Without output faucet, the Basin will retain items created in its processing", - "create.ponder.basin.text_7": "UNLOCALIZED: This can be useful if outputs should be re-used as ingredients", - "create.ponder.basin.text_8": "UNLOCALIZED: Desired outputs will then have to be extracted from the basin", - "create.ponder.basin.text_9": "UNLOCALIZED: A Filter might be necessary to avoid pulling out un-processed items", + "create.ponder.basin.header": "대야를 통한 아이템 처리", + "create.ponder.basin.text_1": "대야는 아이템과 액체를 저장하고 처리할 수 있습니다", + "create.ponder.basin.text_2": "처리되면, 대야는 대야의 측면 아래쪽에 처리된 아이템을 출력하려 합니다", + "create.ponder.basin.text_3": "아래에 출력 블록이 있다면, 대야에 출력 구멍이 나타납니다", + "create.ponder.basin.text_4": "다양한 블록들을 출력 블록으로 사용할 수 있습니다", + "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.bearing_modes.header": "UNLOCALIZED: Movement Modes of the Mechanical Bearing", - "create.ponder.bearing_modes.text_1": "UNLOCALIZED: When Stopped, the Bearing will place the structure at the nearest grid-aligned Angle", - "create.ponder.bearing_modes.text_2": "UNLOCALIZED: It can be configured never to revert to solid blocks, or only near the angle it started at", + "create.ponder.bearing_modes.header": "기계식 회전장치의 회전 방식", + "create.ponder.bearing_modes.text_1": "회전장치가 작동을 멈출 때마다 구조물이 가장 가까운 각도에서 블록으로 되돌아갑니다", + "create.ponder.bearing_modes.text_2": "초기 각도에 근접해 있는 경우에만 설치되어 있게 만들거나 절대 설치되어 있지 않게 만들도록 설정할 수 있습니다", - "create.ponder.belt_casing.header": "UNLOCALIZED: Encasing Belts", - "create.ponder.belt_casing.text_1": "UNLOCALIZED: Brass or Andesite Casing can be used to decorate Mechanical Belts", - "create.ponder.belt_casing.text_2": "UNLOCALIZED: A wrench can be used to remove the casing", + "create.ponder.belt_casing.header": "틀을 씌운 벨트", + "create.ponder.belt_casing.text_1": "황동 틀이나 안산암 틀로 벨트를 장식할 수 있습니다", + "create.ponder.belt_casing.text_2": "스패너를 사용하면 틀을 해체할 수 있습니다", - "create.ponder.belt_connector.header": "UNLOCALIZED: Using Mechanical Belts", - "create.ponder.belt_connector.text_1": "UNLOCALIZED: Right-Clicking two shafts with a belt item will connect them together", - "create.ponder.belt_connector.text_2": "UNLOCALIZED: Accidental selections can be canceled with Right-Click while Sneaking", - "create.ponder.belt_connector.text_3": "UNLOCALIZED: Additional Shafts can be added throughout the Belt", - "create.ponder.belt_connector.text_4": "UNLOCALIZED: Shafts connected via Belts will rotate with Identical Speed and Direction", - "create.ponder.belt_connector.text_5": "UNLOCALIZED: Added shafts can be removed using the wrench", - "create.ponder.belt_connector.text_6": "UNLOCALIZED: Mechanical Belts can be dyed for aesthetic purposes", + "create.ponder.belt_connector.header": "벨트의 이용", + "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_5": "추가된 축은 스패너로 해체할 수 있습니다", + "create.ponder.belt_connector.text_6": "벨트는 염료로 염색할 수 있습니다", - "create.ponder.belt_directions.header": "UNLOCALIZED: Valid Orientations for Mechanical Belts", - "create.ponder.belt_directions.text_1": "UNLOCALIZED: Belts cannot connect in arbitrary directions", - "create.ponder.belt_directions.text_2": "UNLOCALIZED: 1. They can connect horizontally", - "create.ponder.belt_directions.text_3": "UNLOCALIZED: 2. They can connect diagonally", - "create.ponder.belt_directions.text_4": "UNLOCALIZED: 3. They can connect vertically", - "create.ponder.belt_directions.text_5": "UNLOCALIZED: 4. And they can connect vertical shafts horizontally", - "create.ponder.belt_directions.text_6": "UNLOCALIZED: These are all possible directions. Belts can span any Length between 2 and 20 blocks", + "create.ponder.belt_directions.header": "벨트의 유효한 방향", + "create.ponder.belt_directions.text_1": "벨트는 아무 방향으로나 연결할 수 없습니다", + "create.ponder.belt_directions.text_2": "1. 수평으로 연결할 수 있습니다", + "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_transport.header": "UNLOCALIZED: Using Mechanical Belts for Logistics", - "create.ponder.belt_transport.text_1": "UNLOCALIZED: Moving belts will transport Items and other Entities", - "create.ponder.belt_transport.text_2": "UNLOCALIZED: Right-Click with an empty hand to take items off a belt", + "create.ponder.belt_transport.header": "벨트의 물류적 이용", + "create.ponder.belt_transport.text_1": "벨트가 이동하면 아이템과 기타 엔티티가 운송됩니다", + "create.ponder.belt_transport.text_2": "비어있는 손으로 오른쪽 버튼을 눌러 벨트에 있는 아이템을 가져갈 수 있습니다", - "create.ponder.blaze_burner.header": "UNLOCALIZED: Feeding Blaze Burners", - "create.ponder.blaze_burner.text_1": "UNLOCALIZED: Blaze Burners can provide Heat to Items processed in a Basin", - "create.ponder.blaze_burner.text_2": "UNLOCALIZED: For this, the Blaze has to be fed with flammable items", - "create.ponder.blaze_burner.text_3": "UNLOCALIZED: With a Blaze Cake, the Burner can reach an even stronger level of heat", - "create.ponder.blaze_burner.text_4": "UNLOCALIZED: The feeding process can be automated using Deployers or Mechanical Arms", + "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.brass_funnel.header": "UNLOCALIZED: The Brass Funnel", - "create.ponder.brass_funnel.text_1": "UNLOCALIZED: Andesite Funnels can only ever extract single items.", - "create.ponder.brass_funnel.text_2": "UNLOCALIZED: Brass Funnels can extract up to a full stack.", - "create.ponder.brass_funnel.text_3": "UNLOCALIZED: Scrolling on the filter slot allows for precise control over the extracted stack size.", - "create.ponder.brass_funnel.text_4": "UNLOCALIZED: Using items on the filter slot will restrict the funnel to only transfer matching stacks.", + "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_tunnel.header": "UNLOCALIZED: Using Brass Tunnels", - "create.ponder.brass_tunnel.text_1": "UNLOCALIZED: Brass Tunnels can be used to cover up your belts", - "create.ponder.brass_tunnel.text_2": "UNLOCALIZED: Brass Tunnels have filter slots on each open side", - "create.ponder.brass_tunnel.text_3": "UNLOCALIZED: Filters on inbound connections simply block non-matching items", - "create.ponder.brass_tunnel.text_4": "UNLOCALIZED: Filters on outbound connections can be used to sort items by type", - "create.ponder.brass_tunnel.text_5": "UNLOCALIZED: Whenever a passing item has multiple valid exits, the distribution mode will decide how to handle it", - "create.ponder.brass_tunnel.text_6": "UNLOCALIZED: Brass Tunnels on parallel belts will form a group", - "create.ponder.brass_tunnel.text_7": "UNLOCALIZED: Incoming Items will now be distributed across all connected exits", - "create.ponder.brass_tunnel.text_8": "UNLOCALIZED: For this, items can also be inserted into the Tunnel block directly", + "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_6": "붙어있는 벨트에 황동 터널을 설치하면 터널끼리 연결할 수 있습니다", + "create.ponder.brass_tunnel.text_7": "연결된 출력구는 들어오는 아이템을 분류합니다", + "create.ponder.brass_tunnel.text_8": "아이템을 분류하기 위해, 퍼널로 아이템을 직접 넣을 수도 있습니다", - "create.ponder.brass_tunnel_modes.header": "UNLOCALIZED: Distribution Modes of the Brass Tunnel", - "create.ponder.brass_tunnel_modes.text_1": "UNLOCALIZED: Using a Wrench, the distribution behaviour of Brass Tunnels can be configured", - "create.ponder.brass_tunnel_modes.text_10": "UNLOCALIZED: 'Synchronize Inputs' is a unique setting for Brass Tunnels", - "create.ponder.brass_tunnel_modes.text_11": "UNLOCALIZED: Items are only allowed past if every tunnel in the group has one waiting", - "create.ponder.brass_tunnel_modes.text_12": "UNLOCALIZED: This ensures that all affected belts supply items at the same rate", - "create.ponder.brass_tunnel_modes.text_2": "UNLOCALIZED: 'Split' will attempt to distribute the stack evenly between available outputs", - "create.ponder.brass_tunnel_modes.text_3": "UNLOCALIZED: If an output is unable to take more items, it will be skipped", - "create.ponder.brass_tunnel_modes.text_4": "UNLOCALIZED: 'Forced Split' will never skip outputs, and instead wait until they are free", - "create.ponder.brass_tunnel_modes.text_5": "UNLOCALIZED: 'Round Robin' keeps stacks whole, and cycles through outputs iteratively", - "create.ponder.brass_tunnel_modes.text_6": "UNLOCALIZED: Once Again, if an output is unable to take more items, it will be skipped", - "create.ponder.brass_tunnel_modes.text_7": "UNLOCALIZED: 'Forced Round Robin' never skips outputs", - "create.ponder.brass_tunnel_modes.text_8": "UNLOCALIZED: 'Prefer Nearest' prioritizes the outputs closest to the items' input location", - "create.ponder.brass_tunnel_modes.text_9": "UNLOCALIZED: 'Randomize' will distribute whole stacks to randomly picked outputs", + "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.cart_assembler.header": "UNLOCALIZED: Moving Structures using Cart Assemblers", - "create.ponder.cart_assembler.text_1": "UNLOCALIZED: Powered Cart Assemblers mount attached structures to passing Minecarts", - "create.ponder.cart_assembler.text_2": "UNLOCALIZED: Without a redstone signal, it disassembles passing cart contraptions back into blocks", - "create.ponder.cart_assembler.text_3": "UNLOCALIZED: Using a Wrench on the Minecart will let you carry the Contraption elsewhere", + "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": "UNLOCALIZED: Assembling Carriage Contraptions", - "create.ponder.cart_assembler_dual.text_1": "UNLOCALIZED: Whenever two Cart Assembers share an attached structure...", - "create.ponder.cart_assembler_dual.text_2": "UNLOCALIZED: Powering either of them will create a Carriage Contraption", - "create.ponder.cart_assembler_dual.text_3": "UNLOCALIZED: The carts will behave like those connected via Minecart Coupling", + "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": "UNLOCALIZED: Orientation Settings for Minecart Contraptions", - "create.ponder.cart_assembler_modes.text_1": "UNLOCALIZED: Cart Contraptions will rotate to face towards their carts' motion", - "create.ponder.cart_assembler_modes.text_2": "UNLOCALIZED: This Arrow indicates which side of the Structure will be considered the front", + "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_3": "UNLOCALIZED: If the Assembler is set to Lock Rotation, the contraptions' orientation will never change", - "create.ponder.cart_assembler_rails.header": "UNLOCALIZED: Other types of Minecarts and Rails", - "create.ponder.cart_assembler_rails.text_1": "UNLOCALIZED: Cart Assemblers on Regular Tracks will not affect the passing carts' motion", - "create.ponder.cart_assembler_rails.text_2": "UNLOCALIZED: When on Powered or Controller Rail, the carts will be held in place until it's Powered", - "create.ponder.cart_assembler_rails.text_3": "UNLOCALIZED: Other types of Minecarts can be used as the anchor", - "create.ponder.cart_assembler_rails.text_4": "UNLOCALIZED: Furnace Carts will keep themselves powered, pulling fuel from any attached inventories", + "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.chain_drive.header": "UNLOCALIZED: Relaying rotational force with Chain Drives", - "create.ponder.chain_drive.text_1": "UNLOCALIZED: Chain Drives relay rotation to each other in a row", - "create.ponder.chain_drive.text_2": "UNLOCALIZED: All shafts connected like this will rotate in the same direction", - "create.ponder.chain_drive.text_3": "UNLOCALIZED: Any part of the row can be rotated by 90 degrees", + "create.ponder.chain_drive.header": "연쇄 전달기를 통한 회전력 전달", + "create.ponder.chain_drive.text_1": "연쇄 전달기는 일렬로만 연결될 수 있습니다", + "create.ponder.chain_drive.text_2": "연결된 모든 축은 동일한 방향, 동일한 속도로 회전합니다", + "create.ponder.chain_drive.text_3": "전달기는 90도 회전되어 있어도 연결될 수 있습니다", - "create.ponder.chain_gearshift.header": "UNLOCALIZED: Controlling rotational speed with Chain Gearshifts", - "create.ponder.chain_gearshift.text_1": "UNLOCALIZED: Unpowered Chain Gearshifts behave exactly like Chain Drives", - "create.ponder.chain_gearshift.text_2": "UNLOCALIZED: When Powered, the speed transmitted to other Chain Drives in the row is doubled", - "create.ponder.chain_gearshift.text_3": "UNLOCALIZED: Whenever the Powered Gearshift is not at the source, its speed will be halved instead", - "create.ponder.chain_gearshift.text_4": "UNLOCALIZED: In both cases, Chain Drives in the row always run at 2x the speed of the Powered Gearshift", - "create.ponder.chain_gearshift.text_5": "UNLOCALIZED: Using analog signals, the ratio can be adjusted more precisely between 1 and 2", - "create.ponder.chain_gearshift.text_6": "UNLOCALIZED: 12 RPM", + "create.ponder.chain_gearshift.header": "연쇄 변속기를 통한 회전 속도 제어", + "create.ponder.chain_gearshift.text_1": "신호를 받지 않은 연쇄 변속기는 연쇄 전달기와 똑같이 작동합니다", + "create.ponder.chain_gearshift.text_2": "신호를 받으면, 연결된 연쇄 전달기에 속도가 2배로 빨라집니다", + "create.ponder.chain_gearshift.text_3": "신호를 받은 연쇄 변속기가 근원에 없다면, 변속기의 속도가 절반으로 줄어듭니다", + "create.ponder.chain_gearshift.text_4": "두 경우 모두, 신호를 받은 연쇄 변속기보다 연결된 연쇄 전달기가 2배 더 빠른 속도로 회전됩니다", + "create.ponder.chain_gearshift.text_5": "조절식 레버를 사용하면, 1에서 2배 사이의 속도 배율을 더 정확하게 조절할 수 있습니다", + "create.ponder.chain_gearshift.text_6": "12 RPM / 분당 회전수", - "create.ponder.chute.header": "UNLOCALIZED: Transporting Items downward via Chutes", - "create.ponder.chute.text_1": "UNLOCALIZED: Chutes can transport items vertically from and to inventories", - "create.ponder.chute.text_2": "UNLOCALIZED: Using the Wrench, a window can be created", - "create.ponder.chute.text_3": "UNLOCALIZED: Placing chutes targeting the side faces of another will make it diagonal", + "create.ponder.chute.header": "도관을 통한 아래 방향 아이템 이동", + "create.ponder.chute.text_1": "도관은 아이템을 수직으로 수송합니다", + "create.ponder.chute.text_2": "스패너를 사용하여, 도관에 창을 낼 수 있습니다", + "create.ponder.chute.text_3": "도관의 옆면에 도관을 설치하면 도관이 대각선으로 설치됩니다", - "create.ponder.chute_upward.header": "UNLOCALIZED: Transporting Items upward via Chutes", - "create.ponder.chute_upward.text_1": "UNLOCALIZED: Using Encased Fans at the top or bottom, a Chute can move items upward", - "create.ponder.chute_upward.text_2": "UNLOCALIZED: Inspecting chutes with Engineers' Goggles reveals information about the movement direction", - "create.ponder.chute_upward.text_3": "UNLOCALIZED: On the 'blocked' end, items will have to be inserted/taken from the sides", + "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.clockwork_bearing.header": "UNLOCALIZED: Animating Structures using Clockwork Bearings", - "create.ponder.clockwork_bearing.text_1": "UNLOCALIZED: Clockwork Bearings attach to blocks in front of them", - "create.ponder.clockwork_bearing.text_2": "UNLOCALIZED: Upon receiving Rotational Force, the structure will be rotated according to the hour of the day", - "create.ponder.clockwork_bearing.text_3": "UNLOCALIZED: 3:00", - "create.ponder.clockwork_bearing.text_4": "UNLOCALIZED: 4:00", - "create.ponder.clockwork_bearing.text_5": "UNLOCALIZED: Right-Click the bearing to start or stop animating the structure", - "create.ponder.clockwork_bearing.text_6": "UNLOCALIZED: In front of the Hour Hand, a second structure can be added", - "create.ponder.clockwork_bearing.text_7": "UNLOCALIZED: Ensure the two Structures are not attached to each other through super glue or similar", - "create.ponder.clockwork_bearing.text_8": "UNLOCALIZED: The Second Structure will now rotate as the Minute Hand", + "create.ponder.clockwork_bearing.header": "시계 회전장치를 통한 구조물 회전", + "create.ponder.clockwork_bearing.text_1": "시계 회전장치는 부착된 블록을 시계 바늘처럼 회전하게 만들 수 있습니다", + "create.ponder.clockwork_bearing.text_2": "회전력을 받으면 구조물이 시침처럼 현재 시각에 따라 회전합니다", + "create.ponder.clockwork_bearing.text_3": "3:00", + "create.ponder.clockwork_bearing.text_4": "4:00", + "create.ponder.clockwork_bearing.text_5": "회전장치를 오른쪽 버튼으로 누르면 구조물이 회전하거나 회전을 멈춥니다", + "create.ponder.clockwork_bearing.text_6": "시침 앞에는 두 번째 구조물을 추가할 수 있습니다", + "create.ponder.clockwork_bearing.text_7": "강력 접착제 등을 통해 두 구조물이 서로 부착되어 있지 않아야 합니다", + "create.ponder.clockwork_bearing.text_8": "이제, 두 번째 구조물이 분침처럼 회전합니다", - "create.ponder.clutch.header": "UNLOCALIZED: Controlling rotational force using a Clutch", - "create.ponder.clutch.text_1": "UNLOCALIZED: Clutches will relay rotation in a straight line", - "create.ponder.clutch.text_2": "UNLOCALIZED: When powered by Redstone, it breaks the connection", + "create.ponder.clutch.header": "단절기를 통한 회전력 제어", + "create.ponder.clutch.text_1": "단절기는 회전력을 다른 방향으로 전달하지 않습니다", + "create.ponder.clutch.text_2": "레드스톤 신호를 받으면, 연결이 끊어집니다", - "create.ponder.cog_speedup.header": "UNLOCALIZED: Gearshifting with Cogs", - "create.ponder.cog_speedup.text_1": "UNLOCALIZED: Large and Small cogs can be connected diagonally", - "create.ponder.cog_speedup.text_2": "UNLOCALIZED: Shifting from large to small cogs, the conveyed speed will be doubled", - "create.ponder.cog_speedup.text_3": "UNLOCALIZED: Shifting the opposite way, the conveyed speed will be halved", + "create.ponder.cog_speedup.header": "톱니바퀴를 통한 변속", + "create.ponder.cog_speedup.text_1": "큰 톱니바퀴와 작은 톱니바퀴는 대각선으로 연결할 수 있습니다", + "create.ponder.cog_speedup.text_2": "큰 톱니바퀴에서 작은 톱니바퀴로 회전력이 전달되면 회전력이 2배로 빨라집니다", + "create.ponder.cog_speedup.text_3": "반대로 위치를 바꾸면, 전달되는 속도가 절반으로 줄어듭니다", - "create.ponder.cogwheel.header": "UNLOCALIZED: Relaying rotational force using Cogwheels", - "create.ponder.cogwheel.text_1": "UNLOCALIZED: Cogwheels will relay rotation to other adjacent cogwheels", - "create.ponder.cogwheel.text_2": "UNLOCALIZED: Neighbouring shafts connected like this will rotate in opposite directions", + "create.ponder.cogwheel.header": "톱니바퀴를 통한 회전력 전달", + "create.ponder.cogwheel.text_1": "톱니바퀴는 가까이에 있는 다른 톱니바퀴에다 회전력을 전달합니다", + "create.ponder.cogwheel.text_2": "바로 옆에 연결된 톱니바퀴는 반대 방향으로 회전합니다", "create.ponder.creative_fluid_tank.header": "UNLOCALIZED: Creative Fluid Tanks", "create.ponder.creative_fluid_tank.text_1": "UNLOCALIZED: Creative Fluid Tanks can be used to provide a bottomless supply of fluid", @@ -1673,41 +1673,41 @@ "create.ponder.creative_fluid_tank.text_3": "UNLOCALIZED: Pipe Networks can now endlessly draw the assigned fluid from the tank", "create.ponder.creative_fluid_tank.text_4": "UNLOCALIZED: Any Fluids pushed back into a Creative Fluid Tank will be voided", - "create.ponder.creative_motor.header": "UNLOCALIZED: Generating Rotational Force using Creative Motors", - "create.ponder.creative_motor.text_1": "UNLOCALIZED: Creative motors are a compact and configurable source of Rotational Force", - "create.ponder.creative_motor.text_2": "UNLOCALIZED: Scrolling on the back panel changes the RPM of the motors' rotational output", + "create.ponder.creative_motor.header": "크리에이티브 모터를 통한 회전력 생성", + "create.ponder.creative_motor.text_1": "크리에이티브 모터는 회전력을 설정할 수 있는 작은 동적 근원입니다", + "create.ponder.creative_motor.text_2": "뒤쪽을 바라보고 스크롤하면 모터의 분당 회전수가 변경됩니다", - "create.ponder.crushing_wheels.header": "UNLOCALIZED: Processing Items with Crushing Wheels", - "create.ponder.crushing_wheels.text_1": "UNLOCALIZED: A pair of Crushing Wheels can grind items very effectively", - "create.ponder.crushing_wheels.text_2": "UNLOCALIZED: Their Rotational Input has to make them spin into each other", - "create.ponder.crushing_wheels.text_3": "UNLOCALIZED: Items thrown or inserted into the top will get processed", - "create.ponder.crushing_wheels.text_4": "UNLOCALIZED: Items can be inserted and picked up through automated means as well", + "create.ponder.crushing_wheels.header": "분쇄용 바퀴를 통한 아이템 처리", + "create.ponder.crushing_wheels.text_1": "한 쌍의 분쇄용 바퀴는 매우 효과적으로 아이템을 갈아낼 수 있습니다", + "create.ponder.crushing_wheels.text_2": "분쇄용 바퀴가 작동되려면, 바퀴가 안쪽으로 회전해야 합니다", + "create.ponder.crushing_wheels.text_3": "아이템을 바퀴 위에 던지거나 입력하면 아이템이 처리됩니다", + "create.ponder.crushing_wheels.text_4": "이러한 장치로 아이템을 자동으로 처리할 수 있습니다", - "create.ponder.deployer.header": "UNLOCALIZED: Using the Deployer", - "create.ponder.deployer.text_1": "UNLOCALIZED: Given Rotational Force, a Deployer can imitate player interactions", - "create.ponder.deployer.text_10": "UNLOCALIZED: Right-click the front to give it an Item to use", - "create.ponder.deployer.text_11": "UNLOCALIZED: Items can also be inserted automatically", - "create.ponder.deployer.text_12": "UNLOCALIZED: Deployers carry a filter slot", - "create.ponder.deployer.text_13": "UNLOCALIZED: When a filter is set, it activates only while holding a matching item", - "create.ponder.deployer.text_14": "UNLOCALIZED: Only items matching the filter can now be inserted...", - "create.ponder.deployer.text_15": "UNLOCALIZED: ...and only non-matching items will be extracted", - "create.ponder.deployer.text_2": "UNLOCALIZED: It will always interact with the position 2 blocks in front of itself", - "create.ponder.deployer.text_3": "UNLOCALIZED: Blocks directly in front will not obstruct it", - "create.ponder.deployer.text_4": "UNLOCALIZED: Deployers can:", - "create.ponder.deployer.text_5": "UNLOCALIZED: Place Blocks,", - "create.ponder.deployer.text_6": "UNLOCALIZED: Use Items,", - "create.ponder.deployer.text_7": "UNLOCALIZED: Activate Blocks,", - "create.ponder.deployer.text_8": "UNLOCALIZED: Harvest blocks", - "create.ponder.deployer.text_9": "UNLOCALIZED: and Attack Mobs", + "create.ponder.deployer.header": "전개장치의 이용", + "create.ponder.deployer.text_1": "전개장치는 회전력을 받으면, 플레이어의 상호작용을 따라 할 수 있습니다", + "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": "전개장치는 항상 2블록 앞의 위치에만 상호작용합니다", + "create.ponder.deployer.text_3": "바로 앞에 있는 블록이 직접적으로 상호작용을 방해하지는 않습니다", + "create.ponder.deployer.text_4": "전개장치는:", + "create.ponder.deployer.text_5": "블록을 설치하고,", + "create.ponder.deployer.text_6": "아이템을 사용하고,", + "create.ponder.deployer.text_7": "블록을 활성화하고,", + "create.ponder.deployer.text_8": "블록을 파괴하고,", + "create.ponder.deployer.text_9": "몬스터를 공격할 수 있습니다", - "create.ponder.deployer_contraption.header": "UNLOCALIZED: Using Deployers on Contraptions", - "create.ponder.deployer_contraption.text_1": "UNLOCALIZED: Whenever Deployers are moved as part of an animated Contraption...", - "create.ponder.deployer_contraption.text_2": "UNLOCALIZED: They activate at each visited location, using items from inventories anywhere on the contraption", - "create.ponder.deployer_contraption.text_3": "UNLOCALIZED: The Filter slot can be used to specify which items to pull", + "create.ponder.deployer_contraption.header": "장치에서의 전개장치의 이용", + "create.ponder.deployer_contraption.text_1": "움직이는 장치에서 전개장치가 이동하면...", + "create.ponder.deployer_contraption.text_2": "전개장치는 장소마다 작동하며, 전개장치는 붙어있는 저장소의 아이템을 사용할 수 있습니다", + "create.ponder.deployer_contraption.text_3": "필터 슬롯을 사용하여 사용할 아이템을 지정할 수 있습니다", - "create.ponder.deployer_modes.header": "UNLOCALIZED: Modes of the Deployer", - "create.ponder.deployer_modes.text_1": "UNLOCALIZED: By default, a Deployer imitates a Right-click interaction", - "create.ponder.deployer_modes.text_2": "UNLOCALIZED: Using a Wrench, it can be set to imitate a Left-click instead", + "create.ponder.deployer_modes.header": "전개장치의 방식", + "create.ponder.deployer_modes.text_1": "기본적으로, 전개장치는 오른쪽 버튼을 누르는 상호작용을 따라합니다", + "create.ponder.deployer_modes.text_2": "스패너를 사용하면, 왼쪽 버튼을 따라하도록 설정할 수 있습니다", "create.ponder.deployer_processing.header": "UNLOCALIZED: Processing Items using Deployers", "create.ponder.deployer_processing.text_1": "UNLOCALIZED: With a fitting held item, Deployers can process items provided beneath them", @@ -1715,46 +1715,46 @@ "create.ponder.deployer_processing.text_3": "UNLOCALIZED: When items are provided on a belt...", "create.ponder.deployer_processing.text_4": "UNLOCALIZED: The Deployer will hold and process them automatically", - "create.ponder.deployer_redstone.header": "UNLOCALIZED: Controlling Deployers with Redstone", - "create.ponder.deployer_redstone.text_1": "UNLOCALIZED: When powered by Redstone, Deployers will not activate", - "create.ponder.deployer_redstone.text_2": "UNLOCALIZED: Before stopping, the Deployer will finish any started cycles", - "create.ponder.deployer_redstone.text_3": "UNLOCALIZED: Thus, a negative pulse can be used to trigger exactly one activation cycle", + "create.ponder.deployer_redstone.header": "레드스톤을 통한 전개장치의 제어", + "create.ponder.deployer_redstone.text_1": "레드스톤 신호를 받으면, 전개장치가 작동되지 않습니다", + "create.ponder.deployer_redstone.text_2": "작동이 정지되기 전에, 전개장치는 모든 작동을 완료하고 정지됩니다", + "create.ponder.deployer_redstone.text_3": "따라서, 아주 짧은 시간 동안 신호를 차단하면 1번만 작동하게 만들 수 있습니다", - "create.ponder.depot.header": "UNLOCALIZED: Using Depots", - "create.ponder.depot.text_1": "UNLOCALIZED: Depots can serve as 'stationary' belt elements", - "create.ponder.depot.text_2": "UNLOCALIZED: Right-Click to manually place or remove Items from it", - "create.ponder.depot.text_3": "UNLOCALIZED: Just like Mechanical Belts, it can provide items to processing", - "create.ponder.depot.text_4": "UNLOCALIZED: ...as well as provide Items to Mechanical Arms", + "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.empty_blaze_burner.header": "UNLOCALIZED: Using Empty Blaze Burners", - "create.ponder.empty_blaze_burner.text_1": "UNLOCALIZED: Right-click a Blaze with the empty burner to capture it", - "create.ponder.empty_blaze_burner.text_2": "UNLOCALIZED: Alternatively, Blazes can be collected from their Spawners directly", - "create.ponder.empty_blaze_burner.text_3": "UNLOCALIZED: You now have an ideal heat source for various machines", - "create.ponder.empty_blaze_burner.text_4": "UNLOCALIZED: For Aesthetic purposes, Empty Blaze Burners can also be lit using Flint and Steel", - "create.ponder.empty_blaze_burner.text_5": "UNLOCALIZED: However, these are not suitable for industrial heating", + "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_3": "이제 다양한 기계에서 사용할 수 있습니다", + "create.ponder.empty_blaze_burner.text_4": "부싯돌과 부시를 사용하여 비어있는 블레이즈 가열기에 불을 붙일 수도 있습니다", + "create.ponder.empty_blaze_burner.text_5": "하지만, 산업용으로 이용하기에는 적합하지 않습니다.", "create.ponder.encased_fluid_pipe.header": "UNLOCALIZED: Encasing Fluid Pipes", "create.ponder.encased_fluid_pipe.text_1": "UNLOCALIZED: Copper Casing can be used to decorate Fluid Pipes", "create.ponder.encased_fluid_pipe.text_2": "UNLOCALIZED: Aside from being conceiled, Encased Pipes are locked into their connectivity state", "create.ponder.encased_fluid_pipe.text_3": "UNLOCALIZED: It will no longer react to any neighbouring blocks being added or removed", - "create.ponder.fan_direction.header": "UNLOCALIZED: Air flow of Encased Fans", - "create.ponder.fan_direction.text_1": "UNLOCALIZED: Encased Fans use Rotational Force to create an Air Current", - "create.ponder.fan_direction.text_2": "UNLOCALIZED: Strength and Direction of Flow depends on the Rotational Input", + "create.ponder.fan_direction.header": "공업용 선풍기의 바람", + "create.ponder.fan_direction.text_1": "공업용 선풍기는 회전력을 사용하여 바람을 일으킬 수 있습니다", + "create.ponder.fan_direction.text_2": "회전력에 따라 바람의 방향과 힘이 달라집니다", - "create.ponder.fan_processing.header": "UNLOCALIZED: Processing Items using Encased Fans", - "create.ponder.fan_processing.text_1": "UNLOCALIZED: When passing through lava, the Air Flow becomes Heated", - "create.ponder.fan_processing.text_2": "UNLOCALIZED: Items caught in the area will be smelted", - "create.ponder.fan_processing.text_3": "UNLOCALIZED: Food items thrown here would be incinerated", - "create.ponder.fan_processing.text_4": "UNLOCALIZED: Instead, a setup for Smoking using Fire should be used for them", - "create.ponder.fan_processing.text_5": "UNLOCALIZED: Air Flows passing through water create a Washing Setup", - "create.ponder.fan_processing.text_6": "UNLOCALIZED: Some interesting new processing can be done with it", - "create.ponder.fan_processing.text_7": "UNLOCALIZED: The Speed of the Fan does NOT affect the processing speed, only its range", - "create.ponder.fan_processing.text_8": "UNLOCALIZED: Fan Processing can also be applied to Items on Depots and Belts", + "create.ponder.fan_processing.header": "선풍기를 통한 아이템 처리", + "create.ponder.fan_processing.text_1": "바람이 용암을 통과하면, 바람이 뜨거워집니다", + "create.ponder.fan_processing.text_2": "아이템에 뜨거운 바람을 쐬면 아이템이 제련됩니다", + "create.ponder.fan_processing.text_3": "음식 아이템에 뜨거운 바람을 쐬면 아이템이 소각됩니다", + "create.ponder.fan_processing.text_4": "대신에, 불을 사용하면 음식 아이템을 훈연할 수 있습니다", + "create.ponder.fan_processing.text_5": "바람이 물을 통과하면 바람으로 아이템을 세척할 수 있습니다", + "create.ponder.fan_processing.text_6": "세척은 제련, 훈연과 달리 새로운 처리를 할 수 있습니다", + "create.ponder.fan_processing.text_7": "선풍기의 속도는 처리 속도에 관여하지 않고 바람의 범위에만 영향을 줍니다", + "create.ponder.fan_processing.text_8": "또한, 선풍기는 아이템 거치대와 벨트에 놓인 아이템도 처리할 수 있습니다", - "create.ponder.fan_source.header": "UNLOCALIZED: Generating Rotational Force using Encased Fans", - "create.ponder.fan_source.text_1": "UNLOCALIZED: Fans facing down into a source of heat can provide Rotational Force", - "create.ponder.fan_source.text_2": "UNLOCALIZED: When given a Redstone Signal, the Fans will start providing power", + "create.ponder.fan_source.header": "공업용 선풍기를 통한 회전력 생성", + "create.ponder.fan_source.text_1": "아래쪽에 있는 불이나 용암을 바라보고 있는 선풍기는 회전력을 생성할 수 있습니다", + "create.ponder.fan_source.text_2": "레드스톤 신호를 받으면, 선풍기가 회전력을 생성합니다", "create.ponder.fluid_pipe_flow.header": "UNLOCALIZED: Moving Fluids using Copper Pipes", "create.ponder.fluid_pipe_flow.text_1": "UNLOCALIZED: Fluid Pipes can connect two or more fluid sources and targets", @@ -1785,78 +1785,78 @@ "create.ponder.fluid_tank_storage.text_4": "UNLOCALIZED: However, in Survival Mode Fluids cannot be added or taken manually", "create.ponder.fluid_tank_storage.text_5": "UNLOCALIZED: You can use Basins, Item Drains and Spouts to drain or fill fluid containing items", - "create.ponder.flywheel.header": "UNLOCALIZED: Generating Rotational Force using the Flywheel", - "create.ponder.flywheel.text_1": "UNLOCALIZED: Flywheels are required for generating rotational force with the Furnace Engine", - "create.ponder.flywheel.text_2": "UNLOCALIZED: The provided Rotational Force has a very large stress capacity", - "create.ponder.flywheel.text_3": "UNLOCALIZED: Using a Blast Furnace will double the efficiency of the Engine", + "create.ponder.flywheel.header": "축 회전바퀴를 통한 회전력 생성", + "create.ponder.flywheel.text_1": "축 회전바퀴는 화로 원동기에서 회전력을 생성할 수 있습니다", + "create.ponder.flywheel.text_2": "매우 큰 부하 수용량을 가지고 있습니다", + "create.ponder.flywheel.text_3": "용광로를 사용하면 원동기의 효율이 2배로 증가합니다", - "create.ponder.funnel_compat.header": "UNLOCALIZED: Funnel compatibility", - "create.ponder.funnel_compat.text_1": "UNLOCALIZED: Funnels should also interact nicely with a handful of other components.", - "create.ponder.funnel_compat.text_2": "UNLOCALIZED: Vertical Saws", - "create.ponder.funnel_compat.text_3": "UNLOCALIZED: Depots", - "create.ponder.funnel_compat.text_4": "UNLOCALIZED: Item Drains", + "create.ponder.funnel_compat.header": "퍼널의 호환성", + "create.ponder.funnel_compat.text_1": "퍼널은 여러 가지 블록과 원활하게 상호작용할 수 있습니다", + "create.ponder.funnel_compat.text_2": "톱", + "create.ponder.funnel_compat.text_3": "아이템 거치대", + "create.ponder.funnel_compat.text_4": "흡수통", - "create.ponder.funnel_direction.header": "UNLOCALIZED: Direction of Transfer", - "create.ponder.funnel_direction.text_1": "UNLOCALIZED: Placed normally, it pulls items from the inventory.", - "create.ponder.funnel_direction.text_2": "UNLOCALIZED: Placed while sneaking, it puts items into the inventory.", - "create.ponder.funnel_direction.text_3": "UNLOCALIZED: Using a wrench, the funnel can be flipped after placement.", - "create.ponder.funnel_direction.text_4": "UNLOCALIZED: Same rules will apply for most orientations.", - "create.ponder.funnel_direction.text_5": "UNLOCALIZED: Funnels on belts will extract/insert depending on its movement direction.", + "create.ponder.funnel_direction.header": "이동 방향", + "create.ponder.funnel_direction.text_1": "일반적으로 설치하면, 퍼널이 저장소에서 아이템을 꺼냅니다", + "create.ponder.funnel_direction.text_2": "웅크리고 설치하면, 퍼널이 저장소에 아이템을 넣습니다", + "create.ponder.funnel_direction.text_3": "스패너를 사용하면, 설치된 퍼널의 방향이 변경됩니다", + "create.ponder.funnel_direction.text_4": "대부분의 방향에도 동일한 규칙이 적용됩니다", + "create.ponder.funnel_direction.text_5": "벨트 위에 설치된 퍼널은 이동 방향에 따라 아이템이 입력/출력됩니다", - "create.ponder.funnel_intro.header": "UNLOCALIZED: Using funnels", - "create.ponder.funnel_intro.text_1": "UNLOCALIZED: Funnels are ideal for transferring items from and to inventories.", + "create.ponder.funnel_intro.header": "퍼널의 이용", + "create.ponder.funnel_intro.text_1": "퍼널은 저장소에 있는 아이템을 옮기는데 사용할 수 있습니다", - "create.ponder.funnel_redstone.header": "UNLOCALIZED: Redstone control", - "create.ponder.funnel_redstone.text_1": "UNLOCALIZED: Redstone power will prevent any funnel from acting", + "create.ponder.funnel_redstone.header": "레드스톤 제어", + "create.ponder.funnel_redstone.text_1": "레드스톤 신호를 받으면, 퍼널이 작동되지 않습니다", - "create.ponder.funnel_transfer.header": "UNLOCALIZED: Direct transfer", - "create.ponder.funnel_transfer.text_1": "UNLOCALIZED: Funnels cannot ever transfer between closed inventories directly.", - "create.ponder.funnel_transfer.text_2": "UNLOCALIZED: Chutes or Smart chutes might be more suitable for such purposes.", - "create.ponder.funnel_transfer.text_3": "UNLOCALIZED: Same applies for horizontal movement. A mechanical belt should help here.", + "create.ponder.funnel_transfer.header": "직접 이동", + "create.ponder.funnel_transfer.text_1": "퍼널은 저장소 사이로 직접 아이템을 전송할 수 없습니다.", + "create.ponder.funnel_transfer.text_2": "이러한 용도로는 도관이나 지능형 도관이 더 적합할 수 있습니다", + "create.ponder.funnel_transfer.text_3": "수평 이동은 퍼널이 더 적합합니다", - "create.ponder.furnace_engine.header": "UNLOCALIZED: Generating Rotational Force using the Furnace Engine", - "create.ponder.furnace_engine.text_1": "UNLOCALIZED: Furnace Engines generate Rotational Force while their attached Furnace is running", - "create.ponder.furnace_engine.text_2": "UNLOCALIZED: The provided Rotational Force has a very large stress capacity", - "create.ponder.furnace_engine.text_3": "UNLOCALIZED: Using a Blast Furnace will double the efficiency of the Engine", + "create.ponder.furnace_engine.header": "화로 원동기를 통한 회전력 생성", + "create.ponder.furnace_engine.text_1": "화로가 작동하면 화로 원동기가 회전력을 전달합니다", + "create.ponder.furnace_engine.text_2": "매우 큰 부하 수용량을 가지고 있습니다", + "create.ponder.furnace_engine.text_3": "용광로를 사용하면 원동기의 효율이 2배로 증가합니다", - "create.ponder.gantry_carriage.header": "UNLOCALIZED: Using Gantry Carriages", - "create.ponder.gantry_carriage.text_1": "UNLOCALIZED: Gantry Carriages can mount to and slide along a Gantry Shaft.", - "create.ponder.gantry_carriage.text_2": "UNLOCALIZED: Gantry setups can move attached Blocks.", + "create.ponder.gantry_carriage.header": "다리 운반대의 이용", + "create.ponder.gantry_carriage.text_1": "다리 운반대는 다리 축에서 움직일 수 있습니다", + "create.ponder.gantry_carriage.text_2": "다리 운반대는 부착된 블록을 움직이게 만들 수 있습니다", - "create.ponder.gantry_cascaded.header": "UNLOCALIZED: Cascaded Gantries", - "create.ponder.gantry_cascaded.text_1": "UNLOCALIZED: Gantry shafts attach to a carriage without the need of super glue", - "create.ponder.gantry_cascaded.text_2": "UNLOCALIZED: Same applies for carriages on moved Gantry Shafts", - "create.ponder.gantry_cascaded.text_3": "UNLOCALIZED: Thus, a gantry system can be cascaded to cover multiple axes of movement", + "create.ponder.gantry_cascaded.header": "계단식 다리", + "create.ponder.gantry_cascaded.text_1": "다리 축은 강력 접착제 없이도 운반대에 부착할 수 있습니다", + "create.ponder.gantry_cascaded.text_2": "움직이고 있는 다리 축에 설치된 운반대도 마찬가지입니다", + "create.ponder.gantry_cascaded.text_3": "따라서, 다리는 여러 이동 축을 제어할 수 있는 계단식으로 만들 수 있습니다", - "create.ponder.gantry_direction.header": "UNLOCALIZED: Gantry Movement Direction", - "create.ponder.gantry_direction.text_1": "UNLOCALIZED: Gantry Shafts can have opposite orientations", - "create.ponder.gantry_direction.text_2": "UNLOCALIZED: The movement direction of carriages depend on their shafts' orientation", - "create.ponder.gantry_direction.text_3": "UNLOCALIZED: ...as well as the rotation direction of the shaft", - "create.ponder.gantry_direction.text_4": "UNLOCALIZED: Same rules apply for the propagated rotation", + "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_4": "전달되는 회전력에도 동일한 규칙이 적용됩니다", - "create.ponder.gantry_redstone.header": "UNLOCALIZED: Gantry Power Propagation", - "create.ponder.gantry_redstone.text_1": "UNLOCALIZED: Redstone-powered gantry shafts stop moving their carriages", - "create.ponder.gantry_redstone.text_2": "UNLOCALIZED: Instead, its rotational force is relayed to the carriages' output shaft", + "create.ponder.gantry_redstone.header": "레드스톤을 통한 다리의 제어", + "create.ponder.gantry_redstone.text_1": "레드스톤 신호를 받으면, 다리에 있는 운반대가 움직이지 않습니다", + "create.ponder.gantry_redstone.text_2": "대신에, 회전력이 운반대의 출력축으로 전달됩니다", - "create.ponder.gantry_shaft.header": "UNLOCALIZED: Using Gantry Shafts", - "create.ponder.gantry_shaft.text_1": "UNLOCALIZED: Gantry Shafts form the basis of a gantry setup. Attached Carriages will move along them.", - "create.ponder.gantry_shaft.text_2": "UNLOCALIZED: Gantry setups can move attached Blocks.", + "create.ponder.gantry_shaft.header": "다리 축의 이용", + "create.ponder.gantry_shaft.text_1": "다리 운반대가 설치되면 설치된 운반대는 다리 축을 따라 이동합니다", + "create.ponder.gantry_shaft.text_2": "다리 운반대는 부착된 블록을 움직이게 만들 수 있습니다", - "create.ponder.gearbox.header": "UNLOCALIZED: Relaying rotational force using Gearboxes", - "create.ponder.gearbox.text_1": "UNLOCALIZED: Jumping between axes of rotation can get bulky quickly", - "create.ponder.gearbox.text_2": "UNLOCALIZED: A gearbox is the more compact equivalent of this setup", - "create.ponder.gearbox.text_3": "UNLOCALIZED: Shafts around corners rotate in mirrored directions", - "create.ponder.gearbox.text_4": "UNLOCALIZED: Straight connections will be reversed", + "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.gearshift.header": "UNLOCALIZED: Controlling rotational force using a Gearshift", - "create.ponder.gearshift.text_1": "UNLOCALIZED: Gearshifts will relay rotation in a straight line", - "create.ponder.gearshift.text_2": "UNLOCALIZED: When powered by Redstone, it reverses the transmission", + "create.ponder.gearshift.header": "전환기를 통한 회전력 제어", + "create.ponder.gearshift.text_1": "전환기는 회전력을 다른 방향으로 전달하지 않습니다", + "create.ponder.gearshift.text_2": "레드스톤 신호를 받으면, 축을 반대로 돌립니다", - "create.ponder.hand_crank.header": "UNLOCALIZED: Generating Rotational Force using Hand Cranks", - "create.ponder.hand_crank.text_1": "UNLOCALIZED: Hand Cranks can be used by players to apply rotational force manually", - "create.ponder.hand_crank.text_2": "UNLOCALIZED: Hold Right-Click to rotate it Counter-Clockwise", - "create.ponder.hand_crank.text_3": "UNLOCALIZED: Its conveyed speed is relatively high", - "create.ponder.hand_crank.text_4": "UNLOCALIZED: Sneak and Hold Right-Click to rotate it Clockwise", + "create.ponder.hand_crank.header": "자가발전용 손잡이를 통한 회전력 생성", + "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.hose_pulley.header": "UNLOCALIZED: Source Filling and Draining using Hose Pulleys", "create.ponder.hose_pulley.text_1": "UNLOCALIZED: Hose Pulleys can be used to fill or drain large bodies of Fluid", @@ -1886,127 +1886,127 @@ "create.ponder.item_drain.text_4": "UNLOCALIZED: ...they roll across, emptying out their contained fluid", "create.ponder.item_drain.text_5": "UNLOCALIZED: Pipe Networks can now pull the fluid from the drains' internal buffer", - "create.ponder.large_cogwheel.header": "UNLOCALIZED: Relaying rotational force using Large Cogwheels", - "create.ponder.large_cogwheel.text_1": "UNLOCALIZED: Large cogwheels can connect to each other at right angles", - "create.ponder.large_cogwheel.text_2": "UNLOCALIZED: It will help relaying conveyed speed to other axes of rotation", + "create.ponder.large_cogwheel.header": "큰 톱니바퀴를 통한 회전력 전달", + "create.ponder.large_cogwheel.text_1": "큰 톱니바퀴는 직각으로 연결할 수 있습니다", + "create.ponder.large_cogwheel.text_2": "회전력을 다른 방향의 축으로 전달할 수 있습니다", - "create.ponder.linear_chassis_attachment.header": "UNLOCALIZED: Attaching blocks using Linear Chassis", - "create.ponder.linear_chassis_attachment.text_1": "UNLOCALIZED: The open faces of a Linear Chassis can be made Sticky", - "create.ponder.linear_chassis_attachment.text_2": "UNLOCALIZED: Click again to make the opposite side sticky", - "create.ponder.linear_chassis_attachment.text_3": "UNLOCALIZED: Sneak and Right-Click with an empty hand to remove the slime", - "create.ponder.linear_chassis_attachment.text_4": "UNLOCALIZED: Stickied faces of the Linear Chassis will attach a line of blocks in front of it", - "create.ponder.linear_chassis_attachment.text_5": "UNLOCALIZED: Using a Wrench, a precise Range can be specified for this chassis", - "create.ponder.linear_chassis_attachment.text_6": "UNLOCALIZED: Holding CTRL and scrolling adjusts the range of all attached Chassis Blocks", - "create.ponder.linear_chassis_attachment.text_7": "UNLOCALIZED: Attaching blocks to any other side requires the use of Super Glue", - "create.ponder.linear_chassis_attachment.text_8": "UNLOCALIZED: Using these mechanics, structures of any shape can move as a Contraption", + "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_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_group.header": "UNLOCALIZED: Moving Linear Chassis in groups", - "create.ponder.linear_chassis_group.text_1": "UNLOCALIZED: Linear Chassis connect to identical Chassis blocks next to them", - "create.ponder.linear_chassis_group.text_2": "UNLOCALIZED: When one is moved by a Contraption, the others are dragged with it", - "create.ponder.linear_chassis_group.text_3": "UNLOCALIZED: Chassis of a different type or facing another direction will not attach", + "create.ponder.linear_chassis_group.header": "선형 연결대의 집단 이동", + "create.ponder.linear_chassis_group.text_1": "선형 연결대는 옆에 있는 동일한 연결대 블록과 연결됩니다", + "create.ponder.linear_chassis_group.text_2": "장치에 의해 움직이면, 같이 이동됩니다", + "create.ponder.linear_chassis_group.text_3": "종류가 다르거나 다른 방향을 바라보는 연결대는 연결되지 않습니다", - "create.ponder.mechanical_arm.header": "UNLOCALIZED: Setting up Mechanical Arms", - "create.ponder.mechanical_arm.text_1": "UNLOCALIZED: Mechanical Arms have to be assigned their in- and outputs before they are placed", - "create.ponder.mechanical_arm.text_2": "UNLOCALIZED: Right-Click inventories while holding the Arm to assign them as Targets", - "create.ponder.mechanical_arm.text_3": "UNLOCALIZED: Right-Click again to toggle between Input (Blue) and Output (Orange)", - "create.ponder.mechanical_arm.text_4": "UNLOCALIZED: Left-Click components to remove their Selection", - "create.ponder.mechanical_arm.text_5": "UNLOCALIZED: Once placed, the Mechanical Arm will target the blocks selected previously", - "create.ponder.mechanical_arm.text_6": "UNLOCALIZED: They can have any amount of in- and outputs within their range", - "create.ponder.mechanical_arm.text_7": "UNLOCALIZED: However, not every type of Inventory can be interacted with directly", - "create.ponder.mechanical_arm.text_8": "UNLOCALIZED: Funnels and Depots can help to Bridge that gap", + "create.ponder.mechanical_arm.header": "기계식 팔의 설정", + "create.ponder.mechanical_arm.text_1": "기계식 팔은 설치하기 전에, 입력구와 출력구를 지정해야 합니다", + "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_8": "퍼널이나 아이템 거치대로 이러한 문제를 어느 정도 해결할 수 있습니다", - "create.ponder.mechanical_arm_filtering.header": "UNLOCALIZED: Filtering Outputs of the Mechanical Arm", - "create.ponder.mechanical_arm_filtering.text_1": "UNLOCALIZED: Inputs", - "create.ponder.mechanical_arm_filtering.text_2": "UNLOCALIZED: Outputs", - "create.ponder.mechanical_arm_filtering.text_3": "UNLOCALIZED: Sometimes it is desirable to restrict targets of the Arm by matching a filter", - "create.ponder.mechanical_arm_filtering.text_4": "UNLOCALIZED: Mechanical Arms by themselves do not provide any options for filtering", - "create.ponder.mechanical_arm_filtering.text_5": "UNLOCALIZED: Brass Funnels as Targets do however communicate their own filter to the Arm", - "create.ponder.mechanical_arm_filtering.text_6": "UNLOCALIZED: The Arm is smart enough not to pick up items it couldn't distribute", + "create.ponder.mechanical_arm_filtering.header": "기계식 팔의 출력 필터", + "create.ponder.mechanical_arm_filtering.text_1": "입력구", + "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_6": "기계식 팔은 필요한 양만큼 아이템을 가져올 수 있습니다", - "create.ponder.mechanical_arm_modes.header": "UNLOCALIZED: Distribution modes of the Mechanical Arm", - "create.ponder.mechanical_arm_modes.text_1": "UNLOCALIZED: Input", - "create.ponder.mechanical_arm_modes.text_2": "UNLOCALIZED: Outputs", - "create.ponder.mechanical_arm_modes.text_3": "UNLOCALIZED: Whenever an Arm has to choose between multiple valid outputs...", - "create.ponder.mechanical_arm_modes.text_4": "UNLOCALIZED: ...it will act according to its setting", - "create.ponder.mechanical_arm_modes.text_5": "UNLOCALIZED: Scrolling with a Wrench will allow you to configure it", - "create.ponder.mechanical_arm_modes.text_6": "UNLOCALIZED: Round Robin mode simply cycles through all outputs that are available", - "create.ponder.mechanical_arm_modes.text_7": "UNLOCALIZED: If an output is unable to take more items, it will be skipped", - "create.ponder.mechanical_arm_modes.text_8": "UNLOCALIZED: Forced Round Robin mode will never skip outputs, and instead wait until they are free", - "create.ponder.mechanical_arm_modes.text_9": "UNLOCALIZED: Prefer First prioritizes the outputs selected earliest when configuring this Arm", + "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_5": "스패너를 들고 스크롤하면 팔을 설정할 수 있습니다", + "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_redstone.header": "UNLOCALIZED: Controlling Mechanical Arms with Redstone", - "create.ponder.mechanical_arm_redstone.text_1": "UNLOCALIZED: When powered by Redstone, Mechanical Arms will not activate", - "create.ponder.mechanical_arm_redstone.text_2": "UNLOCALIZED: Before stopping, it will finish any started cycles", - "create.ponder.mechanical_arm_redstone.text_3": "UNLOCALIZED: Thus, a negative pulse can be used to trigger exactly one activation cycle", + "create.ponder.mechanical_arm_redstone.header": "레드스톤을 통한 기계식 팔의 제어", + "create.ponder.mechanical_arm_redstone.text_1": "레드스톤 신호를 받으면, 기계식 팔이 작동되지 않습니다", + "create.ponder.mechanical_arm_redstone.text_2": "작동이 정지되기 전에, 기계식 팔은 모든 작동을 완료하고 정지됩니다", + "create.ponder.mechanical_arm_redstone.text_3": "따라서, 아주 짧은 시간 동안 신호를 차단하면 1번만 작동하게 만들 수 있습니다", - "create.ponder.mechanical_bearing.header": "UNLOCALIZED: Movings Structures using the Mechanical Bearing", - "create.ponder.mechanical_bearing.text_1": "UNLOCALIZED: Mechanical Bearings attach to the block in front of them", - "create.ponder.mechanical_bearing.text_2": "UNLOCALIZED: Upon receiving Rotational Force, it will assemble it into a Rotating Contraption", + "create.ponder.mechanical_bearing.header": "기계식 회전장치를 통한 구조물 회전", + "create.ponder.mechanical_bearing.text_1": "기계식 회전장치는 부착된 블록을 회전하게 만들 수 있습니다", + "create.ponder.mechanical_bearing.text_2": "회전력을 받으면, 장치가 회전합니다", - "create.ponder.mechanical_crafter.header": "UNLOCALIZED: Setting up Mechanical Crafters", - "create.ponder.mechanical_crafter.text_1": "UNLOCALIZED: An array of Mechanical Crafters can be used to automate any Crafting Recipe", - "create.ponder.mechanical_crafter.text_2": "UNLOCALIZED: Using a Wrench, the Crafters' paths can be arranged", - "create.ponder.mechanical_crafter.text_3": "UNLOCALIZED: For a valid setup, all paths have to converge into one exit at any side", - "create.ponder.mechanical_crafter.text_4": "UNLOCALIZED: The outputs will be placed into the inventory at the exit", - "create.ponder.mechanical_crafter.text_5": "UNLOCALIZED: Mechanical Crafters require Rotational Force to operate", - "create.ponder.mechanical_crafter.text_6": "UNLOCALIZED: Right-Click the front to insert Items manually", - "create.ponder.mechanical_crafter.text_7": "UNLOCALIZED: Once every slot of a path contains an Item, the crafting process will begin", - "create.ponder.mechanical_crafter.text_8": "UNLOCALIZED: For recipes not fully occupying the crafter setup, the start can be forced using a Redstone Pulse", + "create.ponder.mechanical_crafter.header": "기계식 제작기의 설정", + "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_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": "UNLOCALIZED: Connecting Inventories of Crafters", - "create.ponder.mechanical_crafter_connect.text_1": "UNLOCALIZED: Items can be inserted to Crafters automatically", - "create.ponder.mechanical_crafter_connect.text_2": "UNLOCALIZED: Using the Wrench at their backs, Mechanical Crafter inputs can be combined", - "create.ponder.mechanical_crafter_connect.text_3": "UNLOCALIZED: All connected Crafters can now be accessed by the same input location", + "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": "UNLOCALIZED: Covering slots of Mechanical Crafters", - "create.ponder.mechanical_crafter_covers.text_1": "UNLOCALIZED: Some recipes will require additional Crafters to bridge gaps in the path", - "create.ponder.mechanical_crafter_covers.text_2": "UNLOCALIZED: Using Slot Covers, Crafters can be set to act as an Empty Slot in the arrangement", - "create.ponder.mechanical_crafter_covers.text_3": "UNLOCALIZED: Shared Inputs created with the Wrench at the back can also reach across covered Crafters", + "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_drill.header": "UNLOCALIZED: Breaking Blocks with the Mechanical Drill", - "create.ponder.mechanical_drill.text_1": "UNLOCALIZED: When given Rotational Force, a Mechanical Drill will break blocks directly in front of it", - "create.ponder.mechanical_drill.text_2": "UNLOCALIZED: Its mining speed depends on the Rotational Input", + "create.ponder.mechanical_drill.header": "기계식 드릴을 통한 블록 파괴", + "create.ponder.mechanical_drill.text_1": "회전력을 받으면, 기계식 드릴은 앞에 있는 블록을 파괴합니다", + "create.ponder.mechanical_drill.text_2": "채굴 속도는 회전력에 따라 달라집니다", - "create.ponder.mechanical_drill_contraption.header": "UNLOCALIZED: Using Mechanical Drills on Contraptions", - "create.ponder.mechanical_drill_contraption.text_1": "UNLOCALIZED: Whenever Drills are moved as part of an animated Contraption...", - "create.ponder.mechanical_drill_contraption.text_2": "UNLOCALIZED: ...they will break blocks the contraption runs them into", + "create.ponder.mechanical_drill_contraption.header": "장치에서의 기계식 드릴의 이용", + "create.ponder.mechanical_drill_contraption.text_1": "움직이는 장치에서 기계식 드릴이 이동하면...", + "create.ponder.mechanical_drill_contraption.text_2": "...드릴이 방해물을 파괴합니다", - "create.ponder.mechanical_harvester.header": "UNLOCALIZED: Using Mechanical Harvesters on Contraptions", - "create.ponder.mechanical_harvester.text_1": "UNLOCALIZED: Whenever Harvesters are moved as part of an animated Contraption...", - "create.ponder.mechanical_harvester.text_2": "UNLOCALIZED: They will harvest and reset any mature crops on their way", + "create.ponder.mechanical_harvester.header": "장치에서의 기계식 수확기의 이용", + "create.ponder.mechanical_harvester.text_1": "움직이는 장치에서 기계식 수확기가 이동하면...", + "create.ponder.mechanical_harvester.text_2": "수확기가 다 자란 작물을 수확하고 다시 심습니다", - "create.ponder.mechanical_mixer.header": "UNLOCALIZED: Processing Items with the Mechanical Mixer", - "create.ponder.mechanical_mixer.text_1": "UNLOCALIZED: With a Mixer and Basin, some Crafting Recipes can be automated", - "create.ponder.mechanical_mixer.text_2": "UNLOCALIZED: Available recipes include any Shapeless Crafting Recipe, plus a couple extra ones", - "create.ponder.mechanical_mixer.text_3": "UNLOCALIZED: Some of those recipes may require the heat of a Blaze Burner", - "create.ponder.mechanical_mixer.text_4": "UNLOCALIZED: The filter slot can be used in case two recipes are conflicting.", + "create.ponder.mechanical_mixer.header": "기계식 믹서기를 통한 아이템 처리", + "create.ponder.mechanical_mixer.text_1": "믹서기와 대야를 사용하면 일부 제작법과 맞는 아이템을 자동으로 제작할 수 있습니다", + "create.ponder.mechanical_mixer.text_2": "특정한 배치를 가지고 있지 않은 제작법과 몇 가지의 추가적인 제작법을 사용할 수 있습니다", + "create.ponder.mechanical_mixer.text_3": "그 제작법 중 일부는 블레이즈 가열기의 열기가 필요할 수 있습니다", + "create.ponder.mechanical_mixer.text_4": "두 가지의 제작법이 중복되는 경우 필터 슬롯을 사용하여 해결할 수 있습니다", - "create.ponder.mechanical_piston.header": "UNLOCALIZED: Moving Structures using Mechanical Pistons", - "create.ponder.mechanical_piston.text_1": "UNLOCALIZED: Mechanical Pistons can move blocks in front of them", - "create.ponder.mechanical_piston.text_2": "UNLOCALIZED: Speed and direction of movement depend on the Rotational Input", - "create.ponder.mechanical_piston.text_3": "UNLOCALIZED: Sticky Mechanical Pistons can pull the attached blocks back", + "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_modes.header": "UNLOCALIZED: Movement Modes of the Mechanical Piston", - "create.ponder.mechanical_piston_modes.text_1": "UNLOCALIZED: Whenever Pistons stop moving, the moved structure reverts to blocks", - "create.ponder.mechanical_piston_modes.text_2": "UNLOCALIZED: It can be configured never to revert to solid blocks, or only at the location it started at", + "create.ponder.mechanical_piston_modes.header": "기계식 피스톤의 이동 방식", + "create.ponder.mechanical_piston_modes.text_1": "피스톤이 동작을 멈출 때마다 이동된 구조물이 블록으로 되돌아갑니다", + "create.ponder.mechanical_piston_modes.text_2": "초기 위치에 있는 경우에만 설치되어 있게 만들거나 절대 설치되어 있지 않게 만들도록 설정할 수 있습니다", - "create.ponder.mechanical_plough.header": "UNLOCALIZED: Using Mechanical Ploughs on Contraptions", - "create.ponder.mechanical_plough.text_1": "UNLOCALIZED: Whenever Ploughs are moved as part of an animated Contraption...", - "create.ponder.mechanical_plough.text_2": "UNLOCALIZED: ...they will break blocks without a solid collision hitbox", - "create.ponder.mechanical_plough.text_3": "UNLOCALIZED: Additionally, ploughs can create farmland", - "create.ponder.mechanical_plough.text_4": "UNLOCALIZED: ...they can also launch entities without hurting them", + "create.ponder.mechanical_plough.header": "장치에서의 기계식 경작기의 이용", + "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_press.header": "UNLOCALIZED: Processing Items with the Mechanical Press", - "create.ponder.mechanical_press.text_1": "UNLOCALIZED: The Mechanical Press can process items provided beneath it", - "create.ponder.mechanical_press.text_2": "UNLOCALIZED: The Input items can be dropped or placed on a Depot under the Press", - "create.ponder.mechanical_press.text_3": "UNLOCALIZED: When items are provided on a belt...", - "create.ponder.mechanical_press.text_4": "UNLOCALIZED: The Press will hold and process them automatically", + "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_4": "압착기가 자동으로 아이템을 처리합니다", - "create.ponder.mechanical_press_compacting.header": "UNLOCALIZED: Compacting items with the Mechanical Press", - "create.ponder.mechanical_press_compacting.text_1": "UNLOCALIZED: Pressing items held in a Basin will cause them to be Compacted", - "create.ponder.mechanical_press_compacting.text_2": "UNLOCALIZED: Compacting includes any filled 2x2 or 3x3 Crafting Recipe, plus a couple extra ones", - "create.ponder.mechanical_press_compacting.text_3": "UNLOCALIZED: Some of those recipes may require the heat of a Blaze Burner", - "create.ponder.mechanical_press_compacting.text_4": "UNLOCALIZED: The filter slot can be used in case two recipes are conflicting.", + "create.ponder.mechanical_press_compacting.header": "기계식 압착기를 통한 아이템 압축", + "create.ponder.mechanical_press_compacting.text_1": "대야에 있는 아이템을 압착하면 아이템이 압축됩니다", + "create.ponder.mechanical_press_compacting.text_2": "같은 아이템을 2x2이나 3x3으로 사용하는 제작법과 몇 가지의 추가적인 제작법을 사용할 수 있습니다", + "create.ponder.mechanical_press_compacting.text_3": "그 제작법 중 일부는 블레이즈 가열기의 열기가 필요할 수 있습니다", + "create.ponder.mechanical_press_compacting.text_4": "두 가지의 제작법이 중복되는 경우 필터 슬롯을 사용하여 해결할 수 있습니다", "create.ponder.mechanical_pump_flow.header": "UNLOCALIZED: Fluid Transportation using Mechanical Pumps", "create.ponder.mechanical_pump_flow.text_1": "UNLOCALIZED: Mechanical Pumps govern the flow of their attached pipe networks", @@ -2023,35 +2023,35 @@ "create.ponder.mechanical_pump_speed.text_4": "UNLOCALIZED: Pumps can combine their throughputs within shared pipe networks", "create.ponder.mechanical_pump_speed.text_5": "UNLOCALIZED: Alternating their orientation can help align their flow directions", - "create.ponder.mechanical_saw_breaker.header": "UNLOCALIZED: Cutting Trees with the Mechanical Saw", - "create.ponder.mechanical_saw_breaker.text_1": "UNLOCALIZED: When given Rotational Force, a Mechanical Saw will cut trees directly in front of it", - "create.ponder.mechanical_saw_breaker.text_2": "UNLOCALIZED: In order to cut the tree fully, the Saw has to break the last block connecting it to the ground", + "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": "UNLOCALIZED: Using Mechanical Saws on Contraptions", - "create.ponder.mechanical_saw_contraption.text_1": "UNLOCALIZED: Whenever Saws are moved as part of an animated Contraption...", - "create.ponder.mechanical_saw_contraption.text_2": "UNLOCALIZED: ...they will cut any trees the contraption runs them into", + "create.ponder.mechanical_saw_contraption.header": "장치에서의 기계식 톱의 이용", + "create.ponder.mechanical_saw_contraption.text_1": "움직이는 장치에서 기계식 톱이 이동하면...", + "create.ponder.mechanical_saw_contraption.text_2": "...기계식 톱이 어떤 나무든지 자릅니다", - "create.ponder.mechanical_saw_processing.header": "UNLOCALIZED: Processing Items on the Mechanical Saw", - "create.ponder.mechanical_saw_processing.text_1": "UNLOCALIZED: Upward facing Mechanical Saws can process a variety of items", - "create.ponder.mechanical_saw_processing.text_2": "UNLOCALIZED: The processed item always moves against the rotational input to the saw", - "create.ponder.mechanical_saw_processing.text_3": "UNLOCALIZED: Saws can work in-line with Mechanical Belts", - "create.ponder.mechanical_saw_processing.text_4": "UNLOCALIZED: When an ingredient has multiple possible outcomes, the filter slot can specify it", - "create.ponder.mechanical_saw_processing.text_5": "UNLOCALIZED: Without filter, the Saw would cycle through all outcomes instead", + "create.ponder.mechanical_saw_processing.header": "기계식 톱을 통한 아이템 처리", + "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": "UNLOCALIZED: Processing Items in the Millstone", - "create.ponder.millstone.text_1": "UNLOCALIZED: Millstones process items by grinding them", - "create.ponder.millstone.text_2": "UNLOCALIZED: They can be powered from the side using cogwheels", - "create.ponder.millstone.text_3": "UNLOCALIZED: Throw or Insert items at the top", - "create.ponder.millstone.text_4": "UNLOCALIZED: After some time, the result can be obtained via Right-click", - "create.ponder.millstone.text_5": "UNLOCALIZED: The outputs can also be extracted by automation", + "create.ponder.millstone.header": "맷돌을 통한 아이템 처리", + "create.ponder.millstone.text_1": "맷돌은 아이템을 갈아낼 수 있습니다", + "create.ponder.millstone.text_2": "톱니바퀴를 측면에 연결하여 회전력을 받을 수 있습니다", + "create.ponder.millstone.text_3": "아이템을 맷돌 위에 던지거나 입력하면 아이템이 처리됩니다", + "create.ponder.millstone.text_4": "시간이 지나고 맷돌에 오른쪽 버튼을 누르면 갈아낸 아이템을 얻을 수 있습니다", + "create.ponder.millstone.text_5": "이러한 장치로 아이템을 자동으로 처리할 수 있습니다", - "create.ponder.nixie_tube.header": "UNLOCALIZED: Using Nixie Tubes", - "create.ponder.nixie_tube.text_1": "UNLOCALIZED: When powered by Redstone, Nixie Tubes will display the redstone signals' strength", - "create.ponder.nixie_tube.text_2": "UNLOCALIZED: Using name tags edited with an anvil, custom text can be displayed", + "create.ponder.nixie_tube.header": "표시등의 이용", + "create.ponder.nixie_tube.text_1": "레드스톤 신호를 받으면, 표시등은 레드스톤 신호의 전력을 표시합니다", + "create.ponder.nixie_tube.text_2": "모루로 이름을 바꾼 이름표를 사용하면 원하는 글씨를 표시할 수 있습니다", - "create.ponder.piston_pole.header": "UNLOCALIZED: Piston Extension Poles", - "create.ponder.piston_pole.text_1": "UNLOCALIZED: Without attached Poles, a Mechanical Piston cannot move", - "create.ponder.piston_pole.text_2": "UNLOCALIZED: The Length of pole added at its back determines the Extension Range", + "create.ponder.piston_pole.header": "피스톤 연장대", + "create.ponder.piston_pole.text_1": "연결된 연장대가 없다면, 기계식 피스톤은 사용할 수 없습니다", + "create.ponder.piston_pole.text_2": "뒤에 추가된 연장대의 길이에 따라 피스톤의 거리가 바뀝니다", "create.ponder.portable_fluid_interface.header": "UNLOCALIZED: Contraption Fluid Exchange", "create.ponder.portable_fluid_interface.text_1": "UNLOCALIZED: Fluid Tanks on moving contraptions cannot be accessed by any pipes", @@ -2063,102 +2063,102 @@ "create.ponder.portable_fluid_interface.text_7": "UNLOCALIZED: ...or extracted from the contraption", "create.ponder.portable_fluid_interface.text_8": "UNLOCALIZED: After no contents have been exchanged for a while, the contraption will continue on its way", - "create.ponder.portable_storage_interface.header": "UNLOCALIZED: Contraption Storage Exchange", - "create.ponder.portable_storage_interface.text_1": "UNLOCALIZED: Inventories on moving contraptions cannot be accessed by players.", - "create.ponder.portable_storage_interface.text_2": "UNLOCALIZED: This component can interact with storage without the need to stop the contraption.", - "create.ponder.portable_storage_interface.text_3": "UNLOCALIZED: Place a second one with a gap of 1 or 2 blocks inbetween", - "create.ponder.portable_storage_interface.text_4": "UNLOCALIZED: Whenever they pass by each other, they will engage in a connection", - "create.ponder.portable_storage_interface.text_5": "UNLOCALIZED: While engaged, the stationary interface will represent ALL inventories on the contraption", - "create.ponder.portable_storage_interface.text_6": "UNLOCALIZED: Items can now be inserted...", - "create.ponder.portable_storage_interface.text_7": "UNLOCALIZED: ...or extracted from the contraption", - "create.ponder.portable_storage_interface.text_8": "UNLOCALIZED: After no items have been exchanged for a while, the contraption will continue on its way", + "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_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_8": "아이템 교환이 끝났다면, 장치가 다시 움직입니다", - "create.ponder.portable_storage_interface_redstone.header": "UNLOCALIZED: Redstone Control", - "create.ponder.portable_storage_interface_redstone.text_1": "UNLOCALIZED: Redstone power will prevent the stationary interface from engaging", + "create.ponder.portable_storage_interface_redstone.header": "레드스톤 제어", + "create.ponder.portable_storage_interface_redstone.text_1": "레드스톤 신호를 받으면, 전달기가 장치에 개입하지 않습니다", - "create.ponder.powered_latch.header": "UNLOCALIZED: Controlling signals using the Powered Latch", - "create.ponder.powered_latch.text_1": "UNLOCALIZED: Powered Latches are redstone controllable Levers", - "create.ponder.powered_latch.text_2": "UNLOCALIZED: Signals at the back switch it on", - "create.ponder.powered_latch.text_3": "UNLOCALIZED: Signals from the side switch it back off", - "create.ponder.powered_latch.text_4": "UNLOCALIZED: Powered latches can also be toggled manually", + "create.ponder.powered_latch.header": "레드스톤 잠금기를 통한 신호 제어", + "create.ponder.powered_latch.text_1": "레드스톤 잠금기는 레드스톤 신호를 제어할 수 있는 레버입니다", + "create.ponder.powered_latch.text_2": "뒤쪽에서 신호를 주면, 잠금기가 켜집니다", + "create.ponder.powered_latch.text_3": "옆쪽에서 신호를 주면, 잠금기가 꺼집니다", + "create.ponder.powered_latch.text_4": "레드스톤 잠금기는 수동으로 전환할 수 있습니다", - "create.ponder.powered_toggle_latch.header": "UNLOCALIZED: Controlling signals using the Powered Toggle Latch", - "create.ponder.powered_toggle_latch.text_1": "UNLOCALIZED: Powered Toggle Latches are redstone controllable Levers", - "create.ponder.powered_toggle_latch.text_2": "UNLOCALIZED: Signals at the back will toggle its state", - "create.ponder.powered_toggle_latch.text_3": "UNLOCALIZED: ...on and back off", - "create.ponder.powered_toggle_latch.text_4": "UNLOCALIZED: Powered toggle latches can also be toggled manually", + "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_4": "레버식 레드스톤 잠금기는 수동으로 전환할 수 있습니다", - "create.ponder.pulse_repeater.header": "UNLOCALIZED: Controlling signals using Pulse Repeaters", - "create.ponder.pulse_repeater.text_1": "UNLOCALIZED: Pulse Repeaters will shorten any redstone signal to a single pulse", + "create.ponder.pulse_repeater.header": "순간작동 중계기를 통한 신호 제어", + "create.ponder.pulse_repeater.text_1": "순간작동 중계기는 모든 레드스톤 신호를 잠깐의 신호로 단축합니다", - "create.ponder.radial_chassis.header": "UNLOCALIZED: Attaching blocks using Radial Chassis", - "create.ponder.radial_chassis.text_1": "UNLOCALIZED: Radial Chassis connect to identical Chassis blocks in a row", - "create.ponder.radial_chassis.text_2": "UNLOCALIZED: When one is moved by a Contraption, the others are dragged with it", - "create.ponder.radial_chassis.text_3": "UNLOCALIZED: The side faces of a Radial Chassis can be made Sticky", - "create.ponder.radial_chassis.text_4": "UNLOCALIZED: Click again to make all other sides sticky", - "create.ponder.radial_chassis.text_5": "UNLOCALIZED: Sneak and Right-Click with an empty hand to remove the slime", - "create.ponder.radial_chassis.text_6": "UNLOCALIZED: Whenever a Block is next to a sticky face...", - "create.ponder.radial_chassis.text_7": "UNLOCALIZED: ...it will attach all reachable blocks within a radius on that layer", - "create.ponder.radial_chassis.text_8": "UNLOCALIZED: Using a Wrench, a precise Radius can be specified for this chassis", - "create.ponder.radial_chassis.text_9": "UNLOCALIZED: Blocks not reachable by any sticky face will not attach", + "create.ponder.radial_chassis.header": "반경 연결대를 통한 블록 부착", + "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.redstone_contact.header": "UNLOCALIZED: Redstone Contacts", - "create.ponder.redstone_contact.text_1": "UNLOCALIZED: Redstone Contacts facing each other will emit a redstone signal", - "create.ponder.redstone_contact.text_2": "UNLOCALIZED: This still applies when one of them is part of a moving Contraption", + "create.ponder.redstone_contact.header": "레드스톤 접촉기", + "create.ponder.redstone_contact.text_1": "레드스톤 접촉기끼리 서로 마주 보면 레드스톤 신호를 방출합니다", + "create.ponder.redstone_contact.text_2": "접촉기 중 하나가 이동하는 장치에 포함되어 있어도 적용됩니다", - "create.ponder.redstone_link.header": "UNLOCALIZED: Using Redstone Links", - "create.ponder.redstone_link.text_1": "UNLOCALIZED: Redstone Links can transmit redstone signals wirelessly", - "create.ponder.redstone_link.text_2": "UNLOCALIZED: Right-click while Sneaking to toggle receive mode", - "create.ponder.redstone_link.text_3": "UNLOCALIZED: A simple Right-click with a Wrench can do the same", - "create.ponder.redstone_link.text_4": "UNLOCALIZED: Receivers emit the redstone power of transmitters within 128 blocks", - "create.ponder.redstone_link.text_5": "UNLOCALIZED: Placing items in the two slots can specify a Frequency", - "create.ponder.redstone_link.text_6": "UNLOCALIZED: Only the links with matching Frequencies will communicate", + "create.ponder.redstone_link.header": "레드스톤 연동 장치의 이용", + "create.ponder.redstone_link.text_1": "레드스톤 연동 장치는 레드스톤 신호를 무선으로 전송할 수 있습니다", + "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.rope_pulley.header": "UNLOCALIZED: Moving Structures using Rope Pulleys", - "create.ponder.rope_pulley.text_1": "UNLOCALIZED: Rope Pulleys can move blocks vertically when given Rotational Force", - "create.ponder.rope_pulley.text_2": "UNLOCALIZED: Direction and Speed of movement depend on the Rotational Input", + "create.ponder.rope_pulley.header": "밧줄 도르래를 통한 구조물 이동", + "create.ponder.rope_pulley.text_1": "회전력을 받으면, 밧줄 도르래는 블록을 수직으로 움직이게 만듭니다", + "create.ponder.rope_pulley.text_2": "이동 방향과 속도는 회전력에 따라 달라집니다", - "create.ponder.rope_pulley_attachment.header": "UNLOCALIZED: Moving Pulleys as part of a Contraption", - "create.ponder.rope_pulley_attachment.text_1": "UNLOCALIZED: Whenever Pulleys are themselves being moved by a Contraption...", - "create.ponder.rope_pulley_attachment.text_2": "UNLOCALIZED: ...its attached structure will be dragged with it", - "create.ponder.rope_pulley_attachment.text_3": "UNLOCALIZED: Mind that pulleys are only movable while stopped", + "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_3": "도르래가 멈춘 상태에서만 이동할 수 있습니다", - "create.ponder.rope_pulley_modes.header": "UNLOCALIZED: Movement Modes of the Rope Pulley", - "create.ponder.rope_pulley_modes.text_1": "UNLOCALIZED: Whenever Pulleys stop moving, the moved structure reverts to blocks", - "create.ponder.rope_pulley_modes.text_2": "UNLOCALIZED: It can be configured never to revert to solid blocks, or only at the location it started at", + "create.ponder.rope_pulley_modes.header": "밧줄 도르래의 이동 방식", + "create.ponder.rope_pulley_modes.text_1": "도르래가 동작을 멈출 때마다 이동된 구조물이 블록으로 되돌아갑니다", + "create.ponder.rope_pulley_modes.text_2": "초기 위치에 있는 경우에만 설치되어 있게 만들거나 절대 설치되어 있지 않게 만들도록 설정할 수 있습니다", - "create.ponder.rotation_speed_controller.header": "UNLOCALIZED: Using the Rotational Speed Controller", - "create.ponder.rotation_speed_controller.text_1": "UNLOCALIZED: Rot. Speed Controllers relay rotation from their axis to a Large Cogwheel above them", - "create.ponder.rotation_speed_controller.text_2": "UNLOCALIZED: Using the scroll input on its side, the conveyed speed can be configured", + "create.ponder.rotation_speed_controller.header": "회전 속도 제어기의 이용", + "create.ponder.rotation_speed_controller.text_1": "회전 속도 제어기는 회전력을 축에서 위에 있는 큰 톱니바퀴로 전달합니다", + "create.ponder.rotation_speed_controller.text_2": "옆쪽을 스크롤하여 회전 속도를 설정할 수 있습니다", - "create.ponder.sail.header": "UNLOCALIZED: Assembling Windmills using Sails", - "create.ponder.sail.text_1": "UNLOCALIZED: Sails are handy blocks to create Windmills with", - "create.ponder.sail.text_2": "UNLOCALIZED: They will attach to blocks and each other without the need of Super Glue or Chassis Blocks", - "create.ponder.sail.text_3": "UNLOCALIZED: Right-Click with Dye to paint them", - "create.ponder.sail.text_4": "UNLOCALIZED: Right-Click with Shears to turn them back into frames", + "create.ponder.sail.header": "캔버스를 통한 풍차의 작동", + "create.ponder.sail.text_1": "캔버스는 풍차를 위한 블록입니다", + "create.ponder.sail.text_2": "강력 접착제나 연결대 블록 없이 연결될 수 있습니다", + "create.ponder.sail.text_3": "오른쪽 버튼을 누르면 염색할 수 있습니다", + "create.ponder.sail.text_4": "가위를 들고 오른쪽 버튼을 누르면 캔버스 틀로 만들 수 있습니다", - "create.ponder.sail_frame.header": "UNLOCALIZED: Assembling Windmills using Sail Frames", - "create.ponder.sail_frame.text_1": "UNLOCALIZED: Sail Frames are handy blocks to create Windmills with", - "create.ponder.sail_frame.text_2": "UNLOCALIZED: They will attach to blocks and each other without the need of Super Glue or Chassis Blocks", + "create.ponder.sail_frame.header": "캔버스 틀을 통한 풍차의 작동", + "create.ponder.sail_frame.text_1": "캔버스 틀은 풍차를 위한 블록입니다", + "create.ponder.sail_frame.text_2": "강력 접착제나 연결대 블록 없이 연결될 수 있습니다", - "create.ponder.sequenced_gearshift.header": "UNLOCALIZED: Controlling Rotational Speed using Sequenced Gearshifts", - "create.ponder.sequenced_gearshift.text_1": "UNLOCALIZED: Seq. Gearshifts relay rotation by following a timed list of instructions", - "create.ponder.sequenced_gearshift.text_2": "UNLOCALIZED: Right-click it to open the Configuration UI", - "create.ponder.sequenced_gearshift.text_3": "UNLOCALIZED: Upon receiving a Redstone Signal, it will start running its configured sequence", - "create.ponder.sequenced_gearshift.text_4": "UNLOCALIZED: Once finished, it waits for the next Redstone Signal and starts over", - "create.ponder.sequenced_gearshift.text_5": "UNLOCALIZED: A redstone comparator can be used to read the current progress", + "create.ponder.sequenced_gearshift.header": "순서화 전환기를 통한 회전 속도 제어", + "create.ponder.sequenced_gearshift.text_1": "순서화 전환기는 설정한 지시에 따라 회전됩니다", + "create.ponder.sequenced_gearshift.text_2": "오른쪽 버튼을 누르면 설정 창이 열립니다", + "create.ponder.sequenced_gearshift.text_3": "레드스톤 신호를 받으면 설정된 지시에 따라 회전하기 시작합니다", + "create.ponder.sequenced_gearshift.text_4": "완료되면, 다음 레드스톤 신호를 기다립니다", + "create.ponder.sequenced_gearshift.text_5": "레드스톤 비교기를 사용하면 현재 진행 상황을 알 수 있습니다", - "create.ponder.shaft.header": "UNLOCALIZED: Relaying rotational force using Shafts", - "create.ponder.shaft.text_1": "UNLOCALIZED: Shafts will relay rotation in a straight line.", + "create.ponder.shaft.header": "축을 통한 회전력 전달", + "create.ponder.shaft.text_1": "축은 일직선으로 회전합니다", - "create.ponder.shaft_casing.header": "UNLOCALIZED: Encasing Shafts", - "create.ponder.shaft_casing.text_1": "UNLOCALIZED: Brass or Andesite Casing can be used to decorate Shafts", + "create.ponder.shaft_casing.header": "틀을 씌운 축", + "create.ponder.shaft_casing.text_1": "황동 틀이나 안산암 틀로 축을 장식할 수 있습니다", - "create.ponder.smart_chute.header": "UNLOCALIZED: Filtering Items using Smart Chutes", - "create.ponder.smart_chute.text_1": "UNLOCALIZED: Smart Chutes are vertical chutes with additional control", - "create.ponder.smart_chute.text_2": "UNLOCALIZED: Items in the filter slot specify what exactly they can extract and transfer", - "create.ponder.smart_chute.text_3": "UNLOCALIZED: Use the Mouse Wheel to specify the extracted stack size", - "create.ponder.smart_chute.text_4": "UNLOCALIZED: Redstone power will prevent Smart Chutes from acting.", + "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_pipe.header": "UNLOCALIZED: Controlling Fluid flow using Smart Pipes", "create.ponder.smart_pipe.text_1": "UNLOCALIZED: Smart pipes can help control flows by fluid type", @@ -2166,10 +2166,10 @@ "create.ponder.smart_pipe.text_3": "UNLOCALIZED: Simply Right-Click their filter slot with any item containing the desired fluid", "create.ponder.smart_pipe.text_4": "UNLOCALIZED: When placed further down a pipe network, smart pipes will only let matching fluids continue", - "create.ponder.speedometer.header": "UNLOCALIZED: Monitoring Kinetic information using the Speedometer", - "create.ponder.speedometer.text_1": "UNLOCALIZED: The Speedometer displays the current Speed of the attached components", - "create.ponder.speedometer.text_2": "UNLOCALIZED: When wearing Engineers' Goggles, the player can get more detailed information from the Gauge", - "create.ponder.speedometer.text_3": "UNLOCALIZED: Comparators can emit analog Restone Signals relative to the Speedometer's measurements", + "create.ponder.speedometer.header": "속도계를 통한 동적 정보 확인", + "create.ponder.speedometer.text_1": "속도계는 연결된 장치의 현재 속도를 표시합니다", + "create.ponder.speedometer.text_2": "공학자의 안경을 장착하면, 세부 정보를 확인할 수 있습니다", + "create.ponder.speedometer.text_3": "속도계의 측정값에 따라 비교기가 레드스톤 신호를 방출합니다", "create.ponder.spout_filling.header": "UNLOCALIZED: Filling Items using a Spout", "create.ponder.spout_filling.text_1": "UNLOCALIZED: The Spout can fill fluid holding items provided beneath it", @@ -2179,36 +2179,36 @@ "create.ponder.spout_filling.text_5": "UNLOCALIZED: When items are provided on a belt...", "create.ponder.spout_filling.text_6": "UNLOCALIZED: The Spout will hold and process them automatically", - "create.ponder.stabilized_bearings.header": "UNLOCALIZED: Stabilized Contraptions", - "create.ponder.stabilized_bearings.text_1": "UNLOCALIZED: Whenever Mechanical Bearings are themselves part of a moving Structure..", - "create.ponder.stabilized_bearings.text_2": "UNLOCALIZED: ..they will attempt to keep themselves upright", - "create.ponder.stabilized_bearings.text_3": "UNLOCALIZED: Once again, the bearing will attach to the block in front of it", - "create.ponder.stabilized_bearings.text_4": "UNLOCALIZED: As a result, the entire sub-Contraption will stay upright", + "create.ponder.stabilized_bearings.header": "안정적인 장치", + "create.ponder.stabilized_bearings.text_1": "기계식 회전장치는 움직이는 구조물에서 이동해도...", + "create.ponder.stabilized_bearings.text_2": "...방향이 유지됩니다", + "create.ponder.stabilized_bearings.text_3": "회전장치의 앞에 블록이 부착되어도...", + "create.ponder.stabilized_bearings.text_4": "부착된 구조물의 방향이 유지됩니다", - "create.ponder.sticker.header": "UNLOCALIZED: Attaching blocks using the Sticker", - "create.ponder.sticker.text_1": "UNLOCALIZED: Stickers are ideal for Redstone-controlled block attachment", - "create.ponder.sticker.text_2": "UNLOCALIZED: Upon receiving a signal, it will toggle its state", - "create.ponder.sticker.text_3": "UNLOCALIZED: If it is now moved in a contraption, the block will move with it", - "create.ponder.sticker.text_4": "UNLOCALIZED: Toggled once again, the block is no longer attached", + "create.ponder.sticker.header": "부착기를 통한 블록 부착", + "create.ponder.sticker.text_1": "부착기는 레드스톤으로 제어할 수 있습니다", + "create.ponder.sticker.text_2": "신호를 받으면, 부착기가 블록을 부착합니다", + "create.ponder.sticker.text_3": "장치가 이동하면 부착된 블록도 같이 이동합니다", + "create.ponder.sticker.text_4": "다시 한번 신호를 받으면, 블록이 부착되지 않게 됩니다", - "create.ponder.stressometer.header": "UNLOCALIZED: Monitoring Kinetic information using the Stressometer", - "create.ponder.stressometer.text_1": "UNLOCALIZED: The Stressometer displays the current Stress Capacity of the attached kinetic network", - "create.ponder.stressometer.text_2": "UNLOCALIZED: When wearing Engineers' Goggles, the player can get more detailed information from the Gauge", - "create.ponder.stressometer.text_3": "UNLOCALIZED: Comparators can emit analog Restone Signals relative to the Stressometer's measurements", + "create.ponder.stressometer.header": "부하계를 통한 동적 정보 확인", + "create.ponder.stressometer.text_1": "부하계는 연결된 장치의 현재 부하를 표시합니다", + "create.ponder.stressometer.text_2": "공학자의 안경을 장착하면, 세부 정보를 확인할 수 있습니다", + "create.ponder.stressometer.text_3": "부하계의 측정값에 따라 비교기가 레드스톤 신호를 방출합니다", - "create.ponder.super_glue.header": "UNLOCALIZED: Attaching blocks using Super Glue", - "create.ponder.super_glue.text_1": "UNLOCALIZED: Super Glue can be used between any two blocks", - "create.ponder.super_glue.text_2": "UNLOCALIZED: The attached blocks will move together when assembled into a Contraption", - "create.ponder.super_glue.text_3": "UNLOCALIZED: Whenever Super Glue is held in the off-hand...", - "create.ponder.super_glue.text_4": "UNLOCALIZED: ...added blocks will be glued to the face they were placed on automatically", - "create.ponder.super_glue.text_5": "UNLOCALIZED: Super Glue can be removed with Left-Click", + "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_5": "왼쪽 버튼을 누르면 강력 접착제를 제거할 수 있습니다", - "create.ponder.valve_handle.header": "UNLOCALIZED: Generating Rotational Force using Valve Handles", - "create.ponder.valve_handle.text_1": "UNLOCALIZED: Valve Handles can be used by players to apply rotational force manually", - "create.ponder.valve_handle.text_2": "UNLOCALIZED: Hold Right-Click to rotate it Counter-Clockwise", - "create.ponder.valve_handle.text_3": "UNLOCALIZED: Its conveyed speed is slow and precise", - "create.ponder.valve_handle.text_4": "UNLOCALIZED: Sneak and Hold Right-Click to rotate it Clockwise", - "create.ponder.valve_handle.text_5": "UNLOCALIZED: Valve handles can be dyed for aesthetic purposes", + "create.ponder.valve_handle.header": "밸브 손잡이를 통한 회전력 생성", + "create.ponder.valve_handle.text_1": "밸브 손잡이를 사용하면 수동으로 회전력을 생성할 수 있습니다", + "create.ponder.valve_handle.text_2": "오른쪽 버튼을 누르면 반시계 방향으로 회전합니다", + "create.ponder.valve_handle.text_3": "전달되는 속도는 상대적으로 낮습니다", + "create.ponder.valve_handle.text_4": "웅크리고 오른쪽 버튼을 누르면 시계 방향으로 회전합니다", + "create.ponder.valve_handle.text_5": "밸브 손잡이는 염료로 염색할 수 있습니다", "create.ponder.valve_pipe.header": "UNLOCALIZED: Controlling Fluid flow using Valves", "create.ponder.valve_pipe.text_1": "UNLOCALIZED: Valve pipes help control fluids propagating through pipe networks", @@ -2216,46 +2216,46 @@ "create.ponder.valve_pipe.text_3": "UNLOCALIZED: Given Rotational Force in the opening direction, the valve will open up", "create.ponder.valve_pipe.text_4": "UNLOCALIZED: It can be closed again by reversing the input rotation", - "create.ponder.water_wheel.header": "UNLOCALIZED: Generating Rotational Force using Water Wheels", - "create.ponder.water_wheel.text_1": "UNLOCALIZED: Water Wheels draw force from adjacent Water Currents", - "create.ponder.water_wheel.text_2": "UNLOCALIZED: The more faces are powered, the faster the Water Wheel will rotate", - "create.ponder.water_wheel.text_3": "UNLOCALIZED: The Wheels' blades should be oriented against the flow", - "create.ponder.water_wheel.text_4": "UNLOCALIZED: Facing the opposite way, they will not be as effective", + "create.ponder.water_wheel.header": "물레바퀴를 통한 회전력 생성", + "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": "UNLOCALIZED: Using Weighted Ejectors", - "create.ponder.weighted_ejector.text_1": "UNLOCALIZED: Sneak and Right-Click holding an Ejector to select its target location", - "create.ponder.weighted_ejector.text_10": "UNLOCALIZED: It is now limited to this stack size, and only activates when its held stack reaches this amount", - "create.ponder.weighted_ejector.text_11": "UNLOCALIZED: Other Entities will always trigger an Ejector when stepping on it", - "create.ponder.weighted_ejector.text_2": "UNLOCALIZED: The placed ejector will now launch objects to the marked location", - "create.ponder.weighted_ejector.text_3": "UNLOCALIZED: A valid target can be at any height or distance within range", - "create.ponder.weighted_ejector.text_4": "UNLOCALIZED: They cannot however be off to a side", - "create.ponder.weighted_ejector.text_5": "UNLOCALIZED: If no valid Target was selected, it will simply target the block directly in front", - "create.ponder.weighted_ejector.text_6": "UNLOCALIZED: Supply Rotational Force in order to charge it up", - "create.ponder.weighted_ejector.text_7": "UNLOCALIZED: Items placed on the ejector cause it to trigger", - "create.ponder.weighted_ejector.text_8": "UNLOCALIZED: If Inventories are targeted, the ejector will wait until there is space", - "create.ponder.weighted_ejector.text_9": "UNLOCALIZED: Using the Wrench, a required Stack Size can be configured", + "create.ponder.weighted_ejector.header": "발사대의 이용", + "create.ponder.weighted_ejector.text_1": "발사대를 들고 웅크리고 오른쪽 버튼을 누르면 발사 지점을 지정할 수 있습니다", + "create.ponder.weighted_ejector.text_10": "이제, 발사대에 놓인 아이템의 양이 설정한 양에 도달한 경우에만 발사대가 작동됩니다", + "create.ponder.weighted_ejector.text_11": "다른 엔티티가 발사대를 밟으면, 항상 발사대가 작동합니다", + "create.ponder.weighted_ejector.text_2": "설치된 발사대는 지정한 위치에다 물체를 발사합니다", + "create.ponder.weighted_ejector.text_3": "이 범위 내에 아무 장소에 있는 지점에만 발사할 수 있습니다", + "create.ponder.weighted_ejector.text_4": "옆으로 발사할 수는 없습니다", + "create.ponder.weighted_ejector.text_5": "발사 지점이 선택되지 않거나 올바르지 않은 경우, 바로 앞에 물체를 발사합니다", + "create.ponder.weighted_ejector.text_6": "발사하려면 회전력이 필요합니다", + "create.ponder.weighted_ejector.text_7": "발사대에 아이템을 놓으면 발사대가 작동됩니다", + "create.ponder.weighted_ejector.text_8": "저장소가 발사 지점인 경우에는 발사대가 저장소에 공간이 생길 때까지 기다립니다", + "create.ponder.weighted_ejector.text_9": "스패너를 사용하여, 발사에 필요한 아이템의 양을 설정할 수 있습니다", - "create.ponder.weighted_ejector_redstone.header": "UNLOCALIZED: Controlling Weighted Ejectors with Redstone", - "create.ponder.weighted_ejector_redstone.text_1": "UNLOCALIZED: When powered by Redstone, Ejectors will not activate", - "create.ponder.weighted_ejector_redstone.text_2": "UNLOCALIZED: Furthermore, Observers can detect when Ejectors activate", + "create.ponder.weighted_ejector_redstone.header": "레드스톤을 통한 발사대의 제어", + "create.ponder.weighted_ejector_redstone.text_1": "레드스톤 신호를 받으면, 발사대가 작동되지 않습니다", + "create.ponder.weighted_ejector_redstone.text_2": "또한, 관측기는 발사대가 작동하는 것 탐지할 수 있습니다", - "create.ponder.weighted_ejector_tunnel.header": "UNLOCALIZED: Splitting item stacks using Weighted Ejectors", - "create.ponder.weighted_ejector_tunnel.text_1": "UNLOCALIZED: Combined with Brass Tunnels, Ejectors can split item stacks by specific amounts", - "create.ponder.weighted_ejector_tunnel.text_2": "UNLOCALIZED: First, configure the Brass Tunnel to 'Prefer Nearest', in order to prioritize its side output", - "create.ponder.weighted_ejector_tunnel.text_3": "UNLOCALIZED: The Stack Size set on the Ejector now determines the amount to be split off", - "create.ponder.weighted_ejector_tunnel.text_4": "UNLOCALIZED: While a new stack of the configured size exits the side output...", - "create.ponder.weighted_ejector_tunnel.text_5": "UNLOCALIZED: ...the remainder will continue on its path", + "create.ponder.weighted_ejector_tunnel.header": "발사대를 통한 아이템의 분할", + "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.windmill_source.header": "UNLOCALIZED: Generating Rotational Force using Windmill Bearings", - "create.ponder.windmill_source.text_1": "UNLOCALIZED: Windmill Bearings attach to the block in front of them", - "create.ponder.windmill_source.text_2": "UNLOCALIZED: If enough Sail-like blocks are attached to the block, it can act as a Windmill", - "create.ponder.windmill_source.text_3": "UNLOCALIZED: Activated with Right-Click, the Windmill Bearing will start providing Rotational Force", - "create.ponder.windmill_source.text_4": "UNLOCALIZED: The Amount of Sail Blocks determine its Rotation Speed", - "create.ponder.windmill_source.text_5": "UNLOCALIZED: Use a Wrench to configure its rotation direction", - "create.ponder.windmill_source.text_6": "UNLOCALIZED: Right-click the Bearing anytime to stop and edit the Structure again", + "create.ponder.windmill_source.header": "풍차 회전장치를 통한 회전력 생성", + "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_5": "스패너를 들고 스크롤하면 회전 방향을 설정할 수 있습니다", + "create.ponder.windmill_source.text_6": "회전장치에 오른쪽 버튼을 누르면 회전장치가 멈추고, 구조물을 편집할 수 있게 됩니다", - "create.ponder.windmill_structure.header": "UNLOCALIZED: Windmill Contraptions", - "create.ponder.windmill_structure.text_1": "UNLOCALIZED: Any Structure can count as a valid Windmill, as long as it contains at least 8 sail-like Blocks.", + "create.ponder.windmill_structure.header": "풍차 장치", + "create.ponder.windmill_structure.text_1": "최소 8개 이상의 날개 블록이 있는 구조물만 풍차로 사용할 수 있습니다", "_": "Thank you for translating Create!" From 593396a3d236b40627031e25ecd41aef3e7c1950 Mon Sep 17 00:00:00 2001 From: CKenJa <41111170+CKenJa@users.noreply.github.com> Date: Tue, 6 Jul 2021 19:45:22 +0900 Subject: [PATCH 023/118] Updates to ja_jp.json by CKenJa (#1901) --- .../resources/assets/create/lang/ja_jp.json | 32 +++++++++++-------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/src/main/resources/assets/create/lang/ja_jp.json b/src/main/resources/assets/create/lang/ja_jp.json index 262e40f0e..f3fd33e07 100644 --- a/src/main/resources/assets/create/lang/ja_jp.json +++ b/src/main/resources/assets/create/lang/ja_jp.json @@ -72,7 +72,6 @@ "block.create.crushing_wheel": "破砕ホイール", "block.create.crushing_wheel_controller": "破砕ホイールコントローラー", "block.create.cuckoo_clock": "鳩時計", - "block.create.cursed_bell": "呪われた鐘", "block.create.cyan_sail": "水色の帆", "block.create.cyan_seat": "水色のシート", "block.create.cyan_valve_handle": "水色のバルブハンドル", @@ -186,6 +185,7 @@ "block.create.green_seat": "緑色のシート", "block.create.green_valve_handle": "緑色のバルブハンドル", "block.create.hand_crank": "ハンドクランク", + "block.create.haunted_bell": "憑りつかれた鐘", "block.create.honey": "ハチミツ", "block.create.horizontal_framed_glass": "横型ガラス窓", "block.create.horizontal_framed_glass_pane": "横型ガラス窓板", @@ -443,7 +443,6 @@ "item.create.chocolate_glazed_berries": "チョコレートグレーズドベリー", "item.create.chromatic_compound": "色彩の化合物", "item.create.cinder_flour": "ネザーラックの粉", - "item.create.clockwork_component": "時計仕掛け", "item.create.copper_backtank": "銅のバックタンク", "item.create.copper_ingot": "銅インゴット", "item.create.copper_nugget": "銅塊", @@ -478,7 +477,9 @@ "item.create.handheld_worldshaper": "携帯型ワールドシェーパー", "item.create.honey_bucket": "ハチミツ入りバケツ", "item.create.honeyed_apple": "リンゴのハチミツかけ", - "item.create.incomplete_clockwork_component": "組み立て中の時計仕掛け", + "item.create.incomplete_cogwheel": "組み立て中の歯車", + "item.create.incomplete_large_cogwheel": "組み立て中の大きな歯車", + "item.create.incomplete_precision_mechanism": "組み立て中の精密機構", "item.create.iron_sheet": "鉄板", "item.create.linked_controller": "リンクコントローラー", "item.create.minecart_contraption": "からくり付きトロッコ", @@ -486,6 +487,7 @@ "item.create.polished_rose_quartz": "磨かれたローズクォーツ", "item.create.potato_cannon": "ポテトキャノン", "item.create.powdered_obsidian": "黒曜石の粉", + "item.create.precision_mechanism": "精密機構", "item.create.propeller": "プロペラ", "item.create.red_sand_paper": "赤い紙やすり", "item.create.refined_radiance": "高貴な光輝", @@ -630,8 +632,8 @@ "advancement.create.flywheel.desc": "かまどエンジンを勢車に繋ぐ", "advancement.create.overstress_flywheel": "ハイレベル応力", "advancement.create.overstress_flywheel.desc": "かまどエンジンに超過応力をかける", - "advancement.create.integrated_circuit": "複雑な計算", - "advancement.create.integrated_circuit.desc": "集積回路を組み立てる", + "advancement.create.precision_mechanism": "手間暇かけた骨董品", + "advancement.create.precision_mechanism.desc": "精密機構を組み立てる", "advancement.create.mechanical_arm": "手が離せない!", "advancement.create.mechanical_arm.desc": "搬入元と搬出先を設定したメカニカルアームを設置して稼働させ、あなたのために一生懸命働いている様子を見る", "advancement.create.musical_arm": "お気に入りの曲を流して!", @@ -658,6 +660,8 @@ "advancement.create.wand_of_symmetry.desc": "対象の杖を作る", "advancement.create.extendo_grip": "ビヨヨーン!", "advancement.create.extendo_grip.desc": "マジックハンドを手に入れる", + "advancement.create.potato_cannon": "バキューン!", + "advancement.create.potato_cannon.desc": "ポテトキャノンで敵を倒す", "advancement.create.dual_extendo_grip": "究極のビヨンビヨン時代", "advancement.create.dual_extendo_grip.desc": "二刀流のマジックハンドで超人的なリーチを手に入れる", "advancement.create.eob": "ベータ版はここまで", @@ -1182,13 +1186,14 @@ "create.subtitle.peculiar_bell_use": "風変わりな鐘が鳴る", "create.subtitle.mixing": "混ぜる音", "create.subtitle.mechanical_press_activation_belt": "メカニカルプレスがボンと鳴る", - "create.subtitle.fwoomp": "ポテトランチャーがズキューンと鳴る", + "create.subtitle.fwoomp": "ポテトランチャーがバキューンと鳴る", "create.subtitle.worldshaper_place": "ワールドシェーパーが設置する", "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.scroll_value": "スクロールのカチカチ音", "create.subtitle.crafter_craft": "メカニカルクラフターがクラフトする", "create.subtitle.controller_put": "コントローラのトントン音", @@ -1199,13 +1204,12 @@ "create.subtitle.wrench_rotate": "レンチが使用される", "create.subtitle.potato_hit": "野菜が衝突する", "create.subtitle.saw_activate_wood": "メカニカルソーが動作する", + "create.subtitle.haunted_bell_convert": "憑りつかれた鐘が目覚める", "create.subtitle.deployer_polish": "デプロイヤーが磨く", "create.subtitle.deny": "失敗音", "create.subtitle.controller_click": "コントローラーのカチカチ音", "create.subtitle.schematicannon_launch_block": "概略図砲が発射する", "create.subtitle.copper_armor_equip": "潜水服がチャリンと鳴る", - "create.subtitle.cursed_bell_use": "呪われた鐘が鳴る", - "create.subtitle.cursed_bell_convert": "呪われた金が目覚める", "create.subtitle.controller_take": "書見台が空になる", "create.subtitle.mechanical_press_activation": "メカニカルプレスがガーンと鳴る", "create.subtitle.contraption_assemble": "からくりが動く", @@ -1434,12 +1438,12 @@ "item.create.minecart_coupling.tooltip.behaviour1": "_2台_のトロッコを連結します。それらは移動中に_一定_の_距離_を保とうします。", "block.create.peculiar_bell.tooltip": "風変わりな鐘", - "block.create.peculiar_bell.tooltip.summary": "装飾用の真鍮の鐘。_魂の炎_や_魂の焚き火_の上に置くと、不気味な変化が起こるかもしれません...", + "block.create.peculiar_bell.tooltip.summary": "装飾用の_真鍮の鐘。_魂の炎_の真上に置くと、別の使い方が見つかるかもしれません...", - "block.create.cursed_bell.tooltip": "呪われた鐘", - "block.create.cursed_bell.tooltip.summary": "ネザーに彷徨う魂が宿る、不気味な真鍮の鐘", - "block.create.cursed_bell.tooltip.condition1": "持ったとき、鳴らしたとき", - "block.create.cursed_bell.tooltip.behaviour1": "敵モブがスポーンする近くの暗い場所を示します", + "block.create.haunted_bell.tooltip": "憑りつかれた鐘", + "block.create.haunted_bell.tooltip.summary": "ネザーに彷徨う魂が宿る、呪われた鐘", + "block.create.haunted_bell.tooltip.condition1": "持ったとき、鳴らしたとき", + "block.create.haunted_bell.tooltip.behaviour1": "_敵モブ_がスポーンする近くの_光のない場所_を示します", "_": "->------------------------] Ponder Content [------------------------<-", @@ -2254,4 +2258,4 @@ "_": "Thank you for translating Create!" -} +} \ No newline at end of file From 21f756baeb418a44c8dba5b7dc63c31f02a73ac9 Mon Sep 17 00:00:00 2001 From: Hanqnero <57258124+Hanqnero@users.noreply.github.com> Date: Tue, 6 Jul 2021 15:46:43 +0500 Subject: [PATCH 024/118] Updates to ru_ru.json by Hanqnero (#1701) --- .../resources/assets/create/lang/ru_ru.json | 685 +++++++++++++++++- 1 file changed, 657 insertions(+), 28 deletions(-) diff --git a/src/main/resources/assets/create/lang/ru_ru.json b/src/main/resources/assets/create/lang/ru_ru.json index d88a93c3d..b6d8bb522 100644 --- a/src/main/resources/assets/create/lang/ru_ru.json +++ b/src/main/resources/assets/create/lang/ru_ru.json @@ -1,4 +1,5 @@ { + "_": "Missing Localizations: 519", "_": "->------------------------] Game Elements [------------------------<-", @@ -163,6 +164,8 @@ "block.create.gabbro_cobblestone_stairs": "Ступени из габбро-булыжника", "block.create.gabbro_cobblestone_wall": "Стена из габбро-булыжника", "block.create.gabbro_pillar": "Габбро колонна", + "block.create.gantry_carriage": "Портальное шасси", + "block.create.gantry_shaft": "Портальный вал", "block.create.gearbox": "Коробка передач", "block.create.gearshift": "Реверсивный механизм", "block.create.glass_fluid_pipe": "Стеклянная жидкостная труба", @@ -225,7 +228,7 @@ "block.create.magenta_seat": "Пурпурное сиденье", "block.create.magenta_valve_handle": "Пурпурный ручной вентиль", "block.create.mechanical_arm": "Механическая рука", - "block.create.mechanical_bearing": "Механический вращатель", + "block.create.mechanical_bearing": "Механический подшипник", "block.create.mechanical_crafter": "Механический крафтер", "block.create.mechanical_drill": "Механическая дрель", "block.create.mechanical_harvester": "Механический комбайн", @@ -334,8 +337,8 @@ "block.create.polished_weathered_limestone_wall": "Стена из полированного выветренного известняка", "block.create.portable_fluid_interface": "Портативный жидкостный интерфейс", "block.create.portable_storage_interface": "Портативный интерфейс хранения", - "block.create.powered_latch": "Механизированная защёлка", - "block.create.powered_toggle_latch": "Механизированная рычаг-защёлка", + "block.create.powered_latch": "Силовой Триггер", + "block.create.powered_toggle_latch": "Силовой Переключаемый Триггер", "block.create.pulley_magnet": "Магнитный шкив", "block.create.pulse_repeater": "Импульсный повторитель", "block.create.purple_sail": "Фиолетовый парус", @@ -345,8 +348,8 @@ "block.create.red_sail": "Красный парус", "block.create.red_seat": "Красное сиденье", "block.create.red_valve_handle": "Красный ручной вентиль", - "block.create.redstone_contact": "Контакт сигнала красного камня", - "block.create.redstone_link": "Беспроводной передатчик сигнала красного камня", + "block.create.redstone_contact": "Редстоун Контакт", + "block.create.redstone_link": "Редстоун Передатчик", "block.create.refined_radiance_casing": "Сияющий корпус", "block.create.reinforced_rail": "Усиленные рельсы", "block.create.rope": "Канат", @@ -378,7 +381,7 @@ "block.create.sticker": "Блок-липучка", "block.create.sticky_mechanical_piston": "Липкий механический поршень", "block.create.stockpile_switch": "Настраиваемый компаратор", - "block.create.stressometer": "Динамометр", + "block.create.stressometer": "Стрессометр", "block.create.tiled_glass": "Плиточное стекло", "block.create.tiled_glass_pane": "Плиточная стеклянная панель", "block.create.turntable": "Поворотный стол", @@ -410,6 +413,7 @@ "block.create.zinc_ore": "Цинковая руда", "entity.create.contraption": "Штуковина", + "entity.create.gantry_contraption": "Крановая штуковина", "entity.create.seat": "Сиденье", "entity.create.stationary_contraption": "Стационарная штуковина", "entity.create.super_glue": "Супер-клей", @@ -454,6 +458,8 @@ "item.create.crushed_tin_ore": "Дроблёная оловянная руда", "item.create.crushed_uranium_ore": "Дроблёная урановая руда", "item.create.crushed_zinc_ore": "Дроблёная цинковая руда", + "item.create.diving_boots": "Ботинки для дайвинга", + "item.create.diving_helmet": "Шлем для дайвинга", "item.create.deforester": "Уничтожитель леса", "item.create.dough": "Тесто", "item.create.electron_tube": "Электронная лампа", @@ -471,6 +477,7 @@ "item.create.integrated_circuit": "Интегральная схема", "item.create.iron_sheet": "Железный лист", "item.create.lapis_sheet": "Лазуритовый лист", + "item.create.linked_controller": "Связанный контроллер", "item.create.minecart_contraption": "Вагонеточная штуковина", "item.create.minecart_coupling": "Связыватель вагонеток", "item.create.polished_rose_quartz": "Полированный розовый кварц", @@ -536,7 +543,7 @@ "advancement.create.speedometer": "Так быстро?", "advancement.create.speedometer.desc": "Поставьте и подключите спидометр. Посмотрите на спидометр через очки, чтобы прочитать точное значение.", "advancement.create.stressometer": "Так сильно?", - "advancement.create.stressometer.desc": "Поставьте и подключите динамометр. Посмотрите на динамометр через очки, чтобы прочитать точное значение.", + "advancement.create.stressometer.desc": "Поставьте и подключите стрессометр. Посмотрите на стрессометр через очки, чтобы прочитать точное значение.", "advancement.create.aesthetics": "Бах! Эстетично!", "advancement.create.aesthetics.desc": "Разместите скобы на валу, трубе или шестерне.", "advancement.create.reinforced": "Бах! Усилено!", @@ -692,6 +699,7 @@ "create.recipe.mechanical_crafting": "Механическое создание", "create.recipe.automatic_shaped": "Автоматическая форменная сборка", "create.recipe.block_cutting": "Резка блока", + "create.recipe.wood_cutting": "Резка древесины", "create.recipe.blockzapper_upgrade": "Ручная блоковая пушка", "create.recipe.sandpaper_polishing": "Полировка наждачной бумагой", "create.recipe.mystery_conversion": "Хроматический метаморфоз", @@ -713,7 +721,7 @@ "create.generic.unit.seconds": "секунд", "create.generic.unit.minutes": "минут", "create.generic.unit.rpm": "об./мин.", - "create.generic.unit.stress": "Н*м", + "create.generic.unit.stress": "ен", "create.generic.unit.degrees": "°", "create.generic.unit.millibuckets": "%1$smB", "create.generic.clockwise": "По часовой стрелке", @@ -751,17 +759,17 @@ "create.gui.blockzapper.title": "Ручная блоковая пушка", "create.gui.blockzapper.replaceMode": "Режим замены", - "create.gui.blockzapper.searchDiagonal": "Следовать по диагонали", - "create.gui.blockzapper.searchFuzzy": "Игнорировать границы материала", + "create.gui.blockzapper.searchDiagonal": "Следовать Диагоналям", + "create.gui.blockzapper.searchFuzzy": "Игнорировать Границы Материала", "create.gui.blockzapper.range": "Диапазон распространения", "create.gui.blockzapper.needsUpgradedAmplifier": "Требуется модернизированный усилитель", "create.gui.blockzapper.patternSection": "Шаблон", "create.gui.blockzapper.pattern.solid": "Всё", "create.gui.blockzapper.pattern.checkered": "Шахматная доска", - "create.gui.blockzapper.pattern.inversecheckered": "Перевернутая шахматная доска", - "create.gui.blockzapper.pattern.chance25": "25% крен", - "create.gui.blockzapper.pattern.chance50": "50% крен", - "create.gui.blockzapper.pattern.chance75": "75% крен", + "create.gui.blockzapper.pattern.inversecheckered": "Обратный Шахматный", + "create.gui.blockzapper.pattern.chance25": "25% Шанс", + "create.gui.blockzapper.pattern.chance50": "50% Шанс", + "create.gui.blockzapper.pattern.chance75": "75% Шанс", "create.gui.terrainzapper.title": "Ручной редактор мира", "create.gui.terrainzapper.placement": "Размещение", "create.gui.terrainzapper.placement.merged": "Слитый", @@ -771,6 +779,8 @@ "create.gui.terrainzapper.brush.cuboid": "Куб", "create.gui.terrainzapper.brush.sphere": "Сфера", "create.gui.terrainzapper.brush.cylinder": "Цилиндр", + "create.gui.terrainzapper.brush.surface": "Поверхность", + "create.gui.terrainzapper.brush.cluster": "Скопление", "create.gui.terrainzapper.tool": "Инструмент", "create.gui.terrainzapper.tool.fill": "Заполнить", "create.gui.terrainzapper.tool.place": "Поставить", @@ -780,6 +790,8 @@ "create.gui.terrainzapper.tool.flatten": "Выравнивание", "create.terrainzapper.shiftRightClickToSet": "ПКМ крадучись, чтобы выбрать форму", + "create.terrainzapper.usingBlock": "Используется: %1$s", + "create.terrainzapper.leftClickToSet": "Левый клик по блоку, что бы использовать материал", "create.blockzapper.usingBlock": "С помощью: %1$s", "create.blockzapper.componentUpgrades": "Обновления компонентов:", @@ -828,7 +840,7 @@ "create.gui.goggles.generator_stats": "Статистика генератора:", "create.gui.goggles.kinetic_stats": "Кинетическая статистика:", - "create.gui.goggles.at_current_speed": "На текущей скорости", + "create.gui.goggles.at_current_speed": "При текущей скорости", "create.gui.goggles.pole_length": "Длина поршня", "create.gui.goggles.fluid_container": "Информация о жидкостном контейнере:", "create.gui.goggles.fluid_container.capacity": "Ёмкость: ", @@ -841,12 +853,12 @@ "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.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.network_overstressed": "Похоже, что эта штуковина _перегружена_. Добавьте больше источников или _понизьте_ _скорость_ компонентов, _создающих_ высокую _нагрузку_.", "create.gui.adjustable_crate.title": "Регулируемый ящик", "create.gui.adjustable_crate.storageSpace": "Ёмкость", "create.gui.stockpile_switch.title": "Настраиваемый компаратор", @@ -858,6 +870,7 @@ "create.gui.sequenced_gearshift.instruction.turn_angle.descriptive": "Повернуть на угол", "create.gui.sequenced_gearshift.instruction.turn_angle": "Повернуть", "create.gui.sequenced_gearshift.instruction.turn_angle.angle": "Угол", + "create.gui.sequenced_gearshift.instruction.turn_distance.descriptive": "Повернуть для движения Поршня/Шкива/Портала", "create.gui.sequenced_gearshift.instruction.turn_distance": "Поршень", "create.gui.sequenced_gearshift.instruction.turn_distance.distance": "Расстояние", "create.gui.sequenced_gearshift.instruction.delay.descriptive": "Временная задержка", @@ -894,7 +907,7 @@ "create.schematic.mirror.none": "Нет", "create.schematic.mirror.frontBack": "Спереди-сзади", "create.schematic.mirror.leftRight": "Влево-вправо", - "create.schematic.tool.deploy": "Развернуть", + "create.schematic.tool.deploy": "Развёртывание", "create.schematic.tool.move": "Подвинуть XZ", "create.schematic.tool.movey": "Подвинуть Y", "create.schematic.tool.rotate": "Вращать", @@ -1071,12 +1084,12 @@ "create.tooltip.speedRequirement.none": "Нет", "create.tooltip.speedRequirement.medium": "Умеренная", "create.tooltip.speedRequirement.high": "Быстрая", - "create.tooltip.stressImpact": "Требование к крутящему моменту: %1$s", - "create.tooltip.stressImpact.low": "Низкий", - "create.tooltip.stressImpact.medium": "Средний", - "create.tooltip.stressImpact.high": "Высокий", + "create.tooltip.stressImpact": "Создаваемая нагрузка: %1$s", + "create.tooltip.stressImpact.low": "Низкая", + "create.tooltip.stressImpact.medium": "Средняя", + "create.tooltip.stressImpact.high": "Высокая", "create.tooltip.stressImpact.overstressed": "Перегрузка", - "create.tooltip.capacityProvided": "Ёмкостный крутящий момент: %1$s", + "create.tooltip.capacityProvided": "Допустимая нагрузка: %1$s", "create.tooltip.capacityProvided.low": "Маленький", "create.tooltip.capacityProvided.medium": "Средний", "create.tooltip.capacityProvided.high": "Большой", @@ -1098,7 +1111,7 @@ "create.mechanical_arm.selection_mode.round_robin": "По кругу", "create.mechanical_arm.selection_mode.forced_round_robin": "Принудительно по кругу", - "create.mechanical_arm.selection_mode.prefer_first": "Предпочтительна первичная цель", + "create.mechanical_arm.selection_mode.prefer_first": "Предпочтитать первичную цель", "create.tunnel.selection_mode.split": "Разделить", "create.tunnel.selection_mode.forced_split": "Принудительно разделить", @@ -1340,9 +1353,9 @@ "item.create.goggles.tooltip": "GOGGLES", "item.create.goggles.tooltip.summary": "Очки для улучшения зрения с помощью полезной кинетической информации.", "item.create.goggles.tooltip.condition1": "При ношении", - "item.create.goggles.tooltip.behaviour1": "Показывает _цветные_ _индикаторы_, соответствующие _уровню_ _скорости_ размещённого кинетического компонента, а также воздействию момента и мощности отдельных компонентов.", + "item.create.goggles.tooltip.behaviour1": "Показывает _цветные_ _индикаторы_, соответствующие _уровню_ _скорости_ размещённого кинетического компонента, а также _создаваемой нагрузке_ и _мощности_ отдельных компонентов.", "item.create.goggles.tooltip.condition2": "При взгляде на датчик", - "item.create.goggles.tooltip.behaviour2": "Показывает подробную информацию о скорости или моменте сети, к которой подключён датчик.", + "item.create.goggles.tooltip.behaviour2": "Показывает подробную информацию о скорости или нагрузке сети, к которой подключён датчик.", "item.create.goggles.tooltip.condition3": "При взгляде на жидкостные контейнеры", "item.create.goggles.tooltip.behaviour3": "Показывает детализированную информацию о _Ёмкости_ блока и о хранящейся в нём хранится _Жидкости_.", @@ -1451,6 +1464,7 @@ "create.ponder.shared.rpm16": "16 об./мин.", "create.ponder.tag.kinetic_sources": "Кинетические источники", "create.ponder.tag.kinetic_sources.description": "Компоненты, генерирующие Силу Вращения", + "create.ponder.tag.contraption_actor": "Компоненты Штуковин", "create.ponder.tag.contraption_actor.description": "Компоненты, проявляющие особое поведение когда прикреплены к двигающейся штуковине", "create.ponder.tag.arm_targets": "Цели для Механической Руки", "create.ponder.tag.arm_targets.description": "Компоненты, которые могут быть выбраны входами или выходами для Механической Руки", @@ -1492,6 +1506,621 @@ "create.ponder.analog_lever.text_2": "ПКМ чтобы увеличить силу выходного сигнала", "create.ponder.analog_lever.text_3": "ПКМ Крадучись чтобы уменьшить силу выходного сигнала снова", - "_": "Thank you for translating Create!" + "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_4": "Остаток продолжит свой путь", + "create.ponder.basin.header": "Обработке предметов в Чаше", + "create.ponder.basin.text_1": "Чаша может хранить предметы и жидкости для обратобки", + "create.ponder.basin.text_2": "После обработки, чаши пытаются вывести результат под любой из их сторон", + "create.ponder.basin.text_3": "Когда предоставлен подходящий компонент, у Чаши появится выходящий кран", + "create.ponder.basin.text_4": "Несколько вариантов применимы здесь", + "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.bearing_modes.header": "Режимах Движения Механического Подшипника", + "create.ponder.bearing_modes.text_1": "Когда остановлен, Подшипник установит структуру на ближайшем выровненным по сетке блоков углу", + "create.ponder.bearing_modes.text_2": "Он может быть настроен никогда не возвращать структуру в твёрдое состояние, или только возле начального угла", + + "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_2": "Случайные выделения могут быть отменены нажатием ПКМ Крадучись", + "create.ponder.belt_connector.text_3": "Дополнительные валы могут быть добавлены по всей длине Ремня", + "create.ponder.belt_connector.text_4": "Валы, соединённые через Ремни, будут вращаться с идентичной скоростью и направлением", + "create.ponder.belt_connector.text_5": "Добавленные Валы могут быть убраны Ключом", + "create.ponder.belt_connector.text_6": "Механические Ремни могут быть окрашены в эстетических целях", + + "create.ponder.belt_directions.header": "Возможных Расположениях Механических Ремней", + "create.ponder.belt_directions.text_1": "Ремни не могут соединяться в произвольных направлениях", + "create.ponder.belt_directions.text_2": "1. Они могут соединяться горизонтально", + "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_transport.header": "Использовании Механических Ремней для Логистики", + "create.ponder.belt_transport.text_1": "Двигающиеся ремни будут перемещать Предметы и другие Сущности", + "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.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_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_6": "Латунные Туннели на параллельных конвейерах формируют группы", + "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.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_modes.header": "Настроках Ориентации Вагонеточных Штуковин", + "create.ponder.cart_assembler_modes.text_1": "Вагонеточные Штуковины будут поворачиваться в сторону движения их вагонеток", + "create.ponder.cart_assembler_modes.text_2": "Если на Сборщике выбрана Блокировка Вращения, направление штуковины никогда не будет меняться", + + "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.chain_drive.header": "Передаче силы вращения Цепными Приводами", + "create.ponder.chain_drive.text_1": "Цепные Приводы передают силу вращения друг другу", + "create.ponder.chain_drive.text_2": "Все валы соединённые таким образом будут вращаться в одном направлении", + "create.ponder.chain_drive.text_3": "Любая часть в ряду может быть повёрнута на 90 градусов", + + "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_4": "В обоих случаях Цепные Приводы в ряду всегда вращаются с 2x скорость Активного Цепного Механизма", + "create.ponder.chain_gearshift.text_5": "Используя аналоговые сигналы, это отношение может быть настроено более точно между 1 и 2", + "create.ponder.chain_gearshift.text_6": "12 об./мин.", + + "create.ponder.chute.header": "Транспортировке предметов вниз через Желоба", + "create.ponder.chute.text_1": "Желоба могут транпортировать прдеметы вертикально из и в инвентари", + "create.ponder.chute.text_2": "Используя Ключ, вы можете создать окно", + "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.clockwork_bearing.header": "Оживлении структур Часовым Механизмом", + "create.ponder.clockwork_bearing.text_1": "Часовые Механизмы прикрепляются к блокам спереди", + "create.ponder.clockwork_bearing.text_2": "При получении Силы Вращения структура повернётся в зависимости от текущего часа", + "create.ponder.clockwork_bearing.text_3": "3:00", + "create.ponder.clockwork_bearing.text_4": "4:00", + "create.ponder.clockwork_bearing.text_5": "ПКМ по механизму чтобы остановить или вновь оживить структуру", + "create.ponder.clockwork_bearing.text_6": "Спереди Часовой стрелки вторая структура может быть добавлена", + "create.ponder.clockwork_bearing.text_7": "Убедитесь, что две Структуры не соединены между собой супер-клеем или чем-то схожим", + "create.ponder.clockwork_bearing.text_8": "Вторая Структура станет вращаться как Минутная Стрелка", + + "create.ponder.clutch.header": "Управлении силой вращения использованием Сцепления", + "create.ponder.clutch.text_1": "Сцепление передаёт вращение по прямой", + "create.ponder.clutch.text_2": "При активации Редстоуном оно разрывает соединение", + + "create.ponder.cog_speedup.header": "Переключении Передач Шестернями", + "create.ponder.cog_speedup.text_1": "Большие и Маленькие шестерни могут соединяться по диагонали", + "create.ponder.cog_speedup.text_2": "Переходя с больших на маленькие шестерни, переданная скорось удвоится", + "create.ponder.cog_speedup.text_3": "Переходя в обратном направлении, переданная скорость сократится вдвое", + + "create.ponder.cogwheel.header": "Передаче силы вращения Шестернями", + "create.ponder.cogwheel.text_1": "Шестерни передают вращение другим соседним шестерням", + "create.ponder.cogwheel.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": "Пара Колёс Дробления может молоть предметы очень эффективно", + "create.ponder.crushing_wheels.text_2": "Сила Вращения должна вращать их друг в друга", + "create.ponder.crushing_wheels.text_3": "Предметы брошенные или введённые в них сверху будут обработаны", + "create.ponder.crushing_wheels.text_4": "Предметы также могут быть введены и подобраны автомтическим способом", + + "create.ponder.deployer.header": "Использовании Автономного Активатора", + "create.ponder.deployer.text_1": "При наличии Силы Вращения Автономный Активатор может имитировать взаимодействия игрока", + "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_3": "Блоки прямо перед ним не будут мешать ему", + "create.ponder.deployer.text_4": "Автономные Активаторы Умеют:", + "create.ponder.deployer.text_5": "Ставить Блоки,", + "create.ponder.deployer.text_6": "Использовать Предметы,", + "create.ponder.deployer.text_7": "Активировать Блоки,", + "create.ponder.deployer.text_8": "Собирать Блоки", + "create.ponder.deployer.text_9": "и Атаковать Мобов", + + "create.ponder.deployer_contraption.header": "Использовании Автономных Активаторов на Штуковинах", + "create.ponder.deployer_contraption.text_1": "Всегда, когда Автономные Активаторы дивижутся как часть оживлённой Штуковины...", + "create.ponder.deployer_contraption.text_2": "Они активируются на каждом посещённом месте, используя предметы из любых инвентарей на Штуковине", + "create.ponder.deployer_contraption.text_3": "Слот для Фильтра может быть использован, чтобы уточнить, какие предеметы им брать", + + "create.ponder.deployer_modes.header": "Режимах Автономного Активатора", + "create.ponder.deployer_modes.text_1": "По умолчанию, Ативатор имитирует ПКМ-взаимодейстие", + "create.ponder.deployer_modes.text_2": "Используя Ключ, вы можете установить его на имитацию ЛКМ", + + "create.ponder.deployer_redstone.header": "Управлении Автономными Активаторами Редстоуном", + "create.ponder.deployer_redstone.text_1": "При активации Редстоуном Активатор перестанет работать", + "create.ponder.deployer_redstone.text_2": "Перед остановкой, Активатор завершит все начатые действия", + "create.ponder.deployer_redstone.text_3": "Таким образом, инвертированный импульс может быть использован для вызова ровно одного срабатывания", + + "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.empty_blaze_burner.header": "Использовании Пустых Горелок Всполохов", + "create.ponder.empty_blaze_burner.text_1": "ПКМ по Всполоху с пустой горелкой, чтобы захватить его", + "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.fan_direction.header": "Воздушном потоке Вентиляторов в Корпусе", + "create.ponder.fan_direction.text_1": "Вентиляторы в Корпусе используют Силу Вращения для создания Воздушного Потока", + "create.ponder.fan_direction.text_2": "Однако они не будут подходить для промышленного нагрева", + + "create.ponder.fan_processing.header": "Обработке предметов используя Вентиляторы в Корпусе", + "create.ponder.fan_processing.text_1": "Проходя через лаву, Воздушный Поток становится Горячим", + "create.ponder.fan_processing.text_2": "Предметы в этой области будут переплавлены", + "create.ponder.fan_processing.text_3": "Съедобные Предметы брошенные сюда будут сожжены", + "create.ponder.fan_processing.text_4": "Вместо этого, для них должна быть использована установка для Копчения с Огнём", + "create.ponder.fan_processing.text_5": "Поток, проходящий через Воду, создаёт Промывающую Установку", + "create.ponder.fan_processing.text_6": "Несколько новых вариантов обработки делаются с её помощью", + "create.ponder.fan_processing.text_7": "Скорость Вентилятора НЕ влияет на скорость обработки, а только на дальность", + "create.ponder.fan_processing.text_8": "Обработка Вентиляторов может быть применена к Предметам на Конвейерах или Депо", + + "create.ponder.fan_source.header": "Генерации Силы Вращения Вентиляторами в Корпусе", + "create.ponder.fan_source.text_1": "Вентиляторы направленные вниз на источник тепла могут создавать Силу Вращения", + "create.ponder.fan_source.text_2": "При Редстоун Сигнале Вентилятор начнёт отдавать энергию", + + "create.ponder.flywheel.header": "Генерации Силы Вращения Маховиком", + "create.ponder.flywheel.text_1": "Маховики необходимы для генерации силы вращения при помощи Печных Двигателей", + "create.ponder.flywheel.text_2": "Отдаваемая Сила Вращения имеет очень значительную устойчивость к нагрузкам", + "create.ponder.flywheel.text_3": "Использование Плавильной Печи удвоит эффективность Двигателя", + + "create.ponder.funnel_compat.header": "Совместимости Воронок", + "create.ponder.funnel_compat.text_1": "Воронки должны хорошо взаимодействовать с многими компонентов", + "create.ponder.funnel_compat.text_2": "Вертикальные Пилы", + "create.ponder.funnel_compat.text_3": "Депо", + "create.ponder.funnel_compat.text_4": "Предметными осушителями", + + "create.ponder.funnel_direction.header": "Направлении Передачи", + "create.ponder.funnel_direction.text_1": "Поставленная обычным образом, она забирает предметы из инвентаря", + "create.ponder.funnel_direction.text_2": "Поставленная крадучись, она кладёт предметы в инвентарь", + "create.ponder.funnel_direction.text_3": "Используя Ключ, вы можете изменить направление воронки", + "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_redstone.header": "Редстоун управлении", + "create.ponder.funnel_redstone.text_1": "Редстоун сигнал не даст любой воронке работать", + + "create.ponder.funnel_transfer.header": "Передаче Напрямую", + "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.text_2": "Создаваемая Сила Вращения имеет очень высокую усточивость к нагрузкам", + "create.ponder.furnace_engine.text_3": "Использование Плавильной Печи удвоит эффективность Двигателя", + + "create.ponder.gantry_carriage.header": "Использовании Крановых Шасси", + "create.ponder.gantry_carriage.text_1": "Крановые Шасси могут прикрепляться и двигаться вдоль Портального Вала", + "create.ponder.gantry_carriage.text_2": "Крановые Установки могут двигать присоединённые Блоки", + + "create.ponder.gantry_cascaded.header": "Каскадных Порталах", + "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_4": "Те же правила относятся передаваемому вращению", + + "create.ponder.gantry_redstone.header": "Передаче Энергии Порталами", + "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.gearbox.header": "Передаче Силы Вращения с Помощью Коробок Передач", + "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": "Реверсивные Механизмы передают вращение по прямой", + "create.ponder.gearshift.text_2": "При активации Редстоуном, они реверсируют передачу", + + "create.ponder.hand_crank.header": "Генерации Силы Вращения при помощи Рукояток", + "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.large_cogwheel.header": "Передаче Силы Вращения при помощи Больших Шестерней", + "create.ponder.large_cogwheel.text_1": "Большие Шестерни могут соединяться между собой под прямым углом", + "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_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_group.header": "Движении Линейных Шасси в Группах", + "create.ponder.linear_chassis_group.text_1": "Линейные Шасси соединяются с такими же блоками Шасси рядом с ними", + "create.ponder.linear_chassis_group.text_2": "Когда один блок перемещается Штуковиной, другие двигаются c ним", + "create.ponder.linear_chassis_group.text_3": "Шасси других типов или направленные в другом направлении не будут прикрепляться", + + "create.ponder.mechanical_arm.header": "Настройке Механических Рук", + "create.ponder.mechanical_arm.text_1": "Входы и Выходы для Механических Рук должны быть назначены перед их установкой", + "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_8": "Воронки и Депо могут помочь заполнить этот пробел", + + "create.ponder.mechanical_arm_filtering.header": "Фильтрации Выходов Механической Руки", + "create.ponder.mechanical_arm_filtering.text_1": "Входы", + "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_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_5": "Прокрутка с Ключом повзолит вам настроить это", + "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_redstone.header": "Управлении Механическими Руками Редстоуном", + "create.ponder.mechanical_arm_redstone.text_1": "При активации Редстоуном, Механические Руки перестают работать", + "create.ponder.mechanical_arm_redstone.text_2": "Перед остановкой, они завершат все начатые действия", + "create.ponder.mechanical_arm_redstone.text_3": "Таким образом, инвертированный импульс для вызова ровно одного срабатывания", + + "create.ponder.mechanical_bearing.header": "Передвижении Структур при помощи Механического Подшипника", + "create.ponder.mechanical_bearing.text_1": "Механические Подшипники прикрепляют блоки перед ними", + "create.ponder.mechanical_bearing.text_2": "при получении Силы Вращения, они соберутся во Вращяющуюся Штуковину", + + "create.ponder.mechanical_crafter.header": "Настройке Механических Крафтеров", + "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_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.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_drill.header": "Ломании Блоков Механической Дрелью", + "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_harvester.header": "Использовании Механических комбайнов на Штуковинах", + "create.ponder.mechanical_harvester.text_1": "Когда Комбайны движутся как часть оживлённой Штуковины...", + "create.ponder.mechanical_harvester.text_2": "Они будут убирать зрелый урожай на своём пути и высаживать его снова", + + "create.ponder.mechanical_mixer.header": "Обратобтке Предметов Механическим Миксером", + "create.ponder.mechanical_mixer.text_1": "При помощи Миксера и Чаши можно автоматизировать некоторые Рецепты Крафта", + "create.ponder.mechanical_mixer.text_2": "Доступные рецепты включают любые Бесформенные Рецепты Крафта плюс немного ещё", + "create.ponder.mechanical_mixer.text_3": "Некоторые из них требуют тепло от Горелки Всполоха", + "create.ponder.mechanical_mixer.text_4": "Слот для фильтра можно использовать в случае конфликта двух рецептов", + + "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_modes.header": "Режимах Движения Механического Поршня", + "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_3": "К тому же, плуги могут создавать пашню", + "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_4": "Пресс будет задерживать и обрабатывать их автоматически", + + "create.ponder.mechanical_press_compacting.header": "Упаковке предметов Механическим Прессом", + "create.ponder.mechanical_press_compacting.text_1": "Спрессовываение предметов в Чаше Упакует их", + "create.ponder.mechanical_press_compacting.text_2": "Упаковка включает любые заполенные 2x2 или 3x3 Рецепты Крафта плюс немного ещё", + "create.ponder.mechanical_press_compacting.text_3": "Некоторым рецептам может потребоваться тепло от Горелки Всполоха", + "create.ponder.mechanical_press_compacting.text_4": "Слот для фильтра можно использовать в случае конфликта двух рецептов", + + "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_processing.header": "Обработке Предметов на Механической Пиле", + "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_2": "Их можно запустить при помощи Шестерней с любой стороны", + "create.ponder.millstone.text_3": "Бросьте или Внесите предметы сверху", + "create.ponder.millstone.text_4": "После некоторого времени результат можно забрать при помощи ПКМ", + "create.ponder.millstone.text_5": "Продукты также можно вывести автоматически", + + "create.ponder.nixie_tube.header": "Использовании Газоразрядных индикаторов", + "create.ponder.nixie_tube.text_1": "При подаче Редстоун сигнала, Газоразрядные индикаторы отобразят его силу.", + "create.ponder.nixie_tube.text_2": "С помощью бирок, отредактированных на наковальне, вы можете отобразить любой текст.", + + "create.ponder.piston_pole.header": "Удлиннителях Поршня", + "create.ponder.piston_pole.text_1": "Без присоединённых Удлиннителей, Механический Поршень не может двигаться", + "create.ponder.piston_pole.text_2": "Длина стержня, добавленного к его задней части, определяет Диапазон Выдвижения.", + + "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_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_8": "Если на какое-то время прекратится обмен предметами, штуковина продолжит свой путь", + + "create.ponder.portable_storage_interface_redstone.header": "Редстоун Управлении", + "create.ponder.portable_storage_interface_redstone.text_1": "Редстоун сигнал предотвратит включение стационарного интерфейса", + + "create.ponder.powered_latch.header": "Управлении сигналами при помощи Силового Триггера", + "create.ponder.powered_latch.text_1": "Силовые Триггеры - управляемые редстоуном рычаги", + "create.ponder.powered_latch.text_2": "Сигнал сзади включаен его", + "create.ponder.powered_latch.text_3": "Сигналы сбоку обратно выключают его", + "create.ponder.powered_latch.text_4": "Силовые Триггеры можно переключать и вручную", + + "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_4": "Силовые переключаемые триггеры также можно переключать вручную", + + "create.ponder.pulse_repeater.header": "Управлении Сигналами при помощи Импульсных Повторителей", + "create.ponder.pulse_repeater.text_1": "Импульсные Повторители укоротят любой редстуон сигнал до одного импульса.", + + "create.ponder.radial_chassis.header": "Присоединении Блоков при помощи Радиальных Шасси", + "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.redstone_contact.header": "Редстоун Контактах", + "create.ponder.redstone_contact.text_1": "Редстоун Контакты направленные друг на друга будут излучать редстоун сигнал", + "create.ponder.redstone_contact.text_2": "Также применимо, когда один из них - часть двигающейся Штуковины", + + "create.ponder.redstone_link.header": "Использовании Редстоун Передатчиков", + "create.ponder.redstone_link.text_1": "Редстоун Передатчики могут передавать редстоун сигнал без проводов", + "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.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_3": "Учитывайте, что лебёдки можно двигать только пока они простаивают", + + "create.ponder.rope_pulley_modes.header": "Режимах Движения Лебёдки", + "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": "Регуляторы Ск. Вращения передают вращение от своих осей на Большую Шестерню выше них", + "create.ponder.rotation_speed_controller.text_2": "Можно настроить передаваемую скорость при помощи прокрутки по соответствующему месту сбоку", + + "create.ponder.sail.header": "Сборки Мельниц при помощи Парусов", + "create.ponder.sail.text_1": "Паруса - удобные блоки для создания Мельниц", + "create.ponder.sail.text_2": "Они будут прикрепляться к блокам и друг к другу без использования Суперклея или Блоков Шасси", + "create.ponder.sail.text_3": "ПКМ Красителем, чтобы покрасить их", + "create.ponder.sail.text_4": "ПКМ Ножницами, чтобы превратить их снова в раму", + + "create.ponder.sail_frame.header": "Сборки Мельниц при помощи Рам Парусов", + "create.ponder.sail_frame.text_1": "Рамы Парусов - удобные блоки для создания Мельниц", + "create.ponder.sail_frame.text_2": "Они будут прикрепляться к блокам и друг к другу без использования Суперклея или Блоков Шасси", + + "create.ponder.sequenced_gearshift.header": "Управлении Скоростью Вращения при помощи Последовательных Переключатель Передач", + "create.ponder.sequenced_gearshift.text_1": "Посл. Перекл. Передач передают вращение следуя временному списку инструкций", + "create.ponder.sequenced_gearshift.text_2": "ПКМ, чтобы отрыть Интерфейс настройки", + "create.ponder.sequenced_gearshift.text_3": "При получении Редстоун Сигнала, он начнёт выполнять заданные инструкции", + "create.ponder.sequenced_gearshift.text_4": "По завершению он будет дождётся следующего Редстоун Сигнала и начнёт сначала", + "create.ponder.sequenced_gearshift.text_5": "Редстоун компаратор можно использовать для считывания текущего прогресса", + + "create.ponder.shaft.header": "Передаче Вращения при помощи Валов", + "create.ponder.shaft.text_1": "Валы передают вращение по прямой", + + "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.speedometer.header": "Мониторинге Кинетической информации при помощи Спидометра", + "create.ponder.speedometer.text_1": "Спидометры отображают текущую Скорость присоединённых компонентов", + "create.ponder.speedometer.text_2": "При ношении Инженерных Очков игрок может получить более полную информацию от Прибора", + "create.ponder.speedometer.text_3": "Компараторы могут испускать аналоговый Редстоун Сигнал относительно измерений Спидометра", + + "create.ponder.stabilized_bearings.header": "Стабилизации Штуковин", + "create.ponder.stabilized_bearings.text_1": "Когда Межанические Подшипники являются частью двигающейся Структуры...", + "create.ponder.stabilized_bearings.text_2": "...они будут пытаться держаться ровно", + "create.ponder.stabilized_bearings.text_3": "Опять же, подшипники присоединяют блоки перед ними", + "create.ponder.stabilized_bearings.text_4": "И в результате целая под-Структура будет держаться ровно", + + "create.ponder.sticker.header": "Прикреплении блоков при помощи Липучки", + "create.ponder.sticker.text_1": "Липучки идеально подходят для Редстоун-управляемого присоединения блоков", + "create.ponder.sticker.text_2": "При получении сигнала они переключают своё состояние", + "create.ponder.sticker.text_3": "Если он теперь движется в штуковине, то блок будет двигаться с ним", + "create.ponder.sticker.text_4": "При повторном переключании блок больше не будет прикреплён", + + "create.ponder.stressometer.header": "Мониторинге Кинетической Информации при помощи Стрессометра", + "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_5": "Суперклей можно удалить Левым Кликом", + + "create.ponder.valve_handle.header": "Генерации Силы Вращения при помощи Вентилей", + "create.ponder.valve_handle.text_1": "Игроки могут использовать Вентили для применения силы вращения вручную", + "create.ponder.valve_handle.text_2": "Держите ПКМ для вращения его Против Часовой Стрелки", + "create.ponder.valve_handle.text_3": "Передаваемая ими скорость медленная и точная", + "create.ponder.valve_handle.text_4": "Держите ПКМ Крадучись для вращения его По Часовой Стрелке", + "create.ponder.valve_handle.text_5": "Вентили можно окрашивать в эстетических целях", + + "create.ponder.water_wheel.header": "Генерации Силы Вращения при помощи Водяных Колёс", + "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_10": "Теперь она ограниченна этим размера стака и будет активироваться только тогда, когда удерживаемый стак достигнет этого количества", + "create.ponder.weighted_ejector.text_11": "Другие Сущности, встав на Катапульту, будут всегда активировать её", + "create.ponder.weighted_ejector.text_2": "Установленная Катапульта будет запускать объекты до отмеченного места", + "create.ponder.weighted_ejector.text_3": "Подходящая цель может быть на любой дистанции и высоте в радиусе", + "create.ponder.weighted_ejector.text_4": "Однако они не могут быть сбоку", + "create.ponder.weighted_ejector.text_5": "Если не было выбрано подходящей Цели, она будет целиться в блок перед ней", + "create.ponder.weighted_ejector.text_6": "Предоставьте Силу Вращения, чтобы зарядить её", + "create.ponder.weighted_ejector.text_7": "Установка предметов на Катапульту вызывают её срабатывание", + "create.ponder.weighted_ejector.text_8": "Если Инвентарь выбран целью, то Катапульта будет ждать, пока в нём не появится место.", + "create.ponder.weighted_ejector.text_9": "При помощи Ключа можно настроить необходимый размер стака", + + "create.ponder.weighted_ejector_redstone.header": "Управлении Взвешенными Катапультами Редстоуном", + "create.ponder.weighted_ejector_redstone.text_1": "При подаче Редстоун Сигнала Катапульты не будут активироваться", + "create.ponder.weighted_ejector_redstone.text_2": "Кроме того, Наблюдатели могут определить, когда Катапульты срабатывают", + + "create.ponder.weighted_ejector_tunnel.header": "Разделении Стаков Предметов при помощи Взвешенных Катапульт", + "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.windmill_source.header": "Генерации Силы Вращения при помощи Подшипников Ветряной Мельницы", + "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_5": "Используйте Ключ, чтобы настроить направление Вращения", + "create.ponder.windmill_source.text_6": "Правый Клик по Подшипнику в любое время, чтобы остановить его и отредактировать Структуру", + + "create.ponder.windmill_structure.header": "Штуковинах Мельницах", + "create.ponder.windmill_structure.text_1": "Любая Структура может считаться Мельницей, пока она содержит как минимум 8 парусоподобных Блоков" } From 6eae75df71069a4669550b1beb1c725efb27413c Mon Sep 17 00:00:00 2001 From: sqcode06 <53980779+sqcode06@users.noreply.github.com> Date: Tue, 6 Jul 2021 13:54:29 +0300 Subject: [PATCH 025/118] Updates to ru_ru.json by sqcode06 (#1897) --- .../resources/assets/create/lang/ru_ru.json | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/main/resources/assets/create/lang/ru_ru.json b/src/main/resources/assets/create/lang/ru_ru.json index b6d8bb522..f07b150c0 100644 --- a/src/main/resources/assets/create/lang/ru_ru.json +++ b/src/main/resources/assets/create/lang/ru_ru.json @@ -27,7 +27,7 @@ "block.create.basin": "Чаша", "block.create.belt": "Конвейер", "block.create.birch_window": "Берёзовое окно", - "block.create.birch_window_pane": "Панель берёзового окна", + "block.create.birch_window_pane": "Панель из берёзового окна", "block.create.black_sail": "Чёрный парус", "block.create.black_seat": "Чёрное сиденье", "block.create.black_valve_handle": "Чёрный ручной вентиль", @@ -52,11 +52,11 @@ "block.create.chiseled_scoria": "Резной пепел", "block.create.chiseled_weathered_limestone": "Выветренный резной известняк", "block.create.chocolate": "Шоколад", - "block.create.chute": "Желоб", + "block.create.chute": "Жёлоб", "block.create.clockwork_bearing": "Часовой механизм", "block.create.clutch": "Сцепление", "block.create.cogwheel": "Шестерня", - "block.create.content_observer": "Наблюдетель за содержимым", + "block.create.content_observer": "Наблюдатель за содержимым", "block.create.controller_rail": "Контролирующая рельса", "block.create.copper_block": "Медный блок", "block.create.copper_casing": "Медный корпус", @@ -188,7 +188,7 @@ "block.create.honey": "Мёд", "block.create.horizontal_framed_glass": "Горизонтальное обрамлённое стекло", "block.create.horizontal_framed_glass_pane": "Горизонтальная обрамлённая стеклянная панель", - "block.create.hose_pulley": "Шкив с шлангом", + "block.create.hose_pulley": "Шкив со шлангом", "block.create.item_drain": "Предметный осушитель", "block.create.jungle_window": "Окно из тропического дерева", "block.create.jungle_window_pane": "Панель окна из тропического дерева", @@ -223,13 +223,13 @@ "block.create.limestone_cobblestone_wall": "Стена из известняк-булыжника", "block.create.limestone_pillar": "Известковая колонна", "block.create.linear_chassis": "Линейное шасси", - "block.create.lit_blaze_burner": "Зажжёная горелка Всполоха", + "block.create.lit_blaze_burner": "Зажжённая горелка Всполоха", "block.create.magenta_sail": "Пурпурный парус", "block.create.magenta_seat": "Пурпурное сиденье", "block.create.magenta_valve_handle": "Пурпурный ручной вентиль", "block.create.mechanical_arm": "Механическая рука", - "block.create.mechanical_bearing": "Механический подшипник", - "block.create.mechanical_crafter": "Механический крафтер", + "block.create.mechanical_bearing": "Механический вращатель", + "block.create.mechanical_crafter": "Механический создатель", "block.create.mechanical_drill": "Механическая дрель", "block.create.mechanical_harvester": "Механический комбайн", "block.create.mechanical_mixer": "Механический смешиватель", @@ -319,7 +319,7 @@ "block.create.polished_dolomite_slab": "Плита из полированного доломита", "block.create.polished_dolomite_stairs": "Ступени из полированного доломита", "block.create.polished_dolomite_wall": "Стена из полированного доломита", - "block.create.polished_gabbro": "Полированный габро", + "block.create.polished_gabbro": "Полированный габбро", "block.create.polished_gabbro_slab": "Плита из полированного габро", "block.create.polished_gabbro_stairs": "Ступени из полированного габро", "block.create.polished_gabbro_wall": "Стена из полированного габро", @@ -337,8 +337,8 @@ "block.create.polished_weathered_limestone_wall": "Стена из полированного выветренного известняка", "block.create.portable_fluid_interface": "Портативный жидкостный интерфейс", "block.create.portable_storage_interface": "Портативный интерфейс хранения", - "block.create.powered_latch": "Силовой Триггер", - "block.create.powered_toggle_latch": "Силовой Переключаемый Триггер", + "block.create.powered_latch": "Механизированная защёлка", + "block.create.powered_toggle_latch": "Механизированный рычаг-защёлка", "block.create.pulley_magnet": "Магнитный шкив", "block.create.pulse_repeater": "Импульсный повторитель", "block.create.purple_sail": "Фиолетовый парус", @@ -372,7 +372,7 @@ "block.create.sequenced_gearshift": "Последовательный переключатель передач", "block.create.shadow_steel_casing": "Теневой корпус", "block.create.shaft": "Вал", - "block.create.smart_chute": "Умный желоб", + "block.create.smart_chute": "Умный жёлоб", "block.create.smart_fluid_pipe": "Умная жидкостная труба", "block.create.speedometer": "Спидометр", "block.create.spout": "Дозатор", From 0ec9a681b6235c9452a73a1ff524932d0edcfab6 Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Tue, 6 Jul 2021 12:57:05 +0200 Subject: [PATCH 026/118] Post-PR datagen --- src/generated/resources/.cache/cache | 4 +- .../assets/create/lang/unfinished/ja_jp.json | 36 +- .../assets/create/lang/unfinished/ru_ru.json | 1108 ++++++++--------- 3 files changed, 574 insertions(+), 574 deletions(-) diff --git a/src/generated/resources/.cache/cache b/src/generated/resources/.cache/cache index b18583b2e..693effacb 100644 --- a/src/generated/resources/.cache/cache +++ b/src/generated/resources/.cache/cache @@ -417,12 +417,12 @@ b954db488cad0cbf25e8c1916e326caf28187b62 assets/create/lang/unfinished/es_es.jso b3d34fddc0be87a9a485d215efc989b45dca8f52 assets/create/lang/unfinished/es_mx.json 882c93b17de0ebfb2c09ed1abf183d0aa1956f42 assets/create/lang/unfinished/fr_fr.json e1c09d72895f253b4eb1a32a5b3bddadff6fae69 assets/create/lang/unfinished/it_it.json -9485ce91ec5be740d0f73acb6b489af9e92d3192 assets/create/lang/unfinished/ja_jp.json +2c48d31ee0bd03f99e656e450deae529881b1b76 assets/create/lang/unfinished/ja_jp.json b406848e8735a9ba2ba966ba66bc55a6679a8267 assets/create/lang/unfinished/ko_kr.json 4d2683c83ccd02e5f9ccb924e5895b5b12704c84 assets/create/lang/unfinished/nl_nl.json 67dd006a5965872a731944de028ac4bd24e594b6 assets/create/lang/unfinished/pl_pl.json e89d828bf5d66b9c08e83c3870dc9fc8bcd35ca3 assets/create/lang/unfinished/pt_br.json -a2f8789e4091cabbb8eff972840e34164ef2845e assets/create/lang/unfinished/ru_ru.json +fed8da438b93fb4657025bffa3ab0950f268a45e assets/create/lang/unfinished/ru_ru.json e1937c326a4e7109d444cc721d478c66ce085798 assets/create/lang/unfinished/zh_cn.json 428639c35caf7d9c973b1b80d270ef125bd3a3b3 assets/create/lang/unfinished/zh_tw.json 487a511a01b2a4531fb672f917922312db78f958 assets/create/models/block/acacia_window.json diff --git a/src/generated/resources/assets/create/lang/unfinished/ja_jp.json b/src/generated/resources/assets/create/lang/unfinished/ja_jp.json index 6311fa476..d43365133 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ja_jp.json +++ b/src/generated/resources/assets/create/lang/unfinished/ja_jp.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 19", + "_": "Missing Localizations: 4", "_": "->------------------------] Game Elements [------------------------<-", @@ -186,7 +186,7 @@ "block.create.green_seat": "緑色のシート", "block.create.green_valve_handle": "緑色のバルブハンドル", "block.create.hand_crank": "ハンドクランク", - "block.create.haunted_bell": "UNLOCALIZED: Haunted Bell", + "block.create.haunted_bell": "憑りつかれた鐘", "block.create.honey": "ハチミツ", "block.create.horizontal_framed_glass": "横型ガラス窓", "block.create.horizontal_framed_glass_pane": "横型ガラス窓板", @@ -478,9 +478,9 @@ "item.create.handheld_worldshaper": "携帯型ワールドシェーパー", "item.create.honey_bucket": "ハチミツ入りバケツ", "item.create.honeyed_apple": "リンゴのハチミツかけ", - "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": "組み立て中の歯車", + "item.create.incomplete_large_cogwheel": "組み立て中の大きな歯車", + "item.create.incomplete_precision_mechanism": "組み立て中の精密機構", "item.create.iron_sheet": "鉄板", "item.create.linked_controller": "リンクコントローラー", "item.create.minecart_contraption": "からくり付きトロッコ", @@ -488,7 +488,7 @@ "item.create.polished_rose_quartz": "磨かれたローズクォーツ", "item.create.potato_cannon": "ポテトキャノン", "item.create.powdered_obsidian": "黒曜石の粉", - "item.create.precision_mechanism": "UNLOCALIZED: Precision Mechanism", + "item.create.precision_mechanism": "精密機構", "item.create.propeller": "プロペラ", "item.create.red_sand_paper": "赤い紙やすり", "item.create.refined_radiance": "高貴な光輝", @@ -633,8 +633,8 @@ "advancement.create.flywheel.desc": "かまどエンジンを勢車に繋ぐ", "advancement.create.overstress_flywheel": "ハイレベル応力", "advancement.create.overstress_flywheel.desc": "かまどエンジンに超過応力をかける", - "advancement.create.precision_mechanism": "UNLOCALIZED: Complex Curiosities", - "advancement.create.precision_mechanism.desc": "UNLOCALIZED: Assemble a Precision Mechanism.", + "advancement.create.precision_mechanism": "手間暇かけた骨董品", + "advancement.create.precision_mechanism.desc": "精密機構を組み立てる", "advancement.create.mechanical_arm": "手が離せない!", "advancement.create.mechanical_arm.desc": "搬入元と搬出先を設定したメカニカルアームを設置して稼働させ、あなたのために一生懸命働いている様子を見る", "advancement.create.musical_arm": "お気に入りの曲を流して!", @@ -661,8 +661,8 @@ "advancement.create.wand_of_symmetry.desc": "対象の杖を作る", "advancement.create.extendo_grip": "ビヨヨーン!", "advancement.create.extendo_grip.desc": "マジックハンドを手に入れる", - "advancement.create.potato_cannon": "UNLOCALIZED: Fwoomp!", - "advancement.create.potato_cannon.desc": "UNLOCALIZED: Defeat an enemy with your Potato Cannon.", + "advancement.create.potato_cannon": "バキューン!", + "advancement.create.potato_cannon.desc": "ポテトキャノンで敵を倒す", "advancement.create.dual_extendo_grip": "究極のビヨンビヨン時代", "advancement.create.dual_extendo_grip.desc": "二刀流のマジックハンドで超人的なリーチを手に入れる", "advancement.create.eob": "ベータ版はここまで", @@ -1187,14 +1187,14 @@ "create.subtitle.peculiar_bell_use": "風変わりな鐘が鳴る", "create.subtitle.mixing": "混ぜる音", "create.subtitle.mechanical_press_activation_belt": "メカニカルプレスがボンと鳴る", - "create.subtitle.fwoomp": "ポテトランチャーがズキューンと鳴る", + "create.subtitle.fwoomp": "ポテトランチャーがバキューンと鳴る", "create.subtitle.worldshaper_place": "ワールドシェーパーが設置する", "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": "UNLOCALIZED: Haunted Bell tolls", + "create.subtitle.haunted_bell_use": "憑りつかれた鐘が鳴る", "create.subtitle.scroll_value": "スクロールのカチカチ音", "create.subtitle.crafter_craft": "メカニカルクラフターがクラフトする", "create.subtitle.controller_put": "コントローラのトントン音", @@ -1205,7 +1205,7 @@ "create.subtitle.wrench_rotate": "レンチが使用される", "create.subtitle.potato_hit": "野菜が衝突する", "create.subtitle.saw_activate_wood": "メカニカルソーが動作する", - "create.subtitle.haunted_bell_convert": "UNLOCALIZED: Haunted Bell awakens", + "create.subtitle.haunted_bell_convert": "憑りつかれた鐘が目覚める", "create.subtitle.deployer_polish": "デプロイヤーが磨く", "create.subtitle.deny": "失敗音", "create.subtitle.controller_click": "コントローラーのカチカチ音", @@ -1439,12 +1439,12 @@ "item.create.minecart_coupling.tooltip.behaviour1": "_2台_のトロッコを連結します。それらは移動中に_一定_の_距離_を保とうします。", "block.create.peculiar_bell.tooltip": "風変わりな鐘", - "block.create.peculiar_bell.tooltip.summary": "装飾用の真鍮の鐘。_魂の炎_や_魂の焚き火_の上に置くと、不気味な変化が起こるかもしれません...", + "block.create.peculiar_bell.tooltip.summary": "装飾用の_真鍮の鐘。_魂の炎_の真上に置くと、別の使い方が見つかるかもしれません...", - "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": "憑りつかれた鐘", + "block.create.haunted_bell.tooltip.summary": "ネザーに彷徨う魂が宿る、呪われた鐘", + "block.create.haunted_bell.tooltip.condition1": "持ったとき、鳴らしたとき", + "block.create.haunted_bell.tooltip.behaviour1": "_敵モブ_がスポーンする近くの_光のない場所_を示します", "_": "->------------------------] Ponder Content [------------------------<-", diff --git a/src/generated/resources/assets/create/lang/unfinished/ru_ru.json b/src/generated/resources/assets/create/lang/unfinished/ru_ru.json index 7c2af855d..512aa068e 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ru_ru.json +++ b/src/generated/resources/assets/create/lang/unfinished/ru_ru.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 771", + "_": "Missing Localizations: 245", "_": "->------------------------] Game Elements [------------------------<-", @@ -27,7 +27,7 @@ "block.create.basin": "Чаша", "block.create.belt": "Конвейер", "block.create.birch_window": "Берёзовое окно", - "block.create.birch_window_pane": "Панель берёзового окна", + "block.create.birch_window_pane": "Панель из берёзового окна", "block.create.black_sail": "Чёрный парус", "block.create.black_seat": "Чёрное сиденье", "block.create.black_valve_handle": "Чёрный ручной вентиль", @@ -52,11 +52,11 @@ "block.create.chiseled_scoria": "Резной пепел", "block.create.chiseled_weathered_limestone": "Выветренный резной известняк", "block.create.chocolate": "Шоколад", - "block.create.chute": "Желоб", + "block.create.chute": "Жёлоб", "block.create.clockwork_bearing": "Часовой механизм", "block.create.clutch": "Сцепление", "block.create.cogwheel": "Шестерня", - "block.create.content_observer": "Наблюдетель за содержимым", + "block.create.content_observer": "Наблюдатель за содержимым", "block.create.controller_rail": "Контролирующая рельса", "block.create.copper_backtank": "UNLOCALIZED: Copper Backtank", "block.create.copper_block": "Медный блок", @@ -165,8 +165,8 @@ "block.create.gabbro_cobblestone_stairs": "Ступени из габбро-булыжника", "block.create.gabbro_cobblestone_wall": "Стена из габбро-булыжника", "block.create.gabbro_pillar": "Габбро колонна", - "block.create.gantry_carriage": "UNLOCALIZED: Gantry Carriage", - "block.create.gantry_shaft": "UNLOCALIZED: Gantry Shaft", + "block.create.gantry_carriage": "Портальное шасси", + "block.create.gantry_shaft": "Портальный вал", "block.create.gearbox": "Коробка передач", "block.create.gearshift": "Реверсивный механизм", "block.create.glass_fluid_pipe": "Стеклянная жидкостная труба", @@ -190,7 +190,7 @@ "block.create.honey": "Мёд", "block.create.horizontal_framed_glass": "Горизонтальное обрамлённое стекло", "block.create.horizontal_framed_glass_pane": "Горизонтальная обрамлённая стеклянная панель", - "block.create.hose_pulley": "Шкив с шлангом", + "block.create.hose_pulley": "Шкив со шлангом", "block.create.item_drain": "Предметный осушитель", "block.create.jungle_window": "Окно из тропического дерева", "block.create.jungle_window_pane": "Панель окна из тропического дерева", @@ -226,13 +226,13 @@ "block.create.limestone_cobblestone_wall": "Стена из известняк-булыжника", "block.create.limestone_pillar": "Известковая колонна", "block.create.linear_chassis": "Линейное шасси", - "block.create.lit_blaze_burner": "Зажжёная горелка Всполоха", + "block.create.lit_blaze_burner": "Зажжённая горелка Всполоха", "block.create.magenta_sail": "Пурпурный парус", "block.create.magenta_seat": "Пурпурное сиденье", "block.create.magenta_valve_handle": "Пурпурный ручной вентиль", "block.create.mechanical_arm": "Механическая рука", "block.create.mechanical_bearing": "Механический вращатель", - "block.create.mechanical_crafter": "Механический крафтер", + "block.create.mechanical_crafter": "Механический создатель", "block.create.mechanical_drill": "Механическая дрель", "block.create.mechanical_harvester": "Механический комбайн", "block.create.mechanical_mixer": "Механический смешиватель", @@ -323,7 +323,7 @@ "block.create.polished_dolomite_slab": "Плита из полированного доломита", "block.create.polished_dolomite_stairs": "Ступени из полированного доломита", "block.create.polished_dolomite_wall": "Стена из полированного доломита", - "block.create.polished_gabbro": "Полированный габро", + "block.create.polished_gabbro": "Полированный габбро", "block.create.polished_gabbro_slab": "Плита из полированного габро", "block.create.polished_gabbro_stairs": "Ступени из полированного габро", "block.create.polished_gabbro_wall": "Стена из полированного габро", @@ -342,7 +342,7 @@ "block.create.portable_fluid_interface": "Портативный жидкостный интерфейс", "block.create.portable_storage_interface": "Портативный интерфейс хранения", "block.create.powered_latch": "Механизированная защёлка", - "block.create.powered_toggle_latch": "Механизированная рычаг-защёлка", + "block.create.powered_toggle_latch": "Механизированный рычаг-защёлка", "block.create.pulley_magnet": "Магнитный шкив", "block.create.pulse_repeater": "Импульсный повторитель", "block.create.purple_sail": "Фиолетовый парус", @@ -352,8 +352,8 @@ "block.create.red_sail": "Красный парус", "block.create.red_seat": "Красное сиденье", "block.create.red_valve_handle": "Красный ручной вентиль", - "block.create.redstone_contact": "Контакт сигнала красного камня", - "block.create.redstone_link": "Беспроводной передатчик сигнала красного камня", + "block.create.redstone_contact": "Редстоун Контакт", + "block.create.redstone_link": "Редстоун Передатчик", "block.create.refined_radiance_casing": "Сияющий корпус", "block.create.reinforced_rail": "Усиленные рельсы", "block.create.rope": "Канат", @@ -376,7 +376,7 @@ "block.create.sequenced_gearshift": "Последовательный переключатель передач", "block.create.shadow_steel_casing": "Теневой корпус", "block.create.shaft": "Вал", - "block.create.smart_chute": "Умный желоб", + "block.create.smart_chute": "Умный жёлоб", "block.create.smart_fluid_pipe": "Умная жидкостная труба", "block.create.speedometer": "Спидометр", "block.create.spout": "Дозатор", @@ -385,7 +385,7 @@ "block.create.sticker": "Блок-липучка", "block.create.sticky_mechanical_piston": "Липкий механический поршень", "block.create.stockpile_switch": "Настраиваемый компаратор", - "block.create.stressometer": "Динамометр", + "block.create.stressometer": "Стрессометр", "block.create.tiled_glass": "Плиточное стекло", "block.create.tiled_glass_pane": "Плиточная стеклянная панель", "block.create.turntable": "Поворотный стол", @@ -418,7 +418,7 @@ "entity.create.contraption": "Штуковина", "entity.create.crafting_blueprint": "UNLOCALIZED: Crafting Blueprint", - "entity.create.gantry_contraption": "UNLOCALIZED: Gantry Contraption", + "entity.create.gantry_contraption": "Крановая штуковина", "entity.create.potato_projectile": "UNLOCALIZED: Potato Projectile", "entity.create.seat": "Сиденье", "entity.create.stationary_contraption": "Стационарная штуковина", @@ -464,8 +464,8 @@ "item.create.crushed_tin_ore": "Дроблёная оловянная руда", "item.create.crushed_uranium_ore": "Дроблёная урановая руда", "item.create.crushed_zinc_ore": "Дроблёная цинковая руда", - "item.create.diving_boots": "UNLOCALIZED: Diving Boots", - "item.create.diving_helmet": "UNLOCALIZED: Diving Helmet", + "item.create.diving_boots": "Ботинки для дайвинга", + "item.create.diving_helmet": "Шлем для дайвинга", "item.create.dough": "Тесто", "item.create.electron_tube": "Электронная лампа", "item.create.empty_blaze_burner": "Пустая горелека Всполоха", @@ -482,7 +482,7 @@ "item.create.incomplete_large_cogwheel": "UNLOCALIZED: Incomplete Large Cogwheel", "item.create.incomplete_precision_mechanism": "UNLOCALIZED: Incomplete Precision Mechanism", "item.create.iron_sheet": "Железный лист", - "item.create.linked_controller": "UNLOCALIZED: Linked Controller", + "item.create.linked_controller": "Связанный контроллер", "item.create.minecart_contraption": "Вагонеточная штуковина", "item.create.minecart_coupling": "Связыватель вагонеток", "item.create.polished_rose_quartz": "Полированный розовый кварц", @@ -550,7 +550,7 @@ "advancement.create.speedometer": "Так быстро?", "advancement.create.speedometer.desc": "Поставьте и подключите спидометр. Посмотрите на спидометр через очки, чтобы прочитать точное значение.", "advancement.create.stressometer": "Так сильно?", - "advancement.create.stressometer.desc": "Поставьте и подключите динамометр. Посмотрите на динамометр через очки, чтобы прочитать точное значение.", + "advancement.create.stressometer.desc": "Поставьте и подключите стрессометр. Посмотрите на стрессометр через очки, чтобы прочитать точное значение.", "advancement.create.aesthetics": "Бах! Эстетично!", "advancement.create.aesthetics.desc": "Разместите скобы на валу, трубе или шестерне.", "advancement.create.reinforced": "Бах! Усилено!", @@ -713,7 +713,7 @@ "create.recipe.mechanical_crafting": "Механическое создание", "create.recipe.automatic_shaped": "Автоматическая форменная сборка", "create.recipe.block_cutting": "Резка блока", - "create.recipe.wood_cutting": "UNLOCALIZED: Wood Cutting", + "create.recipe.wood_cutting": "Резка древесины", "create.recipe.sandpaper_polishing": "Полировка наждачной бумагой", "create.recipe.mystery_conversion": "Хроматический метаморфоз", "create.recipe.spout_filling": "Заполнение дозатором", @@ -744,7 +744,7 @@ "create.generic.unit.seconds": "секунд", "create.generic.unit.minutes": "минут", "create.generic.unit.rpm": "об./мин.", - "create.generic.unit.stress": "Н*м", + "create.generic.unit.stress": "ен", "create.generic.unit.degrees": "°", "create.generic.unit.millibuckets": "%1$smB", "create.generic.clockwise": "По часовой стрелке", @@ -798,8 +798,8 @@ "create.gui.terrainzapper.brush.cuboid": "Куб", "create.gui.terrainzapper.brush.sphere": "Сфера", "create.gui.terrainzapper.brush.cylinder": "Цилиндр", - "create.gui.terrainzapper.brush.surface": "UNLOCALIZED: Surface", - "create.gui.terrainzapper.brush.cluster": "UNLOCALIZED: Cluster", + "create.gui.terrainzapper.brush.surface": "Поверхность", + "create.gui.terrainzapper.brush.cluster": "Скопление", "create.gui.terrainzapper.tool": "Инструмент", "create.gui.terrainzapper.tool.fill": "Заполнить", "create.gui.terrainzapper.tool.place": "Поставить", @@ -809,8 +809,8 @@ "create.gui.terrainzapper.tool.flatten": "Выравнивание", "create.terrainzapper.shiftRightClickToSet": "ПКМ крадучись, чтобы выбрать форму", - "create.terrainzapper.usingBlock": "UNLOCALIZED: Using: %1$s", - "create.terrainzapper.leftClickToSet": "UNLOCALIZED: Left-Click a Block to set Material", + "create.terrainzapper.usingBlock": "Используется: %1$s", + "create.terrainzapper.leftClickToSet": "Левый клик по блоку, что бы использовать материал", "create.minecart_coupling.two_couplings_max": "Вагонетки могут иметь только две связи", "create.minecart_coupling.unloaded": "Кажется, часть вашего поезда в незагруженных чанках", @@ -846,7 +846,7 @@ "create.gui.goggles.generator_stats": "Статистика генератора:", "create.gui.goggles.kinetic_stats": "Кинетическая статистика:", - "create.gui.goggles.at_current_speed": "На текущей скорости", + "create.gui.goggles.at_current_speed": "При текущей скорости", "create.gui.goggles.pole_length": "Длина поршня", "create.gui.goggles.fluid_container": "Информация о жидкостном контейнере:", "create.gui.goggles.fluid_container.capacity": "Ёмкость: ", @@ -859,12 +859,12 @@ "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.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.network_overstressed": "Похоже, что эта штуковина _перегружена_. Добавьте больше источников или _понизьте_ _скорость_ компонентов, _создающих_ высокую _нагрузку_.", "create.gui.adjustable_crate.title": "Регулируемый ящик", "create.gui.adjustable_crate.storageSpace": "Ёмкость", "create.gui.stockpile_switch.title": "Настраиваемый компаратор", @@ -876,7 +876,7 @@ "create.gui.sequenced_gearshift.instruction.turn_angle.descriptive": "Повернуть на угол", "create.gui.sequenced_gearshift.instruction.turn_angle": "Повернуть", "create.gui.sequenced_gearshift.instruction.turn_angle.angle": "Угол", - "create.gui.sequenced_gearshift.instruction.turn_distance.descriptive": "UNLOCALIZED: Turn to move Piston/Pulley/Gantry", + "create.gui.sequenced_gearshift.instruction.turn_distance.descriptive": "Повернуть для движения Поршня/Шкива/Портала", "create.gui.sequenced_gearshift.instruction.turn_distance": "Поршень", "create.gui.sequenced_gearshift.instruction.turn_distance.distance": "Расстояние", "create.gui.sequenced_gearshift.instruction.delay.descriptive": "Временная задержка", @@ -913,7 +913,7 @@ "create.schematic.mirror.none": "Нет", "create.schematic.mirror.frontBack": "Спереди-сзади", "create.schematic.mirror.leftRight": "Влево-вправо", - "create.schematic.tool.deploy": "Развернуть", + "create.schematic.tool.deploy": "Развёртывание", "create.schematic.tool.move": "Подвинуть XZ", "create.schematic.tool.movey": "Подвинуть Y", "create.schematic.tool.rotate": "Вращать", @@ -1090,12 +1090,12 @@ "create.tooltip.speedRequirement.none": "Нет", "create.tooltip.speedRequirement.medium": "Умеренная", "create.tooltip.speedRequirement.high": "Быстрая", - "create.tooltip.stressImpact": "Требование к крутящему моменту: %1$s", - "create.tooltip.stressImpact.low": "Низкий", - "create.tooltip.stressImpact.medium": "Средний", - "create.tooltip.stressImpact.high": "Высокий", + "create.tooltip.stressImpact": "Создаваемая нагрузка: %1$s", + "create.tooltip.stressImpact.low": "Низкая", + "create.tooltip.stressImpact.medium": "Средняя", + "create.tooltip.stressImpact.high": "Высокая", "create.tooltip.stressImpact.overstressed": "Перегрузка", - "create.tooltip.capacityProvided": "Ёмкостный крутящий момент: %1$s", + "create.tooltip.capacityProvided": "Допустимая нагрузка: %1$s", "create.tooltip.capacityProvided.low": "Маленький", "create.tooltip.capacityProvided.medium": "Средний", "create.tooltip.capacityProvided.high": "Большой", @@ -1117,7 +1117,7 @@ "create.mechanical_arm.selection_mode.round_robin": "По кругу", "create.mechanical_arm.selection_mode.forced_round_robin": "Принудительно по кругу", - "create.mechanical_arm.selection_mode.prefer_first": "Предпочтительна первичная цель", + "create.mechanical_arm.selection_mode.prefer_first": "Предпочтитать первичную цель", "create.tunnel.selection_mode.split": "Разделить", "create.tunnel.selection_mode.forced_split": "Принудительно разделить", @@ -1333,9 +1333,9 @@ "item.create.goggles.tooltip": "GOGGLES", "item.create.goggles.tooltip.summary": "Очки для улучшения зрения с помощью полезной кинетической информации.", "item.create.goggles.tooltip.condition1": "При ношении", - "item.create.goggles.tooltip.behaviour1": "Показывает _цветные_ _индикаторы_, соответствующие _уровню_ _скорости_ размещённого кинетического компонента, а также воздействию момента и мощности отдельных компонентов.", + "item.create.goggles.tooltip.behaviour1": "Показывает _цветные_ _индикаторы_, соответствующие _уровню_ _скорости_ размещённого кинетического компонента, а также _создаваемой нагрузке_ и _мощности_ отдельных компонентов.", "item.create.goggles.tooltip.condition2": "При взгляде на датчик", - "item.create.goggles.tooltip.behaviour2": "Показывает подробную информацию о скорости или моменте сети, к которой подключён датчик.", + "item.create.goggles.tooltip.behaviour2": "Показывает подробную информацию о скорости или нагрузке сети, к которой подключён датчик.", "item.create.goggles.tooltip.condition3": "При взгляде на жидкостные контейнеры", "item.create.goggles.tooltip.behaviour3": "Показывает детализированную информацию о _Ёмкости_ блока и о хранящейся в нём хранится _Жидкости_.", @@ -1477,7 +1477,7 @@ "create.ponder.shared.rpm16": "16 об./мин.", "create.ponder.tag.kinetic_sources": "Кинетические источники", "create.ponder.tag.kinetic_sources.description": "Компоненты, генерирующие Силу Вращения", - "create.ponder.tag.contraption_actor": "UNLOCALIZED: Contraption Actors", + "create.ponder.tag.contraption_actor": "Компоненты Штуковин", "create.ponder.tag.contraption_actor.description": "Компоненты, проявляющие особое поведение когда прикреплены к двигающейся штуковине", "create.ponder.tag.arm_targets": "Цели для Механической Руки", "create.ponder.tag.arm_targets.description": "Компоненты, которые могут быть выбраны входами или выходами для Механической Руки", @@ -1519,153 +1519,153 @@ "create.ponder.analog_lever.text_2": "ПКМ чтобы увеличить силу выходного сигнала", "create.ponder.analog_lever.text_3": "ПКМ Крадучись чтобы уменьшить силу выходного сигнала снова", - "create.ponder.andesite_tunnel.header": "UNLOCALIZED: Using Andesite Tunnels", - "create.ponder.andesite_tunnel.text_1": "UNLOCALIZED: Andesite Tunnels can be used to cover up your belts", - "create.ponder.andesite_tunnel.text_2": "UNLOCALIZED: Whenever an Andesite Tunnel has connections to the sides...", - "create.ponder.andesite_tunnel.text_3": "UNLOCALIZED: ...they will split exactly one item off of any passing stacks", - "create.ponder.andesite_tunnel.text_4": "UNLOCALIZED: The remainder will continue on its path", + "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_4": "Остаток продолжит свой путь", - "create.ponder.basin.header": "UNLOCALIZED: Processing Items in the Basin", - "create.ponder.basin.text_1": "UNLOCALIZED: A Basin can hold Items and Fluids for Processing", - "create.ponder.basin.text_2": "UNLOCALIZED: After a processing step, basins try to output below to the side of them", - "create.ponder.basin.text_3": "UNLOCALIZED: When a valid component is present, the Basin will show an output faucet", - "create.ponder.basin.text_4": "UNLOCALIZED: A number of options are applicable here", - "create.ponder.basin.text_5": "UNLOCALIZED: Outputs will be caught by the inventory below", - "create.ponder.basin.text_6": "UNLOCALIZED: Without output faucet, the Basin will retain items created in its processing", - "create.ponder.basin.text_7": "UNLOCALIZED: This can be useful if outputs should be re-used as ingredients", - "create.ponder.basin.text_8": "UNLOCALIZED: Desired outputs will then have to be extracted from the basin", - "create.ponder.basin.text_9": "UNLOCALIZED: A Filter might be necessary to avoid pulling out un-processed items", + "create.ponder.basin.header": "Обработке предметов в Чаше", + "create.ponder.basin.text_1": "Чаша может хранить предметы и жидкости для обратобки", + "create.ponder.basin.text_2": "После обработки, чаши пытаются вывести результат под любой из их сторон", + "create.ponder.basin.text_3": "Когда предоставлен подходящий компонент, у Чаши появится выходящий кран", + "create.ponder.basin.text_4": "Несколько вариантов применимы здесь", + "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.bearing_modes.header": "UNLOCALIZED: Movement Modes of the Mechanical Bearing", - "create.ponder.bearing_modes.text_1": "UNLOCALIZED: When Stopped, the Bearing will place the structure at the nearest grid-aligned Angle", - "create.ponder.bearing_modes.text_2": "UNLOCALIZED: It can be configured never to revert to solid blocks, or only near the angle it started at", + "create.ponder.bearing_modes.header": "Режимах Движения Механического Подшипника", + "create.ponder.bearing_modes.text_1": "Когда остановлен, Подшипник установит структуру на ближайшем выровненным по сетке блоков углу", + "create.ponder.bearing_modes.text_2": "Он может быть настроен никогда не возвращать структуру в твёрдое состояние, или только возле начального угла", - "create.ponder.belt_casing.header": "UNLOCALIZED: Encasing Belts", - "create.ponder.belt_casing.text_1": "UNLOCALIZED: Brass or Andesite Casing can be used to decorate Mechanical Belts", - "create.ponder.belt_casing.text_2": "UNLOCALIZED: A wrench can be used to remove the casing", + "create.ponder.belt_casing.header": "Обрамлении Ремней", + "create.ponder.belt_casing.text_1": "Латунный или Андезитовый Корпус может быть использован для декорации Механических ремней", + "create.ponder.belt_casing.text_2": "Используйте Ключ, чтобы убрать обрамление", - "create.ponder.belt_connector.header": "UNLOCALIZED: Using Mechanical Belts", - "create.ponder.belt_connector.text_1": "UNLOCALIZED: Right-Clicking two shafts with a belt item will connect them together", - "create.ponder.belt_connector.text_2": "UNLOCALIZED: Accidental selections can be canceled with Right-Click while Sneaking", - "create.ponder.belt_connector.text_3": "UNLOCALIZED: Additional Shafts can be added throughout the Belt", - "create.ponder.belt_connector.text_4": "UNLOCALIZED: Shafts connected via Belts will rotate with Identical Speed and Direction", - "create.ponder.belt_connector.text_5": "UNLOCALIZED: Added shafts can be removed using the wrench", - "create.ponder.belt_connector.text_6": "UNLOCALIZED: Mechanical Belts can be dyed for aesthetic purposes", + "create.ponder.belt_connector.header": "Использовании Механических Ремней", + "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_5": "Добавленные Валы могут быть убраны Ключом", + "create.ponder.belt_connector.text_6": "Механические Ремни могут быть окрашены в эстетических целях", - "create.ponder.belt_directions.header": "UNLOCALIZED: Valid Orientations for Mechanical Belts", - "create.ponder.belt_directions.text_1": "UNLOCALIZED: Belts cannot connect in arbitrary directions", - "create.ponder.belt_directions.text_2": "UNLOCALIZED: 1. They can connect horizontally", - "create.ponder.belt_directions.text_3": "UNLOCALIZED: 2. They can connect diagonally", - "create.ponder.belt_directions.text_4": "UNLOCALIZED: 3. They can connect vertically", - "create.ponder.belt_directions.text_5": "UNLOCALIZED: 4. And they can connect vertical shafts horizontally", - "create.ponder.belt_directions.text_6": "UNLOCALIZED: These are all possible directions. Belts can span any Length between 2 and 20 blocks", + "create.ponder.belt_directions.header": "Возможных Расположениях Механических Ремней", + "create.ponder.belt_directions.text_1": "Ремни не могут соединяться в произвольных направлениях", + "create.ponder.belt_directions.text_2": "1. Они могут соединяться горизонтально", + "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_transport.header": "UNLOCALIZED: Using Mechanical Belts for Logistics", - "create.ponder.belt_transport.text_1": "UNLOCALIZED: Moving belts will transport Items and other Entities", - "create.ponder.belt_transport.text_2": "UNLOCALIZED: Right-Click with an empty hand to take items off a belt", + "create.ponder.belt_transport.header": "Использовании Механических Ремней для Логистики", + "create.ponder.belt_transport.text_1": "Двигающиеся ремни будут перемещать Предметы и другие Сущности", + "create.ponder.belt_transport.text_2": "ПКМ пустой рукой, чтобы забрать предметы с ремня", - "create.ponder.blaze_burner.header": "UNLOCALIZED: Feeding Blaze Burners", - "create.ponder.blaze_burner.text_1": "UNLOCALIZED: Blaze Burners can provide Heat to Items processed in a Basin", - "create.ponder.blaze_burner.text_2": "UNLOCALIZED: For this, the Blaze has to be fed with flammable items", - "create.ponder.blaze_burner.text_3": "UNLOCALIZED: With a Blaze Cake, the Burner can reach an even stronger level of heat", - "create.ponder.blaze_burner.text_4": "UNLOCALIZED: The feeding process can be automated using Deployers or Mechanical Arms", + "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.brass_funnel.header": "UNLOCALIZED: The Brass Funnel", - "create.ponder.brass_funnel.text_1": "UNLOCALIZED: Andesite Funnels can only ever extract single items.", - "create.ponder.brass_funnel.text_2": "UNLOCALIZED: Brass Funnels can extract up to a full stack.", - "create.ponder.brass_funnel.text_3": "UNLOCALIZED: Scrolling on the filter slot allows for precise control over the extracted stack size.", - "create.ponder.brass_funnel.text_4": "UNLOCALIZED: Using items on the filter slot will restrict the funnel to only transfer matching stacks.", + "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_tunnel.header": "UNLOCALIZED: Using Brass Tunnels", - "create.ponder.brass_tunnel.text_1": "UNLOCALIZED: Brass Tunnels can be used to cover up your belts", - "create.ponder.brass_tunnel.text_2": "UNLOCALIZED: Brass Tunnels have filter slots on each open side", - "create.ponder.brass_tunnel.text_3": "UNLOCALIZED: Filters on inbound connections simply block non-matching items", - "create.ponder.brass_tunnel.text_4": "UNLOCALIZED: Filters on outbound connections can be used to sort items by type", - "create.ponder.brass_tunnel.text_5": "UNLOCALIZED: Whenever a passing item has multiple valid exits, the distribution mode will decide how to handle it", - "create.ponder.brass_tunnel.text_6": "UNLOCALIZED: Brass Tunnels on parallel belts will form a group", - "create.ponder.brass_tunnel.text_7": "UNLOCALIZED: Incoming Items will now be distributed across all connected exits", - "create.ponder.brass_tunnel.text_8": "UNLOCALIZED: For this, items can also be inserted into the Tunnel block directly", + "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_6": "Латунные Туннели на параллельных конвейерах формируют группы", + "create.ponder.brass_tunnel.text_7": "Входящие предметы будут распределены между всеми соединёнными выходами", + "create.ponder.brass_tunnel.text_8": "Для этого предметы также могут быть вложены в блок Туннеля напрямую", - "create.ponder.brass_tunnel_modes.header": "UNLOCALIZED: Distribution Modes of the Brass Tunnel", - "create.ponder.brass_tunnel_modes.text_1": "UNLOCALIZED: Using a Wrench, the distribution behaviour of Brass Tunnels can be configured", - "create.ponder.brass_tunnel_modes.text_10": "UNLOCALIZED: 'Synchronize Inputs' is a unique setting for Brass Tunnels", - "create.ponder.brass_tunnel_modes.text_11": "UNLOCALIZED: Items are only allowed past if every tunnel in the group has one waiting", - "create.ponder.brass_tunnel_modes.text_12": "UNLOCALIZED: This ensures that all affected belts supply items at the same rate", - "create.ponder.brass_tunnel_modes.text_2": "UNLOCALIZED: 'Split' will attempt to distribute the stack evenly between available outputs", - "create.ponder.brass_tunnel_modes.text_3": "UNLOCALIZED: If an output is unable to take more items, it will be skipped", - "create.ponder.brass_tunnel_modes.text_4": "UNLOCALIZED: 'Forced Split' will never skip outputs, and instead wait until they are free", - "create.ponder.brass_tunnel_modes.text_5": "UNLOCALIZED: 'Round Robin' keeps stacks whole, and cycles through outputs iteratively", - "create.ponder.brass_tunnel_modes.text_6": "UNLOCALIZED: Once Again, if an output is unable to take more items, it will be skipped", - "create.ponder.brass_tunnel_modes.text_7": "UNLOCALIZED: 'Forced Round Robin' never skips outputs", - "create.ponder.brass_tunnel_modes.text_8": "UNLOCALIZED: 'Prefer Nearest' prioritizes the outputs closest to the items' input location", - "create.ponder.brass_tunnel_modes.text_9": "UNLOCALIZED: 'Randomize' will distribute whole stacks to randomly picked outputs", + "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.cart_assembler.header": "UNLOCALIZED: Moving Structures using Cart Assemblers", - "create.ponder.cart_assembler.text_1": "UNLOCALIZED: Powered Cart Assemblers mount attached structures to passing Minecarts", - "create.ponder.cart_assembler.text_2": "UNLOCALIZED: Without a redstone signal, it disassembles passing cart contraptions back into blocks", - "create.ponder.cart_assembler.text_3": "UNLOCALIZED: Using a Wrench on the Minecart will let you carry the Contraption elsewhere", + "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": "UNLOCALIZED: Assembling Carriage Contraptions", - "create.ponder.cart_assembler_dual.text_1": "UNLOCALIZED: Whenever two Cart Assembers share an attached structure...", - "create.ponder.cart_assembler_dual.text_2": "UNLOCALIZED: Powering either of them will create a Carriage Contraption", - "create.ponder.cart_assembler_dual.text_3": "UNLOCALIZED: The carts will behave like those connected via Minecart Coupling", + "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": "UNLOCALIZED: Orientation Settings for Minecart Contraptions", - "create.ponder.cart_assembler_modes.text_1": "UNLOCALIZED: Cart Contraptions will rotate to face towards their carts' motion", - "create.ponder.cart_assembler_modes.text_2": "UNLOCALIZED: This Arrow indicates which side of the Structure will be considered the front", + "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_3": "UNLOCALIZED: If the Assembler is set to Lock Rotation, the contraptions' orientation will never change", - "create.ponder.cart_assembler_rails.header": "UNLOCALIZED: Other types of Minecarts and Rails", - "create.ponder.cart_assembler_rails.text_1": "UNLOCALIZED: Cart Assemblers on Regular Tracks will not affect the passing carts' motion", - "create.ponder.cart_assembler_rails.text_2": "UNLOCALIZED: When on Powered or Controller Rail, the carts will be held in place until it's Powered", - "create.ponder.cart_assembler_rails.text_3": "UNLOCALIZED: Other types of Minecarts can be used as the anchor", - "create.ponder.cart_assembler_rails.text_4": "UNLOCALIZED: Furnace Carts will keep themselves powered, pulling fuel from any attached inventories", + "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.chain_drive.header": "UNLOCALIZED: Relaying rotational force with Chain Drives", - "create.ponder.chain_drive.text_1": "UNLOCALIZED: Chain Drives relay rotation to each other in a row", - "create.ponder.chain_drive.text_2": "UNLOCALIZED: All shafts connected like this will rotate in the same direction", - "create.ponder.chain_drive.text_3": "UNLOCALIZED: Any part of the row can be rotated by 90 degrees", + "create.ponder.chain_drive.header": "Передаче силы вращения Цепными Приводами", + "create.ponder.chain_drive.text_1": "Цепные Приводы передают силу вращения друг другу", + "create.ponder.chain_drive.text_2": "Все валы соединённые таким образом будут вращаться в одном направлении", + "create.ponder.chain_drive.text_3": "Любая часть в ряду может быть повёрнута на 90 градусов", - "create.ponder.chain_gearshift.header": "UNLOCALIZED: Controlling rotational speed with Chain Gearshifts", - "create.ponder.chain_gearshift.text_1": "UNLOCALIZED: Unpowered Chain Gearshifts behave exactly like Chain Drives", - "create.ponder.chain_gearshift.text_2": "UNLOCALIZED: When Powered, the speed transmitted to other Chain Drives in the row is doubled", - "create.ponder.chain_gearshift.text_3": "UNLOCALIZED: Whenever the Powered Gearshift is not at the source, its speed will be halved instead", - "create.ponder.chain_gearshift.text_4": "UNLOCALIZED: In both cases, Chain Drives in the row always run at 2x the speed of the Powered Gearshift", - "create.ponder.chain_gearshift.text_5": "UNLOCALIZED: Using analog signals, the ratio can be adjusted more precisely between 1 and 2", - "create.ponder.chain_gearshift.text_6": "UNLOCALIZED: 12 RPM", + "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_4": "В обоих случаях Цепные Приводы в ряду всегда вращаются с 2x скорость Активного Цепного Механизма", + "create.ponder.chain_gearshift.text_5": "Используя аналоговые сигналы, это отношение может быть настроено более точно между 1 и 2", + "create.ponder.chain_gearshift.text_6": "12 об./мин.", - "create.ponder.chute.header": "UNLOCALIZED: Transporting Items downward via Chutes", - "create.ponder.chute.text_1": "UNLOCALIZED: Chutes can transport items vertically from and to inventories", - "create.ponder.chute.text_2": "UNLOCALIZED: Using the Wrench, a window can be created", - "create.ponder.chute.text_3": "UNLOCALIZED: Placing chutes targeting the side faces of another will make it diagonal", + "create.ponder.chute.header": "Транспортировке предметов вниз через Желоба", + "create.ponder.chute.text_1": "Желоба могут транпортировать прдеметы вертикально из и в инвентари", + "create.ponder.chute.text_2": "Используя Ключ, вы можете создать окно", + "create.ponder.chute.text_3": "Установка желобов на стороны других желобов сделает их диагональными", - "create.ponder.chute_upward.header": "UNLOCALIZED: Transporting Items upward via Chutes", - "create.ponder.chute_upward.text_1": "UNLOCALIZED: Using Encased Fans at the top or bottom, a Chute can move items upward", - "create.ponder.chute_upward.text_2": "UNLOCALIZED: Inspecting chutes with Engineers' Goggles reveals information about the movement direction", - "create.ponder.chute_upward.text_3": "UNLOCALIZED: On the 'blocked' end, items will have to be inserted/taken from the sides", + "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.clockwork_bearing.header": "UNLOCALIZED: Animating Structures using Clockwork Bearings", - "create.ponder.clockwork_bearing.text_1": "UNLOCALIZED: Clockwork Bearings attach to blocks in front of them", - "create.ponder.clockwork_bearing.text_2": "UNLOCALIZED: Upon receiving Rotational Force, the structure will be rotated according to the hour of the day", - "create.ponder.clockwork_bearing.text_3": "UNLOCALIZED: 3:00", - "create.ponder.clockwork_bearing.text_4": "UNLOCALIZED: 4:00", - "create.ponder.clockwork_bearing.text_5": "UNLOCALIZED: Right-Click the bearing to start or stop animating the structure", - "create.ponder.clockwork_bearing.text_6": "UNLOCALIZED: In front of the Hour Hand, a second structure can be added", - "create.ponder.clockwork_bearing.text_7": "UNLOCALIZED: Ensure the two Structures are not attached to each other through super glue or similar", - "create.ponder.clockwork_bearing.text_8": "UNLOCALIZED: The Second Structure will now rotate as the Minute Hand", + "create.ponder.clockwork_bearing.header": "Оживлении структур Часовым Механизмом", + "create.ponder.clockwork_bearing.text_1": "Часовые Механизмы прикрепляются к блокам спереди", + "create.ponder.clockwork_bearing.text_2": "При получении Силы Вращения структура повернётся в зависимости от текущего часа", + "create.ponder.clockwork_bearing.text_3": "3:00", + "create.ponder.clockwork_bearing.text_4": "4:00", + "create.ponder.clockwork_bearing.text_5": "ПКМ по механизму чтобы остановить или вновь оживить структуру", + "create.ponder.clockwork_bearing.text_6": "Спереди Часовой стрелки вторая структура может быть добавлена", + "create.ponder.clockwork_bearing.text_7": "Убедитесь, что две Структуры не соединены между собой супер-клеем или чем-то схожим", + "create.ponder.clockwork_bearing.text_8": "Вторая Структура станет вращаться как Минутная Стрелка", - "create.ponder.clutch.header": "UNLOCALIZED: Controlling rotational force using a Clutch", - "create.ponder.clutch.text_1": "UNLOCALIZED: Clutches will relay rotation in a straight line", - "create.ponder.clutch.text_2": "UNLOCALIZED: When powered by Redstone, it breaks the connection", + "create.ponder.clutch.header": "Управлении силой вращения использованием Сцепления", + "create.ponder.clutch.text_1": "Сцепление передаёт вращение по прямой", + "create.ponder.clutch.text_2": "При активации Редстоуном оно разрывает соединение", - "create.ponder.cog_speedup.header": "UNLOCALIZED: Gearshifting with Cogs", - "create.ponder.cog_speedup.text_1": "UNLOCALIZED: Large and Small cogs can be connected diagonally", - "create.ponder.cog_speedup.text_2": "UNLOCALIZED: Shifting from large to small cogs, the conveyed speed will be doubled", - "create.ponder.cog_speedup.text_3": "UNLOCALIZED: Shifting the opposite way, the conveyed speed will be halved", + "create.ponder.cog_speedup.header": "Переключении Передач Шестернями", + "create.ponder.cog_speedup.text_1": "Большие и Маленькие шестерни могут соединяться по диагонали", + "create.ponder.cog_speedup.text_2": "Переходя с больших на маленькие шестерни, переданная скорось удвоится", + "create.ponder.cog_speedup.text_3": "Переходя в обратном направлении, переданная скорость сократится вдвое", - "create.ponder.cogwheel.header": "UNLOCALIZED: Relaying rotational force using Cogwheels", - "create.ponder.cogwheel.text_1": "UNLOCALIZED: Cogwheels will relay rotation to other adjacent cogwheels", - "create.ponder.cogwheel.text_2": "UNLOCALIZED: Neighbouring shafts connected like this will rotate in opposite directions", + "create.ponder.cogwheel.header": "Передаче силы вращения Шестернями", + "create.ponder.cogwheel.text_1": "Шестерни передают вращение другим соседним шестерням", + "create.ponder.cogwheel.text_2": "Соседние валы соединённые таким оразом будут вращаться в противоположных направлениях", "create.ponder.creative_fluid_tank.header": "UNLOCALIZED: Creative Fluid Tanks", "create.ponder.creative_fluid_tank.text_1": "UNLOCALIZED: Creative Fluid Tanks can be used to provide a bottomless supply of fluid", @@ -1673,41 +1673,41 @@ "create.ponder.creative_fluid_tank.text_3": "UNLOCALIZED: Pipe Networks can now endlessly draw the assigned fluid from the tank", "create.ponder.creative_fluid_tank.text_4": "UNLOCALIZED: Any Fluids pushed back into a Creative Fluid Tank will be voided", - "create.ponder.creative_motor.header": "UNLOCALIZED: Generating Rotational Force using Creative Motors", - "create.ponder.creative_motor.text_1": "UNLOCALIZED: Creative motors are a compact and configurable source of Rotational Force", - "create.ponder.creative_motor.text_2": "UNLOCALIZED: Scrolling on the back panel changes the RPM of the motors' rotational output", + "create.ponder.creative_motor.header": "Генерации Силы Вращения Творческими Моторами", + "create.ponder.creative_motor.text_1": "Творческие моторы - это компактные и настраиваемые источники Силы Вращения", + "create.ponder.creative_motor.text_2": "Прокрутка по задней панели изменяет кол-во об./мин. у вращающегося вала мотора", - "create.ponder.crushing_wheels.header": "UNLOCALIZED: Processing Items with Crushing Wheels", - "create.ponder.crushing_wheels.text_1": "UNLOCALIZED: A pair of Crushing Wheels can grind items very effectively", - "create.ponder.crushing_wheels.text_2": "UNLOCALIZED: Their Rotational Input has to make them spin into each other", - "create.ponder.crushing_wheels.text_3": "UNLOCALIZED: Items thrown or inserted into the top will get processed", - "create.ponder.crushing_wheels.text_4": "UNLOCALIZED: Items can be inserted and picked up through automated means as well", + "create.ponder.crushing_wheels.header": "Обработке предметов Колёсами Дробления", + "create.ponder.crushing_wheels.text_1": "Пара Колёс Дробления может молоть предметы очень эффективно", + "create.ponder.crushing_wheels.text_2": "Сила Вращения должна вращать их друг в друга", + "create.ponder.crushing_wheels.text_3": "Предметы брошенные или введённые в них сверху будут обработаны", + "create.ponder.crushing_wheels.text_4": "Предметы также могут быть введены и подобраны автомтическим способом", - "create.ponder.deployer.header": "UNLOCALIZED: Using the Deployer", - "create.ponder.deployer.text_1": "UNLOCALIZED: Given Rotational Force, a Deployer can imitate player interactions", - "create.ponder.deployer.text_10": "UNLOCALIZED: Right-click the front to give it an Item to use", - "create.ponder.deployer.text_11": "UNLOCALIZED: Items can also be inserted automatically", - "create.ponder.deployer.text_12": "UNLOCALIZED: Deployers carry a filter slot", - "create.ponder.deployer.text_13": "UNLOCALIZED: When a filter is set, it activates only while holding a matching item", - "create.ponder.deployer.text_14": "UNLOCALIZED: Only items matching the filter can now be inserted...", - "create.ponder.deployer.text_15": "UNLOCALIZED: ...and only non-matching items will be extracted", - "create.ponder.deployer.text_2": "UNLOCALIZED: It will always interact with the position 2 blocks in front of itself", - "create.ponder.deployer.text_3": "UNLOCALIZED: Blocks directly in front will not obstruct it", - "create.ponder.deployer.text_4": "UNLOCALIZED: Deployers can:", - "create.ponder.deployer.text_5": "UNLOCALIZED: Place Blocks,", - "create.ponder.deployer.text_6": "UNLOCALIZED: Use Items,", - "create.ponder.deployer.text_7": "UNLOCALIZED: Activate Blocks,", - "create.ponder.deployer.text_8": "UNLOCALIZED: Harvest blocks", - "create.ponder.deployer.text_9": "UNLOCALIZED: and Attack Mobs", + "create.ponder.deployer.header": "Использовании Автономного Активатора", + "create.ponder.deployer.text_1": "При наличии Силы Вращения Автономный Активатор может имитировать взаимодействия игрока", + "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_3": "Блоки прямо перед ним не будут мешать ему", + "create.ponder.deployer.text_4": "Автономные Активаторы Умеют:", + "create.ponder.deployer.text_5": "Ставить Блоки,", + "create.ponder.deployer.text_6": "Использовать Предметы,", + "create.ponder.deployer.text_7": "Активировать Блоки,", + "create.ponder.deployer.text_8": "Собирать Блоки", + "create.ponder.deployer.text_9": "и Атаковать Мобов", - "create.ponder.deployer_contraption.header": "UNLOCALIZED: Using Deployers on Contraptions", - "create.ponder.deployer_contraption.text_1": "UNLOCALIZED: Whenever Deployers are moved as part of an animated Contraption...", - "create.ponder.deployer_contraption.text_2": "UNLOCALIZED: They activate at each visited location, using items from inventories anywhere on the contraption", - "create.ponder.deployer_contraption.text_3": "UNLOCALIZED: The Filter slot can be used to specify which items to pull", + "create.ponder.deployer_contraption.header": "Использовании Автономных Активаторов на Штуковинах", + "create.ponder.deployer_contraption.text_1": "Всегда, когда Автономные Активаторы дивижутся как часть оживлённой Штуковины...", + "create.ponder.deployer_contraption.text_2": "Они активируются на каждом посещённом месте, используя предметы из любых инвентарей на Штуковине", + "create.ponder.deployer_contraption.text_3": "Слот для Фильтра может быть использован, чтобы уточнить, какие предеметы им брать", - "create.ponder.deployer_modes.header": "UNLOCALIZED: Modes of the Deployer", - "create.ponder.deployer_modes.text_1": "UNLOCALIZED: By default, a Deployer imitates a Right-click interaction", - "create.ponder.deployer_modes.text_2": "UNLOCALIZED: Using a Wrench, it can be set to imitate a Left-click instead", + "create.ponder.deployer_modes.header": "Режимах Автономного Активатора", + "create.ponder.deployer_modes.text_1": "По умолчанию, Ативатор имитирует ПКМ-взаимодейстие", + "create.ponder.deployer_modes.text_2": "Используя Ключ, вы можете установить его на имитацию ЛКМ", "create.ponder.deployer_processing.header": "UNLOCALIZED: Processing Items using Deployers", "create.ponder.deployer_processing.text_1": "UNLOCALIZED: With a fitting held item, Deployers can process items provided beneath them", @@ -1715,46 +1715,46 @@ "create.ponder.deployer_processing.text_3": "UNLOCALIZED: When items are provided on a belt...", "create.ponder.deployer_processing.text_4": "UNLOCALIZED: The Deployer will hold and process them automatically", - "create.ponder.deployer_redstone.header": "UNLOCALIZED: Controlling Deployers with Redstone", - "create.ponder.deployer_redstone.text_1": "UNLOCALIZED: When powered by Redstone, Deployers will not activate", - "create.ponder.deployer_redstone.text_2": "UNLOCALIZED: Before stopping, the Deployer will finish any started cycles", - "create.ponder.deployer_redstone.text_3": "UNLOCALIZED: Thus, a negative pulse can be used to trigger exactly one activation cycle", + "create.ponder.deployer_redstone.header": "Управлении Автономными Активаторами Редстоуном", + "create.ponder.deployer_redstone.text_1": "При активации Редстоуном Активатор перестанет работать", + "create.ponder.deployer_redstone.text_2": "Перед остановкой, Активатор завершит все начатые действия", + "create.ponder.deployer_redstone.text_3": "Таким образом, инвертированный импульс может быть использован для вызова ровно одного срабатывания", - "create.ponder.depot.header": "UNLOCALIZED: Using Depots", - "create.ponder.depot.text_1": "UNLOCALIZED: Depots can serve as 'stationary' belt elements", - "create.ponder.depot.text_2": "UNLOCALIZED: Right-Click to manually place or remove Items from it", - "create.ponder.depot.text_3": "UNLOCALIZED: Just like Mechanical Belts, it can provide items to processing", - "create.ponder.depot.text_4": "UNLOCALIZED: ...as well as provide Items to Mechanical Arms", + "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.empty_blaze_burner.header": "UNLOCALIZED: Using Empty Blaze Burners", - "create.ponder.empty_blaze_burner.text_1": "UNLOCALIZED: Right-click a Blaze with the empty burner to capture it", - "create.ponder.empty_blaze_burner.text_2": "UNLOCALIZED: Alternatively, Blazes can be collected from their Spawners directly", - "create.ponder.empty_blaze_burner.text_3": "UNLOCALIZED: You now have an ideal heat source for various machines", - "create.ponder.empty_blaze_burner.text_4": "UNLOCALIZED: For Aesthetic purposes, Empty Blaze Burners can also be lit using Flint and Steel", - "create.ponder.empty_blaze_burner.text_5": "UNLOCALIZED: However, these are not suitable for industrial heating", + "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_3": "Теперь у вас есть идеальный источник тепла для ряда машин", + "create.ponder.empty_blaze_burner.text_4": "В эстетических целях, Пустые Горелки могут быть зажжены Огнивом", + "create.ponder.empty_blaze_burner.text_5": "Однако они не будут подходить для промышленного нагрева", "create.ponder.encased_fluid_pipe.header": "UNLOCALIZED: Encasing Fluid Pipes", "create.ponder.encased_fluid_pipe.text_1": "UNLOCALIZED: Copper Casing can be used to decorate Fluid Pipes", "create.ponder.encased_fluid_pipe.text_2": "UNLOCALIZED: Aside from being conceiled, Encased Pipes are locked into their connectivity state", "create.ponder.encased_fluid_pipe.text_3": "UNLOCALIZED: It will no longer react to any neighbouring blocks being added or removed", - "create.ponder.fan_direction.header": "UNLOCALIZED: Air flow of Encased Fans", - "create.ponder.fan_direction.text_1": "UNLOCALIZED: Encased Fans use Rotational Force to create an Air Current", - "create.ponder.fan_direction.text_2": "UNLOCALIZED: Strength and Direction of Flow depends on the Rotational Input", + "create.ponder.fan_direction.header": "Воздушном потоке Вентиляторов в Корпусе", + "create.ponder.fan_direction.text_1": "Вентиляторы в Корпусе используют Силу Вращения для создания Воздушного Потока", + "create.ponder.fan_direction.text_2": "Однако они не будут подходить для промышленного нагрева", - "create.ponder.fan_processing.header": "UNLOCALIZED: Processing Items using Encased Fans", - "create.ponder.fan_processing.text_1": "UNLOCALIZED: When passing through lava, the Air Flow becomes Heated", - "create.ponder.fan_processing.text_2": "UNLOCALIZED: Items caught in the area will be smelted", - "create.ponder.fan_processing.text_3": "UNLOCALIZED: Food items thrown here would be incinerated", - "create.ponder.fan_processing.text_4": "UNLOCALIZED: Instead, a setup for Smoking using Fire should be used for them", - "create.ponder.fan_processing.text_5": "UNLOCALIZED: Air Flows passing through water create a Washing Setup", - "create.ponder.fan_processing.text_6": "UNLOCALIZED: Some interesting new processing can be done with it", - "create.ponder.fan_processing.text_7": "UNLOCALIZED: The Speed of the Fan does NOT affect the processing speed, only its range", - "create.ponder.fan_processing.text_8": "UNLOCALIZED: Fan Processing can also be applied to Items on Depots and Belts", + "create.ponder.fan_processing.header": "Обработке предметов используя Вентиляторы в Корпусе", + "create.ponder.fan_processing.text_1": "Проходя через лаву, Воздушный Поток становится Горячим", + "create.ponder.fan_processing.text_2": "Предметы в этой области будут переплавлены", + "create.ponder.fan_processing.text_3": "Съедобные Предметы брошенные сюда будут сожжены", + "create.ponder.fan_processing.text_4": "Вместо этого, для них должна быть использована установка для Копчения с Огнём", + "create.ponder.fan_processing.text_5": "Поток, проходящий через Воду, создаёт Промывающую Установку", + "create.ponder.fan_processing.text_6": "Несколько новых вариантов обработки делаются с её помощью", + "create.ponder.fan_processing.text_7": "Скорость Вентилятора НЕ влияет на скорость обработки, а только на дальность", + "create.ponder.fan_processing.text_8": "Обработка Вентиляторов может быть применена к Предметам на Конвейерах или Депо", - "create.ponder.fan_source.header": "UNLOCALIZED: Generating Rotational Force using Encased Fans", - "create.ponder.fan_source.text_1": "UNLOCALIZED: Fans facing down into a source of heat can provide Rotational Force", - "create.ponder.fan_source.text_2": "UNLOCALIZED: When given a Redstone Signal, the Fans will start providing power", + "create.ponder.fan_source.header": "Генерации Силы Вращения Вентиляторами в Корпусе", + "create.ponder.fan_source.text_1": "Вентиляторы направленные вниз на источник тепла могут создавать Силу Вращения", + "create.ponder.fan_source.text_2": "При Редстоун Сигнале Вентилятор начнёт отдавать энергию", "create.ponder.fluid_pipe_flow.header": "UNLOCALIZED: Moving Fluids using Copper Pipes", "create.ponder.fluid_pipe_flow.text_1": "UNLOCALIZED: Fluid Pipes can connect two or more fluid sources and targets", @@ -1785,78 +1785,78 @@ "create.ponder.fluid_tank_storage.text_4": "UNLOCALIZED: However, in Survival Mode Fluids cannot be added or taken manually", "create.ponder.fluid_tank_storage.text_5": "UNLOCALIZED: You can use Basins, Item Drains and Spouts to drain or fill fluid containing items", - "create.ponder.flywheel.header": "UNLOCALIZED: Generating Rotational Force using the Flywheel", - "create.ponder.flywheel.text_1": "UNLOCALIZED: Flywheels are required for generating rotational force with the Furnace Engine", - "create.ponder.flywheel.text_2": "UNLOCALIZED: The provided Rotational Force has a very large stress capacity", - "create.ponder.flywheel.text_3": "UNLOCALIZED: Using a Blast Furnace will double the efficiency of the Engine", + "create.ponder.flywheel.header": "Генерации Силы Вращения Маховиком", + "create.ponder.flywheel.text_1": "Маховики необходимы для генерации силы вращения при помощи Печных Двигателей", + "create.ponder.flywheel.text_2": "Отдаваемая Сила Вращения имеет очень значительную устойчивость к нагрузкам", + "create.ponder.flywheel.text_3": "Использование Плавильной Печи удвоит эффективность Двигателя", - "create.ponder.funnel_compat.header": "UNLOCALIZED: Funnel compatibility", - "create.ponder.funnel_compat.text_1": "UNLOCALIZED: Funnels should also interact nicely with a handful of other components.", - "create.ponder.funnel_compat.text_2": "UNLOCALIZED: Vertical Saws", - "create.ponder.funnel_compat.text_3": "UNLOCALIZED: Depots", - "create.ponder.funnel_compat.text_4": "UNLOCALIZED: Item Drains", + "create.ponder.funnel_compat.header": "Совместимости Воронок", + "create.ponder.funnel_compat.text_1": "Воронки должны хорошо взаимодействовать с многими компонентов", + "create.ponder.funnel_compat.text_2": "Вертикальные Пилы", + "create.ponder.funnel_compat.text_3": "Депо", + "create.ponder.funnel_compat.text_4": "Предметными осушителями", - "create.ponder.funnel_direction.header": "UNLOCALIZED: Direction of Transfer", - "create.ponder.funnel_direction.text_1": "UNLOCALIZED: Placed normally, it pulls items from the inventory.", - "create.ponder.funnel_direction.text_2": "UNLOCALIZED: Placed while sneaking, it puts items into the inventory.", - "create.ponder.funnel_direction.text_3": "UNLOCALIZED: Using a wrench, the funnel can be flipped after placement.", - "create.ponder.funnel_direction.text_4": "UNLOCALIZED: Same rules will apply for most orientations.", - "create.ponder.funnel_direction.text_5": "UNLOCALIZED: Funnels on belts will extract/insert depending on its movement direction.", + "create.ponder.funnel_direction.header": "Направлении Передачи", + "create.ponder.funnel_direction.text_1": "Поставленная обычным образом, она забирает предметы из инвентаря", + "create.ponder.funnel_direction.text_2": "Поставленная крадучись, она кладёт предметы в инвентарь", + "create.ponder.funnel_direction.text_3": "Используя Ключ, вы можете изменить направление воронки", + "create.ponder.funnel_direction.text_4": "Те же правила применяются для большинства направлений", + "create.ponder.funnel_direction.text_5": "Воронки на конвейерах будут извлекать/вводить предметы в зависимости от направления их движения", - "create.ponder.funnel_intro.header": "UNLOCALIZED: Using funnels", - "create.ponder.funnel_intro.text_1": "UNLOCALIZED: Funnels are ideal for transferring items from and to inventories.", + "create.ponder.funnel_intro.header": "Использовании Воронок", + "create.ponder.funnel_intro.text_1": "Воронки идеально подходят для перемещения предметов из и в инвентари", - "create.ponder.funnel_redstone.header": "UNLOCALIZED: Redstone control", - "create.ponder.funnel_redstone.text_1": "UNLOCALIZED: Redstone power will prevent any funnel from acting", + "create.ponder.funnel_redstone.header": "Редстоун управлении", + "create.ponder.funnel_redstone.text_1": "Редстоун сигнал не даст любой воронке работать", - "create.ponder.funnel_transfer.header": "UNLOCALIZED: Direct transfer", - "create.ponder.funnel_transfer.text_1": "UNLOCALIZED: Funnels cannot ever transfer between closed inventories directly.", - "create.ponder.funnel_transfer.text_2": "UNLOCALIZED: Chutes or Smart chutes might be more suitable for such purposes.", - "create.ponder.funnel_transfer.text_3": "UNLOCALIZED: Same applies for horizontal movement. A mechanical belt should help here.", + "create.ponder.funnel_transfer.header": "Передаче Напрямую", + "create.ponder.funnel_transfer.text_1": "Воронки не могут перемещать предметы напрямую между закрытыми инвентарями", + "create.ponder.funnel_transfer.text_2": "Желоба или Умные желоба могут лучше подходить для жтих целей", + "create.ponder.funnel_transfer.text_3": "То же касается и горизонтального премещения. Механический ремень дожлен здесь помочь", - "create.ponder.furnace_engine.header": "UNLOCALIZED: Generating Rotational Force using the Furnace Engine", - "create.ponder.furnace_engine.text_1": "UNLOCALIZED: Furnace Engines generate Rotational Force while their attached Furnace is running", - "create.ponder.furnace_engine.text_2": "UNLOCALIZED: The provided Rotational Force has a very large stress capacity", - "create.ponder.furnace_engine.text_3": "UNLOCALIZED: Using a Blast Furnace will double the efficiency of the Engine", + "create.ponder.furnace_engine.header": "Генерации Силы Вращения Печными Двигателями", + "create.ponder.furnace_engine.text_1": "Печные Двигатели создают Силу Вращения пока присоединённая к ним Печь работает", + "create.ponder.furnace_engine.text_2": "Создаваемая Сила Вращения имеет очень высокую усточивость к нагрузкам", + "create.ponder.furnace_engine.text_3": "Использование Плавильной Печи удвоит эффективность Двигателя", - "create.ponder.gantry_carriage.header": "UNLOCALIZED: Using Gantry Carriages", - "create.ponder.gantry_carriage.text_1": "UNLOCALIZED: Gantry Carriages can mount to and slide along a Gantry Shaft.", - "create.ponder.gantry_carriage.text_2": "UNLOCALIZED: Gantry setups can move attached Blocks.", + "create.ponder.gantry_carriage.header": "Использовании Крановых Шасси", + "create.ponder.gantry_carriage.text_1": "Крановые Шасси могут прикрепляться и двигаться вдоль Портального Вала", + "create.ponder.gantry_carriage.text_2": "Крановые Установки могут двигать присоединённые Блоки", - "create.ponder.gantry_cascaded.header": "UNLOCALIZED: Cascaded Gantries", - "create.ponder.gantry_cascaded.text_1": "UNLOCALIZED: Gantry shafts attach to a carriage without the need of super glue", - "create.ponder.gantry_cascaded.text_2": "UNLOCALIZED: Same applies for carriages on moved Gantry Shafts", - "create.ponder.gantry_cascaded.text_3": "UNLOCALIZED: Thus, a gantry system can be cascaded to cover multiple axes of movement", + "create.ponder.gantry_cascaded.header": "Каскадных Порталах", + "create.ponder.gantry_cascaded.text_1": "Крановые Валы Прикрепляются к шасси без нужды в супер-клее", + "create.ponder.gantry_cascaded.text_2": "То же относится и к шасси на движущихся Крановые Валах", + "create.ponder.gantry_cascaded.text_3": "Таким образом крановая система может покрывать несколько осей движения", - "create.ponder.gantry_direction.header": "UNLOCALIZED: Gantry Movement Direction", - "create.ponder.gantry_direction.text_1": "UNLOCALIZED: Gantry Shafts can have opposite orientations", - "create.ponder.gantry_direction.text_2": "UNLOCALIZED: The movement direction of carriages depend on their shafts' orientation", - "create.ponder.gantry_direction.text_3": "UNLOCALIZED: ...as well as the rotation direction of the shaft", - "create.ponder.gantry_direction.text_4": "UNLOCALIZED: Same rules apply for the propagated rotation", + "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_4": "Те же правила относятся передаваемому вращению", - "create.ponder.gantry_redstone.header": "UNLOCALIZED: Gantry Power Propagation", - "create.ponder.gantry_redstone.text_1": "UNLOCALIZED: Redstone-powered gantry shafts stop moving their carriages", - "create.ponder.gantry_redstone.text_2": "UNLOCALIZED: Instead, its rotational force is relayed to the carriages' output shaft", + "create.ponder.gantry_redstone.header": "Передаче Энергии Порталами", + "create.ponder.gantry_redstone.text_1": "Активированные Редстоуном крановые валы перестают двигать шасси", + "create.ponder.gantry_redstone.text_2": "Вместо этого их сила вращения передаётся выходящему валу шасси", - "create.ponder.gantry_shaft.header": "UNLOCALIZED: Using Gantry Shafts", - "create.ponder.gantry_shaft.text_1": "UNLOCALIZED: Gantry Shafts form the basis of a gantry setup. Attached Carriages will move along them.", - "create.ponder.gantry_shaft.text_2": "UNLOCALIZED: Gantry setups can move attached Blocks.", + "create.ponder.gantry_shaft.header": "Использовании Крановых Валов", + "create.ponder.gantry_shaft.text_1": "Крановые валы составляют основу портальной установки. По ним будут двигаться присоединённые шасси", + "create.ponder.gantry_shaft.text_2": "Крановые установки могут двигать присоединённые Блоки", - "create.ponder.gearbox.header": "UNLOCALIZED: Relaying rotational force using Gearboxes", - "create.ponder.gearbox.text_1": "UNLOCALIZED: Jumping between axes of rotation can get bulky quickly", - "create.ponder.gearbox.text_2": "UNLOCALIZED: A gearbox is the more compact equivalent of this setup", - "create.ponder.gearbox.text_3": "UNLOCALIZED: Shafts around corners rotate in mirrored directions", - "create.ponder.gearbox.text_4": "UNLOCALIZED: Straight connections will be reversed", + "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.gearshift.header": "UNLOCALIZED: Controlling rotational force using a Gearshift", - "create.ponder.gearshift.text_1": "UNLOCALIZED: Gearshifts will relay rotation in a straight line", - "create.ponder.gearshift.text_2": "UNLOCALIZED: When powered by Redstone, it reverses the transmission", + "create.ponder.gearshift.header": "Управлении Силой Вращения при помощи Реверсивного Механизма", + "create.ponder.gearshift.text_1": "Реверсивные Механизмы передают вращение по прямой", + "create.ponder.gearshift.text_2": "При активации Редстоуном, они реверсируют передачу", - "create.ponder.hand_crank.header": "UNLOCALIZED: Generating Rotational Force using Hand Cranks", - "create.ponder.hand_crank.text_1": "UNLOCALIZED: Hand Cranks can be used by players to apply rotational force manually", - "create.ponder.hand_crank.text_2": "UNLOCALIZED: Hold Right-Click to rotate it Counter-Clockwise", - "create.ponder.hand_crank.text_3": "UNLOCALIZED: Its conveyed speed is relatively high", - "create.ponder.hand_crank.text_4": "UNLOCALIZED: Sneak and Hold Right-Click to rotate it Clockwise", + "create.ponder.hand_crank.header": "Генерации Силы Вращения при помощи Рукояток", + "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.hose_pulley.header": "UNLOCALIZED: Source Filling and Draining using Hose Pulleys", "create.ponder.hose_pulley.text_1": "UNLOCALIZED: Hose Pulleys can be used to fill or drain large bodies of Fluid", @@ -1886,127 +1886,127 @@ "create.ponder.item_drain.text_4": "UNLOCALIZED: ...they roll across, emptying out their contained fluid", "create.ponder.item_drain.text_5": "UNLOCALIZED: Pipe Networks can now pull the fluid from the drains' internal buffer", - "create.ponder.large_cogwheel.header": "UNLOCALIZED: Relaying rotational force using Large Cogwheels", - "create.ponder.large_cogwheel.text_1": "UNLOCALIZED: Large cogwheels can connect to each other at right angles", - "create.ponder.large_cogwheel.text_2": "UNLOCALIZED: It will help relaying conveyed speed to other axes of rotation", + "create.ponder.large_cogwheel.header": "Передаче Силы Вращения при помощи Больших Шестерней", + "create.ponder.large_cogwheel.text_1": "Большие Шестерни могут соединяться между собой под прямым углом", + "create.ponder.large_cogwheel.text_2": "Это поможет передавать скорость на другие оси вращения", - "create.ponder.linear_chassis_attachment.header": "UNLOCALIZED: Attaching blocks using Linear Chassis", - "create.ponder.linear_chassis_attachment.text_1": "UNLOCALIZED: The open faces of a Linear Chassis can be made Sticky", - "create.ponder.linear_chassis_attachment.text_2": "UNLOCALIZED: Click again to make the opposite side sticky", - "create.ponder.linear_chassis_attachment.text_3": "UNLOCALIZED: Sneak and Right-Click with an empty hand to remove the slime", - "create.ponder.linear_chassis_attachment.text_4": "UNLOCALIZED: Stickied faces of the Linear Chassis will attach a line of blocks in front of it", - "create.ponder.linear_chassis_attachment.text_5": "UNLOCALIZED: Using a Wrench, a precise Range can be specified for this chassis", - "create.ponder.linear_chassis_attachment.text_6": "UNLOCALIZED: Holding CTRL and scrolling adjusts the range of all attached Chassis Blocks", - "create.ponder.linear_chassis_attachment.text_7": "UNLOCALIZED: Attaching blocks to any other side requires the use of Super Glue", - "create.ponder.linear_chassis_attachment.text_8": "UNLOCALIZED: Using these mechanics, structures of any shape can move as a Contraption", + "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_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_group.header": "UNLOCALIZED: Moving Linear Chassis in groups", - "create.ponder.linear_chassis_group.text_1": "UNLOCALIZED: Linear Chassis connect to identical Chassis blocks next to them", - "create.ponder.linear_chassis_group.text_2": "UNLOCALIZED: When one is moved by a Contraption, the others are dragged with it", - "create.ponder.linear_chassis_group.text_3": "UNLOCALIZED: Chassis of a different type or facing another direction will not attach", + "create.ponder.linear_chassis_group.header": "Движении Линейных Шасси в Группах", + "create.ponder.linear_chassis_group.text_1": "Линейные Шасси соединяются с такими же блоками Шасси рядом с ними", + "create.ponder.linear_chassis_group.text_2": "Когда один блок перемещается Штуковиной, другие двигаются c ним", + "create.ponder.linear_chassis_group.text_3": "Шасси других типов или направленные в другом направлении не будут прикрепляться", - "create.ponder.mechanical_arm.header": "UNLOCALIZED: Setting up Mechanical Arms", - "create.ponder.mechanical_arm.text_1": "UNLOCALIZED: Mechanical Arms have to be assigned their in- and outputs before they are placed", - "create.ponder.mechanical_arm.text_2": "UNLOCALIZED: Right-Click inventories while holding the Arm to assign them as Targets", - "create.ponder.mechanical_arm.text_3": "UNLOCALIZED: Right-Click again to toggle between Input (Blue) and Output (Orange)", - "create.ponder.mechanical_arm.text_4": "UNLOCALIZED: Left-Click components to remove their Selection", - "create.ponder.mechanical_arm.text_5": "UNLOCALIZED: Once placed, the Mechanical Arm will target the blocks selected previously", - "create.ponder.mechanical_arm.text_6": "UNLOCALIZED: They can have any amount of in- and outputs within their range", - "create.ponder.mechanical_arm.text_7": "UNLOCALIZED: However, not every type of Inventory can be interacted with directly", - "create.ponder.mechanical_arm.text_8": "UNLOCALIZED: Funnels and Depots can help to Bridge that gap", + "create.ponder.mechanical_arm.header": "Настройке Механических Рук", + "create.ponder.mechanical_arm.text_1": "Входы и Выходы для Механических Рук должны быть назначены перед их установкой", + "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_8": "Воронки и Депо могут помочь заполнить этот пробел", - "create.ponder.mechanical_arm_filtering.header": "UNLOCALIZED: Filtering Outputs of the Mechanical Arm", - "create.ponder.mechanical_arm_filtering.text_1": "UNLOCALIZED: Inputs", - "create.ponder.mechanical_arm_filtering.text_2": "UNLOCALIZED: Outputs", - "create.ponder.mechanical_arm_filtering.text_3": "UNLOCALIZED: Sometimes it is desirable to restrict targets of the Arm by matching a filter", - "create.ponder.mechanical_arm_filtering.text_4": "UNLOCALIZED: Mechanical Arms by themselves do not provide any options for filtering", - "create.ponder.mechanical_arm_filtering.text_5": "UNLOCALIZED: Brass Funnels as Targets do however communicate their own filter to the Arm", - "create.ponder.mechanical_arm_filtering.text_6": "UNLOCALIZED: The Arm is smart enough not to pick up items it couldn't distribute", + "create.ponder.mechanical_arm_filtering.header": "Фильтрации Выходов Механической Руки", + "create.ponder.mechanical_arm_filtering.text_1": "Входы", + "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_6": "Рука достаточно умна, чтобы не подбирать предметы, которые она не сможет распределить", - "create.ponder.mechanical_arm_modes.header": "UNLOCALIZED: Distribution modes of the Mechanical Arm", - "create.ponder.mechanical_arm_modes.text_1": "UNLOCALIZED: Input", - "create.ponder.mechanical_arm_modes.text_2": "UNLOCALIZED: Outputs", - "create.ponder.mechanical_arm_modes.text_3": "UNLOCALIZED: Whenever an Arm has to choose between multiple valid outputs...", - "create.ponder.mechanical_arm_modes.text_4": "UNLOCALIZED: ...it will act according to its setting", - "create.ponder.mechanical_arm_modes.text_5": "UNLOCALIZED: Scrolling with a Wrench will allow you to configure it", - "create.ponder.mechanical_arm_modes.text_6": "UNLOCALIZED: Round Robin mode simply cycles through all outputs that are available", - "create.ponder.mechanical_arm_modes.text_7": "UNLOCALIZED: If an output is unable to take more items, it will be skipped", - "create.ponder.mechanical_arm_modes.text_8": "UNLOCALIZED: Forced Round Robin mode will never skip outputs, and instead wait until they are free", - "create.ponder.mechanical_arm_modes.text_9": "UNLOCALIZED: Prefer First prioritizes the outputs selected earliest when configuring this Arm", + "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_5": "Прокрутка с Ключом повзолит вам настроить это", + "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_redstone.header": "UNLOCALIZED: Controlling Mechanical Arms with Redstone", - "create.ponder.mechanical_arm_redstone.text_1": "UNLOCALIZED: When powered by Redstone, Mechanical Arms will not activate", - "create.ponder.mechanical_arm_redstone.text_2": "UNLOCALIZED: Before stopping, it will finish any started cycles", - "create.ponder.mechanical_arm_redstone.text_3": "UNLOCALIZED: Thus, a negative pulse can be used to trigger exactly one activation cycle", + "create.ponder.mechanical_arm_redstone.header": "Управлении Механическими Руками Редстоуном", + "create.ponder.mechanical_arm_redstone.text_1": "При активации Редстоуном, Механические Руки перестают работать", + "create.ponder.mechanical_arm_redstone.text_2": "Перед остановкой, они завершат все начатые действия", + "create.ponder.mechanical_arm_redstone.text_3": "Таким образом, инвертированный импульс для вызова ровно одного срабатывания", - "create.ponder.mechanical_bearing.header": "UNLOCALIZED: Movings Structures using the Mechanical Bearing", - "create.ponder.mechanical_bearing.text_1": "UNLOCALIZED: Mechanical Bearings attach to the block in front of them", - "create.ponder.mechanical_bearing.text_2": "UNLOCALIZED: Upon receiving Rotational Force, it will assemble it into a Rotating Contraption", + "create.ponder.mechanical_bearing.header": "Передвижении Структур при помощи Механического Подшипника", + "create.ponder.mechanical_bearing.text_1": "Механические Подшипники прикрепляют блоки перед ними", + "create.ponder.mechanical_bearing.text_2": "при получении Силы Вращения, они соберутся во Вращяющуюся Штуковину", - "create.ponder.mechanical_crafter.header": "UNLOCALIZED: Setting up Mechanical Crafters", - "create.ponder.mechanical_crafter.text_1": "UNLOCALIZED: An array of Mechanical Crafters can be used to automate any Crafting Recipe", - "create.ponder.mechanical_crafter.text_2": "UNLOCALIZED: Using a Wrench, the Crafters' paths can be arranged", - "create.ponder.mechanical_crafter.text_3": "UNLOCALIZED: For a valid setup, all paths have to converge into one exit at any side", - "create.ponder.mechanical_crafter.text_4": "UNLOCALIZED: The outputs will be placed into the inventory at the exit", - "create.ponder.mechanical_crafter.text_5": "UNLOCALIZED: Mechanical Crafters require Rotational Force to operate", - "create.ponder.mechanical_crafter.text_6": "UNLOCALIZED: Right-Click the front to insert Items manually", - "create.ponder.mechanical_crafter.text_7": "UNLOCALIZED: Once every slot of a path contains an Item, the crafting process will begin", - "create.ponder.mechanical_crafter.text_8": "UNLOCALIZED: For recipes not fully occupying the crafter setup, the start can be forced using a Redstone Pulse", + "create.ponder.mechanical_crafter.header": "Настройке Механических Крафтеров", + "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_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": "UNLOCALIZED: Connecting Inventories of Crafters", - "create.ponder.mechanical_crafter_connect.text_1": "UNLOCALIZED: Items can be inserted to Crafters automatically", - "create.ponder.mechanical_crafter_connect.text_2": "UNLOCALIZED: Using the Wrench at their backs, Mechanical Crafter inputs can be combined", - "create.ponder.mechanical_crafter_connect.text_3": "UNLOCALIZED: All connected Crafters can now be accessed by the same input location", + "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": "UNLOCALIZED: Covering slots of Mechanical Crafters", - "create.ponder.mechanical_crafter_covers.text_1": "UNLOCALIZED: Some recipes will require additional Crafters to bridge gaps in the path", - "create.ponder.mechanical_crafter_covers.text_2": "UNLOCALIZED: Using Slot Covers, Crafters can be set to act as an Empty Slot in the arrangement", - "create.ponder.mechanical_crafter_covers.text_3": "UNLOCALIZED: Shared Inputs created with the Wrench at the back can also reach across covered Crafters", + "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_drill.header": "UNLOCALIZED: Breaking Blocks with the Mechanical Drill", - "create.ponder.mechanical_drill.text_1": "UNLOCALIZED: When given Rotational Force, a Mechanical Drill will break blocks directly in front of it", - "create.ponder.mechanical_drill.text_2": "UNLOCALIZED: Its mining speed depends on the Rotational Input", + "create.ponder.mechanical_drill.header": "Ломании Блоков Механической Дрелью", + "create.ponder.mechanical_drill.text_1": "При подаче Вращения, Механическая Дрель будет ломать блоки перед ней", + "create.ponder.mechanical_drill.text_2": "Скорость добычи зависит от Входящей Скорости", - "create.ponder.mechanical_drill_contraption.header": "UNLOCALIZED: Using Mechanical Drills on Contraptions", - "create.ponder.mechanical_drill_contraption.text_1": "UNLOCALIZED: Whenever Drills are moved as part of an animated Contraption...", - "create.ponder.mechanical_drill_contraption.text_2": "UNLOCALIZED: ...they will break blocks the contraption runs them into", + "create.ponder.mechanical_drill_contraption.header": "Использовании Механических Дрелей на Штуковинах", + "create.ponder.mechanical_drill_contraption.text_1": "Когда Дрели движутся как часть оживлённой Штуковины...", + "create.ponder.mechanical_drill_contraption.text_2": "они будут ломать блоки, на которые они натыкаются", - "create.ponder.mechanical_harvester.header": "UNLOCALIZED: Using Mechanical Harvesters on Contraptions", - "create.ponder.mechanical_harvester.text_1": "UNLOCALIZED: Whenever Harvesters are moved as part of an animated Contraption...", - "create.ponder.mechanical_harvester.text_2": "UNLOCALIZED: They will harvest and reset any mature crops on their way", + "create.ponder.mechanical_harvester.header": "Использовании Механических комбайнов на Штуковинах", + "create.ponder.mechanical_harvester.text_1": "Когда Комбайны движутся как часть оживлённой Штуковины...", + "create.ponder.mechanical_harvester.text_2": "Они будут убирать зрелый урожай на своём пути и высаживать его снова", - "create.ponder.mechanical_mixer.header": "UNLOCALIZED: Processing Items with the Mechanical Mixer", - "create.ponder.mechanical_mixer.text_1": "UNLOCALIZED: With a Mixer and Basin, some Crafting Recipes can be automated", - "create.ponder.mechanical_mixer.text_2": "UNLOCALIZED: Available recipes include any Shapeless Crafting Recipe, plus a couple extra ones", - "create.ponder.mechanical_mixer.text_3": "UNLOCALIZED: Some of those recipes may require the heat of a Blaze Burner", - "create.ponder.mechanical_mixer.text_4": "UNLOCALIZED: The filter slot can be used in case two recipes are conflicting.", + "create.ponder.mechanical_mixer.header": "Обратобтке Предметов Механическим Миксером", + "create.ponder.mechanical_mixer.text_1": "При помощи Миксера и Чаши можно автоматизировать некоторые Рецепты Крафта", + "create.ponder.mechanical_mixer.text_2": "Доступные рецепты включают любые Бесформенные Рецепты Крафта плюс немного ещё", + "create.ponder.mechanical_mixer.text_3": "Некоторые из них требуют тепло от Горелки Всполоха", + "create.ponder.mechanical_mixer.text_4": "Слот для фильтра можно использовать в случае конфликта двух рецептов", - "create.ponder.mechanical_piston.header": "UNLOCALIZED: Moving Structures using Mechanical Pistons", - "create.ponder.mechanical_piston.text_1": "UNLOCALIZED: Mechanical Pistons can move blocks in front of them", - "create.ponder.mechanical_piston.text_2": "UNLOCALIZED: Speed and direction of movement depend on the Rotational Input", - "create.ponder.mechanical_piston.text_3": "UNLOCALIZED: Sticky Mechanical Pistons can pull the attached blocks back", + "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_modes.header": "UNLOCALIZED: Movement Modes of the Mechanical Piston", - "create.ponder.mechanical_piston_modes.text_1": "UNLOCALIZED: Whenever Pistons stop moving, the moved structure reverts to blocks", - "create.ponder.mechanical_piston_modes.text_2": "UNLOCALIZED: It can be configured never to revert to solid blocks, or only at the location it started at", + "create.ponder.mechanical_piston_modes.header": "Режимах Движения Механического Поршня", + "create.ponder.mechanical_piston_modes.text_1": "Когда Поршень останавливается, сдвинутая структура обратно становится блоками", + "create.ponder.mechanical_piston_modes.text_2": "Можно настроить его так, чтобы структура никогда не становилась блоками или только на начальной позиции", - "create.ponder.mechanical_plough.header": "UNLOCALIZED: Using Mechanical Ploughs on Contraptions", - "create.ponder.mechanical_plough.text_1": "UNLOCALIZED: Whenever Ploughs are moved as part of an animated Contraption...", - "create.ponder.mechanical_plough.text_2": "UNLOCALIZED: ...they will break blocks without a solid collision hitbox", - "create.ponder.mechanical_plough.text_3": "UNLOCALIZED: Additionally, ploughs can create farmland", - "create.ponder.mechanical_plough.text_4": "UNLOCALIZED: ...they can also launch entities without hurting them", + "create.ponder.mechanical_plough.header": "Использовании Механичесикх Плугов на Штуковинах", + "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_press.header": "UNLOCALIZED: Processing Items with the Mechanical Press", - "create.ponder.mechanical_press.text_1": "UNLOCALIZED: The Mechanical Press can process items provided beneath it", - "create.ponder.mechanical_press.text_2": "UNLOCALIZED: The Input items can be dropped or placed on a Depot under the Press", - "create.ponder.mechanical_press.text_3": "UNLOCALIZED: When items are provided on a belt...", - "create.ponder.mechanical_press.text_4": "UNLOCALIZED: The Press will hold and process them automatically", + "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_4": "Пресс будет задерживать и обрабатывать их автоматически", - "create.ponder.mechanical_press_compacting.header": "UNLOCALIZED: Compacting items with the Mechanical Press", - "create.ponder.mechanical_press_compacting.text_1": "UNLOCALIZED: Pressing items held in a Basin will cause them to be Compacted", - "create.ponder.mechanical_press_compacting.text_2": "UNLOCALIZED: Compacting includes any filled 2x2 or 3x3 Crafting Recipe, plus a couple extra ones", - "create.ponder.mechanical_press_compacting.text_3": "UNLOCALIZED: Some of those recipes may require the heat of a Blaze Burner", - "create.ponder.mechanical_press_compacting.text_4": "UNLOCALIZED: The filter slot can be used in case two recipes are conflicting.", + "create.ponder.mechanical_press_compacting.header": "Упаковке предметов Механическим Прессом", + "create.ponder.mechanical_press_compacting.text_1": "Спрессовываение предметов в Чаше Упакует их", + "create.ponder.mechanical_press_compacting.text_2": "Упаковка включает любые заполенные 2x2 или 3x3 Рецепты Крафта плюс немного ещё", + "create.ponder.mechanical_press_compacting.text_3": "Некоторым рецептам может потребоваться тепло от Горелки Всполоха", + "create.ponder.mechanical_press_compacting.text_4": "Слот для фильтра можно использовать в случае конфликта двух рецептов", "create.ponder.mechanical_pump_flow.header": "UNLOCALIZED: Fluid Transportation using Mechanical Pumps", "create.ponder.mechanical_pump_flow.text_1": "UNLOCALIZED: Mechanical Pumps govern the flow of their attached pipe networks", @@ -2023,35 +2023,35 @@ "create.ponder.mechanical_pump_speed.text_4": "UNLOCALIZED: Pumps can combine their throughputs within shared pipe networks", "create.ponder.mechanical_pump_speed.text_5": "UNLOCALIZED: Alternating their orientation can help align their flow directions", - "create.ponder.mechanical_saw_breaker.header": "UNLOCALIZED: Cutting Trees with the Mechanical Saw", - "create.ponder.mechanical_saw_breaker.text_1": "UNLOCALIZED: When given Rotational Force, a Mechanical Saw will cut trees directly in front of it", - "create.ponder.mechanical_saw_breaker.text_2": "UNLOCALIZED: In order to cut the tree fully, the Saw has to break the last block connecting it to the ground", + "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": "UNLOCALIZED: Using Mechanical Saws on Contraptions", - "create.ponder.mechanical_saw_contraption.text_1": "UNLOCALIZED: Whenever Saws are moved as part of an animated Contraption...", - "create.ponder.mechanical_saw_contraption.text_2": "UNLOCALIZED: ...they will cut any trees the contraption runs them into", + "create.ponder.mechanical_saw_contraption.header": "Использовании Механический Пил на Штуковинах", + "create.ponder.mechanical_saw_contraption.text_1": "Когда Пилы движутся как часть оживлённой Штуковины...", + "create.ponder.mechanical_saw_contraption.text_2": "...они будут ломать блоки, на которые они натыкаются", - "create.ponder.mechanical_saw_processing.header": "UNLOCALIZED: Processing Items on the Mechanical Saw", - "create.ponder.mechanical_saw_processing.text_1": "UNLOCALIZED: Upward facing Mechanical Saws can process a variety of items", - "create.ponder.mechanical_saw_processing.text_2": "UNLOCALIZED: The processed item always moves against the rotational input to the saw", - "create.ponder.mechanical_saw_processing.text_3": "UNLOCALIZED: Saws can work in-line with Mechanical Belts", - "create.ponder.mechanical_saw_processing.text_4": "UNLOCALIZED: When an ingredient has multiple possible outcomes, the filter slot can specify it", - "create.ponder.mechanical_saw_processing.text_5": "UNLOCALIZED: Without filter, the Saw would cycle through all outcomes instead", + "create.ponder.mechanical_saw_processing.header": "Обработке Предметов на Механической Пиле", + "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": "UNLOCALIZED: Processing Items in the Millstone", - "create.ponder.millstone.text_1": "UNLOCALIZED: Millstones process items by grinding them", - "create.ponder.millstone.text_2": "UNLOCALIZED: They can be powered from the side using cogwheels", - "create.ponder.millstone.text_3": "UNLOCALIZED: Throw or Insert items at the top", - "create.ponder.millstone.text_4": "UNLOCALIZED: After some time, the result can be obtained via Right-click", - "create.ponder.millstone.text_5": "UNLOCALIZED: The outputs can also be extracted by automation", + "create.ponder.millstone.header": "Обработке предметов в Жерновах", + "create.ponder.millstone.text_1": "Жернова обрабатывают предметы перемалывая их", + "create.ponder.millstone.text_2": "Их можно запустить при помощи Шестерней с любой стороны", + "create.ponder.millstone.text_3": "Бросьте или Внесите предметы сверху", + "create.ponder.millstone.text_4": "После некоторого времени результат можно забрать при помощи ПКМ", + "create.ponder.millstone.text_5": "Продукты также можно вывести автоматически", - "create.ponder.nixie_tube.header": "UNLOCALIZED: Using Nixie Tubes", - "create.ponder.nixie_tube.text_1": "UNLOCALIZED: When powered by Redstone, Nixie Tubes will display the redstone signals' strength", - "create.ponder.nixie_tube.text_2": "UNLOCALIZED: Using name tags edited with an anvil, custom text can be displayed", + "create.ponder.nixie_tube.header": "Использовании Газоразрядных индикаторов", + "create.ponder.nixie_tube.text_1": "При подаче Редстоун сигнала, Газоразрядные индикаторы отобразят его силу.", + "create.ponder.nixie_tube.text_2": "С помощью бирок, отредактированных на наковальне, вы можете отобразить любой текст.", - "create.ponder.piston_pole.header": "UNLOCALIZED: Piston Extension Poles", - "create.ponder.piston_pole.text_1": "UNLOCALIZED: Without attached Poles, a Mechanical Piston cannot move", - "create.ponder.piston_pole.text_2": "UNLOCALIZED: The Length of pole added at its back determines the Extension Range", + "create.ponder.piston_pole.header": "Удлиннителях Поршня", + "create.ponder.piston_pole.text_1": "Без присоединённых Удлиннителей, Механический Поршень не может двигаться", + "create.ponder.piston_pole.text_2": "Длина стержня, добавленного к его задней части, определяет Диапазон Выдвижения.", "create.ponder.portable_fluid_interface.header": "UNLOCALIZED: Contraption Fluid Exchange", "create.ponder.portable_fluid_interface.text_1": "UNLOCALIZED: Fluid Tanks on moving contraptions cannot be accessed by any pipes", @@ -2063,102 +2063,102 @@ "create.ponder.portable_fluid_interface.text_7": "UNLOCALIZED: ...or extracted from the contraption", "create.ponder.portable_fluid_interface.text_8": "UNLOCALIZED: After no contents have been exchanged for a while, the contraption will continue on its way", - "create.ponder.portable_storage_interface.header": "UNLOCALIZED: Contraption Storage Exchange", - "create.ponder.portable_storage_interface.text_1": "UNLOCALIZED: Inventories on moving contraptions cannot be accessed by players.", - "create.ponder.portable_storage_interface.text_2": "UNLOCALIZED: This component can interact with storage without the need to stop the contraption.", - "create.ponder.portable_storage_interface.text_3": "UNLOCALIZED: Place a second one with a gap of 1 or 2 blocks inbetween", - "create.ponder.portable_storage_interface.text_4": "UNLOCALIZED: Whenever they pass by each other, they will engage in a connection", - "create.ponder.portable_storage_interface.text_5": "UNLOCALIZED: While engaged, the stationary interface will represent ALL inventories on the contraption", - "create.ponder.portable_storage_interface.text_6": "UNLOCALIZED: Items can now be inserted...", - "create.ponder.portable_storage_interface.text_7": "UNLOCALIZED: ...or extracted from the contraption", - "create.ponder.portable_storage_interface.text_8": "UNLOCALIZED: After no items have been exchanged for a while, the contraption will continue on its way", + "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_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_8": "Если на какое-то время прекратится обмен предметами, штуковина продолжит свой путь", - "create.ponder.portable_storage_interface_redstone.header": "UNLOCALIZED: Redstone Control", - "create.ponder.portable_storage_interface_redstone.text_1": "UNLOCALIZED: Redstone power will prevent the stationary interface from engaging", + "create.ponder.portable_storage_interface_redstone.header": "Редстоун Управлении", + "create.ponder.portable_storage_interface_redstone.text_1": "Редстоун сигнал предотвратит включение стационарного интерфейса", - "create.ponder.powered_latch.header": "UNLOCALIZED: Controlling signals using the Powered Latch", - "create.ponder.powered_latch.text_1": "UNLOCALIZED: Powered Latches are redstone controllable Levers", - "create.ponder.powered_latch.text_2": "UNLOCALIZED: Signals at the back switch it on", - "create.ponder.powered_latch.text_3": "UNLOCALIZED: Signals from the side switch it back off", - "create.ponder.powered_latch.text_4": "UNLOCALIZED: Powered latches can also be toggled manually", + "create.ponder.powered_latch.header": "Управлении сигналами при помощи Силового Триггера", + "create.ponder.powered_latch.text_1": "Силовые Триггеры - управляемые редстоуном рычаги", + "create.ponder.powered_latch.text_2": "Сигнал сзади включаен его", + "create.ponder.powered_latch.text_3": "Сигналы сбоку обратно выключают его", + "create.ponder.powered_latch.text_4": "Силовые Триггеры можно переключать и вручную", - "create.ponder.powered_toggle_latch.header": "UNLOCALIZED: Controlling signals using the Powered Toggle Latch", - "create.ponder.powered_toggle_latch.text_1": "UNLOCALIZED: Powered Toggle Latches are redstone controllable Levers", - "create.ponder.powered_toggle_latch.text_2": "UNLOCALIZED: Signals at the back will toggle its state", - "create.ponder.powered_toggle_latch.text_3": "UNLOCALIZED: ...on and back off", - "create.ponder.powered_toggle_latch.text_4": "UNLOCALIZED: Powered toggle latches can also be toggled manually", + "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_4": "Силовые переключаемые триггеры также можно переключать вручную", - "create.ponder.pulse_repeater.header": "UNLOCALIZED: Controlling signals using Pulse Repeaters", - "create.ponder.pulse_repeater.text_1": "UNLOCALIZED: Pulse Repeaters will shorten any redstone signal to a single pulse", + "create.ponder.pulse_repeater.header": "Управлении Сигналами при помощи Импульсных Повторителей", + "create.ponder.pulse_repeater.text_1": "Импульсные Повторители укоротят любой редстуон сигнал до одного импульса.", - "create.ponder.radial_chassis.header": "UNLOCALIZED: Attaching blocks using Radial Chassis", - "create.ponder.radial_chassis.text_1": "UNLOCALIZED: Radial Chassis connect to identical Chassis blocks in a row", - "create.ponder.radial_chassis.text_2": "UNLOCALIZED: When one is moved by a Contraption, the others are dragged with it", - "create.ponder.radial_chassis.text_3": "UNLOCALIZED: The side faces of a Radial Chassis can be made Sticky", - "create.ponder.radial_chassis.text_4": "UNLOCALIZED: Click again to make all other sides sticky", - "create.ponder.radial_chassis.text_5": "UNLOCALIZED: Sneak and Right-Click with an empty hand to remove the slime", - "create.ponder.radial_chassis.text_6": "UNLOCALIZED: Whenever a Block is next to a sticky face...", - "create.ponder.radial_chassis.text_7": "UNLOCALIZED: ...it will attach all reachable blocks within a radius on that layer", - "create.ponder.radial_chassis.text_8": "UNLOCALIZED: Using a Wrench, a precise Radius can be specified for this chassis", - "create.ponder.radial_chassis.text_9": "UNLOCALIZED: Blocks not reachable by any sticky face will not attach", + "create.ponder.radial_chassis.header": "Присоединении Блоков при помощи Радиальных Шасси", + "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.redstone_contact.header": "UNLOCALIZED: Redstone Contacts", - "create.ponder.redstone_contact.text_1": "UNLOCALIZED: Redstone Contacts facing each other will emit a redstone signal", - "create.ponder.redstone_contact.text_2": "UNLOCALIZED: This still applies when one of them is part of a moving Contraption", + "create.ponder.redstone_contact.header": "Редстоун Контактах", + "create.ponder.redstone_contact.text_1": "Редстоун Контакты направленные друг на друга будут излучать редстоун сигнал", + "create.ponder.redstone_contact.text_2": "Также применимо, когда один из них - часть двигающейся Штуковины", - "create.ponder.redstone_link.header": "UNLOCALIZED: Using Redstone Links", - "create.ponder.redstone_link.text_1": "UNLOCALIZED: Redstone Links can transmit redstone signals wirelessly", - "create.ponder.redstone_link.text_2": "UNLOCALIZED: Right-click while Sneaking to toggle receive mode", - "create.ponder.redstone_link.text_3": "UNLOCALIZED: A simple Right-click with a Wrench can do the same", - "create.ponder.redstone_link.text_4": "UNLOCALIZED: Receivers emit the redstone power of transmitters within 128 blocks", - "create.ponder.redstone_link.text_5": "UNLOCALIZED: Placing items in the two slots can specify a Frequency", - "create.ponder.redstone_link.text_6": "UNLOCALIZED: Only the links with matching Frequencies will communicate", + "create.ponder.redstone_link.header": "Использовании Редстоун Передатчиков", + "create.ponder.redstone_link.text_1": "Редстоун Передатчики могут передавать редстоун сигнал без проводов", + "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.rope_pulley.header": "UNLOCALIZED: Moving Structures using Rope Pulleys", - "create.ponder.rope_pulley.text_1": "UNLOCALIZED: Rope Pulleys can move blocks vertically when given Rotational Force", - "create.ponder.rope_pulley.text_2": "UNLOCALIZED: Direction and Speed of movement depend on the Rotational Input", + "create.ponder.rope_pulley.header": "Перемещении Структур при помощи Лебёдки", + "create.ponder.rope_pulley.text_1": "Лебёдки могут двигать блоки вертикально при подаче Вращения", + "create.ponder.rope_pulley.text_2": "Направление и скорость движения зависят от Исходного Вращения", - "create.ponder.rope_pulley_attachment.header": "UNLOCALIZED: Moving Pulleys as part of a Contraption", - "create.ponder.rope_pulley_attachment.text_1": "UNLOCALIZED: Whenever Pulleys are themselves being moved by a Contraption...", - "create.ponder.rope_pulley_attachment.text_2": "UNLOCALIZED: ...its attached structure will be dragged with it", - "create.ponder.rope_pulley_attachment.text_3": "UNLOCALIZED: Mind that pulleys are only movable while stopped", + "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_3": "Учитывайте, что лебёдки можно двигать только пока они простаивают", - "create.ponder.rope_pulley_modes.header": "UNLOCALIZED: Movement Modes of the Rope Pulley", - "create.ponder.rope_pulley_modes.text_1": "UNLOCALIZED: Whenever Pulleys stop moving, the moved structure reverts to blocks", - "create.ponder.rope_pulley_modes.text_2": "UNLOCALIZED: It can be configured never to revert to solid blocks, or only at the location it started at", + "create.ponder.rope_pulley_modes.header": "Режимах Движения Лебёдки", + "create.ponder.rope_pulley_modes.text_1": "Когда Лебёдка останавливается, сдвинутая структура обратно становится блоками", + "create.ponder.rope_pulley_modes.text_2": "Можно настроить её так, чтобы структура никогда не становилась блоками или только на начальной позиции", - "create.ponder.rotation_speed_controller.header": "UNLOCALIZED: Using the Rotational Speed Controller", - "create.ponder.rotation_speed_controller.text_1": "UNLOCALIZED: Rot. Speed Controllers relay rotation from their axis to a Large Cogwheel above them", - "create.ponder.rotation_speed_controller.text_2": "UNLOCALIZED: Using the scroll input on its side, the conveyed speed can be configured", + "create.ponder.rotation_speed_controller.header": "Использовании Регулятора Скорости Вращения", + "create.ponder.rotation_speed_controller.text_1": "Регуляторы Ск. Вращения передают вращение от своих осей на Большую Шестерню выше них", + "create.ponder.rotation_speed_controller.text_2": "Можно настроить передаваемую скорость при помощи прокрутки по соответствующему месту сбоку", - "create.ponder.sail.header": "UNLOCALIZED: Assembling Windmills using Sails", - "create.ponder.sail.text_1": "UNLOCALIZED: Sails are handy blocks to create Windmills with", - "create.ponder.sail.text_2": "UNLOCALIZED: They will attach to blocks and each other without the need of Super Glue or Chassis Blocks", - "create.ponder.sail.text_3": "UNLOCALIZED: Right-Click with Dye to paint them", - "create.ponder.sail.text_4": "UNLOCALIZED: Right-Click with Shears to turn them back into frames", + "create.ponder.sail.header": "Сборки Мельниц при помощи Парусов", + "create.ponder.sail.text_1": "Паруса - удобные блоки для создания Мельниц", + "create.ponder.sail.text_2": "Они будут прикрепляться к блокам и друг к другу без использования Суперклея или Блоков Шасси", + "create.ponder.sail.text_3": "ПКМ Красителем, чтобы покрасить их", + "create.ponder.sail.text_4": "ПКМ Ножницами, чтобы превратить их снова в раму", - "create.ponder.sail_frame.header": "UNLOCALIZED: Assembling Windmills using Sail Frames", - "create.ponder.sail_frame.text_1": "UNLOCALIZED: Sail Frames are handy blocks to create Windmills with", - "create.ponder.sail_frame.text_2": "UNLOCALIZED: They will attach to blocks and each other without the need of Super Glue or Chassis Blocks", + "create.ponder.sail_frame.header": "Сборки Мельниц при помощи Рам Парусов", + "create.ponder.sail_frame.text_1": "Рамы Парусов - удобные блоки для создания Мельниц", + "create.ponder.sail_frame.text_2": "Они будут прикрепляться к блокам и друг к другу без использования Суперклея или Блоков Шасси", - "create.ponder.sequenced_gearshift.header": "UNLOCALIZED: Controlling Rotational Speed using Sequenced Gearshifts", - "create.ponder.sequenced_gearshift.text_1": "UNLOCALIZED: Seq. Gearshifts relay rotation by following a timed list of instructions", - "create.ponder.sequenced_gearshift.text_2": "UNLOCALIZED: Right-click it to open the Configuration UI", - "create.ponder.sequenced_gearshift.text_3": "UNLOCALIZED: Upon receiving a Redstone Signal, it will start running its configured sequence", - "create.ponder.sequenced_gearshift.text_4": "UNLOCALIZED: Once finished, it waits for the next Redstone Signal and starts over", - "create.ponder.sequenced_gearshift.text_5": "UNLOCALIZED: A redstone comparator can be used to read the current progress", + "create.ponder.sequenced_gearshift.header": "Управлении Скоростью Вращения при помощи Последовательных Переключатель Передач", + "create.ponder.sequenced_gearshift.text_1": "Посл. Перекл. Передач передают вращение следуя временному списку инструкций", + "create.ponder.sequenced_gearshift.text_2": "ПКМ, чтобы отрыть Интерфейс настройки", + "create.ponder.sequenced_gearshift.text_3": "При получении Редстоун Сигнала, он начнёт выполнять заданные инструкции", + "create.ponder.sequenced_gearshift.text_4": "По завершению он будет дождётся следующего Редстоун Сигнала и начнёт сначала", + "create.ponder.sequenced_gearshift.text_5": "Редстоун компаратор можно использовать для считывания текущего прогресса", - "create.ponder.shaft.header": "UNLOCALIZED: Relaying rotational force using Shafts", - "create.ponder.shaft.text_1": "UNLOCALIZED: Shafts will relay rotation in a straight line.", + "create.ponder.shaft.header": "Передаче Вращения при помощи Валов", + "create.ponder.shaft.text_1": "Валы передают вращение по прямой", - "create.ponder.shaft_casing.header": "UNLOCALIZED: Encasing Shafts", - "create.ponder.shaft_casing.text_1": "UNLOCALIZED: Brass or Andesite Casing can be used to decorate Shafts", + "create.ponder.shaft_casing.header": "Обрамлении Валов", + "create.ponder.shaft_casing.text_1": "Латунный или Андезитовый Корпус можно использовать для декорации Валов", - "create.ponder.smart_chute.header": "UNLOCALIZED: Filtering Items using Smart Chutes", - "create.ponder.smart_chute.text_1": "UNLOCALIZED: Smart Chutes are vertical chutes with additional control", - "create.ponder.smart_chute.text_2": "UNLOCALIZED: Items in the filter slot specify what exactly they can extract and transfer", - "create.ponder.smart_chute.text_3": "UNLOCALIZED: Use the Mouse Wheel to specify the extracted stack size", - "create.ponder.smart_chute.text_4": "UNLOCALIZED: Redstone power will prevent Smart Chutes from acting.", + "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_pipe.header": "UNLOCALIZED: Controlling Fluid flow using Smart Pipes", "create.ponder.smart_pipe.text_1": "UNLOCALIZED: Smart pipes can help control flows by fluid type", @@ -2166,10 +2166,10 @@ "create.ponder.smart_pipe.text_3": "UNLOCALIZED: Simply Right-Click their filter slot with any item containing the desired fluid", "create.ponder.smart_pipe.text_4": "UNLOCALIZED: When placed further down a pipe network, smart pipes will only let matching fluids continue", - "create.ponder.speedometer.header": "UNLOCALIZED: Monitoring Kinetic information using the Speedometer", - "create.ponder.speedometer.text_1": "UNLOCALIZED: The Speedometer displays the current Speed of the attached components", - "create.ponder.speedometer.text_2": "UNLOCALIZED: When wearing Engineers' Goggles, the player can get more detailed information from the Gauge", - "create.ponder.speedometer.text_3": "UNLOCALIZED: Comparators can emit analog Restone Signals relative to the Speedometer's measurements", + "create.ponder.speedometer.header": "Мониторинге Кинетической информации при помощи Спидометра", + "create.ponder.speedometer.text_1": "Спидометры отображают текущую Скорость присоединённых компонентов", + "create.ponder.speedometer.text_2": "При ношении Инженерных Очков игрок может получить более полную информацию от Прибора", + "create.ponder.speedometer.text_3": "Компараторы могут испускать аналоговый Редстоун Сигнал относительно измерений Спидометра", "create.ponder.spout_filling.header": "UNLOCALIZED: Filling Items using a Spout", "create.ponder.spout_filling.text_1": "UNLOCALIZED: The Spout can fill fluid holding items provided beneath it", @@ -2179,36 +2179,36 @@ "create.ponder.spout_filling.text_5": "UNLOCALIZED: When items are provided on a belt...", "create.ponder.spout_filling.text_6": "UNLOCALIZED: The Spout will hold and process them automatically", - "create.ponder.stabilized_bearings.header": "UNLOCALIZED: Stabilized Contraptions", - "create.ponder.stabilized_bearings.text_1": "UNLOCALIZED: Whenever Mechanical Bearings are themselves part of a moving Structure..", - "create.ponder.stabilized_bearings.text_2": "UNLOCALIZED: ..they will attempt to keep themselves upright", - "create.ponder.stabilized_bearings.text_3": "UNLOCALIZED: Once again, the bearing will attach to the block in front of it", - "create.ponder.stabilized_bearings.text_4": "UNLOCALIZED: As a result, the entire sub-Contraption will stay upright", + "create.ponder.stabilized_bearings.header": "Стабилизации Штуковин", + "create.ponder.stabilized_bearings.text_1": "Когда Межанические Подшипники являются частью двигающейся Структуры...", + "create.ponder.stabilized_bearings.text_2": "...они будут пытаться держаться ровно", + "create.ponder.stabilized_bearings.text_3": "Опять же, подшипники присоединяют блоки перед ними", + "create.ponder.stabilized_bearings.text_4": "И в результате целая под-Структура будет держаться ровно", - "create.ponder.sticker.header": "UNLOCALIZED: Attaching blocks using the Sticker", - "create.ponder.sticker.text_1": "UNLOCALIZED: Stickers are ideal for Redstone-controlled block attachment", - "create.ponder.sticker.text_2": "UNLOCALIZED: Upon receiving a signal, it will toggle its state", - "create.ponder.sticker.text_3": "UNLOCALIZED: If it is now moved in a contraption, the block will move with it", - "create.ponder.sticker.text_4": "UNLOCALIZED: Toggled once again, the block is no longer attached", + "create.ponder.sticker.header": "Прикреплении блоков при помощи Липучки", + "create.ponder.sticker.text_1": "Липучки идеально подходят для Редстоун-управляемого присоединения блоков", + "create.ponder.sticker.text_2": "При получении сигнала они переключают своё состояние", + "create.ponder.sticker.text_3": "Если он теперь движется в штуковине, то блок будет двигаться с ним", + "create.ponder.sticker.text_4": "При повторном переключании блок больше не будет прикреплён", - "create.ponder.stressometer.header": "UNLOCALIZED: Monitoring Kinetic information using the Stressometer", - "create.ponder.stressometer.text_1": "UNLOCALIZED: The Stressometer displays the current Stress Capacity of the attached kinetic network", - "create.ponder.stressometer.text_2": "UNLOCALIZED: When wearing Engineers' Goggles, the player can get more detailed information from the Gauge", - "create.ponder.stressometer.text_3": "UNLOCALIZED: Comparators can emit analog Restone Signals relative to the Stressometer's measurements", + "create.ponder.stressometer.header": "Мониторинге Кинетической Информации при помощи Стрессометра", + "create.ponder.stressometer.text_1": "Стрессометр отображает текущую Допустимую Нагрузку присоединённой кинетической сети", + "create.ponder.stressometer.text_2": "При ношении Инженерных очков игрок может получить более полную информацию от Прибора", + "create.ponder.stressometer.text_3": "Компараторы могут испускать аналоговый Редстоун Сигнал относительно измерений Стрессометра", - "create.ponder.super_glue.header": "UNLOCALIZED: Attaching blocks using Super Glue", - "create.ponder.super_glue.text_1": "UNLOCALIZED: Super Glue can be used between any two blocks", - "create.ponder.super_glue.text_2": "UNLOCALIZED: The attached blocks will move together when assembled into a Contraption", - "create.ponder.super_glue.text_3": "UNLOCALIZED: Whenever Super Glue is held in the off-hand...", - "create.ponder.super_glue.text_4": "UNLOCALIZED: ...added blocks will be glued to the face they were placed on automatically", - "create.ponder.super_glue.text_5": "UNLOCALIZED: Super Glue can be removed with Left-Click", + "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_5": "Суперклей можно удалить Левым Кликом", - "create.ponder.valve_handle.header": "UNLOCALIZED: Generating Rotational Force using Valve Handles", - "create.ponder.valve_handle.text_1": "UNLOCALIZED: Valve Handles can be used by players to apply rotational force manually", - "create.ponder.valve_handle.text_2": "UNLOCALIZED: Hold Right-Click to rotate it Counter-Clockwise", - "create.ponder.valve_handle.text_3": "UNLOCALIZED: Its conveyed speed is slow and precise", - "create.ponder.valve_handle.text_4": "UNLOCALIZED: Sneak and Hold Right-Click to rotate it Clockwise", - "create.ponder.valve_handle.text_5": "UNLOCALIZED: Valve handles can be dyed for aesthetic purposes", + "create.ponder.valve_handle.header": "Генерации Силы Вращения при помощи Вентилей", + "create.ponder.valve_handle.text_1": "Игроки могут использовать Вентили для применения силы вращения вручную", + "create.ponder.valve_handle.text_2": "Держите ПКМ для вращения его Против Часовой Стрелки", + "create.ponder.valve_handle.text_3": "Передаваемая ими скорость медленная и точная", + "create.ponder.valve_handle.text_4": "Держите ПКМ Крадучись для вращения его По Часовой Стрелке", + "create.ponder.valve_handle.text_5": "Вентили можно окрашивать в эстетических целях", "create.ponder.valve_pipe.header": "UNLOCALIZED: Controlling Fluid flow using Valves", "create.ponder.valve_pipe.text_1": "UNLOCALIZED: Valve pipes help control fluids propagating through pipe networks", @@ -2216,46 +2216,46 @@ "create.ponder.valve_pipe.text_3": "UNLOCALIZED: Given Rotational Force in the opening direction, the valve will open up", "create.ponder.valve_pipe.text_4": "UNLOCALIZED: It can be closed again by reversing the input rotation", - "create.ponder.water_wheel.header": "UNLOCALIZED: Generating Rotational Force using Water Wheels", - "create.ponder.water_wheel.text_1": "UNLOCALIZED: Water Wheels draw force from adjacent Water Currents", - "create.ponder.water_wheel.text_2": "UNLOCALIZED: The more faces are powered, the faster the Water Wheel will rotate", - "create.ponder.water_wheel.text_3": "UNLOCALIZED: The Wheels' blades should be oriented against the flow", - "create.ponder.water_wheel.text_4": "UNLOCALIZED: Facing the opposite way, they will not be as effective", + "create.ponder.water_wheel.header": "Генерации Силы Вращения при помощи Водяных Колёс", + "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": "UNLOCALIZED: Using Weighted Ejectors", - "create.ponder.weighted_ejector.text_1": "UNLOCALIZED: Sneak and Right-Click holding an Ejector to select its target location", - "create.ponder.weighted_ejector.text_10": "UNLOCALIZED: It is now limited to this stack size, and only activates when its held stack reaches this amount", - "create.ponder.weighted_ejector.text_11": "UNLOCALIZED: Other Entities will always trigger an Ejector when stepping on it", - "create.ponder.weighted_ejector.text_2": "UNLOCALIZED: The placed ejector will now launch objects to the marked location", - "create.ponder.weighted_ejector.text_3": "UNLOCALIZED: A valid target can be at any height or distance within range", - "create.ponder.weighted_ejector.text_4": "UNLOCALIZED: They cannot however be off to a side", - "create.ponder.weighted_ejector.text_5": "UNLOCALIZED: If no valid Target was selected, it will simply target the block directly in front", - "create.ponder.weighted_ejector.text_6": "UNLOCALIZED: Supply Rotational Force in order to charge it up", - "create.ponder.weighted_ejector.text_7": "UNLOCALIZED: Items placed on the ejector cause it to trigger", - "create.ponder.weighted_ejector.text_8": "UNLOCALIZED: If Inventories are targeted, the ejector will wait until there is space", - "create.ponder.weighted_ejector.text_9": "UNLOCALIZED: Using the Wrench, a required Stack Size can be configured", + "create.ponder.weighted_ejector.header": "Использовании Взвешенных Катапульт", + "create.ponder.weighted_ejector.text_1": "ПКМ Крадучись и держа Катапульту, чтобы выбрать место цели", + "create.ponder.weighted_ejector.text_10": "Теперь она ограниченна этим размера стака и будет активироваться только тогда, когда удерживаемый стак достигнет этого количества", + "create.ponder.weighted_ejector.text_11": "Другие Сущности, встав на Катапульту, будут всегда активировать её", + "create.ponder.weighted_ejector.text_2": "Установленная Катапульта будет запускать объекты до отмеченного места", + "create.ponder.weighted_ejector.text_3": "Подходящая цель может быть на любой дистанции и высоте в радиусе", + "create.ponder.weighted_ejector.text_4": "Однако они не могут быть сбоку", + "create.ponder.weighted_ejector.text_5": "Если не было выбрано подходящей Цели, она будет целиться в блок перед ней", + "create.ponder.weighted_ejector.text_6": "Предоставьте Силу Вращения, чтобы зарядить её", + "create.ponder.weighted_ejector.text_7": "Установка предметов на Катапульту вызывают её срабатывание", + "create.ponder.weighted_ejector.text_8": "Если Инвентарь выбран целью, то Катапульта будет ждать, пока в нём не появится место.", + "create.ponder.weighted_ejector.text_9": "При помощи Ключа можно настроить необходимый размер стака", - "create.ponder.weighted_ejector_redstone.header": "UNLOCALIZED: Controlling Weighted Ejectors with Redstone", - "create.ponder.weighted_ejector_redstone.text_1": "UNLOCALIZED: When powered by Redstone, Ejectors will not activate", - "create.ponder.weighted_ejector_redstone.text_2": "UNLOCALIZED: Furthermore, Observers can detect when Ejectors activate", + "create.ponder.weighted_ejector_redstone.header": "Управлении Взвешенными Катапультами Редстоуном", + "create.ponder.weighted_ejector_redstone.text_1": "При подаче Редстоун Сигнала Катапульты не будут активироваться", + "create.ponder.weighted_ejector_redstone.text_2": "Кроме того, Наблюдатели могут определить, когда Катапульты срабатывают", - "create.ponder.weighted_ejector_tunnel.header": "UNLOCALIZED: Splitting item stacks using Weighted Ejectors", - "create.ponder.weighted_ejector_tunnel.text_1": "UNLOCALIZED: Combined with Brass Tunnels, Ejectors can split item stacks by specific amounts", - "create.ponder.weighted_ejector_tunnel.text_2": "UNLOCALIZED: First, configure the Brass Tunnel to 'Prefer Nearest', in order to prioritize its side output", - "create.ponder.weighted_ejector_tunnel.text_3": "UNLOCALIZED: The Stack Size set on the Ejector now determines the amount to be split off", - "create.ponder.weighted_ejector_tunnel.text_4": "UNLOCALIZED: While a new stack of the configured size exits the side output...", - "create.ponder.weighted_ejector_tunnel.text_5": "UNLOCALIZED: ...the remainder will continue on its path", + "create.ponder.weighted_ejector_tunnel.header": "Разделении Стаков Предметов при помощи Взвешенных Катапульт", + "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.windmill_source.header": "UNLOCALIZED: Generating Rotational Force using Windmill Bearings", - "create.ponder.windmill_source.text_1": "UNLOCALIZED: Windmill Bearings attach to the block in front of them", - "create.ponder.windmill_source.text_2": "UNLOCALIZED: If enough Sail-like blocks are attached to the block, it can act as a Windmill", - "create.ponder.windmill_source.text_3": "UNLOCALIZED: Activated with Right-Click, the Windmill Bearing will start providing Rotational Force", - "create.ponder.windmill_source.text_4": "UNLOCALIZED: The Amount of Sail Blocks determine its Rotation Speed", - "create.ponder.windmill_source.text_5": "UNLOCALIZED: Use a Wrench to configure its rotation direction", - "create.ponder.windmill_source.text_6": "UNLOCALIZED: Right-click the Bearing anytime to stop and edit the Structure again", + "create.ponder.windmill_source.header": "Генерации Силы Вращения при помощи Подшипников Ветряной Мельницы", + "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_5": "Используйте Ключ, чтобы настроить направление Вращения", + "create.ponder.windmill_source.text_6": "Правый Клик по Подшипнику в любое время, чтобы остановить его и отредактировать Структуру", - "create.ponder.windmill_structure.header": "UNLOCALIZED: Windmill Contraptions", - "create.ponder.windmill_structure.text_1": "UNLOCALIZED: Any Structure can count as a valid Windmill, as long as it contains at least 8 sail-like Blocks.", + "create.ponder.windmill_structure.header": "Штуковинах Мельницах", + "create.ponder.windmill_structure.text_1": "Любая Структура может считаться Мельницей, пока она содержит как минимум 8 парусоподобных Блоков", "_": "Thank you for translating Create!" From 66086f667575f752f01bc2c456944e26753e8d60 Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Tue, 6 Jul 2021 13:25:25 +0200 Subject: [PATCH 027/118] Facing down - Ensured players really want to place a water wheel vertically --- .../waterwheel/WaterWheelBlock.java | 44 ++++++++++++++----- 1 file changed, 32 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/waterwheel/WaterWheelBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/waterwheel/WaterWheelBlock.java index b07b69aa3..86d267b38 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/waterwheel/WaterWheelBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/waterwheel/WaterWheelBlock.java @@ -18,6 +18,7 @@ import net.minecraft.block.BlockRenderType; import net.minecraft.block.BlockState; import net.minecraft.block.Blocks; import net.minecraft.block.BubbleColumnBlock; +import net.minecraft.entity.player.PlayerEntity; import net.minecraft.fluid.FluidState; import net.minecraft.item.BlockItemUseContext; import net.minecraft.tileentity.TileEntity; @@ -88,7 +89,6 @@ public class WaterWheelBlock extends DirectionalKineticBlock implements ITE 0 ^ !clockwise ? -flow.y * clockwiseMultiplier : -flow.y; } - if (wf.getAxis() == Axis.Y) { if (side.getAxis() == Axis.Z) flowStrength = flow.x < 0 ^ !clockwise ? flow.x * clockwiseMultiplier : flow.x; @@ -141,7 +140,8 @@ public class WaterWheelBlock extends DirectionalKineticBlock implements ITE tolerance) + facing = Direction.DOWN; + else if (Vector3d.of(Direction.UP.getDirectionVec()) + .dotProduct(lookVec.normalize()) > tolerance) + facing = Direction.UP; + else + facing = horizontalFacing; + + } + + return getDefaultState().with(FACING, sneaking ? facing.getOpposite() : facing); } @Override From 8f234b7fa8ee9d7236cea2dbefc4aa1fe5a8014c Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Tue, 6 Jul 2021 15:04:22 +0200 Subject: [PATCH 028/118] Dyeable Nixies, Part I --- src/generated/resources/.cache/cache | 78 ++++++++++++---- .../create/blockstates/black_nixie_tube.json | 38 ++++++++ .../create/blockstates/blue_nixie_tube.json | 38 ++++++++ .../create/blockstates/brown_nixie_tube.json | 38 ++++++++ .../create/blockstates/cyan_nixie_tube.json | 38 ++++++++ .../create/blockstates/gray_nixie_tube.json | 38 ++++++++ .../create/blockstates/green_nixie_tube.json | 38 ++++++++ .../blockstates/light_blue_nixie_tube.json | 38 ++++++++ .../blockstates/light_gray_nixie_tube.json | 38 ++++++++ .../create/blockstates/lime_nixie_tube.json | 38 ++++++++ .../blockstates/magenta_nixie_tube.json | 38 ++++++++ .../assets/create/blockstates/nixie_tube.json | 16 ++-- .../create/blockstates/pink_nixie_tube.json | 38 ++++++++ .../create/blockstates/purple_nixie_tube.json | 38 ++++++++ .../create/blockstates/red_nixie_tube.json | 38 ++++++++ .../create/blockstates/white_nixie_tube.json | 38 ++++++++ .../create/blockstates/yellow_nixie_tube.json | 38 ++++++++ .../resources/assets/create/lang/en_ud.json | 15 ++++ .../resources/assets/create/lang/en_us.json | 15 ++++ .../assets/create/lang/unfinished/de_de.json | 17 +++- .../assets/create/lang/unfinished/es_es.json | 17 +++- .../assets/create/lang/unfinished/es_mx.json | 17 +++- .../assets/create/lang/unfinished/fr_fr.json | 17 +++- .../assets/create/lang/unfinished/it_it.json | 17 +++- .../assets/create/lang/unfinished/ja_jp.json | 17 +++- .../assets/create/lang/unfinished/ko_kr.json | 17 +++- .../assets/create/lang/unfinished/nl_nl.json | 17 +++- .../assets/create/lang/unfinished/pl_pl.json | 17 +++- .../assets/create/lang/unfinished/pt_br.json | 17 +++- .../assets/create/lang/unfinished/ru_ru.json | 17 +++- .../assets/create/lang/unfinished/zh_cn.json | 17 +++- .../assets/create/lang/unfinished/zh_tw.json | 17 +++- .../create/models/block/black_nixie_tube.json | 3 + .../create/models/block/blue_nixie_tube.json | 3 + .../create/models/block/brown_nixie_tube.json | 3 + .../create/models/block/cyan_nixie_tube.json | 3 + .../create/models/block/gray_nixie_tube.json | 3 + .../create/models/block/green_nixie_tube.json | 3 + .../models/block/light_blue_nixie_tube.json | 3 + .../models/block/light_gray_nixie_tube.json | 3 + .../create/models/block/lime_nixie_tube.json | 3 + .../models/block/magenta_nixie_tube.json | 3 + .../create/models/block/nixie_tube.json | 3 + .../create/models/block/pink_nixie_tube.json | 3 + .../models/block/purple_nixie_tube.json | 3 + .../create/models/block/red_nixie_tube.json | 3 + .../create/models/block/white_nixie_tube.json | 3 + .../models/block/yellow_nixie_tube.json | 3 + .../loot_tables/blocks/black_nixie_tube.json | 19 ++++ .../loot_tables/blocks/blue_nixie_tube.json | 19 ++++ .../loot_tables/blocks/brown_nixie_tube.json | 19 ++++ .../loot_tables/blocks/cyan_nixie_tube.json | 19 ++++ .../loot_tables/blocks/gray_nixie_tube.json | 19 ++++ .../loot_tables/blocks/green_nixie_tube.json | 19 ++++ .../blocks/light_blue_nixie_tube.json | 19 ++++ .../blocks/light_gray_nixie_tube.json | 19 ++++ .../loot_tables/blocks/lime_nixie_tube.json | 19 ++++ .../blocks/magenta_nixie_tube.json | 19 ++++ .../loot_tables/blocks/pink_nixie_tube.json | 19 ++++ .../loot_tables/blocks/purple_nixie_tube.json | 19 ++++ .../loot_tables/blocks/red_nixie_tube.json | 19 ++++ .../loot_tables/blocks/white_nixie_tube.json | 19 ++++ .../loot_tables/blocks/yellow_nixie_tube.json | 19 ++++ .../java/com/simibubi/create/AllBlocks.java | 32 +++++-- .../java/com/simibubi/create/AllItems.java | 10 +-- .../com/simibubi/create/AllTileEntities.java | 3 +- .../block/redstone/NixieTubeBlock.java | 89 +++++++++++++------ .../block/redstone/NixieTubeGenerator.java | 4 +- .../block/redstone/NixieTubeRenderer.java | 48 +++++++--- .../advancement/AllAdvancements.java | 4 +- .../data/recipe/StandardRecipeGen.java | 2 +- .../ponder/content/PonderIndex.java | 6 +- 72 files changed, 1350 insertions(+), 96 deletions(-) create mode 100644 src/generated/resources/assets/create/blockstates/black_nixie_tube.json create mode 100644 src/generated/resources/assets/create/blockstates/blue_nixie_tube.json create mode 100644 src/generated/resources/assets/create/blockstates/brown_nixie_tube.json create mode 100644 src/generated/resources/assets/create/blockstates/cyan_nixie_tube.json create mode 100644 src/generated/resources/assets/create/blockstates/gray_nixie_tube.json create mode 100644 src/generated/resources/assets/create/blockstates/green_nixie_tube.json create mode 100644 src/generated/resources/assets/create/blockstates/light_blue_nixie_tube.json create mode 100644 src/generated/resources/assets/create/blockstates/light_gray_nixie_tube.json create mode 100644 src/generated/resources/assets/create/blockstates/lime_nixie_tube.json create mode 100644 src/generated/resources/assets/create/blockstates/magenta_nixie_tube.json create mode 100644 src/generated/resources/assets/create/blockstates/pink_nixie_tube.json create mode 100644 src/generated/resources/assets/create/blockstates/purple_nixie_tube.json create mode 100644 src/generated/resources/assets/create/blockstates/red_nixie_tube.json create mode 100644 src/generated/resources/assets/create/blockstates/white_nixie_tube.json create mode 100644 src/generated/resources/assets/create/blockstates/yellow_nixie_tube.json create mode 100644 src/generated/resources/assets/create/models/block/black_nixie_tube.json create mode 100644 src/generated/resources/assets/create/models/block/blue_nixie_tube.json create mode 100644 src/generated/resources/assets/create/models/block/brown_nixie_tube.json create mode 100644 src/generated/resources/assets/create/models/block/cyan_nixie_tube.json create mode 100644 src/generated/resources/assets/create/models/block/gray_nixie_tube.json create mode 100644 src/generated/resources/assets/create/models/block/green_nixie_tube.json create mode 100644 src/generated/resources/assets/create/models/block/light_blue_nixie_tube.json create mode 100644 src/generated/resources/assets/create/models/block/light_gray_nixie_tube.json create mode 100644 src/generated/resources/assets/create/models/block/lime_nixie_tube.json create mode 100644 src/generated/resources/assets/create/models/block/magenta_nixie_tube.json create mode 100644 src/generated/resources/assets/create/models/block/nixie_tube.json create mode 100644 src/generated/resources/assets/create/models/block/pink_nixie_tube.json create mode 100644 src/generated/resources/assets/create/models/block/purple_nixie_tube.json create mode 100644 src/generated/resources/assets/create/models/block/red_nixie_tube.json create mode 100644 src/generated/resources/assets/create/models/block/white_nixie_tube.json create mode 100644 src/generated/resources/assets/create/models/block/yellow_nixie_tube.json create mode 100644 src/generated/resources/data/create/loot_tables/blocks/black_nixie_tube.json create mode 100644 src/generated/resources/data/create/loot_tables/blocks/blue_nixie_tube.json create mode 100644 src/generated/resources/data/create/loot_tables/blocks/brown_nixie_tube.json create mode 100644 src/generated/resources/data/create/loot_tables/blocks/cyan_nixie_tube.json create mode 100644 src/generated/resources/data/create/loot_tables/blocks/gray_nixie_tube.json create mode 100644 src/generated/resources/data/create/loot_tables/blocks/green_nixie_tube.json create mode 100644 src/generated/resources/data/create/loot_tables/blocks/light_blue_nixie_tube.json create mode 100644 src/generated/resources/data/create/loot_tables/blocks/light_gray_nixie_tube.json create mode 100644 src/generated/resources/data/create/loot_tables/blocks/lime_nixie_tube.json create mode 100644 src/generated/resources/data/create/loot_tables/blocks/magenta_nixie_tube.json create mode 100644 src/generated/resources/data/create/loot_tables/blocks/pink_nixie_tube.json create mode 100644 src/generated/resources/data/create/loot_tables/blocks/purple_nixie_tube.json create mode 100644 src/generated/resources/data/create/loot_tables/blocks/red_nixie_tube.json create mode 100644 src/generated/resources/data/create/loot_tables/blocks/white_nixie_tube.json create mode 100644 src/generated/resources/data/create/loot_tables/blocks/yellow_nixie_tube.json diff --git a/src/generated/resources/.cache/cache b/src/generated/resources/.cache/cache index bcf6a718a..f95b26aed 100644 --- a/src/generated/resources/.cache/cache +++ b/src/generated/resources/.cache/cache @@ -23,10 +23,12 @@ e555e3c2b2d3f01440e48db4ba88f7e00fd99b6f assets/create/blockstates/basin.json f25693a9429f6337149ff24f27900dc4eb82a7c2 assets/create/blockstates/belt.json cf9045eb16e5299a1d917c4cb536289f49411276 assets/create/blockstates/birch_window.json 94a1a91403eb4b035fec48071e7fcae57a8a6abd assets/create/blockstates/birch_window_pane.json +8d257089491a1f6e87544242c9fe9af0127b4f88 assets/create/blockstates/black_nixie_tube.json e0f1e44c9bce4a7478592cf3a8ee7b91d9083d65 assets/create/blockstates/black_sail.json 58b07d2af6030342f0354f6d3fd0ee128d2d74b4 assets/create/blockstates/black_seat.json a71ddf3291bd13d7877f2fe32c42f50407f99afb assets/create/blockstates/black_valve_handle.json 923aeb2a556f67bc0526f237dd97af2d37b4c9f1 assets/create/blockstates/blaze_burner.json +b619f127c38e9ffdb4e45bb32e5cea35863622f3 assets/create/blockstates/blue_nixie_tube.json ec2ab87734acc209e6be3bc4898b1199f819bfd3 assets/create/blockstates/blue_sail.json 4854d1ef52130a7887aecc60bcaffbd66f0871a8 assets/create/blockstates/blue_seat.json 9d7341a5cae5d47788c595167946dfb6441cebd1 assets/create/blockstates/blue_valve_handle.json @@ -36,6 +38,7 @@ b8dd6e505943e06706d0718ece620ab3cf943650 assets/create/blockstates/brass_casing. 288bad07593a8a2c8efaf44bba0ffb0011d36cd3 assets/create/blockstates/brass_encased_shaft.json adfbd6cc5e44a0f431180aedbe65a19428299d8e assets/create/blockstates/brass_funnel.json 672eedcd3520c6d39603449165a23be9c612c620 assets/create/blockstates/brass_tunnel.json +9526a0758dcfda9fbbf75c01548e96bb5887a52f assets/create/blockstates/brown_nixie_tube.json 11ebdd9bd0815833e62ec1bea03a4cdd86ce00f3 assets/create/blockstates/brown_sail.json e81608346d43406ee72cae0f78b8bcfb37ba2d75 assets/create/blockstates/brown_seat.json 322289524c058fac66bbe76b4924c3b0c0c33b84 assets/create/blockstates/brown_valve_handle.json @@ -68,6 +71,7 @@ f0031f5e970b3d5695472ed384950b8631b015ed assets/create/blockstates/creative_moto fe2f78b94c20944399101e7369e2d43324297fb6 assets/create/blockstates/crushing_wheel.json a1dd6cb3daa97ea871290ef7b178d28b564ee2a2 assets/create/blockstates/crushing_wheel_controller.json b1126c191877cff86b4e2de83e1fcbd151451cb7 assets/create/blockstates/cuckoo_clock.json +d986774dc41e5f01c6f3ffd10765df94f196922d assets/create/blockstates/cyan_nixie_tube.json b496452f2f7dbbba385e1fc10b560ec266e4b5e7 assets/create/blockstates/cyan_sail.json 4de72f65bff4e5d9c8153fa3adeee6b61d6f912b assets/create/blockstates/cyan_seat.json 2c04d57e56849f243aec8a1e769574d24daac1e9 assets/create/blockstates/cyan_valve_handle.json @@ -174,9 +178,11 @@ a4b0337149cb0617cc60061477c7178d37dbb831 assets/create/blockstates/granite_cobbl d97fdea02187e63f6b63913357c79a18660d676d assets/create/blockstates/granite_cobblestone_stairs.json 2f29568407970ea0e3807e0553e0584d127a9014 assets/create/blockstates/granite_cobblestone_wall.json f8659e81cd2a623475a6a9aca59149e82de56b1c assets/create/blockstates/granite_pillar.json +4478ee1b4c7a17deea77ee0d1234a19725889671 assets/create/blockstates/gray_nixie_tube.json 5c40c4a27e1dec747a467dd251700c72a6ceb07d assets/create/blockstates/gray_sail.json a5ec5401ba9f3e102a2e1b35837f643847afbca4 assets/create/blockstates/gray_seat.json 5f17a5868616b33eb157965a661046cab7a1427f assets/create/blockstates/gray_valve_handle.json +747579dd8e635533c15208cec25afe445ff4774a assets/create/blockstates/green_nixie_tube.json 52b849faef96b8ab9d9d64a1518c8f299af057b8 assets/create/blockstates/green_sail.json 13059309684db0cc7a0f1f4fce2407cf06cce80a assets/create/blockstates/green_seat.json f4a0fc68e8daaa0a47cdc951ced4310057a874b0 assets/create/blockstates/green_valve_handle.json @@ -200,12 +206,15 @@ a4cfcdc038af0f93a58d88ea8860b34d73632ff4 assets/create/blockstates/layered_dolom 8535d628f8834be62cdf62ef4b60c2ce3a7af99f assets/create/blockstates/layered_scoria.json 419d7fffc5cbd392f10211afa8d17e3eb8df8380 assets/create/blockstates/layered_weathered_limestone.json 6a3c81d62c7c5a5fa2f4a1e239319d83875bbe55 assets/create/blockstates/lectern_controller.json +e0c8fc35bfa28f025bdc14085b01b179e36c9f96 assets/create/blockstates/light_blue_nixie_tube.json 029904f21970947a4423a6e0c8c65c4e02f2e8e6 assets/create/blockstates/light_blue_sail.json 2a0a8b1715700bf1e284ee57ef9f7f163c12f3ee assets/create/blockstates/light_blue_seat.json 9bee040558a6b24e21f837fc808e17fae1883e71 assets/create/blockstates/light_blue_valve_handle.json +745b940c71575afbfac1786ffe1a23dcb62d5e70 assets/create/blockstates/light_gray_nixie_tube.json 93537c4e2ab86218a777e7b000c3fcd55a80b1cd assets/create/blockstates/light_gray_sail.json d9a2551e001bb315d071bb9f1f013323a66a5d09 assets/create/blockstates/light_gray_seat.json 8bea8c86de8c218c8932eef140f0ed439e173156 assets/create/blockstates/light_gray_valve_handle.json +3bee155fee49a9f85403f018a51e60c0e536d51c assets/create/blockstates/lime_nixie_tube.json ba2c4e3ddafa3c89a72cc243b14e8518fab369aa assets/create/blockstates/lime_sail.json 1de3a88c003df03f5006e1bbaa0236589aba08ad assets/create/blockstates/lime_seat.json 179a3e68b9f2e289eafe0e98e768befbbf91c5c2 assets/create/blockstates/lime_valve_handle.json @@ -222,6 +231,7 @@ e7c7b952137c4cb615988ea59b9f14303c9a4dfe assets/create/blockstates/limestone_bri b7506b862d13b3f915c60d38bb7a20afc935f70a assets/create/blockstates/limestone_pillar.json 69790737767e06f000c7824749c46664a123160e assets/create/blockstates/linear_chassis.json 07bae932a163b81f8749f98287b4fb4949fe0b8b assets/create/blockstates/lit_blaze_burner.json +e99e9c5cf03334a48d9d071e1590bc8f286d3cf6 assets/create/blockstates/magenta_nixie_tube.json 85a58ac539775f90903d9ce66374f3f2ffd4fecf assets/create/blockstates/magenta_sail.json 84c494d24cc58af274fdd054896c680e8095d2d0 assets/create/blockstates/magenta_seat.json 3bfce5016e5c929b74368dc2d734e62ae34587a4 assets/create/blockstates/magenta_valve_handle.json @@ -251,7 +261,7 @@ a3ae5fb61cb07ae6fcb78ba68435bda8c31d4430 assets/create/blockstates/mossy_granite 3feafb33a6ba03687a521c1b196536c0427fff77 assets/create/blockstates/mossy_weathered_limestone.json b1126c191877cff86b4e2de83e1fcbd151451cb7 assets/create/blockstates/mysterious_cuckoo_clock.json 8d56251190c94204fa238ff32734a0761273669f assets/create/blockstates/natural_scoria.json -0f7635a4fec6961ec09788b3c5e3992ed1fdfde7 assets/create/blockstates/nixie_tube.json +f090a023bebb8590ed609d0c624277703b4699a4 assets/create/blockstates/nixie_tube.json 36e46e65003a8d0b8555fe5e8f8dc980d6559bc5 assets/create/blockstates/nozzle.json cf60989f63f02067fc4e4ad25033ac83167cdeb0 assets/create/blockstates/oak_window.json 4a796509c3953171f04f957351282205840b3760 assets/create/blockstates/oak_window_pane.json @@ -306,6 +316,7 @@ cb23aef25f3106b06c8fa8f152c638bb0d2185d8 assets/create/blockstates/paved_weather d62b0992cec1de45dad1f2c273132225f4ef33a0 assets/create/blockstates/paved_weathered_limestone_stairs.json e29e245d06c46dac94fcd0e01a9bf7fa8e02fb87 assets/create/blockstates/paved_weathered_limestone_wall.json 005cc195712aca252326ae8239ed0caf9a69a314 assets/create/blockstates/peculiar_bell.json +06ad2ce2f1730488d51daf12b4a985c86d43bbb4 assets/create/blockstates/pink_nixie_tube.json 30971f2f76fe56f144178c33ad6bde5fc9fb61c3 assets/create/blockstates/pink_sail.json 919a79e4a4a5fab0aac3ef48e1c786017d6aa001 assets/create/blockstates/pink_seat.json 471a3bb474a0ae0453143888d561256cce894e3f assets/create/blockstates/pink_valve_handle.json @@ -340,10 +351,12 @@ ad721e3911f48c61c3639edac1896680a31451ff assets/create/blockstates/polished_weat e8b0a401c10d1ba67ed71ba31bd5f9bc28571b65 assets/create/blockstates/powered_toggle_latch.json 3a739f9d4276828d83f2d2750bf3227c87bcd438 assets/create/blockstates/pulley_magnet.json 469e430d96cb0a5e1aaf6b7cc5d401d488c9e600 assets/create/blockstates/pulse_repeater.json +83ad917bb7f528e68d64f3859b3bf1236080d454 assets/create/blockstates/purple_nixie_tube.json d06cd9a1101b18d306a786320aab12018b1325d6 assets/create/blockstates/purple_sail.json 92957119abd5fbcca36a113b2a80255fd70fc303 assets/create/blockstates/purple_seat.json 61035f8afe75ff7bbd291da5d8690bcbebe679eb assets/create/blockstates/purple_valve_handle.json 4439fc83a8c7370ab44b211a3fd48abde20a4728 assets/create/blockstates/radial_chassis.json +3735f396cf8e8bab0793ce2bfa281b29af73919e assets/create/blockstates/red_nixie_tube.json 45877c4d90a7185c2f304edbd67379d800920439 assets/create/blockstates/red_sail.json da1b08387af7afa0855ee8d040f620c01f20660a assets/create/blockstates/red_seat.json 722fc77bbf387af8a4016e42cbf9501d2b968881 assets/create/blockstates/red_valve_handle.json @@ -400,31 +413,33 @@ fd7a9c7095372485081436c91489cadb2b0c514e assets/create/blockstates/weathered_lim dfa5662bfd5a70bcd87673b1c40bf9106d5e2365 assets/create/blockstates/weathered_limestone_cobblestone_wall.json c77b46d8b459e5c7cc495393546f3fcca8a1fa1d assets/create/blockstates/weathered_limestone_pillar.json c838c0792511ca2e14493b40032bb1370fac588a assets/create/blockstates/weighted_ejector.json +aef042718ae54973cbafdb4507c32944d722e99d assets/create/blockstates/white_nixie_tube.json 512bf17c9ea309b1f7da54440f923530d25e467c assets/create/blockstates/white_sail.json 4647010162eb4c350fad236d860317eaa1884c77 assets/create/blockstates/white_seat.json 89000903d0ab8139e919abea7aa0361b34c24e55 assets/create/blockstates/white_valve_handle.json c4cd1131113667da0180898b5db3ebad609db8ba assets/create/blockstates/windmill_bearing.json d4f804f2818376950ef28fc8d6250419f4e12218 assets/create/blockstates/wooden_bracket.json +de1557d79eebf1cd469d098639cd6b5518b52b61 assets/create/blockstates/yellow_nixie_tube.json e03c48512967845fce09d84b955d3bc7b480fedc assets/create/blockstates/yellow_sail.json a3a11524cd3515fc01d905767b4b7ea782adaf03 assets/create/blockstates/yellow_seat.json 6801fa1f466f172700e573e5b8ee8ee5f9ca4583 assets/create/blockstates/yellow_valve_handle.json 7f39521b211441f5c3e06d60c5978cebe16cacfb assets/create/blockstates/zinc_block.json b7181bcd8182b2f17088e5aa881f374c9c65470c assets/create/blockstates/zinc_ore.json -a882a728871c8ecdd2d770f0a1b966bc2ed273d7 assets/create/lang/en_ud.json -15548ffa979fd01f90977502cda07ced1a599505 assets/create/lang/en_us.json -563389d30c2837ec3579e9b1f7d90ab3be23da5e assets/create/lang/unfinished/de_de.json -b954db488cad0cbf25e8c1916e326caf28187b62 assets/create/lang/unfinished/es_es.json -b3d34fddc0be87a9a485d215efc989b45dca8f52 assets/create/lang/unfinished/es_mx.json -882c93b17de0ebfb2c09ed1abf183d0aa1956f42 assets/create/lang/unfinished/fr_fr.json -e1c09d72895f253b4eb1a32a5b3bddadff6fae69 assets/create/lang/unfinished/it_it.json -2c48d31ee0bd03f99e656e450deae529881b1b76 assets/create/lang/unfinished/ja_jp.json -b406848e8735a9ba2ba966ba66bc55a6679a8267 assets/create/lang/unfinished/ko_kr.json -4d2683c83ccd02e5f9ccb924e5895b5b12704c84 assets/create/lang/unfinished/nl_nl.json -67dd006a5965872a731944de028ac4bd24e594b6 assets/create/lang/unfinished/pl_pl.json -e89d828bf5d66b9c08e83c3870dc9fc8bcd35ca3 assets/create/lang/unfinished/pt_br.json -fed8da438b93fb4657025bffa3ab0950f268a45e assets/create/lang/unfinished/ru_ru.json -e1937c326a4e7109d444cc721d478c66ce085798 assets/create/lang/unfinished/zh_cn.json -428639c35caf7d9c973b1b80d270ef125bd3a3b3 assets/create/lang/unfinished/zh_tw.json +f0d3897a272bda674b3da81ff96c9ff9d50a22d7 assets/create/lang/en_ud.json +44f4fa8dcf5b47c203a46d74637c8854b5ba701f assets/create/lang/en_us.json +6fc5076ae4e9fc523bbf073add657838ac938e8b assets/create/lang/unfinished/de_de.json +e3449092f901ff28d817ff9af3a9e0a8fbc43888 assets/create/lang/unfinished/es_es.json +8070fb996689e926239a0589944ab75cc0db647b assets/create/lang/unfinished/es_mx.json +501a34af8b7e9664a7a94a51e29e7df76e28f4f3 assets/create/lang/unfinished/fr_fr.json +d7be598329bef3b8562220b7de3c4fb2eb78442b assets/create/lang/unfinished/it_it.json +2b2498f5134a6de21bab104d06a4eb62881b6841 assets/create/lang/unfinished/ja_jp.json +525c169ff627b770d96f93a30a442ca62e4551cf assets/create/lang/unfinished/ko_kr.json +b0092f5eee50558444d5443c3272b8f9f71e5d16 assets/create/lang/unfinished/nl_nl.json +021294f59f8635e06ea6213d59e7de238285b9bd assets/create/lang/unfinished/pl_pl.json +e56525021c20ff54cba5c85b8f40b6be2f092209 assets/create/lang/unfinished/pt_br.json +645e40071e06935a05b67ad734f5becb93b823bc assets/create/lang/unfinished/ru_ru.json +d469d4fcdb7c255c48905adb6fdd1835c841f8eb assets/create/lang/unfinished/zh_cn.json +661e7b534cb28597767a5fefefdb78d8870656d7 assets/create/lang/unfinished/zh_tw.json 487a511a01b2a4531fb672f917922312db78f958 assets/create/models/block/acacia_window.json b48060cba1a382f373a05bf0039054053eccf076 assets/create/models/block/acacia_window_pane_noside.json 3066db1bf03cffa1a9c7fbacf47ae586632f4eb3 assets/create/models/block/acacia_window_pane_noside_alt.json @@ -494,9 +509,11 @@ a5f0ed76e27d2ca706445f7f7c5f9270f98e34f9 assets/create/models/block/birch_window f40c4d4ea6c037158f4b9862a7c11e6024a261e6 assets/create/models/block/birch_window_pane_post.json dbfd2a996820d885d9741a3f168aa36c3538cfbd assets/create/models/block/birch_window_pane_side.json 557b35671ec417597259ba8d0239fe18c14c3d20 assets/create/models/block/birch_window_pane_side_alt.json +71cd22dc2d847d317f19afb4b21802fbf5347e0b assets/create/models/block/black_nixie_tube.json 2b59d6f937cd542eba670689c30fe16887dfd9a0 assets/create/models/block/black_sail.json 97d79ab99c0fb278a9b5dc54e1c6563868f87b76 assets/create/models/block/black_seat.json 02747ea1a0e5d4a1cd466bf26878885a89d347fa assets/create/models/block/black_valve_handle.json +71cd22dc2d847d317f19afb4b21802fbf5347e0b assets/create/models/block/blue_nixie_tube.json d876627b6e519c6f3f59c7c27cc7b0f903206f7c assets/create/models/block/blue_sail.json e58b00a7222152d7facbe0e82f00933b974df747 assets/create/models/block/blue_seat.json c7f91468b196fbda137e6b31764870b3bbfda6b6 assets/create/models/block/blue_valve_handle.json @@ -535,6 +552,7 @@ fd6f6607a4742fa87dfe1768927a29dc4975ce7a assets/create/models/block/brass_funnel a959e03ca339badb49fe58ba53d86a84352e91f3 assets/create/models/block/brass_tunnel/t_left.json 0585fbe58da3a8ed0dc98cc7ed79ac067312078d assets/create/models/block/brass_tunnel/t_right.json a0612a633756433e1b37ddc6d290aa1fc07839ef assets/create/models/block/brass_tunnel/window.json +71cd22dc2d847d317f19afb4b21802fbf5347e0b assets/create/models/block/brown_nixie_tube.json 8ab097caaa0db0915ae9254f7d65092d9171bc60 assets/create/models/block/brown_sail.json 4eed0ad902f5e84f2b6c160f3283e8028640e77d assets/create/models/block/brown_seat.json 6c39677f8c3a84280835c717ea1ef569b7c76a1b assets/create/models/block/brown_valve_handle.json @@ -588,6 +606,7 @@ a6eea01609266b757342984889af16234ecd5189 assets/create/models/block/creative_top 14a14ab7c1a812a5ac8e282747f125461bf6b1d5 assets/create/models/block/crimson_window_pane_post.json b9e6d8befe3f2281413288e0350425987256e238 assets/create/models/block/crimson_window_pane_side.json bcbfa40524cff0314d9e764a64f90f2095d14064 assets/create/models/block/crimson_window_pane_side_alt.json +71cd22dc2d847d317f19afb4b21802fbf5347e0b assets/create/models/block/cyan_nixie_tube.json 68843a02a32c156afad85830877b83f9b51c5147 assets/create/models/block/cyan_sail.json 6704782830b3d872321e895b6903709c18e3778f assets/create/models/block/cyan_seat.json f45ef4a5f0aa8482d493661673b1c0ab6d061157 assets/create/models/block/cyan_valve_handle.json @@ -815,9 +834,11 @@ ddc8bf8dc62464d424ab812f801dd7a1f68072d0 assets/create/models/block/granite_cobb 87f6b4e30f2cdd0ddb3b48e43f15317b386597e6 assets/create/models/block/granite_cobblestone_wall_side.json 5c7340740d822deae7aa32c15c36531476862fbb assets/create/models/block/granite_cobblestone_wall_side_tall.json f55c5825c63f345a95e822a2113e76b5a62d8f7c assets/create/models/block/granite_pillar.json +71cd22dc2d847d317f19afb4b21802fbf5347e0b assets/create/models/block/gray_nixie_tube.json a68cd40ffb769b195437107f4a2c2188b222b74a assets/create/models/block/gray_sail.json 6eb5e59e803e1055968b90f3099cd0a17a1d3fd5 assets/create/models/block/gray_seat.json 7e213be39cc928363bf2b096f055439211050b8d assets/create/models/block/gray_valve_handle.json +71cd22dc2d847d317f19afb4b21802fbf5347e0b assets/create/models/block/green_nixie_tube.json 17b651233c62b928f0228562a7f6e7a2b7b2d6b7 assets/create/models/block/green_sail.json 1438b8ce54ac5557b8f10dcef94f3525eae19461 assets/create/models/block/green_seat.json cc7ce9b6bc687ad5027a67c3bf22bdf5bcd71674 assets/create/models/block/green_valve_handle.json @@ -847,12 +868,15 @@ e1add9f62cf886a7989f7ebb545906da16ad7a41 assets/create/models/block/layered_dolo cecf946818c65370b685dfeaade50819183acb41 assets/create/models/block/layered_limestone.json 258fb9644d396872719c56ae1ca89f50667a1077 assets/create/models/block/layered_scoria.json 60b05926e706d5dd27f3cb4997120c948797f2f4 assets/create/models/block/layered_weathered_limestone.json +71cd22dc2d847d317f19afb4b21802fbf5347e0b assets/create/models/block/light_blue_nixie_tube.json 19bd08ad6ac351e6eee2131f7b4c11a768bf8f08 assets/create/models/block/light_blue_sail.json 1a28b07da68d1461cd04c971ae548d94165e0cf3 assets/create/models/block/light_blue_seat.json 68e01f8d8a31f07f236383e19b49ae1be4cbe3f4 assets/create/models/block/light_blue_valve_handle.json +71cd22dc2d847d317f19afb4b21802fbf5347e0b assets/create/models/block/light_gray_nixie_tube.json 73f14b905d5fdb433751a33b963852de6491722a assets/create/models/block/light_gray_sail.json 292bec1b9f962b17b29147d982a9b177618b7eb9 assets/create/models/block/light_gray_seat.json 42338c4965da63962ea08077dc9e899aaf4c3c65 assets/create/models/block/light_gray_valve_handle.json +71cd22dc2d847d317f19afb4b21802fbf5347e0b assets/create/models/block/lime_nixie_tube.json 8292d043ebfe280340526a6a0f96d4160099e213 assets/create/models/block/lime_sail.json 31c9474210d8535c5417021fe042d4cc31e17328 assets/create/models/block/lime_seat.json 74008bd0d775b0e2e96b43be2e51d0f3c3abdf21 assets/create/models/block/lime_valve_handle.json @@ -881,6 +905,7 @@ c54e5a17495f88fa21b3488e8da32a365452c36c assets/create/models/block/limestone_co 7991d6620d2225b1a026e2b62dc076cf0a33613d assets/create/models/block/linear_chassis_bottom.json 56e585805c6235552ce5e15ff2f125ff8ec0fa2d assets/create/models/block/linear_chassis_top.json 12b35c916e3ee83ee4fd1e309c73403dec9a7297 assets/create/models/block/linear_chassis_top_bottom.json +71cd22dc2d847d317f19afb4b21802fbf5347e0b assets/create/models/block/magenta_nixie_tube.json ec6b5f636e163ff5e361d486cf628ca1af4849a1 assets/create/models/block/magenta_sail.json cbee001cd1bb1125a97d1bb2d1e6e5a68f129303 assets/create/models/block/magenta_seat.json bc5a03a5552eb4a518abefe5e8615f14ee13ca29 assets/create/models/block/magenta_valve_handle.json @@ -895,6 +920,7 @@ de9b0f933881cc735ae0acf2bd71e6eafa732ff8 assets/create/models/block/mossy_limest f88a9558a20033d4955e7b6de4f8aa23b1a11b9f assets/create/models/block/mossy_scoria.json 8c3296378aa7e5dc1bc7dfdde2f0a436b8bb8b78 assets/create/models/block/mossy_weathered_limestone.json 50f28bf7a7de95caf12b4f040994f0f3da72a55a assets/create/models/block/natural_scoria.json +71cd22dc2d847d317f19afb4b21802fbf5347e0b assets/create/models/block/nixie_tube.json e3cd8b33b8c5f0543e4f6728a5b3e05642f9efe1 assets/create/models/block/oak_window.json 54a3b3158f8c914788812aa44515b798b2a9e2f3 assets/create/models/block/oak_window_pane_noside.json b9c27f90d4d258e3fdcd713aaa42142f5d46a79e assets/create/models/block/oak_window_pane_noside_alt.json @@ -1045,6 +1071,7 @@ c7941c0bcbdf7ec7e2d34679afac744cf81b7489 assets/create/models/block/paved_weathe 942c2ae8a3546bd91f8489094f9e7516ff026e61 assets/create/models/block/peculiar_bell_double_wall.json 44371c13450dd41d84769a3a50250de1d86e75c5 assets/create/models/block/peculiar_bell_floor.json 57e48a613ce2c81992623a46792fca4bcafb33ce assets/create/models/block/peculiar_bell_single_wall.json +71cd22dc2d847d317f19afb4b21802fbf5347e0b assets/create/models/block/pink_nixie_tube.json 1b5f9e819cd4b5f5fe6e8c24920b916e8d93c95e assets/create/models/block/pink_sail.json ecc60ce7ee6b753073a99c597db95d6d9df3d438 assets/create/models/block/pink_seat.json 7ada61878d3a3c1d3cc33bcf9a80c21b8f9aaff2 assets/create/models/block/pink_valve_handle.json @@ -1114,6 +1141,7 @@ f22d7d8263dcabd726aa04784031ae9062633579 assets/create/models/block/powered_togg e6097d9ab9dc9954cbc750020bc33c7a423b73c6 assets/create/models/block/powered_toggle_latch_on_powered.json 622239a3a09fcac7235b9670eb395a530839a59b assets/create/models/block/pulse_repeater_powered.json d469dce70d15759baed35025b8c7fa403c8b3b26 assets/create/models/block/pulse_repeater_pulsing.json +71cd22dc2d847d317f19afb4b21802fbf5347e0b assets/create/models/block/purple_nixie_tube.json b56fad63b82434564bc41ae9c01e3b427203fb5b assets/create/models/block/purple_sail.json 96adc7865ebe64b43865bc2fe914830c11258856 assets/create/models/block/purple_seat.json 062406aacf25e099f9b28a3bf7cacfcaa1da4ef6 assets/create/models/block/purple_valve_handle.json @@ -1123,6 +1151,7 @@ a9885a3f69e3e2a2812c33bafd9140fcc5cc7c25 assets/create/models/block/radial_chass 92a48c22cf2af0a3156844322f6bb469883608fb assets/create/models/block/radial_chassis_side_y_sticky.json 522f4733118d6fba172696e9478c8f9fe88b236e assets/create/models/block/radial_chassis_side_z.json bffca231a146a6ac49e028f3790cdcbf375e98b0 assets/create/models/block/radial_chassis_side_z_sticky.json +71cd22dc2d847d317f19afb4b21802fbf5347e0b assets/create/models/block/red_nixie_tube.json f0099576080a0f2bb09dd85e55777bad69f9f265 assets/create/models/block/red_sail.json 12d4f4119b994c5d71c96ab3aa09beb89dad1e10 assets/create/models/block/red_seat.json 0064825ee3c1702c524d34abb6adb66906586851 assets/create/models/block/red_valve_handle.json @@ -1203,9 +1232,11 @@ acf3900465101f9dd78d2301eab1063cdb461582 assets/create/models/block/weathered_li 7f1582fe36aa94be4352b8eda89c8ebf7a353333 assets/create/models/block/weathered_limestone_cobblestone_wall_side.json 3235d3148535283e9e9b4ee336b92055e7c6bf01 assets/create/models/block/weathered_limestone_cobblestone_wall_side_tall.json 8c6feec0411e95f9aae18f9f38b4e045156857e8 assets/create/models/block/weathered_limestone_pillar.json +71cd22dc2d847d317f19afb4b21802fbf5347e0b assets/create/models/block/white_nixie_tube.json 1377e12f56dce1466ce44078d7154870c5cf7b2a assets/create/models/block/white_seat.json 899f33d51cf36cb1c283bc7e6363f9d451e5736e assets/create/models/block/white_valve_handle.json f2bee22fe03ac047fbe73ca2c5c759f09bf646df assets/create/models/block/windmill_bearing.json +71cd22dc2d847d317f19afb4b21802fbf5347e0b assets/create/models/block/yellow_nixie_tube.json 071ca07daceea4d0db7ed41e815d47589fdb14b7 assets/create/models/block/yellow_sail.json 0a0e2cc973e35586ae00ed17b919383868e992e8 assets/create/models/block/yellow_seat.json 55edee7b0833ab19b98694fab21ae0c8e91f76fd assets/create/models/block/yellow_valve_handle.json @@ -2427,10 +2458,12 @@ d3202a337c15c8b8ec41fa5879bb94327bb75057 data/create/loot_tables/blocks/andesite c7f81e30c31837a287d6d6040cdb02c7dec11441 data/create/loot_tables/blocks/belt.json 67a8e2513c3cb09e6fe80279fda94f79d5018c37 data/create/loot_tables/blocks/birch_window.json bf1d5843f93533f84bc4adec5b77da2114fa2025 data/create/loot_tables/blocks/birch_window_pane.json +d3ea271bb5774c73d44ab2e73195c9d5a4ff9c92 data/create/loot_tables/blocks/black_nixie_tube.json 28ae0ee8a0b1fb6becae6264de687fe17940708e data/create/loot_tables/blocks/black_sail.json cccc209d172cc7bac76f1b4ac79085ee90742ab2 data/create/loot_tables/blocks/black_seat.json f3573f47b8a914aa222633893e158f84fcd6f3d8 data/create/loot_tables/blocks/black_valve_handle.json a2313c9b7d114396fca3c86a740d23fce3873679 data/create/loot_tables/blocks/blaze_burner.json +d3ea271bb5774c73d44ab2e73195c9d5a4ff9c92 data/create/loot_tables/blocks/blue_nixie_tube.json 28ae0ee8a0b1fb6becae6264de687fe17940708e data/create/loot_tables/blocks/blue_sail.json 3834f7ac2bbc42cead02d4973842adb9ad97e6bf data/create/loot_tables/blocks/blue_seat.json fcddccd1bf45c2f4ad5f1520e209a4f04487274a data/create/loot_tables/blocks/blue_valve_handle.json @@ -2440,6 +2473,7 @@ fcddccd1bf45c2f4ad5f1520e209a4f04487274a data/create/loot_tables/blocks/blue_val b127cb6920e6d7d9c8b2402cb186402a9a8dd3fc data/create/loot_tables/blocks/brass_encased_shaft.json 1dbc446abe190b2832b2ce7d52c2f2d2bdd45949 data/create/loot_tables/blocks/brass_funnel.json 6c8e784677d1a843b6c707484c79751acdb46ebc data/create/loot_tables/blocks/brass_tunnel.json +d3ea271bb5774c73d44ab2e73195c9d5a4ff9c92 data/create/loot_tables/blocks/brown_nixie_tube.json 28ae0ee8a0b1fb6becae6264de687fe17940708e data/create/loot_tables/blocks/brown_sail.json d415862a0abe20e8c5c2c8125bb672065330a9bc data/create/loot_tables/blocks/brown_seat.json fedfe922f568c06adc2dfdd641b9abc90ba5af8a data/create/loot_tables/blocks/brown_valve_handle.json @@ -2471,6 +2505,7 @@ ba084fc3c680c9dea0d03fc664a831dfed18e52e data/create/loot_tables/blocks/crimson_ c28fa42746a4d5ca2f824001b67e58673810169e data/create/loot_tables/blocks/crushing_wheel.json 205f5899101262f31f5c1a88bb7d954918d08d04 data/create/loot_tables/blocks/crushing_wheel_controller.json d370ee874b5b6b98e9a8c368218fe61f644d956d data/create/loot_tables/blocks/cuckoo_clock.json +d3ea271bb5774c73d44ab2e73195c9d5a4ff9c92 data/create/loot_tables/blocks/cyan_nixie_tube.json 28ae0ee8a0b1fb6becae6264de687fe17940708e data/create/loot_tables/blocks/cyan_sail.json 49a14b9e93abdf02a7aef9c0c4085ac89617fae4 data/create/loot_tables/blocks/cyan_seat.json fe24fd296812fea3f838defa2ca6270523d9d48e data/create/loot_tables/blocks/cyan_valve_handle.json @@ -2577,9 +2612,11 @@ fa0ddf45d108f55550164113cb5cfd002586a9d4 data/create/loot_tables/blocks/granite_ feca8a1f62e0e13fcb2252d5f782d74938b84431 data/create/loot_tables/blocks/granite_cobblestone_stairs.json 1d225a68b09d6f389aa7ed48aa05979bdaa482a9 data/create/loot_tables/blocks/granite_cobblestone_wall.json 87a4ac3db5ec80613b940abccc72fc4b37cee0ba data/create/loot_tables/blocks/granite_pillar.json +d3ea271bb5774c73d44ab2e73195c9d5a4ff9c92 data/create/loot_tables/blocks/gray_nixie_tube.json 28ae0ee8a0b1fb6becae6264de687fe17940708e data/create/loot_tables/blocks/gray_sail.json d014357b3a467b23473c8223f32471a04a9ff94c data/create/loot_tables/blocks/gray_seat.json 35f916fd0f8465a070270615dbddd716ff68d5bb data/create/loot_tables/blocks/gray_valve_handle.json +d3ea271bb5774c73d44ab2e73195c9d5a4ff9c92 data/create/loot_tables/blocks/green_nixie_tube.json 28ae0ee8a0b1fb6becae6264de687fe17940708e data/create/loot_tables/blocks/green_sail.json a71599eecd3f1179e3d0367623460e798828aa6d data/create/loot_tables/blocks/green_seat.json 865ebead9601b29e6326dc9e1d4c1ca92f3b7a3b data/create/loot_tables/blocks/green_valve_handle.json @@ -2602,12 +2639,15 @@ fa8a5922f7346a15a80b5c7e5dfc26d24ea98728 data/create/loot_tables/blocks/layered_ 0ec9e366708637a01e600a2a12cc267d81b3f69b data/create/loot_tables/blocks/layered_scoria.json 54816065cd735dfe53b1eb551110ba18c6e3746a data/create/loot_tables/blocks/layered_weathered_limestone.json 4b34cda34416f58045b10e61a0c8ae2b29cb0794 data/create/loot_tables/blocks/lectern_controller.json +d3ea271bb5774c73d44ab2e73195c9d5a4ff9c92 data/create/loot_tables/blocks/light_blue_nixie_tube.json 28ae0ee8a0b1fb6becae6264de687fe17940708e data/create/loot_tables/blocks/light_blue_sail.json b403848d3a4b4ad7a048e70c21e200e40d0c67e3 data/create/loot_tables/blocks/light_blue_seat.json 32afe3fff74ccda4151567961fa6c0b8e3735358 data/create/loot_tables/blocks/light_blue_valve_handle.json +d3ea271bb5774c73d44ab2e73195c9d5a4ff9c92 data/create/loot_tables/blocks/light_gray_nixie_tube.json 28ae0ee8a0b1fb6becae6264de687fe17940708e data/create/loot_tables/blocks/light_gray_sail.json 0cc2b20cb6e2dae6cf9d759c85926663f6066c99 data/create/loot_tables/blocks/light_gray_seat.json 8cc64a1dfb7ce7be2c063248d912c68ad2fe999c data/create/loot_tables/blocks/light_gray_valve_handle.json +d3ea271bb5774c73d44ab2e73195c9d5a4ff9c92 data/create/loot_tables/blocks/lime_nixie_tube.json 28ae0ee8a0b1fb6becae6264de687fe17940708e data/create/loot_tables/blocks/lime_sail.json f7893090c6ecb4862c90c408b7f9ce8316f8b608 data/create/loot_tables/blocks/lime_seat.json cae6d16c8967164698efbce3b91018a8e79a81e9 data/create/loot_tables/blocks/lime_valve_handle.json @@ -2624,6 +2664,7 @@ ebb8f7a60d6d9debc53a1f16749d61b980dd1d18 data/create/loot_tables/blocks/limeston 371115e5ceb08c07a9ab2371509960c31e0baa8a data/create/loot_tables/blocks/limestone_pillar.json aa751d2e8a7889907c08c4bec6f6ca266230b6d7 data/create/loot_tables/blocks/linear_chassis.json 4005c244387ea824202c4c7cd44403e537d9766b data/create/loot_tables/blocks/lit_blaze_burner.json +d3ea271bb5774c73d44ab2e73195c9d5a4ff9c92 data/create/loot_tables/blocks/magenta_nixie_tube.json 28ae0ee8a0b1fb6becae6264de687fe17940708e data/create/loot_tables/blocks/magenta_sail.json 9e5e017cd3b4f544f487a5ca22ef610a4addc8ec data/create/loot_tables/blocks/magenta_seat.json 517e983d7387ec0d86845d4cf3deaa6d68c71170 data/create/loot_tables/blocks/magenta_valve_handle.json @@ -2708,6 +2749,7 @@ dfeba5c6de20e9ec0252e43b7c4046f017284d3d data/create/loot_tables/blocks/paved_we 67b9227237ed2a8c09c4183c0f2ab1b3bd07084b data/create/loot_tables/blocks/paved_weathered_limestone_stairs.json d3e4ab984aef19ee21a1c5b868eb3fde96c05afd data/create/loot_tables/blocks/paved_weathered_limestone_wall.json 3a54eca6d503c154a2235ad5b6be4653abd4b6e3 data/create/loot_tables/blocks/peculiar_bell.json +d3ea271bb5774c73d44ab2e73195c9d5a4ff9c92 data/create/loot_tables/blocks/pink_nixie_tube.json 28ae0ee8a0b1fb6becae6264de687fe17940708e data/create/loot_tables/blocks/pink_sail.json 6f32e1217986407e41358e9417de63602c78e810 data/create/loot_tables/blocks/pink_seat.json d85b09659f08a73513c57b1b2e5ec7fc4b6f340a data/create/loot_tables/blocks/pink_valve_handle.json @@ -2742,10 +2784,12 @@ fbe98efcb1a5970b6795fdbbb671fee704c0945f data/create/loot_tables/blocks/portable a3fb7d3e3bf9dc73ce754002f10c469d57db1f71 data/create/loot_tables/blocks/powered_toggle_latch.json 205f5899101262f31f5c1a88bb7d954918d08d04 data/create/loot_tables/blocks/pulley_magnet.json e8fb62c91226ac107dee45c5ebc54c8dd0aee224 data/create/loot_tables/blocks/pulse_repeater.json +d3ea271bb5774c73d44ab2e73195c9d5a4ff9c92 data/create/loot_tables/blocks/purple_nixie_tube.json 28ae0ee8a0b1fb6becae6264de687fe17940708e data/create/loot_tables/blocks/purple_sail.json d7f6caa568e6508177a644fb78dc18ce26c9b2c0 data/create/loot_tables/blocks/purple_seat.json 773e4dc856044dabfe9d2323cbda0460dfb626ee data/create/loot_tables/blocks/purple_valve_handle.json 768420dab8785909891e52c4d77a182d99ba11d3 data/create/loot_tables/blocks/radial_chassis.json +d3ea271bb5774c73d44ab2e73195c9d5a4ff9c92 data/create/loot_tables/blocks/red_nixie_tube.json 28ae0ee8a0b1fb6becae6264de687fe17940708e data/create/loot_tables/blocks/red_sail.json 71b0fa3b174efe94a2a735ab2426c376c0ef674a data/create/loot_tables/blocks/red_seat.json 59ee0fd35978068fbce0882e0b207db7eeb202c0 data/create/loot_tables/blocks/red_valve_handle.json @@ -2802,11 +2846,13 @@ a89f425c47c3831071b556697169a3124370aed7 data/create/loot_tables/blocks/weathere e8f3af61d9a2fd1ff5b32c9bb474ed005e6d70c4 data/create/loot_tables/blocks/weathered_limestone_cobblestone_wall.json 54358a64639957cc66ffa5296ff45723f7adf00e data/create/loot_tables/blocks/weathered_limestone_pillar.json e3969f1c5966c4992b3280a06e1d6c5000c37df5 data/create/loot_tables/blocks/weighted_ejector.json +d3ea271bb5774c73d44ab2e73195c9d5a4ff9c92 data/create/loot_tables/blocks/white_nixie_tube.json 28ae0ee8a0b1fb6becae6264de687fe17940708e data/create/loot_tables/blocks/white_sail.json 969eda31556feb5a68e350762848d17453275fee data/create/loot_tables/blocks/white_seat.json 79fe374f8e677088f928a3a49ff5eeed6128d165 data/create/loot_tables/blocks/white_valve_handle.json 941ea78ea7c0f0061c3d3569ecea333ae6a16bf1 data/create/loot_tables/blocks/windmill_bearing.json 728c8719e653825c030913df94ce845fdc6d79b7 data/create/loot_tables/blocks/wooden_bracket.json +d3ea271bb5774c73d44ab2e73195c9d5a4ff9c92 data/create/loot_tables/blocks/yellow_nixie_tube.json 28ae0ee8a0b1fb6becae6264de687fe17940708e data/create/loot_tables/blocks/yellow_sail.json 37ead431a278928a09b260ae06a448e2c791a73e data/create/loot_tables/blocks/yellow_seat.json 899bb208908a2f9bec5e544ff47526f3e24db720 data/create/loot_tables/blocks/yellow_valve_handle.json diff --git a/src/generated/resources/assets/create/blockstates/black_nixie_tube.json b/src/generated/resources/assets/create/blockstates/black_nixie_tube.json new file mode 100644 index 000000000..6c876afd9 --- /dev/null +++ b/src/generated/resources/assets/create/blockstates/black_nixie_tube.json @@ -0,0 +1,38 @@ +{ + "variants": { + "ceiling=false,facing=north": { + "model": "create:block/black_nixie_tube", + "y": 180 + }, + "ceiling=true,facing=north": { + "model": "create:block/black_nixie_tube", + "x": 180, + "y": 180 + }, + "ceiling=false,facing=south": { + "model": "create:block/black_nixie_tube" + }, + "ceiling=true,facing=south": { + "model": "create:block/black_nixie_tube", + "x": 180 + }, + "ceiling=false,facing=west": { + "model": "create:block/black_nixie_tube", + "y": 90 + }, + "ceiling=true,facing=west": { + "model": "create:block/black_nixie_tube", + "x": 180, + "y": 90 + }, + "ceiling=false,facing=east": { + "model": "create:block/black_nixie_tube", + "y": 270 + }, + "ceiling=true,facing=east": { + "model": "create:block/black_nixie_tube", + "x": 180, + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/blockstates/blue_nixie_tube.json b/src/generated/resources/assets/create/blockstates/blue_nixie_tube.json new file mode 100644 index 000000000..e0b3c3cbf --- /dev/null +++ b/src/generated/resources/assets/create/blockstates/blue_nixie_tube.json @@ -0,0 +1,38 @@ +{ + "variants": { + "ceiling=false,facing=north": { + "model": "create:block/blue_nixie_tube", + "y": 180 + }, + "ceiling=true,facing=north": { + "model": "create:block/blue_nixie_tube", + "x": 180, + "y": 180 + }, + "ceiling=false,facing=south": { + "model": "create:block/blue_nixie_tube" + }, + "ceiling=true,facing=south": { + "model": "create:block/blue_nixie_tube", + "x": 180 + }, + "ceiling=false,facing=west": { + "model": "create:block/blue_nixie_tube", + "y": 90 + }, + "ceiling=true,facing=west": { + "model": "create:block/blue_nixie_tube", + "x": 180, + "y": 90 + }, + "ceiling=false,facing=east": { + "model": "create:block/blue_nixie_tube", + "y": 270 + }, + "ceiling=true,facing=east": { + "model": "create:block/blue_nixie_tube", + "x": 180, + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/blockstates/brown_nixie_tube.json b/src/generated/resources/assets/create/blockstates/brown_nixie_tube.json new file mode 100644 index 000000000..ac0598ea6 --- /dev/null +++ b/src/generated/resources/assets/create/blockstates/brown_nixie_tube.json @@ -0,0 +1,38 @@ +{ + "variants": { + "ceiling=false,facing=north": { + "model": "create:block/brown_nixie_tube", + "y": 180 + }, + "ceiling=true,facing=north": { + "model": "create:block/brown_nixie_tube", + "x": 180, + "y": 180 + }, + "ceiling=false,facing=south": { + "model": "create:block/brown_nixie_tube" + }, + "ceiling=true,facing=south": { + "model": "create:block/brown_nixie_tube", + "x": 180 + }, + "ceiling=false,facing=west": { + "model": "create:block/brown_nixie_tube", + "y": 90 + }, + "ceiling=true,facing=west": { + "model": "create:block/brown_nixie_tube", + "x": 180, + "y": 90 + }, + "ceiling=false,facing=east": { + "model": "create:block/brown_nixie_tube", + "y": 270 + }, + "ceiling=true,facing=east": { + "model": "create:block/brown_nixie_tube", + "x": 180, + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/blockstates/cyan_nixie_tube.json b/src/generated/resources/assets/create/blockstates/cyan_nixie_tube.json new file mode 100644 index 000000000..d86bae904 --- /dev/null +++ b/src/generated/resources/assets/create/blockstates/cyan_nixie_tube.json @@ -0,0 +1,38 @@ +{ + "variants": { + "ceiling=false,facing=north": { + "model": "create:block/cyan_nixie_tube", + "y": 180 + }, + "ceiling=true,facing=north": { + "model": "create:block/cyan_nixie_tube", + "x": 180, + "y": 180 + }, + "ceiling=false,facing=south": { + "model": "create:block/cyan_nixie_tube" + }, + "ceiling=true,facing=south": { + "model": "create:block/cyan_nixie_tube", + "x": 180 + }, + "ceiling=false,facing=west": { + "model": "create:block/cyan_nixie_tube", + "y": 90 + }, + "ceiling=true,facing=west": { + "model": "create:block/cyan_nixie_tube", + "x": 180, + "y": 90 + }, + "ceiling=false,facing=east": { + "model": "create:block/cyan_nixie_tube", + "y": 270 + }, + "ceiling=true,facing=east": { + "model": "create:block/cyan_nixie_tube", + "x": 180, + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/blockstates/gray_nixie_tube.json b/src/generated/resources/assets/create/blockstates/gray_nixie_tube.json new file mode 100644 index 000000000..801e85e1e --- /dev/null +++ b/src/generated/resources/assets/create/blockstates/gray_nixie_tube.json @@ -0,0 +1,38 @@ +{ + "variants": { + "ceiling=false,facing=north": { + "model": "create:block/gray_nixie_tube", + "y": 180 + }, + "ceiling=true,facing=north": { + "model": "create:block/gray_nixie_tube", + "x": 180, + "y": 180 + }, + "ceiling=false,facing=south": { + "model": "create:block/gray_nixie_tube" + }, + "ceiling=true,facing=south": { + "model": "create:block/gray_nixie_tube", + "x": 180 + }, + "ceiling=false,facing=west": { + "model": "create:block/gray_nixie_tube", + "y": 90 + }, + "ceiling=true,facing=west": { + "model": "create:block/gray_nixie_tube", + "x": 180, + "y": 90 + }, + "ceiling=false,facing=east": { + "model": "create:block/gray_nixie_tube", + "y": 270 + }, + "ceiling=true,facing=east": { + "model": "create:block/gray_nixie_tube", + "x": 180, + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/blockstates/green_nixie_tube.json b/src/generated/resources/assets/create/blockstates/green_nixie_tube.json new file mode 100644 index 000000000..919f0f810 --- /dev/null +++ b/src/generated/resources/assets/create/blockstates/green_nixie_tube.json @@ -0,0 +1,38 @@ +{ + "variants": { + "ceiling=false,facing=north": { + "model": "create:block/green_nixie_tube", + "y": 180 + }, + "ceiling=true,facing=north": { + "model": "create:block/green_nixie_tube", + "x": 180, + "y": 180 + }, + "ceiling=false,facing=south": { + "model": "create:block/green_nixie_tube" + }, + "ceiling=true,facing=south": { + "model": "create:block/green_nixie_tube", + "x": 180 + }, + "ceiling=false,facing=west": { + "model": "create:block/green_nixie_tube", + "y": 90 + }, + "ceiling=true,facing=west": { + "model": "create:block/green_nixie_tube", + "x": 180, + "y": 90 + }, + "ceiling=false,facing=east": { + "model": "create:block/green_nixie_tube", + "y": 270 + }, + "ceiling=true,facing=east": { + "model": "create:block/green_nixie_tube", + "x": 180, + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/blockstates/light_blue_nixie_tube.json b/src/generated/resources/assets/create/blockstates/light_blue_nixie_tube.json new file mode 100644 index 000000000..ee587b332 --- /dev/null +++ b/src/generated/resources/assets/create/blockstates/light_blue_nixie_tube.json @@ -0,0 +1,38 @@ +{ + "variants": { + "ceiling=false,facing=north": { + "model": "create:block/light_blue_nixie_tube", + "y": 180 + }, + "ceiling=true,facing=north": { + "model": "create:block/light_blue_nixie_tube", + "x": 180, + "y": 180 + }, + "ceiling=false,facing=south": { + "model": "create:block/light_blue_nixie_tube" + }, + "ceiling=true,facing=south": { + "model": "create:block/light_blue_nixie_tube", + "x": 180 + }, + "ceiling=false,facing=west": { + "model": "create:block/light_blue_nixie_tube", + "y": 90 + }, + "ceiling=true,facing=west": { + "model": "create:block/light_blue_nixie_tube", + "x": 180, + "y": 90 + }, + "ceiling=false,facing=east": { + "model": "create:block/light_blue_nixie_tube", + "y": 270 + }, + "ceiling=true,facing=east": { + "model": "create:block/light_blue_nixie_tube", + "x": 180, + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/blockstates/light_gray_nixie_tube.json b/src/generated/resources/assets/create/blockstates/light_gray_nixie_tube.json new file mode 100644 index 000000000..1243138f5 --- /dev/null +++ b/src/generated/resources/assets/create/blockstates/light_gray_nixie_tube.json @@ -0,0 +1,38 @@ +{ + "variants": { + "ceiling=false,facing=north": { + "model": "create:block/light_gray_nixie_tube", + "y": 180 + }, + "ceiling=true,facing=north": { + "model": "create:block/light_gray_nixie_tube", + "x": 180, + "y": 180 + }, + "ceiling=false,facing=south": { + "model": "create:block/light_gray_nixie_tube" + }, + "ceiling=true,facing=south": { + "model": "create:block/light_gray_nixie_tube", + "x": 180 + }, + "ceiling=false,facing=west": { + "model": "create:block/light_gray_nixie_tube", + "y": 90 + }, + "ceiling=true,facing=west": { + "model": "create:block/light_gray_nixie_tube", + "x": 180, + "y": 90 + }, + "ceiling=false,facing=east": { + "model": "create:block/light_gray_nixie_tube", + "y": 270 + }, + "ceiling=true,facing=east": { + "model": "create:block/light_gray_nixie_tube", + "x": 180, + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/blockstates/lime_nixie_tube.json b/src/generated/resources/assets/create/blockstates/lime_nixie_tube.json new file mode 100644 index 000000000..76f298bf3 --- /dev/null +++ b/src/generated/resources/assets/create/blockstates/lime_nixie_tube.json @@ -0,0 +1,38 @@ +{ + "variants": { + "ceiling=false,facing=north": { + "model": "create:block/lime_nixie_tube", + "y": 180 + }, + "ceiling=true,facing=north": { + "model": "create:block/lime_nixie_tube", + "x": 180, + "y": 180 + }, + "ceiling=false,facing=south": { + "model": "create:block/lime_nixie_tube" + }, + "ceiling=true,facing=south": { + "model": "create:block/lime_nixie_tube", + "x": 180 + }, + "ceiling=false,facing=west": { + "model": "create:block/lime_nixie_tube", + "y": 90 + }, + "ceiling=true,facing=west": { + "model": "create:block/lime_nixie_tube", + "x": 180, + "y": 90 + }, + "ceiling=false,facing=east": { + "model": "create:block/lime_nixie_tube", + "y": 270 + }, + "ceiling=true,facing=east": { + "model": "create:block/lime_nixie_tube", + "x": 180, + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/blockstates/magenta_nixie_tube.json b/src/generated/resources/assets/create/blockstates/magenta_nixie_tube.json new file mode 100644 index 000000000..396bfcbea --- /dev/null +++ b/src/generated/resources/assets/create/blockstates/magenta_nixie_tube.json @@ -0,0 +1,38 @@ +{ + "variants": { + "ceiling=false,facing=north": { + "model": "create:block/magenta_nixie_tube", + "y": 180 + }, + "ceiling=true,facing=north": { + "model": "create:block/magenta_nixie_tube", + "x": 180, + "y": 180 + }, + "ceiling=false,facing=south": { + "model": "create:block/magenta_nixie_tube" + }, + "ceiling=true,facing=south": { + "model": "create:block/magenta_nixie_tube", + "x": 180 + }, + "ceiling=false,facing=west": { + "model": "create:block/magenta_nixie_tube", + "y": 90 + }, + "ceiling=true,facing=west": { + "model": "create:block/magenta_nixie_tube", + "x": 180, + "y": 90 + }, + "ceiling=false,facing=east": { + "model": "create:block/magenta_nixie_tube", + "y": 270 + }, + "ceiling=true,facing=east": { + "model": "create:block/magenta_nixie_tube", + "x": 180, + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/blockstates/nixie_tube.json b/src/generated/resources/assets/create/blockstates/nixie_tube.json index aa96a9615..8a59ef4bb 100644 --- a/src/generated/resources/assets/create/blockstates/nixie_tube.json +++ b/src/generated/resources/assets/create/blockstates/nixie_tube.json @@ -1,36 +1,36 @@ { "variants": { "ceiling=false,facing=north": { - "model": "create:block/nixie_tube/block", + "model": "create:block/nixie_tube", "y": 180 }, "ceiling=true,facing=north": { - "model": "create:block/nixie_tube/block", + "model": "create:block/nixie_tube", "x": 180, "y": 180 }, "ceiling=false,facing=south": { - "model": "create:block/nixie_tube/block" + "model": "create:block/nixie_tube" }, "ceiling=true,facing=south": { - "model": "create:block/nixie_tube/block", + "model": "create:block/nixie_tube", "x": 180 }, "ceiling=false,facing=west": { - "model": "create:block/nixie_tube/block", + "model": "create:block/nixie_tube", "y": 90 }, "ceiling=true,facing=west": { - "model": "create:block/nixie_tube/block", + "model": "create:block/nixie_tube", "x": 180, "y": 90 }, "ceiling=false,facing=east": { - "model": "create:block/nixie_tube/block", + "model": "create:block/nixie_tube", "y": 270 }, "ceiling=true,facing=east": { - "model": "create:block/nixie_tube/block", + "model": "create:block/nixie_tube", "x": 180, "y": 270 } diff --git a/src/generated/resources/assets/create/blockstates/pink_nixie_tube.json b/src/generated/resources/assets/create/blockstates/pink_nixie_tube.json new file mode 100644 index 000000000..582f2c3ef --- /dev/null +++ b/src/generated/resources/assets/create/blockstates/pink_nixie_tube.json @@ -0,0 +1,38 @@ +{ + "variants": { + "ceiling=false,facing=north": { + "model": "create:block/pink_nixie_tube", + "y": 180 + }, + "ceiling=true,facing=north": { + "model": "create:block/pink_nixie_tube", + "x": 180, + "y": 180 + }, + "ceiling=false,facing=south": { + "model": "create:block/pink_nixie_tube" + }, + "ceiling=true,facing=south": { + "model": "create:block/pink_nixie_tube", + "x": 180 + }, + "ceiling=false,facing=west": { + "model": "create:block/pink_nixie_tube", + "y": 90 + }, + "ceiling=true,facing=west": { + "model": "create:block/pink_nixie_tube", + "x": 180, + "y": 90 + }, + "ceiling=false,facing=east": { + "model": "create:block/pink_nixie_tube", + "y": 270 + }, + "ceiling=true,facing=east": { + "model": "create:block/pink_nixie_tube", + "x": 180, + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/blockstates/purple_nixie_tube.json b/src/generated/resources/assets/create/blockstates/purple_nixie_tube.json new file mode 100644 index 000000000..b08bd6e3c --- /dev/null +++ b/src/generated/resources/assets/create/blockstates/purple_nixie_tube.json @@ -0,0 +1,38 @@ +{ + "variants": { + "ceiling=false,facing=north": { + "model": "create:block/purple_nixie_tube", + "y": 180 + }, + "ceiling=true,facing=north": { + "model": "create:block/purple_nixie_tube", + "x": 180, + "y": 180 + }, + "ceiling=false,facing=south": { + "model": "create:block/purple_nixie_tube" + }, + "ceiling=true,facing=south": { + "model": "create:block/purple_nixie_tube", + "x": 180 + }, + "ceiling=false,facing=west": { + "model": "create:block/purple_nixie_tube", + "y": 90 + }, + "ceiling=true,facing=west": { + "model": "create:block/purple_nixie_tube", + "x": 180, + "y": 90 + }, + "ceiling=false,facing=east": { + "model": "create:block/purple_nixie_tube", + "y": 270 + }, + "ceiling=true,facing=east": { + "model": "create:block/purple_nixie_tube", + "x": 180, + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/blockstates/red_nixie_tube.json b/src/generated/resources/assets/create/blockstates/red_nixie_tube.json new file mode 100644 index 000000000..99ababb7c --- /dev/null +++ b/src/generated/resources/assets/create/blockstates/red_nixie_tube.json @@ -0,0 +1,38 @@ +{ + "variants": { + "ceiling=false,facing=north": { + "model": "create:block/red_nixie_tube", + "y": 180 + }, + "ceiling=true,facing=north": { + "model": "create:block/red_nixie_tube", + "x": 180, + "y": 180 + }, + "ceiling=false,facing=south": { + "model": "create:block/red_nixie_tube" + }, + "ceiling=true,facing=south": { + "model": "create:block/red_nixie_tube", + "x": 180 + }, + "ceiling=false,facing=west": { + "model": "create:block/red_nixie_tube", + "y": 90 + }, + "ceiling=true,facing=west": { + "model": "create:block/red_nixie_tube", + "x": 180, + "y": 90 + }, + "ceiling=false,facing=east": { + "model": "create:block/red_nixie_tube", + "y": 270 + }, + "ceiling=true,facing=east": { + "model": "create:block/red_nixie_tube", + "x": 180, + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/blockstates/white_nixie_tube.json b/src/generated/resources/assets/create/blockstates/white_nixie_tube.json new file mode 100644 index 000000000..c1541c94d --- /dev/null +++ b/src/generated/resources/assets/create/blockstates/white_nixie_tube.json @@ -0,0 +1,38 @@ +{ + "variants": { + "ceiling=false,facing=north": { + "model": "create:block/white_nixie_tube", + "y": 180 + }, + "ceiling=true,facing=north": { + "model": "create:block/white_nixie_tube", + "x": 180, + "y": 180 + }, + "ceiling=false,facing=south": { + "model": "create:block/white_nixie_tube" + }, + "ceiling=true,facing=south": { + "model": "create:block/white_nixie_tube", + "x": 180 + }, + "ceiling=false,facing=west": { + "model": "create:block/white_nixie_tube", + "y": 90 + }, + "ceiling=true,facing=west": { + "model": "create:block/white_nixie_tube", + "x": 180, + "y": 90 + }, + "ceiling=false,facing=east": { + "model": "create:block/white_nixie_tube", + "y": 270 + }, + "ceiling=true,facing=east": { + "model": "create:block/white_nixie_tube", + "x": 180, + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/blockstates/yellow_nixie_tube.json b/src/generated/resources/assets/create/blockstates/yellow_nixie_tube.json new file mode 100644 index 000000000..370874c55 --- /dev/null +++ b/src/generated/resources/assets/create/blockstates/yellow_nixie_tube.json @@ -0,0 +1,38 @@ +{ + "variants": { + "ceiling=false,facing=north": { + "model": "create:block/yellow_nixie_tube", + "y": 180 + }, + "ceiling=true,facing=north": { + "model": "create:block/yellow_nixie_tube", + "x": 180, + "y": 180 + }, + "ceiling=false,facing=south": { + "model": "create:block/yellow_nixie_tube" + }, + "ceiling=true,facing=south": { + "model": "create:block/yellow_nixie_tube", + "x": 180 + }, + "ceiling=false,facing=west": { + "model": "create:block/yellow_nixie_tube", + "y": 90 + }, + "ceiling=true,facing=west": { + "model": "create:block/yellow_nixie_tube", + "x": 180, + "y": 90 + }, + "ceiling=false,facing=east": { + "model": "create:block/yellow_nixie_tube", + "y": 270 + }, + "ceiling=true,facing=east": { + "model": "create:block/yellow_nixie_tube", + "x": 180, + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/lang/en_ud.json b/src/generated/resources/assets/create/lang/en_ud.json index fbbbb1a06..373483d04 100644 --- a/src/generated/resources/assets/create/lang/en_ud.json +++ b/src/generated/resources/assets/create/lang/en_ud.json @@ -24,10 +24,12 @@ "block.create.belt": "\u0287\u05DF\u01DD\u15FA", "block.create.birch_window": "\u028Dopu\u0131M \u0265\u0254\u0279\u0131\u15FA", "block.create.birch_window_pane": "\u01DDu\u0250\u0500 \u028Dopu\u0131M \u0265\u0254\u0279\u0131\u15FA", + "block.create.black_nixie_tube": "\u01DDqn\u27D8 \u01DD\u0131x\u0131N \u029E\u0254\u0250\u05DF\u15FA", "block.create.black_sail": "\u05DF\u0131\u0250S \u029E\u0254\u0250\u05DF\u15FA", "block.create.black_seat": "\u0287\u0250\u01DDS \u029E\u0254\u0250\u05DF\u15FA", "block.create.black_valve_handle": "\u01DD\u05DFpu\u0250H \u01DD\u028C\u05DF\u0250\u039B \u029E\u0254\u0250\u05DF\u15FA", "block.create.blaze_burner": "\u0279\u01DDu\u0279n\u15FA \u01DDz\u0250\u05DF\u15FA", + "block.create.blue_nixie_tube": "\u01DDqn\u27D8 \u01DD\u0131x\u0131N \u01DDn\u05DF\u15FA", "block.create.blue_sail": "\u05DF\u0131\u0250S \u01DDn\u05DF\u15FA", "block.create.blue_seat": "\u0287\u0250\u01DDS \u01DDn\u05DF\u15FA", "block.create.blue_valve_handle": "\u01DD\u05DFpu\u0250H \u01DD\u028C\u05DF\u0250\u039B \u01DDn\u05DF\u15FA", @@ -37,6 +39,7 @@ "block.create.brass_encased_shaft": "\u0287\u025F\u0250\u0265S p\u01DDs\u0250\u0254u\u018E ss\u0250\u0279\u15FA", "block.create.brass_funnel": "\u05DF\u01DDuun\u2132 ss\u0250\u0279\u15FA", "block.create.brass_tunnel": "\u05DF\u01DDuun\u27D8 ss\u0250\u0279\u15FA", + "block.create.brown_nixie_tube": "\u01DDqn\u27D8 \u01DD\u0131x\u0131N u\u028Do\u0279\u15FA", "block.create.brown_sail": "\u05DF\u0131\u0250S u\u028Do\u0279\u15FA", "block.create.brown_seat": "\u0287\u0250\u01DDS u\u028Do\u0279\u15FA", "block.create.brown_valve_handle": "\u01DD\u05DFpu\u0250H \u01DD\u028C\u05DF\u0250\u039B u\u028Do\u0279\u15FA", @@ -69,6 +72,7 @@ "block.create.crushing_wheel": "\u05DF\u01DD\u01DD\u0265M bu\u0131\u0265sn\u0279\u0186", "block.create.crushing_wheel_controller": "\u0279\u01DD\u05DF\u05DFo\u0279\u0287uo\u0186 \u05DF\u01DD\u01DD\u0265M bu\u0131\u0265sn\u0279\u0186", "block.create.cuckoo_clock": "\u029E\u0254o\u05DF\u0186 oo\u029E\u0254n\u0186", + "block.create.cyan_nixie_tube": "\u01DDqn\u27D8 \u01DD\u0131x\u0131N u\u0250\u028E\u0186", "block.create.cyan_sail": "\u05DF\u0131\u0250S u\u0250\u028E\u0186", "block.create.cyan_seat": "\u0287\u0250\u01DDS u\u0250\u028E\u0186", "block.create.cyan_valve_handle": "\u01DD\u05DFpu\u0250H \u01DD\u028C\u05DF\u0250\u039B u\u0250\u028E\u0186", @@ -175,9 +179,11 @@ "block.create.granite_cobblestone_stairs": "s\u0279\u0131\u0250\u0287S \u01DDuo\u0287s\u01DD\u05DFqqo\u0186 \u01DD\u0287\u0131u\u0250\u0279\u2141", "block.create.granite_cobblestone_wall": "\u05DF\u05DF\u0250M \u01DDuo\u0287s\u01DD\u05DFqqo\u0186 \u01DD\u0287\u0131u\u0250\u0279\u2141", "block.create.granite_pillar": "\u0279\u0250\u05DF\u05DF\u0131\u0500 \u01DD\u0287\u0131u\u0250\u0279\u2141", + "block.create.gray_nixie_tube": "\u01DDqn\u27D8 \u01DD\u0131x\u0131N \u028E\u0250\u0279\u2141", "block.create.gray_sail": "\u05DF\u0131\u0250S \u028E\u0250\u0279\u2141", "block.create.gray_seat": "\u0287\u0250\u01DDS \u028E\u0250\u0279\u2141", "block.create.gray_valve_handle": "\u01DD\u05DFpu\u0250H \u01DD\u028C\u05DF\u0250\u039B \u028E\u0250\u0279\u2141", + "block.create.green_nixie_tube": "\u01DDqn\u27D8 \u01DD\u0131x\u0131N u\u01DD\u01DD\u0279\u2141", "block.create.green_sail": "\u05DF\u0131\u0250S u\u01DD\u01DD\u0279\u2141", "block.create.green_seat": "\u0287\u0250\u01DDS u\u01DD\u01DD\u0279\u2141", "block.create.green_valve_handle": "\u01DD\u05DFpu\u0250H \u01DD\u028C\u05DF\u0250\u039B u\u01DD\u01DD\u0279\u2141", @@ -201,12 +207,15 @@ "block.create.layered_scoria": "\u0250\u0131\u0279o\u0254S p\u01DD\u0279\u01DD\u028E\u0250\uA780", "block.create.layered_weathered_limestone": "\u01DDuo\u0287s\u01DD\u026F\u0131\uA780 p\u01DD\u0279\u01DD\u0265\u0287\u0250\u01DDM p\u01DD\u0279\u01DD\u028E\u0250\uA780", "block.create.lectern_controller": "\u0279\u01DD\u05DF\u05DFo\u0279\u0287uo\u0186 u\u0279\u01DD\u0287\u0254\u01DD\uA780", + "block.create.light_blue_nixie_tube": "\u01DDqn\u27D8 \u01DD\u0131x\u0131N \u01DDn\u05DF\u15FA \u0287\u0265b\u0131\uA780", "block.create.light_blue_sail": "\u05DF\u0131\u0250S \u01DDn\u05DF\u15FA \u0287\u0265b\u0131\uA780", "block.create.light_blue_seat": "\u0287\u0250\u01DDS \u01DDn\u05DF\u15FA \u0287\u0265b\u0131\uA780", "block.create.light_blue_valve_handle": "\u01DD\u05DFpu\u0250H \u01DD\u028C\u05DF\u0250\u039B \u01DDn\u05DF\u15FA \u0287\u0265b\u0131\uA780", + "block.create.light_gray_nixie_tube": "\u01DDqn\u27D8 \u01DD\u0131x\u0131N \u028E\u0250\u0279\u2141 \u0287\u0265b\u0131\uA780", "block.create.light_gray_sail": "\u05DF\u0131\u0250S \u028E\u0250\u0279\u2141 \u0287\u0265b\u0131\uA780", "block.create.light_gray_seat": "\u0287\u0250\u01DDS \u028E\u0250\u0279\u2141 \u0287\u0265b\u0131\uA780", "block.create.light_gray_valve_handle": "\u01DD\u05DFpu\u0250H \u01DD\u028C\u05DF\u0250\u039B \u028E\u0250\u0279\u2141 \u0287\u0265b\u0131\uA780", + "block.create.lime_nixie_tube": "\u01DDqn\u27D8 \u01DD\u0131x\u0131N \u01DD\u026F\u0131\uA780", "block.create.lime_sail": "\u05DF\u0131\u0250S \u01DD\u026F\u0131\uA780", "block.create.lime_seat": "\u0287\u0250\u01DDS \u01DD\u026F\u0131\uA780", "block.create.lime_valve_handle": "\u01DD\u05DFpu\u0250H \u01DD\u028C\u05DF\u0250\u039B \u01DD\u026F\u0131\uA780", @@ -223,6 +232,7 @@ "block.create.limestone_pillar": "\u0279\u0250\u05DF\u05DF\u0131\u0500 \u01DDuo\u0287s\u01DD\u026F\u0131\uA780", "block.create.linear_chassis": "s\u0131ss\u0250\u0265\u0186 \u0279\u0250\u01DDu\u0131\uA780", "block.create.lit_blaze_burner": "\u0279\u01DDu\u0279n\u15FA \u01DDz\u0250\u05DF\u15FA \u0287\u0131\uA780", + "block.create.magenta_nixie_tube": "\u01DDqn\u27D8 \u01DD\u0131x\u0131N \u0250\u0287u\u01DDb\u0250W", "block.create.magenta_sail": "\u05DF\u0131\u0250S \u0250\u0287u\u01DDb\u0250W", "block.create.magenta_seat": "\u0287\u0250\u01DDS \u0250\u0287u\u01DDb\u0250W", "block.create.magenta_valve_handle": "\u01DD\u05DFpu\u0250H \u01DD\u028C\u05DF\u0250\u039B \u0250\u0287u\u01DDb\u0250W", @@ -307,6 +317,7 @@ "block.create.paved_weathered_limestone_stairs": "s\u0279\u0131\u0250\u0287S \u01DDuo\u0287s\u01DD\u026F\u0131\uA780 p\u01DD\u0279\u01DD\u0265\u0287\u0250\u01DDM p\u01DD\u028C\u0250\u0500", "block.create.paved_weathered_limestone_wall": "\u05DF\u05DF\u0250M \u01DDuo\u0287s\u01DD\u026F\u0131\uA780 p\u01DD\u0279\u01DD\u0265\u0287\u0250\u01DDM p\u01DD\u028C\u0250\u0500", "block.create.peculiar_bell": "\u05DF\u05DF\u01DD\u15FA \u0279\u0250\u0131\u05DFn\u0254\u01DD\u0500", + "block.create.pink_nixie_tube": "\u01DDqn\u27D8 \u01DD\u0131x\u0131N \u029Eu\u0131\u0500", "block.create.pink_sail": "\u05DF\u0131\u0250S \u029Eu\u0131\u0500", "block.create.pink_seat": "\u0287\u0250\u01DDS \u029Eu\u0131\u0500", "block.create.pink_valve_handle": "\u01DD\u05DFpu\u0250H \u01DD\u028C\u05DF\u0250\u039B \u029Eu\u0131\u0500", @@ -341,10 +352,12 @@ "block.create.powered_toggle_latch": "\u0265\u0254\u0287\u0250\uA780 \u01DD\u05DFbbo\u27D8 p\u01DD\u0279\u01DD\u028Do\u0500", "block.create.pulley_magnet": "\u0287\u01DDub\u0250W \u028E\u01DD\u05DF\u05DFn\u0500", "block.create.pulse_repeater": "\u0279\u01DD\u0287\u0250\u01DDd\u01DD\u1D1A \u01DDs\u05DFn\u0500", + "block.create.purple_nixie_tube": "\u01DDqn\u27D8 \u01DD\u0131x\u0131N \u01DD\u05DFd\u0279n\u0500", "block.create.purple_sail": "\u05DF\u0131\u0250S \u01DD\u05DFd\u0279n\u0500", "block.create.purple_seat": "\u0287\u0250\u01DDS \u01DD\u05DFd\u0279n\u0500", "block.create.purple_valve_handle": "\u01DD\u05DFpu\u0250H \u01DD\u028C\u05DF\u0250\u039B \u01DD\u05DFd\u0279n\u0500", "block.create.radial_chassis": "s\u0131ss\u0250\u0265\u0186 \u05DF\u0250\u0131p\u0250\u1D1A", + "block.create.red_nixie_tube": "\u01DDqn\u27D8 \u01DD\u0131x\u0131N p\u01DD\u1D1A", "block.create.red_sail": "\u05DF\u0131\u0250S p\u01DD\u1D1A", "block.create.red_seat": "\u0287\u0250\u01DDS p\u01DD\u1D1A", "block.create.red_valve_handle": "\u01DD\u05DFpu\u0250H \u01DD\u028C\u05DF\u0250\u039B p\u01DD\u1D1A", @@ -401,11 +414,13 @@ "block.create.weathered_limestone_cobblestone_wall": "\u05DF\u05DF\u0250M \u01DDuo\u0287s\u01DD\u05DFqqo\u0186 \u01DDuo\u0287s\u01DD\u026F\u0131\uA780 p\u01DD\u0279\u01DD\u0265\u0287\u0250\u01DDM", "block.create.weathered_limestone_pillar": "\u0279\u0250\u05DF\u05DF\u0131\u0500 \u01DDuo\u0287s\u01DD\u026F\u0131\uA780 p\u01DD\u0279\u01DD\u0265\u0287\u0250\u01DDM", "block.create.weighted_ejector": "\u0279o\u0287\u0254\u01DD\u0638\u018E p\u01DD\u0287\u0265b\u0131\u01DDM", + "block.create.white_nixie_tube": "\u01DDqn\u27D8 \u01DD\u0131x\u0131N \u01DD\u0287\u0131\u0265M", "block.create.white_sail": "\u05DF\u0131\u0250S \u01DD\u0287\u0131\u0265M", "block.create.white_seat": "\u0287\u0250\u01DDS \u01DD\u0287\u0131\u0265M", "block.create.white_valve_handle": "\u01DD\u05DFpu\u0250H \u01DD\u028C\u05DF\u0250\u039B \u01DD\u0287\u0131\u0265M", "block.create.windmill_bearing": "bu\u0131\u0279\u0250\u01DD\u15FA \u05DF\u05DF\u0131\u026Fpu\u0131M", "block.create.wooden_bracket": "\u0287\u01DD\u029E\u0254\u0250\u0279\u15FA u\u01DDpooM", + "block.create.yellow_nixie_tube": "\u01DDqn\u27D8 \u01DD\u0131x\u0131N \u028Do\u05DF\u05DF\u01DD\u028E", "block.create.yellow_sail": "\u05DF\u0131\u0250S \u028Do\u05DF\u05DF\u01DD\u028E", "block.create.yellow_seat": "\u0287\u0250\u01DDS \u028Do\u05DF\u05DF\u01DD\u028E", "block.create.yellow_valve_handle": "\u01DD\u05DFpu\u0250H \u01DD\u028C\u05DF\u0250\u039B \u028Do\u05DF\u05DF\u01DD\u028E", diff --git a/src/generated/resources/assets/create/lang/en_us.json b/src/generated/resources/assets/create/lang/en_us.json index d98b944a5..b9ad82d24 100644 --- a/src/generated/resources/assets/create/lang/en_us.json +++ b/src/generated/resources/assets/create/lang/en_us.json @@ -27,10 +27,12 @@ "block.create.belt": "Belt", "block.create.birch_window": "Birch Window", "block.create.birch_window_pane": "Birch Window Pane", + "block.create.black_nixie_tube": "Black Nixie Tube", "block.create.black_sail": "Black Sail", "block.create.black_seat": "Black Seat", "block.create.black_valve_handle": "Black Valve Handle", "block.create.blaze_burner": "Blaze Burner", + "block.create.blue_nixie_tube": "Blue Nixie Tube", "block.create.blue_sail": "Blue Sail", "block.create.blue_seat": "Blue Seat", "block.create.blue_valve_handle": "Blue Valve Handle", @@ -40,6 +42,7 @@ "block.create.brass_encased_shaft": "Brass Encased Shaft", "block.create.brass_funnel": "Brass Funnel", "block.create.brass_tunnel": "Brass Tunnel", + "block.create.brown_nixie_tube": "Brown Nixie Tube", "block.create.brown_sail": "Brown Sail", "block.create.brown_seat": "Brown Seat", "block.create.brown_valve_handle": "Brown Valve Handle", @@ -72,6 +75,7 @@ "block.create.crushing_wheel": "Crushing Wheel", "block.create.crushing_wheel_controller": "Crushing Wheel Controller", "block.create.cuckoo_clock": "Cuckoo Clock", + "block.create.cyan_nixie_tube": "Cyan Nixie Tube", "block.create.cyan_sail": "Cyan Sail", "block.create.cyan_seat": "Cyan Seat", "block.create.cyan_valve_handle": "Cyan Valve Handle", @@ -178,9 +182,11 @@ "block.create.granite_cobblestone_stairs": "Granite Cobblestone Stairs", "block.create.granite_cobblestone_wall": "Granite Cobblestone Wall", "block.create.granite_pillar": "Granite Pillar", + "block.create.gray_nixie_tube": "Gray Nixie Tube", "block.create.gray_sail": "Gray Sail", "block.create.gray_seat": "Gray Seat", "block.create.gray_valve_handle": "Gray Valve Handle", + "block.create.green_nixie_tube": "Green Nixie Tube", "block.create.green_sail": "Green Sail", "block.create.green_seat": "Green Seat", "block.create.green_valve_handle": "Green Valve Handle", @@ -204,12 +210,15 @@ "block.create.layered_scoria": "Layered Scoria", "block.create.layered_weathered_limestone": "Layered Weathered Limestone", "block.create.lectern_controller": "Lectern Controller", + "block.create.light_blue_nixie_tube": "Light Blue Nixie Tube", "block.create.light_blue_sail": "Light Blue Sail", "block.create.light_blue_seat": "Light Blue Seat", "block.create.light_blue_valve_handle": "Light Blue Valve Handle", + "block.create.light_gray_nixie_tube": "Light Gray Nixie Tube", "block.create.light_gray_sail": "Light Gray Sail", "block.create.light_gray_seat": "Light Gray Seat", "block.create.light_gray_valve_handle": "Light Gray Valve Handle", + "block.create.lime_nixie_tube": "Lime Nixie Tube", "block.create.lime_sail": "Lime Sail", "block.create.lime_seat": "Lime Seat", "block.create.lime_valve_handle": "Lime Valve Handle", @@ -226,6 +235,7 @@ "block.create.limestone_pillar": "Limestone Pillar", "block.create.linear_chassis": "Linear Chassis", "block.create.lit_blaze_burner": "Lit Blaze Burner", + "block.create.magenta_nixie_tube": "Magenta Nixie Tube", "block.create.magenta_sail": "Magenta Sail", "block.create.magenta_seat": "Magenta Seat", "block.create.magenta_valve_handle": "Magenta Valve Handle", @@ -310,6 +320,7 @@ "block.create.paved_weathered_limestone_stairs": "Paved Weathered Limestone Stairs", "block.create.paved_weathered_limestone_wall": "Paved Weathered Limestone Wall", "block.create.peculiar_bell": "Peculiar Bell", + "block.create.pink_nixie_tube": "Pink Nixie Tube", "block.create.pink_sail": "Pink Sail", "block.create.pink_seat": "Pink Seat", "block.create.pink_valve_handle": "Pink Valve Handle", @@ -344,10 +355,12 @@ "block.create.powered_toggle_latch": "Powered Toggle Latch", "block.create.pulley_magnet": "Pulley Magnet", "block.create.pulse_repeater": "Pulse Repeater", + "block.create.purple_nixie_tube": "Purple Nixie Tube", "block.create.purple_sail": "Purple Sail", "block.create.purple_seat": "Purple Seat", "block.create.purple_valve_handle": "Purple Valve Handle", "block.create.radial_chassis": "Radial Chassis", + "block.create.red_nixie_tube": "Red Nixie Tube", "block.create.red_sail": "Red Sail", "block.create.red_seat": "Red Seat", "block.create.red_valve_handle": "Red Valve Handle", @@ -404,11 +417,13 @@ "block.create.weathered_limestone_cobblestone_wall": "Weathered Limestone Cobblestone Wall", "block.create.weathered_limestone_pillar": "Weathered Limestone Pillar", "block.create.weighted_ejector": "Weighted Ejector", + "block.create.white_nixie_tube": "White Nixie Tube", "block.create.white_sail": "White Sail", "block.create.white_seat": "White Seat", "block.create.white_valve_handle": "White Valve Handle", "block.create.windmill_bearing": "Windmill Bearing", "block.create.wooden_bracket": "Wooden Bracket", + "block.create.yellow_nixie_tube": "Yellow Nixie Tube", "block.create.yellow_sail": "Yellow Sail", "block.create.yellow_seat": "Yellow Seat", "block.create.yellow_valve_handle": "Yellow Valve Handle", 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 60557279b..65507c9d9 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: 1092", + "_": "Missing Localizations: 1107", "_": "->------------------------] Game Elements [------------------------<-", @@ -28,10 +28,12 @@ "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_sail": "Schwarzes Segel", "block.create.black_seat": "Schwarzer Sitz", "block.create.black_valve_handle": "Schwarzer Ventilgriff", "block.create.blaze_burner": "Lohenbrenner", + "block.create.blue_nixie_tube": "UNLOCALIZED: Blue Nixie Tube", "block.create.blue_sail": "Blaues Segel", "block.create.blue_seat": "Blauer Sitz", "block.create.blue_valve_handle": "Blauer Ventilgriff", @@ -41,6 +43,7 @@ "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_sail": "Braunes Segel", "block.create.brown_seat": "Brauner Sitz", "block.create.brown_valve_handle": "Brauner Ventilgriff", @@ -73,6 +76,7 @@ "block.create.crushing_wheel": "Mahlwerkrad", "block.create.crushing_wheel_controller": "Mahlwerkrad Steurung", "block.create.cuckoo_clock": "Kuckucksuhr", + "block.create.cyan_nixie_tube": "UNLOCALIZED: Cyan Nixie Tube", "block.create.cyan_sail": "Türkises Segel", "block.create.cyan_seat": "Türkiser Sitz", "block.create.cyan_valve_handle": "Türkiser Ventilgriff", @@ -179,9 +183,11 @@ "block.create.granite_cobblestone_stairs": "Granitbruchtreppe", "block.create.granite_cobblestone_wall": "Granitbruchsteinmauer", "block.create.granite_pillar": "Granitsäule", + "block.create.gray_nixie_tube": "UNLOCALIZED: Gray Nixie Tube", "block.create.gray_sail": "Graues Segel", "block.create.gray_seat": "Grauer Sitz", "block.create.gray_valve_handle": "Grauer Ventilgriff", + "block.create.green_nixie_tube": "UNLOCALIZED: Green Nixie Tube", "block.create.green_sail": "Grünes Segel", "block.create.green_seat": "Grüner Sitz", "block.create.green_valve_handle": "Grüner Ventilgriff", @@ -205,12 +211,15 @@ "block.create.layered_scoria": "Geschichtete Schlacke", "block.create.layered_weathered_limestone": "Geschichteter Verwitterter Kalkstein", "block.create.lectern_controller": "UNLOCALIZED: Lectern Controller", + "block.create.light_blue_nixie_tube": "UNLOCALIZED: Light Blue Nixie Tube", "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_nixie_tube": "UNLOCALIZED: Light Gray Nixie Tube", "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_nixie_tube": "UNLOCALIZED: Lime Nixie Tube", "block.create.lime_sail": "Hellgrünes Segel", "block.create.lime_seat": "Hellgrüner Sitz", "block.create.lime_valve_handle": "Hellgrüner Ventilgriff", @@ -227,6 +236,7 @@ "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_sail": "Magenta Segel", "block.create.magenta_seat": "Magenta Sitz", "block.create.magenta_valve_handle": "Magenta Ventilgriff", @@ -311,6 +321,7 @@ "block.create.paved_weathered_limestone_stairs": "Gepflasterte Verwitterte Kalksteintreppe", "block.create.paved_weathered_limestone_wall": "Gepflasterte Verwitterte Kalksteinmauer", "block.create.peculiar_bell": "UNLOCALIZED: Peculiar Bell", + "block.create.pink_nixie_tube": "UNLOCALIZED: Pink Nixie Tube", "block.create.pink_sail": "Rosa Segel", "block.create.pink_seat": "Rosa Sitz", "block.create.pink_valve_handle": "Rosa Ventilgriff", @@ -345,10 +356,12 @@ "block.create.powered_toggle_latch": "T-Flipflop", "block.create.pulley_magnet": "Rollenmagnet", "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_valve_handle": "Lila Ventilgriff", "block.create.radial_chassis": "Drehgerüst", + "block.create.red_nixie_tube": "UNLOCALIZED: Red Nixie Tube", "block.create.red_sail": "Rote Segel", "block.create.red_seat": "Roter Sitz", "block.create.red_valve_handle": "Roter Ventilgriff", @@ -405,11 +418,13 @@ "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_nixie_tube": "UNLOCALIZED: White Nixie Tube", "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_nixie_tube": "UNLOCALIZED: Yellow Nixie Tube", "block.create.yellow_sail": "Gelbes Segel", "block.create.yellow_seat": "Gelber Sitz", "block.create.yellow_valve_handle": "Gelber Ventilgriff", 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 00a2ad479..51e8b1b3e 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: 855", + "_": "Missing Localizations: 870", "_": "->------------------------] Game Elements [------------------------<-", @@ -28,10 +28,12 @@ "block.create.belt": "Cinta", "block.create.birch_window": "Ventana de abedul", "block.create.birch_window_pane": "Panel de ventana de abedul", + "block.create.black_nixie_tube": "UNLOCALIZED: Black Nixie Tube", "block.create.black_sail": "Vela negra", "block.create.black_seat": "Asiento negro", "block.create.black_valve_handle": "Asa de válvula negra", "block.create.blaze_burner": "Quemador de Blaze", + "block.create.blue_nixie_tube": "UNLOCALIZED: Blue Nixie Tube", "block.create.blue_sail": "Vela azul", "block.create.blue_seat": "Asiento azul", "block.create.blue_valve_handle": "Asa de válvula azul", @@ -41,6 +43,7 @@ "block.create.brass_encased_shaft": "Eje revestido de latón", "block.create.brass_funnel": "Embudo de latón", "block.create.brass_tunnel": "Túnel de latón", + "block.create.brown_nixie_tube": "UNLOCALIZED: Brown Nixie Tube", "block.create.brown_sail": "Vela marrón", "block.create.brown_seat": "Asiento marrón", "block.create.brown_valve_handle": "Asa de válvula marrón", @@ -73,6 +76,7 @@ "block.create.crushing_wheel": "Rueda trituradora", "block.create.crushing_wheel_controller": "Controlador de Rueda trituradora", "block.create.cuckoo_clock": "Reloj Cucú", + "block.create.cyan_nixie_tube": "UNLOCALIZED: Cyan Nixie Tube", "block.create.cyan_sail": "Vela cian", "block.create.cyan_seat": "Asiento cian", "block.create.cyan_valve_handle": "Asa de válvula cian", @@ -179,9 +183,11 @@ "block.create.granite_cobblestone_stairs": "Escaleras de adoquínes de granito", "block.create.granite_cobblestone_wall": "Pared de adoquínes de granito", "block.create.granite_pillar": "Pilar de granito", + "block.create.gray_nixie_tube": "UNLOCALIZED: Gray Nixie Tube", "block.create.gray_sail": "Vela gris", "block.create.gray_seat": "Asiento gris", "block.create.gray_valve_handle": "Asa de válvula gris", + "block.create.green_nixie_tube": "UNLOCALIZED: Green Nixie Tube", "block.create.green_sail": "Vela verde", "block.create.green_seat": "Asiento verde", "block.create.green_valve_handle": "Asa de válvula verde", @@ -205,12 +211,15 @@ "block.create.layered_scoria": "Escoria estratificada", "block.create.layered_weathered_limestone": "Caliza erosionada estratificada", "block.create.lectern_controller": "UNLOCALIZED: Lectern Controller", + "block.create.light_blue_nixie_tube": "UNLOCALIZED: Light Blue Nixie Tube", "block.create.light_blue_sail": "Vela azul claro", "block.create.light_blue_seat": "Asiento azul claro", "block.create.light_blue_valve_handle": "Asa de válvula azul claro", + "block.create.light_gray_nixie_tube": "UNLOCALIZED: Light Gray Nixie Tube", "block.create.light_gray_sail": "Vela gris claro", "block.create.light_gray_seat": "Asiento gris claro", "block.create.light_gray_valve_handle": "Asa de válvula gris claro", + "block.create.lime_nixie_tube": "UNLOCALIZED: Lime Nixie Tube", "block.create.lime_sail": "Vela lima", "block.create.lime_seat": "Asiento lima", "block.create.lime_valve_handle": "Asa de válvula lima", @@ -227,6 +236,7 @@ "block.create.limestone_pillar": "Pilar de piedra caliza", "block.create.linear_chassis": "Chasis lineal", "block.create.lit_blaze_burner": "Quemador de Blaze encendido", + "block.create.magenta_nixie_tube": "UNLOCALIZED: Magenta Nixie Tube", "block.create.magenta_sail": "Vela magenta", "block.create.magenta_seat": "Asiento magenta", "block.create.magenta_valve_handle": "Asa de válvula magenta", @@ -311,6 +321,7 @@ "block.create.paved_weathered_limestone_stairs": "Escaleras de piedra caliza erosionada pavimentada", "block.create.paved_weathered_limestone_wall": "Pared de piedra caliza erosionada pavimentada", "block.create.peculiar_bell": "UNLOCALIZED: Peculiar Bell", + "block.create.pink_nixie_tube": "UNLOCALIZED: Pink Nixie Tube", "block.create.pink_sail": "Vela rosa", "block.create.pink_seat": "Asiento rosa", "block.create.pink_valve_handle": "Asa de válvula rosa", @@ -345,10 +356,12 @@ "block.create.powered_toggle_latch": "Palanca de cierre motorizada", "block.create.pulley_magnet": "Imán de la polea", "block.create.pulse_repeater": "Repetidor de pulsos de Redstone", + "block.create.purple_nixie_tube": "UNLOCALIZED: Purple Nixie Tube", "block.create.purple_sail": "Vela morada", "block.create.purple_seat": "Asiento morado", "block.create.purple_valve_handle": "Asa de válvula morada", "block.create.radial_chassis": "Chasis radial", + "block.create.red_nixie_tube": "UNLOCALIZED: Red Nixie Tube", "block.create.red_sail": "Vela roja", "block.create.red_seat": "Asiento rojo", "block.create.red_valve_handle": "Asa de válvula roja", @@ -405,11 +418,13 @@ "block.create.weathered_limestone_cobblestone_wall": "Pared de adoquínes de piedra caliza erosionada", "block.create.weathered_limestone_pillar": "Pilar de piedra caliza erosionada", "block.create.weighted_ejector": "UNLOCALIZED: Weighted Ejector", + "block.create.white_nixie_tube": "UNLOCALIZED: White Nixie Tube", "block.create.white_sail": "Vela blanca", "block.create.white_seat": "Asiento blanco", "block.create.white_valve_handle": "Asa de válvula blanco", "block.create.windmill_bearing": "Rodamiento del molino de viento", "block.create.wooden_bracket": "Soporte de madera para ejes", + "block.create.yellow_nixie_tube": "UNLOCALIZED: Yellow Nixie Tube", "block.create.yellow_sail": "Vela amarilla", "block.create.yellow_seat": "Asiento amarillo", "block.create.yellow_valve_handle": "Asa de válvula amarillo", diff --git a/src/generated/resources/assets/create/lang/unfinished/es_mx.json b/src/generated/resources/assets/create/lang/unfinished/es_mx.json index 65dfbb877..e2fc752ad 100644 --- a/src/generated/resources/assets/create/lang/unfinished/es_mx.json +++ b/src/generated/resources/assets/create/lang/unfinished/es_mx.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 1459", + "_": "Missing Localizations: 1474", "_": "->------------------------] Game Elements [------------------------<-", @@ -28,10 +28,12 @@ "block.create.belt": "Correa", "block.create.birch_window": "Ventana de Abedul", "block.create.birch_window_pane": "Panel de Ventana de Abedul", + "block.create.black_nixie_tube": "UNLOCALIZED: Black Nixie Tube", "block.create.black_sail": "Vela Negra", "block.create.black_seat": "Asiento Negro", "block.create.black_valve_handle": "Manija de Válvula Negra", "block.create.blaze_burner": "Quemador de Blaze", + "block.create.blue_nixie_tube": "UNLOCALIZED: Blue Nixie Tube", "block.create.blue_sail": "Vela Azul", "block.create.blue_seat": "Asiento Azul", "block.create.blue_valve_handle": "Manija de Válvula Azul", @@ -41,6 +43,7 @@ "block.create.brass_encased_shaft": "Eje empotrado de Latón", "block.create.brass_funnel": "Embudo de Latón", "block.create.brass_tunnel": "Túnel de Latón", + "block.create.brown_nixie_tube": "UNLOCALIZED: Brown Nixie Tube", "block.create.brown_sail": "Vela Café", "block.create.brown_seat": "Asiento Café ", "block.create.brown_valve_handle": "Manija de Válvula Café", @@ -73,6 +76,7 @@ "block.create.crushing_wheel": "Rueda Trituradora", "block.create.crushing_wheel_controller": "UNLOCALIZED:Crushing Wheel Controller", "block.create.cuckoo_clock": "Reloj Cuco", + "block.create.cyan_nixie_tube": "UNLOCALIZED: Cyan Nixie Tube", "block.create.cyan_sail": "Vela Cian", "block.create.cyan_seat": "Asiento Cian", "block.create.cyan_valve_handle": "Manija de Válvula Cian", @@ -179,9 +183,11 @@ "block.create.granite_cobblestone_stairs": "Escaleras de Piedra Labrada de Granito", "block.create.granite_cobblestone_wall": "Pared de Piedra Labrada de Granito", "block.create.granite_pillar": "Pilar de Granito", + "block.create.gray_nixie_tube": "UNLOCALIZED: Gray Nixie Tube", "block.create.gray_sail": "Vela Gris", "block.create.gray_seat": "Asiento Gris", "block.create.gray_valve_handle": "Manija de Válvula Gris", + "block.create.green_nixie_tube": "UNLOCALIZED: Green Nixie Tube", "block.create.green_sail": "Vela Verde", "block.create.green_seat": "Asiento Verde", "block.create.green_valve_handle": "Manija de Válvula Verde", @@ -205,12 +211,15 @@ "block.create.layered_scoria": "Escoria en Capas", "block.create.layered_weathered_limestone": "Caliza Meteorizada en Capas", "block.create.lectern_controller": "UNLOCALIZED: Lectern Controller", + "block.create.light_blue_nixie_tube": "UNLOCALIZED: Light Blue Nixie Tube", "block.create.light_blue_sail": "Vela Azul Claro", "block.create.light_blue_seat": "Asiento Azul Claro", "block.create.light_blue_valve_handle": "Manija de Válvula Azul Claro", + "block.create.light_gray_nixie_tube": "UNLOCALIZED: Light Gray Nixie Tube", "block.create.light_gray_sail": "Vela Gris Claro", "block.create.light_gray_seat": "Asiento Gris Claro", "block.create.light_gray_valve_handle": "Manija de Válvula Gris Claro", + "block.create.lime_nixie_tube": "UNLOCALIZED: Lime Nixie Tube", "block.create.lime_sail": "Vela Verde Lima", "block.create.lime_seat": "Asiento Verde Lima", "block.create.lime_valve_handle": "Manija de Válvula Verde Lima", @@ -227,6 +236,7 @@ "block.create.limestone_pillar": "Pilar de Caliza", "block.create.linear_chassis": "Chasis Lineal", "block.create.lit_blaze_burner": "Quemador de Blaze Iluminado", + "block.create.magenta_nixie_tube": "UNLOCALIZED: Magenta Nixie Tube", "block.create.magenta_sail": "Vela Magenta", "block.create.magenta_seat": "Asiento Magenta", "block.create.magenta_valve_handle": "Manija de Válvula Magenta", @@ -311,6 +321,7 @@ "block.create.paved_weathered_limestone_stairs": "Escaleras de Caliza Meteorizada Pavimentada", "block.create.paved_weathered_limestone_wall": "Pared de Caliza Meteorizada Pavimentada", "block.create.peculiar_bell": "UNLOCALIZED: Peculiar Bell", + "block.create.pink_nixie_tube": "UNLOCALIZED: Pink Nixie Tube", "block.create.pink_sail": "Vela Rosa", "block.create.pink_seat": "Asiento Rosa", "block.create.pink_valve_handle": "Manija de Válvula Rosa", @@ -345,10 +356,12 @@ "block.create.powered_toggle_latch": "Cerradura Electrica de Palanca", "block.create.pulley_magnet": "Polea con Imán", "block.create.pulse_repeater": "Repetidor de Pulso", + "block.create.purple_nixie_tube": "UNLOCALIZED: Purple Nixie Tube", "block.create.purple_sail": "Vela Morada", "block.create.purple_seat": "Asiento Morado", "block.create.purple_valve_handle": "Manija de Válvula Morada", "block.create.radial_chassis": "Chasis Radial", + "block.create.red_nixie_tube": "UNLOCALIZED: Red Nixie Tube", "block.create.red_sail": "Vela Roja", "block.create.red_seat": "Asiento Rojo", "block.create.red_valve_handle": "Manija de Válvula Roja", @@ -405,11 +418,13 @@ "block.create.weathered_limestone_cobblestone_wall": "Pared de Piedra Labrada de Caliza Meteorizada", "block.create.weathered_limestone_pillar": "Pilar de Caliza Meteorizada", "block.create.weighted_ejector": "UNLOCALIZED: Weighted Ejector", + "block.create.white_nixie_tube": "UNLOCALIZED: White Nixie Tube", "block.create.white_sail": "Vela Blanca", "block.create.white_seat": "Asiento Blanco", "block.create.white_valve_handle": "Manija de Válvula Blanca", "block.create.windmill_bearing": "Rodamiento de Molino de Viento", "block.create.wooden_bracket": "Soporte de Madera", + "block.create.yellow_nixie_tube": "UNLOCALIZED: Yellow Nixie Tube", "block.create.yellow_sail": "Vela Amarilla", "block.create.yellow_seat": "Asiento Amarillo", "block.create.yellow_valve_handle": "Manija de Válvula Amarilla", diff --git a/src/generated/resources/assets/create/lang/unfinished/fr_fr.json b/src/generated/resources/assets/create/lang/unfinished/fr_fr.json index efb79f420..54bab7e32 100644 --- a/src/generated/resources/assets/create/lang/unfinished/fr_fr.json +++ b/src/generated/resources/assets/create/lang/unfinished/fr_fr.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 1344", + "_": "Missing Localizations: 1359", "_": "->------------------------] Game Elements [------------------------<-", @@ -28,10 +28,12 @@ "block.create.belt": "Tapis roulant", "block.create.birch_window": "Fenêtre en bouleau", "block.create.birch_window_pane": "Vitre en bouleau", + "block.create.black_nixie_tube": "UNLOCALIZED: Black Nixie Tube", "block.create.black_sail": "Voile noire", "block.create.black_seat": "Siège noir", "block.create.black_valve_handle": "Vanne noire", "block.create.blaze_burner": "Brûleur à blaze", + "block.create.blue_nixie_tube": "UNLOCALIZED: Blue Nixie Tube", "block.create.blue_sail": "Voile bleue", "block.create.blue_seat": "Siège bleu", "block.create.blue_valve_handle": "Vanne bleue", @@ -41,6 +43,7 @@ "block.create.brass_encased_shaft": "Rotor dans un revêtement en laiton", "block.create.brass_funnel": "Entonnoir en laiton", "block.create.brass_tunnel": "Tunnel en laiton", + "block.create.brown_nixie_tube": "UNLOCALIZED: Brown Nixie Tube", "block.create.brown_sail": "Voile brune", "block.create.brown_seat": "Siège brun", "block.create.brown_valve_handle": "Vanne brune", @@ -73,6 +76,7 @@ "block.create.crushing_wheel": "Roue de concassage", "block.create.crushing_wheel_controller": "Contrôleur de roue de concassage", "block.create.cuckoo_clock": "Horloge à coucou", + "block.create.cyan_nixie_tube": "UNLOCALIZED: Cyan Nixie Tube", "block.create.cyan_sail": "Voile cyan", "block.create.cyan_seat": "Siège cyan", "block.create.cyan_valve_handle": "Vanne cyan", @@ -179,9 +183,11 @@ "block.create.granite_cobblestone_stairs": "UNLOCALIZED: Granite Cobblestone Stairs", "block.create.granite_cobblestone_wall": "UNLOCALIZED: Granite Cobblestone Wall", "block.create.granite_pillar": "UNLOCALIZED: Granite Pillar", + "block.create.gray_nixie_tube": "UNLOCALIZED: Gray Nixie Tube", "block.create.gray_sail": "UNLOCALIZED: Gray Sail", "block.create.gray_seat": "UNLOCALIZED: Gray Seat", "block.create.gray_valve_handle": "UNLOCALIZED: Gray Valve Handle", + "block.create.green_nixie_tube": "UNLOCALIZED: Green Nixie Tube", "block.create.green_sail": "UNLOCALIZED: Green Sail", "block.create.green_seat": "UNLOCALIZED: Green Seat", "block.create.green_valve_handle": "UNLOCALIZED: Green Valve Handle", @@ -205,12 +211,15 @@ "block.create.layered_scoria": "UNLOCALIZED: Layered Scoria", "block.create.layered_weathered_limestone": "UNLOCALIZED: Layered Weathered Limestone", "block.create.lectern_controller": "UNLOCALIZED: Lectern Controller", + "block.create.light_blue_nixie_tube": "UNLOCALIZED: Light Blue Nixie Tube", "block.create.light_blue_sail": "UNLOCALIZED: Light Blue Sail", "block.create.light_blue_seat": "UNLOCALIZED: Light Blue Seat", "block.create.light_blue_valve_handle": "UNLOCALIZED: Light Blue Valve Handle", + "block.create.light_gray_nixie_tube": "UNLOCALIZED: Light Gray Nixie Tube", "block.create.light_gray_sail": "UNLOCALIZED: Light Gray Sail", "block.create.light_gray_seat": "UNLOCALIZED: Light Gray Seat", "block.create.light_gray_valve_handle": "UNLOCALIZED: Light Gray Valve Handle", + "block.create.lime_nixie_tube": "UNLOCALIZED: Lime Nixie Tube", "block.create.lime_sail": "UNLOCALIZED: Lime Sail", "block.create.lime_seat": "UNLOCALIZED: Lime Seat", "block.create.lime_valve_handle": "UNLOCALIZED: Lime Valve Handle", @@ -227,6 +236,7 @@ "block.create.limestone_pillar": "Pillier de calcaire", "block.create.linear_chassis": "Châssis linéaire", "block.create.lit_blaze_burner": "UNLOCALIZED: Lit Blaze Burner", + "block.create.magenta_nixie_tube": "UNLOCALIZED: Magenta Nixie Tube", "block.create.magenta_sail": "UNLOCALIZED: Magenta Sail", "block.create.magenta_seat": "UNLOCALIZED: Magenta Seat", "block.create.magenta_valve_handle": "UNLOCALIZED: Magenta Valve Handle", @@ -311,6 +321,7 @@ "block.create.paved_weathered_limestone_stairs": "UNLOCALIZED: Paved Weathered Limestone Stairs", "block.create.paved_weathered_limestone_wall": "UNLOCALIZED: Paved Weathered Limestone Wall", "block.create.peculiar_bell": "UNLOCALIZED: Peculiar Bell", + "block.create.pink_nixie_tube": "UNLOCALIZED: Pink Nixie Tube", "block.create.pink_sail": "UNLOCALIZED: Pink Sail", "block.create.pink_seat": "UNLOCALIZED: Pink Seat", "block.create.pink_valve_handle": "UNLOCALIZED: Pink Valve Handle", @@ -345,10 +356,12 @@ "block.create.powered_toggle_latch": "Verrou alimenté à bascule", "block.create.pulley_magnet": "Aimant de poulie", "block.create.pulse_repeater": "Répéteur d'impulsions", + "block.create.purple_nixie_tube": "UNLOCALIZED: Purple Nixie Tube", "block.create.purple_sail": "UNLOCALIZED: Purple Sail", "block.create.purple_seat": "UNLOCALIZED: Purple Seat", "block.create.purple_valve_handle": "UNLOCALIZED: Purple Valve Handle", "block.create.radial_chassis": "Châssis radial", + "block.create.red_nixie_tube": "UNLOCALIZED: Red Nixie Tube", "block.create.red_sail": "UNLOCALIZED: Red Sail", "block.create.red_seat": "UNLOCALIZED: Red Seat", "block.create.red_valve_handle": "UNLOCALIZED: Red Valve Handle", @@ -405,11 +418,13 @@ "block.create.weathered_limestone_cobblestone_wall": "UNLOCALIZED: Weathered Limestone Cobblestone Wall", "block.create.weathered_limestone_pillar": "Pillier de Calcaire altéré", "block.create.weighted_ejector": "UNLOCALIZED: Weighted Ejector", + "block.create.white_nixie_tube": "UNLOCALIZED: White Nixie Tube", "block.create.white_sail": "UNLOCALIZED: White Sail", "block.create.white_seat": "UNLOCALIZED: White Seat", "block.create.white_valve_handle": "UNLOCALIZED: White Valve Handle", "block.create.windmill_bearing": "UNLOCALIZED: Windmill Bearing", "block.create.wooden_bracket": "UNLOCALIZED: Wooden Bracket", + "block.create.yellow_nixie_tube": "UNLOCALIZED: Yellow Nixie Tube", "block.create.yellow_sail": "UNLOCALIZED: Yellow Sail", "block.create.yellow_seat": "UNLOCALIZED: Yellow Seat", "block.create.yellow_valve_handle": "UNLOCALIZED: Yellow Valve Handle", diff --git a/src/generated/resources/assets/create/lang/unfinished/it_it.json b/src/generated/resources/assets/create/lang/unfinished/it_it.json index 734ef9bcb..64df657de 100644 --- a/src/generated/resources/assets/create/lang/unfinished/it_it.json +++ b/src/generated/resources/assets/create/lang/unfinished/it_it.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 872", + "_": "Missing Localizations: 887", "_": "->------------------------] Game Elements [------------------------<-", @@ -28,10 +28,12 @@ "block.create.belt": "Nastro meccanico", "block.create.birch_window": "Finestra di betulla", "block.create.birch_window_pane": "Pannello di finestra di betulla", + "block.create.black_nixie_tube": "UNLOCALIZED: Black Nixie Tube", "block.create.black_sail": "Vela nera", "block.create.black_seat": "Sedile nero", "block.create.black_valve_handle": "Maniglia per valvola nera", "block.create.blaze_burner": "Inceneritore di blaze", + "block.create.blue_nixie_tube": "UNLOCALIZED: Blue Nixie Tube", "block.create.blue_sail": "Vela blu", "block.create.blue_seat": "Sedile blu", "block.create.blue_valve_handle": "Maniglia per valvola blu", @@ -41,6 +43,7 @@ "block.create.brass_encased_shaft": "Albero incassato di ottone", "block.create.brass_funnel": "Imbuto di ottone", "block.create.brass_tunnel": "Tunnel di ottone", + "block.create.brown_nixie_tube": "UNLOCALIZED: Brown Nixie Tube", "block.create.brown_sail": "Vela marrone", "block.create.brown_seat": "Sedile marrone", "block.create.brown_valve_handle": "Maniglia per valvola marrone", @@ -73,6 +76,7 @@ "block.create.crushing_wheel": "Ruota di frantumazione", "block.create.crushing_wheel_controller": "Telecomando per ruota di frantumazione", "block.create.cuckoo_clock": "Orologio a cucù", + "block.create.cyan_nixie_tube": "UNLOCALIZED: Cyan Nixie Tube", "block.create.cyan_sail": "Vela ciano", "block.create.cyan_seat": "Sedile ciano", "block.create.cyan_valve_handle": "Maniglia per valvola ciano", @@ -179,9 +183,11 @@ "block.create.granite_cobblestone_stairs": "Scalini di pietrisco di granito", "block.create.granite_cobblestone_wall": "Muretto di pietrisco di granito", "block.create.granite_pillar": "Pilastro di granito", + "block.create.gray_nixie_tube": "UNLOCALIZED: Gray Nixie Tube", "block.create.gray_sail": "Vela grigia", "block.create.gray_seat": "Sedile grigio", "block.create.gray_valve_handle": "Maniglia per valvola grigia", + "block.create.green_nixie_tube": "UNLOCALIZED: Green Nixie Tube", "block.create.green_sail": "Vela verde", "block.create.green_seat": "Sedile verde", "block.create.green_valve_handle": "Maniglia per valvola verde", @@ -205,12 +211,15 @@ "block.create.layered_scoria": "Scoria stratificata", "block.create.layered_weathered_limestone": "Calcare consumato stratificato", "block.create.lectern_controller": "UNLOCALIZED: Lectern Controller", + "block.create.light_blue_nixie_tube": "UNLOCALIZED: Light Blue Nixie Tube", "block.create.light_blue_sail": "Vela azzurra", "block.create.light_blue_seat": "Sedile azzurro", "block.create.light_blue_valve_handle": "Maniglia per valvola azzurra", + "block.create.light_gray_nixie_tube": "UNLOCALIZED: Light Gray Nixie Tube", "block.create.light_gray_sail": "Vela grigio chiaro", "block.create.light_gray_seat": "Sedile grigio chiaro", "block.create.light_gray_valve_handle": "Maniglia per valvola grigio chiaro", + "block.create.lime_nixie_tube": "UNLOCALIZED: Lime Nixie Tube", "block.create.lime_sail": "Vela lime", "block.create.lime_seat": "Sedile lime", "block.create.lime_valve_handle": "Maniglia per valvola lime", @@ -227,6 +236,7 @@ "block.create.limestone_pillar": "Pilastro di calcare", "block.create.linear_chassis": "Telaio lineare", "block.create.lit_blaze_burner": "Inceneritore di blaze acceso", + "block.create.magenta_nixie_tube": "UNLOCALIZED: Magenta Nixie Tube", "block.create.magenta_sail": "Vela magenta", "block.create.magenta_seat": "Sedile magenta", "block.create.magenta_valve_handle": "Maniglia per valvola magenta", @@ -311,6 +321,7 @@ "block.create.paved_weathered_limestone_stairs": "Scalini di calcare consumato lastricato", "block.create.paved_weathered_limestone_wall": "Muretto di calcare consumato lastricato", "block.create.peculiar_bell": "UNLOCALIZED: Peculiar Bell", + "block.create.pink_nixie_tube": "UNLOCALIZED: Pink Nixie Tube", "block.create.pink_sail": "Vela rosa", "block.create.pink_seat": "Sedile rosa", "block.create.pink_valve_handle": "Maniglia per valvola rosa", @@ -345,10 +356,12 @@ "block.create.powered_toggle_latch": "Leva alimentata alterata", "block.create.pulley_magnet": "Magnete della carrucola", "block.create.pulse_repeater": "Ripetitore di impulsi", + "block.create.purple_nixie_tube": "UNLOCALIZED: Purple Nixie Tube", "block.create.purple_sail": "Vela viola", "block.create.purple_seat": "Sedile viola", "block.create.purple_valve_handle": "Maniglia per valvola viola", "block.create.radial_chassis": "Telaio radiale", + "block.create.red_nixie_tube": "UNLOCALIZED: Red Nixie Tube", "block.create.red_sail": "Vela rossa", "block.create.red_seat": "Sedile rosso", "block.create.red_valve_handle": "Maniglia per valvola rossa", @@ -405,11 +418,13 @@ "block.create.weathered_limestone_cobblestone_wall": "Muretto di pietrisco di calcare consumato", "block.create.weathered_limestone_pillar": "Pilastro di calcare consumato", "block.create.weighted_ejector": "UNLOCALIZED: Weighted Ejector", + "block.create.white_nixie_tube": "UNLOCALIZED: White Nixie Tube", "block.create.white_sail": "Vela bianca", "block.create.white_seat": "Sedile bianco", "block.create.white_valve_handle": "Maniglia per valvola bianca", "block.create.windmill_bearing": "Supporto per mulino a vento", "block.create.wooden_bracket": "Supporto di legno", + "block.create.yellow_nixie_tube": "UNLOCALIZED: Yellow Nixie Tube", "block.create.yellow_sail": "Vela gialla", "block.create.yellow_seat": "Sedile giallo", "block.create.yellow_valve_handle": "Maniglia per valvola gialla", diff --git a/src/generated/resources/assets/create/lang/unfinished/ja_jp.json b/src/generated/resources/assets/create/lang/unfinished/ja_jp.json index d43365133..7d1b429e8 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ja_jp.json +++ b/src/generated/resources/assets/create/lang/unfinished/ja_jp.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 4", + "_": "Missing Localizations: 19", "_": "->------------------------] Game Elements [------------------------<-", @@ -28,10 +28,12 @@ "block.create.belt": "メカニカルベルト", "block.create.birch_window": "シラカバの窓", "block.create.birch_window_pane": "シラカバの窓板", + "block.create.black_nixie_tube": "UNLOCALIZED: Black Nixie Tube", "block.create.black_sail": "黒色の帆", "block.create.black_seat": "黒色のシート", "block.create.black_valve_handle": "黒色のバルブハンドル", "block.create.blaze_burner": "ブレイズバーナー", + "block.create.blue_nixie_tube": "UNLOCALIZED: Blue Nixie Tube", "block.create.blue_sail": "青色の帆", "block.create.blue_seat": "青色のシート", "block.create.blue_valve_handle": "青色のバルブハンドル", @@ -41,6 +43,7 @@ "block.create.brass_encased_shaft": "真鍮のケース入りシャフト", "block.create.brass_funnel": "真鍮ファンネル", "block.create.brass_tunnel": "真鍮トンネル", + "block.create.brown_nixie_tube": "UNLOCALIZED: Brown Nixie Tube", "block.create.brown_sail": "茶色の帆", "block.create.brown_seat": "茶色のシート", "block.create.brown_valve_handle": "茶色のバルブハンドル", @@ -73,6 +76,7 @@ "block.create.crushing_wheel": "破砕ホイール", "block.create.crushing_wheel_controller": "破砕ホイールコントローラー", "block.create.cuckoo_clock": "鳩時計", + "block.create.cyan_nixie_tube": "UNLOCALIZED: Cyan Nixie Tube", "block.create.cyan_sail": "水色の帆", "block.create.cyan_seat": "水色のシート", "block.create.cyan_valve_handle": "水色のバルブハンドル", @@ -179,9 +183,11 @@ "block.create.granite_cobblestone_stairs": "花崗岩の丸石の階段", "block.create.granite_cobblestone_wall": "花崗岩の丸石の塀", "block.create.granite_pillar": "花崗岩の柱", + "block.create.gray_nixie_tube": "UNLOCALIZED: Gray Nixie Tube", "block.create.gray_sail": "灰色の帆", "block.create.gray_seat": "灰色のシート", "block.create.gray_valve_handle": "灰色のバルブハンドル", + "block.create.green_nixie_tube": "UNLOCALIZED: Green Nixie Tube", "block.create.green_sail": "緑色の帆", "block.create.green_seat": "緑色のシート", "block.create.green_valve_handle": "緑色のバルブハンドル", @@ -205,12 +211,15 @@ "block.create.layered_scoria": "スコリアの組石", "block.create.layered_weathered_limestone": "風化した石灰岩の組石", "block.create.lectern_controller": "書見台コントローラー", + "block.create.light_blue_nixie_tube": "UNLOCALIZED: Light Blue Nixie Tube", "block.create.light_blue_sail": "空色の帆", "block.create.light_blue_seat": "空色のシート", "block.create.light_blue_valve_handle": "空色のバルブハンドル", + "block.create.light_gray_nixie_tube": "UNLOCALIZED: Light Gray Nixie Tube", "block.create.light_gray_sail": "薄灰色の帆", "block.create.light_gray_seat": "薄灰色のシート", "block.create.light_gray_valve_handle": "薄灰色のバルブハンドル", + "block.create.lime_nixie_tube": "UNLOCALIZED: Lime Nixie Tube", "block.create.lime_sail": "黄緑色の帆", "block.create.lime_seat": "黄緑色のシート", "block.create.lime_valve_handle": "黄緑色のバルブハンドル", @@ -227,6 +236,7 @@ "block.create.limestone_pillar": "石灰岩の柱", "block.create.linear_chassis": "リニアシャーシ", "block.create.lit_blaze_burner": "燃焼中のブレイズバーナー", + "block.create.magenta_nixie_tube": "UNLOCALIZED: Magenta Nixie Tube", "block.create.magenta_sail": "赤紫色の帆", "block.create.magenta_seat": "赤紫色のシート", "block.create.magenta_valve_handle": "赤紫色のバルブハンドル", @@ -311,6 +321,7 @@ "block.create.paved_weathered_limestone_stairs": "舗装された風化した石灰岩の階段", "block.create.paved_weathered_limestone_wall": "舗装された風化した石灰岩の塀", "block.create.peculiar_bell": "風変わりな鐘", + "block.create.pink_nixie_tube": "UNLOCALIZED: Pink Nixie Tube", "block.create.pink_sail": "桃色の帆", "block.create.pink_seat": "桃色のシート", "block.create.pink_valve_handle": "桃色のバルブハンドル", @@ -345,10 +356,12 @@ "block.create.powered_toggle_latch": "パワードトグルラッチ", "block.create.pulley_magnet": "プーリーマグネット", "block.create.pulse_repeater": "パルスリピーター", + "block.create.purple_nixie_tube": "UNLOCALIZED: Purple Nixie Tube", "block.create.purple_sail": "紫色の帆", "block.create.purple_seat": "紫色のシート", "block.create.purple_valve_handle": "紫色のバルブハンドル", "block.create.radial_chassis": "ラジアルシャーシ", + "block.create.red_nixie_tube": "UNLOCALIZED: Red Nixie Tube", "block.create.red_sail": "赤色の帆", "block.create.red_seat": "赤色のシート", "block.create.red_valve_handle": "赤色のバルブハンドル", @@ -405,11 +418,13 @@ "block.create.weathered_limestone_cobblestone_wall": "風化した石灰岩の丸石の塀", "block.create.weathered_limestone_pillar": "風化した石灰岩の柱", "block.create.weighted_ejector": "重量射出機", + "block.create.white_nixie_tube": "UNLOCALIZED: White Nixie Tube", "block.create.white_sail": "白色の帆", "block.create.white_seat": "白色のシート", "block.create.white_valve_handle": "白色のバルブハンドル", "block.create.windmill_bearing": "風車ベアリング", "block.create.wooden_bracket": "木製ブラケット", + "block.create.yellow_nixie_tube": "UNLOCALIZED: Yellow Nixie Tube", "block.create.yellow_sail": "黄色の帆", "block.create.yellow_seat": "黄色のシート", "block.create.yellow_valve_handle": "黄色のバルブハンドル", diff --git a/src/generated/resources/assets/create/lang/unfinished/ko_kr.json b/src/generated/resources/assets/create/lang/unfinished/ko_kr.json index 50285b8c0..14dbe6151 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ko_kr.json +++ b/src/generated/resources/assets/create/lang/unfinished/ko_kr.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 250", + "_": "Missing Localizations: 265", "_": "->------------------------] Game Elements [------------------------<-", @@ -28,10 +28,12 @@ "block.create.belt": "벨트", "block.create.birch_window": "자작나무 판자 창문", "block.create.birch_window_pane": "자작나무 판자 창문판", + "block.create.black_nixie_tube": "UNLOCALIZED: Black Nixie Tube", "block.create.black_sail": "검은색 캔버스", "block.create.black_seat": "검은색 좌석", "block.create.black_valve_handle": "검은색 밸브 손잡이", "block.create.blaze_burner": "블레이즈 가열기", + "block.create.blue_nixie_tube": "UNLOCALIZED: Blue Nixie Tube", "block.create.blue_sail": "파란색 캔버스", "block.create.blue_seat": "파란색 좌석", "block.create.blue_valve_handle": "파란색 밸브 손잡이", @@ -41,6 +43,7 @@ "block.create.brass_encased_shaft": "황동 틀을 씌운 축", "block.create.brass_funnel": "황동 퍼널", "block.create.brass_tunnel": "황동 터널", + "block.create.brown_nixie_tube": "UNLOCALIZED: Brown Nixie Tube", "block.create.brown_sail": "갈색 캔버스", "block.create.brown_seat": "갈색 좌석", "block.create.brown_valve_handle": "갈색 밸브 손잡이", @@ -73,6 +76,7 @@ "block.create.crushing_wheel": "분쇄용 바퀴", "block.create.crushing_wheel_controller": "분쇄용 바퀴 제어기", "block.create.cuckoo_clock": "뻐꾸기시계", + "block.create.cyan_nixie_tube": "UNLOCALIZED: Cyan Nixie Tube", "block.create.cyan_sail": "청록색 캔버스", "block.create.cyan_seat": "청록색 좌석", "block.create.cyan_valve_handle": "청록색 밸브 손잡이", @@ -179,9 +183,11 @@ "block.create.granite_cobblestone_stairs": "화강암 조약돌 계단", "block.create.granite_cobblestone_wall": "화강암 조약돌 담장", "block.create.granite_pillar": "화강암 기둥", + "block.create.gray_nixie_tube": "UNLOCALIZED: Gray Nixie Tube", "block.create.gray_sail": "회색 캔버스", "block.create.gray_seat": "회색 좌석", "block.create.gray_valve_handle": "회색 밸브 손잡이", + "block.create.green_nixie_tube": "UNLOCALIZED: Green Nixie Tube", "block.create.green_sail": "초록색 캔버스", "block.create.green_seat": "초록색 좌석", "block.create.green_valve_handle": "초록색 밸브 손잡이", @@ -205,12 +211,15 @@ "block.create.layered_scoria": "틀 스코리아", "block.create.layered_weathered_limestone": "틀 풍화된 석회암", "block.create.lectern_controller": "UNLOCALIZED: Lectern Controller", + "block.create.light_blue_nixie_tube": "UNLOCALIZED: Light Blue Nixie Tube", "block.create.light_blue_sail": "하늘색 캔버스", "block.create.light_blue_seat": "하늘색 좌석", "block.create.light_blue_valve_handle": "하늘색 밸브 손잡이", + "block.create.light_gray_nixie_tube": "UNLOCALIZED: Light Gray Nixie Tube", "block.create.light_gray_sail": "회백색 캔버스", "block.create.light_gray_seat": "회백색 좌석", "block.create.light_gray_valve_handle": "회백색 밸브 손잡이", + "block.create.lime_nixie_tube": "UNLOCALIZED: Lime Nixie Tube", "block.create.lime_sail": "연두색 캔버스", "block.create.lime_seat": "연두색 좌석", "block.create.lime_valve_handle": "연두색 밸브 손잡이", @@ -227,6 +236,7 @@ "block.create.limestone_pillar": "석회암 기둥", "block.create.linear_chassis": "선형 연결대", "block.create.lit_blaze_burner": "불이 붙은 블레이즈 가열기", + "block.create.magenta_nixie_tube": "UNLOCALIZED: Magenta Nixie Tube", "block.create.magenta_sail": "자홍색 캔버스", "block.create.magenta_seat": "자홍색 좌석", "block.create.magenta_valve_handle": "자홍색 밸브 손잡이", @@ -311,6 +321,7 @@ "block.create.paved_weathered_limestone_stairs": "포장된 풍화된 석회암 계단", "block.create.paved_weathered_limestone_wall": "포장된 풍화된 석회암 담장", "block.create.peculiar_bell": "UNLOCALIZED: Peculiar Bell", + "block.create.pink_nixie_tube": "UNLOCALIZED: Pink Nixie Tube", "block.create.pink_sail": "분홍색 캔버스", "block.create.pink_seat": "분홍색 좌석", "block.create.pink_valve_handle": "분홍색 밸브 손잡이", @@ -345,10 +356,12 @@ "block.create.powered_toggle_latch": "레버식 레드스톤 잠금기", "block.create.pulley_magnet": "도르래 자석", "block.create.pulse_repeater": "순간작동 중계기", + "block.create.purple_nixie_tube": "UNLOCALIZED: Purple Nixie Tube", "block.create.purple_sail": "보라색 캔버스", "block.create.purple_seat": "보라색 좌석", "block.create.purple_valve_handle": "보라색 밸브 손잡이", "block.create.radial_chassis": "반경 연결대", + "block.create.red_nixie_tube": "UNLOCALIZED: Red Nixie Tube", "block.create.red_sail": "빨간색 캔버스", "block.create.red_seat": "빨간색 좌석", "block.create.red_valve_handle": "빨간색 밸브 손잡이", @@ -405,11 +418,13 @@ "block.create.weathered_limestone_cobblestone_wall": "풍화된 석회암 조약돌 담장", "block.create.weathered_limestone_pillar": "풍화된 석회암 기둥", "block.create.weighted_ejector": "발사대", + "block.create.white_nixie_tube": "UNLOCALIZED: White Nixie Tube", "block.create.white_sail": "하얀색 캔버스", "block.create.white_seat": "하얀색 좌석", "block.create.white_valve_handle": "하얀색 밸브 손잡이", "block.create.windmill_bearing": "풍차 회전장치", "block.create.wooden_bracket": "나무 지지대", + "block.create.yellow_nixie_tube": "UNLOCALIZED: Yellow Nixie Tube", "block.create.yellow_sail": "노란색 캔버스", "block.create.yellow_seat": "노란색 좌석", "block.create.yellow_valve_handle": "노란색 밸브 손잡이", diff --git a/src/generated/resources/assets/create/lang/unfinished/nl_nl.json b/src/generated/resources/assets/create/lang/unfinished/nl_nl.json index c667ce0d4..ccb16cb2a 100644 --- a/src/generated/resources/assets/create/lang/unfinished/nl_nl.json +++ b/src/generated/resources/assets/create/lang/unfinished/nl_nl.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 1725", + "_": "Missing Localizations: 1740", "_": "->------------------------] Game Elements [------------------------<-", @@ -28,10 +28,12 @@ "block.create.belt": "Mechanische Transportband", "block.create.birch_window": "UNLOCALIZED: Birch Window", "block.create.birch_window_pane": "UNLOCALIZED: Birch Window Pane", + "block.create.black_nixie_tube": "UNLOCALIZED: Black Nixie Tube", "block.create.black_sail": "UNLOCALIZED: Black Sail", "block.create.black_seat": "UNLOCALIZED: Black Seat", "block.create.black_valve_handle": "UNLOCALIZED: Black Valve Handle", "block.create.blaze_burner": "UNLOCALIZED: Blaze Burner", + "block.create.blue_nixie_tube": "UNLOCALIZED: Blue Nixie Tube", "block.create.blue_sail": "UNLOCALIZED: Blue Sail", "block.create.blue_seat": "UNLOCALIZED: Blue Seat", "block.create.blue_valve_handle": "UNLOCALIZED: Blue Valve Handle", @@ -41,6 +43,7 @@ "block.create.brass_encased_shaft": "UNLOCALIZED: Brass Encased Shaft", "block.create.brass_funnel": "UNLOCALIZED: Brass Funnel", "block.create.brass_tunnel": "UNLOCALIZED: Brass Tunnel", + "block.create.brown_nixie_tube": "UNLOCALIZED: Brown Nixie Tube", "block.create.brown_sail": "UNLOCALIZED: Brown Sail", "block.create.brown_seat": "UNLOCALIZED: Brown Seat", "block.create.brown_valve_handle": "UNLOCALIZED: Brown Valve Handle", @@ -73,6 +76,7 @@ "block.create.crushing_wheel": "Verpulveraar", "block.create.crushing_wheel_controller": "UNLOCALIZED: Crushing Wheel Controller", "block.create.cuckoo_clock": "UNLOCALIZED: Cuckoo Clock", + "block.create.cyan_nixie_tube": "UNLOCALIZED: Cyan Nixie Tube", "block.create.cyan_sail": "UNLOCALIZED: Cyan Sail", "block.create.cyan_seat": "UNLOCALIZED: Cyan Seat", "block.create.cyan_valve_handle": "UNLOCALIZED: Cyan Valve Handle", @@ -179,9 +183,11 @@ "block.create.granite_cobblestone_stairs": "UNLOCALIZED: Granite Cobblestone Stairs", "block.create.granite_cobblestone_wall": "UNLOCALIZED: Granite Cobblestone Wall", "block.create.granite_pillar": "UNLOCALIZED: Granite Pillar", + "block.create.gray_nixie_tube": "UNLOCALIZED: Gray Nixie Tube", "block.create.gray_sail": "UNLOCALIZED: Gray Sail", "block.create.gray_seat": "UNLOCALIZED: Gray Seat", "block.create.gray_valve_handle": "UNLOCALIZED: Gray Valve Handle", + "block.create.green_nixie_tube": "UNLOCALIZED: Green Nixie Tube", "block.create.green_sail": "UNLOCALIZED: Green Sail", "block.create.green_seat": "UNLOCALIZED: Green Seat", "block.create.green_valve_handle": "UNLOCALIZED: Green Valve Handle", @@ -205,12 +211,15 @@ "block.create.layered_scoria": "UNLOCALIZED: Layered Scoria", "block.create.layered_weathered_limestone": "UNLOCALIZED: Layered Weathered Limestone", "block.create.lectern_controller": "UNLOCALIZED: Lectern Controller", + "block.create.light_blue_nixie_tube": "UNLOCALIZED: Light Blue Nixie Tube", "block.create.light_blue_sail": "UNLOCALIZED: Light Blue Sail", "block.create.light_blue_seat": "UNLOCALIZED: Light Blue Seat", "block.create.light_blue_valve_handle": "UNLOCALIZED: Light Blue Valve Handle", + "block.create.light_gray_nixie_tube": "UNLOCALIZED: Light Gray Nixie Tube", "block.create.light_gray_sail": "UNLOCALIZED: Light Gray Sail", "block.create.light_gray_seat": "UNLOCALIZED: Light Gray Seat", "block.create.light_gray_valve_handle": "UNLOCALIZED: Light Gray Valve Handle", + "block.create.lime_nixie_tube": "UNLOCALIZED: Lime Nixie Tube", "block.create.lime_sail": "UNLOCALIZED: Lime Sail", "block.create.lime_seat": "UNLOCALIZED: Lime Seat", "block.create.lime_valve_handle": "UNLOCALIZED: Lime Valve Handle", @@ -227,6 +236,7 @@ "block.create.limestone_pillar": "Kalksteen Pillar", "block.create.linear_chassis": "Lineaar Frame", "block.create.lit_blaze_burner": "UNLOCALIZED: Lit Blaze Burner", + "block.create.magenta_nixie_tube": "UNLOCALIZED: Magenta Nixie Tube", "block.create.magenta_sail": "UNLOCALIZED: Magenta Sail", "block.create.magenta_seat": "UNLOCALIZED: Magenta Seat", "block.create.magenta_valve_handle": "UNLOCALIZED: Magenta Valve Handle", @@ -311,6 +321,7 @@ "block.create.paved_weathered_limestone_stairs": "UNLOCALIZED: Paved Weathered Limestone Stairs", "block.create.paved_weathered_limestone_wall": "UNLOCALIZED: Paved Weathered Limestone Wall", "block.create.peculiar_bell": "UNLOCALIZED: Peculiar Bell", + "block.create.pink_nixie_tube": "UNLOCALIZED: Pink Nixie Tube", "block.create.pink_sail": "UNLOCALIZED: Pink Sail", "block.create.pink_seat": "UNLOCALIZED: Pink Seat", "block.create.pink_valve_handle": "UNLOCALIZED: Pink Valve Handle", @@ -345,10 +356,12 @@ "block.create.powered_toggle_latch": "UNLOCALIZED: Powered Toggle Latch", "block.create.pulley_magnet": "UNLOCALIZED: Pulley Magnet", "block.create.pulse_repeater": "Pulse Versterker", + "block.create.purple_nixie_tube": "UNLOCALIZED: Purple Nixie Tube", "block.create.purple_sail": "UNLOCALIZED: Purple Sail", "block.create.purple_seat": "UNLOCALIZED: Purple Seat", "block.create.purple_valve_handle": "UNLOCALIZED: Purple Valve Handle", "block.create.radial_chassis": "Rotation Frame", + "block.create.red_nixie_tube": "UNLOCALIZED: Red Nixie Tube", "block.create.red_sail": "UNLOCALIZED: Red Sail", "block.create.red_seat": "UNLOCALIZED: Red Seat", "block.create.red_valve_handle": "UNLOCALIZED: Red Valve Handle", @@ -405,11 +418,13 @@ "block.create.weathered_limestone_cobblestone_wall": "UNLOCALIZED: Weathered Limestone Cobblestone Wall", "block.create.weathered_limestone_pillar": "Verweerde Kalksteen Pilaar", "block.create.weighted_ejector": "UNLOCALIZED: Weighted Ejector", + "block.create.white_nixie_tube": "UNLOCALIZED: White Nixie Tube", "block.create.white_sail": "UNLOCALIZED: White Sail", "block.create.white_seat": "UNLOCALIZED: White Seat", "block.create.white_valve_handle": "UNLOCALIZED: White Valve Handle", "block.create.windmill_bearing": "UNLOCALIZED: Windmill Bearing", "block.create.wooden_bracket": "UNLOCALIZED: Wooden Bracket", + "block.create.yellow_nixie_tube": "UNLOCALIZED: Yellow Nixie Tube", "block.create.yellow_sail": "UNLOCALIZED: Yellow Sail", "block.create.yellow_seat": "UNLOCALIZED: Yellow Seat", "block.create.yellow_valve_handle": "UNLOCALIZED: Yellow Valve Handle", diff --git a/src/generated/resources/assets/create/lang/unfinished/pl_pl.json b/src/generated/resources/assets/create/lang/unfinished/pl_pl.json index 879539ed5..2ebc954cd 100644 --- a/src/generated/resources/assets/create/lang/unfinished/pl_pl.json +++ b/src/generated/resources/assets/create/lang/unfinished/pl_pl.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 214", + "_": "Missing Localizations: 229", "_": "->------------------------] Game Elements [------------------------<-", @@ -28,10 +28,12 @@ "block.create.belt": "Taśma", "block.create.birch_window": "Brzozowe okno", "block.create.birch_window_pane": "Brzozowa szyba okienna", + "block.create.black_nixie_tube": "UNLOCALIZED: Black Nixie Tube", "block.create.black_sail": "Czarny żagiel", "block.create.black_seat": "Czarne siedzenie", "block.create.black_valve_handle": "Czarne pokrętło", "block.create.blaze_burner": "Płomienny palnik", + "block.create.blue_nixie_tube": "UNLOCALIZED: Blue Nixie Tube", "block.create.blue_sail": "Niebieski żagiel", "block.create.blue_seat": "Niebieskie siedzenie", "block.create.blue_valve_handle": "Niebieskie pokrętło", @@ -41,6 +43,7 @@ "block.create.brass_encased_shaft": "Mosiężny izolowany wał", "block.create.brass_funnel": "Mosiężny lejek", "block.create.brass_tunnel": "Mosiężny tunel", + "block.create.brown_nixie_tube": "UNLOCALIZED: Brown Nixie Tube", "block.create.brown_sail": "Brązowy żagiel", "block.create.brown_seat": "Brązowe siedzenie", "block.create.brown_valve_handle": "Brązowe pokrętło", @@ -73,6 +76,7 @@ "block.create.crushing_wheel": "Koło kruszące", "block.create.crushing_wheel_controller": "Sterownik koła kruszącego", "block.create.cuckoo_clock": "Zegar z kukułką", + "block.create.cyan_nixie_tube": "UNLOCALIZED: Cyan Nixie Tube", "block.create.cyan_sail": "Błękitny żagiel", "block.create.cyan_seat": "Błękitne siedzenie", "block.create.cyan_valve_handle": "Błękitne pokrętło", @@ -179,9 +183,11 @@ "block.create.granite_cobblestone_stairs": "Granitowe brukowe schody", "block.create.granite_cobblestone_wall": "Granitowy brukowy murek", "block.create.granite_pillar": "Granitowy filar", + "block.create.gray_nixie_tube": "UNLOCALIZED: Gray Nixie Tube", "block.create.gray_sail": "Szary żagiel", "block.create.gray_seat": "Szare siedzenie", "block.create.gray_valve_handle": "Szare pokrętło", + "block.create.green_nixie_tube": "UNLOCALIZED: Green Nixie Tube", "block.create.green_sail": "Zielony żagiel", "block.create.green_seat": "Zielone siedzenie", "block.create.green_valve_handle": "Zielone pokrętło", @@ -205,12 +211,15 @@ "block.create.layered_scoria": "Warstwowy żużel", "block.create.layered_weathered_limestone": "Warstwowy zwietrzały wapień", "block.create.lectern_controller": "UNLOCALIZED: Lectern Controller", + "block.create.light_blue_nixie_tube": "UNLOCALIZED: Light Blue Nixie Tube", "block.create.light_blue_sail": "Jasnoniebieski żagiel", "block.create.light_blue_seat": "Jasnoniebieskie siedzenie", "block.create.light_blue_valve_handle": "Jasnoniebieskie pokrętło", + "block.create.light_gray_nixie_tube": "UNLOCALIZED: Light Gray Nixie Tube", "block.create.light_gray_sail": "Jasnoszary żagiel", "block.create.light_gray_seat": "Jasnoszare siedzenie", "block.create.light_gray_valve_handle": "Jasnoszare pokrętło", + "block.create.lime_nixie_tube": "UNLOCALIZED: Lime Nixie Tube", "block.create.lime_sail": "Jasnozielony żagiel", "block.create.lime_seat": "Jasnozielone siedzenie", "block.create.lime_valve_handle": "Jasnozielone pokrętło", @@ -227,6 +236,7 @@ "block.create.limestone_pillar": "Wapienny filar", "block.create.linear_chassis": "Stelaż liniowy", "block.create.lit_blaze_burner": "Zapalony płomienny palnik", + "block.create.magenta_nixie_tube": "UNLOCALIZED: Magenta Nixie Tube", "block.create.magenta_sail": "Karmazynowy żagiel", "block.create.magenta_seat": "Karmazynowe siedzenie", "block.create.magenta_valve_handle": "Karmazynowe pokrętło", @@ -311,6 +321,7 @@ "block.create.paved_weathered_limestone_stairs": "Wygładzone zwietrzałe wapienne schody", "block.create.paved_weathered_limestone_wall": "Wygładzony zwietrzały wapienny murek", "block.create.peculiar_bell": "UNLOCALIZED: Peculiar Bell", + "block.create.pink_nixie_tube": "UNLOCALIZED: Pink Nixie Tube", "block.create.pink_sail": "Różowy żagiel", "block.create.pink_seat": "Różowe siedzenie", "block.create.pink_valve_handle": "Różowe pokrętło", @@ -345,10 +356,12 @@ "block.create.powered_toggle_latch": "Zasilany przełącznik", "block.create.pulley_magnet": "Krążek z magnesem", "block.create.pulse_repeater": "Przekaźnik pulsowy", + "block.create.purple_nixie_tube": "UNLOCALIZED: Purple Nixie Tube", "block.create.purple_sail": "Fioletowy żagiel", "block.create.purple_seat": "Fioletowe siedzenie", "block.create.purple_valve_handle": "Fioletowe pokrętło", "block.create.radial_chassis": "Stelaż promienisty", + "block.create.red_nixie_tube": "UNLOCALIZED: Red Nixie Tube", "block.create.red_sail": "Czerwony żagiel", "block.create.red_seat": "Czerwone siedzenie", "block.create.red_valve_handle": "Czerwone pokrętło", @@ -405,11 +418,13 @@ "block.create.weathered_limestone_cobblestone_wall": "Zwietrzały wapienny brukowy murek", "block.create.weathered_limestone_pillar": "Zwietrzały wapienny filar", "block.create.weighted_ejector": "Wyrzutnia odważnikowa", + "block.create.white_nixie_tube": "UNLOCALIZED: White Nixie Tube", "block.create.white_sail": "Biały żagiel", "block.create.white_seat": "Białe siedzenie", "block.create.white_valve_handle": "Białe pokrętło", "block.create.windmill_bearing": "Łożysko wiatraka", "block.create.wooden_bracket": "Drewniany wspornik", + "block.create.yellow_nixie_tube": "UNLOCALIZED: Yellow Nixie Tube", "block.create.yellow_sail": "Żółty żagiel", "block.create.yellow_seat": "Żółte siedzenie", "block.create.yellow_valve_handle": "Żółte pokrętło", 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 fe8c28dac..9c9a4102b 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: 1766", + "_": "Missing Localizations: 1781", "_": "->------------------------] Game Elements [------------------------<-", @@ -28,10 +28,12 @@ "block.create.belt": "Esteira Mecânica", "block.create.birch_window": "UNLOCALIZED: Birch Window", "block.create.birch_window_pane": "UNLOCALIZED: Birch Window Pane", + "block.create.black_nixie_tube": "UNLOCALIZED: Black Nixie Tube", "block.create.black_sail": "UNLOCALIZED: Black Sail", "block.create.black_seat": "UNLOCALIZED: Black Seat", "block.create.black_valve_handle": "UNLOCALIZED: Black Valve Handle", "block.create.blaze_burner": "UNLOCALIZED: Blaze Burner", + "block.create.blue_nixie_tube": "UNLOCALIZED: Blue Nixie Tube", "block.create.blue_sail": "UNLOCALIZED: Blue Sail", "block.create.blue_seat": "UNLOCALIZED: Blue Seat", "block.create.blue_valve_handle": "UNLOCALIZED: Blue Valve Handle", @@ -41,6 +43,7 @@ "block.create.brass_encased_shaft": "UNLOCALIZED: Brass Encased Shaft", "block.create.brass_funnel": "UNLOCALIZED: Brass Funnel", "block.create.brass_tunnel": "UNLOCALIZED: Brass Tunnel", + "block.create.brown_nixie_tube": "UNLOCALIZED: Brown Nixie Tube", "block.create.brown_sail": "UNLOCALIZED: Brown Sail", "block.create.brown_seat": "UNLOCALIZED: Brown Seat", "block.create.brown_valve_handle": "UNLOCALIZED: Brown Valve Handle", @@ -73,6 +76,7 @@ "block.create.crushing_wheel": "Roda de Moer", "block.create.crushing_wheel_controller": "UNLOCALIZED: Crushing Wheel Controller", "block.create.cuckoo_clock": "UNLOCALIZED: Cuckoo Clock", + "block.create.cyan_nixie_tube": "UNLOCALIZED: Cyan Nixie Tube", "block.create.cyan_sail": "UNLOCALIZED: Cyan Sail", "block.create.cyan_seat": "UNLOCALIZED: Cyan Seat", "block.create.cyan_valve_handle": "UNLOCALIZED: Cyan Valve Handle", @@ -179,9 +183,11 @@ "block.create.granite_cobblestone_stairs": "UNLOCALIZED: Granite Cobblestone Stairs", "block.create.granite_cobblestone_wall": "UNLOCALIZED: Granite Cobblestone Wall", "block.create.granite_pillar": "UNLOCALIZED: Granite Pillar", + "block.create.gray_nixie_tube": "UNLOCALIZED: Gray Nixie Tube", "block.create.gray_sail": "UNLOCALIZED: Gray Sail", "block.create.gray_seat": "UNLOCALIZED: Gray Seat", "block.create.gray_valve_handle": "UNLOCALIZED: Gray Valve Handle", + "block.create.green_nixie_tube": "UNLOCALIZED: Green Nixie Tube", "block.create.green_sail": "UNLOCALIZED: Green Sail", "block.create.green_seat": "UNLOCALIZED: Green Seat", "block.create.green_valve_handle": "UNLOCALIZED: Green Valve Handle", @@ -205,12 +211,15 @@ "block.create.layered_scoria": "UNLOCALIZED: Layered Scoria", "block.create.layered_weathered_limestone": "UNLOCALIZED: Layered Weathered Limestone", "block.create.lectern_controller": "UNLOCALIZED: Lectern Controller", + "block.create.light_blue_nixie_tube": "UNLOCALIZED: Light Blue Nixie Tube", "block.create.light_blue_sail": "UNLOCALIZED: Light Blue Sail", "block.create.light_blue_seat": "UNLOCALIZED: Light Blue Seat", "block.create.light_blue_valve_handle": "UNLOCALIZED: Light Blue Valve Handle", + "block.create.light_gray_nixie_tube": "UNLOCALIZED: Light Gray Nixie Tube", "block.create.light_gray_sail": "UNLOCALIZED: Light Gray Sail", "block.create.light_gray_seat": "UNLOCALIZED: Light Gray Seat", "block.create.light_gray_valve_handle": "UNLOCALIZED: Light Gray Valve Handle", + "block.create.lime_nixie_tube": "UNLOCALIZED: Lime Nixie Tube", "block.create.lime_sail": "UNLOCALIZED: Lime Sail", "block.create.lime_seat": "UNLOCALIZED: Lime Seat", "block.create.lime_valve_handle": "UNLOCALIZED: Lime Valve Handle", @@ -227,6 +236,7 @@ "block.create.limestone_pillar": "Pilar de Calcário", "block.create.linear_chassis": "Chassis de Translado", "block.create.lit_blaze_burner": "UNLOCALIZED: Lit Blaze Burner", + "block.create.magenta_nixie_tube": "UNLOCALIZED: Magenta Nixie Tube", "block.create.magenta_sail": "UNLOCALIZED: Magenta Sail", "block.create.magenta_seat": "UNLOCALIZED: Magenta Seat", "block.create.magenta_valve_handle": "UNLOCALIZED: Magenta Valve Handle", @@ -311,6 +321,7 @@ "block.create.paved_weathered_limestone_stairs": "UNLOCALIZED: Paved Weathered Limestone Stairs", "block.create.paved_weathered_limestone_wall": "UNLOCALIZED: Paved Weathered Limestone Wall", "block.create.peculiar_bell": "UNLOCALIZED: Peculiar Bell", + "block.create.pink_nixie_tube": "UNLOCALIZED: Pink Nixie Tube", "block.create.pink_sail": "UNLOCALIZED: Pink Sail", "block.create.pink_seat": "UNLOCALIZED: Pink Seat", "block.create.pink_valve_handle": "UNLOCALIZED: Pink Valve Handle", @@ -345,10 +356,12 @@ "block.create.powered_toggle_latch": "UNLOCALIZED: Powered Toggle Latch", "block.create.pulley_magnet": "UNLOCALIZED: Pulley Magnet", "block.create.pulse_repeater": "Repetidor de Pulso", + "block.create.purple_nixie_tube": "UNLOCALIZED: Purple Nixie Tube", "block.create.purple_sail": "UNLOCALIZED: Purple Sail", "block.create.purple_seat": "UNLOCALIZED: Purple Seat", "block.create.purple_valve_handle": "UNLOCALIZED: Purple Valve Handle", "block.create.radial_chassis": "Chassis de Rotação", + "block.create.red_nixie_tube": "UNLOCALIZED: Red Nixie Tube", "block.create.red_sail": "UNLOCALIZED: Red Sail", "block.create.red_seat": "UNLOCALIZED: Red Seat", "block.create.red_valve_handle": "UNLOCALIZED: Red Valve Handle", @@ -405,11 +418,13 @@ "block.create.weathered_limestone_cobblestone_wall": "UNLOCALIZED: Weathered Limestone Cobblestone Wall", "block.create.weathered_limestone_pillar": "Pilar de Calcário Resistido", "block.create.weighted_ejector": "UNLOCALIZED: Weighted Ejector", + "block.create.white_nixie_tube": "UNLOCALIZED: White Nixie Tube", "block.create.white_sail": "UNLOCALIZED: White Sail", "block.create.white_seat": "UNLOCALIZED: White Seat", "block.create.white_valve_handle": "UNLOCALIZED: White Valve Handle", "block.create.windmill_bearing": "UNLOCALIZED: Windmill Bearing", "block.create.wooden_bracket": "UNLOCALIZED: Wooden Bracket", + "block.create.yellow_nixie_tube": "UNLOCALIZED: Yellow Nixie Tube", "block.create.yellow_sail": "UNLOCALIZED: Yellow Sail", "block.create.yellow_seat": "UNLOCALIZED: Yellow Seat", "block.create.yellow_valve_handle": "UNLOCALIZED: Yellow Valve Handle", diff --git a/src/generated/resources/assets/create/lang/unfinished/ru_ru.json b/src/generated/resources/assets/create/lang/unfinished/ru_ru.json index 512aa068e..12dd91bd7 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ru_ru.json +++ b/src/generated/resources/assets/create/lang/unfinished/ru_ru.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 245", + "_": "Missing Localizations: 260", "_": "->------------------------] Game Elements [------------------------<-", @@ -28,10 +28,12 @@ "block.create.belt": "Конвейер", "block.create.birch_window": "Берёзовое окно", "block.create.birch_window_pane": "Панель из берёзового окна", + "block.create.black_nixie_tube": "UNLOCALIZED: Black Nixie Tube", "block.create.black_sail": "Чёрный парус", "block.create.black_seat": "Чёрное сиденье", "block.create.black_valve_handle": "Чёрный ручной вентиль", "block.create.blaze_burner": "Горелка Всполоха", + "block.create.blue_nixie_tube": "UNLOCALIZED: Blue Nixie Tube", "block.create.blue_sail": "Синий парус", "block.create.blue_seat": "Синее сиденье", "block.create.blue_valve_handle": "Синий ручной вентиль", @@ -41,6 +43,7 @@ "block.create.brass_encased_shaft": "Вал в латунном корпусе", "block.create.brass_funnel": "Латунная воронка", "block.create.brass_tunnel": "Латунный туннель", + "block.create.brown_nixie_tube": "UNLOCALIZED: Brown Nixie Tube", "block.create.brown_sail": "Коричневый парус", "block.create.brown_seat": "Коричневое сиденье", "block.create.brown_valve_handle": "Коричневый ручной вентиль", @@ -73,6 +76,7 @@ "block.create.crushing_wheel": "Колесо дробления", "block.create.crushing_wheel_controller": "Контроллер колеса дробления", "block.create.cuckoo_clock": "Часы с кукушкой", + "block.create.cyan_nixie_tube": "UNLOCALIZED: Cyan Nixie Tube", "block.create.cyan_sail": "Бирюзовый парус", "block.create.cyan_seat": "Бирюзовое сииденье", "block.create.cyan_valve_handle": "Бирюзовый ручной вентиль", @@ -179,9 +183,11 @@ "block.create.granite_cobblestone_stairs": "Ступени из гранит-булыжника", "block.create.granite_cobblestone_wall": "Стена из гранит-булыжника", "block.create.granite_pillar": "Гранитная колонна", + "block.create.gray_nixie_tube": "UNLOCALIZED: Gray Nixie Tube", "block.create.gray_sail": "Серый парус", "block.create.gray_seat": "Серое сиденье", "block.create.gray_valve_handle": "Серый ручной вентиль", + "block.create.green_nixie_tube": "UNLOCALIZED: Green Nixie Tube", "block.create.green_sail": "Зелёный парус", "block.create.green_seat": "Зелёное сиденье", "block.create.green_valve_handle": "Зелёный ручной вентиль", @@ -205,12 +211,15 @@ "block.create.layered_scoria": "Слоистый пепел", "block.create.layered_weathered_limestone": "Слоистый выветренный известняк", "block.create.lectern_controller": "UNLOCALIZED: Lectern Controller", + "block.create.light_blue_nixie_tube": "UNLOCALIZED: Light Blue Nixie Tube", "block.create.light_blue_sail": "Голубой парус", "block.create.light_blue_seat": "Голубое сиденье", "block.create.light_blue_valve_handle": "Голубой ручной вентиль", + "block.create.light_gray_nixie_tube": "UNLOCALIZED: Light Gray Nixie Tube", "block.create.light_gray_sail": "Светло-серый парус", "block.create.light_gray_seat": "Светло-серое сиденье", "block.create.light_gray_valve_handle": "Светло-серый ручной вентиль", + "block.create.lime_nixie_tube": "UNLOCALIZED: Lime Nixie Tube", "block.create.lime_sail": "Лаймовый парус", "block.create.lime_seat": "Лаймовое сиденье", "block.create.lime_valve_handle": "Лаймовый ручной вентиль", @@ -227,6 +236,7 @@ "block.create.limestone_pillar": "Известковая колонна", "block.create.linear_chassis": "Линейное шасси", "block.create.lit_blaze_burner": "Зажжённая горелка Всполоха", + "block.create.magenta_nixie_tube": "UNLOCALIZED: Magenta Nixie Tube", "block.create.magenta_sail": "Пурпурный парус", "block.create.magenta_seat": "Пурпурное сиденье", "block.create.magenta_valve_handle": "Пурпурный ручной вентиль", @@ -311,6 +321,7 @@ "block.create.paved_weathered_limestone_stairs": "Ступени из мощёного выветренного известняка", "block.create.paved_weathered_limestone_wall": "Стена из мощёного выветренного известняка", "block.create.peculiar_bell": "UNLOCALIZED: Peculiar Bell", + "block.create.pink_nixie_tube": "UNLOCALIZED: Pink Nixie Tube", "block.create.pink_sail": "Розовый парус", "block.create.pink_seat": "Розовое сиденье", "block.create.pink_valve_handle": "Розовый ручной вентиль", @@ -345,10 +356,12 @@ "block.create.powered_toggle_latch": "Механизированный рычаг-защёлка", "block.create.pulley_magnet": "Магнитный шкив", "block.create.pulse_repeater": "Импульсный повторитель", + "block.create.purple_nixie_tube": "UNLOCALIZED: Purple Nixie Tube", "block.create.purple_sail": "Фиолетовый парус", "block.create.purple_seat": "Фиолетовое сиденье", "block.create.purple_valve_handle": "Фиолетовый ручной вентиль", "block.create.radial_chassis": "Радиальное шасси", + "block.create.red_nixie_tube": "UNLOCALIZED: Red Nixie Tube", "block.create.red_sail": "Красный парус", "block.create.red_seat": "Красное сиденье", "block.create.red_valve_handle": "Красный ручной вентиль", @@ -405,11 +418,13 @@ "block.create.weathered_limestone_cobblestone_wall": "Стена из известняк-булыжника", "block.create.weathered_limestone_pillar": "Колонна из выветренного известняка", "block.create.weighted_ejector": "Взвешенная катапульта", + "block.create.white_nixie_tube": "UNLOCALIZED: White Nixie Tube", "block.create.white_sail": "Белый парус", "block.create.white_seat": "Белое сиденье", "block.create.white_valve_handle": "Белый ручной вентиль", "block.create.windmill_bearing": "Подшипник ветряной мельницы", "block.create.wooden_bracket": "Деревянная скоба", + "block.create.yellow_nixie_tube": "UNLOCALIZED: Yellow Nixie Tube", "block.create.yellow_sail": "Жёлтый парус", "block.create.yellow_seat": "Жёлтое сиденье", "block.create.yellow_valve_handle": "Жёлтый ручной вентиль", 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 5339b452f..9b8bd326f 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: 255", + "_": "Missing Localizations: 270", "_": "->------------------------] Game Elements [------------------------<-", @@ -28,10 +28,12 @@ "block.create.belt": "传送带", "block.create.birch_window": "白桦窗户", "block.create.birch_window_pane": "白桦窗户板", + "block.create.black_nixie_tube": "UNLOCALIZED: Black Nixie Tube", "block.create.black_sail": "黑色风帆", "block.create.black_seat": "黑色坐垫", "block.create.black_valve_handle": "黑色阀门手轮", "block.create.blaze_burner": "烈焰人燃烧室", + "block.create.blue_nixie_tube": "UNLOCALIZED: Blue Nixie Tube", "block.create.blue_sail": "蓝色风帆", "block.create.blue_seat": "蓝色坐垫", "block.create.blue_valve_handle": "蓝色阀门手轮", @@ -41,6 +43,7 @@ "block.create.brass_encased_shaft": "黄铜传动杆箱", "block.create.brass_funnel": "黄铜漏斗", "block.create.brass_tunnel": "黄铜隧道", + "block.create.brown_nixie_tube": "UNLOCALIZED: Brown Nixie Tube", "block.create.brown_sail": "棕色风帆", "block.create.brown_seat": "棕色坐垫", "block.create.brown_valve_handle": "棕色阀门手轮", @@ -73,6 +76,7 @@ "block.create.crushing_wheel": "粉碎轮", "block.create.crushing_wheel_controller": "粉碎轮控制器", "block.create.cuckoo_clock": "布谷鸟闹钟", + "block.create.cyan_nixie_tube": "UNLOCALIZED: Cyan Nixie Tube", "block.create.cyan_sail": "青色风帆", "block.create.cyan_seat": "青色坐垫", "block.create.cyan_valve_handle": "青色阀门手轮", @@ -179,9 +183,11 @@ "block.create.granite_cobblestone_stairs": "花岗岩圆石楼梯", "block.create.granite_cobblestone_wall": "花岗岩圆石墙", "block.create.granite_pillar": "竖纹花岗岩", + "block.create.gray_nixie_tube": "UNLOCALIZED: Gray Nixie Tube", "block.create.gray_sail": "灰色风帆", "block.create.gray_seat": "灰色坐垫", "block.create.gray_valve_handle": "灰色阀门手轮", + "block.create.green_nixie_tube": "UNLOCALIZED: Green Nixie Tube", "block.create.green_sail": "绿色风帆", "block.create.green_seat": "绿色坐垫", "block.create.green_valve_handle": "绿色阀门手轮", @@ -205,12 +211,15 @@ "block.create.layered_scoria": "层叠熔渣", "block.create.layered_weathered_limestone": "层叠风化石灰岩", "block.create.lectern_controller": "UNLOCALIZED: Lectern Controller", + "block.create.light_blue_nixie_tube": "UNLOCALIZED: Light Blue Nixie Tube", "block.create.light_blue_sail": "淡蓝色风帆", "block.create.light_blue_seat": "淡蓝色坐垫", "block.create.light_blue_valve_handle": "淡蓝色阀门手轮", + "block.create.light_gray_nixie_tube": "UNLOCALIZED: Light Gray Nixie Tube", "block.create.light_gray_sail": "淡灰色风帆", "block.create.light_gray_seat": "淡灰色坐垫", "block.create.light_gray_valve_handle": "淡灰色阀门手轮", + "block.create.lime_nixie_tube": "UNLOCALIZED: Lime Nixie Tube", "block.create.lime_sail": "黄绿色风帆", "block.create.lime_seat": "黄绿色坐垫", "block.create.lime_valve_handle": "黄绿色阀门手轮", @@ -227,6 +236,7 @@ "block.create.limestone_pillar": "竖纹石灰岩", "block.create.linear_chassis": "机壳底盘", "block.create.lit_blaze_burner": "烈焰人燃烧室(已点燃)", + "block.create.magenta_nixie_tube": "UNLOCALIZED: Magenta Nixie Tube", "block.create.magenta_sail": "品红色风帆", "block.create.magenta_seat": "品红色坐垫", "block.create.magenta_valve_handle": "品红色阀门手轮", @@ -311,6 +321,7 @@ "block.create.paved_weathered_limestone_stairs": "风化石灰岩铺路石楼梯", "block.create.paved_weathered_limestone_wall": "风化石灰岩铺路石墙", "block.create.peculiar_bell": "UNLOCALIZED: Peculiar Bell", + "block.create.pink_nixie_tube": "UNLOCALIZED: Pink Nixie Tube", "block.create.pink_sail": "粉红色风帆", "block.create.pink_seat": "粉红色坐垫", "block.create.pink_valve_handle": "粉红色阀门手轮", @@ -345,10 +356,12 @@ "block.create.powered_toggle_latch": "转换锁存器", "block.create.pulley_magnet": "滑轮磁铁", "block.create.pulse_repeater": "脉冲中继器", + "block.create.purple_nixie_tube": "UNLOCALIZED: Purple Nixie Tube", "block.create.purple_sail": "紫色风帆", "block.create.purple_seat": "紫色坐垫", "block.create.purple_valve_handle": "紫色阀门手轮", "block.create.radial_chassis": "旋转底盘", + "block.create.red_nixie_tube": "UNLOCALIZED: Red Nixie Tube", "block.create.red_sail": "红色风帆", "block.create.red_seat": "红色坐垫", "block.create.red_valve_handle": "红色阀门手轮", @@ -405,11 +418,13 @@ "block.create.weathered_limestone_cobblestone_wall": "风化石灰岩圆石墙", "block.create.weathered_limestone_pillar": "竖纹风化石灰岩", "block.create.weighted_ejector": "弹射置物台", + "block.create.white_nixie_tube": "UNLOCALIZED: White Nixie Tube", "block.create.white_sail": "白色风帆", "block.create.white_seat": "白色坐垫", "block.create.white_valve_handle": "白色阀门手轮", "block.create.windmill_bearing": "风车轴承", "block.create.wooden_bracket": "木质支架", + "block.create.yellow_nixie_tube": "UNLOCALIZED: Yellow Nixie Tube", "block.create.yellow_sail": "黄色风帆", "block.create.yellow_seat": "黄色坐垫", "block.create.yellow_valve_handle": "黄色阀门手轮", diff --git a/src/generated/resources/assets/create/lang/unfinished/zh_tw.json b/src/generated/resources/assets/create/lang/unfinished/zh_tw.json index 659bdb216..47a88d2dd 100644 --- a/src/generated/resources/assets/create/lang/unfinished/zh_tw.json +++ b/src/generated/resources/assets/create/lang/unfinished/zh_tw.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 250", + "_": "Missing Localizations: 265", "_": "->------------------------] Game Elements [------------------------<-", @@ -28,10 +28,12 @@ "block.create.belt": "輸送帶", "block.create.birch_window": "白樺木窗戶", "block.create.birch_window_pane": "白樺木窗戶片", + "block.create.black_nixie_tube": "UNLOCALIZED: Black Nixie Tube", "block.create.black_sail": "黑色風帆", "block.create.black_seat": "黑色坐墊", "block.create.black_valve_handle": "黑色閥門開關", "block.create.blaze_burner": "烈焰使者動力爐", + "block.create.blue_nixie_tube": "UNLOCALIZED: Blue Nixie Tube", "block.create.blue_sail": "藍色風帆", "block.create.blue_seat": "藍色坐墊", "block.create.blue_valve_handle": "藍色閥門開關", @@ -41,6 +43,7 @@ "block.create.brass_encased_shaft": "黃銅傳動軸箱", "block.create.brass_funnel": "黃銅漏斗", "block.create.brass_tunnel": "黃銅物品隧道", + "block.create.brown_nixie_tube": "UNLOCALIZED: Brown Nixie Tube", "block.create.brown_sail": "棕色風帆", "block.create.brown_seat": "棕色坐墊", "block.create.brown_valve_handle": "棕色閥門開關", @@ -73,6 +76,7 @@ "block.create.crushing_wheel": "粉碎輪", "block.create.crushing_wheel_controller": "粉碎輪控制器", "block.create.cuckoo_clock": "布穀鳥鐘", + "block.create.cyan_nixie_tube": "UNLOCALIZED: Cyan Nixie Tube", "block.create.cyan_sail": "藍綠色風帆", "block.create.cyan_seat": "藍綠色坐墊", "block.create.cyan_valve_handle": "藍綠色閥門開關", @@ -179,9 +183,11 @@ "block.create.granite_cobblestone_stairs": "碎花崗岩樓梯", "block.create.granite_cobblestone_wall": "碎花崗岩牆", "block.create.granite_pillar": "豎紋花崗岩", + "block.create.gray_nixie_tube": "UNLOCALIZED: Gray Nixie Tube", "block.create.gray_sail": "灰色風帆", "block.create.gray_seat": "灰色坐墊", "block.create.gray_valve_handle": "灰色閥門開關", + "block.create.green_nixie_tube": "UNLOCALIZED: Green Nixie Tube", "block.create.green_sail": "綠色風帆", "block.create.green_seat": "綠色坐墊", "block.create.green_valve_handle": "綠色閥門開關", @@ -205,12 +211,15 @@ "block.create.layered_scoria": "疊層火成岩", "block.create.layered_weathered_limestone": "疊層風化石灰岩", "block.create.lectern_controller": "UNLOCALIZED: Lectern Controller", + "block.create.light_blue_nixie_tube": "UNLOCALIZED: Light Blue Nixie Tube", "block.create.light_blue_sail": "淡藍色風帆", "block.create.light_blue_seat": "淡藍色坐墊", "block.create.light_blue_valve_handle": "淡藍色閥門開關", + "block.create.light_gray_nixie_tube": "UNLOCALIZED: Light Gray Nixie Tube", "block.create.light_gray_sail": "淡灰色風帆", "block.create.light_gray_seat": "淡灰色坐墊", "block.create.light_gray_valve_handle": "淡灰色閥門開關", + "block.create.lime_nixie_tube": "UNLOCALIZED: Lime Nixie Tube", "block.create.lime_sail": "黃綠色風帆", "block.create.lime_seat": "黃綠色坐墊", "block.create.lime_valve_handle": "黃綠色閥門開關", @@ -227,6 +236,7 @@ "block.create.limestone_pillar": "豎紋石灰岩", "block.create.linear_chassis": "機殼底盤", "block.create.lit_blaze_burner": "烈焰使者動力爐(已啟動)", + "block.create.magenta_nixie_tube": "UNLOCALIZED: Magenta Nixie Tube", "block.create.magenta_sail": "洋紅色風帆", "block.create.magenta_seat": "洋紅色坐墊", "block.create.magenta_valve_handle": "洋紅色閥門開關", @@ -311,6 +321,7 @@ "block.create.paved_weathered_limestone_stairs": "風化石灰岩鋪路石樓梯", "block.create.paved_weathered_limestone_wall": "風化石灰岩鋪路石牆", "block.create.peculiar_bell": "UNLOCALIZED: Peculiar Bell", + "block.create.pink_nixie_tube": "UNLOCALIZED: Pink Nixie Tube", "block.create.pink_sail": "粉紅色風帆", "block.create.pink_seat": "粉紅色坐墊", "block.create.pink_valve_handle": "粉紅色閥門開關", @@ -345,10 +356,12 @@ "block.create.powered_toggle_latch": "T型正反器", "block.create.pulley_magnet": "滑輪磁鐵", "block.create.pulse_repeater": "脈衝中繼器", + "block.create.purple_nixie_tube": "UNLOCALIZED: Purple Nixie Tube", "block.create.purple_sail": "紫色風帆", "block.create.purple_seat": "紫色坐墊", "block.create.purple_valve_handle": "紫色閥門開關", "block.create.radial_chassis": "旋轉底盤", + "block.create.red_nixie_tube": "UNLOCALIZED: Red Nixie Tube", "block.create.red_sail": "紅色風帆", "block.create.red_seat": "紅色坐墊", "block.create.red_valve_handle": "紅色閥門開關", @@ -405,11 +418,13 @@ "block.create.weathered_limestone_cobblestone_wall": "碎風化石灰岩牆", "block.create.weathered_limestone_pillar": "豎紋風化石灰岩", "block.create.weighted_ejector": "物品彈射器", + "block.create.white_nixie_tube": "UNLOCALIZED: White Nixie Tube", "block.create.white_sail": "白色風帆", "block.create.white_seat": "白色坐墊", "block.create.white_valve_handle": "白色閥門開關", "block.create.windmill_bearing": "風車軸承", "block.create.wooden_bracket": "木製支架", + "block.create.yellow_nixie_tube": "UNLOCALIZED: Yellow Nixie Tube", "block.create.yellow_sail": "黃色風帆", "block.create.yellow_seat": "黃色坐墊", "block.create.yellow_valve_handle": "黃色閥門開關", diff --git a/src/generated/resources/assets/create/models/block/black_nixie_tube.json b/src/generated/resources/assets/create/models/block/black_nixie_tube.json new file mode 100644 index 000000000..79f550f05 --- /dev/null +++ b/src/generated/resources/assets/create/models/block/black_nixie_tube.json @@ -0,0 +1,3 @@ +{ + "parent": "create:block/nixie_tube/block" +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/blue_nixie_tube.json b/src/generated/resources/assets/create/models/block/blue_nixie_tube.json new file mode 100644 index 000000000..79f550f05 --- /dev/null +++ b/src/generated/resources/assets/create/models/block/blue_nixie_tube.json @@ -0,0 +1,3 @@ +{ + "parent": "create:block/nixie_tube/block" +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/brown_nixie_tube.json b/src/generated/resources/assets/create/models/block/brown_nixie_tube.json new file mode 100644 index 000000000..79f550f05 --- /dev/null +++ b/src/generated/resources/assets/create/models/block/brown_nixie_tube.json @@ -0,0 +1,3 @@ +{ + "parent": "create:block/nixie_tube/block" +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/cyan_nixie_tube.json b/src/generated/resources/assets/create/models/block/cyan_nixie_tube.json new file mode 100644 index 000000000..79f550f05 --- /dev/null +++ b/src/generated/resources/assets/create/models/block/cyan_nixie_tube.json @@ -0,0 +1,3 @@ +{ + "parent": "create:block/nixie_tube/block" +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/gray_nixie_tube.json b/src/generated/resources/assets/create/models/block/gray_nixie_tube.json new file mode 100644 index 000000000..79f550f05 --- /dev/null +++ b/src/generated/resources/assets/create/models/block/gray_nixie_tube.json @@ -0,0 +1,3 @@ +{ + "parent": "create:block/nixie_tube/block" +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/green_nixie_tube.json b/src/generated/resources/assets/create/models/block/green_nixie_tube.json new file mode 100644 index 000000000..79f550f05 --- /dev/null +++ b/src/generated/resources/assets/create/models/block/green_nixie_tube.json @@ -0,0 +1,3 @@ +{ + "parent": "create:block/nixie_tube/block" +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/light_blue_nixie_tube.json b/src/generated/resources/assets/create/models/block/light_blue_nixie_tube.json new file mode 100644 index 000000000..79f550f05 --- /dev/null +++ b/src/generated/resources/assets/create/models/block/light_blue_nixie_tube.json @@ -0,0 +1,3 @@ +{ + "parent": "create:block/nixie_tube/block" +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/light_gray_nixie_tube.json b/src/generated/resources/assets/create/models/block/light_gray_nixie_tube.json new file mode 100644 index 000000000..79f550f05 --- /dev/null +++ b/src/generated/resources/assets/create/models/block/light_gray_nixie_tube.json @@ -0,0 +1,3 @@ +{ + "parent": "create:block/nixie_tube/block" +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/lime_nixie_tube.json b/src/generated/resources/assets/create/models/block/lime_nixie_tube.json new file mode 100644 index 000000000..79f550f05 --- /dev/null +++ b/src/generated/resources/assets/create/models/block/lime_nixie_tube.json @@ -0,0 +1,3 @@ +{ + "parent": "create:block/nixie_tube/block" +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/magenta_nixie_tube.json b/src/generated/resources/assets/create/models/block/magenta_nixie_tube.json new file mode 100644 index 000000000..79f550f05 --- /dev/null +++ b/src/generated/resources/assets/create/models/block/magenta_nixie_tube.json @@ -0,0 +1,3 @@ +{ + "parent": "create:block/nixie_tube/block" +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/nixie_tube.json b/src/generated/resources/assets/create/models/block/nixie_tube.json new file mode 100644 index 000000000..79f550f05 --- /dev/null +++ b/src/generated/resources/assets/create/models/block/nixie_tube.json @@ -0,0 +1,3 @@ +{ + "parent": "create:block/nixie_tube/block" +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/pink_nixie_tube.json b/src/generated/resources/assets/create/models/block/pink_nixie_tube.json new file mode 100644 index 000000000..79f550f05 --- /dev/null +++ b/src/generated/resources/assets/create/models/block/pink_nixie_tube.json @@ -0,0 +1,3 @@ +{ + "parent": "create:block/nixie_tube/block" +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/purple_nixie_tube.json b/src/generated/resources/assets/create/models/block/purple_nixie_tube.json new file mode 100644 index 000000000..79f550f05 --- /dev/null +++ b/src/generated/resources/assets/create/models/block/purple_nixie_tube.json @@ -0,0 +1,3 @@ +{ + "parent": "create:block/nixie_tube/block" +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/red_nixie_tube.json b/src/generated/resources/assets/create/models/block/red_nixie_tube.json new file mode 100644 index 000000000..79f550f05 --- /dev/null +++ b/src/generated/resources/assets/create/models/block/red_nixie_tube.json @@ -0,0 +1,3 @@ +{ + "parent": "create:block/nixie_tube/block" +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/white_nixie_tube.json b/src/generated/resources/assets/create/models/block/white_nixie_tube.json new file mode 100644 index 000000000..79f550f05 --- /dev/null +++ b/src/generated/resources/assets/create/models/block/white_nixie_tube.json @@ -0,0 +1,3 @@ +{ + "parent": "create:block/nixie_tube/block" +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/models/block/yellow_nixie_tube.json b/src/generated/resources/assets/create/models/block/yellow_nixie_tube.json new file mode 100644 index 000000000..79f550f05 --- /dev/null +++ b/src/generated/resources/assets/create/models/block/yellow_nixie_tube.json @@ -0,0 +1,3 @@ +{ + "parent": "create:block/nixie_tube/block" +} \ No newline at end of file diff --git a/src/generated/resources/data/create/loot_tables/blocks/black_nixie_tube.json b/src/generated/resources/data/create/loot_tables/blocks/black_nixie_tube.json new file mode 100644 index 000000000..68e7a85d0 --- /dev/null +++ b/src/generated/resources/data/create/loot_tables/blocks/black_nixie_tube.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "create:nixie_tube" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/loot_tables/blocks/blue_nixie_tube.json b/src/generated/resources/data/create/loot_tables/blocks/blue_nixie_tube.json new file mode 100644 index 000000000..68e7a85d0 --- /dev/null +++ b/src/generated/resources/data/create/loot_tables/blocks/blue_nixie_tube.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "create:nixie_tube" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/loot_tables/blocks/brown_nixie_tube.json b/src/generated/resources/data/create/loot_tables/blocks/brown_nixie_tube.json new file mode 100644 index 000000000..68e7a85d0 --- /dev/null +++ b/src/generated/resources/data/create/loot_tables/blocks/brown_nixie_tube.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "create:nixie_tube" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/loot_tables/blocks/cyan_nixie_tube.json b/src/generated/resources/data/create/loot_tables/blocks/cyan_nixie_tube.json new file mode 100644 index 000000000..68e7a85d0 --- /dev/null +++ b/src/generated/resources/data/create/loot_tables/blocks/cyan_nixie_tube.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "create:nixie_tube" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/loot_tables/blocks/gray_nixie_tube.json b/src/generated/resources/data/create/loot_tables/blocks/gray_nixie_tube.json new file mode 100644 index 000000000..68e7a85d0 --- /dev/null +++ b/src/generated/resources/data/create/loot_tables/blocks/gray_nixie_tube.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "create:nixie_tube" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/loot_tables/blocks/green_nixie_tube.json b/src/generated/resources/data/create/loot_tables/blocks/green_nixie_tube.json new file mode 100644 index 000000000..68e7a85d0 --- /dev/null +++ b/src/generated/resources/data/create/loot_tables/blocks/green_nixie_tube.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "create:nixie_tube" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/loot_tables/blocks/light_blue_nixie_tube.json b/src/generated/resources/data/create/loot_tables/blocks/light_blue_nixie_tube.json new file mode 100644 index 000000000..68e7a85d0 --- /dev/null +++ b/src/generated/resources/data/create/loot_tables/blocks/light_blue_nixie_tube.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "create:nixie_tube" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/loot_tables/blocks/light_gray_nixie_tube.json b/src/generated/resources/data/create/loot_tables/blocks/light_gray_nixie_tube.json new file mode 100644 index 000000000..68e7a85d0 --- /dev/null +++ b/src/generated/resources/data/create/loot_tables/blocks/light_gray_nixie_tube.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "create:nixie_tube" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/loot_tables/blocks/lime_nixie_tube.json b/src/generated/resources/data/create/loot_tables/blocks/lime_nixie_tube.json new file mode 100644 index 000000000..68e7a85d0 --- /dev/null +++ b/src/generated/resources/data/create/loot_tables/blocks/lime_nixie_tube.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "create:nixie_tube" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/loot_tables/blocks/magenta_nixie_tube.json b/src/generated/resources/data/create/loot_tables/blocks/magenta_nixie_tube.json new file mode 100644 index 000000000..68e7a85d0 --- /dev/null +++ b/src/generated/resources/data/create/loot_tables/blocks/magenta_nixie_tube.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "create:nixie_tube" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/loot_tables/blocks/pink_nixie_tube.json b/src/generated/resources/data/create/loot_tables/blocks/pink_nixie_tube.json new file mode 100644 index 000000000..68e7a85d0 --- /dev/null +++ b/src/generated/resources/data/create/loot_tables/blocks/pink_nixie_tube.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "create:nixie_tube" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/loot_tables/blocks/purple_nixie_tube.json b/src/generated/resources/data/create/loot_tables/blocks/purple_nixie_tube.json new file mode 100644 index 000000000..68e7a85d0 --- /dev/null +++ b/src/generated/resources/data/create/loot_tables/blocks/purple_nixie_tube.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "create:nixie_tube" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/loot_tables/blocks/red_nixie_tube.json b/src/generated/resources/data/create/loot_tables/blocks/red_nixie_tube.json new file mode 100644 index 000000000..68e7a85d0 --- /dev/null +++ b/src/generated/resources/data/create/loot_tables/blocks/red_nixie_tube.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "create:nixie_tube" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/loot_tables/blocks/white_nixie_tube.json b/src/generated/resources/data/create/loot_tables/blocks/white_nixie_tube.json new file mode 100644 index 000000000..68e7a85d0 --- /dev/null +++ b/src/generated/resources/data/create/loot_tables/blocks/white_nixie_tube.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "create:nixie_tube" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/loot_tables/blocks/yellow_nixie_tube.json b/src/generated/resources/data/create/loot_tables/blocks/yellow_nixie_tube.json new file mode 100644 index 000000000..68e7a85d0 --- /dev/null +++ b/src/generated/resources/data/create/loot_tables/blocks/yellow_nixie_tube.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "create:nixie_tube" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/java/com/simibubi/create/AllBlocks.java b/src/main/java/com/simibubi/create/AllBlocks.java index d4dcfa5c2..28a9ed80c 100644 --- a/src/main/java/com/simibubi/create/AllBlocks.java +++ b/src/main/java/com/simibubi/create/AllBlocks.java @@ -13,6 +13,7 @@ import com.simibubi.create.AllTags.AllBlockTags; import com.simibubi.create.AllTags.AllItemTags; import com.simibubi.create.content.AllSections; import com.simibubi.create.content.contraptions.base.CasingBlock; +import com.simibubi.create.content.contraptions.components.AssemblyOperatorBlockItem; import com.simibubi.create.content.contraptions.components.actors.BellMovementBehaviour; import com.simibubi.create.content.contraptions.components.actors.DrillBlock; import com.simibubi.create.content.contraptions.components.actors.DrillMovementBehaviour; @@ -40,7 +41,6 @@ import com.simibubi.create.content.contraptions.components.flywheel.FlywheelBloc import com.simibubi.create.content.contraptions.components.flywheel.FlywheelGenerator; import com.simibubi.create.content.contraptions.components.flywheel.engine.FurnaceEngineBlock; import com.simibubi.create.content.contraptions.components.millstone.MillstoneBlock; -import com.simibubi.create.content.contraptions.components.AssemblyOperatorBlockItem; import com.simibubi.create.content.contraptions.components.mixer.MechanicalMixerBlock; import com.simibubi.create.content.contraptions.components.motor.CreativeMotorBlock; import com.simibubi.create.content.contraptions.components.motor.CreativeMotorGenerator; @@ -1204,14 +1204,28 @@ public class AllBlocks { .tag(AllBlockTags.SAFE_NBT.tag) .register(); - public static final BlockEntry NIXIE_TUBE = REGISTRATE.block("nixie_tube", NixieTubeBlock::new) - .initialProperties(SharedProperties::softMetal) - .properties(p -> p.luminance($ -> 5)) - .blockstate(new NixieTubeGenerator()::generate) - .addLayer(() -> RenderType::getTranslucent) - .item() - .transform(customItemModel()) - .register(); + public static final BlockEntry ORANGE_NIXIE_TUBE = + REGISTRATE.block("nixie_tube", p -> new NixieTubeBlock(p, DyeColor.ORANGE)) + .initialProperties(SharedProperties::softMetal) + .properties(p -> p.luminance($ -> 5)) + .blockstate(new NixieTubeGenerator()::generate) + .addLayer(() -> RenderType::getTranslucent) + .item() + .transform(customItemModel()) + .register(); + + public static final DyedBlockList NIXIE_TUBES = new DyedBlockList<>(colour -> { + if (colour == DyeColor.ORANGE) + return ORANGE_NIXIE_TUBE; + String colourName = colour.getString(); + return REGISTRATE.block(colourName + "_nixie_tube", p -> new NixieTubeBlock(p, colour)) + .initialProperties(SharedProperties::softMetal) + .properties(p -> p.luminance($ -> 5)) + .blockstate(new NixieTubeGenerator()::generate) + .loot((p, b) -> p.registerDropping(b, ORANGE_NIXIE_TUBE.get())) + .addLayer(() -> RenderType::getTranslucent) + .register(); + }); public static final BlockEntry REDSTONE_LINK = REGISTRATE.block("redstone_link", RedstoneLinkBlock::new) diff --git a/src/main/java/com/simibubi/create/AllItems.java b/src/main/java/com/simibubi/create/AllItems.java index 9292b4931..de9051c5e 100644 --- a/src/main/java/com/simibubi/create/AllItems.java +++ b/src/main/java/com/simibubi/create/AllItems.java @@ -252,11 +252,6 @@ public class AllItems { REGISTRATE.startSection(CURIOSITIES); } - public static final ItemEntry EXTENDO_GRIP = REGISTRATE.item("extendo_grip", ExtendoGripItem::new) - .transform(CreateRegistrate.customRenderedItem(() -> ExtendoGripModel::new)) - .model(AssetLookup.itemModelWithPartials()) - .register(); - public static final ItemEntry LINKED_CONTROLLER = REGISTRATE.item("linked_controller", LinkedControllerItem::new) .properties(p -> p.maxStackSize(1)) @@ -270,6 +265,11 @@ public class AllItems { .transform(CreateRegistrate.customRenderedItem(() -> PotatoCannonModel::new)) .model(AssetLookup.itemModelWithPartials()) .register(); + + public static final ItemEntry EXTENDO_GRIP = REGISTRATE.item("extendo_grip", ExtendoGripItem::new) + .transform(CreateRegistrate.customRenderedItem(() -> ExtendoGripModel::new)) + .model(AssetLookup.itemModelWithPartials()) + .register(); public static final ItemEntry WAND_OF_SYMMETRY = REGISTRATE.item("wand_of_symmetry", SymmetryWandItem::new) diff --git a/src/main/java/com/simibubi/create/AllTileEntities.java b/src/main/java/com/simibubi/create/AllTileEntities.java index 51c604488..46cb389b6 100644 --- a/src/main/java/com/simibubi/create/AllTileEntities.java +++ b/src/main/java/com/simibubi/create/AllTileEntities.java @@ -598,7 +598,8 @@ public class AllTileEntities { public static final TileEntityEntry NIXIE_TUBE = Create.registrate() .tileEntity("nixie_tube", NixieTubeTileEntity::new) - .validBlocks(AllBlocks.NIXIE_TUBE) + .validBlocks(AllBlocks.ORANGE_NIXIE_TUBE) + .validBlocks(AllBlocks.NIXIE_TUBES.toArray()) .renderer(() -> NixieTubeRenderer::new) .register(); diff --git a/src/main/java/com/simibubi/create/content/logistics/block/redstone/NixieTubeBlock.java b/src/main/java/com/simibubi/create/content/logistics/block/redstone/NixieTubeBlock.java index 078deb352..0faba8a3a 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/redstone/NixieTubeBlock.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/redstone/NixieTubeBlock.java @@ -2,9 +2,11 @@ package com.simibubi.create.content.logistics.block.redstone; import java.util.Random; +import com.simibubi.create.AllBlocks; import com.simibubi.create.AllShapes; import com.simibubi.create.AllTileEntities; import com.simibubi.create.foundation.block.ITE; +import com.simibubi.create.foundation.utility.DyeHelper; import com.simibubi.create.foundation.utility.Iterate; import net.minecraft.block.Block; @@ -12,6 +14,7 @@ import net.minecraft.block.BlockState; import net.minecraft.block.HorizontalBlock; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.BlockItemUseContext; +import net.minecraft.item.DyeColor; import net.minecraft.item.ItemStack; import net.minecraft.item.Items; import net.minecraft.pathfinding.PathType; @@ -33,9 +36,11 @@ import net.minecraft.world.server.ServerWorld; public class NixieTubeBlock extends HorizontalBlock implements ITE { public static final BooleanProperty CEILING = BooleanProperty.create("ceiling"); + private DyeColor color; - public NixieTubeBlock(Properties properties) { + public NixieTubeBlock(Properties properties, DyeColor color) { super(properties); + this.color = color; setDefaultState(getDefaultState().with(CEILING, false)); } @@ -50,7 +55,6 @@ public class NixieTubeBlock extends HorizontalBlock implements ITE te.displayCustomNameOf(heldItem, rowPosition)); - BlockPos nextPos = currentPos.offset(right); - if (world.getBlockState(nextPos) != state) - break; - currentPos = nextPos; - index++; - } + BlockPos currentPos = pos; + while (true) { + BlockPos nextPos = currentPos.offset(left); + if (!areNixieBlocksEqual(world.getBlockState(nextPos), state)) + break; + currentPos = nextPos; } - return ActionResultType.PASS; + int index = 0; + + while (true) { + final int rowPosition = index; + + if (display) + withTileEntityDo(world, currentPos, te -> te.displayCustomNameOf(heldItem, rowPosition)); + if (dye != null) + world.setBlockState(currentPos, withColor(state, dye)); + + BlockPos nextPos = currentPos.offset(right); + if (!areNixieBlocksEqual(world.getBlockState(nextPos), state)) + break; + currentPos = nextPos; + index++; + } + + return ActionResultType.SUCCESS; } @Override @@ -188,4 +205,24 @@ public class NixieTubeBlock extends HorizontalBlock implements ITE ModelFile getModel(DataGenContext ctx, RegistrateBlockstateProvider prov, BlockState state) { - return AssetLookup.partialBaseModel(ctx, prov); + return prov.models() + .withExistingParent(ctx.getName(), prov.modLoc("block/nixie_tube/block")); } } diff --git a/src/main/java/com/simibubi/create/content/logistics/block/redstone/NixieTubeRenderer.java b/src/main/java/com/simibubi/create/content/logistics/block/redstone/NixieTubeRenderer.java index 7f480714b..047841ae9 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/redstone/NixieTubeRenderer.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/redstone/NixieTubeRenderer.java @@ -1,7 +1,9 @@ package com.simibubi.create.content.logistics.block.redstone; +import java.util.Map; import java.util.Random; +import com.google.common.collect.ImmutableMap; import com.mojang.blaze3d.matrix.MatrixStack; import com.simibubi.create.foundation.tileEntity.renderer.SafeTileEntityRenderer; import com.simibubi.create.foundation.utility.AngleHelper; @@ -16,12 +18,38 @@ import net.minecraft.client.gui.fonts.TexturedGlyph; import net.minecraft.client.renderer.IRenderTypeBuffer; import net.minecraft.client.renderer.IRenderTypeBuffer.Impl; import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher; +import net.minecraft.item.DyeColor; import net.minecraft.util.text.Style; public class NixieTubeRenderer extends SafeTileEntityRenderer { private Random r = new Random(); + public static final Map> DYE_TABLE = new ImmutableMap.Builder>() + + // DyeColor, ( Front RGB, Back RGB ) + .put(DyeColor.BLACK, Couple.create(0x45403B, 0x21201F)) + .put(DyeColor.RED, Couple.create(0xB13937, 0x632737)) + .put(DyeColor.GREEN, Couple.create(0xC04488, 0x1D6045)) + .put(DyeColor.BROWN, Couple.create(0xAC855C, 0x68533E)) + + .put(DyeColor.BLUE, Couple.create(0xC04488, 0xC04488)) + .put(DyeColor.GRAY, Couple.create(0x5D666F, 0x313538)) + .put(DyeColor.LIGHT_GRAY, Couple.create(0x95969B, 0x707070)) + .put(DyeColor.PURPLE, Couple.create(0x9F54AE, 0x63366C)) + + .put(DyeColor.CYAN, Couple.create(0x3EABB4, 0x3C7872)) + .put(DyeColor.PINK, Couple.create(0xD5A8CB, 0xB86B95)) + .put(DyeColor.LIME, Couple.create(0xA3DF55, 0x4FB16F)) + .put(DyeColor.YELLOW, Couple.create(0xE6D756, 0xE9AC29)) + + .put(DyeColor.LIGHT_BLUE, Couple.create(0x69CED2, 0x508AA5)) + .put(DyeColor.ORANGE, Couple.create(0xEE9246, 0xD94927)) + .put(DyeColor.MAGENTA, Couple.create(0xF062B0, 0xC04488)) + .put(DyeColor.WHITE, Couple.create(0xEDEAE5, 0xBBB6B0)) + + .build(); + public NixieTubeRenderer(TileEntityRendererDispatcher dispatcher) { super(dispatcher); } @@ -39,29 +67,31 @@ public class NixieTubeRenderer extends SafeTileEntityRenderer s = te.getDisplayedStrings(); + DyeColor color = NixieTubeBlock.colorOf(te.getBlockState()); ms.push(); ms.translate(-4 / 16f, 0, 0); ms.scale(scale, -scale, scale); - drawTube(ms, buffer, s.getFirst(), height); + drawTube(ms, buffer, s.getFirst(), height, color); ms.pop(); ms.push(); ms.translate(4 / 16f, 0, 0); ms.scale(scale, -scale, scale); - drawTube(ms, buffer, s.getSecond(), height); + drawTube(ms, buffer, s.getSecond(), height, color); ms.pop(); ms.pop(); } - private void drawTube(MatrixStack ms, IRenderTypeBuffer buffer, String c, float height) { + private void drawTube(MatrixStack ms, IRenderTypeBuffer buffer, String c, float height, DyeColor color) { FontRenderer fontRenderer = Minecraft.getInstance().fontRenderer; float charWidth = fontRenderer.getStringWidth(c); float shadowOffset = .5f; float flicker = r.nextFloat(); - int brightColor = 0xFF982B; - int darkColor = 0xE03221; + Couple couple = DYE_TABLE.get(color); + int brightColor = couple.getFirst(); + int darkColor = couple.getSecond(); int flickeringBrightColor = ColorHelper.mixColors(brightColor, darkColor, flicker / 4); ms.push(); @@ -79,7 +109,7 @@ public class NixieTubeRenderer extends SafeTileEntityRenderer b.key('E', I.electronTube()) .key('B', I.brassCasing()) .patternLine("EBE")), diff --git a/src/main/java/com/simibubi/create/foundation/ponder/content/PonderIndex.java b/src/main/java/com/simibubi/create/foundation/ponder/content/PonderIndex.java index 88ba91352..a61068eb9 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/content/PonderIndex.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/content/PonderIndex.java @@ -285,7 +285,7 @@ public class PonderIndex { .addStoryBoard("powered_toggle_latch", RedstoneScenes::poweredToggleLatch); PonderRegistry.forComponents(AllBlocks.ANALOG_LEVER) .addStoryBoard("analog_lever", RedstoneScenes::analogLever); - PonderRegistry.forComponents(AllBlocks.NIXIE_TUBE) + PonderRegistry.forComponents(AllBlocks.ORANGE_NIXIE_TUBE) .addStoryBoard("nixie_tube", RedstoneScenes::nixieTube); PonderRegistry.forComponents(AllBlocks.REDSTONE_LINK) .addStoryBoard("redstone_link", RedstoneScenes::redstoneLink); @@ -392,7 +392,7 @@ public class PonderIndex { .add(AllBlocks.PORTABLE_STORAGE_INTERFACE); PonderRegistry.tags.forTag(PonderTag.DECORATION) - .add(AllBlocks.NIXIE_TUBE) + .add(AllBlocks.ORANGE_NIXIE_TUBE) .add(AllBlocks.CUCKOO_CLOCK) .add(AllBlocks.WOODEN_BRACKET) .add(AllBlocks.METAL_BRACKET) @@ -411,7 +411,7 @@ public class PonderIndex { .add(Blocks.WHITE_WOOL); PonderRegistry.tags.forTag(PonderTag.REDSTONE) - .add(AllBlocks.NIXIE_TUBE) + .add(AllBlocks.ORANGE_NIXIE_TUBE) .add(AllBlocks.REDSTONE_CONTACT) .add(AllBlocks.ANALOG_LEVER) .add(AllBlocks.REDSTONE_LINK) From e078c7a2a295a3877ec5745370572de122489724 Mon Sep 17 00:00:00 2001 From: Daniel Amberson Date: Tue, 6 Jul 2021 09:23:32 -0500 Subject: [PATCH 029/118] polished bell assets: part 2 - this includes tweaks for the haunted bell model! - general tweaks to both peculiar and haunted bells, by both me and kryppers - the bell base is now wood instead of brass! and is now less bulky --- .../models/block/bell_base/block_ceiling.json | 73 +++++------------- .../block/bell_base/block_double_wall.json | 32 ++++---- .../models/block/bell_base/block_floor.json | 67 +++++----------- .../block/bell_base/block_single_wall.json | 21 +++-- .../create/models/block/haunted_bell.json | 40 +++++----- .../create/models/block/peculiar_bell.json | 32 ++++---- .../assets/create/textures/block/bell.png | Bin 727 -> 843 bytes .../create/textures/block/bell_anim.png | Bin 6600 -> 5330 bytes .../create/textures/block/bell_frame.png | Bin 782 -> 735 bytes .../create/textures/block/bell_frame_side.png | Bin 700 -> 765 bytes 10 files changed, 99 insertions(+), 166 deletions(-) diff --git a/src/main/resources/assets/create/models/block/bell_base/block_ceiling.json b/src/main/resources/assets/create/models/block/bell_base/block_ceiling.json index 97d3b5e92..33e494968 100644 --- a/src/main/resources/assets/create/models/block/bell_base/block_ceiling.json +++ b/src/main/resources/assets/create/models/block/bell_base/block_ceiling.json @@ -1,69 +1,34 @@ { "credit": "Made with Blockbench", + "parent": "block/block", "textures": { - "1": "create:block/bell_frame_side", - "2": "create:block/bell_frame", + "2": "create:block/bell_frame_side", "particle": "create:block/bell" }, "elements": [ { - "from": [15, 4, 4], - "to": [16, 12, 12], - "rotation": {"angle": 0, "axis": "y", "origin": [0, 16, 0]}, + "from": [0, 5, 5], + "to": [2, 16, 11], "faces": { - "north": {"uv": [16, 8, 15, 0], "texture": "#2"}, - "east": {"uv": [0, 8, 8, 0], "texture": "#2"}, - "south": {"uv": [1, 8, 0, 0], "texture": "#2"}, - "west": {"uv": [16, 8, 8, 0], "texture": "#2"}, - "up": {"uv": [4, 11, 12, 12], "rotation": 270, "texture": "#1"}, - "down": {"uv": [4, 4, 12, 5], "rotation": 90, "texture": "#1"} + "north": {"uv": [14, 5, 12, 16], "texture": "#2"}, + "east": {"uv": [12, 5, 6, 16], "texture": "#2"}, + "south": {"uv": [14, 5, 16, 16], "texture": "#2"}, + "west": {"uv": [0, 5, 6, 16], "texture": "#2"}, + "up": {"uv": [6, 0, 0, 2], "rotation": 270, "texture": "#2"}, + "down": {"uv": [12, 2, 6, 0], "rotation": 90, "texture": "#2"} } }, { - "from": [0, 4, 4], - "to": [1, 12, 12], - "rotation": {"angle": 0, "axis": "y", "origin": [0, 16, 0]}, + "from": [14, 5, 5], + "to": [16, 16, 11], "faces": { - "north": {"uv": [16, 8, 15, 0], "texture": "#2"}, - "east": {"uv": [8, 8, 16, 0], "texture": "#2"}, - "south": {"uv": [1, 8, 0, 0], "texture": "#2"}, - "west": {"uv": [8, 8, 0, 0], "texture": "#2"}, - "up": {"uv": [4, 11, 12, 12], "rotation": 270, "texture": "#1"}, - "down": {"uv": [4, 4, 12, 5], "rotation": 90, "texture": "#1"} - } - }, - { - "from": [0, 12, 2], - "to": [2, 16, 14], - "rotation": {"angle": 0, "axis": "y", "origin": [0, 16, 0]}, - "faces": { - "north": {"uv": [14, 16, 16, 12], "texture": "#2"}, - "east": {"uv": [0, 16, 12, 12], "texture": "#2"}, - "south": {"uv": [14, 16, 12, 12], "texture": "#2"}, - "west": {"uv": [12, 12, 0, 8], "texture": "#2"}, - "up": {"uv": [11, 14, 0, 12], "rotation": 90, "texture": "#1"}, - "down": {"uv": [12, 14, 0, 16], "rotation": 270, "texture": "#1"} - } - }, - { - "from": [14, 12, 2], - "to": [16, 16, 14], - "rotation": {"angle": 0, "axis": "y", "origin": [0, 16, 0]}, - "faces": { - "north": {"uv": [16, 16, 14, 12], "texture": "#2"}, - "east": {"uv": [0, 12, 12, 8], "texture": "#2"}, - "south": {"uv": [12, 16, 14, 12], "texture": "#2"}, - "west": {"uv": [12, 16, 0, 12], "texture": "#2"}, - "up": {"uv": [11, 12, 0, 14], "rotation": 90, "texture": "#1"}, - "down": {"uv": [12, 16, 0, 14], "rotation": 270, "texture": "#1"} + "north": {"uv": [14, 5, 16, 16], "texture": "#2"}, + "east": {"uv": [0, 5, 6, 16], "texture": "#2"}, + "south": {"uv": [14, 5, 12, 16], "texture": "#2"}, + "west": {"uv": [12, 5, 6, 16], "texture": "#2"}, + "up": {"uv": [6, 0, 0, 2], "rotation": 90, "texture": "#2"}, + "down": {"uv": [12, 2, 6, 0], "rotation": 270, "texture": "#2"} } } - ], - "groups": [ - { - "name": "block_double_wall", - "origin": [8, 8, 8], - "color": 0, - "children": [0, 1] - }, 2, 3] + ] } \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/bell_base/block_double_wall.json b/src/main/resources/assets/create/models/block/bell_base/block_double_wall.json index 623a83eb7..1e0510948 100644 --- a/src/main/resources/assets/create/models/block/bell_base/block_double_wall.json +++ b/src/main/resources/assets/create/models/block/bell_base/block_double_wall.json @@ -6,27 +6,27 @@ }, "elements": [ { - "from": [4, 4, 0], - "to": [12, 12, 1], + "from": [5, 5, 0], + "to": [11, 11, 2], "faces": { - "north": {"uv": [4, 4, 12, 12], "texture": "#1"}, - "east": {"uv": [5, 4, 4, 12], "texture": "#1"}, - "south": {"uv": [12, 4, 4, 12], "texture": "#1"}, - "west": {"uv": [12, 4, 11, 12], "texture": "#1"}, - "up": {"uv": [12, 4, 4, 5], "texture": "#1"}, - "down": {"uv": [12, 11, 4, 12], "texture": "#1"} + "north": {"uv": [0, 10, 6, 16], "texture": "#1"}, + "east": {"uv": [14, 5, 12, 11], "texture": "#1"}, + "south": {"uv": [12, 10, 6, 16], "texture": "#1"}, + "west": {"uv": [14, 5, 16, 11], "texture": "#1"}, + "up": {"uv": [6, 0, 0, 2], "texture": "#1"}, + "down": {"uv": [12, 0, 6, 2], "rotation": 180, "texture": "#1"} } }, { - "from": [4, 4, 15], - "to": [12, 12, 16], + "from": [5, 5, 14], + "to": [11, 11, 16], "faces": { - "north": {"uv": [4, 4, 12, 12], "texture": "#1"}, - "east": {"uv": [5, 4, 4, 12], "texture": "#1"}, - "south": {"uv": [12, 4, 4, 12], "texture": "#1"}, - "west": {"uv": [12, 4, 11, 12], "texture": "#1"}, - "up": {"uv": [12, 4, 4, 5], "texture": "#1"}, - "down": {"uv": [12, 11, 4, 12], "texture": "#1"} + "north": {"uv": [12, 10, 6, 16], "texture": "#1"}, + "east": {"uv": [14, 5, 16, 11], "texture": "#1"}, + "south": {"uv": [0, 10, 6, 16], "texture": "#1"}, + "west": {"uv": [14, 5, 12, 11], "texture": "#1"}, + "up": {"uv": [6, 0, 0, 2], "rotation": 180, "texture": "#1"}, + "down": {"uv": [12, 0, 6, 2], "texture": "#1"} } } ], diff --git a/src/main/resources/assets/create/models/block/bell_base/block_floor.json b/src/main/resources/assets/create/models/block/bell_base/block_floor.json index 63cc96caa..9714a848e 100644 --- a/src/main/resources/assets/create/models/block/bell_base/block_floor.json +++ b/src/main/resources/assets/create/models/block/bell_base/block_floor.json @@ -1,65 +1,34 @@ { "credit": "Made with Blockbench", + "parent": "block/block", "textures": { - "1": "create:block/bell_frame_side", "2": "create:block/bell_frame", "particle": "create:block/bell" }, "elements": [ { - "from": [15, 4, 4], - "to": [16, 12, 12], + "from": [0, 0, 5], + "to": [2, 11, 11], "faces": { - "north": {"uv": [16, 0, 15, 8], "texture": "#2"}, - "east": {"uv": [0, 0, 8, 8], "texture": "#2"}, - "south": {"uv": [1, 0, 0, 8], "texture": "#2"}, - "west": {"uv": [16, 0, 8, 8], "texture": "#2"}, - "up": {"uv": [12, 4, 4, 5], "rotation": 90, "texture": "#1"}, - "down": {"uv": [12, 11, 4, 12], "rotation": 270, "texture": "#1"} + "north": {"uv": [14, 5, 12, 16], "texture": "#2"}, + "east": {"uv": [12, 5, 6, 16], "texture": "#2"}, + "south": {"uv": [14, 5, 16, 16], "texture": "#2"}, + "west": {"uv": [0, 5, 6, 16], "texture": "#2"}, + "up": {"uv": [6, 0, 0, 2], "rotation": 270, "texture": "#2"}, + "down": {"uv": [12, 2, 6, 0], "rotation": 90, "texture": "#2"} } }, { - "from": [0, 4, 4], - "to": [1, 12, 12], + "from": [14, 0, 5], + "to": [16, 11, 11], "faces": { - "north": {"uv": [16, 0, 15, 8], "texture": "#2"}, - "east": {"uv": [8, 0, 16, 8], "texture": "#2"}, - "south": {"uv": [1, 0, 0, 8], "texture": "#2"}, - "west": {"uv": [8, 0, 0, 8], "texture": "#2"}, - "up": {"uv": [12, 4, 4, 5], "rotation": 90, "texture": "#1"}, - "down": {"uv": [12, 11, 4, 12], "rotation": 270, "texture": "#1"} - } - }, - { - "from": [0, 0, 2], - "to": [2, 4, 14], - "faces": { - "north": {"uv": [14, 12, 16, 16], "texture": "#2"}, - "east": {"uv": [0, 12, 12, 16], "texture": "#2"}, - "south": {"uv": [14, 12, 12, 16], "texture": "#2"}, - "west": {"uv": [12, 8, 0, 12], "texture": "#2"}, - "up": {"uv": [0, 14, 12, 16], "rotation": 270, "texture": "#1"}, - "down": {"uv": [0, 14, 11, 12], "rotation": 90, "texture": "#1"} - } - }, - { - "from": [14, 0, 2], - "to": [16, 4, 14], - "faces": { - "north": {"uv": [16, 12, 14, 16], "texture": "#2"}, - "east": {"uv": [0, 8, 12, 12], "texture": "#2"}, - "south": {"uv": [12, 12, 14, 16], "texture": "#2"}, - "west": {"uv": [12, 12, 0, 16], "texture": "#2"}, - "up": {"uv": [0, 16, 12, 14], "rotation": 270, "texture": "#1"}, - "down": {"uv": [0, 12, 11, 14], "rotation": 90, "texture": "#1"} + "north": {"uv": [14, 5, 16, 16], "texture": "#2"}, + "east": {"uv": [0, 5, 6, 16], "texture": "#2"}, + "south": {"uv": [14, 5, 12, 16], "texture": "#2"}, + "west": {"uv": [12, 5, 6, 16], "texture": "#2"}, + "up": {"uv": [6, 0, 0, 2], "rotation": 90, "texture": "#2"}, + "down": {"uv": [12, 2, 6, 0], "rotation": 270, "texture": "#2"} } } - ], - "groups": [ - { - "name": "block_double_wall", - "origin": [8, 8, 8], - "color": 0, - "children": [0, 1] - }, 2, 3] + ] } \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/bell_base/block_single_wall.json b/src/main/resources/assets/create/models/block/bell_base/block_single_wall.json index 605614397..bccf3bff3 100644 --- a/src/main/resources/assets/create/models/block/bell_base/block_single_wall.json +++ b/src/main/resources/assets/create/models/block/bell_base/block_single_wall.json @@ -6,15 +6,15 @@ }, "elements": [ { - "from": [4, 4, 0], - "to": [12, 12, 1], + "from": [5, 5, 0], + "to": [11, 11, 2], "faces": { - "north": {"uv": [4, 4, 12, 12], "texture": "#1"}, - "east": {"uv": [4, 4, 5, 12], "texture": "#1"}, - "south": {"uv": [12, 4, 4, 12], "texture": "#1"}, - "west": {"uv": [11, 4, 12, 12], "texture": "#1"}, - "up": {"uv": [12, 4, 4, 5], "texture": "#1"}, - "down": {"uv": [12, 11, 4, 12], "texture": "#1"} + "north": {"uv": [0, 10, 6, 16], "texture": "#1"}, + "east": {"uv": [14, 5, 12, 11], "texture": "#1"}, + "south": {"uv": [12, 10, 6, 16], "texture": "#1"}, + "west": {"uv": [14, 5, 16, 11], "texture": "#1"}, + "up": {"uv": [6, 0, 0, 2], "texture": "#1"}, + "down": {"uv": [12, 0, 6, 2], "rotation": 180, "texture": "#1"} } } ], @@ -23,7 +23,6 @@ "name": "Frame", "origin": [8, 8, 8], "color": 0, - "children": [0] - } - ] + "children": [] + }, 0] } \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/haunted_bell.json b/src/main/resources/assets/create/models/block/haunted_bell.json index ede25ad47..7acde1c60 100644 --- a/src/main/resources/assets/create/models/block/haunted_bell.json +++ b/src/main/resources/assets/create/models/block/haunted_bell.json @@ -2,34 +2,33 @@ "credit": "Made with Blockbench", "parent": "block/block", "textures": { - "0": "create:block/bell_anim", - "particle": "create:block/bell" + "0": "create:block/bell_anim" }, "elements": [ { - "from": [13, 7, 7], - "to": [15, 9, 9], + "from": [12.99, 6.99, 6.99], + "to": [16.01, 9.01, 9.01], "rotation": {"angle": 0, "axis": "y", "origin": [7, 8, 8]}, "faces": { - "north": {"uv": [10.5, 6, 9.5, 7], "texture": "#0"}, - "east": {"uv": [9.5, 7, 10.5, 8], "rotation": 90, "texture": "#0"}, - "south": {"uv": [9.5, 6, 10.5, 7], "texture": "#0"}, + "north": {"uv": [11, 6, 9.5, 7], "texture": "#0"}, + "east": {"uv": [11, 7, 12, 8], "texture": "#0"}, + "south": {"uv": [9.5, 6, 11, 7], "texture": "#0"}, "west": {"uv": [10, 7, 10.5, 7.5], "texture": "#0"}, - "up": {"uv": [9.5, 5, 10.5, 6], "texture": "#0"}, - "down": {"uv": [9.5, 7, 10.5, 8], "texture": "#0"} + "up": {"uv": [9.5, 5, 11, 6], "texture": "#0"}, + "down": {"uv": [9.5, 7, 11, 8], "texture": "#0"} } }, { - "from": [1, 7, 7], - "to": [3, 9, 9], + "from": [-0.01, 6.99, 6.99], + "to": [3.01, 9.01, 9.01], "rotation": {"angle": 0, "axis": "y", "origin": [9, 8, 8]}, "faces": { - "north": {"uv": [9.5, 6, 10.5, 7], "texture": "#0"}, + "north": {"uv": [9.5, 6, 11, 7], "texture": "#0"}, "east": {"uv": [10, 7, 10.5, 7.5], "texture": "#0"}, - "south": {"uv": [10.5, 6, 9.5, 7], "texture": "#0"}, - "west": {"uv": [9.5, 7, 10.5, 8], "rotation": 90, "texture": "#0"}, - "up": {"uv": [9.5, 5, 10.5, 6], "rotation": 180, "texture": "#0"}, - "down": {"uv": [9.5, 7, 10.5, 8], "rotation": 180, "texture": "#0"} + "south": {"uv": [11, 6, 9.5, 7], "texture": "#0"}, + "west": {"uv": [11, 7, 12, 8], "texture": "#0"}, + "up": {"uv": [9.5, 5, 11, 6], "rotation": 180, "texture": "#0"}, + "down": {"uv": [9.5, 7, 11, 8], "rotation": 180, "texture": "#0"} } }, { @@ -51,15 +50,15 @@ "rotation": {"angle": 0, "axis": "y", "origin": [8, 9, 8]}, "faces": { "north": {"uv": [8, 0, 12, 4.5], "texture": "#0"}, - "east": {"uv": [8, 0, 12, 4.5], "texture": "#0"}, + "east": {"uv": [12, 4, 16, 8.5], "texture": "#0"}, "south": {"uv": [8, 0, 12, 4.5], "texture": "#0"}, - "west": {"uv": [8, 0, 12, 4.5], "texture": "#0"}, + "west": {"uv": [12, 4, 16, 8.5], "texture": "#0"}, "up": {"uv": [12, 0, 16, 4], "texture": "#0"} } }, { - "from": [7, 12, 7], - "to": [9, 16, 9], + "from": [7, 11, 7], + "to": [9, 15, 9], "rotation": {"angle": 0, "axis": "y", "origin": [8, 9, 8]}, "faces": { "north": {"uv": [8, 6, 9, 8], "texture": "#0"}, @@ -90,6 +89,7 @@ { "name": "Bell", "origin": [8, 8, 8], + "color": 0, "children": [0, 1, 2, 3, 4, 5, 6] } ] diff --git a/src/main/resources/assets/create/models/block/peculiar_bell.json b/src/main/resources/assets/create/models/block/peculiar_bell.json index d4d7060da..1c828adf2 100644 --- a/src/main/resources/assets/create/models/block/peculiar_bell.json +++ b/src/main/resources/assets/create/models/block/peculiar_bell.json @@ -7,29 +7,29 @@ }, "elements": [ { - "from": [13, 7, 7], - "to": [15, 9, 9], + "from": [12.99, 6.99, 6.99], + "to": [16.01, 9.01, 9.01], "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 8]}, "faces": { - "north": {"uv": [10.5, 6, 9.5, 7], "texture": "#0"}, - "east": {"uv": [9.5, 7, 10.5, 8], "rotation": 90, "texture": "#0"}, - "south": {"uv": [9.5, 6, 10.5, 7], "texture": "#0"}, + "north": {"uv": [11, 6, 9.5, 7], "texture": "#0"}, + "east": {"uv": [11, 7, 12, 8], "texture": "#0"}, + "south": {"uv": [9.5, 6, 11, 7], "texture": "#0"}, "west": {"uv": [10, 7, 10.5, 7.5], "texture": "#0"}, - "up": {"uv": [9.5, 5, 10.5, 6], "texture": "#0"}, - "down": {"uv": [9.5, 7, 10.5, 8], "texture": "#0"} + "up": {"uv": [9.5, 5, 11, 6], "texture": "#0"}, + "down": {"uv": [9.5, 7, 11, 8], "texture": "#0"} } }, { - "from": [1, 7, 7], - "to": [3, 9, 9], + "from": [-0.01, 6.99, 6.99], + "to": [3.01, 9.01, 9.01], "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 8]}, "faces": { - "north": {"uv": [9.5, 6, 10.5, 7], "texture": "#0"}, + "north": {"uv": [9.5, 6, 11, 7], "texture": "#0"}, "east": {"uv": [10, 7, 10.5, 7.5], "texture": "#0"}, - "south": {"uv": [10.5, 6, 9.5, 7], "texture": "#0"}, - "west": {"uv": [9.5, 7, 10.5, 8], "rotation": 90, "texture": "#0"}, - "up": {"uv": [9.5, 5, 10.5, 6], "rotation": 180, "texture": "#0"}, - "down": {"uv": [9.5, 7, 10.5, 8], "rotation": 180, "texture": "#0"} + "south": {"uv": [11, 6, 9.5, 7], "texture": "#0"}, + "west": {"uv": [11, 7, 12, 8], "texture": "#0"}, + "up": {"uv": [9.5, 5, 11, 6], "rotation": 180, "texture": "#0"}, + "down": {"uv": [9.5, 7, 11, 8], "rotation": 180, "texture": "#0"} } }, { @@ -56,8 +56,8 @@ } }, { - "from": [7, 12, 7], - "to": [9, 16, 9], + "from": [7, 11, 7], + "to": [9, 15, 9], "faces": { "north": {"uv": [8, 6, 9, 8], "texture": "#0"}, "east": {"uv": [8, 6, 9, 8], "texture": "#0"}, diff --git a/src/main/resources/assets/create/textures/block/bell.png b/src/main/resources/assets/create/textures/block/bell.png index df12de3909e7ae10e17e643b1be53528516654d5..fedafba914d8310c41d5388a0d3ce90b7b11d09a 100644 GIT binary patch delta 769 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 diff --git a/src/main/resources/assets/create/textures/block/bell_frame.png b/src/main/resources/assets/create/textures/block/bell_frame.png index 959d0d165aad7b4bf3b7ecf28ef2719c52faa674..c624f8e0806ed95e7aef646917d53ae7e770ea3e 100644 GIT binary patch delta 287 zcmV+)0pR|Q2Hyp+$^m}>NklDQk;=*>ZK3Kddv8LmoQUHmP zU{YH^ze$*{qPM^%)Gp5XHgo-rk0P32)X}g{txw8?H)b^E5tv%oRS*}B~pTNBr*KUbJnlF@~LmO;l>6u7T*#ETC!{s&EM zqZpnZg;|5X=aBE&+@ih^fF;Nt@z~2qN@j*bw-NyKLWtLWFV7vk!cQU!BBH!I&~FDK lqWCK!etL5tB0d)&x&hp-sPJagz&Zc`002ovPDHLkV1lcAigy42 delta 334 zcmV-U0kQty1&#)=$^m~bNklKR`BICgvKKeHsI;y$50Ve@buy% z2D2Dz27K}?P&SzJ@Xlw3`_KO{IM@n;#Xx*BFpGiV*xIXLIT(n}(Fe;jLHS^gRj@W# z;=tkeP*DT`X;zeEfnyke8vp_zSAZ}n0B!)xdDv_R0g$)kRd|2l7zR*W00JN{z`_6- zNbAd?U>JaV2BZmOy91Pu3_t;h3$TFVSXvjNsBESWR2TwaF#rOg4Ibe1z{u#r2o(YY z#{d8K{C|3U9XuMb0g#`;PPYugVgOn~LXQPx|4Qr1GBEO1q8hNO*#19q0>KAB@gLTE z5Y>Q_(|!KqaymvjfJL8KMghaA856)XI2w`T6&Jvz2A&Q;3h-eR0L!JI+}Igq{U5?3 g9)Q9Ek~dfw009!W$&R5(w)lh00rKoG`1wm<_U7!rG^2h&4OK7r|L_~PC? z>p>4~(zLN)7y2jP$dF}AHSyptnar~A&Fsu9!PDd22_B6-V!7R;w1;*F*f&STd|g+M!`)Mi&%To70CM8 zL?4RW(Xz>IL%TKrJ6ntY(-c&!Qy@Gt;cbHt`$a4A7XmWJwKx Qh5!Hn07*qoM6N<$f@IE^eE9Aphe6<;#wuMk65&=m6aSCQ>wG1B|d7x4K~mLui8sR2Tt3i3*e^ zKys&+9K}dTj3=l2{Ku9+&;ckWK From 6eb54267f31c6ed8a1fb46c6c29ac70bedc9f7f1 Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Tue, 6 Jul 2021 17:03:31 +0200 Subject: [PATCH 030/118] Bell Voxelshapes --- src/main/java/com/simibubi/create/AllShapes.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/simibubi/create/AllShapes.java b/src/main/java/com/simibubi/create/AllShapes.java index 6784c3206..af45533cf 100644 --- a/src/main/java/com/simibubi/create/AllShapes.java +++ b/src/main/java/com/simibubi/create/AllShapes.java @@ -110,12 +110,12 @@ public class AllShapes { .forDirectional(Direction.UP), CRUSHING_WHEEL_CONTROLLER_COLLISION = shape(0, 0, 0, 16, 13, 16).forDirectional(Direction.DOWN), - BELL_FLOOR = shape(0, 0, 2, 16, 12, 14).forHorizontal(SOUTH), - BELL_WALL = shape(4, 4, 8, 12, 12, 16).add(3, 1, 3, 13, 13, 13) + BELL_FLOOR = shape(0, 0, 5, 16, 11, 11).add(3, 1, 3, 13, 13, 13).forHorizontal(SOUTH), + BELL_WALL = shape(5, 5, 8, 11, 11, 16).add(3, 1, 3, 13, 13, 13) .forHorizontal(SOUTH), - BELL_DOUBLE_WALL = shape(4, 4, 0, 12, 12, 16).add(3, 1, 3, 13, 13, 13) + BELL_DOUBLE_WALL = shape(5, 5, 0, 11, 11, 16).add(3, 1, 3, 13, 13, 13) .forHorizontal(SOUTH), - BELL_CEILING = shape(0, 4, 2, 16, 16, 14).add(3, 1, 3, 13, 13, 13) + BELL_CEILING = shape(0, 5, 5, 16, 16, 11).add(3, 1, 3, 13, 13, 13) .forHorizontal(SOUTH) ; From 905b140a2f822609dd312dbd553b9d29fd053823 Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Tue, 6 Jul 2021 18:35:41 +0200 Subject: [PATCH 031/118] Dyeable Nixies, Part II - Ponder doc - Fixed a few colours - Fixed text wipe on colour change - Fixed pick block - Nixie Tubes can now be picked up using the Wrench --- src/generated/resources/.cache/cache | 30 +++++++++---------- .../resources/assets/create/lang/en_us.json | 1 + .../assets/create/lang/unfinished/de_de.json | 3 +- .../assets/create/lang/unfinished/es_es.json | 3 +- .../assets/create/lang/unfinished/es_mx.json | 3 +- .../assets/create/lang/unfinished/fr_fr.json | 3 +- .../assets/create/lang/unfinished/it_it.json | 3 +- .../assets/create/lang/unfinished/ja_jp.json | 3 +- .../assets/create/lang/unfinished/ko_kr.json | 3 +- .../assets/create/lang/unfinished/nl_nl.json | 3 +- .../assets/create/lang/unfinished/pl_pl.json | 3 +- .../assets/create/lang/unfinished/pt_br.json | 3 +- .../assets/create/lang/unfinished/ru_ru.json | 3 +- .../assets/create/lang/unfinished/zh_cn.json | 3 +- .../assets/create/lang/unfinished/zh_tw.json | 3 +- .../data/create/advancements/aesthetics.json | 4 +-- .../block/redstone/NixieTubeBlock.java | 28 +++++++++++++---- .../block/redstone/NixieTubeRenderer.java | 4 +-- .../ponder/content/RedstoneScenes.java | 25 ++++++++++++++-- 19 files changed, 92 insertions(+), 39 deletions(-) diff --git a/src/generated/resources/.cache/cache b/src/generated/resources/.cache/cache index f95b26aed..31c70dfc7 100644 --- a/src/generated/resources/.cache/cache +++ b/src/generated/resources/.cache/cache @@ -426,20 +426,20 @@ a3a11524cd3515fc01d905767b4b7ea782adaf03 assets/create/blockstates/yellow_seat.j 7f39521b211441f5c3e06d60c5978cebe16cacfb assets/create/blockstates/zinc_block.json b7181bcd8182b2f17088e5aa881f374c9c65470c assets/create/blockstates/zinc_ore.json f0d3897a272bda674b3da81ff96c9ff9d50a22d7 assets/create/lang/en_ud.json -44f4fa8dcf5b47c203a46d74637c8854b5ba701f assets/create/lang/en_us.json -6fc5076ae4e9fc523bbf073add657838ac938e8b assets/create/lang/unfinished/de_de.json -e3449092f901ff28d817ff9af3a9e0a8fbc43888 assets/create/lang/unfinished/es_es.json -8070fb996689e926239a0589944ab75cc0db647b assets/create/lang/unfinished/es_mx.json -501a34af8b7e9664a7a94a51e29e7df76e28f4f3 assets/create/lang/unfinished/fr_fr.json -d7be598329bef3b8562220b7de3c4fb2eb78442b assets/create/lang/unfinished/it_it.json -2b2498f5134a6de21bab104d06a4eb62881b6841 assets/create/lang/unfinished/ja_jp.json -525c169ff627b770d96f93a30a442ca62e4551cf assets/create/lang/unfinished/ko_kr.json -b0092f5eee50558444d5443c3272b8f9f71e5d16 assets/create/lang/unfinished/nl_nl.json -021294f59f8635e06ea6213d59e7de238285b9bd assets/create/lang/unfinished/pl_pl.json -e56525021c20ff54cba5c85b8f40b6be2f092209 assets/create/lang/unfinished/pt_br.json -645e40071e06935a05b67ad734f5becb93b823bc assets/create/lang/unfinished/ru_ru.json -d469d4fcdb7c255c48905adb6fdd1835c841f8eb assets/create/lang/unfinished/zh_cn.json -661e7b534cb28597767a5fefefdb78d8870656d7 assets/create/lang/unfinished/zh_tw.json +522a0425fc350937f5b93bda13f27521cd5fc210 assets/create/lang/en_us.json +e604315111ac1aef51dc1a8eb062520b0d7296db assets/create/lang/unfinished/de_de.json +767a42d8154b3e6c13737902f7bae58958ac3624 assets/create/lang/unfinished/es_es.json +a278b9c9fd61e4cfd93fdbe9120f02709661d5ec assets/create/lang/unfinished/es_mx.json +3d6d6ff6cf8c2edef0e4b33ae52ef4d495ff8686 assets/create/lang/unfinished/fr_fr.json +efe20508f0cab4bfc79ecfa639f3ae44093289a5 assets/create/lang/unfinished/it_it.json +52e837b2e672d4926d148c1ae0f9023e53c9837e assets/create/lang/unfinished/ja_jp.json +51457d522069914f3593e06eb7856550b25cc199 assets/create/lang/unfinished/ko_kr.json +7c53a95bf039c0d08799ca17ddd13b6c3fb62a11 assets/create/lang/unfinished/nl_nl.json +c90d70028e4ae17de3cb69b20f3406a444c5e763 assets/create/lang/unfinished/pl_pl.json +f772dba691c759f7aec5dabad3cac35b6346f317 assets/create/lang/unfinished/pt_br.json +e5283bda3d6fed5bebe87ad4ba992130342b8c97 assets/create/lang/unfinished/ru_ru.json +1c43fe99ec9687bc5ce396616e840ca70c0445b4 assets/create/lang/unfinished/zh_cn.json +987610aa57783ca7053c9108242d6dd46e6ef149 assets/create/lang/unfinished/zh_tw.json 487a511a01b2a4531fb672f917922312db78f958 assets/create/models/block/acacia_window.json b48060cba1a382f373a05bf0039054053eccf076 assets/create/models/block/acacia_window_pane_noside.json 3066db1bf03cffa1a9c7fbacf47ae586632f4eb3 assets/create/models/block/acacia_window_pane_noside_alt.json @@ -1699,7 +1699,7 @@ d080b1b25e5bc8baf5aee68691b08c7f12ece3b0 assets/create/models/item/windmill_bear a80fb25a0b655e76be986b5b49fcb0f03461a1ab assets/create/models/item/zinc_nugget.json b1689617190c05ef34bd18456b0c7ae09bb3210f assets/create/models/item/zinc_ore.json bbe7fc4aef29420319f59d02d4cd376a78244e70 assets/create/sounds.json -5d0cc4c0255dc241e61c173b31ddca70c88d08e4 data/create/advancements/aesthetics.json +0f1b4b980afba9bf2caf583b88e261bba8b10313 data/create/advancements/aesthetics.json 187921fa131b06721bfaf63f2623a28c141aae9a data/create/advancements/andesite_alloy.json 0ea2db7173b5be28b289ea7c9a6a0cf5805c60c7 data/create/advancements/andesite_casing.json 83c046bd200623933545c9e4326f782fb02c87fa data/create/advancements/arm_blaze_burner.json diff --git a/src/generated/resources/assets/create/lang/en_us.json b/src/generated/resources/assets/create/lang/en_us.json index b9ad82d24..8b89c90db 100644 --- a/src/generated/resources/assets/create/lang/en_us.json +++ b/src/generated/resources/assets/create/lang/en_us.json @@ -2062,6 +2062,7 @@ "create.ponder.nixie_tube.header": "Using Nixie Tubes", "create.ponder.nixie_tube.text_1": "When powered by Redstone, Nixie Tubes will display the redstone signals' strength", "create.ponder.nixie_tube.text_2": "Using name tags edited with an anvil, custom text can be displayed", + "create.ponder.nixie_tube.text_3": "Right-Click with Dye to change their display colour", "create.ponder.piston_pole.header": "Piston Extension Poles", "create.ponder.piston_pole.text_1": "Without attached Poles, a Mechanical Piston cannot move", 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 65507c9d9..d3ba1c95b 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: 1107", + "_": "Missing Localizations: 1108", "_": "->------------------------] Game Elements [------------------------<-", @@ -2063,6 +2063,7 @@ "create.ponder.nixie_tube.header": "UNLOCALIZED: Using Nixie Tubes", "create.ponder.nixie_tube.text_1": "UNLOCALIZED: When powered by Redstone, Nixie Tubes will display the redstone signals' strength", "create.ponder.nixie_tube.text_2": "UNLOCALIZED: Using name tags edited with an anvil, custom text can be displayed", + "create.ponder.nixie_tube.text_3": "UNLOCALIZED: Right-Click with Dye to change their display colour", "create.ponder.piston_pole.header": "UNLOCALIZED: Piston Extension Poles", "create.ponder.piston_pole.text_1": "UNLOCALIZED: Without attached Poles, a Mechanical Piston cannot move", 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 51e8b1b3e..75d600e98 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: 870", + "_": "Missing Localizations: 871", "_": "->------------------------] Game Elements [------------------------<-", @@ -2063,6 +2063,7 @@ "create.ponder.nixie_tube.header": "UNLOCALIZED: Using Nixie Tubes", "create.ponder.nixie_tube.text_1": "UNLOCALIZED: When powered by Redstone, Nixie Tubes will display the redstone signals' strength", "create.ponder.nixie_tube.text_2": "UNLOCALIZED: Using name tags edited with an anvil, custom text can be displayed", + "create.ponder.nixie_tube.text_3": "UNLOCALIZED: Right-Click with Dye to change their display colour", "create.ponder.piston_pole.header": "UNLOCALIZED: Piston Extension Poles", "create.ponder.piston_pole.text_1": "UNLOCALIZED: Without attached Poles, a Mechanical Piston cannot move", diff --git a/src/generated/resources/assets/create/lang/unfinished/es_mx.json b/src/generated/resources/assets/create/lang/unfinished/es_mx.json index e2fc752ad..fcb07df6a 100644 --- a/src/generated/resources/assets/create/lang/unfinished/es_mx.json +++ b/src/generated/resources/assets/create/lang/unfinished/es_mx.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 1474", + "_": "Missing Localizations: 1475", "_": "->------------------------] Game Elements [------------------------<-", @@ -2063,6 +2063,7 @@ "create.ponder.nixie_tube.header": "UNLOCALIZED: Using Nixie Tubes", "create.ponder.nixie_tube.text_1": "UNLOCALIZED: When powered by Redstone, Nixie Tubes will display the redstone signals' strength", "create.ponder.nixie_tube.text_2": "UNLOCALIZED: Using name tags edited with an anvil, custom text can be displayed", + "create.ponder.nixie_tube.text_3": "UNLOCALIZED: Right-Click with Dye to change their display colour", "create.ponder.piston_pole.header": "UNLOCALIZED: Piston Extension Poles", "create.ponder.piston_pole.text_1": "UNLOCALIZED: Without attached Poles, a Mechanical Piston cannot move", diff --git a/src/generated/resources/assets/create/lang/unfinished/fr_fr.json b/src/generated/resources/assets/create/lang/unfinished/fr_fr.json index 54bab7e32..d57ba3dba 100644 --- a/src/generated/resources/assets/create/lang/unfinished/fr_fr.json +++ b/src/generated/resources/assets/create/lang/unfinished/fr_fr.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 1359", + "_": "Missing Localizations: 1360", "_": "->------------------------] Game Elements [------------------------<-", @@ -2063,6 +2063,7 @@ "create.ponder.nixie_tube.header": "UNLOCALIZED: Using Nixie Tubes", "create.ponder.nixie_tube.text_1": "UNLOCALIZED: When powered by Redstone, Nixie Tubes will display the redstone signals' strength", "create.ponder.nixie_tube.text_2": "UNLOCALIZED: Using name tags edited with an anvil, custom text can be displayed", + "create.ponder.nixie_tube.text_3": "UNLOCALIZED: Right-Click with Dye to change their display colour", "create.ponder.piston_pole.header": "UNLOCALIZED: Piston Extension Poles", "create.ponder.piston_pole.text_1": "UNLOCALIZED: Without attached Poles, a Mechanical Piston cannot move", diff --git a/src/generated/resources/assets/create/lang/unfinished/it_it.json b/src/generated/resources/assets/create/lang/unfinished/it_it.json index 64df657de..35ca1cac8 100644 --- a/src/generated/resources/assets/create/lang/unfinished/it_it.json +++ b/src/generated/resources/assets/create/lang/unfinished/it_it.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 887", + "_": "Missing Localizations: 888", "_": "->------------------------] Game Elements [------------------------<-", @@ -2063,6 +2063,7 @@ "create.ponder.nixie_tube.header": "UNLOCALIZED: Using Nixie Tubes", "create.ponder.nixie_tube.text_1": "UNLOCALIZED: When powered by Redstone, Nixie Tubes will display the redstone signals' strength", "create.ponder.nixie_tube.text_2": "UNLOCALIZED: Using name tags edited with an anvil, custom text can be displayed", + "create.ponder.nixie_tube.text_3": "UNLOCALIZED: Right-Click with Dye to change their display colour", "create.ponder.piston_pole.header": "UNLOCALIZED: Piston Extension Poles", "create.ponder.piston_pole.text_1": "UNLOCALIZED: Without attached Poles, a Mechanical Piston cannot move", diff --git a/src/generated/resources/assets/create/lang/unfinished/ja_jp.json b/src/generated/resources/assets/create/lang/unfinished/ja_jp.json index 7d1b429e8..43e5b1000 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ja_jp.json +++ b/src/generated/resources/assets/create/lang/unfinished/ja_jp.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 19", + "_": "Missing Localizations: 20", "_": "->------------------------] Game Elements [------------------------<-", @@ -2063,6 +2063,7 @@ "create.ponder.nixie_tube.header": "ニキシー管の使い方", "create.ponder.nixie_tube.text_1": "ニキシー管は受けたレッドストーン信号の強度を表示します", "create.ponder.nixie_tube.text_2": "金床で名付けた名札を使って、好きな文字を表示することもできます", + "create.ponder.nixie_tube.text_3": "UNLOCALIZED: Right-Click with Dye to change their display colour", "create.ponder.piston_pole.header": "ピストン延長ポール", "create.ponder.piston_pole.text_1": "ポールが無いとメカニカルピストンは動きません", diff --git a/src/generated/resources/assets/create/lang/unfinished/ko_kr.json b/src/generated/resources/assets/create/lang/unfinished/ko_kr.json index 14dbe6151..5e8c90847 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ko_kr.json +++ b/src/generated/resources/assets/create/lang/unfinished/ko_kr.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 265", + "_": "Missing Localizations: 266", "_": "->------------------------] Game Elements [------------------------<-", @@ -2063,6 +2063,7 @@ "create.ponder.nixie_tube.header": "표시등의 이용", "create.ponder.nixie_tube.text_1": "레드스톤 신호를 받으면, 표시등은 레드스톤 신호의 전력을 표시합니다", "create.ponder.nixie_tube.text_2": "모루로 이름을 바꾼 이름표를 사용하면 원하는 글씨를 표시할 수 있습니다", + "create.ponder.nixie_tube.text_3": "UNLOCALIZED: Right-Click with Dye to change their display colour", "create.ponder.piston_pole.header": "피스톤 연장대", "create.ponder.piston_pole.text_1": "연결된 연장대가 없다면, 기계식 피스톤은 사용할 수 없습니다", diff --git a/src/generated/resources/assets/create/lang/unfinished/nl_nl.json b/src/generated/resources/assets/create/lang/unfinished/nl_nl.json index ccb16cb2a..6f3782834 100644 --- a/src/generated/resources/assets/create/lang/unfinished/nl_nl.json +++ b/src/generated/resources/assets/create/lang/unfinished/nl_nl.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 1740", + "_": "Missing Localizations: 1741", "_": "->------------------------] Game Elements [------------------------<-", @@ -2063,6 +2063,7 @@ "create.ponder.nixie_tube.header": "UNLOCALIZED: Using Nixie Tubes", "create.ponder.nixie_tube.text_1": "UNLOCALIZED: When powered by Redstone, Nixie Tubes will display the redstone signals' strength", "create.ponder.nixie_tube.text_2": "UNLOCALIZED: Using name tags edited with an anvil, custom text can be displayed", + "create.ponder.nixie_tube.text_3": "UNLOCALIZED: Right-Click with Dye to change their display colour", "create.ponder.piston_pole.header": "UNLOCALIZED: Piston Extension Poles", "create.ponder.piston_pole.text_1": "UNLOCALIZED: Without attached Poles, a Mechanical Piston cannot move", diff --git a/src/generated/resources/assets/create/lang/unfinished/pl_pl.json b/src/generated/resources/assets/create/lang/unfinished/pl_pl.json index 2ebc954cd..18fdebae3 100644 --- a/src/generated/resources/assets/create/lang/unfinished/pl_pl.json +++ b/src/generated/resources/assets/create/lang/unfinished/pl_pl.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 229", + "_": "Missing Localizations: 230", "_": "->------------------------] Game Elements [------------------------<-", @@ -2063,6 +2063,7 @@ "create.ponder.nixie_tube.header": "Używanie lamp cyfrowych", "create.ponder.nixie_tube.text_1": "Kiedy zasilone, lampy cyfrowe wyświetlą siłę sygnału Redstone, jaki otrzymują", "create.ponder.nixie_tube.text_2": "Używając znaczników i kowadła można wyświetlić własny tekst", + "create.ponder.nixie_tube.text_3": "UNLOCALIZED: Right-Click with Dye to change their display colour", "create.ponder.piston_pole.header": "Przedłużenia tłoka", "create.ponder.piston_pole.text_1": "Bez przyłączonych przedłużeń, mechaniczny tłok nie może się wysunąć", 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 9c9a4102b..7fb8fc274 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: 1781", + "_": "Missing Localizations: 1782", "_": "->------------------------] Game Elements [------------------------<-", @@ -2063,6 +2063,7 @@ "create.ponder.nixie_tube.header": "UNLOCALIZED: Using Nixie Tubes", "create.ponder.nixie_tube.text_1": "UNLOCALIZED: When powered by Redstone, Nixie Tubes will display the redstone signals' strength", "create.ponder.nixie_tube.text_2": "UNLOCALIZED: Using name tags edited with an anvil, custom text can be displayed", + "create.ponder.nixie_tube.text_3": "UNLOCALIZED: Right-Click with Dye to change their display colour", "create.ponder.piston_pole.header": "UNLOCALIZED: Piston Extension Poles", "create.ponder.piston_pole.text_1": "UNLOCALIZED: Without attached Poles, a Mechanical Piston cannot move", diff --git a/src/generated/resources/assets/create/lang/unfinished/ru_ru.json b/src/generated/resources/assets/create/lang/unfinished/ru_ru.json index 12dd91bd7..8cb33edc8 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ru_ru.json +++ b/src/generated/resources/assets/create/lang/unfinished/ru_ru.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 260", + "_": "Missing Localizations: 261", "_": "->------------------------] Game Elements [------------------------<-", @@ -2063,6 +2063,7 @@ "create.ponder.nixie_tube.header": "Использовании Газоразрядных индикаторов", "create.ponder.nixie_tube.text_1": "При подаче Редстоун сигнала, Газоразрядные индикаторы отобразят его силу.", "create.ponder.nixie_tube.text_2": "С помощью бирок, отредактированных на наковальне, вы можете отобразить любой текст.", + "create.ponder.nixie_tube.text_3": "UNLOCALIZED: Right-Click with Dye to change their display colour", "create.ponder.piston_pole.header": "Удлиннителях Поршня", "create.ponder.piston_pole.text_1": "Без присоединённых Удлиннителей, Механический Поршень не может двигаться", 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 9b8bd326f..73d9dac6b 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: 270", + "_": "Missing Localizations: 271", "_": "->------------------------] Game Elements [------------------------<-", @@ -2063,6 +2063,7 @@ "create.ponder.nixie_tube.header": "使用辉光管", "create.ponder.nixie_tube.text_1": "通入红石信号后,辉光管会显示出红石信号的强度", "create.ponder.nixie_tube.text_2": "使用命名牌在铁砧上为其命名,可以自定义它的显示文本", + "create.ponder.nixie_tube.text_3": "UNLOCALIZED: Right-Click with Dye to change their display colour", "create.ponder.piston_pole.header": "活塞延长杆", "create.ponder.piston_pole.text_1": "若无相接的延长杆,动力活塞无法移动其他方块", diff --git a/src/generated/resources/assets/create/lang/unfinished/zh_tw.json b/src/generated/resources/assets/create/lang/unfinished/zh_tw.json index 47a88d2dd..cdfa157e6 100644 --- a/src/generated/resources/assets/create/lang/unfinished/zh_tw.json +++ b/src/generated/resources/assets/create/lang/unfinished/zh_tw.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 265", + "_": "Missing Localizations: 266", "_": "->------------------------] Game Elements [------------------------<-", @@ -2063,6 +2063,7 @@ "create.ponder.nixie_tube.header": "使用真空管顯示器", "create.ponder.nixie_tube.text_1": "通入紅石訊號後,真空管顯示器會顯示出紅石訊號的強度", "create.ponder.nixie_tube.text_2": "使用命名牌在鐵砧上為其命名,可以自訂它的顯示文本", + "create.ponder.nixie_tube.text_3": "UNLOCALIZED: Right-Click with Dye to change their display colour", "create.ponder.piston_pole.header": "活塞延長杆", "create.ponder.piston_pole.text_1": "若無相接的延長杆,動力活塞無法移動其他方塊", diff --git a/src/generated/resources/data/create/advancements/aesthetics.json b/src/generated/resources/data/create/advancements/aesthetics.json index 59a86f429..d723cbe38 100644 --- a/src/generated/resources/data/create/advancements/aesthetics.json +++ b/src/generated/resources/data/create/advancements/aesthetics.json @@ -28,8 +28,8 @@ "trigger": "create:bracket_apply", "conditions": { "accepted_entries": [ - "create:large_cogwheel", - "create:cogwheel" + "create:cogwheel", + "create:large_cogwheel" ] } }, diff --git a/src/main/java/com/simibubi/create/content/logistics/block/redstone/NixieTubeBlock.java b/src/main/java/com/simibubi/create/content/logistics/block/redstone/NixieTubeBlock.java index 0faba8a3a..1f6cbe0a1 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/redstone/NixieTubeBlock.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/redstone/NixieTubeBlock.java @@ -5,6 +5,7 @@ import java.util.Random; import com.simibubi.create.AllBlocks; import com.simibubi.create.AllShapes; import com.simibubi.create.AllTileEntities; +import com.simibubi.create.content.contraptions.wrench.IWrenchable; import com.simibubi.create.foundation.block.ITE; import com.simibubi.create.foundation.utility.DyeHelper; import com.simibubi.create.foundation.utility.Iterate; @@ -26,6 +27,7 @@ import net.minecraft.util.Direction; import net.minecraft.util.Hand; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockRayTraceResult; +import net.minecraft.util.math.RayTraceResult; import net.minecraft.util.math.shapes.ISelectionContext; import net.minecraft.util.math.shapes.VoxelShape; import net.minecraft.util.math.vector.Vector3d; @@ -33,7 +35,7 @@ import net.minecraft.world.IBlockReader; import net.minecraft.world.World; import net.minecraft.world.server.ServerWorld; -public class NixieTubeBlock extends HorizontalBlock implements ITE { +public class NixieTubeBlock extends HorizontalBlock implements ITE, IWrenchable { public static final BooleanProperty CEILING = BooleanProperty.create("ceiling"); private DyeColor color; @@ -92,12 +94,12 @@ public class NixieTubeBlock extends HorizontalBlock implements ITE te.displayCustomNameOf(heldItem, rowPosition)); - if (dye != null) + if (dye != null) world.setBlockState(currentPos, withColor(state, dye)); - + BlockPos nextPos = currentPos.offset(right); if (!areNixieBlocksEqual(world.getBlockState(nextPos), state)) break; @@ -113,6 +115,13 @@ public class NixieTubeBlock extends HorizontalBlock implements ITE Date: Tue, 6 Jul 2021 19:17:18 +0200 Subject: [PATCH 032/118] mlg pvp - Added missing localizations for Create's death messages involving an attacker --- src/generated/resources/.cache/cache | 28 +++++++++---------- .../resources/assets/create/lang/en_us.json | 10 +++++-- .../assets/create/lang/unfinished/de_de.json | 8 +++++- .../assets/create/lang/unfinished/es_es.json | 8 +++++- .../assets/create/lang/unfinished/es_mx.json | 12 ++++++-- .../assets/create/lang/unfinished/fr_fr.json | 8 +++++- .../assets/create/lang/unfinished/it_it.json | 8 +++++- .../assets/create/lang/unfinished/ja_jp.json | 8 +++++- .../assets/create/lang/unfinished/ko_kr.json | 8 +++++- .../assets/create/lang/unfinished/nl_nl.json | 8 +++++- .../assets/create/lang/unfinished/pl_pl.json | 8 +++++- .../assets/create/lang/unfinished/pt_br.json | 8 +++++- .../assets/create/lang/unfinished/ru_ru.json | 8 +++++- .../assets/create/lang/unfinished/zh_cn.json | 8 +++++- .../assets/create/lang/unfinished/zh_tw.json | 8 +++++- .../assets/create/lang/default/messages.json | 10 +++++-- 16 files changed, 123 insertions(+), 33 deletions(-) diff --git a/src/generated/resources/.cache/cache b/src/generated/resources/.cache/cache index 31c70dfc7..4efa9ad1e 100644 --- a/src/generated/resources/.cache/cache +++ b/src/generated/resources/.cache/cache @@ -426,20 +426,20 @@ a3a11524cd3515fc01d905767b4b7ea782adaf03 assets/create/blockstates/yellow_seat.j 7f39521b211441f5c3e06d60c5978cebe16cacfb assets/create/blockstates/zinc_block.json b7181bcd8182b2f17088e5aa881f374c9c65470c assets/create/blockstates/zinc_ore.json f0d3897a272bda674b3da81ff96c9ff9d50a22d7 assets/create/lang/en_ud.json -522a0425fc350937f5b93bda13f27521cd5fc210 assets/create/lang/en_us.json -e604315111ac1aef51dc1a8eb062520b0d7296db assets/create/lang/unfinished/de_de.json -767a42d8154b3e6c13737902f7bae58958ac3624 assets/create/lang/unfinished/es_es.json -a278b9c9fd61e4cfd93fdbe9120f02709661d5ec assets/create/lang/unfinished/es_mx.json -3d6d6ff6cf8c2edef0e4b33ae52ef4d495ff8686 assets/create/lang/unfinished/fr_fr.json -efe20508f0cab4bfc79ecfa639f3ae44093289a5 assets/create/lang/unfinished/it_it.json -52e837b2e672d4926d148c1ae0f9023e53c9837e assets/create/lang/unfinished/ja_jp.json -51457d522069914f3593e06eb7856550b25cc199 assets/create/lang/unfinished/ko_kr.json -7c53a95bf039c0d08799ca17ddd13b6c3fb62a11 assets/create/lang/unfinished/nl_nl.json -c90d70028e4ae17de3cb69b20f3406a444c5e763 assets/create/lang/unfinished/pl_pl.json -f772dba691c759f7aec5dabad3cac35b6346f317 assets/create/lang/unfinished/pt_br.json -e5283bda3d6fed5bebe87ad4ba992130342b8c97 assets/create/lang/unfinished/ru_ru.json -1c43fe99ec9687bc5ce396616e840ca70c0445b4 assets/create/lang/unfinished/zh_cn.json -987610aa57783ca7053c9108242d6dd46e6ef149 assets/create/lang/unfinished/zh_tw.json +fe0d721b6a6cb497ebcd3d52cbdd85dcd0aaa88d assets/create/lang/en_us.json +823a08304aa1d825810f3e289524204b0d459afc assets/create/lang/unfinished/de_de.json +c1584c0fd16dcdfbe6b954cf66853ae54e943e14 assets/create/lang/unfinished/es_es.json +5ce012b625bd43f4722ffd33dba5a1d69e826c63 assets/create/lang/unfinished/es_mx.json +14982459cc823666a9c31c14f128c74fe23d7da7 assets/create/lang/unfinished/fr_fr.json +4e800e837b6604a963c1d8efd9502165306285ec assets/create/lang/unfinished/it_it.json +d6bff62e5c6ff8b9015f69239bd00dfc84752c1e assets/create/lang/unfinished/ja_jp.json +eaee8e2d47ca84cd95b7e5ee5681817a53e198df assets/create/lang/unfinished/ko_kr.json +3b685a11350ab25b26b285d31e96af534ed8b583 assets/create/lang/unfinished/nl_nl.json +dcffd28c035a77d20676b5df28b8bd053b821bda assets/create/lang/unfinished/pl_pl.json +da179be447f93814b5c2892a145ed8696f4cc1d6 assets/create/lang/unfinished/pt_br.json +980321ff0d197abdbc9e9421dc570cc1faeae530 assets/create/lang/unfinished/ru_ru.json +9a442edbadcb825bf0f22ba51d0761e18ae6942d assets/create/lang/unfinished/zh_cn.json +5f16a1de3c3686367d449d9ae6898fe365592e3f assets/create/lang/unfinished/zh_tw.json 487a511a01b2a4531fb672f917922312db78f958 assets/create/models/block/acacia_window.json b48060cba1a382f373a05bf0039054053eccf076 assets/create/models/block/acacia_window_pane_noside.json 3066db1bf03cffa1a9c7fbacf47ae586632f4eb3 assets/create/models/block/acacia_window_pane_noside_alt.json diff --git a/src/generated/resources/assets/create/lang/en_us.json b/src/generated/resources/assets/create/lang/en_us.json index 8b89c90db..669e30021 100644 --- a/src/generated/resources/assets/create/lang/en_us.json +++ b/src/generated/resources/assets/create/lang/en_us.json @@ -689,13 +689,19 @@ "itemGroup.create.palettes": "Create Palettes", "death.attack.create.crush": "%1$s was processed by Crushing Wheels", - "death.attack.create.fan_fire": "%1$s was burned to death by hot air", - "death.attack.create.fan_lava": "%1$s was burned to death by lava fan", + "death.attack.create.crush.player": "%1$s was thrown into Crushing Wheels by %2$s", + "death.attack.create.fan_fire": "%1$s got smoked by an Encased Fan", + "death.attack.create.fan_fire.player": "%1$s was thrown into a smoker by %2$s", + "death.attack.create.fan_lava": "%1$s was incinerated by an Encased Fan", + "death.attack.create.fan_lava.player": "%1$s was thrown into a smelter by %2$s", "death.attack.create.mechanical_drill": "%1$s was impaled by a Mechanical Drill", + "death.attack.create.mechanical_drill.player": "%1$s was thrown in front of a Drill by %2$s", "death.attack.create.mechanical_saw": "%1$s got cut in half by a Mechanical Saw", + "death.attack.create.mechanical_saw.player": "%1$s was thrown into a Saw by %2$s", "death.attack.create.potato_cannon": "%1$s was shot by %2$s's Potato Cannon", "death.attack.create.potato_cannon.item": "%1$s was shot by %2$s using %3$s", "death.attack.create.cuckoo_clock_explosion": "%1$s was blown up by tampered cuckoo clock", + "death.attack.create.cuckoo_clock_explosion.player": "%1$s was blown up by tampered cuckoo clock", "create.block.deployer.damage_source_name": "a rogue Deployer", "create.block.cart_assembler.invalid": "Place your Cart Assembler on a rail block", 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 d3ba1c95b..160dc8776 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: 1108", + "_": "Missing Localizations: 1114", "_": "->------------------------] Game Elements [------------------------<-", @@ -690,13 +690,19 @@ "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.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_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.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_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.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", "create.block.deployer.damage_source_name": "einem Finger", "create.block.cart_assembler.invalid": "Platziere deinen Lorenmonteur auf einer Schiene.", 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 75d600e98..fb6480da6 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: 871", + "_": "Missing Localizations: 877", "_": "->------------------------] Game Elements [------------------------<-", @@ -690,13 +690,19 @@ "itemGroup.create.palettes": "Paletas", "death.attack.create.crush": "%1$s se procesó por las Ruedas de trituración", + "death.attack.create.crush.player": "UNLOCALIZED: %1$s was thrown into Crushing Wheels by %2$s", "death.attack.create.fan_fire": "%1$s murió quemado por el aire caliente", + "death.attack.create.fan_fire.player": "UNLOCALIZED: %1$s was thrown into a smoker by %2$s", "death.attack.create.fan_lava": "%1$s murió quemado por un abanico de lava", + "death.attack.create.fan_lava.player": "UNLOCALIZED: %1$s was thrown into a smelter by %2$s", "death.attack.create.mechanical_drill": "%1$s fue empalado por un taladro mecánico", + "death.attack.create.mechanical_drill.player": "UNLOCALIZED: %1$s was thrown in front of a Drill by %2$s", "death.attack.create.mechanical_saw": "%1$s fue cortado por la mitad por una sierra mecánica", + "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.cuckoo_clock_explosion": "%1$s fue volado por los aires por un reloj cucú manipulado", + "death.attack.create.cuckoo_clock_explosion.player": "UNLOCALIZED: %1$s was blown up by tampered cuckoo clock", "create.block.deployer.damage_source_name": "un Desplegador rebelde", "create.block.cart_assembler.invalid": "Coloque su Ensamblador de vagonetas en un bloque de Raíles", diff --git a/src/generated/resources/assets/create/lang/unfinished/es_mx.json b/src/generated/resources/assets/create/lang/unfinished/es_mx.json index fcb07df6a..8d2d3f3c7 100644 --- a/src/generated/resources/assets/create/lang/unfinished/es_mx.json +++ b/src/generated/resources/assets/create/lang/unfinished/es_mx.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 1475", + "_": "Missing Localizations: 1481", "_": "->------------------------] Game Elements [------------------------<-", @@ -690,13 +690,19 @@ "itemGroup.create.palettes": "UNLOCALIZED: Create Palettes", "death.attack.create.crush": "UNLOCALIZED: %1$s was processed by Crushing Wheels", - "death.attack.create.fan_fire": "UNLOCALIZED: %1$s was burned to death by hot air", - "death.attack.create.fan_lava": "UNLOCALIZED: %1$s was burned to death by lava fan", + "death.attack.create.crush.player": "UNLOCALIZED: %1$s was thrown into Crushing Wheels by %2$s", + "death.attack.create.fan_fire": "UNLOCALIZED: %1$s got smoked by an Encased Fan", + "death.attack.create.fan_fire.player": "UNLOCALIZED: %1$s was thrown into a smoker by %2$s", + "death.attack.create.fan_lava": "UNLOCALIZED: %1$s was incinerated by an Encased Fan", + "death.attack.create.fan_lava.player": "UNLOCALIZED: %1$s was thrown into a smelter by %2$s", "death.attack.create.mechanical_drill": "UNLOCALIZED: %1$s was impaled by a Mechanical Drill", + "death.attack.create.mechanical_drill.player": "UNLOCALIZED: %1$s was thrown in front of a Drill by %2$s", "death.attack.create.mechanical_saw": "UNLOCALIZED: %1$s got cut in half by a Mechanical Saw", + "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.cuckoo_clock_explosion": "UNLOCALIZED: %1$s was blown up by tampered cuckoo clock", + "death.attack.create.cuckoo_clock_explosion.player": "UNLOCALIZED: %1$s was blown up by tampered cuckoo clock", "create.block.deployer.damage_source_name": "UNLOCALIZED: a rogue Deployer", "create.block.cart_assembler.invalid": "UNLOCALIZED: Place your Cart Assembler on a rail block", diff --git a/src/generated/resources/assets/create/lang/unfinished/fr_fr.json b/src/generated/resources/assets/create/lang/unfinished/fr_fr.json index d57ba3dba..154f68717 100644 --- a/src/generated/resources/assets/create/lang/unfinished/fr_fr.json +++ b/src/generated/resources/assets/create/lang/unfinished/fr_fr.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 1360", + "_": "Missing Localizations: 1366", "_": "->------------------------] Game Elements [------------------------<-", @@ -690,13 +690,19 @@ "itemGroup.create.palettes": "Create Palettes", "death.attack.create.crush": "%1$s a été concassé.e", + "death.attack.create.crush.player": "UNLOCALIZED: %1$s was thrown into Crushing Wheels by %2$s", "death.attack.create.fan_fire": "%1$s a été brûlé à mort par l'air chaud", + "death.attack.create.fan_fire.player": "UNLOCALIZED: %1$s was thrown into a smoker by %2$s", "death.attack.create.fan_lava": "%1$s a été brûlé à mort par un ventilateur de lave", + "death.attack.create.fan_lava.player": "UNLOCALIZED: %1$s was thrown into a smelter by %2$s", "death.attack.create.mechanical_drill": "%1$s a été empalé par une perceuse mécanique", + "death.attack.create.mechanical_drill.player": "UNLOCALIZED: %1$s was thrown in front of a Drill by %2$s", "death.attack.create.mechanical_saw": "%1$s a été coupé en deux par une scie mécanique", + "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.cuckoo_clock_explosion": "%1$s a été explosé par un coucou trafiquée", + "death.attack.create.cuckoo_clock_explosion.player": "UNLOCALIZED: %1$s was blown up by tampered cuckoo clock", "create.block.deployer.damage_source_name": "un déployeur voyou", "create.block.cart_assembler.invalid": "UNLOCALIZED: Place your Cart Assembler on a rail block", diff --git a/src/generated/resources/assets/create/lang/unfinished/it_it.json b/src/generated/resources/assets/create/lang/unfinished/it_it.json index 35ca1cac8..66c67cc49 100644 --- a/src/generated/resources/assets/create/lang/unfinished/it_it.json +++ b/src/generated/resources/assets/create/lang/unfinished/it_it.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 888", + "_": "Missing Localizations: 894", "_": "->------------------------] Game Elements [------------------------<-", @@ -690,13 +690,19 @@ "itemGroup.create.palettes": "Create: Blocchi", "death.attack.create.crush": "%1$s è stato frantumato", + "death.attack.create.crush.player": "UNLOCALIZED: %1$s was thrown into Crushing Wheels by %2$s", "death.attack.create.fan_fire": "%1$s è stato bruciato dall'aria calda", + "death.attack.create.fan_fire.player": "UNLOCALIZED: %1$s was thrown into a smoker by %2$s", "death.attack.create.fan_lava": "%1$s è stato bruciato dal ventilatore di lava", + "death.attack.create.fan_lava.player": "UNLOCALIZED: %1$s was thrown into a smelter by %2$s", "death.attack.create.mechanical_drill": "%1$s è stato trafitto dal trapano meccanico", + "death.attack.create.mechanical_drill.player": "UNLOCALIZED: %1$s was thrown in front of a Drill by %2$s", "death.attack.create.mechanical_saw": "%1$s è stato tagliato a metà dalla sega meccanica", + "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.cuckoo_clock_explosion": "%1$s è saltato in aria da un orologio a cucù manomesso", + "death.attack.create.cuckoo_clock_explosion.player": "UNLOCALIZED: %1$s was blown up by tampered cuckoo clock", "create.block.deployer.damage_source_name": "un disadattato", "create.block.cart_assembler.invalid": "Piazza il tuo assemblatore di carrelli da miniera su un binario", diff --git a/src/generated/resources/assets/create/lang/unfinished/ja_jp.json b/src/generated/resources/assets/create/lang/unfinished/ja_jp.json index 43e5b1000..3f297aa27 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ja_jp.json +++ b/src/generated/resources/assets/create/lang/unfinished/ja_jp.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 20", + "_": "Missing Localizations: 26", "_": "->------------------------] Game Elements [------------------------<-", @@ -690,13 +690,19 @@ "itemGroup.create.palettes": "Create Palettes", "death.attack.create.crush": "%1$s は破砕ホイールによって処理されました", + "death.attack.create.crush.player": "UNLOCALIZED: %1$s was thrown into Crushing Wheels by %2$s", "death.attack.create.fan_fire": "%1$s は熱風で焼死した", + "death.attack.create.fan_fire.player": "UNLOCALIZED: %1$s was thrown into a smoker by %2$s", "death.attack.create.fan_lava": "%1$s は溶岩ファンによって焼死した", + "death.attack.create.fan_lava.player": "UNLOCALIZED: %1$s was thrown into a smelter by %2$s", "death.attack.create.mechanical_drill": "%1$s はメカニカルドリルに突き刺さった", + "death.attack.create.mechanical_drill.player": "UNLOCALIZED: %1$s was thrown in front of a Drill by %2$s", "death.attack.create.mechanical_saw": "%1$s はメカニカルソーで半分にカットされた", + "death.attack.create.mechanical_saw.player": "UNLOCALIZED: %1$s was thrown into a Saw by %2$s", "death.attack.create.potato_cannon": "%1$sは%2$sのポテトキャノンに撃ち抜かれた", "death.attack.create.potato_cannon.item": "%1$sは%3$sで%2$sに撃た抜かれた", "death.attack.create.cuckoo_clock_explosion": "%1$s は改ざんされた鳩時計に爆破された", + "death.attack.create.cuckoo_clock_explosion.player": "UNLOCALIZED: %1$s was blown up by tampered cuckoo clock", "create.block.deployer.damage_source_name": "悪いデプロイヤー", "create.block.cart_assembler.invalid": "トロッコアセンブラはレールの上にのみ設置できます", diff --git a/src/generated/resources/assets/create/lang/unfinished/ko_kr.json b/src/generated/resources/assets/create/lang/unfinished/ko_kr.json index 5e8c90847..5405c4ee9 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ko_kr.json +++ b/src/generated/resources/assets/create/lang/unfinished/ko_kr.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 266", + "_": "Missing Localizations: 272", "_": "->------------------------] Game Elements [------------------------<-", @@ -690,13 +690,19 @@ "itemGroup.create.palettes": "크리에이트 블록", "death.attack.create.crush": "%1$s이(가) 분쇄용 바퀴에 갈려나갔습니다", + "death.attack.create.crush.player": "UNLOCALIZED: %1$s was thrown into Crushing Wheels by %2$s", "death.attack.create.fan_fire": "%1$s이(가) 뜨거운 바람에 익어버렸습니다", + "death.attack.create.fan_fire.player": "UNLOCALIZED: %1$s was thrown into a smoker by %2$s", "death.attack.create.fan_lava": "%1$s이(가) 불길 같은 바람에 구워졌습니다", + "death.attack.create.fan_lava.player": "UNLOCALIZED: %1$s was thrown into a smelter by %2$s", "death.attack.create.mechanical_drill": "%1$s이(가) 기계식 드릴에 관통당했습니다", + "death.attack.create.mechanical_drill.player": "UNLOCALIZED: %1$s was thrown in front of a Drill by %2$s", "death.attack.create.mechanical_saw": "%1$s이(가) 기계식 톱에 의해 반으로 잘려 나갔습니다", + "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.cuckoo_clock_explosion": "%1$s이(가) 변경된 뻐꾸기시계에 의해 폭파당했습니다", + "death.attack.create.cuckoo_clock_explosion.player": "UNLOCALIZED: %1$s was blown up by tampered cuckoo clock", "create.block.deployer.damage_source_name": "전개장치", "create.block.cart_assembler.invalid": "레일에 설치하세요", diff --git a/src/generated/resources/assets/create/lang/unfinished/nl_nl.json b/src/generated/resources/assets/create/lang/unfinished/nl_nl.json index 6f3782834..ab221d7c2 100644 --- a/src/generated/resources/assets/create/lang/unfinished/nl_nl.json +++ b/src/generated/resources/assets/create/lang/unfinished/nl_nl.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 1741", + "_": "Missing Localizations: 1747", "_": "->------------------------] Game Elements [------------------------<-", @@ -690,13 +690,19 @@ "itemGroup.create.palettes": "UNLOCALIZED: Create Palettes", "death.attack.create.crush": "%1$s is verwerkd door verpulverende wielen", + "death.attack.create.crush.player": "UNLOCALIZED: %1$s was thrown into Crushing Wheels by %2$s", "death.attack.create.fan_fire": "%1$s is verbrand door hete lucht", + "death.attack.create.fan_fire.player": "UNLOCALIZED: %1$s was thrown into a smoker by %2$s", "death.attack.create.fan_lava": "%1$s is verbrand door een lava ventilator", + "death.attack.create.fan_lava.player": "UNLOCALIZED: %1$s was thrown into a smelter by %2$s", "death.attack.create.mechanical_drill": "%1$s is gespietst door een mechanische boor", + "death.attack.create.mechanical_drill.player": "UNLOCALIZED: %1$s was thrown in front of a Drill by %2$s", "death.attack.create.mechanical_saw": "UNLOCALIZED: %1$s got cut in half by a Mechanical Saw", + "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.cuckoo_clock_explosion": "UNLOCALIZED: %1$s was blown up by tampered cuckoo clock", + "death.attack.create.cuckoo_clock_explosion.player": "UNLOCALIZED: %1$s was blown up by tampered cuckoo clock", "create.block.deployer.damage_source_name": "UNLOCALIZED: a rogue Deployer", "create.block.cart_assembler.invalid": "UNLOCALIZED: Place your Cart Assembler on a rail block", diff --git a/src/generated/resources/assets/create/lang/unfinished/pl_pl.json b/src/generated/resources/assets/create/lang/unfinished/pl_pl.json index 18fdebae3..abb00d845 100644 --- a/src/generated/resources/assets/create/lang/unfinished/pl_pl.json +++ b/src/generated/resources/assets/create/lang/unfinished/pl_pl.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 230", + "_": "Missing Localizations: 236", "_": "->------------------------] Game Elements [------------------------<-", @@ -690,13 +690,19 @@ "itemGroup.create.palettes": "Palety Create", "death.attack.create.crush": "Gracz %1$s został zgnieciony przez koło kruszące", + "death.attack.create.crush.player": "UNLOCALIZED: %1$s was thrown into Crushing Wheels by %2$s", "death.attack.create.fan_fire": "Gracz %1$s poparzył się gorącym powietrzem", + "death.attack.create.fan_fire.player": "UNLOCALIZED: %1$s was thrown into a smoker by %2$s", "death.attack.create.fan_lava": "Gracz %1$s poparzył się kroplami lawy", + "death.attack.create.fan_lava.player": "UNLOCALIZED: %1$s was thrown into a smelter by %2$s", "death.attack.create.mechanical_drill": "Gracz %1$s nabił się na mechaniczne wiertło", + "death.attack.create.mechanical_drill.player": "UNLOCALIZED: %1$s was thrown in front of a Drill by %2$s", "death.attack.create.mechanical_saw": "Gracz %1$s został przecięty na pół przez mechaniczną piłę", + "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.cuckoo_clock_explosion": "Gracz %1$s został wysadzony w powietrze przez uszkodzony zegar z kukułką", + "death.attack.create.cuckoo_clock_explosion.player": "UNLOCALIZED: %1$s was blown up by tampered cuckoo clock", "create.block.deployer.damage_source_name": "zbuntowany aplikator", "create.block.cart_assembler.invalid": "Postaw monter wagoników na torze", 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 7fb8fc274..c1cdb9885 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: 1782", + "_": "Missing Localizations: 1788", "_": "->------------------------] Game Elements [------------------------<-", @@ -690,13 +690,19 @@ "itemGroup.create.palettes": "UNLOCALIZED: Create Palettes", "death.attack.create.crush": "%1$s foi processado pelas Rodas de Moer", + "death.attack.create.crush.player": "UNLOCALIZED: %1$s was thrown into Crushing Wheels by %2$s", "death.attack.create.fan_fire": "%1$s foi queimado por ar quente", + "death.attack.create.fan_fire.player": "UNLOCALIZED: %1$s was thrown into a smoker by %2$s", "death.attack.create.fan_lava": "%1$s foi queimado pelo ventilador de lava", + "death.attack.create.fan_lava.player": "UNLOCALIZED: %1$s was thrown into a smelter by %2$s", "death.attack.create.mechanical_drill": "%1$s foi empalado pela Furadeira Mecânica", + "death.attack.create.mechanical_drill.player": "UNLOCALIZED: %1$s was thrown in front of a Drill by %2$s", "death.attack.create.mechanical_saw": "UNLOCALIZED: %1$s got cut in half by a Mechanical Saw", + "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.cuckoo_clock_explosion": "UNLOCALIZED: %1$s was blown up by tampered cuckoo clock", + "death.attack.create.cuckoo_clock_explosion.player": "UNLOCALIZED: %1$s was blown up by tampered cuckoo clock", "create.block.deployer.damage_source_name": "UNLOCALIZED: a rogue Deployer", "create.block.cart_assembler.invalid": "UNLOCALIZED: Place your Cart Assembler on a rail block", diff --git a/src/generated/resources/assets/create/lang/unfinished/ru_ru.json b/src/generated/resources/assets/create/lang/unfinished/ru_ru.json index 8cb33edc8..fb92874ae 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ru_ru.json +++ b/src/generated/resources/assets/create/lang/unfinished/ru_ru.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 261", + "_": "Missing Localizations: 267", "_": "->------------------------] Game Elements [------------------------<-", @@ -690,13 +690,19 @@ "itemGroup.create.palettes": "Create: Декор", "death.attack.create.crush": "%1$s был передроблен", + "death.attack.create.crush.player": "UNLOCALIZED: %1$s was thrown into Crushing Wheels by %2$s", "death.attack.create.fan_fire": "%1$s был сожжен до смерти горячим воздухом", + "death.attack.create.fan_fire.player": "UNLOCALIZED: %1$s was thrown into a smoker by %2$s", "death.attack.create.fan_lava": "%1$s был сожжен до смерти поклонником лавы", + "death.attack.create.fan_lava.player": "UNLOCALIZED: %1$s was thrown into a smelter by %2$s", "death.attack.create.mechanical_drill": "%1$s был пронзен с помощью механической дрели", + "death.attack.create.mechanical_drill.player": "UNLOCALIZED: %1$s was thrown in front of a Drill by %2$s", "death.attack.create.mechanical_saw": "%1$s был разрезан пополам механической пилой", + "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.cuckoo_clock_explosion": "%1$s взорвали подделанные часы с кукушкой", + "death.attack.create.cuckoo_clock_explosion.player": "UNLOCALIZED: %1$s was blown up by tampered cuckoo clock", "create.block.deployer.damage_source_name": "автономным активатором", "create.block.cart_assembler.invalid": "Поместите сборщик вагонеток на блок рельс", 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 73d9dac6b..566abe389 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: 271", + "_": "Missing Localizations: 277", "_": "->------------------------] Game Elements [------------------------<-", @@ -690,13 +690,19 @@ "itemGroup.create.palettes": "机械动力建筑方块", "death.attack.create.crush": "%1$s被压扁了", + "death.attack.create.crush.player": "UNLOCALIZED: %1$s was thrown into Crushing Wheels by %2$s", "death.attack.create.fan_fire": "%1$s试图接受热风的洗礼", + "death.attack.create.fan_fire.player": "UNLOCALIZED: %1$s was thrown into a smoker by %2$s", "death.attack.create.fan_lava": "%1$s在接受热风的洗礼中浴火焚身", + "death.attack.create.fan_lava.player": "UNLOCALIZED: %1$s was thrown into a smelter by %2$s", "death.attack.create.mechanical_drill": "%1$s被钻头钻的坏掉了", + "death.attack.create.mechanical_drill.player": "UNLOCALIZED: %1$s was thrown in front of a Drill by %2$s", "death.attack.create.mechanical_saw": "%1$s被圆锯切成了两截", + "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.cuckoo_clock_explosion": "%1$s被布谷鸟钟炸得粉身碎骨", + "death.attack.create.cuckoo_clock_explosion.player": "UNLOCALIZED: %1$s was blown up by tampered cuckoo clock", "create.block.deployer.damage_source_name": "二五仔机械手", "create.block.cart_assembler.invalid": "请将矿车装配器放置在铁轨上", diff --git a/src/generated/resources/assets/create/lang/unfinished/zh_tw.json b/src/generated/resources/assets/create/lang/unfinished/zh_tw.json index cdfa157e6..5a767d91d 100644 --- a/src/generated/resources/assets/create/lang/unfinished/zh_tw.json +++ b/src/generated/resources/assets/create/lang/unfinished/zh_tw.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 266", + "_": "Missing Localizations: 272", "_": "->------------------------] Game Elements [------------------------<-", @@ -690,13 +690,19 @@ "itemGroup.create.palettes": "動力機械建築與裝飾方塊", "death.attack.create.crush": "%1$s被壓扁了", + "death.attack.create.crush.player": "UNLOCALIZED: %1$s was thrown into Crushing Wheels by %2$s", "death.attack.create.fan_fire": "%1$s想接受熱風的洗禮", + "death.attack.create.fan_fire.player": "UNLOCALIZED: %1$s was thrown into a smoker by %2$s", "death.attack.create.fan_lava": "%1$s想接受熱風的洗禮但走火入魔", + "death.attack.create.fan_lava.player": "UNLOCALIZED: %1$s was thrown into a smelter by %2$s", "death.attack.create.mechanical_drill": "%1$s被鑽頭鑽爆腦袋", + "death.attack.create.mechanical_drill.player": "UNLOCALIZED: %1$s was thrown in front of a Drill by %2$s", "death.attack.create.mechanical_saw": "%1$s被鋸切成了兩半", + "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.cuckoo_clock_explosion": "%1$s 被布穀鳥鐘炸得粉身碎骨", + "death.attack.create.cuckoo_clock_explosion.player": "UNLOCALIZED: %1$s was blown up by tampered cuckoo clock", "create.block.deployer.damage_source_name": "機械手", "create.block.cart_assembler.invalid": "將您的礦車裝修站放在鐵軌上", diff --git a/src/main/resources/assets/create/lang/default/messages.json b/src/main/resources/assets/create/lang/default/messages.json index f22e5b8ef..5746e2e58 100644 --- a/src/main/resources/assets/create/lang/default/messages.json +++ b/src/main/resources/assets/create/lang/default/messages.json @@ -4,13 +4,19 @@ "itemGroup.create.palettes": "Create Palettes", "death.attack.create.crush": "%1$s was processed by Crushing Wheels", - "death.attack.create.fan_fire": "%1$s was burned to death by hot air", - "death.attack.create.fan_lava": "%1$s was burned to death by lava fan", + "death.attack.create.crush.player": "%1$s was thrown into Crushing Wheels by %2$s", + "death.attack.create.fan_fire": "%1$s got smoked by an Encased Fan", + "death.attack.create.fan_fire.player": "%1$s was thrown into a smoker by %2$s", + "death.attack.create.fan_lava": "%1$s was incinerated by an Encased Fan", + "death.attack.create.fan_lava.player": "%1$s was thrown into a smelter by %2$s", "death.attack.create.mechanical_drill": "%1$s was impaled by a Mechanical Drill", + "death.attack.create.mechanical_drill.player": "%1$s was thrown in front of a Drill by %2$s", "death.attack.create.mechanical_saw": "%1$s got cut in half by a Mechanical Saw", + "death.attack.create.mechanical_saw.player": "%1$s was thrown into a Saw by %2$s", "death.attack.create.potato_cannon": "%1$s was shot by %2$s's Potato Cannon", "death.attack.create.potato_cannon.item": "%1$s was shot by %2$s using %3$s", "death.attack.create.cuckoo_clock_explosion": "%1$s was blown up by tampered cuckoo clock", + "death.attack.create.cuckoo_clock_explosion.player": "%1$s was blown up by tampered cuckoo clock", "create.block.deployer.damage_source_name": "a rogue Deployer", "create.block.cart_assembler.invalid": "Place your Cart Assembler on a rail block", From dcc0c278550fd17cb64879e0003b2fc30e4660b3 Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Tue, 6 Jul 2021 19:18:28 +0200 Subject: [PATCH 033/118] Forge Bump - Create now enforces a minimum of Minecraft 1.16.5, Forge 36.1.0+ --- src/main/resources/META-INF/mods.toml | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/main/resources/META-INF/mods.toml b/src/main/resources/META-INF/mods.toml index 55f9eab8a..17fee9e42 100644 --- a/src/main/resources/META-INF/mods.toml +++ b/src/main/resources/META-INF/mods.toml @@ -1,11 +1,11 @@ modLoader="javafml" -loaderVersion="[34,)" +loaderVersion="[36,)" issueTrackerURL="https://github.com/Creators-of-Create/Create/issues" license="MIT" [[mods]] modId="create" -version="${file.jarVersion}" +version="v0.3.2 for 1.16.5" displayName="Create" #updateJSONURL="" displayURL="https://www.curseforge.com/minecraft/mc-mods/create" @@ -13,20 +13,19 @@ logoFile="logo.png" #credits="" authors="simibubi" description=''' -Technology that empowers the player. -''' +Technology that empowers the player.''' [[dependencies.create]] modId="forge" mandatory=true - versionRange="[35.1.16,)" + versionRange="[36.1.0,)" ordering="NONE" side="BOTH" [[dependencies.create]] modId="minecraft" mandatory=true - versionRange="[1.16.4,1.17)" + versionRange="[1.16.5,1.17)" ordering="NONE" side="BOTH" From 0fb5556960c35f0c577c01ce8643e6418a17ce98 Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Tue, 6 Jul 2021 21:26:40 +0200 Subject: [PATCH 034/118] And the hunt continues... - Fixed kinetic stress loop caused by neighbouring belts - Fixed kinetic stress loop caused by activating ejectors - Fixed recipe book logspam regarding seq. assembly recipes --- .../content/contraptions/base/KineticBlock.java | 2 ++ .../itemAssembly/SequencedAssemblyRecipe.java | 5 +++++ .../contraptions/processing/ProcessingRecipe.java | 1 - .../relays/belt/item/BeltConnectorItem.java | 4 ++-- .../logistics/block/depot/EjectorTileEntity.java | 11 ++++++++++- 5 files changed, 19 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/simibubi/create/content/contraptions/base/KineticBlock.java b/src/main/java/com/simibubi/create/content/contraptions/base/KineticBlock.java index 864737fae..01e8db956 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/base/KineticBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/base/KineticBlock.java @@ -78,6 +78,8 @@ public abstract class KineticBlock extends Block implements IRotate { } protected boolean areStatesKineticallyEquivalent(BlockState oldState, BlockState newState) { + if (oldState.getBlock() != newState.getBlock()) + return false; return getRotationAxis(newState) == getRotationAxis(oldState); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/itemAssembly/SequencedAssemblyRecipe.java b/src/main/java/com/simibubi/create/content/contraptions/itemAssembly/SequencedAssemblyRecipe.java index cf78dce9c..9d854412a 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/itemAssembly/SequencedAssemblyRecipe.java +++ b/src/main/java/com/simibubi/create/content/contraptions/itemAssembly/SequencedAssemblyRecipe.java @@ -209,6 +209,11 @@ public class SequencedAssemblyRecipe implements IRecipe { return serializer; } + @Override + public boolean isDynamic() { + return true; + } + @Override public IRecipeType getType() { return AllRecipeTypes.SEQUENCED_ASSEMBLY.getType(); diff --git a/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingRecipe.java b/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingRecipe.java index e3fc4095f..00317d125 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingRecipe.java +++ b/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingRecipe.java @@ -2,7 +2,6 @@ package com.simibubi.create.content.contraptions.processing; import java.util.ArrayList; import java.util.List; -import java.util.Optional; import java.util.function.Supplier; import java.util.stream.Collectors; diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/item/BeltConnectorItem.java b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/item/BeltConnectorItem.java index 1df40f3b8..442431fa5 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/item/BeltConnectorItem.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/item/BeltConnectorItem.java @@ -138,9 +138,9 @@ public class BeltConnectorItem extends BlockItem { part = BeltPart.PULLEY; if (pulley && shaftState.get(AbstractShaftBlock.AXIS) == Axis.Y) slope = BeltSlope.SIDEWAYS; - world.setBlockState(pos, beltBlock.with(BeltBlock.SLOPE, slope) + KineticTileEntity.switchToBlockState(world, pos, beltBlock.with(BeltBlock.SLOPE, slope) .with(BeltBlock.PART, part) - .with(BeltBlock.HORIZONTAL_FACING, facing), 3); + .with(BeltBlock.HORIZONTAL_FACING, facing)); } } diff --git a/src/main/java/com/simibubi/create/content/logistics/block/depot/EjectorTileEntity.java b/src/main/java/com/simibubi/create/content/logistics/block/depot/EjectorTileEntity.java index e99dfe741..0cf06c2f8 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/depot/EjectorTileEntity.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/depot/EjectorTileEntity.java @@ -19,6 +19,7 @@ import com.simibubi.create.foundation.tileEntity.behaviour.belt.DirectBeltInputB import com.simibubi.create.foundation.tileEntity.behaviour.scrollvalue.ScrollValueBehaviour; import com.simibubi.create.foundation.utility.AngleHelper; import com.simibubi.create.foundation.utility.IntAttached; +import com.simibubi.create.foundation.utility.Iterate; import com.simibubi.create.foundation.utility.Lang; import com.simibubi.create.foundation.utility.MatrixStacker; import com.simibubi.create.foundation.utility.NBTHelper; @@ -28,6 +29,7 @@ import com.simibubi.create.foundation.utility.animation.LerpedFloat; import com.simibubi.create.foundation.utility.animation.LerpedFloat.Chaser; import net.minecraft.block.BlockState; +import net.minecraft.block.ObserverBlock; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityType; import net.minecraft.entity.item.ItemEntity; @@ -224,7 +226,14 @@ public class EjectorTileEntity extends KineticTileEntity { } if (!world.isRemote) - world.markAndNotifyBlock(pos, world.getChunkAt(pos), getBlockState(), getBlockState(), 0, 512); + for (Direction d : Iterate.directions) { + BlockState blockState = world.getBlockState(pos.offset(d)); + if (!(blockState.getBlock() instanceof ObserverBlock)) + continue; + if (blockState.get(ObserverBlock.FACING) != d.getOpposite()) + continue; + blockState.updatePostPlacement(d.getOpposite(), blockState, world, pos.offset(d), pos); + } if (depotBehaviour.heldItem != null) { addToLaunchedItems(heldItemStack); From c14bece04dafda7d1ef50be5cdbb102f95a22e9a Mon Sep 17 00:00:00 2001 From: Daniel Amberson Date: Tue, 6 Jul 2021 15:37:03 -0500 Subject: [PATCH 035/118] precision mechanism polish - completely redid both the incomplete and complete sprites for the precision mechanisms --- .../item/incomplete_precision_mechanism.png | Bin 300 -> 521 bytes .../textures/item/precision_mechanism.png | Bin 329 -> 497 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/src/main/resources/assets/create/textures/item/incomplete_precision_mechanism.png b/src/main/resources/assets/create/textures/item/incomplete_precision_mechanism.png index d153572146cb281f344aadcb3122c1d0353da0f2..96db614cb05f48d18a7d92460e9af7263c2c1e32 100644 GIT binary patch delta 478 zcmV<40U`dZ0*M5W83+ad001BJ|6!3KAb$yPNLh0L01mm^jD1X0z~X;@ zOb2@nqz{Bqya2NGx40IAoP#;ThJOP(3?T1RH#`T+aVZ%w@Jcf=+@Dti_8Q2=AaSq( zhmU+@__!{q4wAR&fB=U#(D9p-G1xS*;jSPcq*Ii*yC3G7smH(<^Nc?ZUZ zc@g9_u=jxKLHghZzzq5OH6CtASXdZbBRpJyYG9f{7$YIg3)KGKaW0D`~? Uhf{<5=>Px#07*qoM6N<$f~f!9@&Et; delta 255 zcmeBVS;I6zl7pFnfk8u;KX{^|LcKwNPlzj!-=1Qzw8}LwFmO|fpq+-0k+JsQAJhN; zeeiOl=&x&Df4|26|Np;KgXzvRVW48`@RqAUN}wdjFBm9}3>Y3L$4Ua_I14-?iy0XB z4ude`@%$AjK*3B;7sn8d;NG*2VuuwtTrWB}q1$QD=Ueshzbo0tmjqXZL=Y6}FMPMCoxcO&AR@=D56Shh7@*QLz&bh9C qDR<4*S9=s()mFXbJzwYejM3sR_v5mzlM+B%89ZJ6T-G@yGywo=zH27{ diff --git a/src/main/resources/assets/create/textures/item/precision_mechanism.png b/src/main/resources/assets/create/textures/item/precision_mechanism.png index 02cc85ba23b11b3b09b207c6255a2b73d04ea7c9..a4023a69f5177a2dd3e543fdfefea03773042a2d 100644 GIT binary patch delta 454 zcmV;%0XhE30`UWo83+ad001BJ|6!3KAb$yPNLh0L01m+b01m+cxRGn^0004oNkl7cqhrKmmpU$Qo6o1sL9a z1#{ux-G`41(N*)|hM;%>q`Ci49|H(Kd--RpxEdc?z0e>*f zUD5SmEG5ng76%z(tRf253<8=;ykHAphOmGLWX+0_EDWa~e*(MU`n`K#4Io=#Gz`3Z z0b!$f;mx0K4DbIjF$f9pGw7&`U}%oBmuC1Stis^#(F4_iW&q6JAV0(WYi%S0mIE0w z=L#o7a#A9LtfDf*6@Fo`IEn!B`MFU>9BdD9+H;*}<@J<3@(>pWcJj zfdJS5kbhQ}G=p8RWY;~0vv*#DX^;#2O@tYao_hjTj19okL0@R#|Lh`d2D6L;24B+* zhRvsEfW=_|#Bqf((H&Q9#k^^(aXg25{yD;s65!0GHUeirX{D761SM07*qoM6N<$g1M{1Q2+n{ delta 285 zcmey!e3EH`BnLAC1A~SxfAB;_g?gI+pAc6dzdglbX_aeWU|>Ozo}Gq}k+JrQ6)P<* z%}$*@@p7YRSy|cNAJhN;ebCw2siG?T_iOx}X~Lx%OhAoZwJ9Y)N~9#nFZe$uVDR^U zE(nz8EbxddW?8eR=R!7|T!7sn8d;L@`f`3@^^uwH0#&<=j{c-;6i@jt`GiP8+hels2XdYWpO9hDsZ#2IiHx`=ZyGHm=%=VM_MEYeVV;@PKD z8$;7{uij!g9d)Ym+N#Wk?#Ok5SFf$pPx@_r>Gv-orAzAz59Z4~_{W&Y#wT>~@nIDP Q1}+8$Pgg&ebxsLQ0MtTxj{pDw From 48ea7d64b442d6553665a5cf89627cadb9c6c864 Mon Sep 17 00:00:00 2001 From: reidbhuntley Date: Tue, 6 Jul 2021 21:22:52 -0400 Subject: [PATCH 036/118] Classic funny - When a Cake or Pie projectile launched from a Potato Cannon hits a mob, it will slide down the side of the target --- .../weapons/PotatoCannonProjectileTypes.java | 38 ++++++++++- .../weapons/PotatoProjectileEntity.java | 64 +++++++++++++++++-- .../weapons/PotatoProjectileRenderMode.java | 16 +++++ .../weapons/PotatoProjectileRenderer.java | 3 +- 4 files changed, 112 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoCannonProjectileTypes.java b/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoCannonProjectileTypes.java index 676293c6b..d6008d8ce 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoCannonProjectileTypes.java +++ b/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoCannonProjectileTypes.java @@ -194,7 +194,35 @@ public class PotatoCannonProjectileTypes { .renderTumbling() .soundPitch(0.9f) .onBlockHit(placeBlockOnGround(Blocks.PUMPKIN.delegate)) - .registerAndAssign(Blocks.PUMPKIN) + .registerAndAssign(Blocks.PUMPKIN), + + PUMPKIN_PIE = create("pumpkin_pie").damage(7) + .reloadTicks(15) + .knockback(0.05f) + .velocity(1.1f) + .renderTumbling() + .sticky() + .soundPitch(1.1f) + .registerAndAssign(Items.PUMPKIN_PIE), + + CAKE = create("cake").damage(8) + .reloadTicks(15) + .knockback(0.1f) + .velocity(1.1f) + .renderTumbling() + .sticky() + .soundPitch(1.0f) + .registerAndAssign(Items.CAKE), + + BLAZE_CAKE = create("blaze_cake").damage(12) + .reloadTicks(20) + .knockback(0.3f) + .velocity(1.1f) + .renderTumbling() + .sticky() + .onEntityHit(ray -> ray.getEntity().setFire(12)) + .soundPitch(1.0f) + .registerAndAssign(AllItems.BLAZE_CAKE.get()) ; public static void registerType(ResourceLocation resLoc, PotatoCannonProjectileTypes type) { @@ -225,6 +253,7 @@ public class PotatoCannonProjectileTypes { private int damage = 1; private int split = 1; private float fwoompPitch = 1; + private boolean sticky = false; private PotatoProjectileRenderMode renderMode = new PotatoProjectileRenderMode.Billboard(); private Consumer onEntityHit = e -> { }; @@ -267,6 +296,8 @@ public class PotatoCannonProjectileTypes { return damage; } + public boolean isSticky() { return sticky; } + public void onEntityHit(EntityRayTraceResult ray) { onEntityHit.accept(ray); } @@ -445,6 +476,11 @@ public class PotatoCannonProjectileTypes { return this; } + public Builder sticky() { + result.sticky = true; + return this; + } + public Builder onEntityHit(Consumer callback) { result.onEntityHit = callback; return this; diff --git a/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoProjectileEntity.java b/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoProjectileEntity.java index 6640b7b57..9c5a056a5 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoProjectileEntity.java +++ b/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoProjectileEntity.java @@ -36,6 +36,12 @@ import net.minecraftforge.fml.network.NetworkHooks; public class PotatoProjectileEntity extends DamagingProjectileEntity implements IEntityAdditionalSpawnData { ItemStack stack = ItemStack.EMPTY; + + Entity stuckEntity; + Vector3d stuckOffset; + PotatoProjectileRenderMode stuckRenderer; + double stuckFallSpeed; + PotatoCannonProjectileTypes type; public PotatoProjectileEntity(EntityType type, World world) { @@ -69,10 +75,48 @@ public class PotatoProjectileEntity extends DamagingProjectileEntity implements super.writeAdditional(nbt); } + public Entity getStuckEntity() { + if (stuckEntity == null) + return null; + if (!stuckEntity.isAlive()) + return null; + return stuckEntity; + } + + public void setStuckEntity(Entity stuckEntity) { + this.stuckEntity = stuckEntity; + this.stuckOffset = getPositionVec().subtract(stuckEntity.getPositionVec()); + this.stuckRenderer = new PotatoProjectileRenderMode.StuckToEntity(stuckOffset); + this.stuckFallSpeed = 0.0; + setMotion(Vector3d.ZERO); + } + + public PotatoProjectileRenderMode getRenderMode() { + if (getStuckEntity() != null) + return stuckRenderer; + + return getProjectileType().getRenderMode(); + } + public void tick() { PotatoCannonProjectileTypes projectileType = getProjectileType(); - setMotion(getMotion().add(0, -.05 * projectileType.getGravityMultiplier(), 0) - .scale(projectileType.getDrag())); + + Entity stuckEntity = getStuckEntity(); + if (stuckEntity != null) { + if (getY() < stuckEntity.getY() - 0.1) { + pop(getPositionVec()); + remove(); + } else { + stuckFallSpeed += 0.007 * projectileType.getGravityMultiplier(); + stuckOffset = stuckOffset.add(0, -stuckFallSpeed, 0); + Vector3d pos = stuckEntity.getPositionVec().add(stuckOffset); + setPosition(pos.x, pos.y, pos.z); + } + } else { + setMotion(getMotion().add(0, -0.05 * projectileType.getGravityMultiplier(), 0) + .scale(projectileType.getDrag())); + } + super.tick(); } @@ -95,6 +139,9 @@ public class PotatoProjectileEntity extends DamagingProjectileEntity implements protected void onEntityHit(EntityRayTraceResult ray) { super.onEntityHit(ray); + if (getStuckEntity() != null) + return; + Vector3d hit = ray.getHitVec(); Entity target = ray.getEntity(); PotatoCannonProjectileTypes projectileType = getProjectileType(); @@ -116,7 +163,8 @@ public class PotatoProjectileEntity extends DamagingProjectileEntity implements if (this.isBurning() && !targetIsEnderman) target.setFire(5); - if (!target.attackEntityFrom(causePotatoDamage(), (float) damage)) { + boolean onServer = !world.isRemote; + if (onServer && !target.attackEntityFrom(causePotatoDamage(), (float) damage)) { target.setFireTicks(k); remove(); return; @@ -147,13 +195,12 @@ public class PotatoProjectileEntity extends DamagingProjectileEntity implements livingentity.addVelocity(appliedMotion.x, 0.1D, appliedMotion.z); } - boolean onServer = !world.isRemote; if (onServer && owner instanceof LivingEntity) { EnchantmentHelper.applyThornEnchantments(livingentity, owner); EnchantmentHelper.applyArthropodEnchantments((LivingEntity) owner, livingentity); } - if (owner != null && livingentity != owner && livingentity instanceof PlayerEntity + if (livingentity != owner && livingentity instanceof PlayerEntity && owner instanceof ServerPlayerEntity && !this.isSilent()) { ((ServerPlayerEntity) owner).connection .sendPacket(new SChangeGameStatePacket(SChangeGameStatePacket.PROJECTILE_HIT_PLAYER, 0.0F)); @@ -167,7 +214,12 @@ public class PotatoProjectileEntity extends DamagingProjectileEntity implements AllTriggers.POTATO_KILL.trigger(serverplayerentity); } - remove(); + if (type.isSticky() && target.isAlive()) { + setStuckEntity(target); + } else { + remove(); + } + } public static void playHitSound(World world, Vector3d location) { diff --git a/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoProjectileRenderMode.java b/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoProjectileRenderMode.java index 9fb0c04e3..56c23cc01 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoProjectileRenderMode.java +++ b/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoProjectileRenderMode.java @@ -72,6 +72,22 @@ public abstract class PotatoProjectileRenderMode { } + public static class StuckToEntity extends PotatoProjectileRenderMode { + + private Vector3d offset; + + public StuckToEntity(Vector3d offset) { + this.offset = offset; + } + + @Override + @OnlyIn(Dist.CLIENT) + public void transform(MatrixStack ms, PotatoProjectileEntity entity, float pt) { + MatrixStacker.of(ms).rotateY(AngleHelper.deg(MathHelper.atan2(offset.x, offset.z))); + } + + } + public static int entityRandom(Entity entity, int maxValue) { return (System.identityHashCode(entity) * 31) % maxValue; } diff --git a/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoProjectileRenderer.java b/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoProjectileRenderer.java index 4a234782a..01d2ee95b 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoProjectileRenderer.java +++ b/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoProjectileRenderer.java @@ -26,8 +26,7 @@ public class PotatoProjectileRenderer extends EntityRenderer Date: Wed, 7 Jul 2021 17:33:43 +0200 Subject: [PATCH 037/118] Magic Potatoes - Fixed localization of potato cannon ammo tooltip - Added several enchantment compatibilities to the Potato Cannon - Added the Potato Recovery Enchantment --- src/generated/resources/.cache/cache | 30 ++++----- .../resources/assets/create/lang/en_ud.json | 1 + .../resources/assets/create/lang/en_us.json | 6 ++ .../assets/create/lang/unfinished/de_de.json | 8 ++- .../assets/create/lang/unfinished/es_es.json | 8 ++- .../assets/create/lang/unfinished/es_mx.json | 8 ++- .../assets/create/lang/unfinished/fr_fr.json | 8 ++- .../assets/create/lang/unfinished/it_it.json | 8 ++- .../assets/create/lang/unfinished/ja_jp.json | 8 ++- .../assets/create/lang/unfinished/ko_kr.json | 8 ++- .../assets/create/lang/unfinished/nl_nl.json | 8 ++- .../assets/create/lang/unfinished/pl_pl.json | 8 ++- .../assets/create/lang/unfinished/pt_br.json | 8 ++- .../assets/create/lang/unfinished/ru_ru.json | 8 ++- .../assets/create/lang/unfinished/zh_cn.json | 8 ++- .../assets/create/lang/unfinished/zh_tw.json | 8 ++- .../com/simibubi/create/AllEnchantments.java | 24 +++++++ src/main/java/com/simibubi/create/Create.java | 1 + .../curiosities/weapons/PotatoCannonItem.java | 66 +++++++++++++++++-- .../weapons/PotatoCannonProjectileTypes.java | 48 ++++++++------ .../weapons/PotatoProjectileEntity.java | 54 ++++++++++++--- .../weapons/PotatoRecoveryEnchantment.java | 24 +++++++ .../assets/create/lang/default/messages.json | 4 ++ 23 files changed, 300 insertions(+), 62 deletions(-) create mode 100644 src/main/java/com/simibubi/create/AllEnchantments.java create mode 100644 src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoRecoveryEnchantment.java diff --git a/src/generated/resources/.cache/cache b/src/generated/resources/.cache/cache index 4efa9ad1e..c41e6e483 100644 --- a/src/generated/resources/.cache/cache +++ b/src/generated/resources/.cache/cache @@ -425,21 +425,21 @@ a3a11524cd3515fc01d905767b4b7ea782adaf03 assets/create/blockstates/yellow_seat.j 6801fa1f466f172700e573e5b8ee8ee5f9ca4583 assets/create/blockstates/yellow_valve_handle.json 7f39521b211441f5c3e06d60c5978cebe16cacfb assets/create/blockstates/zinc_block.json b7181bcd8182b2f17088e5aa881f374c9c65470c assets/create/blockstates/zinc_ore.json -f0d3897a272bda674b3da81ff96c9ff9d50a22d7 assets/create/lang/en_ud.json -fe0d721b6a6cb497ebcd3d52cbdd85dcd0aaa88d assets/create/lang/en_us.json -823a08304aa1d825810f3e289524204b0d459afc assets/create/lang/unfinished/de_de.json -c1584c0fd16dcdfbe6b954cf66853ae54e943e14 assets/create/lang/unfinished/es_es.json -5ce012b625bd43f4722ffd33dba5a1d69e826c63 assets/create/lang/unfinished/es_mx.json -14982459cc823666a9c31c14f128c74fe23d7da7 assets/create/lang/unfinished/fr_fr.json -4e800e837b6604a963c1d8efd9502165306285ec assets/create/lang/unfinished/it_it.json -d6bff62e5c6ff8b9015f69239bd00dfc84752c1e assets/create/lang/unfinished/ja_jp.json -eaee8e2d47ca84cd95b7e5ee5681817a53e198df assets/create/lang/unfinished/ko_kr.json -3b685a11350ab25b26b285d31e96af534ed8b583 assets/create/lang/unfinished/nl_nl.json -dcffd28c035a77d20676b5df28b8bd053b821bda assets/create/lang/unfinished/pl_pl.json -da179be447f93814b5c2892a145ed8696f4cc1d6 assets/create/lang/unfinished/pt_br.json -980321ff0d197abdbc9e9421dc570cc1faeae530 assets/create/lang/unfinished/ru_ru.json -9a442edbadcb825bf0f22ba51d0761e18ae6942d assets/create/lang/unfinished/zh_cn.json -5f16a1de3c3686367d449d9ae6898fe365592e3f assets/create/lang/unfinished/zh_tw.json +1fa99fbea1418694aea41dea81f9cbf5e30066d4 assets/create/lang/en_ud.json +f38e0d6773f0618212e6d036290be02692302b1b assets/create/lang/en_us.json +8456877fca4c1c97a74c25c97e0dbd274e728d25 assets/create/lang/unfinished/de_de.json +4de8456cde05eecedec61c79522cbd6549de01a9 assets/create/lang/unfinished/es_es.json +2c72b40a22f6da68c179e875fecc471dfb63882c assets/create/lang/unfinished/es_mx.json +801a7fc4c0b83f94ee5fc6ff2dcfbc2c794e7fd5 assets/create/lang/unfinished/fr_fr.json +7c23104e6f627e2812391696550f7ac560a8543d assets/create/lang/unfinished/it_it.json +6a488e40ec2bd295e51447889e1643b12d744a1b assets/create/lang/unfinished/ja_jp.json +aea13865e1613a09110c6d3b52c3da68015d6a72 assets/create/lang/unfinished/ko_kr.json +7be41ad5b274297072b1cc17663686287bc3f618 assets/create/lang/unfinished/nl_nl.json +3e1957e45a5cc7586236517a5ee0f57788be9e8e assets/create/lang/unfinished/pl_pl.json +e57e2fbe82324c567d130f008865f34c45e2f9be assets/create/lang/unfinished/pt_br.json +e85f3a6441b932d3ebb4023a34d300ad196c7f41 assets/create/lang/unfinished/ru_ru.json +4186b08ae85862b6b73895507f6849d2f249d006 assets/create/lang/unfinished/zh_cn.json +90e0931966c8e272a2bd03378b25769c5daf64bb assets/create/lang/unfinished/zh_tw.json 487a511a01b2a4531fb672f917922312db78f958 assets/create/models/block/acacia_window.json b48060cba1a382f373a05bf0039054053eccf076 assets/create/models/block/acacia_window_pane_noside.json 3066db1bf03cffa1a9c7fbacf47ae586632f4eb3 assets/create/models/block/acacia_window_pane_noside_alt.json diff --git a/src/generated/resources/assets/create/lang/en_ud.json b/src/generated/resources/assets/create/lang/en_ud.json index 373483d04..f6297f0e2 100644 --- a/src/generated/resources/assets/create/lang/en_ud.json +++ b/src/generated/resources/assets/create/lang/en_ud.json @@ -426,6 +426,7 @@ "block.create.yellow_valve_handle": "\u01DD\u05DFpu\u0250H \u01DD\u028C\u05DF\u0250\u039B \u028Do\u05DF\u05DF\u01DD\u028E", "block.create.zinc_block": "\u0254u\u0131Z \u025Fo \u029E\u0254o\u05DF\u15FA", "block.create.zinc_ore": "\u01DD\u0279O \u0254u\u0131Z", + "enchantment.create.potato_recovery": "\u028E\u0279\u01DD\u028Co\u0254\u01DD\u1D1A o\u0287\u0250\u0287o\u0500", "entity.create.contraption": "uo\u0131\u0287d\u0250\u0279\u0287uo\u0186", "entity.create.crafting_blueprint": "\u0287u\u0131\u0279d\u01DDn\u05DF\u15FA bu\u0131\u0287\u025F\u0250\u0279\u0186", "entity.create.gantry_contraption": "uo\u0131\u0287d\u0250\u0279\u0287uo\u0186 \u028E\u0279\u0287u\u0250\u2141", diff --git a/src/generated/resources/assets/create/lang/en_us.json b/src/generated/resources/assets/create/lang/en_us.json index 669e30021..50e7a2fb7 100644 --- a/src/generated/resources/assets/create/lang/en_us.json +++ b/src/generated/resources/assets/create/lang/en_us.json @@ -430,6 +430,8 @@ "block.create.zinc_block": "Block of Zinc", "block.create.zinc_ore": "Zinc Ore", + "enchantment.create.potato_recovery": "Potato Recovery", + "entity.create.contraption": "Contraption", "entity.create.crafting_blueprint": "Crafting Blueprint", "entity.create.gantry_contraption": "Gantry Contraption", @@ -1171,6 +1173,10 @@ "create.crafting_blueprint.secondary_display_slot": "Secondary Display Slot", "create.crafting_blueprint.optional": "Optional", + "create.potato_cannon.ammo.attack_damage": "%1$s Attack Damage", + "create.potato_cannon.ammo.reload_ticks": "%1$s Reload Ticks", + "create.potato_cannon.ammo.knockback": "%1$s Knockback", + "create.hint.hose_pulley.title": "Bottomless Supply", "create.hint.hose_pulley": "The targeted body of fluid is considered infinite.", "create.hint.mechanical_arm_no_targets.title": "No Targets", 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 160dc8776..dcd31b851 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: 1114", + "_": "Missing Localizations: 1118", "_": "->------------------------] Game Elements [------------------------<-", @@ -431,6 +431,8 @@ "block.create.zinc_block": "Zinkblock", "block.create.zinc_ore": "Zinkerz", + "enchantment.create.potato_recovery": "UNLOCALIZED: Potato Recovery", + "entity.create.contraption": "Vorrichtung", "entity.create.crafting_blueprint": "UNLOCALIZED: Crafting Blueprint", "entity.create.gantry_contraption": "Portalkran Vorrichtung", @@ -1172,6 +1174,10 @@ "create.crafting_blueprint.secondary_display_slot": "UNLOCALIZED: Secondary Display Slot", "create.crafting_blueprint.optional": "UNLOCALIZED: 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.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", 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 fb6480da6..d3c239abf 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: 877", + "_": "Missing Localizations: 881", "_": "->------------------------] Game Elements [------------------------<-", @@ -431,6 +431,8 @@ "block.create.zinc_block": "Bloque de zinc", "block.create.zinc_ore": "Mineral de zinc", + "enchantment.create.potato_recovery": "UNLOCALIZED: Potato Recovery", + "entity.create.contraption": "Artilugio", "entity.create.crafting_blueprint": "UNLOCALIZED: Crafting Blueprint", "entity.create.gantry_contraption": "Artilugio de grúa", @@ -1172,6 +1174,10 @@ "create.crafting_blueprint.secondary_display_slot": "UNLOCALIZED: Secondary Display Slot", "create.crafting_blueprint.optional": "UNLOCALIZED: 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.hint.hose_pulley.title": "Suministro sin fondo", "create.hint.hose_pulley": "La masa de fluido objetivo se considera infinita", "create.hint.mechanical_arm_no_targets.title": "No hay objetivos", diff --git a/src/generated/resources/assets/create/lang/unfinished/es_mx.json b/src/generated/resources/assets/create/lang/unfinished/es_mx.json index 8d2d3f3c7..5a1a8c86a 100644 --- a/src/generated/resources/assets/create/lang/unfinished/es_mx.json +++ b/src/generated/resources/assets/create/lang/unfinished/es_mx.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 1481", + "_": "Missing Localizations: 1485", "_": "->------------------------] Game Elements [------------------------<-", @@ -431,6 +431,8 @@ "block.create.zinc_block": "Bloque de Zinc", "block.create.zinc_ore": "Mineral de Zinc", + "enchantment.create.potato_recovery": "UNLOCALIZED: Potato Recovery", + "entity.create.contraption": "Artefacto", "entity.create.crafting_blueprint": "UNLOCALIZED: Crafting Blueprint", "entity.create.gantry_contraption": "UNLOCALIZED: Gantry Contraption", @@ -1172,6 +1174,10 @@ "create.crafting_blueprint.secondary_display_slot": "UNLOCALIZED: Secondary Display Slot", "create.crafting_blueprint.optional": "UNLOCALIZED: 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.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", diff --git a/src/generated/resources/assets/create/lang/unfinished/fr_fr.json b/src/generated/resources/assets/create/lang/unfinished/fr_fr.json index 154f68717..57b4c4194 100644 --- a/src/generated/resources/assets/create/lang/unfinished/fr_fr.json +++ b/src/generated/resources/assets/create/lang/unfinished/fr_fr.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 1366", + "_": "Missing Localizations: 1370", "_": "->------------------------] Game Elements [------------------------<-", @@ -431,6 +431,8 @@ "block.create.zinc_block": "Bloc de zinc", "block.create.zinc_ore": "Minerai de zinc", + "enchantment.create.potato_recovery": "UNLOCALIZED: Potato Recovery", + "entity.create.contraption": "Engin", "entity.create.crafting_blueprint": "UNLOCALIZED: Crafting Blueprint", "entity.create.gantry_contraption": "UNLOCALIZED: Gantry Contraption", @@ -1172,6 +1174,10 @@ "create.crafting_blueprint.secondary_display_slot": "UNLOCALIZED: Secondary Display Slot", "create.crafting_blueprint.optional": "UNLOCALIZED: 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.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", diff --git a/src/generated/resources/assets/create/lang/unfinished/it_it.json b/src/generated/resources/assets/create/lang/unfinished/it_it.json index 66c67cc49..44d778471 100644 --- a/src/generated/resources/assets/create/lang/unfinished/it_it.json +++ b/src/generated/resources/assets/create/lang/unfinished/it_it.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 894", + "_": "Missing Localizations: 898", "_": "->------------------------] Game Elements [------------------------<-", @@ -431,6 +431,8 @@ "block.create.zinc_block": "Blocco di zinco", "block.create.zinc_ore": "Zinco grezzo", + "enchantment.create.potato_recovery": "UNLOCALIZED: Potato Recovery", + "entity.create.contraption": "Contrazione", "entity.create.crafting_blueprint": "UNLOCALIZED: Crafting Blueprint", "entity.create.gantry_contraption": "UNLOCALIZED: Gantry Contraption", @@ -1172,6 +1174,10 @@ "create.crafting_blueprint.secondary_display_slot": "UNLOCALIZED: Secondary Display Slot", "create.crafting_blueprint.optional": "UNLOCALIZED: 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.hint.hose_pulley.title": "Buco senza fondo", "create.hint.hose_pulley": "Il corpo fluido selezionato è considerato infinito.", "create.hint.mechanical_arm_no_targets.title": "Nessun bersaglio", diff --git a/src/generated/resources/assets/create/lang/unfinished/ja_jp.json b/src/generated/resources/assets/create/lang/unfinished/ja_jp.json index 3f297aa27..75a7148cb 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ja_jp.json +++ b/src/generated/resources/assets/create/lang/unfinished/ja_jp.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 26", + "_": "Missing Localizations: 30", "_": "->------------------------] Game Elements [------------------------<-", @@ -431,6 +431,8 @@ "block.create.zinc_block": "亜鉛ブロック", "block.create.zinc_ore": "亜鉛鉱石", + "enchantment.create.potato_recovery": "UNLOCALIZED: Potato Recovery", + "entity.create.contraption": "からくり", "entity.create.crafting_blueprint": "クラフトブループリント", "entity.create.gantry_contraption": "ガントリーからくり", @@ -1172,6 +1174,10 @@ "create.crafting_blueprint.secondary_display_slot": "第2表示スロット", "create.crafting_blueprint.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.hint.hose_pulley.title": "底なし搬出", "create.hint.hose_pulley": "対象となる液体は無限とみなされています。", "create.hint.mechanical_arm_no_targets.title": "ターゲットが見つかりません", diff --git a/src/generated/resources/assets/create/lang/unfinished/ko_kr.json b/src/generated/resources/assets/create/lang/unfinished/ko_kr.json index 5405c4ee9..ed57b3807 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ko_kr.json +++ b/src/generated/resources/assets/create/lang/unfinished/ko_kr.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 272", + "_": "Missing Localizations: 276", "_": "->------------------------] Game Elements [------------------------<-", @@ -431,6 +431,8 @@ "block.create.zinc_block": "아연 블록", "block.create.zinc_ore": "아연 광석", + "enchantment.create.potato_recovery": "UNLOCALIZED: Potato Recovery", + "entity.create.contraption": "장치", "entity.create.crafting_blueprint": "UNLOCALIZED: Crafting Blueprint", "entity.create.gantry_contraption": "다리 장치", @@ -1172,6 +1174,10 @@ "create.crafting_blueprint.secondary_display_slot": "UNLOCALIZED: Secondary Display Slot", "create.crafting_blueprint.optional": "UNLOCALIZED: 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.hint.hose_pulley.title": "무한한 공급량", "create.hint.hose_pulley": "액체를 무한하다고 간주합니다.", "create.hint.mechanical_arm_no_targets.title": "목표가 없음", diff --git a/src/generated/resources/assets/create/lang/unfinished/nl_nl.json b/src/generated/resources/assets/create/lang/unfinished/nl_nl.json index ab221d7c2..0c75091b9 100644 --- a/src/generated/resources/assets/create/lang/unfinished/nl_nl.json +++ b/src/generated/resources/assets/create/lang/unfinished/nl_nl.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 1747", + "_": "Missing Localizations: 1751", "_": "->------------------------] Game Elements [------------------------<-", @@ -431,6 +431,8 @@ "block.create.zinc_block": "UNLOCALIZED: Block of Zinc", "block.create.zinc_ore": "UNLOCALIZED: Zinc Ore", + "enchantment.create.potato_recovery": "UNLOCALIZED: Potato Recovery", + "entity.create.contraption": "UNLOCALIZED: Contraption", "entity.create.crafting_blueprint": "UNLOCALIZED: Crafting Blueprint", "entity.create.gantry_contraption": "UNLOCALIZED: Gantry Contraption", @@ -1172,6 +1174,10 @@ "create.crafting_blueprint.secondary_display_slot": "UNLOCALIZED: Secondary Display Slot", "create.crafting_blueprint.optional": "UNLOCALIZED: 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.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", diff --git a/src/generated/resources/assets/create/lang/unfinished/pl_pl.json b/src/generated/resources/assets/create/lang/unfinished/pl_pl.json index abb00d845..96f3defca 100644 --- a/src/generated/resources/assets/create/lang/unfinished/pl_pl.json +++ b/src/generated/resources/assets/create/lang/unfinished/pl_pl.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 236", + "_": "Missing Localizations: 240", "_": "->------------------------] Game Elements [------------------------<-", @@ -431,6 +431,8 @@ "block.create.zinc_block": "Blok cynku", "block.create.zinc_ore": "Ruda cynku", + "enchantment.create.potato_recovery": "UNLOCALIZED: Potato Recovery", + "entity.create.contraption": "Maszyna", "entity.create.crafting_blueprint": "UNLOCALIZED: Crafting Blueprint", "entity.create.gantry_contraption": "Maszyna suwnicowa", @@ -1172,6 +1174,10 @@ "create.crafting_blueprint.secondary_display_slot": "UNLOCALIZED: Secondary Display Slot", "create.crafting_blueprint.optional": "UNLOCALIZED: 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.hint.hose_pulley.title": "Niewyczerpany zapas", "create.hint.hose_pulley": "Wybrane zbiornik cieczy jest uznany za nieskończony", "create.hint.mechanical_arm_no_targets.title": "Brak celi", 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 c1cdb9885..2e8ae8c56 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: 1788", + "_": "Missing Localizations: 1792", "_": "->------------------------] Game Elements [------------------------<-", @@ -431,6 +431,8 @@ "block.create.zinc_block": "UNLOCALIZED: Block of Zinc", "block.create.zinc_ore": "UNLOCALIZED: Zinc Ore", + "enchantment.create.potato_recovery": "UNLOCALIZED: Potato Recovery", + "entity.create.contraption": "UNLOCALIZED: Contraption", "entity.create.crafting_blueprint": "UNLOCALIZED: Crafting Blueprint", "entity.create.gantry_contraption": "UNLOCALIZED: Gantry Contraption", @@ -1172,6 +1174,10 @@ "create.crafting_blueprint.secondary_display_slot": "UNLOCALIZED: Secondary Display Slot", "create.crafting_blueprint.optional": "UNLOCALIZED: 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.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", diff --git a/src/generated/resources/assets/create/lang/unfinished/ru_ru.json b/src/generated/resources/assets/create/lang/unfinished/ru_ru.json index fb92874ae..8fd4ba2b7 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ru_ru.json +++ b/src/generated/resources/assets/create/lang/unfinished/ru_ru.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 267", + "_": "Missing Localizations: 271", "_": "->------------------------] Game Elements [------------------------<-", @@ -431,6 +431,8 @@ "block.create.zinc_block": "Цинковый блок", "block.create.zinc_ore": "Цинковая руда", + "enchantment.create.potato_recovery": "UNLOCALIZED: Potato Recovery", + "entity.create.contraption": "Штуковина", "entity.create.crafting_blueprint": "UNLOCALIZED: Crafting Blueprint", "entity.create.gantry_contraption": "Крановая штуковина", @@ -1172,6 +1174,10 @@ "create.crafting_blueprint.secondary_display_slot": "UNLOCALIZED: Secondary Display Slot", "create.crafting_blueprint.optional": "UNLOCALIZED: 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.hint.hose_pulley.title": "Безграничное снабжение", "create.hint.hose_pulley": "Целевой водный резервуар считается бесконечным.", "create.hint.mechanical_arm_no_targets.title": "Нет целей", 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 566abe389..61b29d131 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: 277", + "_": "Missing Localizations: 281", "_": "->------------------------] Game Elements [------------------------<-", @@ -431,6 +431,8 @@ "block.create.zinc_block": "锌块", "block.create.zinc_ore": "锌矿石", + "enchantment.create.potato_recovery": "UNLOCALIZED: Potato Recovery", + "entity.create.contraption": "装置", "entity.create.crafting_blueprint": "UNLOCALIZED: Crafting Blueprint", "entity.create.gantry_contraption": "起重机装置", @@ -1172,6 +1174,10 @@ "create.crafting_blueprint.secondary_display_slot": "UNLOCALIZED: Secondary Display Slot", "create.crafting_blueprint.optional": "UNLOCALIZED: 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.hint.hose_pulley.title": "无限供应", "create.hint.hose_pulley": "目标液体对象被视为无限量的。", "create.hint.mechanical_arm_no_targets.title": "没有目标", diff --git a/src/generated/resources/assets/create/lang/unfinished/zh_tw.json b/src/generated/resources/assets/create/lang/unfinished/zh_tw.json index 5a767d91d..326dabd84 100644 --- a/src/generated/resources/assets/create/lang/unfinished/zh_tw.json +++ b/src/generated/resources/assets/create/lang/unfinished/zh_tw.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 272", + "_": "Missing Localizations: 276", "_": "->------------------------] Game Elements [------------------------<-", @@ -431,6 +431,8 @@ "block.create.zinc_block": "鋅磚", "block.create.zinc_ore": "鋅礦石", + "enchantment.create.potato_recovery": "UNLOCALIZED: Potato Recovery", + "entity.create.contraption": "結構", "entity.create.crafting_blueprint": "UNLOCALIZED: Crafting Blueprint", "entity.create.gantry_contraption": "門式結構", @@ -1172,6 +1174,10 @@ "create.crafting_blueprint.secondary_display_slot": "UNLOCALIZED: Secondary Display Slot", "create.crafting_blueprint.optional": "UNLOCALIZED: 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.hint.hose_pulley.title": "無限供應", "create.hint.hose_pulley": "目標液體為無限供應", "create.hint.mechanical_arm_no_targets.title": "沒有目標", diff --git a/src/main/java/com/simibubi/create/AllEnchantments.java b/src/main/java/com/simibubi/create/AllEnchantments.java new file mode 100644 index 000000000..d1931256f --- /dev/null +++ b/src/main/java/com/simibubi/create/AllEnchantments.java @@ -0,0 +1,24 @@ +package com.simibubi.create; + +import com.simibubi.create.content.curiosities.weapons.PotatoRecoveryEnchantment; +import com.simibubi.create.foundation.data.CreateRegistrate; +import com.tterrag.registrate.util.entry.RegistryEntry; + +import net.minecraft.enchantment.Enchantment.Rarity; +import net.minecraft.enchantment.EnchantmentType; +import net.minecraft.inventory.EquipmentSlotType; + +public class AllEnchantments { + + private static final CreateRegistrate REGISTRATE = Create.registrate(); + + public static final RegistryEntry POTATO_RECOVERY = REGISTRATE.object("potato_recovery") + .enchantment(EnchantmentType.BOW, PotatoRecoveryEnchantment::new) + .addSlots(EquipmentSlotType.MAINHAND, EquipmentSlotType.OFFHAND) + .lang("Potato Recovery") + .rarity(Rarity.UNCOMMON) + .register(); + + public static void register() {} + +} diff --git a/src/main/java/com/simibubi/create/Create.java b/src/main/java/com/simibubi/create/Create.java index b44b6b13b..db1a509fe 100644 --- a/src/main/java/com/simibubi/create/Create.java +++ b/src/main/java/com/simibubi/create/Create.java @@ -89,6 +89,7 @@ public class Create { AllMovementBehaviours.register(); AllWorldFeatures.register(); AllConfigs.register(); + AllEnchantments.register(); IEventBus modEventBus = FMLJavaModLoadingContext.get() .getModEventBus(); diff --git a/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoCannonItem.java b/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoCannonItem.java index 403fc88be..87442245f 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoCannonItem.java +++ b/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoCannonItem.java @@ -4,6 +4,7 @@ import java.util.List; import java.util.Optional; import java.util.function.Predicate; +import com.simibubi.create.AllEnchantments; import com.simibubi.create.AllEntityTypes; import com.simibubi.create.Create; import com.simibubi.create.CreateClient; @@ -11,12 +12,16 @@ import com.simibubi.create.content.curiosities.armor.BackTankUtil; import com.simibubi.create.content.curiosities.zapper.ShootableGadgetItemMethods; import com.simibubi.create.foundation.config.AllConfigs; import com.simibubi.create.foundation.utility.AnimationTickHolder; +import com.simibubi.create.foundation.utility.Lang; import com.simibubi.create.foundation.utility.VecHelper; import net.minecraft.block.BlockState; import net.minecraft.client.Minecraft; import net.minecraft.client.entity.player.ClientPlayerEntity; import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.enchantment.Enchantment; +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.enchantment.Enchantments; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; @@ -28,7 +33,9 @@ import net.minecraft.util.ActionResultType; import net.minecraft.util.Direction.Axis; import net.minecraft.util.Hand; import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.vector.Vector3d; +import net.minecraft.util.text.IFormattableTextComponent; import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.StringTextComponent; import net.minecraft.util.text.TextFormatting; @@ -52,6 +59,21 @@ public class PotatoCannonItem extends ShootableItem { return false; } + @Override + public boolean canApplyAtEnchantingTable(ItemStack stack, Enchantment enchantment) { + if (enchantment == Enchantments.POWER) + return true; + if (enchantment == Enchantments.PUNCH) + return true; + if (enchantment == Enchantments.FLAME) + return true; + if (enchantment == Enchantments.LOOTING) + return true; + if (enchantment == AllEnchantments.POTATO_RECOVERY.get()) + return true; + return super.canApplyAtEnchantingTable(stack, enchantment); + } + @Override public ActionResultType onItemUse(ItemUseContext context) { return onItemRightClick(context.getWorld(), context.getPlayer(), context.getHand()).getType(); @@ -118,25 +140,30 @@ public class PotatoCannonItem extends ShootableItem { PotatoCannonProjectileTypes projectileType = PotatoCannonProjectileTypes.getProjectileTypeOf(itemStack) .orElse(PotatoCannonProjectileTypes.FALLBACK); Vector3d lookVec = player.getLookVec(); - Vector3d motion = lookVec.add(correction).normalize().scale(projectileType.getVelocityMultiplier()); + Vector3d motion = lookVec.add(correction) + .normalize() + .scale(projectileType.getVelocityMultiplier()); float soundPitch = projectileType.getSoundPitch() + (Create.RANDOM.nextFloat() - .5f) / 4f; boolean spray = projectileType.getSplit() > 1; - Vector3d sprayBase = VecHelper.rotate(new Vector3d(0,0.1,0), - 360*Create.RANDOM.nextFloat(), Axis.Z); + Vector3d sprayBase = VecHelper.rotate(new Vector3d(0, 0.1, 0), 360 * Create.RANDOM.nextFloat(), Axis.Z); float sprayChange = 360f / projectileType.getSplit(); for (int i = 0; i < projectileType.getSplit(); i++) { PotatoProjectileEntity projectile = AllEntityTypes.POTATO_PROJECTILE.create(world); projectile.setItem(itemStack); + projectile.setEnchantmentEffectsFromCannon(stack); Vector3d splitMotion = motion; if (spray) { - float imperfection = 40*(Create.RANDOM.nextFloat() - 0.5f); + float imperfection = 40 * (Create.RANDOM.nextFloat() - 0.5f); Vector3d sprayOffset = VecHelper.rotate(sprayBase, i * sprayChange + imperfection, Axis.Z); splitMotion = splitMotion.add(VecHelper.lookAt(sprayOffset, motion)); } + + if (i != 0) + projectile.recoveryChance = 0; projectile.setPosition(barrelPos.x, barrelPos.y, barrelPos.z); projectile.setMotion(splitMotion); @@ -197,20 +224,45 @@ public class PotatoCannonItem extends ShootableItem { @Override @OnlyIn(Dist.CLIENT) public void addInformation(ItemStack stack, World world, List tooltip, ITooltipFlag flag) { + int power = EnchantmentHelper.getEnchantmentLevel(Enchantments.POWER, stack); + int punch = EnchantmentHelper.getEnchantmentLevel(Enchantments.PUNCH, stack); + final float additionalDamage = power * 2; + final float additionalKnockback = punch * .5f; + getAmmoforPreview(stack).ifPresent(ammo -> { + String _attack = "potato_cannon.ammo.attack_damage"; + String _reload = "potato_cannon.ammo.reload_ticks"; + String _knockback = "potato_cannon.ammo.knockback"; + tooltip.add(new StringTextComponent("")); tooltip.add(new TranslationTextComponent(ammo.getTranslationKey()).append(new StringTextComponent(":")) .formatted(TextFormatting.GRAY)); PotatoCannonProjectileTypes type = PotatoCannonProjectileTypes.getProjectileTypeOf(ammo) .get(); StringTextComponent spacing = new StringTextComponent(" "); + TextFormatting green = TextFormatting.GREEN; TextFormatting darkGreen = TextFormatting.DARK_GREEN; + + float damageF = type.getDamage() + additionalDamage; + IFormattableTextComponent damage = new StringTextComponent( + damageF == MathHelper.floor(damageF) ? "" + MathHelper.floor(damageF) : "" + damageF); + IFormattableTextComponent reloadTicks = new StringTextComponent("" + type.getReloadTicks()); + IFormattableTextComponent knockback = + new StringTextComponent("" + (type.getKnockback() + additionalKnockback)); + + damage = damage.formatted(additionalDamage > 0 ? green : darkGreen); + knockback = knockback.formatted(additionalKnockback > 0 ? green : darkGreen); + reloadTicks = reloadTicks.formatted(darkGreen); + tooltip.add(spacing.copy() - .append(new StringTextComponent(type.getDamage() + " Attack Damage").formatted(darkGreen))); + .append(Lang.translate(_attack, damage) + .formatted(darkGreen))); tooltip.add(spacing.copy() - .append(new StringTextComponent(type.getReloadTicks() + " Reload Ticks").formatted(darkGreen))); + .append(Lang.translate(_reload, reloadTicks) + .formatted(darkGreen))); tooltip.add(spacing.copy() - .append(new StringTextComponent(type.getKnockback() + " Knockback").formatted(darkGreen))); + .append(Lang.translate(_knockback, knockback) + .formatted(darkGreen))); }); super.addInformation(stack, world, tooltip, flag); } diff --git a/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoCannonProjectileTypes.java b/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoCannonProjectileTypes.java index d6008d8ce..b14e84700 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoCannonProjectileTypes.java +++ b/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoCannonProjectileTypes.java @@ -3,8 +3,9 @@ package com.simibubi.create.content.curiosities.weapons; import java.util.HashMap; import java.util.Map; import java.util.Optional; -import java.util.function.BiConsumer; +import java.util.function.BiPredicate; import java.util.function.Consumer; +import java.util.function.Predicate; import com.mojang.datafixers.util.Pair; import com.simibubi.create.AllItems; @@ -255,10 +256,8 @@ public class PotatoCannonProjectileTypes { private float fwoompPitch = 1; private boolean sticky = false; private PotatoProjectileRenderMode renderMode = new PotatoProjectileRenderMode.Billboard(); - private Consumer onEntityHit = e -> { - }; - private BiConsumer onBlockHit = (w, ray) -> { - }; + private Predicate onEntityHit = e -> false; + private BiPredicate onBlockHit = (w, ray) -> false; public float getGravityMultiplier() { return gravityMultiplier; @@ -298,12 +297,12 @@ public class PotatoCannonProjectileTypes { public boolean isSticky() { return sticky; } - public void onEntityHit(EntityRayTraceResult ray) { - onEntityHit.accept(ray); + public boolean onEntityHit(EntityRayTraceResult ray) { + return onEntityHit.test(ray); } - public void onBlockHit(IWorld world, BlockRayTraceResult ray) { - onBlockHit.accept(world, ray); + public boolean onBlockHit(IWorld world, BlockRayTraceResult ray) { + return onBlockHit.test(world, ray); } private static Consumer potion(Effect effect, int level, int ticks) { @@ -326,37 +325,38 @@ public class PotatoCannonProjectileTypes { }; } - private static BiConsumer plantCrop(IRegistryDelegate cropBlock) { + private static BiPredicate plantCrop(IRegistryDelegate cropBlock) { return (world, ray) -> { BlockPos hitPos = ray.getPos(); if (!world.isAreaLoaded(hitPos, 1)) - return; + return true; Direction face = ray.getFace(); BlockPos placePos = hitPos.offset(face); if (!world.getBlockState(placePos) .getMaterial() .isReplaceable()) - return; + return false; if (!(cropBlock.get() instanceof IPlantable)) - return; + return false; BlockState blockState = world.getBlockState(hitPos); if (!blockState.canSustainPlant(world, hitPos, face, (IPlantable) cropBlock.get())) - return; + return false; world.setBlockState(placePos, cropBlock.get().getDefaultState(), 3); + return true; }; } - private static BiConsumer placeBlockOnGround(IRegistryDelegate block) { + private static BiPredicate placeBlockOnGround(IRegistryDelegate block) { return (world, ray) -> { BlockPos hitPos = ray.getPos(); if (!world.isAreaLoaded(hitPos, 1)) - return; + return true; Direction face = ray.getFace(); BlockPos placePos = hitPos.offset(face); if (!world.getBlockState(placePos) .getMaterial() .isReplaceable()) - return; + return false; if (face == Direction.UP) { world.setBlockState(placePos, block.get().getDefaultState(), 3); @@ -372,6 +372,8 @@ public class PotatoCannonProjectileTypes { falling.fallTime = 1; world.addEntity(falling); } + + return true; }; } @@ -481,12 +483,20 @@ public class PotatoCannonProjectileTypes { return this; } - public Builder onEntityHit(Consumer callback) { + public Builder onEntityHitRecoveryCancelable(Predicate callback) { result.onEntityHit = callback; return this; } + + public Builder onEntityHit(Consumer callback) { + result.onEntityHit = ray -> { + callback.accept(ray); + return false; + }; + return this; + } - public Builder onBlockHit(BiConsumer callback) { + public Builder onBlockHit(BiPredicate callback) { result.onBlockHit = callback; return this; } diff --git a/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoProjectileEntity.java b/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoProjectileEntity.java index 9c5a056a5..9dd80bc7e 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoProjectileEntity.java +++ b/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoProjectileEntity.java @@ -2,12 +2,14 @@ package com.simibubi.create.content.curiosities.weapons; import javax.annotation.Nullable; +import com.simibubi.create.AllEnchantments; import com.simibubi.create.AllSoundEvents; import com.simibubi.create.content.contraptions.particle.AirParticleData; import com.simibubi.create.foundation.advancement.AllTriggers; import com.simibubi.create.foundation.utility.VecHelper; import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.enchantment.Enchantments; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityClassification; import net.minecraft.entity.EntityType; @@ -32,9 +34,11 @@ import net.minecraft.util.math.vector.Vector3d; import net.minecraft.world.World; import net.minecraftforge.fml.common.registry.IEntityAdditionalSpawnData; import net.minecraftforge.fml.network.NetworkHooks; +import net.minecraftforge.items.ItemHandlerHelper; public class PotatoProjectileEntity extends DamagingProjectileEntity implements IEntityAdditionalSpawnData { + PotatoCannonProjectileTypes type; ItemStack stack = ItemStack.EMPTY; Entity stuckEntity; @@ -42,7 +46,9 @@ public class PotatoProjectileEntity extends DamagingProjectileEntity implements PotatoProjectileRenderMode stuckRenderer; double stuckFallSpeed; - PotatoCannonProjectileTypes type; + float additionalDamage = 0; + float additionalKnockback = 0; + float recoveryChance = .125f; public PotatoProjectileEntity(EntityType type, World world) { super(type, world); @@ -63,15 +69,37 @@ public class PotatoProjectileEntity extends DamagingProjectileEntity implements return type; } + public void setEnchantmentEffectsFromCannon(ItemStack cannon) { + int power = EnchantmentHelper.getEnchantmentLevel(Enchantments.POWER, cannon); + int punch = EnchantmentHelper.getEnchantmentLevel(Enchantments.PUNCH, cannon); + int flame = EnchantmentHelper.getEnchantmentLevel(Enchantments.FLAME, cannon); + int recovery = EnchantmentHelper.getEnchantmentLevel(AllEnchantments.POTATO_RECOVERY.get(), cannon); + + if (power > 0) + additionalDamage = power * 2; + if (punch > 0) + additionalKnockback = punch * .5f; + if (flame > 0) + setFire(100); + if (recovery > 0) + recoveryChance = .125f + recovery * .125f; + } + @Override public void readAdditional(CompoundNBT nbt) { stack = ItemStack.read(nbt.getCompound("Item")); + additionalDamage = nbt.getFloat("AdditionalDamage"); + additionalKnockback = nbt.getFloat("AdditionalKnockback"); + recoveryChance = nbt.getFloat("Recovery"); super.readAdditional(nbt); } @Override public void writeAdditional(CompoundNBT nbt) { nbt.put("Item", stack.serializeNBT()); + nbt.putFloat("AdditionalDamage", additionalDamage); + nbt.putFloat("AdditionalKnockback", additionalKnockback); + nbt.putFloat("Recovery", recoveryChance); super.writeAdditional(nbt); } @@ -109,7 +137,8 @@ public class PotatoProjectileEntity extends DamagingProjectileEntity implements } else { stuckFallSpeed += 0.007 * projectileType.getGravityMultiplier(); stuckOffset = stuckOffset.add(0, -stuckFallSpeed, 0); - Vector3d pos = stuckEntity.getPositionVec().add(stuckOffset); + Vector3d pos = stuckEntity.getPositionVec() + .add(stuckOffset); setPosition(pos.x, pos.y, pos.z); } } else { @@ -145,8 +174,8 @@ public class PotatoProjectileEntity extends DamagingProjectileEntity implements Vector3d hit = ray.getHitVec(); Entity target = ray.getEntity(); PotatoCannonProjectileTypes projectileType = getProjectileType(); - int damage = projectileType.getDamage(); - float knockback = projectileType.getKnockback(); + float damage = projectileType.getDamage() + additionalDamage; + float knockback = projectileType.getKnockback() + additionalKnockback; Entity owner = this.getOwner(); if (!target.isAlive()) @@ -173,7 +202,9 @@ public class PotatoProjectileEntity extends DamagingProjectileEntity implements if (targetIsEnderman) return; - projectileType.onEntityHit(ray); + if (!projectileType.onEntityHit(ray)) + if (rand.nextDouble() <= recoveryChance) + recoverItem(); if (!(target instanceof LivingEntity)) { playHitSound(world, getPositionVec()); @@ -200,8 +231,8 @@ public class PotatoProjectileEntity extends DamagingProjectileEntity implements EnchantmentHelper.applyArthropodEnchantments((LivingEntity) owner, livingentity); } - if (livingentity != owner && livingentity instanceof PlayerEntity - && owner instanceof ServerPlayerEntity && !this.isSilent()) { + if (livingentity != owner && livingentity instanceof PlayerEntity && owner instanceof ServerPlayerEntity + && !this.isSilent()) { ((ServerPlayerEntity) owner).connection .sendPacket(new SChangeGameStatePacket(SChangeGameStatePacket.PROJECTILE_HIT_PLAYER, 0.0F)); } @@ -222,6 +253,11 @@ public class PotatoProjectileEntity extends DamagingProjectileEntity implements } + private void recoverItem() { + if (!stack.isEmpty()) + entityDropItem(ItemHandlerHelper.copyStackWithSize(stack, 1)); + } + public static void playHitSound(World world, Vector3d location) { AllSoundEvents.POTATO_HIT.playOnServer(world, new BlockPos(location)); } @@ -234,7 +270,9 @@ public class PotatoProjectileEntity extends DamagingProjectileEntity implements protected void onBlockHit(BlockRayTraceResult ray) { Vector3d hit = ray.getHitVec(); pop(hit); - getProjectileType().onBlockHit(world, ray); + if (!getProjectileType().onBlockHit(world, ray)) + if (rand.nextDouble() <= recoveryChance) + recoverItem(); super.onBlockHit(ray); remove(); } diff --git a/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoRecoveryEnchantment.java b/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoRecoveryEnchantment.java new file mode 100644 index 000000000..d6f770279 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoRecoveryEnchantment.java @@ -0,0 +1,24 @@ +package com.simibubi.create.content.curiosities.weapons; + +import net.minecraft.enchantment.Enchantment; +import net.minecraft.enchantment.EnchantmentType; +import net.minecraft.inventory.EquipmentSlotType; +import net.minecraft.item.ItemStack; + +public class PotatoRecoveryEnchantment extends Enchantment { + + public PotatoRecoveryEnchantment(Rarity p_i46731_1_, EnchantmentType p_i46731_2_, EquipmentSlotType[] p_i46731_3_) { + super(p_i46731_1_, p_i46731_2_, p_i46731_3_); + } + + @Override + public int getMaxLevel() { + return 3; + } + + @Override + public boolean canApplyAtEnchantingTable(ItemStack stack) { + return stack.getItem() instanceof PotatoCannonItem; + } + +} diff --git a/src/main/resources/assets/create/lang/default/messages.json b/src/main/resources/assets/create/lang/default/messages.json index 5746e2e58..4fc54ecfd 100644 --- a/src/main/resources/assets/create/lang/default/messages.json +++ b/src/main/resources/assets/create/lang/default/messages.json @@ -504,6 +504,10 @@ "create.crafting_blueprint.manually_assigned": "Manually assigned", "create.crafting_blueprint.secondary_display_slot": "Secondary Display Slot", "create.crafting_blueprint.optional": "Optional", + + "create.potato_cannon.ammo.attack_damage": "%1$s Attack Damage", + "create.potato_cannon.ammo.reload_ticks": "%1$s Reload Ticks", + "create.potato_cannon.ammo.knockback": "%1$s Knockback", "create.hint.hose_pulley.title": "Bottomless Supply", "create.hint.hose_pulley": "The targeted body of fluid is considered infinite.", From 10b0bdbfcfc1ffc76ff5c544fe494659ce2b4152 Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Wed, 7 Jul 2021 19:38:32 +0200 Subject: [PATCH 038/118] Range indication for bells - Stationary Haunted Bells now show particles at the perimeter of the scanned area, regardless of light level --- .../com/simibubi/create/AllParticleTypes.java | 4 +- .../curiosities/bell/SoulBaseParticle.java | 2 +- .../curiosities/bell/SoulParticle.java | 104 +++++++++++++++--- .../curiosities/bell/SoulPulseEffect.java | 47 +++++--- .../particles/soul_expanding_perimeter.json | 12 ++ .../create/particles/soul_perimeter.json | 12 ++ 6 files changed, 148 insertions(+), 33 deletions(-) create mode 100644 src/main/resources/assets/create/particles/soul_expanding_perimeter.json create mode 100644 src/main/resources/assets/create/particles/soul_perimeter.json diff --git a/src/main/java/com/simibubi/create/AllParticleTypes.java b/src/main/java/com/simibubi/create/AllParticleTypes.java index 23b3fdf0a..a7cd1df79 100644 --- a/src/main/java/com/simibubi/create/AllParticleTypes.java +++ b/src/main/java/com/simibubi/create/AllParticleTypes.java @@ -35,7 +35,9 @@ public enum AllParticleTypes { BASIN_FLUID(FluidParticleData::new), FLUID_DRIP(FluidParticleData::new), SOUL(SoulParticle.Data::new), - SOUL_BASE(SoulBaseParticle.Data::new) + SOUL_BASE(SoulBaseParticle.Data::new), + SOUL_PERIMETER(SoulParticle.PerimeterData::new), + SOUL_EXPANDING_PERIMETER(SoulParticle.ExpandingPerimeterData::new) ; private ParticleEntry entry; diff --git a/src/main/java/com/simibubi/create/content/curiosities/bell/SoulBaseParticle.java b/src/main/java/com/simibubi/create/content/curiosities/bell/SoulBaseParticle.java index fd17c7d16..1036f0064 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/bell/SoulBaseParticle.java +++ b/src/main/java/com/simibubi/create/content/curiosities/bell/SoulBaseParticle.java @@ -31,7 +31,7 @@ public class SoulBaseParticle extends CustomRotationParticle { selectSpriteLoopingWithAge(animatedSprite); BlockPos pos = new BlockPos(posX, posY, posZ); - if (age++ >= maxAge || !SoulPulseEffect.canSpawnSoulAt(world, pos)) + if (age++ >= maxAge || !SoulPulseEffect.canSpawnSoulAt(world, pos, false)) setExpired(); } diff --git a/src/main/java/com/simibubi/create/content/curiosities/bell/SoulParticle.java b/src/main/java/com/simibubi/create/content/curiosities/bell/SoulParticle.java index 302ecc398..5c514da9f 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/bell/SoulParticle.java +++ b/src/main/java/com/simibubi/create/content/curiosities/bell/SoulParticle.java @@ -1,13 +1,16 @@ package com.simibubi.create.content.curiosities.bell; +import com.mojang.blaze3d.vertex.IVertexBuilder; import com.simibubi.create.AllParticleTypes; import net.minecraft.client.particle.IAnimatedSprite; import net.minecraft.client.renderer.ActiveRenderInfo; import net.minecraft.client.world.ClientWorld; +import net.minecraft.particles.IParticleData; import net.minecraft.particles.ParticleType; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.vector.Quaternion; +import net.minecraft.util.math.vector.Vector3f; public class SoulParticle extends CustomRotationParticle { @@ -26,14 +29,18 @@ public class SoulParticle extends CustomRotationParticle { protected int firstEndFrame = 33; protected int endFrames = 20; - protected int totalFrames = 53; - - protected int ticksPerFrame = 2; - protected AnimationStage animationStage; + protected int totalFrames = 53; + protected int ticksPerFrame = 2; + + protected boolean isPerimeter = false; + protected boolean isExpandingPerimeter = false; + protected boolean isVisible = true; + protected int perimeterFrames = 8; + public SoulParticle(ClientWorld worldIn, double x, double y, double z, double vx, double vy, double vz, - IAnimatedSprite spriteSet) { + IAnimatedSprite spriteSet, IParticleData data) { super(worldIn, x, y, z, spriteSet, 0); this.animatedSprite = spriteSet; this.particleScale = 0.5f; @@ -42,24 +49,43 @@ public class SoulParticle extends CustomRotationParticle { this.loopLength = loopFrames + (int) (this.rand.nextFloat() * 5f - 4f); this.startTicks = startFrames + (int) (this.rand.nextFloat() * 5f - 4f); this.endTicks = endFrames + (int) (this.rand.nextFloat() * 5f - 4f); - this.numLoops = (int)(1f + this.rand.nextFloat() * 2f); + this.numLoops = (int) (1f + this.rand.nextFloat() * 2f); this.setFrame(0); this.field_21507 = true; // disable movement this.mirror = this.rand.nextBoolean(); - this.animationStage = new StartAnimation(this); + this.isPerimeter = data instanceof PerimeterData; + this.isExpandingPerimeter = data instanceof ExpandingPerimeterData; + this.animationStage = !isPerimeter ? new StartAnimation(this) : new PerimeterAnimation(this); + if (isPerimeter) { + prevPosY = posY -= .5f - 1 / 128f; + totalFrames = perimeterFrames; + isVisible = false; + } } @Override public void tick() { animationStage.tick(); - animationStage = animationStage.getNext(); BlockPos pos = new BlockPos(posX, posY, posZ); - if (animationStage == null || !SoulPulseEffect.canSpawnSoulAt(world, pos)) + if (animationStage == null) setExpired(); + if (!SoulPulseEffect.canSpawnSoulAt(world, pos, false)) { + isVisible = true; + if (!isPerimeter) + setExpired(); + } else if (isPerimeter) + isVisible = false; + } + + @Override + public void buildGeometry(IVertexBuilder builder, ActiveRenderInfo camera, float partialTicks) { + if (!isVisible) + return; + super.buildGeometry(builder, camera, partialTicks); } public void setFrame(int frame) { @@ -69,20 +95,44 @@ public class SoulParticle extends CustomRotationParticle { @Override public Quaternion getCustomRotation(ActiveRenderInfo camera, float partialTicks) { + if (isPerimeter) + return Vector3f.POSITIVE_X.getDegreesQuaternion(90); return new Quaternion(0, -camera.getYaw(), 0, true); } public static class Data extends BasicParticleData { @Override public IBasicParticleFactory getBasicFactory() { - return SoulParticle::new; + return (worldIn, x, y, z, vx, vy, vz, spriteSet) -> new SoulParticle(worldIn, x, y, z, vx, vy, vz, + spriteSet, this); } + @Override public ParticleType getType() { return AllParticleTypes.SOUL.get(); } } + public static class PerimeterData extends BasicParticleData { + @Override + public IBasicParticleFactory getBasicFactory() { + return (worldIn, x, y, z, vx, vy, vz, spriteSet) -> new SoulParticle(worldIn, x, y, z, vx, vy, vz, + spriteSet, this); + } + + @Override + public ParticleType getType() { + return AllParticleTypes.SOUL_PERIMETER.get(); + } + } + + public static class ExpandingPerimeterData extends PerimeterData { + @Override + public ParticleType getType() { + return AllParticleTypes.SOUL_EXPANDING_PERIMETER.get(); + } + } + public static abstract class AnimationStage { protected final SoulParticle particle; @@ -118,7 +168,8 @@ public class SoulParticle extends CustomRotationParticle { public void tick() { super.tick(); - particle.setFrame(particle.firstStartFrame + (int) (getAnimAge() / (float) particle.startTicks * particle.startFrames)); + particle.setFrame( + particle.firstStartFrame + (int) (getAnimAge() / (float) particle.startTicks * particle.startFrames)); } @Override @@ -144,9 +195,11 @@ public class SoulParticle extends CustomRotationParticle { int loopTick = getLoopTick(); - if (loopTick == 0) loops++; + if (loopTick == 0) + loops++; - particle.setFrame(particle.firstLoopFrame + loopTick);//(int) (((float) loopTick / (float) particle.loopLength) * particle.loopFrames)); + particle.setFrame(particle.firstLoopFrame + loopTick);// (int) (((float) loopTick / (float) + // particle.loopLength) * particle.loopFrames)); } @@ -173,7 +226,8 @@ public class SoulParticle extends CustomRotationParticle { public void tick() { super.tick(); - particle.setFrame(particle.firstEndFrame + (int) ((getAnimAge() / (float) particle.endTicks) * particle.endFrames)); + particle.setFrame( + particle.firstEndFrame + (int) ((getAnimAge() / (float) particle.endTicks) * particle.endFrames)); } @@ -185,4 +239,26 @@ public class SoulParticle extends CustomRotationParticle { return null; } } + + public static class PerimeterAnimation extends AnimationStage { + + public PerimeterAnimation(SoulParticle particle) { + super(particle); + } + + @Override + public void tick() { + super.tick(); + particle.setFrame((int) getAnimAge() % particle.perimeterFrames); + } + + @Override + public AnimationStage getNext() { + if (animAge < (particle.isExpandingPerimeter ? 8 + : particle.startTicks + particle.endTicks + particle.numLoops * particle.loopLength)) + return this; + else + return null; + } + } } diff --git a/src/main/java/com/simibubi/create/content/curiosities/bell/SoulPulseEffect.java b/src/main/java/com/simibubi/create/content/curiosities/bell/SoulPulseEffect.java index 7fbacdffa..a1dc8c640 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/bell/SoulPulseEffect.java +++ b/src/main/java/com/simibubi/create/content/curiosities/bell/SoulPulseEffect.java @@ -5,6 +5,9 @@ import java.util.List; import java.util.stream.Collectors; import java.util.stream.Stream; +import com.simibubi.create.content.curiosities.bell.SoulParticle.ExpandingPerimeterData; +import com.simibubi.create.foundation.utility.VecHelper; + import net.minecraft.entity.EntitySpawnPlacementRegistry; import net.minecraft.entity.EntityType; import net.minecraft.util.math.AxisAlignedBB; @@ -17,7 +20,7 @@ import net.minecraft.world.spawner.WorldEntitySpawner; public class SoulPulseEffect { - public static final int MAX_DISTANCE = 10; + public static final int MAX_DISTANCE = 11; private static final List> LAYERS = genLayers(); private static final int WAITING_TICKS = 100; @@ -50,10 +53,10 @@ public class SoulPulseEffect { if (ticks < 0 || ticks % TICKS_PER_LAYER != 0) return null; - List spawns = getSoulSpawns(world); + List spawns = getPotentialSoulSpawns(world); while (spawns.isEmpty() && ticks > 0) { ticks -= TICKS_PER_LAYER; - spawns.addAll(getSoulSpawns(world)); + spawns.addAll(getPotentialSoulSpawns(world)); } return spawns; } @@ -62,28 +65,30 @@ public class SoulPulseEffect { return distance - ticks / TICKS_PER_LAYER - 1; } - public List getSoulSpawns(World world) { + public List getPotentialSoulSpawns(World world) { if (world == null) return new ArrayList<>(); return getLayer(currentLayerIdx()).map(p -> p.add(pos)) - .filter(p -> canSpawnSoulAt(world, p)) - .collect(Collectors.toList()); + .filter(p -> canSpawnSoulAt(world, p, true)) + .collect(Collectors.toList()); } - public static boolean canSpawnSoulAt(World world, BlockPos at) { + public static boolean canSpawnSoulAt(World world, BlockPos at, boolean ignoreLight) { EntityType dummy = EntityType.ZOMBIE; double dummyWidth = 0.2, dummyHeight = 0.75; double w2 = dummyWidth / 2; return world != null - && WorldEntitySpawner.canCreatureTypeSpawnAtLocation( - EntitySpawnPlacementRegistry.PlacementType.ON_GROUND, world, at, dummy) - && world.getLightLevel(LightType.BLOCK, at) < 8 - && world.getBlockCollisions(null, new AxisAlignedBB( - at.getX() + 0.5 - w2, at.getY(), at.getZ() + 0.5 - w2, - at.getX() + 0.5 + w2, at.getY() + dummyHeight, at.getZ() + 0.5 + w2 - ), (a,b) -> true).allMatch(VoxelShape::isEmpty); + && WorldEntitySpawner + .canCreatureTypeSpawnAtLocation(EntitySpawnPlacementRegistry.PlacementType.ON_GROUND, world, at, dummy) + && (ignoreLight || world.getLightLevel(LightType.BLOCK, at) < 8) + && world + .getBlockCollisions(null, + new AxisAlignedBB(at.getX() + 0.5 - w2, at.getY(), at.getZ() + 0.5 - w2, at.getX() + 0.5 + w2, + at.getY() + dummyHeight, at.getZ() + 0.5 + w2), + (a, b) -> true) + .allMatch(VoxelShape::isEmpty); } public void spawnParticles(World world, BlockPos at) { @@ -91,8 +96,15 @@ public class SoulPulseEffect { return; Vector3d p = Vector3d.of(at); - world.addOptionalParticle(new SoulParticle.Data(), p.x + 0.5, p.y + 0.5, p.z + 0.5, 0, 0, 0); - world.addParticle(new SoulBaseParticle.Data(), p.x + 0.5, p.y + 0.01, p.z + 0.5, 0, 0, 0); + if (canOverlap()) + world.addOptionalParticle(((int) Math.round(VecHelper.getCenterOf(pos) + .distanceTo(VecHelper.getCenterOf(at)))) >= distance ? new SoulParticle.PerimeterData() + : new ExpandingPerimeterData(), + p.x + 0.5, p.y + 0.5, p.z + 0.5, 0, 0, 0); + if (world.getLightLevel(LightType.BLOCK, at) < 8) { + world.addOptionalParticle(new SoulParticle.Data(), p.x + 0.5, p.y + 0.5, p.z + 0.5, 0, 0, 0); + world.addParticle(new SoulBaseParticle.Data(), p.x + 0.5, p.y + 0.01, p.z + 0.5, 0, 0, 0); + } } private static List> genLayers() { @@ -142,7 +154,8 @@ public class SoulPulseEffect { public static Stream getLayer(int idx) { if (idx < 0 || idx >= MAX_DISTANCE) return Stream.empty(); - return LAYERS.get(idx).stream(); + return LAYERS.get(idx) + .stream(); } } diff --git a/src/main/resources/assets/create/particles/soul_expanding_perimeter.json b/src/main/resources/assets/create/particles/soul_expanding_perimeter.json new file mode 100644 index 000000000..3274e5921 --- /dev/null +++ b/src/main/resources/assets/create/particles/soul_expanding_perimeter.json @@ -0,0 +1,12 @@ +{ + "textures": [ + "create:soul_base_0", + "create:soul_base_1", + "create:soul_base_2", + "create:soul_base_3", + "create:soul_base_2", + "create:soul_base_1", + "create:soul_base_0", + "create:soul_base_0" + ] +} diff --git a/src/main/resources/assets/create/particles/soul_perimeter.json b/src/main/resources/assets/create/particles/soul_perimeter.json new file mode 100644 index 000000000..92b9f65be --- /dev/null +++ b/src/main/resources/assets/create/particles/soul_perimeter.json @@ -0,0 +1,12 @@ +{ + "textures": [ + "create:soul_base_0", + "create:soul_base_1", + "create:soul_base_2", + "create:soul_base_3", + "create:soul_base_4", + "create:soul_base_5", + "create:soul_base_6", + "create:soul_base_7" + ] +} From 83a3faa8717868c2fe890d8910c2fe9801f5a3ef Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Wed, 7 Jul 2021 22:05:09 +0200 Subject: [PATCH 039/118] Mortal Compat - Commented a teleport hook not yet included in recommended forge --- .../weapons/PotatoCannonProjectileTypes.java | 36 +++++++++++-------- 1 file changed, 21 insertions(+), 15 deletions(-) diff --git a/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoCannonProjectileTypes.java b/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoCannonProjectileTypes.java index b14e84700..1d462fed9 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoCannonProjectileTypes.java +++ b/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoCannonProjectileTypes.java @@ -36,11 +36,10 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockRayTraceResult; import net.minecraft.util.math.EntityRayTraceResult; import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.vector.Vector3d; import net.minecraft.world.IWorld; import net.minecraft.world.World; import net.minecraftforge.common.IPlantable; -import net.minecraftforge.event.ForgeEventFactory; -import net.minecraftforge.event.entity.living.EntityTeleportEvent; import net.minecraftforge.registries.IRegistryDelegate; public class PotatoCannonProjectileTypes { @@ -116,7 +115,7 @@ public class PotatoCannonProjectileTypes { .velocity(1.20f) .knockback(0.05f) .renderTumbling() - .onEntityHit(chorusTeleport(20)) + .onEntityHitRecoveryCancelable(chorusTeleport(20)) .registerAndAssign(Items.CHORUS_FRUIT), APPLE = create("apple").damage(5) @@ -142,7 +141,7 @@ public class PotatoCannonProjectileTypes { .knockback(0.05f) .renderTumbling() .soundPitch(1.1f) - .onEntityHit(foodEffects(Foods.GOLDEN_APPLE)) + .onEntityHitRecoveryCancelable(foodEffects(Foods.GOLDEN_APPLE)) .registerAndAssign(Items.GOLDEN_APPLE), ENCHANTED_GOLDEN_APPLE = create("enchanted_golden_apple").damage(1) @@ -151,7 +150,7 @@ public class PotatoCannonProjectileTypes { .knockback(0.05f) .renderTumbling() .soundPitch(1.1f) - .onEntityHit(foodEffects(Foods.ENCHANTED_GOLDEN_APPLE)) + .onEntityHitRecoveryCancelable(foodEffects(Foods.ENCHANTED_GOLDEN_APPLE)) .registerAndAssign(Items.ENCHANTED_GOLDEN_APPLE), BEETROOT = create("beetroot").damage(2) @@ -313,7 +312,7 @@ public class PotatoCannonProjectileTypes { }; } - private static Consumer foodEffects(Food food) { + private static Predicate foodEffects(Food food) { return ray -> { Entity entity = ray.getEntity(); if (entity instanceof LivingEntity) { @@ -322,6 +321,7 @@ public class PotatoCannonProjectileTypes { ((LivingEntity) entity).addPotionEffect(effect.getFirst()); } } + return true; }; } @@ -377,14 +377,14 @@ public class PotatoCannonProjectileTypes { }; } - private static Consumer chorusTeleport(double teleportDiameter) { + private static Predicate chorusTeleport(double teleportDiameter) { return ray -> { Entity entity = ray.getEntity(); World world = entity.getEntityWorld(); if (world.isRemote) - return; + return true; if (!(entity instanceof LivingEntity)) - return; + return false; LivingEntity livingEntity = (LivingEntity) entity; double entityX = livingEntity.getX(); @@ -396,20 +396,26 @@ public class PotatoCannonProjectileTypes { double teleportY = MathHelper.clamp(entityY + (livingEntity.getRNG().nextInt((int) teleportDiameter) - (int) (teleportDiameter / 2)), 0.0D, world.getDimensionHeight() - 1); double teleportZ = entityZ + (livingEntity.getRNG().nextDouble() - 0.5D) * teleportDiameter; - EntityTeleportEvent.ChorusFruit event = ForgeEventFactory.onChorusFruitTeleport(livingEntity, teleportX, teleportY, teleportZ); - if (event.isCanceled()) - return; - - if (livingEntity.attemptTeleport(event.getTargetX(), event.getTargetY(), event.getTargetZ(), true)) { + /* Usable as soon as lowest supported forge > 36.1.3 */ + +// EntityTeleportEvent.ChorusFruit event = ForgeEventFactory.onChorusFruitTeleport(livingEntity, teleportX, teleportY, teleportZ); +// if (event.isCanceled()) +// return; +// if (livingEntity.attemptTeleport(event.getTargetX(), event.getTargetY(), event.getTargetZ(), true)) { + + if (livingEntity.attemptTeleport(teleportX, teleportY, teleportZ, true)) { if (livingEntity.isPassenger()) livingEntity.stopRiding(); SoundEvent soundevent = livingEntity instanceof FoxEntity ? SoundEvents.ENTITY_FOX_TELEPORT : SoundEvents.ITEM_CHORUS_FRUIT_TELEPORT; world.playSound(null, entityX, entityY, entityZ, soundevent, SoundCategory.PLAYERS, 1.0F, 1.0F); livingEntity.playSound(soundevent, 1.0F, 1.0F); - break; + livingEntity.setMotion(Vector3d.ZERO); + return true; } } + + return false; }; } From 28f647dbdaa58006288b3d2eb71e7b5d6022d4da Mon Sep 17 00:00:00 2001 From: Nekrodamus Date: Wed, 7 Jul 2021 17:12:04 -0300 Subject: [PATCH 040/118] Updates to es_es.json by FrannDzs --- .../resources/assets/create/lang/es_es.json | 2112 ++++++++++------- 1 file changed, 1283 insertions(+), 829 deletions(-) diff --git a/src/main/resources/assets/create/lang/es_es.json b/src/main/resources/assets/create/lang/es_es.json index c8e41ac46..50cdc7d7e 100644 --- a/src/main/resources/assets/create/lang/es_es.json +++ b/src/main/resources/assets/create/lang/es_es.json @@ -13,7 +13,7 @@ "block.create.andesite_bricks": "Ladrillos de andesita", "block.create.andesite_bricks_slab": "Losa de ladrillos de andesita", "block.create.andesite_bricks_stairs": "Escaleras de ladrillos de andesita", - "block.create.andesite_bricks_wall": "Pared de ladrillos de andesita", + "block.create.andesite_bricks_wall": "Muro de ladrillos de andesita", "block.create.andesite_casing": "Revestidor de andesita", "block.create.andesite_cobblestone": "Adoquín de andesita", "block.create.andesite_cobblestone_slab": "Losa de adoquín de andesita", @@ -52,23 +52,27 @@ "block.create.chiseled_weathered_limestone": "Piedra caliza erosionada cincelada", "block.create.chocolate": "Chocolate", "block.create.chute": "Ducto", - "block.create.clockwork_bearing": "Rodamiento de reloj", + "block.create.clockwork_bearing": "Rodamiento tipo reloj", "block.create.clutch": "Embrague", - "block.create.cogwheel": "Rueda dentada", + "block.create.cogwheel": "Engranaje pequeño", "block.create.content_observer": "Observador de contenidos", "block.create.controller_rail": "Raíl de control", + "block.create.copper_backtank": "Depósito trasero de cobre", "block.create.copper_block": "Bloque de cobre", "block.create.copper_casing": "Revestidor de caliza", - "block.create.copper_ore": "Mineral de cobre", + "block.create.copper_ore": "Mena de cobre", "block.create.copper_shingles": "Bloque de tejas de cobre", "block.create.copper_tiles": "Bloque de baldosas de cobre", "block.create.copper_valve_handle": "Asa de válvula de cobre", "block.create.creative_crate": "Caja creativa", "block.create.creative_fluid_tank": "Tanque de fluidos creativo", "block.create.creative_motor": "Motor creativo", + "block.create.crimson_window": "Ventana carmesí", + "block.create.crimson_window_pane": "Panel de ventana carmesí", "block.create.crushing_wheel": "Rueda trituradora", "block.create.crushing_wheel_controller": "Controlador de Rueda trituradora", - "block.create.cuckoo_clock": "Reloj Cucú", + "block.create.cuckoo_clock": "Reloj de cuco", + "block.create.cursed_bell": "Cursed Bell", "block.create.cyan_sail": "Vela cian", "block.create.cyan_seat": "Asiento cian", "block.create.cyan_valve_handle": "Asa de válvula cian", @@ -78,32 +82,32 @@ "block.create.dark_scoria_bricks": "Ladrillos de escoria oscura", "block.create.dark_scoria_bricks_slab": "Losa de ladrillos de escoria oscura", "block.create.dark_scoria_bricks_stairs": "Escaleras de ladrillos de escoria oscura", - "block.create.dark_scoria_bricks_wall": "Pared de ladrillos de escoria oscura", + "block.create.dark_scoria_bricks_wall": "Muro de ladrillos de escoria oscura", "block.create.dark_scoria_cobblestone": "Adoquines de escoria oscura", "block.create.dark_scoria_cobblestone_slab": "Losa de adoquines de escoria oscura", "block.create.dark_scoria_cobblestone_stairs": "Escaleras de adoquines de escoria oscura", - "block.create.dark_scoria_cobblestone_wall": "Pared de adoquines de escoria oscura", + "block.create.dark_scoria_cobblestone_wall": "Muro de adoquines de escoria oscura", "block.create.dark_scoria_pillar": "Pilar de escoria oscura", "block.create.deployer": "Desplegador", "block.create.depot": "Depósito", "block.create.diorite_bricks": "Ladrillos de diorita", "block.create.diorite_bricks_slab": "Losa de ladrillos de diorita", "block.create.diorite_bricks_stairs": "Escaleras de ladrillos de diorita", - "block.create.diorite_bricks_wall": "Pared de ladrillos de diorita", + "block.create.diorite_bricks_wall": "Muro de ladrillos de diorita", "block.create.diorite_cobblestone": "Adoquín de diorita", "block.create.diorite_cobblestone_slab": "Losa de adoquínes de diorita", "block.create.diorite_cobblestone_stairs": "Escaleras de adoquines de diorita", - "block.create.diorite_cobblestone_wall": "Pared de adoquines de diorita", + "block.create.diorite_cobblestone_wall": "Muro de adoquines de diorita", "block.create.diorite_pillar": "Pilar de diorita", "block.create.dolomite": "Dolomita", "block.create.dolomite_bricks": "Ladrillos de dolomita", "block.create.dolomite_bricks_slab": "Losa de ladrillos de dolomita", "block.create.dolomite_bricks_stairs": "Escaleras de ladrillos de dolomita", - "block.create.dolomite_bricks_wall": "Pared de ladrillos de dolomita", + "block.create.dolomite_bricks_wall": "Muro de ladrillos de dolomita", "block.create.dolomite_cobblestone": "Adoquín de dolomita", "block.create.dolomite_cobblestone_slab": "Losa de adoquín de dolomita", "block.create.dolomite_cobblestone_stairs": "Escaleras de adoquines de dolomita", - "block.create.dolomite_cobblestone_wall": "Pared de adoquines de dolomita", + "block.create.dolomite_cobblestone_wall": "Muro de adoquines de dolomita", "block.create.dolomite_pillar": "Pilar de dolomita", "block.create.encased_chain_drive": "Cadena de transmisión revestida", "block.create.encased_fan": "Ventilador revestido", @@ -111,39 +115,39 @@ "block.create.fancy_andesite_bricks": "Ladrillos de andesita elegantes", "block.create.fancy_andesite_bricks_slab": "Ladrillos de andesita elegantes", "block.create.fancy_andesite_bricks_stairs": "Escaleras de ladrillos de andesita elegantes", - "block.create.fancy_andesite_bricks_wall": "Pared de ladrillos de andesita elegantes", + "block.create.fancy_andesite_bricks_wall": "Muro de ladrillos de andesita elegantes", "block.create.fancy_dark_scoria_bricks": "Ladrillos de escoria oscura elegantes", "block.create.fancy_dark_scoria_bricks_slab": "Losa de ladrillos de escoria oscura elegantes", "block.create.fancy_dark_scoria_bricks_stairs": "Escalera de ladrillos de escoria oscura elegantes", - "block.create.fancy_dark_scoria_bricks_wall": "Pared de ladrillos de escoria oscura elegantes", + "block.create.fancy_dark_scoria_bricks_wall": "Muro de ladrillos de escoria oscura elegantes", "block.create.fancy_diorite_bricks": "Ladrillos de diorita elegantes", "block.create.fancy_diorite_bricks_slab": "Losa de ladrillos de diorita elegantes", "block.create.fancy_diorite_bricks_stairs": "Escaleras de ladrillos de diorita elegantes", - "block.create.fancy_diorite_bricks_wall": "Pared de ladrillos de diorita elegantes", + "block.create.fancy_diorite_bricks_wall": "Muro de ladrillos de diorita elegantes", "block.create.fancy_dolomite_bricks": "Ladrillos de dolomita elegantes", "block.create.fancy_dolomite_bricks_slab": "Losa de ladrillos de dolomita elegantes", "block.create.fancy_dolomite_bricks_stairs": "Escaleras de ladrillos de dolomita elegantes", - "block.create.fancy_dolomite_bricks_wall": "Pared de ladrillos de dolomita elegantes", + "block.create.fancy_dolomite_bricks_wall": "Muro de ladrillos de dolomita elegantes", "block.create.fancy_gabbro_bricks": "Ladrillos de gabro elegantes", "block.create.fancy_gabbro_bricks_slab": "Losa de ladrillos de gabro elegantes", "block.create.fancy_gabbro_bricks_stairs": "Escaleras de ladrillos de gabro elegantes", - "block.create.fancy_gabbro_bricks_wall": "Pared de ladrillos de gabro elegantes", + "block.create.fancy_gabbro_bricks_wall": "Muro de ladrillos de gabro elegantes", "block.create.fancy_granite_bricks": "Ladrillos de granito elegantes", "block.create.fancy_granite_bricks_slab": "Losa de ladrillos de granito elegantes", "block.create.fancy_granite_bricks_stairs": "Escaleras de ladrillos de granito elegantes", - "block.create.fancy_granite_bricks_wall": "Pared de ladrillos de granito elegantes", + "block.create.fancy_granite_bricks_wall": "Muro de ladrillos de granito elegantes", "block.create.fancy_limestone_bricks": "Ladrillos de piedra caliza elegantes", "block.create.fancy_limestone_bricks_slab": "Losa de ladrillos de piedra caliza elegantes", "block.create.fancy_limestone_bricks_stairs": "Escaleras de ladrillos de piedra caliza elegantes", - "block.create.fancy_limestone_bricks_wall": "Pared de ladrillos de piedra caliza elegantes", + "block.create.fancy_limestone_bricks_wall": "Muro de ladrillos de piedra caliza elegantes", "block.create.fancy_scoria_bricks": "Ladrillos de escoria elegantes", "block.create.fancy_scoria_bricks_slab": "Losa de ladrillos de escoria elegantes", "block.create.fancy_scoria_bricks_stairs": "Escaleras de ladrillos de escoria elegantes", - "block.create.fancy_scoria_bricks_wall": "Pared de ladrillos de escoria elegantes", + "block.create.fancy_scoria_bricks_wall": "Muro de ladrillos de escoria elegantes", "block.create.fancy_weathered_limestone_bricks": "Ladrillos de piedra de caliza erosionada elegantes", "block.create.fancy_weathered_limestone_bricks_slab": "Losa de ladrillos de caliza erosionada elegantes", "block.create.fancy_weathered_limestone_bricks_stairs": "Escaleras de ladrillos de caliza erosionada elegantes", - "block.create.fancy_weathered_limestone_bricks_wall": "Pared de ladrillos de caliza erosionada elegantes", + "block.create.fancy_weathered_limestone_bricks_wall": "Muro de ladrillos de caliza erosionada elegantes", "block.create.fluid_pipe": "Tubería de fluidos de cobre", "block.create.fluid_tank": "Depósito de fluidos", "block.create.fluid_valve": "Válvula de fluidos", @@ -155,13 +159,13 @@ "block.create.gabbro_bricks": "Ladrillos de gabro", "block.create.gabbro_bricks_slab": "Losa de ladrillos de gabro", "block.create.gabbro_bricks_stairs": "Escaleras de ladrillos de gabro", - "block.create.gabbro_bricks_wall": "Pared de ladrillos de gabro", + "block.create.gabbro_bricks_wall": "Muro de ladrillos de gabro", "block.create.gabbro_cobblestone": "Adoquín de gabro", "block.create.gabbro_cobblestone_slab": "Losa de adoquínes de gabro", "block.create.gabbro_cobblestone_stairs": "Escaleras de adoquínes de gabro", - "block.create.gabbro_cobblestone_wall": "Pared de adoquínes de gabro", + "block.create.gabbro_cobblestone_wall": "Muro de adoquínes de gabro", "block.create.gabbro_pillar": "Pilar de gabro", - "block.create.gantry_pinion": "Piñón de grúa", + "block.create.gantry_carriage": "Carro de grúa", "block.create.gantry_shaft": "Eje de grúa", "block.create.gearbox": "Caja de transmisión", "block.create.gearshift": "Caja de cambios", @@ -169,11 +173,11 @@ "block.create.granite_bricks": "Ladrillos de granito", "block.create.granite_bricks_slab": "Losa de ladrillos de granito", "block.create.granite_bricks_stairs": "Escaleras de ladrillos de granito", - "block.create.granite_bricks_wall": "Pared de ladrillos de granito", + "block.create.granite_bricks_wall": "Muro de ladrillos de granito", "block.create.granite_cobblestone": "Adoquín de granito", "block.create.granite_cobblestone_slab": "Losa de adoquínes de granito", "block.create.granite_cobblestone_stairs": "Escaleras de adoquínes de granito", - "block.create.granite_cobblestone_wall": "Pared de adoquínes de granito", + "block.create.granite_cobblestone_wall": "Muro de adoquínes de granito", "block.create.granite_pillar": "Pilar de granito", "block.create.gray_sail": "Vela gris", "block.create.gray_seat": "Asiento gris", @@ -186,10 +190,10 @@ "block.create.horizontal_framed_glass": "Cristal con marco horizontal", "block.create.horizontal_framed_glass_pane": "Panel de cristal con marco horizontal", "block.create.hose_pulley": "Polea de manguera", - "block.create.item_drain": "Drenador de elementos", + "block.create.item_drain": "Drenador de objetos", "block.create.jungle_window": "Ventana de jungla", "block.create.jungle_window_pane": "Panel de ventana de jungla", - "block.create.large_cogwheel": "Rueda dentada grande", + "block.create.large_cogwheel": "Engranaje grande", "block.create.layered_andesite": "Andesita estratificada", "block.create.layered_dark_scoria": "Escoria oscura estratificada", "block.create.layered_diorite": "Diorita estratificada", @@ -199,6 +203,7 @@ "block.create.layered_limestone": "Piedra caliza estratificada", "block.create.layered_scoria": "Escoria estratificada", "block.create.layered_weathered_limestone": "Caliza erosionada estratificada", + "block.create.lectern_controller": "Lectern Controller", "block.create.light_blue_sail": "Vela azul claro", "block.create.light_blue_seat": "Asiento azul claro", "block.create.light_blue_valve_handle": "Asa de válvula azul claro", @@ -213,11 +218,11 @@ "block.create.limestone_bricks": "Ladrillos de piedra caliza", "block.create.limestone_bricks_slab": "Losa de ladrillos de piedra caliza", "block.create.limestone_bricks_stairs": "Escaleras de ladrillos de piedra caliza", - "block.create.limestone_bricks_wall": "Pared de ladrillos de piedra caliza", + "block.create.limestone_bricks_wall": "Muro de ladrillos de piedra caliza", "block.create.limestone_cobblestone": "Adoquínes de piedra caliza", "block.create.limestone_cobblestone_slab": "Losa de adoquines de piedra caliza", "block.create.limestone_cobblestone_stairs": "Escaleras de adoquines de piedra caliza", - "block.create.limestone_cobblestone_wall": "Pared de adoquines de piedra caliza", + "block.create.limestone_cobblestone_wall": "Muro de adoquines de piedra caliza", "block.create.limestone_pillar": "Pilar de piedra caliza", "block.create.linear_chassis": "Chasis lineal", "block.create.lit_blaze_burner": "Quemador de Blaze encendido", @@ -226,7 +231,7 @@ "block.create.magenta_valve_handle": "Asa de válvula magenta", "block.create.mechanical_arm": "Brazo mecánico", "block.create.mechanical_bearing": "Rodamiento mecánico", - "block.create.mechanical_crafter": "Autoensamblador mecánico", + "block.create.mechanical_crafter": "Ensamblador mecánico", "block.create.mechanical_drill": "Taladro mecánico", "block.create.mechanical_harvester": "Cosechadora mecánica", "block.create.mechanical_mixer": "Mezcladora mecánica", @@ -248,7 +253,7 @@ "block.create.mossy_limestone": "Caliza musgosa", "block.create.mossy_scoria": "Escoria musgosa", "block.create.mossy_weathered_limestone": "Caliza erosionada musgosa", - "block.create.mysterious_cuckoo_clock": "Reloj cucú", + "block.create.mysterious_cuckoo_clock": "Reloj de cuco", "block.create.natural_scoria": "Escoria natural", "block.create.nixie_tube": "Tubo Nixie", "block.create.nozzle": "Boquilla", @@ -271,39 +276,40 @@ "block.create.paved_andesite": "Andesita pavimentada", "block.create.paved_andesite_slab": "Losa de andesita pavimentada", "block.create.paved_andesite_stairs": "Escaleras de andesita pavimentada", - "block.create.paved_andesite_wall": "Pared de andesita pavimentada", + "block.create.paved_andesite_wall": "Muro de andesita pavimentada", "block.create.paved_dark_scoria": "Escoria oscura pavimentada", "block.create.paved_dark_scoria_slab": "Losa de escoria oscura pavimentada", "block.create.paved_dark_scoria_stairs": "Escaleras de escoria oscura pavimentada", - "block.create.paved_dark_scoria_wall": "Pared de escoria oscura pavimentad", + "block.create.paved_dark_scoria_wall": "Muro de escoria oscura pavimentad", "block.create.paved_diorite": "Diorita pavimentada", "block.create.paved_diorite_slab": "Losa de diorita pavimentada", "block.create.paved_diorite_stairs": "Escaleras de diorita pavimentada", - "block.create.paved_diorite_wall": "Pared de diorita pavimentad", + "block.create.paved_diorite_wall": "Muro de diorita pavimentad", "block.create.paved_dolomite": "Dolomita pavimentada", "block.create.paved_dolomite_slab": "Losa de dolomita pavimentada", "block.create.paved_dolomite_stairs": "Escaleras de dolomita pavimentada", - "block.create.paved_dolomite_wall": "Pared de dolomita pavimentada", + "block.create.paved_dolomite_wall": "Muro de dolomita pavimentada", "block.create.paved_gabbro": "Gabro pavimentado", "block.create.paved_gabbro_slab": "Losa de gabro pavimentado", "block.create.paved_gabbro_stairs": "Escaleras de gabro pavimentado", - "block.create.paved_gabbro_wall": "Pared de gabro pavimentado", + "block.create.paved_gabbro_wall": "Muro de gabro pavimentado", "block.create.paved_granite": "Granito pavimentado", "block.create.paved_granite_slab": "Losa de granito pavimentado", "block.create.paved_granite_stairs": "Escaleras de granito pavimentado", - "block.create.paved_granite_wall": "Pared de granito pavimentado", + "block.create.paved_granite_wall": "Muro de granito pavimentado", "block.create.paved_limestone": "Piedra caliza pavimentada", "block.create.paved_limestone_slab": "Losa de piedra caliza pavimentada", "block.create.paved_limestone_stairs": "Escaleras de piedra caliza pavimentada", - "block.create.paved_limestone_wall": "Pared de piedra caliza pavimentada", + "block.create.paved_limestone_wall": "Muro de piedra caliza pavimentada", "block.create.paved_scoria": "Escoria pavimentada", "block.create.paved_scoria_slab": "Losa de escoria pavimentada", "block.create.paved_scoria_stairs": "Escaleras de escoria pavimentada", - "block.create.paved_scoria_wall": "Pared de escoria pavimentada", + "block.create.paved_scoria_wall": "Muro de escoria pavimentada", "block.create.paved_weathered_limestone": "Piedra caliza erosionada pavimentada", "block.create.paved_weathered_limestone_slab": "Losa de piedra caliza erosionada pavimentada", "block.create.paved_weathered_limestone_stairs": "Escaleras de piedra caliza erosionada pavimentada", - "block.create.paved_weathered_limestone_wall": "Pared de piedra caliza erosionada pavimentada", + "block.create.paved_weathered_limestone_wall": "Muro de piedra caliza erosionada pavimentada", + "block.create.peculiar_bell": "Peculiar Bell", "block.create.pink_sail": "Vela rosa", "block.create.pink_seat": "Asiento rosa", "block.create.pink_valve_handle": "Asa de válvula rosa", @@ -311,33 +317,33 @@ "block.create.polished_dark_scoria": "Escoria oscura pulida", "block.create.polished_dark_scoria_slab": "Losa de escoria oscura pulida", "block.create.polished_dark_scoria_stairs": "Escaleras de escoria oscura pulida", - "block.create.polished_dark_scoria_wall": "Pared de escoria oscura pulida", + "block.create.polished_dark_scoria_wall": "Muro de escoria oscura pulida", "block.create.polished_dolomite": "Dolomita pulida", "block.create.polished_dolomite_slab": "Losa de dolomita pulida", "block.create.polished_dolomite_stairs": "Escaleras de dolomita pulidas", - "block.create.polished_dolomite_wall": "Pared de dolomita pulida", + "block.create.polished_dolomite_wall": "Muro de dolomita pulida", "block.create.polished_gabbro": "Gabro pulido", "block.create.polished_gabbro_slab": "Losa de gabro pulido", "block.create.polished_gabbro_stairs": "Escaleras de gabro pulido", - "block.create.polished_gabbro_wall": "Pared de gabro pulido", + "block.create.polished_gabbro_wall": "Muro de gabro pulido", "block.create.polished_limestone": "Piedra caliza pulida", "block.create.polished_limestone_slab": "Losa de piedra caliza pulida", "block.create.polished_limestone_stairs": "Escaleras de piedra caliza pulidas", - "block.create.polished_limestone_wall": "Pared de piedra caliza pulida", + "block.create.polished_limestone_wall": "Muro de piedra caliza pulida", "block.create.polished_scoria": "Escoria pulida", "block.create.polished_scoria_slab": "Losa de escoria pulida", "block.create.polished_scoria_stairs": "Escaleras de losa pulida", - "block.create.polished_scoria_wall": "Pared de escoria pulida", + "block.create.polished_scoria_wall": "Muro de escoria pulida", "block.create.polished_weathered_limestone": "Piedra caliza erosionada pulida", "block.create.polished_weathered_limestone_slab": "Losa de piedra caliza erosionada pulida", "block.create.polished_weathered_limestone_stairs": "Escaleras de piedra caliza erosionada pulida", - "block.create.polished_weathered_limestone_wall": "Pared de piedra caliza erosionada pulida", + "block.create.polished_weathered_limestone_wall": "Muro de piedra caliza erosionada pulida", "block.create.portable_fluid_interface": "Interfaz de fluidos portátil", "block.create.portable_storage_interface": "Interfaz de almacenamiento portátil", "block.create.powered_latch": "Palanca motorizada", "block.create.powered_toggle_latch": "Palanca de cierre motorizada", "block.create.pulley_magnet": "Imán de la polea", - "block.create.pulse_repeater": "Repetidor de pulsos de Redstone", + "block.create.pulse_repeater": "Repetidor de pulsos de redstone", "block.create.purple_sail": "Vela morada", "block.create.purple_seat": "Asiento morado", "block.create.purple_valve_handle": "Asa de válvula morada", @@ -345,28 +351,28 @@ "block.create.red_sail": "Vela roja", "block.create.red_seat": "Asiento rojo", "block.create.red_valve_handle": "Asa de válvula roja", - "block.create.redstone_contact": "Contacto de Redstone", - "block.create.redstone_link": "Enlace de Redstone", - "block.create.refined_radiance_casing": "Revestidor de radiante", + "block.create.redstone_contact": "Contacto de redstone", + "block.create.redstone_link": "Enlace de redstone", + "block.create.refined_radiance_casing": "Revestidor radiante", "block.create.reinforced_rail": "Raíl reforzado", "block.create.rope": "Cuerda", "block.create.rope_pulley": "Polea de cuerda", - "block.create.rotation_speed_controller": "Controlador de velocidad de rotación", + "block.create.rotation_speed_controller": "Controlador de velocidad rotacional", "block.create.sail_frame": "Marco de vela", "block.create.schematic_table": "Tabla de esquemas", - "block.create.schematicannon": "Schematicannon", + "block.create.schematicannon": "Cañón de esquemas", "block.create.scoria": "Escoria", "block.create.scoria_bricks": "Ladrillos de escoria", "block.create.scoria_bricks_slab": "Losa de ladrillos de escoria", "block.create.scoria_bricks_stairs": "Escaleras de ladrillos de escoria", - "block.create.scoria_bricks_wall": "Pared de ladrillos de escoria", + "block.create.scoria_bricks_wall": "Muro de ladrillos de escoria", "block.create.scoria_cobblestone": "Adoquín de escoria", "block.create.scoria_cobblestone_slab": "Losa de adoquínes de escoria", "block.create.scoria_cobblestone_stairs": "Escaleras de adoquines de escoria", - "block.create.scoria_cobblestone_wall": "Pared de adoquines de escoria", + "block.create.scoria_cobblestone_wall": "Muro de adoquines de escoria", "block.create.scoria_pillar": "Pilar de escoria", "block.create.secondary_linear_chassis": "Chasis lineal secundario", - "block.create.sequenced_gearshift": "Palanca de cambios secuencial", + "block.create.sequenced_gearshift": "Caja de cambios secuencial", "block.create.shadow_steel_casing": "Revestidor sombrío", "block.create.shaft": "Eje", "block.create.smart_chute": "Ducto inteligente", @@ -375,6 +381,7 @@ "block.create.spout": "Surtidor", "block.create.spruce_window": "Ventana de abeto", "block.create.spruce_window_pane": "Panel de ventana de abeto", + "block.create.sticker": "Sticker", "block.create.sticky_mechanical_piston": "Pistón mecánico pegajoso", "block.create.stockpile_switch": "Interruptor de acopio", "block.create.stressometer": "Estresómetro", @@ -383,17 +390,20 @@ "block.create.turntable": "Plataforma giratoria mecánica", "block.create.vertical_framed_glass": "Vidrio esmaltado vertical", "block.create.vertical_framed_glass_pane": "Panel de vidrio esmaltado vertical", + "block.create.warped_window": "Ventana distorsionada", + "block.create.warped_window_pane": "Panel de ventana distorsionada", "block.create.water_wheel": "Rueda hidráulica mecánica", "block.create.weathered_limestone": "Piedra caliza erosionada", "block.create.weathered_limestone_bricks": "Ladrillos de piedra caliza erosionada", "block.create.weathered_limestone_bricks_slab": "Losa de piedra caliza erosionada", "block.create.weathered_limestone_bricks_stairs": "Escaleras de ladrillos de piedra caliza erosionada", - "block.create.weathered_limestone_bricks_wall": "Pared de ladrillos de piedra caliza erosionada", + "block.create.weathered_limestone_bricks_wall": "Muro de ladrillos de piedra caliza erosionada", "block.create.weathered_limestone_cobblestone": "Adoquín de piedra caliza erosionada", "block.create.weathered_limestone_cobblestone_slab": "Losa de adoquín de piedra caliza erosionada", "block.create.weathered_limestone_cobblestone_stairs": "Escaleras de adoquín de piedra caliza erosionada", - "block.create.weathered_limestone_cobblestone_wall": "Pared de adoquínes de piedra caliza erosionada", + "block.create.weathered_limestone_cobblestone_wall": "Muro de adoquínes de piedra caliza erosionada", "block.create.weathered_limestone_pillar": "Pilar de piedra caliza erosionada", + "block.create.weighted_ejector": "Eyector de peso", "block.create.white_sail": "Vela blanca", "block.create.white_seat": "Asiento blanco", "block.create.white_valve_handle": "Asa de válvula blanco", @@ -403,13 +413,15 @@ "block.create.yellow_seat": "Asiento amarillo", "block.create.yellow_valve_handle": "Asa de válvula amarillo", "block.create.zinc_block": "Bloque de zinc", - "block.create.zinc_ore": "Mineral de zinc", + "block.create.zinc_ore": "Mena de zinc", "entity.create.contraption": "Artilugio", + "entity.create.crafting_blueprint": "Plano de elaboración", "entity.create.gantry_contraption": "Artilugio de grúa", + "entity.create.potato_projectile": "Potato Projectile", "entity.create.seat": "Asiento", "entity.create.stationary_contraption": "Artilugio estacionario", - "entity.create.super_glue": "Super Pegamento", + "entity.create.super_glue": "Pegamento", "fluid.create.milk": "Leche", "fluid.create.potion": "Poción", @@ -418,22 +430,26 @@ "item.create.andesite_alloy": "Aleación de andesita", "item.create.attribute_filter": "Filtro de atributos", "item.create.bar_of_chocolate": "Barra de chocolate", - "item.create.belt_connector": "Correa", - "item.create.blaze_cake": "Pastel de Blaze", - "item.create.blaze_cake_base": "Base de Pastel de Blaze", + "item.create.belt_connector": "Correa mecánica", + "item.create.blaze_cake": "Pastel de blaze", + "item.create.blaze_cake_base": "Base de pastel de blaze", "item.create.brass_hand": "Mano de latón", "item.create.brass_ingot": "Lingote de latón", "item.create.brass_nugget": "Pepita de latón", "item.create.brass_sheet": "Lámina de latón", "item.create.builders_tea": "Té del Constructor", "item.create.chest_minecart_contraption": "Artilugio de vagoneta con cofre", - "item.create.chocolate_bucket": "Cubo de chocolate", + "item.create.chocolate_bucket": "Cubo con chocolate", + "item.create.chocolate_glazed_berries": "Bayas glaseadas con chocolate", "item.create.chromatic_compound": "Compuesto cromático", - "item.create.cinder_flour": "Harina de ceniza", + "item.create.cinder_flour": "Harina del Nether", + "item.create.clockwork_component": "Clockwork Component", + "item.create.copper_backtank": "Depósito trasero de cobre", "item.create.copper_ingot": "Lingote de cobre", "item.create.copper_nugget": "Pepita de cobre", "item.create.copper_sheet": "Lámina de cobre", - "item.create.crafter_slot_cover": "Tapa de ranura del Autoensamblador mecánico", + "item.create.crafter_slot_cover": "Tapa de ranura del ensamblador mecánico", + "item.create.crafting_blueprint": "Plano de elaboración", "item.create.crushed_aluminum_ore": "Mineral de aluminio molido", "item.create.crushed_brass": "Latón molido", "item.create.crushed_copper_ore": "Mineral de cobre molido", @@ -448,36 +464,39 @@ "item.create.crushed_tin_ore": "Mineral de estaño molido", "item.create.crushed_uranium_ore": "Mineral de uranio molido", "item.create.crushed_zinc_ore": "Mineral de zinc molido", - "item.create.deforester": "Deforestador", + "item.create.diving_boots": "Botas de buceo", + "item.create.diving_helmet": "Casco de buceo", "item.create.dough": "Masilla", "item.create.electron_tube": "Tubo de electrones", - "item.create.empty_blaze_burner": "Quemador de Blaze vacío", + "item.create.empty_blaze_burner": "Quemador de blaze vacío", "item.create.empty_schematic": "Esquema vacío", "item.create.extendo_grip": "Agarre extendido", "item.create.filter": "Filtro", "item.create.furnace_minecart_contraption": "Artilugio de vagoneta de horno", - "item.create.goggles": "Gafas del Ingeniero", + "item.create.goggles": "Gafas del constructor", "item.create.golden_sheet": "Lámina de oro", - "item.create.handheld_blockzapper": "Blockzapper", - "item.create.handheld_worldshaper": "Worldshaper", - "item.create.honey_bucket": "Cubo de miel", - "item.create.integrated_circuit": "Chip de circuito integrado", + "item.create.handheld_worldshaper": "Worldshaper Creativo", + "item.create.honey_bucket": "Cubo con miel", + "item.create.honeyed_apple": "Manzana con miel", + "item.create.incomplete_clockwork_component": "Incomplete Clockwork Component", "item.create.iron_sheet": "Lámina de hierro", - "item.create.lapis_sheet": "Lámina de lapislázuli", + "item.create.linked_controller": "Controlador enlazado", "item.create.minecart_contraption": "Artilugio de vagoneta", "item.create.minecart_coupling": "Acoplamiento de vagoneta", "item.create.polished_rose_quartz": "Cuarzo rosado pulido", - "item.create.powdered_obsidian": "Obsidiana en polvo", + "item.create.potato_cannon": "Potato Cannon", + "item.create.powdered_obsidian": "Polvo de obsidiana", "item.create.propeller": "Hélice", "item.create.red_sand_paper": "Papel de lija rojo", "item.create.refined_radiance": "Resplandor refinado", "item.create.rose_quartz": "Cuarzo rosado", "item.create.sand_paper": "Papel de lija", "item.create.schematic": "Esquema", - "item.create.schematic_and_quill": "Esquema y Pluma", + "item.create.schematic_and_quill": "Esquema y pluma", "item.create.shadow_steel": "Acero sombrío", - "item.create.super_glue": "Super Pegamento", - "item.create.tree_fertilizer": "Fertilizador de árboles", + "item.create.super_glue": "Pegamento", + "item.create.sweet_roll": "Pan dulce", + "item.create.tree_fertilizer": "Fertilizante para árboles", "item.create.vertical_gearbox": "Caja de transmisión vertical", "item.create.wand_of_symmetry": "Varita de simetría", "item.create.wheat_flour": "Harina de trigo", @@ -490,25 +509,25 @@ "_": "->------------------------] Advancements [------------------------<-", "advancement.create.root": "Bienvenido a Create", - "advancement.create.root.desc": "¡Es hora de empezar a construir increíbles Artilugios!", - "advancement.create.andesite_alloy": "Aliteraciones en abundancia", + "advancement.create.root.desc": "¡Es hora de empezar a construir increíbles artilugios!", + "advancement.create.andesite_alloy": "Aleaciones en abundancia", "advancement.create.andesite_alloy.desc": "Los materiales de Create tienen nombres extraños, la aleación de andesita es uno de ellos.", - "advancement.create.its_alive": "Está Vivo!", - "advancement.create.its_alive.desc": "Vea cómo gira su primer componente cinético.", + "advancement.create.its_alive": "¡Está vivo!", + "advancement.create.its_alive.desc": "Mira cómo gira tu primer componente cinético.", "advancement.create.shifting_gears": "Cambiando de marcha", - "advancement.create.shifting_gears.desc": "Conecta una rueda dentada grande a una pequeña, lo que te permitirá cambiar la velocidad de tu artilugio.", + "advancement.create.shifting_gears.desc": "Conecta un engranaje grande a uno pequeño, lo que te permitirá cambiar la velocidad de tu artilugio.", "advancement.create.overstressed": "Sobrecargado", "advancement.create.overstressed.desc": "Experimenta los límites del estrés.", "advancement.create.belt": "Paseo de algas", "advancement.create.belt.desc": "Conectar dos ejes con una correa.", - "advancement.create.tunnel": "Cúbrete!", - "advancement.create.tunnel.desc": "Embellece tu correa con un Túnel.", + "advancement.create.tunnel": "¡Cúbrete!", + "advancement.create.tunnel.desc": "Embellece tu correa con un túnel.", "advancement.create.splitter_tunnel": "Divide y vencerás", "advancement.create.splitter_tunnel.desc": "Crear un divisor con un grupo de túneles de latón.", "advancement.create.chute": "Caída en picado", "advancement.create.chute.desc": "Coloque un ducto, la contrapartida vertical de la cinta.", "advancement.create.upward_chute": "Abducción aérea", - "advancement.create.upward_chute.desc": "Observe cómo un objeto lanzado vuela hacia un paracaídas impulsado por un ventilador.", + "advancement.create.upward_chute.desc": "Observe cómo un objeto lanzado vuela dentro de un ducto impulsado por un ventilador.", "advancement.create.belt_funnel": "Colgantes con forma de embudo", "advancement.create.belt_funnel.desc": "Coloca un embudo lateral encima de una cinta o depósito para crear un tipo especial.", "advancement.create.belt_funnel_kiss": "Los loros y las aletas", @@ -516,81 +535,81 @@ "advancement.create.fan": "Maestro mecánico del aire", "advancement.create.fan.desc": "Monta la corriente de aire proporcionada por un ventilador revestido.", "advancement.create.fan_lava": "Calentador geotérmico", - "advancement.create.fan_lava.desc": "Quedar atrapado en una corriente de aire que funde las cosas.", + "advancement.create.fan_lava.desc": "Queda atrapado en una corriente de aire que funde las cosas.", "advancement.create.fan_water": "Lavado de la ropa", - "advancement.create.fan_water.desc": "Quedar atrapado en una corriente de aire que lava las cosas.", + "advancement.create.fan_water.desc": "Queda atrapado en una corriente de aire que lava las cosas.", "advancement.create.fan_smoke": "Fuelle mecánico", - "advancement.create.fan_smoke.desc": "Quedar atrapado en una corriente de aire que humea los artículos.", + "advancement.create.fan_smoke.desc": "Queda atrapado en una corriente de aire que humea los objetos.", "advancement.create.wrench": "Configurar convenientemente", "advancement.create.wrench.desc": "Crea una llave inglesa para ayudarte a construir tus artilugios.", - "advancement.create.goggles": "Stress-O-Vision", - "advancement.create.goggles.desc": "Crea unas Gafas del Ingeniero para ayudarte a obtener más información cinética de los componentes.", - "advancement.create.speedometer": "Pero, ¿con qué rapidez exactamente??", - "advancement.create.speedometer.desc": "Coloca y alimenta un Velocímetro. Míralo a través de las gafas para leer su valor exacto.", + "advancement.create.goggles": "Estresóvisión", + "advancement.create.goggles.desc": "Crea unas gafas del constructor para ayudarte a obtener más información cinética de los componentes.", + "advancement.create.speedometer": "Pero, ¿con qué rapidez exactamente?", + "advancement.create.speedometer.desc": "Coloca y alimenta un velocímetro. Míralo a través de las gafas para leer su valor exacto.", "advancement.create.stressometer": "Pero, ¿cuán estresado exactamente??", - "advancement.create.stressometer.desc": "Coloca y alimenta un Estresómetro. Míralo a través de las gafas para leer su valor exacto.", - "advancement.create.aesthetics": "Boom, Estética!", - "advancement.create.aesthetics.desc": "Colocar los soportes en un eje, tubo y rueda dentada.", - "advancement.create.reinforced": "Boom, Reforzado!", - "advancement.create.reinforced.desc": "Utilizar bloques de revestimiento en un eje, un tubo y una cinta.", + "advancement.create.stressometer.desc": "Coloca y alimenta un estresómetro. Míralo a través de las gafas para leer su valor exacto.", + "advancement.create.aesthetics": "Boom, ¡Estética!", + "advancement.create.aesthetics.desc": "Coloca soportes en ejes, ductos y engranajes.", + "advancement.create.reinforced": "Boom, ¡Reforzado!", + "advancement.create.reinforced.desc": "Utiliza bloques de revestimiento en un eje, un ducto y una cinta.", "advancement.create.water_wheel": "Aprovechar la hidráulica", - "advancement.create.water_wheel.desc": "Coloca una Rueda hidráulica e intenta hacerla girar.", + "advancement.create.water_wheel.desc": "Coloca una rueda hidráulica e intenta hacerla girar.", "advancement.create.chocolate_wheel": "Potencia de buen gusto", - "advancement.create.chocolate_wheel.desc": "Hacer funcionar una rueda de agua con chocolate fundido.", - "advancement.create.lava_wheel": "Rueda de Magma", + "advancement.create.chocolate_wheel.desc": "Haz funcionar una rueda de agua con chocolate fundido.", + "advancement.create.lava_wheel": "Rueda de magma", "advancement.create.lava_wheel.desc": "Esto no debió haber funcionado.", "advancement.create.cuckoo": "¿Es el momento?", - "advancement.create.cuckoo.desc": "Presenciar cómo un Reloj de cucú anuncia la hora de acostarse.", + "advancement.create.cuckoo.desc": "Presencia cómo un reloj de cuco anuncia la hora de acostarse.", "advancement.create.millstone": "Triturador de bolsillo", - "advancement.create.millstone.desc": "Colocar y alimentar una Piedra de molino.", + "advancement.create.millstone.desc": "Coloca y alimenta una piedra de molino.", "advancement.create.windmill": "Una suave brisa", - "advancement.create.windmill.desc": "Montar un molino de viento.", + "advancement.create.windmill.desc": "Monta un molino de viento.", "advancement.create.maxed_windmill": "Una fuerte brisa", - "advancement.create.maxed_windmill.desc": "Montar un molino de viento de máxima intensidad.", + "advancement.create.maxed_windmill.desc": "Monta un molino de viento con máxima intensidad.", "advancement.create.andesite_casing": "La edad de la andesita", "advancement.create.andesite_casing.desc": "Utiliza un poco de aleación de andesita y madera para crear un revestimiento básico.", "advancement.create.mechanical_drill": "Interruptores fijos", - "advancement.create.mechanical_drill.desc": "Colocar y alimentar un taladro mecánico.", + "advancement.create.mechanical_drill.desc": "Coloca y alimenta un taladro mecánico.", "advancement.create.press": "¡La prensa se pone en marcha!", "advancement.create.press.desc": "Activa una prensa mecánica y utilízala para crear algunas láminas.", "advancement.create.polished_rose_quartz": "Diamantes rosas", "advancement.create.polished_rose_quartz.desc": "Utiliza un trozo de papel de lija para pulir el cuarzo rosa hasta que se vuelva transparente.", "advancement.create.electron_tube": "Beep Boop", - "advancement.create.electron_tube.desc": "Haz algunos Tubos de Electrones, útiles en la fabricación de maquinaria menos primitiva.", + "advancement.create.electron_tube.desc": "Haz algunos tubos de electrones, útiles en la fabricación de maquinaria menos primitiva.", "advancement.create.mechanical_saw": "Picado estacionario", - "advancement.create.mechanical_saw.desc": "Colocar y alimentar una sierra mecánica.", + "advancement.create.mechanical_saw.desc": "Coloca y alimenta una sierra mecánica.", "advancement.create.basin": "Funcionamiento de la cuenca", - "advancement.create.basin.desc": "Coloca una Cuenca e intenta arrojar objetos en ella.", + "advancement.create.basin.desc": "Coloca una cuenca e intenta arrojar objetos en ella.", "advancement.create.mixer": "Mezcla de colores", - "advancement.create.mixer.desc": "Coloque una batidora mecánica sobre el lavabo, enciéndala y empiece a mezclar algunos ingredientes.", + "advancement.create.mixer.desc": "Coloca una batidora mecánica sobre el lavabo, enciéndala y empiece a mezclar algunos ingredientes.", "advancement.create.blaze_burner": "Una chimenea viva", - "advancement.create.blaze_burner.desc": "Obtener un Quemador de Blaze.", + "advancement.create.blaze_burner.desc": "Obtiene un quemador de blaze.", "advancement.create.compact": "Compactación automática", - "advancement.create.compact.desc": "Utiliza una prensa y una palangana para compactar algunos elementos.", + "advancement.create.compact.desc": "Utiliza una prensa y una cuenca para compactar algunos objetos.", "advancement.create.brass": "Aleaciones reales", - "advancement.create.brass.desc": "Utiliza Cobre molido y Zinc molido para crear algo de latón.", + "advancement.create.brass.desc": "Utiliza cobre molido y zinc molido para crear algo de latón.", "advancement.create.brass_casing": "La Edad de Latón", "advancement.create.brass_casing.desc": "Utiliza el latón recién obtenido y algo de madera para crear un revestimiento más avanzado.", "advancement.create.copper_casing": "La Edad de Cobre", "advancement.create.copper_casing.desc": "Utiliza algunas láminas de cobre y madera para crear algunos revestimientos de cobre.", "advancement.create.spout": "Sploosh", - "advancement.create.spout.desc": "Observar el llenado de un elemento fluido usando una boquilla.", + "advancement.create.spout.desc": "Observa el llenado de un fluido usando una boquilla.", "advancement.create.spout_potion": "Cervecera global", "advancement.create.spout_potion.desc": "Mira cómo un pico llena una botella con líquido de poción.", "advancement.create.chocolate": "Un mundo de imaginación", - "advancement.create.chocolate.desc": "Obtener un cubo de chocolate fundido.", + "advancement.create.chocolate.desc": "Obtiene un cubo con chocolate fundido.", "advancement.create.item_drain": "Drenaje de la ropa", - "advancement.create.item_drain.desc": "Ver cómo se vacía un elemento fluido mediante una drenadora de elementos.", - "advancement.create.chained_item_drain": "Déjalo rodar!", - "advancement.create.chained_item_drain.desc": "Observa cómo un objeto rueda por varios drenadores de elementos encadenados.", + "advancement.create.item_drain.desc": "Ve cómo se vacía un fluido mediante un drenador de objetos.", + "advancement.create.chained_item_drain": "¡Déjalo rodar!", + "advancement.create.chained_item_drain.desc": "Observa cómo un objeto rueda por varios drenadores de objetos encadenados.", "advancement.create.glass_pipe": "Espía del flujo", - "advancement.create.glass_pipe.desc": "Observe cómo se propaga el fluido a través de una tubería de fluidos con ventanas. Las tuberías de fluido rectas se convierten en ventanas cuando se utiliza una llave en ellas.", + "advancement.create.glass_pipe.desc": "Observa cómo se propaga el fluido a través de un tubo de fluidos con ventanas. Los tubos de fluido rectos se convierten en ventanas cuando se utiliza una llave inglesa en ellas.", "advancement.create.pipe_collision": "No cruzar nunca los arroyos", "advancement.create.pipe_collision.desc": "Vea cómo se unen dos fluidos en su red de tuberías.", "advancement.create.pipe_spill": "¡Hay una fuga!", "advancement.create.pipe_spill.desc": "Observe cómo un extremo abierto de una tubería toma o deposita fluidos en el mundo.", "advancement.create.hose_pulley": "Vertidos industriales", - "advancement.create.hose_pulley.desc": "Bajar una polea de manguera y ver cómo se vacía o se llena un cuerpo de líquido.", + "advancement.create.hose_pulley.desc": "Baja una polea de manguera y ve cómo se vacía o se llena un cuerpo de líquido.", "advancement.create.infinite_water": "Drenando el océano", "advancement.create.infinite_water.desc": "Bombea de una masa de agua lo suficientemente grande como para ser considerada infinita.", "advancement.create.infinite_lava": "Drenaje del núcleo de los planetas", @@ -598,55 +617,51 @@ "advancement.create.infinite_chocolate": "Ahogándose en la imaginación", "advancement.create.infinite_chocolate.desc": "Bombea desde una masa de chocolate fundido lo suficientemente grande como para ser considerado infinito.", "advancement.create.crafter": "Montaje automatizado", - "advancement.create.crafter.desc": "Coloca y alimenta algunos autoensambladores.", + "advancement.create.crafter.desc": "Coloca y alimenta algunos ensambladores.", "advancement.create.clockwork_bearing": "Artilugio a la hora", - "advancement.create.clockwork_bearing.desc": "Ensamblar una estructura montada sobre un rodamiento de relojería.", + "advancement.create.clockwork_bearing.desc": "Ensamblar una estructura montada sobre un rodamiento tipo reloj.", "advancement.create.nixie_tube": "Signos de estilo", - "advancement.create.nixie_tube.desc": "Obtener y colocar un par de Tubos Nixie.", + "advancement.create.nixie_tube.desc": "Obtener y colocar un par de tubos nixie.", "advancement.create.deployer": "Picar, colocar y atacar", - "advancement.create.deployer.desc": "Coloca y potencia un Desplegador, el reflejo perfecto de ti mismo.", + "advancement.create.deployer.desc": "Coloca y potencia un desplegador, el reflejo perfecto de ti mismo.", "advancement.create.speed_controller": "Los ingenieros lo odian!", - "advancement.create.speed_controller.desc": "Coloque un regulador de velocidad de rotación, el dispositivo definitivo para cambiar de marcha.", + "advancement.create.speed_controller.desc": "Coloca un controlador de velocidad rotacional, el dispositivo definitivo para cambiar de marcha.", "advancement.create.flywheel": "El corazón de la fábrica", - "advancement.create.flywheel.desc": "Conectar con éxito un motor a la rueda de inercia.", + "advancement.create.flywheel.desc": "Conecta con éxito un motor a la rueda de inercia.", "advancement.create.overstress_flywheel": "Altos niveles de estrés", - "advancement.create.overstress_flywheel.desc": "Sobrecargar un Motor de Horno.", - "advancement.create.integrated_circuit": "Cálculos complejos", - "advancement.create.integrated_circuit.desc": "Ensamblar un chip de circuito integrado.", - "advancement.create.mechanical_arm": "Manos ocupadas!", + "advancement.create.overstress_flywheel.desc": "Sobrecarga un motor de horno.", + "advancement.create.clockwork_component": "Complex Curiosities", + "advancement.create.clockwork_component.desc": "Assemble a Clockwork Component.", + "advancement.create.mechanical_arm": "¡Manos ocupadas!", "advancement.create.mechanical_arm.desc": "Crea un brazo mecánico, selecciona las entradas y salidas, colócalo en el suelo y dale energía; luego observa cómo hace todo el trabajo por ti.", - "advancement.create.musical_arm": "Tócame la melodía!", + "advancement.create.musical_arm": "¡Tócame la melodía!", "advancement.create.musical_arm.desc": "Vea cómo un brazo mecánico maneja su Jukebox.", "advancement.create.arm_many_targets": "Organize-o-Tron", - "advancement.create.arm_many_targets.desc": "Programar un brazo mecánico con diez o más posiciones de salida.", + "advancement.create.arm_many_targets.desc": "Programa un brazo mecánico con diez o más posiciones de salida.", "advancement.create.arm_blaze_burner": "Combust-o-Tron", - "advancement.create.arm_blaze_burner.desc": "Instruya un brazo mecánico para alimentar su Quemador de Blaze.", + "advancement.create.arm_blaze_burner.desc": "Instruya un brazo mecánico para alimentar su quemador de blaze.", "advancement.create.fist_bump": "¡Pégale, hermano!", - "advancement.create.fist_bump.desc": "Hacer que dos Desplegadores se den un puñetazo.", + "advancement.create.fist_bump.desc": "Haz que dos desplegadores se den un puñetazo.", "advancement.create.crushing_wheel": "Un par de gigantes", - "advancement.create.crushing_wheel.desc": "Crea algunas Ruedas de trituración para descomponer más materiales de forma más eficaz.", + "advancement.create.crushing_wheel.desc": "Crea algunas ruedas de trituración para descomponer más materiales de forma más eficaz.", "advancement.create.blaze_cake": "Fiebre del azúcar", - "advancement.create.blaze_cake.desc": "Hornea en tu Quemador de Blaze un pastel especial.", - "advancement.create.chromatic_compound": "Minerales bipolares", - "advancement.create.chromatic_compound.desc": "Crea una Barra de Compuesto Cromático.", + "advancement.create.blaze_cake.desc": "Hornea en tu quemador de blaze un pastel especial.", + "advancement.create.chromatic_compound": "Mysterious Minerals", + "advancement.create.chromatic_compound.desc": "Crea una barra de compuesto cromático.", "advancement.create.shadow_steel": "Retorno del vacío", - "advancement.create.shadow_steel.desc": "Crea Acero Sombrío, una barra de metal de la nada.", + "advancement.create.shadow_steel.desc": "Crea acero sombrío, una barra de metal de la nada.", "advancement.create.refined_radiance": "Brillante e inspirador", - "advancement.create.refined_radiance.desc": "Crea un Resplandor refinado, una poderosa sustancia cromática.", + "advancement.create.refined_radiance.desc": "Crea un resplandor refinado, una poderosa sustancia cromática.", "advancement.create.chromatic_age": "La edad cromática", "advancement.create.chromatic_age.desc": "Crear bloques de revestimiento de la luz y la oscuridad.", - "advancement.create.zapper": "Construir con estilo", - "advancement.create.zapper.desc": "Construye un Blockzapper. Una pistola láser radiante que te ayuda a construir.", - "advancement.create.upgraded_zapper": "Radiante sobrecarga", - "advancement.create.upgraded_zapper.desc": "Crear y activar un Blockzapper totalmente mejorado.", "advancement.create.wand_of_symmetry": "Espejos radiantes", "advancement.create.wand_of_symmetry.desc": "Crear un bastón de simetría.", - "advancement.create.deforester": "Picado radiante", - "advancement.create.deforester.desc": "Crea un Deforestador y despídete del bosque local.", - "advancement.create.extendo_grip": "Boioioing!", - "advancement.create.extendo_grip.desc": "Hazte con un Agarre extentido.", + "advancement.create.extendo_grip": "¡Boioioing!", + "advancement.create.extendo_grip.desc": "Hazte con un agarre extentido.", + "advancement.create.potato_cannon": "Fwoomp!", + "advancement.create.potato_cannon.desc": "Defeat an enemy with your Potato Cannon.", "advancement.create.dual_extendo_grip": "La última edad del boing", - "advancement.create.dual_extendo_grip.desc": "Doble Empuñadura extendida para un alcance sobrehumano.", + "advancement.create.dual_extendo_grip.desc": "Doble empuñadura extendida para un alcance sobrehumano.", "advancement.create.eob": "Fin de la beta", "advancement.create.eob.desc": "Espere más contenido aquí en el futuro. <3", @@ -656,16 +671,26 @@ "itemGroup.create.base": "Create", "itemGroup.create.palettes": "Paletas", - "death.attack.create.crush": "%1$s se procesó por las Ruedas de trituración", + "death.attack.create.crush": "%1$s se procesó en las ruedas de trituración", "death.attack.create.fan_fire": "%1$s murió quemado por el aire caliente", "death.attack.create.fan_lava": "%1$s murió quemado por un abanico de lava", "death.attack.create.mechanical_drill": "%1$s fue empalado por un taladro mecánico", "death.attack.create.mechanical_saw": "%1$s fue cortado por la mitad por una sierra mecánica", - "death.attack.create.cuckoo_clock_explosion": "%1$s fue volado por los aires por un reloj cucú manipulado", + "death.attack.create.potato_cannon": "%1$s was shot by %2$s's Potato Cannon", + "death.attack.create.potato_cannon.item": "%1$s was shot by %2$s using %3$s", + "death.attack.create.cuckoo_clock_explosion": "%1$s fue volado por los aires por un reloj de cuco manipulado", "create.block.deployer.damage_source_name": "un Desplegador rebelde", "create.block.cart_assembler.invalid": "Coloque su Ensamblador de vagonetas en un bloque de Raíles", + "create.menu.return": "Regresar al menú", + "create.menu.configure": "Configurar...", + "create.menu.ponder_index": "Ponder Index", + "create.menu.only_ingame": "Available in the Pause Menu", + "create.menu.project_page": "Página del proyecto", + "create.menu.report_bugs": "Informar de problemas", + "create.menu.support": "Apóyenos", + "create.recipe.crushing": "Trituración", "create.recipe.milling": "Fresado", "create.recipe.fan_washing": "Lavado a granel", @@ -676,6 +701,7 @@ "create.recipe.fan_blasting.fan": "Ventilador detrás de la lava", "create.recipe.pressing": "Prensando", "create.recipe.mixing": "Mezclando", + "create.recipe.deploying": "Desplegando", "create.recipe.automatic_shapeless": "Elaboración automatizada de productos sin forma", "create.recipe.automatic_brewing": "Elaboración de cerveza automatizada", "create.recipe.packing": "Compactando", @@ -685,11 +711,20 @@ "create.recipe.automatic_shaped": "Elaboración automatizada de productos con forma", "create.recipe.block_cutting": "Corte de bloques", "create.recipe.wood_cutting": "Corte de maderas", - "create.recipe.blockzapper_upgrade": "Blockzapper", "create.recipe.sandpaper_polishing": "Pulido con papel de lija", "create.recipe.mystery_conversion": "Conversión misteriosa", "create.recipe.spout_filling": "Llenar por el pico", - "create.recipe.draining": "Drenador de elementos", + "create.recipe.draining": "Drenador de objetos", + "create.recipe.sequenced_assembly": "Sequenced Assembly", + "create.recipe.assembly.next": "Next: %1$s", + "create.recipe.assembly.step": "Step %1$s:", + "create.recipe.assembly.progress": "Progress: %1$s/%2$s", + "create.recipe.assembly.pressing": "Process in Press", + "create.recipe.assembly.spout_filling_fluid": "Spout %1$s", + "create.recipe.assembly.deploying_item": "Deploy %1$s", + "create.recipe.assembly.cutting": "Cut with Saw", + "create.recipe.assembly.repeat": "Repeat Sequence %1$s Times", + "create.recipe.assembly.junk": "Random junk", "create.recipe.processing.chance": "%1$s%% Chance", "create.recipe.heat_requirement.none": "No es necesario calentar", "create.recipe.heat_requirement.heated": "Calentado", @@ -706,7 +741,7 @@ "create.generic.unit.seconds": "Segundos", "create.generic.unit.minutes": "Minutos", "create.generic.unit.rpm": "RPM", - "create.generic.unit.stress": "su", + "create.generic.unit.stress": "SU(unidades de estrés)", "create.generic.unit.degrees": "°", "create.generic.unit.millibuckets": "%1$smB", "create.generic.clockwise": "En el sentido de las agujas del reloj", @@ -723,11 +758,11 @@ "create.keyinfo.scrolldown": "Simular usar la rueda del ratón hacia abajo (en el mundo)", "create.gui.scrollInput.defaultTitle": "Seleccione una opción:", - "create.gui.scrollInput.scrollToModify": "Usa la rueda del ratón para Modificar", + "create.gui.scrollInput.scrollToModify": "Usa la rueda del ratón para modificar", "create.gui.scrollInput.scrollToAdjustAmount": "Usa la rueda del ratón para ajustar la cantidad", - "create.gui.scrollInput.scrollToSelect": "Usa la rueda del ratón para Seleccionar", - "create.gui.scrollInput.shiftScrollsFaster": "Shift para usar la rueda del ratón más rápido", - "create.gui.toolmenu.focusKey": "Mantenga [%1$s] para enfocar", + "create.gui.scrollInput.scrollToSelect": "Usa la rueda del ratón para seleccionar", + "create.gui.scrollInput.shiftScrollsFaster": "[Mayús izdo.] para usar la rueda del ratón más rápido", + "create.gui.toolmenu.focusKey": "Mantén [%1$s] para enfocar", "create.gui.toolmenu.cycle": "[RUEDA DEL RATÓN] para el ciclo", "create.gui.symmetryWand.mirrorType": "Espejado", "create.gui.symmetryWand.orientation": "Orientación", @@ -739,24 +774,20 @@ "create.orientation.orthogonal": "Ortogonal", "create.orientation.diagonal": "Diagonal", "create.orientation.horizontal": "Horizontal", + "create.orientation.alongZ": "A lo largo de Z", "create.orientation.alongX": "A lo largo de X", - - "create.gui.blockzapper.title": "Blockzapper", - "create.gui.blockzapper.replaceMode": "Modo de sustitución", - "create.gui.blockzapper.searchDiagonal": "Seguir las diagonales", - "create.gui.blockzapper.searchFuzzy": "Ignorar los bordes del material", - "create.gui.blockzapper.range": "Alcance del margen de maniobra", - "create.gui.blockzapper.needsUpgradedAmplifier": "Requiere un amplificador mejorado", - "create.gui.blockzapper.patternSection": "Patrón", - "create.gui.blockzapper.pattern.solid": "Sólido", - "create.gui.blockzapper.pattern.checkered": "Tablero de ajedrez", - "create.gui.blockzapper.pattern.inversecheckered": "Tablero de ajedrez invertido", - "create.gui.blockzapper.pattern.chance25": "25% Roll", - "create.gui.blockzapper.pattern.chance50": "50% Roll", - "create.gui.blockzapper.pattern.chance75": "75% Roll", - "create.gui.terrainzapper.title": "Worldshaper", - "create.gui.terrainzapper.placement": "Colocación", + "create.gui.terrainzapper.title": "Blockzapper", + "create.gui.terrainzapper.searchDiagonal": "Seguir diagonales", + "create.gui.terrainzapper.searchFuzzy": "Ignorar los bordes del material", + "create.gui.terrainzapper.patternSection": "Patrón", + "create.gui.terrainzapper.pattern.solid": "Sólido", + "create.gui.terrainzapper.pattern.checkered": "Tablero de ajedrez", + "create.gui.terrainzapper.pattern.inversecheckered": "Tablero de ajedrez invertido", + "create.gui.terrainzapper.pattern.chance25": "25% Roll", + "create.gui.terrainzapper.pattern.chance50": "50% Roll", + "create.gui.terrainzapper.pattern.chance75": "75% Roll", + "create.gui.terrainzapper.placement": "Ubicación", "create.gui.terrainzapper.placement.merged": "Fusionado", "create.gui.terrainzapper.placement.attached": "Adjuntado", "create.gui.terrainzapper.placement.inserted": "Insertado", @@ -764,35 +795,26 @@ "create.gui.terrainzapper.brush.cuboid": "Cuboide", "create.gui.terrainzapper.brush.sphere": "Esfera", "create.gui.terrainzapper.brush.cylinder": "Cilindro", + "create.gui.terrainzapper.brush.surface": "Superficie", + "create.gui.terrainzapper.brush.cluster": "Grupo", "create.gui.terrainzapper.tool": "Herramienta", "create.gui.terrainzapper.tool.fill": "Llenar", - "create.gui.terrainzapper.tool.place": "Sitio", - "create.gui.terrainzapper.tool.replace": "Sustituir", - "create.gui.terrainzapper.tool.clear": "Borrar", - "create.gui.terrainzapper.tool.overlay": "Superposición", + "create.gui.terrainzapper.tool.place": "Ubicar", + "create.gui.terrainzapper.tool.replace": "Reemplazar", + "create.gui.terrainzapper.tool.clear": "Eliminar", + "create.gui.terrainzapper.tool.overlay": "Superponer", "create.gui.terrainzapper.tool.flatten": "Aplanar", - "create.terrainzapper.shiftRightClickToSet": "Shift+Clic con el botón derecho para seleccionar una forma", - - "create.blockzapper.usingBlock": "Utilizando: %1$s", - "create.blockzapper.componentUpgrades": "Mejoras de componentes:", - "create.blockzapper.component.body": "Cuerpo", - "create.blockzapper.component.amplifier": "Amplificador", - "create.blockzapper.component.accelerator": "Acelerador", - "create.blockzapper.component.retriever": "Recuperador", - "create.blockzapper.component.scope": "Mira telescópica", - "create.blockzapper.componentTier.none": "Ninguno", - "create.blockzapper.componentTier.brass": "Latón", - "create.blockzapper.componentTier.chromatic": "Cromático", - "create.blockzapper.leftClickToSet": "Clic izquierdo en un bloque para establecer el material", - "create.blockzapper.empty": "Sin bloques!", + "create.terrainzapper.shiftRightClickToSet": "[Mayús izdo.] + clic derecho para seleccionar una forma", + "create.terrainzapper.usingBlock": "Usando: %1$s", + "create.terrainzapper.leftClickToSet": "Clic izquierdo a un bloque para establecer el material", "create.minecart_coupling.two_couplings_max": "Las vagonetas no pueden tener más de dos enganches cada una", "create.minecart_coupling.unloaded": "Algunas partes de su tren parecen estar en chunks no cargados", "create.minecart_coupling.no_loops": "Los acoplamientos no pueden formar un bucle", "create.minecart_coupling.removed": "Se han retirado todos los acoplamientos de la vagoneta", "create.minecart_coupling.too_far": "Las vagonetas están demasiado separadas", - + "create.contraptions.movement_mode": "Modo de movimiento", "create.contraptions.movement_mode.move_place": "Colocar siempre al detenerse", "create.contraptions.movement_mode.move_place_returned": "Colocar sólo en la posición inicial", @@ -811,8 +833,8 @@ "create.contraptions.clockwork.hour_first_24": "La manecilla del día primero", "create.logistics.filter": "Filtro", - "create.logistics.recipe_filter": "Filtro de recetas", - "create.logistics.fluid_filter": "Filtro de fluidos", + "create.logistics.recipe_filter": "Filtro para recetas", + "create.logistics.fluid_filter": "Filtro para fluidos", "create.logistics.firstFrequency": "Freq. #1", "create.logistics.secondFrequency": "Freq. #2", "create.logistics.filter.apply": "Filtro aplicado a %1$s.", @@ -823,12 +845,14 @@ "create.gui.goggles.kinetic_stats": "Estadísticas cinéticas:", "create.gui.goggles.at_current_speed": "con la velocidad actual", "create.gui.goggles.pole_length": "Longitud del poste:", + "create.gui.goggles.fluid_container": "Información sobre el contenedor de fluidos:", + "create.gui.goggles.fluid_container.capacity": "Capacidad: ", "create.gui.assembly.exception": "Este artilugio no se pudo montar:", "create.gui.assembly.exception.unmovableBlock": "Bloque inamovible (%4$s) en [%1$s,%2$s,%3$s]", "create.gui.assembly.exception.chunkNotLoaded": "El bloque en [%1$s,%2$s,%3$s] no estaba en un chunk cargado", "create.gui.assembly.exception.structureTooLarge": "Hay demasiados bloques incluídos en el artilugio.\nEl máximo configurado es: %1$s", "create.gui.assembly.exception.tooManyPistonPoles": "Hay demasiadas Pértigas de extensión conectadas a este Pistón.\nEl máximo configurado es: %1$s", - "create.gui.assembly.exception.noPistonPoles": "Faltan pértigas de extensión para el Pistón", + "create.gui.assembly.exception.noPistonPoles": "Faltan pértigas de extensión para el pistón", "create.gui.assembly.exception.not_enough_sails": "La estructura adjunta no incluye suficientes bloques tipo vela: %1$s\nSe requiere un mínimo de %2$s", "create.gui.gauge.info_header": "Información sobre el medidor:", "create.gui.speedometer.title": "Velocidad de rotación", @@ -837,7 +861,7 @@ "create.gui.stressometer.overstressed": "Sobrecargado", "create.gui.stressometer.no_rotation": "Sin rotación", "create.gui.contraptions.not_fast_enough": "Parece que este %1$s no está girando con _suficiente_ velocidad_.", - "create.gui.contraptions.network_overstressed": "Parece que este artilugio está _sobrecargado_. Añade más fuentes o _desacelera_ los componentes con un _impacto_ de alto estrés.", + "create.gui.contraptions.network_overstressed": "Parece que este artilugio está _sobrecargado_. Añade más fuentes o _desacelera_ los componentes con un _impacto de estrés alto_.", "create.gui.adjustable_crate.title": "Caja ajustable", "create.gui.adjustable_crate.storageSpace": "Espacio de almacenamiento", "create.gui.stockpile_switch.title": "Interruptor de acopio", @@ -857,7 +881,7 @@ "create.gui.sequenced_gearshift.instruction.delay.duration": "Duración", "create.gui.sequenced_gearshift.instruction.end.descriptive": "Fin", "create.gui.sequenced_gearshift.instruction.end": "Fin", - "create.gui.sequenced_gearshift.instruction.await.descriptive": "En espera de un Pulso de Redstone", + "create.gui.sequenced_gearshift.instruction.await.descriptive": "En espera de un pulso de redstone", "create.gui.sequenced_gearshift.instruction.await": "En espera", "create.gui.sequenced_gearshift.speed": "Velocidad, Dirección", "create.gui.sequenced_gearshift.speed.forward": "Velocidad de entrada, hacia adelante", @@ -868,7 +892,7 @@ "create.schematicAndQuill.dimensions": "Tamaño del esquema: %1$sx%2$sx%3$s", "create.schematicAndQuill.firstPos": "Primera posición fijada.", "create.schematicAndQuill.secondPos": "Segunda posición fijada.", - "create.schematicAndQuill.noTarget": "Mantenga [Ctrl] para seleccionar los bloques del aire.", + "create.schematicAndQuill.noTarget": "Mantén [Ctrl] para seleccionar los bloques del aire.", "create.schematicAndQuill.abort": "Selección eliminada.", "create.schematicAndQuill.title": "Nombre del esquema:", "create.schematicAndQuill.convert": "Guardar y desplegar inmediatamente", @@ -884,7 +908,7 @@ "create.schematic.rotation.cw270": "En el sentido de las agujas del reloj 270", "create.schematic.mirror": "Espejado", "create.schematic.mirror.none": "Ninguno", - "create.schematic.mirror.frontBack": "Delante-detrás", + "create.schematic.mirror.frontBack": "Delante-Detrás", "create.schematic.mirror.leftRight": "Izquierda-Derecha", "create.schematic.tool.deploy": "Despliegue", "create.schematic.tool.move": "Mover XZ", @@ -893,27 +917,27 @@ "create.schematic.tool.print": "Imprimir", "create.schematic.tool.flip": "Voltear", "create.schematic.tool.deploy.description.0": "Mueve la estructura a un lugar.", - "create.schematic.tool.deploy.description.1": "Haga clic con el botón derecho del ratón en el suelo para colocar.", - "create.schematic.tool.deploy.description.2": "Mantenga [Ctrl] para seleccionar a una distancia fija.", - "create.schematic.tool.deploy.description.3": "[Ctrl]-Rueda del ratón para cambiar la distancia.", + "create.schematic.tool.deploy.description.1": "Haz clic con el botón derecho del ratón en el suelo para colocarla.", + "create.schematic.tool.deploy.description.2": "Mantén [Ctrl] para seleccionar a una distancia fija.", + "create.schematic.tool.deploy.description.3": "[Ctrl] + [RUEDA DEL RATÓN] para cambiar la distancia.", "create.schematic.tool.move.description.0": "Desplaza el esquema horizontalmente.", - "create.schematic.tool.move.description.1": "Apunta al Esquema y [CTRL]-Rueda del ratón para ponerlo.", + "create.schematic.tool.move.description.1": "Apunta al esquema y [Ctrl] + [RUEDA DEL RATÓN] para ponerlo.", "create.schematic.tool.move.description.2": "", "create.schematic.tool.move.description.3": "", "create.schematic.tool.movey.description.0": "Desplaza el esquema verticalmente..", - "create.schematic.tool.movey.description.1": "[CTRL]-Rueda del ratón para moverlo hacia arriba/abajo.", + "create.schematic.tool.movey.description.1": "[Ctrl] + [RUEDA DEL RATÓN] para moverlo hacia arriba/abajo.", "create.schematic.tool.movey.description.2": "", "create.schematic.tool.movey.description.3": "", "create.schematic.tool.rotate.description.0": "Gira el esquema alrededor de su centro.", - "create.schematic.tool.rotate.description.1": "[CTRL]-Rueda del ratón para girar 90 grados.", + "create.schematic.tool.rotate.description.1": "[Ctrl] + [RUEDA DEL RATÓN] para girar 90 grados.", "create.schematic.tool.rotate.description.2": "", "create.schematic.tool.rotate.description.3": "", "create.schematic.tool.print.description.0": "Sitúa instantáneamente la estructura en el mundo.", "create.schematic.tool.print.description.1": "[Clic derecho] para confirmar la colocación en el lugar actual.", "create.schematic.tool.print.description.2": "Esta herramienta es sólo para el Modo Creativo.", "create.schematic.tool.print.description.3": "", - "create.schematic.tool.flip.description.0": "Voltea el Esquema a lo largo de la cara que seleccione.", - "create.schematic.tool.flip.description.1": "Apunta al esquema y [CTRL]-Rueda del ratón para voltearlo.", + "create.schematic.tool.flip.description.0": "Voltea el esquema a lo largo de la cara que seleccione.", + "create.schematic.tool.flip.description.1": "Apunta al esquema y [Ctrl] + [RUEDA DEL RATÓN] para voltearlo.", "create.schematic.tool.flip.description.2": "", "create.schematic.tool.flip.description.3": "", @@ -927,8 +951,8 @@ "create.gui.schematicTable.availableSchematics": "Esquemas disponibles", "create.gui.schematicTable.noSchematics": "No hay esquemas guardados", "create.gui.schematicTable.uploading": "Subiendo...", - "create.gui.schematicTable.finished": "Subida finalizada!", - "create.gui.schematicannon.title": "Schematicannon", + "create.gui.schematicTable.finished": "¡Subida finalizada!", + "create.gui.schematicannon.title": "Cañón de esquemas", "create.gui.schematicannon.listPrinter": "Lista de control de la impresora", "create.gui.schematicannon.gunpowderLevel": "Pólvora %1$s%%", "create.gui.schematicannon.shotsRemaining": "Disparos restantes: %1$s", @@ -946,16 +970,16 @@ "create.gui.schematicannon.slot.listPrinter": "Coloque los libros aquí para imprimir una lista de comprobación para su esquema", "create.gui.schematicannon.slot.schematic": "Añada su esquema aquí. Asegúrese de que se despliega en un lugar específico.", "create.gui.schematicannon.option.skipMissing.description": "Si el cañón no encuentra un bloque necesario para su colocación, continuará en la siguiente ubicación.", - "create.gui.schematicannon.option.skipTileEntities.description": "El cañón evitará reemplazar los bloques que contienen datos, como los Cofres.", + "create.gui.schematicannon.option.skipTileEntities.description": "El cañón evitará reemplazar los bloques que contienen datos, como los cofres.", "create.gui.schematicannon.option.dontReplaceSolid.description": "El cañón nunca sustituirá ningún bloque sólido en su zona de trabajo, sólo los no sólidos y el aire.", "create.gui.schematicannon.option.replaceWithSolid.description": "El cañón sólo reemplazará los bloques sólidos en su área de trabajo si el esquema contiene un bloque sólido en la ubicación.", "create.gui.schematicannon.option.replaceWithAny.description": "El cañón reemplazará los bloques sólidos en su área de trabajo si el esquema contiene algún bloque en la ubicación.", - "create.gui.schematicannon.option.replaceWithEmpty.description": "El cañón eliminará todos los bloques de su zona de trabajo, incluidos los sustituidos por Aire.", + "create.gui.schematicannon.option.replaceWithEmpty.description": "El cañón eliminará todos los bloques de su zona de trabajo, incluidos los sustituidos por aire.", "create.schematicannon.status.idle": "Inactivo", "create.schematicannon.status.ready": "Listo", "create.schematicannon.status.running": "Funcionando", - "create.schematicannon.status.finished": "Finished", + "create.schematicannon.status.finished": "Finalizado", "create.schematicannon.status.paused": "Pausado", "create.schematicannon.status.stopped": "Detenido", "create.schematicannon.status.noGunpowder": "Sin pólvora", @@ -974,9 +998,9 @@ "create.materialChecklist.blocksNotLoaded": "* Descargo de Responsabilidad *\n\nLa lista de materiales puede ser inexacta debido a que no se han cargado los chunks pertinentes.", "create.gui.filter.deny_list": "Lista de denegados", - "create.gui.filter.deny_list.description": "Los elementos pasan si NO coinciden con ninguno de los anteriores. Una lista de denegación vacía acepta todo.", + "create.gui.filter.deny_list.description": "Los objetos pasan si NO coinciden con ninguno de los anteriores. Una lista de denegación vacía acepta todo.", "create.gui.filter.allow_list": "Lista de permitidos", - "create.gui.filter.allow_list.description": "Los elementos pasan si coinciden con alguno de los anteriores. Una lista de permitidos vacía rechaza todo.", + "create.gui.filter.allow_list.description": "Los objetos pasan si coinciden con alguno de los anteriores. Una lista de permitidos vacía rechaza todo.", "create.gui.filter.respect_data": "Respetar datos", "create.gui.filter.respect_data.description": "Los objetos sólo coinciden si su durabilidad, encantos y otros atributos también coinciden.", "create.gui.filter.ignore_data": "Ignorar datos", @@ -1016,6 +1040,10 @@ "create.item_attributes.added_by.inverted": "no fue añadida por %1$s", "create.item_attributes.has_enchant": "está encantado con %1$s", "create.item_attributes.has_enchant.inverted": "no está encantado con %1$s", + "create.item_attributes.color": "Está teñido %1$s", + "create.item_attributes.color.inverted": "No está teñido %1$s", + "create.item_attributes.max_enchanted": "está encantado en el nivel máximo", + "create.item_attributes.max_enchanted.inverted": "no está encantado en el nivel máximo", "create.item_attributes.has_fluid": "contiene %1$s", "create.item_attributes.has_fluid.inverted": "no contiene %1$s", "create.item_attributes.has_name": "tiene el nombre personalizado %1$s", @@ -1044,16 +1072,16 @@ "create.gui.attribute_filter.add_attribute": "Añadir atributo a la lista", "create.gui.attribute_filter.add_inverted_attribute": "Añadir atributo invertido a la Lista", "create.gui.attribute_filter.allow_list_disjunctive": "Lista de permitidos (Cualquiera)", - "create.gui.attribute_filter.allow_list_disjunctive.description": "Los elementos pasan si tienen alguno de los atributos seleccionados", + "create.gui.attribute_filter.allow_list_disjunctive.description": "Los objetos pasan si tienen alguno de los atributos seleccionados", "create.gui.attribute_filter.allow_list_conjunctive": "Lista de permitidos (Todos)", - "create.gui.attribute_filter.allow_list_conjunctive.description": "Los elementos pasan sólo si tienen TODOS los atributos seleccionados", + "create.gui.attribute_filter.allow_list_conjunctive.description": "Los objetos pasan sólo si tienen TODOS los atributos seleccionados", "create.gui.attribute_filter.deny_list": "Lista de denegados", - "create.gui.attribute_filter.deny_list.description": "Los elementos pasan si NO tienen ninguno de los atributos seleccionados", + "create.gui.attribute_filter.deny_list.description": "Los objetos pasan si NO tienen ninguno de los atributos seleccionados", "create.gui.attribute_filter.add_reference_item": "Añadir elemento de referencia", - "create.tooltip.holdKey": "Mantener [%1$s]", - "create.tooltip.holdKeyOrKey": "Mantener [%1$s] o [%2$s]", - "create.tooltip.keyShift": "Shift", + "create.tooltip.holdForDescription": "Mantén [%1$s] para mas información", + "create.tooltip.holdForControls": "Mantén [%1$s] para ver los controles", + "create.tooltip.keyShift": "Mayús izdo.", "create.tooltip.keyCtrl": "Ctrl", "create.tooltip.speedRequirement": "Requisitos de velocidad: %1$s", "create.tooltip.speedRequirement.none": "Ninguno", @@ -1068,20 +1096,25 @@ "create.tooltip.capacityProvided.low": "Pequeña", "create.tooltip.capacityProvided.medium": "Media", "create.tooltip.capacityProvided.high": "Grande", - "create.tooltip.capacityProvided.asGenerator": "(Como generador)", - "create.tooltip.generationSpeed": "Genera en %1$s %2$s", + "create.tooltip.generationSpeed": "Generada en %1$s %2$s", "create.tooltip.analogStrength": "Fuerza analógica: %1$s/15", - "create.mechanical_arm.extract_from": "Extraer elementos de %1$s", - "create.mechanical_arm.deposit_to": "Depositar elementos en %1$s", + "create.mechanical_arm.extract_from": "Extraer objetos de %1$s", + "create.mechanical_arm.deposit_to": "Depositar objetos en %1$s", "create.mechanical_arm.summary": "El brazo mecánico tiene %1$s entrada(s) y %2$s salida(s)", "create.mechanical_arm.points_outside_range": "%1$s punto(s) de interacción seleccionado(s) eliminado(s) debido a las limitaciones de rango", + "create.weighted_ejector.target_set": "Objetivo seleccionado", + "create.weighted_ejector.target_not_valid": "Expulsión al bloque adyacente (el objetivo no era válido)", + "create.weighted_ejector.no_target": "Expulsión al bloque adyacente (no se ha seleccionado ningún objetivo)", + "create.weighted_ejector.targeting": "Expulsión a [%1$s,%2$s,%3$s]", + "create.weighted_ejector.stack_size": "Tamaño de la pila expulsada", + "create.logistics.when_multiple_outputs_available": "Cuando hay múltiples salidas disponibles", "create.mechanical_arm.selection_mode.round_robin": "Round Robin", "create.mechanical_arm.selection_mode.forced_round_robin": "Round Robin forzado", - "create.mechanical_arm.selection_mode.prefer_first": "Preferir el primer objetivo", + "create.mechanical_arm.selection_mode.prefer_first": "Preferir el primero", "create.tunnel.selection_mode.split": "División", "create.tunnel.selection_mode.forced_split": "División forzada", @@ -1092,8 +1125,8 @@ "create.tunnel.selection_mode.synchronize": "Sincronizar entradas", "create.tooltip.chute.header": "Información del ducto", - "create.tooltip.chute.items_move_down": "Los elementos se mueven hacia abajo", - "create.tooltip.chute.items_move_up": "Los elementos se mueven hacia arriba", + "create.tooltip.chute.items_move_down": "Los objetos se mueven hacia abajo", + "create.tooltip.chute.items_move_up": "Los objetos se mueven hacia arriba", "create.tooltip.chute.no_fans_attached": "No hay ventiladores adjuntos", "create.tooltip.chute.fans_push_up": "Los ventiladores empujan desde abajo", "create.tooltip.chute.fans_push_down": "Los ventiladores empujan desde arriba", @@ -1101,19 +1134,29 @@ "create.tooltip.chute.fans_pull_down": "Los ventiladores tiran desde abajo", "create.tooltip.chute.contains": "Contiene: %1$s x%2$s", - "create.hint.hose_pulley.title": "Suministro sin fondo", - "create.hint.hose_pulley": "La masa de fluido objetivo se considera infinita", - "create.hint.mechanical_arm_no_targets.title": "No hay objetivos", - "create.hint.mechanical_arm_no_targets": "Parece que a este _brazo mecánico_ no se le ha asignado ningún _objetivo._ Selecciona correas, depósitos, embudos y otros bloques haciendo _clic derecho_ sobre ellos mientras _sostienes_ el _brazo mecánico_ en tu _mano_.", - "create.hint.horizontal_funnel.title": "Embudos horizontales", - "create.hint.horizontal_funnel": "No puede transferir entre inventarios _directamente_. Intenta pasar una _correa_ o un _depósito_ por debajo de tu embudo para extraer artículos de los inventarios", - "create.hint.upward_funnel.title": "Embudos hacia arriba", - "create.hint.upward_funnel": "sólo pueden transferir objetos insertados por _brazos_, y _ductos_ impulsados por ventilador, o elementos _lanzados_ hacia ellos. Intenta construir algunos _ductos_ si quieres mover tus objetos _verticalmente_", - "create.hint.empty_bearing.title": "Rodamiento de reloj", - "create.hint.empty_bearing": "_Haz clic con el botón derecho del ratón_ en el rodamiento con la _mano vacía_ para _adherir_ la estructura que acabas de construir delante de él", - "create.hint.full_deployer.title": "Desbordamiento de elementos del desplegador", - "create.hint.full_deployer": "Parece que este _Desplegador_ contiene _elementos_ en exceso que necesitan ser _extraídos._ Usa un _tolva,_embudo_ u otro medio para liberarlo de su desbordamiento.", + "create.linked_controller.bind_mode": "Modo de enlace activo", + "create.linked_controller.press_keybind": "Presiona %1$s, %2$s, %3$s, %4$s, %5$s o %6$s, para vincular esta frecuencia a la tecla correspondiente", + "create.linked_controller.key_bound": "Frecuencia ligada a %1$s", + "create.linked_controller.frequency_slot_1": "Enlace de teclas: %1$s, Freq. #1", + "create.linked_controller.frequency_slot_2": "Enlace de teclas: %1$s, Freq. #2", + "create.crafting_blueprint.crafting_slot": "Ranura para ingredientes", + "create.crafting_blueprint.filter_items_viable": "Los objetos del filtro avanzado son viables", + "create.crafting_blueprint.display_slot": "Ranura de pantalla", + "create.crafting_blueprint.inferred": "A partir de la receta", + "create.crafting_blueprint.manually_assigned": "Asignado manualmente", + "create.crafting_blueprint.secondary_display_slot": "Ranura de pantalla secundaria", + "create.crafting_blueprint.optional": "Opcional", + + "create.hint.hose_pulley.title": "Suministro ilimitado", + "create.hint.hose_pulley": "La masa de fluido objetivo se considera infinita.", + "create.hint.mechanical_arm_no_targets.title": "Sin objetivos", + "create.hint.mechanical_arm_no_targets": "Parece que a este _brazo mecánico_ no se le ha asignado ningún objetivo. Selecciona _correas_, _depósitos_, _embudos_ y otros bloques haciendo clic derecho sobre ellos mientras _sostienes_ el _brazo mecánico_ en tu mano..", + "create.hint.empty_bearing.title": "Actualización del rodamiento", + "create.hint.empty_bearing": "Haz clic derecho sobre el rodamiento con la _mano vacía_ para _adjuntar_ la estructura que acabas de construir delante de él.", + "create.hint.full_deployer.title": "Exceso de objetos en el desplegador", + "create.hint.full_deployer": "Parece que este _desplegador_ contiene _exceso_ de objetos que necesitan ser _extraídos._ Usa una _tolva_, _embudo_ u otro medio para liberarlo de su excedente.", + "create.gui.config.overlay1": "Hola :)", "create.gui.config.overlay2": "Esta es una muestra de la superposición", "create.gui.config.overlay3": "Haga clic o arrastre con el ratón", @@ -1127,20 +1170,50 @@ "create.command.killTPSCommand.status.slowed_by.0": "[Crear]: El tick del servidor está actualmente ralentizado en %s ms :o", "create.command.killTPSCommand.status.slowed_by.1": "[Crear]: El tick del servidor está ralentizado en %s ms ahora >:)", "create.command.killTPSCommand.status.slowed_by.2": "[Create]: El tick del servidor ha vuelto a su velocidad normal :D", - "create.command.killTPSCommand.status.usage.0": "[Create]: usar /killtps stop para que el servidor vuelva a la velocidad normal", - "create.command.killTPSCommand.status.usage.1": "[Create]: usar /killtps start para ralentizar artificialmente el tick del servidor", + "create.command.killTPSCommand.status.usage.0": "[Create]: usa /killtps stop para que el servidor vuelva a la velocidad normal", + "create.command.killTPSCommand.status.usage.1": "[Create]: usa /killtps start para ralentizar artificialmente el tick del servidor", "create.command.killTPSCommand.argument.tickTime": "tickTime", - "create.subtitle.schematicannon_launch_block": "Disparos de Schematicannon", - "create.subtitle.schematicannon_finish": "Acabados de Schematicannon", - "create.subtitle.slime_added": "Slime aplastado", - "create.subtitle.mechanical_press_activation": "La Prensa Mecánica se activa", - "create.subtitle.mechanical_press_item_break": "Clanks de metal", - "create.subtitle.blockzapper_place": "Los bloques se colocan en su sitio", - "create.subtitle.blockzapper_confirm": "Ding afirmativo", - "create.subtitle.blockzapper_deny": "Boop declinante", - "create.subtitle.block_funnel_eat": "CHOMPS del embudo", - "create.subtitle.blaze_munch": "Blaze mastica felizmente", + "create.contraption.minecart_contraption_too_big": "Este artilugio de vagoneta parece demasiado grande para recogerlo", + "create.contraption.minecart_contraption_illegal_pickup": "Una fuerza mística está atando este artilugio de vagoneta al mundo", + + + "_": "->------------------------] Subtitles [------------------------<-", + + "create.subtitle.contraption_disassemble": "", + "create.subtitle.peculiar_bell_use": "", + "create.subtitle.mixing": "", + "create.subtitle.mechanical_press_activation_belt": "", + "create.subtitle.fwoomp": "", + "create.subtitle.worldshaper_place": "", + "create.subtitle.depot_slide": "", + "create.subtitle.saw_activate_stone": "", + "create.subtitle.blaze_munch": "", + "create.subtitle.funnel_flap": "", + "create.subtitle.schematicannon_finish": "", + "create.subtitle.scroll_value": "", + "create.subtitle.crafter_craft": "", + "create.subtitle.controller_put": "", + "create.subtitle.cranking": "", + "create.subtitle.wrench_remove": "", + "create.subtitle.cogs": "", + "create.subtitle.slime_added": "", + "create.subtitle.wrench_rotate": "", + "create.subtitle.potato_hit": "", + "create.subtitle.saw_activate_wood": "", + "create.subtitle.deployer_polish": "", + "create.subtitle.deny": "", + "create.subtitle.controller_click": "", + "create.subtitle.schematicannon_launch_block": "", + "create.subtitle.copper_armor_equip": "", + "create.subtitle.cursed_bell_use": "", + "create.subtitle.cursed_bell_convert": "", + "create.subtitle.controller_take": "Lectern empties", + "create.subtitle.mechanical_press_activation": "", + "create.subtitle.contraption_assemble": "", + "create.subtitle.crafter_click": "", + "create.subtitle.depot_plop": "", + "create.subtitle.confirm": "", "_": "->------------------------] Item Descriptions [------------------------<-", @@ -1151,654 +1224,1035 @@ "item.create.example_item.tooltip.behaviour1": "Entonces este elemento hace esto. (los comportamientos se muestran en el turno)", "item.create.example_item.tooltip.condition2": "Y cuando esto", "item.create.example_item.tooltip.behaviour2": "Puedes añadir tantos comportamientos como quieras", - "item.create.example_item.tooltip.control1": "Cuando se pulsa Ctrl", + "item.create.example_item.tooltip.control1": "Cuando se pulsa [Ctrl]", "item.create.example_item.tooltip.action1": "Se muestran estos controles", - "block.create.andesite_encased_shaft.tooltip": "EJE REVESTIDO DE ANDESITA", - "block.create.andesite_encased_shaft.tooltip.summary": "Elemento _sólo para el modo creativo_. Reviste los _ejes_ en el mundo usando _revestimiento de andesita_. Los bloques de revestimiento _no se consumirán_.", - - "block.create.brass_encased_shaft.tooltip": "EJE REVESTIDO DE LATÓN", - "block.create.brass_encased_shaft.tooltip.summary": "Elemento _sólo para el modo creativo_. Reviste los _ejes_ en el mundo usando _revestimiento de latón_. Los bloques de revestimiento _no se consumirán_.", - "block.create.wooden_bracket.tooltip": "SOPORTE DE MADERA PARA EJES", - "block.create.wooden_bracket.tooltip.summary": "Decora tus _Ejes_, _Ruedas dentadas_ y _Ductos_ con un refuerzo acogedor y de madera.", + "block.create.wooden_bracket.tooltip.summary": "Decora tus _ejes_, _engranajes_ y _ductos_ con un acogedor refuerzo de madera.", "block.create.metal_bracket.tooltip": "SOPORTE DE METAL PARA EJES", - "block.create.metal_bracket.tooltip.summary": "Decora tus _Ejes_, _Ruedas dentadas_ y _Ductos_ con un poco de refuerzo industrial robusto.", - - "block.create.andesite_casing.tooltip": "REVESTIDOR DE ANDESITA", - "block.create.andesite_casing.tooltip.summary": "Máquina de revestimiento simple con una variedad de usos. Seguro para la decoración. Puede utilizarse para _revestir ejes_ y _cintas._", - - "block.create.andesite_funnel.tooltip": "EMBUDO DE ANDESITA", - "block.create.andesite_funnel.tooltip.summary": "Un componente de transferencia de elementos en general, que hace la transición de éstos entre los medios de transporte. Se puede controlar con una _señal de Redstone_.", - "block.create.andesite_funnel.tooltip.condition1": "Comportamiento general", - "block.create.andesite_funnel.tooltip.behaviour1": "La cara _abierta_ _recogerá los objetos molidos_ en el espacio del bloque que tiene delante y los _insertará_ en cualquier contenedor del lado opuesto del embudo", - "block.create.andesite_funnel.tooltip.condition2": "Cuando se montan en cintas, depósitos y similares", - "block.create.andesite_funnel.tooltip.behaviour2": "_Recoge_ o _Coloca_ los elementos en el componente montado, desde o hacia el inventario _detrás_ de sí mismo. Siempre que el embudo tenga una direccionalidad específica, puede invertirse utilizando una Llave.", - "block.create.andesite_funnel.tooltip.condition3": "Cuando se encuentra verticalmente entre dos inventarios", - "block.create.andesite_funnel.tooltip.behaviour3": "Transferirá los artículos hacia abajo, como una tolva sin búfer.", - - "block.create.andesite_tunnel.tooltip": "TÚNEL DE ANDESITA", - "block.create.andesite_tunnel.tooltip.summary": "¡Una cubierta protectora para sus _cintas_!. El _Túnel de Andesita_ puede separar un elemento de una pila cuando se coloca otra cinta o depósito al lado de la cinta principal.", - "block.create.andesite_tunnel.tooltip.control1": "Click derecho con la Llave Inglesa en el lateral", - "block.create.andesite_tunnel.tooltip.action1": "_Ajusta las persianas de las ventanas_ si el túnel tiene una ventana en esa cara.", - - "block.create.brass_funnel.tooltip": "EMBUDO DE LATÓN", - "block.create.brass_funnel.tooltip.summary": "Un componente de transferencia de elementos en general, que hace la transición de éstos entre los medios de transporte. Se puede controlar con una _señal de Redstone_. Viene con un práctico _filtro_.", - "block.create.brass_funnel.tooltip.condition1": "Comportamiento General", - "block.create.brass_funnel.tooltip.behaviour1": "La cara _abierta_ _recogerá los objetos molidos_ en el espacio del bloque que tiene delante y los _insertará_ en cualquier contenedor del lado opuesto del embudo.", - "block.create.brass_funnel.tooltip.condition2": "Cuando se montan en cintas, depósitos y similares", - "block.create.brass_funnel.tooltip.behaviour2": "_Recoge_ o _Coloca_ los elementos en el componente montado, desde o hacia el inventario _detrás_ de sí mismo. Siempre que el embudo tenga una direccionalidad específica, puede invertirse utilizando una Llave Inglesa.", - "block.create.brass_funnel.tooltip.condition3": "Cuando se encuentra verticalmente entre dos inventarios", - "block.create.brass_funnel.tooltip.behaviour3": "Transfiere los artículos hacia abajo, como una tolva sin búfer.", - - "block.create.brass_tunnel.tooltip": "TÚNEL DE LATÓN", - "block.create.brass_tunnel.tooltip.summary": "Una cubierta protectora elegante para sus _cintas_. Los _Túneles de latón_ también vienen con una serie de opciones de _Filtración_ y _División_ para sus artículos.", - "block.create.brass_tunnel.tooltip.condition1": "Cuando se colocan uno al lado del otro", - "block.create.brass_tunnel.tooltip.behaviour1": "Los túneles de latón se conectan entre sí y permiten redirigir el contenido de una cinta a otra.", - "block.create.brass_tunnel.tooltip.condition2": "Filtrado", - "block.create.brass_tunnel.tooltip.behaviour2": "Los _Túneles de latón_ vienen con filtros tanto para la _Entrada_ como para la _Salida_. Si un _Elemento_ no está permitido desde la salida filtrada de un _Túnel_ será transferido a la salida de un _Túnel_ conectado.", - "block.create.brass_tunnel.tooltip.condition3": "Dividiendo", - "block.create.brass_tunnel.tooltip.behaviour3": "Los _Túneles de latón_ pueden ser configurados para cambiar el método en el que los _Elementos_ son ordenados en los _Túneles_ conectados.", - "block.create.brass_tunnel.tooltip.control1": "Cuando haces click derecho con una Llave Inglesa", - "block.create.brass_tunnel.tooltip.action1": "_Ajusta las persianas de las ventanas_ si el túnel tiene una ventana en esa cara.", - "block.create.brass_tunnel.tooltip.control2": "Usa la rueda del ratón con la Llave Inglesa en la parte superior", - "block.create.brass_tunnel.tooltip.action2": "Cambiar el método de división de los _Túneles_ conectados.", - - "block.create.copper_casing.tooltip": "REVESTIDOR DE COBRE", - "block.create.copper_casing.tooltip.summary": "Robusta máquina de revestimientos con una gran variedad de usos. Seguro para la decoración.", - "block.create.copper_casing.tooltip.condition1": "Cuando se utiliza en una tubería de fluidos", - "block.create.copper_casing.tooltip.behaviour1": "_Reviste_ la _Tubería de fluidos_ con _Revestimiento de cobre_. Las tuberías de fluidos revestidas _bloquean sus conexiones_ en su lugar, dejando de reaccionar a los cambios en las tuberías vecinas.", - - "block.create.encased_fluid_pipe.tooltip": "TUBO DE FLUIDOS REFORZADO", - "block.create.encased_fluid_pipe.tooltip.summary": "Un tubo de fluidos reforzado con más cobre.", - - "block.create.copper_valve_handle.tooltip": "ASA DE VÁLVULA DE COBRE", - "block.create.copper_valve_handle.tooltip.summary": "Una precisa _fuente_ de _fuerza de rotación_ que requiere la interacción de los jugadores. ¡Ten cuidado de no agotarte!", - "block.create.copper_valve_handle.tooltip.condition1": "Cuando se utiliza", - "block.create.copper_valve_handle.tooltip.behaviour1": "Proporciona _Fuerza de rotación_ a un artilugio acoplado. _Shift_ para _invertir_ la rotación.", + "block.create.metal_bracket.tooltip.summary": "Decora tus _ejes_, _engranajes_ y _ductos_ con un poco de refuerzo industrial robusto.", "block.create.seat.tooltip": "ASIENTO", - "block.create.seat.tooltip.summary": "¡Siéntate y disfruta del viaje! Anclará a un jugador en un _contrafuerte_ en movimiento. También es ideal para los muebles estáticos. Viene en una variedad de colores.", - "block.create.seat.tooltip.condition1": "Click derecho en el asiento", - "block.create.seat.tooltip.behaviour1": "Sienta al jugador en el _Asiento_. Pulsa shift izquierdo para dejar el _Asiento_.", - - "block.create.chute.tooltip": "DUCTO", - "block.create.chute.tooltip.summary": "_Recoge_ y _Transporta_ elementos en vertical o en diagonal. Puede tanto coger como colocar objetos en _contenedores de objetos_. También puede interactuar con los ductos desde el lateral utilizando _tolvas_ o _embudos montados_.", - "block.create.chute.tooltip.condition1": "Cuando se alimenta con un ventilador", - "block.create.chute.tooltip.behaviour1": "Los ductos accionados por ventilador pueden transportar _elementos_ hacia arriba, y aspirar _elementos_ de los _depósitos_ y de las _cintas_.", - - "block.create.depot.tooltip": "DEPÓSITO", - "block.create.depot.tooltip.summary": "Un lugar práctico para colocar sus _elementos_. Proporciona un punto de interacción para varias máquinas", - "block.create.depot.tooltip.condition1": "Click derecho en el depósito", - "block.create.depot.tooltip.behaviour1": "Coloca o toma un _Elemento_ del _Depósito_. Los _Bloques_ y los _Artilugios_ que interactúan con una _cinta_ también funcionan en un _Depósito_.", + "block.create.seat.tooltip.summary": "¡Siéntate y disfruta del viaje! Anclará a un jugador en un artilugio en movimiento. También es ideal para muebles estáticos. Viene en una variedad de colores.", + "block.create.seat.tooltip.condition1": "Cuando se hace clic derecho en el asiento", + "block.create.seat.tooltip.behaviour1": "Sienta al jugador en el _asiento_. Pulsa [Mayús izdo.] para dejar el asiento.", "item.create.blaze_cake.tooltip": "PASTEL DE BLAZE", - "item.create.blaze_cake.tooltip.summary": "Un delicioso regalo para sus esforzados _Quemadores de blaze_. Los pone en marcha!.", - - "item.create.empty_blaze_burner.tooltip": "QUEMADOR DE BLAZE VACÍO", - "item.create.empty_blaze_burner.tooltip.summary": "Un pequeño hogar de hierro para tus amigos fogosos. Estoy seguro de que podrías darles un buen uso.", - "item.create.empty_blaze_burner.tooltip.condition1": "Cuando se utiliza en un Blaze o en un generador de Blaze", - "item.create.empty_blaze_burner.tooltip.behaviour1": "_Captura_ un Blaze en el elemento", - - "block.create.fluid_pipe.tooltip": "TUBERÍA DE FLUIDOS DE COBRE", - "block.create.fluid_pipe.tooltip.summary": "Se utiliza para mover _fluidos_. Necesita una _bomba mecánica_ para que el _fluido_ se mueva.", - "block.create.fluid_pipe.tooltip.condition1": "Transferencia de fluidos", - "block.create.fluid_pipe.tooltip.behaviour1": "Puede conectarse a _contenedores de fluidos_ como _depósitos_ o _cuencas_. Los extremos expuestos de los _tubos_ también pueden drenar o colocar bloques de fluido. ¡Cuidado con las fugas!", - "block.create.fluid_pipe.tooltip.control1": "Cuando haces clic derecho con una Llave Inglesa", - "block.create.fluid_pipe.tooltip.action1": "Coloca una ventana en la tubería si está disponible", - - "block.create.hose_pulley.tooltip": "POLEA DE MANGUERA", - "block.create.hose_pulley.tooltip.summary": "Se utiliza para _colocar_ o _drenar_ grandes _cuerpos fluidos_ en el mundo", - "block.create.hose_pulley.tooltip.condition1": "Cuando se alimenta por cinética", - "block.create.hose_pulley.tooltip.behaviour1": "_Sube_ o _baja_ la manguera, la ubicación de la manguera determina hasta qué _altura de extracción_ o _llenado_ actuará.", - "block.create.hose_pulley.tooltip.condition2": "Cuando los fluidos se extraen de la polea", - "block.create.hose_pulley.tooltip.behaviour2": "Comienza a _tomar bloques de fluidos_ del cuerpo al que se bajó el extremo de la manguera. Los cuerpos muy _grandes_ de fluidos se _considerarán infinitos_.", - "block.create.hose_pulley.tooltip.condition3": "Cuando los fluidos son empujados a la polea", - "block.create.hose_pulley.tooltip.behaviour3": "Comienza a _llenar de fluido_ el mundo hasta la _altura_ de los extremos de la _manguera_", - - "block.create.fluid_tank.tooltip": "TANQUE DE FLUIDOS", - "block.create.fluid_tank.tooltip.summary": "Almacena todos tus _líquidos_ favoritos. Escala en anchura y altura.", - "block.create.fluid_tank.tooltip.condition1": "Cuando se hace click derecho con la Llave Inglesa", - "block.create.fluid_tank.tooltip.behaviour1": "Cambia la ventana opcional", - - "block.create.creative_fluid_tank.tooltip": "TANQUE DE FLUIDOS CREATIVO", - "block.create.creative_fluid_tank.tooltip.summary": "Este _Tanque de Fluidos_ permite la replicación infinita de cualquier Fluido. Escala en anchura y altura.", - "block.create.creative_fluid_tank.tooltip.condition1": "Cuando hay fluido en el tanque", - "block.create.creative_fluid_tank.tooltip.behaviour1": "Todo lo que se _extraiga_ de este tanque proporcionará un _suministro ilimitado_ del fluido especificado. Los fluidos _insertados_ en este tanque serán _evitados._", - "block.create.creative_fluid_tank.tooltip.condition2": "Cuando se hace clic derecho con una Llave Inglesa", - "block.create.creative_fluid_tank.tooltip.behaviour2": "Cambia la ventana opcional", - - "block.create.fluid_valve.tooltip": "VALVULA DE FLUIDOS", - "block.create.fluid_valve.tooltip.summary": "Detiene el flujo de un fluido por una tubería", - "block.create.fluid_valve.tooltip.condition1": "Flujo controlable", - "block.create.fluid_valve.tooltip.behaviour1": "La _fuerza de rotación_ aplicada obligará a la _válvula_ a cerrarse, cesando el flujo de _fluidos_. Invierta la dirección de la _fuerza de rotación_ para volver a abrir la válvula", - - "block.create.mechanical_pump.tooltip": "BOMBA MECÁNICA", - "block.create.mechanical_pump.tooltip.summary": "Toma la _fuerza de rotación_ y la utiliza para mover el _fluido_ a lo largo de un _tubo_. Tiene un rango máximo de efecto en ambas direcciones. (16 bloques por defecto)", - "block.create.mechanical_pump.tooltip.condition1": "Flujo de fluido", - "block.create.mechanical_pump.tooltip.behaviour1": "La _fuerza de rotación_ aplicada crea una presión que obliga al _fluido_ a pasar por la red de _tuberías_. Invierte la dirección de la _fuerza de rotación_ para cambiar la dirección en la que fluye el _fluido_", - "block.create.mechanical_pump.tooltip.control1": "Pulsando con el botón derecho del ratón con la Llave Inglesa", - "block.create.mechanical_pump.tooltip.action1": "Invierte la dirección de la _bomba_, cambiando la dirección por defecto del flujo", - - "block.create.smart_fluid_pipe.tooltip": "TUBERÍA DE FLUIDOS INTELIGENTE", - "block.create.smart_fluid_pipe.tooltip.summary": "Una _tubería de fluidos_ con un filtro. Puede especificar qué _fluidos_ pasan por ella", - "block.create.smart_fluid_pipe.tooltip.condition1": "Cuando se introducen fluidos en ella", - "block.create.smart_fluid_pipe.tooltip.behaviour1": "Las tuberías inteligentes que reciban fluidos que no coincidan con su filtro bloquearán el flujo", - "block.create.smart_fluid_pipe.tooltip.condition2": "Cuando es adyacente a un contenedor de fluido", - "block.create.smart_fluid_pipe.tooltip.behaviour2": "Las tuberías inteligentes que _inicien_ un _flujo_ desde cualquier contenedor sólo extraerán fluidos que _coincidan_ con su _filtro._", - - "block.create.spout.tooltip": "SURTIDOR", - "block.create.spout.tooltip.summary": "Un inyector para rellenar tus elementos de _fluidos._", - "block.create.spout.tooltip.condition1": "Transferencia de fluidos", - "block.create.spout.tooltip.behaviour1": "Cuando se coloca un _contenedor de fluidos_ como un _cubo_ o una _botella_ debajo, el caño intentará rellenarlo con su propio _fluido_ almacenado", - "block.create.spout.tooltip.condition2": "Automatización de fluidos", - "block.create.spout.tooltip.behaviour2": "El caño colocado encima de una _cinta_ o _depósito_ reaccionará automáticamente con un contenedor de fluidos_ que pase por debajo", - - "block.create.item_drain.tooltip": "DRENADOR DE ELEMENTOS", - "block.create.item_drain.tooltip.summary": "Un depósito rallado para vaciar tus _artículos fluidos._", - "block.create.item_drain.tooltip.condition1": "Transferencia de fluidos", - "block.create.item_drain.tooltip.behaviour1": "Cuando un _contenedor de fluidos_, como un _cubo_ o una _botella_, se inserta desde el lateral, el desagüe intentará vaciarlo en su propio _contenedor de fluidos_. El artículo será entonces expulsado por el lado opuesto", - - "block.create.mechanical_arm.tooltip": "BRAZO MECÁNICO", - "block.create.mechanical_arm.tooltip.summary": "Artilugio avanzado para reubicar _elementos_", - "block.create.mechanical_arm.tooltip.condition1": "Transferencia de elementos", - "block.create.mechanical_arm.tooltip.behaviour1": "Puede tomar o colocar objetos en cualquier _inventario_ accesible_, como _Cintas_, _Depósitos_, _Embudos_ y _Autoensambladores_", - "block.create.mechanical_arm.tooltip.control1": "Mientras está en la mano", - "block.create.mechanical_arm.tooltip.action1": "Haz clic con el botón derecho en un _objeto accesible del inventario_ para establecerlo como _fuente_ para el _brazo mecánico_. Haz clic con el botón derecho del ratón dos veces para establecerlo como _destino_", - "block.create.mechanical_arm.tooltip.control2": "Usa la rueda del ratón con la Llave Inglesa", - "block.create.mechanical_arm.tooltip.action2": "Establece el comportamiento de orden de los _items_ emitidos por el _brazo mecánico_", + "item.create.blaze_cake.tooltip.summary": "Un delicioso regalo para sus esforzados _quemadores de blaze_. ¡Los pone en marcha!.", "item.create.wand_of_symmetry.tooltip": "VARITA DE SIMETRÍA", - "item.create.wand_of_symmetry.tooltip.summary": "Refleja perfectamente la colocación de bloques en los planos configurados", + "item.create.wand_of_symmetry.tooltip.summary": "Refleja perfectamente la colocación de bloques en los planos configurados.", "item.create.wand_of_symmetry.tooltip.condition1": "Mientras está en el inventario rápido", - "item.create.wand_of_symmetry.tooltip.behaviour1": "Permanece activo", - "item.create.wand_of_symmetry.tooltip.control1": "Click derecho en el suelo", - "item.create.wand_of_symmetry.tooltip.action1": "_Crea_ o _Mueve_ el Espejo", - "item.create.wand_of_symmetry.tooltip.control2": "Click derecho en el aire", - "item.create.wand_of_symmetry.tooltip.action2": "_Quita_ el Espejo activo", - "item.create.wand_of_symmetry.tooltip.control3": "Click derecho mientras se agacha", - "item.create.wand_of_symmetry.tooltip.action3": "Abre la _Interfaz de Configuración_", - - "item.create.handheld_blockzapper.tooltip": "BLOCKZAPPER", - "item.create.handheld_blockzapper.tooltip.summary": "Novedoso artefacto para colocar o intercambiar bloques a distancia", - "item.create.handheld_blockzapper.tooltip.control1": "Click izquierdo en un bloque", - "item.create.handheld_blockzapper.tooltip.action1": "Establece los bloques colocados por la herramienta en el bloque objetivo", - "item.create.handheld_blockzapper.tooltip.control2": "Click derecho en un bloque", - "item.create.handheld_blockzapper.tooltip.action2": "_Coloca_ o _Reemplaza_ el bloque objetivo", - "item.create.handheld_blockzapper.tooltip.control3": "Click derecho mientras se agacha", - "item.create.handheld_blockzapper.tooltip.action3": "Abre la _Interfaz de Configuración_", + "item.create.wand_of_symmetry.tooltip.behaviour1": "Permanece activo.", + "item.create.wand_of_symmetry.tooltip.control1": "Cuando se hace clic derecho en el suelo", + "item.create.wand_of_symmetry.tooltip.action1": "_Crea_ o _mueve_ el espejo.", + "item.create.wand_of_symmetry.tooltip.control2": "Cuando se hace clic derecho en el aire", + "item.create.wand_of_symmetry.tooltip.action2": "_Quita_ el espejo activo.", + "item.create.wand_of_symmetry.tooltip.control3": "[Mayús izdo.] + clic derecho", + "item.create.wand_of_symmetry.tooltip.action3": "Abre la interfaz de configuración.", "item.create.handheld_worldshaper.tooltip": "WORLDSHAPER", - "item.create.handheld_worldshaper.tooltip.summary": "Práctica herramienta para crear _paisajes_ y _características del terreno_", - "item.create.handheld_worldshaper.tooltip.control1": "Click izquierdo en un bloque", - "item.create.handheld_worldshaper.tooltip.action1": "Establece los bloques colocados por la herramienta en el bloque objetivo", - "item.create.handheld_worldshaper.tooltip.control2": "Click derecho en un bloque", + "item.create.handheld_worldshaper.tooltip.summary": "Práctica herramienta para crear _paisajes_ y _características del terreno_.", + "item.create.handheld_worldshaper.tooltip.control1": "Cuando se hace clic izquierdo en un bloque", + "item.create.handheld_worldshaper.tooltip.action1": "Establece los bloques colocados por la herramienta en el bloque objetivo.", + "item.create.handheld_worldshaper.tooltip.control2": "Cuando se hace clic derecho en un bloque", "item.create.handheld_worldshaper.tooltip.action2": "Aplica el _pincel_ y la _herramienta_ actualmente seleccionadas en el lugar deseado.", - "item.create.handheld_worldshaper.tooltip.control3": "Click derecho mientras se agacha", - "item.create.handheld_worldshaper.tooltip.action3": "Abre la _Interfaz de Configuración_", + "item.create.handheld_worldshaper.tooltip.control3": "[Mayús izdo.] + clic derecho", + "item.create.handheld_worldshaper.tooltip.action3": "Abre la interfaz de configuración.", "item.create.tree_fertilizer.tooltip": "FERTILIZANTE PARA ÁRBOLES", - "item.create.tree_fertilizer.tooltip.summary": "Una potente combinación de minerales adecuada para acelerar el crecimiento de los tipos de árboles más comunes", + "item.create.tree_fertilizer.tooltip.summary": "Una potente combinación de minerales adecuada para acelerar el crecimiento de los tipos de árboles más comunes.", "item.create.tree_fertilizer.tooltip.condition1": "Cuando se utiliza en un árbol joven", - "item.create.tree_fertilizer.tooltip.behaviour1": "Hace crecer los árboles _independientemente_ de sus condiciones de _espacio_", - - "item.create.deforester.tooltip": "DEFORESTADOR", - "item.create.deforester.tooltip.summary": "Un hacha _radiante_ capaz de talar árboles en una fracción de segundo", - + "item.create.tree_fertilizer.tooltip.behaviour1": "Hace crecer los árboles _independientemente_ de sus condiciones de _espacio_.", + "item.create.extendo_grip.tooltip": "AGARRE EXTENDIDO", - "item.create.extendo_grip.tooltip.summary": "¡Boioioing! Aumenta enormemente la _distancia de alcance_ del portador", + "item.create.extendo_grip.tooltip.summary": "¡Boioioing! Aumenta enormemente la _distancia de alcance_ del portador. Can be powered with Air Pressure from a _Copper_ _Backtank_", "item.create.extendo_grip.tooltip.condition1": "Cuando está fuera de la mano", - "item.create.extendo_grip.tooltip.behaviour1": "Aumenta la _distancia de alcance_ de los objetos usados en la _mano principal_", + "item.create.extendo_grip.tooltip.behaviour1": "Aumenta la _distancia de alcance_ de los objetos usados en la _mano principal_.", + "item.create.extendo_grip.tooltip.condition2": "While wearing Copper Backtank", + "item.create.extendo_grip.tooltip.behaviour2": "_No_ _Durability_ will be used. Instead, _Air_ _pressure_ is drained from the Tank", + + "item.create.potato_cannon.tooltip": "POTATO CANNON", + "item.create.potato_cannon.tooltip.summary": "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": "When R-Clicked", + "item.create.potato_cannon.tooltip.behaviour1": "_Shoots_ a suitable item from your _Inventory_.", + "item.create.potato_cannon.tooltip.condition2": "While wearing Copper Backtank", + "item.create.potato_cannon.tooltip.behaviour2": "_No_ _Durability_ will be used. Instead, _Air_ _pressure_ is drained from the Tank", "item.create.filter.tooltip": "FILTRO", - "item.create.filter.tooltip.summary": "Controla las salidas_ y _entradas_ de los dispositivos logísticos con más _precisión_, comparándolas con un _conjunto de elementos_ o varios _filtros anidados_", - "item.create.filter.tooltip.condition1": "Cuando está en la ranura del filtro", - "item.create.filter.tooltip.behaviour1": "Controla_ el flujo del elemento según su _configuración_", + "item.create.filter.tooltip.summary": "Controla las _salidas_ y _entradas_ de los _dispositivos logísticos_ con más precisión, comparándolas con un _conjunto de objetos_ o varios _filtros anidados_.", + "item.create.filter.tooltip.condition1": "Cuando está en la ranura de filtros", + "item.create.filter.tooltip.behaviour1": "Controla el flujo de objetos según su _configuración_.", "item.create.filter.tooltip.condition2": "Cuando se hace clic derecho", - "item.create.filter.tooltip.behaviour2": "Abre la interfaz de _configuración_", + "item.create.filter.tooltip.behaviour2": "Abre la interfaz de configuración.", "item.create.attribute_filter.tooltip": "FILTRO DE ATRIBUTOS", - "item.create.attribute_filter.tooltip.summary": "Controla las salidas_ y las _entradas_ de los dispositivos logísticos con más _precisión_, comparándolas con un _conjunto de _atributos_ y _categorías_ de artículos", - "item.create.attribute_filter.tooltip.condition1": "Cuando está en la ranura del filtro", - "item.create.attribute_filter.tooltip.behaviour1": "Controla el flujo del elemento según su _configuración_", + "item.create.attribute_filter.tooltip.summary": "Controla las _salidas_ y las _entradas_ de los _dispositivos logísticos_ con más precisión, comparándolas con un _conjunto de atributos_ y _categorías_ de objetos.", + "item.create.attribute_filter.tooltip.condition1": "Cuando está en la ranura de filtros", + "item.create.attribute_filter.tooltip.behaviour1": "Controla el flujo de objetos según su _configuración_.", "item.create.attribute_filter.tooltip.condition2": "Cuando se hace clic derecho", - "item.create.attribute_filter.tooltip.behaviour2": "Abre la interfaz de _configuración_", + "item.create.attribute_filter.tooltip.behaviour2": "Abre la interfaz de configuración.", "item.create.empty_schematic.tooltip": "ESQUEMA VACÍO", - "item.create.empty_schematic.tooltip.summary": "Se utiliza como ingrediente de las recetas y para escribir en la _tabla de esquemas_", - + "item.create.empty_schematic.tooltip.summary": "Se utiliza como 'ingrediente' de las recetas y para escribir en la _tabla de esquemas_.", + "item.create.schematic.tooltip": "ESQUEMA", - "item.create.schematic.tooltip.summary": "Contiene una estructura para ser posicionada y colocada en el mundo. Posiciona el holograma como se desee y utiliza un _Esquematicannon_ para construirlo", - "item.create.schematic.tooltip.condition1": "Cuando se mantiene", - "item.create.schematic.tooltip.behaviour1": "Se puede posicionar utilizando las herramientas en pantalla", - "item.create.schematic.tooltip.control1": "Click derecho mientras se agacha", - "item.create.schematic.tooltip.action1": "Abre una _Interfaz_ para introducir las _Coordenadas_ exactas", + "item.create.schematic.tooltip.summary": "Contiene una estructura para ser posicionada y colocada en el mundo. Posiciona el holograma como desees y utiliza un _cañón de esquemas_ para construirla.", + "item.create.schematic.tooltip.condition1": "Cuando se sostiene en la mano", + "item.create.schematic.tooltip.behaviour1": "Se puede posicionar utilizando las herramientas en pantalla.", + "item.create.schematic.tooltip.control1": "[Mayús izdo.] + clic derecho", + "item.create.schematic.tooltip.action1": "Abre una _interfaz_ para introducir las _coordenadas_ exactas.", "item.create.schematic_and_quill.tooltip": "ESQUEMA Y PLUMA", - "item.create.schematic_and_quill.tooltip.summary": "Se utiliza para guardar una estructura de tu mundo en un archivo .nbt", + "item.create.schematic_and_quill.tooltip.summary": "Se utiliza para guardar una estructura de tu mundo en un archivo .nbt.", "item.create.schematic_and_quill.tooltip.condition1": "Paso 1", - "item.create.schematic_and_quill.tooltip.behaviour1": "Selecciona dos puntos de esquina usando click derecho", + "item.create.schematic_and_quill.tooltip.behaviour1": "Selecciona dos puntos de esquina usando clic derecho.", "item.create.schematic_and_quill.tooltip.condition2": "Paso 2", - "item.create.schematic_and_quill.tooltip.behaviour2": "_Ctrl-Rueda del ratón_ en las caras para ajustar el tamaño. Click derecho de nuevo para guardar", - "item.create.schematic_and_quill.tooltip.control1": "Click derecho", - "item.create.schematic_and_quill.tooltip.action1": "Seleccionar un punto de esquina / confirmar guardar", - "item.create.schematic_and_quill.tooltip.control2": "Al mantener Ctrl", - "item.create.schematic_and_quill.tooltip.action2": "Seleccionar puntos en _medio del aire_. Rueda del ratón para ajustar la distancia", - "item.create.schematic_and_quill.tooltip.control3": "Click derecho mientras se agacha", - "item.create.schematic_and_quill.tooltip.action3": "Reinicia_ y elimina la selección", - - "block.create.schematicannon.tooltip": "ESQUEMATICAÑÓN", - "block.create.schematicannon.tooltip.summary": "Dispara bloques para recrear un _Esquema_ desplegado en el Mundo. Utiliza elementos de los inventarios adyacentes y _Pólvora_ como combustible.", - "block.create.schematicannon.tooltip.control1": "Cuando se hace clic derecho", - "block.create.schematicannon.tooltip.action1": "Abre la _Interfaz_ de configuración", + "item.create.schematic_and_quill.tooltip.behaviour2": "[Ctrl] + [RUEDA DEL RATÓN] en las caras para ajustar el tamaño. Clic derecho de nuevo para guardar.", + "item.create.schematic_and_quill.tooltip.control1": "Cuando se hace clic derecho", + "item.create.schematic_and_quill.tooltip.action1": "Selecciona un punto de esquina / confirmar guardar.", + "item.create.schematic_and_quill.tooltip.control2": "Cuando mantiene [Ctrl]", + "item.create.schematic_and_quill.tooltip.action2": "Selecciona puntos en _medio del aire_. Rueda del ratón para ajustar la distancia.", + "item.create.schematic_and_quill.tooltip.control3": "[Mayús izdo.] + clic derecho", + "item.create.schematic_and_quill.tooltip.action3": "_Reinicia_ y elimina la selección.", + "block.create.schematicannon.tooltip": "CAÑÓN DE ESQUEMAS", + "block.create.schematicannon.tooltip.summary": "Dispara bloques para recrear un _esquema_ desplegado en el mundo. Utiliza objetos de los inventarios adyacentes y _pólvora_ como combustible.", + "block.create.schematicannon.tooltip.condition1": "Cuando se hace clic derecho", + "block.create.schematicannon.tooltip.behaviour1": "Abre la interfaz.", + "block.create.schematic_table.tooltip": "TABLA DE ESQUEMAS", - "block.create.schematic_table.tooltip.summary": "Escribe los esquemas guardados en un _esquema vacío_", + "block.create.schematic_table.tooltip.summary": "Escribe los esquemas guardados en un _esquema vacío_.", "block.create.schematic_table.tooltip.condition1": "Cuando se da un esquema vacío", - "block.create.schematic_table.tooltip.behaviour1": "Carga un archivo elegido de la carpeta de esquemas", + "block.create.schematic_table.tooltip.behaviour1": "Carga un archivo elegido de la carpeta de esquemas.", - "block.create.shaft.tooltip": "EJE", - "block.create.shaft.tooltip.summary": "_Retransmite la rotación_ en línea recta", - - "block.create.cogwheel.tooltip": "RUEDA DENTADA", - "block.create.cogwheel.tooltip.summary": "_Retransmite la rotación_ en línea recta, y a las _ruedas dentadas_ adyacentes", - - "block.create.large_cogwheel.tooltip": "RUEDA DENTADA GRANDE", - "block.create.large_cogwheel.tooltip.summary": "Una versión más grande de la _Rueda dentada_, que permite _cambiar_ la _Velocidad de Rotación_ cuando se conecta a su contraparte más pequeña", - - "block.create.encased_shaft.tooltip": "EJE REVESTIDO", - "block.create.encased_shaft.tooltip.summary": "_Retransmite la rotación_ en línea recta. Adecuado para propagar la Rotación a través de Muros", - - "block.create.gearbox.tooltip": "CAJA DE TRANSMISIÓN", - "block.create.gearbox.tooltip.summary": "_Retransmite la rotación_ en _cuatro direcciones_. Invierte las conexiones rectas", - - "block.create.gearshift.tooltip": "CAJA DE CAMBIOS", - "block.create.gearshift.tooltip.summary": "Un control para alternar la dirección de rotación de los ejes conectados", - "block.create.gearshift.tooltip.condition1": "Cuando se alimenta", - "block.create.gearshift.tooltip.behaviour1": "_Invierte_ la rotación de salida", - - "block.create.clutch.tooltip": "Embrague", - "block.create.clutch.tooltip.summary": "Un control para conectar/desconectar la rotación de los ejes conectados", - "block.create.clutch.tooltip.condition1": "Cuando se acciona", - "block.create.clutch.tooltip.behaviour1": "_Detiene_ el transporte de la rotación al otro lado", - - "block.create.encased_chain_drive.tooltip": "CADENA DE TRANSMISIÓN REVESTIDA", - "block.create.encased_chain_drive.tooltip.summary": "_Retransmite la rotación_ en línea recta y a las cadenas de transmisión adyacentes. Las cadenas de transmisión se conectan en un grupo cuando se colocan junto a otra en cualquier cara sin eje. Su orientación no tiene que coincidir", - "block.create.encased_chain_drive.tooltip.condition1": "Cuando se conecta", - "block.create.encased_chain_drive.tooltip.behaviour1": "Los bloques conectados transmitirán la _velocidad de rotación_ y la dirección de este componente", - - "block.create.adjustable_chain_gearshift.tooltip": "CADENA DE TRANSMISIÓN AJUSTABLE", - "block.create.adjustable_chain_gearshift.tooltip.summary": "_Retransmite el giro_ en línea recta y a las _cadenas adyacentes_. El Redstone analógo proporcionada a este bloque controlará qué tamaño de rueda motriz se acopla a las cadenas de transmisión adyacentes", - "block.create.adjustable_chain_gearshift.tooltip.condition1": "Control de Redstone", - "block.create.adjustable_chain_gearshift.tooltip.behaviour1": "_Sin señal_, los accionamientos de cadena adyacentes transmitirán la _misma velocidad._ Con una señal de _fuerza completa_, los accionamientos de cadena adyacentes transmitirán exactamente _el doble de su velocidad._ Cualquier cosa entre medias dará resultados entre 1-2x su velocidad", - - "item.create.belt_connector.tooltip": "CORREA", - "item.create.belt_connector.tooltip.summary": "Conecta dos o más _ejes_ con una _Correa_. Los ejes conectados tendrán exactamente la misma velocidad y dirección de rotación. La correa puede actuar como _Transportador_ para _Estados_ y _Entidades_", - "item.create.belt_connector.tooltip.control1": "Click derecho en el eje", - "item.create.belt_connector.tooltip.action1": "Selecciona el eje como una polea de la correa. Los dos ejes seleccionados tienen que estar _alineados_ ya sea _Verticalmente_, _Horizontalmente_ o _Diagonalmente_ hacia la dirección de la correa", - "item.create.belt_connector.tooltip.control2": "Click derecho mientras te agachas", - "item.create.belt_connector.tooltip.action2": "_Reinicia_ la primera posición seleccionada para la correa", - - "item.create.goggles.tooltip": "GAFAS DEL INGENIERO", - "item.create.goggles.tooltip.summary": "Un par de gafas para aumentar tu visión con útil información _cinética_", + "item.create.goggles.tooltip": "GAFAS DEL CONSTRUCTOR", + "item.create.goggles.tooltip.summary": "Un par de gafas para aumentar tu visión con útil información _cinética_.", "item.create.goggles.tooltip.condition1": "Cuando se llevan puestas", - "item.create.goggles.tooltip.behaviour1": "Muestra _indicadores de color_ correspondientes al _Nivel de velocidad_ de un componente cinético colocado, así como el _Impacto de estrés_ y la _Capacidad_ de los componentes individuales.", - "item.create.goggles.tooltip.condition2": "Al mirar el medidor", - "item.create.goggles.tooltip.behaviour2": "Muestra información detallada sobre _Velocidad_ o _Estrés_ de la red a la que está conectado el medidor", + "item.create.goggles.tooltip.behaviour1": "Muestra _indicadores de color_ correspondientes al _nivel de velocidad_ de un componente cinético colocado, así como el _impacto de estrés_ y la _carga_ de los componentes individuales.", + "item.create.goggles.tooltip.condition2": "Al mirar un medidor", + "item.create.goggles.tooltip.behaviour2": "Muestra información detallada sobre _velocidad_ o _estrés_ de la red a la que está conectado el medidor.", + "item.create.goggles.tooltip.condition3": "Al mirar un contenedor de fluidos", + "item.create.goggles.tooltip.behaviour3": "Muestra información detallada sobre la _carga_ del bloque y los _líquidos_ almacenados en su interior.", "item.create.wrench.tooltip": "LLAVE INGLESA", - "item.create.wrench.tooltip.summary": "Una herramienta útil para trabajar en artilugios cinéticos. Se puede utilizar para _Rotar_, _Desmantelar_ y para _Configurar_ componentes", - "item.create.wrench.tooltip.control1": "Click con el botón derecho en un bloque cinético", - "item.create.wrench.tooltip.action1": "_Rota los componentes_ hacia o desde la cara con la que ha interactuado", - "item.create.wrench.tooltip.control2": "Click derecho mientras te agachas", - "item.create.wrench.tooltip.action2": "Desmonta los componentes cinéticos_ y los devuelve a _tu inventario_", - - "block.create.creative_motor.tooltip": "MOTOR CREATIVO", - "block.create.creative_motor.tooltip.summary": "Una fuente configurable de _Fuerza Rotativa_", - - "block.create.water_wheel.tooltip": "RUEDA HIDRÁULICA MECÁNICA", - "block.create.water_wheel.tooltip.summary": "Proporciona _Fuerza de rotación_ tomada de las _Corrientes de agua_ adyacentes", - - "block.create.encased_fan.tooltip": "VENTILADOR REVESTIDO", - "block.create.encased_fan.tooltip.summary": "Convierte la _fuerza de rotación_ en _corrientes de aire_ y viceversa. Tiene una gran variedad de usos", - "block.create.encased_fan.tooltip.condition1": "Cuando es alimentado por Redstone", - "block.create.encased_fan.tooltip.behaviour1": "Proporciona _fuerza de rotación_ a partir de cualquier _fuente de calor_ inmediatamente inferior. El ventilador debe estar orientado hacia abajo", - "block.create.encased_fan.tooltip.condition2": "Cuando es impulsado por la cinética", - "block.create.encased_fan.tooltip.behaviour2": "_Empuja_ o _Tira_ de Entidades, dependiendo de la velocidad de Rotación entrante", - "block.create.encased_fan.tooltip.condition3": "Al soplar a través de bloques especiales", - "block.create.encased_fan.tooltip.behaviour3": "Se emiten partículas de _Líquidos_ y _Fuego_ en el flujo de aire. Esto puede utilizarse para _procesar objetos_", + "item.create.wrench.tooltip.summary": "Una herramienta útil para trabajar en artilugios cinéticos. Se puede utilizar para _rotar_, _desmantelar_ y para _configurar_ componentes.", + "item.create.wrench.tooltip.control1": "Cuando se hace clic derecho en un bloque cinético", + "item.create.wrench.tooltip.action1": "Rota los componentes hacia o desde la cara con la que ha interactuado.", + "item.create.wrench.tooltip.control2": "[Mayús izdo.] + clic derecho", + "item.create.wrench.tooltip.action2": "Desmonta los _componentes cinéticos_ y los devuelve a tu inventario_.", "block.create.nozzle.tooltip": "BOQUILLA", - "block.create.nozzle.tooltip.summary": "Se acopla a la parte delantera de un _ventilador revestido_ para distribuir su efecto sobre las entidades en _todas las direcciones_", - - "block.create.hand_crank.tooltip": "MANIVELA", - "block.create.hand_crank.tooltip.summary": "Una sencilla _fuente_ de _fuerza de rotación_ que requiere la interacción de los jugadores. Ten cuidado de no agotarte!", - "block.create.hand_crank.tooltip.condition1": "Cuando se usa", - "block.create.hand_crank.tooltip.behaviour1": "Proporciona _fuerza de rotación_ a un artilugio acoplado. _Se puede revertir_ la rotación", + "block.create.nozzle.tooltip.summary": "Se acopla a la parte delantera de un _ventilador revestido_ para distribuir su efecto sobre las entidades en _todas las direcciones_.", "block.create.cuckoo_clock.tooltip": "RELOJ DE CUCO", - "block.create.cuckoo_clock.tooltip.summary": "Fina artesanía para _decorar_ un espacio y _contar el tiempo_", + "block.create.cuckoo_clock.tooltip.summary": "Fina artesanía para decorar un espacio y contar el tiempo.", "block.create.cuckoo_clock.tooltip.condition1": "Cuando es alimentado por cinética", - "block.create.cuckoo_clock.tooltip.behaviour1": "Muestra la _hora actual_ y toca una melodía dos veces al día. Se activa_ una vez al _mediodía_ y al anochecer, en cuanto _los jugadores pueden dormir_", + "block.create.cuckoo_clock.tooltip.behaviour1": "Muestra la _hora actual_ y toca una melodía dos veces al día. Se activa una vez al mediodía y al anochecer, _en cuanto los jugadores pueden dormir_.", "block.create.turntable.tooltip": "PLATAFORMA GIRATORIA", - "block.create.turntable.tooltip.summary": "Convierte la _fuerza de rotación_ en un refinado mareo", - - "block.create.millstone.tooltip": "PIEDRA DEL MOLINO", - "block.create.millstone.tooltip.summary": "Un componente cinético adecuado para _moler_ materiales insertados. Puede ser alimentado por una rueda dentada adyacente o conectándose al eje de la parte inferior. Los resultados tienen que ser extraídos del componente", - "block.create.millstone.tooltip.condition1": "Cuando es impulsado por la cinética", - "block.create.millstone.tooltip.behaviour1": "Comienza a aplicar _recetas de fresado_ a cualquier elemento insertado desde el lateral o la parte superior del bloque", - "block.create.millstone.tooltip.condition2": "Cuando se hace clic derecho", - "block.create.millstone.tooltip.behaviour2": "Recoge las salidas manualmente", - - "block.create.crushing_wheel.tooltip": "RUEDA DE TRITURACIÓN", - "block.create.crushing_wheel.tooltip.summary": "Grandes ruedas giratorias que _rompen_ cualquier cosa", - "block.create.crushing_wheel.tooltip.condition1": "Cuando se une a otra rueda trituradora", - "block.create.crushing_wheel.tooltip.behaviour1": "Forma una máquina trituradora para procesar una variedad de cosas. Los dientes de las ruedas tienen que conectarse y moverse con la _misma velocidad_ en _direcciones opuestas_", - - "block.create.mechanical_press.tooltip": "PRENSA MECÁNICA", - "block.create.mechanical_press.tooltip.summary": "Un pistón de fuerza para comprimir los objetos que tiene debajo. Requiere una _fuerza de rotación_ constante", - "block.create.mechanical_press.tooltip.condition1": "Cuando es impulsado por Redstone", - "block.create.mechanical_press.tooltip.behaviour1": "Comienza a _comprimir_ los objetos que caen debajo", - "block.create.mechanical_press.tooltip.condition2": "Cuando está por encima de una cinta", - "block.create.mechanical_press.tooltip.behaviour2": "Comprime _automáticamente_ los elementos de derivación en la cinta", - "block.create.mechanical_press.tooltip.condition3": "Cuando está por encima de la Cuenca", - "block.create.mechanical_press.tooltip.behaviour3": "Comienza a _compactar artículos_ en la cuenca siempre que estén presentes todos los ingredientes necesarios", - - "block.create.basin.tooltip": "CUENCA", - "block.create.basin.tooltip.summary": "Un práctico _contenedor de elementos_ utilizado en el procesamiento con la _Mezcladora mecánica_ y la _Prensa mecánica_. Soporta _Comparadores de Redstone_. Viene con un práctico filtro que especifica qué elementos deben crearse en esta cuenca", - "block.create.basin.tooltip.condition1": "Salida automática", - "block.create.basin.tooltip.behaviour1": "Cuando los _inventarios abiertos_ como cintas, otras cuencas, depósitos, desagües de fluidos y otros están _bajo un lado_ de una cuenca, recibirán automáticamente cualquier _salida de artículos/fluidos_ creada en la cuenca. Esto es útil para la automatización", - - "block.create.blaze_burner.tooltip": "QUEMADOR DE BLAZE", - "block.create.blaze_burner.tooltip.summary": "Un bloque donde se aloja un blaze domado para calentar una cuenca", - "block.create.blaze_burner.tooltip.condition1": "Cuando se coloca debajo de una cuenca", - "block.create.blaze_burner.tooltip.behaviour1": "Proporciona _calor_ a las recetas de la cuenca", - "block.create.blaze_burner.tooltip.condition2": "Cuando se utiliza el combustible en el Quemador de Blaze", - "block.create.blaze_burner.tooltip.behaviour2": "Aumenta el tiempo de combustión restante en el tiempo de combustión del horno del elemento utilizado. Consume el objeto. Utiliza _Torta de Blaze_ para altas temperaturas", - - "block.create.reinforced_rail.tooltip": "RAÍL REFORZADO", - "block.create.reinforced_rail.tooltip.summary": "Raíl estabilizado con madera, _no necesita soportes_", - - "block.create.mechanical_mixer.tooltip": "MEZCLADOR MECÁNICO", - "block.create.mechanical_mixer.tooltip.summary": "Un batidor cinético que proporciona recetas de elaboración automatizada de múltiples ingredientes. Requiere una _fuerza de rotación_ constante y una _cuenca_ colocada debajo (con un espacio intermedio)", - "block.create.mechanical_mixer.tooltip.condition1": "Cuando está por encima de la Cuenca", - "block.create.mechanical_mixer.tooltip.behaviour1": "Comienza a mezclar los elementos en la cuenca siempre que estén presentes todos los ingredientes necesarios. Para evitar recetas no deseadas, utilice la ranura del filtro de la cuenca o reduzca la fuerza de rotación hasta que se hayan añadido todos los ingredientes deseados", - - "block.create.mechanical_crafter.tooltip": "AUTOENSAMBLADOR MECÁNICO", - "block.create.mechanical_crafter.tooltip.summary": "Un ensamblador cinético para _automatizar_ cualquier receta de _crafteo_ con forma. Coloca _múltiples en una cuadrícula_ correspondiente a tu receta, y _organiza sus cintas_ para crear un _flujo_ que salga de la cuadrícula en uno de los Autoensambladores", - "block.create.mechanical_crafter.tooltip.condition1": "Cuando es impulsado por la cinética", - "block.create.mechanical_crafter.tooltip.behaviour1": "_Empieza el proceso de creación_ en cuanto _todos los crafters_ de la parrilla hayan recibido un objeto_", - "block.create.mechanical_crafter.tooltip.condition2": "Con pulso de Redstone", - "block.create.mechanical_crafter.tooltip.behaviour2": "_Fuerza_ el inicio del proceso de _creación_ con todos los _artículos_ dados actualmente en la parrilla", - "block.create.mechanical_crafter.tooltip.control1": "Cuando se arranca por delante", - "block.create.mechanical_crafter.tooltip.action1": "_Circula la dirección_ hacia la que un autoensamblador individual _mueve sus objetos_. Para formar una cuadrícula de trabajo, _organiza las cintas en un flujo_ que mueva todos los objetos hacia un autoensamblador final. El autoensamblador final debe _apuntar hacia fuera_ de la rejilla", - "block.create.mechanical_crafter.tooltip.control2": "Cuando se arranca hacia atrás", - "block.create.mechanical_crafter.tooltip.action2": "Conecta_ el _inventario de entrada_ de los autoensambladores adyacentes. Usa esto para _combinar ranuras_ en la cuadrícula de trabajo y _guardar el la entrada de trabajo_", - - "block.create.furnace_engine.tooltip": "MOTOR DEL HORNO", - "block.create.furnace_engine.tooltip.summary": "Una poderosa fuente de _fuerza de rotación/torque_ que requiere un _horno en funcionamiento_ para funcionar", - "block.create.furnace_engine.tooltip.condition1": "Cuando se conecta a un horno encendido", - "block.create.furnace_engine.tooltip.behaviour1": "_Empieza a alimentar_ un _Horno_ colocado delante de él (a 1m de distancia). Utiliza un Alto Horno para obtener mayores velocidades", - - "block.create.flywheel.tooltip": "RUEDA DE INERCIA", - "block.create.flywheel.tooltip.summary": "Una gran rueda metálica para _conducir y estabilizar_ la fuerza generada por un _motor conectado_. Las ruedas de inercia se conectan a los motores si están a _1m de distancia_ y en un _ángulo de 90º_ entre ellos", - "block.create.flywheel.tooltip.condition1": "Cuando está unida a un motor en marcha", - "block.create.flywheel.tooltip.behaviour1": "Proporciona _fuerza de rotación_ a un artilugio conectado en función de la fuerza y la velocidad del generador", - - "block.create.portable_storage_interface.tooltip": "INTERFAZ DE ALMACENAMIENTO PORTÁTIL", - "block.create.portable_storage_interface.tooltip.summary": "Un punto de intercambio portátil para _mover elementos_ hacia y desde una _estructura_ movida por un pistón, rodamiento, vagoneta o polea. Para cumplirse dos interfaces tienen que _enfrentarse_ y estar separadas _1-2 bloques_", - "block.create.portable_storage_interface.tooltip.condition1": "Mientras se mueve", - "block.create.portable_storage_interface.tooltip.behaviour1": "Interactúa con las _interfaces de almacenamiento portátil_ estacionarias para transferir elementos hacia o desde el artilugio. Los componentes que se inserten o extraigan de la _interfaz estacionaria_ interactuarán con los inventarios del artilugio _directamente._ La estructura se detendrá brevemente mientras se intercambian los elementos.", - "block.create.portable_storage_interface.tooltip.condition2": "Cuando es alimentado por Redstone", - "block.create.portable_storage_interface.tooltip.behaviour2": "Desactiva_ cualquier conexión activa inmediatamente", - - "block.create.portable_fluid_interface.tooltip": "INTERFAZ DE FLUIDO PORTÁTIL", - "block.create.portable_fluid_interface.tooltip.summary": "Punto de intercambio portátil para _mover fluidos_ hacia y desde una _estructura_ movida por un pistón, rodamiento, vagoneta o polea. Para cumplirse dos interfaces tienen que _enfrentarse_ y estar separadas _1-2 bloques_", - "block.create.portable_fluid_interface.tooltip.condition1": "Mientras se mueve", - "block.create.portable_fluid_interface.tooltip.behaviour1": "Interactúa con las _interfaces de almacenamiento portátiles_ estacionarias para transferir fluidos hacia o desde el artilugio. Las tuberías que se inserten en la _interfaz estacionaria_ o se extraigan de ella interactuarán con los depósitos del artilugio _directamente._ La estructura se paralizará brevemente mientras se intercambian fluidos.", - "block.create.portable_fluid_interface.tooltip.condition2": "Cuando se alimenta con Redstone", - "block.create.portable_fluid_interface.tooltip.behaviour2": "_Desconecta_ cualquier conexión activa inmediatamente", - - "block.create.rotation_speed_controller.tooltip": "CONTROLADOR DE VELOCIDAD DE ROTACIÓN", - "block.create.rotation_speed_controller.tooltip.summary": "Un _relé_ configurable_ capaz de acelerar o ralentizar el componente de destino a cualquier velocidad deseada", - "block.create.rotation_speed_controller.tooltip.condition1": "Cuando se adjunta a una rueda dentada grande", - "block.create.rotation_speed_controller.tooltip.behaviour1": "Transmite la fuerza de rotación entrante a la rueda, intentando _igualar_ la _velocidad_ a la que está configurada. La _rueda mecánica_ tiene que estar _adherida en la parte superior_ del controlador", - - "block.create.mechanical_piston.tooltip": "PISTÓN MECÁNICO", - "block.create.mechanical_piston.tooltip.summary": "Una versión más avanzada del _Pistón_. Utiliza la _Fuerza de rotación_ para mover con precisión las estructuras que tiene delante. las pértigas de extensión del pistón_ en la parte trasera definen el _alcance_ de este dispositivo. Sin las extensiones, el pistón no se moverá. Utiliza _Chasis_ o _Bloques de Slime_ para mover más de una línea de bloques", - "block.create.mechanical_piston.tooltip.condition1": "Cuando es impulsado por la cinética", - "block.create.mechanical_piston.tooltip.behaviour1": "Comienza a mover la estructura adjunta. La velocidad y la dirección se correlacionan con la velocidad de rotación entrante", - - "block.create.piston_extension_pole.tooltip": "PÉRTIGA DE EXTENSIÓN", - "block.create.piston_extension_pole.tooltip.summary": "Amplía la gama de _Pistones mecánicos_", - "block.create.piston_extension_pole.tooltip.condition1": "Cuando se acopla a un pistón mecánico", - "block.create.piston_extension_pole.tooltip.behaviour1": "Extiende el alcance de un pistón en 1 bloque", - - "block.create.mechanical_bearing.tooltip": "RODAMIENTO MECÁNICO", - "block.create.mechanical_bearing.tooltip.summary": "Se utiliza para girar _estructuras más grandes_ con fuerza de rotación", - "block.create.mechanical_bearing.tooltip.condition1": "Cuando es impulsado por la cinética", - "block.create.mechanical_bearing.tooltip.behaviour1": "Inicia la rotación de los bloques adjuntos. Utiliza _Chasis_, _Slime_ o _Súper Pegamento_ para mover más de un bloque", - - "block.create.windmill_bearing.tooltip": "RODAMIENTO DEL MOLINO DE VIENTO", - "block.create.windmill_bearing.tooltip.summary": "Se utiliza para aprovechar la _fuerza de rotación_ del viento. Coloca tu propio diseño y mira cómo gira!", - "block.create.windmill_bearing.tooltip.condition1": "Al hacer clic con el botón derecho", - "block.create.windmill_bearing.tooltip.behaviour1": "Comienza a proporcionar _Fuerza de rotación_ generada por la rotación de su estructura adjunta. La estructura tiene que incluir bloques de vela o lana adecuados. Utiliza _Chasis_, _Slime_ o _Súper Pegamento_ para mover más de un bloque.", - - "block.create.sail_frame.tooltip": "MARCO DE VELA", - "block.create.sail_frame.tooltip.summary": "Un útil bloque de construcción y fuente de energía cinética cuando forma parte de una estructura montada sobre un _Rodamiento de molino_", - - "block.create.white_sail.tooltip": "VELA BLANCA", - "block.create.white_sail.tooltip.summary": "Un útil bloque de construcción y fuente de energía cinética cuando forma parte de una estructura montada en un _Rodamiento de molino_. Viene en una variedad de colores", - "block.create.white_sail.tooltip.condition1": "Cuando se hace clic con el botón derecho del ratón con tinte", - "block.create.white_sail.tooltip.behaviour1": "Cambia el color de la vela", - - "block.create.clockwork_bearing.tooltip": "RODAMIENTO DE RELOJ", - "block.create.clockwork_bearing.tooltip.summary": "Una versión avanzada del _rodamiento mecánico_ para hacer girar hasta dos _manecillas de reloj_ según la _hora actual_ en el _juego_", - "block.create.clockwork_bearing.tooltip.condition1": "Cuando es impulsado por la cinética", - "block.create.clockwork_bearing.tooltip.behaviour1": "Comienza a girar la estructura adjunta hacia la _hora actual_. Si existe una segunda estructura independiente delante de la primera, servirá de _manecilla de las horas_", - - "block.create.sequenced_gearshift.tooltip": "CAMBIO DE MARCHAS SECUENCIADO", - "block.create.sequenced_gearshift.tooltip.summary": "Un _componente de utilidad programable_, que puede cambiar su _rendimiento rotacional_ según hasta _5 instrucciones consecutivas._ Utilízalo para alimentar Rodamientos Mecánicos, Pistones o Poleas con más control sobre la sincronización y la velocidad. Puede ser menos preciso a velocidades más altas", - "block.create.sequenced_gearshift.tooltip.condition1": "Cuando es impulsado por Redstone", - "block.create.sequenced_gearshift.tooltip.behaviour1": "_Ejecuta_ las instrucciones programadas en función de la velocidad de entrada", - "block.create.sequenced_gearshift.tooltip.condition2": "Cuando se hace clic derecho", - "block.create.sequenced_gearshift.tooltip.behaviour2": "Abre la _interfaz de configuración._", - - "block.create.cart_assembler.tooltip": "ENSAMBLADOR DE VAGONETAS", - "block.create.cart_assembler.tooltip.summary": "Cuando se coloca en un _Raíl_, puede _ensamblar_ y _desensamblar_ estructuras móviles en las vagonetas que pasan. Consulta [Ctrl] para conocer el comportamiento específico del tipo de raíl", - "block.create.cart_assembler.tooltip.condition1": "Artilugio de vagoneta simple", - "block.create.cart_assembler.tooltip.behaviour1": "Con un _miembro único_, las estructuras se anclarán y girarán en _una sola vagoneta_. Utilice una _Llave Inglesa_ para especificar el _comportamiento de rotación_ deseado", - "block.create.cart_assembler.tooltip.condition2": "Artilugio de vagonetas", - "block.create.cart_assembler.tooltip.behaviour2": "Dos ensambladores de vagonetas _conectadas por_ una _estructura_, una vez que ambos contengan una vagoneta, las conectará con un artilugio montado _entre los dos_. La estructura se comportará de forma similar a un _acoplador de vagonetas_", - "block.create.cart_assembler.tooltip.control1": "Cuando se coloca sobre un Rail", - "block.create.cart_assembler.tooltip.action1": "_Se monta_ en las vagonetas que pasan _cuando está alimentado_, _se desmonta_ en caso contrario", - "block.create.cart_assembler.tooltip.control2": "Cuando se coloca sobre un raíl energizado", - "block.create.cart_assembler.tooltip.action2": "Monta y _acelera_ las vagonetas _cuando está alimentado_, desmonta y _sostiene_ en caso contrario", - "block.create.cart_assembler.tooltip.control3": "Cuando se coloca sobre el raíl detector", - "block.create.cart_assembler.tooltip.action3": "_Monta vagonetas sin montar_, _desmonta vagonetas montadas_", - "block.create.cart_assembler.tooltip.control4": "Cuando se coloca sobre el raíl activador", - "block.create.cart_assembler.tooltip.action4": "Desmonta_ vagonetas cuando se activa", - - "block.create.rope_pulley.tooltip": "POLEA DE CUERDA", - "block.create.rope_pulley.tooltip.summary": "Mueve verticalmente los _bloques_ y _estructuras_ adjuntos. Utiliza _Chasis_, _Slime_ o _Súper Pegamento_ para mover más de un bloque", - "block.create.rope_pulley.tooltip.condition1": "Cuando es impulsado por la cinética", - "block.create.rope_pulley.tooltip.behaviour1": "Comienza a mover la estructura adjunta. La velocidad y la dirección se correlacionan con la velocidad de rotación entrante", - - "block.create.linear_chassis.tooltip": "CHASIS LINEAL", - "block.create.linear_chassis.tooltip.summary": "Bloque base configurable que conecta estructuras para el movimiento", - "block.create.linear_chassis.tooltip.condition1": "Cuando se mueve", - "block.create.linear_chassis.tooltip.behaviour1": "_Mueve_ todos los _Chasis adjuntos_ con la misma orientación, y una columna de Bloques dentro de su rango. Los bloques sólo serán arrastrados si la cara del chasis es _Pegajosa_ (Ver [Ctrl])", - "block.create.linear_chassis.tooltip.condition2": "Con Llave Inglesa", - "block.create.linear_chassis.tooltip.behaviour2": "Configura el _rango_ para este bloque de chasis. Mantenga pulsada la tecla CTRL para modificar también el rango de todos los bloques de chasis adjuntos", - "block.create.linear_chassis.tooltip.control1": "Cuando se hace clic derecho con slime", - "block.create.linear_chassis.tooltip.action1": "Hace que la cara sobre la que se ha hecho clic sea _pegajosa_. Cuando se mueva, el chasis _tirará_ de los bloques adjuntos, independientemente de la dirección del movimiento", - - "block.create.secondary_linear_chassis.tooltip": "CHASIS LINEAL SECUNDARIO", - "block.create.secondary_linear_chassis.tooltip.summary": "Un segundo tipo de _Chasis lineal_ que no se conecta al otro", - - "block.create.radial_chassis.tooltip": "CHASIS RADIAL", - "block.create.radial_chassis.tooltip.summary": "Bloque base configurable que conecta estructuras para el movimiento", - "block.create.radial_chassis.tooltip.condition1": "Cuando se mueve", - "block.create.radial_chassis.tooltip.behaviour1": "_Mueve_ todos los _Chasis_ adjuntos en una columna, y un cilindro de bloques a su alrededor. Los bloques que lo rodean sólo se mueven cuando están dentro del rango y están adheridos a un lado pegajoso (Ver [Ctrl]).", - "block.create.radial_chassis.tooltip.condition2": "Con Llave Inglesa", - "block.create.radial_chassis.tooltip.behaviour2": "Configura el _rango_ para este bloque de chasis. Mantenga pulsada la tecla CTRL para modificar también el rango de todos los bloques de chasis adjuntos", - "block.create.radial_chassis.tooltip.control1": "Cuando se hace clic derecho con slime", - "block.create.radial_chassis.tooltip.action1": "Hace que la cara sobre la que se ha hecho clic sea _pegajosa_. Cuando el chasis se mueve, todos los bloques designados unidos a la cara pegajosa se mueven con él", - - "block.create.mechanical_drill.tooltip": "TALADRO MECÁNICO", - "block.create.mechanical_drill.tooltip.summary": "Un dispositivo mecánico adecuado para _romper bloques_. Se puede mover con _pistones mecánicos_, _rodamientos_ u otros controladores", - "block.create.mechanical_drill.tooltip.condition1": "Cuando se mueve con cinética", - "block.create.mechanical_drill.tooltip.behaviour1": "Actúa como un rompebloques _estacionario_. También _hace daño a las entidades_ en su área efectiva", - "block.create.mechanical_drill.tooltip.condition2": "Mientras se mueve", - "block.create.mechanical_drill.tooltip.behaviour2": "Rompe los bloques con los que colisiona el taladro", - - "block.create.mechanical_harvester.tooltip": "COSECHADORA MECÁNICA", - "block.create.mechanical_harvester.tooltip.summary": "Una cosechadora mecánica adecuada para la automatización de cultivos a mediana escala. Se puede mover con _Pistones mecánicos_, _Rodamientos_ u otros controladores", - "block.create.mechanical_harvester.tooltip.condition1": "Mientras se mueve", - "block.create.mechanical_harvester.tooltip.behaviour1": "_Corta_ todos los _cultivos maduros_ con los que la cuchilla colisiona y los restablece a su estado de crecimiento inicial", - - "block.create.mechanical_plough.tooltip": "ARADO MECÁNICO", - "block.create.mechanical_plough.tooltip.summary": "Un arado mecánico tiene varios usos. Se puede mover con _Pistones mecánicos_, _Rodamientos_ u otros mandos", - "block.create.mechanical_plough.tooltip.condition1": "Mientras se mueve", - "block.create.mechanical_plough.tooltip.behaviour1": "_Rompe bloques_ con los que _no se puede colisionar_, como antorchas, raíles o capas de nieve. _Aplica_ su _movimiento_ a las _entidades_ sin dañarlas. _Labra bloques de tierra_ como si se usara una azada en ellos", - - "block.create.mechanical_saw.tooltip": "SIERRA MECÁNICA", - "block.create.mechanical_saw.tooltip.summary": "Adecuada para _cortar árboles_ de forma eficaz y para _cortar bloques_ en sus homólogos carpinteros. Se puede mover mediante _pistones mecánicos_ o _rodamientos_", - "block.create.mechanical_saw.tooltip.condition1": "Cuando está orientado hacia arriba", - "block.create.mechanical_saw.tooltip.behaviour1": "Aplica las recetas _Serrar_ y _Estallar_ a los objetos que se dejan caer o se introducen en ella. Cuando hay varias salidas posibles, las recorre a menos que se asigne un _filtro_", - "block.create.mechanical_saw.tooltip.condition2": "Cuando se orienta horizontalmente", - "block.create.mechanical_saw.tooltip.behaviour2": "Rompe los troncos_ que tiene delante. Si el tronco soportaba un árbol por sí mismo, el _árbol se derrumbará_ lejos de la sierra", - "block.create.mechanical_saw.tooltip.condition3": "Mientras se mueve", - "block.create.mechanical_saw.tooltip.behaviour3": "_Corta_ todos los _Árboles_ con los que colisiona la sierra", + "block.create.turntable.tooltip.summary": "Convierte la _fuerza rotacional_ en un refinado mareo.", "block.create.stockpile_switch.tooltip": "INTERRUPTOR DE ACOPIO", - "block.create.stockpile_switch.tooltip.summary": "Activa una señal de Redstone en función de la cantidad de _Artículos almacenados_ en el Contenedor adjunto. Viene con un práctico filtro. A diferencia de un _Comparador,_ el _Interruptor de acopio_ permite la configuración de _Umbrales,_ a partir de los cuales se invierten las señales", - "block.create.stockpile_switch.tooltip.condition1": "Cuando haces click derecho", - "block.create.stockpile_switch.tooltip.behaviour1": "Abre la _Interfaz de Configuración_", + "block.create.stockpile_switch.tooltip.summary": "Activa una señal de redstone en función de la cantidad de _objetos almacenados_ en el _contenedor_ adjunto. Viene con un práctico filtro. A diferencia de un _comparador, el _interruptor de acopio_ permite la configuración de _umbrales_, a partir de los cuales se invierten las señales.", + "block.create.stockpile_switch.tooltip.condition1": "Cuando se hace clic derecho", + "block.create.stockpile_switch.tooltip.behaviour1": "Abre la interfaz de configuración.", "block.create.content_observer.tooltip": "OBSERVADOR DE CONTENIDO", - "block.create.content_observer.tooltip.summary": "_Detecta artículos_ dentro de _contenedores_ y _transportadores_ que coinciden con un _filtro_ configurado. Mientras el _inventario_, la _cinta_ o la _canaleta_ observados contengan_ un artículo que coincida, este componente emitirá una _señal de Redstone_. Cuando un _túnel observado transfiere_ un artículo coincidente, este componente emitirá un _Pulso de Redstone_", - - "block.create.redstone_link.tooltip": "ENLACE DE REDSTONE", - "block.create.redstone_link.tooltip.summary": "Puntos finales para conexiones _Inalámbricas Redstone_. Se pueden asignar _frecuencias_ utilizando cualquier elemento. El alcance de la señal es limitado, aunque razonablemente lejano", - "block.create.redstone_link.tooltip.condition1": "Cuando se alimenta", - "block.create.redstone_link.tooltip.behaviour1": "Recibir enlaces de la misma _Frecuencia_ producirá una señal de Redstone", - "block.create.redstone_link.tooltip.control1": "Cuando se hace Clic derecho con un ítem", - "block.create.redstone_link.tooltip.action1": "Establece la _Frecuencia_ a ese elemento. Se pueden utilizar un total de _dos elementos diferentes_ en combinación para definir una Frecuencia", - "block.create.redstone_link.tooltip.control2": "Cuando se hace clic derecho mientras se agacha", - "block.create.redstone_link.tooltip.action2": "Cambia entre el modo _Receptor_ y _Transmisor_", - - "block.create.nixie_tube.tooltip": "TUBO NIXIE", - "block.create.nixie_tube.tooltip.summary": "Un elegante _visualizador_ de _números y texto_ potenciados por Redstone", - "block.create.nixie_tube.tooltip.condition1": "Cuando se alimenta", - "block.create.nixie_tube.tooltip.behaviour1": "Muestra el valor actual de la _Fuerza de la señal Redstone_", - "block.create.nixie_tube.tooltip.condition2": "Con etiqueta de nombre", - "block.create.nixie_tube.tooltip.behaviour2": "Mostrar el _contenido_ de su _etiqueta de nombre_ con varios tubos nixie _ordenados_ en una _línea_", - - "block.create.redstone_contact.tooltip": "CONTACTO DE REDSTONE", - "block.create.redstone_contact.tooltip.summary": "Solo emite energía de Redstone por parejas. Se puede mover con _Pistones mecánicos_, _Rodamientos_ u otros controladores", - "block.create.redstone_contact.tooltip.condition1": "Cuando se enfrenta a otro Contacto", - "block.create.redstone_contact.tooltip.behaviour1": "Proporciona una _señal de Redstone_", - "block.create.redstone_contact.tooltip.condition2": "Mientras se mueve", - "block.create.redstone_contact.tooltip.behaviour2": "Activa todos los contactos estacionarios que pasa", + "block.create.content_observer.tooltip.summary": "_Detecta objetos_ dentro de _contenedores_ y _transportadores_ que coincidan con un _filtro_ configurado. Mientras el _inventario_, la _cinta_ o la _canaleta_ observados _contengan_ un objeto que coincida, este componente emitirá una _señal de redstone_. Cuando un embudo observado _transfiere_ un objeto coincidente, este componente emitirá un _pulso de redstone_.", "block.create.adjustable_crate.tooltip": "CAJA AJUSTABLE", - "block.create.adjustable_crate.tooltip.summary": "Este _Contenedor de Artículos_ permite el control manual de su capacidad. Puede contener hasta _16 pilas_ de cualquier objeto. Soporta _Comparadores de Redstone_", - "block.create.adjustable_crate.tooltip.control1": "Cuando haces click derecho", - "block.create.adjustable_crate.tooltip.action1": "Abre la _Interfaz_", + "block.create.adjustable_crate.tooltip.summary": "Este _contenedor de objetos_ permite el control manual de su capacidad. Puede contener hasta _16 pilas_ de cualquier objeto. Soporta _comparadores de redstone_.", + "block.create.adjustable_crate.tooltip.condition1": "Cuando se hace clic derecho", + "block.create.adjustable_crate.tooltip.behaviour1": "Abre la interfaz.", "block.create.creative_crate.tooltip": "CAJA CREATIVA", - "block.create.creative_crate.tooltip.summary": "Este _Contenedor de Almacenamiento_ permite la replicación infinita de cualquier elemento. Colócalo junto a un _Schematicannon_ para eliminar cualquier requisito de material", - "block.create.creative_crate.tooltip.condition1": "Cuando el artículo está en la ranura del filtro", - "block.create.creative_crate.tooltip.behaviour1": "Todo lo que se _extraiga_ de este contenedor proporcionará un _suministro ilimitado_ del elemento especificado. Los elementos _insertados_ en esta caja serán _evitados._", - - "block.create.deployer.tooltip": "DESPLEGADOR", - "block.create.deployer.tooltip.summary": "_Lanza_, _Usa_ y _Activa_. Esta máquina intentará _imitar_ a un _jugador_ en la medida de lo posible. Puede _tomar_ y _depositar objetos_ en su propio _inventario_. Los objetos guardados deben ser _insertados_ y _extraídos_ del bloque directamente", - "block.create.deployer.tooltip.condition1": "Cuando se alimenta de cinética", - "block.create.deployer.tooltip.behaviour1": "Extiende su brazo y se _activa_ en el espacio del bloque _2m por delante_ de sí mismo", - "block.create.deployer.tooltip.condition2": "Click derecho con la Llave Inglesa", - "block.create.deployer.tooltip.behaviour2": "Activa el modo puñetazo. En el _modo puñetazo_, el Desplegador intentará usar su objeto para _romper bloques_ o _herir entidades_", - "block.create.deployer.tooltip.condition3": "Cuando se asigna el filtro", - "block.create.deployer.tooltip.behaviour3": "El desplegador no se activará a menos que el elemento retenido _coincida_ con el _filtro._ Los elementos que no coincidan no podrán ser insertados; los elementos retenidos que coincidan con el filtro no podrán ser extraídos.", - - "block.create.brass_casing.tooltip": "REVESTIDOR DE LATÓN", - "block.create.brass_casing.tooltip.summary": "Resistente máquina revestidora con una gran variedad de usos. Segura para la decoración. Se puede utilizar para _revestir ejes_ y _cintas._", - - "block.create.pulse_repeater.tooltip": "REPETIDOR DE PULSOS DE REDSTONE", - "block.create.pulse_repeater.tooltip.summary": "Un circuito sencillo para cortar las señales de Redstone que pasan a una longitud de _1 tick_", - - "block.create.adjustable_repeater.tooltip": "REPETIDOR AJUSTABLE", - "block.create.adjustable_repeater.tooltip.summary": "Un avanzado _repetidor de Redstone_ con un _retraso configurable_ de hasta 30 minutos", - - "block.create.adjustable_pulse_repeater.tooltip": "REPETIDOR DE PULSO AJUSTABLE", - "block.create.adjustable_pulse_repeater.tooltip.summary": "Un _repetidor de pulsos_ con un _retardo configurable_ de hasta 30 minutos", - - "block.create.analog_lever.tooltip": "PALANCA ANALÓGICA", - "block.create.analog_lever.tooltip.summary": "Una palanca con un control más _preciso_ sobre su fuerza de _señal_ emitida", - - "block.create.powered_toggle_latch.tooltip": "PALANCA MECANIZADA", - "block.create.powered_toggle_latch.tooltip.summary": "Una palanca que puede ser accionada por un _Pulso de Redstone_", - - "block.create.powered_latch.tooltip": "PALANCA DE CIERRE MECANIZADA", - "block.create.powered_latch.tooltip.summary": "Una palanca que puede ser controlada por _señales de Redstone_. Una señal en la _trasera la habilita_, una señal desde el _lado la reinicia_", + "block.create.creative_crate.tooltip.summary": "Este _contenedor de objetos_ permite la replicación infinita de cualquier elemento. Colócalo junto a un _cañón de esquemas_ para eliminar cualquier requisito de material.", + "block.create.creative_crate.tooltip.condition1": "Cuando el elemento está en la ranura para filtros", + "block.create.creative_crate.tooltip.behaviour1": "Todo lo que se _extraiga_ de este contenedor proporcionará un suministro _ilimitado_ del elemento especificado. Los objetos _insertados_ en esta caja serán _evitados_.", "block.create.controller_rail.tooltip": "RAÍL DE CONTROL", - "block.create.controller_rail.tooltip.summary": "Un _raíl energizado unidireccional_ capaz de _controlar con precisión_ la _velocidad de movimiento_ de una vagoneta", - "block.create.controller_rail.tooltip.condition1": "Cuando es impulsado por Redstone", - "block.create.controller_rail.tooltip.behaviour1": "_Acelera_ o _Desacelera_ pasando _vagonetas_ correspondientes a la _fuerza de la señal_. Propaga la energía de Redstone a los Raíles de control adyacentes. Al alimentar dos Raíles de control con diferentes intensidades, los carriles entre ellos interpolarán su señal", - - "block.create.speedometer.tooltip": "VELOCÍMETRO", - "block.create.speedometer.tooltip.summary": "Mide y muestra la _velocidad de rotación_ de los componentes cinéticos acoplados. Es compatible con _comparadores de Redstone_", - "block.create.speedometer.tooltip.condition1": "Cuando es impulsado por la cinética", - "block.create.speedometer.tooltip.behaviour1": "Indica un color correspondiente al nivel de velocidad. El _Verde_ indica Lento, el _Azul_ Moderado y el _Púrpura_ Rápido. Algunos componentes mecánicos requieren un nivel de velocidad suficiente para funcionar correctamente", - - "block.create.stressometer.tooltip": "ESTRESÓMETRO", - "block.create.stressometer.tooltip.summary": "Mide y muestra el _estrés global_ de la red cinética adjunta. Es compatible con _comparadores de Redstone_", - "block.create.stressometer.tooltip.condition1": "Cuando se alimenta con cinética", - "block.create.stressometer.tooltip.behaviour1": "Indica un color correspondiente al nivel de estrés. Las redes demasiado estresadas dejarán de moverse. El estrés puede aliviarse añadiendo más _fuentes de rotación_ a la red", + "block.create.controller_rail.tooltip.summary": "Un raíl energizado _unidireccional_ capaz de _controlar con precisión_ la _velocidad de movimiento_ de una vagoneta.", + "block.create.controller_rail.tooltip.condition1": "Cuando es alimentado con redstone", + "block.create.controller_rail.tooltip.behaviour1": "_Acelera_ o _desacelera_ pasando _vagonetas_ correspondientes a la _fuerza de la señal_. Propaga la energía de redstone a los raíles de control adyacentes. Al alimentar dos raíles de control con diferentes intensidades, los carriles entre ellos interpolarán su señal.", "item.create.sand_paper.tooltip": "PAPEL DE LIJA", - "item.create.sand_paper.tooltip.summary": "Un papel rugoso que se puede utilizar para _pulir materiales_. Se puede aplicar automáticamente con el Desplegador", + "item.create.sand_paper.tooltip.summary": "Un papel rugoso que se puede utilizar para _pulir materiales_. Se puede aplicar automáticamente con el _desplegador_.", "item.create.sand_paper.tooltip.condition1": "Cuando se usa", - "item.create.sand_paper.tooltip.behaviour1": "Aplica el pulido a los objetos sostenidos en la _mano libre_ o tirados en el _suelo_ cuando se _miran_", - - "item.create.super_glue.tooltip": "SÚPER PEGAMENTO", - "item.create.super_glue.tooltip.summary": "Pega un bloque a otro y serán inseparables para siempre", - "item.create.super_glue.tooltip.condition1": "Cuando se usa", - "item.create.super_glue.tooltip.behaviour1": "Hace que la cara _clicada_ de un bloque sea _pegajosa_. Los bloques unidos a caras pegajosas serán _arrastrados_ cuando se muevan por _pistones mecánicos_, _rodamientos_ y otros controladores", - "item.create.super_glue.tooltip.condition2": "Cuando se sostiene en la mano", - "item.create.super_glue.tooltip.behaviour2": "_Adjunta automáticamente_ los bloques colocados desde la mano principal al _lado_ contra el que fueron _colocados._", + "item.create.sand_paper.tooltip.behaviour1": "Aplica un pulido a los objetos sostenidos en la _mano libre_ o tirados en el _suelo_ cuando se _miran_.", "item.create.builders_tea.tooltip": "TÉ DEL CONSTRUCTOR", - "item.create.builders_tea.tooltip.summary": "La bebida perfecta para empezar el día- _Motivante_ y _Saturante._", + "item.create.builders_tea.tooltip.summary": "La bebida perfecta para empezar el día. Motivante y saturante.", "item.create.refined_radiance.tooltip": "RESPLANDOR REFINADO", - "item.create.refined_radiance.tooltip.summary": "Material cromático forjado a partir de _luz absorbida_", + "item.create.refined_radiance.tooltip.summary": "Un material cromático forjado a partir de la _luz absorbida_.", + "item.create.refined_radiance.tooltip.condition1": "Trabajo en progreso", + "item.create.refined_radiance.tooltip.behaviour1": "Los usos para este material estarán disponibles en un próximo lanzamiento.", "item.create.shadow_steel.tooltip": "ACERO SOMBRÍO", - "item.create.shadow_steel.tooltip.summary": "Un material cromático forjado _en el vacío_", + "item.create.shadow_steel.tooltip.summary": "Un material cromático forjado en el _vacío_.", + "item.create.shadow_steel.tooltip.condition1": "Work In Progress", + "item.create.shadow_steel.tooltip.behaviour1": "Usages for this material will be available in a future release.", + + "item.create.linked_controller.tooltip": "CONTROLADOR ENLAZADO", + "item.create.linked_controller.tooltip.summary": "Permite el control manual de las frecuencias de _enlaces de redstone_ asignadas a sus seis botones..", + "item.create.linked_controller.tooltip.condition1": "Al hacer clic derecho", + "item.create.linked_controller.tooltip.behaviour1": "Activa el _controlador_. Los _controles de movimiento_ se adquieren mientras está activo.", + "item.create.linked_controller.tooltip.condition2": "Al usar [Mayús izdo.] + clic derecho", + "item.create.linked_controller.tooltip.behaviour2": "Abre la interfaz de configuración manual.", + "item.create.linked_controller.tooltip.condition3": "Al usar clic derecho en un receptor de enlaces de redstone", + "item.create.linked_controller.tooltip.behaviour3": "Activa el _modo de vinculación_, pulsa uno de los _seis controles_ para vincularlo a la _frecuencia de los enlaces_.", + + "item.create.diving_helmet.tooltip": "CASCO DE BUCEO", + "item.create.diving_helmet.tooltip.summary": "Junto con un _depósito trasero de cobre_, permite que el usuario pueda respirar bajo el agua durante un tiempo prolongado.", + "item.create.diving_helmet.tooltip.condition1": "Cuando se lleva puesto", + "item.create.diving_helmet.tooltip.behaviour1": "Proporciona el efecto de _respiración acuática_, drenando lentamente la presión de aire del _depósito trasero_.", + "item.create.copper_backtank.tooltip.condition2": "When placed, Powered by Kinetics", + "item.create.copper_backtank.tooltip.behaviour2": "_Collects_ _Pressurized_ _Air_ at a rate depending on the Rotational Speed.", + + "item.create.copper_backtank.tooltip": "DEPÓSITO TRASERO DE COBRE", + "item.create.copper_backtank.tooltip.summary": "Un tanque portátil para transportar _aire presurizado_.", + "item.create.copper_backtank.tooltip.condition1": "Cuando se lleva puesto", + "item.create.copper_backtank.tooltip.behaviour1": "Proporciona _aire presurizado_ a los equipos que lo requieran.", + "item.create.copper_backtank.tooltip.condition2": "Cuando se coloca y es alimentado por cinética", + "item.create.copper_backtank.tooltip.behaviour2": "Recoge _aire presurizado_ a un ritmo que depende de la velocidad rotacional.", + + "item.create.diving_boots.tooltip": "BOTAS DE BUCEO", + "item.create.diving_boots.tooltip.summary": "Un par de _botas_ pesadas, que permiten atravesar mejor el suelo del océano.", + "item.create.diving_boots.tooltip.condition1": "Cuando se llevan puestas", + "item.create.diving_boots.tooltip.behaviour1": "El portador se hunde rápido y no puede nadar. Concede la capacidad de caminar y saltar bajo el agua. Al portador no le afectarán las _correas mecánicas.", + + "item.create.crafting_blueprint.tooltip": "PLANO DE ELABORACIÓN", + "item.create.crafting_blueprint.tooltip.summary": "Colocado en una pared, puede utilizarse para especificar la disposición de los ingredientes para facilitar la elaboración manual. Cada ranura representa una receta", + "item.create.crafting_blueprint.condition1": "Al hacer clic derecho en una ranura vacía", + "item.create.crafting_blueprint.behaviour1": "Abre un menú que permite configurar una receta y los objetos a mostrar.", + "item.create.crafting_blueprint.condition2": "Al hacer clic derecho en una ranura configurada", + "item.create.crafting_blueprint.behaviour2": "Aplica la receta configurada con los ingredientes que se encuentran en tu inventario. Se puede utilizar para fabricar hasta una pila de objetos.", "item.create.minecart_coupling.tooltip": "ENSAMBLADOR DE VAGONETAS", - "item.create.minecart_coupling.tooltip.summary": "_Encadena_ todas tus _Vagonetas_ o _Artilugios de vagoneta_ para formar un majestuoso Tren", - "item.create.minecart_coupling.tooltip.condition1": "Cuando se utiliza en Vagonetas", - "item.create.minecart_coupling.tooltip.behaviour1": "_Acopla_ dos Vagonetas, intentando mantenerlas a una _distancia constante_ mientras se mueven", + "item.create.minecart_coupling.tooltip.summary": "_Encadena_ todas tus _vagonetas_ o _artilugios de vagoneta_ para formar un majestuoso _tren_.", + "item.create.minecart_coupling.tooltip.condition1": "Cuando se utiliza en vagonetas", + "item.create.minecart_coupling.tooltip.behaviour1": "_Acopla_ dos vagonetas, intentando mantenerlas a una _distancia constante_ mientras se mueven.", + + "block.create.peculiar_bell.tooltip": "PECULIAR BELL", + "block.create.peculiar_bell.tooltip.summary": "A decorative brass bell. Placing it above a _Soul Fire_ or _Soul Campfire_ may cause a spooky transformation to occur...", - "item.create.crafter_slot_cover.tooltip": "TAPA DE RANURA DEL AUTOENSAMBLADOR", - "item.create.crafter_slot_cover.tooltip.summary": "Se utiliza para marcar a un _Autoensamblador_ una ranura vacía en una receta. Los autoensambladores no tienen que formar necesariamente una cuadrícula completa. Esto es útil cuando hay recetas en las que los _ingredientes están en diagonal_ entre sí", + "block.create.cursed_bell.tooltip": "CURSED BELL", + "block.create.cursed_bell.tooltip.summary": "A spooky brass bell haunted by lost souls of the Nether.", + "block.create.cursed_bell.tooltip.condition1": "When Held or Rang", + "block.create.cursed_bell.tooltip.behaviour1": "Highlights nearby dark spots on which Hostile Mobs could spawn.", - "create.tooltip.wip": "WIP", - "create.tooltip.workInProgress": "¡Trabajo en curso!", - "create.tooltip.randomWipDescription0": "Por favor, mantenga este artículo fuera del alcance de los niños", - "create.tooltip.randomWipDescription1": "Un bebé panda muere cada vez que usas este objeto. Cada vez. Cada vez", - "create.tooltip.randomWipDescription2": "Úsalo bajo tu propio riesgo", - "create.tooltip.randomWipDescription3": "Este no es el objeto que buscas, *mueve los dedos* por favor, dispérsate", - "create.tooltip.randomWipDescription4": "Este objeto se autodestruirá en 10 segundos. 10, 9, 8...", - "create.tooltip.randomWipDescription5": "Créeme, es inútil", - "create.tooltip.randomWipDescription6": "Al utilizar este elemento, aceptas nuestra exención de responsabilidad y estás de acuerdo con sus términos", - "create.tooltip.randomWipDescription7": "Este quizás no es para ti. ¿Qué tal ese?", - "create.tooltip.randomWipDescription8": "Úsalo y arrepiéntete de tu decisión inmediatamente", + + "_": "->------------------------] Ponder Content [------------------------<-", + + "create.ponder.hold_to_ponder": "Mantén [%1$s] para considerar", + "create.ponder.subject": "Tema de esta escena", + "create.ponder.pondering": "Considerando sobre...", + "create.ponder.identify_mode": "Identificando modo activo.\nDespausea con [%1$s]", + "create.ponder.associated": "Entradas asociadas", + "create.ponder.close": "Cerrar", + "create.ponder.identify": "Identificar", + "create.ponder.next": "Escena siguiente", + "create.ponder.previous": "Escena previa", + "create.ponder.replay": "Repetición", + "create.ponder.think_back": "Volver atrás", + "create.ponder.slow_text": "Lectura cómoda", + "create.ponder.exit": "Exit", + "create.ponder.welcome": "Welcome to Ponder", + "create.ponder.categories": "Available Categories in Create", + "create.ponder.index_description": "Click one of the icons to learn about its associated Items and Blocks", + "create.ponder.index_title": "Ponder Index", + "create.ponder.shared.movement_anchors": "Con la ayuda de un chasis o pegamento, se pueden mover estructuras más grandes.", + "create.ponder.shared.rpm32": "32 RPM", + "create.ponder.shared.sneak_and": "Mayús izdo. +", + "create.ponder.shared.storage_on_contraption": "Los inventarios unidos al artilugio recogerán sus producciones automáticamente", + "create.ponder.shared.behaviour_modify_wrench": "Este comportamiento puede modificarse mediante una llave inglesa", + "create.ponder.shared.rpm8": "8 RPM", + "create.ponder.shared.ctrl_and": "Ctrl +", + "create.ponder.shared.rpm16_source": "Fuente: 16 RPM", + "create.ponder.shared.rpm16": "16 RPM", + "create.ponder.tag.kinetic_sources": "Fuentes cinéticas", + "create.ponder.tag.kinetic_sources.description": "Componentes que generan fuerza rotacional", + "create.ponder.tag.contraption_actor": "Actores del artilugio", + "create.ponder.tag.contraption_actor.description": "Componentes que exponen un comportamiento especial cuando están unidos a un artilugio en movimiento", + "create.ponder.tag.arm_targets": "Objetivos para los brazos mecánicos", + "create.ponder.tag.arm_targets.description": "Componentes que pueden seleccionarse como entradas o salidas del brazo mecánico", + "create.ponder.tag.logistics": "Transporte de objetos", + "create.ponder.tag.logistics.description": "Componentes que ayudan a desplazar los objetos", + "create.ponder.tag.movement_anchor": "Anclas de movimiento", + "create.ponder.tag.movement_anchor.description": "Componentes que permiten crear artilugios en movimiento, animando una estructura anexa de diversas maneras", + "create.ponder.tag.creative": "Modo creativo", + "create.ponder.tag.creative.description": "Componentes que no suelen estar disponibles para el Modo Supervivencia", + "create.ponder.tag.kinetic_relays": "Transmisores cinéticos", + "create.ponder.tag.kinetic_relays.description": "Componentes que ayudan a transmitir la fuerza rotacional en otro lugar", + "create.ponder.tag.windmill_sails": "Velas para los rodamientos de los molinos de viento", + "create.ponder.tag.windmill_sails.description": "Bloques que cuentan para la fuerza de un artefacto de molino de viento cuando se ensamblan. Cada uno de ellos tiene la misma eficacia al hacerlo.", + "create.ponder.tag.contraption_assembly": "Utilidades para adjuntar bloques", + "create.ponder.tag.contraption_assembly.description": "Herramientas y componentes utilizados para montar estructuras con movimiento, como un artilugio animado", + "create.ponder.tag.decoration": "Estética", + "create.ponder.tag.decoration.description": "Componentes utilizados principalmente con fines decorativos", + "create.ponder.tag.kinetic_appliances": "Dispositivos cinéticos", + "create.ponder.tag.kinetic_appliances.description": "Componentes que utilizan la fuerza rotacional", + "create.ponder.tag.redstone": "Componentes lógicos", + "create.ponder.tag.redstone.description": "Componentes que ayudan a la ingeniería de redstone", + "create.ponder.tag.fluids": "Manipuladores de fluidos", + "create.ponder.tag.fluids.description": "Componentes que ayudan a transportar y utilizar fluidos", + + "create.ponder.adjustable_pulse_repeater.header": "Controlar señales mediante repetidores de pulsos ajustables", + "create.ponder.adjustable_pulse_repeater.text_1": "Los repetidores de pulsos ajustables emiten un pulso corto con un retardo", + "create.ponder.adjustable_pulse_repeater.text_2": "Con la rueda del ratón se puede configurar el tiempo de carga", + "create.ponder.adjustable_pulse_repeater.text_3": "Los retrasos configurados pueden ser de hasta 30 minutos", + + "create.ponder.adjustable_repeater.header": "Controlar señales mediante repetidores ajustables", + "create.ponder.adjustable_repeater.text_1": "Los repetidores ajustables se comportan de forma similar a los repetidores normales", + "create.ponder.adjustable_repeater.text_2": "Se cargan durante un tiempo determinado...", + "create.ponder.adjustable_repeater.text_3": "...y se enfrían durante el mismo tiempo", + "create.ponder.adjustable_repeater.text_4": "Con la rueda del ratón se puede configurar el tiempo de carga", + "create.ponder.adjustable_repeater.text_5": "Los retrasos configurados pueden variar hasta 30 minutos", + + "create.ponder.analog_lever.header": "Controlar señales mediante la palanca analógica", + "create.ponder.analog_lever.text_1": "Las palancas analógicas son una fuente compacta y precisa de energía de redstone", + "create.ponder.analog_lever.text_2": "Haz clic derecho para aumentar su potencia analógica", + "create.ponder.analog_lever.text_3": "Usa [Mayús izdo.] + clic derecho para volver a disminuir su potencia", + + "create.ponder.andesite_tunnel.header": "Usar túneles de andesita", + "create.ponder.andesite_tunnel.text_1": "Los túneles de andesita se pueden utilizar para tapar las correas", + "create.ponder.andesite_tunnel.text_2": "Siempre que un túnel de andesita tenga conexiones a los lados...", + "create.ponder.andesite_tunnel.text_3": "...dividirá exactamente un elemento de cualquier pila que pase", + "create.ponder.andesite_tunnel.text_4": "El resto continuará su camino", + + "create.ponder.basin.header": "Procesar objetos en la cuenca", + "create.ponder.basin.text_1": "Una cuenca puede contener objetos y fluidos para su procesamiento", + "create.ponder.basin.text_2": "Después de un paso de procesamamiento, las cuencas intentan descargar por debajo a un lado de ellas", + "create.ponder.basin.text_3": "Cuando un ingrediente válido está presente, la cuenca mostrará un conducto de salida", + "create.ponder.basin.text_4": "Aquí se pueden aplicar varias opciones", + "create.ponder.basin.text_5": "Las salidas serán capturadas por el inventario que está por debajo", + "create.ponder.basin.text_6": "Sin conducto de salida, la cuenca retendrá los objetos creados en su procesamiento", + "create.ponder.basin.text_7": "Esto puede ser útil si las salidas deben ser reutilizadas como ingredientes", + "create.ponder.basin.text_8": "Las salidas deseadas tendrán que ser extraídas de la cuenca", + "create.ponder.basin.text_9": "Podría ser necesario un filtro para evitar sacar los objetos no procesados", + + "create.ponder.bearing_modes.header": "Modos de movimiento del rodamiento mecánico", + "create.ponder.bearing_modes.text_1": "Cuando se detenga, el rodamiento mecánico colocará la estructura en el ángulo más cercano alineado con la cuadrícula", + "create.ponder.bearing_modes.text_2": "Se puede configurar para que nunca vuelva a los bloques sólidos, o sólo cerca del ángulo en el que comenzó", + + "create.ponder.belt_casing.header": "Correas revestidas", + "create.ponder.belt_casing.text_1": "Se puede utilizar revestidor de latón o andesita para decorar las correas", + "create.ponder.belt_casing.text_2": "Se puede utilizar una llave inglesa para quitar el revestimiento", + + "create.ponder.belt_connector.header": "El uso de las correas mecánicas", + "create.ponder.belt_connector.text_1": "Al hacer clic derecho en dos ejes con una correa mecánica se conectarán entre sí", + "create.ponder.belt_connector.text_2": "Las selecciones accidentales pueden ser canceladas con [Mayús izdo.] + clic derecho", + "create.ponder.belt_connector.text_3": "Se pueden añadir ejes adicionales en toda la correa", + "create.ponder.belt_connector.text_4": "Los ejes conectados a través de correas girarán con velocidad y dirección idénticas", + "create.ponder.belt_connector.text_5": "Los ejes añadidos se pueden quitar con la llave inglesa", + "create.ponder.belt_connector.text_6": "Las correas mecánicas se pueden teñir con fines estéticos", + + "create.ponder.belt_directions.header": "Orientaciones válidas para las correas mecánicas", + "create.ponder.belt_directions.text_1": "Las correas mecánicas no pueden conectarse en direcciones arbitrarias", + "create.ponder.belt_directions.text_2": "1. Pueden conectarse horizontalmente", + "create.ponder.belt_directions.text_3": "2. Pueden conectarse en diagonal", + "create.ponder.belt_directions.text_4": "3. Pueden conectarse verticalmente", + "create.ponder.belt_directions.text_5": "4. Y pueden conectar ejes verticales horizontalmente", + "create.ponder.belt_directions.text_6": "Estas son todas las direcciones posibles. Pueden abarcar cualquier longitud entre 2 y 20 bloques", + + "create.ponder.belt_transport.header": "El uso de las correas mecánicas para la logística", + "create.ponder.belt_transport.text_1": "Las correas mecánicas transportan objetos y otras entidades", + "create.ponder.belt_transport.text_2": "Haz clic derecho con la mano vacía para sacar objetos de una 'cinta'", + + "create.ponder.blaze_burner.header": "Alimentar quemadores de blaze", + "create.ponder.blaze_burner.text_1": "Los quemadores de blaze pueden proporcionar calor a los objetos procesados en una cuenca", + "create.ponder.blaze_burner.text_2": "Para ello, el blaze tiene que ser alimentado con objetos inflamables", + "create.ponder.blaze_burner.text_3": "Con un pastel de blaze, el quemador puede alcanzar un mayor nivel de calor", + "create.ponder.blaze_burner.text_4": "El proceso de alimentación puede automatizarse utilizando desplegadores o brazos mecánicos", + + "create.ponder.brass_funnel.header": "El embudo de latón", + "create.ponder.brass_funnel.text_1": "Los embudos de andesita sólo pueden extraer objetos individuales", + "create.ponder.brass_funnel.text_2": "Los embudos de latón pueden extraer hasta una pila completa", + "create.ponder.brass_funnel.text_3": "Usar la rueda de desplazamiento del ratón en la ranura para filtros permite un control preciso del tamaño de la pila extraída.", + "create.ponder.brass_funnel.text_4": "El uso de objetos en la ranura de filtrado restringirá el embudo para transferir sólo las pilas que coincidan.", + + "create.ponder.brass_tunnel.header": "Usar túneles de latón", + "create.ponder.brass_tunnel.text_1": "Los túneles de latón pueden utilizarse para tapar las correas", + "create.ponder.brass_tunnel.text_2": "Tienen ranuras de filtro en cada lado abierto", + "create.ponder.brass_tunnel.text_3": "Los filtros en las conexiones de entrada simplemente bloquean los objetos que no coincidan", + "create.ponder.brass_tunnel.text_4": "Los filtros en las conexiones de salida pueden utilizarse para ordenar los objetos por tipo", + "create.ponder.brass_tunnel.text_5": "Siempre que un objeto de paso tenga múltiples salidas válidas, el modo de distribución decidirá cómo manejarlo", + "create.ponder.brass_tunnel.text_6": "Los túneles de latón en bandas paralelas formarán un grupo", + "create.ponder.brass_tunnel.text_7": "Los objetos entrantes se distribuirán ahora por todas las salidas conectadas", + "create.ponder.brass_tunnel.text_8": "Para ello, los objetos también pueden insertarse en el bloque del túnel directamente", + + "create.ponder.brass_tunnel_modes.header": "Modos de distribución del túnel de latón", + "create.ponder.brass_tunnel_modes.text_1": "Mediante una llave inglesa se puede configurar el comportamiento de distribución de los túneles de latón", + "create.ponder.brass_tunnel_modes.text_10": "'Sincronizar entradas' es una configuración única de los túneles de latón", + "create.ponder.brass_tunnel_modes.text_11": "Las entradas sólo pueden pasar si cada túnel del grupo tiene una en espera", + "create.ponder.brass_tunnel_modes.text_12": "Esto asegura que todas las correas afectadas suministren objetos al mismo tiempo", + "create.ponder.brass_tunnel_modes.text_2": "El modo División intentará distribuir la pila uniformemente entre las salidas disponibles", + "create.ponder.brass_tunnel_modes.text_3": "Si una salida no puede tomar más objetos, se saltará", + "create.ponder.brass_tunnel_modes.text_4": "El modo División forzada nunca saltará las salidas, y en su lugar esperará hasta que estén libres", + "create.ponder.brass_tunnel_modes.text_5": "El modo Round Robin mantiene las pilas enteras, y recorre las salidas de forma iterativa", + "create.ponder.brass_tunnel_modes.text_6": "Una vez más, si una salida no puede aceptar más objetos, se saltará", + "create.ponder.brass_tunnel_modes.text_7": "El modo Round Robin forzado nunca omite salidas", + "create.ponder.brass_tunnel_modes.text_8": "El modo Preferir el más cercano prioriza las salidas más cercanas a la ubicación de entrada de los objetos", + "create.ponder.brass_tunnel_modes.text_9": "El modo Aleatorizar distribuirá pilas enteras a salidas elegidas al azar", + + "create.ponder.cart_assembler.header": "Mover estructuras usando ensambladores de vagonetas", + "create.ponder.cart_assembler.text_1": "Los ensambladores de vagonetas montan estructuras adjuntas a las vagonetas que pasan", + "create.ponder.cart_assembler.text_2": "Sin una señal de redstone, desmonta los artilugios de vagoneta que pasan de nuevo en bloques", + "create.ponder.cart_assembler.text_3": "El uso de una llave inglesa en una vagoneta te permitirá llevar el artilugio a otro lugar", + + "create.ponder.cart_assembler_dual.header": "Ensamblajes de artilugios de vagoneta", + "create.ponder.cart_assembler_dual.text_1": "Siempre que dos ensambladores de vagoneta compartan una estructura adjunta...", + "create.ponder.cart_assembler_dual.text_2": "...al alimentar a cualquiera de ellos se creará un artilugio de vagoneta", + "create.ponder.cart_assembler_dual.text_3": "Las vagonetas se comportarán como las conectadas a través del acoplamiento de vagoneta", + + "create.ponder.cart_assembler_modes.header": "Configurar la orientación de los artilugios de vagonetas", + "create.ponder.cart_assembler_modes.text_1": "Los artilugios de vagonetas girarán para orientarse hacia el movimiento de sus vagonetas", + "create.ponder.cart_assembler_modes.text_2": "This Arrow indicates which side of the Structure will be considered the front", + "create.ponder.cart_assembler_modes.text_3": "If the Assembler is set to Lock Rotation, the contraptions' orientation will never change", + + "create.ponder.cart_assembler_rails.header": "Otros tipos de vagonetas y raíles", + "create.ponder.cart_assembler_rails.text_1": "Los ensambladores de vagonetas en raíles normales no afectarán el movimiento de las vagonetas que pasen", + "create.ponder.cart_assembler_rails.text_2": "Cuando se encuentre en un raíl motorizado o en un raíl de control, las vagonetas se mantendrán en su sitio hasta que sea motorizado", + "create.ponder.cart_assembler_rails.text_3": "Se pueden utilizar otros tipos de vagonetas como anclaje", + "create.ponder.cart_assembler_rails.text_4": "Los artilugios de vagonetas de horno se mantendrán alimentados a sí mismos, sacando combustible de cualquier inventario adjunto", + + "create.ponder.chain_drive.header": "Transmitir fuerza rotacional con las cadenas de transmisión", + "create.ponder.chain_drive.text_1": "Las cadenas de transmisión transmiten la rotación entre sí en fila", + "create.ponder.chain_drive.text_2": "Todos los ejes conectados así girarán en la misma dirección", + "create.ponder.chain_drive.text_3": "Cualquier parte de la fila puede girar 90 grados usando una llave inglesa", + + "create.ponder.chain_gearshift.header": "Controlar la velocidad de rotación con la cadena de transmisión ajustable", + "create.ponder.chain_gearshift.text_1": "Las cadenas de transmisión ajustables sin alimentación se comportan exactamente como las cadenas de transmisión", + "create.ponder.chain_gearshift.text_2": "Cuando están alimentadas, la velocidad transmitida a las demás cadenas de transmisión de la fila se duplica", + "create.ponder.chain_gearshift.text_3": "Siempre que la cadena de transmisión alimentada no esté en el origen, su velocidad se reducirá a la mitad", + "create.ponder.chain_gearshift.text_4": "En ambos casos, las cadenas de transmisión de la fila siempre funcionan a 2 veces la velocidad de la cadena de transmisión alimentada", + "create.ponder.chain_gearshift.text_5": "Utilizando señales analógicas, la relación puede ajustarse con mayor precisión, entre 1 y 2", + "create.ponder.chain_gearshift.text_6": "12 RPM", + + "create.ponder.chute.header": "Transportar objetos hacia abajo a través de ductos", + "create.ponder.chute.text_1": "Los ductos pueden transportar objetos verticalmente desde y hacia los inventarios", + "create.ponder.chute.text_2": "Usando la llave inglesa, se puede crear una ventana", + "create.ponder.chute.text_3": "Colocar ductos apuntando a las caras laterales de otro lo hará en diagonal", + + "create.ponder.chute_upward.header": "Transportar objetos hacia arriba mediante ductos", + "create.ponder.chute_upward.text_1": "Usando ventiladores revestidos en la parte superior o inferior, un ducto puede transportar objetos hacia arriba", + "create.ponder.chute_upward.text_2": "Al inspeccionar los ductos con las gafas del constructor, se revela información sobre la dirección del movimiento", + "create.ponder.chute_upward.text_3": "En el extremo 'bloqueado', los objetos tendrán que ser insertados/tomados de los lados", + + "create.ponder.clockwork_bearing.header": "Animar estructuras con rodamientos tipo reloj", + "create.ponder.clockwork_bearing.text_1": "Los rodamientos tipo reloj se fijan a los bloques que tienen delante", + "create.ponder.clockwork_bearing.text_2": "Al recibir fuerza rotacional, la estructura girará según la hora del día", + "create.ponder.clockwork_bearing.text_3": "3:00", + "create.ponder.clockwork_bearing.text_4": "4:00", + "create.ponder.clockwork_bearing.text_5": "Haz clic derecho en el rodamiento para iniciar o detener la animación de la estructura", + "create.ponder.clockwork_bearing.text_6": "Delante de la manecilla de las horas se puede añadir una segunda estructura", + "create.ponder.clockwork_bearing.text_7": "Asegúrese de que las dos estructuras no están unidas entre sí con pegamento o algo similar", + "create.ponder.clockwork_bearing.text_8": "La segunda estructura ahora girará como el minutero", + + "create.ponder.clutch.header": "Controlar la fuerza rotacional mediante un embrague", + "create.ponder.clutch.text_1": "Los embragues transmitirán la rotación en línea recta", + "create.ponder.clutch.text_2": "Cuando se alimentan con redstone, rompen la conexión", + + "create.ponder.cog_speedup.header": "Cambiar de marchas con engranajes", + "create.ponder.cog_speedup.text_1": "Los engranajes grandes y pequeños pueden conectarse en diagonal", + "create.ponder.cog_speedup.text_2": "Al cambiar de engranajes grandes a pequeños, la velocidad rotacional se duplicará", + "create.ponder.cog_speedup.text_3": "Inversamente, la velocidad rotacional se reducirá a la mitad", + + "create.ponder.cogwheel.header": "Transmitir fuerza rotacional mediante engranajes", + "create.ponder.cogwheel.text_1": "Los engranajes transmitirán la rotación a otros engranajes adyacentes", + "create.ponder.cogwheel.text_2": "Los ejes adyacentes conectados así, girarán en direcciones opuestas", + + "create.ponder.creative_fluid_tank.header": "Tanque de fluídos creativo", + "create.ponder.creative_fluid_tank.text_1": "Creative Fluid Tanks can be used to provide a bottomless supply of fluid", + "create.ponder.creative_fluid_tank.text_2": "Right-Click with a fluid containing item to configure it", + "create.ponder.creative_fluid_tank.text_3": "Pipe Networks can now endlessly draw the assigned fluid from the tank", + "create.ponder.creative_fluid_tank.text_4": "Any Fluids pushed back into a Creative Fluid Tank will be voided", + + "create.ponder.creative_motor.header": "Generar fuerza rotacional con motores creativos", + "create.ponder.creative_motor.text_1": "Los motores creativos son una fuente compacta y configurable de fuerza rotacional", + "create.ponder.creative_motor.text_2": "Usar la rueda de desplazamiento del ratón en su parte trasera cambia las RPM de la salida rotacional", + + "create.ponder.crushing_wheels.header": "Procesar objetos con las ruedas trituradoras", + "create.ponder.crushing_wheels.text_1": "Un par de ruedas trituradoras pueden moler objetos de forma muy eficaz", + "create.ponder.crushing_wheels.text_2": "Su fuerza rotacional tiene que hacerlas girar una contra otra", + "create.ponder.crushing_wheels.text_3": "Los objetos lanzados o insertados en la parte superior serán procesados", + "create.ponder.crushing_wheels.text_4": "Los objetos también pueden ser insertados y recogidos a través de medios automatizados", + + "create.ponder.deployer.header": "Usar el desplegador", + "create.ponder.deployer.text_1": "Dada la fuerza rotacional, un desplegador puede imitar las interacciones de los jugadores", + "create.ponder.deployer.text_10": "Haz clic derecho en el frente para darle un objeto a utilizar", + "create.ponder.deployer.text_11": "Los objetos también pueden ser insertados automáticamente", + "create.ponder.deployer.text_12": "Los desplegadores llevan una ranura de filtro", + "create.ponder.deployer.text_13": "Cuando se establece un filtro, sólo se activa mientras se mantiene un elemento coincidente", + "create.ponder.deployer.text_14": "Ahora sólo se pueden insertar los objetos que coincidan con el filtro...", + "create.ponder.deployer.text_15": "...y sólo se extraerán los objetos que no coincidan", + "create.ponder.deployer.text_2": "Siempre interactuará con la posición 2 bloques delante de sí mismo", + "create.ponder.deployer.text_3": "Los bloques situados directamente delante no lo obstruirán", + "create.ponder.deployer.text_4": "Los desplegadores pueden:", + "create.ponder.deployer.text_5": "Colocar bloques,", + "create.ponder.deployer.text_6": "Usar objetos,", + "create.ponder.deployer.text_7": "Activar bloques,", + "create.ponder.deployer.text_8": "Cosechar bloques", + "create.ponder.deployer.text_9": "Y atacar criaturas", + + "create.ponder.deployer_contraption.header": "Usar desplegadores en artilugios", + "create.ponder.deployer_contraption.text_1": "Siempre que los desplegadores se muevan como parte de un artilugio animado...", + "create.ponder.deployer_contraption.text_2": "Se activan en cada ubicación visitada, utilizando objetos de los inventarios de cualquier parte del artilugio", + "create.ponder.deployer_contraption.text_3": "La ranura para filtros se puede utilizar para especificar qué objetos tirar", + + "create.ponder.deployer_modes.header": "Modos del desplegador", + "create.ponder.deployer_modes.text_1": "Por defecto, un desplegador imita la interacción del clic derecho del ratón", + "create.ponder.deployer_modes.text_2": "Usando una llave inglesa, se puede configurar para imitar un clic izquierdo en su lugar", + + "create.ponder.deployer_processing.header": "Procesar objetos mediante desplegadores", + "create.ponder.deployer_processing.text_1": "Con un objeto de sujeción ajustado, los desplegadores pueden procesar los objetos proporcionados por debajo de ellos", + "create.ponder.deployer_processing.text_2": "Los objetos de entrada pueden soltarse o colocarse en un depósito bajo el desplegador", + "create.ponder.deployer_processing.text_3": "Cuando los objetos se proporcionan en una 'cinta'...", + "create.ponder.deployer_processing.text_4": "El desplegador los retendrá y procesará automáticamente", + + "create.ponder.deployer_redstone.header": "Controlar desplegadores con redstone", + "create.ponder.deployer_redstone.text_1": "Al controlar los desplegadores con redstone, éstos no se activarán", + "create.ponder.deployer_redstone.text_2": "Antes de detenerse, el desplegador terminará cualquier ciclo iniciado", + "create.ponder.deployer_redstone.text_3": "Por lo tanto, un pulso negativo puede ser utilizado para desencadenar exactamente un ciclo de activación", + + "create.ponder.depot.header": "Usar depósitos", + "create.ponder.depot.text_1": "Los depósitos pueden servir como objetos 'fijos' de la correa", + "create.ponder.depot.text_2": "Haz clic derecho para colocar o eliminar manualmente objetos del mismo", + "create.ponder.depot.text_3": "Al igual que las correas mecánicas, pueden proporcionar objetos para su procesamiento", + "create.ponder.depot.text_4": "...así como proporcionar objetos a los brazos mecánicos", + + "create.ponder.empty_blaze_burner.header": "Usar quemadores de blaze vacíos", + "create.ponder.empty_blaze_burner.text_1": "Haz clic derecho en un blaze con el quemador vacío para capturarlo", + "create.ponder.empty_blaze_burner.text_2": "Alternativamente, los blaze pueden ser recogidos de sus spawners directamente", + "create.ponder.empty_blaze_burner.text_3": "Ahora tienes una fuente de calor ideal para varias máquinas", + "create.ponder.empty_blaze_burner.text_4": "Por motivos estéticos, los quemadores de blaze vacíos también se pueden encender con pedernal y acero", + "create.ponder.empty_blaze_burner.text_5": "Sin embargo, no son adecuados para la calefacción industrial", + + "create.ponder.encased_fluid_pipe.header": "Revestir tuberías de fluídos", + "create.ponder.encased_fluid_pipe.text_1": "Copper Casing can be used to decorate Fluid Pipes", + "create.ponder.encased_fluid_pipe.text_2": "Aside from being conceiled, Encased Pipes are locked into their connectivity state", + "create.ponder.encased_fluid_pipe.text_3": "It will no longer react to any neighbouring blocks being added or removed", + + "create.ponder.fan_direction.header": "El flujo de aire de los ventiladores revestidos", + "create.ponder.fan_direction.text_1": "Los ventiladores revestidos utilizan la fuerza rotacional para crear una corriente de aire", + "create.ponder.fan_direction.text_2": "La fuerza y la dirección del flujo dependen de la fuerza rotacional suministrada", + + "create.ponder.fan_processing.header": "Procesar objetos mediante ventiladores revestidos", + "create.ponder.fan_processing.text_1": "Al pasar por lava, el flujo de aire se calienta", + "create.ponder.fan_processing.text_2": "Los objetos capturados en la zona serán fundidos", + "create.ponder.fan_processing.text_3": "Los artículos de comida arrojados aquí serán incinerados", + "create.ponder.fan_processing.text_4": "En su lugar, se debería utilizar una instalación de ahumado, usando fuego", + "create.ponder.fan_processing.text_5": "Los flujos de aire que pasan por el agua crean una instalación de lavado", + "create.ponder.fan_processing.text_6": "Se puede hacer un nuevo e interesante procesamiento con él", + "create.ponder.fan_processing.text_7": "La velocidad del ventilador NO afecta a la velocidad de procesamiento, sólo a su rango", + "create.ponder.fan_processing.text_8": "El procesamiento del ventilador también puede aplicarse a los objetos de los depósitos y las correas", + + "create.ponder.fan_source.header": "Generar fuerza rotacional mediante ventiladores revestidos", + "create.ponder.fan_source.text_1": "Los ventiladores orientados hacia una fuente de calor pueden proporcionar fuerza rotacional", + "create.ponder.fan_source.text_2": "Cuando se les da una señal de redstone, los ventiladores comenzarán a proporcionar fuerza", + + "create.ponder.fluid_pipe_flow.header": "Transportar fluidos mediante tuberías de cobre", + "create.ponder.fluid_pipe_flow.text_1": "Fluid Pipes can connect two or more fluid sources and targets", + "create.ponder.fluid_pipe_flow.text_2": "Using a wrench, a straight pipe segment can be given a window", + "create.ponder.fluid_pipe_flow.text_3": "Windowed pipes will not connect to any other adjacent pipe segments", + "create.ponder.fluid_pipe_flow.text_4": "Powered by Mechanical Pumps, the Pipes can transport Fluids", + "create.ponder.fluid_pipe_flow.text_5": "No fluid is being extracted at first", + "create.ponder.fluid_pipe_flow.text_6": "Once the flow connects them, the endpoints gradually transfer their contents", + "create.ponder.fluid_pipe_flow.text_7": "Thus, the Pipe blocks themselves never 'physically' contain any fluid", + + "create.ponder.fluid_pipe_interaction.header": "Drenaje y llenado de contenedores de fluidos", + "create.ponder.fluid_pipe_interaction.text_1": "Endpoints of a pipe network can interact with a variety of blocks", + "create.ponder.fluid_pipe_interaction.text_2": "Any block with fluid storage capabilities can be filled or drained", + "create.ponder.fluid_pipe_interaction.text_3": "Source blocks right in front of an open end can be picked up...", + "create.ponder.fluid_pipe_interaction.text_4": "...while spilling into empty spaces can create fluid sources", + "create.ponder.fluid_pipe_interaction.text_5": "Pipes can also extract fluids from a handful of other blocks directly", + + "create.ponder.fluid_tank_sizes.header": "Dimensiones de un depósito de fluidos", + "create.ponder.fluid_tank_sizes.text_1": "Fluid Tanks can be combined to increase the total capacity", + "create.ponder.fluid_tank_sizes.text_2": "Their base square can be up to 3 blocks wide...", + "create.ponder.fluid_tank_sizes.text_3": "...and grow in height by more than 30 additional layers", + "create.ponder.fluid_tank_sizes.text_4": "Using a Wrench, a tanks' window can be toggled", + + "create.ponder.fluid_tank_storage.header": "Almacenar fluidos en depósitos de fluidos", + "create.ponder.fluid_tank_storage.text_1": "Fluid Tanks can be used to store large amounts of fluid", + "create.ponder.fluid_tank_storage.text_2": "Pipe networks can push and pull fluids from any side", + "create.ponder.fluid_tank_storage.text_3": "The contained fluid can be measured by a Comparator", + "create.ponder.fluid_tank_storage.text_4": "However, in Survival Mode Fluids cannot be added or taken manually", + "create.ponder.fluid_tank_storage.text_5": "You can use Basins, Item Drains and Spouts to drain or fill fluid containing items", + + "create.ponder.flywheel.header": "Generar fuerza rotacional con la rueda de inercia", + "create.ponder.flywheel.text_1": "Las ruedas de inercia son necesarias para generar fuerza rotacional con el motor de horno", + "create.ponder.flywheel.text_2": "La fuerza rotacional proporcionada tiene una capacidad de estrés muy grande", + "create.ponder.flywheel.text_3": "El uso de un alto horno duplicará la eficiencia del motor", + + "create.ponder.funnel_compat.header": "Compatibilidades con el embudo", + "create.ponder.funnel_compat.text_1": "Los embudos deberían interactuar bien con un puñado de otros componentes", + "create.ponder.funnel_compat.text_2": "Sierras verticales", + "create.ponder.funnel_compat.text_3": "Depósitos", + "create.ponder.funnel_compat.text_4": "Drenadores de objetos", + + "create.ponder.funnel_direction.header": "Dirección de la transferencia", + "create.ponder.funnel_direction.text_1": "Colocado normalmente, extrae objetos del inventario", + "create.ponder.funnel_direction.text_2": "Colocado mientras pulsa [Mayús izdo.], pone objetos en el inventario", + "create.ponder.funnel_direction.text_3": "Usando una llave inglesa, el embudo puede ser volteado después de su colocación", + "create.ponder.funnel_direction.text_4": "Se aplicarán las mismas reglas para la mayoría de las orientaciones", + "create.ponder.funnel_direction.text_5": "Los embudos en las correas extraerán/insertarán dependiendo de su dirección de movimiento", + + "create.ponder.funnel_intro.header": "Usar embudos", + "create.ponder.funnel_intro.text_1": "Los embudos son ideales para transferir objetos desde y hacia los inventarios", + + "create.ponder.funnel_redstone.header": "Embudos alimentados con redstone", + "create.ponder.funnel_redstone.text_1": "La energía de redstone impedirá la actuación de cualquier embudo", + + "create.ponder.funnel_transfer.header": "Transferencia directa", + "create.ponder.funnel_transfer.text_1": "Los embudos no pueden transferir nunca entre inventarios cerrados directamente", + "create.ponder.funnel_transfer.text_2": "Los ductos o los ductos inteligentes podrían ser más adecuados para estos fines", + "create.ponder.funnel_transfer.text_3": "Lo mismo se aplica para el movimiento horizontal. Una correa mecánica debería ayudar aquí", + + "create.ponder.furnace_engine.header": "Generar fuerza rotacional con el motor de horno", + "create.ponder.furnace_engine.text_1": "Los motores de horno generan fuerza rotacional mientras su horno adjunto está funcionando", + "create.ponder.furnace_engine.text_2": "La fuerza rotacional proporcionada tiene una capacidad de estrés muy grande", + "create.ponder.furnace_engine.text_3": "El uso de un alto horno duplicará la eficiencia del motor", + + "create.ponder.gantry_carriage.header": "Usar carros de grúa", + "create.ponder.gantry_carriage.text_1": "Los carros de grúa pueden montarse y deslizarse a lo largo de un eje de grúa", + "create.ponder.gantry_carriage.text_2": "Las instalaciones de grúa pueden mover bloques adjuntos", + + "create.ponder.gantry_cascaded.header": "Grúas en cascada", + "create.ponder.gantry_cascaded.text_1": "Los ejes de grúas se unen a un carro de grúa sin necesidad de pegamento", + "create.ponder.gantry_cascaded.text_2": "Lo mismo se aplica a los carros de grúa en los ejes de grúas desplazados", + "create.ponder.gantry_cascaded.text_3": "Así, un sistema de grúas puede estar en cascada para cubrir múltiples ejes de movimiento", + + "create.ponder.gantry_direction.header": "Dirección del movimiento de la grúa", + "create.ponder.gantry_direction.text_1": "Los ejes de grúa pueden tener orientaciones opuestas", + "create.ponder.gantry_direction.text_2": "La dirección de movimiento de los carros de grúa depende de la orientación de sus ejes", + "create.ponder.gantry_direction.text_3": "...así como de su sentido de rotación", + "create.ponder.gantry_direction.text_4": "Se aplican las mismas reglas para la rotación propagada", + + "create.ponder.gantry_redstone.header": "Propagación de la potencia de la grúa", + "create.ponder.gantry_redstone.text_1": "Los ejes de grúa alimentados con redstone dejan de mover sus carros", + "create.ponder.gantry_redstone.text_2": "En su lugar, su fuerza rotacional se transmite al eje de salida de los carros", + + "create.ponder.gantry_shaft.header": "Usar ejes de grúa", + "create.ponder.gantry_shaft.text_1": "Los ejes de grúa forman la base de una instalación de grúas. Los carros adjuntos se moverán a lo largo de ellos", + "create.ponder.gantry_shaft.text_2": "Las instalaciones de grúas pueden mover los bloques adjuntos", + + "create.ponder.gearbox.header": "Transmitir fuerza rotacional mediante cajas de transmisión", + "create.ponder.gearbox.text_1": "Saltar entre ejes de rotación puede volverse voluminoso rápidamente", + "create.ponder.gearbox.text_2": "Una caja de transmisión es el equivalente más compacto de esta configuración", + "create.ponder.gearbox.text_3": "Los ejes giran en las direcciones reflejadas...", + "create.ponder.gearbox.text_4": "...esto quiere decir que las conexiones rectas se invierten", + + "create.ponder.gearshift.header": "Controlar la dirección rotacional mediante una caja de cambios", + "create.ponder.gearshift.text_1": "La caja de cambios transmitirá la rotación en línea recta", + "create.ponder.gearshift.text_2": "Cuando es alimentada con redstone, invierte la transmisión", + + "create.ponder.hand_crank.header": "Generar fuerza rotacional mediante manivelas", + "create.ponder.hand_crank.text_1": "Las manivelas pueden ser utilizadas para aplicar fuerza rotacional manualmente", + "create.ponder.hand_crank.text_2": "Mantén pulsado clic derecho para girar en sentido antihorario", + "create.ponder.hand_crank.text_3": "Su velocidad de transmisión es relativamente alta", + "create.ponder.hand_crank.text_4": "[Mayús izdo.] + clic derecho pulsado para girar en sentido horario", + + "create.ponder.hose_pulley.header": "Llenado y vaciado de fuentes mediante poleas de manguera", + "create.ponder.hose_pulley.text_1": "Hose Pulleys can be used to fill or drain large bodies of Fluid", + "create.ponder.hose_pulley.text_2": "With the Kinetic Input, the height of the pulleys' hose can be controlled", + "create.ponder.hose_pulley.text_3": "The Pulley retracts while the input rotation is inverted", + "create.ponder.hose_pulley.text_4": "On the opposite side, pipes can be connected", + "create.ponder.hose_pulley.text_5": "Attached pipe networks can either provide fluid to the hose...", + "create.ponder.hose_pulley.text_6": "...or pull from it, draining the pool instead", + "create.ponder.hose_pulley.text_7": "Fill and Drain speed of the pulley depends entirely on the fluid networks' throughput", + + "create.ponder.hose_pulley_infinite.header": "Llenado y drenaje pasivo de grandes masas de fluido", + "create.ponder.hose_pulley_infinite.text_1": "When deploying the Hose Pulley into a large enough ocean...", + "create.ponder.hose_pulley_infinite.text_2": "It will provide/dispose fluids without affecting the source", + "create.ponder.hose_pulley_infinite.text_3": "Pipe networks can limitlessly take fluids from/to such pulleys", + + "create.ponder.hose_pulley_level.header": "Nivel de llenado y vaciado de las poleas de las mangueras", + "create.ponder.hose_pulley_level.text_1": "While fully retracted, the Hose Pulley cannot operate", + "create.ponder.hose_pulley_level.text_2": "Draining runs from top to bottom", + "create.ponder.hose_pulley_level.text_3": "The surface level will end up just below where the hose ends", + "create.ponder.hose_pulley_level.text_4": "Filling runs from bottom to top", + "create.ponder.hose_pulley_level.text_5": "The filled pool will not grow beyond the layer above the hose end", + + "create.ponder.item_drain.header": "Vaciar contenedores de fluidos mediante drenajes de objetos", + "create.ponder.item_drain.text_1": "Item Drains can extract fluids from items", + "create.ponder.item_drain.text_2": "Right-click it to pour fluids from your held item into it", + "create.ponder.item_drain.text_3": "When items are inserted from the side...", + "create.ponder.item_drain.text_4": "...they roll across, emptying out their contained fluid", + "create.ponder.item_drain.text_5": "Pipe Networks can now pull the fluid from the drains' internal buffer", + + "create.ponder.large_cogwheel.header": "Transmitir fuerza rotacional mediante engranajes grandes", + "create.ponder.large_cogwheel.text_1": "Los engranajes grandes pueden conectarse entre sí en ángulo recto", + "create.ponder.large_cogwheel.text_2": "Ayudarán a transmitir la velocidad transportada a otros ejes de rotación.", + + "create.ponder.linear_chassis_attachment.header": "Fijar bloques mediante el chasis lineal", + "create.ponder.linear_chassis_attachment.text_1": "Las caras abiertas de un chasis lineal pueden hacerse pegajosas", + "create.ponder.linear_chassis_attachment.text_2": "Haz clic de nuevo para que se pegue el lado opuesto", + "create.ponder.linear_chassis_attachment.text_3": "[Mayús izdo.] + clic derecho con la mano vacía para eliminar el pegamento", + "create.ponder.linear_chassis_attachment.text_4": "Las caras pegadas del chasis lineal fijarán una línea de bloques delante de él", + "create.ponder.linear_chassis_attachment.text_5": "Utilizando una llave inglesa, se puede especificar un rango preciso", + "create.ponder.linear_chassis_attachment.text_6": "Manteniendo pulsada la tecla [Ctrl] y usando la rueda central del ratón, se ajusta el rango de todos los bloques de chasis adjuntos", + "create.ponder.linear_chassis_attachment.text_7": "Para fijar los bloques a cualquier otro lado es necesario utilizar pegamento", + "create.ponder.linear_chassis_attachment.text_8": "Utilizando esta mecánica, las estructuras de cualquier forma pueden moverse como un artilugio", + + "create.ponder.linear_chassis_group.header": "Mover chasis lineales en grupos", + "create.ponder.linear_chassis_group.text_1": "Los chasis lineales se conectan a los bloques de chasis idénticos que se encuentren a su lado", + "create.ponder.linear_chassis_group.text_2": "Cuando uno es movido por un artilugio, los otros son arrastrados con él", + "create.ponder.linear_chassis_group.text_3": "Los chasis de otro tipo u orientados en otra dirección no se fijan", + + "create.ponder.mechanical_arm.header": "Configurar los brazos mecánicos", + "create.ponder.mechanical_arm.text_1": "A los brazos mecánicos hay que asignarles sus entradas y salidas antes de colocarlos", + "create.ponder.mechanical_arm.text_2": "Clic derecho en los inventarios mientras mantiene el brazo mecánico para asignarlos como objetivos", + "create.ponder.mechanical_arm.text_3": "Clic derecho denuevo para alternar entre la entrada (azul) y la salida (naranja)", + "create.ponder.mechanical_arm.text_4": "Clic izquierdo en los componentes para eliminar su selección", + "create.ponder.mechanical_arm.text_5": "Una vez colocado, el brazo mecánico apuntará a los bloques seleccionados previamente", + "create.ponder.mechanical_arm.text_6": "Pueden tener cualquier cantidad de entradas y salidas dentro de su rango", + "create.ponder.mechanical_arm.text_7": "Sin embargo, no se puede interactuar directamente con todos los tipos de inventario", + "create.ponder.mechanical_arm.text_8": "Los embudos y depósitos pueden ayudar a salvar esa distancia", + + "create.ponder.mechanical_arm_filtering.header": "Filtrar salidas del brazo mecánico", + "create.ponder.mechanical_arm_filtering.text_1": "Entradas", + "create.ponder.mechanical_arm_filtering.text_2": "Salidas", + "create.ponder.mechanical_arm_filtering.text_3": "A veces es conveniente restringir los objetivos del brazo mecánico haciendo coincidir un filtro", + "create.ponder.mechanical_arm_filtering.text_4": "Por sí mismos no ofrecen ninguna opción de filtrado", + "create.ponder.mechanical_arm_filtering.text_5": "Sin embargo, los embudos de latón como objetivos comunican su propio filtro al brazo", + "create.ponder.mechanical_arm_filtering.text_6": "El brazo mecánico es lo suficientemente inteligente como para no recoger objetos que no podría distribuir", + + "create.ponder.mechanical_arm_modes.header": "Modos de distribución del brazo mecánico", + "create.ponder.mechanical_arm_modes.text_1": "Entradas", + "create.ponder.mechanical_arm_modes.text_2": "Salidas", + "create.ponder.mechanical_arm_modes.text_3": "Siempre que un brazo tenga que elegir entre varias salidas válidas...", + "create.ponder.mechanical_arm_modes.text_4": "...funcionará según su configuración", + "create.ponder.mechanical_arm_modes.text_5": "Usando la rueda del ratón con una llave inglesa te permitirá configurarlo", + "create.ponder.mechanical_arm_modes.text_6": "El modo Round Robin simplemente hace un ciclo a través de todas las salidas que están disponibles", + "create.ponder.mechanical_arm_modes.text_7": "Si una salida no puede admitir más objetos, se omitirá", + "create.ponder.mechanical_arm_modes.text_8": "El modo Round Robin forzado nunca omitirá las salidas, sino que esperará a que estén libres", + "create.ponder.mechanical_arm_modes.text_9": "Preferir el primero da prioridad a las salidas seleccionadas anteriormente al configurar este brazo", + + "create.ponder.mechanical_arm_redstone.header": "Controlar brazos mecánicos con redstone", + "create.ponder.mechanical_arm_redstone.text_1": "Cuando se alimentan con redstone, los brazos mecánicos no se activan", + "create.ponder.mechanical_arm_redstone.text_2": "Antes de detenerse, terminará los ciclos iniciados", + "create.ponder.mechanical_arm_redstone.text_3": "Así, un pulso negativo puede utilizarse para activar exactamente un ciclo de activación", + + "create.ponder.mechanical_bearing.header": "Mover estructuras mediante el rodamiento mecánico", + "create.ponder.mechanical_bearing.text_1": "Los rodamientos mecánicos se fijan al bloque que tienen delante", + "create.ponder.mechanical_bearing.text_2": "Al recibir fuerza rotacional, la ensamblará en un artilugio giratorio", + + "create.ponder.mechanical_crafter.header": "Configurar ensambladores mecánicos", + "create.ponder.mechanical_crafter.text_1": "Se puede utilizar una serie de ensambladores mecánicos para automatizar cualquier receta de elaboración.", + "create.ponder.mechanical_crafter.text_2": "Usando una llave inglesa, puedes establecer los caminos de los ensambladores ", + "create.ponder.mechanical_crafter.text_3": "Para que la configuración sea válida, todos los caminos tienen que converger en una salida, en cualquiera de los lados", + "create.ponder.mechanical_crafter.text_4": "Los puertos de salida de objetos se colocarán en un inventario a la salida", + "create.ponder.mechanical_crafter.text_5": "Los ensambladores mecánicos requieren fuerza rotacional para funcionar", + "create.ponder.mechanical_crafter.text_6": "Haga clic derecho en la parte delantera para insertar objetos manualmente", + "create.ponder.mechanical_crafter.text_7": "Una vez que cada ranura de una ruta contenga un objeto, comenzará el proceso de elaboración", + "create.ponder.mechanical_crafter.text_8": "Para las recetas que no ocupen totalmente la instalación del ensamblador, se puede forzar el arranque utilizando un pulso de redstone", + + "create.ponder.mechanical_crafter_connect.header": "Conectar inventarios a los ensambladores mecánicos", + "create.ponder.mechanical_crafter_connect.text_1": "Los objetos pueden ser insertados a los ensambladores mecánicos automáticamente", + "create.ponder.mechanical_crafter_connect.text_2": "Utilizando la llave inglesa a sus espaldas, las entradas pueden combinarse", + "create.ponder.mechanical_crafter_connect.text_3": "Ahora se puede acceder a todos los ensambladores mecánicos conectados por la misma ubicación de entrada", + + "create.ponder.mechanical_crafter_covers.header": "Cubrir las ranuras de los ensambladores mecánicos", + "create.ponder.mechanical_crafter_covers.text_1": "Algunas recetas requerirán ensambladores mecánicos adicionales para salvar las brechas en el camino", + "create.ponder.mechanical_crafter_covers.text_2": "Utilizando las tapas de ranuras del ensamblador mecánico, pueden actuar como una ranura vacía a su disposición", + "create.ponder.mechanical_crafter_covers.text_3": "Las entradas compartidas creadas con la llave inglesa en la parte posterior también pueden llegar a través de los ensambladores revestidos", + + "create.ponder.mechanical_drill.header": "Romper bloques con el taladro mecánico", + "create.ponder.mechanical_drill.text_1": "Cuando se le aplica fuerza rotacional, el taladro mecánico rompe los bloques que tiene delante.", + "create.ponder.mechanical_drill.text_2": "Su velocidad de trabajo depende de la fuerza rotacional suministrada", + + "create.ponder.mechanical_drill_contraption.header": "Usar taladros mecánicos en artilugios", + "create.ponder.mechanical_drill_contraption.text_1": "Siempre que los taladros mecánicos se muevan como parte de un artilugio animado...", + "create.ponder.mechanical_drill_contraption.text_2": "...romperán los bloques por los que artilugio los hace pasar", + + "create.ponder.mechanical_harvester.header": "Utilizar cosechadoras mecánicas en artilugios", + "create.ponder.mechanical_harvester.text_1": "Siempre que las cosechadoras mecánicas se muevan como parte de un artilugio animado...", + "create.ponder.mechanical_harvester.text_2": "...recogerán y repondrán los cultivos maduros en su camino", + + "create.ponder.mechanical_mixer.header": "Procesar objetos con la mezcladora mecánica", + "create.ponder.mechanical_mixer.text_1": "Con una mezcladora mecánica y una cuenca, se pueden automatizar algunas recetas", + "create.ponder.mechanical_mixer.text_2": "Las recetas disponibles incluyen cualquier receta de elaboración amorfa, además de un par de recetas adicionales", + "create.ponder.mechanical_mixer.text_3": "Algunas de esas recetas pueden requerir el calor de un quemador de blaze", + "create.ponder.mechanical_mixer.text_4": "La ranura para filtros se puede utilizar en caso de que dos recetas sean conflictivas.", + + "create.ponder.mechanical_piston.header": "Mover estructuras mediante pistones mecánicos", + "create.ponder.mechanical_piston.text_1": "Los pistones mecánicos pueden mover los bloques que tienen delante", + "create.ponder.mechanical_piston.text_2": "La velocidad y la dirección del movimiento dependen de la fuerza rotacional suministrada", + "create.ponder.mechanical_piston.text_3": "Los pistones mecánicos pegajosos pueden tirar de los bloques unidos hacia atrás", + + "create.ponder.mechanical_piston_modes.header": "Modos de movimiento del pistón mecánico", + "create.ponder.mechanical_piston_modes.text_1": "Cuando los pistones mecánicos dejan de moverse, la estructura movida vuelve a los bloques", + "create.ponder.mechanical_piston_modes.text_2": "Puede configurarse para que no vuelva nunca a los bloques sólidos, o sólo en la ubicación en la que comenzó", + + "create.ponder.mechanical_plough.header": "Utilizar arados mecánicos en los artilugios", + "create.ponder.mechanical_plough.text_1": "Cuando los arados mecánicos se mueven como parte de un artilugio animado...", + "create.ponder.mechanical_plough.text_2": "...romperán los bloques sin un hitbox de colisión sólido", + "create.ponder.mechanical_plough.text_3": "Además, pueden crear tierras de cultivo", + "create.ponder.mechanical_plough.text_4": "...también pueden lanzar entidades sin dañarlas", + + "create.ponder.mechanical_press.header": "Procesar objetos con la prensa mecánica", + "create.ponder.mechanical_press.text_1": "La prensa mecánica puede procesar los objetos proporcionados por debajo de ella", + "create.ponder.mechanical_press.text_2": "Los objetos de entrada pueden soltarse o colocarse en un depósito bajo la prensa", + "create.ponder.mechanical_press.text_3": "Cuando los objetos se proporcionan en una 'cinta'...", + "create.ponder.mechanical_press.text_4": "...la prensa mecánica los retendrá y procesará automáticamente", + + "create.ponder.mechanical_press_compacting.header": "Compactar objetos con la prensa mecánica", + "create.ponder.mechanical_press_compacting.text_1": "Al presionar los objetos que se encuentran en una cuenca, éstos se compactan.", + "create.ponder.mechanical_press_compacting.text_2": "La compactación incluye cualquier receta de elaboración de 2x2 o 3x3 rellena, además de un par extra", + "create.ponder.mechanical_press_compacting.text_3": "Algunas de esas recetas pueden requerir el calor de un quemador de blaze", + "create.ponder.mechanical_press_compacting.text_4": "La ranura para filtros se puede utilizar en caso de que dos recetas sean conflictivas.", + + "create.ponder.mechanical_pump_flow.header": "Transportar fluidos mediante bombas mecánicas", + "create.ponder.mechanical_pump_flow.text_1": "Mechanical Pumps govern the flow of their attached pipe networks", + "create.ponder.mechanical_pump_flow.text_2": "When powered, their arrow indicates the direction of flow", + "create.ponder.mechanical_pump_flow.text_3": "The network behind is now pulling fluids...", + "create.ponder.mechanical_pump_flow.text_4": "...while the network in front is transferring it outward", + "create.ponder.mechanical_pump_flow.text_5": "Reversing the input rotation reverses the direction of flow", + "create.ponder.mechanical_pump_flow.text_6": "Use a Wrench to reverse the orientation of pumps manually", + + "create.ponder.mechanical_pump_speed.header": "Rendimiento de las bombas mecánicas", + "create.ponder.mechanical_pump_speed.text_1": "Regardless of speed, Mechanical Pumps affect pipes connected up to 16 blocks away", + "create.ponder.mechanical_pump_speed.text_2": "Speeding up the input rotation changes the speed of flow propagation...", + "create.ponder.mechanical_pump_speed.text_3": "...aswell as how quickly fluids are transferred", + "create.ponder.mechanical_pump_speed.text_4": "Pumps can combine their throughputs within shared pipe networks", + "create.ponder.mechanical_pump_speed.text_5": "Alternating their orientation can help align their flow directions", + + "create.ponder.mechanical_saw_breaker.header": "Cortar árboles con la sierra mecánica", + "create.ponder.mechanical_saw_breaker.text_1": "Cuando se le da una fuerza rotacional, la sierra mecánica cortará los árboles que estén directamente frente a ella", + "create.ponder.mechanical_saw_breaker.text_2": "Para poder cortar el árbol por completo, la sierra tiene que romper el último bloque que lo une al suelo", + + "create.ponder.mechanical_saw_contraption.header": "Utilizar sierras mecánicas en artilugios", + "create.ponder.mechanical_saw_contraption.text_1": "Cuando las sierras mecánicas se mueven como parte de un artilugio animado...", + "create.ponder.mechanical_saw_contraption.text_2": "...cortarán cualquier árbol con el que el artilugio se tope", + + "create.ponder.mechanical_saw_processing.header": "Procesar objetos en la sierra mecánica", + "create.ponder.mechanical_saw_processing.text_1": "Las sierras mecánicas orientadas hacia arriba pueden procesar una variedad de objetos", + "create.ponder.mechanical_saw_processing.text_2": "El objeto procesado siempre se mueve en contra de la fuerza rotacional de la sierra", + "create.ponder.mechanical_saw_processing.text_3": "Las sierras mecánicas pueden trabajar en línea con las correas mecánicas", + "create.ponder.mechanical_saw_processing.text_4": "Cuando un ingrediente tiene varios resultados posibles, la ranura para filtros puede especificarlo", + "create.ponder.mechanical_saw_processing.text_5": "Sin filtro, al contrario, la sierra mecánica pasaría por todos los resultados", + + "create.ponder.millstone.header": "Procesar objetos en la piedra de molino", + "create.ponder.millstone.text_1": "Las piedras de molino procesan los objetos mediante la molienda", + "create.ponder.millstone.text_2": "Se pueden accionar lateralmente mediante engranajes...", + "create.ponder.millstone.text_3": "... y tirar o insertar objetos en la parte superior", + "create.ponder.millstone.text_4": "Después de un tiempo, el resultado se puede obtener usando el clic derecho del ratón", + "create.ponder.millstone.text_5": "Las salidas también pueden extraerse mediante la automatización", + + "create.ponder.nixie_tube.header": "Usar los tubos Nixie", + "create.ponder.nixie_tube.text_1": "Cuando son alimentados con redstone, los tubos nixie mostrarán la fuerza de las señales de redstone", + "create.ponder.nixie_tube.text_2": "Con las etiquetas editadas en un yunque, pueden mostar un texto personalizado", + + "create.ponder.piston_pole.header": "Pértigas de extensión de pistones", + "create.ponder.piston_pole.text_1": "Sin las pértigas de extensión unidas, un pistón mecánico no puede moverse", + "create.ponder.piston_pole.text_2": "La longitud de la pértiga añadida en su parte posterior determina el rango de alcance", + + "create.ponder.portable_fluid_interface.header": "Interfaz de fluidos portátil", + "create.ponder.portable_fluid_interface.text_1": "Fluid Tanks on moving contraptions cannot be accessed by any pipes", + "create.ponder.portable_fluid_interface.text_2": "This component can interact with fluid tanks without the need to stop the contraption", + "create.ponder.portable_fluid_interface.text_3": "Place a second one with a gap of 1 or 2 blocks inbetween", + "create.ponder.portable_fluid_interface.text_4": "Whenever they pass by each other, they will engage in a connection", + "create.ponder.portable_fluid_interface.text_5": "While engaged, the stationary interface will represent ALL Tanks on the contraption", + "create.ponder.portable_fluid_interface.text_6": "Fluid can now be inserted...", + "create.ponder.portable_fluid_interface.text_7": "...or extracted from the contraption", + "create.ponder.portable_fluid_interface.text_8": "After no contents have been exchanged for a while, the contraption will continue on its way", + + "create.ponder.portable_storage_interface.header": "Interfaz de almacenamiento portátil", + "create.ponder.portable_storage_interface.text_1": "Los jugadores no pueden acceder a los inventarios de los artilugios en movimiento.", + "create.ponder.portable_storage_interface.text_2": "Este componente puede interactuar con el almacenamiento sin necesidad de detener el artilugio.", + "create.ponder.portable_storage_interface.text_3": "Coloca una segunda unidad con un espacio de 1 o 2 bloques entre ellas", + "create.ponder.portable_storage_interface.text_4": "Cada vez que pasen por delante del otro, entablarán una conexión", + "create.ponder.portable_storage_interface.text_5": "Mientras esté conectada, la interfaz fija representará TODOS los inventarios del artilugio", + "create.ponder.portable_storage_interface.text_6": "Ahora pueden insertarse objetos...", + "create.ponder.portable_storage_interface.text_7": "...o extraerse", + "create.ponder.portable_storage_interface.text_8": "Cuando no se hayan intercambiado objetos durante un tiempo, el artilugio seguirá su camino", + + "create.ponder.portable_storage_interface_redstone.header": "Interfaz de almacenamiento portátil controlada por redstone", + "create.ponder.portable_storage_interface_redstone.text_1": "La energía de redstone impedirá que las interfaces de almacenamiento portátil se conecten", + + "create.ponder.powered_latch.header": "Controlar señales mediante la palanca motorizada", + "create.ponder.powered_latch.text_1": "Las palancas motorizadas son palancas controlables por redstone", + "create.ponder.powered_latch.text_2": "Las señales en la parte trasera la encienden", + "create.ponder.powered_latch.text_3": "Las señales sobre un lateral la vuelven a apagar", + "create.ponder.powered_latch.text_4": "Las palancas motorizadas también se pueden accionar manualmente", + + "create.ponder.powered_toggle_latch.header": "Controlar señales mediante la palanca de cierre motorizada", + "create.ponder.powered_toggle_latch.text_1": "Las palancas de cierre motorizadas son palancas controlables por redstone", + "create.ponder.powered_toggle_latch.text_2": "Las señales en la parte trasera cambiarán su estado...", + "create.ponder.powered_toggle_latch.text_3": "...encender y apagar", + "create.ponder.powered_toggle_latch.text_4": "Las palancas de cierre motorizadas también se pueden accionar manualmente", + + "create.ponder.pulse_repeater.header": "Controlar señales mediante repetidores de pulsos", + "create.ponder.pulse_repeater.text_1": "Los repetidores de pulsos acortan cualquier señal de redstone a un solo pulso", + + "create.ponder.radial_chassis.header": "Fijar bloques mediante chasis radiales", + "create.ponder.radial_chassis.text_1": "Los chasis radiales se conectan a bloques de chasis idénticos en una fila", + "create.ponder.radial_chassis.text_2": "Cuando uno es movido por un artilugio, los otros son arrastrados con él", + "create.ponder.radial_chassis.text_3": "Las caras laterales de un chasis radial pueden hacerse adhesivas", + "create.ponder.radial_chassis.text_4": "Haga clic de nuevo para que todos los demás lados sean pegajosos", + "create.ponder.radial_chassis.text_5": "[Mayús izdo.] + clic derecho con la mano vacía para eliminar el pegamento", + "create.ponder.radial_chassis.text_6": "Cada vez que un bloque está junto a una cara pegajosa...", + "create.ponder.radial_chassis.text_7": "...adjuntará todos los bloques alcanzables dentro de un radio en esa capa", + "create.ponder.radial_chassis.text_8": "Con una llave inglesa y usando la rueda de desplazamiento del ratón se puede especificar un radio preciso", + "create.ponder.radial_chassis.text_9": "Los bloques no alcanzables por ninguna cara adhesiva no se fijarán", + + "create.ponder.redstone_contact.header": "Contactos de redstone", + "create.ponder.redstone_contact.text_1": "Los contactos de redstone enfrentados emitirán una señal de redstone", + "create.ponder.redstone_contact.text_2": "Esto sigue siendo válido cuando uno de ellos forma parte de un artilugio en movimiento", + + "create.ponder.redstone_link.header": "Usar los enlaces de redstone", + "create.ponder.redstone_link.text_1": "Los enlaces de redstone pueden transmitir señales redstone de forma inalámbrica", + "create.ponder.redstone_link.text_2": "[Mayús izdo.] + clic derecho para cambiar el modo de recepción", + "create.ponder.redstone_link.text_3": "Un simple clic derecho con una llave inglesa puede hacer lo mismo", + "create.ponder.redstone_link.text_4": "Los receptores emiten la potencia de redstone de los transmisores en 128 bloques", + "create.ponder.redstone_link.text_5": "Colocando objetos en las dos ranuras puede especificar una frecuencia", + "create.ponder.redstone_link.text_6": "Sólo se comunicarán los enlaces con frecuencias coincidentes", + + "create.ponder.rope_pulley.header": "Mover estructuras con poleas de cuerda", + "create.ponder.rope_pulley.text_1": "Las poleas de cuerda pueden mover los bloques verticalmente cuando se les aplica una fuerza rotacional", + "create.ponder.rope_pulley.text_2": "La dirección y la velocidad del movimiento dependen de la fuerza rotacional suministrada", + + "create.ponder.rope_pulley_attachment.header": "Mover poleas como parte de un artilugio", + "create.ponder.rope_pulley_attachment.text_1": "Siempre que las poleas de cuerda sean movidas por un artilugio...", + "create.ponder.rope_pulley_attachment.text_2": "...su estructura adjunta será arrastrada con ella", + "create.ponder.rope_pulley_attachment.text_3": "Tenga en cuenta que las poleas de cuerda sólo se mueven cuando están paradas", + + "create.ponder.rope_pulley_modes.header": "Modos de movimiento de la polea de cuerda", + "create.ponder.rope_pulley_modes.text_1": "Cuando las poleas de cuerda dejan de moverse, la estructura movida vuelve a los bloques", + "create.ponder.rope_pulley_modes.text_2": "Puede configurarse para que no vuelva nunca a los bloques sólidos, o sólo en la ubicación en la que comenzó", + + "create.ponder.rotation_speed_controller.header": "Usar el controlador de velocidad rotacional", + "create.ponder.rotation_speed_controller.text_1": "Los controladores de velocidad rotacional transmiten la rotación de su eje a un engranaje grande situado encima.", + "create.ponder.rotation_speed_controller.text_2": "Utilizando la rueda de desplazamiento del ratón, puede configurarse la velocidad rotacional", + + "create.ponder.sail.header": "Montar molinos de viento usando velas", + "create.ponder.sail.text_1": "Las velas son bloques muy útiles para crear molinos de viento", + "create.ponder.sail.text_2": "Se fijarán a los bloques y entre sí sin necesidad de pegamento o bloques de chasis", + "create.ponder.sail.text_3": "Clic derecho con un tinte para pintarlas", + "create.ponder.sail.text_4": "Clic derecho con una tijera para volver a convertirlas en marcos", + + "create.ponder.sail_frame.header": "Montar molinos de viento con marcos de vela", + "create.ponder.sail_frame.text_1": "Los marcos de vela son prácticos bloques para crear molinos de viento", + "create.ponder.sail_frame.text_2": "Se fijarán a los bloques y entre sí sin necesidad de pegamento o bloques de chasis", + + "create.ponder.sequenced_gearshift.header": "Controlar la velocidad de rotación mediante la caja de cambios secuenciales", + "create.ponder.sequenced_gearshift.text_1": "La caja de cambios secuencial retransmite la rotación siguiendo una lista cronometrada de instrucciones", + "create.ponder.sequenced_gearshift.text_2": "Haga clic con el botón derecho para abrir la interfaz de configuración", + "create.ponder.sequenced_gearshift.text_3": "Al recibir una señal de redstone, comenzará a ejecutar su secuencia configurada", + "create.ponder.sequenced_gearshift.text_4": "Una vez terminado, espera la siguiente señal de redstone y vuelve a empezar", + "create.ponder.sequenced_gearshift.text_5": "Se puede utilizar un comparador de redstone para leer el progreso actual", + + "create.ponder.shaft.header": "Transmitir fuerza rotacional mediante ejes", + "create.ponder.shaft.text_1": "Los ejes transmiten la rotación en línea recta.", + + "create.ponder.shaft_casing.header": "Ejes revestidos", + "create.ponder.shaft_casing.text_1": "Puedes utilizar el revestidor de latón o de andesita para decorar tus ejes", + + "create.ponder.smart_chute.header": "Filtrar objetos mediante ductos inteligentes", + "create.ponder.smart_chute.text_1": "Los ductos inteligentes son ductos verticales con control adicional", + "create.ponder.smart_chute.text_2": "Los objetos en la ranura para filtros especifican lo que pueden extraer y transferir exactamente", + "create.ponder.smart_chute.text_3": "Usa la rueda del ratón para especificar el tamaño de la pila extraída", + "create.ponder.smart_chute.text_4": "La energía de redstone impedirá que funcionen.", + + "create.ponder.smart_pipe.header": "Controlar el flujo de fluidos mediante tuberías inteligentes", + "create.ponder.smart_pipe.text_1": "Smart pipes can help control flows by fluid type", + "create.ponder.smart_pipe.text_2": "When placed directly at the source, they can specify the type of fluid to extract", + "create.ponder.smart_pipe.text_3": "Simply Right-Click their filter slot with any item containing the desired fluid", + "create.ponder.smart_pipe.text_4": "When placed further down a pipe network, smart pipes will only let matching fluids continue", + + "create.ponder.speedometer.header": "Controlar la información cinética mediante el velocímetro", + "create.ponder.speedometer.text_1": "El velocímetro muestra la velocidad actual de los componentes conectados", + "create.ponder.speedometer.text_2": "Cuando se usan las gafas del constructor, el jugador puede obtener información más detallada del medidor", + "create.ponder.speedometer.text_3": "Los comparadores pueden emitir señales analógicas de redstone en relación con las mediciones del velocímetro", + + "create.ponder.spout_filling.header": "Llenar objetos con un surtidor", + "create.ponder.spout_filling.text_1": "The Spout can fill fluid holding items provided beneath it", + "create.ponder.spout_filling.text_2": "The content of a Spout cannot be accessed manually", + "create.ponder.spout_filling.text_3": "Instead, Pipes can be used to supply it with fluids", + "create.ponder.spout_filling.text_4": "The Input items can be placed on a Depot under the Spout", + "create.ponder.spout_filling.text_5": "When items are provided on a belt...", + "create.ponder.spout_filling.text_6": "The Spout will hold and process them automatically", + + "create.ponder.stabilized_bearings.header": "Estabilizar artilugios", + "create.ponder.stabilized_bearings.text_1": "Siempre que los rodamientos mecánicos formen parte de una estructura móvil...", + "create.ponder.stabilized_bearings.text_2": "...intentarán mantenerse derechos", + "create.ponder.stabilized_bearings.text_3": "Una vez más, el rodamiento se unirá al bloque de enfrente", + "create.ponder.stabilized_bearings.text_4": "Como resultado, todo el sub-artilugio se mantendrá en posición vertical", + + "create.ponder.sticker.header": "Fijar bloques con stickers", + "create.ponder.sticker.text_1": "Los stickers son ideales para la fijación de bloques controlados por redstone", + "create.ponder.sticker.text_2": "Al recibir una señal, cambiarán su estado", + "create.ponder.sticker.text_3": "Si ahora se mueve en un artilugio, el bloque se moverá con él", + "create.ponder.sticker.text_4": "Si se vuelve a activar, el bloque dejará de estar fijado", + + "create.ponder.stressometer.header": "Supervisar la información cinética con el estresómetro", + "create.ponder.stressometer.text_1": "El estresómetro muestra la capacidad de estrés actual de la red cinética conectada", + "create.ponder.stressometer.text_2": "Cuando se usan las gafas del constructor, el jugador puede obtener información más detallada del medidor", + "create.ponder.stressometer.text_3": "Los comparadores pueden emitir señales analógicas de redstone en relación con las mediciones del estresómetro", + + "create.ponder.super_glue.header": "Fijar bloques con pegamento", + "create.ponder.super_glue.text_1": "Se puede utilizar pegamento entre dos bloques cualquiera", + "create.ponder.super_glue.text_2": "Los bloques fijados se moverán juntos cuando se ensamblen en un artilugio", + "create.ponder.super_glue.text_3": "Cada vez que el pegamento es sostenido en la mano...", + "create.ponder.super_glue.text_4": "...los bloques añadidos se pegarán a la cara en la que fueron colocados automáticamente", + "create.ponder.super_glue.text_5": "El pegamento se puede quitar con un clic izquierdo", + + "create.ponder.valve_handle.header": "Generar fuerza rotacional mediante asas de válvula", + "create.ponder.valve_handle.text_1": "Los jugadores pueden utilizar las asas de válvulas para aplicar fuerza rotacional manualmente", + "create.ponder.valve_handle.text_2": "Mantén pulsado el clic derecho para rotar en sentido contrario a las agujas del reloj", + "create.ponder.valve_handle.text_3": "Su velocidad de transmisión es lenta y precisa", + "create.ponder.valve_handle.text_4": "[Mayús izdo.] + clic derecho para rotar en el sentido de las agujas del reloj", + "create.ponder.valve_handle.text_5": "Las asas de las válvulas pueden teñirse con fines estéticos", + + "create.ponder.valve_pipe.header": "Controlar el flujo de fluidos mediante válvulas", + "create.ponder.valve_pipe.text_1": "Valve pipes help control fluids propagating through pipe networks", + "create.ponder.valve_pipe.text_2": "Their shaft input controls whether fluid is currently allowed through", + "create.ponder.valve_pipe.text_3": "Given Rotational Force in the opening direction, the valve will open up", + "create.ponder.valve_pipe.text_4": "It can be closed again by reversing the input rotation", + + "create.ponder.water_wheel.header": "Generar fuerza rotacional mediante ruedas hidráulicas", + "create.ponder.water_wheel.text_1": "Las ruedas hidráulicas extraen la fuerza de las corrientes de agua adyacentes", + "create.ponder.water_wheel.text_2": "Cuantas más caras se alimenten, más rápido girará", + "create.ponder.water_wheel.text_3": "Las paletas de las ruedas deben estar orientadas en contra del flujo", + "create.ponder.water_wheel.text_4": "Orientadas hacia el lado contrario, no serán tan eficaces", + + "create.ponder.weighted_ejector.header": "Usar eyectores de peso", + "create.ponder.weighted_ejector.text_1": "[Mayús izdo.] + clic derecho sosteniendo un eyector de peso para seleccionar la ubicación de destino", + "create.ponder.weighted_ejector.text_2": "El eyector colocado lanzará ahora los objetos al lugar marcado", + "create.ponder.weighted_ejector.text_3": "Un objetivo válido puede estar a cualquier altura o distancia dentro del alcance", + "create.ponder.weighted_ejector.text_4": "Sin embargo, no pueden estar a un costado", + "create.ponder.weighted_ejector.text_5": "Si no se ha seleccionado ningún objetivo válido, simplemente se dirigirá al bloque que se encuentra justo delante", + "create.ponder.weighted_ejector.text_6": "Suministrale fuerza rotacional para cargarlo", + "create.ponder.weighted_ejector.text_7": "Los objetos colocados en el eyector hacen que se dispare", + "create.ponder.weighted_ejector.text_8": "Si se dirigen a un inventario, el eyector esperará hasta que haya espacio", + "create.ponder.weighted_ejector.text_9": "Con la llave inglesa se puede configurar el tamaño de pila requerido", + "create.ponder.weighted_ejector.text_10": "Ahora estára limitado a este tamaño de pila, y sólo se activara cuando su pila retenida alcance esta cantidad", + "create.ponder.weighted_ejector.text_11": "Otras entidades activarán el eyector al pisarlos", + + "create.ponder.weighted_ejector_redstone.header": "Controlar los eyectores de peso con redstone", + "create.ponder.weighted_ejector_redstone.text_1": "Cuando se alimentan con redstone, los eyectores no se activan", + "create.ponder.weighted_ejector_redstone.text_2": "Además, los observadores de contenido pueden detectar cuando los eyectores se activan", + + "create.ponder.weighted_ejector_tunnel.header": "Dividir pilas de objetos mediante eyectores de peso", + "create.ponder.weighted_ejector_tunnel.text_1": "En combinación con los túneles de latón, los eyectores de peso pueden dividir las pilas de objetos en cantidades específicas", + "create.ponder.weighted_ejector_tunnel.text_2": "En primer lugar, configure el túnel de latón en 'Preferir lo más cercano', para dar prioridad a su salida lateral", + "create.ponder.weighted_ejector_tunnel.text_3": "El tamaño de la pila fijado en el eyector determina ahora la cantidad que se va a dividir", + "create.ponder.weighted_ejector_tunnel.text_4": "Mientras una nueva pila del tamaño configurado se expulse por la salida lateral...", + "create.ponder.weighted_ejector_tunnel.text_5": "...el resto seguirá su camino", + + "create.ponder.windmill_source.header": "Generar fuerza rotacional mediante rodamientos del molino de viento", + "create.ponder.windmill_source.text_1": "Los rodamientos del molino de viento se fijan al bloque que tienen delante", + "create.ponder.windmill_source.text_2": "Si se unen suficientes bloques tipo vela al bloque, éste puede actuar como un molino de viento", + "create.ponder.windmill_source.text_3": "Activado con un clic derecho, el rodamiento del molino de viento comenzará a proporcionar fuerza rotacional", + "create.ponder.windmill_source.text_4": "La cantidad de bloques de vela determina su velocidad de rotación", + "create.ponder.windmill_source.text_5": "Utiliza una llave inglesa para configurar su sentido de rotación", + "create.ponder.windmill_source.text_6": "Haga clic derecho sobre el rodamiento del molino en cualquier momento para detener y editar la estructura de nuevo", + + "create.ponder.windmill_structure.header": "Artilugios para molinos de viento", + "create.ponder.windmill_structure.text_1": "Cualquier estructura puede contar como un molino de viento válido, siempre que contenga al menos 8 bloques tipo vela.", "_": "Thank you for translating Create!" From 137e64e90afffc9aa34fd33bedace03e2408e235 Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Wed, 7 Jul 2021 22:15:46 +0200 Subject: [PATCH 041/118] Post-PR datagen --- src/generated/resources/.cache/cache | 4 +- .../assets/create/lang/unfinished/es_es.json | 2426 ++++++++--------- .../data/create/advancements/aesthetics.json | 4 +- 3 files changed, 1217 insertions(+), 1217 deletions(-) diff --git a/src/generated/resources/.cache/cache b/src/generated/resources/.cache/cache index c41e6e483..58a1fd052 100644 --- a/src/generated/resources/.cache/cache +++ b/src/generated/resources/.cache/cache @@ -428,7 +428,7 @@ b7181bcd8182b2f17088e5aa881f374c9c65470c assets/create/blockstates/zinc_ore.json 1fa99fbea1418694aea41dea81f9cbf5e30066d4 assets/create/lang/en_ud.json f38e0d6773f0618212e6d036290be02692302b1b assets/create/lang/en_us.json 8456877fca4c1c97a74c25c97e0dbd274e728d25 assets/create/lang/unfinished/de_de.json -4de8456cde05eecedec61c79522cbd6549de01a9 assets/create/lang/unfinished/es_es.json +b3c20a8376120c330440cc29cadbff45608de1a1 assets/create/lang/unfinished/es_es.json 2c72b40a22f6da68c179e875fecc471dfb63882c assets/create/lang/unfinished/es_mx.json 801a7fc4c0b83f94ee5fc6ff2dcfbc2c794e7fd5 assets/create/lang/unfinished/fr_fr.json 7c23104e6f627e2812391696550f7ac560a8543d assets/create/lang/unfinished/it_it.json @@ -1699,7 +1699,7 @@ d080b1b25e5bc8baf5aee68691b08c7f12ece3b0 assets/create/models/item/windmill_bear a80fb25a0b655e76be986b5b49fcb0f03461a1ab assets/create/models/item/zinc_nugget.json b1689617190c05ef34bd18456b0c7ae09bb3210f assets/create/models/item/zinc_ore.json bbe7fc4aef29420319f59d02d4cd376a78244e70 assets/create/sounds.json -0f1b4b980afba9bf2caf583b88e261bba8b10313 data/create/advancements/aesthetics.json +5d0cc4c0255dc241e61c173b31ddca70c88d08e4 data/create/advancements/aesthetics.json 187921fa131b06721bfaf63f2623a28c141aae9a data/create/advancements/andesite_alloy.json 0ea2db7173b5be28b289ea7c9a6a0cf5805c60c7 data/create/advancements/andesite_casing.json 83c046bd200623933545c9e4326f782fb02c87fa data/create/advancements/arm_blaze_burner.json 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 d3c239abf..3db3726e3 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: 881", + "_": "Missing Localizations: 41", "_": "->------------------------] Game Elements [------------------------<-", @@ -14,7 +14,7 @@ "block.create.andesite_bricks": "Ladrillos de andesita", "block.create.andesite_bricks_slab": "Losa de ladrillos de andesita", "block.create.andesite_bricks_stairs": "Escaleras de ladrillos de andesita", - "block.create.andesite_bricks_wall": "Pared de ladrillos de andesita", + "block.create.andesite_bricks_wall": "Muro de ladrillos de andesita", "block.create.andesite_casing": "Revestidor de andesita", "block.create.andesite_cobblestone": "Adoquín de andesita", "block.create.andesite_cobblestone_slab": "Losa de adoquín de andesita", @@ -56,26 +56,26 @@ "block.create.chiseled_weathered_limestone": "Piedra caliza erosionada cincelada", "block.create.chocolate": "Chocolate", "block.create.chute": "Ducto", - "block.create.clockwork_bearing": "Rodamiento de reloj", + "block.create.clockwork_bearing": "Rodamiento tipo reloj", "block.create.clutch": "Embrague", - "block.create.cogwheel": "Rueda dentada", + "block.create.cogwheel": "Engranaje pequeño", "block.create.content_observer": "Observador de contenidos", "block.create.controller_rail": "Raíl de control", - "block.create.copper_backtank": "UNLOCALIZED: Copper Backtank", + "block.create.copper_backtank": "Depósito trasero de cobre", "block.create.copper_block": "Bloque de cobre", "block.create.copper_casing": "Revestidor de caliza", - "block.create.copper_ore": "Mineral de cobre", + "block.create.copper_ore": "Mena de cobre", "block.create.copper_shingles": "Bloque de tejas de cobre", "block.create.copper_tiles": "Bloque de baldosas de cobre", "block.create.copper_valve_handle": "Asa de válvula de cobre", "block.create.creative_crate": "Caja creativa", "block.create.creative_fluid_tank": "Tanque de fluidos creativo", "block.create.creative_motor": "Motor creativo", - "block.create.crimson_window": "UNLOCALIZED: Crimson Window", - "block.create.crimson_window_pane": "UNLOCALIZED: Crimson Window Pane", + "block.create.crimson_window": "Ventana carmesí", + "block.create.crimson_window_pane": "Panel de ventana carmesí", "block.create.crushing_wheel": "Rueda trituradora", "block.create.crushing_wheel_controller": "Controlador de Rueda trituradora", - "block.create.cuckoo_clock": "Reloj Cucú", + "block.create.cuckoo_clock": "Reloj de cuco", "block.create.cyan_nixie_tube": "UNLOCALIZED: Cyan Nixie Tube", "block.create.cyan_sail": "Vela cian", "block.create.cyan_seat": "Asiento cian", @@ -86,32 +86,32 @@ "block.create.dark_scoria_bricks": "Ladrillos de escoria oscura", "block.create.dark_scoria_bricks_slab": "Losa de ladrillos de escoria oscura", "block.create.dark_scoria_bricks_stairs": "Escaleras de ladrillos de escoria oscura", - "block.create.dark_scoria_bricks_wall": "Pared de ladrillos de escoria oscura", + "block.create.dark_scoria_bricks_wall": "Muro de ladrillos de escoria oscura", "block.create.dark_scoria_cobblestone": "Adoquines de escoria oscura", "block.create.dark_scoria_cobblestone_slab": "Losa de adoquines de escoria oscura", "block.create.dark_scoria_cobblestone_stairs": "Escaleras de adoquines de escoria oscura", - "block.create.dark_scoria_cobblestone_wall": "Pared de adoquines de escoria oscura", + "block.create.dark_scoria_cobblestone_wall": "Muro de adoquines de escoria oscura", "block.create.dark_scoria_pillar": "Pilar de escoria oscura", "block.create.deployer": "Desplegador", "block.create.depot": "Depósito", "block.create.diorite_bricks": "Ladrillos de diorita", "block.create.diorite_bricks_slab": "Losa de ladrillos de diorita", "block.create.diorite_bricks_stairs": "Escaleras de ladrillos de diorita", - "block.create.diorite_bricks_wall": "Pared de ladrillos de diorita", + "block.create.diorite_bricks_wall": "Muro de ladrillos de diorita", "block.create.diorite_cobblestone": "Adoquín de diorita", "block.create.diorite_cobblestone_slab": "Losa de adoquínes de diorita", "block.create.diorite_cobblestone_stairs": "Escaleras de adoquines de diorita", - "block.create.diorite_cobblestone_wall": "Pared de adoquines de diorita", + "block.create.diorite_cobblestone_wall": "Muro de adoquines de diorita", "block.create.diorite_pillar": "Pilar de diorita", "block.create.dolomite": "Dolomita", "block.create.dolomite_bricks": "Ladrillos de dolomita", "block.create.dolomite_bricks_slab": "Losa de ladrillos de dolomita", "block.create.dolomite_bricks_stairs": "Escaleras de ladrillos de dolomita", - "block.create.dolomite_bricks_wall": "Pared de ladrillos de dolomita", + "block.create.dolomite_bricks_wall": "Muro de ladrillos de dolomita", "block.create.dolomite_cobblestone": "Adoquín de dolomita", "block.create.dolomite_cobblestone_slab": "Losa de adoquín de dolomita", "block.create.dolomite_cobblestone_stairs": "Escaleras de adoquines de dolomita", - "block.create.dolomite_cobblestone_wall": "Pared de adoquines de dolomita", + "block.create.dolomite_cobblestone_wall": "Muro de adoquines de dolomita", "block.create.dolomite_pillar": "Pilar de dolomita", "block.create.encased_chain_drive": "Cadena de transmisión revestida", "block.create.encased_fan": "Ventilador revestido", @@ -119,39 +119,39 @@ "block.create.fancy_andesite_bricks": "Ladrillos de andesita elegantes", "block.create.fancy_andesite_bricks_slab": "Ladrillos de andesita elegantes", "block.create.fancy_andesite_bricks_stairs": "Escaleras de ladrillos de andesita elegantes", - "block.create.fancy_andesite_bricks_wall": "Pared de ladrillos de andesita elegantes", + "block.create.fancy_andesite_bricks_wall": "Muro de ladrillos de andesita elegantes", "block.create.fancy_dark_scoria_bricks": "Ladrillos de escoria oscura elegantes", "block.create.fancy_dark_scoria_bricks_slab": "Losa de ladrillos de escoria oscura elegantes", "block.create.fancy_dark_scoria_bricks_stairs": "Escalera de ladrillos de escoria oscura elegantes", - "block.create.fancy_dark_scoria_bricks_wall": "Pared de ladrillos de escoria oscura elegantes", + "block.create.fancy_dark_scoria_bricks_wall": "Muro de ladrillos de escoria oscura elegantes", "block.create.fancy_diorite_bricks": "Ladrillos de diorita elegantes", "block.create.fancy_diorite_bricks_slab": "Losa de ladrillos de diorita elegantes", "block.create.fancy_diorite_bricks_stairs": "Escaleras de ladrillos de diorita elegantes", - "block.create.fancy_diorite_bricks_wall": "Pared de ladrillos de diorita elegantes", + "block.create.fancy_diorite_bricks_wall": "Muro de ladrillos de diorita elegantes", "block.create.fancy_dolomite_bricks": "Ladrillos de dolomita elegantes", "block.create.fancy_dolomite_bricks_slab": "Losa de ladrillos de dolomita elegantes", "block.create.fancy_dolomite_bricks_stairs": "Escaleras de ladrillos de dolomita elegantes", - "block.create.fancy_dolomite_bricks_wall": "Pared de ladrillos de dolomita elegantes", + "block.create.fancy_dolomite_bricks_wall": "Muro de ladrillos de dolomita elegantes", "block.create.fancy_gabbro_bricks": "Ladrillos de gabro elegantes", "block.create.fancy_gabbro_bricks_slab": "Losa de ladrillos de gabro elegantes", "block.create.fancy_gabbro_bricks_stairs": "Escaleras de ladrillos de gabro elegantes", - "block.create.fancy_gabbro_bricks_wall": "Pared de ladrillos de gabro elegantes", + "block.create.fancy_gabbro_bricks_wall": "Muro de ladrillos de gabro elegantes", "block.create.fancy_granite_bricks": "Ladrillos de granito elegantes", "block.create.fancy_granite_bricks_slab": "Losa de ladrillos de granito elegantes", "block.create.fancy_granite_bricks_stairs": "Escaleras de ladrillos de granito elegantes", - "block.create.fancy_granite_bricks_wall": "Pared de ladrillos de granito elegantes", + "block.create.fancy_granite_bricks_wall": "Muro de ladrillos de granito elegantes", "block.create.fancy_limestone_bricks": "Ladrillos de piedra caliza elegantes", "block.create.fancy_limestone_bricks_slab": "Losa de ladrillos de piedra caliza elegantes", "block.create.fancy_limestone_bricks_stairs": "Escaleras de ladrillos de piedra caliza elegantes", - "block.create.fancy_limestone_bricks_wall": "Pared de ladrillos de piedra caliza elegantes", + "block.create.fancy_limestone_bricks_wall": "Muro de ladrillos de piedra caliza elegantes", "block.create.fancy_scoria_bricks": "Ladrillos de escoria elegantes", "block.create.fancy_scoria_bricks_slab": "Losa de ladrillos de escoria elegantes", "block.create.fancy_scoria_bricks_stairs": "Escaleras de ladrillos de escoria elegantes", - "block.create.fancy_scoria_bricks_wall": "Pared de ladrillos de escoria elegantes", + "block.create.fancy_scoria_bricks_wall": "Muro de ladrillos de escoria elegantes", "block.create.fancy_weathered_limestone_bricks": "Ladrillos de piedra de caliza erosionada elegantes", "block.create.fancy_weathered_limestone_bricks_slab": "Losa de ladrillos de caliza erosionada elegantes", "block.create.fancy_weathered_limestone_bricks_stairs": "Escaleras de ladrillos de caliza erosionada elegantes", - "block.create.fancy_weathered_limestone_bricks_wall": "Pared de ladrillos de caliza erosionada elegantes", + "block.create.fancy_weathered_limestone_bricks_wall": "Muro de ladrillos de caliza erosionada elegantes", "block.create.fluid_pipe": "Tubería de fluidos de cobre", "block.create.fluid_tank": "Depósito de fluidos", "block.create.fluid_valve": "Válvula de fluidos", @@ -163,13 +163,13 @@ "block.create.gabbro_bricks": "Ladrillos de gabro", "block.create.gabbro_bricks_slab": "Losa de ladrillos de gabro", "block.create.gabbro_bricks_stairs": "Escaleras de ladrillos de gabro", - "block.create.gabbro_bricks_wall": "Pared de ladrillos de gabro", + "block.create.gabbro_bricks_wall": "Muro de ladrillos de gabro", "block.create.gabbro_cobblestone": "Adoquín de gabro", "block.create.gabbro_cobblestone_slab": "Losa de adoquínes de gabro", "block.create.gabbro_cobblestone_stairs": "Escaleras de adoquínes de gabro", - "block.create.gabbro_cobblestone_wall": "Pared de adoquínes de gabro", + "block.create.gabbro_cobblestone_wall": "Muro de adoquínes de gabro", "block.create.gabbro_pillar": "Pilar de gabro", - "block.create.gantry_carriage": "UNLOCALIZED: Gantry Carriage", + "block.create.gantry_carriage": "Carro de grúa", "block.create.gantry_shaft": "Eje de grúa", "block.create.gearbox": "Caja de transmisión", "block.create.gearshift": "Caja de cambios", @@ -177,11 +177,11 @@ "block.create.granite_bricks": "Ladrillos de granito", "block.create.granite_bricks_slab": "Losa de ladrillos de granito", "block.create.granite_bricks_stairs": "Escaleras de ladrillos de granito", - "block.create.granite_bricks_wall": "Pared de ladrillos de granito", + "block.create.granite_bricks_wall": "Muro de ladrillos de granito", "block.create.granite_cobblestone": "Adoquín de granito", "block.create.granite_cobblestone_slab": "Losa de adoquínes de granito", "block.create.granite_cobblestone_stairs": "Escaleras de adoquínes de granito", - "block.create.granite_cobblestone_wall": "Pared de adoquínes de granito", + "block.create.granite_cobblestone_wall": "Muro de adoquínes de granito", "block.create.granite_pillar": "Pilar de granito", "block.create.gray_nixie_tube": "UNLOCALIZED: Gray Nixie Tube", "block.create.gray_sail": "Vela gris", @@ -197,10 +197,10 @@ "block.create.horizontal_framed_glass": "Cristal con marco horizontal", "block.create.horizontal_framed_glass_pane": "Panel de cristal con marco horizontal", "block.create.hose_pulley": "Polea de manguera", - "block.create.item_drain": "Drenador de elementos", + "block.create.item_drain": "Drenador de objetos", "block.create.jungle_window": "Ventana de jungla", "block.create.jungle_window_pane": "Panel de ventana de jungla", - "block.create.large_cogwheel": "Rueda dentada grande", + "block.create.large_cogwheel": "Engranaje grande", "block.create.layered_andesite": "Andesita estratificada", "block.create.layered_dark_scoria": "Escoria oscura estratificada", "block.create.layered_diorite": "Diorita estratificada", @@ -210,7 +210,7 @@ "block.create.layered_limestone": "Piedra caliza estratificada", "block.create.layered_scoria": "Escoria estratificada", "block.create.layered_weathered_limestone": "Caliza erosionada estratificada", - "block.create.lectern_controller": "UNLOCALIZED: Lectern Controller", + "block.create.lectern_controller": "Lectern Controller", "block.create.light_blue_nixie_tube": "UNLOCALIZED: Light Blue Nixie Tube", "block.create.light_blue_sail": "Vela azul claro", "block.create.light_blue_seat": "Asiento azul claro", @@ -228,11 +228,11 @@ "block.create.limestone_bricks": "Ladrillos de piedra caliza", "block.create.limestone_bricks_slab": "Losa de ladrillos de piedra caliza", "block.create.limestone_bricks_stairs": "Escaleras de ladrillos de piedra caliza", - "block.create.limestone_bricks_wall": "Pared de ladrillos de piedra caliza", + "block.create.limestone_bricks_wall": "Muro de ladrillos de piedra caliza", "block.create.limestone_cobblestone": "Adoquínes de piedra caliza", "block.create.limestone_cobblestone_slab": "Losa de adoquines de piedra caliza", "block.create.limestone_cobblestone_stairs": "Escaleras de adoquines de piedra caliza", - "block.create.limestone_cobblestone_wall": "Pared de adoquines de piedra caliza", + "block.create.limestone_cobblestone_wall": "Muro de adoquines de piedra caliza", "block.create.limestone_pillar": "Pilar de piedra caliza", "block.create.linear_chassis": "Chasis lineal", "block.create.lit_blaze_burner": "Quemador de Blaze encendido", @@ -242,7 +242,7 @@ "block.create.magenta_valve_handle": "Asa de válvula magenta", "block.create.mechanical_arm": "Brazo mecánico", "block.create.mechanical_bearing": "Rodamiento mecánico", - "block.create.mechanical_crafter": "Autoensamblador mecánico", + "block.create.mechanical_crafter": "Ensamblador mecánico", "block.create.mechanical_drill": "Taladro mecánico", "block.create.mechanical_harvester": "Cosechadora mecánica", "block.create.mechanical_mixer": "Mezcladora mecánica", @@ -264,7 +264,7 @@ "block.create.mossy_limestone": "Caliza musgosa", "block.create.mossy_scoria": "Escoria musgosa", "block.create.mossy_weathered_limestone": "Caliza erosionada musgosa", - "block.create.mysterious_cuckoo_clock": "Reloj cucú", + "block.create.mysterious_cuckoo_clock": "Reloj de cuco", "block.create.natural_scoria": "Escoria natural", "block.create.nixie_tube": "Tubo Nixie", "block.create.nozzle": "Boquilla", @@ -287,40 +287,40 @@ "block.create.paved_andesite": "Andesita pavimentada", "block.create.paved_andesite_slab": "Losa de andesita pavimentada", "block.create.paved_andesite_stairs": "Escaleras de andesita pavimentada", - "block.create.paved_andesite_wall": "Pared de andesita pavimentada", + "block.create.paved_andesite_wall": "Muro de andesita pavimentada", "block.create.paved_dark_scoria": "Escoria oscura pavimentada", "block.create.paved_dark_scoria_slab": "Losa de escoria oscura pavimentada", "block.create.paved_dark_scoria_stairs": "Escaleras de escoria oscura pavimentada", - "block.create.paved_dark_scoria_wall": "Pared de escoria oscura pavimentad", + "block.create.paved_dark_scoria_wall": "Muro de escoria oscura pavimentad", "block.create.paved_diorite": "Diorita pavimentada", "block.create.paved_diorite_slab": "Losa de diorita pavimentada", "block.create.paved_diorite_stairs": "Escaleras de diorita pavimentada", - "block.create.paved_diorite_wall": "Pared de diorita pavimentad", + "block.create.paved_diorite_wall": "Muro de diorita pavimentad", "block.create.paved_dolomite": "Dolomita pavimentada", "block.create.paved_dolomite_slab": "Losa de dolomita pavimentada", "block.create.paved_dolomite_stairs": "Escaleras de dolomita pavimentada", - "block.create.paved_dolomite_wall": "Pared de dolomita pavimentada", + "block.create.paved_dolomite_wall": "Muro de dolomita pavimentada", "block.create.paved_gabbro": "Gabro pavimentado", "block.create.paved_gabbro_slab": "Losa de gabro pavimentado", "block.create.paved_gabbro_stairs": "Escaleras de gabro pavimentado", - "block.create.paved_gabbro_wall": "Pared de gabro pavimentado", + "block.create.paved_gabbro_wall": "Muro de gabro pavimentado", "block.create.paved_granite": "Granito pavimentado", "block.create.paved_granite_slab": "Losa de granito pavimentado", "block.create.paved_granite_stairs": "Escaleras de granito pavimentado", - "block.create.paved_granite_wall": "Pared de granito pavimentado", + "block.create.paved_granite_wall": "Muro de granito pavimentado", "block.create.paved_limestone": "Piedra caliza pavimentada", "block.create.paved_limestone_slab": "Losa de piedra caliza pavimentada", "block.create.paved_limestone_stairs": "Escaleras de piedra caliza pavimentada", - "block.create.paved_limestone_wall": "Pared de piedra caliza pavimentada", + "block.create.paved_limestone_wall": "Muro de piedra caliza pavimentada", "block.create.paved_scoria": "Escoria pavimentada", "block.create.paved_scoria_slab": "Losa de escoria pavimentada", "block.create.paved_scoria_stairs": "Escaleras de escoria pavimentada", - "block.create.paved_scoria_wall": "Pared de escoria pavimentada", + "block.create.paved_scoria_wall": "Muro de escoria pavimentada", "block.create.paved_weathered_limestone": "Piedra caliza erosionada pavimentada", "block.create.paved_weathered_limestone_slab": "Losa de piedra caliza erosionada pavimentada", "block.create.paved_weathered_limestone_stairs": "Escaleras de piedra caliza erosionada pavimentada", - "block.create.paved_weathered_limestone_wall": "Pared de piedra caliza erosionada pavimentada", - "block.create.peculiar_bell": "UNLOCALIZED: Peculiar Bell", + "block.create.paved_weathered_limestone_wall": "Muro de piedra caliza erosionada pavimentada", + "block.create.peculiar_bell": "Peculiar Bell", "block.create.pink_nixie_tube": "UNLOCALIZED: Pink Nixie Tube", "block.create.pink_sail": "Vela rosa", "block.create.pink_seat": "Asiento rosa", @@ -329,33 +329,33 @@ "block.create.polished_dark_scoria": "Escoria oscura pulida", "block.create.polished_dark_scoria_slab": "Losa de escoria oscura pulida", "block.create.polished_dark_scoria_stairs": "Escaleras de escoria oscura pulida", - "block.create.polished_dark_scoria_wall": "Pared de escoria oscura pulida", + "block.create.polished_dark_scoria_wall": "Muro de escoria oscura pulida", "block.create.polished_dolomite": "Dolomita pulida", "block.create.polished_dolomite_slab": "Losa de dolomita pulida", "block.create.polished_dolomite_stairs": "Escaleras de dolomita pulidas", - "block.create.polished_dolomite_wall": "Pared de dolomita pulida", + "block.create.polished_dolomite_wall": "Muro de dolomita pulida", "block.create.polished_gabbro": "Gabro pulido", "block.create.polished_gabbro_slab": "Losa de gabro pulido", "block.create.polished_gabbro_stairs": "Escaleras de gabro pulido", - "block.create.polished_gabbro_wall": "Pared de gabro pulido", + "block.create.polished_gabbro_wall": "Muro de gabro pulido", "block.create.polished_limestone": "Piedra caliza pulida", "block.create.polished_limestone_slab": "Losa de piedra caliza pulida", "block.create.polished_limestone_stairs": "Escaleras de piedra caliza pulidas", - "block.create.polished_limestone_wall": "Pared de piedra caliza pulida", + "block.create.polished_limestone_wall": "Muro de piedra caliza pulida", "block.create.polished_scoria": "Escoria pulida", "block.create.polished_scoria_slab": "Losa de escoria pulida", "block.create.polished_scoria_stairs": "Escaleras de losa pulida", - "block.create.polished_scoria_wall": "Pared de escoria pulida", + "block.create.polished_scoria_wall": "Muro de escoria pulida", "block.create.polished_weathered_limestone": "Piedra caliza erosionada pulida", "block.create.polished_weathered_limestone_slab": "Losa de piedra caliza erosionada pulida", "block.create.polished_weathered_limestone_stairs": "Escaleras de piedra caliza erosionada pulida", - "block.create.polished_weathered_limestone_wall": "Pared de piedra caliza erosionada pulida", + "block.create.polished_weathered_limestone_wall": "Muro de piedra caliza erosionada pulida", "block.create.portable_fluid_interface": "Interfaz de fluidos portátil", "block.create.portable_storage_interface": "Interfaz de almacenamiento portátil", "block.create.powered_latch": "Palanca motorizada", "block.create.powered_toggle_latch": "Palanca de cierre motorizada", "block.create.pulley_magnet": "Imán de la polea", - "block.create.pulse_repeater": "Repetidor de pulsos de Redstone", + "block.create.pulse_repeater": "Repetidor de pulsos de redstone", "block.create.purple_nixie_tube": "UNLOCALIZED: Purple Nixie Tube", "block.create.purple_sail": "Vela morada", "block.create.purple_seat": "Asiento morado", @@ -365,28 +365,28 @@ "block.create.red_sail": "Vela roja", "block.create.red_seat": "Asiento rojo", "block.create.red_valve_handle": "Asa de válvula roja", - "block.create.redstone_contact": "Contacto de Redstone", - "block.create.redstone_link": "Enlace de Redstone", - "block.create.refined_radiance_casing": "Revestidor de radiante", + "block.create.redstone_contact": "Contacto de redstone", + "block.create.redstone_link": "Enlace de redstone", + "block.create.refined_radiance_casing": "Revestidor radiante", "block.create.reinforced_rail": "Raíl reforzado", "block.create.rope": "Cuerda", "block.create.rope_pulley": "Polea de cuerda", - "block.create.rotation_speed_controller": "Controlador de velocidad de rotación", + "block.create.rotation_speed_controller": "Controlador de velocidad rotacional", "block.create.sail_frame": "Marco de vela", "block.create.schematic_table": "Tabla de esquemas", - "block.create.schematicannon": "Schematicannon", + "block.create.schematicannon": "Cañón de esquemas", "block.create.scoria": "Escoria", "block.create.scoria_bricks": "Ladrillos de escoria", "block.create.scoria_bricks_slab": "Losa de ladrillos de escoria", "block.create.scoria_bricks_stairs": "Escaleras de ladrillos de escoria", - "block.create.scoria_bricks_wall": "Pared de ladrillos de escoria", + "block.create.scoria_bricks_wall": "Muro de ladrillos de escoria", "block.create.scoria_cobblestone": "Adoquín de escoria", "block.create.scoria_cobblestone_slab": "Losa de adoquínes de escoria", "block.create.scoria_cobblestone_stairs": "Escaleras de adoquines de escoria", - "block.create.scoria_cobblestone_wall": "Pared de adoquines de escoria", + "block.create.scoria_cobblestone_wall": "Muro de adoquines de escoria", "block.create.scoria_pillar": "Pilar de escoria", "block.create.secondary_linear_chassis": "Chasis lineal secundario", - "block.create.sequenced_gearshift": "Palanca de cambios secuencial", + "block.create.sequenced_gearshift": "Caja de cambios secuencial", "block.create.shadow_steel_casing": "Revestidor sombrío", "block.create.shaft": "Eje", "block.create.smart_chute": "Ducto inteligente", @@ -395,7 +395,7 @@ "block.create.spout": "Surtidor", "block.create.spruce_window": "Ventana de abeto", "block.create.spruce_window_pane": "Panel de ventana de abeto", - "block.create.sticker": "UNLOCALIZED: Sticker", + "block.create.sticker": "Sticker", "block.create.sticky_mechanical_piston": "Pistón mecánico pegajoso", "block.create.stockpile_switch": "Interruptor de acopio", "block.create.stressometer": "Estresómetro", @@ -404,20 +404,20 @@ "block.create.turntable": "Plataforma giratoria mecánica", "block.create.vertical_framed_glass": "Vidrio esmaltado vertical", "block.create.vertical_framed_glass_pane": "Panel de vidrio esmaltado vertical", - "block.create.warped_window": "UNLOCALIZED: Warped Window", - "block.create.warped_window_pane": "UNLOCALIZED: Warped Window Pane", + "block.create.warped_window": "Ventana distorsionada", + "block.create.warped_window_pane": "Panel de ventana distorsionada", "block.create.water_wheel": "Rueda hidráulica mecánica", "block.create.weathered_limestone": "Piedra caliza erosionada", "block.create.weathered_limestone_bricks": "Ladrillos de piedra caliza erosionada", "block.create.weathered_limestone_bricks_slab": "Losa de piedra caliza erosionada", "block.create.weathered_limestone_bricks_stairs": "Escaleras de ladrillos de piedra caliza erosionada", - "block.create.weathered_limestone_bricks_wall": "Pared de ladrillos de piedra caliza erosionada", + "block.create.weathered_limestone_bricks_wall": "Muro de ladrillos de piedra caliza erosionada", "block.create.weathered_limestone_cobblestone": "Adoquín de piedra caliza erosionada", "block.create.weathered_limestone_cobblestone_slab": "Losa de adoquín de piedra caliza erosionada", "block.create.weathered_limestone_cobblestone_stairs": "Escaleras de adoquín de piedra caliza erosionada", - "block.create.weathered_limestone_cobblestone_wall": "Pared de adoquínes de piedra caliza erosionada", + "block.create.weathered_limestone_cobblestone_wall": "Muro de adoquínes de piedra caliza erosionada", "block.create.weathered_limestone_pillar": "Pilar de piedra caliza erosionada", - "block.create.weighted_ejector": "UNLOCALIZED: Weighted Ejector", + "block.create.weighted_ejector": "Eyector de peso", "block.create.white_nixie_tube": "UNLOCALIZED: White Nixie Tube", "block.create.white_sail": "Vela blanca", "block.create.white_seat": "Asiento blanco", @@ -429,17 +429,17 @@ "block.create.yellow_seat": "Asiento amarillo", "block.create.yellow_valve_handle": "Asa de válvula amarillo", "block.create.zinc_block": "Bloque de zinc", - "block.create.zinc_ore": "Mineral de zinc", + "block.create.zinc_ore": "Mena de zinc", "enchantment.create.potato_recovery": "UNLOCALIZED: Potato Recovery", "entity.create.contraption": "Artilugio", - "entity.create.crafting_blueprint": "UNLOCALIZED: Crafting Blueprint", + "entity.create.crafting_blueprint": "Plano de elaboración", "entity.create.gantry_contraption": "Artilugio de grúa", - "entity.create.potato_projectile": "UNLOCALIZED: Potato Projectile", + "entity.create.potato_projectile": "Potato Projectile", "entity.create.seat": "Asiento", "entity.create.stationary_contraption": "Artilugio estacionario", - "entity.create.super_glue": "Super Pegamento", + "entity.create.super_glue": "Pegamento", "fluid.create.milk": "Leche", "fluid.create.potion": "Poción", @@ -448,25 +448,25 @@ "item.create.andesite_alloy": "Aleación de andesita", "item.create.attribute_filter": "Filtro de atributos", "item.create.bar_of_chocolate": "Barra de chocolate", - "item.create.belt_connector": "Correa", - "item.create.blaze_cake": "Pastel de Blaze", - "item.create.blaze_cake_base": "Base de Pastel de Blaze", + "item.create.belt_connector": "Correa mecánica", + "item.create.blaze_cake": "Pastel de blaze", + "item.create.blaze_cake_base": "Base de pastel de blaze", "item.create.brass_hand": "Mano de latón", "item.create.brass_ingot": "Lingote de latón", "item.create.brass_nugget": "Pepita de latón", "item.create.brass_sheet": "Lámina de latón", "item.create.builders_tea": "Té del Constructor", "item.create.chest_minecart_contraption": "Artilugio de vagoneta con cofre", - "item.create.chocolate_bucket": "Cubo de chocolate", - "item.create.chocolate_glazed_berries": "UNLOCALIZED: Chocolate Glazed Berries", + "item.create.chocolate_bucket": "Cubo con chocolate", + "item.create.chocolate_glazed_berries": "Bayas glaseadas con chocolate", "item.create.chromatic_compound": "Compuesto cromático", - "item.create.cinder_flour": "Harina de ceniza", - "item.create.copper_backtank": "UNLOCALIZED: Copper Backtank", + "item.create.cinder_flour": "Harina del Nether", + "item.create.copper_backtank": "Depósito trasero de cobre", "item.create.copper_ingot": "Lingote de cobre", "item.create.copper_nugget": "Pepita de cobre", "item.create.copper_sheet": "Lámina de cobre", - "item.create.crafter_slot_cover": "Tapa de ranura del Autoensamblador mecánico", - "item.create.crafting_blueprint": "UNLOCALIZED: Crafting Blueprint", + "item.create.crafter_slot_cover": "Tapa de ranura del ensamblador mecánico", + "item.create.crafting_blueprint": "Plano de elaboración", "item.create.crushed_aluminum_ore": "Mineral de aluminio molido", "item.create.crushed_brass": "Latón molido", "item.create.crushed_copper_ore": "Mineral de cobre molido", @@ -481,30 +481,30 @@ "item.create.crushed_tin_ore": "Mineral de estaño molido", "item.create.crushed_uranium_ore": "Mineral de uranio molido", "item.create.crushed_zinc_ore": "Mineral de zinc molido", - "item.create.diving_boots": "UNLOCALIZED: Diving Boots", - "item.create.diving_helmet": "UNLOCALIZED: Diving Helmet", + "item.create.diving_boots": "Botas de buceo", + "item.create.diving_helmet": "Casco de buceo", "item.create.dough": "Masilla", "item.create.electron_tube": "Tubo de electrones", - "item.create.empty_blaze_burner": "Quemador de Blaze vacío", + "item.create.empty_blaze_burner": "Quemador de blaze vacío", "item.create.empty_schematic": "Esquema vacío", "item.create.extendo_grip": "Agarre extendido", "item.create.filter": "Filtro", "item.create.furnace_minecart_contraption": "Artilugio de vagoneta de horno", - "item.create.goggles": "Gafas del Ingeniero", + "item.create.goggles": "Gafas del constructor", "item.create.golden_sheet": "Lámina de oro", - "item.create.handheld_worldshaper": "Worldshaper", - "item.create.honey_bucket": "Cubo de miel", - "item.create.honeyed_apple": "UNLOCALIZED: Honeyed Apple", + "item.create.handheld_worldshaper": "Worldshaper Creativo", + "item.create.honey_bucket": "Cubo con miel", + "item.create.honeyed_apple": "Manzana con miel", "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.iron_sheet": "Lámina de hierro", - "item.create.linked_controller": "UNLOCALIZED: Linked Controller", + "item.create.linked_controller": "Controlador enlazado", "item.create.minecart_contraption": "Artilugio de vagoneta", "item.create.minecart_coupling": "Acoplamiento de vagoneta", "item.create.polished_rose_quartz": "Cuarzo rosado pulido", - "item.create.potato_cannon": "UNLOCALIZED: Potato Cannon", - "item.create.powdered_obsidian": "Obsidiana en polvo", + "item.create.potato_cannon": "Potato Cannon", + "item.create.powdered_obsidian": "Polvo de obsidiana", "item.create.precision_mechanism": "UNLOCALIZED: Precision Mechanism", "item.create.propeller": "Hélice", "item.create.red_sand_paper": "Papel de lija rojo", @@ -512,11 +512,11 @@ "item.create.rose_quartz": "Cuarzo rosado", "item.create.sand_paper": "Papel de lija", "item.create.schematic": "Esquema", - "item.create.schematic_and_quill": "Esquema y Pluma", + "item.create.schematic_and_quill": "Esquema y pluma", "item.create.shadow_steel": "Acero sombrío", - "item.create.super_glue": "Super Pegamento", - "item.create.sweet_roll": "UNLOCALIZED: Sweet Roll", - "item.create.tree_fertilizer": "Fertilizador de árboles", + "item.create.super_glue": "Pegamento", + "item.create.sweet_roll": "Pan dulce", + "item.create.tree_fertilizer": "Fertilizante para árboles", "item.create.vertical_gearbox": "Caja de transmisión vertical", "item.create.wand_of_symmetry": "Varita de simetría", "item.create.wheat_flour": "Harina de trigo", @@ -529,25 +529,25 @@ "_": "->------------------------] Advancements [------------------------<-", "advancement.create.root": "Bienvenido a Create", - "advancement.create.root.desc": "¡Es hora de empezar a construir increíbles Artilugios!", - "advancement.create.andesite_alloy": "Aliteraciones en abundancia", + "advancement.create.root.desc": "¡Es hora de empezar a construir increíbles artilugios!", + "advancement.create.andesite_alloy": "Aleaciones en abundancia", "advancement.create.andesite_alloy.desc": "Los materiales de Create tienen nombres extraños, la aleación de andesita es uno de ellos.", - "advancement.create.its_alive": "Está Vivo!", - "advancement.create.its_alive.desc": "Vea cómo gira su primer componente cinético.", + "advancement.create.its_alive": "¡Está vivo!", + "advancement.create.its_alive.desc": "Mira cómo gira tu primer componente cinético.", "advancement.create.shifting_gears": "Cambiando de marcha", - "advancement.create.shifting_gears.desc": "Conecta una rueda dentada grande a una pequeña, lo que te permitirá cambiar la velocidad de tu artilugio.", + "advancement.create.shifting_gears.desc": "Conecta un engranaje grande a uno pequeño, lo que te permitirá cambiar la velocidad de tu artilugio.", "advancement.create.overstressed": "Sobrecargado", "advancement.create.overstressed.desc": "Experimenta los límites del estrés.", "advancement.create.belt": "Paseo de algas", "advancement.create.belt.desc": "Conectar dos ejes con una correa.", - "advancement.create.tunnel": "Cúbrete!", - "advancement.create.tunnel.desc": "Embellece tu correa con un Túnel.", + "advancement.create.tunnel": "¡Cúbrete!", + "advancement.create.tunnel.desc": "Embellece tu correa con un túnel.", "advancement.create.splitter_tunnel": "Divide y vencerás", "advancement.create.splitter_tunnel.desc": "Crear un divisor con un grupo de túneles de latón.", "advancement.create.chute": "Caída en picado", "advancement.create.chute.desc": "Coloque un ducto, la contrapartida vertical de la cinta.", "advancement.create.upward_chute": "Abducción aérea", - "advancement.create.upward_chute.desc": "Observe cómo un objeto lanzado vuela hacia un paracaídas impulsado por un ventilador.", + "advancement.create.upward_chute.desc": "Observe cómo un objeto lanzado vuela dentro de un ducto impulsado por un ventilador.", "advancement.create.belt_funnel": "Colgantes con forma de embudo", "advancement.create.belt_funnel.desc": "Coloca un embudo lateral encima de una cinta o depósito para crear un tipo especial.", "advancement.create.belt_funnel_kiss": "Los loros y las aletas", @@ -555,81 +555,81 @@ "advancement.create.fan": "Maestro mecánico del aire", "advancement.create.fan.desc": "Monta la corriente de aire proporcionada por un ventilador revestido.", "advancement.create.fan_lava": "Calentador geotérmico", - "advancement.create.fan_lava.desc": "Quedar atrapado en una corriente de aire que funde las cosas.", + "advancement.create.fan_lava.desc": "Queda atrapado en una corriente de aire que funde las cosas.", "advancement.create.fan_water": "Lavado de la ropa", - "advancement.create.fan_water.desc": "Quedar atrapado en una corriente de aire que lava las cosas.", + "advancement.create.fan_water.desc": "Queda atrapado en una corriente de aire que lava las cosas.", "advancement.create.fan_smoke": "Fuelle mecánico", - "advancement.create.fan_smoke.desc": "Quedar atrapado en una corriente de aire que humea los artículos.", + "advancement.create.fan_smoke.desc": "Queda atrapado en una corriente de aire que humea los objetos.", "advancement.create.wrench": "Configurar convenientemente", "advancement.create.wrench.desc": "Crea una llave inglesa para ayudarte a construir tus artilugios.", - "advancement.create.goggles": "Stress-O-Vision", - "advancement.create.goggles.desc": "Crea unas Gafas del Ingeniero para ayudarte a obtener más información cinética de los componentes.", - "advancement.create.speedometer": "Pero, ¿con qué rapidez exactamente??", - "advancement.create.speedometer.desc": "Coloca y alimenta un Velocímetro. Míralo a través de las gafas para leer su valor exacto.", + "advancement.create.goggles": "Estresóvisión", + "advancement.create.goggles.desc": "Crea unas gafas del constructor para ayudarte a obtener más información cinética de los componentes.", + "advancement.create.speedometer": "Pero, ¿con qué rapidez exactamente?", + "advancement.create.speedometer.desc": "Coloca y alimenta un velocímetro. Míralo a través de las gafas para leer su valor exacto.", "advancement.create.stressometer": "Pero, ¿cuán estresado exactamente??", - "advancement.create.stressometer.desc": "Coloca y alimenta un Estresómetro. Míralo a través de las gafas para leer su valor exacto.", - "advancement.create.aesthetics": "Boom, Estética!", - "advancement.create.aesthetics.desc": "Colocar los soportes en un eje, tubo y rueda dentada.", - "advancement.create.reinforced": "Boom, Reforzado!", - "advancement.create.reinforced.desc": "Utilizar bloques de revestimiento en un eje, un tubo y una cinta.", + "advancement.create.stressometer.desc": "Coloca y alimenta un estresómetro. Míralo a través de las gafas para leer su valor exacto.", + "advancement.create.aesthetics": "Boom, ¡Estética!", + "advancement.create.aesthetics.desc": "Coloca soportes en ejes, ductos y engranajes.", + "advancement.create.reinforced": "Boom, ¡Reforzado!", + "advancement.create.reinforced.desc": "Utiliza bloques de revestimiento en un eje, un ducto y una cinta.", "advancement.create.water_wheel": "Aprovechar la hidráulica", - "advancement.create.water_wheel.desc": "Coloca una Rueda hidráulica e intenta hacerla girar.", + "advancement.create.water_wheel.desc": "Coloca una rueda hidráulica e intenta hacerla girar.", "advancement.create.chocolate_wheel": "Potencia de buen gusto", - "advancement.create.chocolate_wheel.desc": "Hacer funcionar una rueda de agua con chocolate fundido.", - "advancement.create.lava_wheel": "Rueda de Magma", + "advancement.create.chocolate_wheel.desc": "Haz funcionar una rueda de agua con chocolate fundido.", + "advancement.create.lava_wheel": "Rueda de magma", "advancement.create.lava_wheel.desc": "Esto no debió haber funcionado.", "advancement.create.cuckoo": "¿Es el momento?", - "advancement.create.cuckoo.desc": "Presenciar cómo un Reloj de cucú anuncia la hora de acostarse.", + "advancement.create.cuckoo.desc": "Presencia cómo un reloj de cuco anuncia la hora de acostarse.", "advancement.create.millstone": "Triturador de bolsillo", - "advancement.create.millstone.desc": "Colocar y alimentar una Piedra de molino.", + "advancement.create.millstone.desc": "Coloca y alimenta una piedra de molino.", "advancement.create.windmill": "Una suave brisa", - "advancement.create.windmill.desc": "Montar un molino de viento.", + "advancement.create.windmill.desc": "Monta un molino de viento.", "advancement.create.maxed_windmill": "Una fuerte brisa", - "advancement.create.maxed_windmill.desc": "Montar un molino de viento de máxima intensidad.", + "advancement.create.maxed_windmill.desc": "Monta un molino de viento con máxima intensidad.", "advancement.create.andesite_casing": "La edad de la andesita", "advancement.create.andesite_casing.desc": "Utiliza un poco de aleación de andesita y madera para crear un revestimiento básico.", "advancement.create.mechanical_drill": "Interruptores fijos", - "advancement.create.mechanical_drill.desc": "Colocar y alimentar un taladro mecánico.", + "advancement.create.mechanical_drill.desc": "Coloca y alimenta un taladro mecánico.", "advancement.create.press": "¡La prensa se pone en marcha!", "advancement.create.press.desc": "Activa una prensa mecánica y utilízala para crear algunas láminas.", "advancement.create.polished_rose_quartz": "Diamantes rosas", "advancement.create.polished_rose_quartz.desc": "Utiliza un trozo de papel de lija para pulir el cuarzo rosa hasta que se vuelva transparente.", "advancement.create.electron_tube": "Beep Boop", - "advancement.create.electron_tube.desc": "Haz algunos Tubos de Electrones, útiles en la fabricación de maquinaria menos primitiva.", + "advancement.create.electron_tube.desc": "Haz algunos tubos de electrones, útiles en la fabricación de maquinaria menos primitiva.", "advancement.create.mechanical_saw": "Picado estacionario", - "advancement.create.mechanical_saw.desc": "Colocar y alimentar una sierra mecánica.", + "advancement.create.mechanical_saw.desc": "Coloca y alimenta una sierra mecánica.", "advancement.create.basin": "Funcionamiento de la cuenca", - "advancement.create.basin.desc": "Coloca una Cuenca e intenta arrojar objetos en ella.", + "advancement.create.basin.desc": "Coloca una cuenca e intenta arrojar objetos en ella.", "advancement.create.mixer": "Mezcla de colores", - "advancement.create.mixer.desc": "Coloque una batidora mecánica sobre el lavabo, enciéndala y empiece a mezclar algunos ingredientes.", + "advancement.create.mixer.desc": "Coloca una batidora mecánica sobre el lavabo, enciéndala y empiece a mezclar algunos ingredientes.", "advancement.create.blaze_burner": "Una chimenea viva", - "advancement.create.blaze_burner.desc": "Obtener un Quemador de Blaze.", + "advancement.create.blaze_burner.desc": "Obtiene un quemador de blaze.", "advancement.create.compact": "Compactación automática", - "advancement.create.compact.desc": "Utiliza una prensa y una palangana para compactar algunos elementos.", + "advancement.create.compact.desc": "Utiliza una prensa y una cuenca para compactar algunos objetos.", "advancement.create.brass": "Aleaciones reales", - "advancement.create.brass.desc": "Utiliza Cobre molido y Zinc molido para crear algo de latón.", + "advancement.create.brass.desc": "Utiliza cobre molido y zinc molido para crear algo de latón.", "advancement.create.brass_casing": "La Edad de Latón", "advancement.create.brass_casing.desc": "Utiliza el latón recién obtenido y algo de madera para crear un revestimiento más avanzado.", "advancement.create.copper_casing": "La Edad de Cobre", "advancement.create.copper_casing.desc": "Utiliza algunas láminas de cobre y madera para crear algunos revestimientos de cobre.", "advancement.create.spout": "Sploosh", - "advancement.create.spout.desc": "Observar el llenado de un elemento fluido usando una boquilla.", + "advancement.create.spout.desc": "Observa el llenado de un fluido usando una boquilla.", "advancement.create.spout_potion": "Cervecera global", "advancement.create.spout_potion.desc": "Mira cómo un pico llena una botella con líquido de poción.", "advancement.create.chocolate": "Un mundo de imaginación", - "advancement.create.chocolate.desc": "Obtener un cubo de chocolate fundido.", + "advancement.create.chocolate.desc": "Obtiene un cubo con chocolate fundido.", "advancement.create.item_drain": "Drenaje de la ropa", - "advancement.create.item_drain.desc": "Ver cómo se vacía un elemento fluido mediante una drenadora de elementos.", - "advancement.create.chained_item_drain": "Déjalo rodar!", - "advancement.create.chained_item_drain.desc": "Observa cómo un objeto rueda por varios drenadores de elementos encadenados.", + "advancement.create.item_drain.desc": "Ve cómo se vacía un fluido mediante un drenador de objetos.", + "advancement.create.chained_item_drain": "¡Déjalo rodar!", + "advancement.create.chained_item_drain.desc": "Observa cómo un objeto rueda por varios drenadores de objetos encadenados.", "advancement.create.glass_pipe": "Espía del flujo", - "advancement.create.glass_pipe.desc": "Observe cómo se propaga el fluido a través de una tubería de fluidos con ventanas. Las tuberías de fluido rectas se convierten en ventanas cuando se utiliza una llave en ellas.", + "advancement.create.glass_pipe.desc": "Observa cómo se propaga el fluido a través de un tubo de fluidos con ventanas. Los tubos de fluido rectos se convierten en ventanas cuando se utiliza una llave inglesa en ellas.", "advancement.create.pipe_collision": "No cruzar nunca los arroyos", "advancement.create.pipe_collision.desc": "Vea cómo se unen dos fluidos en su red de tuberías.", "advancement.create.pipe_spill": "¡Hay una fuga!", "advancement.create.pipe_spill.desc": "Observe cómo un extremo abierto de una tubería toma o deposita fluidos en el mundo.", "advancement.create.hose_pulley": "Vertidos industriales", - "advancement.create.hose_pulley.desc": "Bajar una polea de manguera y ver cómo se vacía o se llena un cuerpo de líquido.", + "advancement.create.hose_pulley.desc": "Baja una polea de manguera y ve cómo se vacía o se llena un cuerpo de líquido.", "advancement.create.infinite_water": "Drenando el océano", "advancement.create.infinite_water.desc": "Bombea de una masa de agua lo suficientemente grande como para ser considerada infinita.", "advancement.create.infinite_lava": "Drenaje del núcleo de los planetas", @@ -637,51 +637,51 @@ "advancement.create.infinite_chocolate": "Ahogándose en la imaginación", "advancement.create.infinite_chocolate.desc": "Bombea desde una masa de chocolate fundido lo suficientemente grande como para ser considerado infinito.", "advancement.create.crafter": "Montaje automatizado", - "advancement.create.crafter.desc": "Coloca y alimenta algunos autoensambladores.", + "advancement.create.crafter.desc": "Coloca y alimenta algunos ensambladores.", "advancement.create.clockwork_bearing": "Artilugio a la hora", - "advancement.create.clockwork_bearing.desc": "Ensamblar una estructura montada sobre un rodamiento de relojería.", + "advancement.create.clockwork_bearing.desc": "Ensamblar una estructura montada sobre un rodamiento tipo reloj.", "advancement.create.nixie_tube": "Signos de estilo", - "advancement.create.nixie_tube.desc": "Obtener y colocar un par de Tubos Nixie.", + "advancement.create.nixie_tube.desc": "Obtener y colocar un par de tubos nixie.", "advancement.create.deployer": "Picar, colocar y atacar", - "advancement.create.deployer.desc": "Coloca y potencia un Desplegador, el reflejo perfecto de ti mismo.", + "advancement.create.deployer.desc": "Coloca y potencia un desplegador, el reflejo perfecto de ti mismo.", "advancement.create.speed_controller": "Los ingenieros lo odian!", - "advancement.create.speed_controller.desc": "Coloque un regulador de velocidad de rotación, el dispositivo definitivo para cambiar de marcha.", + "advancement.create.speed_controller.desc": "Coloca un controlador de velocidad rotacional, el dispositivo definitivo para cambiar de marcha.", "advancement.create.flywheel": "El corazón de la fábrica", - "advancement.create.flywheel.desc": "Conectar con éxito un motor a la rueda de inercia.", + "advancement.create.flywheel.desc": "Conecta con éxito un motor a la rueda de inercia.", "advancement.create.overstress_flywheel": "Altos niveles de estrés", - "advancement.create.overstress_flywheel.desc": "Sobrecargar un Motor de Horno.", + "advancement.create.overstress_flywheel.desc": "Sobrecarga un motor de horno.", "advancement.create.precision_mechanism": "UNLOCALIZED: Complex Curiosities", "advancement.create.precision_mechanism.desc": "UNLOCALIZED: Assemble a Precision Mechanism.", - "advancement.create.mechanical_arm": "Manos ocupadas!", + "advancement.create.mechanical_arm": "¡Manos ocupadas!", "advancement.create.mechanical_arm.desc": "Crea un brazo mecánico, selecciona las entradas y salidas, colócalo en el suelo y dale energía; luego observa cómo hace todo el trabajo por ti.", - "advancement.create.musical_arm": "Tócame la melodía!", + "advancement.create.musical_arm": "¡Tócame la melodía!", "advancement.create.musical_arm.desc": "Vea cómo un brazo mecánico maneja su Jukebox.", "advancement.create.arm_many_targets": "Organize-o-Tron", - "advancement.create.arm_many_targets.desc": "Programar un brazo mecánico con diez o más posiciones de salida.", + "advancement.create.arm_many_targets.desc": "Programa un brazo mecánico con diez o más posiciones de salida.", "advancement.create.arm_blaze_burner": "Combust-o-Tron", - "advancement.create.arm_blaze_burner.desc": "Instruya un brazo mecánico para alimentar su Quemador de Blaze.", + "advancement.create.arm_blaze_burner.desc": "Instruya un brazo mecánico para alimentar su quemador de blaze.", "advancement.create.fist_bump": "¡Pégale, hermano!", - "advancement.create.fist_bump.desc": "Hacer que dos Desplegadores se den un puñetazo.", + "advancement.create.fist_bump.desc": "Haz que dos desplegadores se den un puñetazo.", "advancement.create.crushing_wheel": "Un par de gigantes", - "advancement.create.crushing_wheel.desc": "Crea algunas Ruedas de trituración para descomponer más materiales de forma más eficaz.", + "advancement.create.crushing_wheel.desc": "Crea algunas ruedas de trituración para descomponer más materiales de forma más eficaz.", "advancement.create.blaze_cake": "Fiebre del azúcar", - "advancement.create.blaze_cake.desc": "Hornea en tu Quemador de Blaze un pastel especial.", - "advancement.create.chromatic_compound": "Minerales bipolares", - "advancement.create.chromatic_compound.desc": "Crea una Barra de Compuesto Cromático.", + "advancement.create.blaze_cake.desc": "Hornea en tu quemador de blaze un pastel especial.", + "advancement.create.chromatic_compound": "Mysterious Minerals", + "advancement.create.chromatic_compound.desc": "Crea una barra de compuesto cromático.", "advancement.create.shadow_steel": "Retorno del vacío", - "advancement.create.shadow_steel.desc": "Crea Acero Sombrío, una barra de metal de la nada.", + "advancement.create.shadow_steel.desc": "Crea acero sombrío, una barra de metal de la nada.", "advancement.create.refined_radiance": "Brillante e inspirador", - "advancement.create.refined_radiance.desc": "Crea un Resplandor refinado, una poderosa sustancia cromática.", + "advancement.create.refined_radiance.desc": "Crea un resplandor refinado, una poderosa sustancia cromática.", "advancement.create.chromatic_age": "La edad cromática", "advancement.create.chromatic_age.desc": "Crear bloques de revestimiento de la luz y la oscuridad.", "advancement.create.wand_of_symmetry": "Espejos radiantes", "advancement.create.wand_of_symmetry.desc": "Crear un bastón de simetría.", - "advancement.create.extendo_grip": "Boioioing!", - "advancement.create.extendo_grip.desc": "Hazte con un Agarre extentido.", - "advancement.create.potato_cannon": "UNLOCALIZED: Fwoomp!", - "advancement.create.potato_cannon.desc": "UNLOCALIZED: Defeat an enemy with your Potato Cannon.", + "advancement.create.extendo_grip": "¡Boioioing!", + "advancement.create.extendo_grip.desc": "Hazte con un agarre extentido.", + "advancement.create.potato_cannon": "Fwoomp!", + "advancement.create.potato_cannon.desc": "Defeat an enemy with your Potato Cannon.", "advancement.create.dual_extendo_grip": "La última edad del boing", - "advancement.create.dual_extendo_grip.desc": "Doble Empuñadura extendida para un alcance sobrehumano.", + "advancement.create.dual_extendo_grip.desc": "Doble empuñadura extendida para un alcance sobrehumano.", "advancement.create.eob": "Fin de la beta", "advancement.create.eob.desc": "Espere más contenido aquí en el futuro. <3", @@ -691,7 +691,7 @@ "itemGroup.create.base": "Create", "itemGroup.create.palettes": "Paletas", - "death.attack.create.crush": "%1$s se procesó por las Ruedas de trituración", + "death.attack.create.crush": "%1$s se procesó en las ruedas de trituración", "death.attack.create.crush.player": "UNLOCALIZED: %1$s was thrown into Crushing Wheels by %2$s", "death.attack.create.fan_fire": "%1$s murió quemado por el aire caliente", "death.attack.create.fan_fire.player": "UNLOCALIZED: %1$s was thrown into a smoker by %2$s", @@ -701,21 +701,21 @@ "death.attack.create.mechanical_drill.player": "UNLOCALIZED: %1$s was thrown in front of a Drill by %2$s", "death.attack.create.mechanical_saw": "%1$s fue cortado por la mitad por una sierra mecánica", "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.cuckoo_clock_explosion": "%1$s fue volado por los aires por un reloj cucú manipulado", + "death.attack.create.potato_cannon": "%1$s was shot by %2$s's Potato Cannon", + "death.attack.create.potato_cannon.item": "%1$s was shot by %2$s using %3$s", + "death.attack.create.cuckoo_clock_explosion": "%1$s fue volado por los aires por un reloj de cuco manipulado", "death.attack.create.cuckoo_clock_explosion.player": "UNLOCALIZED: %1$s was blown up by tampered cuckoo clock", "create.block.deployer.damage_source_name": "un Desplegador rebelde", "create.block.cart_assembler.invalid": "Coloque su Ensamblador de vagonetas en un bloque de Raíles", - "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": "Regresar al menú", + "create.menu.configure": "Configurar...", + "create.menu.ponder_index": "Ponder Index", + "create.menu.only_ingame": "Available in the Pause Menu", + "create.menu.project_page": "Página del proyecto", + "create.menu.report_bugs": "Informar de problemas", + "create.menu.support": "Apóyenos", "create.recipe.crushing": "Trituración", "create.recipe.milling": "Fresado", @@ -727,7 +727,7 @@ "create.recipe.fan_blasting.fan": "Ventilador detrás de la lava", "create.recipe.pressing": "Prensando", "create.recipe.mixing": "Mezclando", - "create.recipe.deploying": "UNLOCALIZED: Deploying", + "create.recipe.deploying": "Desplegando", "create.recipe.automatic_shapeless": "Elaboración automatizada de productos sin forma", "create.recipe.automatic_brewing": "Elaboración de cerveza automatizada", "create.recipe.packing": "Compactando", @@ -740,17 +740,17 @@ "create.recipe.sandpaper_polishing": "Pulido con papel de lija", "create.recipe.mystery_conversion": "Conversión misteriosa", "create.recipe.spout_filling": "Llenar por el pico", - "create.recipe.draining": "Drenador de elementos", - "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 junk", + "create.recipe.draining": "Drenador de objetos", + "create.recipe.sequenced_assembly": "Sequenced Assembly", + "create.recipe.assembly.next": "Next: %1$s", + "create.recipe.assembly.step": "Step %1$s:", + "create.recipe.assembly.progress": "Progress: %1$s/%2$s", + "create.recipe.assembly.pressing": "Process in Press", + "create.recipe.assembly.spout_filling_fluid": "Spout %1$s", + "create.recipe.assembly.deploying_item": "Deploy %1$s", + "create.recipe.assembly.cutting": "Cut with Saw", + "create.recipe.assembly.repeat": "Repeat Sequence %1$s Times", + "create.recipe.assembly.junk": "Random junk", "create.recipe.processing.chance": "%1$s%% Chance", "create.recipe.heat_requirement.none": "No es necesario calentar", "create.recipe.heat_requirement.heated": "Calentado", @@ -767,7 +767,7 @@ "create.generic.unit.seconds": "Segundos", "create.generic.unit.minutes": "Minutos", "create.generic.unit.rpm": "RPM", - "create.generic.unit.stress": "su", + "create.generic.unit.stress": "SU(unidades de estrés)", "create.generic.unit.degrees": "°", "create.generic.unit.millibuckets": "%1$smB", "create.generic.clockwise": "En el sentido de las agujas del reloj", @@ -784,11 +784,11 @@ "create.keyinfo.scrolldown": "Simular usar la rueda del ratón hacia abajo (en el mundo)", "create.gui.scrollInput.defaultTitle": "Seleccione una opción:", - "create.gui.scrollInput.scrollToModify": "Usa la rueda del ratón para Modificar", + "create.gui.scrollInput.scrollToModify": "Usa la rueda del ratón para modificar", "create.gui.scrollInput.scrollToAdjustAmount": "Usa la rueda del ratón para ajustar la cantidad", - "create.gui.scrollInput.scrollToSelect": "Usa la rueda del ratón para Seleccionar", - "create.gui.scrollInput.shiftScrollsFaster": "Shift para usar la rueda del ratón más rápido", - "create.gui.toolmenu.focusKey": "Mantenga [%1$s] para enfocar", + "create.gui.scrollInput.scrollToSelect": "Usa la rueda del ratón para seleccionar", + "create.gui.scrollInput.shiftScrollsFaster": "[Mayús izdo.] para usar la rueda del ratón más rápido", + "create.gui.toolmenu.focusKey": "Mantén [%1$s] para enfocar", "create.gui.toolmenu.cycle": "[RUEDA DEL RATÓN] para el ciclo", "create.gui.symmetryWand.mirrorType": "Espejado", "create.gui.symmetryWand.orientation": "Orientación", @@ -803,17 +803,17 @@ "create.orientation.alongZ": "A lo largo de Z", "create.orientation.alongX": "A lo largo de X", - "create.gui.terrainzapper.title": "Worldshaper", - "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.placement": "Colocación", + "create.gui.terrainzapper.title": "Blockzapper", + "create.gui.terrainzapper.searchDiagonal": "Seguir diagonales", + "create.gui.terrainzapper.searchFuzzy": "Ignorar los bordes del material", + "create.gui.terrainzapper.patternSection": "Patrón", + "create.gui.terrainzapper.pattern.solid": "Sólido", + "create.gui.terrainzapper.pattern.checkered": "Tablero de ajedrez", + "create.gui.terrainzapper.pattern.inversecheckered": "Tablero de ajedrez invertido", + "create.gui.terrainzapper.pattern.chance25": "25% Roll", + "create.gui.terrainzapper.pattern.chance50": "50% Roll", + "create.gui.terrainzapper.pattern.chance75": "75% Roll", + "create.gui.terrainzapper.placement": "Ubicación", "create.gui.terrainzapper.placement.merged": "Fusionado", "create.gui.terrainzapper.placement.attached": "Adjuntado", "create.gui.terrainzapper.placement.inserted": "Insertado", @@ -821,19 +821,19 @@ "create.gui.terrainzapper.brush.cuboid": "Cuboide", "create.gui.terrainzapper.brush.sphere": "Esfera", "create.gui.terrainzapper.brush.cylinder": "Cilindro", - "create.gui.terrainzapper.brush.surface": "UNLOCALIZED: Surface", - "create.gui.terrainzapper.brush.cluster": "UNLOCALIZED: Cluster", + "create.gui.terrainzapper.brush.surface": "Superficie", + "create.gui.terrainzapper.brush.cluster": "Grupo", "create.gui.terrainzapper.tool": "Herramienta", "create.gui.terrainzapper.tool.fill": "Llenar", - "create.gui.terrainzapper.tool.place": "Sitio", - "create.gui.terrainzapper.tool.replace": "Sustituir", - "create.gui.terrainzapper.tool.clear": "Borrar", - "create.gui.terrainzapper.tool.overlay": "Superposición", + "create.gui.terrainzapper.tool.place": "Ubicar", + "create.gui.terrainzapper.tool.replace": "Reemplazar", + "create.gui.terrainzapper.tool.clear": "Eliminar", + "create.gui.terrainzapper.tool.overlay": "Superponer", "create.gui.terrainzapper.tool.flatten": "Aplanar", - "create.terrainzapper.shiftRightClickToSet": "Shift+Clic con el botón derecho para seleccionar una forma", - "create.terrainzapper.usingBlock": "UNLOCALIZED: Using: %1$s", - "create.terrainzapper.leftClickToSet": "UNLOCALIZED: Left-Click a Block to set Material", + "create.terrainzapper.shiftRightClickToSet": "[Mayús izdo.] + clic derecho para seleccionar una forma", + "create.terrainzapper.usingBlock": "Usando: %1$s", + "create.terrainzapper.leftClickToSet": "Clic izquierdo a un bloque para establecer el material", "create.minecart_coupling.two_couplings_max": "Las vagonetas no pueden tener más de dos enganches cada una", "create.minecart_coupling.unloaded": "Algunas partes de su tren parecen estar en chunks no cargados", @@ -859,8 +859,8 @@ "create.contraptions.clockwork.hour_first_24": "La manecilla del día primero", "create.logistics.filter": "Filtro", - "create.logistics.recipe_filter": "Filtro de recetas", - "create.logistics.fluid_filter": "Filtro de fluidos", + "create.logistics.recipe_filter": "Filtro para recetas", + "create.logistics.fluid_filter": "Filtro para fluidos", "create.logistics.firstFrequency": "Freq. #1", "create.logistics.secondFrequency": "Freq. #2", "create.logistics.filter.apply": "Filtro aplicado a %1$s.", @@ -871,14 +871,14 @@ "create.gui.goggles.kinetic_stats": "Estadísticas cinéticas:", "create.gui.goggles.at_current_speed": "con la velocidad actual", "create.gui.goggles.pole_length": "Longitud del poste:", - "create.gui.goggles.fluid_container": "UNLOCALIZED: Fluid Container Info:", - "create.gui.goggles.fluid_container.capacity": "UNLOCALIZED: Capacity: ", + "create.gui.goggles.fluid_container": "Información sobre el contenedor de fluidos:", + "create.gui.goggles.fluid_container.capacity": "Capacidad: ", "create.gui.assembly.exception": "Este artilugio no se pudo montar:", "create.gui.assembly.exception.unmovableBlock": "Bloque inamovible (%4$s) en [%1$s,%2$s,%3$s]", "create.gui.assembly.exception.chunkNotLoaded": "El bloque en [%1$s,%2$s,%3$s] no estaba en un chunk cargado", "create.gui.assembly.exception.structureTooLarge": "Hay demasiados bloques incluídos en el artilugio.\nEl máximo configurado es: %1$s", "create.gui.assembly.exception.tooManyPistonPoles": "Hay demasiadas Pértigas de extensión conectadas a este Pistón.\nEl máximo configurado es: %1$s", - "create.gui.assembly.exception.noPistonPoles": "Faltan pértigas de extensión para el Pistón", + "create.gui.assembly.exception.noPistonPoles": "Faltan pértigas de extensión para el pistón", "create.gui.assembly.exception.not_enough_sails": "La estructura adjunta no incluye suficientes bloques tipo vela: %1$s\nSe requiere un mínimo de %2$s", "create.gui.gauge.info_header": "Información sobre el medidor:", "create.gui.speedometer.title": "Velocidad de rotación", @@ -887,7 +887,7 @@ "create.gui.stressometer.overstressed": "Sobrecargado", "create.gui.stressometer.no_rotation": "Sin rotación", "create.gui.contraptions.not_fast_enough": "Parece que este %1$s no está girando con _suficiente_ velocidad_.", - "create.gui.contraptions.network_overstressed": "Parece que este artilugio está _sobrecargado_. Añade más fuentes o _desacelera_ los componentes con un _impacto_ de alto estrés.", + "create.gui.contraptions.network_overstressed": "Parece que este artilugio está _sobrecargado_. Añade más fuentes o _desacelera_ los componentes con un _impacto de estrés alto_.", "create.gui.adjustable_crate.title": "Caja ajustable", "create.gui.adjustable_crate.storageSpace": "Espacio de almacenamiento", "create.gui.stockpile_switch.title": "Interruptor de acopio", @@ -907,7 +907,7 @@ "create.gui.sequenced_gearshift.instruction.delay.duration": "Duración", "create.gui.sequenced_gearshift.instruction.end.descriptive": "Fin", "create.gui.sequenced_gearshift.instruction.end": "Fin", - "create.gui.sequenced_gearshift.instruction.await.descriptive": "En espera de un Pulso de Redstone", + "create.gui.sequenced_gearshift.instruction.await.descriptive": "En espera de un pulso de redstone", "create.gui.sequenced_gearshift.instruction.await": "En espera", "create.gui.sequenced_gearshift.speed": "Velocidad, Dirección", "create.gui.sequenced_gearshift.speed.forward": "Velocidad de entrada, hacia adelante", @@ -918,7 +918,7 @@ "create.schematicAndQuill.dimensions": "Tamaño del esquema: %1$sx%2$sx%3$s", "create.schematicAndQuill.firstPos": "Primera posición fijada.", "create.schematicAndQuill.secondPos": "Segunda posición fijada.", - "create.schematicAndQuill.noTarget": "Mantenga [Ctrl] para seleccionar los bloques del aire.", + "create.schematicAndQuill.noTarget": "Mantén [Ctrl] para seleccionar los bloques del aire.", "create.schematicAndQuill.abort": "Selección eliminada.", "create.schematicAndQuill.title": "Nombre del esquema:", "create.schematicAndQuill.convert": "Guardar y desplegar inmediatamente", @@ -934,7 +934,7 @@ "create.schematic.rotation.cw270": "En el sentido de las agujas del reloj 270", "create.schematic.mirror": "Espejado", "create.schematic.mirror.none": "Ninguno", - "create.schematic.mirror.frontBack": "Delante-detrás", + "create.schematic.mirror.frontBack": "Delante-Detrás", "create.schematic.mirror.leftRight": "Izquierda-Derecha", "create.schematic.tool.deploy": "Despliegue", "create.schematic.tool.move": "Mover XZ", @@ -943,27 +943,27 @@ "create.schematic.tool.print": "Imprimir", "create.schematic.tool.flip": "Voltear", "create.schematic.tool.deploy.description.0": "Mueve la estructura a un lugar.", - "create.schematic.tool.deploy.description.1": "Haga clic con el botón derecho del ratón en el suelo para colocar.", - "create.schematic.tool.deploy.description.2": "Mantenga [Ctrl] para seleccionar a una distancia fija.", - "create.schematic.tool.deploy.description.3": "[Ctrl]-Rueda del ratón para cambiar la distancia.", + "create.schematic.tool.deploy.description.1": "Haz clic con el botón derecho del ratón en el suelo para colocarla.", + "create.schematic.tool.deploy.description.2": "Mantén [Ctrl] para seleccionar a una distancia fija.", + "create.schematic.tool.deploy.description.3": "[Ctrl] + [RUEDA DEL RATÓN] para cambiar la distancia.", "create.schematic.tool.move.description.0": "Desplaza el esquema horizontalmente.", - "create.schematic.tool.move.description.1": "Apunta al Esquema y [CTRL]-Rueda del ratón para ponerlo.", + "create.schematic.tool.move.description.1": "Apunta al esquema y [Ctrl] + [RUEDA DEL RATÓN] para ponerlo.", "create.schematic.tool.move.description.2": "", "create.schematic.tool.move.description.3": "", "create.schematic.tool.movey.description.0": "Desplaza el esquema verticalmente..", - "create.schematic.tool.movey.description.1": "[CTRL]-Rueda del ratón para moverlo hacia arriba/abajo.", + "create.schematic.tool.movey.description.1": "[Ctrl] + [RUEDA DEL RATÓN] para moverlo hacia arriba/abajo.", "create.schematic.tool.movey.description.2": "", "create.schematic.tool.movey.description.3": "", "create.schematic.tool.rotate.description.0": "Gira el esquema alrededor de su centro.", - "create.schematic.tool.rotate.description.1": "[CTRL]-Rueda del ratón para girar 90 grados.", + "create.schematic.tool.rotate.description.1": "[Ctrl] + [RUEDA DEL RATÓN] para girar 90 grados.", "create.schematic.tool.rotate.description.2": "", "create.schematic.tool.rotate.description.3": "", "create.schematic.tool.print.description.0": "Sitúa instantáneamente la estructura en el mundo.", "create.schematic.tool.print.description.1": "[Clic derecho] para confirmar la colocación en el lugar actual.", "create.schematic.tool.print.description.2": "Esta herramienta es sólo para el Modo Creativo.", "create.schematic.tool.print.description.3": "", - "create.schematic.tool.flip.description.0": "Voltea el Esquema a lo largo de la cara que seleccione.", - "create.schematic.tool.flip.description.1": "Apunta al esquema y [CTRL]-Rueda del ratón para voltearlo.", + "create.schematic.tool.flip.description.0": "Voltea el esquema a lo largo de la cara que seleccione.", + "create.schematic.tool.flip.description.1": "Apunta al esquema y [Ctrl] + [RUEDA DEL RATÓN] para voltearlo.", "create.schematic.tool.flip.description.2": "", "create.schematic.tool.flip.description.3": "", @@ -977,8 +977,8 @@ "create.gui.schematicTable.availableSchematics": "Esquemas disponibles", "create.gui.schematicTable.noSchematics": "No hay esquemas guardados", "create.gui.schematicTable.uploading": "Subiendo...", - "create.gui.schematicTable.finished": "Subida finalizada!", - "create.gui.schematicannon.title": "Schematicannon", + "create.gui.schematicTable.finished": "¡Subida finalizada!", + "create.gui.schematicannon.title": "Cañón de esquemas", "create.gui.schematicannon.listPrinter": "Lista de control de la impresora", "create.gui.schematicannon.gunpowderLevel": "Pólvora %1$s%%", "create.gui.schematicannon.shotsRemaining": "Disparos restantes: %1$s", @@ -996,16 +996,16 @@ "create.gui.schematicannon.slot.listPrinter": "Coloque los libros aquí para imprimir una lista de comprobación para su esquema", "create.gui.schematicannon.slot.schematic": "Añada su esquema aquí. Asegúrese de que se despliega en un lugar específico.", "create.gui.schematicannon.option.skipMissing.description": "Si el cañón no encuentra un bloque necesario para su colocación, continuará en la siguiente ubicación.", - "create.gui.schematicannon.option.skipTileEntities.description": "El cañón evitará reemplazar los bloques que contienen datos, como los Cofres.", + "create.gui.schematicannon.option.skipTileEntities.description": "El cañón evitará reemplazar los bloques que contienen datos, como los cofres.", "create.gui.schematicannon.option.dontReplaceSolid.description": "El cañón nunca sustituirá ningún bloque sólido en su zona de trabajo, sólo los no sólidos y el aire.", "create.gui.schematicannon.option.replaceWithSolid.description": "El cañón sólo reemplazará los bloques sólidos en su área de trabajo si el esquema contiene un bloque sólido en la ubicación.", "create.gui.schematicannon.option.replaceWithAny.description": "El cañón reemplazará los bloques sólidos en su área de trabajo si el esquema contiene algún bloque en la ubicación.", - "create.gui.schematicannon.option.replaceWithEmpty.description": "El cañón eliminará todos los bloques de su zona de trabajo, incluidos los sustituidos por Aire.", + "create.gui.schematicannon.option.replaceWithEmpty.description": "El cañón eliminará todos los bloques de su zona de trabajo, incluidos los sustituidos por aire.", "create.schematicannon.status.idle": "Inactivo", "create.schematicannon.status.ready": "Listo", "create.schematicannon.status.running": "Funcionando", - "create.schematicannon.status.finished": "Finished", + "create.schematicannon.status.finished": "Finalizado", "create.schematicannon.status.paused": "Pausado", "create.schematicannon.status.stopped": "Detenido", "create.schematicannon.status.noGunpowder": "Sin pólvora", @@ -1024,9 +1024,9 @@ "create.materialChecklist.blocksNotLoaded": "* Descargo de Responsabilidad *\n\nLa lista de materiales puede ser inexacta debido a que no se han cargado los chunks pertinentes.", "create.gui.filter.deny_list": "Lista de denegados", - "create.gui.filter.deny_list.description": "Los elementos pasan si NO coinciden con ninguno de los anteriores. Una lista de denegación vacía acepta todo.", + "create.gui.filter.deny_list.description": "Los objetos pasan si NO coinciden con ninguno de los anteriores. Una lista de denegación vacía acepta todo.", "create.gui.filter.allow_list": "Lista de permitidos", - "create.gui.filter.allow_list.description": "Los elementos pasan si coinciden con alguno de los anteriores. Una lista de permitidos vacía rechaza todo.", + "create.gui.filter.allow_list.description": "Los objetos pasan si coinciden con alguno de los anteriores. Una lista de permitidos vacía rechaza todo.", "create.gui.filter.respect_data": "Respetar datos", "create.gui.filter.respect_data.description": "Los objetos sólo coinciden si su durabilidad, encantos y otros atributos también coinciden.", "create.gui.filter.ignore_data": "Ignorar datos", @@ -1066,10 +1066,10 @@ "create.item_attributes.added_by.inverted": "no fue añadida por %1$s", "create.item_attributes.has_enchant": "está encantado con %1$s", "create.item_attributes.has_enchant.inverted": "no está encantado con %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.max_enchanted": "UNLOCALIZED: is enchanted at max level", - "create.item_attributes.max_enchanted.inverted": "UNLOCALIZED: is not enchanted at max level", + "create.item_attributes.color": "Está teñido %1$s", + "create.item_attributes.color.inverted": "No está teñido %1$s", + "create.item_attributes.max_enchanted": "está encantado en el nivel máximo", + "create.item_attributes.max_enchanted.inverted": "no está encantado en el nivel máximo", "create.item_attributes.has_fluid": "contiene %1$s", "create.item_attributes.has_fluid.inverted": "no contiene %1$s", "create.item_attributes.has_name": "tiene el nombre personalizado %1$s", @@ -1098,16 +1098,16 @@ "create.gui.attribute_filter.add_attribute": "Añadir atributo a la lista", "create.gui.attribute_filter.add_inverted_attribute": "Añadir atributo invertido a la Lista", "create.gui.attribute_filter.allow_list_disjunctive": "Lista de permitidos (Cualquiera)", - "create.gui.attribute_filter.allow_list_disjunctive.description": "Los elementos pasan si tienen alguno de los atributos seleccionados", + "create.gui.attribute_filter.allow_list_disjunctive.description": "Los objetos pasan si tienen alguno de los atributos seleccionados", "create.gui.attribute_filter.allow_list_conjunctive": "Lista de permitidos (Todos)", - "create.gui.attribute_filter.allow_list_conjunctive.description": "Los elementos pasan sólo si tienen TODOS los atributos seleccionados", + "create.gui.attribute_filter.allow_list_conjunctive.description": "Los objetos pasan sólo si tienen TODOS los atributos seleccionados", "create.gui.attribute_filter.deny_list": "Lista de denegados", - "create.gui.attribute_filter.deny_list.description": "Los elementos pasan si NO tienen ninguno de los atributos seleccionados", + "create.gui.attribute_filter.deny_list.description": "Los objetos pasan si NO tienen ninguno de los atributos seleccionados", "create.gui.attribute_filter.add_reference_item": "Añadir elemento de referencia", - "create.tooltip.holdForDescription": "UNLOCALIZED: Hold [%1$s] for Summary", - "create.tooltip.holdForControls": "UNLOCALIZED: Hold [%1$s] for Controls", - "create.tooltip.keyShift": "Shift", + "create.tooltip.holdForDescription": "Mantén [%1$s] para mas información", + "create.tooltip.holdForControls": "Mantén [%1$s] para ver los controles", + "create.tooltip.keyShift": "Mayús izdo.", "create.tooltip.keyCtrl": "Ctrl", "create.tooltip.speedRequirement": "Requisitos de velocidad: %1$s", "create.tooltip.speedRequirement.none": "Ninguno", @@ -1122,25 +1122,25 @@ "create.tooltip.capacityProvided.low": "Pequeña", "create.tooltip.capacityProvided.medium": "Media", "create.tooltip.capacityProvided.high": "Grande", - "create.tooltip.generationSpeed": "Genera en %1$s %2$s", + "create.tooltip.generationSpeed": "Generada en %1$s %2$s", "create.tooltip.analogStrength": "Fuerza analógica: %1$s/15", - "create.mechanical_arm.extract_from": "Extraer elementos de %1$s", - "create.mechanical_arm.deposit_to": "Depositar elementos en %1$s", + "create.mechanical_arm.extract_from": "Extraer objetos de %1$s", + "create.mechanical_arm.deposit_to": "Depositar objetos en %1$s", "create.mechanical_arm.summary": "El brazo mecánico tiene %1$s entrada(s) y %2$s salida(s)", "create.mechanical_arm.points_outside_range": "%1$s punto(s) de interacción seleccionado(s) eliminado(s) debido a las limitaciones de rango", - "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": "Objetivo seleccionado", + "create.weighted_ejector.target_not_valid": "Expulsión al bloque adyacente (el objetivo no era válido)", + "create.weighted_ejector.no_target": "Expulsión al bloque adyacente (no se ha seleccionado ningún objetivo)", + "create.weighted_ejector.targeting": "Expulsión a [%1$s,%2$s,%3$s]", + "create.weighted_ejector.stack_size": "Tamaño de la pila expulsada", "create.logistics.when_multiple_outputs_available": "Cuando hay múltiples salidas disponibles", "create.mechanical_arm.selection_mode.round_robin": "Round Robin", "create.mechanical_arm.selection_mode.forced_round_robin": "Round Robin forzado", - "create.mechanical_arm.selection_mode.prefer_first": "Preferir el primer objetivo", + "create.mechanical_arm.selection_mode.prefer_first": "Preferir el primero", "create.tunnel.selection_mode.split": "División", "create.tunnel.selection_mode.forced_split": "División forzada", @@ -1151,8 +1151,8 @@ "create.tunnel.selection_mode.synchronize": "Sincronizar entradas", "create.tooltip.chute.header": "Información del ducto", - "create.tooltip.chute.items_move_down": "Los elementos se mueven hacia abajo", - "create.tooltip.chute.items_move_up": "Los elementos se mueven hacia arriba", + "create.tooltip.chute.items_move_down": "Los objetos se mueven hacia abajo", + "create.tooltip.chute.items_move_up": "Los objetos se mueven hacia arriba", "create.tooltip.chute.no_fans_attached": "No hay ventiladores adjuntos", "create.tooltip.chute.fans_push_up": "Los ventiladores empujan desde abajo", "create.tooltip.chute.fans_push_down": "Los ventiladores empujan desde arriba", @@ -1160,32 +1160,32 @@ "create.tooltip.chute.fans_pull_down": "Los ventiladores tiran desde abajo", "create.tooltip.chute.contains": "Contiene: %1$s x%2$s", - "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 enlace activo", + "create.linked_controller.press_keybind": "Presiona %1$s, %2$s, %3$s, %4$s, %5$s o %6$s, para vincular esta frecuencia a la tecla correspondiente", + "create.linked_controller.key_bound": "Frecuencia ligada a %1$s", + "create.linked_controller.frequency_slot_1": "Enlace de teclas: %1$s, Freq. #1", + "create.linked_controller.frequency_slot_2": "Enlace de teclas: %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": "Ranura para ingredientes", + "create.crafting_blueprint.filter_items_viable": "Los objetos del filtro avanzado son viables", + "create.crafting_blueprint.display_slot": "Ranura de pantalla", + "create.crafting_blueprint.inferred": "A partir de la receta", + "create.crafting_blueprint.manually_assigned": "Asignado manualmente", + "create.crafting_blueprint.secondary_display_slot": "Ranura de pantalla secundaria", + "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.hint.hose_pulley.title": "Suministro sin fondo", - "create.hint.hose_pulley": "La masa de fluido objetivo se considera infinita", - "create.hint.mechanical_arm_no_targets.title": "No hay objetivos", - "create.hint.mechanical_arm_no_targets": "Parece que a este _brazo mecánico_ no se le ha asignado ningún _objetivo._ Selecciona correas, depósitos, embudos y otros bloques haciendo _clic derecho_ sobre ellos mientras _sostienes_ el _brazo mecánico_ en tu _mano_.", - "create.hint.empty_bearing.title": "Rodamiento de reloj", - "create.hint.empty_bearing": "_Haz clic con el botón derecho del ratón_ en el rodamiento con la _mano vacía_ para _adherir_ la estructura que acabas de construir delante de él", - "create.hint.full_deployer.title": "Desbordamiento de elementos del desplegador", - "create.hint.full_deployer": "Parece que este _Desplegador_ contiene _elementos_ en exceso que necesitan ser _extraídos._ Usa un _tolva,_embudo_ u otro medio para liberarlo de su desbordamiento.", + "create.hint.hose_pulley.title": "Suministro ilimitado", + "create.hint.hose_pulley": "La masa de fluido objetivo se considera infinita.", + "create.hint.mechanical_arm_no_targets.title": "Sin objetivos", + "create.hint.mechanical_arm_no_targets": "Parece que a este _brazo mecánico_ no se le ha asignado ningún objetivo. Selecciona _correas_, _depósitos_, _embudos_ y otros bloques haciendo clic derecho sobre ellos mientras _sostienes_ el _brazo mecánico_ en tu mano..", + "create.hint.empty_bearing.title": "Actualización del rodamiento", + "create.hint.empty_bearing": "Haz clic derecho sobre el rodamiento con la _mano vacía_ para _adjuntar_ la estructura que acabas de construir delante de él.", + "create.hint.full_deployer.title": "Exceso de objetos en el desplegador", + "create.hint.full_deployer": "Parece que este _desplegador_ contiene _exceso_ de objetos que necesitan ser _extraídos._ Usa una _tolva_, _embudo_ u otro medio para liberarlo de su excedente.", "create.gui.config.overlay1": "Hola :)", "create.gui.config.overlay2": "Esta es una muestra de la superposición", @@ -1200,50 +1200,50 @@ "create.command.killTPSCommand.status.slowed_by.0": "[Crear]: El tick del servidor está actualmente ralentizado en %s ms :o", "create.command.killTPSCommand.status.slowed_by.1": "[Crear]: El tick del servidor está ralentizado en %s ms ahora >:)", "create.command.killTPSCommand.status.slowed_by.2": "[Create]: El tick del servidor ha vuelto a su velocidad normal :D", - "create.command.killTPSCommand.status.usage.0": "[Create]: usar /killtps stop para que el servidor vuelva a la velocidad normal", - "create.command.killTPSCommand.status.usage.1": "[Create]: usar /killtps start para ralentizar artificialmente el tick del servidor", + "create.command.killTPSCommand.status.usage.0": "[Create]: usa /killtps stop para que el servidor vuelva a la velocidad normal", + "create.command.killTPSCommand.status.usage.1": "[Create]: usa /killtps start para ralentizar artificialmente el tick del servidor", "create.command.killTPSCommand.argument.tickTime": "tickTime", - "create.contraption.minecart_contraption_too_big": "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": "Este artilugio de vagoneta parece demasiado grande para recogerlo", + "create.contraption.minecart_contraption_illegal_pickup": "Una fuerza mística está atando este artilugio de vagoneta al mundo", "_": "->------------------------] 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.depot_slide": "UNLOCALIZED: Item slides", - "create.subtitle.saw_activate_stone": "UNLOCALIZED: Mechanical Saw activates", - "create.subtitle.blaze_munch": "Blaze mastica felizmente", - "create.subtitle.funnel_flap": "UNLOCALIZED: Funnel Flaps", - "create.subtitle.schematicannon_finish": "Acabados de Schematicannon", + "create.subtitle.contraption_disassemble": "", + "create.subtitle.peculiar_bell_use": "", + "create.subtitle.mixing": "", + "create.subtitle.mechanical_press_activation_belt": "", + "create.subtitle.fwoomp": "", + "create.subtitle.worldshaper_place": "", + "create.subtitle.depot_slide": "", + "create.subtitle.saw_activate_stone": "", + "create.subtitle.blaze_munch": "", + "create.subtitle.funnel_flap": "", + "create.subtitle.schematicannon_finish": "", "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.cogs": "UNLOCALIZED: Cogwheels rumble", - "create.subtitle.slime_added": "Slime aplastado", - "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.scroll_value": "", + "create.subtitle.crafter_craft": "", + "create.subtitle.controller_put": "", + "create.subtitle.cranking": "", + "create.subtitle.wrench_remove": "", + "create.subtitle.cogs": "", + "create.subtitle.slime_added": "", + "create.subtitle.wrench_rotate": "", + "create.subtitle.potato_hit": "", + "create.subtitle.saw_activate_wood": "", "create.subtitle.haunted_bell_convert": "UNLOCALIZED: Haunted Bell awakens", - "create.subtitle.deployer_polish": "UNLOCALIZED: Deployer applies polish", - "create.subtitle.deny": "UNLOCALIZED: Declining boop", - "create.subtitle.controller_click": "UNLOCALIZED: Controller clicks", - "create.subtitle.schematicannon_launch_block": "Disparos de Schematicannon", - "create.subtitle.copper_armor_equip": "UNLOCALIZED: Diving equipment clinks", - "create.subtitle.controller_take": "UNLOCALIZED: Lectern empties", - "create.subtitle.mechanical_press_activation": "La Prensa Mecánica se activa", - "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.deployer_polish": "", + "create.subtitle.deny": "", + "create.subtitle.controller_click": "", + "create.subtitle.schematicannon_launch_block": "", + "create.subtitle.copper_armor_equip": "", + "create.subtitle.controller_take": "Lectern empties", + "create.subtitle.mechanical_press_activation": "", + "create.subtitle.contraption_assemble": "", + "create.subtitle.crafter_click": "", + "create.subtitle.depot_plop": "", + "create.subtitle.confirm": "", "_": "->------------------------] Item Descriptions [------------------------<-", @@ -1254,219 +1254,219 @@ "item.create.example_item.tooltip.behaviour1": "Entonces este elemento hace esto. (los comportamientos se muestran en el turno)", "item.create.example_item.tooltip.condition2": "Y cuando esto", "item.create.example_item.tooltip.behaviour2": "Puedes añadir tantos comportamientos como quieras", - "item.create.example_item.tooltip.control1": "Cuando se pulsa Ctrl", + "item.create.example_item.tooltip.control1": "Cuando se pulsa [Ctrl]", "item.create.example_item.tooltip.action1": "Se muestran estos controles", "block.create.wooden_bracket.tooltip": "SOPORTE DE MADERA PARA EJES", - "block.create.wooden_bracket.tooltip.summary": "Decora tus _Ejes_, _Ruedas dentadas_ y _Ductos_ con un refuerzo acogedor y de madera.", + "block.create.wooden_bracket.tooltip.summary": "Decora tus _ejes_, _engranajes_ y _ductos_ con un acogedor refuerzo de madera.", "block.create.metal_bracket.tooltip": "SOPORTE DE METAL PARA EJES", - "block.create.metal_bracket.tooltip.summary": "Decora tus _Ejes_, _Ruedas dentadas_ y _Ductos_ con un poco de refuerzo industrial robusto.", + "block.create.metal_bracket.tooltip.summary": "Decora tus _ejes_, _engranajes_ y _ductos_ con un poco de refuerzo industrial robusto.", "block.create.seat.tooltip": "ASIENTO", - "block.create.seat.tooltip.summary": "¡Siéntate y disfruta del viaje! Anclará a un jugador en un _contrafuerte_ en movimiento. También es ideal para los muebles estáticos. Viene en una variedad de colores.", - "block.create.seat.tooltip.condition1": "Click derecho en el asiento", - "block.create.seat.tooltip.behaviour1": "Sienta al jugador en el _Asiento_. Pulsa shift izquierdo para dejar el _Asiento_.", + "block.create.seat.tooltip.summary": "¡Siéntate y disfruta del viaje! Anclará a un jugador en un artilugio en movimiento. También es ideal para muebles estáticos. Viene en una variedad de colores.", + "block.create.seat.tooltip.condition1": "Cuando se hace clic derecho en el asiento", + "block.create.seat.tooltip.behaviour1": "Sienta al jugador en el _asiento_. Pulsa [Mayús izdo.] para dejar el asiento.", "item.create.blaze_cake.tooltip": "PASTEL DE BLAZE", - "item.create.blaze_cake.tooltip.summary": "Un delicioso regalo para sus esforzados _Quemadores de blaze_. Los pone en marcha!.", + "item.create.blaze_cake.tooltip.summary": "Un delicioso regalo para sus esforzados _quemadores de blaze_. ¡Los pone en marcha!.", "item.create.wand_of_symmetry.tooltip": "VARITA DE SIMETRÍA", - "item.create.wand_of_symmetry.tooltip.summary": "Refleja perfectamente la colocación de bloques en los planos configurados", + "item.create.wand_of_symmetry.tooltip.summary": "Refleja perfectamente la colocación de bloques en los planos configurados.", "item.create.wand_of_symmetry.tooltip.condition1": "Mientras está en el inventario rápido", - "item.create.wand_of_symmetry.tooltip.behaviour1": "Permanece activo", - "item.create.wand_of_symmetry.tooltip.control1": "Click derecho en el suelo", - "item.create.wand_of_symmetry.tooltip.action1": "_Crea_ o _Mueve_ el Espejo", - "item.create.wand_of_symmetry.tooltip.control2": "Click derecho en el aire", - "item.create.wand_of_symmetry.tooltip.action2": "_Quita_ el Espejo activo", - "item.create.wand_of_symmetry.tooltip.control3": "Click derecho mientras se agacha", - "item.create.wand_of_symmetry.tooltip.action3": "Abre la _Interfaz de Configuración_", + "item.create.wand_of_symmetry.tooltip.behaviour1": "Permanece activo.", + "item.create.wand_of_symmetry.tooltip.control1": "Cuando se hace clic derecho en el suelo", + "item.create.wand_of_symmetry.tooltip.action1": "_Crea_ o _mueve_ el espejo.", + "item.create.wand_of_symmetry.tooltip.control2": "Cuando se hace clic derecho en el aire", + "item.create.wand_of_symmetry.tooltip.action2": "_Quita_ el espejo activo.", + "item.create.wand_of_symmetry.tooltip.control3": "[Mayús izdo.] + clic derecho", + "item.create.wand_of_symmetry.tooltip.action3": "Abre la interfaz de configuración.", "item.create.handheld_worldshaper.tooltip": "WORLDSHAPER", - "item.create.handheld_worldshaper.tooltip.summary": "Práctica herramienta para crear _paisajes_ y _características del terreno_", - "item.create.handheld_worldshaper.tooltip.control1": "Click izquierdo en un bloque", - "item.create.handheld_worldshaper.tooltip.action1": "Establece los bloques colocados por la herramienta en el bloque objetivo", - "item.create.handheld_worldshaper.tooltip.control2": "Click derecho en un bloque", + "item.create.handheld_worldshaper.tooltip.summary": "Práctica herramienta para crear _paisajes_ y _características del terreno_.", + "item.create.handheld_worldshaper.tooltip.control1": "Cuando se hace clic izquierdo en un bloque", + "item.create.handheld_worldshaper.tooltip.action1": "Establece los bloques colocados por la herramienta en el bloque objetivo.", + "item.create.handheld_worldshaper.tooltip.control2": "Cuando se hace clic derecho en un bloque", "item.create.handheld_worldshaper.tooltip.action2": "Aplica el _pincel_ y la _herramienta_ actualmente seleccionadas en el lugar deseado.", - "item.create.handheld_worldshaper.tooltip.control3": "Click derecho mientras se agacha", - "item.create.handheld_worldshaper.tooltip.action3": "Abre la _Interfaz de Configuración_", + "item.create.handheld_worldshaper.tooltip.control3": "[Mayús izdo.] + clic derecho", + "item.create.handheld_worldshaper.tooltip.action3": "Abre la interfaz de configuración.", "item.create.tree_fertilizer.tooltip": "FERTILIZANTE PARA ÁRBOLES", - "item.create.tree_fertilizer.tooltip.summary": "Una potente combinación de minerales adecuada para acelerar el crecimiento de los tipos de árboles más comunes", + "item.create.tree_fertilizer.tooltip.summary": "Una potente combinación de minerales adecuada para acelerar el crecimiento de los tipos de árboles más comunes.", "item.create.tree_fertilizer.tooltip.condition1": "Cuando se utiliza en un árbol joven", - "item.create.tree_fertilizer.tooltip.behaviour1": "Hace crecer los árboles _independientemente_ de sus condiciones de _espacio_", + "item.create.tree_fertilizer.tooltip.behaviour1": "Hace crecer los árboles _independientemente_ de sus condiciones de _espacio_.", "item.create.extendo_grip.tooltip": "AGARRE EXTENDIDO", - "item.create.extendo_grip.tooltip.summary": "¡Boioioing! Aumenta enormemente la _distancia de alcance_ del portador", + "item.create.extendo_grip.tooltip.summary": "¡Boioioing! Aumenta enormemente la _distancia de alcance_ del portador. Can be powered with Air Pressure from a _Copper_ _Backtank_", "item.create.extendo_grip.tooltip.condition1": "Cuando está fuera de la mano", - "item.create.extendo_grip.tooltip.behaviour1": "Aumenta la _distancia de alcance_ de los objetos usados en la _mano principal_", - "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.behaviour1": "Aumenta la _distancia de alcance_ de los objetos usados en la _mano principal_.", + "item.create.extendo_grip.tooltip.condition2": "While wearing Copper Backtank", + "item.create.extendo_grip.tooltip.behaviour2": "_No_ _Durability_ will be used. Instead, _Air_ _pressure_ is drained from the Tank", - "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": "POTATO CANNON", + "item.create.potato_cannon.tooltip.summary": "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": "When R-Clicked", + "item.create.potato_cannon.tooltip.behaviour1": "_Shoots_ a suitable item from your _Inventory_.", + "item.create.potato_cannon.tooltip.condition2": "While wearing Copper Backtank", + "item.create.potato_cannon.tooltip.behaviour2": "_No_ _Durability_ will be used. Instead, _Air_ _pressure_ is drained from the Tank", "item.create.filter.tooltip": "FILTRO", - "item.create.filter.tooltip.summary": "Controla las salidas_ y _entradas_ de los dispositivos logísticos con más _precisión_, comparándolas con un _conjunto de elementos_ o varios _filtros anidados_", - "item.create.filter.tooltip.condition1": "Cuando está en la ranura del filtro", - "item.create.filter.tooltip.behaviour1": "Controla_ el flujo del elemento según su _configuración_", + "item.create.filter.tooltip.summary": "Controla las _salidas_ y _entradas_ de los _dispositivos logísticos_ con más precisión, comparándolas con un _conjunto de objetos_ o varios _filtros anidados_.", + "item.create.filter.tooltip.condition1": "Cuando está en la ranura de filtros", + "item.create.filter.tooltip.behaviour1": "Controla el flujo de objetos según su _configuración_.", "item.create.filter.tooltip.condition2": "Cuando se hace clic derecho", - "item.create.filter.tooltip.behaviour2": "Abre la interfaz de _configuración_", + "item.create.filter.tooltip.behaviour2": "Abre la interfaz de configuración.", "item.create.attribute_filter.tooltip": "FILTRO DE ATRIBUTOS", - "item.create.attribute_filter.tooltip.summary": "Controla las salidas_ y las _entradas_ de los dispositivos logísticos con más _precisión_, comparándolas con un _conjunto de _atributos_ y _categorías_ de artículos", - "item.create.attribute_filter.tooltip.condition1": "Cuando está en la ranura del filtro", - "item.create.attribute_filter.tooltip.behaviour1": "Controla el flujo del elemento según su _configuración_", + "item.create.attribute_filter.tooltip.summary": "Controla las _salidas_ y las _entradas_ de los _dispositivos logísticos_ con más precisión, comparándolas con un _conjunto de atributos_ y _categorías_ de objetos.", + "item.create.attribute_filter.tooltip.condition1": "Cuando está en la ranura de filtros", + "item.create.attribute_filter.tooltip.behaviour1": "Controla el flujo de objetos según su _configuración_.", "item.create.attribute_filter.tooltip.condition2": "Cuando se hace clic derecho", - "item.create.attribute_filter.tooltip.behaviour2": "Abre la interfaz de _configuración_", + "item.create.attribute_filter.tooltip.behaviour2": "Abre la interfaz de configuración.", "item.create.empty_schematic.tooltip": "ESQUEMA VACÍO", - "item.create.empty_schematic.tooltip.summary": "Se utiliza como ingrediente de las recetas y para escribir en la _tabla de esquemas_", + "item.create.empty_schematic.tooltip.summary": "Se utiliza como 'ingrediente' de las recetas y para escribir en la _tabla de esquemas_.", "item.create.schematic.tooltip": "ESQUEMA", - "item.create.schematic.tooltip.summary": "Contiene una estructura para ser posicionada y colocada en el mundo. Posiciona el holograma como se desee y utiliza un _Esquematicannon_ para construirlo", - "item.create.schematic.tooltip.condition1": "Cuando se mantiene", - "item.create.schematic.tooltip.behaviour1": "Se puede posicionar utilizando las herramientas en pantalla", - "item.create.schematic.tooltip.control1": "Click derecho mientras se agacha", - "item.create.schematic.tooltip.action1": "Abre una _Interfaz_ para introducir las _Coordenadas_ exactas", + "item.create.schematic.tooltip.summary": "Contiene una estructura para ser posicionada y colocada en el mundo. Posiciona el holograma como desees y utiliza un _cañón de esquemas_ para construirla.", + "item.create.schematic.tooltip.condition1": "Cuando se sostiene en la mano", + "item.create.schematic.tooltip.behaviour1": "Se puede posicionar utilizando las herramientas en pantalla.", + "item.create.schematic.tooltip.control1": "[Mayús izdo.] + clic derecho", + "item.create.schematic.tooltip.action1": "Abre una _interfaz_ para introducir las _coordenadas_ exactas.", "item.create.schematic_and_quill.tooltip": "ESQUEMA Y PLUMA", - "item.create.schematic_and_quill.tooltip.summary": "Se utiliza para guardar una estructura de tu mundo en un archivo .nbt", + "item.create.schematic_and_quill.tooltip.summary": "Se utiliza para guardar una estructura de tu mundo en un archivo .nbt.", "item.create.schematic_and_quill.tooltip.condition1": "Paso 1", - "item.create.schematic_and_quill.tooltip.behaviour1": "Selecciona dos puntos de esquina usando click derecho", + "item.create.schematic_and_quill.tooltip.behaviour1": "Selecciona dos puntos de esquina usando clic derecho.", "item.create.schematic_and_quill.tooltip.condition2": "Paso 2", - "item.create.schematic_and_quill.tooltip.behaviour2": "_Ctrl-Rueda del ratón_ en las caras para ajustar el tamaño. Click derecho de nuevo para guardar", - "item.create.schematic_and_quill.tooltip.control1": "Click derecho", - "item.create.schematic_and_quill.tooltip.action1": "Seleccionar un punto de esquina / confirmar guardar", - "item.create.schematic_and_quill.tooltip.control2": "Al mantener Ctrl", - "item.create.schematic_and_quill.tooltip.action2": "Seleccionar puntos en _medio del aire_. Rueda del ratón para ajustar la distancia", - "item.create.schematic_and_quill.tooltip.control3": "Click derecho mientras se agacha", - "item.create.schematic_and_quill.tooltip.action3": "Reinicia_ y elimina la selección", + "item.create.schematic_and_quill.tooltip.behaviour2": "[Ctrl] + [RUEDA DEL RATÓN] en las caras para ajustar el tamaño. Clic derecho de nuevo para guardar.", + "item.create.schematic_and_quill.tooltip.control1": "Cuando se hace clic derecho", + "item.create.schematic_and_quill.tooltip.action1": "Selecciona un punto de esquina / confirmar guardar.", + "item.create.schematic_and_quill.tooltip.control2": "Cuando mantiene [Ctrl]", + "item.create.schematic_and_quill.tooltip.action2": "Selecciona puntos en _medio del aire_. Rueda del ratón para ajustar la distancia.", + "item.create.schematic_and_quill.tooltip.control3": "[Mayús izdo.] + clic derecho", + "item.create.schematic_and_quill.tooltip.action3": "_Reinicia_ y elimina la selección.", - "block.create.schematicannon.tooltip": "ESQUEMATICAÑÓN", - "block.create.schematicannon.tooltip.summary": "Dispara bloques para recrear un _Esquema_ desplegado en el Mundo. Utiliza elementos de los inventarios adyacentes y _Pólvora_ como combustible.", - "block.create.schematicannon.tooltip.condition1": "UNLOCALIZED: When R-Clicked", - "block.create.schematicannon.tooltip.behaviour1": "UNLOCALIZED: Opens the _Interface_", + "block.create.schematicannon.tooltip": "CAÑÓN DE ESQUEMAS", + "block.create.schematicannon.tooltip.summary": "Dispara bloques para recrear un _esquema_ desplegado en el mundo. Utiliza objetos de los inventarios adyacentes y _pólvora_ como combustible.", + "block.create.schematicannon.tooltip.condition1": "Cuando se hace clic derecho", + "block.create.schematicannon.tooltip.behaviour1": "Abre la interfaz.", "block.create.schematic_table.tooltip": "TABLA DE ESQUEMAS", - "block.create.schematic_table.tooltip.summary": "Escribe los esquemas guardados en un _esquema vacío_", + "block.create.schematic_table.tooltip.summary": "Escribe los esquemas guardados en un _esquema vacío_.", "block.create.schematic_table.tooltip.condition1": "Cuando se da un esquema vacío", - "block.create.schematic_table.tooltip.behaviour1": "Carga un archivo elegido de la carpeta de esquemas", + "block.create.schematic_table.tooltip.behaviour1": "Carga un archivo elegido de la carpeta de esquemas.", - "item.create.goggles.tooltip": "GAFAS DEL INGENIERO", - "item.create.goggles.tooltip.summary": "Un par de gafas para aumentar tu visión con útil información _cinética_", + "item.create.goggles.tooltip": "GAFAS DEL CONSTRUCTOR", + "item.create.goggles.tooltip.summary": "Un par de gafas para aumentar tu visión con útil información _cinética_.", "item.create.goggles.tooltip.condition1": "Cuando se llevan puestas", - "item.create.goggles.tooltip.behaviour1": "Muestra _indicadores de color_ correspondientes al _Nivel de velocidad_ de un componente cinético colocado, así como el _Impacto de estrés_ y la _Capacidad_ de los componentes individuales.", - "item.create.goggles.tooltip.condition2": "Al mirar el medidor", - "item.create.goggles.tooltip.behaviour2": "Muestra información detallada sobre _Velocidad_ o _Estrés_ de la red a la que está conectado el medidor", - "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.behaviour1": "Muestra _indicadores de color_ correspondientes al _nivel de velocidad_ de un componente cinético colocado, así como el _impacto de estrés_ y la _carga_ de los componentes individuales.", + "item.create.goggles.tooltip.condition2": "Al mirar un medidor", + "item.create.goggles.tooltip.behaviour2": "Muestra información detallada sobre _velocidad_ o _estrés_ de la red a la que está conectado el medidor.", + "item.create.goggles.tooltip.condition3": "Al mirar un contenedor de fluidos", + "item.create.goggles.tooltip.behaviour3": "Muestra información detallada sobre la _carga_ del bloque y los _líquidos_ almacenados en su interior.", "item.create.wrench.tooltip": "LLAVE INGLESA", - "item.create.wrench.tooltip.summary": "Una herramienta útil para trabajar en artilugios cinéticos. Se puede utilizar para _Rotar_, _Desmantelar_ y para _Configurar_ componentes", - "item.create.wrench.tooltip.control1": "Click con el botón derecho en un bloque cinético", - "item.create.wrench.tooltip.action1": "_Rota los componentes_ hacia o desde la cara con la que ha interactuado", - "item.create.wrench.tooltip.control2": "Click derecho mientras te agachas", - "item.create.wrench.tooltip.action2": "Desmonta los componentes cinéticos_ y los devuelve a _tu inventario_", + "item.create.wrench.tooltip.summary": "Una herramienta útil para trabajar en artilugios cinéticos. Se puede utilizar para _rotar_, _desmantelar_ y para _configurar_ componentes.", + "item.create.wrench.tooltip.control1": "Cuando se hace clic derecho en un bloque cinético", + "item.create.wrench.tooltip.action1": "Rota los componentes hacia o desde la cara con la que ha interactuado.", + "item.create.wrench.tooltip.control2": "[Mayús izdo.] + clic derecho", + "item.create.wrench.tooltip.action2": "Desmonta los _componentes cinéticos_ y los devuelve a tu inventario_.", "block.create.nozzle.tooltip": "BOQUILLA", - "block.create.nozzle.tooltip.summary": "Se acopla a la parte delantera de un _ventilador revestido_ para distribuir su efecto sobre las entidades en _todas las direcciones_", + "block.create.nozzle.tooltip.summary": "Se acopla a la parte delantera de un _ventilador revestido_ para distribuir su efecto sobre las entidades en _todas las direcciones_.", "block.create.cuckoo_clock.tooltip": "RELOJ DE CUCO", - "block.create.cuckoo_clock.tooltip.summary": "Fina artesanía para _decorar_ un espacio y _contar el tiempo_", + "block.create.cuckoo_clock.tooltip.summary": "Fina artesanía para decorar un espacio y contar el tiempo.", "block.create.cuckoo_clock.tooltip.condition1": "Cuando es alimentado por cinética", - "block.create.cuckoo_clock.tooltip.behaviour1": "Muestra la _hora actual_ y toca una melodía dos veces al día. Se activa_ una vez al _mediodía_ y al anochecer, en cuanto _los jugadores pueden dormir_", + "block.create.cuckoo_clock.tooltip.behaviour1": "Muestra la _hora actual_ y toca una melodía dos veces al día. Se activa una vez al mediodía y al anochecer, _en cuanto los jugadores pueden dormir_.", "block.create.turntable.tooltip": "PLATAFORMA GIRATORIA", - "block.create.turntable.tooltip.summary": "Convierte la _fuerza de rotación_ en un refinado mareo", + "block.create.turntable.tooltip.summary": "Convierte la _fuerza rotacional_ en un refinado mareo.", "block.create.stockpile_switch.tooltip": "INTERRUPTOR DE ACOPIO", - "block.create.stockpile_switch.tooltip.summary": "Activa una señal de Redstone en función de la cantidad de _Artículos almacenados_ en el Contenedor adjunto. Viene con un práctico filtro. A diferencia de un _Comparador,_ el _Interruptor de acopio_ permite la configuración de _Umbrales,_ a partir de los cuales se invierten las señales", - "block.create.stockpile_switch.tooltip.condition1": "Cuando haces click derecho", - "block.create.stockpile_switch.tooltip.behaviour1": "Abre la _Interfaz de Configuración_", + "block.create.stockpile_switch.tooltip.summary": "Activa una señal de redstone en función de la cantidad de _objetos almacenados_ en el _contenedor_ adjunto. Viene con un práctico filtro. A diferencia de un _comparador, el _interruptor de acopio_ permite la configuración de _umbrales_, a partir de los cuales se invierten las señales.", + "block.create.stockpile_switch.tooltip.condition1": "Cuando se hace clic derecho", + "block.create.stockpile_switch.tooltip.behaviour1": "Abre la interfaz de configuración.", "block.create.content_observer.tooltip": "OBSERVADOR DE CONTENIDO", - "block.create.content_observer.tooltip.summary": "_Detecta artículos_ dentro de _contenedores_ y _transportadores_ que coinciden con un _filtro_ configurado. Mientras el _inventario_, la _cinta_ o la _canaleta_ observados contengan_ un artículo que coincida, este componente emitirá una _señal de Redstone_. Cuando un _túnel observado transfiere_ un artículo coincidente, este componente emitirá un _Pulso de Redstone_", + "block.create.content_observer.tooltip.summary": "_Detecta objetos_ dentro de _contenedores_ y _transportadores_ que coincidan con un _filtro_ configurado. Mientras el _inventario_, la _cinta_ o la _canaleta_ observados _contengan_ un objeto que coincida, este componente emitirá una _señal de redstone_. Cuando un embudo observado _transfiere_ un objeto coincidente, este componente emitirá un _pulso de redstone_.", "block.create.adjustable_crate.tooltip": "CAJA AJUSTABLE", - "block.create.adjustable_crate.tooltip.summary": "Este _Contenedor de Artículos_ permite el control manual de su capacidad. Puede contener hasta _16 pilas_ de cualquier objeto. Soporta _Comparadores de Redstone_", - "block.create.adjustable_crate.tooltip.condition1": "UNLOCALIZED: When R-Clicked", - "block.create.adjustable_crate.tooltip.behaviour1": "UNLOCALIZED: Opens the _Interface_.", + "block.create.adjustable_crate.tooltip.summary": "Este _contenedor de objetos_ permite el control manual de su capacidad. Puede contener hasta _16 pilas_ de cualquier objeto. Soporta _comparadores de redstone_.", + "block.create.adjustable_crate.tooltip.condition1": "Cuando se hace clic derecho", + "block.create.adjustable_crate.tooltip.behaviour1": "Abre la interfaz.", "block.create.creative_crate.tooltip": "CAJA CREATIVA", - "block.create.creative_crate.tooltip.summary": "Este _Contenedor de Almacenamiento_ permite la replicación infinita de cualquier elemento. Colócalo junto a un _Schematicannon_ para eliminar cualquier requisito de material", - "block.create.creative_crate.tooltip.condition1": "Cuando el artículo está en la ranura del filtro", - "block.create.creative_crate.tooltip.behaviour1": "Todo lo que se _extraiga_ de este contenedor proporcionará un _suministro ilimitado_ del elemento especificado. Los elementos _insertados_ en esta caja serán _evitados._", + "block.create.creative_crate.tooltip.summary": "Este _contenedor de objetos_ permite la replicación infinita de cualquier elemento. Colócalo junto a un _cañón de esquemas_ para eliminar cualquier requisito de material.", + "block.create.creative_crate.tooltip.condition1": "Cuando el elemento está en la ranura para filtros", + "block.create.creative_crate.tooltip.behaviour1": "Todo lo que se _extraiga_ de este contenedor proporcionará un suministro _ilimitado_ del elemento especificado. Los objetos _insertados_ en esta caja serán _evitados_.", "block.create.controller_rail.tooltip": "RAÍL DE CONTROL", - "block.create.controller_rail.tooltip.summary": "Un _raíl energizado unidireccional_ capaz de _controlar con precisión_ la _velocidad de movimiento_ de una vagoneta", - "block.create.controller_rail.tooltip.condition1": "Cuando es impulsado por Redstone", - "block.create.controller_rail.tooltip.behaviour1": "_Acelera_ o _Desacelera_ pasando _vagonetas_ correspondientes a la _fuerza de la señal_. Propaga la energía de Redstone a los Raíles de control adyacentes. Al alimentar dos Raíles de control con diferentes intensidades, los carriles entre ellos interpolarán su señal", + "block.create.controller_rail.tooltip.summary": "Un raíl energizado _unidireccional_ capaz de _controlar con precisión_ la _velocidad de movimiento_ de una vagoneta.", + "block.create.controller_rail.tooltip.condition1": "Cuando es alimentado con redstone", + "block.create.controller_rail.tooltip.behaviour1": "_Acelera_ o _desacelera_ pasando _vagonetas_ correspondientes a la _fuerza de la señal_. Propaga la energía de redstone a los raíles de control adyacentes. Al alimentar dos raíles de control con diferentes intensidades, los carriles entre ellos interpolarán su señal.", "item.create.sand_paper.tooltip": "PAPEL DE LIJA", - "item.create.sand_paper.tooltip.summary": "Un papel rugoso que se puede utilizar para _pulir materiales_. Se puede aplicar automáticamente con el Desplegador", + "item.create.sand_paper.tooltip.summary": "Un papel rugoso que se puede utilizar para _pulir materiales_. Se puede aplicar automáticamente con el _desplegador_.", "item.create.sand_paper.tooltip.condition1": "Cuando se usa", - "item.create.sand_paper.tooltip.behaviour1": "Aplica el pulido a los objetos sostenidos en la _mano libre_ o tirados en el _suelo_ cuando se _miran_", + "item.create.sand_paper.tooltip.behaviour1": "Aplica un pulido a los objetos sostenidos en la _mano libre_ o tirados en el _suelo_ cuando se _miran_.", "item.create.builders_tea.tooltip": "TÉ DEL CONSTRUCTOR", - "item.create.builders_tea.tooltip.summary": "La bebida perfecta para empezar el día- _Motivante_ y _Saturante._", + "item.create.builders_tea.tooltip.summary": "La bebida perfecta para empezar el día. Motivante y saturante.", "item.create.refined_radiance.tooltip": "RESPLANDOR REFINADO", - "item.create.refined_radiance.tooltip.summary": "Material cromático forjado a partir de _luz absorbida_", - "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.summary": "Un material cromático forjado a partir de la _luz absorbida_.", + "item.create.refined_radiance.tooltip.condition1": "Trabajo en progreso", + "item.create.refined_radiance.tooltip.behaviour1": "Los usos para este material estarán disponibles en un próximo lanzamiento.", "item.create.shadow_steel.tooltip": "ACERO SOMBRÍO", - "item.create.shadow_steel.tooltip.summary": "Un material cromático forjado _en el vacío_", - "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.summary": "Un material cromático forjado en el _vacío_.", + "item.create.shadow_steel.tooltip.condition1": "Work In Progress", + "item.create.shadow_steel.tooltip.behaviour1": "Usages for this material will be available in a future release.", - "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": "CONTROLADOR ENLAZADO", + "item.create.linked_controller.tooltip.summary": "Permite el control manual de las frecuencias de _enlaces de redstone_ asignadas a sus seis botones..", + "item.create.linked_controller.tooltip.condition1": "Al hacer clic derecho", + "item.create.linked_controller.tooltip.behaviour1": "Activa el _controlador_. Los _controles de movimiento_ se adquieren mientras está activo.", + "item.create.linked_controller.tooltip.condition2": "Al usar [Mayús izdo.] + clic derecho", + "item.create.linked_controller.tooltip.behaviour2": "Abre la interfaz de configuración manual.", + "item.create.linked_controller.tooltip.condition3": "Al usar clic derecho en un receptor de enlaces de redstone", + "item.create.linked_controller.tooltip.behaviour3": "Activa el _modo de vinculación_, pulsa uno de los _seis controles_ para vincularlo a la _frecuencia de los enlaces_.", "item.create.linked_controller.tooltip.condition4": "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.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": "CASCO DE BUCEO", + "item.create.diving_helmet.tooltip.summary": "Junto con un _depósito trasero de cobre_, permite que el usuario pueda respirar bajo el agua durante un tiempo prolongado.", + "item.create.diving_helmet.tooltip.condition1": "Cuando se lleva puesto", + "item.create.diving_helmet.tooltip.behaviour1": "Proporciona el efecto de _respiración acuática_, drenando lentamente la presión de aire del _depósito trasero_.", - "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": "DEPÓSITO TRASERO DE COBRE", + "item.create.copper_backtank.tooltip.summary": "Un tanque portátil para transportar _aire presurizado_.", + "item.create.copper_backtank.tooltip.condition1": "Cuando se lleva puesto", + "item.create.copper_backtank.tooltip.behaviour1": "Proporciona _aire presurizado_ a los equipos que lo requieran.", + "item.create.copper_backtank.tooltip.condition2": "Cuando se coloca y es alimentado por cinética", + "item.create.copper_backtank.tooltip.behaviour2": "Recoge _aire presurizado_ a un ritmo que depende de la velocidad rotacional.", - "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": "BOTAS DE BUCEO", + "item.create.diving_boots.tooltip.summary": "Un par de _botas_ pesadas, que permiten atravesar mejor el suelo del océano.", + "item.create.diving_boots.tooltip.condition1": "Cuando se llevan puestas", + "item.create.diving_boots.tooltip.behaviour1": "El portador se hunde rápido y no puede nadar. Concede la capacidad de caminar y saltar bajo el agua. Al portador no le afectarán las _correas mecánicas.", - "item.create.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": "PLANO DE ELABORACIÓN", + "item.create.crafting_blueprint.tooltip.summary": "Colocado en una pared, puede utilizarse para especificar la disposición de los ingredientes para facilitar la elaboración manual. Cada ranura representa una receta", + "item.create.crafting_blueprint.condition1": "Al hacer clic derecho en una ranura vacía", + "item.create.crafting_blueprint.behaviour1": "Abre un menú que permite configurar una receta y los objetos a mostrar.", + "item.create.crafting_blueprint.condition2": "Al hacer clic derecho en una ranura configurada", + "item.create.crafting_blueprint.behaviour2": "Aplica la receta configurada con los ingredientes que se encuentran en tu inventario. Se puede utilizar para fabricar hasta una pila de objetos.", "item.create.minecart_coupling.tooltip": "ENSAMBLADOR DE VAGONETAS", - "item.create.minecart_coupling.tooltip.summary": "_Encadena_ todas tus _Vagonetas_ o _Artilugios de vagoneta_ para formar un majestuoso Tren", - "item.create.minecart_coupling.tooltip.condition1": "Cuando se utiliza en Vagonetas", - "item.create.minecart_coupling.tooltip.behaviour1": "_Acopla_ dos Vagonetas, intentando mantenerlas a una _distancia constante_ mientras se mueven", + "item.create.minecart_coupling.tooltip.summary": "_Encadena_ todas tus _vagonetas_ o _artilugios de vagoneta_ para formar un majestuoso _tren_.", + "item.create.minecart_coupling.tooltip.condition1": "Cuando se utiliza en vagonetas", + "item.create.minecart_coupling.tooltip.behaviour1": "_Acopla_ dos vagonetas, intentando mantenerlas a una _distancia constante_ mientras se mueven.", - "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": "PECULIAR BELL", + "block.create.peculiar_bell.tooltip.summary": "A decorative brass bell. Placing it above a _Soul Fire_ or _Soul Campfire_ may cause a spooky transformation to occur...", "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.", @@ -1476,814 +1476,814 @@ "_": "->------------------------] Ponder Content [------------------------<-", - "create.ponder.hold_to_ponder": "UNLOCALIZED: Hold [%1$s] to Ponder", - "create.ponder.subject": "UNLOCALIZED: Subject of this scene", - "create.ponder.pondering": "UNLOCALIZED: Pondering about...", - "create.ponder.identify_mode": "UNLOCALIZED: Identify mode active.\nUnpause with [%1$s]", - "create.ponder.associated": "UNLOCALIZED: Associated Entries", - "create.ponder.close": "UNLOCALIZED: Close", - "create.ponder.identify": "UNLOCALIZED: Identify", - "create.ponder.next": "UNLOCALIZED: Next Scene", - "create.ponder.previous": "UNLOCALIZED: Previous Scene", - "create.ponder.replay": "UNLOCALIZED: Replay", - "create.ponder.think_back": "UNLOCALIZED: Think Back", - "create.ponder.slow_text": "UNLOCALIZED: Comfy Reading", - "create.ponder.exit": "UNLOCALIZED: Exit", - "create.ponder.welcome": "UNLOCALIZED: Welcome to Ponder", - "create.ponder.categories": "UNLOCALIZED: Available Categories in Create", - "create.ponder.index_description": "UNLOCALIZED: Click one of the icons to learn about its associated Items and Blocks", - "create.ponder.index_title": "UNLOCALIZED: Ponder Index", - "create.ponder.shared.movement_anchors": "UNLOCALIZED: With the help of Chassis or Super Glue, larger structures can be moved.", - "create.ponder.shared.rpm32": "UNLOCALIZED: 32 RPM", - "create.ponder.shared.sneak_and": "UNLOCALIZED: Sneak +", - "create.ponder.shared.storage_on_contraption": "UNLOCALIZED: Inventories attached to the Contraption will pick up their drops automatically", - "create.ponder.shared.behaviour_modify_wrench": "UNLOCALIZED: This behaviour can be modified using a Wrench", - "create.ponder.shared.rpm8": "UNLOCALIZED: 8 RPM", - "create.ponder.shared.ctrl_and": "UNLOCALIZED: Ctrl +", - "create.ponder.shared.rpm16_source": "UNLOCALIZED: Source: 16 RPM", - "create.ponder.shared.rpm16": "UNLOCALIZED: 16 RPM", - "create.ponder.tag.kinetic_sources": "UNLOCALIZED: Kinetic Sources", - "create.ponder.tag.kinetic_sources.description": "UNLOCALIZED: Components which generate Rotational Force", - "create.ponder.tag.contraption_actor": "UNLOCALIZED: Contraption Actors", - "create.ponder.tag.contraption_actor.description": "UNLOCALIZED: Components which expose special behaviour when attached to a moving contraption", - "create.ponder.tag.arm_targets": "UNLOCALIZED: Targets for Mechanical Arms", - "create.ponder.tag.arm_targets.description": "UNLOCALIZED: Components which can be selected as inputs or outputs to the Mechanical Arm", - "create.ponder.tag.logistics": "UNLOCALIZED: Item Transportation", - "create.ponder.tag.logistics.description": "UNLOCALIZED: Components which help moving items around", - "create.ponder.tag.movement_anchor": "UNLOCALIZED: Movement Anchors", - "create.ponder.tag.movement_anchor.description": "UNLOCALIZED: Components which allow the creation of moving contraptions, animating an attached structure in a variety of ways", - "create.ponder.tag.creative": "UNLOCALIZED: Creative Mode", - "create.ponder.tag.creative.description": "UNLOCALIZED: Components not usually available for Survival Mode", - "create.ponder.tag.kinetic_relays": "UNLOCALIZED: Kinetic Blocks", - "create.ponder.tag.kinetic_relays.description": "UNLOCALIZED: Components which help relaying Rotational Force elsewhere", - "create.ponder.tag.windmill_sails": "UNLOCALIZED: Sails for Windmill Bearings", - "create.ponder.tag.windmill_sails.description": "UNLOCALIZED: Blocks that count towards the strength of a Windmill Contraption when assembled. Each of these have equal efficiency in doing so.", - "create.ponder.tag.contraption_assembly": "UNLOCALIZED: Block Attachment Utility", - "create.ponder.tag.contraption_assembly.description": "UNLOCALIZED: Tools and Components used to assemble structures moved as an animated Contraption", - "create.ponder.tag.decoration": "UNLOCALIZED: Aesthetics", - "create.ponder.tag.decoration.description": "UNLOCALIZED: Components used mostly for decorative purposes", - "create.ponder.tag.kinetic_appliances": "UNLOCALIZED: Kinetic Appliances", - "create.ponder.tag.kinetic_appliances.description": "UNLOCALIZED: Components which make use of Rotational Force", - "create.ponder.tag.redstone": "UNLOCALIZED: Logic Components", - "create.ponder.tag.redstone.description": "UNLOCALIZED: Components which help with redstone engineering", - "create.ponder.tag.fluids": "UNLOCALIZED: Fluid Manipulators", - "create.ponder.tag.fluids.description": "UNLOCALIZED: Components which help relaying and making use of Fluids", - - "create.ponder.adjustable_pulse_repeater.header": "UNLOCALIZED: Controlling signals using Adjustable Pulse Repeaters", - "create.ponder.adjustable_pulse_repeater.text_1": "UNLOCALIZED: Adjustable Pulse Repeaters emit a short pulse at a delay", - "create.ponder.adjustable_pulse_repeater.text_2": "UNLOCALIZED: Using the mouse wheel, the charge time can be configured", - "create.ponder.adjustable_pulse_repeater.text_3": "UNLOCALIZED: Configured delays can range up to 30 minutes", - - "create.ponder.adjustable_repeater.header": "UNLOCALIZED: Controlling signals using Adjustable Repeaters", - "create.ponder.adjustable_repeater.text_1": "UNLOCALIZED: Adjustable Repeaters behave similarly to regular Repeaters", - "create.ponder.adjustable_repeater.text_2": "UNLOCALIZED: They charge up for a set time...", - "create.ponder.adjustable_repeater.text_3": "UNLOCALIZED: ...and cool down for the same duration", - "create.ponder.adjustable_repeater.text_4": "UNLOCALIZED: Using the mouse wheel, the charge time can be configured", - "create.ponder.adjustable_repeater.text_5": "UNLOCALIZED: Configured delays can range up to 30 minutes", - - "create.ponder.analog_lever.header": "UNLOCALIZED: Controlling signals using the Analog Lever", - "create.ponder.analog_lever.text_1": "UNLOCALIZED: Analog Levers make for a compact and precise source of redstone power", - "create.ponder.analog_lever.text_2": "UNLOCALIZED: Right-click to increase its analog power output", - "create.ponder.analog_lever.text_3": "UNLOCALIZED: Right-click while Sneaking to decrease the power output again", - - "create.ponder.andesite_tunnel.header": "UNLOCALIZED: Using Andesite Tunnels", - "create.ponder.andesite_tunnel.text_1": "UNLOCALIZED: Andesite Tunnels can be used to cover up your belts", - "create.ponder.andesite_tunnel.text_2": "UNLOCALIZED: Whenever an Andesite Tunnel has connections to the sides...", - "create.ponder.andesite_tunnel.text_3": "UNLOCALIZED: ...they will split exactly one item off of any passing stacks", - "create.ponder.andesite_tunnel.text_4": "UNLOCALIZED: The remainder will continue on its path", - - "create.ponder.basin.header": "UNLOCALIZED: Processing Items in the Basin", - "create.ponder.basin.text_1": "UNLOCALIZED: A Basin can hold Items and Fluids for Processing", - "create.ponder.basin.text_2": "UNLOCALIZED: After a processing step, basins try to output below to the side of them", - "create.ponder.basin.text_3": "UNLOCALIZED: When a valid component is present, the Basin will show an output faucet", - "create.ponder.basin.text_4": "UNLOCALIZED: A number of options are applicable here", - "create.ponder.basin.text_5": "UNLOCALIZED: Outputs will be caught by the inventory below", - "create.ponder.basin.text_6": "UNLOCALIZED: Without output faucet, the Basin will retain items created in its processing", - "create.ponder.basin.text_7": "UNLOCALIZED: This can be useful if outputs should be re-used as ingredients", - "create.ponder.basin.text_8": "UNLOCALIZED: Desired outputs will then have to be extracted from the basin", - "create.ponder.basin.text_9": "UNLOCALIZED: A Filter might be necessary to avoid pulling out un-processed items", - - "create.ponder.bearing_modes.header": "UNLOCALIZED: Movement Modes of the Mechanical Bearing", - "create.ponder.bearing_modes.text_1": "UNLOCALIZED: When Stopped, the Bearing will place the structure at the nearest grid-aligned Angle", - "create.ponder.bearing_modes.text_2": "UNLOCALIZED: It can be configured never to revert to solid blocks, or only near the angle it started at", - - "create.ponder.belt_casing.header": "UNLOCALIZED: Encasing Belts", - "create.ponder.belt_casing.text_1": "UNLOCALIZED: Brass or Andesite Casing can be used to decorate Mechanical Belts", - "create.ponder.belt_casing.text_2": "UNLOCALIZED: A wrench can be used to remove the casing", - - "create.ponder.belt_connector.header": "UNLOCALIZED: Using Mechanical Belts", - "create.ponder.belt_connector.text_1": "UNLOCALIZED: Right-Clicking two shafts with a belt item will connect them together", - "create.ponder.belt_connector.text_2": "UNLOCALIZED: Accidental selections can be canceled with Right-Click while Sneaking", - "create.ponder.belt_connector.text_3": "UNLOCALIZED: Additional Shafts can be added throughout the Belt", - "create.ponder.belt_connector.text_4": "UNLOCALIZED: Shafts connected via Belts will rotate with Identical Speed and Direction", - "create.ponder.belt_connector.text_5": "UNLOCALIZED: Added shafts can be removed using the wrench", - "create.ponder.belt_connector.text_6": "UNLOCALIZED: Mechanical Belts can be dyed for aesthetic purposes", - - "create.ponder.belt_directions.header": "UNLOCALIZED: Valid Orientations for Mechanical Belts", - "create.ponder.belt_directions.text_1": "UNLOCALIZED: Belts cannot connect in arbitrary directions", - "create.ponder.belt_directions.text_2": "UNLOCALIZED: 1. They can connect horizontally", - "create.ponder.belt_directions.text_3": "UNLOCALIZED: 2. They can connect diagonally", - "create.ponder.belt_directions.text_4": "UNLOCALIZED: 3. They can connect vertically", - "create.ponder.belt_directions.text_5": "UNLOCALIZED: 4. And they can connect vertical shafts horizontally", - "create.ponder.belt_directions.text_6": "UNLOCALIZED: These are all possible directions. Belts can span any Length between 2 and 20 blocks", - - "create.ponder.belt_transport.header": "UNLOCALIZED: Using Mechanical Belts for Logistics", - "create.ponder.belt_transport.text_1": "UNLOCALIZED: Moving belts will transport Items and other Entities", - "create.ponder.belt_transport.text_2": "UNLOCALIZED: Right-Click with an empty hand to take items off a belt", - - "create.ponder.blaze_burner.header": "UNLOCALIZED: Feeding Blaze Burners", - "create.ponder.blaze_burner.text_1": "UNLOCALIZED: Blaze Burners can provide Heat to Items processed in a Basin", - "create.ponder.blaze_burner.text_2": "UNLOCALIZED: For this, the Blaze has to be fed with flammable items", - "create.ponder.blaze_burner.text_3": "UNLOCALIZED: With a Blaze Cake, the Burner can reach an even stronger level of heat", - "create.ponder.blaze_burner.text_4": "UNLOCALIZED: The feeding process can be automated using Deployers or Mechanical Arms", - - "create.ponder.brass_funnel.header": "UNLOCALIZED: The Brass Funnel", - "create.ponder.brass_funnel.text_1": "UNLOCALIZED: Andesite Funnels can only ever extract single items.", - "create.ponder.brass_funnel.text_2": "UNLOCALIZED: Brass Funnels can extract up to a full stack.", - "create.ponder.brass_funnel.text_3": "UNLOCALIZED: Scrolling on the filter slot allows for precise control over the extracted stack size.", - "create.ponder.brass_funnel.text_4": "UNLOCALIZED: Using items on the filter slot will restrict the funnel to only transfer matching stacks.", - - "create.ponder.brass_tunnel.header": "UNLOCALIZED: Using Brass Tunnels", - "create.ponder.brass_tunnel.text_1": "UNLOCALIZED: Brass Tunnels can be used to cover up your belts", - "create.ponder.brass_tunnel.text_2": "UNLOCALIZED: Brass Tunnels have filter slots on each open side", - "create.ponder.brass_tunnel.text_3": "UNLOCALIZED: Filters on inbound connections simply block non-matching items", - "create.ponder.brass_tunnel.text_4": "UNLOCALIZED: Filters on outbound connections can be used to sort items by type", - "create.ponder.brass_tunnel.text_5": "UNLOCALIZED: Whenever a passing item has multiple valid exits, the distribution mode will decide how to handle it", - "create.ponder.brass_tunnel.text_6": "UNLOCALIZED: Brass Tunnels on parallel belts will form a group", - "create.ponder.brass_tunnel.text_7": "UNLOCALIZED: Incoming Items will now be distributed across all connected exits", - "create.ponder.brass_tunnel.text_8": "UNLOCALIZED: For this, items can also be inserted into the Tunnel block directly", - - "create.ponder.brass_tunnel_modes.header": "UNLOCALIZED: Distribution Modes of the Brass Tunnel", - "create.ponder.brass_tunnel_modes.text_1": "UNLOCALIZED: Using a Wrench, the distribution behaviour of Brass Tunnels can be configured", - "create.ponder.brass_tunnel_modes.text_10": "UNLOCALIZED: 'Synchronize Inputs' is a unique setting for Brass Tunnels", - "create.ponder.brass_tunnel_modes.text_11": "UNLOCALIZED: Items are only allowed past if every tunnel in the group has one waiting", - "create.ponder.brass_tunnel_modes.text_12": "UNLOCALIZED: This ensures that all affected belts supply items at the same rate", - "create.ponder.brass_tunnel_modes.text_2": "UNLOCALIZED: 'Split' will attempt to distribute the stack evenly between available outputs", - "create.ponder.brass_tunnel_modes.text_3": "UNLOCALIZED: If an output is unable to take more items, it will be skipped", - "create.ponder.brass_tunnel_modes.text_4": "UNLOCALIZED: 'Forced Split' will never skip outputs, and instead wait until they are free", - "create.ponder.brass_tunnel_modes.text_5": "UNLOCALIZED: 'Round Robin' keeps stacks whole, and cycles through outputs iteratively", - "create.ponder.brass_tunnel_modes.text_6": "UNLOCALIZED: Once Again, if an output is unable to take more items, it will be skipped", - "create.ponder.brass_tunnel_modes.text_7": "UNLOCALIZED: 'Forced Round Robin' never skips outputs", - "create.ponder.brass_tunnel_modes.text_8": "UNLOCALIZED: 'Prefer Nearest' prioritizes the outputs closest to the items' input location", - "create.ponder.brass_tunnel_modes.text_9": "UNLOCALIZED: 'Randomize' will distribute whole stacks to randomly picked outputs", - - "create.ponder.cart_assembler.header": "UNLOCALIZED: Moving Structures using Cart Assemblers", - "create.ponder.cart_assembler.text_1": "UNLOCALIZED: Powered Cart Assemblers mount attached structures to passing Minecarts", - "create.ponder.cart_assembler.text_2": "UNLOCALIZED: Without a redstone signal, it disassembles passing cart contraptions back into blocks", - "create.ponder.cart_assembler.text_3": "UNLOCALIZED: Using a Wrench on the Minecart will let you carry the Contraption elsewhere", - - "create.ponder.cart_assembler_dual.header": "UNLOCALIZED: Assembling Carriage Contraptions", - "create.ponder.cart_assembler_dual.text_1": "UNLOCALIZED: Whenever two Cart Assembers share an attached structure...", - "create.ponder.cart_assembler_dual.text_2": "UNLOCALIZED: Powering either of them will create a Carriage Contraption", - "create.ponder.cart_assembler_dual.text_3": "UNLOCALIZED: The carts will behave like those connected via Minecart Coupling", - - "create.ponder.cart_assembler_modes.header": "UNLOCALIZED: Orientation Settings for Minecart Contraptions", - "create.ponder.cart_assembler_modes.text_1": "UNLOCALIZED: Cart Contraptions will rotate to face towards their carts' motion", - "create.ponder.cart_assembler_modes.text_2": "UNLOCALIZED: This Arrow indicates which side of the Structure will be considered the front", - "create.ponder.cart_assembler_modes.text_3": "UNLOCALIZED: If the Assembler is set to Lock Rotation, the contraptions' orientation will never change", - - "create.ponder.cart_assembler_rails.header": "UNLOCALIZED: Other types of Minecarts and Rails", - "create.ponder.cart_assembler_rails.text_1": "UNLOCALIZED: Cart Assemblers on Regular Tracks will not affect the passing carts' motion", - "create.ponder.cart_assembler_rails.text_2": "UNLOCALIZED: When on Powered or Controller Rail, the carts will be held in place until it's Powered", - "create.ponder.cart_assembler_rails.text_3": "UNLOCALIZED: Other types of Minecarts can be used as the anchor", - "create.ponder.cart_assembler_rails.text_4": "UNLOCALIZED: Furnace Carts will keep themselves powered, pulling fuel from any attached inventories", - - "create.ponder.chain_drive.header": "UNLOCALIZED: Relaying rotational force with Chain Drives", - "create.ponder.chain_drive.text_1": "UNLOCALIZED: Chain Drives relay rotation to each other in a row", - "create.ponder.chain_drive.text_2": "UNLOCALIZED: All shafts connected like this will rotate in the same direction", - "create.ponder.chain_drive.text_3": "UNLOCALIZED: Any part of the row can be rotated by 90 degrees", - - "create.ponder.chain_gearshift.header": "UNLOCALIZED: Controlling rotational speed with Chain Gearshifts", - "create.ponder.chain_gearshift.text_1": "UNLOCALIZED: Unpowered Chain Gearshifts behave exactly like Chain Drives", - "create.ponder.chain_gearshift.text_2": "UNLOCALIZED: When Powered, the speed transmitted to other Chain Drives in the row is doubled", - "create.ponder.chain_gearshift.text_3": "UNLOCALIZED: Whenever the Powered Gearshift is not at the source, its speed will be halved instead", - "create.ponder.chain_gearshift.text_4": "UNLOCALIZED: In both cases, Chain Drives in the row always run at 2x the speed of the Powered Gearshift", - "create.ponder.chain_gearshift.text_5": "UNLOCALIZED: Using analog signals, the ratio can be adjusted more precisely between 1 and 2", - "create.ponder.chain_gearshift.text_6": "UNLOCALIZED: 12 RPM", - - "create.ponder.chute.header": "UNLOCALIZED: Transporting Items downward via Chutes", - "create.ponder.chute.text_1": "UNLOCALIZED: Chutes can transport items vertically from and to inventories", - "create.ponder.chute.text_2": "UNLOCALIZED: Using the Wrench, a window can be created", - "create.ponder.chute.text_3": "UNLOCALIZED: Placing chutes targeting the side faces of another will make it diagonal", - - "create.ponder.chute_upward.header": "UNLOCALIZED: Transporting Items upward via Chutes", - "create.ponder.chute_upward.text_1": "UNLOCALIZED: Using Encased Fans at the top or bottom, a Chute can move items upward", - "create.ponder.chute_upward.text_2": "UNLOCALIZED: Inspecting chutes with Engineers' Goggles reveals information about the movement direction", - "create.ponder.chute_upward.text_3": "UNLOCALIZED: On the 'blocked' end, items will have to be inserted/taken from the sides", - - "create.ponder.clockwork_bearing.header": "UNLOCALIZED: Animating Structures using Clockwork Bearings", - "create.ponder.clockwork_bearing.text_1": "UNLOCALIZED: Clockwork Bearings attach to blocks in front of them", - "create.ponder.clockwork_bearing.text_2": "UNLOCALIZED: Upon receiving Rotational Force, the structure will be rotated according to the hour of the day", - "create.ponder.clockwork_bearing.text_3": "UNLOCALIZED: 3:00", - "create.ponder.clockwork_bearing.text_4": "UNLOCALIZED: 4:00", - "create.ponder.clockwork_bearing.text_5": "UNLOCALIZED: Right-Click the bearing to start or stop animating the structure", - "create.ponder.clockwork_bearing.text_6": "UNLOCALIZED: In front of the Hour Hand, a second structure can be added", - "create.ponder.clockwork_bearing.text_7": "UNLOCALIZED: Ensure the two Structures are not attached to each other through super glue or similar", - "create.ponder.clockwork_bearing.text_8": "UNLOCALIZED: The Second Structure will now rotate as the Minute Hand", - - "create.ponder.clutch.header": "UNLOCALIZED: Controlling rotational force using a Clutch", - "create.ponder.clutch.text_1": "UNLOCALIZED: Clutches will relay rotation in a straight line", - "create.ponder.clutch.text_2": "UNLOCALIZED: When powered by Redstone, it breaks the connection", - - "create.ponder.cog_speedup.header": "UNLOCALIZED: Gearshifting with Cogs", - "create.ponder.cog_speedup.text_1": "UNLOCALIZED: Large and Small cogs can be connected diagonally", - "create.ponder.cog_speedup.text_2": "UNLOCALIZED: Shifting from large to small cogs, the conveyed speed will be doubled", - "create.ponder.cog_speedup.text_3": "UNLOCALIZED: Shifting the opposite way, the conveyed speed will be halved", - - "create.ponder.cogwheel.header": "UNLOCALIZED: Relaying rotational force using Cogwheels", - "create.ponder.cogwheel.text_1": "UNLOCALIZED: Cogwheels will relay rotation to other adjacent cogwheels", - "create.ponder.cogwheel.text_2": "UNLOCALIZED: Neighbouring shafts connected like this will rotate in opposite directions", - - "create.ponder.creative_fluid_tank.header": "UNLOCALIZED: Creative Fluid Tanks", - "create.ponder.creative_fluid_tank.text_1": "UNLOCALIZED: Creative Fluid Tanks can be used to provide a bottomless supply of fluid", - "create.ponder.creative_fluid_tank.text_2": "UNLOCALIZED: Right-Click with a fluid containing item to configure it", - "create.ponder.creative_fluid_tank.text_3": "UNLOCALIZED: Pipe Networks can now endlessly draw the assigned fluid from the tank", - "create.ponder.creative_fluid_tank.text_4": "UNLOCALIZED: Any Fluids pushed back into a Creative Fluid Tank will be voided", - - "create.ponder.creative_motor.header": "UNLOCALIZED: Generating Rotational Force using Creative Motors", - "create.ponder.creative_motor.text_1": "UNLOCALIZED: Creative motors are a compact and configurable source of Rotational Force", - "create.ponder.creative_motor.text_2": "UNLOCALIZED: Scrolling on the back panel changes the RPM of the motors' rotational output", - - "create.ponder.crushing_wheels.header": "UNLOCALIZED: Processing Items with Crushing Wheels", - "create.ponder.crushing_wheels.text_1": "UNLOCALIZED: A pair of Crushing Wheels can grind items very effectively", - "create.ponder.crushing_wheels.text_2": "UNLOCALIZED: Their Rotational Input has to make them spin into each other", - "create.ponder.crushing_wheels.text_3": "UNLOCALIZED: Items thrown or inserted into the top will get processed", - "create.ponder.crushing_wheels.text_4": "UNLOCALIZED: Items can be inserted and picked up through automated means as well", - - "create.ponder.deployer.header": "UNLOCALIZED: Using the Deployer", - "create.ponder.deployer.text_1": "UNLOCALIZED: Given Rotational Force, a Deployer can imitate player interactions", - "create.ponder.deployer.text_10": "UNLOCALIZED: Right-click the front to give it an Item to use", - "create.ponder.deployer.text_11": "UNLOCALIZED: Items can also be inserted automatically", - "create.ponder.deployer.text_12": "UNLOCALIZED: Deployers carry a filter slot", - "create.ponder.deployer.text_13": "UNLOCALIZED: When a filter is set, it activates only while holding a matching item", - "create.ponder.deployer.text_14": "UNLOCALIZED: Only items matching the filter can now be inserted...", - "create.ponder.deployer.text_15": "UNLOCALIZED: ...and only non-matching items will be extracted", - "create.ponder.deployer.text_2": "UNLOCALIZED: It will always interact with the position 2 blocks in front of itself", - "create.ponder.deployer.text_3": "UNLOCALIZED: Blocks directly in front will not obstruct it", - "create.ponder.deployer.text_4": "UNLOCALIZED: Deployers can:", - "create.ponder.deployer.text_5": "UNLOCALIZED: Place Blocks,", - "create.ponder.deployer.text_6": "UNLOCALIZED: Use Items,", - "create.ponder.deployer.text_7": "UNLOCALIZED: Activate Blocks,", - "create.ponder.deployer.text_8": "UNLOCALIZED: Harvest blocks", - "create.ponder.deployer.text_9": "UNLOCALIZED: and Attack Mobs", - - "create.ponder.deployer_contraption.header": "UNLOCALIZED: Using Deployers on Contraptions", - "create.ponder.deployer_contraption.text_1": "UNLOCALIZED: Whenever Deployers are moved as part of an animated Contraption...", - "create.ponder.deployer_contraption.text_2": "UNLOCALIZED: They activate at each visited location, using items from inventories anywhere on the contraption", - "create.ponder.deployer_contraption.text_3": "UNLOCALIZED: The Filter slot can be used to specify which items to pull", - - "create.ponder.deployer_modes.header": "UNLOCALIZED: Modes of the Deployer", - "create.ponder.deployer_modes.text_1": "UNLOCALIZED: By default, a Deployer imitates a Right-click interaction", - "create.ponder.deployer_modes.text_2": "UNLOCALIZED: Using a Wrench, it can be set to imitate a Left-click instead", - - "create.ponder.deployer_processing.header": "UNLOCALIZED: Processing Items using Deployers", - "create.ponder.deployer_processing.text_1": "UNLOCALIZED: With a fitting held item, Deployers can process items provided beneath them", - "create.ponder.deployer_processing.text_2": "UNLOCALIZED: The Input items can be dropped or placed on a Depot under the Deployer", - "create.ponder.deployer_processing.text_3": "UNLOCALIZED: When items are provided on a belt...", - "create.ponder.deployer_processing.text_4": "UNLOCALIZED: The Deployer will hold and process them automatically", - - "create.ponder.deployer_redstone.header": "UNLOCALIZED: Controlling Deployers with Redstone", - "create.ponder.deployer_redstone.text_1": "UNLOCALIZED: When powered by Redstone, Deployers will not activate", - "create.ponder.deployer_redstone.text_2": "UNLOCALIZED: Before stopping, the Deployer will finish any started cycles", - "create.ponder.deployer_redstone.text_3": "UNLOCALIZED: Thus, a negative pulse can be used to trigger exactly one activation cycle", - - "create.ponder.depot.header": "UNLOCALIZED: Using Depots", - "create.ponder.depot.text_1": "UNLOCALIZED: Depots can serve as 'stationary' belt elements", - "create.ponder.depot.text_2": "UNLOCALIZED: Right-Click to manually place or remove Items from it", - "create.ponder.depot.text_3": "UNLOCALIZED: Just like Mechanical Belts, it can provide items to processing", - "create.ponder.depot.text_4": "UNLOCALIZED: ...as well as provide Items to Mechanical Arms", - - "create.ponder.empty_blaze_burner.header": "UNLOCALIZED: Using Empty Blaze Burners", - "create.ponder.empty_blaze_burner.text_1": "UNLOCALIZED: Right-click a Blaze with the empty burner to capture it", - "create.ponder.empty_blaze_burner.text_2": "UNLOCALIZED: Alternatively, Blazes can be collected from their Spawners directly", - "create.ponder.empty_blaze_burner.text_3": "UNLOCALIZED: You now have an ideal heat source for various machines", - "create.ponder.empty_blaze_burner.text_4": "UNLOCALIZED: For Aesthetic purposes, Empty Blaze Burners can also be lit using Flint and Steel", - "create.ponder.empty_blaze_burner.text_5": "UNLOCALIZED: However, these are not suitable for industrial heating", - - "create.ponder.encased_fluid_pipe.header": "UNLOCALIZED: Encasing Fluid Pipes", - "create.ponder.encased_fluid_pipe.text_1": "UNLOCALIZED: Copper Casing can be used to decorate Fluid Pipes", - "create.ponder.encased_fluid_pipe.text_2": "UNLOCALIZED: Aside from being conceiled, Encased Pipes are locked into their connectivity state", - "create.ponder.encased_fluid_pipe.text_3": "UNLOCALIZED: It will no longer react to any neighbouring blocks being added or removed", - - "create.ponder.fan_direction.header": "UNLOCALIZED: Air flow of Encased Fans", - "create.ponder.fan_direction.text_1": "UNLOCALIZED: Encased Fans use Rotational Force to create an Air Current", - "create.ponder.fan_direction.text_2": "UNLOCALIZED: Strength and Direction of Flow depends on the Rotational Input", - - "create.ponder.fan_processing.header": "UNLOCALIZED: Processing Items using Encased Fans", - "create.ponder.fan_processing.text_1": "UNLOCALIZED: When passing through lava, the Air Flow becomes Heated", - "create.ponder.fan_processing.text_2": "UNLOCALIZED: Items caught in the area will be smelted", - "create.ponder.fan_processing.text_3": "UNLOCALIZED: Food items thrown here would be incinerated", - "create.ponder.fan_processing.text_4": "UNLOCALIZED: Instead, a setup for Smoking using Fire should be used for them", - "create.ponder.fan_processing.text_5": "UNLOCALIZED: Air Flows passing through water create a Washing Setup", - "create.ponder.fan_processing.text_6": "UNLOCALIZED: Some interesting new processing can be done with it", - "create.ponder.fan_processing.text_7": "UNLOCALIZED: The Speed of the Fan does NOT affect the processing speed, only its range", - "create.ponder.fan_processing.text_8": "UNLOCALIZED: Fan Processing can also be applied to Items on Depots and Belts", - - "create.ponder.fan_source.header": "UNLOCALIZED: Generating Rotational Force using Encased Fans", - "create.ponder.fan_source.text_1": "UNLOCALIZED: Fans facing down into a source of heat can provide Rotational Force", - "create.ponder.fan_source.text_2": "UNLOCALIZED: When given a Redstone Signal, the Fans will start providing power", - - "create.ponder.fluid_pipe_flow.header": "UNLOCALIZED: Moving Fluids using Copper Pipes", - "create.ponder.fluid_pipe_flow.text_1": "UNLOCALIZED: Fluid Pipes can connect two or more fluid sources and targets", - "create.ponder.fluid_pipe_flow.text_2": "UNLOCALIZED: Using a wrench, a straight pipe segment can be given a window", - "create.ponder.fluid_pipe_flow.text_3": "UNLOCALIZED: Windowed pipes will not connect to any other adjacent pipe segments", - "create.ponder.fluid_pipe_flow.text_4": "UNLOCALIZED: Powered by Mechanical Pumps, the Pipes can transport Fluids", - "create.ponder.fluid_pipe_flow.text_5": "UNLOCALIZED: No fluid is being extracted at first", - "create.ponder.fluid_pipe_flow.text_6": "UNLOCALIZED: Once the flow connects them, the endpoints gradually transfer their contents", - "create.ponder.fluid_pipe_flow.text_7": "UNLOCALIZED: Thus, the Pipe blocks themselves never 'physically' contain any fluid", - - "create.ponder.fluid_pipe_interaction.header": "UNLOCALIZED: Draining and Filling fluid containers", - "create.ponder.fluid_pipe_interaction.text_1": "UNLOCALIZED: Endpoints of a pipe network can interact with a variety of blocks", - "create.ponder.fluid_pipe_interaction.text_2": "UNLOCALIZED: Any block with fluid storage capabilities can be filled or drained", - "create.ponder.fluid_pipe_interaction.text_3": "UNLOCALIZED: Source blocks right in front of an open end can be picked up...", - "create.ponder.fluid_pipe_interaction.text_4": "UNLOCALIZED: ...while spilling into empty spaces can create fluid sources", - "create.ponder.fluid_pipe_interaction.text_5": "UNLOCALIZED: Pipes can also extract fluids from a handful of other blocks directly", - - "create.ponder.fluid_tank_sizes.header": "UNLOCALIZED: Dimensions of a Fluid tank", - "create.ponder.fluid_tank_sizes.text_1": "UNLOCALIZED: Fluid Tanks can be combined to increase the total capacity", - "create.ponder.fluid_tank_sizes.text_2": "UNLOCALIZED: Their base square can be up to 3 blocks wide...", - "create.ponder.fluid_tank_sizes.text_3": "UNLOCALIZED: ...and grow in height by more than 30 additional layers", - "create.ponder.fluid_tank_sizes.text_4": "UNLOCALIZED: Using a Wrench, a tanks' window can be toggled", - - "create.ponder.fluid_tank_storage.header": "UNLOCALIZED: Storing Fluids in Fluid Tanks", - "create.ponder.fluid_tank_storage.text_1": "UNLOCALIZED: Fluid Tanks can be used to store large amounts of fluid", - "create.ponder.fluid_tank_storage.text_2": "UNLOCALIZED: Pipe networks can push and pull fluids from any side", - "create.ponder.fluid_tank_storage.text_3": "UNLOCALIZED: The contained fluid can be measured by a Comparator", - "create.ponder.fluid_tank_storage.text_4": "UNLOCALIZED: However, in Survival Mode Fluids cannot be added or taken manually", - "create.ponder.fluid_tank_storage.text_5": "UNLOCALIZED: You can use Basins, Item Drains and Spouts to drain or fill fluid containing items", - - "create.ponder.flywheel.header": "UNLOCALIZED: Generating Rotational Force using the Flywheel", - "create.ponder.flywheel.text_1": "UNLOCALIZED: Flywheels are required for generating rotational force with the Furnace Engine", - "create.ponder.flywheel.text_2": "UNLOCALIZED: The provided Rotational Force has a very large stress capacity", - "create.ponder.flywheel.text_3": "UNLOCALIZED: Using a Blast Furnace will double the efficiency of the Engine", - - "create.ponder.funnel_compat.header": "UNLOCALIZED: Funnel compatibility", - "create.ponder.funnel_compat.text_1": "UNLOCALIZED: Funnels should also interact nicely with a handful of other components.", - "create.ponder.funnel_compat.text_2": "UNLOCALIZED: Vertical Saws", - "create.ponder.funnel_compat.text_3": "UNLOCALIZED: Depots", - "create.ponder.funnel_compat.text_4": "UNLOCALIZED: Item Drains", - - "create.ponder.funnel_direction.header": "UNLOCALIZED: Direction of Transfer", - "create.ponder.funnel_direction.text_1": "UNLOCALIZED: Placed normally, it pulls items from the inventory.", - "create.ponder.funnel_direction.text_2": "UNLOCALIZED: Placed while sneaking, it puts items into the inventory.", - "create.ponder.funnel_direction.text_3": "UNLOCALIZED: Using a wrench, the funnel can be flipped after placement.", - "create.ponder.funnel_direction.text_4": "UNLOCALIZED: Same rules will apply for most orientations.", - "create.ponder.funnel_direction.text_5": "UNLOCALIZED: Funnels on belts will extract/insert depending on its movement direction.", - - "create.ponder.funnel_intro.header": "UNLOCALIZED: Using funnels", - "create.ponder.funnel_intro.text_1": "UNLOCALIZED: Funnels are ideal for transferring items from and to inventories.", - - "create.ponder.funnel_redstone.header": "UNLOCALIZED: Redstone control", - "create.ponder.funnel_redstone.text_1": "UNLOCALIZED: Redstone power will prevent any funnel from acting", - - "create.ponder.funnel_transfer.header": "UNLOCALIZED: Direct transfer", - "create.ponder.funnel_transfer.text_1": "UNLOCALIZED: Funnels cannot ever transfer between closed inventories directly.", - "create.ponder.funnel_transfer.text_2": "UNLOCALIZED: Chutes or Smart chutes might be more suitable for such purposes.", - "create.ponder.funnel_transfer.text_3": "UNLOCALIZED: Same applies for horizontal movement. A mechanical belt should help here.", - - "create.ponder.furnace_engine.header": "UNLOCALIZED: Generating Rotational Force using the Furnace Engine", - "create.ponder.furnace_engine.text_1": "UNLOCALIZED: Furnace Engines generate Rotational Force while their attached Furnace is running", - "create.ponder.furnace_engine.text_2": "UNLOCALIZED: The provided Rotational Force has a very large stress capacity", - "create.ponder.furnace_engine.text_3": "UNLOCALIZED: Using a Blast Furnace will double the efficiency of the Engine", - - "create.ponder.gantry_carriage.header": "UNLOCALIZED: Using Gantry Carriages", - "create.ponder.gantry_carriage.text_1": "UNLOCALIZED: Gantry Carriages can mount to and slide along a Gantry Shaft.", - "create.ponder.gantry_carriage.text_2": "UNLOCALIZED: Gantry setups can move attached Blocks.", - - "create.ponder.gantry_cascaded.header": "UNLOCALIZED: Cascaded Gantries", - "create.ponder.gantry_cascaded.text_1": "UNLOCALIZED: Gantry shafts attach to a carriage without the need of super glue", - "create.ponder.gantry_cascaded.text_2": "UNLOCALIZED: Same applies for carriages on moved Gantry Shafts", - "create.ponder.gantry_cascaded.text_3": "UNLOCALIZED: Thus, a gantry system can be cascaded to cover multiple axes of movement", - - "create.ponder.gantry_direction.header": "UNLOCALIZED: Gantry Movement Direction", - "create.ponder.gantry_direction.text_1": "UNLOCALIZED: Gantry Shafts can have opposite orientations", - "create.ponder.gantry_direction.text_2": "UNLOCALIZED: The movement direction of carriages depend on their shafts' orientation", - "create.ponder.gantry_direction.text_3": "UNLOCALIZED: ...as well as the rotation direction of the shaft", - "create.ponder.gantry_direction.text_4": "UNLOCALIZED: Same rules apply for the propagated rotation", - - "create.ponder.gantry_redstone.header": "UNLOCALIZED: Gantry Power Propagation", - "create.ponder.gantry_redstone.text_1": "UNLOCALIZED: Redstone-powered gantry shafts stop moving their carriages", - "create.ponder.gantry_redstone.text_2": "UNLOCALIZED: Instead, its rotational force is relayed to the carriages' output shaft", - - "create.ponder.gantry_shaft.header": "UNLOCALIZED: Using Gantry Shafts", - "create.ponder.gantry_shaft.text_1": "UNLOCALIZED: Gantry Shafts form the basis of a gantry setup. Attached Carriages will move along them.", - "create.ponder.gantry_shaft.text_2": "UNLOCALIZED: Gantry setups can move attached Blocks.", - - "create.ponder.gearbox.header": "UNLOCALIZED: Relaying rotational force using Gearboxes", - "create.ponder.gearbox.text_1": "UNLOCALIZED: Jumping between axes of rotation can get bulky quickly", - "create.ponder.gearbox.text_2": "UNLOCALIZED: A gearbox is the more compact equivalent of this setup", - "create.ponder.gearbox.text_3": "UNLOCALIZED: Shafts around corners rotate in mirrored directions", - "create.ponder.gearbox.text_4": "UNLOCALIZED: Straight connections will be reversed", - - "create.ponder.gearshift.header": "UNLOCALIZED: Controlling rotational force using a Gearshift", - "create.ponder.gearshift.text_1": "UNLOCALIZED: Gearshifts will relay rotation in a straight line", - "create.ponder.gearshift.text_2": "UNLOCALIZED: When powered by Redstone, it reverses the transmission", - - "create.ponder.hand_crank.header": "UNLOCALIZED: Generating Rotational Force using Hand Cranks", - "create.ponder.hand_crank.text_1": "UNLOCALIZED: Hand Cranks can be used by players to apply rotational force manually", - "create.ponder.hand_crank.text_2": "UNLOCALIZED: Hold Right-Click to rotate it Counter-Clockwise", - "create.ponder.hand_crank.text_3": "UNLOCALIZED: Its conveyed speed is relatively high", - "create.ponder.hand_crank.text_4": "UNLOCALIZED: Sneak and Hold Right-Click to rotate it Clockwise", - - "create.ponder.hose_pulley.header": "UNLOCALIZED: Source Filling and Draining using Hose Pulleys", - "create.ponder.hose_pulley.text_1": "UNLOCALIZED: Hose Pulleys can be used to fill or drain large bodies of Fluid", - "create.ponder.hose_pulley.text_2": "UNLOCALIZED: With the Kinetic Input, the height of the pulleys' hose can be controlled", - "create.ponder.hose_pulley.text_3": "UNLOCALIZED: The Pulley retracts while the input rotation is inverted", - "create.ponder.hose_pulley.text_4": "UNLOCALIZED: On the opposite side, pipes can be connected", - "create.ponder.hose_pulley.text_5": "UNLOCALIZED: Attached pipe networks can either provide fluid to the hose...", - "create.ponder.hose_pulley.text_6": "UNLOCALIZED: ...or pull from it, draining the pool instead", - "create.ponder.hose_pulley.text_7": "UNLOCALIZED: Fill and Drain speed of the pulley depends entirely on the fluid networks' throughput", - - "create.ponder.hose_pulley_infinite.header": "UNLOCALIZED: Passively Filling and Draining large bodies of Fluid", - "create.ponder.hose_pulley_infinite.text_1": "UNLOCALIZED: When deploying the Hose Pulley into a large enough ocean...", - "create.ponder.hose_pulley_infinite.text_2": "UNLOCALIZED: It will provide/dispose fluids without affecting the source", - "create.ponder.hose_pulley_infinite.text_3": "UNLOCALIZED: Pipe networks can limitlessly take fluids from/to such pulleys", - - "create.ponder.hose_pulley_level.header": "UNLOCALIZED: Fill and Drain level of Hose Pulleys", - "create.ponder.hose_pulley_level.text_1": "UNLOCALIZED: While fully retracted, the Hose Pulley cannot operate", - "create.ponder.hose_pulley_level.text_2": "UNLOCALIZED: Draining runs from top to bottom", - "create.ponder.hose_pulley_level.text_3": "UNLOCALIZED: The surface level will end up just below where the hose ends", - "create.ponder.hose_pulley_level.text_4": "UNLOCALIZED: Filling runs from bottom to top", - "create.ponder.hose_pulley_level.text_5": "UNLOCALIZED: The filled pool will not grow beyond the layer above the hose end", - - "create.ponder.item_drain.header": "UNLOCALIZED: Emptying Fluid Containers using Item Drains", - "create.ponder.item_drain.text_1": "UNLOCALIZED: Item Drains can extract fluids from items", - "create.ponder.item_drain.text_2": "UNLOCALIZED: Right-click it to pour fluids from your held item into it", - "create.ponder.item_drain.text_3": "UNLOCALIZED: When items are inserted from the side...", - "create.ponder.item_drain.text_4": "UNLOCALIZED: ...they roll across, emptying out their contained fluid", - "create.ponder.item_drain.text_5": "UNLOCALIZED: Pipe Networks can now pull the fluid from the drains' internal buffer", - - "create.ponder.large_cogwheel.header": "UNLOCALIZED: Relaying rotational force using Large Cogwheels", - "create.ponder.large_cogwheel.text_1": "UNLOCALIZED: Large cogwheels can connect to each other at right angles", - "create.ponder.large_cogwheel.text_2": "UNLOCALIZED: It will help relaying conveyed speed to other axes of rotation", - - "create.ponder.linear_chassis_attachment.header": "UNLOCALIZED: Attaching blocks using Linear Chassis", - "create.ponder.linear_chassis_attachment.text_1": "UNLOCALIZED: The open faces of a Linear Chassis can be made Sticky", - "create.ponder.linear_chassis_attachment.text_2": "UNLOCALIZED: Click again to make the opposite side sticky", - "create.ponder.linear_chassis_attachment.text_3": "UNLOCALIZED: Sneak and Right-Click with an empty hand to remove the slime", - "create.ponder.linear_chassis_attachment.text_4": "UNLOCALIZED: Stickied faces of the Linear Chassis will attach a line of blocks in front of it", - "create.ponder.linear_chassis_attachment.text_5": "UNLOCALIZED: Using a Wrench, a precise Range can be specified for this chassis", - "create.ponder.linear_chassis_attachment.text_6": "UNLOCALIZED: Holding CTRL and scrolling adjusts the range of all attached Chassis Blocks", - "create.ponder.linear_chassis_attachment.text_7": "UNLOCALIZED: Attaching blocks to any other side requires the use of Super Glue", - "create.ponder.linear_chassis_attachment.text_8": "UNLOCALIZED: Using these mechanics, structures of any shape can move as a Contraption", - - "create.ponder.linear_chassis_group.header": "UNLOCALIZED: Moving Linear Chassis in groups", - "create.ponder.linear_chassis_group.text_1": "UNLOCALIZED: Linear Chassis connect to identical Chassis blocks next to them", - "create.ponder.linear_chassis_group.text_2": "UNLOCALIZED: When one is moved by a Contraption, the others are dragged with it", - "create.ponder.linear_chassis_group.text_3": "UNLOCALIZED: Chassis of a different type or facing another direction will not attach", - - "create.ponder.mechanical_arm.header": "UNLOCALIZED: Setting up Mechanical Arms", - "create.ponder.mechanical_arm.text_1": "UNLOCALIZED: Mechanical Arms have to be assigned their in- and outputs before they are placed", - "create.ponder.mechanical_arm.text_2": "UNLOCALIZED: Right-Click inventories while holding the Arm to assign them as Targets", - "create.ponder.mechanical_arm.text_3": "UNLOCALIZED: Right-Click again to toggle between Input (Blue) and Output (Orange)", - "create.ponder.mechanical_arm.text_4": "UNLOCALIZED: Left-Click components to remove their Selection", - "create.ponder.mechanical_arm.text_5": "UNLOCALIZED: Once placed, the Mechanical Arm will target the blocks selected previously", - "create.ponder.mechanical_arm.text_6": "UNLOCALIZED: They can have any amount of in- and outputs within their range", - "create.ponder.mechanical_arm.text_7": "UNLOCALIZED: However, not every type of Inventory can be interacted with directly", - "create.ponder.mechanical_arm.text_8": "UNLOCALIZED: Funnels and Depots can help to Bridge that gap", - - "create.ponder.mechanical_arm_filtering.header": "UNLOCALIZED: Filtering Outputs of the Mechanical Arm", - "create.ponder.mechanical_arm_filtering.text_1": "UNLOCALIZED: Inputs", - "create.ponder.mechanical_arm_filtering.text_2": "UNLOCALIZED: Outputs", - "create.ponder.mechanical_arm_filtering.text_3": "UNLOCALIZED: Sometimes it is desirable to restrict targets of the Arm by matching a filter", - "create.ponder.mechanical_arm_filtering.text_4": "UNLOCALIZED: Mechanical Arms by themselves do not provide any options for filtering", - "create.ponder.mechanical_arm_filtering.text_5": "UNLOCALIZED: Brass Funnels as Targets do however communicate their own filter to the Arm", - "create.ponder.mechanical_arm_filtering.text_6": "UNLOCALIZED: The Arm is smart enough not to pick up items it couldn't distribute", - - "create.ponder.mechanical_arm_modes.header": "UNLOCALIZED: Distribution modes of the Mechanical Arm", - "create.ponder.mechanical_arm_modes.text_1": "UNLOCALIZED: Input", - "create.ponder.mechanical_arm_modes.text_2": "UNLOCALIZED: Outputs", - "create.ponder.mechanical_arm_modes.text_3": "UNLOCALIZED: Whenever an Arm has to choose between multiple valid outputs...", - "create.ponder.mechanical_arm_modes.text_4": "UNLOCALIZED: ...it will act according to its setting", - "create.ponder.mechanical_arm_modes.text_5": "UNLOCALIZED: Scrolling with a Wrench will allow you to configure it", - "create.ponder.mechanical_arm_modes.text_6": "UNLOCALIZED: Round Robin mode simply cycles through all outputs that are available", - "create.ponder.mechanical_arm_modes.text_7": "UNLOCALIZED: If an output is unable to take more items, it will be skipped", - "create.ponder.mechanical_arm_modes.text_8": "UNLOCALIZED: Forced Round Robin mode will never skip outputs, and instead wait until they are free", - "create.ponder.mechanical_arm_modes.text_9": "UNLOCALIZED: Prefer First prioritizes the outputs selected earliest when configuring this Arm", - - "create.ponder.mechanical_arm_redstone.header": "UNLOCALIZED: Controlling Mechanical Arms with Redstone", - "create.ponder.mechanical_arm_redstone.text_1": "UNLOCALIZED: When powered by Redstone, Mechanical Arms will not activate", - "create.ponder.mechanical_arm_redstone.text_2": "UNLOCALIZED: Before stopping, it will finish any started cycles", - "create.ponder.mechanical_arm_redstone.text_3": "UNLOCALIZED: Thus, a negative pulse can be used to trigger exactly one activation cycle", - - "create.ponder.mechanical_bearing.header": "UNLOCALIZED: Movings Structures using the Mechanical Bearing", - "create.ponder.mechanical_bearing.text_1": "UNLOCALIZED: Mechanical Bearings attach to the block in front of them", - "create.ponder.mechanical_bearing.text_2": "UNLOCALIZED: Upon receiving Rotational Force, it will assemble it into a Rotating Contraption", - - "create.ponder.mechanical_crafter.header": "UNLOCALIZED: Setting up Mechanical Crafters", - "create.ponder.mechanical_crafter.text_1": "UNLOCALIZED: An array of Mechanical Crafters can be used to automate any Crafting Recipe", - "create.ponder.mechanical_crafter.text_2": "UNLOCALIZED: Using a Wrench, the Crafters' paths can be arranged", - "create.ponder.mechanical_crafter.text_3": "UNLOCALIZED: For a valid setup, all paths have to converge into one exit at any side", - "create.ponder.mechanical_crafter.text_4": "UNLOCALIZED: The outputs will be placed into the inventory at the exit", - "create.ponder.mechanical_crafter.text_5": "UNLOCALIZED: Mechanical Crafters require Rotational Force to operate", - "create.ponder.mechanical_crafter.text_6": "UNLOCALIZED: Right-Click the front to insert Items manually", - "create.ponder.mechanical_crafter.text_7": "UNLOCALIZED: Once every slot of a path contains an Item, the crafting process will begin", - "create.ponder.mechanical_crafter.text_8": "UNLOCALIZED: For recipes not fully occupying the crafter setup, the start can be forced using a Redstone Pulse", - - "create.ponder.mechanical_crafter_connect.header": "UNLOCALIZED: Connecting Inventories of Crafters", - "create.ponder.mechanical_crafter_connect.text_1": "UNLOCALIZED: Items can be inserted to Crafters automatically", - "create.ponder.mechanical_crafter_connect.text_2": "UNLOCALIZED: Using the Wrench at their backs, Mechanical Crafter inputs can be combined", - "create.ponder.mechanical_crafter_connect.text_3": "UNLOCALIZED: All connected Crafters can now be accessed by the same input location", - - "create.ponder.mechanical_crafter_covers.header": "UNLOCALIZED: Covering slots of Mechanical Crafters", - "create.ponder.mechanical_crafter_covers.text_1": "UNLOCALIZED: Some recipes will require additional Crafters to bridge gaps in the path", - "create.ponder.mechanical_crafter_covers.text_2": "UNLOCALIZED: Using Slot Covers, Crafters can be set to act as an Empty Slot in the arrangement", - "create.ponder.mechanical_crafter_covers.text_3": "UNLOCALIZED: Shared Inputs created with the Wrench at the back can also reach across covered Crafters", - - "create.ponder.mechanical_drill.header": "UNLOCALIZED: Breaking Blocks with the Mechanical Drill", - "create.ponder.mechanical_drill.text_1": "UNLOCALIZED: When given Rotational Force, a Mechanical Drill will break blocks directly in front of it", - "create.ponder.mechanical_drill.text_2": "UNLOCALIZED: Its mining speed depends on the Rotational Input", - - "create.ponder.mechanical_drill_contraption.header": "UNLOCALIZED: Using Mechanical Drills on Contraptions", - "create.ponder.mechanical_drill_contraption.text_1": "UNLOCALIZED: Whenever Drills are moved as part of an animated Contraption...", - "create.ponder.mechanical_drill_contraption.text_2": "UNLOCALIZED: ...they will break blocks the contraption runs them into", - - "create.ponder.mechanical_harvester.header": "UNLOCALIZED: Using Mechanical Harvesters on Contraptions", - "create.ponder.mechanical_harvester.text_1": "UNLOCALIZED: Whenever Harvesters are moved as part of an animated Contraption...", - "create.ponder.mechanical_harvester.text_2": "UNLOCALIZED: They will harvest and reset any mature crops on their way", - - "create.ponder.mechanical_mixer.header": "UNLOCALIZED: Processing Items with the Mechanical Mixer", - "create.ponder.mechanical_mixer.text_1": "UNLOCALIZED: With a Mixer and Basin, some Crafting Recipes can be automated", - "create.ponder.mechanical_mixer.text_2": "UNLOCALIZED: Available recipes include any Shapeless Crafting Recipe, plus a couple extra ones", - "create.ponder.mechanical_mixer.text_3": "UNLOCALIZED: Some of those recipes may require the heat of a Blaze Burner", - "create.ponder.mechanical_mixer.text_4": "UNLOCALIZED: The filter slot can be used in case two recipes are conflicting.", - - "create.ponder.mechanical_piston.header": "UNLOCALIZED: Moving Structures using Mechanical Pistons", - "create.ponder.mechanical_piston.text_1": "UNLOCALIZED: Mechanical Pistons can move blocks in front of them", - "create.ponder.mechanical_piston.text_2": "UNLOCALIZED: Speed and direction of movement depend on the Rotational Input", - "create.ponder.mechanical_piston.text_3": "UNLOCALIZED: Sticky Mechanical Pistons can pull the attached blocks back", - - "create.ponder.mechanical_piston_modes.header": "UNLOCALIZED: Movement Modes of the Mechanical Piston", - "create.ponder.mechanical_piston_modes.text_1": "UNLOCALIZED: Whenever Pistons stop moving, the moved structure reverts to blocks", - "create.ponder.mechanical_piston_modes.text_2": "UNLOCALIZED: It can be configured never to revert to solid blocks, or only at the location it started at", - - "create.ponder.mechanical_plough.header": "UNLOCALIZED: Using Mechanical Ploughs on Contraptions", - "create.ponder.mechanical_plough.text_1": "UNLOCALIZED: Whenever Ploughs are moved as part of an animated Contraption...", - "create.ponder.mechanical_plough.text_2": "UNLOCALIZED: ...they will break blocks without a solid collision hitbox", - "create.ponder.mechanical_plough.text_3": "UNLOCALIZED: Additionally, ploughs can create farmland", - "create.ponder.mechanical_plough.text_4": "UNLOCALIZED: ...they can also launch entities without hurting them", - - "create.ponder.mechanical_press.header": "UNLOCALIZED: Processing Items with the Mechanical Press", - "create.ponder.mechanical_press.text_1": "UNLOCALIZED: The Mechanical Press can process items provided beneath it", - "create.ponder.mechanical_press.text_2": "UNLOCALIZED: The Input items can be dropped or placed on a Depot under the Press", - "create.ponder.mechanical_press.text_3": "UNLOCALIZED: When items are provided on a belt...", - "create.ponder.mechanical_press.text_4": "UNLOCALIZED: The Press will hold and process them automatically", - - "create.ponder.mechanical_press_compacting.header": "UNLOCALIZED: Compacting items with the Mechanical Press", - "create.ponder.mechanical_press_compacting.text_1": "UNLOCALIZED: Pressing items held in a Basin will cause them to be Compacted", - "create.ponder.mechanical_press_compacting.text_2": "UNLOCALIZED: Compacting includes any filled 2x2 or 3x3 Crafting Recipe, plus a couple extra ones", - "create.ponder.mechanical_press_compacting.text_3": "UNLOCALIZED: Some of those recipes may require the heat of a Blaze Burner", - "create.ponder.mechanical_press_compacting.text_4": "UNLOCALIZED: The filter slot can be used in case two recipes are conflicting.", - - "create.ponder.mechanical_pump_flow.header": "UNLOCALIZED: Fluid Transportation using Mechanical Pumps", - "create.ponder.mechanical_pump_flow.text_1": "UNLOCALIZED: Mechanical Pumps govern the flow of their attached pipe networks", - "create.ponder.mechanical_pump_flow.text_2": "UNLOCALIZED: When powered, their arrow indicates the direction of flow", - "create.ponder.mechanical_pump_flow.text_3": "UNLOCALIZED: The network behind is now pulling fluids...", - "create.ponder.mechanical_pump_flow.text_4": "UNLOCALIZED: ...while the network in front is transferring it outward", - "create.ponder.mechanical_pump_flow.text_5": "UNLOCALIZED: Reversing the input rotation reverses the direction of flow", - "create.ponder.mechanical_pump_flow.text_6": "UNLOCALIZED: Use a Wrench to reverse the orientation of pumps manually", - - "create.ponder.mechanical_pump_speed.header": "UNLOCALIZED: Throughput of Mechanical Pumps", - "create.ponder.mechanical_pump_speed.text_1": "UNLOCALIZED: Regardless of speed, Mechanical Pumps affect pipes connected up to 16 blocks away", - "create.ponder.mechanical_pump_speed.text_2": "UNLOCALIZED: Speeding up the input rotation changes the speed of flow propagation...", - "create.ponder.mechanical_pump_speed.text_3": "UNLOCALIZED: ...aswell as how quickly fluids are transferred", - "create.ponder.mechanical_pump_speed.text_4": "UNLOCALIZED: Pumps can combine their throughputs within shared pipe networks", - "create.ponder.mechanical_pump_speed.text_5": "UNLOCALIZED: Alternating their orientation can help align their flow directions", - - "create.ponder.mechanical_saw_breaker.header": "UNLOCALIZED: Cutting Trees with the Mechanical Saw", - "create.ponder.mechanical_saw_breaker.text_1": "UNLOCALIZED: When given Rotational Force, a Mechanical Saw will cut trees directly in front of it", - "create.ponder.mechanical_saw_breaker.text_2": "UNLOCALIZED: In order to cut the tree fully, the Saw has to break the last block connecting it to the ground", - - "create.ponder.mechanical_saw_contraption.header": "UNLOCALIZED: Using Mechanical Saws on Contraptions", - "create.ponder.mechanical_saw_contraption.text_1": "UNLOCALIZED: Whenever Saws are moved as part of an animated Contraption...", - "create.ponder.mechanical_saw_contraption.text_2": "UNLOCALIZED: ...they will cut any trees the contraption runs them into", - - "create.ponder.mechanical_saw_processing.header": "UNLOCALIZED: Processing Items on the Mechanical Saw", - "create.ponder.mechanical_saw_processing.text_1": "UNLOCALIZED: Upward facing Mechanical Saws can process a variety of items", - "create.ponder.mechanical_saw_processing.text_2": "UNLOCALIZED: The processed item always moves against the rotational input to the saw", - "create.ponder.mechanical_saw_processing.text_3": "UNLOCALIZED: Saws can work in-line with Mechanical Belts", - "create.ponder.mechanical_saw_processing.text_4": "UNLOCALIZED: When an ingredient has multiple possible outcomes, the filter slot can specify it", - "create.ponder.mechanical_saw_processing.text_5": "UNLOCALIZED: Without filter, the Saw would cycle through all outcomes instead", - - "create.ponder.millstone.header": "UNLOCALIZED: Processing Items in the Millstone", - "create.ponder.millstone.text_1": "UNLOCALIZED: Millstones process items by grinding them", - "create.ponder.millstone.text_2": "UNLOCALIZED: They can be powered from the side using cogwheels", - "create.ponder.millstone.text_3": "UNLOCALIZED: Throw or Insert items at the top", - "create.ponder.millstone.text_4": "UNLOCALIZED: After some time, the result can be obtained via Right-click", - "create.ponder.millstone.text_5": "UNLOCALIZED: The outputs can also be extracted by automation", - - "create.ponder.nixie_tube.header": "UNLOCALIZED: Using Nixie Tubes", - "create.ponder.nixie_tube.text_1": "UNLOCALIZED: When powered by Redstone, Nixie Tubes will display the redstone signals' strength", - "create.ponder.nixie_tube.text_2": "UNLOCALIZED: Using name tags edited with an anvil, custom text can be displayed", + "create.ponder.hold_to_ponder": "Mantén [%1$s] para considerar", + "create.ponder.subject": "Tema de esta escena", + "create.ponder.pondering": "Considerando sobre...", + "create.ponder.identify_mode": "Identificando modo activo.\nDespausea con [%1$s]", + "create.ponder.associated": "Entradas asociadas", + "create.ponder.close": "Cerrar", + "create.ponder.identify": "Identificar", + "create.ponder.next": "Escena siguiente", + "create.ponder.previous": "Escena previa", + "create.ponder.replay": "Repetición", + "create.ponder.think_back": "Volver atrás", + "create.ponder.slow_text": "Lectura cómoda", + "create.ponder.exit": "Exit", + "create.ponder.welcome": "Welcome to Ponder", + "create.ponder.categories": "Available Categories in Create", + "create.ponder.index_description": "Click one of the icons to learn about its associated Items and Blocks", + "create.ponder.index_title": "Ponder Index", + "create.ponder.shared.movement_anchors": "Con la ayuda de un chasis o pegamento, se pueden mover estructuras más grandes.", + "create.ponder.shared.rpm32": "32 RPM", + "create.ponder.shared.sneak_and": "Mayús izdo. +", + "create.ponder.shared.storage_on_contraption": "Los inventarios unidos al artilugio recogerán sus producciones automáticamente", + "create.ponder.shared.behaviour_modify_wrench": "Este comportamiento puede modificarse mediante una llave inglesa", + "create.ponder.shared.rpm8": "8 RPM", + "create.ponder.shared.ctrl_and": "Ctrl +", + "create.ponder.shared.rpm16_source": "Fuente: 16 RPM", + "create.ponder.shared.rpm16": "16 RPM", + "create.ponder.tag.kinetic_sources": "Fuentes cinéticas", + "create.ponder.tag.kinetic_sources.description": "Componentes que generan fuerza rotacional", + "create.ponder.tag.contraption_actor": "Actores del artilugio", + "create.ponder.tag.contraption_actor.description": "Componentes que exponen un comportamiento especial cuando están unidos a un artilugio en movimiento", + "create.ponder.tag.arm_targets": "Objetivos para los brazos mecánicos", + "create.ponder.tag.arm_targets.description": "Componentes que pueden seleccionarse como entradas o salidas del brazo mecánico", + "create.ponder.tag.logistics": "Transporte de objetos", + "create.ponder.tag.logistics.description": "Componentes que ayudan a desplazar los objetos", + "create.ponder.tag.movement_anchor": "Anclas de movimiento", + "create.ponder.tag.movement_anchor.description": "Componentes que permiten crear artilugios en movimiento, animando una estructura anexa de diversas maneras", + "create.ponder.tag.creative": "Modo creativo", + "create.ponder.tag.creative.description": "Componentes que no suelen estar disponibles para el Modo Supervivencia", + "create.ponder.tag.kinetic_relays": "Transmisores cinéticos", + "create.ponder.tag.kinetic_relays.description": "Componentes que ayudan a transmitir la fuerza rotacional en otro lugar", + "create.ponder.tag.windmill_sails": "Velas para los rodamientos de los molinos de viento", + "create.ponder.tag.windmill_sails.description": "Bloques que cuentan para la fuerza de un artefacto de molino de viento cuando se ensamblan. Cada uno de ellos tiene la misma eficacia al hacerlo.", + "create.ponder.tag.contraption_assembly": "Utilidades para adjuntar bloques", + "create.ponder.tag.contraption_assembly.description": "Herramientas y componentes utilizados para montar estructuras con movimiento, como un artilugio animado", + "create.ponder.tag.decoration": "Estética", + "create.ponder.tag.decoration.description": "Componentes utilizados principalmente con fines decorativos", + "create.ponder.tag.kinetic_appliances": "Dispositivos cinéticos", + "create.ponder.tag.kinetic_appliances.description": "Componentes que utilizan la fuerza rotacional", + "create.ponder.tag.redstone": "Componentes lógicos", + "create.ponder.tag.redstone.description": "Componentes que ayudan a la ingeniería de redstone", + "create.ponder.tag.fluids": "Manipuladores de fluidos", + "create.ponder.tag.fluids.description": "Componentes que ayudan a transportar y utilizar fluidos", + + "create.ponder.adjustable_pulse_repeater.header": "Controlar señales mediante repetidores de pulsos ajustables", + "create.ponder.adjustable_pulse_repeater.text_1": "Los repetidores de pulsos ajustables emiten un pulso corto con un retardo", + "create.ponder.adjustable_pulse_repeater.text_2": "Con la rueda del ratón se puede configurar el tiempo de carga", + "create.ponder.adjustable_pulse_repeater.text_3": "Los retrasos configurados pueden ser de hasta 30 minutos", + + "create.ponder.adjustable_repeater.header": "Controlar señales mediante repetidores ajustables", + "create.ponder.adjustable_repeater.text_1": "Los repetidores ajustables se comportan de forma similar a los repetidores normales", + "create.ponder.adjustable_repeater.text_2": "Se cargan durante un tiempo determinado...", + "create.ponder.adjustable_repeater.text_3": "...y se enfrían durante el mismo tiempo", + "create.ponder.adjustable_repeater.text_4": "Con la rueda del ratón se puede configurar el tiempo de carga", + "create.ponder.adjustable_repeater.text_5": "Los retrasos configurados pueden variar hasta 30 minutos", + + "create.ponder.analog_lever.header": "Controlar señales mediante la palanca analógica", + "create.ponder.analog_lever.text_1": "Las palancas analógicas son una fuente compacta y precisa de energía de redstone", + "create.ponder.analog_lever.text_2": "Haz clic derecho para aumentar su potencia analógica", + "create.ponder.analog_lever.text_3": "Usa [Mayús izdo.] + clic derecho para volver a disminuir su potencia", + + "create.ponder.andesite_tunnel.header": "Usar túneles de andesita", + "create.ponder.andesite_tunnel.text_1": "Los túneles de andesita se pueden utilizar para tapar las correas", + "create.ponder.andesite_tunnel.text_2": "Siempre que un túnel de andesita tenga conexiones a los lados...", + "create.ponder.andesite_tunnel.text_3": "...dividirá exactamente un elemento de cualquier pila que pase", + "create.ponder.andesite_tunnel.text_4": "El resto continuará su camino", + + "create.ponder.basin.header": "Procesar objetos en la cuenca", + "create.ponder.basin.text_1": "Una cuenca puede contener objetos y fluidos para su procesamiento", + "create.ponder.basin.text_2": "Después de un paso de procesamamiento, las cuencas intentan descargar por debajo a un lado de ellas", + "create.ponder.basin.text_3": "Cuando un ingrediente válido está presente, la cuenca mostrará un conducto de salida", + "create.ponder.basin.text_4": "Aquí se pueden aplicar varias opciones", + "create.ponder.basin.text_5": "Las salidas serán capturadas por el inventario que está por debajo", + "create.ponder.basin.text_6": "Sin conducto de salida, la cuenca retendrá los objetos creados en su procesamiento", + "create.ponder.basin.text_7": "Esto puede ser útil si las salidas deben ser reutilizadas como ingredientes", + "create.ponder.basin.text_8": "Las salidas deseadas tendrán que ser extraídas de la cuenca", + "create.ponder.basin.text_9": "Podría ser necesario un filtro para evitar sacar los objetos no procesados", + + "create.ponder.bearing_modes.header": "Modos de movimiento del rodamiento mecánico", + "create.ponder.bearing_modes.text_1": "Cuando se detenga, el rodamiento mecánico colocará la estructura en el ángulo más cercano alineado con la cuadrícula", + "create.ponder.bearing_modes.text_2": "Se puede configurar para que nunca vuelva a los bloques sólidos, o sólo cerca del ángulo en el que comenzó", + + "create.ponder.belt_casing.header": "Correas revestidas", + "create.ponder.belt_casing.text_1": "Se puede utilizar revestidor de latón o andesita para decorar las correas", + "create.ponder.belt_casing.text_2": "Se puede utilizar una llave inglesa para quitar el revestimiento", + + "create.ponder.belt_connector.header": "El uso de las correas mecánicas", + "create.ponder.belt_connector.text_1": "Al hacer clic derecho en dos ejes con una correa mecánica se conectarán entre sí", + "create.ponder.belt_connector.text_2": "Las selecciones accidentales pueden ser canceladas con [Mayús izdo.] + clic derecho", + "create.ponder.belt_connector.text_3": "Se pueden añadir ejes adicionales en toda la correa", + "create.ponder.belt_connector.text_4": "Los ejes conectados a través de correas girarán con velocidad y dirección idénticas", + "create.ponder.belt_connector.text_5": "Los ejes añadidos se pueden quitar con la llave inglesa", + "create.ponder.belt_connector.text_6": "Las correas mecánicas se pueden teñir con fines estéticos", + + "create.ponder.belt_directions.header": "Orientaciones válidas para las correas mecánicas", + "create.ponder.belt_directions.text_1": "Las correas mecánicas no pueden conectarse en direcciones arbitrarias", + "create.ponder.belt_directions.text_2": "1. Pueden conectarse horizontalmente", + "create.ponder.belt_directions.text_3": "2. Pueden conectarse en diagonal", + "create.ponder.belt_directions.text_4": "3. Pueden conectarse verticalmente", + "create.ponder.belt_directions.text_5": "4. Y pueden conectar ejes verticales horizontalmente", + "create.ponder.belt_directions.text_6": "Estas son todas las direcciones posibles. Pueden abarcar cualquier longitud entre 2 y 20 bloques", + + "create.ponder.belt_transport.header": "El uso de las correas mecánicas para la logística", + "create.ponder.belt_transport.text_1": "Las correas mecánicas transportan objetos y otras entidades", + "create.ponder.belt_transport.text_2": "Haz clic derecho con la mano vacía para sacar objetos de una 'cinta'", + + "create.ponder.blaze_burner.header": "Alimentar quemadores de blaze", + "create.ponder.blaze_burner.text_1": "Los quemadores de blaze pueden proporcionar calor a los objetos procesados en una cuenca", + "create.ponder.blaze_burner.text_2": "Para ello, el blaze tiene que ser alimentado con objetos inflamables", + "create.ponder.blaze_burner.text_3": "Con un pastel de blaze, el quemador puede alcanzar un mayor nivel de calor", + "create.ponder.blaze_burner.text_4": "El proceso de alimentación puede automatizarse utilizando desplegadores o brazos mecánicos", + + "create.ponder.brass_funnel.header": "El embudo de latón", + "create.ponder.brass_funnel.text_1": "Los embudos de andesita sólo pueden extraer objetos individuales", + "create.ponder.brass_funnel.text_2": "Los embudos de latón pueden extraer hasta una pila completa", + "create.ponder.brass_funnel.text_3": "Usar la rueda de desplazamiento del ratón en la ranura para filtros permite un control preciso del tamaño de la pila extraída.", + "create.ponder.brass_funnel.text_4": "El uso de objetos en la ranura de filtrado restringirá el embudo para transferir sólo las pilas que coincidan.", + + "create.ponder.brass_tunnel.header": "Usar túneles de latón", + "create.ponder.brass_tunnel.text_1": "Los túneles de latón pueden utilizarse para tapar las correas", + "create.ponder.brass_tunnel.text_2": "Tienen ranuras de filtro en cada lado abierto", + "create.ponder.brass_tunnel.text_3": "Los filtros en las conexiones de entrada simplemente bloquean los objetos que no coincidan", + "create.ponder.brass_tunnel.text_4": "Los filtros en las conexiones de salida pueden utilizarse para ordenar los objetos por tipo", + "create.ponder.brass_tunnel.text_5": "Siempre que un objeto de paso tenga múltiples salidas válidas, el modo de distribución decidirá cómo manejarlo", + "create.ponder.brass_tunnel.text_6": "Los túneles de latón en bandas paralelas formarán un grupo", + "create.ponder.brass_tunnel.text_7": "Los objetos entrantes se distribuirán ahora por todas las salidas conectadas", + "create.ponder.brass_tunnel.text_8": "Para ello, los objetos también pueden insertarse en el bloque del túnel directamente", + + "create.ponder.brass_tunnel_modes.header": "Modos de distribución del túnel de latón", + "create.ponder.brass_tunnel_modes.text_1": "Mediante una llave inglesa se puede configurar el comportamiento de distribución de los túneles de latón", + "create.ponder.brass_tunnel_modes.text_10": "'Sincronizar entradas' es una configuración única de los túneles de latón", + "create.ponder.brass_tunnel_modes.text_11": "Las entradas sólo pueden pasar si cada túnel del grupo tiene una en espera", + "create.ponder.brass_tunnel_modes.text_12": "Esto asegura que todas las correas afectadas suministren objetos al mismo tiempo", + "create.ponder.brass_tunnel_modes.text_2": "El modo División intentará distribuir la pila uniformemente entre las salidas disponibles", + "create.ponder.brass_tunnel_modes.text_3": "Si una salida no puede tomar más objetos, se saltará", + "create.ponder.brass_tunnel_modes.text_4": "El modo División forzada nunca saltará las salidas, y en su lugar esperará hasta que estén libres", + "create.ponder.brass_tunnel_modes.text_5": "El modo Round Robin mantiene las pilas enteras, y recorre las salidas de forma iterativa", + "create.ponder.brass_tunnel_modes.text_6": "Una vez más, si una salida no puede aceptar más objetos, se saltará", + "create.ponder.brass_tunnel_modes.text_7": "El modo Round Robin forzado nunca omite salidas", + "create.ponder.brass_tunnel_modes.text_8": "El modo Preferir el más cercano prioriza las salidas más cercanas a la ubicación de entrada de los objetos", + "create.ponder.brass_tunnel_modes.text_9": "El modo Aleatorizar distribuirá pilas enteras a salidas elegidas al azar", + + "create.ponder.cart_assembler.header": "Mover estructuras usando ensambladores de vagonetas", + "create.ponder.cart_assembler.text_1": "Los ensambladores de vagonetas montan estructuras adjuntas a las vagonetas que pasan", + "create.ponder.cart_assembler.text_2": "Sin una señal de redstone, desmonta los artilugios de vagoneta que pasan de nuevo en bloques", + "create.ponder.cart_assembler.text_3": "El uso de una llave inglesa en una vagoneta te permitirá llevar el artilugio a otro lugar", + + "create.ponder.cart_assembler_dual.header": "Ensamblajes de artilugios de vagoneta", + "create.ponder.cart_assembler_dual.text_1": "Siempre que dos ensambladores de vagoneta compartan una estructura adjunta...", + "create.ponder.cart_assembler_dual.text_2": "...al alimentar a cualquiera de ellos se creará un artilugio de vagoneta", + "create.ponder.cart_assembler_dual.text_3": "Las vagonetas se comportarán como las conectadas a través del acoplamiento de vagoneta", + + "create.ponder.cart_assembler_modes.header": "Configurar la orientación de los artilugios de vagonetas", + "create.ponder.cart_assembler_modes.text_1": "Los artilugios de vagonetas girarán para orientarse hacia el movimiento de sus vagonetas", + "create.ponder.cart_assembler_modes.text_2": "This Arrow indicates which side of the Structure will be considered the front", + "create.ponder.cart_assembler_modes.text_3": "If the Assembler is set to Lock Rotation, the contraptions' orientation will never change", + + "create.ponder.cart_assembler_rails.header": "Otros tipos de vagonetas y raíles", + "create.ponder.cart_assembler_rails.text_1": "Los ensambladores de vagonetas en raíles normales no afectarán el movimiento de las vagonetas que pasen", + "create.ponder.cart_assembler_rails.text_2": "Cuando se encuentre en un raíl motorizado o en un raíl de control, las vagonetas se mantendrán en su sitio hasta que sea motorizado", + "create.ponder.cart_assembler_rails.text_3": "Se pueden utilizar otros tipos de vagonetas como anclaje", + "create.ponder.cart_assembler_rails.text_4": "Los artilugios de vagonetas de horno se mantendrán alimentados a sí mismos, sacando combustible de cualquier inventario adjunto", + + "create.ponder.chain_drive.header": "Transmitir fuerza rotacional con las cadenas de transmisión", + "create.ponder.chain_drive.text_1": "Las cadenas de transmisión transmiten la rotación entre sí en fila", + "create.ponder.chain_drive.text_2": "Todos los ejes conectados así girarán en la misma dirección", + "create.ponder.chain_drive.text_3": "Cualquier parte de la fila puede girar 90 grados usando una llave inglesa", + + "create.ponder.chain_gearshift.header": "Controlar la velocidad de rotación con la cadena de transmisión ajustable", + "create.ponder.chain_gearshift.text_1": "Las cadenas de transmisión ajustables sin alimentación se comportan exactamente como las cadenas de transmisión", + "create.ponder.chain_gearshift.text_2": "Cuando están alimentadas, la velocidad transmitida a las demás cadenas de transmisión de la fila se duplica", + "create.ponder.chain_gearshift.text_3": "Siempre que la cadena de transmisión alimentada no esté en el origen, su velocidad se reducirá a la mitad", + "create.ponder.chain_gearshift.text_4": "En ambos casos, las cadenas de transmisión de la fila siempre funcionan a 2 veces la velocidad de la cadena de transmisión alimentada", + "create.ponder.chain_gearshift.text_5": "Utilizando señales analógicas, la relación puede ajustarse con mayor precisión, entre 1 y 2", + "create.ponder.chain_gearshift.text_6": "12 RPM", + + "create.ponder.chute.header": "Transportar objetos hacia abajo a través de ductos", + "create.ponder.chute.text_1": "Los ductos pueden transportar objetos verticalmente desde y hacia los inventarios", + "create.ponder.chute.text_2": "Usando la llave inglesa, se puede crear una ventana", + "create.ponder.chute.text_3": "Colocar ductos apuntando a las caras laterales de otro lo hará en diagonal", + + "create.ponder.chute_upward.header": "Transportar objetos hacia arriba mediante ductos", + "create.ponder.chute_upward.text_1": "Usando ventiladores revestidos en la parte superior o inferior, un ducto puede transportar objetos hacia arriba", + "create.ponder.chute_upward.text_2": "Al inspeccionar los ductos con las gafas del constructor, se revela información sobre la dirección del movimiento", + "create.ponder.chute_upward.text_3": "En el extremo 'bloqueado', los objetos tendrán que ser insertados/tomados de los lados", + + "create.ponder.clockwork_bearing.header": "Animar estructuras con rodamientos tipo reloj", + "create.ponder.clockwork_bearing.text_1": "Los rodamientos tipo reloj se fijan a los bloques que tienen delante", + "create.ponder.clockwork_bearing.text_2": "Al recibir fuerza rotacional, la estructura girará según la hora del día", + "create.ponder.clockwork_bearing.text_3": "3:00", + "create.ponder.clockwork_bearing.text_4": "4:00", + "create.ponder.clockwork_bearing.text_5": "Haz clic derecho en el rodamiento para iniciar o detener la animación de la estructura", + "create.ponder.clockwork_bearing.text_6": "Delante de la manecilla de las horas se puede añadir una segunda estructura", + "create.ponder.clockwork_bearing.text_7": "Asegúrese de que las dos estructuras no están unidas entre sí con pegamento o algo similar", + "create.ponder.clockwork_bearing.text_8": "La segunda estructura ahora girará como el minutero", + + "create.ponder.clutch.header": "Controlar la fuerza rotacional mediante un embrague", + "create.ponder.clutch.text_1": "Los embragues transmitirán la rotación en línea recta", + "create.ponder.clutch.text_2": "Cuando se alimentan con redstone, rompen la conexión", + + "create.ponder.cog_speedup.header": "Cambiar de marchas con engranajes", + "create.ponder.cog_speedup.text_1": "Los engranajes grandes y pequeños pueden conectarse en diagonal", + "create.ponder.cog_speedup.text_2": "Al cambiar de engranajes grandes a pequeños, la velocidad rotacional se duplicará", + "create.ponder.cog_speedup.text_3": "Inversamente, la velocidad rotacional se reducirá a la mitad", + + "create.ponder.cogwheel.header": "Transmitir fuerza rotacional mediante engranajes", + "create.ponder.cogwheel.text_1": "Los engranajes transmitirán la rotación a otros engranajes adyacentes", + "create.ponder.cogwheel.text_2": "Los ejes adyacentes conectados así, girarán en direcciones opuestas", + + "create.ponder.creative_fluid_tank.header": "Tanque de fluídos creativo", + "create.ponder.creative_fluid_tank.text_1": "Creative Fluid Tanks can be used to provide a bottomless supply of fluid", + "create.ponder.creative_fluid_tank.text_2": "Right-Click with a fluid containing item to configure it", + "create.ponder.creative_fluid_tank.text_3": "Pipe Networks can now endlessly draw the assigned fluid from the tank", + "create.ponder.creative_fluid_tank.text_4": "Any Fluids pushed back into a Creative Fluid Tank will be voided", + + "create.ponder.creative_motor.header": "Generar fuerza rotacional con motores creativos", + "create.ponder.creative_motor.text_1": "Los motores creativos son una fuente compacta y configurable de fuerza rotacional", + "create.ponder.creative_motor.text_2": "Usar la rueda de desplazamiento del ratón en su parte trasera cambia las RPM de la salida rotacional", + + "create.ponder.crushing_wheels.header": "Procesar objetos con las ruedas trituradoras", + "create.ponder.crushing_wheels.text_1": "Un par de ruedas trituradoras pueden moler objetos de forma muy eficaz", + "create.ponder.crushing_wheels.text_2": "Su fuerza rotacional tiene que hacerlas girar una contra otra", + "create.ponder.crushing_wheels.text_3": "Los objetos lanzados o insertados en la parte superior serán procesados", + "create.ponder.crushing_wheels.text_4": "Los objetos también pueden ser insertados y recogidos a través de medios automatizados", + + "create.ponder.deployer.header": "Usar el desplegador", + "create.ponder.deployer.text_1": "Dada la fuerza rotacional, un desplegador puede imitar las interacciones de los jugadores", + "create.ponder.deployer.text_10": "Haz clic derecho en el frente para darle un objeto a utilizar", + "create.ponder.deployer.text_11": "Los objetos también pueden ser insertados automáticamente", + "create.ponder.deployer.text_12": "Los desplegadores llevan una ranura de filtro", + "create.ponder.deployer.text_13": "Cuando se establece un filtro, sólo se activa mientras se mantiene un elemento coincidente", + "create.ponder.deployer.text_14": "Ahora sólo se pueden insertar los objetos que coincidan con el filtro...", + "create.ponder.deployer.text_15": "...y sólo se extraerán los objetos que no coincidan", + "create.ponder.deployer.text_2": "Siempre interactuará con la posición 2 bloques delante de sí mismo", + "create.ponder.deployer.text_3": "Los bloques situados directamente delante no lo obstruirán", + "create.ponder.deployer.text_4": "Los desplegadores pueden:", + "create.ponder.deployer.text_5": "Colocar bloques,", + "create.ponder.deployer.text_6": "Usar objetos,", + "create.ponder.deployer.text_7": "Activar bloques,", + "create.ponder.deployer.text_8": "Cosechar bloques", + "create.ponder.deployer.text_9": "Y atacar criaturas", + + "create.ponder.deployer_contraption.header": "Usar desplegadores en artilugios", + "create.ponder.deployer_contraption.text_1": "Siempre que los desplegadores se muevan como parte de un artilugio animado...", + "create.ponder.deployer_contraption.text_2": "Se activan en cada ubicación visitada, utilizando objetos de los inventarios de cualquier parte del artilugio", + "create.ponder.deployer_contraption.text_3": "La ranura para filtros se puede utilizar para especificar qué objetos tirar", + + "create.ponder.deployer_modes.header": "Modos del desplegador", + "create.ponder.deployer_modes.text_1": "Por defecto, un desplegador imita la interacción del clic derecho del ratón", + "create.ponder.deployer_modes.text_2": "Usando una llave inglesa, se puede configurar para imitar un clic izquierdo en su lugar", + + "create.ponder.deployer_processing.header": "Procesar objetos mediante desplegadores", + "create.ponder.deployer_processing.text_1": "Con un objeto de sujeción ajustado, los desplegadores pueden procesar los objetos proporcionados por debajo de ellos", + "create.ponder.deployer_processing.text_2": "Los objetos de entrada pueden soltarse o colocarse en un depósito bajo el desplegador", + "create.ponder.deployer_processing.text_3": "Cuando los objetos se proporcionan en una 'cinta'...", + "create.ponder.deployer_processing.text_4": "El desplegador los retendrá y procesará automáticamente", + + "create.ponder.deployer_redstone.header": "Controlar desplegadores con redstone", + "create.ponder.deployer_redstone.text_1": "Al controlar los desplegadores con redstone, éstos no se activarán", + "create.ponder.deployer_redstone.text_2": "Antes de detenerse, el desplegador terminará cualquier ciclo iniciado", + "create.ponder.deployer_redstone.text_3": "Por lo tanto, un pulso negativo puede ser utilizado para desencadenar exactamente un ciclo de activación", + + "create.ponder.depot.header": "Usar depósitos", + "create.ponder.depot.text_1": "Los depósitos pueden servir como objetos 'fijos' de la correa", + "create.ponder.depot.text_2": "Haz clic derecho para colocar o eliminar manualmente objetos del mismo", + "create.ponder.depot.text_3": "Al igual que las correas mecánicas, pueden proporcionar objetos para su procesamiento", + "create.ponder.depot.text_4": "...así como proporcionar objetos a los brazos mecánicos", + + "create.ponder.empty_blaze_burner.header": "Usar quemadores de blaze vacíos", + "create.ponder.empty_blaze_burner.text_1": "Haz clic derecho en un blaze con el quemador vacío para capturarlo", + "create.ponder.empty_blaze_burner.text_2": "Alternativamente, los blaze pueden ser recogidos de sus spawners directamente", + "create.ponder.empty_blaze_burner.text_3": "Ahora tienes una fuente de calor ideal para varias máquinas", + "create.ponder.empty_blaze_burner.text_4": "Por motivos estéticos, los quemadores de blaze vacíos también se pueden encender con pedernal y acero", + "create.ponder.empty_blaze_burner.text_5": "Sin embargo, no son adecuados para la calefacción industrial", + + "create.ponder.encased_fluid_pipe.header": "Revestir tuberías de fluídos", + "create.ponder.encased_fluid_pipe.text_1": "Copper Casing can be used to decorate Fluid Pipes", + "create.ponder.encased_fluid_pipe.text_2": "Aside from being conceiled, Encased Pipes are locked into their connectivity state", + "create.ponder.encased_fluid_pipe.text_3": "It will no longer react to any neighbouring blocks being added or removed", + + "create.ponder.fan_direction.header": "El flujo de aire de los ventiladores revestidos", + "create.ponder.fan_direction.text_1": "Los ventiladores revestidos utilizan la fuerza rotacional para crear una corriente de aire", + "create.ponder.fan_direction.text_2": "La fuerza y la dirección del flujo dependen de la fuerza rotacional suministrada", + + "create.ponder.fan_processing.header": "Procesar objetos mediante ventiladores revestidos", + "create.ponder.fan_processing.text_1": "Al pasar por lava, el flujo de aire se calienta", + "create.ponder.fan_processing.text_2": "Los objetos capturados en la zona serán fundidos", + "create.ponder.fan_processing.text_3": "Los artículos de comida arrojados aquí serán incinerados", + "create.ponder.fan_processing.text_4": "En su lugar, se debería utilizar una instalación de ahumado, usando fuego", + "create.ponder.fan_processing.text_5": "Los flujos de aire que pasan por el agua crean una instalación de lavado", + "create.ponder.fan_processing.text_6": "Se puede hacer un nuevo e interesante procesamiento con él", + "create.ponder.fan_processing.text_7": "La velocidad del ventilador NO afecta a la velocidad de procesamiento, sólo a su rango", + "create.ponder.fan_processing.text_8": "El procesamiento del ventilador también puede aplicarse a los objetos de los depósitos y las correas", + + "create.ponder.fan_source.header": "Generar fuerza rotacional mediante ventiladores revestidos", + "create.ponder.fan_source.text_1": "Los ventiladores orientados hacia una fuente de calor pueden proporcionar fuerza rotacional", + "create.ponder.fan_source.text_2": "Cuando se les da una señal de redstone, los ventiladores comenzarán a proporcionar fuerza", + + "create.ponder.fluid_pipe_flow.header": "Transportar fluidos mediante tuberías de cobre", + "create.ponder.fluid_pipe_flow.text_1": "Fluid Pipes can connect two or more fluid sources and targets", + "create.ponder.fluid_pipe_flow.text_2": "Using a wrench, a straight pipe segment can be given a window", + "create.ponder.fluid_pipe_flow.text_3": "Windowed pipes will not connect to any other adjacent pipe segments", + "create.ponder.fluid_pipe_flow.text_4": "Powered by Mechanical Pumps, the Pipes can transport Fluids", + "create.ponder.fluid_pipe_flow.text_5": "No fluid is being extracted at first", + "create.ponder.fluid_pipe_flow.text_6": "Once the flow connects them, the endpoints gradually transfer their contents", + "create.ponder.fluid_pipe_flow.text_7": "Thus, the Pipe blocks themselves never 'physically' contain any fluid", + + "create.ponder.fluid_pipe_interaction.header": "Drenaje y llenado de contenedores de fluidos", + "create.ponder.fluid_pipe_interaction.text_1": "Endpoints of a pipe network can interact with a variety of blocks", + "create.ponder.fluid_pipe_interaction.text_2": "Any block with fluid storage capabilities can be filled or drained", + "create.ponder.fluid_pipe_interaction.text_3": "Source blocks right in front of an open end can be picked up...", + "create.ponder.fluid_pipe_interaction.text_4": "...while spilling into empty spaces can create fluid sources", + "create.ponder.fluid_pipe_interaction.text_5": "Pipes can also extract fluids from a handful of other blocks directly", + + "create.ponder.fluid_tank_sizes.header": "Dimensiones de un depósito de fluidos", + "create.ponder.fluid_tank_sizes.text_1": "Fluid Tanks can be combined to increase the total capacity", + "create.ponder.fluid_tank_sizes.text_2": "Their base square can be up to 3 blocks wide...", + "create.ponder.fluid_tank_sizes.text_3": "...and grow in height by more than 30 additional layers", + "create.ponder.fluid_tank_sizes.text_4": "Using a Wrench, a tanks' window can be toggled", + + "create.ponder.fluid_tank_storage.header": "Almacenar fluidos en depósitos de fluidos", + "create.ponder.fluid_tank_storage.text_1": "Fluid Tanks can be used to store large amounts of fluid", + "create.ponder.fluid_tank_storage.text_2": "Pipe networks can push and pull fluids from any side", + "create.ponder.fluid_tank_storage.text_3": "The contained fluid can be measured by a Comparator", + "create.ponder.fluid_tank_storage.text_4": "However, in Survival Mode Fluids cannot be added or taken manually", + "create.ponder.fluid_tank_storage.text_5": "You can use Basins, Item Drains and Spouts to drain or fill fluid containing items", + + "create.ponder.flywheel.header": "Generar fuerza rotacional con la rueda de inercia", + "create.ponder.flywheel.text_1": "Las ruedas de inercia son necesarias para generar fuerza rotacional con el motor de horno", + "create.ponder.flywheel.text_2": "La fuerza rotacional proporcionada tiene una capacidad de estrés muy grande", + "create.ponder.flywheel.text_3": "El uso de un alto horno duplicará la eficiencia del motor", + + "create.ponder.funnel_compat.header": "Compatibilidades con el embudo", + "create.ponder.funnel_compat.text_1": "Los embudos deberían interactuar bien con un puñado de otros componentes", + "create.ponder.funnel_compat.text_2": "Sierras verticales", + "create.ponder.funnel_compat.text_3": "Depósitos", + "create.ponder.funnel_compat.text_4": "Drenadores de objetos", + + "create.ponder.funnel_direction.header": "Dirección de la transferencia", + "create.ponder.funnel_direction.text_1": "Colocado normalmente, extrae objetos del inventario", + "create.ponder.funnel_direction.text_2": "Colocado mientras pulsa [Mayús izdo.], pone objetos en el inventario", + "create.ponder.funnel_direction.text_3": "Usando una llave inglesa, el embudo puede ser volteado después de su colocación", + "create.ponder.funnel_direction.text_4": "Se aplicarán las mismas reglas para la mayoría de las orientaciones", + "create.ponder.funnel_direction.text_5": "Los embudos en las correas extraerán/insertarán dependiendo de su dirección de movimiento", + + "create.ponder.funnel_intro.header": "Usar embudos", + "create.ponder.funnel_intro.text_1": "Los embudos son ideales para transferir objetos desde y hacia los inventarios", + + "create.ponder.funnel_redstone.header": "Embudos alimentados con redstone", + "create.ponder.funnel_redstone.text_1": "La energía de redstone impedirá la actuación de cualquier embudo", + + "create.ponder.funnel_transfer.header": "Transferencia directa", + "create.ponder.funnel_transfer.text_1": "Los embudos no pueden transferir nunca entre inventarios cerrados directamente", + "create.ponder.funnel_transfer.text_2": "Los ductos o los ductos inteligentes podrían ser más adecuados para estos fines", + "create.ponder.funnel_transfer.text_3": "Lo mismo se aplica para el movimiento horizontal. Una correa mecánica debería ayudar aquí", + + "create.ponder.furnace_engine.header": "Generar fuerza rotacional con el motor de horno", + "create.ponder.furnace_engine.text_1": "Los motores de horno generan fuerza rotacional mientras su horno adjunto está funcionando", + "create.ponder.furnace_engine.text_2": "La fuerza rotacional proporcionada tiene una capacidad de estrés muy grande", + "create.ponder.furnace_engine.text_3": "El uso de un alto horno duplicará la eficiencia del motor", + + "create.ponder.gantry_carriage.header": "Usar carros de grúa", + "create.ponder.gantry_carriage.text_1": "Los carros de grúa pueden montarse y deslizarse a lo largo de un eje de grúa", + "create.ponder.gantry_carriage.text_2": "Las instalaciones de grúa pueden mover bloques adjuntos", + + "create.ponder.gantry_cascaded.header": "Grúas en cascada", + "create.ponder.gantry_cascaded.text_1": "Los ejes de grúas se unen a un carro de grúa sin necesidad de pegamento", + "create.ponder.gantry_cascaded.text_2": "Lo mismo se aplica a los carros de grúa en los ejes de grúas desplazados", + "create.ponder.gantry_cascaded.text_3": "Así, un sistema de grúas puede estar en cascada para cubrir múltiples ejes de movimiento", + + "create.ponder.gantry_direction.header": "Dirección del movimiento de la grúa", + "create.ponder.gantry_direction.text_1": "Los ejes de grúa pueden tener orientaciones opuestas", + "create.ponder.gantry_direction.text_2": "La dirección de movimiento de los carros de grúa depende de la orientación de sus ejes", + "create.ponder.gantry_direction.text_3": "...así como de su sentido de rotación", + "create.ponder.gantry_direction.text_4": "Se aplican las mismas reglas para la rotación propagada", + + "create.ponder.gantry_redstone.header": "Propagación de la potencia de la grúa", + "create.ponder.gantry_redstone.text_1": "Los ejes de grúa alimentados con redstone dejan de mover sus carros", + "create.ponder.gantry_redstone.text_2": "En su lugar, su fuerza rotacional se transmite al eje de salida de los carros", + + "create.ponder.gantry_shaft.header": "Usar ejes de grúa", + "create.ponder.gantry_shaft.text_1": "Los ejes de grúa forman la base de una instalación de grúas. Los carros adjuntos se moverán a lo largo de ellos", + "create.ponder.gantry_shaft.text_2": "Las instalaciones de grúas pueden mover los bloques adjuntos", + + "create.ponder.gearbox.header": "Transmitir fuerza rotacional mediante cajas de transmisión", + "create.ponder.gearbox.text_1": "Saltar entre ejes de rotación puede volverse voluminoso rápidamente", + "create.ponder.gearbox.text_2": "Una caja de transmisión es el equivalente más compacto de esta configuración", + "create.ponder.gearbox.text_3": "Los ejes giran en las direcciones reflejadas...", + "create.ponder.gearbox.text_4": "...esto quiere decir que las conexiones rectas se invierten", + + "create.ponder.gearshift.header": "Controlar la dirección rotacional mediante una caja de cambios", + "create.ponder.gearshift.text_1": "La caja de cambios transmitirá la rotación en línea recta", + "create.ponder.gearshift.text_2": "Cuando es alimentada con redstone, invierte la transmisión", + + "create.ponder.hand_crank.header": "Generar fuerza rotacional mediante manivelas", + "create.ponder.hand_crank.text_1": "Las manivelas pueden ser utilizadas para aplicar fuerza rotacional manualmente", + "create.ponder.hand_crank.text_2": "Mantén pulsado clic derecho para girar en sentido antihorario", + "create.ponder.hand_crank.text_3": "Su velocidad de transmisión es relativamente alta", + "create.ponder.hand_crank.text_4": "[Mayús izdo.] + clic derecho pulsado para girar en sentido horario", + + "create.ponder.hose_pulley.header": "Llenado y vaciado de fuentes mediante poleas de manguera", + "create.ponder.hose_pulley.text_1": "Hose Pulleys can be used to fill or drain large bodies of Fluid", + "create.ponder.hose_pulley.text_2": "With the Kinetic Input, the height of the pulleys' hose can be controlled", + "create.ponder.hose_pulley.text_3": "The Pulley retracts while the input rotation is inverted", + "create.ponder.hose_pulley.text_4": "On the opposite side, pipes can be connected", + "create.ponder.hose_pulley.text_5": "Attached pipe networks can either provide fluid to the hose...", + "create.ponder.hose_pulley.text_6": "...or pull from it, draining the pool instead", + "create.ponder.hose_pulley.text_7": "Fill and Drain speed of the pulley depends entirely on the fluid networks' throughput", + + "create.ponder.hose_pulley_infinite.header": "Llenado y drenaje pasivo de grandes masas de fluido", + "create.ponder.hose_pulley_infinite.text_1": "When deploying the Hose Pulley into a large enough ocean...", + "create.ponder.hose_pulley_infinite.text_2": "It will provide/dispose fluids without affecting the source", + "create.ponder.hose_pulley_infinite.text_3": "Pipe networks can limitlessly take fluids from/to such pulleys", + + "create.ponder.hose_pulley_level.header": "Nivel de llenado y vaciado de las poleas de las mangueras", + "create.ponder.hose_pulley_level.text_1": "While fully retracted, the Hose Pulley cannot operate", + "create.ponder.hose_pulley_level.text_2": "Draining runs from top to bottom", + "create.ponder.hose_pulley_level.text_3": "The surface level will end up just below where the hose ends", + "create.ponder.hose_pulley_level.text_4": "Filling runs from bottom to top", + "create.ponder.hose_pulley_level.text_5": "The filled pool will not grow beyond the layer above the hose end", + + "create.ponder.item_drain.header": "Vaciar contenedores de fluidos mediante drenajes de objetos", + "create.ponder.item_drain.text_1": "Item Drains can extract fluids from items", + "create.ponder.item_drain.text_2": "Right-click it to pour fluids from your held item into it", + "create.ponder.item_drain.text_3": "When items are inserted from the side...", + "create.ponder.item_drain.text_4": "...they roll across, emptying out their contained fluid", + "create.ponder.item_drain.text_5": "Pipe Networks can now pull the fluid from the drains' internal buffer", + + "create.ponder.large_cogwheel.header": "Transmitir fuerza rotacional mediante engranajes grandes", + "create.ponder.large_cogwheel.text_1": "Los engranajes grandes pueden conectarse entre sí en ángulo recto", + "create.ponder.large_cogwheel.text_2": "Ayudarán a transmitir la velocidad transportada a otros ejes de rotación.", + + "create.ponder.linear_chassis_attachment.header": "Fijar bloques mediante el chasis lineal", + "create.ponder.linear_chassis_attachment.text_1": "Las caras abiertas de un chasis lineal pueden hacerse pegajosas", + "create.ponder.linear_chassis_attachment.text_2": "Haz clic de nuevo para que se pegue el lado opuesto", + "create.ponder.linear_chassis_attachment.text_3": "[Mayús izdo.] + clic derecho con la mano vacía para eliminar el pegamento", + "create.ponder.linear_chassis_attachment.text_4": "Las caras pegadas del chasis lineal fijarán una línea de bloques delante de él", + "create.ponder.linear_chassis_attachment.text_5": "Utilizando una llave inglesa, se puede especificar un rango preciso", + "create.ponder.linear_chassis_attachment.text_6": "Manteniendo pulsada la tecla [Ctrl] y usando la rueda central del ratón, se ajusta el rango de todos los bloques de chasis adjuntos", + "create.ponder.linear_chassis_attachment.text_7": "Para fijar los bloques a cualquier otro lado es necesario utilizar pegamento", + "create.ponder.linear_chassis_attachment.text_8": "Utilizando esta mecánica, las estructuras de cualquier forma pueden moverse como un artilugio", + + "create.ponder.linear_chassis_group.header": "Mover chasis lineales en grupos", + "create.ponder.linear_chassis_group.text_1": "Los chasis lineales se conectan a los bloques de chasis idénticos que se encuentren a su lado", + "create.ponder.linear_chassis_group.text_2": "Cuando uno es movido por un artilugio, los otros son arrastrados con él", + "create.ponder.linear_chassis_group.text_3": "Los chasis de otro tipo u orientados en otra dirección no se fijan", + + "create.ponder.mechanical_arm.header": "Configurar los brazos mecánicos", + "create.ponder.mechanical_arm.text_1": "A los brazos mecánicos hay que asignarles sus entradas y salidas antes de colocarlos", + "create.ponder.mechanical_arm.text_2": "Clic derecho en los inventarios mientras mantiene el brazo mecánico para asignarlos como objetivos", + "create.ponder.mechanical_arm.text_3": "Clic derecho denuevo para alternar entre la entrada (azul) y la salida (naranja)", + "create.ponder.mechanical_arm.text_4": "Clic izquierdo en los componentes para eliminar su selección", + "create.ponder.mechanical_arm.text_5": "Una vez colocado, el brazo mecánico apuntará a los bloques seleccionados previamente", + "create.ponder.mechanical_arm.text_6": "Pueden tener cualquier cantidad de entradas y salidas dentro de su rango", + "create.ponder.mechanical_arm.text_7": "Sin embargo, no se puede interactuar directamente con todos los tipos de inventario", + "create.ponder.mechanical_arm.text_8": "Los embudos y depósitos pueden ayudar a salvar esa distancia", + + "create.ponder.mechanical_arm_filtering.header": "Filtrar salidas del brazo mecánico", + "create.ponder.mechanical_arm_filtering.text_1": "Entradas", + "create.ponder.mechanical_arm_filtering.text_2": "Salidas", + "create.ponder.mechanical_arm_filtering.text_3": "A veces es conveniente restringir los objetivos del brazo mecánico haciendo coincidir un filtro", + "create.ponder.mechanical_arm_filtering.text_4": "Por sí mismos no ofrecen ninguna opción de filtrado", + "create.ponder.mechanical_arm_filtering.text_5": "Sin embargo, los embudos de latón como objetivos comunican su propio filtro al brazo", + "create.ponder.mechanical_arm_filtering.text_6": "El brazo mecánico es lo suficientemente inteligente como para no recoger objetos que no podría distribuir", + + "create.ponder.mechanical_arm_modes.header": "Modos de distribución del brazo mecánico", + "create.ponder.mechanical_arm_modes.text_1": "Entradas", + "create.ponder.mechanical_arm_modes.text_2": "Salidas", + "create.ponder.mechanical_arm_modes.text_3": "Siempre que un brazo tenga que elegir entre varias salidas válidas...", + "create.ponder.mechanical_arm_modes.text_4": "...funcionará según su configuración", + "create.ponder.mechanical_arm_modes.text_5": "Usando la rueda del ratón con una llave inglesa te permitirá configurarlo", + "create.ponder.mechanical_arm_modes.text_6": "El modo Round Robin simplemente hace un ciclo a través de todas las salidas que están disponibles", + "create.ponder.mechanical_arm_modes.text_7": "Si una salida no puede admitir más objetos, se omitirá", + "create.ponder.mechanical_arm_modes.text_8": "El modo Round Robin forzado nunca omitirá las salidas, sino que esperará a que estén libres", + "create.ponder.mechanical_arm_modes.text_9": "Preferir el primero da prioridad a las salidas seleccionadas anteriormente al configurar este brazo", + + "create.ponder.mechanical_arm_redstone.header": "Controlar brazos mecánicos con redstone", + "create.ponder.mechanical_arm_redstone.text_1": "Cuando se alimentan con redstone, los brazos mecánicos no se activan", + "create.ponder.mechanical_arm_redstone.text_2": "Antes de detenerse, terminará los ciclos iniciados", + "create.ponder.mechanical_arm_redstone.text_3": "Así, un pulso negativo puede utilizarse para activar exactamente un ciclo de activación", + + "create.ponder.mechanical_bearing.header": "Mover estructuras mediante el rodamiento mecánico", + "create.ponder.mechanical_bearing.text_1": "Los rodamientos mecánicos se fijan al bloque que tienen delante", + "create.ponder.mechanical_bearing.text_2": "Al recibir fuerza rotacional, la ensamblará en un artilugio giratorio", + + "create.ponder.mechanical_crafter.header": "Configurar ensambladores mecánicos", + "create.ponder.mechanical_crafter.text_1": "Se puede utilizar una serie de ensambladores mecánicos para automatizar cualquier receta de elaboración.", + "create.ponder.mechanical_crafter.text_2": "Usando una llave inglesa, puedes establecer los caminos de los ensambladores ", + "create.ponder.mechanical_crafter.text_3": "Para que la configuración sea válida, todos los caminos tienen que converger en una salida, en cualquiera de los lados", + "create.ponder.mechanical_crafter.text_4": "Los puertos de salida de objetos se colocarán en un inventario a la salida", + "create.ponder.mechanical_crafter.text_5": "Los ensambladores mecánicos requieren fuerza rotacional para funcionar", + "create.ponder.mechanical_crafter.text_6": "Haga clic derecho en la parte delantera para insertar objetos manualmente", + "create.ponder.mechanical_crafter.text_7": "Una vez que cada ranura de una ruta contenga un objeto, comenzará el proceso de elaboración", + "create.ponder.mechanical_crafter.text_8": "Para las recetas que no ocupen totalmente la instalación del ensamblador, se puede forzar el arranque utilizando un pulso de redstone", + + "create.ponder.mechanical_crafter_connect.header": "Conectar inventarios a los ensambladores mecánicos", + "create.ponder.mechanical_crafter_connect.text_1": "Los objetos pueden ser insertados a los ensambladores mecánicos automáticamente", + "create.ponder.mechanical_crafter_connect.text_2": "Utilizando la llave inglesa a sus espaldas, las entradas pueden combinarse", + "create.ponder.mechanical_crafter_connect.text_3": "Ahora se puede acceder a todos los ensambladores mecánicos conectados por la misma ubicación de entrada", + + "create.ponder.mechanical_crafter_covers.header": "Cubrir las ranuras de los ensambladores mecánicos", + "create.ponder.mechanical_crafter_covers.text_1": "Algunas recetas requerirán ensambladores mecánicos adicionales para salvar las brechas en el camino", + "create.ponder.mechanical_crafter_covers.text_2": "Utilizando las tapas de ranuras del ensamblador mecánico, pueden actuar como una ranura vacía a su disposición", + "create.ponder.mechanical_crafter_covers.text_3": "Las entradas compartidas creadas con la llave inglesa en la parte posterior también pueden llegar a través de los ensambladores revestidos", + + "create.ponder.mechanical_drill.header": "Romper bloques con el taladro mecánico", + "create.ponder.mechanical_drill.text_1": "Cuando se le aplica fuerza rotacional, el taladro mecánico rompe los bloques que tiene delante.", + "create.ponder.mechanical_drill.text_2": "Su velocidad de trabajo depende de la fuerza rotacional suministrada", + + "create.ponder.mechanical_drill_contraption.header": "Usar taladros mecánicos en artilugios", + "create.ponder.mechanical_drill_contraption.text_1": "Siempre que los taladros mecánicos se muevan como parte de un artilugio animado...", + "create.ponder.mechanical_drill_contraption.text_2": "...romperán los bloques por los que artilugio los hace pasar", + + "create.ponder.mechanical_harvester.header": "Utilizar cosechadoras mecánicas en artilugios", + "create.ponder.mechanical_harvester.text_1": "Siempre que las cosechadoras mecánicas se muevan como parte de un artilugio animado...", + "create.ponder.mechanical_harvester.text_2": "...recogerán y repondrán los cultivos maduros en su camino", + + "create.ponder.mechanical_mixer.header": "Procesar objetos con la mezcladora mecánica", + "create.ponder.mechanical_mixer.text_1": "Con una mezcladora mecánica y una cuenca, se pueden automatizar algunas recetas", + "create.ponder.mechanical_mixer.text_2": "Las recetas disponibles incluyen cualquier receta de elaboración amorfa, además de un par de recetas adicionales", + "create.ponder.mechanical_mixer.text_3": "Algunas de esas recetas pueden requerir el calor de un quemador de blaze", + "create.ponder.mechanical_mixer.text_4": "La ranura para filtros se puede utilizar en caso de que dos recetas sean conflictivas.", + + "create.ponder.mechanical_piston.header": "Mover estructuras mediante pistones mecánicos", + "create.ponder.mechanical_piston.text_1": "Los pistones mecánicos pueden mover los bloques que tienen delante", + "create.ponder.mechanical_piston.text_2": "La velocidad y la dirección del movimiento dependen de la fuerza rotacional suministrada", + "create.ponder.mechanical_piston.text_3": "Los pistones mecánicos pegajosos pueden tirar de los bloques unidos hacia atrás", + + "create.ponder.mechanical_piston_modes.header": "Modos de movimiento del pistón mecánico", + "create.ponder.mechanical_piston_modes.text_1": "Cuando los pistones mecánicos dejan de moverse, la estructura movida vuelve a los bloques", + "create.ponder.mechanical_piston_modes.text_2": "Puede configurarse para que no vuelva nunca a los bloques sólidos, o sólo en la ubicación en la que comenzó", + + "create.ponder.mechanical_plough.header": "Utilizar arados mecánicos en los artilugios", + "create.ponder.mechanical_plough.text_1": "Cuando los arados mecánicos se mueven como parte de un artilugio animado...", + "create.ponder.mechanical_plough.text_2": "...romperán los bloques sin un hitbox de colisión sólido", + "create.ponder.mechanical_plough.text_3": "Además, pueden crear tierras de cultivo", + "create.ponder.mechanical_plough.text_4": "...también pueden lanzar entidades sin dañarlas", + + "create.ponder.mechanical_press.header": "Procesar objetos con la prensa mecánica", + "create.ponder.mechanical_press.text_1": "La prensa mecánica puede procesar los objetos proporcionados por debajo de ella", + "create.ponder.mechanical_press.text_2": "Los objetos de entrada pueden soltarse o colocarse en un depósito bajo la prensa", + "create.ponder.mechanical_press.text_3": "Cuando los objetos se proporcionan en una 'cinta'...", + "create.ponder.mechanical_press.text_4": "...la prensa mecánica los retendrá y procesará automáticamente", + + "create.ponder.mechanical_press_compacting.header": "Compactar objetos con la prensa mecánica", + "create.ponder.mechanical_press_compacting.text_1": "Al presionar los objetos que se encuentran en una cuenca, éstos se compactan.", + "create.ponder.mechanical_press_compacting.text_2": "La compactación incluye cualquier receta de elaboración de 2x2 o 3x3 rellena, además de un par extra", + "create.ponder.mechanical_press_compacting.text_3": "Algunas de esas recetas pueden requerir el calor de un quemador de blaze", + "create.ponder.mechanical_press_compacting.text_4": "La ranura para filtros se puede utilizar en caso de que dos recetas sean conflictivas.", + + "create.ponder.mechanical_pump_flow.header": "Transportar fluidos mediante bombas mecánicas", + "create.ponder.mechanical_pump_flow.text_1": "Mechanical Pumps govern the flow of their attached pipe networks", + "create.ponder.mechanical_pump_flow.text_2": "When powered, their arrow indicates the direction of flow", + "create.ponder.mechanical_pump_flow.text_3": "The network behind is now pulling fluids...", + "create.ponder.mechanical_pump_flow.text_4": "...while the network in front is transferring it outward", + "create.ponder.mechanical_pump_flow.text_5": "Reversing the input rotation reverses the direction of flow", + "create.ponder.mechanical_pump_flow.text_6": "Use a Wrench to reverse the orientation of pumps manually", + + "create.ponder.mechanical_pump_speed.header": "Rendimiento de las bombas mecánicas", + "create.ponder.mechanical_pump_speed.text_1": "Regardless of speed, Mechanical Pumps affect pipes connected up to 16 blocks away", + "create.ponder.mechanical_pump_speed.text_2": "Speeding up the input rotation changes the speed of flow propagation...", + "create.ponder.mechanical_pump_speed.text_3": "...aswell as how quickly fluids are transferred", + "create.ponder.mechanical_pump_speed.text_4": "Pumps can combine their throughputs within shared pipe networks", + "create.ponder.mechanical_pump_speed.text_5": "Alternating their orientation can help align their flow directions", + + "create.ponder.mechanical_saw_breaker.header": "Cortar árboles con la sierra mecánica", + "create.ponder.mechanical_saw_breaker.text_1": "Cuando se le da una fuerza rotacional, la sierra mecánica cortará los árboles que estén directamente frente a ella", + "create.ponder.mechanical_saw_breaker.text_2": "Para poder cortar el árbol por completo, la sierra tiene que romper el último bloque que lo une al suelo", + + "create.ponder.mechanical_saw_contraption.header": "Utilizar sierras mecánicas en artilugios", + "create.ponder.mechanical_saw_contraption.text_1": "Cuando las sierras mecánicas se mueven como parte de un artilugio animado...", + "create.ponder.mechanical_saw_contraption.text_2": "...cortarán cualquier árbol con el que el artilugio se tope", + + "create.ponder.mechanical_saw_processing.header": "Procesar objetos en la sierra mecánica", + "create.ponder.mechanical_saw_processing.text_1": "Las sierras mecánicas orientadas hacia arriba pueden procesar una variedad de objetos", + "create.ponder.mechanical_saw_processing.text_2": "El objeto procesado siempre se mueve en contra de la fuerza rotacional de la sierra", + "create.ponder.mechanical_saw_processing.text_3": "Las sierras mecánicas pueden trabajar en línea con las correas mecánicas", + "create.ponder.mechanical_saw_processing.text_4": "Cuando un ingrediente tiene varios resultados posibles, la ranura para filtros puede especificarlo", + "create.ponder.mechanical_saw_processing.text_5": "Sin filtro, al contrario, la sierra mecánica pasaría por todos los resultados", + + "create.ponder.millstone.header": "Procesar objetos en la piedra de molino", + "create.ponder.millstone.text_1": "Las piedras de molino procesan los objetos mediante la molienda", + "create.ponder.millstone.text_2": "Se pueden accionar lateralmente mediante engranajes...", + "create.ponder.millstone.text_3": "... y tirar o insertar objetos en la parte superior", + "create.ponder.millstone.text_4": "Después de un tiempo, el resultado se puede obtener usando el clic derecho del ratón", + "create.ponder.millstone.text_5": "Las salidas también pueden extraerse mediante la automatización", + + "create.ponder.nixie_tube.header": "Usar los tubos Nixie", + "create.ponder.nixie_tube.text_1": "Cuando son alimentados con redstone, los tubos nixie mostrarán la fuerza de las señales de redstone", + "create.ponder.nixie_tube.text_2": "Con las etiquetas editadas en un yunque, pueden mostar un texto personalizado", "create.ponder.nixie_tube.text_3": "UNLOCALIZED: Right-Click with Dye to change their display colour", - "create.ponder.piston_pole.header": "UNLOCALIZED: Piston Extension Poles", - "create.ponder.piston_pole.text_1": "UNLOCALIZED: Without attached Poles, a Mechanical Piston cannot move", - "create.ponder.piston_pole.text_2": "UNLOCALIZED: The Length of pole added at its back determines the Extension Range", + "create.ponder.piston_pole.header": "Pértigas de extensión de pistones", + "create.ponder.piston_pole.text_1": "Sin las pértigas de extensión unidas, un pistón mecánico no puede moverse", + "create.ponder.piston_pole.text_2": "La longitud de la pértiga añadida en su parte posterior determina el rango de alcance", - "create.ponder.portable_fluid_interface.header": "UNLOCALIZED: Contraption Fluid Exchange", - "create.ponder.portable_fluid_interface.text_1": "UNLOCALIZED: Fluid Tanks on moving contraptions cannot be accessed by any pipes", - "create.ponder.portable_fluid_interface.text_2": "UNLOCALIZED: This component can interact with fluid tanks without the need to stop the contraption", - "create.ponder.portable_fluid_interface.text_3": "UNLOCALIZED: Place a second one with a gap of 1 or 2 blocks inbetween", - "create.ponder.portable_fluid_interface.text_4": "UNLOCALIZED: Whenever they pass by each other, they will engage in a connection", - "create.ponder.portable_fluid_interface.text_5": "UNLOCALIZED: While engaged, the stationary interface will represent ALL Tanks on the contraption", - "create.ponder.portable_fluid_interface.text_6": "UNLOCALIZED: Fluid can now be inserted...", - "create.ponder.portable_fluid_interface.text_7": "UNLOCALIZED: ...or extracted from the contraption", - "create.ponder.portable_fluid_interface.text_8": "UNLOCALIZED: After no contents have been exchanged for a while, the contraption will continue on its way", + "create.ponder.portable_fluid_interface.header": "Interfaz de fluidos portátil", + "create.ponder.portable_fluid_interface.text_1": "Fluid Tanks on moving contraptions cannot be accessed by any pipes", + "create.ponder.portable_fluid_interface.text_2": "This component can interact with fluid tanks without the need to stop the contraption", + "create.ponder.portable_fluid_interface.text_3": "Place a second one with a gap of 1 or 2 blocks inbetween", + "create.ponder.portable_fluid_interface.text_4": "Whenever they pass by each other, they will engage in a connection", + "create.ponder.portable_fluid_interface.text_5": "While engaged, the stationary interface will represent ALL Tanks on the contraption", + "create.ponder.portable_fluid_interface.text_6": "Fluid can now be inserted...", + "create.ponder.portable_fluid_interface.text_7": "...or extracted from the contraption", + "create.ponder.portable_fluid_interface.text_8": "After no contents have been exchanged for a while, the contraption will continue on its way", - "create.ponder.portable_storage_interface.header": "UNLOCALIZED: Contraption Storage Exchange", - "create.ponder.portable_storage_interface.text_1": "UNLOCALIZED: Inventories on moving contraptions cannot be accessed by players.", - "create.ponder.portable_storage_interface.text_2": "UNLOCALIZED: This component can interact with storage without the need to stop the contraption.", - "create.ponder.portable_storage_interface.text_3": "UNLOCALIZED: Place a second one with a gap of 1 or 2 blocks inbetween", - "create.ponder.portable_storage_interface.text_4": "UNLOCALIZED: Whenever they pass by each other, they will engage in a connection", - "create.ponder.portable_storage_interface.text_5": "UNLOCALIZED: While engaged, the stationary interface will represent ALL inventories on the contraption", - "create.ponder.portable_storage_interface.text_6": "UNLOCALIZED: Items can now be inserted...", - "create.ponder.portable_storage_interface.text_7": "UNLOCALIZED: ...or extracted from the contraption", - "create.ponder.portable_storage_interface.text_8": "UNLOCALIZED: After no items have been exchanged for a while, the contraption will continue on its way", + "create.ponder.portable_storage_interface.header": "Interfaz de almacenamiento portátil", + "create.ponder.portable_storage_interface.text_1": "Los jugadores no pueden acceder a los inventarios de los artilugios en movimiento.", + "create.ponder.portable_storage_interface.text_2": "Este componente puede interactuar con el almacenamiento sin necesidad de detener el artilugio.", + "create.ponder.portable_storage_interface.text_3": "Coloca una segunda unidad con un espacio de 1 o 2 bloques entre ellas", + "create.ponder.portable_storage_interface.text_4": "Cada vez que pasen por delante del otro, entablarán una conexión", + "create.ponder.portable_storage_interface.text_5": "Mientras esté conectada, la interfaz fija representará TODOS los inventarios del artilugio", + "create.ponder.portable_storage_interface.text_6": "Ahora pueden insertarse objetos...", + "create.ponder.portable_storage_interface.text_7": "...o extraerse", + "create.ponder.portable_storage_interface.text_8": "Cuando no se hayan intercambiado objetos durante un tiempo, el artilugio seguirá su camino", - "create.ponder.portable_storage_interface_redstone.header": "UNLOCALIZED: Redstone Control", - "create.ponder.portable_storage_interface_redstone.text_1": "UNLOCALIZED: Redstone power will prevent the stationary interface from engaging", + "create.ponder.portable_storage_interface_redstone.header": "Interfaz de almacenamiento portátil controlada por redstone", + "create.ponder.portable_storage_interface_redstone.text_1": "La energía de redstone impedirá que las interfaces de almacenamiento portátil se conecten", - "create.ponder.powered_latch.header": "UNLOCALIZED: Controlling signals using the Powered Latch", - "create.ponder.powered_latch.text_1": "UNLOCALIZED: Powered Latches are redstone controllable Levers", - "create.ponder.powered_latch.text_2": "UNLOCALIZED: Signals at the back switch it on", - "create.ponder.powered_latch.text_3": "UNLOCALIZED: Signals from the side switch it back off", - "create.ponder.powered_latch.text_4": "UNLOCALIZED: Powered latches can also be toggled manually", + "create.ponder.powered_latch.header": "Controlar señales mediante la palanca motorizada", + "create.ponder.powered_latch.text_1": "Las palancas motorizadas son palancas controlables por redstone", + "create.ponder.powered_latch.text_2": "Las señales en la parte trasera la encienden", + "create.ponder.powered_latch.text_3": "Las señales sobre un lateral la vuelven a apagar", + "create.ponder.powered_latch.text_4": "Las palancas motorizadas también se pueden accionar manualmente", - "create.ponder.powered_toggle_latch.header": "UNLOCALIZED: Controlling signals using the Powered Toggle Latch", - "create.ponder.powered_toggle_latch.text_1": "UNLOCALIZED: Powered Toggle Latches are redstone controllable Levers", - "create.ponder.powered_toggle_latch.text_2": "UNLOCALIZED: Signals at the back will toggle its state", - "create.ponder.powered_toggle_latch.text_3": "UNLOCALIZED: ...on and back off", - "create.ponder.powered_toggle_latch.text_4": "UNLOCALIZED: Powered toggle latches can also be toggled manually", + "create.ponder.powered_toggle_latch.header": "Controlar señales mediante la palanca de cierre motorizada", + "create.ponder.powered_toggle_latch.text_1": "Las palancas de cierre motorizadas son palancas controlables por redstone", + "create.ponder.powered_toggle_latch.text_2": "Las señales en la parte trasera cambiarán su estado...", + "create.ponder.powered_toggle_latch.text_3": "...encender y apagar", + "create.ponder.powered_toggle_latch.text_4": "Las palancas de cierre motorizadas también se pueden accionar manualmente", - "create.ponder.pulse_repeater.header": "UNLOCALIZED: Controlling signals using Pulse Repeaters", - "create.ponder.pulse_repeater.text_1": "UNLOCALIZED: Pulse Repeaters will shorten any redstone signal to a single pulse", + "create.ponder.pulse_repeater.header": "Controlar señales mediante repetidores de pulsos", + "create.ponder.pulse_repeater.text_1": "Los repetidores de pulsos acortan cualquier señal de redstone a un solo pulso", - "create.ponder.radial_chassis.header": "UNLOCALIZED: Attaching blocks using Radial Chassis", - "create.ponder.radial_chassis.text_1": "UNLOCALIZED: Radial Chassis connect to identical Chassis blocks in a row", - "create.ponder.radial_chassis.text_2": "UNLOCALIZED: When one is moved by a Contraption, the others are dragged with it", - "create.ponder.radial_chassis.text_3": "UNLOCALIZED: The side faces of a Radial Chassis can be made Sticky", - "create.ponder.radial_chassis.text_4": "UNLOCALIZED: Click again to make all other sides sticky", - "create.ponder.radial_chassis.text_5": "UNLOCALIZED: Sneak and Right-Click with an empty hand to remove the slime", - "create.ponder.radial_chassis.text_6": "UNLOCALIZED: Whenever a Block is next to a sticky face...", - "create.ponder.radial_chassis.text_7": "UNLOCALIZED: ...it will attach all reachable blocks within a radius on that layer", - "create.ponder.radial_chassis.text_8": "UNLOCALIZED: Using a Wrench, a precise Radius can be specified for this chassis", - "create.ponder.radial_chassis.text_9": "UNLOCALIZED: Blocks not reachable by any sticky face will not attach", + "create.ponder.radial_chassis.header": "Fijar bloques mediante chasis radiales", + "create.ponder.radial_chassis.text_1": "Los chasis radiales se conectan a bloques de chasis idénticos en una fila", + "create.ponder.radial_chassis.text_2": "Cuando uno es movido por un artilugio, los otros son arrastrados con él", + "create.ponder.radial_chassis.text_3": "Las caras laterales de un chasis radial pueden hacerse adhesivas", + "create.ponder.radial_chassis.text_4": "Haga clic de nuevo para que todos los demás lados sean pegajosos", + "create.ponder.radial_chassis.text_5": "[Mayús izdo.] + clic derecho con la mano vacía para eliminar el pegamento", + "create.ponder.radial_chassis.text_6": "Cada vez que un bloque está junto a una cara pegajosa...", + "create.ponder.radial_chassis.text_7": "...adjuntará todos los bloques alcanzables dentro de un radio en esa capa", + "create.ponder.radial_chassis.text_8": "Con una llave inglesa y usando la rueda de desplazamiento del ratón se puede especificar un radio preciso", + "create.ponder.radial_chassis.text_9": "Los bloques no alcanzables por ninguna cara adhesiva no se fijarán", - "create.ponder.redstone_contact.header": "UNLOCALIZED: Redstone Contacts", - "create.ponder.redstone_contact.text_1": "UNLOCALIZED: Redstone Contacts facing each other will emit a redstone signal", - "create.ponder.redstone_contact.text_2": "UNLOCALIZED: This still applies when one of them is part of a moving Contraption", + "create.ponder.redstone_contact.header": "Contactos de redstone", + "create.ponder.redstone_contact.text_1": "Los contactos de redstone enfrentados emitirán una señal de redstone", + "create.ponder.redstone_contact.text_2": "Esto sigue siendo válido cuando uno de ellos forma parte de un artilugio en movimiento", - "create.ponder.redstone_link.header": "UNLOCALIZED: Using Redstone Links", - "create.ponder.redstone_link.text_1": "UNLOCALIZED: Redstone Links can transmit redstone signals wirelessly", - "create.ponder.redstone_link.text_2": "UNLOCALIZED: Right-click while Sneaking to toggle receive mode", - "create.ponder.redstone_link.text_3": "UNLOCALIZED: A simple Right-click with a Wrench can do the same", - "create.ponder.redstone_link.text_4": "UNLOCALIZED: Receivers emit the redstone power of transmitters within 128 blocks", - "create.ponder.redstone_link.text_5": "UNLOCALIZED: Placing items in the two slots can specify a Frequency", - "create.ponder.redstone_link.text_6": "UNLOCALIZED: Only the links with matching Frequencies will communicate", + "create.ponder.redstone_link.header": "Usar los enlaces de redstone", + "create.ponder.redstone_link.text_1": "Los enlaces de redstone pueden transmitir señales redstone de forma inalámbrica", + "create.ponder.redstone_link.text_2": "[Mayús izdo.] + clic derecho para cambiar el modo de recepción", + "create.ponder.redstone_link.text_3": "Un simple clic derecho con una llave inglesa puede hacer lo mismo", + "create.ponder.redstone_link.text_4": "Los receptores emiten la potencia de redstone de los transmisores en 128 bloques", + "create.ponder.redstone_link.text_5": "Colocando objetos en las dos ranuras puede especificar una frecuencia", + "create.ponder.redstone_link.text_6": "Sólo se comunicarán los enlaces con frecuencias coincidentes", - "create.ponder.rope_pulley.header": "UNLOCALIZED: Moving Structures using Rope Pulleys", - "create.ponder.rope_pulley.text_1": "UNLOCALIZED: Rope Pulleys can move blocks vertically when given Rotational Force", - "create.ponder.rope_pulley.text_2": "UNLOCALIZED: Direction and Speed of movement depend on the Rotational Input", + "create.ponder.rope_pulley.header": "Mover estructuras con poleas de cuerda", + "create.ponder.rope_pulley.text_1": "Las poleas de cuerda pueden mover los bloques verticalmente cuando se les aplica una fuerza rotacional", + "create.ponder.rope_pulley.text_2": "La dirección y la velocidad del movimiento dependen de la fuerza rotacional suministrada", - "create.ponder.rope_pulley_attachment.header": "UNLOCALIZED: Moving Pulleys as part of a Contraption", - "create.ponder.rope_pulley_attachment.text_1": "UNLOCALIZED: Whenever Pulleys are themselves being moved by a Contraption...", - "create.ponder.rope_pulley_attachment.text_2": "UNLOCALIZED: ...its attached structure will be dragged with it", - "create.ponder.rope_pulley_attachment.text_3": "UNLOCALIZED: Mind that pulleys are only movable while stopped", + "create.ponder.rope_pulley_attachment.header": "Mover poleas como parte de un artilugio", + "create.ponder.rope_pulley_attachment.text_1": "Siempre que las poleas de cuerda sean movidas por un artilugio...", + "create.ponder.rope_pulley_attachment.text_2": "...su estructura adjunta será arrastrada con ella", + "create.ponder.rope_pulley_attachment.text_3": "Tenga en cuenta que las poleas de cuerda sólo se mueven cuando están paradas", - "create.ponder.rope_pulley_modes.header": "UNLOCALIZED: Movement Modes of the Rope Pulley", - "create.ponder.rope_pulley_modes.text_1": "UNLOCALIZED: Whenever Pulleys stop moving, the moved structure reverts to blocks", - "create.ponder.rope_pulley_modes.text_2": "UNLOCALIZED: It can be configured never to revert to solid blocks, or only at the location it started at", + "create.ponder.rope_pulley_modes.header": "Modos de movimiento de la polea de cuerda", + "create.ponder.rope_pulley_modes.text_1": "Cuando las poleas de cuerda dejan de moverse, la estructura movida vuelve a los bloques", + "create.ponder.rope_pulley_modes.text_2": "Puede configurarse para que no vuelva nunca a los bloques sólidos, o sólo en la ubicación en la que comenzó", - "create.ponder.rotation_speed_controller.header": "UNLOCALIZED: Using the Rotational Speed Controller", - "create.ponder.rotation_speed_controller.text_1": "UNLOCALIZED: Rot. Speed Controllers relay rotation from their axis to a Large Cogwheel above them", - "create.ponder.rotation_speed_controller.text_2": "UNLOCALIZED: Using the scroll input on its side, the conveyed speed can be configured", + "create.ponder.rotation_speed_controller.header": "Usar el controlador de velocidad rotacional", + "create.ponder.rotation_speed_controller.text_1": "Los controladores de velocidad rotacional transmiten la rotación de su eje a un engranaje grande situado encima.", + "create.ponder.rotation_speed_controller.text_2": "Utilizando la rueda de desplazamiento del ratón, puede configurarse la velocidad rotacional", - "create.ponder.sail.header": "UNLOCALIZED: Assembling Windmills using Sails", - "create.ponder.sail.text_1": "UNLOCALIZED: Sails are handy blocks to create Windmills with", - "create.ponder.sail.text_2": "UNLOCALIZED: They will attach to blocks and each other without the need of Super Glue or Chassis Blocks", - "create.ponder.sail.text_3": "UNLOCALIZED: Right-Click with Dye to paint them", - "create.ponder.sail.text_4": "UNLOCALIZED: Right-Click with Shears to turn them back into frames", + "create.ponder.sail.header": "Montar molinos de viento usando velas", + "create.ponder.sail.text_1": "Las velas son bloques muy útiles para crear molinos de viento", + "create.ponder.sail.text_2": "Se fijarán a los bloques y entre sí sin necesidad de pegamento o bloques de chasis", + "create.ponder.sail.text_3": "Clic derecho con un tinte para pintarlas", + "create.ponder.sail.text_4": "Clic derecho con una tijera para volver a convertirlas en marcos", - "create.ponder.sail_frame.header": "UNLOCALIZED: Assembling Windmills using Sail Frames", - "create.ponder.sail_frame.text_1": "UNLOCALIZED: Sail Frames are handy blocks to create Windmills with", - "create.ponder.sail_frame.text_2": "UNLOCALIZED: They will attach to blocks and each other without the need of Super Glue or Chassis Blocks", + "create.ponder.sail_frame.header": "Montar molinos de viento con marcos de vela", + "create.ponder.sail_frame.text_1": "Los marcos de vela son prácticos bloques para crear molinos de viento", + "create.ponder.sail_frame.text_2": "Se fijarán a los bloques y entre sí sin necesidad de pegamento o bloques de chasis", - "create.ponder.sequenced_gearshift.header": "UNLOCALIZED: Controlling Rotational Speed using Sequenced Gearshifts", - "create.ponder.sequenced_gearshift.text_1": "UNLOCALIZED: Seq. Gearshifts relay rotation by following a timed list of instructions", - "create.ponder.sequenced_gearshift.text_2": "UNLOCALIZED: Right-click it to open the Configuration UI", - "create.ponder.sequenced_gearshift.text_3": "UNLOCALIZED: Upon receiving a Redstone Signal, it will start running its configured sequence", - "create.ponder.sequenced_gearshift.text_4": "UNLOCALIZED: Once finished, it waits for the next Redstone Signal and starts over", - "create.ponder.sequenced_gearshift.text_5": "UNLOCALIZED: A redstone comparator can be used to read the current progress", + "create.ponder.sequenced_gearshift.header": "Controlar la velocidad de rotación mediante la caja de cambios secuenciales", + "create.ponder.sequenced_gearshift.text_1": "La caja de cambios secuencial retransmite la rotación siguiendo una lista cronometrada de instrucciones", + "create.ponder.sequenced_gearshift.text_2": "Haga clic con el botón derecho para abrir la interfaz de configuración", + "create.ponder.sequenced_gearshift.text_3": "Al recibir una señal de redstone, comenzará a ejecutar su secuencia configurada", + "create.ponder.sequenced_gearshift.text_4": "Una vez terminado, espera la siguiente señal de redstone y vuelve a empezar", + "create.ponder.sequenced_gearshift.text_5": "Se puede utilizar un comparador de redstone para leer el progreso actual", - "create.ponder.shaft.header": "UNLOCALIZED: Relaying rotational force using Shafts", - "create.ponder.shaft.text_1": "UNLOCALIZED: Shafts will relay rotation in a straight line.", + "create.ponder.shaft.header": "Transmitir fuerza rotacional mediante ejes", + "create.ponder.shaft.text_1": "Los ejes transmiten la rotación en línea recta.", - "create.ponder.shaft_casing.header": "UNLOCALIZED: Encasing Shafts", - "create.ponder.shaft_casing.text_1": "UNLOCALIZED: Brass or Andesite Casing can be used to decorate Shafts", + "create.ponder.shaft_casing.header": "Ejes revestidos", + "create.ponder.shaft_casing.text_1": "Puedes utilizar el revestidor de latón o de andesita para decorar tus ejes", - "create.ponder.smart_chute.header": "UNLOCALIZED: Filtering Items using Smart Chutes", - "create.ponder.smart_chute.text_1": "UNLOCALIZED: Smart Chutes are vertical chutes with additional control", - "create.ponder.smart_chute.text_2": "UNLOCALIZED: Items in the filter slot specify what exactly they can extract and transfer", - "create.ponder.smart_chute.text_3": "UNLOCALIZED: Use the Mouse Wheel to specify the extracted stack size", - "create.ponder.smart_chute.text_4": "UNLOCALIZED: Redstone power will prevent Smart Chutes from acting.", + "create.ponder.smart_chute.header": "Filtrar objetos mediante ductos inteligentes", + "create.ponder.smart_chute.text_1": "Los ductos inteligentes son ductos verticales con control adicional", + "create.ponder.smart_chute.text_2": "Los objetos en la ranura para filtros especifican lo que pueden extraer y transferir exactamente", + "create.ponder.smart_chute.text_3": "Usa la rueda del ratón para especificar el tamaño de la pila extraída", + "create.ponder.smart_chute.text_4": "La energía de redstone impedirá que funcionen.", - "create.ponder.smart_pipe.header": "UNLOCALIZED: Controlling Fluid flow using Smart Pipes", - "create.ponder.smart_pipe.text_1": "UNLOCALIZED: Smart pipes can help control flows by fluid type", - "create.ponder.smart_pipe.text_2": "UNLOCALIZED: When placed directly at the source, they can specify the type of fluid to extract", - "create.ponder.smart_pipe.text_3": "UNLOCALIZED: Simply Right-Click their filter slot with any item containing the desired fluid", - "create.ponder.smart_pipe.text_4": "UNLOCALIZED: When placed further down a pipe network, smart pipes will only let matching fluids continue", + "create.ponder.smart_pipe.header": "Controlar el flujo de fluidos mediante tuberías inteligentes", + "create.ponder.smart_pipe.text_1": "Smart pipes can help control flows by fluid type", + "create.ponder.smart_pipe.text_2": "When placed directly at the source, they can specify the type of fluid to extract", + "create.ponder.smart_pipe.text_3": "Simply Right-Click their filter slot with any item containing the desired fluid", + "create.ponder.smart_pipe.text_4": "When placed further down a pipe network, smart pipes will only let matching fluids continue", - "create.ponder.speedometer.header": "UNLOCALIZED: Monitoring Kinetic information using the Speedometer", - "create.ponder.speedometer.text_1": "UNLOCALIZED: The Speedometer displays the current Speed of the attached components", - "create.ponder.speedometer.text_2": "UNLOCALIZED: When wearing Engineers' Goggles, the player can get more detailed information from the Gauge", - "create.ponder.speedometer.text_3": "UNLOCALIZED: Comparators can emit analog Restone Signals relative to the Speedometer's measurements", + "create.ponder.speedometer.header": "Controlar la información cinética mediante el velocímetro", + "create.ponder.speedometer.text_1": "El velocímetro muestra la velocidad actual de los componentes conectados", + "create.ponder.speedometer.text_2": "Cuando se usan las gafas del constructor, el jugador puede obtener información más detallada del medidor", + "create.ponder.speedometer.text_3": "Los comparadores pueden emitir señales analógicas de redstone en relación con las mediciones del velocímetro", - "create.ponder.spout_filling.header": "UNLOCALIZED: Filling Items using a Spout", - "create.ponder.spout_filling.text_1": "UNLOCALIZED: The Spout can fill fluid holding items provided beneath it", - "create.ponder.spout_filling.text_2": "UNLOCALIZED: The content of a Spout cannot be accessed manually", - "create.ponder.spout_filling.text_3": "UNLOCALIZED: Instead, Pipes can be used to supply it with fluids", - "create.ponder.spout_filling.text_4": "UNLOCALIZED: The Input items can be placed on a Depot under the Spout", - "create.ponder.spout_filling.text_5": "UNLOCALIZED: When items are provided on a belt...", - "create.ponder.spout_filling.text_6": "UNLOCALIZED: The Spout will hold and process them automatically", + "create.ponder.spout_filling.header": "Llenar objetos con un surtidor", + "create.ponder.spout_filling.text_1": "The Spout can fill fluid holding items provided beneath it", + "create.ponder.spout_filling.text_2": "The content of a Spout cannot be accessed manually", + "create.ponder.spout_filling.text_3": "Instead, Pipes can be used to supply it with fluids", + "create.ponder.spout_filling.text_4": "The Input items can be placed on a Depot under the Spout", + "create.ponder.spout_filling.text_5": "When items are provided on a belt...", + "create.ponder.spout_filling.text_6": "The Spout will hold and process them automatically", - "create.ponder.stabilized_bearings.header": "UNLOCALIZED: Stabilized Contraptions", - "create.ponder.stabilized_bearings.text_1": "UNLOCALIZED: Whenever Mechanical Bearings are themselves part of a moving Structure..", - "create.ponder.stabilized_bearings.text_2": "UNLOCALIZED: ..they will attempt to keep themselves upright", - "create.ponder.stabilized_bearings.text_3": "UNLOCALIZED: Once again, the bearing will attach to the block in front of it", - "create.ponder.stabilized_bearings.text_4": "UNLOCALIZED: As a result, the entire sub-Contraption will stay upright", + "create.ponder.stabilized_bearings.header": "Estabilizar artilugios", + "create.ponder.stabilized_bearings.text_1": "Siempre que los rodamientos mecánicos formen parte de una estructura móvil...", + "create.ponder.stabilized_bearings.text_2": "...intentarán mantenerse derechos", + "create.ponder.stabilized_bearings.text_3": "Una vez más, el rodamiento se unirá al bloque de enfrente", + "create.ponder.stabilized_bearings.text_4": "Como resultado, todo el sub-artilugio se mantendrá en posición vertical", - "create.ponder.sticker.header": "UNLOCALIZED: Attaching blocks using the Sticker", - "create.ponder.sticker.text_1": "UNLOCALIZED: Stickers are ideal for Redstone-controlled block attachment", - "create.ponder.sticker.text_2": "UNLOCALIZED: Upon receiving a signal, it will toggle its state", - "create.ponder.sticker.text_3": "UNLOCALIZED: If it is now moved in a contraption, the block will move with it", - "create.ponder.sticker.text_4": "UNLOCALIZED: Toggled once again, the block is no longer attached", + "create.ponder.sticker.header": "Fijar bloques con stickers", + "create.ponder.sticker.text_1": "Los stickers son ideales para la fijación de bloques controlados por redstone", + "create.ponder.sticker.text_2": "Al recibir una señal, cambiarán su estado", + "create.ponder.sticker.text_3": "Si ahora se mueve en un artilugio, el bloque se moverá con él", + "create.ponder.sticker.text_4": "Si se vuelve a activar, el bloque dejará de estar fijado", - "create.ponder.stressometer.header": "UNLOCALIZED: Monitoring Kinetic information using the Stressometer", - "create.ponder.stressometer.text_1": "UNLOCALIZED: The Stressometer displays the current Stress Capacity of the attached kinetic network", - "create.ponder.stressometer.text_2": "UNLOCALIZED: When wearing Engineers' Goggles, the player can get more detailed information from the Gauge", - "create.ponder.stressometer.text_3": "UNLOCALIZED: Comparators can emit analog Restone Signals relative to the Stressometer's measurements", + "create.ponder.stressometer.header": "Supervisar la información cinética con el estresómetro", + "create.ponder.stressometer.text_1": "El estresómetro muestra la capacidad de estrés actual de la red cinética conectada", + "create.ponder.stressometer.text_2": "Cuando se usan las gafas del constructor, el jugador puede obtener información más detallada del medidor", + "create.ponder.stressometer.text_3": "Los comparadores pueden emitir señales analógicas de redstone en relación con las mediciones del estresómetro", - "create.ponder.super_glue.header": "UNLOCALIZED: Attaching blocks using Super Glue", - "create.ponder.super_glue.text_1": "UNLOCALIZED: Super Glue can be used between any two blocks", - "create.ponder.super_glue.text_2": "UNLOCALIZED: The attached blocks will move together when assembled into a Contraption", - "create.ponder.super_glue.text_3": "UNLOCALIZED: Whenever Super Glue is held in the off-hand...", - "create.ponder.super_glue.text_4": "UNLOCALIZED: ...added blocks will be glued to the face they were placed on automatically", - "create.ponder.super_glue.text_5": "UNLOCALIZED: Super Glue can be removed with Left-Click", + "create.ponder.super_glue.header": "Fijar bloques con pegamento", + "create.ponder.super_glue.text_1": "Se puede utilizar pegamento entre dos bloques cualquiera", + "create.ponder.super_glue.text_2": "Los bloques fijados se moverán juntos cuando se ensamblen en un artilugio", + "create.ponder.super_glue.text_3": "Cada vez que el pegamento es sostenido en la mano...", + "create.ponder.super_glue.text_4": "...los bloques añadidos se pegarán a la cara en la que fueron colocados automáticamente", + "create.ponder.super_glue.text_5": "El pegamento se puede quitar con un clic izquierdo", - "create.ponder.valve_handle.header": "UNLOCALIZED: Generating Rotational Force using Valve Handles", - "create.ponder.valve_handle.text_1": "UNLOCALIZED: Valve Handles can be used by players to apply rotational force manually", - "create.ponder.valve_handle.text_2": "UNLOCALIZED: Hold Right-Click to rotate it Counter-Clockwise", - "create.ponder.valve_handle.text_3": "UNLOCALIZED: Its conveyed speed is slow and precise", - "create.ponder.valve_handle.text_4": "UNLOCALIZED: Sneak and Hold Right-Click to rotate it Clockwise", - "create.ponder.valve_handle.text_5": "UNLOCALIZED: Valve handles can be dyed for aesthetic purposes", + "create.ponder.valve_handle.header": "Generar fuerza rotacional mediante asas de válvula", + "create.ponder.valve_handle.text_1": "Los jugadores pueden utilizar las asas de válvulas para aplicar fuerza rotacional manualmente", + "create.ponder.valve_handle.text_2": "Mantén pulsado el clic derecho para rotar en sentido contrario a las agujas del reloj", + "create.ponder.valve_handle.text_3": "Su velocidad de transmisión es lenta y precisa", + "create.ponder.valve_handle.text_4": "[Mayús izdo.] + clic derecho para rotar en el sentido de las agujas del reloj", + "create.ponder.valve_handle.text_5": "Las asas de las válvulas pueden teñirse con fines estéticos", - "create.ponder.valve_pipe.header": "UNLOCALIZED: Controlling Fluid flow using Valves", - "create.ponder.valve_pipe.text_1": "UNLOCALIZED: Valve pipes help control fluids propagating through pipe networks", - "create.ponder.valve_pipe.text_2": "UNLOCALIZED: Their shaft input controls whether fluid is currently allowed through", - "create.ponder.valve_pipe.text_3": "UNLOCALIZED: Given Rotational Force in the opening direction, the valve will open up", - "create.ponder.valve_pipe.text_4": "UNLOCALIZED: It can be closed again by reversing the input rotation", + "create.ponder.valve_pipe.header": "Controlar el flujo de fluidos mediante válvulas", + "create.ponder.valve_pipe.text_1": "Valve pipes help control fluids propagating through pipe networks", + "create.ponder.valve_pipe.text_2": "Their shaft input controls whether fluid is currently allowed through", + "create.ponder.valve_pipe.text_3": "Given Rotational Force in the opening direction, the valve will open up", + "create.ponder.valve_pipe.text_4": "It can be closed again by reversing the input rotation", - "create.ponder.water_wheel.header": "UNLOCALIZED: Generating Rotational Force using Water Wheels", - "create.ponder.water_wheel.text_1": "UNLOCALIZED: Water Wheels draw force from adjacent Water Currents", - "create.ponder.water_wheel.text_2": "UNLOCALIZED: The more faces are powered, the faster the Water Wheel will rotate", - "create.ponder.water_wheel.text_3": "UNLOCALIZED: The Wheels' blades should be oriented against the flow", - "create.ponder.water_wheel.text_4": "UNLOCALIZED: Facing the opposite way, they will not be as effective", + "create.ponder.water_wheel.header": "Generar fuerza rotacional mediante ruedas hidráulicas", + "create.ponder.water_wheel.text_1": "Las ruedas hidráulicas extraen la fuerza de las corrientes de agua adyacentes", + "create.ponder.water_wheel.text_2": "Cuantas más caras se alimenten, más rápido girará", + "create.ponder.water_wheel.text_3": "Las paletas de las ruedas deben estar orientadas en contra del flujo", + "create.ponder.water_wheel.text_4": "Orientadas hacia el lado contrario, no serán tan eficaces", - "create.ponder.weighted_ejector.header": "UNLOCALIZED: Using Weighted Ejectors", - "create.ponder.weighted_ejector.text_1": "UNLOCALIZED: Sneak and Right-Click holding an Ejector to select its target location", - "create.ponder.weighted_ejector.text_10": "UNLOCALIZED: It is now limited to this stack size, and only activates when its held stack reaches this amount", - "create.ponder.weighted_ejector.text_11": "UNLOCALIZED: Other Entities will always trigger an Ejector when stepping on it", - "create.ponder.weighted_ejector.text_2": "UNLOCALIZED: The placed ejector will now launch objects to the marked location", - "create.ponder.weighted_ejector.text_3": "UNLOCALIZED: A valid target can be at any height or distance within range", - "create.ponder.weighted_ejector.text_4": "UNLOCALIZED: They cannot however be off to a side", - "create.ponder.weighted_ejector.text_5": "UNLOCALIZED: If no valid Target was selected, it will simply target the block directly in front", - "create.ponder.weighted_ejector.text_6": "UNLOCALIZED: Supply Rotational Force in order to charge it up", - "create.ponder.weighted_ejector.text_7": "UNLOCALIZED: Items placed on the ejector cause it to trigger", - "create.ponder.weighted_ejector.text_8": "UNLOCALIZED: If Inventories are targeted, the ejector will wait until there is space", - "create.ponder.weighted_ejector.text_9": "UNLOCALIZED: Using the Wrench, a required Stack Size can be configured", + "create.ponder.weighted_ejector.header": "Usar eyectores de peso", + "create.ponder.weighted_ejector.text_1": "[Mayús izdo.] + clic derecho sosteniendo un eyector de peso para seleccionar la ubicación de destino", + "create.ponder.weighted_ejector.text_10": "Ahora estára limitado a este tamaño de pila, y sólo se activara cuando su pila retenida alcance esta cantidad", + "create.ponder.weighted_ejector.text_11": "Otras entidades activarán el eyector al pisarlos", + "create.ponder.weighted_ejector.text_2": "El eyector colocado lanzará ahora los objetos al lugar marcado", + "create.ponder.weighted_ejector.text_3": "Un objetivo válido puede estar a cualquier altura o distancia dentro del alcance", + "create.ponder.weighted_ejector.text_4": "Sin embargo, no pueden estar a un costado", + "create.ponder.weighted_ejector.text_5": "Si no se ha seleccionado ningún objetivo válido, simplemente se dirigirá al bloque que se encuentra justo delante", + "create.ponder.weighted_ejector.text_6": "Suministrale fuerza rotacional para cargarlo", + "create.ponder.weighted_ejector.text_7": "Los objetos colocados en el eyector hacen que se dispare", + "create.ponder.weighted_ejector.text_8": "Si se dirigen a un inventario, el eyector esperará hasta que haya espacio", + "create.ponder.weighted_ejector.text_9": "Con la llave inglesa se puede configurar el tamaño de pila requerido", - "create.ponder.weighted_ejector_redstone.header": "UNLOCALIZED: Controlling Weighted Ejectors with Redstone", - "create.ponder.weighted_ejector_redstone.text_1": "UNLOCALIZED: When powered by Redstone, Ejectors will not activate", - "create.ponder.weighted_ejector_redstone.text_2": "UNLOCALIZED: Furthermore, Observers can detect when Ejectors activate", + "create.ponder.weighted_ejector_redstone.header": "Controlar los eyectores de peso con redstone", + "create.ponder.weighted_ejector_redstone.text_1": "Cuando se alimentan con redstone, los eyectores no se activan", + "create.ponder.weighted_ejector_redstone.text_2": "Además, los observadores de contenido pueden detectar cuando los eyectores se activan", - "create.ponder.weighted_ejector_tunnel.header": "UNLOCALIZED: Splitting item stacks using Weighted Ejectors", - "create.ponder.weighted_ejector_tunnel.text_1": "UNLOCALIZED: Combined with Brass Tunnels, Ejectors can split item stacks by specific amounts", - "create.ponder.weighted_ejector_tunnel.text_2": "UNLOCALIZED: First, configure the Brass Tunnel to 'Prefer Nearest', in order to prioritize its side output", - "create.ponder.weighted_ejector_tunnel.text_3": "UNLOCALIZED: The Stack Size set on the Ejector now determines the amount to be split off", - "create.ponder.weighted_ejector_tunnel.text_4": "UNLOCALIZED: While a new stack of the configured size exits the side output...", - "create.ponder.weighted_ejector_tunnel.text_5": "UNLOCALIZED: ...the remainder will continue on its path", + "create.ponder.weighted_ejector_tunnel.header": "Dividir pilas de objetos mediante eyectores de peso", + "create.ponder.weighted_ejector_tunnel.text_1": "En combinación con los túneles de latón, los eyectores de peso pueden dividir las pilas de objetos en cantidades específicas", + "create.ponder.weighted_ejector_tunnel.text_2": "En primer lugar, configure el túnel de latón en 'Preferir lo más cercano', para dar prioridad a su salida lateral", + "create.ponder.weighted_ejector_tunnel.text_3": "El tamaño de la pila fijado en el eyector determina ahora la cantidad que se va a dividir", + "create.ponder.weighted_ejector_tunnel.text_4": "Mientras una nueva pila del tamaño configurado se expulse por la salida lateral...", + "create.ponder.weighted_ejector_tunnel.text_5": "...el resto seguirá su camino", - "create.ponder.windmill_source.header": "UNLOCALIZED: Generating Rotational Force using Windmill Bearings", - "create.ponder.windmill_source.text_1": "UNLOCALIZED: Windmill Bearings attach to the block in front of them", - "create.ponder.windmill_source.text_2": "UNLOCALIZED: If enough Sail-like blocks are attached to the block, it can act as a Windmill", - "create.ponder.windmill_source.text_3": "UNLOCALIZED: Activated with Right-Click, the Windmill Bearing will start providing Rotational Force", - "create.ponder.windmill_source.text_4": "UNLOCALIZED: The Amount of Sail Blocks determine its Rotation Speed", - "create.ponder.windmill_source.text_5": "UNLOCALIZED: Use a Wrench to configure its rotation direction", - "create.ponder.windmill_source.text_6": "UNLOCALIZED: Right-click the Bearing anytime to stop and edit the Structure again", + "create.ponder.windmill_source.header": "Generar fuerza rotacional mediante rodamientos del molino de viento", + "create.ponder.windmill_source.text_1": "Los rodamientos del molino de viento se fijan al bloque que tienen delante", + "create.ponder.windmill_source.text_2": "Si se unen suficientes bloques tipo vela al bloque, éste puede actuar como un molino de viento", + "create.ponder.windmill_source.text_3": "Activado con un clic derecho, el rodamiento del molino de viento comenzará a proporcionar fuerza rotacional", + "create.ponder.windmill_source.text_4": "La cantidad de bloques de vela determina su velocidad de rotación", + "create.ponder.windmill_source.text_5": "Utiliza una llave inglesa para configurar su sentido de rotación", + "create.ponder.windmill_source.text_6": "Haga clic derecho sobre el rodamiento del molino en cualquier momento para detener y editar la estructura de nuevo", - "create.ponder.windmill_structure.header": "UNLOCALIZED: Windmill Contraptions", - "create.ponder.windmill_structure.text_1": "UNLOCALIZED: Any Structure can count as a valid Windmill, as long as it contains at least 8 sail-like Blocks.", + "create.ponder.windmill_structure.header": "Artilugios para molinos de viento", + "create.ponder.windmill_structure.text_1": "Cualquier estructura puede contar como un molino de viento válido, siempre que contenga al menos 8 bloques tipo vela.", "_": "Thank you for translating Create!" diff --git a/src/generated/resources/data/create/advancements/aesthetics.json b/src/generated/resources/data/create/advancements/aesthetics.json index d723cbe38..59a86f429 100644 --- a/src/generated/resources/data/create/advancements/aesthetics.json +++ b/src/generated/resources/data/create/advancements/aesthetics.json @@ -28,8 +28,8 @@ "trigger": "create:bracket_apply", "conditions": { "accepted_entries": [ - "create:cogwheel", - "create:large_cogwheel" + "create:large_cogwheel", + "create:cogwheel" ] } }, From d418f06f37360367166590cea1ee79a9b96bb057 Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Thu, 8 Jul 2021 00:03:58 +0200 Subject: [PATCH 042/118] Magitank - Copper Backtanks can now be enchanted - Added the Capacity Enchantment --- src/generated/resources/.cache/cache | 32 ++++----- .../resources/assets/create/lang/en_ud.json | 1 + .../resources/assets/create/lang/en_us.json | 1 + .../assets/create/lang/unfinished/de_de.json | 3 +- .../assets/create/lang/unfinished/es_es.json | 3 +- .../assets/create/lang/unfinished/es_mx.json | 3 +- .../assets/create/lang/unfinished/fr_fr.json | 3 +- .../assets/create/lang/unfinished/it_it.json | 3 +- .../assets/create/lang/unfinished/ja_jp.json | 3 +- .../assets/create/lang/unfinished/ko_kr.json | 3 +- .../assets/create/lang/unfinished/nl_nl.json | 3 +- .../assets/create/lang/unfinished/pl_pl.json | 3 +- .../assets/create/lang/unfinished/pt_br.json | 3 +- .../assets/create/lang/unfinished/ru_ru.json | 3 +- .../assets/create/lang/unfinished/zh_cn.json | 3 +- .../assets/create/lang/unfinished/zh_tw.json | 3 +- .../loot_tables/blocks/copper_backtank.json | 11 ++++ .../java/com/simibubi/create/AllBlocks.java | 4 +- .../com/simibubi/create/AllEnchantments.java | 8 +++ .../curiosities/armor/BackTankUtil.java | 21 ++++-- .../armor/CapacityEnchantment.java | 27 ++++++++ .../curiosities/armor/CopperArmorItem.java | 2 +- .../armor/CopperBacktankBlock.java | 21 +++++- .../curiosities/armor/CopperBacktankItem.java | 15 +++-- .../armor/CopperBacktankTileEntity.java | 65 ++++++++++++------- .../foundation/config/CCuriosities.java | 5 +- 26 files changed, 184 insertions(+), 68 deletions(-) create mode 100644 src/main/java/com/simibubi/create/content/curiosities/armor/CapacityEnchantment.java diff --git a/src/generated/resources/.cache/cache b/src/generated/resources/.cache/cache index 58a1fd052..487ff2435 100644 --- a/src/generated/resources/.cache/cache +++ b/src/generated/resources/.cache/cache @@ -425,21 +425,21 @@ a3a11524cd3515fc01d905767b4b7ea782adaf03 assets/create/blockstates/yellow_seat.j 6801fa1f466f172700e573e5b8ee8ee5f9ca4583 assets/create/blockstates/yellow_valve_handle.json 7f39521b211441f5c3e06d60c5978cebe16cacfb assets/create/blockstates/zinc_block.json b7181bcd8182b2f17088e5aa881f374c9c65470c assets/create/blockstates/zinc_ore.json -1fa99fbea1418694aea41dea81f9cbf5e30066d4 assets/create/lang/en_ud.json -f38e0d6773f0618212e6d036290be02692302b1b assets/create/lang/en_us.json -8456877fca4c1c97a74c25c97e0dbd274e728d25 assets/create/lang/unfinished/de_de.json -b3c20a8376120c330440cc29cadbff45608de1a1 assets/create/lang/unfinished/es_es.json -2c72b40a22f6da68c179e875fecc471dfb63882c assets/create/lang/unfinished/es_mx.json -801a7fc4c0b83f94ee5fc6ff2dcfbc2c794e7fd5 assets/create/lang/unfinished/fr_fr.json -7c23104e6f627e2812391696550f7ac560a8543d assets/create/lang/unfinished/it_it.json -6a488e40ec2bd295e51447889e1643b12d744a1b assets/create/lang/unfinished/ja_jp.json -aea13865e1613a09110c6d3b52c3da68015d6a72 assets/create/lang/unfinished/ko_kr.json -7be41ad5b274297072b1cc17663686287bc3f618 assets/create/lang/unfinished/nl_nl.json -3e1957e45a5cc7586236517a5ee0f57788be9e8e assets/create/lang/unfinished/pl_pl.json -e57e2fbe82324c567d130f008865f34c45e2f9be assets/create/lang/unfinished/pt_br.json -e85f3a6441b932d3ebb4023a34d300ad196c7f41 assets/create/lang/unfinished/ru_ru.json -4186b08ae85862b6b73895507f6849d2f249d006 assets/create/lang/unfinished/zh_cn.json -90e0931966c8e272a2bd03378b25769c5daf64bb assets/create/lang/unfinished/zh_tw.json +e1d3c02695cbd2ee7bbede97f72941835634a3a5 assets/create/lang/en_ud.json +3e74ffe81510f420f5f1821808291c0539a14c13 assets/create/lang/en_us.json +82571338ff8edf812ae01f0a5d45c58718374469 assets/create/lang/unfinished/de_de.json +6cf3dd48a1708deedbb7ed1029616d932094aa93 assets/create/lang/unfinished/es_es.json +a6a3d443ff8ef03952f3e1843a88c91349f52680 assets/create/lang/unfinished/es_mx.json +c5fff5dee93fcb5eb5576bdf0598139e11b91e5c assets/create/lang/unfinished/fr_fr.json +1647117134ac3fcda2110abe13504d3699135f9c assets/create/lang/unfinished/it_it.json +ed0fd66cfa74b2390f127262242c8385fb699d72 assets/create/lang/unfinished/ja_jp.json +f0b83a1f5377c07e6a3beaa40d13ffe34ae4a269 assets/create/lang/unfinished/ko_kr.json +8e2ba058fa004c86d48c869232b85a6a1cdfa7f9 assets/create/lang/unfinished/nl_nl.json +0d99e0a375d6d1cf5f00ab48e090f4472fff94ad assets/create/lang/unfinished/pl_pl.json +2d1882cf35f0e09d9e820bd408183d902ed64b50 assets/create/lang/unfinished/pt_br.json +295b171018e6f8c2c488f109f4b080d9019e2ae2 assets/create/lang/unfinished/ru_ru.json +5f238e588fc997b23cb332fb9a0c3594d6cbfaaf assets/create/lang/unfinished/zh_cn.json +274a919cbefb9e83213e579dbc8cc0c507f65df8 assets/create/lang/unfinished/zh_tw.json 487a511a01b2a4531fb672f917922312db78f958 assets/create/models/block/acacia_window.json b48060cba1a382f373a05bf0039054053eccf076 assets/create/models/block/acacia_window_pane_noside.json 3066db1bf03cffa1a9c7fbacf47ae586632f4eb3 assets/create/models/block/acacia_window_pane_noside_alt.json @@ -2490,7 +2490,7 @@ d76113310fc56eca6382d44df174096f2210d416 data/create/loot_tables/blocks/clutch.j 673ba3a5deae9133b917d16c9eb87fe4c2873c8a data/create/loot_tables/blocks/cogwheel.json 096af6b5df6e87d36cb936eea9b00982a554f4af data/create/loot_tables/blocks/content_observer.json 80c2cb21714651116a71f449368c06bb22e841ce data/create/loot_tables/blocks/controller_rail.json -662b8d41803ef166d20850653b36759de719206c data/create/loot_tables/blocks/copper_backtank.json +41992d0c81379e0693a1a5ec3e6ee4ada381df34 data/create/loot_tables/blocks/copper_backtank.json f38802b919c49f162f102d6e5d94113f05bf4ab1 data/create/loot_tables/blocks/copper_block.json 5a65a18ea787130ac7b8f5652bfa5ed187446649 data/create/loot_tables/blocks/copper_casing.json 31a51237763c374b7cdf39b9b62c14e965871047 data/create/loot_tables/blocks/copper_ore.json diff --git a/src/generated/resources/assets/create/lang/en_ud.json b/src/generated/resources/assets/create/lang/en_ud.json index f6297f0e2..8731d1eda 100644 --- a/src/generated/resources/assets/create/lang/en_ud.json +++ b/src/generated/resources/assets/create/lang/en_ud.json @@ -426,6 +426,7 @@ "block.create.yellow_valve_handle": "\u01DD\u05DFpu\u0250H \u01DD\u028C\u05DF\u0250\u039B \u028Do\u05DF\u05DF\u01DD\u028E", "block.create.zinc_block": "\u0254u\u0131Z \u025Fo \u029E\u0254o\u05DF\u15FA", "block.create.zinc_ore": "\u01DD\u0279O \u0254u\u0131Z", + "enchantment.create.capacity": "\u028E\u0287\u0131\u0254\u0250d\u0250\u0186", "enchantment.create.potato_recovery": "\u028E\u0279\u01DD\u028Co\u0254\u01DD\u1D1A o\u0287\u0250\u0287o\u0500", "entity.create.contraption": "uo\u0131\u0287d\u0250\u0279\u0287uo\u0186", "entity.create.crafting_blueprint": "\u0287u\u0131\u0279d\u01DDn\u05DF\u15FA bu\u0131\u0287\u025F\u0250\u0279\u0186", diff --git a/src/generated/resources/assets/create/lang/en_us.json b/src/generated/resources/assets/create/lang/en_us.json index 50e7a2fb7..a597e594b 100644 --- a/src/generated/resources/assets/create/lang/en_us.json +++ b/src/generated/resources/assets/create/lang/en_us.json @@ -430,6 +430,7 @@ "block.create.zinc_block": "Block of Zinc", "block.create.zinc_ore": "Zinc Ore", + "enchantment.create.capacity": "Capacity", "enchantment.create.potato_recovery": "Potato Recovery", "entity.create.contraption": "Contraption", 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 dcd31b851..b143ebadf 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: 1118", + "_": "Missing Localizations: 1119", "_": "->------------------------] Game Elements [------------------------<-", @@ -431,6 +431,7 @@ "block.create.zinc_block": "Zinkblock", "block.create.zinc_ore": "Zinkerz", + "enchantment.create.capacity": "UNLOCALIZED: Capacity", "enchantment.create.potato_recovery": "UNLOCALIZED: Potato Recovery", "entity.create.contraption": "Vorrichtung", 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 3db3726e3..21074e3b5 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: 41", + "_": "Missing Localizations: 42", "_": "->------------------------] Game Elements [------------------------<-", @@ -431,6 +431,7 @@ "block.create.zinc_block": "Bloque de zinc", "block.create.zinc_ore": "Mena de zinc", + "enchantment.create.capacity": "UNLOCALIZED: Capacity", "enchantment.create.potato_recovery": "UNLOCALIZED: Potato Recovery", "entity.create.contraption": "Artilugio", diff --git a/src/generated/resources/assets/create/lang/unfinished/es_mx.json b/src/generated/resources/assets/create/lang/unfinished/es_mx.json index 5a1a8c86a..971203175 100644 --- a/src/generated/resources/assets/create/lang/unfinished/es_mx.json +++ b/src/generated/resources/assets/create/lang/unfinished/es_mx.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 1485", + "_": "Missing Localizations: 1486", "_": "->------------------------] Game Elements [------------------------<-", @@ -431,6 +431,7 @@ "block.create.zinc_block": "Bloque de Zinc", "block.create.zinc_ore": "Mineral de Zinc", + "enchantment.create.capacity": "UNLOCALIZED: Capacity", "enchantment.create.potato_recovery": "UNLOCALIZED: Potato Recovery", "entity.create.contraption": "Artefacto", diff --git a/src/generated/resources/assets/create/lang/unfinished/fr_fr.json b/src/generated/resources/assets/create/lang/unfinished/fr_fr.json index 57b4c4194..94e8e3196 100644 --- a/src/generated/resources/assets/create/lang/unfinished/fr_fr.json +++ b/src/generated/resources/assets/create/lang/unfinished/fr_fr.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 1370", + "_": "Missing Localizations: 1371", "_": "->------------------------] Game Elements [------------------------<-", @@ -431,6 +431,7 @@ "block.create.zinc_block": "Bloc de zinc", "block.create.zinc_ore": "Minerai de zinc", + "enchantment.create.capacity": "UNLOCALIZED: Capacity", "enchantment.create.potato_recovery": "UNLOCALIZED: Potato Recovery", "entity.create.contraption": "Engin", diff --git a/src/generated/resources/assets/create/lang/unfinished/it_it.json b/src/generated/resources/assets/create/lang/unfinished/it_it.json index 44d778471..b305be2b8 100644 --- a/src/generated/resources/assets/create/lang/unfinished/it_it.json +++ b/src/generated/resources/assets/create/lang/unfinished/it_it.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 898", + "_": "Missing Localizations: 899", "_": "->------------------------] Game Elements [------------------------<-", @@ -431,6 +431,7 @@ "block.create.zinc_block": "Blocco di zinco", "block.create.zinc_ore": "Zinco grezzo", + "enchantment.create.capacity": "UNLOCALIZED: Capacity", "enchantment.create.potato_recovery": "UNLOCALIZED: Potato Recovery", "entity.create.contraption": "Contrazione", diff --git a/src/generated/resources/assets/create/lang/unfinished/ja_jp.json b/src/generated/resources/assets/create/lang/unfinished/ja_jp.json index 75a7148cb..ff6ee296d 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ja_jp.json +++ b/src/generated/resources/assets/create/lang/unfinished/ja_jp.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 30", + "_": "Missing Localizations: 31", "_": "->------------------------] Game Elements [------------------------<-", @@ -431,6 +431,7 @@ "block.create.zinc_block": "亜鉛ブロック", "block.create.zinc_ore": "亜鉛鉱石", + "enchantment.create.capacity": "UNLOCALIZED: Capacity", "enchantment.create.potato_recovery": "UNLOCALIZED: Potato Recovery", "entity.create.contraption": "からくり", diff --git a/src/generated/resources/assets/create/lang/unfinished/ko_kr.json b/src/generated/resources/assets/create/lang/unfinished/ko_kr.json index ed57b3807..849b7d5d0 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ko_kr.json +++ b/src/generated/resources/assets/create/lang/unfinished/ko_kr.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 276", + "_": "Missing Localizations: 277", "_": "->------------------------] Game Elements [------------------------<-", @@ -431,6 +431,7 @@ "block.create.zinc_block": "아연 블록", "block.create.zinc_ore": "아연 광석", + "enchantment.create.capacity": "UNLOCALIZED: Capacity", "enchantment.create.potato_recovery": "UNLOCALIZED: Potato Recovery", "entity.create.contraption": "장치", diff --git a/src/generated/resources/assets/create/lang/unfinished/nl_nl.json b/src/generated/resources/assets/create/lang/unfinished/nl_nl.json index 0c75091b9..b2204fd12 100644 --- a/src/generated/resources/assets/create/lang/unfinished/nl_nl.json +++ b/src/generated/resources/assets/create/lang/unfinished/nl_nl.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 1751", + "_": "Missing Localizations: 1752", "_": "->------------------------] Game Elements [------------------------<-", @@ -431,6 +431,7 @@ "block.create.zinc_block": "UNLOCALIZED: Block of Zinc", "block.create.zinc_ore": "UNLOCALIZED: Zinc Ore", + "enchantment.create.capacity": "UNLOCALIZED: Capacity", "enchantment.create.potato_recovery": "UNLOCALIZED: Potato Recovery", "entity.create.contraption": "UNLOCALIZED: Contraption", diff --git a/src/generated/resources/assets/create/lang/unfinished/pl_pl.json b/src/generated/resources/assets/create/lang/unfinished/pl_pl.json index 96f3defca..8d16ccfee 100644 --- a/src/generated/resources/assets/create/lang/unfinished/pl_pl.json +++ b/src/generated/resources/assets/create/lang/unfinished/pl_pl.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 240", + "_": "Missing Localizations: 241", "_": "->------------------------] Game Elements [------------------------<-", @@ -431,6 +431,7 @@ "block.create.zinc_block": "Blok cynku", "block.create.zinc_ore": "Ruda cynku", + "enchantment.create.capacity": "UNLOCALIZED: Capacity", "enchantment.create.potato_recovery": "UNLOCALIZED: Potato Recovery", "entity.create.contraption": "Maszyna", 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 2e8ae8c56..6163cba3a 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: 1792", + "_": "Missing Localizations: 1793", "_": "->------------------------] Game Elements [------------------------<-", @@ -431,6 +431,7 @@ "block.create.zinc_block": "UNLOCALIZED: Block of Zinc", "block.create.zinc_ore": "UNLOCALIZED: Zinc Ore", + "enchantment.create.capacity": "UNLOCALIZED: Capacity", "enchantment.create.potato_recovery": "UNLOCALIZED: Potato Recovery", "entity.create.contraption": "UNLOCALIZED: Contraption", diff --git a/src/generated/resources/assets/create/lang/unfinished/ru_ru.json b/src/generated/resources/assets/create/lang/unfinished/ru_ru.json index 8fd4ba2b7..8a6c396f5 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ru_ru.json +++ b/src/generated/resources/assets/create/lang/unfinished/ru_ru.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 271", + "_": "Missing Localizations: 272", "_": "->------------------------] Game Elements [------------------------<-", @@ -431,6 +431,7 @@ "block.create.zinc_block": "Цинковый блок", "block.create.zinc_ore": "Цинковая руда", + "enchantment.create.capacity": "UNLOCALIZED: Capacity", "enchantment.create.potato_recovery": "UNLOCALIZED: Potato Recovery", "entity.create.contraption": "Штуковина", 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 61b29d131..d7b417dfc 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: 281", + "_": "Missing Localizations: 282", "_": "->------------------------] Game Elements [------------------------<-", @@ -431,6 +431,7 @@ "block.create.zinc_block": "锌块", "block.create.zinc_ore": "锌矿石", + "enchantment.create.capacity": "UNLOCALIZED: Capacity", "enchantment.create.potato_recovery": "UNLOCALIZED: Potato Recovery", "entity.create.contraption": "装置", diff --git a/src/generated/resources/assets/create/lang/unfinished/zh_tw.json b/src/generated/resources/assets/create/lang/unfinished/zh_tw.json index 326dabd84..8724d55b5 100644 --- a/src/generated/resources/assets/create/lang/unfinished/zh_tw.json +++ b/src/generated/resources/assets/create/lang/unfinished/zh_tw.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 276", + "_": "Missing Localizations: 277", "_": "->------------------------] Game Elements [------------------------<-", @@ -431,6 +431,7 @@ "block.create.zinc_block": "鋅磚", "block.create.zinc_ore": "鋅礦石", + "enchantment.create.capacity": "UNLOCALIZED: Capacity", "enchantment.create.potato_recovery": "UNLOCALIZED: Potato Recovery", "entity.create.contraption": "結構", diff --git a/src/generated/resources/data/create/loot_tables/blocks/copper_backtank.json b/src/generated/resources/data/create/loot_tables/blocks/copper_backtank.json index b5466bfc9..d1903f132 100644 --- a/src/generated/resources/data/create/loot_tables/blocks/copper_backtank.json +++ b/src/generated/resources/data/create/loot_tables/blocks/copper_backtank.json @@ -21,6 +21,17 @@ "op": "replace" } ] + }, + { + "function": "minecraft:copy_nbt", + "source": "block_entity", + "ops": [ + { + "source": "Enchantments", + "target": "Enchantments", + "op": "replace" + } + ] } ], "name": "create:copper_backtank" diff --git a/src/main/java/com/simibubi/create/AllBlocks.java b/src/main/java/com/simibubi/create/AllBlocks.java index 28a9ed80c..dd17da0f0 100644 --- a/src/main/java/com/simibubi/create/AllBlocks.java +++ b/src/main/java/com/simibubi/create/AllBlocks.java @@ -1324,7 +1324,9 @@ public class AllBlocks { .addEntry(ItemLootEntry.builder(AllItems.COPPER_BACKTANK.get()) .acceptFunction(CopyName.builder(CopyName.Source.BLOCK_ENTITY)) .acceptFunction(CopyNbt.func_215881_a(CopyNbt.Source.BLOCK_ENTITY) - .func_216056_a("Air", "Air"))))); + .func_216056_a("Air", "Air")) + .acceptFunction(CopyNbt.func_215881_a(CopyNbt.Source.BLOCK_ENTITY) + .func_216056_a("Enchantments", "Enchantments"))))); }) .register(); diff --git a/src/main/java/com/simibubi/create/AllEnchantments.java b/src/main/java/com/simibubi/create/AllEnchantments.java index d1931256f..eae8bf6e0 100644 --- a/src/main/java/com/simibubi/create/AllEnchantments.java +++ b/src/main/java/com/simibubi/create/AllEnchantments.java @@ -1,5 +1,6 @@ package com.simibubi.create; +import com.simibubi.create.content.curiosities.armor.CapacityEnchantment; import com.simibubi.create.content.curiosities.weapons.PotatoRecoveryEnchantment; import com.simibubi.create.foundation.data.CreateRegistrate; import com.tterrag.registrate.util.entry.RegistryEntry; @@ -18,6 +19,13 @@ public class AllEnchantments { .lang("Potato Recovery") .rarity(Rarity.UNCOMMON) .register(); + + public static final RegistryEntry CAPACITY = REGISTRATE.object("capacity") + .enchantment(EnchantmentType.ARMOR_CHEST, CapacityEnchantment::new) + .addSlots(EquipmentSlotType.CHEST) + .lang("Capacity") + .rarity(Rarity.COMMON) + .register(); public static void register() {} diff --git a/src/main/java/com/simibubi/create/content/curiosities/armor/BackTankUtil.java b/src/main/java/com/simibubi/create/content/curiosities/armor/BackTankUtil.java index d38cb9ff2..6310de114 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/armor/BackTankUtil.java +++ b/src/main/java/com/simibubi/create/content/curiosities/armor/BackTankUtil.java @@ -1,10 +1,12 @@ package com.simibubi.create.content.curiosities.armor; +import com.simibubi.create.AllEnchantments; import com.simibubi.create.AllItems; import com.simibubi.create.foundation.config.AllConfigs; import net.minecraft.client.Minecraft; import net.minecraft.client.entity.player.ClientPlayerEntity; +import net.minecraft.enchantment.EnchantmentHelper; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; @@ -28,17 +30,26 @@ public class BackTankUtil { public static float getAir(ItemStack backtank) { CompoundNBT tag = backtank.getOrCreateTag(); - return tag.getFloat("Air"); + return Math.min(tag.getFloat("Air"), maxAir(backtank)); } public static void consumeAir(ItemStack backtank, float i) { CompoundNBT tag = backtank.getOrCreateTag(); - tag.putFloat("Air", getAir(backtank) - i); + tag.putFloat("Air", Math.min(getAir(backtank) - i, maxAir(backtank))); backtank.setTag(tag); } - private static float maxAir() { - return AllConfigs.SERVER.curiosities.maxAirInBacktank.get(); + public static int maxAir(ItemStack backtank) { + return maxAir(EnchantmentHelper.getEnchantmentLevel(AllEnchantments.CAPACITY.get(), backtank)); + } + + public static int maxAir(int enchantLevel) { + return AllConfigs.SERVER.curiosities.airInBacktank.get() + + AllConfigs.SERVER.curiosities.enchantedBacktankCapacity.get() * enchantLevel; + } + + public static int maxAirWithoutEnchants() { + return AllConfigs.SERVER.curiosities.airInBacktank.get(); } public static boolean canAbsorbDamage(LivingEntity entity, int usesPerTank) { @@ -51,7 +62,7 @@ public class BackTankUtil { return false; if (!hasAirRemaining(backtank)) return false; - float cost = maxAir() / usesPerTank; + float cost = ((float) maxAirWithoutEnchants()) / usesPerTank; consumeAir(backtank, cost); return true; } diff --git a/src/main/java/com/simibubi/create/content/curiosities/armor/CapacityEnchantment.java b/src/main/java/com/simibubi/create/content/curiosities/armor/CapacityEnchantment.java new file mode 100644 index 000000000..49b31df0d --- /dev/null +++ b/src/main/java/com/simibubi/create/content/curiosities/armor/CapacityEnchantment.java @@ -0,0 +1,27 @@ +package com.simibubi.create.content.curiosities.armor; + +import net.minecraft.enchantment.Enchantment; +import net.minecraft.enchantment.EnchantmentType; +import net.minecraft.inventory.EquipmentSlotType; +import net.minecraft.item.ItemStack; + +public class CapacityEnchantment extends Enchantment { + + public CapacityEnchantment(Rarity p_i46731_1_, EnchantmentType p_i46731_2_, EquipmentSlotType[] p_i46731_3_) { + super(p_i46731_1_, p_i46731_2_, p_i46731_3_); + } + + @Override + public int getMaxLevel() { + return 3; + } + + @Override + public boolean canApplyAtEnchantingTable(ItemStack stack) { + return stack.getItem() instanceof ICapacityEnchantable; + } + + public interface ICapacityEnchantable { + } + +} diff --git a/src/main/java/com/simibubi/create/content/curiosities/armor/CopperArmorItem.java b/src/main/java/com/simibubi/create/content/curiosities/armor/CopperArmorItem.java index 01ccb623e..8825db1c5 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/armor/CopperArmorItem.java +++ b/src/main/java/com/simibubi/create/content/curiosities/armor/CopperArmorItem.java @@ -10,7 +10,7 @@ import net.minecraft.item.ItemStack; public class CopperArmorItem extends ArmorItem { public CopperArmorItem(EquipmentSlotType p_i48534_2_, Properties p_i48534_3_) { - super(AllArmorMaterials.COPPER, p_i48534_2_, p_i48534_3_); + super(AllArmorMaterials.COPPER, p_i48534_2_, p_i48534_3_.maxStackSize(1)); } public boolean isWornBy(Entity entity) { diff --git a/src/main/java/com/simibubi/create/content/curiosities/armor/CopperBacktankBlock.java b/src/main/java/com/simibubi/create/content/curiosities/armor/CopperBacktankBlock.java index 53327ec31..c19b2d6d9 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/armor/CopperBacktankBlock.java +++ b/src/main/java/com/simibubi/create/content/curiosities/armor/CopperBacktankBlock.java @@ -2,6 +2,7 @@ package com.simibubi.create.content.curiosities.armor; import java.util.Optional; +import com.simibubi.create.AllEnchantments; import com.simibubi.create.AllItems; import com.simibubi.create.AllShapes; import com.simibubi.create.AllTileEntities; @@ -11,6 +12,7 @@ import com.simibubi.create.foundation.block.ITE; import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.block.IWaterLoggable; +import net.minecraft.enchantment.EnchantmentHelper; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.fluid.FluidState; @@ -19,6 +21,8 @@ import net.minecraft.inventory.EquipmentSlotType; import net.minecraft.item.BlockItem; import net.minecraft.item.BlockItemUseContext; import net.minecraft.item.ItemStack; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.nbt.ListNBT; import net.minecraft.pathfinding.PathType; import net.minecraft.state.StateContainer.Builder; import net.minecraft.state.properties.BlockStateProperties; @@ -96,8 +100,11 @@ public class CopperBacktankBlock extends HorizontalKineticBlock if (stack == null) return; withTileEntityDo(worldIn, pos, te -> { + te.setCapacityEnchantLevel(EnchantmentHelper.getEnchantmentLevel(AllEnchantments.CAPACITY.get(), stack)); te.setAirLevel(stack.getOrCreateTag() .getInt("Air")); + if (stack.isEnchanted()) + te.setEnchantmentTag(stack.getEnchantmentTagList()); if (stack.hasDisplayName()) te.setCustomName(stack.getDisplayName()); }); @@ -130,12 +137,22 @@ public class CopperBacktankBlock extends HorizontalKineticBlock public ItemStack getItem(IBlockReader p_185473_1_, BlockPos p_185473_2_, BlockState p_185473_3_) { ItemStack item = AllItems.COPPER_BACKTANK.asStack(); Optional tileEntityOptional = getTileEntityOptional(p_185473_1_, p_185473_2_); + int air = tileEntityOptional.map(CopperBacktankTileEntity::getAirLevel) .orElse(0); + CompoundNBT tag = item.getOrCreateTag(); + tag.putInt("Air", air); + + ListNBT enchants = tileEntityOptional.map(CopperBacktankTileEntity::getEnchantmentTag) + .orElse(new ListNBT()); + if (!enchants.isEmpty()) { + ListNBT enchantmentTagList = item.getEnchantmentTagList(); + enchantmentTagList.addAll(enchants); + tag.put("Enchantments", enchantmentTagList); + } + ITextComponent customName = tileEntityOptional.map(CopperBacktankTileEntity::getCustomName) .orElse(null); - item.getOrCreateTag() - .putInt("Air", air); if (customName != null) item.setDisplayName(customName); return item; diff --git a/src/main/java/com/simibubi/create/content/curiosities/armor/CopperBacktankItem.java b/src/main/java/com/simibubi/create/content/curiosities/armor/CopperBacktankItem.java index 7e537816d..d01a1cda2 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/armor/CopperBacktankItem.java +++ b/src/main/java/com/simibubi/create/content/curiosities/armor/CopperBacktankItem.java @@ -1,6 +1,6 @@ package com.simibubi.create.content.curiosities.armor; -import com.simibubi.create.foundation.config.AllConfigs; +import com.simibubi.create.content.curiosities.armor.CapacityEnchantment.ICapacityEnchantable; import net.minecraft.inventory.EquipmentSlotType; import net.minecraft.item.BlockItem; @@ -12,7 +12,7 @@ import net.minecraft.util.ActionResultType; import net.minecraft.util.NonNullList; import net.minecraft.util.math.MathHelper; -public class CopperBacktankItem extends CopperArmorItem { +public class CopperBacktankItem extends CopperArmorItem implements ICapacityEnchantable { public static final int DURABILITY_BAR = 0xefefef; private BlockItem blockItem; @@ -31,6 +31,11 @@ public class CopperBacktankItem extends CopperArmorItem { public boolean isDamageable() { return false; } + + @Override + public boolean isEnchantable(ItemStack p_77616_1_) { + return true; + } @Override public int getRGBDurabilityForDisplay(ItemStack stack) { @@ -44,7 +49,7 @@ public class CopperBacktankItem extends CopperArmorItem { ItemStack stack = new ItemStack(this); CompoundNBT nbt = new CompoundNBT(); - nbt.putInt("Air", AllConfigs.SERVER.curiosities.maxAirInBacktank.get()); + nbt.putInt("Air", BackTankUtil.maxAirWithoutEnchants()); stack.setTag(nbt); p_150895_2_.add(stack); } @@ -52,7 +57,7 @@ public class CopperBacktankItem extends CopperArmorItem { @Override public double getDurabilityForDisplay(ItemStack stack) { return 1 - MathHelper - .clamp(getRemainingAir(stack) / ((float) AllConfigs.SERVER.curiosities.maxAirInBacktank.get()), 0, 1); + .clamp(getRemainingAir(stack) / ((float) BackTankUtil.maxAir(stack)), 0, 1); } @Override @@ -64,5 +69,5 @@ public class CopperBacktankItem extends CopperArmorItem { CompoundNBT orCreateTag = stack.getOrCreateTag(); return orCreateTag.getInt("Air"); } - + } diff --git a/src/main/java/com/simibubi/create/content/curiosities/armor/CopperBacktankTileEntity.java b/src/main/java/com/simibubi/create/content/curiosities/armor/CopperBacktankTileEntity.java index 30b63d8c2..a4e94dd08 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/armor/CopperBacktankTileEntity.java +++ b/src/main/java/com/simibubi/create/content/curiosities/armor/CopperBacktankTileEntity.java @@ -5,11 +5,11 @@ import com.simibubi.create.AllSoundEvents; import com.simibubi.create.Create; import com.simibubi.create.content.contraptions.base.KineticTileEntity; import com.simibubi.create.content.contraptions.particle.AirParticleData; -import com.simibubi.create.foundation.config.AllConfigs; import com.simibubi.create.foundation.utility.VecHelper; import net.minecraft.block.BlockState; import net.minecraft.nbt.CompoundNBT; +import net.minecraft.nbt.ListNBT; import net.minecraft.particles.ParticleTypes; import net.minecraft.tileentity.TileEntityType; import net.minecraft.util.Direction.Axis; @@ -18,15 +18,20 @@ import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.vector.Vector3d; import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.TranslationTextComponent; +import net.minecraftforge.common.util.Constants.NBT; public class CopperBacktankTileEntity extends KineticTileEntity implements INameable { public int airLevel; public int airLevelTimer; private ITextComponent customName; + + private int capacityEnchantLevel; + private ListNBT enchantmentTag; public CopperBacktankTileEntity(TileEntityType typeIn) { super(typeIn); + enchantmentTag = new ListNBT(); } @Override @@ -39,7 +44,7 @@ public class CopperBacktankTileEntity extends KineticTileEntity implements IName return; } - int max = getMaxAir(); + int max = BackTankUtil.maxAir(capacityEnchantLevel); if (world.isRemote) { Vector3d centerOf = VecHelper.getCenterOf(pos); Vector3d v = VecHelper.offsetRandomly(centerOf, Create.RANDOM, .65f); @@ -60,45 +65,28 @@ public class CopperBacktankTileEntity extends KineticTileEntity implements IName airLevelTimer = MathHelper.clamp((int) (128f - abs / 5f) - 108, 0, 20); } - protected int getMaxAir() { - return AllConfigs.SERVER.curiosities.maxAirInBacktank.get(); - } - - public int getAirLevel() { - return airLevel; - } - - public void setAirLevel(int airLevel) { - this.airLevel = airLevel; - sendData(); - } - - public void setCustomName(ITextComponent customName) { - this.customName = customName; - } - - public ITextComponent getCustomName() { - return customName; - } - @Override protected void write(CompoundNBT compound, boolean clientPacket) { super.write(compound, clientPacket); compound.putInt("Air", airLevel); compound.putInt("Timer", airLevelTimer); + compound.putInt("CapacityEnchantment", capacityEnchantLevel); if (this.customName != null) compound.putString("CustomName", ITextComponent.Serializer.toJson(this.customName)); + compound.put("Enchantments", enchantmentTag); } @Override protected void fromTag(BlockState state, CompoundNBT compound, boolean clientPacket) { super.fromTag(state, compound, clientPacket); int prev = airLevel; + capacityEnchantLevel = compound.getInt("CapacityEnchantment"); airLevel = compound.getInt("Air"); airLevelTimer = compound.getInt("Timer"); + enchantmentTag = compound.getList("Enchantments", NBT.TAG_COMPOUND); if (compound.contains("CustomName", 8)) this.customName = ITextComponent.Serializer.fromJson(compound.getString("CustomName")); - if (prev != 0 && prev != airLevel && airLevel == getMaxAir() && clientPacket) + if (prev != 0 && prev != airLevel && airLevel == BackTankUtil.maxAir(capacityEnchantLevel) && clientPacket) playFilledEffect(); } @@ -127,4 +115,33 @@ public class CopperBacktankTileEntity extends KineticTileEntity implements IName return true; } + public int getAirLevel() { + return airLevel; + } + + public void setAirLevel(int airLevel) { + this.airLevel = airLevel; + sendData(); + } + + public void setCustomName(ITextComponent customName) { + this.customName = customName; + } + + public ITextComponent getCustomName() { + return customName; + } + + public ListNBT getEnchantmentTag() { + return enchantmentTag; + } + + public void setEnchantmentTag(ListNBT enchantmentTag) { + this.enchantmentTag = enchantmentTag; + } + + public void setCapacityEnchantLevel(int capacityEnchantLevel) { + this.capacityEnchantLevel = capacityEnchantLevel; + } + } diff --git a/src/main/java/com/simibubi/create/foundation/config/CCuriosities.java b/src/main/java/com/simibubi/create/foundation/config/CCuriosities.java index ffa5876b7..2ba15eaea 100644 --- a/src/main/java/com/simibubi/create/foundation/config/CCuriosities.java +++ b/src/main/java/com/simibubi/create/foundation/config/CCuriosities.java @@ -4,7 +4,8 @@ public class CCuriosities extends ConfigBase { public ConfigInt maxSymmetryWandRange = i(50, 10, "maxSymmetryWandRange", Comments.symmetryRange); public ConfigInt placementAssistRange = i(12, 3, "placementAssistRange", Comments.placementRange); - public ConfigInt maxAirInBacktank = i(900, 1, "maxAirInBacktank", Comments.maxAirInBacktank); + public ConfigInt airInBacktank = i(900, 1, "airInBacktank", Comments.maxAirInBacktank); + public ConfigInt enchantedBacktankCapacity = i(300, 1, "enchantedBacktankCapacity", Comments.enchantedBacktankCapacity); public ConfigInt maxExtendoGripActions = i(1000, 0, "maxExtendoGripActions", Comments.maxExtendoGripActions); public ConfigInt maxPotatoCannonShots = i(200, 0, "maxPotatoCannonShots", Comments.maxPotatoCannonShots); @@ -20,6 +21,8 @@ public class CCuriosities extends ConfigBase { static String symmetryRange = "The Maximum Distance to an active mirror for the symmetry wand to trigger."; static String maxAirInBacktank = "The Maximum volume of Air that can be stored in a backtank = Seconds of underwater breathing"; + static String enchantedBacktankCapacity = + "The volume of Air added by each level of the backtanks Capacity Enchantment"; static String placementRange = "The Maximum Distance a Block placed by Create's placement assist will have to its interaction point."; static String maxExtendoGripActions = From 801f5fa130b0b65491679efa3e50998e547d6b15 Mon Sep 17 00:00:00 2001 From: grimmauld Date: Thu, 8 Jul 2021 09:45:53 +0200 Subject: [PATCH 043/118] Filter for shulker fill level --- src/generated/resources/.cache/cache | 30 ++--- .../resources/assets/create/lang/en_us.json | 5 + .../assets/create/lang/unfinished/de_de.json | 7 +- .../assets/create/lang/unfinished/es_es.json | 7 +- .../assets/create/lang/unfinished/es_mx.json | 7 +- .../assets/create/lang/unfinished/fr_fr.json | 7 +- .../assets/create/lang/unfinished/it_it.json | 7 +- .../assets/create/lang/unfinished/ja_jp.json | 7 +- .../assets/create/lang/unfinished/ko_kr.json | 7 +- .../assets/create/lang/unfinished/nl_nl.json | 7 +- .../assets/create/lang/unfinished/pl_pl.json | 7 +- .../assets/create/lang/unfinished/pt_br.json | 7 +- .../assets/create/lang/unfinished/ru_ru.json | 7 +- .../assets/create/lang/unfinished/zh_cn.json | 7 +- .../assets/create/lang/unfinished/zh_tw.json | 7 +- .../data/create/advancements/aesthetics.json | 4 +- .../logistics/item/filter/ItemAttribute.java | 3 + .../attribute/ShulkerFillLevelAttribute.java | 109 ++++++++++++++++++ .../assets/create/lang/default/messages.json | 8 +- 19 files changed, 219 insertions(+), 31 deletions(-) create mode 100644 src/main/java/com/simibubi/create/content/logistics/item/filter/attribute/ShulkerFillLevelAttribute.java diff --git a/src/generated/resources/.cache/cache b/src/generated/resources/.cache/cache index 487ff2435..2b427ad1d 100644 --- a/src/generated/resources/.cache/cache +++ b/src/generated/resources/.cache/cache @@ -426,20 +426,20 @@ a3a11524cd3515fc01d905767b4b7ea782adaf03 assets/create/blockstates/yellow_seat.j 7f39521b211441f5c3e06d60c5978cebe16cacfb assets/create/blockstates/zinc_block.json b7181bcd8182b2f17088e5aa881f374c9c65470c assets/create/blockstates/zinc_ore.json e1d3c02695cbd2ee7bbede97f72941835634a3a5 assets/create/lang/en_ud.json -3e74ffe81510f420f5f1821808291c0539a14c13 assets/create/lang/en_us.json -82571338ff8edf812ae01f0a5d45c58718374469 assets/create/lang/unfinished/de_de.json -6cf3dd48a1708deedbb7ed1029616d932094aa93 assets/create/lang/unfinished/es_es.json -a6a3d443ff8ef03952f3e1843a88c91349f52680 assets/create/lang/unfinished/es_mx.json -c5fff5dee93fcb5eb5576bdf0598139e11b91e5c assets/create/lang/unfinished/fr_fr.json -1647117134ac3fcda2110abe13504d3699135f9c assets/create/lang/unfinished/it_it.json -ed0fd66cfa74b2390f127262242c8385fb699d72 assets/create/lang/unfinished/ja_jp.json -f0b83a1f5377c07e6a3beaa40d13ffe34ae4a269 assets/create/lang/unfinished/ko_kr.json -8e2ba058fa004c86d48c869232b85a6a1cdfa7f9 assets/create/lang/unfinished/nl_nl.json -0d99e0a375d6d1cf5f00ab48e090f4472fff94ad assets/create/lang/unfinished/pl_pl.json -2d1882cf35f0e09d9e820bd408183d902ed64b50 assets/create/lang/unfinished/pt_br.json -295b171018e6f8c2c488f109f4b080d9019e2ae2 assets/create/lang/unfinished/ru_ru.json -5f238e588fc997b23cb332fb9a0c3594d6cbfaaf assets/create/lang/unfinished/zh_cn.json -274a919cbefb9e83213e579dbc8cc0c507f65df8 assets/create/lang/unfinished/zh_tw.json +ae6c1882c3049b20409f233d7984fdb6498e1cec assets/create/lang/en_us.json +4d1f84c2fe9d6ed58d9ce555f09b408c3a2d5349 assets/create/lang/unfinished/de_de.json +3fa0debc2eff551c3cbbdf917766e835f803d467 assets/create/lang/unfinished/es_es.json +6f0034ff2b0a4dc2ef1c390aa76a88e325e17159 assets/create/lang/unfinished/es_mx.json +a8bf7fa74b00f2ce89d3687e5cee17607f18fa5f assets/create/lang/unfinished/fr_fr.json +7633b95d4e27ca0edd77f2d88fcc90e279e09edf assets/create/lang/unfinished/it_it.json +423b5f8f07b0ca5825c038859f9b506a28982659 assets/create/lang/unfinished/ja_jp.json +20f19b6699ab131e64b73283f1a5dfd4e3d47bb8 assets/create/lang/unfinished/ko_kr.json +34435d8e73e3b06095b6dbb77f133e9695c9e39c assets/create/lang/unfinished/nl_nl.json +f8aafddf029b41c3ad46ed81ff2ccd5289ef2a65 assets/create/lang/unfinished/pl_pl.json +7f2cf06e9e33f14ca61fd4632df7adfa02b33311 assets/create/lang/unfinished/pt_br.json +9f44fe3b87225017fd7975ee8fd5e4ff309e6296 assets/create/lang/unfinished/ru_ru.json +a99c3e9642cc1748a30e011e0651f89e206175a0 assets/create/lang/unfinished/zh_cn.json +79d2ba1dee4c4d677dd9e99878a522bfb575c3f4 assets/create/lang/unfinished/zh_tw.json 487a511a01b2a4531fb672f917922312db78f958 assets/create/models/block/acacia_window.json b48060cba1a382f373a05bf0039054053eccf076 assets/create/models/block/acacia_window_pane_noside.json 3066db1bf03cffa1a9c7fbacf47ae586632f4eb3 assets/create/models/block/acacia_window_pane_noside_alt.json @@ -1699,7 +1699,7 @@ d080b1b25e5bc8baf5aee68691b08c7f12ece3b0 assets/create/models/item/windmill_bear a80fb25a0b655e76be986b5b49fcb0f03461a1ab assets/create/models/item/zinc_nugget.json b1689617190c05ef34bd18456b0c7ae09bb3210f assets/create/models/item/zinc_ore.json bbe7fc4aef29420319f59d02d4cd376a78244e70 assets/create/sounds.json -5d0cc4c0255dc241e61c173b31ddca70c88d08e4 data/create/advancements/aesthetics.json +0f1b4b980afba9bf2caf583b88e261bba8b10313 data/create/advancements/aesthetics.json 187921fa131b06721bfaf63f2623a28c141aae9a data/create/advancements/andesite_alloy.json 0ea2db7173b5be28b289ea7c9a6a0cf5805c60c7 data/create/advancements/andesite_casing.json 83c046bd200623933545c9e4326f782fb02c87fa data/create/advancements/arm_blaze_burner.json diff --git a/src/generated/resources/assets/create/lang/en_us.json b/src/generated/resources/assets/create/lang/en_us.json index a597e594b..ed2b1303c 100644 --- a/src/generated/resources/assets/create/lang/en_us.json +++ b/src/generated/resources/assets/create/lang/en_us.json @@ -1064,6 +1064,11 @@ "create.item_attributes.in_item_group.inverted": "is not in group '%1$s'", "create.item_attributes.added_by": "was added by %1$s", "create.item_attributes.added_by.inverted": "was not added by %1$s", + "create.item_attributes.shulker_level": "is shulker %1$s", + "create.item_attributes.shulker_level.inverted": "is shulker not %1$s", + "create.item_attributes.shulker_level.full": "full", + "create.item_attributes.shulker_level.empty": "empty", + "create.item_attributes.shulker_level.partial": "partially filled", "create.item_attributes.has_enchant": "is enchanted with %1$s", "create.item_attributes.has_enchant.inverted": "is not enchanted with %1$s", "create.item_attributes.color": "is dyed %1$s", 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 b143ebadf..7b24da461 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: 1119", + "_": "Missing Localizations: 1124", "_": "->------------------------] Game Elements [------------------------<-", @@ -1065,6 +1065,11 @@ "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.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.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", 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 21074e3b5..f6e95345b 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: 42", + "_": "Missing Localizations: 47", "_": "->------------------------] Game Elements [------------------------<-", @@ -1065,6 +1065,11 @@ "create.item_attributes.in_item_group.inverted": "no está en el grupo '%1$s'", "create.item_attributes.added_by": "fue añadido por %1$s", "create.item_attributes.added_by.inverted": "no fue añadida por %1$s", + "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.has_enchant": "está encantado con %1$s", "create.item_attributes.has_enchant.inverted": "no está encantado con %1$s", "create.item_attributes.color": "Está teñido %1$s", diff --git a/src/generated/resources/assets/create/lang/unfinished/es_mx.json b/src/generated/resources/assets/create/lang/unfinished/es_mx.json index 971203175..6204bb650 100644 --- a/src/generated/resources/assets/create/lang/unfinished/es_mx.json +++ b/src/generated/resources/assets/create/lang/unfinished/es_mx.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 1486", + "_": "Missing Localizations: 1491", "_": "->------------------------] Game Elements [------------------------<-", @@ -1065,6 +1065,11 @@ "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.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.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", diff --git a/src/generated/resources/assets/create/lang/unfinished/fr_fr.json b/src/generated/resources/assets/create/lang/unfinished/fr_fr.json index 94e8e3196..607b17dea 100644 --- a/src/generated/resources/assets/create/lang/unfinished/fr_fr.json +++ b/src/generated/resources/assets/create/lang/unfinished/fr_fr.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 1371", + "_": "Missing Localizations: 1376", "_": "->------------------------] Game Elements [------------------------<-", @@ -1065,6 +1065,11 @@ "create.item_attributes.in_item_group.inverted": "n'appartient pas à %1$s'", "create.item_attributes.added_by": "a été ajouté par %1$s", "create.item_attributes.added_by.inverted": "n'a pas été ajouté par %1$s", + "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.has_enchant": "est enchanté %1$s", "create.item_attributes.has_enchant.inverted": "n'est pas enchenté %1$s", "create.item_attributes.color": "UNLOCALIZED: is dyed %1$s", diff --git a/src/generated/resources/assets/create/lang/unfinished/it_it.json b/src/generated/resources/assets/create/lang/unfinished/it_it.json index b305be2b8..2cd984e28 100644 --- a/src/generated/resources/assets/create/lang/unfinished/it_it.json +++ b/src/generated/resources/assets/create/lang/unfinished/it_it.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 899", + "_": "Missing Localizations: 904", "_": "->------------------------] Game Elements [------------------------<-", @@ -1065,6 +1065,11 @@ "create.item_attributes.in_item_group.inverted": "non appartiene a '%1$s'", "create.item_attributes.added_by": "è stato aggiunto da %1$s", "create.item_attributes.added_by.inverted": "non è stato aggiunto da %1$s", + "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.has_enchant": "è stato incantato con %1$s", "create.item_attributes.has_enchant.inverted": "non è stato incantato con %1$s", "create.item_attributes.color": "UNLOCALIZED: is dyed %1$s", diff --git a/src/generated/resources/assets/create/lang/unfinished/ja_jp.json b/src/generated/resources/assets/create/lang/unfinished/ja_jp.json index ff6ee296d..b088a2f33 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ja_jp.json +++ b/src/generated/resources/assets/create/lang/unfinished/ja_jp.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 31", + "_": "Missing Localizations: 36", "_": "->------------------------] Game Elements [------------------------<-", @@ -1065,6 +1065,11 @@ "create.item_attributes.in_item_group.inverted": "%1$sに属していないか", "create.item_attributes.added_by": "%1$sによって追加されたか", "create.item_attributes.added_by.inverted": "%1$sによって追加されていないか", + "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.has_enchant": "エンチャントされているか%1$s", "create.item_attributes.has_enchant.inverted": "エンチャントがされていないか", "create.item_attributes.color": "%1$sで染められているか", diff --git a/src/generated/resources/assets/create/lang/unfinished/ko_kr.json b/src/generated/resources/assets/create/lang/unfinished/ko_kr.json index 849b7d5d0..7a9525b05 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ko_kr.json +++ b/src/generated/resources/assets/create/lang/unfinished/ko_kr.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 277", + "_": "Missing Localizations: 282", "_": "->------------------------] Game Elements [------------------------<-", @@ -1065,6 +1065,11 @@ "create.item_attributes.in_item_group.inverted": "'%1$s' 그룹에 속해 있지 않은", "create.item_attributes.added_by": "%1$s에 의해 추가된", "create.item_attributes.added_by.inverted": "%1$s에 의해 추가되지 않은", + "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.has_enchant": "%1$s 마법이 부여된", "create.item_attributes.has_enchant.inverted": "%1$s 마법이 부여되지 않은", "create.item_attributes.color": "염색된 %1$s", diff --git a/src/generated/resources/assets/create/lang/unfinished/nl_nl.json b/src/generated/resources/assets/create/lang/unfinished/nl_nl.json index b2204fd12..6e720b683 100644 --- a/src/generated/resources/assets/create/lang/unfinished/nl_nl.json +++ b/src/generated/resources/assets/create/lang/unfinished/nl_nl.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 1752", + "_": "Missing Localizations: 1757", "_": "->------------------------] Game Elements [------------------------<-", @@ -1065,6 +1065,11 @@ "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.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.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", diff --git a/src/generated/resources/assets/create/lang/unfinished/pl_pl.json b/src/generated/resources/assets/create/lang/unfinished/pl_pl.json index 8d16ccfee..ac7b2ab5f 100644 --- a/src/generated/resources/assets/create/lang/unfinished/pl_pl.json +++ b/src/generated/resources/assets/create/lang/unfinished/pl_pl.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 241", + "_": "Missing Localizations: 246", "_": "->------------------------] Game Elements [------------------------<-", @@ -1065,6 +1065,11 @@ "create.item_attributes.in_item_group.inverted": "nie jest w grupie \"%1$s\"", "create.item_attributes.added_by": "dodany przez %1$s", "create.item_attributes.added_by.inverted": "niedodany przez %1$s", + "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.has_enchant": "posiada zaklęcie %1$s", "create.item_attributes.has_enchant.inverted": "nie posiada zaklęcia %1$s", "create.item_attributes.color": "jest zafarbowane, kolor %1$s", 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 6163cba3a..922fc02fa 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: 1793", + "_": "Missing Localizations: 1798", "_": "->------------------------] Game Elements [------------------------<-", @@ -1065,6 +1065,11 @@ "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.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.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", diff --git a/src/generated/resources/assets/create/lang/unfinished/ru_ru.json b/src/generated/resources/assets/create/lang/unfinished/ru_ru.json index 8a6c396f5..be732ba5f 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ru_ru.json +++ b/src/generated/resources/assets/create/lang/unfinished/ru_ru.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 272", + "_": "Missing Localizations: 277", "_": "->------------------------] Game Elements [------------------------<-", @@ -1065,6 +1065,11 @@ "create.item_attributes.in_item_group.inverted": "не принадлежит '%1$s'", "create.item_attributes.added_by": "был добавлен %1$s", "create.item_attributes.added_by.inverted": "не был добавлен %1$s", + "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.has_enchant": "зачарован на %1$s", "create.item_attributes.has_enchant.inverted": "не зачарован на %1$s", "create.item_attributes.color": "Покрашено в %1$s", 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 d7b417dfc..0c4e333d2 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: 282", + "_": "Missing Localizations: 287", "_": "->------------------------] Game Elements [------------------------<-", @@ -1065,6 +1065,11 @@ "create.item_attributes.in_item_group.inverted": "不属于%1$s", "create.item_attributes.added_by": "由%1$s添加", "create.item_attributes.added_by.inverted": "不是由%1$s添加", + "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.has_enchant": "有附魔效果%1$s", "create.item_attributes.has_enchant.inverted": "没有附魔效果%1$s", "create.item_attributes.color": "染色为%1$s", diff --git a/src/generated/resources/assets/create/lang/unfinished/zh_tw.json b/src/generated/resources/assets/create/lang/unfinished/zh_tw.json index 8724d55b5..8ae83ff3c 100644 --- a/src/generated/resources/assets/create/lang/unfinished/zh_tw.json +++ b/src/generated/resources/assets/create/lang/unfinished/zh_tw.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 277", + "_": "Missing Localizations: 282", "_": "->------------------------] Game Elements [------------------------<-", @@ -1065,6 +1065,11 @@ "create.item_attributes.in_item_group.inverted": "不屬於%1$s", "create.item_attributes.added_by": "由%1$s添加", "create.item_attributes.added_by.inverted": "不是由%1$s添加", + "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.has_enchant": "有附魔效果%1$s", "create.item_attributes.has_enchant.inverted": "沒有附魔效果%1$s", "create.item_attributes.color": "已被染色成 %1$s", diff --git a/src/generated/resources/data/create/advancements/aesthetics.json b/src/generated/resources/data/create/advancements/aesthetics.json index 59a86f429..d723cbe38 100644 --- a/src/generated/resources/data/create/advancements/aesthetics.json +++ b/src/generated/resources/data/create/advancements/aesthetics.json @@ -28,8 +28,8 @@ "trigger": "create:bracket_apply", "conditions": { "accepted_entries": [ - "create:large_cogwheel", - "create:cogwheel" + "create:cogwheel", + "create:large_cogwheel" ] } }, diff --git a/src/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 4f79b0eee..967896313 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 @@ -9,6 +9,8 @@ import java.util.function.BiPredicate; import java.util.function.Predicate; import java.util.stream.Collectors; +import com.simibubi.create.content.logistics.item.filter.attribute.ShulkerFillLevelAttribute; + import org.apache.commons.lang3.StringUtils; import com.simibubi.create.AllRecipeTypes; @@ -56,6 +58,7 @@ public interface ItemAttribute { static ItemAttribute inItemGroup = register(new InItemGroup(ItemGroup.MISC)); static ItemAttribute addedBy = register(new InItemGroup.AddedBy("dummy")); static ItemAttribute hasEnchant = register(EnchantAttribute.EMPTY); + static ItemAttribute shulkerFillLevel = register(ShulkerFillLevelAttribute.EMPTY); static ItemAttribute hasColor = register(ColorAttribute.EMPTY); static ItemAttribute hasFluid = register(FluidContentsAttribute.EMPTY); static ItemAttribute hasName = register(new ItemNameAttribute("dummy")); diff --git a/src/main/java/com/simibubi/create/content/logistics/item/filter/attribute/ShulkerFillLevelAttribute.java b/src/main/java/com/simibubi/create/content/logistics/item/filter/attribute/ShulkerFillLevelAttribute.java new file mode 100644 index 000000000..14cf79a44 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/logistics/item/filter/attribute/ShulkerFillLevelAttribute.java @@ -0,0 +1,109 @@ +package com.simibubi.create.content.logistics.item.filter.attribute; + +import java.util.Arrays; +import java.util.List; +import java.util.function.Predicate; +import java.util.stream.Collectors; + +import javax.annotation.Nullable; + +import com.simibubi.create.content.logistics.item.filter.ItemAttribute; +import com.simibubi.create.foundation.utility.Lang; + +import net.minecraft.block.Block; +import net.minecraft.block.ShulkerBoxBlock; +import net.minecraft.inventory.ItemStackHelper; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.util.NonNullList; + +public class ShulkerFillLevelAttribute implements ItemAttribute { + public static final ShulkerFillLevelAttribute EMPTY = new ShulkerFillLevelAttribute(null); + + private final ShulkerLevels levels; + + public ShulkerFillLevelAttribute(ShulkerLevels levels) { + this.levels = levels; + } + + @Override + public boolean appliesTo(ItemStack stack) { + return levels != null && levels.canApply(stack); + } + + @Override + public List listAttributesOf(ItemStack stack) { + return Arrays.stream(ShulkerLevels.values()) + .filter(shulkerLevels -> shulkerLevels.canApply(stack)) + .map(ShulkerFillLevelAttribute::new) + .collect(Collectors.toList()); + } + + @Override + public String getTranslationKey() { + return "shulker_level"; + } + + @Override + public Object[] getTranslationParameters() { + String parameter = ""; + if (levels != null) + parameter = Lang.translate("item_attributes." + getTranslationKey() + "." + levels.key).getString(); + return new Object[]{parameter}; + } + + @Override + public void writeNBT(CompoundNBT nbt) { + if (levels != null) + nbt.putString("id", levels.key); + } + + @Override + public ItemAttribute readNBT(CompoundNBT nbt) { + return nbt.contains("id") ? new ShulkerFillLevelAttribute(ShulkerLevels.fromKey(nbt.getString("id"))) : EMPTY; + } + + enum ShulkerLevels { + EMPTY("empty", amount -> amount == 0), + PARTIAL("partial", amount -> amount > 0 && amount < Integer.MAX_VALUE), + FULL("full", amount -> amount == Integer.MAX_VALUE); + + private final Predicate requiredSize; + private final String key; + + ShulkerLevels(String key, Predicate requiredSize) { + this.key = key; + this.requiredSize = requiredSize; + } + + @Nullable + public static ShulkerLevels fromKey(String key) { + return Arrays.stream(values()).filter(shulkerLevels -> shulkerLevels.key.equals(key)).findFirst().orElse(null); + } + + private static boolean isShulker(ItemStack stack) { + return Block.getBlockFromItem(stack.getItem()) instanceof ShulkerBoxBlock; + } + + public boolean canApply(ItemStack testStack) { + if (!isShulker(testStack)) + return false; + CompoundNBT compoundnbt = testStack.getChildTag("BlockEntityTag"); + if (compoundnbt == null) + return requiredSize.test(0); + if (compoundnbt.contains("LootTable", 8)) + return false; + if (compoundnbt.contains("Items", 9)) { + int rawSize = compoundnbt.getList("Items", 10).size(); + if (rawSize < 27) + return requiredSize.test(rawSize); + + NonNullList inventory = NonNullList.withSize(27, ItemStack.EMPTY); + ItemStackHelper.loadAllItems(compoundnbt, inventory); + boolean isFull = inventory.stream().allMatch(itemStack -> !itemStack.isEmpty() && itemStack.getCount() == itemStack.getMaxStackSize()); + return requiredSize.test(isFull ? Integer.MAX_VALUE : rawSize); + } + return requiredSize.test(0); + } + } +} diff --git a/src/main/resources/assets/create/lang/default/messages.json b/src/main/resources/assets/create/lang/default/messages.json index 4fc54ecfd..29239e841 100644 --- a/src/main/resources/assets/create/lang/default/messages.json +++ b/src/main/resources/assets/create/lang/default/messages.json @@ -391,6 +391,12 @@ "create.item_attributes.added_by": "was added by %1$s", "create.item_attributes.added_by.inverted": "was not added by %1$s", + "create.item_attributes.shulker_level": "is shulker %1$s", + "create.item_attributes.shulker_level.inverted": "is shulker not %1$s", + "create.item_attributes.shulker_level.full": "full", + "create.item_attributes.shulker_level.empty": "empty", + "create.item_attributes.shulker_level.partial": "partially filled", + "create.item_attributes.has_enchant": "is enchanted with %1$s", "create.item_attributes.has_enchant.inverted": "is not enchanted with %1$s", "create.item_attributes.color": "is dyed %1$s", @@ -504,7 +510,7 @@ "create.crafting_blueprint.manually_assigned": "Manually assigned", "create.crafting_blueprint.secondary_display_slot": "Secondary Display Slot", "create.crafting_blueprint.optional": "Optional", - + "create.potato_cannon.ammo.attack_damage": "%1$s Attack Damage", "create.potato_cannon.ammo.reload_ticks": "%1$s Reload Ticks", "create.potato_cannon.ammo.knockback": "%1$s Knockback", From 5a031bb99db2292f9bcb2b715e0c047d0266b28e Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Thu, 8 Jul 2021 16:22:59 +0200 Subject: [PATCH 044/118] CrushCrushCrush - Added some rudimentary crushing ambience - Dyed nixie tubes now return the correct item for Pickblock and Schematicannons --- src/generated/resources/.cache/cache | 32 ++--- .../resources/assets/create/lang/en_us.json | 1 + .../assets/create/lang/unfinished/de_de.json | 3 +- .../assets/create/lang/unfinished/es_es.json | 3 +- .../assets/create/lang/unfinished/es_mx.json | 3 +- .../assets/create/lang/unfinished/fr_fr.json | 3 +- .../assets/create/lang/unfinished/it_it.json | 3 +- .../assets/create/lang/unfinished/ja_jp.json | 3 +- .../assets/create/lang/unfinished/ko_kr.json | 3 +- .../assets/create/lang/unfinished/nl_nl.json | 3 +- .../assets/create/lang/unfinished/pl_pl.json | 3 +- .../assets/create/lang/unfinished/pt_br.json | 3 +- .../assets/create/lang/unfinished/ru_ru.json | 3 +- .../assets/create/lang/unfinished/zh_cn.json | 3 +- .../assets/create/lang/unfinished/zh_tw.json | 3 +- .../resources/assets/create/sounds.json | 25 ++++ .../data/create/advancements/aesthetics.json | 4 +- .../com/simibubi/create/AllSoundEvents.java | 29 ++++- .../components/crank/HandCrankTileEntity.java | 3 + .../CrushingWheelControllerTileEntity.java | 119 +++++++++++------- .../millstone/MillstoneTileEntity.java | 23 +++- .../block/redstone/NixieTubeBlock.java | 17 ++- .../create/foundation/sound/SoundScapes.java | 15 ++- 23 files changed, 223 insertions(+), 84 deletions(-) diff --git a/src/generated/resources/.cache/cache b/src/generated/resources/.cache/cache index 2b427ad1d..48c7845c2 100644 --- a/src/generated/resources/.cache/cache +++ b/src/generated/resources/.cache/cache @@ -426,20 +426,20 @@ a3a11524cd3515fc01d905767b4b7ea782adaf03 assets/create/blockstates/yellow_seat.j 7f39521b211441f5c3e06d60c5978cebe16cacfb assets/create/blockstates/zinc_block.json b7181bcd8182b2f17088e5aa881f374c9c65470c assets/create/blockstates/zinc_ore.json e1d3c02695cbd2ee7bbede97f72941835634a3a5 assets/create/lang/en_ud.json -ae6c1882c3049b20409f233d7984fdb6498e1cec assets/create/lang/en_us.json -4d1f84c2fe9d6ed58d9ce555f09b408c3a2d5349 assets/create/lang/unfinished/de_de.json -3fa0debc2eff551c3cbbdf917766e835f803d467 assets/create/lang/unfinished/es_es.json -6f0034ff2b0a4dc2ef1c390aa76a88e325e17159 assets/create/lang/unfinished/es_mx.json -a8bf7fa74b00f2ce89d3687e5cee17607f18fa5f assets/create/lang/unfinished/fr_fr.json -7633b95d4e27ca0edd77f2d88fcc90e279e09edf assets/create/lang/unfinished/it_it.json -423b5f8f07b0ca5825c038859f9b506a28982659 assets/create/lang/unfinished/ja_jp.json -20f19b6699ab131e64b73283f1a5dfd4e3d47bb8 assets/create/lang/unfinished/ko_kr.json -34435d8e73e3b06095b6dbb77f133e9695c9e39c assets/create/lang/unfinished/nl_nl.json -f8aafddf029b41c3ad46ed81ff2ccd5289ef2a65 assets/create/lang/unfinished/pl_pl.json -7f2cf06e9e33f14ca61fd4632df7adfa02b33311 assets/create/lang/unfinished/pt_br.json -9f44fe3b87225017fd7975ee8fd5e4ff309e6296 assets/create/lang/unfinished/ru_ru.json -a99c3e9642cc1748a30e011e0651f89e206175a0 assets/create/lang/unfinished/zh_cn.json -79d2ba1dee4c4d677dd9e99878a522bfb575c3f4 assets/create/lang/unfinished/zh_tw.json +e45592394573a5e5bae6520976ef0760e27833b1 assets/create/lang/en_us.json +3e80da8da3fd705c5a9abcef3bb88c848d694452 assets/create/lang/unfinished/de_de.json +2957ff5031fce02979fe0029756705c80909160f assets/create/lang/unfinished/es_es.json +58c0101a854c4a717058b593572707a035b2bd17 assets/create/lang/unfinished/es_mx.json +2dca9cad484ec7991d4303f7b79b613da85aa213 assets/create/lang/unfinished/fr_fr.json +93c30ea554df1b96d493f3c15660665342ea54e2 assets/create/lang/unfinished/it_it.json +2d19c1bd0b16c7f4d3cab91566b10f8b20fd92b8 assets/create/lang/unfinished/ja_jp.json +00a5e891f481ddbbd2e043f05d4c60c8519d30b4 assets/create/lang/unfinished/ko_kr.json +3264c35ea11ad73c63b42d3c3e86b3e4a683e8a7 assets/create/lang/unfinished/nl_nl.json +284b09bca2e8dafbf6c39d562a6bec7d6d9e277e assets/create/lang/unfinished/pl_pl.json +ebabdc30b05702af5cc4b28e95fa5792035db73a assets/create/lang/unfinished/pt_br.json +ab37de7ff2c14415e29782bba6382233e585fa6f assets/create/lang/unfinished/ru_ru.json +f70cb0834d60693a62bef99c2b81b40fae37417a assets/create/lang/unfinished/zh_cn.json +f78d0693929030d6ede68d4233407f6c832ea93e assets/create/lang/unfinished/zh_tw.json 487a511a01b2a4531fb672f917922312db78f958 assets/create/models/block/acacia_window.json b48060cba1a382f373a05bf0039054053eccf076 assets/create/models/block/acacia_window_pane_noside.json 3066db1bf03cffa1a9c7fbacf47ae586632f4eb3 assets/create/models/block/acacia_window_pane_noside_alt.json @@ -1698,8 +1698,8 @@ d080b1b25e5bc8baf5aee68691b08c7f12ece3b0 assets/create/models/item/windmill_bear 866fbb0ce2878a73e0440d1caf6534c8bd7c384f assets/create/models/item/zinc_ingot.json a80fb25a0b655e76be986b5b49fcb0f03461a1ab assets/create/models/item/zinc_nugget.json b1689617190c05ef34bd18456b0c7ae09bb3210f assets/create/models/item/zinc_ore.json -bbe7fc4aef29420319f59d02d4cd376a78244e70 assets/create/sounds.json -0f1b4b980afba9bf2caf583b88e261bba8b10313 data/create/advancements/aesthetics.json +58880e397902f8ca5b3b59ed4423e626109ddc4c assets/create/sounds.json +5d0cc4c0255dc241e61c173b31ddca70c88d08e4 data/create/advancements/aesthetics.json 187921fa131b06721bfaf63f2623a28c141aae9a data/create/advancements/andesite_alloy.json 0ea2db7173b5be28b289ea7c9a6a0cf5805c60c7 data/create/advancements/andesite_casing.json 83c046bd200623933545c9e4326f782fb02c87fa data/create/advancements/arm_blaze_burner.json diff --git a/src/generated/resources/assets/create/lang/en_us.json b/src/generated/resources/assets/create/lang/en_us.json index ed2b1303c..8cbb2a13c 100644 --- a/src/generated/resources/assets/create/lang/en_us.json +++ b/src/generated/resources/assets/create/lang/en_us.json @@ -1221,6 +1221,7 @@ "create.subtitle.mechanical_press_activation_belt": "Mechanical Press bonks", "create.subtitle.fwoomp": "Potato Launcher fwoomps", "create.subtitle.worldshaper_place": "Worldshaper zaps", + "create.subtitle.crushing_1": "Crushing noises", "create.subtitle.depot_slide": "Item slides", "create.subtitle.saw_activate_stone": "Mechanical Saw activates", "create.subtitle.blaze_munch": "Blaze Burner munches", 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 7b24da461..be3d6d8bd 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: 1124", + "_": "Missing Localizations: 1125", "_": "->------------------------] Game Elements [------------------------<-", @@ -1222,6 +1222,7 @@ "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.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": "Lohe kaut glücklich", 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 f6e95345b..c9364aa5f 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: 47", + "_": "Missing Localizations: 48", "_": "->------------------------] Game Elements [------------------------<-", @@ -1222,6 +1222,7 @@ "create.subtitle.mechanical_press_activation_belt": "", "create.subtitle.fwoomp": "", "create.subtitle.worldshaper_place": "", + "create.subtitle.crushing_1": "UNLOCALIZED: Crushing noises", "create.subtitle.depot_slide": "", "create.subtitle.saw_activate_stone": "", "create.subtitle.blaze_munch": "", diff --git a/src/generated/resources/assets/create/lang/unfinished/es_mx.json b/src/generated/resources/assets/create/lang/unfinished/es_mx.json index 6204bb650..3f38ce3fe 100644 --- a/src/generated/resources/assets/create/lang/unfinished/es_mx.json +++ b/src/generated/resources/assets/create/lang/unfinished/es_mx.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 1491", + "_": "Missing Localizations: 1492", "_": "->------------------------] Game Elements [------------------------<-", @@ -1222,6 +1222,7 @@ "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.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", diff --git a/src/generated/resources/assets/create/lang/unfinished/fr_fr.json b/src/generated/resources/assets/create/lang/unfinished/fr_fr.json index 607b17dea..18bf25b10 100644 --- a/src/generated/resources/assets/create/lang/unfinished/fr_fr.json +++ b/src/generated/resources/assets/create/lang/unfinished/fr_fr.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 1376", + "_": "Missing Localizations: 1377", "_": "->------------------------] Game Elements [------------------------<-", @@ -1222,6 +1222,7 @@ "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.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", diff --git a/src/generated/resources/assets/create/lang/unfinished/it_it.json b/src/generated/resources/assets/create/lang/unfinished/it_it.json index 2cd984e28..4411d5325 100644 --- a/src/generated/resources/assets/create/lang/unfinished/it_it.json +++ b/src/generated/resources/assets/create/lang/unfinished/it_it.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 904", + "_": "Missing Localizations: 905", "_": "->------------------------] Game Elements [------------------------<-", @@ -1222,6 +1222,7 @@ "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.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": "Il blaze lo gusta felicemente", diff --git a/src/generated/resources/assets/create/lang/unfinished/ja_jp.json b/src/generated/resources/assets/create/lang/unfinished/ja_jp.json index b088a2f33..6d61c2587 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ja_jp.json +++ b/src/generated/resources/assets/create/lang/unfinished/ja_jp.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 36", + "_": "Missing Localizations: 37", "_": "->------------------------] Game Elements [------------------------<-", @@ -1222,6 +1222,7 @@ "create.subtitle.mechanical_press_activation_belt": "メカニカルプレスがボンと鳴る", "create.subtitle.fwoomp": "ポテトランチャーがバキューンと鳴る", "create.subtitle.worldshaper_place": "ワールドシェーパーが設置する", + "create.subtitle.crushing_1": "UNLOCALIZED: Crushing noises", "create.subtitle.depot_slide": "アイテムが滑る", "create.subtitle.saw_activate_stone": "メカニカルソーが動作する", "create.subtitle.blaze_munch": "ブレイズの咀嚼音", diff --git a/src/generated/resources/assets/create/lang/unfinished/ko_kr.json b/src/generated/resources/assets/create/lang/unfinished/ko_kr.json index 7a9525b05..a371fe7ac 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ko_kr.json +++ b/src/generated/resources/assets/create/lang/unfinished/ko_kr.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 282", + "_": "Missing Localizations: 283", "_": "->------------------------] Game Elements [------------------------<-", @@ -1222,6 +1222,7 @@ "create.subtitle.mechanical_press_activation_belt": "기계식 압착기가 무언가를 압착함", "create.subtitle.fwoomp": "UNLOCALIZED: Potato Launcher fwoomps", "create.subtitle.worldshaper_place": "UNLOCALIZED: Worldshaper zaps", + "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": "블레이즈 가열기가 무언가를 먹어 치움", diff --git a/src/generated/resources/assets/create/lang/unfinished/nl_nl.json b/src/generated/resources/assets/create/lang/unfinished/nl_nl.json index 6e720b683..e6b4c86d5 100644 --- a/src/generated/resources/assets/create/lang/unfinished/nl_nl.json +++ b/src/generated/resources/assets/create/lang/unfinished/nl_nl.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 1757", + "_": "Missing Localizations: 1758", "_": "->------------------------] Game Elements [------------------------<-", @@ -1222,6 +1222,7 @@ "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.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", diff --git a/src/generated/resources/assets/create/lang/unfinished/pl_pl.json b/src/generated/resources/assets/create/lang/unfinished/pl_pl.json index ac7b2ab5f..d7abc6373 100644 --- a/src/generated/resources/assets/create/lang/unfinished/pl_pl.json +++ b/src/generated/resources/assets/create/lang/unfinished/pl_pl.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 246", + "_": "Missing Localizations: 247", "_": "->------------------------] Game Elements [------------------------<-", @@ -1222,6 +1222,7 @@ "create.subtitle.mechanical_press_activation_belt": "Mechaniczna prasa stuka", "create.subtitle.fwoomp": "UNLOCALIZED: Potato Launcher fwoomps", "create.subtitle.worldshaper_place": "Kształter strzela", + "create.subtitle.crushing_1": "UNLOCALIZED: Crushing noises", "create.subtitle.depot_slide": "Przedmiot ślizga się", "create.subtitle.saw_activate_stone": "UNLOCALIZED: Mechanical Saw activates", "create.subtitle.blaze_munch": "Płomyk szczęśliwie przeżuwa", 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 922fc02fa..392f1d8a1 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: 1798", + "_": "Missing Localizations: 1799", "_": "->------------------------] Game Elements [------------------------<-", @@ -1222,6 +1222,7 @@ "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.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", diff --git a/src/generated/resources/assets/create/lang/unfinished/ru_ru.json b/src/generated/resources/assets/create/lang/unfinished/ru_ru.json index be732ba5f..cf74c44a8 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ru_ru.json +++ b/src/generated/resources/assets/create/lang/unfinished/ru_ru.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 277", + "_": "Missing Localizations: 278", "_": "->------------------------] Game Elements [------------------------<-", @@ -1222,6 +1222,7 @@ "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.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": "Всполох радостно жуёт", 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 0c4e333d2..9acfa3846 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: 287", + "_": "Missing Localizations: 288", "_": "->------------------------] Game Elements [------------------------<-", @@ -1222,6 +1222,7 @@ "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.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": "烈焰人:咀嚼", diff --git a/src/generated/resources/assets/create/lang/unfinished/zh_tw.json b/src/generated/resources/assets/create/lang/unfinished/zh_tw.json index 8ae83ff3c..5b001c079 100644 --- a/src/generated/resources/assets/create/lang/unfinished/zh_tw.json +++ b/src/generated/resources/assets/create/lang/unfinished/zh_tw.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 282", + "_": "Missing Localizations: 283", "_": "->------------------------] Game Elements [------------------------<-", @@ -1222,6 +1222,7 @@ "create.subtitle.mechanical_press_activation_belt": "液壓機工作", "create.subtitle.fwoomp": "UNLOCALIZED: Potato Launcher fwoomps", "create.subtitle.worldshaper_place": "UNLOCALIZED: Worldshaper zaps", + "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": "烈焰使者開心地吃著", diff --git a/src/generated/resources/assets/create/sounds.json b/src/generated/resources/assets/create/sounds.json index bfcbfc44e..5e22450ae 100644 --- a/src/generated/resources/assets/create/sounds.json +++ b/src/generated/resources/assets/create/sounds.json @@ -128,6 +128,31 @@ } ] }, + "crushing_1": { + "sounds": [ + { + "name": "minecraft:block.netherrack.hit", + "type": "event" + } + ], + "subtitle": "create.subtitle.crushing_1" + }, + "crushing_2": { + "sounds": [ + { + "name": "minecraft:block.gravel.place", + "type": "event" + } + ] + }, + "crushing_3": { + "sounds": [ + { + "name": "minecraft:block.netherite_block.break", + "type": "event" + } + ] + }, "deny": { "sounds": [ { diff --git a/src/generated/resources/data/create/advancements/aesthetics.json b/src/generated/resources/data/create/advancements/aesthetics.json index d723cbe38..59a86f429 100644 --- a/src/generated/resources/data/create/advancements/aesthetics.json +++ b/src/generated/resources/data/create/advancements/aesthetics.json @@ -28,8 +28,8 @@ "trigger": "create:bracket_apply", "conditions": { "accepted_entries": [ - "create:cogwheel", - "create:large_cogwheel" + "create:large_cogwheel", + "create:cogwheel" ] } }, diff --git a/src/main/java/com/simibubi/create/AllSoundEvents.java b/src/main/java/com/simibubi/create/AllSoundEvents.java index 2d7b4afa0..8b2f07adf 100644 --- a/src/main/java/com/simibubi/create/AllSoundEvents.java +++ b/src/main/java/com/simibubi/create/AllSoundEvents.java @@ -199,6 +199,21 @@ public class AllSoundEvents { .category(SoundCategory.BLOCKS) .build(), + CRUSHING_1 = create("crushing_1").subtitle("Crushing noises") + .playExisting(SoundEvents.BLOCK_NETHERRACK_HIT) + .category(SoundCategory.BLOCKS) + .build(), + + CRUSHING_2 = create("crushing_2").noSubtitle() + .playExisting(SoundEvents.BLOCK_GRAVEL_PLACE) + .category(SoundCategory.BLOCKS) + .build(), + + CRUSHING_3 = create("crushing_3").noSubtitle() + .playExisting(SoundEvents.BLOCK_NETHERITE_BLOCK_BREAK) + .category(SoundCategory.BLOCKS) + .build(), + PECULIAR_BELL_USE = create("peculiar_bell_use").subtitle("Peculiar Bell tolls") .playExisting(SoundEvents.BLOCK_BELL_USE) .category(SoundCategory.BLOCKS) @@ -230,7 +245,8 @@ public class AllSoundEvents { public static JsonElement provideLangEntries() { JsonObject object = new JsonObject(); for (SoundEntry entry : entries.values()) - object.addProperty(entry.getSubtitleKey(), entry.getSubtitle()); + if (entry.hasSubtitle()) + object.addProperty(entry.getSubtitleKey(), entry.getSubtitle()); return object; } @@ -306,6 +322,11 @@ public class AllSoundEvents { this.subtitle = subtitle; return this; } + + public SoundEntryBuilder noSubtitle() { + this.subtitle = null; + return this; + } public SoundEntryBuilder category(SoundCategory category) { this.category = category; @@ -361,6 +382,10 @@ public class AllSoundEvents { public ResourceLocation getLocation() { return Create.asResource(id); } + + public boolean hasSubtitle() { + return subtitle != null; + } public String getSubtitle() { return subtitle; @@ -460,7 +485,7 @@ public class AllSoundEvents { s.addProperty("type", "event"); list.add(s); entry.add("sounds", list); - if (i == 0) + if (i == 0 && hasSubtitle()) entry.addProperty("subtitle", getSubtitleKey()); json.add(getIdOf(i), entry); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/crank/HandCrankTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/crank/HandCrankTileEntity.java index 259a89b10..13c10c6e3 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/crank/HandCrankTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/crank/HandCrankTileEntity.java @@ -9,6 +9,8 @@ import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.nbt.CompoundNBT; import net.minecraft.tileentity.TileEntityType; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; public class HandCrankTileEntity extends GeneratingKineticTileEntity { @@ -82,6 +84,7 @@ public class HandCrankTileEntity extends GeneratingKineticTileEntity { } @Override + @OnlyIn(Dist.CLIENT) public void tickAudio() { super.tickAudio(); if (inUse > 0 && AnimationTickHolder.getTicks() % 10 == 0) { diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/crusher/CrushingWheelControllerTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/crusher/CrushingWheelControllerTileEntity.java index e8562843c..dbe728ad9 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/crusher/CrushingWheelControllerTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/crusher/CrushingWheelControllerTileEntity.java @@ -13,6 +13,8 @@ import com.simibubi.create.content.contraptions.processing.ProcessingInventory; import com.simibubi.create.content.contraptions.processing.ProcessingRecipe; import com.simibubi.create.foundation.config.AllConfigs; import com.simibubi.create.foundation.item.ItemHelper; +import com.simibubi.create.foundation.sound.SoundScapes; +import com.simibubi.create.foundation.sound.SoundScapes.AmbienceGroup; import com.simibubi.create.foundation.tileEntity.SmartTileEntity; import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; import com.simibubi.create.foundation.tileEntity.behaviour.belt.DirectBeltInputBehaviour; @@ -38,8 +40,11 @@ import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.vector.Vector3d; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.common.util.LazyOptional; +import net.minecraftforge.fml.DistExecutor; import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.IItemHandlerModifiable; import net.minecraftforge.items.wrapper.RecipeWrapper; @@ -87,37 +92,41 @@ public class CrushingWheelControllerTileEntity extends SmartTileEntity { if (searchForEntity) { searchForEntity = false; List search = world.getEntitiesInAABBexcluding(null, new AxisAlignedBB(getPos()), - e -> entityUUID.equals(e.getUniqueID())); + e -> entityUUID.equals(e.getUniqueID())); if (search.isEmpty()) clear(); else processingEntity = search.get(0); } - - if (!isOccupied()) return; if (crushingspeed == 0) return; + if (world.isRemote) + DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> this.tickAudio()); + float speed = crushingspeed * 4; Vector3d centerPos = VecHelper.getCenterOf(pos); Direction facing = getBlockState().get(FACING); - int offset = facing.getAxisDirection().getOffset(); - Vector3d outSpeed = new Vector3d((facing.getAxis() == Axis.X ? 0.25D : 0.0D) * offset - , offset == 1 ? (facing.getAxis() == Axis.Y ? 0.5D : 0.0D) : 0.0D //Increased upwards speed so upwards crushing wheels shoot out the item properly. - , (facing.getAxis() == Axis.Z ? 0.25D : 0.0D) * offset); //No downwards speed, so downwards crushing wheels drop the items as before. - Vector3d outPos = centerPos.add((facing.getAxis() == Axis.X ? .55f * offset : 0f) - , (facing.getAxis() == Axis.Y ? .55f * offset : 0f) - , (facing.getAxis() == Axis.Z ? .55f * offset : 0f)); + int offset = facing.getAxisDirection() + .getOffset(); + Vector3d outSpeed = new Vector3d((facing.getAxis() == Axis.X ? 0.25D : 0.0D) * offset, + offset == 1 ? (facing.getAxis() == Axis.Y ? 0.5D : 0.0D) : 0.0D // Increased upwards speed so upwards + // crushing wheels shoot out the item + // properly. + , (facing.getAxis() == Axis.Z ? 0.25D : 0.0D) * offset); // No downwards speed, so downwards crushing wheels + // drop the items as before. + Vector3d outPos = centerPos.add((facing.getAxis() == Axis.X ? .55f * offset : 0f), + (facing.getAxis() == Axis.Y ? .55f * offset : 0f), (facing.getAxis() == Axis.Z ? .55f * offset : 0f)); if (!hasEntity()) { float processingSpeed = - MathHelper.clamp((speed) / (!inventory.appliedRecipe ? MathHelper.log2(inventory.getStackInSlot(0) - .getCount()) : 1), .25f, 20); + MathHelper.clamp((speed) / (!inventory.appliedRecipe ? MathHelper.log2(inventory.getStackInSlot(0) + .getCount()) : 1), .25f, 20); inventory.remainingTime -= processingSpeed; spawnParticles(inventory.getStackInSlot(0)); @@ -136,12 +145,13 @@ public class CrushingWheelControllerTileEntity extends SmartTileEntity { } inventory.remainingTime = 0; - //Output Items - if (facing.getAxis().isHorizontal() || facing == Direction.DOWN) { - BlockPos nextPos = pos.add(facing.getAxis() == Axis.X ? 1f * offset : 0f - , (-1f) - , facing.getAxis() == Axis.Z ? 1f * offset : 0f); - DirectBeltInputBehaviour behaviour = TileEntityBehaviour.get(world, nextPos, DirectBeltInputBehaviour.TYPE); + // Output Items + if (facing.getAxis() + .isHorizontal() || facing == Direction.DOWN) { + BlockPos nextPos = pos.add(facing.getAxis() == Axis.X ? 1f * offset : 0f, (-1f), + facing.getAxis() == Axis.Z ? 1f * offset : 0f); + DirectBeltInputBehaviour behaviour = + TileEntityBehaviour.get(world, nextPos, DirectBeltInputBehaviour.TYPE); if (behaviour != null) { boolean changed = false; if (!behaviour.canInsertFromSide(facing)) @@ -164,7 +174,7 @@ public class CrushingWheelControllerTileEntity extends SmartTileEntity { } } - //Eject Items + // Eject Items for (int slot = 0; slot < inventory.getSlots(); slot++) { ItemStack stack = inventory.getStackInSlot(slot); if (stack.isEmpty()) @@ -172,18 +182,17 @@ public class CrushingWheelControllerTileEntity extends SmartTileEntity { ItemEntity entityIn = new ItemEntity(world, outPos.x, outPos.y, outPos.z, stack); entityIn.setMotion(outSpeed); entityIn.getPersistentData() - .put("BypassCrushingWheel", NBTUtil.writeBlockPos(pos)); + .put("BypassCrushingWheel", NBTUtil.writeBlockPos(pos)); world.addEntity(entityIn); } inventory.clear(); world.notifyBlockUpdate(pos, getBlockState(), getBlockState(), 2 | 16); - return; } if (!processingEntity.isAlive() || !processingEntity.getBoundingBox() - .intersects(new AxisAlignedBB(pos).grow(.5f))) { + .intersects(new AxisAlignedBB(pos).grow(.5f))) { clear(); return; } @@ -193,33 +202,40 @@ public class CrushingWheelControllerTileEntity extends SmartTileEntity { if (processingEntity.isSneaking()) xMotion = zMotion = 0; double movement = Math.max(-speed / 4f, -.5f) * -offset; - processingEntity.setMotion(new Vector3d(facing.getAxis() == Axis.X ? movement : xMotion - , facing.getAxis() == Axis.Y ? movement : 0f //Do not move entities upwards or downwards for horizontal crushers, - , facing.getAxis() == Axis.Z ? movement : zMotion)); //Or they'll only get their feet crushed. + processingEntity.setMotion( + new Vector3d(facing.getAxis() == Axis.X ? movement : xMotion, facing.getAxis() == Axis.Y ? movement : 0f // Do + // not + // move + // entities + // upwards + // or + // downwards + // for + // horizontal + // crushers, + , facing.getAxis() == Axis.Z ? movement : zMotion)); // Or they'll only get their feet crushed. if (world.isRemote) return; if (!(processingEntity instanceof ItemEntity)) { - Vector3d entityOutPos = outPos.add(facing.getAxis() == Axis.X ? .5f * offset : 0f - , facing.getAxis() == Axis.Y ? .5f * offset : 0f - , facing.getAxis() == Axis.Z ? .5f * offset : 0f); + Vector3d entityOutPos = outPos.add(facing.getAxis() == Axis.X ? .5f * offset : 0f, + facing.getAxis() == Axis.Y ? .5f * offset : 0f, facing.getAxis() == Axis.Z ? .5f * offset : 0f); int crusherDamage = AllConfigs.SERVER.kinetics.crushingDamage.get(); if (processingEntity instanceof LivingEntity) { - if ((((LivingEntity) processingEntity).getHealth() - crusherDamage <= 0) //Takes LivingEntity instances as exception, so it can move them before it would kill them. - && (((LivingEntity) processingEntity).hurtTime <= 0)) { //This way it can actually output the items to the right spot. - processingEntity.setPosition(entityOutPos.x - , entityOutPos.y - , entityOutPos.z); + if ((((LivingEntity) processingEntity).getHealth() - crusherDamage <= 0) // Takes LivingEntity instances + // as exception, so it can + // move them before it would + // kill them. + && (((LivingEntity) processingEntity).hurtTime <= 0)) { // This way it can actually output the items + // to the right spot. + processingEntity.setPosition(entityOutPos.x, entityOutPos.y, entityOutPos.z); } } - processingEntity.attackEntityFrom(CrushingWheelTileEntity.damageSource, - crusherDamage); + processingEntity.attackEntityFrom(CrushingWheelTileEntity.damageSource, crusherDamage); if (!processingEntity.isAlive()) { - processingEntity.setPosition(entityOutPos.x - , entityOutPos.y - , entityOutPos.z); + processingEntity.setPosition(entityOutPos.x, entityOutPos.y, entityOutPos.z); } return; } @@ -227,24 +243,33 @@ public class CrushingWheelControllerTileEntity extends SmartTileEntity { ItemEntity itemEntity = (ItemEntity) processingEntity; itemEntity.setPickupDelay(20); if (facing.getAxis() == Axis.Y) { - if (processingEntity.getY() * -offset < (centerPos.y - .25f) * -offset) { + if (processingEntity.getY() * -offset < (centerPos.y - .25f) * -offset) { intakeItem(itemEntity); } } else if (facing.getAxis() == Axis.Z) { - if (processingEntity.getZ() * -offset < (centerPos.z - .25f) * -offset) { + if (processingEntity.getZ() * -offset < (centerPos.z - .25f) * -offset) { intakeItem(itemEntity); } } else { - if (processingEntity.getX() * -offset < (centerPos.x - .25f) * -offset) { + if (processingEntity.getX() * -offset < (centerPos.x - .25f) * -offset) { intakeItem(itemEntity); } } } + @OnlyIn(Dist.CLIENT) + public void tickAudio() { + float pitch = MathHelper.clamp((crushingspeed / 256f) + .45f, .85f, 1f); + if (entityUUID == null && inventory.getStackInSlot(0) + .isEmpty()) + return; + SoundScapes.play(AmbienceGroup.CRUSHING, pos, pitch); + } + private void intakeItem(ItemEntity itemEntity) { inventory.clear(); inventory.setStackInSlot(0, itemEntity.getItem() - .copy()); + .copy()); itemInserted(inventory.getStackInSlot(0)); itemEntity.remove(); world.notifyBlockUpdate(pos, getBlockState(), getBlockState(), 2 | 16); @@ -257,14 +282,14 @@ public class CrushingWheelControllerTileEntity extends SmartTileEntity { IParticleData particleData = null; if (stack.getItem() instanceof BlockItem) particleData = new BlockParticleData(ParticleTypes.BLOCK, ((BlockItem) stack.getItem()).getBlock() - .getDefaultState()); + .getDefaultState()); else particleData = new ItemParticleData(ParticleTypes.ITEM, stack); Random r = world.rand; for (int i = 0; i < 4; i++) world.addParticle(particleData, pos.getX() + r.nextFloat(), pos.getY() + r.nextFloat(), - pos.getZ() + r.nextFloat(), 0, 0, 0); + pos.getZ() + r.nextFloat(), 0, 0, 0); } private void applyRecipe() { @@ -273,11 +298,11 @@ public class CrushingWheelControllerTileEntity extends SmartTileEntity { List list = new ArrayList<>(); if (recipe.isPresent()) { int rolls = inventory.getStackInSlot(0) - .getCount(); + .getCount(); inventory.clear(); for (int roll = 0; roll < rolls; roll++) { List rolledResults = recipe.get() - .rollResults(); + .rollResults(); for (int i = 0; i < rolledResults.size(); i++) { ItemStack stack = rolledResults.get(i); ItemHelper.addToList(stack, list); @@ -326,7 +351,7 @@ public class CrushingWheelControllerTileEntity extends SmartTileEntity { private void itemInserted(ItemStack stack) { Optional> recipe = findRecipe(); inventory.remainingTime = recipe.isPresent() ? recipe.get() - .getProcessingDuration() : 100; + .getProcessingDuration() : 100; inventory.appliedRecipe = false; } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/millstone/MillstoneTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/millstone/MillstoneTileEntity.java index d9c9fe512..411777059 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/millstone/MillstoneTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/millstone/MillstoneTileEntity.java @@ -5,6 +5,8 @@ import java.util.Optional; import com.simibubi.create.AllRecipeTypes; import com.simibubi.create.content.contraptions.base.KineticTileEntity; +import com.simibubi.create.foundation.sound.SoundScapes; +import com.simibubi.create.foundation.sound.SoundScapes.AmbienceGroup; import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; import com.simibubi.create.foundation.tileEntity.behaviour.belt.DirectBeltInputBehaviour; import com.simibubi.create.foundation.utility.VecHelper; @@ -19,6 +21,8 @@ import net.minecraft.util.Direction; import net.minecraft.util.Direction.Axis; import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.vector.Vector3d; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.common.util.LazyOptional; import net.minecraftforge.items.IItemHandler; @@ -41,13 +45,28 @@ public class MillstoneTileEntity extends KineticTileEntity { outputInv = new ItemStackHandler(9); capability = LazyOptional.of(MillstoneInventoryHandler::new); } - + @Override public void addBehaviours(List behaviours) { behaviours.add(new DirectBeltInputBehaviour(this)); super.addBehaviours(behaviours); } + @Override + @OnlyIn(Dist.CLIENT) + public void tickAudio() { + super.tickAudio(); + + if (getSpeed() == 0) + return; + if (inputInv.getStackInSlot(0) + .isEmpty()) + return; + + float pitch = MathHelper.clamp((Math.abs(getSpeed()) / 256f) + .45f, .85f, 1f); + SoundScapes.play(AmbienceGroup.MILLING, pos, pitch); + } + @Override public void tick() { super.tick(); @@ -98,7 +117,7 @@ public class MillstoneTileEntity extends KineticTileEntity { super.remove(); capability.invalidate(); } - + private void process() { RecipeWrapper inventoryIn = new RecipeWrapper(inputInv); diff --git a/src/main/java/com/simibubi/create/content/logistics/block/redstone/NixieTubeBlock.java b/src/main/java/com/simibubi/create/content/logistics/block/redstone/NixieTubeBlock.java index 1f6cbe0a1..c94efdab6 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/redstone/NixieTubeBlock.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/redstone/NixieTubeBlock.java @@ -6,6 +6,9 @@ import com.simibubi.create.AllBlocks; import com.simibubi.create.AllShapes; import com.simibubi.create.AllTileEntities; import com.simibubi.create.content.contraptions.wrench.IWrenchable; +import com.simibubi.create.content.schematics.ISpecialBlockItemRequirement; +import com.simibubi.create.content.schematics.ItemRequirement; +import com.simibubi.create.content.schematics.ItemRequirement.ItemUseType; import com.simibubi.create.foundation.block.ITE; import com.simibubi.create.foundation.utility.DyeHelper; import com.simibubi.create.foundation.utility.Iterate; @@ -35,7 +38,8 @@ import net.minecraft.world.IBlockReader; import net.minecraft.world.World; import net.minecraft.world.server.ServerWorld; -public class NixieTubeBlock extends HorizontalBlock implements ITE, IWrenchable { +public class NixieTubeBlock extends HorizontalBlock + implements ITE, IWrenchable, ISpecialBlockItemRequirement { public static final BooleanProperty CEILING = BooleanProperty.create("ceiling"); private DyeColor color; @@ -122,6 +126,17 @@ public class NixieTubeBlock extends HorizontalBlock implements ITE factory; @@ -53,6 +55,17 @@ public class SoundScapes { return new SoundScape(pitch, group).continuous(AllSoundEvents.COGS.getMainEvent(), 1.5f, 1); } + private static SoundScape crushing(float pitch, AmbienceGroup group) { + return new SoundScape(pitch, group).repeating(AllSoundEvents.CRUSHING_1.getMainEvent(), 1.545f, .75f, 1) + .repeating(AllSoundEvents.CRUSHING_2.getMainEvent(), 0.425f, .75f, 2) + .repeating(AllSoundEvents.CRUSHING_3.getMainEvent(), 2f, 1.75f, 2); + } + + private static SoundScape milling(float pitch, AmbienceGroup group) { + return new SoundScape(pitch, group).repeating(AllSoundEvents.CRUSHING_1.getMainEvent(), 1.545f, .75f, 1) + .repeating(AllSoundEvents.CRUSHING_2.getMainEvent(), 0.425f, .75f, 2); + } + enum PitchGroup { VERY_LOW, LOW, NORMAL, HIGH, VERY_HIGH } From cf3ef8c2294fa607e1a049274764c39ec75fbd93 Mon Sep 17 00:00:00 2001 From: PepperBell <44146161+PepperCode1@users.noreply.github.com> Date: Thu, 8 Jul 2021 11:17:35 -0700 Subject: [PATCH 045/118] Fix saw blade culling - Remove AllColorHandlers as it was empty - Organize imports --- .../java/com/simibubi/create/AllColorHandlers.java | 0 src/main/java/com/simibubi/create/AllItems.java | 2 +- src/main/java/com/simibubi/create/compat/Mods.java | 4 ++-- .../components/actors/HarvesterTileEntity.java | 3 +++ .../components/actors/SawMovementBehaviour.java | 6 +++--- .../contraptions/components/saw/SawTileEntity.java | 10 ++++++++++ .../processing/ProcessingRecipeBuilder.java | 1 - .../content/logistics/item/filter/ItemAttribute.java | 3 +-- .../simibubi/create/foundation/utility/TreeCutter.java | 2 -- 9 files changed, 20 insertions(+), 11 deletions(-) delete mode 100644 src/main/java/com/simibubi/create/AllColorHandlers.java diff --git a/src/main/java/com/simibubi/create/AllColorHandlers.java b/src/main/java/com/simibubi/create/AllColorHandlers.java deleted file mode 100644 index e69de29bb..000000000 diff --git a/src/main/java/com/simibubi/create/AllItems.java b/src/main/java/com/simibubi/create/AllItems.java index de9051c5e..8e7c0bea4 100644 --- a/src/main/java/com/simibubi/create/AllItems.java +++ b/src/main/java/com/simibubi/create/AllItems.java @@ -1,10 +1,10 @@ package com.simibubi.create; +import static com.simibubi.create.AllTags.forgeItemTag; import static com.simibubi.create.AllTags.AllItemTags.CREATE_INGOTS; import static com.simibubi.create.AllTags.AllItemTags.CRUSHED_ORES; import static com.simibubi.create.AllTags.AllItemTags.NUGGETS; import static com.simibubi.create.AllTags.AllItemTags.PLATES; -import static com.simibubi.create.AllTags.forgeItemTag; import static com.simibubi.create.content.AllSections.CURIOSITIES; import static com.simibubi.create.content.AllSections.KINETICS; import static com.simibubi.create.content.AllSections.LOGISTICS; diff --git a/src/main/java/com/simibubi/create/compat/Mods.java b/src/main/java/com/simibubi/create/compat/Mods.java index cf9ec4e2a..85b23626a 100644 --- a/src/main/java/com/simibubi/create/compat/Mods.java +++ b/src/main/java/com/simibubi/create/compat/Mods.java @@ -1,10 +1,10 @@ package com.simibubi.create.compat; -import net.minecraftforge.fml.ModList; - import java.util.Optional; import java.util.function.Supplier; +import net.minecraftforge.fml.ModList; + /** * For compatibility with and without another mod present, we have to define load conditions of the specific code */ diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/HarvesterTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/HarvesterTileEntity.java index f76448e23..cd10367d2 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/HarvesterTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/HarvesterTileEntity.java @@ -4,6 +4,8 @@ import com.simibubi.create.foundation.tileEntity.SyncedTileEntity; import net.minecraft.tileentity.TileEntityType; import net.minecraft.util.math.AxisAlignedBB; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; public class HarvesterTileEntity extends SyncedTileEntity { @@ -17,6 +19,7 @@ public class HarvesterTileEntity extends SyncedTileEntity { } @Override + @OnlyIn(Dist.CLIENT) public AxisAlignedBB getRenderBoundingBox() { return RENDER_BOX.offset(pos); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/SawMovementBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/SawMovementBehaviour.java index 77aebb0c3..d3a78dc13 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/SawMovementBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/SawMovementBehaviour.java @@ -1,11 +1,13 @@ package com.simibubi.create.content.contraptions.components.actors; +import java.util.Optional; + import com.simibubi.create.content.contraptions.components.saw.SawBlock; import com.simibubi.create.content.contraptions.components.saw.SawRenderer; import com.simibubi.create.content.contraptions.components.saw.SawTileEntity; import com.simibubi.create.content.contraptions.components.structureMovement.MovementContext; -import com.simibubi.create.foundation.utility.AbstractBlockBreakQueue; import com.simibubi.create.content.contraptions.components.structureMovement.render.ContraptionMatrices; +import com.simibubi.create.foundation.utility.AbstractBlockBreakQueue; import com.simibubi.create.foundation.utility.TreeCutter; import com.simibubi.create.foundation.utility.VecHelper; import com.simibubi.create.foundation.utility.worldWrappers.PlacementSimulationWorld; @@ -24,8 +26,6 @@ import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.items.ItemHandlerHelper; -import java.util.Optional; - public class SawMovementBehaviour extends BlockBreakingMovementBehaviour { @Override diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/saw/SawTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/saw/SawTileEntity.java index 6ba7308cb..5eeb534f1 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/saw/SawTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/saw/SawTileEntity.java @@ -56,6 +56,7 @@ import net.minecraft.tileentity.TileEntityType; import net.minecraft.util.Direction; import net.minecraft.util.LazyValue; import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.vector.Vector3d; @@ -71,6 +72,8 @@ import net.minecraftforge.items.IItemHandler; @MethodsReturnNonnullByDefault public class SawTileEntity extends BlockBreakingKineticTileEntity { + private static final AxisAlignedBB RENDER_BOX = new AxisAlignedBB(0, 0, 0, 1, 1, 1); + private static final Object cuttingRecipesKey = new Object(); public static final LazyValue> woodcuttingRecipeType = new LazyValue<>(() -> Registry.RECIPE_TYPE.getOrDefault(new ResourceLocation("druidcraft", "woodcutting"))); @@ -120,6 +123,13 @@ public class SawTileEntity extends BlockBreakingKineticTileEntity { playEvent = ItemStack.read(compound.getCompound("PlayEvent")); } + @Override + protected AxisAlignedBB makeRenderBoundingBox() { + Direction facing = getBlockState().get(SawBlock.FACING); + AxisAlignedBB box = RENDER_BOX.expand(facing.getXOffset() * 0.125f, facing.getYOffset() * 0.125f, facing.getZOffset() * 0.125f); + return box.offset(pos); + } + @Override @OnlyIn(Dist.CLIENT) public void tickAudio() { diff --git a/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingRecipeBuilder.java b/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingRecipeBuilder.java index 305d5e06a..16f747acb 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingRecipeBuilder.java +++ b/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingRecipeBuilder.java @@ -7,7 +7,6 @@ import java.util.function.Consumer; import com.google.gson.JsonArray; import com.google.gson.JsonObject; import com.simibubi.create.AllRecipeTypes; -import com.simibubi.create.Create; import com.simibubi.create.foundation.fluid.FluidHelper; import com.simibubi.create.foundation.fluid.FluidIngredient; import com.simibubi.create.foundation.utility.Lang; 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 967896313..beb7a8946 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 @@ -9,8 +9,6 @@ import java.util.function.BiPredicate; import java.util.function.Predicate; import java.util.stream.Collectors; -import com.simibubi.create.content.logistics.item.filter.attribute.ShulkerFillLevelAttribute; - import org.apache.commons.lang3.StringUtils; import com.simibubi.create.AllRecipeTypes; @@ -21,6 +19,7 @@ import com.simibubi.create.content.logistics.item.filter.attribute.ColorAttribut import com.simibubi.create.content.logistics.item.filter.attribute.EnchantAttribute; import com.simibubi.create.content.logistics.item.filter.attribute.FluidContentsAttribute; import com.simibubi.create.content.logistics.item.filter.attribute.ItemNameAttribute; +import com.simibubi.create.content.logistics.item.filter.attribute.ShulkerFillLevelAttribute; import com.simibubi.create.content.logistics.item.filter.attribute.astralsorcery.AstralSorceryAmuletAttribute; import com.simibubi.create.content.logistics.item.filter.attribute.astralsorcery.AstralSorceryAttunementAttribute; import com.simibubi.create.content.logistics.item.filter.attribute.astralsorcery.AstralSorceryCrystalAttribute; diff --git a/src/main/java/com/simibubi/create/foundation/utility/TreeCutter.java b/src/main/java/com/simibubi/create/foundation/utility/TreeCutter.java index 598ec71cd..3b7f6e5ea 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/TreeCutter.java +++ b/src/main/java/com/simibubi/create/foundation/utility/TreeCutter.java @@ -14,9 +14,7 @@ import javax.annotation.Nonnull; import javax.annotation.Nullable; import com.simibubi.create.AllTags; - import com.simibubi.create.compat.Mods; - import com.simibubi.create.compat.dynamictrees.DynamicTree; import net.minecraft.block.BambooBlock; From a800cbea05a1be06e1bf5e94e57086bc18a86bb9 Mon Sep 17 00:00:00 2001 From: Jozufozu Date: Thu, 8 Jul 2021 13:25:35 -0700 Subject: [PATCH 046/118] Fix funny glue textures --- .../structureMovement/glue/GlueInstance.java | 48 ++++++++++++++----- 1 file changed, 37 insertions(+), 11 deletions(-) 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 cc171a904..4f57c980f 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 @@ -2,6 +2,7 @@ package com.simibubi.create.content.contraptions.components.structureMovement.gl import com.jozufozu.flywheel.backend.gl.buffer.VecBuffer; import com.jozufozu.flywheel.backend.instancing.ITickableInstance; +import com.jozufozu.flywheel.backend.instancing.InstanceMaterial; import com.jozufozu.flywheel.backend.instancing.Instancer; import com.jozufozu.flywheel.backend.instancing.MaterialManager; import com.jozufozu.flywheel.backend.instancing.entity.EntityInstance; @@ -29,6 +30,7 @@ import net.minecraft.world.LightType; public class GlueInstance extends EntityInstance implements ITickableInstance { + private static final boolean USE_ATLAS = false; private static final ResourceLocation TEXTURE = new ResourceLocation(Create.ID, "textures/entity/super_glue/slime.png"); private final Quaternion rotation; @@ -37,8 +39,7 @@ public class GlueInstance extends EntityInstance implements ITi public GlueInstance(MaterialManager materialManager, SuperGlueEntity entity) { super(materialManager, entity); - Instancer instancer = materialManager.getMaterial(Materials.ORIENTED) - .get(entity.getType(), GlueInstance::supplyModel); + Instancer instancer = getInstancer(materialManager, entity); Direction face = entity.getFacingDirection(); rotation = new Quaternion(AngleHelper.verticalAngle(face), AngleHelper.horizontalAngleNew(face), 0, true); @@ -49,6 +50,17 @@ public class GlueInstance extends EntityInstance implements ITi .update(); } + private Instancer getInstancer(MaterialManager materialManager, SuperGlueEntity entity) { + InstanceMaterial material; + + if (USE_ATLAS) + material = materialManager.getMaterial(Materials.ORIENTED); + else + material = materialManager.getMaterial(Materials.ORIENTED, TEXTURE); + + return material.get(entity.getType(), GlueInstance::supplyModel); + } + @Override public void tick() { model.update(); @@ -114,19 +126,33 @@ public class GlueInstance extends EntityInstance implements ITi VecBuffer buffer = VecBuffer.allocate(Formats.UNLIT_MODEL.getStride() * 8); - TextureAtlasSprite sprite = AllStitchedTextures.SUPER_GLUE.getSprite(); + float minU; + float maxU; + float minV; + float maxV; + + if (USE_ATLAS) { + TextureAtlasSprite sprite = AllStitchedTextures.SUPER_GLUE.getSprite(); + minU = sprite.getMinU(); + maxU = sprite.getMaxU(); + minV = sprite.getMinV(); + maxV = sprite.getMaxV(); + } else { + minU = minV = 0; + maxU = maxV = 1; + } // pos normal uv // inside quad - buffer.putVec3((float) a1.x, (float) a1.y, (float) a1.z).putVec3((byte) 0, (byte) 0, (byte) -127).putVec2(sprite.getMaxU(), sprite.getMinV()); - buffer.putVec3((float) a2.x, (float) a2.y, (float) a2.z).putVec3((byte) 0, (byte) 0, (byte) -127).putVec2(sprite.getMaxU(), sprite.getMaxV()); - buffer.putVec3((float) a3.x, (float) a3.y, (float) a3.z).putVec3((byte) 0, (byte) 0, (byte) -127).putVec2(sprite.getMinU(), sprite.getMaxV()); - buffer.putVec3((float) a4.x, (float) a4.y, (float) a4.z).putVec3((byte) 0, (byte) 0, (byte) -127).putVec2(sprite.getMinU(), sprite.getMinV()); + buffer.putVec3((float) a1.x, (float) a1.y, (float) a1.z).putVec3((byte) 0, (byte) 0, (byte) -127).putVec2(maxU, minV); + buffer.putVec3((float) a2.x, (float) a2.y, (float) a2.z).putVec3((byte) 0, (byte) 0, (byte) -127).putVec2(maxU, maxV); + buffer.putVec3((float) a3.x, (float) a3.y, (float) a3.z).putVec3((byte) 0, (byte) 0, (byte) -127).putVec2(minU, maxV); + buffer.putVec3((float) a4.x, (float) a4.y, (float) a4.z).putVec3((byte) 0, (byte) 0, (byte) -127).putVec2(minU, minV); // outside quad - buffer.putVec3((float) b4.x, (float) b4.y, (float) b4.z).putVec3((byte) 0, (byte) 0, (byte) 127).putVec2(sprite.getMinU(), sprite.getMinV()); - buffer.putVec3((float) b3.x, (float) b3.y, (float) b3.z).putVec3((byte) 0, (byte) 0, (byte) 127).putVec2(sprite.getMinU(), sprite.getMaxV()); - buffer.putVec3((float) b2.x, (float) b2.y, (float) b2.z).putVec3((byte) 0, (byte) 0, (byte) 127).putVec2(sprite.getMaxU(), sprite.getMaxV()); - buffer.putVec3((float) b1.x, (float) b1.y, (float) b1.z).putVec3((byte) 0, (byte) 0, (byte) 127).putVec2(sprite.getMaxU(), sprite.getMinV()); + buffer.putVec3((float) b4.x, (float) b4.y, (float) b4.z).putVec3((byte) 0, (byte) 0, (byte) 127).putVec2(minU, minV); + buffer.putVec3((float) b3.x, (float) b3.y, (float) b3.z).putVec3((byte) 0, (byte) 0, (byte) 127).putVec2(minU, maxV); + buffer.putVec3((float) b2.x, (float) b2.y, (float) b2.z).putVec3((byte) 0, (byte) 0, (byte) 127).putVec2(maxU, maxV); + buffer.putVec3((float) b1.x, (float) b1.y, (float) b1.z).putVec3((byte) 0, (byte) 0, (byte) 127).putVec2(maxU, minV); buffer.rewind(); From 63bd4258e1b1eadcc7d72d46b639dda1205c4959 Mon Sep 17 00:00:00 2001 From: Carbon5 <37130077+Carbon5@users.noreply.github.com> Date: Thu, 8 Jul 2021 20:52:39 -0400 Subject: [PATCH 047/118] Superglue follows mobGriefing gamerule --- .../structureMovement/glue/SuperGlueEntity.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/glue/SuperGlueEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/glue/SuperGlueEntity.java index 54ec8d2a3..2e206b129 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/glue/SuperGlueEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/glue/SuperGlueEntity.java @@ -30,6 +30,7 @@ import net.minecraft.client.world.ClientWorld; import net.minecraft.entity.Entity; import net.minecraft.entity.EntitySize; import net.minecraft.entity.EntityType; +import net.minecraft.entity.MobEntity; import net.minecraft.entity.MoverType; import net.minecraft.entity.Pose; import net.minecraft.entity.effect.LightningBoltEntity; @@ -55,6 +56,7 @@ import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.RayTraceResult; import net.minecraft.util.math.RayTraceResult.Type; import net.minecraft.util.math.vector.Vector3d; +import net.minecraft.world.GameRules; import net.minecraft.world.World; import net.minecraft.world.server.ServerWorld; import net.minecraftforge.api.distmarker.Dist; @@ -261,6 +263,12 @@ public class SuperGlueEntity extends Entity implements IEntityAdditionalSpawnDat public boolean attackEntityFrom(DamageSource source, float amount) { if (this.isInvulnerableTo(source)) return false; + + boolean mobGriefing = world.getGameRules().getBoolean(GameRules.MOB_GRIEFING); + Entity trueSource = source.getTrueSource(); + if (!mobGriefing && trueSource instanceof MobEntity) + return false; + Entity immediateSource = source.getImmediateSource(); if (!isVisible() && immediateSource instanceof PlayerEntity) { if (!AllItems.SUPER_GLUE.isIn(((PlayerEntity) immediateSource).getHeldItemMainhand())) From bdbd5c9533d83d6df90bd1b28e1440bad105a181 Mon Sep 17 00:00:00 2001 From: PepperBell <44146161+PepperCode1@users.noreply.github.com> Date: Thu, 8 Jul 2021 23:21:51 -0700 Subject: [PATCH 048/118] Remote extinguishing - Make splash water bottles extinguish lit blaze burners --- .../processing/burner/BlazeBurnerHandler.java | 55 +++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/src/main/java/com/simibubi/create/content/contraptions/processing/burner/BlazeBurnerHandler.java b/src/main/java/com/simibubi/create/content/contraptions/processing/burner/BlazeBurnerHandler.java index 07582c253..3b37c7ef7 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/processing/burner/BlazeBurnerHandler.java +++ b/src/main/java/com/simibubi/create/content/contraptions/processing/burner/BlazeBurnerHandler.java @@ -1,11 +1,24 @@ package com.simibubi.create.content.contraptions.processing.burner; +import com.simibubi.create.AllBlocks; import com.simibubi.create.AllSoundEvents; import com.simibubi.create.content.contraptions.processing.burner.BlazeBurnerTileEntity.FuelType; +import net.minecraft.block.BlockState; +import net.minecraft.block.CampfireBlock; import net.minecraft.entity.projectile.EggEntity; +import net.minecraft.entity.projectile.PotionEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.potion.Potion; +import net.minecraft.potion.PotionUtils; +import net.minecraft.potion.Potions; +import net.minecraft.tags.BlockTags; import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.Direction; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.SoundEvents; import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.BlockRayTraceResult; import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.RayTraceResult; import net.minecraft.util.math.vector.Vector3d; @@ -18,6 +31,11 @@ import net.minecraftforge.fml.common.Mod; public class BlazeBurnerHandler { @SubscribeEvent + public static void onThrowableImpact(ProjectileImpactEvent.Throwable event) { + thrownEggsGetEatenByBurner(event); + splashExtinguishesBurner(event); + } + public static void thrownEggsGetEatenByBurner(ProjectileImpactEvent.Throwable event) { if (!(event.getThrowable() instanceof EggEntity)) return; @@ -54,4 +72,41 @@ public class BlazeBurnerHandler { AllSoundEvents.BLAZE_MUNCH.playOnServer(world, heater.getPos()); } + public static void splashExtinguishesBurner(ProjectileImpactEvent.Throwable event) { + if (event.getThrowable().world.isRemote) + return; + + if (!(event.getThrowable() instanceof PotionEntity)) + return; + PotionEntity entity = (PotionEntity) event.getThrowable(); + + if (event.getRayTraceResult() + .getType() != RayTraceResult.Type.BLOCK) + return; + + ItemStack stack = entity.getItem(); + Potion potion = PotionUtils.getPotionFromItem(stack); + if (potion == Potions.WATER && PotionUtils.getEffectsFromStack(stack).isEmpty()) { + BlockRayTraceResult result = (BlockRayTraceResult) event.getRayTraceResult(); + World world = entity.world; + Direction face = result.getFace(); + BlockPos pos = result.getPos().offset(face); + + extinguishLitBurners(world, pos, face); + extinguishLitBurners(world, pos.offset(face.getOpposite()), face); + + for (Direction face1 : Direction.Plane.HORIZONTAL) { + extinguishLitBurners(world, pos.offset(face1), face1); + } + } + } + + private static void extinguishLitBurners(World world, BlockPos pos, Direction direction) { + BlockState state = world.getBlockState(pos); + if (AllBlocks.LIT_BLAZE_BURNER.has(state)) { + world.playSound(null, pos, SoundEvents.BLOCK_FIRE_EXTINGUISH, SoundCategory.BLOCKS, 0.5F, 2.6F + (world.rand.nextFloat() - world.rand.nextFloat()) * 0.8F); + world.setBlockState(pos, AllBlocks.BLAZE_BURNER.getDefaultState()); + } + } + } From 7ed7b957dd98d7150ec9c30abcbb875db450d2de Mon Sep 17 00:00:00 2001 From: PepperBell <44146161+PepperCode1@users.noreply.github.com> Date: Fri, 9 Jul 2021 00:28:21 -0700 Subject: [PATCH 049/118] Flaming souls - Add soul flame type to lit blaze burner - Tweak empty blaze burner ponder to show how to transform flame --- src/generated/resources/.cache/cache | 30 +++--- .../create/blockstates/lit_blaze_burner.json | 5 +- .../resources/assets/create/lang/en_us.json | 3 +- .../assets/create/lang/unfinished/de_de.json | 5 +- .../assets/create/lang/unfinished/es_es.json | 5 +- .../assets/create/lang/unfinished/es_mx.json | 5 +- .../assets/create/lang/unfinished/fr_fr.json | 5 +- .../assets/create/lang/unfinished/it_it.json | 5 +- .../assets/create/lang/unfinished/ja_jp.json | 5 +- .../assets/create/lang/unfinished/ko_kr.json | 5 +- .../assets/create/lang/unfinished/nl_nl.json | 5 +- .../assets/create/lang/unfinished/pl_pl.json | 5 +- .../assets/create/lang/unfinished/pt_br.json | 5 +- .../assets/create/lang/unfinished/ru_ru.json | 5 +- .../assets/create/lang/unfinished/zh_cn.json | 5 +- .../assets/create/lang/unfinished/zh_tw.json | 5 +- .../java/com/simibubi/create/AllBlocks.java | 10 +- .../processing/burner/BlazeBurnerHandler.java | 2 - .../burner/LitBlazeBurnerBlock.java | 96 +++++++++++++------ .../ponder/content/ProcessingScenes.java | 16 +++- .../resources/assets/create/lang/es_es.json | 2 +- .../resources/assets/create/lang/ja_jp.json | 2 +- .../resources/assets/create/lang/ko_kr.json | 2 +- .../resources/assets/create/lang/pl_pl.json | 2 +- .../resources/assets/create/lang/ru_ru.json | 2 +- .../resources/assets/create/lang/zh_cn.json | 2 +- .../resources/assets/create/lang/zh_tw.json | 2 +- .../blaze_burner/block_with_soul_fire.json | 6 ++ 28 files changed, 162 insertions(+), 85 deletions(-) create mode 100644 src/main/resources/assets/create/models/block/blaze_burner/block_with_soul_fire.json diff --git a/src/generated/resources/.cache/cache b/src/generated/resources/.cache/cache index 48c7845c2..bcb97f046 100644 --- a/src/generated/resources/.cache/cache +++ b/src/generated/resources/.cache/cache @@ -230,7 +230,7 @@ e7c7b952137c4cb615988ea59b9f14303c9a4dfe assets/create/blockstates/limestone_bri 10513d55f7c621162a13d474d8f4eb54305d0f60 assets/create/blockstates/limestone_cobblestone_wall.json b7506b862d13b3f915c60d38bb7a20afc935f70a assets/create/blockstates/limestone_pillar.json 69790737767e06f000c7824749c46664a123160e assets/create/blockstates/linear_chassis.json -07bae932a163b81f8749f98287b4fb4949fe0b8b assets/create/blockstates/lit_blaze_burner.json +56b111c8a345627e9f37deac141138064271c2f1 assets/create/blockstates/lit_blaze_burner.json e99e9c5cf03334a48d9d071e1590bc8f286d3cf6 assets/create/blockstates/magenta_nixie_tube.json 85a58ac539775f90903d9ce66374f3f2ffd4fecf assets/create/blockstates/magenta_sail.json 84c494d24cc58af274fdd054896c680e8095d2d0 assets/create/blockstates/magenta_seat.json @@ -426,20 +426,20 @@ a3a11524cd3515fc01d905767b4b7ea782adaf03 assets/create/blockstates/yellow_seat.j 7f39521b211441f5c3e06d60c5978cebe16cacfb assets/create/blockstates/zinc_block.json b7181bcd8182b2f17088e5aa881f374c9c65470c assets/create/blockstates/zinc_ore.json e1d3c02695cbd2ee7bbede97f72941835634a3a5 assets/create/lang/en_ud.json -e45592394573a5e5bae6520976ef0760e27833b1 assets/create/lang/en_us.json -3e80da8da3fd705c5a9abcef3bb88c848d694452 assets/create/lang/unfinished/de_de.json -2957ff5031fce02979fe0029756705c80909160f assets/create/lang/unfinished/es_es.json -58c0101a854c4a717058b593572707a035b2bd17 assets/create/lang/unfinished/es_mx.json -2dca9cad484ec7991d4303f7b79b613da85aa213 assets/create/lang/unfinished/fr_fr.json -93c30ea554df1b96d493f3c15660665342ea54e2 assets/create/lang/unfinished/it_it.json -2d19c1bd0b16c7f4d3cab91566b10f8b20fd92b8 assets/create/lang/unfinished/ja_jp.json -00a5e891f481ddbbd2e043f05d4c60c8519d30b4 assets/create/lang/unfinished/ko_kr.json -3264c35ea11ad73c63b42d3c3e86b3e4a683e8a7 assets/create/lang/unfinished/nl_nl.json -284b09bca2e8dafbf6c39d562a6bec7d6d9e277e assets/create/lang/unfinished/pl_pl.json -ebabdc30b05702af5cc4b28e95fa5792035db73a assets/create/lang/unfinished/pt_br.json -ab37de7ff2c14415e29782bba6382233e585fa6f assets/create/lang/unfinished/ru_ru.json -f70cb0834d60693a62bef99c2b81b40fae37417a assets/create/lang/unfinished/zh_cn.json -f78d0693929030d6ede68d4233407f6c832ea93e assets/create/lang/unfinished/zh_tw.json +c75657997c7adf06fd12020aacc9465605563183 assets/create/lang/en_us.json +94f26bdaf8d1a39c25c4da551530696d4ff8b24c assets/create/lang/unfinished/de_de.json +51ed1df10b8afcf27f9dcdae3bca80d05740d450 assets/create/lang/unfinished/es_es.json +47bf5a31dfd8530a0db9813a56b762cf3129ddc6 assets/create/lang/unfinished/es_mx.json +8bc26af581f714ea54f6e1a89ee2cbac917bf7df assets/create/lang/unfinished/fr_fr.json +e1c11002170d4c0acb9ef442c41ea04b99d20440 assets/create/lang/unfinished/it_it.json +caa45f4ae4e4e9b338999b7975767dc33e569881 assets/create/lang/unfinished/ja_jp.json +aaa8ecc84b853cc8a93f8d5812f22beefaf48266 assets/create/lang/unfinished/ko_kr.json +9e32f7de0acff6ee4ee6bfa5beb5a4c103cdcb0a assets/create/lang/unfinished/nl_nl.json +70f552fe3bd0365d9f1f339032bc598bc0ff9026 assets/create/lang/unfinished/pl_pl.json +83422c331b7c670d1dc8450e0b02a6443fc8ca1b assets/create/lang/unfinished/pt_br.json +f12de6d61ff3f634e5af7485230032202ce0f9de assets/create/lang/unfinished/ru_ru.json +75c32bf33d907d0575d05ad575566d50bc78c1c9 assets/create/lang/unfinished/zh_cn.json +32a411bf248dae1eeb8a3e7d9450e5c1b9cd0b59 assets/create/lang/unfinished/zh_tw.json 487a511a01b2a4531fb672f917922312db78f958 assets/create/models/block/acacia_window.json b48060cba1a382f373a05bf0039054053eccf076 assets/create/models/block/acacia_window_pane_noside.json 3066db1bf03cffa1a9c7fbacf47ae586632f4eb3 assets/create/models/block/acacia_window_pane_noside_alt.json diff --git a/src/generated/resources/assets/create/blockstates/lit_blaze_burner.json b/src/generated/resources/assets/create/blockstates/lit_blaze_burner.json index 5befc1351..041032bdf 100644 --- a/src/generated/resources/assets/create/blockstates/lit_blaze_burner.json +++ b/src/generated/resources/assets/create/blockstates/lit_blaze_burner.json @@ -1,7 +1,10 @@ { "variants": { - "": { + "flame_type=regular": { "model": "create:block/blaze_burner/block_with_fire" + }, + "flame_type=soul": { + "model": "create:block/blaze_burner/block_with_soul_fire" } } } \ No newline at end of file diff --git a/src/generated/resources/assets/create/lang/en_us.json b/src/generated/resources/assets/create/lang/en_us.json index 8cbb2a13c..5976f79b0 100644 --- a/src/generated/resources/assets/create/lang/en_us.json +++ b/src/generated/resources/assets/create/lang/en_us.json @@ -1764,7 +1764,8 @@ "create.ponder.empty_blaze_burner.text_2": "Alternatively, Blazes can be collected from their Spawners directly", "create.ponder.empty_blaze_burner.text_3": "You now have an ideal heat source for various machines", "create.ponder.empty_blaze_burner.text_4": "For Aesthetic purposes, Empty Blaze Burners can also be lit using Flint and Steel", - "create.ponder.empty_blaze_burner.text_5": "However, these are not suitable for industrial heating", + "create.ponder.empty_blaze_burner.text_5": "The flame can be transformed using a soul-infused item", + "create.ponder.empty_blaze_burner.text_6": "However, these are not suitable for industrial heating", "create.ponder.encased_fluid_pipe.header": "Encasing Fluid Pipes", "create.ponder.encased_fluid_pipe.text_1": "Copper Casing can be used to decorate Fluid Pipes", 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 be3d6d8bd..fd0a27df5 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: 1125", + "_": "Missing Localizations: 1126", "_": "->------------------------] Game Elements [------------------------<-", @@ -1765,7 +1765,8 @@ "create.ponder.empty_blaze_burner.text_2": "UNLOCALIZED: Alternatively, Blazes can be collected from their Spawners directly", "create.ponder.empty_blaze_burner.text_3": "UNLOCALIZED: You now have an ideal heat source for various machines", "create.ponder.empty_blaze_burner.text_4": "UNLOCALIZED: For Aesthetic purposes, Empty Blaze Burners can also be lit using Flint and Steel", - "create.ponder.empty_blaze_burner.text_5": "UNLOCALIZED: However, these are not suitable for industrial heating", + "create.ponder.empty_blaze_burner.text_5": "UNLOCALIZED: The flame can be transformed using a soul-infused item", + "create.ponder.empty_blaze_burner.text_6": "UNLOCALIZED: However, these are not suitable for industrial heating", "create.ponder.encased_fluid_pipe.header": "UNLOCALIZED: Encasing Fluid Pipes", "create.ponder.encased_fluid_pipe.text_1": "UNLOCALIZED: Copper Casing can be used to decorate Fluid Pipes", 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 c9364aa5f..87d851556 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: 48", + "_": "Missing Localizations: 49", "_": "->------------------------] Game Elements [------------------------<-", @@ -1765,7 +1765,8 @@ "create.ponder.empty_blaze_burner.text_2": "Alternativamente, los blaze pueden ser recogidos de sus spawners directamente", "create.ponder.empty_blaze_burner.text_3": "Ahora tienes una fuente de calor ideal para varias máquinas", "create.ponder.empty_blaze_burner.text_4": "Por motivos estéticos, los quemadores de blaze vacíos también se pueden encender con pedernal y acero", - "create.ponder.empty_blaze_burner.text_5": "Sin embargo, no son adecuados para la calefacción industrial", + "create.ponder.empty_blaze_burner.text_5": "UNLOCALIZED: The flame can be transformed using a soul-infused item", + "create.ponder.empty_blaze_burner.text_6": "Sin embargo, no son adecuados para la calefacción industrial", "create.ponder.encased_fluid_pipe.header": "Revestir tuberías de fluídos", "create.ponder.encased_fluid_pipe.text_1": "Copper Casing can be used to decorate Fluid Pipes", diff --git a/src/generated/resources/assets/create/lang/unfinished/es_mx.json b/src/generated/resources/assets/create/lang/unfinished/es_mx.json index 3f38ce3fe..5a8fa399d 100644 --- a/src/generated/resources/assets/create/lang/unfinished/es_mx.json +++ b/src/generated/resources/assets/create/lang/unfinished/es_mx.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 1492", + "_": "Missing Localizations: 1493", "_": "->------------------------] Game Elements [------------------------<-", @@ -1765,7 +1765,8 @@ "create.ponder.empty_blaze_burner.text_2": "UNLOCALIZED: Alternatively, Blazes can be collected from their Spawners directly", "create.ponder.empty_blaze_burner.text_3": "UNLOCALIZED: You now have an ideal heat source for various machines", "create.ponder.empty_blaze_burner.text_4": "UNLOCALIZED: For Aesthetic purposes, Empty Blaze Burners can also be lit using Flint and Steel", - "create.ponder.empty_blaze_burner.text_5": "UNLOCALIZED: However, these are not suitable for industrial heating", + "create.ponder.empty_blaze_burner.text_5": "UNLOCALIZED: The flame can be transformed using a soul-infused item", + "create.ponder.empty_blaze_burner.text_6": "UNLOCALIZED: However, these are not suitable for industrial heating", "create.ponder.encased_fluid_pipe.header": "UNLOCALIZED: Encasing Fluid Pipes", "create.ponder.encased_fluid_pipe.text_1": "UNLOCALIZED: Copper Casing can be used to decorate Fluid Pipes", diff --git a/src/generated/resources/assets/create/lang/unfinished/fr_fr.json b/src/generated/resources/assets/create/lang/unfinished/fr_fr.json index 18bf25b10..bea5c916a 100644 --- a/src/generated/resources/assets/create/lang/unfinished/fr_fr.json +++ b/src/generated/resources/assets/create/lang/unfinished/fr_fr.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 1377", + "_": "Missing Localizations: 1378", "_": "->------------------------] Game Elements [------------------------<-", @@ -1765,7 +1765,8 @@ "create.ponder.empty_blaze_burner.text_2": "UNLOCALIZED: Alternatively, Blazes can be collected from their Spawners directly", "create.ponder.empty_blaze_burner.text_3": "UNLOCALIZED: You now have an ideal heat source for various machines", "create.ponder.empty_blaze_burner.text_4": "UNLOCALIZED: For Aesthetic purposes, Empty Blaze Burners can also be lit using Flint and Steel", - "create.ponder.empty_blaze_burner.text_5": "UNLOCALIZED: However, these are not suitable for industrial heating", + "create.ponder.empty_blaze_burner.text_5": "UNLOCALIZED: The flame can be transformed using a soul-infused item", + "create.ponder.empty_blaze_burner.text_6": "UNLOCALIZED: However, these are not suitable for industrial heating", "create.ponder.encased_fluid_pipe.header": "UNLOCALIZED: Encasing Fluid Pipes", "create.ponder.encased_fluid_pipe.text_1": "UNLOCALIZED: Copper Casing can be used to decorate Fluid Pipes", diff --git a/src/generated/resources/assets/create/lang/unfinished/it_it.json b/src/generated/resources/assets/create/lang/unfinished/it_it.json index 4411d5325..7636eb7ed 100644 --- a/src/generated/resources/assets/create/lang/unfinished/it_it.json +++ b/src/generated/resources/assets/create/lang/unfinished/it_it.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 905", + "_": "Missing Localizations: 906", "_": "->------------------------] Game Elements [------------------------<-", @@ -1765,7 +1765,8 @@ "create.ponder.empty_blaze_burner.text_2": "UNLOCALIZED: Alternatively, Blazes can be collected from their Spawners directly", "create.ponder.empty_blaze_burner.text_3": "UNLOCALIZED: You now have an ideal heat source for various machines", "create.ponder.empty_blaze_burner.text_4": "UNLOCALIZED: For Aesthetic purposes, Empty Blaze Burners can also be lit using Flint and Steel", - "create.ponder.empty_blaze_burner.text_5": "UNLOCALIZED: However, these are not suitable for industrial heating", + "create.ponder.empty_blaze_burner.text_5": "UNLOCALIZED: The flame can be transformed using a soul-infused item", + "create.ponder.empty_blaze_burner.text_6": "UNLOCALIZED: However, these are not suitable for industrial heating", "create.ponder.encased_fluid_pipe.header": "UNLOCALIZED: Encasing Fluid Pipes", "create.ponder.encased_fluid_pipe.text_1": "UNLOCALIZED: Copper Casing can be used to decorate Fluid Pipes", diff --git a/src/generated/resources/assets/create/lang/unfinished/ja_jp.json b/src/generated/resources/assets/create/lang/unfinished/ja_jp.json index 6d61c2587..5cdfa25f3 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ja_jp.json +++ b/src/generated/resources/assets/create/lang/unfinished/ja_jp.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 37", + "_": "Missing Localizations: 38", "_": "->------------------------] Game Elements [------------------------<-", @@ -1765,7 +1765,8 @@ "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_5": "UNLOCALIZED: The flame can be transformed using a soul-infused item", + "create.ponder.empty_blaze_burner.text_6": "しかし、これは加工用の熱源には適していません", "create.ponder.encased_fluid_pipe.header": "ケース入り液体パイプ", "create.ponder.encased_fluid_pipe.text_1": "銅ケーシングで液体パイプを飾ることができます", diff --git a/src/generated/resources/assets/create/lang/unfinished/ko_kr.json b/src/generated/resources/assets/create/lang/unfinished/ko_kr.json index a371fe7ac..a82e39aea 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ko_kr.json +++ b/src/generated/resources/assets/create/lang/unfinished/ko_kr.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 283", + "_": "Missing Localizations: 284", "_": "->------------------------] Game Elements [------------------------<-", @@ -1765,7 +1765,8 @@ "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_5": "UNLOCALIZED: The flame can be transformed using a soul-infused item", + "create.ponder.empty_blaze_burner.text_6": "하지만, 산업용으로 이용하기에는 적합하지 않습니다.", "create.ponder.encased_fluid_pipe.header": "UNLOCALIZED: Encasing Fluid Pipes", "create.ponder.encased_fluid_pipe.text_1": "UNLOCALIZED: Copper Casing can be used to decorate Fluid Pipes", diff --git a/src/generated/resources/assets/create/lang/unfinished/nl_nl.json b/src/generated/resources/assets/create/lang/unfinished/nl_nl.json index e6b4c86d5..051f1e324 100644 --- a/src/generated/resources/assets/create/lang/unfinished/nl_nl.json +++ b/src/generated/resources/assets/create/lang/unfinished/nl_nl.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 1758", + "_": "Missing Localizations: 1759", "_": "->------------------------] Game Elements [------------------------<-", @@ -1765,7 +1765,8 @@ "create.ponder.empty_blaze_burner.text_2": "UNLOCALIZED: Alternatively, Blazes can be collected from their Spawners directly", "create.ponder.empty_blaze_burner.text_3": "UNLOCALIZED: You now have an ideal heat source for various machines", "create.ponder.empty_blaze_burner.text_4": "UNLOCALIZED: For Aesthetic purposes, Empty Blaze Burners can also be lit using Flint and Steel", - "create.ponder.empty_blaze_burner.text_5": "UNLOCALIZED: However, these are not suitable for industrial heating", + "create.ponder.empty_blaze_burner.text_5": "UNLOCALIZED: The flame can be transformed using a soul-infused item", + "create.ponder.empty_blaze_burner.text_6": "UNLOCALIZED: However, these are not suitable for industrial heating", "create.ponder.encased_fluid_pipe.header": "UNLOCALIZED: Encasing Fluid Pipes", "create.ponder.encased_fluid_pipe.text_1": "UNLOCALIZED: Copper Casing can be used to decorate Fluid Pipes", diff --git a/src/generated/resources/assets/create/lang/unfinished/pl_pl.json b/src/generated/resources/assets/create/lang/unfinished/pl_pl.json index d7abc6373..bf827e597 100644 --- a/src/generated/resources/assets/create/lang/unfinished/pl_pl.json +++ b/src/generated/resources/assets/create/lang/unfinished/pl_pl.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 247", + "_": "Missing Localizations: 248", "_": "->------------------------] Game Elements [------------------------<-", @@ -1765,7 +1765,8 @@ "create.ponder.empty_blaze_burner.text_2": "Ewentualnie, Płomyk może być zabrany prosto z jego Spawnera", "create.ponder.empty_blaze_burner.text_3": "Masz teraz idealne źródło ciepła dla przeróżnych maszyn", "create.ponder.empty_blaze_burner.text_4": "Dla celów dekoracyjnych, puste palniki można też zapalić krzesiwem", - "create.ponder.empty_blaze_burner.text_5": "Nie będzie on dawał jednak ciepła", + "create.ponder.empty_blaze_burner.text_5": "UNLOCALIZED: The flame can be transformed using a soul-infused item", + "create.ponder.empty_blaze_burner.text_6": "Nie będzie on dawał jednak ciepła", "create.ponder.encased_fluid_pipe.header": "UNLOCALIZED: Encasing Fluid Pipes", "create.ponder.encased_fluid_pipe.text_1": "UNLOCALIZED: Copper Casing can be used to decorate Fluid Pipes", 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 392f1d8a1..81d88165d 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: 1799", + "_": "Missing Localizations: 1800", "_": "->------------------------] Game Elements [------------------------<-", @@ -1765,7 +1765,8 @@ "create.ponder.empty_blaze_burner.text_2": "UNLOCALIZED: Alternatively, Blazes can be collected from their Spawners directly", "create.ponder.empty_blaze_burner.text_3": "UNLOCALIZED: You now have an ideal heat source for various machines", "create.ponder.empty_blaze_burner.text_4": "UNLOCALIZED: For Aesthetic purposes, Empty Blaze Burners can also be lit using Flint and Steel", - "create.ponder.empty_blaze_burner.text_5": "UNLOCALIZED: However, these are not suitable for industrial heating", + "create.ponder.empty_blaze_burner.text_5": "UNLOCALIZED: The flame can be transformed using a soul-infused item", + "create.ponder.empty_blaze_burner.text_6": "UNLOCALIZED: However, these are not suitable for industrial heating", "create.ponder.encased_fluid_pipe.header": "UNLOCALIZED: Encasing Fluid Pipes", "create.ponder.encased_fluid_pipe.text_1": "UNLOCALIZED: Copper Casing can be used to decorate Fluid Pipes", diff --git a/src/generated/resources/assets/create/lang/unfinished/ru_ru.json b/src/generated/resources/assets/create/lang/unfinished/ru_ru.json index cf74c44a8..6fb4e0db7 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ru_ru.json +++ b/src/generated/resources/assets/create/lang/unfinished/ru_ru.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 278", + "_": "Missing Localizations: 279", "_": "->------------------------] Game Elements [------------------------<-", @@ -1765,7 +1765,8 @@ "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_5": "UNLOCALIZED: The flame can be transformed using a soul-infused item", + "create.ponder.empty_blaze_burner.text_6": "Однако они не будут подходить для промышленного нагрева", "create.ponder.encased_fluid_pipe.header": "UNLOCALIZED: Encasing Fluid Pipes", "create.ponder.encased_fluid_pipe.text_1": "UNLOCALIZED: Copper Casing can be used to decorate Fluid Pipes", 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 9acfa3846..357e20e97 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: 288", + "_": "Missing Localizations: 289", "_": "->------------------------] Game Elements [------------------------<-", @@ -1765,7 +1765,8 @@ "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_5": "UNLOCALIZED: The flame can be transformed using a soul-infused item", + "create.ponder.empty_blaze_burner.text_6": "但是,这样的热源不足以给机器提加工供足够的热量", "create.ponder.encased_fluid_pipe.header": "UNLOCALIZED: Encasing Fluid Pipes", "create.ponder.encased_fluid_pipe.text_1": "UNLOCALIZED: Copper Casing can be used to decorate Fluid Pipes", diff --git a/src/generated/resources/assets/create/lang/unfinished/zh_tw.json b/src/generated/resources/assets/create/lang/unfinished/zh_tw.json index 5b001c079..980d8f1df 100644 --- a/src/generated/resources/assets/create/lang/unfinished/zh_tw.json +++ b/src/generated/resources/assets/create/lang/unfinished/zh_tw.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 283", + "_": "Missing Localizations: 284", "_": "->------------------------] Game Elements [------------------------<-", @@ -1765,7 +1765,8 @@ "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_5": "UNLOCALIZED: The flame can be transformed using a soul-infused item", + "create.ponder.empty_blaze_burner.text_6": "但是,這樣的熱源不足以給機器提加工供足夠的熱量", "create.ponder.encased_fluid_pipe.header": "UNLOCALIZED: Encasing Fluid Pipes", "create.ponder.encased_fluid_pipe.text_1": "UNLOCALIZED: Copper Casing can be used to decorate Fluid Pipes", diff --git a/src/main/java/com/simibubi/create/AllBlocks.java b/src/main/java/com/simibubi/create/AllBlocks.java index dd17da0f0..8f1d0d508 100644 --- a/src/main/java/com/simibubi/create/AllBlocks.java +++ b/src/main/java/com/simibubi/create/AllBlocks.java @@ -497,12 +497,16 @@ public class AllBlocks { public static final BlockEntry LIT_BLAZE_BURNER = REGISTRATE.block("lit_blaze_burner", LitBlazeBurnerBlock::new) .initialProperties(SharedProperties::softMetal) - .properties(p -> p.luminance($ -> 12)) + .properties(p -> p.luminance(LitBlazeBurnerBlock::getLight)) .addLayer(() -> RenderType::getCutoutMipped) .tag(AllBlockTags.FAN_TRANSPARENT.tag, AllBlockTags.FAN_HEATERS.tag) .loot((lt, block) -> lt.registerDropping(block, AllItems.EMPTY_BLAZE_BURNER.get())) - .blockstate((c, p) -> p.simpleBlock(c.getEntry(), p.models() - .getExistingFile(p.modLoc("block/blaze_burner/block_with_fire")))) + .blockstate((c, p) -> p.getVariantBuilder(c.get()).forAllStates(state -> + ConfiguredModel.builder() + .modelFile(p.models().getExistingFile(p.modLoc( + "block/blaze_burner/" + (state.get(LitBlazeBurnerBlock.FLAME_TYPE) == LitBlazeBurnerBlock.FlameType.SOUL ? "block_with_soul_fire" : "block_with_fire") + ))) + .build())) .register(); public static final BlockEntry DEPOT = REGISTRATE.block("depot", DepotBlock::new) diff --git a/src/main/java/com/simibubi/create/content/contraptions/processing/burner/BlazeBurnerHandler.java b/src/main/java/com/simibubi/create/content/contraptions/processing/burner/BlazeBurnerHandler.java index 3b37c7ef7..2b30de6ab 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/processing/burner/BlazeBurnerHandler.java +++ b/src/main/java/com/simibubi/create/content/contraptions/processing/burner/BlazeBurnerHandler.java @@ -5,14 +5,12 @@ import com.simibubi.create.AllSoundEvents; import com.simibubi.create.content.contraptions.processing.burner.BlazeBurnerTileEntity.FuelType; import net.minecraft.block.BlockState; -import net.minecraft.block.CampfireBlock; import net.minecraft.entity.projectile.EggEntity; import net.minecraft.entity.projectile.PotionEntity; import net.minecraft.item.ItemStack; import net.minecraft.potion.Potion; import net.minecraft.potion.PotionUtils; import net.minecraft.potion.Potions; -import net.minecraft.tags.BlockTags; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.Direction; import net.minecraft.util.SoundCategory; diff --git a/src/main/java/com/simibubi/create/content/contraptions/processing/burner/LitBlazeBurnerBlock.java b/src/main/java/com/simibubi/create/content/contraptions/processing/burner/LitBlazeBurnerBlock.java index cfe315f79..51220474d 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/processing/burner/LitBlazeBurnerBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/processing/burner/LitBlazeBurnerBlock.java @@ -4,16 +4,20 @@ import java.util.Random; import com.simibubi.create.AllBlocks; import com.simibubi.create.AllItems; +import com.simibubi.create.foundation.utility.Lang; import net.minecraft.block.Block; import net.minecraft.block.BlockState; -import net.minecraft.block.Blocks; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.particles.ParticleTypes; import net.minecraft.pathfinding.PathType; +import net.minecraft.state.EnumProperty; +import net.minecraft.state.StateContainer.Builder; +import net.minecraft.tags.ItemTags; import net.minecraft.util.ActionResultType; import net.minecraft.util.Hand; +import net.minecraft.util.IStringSerializable; import net.minecraft.util.SoundCategory; import net.minecraft.util.SoundEvents; import net.minecraft.util.math.BlockPos; @@ -25,23 +29,21 @@ import net.minecraft.world.IBlockReader; import net.minecraft.world.World; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.common.ToolType; public class LitBlazeBurnerBlock extends Block { -// 1.16: add a soul fire variant + public static final EnumProperty FLAME_TYPE = EnumProperty.create("flame_type", FlameType.class); -// public enum FlameType implements IStringSerializable { -// REGULAR, SOULFIRE; -// -// @Override -// public String getName() { -// return Lang.asId(name()); -// } -// -// } + public LitBlazeBurnerBlock(Properties properties) { + super(properties); + setDefaultState(getDefaultState().with(FLAME_TYPE, FlameType.REGULAR)); + } - public LitBlazeBurnerBlock(Properties p_i48440_1_) { - super(p_i48440_1_); + @Override + protected void fillStateContainer(Builder builder) { + super.fillStateContainer(builder); + builder.add(FLAME_TYPE); } @Override @@ -49,19 +51,26 @@ public class LitBlazeBurnerBlock extends Block { BlockRayTraceResult blockRayTraceResult) { ItemStack heldItem = player.getHeldItem(hand); - // Check for 'Shovels' - if (!heldItem.canHarvestBlock(Blocks.SNOW.getDefaultState())) - return ActionResultType.PASS; - - world.playSound(player, pos, SoundEvents.ENTITY_GENERIC_EXTINGUISH_FIRE, SoundCategory.BLOCKS, .5f, 2); - - if (world.isRemote) - return ActionResultType.SUCCESS; - if (!player.isCreative()) + if (heldItem.getToolTypes().contains(ToolType.SHOVEL)) { + world.playSound(player, pos, SoundEvents.ENTITY_GENERIC_EXTINGUISH_FIRE, SoundCategory.BLOCKS, 0.5f, 2); + if (world.isRemote) + return ActionResultType.SUCCESS; heldItem.damageItem(1, player, p -> p.sendBreakAnimation(hand)); + world.setBlockState(pos, AllBlocks.BLAZE_BURNER.getDefaultState()); + return ActionResultType.SUCCESS; + } - world.setBlockState(pos, AllBlocks.BLAZE_BURNER.getDefaultState()); - return ActionResultType.SUCCESS; + if (state.get(FLAME_TYPE) == FlameType.REGULAR) { + if (heldItem.getItem().isIn(ItemTags.SOUL_FIRE_BASE_BLOCKS)) { + world.playSound(player, pos, SoundEvents.BLOCK_SOUL_SAND_PLACE, SoundCategory.BLOCKS, 1.0f, world.rand.nextFloat() * 0.4F + 0.8F); + if (world.isRemote) + return ActionResultType.SUCCESS; + world.setBlockState(pos, getDefaultState().with(FLAME_TYPE, FlameType.SOUL)); + return ActionResultType.SUCCESS; + } + } + + return ActionResultType.PASS; } @Override @@ -77,7 +86,7 @@ public class LitBlazeBurnerBlock extends Block { } @OnlyIn(Dist.CLIENT) - public void animateTick(BlockState p_180655_1_, World world, BlockPos pos, Random random) { + public void animateTick(BlockState state, World world, BlockPos pos, Random random) { world.addOptionalParticle(ParticleTypes.LARGE_SMOKE, true, (double) pos.getX() + 0.5D + random.nextDouble() / 3.0D * (double) (random.nextBoolean() ? 1 : -1), (double) pos.getY() + random.nextDouble() + random.nextDouble(), @@ -90,6 +99,17 @@ public class LitBlazeBurnerBlock extends Block { 0.25F + random.nextFloat() * .25f, random.nextFloat() * 0.7F + 0.6F, false); } + if (state.get(FLAME_TYPE) == FlameType.SOUL) { + if (random.nextInt(8) == 0) { + world.addParticle(ParticleTypes.SOUL, + pos.getX() + 0.5F + random.nextDouble() / 4 * (random.nextBoolean() ? 1 : -1), + pos.getY() + 0.3F + random.nextDouble() / 2, + pos.getZ() + 0.5F + random.nextDouble() / 4 * (random.nextBoolean() ? 1 : -1), + 0.0, random.nextDouble() * 0.04 + 0.04, 0.0); + } + return; + } + if (random.nextInt(5) == 0) { for (int i = 0; i < random.nextInt(1) + 1; ++i) { world.addParticle(ParticleTypes.LAVA, (double) ((float) pos.getX() + 0.5F), @@ -98,15 +118,15 @@ public class LitBlazeBurnerBlock extends Block { } } } - + @Override public boolean hasComparatorInputOverride(BlockState p_149740_1_) { return true; } - + @Override public int getComparatorInputOverride(BlockState state, World p_180641_2_, BlockPos p_180641_3_) { - return 1; + return state.get(FLAME_TYPE) == FlameType.REGULAR ? 1 : 2; } @Override @@ -115,10 +135,28 @@ public class LitBlazeBurnerBlock extends Block { return AllBlocks.BLAZE_BURNER.get() .getCollisionShape(state, reader, pos, context); } - + @Override public boolean allowsMovement(BlockState state, IBlockReader reader, BlockPos pos, PathType type) { return false; } + public static int getLight(BlockState state) { + if (state.get(FLAME_TYPE) == FlameType.SOUL) + return 9; + else + return 12; + } + + public enum FlameType implements IStringSerializable { + + REGULAR, SOUL; + + @Override + public String getString() { + return Lang.asId(name()); + } + + } + } diff --git a/src/main/java/com/simibubi/create/foundation/ponder/content/ProcessingScenes.java b/src/main/java/com/simibubi/create/foundation/ponder/content/ProcessingScenes.java index d852322d9..71c14d919 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/content/ProcessingScenes.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/content/ProcessingScenes.java @@ -12,6 +12,7 @@ import com.simibubi.create.content.contraptions.processing.BasinBlock; import com.simibubi.create.content.contraptions.processing.BasinTileEntity; import com.simibubi.create.content.contraptions.processing.burner.BlazeBurnerBlock; import com.simibubi.create.content.contraptions.processing.burner.BlazeBurnerBlock.HeatLevel; +import com.simibubi.create.content.contraptions.processing.burner.LitBlazeBurnerBlock; import com.simibubi.create.foundation.ponder.ElementLink; import com.simibubi.create.foundation.ponder.SceneBuilder; import com.simibubi.create.foundation.ponder.SceneBuildingUtil; @@ -616,7 +617,7 @@ public class ProcessingScenes { .withItem(new ItemStack(Items.FLINT_AND_STEEL)), 40); scene.idle(7); - scene.world.setBlock(util.grid.at(3, 1, 2), AllBlocks.LIT_BLAZE_BURNER.getDefaultState(), true); + scene.world.setBlock(util.grid.at(3, 1, 2), AllBlocks.LIT_BLAZE_BURNER.getDefaultState(), false); scene.idle(10); scene.overlay.showText(70) .text("For Aesthetic purposes, Empty Blaze Burners can also be lit using Flint and Steel") @@ -625,6 +626,19 @@ public class ProcessingScenes { .up(), Direction.UP)) .placeNearTarget(); scene.idle(80); + scene.overlay.showControls(new InputWindowElement(util.vector.topOf(center.east() + .up()), Pointing.DOWN).rightClick() + .withItem(new ItemStack(Items.SOUL_SAND)), + 40); + scene.idle(7); + scene.world.modifyBlock(util.grid.at(3, 1, 2), s -> s.with(LitBlazeBurnerBlock.FLAME_TYPE, LitBlazeBurnerBlock.FlameType.SOUL), + false); + scene.overlay.showText(60) + .text("The flame can be transformed using a soul-infused item") + .pointAt(util.vector.blockSurface(center.east() + .up(), Direction.UP)) + .placeNearTarget(); + scene.idle(70); scene.overlay.showText(60) .colored(PonderPalette.RED) .text("However, these are not suitable for industrial heating") diff --git a/src/main/resources/assets/create/lang/es_es.json b/src/main/resources/assets/create/lang/es_es.json index 50cdc7d7e..a3d88329b 100644 --- a/src/main/resources/assets/create/lang/es_es.json +++ b/src/main/resources/assets/create/lang/es_es.json @@ -1728,7 +1728,7 @@ "create.ponder.empty_blaze_burner.text_2": "Alternativamente, los blaze pueden ser recogidos de sus spawners directamente", "create.ponder.empty_blaze_burner.text_3": "Ahora tienes una fuente de calor ideal para varias máquinas", "create.ponder.empty_blaze_burner.text_4": "Por motivos estéticos, los quemadores de blaze vacíos también se pueden encender con pedernal y acero", - "create.ponder.empty_blaze_burner.text_5": "Sin embargo, no son adecuados para la calefacción industrial", + "create.ponder.empty_blaze_burner.text_6": "Sin embargo, no son adecuados para la calefacción industrial", "create.ponder.encased_fluid_pipe.header": "Revestir tuberías de fluídos", "create.ponder.encased_fluid_pipe.text_1": "Copper Casing can be used to decorate Fluid Pipes", diff --git a/src/main/resources/assets/create/lang/ja_jp.json b/src/main/resources/assets/create/lang/ja_jp.json index f3fd33e07..2dec8b67b 100644 --- a/src/main/resources/assets/create/lang/ja_jp.json +++ b/src/main/resources/assets/create/lang/ja_jp.json @@ -1730,7 +1730,7 @@ "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.text_1": "銅ケーシングで液体パイプを飾ることができます", diff --git a/src/main/resources/assets/create/lang/ko_kr.json b/src/main/resources/assets/create/lang/ko_kr.json index ae7f495e5..191838375 100644 --- a/src/main/resources/assets/create/lang/ko_kr.json +++ b/src/main/resources/assets/create/lang/ko_kr.json @@ -1701,7 +1701,7 @@ "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.fan_direction.header": "공업용 선풍기의 바람", "create.ponder.fan_direction.text_1": "공업용 선풍기는 회전력을 사용하여 바람을 일으킬 수 있습니다", diff --git a/src/main/resources/assets/create/lang/pl_pl.json b/src/main/resources/assets/create/lang/pl_pl.json index 72e6c341d..e3de67996 100644 --- a/src/main/resources/assets/create/lang/pl_pl.json +++ b/src/main/resources/assets/create/lang/pl_pl.json @@ -1732,7 +1732,7 @@ "create.ponder.empty_blaze_burner.text_2": "Ewentualnie, Płomyk może być zabrany prosto z jego Spawnera", "create.ponder.empty_blaze_burner.text_3": "Masz teraz idealne źródło ciepła dla przeróżnych maszyn", "create.ponder.empty_blaze_burner.text_4": "Dla celów dekoracyjnych, puste palniki można też zapalić krzesiwem", - "create.ponder.empty_blaze_burner.text_5": "Nie będzie on dawał jednak ciepła", + "create.ponder.empty_blaze_burner.text_6": "Nie będzie on dawał jednak ciepła", "create.ponder.fan_direction.header": "Przepływ powietrza przez izolowane wiatraki", "create.ponder.fan_direction.text_1": "Izolowane wiatraki używają siły obrotowej, aby wytworzyć przepływ powietrza", diff --git a/src/main/resources/assets/create/lang/ru_ru.json b/src/main/resources/assets/create/lang/ru_ru.json index f07b150c0..c50ff7aaa 100644 --- a/src/main/resources/assets/create/lang/ru_ru.json +++ b/src/main/resources/assets/create/lang/ru_ru.json @@ -1705,7 +1705,7 @@ "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.fan_direction.header": "Воздушном потоке Вентиляторов в Корпусе", "create.ponder.fan_direction.text_1": "Вентиляторы в Корпусе используют Силу Вращения для создания Воздушного Потока", diff --git a/src/main/resources/assets/create/lang/zh_cn.json b/src/main/resources/assets/create/lang/zh_cn.json index 342ee9146..669ec2d1e 100644 --- a/src/main/resources/assets/create/lang/zh_cn.json +++ b/src/main/resources/assets/create/lang/zh_cn.json @@ -2100,7 +2100,7 @@ "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.fan_direction.header": "鼓风机的气流", "create.ponder.fan_direction.text_1": "鼓风机使用旋转力来制造气流", diff --git a/src/main/resources/assets/create/lang/zh_tw.json b/src/main/resources/assets/create/lang/zh_tw.json index 45c124d4c..aa751d6bf 100644 --- a/src/main/resources/assets/create/lang/zh_tw.json +++ b/src/main/resources/assets/create/lang/zh_tw.json @@ -1702,7 +1702,7 @@ "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.fan_direction.header": "鼓風機的氣流", "create.ponder.fan_direction.text_1": "鼓風機使用動能來製造氣流", diff --git a/src/main/resources/assets/create/models/block/blaze_burner/block_with_soul_fire.json b/src/main/resources/assets/create/models/block/blaze_burner/block_with_soul_fire.json new file mode 100644 index 000000000..acddfcbd3 --- /dev/null +++ b/src/main/resources/assets/create/models/block/blaze_burner/block_with_soul_fire.json @@ -0,0 +1,6 @@ +{ + "parent": "create:block/blaze_burner/block_with_fire", + "textures": { + "fire": "block/soul_campfire_fire" + } +} \ No newline at end of file From e5eca1ed36bdc0429a0328f1804d3996aa0b4354 Mon Sep 17 00:00:00 2001 From: kotakotik22 <61428759+kotakotik22@users.noreply.github.com> Date: Fri, 9 Jul 2021 18:45:50 +0200 Subject: [PATCH 050/118] Arm interaction point utilities for addons --- .../mechanicalArm/ArmInteractionPoint.java | 190 +++++++++--------- 1 file changed, 98 insertions(+), 92 deletions(-) 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 2a0398b38..b3394640b 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,16 +1,17 @@ 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.google.common.collect.ImmutableMap; import com.jozufozu.flywheel.core.PartialModel; import com.mojang.blaze3d.matrix.MatrixStack; 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; @@ -65,74 +66,80 @@ import net.minecraftforge.items.ItemHandlerHelper; import net.minecraftforge.items.wrapper.InvWrapper; public abstract class ArmInteractionPoint { - - enum Mode { + public enum Mode { DEPOSIT, TAKE } - BlockPos pos; - BlockState state; - Mode mode; + protected BlockPos pos; + protected BlockState state; + protected Mode mode; - private LazyOptional cachedHandler; - private ArmAngleTarget cachedAngles; + protected LazyOptional cachedHandler; + protected ArmAngleTarget cachedAngles; - private static ImmutableMap> POINTS = - ImmutableMap.>builder() - .put(new Saw(), Saw::new) - .put(new Belt(), Belt::new) - .put(new Depot(), Depot::new) - .put(new Chute(), Chute::new) - .put(new Basin(), Basin::new) - .put(new Funnel(), Funnel::new) - .put(new Jukebox(), Jukebox::new) - .put(new Crafter(), Crafter::new) - .put(new Deployer(), Deployer::new) - .put(new Composter(), Composter::new) - .put(new Millstone(), Millstone::new) - .put(new BlazeBurner(), BlazeBurner::new) - .put(new CrushingWheels(), CrushingWheels::new) - .build(); + 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 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 ArmInteractionPoint() { cachedHandler = LazyOptional.empty(); } @OnlyIn(Dist.CLIENT) - void transformFlag(MatrixStack stack) {} + protected void transformFlag(MatrixStack stack) {} - PartialModel getFlagType() { + protected PartialModel getFlagType() { return mode == Mode.TAKE ? AllBlockPartials.FLAG_LONG_OUT : AllBlockPartials.FLAG_LONG_IN; } - void cycleMode() { + protected void cycleMode() { mode = mode == Mode.DEPOSIT ? Mode.TAKE : Mode.DEPOSIT; } - Vector3d getInteractionPositionVector() { + protected Vector3d getInteractionPositionVector() { return VecHelper.getCenterOf(pos); } - Direction getInteractionDirection() { + protected Direction getInteractionDirection() { return Direction.DOWN; } - boolean isStillValid(IBlockReader reader) { + protected boolean isStillValid(IBlockReader reader) { return isValid(reader, pos, reader.getBlockState(pos)); } - void keepAlive(IWorld world) {} + protected void keepAlive(IWorld world) {} - abstract boolean isValid(IBlockReader reader, BlockPos pos, BlockState state); + protected abstract boolean isValid(IBlockReader reader, BlockPos pos, BlockState state); - static boolean isInteractable(IBlockReader reader, BlockPos pos, BlockState state) { + protected static boolean isInteractable(IBlockReader reader, BlockPos pos, BlockState state) { for (ArmInteractionPoint armInteractionPoint : POINTS.keySet()) if (armInteractionPoint.isValid(reader, pos, state)) return true; return false; } - ArmAngleTarget getTargetAngles(BlockPos armPos, boolean ceiling) { + protected ArmAngleTarget getTargetAngles(BlockPos armPos, boolean ceiling) { if (cachedAngles == null) cachedAngles = new ArmAngleTarget(armPos, getInteractionPositionVector(), getInteractionDirection(), ceiling); @@ -141,7 +148,7 @@ public abstract class ArmInteractionPoint { } @Nullable - IItemHandler getHandler(World world) { + protected IItemHandler getHandler(World world) { if (!cachedHandler.isPresent()) { TileEntity te = world.getTileEntity(pos); if (te == null) @@ -151,25 +158,25 @@ public abstract class ArmInteractionPoint { return cachedHandler.orElse(null); } - ItemStack insert(World world, ItemStack stack, boolean simulate) { + protected ItemStack insert(World world, ItemStack stack, boolean simulate) { IItemHandler handler = getHandler(world); if (handler == null) return stack; return ItemHandlerHelper.insertItem(handler, stack, simulate); } - ItemStack extract(World world, int slot, int amount, boolean simulate) { + protected ItemStack extract(World world, int slot, int amount, boolean simulate) { IItemHandler handler = getHandler(world); if (handler == null) return ItemStack.EMPTY; return handler.extractItem(slot, amount, simulate); } - ItemStack extract(World world, int slot, boolean simulate) { + protected ItemStack extract(World world, int slot, boolean simulate) { return extract(world, slot, 64, simulate); } - int getSlotCount(World world) { + protected int getSlotCount(World world) { IItemHandler handler = getHandler(world); if (handler == null) return 0; @@ -177,7 +184,7 @@ public abstract class ArmInteractionPoint { } @Nullable - static ArmInteractionPoint createAt(IBlockReader world, BlockPos pos) { + protected static ArmInteractionPoint createAt(IBlockReader world, BlockPos pos) { BlockState state = world.getBlockState(pos); ArmInteractionPoint point = null; @@ -195,14 +202,14 @@ public abstract class ArmInteractionPoint { return point; } - CompoundNBT serialize(BlockPos anchor) { + protected CompoundNBT serialize(BlockPos anchor) { CompoundNBT nbt = new CompoundNBT(); nbt.put("Pos", NBTUtil.writeBlockPos(pos.subtract(anchor))); NBTHelper.writeEnum(nbt, "Mode", mode); return nbt; } - static ArmInteractionPoint deserialize(IBlockReader world, BlockPos anchor, CompoundNBT nbt) { + protected static ArmInteractionPoint deserialize(IBlockReader world, BlockPos anchor, CompoundNBT nbt) { BlockPos pos = NBTUtil.readBlockPos(nbt.getCompound("Pos")); ArmInteractionPoint interactionPoint = createAt(world, pos.add(anchor)); if (interactionPoint == null) @@ -211,112 +218,112 @@ public abstract class ArmInteractionPoint { return interactionPoint; } - static abstract class TopFaceArmInteractionPoint extends ArmInteractionPoint { + public static abstract class TopFaceArmInteractionPoint extends ArmInteractionPoint { @Override - Vector3d getInteractionPositionVector() { + protected Vector3d getInteractionPositionVector() { return Vector3d.of(pos).add(.5f, 1, .5f); } } - static class Depot extends ArmInteractionPoint { + public static class Depot extends ArmInteractionPoint { @Override - Vector3d getInteractionPositionVector() { + protected Vector3d getInteractionPositionVector() { return Vector3d.of(pos).add(.5f, 14 / 16f, .5f); } @Override - boolean isValid(IBlockReader reader, BlockPos pos, BlockState state) { + protected boolean isValid(IBlockReader reader, BlockPos pos, BlockState state) { return AllBlocks.DEPOT.has(state) || AllBlocks.WEIGHTED_EJECTOR.has(state); } } - static class Saw extends Depot { + public static class Saw extends Depot { @Override - boolean isValid(IBlockReader reader, BlockPos pos, BlockState state) { + protected boolean isValid(IBlockReader reader, BlockPos pos, BlockState state) { return AllBlocks.MECHANICAL_SAW.has(state) && state.get(SawBlock.FACING) == Direction.UP && ((KineticTileEntity) reader.getTileEntity(pos)).getSpeed() != 0; } } - static class Millstone extends ArmInteractionPoint { + public static class Millstone extends ArmInteractionPoint { @Override - boolean isValid(IBlockReader reader, BlockPos pos, BlockState state) { + protected boolean isValid(IBlockReader reader, BlockPos pos, BlockState state) { return AllBlocks.MILLSTONE.has(state); } } - static class CrushingWheels extends TopFaceArmInteractionPoint { + public static class CrushingWheels extends TopFaceArmInteractionPoint { @Override - boolean isValid(IBlockReader reader, BlockPos pos, BlockState state) { + protected boolean isValid(IBlockReader reader, BlockPos pos, BlockState state) { return AllBlocks.CRUSHING_WHEEL_CONTROLLER.has(state); } } - static class Composter extends TopFaceArmInteractionPoint { + public static class Composter extends TopFaceArmInteractionPoint { @Override - Vector3d getInteractionPositionVector() { + protected Vector3d getInteractionPositionVector() { return Vector3d.of(pos).add(.5f, 13 / 16f, .5f); } @Override - boolean isValid(IBlockReader reader, BlockPos pos, BlockState state) { + protected boolean isValid(IBlockReader reader, BlockPos pos, BlockState state) { return Blocks.COMPOSTER.equals(state.getBlock()); } @Nullable @Override - IItemHandler getHandler(World world) { + protected IItemHandler getHandler(World world) { return new InvWrapper( ((ComposterBlock) Blocks.COMPOSTER).createInventory(world.getBlockState(pos), world, pos)); } } - static class Deployer extends ArmInteractionPoint { + public static class Deployer extends ArmInteractionPoint { @Override - boolean isValid(IBlockReader reader, BlockPos pos, BlockState state) { + protected boolean isValid(IBlockReader reader, BlockPos pos, BlockState state) { return AllBlocks.DEPLOYER.has(state); } @Override - Direction getInteractionDirection() { + protected Direction getInteractionDirection() { return state.get(DeployerBlock.FACING) .getOpposite(); } @Override - Vector3d getInteractionPositionVector() { + protected Vector3d getInteractionPositionVector() { return super.getInteractionPositionVector() .add(Vector3d.of(getInteractionDirection().getDirectionVec()).scale(.65f)); } } - static class BlazeBurner extends ArmInteractionPoint { + public static class BlazeBurner extends ArmInteractionPoint { @Override - boolean isValid(IBlockReader reader, BlockPos pos, BlockState state) { + protected boolean isValid(IBlockReader reader, BlockPos pos, BlockState state) { return AllBlocks.BLAZE_BURNER.has(state); } @Override - ItemStack extract(World world, int slot, int amount, boolean simulate) { + protected ItemStack extract(World world, int slot, int amount, boolean simulate) { return ItemStack.EMPTY; } @Override - ItemStack insert(World world, ItemStack stack, boolean simulate) { + protected ItemStack insert(World world, ItemStack stack, boolean simulate) { ItemStack input = stack.copy(); if (!BlazeBurnerBlock.tryInsert(state, world, pos, input, false, true) .getResult() @@ -330,25 +337,25 @@ public abstract class ArmInteractionPoint { } @Override - void cycleMode() {} + protected void cycleMode() {} } - static class Crafter extends ArmInteractionPoint { + public static class Crafter extends ArmInteractionPoint { @Override - boolean isValid(IBlockReader reader, BlockPos pos, BlockState state) { + protected boolean isValid(IBlockReader reader, BlockPos pos, BlockState state) { return AllBlocks.MECHANICAL_CRAFTER.has(state); } @Override - Direction getInteractionDirection() { + protected Direction getInteractionDirection() { return state.get(MechanicalCrafterBlock.HORIZONTAL_FACING) .getOpposite(); } @Override - ItemStack extract(World world, int slot, int amount, boolean simulate) { + protected ItemStack extract(World world, int slot, int amount, boolean simulate) { TileEntity te = world.getTileEntity(pos); if (!(te instanceof MechanicalCrafterTileEntity)) return ItemStack.EMPTY; @@ -361,36 +368,36 @@ public abstract class ArmInteractionPoint { } @Override - Vector3d getInteractionPositionVector() { + protected Vector3d getInteractionPositionVector() { return super.getInteractionPositionVector() .add(Vector3d.of(getInteractionDirection().getDirectionVec()).scale(.5f)); } } - static class Basin extends ArmInteractionPoint { + public static class Basin extends ArmInteractionPoint { @Override - boolean isValid(IBlockReader reader, BlockPos pos, BlockState state) { + protected boolean isValid(IBlockReader reader, BlockPos pos, BlockState state) { return AllBlocks.BASIN.has(state); } } - static class Jukebox extends TopFaceArmInteractionPoint { + public static class Jukebox extends TopFaceArmInteractionPoint { @Override - boolean isValid(IBlockReader reader, BlockPos pos, BlockState state) { + protected boolean isValid(IBlockReader reader, BlockPos pos, BlockState state) { return state.getBlock() instanceof JukeboxBlock; } @Override - int getSlotCount(World world) { + protected int getSlotCount(World world) { return 1; } @Override - ItemStack insert(World world, ItemStack stack, boolean simulate) { + protected ItemStack insert(World world, ItemStack stack, boolean simulate) { TileEntity tileEntity = world.getTileEntity(pos); if (!(tileEntity instanceof JukeboxTileEntity)) return stack; @@ -414,7 +421,7 @@ public abstract class ArmInteractionPoint { } @Override - ItemStack extract(World world, int slot, int amount, boolean simulate) { + protected ItemStack extract(World world, int slot, int amount, boolean simulate) { TileEntity tileEntity = world.getTileEntity(pos); if (!(tileEntity instanceof JukeboxTileEntity)) return ItemStack.EMPTY; @@ -434,16 +441,16 @@ public abstract class ArmInteractionPoint { } - static class Belt extends Depot { + public static class Belt extends Depot { @Override - boolean isValid(IBlockReader reader, BlockPos pos, BlockState state) { + protected boolean isValid(IBlockReader reader, BlockPos pos, BlockState state) { return AllBlocks.BELT.has(state) && !(reader.getBlockState(pos.up()) .getBlock() instanceof BeltTunnelBlock); } @Override - void keepAlive(IWorld world) { + protected void keepAlive(IWorld world) { super.keepAlive(world); BeltTileEntity beltTE = BeltHelper.getSegmentTE(world, pos); if (beltTE == null) @@ -464,41 +471,41 @@ public abstract class ArmInteractionPoint { } - static class Chute extends TopFaceArmInteractionPoint { + public static class Chute extends TopFaceArmInteractionPoint { @Override - boolean isValid(IBlockReader reader, BlockPos pos, BlockState state) { + protected boolean isValid(IBlockReader reader, BlockPos pos, BlockState state) { return AbstractChuteBlock.isChute(state); } } - static class Funnel extends ArmInteractionPoint { + public static class Funnel extends ArmInteractionPoint { @Override - Vector3d getInteractionPositionVector() { + protected Vector3d getInteractionPositionVector() { return VecHelper.getCenterOf(pos) .add(Vector3d.of(FunnelBlock.getFunnelFacing(state) .getDirectionVec()).scale(-.15f)); } @Override - int getSlotCount(World world) { + protected int getSlotCount(World world) { return 0; } @Override - ItemStack extract(World world, int slot, int amount, boolean simulate) { + protected ItemStack extract(World world, int slot, int amount, boolean simulate) { return ItemStack.EMPTY; } @Override - Direction getInteractionDirection() { + protected Direction getInteractionDirection() { return FunnelBlock.getFunnelFacing(state) .getOpposite(); } @Override - ItemStack insert(World world, ItemStack stack, boolean simulate) { + protected ItemStack insert(World 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); @@ -524,15 +531,14 @@ public abstract class ArmInteractionPoint { } @Override - boolean isValid(IBlockReader reader, BlockPos pos, BlockState state) { + protected boolean isValid(IBlockReader reader, BlockPos pos, BlockState state) { return state.getBlock() instanceof AbstractFunnelBlock && !(state.contains(FunnelBlock.EXTRACTING) && state.get(FunnelBlock.EXTRACTING)) && !(state.contains(BeltFunnelBlock.SHAPE) && state.get(BeltFunnelBlock.SHAPE) == Shape.PUSHING); } @Override - void cycleMode() {} + protected void cycleMode() {} } - } From 352f213429365bc3d1cd091abc3bc078c6a2e8ff Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Fri, 9 Jul 2021 19:27:50 +0200 Subject: [PATCH 051/118] Buffing the Buffers - Fixed large amounts of output in crushing wheels getting voided due to its buffer capacity - Fixed basin processing running constant recipe lookups while backed up #1911 - Fixed mixer retracting after every operation when auto-output is active --- src/generated/resources/.cache/cache | 16 +-- .../resources/assets/create/lang/en_us.json | 2 +- .../assets/create/lang/unfinished/de_de.json | 2 +- .../assets/create/lang/unfinished/es_mx.json | 2 +- .../assets/create/lang/unfinished/fr_fr.json | 2 +- .../assets/create/lang/unfinished/it_it.json | 2 +- .../assets/create/lang/unfinished/nl_nl.json | 2 +- .../assets/create/lang/unfinished/pt_br.json | 2 +- .../data/create/advancements/aesthetics.json | 4 +- .../press/MechanicalPressTileEntity.java | 4 +- .../processing/BasinOperatingTileEntity.java | 8 +- .../processing/BasinTileEntity.java | 122 ++++++++++++------ .../processing/ProcessingInventory.java | 2 +- .../ponder/content/ProcessingScenes.java | 6 +- 14 files changed, 113 insertions(+), 63 deletions(-) diff --git a/src/generated/resources/.cache/cache b/src/generated/resources/.cache/cache index bcb97f046..9d0048b1d 100644 --- a/src/generated/resources/.cache/cache +++ b/src/generated/resources/.cache/cache @@ -426,17 +426,17 @@ a3a11524cd3515fc01d905767b4b7ea782adaf03 assets/create/blockstates/yellow_seat.j 7f39521b211441f5c3e06d60c5978cebe16cacfb assets/create/blockstates/zinc_block.json b7181bcd8182b2f17088e5aa881f374c9c65470c assets/create/blockstates/zinc_ore.json e1d3c02695cbd2ee7bbede97f72941835634a3a5 assets/create/lang/en_ud.json -c75657997c7adf06fd12020aacc9465605563183 assets/create/lang/en_us.json -94f26bdaf8d1a39c25c4da551530696d4ff8b24c assets/create/lang/unfinished/de_de.json +7628f0328198a4100dc938de4c4ea8f792473a85 assets/create/lang/en_us.json +54c93de1ca876299fc34dc593580aeed5748aa15 assets/create/lang/unfinished/de_de.json 51ed1df10b8afcf27f9dcdae3bca80d05740d450 assets/create/lang/unfinished/es_es.json -47bf5a31dfd8530a0db9813a56b762cf3129ddc6 assets/create/lang/unfinished/es_mx.json -8bc26af581f714ea54f6e1a89ee2cbac917bf7df assets/create/lang/unfinished/fr_fr.json -e1c11002170d4c0acb9ef442c41ea04b99d20440 assets/create/lang/unfinished/it_it.json +72e1a89ef45c530eaab6f27b4d2dd447775b5d0a assets/create/lang/unfinished/es_mx.json +0da959961c4bde45bcef869bc9bd58eac1d3bd40 assets/create/lang/unfinished/fr_fr.json +ba963b9db50f0ea57dee1a93664aacf2dc44eec5 assets/create/lang/unfinished/it_it.json caa45f4ae4e4e9b338999b7975767dc33e569881 assets/create/lang/unfinished/ja_jp.json aaa8ecc84b853cc8a93f8d5812f22beefaf48266 assets/create/lang/unfinished/ko_kr.json -9e32f7de0acff6ee4ee6bfa5beb5a4c103cdcb0a assets/create/lang/unfinished/nl_nl.json +2046b5e7c9904f6ac07d7f9b94fd80a52a1f5721 assets/create/lang/unfinished/nl_nl.json 70f552fe3bd0365d9f1f339032bc598bc0ff9026 assets/create/lang/unfinished/pl_pl.json -83422c331b7c670d1dc8450e0b02a6443fc8ca1b assets/create/lang/unfinished/pt_br.json +427a0252a5f3d5282ab572c6b06638117ed68760 assets/create/lang/unfinished/pt_br.json f12de6d61ff3f634e5af7485230032202ce0f9de assets/create/lang/unfinished/ru_ru.json 75c32bf33d907d0575d05ad575566d50bc78c1c9 assets/create/lang/unfinished/zh_cn.json 32a411bf248dae1eeb8a3e7d9450e5c1b9cd0b59 assets/create/lang/unfinished/zh_tw.json @@ -1699,7 +1699,7 @@ d080b1b25e5bc8baf5aee68691b08c7f12ece3b0 assets/create/models/item/windmill_bear a80fb25a0b655e76be986b5b49fcb0f03461a1ab assets/create/models/item/zinc_nugget.json b1689617190c05ef34bd18456b0c7ae09bb3210f assets/create/models/item/zinc_ore.json 58880e397902f8ca5b3b59ed4423e626109ddc4c assets/create/sounds.json -5d0cc4c0255dc241e61c173b31ddca70c88d08e4 data/create/advancements/aesthetics.json +0f1b4b980afba9bf2caf583b88e261bba8b10313 data/create/advancements/aesthetics.json 187921fa131b06721bfaf63f2623a28c141aae9a data/create/advancements/andesite_alloy.json 0ea2db7173b5be28b289ea7c9a6a0cf5805c60c7 data/create/advancements/andesite_casing.json 83c046bd200623933545c9e4326f782fb02c87fa data/create/advancements/arm_blaze_burner.json diff --git a/src/generated/resources/assets/create/lang/en_us.json b/src/generated/resources/assets/create/lang/en_us.json index 5976f79b0..1164784c1 100644 --- a/src/generated/resources/assets/create/lang/en_us.json +++ b/src/generated/resources/assets/create/lang/en_us.json @@ -1765,7 +1765,7 @@ "create.ponder.empty_blaze_burner.text_3": "You now have an ideal heat source for various machines", "create.ponder.empty_blaze_burner.text_4": "For Aesthetic purposes, Empty Blaze Burners can also be lit using Flint and Steel", "create.ponder.empty_blaze_burner.text_5": "The flame can be transformed using a soul-infused item", - "create.ponder.empty_blaze_burner.text_6": "However, these are not suitable for industrial heating", + "create.ponder.empty_blaze_burner.text_6": "However, without a blaze they are not suitable for industrial heating", "create.ponder.encased_fluid_pipe.header": "Encasing Fluid Pipes", "create.ponder.encased_fluid_pipe.text_1": "Copper Casing can be used to decorate Fluid Pipes", 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 fd0a27df5..fe205fa5b 100644 --- a/src/generated/resources/assets/create/lang/unfinished/de_de.json +++ b/src/generated/resources/assets/create/lang/unfinished/de_de.json @@ -1766,7 +1766,7 @@ "create.ponder.empty_blaze_burner.text_3": "UNLOCALIZED: You now have an ideal heat source for various machines", "create.ponder.empty_blaze_burner.text_4": "UNLOCALIZED: For Aesthetic purposes, Empty Blaze Burners can also be lit using Flint and Steel", "create.ponder.empty_blaze_burner.text_5": "UNLOCALIZED: The flame can be transformed using a soul-infused item", - "create.ponder.empty_blaze_burner.text_6": "UNLOCALIZED: However, these are not suitable for industrial heating", + "create.ponder.empty_blaze_burner.text_6": "UNLOCALIZED: However, without a blaze they are not suitable for industrial heating", "create.ponder.encased_fluid_pipe.header": "UNLOCALIZED: Encasing Fluid Pipes", "create.ponder.encased_fluid_pipe.text_1": "UNLOCALIZED: Copper Casing can be used to decorate Fluid Pipes", diff --git a/src/generated/resources/assets/create/lang/unfinished/es_mx.json b/src/generated/resources/assets/create/lang/unfinished/es_mx.json index 5a8fa399d..9806485df 100644 --- a/src/generated/resources/assets/create/lang/unfinished/es_mx.json +++ b/src/generated/resources/assets/create/lang/unfinished/es_mx.json @@ -1766,7 +1766,7 @@ "create.ponder.empty_blaze_burner.text_3": "UNLOCALIZED: You now have an ideal heat source for various machines", "create.ponder.empty_blaze_burner.text_4": "UNLOCALIZED: For Aesthetic purposes, Empty Blaze Burners can also be lit using Flint and Steel", "create.ponder.empty_blaze_burner.text_5": "UNLOCALIZED: The flame can be transformed using a soul-infused item", - "create.ponder.empty_blaze_burner.text_6": "UNLOCALIZED: However, these are not suitable for industrial heating", + "create.ponder.empty_blaze_burner.text_6": "UNLOCALIZED: However, without a blaze they are not suitable for industrial heating", "create.ponder.encased_fluid_pipe.header": "UNLOCALIZED: Encasing Fluid Pipes", "create.ponder.encased_fluid_pipe.text_1": "UNLOCALIZED: Copper Casing can be used to decorate Fluid Pipes", diff --git a/src/generated/resources/assets/create/lang/unfinished/fr_fr.json b/src/generated/resources/assets/create/lang/unfinished/fr_fr.json index bea5c916a..561607ad2 100644 --- a/src/generated/resources/assets/create/lang/unfinished/fr_fr.json +++ b/src/generated/resources/assets/create/lang/unfinished/fr_fr.json @@ -1766,7 +1766,7 @@ "create.ponder.empty_blaze_burner.text_3": "UNLOCALIZED: You now have an ideal heat source for various machines", "create.ponder.empty_blaze_burner.text_4": "UNLOCALIZED: For Aesthetic purposes, Empty Blaze Burners can also be lit using Flint and Steel", "create.ponder.empty_blaze_burner.text_5": "UNLOCALIZED: The flame can be transformed using a soul-infused item", - "create.ponder.empty_blaze_burner.text_6": "UNLOCALIZED: However, these are not suitable for industrial heating", + "create.ponder.empty_blaze_burner.text_6": "UNLOCALIZED: However, without a blaze they are not suitable for industrial heating", "create.ponder.encased_fluid_pipe.header": "UNLOCALIZED: Encasing Fluid Pipes", "create.ponder.encased_fluid_pipe.text_1": "UNLOCALIZED: Copper Casing can be used to decorate Fluid Pipes", diff --git a/src/generated/resources/assets/create/lang/unfinished/it_it.json b/src/generated/resources/assets/create/lang/unfinished/it_it.json index 7636eb7ed..2ebf47e7c 100644 --- a/src/generated/resources/assets/create/lang/unfinished/it_it.json +++ b/src/generated/resources/assets/create/lang/unfinished/it_it.json @@ -1766,7 +1766,7 @@ "create.ponder.empty_blaze_burner.text_3": "UNLOCALIZED: You now have an ideal heat source for various machines", "create.ponder.empty_blaze_burner.text_4": "UNLOCALIZED: For Aesthetic purposes, Empty Blaze Burners can also be lit using Flint and Steel", "create.ponder.empty_blaze_burner.text_5": "UNLOCALIZED: The flame can be transformed using a soul-infused item", - "create.ponder.empty_blaze_burner.text_6": "UNLOCALIZED: However, these are not suitable for industrial heating", + "create.ponder.empty_blaze_burner.text_6": "UNLOCALIZED: However, without a blaze they are not suitable for industrial heating", "create.ponder.encased_fluid_pipe.header": "UNLOCALIZED: Encasing Fluid Pipes", "create.ponder.encased_fluid_pipe.text_1": "UNLOCALIZED: Copper Casing can be used to decorate Fluid Pipes", diff --git a/src/generated/resources/assets/create/lang/unfinished/nl_nl.json b/src/generated/resources/assets/create/lang/unfinished/nl_nl.json index 051f1e324..48066cd30 100644 --- a/src/generated/resources/assets/create/lang/unfinished/nl_nl.json +++ b/src/generated/resources/assets/create/lang/unfinished/nl_nl.json @@ -1766,7 +1766,7 @@ "create.ponder.empty_blaze_burner.text_3": "UNLOCALIZED: You now have an ideal heat source for various machines", "create.ponder.empty_blaze_burner.text_4": "UNLOCALIZED: For Aesthetic purposes, Empty Blaze Burners can also be lit using Flint and Steel", "create.ponder.empty_blaze_burner.text_5": "UNLOCALIZED: The flame can be transformed using a soul-infused item", - "create.ponder.empty_blaze_burner.text_6": "UNLOCALIZED: However, these are not suitable for industrial heating", + "create.ponder.empty_blaze_burner.text_6": "UNLOCALIZED: However, without a blaze they are not suitable for industrial heating", "create.ponder.encased_fluid_pipe.header": "UNLOCALIZED: Encasing Fluid Pipes", "create.ponder.encased_fluid_pipe.text_1": "UNLOCALIZED: Copper Casing can be used to decorate Fluid Pipes", 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 81d88165d..0121ffdb1 100644 --- a/src/generated/resources/assets/create/lang/unfinished/pt_br.json +++ b/src/generated/resources/assets/create/lang/unfinished/pt_br.json @@ -1766,7 +1766,7 @@ "create.ponder.empty_blaze_burner.text_3": "UNLOCALIZED: You now have an ideal heat source for various machines", "create.ponder.empty_blaze_burner.text_4": "UNLOCALIZED: For Aesthetic purposes, Empty Blaze Burners can also be lit using Flint and Steel", "create.ponder.empty_blaze_burner.text_5": "UNLOCALIZED: The flame can be transformed using a soul-infused item", - "create.ponder.empty_blaze_burner.text_6": "UNLOCALIZED: However, these are not suitable for industrial heating", + "create.ponder.empty_blaze_burner.text_6": "UNLOCALIZED: However, without a blaze they are not suitable for industrial heating", "create.ponder.encased_fluid_pipe.header": "UNLOCALIZED: Encasing Fluid Pipes", "create.ponder.encased_fluid_pipe.text_1": "UNLOCALIZED: Copper Casing can be used to decorate Fluid Pipes", diff --git a/src/generated/resources/data/create/advancements/aesthetics.json b/src/generated/resources/data/create/advancements/aesthetics.json index 59a86f429..d723cbe38 100644 --- a/src/generated/resources/data/create/advancements/aesthetics.json +++ b/src/generated/resources/data/create/advancements/aesthetics.json @@ -28,8 +28,8 @@ "trigger": "create:bracket_apply", "conditions": { "accepted_entries": [ - "create:large_cogwheel", - "create:cogwheel" + "create:cogwheel", + "create:large_cogwheel" ] } }, diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/press/MechanicalPressTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/press/MechanicalPressTileEntity.java index d6bbb96c3..78ff1aeab 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/press/MechanicalPressTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/press/MechanicalPressTileEntity.java @@ -197,7 +197,9 @@ public class MechanicalPressTileEntity extends BasinOperatingTileEntity { finished = true; running = false; - if (onBasin() && matchBasinRecipe(currentRecipe)) + if (onBasin() && matchBasinRecipe(currentRecipe) + && getBasin().filter(BasinTileEntity::canContinueProcessing) + .isPresent()) startProcessingBasin(); pressedItems.clear(); diff --git a/src/main/java/com/simibubi/create/content/contraptions/processing/BasinOperatingTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/processing/BasinOperatingTileEntity.java index a4f77ed6d..7710ca28e 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/processing/BasinOperatingTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/processing/BasinOperatingTileEntity.java @@ -60,9 +60,12 @@ public abstract class BasinOperatingTileEntity extends KineticTileEntity { if (getSpeed() == 0) return true; if (isRunning()) - return false; + return true; if (world == null || world.isRemote) return true; + if (!getBasin().filter(BasinTileEntity::canContinueProcessing) + .isPresent()) + return true; List> recipes = getMatchingRecipes(); if (recipes.isEmpty()) @@ -98,6 +101,7 @@ public abstract class BasinOperatingTileEntity extends KineticTileEntity { if (!optionalBasin.isPresent()) return; BasinTileEntity basin = optionalBasin.get(); + boolean wasEmpty = basin.canContinueProcessing(); if (!BasinRecipe.apply(basin, currentRecipe)) return; Optional processedRecipeTrigger = getProcessedRecipeTrigger(); @@ -106,7 +110,7 @@ public abstract class BasinOperatingTileEntity extends KineticTileEntity { basin.inputTank.sendDataImmediately(); // Continue mixing - if (matchBasinRecipe(currentRecipe)) { + if (wasEmpty && matchBasinRecipe(currentRecipe)) { continueWithPreviousRecipe(); sendData(); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/processing/BasinTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/processing/BasinTileEntity.java index b15887024..91e3b3c4c 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/processing/BasinTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/processing/BasinTileEntity.java @@ -88,6 +88,7 @@ public class BasinTileEntity extends SmartTileEntity implements IHaveGoggleInfor List disabledSpoutputs; Direction preferredSpoutput; protected List spoutputBuffer; + protected List spoutputFluidBuffer; public static final int OUTPUT_ANIMATION_TIME = 10; List> visualizedOutputItems; @@ -114,6 +115,7 @@ public class BasinTileEntity extends SmartTileEntity implements IHaveGoggleInfor disabledSpoutputs = new ArrayList<>(); preferredSpoutput = null; spoutputBuffer = new ArrayList<>(); + spoutputFluidBuffer = new ArrayList<>(); } @Override @@ -152,6 +154,8 @@ public class BasinTileEntity extends SmartTileEntity implements IHaveGoggleInfor ListNBT disabledList = compound.getList("DisabledSpoutput", NBT.TAG_STRING); disabledList.forEach(d -> disabledSpoutputs.add(Direction.valueOf(((StringNBT) d).getString()))); spoutputBuffer = NBTHelper.readItemList(compound.getList("Overflow", NBT.TAG_COMPOUND)); + spoutputFluidBuffer = NBTHelper.readCompoundList(compound.getList("FluidOverflow", NBT.TAG_COMPOUND), + FluidStack::loadFluidStackFromNBT); if (!clientPacket) return; @@ -175,6 +179,8 @@ public class BasinTileEntity extends SmartTileEntity implements IHaveGoggleInfor disabledSpoutputs.forEach(d -> disabledList.add(StringNBT.of(d.name()))); compound.put("DisabledSpoutput", disabledList); compound.put("Overflow", NBTHelper.writeItemList(spoutputBuffer)); + compound.put("FluidOverflow", + NBTHelper.writeCompoundList(spoutputFluidBuffer, fs -> fs.writeToNBT(new CompoundNBT()))); if (!clientPacket) return; @@ -280,11 +286,11 @@ public class BasinTileEntity extends SmartTileEntity implements IHaveGoggleInfor ingredientRotation.setValue(ingredientRotation.getValue() + ingredientRotationSpeed.getValue()); } - if (!spoutputBuffer.isEmpty() && !world.isRemote) + if ((!spoutputBuffer.isEmpty() || !spoutputFluidBuffer.isEmpty()) && !world.isRemote) tryClearingSpoutputOverflow(); - if (!contentsChanged) return; + contentsChanged = false; getOperator().ifPresent(te -> te.basinChecker.scheduleUpdate()); @@ -308,15 +314,22 @@ public class BasinTileEntity extends SmartTileEntity implements IHaveGoggleInfor Direction direction = blockState.get(BasinBlock.FACING); TileEntity te = world.getTileEntity(pos.down() .offset(direction)); + FilteringBehaviour filter = null; InvManipulationBehaviour inserter = null; if (te != null) { filter = TileEntityBehaviour.get(world, te.getPos(), FilteringBehaviour.TYPE); inserter = TileEntityBehaviour.get(world, te.getPos(), InvManipulationBehaviour.TYPE); } + IItemHandler targetInv = te == null ? null : te.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, direction.getOpposite()) .orElse(inserter == null ? null : inserter.getInventory()); + + IFluidHandler targetTank = te == null ? null + : te.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, direction.getOpposite()) + .orElse(null); + boolean update = false; for (Iterator iterator = spoutputBuffer.iterator(); iterator.hasNext();) { @@ -329,9 +342,8 @@ public class BasinTileEntity extends SmartTileEntity implements IHaveGoggleInfor continue; } - if (targetInv == null) { - return; - } + if (targetInv == null) + break; if (!ItemHandlerHelper.insertItemStacked(targetInv, itemStack, true) .isEmpty()) continue; @@ -344,6 +356,34 @@ public class BasinTileEntity extends SmartTileEntity implements IHaveGoggleInfor visualizedOutputItems.add(IntAttached.withZero(itemStack)); } + for (Iterator iterator = spoutputFluidBuffer.iterator(); iterator.hasNext();) { + FluidStack fluidStack = iterator.next(); + + if (direction == Direction.DOWN) { + iterator.remove(); + update = true; + continue; + } + + if (targetTank == null) + break; + + for (boolean simulate : Iterate.trueAndFalse) { + FluidAction action = simulate ? FluidAction.SIMULATE : FluidAction.EXECUTE; + int fill = targetTank instanceof SmartFluidTankBehaviour.InternalFluidHandler + ? ((SmartFluidTankBehaviour.InternalFluidHandler) targetTank).forceFill(fluidStack.copy(), action) + : targetTank.fill(fluidStack.copy(), action); + if (fill != fluidStack.getAmount()) + break; + if (simulate) + continue; + + update = true; + iterator.remove(); + visualizedOutputFluids.add(IntAttached.withZero(fluidStack)); + } + } + if (update) { notifyChangeOfContents(); sendData(); @@ -407,6 +447,10 @@ public class BasinTileEntity extends SmartTileEntity implements IHaveGoggleInfor return 256; } + public boolean canContinueProcessing() { + return spoutputBuffer.isEmpty() && spoutputFluidBuffer.isEmpty(); + } + public boolean acceptOutputs(List outputItems, List outputFluids, boolean simulate) { outputInventory.allowInsertion(); outputTank.allowInsertion(); @@ -420,52 +464,54 @@ public class BasinTileEntity extends SmartTileEntity implements IHaveGoggleInfor BlockState blockState = getBlockState(); if (!(blockState.getBlock() instanceof BasinBlock)) return false; + Direction direction = blockState.get(BasinBlock.FACING); - - IItemHandler targetInv = null; - IFluidHandler targetTank = null; - TileEntity te = null; - - InvManipulationBehaviour inserter = null; - - if (direction == Direction.DOWN) { - // No output basin, gather locally - targetInv = outputInventory; - targetTank = outputTank.getCapability() - .orElse(null); - - } else { - // Output basin, try moving items to it - if (!spoutputBuffer.isEmpty()) - return false; - te = world.getTileEntity(pos.down() + if (direction != Direction.DOWN) { + + TileEntity te = world.getTileEntity(pos.down() .offset(direction)); - if (te == null) - return false; - inserter = TileEntityBehaviour.get(world, te.getPos(), InvManipulationBehaviour.TYPE); - targetInv = te.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, direction.getOpposite()) + InvManipulationBehaviour inserter = + te == null ? null : TileEntityBehaviour.get(world, te.getPos(), InvManipulationBehaviour.TYPE); + IItemHandler targetInv = te == null ? null + : te.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, direction.getOpposite()) .orElse(inserter == null ? null : inserter.getInventory()); - targetTank = te.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, direction.getOpposite()) + IFluidHandler targetTank = te == null ? null + : te.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, direction.getOpposite()) .orElse(null); + if (!outputItems.isEmpty() && targetInv == null) + return false; + if (!outputFluids.isEmpty() && targetTank == null) + return false; + + if (simulate) + return true; + for (ItemStack itemStack : outputItems) { + if (itemStack.hasContainerItem() && itemStack.getContainerItem() + .isItemEqual(itemStack)) + continue; + spoutputBuffer.add(itemStack.copy()); + } + for (FluidStack fluidStack : outputFluids) + spoutputFluidBuffer.add(fluidStack.copy()); + return true; } + IItemHandler targetInv = outputInventory; + IFluidHandler targetTank = outputTank.getCapability() + .orElse(null); + if (targetInv == null && !outputItems.isEmpty()) return false; - FilteringBehaviour filter = world == null || te == null ? null : TileEntityBehaviour.get(world, te.getPos(), FilteringBehaviour.TYPE); + for (ItemStack itemStack : outputItems) { // Catalyst items are never consumed if (itemStack.hasContainerItem() && itemStack.getContainerItem() .isItemEqual(itemStack)) continue; - - if (simulate || direction == Direction.DOWN) { - if (!ItemHandlerHelper.insertItemStacked(targetInv, itemStack.copy(), simulate) - .isEmpty() || (filter != null && !filter.test(itemStack))) - return false; - } else { - spoutputBuffer.add(itemStack.copy()); - } + if (!ItemHandlerHelper.insertItemStacked(targetInv, itemStack.copy(), simulate) + .isEmpty()) + return false; } if (outputFluids.isEmpty()) @@ -480,8 +526,6 @@ public class BasinTileEntity extends SmartTileEntity implements IHaveGoggleInfor : targetTank.fill(fluidStack.copy(), action); if (fill != fluidStack.getAmount()) return false; - else if (!simulate) - visualizedOutputFluids.add(IntAttached.withZero(fluidStack)); } return true; diff --git a/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingInventory.java b/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingInventory.java index d6bb73d3b..21fb2f34c 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingInventory.java +++ b/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingInventory.java @@ -14,7 +14,7 @@ public class ProcessingInventory extends ItemStackHandler { private boolean limit; public ProcessingInventory(Consumer callback) { - super(10); + super(16); this.callback = callback; } diff --git a/src/main/java/com/simibubi/create/foundation/ponder/content/ProcessingScenes.java b/src/main/java/com/simibubi/create/foundation/ponder/content/ProcessingScenes.java index 71c14d919..64a4bc8d0 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/content/ProcessingScenes.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/content/ProcessingScenes.java @@ -638,10 +638,10 @@ public class ProcessingScenes { .pointAt(util.vector.blockSurface(center.east() .up(), Direction.UP)) .placeNearTarget(); - scene.idle(70); - scene.overlay.showText(60) + scene.idle(80); + scene.overlay.showText(90) .colored(PonderPalette.RED) - .text("However, these are not suitable for industrial heating") + .text("However, without a blaze they are not suitable for industrial heating") .pointAt(util.vector.blockSurface(center.east() .up(), Direction.UP)) .placeNearTarget(); From 2eb9c7b6eb0e48d86a2a9355e50499fabc6d6fd4 Mon Sep 17 00:00:00 2001 From: Jozufozu Date: Fri, 9 Jul 2021 13:39:56 -0700 Subject: [PATCH 052/118] PartialModel gets called from the right place --- src/main/java/com/simibubi/create/CreateClient.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/main/java/com/simibubi/create/CreateClient.java b/src/main/java/com/simibubi/create/CreateClient.java index fbdd15ce8..275c67b7d 100644 --- a/src/main/java/com/simibubi/create/CreateClient.java +++ b/src/main/java/com/simibubi/create/CreateClient.java @@ -127,8 +127,6 @@ public class CreateClient { } public static void onModelRegistry(ModelRegistryEvent event) { - PartialModel.onModelRegistry(event); - getCustomRenderedItems().foreach((item, modelFunc) -> modelFunc.apply(null) .getModelLocations() .forEach(ModelLoader::addSpecialModel)); @@ -136,7 +134,6 @@ public class CreateClient { public static void onModelBake(ModelBakeEvent event) { Map modelRegistry = event.getModelRegistry(); - PartialModel.onModelBake(event); getCustomBlockModels() .foreach((block, modelFunc) -> swapModels(modelRegistry, getAllBlockStateModelLocations(block), modelFunc)); From c785fe5705d370b401eb9b8b2f4a1ee81cc2efde Mon Sep 17 00:00:00 2001 From: Jozufozu Date: Fri, 9 Jul 2021 13:57:37 -0700 Subject: [PATCH 053/118] Bump flywheel build --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 9ffe8755b..e297ebee0 100644 --- a/gradle.properties +++ b/gradle.properties @@ -16,7 +16,7 @@ cursegradle_version = 1.4.0 # dependency versions registrate_version = 1.0.4 -flywheel_version = 1.16-0.0.3.15 +flywheel_version = 1.16-0.0.3.20 jei_version = 7.7.0.106 # curseforge information From e56da570e8cc9912988bee9933e75c54aa11ca61 Mon Sep 17 00:00:00 2001 From: grimmauld Date: Fri, 9 Jul 2021 23:38:28 +0200 Subject: [PATCH 054/118] Limit the light --- .../components/structureMovement/ContraptionLighter.java | 4 ++++ .../render/ContraptionRenderDispatcher.java | 7 ++++++- .../com/simibubi/create/foundation/config/CClient.java | 4 +++- 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionLighter.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionLighter.java index 0e5a776b3..73d5a39e2 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionLighter.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionLighter.java @@ -62,4 +62,8 @@ public abstract class ContraptionLighter implements ILigh return bounds; } + + public GridAlignedBB getBounds() { + return bounds; + } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/render/ContraptionRenderDispatcher.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/render/ContraptionRenderDispatcher.java index cd6f7973b..96086b861 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/render/ContraptionRenderDispatcher.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/render/ContraptionRenderDispatcher.java @@ -13,6 +13,9 @@ import static org.lwjgl.opengl.GL20.glUseProgram; import java.util.List; import java.util.Random; +import com.simibubi.create.content.contraptions.components.structureMovement.ContraptionLighter; +import com.simibubi.create.foundation.config.AllConfigs; + import org.apache.commons.lang3.tuple.Pair; import com.jozufozu.flywheel.backend.Backend; @@ -79,7 +82,9 @@ public class ContraptionRenderDispatcher { if (Minecraft.getInstance().isGamePaused()) return; for (RenderedContraption contraption : RENDERERS.values()) { - contraption.getLighter().tick(contraption); + ContraptionLighter lighter = contraption.getLighter(); + if (lighter.getBounds().volume() < AllConfigs.CLIENT.maxContraptionLightVolume.get()) + lighter.tick(contraption); contraption.kinetics.tick(); } diff --git a/src/main/java/com/simibubi/create/foundation/config/CClient.java b/src/main/java/com/simibubi/create/foundation/config/CClient.java index 5ec4fe323..bea229d1e 100644 --- a/src/main/java/com/simibubi/create/foundation/config/CClient.java +++ b/src/main/java/com/simibubi/create/foundation/config/CClient.java @@ -14,6 +14,8 @@ public class CClient extends ConfigBase { b(true, "enableRainbowDebug", "Show colourful debug information while the F3-Menu is open."); public ConfigBool experimentalRendering = b(true, "experimentalRendering", "Use modern OpenGL features to drastically increase performance."); + public ConfigInt maxContraptionLightVolume = i(16384, 0, Integer.MAX_VALUE, "maximumContraptionLightVolume", + "The maximum amount of blocks for which to try and calculate dynamic contraption lighting. Decrease if large contraption cause too much lag"); public ConfigInt overlayOffsetX = i(20, Integer.MIN_VALUE, Integer.MAX_VALUE, "overlayOffsetX", "Offset the overlay from goggle- and hover- information by this many pixels on the X axis; Use /create overlay"); public ConfigInt overlayOffsetY = i(0, Integer.MIN_VALUE, Integer.MAX_VALUE, "overlayOffsetY", @@ -47,7 +49,7 @@ public class CClient extends ConfigBase { public ConfigGroup ponder = group(1, "ponder", "Ponder settings"); public ConfigBool comfyReading = b(false, "comfyReading", "Slow down a ponder scene whenever there is text on screen."); - + public ConfigGroup sound = group(1, "sound", "Sound settings"); public ConfigBool enableAmbientSounds = b(true, "enableAmbientSounds", "Make cogs rumble and machines clatter."); public ConfigFloat ambientVolumeCap = f(.1f, 0, 1, "ambientVolumeCap", "Maximum volume modifier of Ambient noise"); From 30ba34dbb034cfba40cb4316bd7f10097cb43d38 Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Fri, 9 Jul 2021 23:43:11 +0200 Subject: [PATCH 055/118] Behind the flaps - Brass tunnels now show a goggle tooltip of contained items within their group - Right-clicking brass tunnels now retrieves all contained items from their group --- src/generated/resources/.cache/cache | 28 ++++----- .../resources/assets/create/lang/en_us.json | 3 + .../assets/create/lang/unfinished/de_de.json | 5 +- .../assets/create/lang/unfinished/es_es.json | 5 +- .../assets/create/lang/unfinished/es_mx.json | 5 +- .../assets/create/lang/unfinished/fr_fr.json | 5 +- .../assets/create/lang/unfinished/it_it.json | 5 +- .../assets/create/lang/unfinished/ja_jp.json | 5 +- .../assets/create/lang/unfinished/ko_kr.json | 5 +- .../assets/create/lang/unfinished/nl_nl.json | 5 +- .../assets/create/lang/unfinished/pl_pl.json | 5 +- .../assets/create/lang/unfinished/pt_br.json | 5 +- .../assets/create/lang/unfinished/ru_ru.json | 5 +- .../assets/create/lang/unfinished/zh_cn.json | 5 +- .../assets/create/lang/unfinished/zh_tw.json | 5 +- .../block/belts/tunnel/BrassTunnelBlock.java | 30 +++++++++ .../belts/tunnel/BrassTunnelTileEntity.java | 61 ++++++++++++++++++- .../assets/create/lang/default/messages.json | 4 ++ 18 files changed, 162 insertions(+), 29 deletions(-) diff --git a/src/generated/resources/.cache/cache b/src/generated/resources/.cache/cache index 9d0048b1d..e049ac862 100644 --- a/src/generated/resources/.cache/cache +++ b/src/generated/resources/.cache/cache @@ -426,20 +426,20 @@ a3a11524cd3515fc01d905767b4b7ea782adaf03 assets/create/blockstates/yellow_seat.j 7f39521b211441f5c3e06d60c5978cebe16cacfb assets/create/blockstates/zinc_block.json b7181bcd8182b2f17088e5aa881f374c9c65470c assets/create/blockstates/zinc_ore.json e1d3c02695cbd2ee7bbede97f72941835634a3a5 assets/create/lang/en_ud.json -7628f0328198a4100dc938de4c4ea8f792473a85 assets/create/lang/en_us.json -54c93de1ca876299fc34dc593580aeed5748aa15 assets/create/lang/unfinished/de_de.json -51ed1df10b8afcf27f9dcdae3bca80d05740d450 assets/create/lang/unfinished/es_es.json -72e1a89ef45c530eaab6f27b4d2dd447775b5d0a assets/create/lang/unfinished/es_mx.json -0da959961c4bde45bcef869bc9bd58eac1d3bd40 assets/create/lang/unfinished/fr_fr.json -ba963b9db50f0ea57dee1a93664aacf2dc44eec5 assets/create/lang/unfinished/it_it.json -caa45f4ae4e4e9b338999b7975767dc33e569881 assets/create/lang/unfinished/ja_jp.json -aaa8ecc84b853cc8a93f8d5812f22beefaf48266 assets/create/lang/unfinished/ko_kr.json -2046b5e7c9904f6ac07d7f9b94fd80a52a1f5721 assets/create/lang/unfinished/nl_nl.json -70f552fe3bd0365d9f1f339032bc598bc0ff9026 assets/create/lang/unfinished/pl_pl.json -427a0252a5f3d5282ab572c6b06638117ed68760 assets/create/lang/unfinished/pt_br.json -f12de6d61ff3f634e5af7485230032202ce0f9de assets/create/lang/unfinished/ru_ru.json -75c32bf33d907d0575d05ad575566d50bc78c1c9 assets/create/lang/unfinished/zh_cn.json -32a411bf248dae1eeb8a3e7d9450e5c1b9cd0b59 assets/create/lang/unfinished/zh_tw.json +f7ffc8417ea58584ecbe70ce0e9a6ec74e5ec463 assets/create/lang/en_us.json +cc3d964242bf7e777caa0edb5f62e00246a28993 assets/create/lang/unfinished/de_de.json +8e90f32c39e3a4d7e85b2db53100ffc90cc8eb67 assets/create/lang/unfinished/es_es.json +a01222895bd7e3d06d7ae3d34fa4caecbd86448d assets/create/lang/unfinished/es_mx.json +b05d56b0e9d724490ea143a3685b0bc9ebe6268a assets/create/lang/unfinished/fr_fr.json +1633b5a42865fba17572980560ad07a3015c1743 assets/create/lang/unfinished/it_it.json +5422e990c8075d4132d58287fa9ca858f9a0bc1f assets/create/lang/unfinished/ja_jp.json +05eac4946a1172cf32d171d23f4049a58654b43b assets/create/lang/unfinished/ko_kr.json +95828eb4fa2e1353f737dc909407af21d50be149 assets/create/lang/unfinished/nl_nl.json +d8ed3929f5d8f0e58f4bd4de34ab20395f8d2c55 assets/create/lang/unfinished/pl_pl.json +ae37d77d132f6fac4bc718273637a367959533a1 assets/create/lang/unfinished/pt_br.json +4710f5a451b522b1a99529f79c68674df5d7fc57 assets/create/lang/unfinished/ru_ru.json +9f2a382e23291db21f8e441eb6a14adbfdcf2d9f assets/create/lang/unfinished/zh_cn.json +9bb1d1a10e4d536ef629114516a9ccadea2da110 assets/create/lang/unfinished/zh_tw.json 487a511a01b2a4531fb672f917922312db78f958 assets/create/models/block/acacia_window.json b48060cba1a382f373a05bf0039054053eccf076 assets/create/models/block/acacia_window_pane_noside.json 3066db1bf03cffa1a9c7fbacf47ae586632f4eb3 assets/create/models/block/acacia_window_pane_noside_alt.json diff --git a/src/generated/resources/assets/create/lang/en_us.json b/src/generated/resources/assets/create/lang/en_us.json index 1164784c1..29a8c9a09 100644 --- a/src/generated/resources/assets/create/lang/en_us.json +++ b/src/generated/resources/assets/create/lang/en_us.json @@ -1164,6 +1164,9 @@ "create.tooltip.chute.fans_pull_up": "Fans pull from Above", "create.tooltip.chute.fans_pull_down": "Fans pull from Below", "create.tooltip.chute.contains": "Contains: %1$s x%2$s", + "create.tooltip.brass_tunnel.contains": "Currently distributing:", + "create.tooltip.brass_tunnel.contains_entry": "> %1$s x%2$s", + "create.tooltip.brass_tunnel.retrieve": "Right-Click to retrieve", "create.linked_controller.bind_mode": "Bind mode active", "create.linked_controller.press_keybind": "Press %1$s, %2$s, %3$s, %4$s, %5$s or %6$s, to bind this frequency to the respective key", 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 fe205fa5b..61a378803 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: 1126", + "_": "Missing Localizations: 1129", "_": "->------------------------] Game Elements [------------------------<-", @@ -1165,6 +1165,9 @@ "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.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", 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 87d851556..825c63f65 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: 49", + "_": "Missing Localizations: 52", "_": "->------------------------] Game Elements [------------------------<-", @@ -1165,6 +1165,9 @@ "create.tooltip.chute.fans_pull_up": "Los ventiladores tiran desde arriba", "create.tooltip.chute.fans_pull_down": "Los ventiladores tiran desde abajo", "create.tooltip.chute.contains": "Contiene: %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.linked_controller.bind_mode": "Modo de enlace activo", "create.linked_controller.press_keybind": "Presiona %1$s, %2$s, %3$s, %4$s, %5$s o %6$s, para vincular esta frecuencia a la tecla correspondiente", diff --git a/src/generated/resources/assets/create/lang/unfinished/es_mx.json b/src/generated/resources/assets/create/lang/unfinished/es_mx.json index 9806485df..9c1662f37 100644 --- a/src/generated/resources/assets/create/lang/unfinished/es_mx.json +++ b/src/generated/resources/assets/create/lang/unfinished/es_mx.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 1493", + "_": "Missing Localizations: 1496", "_": "->------------------------] Game Elements [------------------------<-", @@ -1165,6 +1165,9 @@ "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.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", diff --git a/src/generated/resources/assets/create/lang/unfinished/fr_fr.json b/src/generated/resources/assets/create/lang/unfinished/fr_fr.json index 561607ad2..284af00e8 100644 --- a/src/generated/resources/assets/create/lang/unfinished/fr_fr.json +++ b/src/generated/resources/assets/create/lang/unfinished/fr_fr.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 1378", + "_": "Missing Localizations: 1381", "_": "->------------------------] Game Elements [------------------------<-", @@ -1165,6 +1165,9 @@ "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.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", diff --git a/src/generated/resources/assets/create/lang/unfinished/it_it.json b/src/generated/resources/assets/create/lang/unfinished/it_it.json index 2ebf47e7c..21fbf2683 100644 --- a/src/generated/resources/assets/create/lang/unfinished/it_it.json +++ b/src/generated/resources/assets/create/lang/unfinished/it_it.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 906", + "_": "Missing Localizations: 909", "_": "->------------------------] Game Elements [------------------------<-", @@ -1165,6 +1165,9 @@ "create.tooltip.chute.fans_pull_up": "I ventilatori tirano da sopra", "create.tooltip.chute.fans_pull_down": "I ventilatori tirano da sotto", "create.tooltip.chute.contains": "Contiene: %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.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", diff --git a/src/generated/resources/assets/create/lang/unfinished/ja_jp.json b/src/generated/resources/assets/create/lang/unfinished/ja_jp.json index 5cdfa25f3..a53bab0a1 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ja_jp.json +++ b/src/generated/resources/assets/create/lang/unfinished/ja_jp.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 38", + "_": "Missing Localizations: 41", "_": "->------------------------] Game Elements [------------------------<-", @@ -1165,6 +1165,9 @@ "create.tooltip.chute.fans_pull_up": "ファンが上から吸い込んでいます", "create.tooltip.chute.fans_pull_down": "ファンが下から吸い込んでいます", "create.tooltip.chute.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.linked_controller.bind_mode": "割り当てモード", "create.linked_controller.press_keybind": "%1$s、%2$s、%3$s、%4$s、%5$sまたは%6$sを押すとこの周波数がそのキーに割り当てられます", diff --git a/src/generated/resources/assets/create/lang/unfinished/ko_kr.json b/src/generated/resources/assets/create/lang/unfinished/ko_kr.json index a82e39aea..02e420bed 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ko_kr.json +++ b/src/generated/resources/assets/create/lang/unfinished/ko_kr.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 284", + "_": "Missing Localizations: 287", "_": "->------------------------] Game Elements [------------------------<-", @@ -1165,6 +1165,9 @@ "create.tooltip.chute.fans_pull_up": "선풍기가 위에서 당겨냄", "create.tooltip.chute.fans_pull_down": "선풍기가 아래에서 당겨냄", "create.tooltip.chute.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.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", diff --git a/src/generated/resources/assets/create/lang/unfinished/nl_nl.json b/src/generated/resources/assets/create/lang/unfinished/nl_nl.json index 48066cd30..171e5b407 100644 --- a/src/generated/resources/assets/create/lang/unfinished/nl_nl.json +++ b/src/generated/resources/assets/create/lang/unfinished/nl_nl.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 1759", + "_": "Missing Localizations: 1762", "_": "->------------------------] Game Elements [------------------------<-", @@ -1165,6 +1165,9 @@ "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.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", diff --git a/src/generated/resources/assets/create/lang/unfinished/pl_pl.json b/src/generated/resources/assets/create/lang/unfinished/pl_pl.json index bf827e597..f27107538 100644 --- a/src/generated/resources/assets/create/lang/unfinished/pl_pl.json +++ b/src/generated/resources/assets/create/lang/unfinished/pl_pl.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 248", + "_": "Missing Localizations: 251", "_": "->------------------------] Game Elements [------------------------<-", @@ -1165,6 +1165,9 @@ "create.tooltip.chute.fans_pull_up": "Wiatraki ciągną od góry", "create.tooltip.chute.fans_pull_down": "Wiatraki ciągną od dołu", "create.tooltip.chute.contains": "Zawiera: %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.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", 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 0121ffdb1..7c9a9dbe2 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: 1800", + "_": "Missing Localizations: 1803", "_": "->------------------------] Game Elements [------------------------<-", @@ -1165,6 +1165,9 @@ "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.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", diff --git a/src/generated/resources/assets/create/lang/unfinished/ru_ru.json b/src/generated/resources/assets/create/lang/unfinished/ru_ru.json index 6fb4e0db7..38eb1010b 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ru_ru.json +++ b/src/generated/resources/assets/create/lang/unfinished/ru_ru.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 279", + "_": "Missing Localizations: 282", "_": "->------------------------] Game Elements [------------------------<-", @@ -1165,6 +1165,9 @@ "create.tooltip.chute.fans_pull_up": "Вентилятор тянет сверху", "create.tooltip.chute.fans_pull_down": "Вентилятор тянет снизу", "create.tooltip.chute.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.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", 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 357e20e97..650be5c55 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: 289", + "_": "Missing Localizations: 292", "_": "->------------------------] Game Elements [------------------------<-", @@ -1165,6 +1165,9 @@ "create.tooltip.chute.fans_pull_up": "鼓风机从上方进行吸引", "create.tooltip.chute.fans_pull_down": "鼓风机从下方进行吸引", "create.tooltip.chute.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.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", diff --git a/src/generated/resources/assets/create/lang/unfinished/zh_tw.json b/src/generated/resources/assets/create/lang/unfinished/zh_tw.json index 980d8f1df..47656d31a 100644 --- a/src/generated/resources/assets/create/lang/unfinished/zh_tw.json +++ b/src/generated/resources/assets/create/lang/unfinished/zh_tw.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 284", + "_": "Missing Localizations: 287", "_": "->------------------------] Game Elements [------------------------<-", @@ -1165,6 +1165,9 @@ "create.tooltip.chute.fans_pull_up": "鼓風機從下方進行吸引", "create.tooltip.chute.fans_pull_down": "鼓風機從上方進行吸引", "create.tooltip.chute.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.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", diff --git a/src/main/java/com/simibubi/create/content/logistics/block/belts/tunnel/BrassTunnelBlock.java b/src/main/java/com/simibubi/create/content/logistics/block/belts/tunnel/BrassTunnelBlock.java index 019d46569..d03b45d18 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/belts/tunnel/BrassTunnelBlock.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/belts/tunnel/BrassTunnelBlock.java @@ -1,15 +1,25 @@ package com.simibubi.create.content.logistics.block.belts.tunnel; +import java.util.List; + import com.simibubi.create.AllTileEntities; +import com.simibubi.create.Create; import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; import com.simibubi.create.foundation.tileEntity.behaviour.filtering.FilteringBehaviour; import net.minecraft.block.AbstractBlock; import net.minecraft.block.Block; import net.minecraft.block.BlockState; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ActionResultType; import net.minecraft.util.Direction; +import net.minecraft.util.Hand; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.SoundEvents; import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.BlockRayTraceResult; import net.minecraft.world.IBlockReader; import net.minecraft.world.IWorld; import net.minecraft.world.World; @@ -20,6 +30,26 @@ public class BrassTunnelBlock extends BeltTunnelBlock { super(properties); } + @Override + public ActionResultType onUse(BlockState p_225533_1_, World world, BlockPos pos, PlayerEntity player, + Hand p_225533_5_, BlockRayTraceResult p_225533_6_) { + return onTileEntityUse(world, pos, te -> { + if (!(te instanceof BrassTunnelTileEntity)) + return ActionResultType.PASS; + BrassTunnelTileEntity bte = (BrassTunnelTileEntity) te; + List stacksOfGroup = bte.grabAllStacksOfGroup(world.isRemote); + if (stacksOfGroup.isEmpty()) + return ActionResultType.PASS; + if (world.isRemote) + return ActionResultType.SUCCESS; + for (ItemStack itemStack : stacksOfGroup) + player.inventory.placeItemBackInInventory(world, itemStack.copy()); + world.playSound(null, pos, SoundEvents.ENTITY_ITEM_PICKUP, SoundCategory.PLAYERS, .2f, + 1f + Create.RANDOM.nextFloat()); + return ActionResultType.SUCCESS; + }); + } + @Override public TileEntity createTileEntity(BlockState state, IBlockReader world) { return AllTileEntities.BRASS_TUNNEL.create(); diff --git a/src/main/java/com/simibubi/create/content/logistics/block/belts/tunnel/BrassTunnelTileEntity.java b/src/main/java/com/simibubi/create/content/logistics/block/belts/tunnel/BrassTunnelTileEntity.java index fd1e51fe1..62e7ca059 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/belts/tunnel/BrassTunnelTileEntity.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/belts/tunnel/BrassTunnelTileEntity.java @@ -14,6 +14,7 @@ import javax.annotation.Nullable; import org.apache.commons.lang3.tuple.Pair; import com.simibubi.create.AllBlocks; +import com.simibubi.create.content.contraptions.goggles.IHaveGoggleInformation; import com.simibubi.create.content.contraptions.relays.belt.BeltHelper; import com.simibubi.create.content.contraptions.relays.belt.BeltTileEntity; import com.simibubi.create.foundation.advancement.AllTriggers; @@ -43,6 +44,9 @@ import net.minecraft.util.Direction.Axis; import net.minecraft.util.Direction.AxisDirection; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.vector.Vector3d; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextFormatting; +import net.minecraft.util.text.TranslationTextComponent; import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.common.util.Constants.NBT; import net.minecraftforge.common.util.LazyOptional; @@ -50,7 +54,7 @@ import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.ItemHandlerHelper; -public class BrassTunnelTileEntity extends BeltTunnelTileEntity { +public class BrassTunnelTileEntity extends BeltTunnelTileEntity implements IHaveGoggleInformation { SidedFilteringBehaviour filtering; @@ -319,6 +323,36 @@ public class BrassTunnelTileEntity extends BeltTunnelTileEntity { return stackToDistribute; } + public List grabAllStacksOfGroup(boolean simulate) { + List list = new ArrayList<>(); + + ItemStack own = getStackToDistribute(); + if (!own.isEmpty()) { + list.add(own); + if (!simulate) + setStackToDistribute(ItemStack.EMPTY); + } + + for (boolean left : Iterate.trueAndFalse) { + BrassTunnelTileEntity adjacent = this; + while (adjacent != null) { + if (!world.isAreaLoaded(adjacent.getPos(), 1)) + return null; + adjacent = adjacent.getAdjacent(left); + if (adjacent == null) + continue; + ItemStack other = adjacent.getStackToDistribute(); + if (other.isEmpty()) + continue; + list.add(other); + if (!simulate) + adjacent.setStackToDistribute(ItemStack.EMPTY); + } + } + + return list; + } + @Nullable protected ItemStack insertIntoTunnel(BrassTunnelTileEntity tunnel, Direction side, ItemStack stack, boolean simulate) { @@ -357,7 +391,8 @@ public class BrassTunnelTileEntity extends BeltTunnelTileEntity { float movementSpeed = Math.max(Math.abs(beltMovementSpeed), 1 / 8f); int additionalOffset = beltMovementSpeed > 0 ? 1 : 0; Vector3d outPos = BeltHelper.getVectorForOffset(controllerTE, below.index + additionalOffset); - Vector3d outMotion = Vector3d.of(side.getDirectionVec()).scale(movementSpeed) + Vector3d outMotion = Vector3d.of(side.getDirectionVec()) + .scale(movementSpeed) .add(0, 1 / 8f, 0); outPos.add(outMotion.normalize()); ItemEntity entity = new ItemEntity(world, outPos.x, outPos.y + 6 / 16f, outPos.z, ejected); @@ -708,4 +743,26 @@ public class BrassTunnelTileEntity extends BeltTunnelTileEntity { return stackToDistribute.isEmpty() && !syncedOutputActive; } + @Override + public boolean addToGoggleTooltip(List tooltip, boolean isPlayerSneaking) { + List allStacks = grabAllStacksOfGroup(true); + if (allStacks.isEmpty()) + return false; + + tooltip.add(componentSpacing.copy() + .append(Lang.translate("tooltip.brass_tunnel.contains")) + .formatted(TextFormatting.WHITE)); + for (ItemStack item : allStacks) { + tooltip.add(componentSpacing.copy() + .append(Lang.translate("tooltip.brass_tunnel.contains_entry", new TranslationTextComponent(item.getItem() + .getTranslationKey(item)).getString(), item.getCount())) + .formatted(TextFormatting.GRAY)); + } + tooltip.add(componentSpacing.copy() + .append(Lang.translate("tooltip.brass_tunnel.retrieve")) + .formatted(TextFormatting.DARK_GRAY)); + + return true; + } + } diff --git a/src/main/resources/assets/create/lang/default/messages.json b/src/main/resources/assets/create/lang/default/messages.json index 29239e841..0de1d3e9b 100644 --- a/src/main/resources/assets/create/lang/default/messages.json +++ b/src/main/resources/assets/create/lang/default/messages.json @@ -496,6 +496,10 @@ "create.tooltip.chute.fans_pull_up": "Fans pull from Above", "create.tooltip.chute.fans_pull_down": "Fans pull from Below", "create.tooltip.chute.contains": "Contains: %1$s x%2$s", + + "create.tooltip.brass_tunnel.contains": "Currently distributing:", + "create.tooltip.brass_tunnel.contains_entry": "> %1$s x%2$s", + "create.tooltip.brass_tunnel.retrieve": "Right-Click to retrieve", "create.linked_controller.bind_mode": "Bind mode active", "create.linked_controller.press_keybind": "Press %1$s, %2$s, %3$s, %4$s, %5$s or %6$s, to bind this frequency to the respective key", From 388f836a02baf559d39966c937b641ec995186a2 Mon Sep 17 00:00:00 2001 From: Daniel Amberson Date: Fri, 9 Jul 2021 21:01:55 -0500 Subject: [PATCH 056/118] potato cannon polish! - completely remade the texture from scratch of both the potato cannon and it's cog - did some slight model tweaks to the potato cannon itself as well - no changes to the animations should be needed --- .../create/models/item/potato_cannon/cog.json | 116 ++++++++++-------- .../models/item/potato_cannon/item.json | 116 ++++++++++-------- .../create/textures/item/potato_cannon.png | Bin 0 -> 1601 bytes 3 files changed, 126 insertions(+), 106 deletions(-) create mode 100644 src/main/resources/assets/create/textures/item/potato_cannon.png diff --git a/src/main/resources/assets/create/models/item/potato_cannon/cog.json b/src/main/resources/assets/create/models/item/potato_cannon/cog.json index e0af26eb0..7a630b442 100644 --- a/src/main/resources/assets/create/models/item/potato_cannon/cog.json +++ b/src/main/resources/assets/create/models/item/potato_cannon/cog.json @@ -1,104 +1,116 @@ { "credit": "Made with Blockbench", "parent": "create:item/potato_cannon/item", + "texture_size": [32, 32], "textures": { - "1": "create:block/andesite_bricks", - "particle": "create:block/andesite_bricks" + "1": "create:item/potato_cannon" }, "elements": [ { "name": "Cog", "from": [5.5, 8, 6.5], "to": [10.5, 9, 9.5], - "rotation": {"angle": 45, "axis": "z", "origin": [8, 8.5, 8.5]}, + "rotation": {"angle": 0, "axis": "z", "origin": [8, 8.5, 7.5]}, "faces": { - "north": {"uv": [6, 15, 11, 16], "texture": "#1"}, - "east": {"uv": [7, 13, 8, 16], "rotation": 270, "texture": "#1"}, - "south": {"uv": [6, 14, 11, 15], "texture": "#1"}, - "west": {"uv": [9, 13, 10, 16], "rotation": 90, "texture": "#1"}, - "up": {"uv": [6, 13, 11, 16], "rotation": 180, "texture": "#1"}, - "down": {"uv": [6, 13, 11, 16], "texture": "#1"} - } - }, - { - "name": "Cog", - "from": [5.5, 8, 6.5], - "to": [10.5, 9, 9.5], - "rotation": {"angle": -45, "axis": "z", "origin": [8, 8.5, 8.5]}, - "faces": { - "north": {"uv": [6, 15, 11, 16], "texture": "#1"}, - "east": {"uv": [7, 13, 8, 16], "rotation": 270, "texture": "#1"}, - "south": {"uv": [6, 14, 11, 15], "texture": "#1"}, - "west": {"uv": [9, 13, 10, 16], "rotation": 90, "texture": "#1"}, - "up": {"uv": [6, 13, 11, 16], "rotation": 180, "texture": "#1"}, - "down": {"uv": [6, 13, 11, 16], "texture": "#1"} + "north": {"uv": [6.5, 9.75, 9, 10], "texture": "#1"}, + "east": {"uv": [8.75, 10, 9, 8.5], "rotation": 90, "texture": "#1"}, + "south": {"uv": [6.5, 8.5, 9, 8.75], "texture": "#1"}, + "west": {"uv": [8.75, 8.5, 9, 10], "rotation": 90, "texture": "#1"}, + "up": {"uv": [6.5, 8.5, 9, 10], "rotation": 180, "texture": "#1"}, + "down": {"uv": [6.5, 8.5, 9, 10], "texture": "#1"} } }, { "name": "Cog", "from": [7.5, 6, 6.5], "to": [8.5, 11, 9.5], - "rotation": {"angle": 0, "axis": "z", "origin": [8, 8.5, 8.5]}, + "rotation": {"angle": 0, "axis": "z", "origin": [8, 8.5, 7.5]}, "faces": { - "north": {"uv": [6, 15, 11, 16], "rotation": 270, "texture": "#1"}, - "east": {"uv": [6, 13, 11, 16], "rotation": 270, "texture": "#1"}, - "south": {"uv": [6, 14, 11, 15], "rotation": 90, "texture": "#1"}, - "west": {"uv": [6, 13, 11, 16], "rotation": 90, "texture": "#1"}, - "up": {"uv": [8, 13, 9, 16], "rotation": 180, "texture": "#1"}, - "down": {"uv": [6, 13, 7, 16], "texture": "#1"} + "north": {"uv": [6.5, 9.75, 9, 10], "rotation": 90, "texture": "#1"}, + "east": {"uv": [6.5, 8.5, 9, 10], "rotation": 270, "texture": "#1"}, + "south": {"uv": [6.5, 8.5, 9, 8.75], "rotation": 270, "texture": "#1"}, + "west": {"uv": [6.5, 8.5, 9, 10], "rotation": 90, "texture": "#1"}, + "up": {"uv": [8.75, 10, 9, 8.5], "texture": "#1"}, + "down": {"uv": [8.75, 8.5, 9, 10], "texture": "#1"} + } + }, + { + "name": "Cog", + "from": [7.5, 6, 6.5], + "to": [8.5, 11, 9.5], + "rotation": {"angle": 45, "axis": "z", "origin": [8, 8.5, 7.5]}, + "faces": { + "north": {"uv": [6.5, 9.75, 9, 10], "rotation": 90, "texture": "#1"}, + "east": {"uv": [6.5, 8.5, 9, 10], "rotation": 270, "texture": "#1"}, + "south": {"uv": [6.5, 8.5, 9, 8.75], "rotation": 270, "texture": "#1"}, + "west": {"uv": [6.5, 8.5, 9, 10], "rotation": 90, "texture": "#1"}, + "up": {"uv": [8.75, 10, 9, 8.5], "texture": "#1"}, + "down": {"uv": [8.75, 8.5, 9, 10], "texture": "#1"} } }, { "name": "Cog", "from": [5.5, 8, 6.5], "to": [10.5, 9, 9.5], - "rotation": {"angle": 0, "axis": "y", "origin": [8, 11, 3.5]}, + "rotation": {"angle": 45, "axis": "z", "origin": [8, 8.5, 7.5]}, "faces": { - "north": {"uv": [6, 15, 11, 16], "texture": "#1"}, - "east": {"uv": [6, 13, 7, 16], "rotation": 270, "texture": "#1"}, - "south": {"uv": [6, 14, 11, 15], "texture": "#1"}, - "west": {"uv": [8, 13, 9, 16], "rotation": 90, "texture": "#1"}, - "up": {"uv": [6, 13, 11, 16], "rotation": 180, "texture": "#1"}, - "down": {"uv": [6, 13, 11, 16], "texture": "#1"} + "north": {"uv": [6.5, 9.75, 9, 10], "texture": "#1"}, + "east": {"uv": [8.75, 10, 9, 8.5], "rotation": 90, "texture": "#1"}, + "south": {"uv": [6.5, 8.5, 9, 8.75], "texture": "#1"}, + "west": {"uv": [8.75, 8.5, 9, 10], "rotation": 90, "texture": "#1"}, + "up": {"uv": [6.5, 8.5, 9, 10], "rotation": 180, "texture": "#1"}, + "down": {"uv": [6.5, 8.5, 9, 10], "texture": "#1"} } } ], "display": { "thirdperson_righthand": { - "rotation": [0, 90, 0], - "translation": [0, 3.25, 0] + "translation": [0, 1.75, 0] }, "thirdperson_lefthand": { - "translation": [0, 3.75, 0] + "translation": [0, 1.75, 0] }, "firstperson_righthand": { - "rotation": [-4.5, 100.25, 10], - "translation": [1, 4, 1] + "rotation": [5, 4, 5], + "translation": [0.25, 4, 0.75] }, "firstperson_lefthand": { - "rotation": [17.25, 267, 10], - "translation": [1, 4, 1] + "rotation": [5, 4, 5], + "translation": [0.25, 4, 0.75] }, "ground": { - "rotation": [-90, 0, 0], - "translation": [0, -2.3, 0], + "rotation": [0, 0, 90], + "translation": [0, -1.3, 0], "scale": [0.76914, 0.76914, 0.76914] }, "gui": { - "rotation": [28, -163, 43], + "rotation": [64, 47, -47], "translation": [0.5, 0, 0], - "scale": [1.09453, 1.09453, 1.09453] + "scale": [0.86, 0.86, 0.86] + }, + "head": { + "translation": [0, 8, 0], + "scale": [1.4, 1.4, 1.4] }, "fixed": { - "rotation": [0, 160.5, 0], - "translation": [0.5, 0.5, 0] + "rotation": [0, 90, 0], + "translation": [0.5, 0.5, -1], + "scale": [0.72, 0.72, 0.72] } }, "groups": [ { - "name": "accelerator", + "name": "cog", "origin": [8, 8, 8], - "children": [0, 1, 2, 3] + "color": 0, + "children": [ + { + "name": "accelerator", + "origin": [8, 8, 8], + "color": 0, + "children": [0, 1, 2, 3] + } + ] } ] } \ No newline at end of file diff --git a/src/main/resources/assets/create/models/item/potato_cannon/item.json b/src/main/resources/assets/create/models/item/potato_cannon/item.json index 1fc1396f1..42ea3b673 100644 --- a/src/main/resources/assets/create/models/item/potato_cannon/item.json +++ b/src/main/resources/assets/create/models/item/potato_cannon/item.json @@ -1,73 +1,85 @@ { "credit": "Made with Blockbench", - "parent": "block/block", + "parent": "create:item/potato_cannon/item", + "texture_size": [32, 32], "textures": { - "2": "create:block/fluid_pipe", - "4": "create:block/andesite_casing_very_short", - "5": "create:block/andesite_casing_short", - "particle": "create:block/andesite_bricks" + "1": "create:item/potato_cannon" }, "elements": [ { - "from": [7, 7, -2.5], - "to": [9, 10, 6.5], + "from": [6.5, 7, -1.5], + "to": [9.5, 10, 6.5], "rotation": {"angle": 0, "axis": "y", "origin": [7, 7.6, 11]}, "faces": { - "north": {"uv": [7.5, 1, 9.5, 4], "texture": "#2"}, - "east": {"uv": [0.5, 6, 3.5, 15], "rotation": 90, "texture": "#2"}, - "south": {"uv": [7.5, 1, 9.5, 4], "texture": "#2"}, - "west": {"uv": [0.5, 6, 3.5, 15], "rotation": 270, "texture": "#2"}, - "up": {"uv": [1, 6, 3, 15], "texture": "#2"}, - "down": {"uv": [1, 6, 3, 15], "rotation": 180, "texture": "#2"} + "north": {"uv": [7.5, 1, 9.5, 4], "texture": "#missing"}, + "east": {"uv": [4, 2, 0, 3.5], "texture": "#1"}, + "south": {"uv": [10, 6, 11.5, 7.5], "texture": "#1"}, + "west": {"uv": [0, 2, 4, 3.5], "texture": "#1"}, + "up": {"uv": [0, 0, 4, 1.5], "rotation": 90, "texture": "#1"}, + "down": {"uv": [0, 4, 4, 5.5], "rotation": 270, "texture": "#1"} } }, { - "from": [7, 7, 9.5], - "to": [9, 10, 10.5], + "from": [6, 6.5, -2.5], + "to": [10, 10.5, -1.5], + "rotation": {"angle": 0, "axis": "y", "origin": [7, 7.6, 11]}, + "faces": { + "north": {"uv": [4, 0.5, 6, 2.5], "texture": "#1"}, + "east": {"uv": [6.25, 0.5, 5.75, 2.5], "texture": "#1"}, + "south": {"uv": [4, 3.5, 6, 5.5], "texture": "#1"}, + "west": {"uv": [5.75, 0.5, 6.25, 2.5], "texture": "#1"}, + "up": {"uv": [4, 0.75, 6, 0.25], "texture": "#1"}, + "down": {"uv": [4, 2.75, 6, 2.25], "texture": "#1"} + } + }, + { + "from": [6.5, 7, 9.5], + "to": [9.5, 10, 10.5], "rotation": {"angle": 0, "axis": "y", "origin": [8, 7.6, 11]}, "faces": { - "east": {"uv": [0.5, 6, 3.5, 7], "rotation": 90, "texture": "#2"}, - "west": {"uv": [0.5, 6, 3.5, 7], "rotation": 270, "texture": "#2"}, - "up": {"uv": [1, 6, 3, 7], "texture": "#2"}, - "down": {"uv": [1, 6, 3, 7], "rotation": 180, "texture": "#2"} + "north": {"uv": [0, 6, 1.5, 7.5], "texture": "#1"}, + "east": {"uv": [4, 2, 3.5, 3.5], "texture": "#1"}, + "west": {"uv": [3.5, 2, 4, 3.5], "texture": "#1"}, + "up": {"uv": [3.5, 0, 4, 1.5], "rotation": 90, "texture": "#1"}, + "down": {"uv": [3.5, 4, 4, 5.5], "texture": "#1"} } }, { "from": [6, 7, 10.5], - "to": [10, 11, 16.5], + "to": [10, 11, 15.5], "rotation": {"angle": 0, "axis": "y", "origin": [8, 9.6, 11]}, "faces": { - "north": {"uv": [7, 7, 15, 15], "rotation": 270, "texture": "#4"}, - "east": {"uv": [4, 4, 12, 16], "rotation": 270, "texture": "#5"}, - "south": {"uv": [7, 7, 15, 15], "rotation": 270, "texture": "#4"}, - "west": {"uv": [4, 4, 12, 16], "rotation": 90, "texture": "#5"}, - "up": {"uv": [4, 4, 12, 16], "rotation": 180, "texture": "#5"}, - "down": {"uv": [4, 4, 12, 16], "texture": "#5"} + "north": {"uv": [10, 3.5, 12, 5.5], "texture": "#1"}, + "east": {"uv": [9.5, 1, 7, 3], "texture": "#1"}, + "south": {"uv": [10, 1, 12, 3], "texture": "#1"}, + "west": {"uv": [7, 1, 9.5, 3], "texture": "#1"}, + "up": {"uv": [7, 3.5, 9.5, 5.5], "rotation": 90, "texture": "#1"}, + "down": {"uv": [7, 6, 9.5, 8], "rotation": 270, "texture": "#1"} } }, { - "from": [7, 4, 11.5], + "from": [7, 4, 14.5], "to": [9, 6, 15.5], "rotation": {"angle": 0, "axis": "y", "origin": [8, 7.6, 11]}, "faces": { - "north": {"uv": [13, 13, 15, 15], "texture": "#2"}, - "east": {"uv": [1, 6, 3, 10], "rotation": 90, "texture": "#2"}, - "west": {"uv": [1, 6, 3, 10], "rotation": 270, "texture": "#2"}, - "up": {"uv": [1, 6, 3, 10], "texture": "#2"}, - "down": {"uv": [1, 6, 3, 10], "rotation": 180, "texture": "#2"} + "north": {"uv": [13, 13, 15, 15], "texture": "#missing"}, + "east": {"uv": [0.5, 10, 1, 11], "texture": "#1"}, + "west": {"uv": [0.5, 10, 1, 11], "texture": "#1"}, + "up": {"uv": [0.5, 10, 1, 10.25], "rotation": 90, "texture": "#1"}, + "down": {"uv": [1.5, 10.75, 2.5, 11], "rotation": 90, "texture": "#1"} } }, { - "from": [6.5, 3.5, 9.5], + "from": [6.5, 3.5, 8.5], "to": [9.5, 6.5, 14.5], "rotation": {"angle": -45, "axis": "z", "origin": [8, 5, 11.5]}, "faces": { - "north": {"uv": [12.5, 12.5, 15.5, 15.5], "texture": "#2"}, - "east": {"uv": [0.5, 6, 3.5, 11], "rotation": 90, "texture": "#2"}, - "south": {"uv": [12.5, 12.5, 15.5, 15.5], "texture": "#2"}, - "west": {"uv": [0.5, 6, 3.5, 11], "rotation": 270, "texture": "#2"}, - "up": {"uv": [0.5, 6, 3.5, 11], "texture": "#2"}, - "down": {"uv": [0.5, 6, 3.5, 11], "rotation": 180, "texture": "#2"} + "north": {"uv": [3, 6, 4.5, 7.5], "rotation": 90, "texture": "#1"}, + "east": {"uv": [6, 9.25, 3, 10.75], "texture": "#1"}, + "south": {"uv": [5, 6, 6.5, 7.5], "texture": "#1"}, + "west": {"uv": [3, 8, 6, 9.5], "texture": "#1"}, + "up": {"uv": [3, 9.5, 6, 8], "rotation": 90, "texture": "#1"}, + "down": {"uv": [6, 10.75, 3, 9.25], "rotation": 90, "texture": "#1"} } }, { @@ -75,33 +87,29 @@ "to": [9, 10, 17.5], "rotation": {"angle": 0, "axis": "y", "origin": [8, 7.6, 11]}, "faces": { - "north": {"uv": [3, 7, 1, 13], "rotation": 180, "texture": "#2"}, - "east": {"uv": [1, 9, 3, 15], "texture": "#2"}, - "south": {"uv": [3, 7, 1, 13], "rotation": 180, "texture": "#2"}, - "west": {"uv": [3, 9, 1, 15], "texture": "#2"}, - "up": {"uv": [1, 7, 3, 9], "rotation": 180, "texture": "#2"}, - "down": {"uv": [1, 7, 3, 9], "texture": "#2"} + "north": {"uv": [1.25, 8, 0.25, 11], "texture": "#1"}, + "east": {"uv": [2, 8, 1, 11], "texture": "#1"}, + "south": {"uv": [3, 8, 2, 11], "texture": "#1"}, + "west": {"uv": [1, 8, 2, 11], "texture": "#1"}, + "up": {"uv": [2, 7, 3, 8], "texture": "#1"}, + "down": {"uv": [1.5, 10.75, 2.5, 11], "rotation": 90, "texture": "#1"} } } ], "display": { "thirdperson_righthand": { - "translation": [0, 1.75, 0], - "scale": [0.89, 0.89, 0.89] + "translation": [0, 1.75, 0] }, "thirdperson_lefthand": { - "translation": [0, 1.75, 0], - "scale": [0.89, 0.89, 0.89] + "translation": [0, 1.75, 0] }, "firstperson_righthand": { "rotation": [5, 4, 5], - "translation": [0.25, 4, 0.75], - "scale": [1, 1, 0.57] + "translation": [0.25, 4, 0.75] }, "firstperson_lefthand": { "rotation": [5, 4, 5], - "translation": [0.25, 4, 0.75], - "scale": [1, 1, 0.57] + "translation": [0.25, 4, 0.75] }, "ground": { "rotation": [0, 0, 90], @@ -110,7 +118,7 @@ }, "gui": { "rotation": [64, 47, -47], - "translation": [0, 0.5, 0], + "translation": [0.5, 0, 0], "scale": [0.86, 0.86, 0.86] }, "head": { diff --git a/src/main/resources/assets/create/textures/item/potato_cannon.png b/src/main/resources/assets/create/textures/item/potato_cannon.png new file mode 100644 index 0000000000000000000000000000000000000000..ad75120cdafa55ad94f8540f904750dbf7a8c203 GIT binary patch literal 1601 zcmV-H2EO@;P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!TLrorT@-)dB@%_5_Gaep#a?b$lY|ZdeeG3+893k zYeN7e8`iF(V}9}~9YLoDDCr+VInUr;z8}GW_3zxKdLGJ>q0IFs_dHj{eP6%u6dgN_ zdH~wt_n-b!-@SdZ!BDppSmqzq-xms@Re*aLJd-btsSwYi42CxY8~xI9#5pkd5Vw zs&r-U@5`GZn5Pe?4 z^=Ne}_@G5^%iQjtsk(wBc$S}oaxP8(OZ7VFa{BK_g#sYu8w6)}Xk7%1We$1Mg^<7@ zzc>%+=xg5}qu<^4#G}?}5cgpq-v7x(wdbvOBL{;5;Fm*z*5THcEwz|T9?VtWI5MU7 zzw=S#cS*vDFotOkhE|g0P5@og^Je_BXtdpW%@m|}k*JxV>3#`hkM+g}f80<9KK(Mf z0{mlJm=puE0jJqG6AXegMroW(0Su&=PFsQIXTNMENbXxV){>b3XE9a;DFBX3*#>2T zdfvbwd(3pDNdZvd=cViFv%^2!JOyCN;Y?4@_*!8_Dn;2KlUkngOVL3CAdzZ?wmq>) zJ?I)spB13Dt_ifbGzrv+M5+~H83Uq%)(5;Muz}2RqEIjzt^wo%-yS_4S^i*A0>D54 zFtjKJG1FpbAiG+6Z% zI;)2E9V0`TgJA;BkB^k=JHc2IOY~*22_8>$3*yKx`38%VB)7PH34J7%@SXuartm(3 z{16hB6Sc%eH<@fPytyJV)wN1e|GEQAbqv&j4Gh}3sX4AEJCHpa6UWXC6Gs**Npdvt z!^rC)VHsiU;7DV2U}p$Z5wNugoVR6*&ERLHI@nEiRglq&!P7L9;_xYoy#ekxW zzD;L7`ga0$9{ryONc8(KeX$ev3~fXXJMsYDK}P?_=P8rnT9}+*v7y#6?d$R0e-KE3 zFxAODexUF3^N!Hq;9#{}E>m3)nM_9Ia=8Un3@HFomS#ha2b2u$+}2>czO3=b5h=t1OTc!ST z&A!7ko$ips;cz${4u`|xa5x+ehr{7;1f$e{@f%LZlJe8r00000NkvXXu0mjf6(j#U literal 0 HcmV?d00001 From 802f8337fb201126b4f2321ee1604a63914b874f Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Sat, 10 Jul 2021 04:10:47 +0200 Subject: [PATCH 057/118] Tweak projectile spawn location --- .../create/content/curiosities/weapons/PotatoCannonItem.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoCannonItem.java b/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoCannonItem.java index 87442245f..480f44329 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoCannonItem.java +++ b/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoCannonItem.java @@ -131,7 +131,7 @@ public class PotatoCannonItem extends ShootableItem { } Vector3d barrelPos = ShootableGadgetItemMethods.getGunBarrelVec(player, hand == Hand.MAIN_HAND, - new Vector3d(.75f, -0.3f, 1.5f)); + new Vector3d(.75f, -0.15f, 1.5f)); Vector3d correction = ShootableGadgetItemMethods.getGunBarrelVec(player, hand == Hand.MAIN_HAND, new Vector3d(-.05f, 0, 0)) .subtract(player.getPositionVec() From bc456a76cda8b782e4498f5da3c1b9dc26530fbe Mon Sep 17 00:00:00 2001 From: reidbhuntley Date: Fri, 9 Jul 2021 23:11:16 -0400 Subject: [PATCH 058/118] Tuber Tube Tidy-up - Set recovery chance for unenchanted Potato Cannons to 0 - Power enchantment on Potato Cannons now scales the damage of the projectile type instead of adding to it - Changed Potato Cannon crafting recipe to better fit the new model --- src/generated/resources/.cache/cache | 2 +- .../mechanical_crafting/potato_cannon.json | 10 +++++----- .../weapons/PotatoProjectileEntity.java | 15 ++++++++------- .../data/recipe/MechanicalCraftingRecipeGen.java | 12 +++++------- 4 files changed, 19 insertions(+), 20 deletions(-) diff --git a/src/generated/resources/.cache/cache b/src/generated/resources/.cache/cache index e049ac862..6abf55f73 100644 --- a/src/generated/resources/.cache/cache +++ b/src/generated/resources/.cache/cache @@ -3383,7 +3383,7 @@ c2e15ac0c9109bad3face6d13efc32d7116b4c25 data/create/recipes/limestone_pillar_fr 14e322d4de8fae35d952274376497740bb3d5962 data/create/recipes/mechanical_crafting/extendo_grip.json de7fea84434753873dfa2b929d9b5f5f86ac6a5c data/create/recipes/mechanical_crafting/flywheel.json e491fd8a8873308270f9dc2a57ac8f2c70431dcc data/create/recipes/mechanical_crafting/furnace_engine.json -6ebd36ff54059038badefad239284ec1724fdf1d data/create/recipes/mechanical_crafting/potato_cannon.json +8e5224d22b228f69473ca48ca0d874b34660b573 data/create/recipes/mechanical_crafting/potato_cannon.json 98f877bf8f3f8a686fc6cf7479a0fba5744248ce data/create/recipes/milling/allium.json 8c7e1cbc87c7ca7df2bf949957e89422fef8ad94 data/create/recipes/milling/aluminum_ore.json bcff4d30ae09a0729bce8b2dbde4ddd6719a998b data/create/recipes/milling/andesite.json diff --git a/src/generated/resources/data/create/recipes/mechanical_crafting/potato_cannon.json b/src/generated/resources/data/create/recipes/mechanical_crafting/potato_cannon.json index 859513ed2..fffb05d24 100644 --- a/src/generated/resources/data/create/recipes/mechanical_crafting/potato_cannon.json +++ b/src/generated/resources/data/create/recipes/mechanical_crafting/potato_cannon.json @@ -1,11 +1,8 @@ { "type": "create:mechanical_crafting", "pattern": [ - "L", - "R", - "S", - "S", - "S" + "LRSSS", + "CC " ], "key": { "L": { @@ -15,6 +12,9 @@ "item": "create:precision_mechanism" }, "S": { + "item": "create:fluid_pipe" + }, + "C": { "tag": "forge:ingots/copper" } }, diff --git a/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoProjectileEntity.java b/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoProjectileEntity.java index 9dd80bc7e..3fa2b56d5 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoProjectileEntity.java +++ b/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoProjectileEntity.java @@ -30,6 +30,7 @@ import net.minecraft.util.IndirectEntityDamageSource; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockRayTraceResult; import net.minecraft.util.math.EntityRayTraceResult; +import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.vector.Vector3d; import net.minecraft.world.World; import net.minecraftforge.fml.common.registry.IEntityAdditionalSpawnData; @@ -46,9 +47,9 @@ public class PotatoProjectileEntity extends DamagingProjectileEntity implements PotatoProjectileRenderMode stuckRenderer; double stuckFallSpeed; - float additionalDamage = 0; + float additionalDamageMult = 0; float additionalKnockback = 0; - float recoveryChance = .125f; + float recoveryChance = 0; public PotatoProjectileEntity(EntityType type, World world) { super(type, world); @@ -76,7 +77,7 @@ public class PotatoProjectileEntity extends DamagingProjectileEntity implements int recovery = EnchantmentHelper.getEnchantmentLevel(AllEnchantments.POTATO_RECOVERY.get(), cannon); if (power > 0) - additionalDamage = power * 2; + additionalDamageMult = 1 + power * .2f; if (punch > 0) additionalKnockback = punch * .5f; if (flame > 0) @@ -88,7 +89,7 @@ public class PotatoProjectileEntity extends DamagingProjectileEntity implements @Override public void readAdditional(CompoundNBT nbt) { stack = ItemStack.read(nbt.getCompound("Item")); - additionalDamage = nbt.getFloat("AdditionalDamage"); + additionalDamageMult = nbt.getFloat("AdditionalDamage"); additionalKnockback = nbt.getFloat("AdditionalKnockback"); recoveryChance = nbt.getFloat("Recovery"); super.readAdditional(nbt); @@ -97,7 +98,7 @@ public class PotatoProjectileEntity extends DamagingProjectileEntity implements @Override public void writeAdditional(CompoundNBT nbt) { nbt.put("Item", stack.serializeNBT()); - nbt.putFloat("AdditionalDamage", additionalDamage); + nbt.putFloat("AdditionalDamage", additionalDamageMult); nbt.putFloat("AdditionalKnockback", additionalKnockback); nbt.putFloat("Recovery", recoveryChance); super.writeAdditional(nbt); @@ -174,7 +175,7 @@ public class PotatoProjectileEntity extends DamagingProjectileEntity implements Vector3d hit = ray.getHitVec(); Entity target = ray.getEntity(); PotatoCannonProjectileTypes projectileType = getProjectileType(); - float damage = projectileType.getDamage() + additionalDamage; + float damage = MathHelper.floor(projectileType.getDamage() * additionalDamageMult); float knockback = projectileType.getKnockback() + additionalKnockback; Entity owner = this.getOwner(); @@ -193,7 +194,7 @@ public class PotatoProjectileEntity extends DamagingProjectileEntity implements target.setFire(5); boolean onServer = !world.isRemote; - if (onServer && !target.attackEntityFrom(causePotatoDamage(), (float) damage)) { + if (onServer && !target.attackEntityFrom(causePotatoDamage(), damage)) { target.setFireTicks(k); remove(); return; diff --git a/src/main/java/com/simibubi/create/foundation/data/recipe/MechanicalCraftingRecipeGen.java b/src/main/java/com/simibubi/create/foundation/data/recipe/MechanicalCraftingRecipeGen.java index 887751cbb..ba98441ee 100644 --- a/src/main/java/com/simibubi/create/foundation/data/recipe/MechanicalCraftingRecipeGen.java +++ b/src/main/java/com/simibubi/create/foundation/data/recipe/MechanicalCraftingRecipeGen.java @@ -39,16 +39,14 @@ public class MechanicalCraftingRecipeGen extends CreateRecipeProvider { .patternLine("SSS") .patternLine("SSS") .patternLine(" H ")), - + POTATO_CANNON = create(AllItems.POTATO_CANNON::get).returns(1) .recipe(b -> b.key('L', I.andesite()) .key('R', I.precisionMechanism()) - .key('S', Ingredient.fromTag(I.copper())) - .patternLine("L") - .patternLine("R") - .patternLine("S") - .patternLine("S") - .patternLine("S")), + .key('S', AllBlocks.FLUID_PIPE.get()) + .key('C', Ingredient.fromTag(I.copper())) + .patternLine("LRSSS") + .patternLine("CC ")), FURNACE_ENGINE = create(AllBlocks.FURNACE_ENGINE::get).returns(1) .recipe(b -> b.key('P', Ingredient.fromTag(I.brassSheet())) From 976d53c9e4dd6378028f3145f39ba43f37a86dd4 Mon Sep 17 00:00:00 2001 From: grimmauld Date: Sat, 10 Jul 2021 10:54:54 +0200 Subject: [PATCH 059/118] Adjustable repeater, Pulse repeater, Powered latch and toggle latch can now power comparators from the side, like vanilla repeaters already can --- .../content/logistics/block/diodes/AbstractDiodeBlock.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/simibubi/create/content/logistics/block/diodes/AbstractDiodeBlock.java b/src/main/java/com/simibubi/create/content/logistics/block/diodes/AbstractDiodeBlock.java index 4d43d897f..a79285187 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/diodes/AbstractDiodeBlock.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/diodes/AbstractDiodeBlock.java @@ -2,6 +2,7 @@ package com.simibubi.create.content.logistics.block.diodes; import com.simibubi.create.content.contraptions.wrench.IWrenchable; +import net.minecraft.block.BlockState; import net.minecraft.block.RedstoneDiodeBlock; public abstract class AbstractDiodeBlock extends RedstoneDiodeBlock implements IWrenchable { @@ -9,5 +10,9 @@ public abstract class AbstractDiodeBlock extends RedstoneDiodeBlock implements I public AbstractDiodeBlock(Properties builder) { super(builder); } - + + @Override + public boolean canProvidePower(BlockState state) { + return true; + } } From 282a9a6f3aff05b9bd6ab9b434d6413bec9d9af9 Mon Sep 17 00:00:00 2001 From: grimmauld Date: Sat, 10 Jul 2021 18:46:44 +0200 Subject: [PATCH 060/118] Fix valve handles not having a tooltip --- .../simibubi/create/foundation/item/ItemDescription.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/simibubi/create/foundation/item/ItemDescription.java b/src/main/java/com/simibubi/create/foundation/item/ItemDescription.java index ea25a62e8..b9579d81d 100644 --- a/src/main/java/com/simibubi/create/foundation/item/ItemDescription.java +++ b/src/main/java/com/simibubi/create/foundation/item/ItemDescription.java @@ -22,10 +22,12 @@ import java.util.Arrays; import java.util.List; import java.util.Map; +import com.simibubi.create.AllBlocks; import com.simibubi.create.AllItems; import com.simibubi.create.content.contraptions.base.IRotate; import com.simibubi.create.content.contraptions.base.IRotate.SpeedLevel; import com.simibubi.create.content.contraptions.base.IRotate.StressImpact; +import com.simibubi.create.content.contraptions.components.crank.ValveHandleBlock; import com.simibubi.create.content.contraptions.components.fan.EncasedFanBlock; import com.simibubi.create.content.contraptions.components.flywheel.engine.EngineBlock; import com.simibubi.create.content.contraptions.components.flywheel.engine.FurnaceEngineBlock; @@ -92,6 +94,7 @@ public class ItemDescription { List list = new ArrayList<>(); boolean isEngine = block instanceof EngineBlock; + boolean isHandle = block instanceof ValveHandleBlock; CKinetics config = AllConfigs.SERVER.kinetics; SpeedLevel minimumRequiredSpeedLevel = isEngine ? SpeedLevel.NONE : ((IRotate) block).getMinimumRequiredSpeedLevel(); @@ -101,7 +104,7 @@ public class ItemDescription { Map> capacities = config.stressValues.getCapacities(); boolean hasStressImpact = impacts.containsKey(id) && impacts.get(id) .get() > 0 && StressImpact.isEnabled(); - boolean hasStressCapacity = capacities.containsKey(id) && StressImpact.isEnabled(); + boolean hasStressCapacity = (isHandle || capacities.containsKey(id)) && StressImpact.isEnabled(); boolean hasGlasses = AllItems.GOGGLES.get() == Minecraft.getInstance().player.getItemStackFromSlot(EquipmentSlotType.HEAD) .getItem(); @@ -151,7 +154,7 @@ public class ItemDescription { if (hasStressCapacity) { List stressCapacityLevels = Lang.translatedOptions("tooltip.capacityProvided", "low", "medium", "high"); - double capacity = capacities.get(id) + double capacity = capacities.get(isHandle ? AllBlocks.HAND_CRANK.getId() : id) .get(); StressImpact impactId = capacity >= config.highCapacity.get() ? StressImpact.LOW : (capacity >= config.mediumCapacity.get() ? StressImpact.MEDIUM : StressImpact.HIGH); From 47059e0cafae837b1ff986cc9a2d09d59f046af7 Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Sat, 10 Jul 2021 21:20:27 +0200 Subject: [PATCH 061/118] Fix item particle textures --- .../assets/create/models/block/mechanical_mixer/item.json | 3 ++- .../assets/create/models/item/potato_cannon/item.json | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/resources/assets/create/models/block/mechanical_mixer/item.json b/src/main/resources/assets/create/models/block/mechanical_mixer/item.json index d53ce5844..0c912b445 100644 --- a/src/main/resources/assets/create/models/block/mechanical_mixer/item.json +++ b/src/main/resources/assets/create/models/block/mechanical_mixer/item.json @@ -9,7 +9,8 @@ "6": "create:block/mixer_head", "11": "create:block/mechanical_press_top", "1_2": "create:block/cogwheel", - "mechanical_press_pole": "create:block/mechanical_press_pole" + "mechanical_press_pole": "create:block/mechanical_press_pole", + "particle": "create:block/andesite_casing" }, "elements": [ { diff --git a/src/main/resources/assets/create/models/item/potato_cannon/item.json b/src/main/resources/assets/create/models/item/potato_cannon/item.json index 42ea3b673..9588f519b 100644 --- a/src/main/resources/assets/create/models/item/potato_cannon/item.json +++ b/src/main/resources/assets/create/models/item/potato_cannon/item.json @@ -3,7 +3,8 @@ "parent": "create:item/potato_cannon/item", "texture_size": [32, 32], "textures": { - "1": "create:item/potato_cannon" + "1": "create:item/potato_cannon", + "particle": "create:block/copper_casing" }, "elements": [ { From b490716c79546aecdd396d597ce3f596022d8ed9 Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Sat, 10 Jul 2021 21:27:27 +0200 Subject: [PATCH 062/118] End to end - Rotate pipe model in item frames such that they line up when crafting a potato cannon --- .../assets/create/models/block/fluid_pipe/item.json | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/main/resources/assets/create/models/block/fluid_pipe/item.json b/src/main/resources/assets/create/models/block/fluid_pipe/item.json index 3860db36a..c68b548bd 100644 --- a/src/main/resources/assets/create/models/block/fluid_pipe/item.json +++ b/src/main/resources/assets/create/models/block/fluid_pipe/item.json @@ -66,5 +66,11 @@ "down": {"uv": [6, 5, 11, 6], "texture": "#1"} } } - ] + ], + "display": { + "fixed": { + "rotation": [0, 90, 0], + "scale": [0.5, 0.5, 0.5] + } + } } \ No newline at end of file From a28dad9cd696e91440152b7f1af1c6d1e15a06af Mon Sep 17 00:00:00 2001 From: Jozufozu Date: Sat, 10 Jul 2021 13:13:36 -0700 Subject: [PATCH 063/118] Bump flywheel version - Adjust mods.toml version range --- 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 e297ebee0..aef31b40e 100644 --- a/gradle.properties +++ b/gradle.properties @@ -16,7 +16,7 @@ cursegradle_version = 1.4.0 # dependency versions registrate_version = 1.0.4 -flywheel_version = 1.16-0.0.3.20 +flywheel_version = 1.16-0.1.0.21 jei_version = 7.7.0.106 # curseforge information diff --git a/src/main/resources/META-INF/mods.toml b/src/main/resources/META-INF/mods.toml index 17fee9e42..93a452376 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.16,1.17)" + versionRange="[1.16-0.1,1.16-0.2)" ordering="AFTER" side="CLIENT" From f1da8b8f1e03665d6f43101bf087900035c3b400 Mon Sep 17 00:00:00 2001 From: Jozufozu Date: Sat, 10 Jul 2021 15:20:34 -0700 Subject: [PATCH 064/118] Cull code to fix crash on mac - A bunch of dead code removal --- .../bell/CustomRotationParticle.java | 4 +- .../projector/ChromaticProjectorBlock.java | 63 ---- .../projector/ChromaticProjectorInstance.java | 31 -- .../projector/ChromaticProjectorScreen.java | 314 ------------------ .../ChromaticProjectorTileEntity.java | 140 -------- .../curiosities/projector/ColorEffect.java | 113 ------- .../projector/ConfigureProjectorPacket.java | 126 ------- .../curiosities/projector/FilterStep.java | 85 ----- .../mixin/HeavyBootsOnEntityMixin.java | 30 -- .../foundation/networking/AllPackets.java | 2 - .../foundation/render/CreateContexts.java | 3 - .../render/effects/ColorMatrices.java | 129 ------- .../render/effects/EffectsContext.java | 38 --- .../render/effects/EffectsHandler.java | 151 --------- .../render/effects/FilterSphere.java | 54 --- .../render/effects/SphereFilterProgram.java | 118 ------- .../create/flywheel/programs/chromatic.json | 4 - .../create/flywheel/shaders/area_effect.frag | 167 ---------- .../create/flywheel/shaders/area_effect.vert | 29 -- 19 files changed, 3 insertions(+), 1598 deletions(-) delete mode 100644 src/main/java/com/simibubi/create/content/curiosities/projector/ChromaticProjectorBlock.java delete mode 100644 src/main/java/com/simibubi/create/content/curiosities/projector/ChromaticProjectorInstance.java delete mode 100644 src/main/java/com/simibubi/create/content/curiosities/projector/ChromaticProjectorScreen.java delete mode 100644 src/main/java/com/simibubi/create/content/curiosities/projector/ChromaticProjectorTileEntity.java delete mode 100644 src/main/java/com/simibubi/create/content/curiosities/projector/ColorEffect.java delete mode 100644 src/main/java/com/simibubi/create/content/curiosities/projector/ConfigureProjectorPacket.java delete mode 100644 src/main/java/com/simibubi/create/content/curiosities/projector/FilterStep.java delete mode 100644 src/main/java/com/simibubi/create/foundation/mixin/HeavyBootsOnEntityMixin.java delete mode 100644 src/main/java/com/simibubi/create/foundation/render/effects/ColorMatrices.java delete mode 100644 src/main/java/com/simibubi/create/foundation/render/effects/EffectsContext.java delete mode 100644 src/main/java/com/simibubi/create/foundation/render/effects/EffectsHandler.java delete mode 100644 src/main/java/com/simibubi/create/foundation/render/effects/FilterSphere.java delete mode 100644 src/main/java/com/simibubi/create/foundation/render/effects/SphereFilterProgram.java delete mode 100644 src/main/resources/assets/create/flywheel/programs/chromatic.json delete mode 100644 src/main/resources/assets/create/flywheel/shaders/area_effect.frag delete mode 100644 src/main/resources/assets/create/flywheel/shaders/area_effect.vert diff --git a/src/main/java/com/simibubi/create/content/curiosities/bell/CustomRotationParticle.java b/src/main/java/com/simibubi/create/content/curiosities/bell/CustomRotationParticle.java index 3e82e828d..21bc73de8 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/bell/CustomRotationParticle.java +++ b/src/main/java/com/simibubi/create/content/curiosities/bell/CustomRotationParticle.java @@ -1,10 +1,12 @@ package com.simibubi.create.content.curiosities.bell; +import com.jozufozu.flywheel.backend.OptifineHandler; import com.mojang.blaze3d.vertex.IVertexBuilder; import net.minecraft.client.particle.IAnimatedSprite; import net.minecraft.client.particle.SimpleAnimatedParticle; import net.minecraft.client.renderer.ActiveRenderInfo; +import net.minecraft.client.renderer.LightTexture; import net.minecraft.client.world.ClientWorld; import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.vector.Quaternion; @@ -61,7 +63,7 @@ public class CustomRotationParticle extends SimpleAnimatedParticle { float maxU = mirror ? getMinU() : getMaxU(); float minV = getMinV(); float maxV = getMaxV(); - int brightness = getBrightnessForRender(partialTicks); + int brightness = OptifineHandler.usingShaders() ? LightTexture.pack(12, 15 ) : getBrightnessForRender(partialTicks); builder.vertex(vertices[0].getX(), vertices[0].getY(), vertices[0].getZ()).texture(maxU, maxV).color(particleRed, particleGreen, particleBlue, particleAlpha).light(brightness).endVertex(); builder.vertex(vertices[1].getX(), vertices[1].getY(), vertices[1].getZ()).texture(maxU, minV).color(particleRed, particleGreen, particleBlue, particleAlpha).light(brightness).endVertex(); builder.vertex(vertices[2].getX(), vertices[2].getY(), vertices[2].getZ()).texture(minU, minV).color(particleRed, particleGreen, particleBlue, particleAlpha).light(brightness).endVertex(); diff --git a/src/main/java/com/simibubi/create/content/curiosities/projector/ChromaticProjectorBlock.java b/src/main/java/com/simibubi/create/content/curiosities/projector/ChromaticProjectorBlock.java deleted file mode 100644 index d303e77a4..000000000 --- a/src/main/java/com/simibubi/create/content/curiosities/projector/ChromaticProjectorBlock.java +++ /dev/null @@ -1,63 +0,0 @@ -package com.simibubi.create.content.curiosities.projector; - -import javax.annotation.Nullable; - -import com.simibubi.create.AllItems; -import com.simibubi.create.foundation.block.ITE; -import com.simibubi.create.foundation.gui.ScreenOpener; - -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.client.entity.player.ClientPlayerEntity; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.ActionResultType; -import net.minecraft.util.Hand; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.BlockRayTraceResult; -import net.minecraft.world.IBlockReader; -import net.minecraft.world.World; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; -import net.minecraftforge.fml.DistExecutor; - -public class ChromaticProjectorBlock extends Block implements ITE { - public ChromaticProjectorBlock(Properties p_i48440_1_) { - super(p_i48440_1_); - } - - @Override - public ActionResultType onUse(BlockState state, World worldIn, BlockPos pos, PlayerEntity player, Hand handIn, - BlockRayTraceResult hit) { - ItemStack held = player.getHeldItemMainhand(); - if (AllItems.WRENCH.isIn(held)) - return ActionResultType.PASS; - - DistExecutor.unsafeRunWhenOn(Dist.CLIENT, - () -> () -> withTileEntityDo(worldIn, pos, te -> this.displayScreen(te, player))); - return ActionResultType.SUCCESS; - } - - @OnlyIn(value = Dist.CLIENT) - protected void displayScreen(ChromaticProjectorTileEntity te, PlayerEntity player) { - if (player instanceof ClientPlayerEntity) - ScreenOpener.open(new ChromaticProjectorScreen(te)); - } - - @Override - public boolean hasTileEntity(BlockState state) { - return true; - } - - @Nullable - @Override - public TileEntity createTileEntity(BlockState state, IBlockReader world) { - return null;//AllTileEntities.CHROMATIC_PROJECTOR.create(); - } - - @Override - public Class getTileEntityClass() { - return ChromaticProjectorTileEntity.class; - } -} diff --git a/src/main/java/com/simibubi/create/content/curiosities/projector/ChromaticProjectorInstance.java b/src/main/java/com/simibubi/create/content/curiosities/projector/ChromaticProjectorInstance.java deleted file mode 100644 index 2cd7c8f6f..000000000 --- a/src/main/java/com/simibubi/create/content/curiosities/projector/ChromaticProjectorInstance.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.simibubi.create.content.curiosities.projector; - -import com.jozufozu.flywheel.backend.instancing.IDynamicInstance; -import com.jozufozu.flywheel.backend.instancing.MaterialManager; -import com.jozufozu.flywheel.backend.instancing.tile.TileEntityInstance; -import com.simibubi.create.foundation.render.effects.EffectsHandler; - -public class ChromaticProjectorInstance extends TileEntityInstance implements IDynamicInstance { - - public ChromaticProjectorInstance(MaterialManager renderer, ChromaticProjectorTileEntity tile) { - super(renderer, tile); - } - - @Override - public void beginFrame() { - EffectsHandler instance = EffectsHandler.getInstance(); - - if (instance != null) - instance.addSphere(tile.getFilter()); - } - - @Override - public boolean decreaseFramerateWithDistance() { - return false; - } - - @Override - public void remove() { - - } -} diff --git a/src/main/java/com/simibubi/create/content/curiosities/projector/ChromaticProjectorScreen.java b/src/main/java/com/simibubi/create/content/curiosities/projector/ChromaticProjectorScreen.java deleted file mode 100644 index 1e46fa747..000000000 --- a/src/main/java/com/simibubi/create/content/curiosities/projector/ChromaticProjectorScreen.java +++ /dev/null @@ -1,314 +0,0 @@ -package com.simibubi.create.content.curiosities.projector; - -import java.util.Collections; -import java.util.Vector; - -import com.mojang.blaze3d.matrix.MatrixStack; -import com.simibubi.create.foundation.gui.AbstractSimiScreen; -import com.simibubi.create.foundation.gui.AllGuiTextures; -import com.simibubi.create.foundation.gui.AllIcons; -import com.simibubi.create.foundation.gui.GuiGameElement; -import com.simibubi.create.foundation.gui.widgets.IconButton; -import com.simibubi.create.foundation.gui.widgets.ScrollInput; -import com.simibubi.create.foundation.gui.widgets.SelectionScrollInput; -import com.simibubi.create.foundation.networking.AllPackets; -import com.simibubi.create.foundation.tileEntity.behaviour.scrollvalue.ScrollValueBehaviour; -import com.simibubi.create.foundation.utility.Lang; - -import net.minecraft.item.ItemStack; -import net.minecraft.util.text.ITextComponent; -import net.minecraft.util.text.StringTextComponent; - -public class ChromaticProjectorScreen extends AbstractSimiScreen { - - private AllGuiTextures background; - private ChromaticProjectorTileEntity tile; - private Vector stages; - - private ItemStack renderedItem = ItemStack.EMPTY;//AllBlocks.CHROMATIC_PROJECTOR.asStack(); - private Vector> inputs; - - private IconButton confirmButton; - - private ScrollInput radius; - private ScrollInput density; - private ScrollInput feather; - private ScrollInput fade; - - private IconButton blend; - - private ScrollInput strength; - private IconButton fieldEffect; - - private IconButton rChannel; - private IconButton gChannel; - private IconButton bChannel; - - public ChromaticProjectorScreen(ChromaticProjectorTileEntity te) { - super(Lang.translate("gui.chromatic_projector.title")); - background = AllGuiTextures.PROJECTOR; - tile = te; - stages = te.stages; - } - - @Override - protected void init() { - setWindowSize(background.width, background.height); - setWindowOffset(-25, 0); - super.init(); - widgets.clear(); - - int x = guiLeft; - int y = guiTop; - - inputs = new Vector<>(FilterStep.MAX_STEPS); - for (int row = 0; row < inputs.capacity(); row++) - inputs.add(new Vector<>(2)); - - for (int row = 0; row < stages.size(); row++) - initInputsOfRow(row, x, y); - - confirmButton = - new IconButton(x + background.width - 33, y + background.height - 26, AllIcons.I_CONFIRM); - widgets.add(confirmButton); - - initEffectSettings(x, y); - initMetaSettings(x, y); - } - - public void initInputsOfRow(int x, int y, int row) { - x += 30; - y += 18; - int rowHeight = 22; - - Vector rowInputs = inputs.get(row); - rowInputs.forEach(widgets::remove); - rowInputs.clear(); - FilterStep filter = stages.get(row); - - final int x1 = x; - final int y1 = y; - ScrollInput type = - new SelectionScrollInput(x, y + rowHeight * row, 86, 18) - .forOptions(ColorEffect.getOptions()) - .calling(state -> stageUpdated(x1, y1, row, state)) - .setState(filter.filter.id) - .titled(Lang.translate("gui.chromatic_projector.filter")); - ScrollInput value = - new ScrollInput(x + 86 + 2, y + rowHeight * row, 28, 18) - .calling(state -> filter.value = state); - - rowInputs.add(type); - rowInputs.add(value); - - widgets.addAll(rowInputs); - updateParamsOfRow(row); - } - - public void updateParamsOfRow(int row) { - FilterStep instruction = stages.get(row); - Vector rowInputs = inputs.get(row); - ColorEffect def = instruction.filter; - boolean hasValue = def.hasParameter; - - ScrollInput value = rowInputs.get(1); - value.active = value.visible = hasValue; - if (hasValue) - value.withRange(def.minValue, def.maxValue + 1) - //.titled(Lang.translate(def.parameterKey)) - .setState(instruction.value) - .onChanged(); - - value.withStepFunction(def.step()); - } - - private void initEffectSettings(int x, int y) { - x += 188; - y += 40; - - radius = new ScrollInput(x, y, 28, 18) - .titled(Lang.translate("gui.chromatic_projector.radius")) - .withStepFunction(ctx -> step(ctx, 2)) - .calling(tile::setRadius) - .withRange(0, 201) - .setState((int) (tile.radius * 2)); - y += 22; - feather = new ScrollInput(x, y, 28, 18) - .titled(Lang.translate("gui.chromatic_projector.feather")) - .withStepFunction(ctx -> step(ctx, 5)) - .calling(tile::setFeather) - .withRange(0, 201) - .setState((int) (tile.feather * 10)); - y += 22; - density = new ScrollInput(x, y, 28, 18) - .titled(Lang.translate("gui.chromatic_projector.density")) - .withStepFunction(ctx -> step(ctx, 10)) - .calling(tile::setDensity) - .withRange(0, 401) - .setState((int) (tile.density * 100)); - y += 22; - fade = new ScrollInput(x, y, 28, 18) - .titled(Lang.translate("gui.chromatic_projector.fade")) - .withStepFunction(ctx -> step(ctx, 1)) - .calling(tile::setFade) - .withRange(0, 51) - .setState((int) (tile.fade * 10)); - - Collections.addAll(widgets, radius, density, feather, fade); - } - - private void initMetaSettings(int x, int y) { - y += background.height - 23; - - blend = new IconButton(x + 16, y, AllIcons.I_FX_BLEND); - blend.setToolTip(Lang.translate("gui.chromatic_projector.blend")); - - int channelX = x + 39; - rChannel = new IconButton(channelX, y, AllIcons.I_FX_BLEND); - rChannel.setToolTip(new StringTextComponent("R")); - channelX += 18; - gChannel = new IconButton(channelX, y, AllIcons.I_FX_BLEND); - gChannel.setToolTip(new StringTextComponent("G")); - channelX += 18; - bChannel = new IconButton(channelX, y, AllIcons.I_FX_BLEND); - bChannel.setToolTip(new StringTextComponent("B")); - - fieldEffect = new IconButton(x + 135, y, tile.field ? AllIcons.I_FX_FIELD_ON : AllIcons.I_FX_FIELD_OFF); - fieldEffect.setToolTip(Lang.translate("gui.chromatic_projector.field")); - - strength = new ScrollInput(x + 159, y, 25, 18) - .titled(Lang.translate("gui.chromatic_projector.strength")) - .withStepFunction(ctx -> step(ctx, 5)) - .calling(tile::setStrength) - .withRange(-100, 101) - .setState((int) (tile.strength * 100)); - - Collections.addAll(widgets, blend, rChannel, gChannel, bChannel, fieldEffect, strength); - } - - @Override - protected void renderWindow(MatrixStack ms, int mouseX, int mouseY, float partialTicks) { - int x = guiLeft; - int y = guiTop; - - background.draw(ms, this, x, y); - - for (int row = 0; row < stages.capacity(); row++) { - AllGuiTextures toDraw = AllGuiTextures.PROJECTOR_EMPTY; - int yOffset = toDraw.height * row; - if (row >= stages.size()) { - toDraw.draw(ms, x, y + 14 + yOffset); - continue; - } - - FilterStep step = stages.get(row); - ColorEffect def = step.filter; - def.background.draw(ms, x, y + 14 + yOffset); - - if (def != ColorEffect.END) - label(ms, 36, yOffset - 3, Lang.translate(def.translationKey)); - if (def.hasParameter) { - String text = step.filter.formatValue(step.value); - int stringWidth = textRenderer.getStringWidth(text); - label(ms, 118 + (12 - stringWidth / 2), yOffset - 3, new StringTextComponent(text)); - } - } - - renderScroll(ms, radius, 2f); - renderScroll(ms, density, 100f); - renderScroll(ms, feather, 10f); - renderScroll(ms, fade, 10f); - - renderScroll(ms, strength, 100f); - - drawCenteredText(ms, textRenderer, title, x + (background.width - 8) / 2, y + 3, 0xFFFFFF); - - GuiGameElement.of(renderedItem) - .scale(5) - .at(x + background.width + 6, y + background.height - 56, -200) - .render(ms); - } - - private void renderScroll(MatrixStack matrixStack, ScrollInput input, float divisor) { - String text = String.valueOf(input.getState() / divisor); - -// int stringWidth = textRenderer.getStringWidth(text); - textRenderer.drawWithShadow(matrixStack, text, input.x + 2, input.y + 5, 0xFFFFEE); - } - - private void label(MatrixStack matrixStack, int x, int y, ITextComponent text) { - textRenderer.drawWithShadow(matrixStack, text, guiLeft + x, guiTop + 26 + y, 0xFFFFEE); - } - - private static Integer step(ScrollValueBehaviour.StepContext ctx, int base) { - if (ctx.control) return 1; - return base * (ctx.shift ? 5 : 1) - ctx.currentValue % base; - } - - public void sendPacket() { - AllPackets.channel.sendToServer(new ConfigureProjectorPacket(tile)); - } - - @Override - public void removed() { - sendPacket(); - } - - private void stageUpdated(int x, int y, int index, int state) { - ColorEffect newValue = ColorEffect.all.get(state); - stages.get(index).filter = newValue; - stages.get(index).value = newValue.defaultValue; - updateParamsOfRow(index); - if (newValue == ColorEffect.END) { - for (int i = stages.size() - 1; i > index; i--) { - stages.remove(i); - Vector rowInputs = inputs.get(i); - rowInputs.forEach(widgets::remove); - rowInputs.clear(); - } - } else { - if (index + 1 < stages.capacity() && index + 1 == stages.size()) { - stages.add(new FilterStep(ColorEffect.END)); - initInputsOfRow(x, y, index + 1); - } - } - } - - @Override - public boolean mouseClicked(double x, double y, int button) { - if (confirmButton.isHovered()) { - client.player.closeScreen(); - return true; - } - - if (blend.isHovered()) { - tile.blend = !tile.blend; - return true; - } - - if (fieldEffect.isHovered()) { - tile.field = !tile.field; - - fieldEffect.setIcon(tile.field ? AllIcons.I_FX_FIELD_ON : AllIcons.I_FX_FIELD_OFF); - return fieldEffect.mouseClicked(x, y, button); - } - - if (rChannel.isHovered()) { - tile.rMask = !tile.rMask; - return true; - } - - if (gChannel.isHovered()) { - tile.gMask = !tile.gMask; - return true; - } - - if (bChannel.isHovered()) { - tile.bMask = !tile.bMask; - return true; - } - - return super.mouseClicked(x, y, button); - } - -} diff --git a/src/main/java/com/simibubi/create/content/curiosities/projector/ChromaticProjectorTileEntity.java b/src/main/java/com/simibubi/create/content/curiosities/projector/ChromaticProjectorTileEntity.java deleted file mode 100644 index ad80feb79..000000000 --- a/src/main/java/com/simibubi/create/content/curiosities/projector/ChromaticProjectorTileEntity.java +++ /dev/null @@ -1,140 +0,0 @@ -package com.simibubi.create.content.curiosities.projector; - -import java.util.Vector; - -import com.jozufozu.flywheel.backend.instancing.IInstanceRendered; -import com.simibubi.create.foundation.render.effects.FilterSphere; -import com.simibubi.create.foundation.tileEntity.SyncedTileEntity; - -import net.minecraft.block.BlockState; -import net.minecraft.nbt.CompoundNBT; -import net.minecraft.tileentity.TileEntityType; -import net.minecraft.util.math.BlockPos; -import net.minecraftforge.common.util.Constants; - -public class ChromaticProjectorTileEntity extends SyncedTileEntity implements IInstanceRendered { - - Vector stages = FilterStep.createDefault(); - - float radius = 3f; - - float feather = 1; - float density = 1; - float fade = 1; - boolean blend = true; - - public boolean surface = true; - public boolean field = true; - public float strength = 1; - - public boolean rMask = true; - public boolean gMask = true; - public boolean bMask = true; - - public ChromaticProjectorTileEntity(TileEntityType te) { - super(te); - } - - public FilterSphere getFilter() { - - BlockPos pos = getPos(); - FilterSphere sphere = new FilterSphere(); - - sphere.x = (float) (pos.getX() + 0.5); - sphere.y = (float) (pos.getY() + 0.5); - sphere.z = (float) (pos.getZ() + 0.5); - sphere.radius = radius; - - sphere.feather = feather; - sphere.density = density; - sphere.fade = fade; - sphere.blend = blend; - - sphere.surface = surface; - sphere.field = field; - sphere.strength = strength; - - sphere.rMask = rMask; - sphere.gMask = gMask; - sphere.bMask = bMask; - - sphere.filter = FilterStep.fold(stages); - return sphere; - } - - public ChromaticProjectorTileEntity setRadius(int radius) { - this.radius = radius / 2f; - return this; - } - - public ChromaticProjectorTileEntity setDensity(int density) { - this.density = density / 100f; - return this; - } - - public ChromaticProjectorTileEntity setFeather(int feather) { - this.feather = feather / 10f; - return this; - } - - public ChromaticProjectorTileEntity setFade(int fade) { - this.fade = fade / 10f; - return this; - } - - public ChromaticProjectorTileEntity setBlend(boolean blend) { - this.blend = blend; - return this; - } - - public ChromaticProjectorTileEntity setStrength(int strength) { - this.strength = strength / 100f; - return this; - } - - @Override - public CompoundNBT write(CompoundNBT tag) { - super.write(tag); - - tag.put("filters", FilterStep.writeAll(stages)); - - tag.putFloat("radius", radius); - - tag.putFloat("feather", feather); - tag.putFloat("density", density); - tag.putFloat("fade", fade); - tag.putBoolean("blend", blend); - - tag.putBoolean("surface", surface); - tag.putBoolean("field", field); - tag.putFloat("strength", strength); - - tag.putBoolean("rMask", rMask); - tag.putBoolean("gMask", gMask); - tag.putBoolean("bMask", bMask); - - return tag; - } - - @Override - public void fromTag(BlockState state, CompoundNBT tag) { - super.fromTag(state, tag); - - stages = FilterStep.readAll(tag.getList("filters", Constants.NBT.TAG_COMPOUND)); - - radius = tag.getFloat("radius"); - - feather = tag.getFloat("feather"); - density = tag.getFloat("density"); - fade = tag.getFloat("fade"); - blend = tag.getBoolean("blend"); - - surface = tag.getBoolean("surface"); - field = tag.getBoolean("field"); - strength = tag.getFloat("strength"); - - rMask = tag.getBoolean("rMask"); - gMask = tag.getBoolean("gMask"); - bMask = tag.getBoolean("bMask"); - } -} diff --git a/src/main/java/com/simibubi/create/content/curiosities/projector/ColorEffect.java b/src/main/java/com/simibubi/create/content/curiosities/projector/ColorEffect.java deleted file mode 100644 index d9dd6ca09..000000000 --- a/src/main/java/com/simibubi/create/content/curiosities/projector/ColorEffect.java +++ /dev/null @@ -1,113 +0,0 @@ -package com.simibubi.create.content.curiosities.projector; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.function.Function; -import java.util.function.Supplier; - -import com.simibubi.create.foundation.gui.AllGuiTextures; -import com.simibubi.create.foundation.render.effects.ColorMatrices; -import com.simibubi.create.foundation.tileEntity.behaviour.scrollvalue.ScrollValueBehaviour; -import com.simibubi.create.foundation.utility.Lang; - -import net.minecraft.util.math.vector.Matrix4f; -import net.minecraft.util.text.ITextComponent; - -public class ColorEffect { - static final ArrayList all = new ArrayList<>(); - static final HashMap lookup = new HashMap<>(); - private static int nextId = 0; - - public static final ColorEffect SEPIA = create("sepia", ColorMatrices::sepia); - public static final ColorEffect GRAYSCALE = create("grayscale", ColorMatrices::grayscale); - public static final ColorEffect DARKEN = create("darken", ColorMatrices::darken).setDefaultValue(20); - public static final ColorEffect CONTRAST = create("contrast", ColorMatrices::contrast).setRange(0, 200).setDefaultValue(100); - public static final ColorEffect SATURATE = create("saturate", ColorMatrices::saturate).setRange(0, 200); - public static final ColorEffect HUE_SHIFT = create("hue_shift", ColorMatrices::hueShift).setRange(0, 360).setDivisor(1f).setDefaultValue(120); - public static final ColorEffect INVERT = create("invert", ColorMatrices::invert); - public static final ColorEffect END = create("end", ColorMatrices::identity).setBackground(AllGuiTextures.PROJECTOR_END); - - boolean hasParameter; - AllGuiTextures background; - - int defaultValue = 100; - int minValue = 0; - int maxValue = 100; - float divisor = 100f; - - final int id; - final FilterFactory filter; - final String name; - final String translationKey; - - public ColorEffect(String name, FilterFactory filter) { - this.filter = filter; - this.name = name; - this.translationKey = "gui.chromatic_projector.filter." + Lang.asId(name); - this.id = nextId++; - - lookup.put(name, this); - all.add(this); - } - - public ColorEffect setHasParameter(boolean hasParameter) { - this.hasParameter = hasParameter; - return setBackground(hasParameter ? AllGuiTextures.PROJECTOR_FILTER_STRENGTH : AllGuiTextures.PROJECTOR_FILTER); - } - - public ColorEffect setBackground(AllGuiTextures background) { - this.background = background; - return this; - } - - public ColorEffect setDefaultValue(int defaultValue) { - this.defaultValue = defaultValue; - return this; - } - - public ColorEffect setRange(int minValue, int maxValue) { - this.minValue = minValue; - this.maxValue = maxValue; - return this; - } - - public ColorEffect setDivisor(float divisor) { - this.divisor = divisor; - return this; - } - - public Function step() { - return c -> { - if (c.control) return 1; - if (c.shift) return 20; - return 5; - }; - } - - String formatValue(int value) { - if (this == HUE_SHIFT) - return value + Lang.translate("generic.unit.degrees").getString(); - return "" + value; - } - - static List getOptions() { - List options = new ArrayList<>(); - for (ColorEffect entry : all) - options.add(Lang.translate(entry.translationKey)); - return options; - } - - @FunctionalInterface - public interface FilterFactory { - Matrix4f create(float param); - } - - public static ColorEffect create(String name, Supplier filter) { - return new ColorEffect(name, $ -> filter.get()).setHasParameter(false); - } - - public static ColorEffect create(String name, FilterFactory filter) { - return new ColorEffect(name, filter).setHasParameter(true); - } -} diff --git a/src/main/java/com/simibubi/create/content/curiosities/projector/ConfigureProjectorPacket.java b/src/main/java/com/simibubi/create/content/curiosities/projector/ConfigureProjectorPacket.java deleted file mode 100644 index 89eb463b3..000000000 --- a/src/main/java/com/simibubi/create/content/curiosities/projector/ConfigureProjectorPacket.java +++ /dev/null @@ -1,126 +0,0 @@ -package com.simibubi.create.content.curiosities.projector; - -import java.util.Vector; -import java.util.stream.Collectors; - -import com.simibubi.create.foundation.networking.TileEntityConfigurationPacket; - -import net.minecraft.nbt.CompoundNBT; -import net.minecraft.network.PacketBuffer; - -public class ConfigureProjectorPacket extends TileEntityConfigurationPacket { - - Vector stages; - float radius; - - float feather; - float density; - float fade; - boolean blend; - - public boolean surface; - public boolean field; - public float strength; - - public boolean rMask; - public boolean gMask; - public boolean bMask; - - public ConfigureProjectorPacket(PacketBuffer buffer) { - super(buffer); - } - - public ConfigureProjectorPacket(ChromaticProjectorTileEntity tile) { - super(tile.getPos()); - - stages = tile.stages.stream() - .map(FilterStep::write) - .collect(Collectors.toCollection(Vector::new)); - radius = tile.radius; - - feather = tile.feather; - density = tile.density; - fade = tile.fade; - blend = tile.blend; - - surface = tile.surface; - field = tile.field; - strength = tile.strength; - - rMask = tile.rMask; - gMask = tile.gMask; - bMask = tile.bMask; - } - - @Override - protected void writeSettings(PacketBuffer buffer) { - buffer.writeFloat(radius); - - buffer.writeFloat(feather); - buffer.writeFloat(density); - buffer.writeFloat(fade); - buffer.writeBoolean(blend); - - buffer.writeBoolean(surface); - buffer.writeBoolean(field); - buffer.writeFloat(strength); - - buffer.writeBoolean(rMask); - buffer.writeBoolean(gMask); - buffer.writeBoolean(bMask); - - buffer.writeInt(stages.size()); - for (CompoundNBT stage : stages) { - buffer.writeCompoundTag(stage); - } - } - - @Override - protected void readSettings(PacketBuffer buffer) { - radius = buffer.readFloat(); - - feather = buffer.readFloat(); - density = buffer.readFloat(); - fade = buffer.readFloat(); - blend = buffer.readBoolean(); - - surface = buffer.readBoolean(); - field = buffer.readBoolean(); - strength = buffer.readFloat(); - - rMask = buffer.readBoolean(); - gMask = buffer.readBoolean(); - bMask = buffer.readBoolean(); - - int count = buffer.readInt(); - stages = new Vector<>(FilterStep.MAX_STEPS); - - for (int i = 0; i < count; i++) { - stages.add(buffer.readCompoundTag()); - } - } - - @Override - protected void applySettings(ChromaticProjectorTileEntity tile) { - tile.stages = stages.stream() - .map(FilterStep::new) - .collect(Collectors.toCollection(Vector::new)); - - tile.radius = radius; - - tile.feather = feather; - tile.density = density; - tile.fade = fade; - tile.blend = blend; - - tile.surface = surface; - tile.field = field; - tile.strength = strength; - - tile.rMask = rMask; - tile.gMask = gMask; - tile.bMask = bMask; - - tile.sendData(); - } -} diff --git a/src/main/java/com/simibubi/create/content/curiosities/projector/FilterStep.java b/src/main/java/com/simibubi/create/content/curiosities/projector/FilterStep.java deleted file mode 100644 index 5e745b8af..000000000 --- a/src/main/java/com/simibubi/create/content/curiosities/projector/FilterStep.java +++ /dev/null @@ -1,85 +0,0 @@ -package com.simibubi.create.content.curiosities.projector; - -import java.util.Iterator; -import java.util.Vector; - -import com.simibubi.create.foundation.render.effects.ColorMatrices; - -import net.minecraft.nbt.CompoundNBT; -import net.minecraft.nbt.ListNBT; -import net.minecraft.util.math.vector.Matrix4f; - -public class FilterStep { - - public static final int MAX_STEPS = 6; - ColorEffect filter; - int value; - - public FilterStep(ColorEffect filter) { - this.filter = filter; - } - - public FilterStep(ColorEffect filter, int value) { - this.filter = filter; - this.value = value; - } - - public FilterStep(CompoundNBT nbt) { - this.filter = ColorEffect.lookup.get(nbt.getString("id")); - this.value = nbt.getInt("value"); - } - - public Matrix4f createFilter() { - return filter.filter.create(value / filter.divisor); - } - - public CompoundNBT write() { - CompoundNBT nbt = new CompoundNBT(); - - nbt.putString("id", filter.name); - nbt.putInt("value", value); - - return nbt; - } - - public static Vector readAll(ListNBT list) { - Vector steps = new Vector<>(MAX_STEPS); - - for (int i = 0; i < list.size(); i++) { - steps.add(new FilterStep(list.getCompound(i))); - } - - return steps; - } - - public static ListNBT writeAll(Vector filters) { - ListNBT out = new ListNBT(); - - for (FilterStep filter : filters) { - out.add(filter.write()); - } - - return out; - } - - public static Matrix4f fold(Vector filters) { - Iterator stepIterator = filters.stream().filter(it -> it != null && it.filter != ColorEffect.END).iterator(); - - if (stepIterator.hasNext()) { - Matrix4f accum = stepIterator.next().createFilter(); - - stepIterator.forEachRemaining(filterStep -> accum.multiply(filterStep.createFilter())); - - return accum; - } - - return ColorMatrices.identity(); - } - - public static Vector createDefault() { - Vector instructions = new Vector<>(MAX_STEPS); - instructions.add(new FilterStep(ColorEffect.SEPIA, 100)); - instructions.add(new FilterStep(ColorEffect.END)); - return instructions; - } -} diff --git a/src/main/java/com/simibubi/create/foundation/mixin/HeavyBootsOnEntityMixin.java b/src/main/java/com/simibubi/create/foundation/mixin/HeavyBootsOnEntityMixin.java deleted file mode 100644 index d295d6fa4..000000000 --- a/src/main/java/com/simibubi/create/foundation/mixin/HeavyBootsOnEntityMixin.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.simibubi.create.foundation.mixin; - -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; - -import net.minecraft.entity.Entity; -import net.minecraft.nbt.CompoundNBT; -import net.minecraftforge.common.capabilities.CapabilityProvider; - -@Mixin(Entity.class) -public abstract class HeavyBootsOnEntityMixin extends CapabilityProvider { - - protected HeavyBootsOnEntityMixin(Class baseClass) { - super(baseClass); - } - - @Shadow - public abstract CompoundNBT getPersistentData(); - - @Inject(at = @At("HEAD"), method = "canSwim", cancellable = true) - public void noSwimmingWithHeavyBootsOn(CallbackInfoReturnable cir) { - CompoundNBT persistentData = getPersistentData(); - if (persistentData.contains("HeavyBoots")) - cir.setReturnValue(false); - } - -} diff --git a/src/main/java/com/simibubi/create/foundation/networking/AllPackets.java b/src/main/java/com/simibubi/create/foundation/networking/AllPackets.java index c5df8bc17..4138e6fc1 100644 --- a/src/main/java/com/simibubi/create/foundation/networking/AllPackets.java +++ b/src/main/java/com/simibubi/create/foundation/networking/AllPackets.java @@ -22,7 +22,6 @@ import com.simibubi.create.content.contraptions.components.structureMovement.tra import com.simibubi.create.content.contraptions.fluids.actors.FluidSplashPacket; import com.simibubi.create.content.contraptions.relays.advanced.sequencer.ConfigureSequencedGearshiftPacket; import com.simibubi.create.content.curiosities.bell.SoulPulseEffectPacket; -import com.simibubi.create.content.curiosities.projector.ConfigureProjectorPacket; import com.simibubi.create.content.curiosities.symmetry.SymmetryEffectPacket; import com.simibubi.create.content.curiosities.tools.BlueprintAssignCompleteRecipePacket; import com.simibubi.create.content.curiosities.tools.ExtendoGripInteractionPacket; @@ -74,7 +73,6 @@ public enum AllPackets { CONFIGURE_STOCKSWITCH(ConfigureStockswitchPacket.class, ConfigureStockswitchPacket::new, PLAY_TO_SERVER), CONFIGURE_SEQUENCER(ConfigureSequencedGearshiftPacket.class, ConfigureSequencedGearshiftPacket::new, PLAY_TO_SERVER), - CONFIGURE_PROJECTOR(ConfigureProjectorPacket.class, ConfigureProjectorPacket::new, PLAY_TO_SERVER), PLACE_SCHEMATIC(SchematicPlacePacket.class, SchematicPlacePacket::new, PLAY_TO_SERVER), UPLOAD_SCHEMATIC(SchematicUploadPacket.class, SchematicUploadPacket::new, PLAY_TO_SERVER), CLEAR_CONTAINER(ClearContainerPacket.class, ClearContainerPacket::new, PLAY_TO_SERVER), diff --git a/src/main/java/com/simibubi/create/foundation/render/CreateContexts.java b/src/main/java/com/simibubi/create/foundation/render/CreateContexts.java index c472dc157..60ab31a97 100644 --- a/src/main/java/com/simibubi/create/foundation/render/CreateContexts.java +++ b/src/main/java/com/simibubi/create/foundation/render/CreateContexts.java @@ -9,7 +9,6 @@ import com.jozufozu.flywheel.backend.loading.ModelTemplate; import com.jozufozu.flywheel.core.WorldContext; import com.jozufozu.flywheel.event.GatherContextEvent; import com.simibubi.create.content.contraptions.components.structureMovement.render.ContraptionProgram; -import com.simibubi.create.foundation.render.effects.EffectsContext; import net.minecraft.util.ResourceLocation; import net.minecraftforge.api.distmarker.Dist; @@ -19,7 +18,6 @@ import net.minecraftforge.api.distmarker.OnlyIn; public class CreateContexts { private static final ResourceLocation CONTRAPTION = new ResourceLocation("create", "context/contraption"); - public static EffectsContext EFFECTS; public static WorldContext CWORLD; public static WorldContext STRUCTURE; @@ -28,7 +26,6 @@ public class CreateContexts { SpecMetaRegistry.register(RainbowDebugStateProvider.INSTANCE); - EFFECTS = backend.register(new EffectsContext(backend)); CWORLD = backend.register(contraptionContext(backend)); STRUCTURE = backend.register(contraptionContext(backend) .withSpecStream(() -> Stream.of(AllProgramSpecs.STRUCTURE)) diff --git a/src/main/java/com/simibubi/create/foundation/render/effects/ColorMatrices.java b/src/main/java/com/simibubi/create/foundation/render/effects/ColorMatrices.java deleted file mode 100644 index 07a683d16..000000000 --- a/src/main/java/com/simibubi/create/foundation/render/effects/ColorMatrices.java +++ /dev/null @@ -1,129 +0,0 @@ -package com.simibubi.create.foundation.render.effects; - -import com.simibubi.create.foundation.utility.AngleHelper; - -import net.minecraft.util.math.MathHelper; -import net.minecraft.util.math.vector.Matrix4f; - -public class ColorMatrices { - - public static final float lumaR = 0.3086f; - public static final float lumaG = 0.6094f; - public static final float lumaB = 0.0820f; - - public static Matrix4f invert() { - Matrix4f invert = new Matrix4f(); - invert.a00 = -1.0F; - invert.a11 = -1.0F; - invert.a22 = -1.0F; - invert.a33 = -1.0F; - invert.a30 = 1; - invert.a31 = 1; - invert.a32 = 1; - - return invert; - } - - public static Matrix4f grayscale() { - Matrix4f mat = new Matrix4f(); - - mat.a00 = mat.a01 = mat.a02 = lumaR; - mat.a10 = mat.a11 = mat.a12 = lumaG; - mat.a20 = mat.a21 = mat.a22 = lumaB; - mat.a33 = 1; - - return mat; - } - - public static Matrix4f saturate(float s) { - Matrix4f mat = new Matrix4f(); - - mat.a00 = (1.0f - s) * lumaR + s; - mat.a01 = (1.0f - s) * lumaR; - mat.a02 = (1.0f - s) * lumaR; - mat.a10 = (1.0f - s) * lumaG; - mat.a11 = (1.0f - s) * lumaG + s; - mat.a12 = (1.0f - s) * lumaG; - mat.a20 = (1.0f - s) * lumaB; - mat.a21 = (1.0f - s) * lumaB; - mat.a22 = (1.0f - s) * lumaB + s; - - mat.a33 = 1; - - return mat; - } - - public static Matrix4f sepia(float amount) { - Matrix4f mat = new Matrix4f(); - - mat.a00 = (float) (0.393 + 0.607 * (1 - amount)); - mat.a10 = (float) (0.769 - 0.769 * (1 - amount)); - mat.a20 = (float) (0.189 - 0.189 * (1 - amount)); - mat.a01 = (float) (0.349 - 0.349 * (1 - amount)); - mat.a11 = (float) (0.686 + 0.314 * (1 - amount)); - mat.a21 = (float) (0.168 - 0.168 * (1 - amount)); - mat.a02 = (float) (0.272 - 0.272 * (1 - amount)); - mat.a12 = (float) (0.534 - 0.534 * (1 - amount)); - mat.a22 = (float) (0.131 + 0.869 * (1 - amount)); - - mat.a33 = 1; - - return mat; - } - - // https://stackoverflow.com/a/8510751 - public static Matrix4f hueShift(float rot) { - Matrix4f mat = new Matrix4f(); - - mat.loadIdentity(); - - float cosA = MathHelper.cos(AngleHelper.rad(rot)); - float sinA = MathHelper.sin(AngleHelper.rad(rot)); - mat.a00 = (float) (cosA + (1.0 - cosA) / 3.0); - mat.a01 = (float) (1. / 3. * (1.0 - cosA) - MathHelper.sqrt(1. / 3.) * sinA); - mat.a02 = (float) (1. / 3. * (1.0 - cosA) + MathHelper.sqrt(1. / 3.) * sinA); - mat.a10 = (float) (1. / 3. * (1.0 - cosA) + MathHelper.sqrt(1. / 3.) * sinA); - mat.a11 = (float) (cosA + 1. / 3. * (1.0 - cosA)); - mat.a12 = (float) (1. / 3. * (1.0 - cosA) - MathHelper.sqrt(1. / 3.) * sinA); - mat.a20 = (float) (1. / 3. * (1.0 - cosA) - MathHelper.sqrt(1. / 3.) * sinA); - mat.a21 = (float) (1. / 3. * (1.0 - cosA) + MathHelper.sqrt(1. / 3.) * sinA); - mat.a22 = (float) (cosA + 1. / 3. * (1.0 - cosA)); - - return mat; - } - - public static Matrix4f darken(float amount) { - Matrix4f mat = new Matrix4f(); - mat.loadIdentity(); - mat.multiply(1f - amount); - return mat; - } - - public static Matrix4f brightness(float amount) { - Matrix4f mat = new Matrix4f(); - mat.loadIdentity(); - mat.a03 = amount; - mat.a13 = amount; - mat.a23 = amount; - return mat; - } - - public static Matrix4f contrast(float amount) { - Matrix4f sub = new Matrix4f(); - sub.a00 = amount; - sub.a11 = amount; - sub.a22 = amount; - sub.a33 = 1; - sub.a30 = 0.5f - amount * 0.5f; - sub.a31 = 0.5f - amount * 0.5f; - sub.a32 = 0.5f - amount * 0.5f; - - return sub; - } - - public static Matrix4f identity() { - Matrix4f mat = new Matrix4f(); - mat.loadIdentity(); - return mat; - } -} diff --git a/src/main/java/com/simibubi/create/foundation/render/effects/EffectsContext.java b/src/main/java/com/simibubi/create/foundation/render/effects/EffectsContext.java deleted file mode 100644 index 1967b49d5..000000000 --- a/src/main/java/com/simibubi/create/foundation/render/effects/EffectsContext.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.simibubi.create.foundation.render.effects; - -import com.jozufozu.flywheel.backend.Backend; -import com.jozufozu.flywheel.backend.ShaderContext; -import com.jozufozu.flywheel.backend.gl.shader.ShaderType; -import com.jozufozu.flywheel.backend.loading.Shader; -import com.jozufozu.flywheel.core.shader.spec.ProgramSpec; -import com.simibubi.create.foundation.render.AllProgramSpecs; - -import net.minecraft.util.ResourceLocation; - -public class EffectsContext extends ShaderContext { - - public EffectsContext(Backend backend) { - super(backend); - } - - @Override - public void load() { - ProgramSpec programSpec = Backend.getInstance().getSpec(AllProgramSpecs.CHROMATIC); - - try { - programs.put(programSpec.name, new SphereFilterProgram(loadAndLink(programSpec, null))); - - Backend.log.debug("Loaded program {}", programSpec.name); - } catch (Exception e) { - Backend.log.error("Program '{}': {}", programSpec.name, e); - backend.sources.notifyError(); - } - } - - @Override - protected Shader getSource(ShaderType type, ResourceLocation name) { - Shader source = super.getSource(type, name); - source.processIncludes(); - return source; - } -} diff --git a/src/main/java/com/simibubi/create/foundation/render/effects/EffectsHandler.java b/src/main/java/com/simibubi/create/foundation/render/effects/EffectsHandler.java deleted file mode 100644 index 41ce02740..000000000 --- a/src/main/java/com/simibubi/create/foundation/render/effects/EffectsHandler.java +++ /dev/null @@ -1,151 +0,0 @@ -package com.simibubi.create.foundation.render.effects; - -import java.util.ArrayList; - -import javax.annotation.Nullable; - -import org.lwjgl.opengl.GL11; -import org.lwjgl.opengl.GL20; -import org.lwjgl.opengl.GL30; - -import com.jozufozu.flywheel.backend.Backend; -import com.jozufozu.flywheel.core.FullscreenQuad; -import com.jozufozu.flywheel.util.RenderUtil; -import com.simibubi.create.foundation.render.AllProgramSpecs; -import com.simibubi.create.foundation.render.CreateContexts; -import com.simibubi.create.foundation.utility.AnimationTickHolder; - -import net.minecraft.client.MainWindow; -import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.ActiveRenderInfo; -import net.minecraft.client.renderer.GameRenderer; -import net.minecraft.client.shader.Framebuffer; -import net.minecraft.client.shader.FramebufferConstants; -import net.minecraft.util.math.vector.Matrix4f; -import net.minecraft.util.math.vector.Vector3d; - -public class EffectsHandler { - - private static EffectsHandler instance; - - @Nullable - public static EffectsHandler getInstance() { - if (Backend.getInstance().available() && instance == null) { - instance = new EffectsHandler(Backend.getInstance()); - } - - if (!Backend.getInstance().available() && instance != null) { - instance.delete(); - instance = null; - } - - return instance; - } - - public static float getNearPlane() { - return 0.05f; - } - - public static float getFarPlane() { - return Minecraft.getInstance().gameRenderer.getFarPlaneDistance() * 4; - } - - private final Backend backend; - private final Framebuffer framebuffer; - private final ArrayList spheres; - - public EffectsHandler(Backend backend) { - this.backend = backend; - spheres = new ArrayList<>(); - - Framebuffer render = Minecraft.getInstance().getFramebuffer(); - framebuffer = new Framebuffer(render.framebufferWidth, render.framebufferHeight, false, Minecraft.IS_RUNNING_ON_MAC); - - } - - public void addSphere(FilterSphere sphere) { - this.spheres.add(sphere); - } - - public void render(Matrix4f view) { - if (spheres.size() == 0) { - return; - } - - GL20.glEnable(GL20.GL_DEPTH_TEST); - - GL20.glDepthRange(getNearPlane(), getFarPlane()); - - prepFramebufferSize(); - - Framebuffer mainBuffer = Minecraft.getInstance().getFramebuffer(); - - backend.compat.fbo.bindFramebuffer(FramebufferConstants.FRAME_BUFFER, framebuffer.framebufferObject); - GL11.glClear(GL30.GL_COLOR_BUFFER_BIT); - - SphereFilterProgram program = CreateContexts.EFFECTS.getProgram(AllProgramSpecs.CHROMATIC); - program.bind(); - - program.bindColorTexture(mainBuffer.getColorAttachment()); - program.bindDepthTexture(mainBuffer.getDepthAttachment()); - - GameRenderer gameRenderer = Minecraft.getInstance().gameRenderer; - ActiveRenderInfo activeRenderInfo = gameRenderer.getActiveRenderInfo(); - Matrix4f projection = gameRenderer.getBasicProjectionMatrix(activeRenderInfo, AnimationTickHolder.getPartialTicks(), true); - projection.a33 = 1; - projection.invert(); - program.bindInverseProjection(projection); - - Matrix4f inverseView = view.copy(); - inverseView.invert(); - program.bindInverseView(inverseView); - - Vector3d cameraPos = activeRenderInfo.getProjectedView(); - - program.setCameraPos(cameraPos.inverse()); - - for (FilterSphere sphere : spheres) { - sphere.x -= cameraPos.x; - sphere.y -= cameraPos.y; - sphere.z -= cameraPos.z; - } - - spheres.sort((o1, o2) -> { - double l1 = RenderUtil.length(o1.x, o1.y, o1.z); - double l2 = RenderUtil.length(o2.x, o2.y, o2.z); - return (int) Math.signum(l2 - l1); - }); - - program.uploadFilters(spheres); - - program.setFarPlane(getFarPlane()); - program.setNearPlane(getNearPlane()); - - FullscreenQuad.INSTANCE.get().draw(); - - program.bindColorTexture(0); - program.bindDepthTexture(0); - GL20.glActiveTexture(GL20.GL_TEXTURE0); - - program.unbind(); - spheres.clear(); - - backend.compat.fbo.bindFramebuffer(GL30.GL_READ_FRAMEBUFFER, framebuffer.framebufferObject); - backend.compat.fbo.bindFramebuffer(GL30.GL_DRAW_FRAMEBUFFER, mainBuffer.framebufferObject); - backend.compat.blit.blitFramebuffer(0, 0, mainBuffer.framebufferWidth, mainBuffer.framebufferHeight, 0, 0, mainBuffer.framebufferWidth, mainBuffer.framebufferHeight, GL30.GL_COLOR_BUFFER_BIT, GL20.GL_LINEAR); - backend.compat.fbo.bindFramebuffer(FramebufferConstants.FRAME_BUFFER, mainBuffer.framebufferObject); - } - - public void delete() { - framebuffer.deleteFramebuffer(); - } - - private void prepFramebufferSize() { - MainWindow window = Minecraft.getInstance().getWindow(); - if (framebuffer.framebufferWidth != window.getFramebufferWidth() - || framebuffer.framebufferHeight != window.getFramebufferHeight()) { - framebuffer.func_216491_a(window.getFramebufferWidth(), window.getFramebufferHeight(), - Minecraft.IS_RUNNING_ON_MAC); - } - } -} diff --git a/src/main/java/com/simibubi/create/foundation/render/effects/FilterSphere.java b/src/main/java/com/simibubi/create/foundation/render/effects/FilterSphere.java deleted file mode 100644 index 6c9546aef..000000000 --- a/src/main/java/com/simibubi/create/foundation/render/effects/FilterSphere.java +++ /dev/null @@ -1,54 +0,0 @@ -package com.simibubi.create.foundation.render.effects; - -import com.jozufozu.flywheel.backend.gl.buffer.MappedBuffer; -import com.jozufozu.flywheel.util.RenderUtil; - -import net.minecraft.util.math.vector.Matrix4f; - -public class FilterSphere { - public float x; - public float y; - public float z; - public float radius; - - public float feather; - public float fade; - public float density = 2; - public boolean blend = false; - - public boolean surface = true; - public boolean field = true; - public float strength = 1; - - public boolean rMask; - public boolean gMask; - public boolean bMask; - - public Matrix4f filter; - - public void write(MappedBuffer buf) { - buf.putFloatArray(new float[]{ - x, - y, - z, - radius, - - feather, - fade, - density, - blend ? 1 : 0, - - surface ? 1 : 0, - field ? 1 : 0, - Math.abs(strength), - strength < 0 ? 1 : 0, - - rMask ? 1 : 0, - gMask ? 1 : 0, - bMask ? 1 : 0, - 0, // padding - }); - - buf.putFloatArray(RenderUtil.writeMatrix(filter)); - } -} diff --git a/src/main/java/com/simibubi/create/foundation/render/effects/SphereFilterProgram.java b/src/main/java/com/simibubi/create/foundation/render/effects/SphereFilterProgram.java deleted file mode 100644 index 3b69fa5db..000000000 --- a/src/main/java/com/simibubi/create/foundation/render/effects/SphereFilterProgram.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.simibubi.create.foundation.render.effects; - -import java.util.ArrayList; - -import org.lwjgl.opengl.GL20; -import org.lwjgl.opengl.GL31; - -import com.jozufozu.flywheel.backend.gl.buffer.GlBuffer; -import com.jozufozu.flywheel.backend.gl.buffer.GlBufferType; -import com.jozufozu.flywheel.backend.gl.buffer.MappedBuffer; -import com.jozufozu.flywheel.backend.gl.shader.GlProgram; -import com.jozufozu.flywheel.backend.loading.Program; -import com.jozufozu.flywheel.core.shader.IMultiProgram; - -import net.minecraft.util.math.vector.Matrix4f; -import net.minecraft.util.math.vector.Vector3d; - -public class SphereFilterProgram extends GlProgram implements IMultiProgram { - - protected static final int UBO_BINDING = 4; - - protected static final int SPHERE_FILTER_SIZE = 24 * 4; // - protected static final int MAX_FILTERS = 256; // arbitrary - - protected static final int EXTRA_INFO = 16; // array length: int + padding - protected static final int ALL_FILTERS_SIZE = MAX_FILTERS * SPHERE_FILTER_SIZE; - - protected static final int BUFFER_SIZE = EXTRA_INFO + ALL_FILTERS_SIZE; - - public final GlBuffer effectsUBO; - - protected final int uniformBlock; - - protected final int uDepth; - protected final int uColor; - - protected final int uInverseProjection; - protected final int uInverseView; - - protected final int uNearPlane; - protected final int uFarPlane; - - protected final int uCameraPos; - - public SphereFilterProgram(Program program) { - super(program); - - effectsUBO = new GlBuffer(GlBufferType.UNIFORM_BUFFER); - - uniformBlock = GL31.glGetUniformBlockIndex(program.program, "Filters"); - - GL31.glUniformBlockBinding(program.program, uniformBlock, UBO_BINDING); - - effectsUBO.bind(); - effectsUBO.alloc(BUFFER_SIZE); - GL31.glBindBufferBase(effectsUBO.getBufferTarget().glEnum, UBO_BINDING, effectsUBO.handle()); - effectsUBO.unbind(); - - uInverseProjection = getUniformLocation("uInverseProjection"); - uInverseView = getUniformLocation("uInverseView"); - uNearPlane = getUniformLocation("uNearPlane"); - uFarPlane = getUniformLocation("uFarPlane"); - uCameraPos = getUniformLocation("uCameraPos"); - - bind(); - uDepth = setSamplerBinding("uDepth", 8); - uColor = setSamplerBinding("uColor", 9); - unbind(); - } - - public void setNearPlane(float nearPlane) { - GL20.glUniform1f(uNearPlane, nearPlane); - } - - public void setFarPlane(float farPlane) { - GL20.glUniform1f(uFarPlane, farPlane); - } - - public void setCameraPos(Vector3d pos) { - GL20.glUniform3f(uCameraPos, (float) pos.x, (float) pos.y, (float) pos.z); - } - - public void uploadFilters(ArrayList filters) { - effectsUBO.bind(); - MappedBuffer buffer = effectsUBO.getBuffer(0, BUFFER_SIZE) - .putInt(filters.size()) - .position(16); - - filters.forEach(it -> it.write(buffer)); - - buffer.flush(); - - effectsUBO.unbind(); - } - - public void bindInverseProjection(Matrix4f mat) { - uploadMatrixUniform(uInverseProjection, mat); - } - - public void bindInverseView(Matrix4f mat) { - uploadMatrixUniform(uInverseView, mat); - } - - public void bindDepthTexture(int textureObject) { - GL20.glActiveTexture(GL20.GL_TEXTURE8); - GL20.glBindTexture(GL20.GL_TEXTURE_2D, textureObject); - } - - public void bindColorTexture(int textureObject) { - GL20.glActiveTexture(GL20.GL_TEXTURE9); - GL20.glBindTexture(GL20.GL_TEXTURE_2D, textureObject); - } - - @Override - public SphereFilterProgram get() { - return this; - } -} diff --git a/src/main/resources/assets/create/flywheel/programs/chromatic.json b/src/main/resources/assets/create/flywheel/programs/chromatic.json deleted file mode 100644 index f521eefa6..000000000 --- a/src/main/resources/assets/create/flywheel/programs/chromatic.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "vert": "create:area_effect.vert", - "frag": "create:area_effect.frag" -} diff --git a/src/main/resources/assets/create/flywheel/shaders/area_effect.frag b/src/main/resources/assets/create/flywheel/shaders/area_effect.frag deleted file mode 100644 index 6c34704ce..000000000 --- a/src/main/resources/assets/create/flywheel/shaders/area_effect.frag +++ /dev/null @@ -1,167 +0,0 @@ -#version 140 - -#flwinclude <"flywheel:core/color.glsl"> - -in vec2 ScreenCoord; -in vec3 WorldDir; - -out vec4 Color; - -// constants -uniform sampler2D uDepth; -uniform sampler2D uColor; -uniform float uNearPlane = 0.15; -uniform float uFarPlane = 1.; -uniform vec3 uCameraPos; - -struct SphereFilter { - vec4 sphere;// - vec4 d1;// - vec4 strength;// - vec4 channelMask;// - mat4 colorOp; -}; - - #define N 256 -layout (std140) uniform Filters { - int uCount; - SphereFilter uSpheres[N]; -}; - -float linearizeDepth(float d, float zNear, float zFar) { - float clipZ = 2.0 * d - 1.0; - return zNear * zFar / (zFar + zNear - clipZ * (zFar - zNear)); -} - -vec3 filterColor(mat4 colorOp, vec3 color) { - // preserve alpha while transforming color - vec4 i = vec4(color, 1.); - i *= colorOp; - return i.rgb; -} - -float getDepth() { - float depth = texture2D(uDepth, ScreenCoord).r; - - return linearizeDepth(depth, uNearPlane, uFarPlane); -} - -float surfaceFilterStrength(vec3 worldPos, vec4 sphere, float feather) { - float distance = distance(sphere.xyz, worldPos); - return 1 - smoothstep(sphere.w, sphere.w + feather, distance); -} - -vec2 raySphere(vec3 worldDir, vec3 position, float radius) { - float rayLengthSqr = dot(worldDir, worldDir); - float sphereDistSqr = dot(position, position); - - const vec3 M = vec3(2., 2., 4.); - vec3 f = M * vec3(dot(-position, worldDir), vec2(rayLengthSqr)); - - vec2 s = vec2(f.x, radius); - vec2 s2 = s * s; - float c = sphereDistSqr - s2.y; - float dc = f.z * c; - - float discriminant = s2.x - dc; - float hitDepth = (-f.x - sqrt(discriminant)) / f.y; - - return vec2(discriminant, hitDepth); -} - -// if i == 0 return s -// if i == 1 return 1 - s -float invert(float s, float i) { - return i - 2*i*s + s; -} - -float bubbleFilterStrength(vec3 worldDir, float depth, vec4 sphere, float feather, float density) { - vec3 position = sphere.xyz; - - vec2 hit = raySphere(worldDir, position, sphere.w + feather); - float hitDepth = hit.y; - - float strength = 0.; - - //float boo = step(0., discriminant) * step(0., hitDepth) * step(0., depth - hitDepth); - if (hit.x > 0 && hitDepth > 0 && hitDepth < depth) { - vec3 hitPos = worldDir * hitDepth; - - vec3 normal = normalize(hitPos - position); - float normalDot = dot(normal, normalize(worldDir)); - // blend into the effect based on the distance between the fragcoord and point on the sphere - // this avoinds having hard edges - strength += mix(0., normalDot * normalDot * density, clamp(depth - hitDepth, 0., feather + 1.)); - } - - return clamp(strength, 0., 1.);// * boo; -} - -float filterStrength(vec3 worldDir, float depth, inout SphereFilter f) { - vec4 sphere = f.sphere; - vec4 data = f.d1; - float feather = data.x; - - float strength; - // transition effect - float transitionRadius = sphere.w + feather; - strength = 1. - smoothstep(transitionRadius, transitionRadius + max(0.5, data.y), length(sphere.xyz)); - // bubble effect - strength = max(strength, bubbleFilterStrength(worldDir, depth, sphere, feather, data.z)); - - strength *= f.strength.y; - // surface effect - strength = max(strength, surfaceFilterStrength(worldDir * depth, sphere, feather) * f.strength.x); - - return strength * f.strength.z; -} - -vec3 applyFilters(vec3 worldDir, float depth, vec3 diffuse) { - vec3 worldPos = worldDir * depth; - - vec3 accum = vec3(diffuse); - - for (int i = 0; i < uCount; i++) { - SphereFilter s = uSpheres[i]; - - float strength = filterStrength(worldDir, depth, s); - - strength = invert(strength, s.strength.w); - - if (strength > 0) { - const float fcon = 0.; - - vec3 baseColor = mix(diffuse, accum, s.d1.w); - - vec3 filtered = filterColor(s.colorOp, baseColor); - - // vec3 baseHsv = rgb2hsv(baseColor); - // vec3 maskHsv = rgb2hsv(s.colorMask.rgb); - // float diff = dot(abs(baseHsv - maskHsv), vec3(1., 1.1, 0.1)); - // float colorMask = step(s.colorMask.w, diff); - float mixing = clamp(strength, 0., 1.); - - accum = mix(accum, filtered, mixing * s.channelMask.xyz); - //accum = vec3(colorMask); - } - } - - return accum; -} - -vec4 debugGrid(vec3 worldPos, vec4 diffuse) { - vec3 fractionalCoords = fract(worldPos - uCameraPos); - - vec3 isBonudary = step(15./16., fractionalCoords); - - return vec4(mix(diffuse.rgb, fractionalCoords, isBonudary), 1.); -} - -void main() { - float depth = getDepth(); - - vec4 diffuse = texture2D(uColor, ScreenCoord); - - Color = vec4(applyFilters(WorldDir, depth, diffuse.rgb), diffuse.a); - //Color = debugGrid(WorldDir * depth, Color); -} diff --git a/src/main/resources/assets/create/flywheel/shaders/area_effect.vert b/src/main/resources/assets/create/flywheel/shaders/area_effect.vert deleted file mode 100644 index 0a0d8443a..000000000 --- a/src/main/resources/assets/create/flywheel/shaders/area_effect.vert +++ /dev/null @@ -1,29 +0,0 @@ -#version 140 - -// scaling constants -// e - 0.99, this works well, no idea why -#define SXY 1.7282818 -// 1.90 -> highp close, mediump far -// 1.91 -> mediump close, highp far -#define SZ 1.905 - -in vec4 aVertex;// - -out vec2 ScreenCoord; -out vec3 WorldDir; - -uniform mat4 uInverseProjection; -uniform mat4 uInverseView; - -void main() { - gl_Position = vec4(aVertex.xy, 0., 1.); - ScreenCoord = aVertex.zw; - - vec4 clip = vec4(aVertex.xy, 0., 1.); - - clip *= uInverseProjection; - - vec3 cameraDir = clip.xyz / clip.w; - cameraDir = cameraDir * vec3(SXY, SXY, SZ); - WorldDir = (uInverseView * vec4(cameraDir, 1.)).xyz; -} From f726477c8ab4c2229af044c667ea70214b2bc970 Mon Sep 17 00:00:00 2001 From: reidbhuntley Date: Sat, 10 Jul 2021 18:25:36 -0400 Subject: [PATCH 065/118] make unenchanted potato cannons actually do damage (oops) --- .../content/curiosities/weapons/PotatoProjectileEntity.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoProjectileEntity.java b/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoProjectileEntity.java index 3fa2b56d5..21a29dc2e 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoProjectileEntity.java +++ b/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoProjectileEntity.java @@ -47,7 +47,7 @@ public class PotatoProjectileEntity extends DamagingProjectileEntity implements PotatoProjectileRenderMode stuckRenderer; double stuckFallSpeed; - float additionalDamageMult = 0; + float additionalDamageMult = 1; float additionalKnockback = 0; float recoveryChance = 0; From 3f57eeacb4587cecb432eba14d6182ee48560e70 Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Sun, 11 Jul 2021 00:30:10 +0200 Subject: [PATCH 066/118] Update README.md --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 5266e021c..0cdaa9e28 100644 --- a/README.md +++ b/README.md @@ -13,10 +13,10 @@ The added elements of tech are designed to leave as many design choices to the p 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. -[](https://github.com/Creators-of-Create/Create/issues "Report Issues") -[](https://www.youtube.com/playlist?list=PLyADkcfPLU8ywCXZPaDbQ_JZJL0CGDN5Z "Watch Videos") -[](https://discord.gg/hmaD7Se "Feedback & Help") -[](https://www.patreon.com/simibubi "Support Us") +[](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 From 2821fd71354c24203576a5930cd51aa157ceff1a Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Sun, 11 Jul 2021 01:14:38 +0200 Subject: [PATCH 067/118] Lamptank - Fixed custom rendered models rendering full bright when supposed to render full dark --- gradle.properties | 2 +- src/main/java/com/simibubi/create/Create.java | 2 +- .../create/foundation/render/SuperByteBuffer.java | 9 +++++---- src/main/resources/META-INF/mods.toml | 2 +- 4 files changed, 8 insertions(+), 7 deletions(-) diff --git a/gradle.properties b/gradle.properties index aef31b40e..b569369be 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,7 +4,7 @@ org.gradle.jvmargs = -Xmx3G org.gradle.daemon = false # mod version info -mod_version = 0.3.2 +mod_version = 0.3.2a minecraft_version = 1.16.5 forge_version = 36.1.32 diff --git a/src/main/java/com/simibubi/create/Create.java b/src/main/java/com/simibubi/create/Create.java index db1a509fe..4fe1ec34f 100644 --- a/src/main/java/com/simibubi/create/Create.java +++ b/src/main/java/com/simibubi/create/Create.java @@ -56,7 +56,7 @@ public class Create { public static final String ID = "create"; public static final String NAME = "Create"; - public static final String VERSION = "0.3.2"; + public static final String VERSION = "0.3.2a"; public static final Logger LOGGER = LogManager.getLogger(); diff --git a/src/main/java/com/simibubi/create/foundation/render/SuperByteBuffer.java b/src/main/java/com/simibubi/create/foundation/render/SuperByteBuffer.java index acca05bf6..06300b735 100644 --- a/src/main/java/com/simibubi/create/foundation/render/SuperByteBuffer.java +++ b/src/main/java/com/simibubi/create/foundation/render/SuperByteBuffer.java @@ -49,6 +49,7 @@ public class SuperByteBuffer { // Vertex Lighting private boolean useWorldLight; private boolean hybridLight; + private boolean useCustomLightCoords; private int packedLightCoords; private Matrix4f lightTransform; @@ -100,7 +101,6 @@ public class SuperByteBuffer { WORLD_LIGHT_CACHE.clear(); } - boolean hasDefaultLight = packedLightCoords != 0; float f = .5f; int vertexCount = template.getVertexCount(); for (int i = 0; i < vertexCount; i++) { @@ -177,10 +177,9 @@ public class SuperByteBuffer { } light = getLight(Minecraft.getInstance().world, lightPos); - if (hasDefaultLight) { + if (useCustomLightCoords) light = maxLight(light, packedLightCoords); - } - } else if (hasDefaultLight) { + } else if (useCustomLightCoords) { light = packedLightCoords; } else { light = template.getLight(i); @@ -213,6 +212,7 @@ public class SuperByteBuffer { hasOverlay = false; overlay = OverlayTexture.DEFAULT_UV; useWorldLight = false; + useCustomLightCoords = false; hybridLight = false; packedLightCoords = 0; lightTransform = null; @@ -368,6 +368,7 @@ public class SuperByteBuffer { } public SuperByteBuffer light(int packedLightCoords) { + useCustomLightCoords = true; this.packedLightCoords = packedLightCoords; return this; } diff --git a/src/main/resources/META-INF/mods.toml b/src/main/resources/META-INF/mods.toml index 93a452376..76afcc02d 100644 --- a/src/main/resources/META-INF/mods.toml +++ b/src/main/resources/META-INF/mods.toml @@ -5,7 +5,7 @@ license="MIT" [[mods]] modId="create" -version="v0.3.2 for 1.16.5" +version="v0.3.2a for 1.16.5" displayName="Create" #updateJSONURL="" displayURL="https://www.curseforge.com/minecraft/mc-mods/create" From 4a57b916ffa45d4193b7b41a5ea89e0ddf1a66de Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Sun, 11 Jul 2021 01:28:28 +0200 Subject: [PATCH 068/118] Top ten hotswap engineering oversights - Fixed reversed frequency display of Redstone Links --- .../logistics/block/redstone/RedstoneLinkFrequencySlot.java | 4 ++-- .../foundation/tileEntity/behaviour/linked/LinkRenderer.java | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/simibubi/create/content/logistics/block/redstone/RedstoneLinkFrequencySlot.java b/src/main/java/com/simibubi/create/content/logistics/block/redstone/RedstoneLinkFrequencySlot.java index a2c8785d3..0853bc8a8 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/redstone/RedstoneLinkFrequencySlot.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/redstone/RedstoneLinkFrequencySlot.java @@ -28,12 +28,12 @@ public class RedstoneLinkFrequencySlot extends ValueBoxTransform.Dual { if (facing.getAxis() .isHorizontal()) { location = horizontal; - if (!isFirst()) + if (isFirst()) location = location.add(0, 5 / 16f, 0); return rotateHorizontally(state, location); } - if (!isFirst()) + if (isFirst()) location = location.add(0, 0, 5 / 16f); location = VecHelper.rotateCentered(location, facing == Direction.DOWN ? 180 : 0, Axis.X); return location; diff --git a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/linked/LinkRenderer.java b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/linked/LinkRenderer.java index 8e7d31245..6386ff9fe 100644 --- a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/linked/LinkRenderer.java +++ b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/linked/LinkRenderer.java @@ -44,7 +44,7 @@ public class LinkRenderer { for (boolean first : Iterate.trueAndFalse) { AxisAlignedBB bb = new AxisAlignedBB(Vector3d.ZERO, Vector3d.ZERO).grow(.25f); - ITextComponent label = first ? freq2 : freq1; + ITextComponent label = first ? freq1 : freq2; boolean hit = behaviour.testHit(first, target.getHitVec()); ValueBoxTransform transform = first ? behaviour.firstSlot : behaviour.secondSlot; From da9c306ed550ef184ee22a1ba981bbd60d111c25 Mon Sep 17 00:00:00 2001 From: reidbhuntley Date: Sat, 10 Jul 2021 21:52:11 -0400 Subject: [PATCH 069/118] Lectern Controller edge cases - When a Lectern Controller that a player is using is broken, they are no longer prevented from using any other Lectern Controllers - Fixed weirdness when activating a Lectern Controller while holding another Linked Controller --- .../item/LecternControllerTileEntity.java | 4 ++++ .../item/LinkedControllerClientHandler.java | 8 ++++++++ .../logistics/item/LinkedControllerItem.java | 3 +++ .../item/LinkedControllerItemRenderer.java | 15 +++++++++------ 4 files changed, 24 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/simibubi/create/content/logistics/item/LecternControllerTileEntity.java b/src/main/java/com/simibubi/create/content/logistics/item/LecternControllerTileEntity.java index 029a6688e..a68122cee 100644 --- a/src/main/java/com/simibubi/create/content/logistics/item/LecternControllerTileEntity.java +++ b/src/main/java/com/simibubi/create/content/logistics/item/LecternControllerTileEntity.java @@ -156,6 +156,10 @@ public class LecternControllerTileEntity extends SmartTileEntity { } public void dropController(BlockState state) { + Entity playerEntity = ((ServerWorld) world).getEntityByUuid(user); + if (playerEntity instanceof PlayerEntity) + stopUsing((PlayerEntity) playerEntity); + Direction dir = state.get(LecternControllerBlock.FACING); double x = pos.getX() + 0.5 + 0.25*dir.getXOffset(); double y = pos.getY() + 1; diff --git a/src/main/java/com/simibubi/create/content/logistics/item/LinkedControllerClientHandler.java b/src/main/java/com/simibubi/create/content/logistics/item/LinkedControllerClientHandler.java index daf63ded0..9dfaf30c1 100644 --- a/src/main/java/com/simibubi/create/content/logistics/item/LinkedControllerClientHandler.java +++ b/src/main/java/com/simibubi/create/content/logistics/item/LinkedControllerClientHandler.java @@ -9,6 +9,7 @@ import java.util.Vector; import org.lwjgl.glfw.GLFW; import com.mojang.blaze3d.matrix.MatrixStack; +import com.simibubi.create.AllBlocks; import com.simibubi.create.AllItems; import com.simibubi.create.AllSoundEvents; import com.simibubi.create.CreateClient; @@ -147,6 +148,13 @@ public class LinkedControllerClientHandler { } } + if (inLectern() && AllBlocks.LECTERN_CONTROLLER.get().getTileEntityOptional(mc.world, lecternPos) + .map(te -> !te.isUsedBy(mc.player)) + .orElse(true)) { + deactivateInLectern(); + return; + } + if (mc.currentScreen != null) { MODE = Mode.IDLE; onReset(); diff --git a/src/main/java/com/simibubi/create/content/logistics/item/LinkedControllerItem.java b/src/main/java/com/simibubi/create/content/logistics/item/LinkedControllerItem.java index 6403ccfa0..cfdf4be85 100644 --- a/src/main/java/com/simibubi/create/content/logistics/item/LinkedControllerItem.java +++ b/src/main/java/com/simibubi/create/content/logistics/item/LinkedControllerItem.java @@ -70,6 +70,9 @@ public class LinkedControllerItem extends Item implements INamedContainerProvide } return ActionResultType.SUCCESS; } + + if (AllBlocks.LECTERN_CONTROLLER.has(hitState)) + return ActionResultType.PASS; } } diff --git a/src/main/java/com/simibubi/create/content/logistics/item/LinkedControllerItemRenderer.java b/src/main/java/com/simibubi/create/content/logistics/item/LinkedControllerItemRenderer.java index 000bb8273..26bc5bad5 100644 --- a/src/main/java/com/simibubi/create/content/logistics/item/LinkedControllerItemRenderer.java +++ b/src/main/java/com/simibubi/create/content/logistics/item/LinkedControllerItemRenderer.java @@ -79,11 +79,6 @@ public class LinkedControllerItemRenderer extends CustomRenderedItemModelRendere boolean noControllerInMain = !AllItems.LINKED_CONTROLLER.isIn(mc.player.getHeldItemMainhand()); if (transformType == mainHand || (transformType == offHand && noControllerInMain)) { - float equip = equipProgress.getValue(pt); - int handModifier = transformType == TransformType.FIRST_PERSON_LEFT_HAND ? -1 : 1; - msr.translate(0, equip / 4, equip / 4 * handModifier); - msr.rotateY(equip * -30 * handModifier); - msr.rotateZ(equip * -30); active = true; } @@ -94,8 +89,16 @@ public class LinkedControllerItemRenderer extends CustomRenderedItemModelRendere active = true; } - active &= LinkedControllerClientHandler.MODE != Mode.IDLE; + active &= LinkedControllerClientHandler.MODE != Mode.IDLE && !LinkedControllerClientHandler.inLectern(); usedByMe = active; + + if (active && (transformType == mainHand || transformType == offHand)) { + float equip = equipProgress.getValue(pt); + int handModifier = transformType == TransformType.FIRST_PERSON_LEFT_HAND ? -1 : 1; + msr.translate(0, equip / 4, equip / 4 * handModifier); + msr.rotateY(equip * -30 * handModifier); + msr.rotateZ(equip * -30); + } } renderer.render(active ? model.getPartial("powered") : model.getOriginalModel(), light); From 3ab3bffac300b4e9eb9f8dcb7bc60e914c5076ca Mon Sep 17 00:00:00 2001 From: reidbhuntley Date: Sat, 10 Jul 2021 23:30:27 -0400 Subject: [PATCH 070/118] Bump StressConfigDefaults version number - Should fix Mechanical Arm stress usage staying at the old value in worlds created in previous Create versions --- .../simibubi/create/foundation/config/StressConfigDefaults.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/simibubi/create/foundation/config/StressConfigDefaults.java b/src/main/java/com/simibubi/create/foundation/config/StressConfigDefaults.java index 682fc14cc..c93103f82 100644 --- a/src/main/java/com/simibubi/create/foundation/config/StressConfigDefaults.java +++ b/src/main/java/com/simibubi/create/foundation/config/StressConfigDefaults.java @@ -17,7 +17,7 @@ public class StressConfigDefaults { * Worlds from the previous version will overwrite potentially changed values * with the new defaults. */ - public static final int forcedUpdateVersion = 1; + public static final int forcedUpdateVersion = 2; static Map registeredDefaultImpacts = new HashMap<>(); static Map registeredDefaultCapacities = new HashMap<>(); From e3386c178a371097e373a2ee2c594190a7369001 Mon Sep 17 00:00:00 2001 From: PepperBell <44146161+PepperCode1@users.noreply.github.com> Date: Sat, 10 Jul 2021 22:39:42 -0700 Subject: [PATCH 071/118] Minor SBB clean up - Allow custom light from dual (utility) light method to be applied - Reorganize and rename some members --- .../foundation/render/SuperByteBuffer.java | 32 +++++++++---------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/src/main/java/com/simibubi/create/foundation/render/SuperByteBuffer.java b/src/main/java/com/simibubi/create/foundation/render/SuperByteBuffer.java index 06300b735..b2da5f4bf 100644 --- a/src/main/java/com/simibubi/create/foundation/render/SuperByteBuffer.java +++ b/src/main/java/com/simibubi/create/foundation/render/SuperByteBuffer.java @@ -48,10 +48,10 @@ public class SuperByteBuffer { // Vertex Lighting private boolean useWorldLight; - private boolean hybridLight; - private boolean useCustomLightCoords; - private int packedLightCoords; private Matrix4f lightTransform; + private boolean hasCustomLight; + private int packedLightCoords; + private boolean hybridLight; // Vertex Normals private boolean fullNormalTransform; @@ -177,9 +177,10 @@ public class SuperByteBuffer { } light = getLight(Minecraft.getInstance().world, lightPos); - if (useCustomLightCoords) + if (hasCustomLight) { light = maxLight(light, packedLightCoords); - } else if (useCustomLightCoords) { + } + } else if (hasCustomLight) { light = packedLightCoords; } else { light = template.getLight(i); @@ -212,10 +213,10 @@ public class SuperByteBuffer { hasOverlay = false; overlay = OverlayTexture.DEFAULT_UV; useWorldLight = false; - useCustomLightCoords = false; - hybridLight = false; - packedLightCoords = 0; lightTransform = null; + hasCustomLight = false; + packedLightCoords = 0; + hybridLight = false; fullNormalTransform = false; return this; } @@ -368,15 +369,14 @@ public class SuperByteBuffer { } public SuperByteBuffer light(int packedLightCoords) { - useCustomLightCoords = true; + hasCustomLight = true; this.packedLightCoords = packedLightCoords; return this; } public SuperByteBuffer light(Matrix4f lightTransform, int packedLightCoords) { - useWorldLight = true; - this.lightTransform = lightTransform; - this.packedLightCoords = packedLightCoords; + light(lightTransform); + light(packedLightCoords); return this; } @@ -404,6 +404,10 @@ public class SuperByteBuffer { return this; } + public boolean isEmpty() { + return template.isEmpty(); + } + public static int transformColor(byte component, float scale) { return MathHelper.clamp((int) (Byte.toUnsignedInt(component) * scale), 0, 255); } @@ -425,10 +429,6 @@ public class SuperByteBuffer { return WORLD_LIGHT_CACHE.computeIfAbsent(pos.toLong(), $ -> WorldRenderer.getLightmapCoordinates(world, pos)); } - public boolean isEmpty() { - return template.isEmpty(); - } - @FunctionalInterface public interface SpriteShiftFunc { void shift(IVertexBuilder builder, float u, float v); From 4306d076dbed08c0c32a3804acfd4ca7b62816dc Mon Sep 17 00:00:00 2001 From: zelophed Date: Sun, 11 Jul 2021 21:09:23 +0200 Subject: [PATCH 072/118] slow and steady - add create's panorama as a background for config ui when opened from the main menu - fix panoramas moving at a inconsistent speed - add a optional speed limit to physical floats --- .../foundation/config/ui/ConfigScreen.java | 35 +++++++++++++++++-- .../config/ui/entries/EnumEntry.java | 20 ++++++----- .../gui/mainMenu/CreateMainMenuScreen.java | 11 +++--- .../utility/animation/PhysicalFloat.java | 10 ++++++ 4 files changed, 61 insertions(+), 15 deletions(-) diff --git a/src/main/java/com/simibubi/create/foundation/config/ui/ConfigScreen.java b/src/main/java/com/simibubi/create/foundation/config/ui/ConfigScreen.java index bf56960eb..475ac2db8 100644 --- a/src/main/java/com/simibubi/create/foundation/config/ui/ConfigScreen.java +++ b/src/main/java/com/simibubi/create/foundation/config/ui/ConfigScreen.java @@ -8,6 +8,7 @@ import java.util.stream.Collectors; import javax.annotation.Nonnull; import org.apache.commons.lang3.StringUtils; +import org.apache.logging.log4j.util.TriConsumer; import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL20; import org.lwjgl.opengl.GL30; @@ -15,12 +16,15 @@ import org.lwjgl.opengl.GL30; import com.jozufozu.flywheel.backend.Backend; import com.jozufozu.flywheel.backend.gl.versioned.GlCompat; import com.mojang.blaze3d.matrix.MatrixStack; +import com.mojang.blaze3d.platform.GlStateManager; +import com.mojang.blaze3d.systems.RenderSystem; import com.simibubi.create.AllBlocks; import com.simibubi.create.content.contraptions.relays.elementary.CogWheelBlock; import com.simibubi.create.foundation.gui.AbstractSimiScreen; import com.simibubi.create.foundation.gui.GuiGameElement; import com.simibubi.create.foundation.gui.StencilElement; import com.simibubi.create.foundation.gui.UIRenderHelper; +import com.simibubi.create.foundation.gui.mainMenu.CreateMainMenuScreen; import com.simibubi.create.foundation.utility.animation.Force; import com.simibubi.create.foundation.utility.animation.PhysicalFloat; @@ -47,7 +51,8 @@ public abstract class ConfigScreen extends AbstractSimiScreen { * * */ - public static final PhysicalFloat cogSpin = PhysicalFloat.create().withDrag(0.3).addForce(new Force.Static(.2f)); + public static final Map> backgrounds = new HashMap<>(); + public static final PhysicalFloat cogSpin = PhysicalFloat.create().withLimit(10f).withDrag(0.3).addForce(new Force.Static(.2f)); public static final BlockState cogwheelState = AllBlocks.LARGE_COGWHEEL.getDefaultState().with(CogWheelBlock.AXIS, Direction.Axis.Y); public static final Map changes = new HashMap<>(); public static String modID = null; @@ -71,9 +76,11 @@ public abstract class ConfigScreen extends AbstractSimiScreen { @Override protected void renderWindowBackground(MatrixStack ms, int mouseX, int mouseY, float partialTicks) { if (this.client != null && this.client.world != null) { + //in game fill(ms, 0, 0, this.width, this.height, 0xb0_282c34); } else { - fill(ms, 0, 0, this.width, this.height, 0xff_282c34); + //in menus + renderMenuBackground(ms, partialTicks); } new StencilElement() { @@ -144,6 +151,30 @@ public abstract class ConfigScreen extends AbstractSimiScreen { return s; } + /** + * By default ConfigScreens will render the Create Panorama as + * their background when opened from the Main- or ModList-Menu. + * If your addon wants to render something else, please add to the + * backgrounds Map in this Class with your modID as the key. + */ + protected void renderMenuBackground(MatrixStack ms, float partialTicks) { + TriConsumer customBackground = backgrounds.get(modID); + if (customBackground != null) { + customBackground.accept(this, ms, partialTicks); + return; + } + + float elapsedPartials = client.getTickLength(); + CreateMainMenuScreen.panorama.render(elapsedPartials, 1); + + client.getTextureManager().bindTexture(CreateMainMenuScreen.PANORAMA_OVERLAY_TEXTURES); + RenderSystem.enableBlend(); + RenderSystem.blendFunc(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA); + drawTexture(ms, 0, 0, this.width, this.height, 0.0F, 0.0F, 16, 128, 16, 128); + + fill(ms, 0, 0, this.width, this.height, 0x90_282c34); + } + protected void renderCog(MatrixStack ms, float partialTicks) { ms.push(); diff --git a/src/main/java/com/simibubi/create/foundation/config/ui/entries/EnumEntry.java b/src/main/java/com/simibubi/create/foundation/config/ui/entries/EnumEntry.java index 3d7590762..da4f56137 100644 --- a/src/main/java/com/simibubi/create/foundation/config/ui/entries/EnumEntry.java +++ b/src/main/java/com/simibubi/create/foundation/config/ui/entries/EnumEntry.java @@ -30,13 +30,17 @@ public class EnumEntry extends ValueEntry> { height, width, Theme.p(Theme.Key.TEXT))); DelegatedStencilElement l = AllIcons.I_CONFIG_PREV.asStencil(); - cycleLeft = new BoxWidget(0, 0, cycleWidth + 8, 16).showingElement(l) - .withCallback(() -> cycleValue(-1)); + cycleLeft = new BoxWidget(0, 0, cycleWidth + 8, 16) + .withCustomBackground(Theme.c(Theme.Key.PONDER_BACKGROUND_FLAT)) + .showingElement(l) + .withCallback(() -> cycleValue(-1)); l.withElementRenderer(BoxWidget.gradientFactory.apply(cycleLeft)); DelegatedStencilElement r = AllIcons.I_CONFIG_NEXT.asStencil(); - cycleRight = new BoxWidget(0, 0, cycleWidth + 8, 16).showingElement(r) - .withCallback(() -> cycleValue(1)); + cycleRight = new BoxWidget(0, 0, cycleWidth + 8, 16) + .withCustomBackground(Theme.c(Theme.Key.PONDER_BACKGROUND_FLAT)) + .showingElement(r) + .withCallback(() -> cycleValue(1)); r.at(cycleWidth - 8, 0); r.withElementRenderer(BoxWidget.gradientFactory.apply(cycleRight)); @@ -89,10 +93,10 @@ public class EnumEntry extends ValueEntry> { cycleRight.render(ms, mouseX, mouseY, partialTicks); new BoxElement() - .withBackground(0) - .flatBorder(0) - .withBounds(10, 10) - .at(cycleLeft.x + cycleWidth + 4, cycleLeft.y + 3) + .withBackground(Theme.c(Theme.Key.PONDER_BACKGROUND_FLAT)) + .flatBorder(0x01_000000) + .withBounds(48, 6) + .at(cycleLeft.x + 22, cycleLeft.y + 5) .render(ms); } diff --git a/src/main/java/com/simibubi/create/foundation/gui/mainMenu/CreateMainMenuScreen.java b/src/main/java/com/simibubi/create/foundation/gui/mainMenu/CreateMainMenuScreen.java index 2731dfa4f..36e1ab619 100644 --- a/src/main/java/com/simibubi/create/foundation/gui/mainMenu/CreateMainMenuScreen.java +++ b/src/main/java/com/simibubi/create/foundation/gui/mainMenu/CreateMainMenuScreen.java @@ -37,12 +37,12 @@ public class CreateMainMenuScreen extends AbstractSimiScreen { protected final Screen parent; protected boolean returnOnClose; - private static final RenderSkyboxCube PANORAMA_RESOURCES = + public static final RenderSkyboxCube PANORAMA_RESOURCES = new RenderSkyboxCube(Create.asResource("textures/gui/title/background/panorama")); - private static final ResourceLocation PANORAMA_OVERLAY_TEXTURES = + public static final ResourceLocation PANORAMA_OVERLAY_TEXTURES = new ResourceLocation("textures/gui/title/background/panorama_overlay.png"); private RenderSkybox vanillaPanorama = new RenderSkybox(MainMenuScreen.PANORAMA_RESOURCES); - private RenderSkybox panorama = new RenderSkybox(PANORAMA_RESOURCES); + public static RenderSkybox panorama = new RenderSkybox(PANORAMA_RESOURCES); private long firstRenderTime; private Button gettingStarted; @@ -65,11 +65,12 @@ public class CreateMainMenuScreen extends AbstractSimiScreen { protected void renderWindow(MatrixStack ms, int mouseX, int mouseY, float partialTicks) { float f = (float) (Util.milliTime() - this.firstRenderTime) / 1000.0F; float alpha = MathHelper.clamp(f, 0.0F, 1.0F); + float elapsedPartials = client.getTickLength(); if (parent instanceof MainMenuScreen) { if (alpha < 1) - vanillaPanorama.render(partialTicks, 1); - panorama.render(partialTicks, alpha); + vanillaPanorama.render(elapsedPartials, 1); + panorama.render(elapsedPartials, alpha); client.getTextureManager() .bindTexture(PANORAMA_OVERLAY_TEXTURES); diff --git a/src/main/java/com/simibubi/create/foundation/utility/animation/PhysicalFloat.java b/src/main/java/com/simibubi/create/foundation/utility/animation/PhysicalFloat.java index d56f8e35f..26ae9a246 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/animation/PhysicalFloat.java +++ b/src/main/java/com/simibubi/create/foundation/utility/animation/PhysicalFloat.java @@ -11,6 +11,7 @@ public class PhysicalFloat { float previousSpeed; float speed; + float limit = Float.NaN; float mass; @@ -41,6 +42,11 @@ public class PhysicalFloat { return addForce(new Force.Zeroing((float) g)); } + public PhysicalFloat withLimit(float limit) { + this.limit = limit; + return this; + } + public void tick() { previousSpeed = speed; previousValue = value; @@ -53,6 +59,10 @@ public class PhysicalFloat { forces.removeIf(Force::finished); + if (Float.isFinite(limit)) { + speed = MathHelper.clamp(speed, -limit, limit); + } + value += speed; } From b70608b03040e6f97ece00f5e8ccace57c475176 Mon Sep 17 00:00:00 2001 From: reidbhuntley Date: Sun, 11 Jul 2021 21:25:00 -0400 Subject: [PATCH 073/118] Yet further finely-tuned - Fixed blocks not updating their neighbors when being assembled into a contraption - Fixed Stockpile Switch not updating its redstone output when its signal is inverted - Reduced lag caused by many active nearby soul particles - The Wither's shield is now immune to potato projectiles - Fixed potato projectile potion effect weirdness - Golden Apple potato projectiles can now cure Zombie Villagers - Potato Recovery will no longer drop Golden Apples that successfully hit an entity --- .../structureMovement/Contraption.java | 19 +++- .../bell/HauntedBellMovementBehaviour.java | 2 +- .../bell/HauntedBellTileEntity.java | 2 +- .../curiosities/bell/SoulBaseParticle.java | 2 +- .../curiosities/bell/SoulParticle.java | 2 +- .../curiosities/bell/SoulPulseEffect.java | 6 +- .../weapons/PotatoCannonProjectileTypes.java | 96 +++++++++++++------ .../weapons/PotatoProjectileEntity.java | 8 +- .../redstone/StockpileSwitchTileEntity.java | 2 +- 9 files changed, 99 insertions(+), 40 deletions(-) diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/Contraption.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/Contraption.java index 761949ae4..240096801 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/Contraption.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/Contraption.java @@ -84,6 +84,7 @@ import net.minecraft.nbt.CompoundNBT; import net.minecraft.nbt.INBT; import net.minecraft.nbt.ListNBT; import net.minecraft.nbt.NBTUtil; +import net.minecraft.network.DebugPacketSender; import net.minecraft.state.properties.BlockStateProperties; import net.minecraft.state.properties.ChestType; import net.minecraft.state.properties.PistonType; @@ -102,6 +103,7 @@ import net.minecraft.village.PointOfInterestType; import net.minecraft.world.IWorld; import net.minecraft.world.World; import net.minecraft.world.gen.feature.template.Template.BlockInfo; +import net.minecraft.world.server.ServerWorld; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.common.util.Constants.BlockFlags; @@ -949,8 +951,7 @@ public abstract class Contraption { int flags = BlockFlags.IS_MOVING | BlockFlags.NO_NEIGHBOR_DROPS | BlockFlags.UPDATE_NEIGHBORS | BlockFlags.BLOCK_UPDATE | BlockFlags.RERENDER_MAIN_THREAD; if (blockIn instanceof IWaterLoggable && oldState.contains(BlockStateProperties.WATERLOGGED) - && oldState.get(BlockStateProperties.WATERLOGGED) - .booleanValue()) { + && oldState.get(BlockStateProperties.WATERLOGGED)) { world.setBlockState(add, Blocks.WATER.getDefaultState(), flags); continue; } @@ -962,8 +963,22 @@ public abstract class Contraption { .add(offset); // if (!shouldUpdateAfterMovement(block)) // continue; + int flags = BlockFlags.IS_MOVING | BlockFlags.DEFAULT; world.notifyBlockUpdate(add, block.state, Blocks.AIR.getDefaultState(), flags); + + // when the blockstate is set to air, the block's POI data is removed, but markAndNotifyBlock tries to + // remove it again, so to prevent an error from being logged by double-removal we add the POI data back now + // (code copied from ServerWorld.onBlockStateChange) + ServerWorld serverWorld = (ServerWorld) world; + PointOfInterestType.forState(block.state).ifPresent(poiType -> { + world.getServer().execute(() -> { + serverWorld.getPointOfInterestManager().func_219135_a(add, poiType); + DebugPacketSender.func_218799_a(serverWorld, add); + }); + }); + + world.markAndNotifyBlock(add, world.getChunkAt(add), block.state, Blocks.AIR.getDefaultState(), flags, 512); block.state.updateDiagonalNeighbors(world, add, flags & -2); } } diff --git a/src/main/java/com/simibubi/create/content/curiosities/bell/HauntedBellMovementBehaviour.java b/src/main/java/com/simibubi/create/content/curiosities/bell/HauntedBellMovementBehaviour.java index 506e9ae1e..e54d29d73 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/bell/HauntedBellMovementBehaviour.java +++ b/src/main/java/com/simibubi/create/content/curiosities/bell/HauntedBellMovementBehaviour.java @@ -19,7 +19,7 @@ public class HauntedBellMovementBehaviour extends BellMovementBehaviour { @Override public void visitNewPosition(MovementContext context, BlockPos pos) { if (!context.world.isRemote && getRecharge(context) == 0) { - HauntedBellPulser.sendPulse(context.world, pos, DISTANCE, true); + HauntedBellPulser.sendPulse(context.world, pos, DISTANCE, false); setRecharge(context, HauntedBellTileEntity.RECHARGE_TICKS); playSound(context); } diff --git a/src/main/java/com/simibubi/create/content/curiosities/bell/HauntedBellTileEntity.java b/src/main/java/com/simibubi/create/content/curiosities/bell/HauntedBellTileEntity.java index 486a2445c..d55823ec0 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/bell/HauntedBellTileEntity.java +++ b/src/main/java/com/simibubi/create/content/curiosities/bell/HauntedBellTileEntity.java @@ -46,7 +46,7 @@ public class HauntedBellTileEntity extends AbstractBellTileEntity { return false; if (!world.isRemote) - HauntedBellPulser.sendPulse(world, pos, DISTANCE, true); + HauntedBellPulser.sendPulse(world, pos, DISTANCE, false); startEffect(); diff --git a/src/main/java/com/simibubi/create/content/curiosities/bell/SoulBaseParticle.java b/src/main/java/com/simibubi/create/content/curiosities/bell/SoulBaseParticle.java index 1036f0064..232c4211c 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/bell/SoulBaseParticle.java +++ b/src/main/java/com/simibubi/create/content/curiosities/bell/SoulBaseParticle.java @@ -31,7 +31,7 @@ public class SoulBaseParticle extends CustomRotationParticle { selectSpriteLoopingWithAge(animatedSprite); BlockPos pos = new BlockPos(posX, posY, posZ); - if (age++ >= maxAge || !SoulPulseEffect.canSpawnSoulAt(world, pos, false)) + if (age++ >= maxAge || !SoulPulseEffect.isDark(world, pos)) setExpired(); } diff --git a/src/main/java/com/simibubi/create/content/curiosities/bell/SoulParticle.java b/src/main/java/com/simibubi/create/content/curiosities/bell/SoulParticle.java index 5c514da9f..d2abd7336 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/bell/SoulParticle.java +++ b/src/main/java/com/simibubi/create/content/curiosities/bell/SoulParticle.java @@ -73,7 +73,7 @@ public class SoulParticle extends CustomRotationParticle { BlockPos pos = new BlockPos(posX, posY, posZ); if (animationStage == null) setExpired(); - if (!SoulPulseEffect.canSpawnSoulAt(world, pos, false)) { + if (!SoulPulseEffect.isDark(world, pos)) { isVisible = true; if (!isPerimeter) setExpired(); diff --git a/src/main/java/com/simibubi/create/content/curiosities/bell/SoulPulseEffect.java b/src/main/java/com/simibubi/create/content/curiosities/bell/SoulPulseEffect.java index a1dc8c640..a4ba9164d 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/bell/SoulPulseEffect.java +++ b/src/main/java/com/simibubi/create/content/curiosities/bell/SoulPulseEffect.java @@ -74,6 +74,10 @@ public class SoulPulseEffect { .collect(Collectors.toList()); } + public static boolean isDark(World world, BlockPos at) { + return world.getLightLevel(LightType.BLOCK, at) < 8; + } + public static boolean canSpawnSoulAt(World world, BlockPos at, boolean ignoreLight) { EntityType dummy = EntityType.ZOMBIE; double dummyWidth = 0.2, dummyHeight = 0.75; @@ -82,7 +86,7 @@ public class SoulPulseEffect { return world != null && WorldEntitySpawner .canCreatureTypeSpawnAtLocation(EntitySpawnPlacementRegistry.PlacementType.ON_GROUND, world, at, dummy) - && (ignoreLight || world.getLightLevel(LightType.BLOCK, at) < 8) + && (ignoreLight || isDark(world, at)) && world .getBlockCollisions(null, new AxisAlignedBB(at.getX() + 0.5 - w2, at.getY(), at.getZ() + 0.5 - w2, at.getX() + 0.5 + w2, diff --git a/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoCannonProjectileTypes.java b/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoCannonProjectileTypes.java index 1d462fed9..7fb0265de 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoCannonProjectileTypes.java +++ b/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoCannonProjectileTypes.java @@ -4,7 +4,6 @@ import java.util.HashMap; import java.util.Map; import java.util.Optional; import java.util.function.BiPredicate; -import java.util.function.Consumer; import java.util.function.Predicate; import com.mojang.datafixers.util.Pair; @@ -17,7 +16,9 @@ import net.minecraft.block.Blocks; import net.minecraft.entity.Entity; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.item.FallingBlockEntity; +import net.minecraft.entity.monster.ZombieVillagerEntity; import net.minecraft.entity.passive.FoxEntity; +import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.Food; import net.minecraft.item.Foods; import net.minecraft.item.Item; @@ -27,6 +28,7 @@ import net.minecraft.potion.Effect; import net.minecraft.potion.EffectInstance; import net.minecraft.potion.Effects; import net.minecraft.util.Direction; +import net.minecraft.util.Hand; import net.minecraft.util.IItemProvider; import net.minecraft.util.ResourceLocation; import net.minecraft.util.SoundCategory; @@ -39,7 +41,9 @@ import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.vector.Vector3d; import net.minecraft.world.IWorld; import net.minecraft.world.World; +import net.minecraft.world.server.ServerWorld; import net.minecraftforge.common.IPlantable; +import net.minecraftforge.common.util.FakePlayerFactory; import net.minecraftforge.registries.IRegistryDelegate; public class PotatoCannonProjectileTypes { @@ -64,7 +68,7 @@ public class PotatoCannonProjectileTypes { .velocity(1.25f) .knockback(0.5f) .renderTumbling() - .onEntityHit(ray -> ray.getEntity().setFire(3)) + .onEntityHit(setFire(3)) .registerAndAssign(Items.BAKED_POTATO), CARROT = create("carrot").damage(4) @@ -107,7 +111,7 @@ public class PotatoCannonProjectileTypes { .knockback(0.05f) .velocity(1.25f) .renderTumbling() - .onEntityHit(potion(Effects.POISON, 1,160)) + .onEntityHit(potion(Effects.POISON, 1,160, true)) .registerAndAssign(Items.POISONOUS_POTATO), CHORUS_FRUIT = create("chorus_fruit").damage(3) @@ -115,7 +119,7 @@ public class PotatoCannonProjectileTypes { .velocity(1.20f) .knockback(0.05f) .renderTumbling() - .onEntityHitRecoveryCancelable(chorusTeleport(20)) + .onEntityHit(chorusTeleport(20)) .registerAndAssign(Items.CHORUS_FRUIT), APPLE = create("apple").damage(5) @@ -132,7 +136,7 @@ public class PotatoCannonProjectileTypes { .knockback(0.1f) .renderTumbling() .soundPitch(1.1f) - .onEntityHit(potion(Effects.SLOWNESS, 2,160)) + .onEntityHit(potion(Effects.SLOWNESS, 2,160, true)) .registerAndAssign(AllItems.HONEYED_APPLE.get()), GOLDEN_APPLE = create("golden_apple").damage(1) @@ -141,7 +145,21 @@ public class PotatoCannonProjectileTypes { .knockback(0.05f) .renderTumbling() .soundPitch(1.1f) - .onEntityHitRecoveryCancelable(foodEffects(Foods.GOLDEN_APPLE)) + .onEntityHit(ray -> { + Entity entity = ray.getEntity(); + World world = entity.world; + + if (!(entity instanceof ZombieVillagerEntity) + || !((ZombieVillagerEntity) entity).isPotionActive(Effects.WEAKNESS)) + return foodEffects(Foods.GOLDEN_APPLE, false).test(ray); + if (world.isRemote) + return false; + + PlayerEntity dummy = FakePlayerFactory.getMinecraft((ServerWorld) world); + dummy.setHeldItem(Hand.MAIN_HAND, new ItemStack(Items.GOLDEN_APPLE)); + ((ZombieVillagerEntity) entity).interactMob(dummy, Hand.MAIN_HAND); + return true; + }) .registerAndAssign(Items.GOLDEN_APPLE), ENCHANTED_GOLDEN_APPLE = create("enchanted_golden_apple").damage(1) @@ -150,7 +168,7 @@ public class PotatoCannonProjectileTypes { .knockback(0.05f) .renderTumbling() .soundPitch(1.1f) - .onEntityHitRecoveryCancelable(foodEffects(Foods.ENCHANTED_GOLDEN_APPLE)) + .onEntityHit(foodEffects(Foods.ENCHANTED_GOLDEN_APPLE, false)) .registerAndAssign(Items.ENCHANTED_GOLDEN_APPLE), BEETROOT = create("beetroot").damage(2) @@ -175,7 +193,7 @@ public class PotatoCannonProjectileTypes { .velocity(1.45f) .renderTumbling() .soundPitch(1.5f) - .onEntityHit(potion(Effects.GLOWING, 1, 100)) + .onEntityHit(potion(Effects.GLOWING, 1, 100, true)) .registerAndAssign(Items.GLISTERING_MELON_SLICE), MELON_BLOCK = create("melon_block").damage(8) @@ -214,13 +232,13 @@ public class PotatoCannonProjectileTypes { .soundPitch(1.0f) .registerAndAssign(Items.CAKE), - BLAZE_CAKE = create("blaze_cake").damage(12) + BLAZE_CAKE = create("blaze_cake").damage(15) .reloadTicks(20) .knockback(0.3f) .velocity(1.1f) .renderTumbling() .sticky() - .onEntityHit(ray -> ray.getEntity().setFire(12)) + .onEntityHit(setFire(12)) .soundPitch(1.0f) .registerAndAssign(AllItems.BLAZE_CAKE.get()) ; @@ -304,29 +322,52 @@ public class PotatoCannonProjectileTypes { return onBlockHit.test(world, ray); } - private static Consumer potion(Effect effect, int level, int ticks) { + private static Predicate setFire(int seconds) { return ray -> { - Entity entity = ray.getEntity(); - if (entity instanceof LivingEntity) - ((LivingEntity) entity).addPotionEffect(new EffectInstance(effect, ticks, level - 1)); + ray.getEntity().setFire(seconds); + return false; }; } - private static Predicate foodEffects(Food food) { + private static Predicate potion(Effect effect, int level, int ticks, boolean recoverable) { return ray -> { Entity entity = ray.getEntity(); + if (entity.world.isRemote) + return true; + if (entity instanceof LivingEntity) + applyEffect((LivingEntity) entity, new EffectInstance(effect, ticks, level - 1)); + return !recoverable; + }; + } + + private static Predicate foodEffects(Food food, boolean recoverable) { + return ray -> { + Entity entity = ray.getEntity(); + if (entity.world.isRemote) + return true; + if (entity instanceof LivingEntity) { for (Pair effect : food.getEffects()) { if (Create.RANDOM.nextFloat() < effect.getSecond()) - ((LivingEntity) entity).addPotionEffect(effect.getFirst()); + applyEffect((LivingEntity) entity, new EffectInstance(effect.getFirst())); } } - return true; + return !recoverable; }; } + public static void applyEffect(LivingEntity entity, EffectInstance effect) { + if (effect.getPotion().isInstant()) + effect.getPotion().affectEntity(null, null, entity, effect.getDuration(), 1.0); + else + entity.addPotionEffect(effect); + } + private static BiPredicate plantCrop(IRegistryDelegate cropBlock) { return (world, ray) -> { + if (world.isRemote()) + return true; + BlockPos hitPos = ray.getPos(); if (!world.isAreaLoaded(hitPos, 1)) return true; @@ -348,6 +389,9 @@ public class PotatoCannonProjectileTypes { private static BiPredicate placeBlockOnGround(IRegistryDelegate block) { return (world, ray) -> { + if (world.isRemote()) + return true; + BlockPos hitPos = ray.getPos(); if (!world.isAreaLoaded(hitPos, 1)) return true; @@ -372,7 +416,7 @@ public class PotatoCannonProjectileTypes { falling.fallTime = 1; world.addEntity(falling); } - + return true; }; } @@ -397,12 +441,12 @@ public class PotatoCannonProjectileTypes { double teleportZ = entityZ + (livingEntity.getRNG().nextDouble() - 0.5D) * teleportDiameter; /* Usable as soon as lowest supported forge > 36.1.3 */ - + // EntityTeleportEvent.ChorusFruit event = ForgeEventFactory.onChorusFruitTeleport(livingEntity, teleportX, teleportY, teleportZ); // if (event.isCanceled()) // return; // if (livingEntity.attemptTeleport(event.getTargetX(), event.getTargetY(), event.getTargetZ(), true)) { - + if (livingEntity.attemptTeleport(teleportX, teleportY, teleportZ, true)) { if (livingEntity.isPassenger()) livingEntity.stopRiding(); @@ -414,7 +458,7 @@ public class PotatoCannonProjectileTypes { return true; } } - + return false; }; } @@ -489,18 +533,10 @@ public class PotatoCannonProjectileTypes { return this; } - public Builder onEntityHitRecoveryCancelable(Predicate callback) { + public Builder onEntityHit(Predicate callback) { result.onEntityHit = callback; return this; } - - public Builder onEntityHit(Consumer callback) { - result.onEntityHit = ray -> { - callback.accept(ray); - return false; - }; - return this; - } public Builder onBlockHit(BiPredicate callback) { result.onBlockHit = callback; diff --git a/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoProjectileEntity.java b/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoProjectileEntity.java index 21a29dc2e..a9faeca72 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoProjectileEntity.java +++ b/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoProjectileEntity.java @@ -14,6 +14,7 @@ import net.minecraft.entity.Entity; import net.minecraft.entity.EntityClassification; import net.minecraft.entity.EntityType; import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.boss.WitherEntity; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.ServerPlayerEntity; import net.minecraft.entity.projectile.DamagingProjectileEntity; @@ -188,6 +189,9 @@ public class PotatoProjectileEntity extends DamagingProjectileEntity implements pop(hit); + if (target instanceof WitherEntity && ((WitherEntity) target).shouldRenderOverlay()) + return; + boolean targetIsEnderman = target.getType() == EntityType.ENDERMAN; int k = target.getFireTimer(); if (this.isBurning() && !targetIsEnderman) @@ -203,7 +207,7 @@ public class PotatoProjectileEntity extends DamagingProjectileEntity implements if (targetIsEnderman) return; - if (!projectileType.onEntityHit(ray)) + if (!projectileType.onEntityHit(ray) && onServer) if (rand.nextDouble() <= recoveryChance) recoverItem(); @@ -271,7 +275,7 @@ public class PotatoProjectileEntity extends DamagingProjectileEntity implements protected void onBlockHit(BlockRayTraceResult ray) { Vector3d hit = ray.getHitVec(); pop(hit); - if (!getProjectileType().onBlockHit(world, ray)) + if (!getProjectileType().onBlockHit(world, ray) && !world.isRemote) if (rand.nextDouble() <= recoveryChance) recoverItem(); super.onBlockHit(ray); diff --git a/src/main/java/com/simibubi/create/content/logistics/block/redstone/StockpileSwitchTileEntity.java b/src/main/java/com/simibubi/create/content/logistics/block/redstone/StockpileSwitchTileEntity.java index 51800ee50..3fbbe0c93 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/redstone/StockpileSwitchTileEntity.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/redstone/StockpileSwitchTileEntity.java @@ -170,6 +170,6 @@ public class StockpileSwitchTileEntity extends SmartTileEntity { if (inverted == this.inverted) return; this.inverted = inverted; - world.updateNeighbors(pos, getBlockState().getBlock()); + updatePowerAfterDelay(); } } From cb41ac679da7d2ea80f1fd7b3cd1ed1757424f94 Mon Sep 17 00:00:00 2001 From: reidbhuntley Date: Mon, 12 Jul 2021 00:43:23 -0400 Subject: [PATCH 074/118] Use custom FakePlayer for converting Zombie Villagers --- .../structureMovement/ContraptionHandler.java | 4 ++-- .../capability/CapabilityMinecartController.java | 14 +++++++------- .../fluids/FluidTransportBehaviour.java | 4 ++-- .../weapons/PotatoCannonProjectileTypes.java | 15 +++++++++++---- .../item/LinkedControllerServerHandler.java | 2 +- .../schematics/filtering/SchematicInstances.java | 2 +- .../create/foundation/utility/WorldAttached.java | 8 ++++---- 7 files changed, 28 insertions(+), 21 deletions(-) diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionHandler.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionHandler.java index a21df0650..c1c5dfea3 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionHandler.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionHandler.java @@ -27,8 +27,8 @@ public class ContraptionHandler { static WorldAttached> queuedAdditions; static { - loadedContraptions = new WorldAttached<>(HashMap::new); - queuedAdditions = new WorldAttached<>(() -> ObjectLists.synchronize(new ObjectArrayList<>())); + loadedContraptions = new WorldAttached<>($ -> new HashMap<>()); + queuedAdditions = new WorldAttached<>($ -> ObjectLists.synchronize(new ObjectArrayList<>())); } public static void tick(World world) { diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/capability/CapabilityMinecartController.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/capability/CapabilityMinecartController.java index fa21259c0..c8e790a0b 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/capability/CapabilityMinecartController.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/capability/CapabilityMinecartController.java @@ -80,10 +80,10 @@ public class CapabilityMinecartController implements ICapabilitySerializable(HashMap::new); - loadedMinecartsWithCoupling = new WorldAttached<>(HashSet::new); - queuedAdditions = new WorldAttached<>(() -> ObjectLists.synchronize(new ObjectArrayList<>())); - queuedUnloads = new WorldAttached<>(() -> ObjectLists.synchronize(new ObjectArrayList<>())); + loadedMinecartsByUUID = new WorldAttached<>($ -> new HashMap<>()); + loadedMinecartsWithCoupling = new WorldAttached<>($ -> new HashSet<>()); + queuedAdditions = new WorldAttached<>($ -> ObjectLists.synchronize(new ObjectArrayList<>())); + queuedUnloads = new WorldAttached<>($ -> ObjectLists.synchronize(new ObjectArrayList<>())); } public static void tick(World world) { @@ -99,16 +99,16 @@ public class CapabilityMinecartController implements ICapabilitySerializable capability = cart.getCapability(MINECART_CONTROLLER_CAPABILITY); diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidTransportBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidTransportBehaviour.java index 027db42d1..1370d3b5d 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidTransportBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidTransportBehaviour.java @@ -131,7 +131,7 @@ public abstract class FluidTransportBehaviour extends TileEntityBehaviour { sendUpdate |= connection.manageFlows(world, pos, internalFluid, extractionPredicate); } - if (sendUpdate) + if (sendUpdate) tileEntity.notifyUpdate(); } @@ -272,7 +272,7 @@ public abstract class FluidTransportBehaviour extends TileEntityBehaviour { // for switching TEs, but retaining flows public static final WorldAttached>> interfaceTransfer = - new WorldAttached<>(HashMap::new); + new WorldAttached<>($ -> new HashMap<>()); public static void cacheFlows(IWorld world, BlockPos pos) { FluidTransportBehaviour pipe = TileEntityBehaviour.get(world, pos, FluidTransportBehaviour.TYPE); diff --git a/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoCannonProjectileTypes.java b/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoCannonProjectileTypes.java index 7fb0265de..9a25260b6 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoCannonProjectileTypes.java +++ b/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoCannonProjectileTypes.java @@ -3,12 +3,15 @@ package com.simibubi.create.content.curiosities.weapons; import java.util.HashMap; import java.util.Map; import java.util.Optional; +import java.util.UUID; import java.util.function.BiPredicate; import java.util.function.Predicate; +import com.mojang.authlib.GameProfile; import com.mojang.datafixers.util.Pair; import com.simibubi.create.AllItems; import com.simibubi.create.Create; +import com.simibubi.create.foundation.utility.WorldAttached; import net.minecraft.block.Block; import net.minecraft.block.BlockState; @@ -18,7 +21,6 @@ import net.minecraft.entity.LivingEntity; import net.minecraft.entity.item.FallingBlockEntity; import net.minecraft.entity.monster.ZombieVillagerEntity; import net.minecraft.entity.passive.FoxEntity; -import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.Food; import net.minecraft.item.Foods; import net.minecraft.item.Item; @@ -43,11 +45,16 @@ import net.minecraft.world.IWorld; import net.minecraft.world.World; import net.minecraft.world.server.ServerWorld; import net.minecraftforge.common.IPlantable; -import net.minecraftforge.common.util.FakePlayerFactory; +import net.minecraftforge.common.util.FakePlayer; import net.minecraftforge.registries.IRegistryDelegate; public class PotatoCannonProjectileTypes { + private static final GameProfile ZOMBIE_CONVERTER_NAME = + new GameProfile(UUID.fromString("be12d3dc-27d3-4992-8c97-66be53fd49c5"), "Converter"); + private static final WorldAttached ZOMBIE_CONVERTERS = + new WorldAttached<>(w -> new FakePlayer((ServerWorld) w, ZOMBIE_CONVERTER_NAME)); + public static final Map ALL = new HashMap<>(); public static final Map, PotatoCannonProjectileTypes> ITEM_MAP = new HashMap<>(); public static final PotatoCannonProjectileTypes @@ -155,8 +162,8 @@ public class PotatoCannonProjectileTypes { if (world.isRemote) return false; - PlayerEntity dummy = FakePlayerFactory.getMinecraft((ServerWorld) world); - dummy.setHeldItem(Hand.MAIN_HAND, new ItemStack(Items.GOLDEN_APPLE)); + FakePlayer dummy = ZOMBIE_CONVERTERS.get(world); + dummy.setHeldItem(Hand.MAIN_HAND, new ItemStack(Items.GOLDEN_APPLE, 1)); ((ZombieVillagerEntity) entity).interactMob(dummy, Hand.MAIN_HAND); return true; }) diff --git a/src/main/java/com/simibubi/create/content/logistics/item/LinkedControllerServerHandler.java b/src/main/java/com/simibubi/create/content/logistics/item/LinkedControllerServerHandler.java index 8e35e0cb6..3ec2b3209 100644 --- a/src/main/java/com/simibubi/create/content/logistics/item/LinkedControllerServerHandler.java +++ b/src/main/java/com/simibubi/create/content/logistics/item/LinkedControllerServerHandler.java @@ -24,7 +24,7 @@ import net.minecraft.world.IWorld; public class LinkedControllerServerHandler { public static WorldAttached>> receivedInputs = - new WorldAttached<>(HashMap::new); + new WorldAttached<>($ -> new HashMap<>()); static final int TIMEOUT = 30; public static void tick(IWorld world) { diff --git a/src/main/java/com/simibubi/create/content/schematics/filtering/SchematicInstances.java b/src/main/java/com/simibubi/create/content/schematics/filtering/SchematicInstances.java index 9ca103e6b..8bd1c542b 100644 --- a/src/main/java/com/simibubi/create/content/schematics/filtering/SchematicInstances.java +++ b/src/main/java/com/simibubi/create/content/schematics/filtering/SchematicInstances.java @@ -23,7 +23,7 @@ public class SchematicInstances { public static WorldAttached> loadedSchematics; static { - loadedSchematics = new WorldAttached<>(() -> CacheBuilder.newBuilder() + loadedSchematics = new WorldAttached<>($ -> CacheBuilder.newBuilder() .expireAfterAccess(5, TimeUnit.MINUTES) .build()); } diff --git a/src/main/java/com/simibubi/create/foundation/utility/WorldAttached.java b/src/main/java/com/simibubi/create/foundation/utility/WorldAttached.java index ee9022165..d8dc4e987 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/WorldAttached.java +++ b/src/main/java/com/simibubi/create/foundation/utility/WorldAttached.java @@ -4,7 +4,7 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.function.Supplier; +import java.util.function.Function; import javax.annotation.Nullable; @@ -14,9 +14,9 @@ public class WorldAttached { static List> allMaps = new ArrayList<>(); Map attached; - private Supplier factory; + private Function factory; - public WorldAttached(Supplier factory) { + public WorldAttached(Function factory) { this.factory = factory; attached = new HashMap<>(); allMaps.add(attached); @@ -31,7 +31,7 @@ public class WorldAttached { T t = attached.get(world); if (t != null) return t; - T entry = factory.get(); + T entry = factory.apply(world); put(world, entry); return entry; } From 6c89dadeddbb368bd38bcee6adb9250ae7155ab0 Mon Sep 17 00:00:00 2001 From: qkrehf2 <64183602+qkrehf2@users.noreply.github.com> Date: Mon, 12 Jul 2021 18:31:55 +0900 Subject: [PATCH 075/118] Updates to ko_kr.json by qkrehf2 (#1938) --- .../resources/assets/create/lang/ko_kr.json | 3575 +++++++++-------- 1 file changed, 1908 insertions(+), 1667 deletions(-) diff --git a/src/main/resources/assets/create/lang/ko_kr.json b/src/main/resources/assets/create/lang/ko_kr.json index 191838375..3b17fe2cf 100644 --- a/src/main/resources/assets/create/lang/ko_kr.json +++ b/src/main/resources/assets/create/lang/ko_kr.json @@ -1,93 +1,59 @@ { + "_": "->------------------------] Game Elements [------------------------<-", - "_": "->---------------------------] 게임 요소 [---------------------------<-", - - "block.create.acacia_window": "아카시아나무 판자 창문", - "block.create.acacia_window_pane": "아카시아나무 판자 창문판", - "block.create.adjustable_chain_gearshift": "연쇄 변속기", - "block.create.adjustable_crate": "조절식 상자", - "block.create.adjustable_pulse_repeater": "조절식 순간작동 중계기", - "block.create.adjustable_repeater": "조절식 중계기", - "block.create.analog_lever": "조절식 레버", - "block.create.andesite_belt_funnel": "안산암 벨트 퍼널", + "block.create.andesite_bricks": "안산안 벽돌", + "block.create.layered_andesite": "이어지는 안산암", "block.create.andesite_bricks": "안산암 벽돌", "block.create.andesite_bricks_slab": "안산암 벽돌 반 블록", "block.create.andesite_bricks_stairs": "안산암 벽돌 계단", "block.create.andesite_bricks_wall": "안산암 벽돌 담장", - "block.create.andesite_casing": "안산암 틀", "block.create.andesite_cobblestone": "안산암 조약돌", "block.create.andesite_cobblestone_slab": "안산암 조약돌 반 블록", "block.create.andesite_cobblestone_stairs": "안산암 조약돌 계단", "block.create.andesite_cobblestone_wall": "안산암 조약돌 담장", - "block.create.andesite_encased_shaft": "안산암 틀을 씌운 축", - "block.create.andesite_funnel": "안산암 퍼널", "block.create.andesite_pillar": "안산암 기둥", - "block.create.andesite_tunnel": "안산암 터널", - "block.create.basin": "대야", - "block.create.belt": "벨트", - "block.create.birch_window": "자작나무 판자 창문", - "block.create.birch_window_pane": "자작나무 판자 창문판", - "block.create.black_sail": "검은색 캔버스", - "block.create.black_seat": "검은색 좌석", - "block.create.black_valve_handle": "검은색 밸브 손잡이", - "block.create.blaze_burner": "블레이즈 가열기", - "block.create.blue_sail": "파란색 캔버스", - "block.create.blue_seat": "파란색 좌석", - "block.create.blue_valve_handle": "파란색 밸브 손잡이", - "block.create.brass_belt_funnel": "황동 벨트 퍼널", - "block.create.brass_block": "황동 블록", - "block.create.brass_casing": "황동 틀", - "block.create.brass_encased_shaft": "황동 틀을 씌운 축", - "block.create.brass_funnel": "황동 퍼널", - "block.create.brass_tunnel": "황동 터널", - "block.create.brown_sail": "갈색 캔버스", - "block.create.brown_seat": "갈색 좌석", - "block.create.brown_valve_handle": "갈색 밸브 손잡이", - "block.create.cart_assembler": "수레 부착기", - "block.create.chiseled_dark_scoria": "조각된 짙은 스코리아", - "block.create.chiseled_dolomite": "조각된 백운암", - "block.create.chiseled_gabbro": "조각된 반려암", - "block.create.chiseled_limestone": "조각된 석회암", - "block.create.chiseled_scoria": "조각된 스코리아", - "block.create.chiseled_weathered_limestone": "조각된 풍화된 석회암", - "block.create.chocolate": "초콜릿", - "block.create.chute": "도관", - "block.create.clockwork_bearing": "시계 회전장치", - "block.create.clutch": "단절기", - "block.create.cogwheel": "톱니바퀴", - "block.create.content_observer": "아이템 감지기", - "block.create.controller_rail": "제어 레일", - "block.create.copper_block": "구리 블록", - "block.create.copper_casing": "구리 틀", - "block.create.copper_ore": "구리 광석", - "block.create.copper_shingles": "구리 널판", - "block.create.copper_tiles": "구리 타일", - "block.create.copper_valve_handle": "구리 밸브 손잡이", - "block.create.creative_crate": "크리에이티브 상자", - "block.create.creative_fluid_tank": "크리에이티브 액체 탱크", - "block.create.creative_motor": "크리에이티브 모터", - "block.create.crimson_window": "진홍빛 판자 창문", - "block.create.crimson_window_pane": "진홍빛 판자 창문판", - "block.create.crushing_wheel": "분쇄용 바퀴", - "block.create.crushing_wheel_controller": "분쇄용 바퀴 제어기", - "block.create.cuckoo_clock": "뻐꾸기시계", - "block.create.cyan_sail": "청록색 캔버스", - "block.create.cyan_seat": "청록색 좌석", - "block.create.cyan_valve_handle": "청록색 밸브 손잡이", - "block.create.dark_oak_window": "짙은 참나무 판자 창문", - "block.create.dark_oak_window_pane": "짙은 참나무 판자 창문판", + "block.create.fancy_andesite_bricks": "장식된 안산암 벽돌", + "block.create.fancy_andesite_bricks_slab": "장식된 안산암 벽돌 반 블록", + "block.create.fancy_andesite_bricks_stairs": "장식된 안산암 벽돌 계단", + "block.create.fancy_andesite_bricks_wall": "장식된 안산암 벽돌 담장", + "block.create.mossy_andesite": "이끼 낀 안산암", + "block.create.overgrown_andesite": "이끼로 뒤덮힌 안산암", + "block.create.paved_andesite": "포장된 안산암", + "block.create.paved_andesite_slab": "포장된 안산암 반 블록", + "block.create.paved_andesite_stairs": "포장된 안산암 계단", + "block.create.paved_andesite_wall": "포장된 안산암 담장", + "block.create.dark_scoria": "짙은 스코리아", + "block.create.polished_dark_scoria": "윤나는 짙은 스코리아", + "block.create.dark_scoria_tiles": "짙은 스코리아 타일", + "block.create.dark_scoria_tiles_stairs": "짙은 스코리아 타일 계단", + "block.create.dark_scoria_tiles_slab": "짙은 스코리아 타일 반 블록", "block.create.dark_scoria_bricks": "짙은 스코리아 벽돌", - "block.create.dark_scoria_bricks_slab": "짙은 스코리아 벽돌 반 블록", "block.create.dark_scoria_bricks_stairs": "짙은 스코리아 벽돌 계단", + "block.create.dark_scoria_bricks_slab": "짙은 스코리아 벽돌 반 블록", "block.create.dark_scoria_bricks_wall": "짙은 스코리아 벽돌 담장", + "block.create.chiseled_dark_scoria": "조각된 짙은 스코리아", "block.create.dark_scoria_cobblestone": "짙은 스코리아 조약돌", "block.create.dark_scoria_cobblestone_slab": "짙은 스코리아 조약돌 반 블록", "block.create.dark_scoria_cobblestone_stairs": "짙은 스코리아 조약돌 계단", "block.create.dark_scoria_cobblestone_wall": "짙은 스코리아 조약돌 담장", + "block.create.fancy_dark_scoria_bricks": "장식된 짙은 스코리아 벽돌", + "block.create.fancy_dark_scoria_bricks_slab": "장식된 짙은 스코리아 벽돌 반 블록", + "block.create.fancy_dark_scoria_bricks_stairs": "장식된 짙은 스코리아 벽돌 계단", + "block.create.fancy_dark_scoria_bricks_wall": "장식된 짙은 스코리아 벽돌 담장", + "block.create.layered_dark_scoria": "이어지는 짙은 스코리아", + "block.create.mossy_dark_scoria": "이끼 낀 짙은 스코리아", + "block.create.overgrown_dark_scoria": "이끼가 뒤덮힌 짙은 스코리아", + "block.create.paved_dark_scoria": "포장된 짙은 스코리아", + "block.create.paved_dark_scoria_slab": "포장된 스코리아 반 블록", + "block.create.paved_dark_scoria_stairs": "포장된 짙은 스코리 계단", + "block.create.paved_dark_scoria_wall": "포장된 짙은 스코리아 담장", + "block.create.polished_dark_scoria": "윤나는 짙은 스코리아", + "block.create.polished_dark_scoria_slab": "윤나는 짙은 스코리아 반 블록", + "block.create.polished_dark_scoria_stairs": "윤나는 짙은 스코리아 계단", + "block.create.polished_dark_scoria_wall": "윤나는 짙은 스코리아 담장", "block.create.dark_scoria_pillar": "짙은 스코리아 기둥", - "block.create.deployer": "전개장치", - "block.create.depot": "아이템 거치대", + "block.create.diorite_bricks": "섬록암 벽돌", "block.create.diorite_bricks_slab": "섬록암 벽돌 반 블록", "block.create.diorite_bricks_stairs": "섬록암 벽돌 계단", @@ -97,778 +63,911 @@ "block.create.diorite_cobblestone_stairs": "섬록암 조약돌 계단", "block.create.diorite_cobblestone_wall": "섬록암 조약돌 담장", "block.create.diorite_pillar": "섬록암 기둥", + "block.create.fancy_diorite_bricks": "장식된 섬록암 벽돌", + "block.create.fancy_diorite_bricks_slab": "장식된 섬록암 벽돌 반 블록", + "block.create.fancy_diorite_bricks_stairs": "장식된 섬록암 벽돌 계단", + "block.create.fancy_diorite_bricks_wall": "장식된 섬록암 벽돌 담장", + "block.create.layered_diorite": "이어지는 섬록암", + "block.create.mossy_diorite": "이끼 낀 섬록암", + "block.create.overgrown_diorite": "이끼로 뒤덮힌 섬록암", + "block.create.paved_diorite": "포장된 섬록암", + "block.create.paved_diorite_slab": "포장된 섬록암 반 블록", + "block.create.paved_diorite_stairs": "포장된 섬록암 계단", + "block.create.paved_diorite_wall": "포장된 섬록암 담장", + + "block.create.dolomite_pillar": "백운암 기둥", "block.create.dolomite": "백운암", + "block.create.dolomite_stairs": "백운암 계단", + "block.create.dolomite_wall": "백운암 담장", + "block.create.dolomite_slab": "백운암 반 블록", "block.create.dolomite_bricks": "백운암 벽돌", - "block.create.dolomite_bricks_slab": "백운암 벽돌 반 블록", - "block.create.dolomite_bricks_stairs": "백운암 벽돌 계단", "block.create.dolomite_bricks_wall": "백운암 벽돌 담장", + "block.create.dolomite_bricks_stairs": "백운암 벽돌 계단", + "block.create.dolomite_bricks_slab": "백운암 벽돌 반 블록", + "block.create.polished_dolomite": "윤나는 백운암", + "block.create.layered_dolomite": "이어지는 백운암", "block.create.dolomite_cobblestone": "백운암 조약돌", "block.create.dolomite_cobblestone_slab": "백운암 조약돌 반 블록", "block.create.dolomite_cobblestone_stairs": "백운암 조약돌 계단", "block.create.dolomite_cobblestone_wall": "백운암 조약돌 담장", + "block.create.fancy_dolomite_bricks": "장식된 백운암 벽돌", + "block.create.fancy_dolomite_bricks_slab": "장식된 백운암 벽돌 반 블록", + "block.create.fancy_dolomite_bricks_stairs": "장식된 백운암 벽돌 계단", + "block.create.fancy_dolomite_bricks_wall": "장식된 백운암 벽돌 담장", + "block.create.paved_dolomite": "포장된 백운암", + "block.create.paved_dolomite_slab": "포장된 백운암 반 블록", + "block.create.paved_dolomite_stairs": "포장된 백운암 계단", + "block.create.paved_dolomite_wall": "포장된 백운암 담장", + "block.create.polished_dolomite_slab": "윤나는 백운암 반 블록", + "block.create.polished_dolomite_stairs": "윤나는 백운암 계단", + "block.create.polished_dolomite_wall": "윤나는 백운암 담장", + "block.create.chiseled_dolomite": "조각된 백운암", + "block.create.mossy_dolomite": "이끼낀 백운암", + "block.create.overgrown_dolomite": "이끼로 뒤덮힌 백운암", "block.create.dolomite_pillar": "백운암 기둥", - "block.create.encased_chain_drive": "연쇄 전달기", - "block.create.encased_fan": "공업용 선풍기", - "block.create.encased_fluid_pipe": "틀을 씌운 액체관", - "block.create.fancy_andesite_bricks": "복잡한 안산암 벽돌", - "block.create.fancy_andesite_bricks_slab": "복잡한 안산암 벽돌 반 블록", - "block.create.fancy_andesite_bricks_stairs": "복잡한 안산암 벽돌 계단", - "block.create.fancy_andesite_bricks_wall": "복잡한 안산암 벽돌 담장", - "block.create.fancy_dark_scoria_bricks": "복잡한 짙은 스코리아 벽돌", - "block.create.fancy_dark_scoria_bricks_slab": "복잡한 짙은 스코리아 벽돌 반 블록", - "block.create.fancy_dark_scoria_bricks_stairs": "복잡한 짙은 스코리아 벽돌 계단", - "block.create.fancy_dark_scoria_bricks_wall": "복잡한 짙은 스코리아 벽돌 담장", - "block.create.fancy_diorite_bricks": "복잡한 섬록암 벽돌", - "block.create.fancy_diorite_bricks_slab": "복잡한 섬록암 벽돌 반 블록", - "block.create.fancy_diorite_bricks_stairs": "복잡한 섬록암 벽돌 계단", - "block.create.fancy_diorite_bricks_wall": "복잡한 섬록암 벽돌 담장", - "block.create.fancy_dolomite_bricks": "복잡한 백운암 벽돌", - "block.create.fancy_dolomite_bricks_slab": "복잡한 백운암 벽돌 반 블록", - "block.create.fancy_dolomite_bricks_stairs": "복잡한 백운암 벽돌 계단", - "block.create.fancy_dolomite_bricks_wall": "복잡한 백운암 벽돌 담장", - "block.create.fancy_gabbro_bricks": "복잡한 반려암 벽돌", - "block.create.fancy_gabbro_bricks_slab": "복잡한 반려암 벽돌 반 블록", - "block.create.fancy_gabbro_bricks_stairs": "복잡한 반려암 벽돌 계단", - "block.create.fancy_gabbro_bricks_wall": "복잡한 반려암 벽돌 담장", - "block.create.fancy_granite_bricks": "복잡한 화강암 벽돌", - "block.create.fancy_granite_bricks_slab": "복잡한 화강암 벽돌 반 블록", - "block.create.fancy_granite_bricks_stairs": "복잡한 화강암 벽돌 계단", - "block.create.fancy_granite_bricks_wall": "복잡한 화강암 벽돌 담장", - "block.create.fancy_limestone_bricks": "복잡한 석회암 벽돌", - "block.create.fancy_limestone_bricks_slab": "복잡한 석회암 벽돌 반 블록", - "block.create.fancy_limestone_bricks_stairs": "복잡한 석회암 벽돌 계단", - "block.create.fancy_limestone_bricks_wall": "복잡한 석회암 벽돌 담장", - "block.create.fancy_scoria_bricks": "복잡한 스코리아 벽돌", - "block.create.fancy_scoria_bricks_slab": "복잡한 스코리아 벽돌 반 블록", - "block.create.fancy_scoria_bricks_stairs": "복잡한 스코리아 벽돌 계단", - "block.create.fancy_scoria_bricks_wall": "복잡한 스코리아 벽돌 담장", - "block.create.fancy_weathered_limestone_bricks": "복잡한 풍화된 석회암 벽돌", - "block.create.fancy_weathered_limestone_bricks_slab": "복잡한 풍화된 석회암 벽돌 반 블록", - "block.create.fancy_weathered_limestone_bricks_stairs": "복잡한 풍화된 석회암 벽돌 계단", - "block.create.fancy_weathered_limestone_bricks_wall": "복잡한 풍화된 석회암 벽돌 담장", - "block.create.fluid_pipe": "액체관", - "block.create.fluid_tank": "액체 탱크", - "block.create.fluid_valve": "액체 밸브", - "block.create.flywheel": "축 회전바퀴", - "block.create.framed_glass": "틀 유리", - "block.create.framed_glass_pane": "틀 유리판", - "block.create.furnace_engine": "화로 원동기", + "block.create.gabbro": "반려암", + "block.create.gabbro_stairs": "반려암 계단", + "block.create.gabbro_slab": "반려암 반 블록", + "block.create.gabbro_wall": "반려암 담장", + "block.create.polished_gabbro": "윤나는 반려암", "block.create.gabbro_bricks": "반려암 벽돌", - "block.create.gabbro_bricks_slab": "반려암 벽돌 반 블록", "block.create.gabbro_bricks_stairs": "반려암 벽돌 계단", "block.create.gabbro_bricks_wall": "반려암 벽돌 담장", + "block.create.paved_gabbro_bricks": "포장된 반려암 벽돌", + "block.create.paved_gabbro_bricks_slab": "포장된 반려암 벽돌 반 블록", + "block.create.indented_gabbro": "반려암 겹 타일", + "block.create.indented_gabbro_slab": "반려암 겹 반 블록", + "block.create.slightly_mossy_gabbro_bricks": "이끼 낀 반려암 벽돌", + "block.create.mossy_gabbro_bricks": "이끼로 뒤덮힌 반려암 벽돌", + "block.create.chiseled_gabbro": "조각된 반려암", + "block.create.fancy_gabbro_bricks": "장식된 반려암 벽돌", + "block.create.fancy_gabbro_bricks_slab": "장식된 반려암 벽돌 반 블록", + "block.create.fancy_gabbro_bricks_stairs": "장식된 반려암 벽돌 계단", + "block.create.fancy_gabbro_bricks_wall": "장식된 반려암 벽돌 담장", "block.create.gabbro_cobblestone": "반려암 조약돌", "block.create.gabbro_cobblestone_slab": "반려암 조약돌 반 블록", "block.create.gabbro_cobblestone_stairs": "반려암 조약돌 계단", "block.create.gabbro_cobblestone_wall": "반려암 조약돌 담장", + "block.create.layered_gabbro": "이어지는 반려암", + "block.create.mossy_gabbro": "이끼낀 반려암", + "block.create.overgrown_gabbro": "이끼로 뒤덮힌 반려암", + "block.create.paved_gabbro": "포장된 반려암", + "block.create.paved_gabbro_slab": "포장된 반려암 반 블록", + "block.create.paved_gabbro_stairs": "포장된 반려암 계단", + "block.create.paved_gabbro_wall": "포장된 반려암 담장", + "block.create.polished_gabbro": "윤나는 반려암", + "block.create.polished_gabbro_slab": "윤나는 반려암 반 블록", + "block.create.polished_gabbro_stairs": "윤나는 반려암 계단", + "block.create.polished_gabbro_wall": "윤나는 반려암 담장", + "block.create.gabbro_bricks_slab": "반려암 벽돌 반 블록", "block.create.gabbro_pillar": "반려암 기둥", - "block.create.gantry_carriage": "다리 운반대", - "block.create.gantry_shaft": "다리 축", - "block.create.gearbox": "전환장치", - "block.create.gearshift": "전환기", - "block.create.glass_fluid_pipe": "유리 액체관", + "block.create.granite_bricks": "화강암 벽돌", - "block.create.granite_bricks_slab": "화강암 벽돌 반 블록", - "block.create.granite_bricks_stairs": "화강암 벽돌 계단", - "block.create.granite_bricks_wall": "화강암 벽돌 담장", + "block.create.layered_granite": "이어지는 화강암", + "block.create.fancy_granite_bricks": "장식된 화강암 벽돌", + "block.create.fancy_granite_bricks_slab": "장식된 화강암 벽돌 반 블록", + "block.create.fancy_granite_bricks_stairs": "장식된 화강암 벽돌 계단", + "block.create.fancy_granite_bricks_wall": "장식된 화강암 벽돌 담장", + "block.create.granite_bricks_slab": "화강함 벽돌 반 블록", + "block.create.granite_bricks_stairs": "화강함 벽돌 계단", + "block.create.granite_bricks_wall": "화강함 벽돌 담장", "block.create.granite_cobblestone": "화강암 조약돌", "block.create.granite_cobblestone_slab": "화강암 조약돌 반 블록", "block.create.granite_cobblestone_stairs": "화강암 조약돌 계단", "block.create.granite_cobblestone_wall": "화강암 조약돌 담장", "block.create.granite_pillar": "화강암 기둥", - "block.create.gray_sail": "회색 캔버스", - "block.create.gray_seat": "회색 좌석", - "block.create.gray_valve_handle": "회색 밸브 손잡이", - "block.create.green_sail": "초록색 캔버스", - "block.create.green_seat": "초록색 좌석", - "block.create.green_valve_handle": "초록색 밸브 손잡이", - "block.create.hand_crank": "자가발전용 손잡이", - "block.create.honey": "꿀", - "block.create.horizontal_framed_glass": "가로 틀 유리", - "block.create.horizontal_framed_glass_pane": "가로 틀 유리판", - "block.create.hose_pulley": "액체관 도르래", - "block.create.item_drain": "흡수통", - "block.create.jungle_window": "정글 나무 판자 창문", - "block.create.jungle_window_pane": "정글 나무 판자 창문판", - "block.create.large_cogwheel": "큰 톱니바퀴 ", - "block.create.layered_andesite": "틀 안산암", - "block.create.layered_dark_scoria": "틀 짙은 스코리아", - "block.create.layered_diorite": "틀 섬록암", - "block.create.layered_dolomite": "틀 백운암", - "block.create.layered_gabbro": "틀 반려암", - "block.create.layered_granite": "틀 화강암", - "block.create.layered_limestone": "틀 석회암", - "block.create.layered_scoria": "틀 스코리아", - "block.create.layered_weathered_limestone": "틀 풍화된 석회암", - "block.create.light_blue_sail": "하늘색 캔버스", - "block.create.light_blue_seat": "하늘색 좌석", - "block.create.light_blue_valve_handle": "하늘색 밸브 손잡이", - "block.create.light_gray_sail": "회백색 캔버스", - "block.create.light_gray_seat": "회백색 좌석", - "block.create.light_gray_valve_handle": "회백색 밸브 손잡이", - "block.create.lime_sail": "연두색 캔버스", - "block.create.lime_seat": "연두색 좌석", - "block.create.lime_valve_handle": "연두색 밸브 손잡이", - "block.create.limesand": "석회 가루", - "block.create.limestone": "석회암", - "block.create.limestone_bricks": "석회암 벽돌", - "block.create.limestone_bricks_slab": "석회암 벽돌 반 블록", - "block.create.limestone_bricks_stairs": "석회암 벽돌 계단", - "block.create.limestone_bricks_wall": "석회암 벽돌 담장", - "block.create.limestone_cobblestone": "석회암 조약돌", - "block.create.limestone_cobblestone_slab": "석회암 조약돌 반 블록", - "block.create.limestone_cobblestone_stairs": "석회암 조약돌 계단", - "block.create.limestone_cobblestone_wall": "석회암 조약돌 담장", - "block.create.limestone_pillar": "석회암 기둥", - "block.create.linear_chassis": "선형 연결대", - "block.create.lit_blaze_burner": "불이 붙은 블레이즈 가열기", - "block.create.magenta_sail": "자홍색 캔버스", - "block.create.magenta_seat": "자홍색 좌석", - "block.create.magenta_valve_handle": "자홍색 밸브 손잡이", - "block.create.mechanical_arm": "기계식 팔", - "block.create.mechanical_bearing": "기계식 회전장치", - "block.create.mechanical_crafter": "기계식 제작기", - "block.create.mechanical_drill": "기계식 드릴", - "block.create.mechanical_harvester": "기계식 수확기", - "block.create.mechanical_mixer": "기계식 믹서기", - "block.create.mechanical_piston": "기계식 피스톤", - "block.create.mechanical_piston_head": "기계식 피스톤 머리", - "block.create.mechanical_plough": "기계식 경작기", - "block.create.mechanical_press": "기계식 압착기", - "block.create.mechanical_pump": "기계식 펌프", - "block.create.mechanical_saw": "기계식 톱", - "block.create.metal_bracket": "금속 지지대", - "block.create.millstone": "맷돌", - "block.create.minecart_anchor": "광산 수레 부착대", - "block.create.mossy_andesite": "이끼 낀 안산암", - "block.create.mossy_dark_scoria": "이끼 낀 짙은 스코리아", - "block.create.mossy_diorite": "이끼 낀 섬록암", - "block.create.mossy_dolomite": "이끼 낀 백운암", - "block.create.mossy_gabbro": "이끼 낀 반려암", - "block.create.mossy_granite": "이끼 낀 화강암", - "block.create.mossy_limestone": "이끼 낀 석회암", - "block.create.mossy_scoria": "이끼 낀 스코리아", - "block.create.mossy_weathered_limestone": "이끼 낀 풍화된 석회암", - "block.create.mysterious_cuckoo_clock": "기이한 뻐꾸기시계", - "block.create.natural_scoria": "자연적인 스코리아", - "block.create.nixie_tube": "표시등", - "block.create.nozzle": "분출구", - "block.create.oak_window": "참나무 판자 창문", - "block.create.oak_window_pane": "참나무 판자 창문판", - "block.create.orange_sail": "주황색 캔버스", - "block.create.orange_seat": "주황색 좌석", - "block.create.orange_valve_handle": "주황색 밸브 손잡이", - "block.create.ornate_iron_window": "화려한 철제 창문", - "block.create.ornate_iron_window_pane": "화려한 철제 창문판", - "block.create.overgrown_andesite": "이끼로 뒤덮힌 안산암", - "block.create.overgrown_dark_scoria": "이끼로 뒤덮힌 짙은 스코리아", - "block.create.overgrown_diorite": "이끼로 뒤덮힌 섬록암", - "block.create.overgrown_dolomite": "이끼로 뒤덮힌 백운암", - "block.create.overgrown_gabbro": "이끼로 뒤덮힌 반려암", - "block.create.overgrown_granite": "이끼로 뒤덮힌 화강암", - "block.create.overgrown_limestone": "이끼로 뒤덮힌 석회암", - "block.create.overgrown_scoria": "이끼로 뒤덮힌 스코리아", - "block.create.overgrown_weathered_limestone": "이끼 풍화된 석회암", - "block.create.paved_andesite": "포장된 안산암", - "block.create.paved_andesite_slab": "포장된 안산암 반 블록", - "block.create.paved_andesite_stairs": "포장된 안산암 계단", - "block.create.paved_andesite_wall": "포장된 안산암 담장", - "block.create.paved_dark_scoria": "포장된 짙은 스코리아", - "block.create.paved_dark_scoria_slab": "포장된 짙은 스코리아 반 블록", - "block.create.paved_dark_scoria_stairs": "포장된 짙은 스코리아 계단", - "block.create.paved_dark_scoria_wall": "포장된 짙은 스코리아 담장", - "block.create.paved_diorite": "포장된 섬록암", - "block.create.paved_diorite_slab": "포장된 섬록암 반 블록", - "block.create.paved_diorite_stairs": "포장된 섬록암 계단", - "block.create.paved_diorite_wall": "포장된 섬록암 담장", - "block.create.paved_dolomite": "포장된 백운암", - "block.create.paved_dolomite_slab": "포장된 백운암 반 블록", - "block.create.paved_dolomite_stairs": "포장된 백운암 계단", - "block.create.paved_dolomite_wall": "포장된 백운암 담장", - "block.create.paved_gabbro": "포장된 반려암", - "block.create.paved_gabbro_slab": "포장된 반려암 반 블록", - "block.create.paved_gabbro_stairs": "포장된 반려암 계단", - "block.create.paved_gabbro_wall": "포장된 반려암 담장", + "block.create.mossy_granite": "이끼 낀 화강암 벽돌", + "block.create.overgrown_granite": "이끼로 뒤덮힌 화강암 벽돌", "block.create.paved_granite": "포장된 화강암", "block.create.paved_granite_slab": "포장된 화강암 반 블록", "block.create.paved_granite_stairs": "포장된 화강암 계단", "block.create.paved_granite_wall": "포장된 화강암 담장", + + "block.create.limesand": "석회모래", + "block.create.limestone": "석회암", + "block.create.limestone_stairs": "석회암 계단", + "block.create.limestone_slab": "석회암 반 블록", + "block.create.limestone_wall": "석회암 담장", + "block.create.limestone_bricks": "석회암 벽돌", + "block.create.limestone_bricks_stairs": "석회암 벽돌 계단", + "block.create.limestone_bricks_slab": "석회암 벽돌 반 블록", + "block.create.limestone_bricks_wall": "석회암 벽돌 담장", + "block.create.polished_limestone": "윤나는 석회암", + "block.create.polished_limestone_slab": "윤나는 석회암 반 블록", + "block.create.limestone_pillar": "석회암 기둥", + "block.create.layered_limestone": "이어지는 석회암", + "block.create.chiseled_limestone": "조각된 석회암", + "block.create.fancy_limestone_bricks": "장식된 석회암 벽돌", + "block.create.fancy_limestone_bricks_slab": "장식된 석회암 벽돌 반 블록", + "block.create.fancy_limestone_bricks_stairs": "장식된 석회암 벽돌 계단", + "block.create.fancy_limestone_bricks_wall": "장식된 석회암 벽돌 담장", + "block.create.mossy_limestone": "이끼 낀 석회암", + "block.create.overgrown_limestone": "이끼로 뒤덮힌 석회암", "block.create.paved_limestone": "포장된 석회암", "block.create.paved_limestone_slab": "포장된 석회암 반 블록", "block.create.paved_limestone_stairs": "포장된 석회암 계단", "block.create.paved_limestone_wall": "포장된 석회암 담장", + "block.create.polished_limestone_stairs": "윤나는 석회암 계단", + "block.create.polished_limestone_wall": "윤나는 석회암 담장", + "block.create.limestone_cobblestone": "석회암 조약돌", + "block.create.limestone_cobblestone_slab": "석회암 조약돌 반 블록", + "block.create.limestone_cobblestone_stairs": "석회암 조약돌 계단", + "block.create.limestone_cobblestone_wall": "석회암 조약돌 담장", + + "block.create.natural_scoria": "자연 스코리아", + "block.create.scoria": "스코리아", + "block.create.scoria_stairs": "스코리아 계단", + "block.create.scoria_slab": "스코리아 반 블록", + "block.create.scoria_wall": "스코리아 담장", + "block.create.scoria_bricks": "스코리아 벽돌", + "block.create.polished_scoria": "윤나는 스코리아", + "block.create.polished_scoria_slab": "윤나는 스코리아 반 블록", + "block.create.scoria_pillar": "스코리아 기둥", + "block.create.layered_scoria": "이어지는 스코리아", + "block.create.chiseled_scoria": "조각된 스코리아", + "block.create.fancy_scoria_bricks": "장식된 스코리아 벽돌", + "block.create.fancy_scoria_bricks_slab": "장식된 스코리아 벽돌 반 블록", + "block.create.fancy_scoria_bricks_stairs": "장식된 스코리아 벽돌 계단", + "block.create.fancy_scoria_bricks_wall": "장식된 스코리아 벽돌 담장", + "block.create.mossy_scoria": "이끼 낀 스코리아", + "block.create.overgrown_scoria": "이끼로 뒤덮힌 스코리아", "block.create.paved_scoria": "포장된 스코리아", "block.create.paved_scoria_slab": "포장된 스코리아 반 블록", "block.create.paved_scoria_stairs": "포장된 스코리아 계단", "block.create.paved_scoria_wall": "포장된 스코리아 담장", - "block.create.paved_weathered_limestone": "포장된 풍화된 석회암", - "block.create.paved_weathered_limestone_slab": "포장된 풍화된 석회암 반 블록", - "block.create.paved_weathered_limestone_stairs": "포장된 풍화된 석회암 계단", - "block.create.paved_weathered_limestone_wall": "포장된 풍화된 석회암 담장", - "block.create.pink_sail": "분홍색 캔버스", - "block.create.pink_seat": "분홍색 좌석", - "block.create.pink_valve_handle": "분홍색 밸브 손잡이", - "block.create.piston_extension_pole": "피스톤 연장대", - "block.create.polished_dark_scoria": "윤나는 짙은 스코리아", - "block.create.polished_dark_scoria_slab": "윤나는 짙은 스코리아 반 블록", - "block.create.polished_dark_scoria_stairs": "윤나는 짙은 스코리아 계단", - "block.create.polished_dark_scoria_wall": "윤나는 짙은 스코리아 담장", - "block.create.polished_dolomite": "윤나는 백운암", - "block.create.polished_dolomite_slab": "윤나는 백운암 반 블록", - "block.create.polished_dolomite_stairs": "윤나는 백운암 계단", - "block.create.polished_dolomite_wall": "윤나는 백운암 담장", - "block.create.polished_gabbro": "윤나는 반려암", - "block.create.polished_gabbro_slab": "윤나는 반려암 반 블록", - "block.create.polished_gabbro_stairs": "윤나는 반려암 계단", - "block.create.polished_gabbro_wall": "윤나는 반려암 담장", - "block.create.polished_limestone": "윤나는 석회암", - "block.create.polished_limestone_slab": "윤나는 석회암 반 블록", - "block.create.polished_limestone_stairs": "윤나는 석회암 계단", - "block.create.polished_limestone_wall": "윤나는 석회암 담장", - "block.create.polished_scoria": "윤나는 스코리아", - "block.create.polished_scoria_slab": "윤나는 스코리아 반 블록", "block.create.polished_scoria_stairs": "윤나는 스코리아 계단", "block.create.polished_scoria_wall": "윤나는 스코리아 담장", - "block.create.polished_weathered_limestone": "윤나는 풍화된 석회암", - "block.create.polished_weathered_limestone_slab": "윤나는 풍화된 석회암 반 블록", - "block.create.polished_weathered_limestone_stairs": "윤나는 풍화된 석회암 계단", - "block.create.polished_weathered_limestone_wall": "윤나는 풍화된 석회암 담장", - "block.create.portable_fluid_interface": "연결식 액체 전달기", - "block.create.portable_storage_interface": "연결식 아이템 전달기", - "block.create.powered_latch": "레드스톤 잠금기", - "block.create.powered_toggle_latch": "레버식 레드스톤 잠금기", - "block.create.pulley_magnet": "도르래 자석", - "block.create.pulse_repeater": "순간작동 중계기", - "block.create.purple_sail": "보라색 캔버스", - "block.create.purple_seat": "보라색 좌석", - "block.create.purple_valve_handle": "보라색 밸브 손잡이", - "block.create.radial_chassis": "반경 연결대", - "block.create.red_sail": "빨간색 캔버스", - "block.create.red_seat": "빨간색 좌석", - "block.create.red_valve_handle": "빨간색 밸브 손잡이", - "block.create.redstone_contact": "레드스톤 접촉기", - "block.create.redstone_link": "레드스톤 연동 장치", - "block.create.refined_radiance_casing": "빛의 틀", - "block.create.reinforced_rail": "보강된 레일", - "block.create.rope": "도르래 밧줄", - "block.create.rope_pulley": "밧줄 도르래", - "block.create.rotation_speed_controller": "회전 속도 제어기", - "block.create.sail_frame": "캔버스 틀", - "block.create.schematic_table": "설계도 탁자", - "block.create.schematicannon": "설계대포", - "block.create.scoria": "스코리아", - "block.create.scoria_bricks": "스코리아 벽돌", - "block.create.scoria_bricks_slab": "스코리아 벽돌 반 블록", - "block.create.scoria_bricks_stairs": "스코리아 벽돌 계단", - "block.create.scoria_bricks_wall": "스코리아 벽돌 담장", "block.create.scoria_cobblestone": "스코리아 조약돌", "block.create.scoria_cobblestone_slab": "스코리아 조약돌 반 블록", "block.create.scoria_cobblestone_stairs": "스코리아 조약돌 계단", "block.create.scoria_cobblestone_wall": "스코리아 조약돌 담장", - "block.create.scoria_pillar": "스코리아 기둥", - "block.create.secondary_linear_chassis": "이차 선형 연결대", - "block.create.sequenced_gearshift": "순서화 전환기", - "block.create.shadow_steel_casing": "어둠의 틀", - "block.create.shaft": "축", - "block.create.smart_chute": "지능형 도관", - "block.create.smart_fluid_pipe": "지능형 액체관", - "block.create.speedometer": "속도계", - "block.create.spout": "주입기", - "block.create.spruce_window": "가문비나무 판자 창문", - "block.create.spruce_window_pane": "가문비나무 판자 창문판", - "block.create.sticker": "부착기", - "block.create.sticky_mechanical_piston": "기계식 끈끈이 피스톤", - "block.create.stockpile_switch": "물량 감지기", - "block.create.stressometer": "부하계", - "block.create.tiled_glass": "칸 유리", - "block.create.tiled_glass_pane": "칸 유리판", - "block.create.turntable": "회전대", - "block.create.vertical_framed_glass": "세로 틀 유리", - "block.create.vertical_framed_glass_pane": "세로 틀 유리판", - "block.create.warped_window": "뒤틀린 판자 창문", - "block.create.warped_window_pane": "뒤틀린 판자 창문판", - "block.create.water_wheel": "물레바퀴", + "block.create.scoria_bricks_slab": "스코리아 벽돌 반 블록", + "block.create.scoria_bricks_stairs": "스코리아 벽돌 계단", + "block.create.scoria_bricks_wall": "스코리아 벽돌 담장", + "block.create.weathered_limestone": "풍화된 석회암", + "block.create.weathered_limestone_stairs": "풍화된 석회암 계단", + "block.create.weathered_limestone_wall": "풍화된 석회암 담장", + "block.create.weathered_limestone_slab": "풍화된 석회암 반 블록", + "block.create.polished_weathered_limestone": "윤나는 풍화된 석회암", + "block.create.polished_weathered_limestone_slab": "윤나는 풍화된 석회암 반 블록", "block.create.weathered_limestone_bricks": "풍화된 석회암 벽돌", - "block.create.weathered_limestone_bricks_slab": "풍화된 석회암 벽돌 반 블록", "block.create.weathered_limestone_bricks_stairs": "풍화된 석회암 벽돌 계단", "block.create.weathered_limestone_bricks_wall": "풍화된 석회암 벽돌 담장", + "block.create.weathered_limestone_bricks_slab": "풍화된 석회암 벽돌 반 블록", + "block.create.weathered_limestone_pillar": "풍화된 석회암 기둥", + "block.create.layered_weathered_limestone": "이어지는 풍화된 석회암", + "block.create.chiseled_weathered_limestone": "조각된 풍화된 석회암", + "block.create.fancy_weathered_limestone_bricks": "장식된 풍화된 석회암 벽돌", + "block.create.fancy_weathered_limestone_bricks_slab": "장식된 풍화된 석회암 벽돌 반 블록", + "block.create.fancy_weathered_limestone_bricks_stairs": "장식된 풍화된 석회암 벽돌 계단", + "block.create.fancy_weathered_limestone_bricks_wall": "장식된 풍화된 석회암 벽돌 담장", + "block.create.mossy_weathered_limestone": "이끼 낀 풍화된 석회암", + "block.create.overgrown_weathered_limestone": "이끼로 뒤덮힌 풍화된 석회암", + "block.create.paved_weathered_limestone": "포장된 풍화된 석회암", + "block.create.paved_weathered_limestone_slab": "포장된 풍화된 석회암 반 블록", + "block.create.paved_weathered_limestone_stairs": "포장된 풍화된 석회암 계단", + "block.create.paved_weathered_limestone_wall": "포장된 풍화된 석회암 담장", + "block.create.polished_weathered_limestone_stairs": "윤나는 풍화된 석회암 계단", + "block.create.polished_weathered_limestone_wall": "윤나는 풍화된 석회암 담장", "block.create.weathered_limestone_cobblestone": "풍화된 석회암 조약돌", "block.create.weathered_limestone_cobblestone_slab": "풍화된 석회암 조약돌 반 블록", "block.create.weathered_limestone_cobblestone_stairs": "풍화된 석회암 조약돌 계단", "block.create.weathered_limestone_cobblestone_wall": "풍화된 석회암 조약돌 담장", - "block.create.weathered_limestone_pillar": "풍화된 석회암 기둥", - "block.create.weighted_ejector": "발사대", - "block.create.white_sail": "하얀색 캔버스", + + "block.create.tiled_glass": "타일 유리", + "block.create.framed_glass": "큰 유리", + "block.create.vertical_framed_glass": "수직 유리", + "block.create.horizontal_framed_glass": "수평 유리", + "block.create.oak_window": "참나무 유리창", + "block.create.spruce_window": "가문비나무 유리창", + "block.create.birch_window": "자작나무 유리창", + "block.create.jungle_window": "정글나무 유리창", + "block.create.dark_oak_window": "짙은 참나무 유리창", + "block.create.acacia_window": "아카시아 유리창", + "block.create.ornate_iron_window": "장식된 철 유리창", + "block.create.crimson_window": "진홍빛 유리창", + "block.create.warped_window": "뒤틀린 유리창", + + "block.create.tiled_glass_pane": "타일 유리판", + "block.create.framed_glass_pane": "큰 유리판", + "block.create.vertical_framed_glass_pane": "수직 유리판", + "block.create.horizontal_framed_glass_pane": "수평 유리판", + "block.create.oak_window_pane": "참나무 유리판", + "block.create.spruce_window_pane": "가문비나무 유리판", + "block.create.birch_window_pane": "자작나무 유리판", + "block.create.jungle_window_pane": "정글나무 유리판", + "block.create.dark_oak_window_pane": "짙은 참나무 유리판", + "block.create.acacia_window_pane": "아카시아나무 유리판 ", + "block.create.ornate_iron_window_pane": "장식된 철 유리판", + "block.create.crimson_window_pane": "진홍빛 유리판", + "block.create.warped_window_pane": "뒤틀린 유리판", + + "block.create.black_seat": "검은색 좌석", + "block.create.blue_seat": "파란색 좌석", + "block.create.brown_seat": "갈색 좌석", + "block.create.cyan_seat": "청록색 좌석", + "block.create.gray_seat": "회색 좌석", + "block.create.green_seat": "초록색 좌석", + "block.create.light_gray_seat": "회백색 좌석", + "block.create.lime_seat": "연두색 좌석", + "block.create.light_blue_seat": "하늘색 좌석", + "block.create.magenta_seat": "자홍색 좌석", + "block.create.orange_seat": "주황색 좌석", + "block.create.pink_seat": "분홍색 좌석", + "block.create.red_seat": "빨간색 좌석", "block.create.white_seat": "하얀색 좌석", - "block.create.white_valve_handle": "하얀색 밸브 손잡이", - "block.create.windmill_bearing": "풍차 회전장치", - "block.create.wooden_bracket": "나무 지지대", - "block.create.yellow_sail": "노란색 캔버스", "block.create.yellow_seat": "노란색 좌석", + "block.create.purple_seat": "보라색 좌석", + + "block.create.copper_valve_handle": "구리 밸브 손잡이", + "block.create.black_valve_handle": "검은색 밸브 손잡이", + "block.create.blue_valve_handle": "파란색 밸브 손잡이", + "block.create.brown_valve_handle": "갈색 밸브 손잡이", + "block.create.cyan_valve_handle": "청록색 밸브 손잡이", + "block.create.gray_valve_handle": "회색 밸브 손잡이", + "block.create.green_valve_handle": "초록색 밸브 손잡이", + "block.create.light_blue_valve_handle": "하늘색 밸브 손잡이", + "block.create.light_gray_valve_handle": "회백색 밸브 손잡이", + "block.create.lime_valve_handle": "연두색 밸브 손잡이", + "block.create.magenta_valve_handle": "자홍색 밸브 손잡이", + "block.create.orange_valve_handle": "주황색 밸브 손잡이", + "block.create.pink_valve_handle": "분홍색 밸브 손잡이", + "block.create.red_valve_handle": "빨간색 밸브 손잡이", + "block.create.white_valve_handle": "하얀색 밸브 손잡이", "block.create.yellow_valve_handle": "노란색 밸브 손잡이", + "block.create.purple_valve_handle": "보라색 밸브 손잡이", + + "block.create.sail_frame": "풍차 날개 틀", + "block.create.black_sail": "검은색 날개", + "block.create.blue_sail": "파란색 날개", + "block.create.brown_sail": "갈색 날개", + "block.create.cyan_sail": "청록색 날개", + "block.create.gray_sail": "회색 날개", + "block.create.green_sail": "초록색 날개", + "block.create.light_blue_sail": "하늘색 날개", + "block.create.light_gray_sail": "회백색 날개", + "block.create.lime_sail": "연두색 날개", + "block.create.magenta_sail": "자홍색 날개", + "block.create.orange_sail": "주황색 날개", + "block.create.pink_sail": "분홍색 날개", + "block.create.purple_sail": "보라색 날개", + "block.create.red_sail": "빨간색 날개", + "block.create.white_sail": "하얀색 날개", + "block.create.yellow_sail": "노란색 날개", + + "block.create.nixie_tube": "닉시관", + "block.create.black_nixie_tube": "검은색 닉시관", + "block.create.blue_nixie_tube": "파란색 닉시관", + "block.create.brown_nixie_tube": "갈색 닉시관", + "block.create.cyan_nixie_tube": "청록색 닉시관", + "block.create.gray_nixie_tube": "회색 닉시관", + "block.create.green_nixie_tube": "초록색 닉시관", + "block.create.light_blue_nixie_tube": "하늘핵 닉시관", + "block.create.light_gray_nixie_tube": "회백색 닉시관", + "block.create.lime_nixie_tube": "연두색 닉시관", + "block.create.magenta_nixie_tube": "자홍색 닉시관", + "block.create.pink_nixie_tube": "분홍색 닉시관", + "block.create.purple_nixie_tube": "보라샥 닉시관", + "block.create.red_nixie_tube": "빨간색 닉시관", + "block.create.white_nixie_tube": "하얀색 닉시관", + "block.create.yellow_nixie_tube": "노란색 닉시관", + + "block.create.encased_fluid_pipe": "구리 케이스를 씌운 파이프", + "block.create.fluid_pipe": "액체 파이프", + "block.create.fluid_tank": "액체 탱크", + "block.create.fluid_valve": "액체 밸브", + "block.create.glass_fluid_pipe": "액체 파이프", + "block.create.mechanical_pump": "펌프", + "block.create.smart_fluid_pipe": "스마트 액체 파이프", + "block.create.creative_fluid_tank": "크리에이티브 탱크", + "block.create.portable_fluid_interface": "액체 인터페이스", + "block.create.hose_pulley": "호스 도르래", + "block.create.item_drain": "아이템 배수구", + "block.create.spout": "주입기", + + "block.create.creative_motor": "크리에이티브 모터", + "block.create.encased_fan": "선풍기", + "block.create.flywheel": "플라이휠", + "block.create.furnace_engine": "화로 엔진", + "block.create.water_wheel": "물레방아", + "block.create.windmill_bearing": "풍차 베어링", + "block.create.hand_crank": "핸드 크랭크", + + "item.create.belt_connector": "벨트", + "block.create.shaft": "축", + "block.create.belt": "벨트", + "block.create.cogwheel": "톱니바퀴", + "block.create.large_cogwheel": "큰 톱니바퀴", + "block.create.rotation_speed_controller": "회전 속도 컨트롤러", + "block.create.andesite_encased_shaft": "안산암 케이스를 씌운 축", + "block.create.brass_encased_shaft": "황동 케이스를 씌운 축", + + "item.create.vertical_gearbox": "수직 기어박스", + "block.create.gearbox": "기어박스", + "block.create.gearshift": "기어쉬프트", + "block.create.clutch": "클러치", + "block.create.encased_chain_drive": "체인 드라이브", + "block.create.adjustable_chain_gearshift": "벨트 변속기", + "block.create.speedometer": "속도 계측기", + "block.create.stressometer": "피로도 계측기", + + "block.create.linear_chassis": "어두운 직선 섀시", + "block.create.mechanical_bearing": "베어링", + "block.create.clockwork_bearing": "시계 베어링", + "block.create.cart_assembler": "카트 조립기", + "block.create.mechanical_piston": "기계식 피스톤", + "block.create.mechanical_piston_head": "기계식 피스톤 머리", + "block.create.sticky_mechanical_piston": "기계식 끈끈이 피스톤", + "block.create.sticker": "부착기", + "block.create.pulley_magnet": "도르래 자석", + "block.create.radial_chassis": "원형 섀시", + "block.create.secondary_linear_chassis": "밝은 직선 섀시", + "block.create.piston_extension_pole": "피스톤 연장 축", + "block.create.sequenced_gearshift": "순서 기어쉬프트", + "block.create.rope": "밧줄", + "block.create.rope_pulley": "밧줄 도르래", + "block.create.gantry_carriage": "갠트리 운반대", + "block.create.gantry_shaft": "갠트리 축", + + "block.create.millstone": "맷돌", + "block.create.mechanical_mixer": "믹서", + "block.create.mechanical_arm": "기계 팔", + "block.create.mechanical_crafter": "조합기", + "block.create.mechanical_drill": "드릴", + "block.create.mechanical_harvester": "수확기", + "block.create.mechanical_plough": "쟁기", + "block.create.mechanical_press": "압착기", + "block.create.mechanical_saw": "톱", + "block.create.deployer": "배포기", + "block.create.minecart_anchor": "광산 수레 정박기", + "block.create.mysterious_cuckoo_clock": "뻐꾸기 시계?", + "block.create.crushing_wheel": "분쇄 휠", + "block.create.crushing_wheel_controller": "분쇄 휠 컨트롤러", + "block.create.cuckoo_clock": "뻐꾸기 시계", + "block.create.nozzle": "노즐", + "block.create.portable_storage_interface": "아이템 인터페이스", + "block.create.turntable": "돌림판", + "block.create.weighted_ejector": "투척기", + "block.create.content_observer": "정보 감지기", + "block.create.chute": "슈트", + "block.create.smart_chute": "스마트 슈트", + "block.create.basin": "대야", + "block.create.depot": "아이템 거치대", + "block.create.adjustable_crate": "가변 창고", + "block.create.andesite_casing": "안산암 케이스", + "block.create.andesite_funnel": "안산암 퍼널", + "block.create.andesite_belt_funnel": "안산암 퍼널", + "block.create.andesite_tunnel": "안산암 터널", + "block.create.reinforced_rail": "강화된 레일", + "block.create.blaze_burner": "블레이즈 버너", + "block.create.brass_belt_funnel": "황동 퍼널", + "block.create.brass_block": "황동 블록", + "block.create.brass_casing": "황동 케이스", + "block.create.brass_funnel": "황동 퍼널", + "block.create.brass_tunnel": "황동 터널", + + "entity.create.contraption": "구조물", + "entity.create.seat": "좌석", + "entity.create.stationary_contraption": "고정된 구조물", + "entity.create.super_glue": "강력 접착제", + "entity.create.crafting_blueprint": "조합 청사진", + "entity.create.gantry_contraption": "갠트리 구조물", + "entity.create.potato_projectile": "감자포 투사체", + + "item.create.attribute_filter": "속성 필터 틀", + "item.create.furnace_minecart_contraption": "화로가 실린 광산 수레 구조물", + "item.create.chest_minecart_contraption": "상자가 실린 광산 수레 구조물", + "item.create.minecart_contraption": "광산 수레 구조물", + "item.create.minecart_coupling": "광산 수레 커플링", + + + "block.create.powered_latch": "레드스톤 걸쇠", + "block.create.powered_toggle_latch": "레드스톤 토글 걸쇠", + "block.create.pulse_repeater": "펄스 리피터", + "block.create.redstone_contact": "동형 감지기", + "block.create.redstone_link": "레드스톤 링크", + "block.create.adjustable_pulse_repeater": "가변 펄스 리피터", + "block.create.adjustable_repeater": "가변 리피터", + "block.create.analog_lever": "아날로그 레버", + "block.create.stockpile_switch": "수량 스위치", + "block.create.controller_rail": "방향 레일", + + "block.create.creative_crate": "크리에이티브 창고", + "block.create.schematic_table": "청사진 탁자", + "block.create.schematicannon": "청사진 대포", + "item.create.deforester": "산림파괴자", + "item.create.extendo_grip": "외장형 연장 팔", + "item.create.handheld_blockzapper": "휴대용 블록발사기", + "item.create.handheld_worldshaper": "크리에이티브 세계편집기", + "item.create.goggles": "엔지니어의 고글", + "item.create.red_sand_paper": "붉은 사포", + "item.create.sand_paper": "사포", + "item.create.schematic": "청사진", + "item.create.schematic_and_quill": "청사진과 깃펜", + "item.create.empty_schematic": "빈 청사진", + + "block.create.copper_block": "구리 블록", + "block.create.copper_casing": "구리 케이스", + "block.create.copper_ore": "구리 광석", + "block.create.copper_shingles": "구리 판자", + "block.create.copper_tiles": "구리 타일", + "block.create.refined_radiance_casing": "빛나는 케이스", + "block.create.shadow_steel_casing": "그림자 케이스", "block.create.zinc_block": "아연 블록", "block.create.zinc_ore": "아연 광석", - - "entity.create.contraption": "장치", - "entity.create.gantry_contraption": "다리 장치", - "entity.create.seat": "좌석", - "entity.create.stationary_contraption": "고정된 장치", - "entity.create.super_glue": "강력 접착제", - - "fluid.create.milk": "우유", - "fluid.create.potion": "물약", - "fluid.create.tea": "건축가의 차", - "item.create.andesite_alloy": "안산암 합금", - "item.create.attribute_filter": "특성 필터", - "item.create.bar_of_chocolate": "초콜릿 바", - "item.create.belt_connector": "벨트", "item.create.blaze_cake": "블레이즈 케이크", - "item.create.blaze_cake_base": "블레이즈 케이크 빵", - "item.create.brass_hand": "황동제 손", - "item.create.brass_ingot": "황동괴", + "item.create.blaze_cake_base": "블레이즈 케이크 틀", + "item.create.brass_hand": "황동 손", + "item.create.brass_ingot": "황동 주괴", "item.create.brass_nugget": "황동 조각", - "item.create.brass_sheet": "황동판", - "item.create.builders_tea": "건축가의 차", - "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_ingot": "구리괴", + "item.create.brass_sheet": "황동 판", + "item.create.chromatic_compound": "색채 혼합물", + "item.create.cinder_flour": "잿가루", + "item.create.copper_ingot": "구리 주괴", "item.create.copper_nugget": "구리 조각", - "item.create.copper_sheet": "구리판", - "item.create.crafter_slot_cover": "제작 슬롯 덮개", - "item.create.crushed_aluminum_ore": "분쇄된 알루미늄 광석", + "item.create.copper_sheet": "구리 판", + "item.create.crafter_slot_cover": "조합기 슬롯 덮개", "item.create.crushed_brass": "분쇄된 황동", "item.create.crushed_copper_ore": "분쇄된 구리 광석", - "item.create.crushed_gold_ore": "분쇄된 금광석", - "item.create.crushed_iron_ore": "분쇄된 철광석", - "item.create.crushed_lead_ore": "분쇄된 납 광석", - "item.create.crushed_nickel_ore": "분쇄된 니켈 광석", - "item.create.crushed_osmium_ore": "분쇄된 오스뮴 광석", - "item.create.crushed_platinum_ore": "분쇄된 백금 광석", - "item.create.crushed_quicksilver_ore": "분쇄된 수은 광석", - "item.create.crushed_silver_ore": "분쇄된 은광석", - "item.create.crushed_tin_ore": "분쇄된 주석 광석", - "item.create.crushed_uranium_ore": "분쇄된 우라늄 광석", + "item.create.crushed_gold_ore": "분쇄된 금 광석", + "item.create.crushed_iron_ore": "분쇄된 철 광석", "item.create.crushed_zinc_ore": "분쇄된 아연 광석", - "item.create.deforester": "삼림 파괴기", "item.create.dough": "반죽", - "item.create.electron_tube": "진공관", - "item.create.empty_blaze_burner": "비어있는 블레이즈 가열기", - "item.create.empty_schematic": "비어있는 설계도", - "item.create.extendo_grip": "연장용 팔", - "item.create.filter": "필터", - "item.create.furnace_minecart_contraption": "장치를 붙인 화로가 실린 광산 수레", - "item.create.goggles": "공학자의 안경", - "item.create.golden_sheet": "금판", - "item.create.handheld_blockzapper": "휴대용 블록발사기", - "item.create.handheld_worldshaper": "휴대용 세계성형기", - "item.create.honey_bucket": "꿀 양동이", - "item.create.honeyed_apple": "꿀사과", + "item.create.electron_tube": "전지 튜브", + "item.create.empty_blaze_burner": "빈 블레이즈 버너", + "item.create.filter": "필터 틀", + "item.create.golden_sheet": "금 판", "item.create.integrated_circuit": "집적 회로", - "item.create.iron_sheet": "철판", + "item.create.iron_sheet": "철 판", "item.create.lapis_sheet": "청금석 판", - "item.create.minecart_contraption": "장치를 붙인 광산 수레", - "item.create.minecart_coupling": "광산 수레 이음쇠", - "item.create.polished_rose_quartz": "갈아낸 붉은 석영", + "item.create.polished_rose_quartz": "윤나는 장밋빛 석영", "item.create.powdered_obsidian": "흑요석 가루", - "item.create.propeller": "날개", - "item.create.red_sand_paper": "붉은 사포 ", - "item.create.refined_radiance": "섬세한 섬광", - "item.create.rose_quartz": "붉은 석영", - "item.create.sand_paper": "사포", - "item.create.schematic": "설계도", - "item.create.schematic_and_quill": "설계도와 깃펜", - "item.create.shadow_steel": "그림자 금속", + "item.create.propeller": "프로펠러", + "item.create.refined_radiance": "정제된 광채", + "item.create.rose_quartz": "장밋빛 석영", + "item.create.shadow_steel": "그림자 강철", "item.create.super_glue": "강력 접착제", - "item.create.sweet_roll": "스위트롤", "item.create.tree_fertilizer": "나무 비료", - "item.create.vertical_gearbox": "세로 전환장치", "item.create.wand_of_symmetry": "대칭의 지팡이", "item.create.wheat_flour": "밀가루", - "item.create.whisk": "거품기", - "item.create.wrench": "스패너", - "item.create.zinc_ingot": "아연괴", + "item.create.whisk": "혼합기", + "item.create.wrench": "렌치", + "item.create.zinc_ingot": "아연 주괴", "item.create.zinc_nugget": "아연 조각", + "block.create.metal_bracket": "금속 지지대", + "block.create.wooden_bracket": "나무 지지대", + "block.create.lit_blaze_burner": "불타는 빈 블레이즈 버너", + "item.create.precision_mechanism": "정밀 기계장치", + "item.create.potato_cannon": "감자포", + "item.create.linked_controller": "레드스톤 링크 조작기", + "item.create.incomplete_cogwheel": "미완성된 톱니바퀴", + "item.create.incomplete_large_cogwheel": "미완성된 큰 톱니바퀴", + "item.create.incomplete_precision_mechanism": "미완성된 정밀 기계장치", + "item.create.diving_boots": "다이빙 부츠", + "item.create.diving_helmet": "다이빙 헬멧", + "block.create.copper_backtank": "구리 산소통", + "item.create.crafting_blueprint": "조합 청사진", + "item.create.copper_backtank": "구리 산소통", + "block.create.peculiar_bell": "황동 종", + "block.create.lectern_controller": "독서대 조작기", + "block.create.haunted_bell": "귀신들린 종", + "block.create.chocolate": "초콜릿", + "block.create.honey": "꿀", + "fluid.create.chocolate": "초콜릿", + "fluid.create.honey": "꿀", + "fluid.create.milk": "우유", + "fluid.create.potion": "포션", + "fluid.create.tea": "건축가의 차", + "item.create.builders_tea": "건축가의 차", + "item.create.bar_of_chocolate": "초콜릿 바", + "item.create.chocolate_bucket": "초콜릿 양동이", + "item.create.honey_bucket": "꿀 양동이", + "item.create.sweet_roll": "롤빵", + "item.create.chocolate_glazed_berries": "초콜릿 바른 열매", + "item.create.honeyed_apple": "꿀 바른 사과", - "_": "->------------------------] 발전 과제 [------------------------<-", + "enchantment.create.capacity": "저장량", + "enchantment.create.potato_recovery": "대포알 회수", + + "_": "->------------------------] Advancements [------------------------<-", - "advancement.create.root": "크리에이트", - "advancement.create.root.desc": "굉장한 장치들을 만들어볼 시간입니다!", - "advancement.create.andesite_alloy": "특이한 작명센스", - "advancement.create.andesite_alloy.desc": "크리에이트에는 이상한 이름을 가진 재료들이 많습니다. 안산암 합금도 그중 하나이지요.", - "advancement.create.its_alive": "움직인다!", - "advancement.create.its_alive.desc": "동적 장치를 회전하게 만드세요.", - "advancement.create.shifting_gears": "톱니바퀴 변속", - "advancement.create.shifting_gears.desc": "작은 톱니바퀴에 큰 톱니바퀴를 연결하고 회전하게 만드세요. 크기가 다른 톱니바퀴끼리 연결하면, 장치의 속도가 변경됩니다.", - "advancement.create.overstressed": "과부하", - "advancement.create.overstressed.desc": "부하의 한계를 경험하세요.", + "advancement.create.root": "Create!", + "advancement.create.root.desc": "멋진 장치들을 창조할 시간입니다!", + "advancement.create.andesite_alloy": "이게 합금?", + "advancement.create.andesite_alloy.desc": "암석으로도 합금을 만들 수 있나요?", + + "advancement.create.its_alive": "살아 움직이는", + "advancement.create.its_alive.desc": "당신의 첫 장치가 움직입니다!", + "advancement.create.shifting_gears": "톱니바퀴 돌리고!", + "advancement.create.shifting_gears.desc": "크기가 다른 톱니바퀴를 연결하여 장치의 속도를 바꿀 수 있습니다.", + "advancement.create.overstressed": "과부화", + "advancement.create.overstressed.desc": "피로도의 한계를 경험해보세요.", "advancement.create.belt": "켈프 벨트", - "advancement.create.belt.desc": "축 2개에 벨트를 연결하세요.", - "advancement.create.tunnel": "엄폐!", - "advancement.create.tunnel.desc": "벨트를 이용해 터널을 장식하세요.", - "advancement.create.splitter_tunnel": "분할 정복", - "advancement.create.splitter_tunnel.desc": "황동 터널을 일렬로 설치하여 아이템을 나누세요.", - "advancement.create.chute": "아래로 떨어지는", - "advancement.create.chute.desc": "세로로 된 벨트의 역할을 하는 도관을 설치하세요.", + "advancement.create.belt.desc": "두 축에 컨베이어 벨트를 이으세요.", + "advancement.create.tunnel": "벨트 꾸미기", + "advancement.create.tunnel.desc": "터널을 이용해 벨트를 꾸며보세요.", + "advancement.create.splitter_tunnel": "분할 정복 알고리즘", + "advancement.create.splitter_tunnel.desc": "여러 황동 터널을 일렬로 설치해, 아이템을 나누세요.", + "advancement.create.chute": "쏟아져 내려와", + "advancement.create.chute.desc": "수직 벨트역할을 하는 슈트를 설치하세요.", "advancement.create.upward_chute": "바람 납치", - "advancement.create.upward_chute.desc": "도관 속 던진 아이템이 선풍기에 의해 올라가는 것을 관찰하세요.", - "advancement.create.belt_funnel": "퍼널 공정", - "advancement.create.belt_funnel.desc": "벨트나 아이템 거치대 위에 벽에다가 퍼널을 설치하여 특별한 유형의 퍼널을 만드세요.", - "advancement.create.belt_funnel_kiss": "퍼널은 어떻게 태어나?", - "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_water": "세밀한 세척", - "advancement.create.fan_water.desc": "아이템을 세척하는 바람을 느끼세요.", - "advancement.create.fan_smoke": "기계식 풍구", - "advancement.create.fan_smoke.desc": "아이템을 훈연하는 바람을 느끼세요.", - "advancement.create.wrench": "간편한 설정", - "advancement.create.wrench.desc": "장치를 쉽게 설정할 수 있는 스패너를 만드세요.", - "advancement.create.goggles": "부하 확인", - "advancement.create.goggles.desc": "장치의 동적 정보를 쉽게 확인할 수 있는 공학자의 안경을 만드세요.", - "advancement.create.speedometer": "속도를 얼마나 정확하게 측정해?", - "advancement.create.speedometer.desc": "속도계를 설치하고 동력을 공급하세요. 공학자의 안경을 쓰고 관찰하면 정확한 값을 알 수 있습니다.", - "advancement.create.stressometer": "부하를 얼마나 정확하게 측정해?", - "advancement.create.stressometer.desc": "부하계를 설치하고 동력을 공급하세요. 공학자의 안경을 쓰고 관찰하면 정확한 값을 알 수 있습니다.", + "advancement.create.upward_chute.desc": "선풍기를 설치하고, 슈트안에서 아이템이 날아가는 것을 보세요.", + "advancement.create.belt_funnel": "퍼널 깔기", + "advancement.create.belt_funnel.desc": "퍼널을 벨트나 아이템 거치대에 설치하여 특별한 모양을 만들어 보세요.", + "advancement.create.belt_funnel_kiss": "퍼널는 어떻게 태어나?", + "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_water": "축축한 세척", + "advancement.create.fan_water.desc": "아이템을 씻는 바람을 느껴보세요.", + "advancement.create.fan_smoke": "기계 풀무", + "advancement.create.fan_smoke.desc": "아이템을 굽는 바람을 느껴보세요.", + "advancement.create.wrench": "곡괭이여 잘 있거라", + "advancement.create.wrench.desc": "당신의 장치 설계를 도와줄 렌치를 만드세요.", + "advancement.create.goggles": "피로돋보기", + "advancement.create.goggles.desc": "장치에 대한 운동 정보를 가져다 줄 고글을 만드세요.", + "advancement.create.speedometer": "근데 얼마나 빨라?", + "advancement.create.speedometer.desc": "속도 계측기를 작동하세요. 고글을 통해 수치가 얼마나 되는지 보세요.", + "advancement.create.stressometer": "근데 얼마나 피로해?", + "advancement.create.stressometer.desc": "피로도 계측기를 작동하세요. 고글을 통해 수치가 얼마나 되는지 보세요.", "advancement.create.aesthetics": "미적 감각!", - "advancement.create.aesthetics.desc": "축과 액체관, 톱니바퀴에다 지지대를 설치하세요.", + "advancement.create.aesthetics.desc": "축, 파이프, 톱니바퀴에 지지대를 설치하세요.", "advancement.create.reinforced": "튼튼 보강!", - "advancement.create.reinforced.desc": "축과 액체관, 벨트에다 어울리는 틀을 씌우세요.", - "advancement.create.water_wheel": "수력 활용", - "advancement.create.water_wheel.desc": "물레바퀴를 설치하고 회전하게 만드세요!", - "advancement.create.chocolate_wheel": "달콤한 동력", - "advancement.create.chocolate_wheel.desc": "물레바퀴를 녹은 초콜릿으로 회전하게 만드세요!.", - "advancement.create.lava_wheel": "불레바퀴", - "advancement.create.lava_wheel.desc": "물레바퀴를 용암으로 회전하게 만드세ㅇ... 어? 작동하면 안 되는데...", + "advancement.create.reinforced.desc": "축, 파이프, 벨트에 적절한 케이스를 씌우세요.", + "advancement.create.water_wheel": "수력 동력화", + "advancement.create.water_wheel.desc": "물레방아를 설치하고 회전하게 만드세요!", + "advancement.create.chocolate_wheel": "초콜릿방아", + "advancement.create.chocolate_wheel.desc": "녹은 초콜릿으로 물레방아를 돌리세요.", + "advancement.create.lava_wheel": "불레방아", + "advancement.create.lava_wheel.desc": "용암으로 물레바퀴를 회전하게 만드세ㅇ... 어?", "advancement.create.cuckoo": "벌써 이렇게나 시간이 지났어?", - "advancement.create.cuckoo.desc": "밤을 알리고 있는 뻐꾸기시계를 관찰하세요.", - "advancement.create.millstone": "작은 분쇄기", - "advancement.create.millstone.desc": "맷돌을 설치하고 동력을 공급하세요.", - "advancement.create.windmill": "산들바람", - "advancement.create.windmill.desc": "풍차를 가동하세요.", - "advancement.create.maxed_windmill": "거센바람", - "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": "눌러! 쾅!", - "advancement.create.press.desc": "기계식 압착기에 동력을 공급하여 재료를 판으로 만드세요.", - "advancement.create.polished_rose_quartz": "적색 다이아몬드", - "advancement.create.polished_rose_quartz.desc": "사포를 사용하여 붉은 석영을 투명해질 때까지 가세요.", - "advancement.create.electron_tube": "삐뽀삐뽀!", - "advancement.create.electron_tube.desc": "진공관을 만드세요. 진공관은 덜 원시적인 기계에 쓰입니다.", - "advancement.create.mechanical_saw": "회전하는 벌목기", - "advancement.create.mechanical_saw.desc": "기계식 톱을 설치하고 동력을 공급하세요.", - "advancement.create.basin": "커다란 대야", + "advancement.create.cuckoo.desc": "뻐꾸기 시계가 잘 시간을 알립니다. 잘 자...", + "advancement.create.millstone": "나만의 작은 분쇄기", + "advancement.create.millstone.desc": "멧돌을 설치하고 작동시키세요.", + "advancement.create.windmill": "산들 바람", + "advancement.create.windmill.desc": "풍차 베어링을 작동시키세요.", + "advancement.create.maxed_windmill": "거센 바람", + "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": "'깡!'", + "advancement.create.press.desc": "프레스를 만들고 금속 판을 만들어보세요.", + "advancement.create.polished_rose_quartz": "장밋빛 다이아몬드", + "advancement.create.polished_rose_quartz.desc": "장밋빛 석영을 투명해지도록 열심히 사포질하세요.", + "advancement.create.electron_tube": "삐-빅", + "advancement.create.electron_tube.desc": "전지 튜브를 만드세요. 발전된 장치들에 쓰입니다.", + "advancement.create.mechanical_saw": "벌목기 작동", + "advancement.create.mechanical_saw.desc": "톱을 설치하고 작동시키세요.", + "advancement.create.basin": "대야 시스템", "advancement.create.basin.desc": "대야를 설치하고 아이템을 던져보세요.", - "advancement.create.mixer": "섞어!", - "advancement.create.mixer.desc": "기계식 믹서기를 대야 위에 설치하고, 동력을 공급하여 재료들을 섞으세요.", - "advancement.create.blaze_burner": "살아있는 난로", - "advancement.create.blaze_burner.desc": "블레이즈 가열기를 얻으세요.", - "advancement.create.compact": "기계식 압축", - "advancement.create.compact.desc": "대야에 있는 작은 재료들을 압축하세요.", - "advancement.create.brass": "황금빛 합금", - "advancement.create.brass.desc": "분쇄된 구리와 분쇄된 아연으로 황동을 만드세요.", + "advancement.create.mixer": "섞고 돌리고 섞고", + "advancement.create.mixer.desc": "대야 위에 믹서를 설치하고, 작동시켜 재료를 만드세요.", + "advancement.create.blaze_burner": "살아있는 불", + "advancement.create.blaze_burner.desc": "블레이즈 버너를 얻으세요.", + "advancement.create.compact": "자동 압축", + "advancement.create.compact.desc": "대야와 압착기를 이용하서 아이템을 섞어보세요.", + + "advancement.create.brass": "진짜 합금", + "advancement.create.brass.desc": "구리와 아연을 가지고 황동을 만드세요.", "advancement.create.brass_casing": "황동기 시대", - "advancement.create.brass_casing.desc": "새로 얻은 황동과 나무를 사용하여 고급 틀을 만드세요.", - "advancement.create.copper_casing": "구리기 시대", - "advancement.create.copper_casing.desc": "구리판과 나무를 사용하여 구리 틀을 만드세요.", - "advancement.create.spout": "쪼르륵", + "advancement.create.brass_casing.desc": "새롭게 얻은 황동과 나무를 가지고 업그레이드된 케이스를 만드세요.", + "advancement.create.copper_casing": "구리 시대", + "advancement.create.copper_casing.desc": "구리 판을 이용해 구리 케이스를 만드세요.", + "advancement.create.spout": "쪼르록", "advancement.create.spout.desc": "주입기를 사용하여 아이템에 액체를 채우세요.", - "advancement.create.spout_potion": "양조장", + "advancement.create.spout_potion": "대규모 양조", "advancement.create.spout_potion.desc": "주입기를 사용하여 유리병에 물약을 채우세요.", - "advancement.create.chocolate": "상상 속 세계", - "advancement.create.chocolate.desc": "녹은 초콜릿이 담긴 양동이를 얻으세요.", - "advancement.create.item_drain": "아래로 쏟아지는", - "advancement.create.item_drain.desc": "흡수통이 액체가 담긴 아이템을 흡수하는 것을 관찰하세요.", - "advancement.create.chained_item_drain": "굴러!", - "advancement.create.chained_item_drain.desc": "연결된 여러 개의 흡수통 위에서 구르는 아이템을 관찰하세요.", + "advancement.create.chocolate": "상상의 세계", + "advancement.create.chocolate.desc": "초콜릿 양동이를 얻으세요.", + "advancement.create.item_drain": "회전 배수", + "advancement.create.item_drain.desc": "아이템 배수구가 액체를 비우는 것을 보세요.", + "advancement.create.chained_item_drain": "구른다!", + "advancement.create.chained_item_drain.desc": "아이템이 여러 배수구 위를 굴러가는 것을 보세요.", "advancement.create.glass_pipe": "액체 엿보기", - "advancement.create.glass_pipe.desc": "액체가 유리창 액체관을 통해 전송되는 것을 관찰하세요. 곧은 액체관에 스패너를 사용하면 유리창 액체관이 됩니다.", + "advancement.create.glass_pipe.desc": "액체가 창이 달린 파이프를 지나는 것을 보세요. 직선 파이프에 렌치로 우클릭하면 창문이 생깁니다.", "advancement.create.pipe_collision": "그 액체를 섞지 마오", "advancement.create.pipe_collision.desc": "액체관에서 두 가지 액체가 만나는 것을 관찰하세요.", - "advancement.create.pipe_spill": "물 샌다!", - "advancement.create.pipe_spill.desc": "액체관의 구멍에서 액체를 흡수하거나, 배출하는 것을 관찰하세요.", - "advancement.create.hose_pulley": "누출 사고", - "advancement.create.hose_pulley.desc": "액체관 도르래가 호스를 내려 액체를 흡수하거나, 배출하는 것을 관찰하세요.", - "advancement.create.infinite_water": "바다 흡수", - "advancement.create.infinite_water.desc": "무한하다고 간주되는 거대한 수역을 흡수하세요.", - "advancement.create.infinite_lava": "외핵 흡수", - "advancement.create.infinite_lava.desc": "무한하다고 간주되는 거대한 용암 바다를 흡수하세요.", - "advancement.create.infinite_chocolate": "상상 속으로!", - "advancement.create.infinite_chocolate.desc": "무한하다고 간주되는 거대한 초콜릿 퐁듀를 흡수하세요.", + "advancement.create.pipe_spill": "누출 사고", + "advancement.create.pipe_spill.desc": "파이프 끝을 열어 액체가 밖으로 나오는 것을 보세요.", + "advancement.create.hose_pulley": "공업 펌프", + "advancement.create.hose_pulley.desc": "호스 도르래를 사용하여 액체를 채우거나 빨아들이세요.", + "advancement.create.infinite_water": "바다를 흡수하다", + "advancement.create.infinite_water.desc": "무한으로 인식되는 물 웅덩이에서 물을 끌어올리세요.", + "advancement.create.infinite_lava": "지옥을 흡수하다", + "advancement.create.infinite_lava.desc": "무한으로 인식되는 용암 웅덩이에서 용암을 끌어올리세요.", + "advancement.create.infinite_chocolate": "상상 속에 잠기다", + "advancement.create.infinite_chocolate.desc": "무한으로 인식되는 초콜릿 웅덩이에서 초콜릿을 끌어올리세요.", + "advancement.create.crafter": "자동 조합", - "advancement.create.crafter.desc": "기계식 제작기를 설치하고 동력을 공급하세요.", - "advancement.create.clockwork_bearing": "시계장치", - "advancement.create.clockwork_bearing.desc": "시계 회전장치를 가동하세요.", - "advancement.create.nixie_tube": "스타일의 표시", - "advancement.create.nixie_tube.desc": "표시등을 설치하세요.", - "advancement.create.deployer": "만들고, 설치하고, 공격!", - "advancement.create.deployer.desc": "전개장치를 설치하고 동력을 공급하세요. 사람의 손을 완벽하게 본뜬 장치입니다.", - "advancement.create.speed_controller": "마음대로", - "advancement.create.speed_controller.desc": "궁극적인 장치, 회전 속도 제어기를 설치하세요.", + "advancement.create.crafter.desc": "기계식 조합기를 설치하고 작동시키세요.", + "advancement.create.clockwork_bearing": "시계 제작", + "advancement.create.clockwork_bearing.desc": "시계 베어링에 구조물을 달고 작동시키세요.", + "advancement.create.nixie_tube": "나는 스타일있게 표시해", + "advancement.create.nixie_tube.desc": "닉시관을 만들고 설치하세요.", + "advancement.create.deployer": "찌르고, 설치하고, 공격!", + "advancement.create.deployer.desc": "당신의 분신, 배포기를 설치하고 작동시키세요.", + "advancement.create.fist_bump": "하이파이브!", + "advancement.create.fist_bump.desc": "두 배포기를 서로 부딫치게 하세요.", + "advancement.create.crushing_wheel": "한 쌍의 거인들", + "advancement.create.crushing_wheel.desc": "더 많은 재료를 더 효율적으로 갈 분쇄 휠을 만드세요.", + "advancement.create.speed_controller": "엔지니어들이 이 장치를 싫어합니다", + "advancement.create.speed_controller.desc": "궁극의 회전속도 변경장치, 회전 속도 컨트롤러를 설치하세요.", "advancement.create.flywheel": "공장의 심장", - "advancement.create.flywheel.desc": "원동기를 회전바퀴에 성공적으로 연결하세요.", - "advancement.create.overstress_flywheel": "엄청난 부하", - "advancement.create.overstress_flywheel.desc": "화로 원동기를 과부하되게 만드세요", - "advancement.create.integrated_circuit": "복합한 계산", - "advancement.create.integrated_circuit.desc": "집적 회로를 조립하세요.", + "advancement.create.flywheel.desc": "화로엔진에 플라이휠을 연결하세요.", + "advancement.create.overstress_flywheel": "정말정말 높은 피로", + "advancement.create.overstress_flywheel.desc": "화로 엔진을 과부하하세요.", + "advancement.create.integrated_circuit": "복잡한 계산", + "advancement.create.integrated_circuit.desc": "집적 회로를 제작하세요.", "advancement.create.mechanical_arm": "바쁘다 바빠!", - "advancement.create.mechanical_arm.desc": "기계식 팔을 제작하고, 입력구와 출력구를 선택하고, 설치한 후 동력을 공급한 다음, 작업이 수행되는 것을 관찰하세요.", - "advancement.create.musical_arm": "흥이 넘친다!", - "advancement.create.musical_arm.desc": "기계식 팔이 주크박스에 음반을 넣는 것을 관찰하세요.", - "advancement.create.arm_many_targets": "체계화 프로그램", - "advancement.create.arm_many_targets.desc": "기계식 팔에 10개 이상의 출력부를 설정하세요.", - "advancement.create.arm_blaze_burner": "연소 프로그램", - "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.chromatic_compound": "양극성 자원", - "advancement.create.chromatic_compound.desc": "혼돈의 혼합물을 만드세요.", + "advancement.create.mechanical_arm.desc": "기계 팔을 조합하고, 입력부와 출력부를 정하고, 설치한 다음 돌리세요. 그리고 그것이 작동하는 것을 보세요.", + "advancement.create.musical_arm": "볼륨 최대로!", + "advancement.create.musical_arm.desc": "기계 팔이 주크박스를 작동시키는 것을 보세요.", + "advancement.create.arm_many_targets": "정리를 할 수 있는 정도의 능력", + "advancement.create.arm_many_targets.desc": "기계 팔에 10개 이상의 출력부를 설정하세요.", + "advancement.create.arm_blaze_burner": "연료를 줄 수 있는 정도의 능력", + "advancement.create.arm_blaze_burner.desc": "기계 팔이 블레이즈 버너에 연료를 넣도록 하세요.", + "advancement.create.chromatic_compound": "양극성 재료", + "advancement.create.chromatic_compound.desc": "색채 혼합물를 만드세요.", "advancement.create.shadow_steel": "공허에서의 복귀", - "advancement.create.shadow_steel.desc": "혼돈의 혼합물에 세계 밖의 어둠을 노출하여 무의 금속, 어둠의 강철을 만드세요.", + "advancement.create.shadow_steel.desc": "무의 금속, 그림자 강철을 생성하세요.", "advancement.create.refined_radiance": "빛으로부터의 자극", - "advancement.create.refined_radiance.desc": "혼돈의 혼합물에 신호기의 빛을 쐬어 강렬한 색채를 지닌 물질, 섬세한 섬광을 만드세요.", - "advancement.create.chromatic_age": "극과 극", - "advancement.create.chromatic_age.desc": "빛과 어둠의 틀을 만드세요.", - "advancement.create.zapper": "새로운 건축 방식", - "advancement.create.zapper.desc": "휴대용 블록발사기 만드세요. 건축을 도와주는 빛의 레이저 총입니다.", - "advancement.create.upgraded_zapper": "빛의 강화", - "advancement.create.upgraded_zapper.desc": "완전히 강화된 휴대용 블록발사기를 사용해 보세요.", - "advancement.create.wand_of_symmetry": "빛의 거울", + "advancement.create.refined_radiance.desc": "강력한 색채 물질, 정제된 빛을 생성하세요.", + "advancement.create.chromatic_age": "양극 시대", + "advancement.create.chromatic_age.desc": "빛과 어둠의 케이스를 제작하세요.", + "advancement.create.blaze_cake": "폭주", + "advancement.create.blaze_cake.desc": "블레이즈 버너에게 줄 특별한 케이크를 만드세요.", + "advancement.create.extendo_grip": "띠요오옹!", + "advancement.create.extendo_grip.desc": "외장형 연장 팔을 손에 쥐세요.", + "advancement.create.dual_extendo_grip": "궁극의 띠용!", + "advancement.create.dual_extendo_grip.desc": "쌍으로 외장형 연장 팔을 들어 인간을 뛰어넘은 사거리를 가지세요.", + "advancement.create.potato_cannon": "퐁!", + "advancement.create.potato_cannon.desc": "감자포로 적을 처치하세요.", + "advancement.create.precision_mechanism": "복잡한 호기심", + "advancement.create.precision_mechanism.desc": "정밀 기계장치를 조립하세요.", + + "advancement.create.zapper": "나는 스타일있게 건축해", + "advancement.create.zapper.desc": "당신의 건축을 도와줄 멋진 레이저 건, 휴대용 블록발사기를 만드세요.", + "advancement.create.upgraded_zapper": "화려한 빛이 날 감싸네", + "advancement.create.upgraded_zapper.desc": "완전히 업그레이드된 휴대용 블록발사기를 만들고 써보세요.", + "advancement.create.wand_of_symmetry": "빛나는 건축", "advancement.create.wand_of_symmetry.desc": "대칭의 지팡이를 만드세요.", - "advancement.create.deforester": "빛의 벌목", - "advancement.create.deforester.desc": "삼림 파괴기를 만들고. 근처에 있는 숲에 작별 인사를 하세요.", - "advancement.create.extendo_grip": "띠요오용!", - "advancement.create.extendo_grip.desc": "연장용 팔을 손에 쥐세요.", - "advancement.create.dual_extendo_grip": "궁극의 띠용시대", - "advancement.create.dual_extendo_grip.desc": "연장용 팔을 이중으로 손에 쥐어 초인으로의 한 발짝을 내딛으세요.", - "advancement.create.eob": "베타의 끝", - "advancement.create.eob.desc": "이후에 나올 업데이트를 기대해주세요. <3", + "advancement.create.deforester": "빛나는 벌목", + "advancement.create.deforester.desc": "산림파괴자를 만들고, 숲에게 작별인사를 하세요.", + + "advancement.create.eob": "End of Beta", + "advancement.create.eob.desc": "이후 업데이트를 기다려주세요. <3", + "_": "->------------------------] UI & Messages [------------------------<-", - "_": "->------------------------] UI & 메시지 [------------------------<-", + "itemGroup.create.base": "Create", + "itemGroup.create.palettes": "Create 팔레트", - "itemGroup.create.base": "크리에이트 공학", - "itemGroup.create.palettes": "크리에이트 블록", - - "death.attack.create.crush": "%1$s이(가) 분쇄용 바퀴에 갈려나갔습니다", + "death.attack.create.crush": "%1$s이(가) 분쇄 휠로 가공되었습니다", + "death.attack.create.crush.player": "%1$s이(가) %2$s 때문에 분쇄 휠에서 가공되었습니다", "death.attack.create.fan_fire": "%1$s이(가) 뜨거운 바람에 익어버렸습니다", - "death.attack.create.fan_lava": "%1$s이(가) 불길 같은 바람에 구워졌습니다", - "death.attack.create.mechanical_drill": "%1$s이(가) 기계식 드릴에 관통당했습니다", - "death.attack.create.mechanical_saw": "%1$s이(가) 기계식 톱에 의해 반으로 잘려 나갔습니다", - "death.attack.create.cuckoo_clock_explosion": "%1$s이(가) 변경된 뻐꾸기시계에 의해 폭파당했습니다", + "death.attack.create.fan_fire.player": "%1$s이(가) %2$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.potato_cannon": "%1$s이(가) %2$s의 감자포에 맞고 죽었습니다.", + "death.attack.create.potato_cannon.item": "%1$s이(가) %3$s을(를) 사용한 %2$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.block.deployer.damage_source_name": "배포기", + "create.block.cart_assembler.invalid": "카트조립기를 레일 위에 설치하세요", + + "create.menu.return": "메뉴로 돌아가기", + "create.menu.configure": "설정...", + "create.menu.ponder_index": "분석 메뉴", + "create.menu.only_ingame": "일시 정지 메뉴에서 가능합니다", + "create.menu.project_page": "Curseforge 페이지", + "create.menu.report_bugs": "버그 제보하기", + "create.menu.support": "후원하기", "create.recipe.crushing": "분쇄", "create.recipe.milling": "제분", "create.recipe.fan_washing": "세척", - "create.recipe.fan_washing.fan": "물과 공업용 선풍기", + "create.recipe.fan_washing.fan": "물과 선풍기", "create.recipe.fan_smoking": "훈연", - "create.recipe.fan_smoking.fan": "불과 공업용 선풍기", + "create.recipe.fan_smoking.fan": "불과 선풍기", "create.recipe.fan_blasting": "제련", - "create.recipe.fan_blasting.fan": "용암과 공업용 선풍기", + "create.recipe.fan_blasting.fan": "용암과 선풍기", "create.recipe.pressing": "압착", "create.recipe.mixing": "혼합", - "create.recipe.automatic_shapeless": "기계식 제작 (믹서기)", - "create.recipe.automatic_brewing": "기계식 양조", + "create.recipe.automatic_shapeless": "무형 자동 조합", + "create.recipe.automatic_brewing": "자동 양조", "create.recipe.packing": "압축", - "create.recipe.automatic_packing": "기계식 압축", - "create.recipe.sawing": "톱질", - "create.recipe.mechanical_crafting": "기계식 제작", - "create.recipe.automatic_shaped": "기계식 제작 (제작기)", + "create.recipe.automatic_packing": "자동 압축", + "create.recipe.sawing": "제재", + "create.recipe.mechanical_crafting": "기계 조합", + "create.recipe.automatic_shaped": "유형 자동 조합", "create.recipe.block_cutting": "블록 절단", "create.recipe.wood_cutting": "나무 절단", - "create.recipe.blockzapper_upgrade": "휴대용 블록발사기", + "create.recipe.blockzapper_upgrade": "휴대용 블록발사기 업그레이드", "create.recipe.sandpaper_polishing": "사포질", - "create.recipe.mystery_conversion": "불가사의한 변환", + "create.recipe.mystery_conversion": "?", "create.recipe.spout_filling": "채우기", - "create.recipe.draining": "흡수", + "create.recipe.draining": "배수", + "create.recipe.sequenced_assembly": "순서 조립", + "create.recipe.assembly.next": "다음 단계: %1$s", + "create.recipe.assembly.step": "단계 %1$s:", + "create.recipe.assembly.progress": "진행도: %1$s/%2$s", + "create.recipe.assembly.pressing": "압착하기", + "create.recipe.assembly.spout_filling_fluid": "%1$s 주입하기", + "create.recipe.assembly.deploying_item": "%1$s 사용하기", + "create.recipe.assembly.cutting": "톱으로 자르기", + "create.recipe.assembly.repeat": "%1$s번 반복하기", + "create.recipe.assembly.junk": "조립 실패한 조각들", "create.recipe.processing.chance": "%1$s%% 확률", - "create.recipe.heat_requirement.none": "가열기가 필요하지 않습니다", - "create.recipe.heat_requirement.heated": "가열", - "create.recipe.heat_requirement.superheated": "초가열", + "create.recipe.heat_requirement.none": "열이 필요하지 않음", + "create.recipe.heat_requirement.heated": "가열됨", + "create.recipe.heat_requirement.superheated": "초고온 가열됨", "create.generic.range": "범위", - "create.generic.radius": "반경", + "create.generic.radius": "반지름", "create.generic.width": "폭", "create.generic.height": "높이", "create.generic.length": "길이", "create.generic.speed": "속도", - "create.generic.delay": "지연", + "create.generic.delay": "딜레이", "create.generic.unit.ticks": "틱", "create.generic.unit.seconds": "초", "create.generic.unit.minutes": "분", - "create.generic.unit.rpm": "RPM / 분당 회전수", - "create.generic.unit.stress": " 부하", + "create.generic.unit.rpm": "RPM", + "create.generic.unit.stress": "su", "create.generic.unit.degrees": "°", - "create.generic.unit.millibuckets": "%1$s 밀리양동이", + "create.generic.unit.millibuckets": "%1$smB", "create.generic.clockwise": "시계 방향", - "create.generic.counter_clockwise": "반시계 방향", + "create.generic.counter_clockwise": "시계 반대 방향", - "create.action.scroll": "스크롤", + "create.action.scroll": "스크롤하세요", "create.action.confirm": "확인", "create.action.abort": "중단", "create.action.saveToFile": "저장", "create.action.discard": "삭제", - "create.keyinfo.toolmenu": "집중", - "create.keyinfo.scrollup": "마우스 휠을 위로 이동 (세계에서)", - "create.keyinfo.scrolldown": "마우스 휠을 아래로 이동 (세계에서)", + "create.keyinfo.toolmenu": "메뉴 세부정보 보기", + "create.keyinfo.scrollup": "마우스 휠을 위로 이동 (인게임에서)", + "create.keyinfo.scrolldown": "마우스 휠을 아래로 이동 (인게임에서)", - "create.gui.scrollInput.defaultTitle": "옵션 선택:", - "create.gui.scrollInput.scrollToModify": "스크롤로 수정할 수 있습니다", - "create.gui.scrollInput.scrollToAdjustAmount": "스크롤로 수량을 조절할 수 있습니다", - "create.gui.scrollInput.scrollToSelect": "스크롤로 선택할 수 있습니다", - "create.gui.scrollInput.shiftScrollsFaster": "Shift을(를) 누르고 스크롤하면 빠르게 이동합니다", - "create.gui.toolmenu.focusKey": "[%1$s]을(를) 누르면 집중합니다", - "create.gui.toolmenu.cycle": "[스크롤]하면 모드를 변경합니다", + "create.gui.scrollInput.defaultTitle": "옵션을 선택하세요:", + "create.gui.scrollInput.scrollToModify": "스크롤로 수정하기", + "create.gui.scrollInput.scrollToAdjustAmount": "스크롤로 수량 조절하기", + "create.gui.scrollInput.scrollToSelect": "스크롤로 선택", + "create.gui.scrollInput.shiftScrollsFaster": "쉬프트-스크롤로 빨리 수정하기", + "create.gui.toolmenu.focusKey": "[%1$s]를 눌러 세부정보 보기", + "create.gui.toolmenu.cycle": "스크롤로 순환", "create.gui.symmetryWand.mirrorType": "거울의 형태", "create.gui.symmetryWand.orientation": "거울의 방향", - "create.symmetry.mirror.plane": "기본", + "create.symmetry.mirror.plane": "거울", "create.symmetry.mirror.doublePlane": "사각형", "create.symmetry.mirror.triplePlane": "팔각형", - "create.orientation.orthogonal": "직각", - "create.orientation.diagonal": "대각", - "create.orientation.horizontal": "가로", - "create.orientation.alongZ": "Z 좌표", - "create.orientation.alongX": "X 좌표", + "create.orientation.orthogonal": "수직으로", + "create.orientation.diagonal": "대각선으로", + "create.orientation.horizontal": "수평으로", + "create.orientation.alongZ": "Z좌표를 따라", + "create.orientation.alongX": "X좌표를 따라", - "create.gui.blockzapper.title": "휴대용 블록발사기", - "create.gui.blockzapper.replaceMode": "대체 모드", - "create.gui.blockzapper.searchDiagonal": "대각선으로 연결된 블록 포함", - "create.gui.blockzapper.searchFuzzy": "블록 간의 경계 무시", - "create.gui.blockzapper.range": "설치 범위", - "create.gui.blockzapper.needsUpgradedAmplifier": "증폭기를 강화해야 사용할 수 있습니다", - "create.gui.blockzapper.patternSection": "모양", - "create.gui.blockzapper.pattern.solid": "기본", - "create.gui.blockzapper.pattern.checkered": "체스판 모양", - "create.gui.blockzapper.pattern.inversecheckered": "반전된 체스판 모양", - "create.gui.blockzapper.pattern.chance25": "밀도 25%", - "create.gui.blockzapper.pattern.chance50": "밀도 50%", - "create.gui.blockzapper.pattern.chance75": "밀도 75%", - "create.gui.terrainzapper.title": "휴대용 세계성형기", - "create.gui.terrainzapper.placement": "기준", - "create.gui.terrainzapper.placement.merged": "중간", - "create.gui.terrainzapper.placement.attached": "밖", - "create.gui.terrainzapper.placement.inserted": "안", - "create.gui.terrainzapper.brush": "형태", - "create.gui.terrainzapper.brush.cuboid": "직육면체", - "create.gui.terrainzapper.brush.sphere": "구체", + "create.gui.terrainzapper.title": "크리에이티브 세계편집기", + "create.gui.terrainzapper.searchDiagonal": "대각선 블록 포함", + "create.gui.terrainzapper.searchFuzzy": "물질 경계 무시", + "create.gui.terrainzapper.patternSection": "패턴", + "create.gui.terrainzapper.pattern.solid": "기본", + "create.gui.terrainzapper.pattern.checkered": "체스판", + "create.gui.terrainzapper.pattern.inversecheckered": "반전된 체스판", + "create.gui.terrainzapper.pattern.chance25": "랜덤하게 25% 채우기", + "create.gui.terrainzapper.pattern.chance50": "랜덤하게 50% 채우기", + "create.gui.terrainzapper.pattern.chance75": "랜덤하게 75% 채우기", + "create.gui.terrainzapper.placement": "설치 기준", + "create.gui.terrainzapper.placement.merged": "선택한 블록에", + "create.gui.terrainzapper.placement.attached": "선택한 블록 밖에", + "create.gui.terrainzapper.placement.inserted": "선택한 블록 안에", + "create.gui.terrainzapper.brush": "브러쉬", + "create.gui.terrainzapper.brush.cuboid": "정육면체", + "create.gui.terrainzapper.brush.sphere": "구", "create.gui.terrainzapper.brush.cylinder": "원기둥", - "create.gui.terrainzapper.tool": "방식", + "create.gui.terrainzapper.brush.surface": "면", + "create.gui.terrainzapper.brush.cluster": "원", + "create.gui.terrainzapper.tool": "설치 방식", "create.gui.terrainzapper.tool.fill": "채우기", "create.gui.terrainzapper.tool.place": "설치하기", - "create.gui.terrainzapper.tool.replace": "대체하기", + "create.gui.terrainzapper.tool.replace": "대체", "create.gui.terrainzapper.tool.clear": "지우기", "create.gui.terrainzapper.tool.overlay": "덮어씌우기", "create.gui.terrainzapper.tool.flatten": "다듬기", - "create.terrainzapper.shiftRightClickToSet": "Shift-오른쪽 버튼으로 모양을 선택할 수 있습니다", + "create.terrainzapper.shiftRightClickToSet": "쉬프트-우클릭으로 모양 설정하기", + "create.terrainzapper.usingBlock": "사용 중: %1$s", + "create.terrainzapper.leftClickToSet": "좌클릭으로 재료로 쓸 블록을 선택하세요", - "create.blockzapper.usingBlock": "사용 중: %1$s", - "create.blockzapper.componentUpgrades": "부품:", - "create.blockzapper.component.body": "몸체", - "create.blockzapper.component.amplifier": "증폭기", - "create.blockzapper.component.accelerator": "가속장치", - "create.blockzapper.component.retriever": "회수장치", - "create.blockzapper.component.scope": "스코프", - "create.blockzapper.componentTier.none": "없음", - "create.blockzapper.componentTier.brass": "황동", - "create.blockzapper.componentTier.chromatic": "혼돈", - "create.blockzapper.leftClickToSet": "왼쪽 버튼으로 블록을 선택할 수 있습니다", - "create.blockzapper.empty": "블록이 인벤토리에 없습니다!", - - "create.minecart_coupling.two_couplings_max": "2개 이상의 이음쇠를 연결할 수는 없습니다", - "create.minecart_coupling.unloaded": "일부분이 불러와지지 않은 청크에 있는 것 같습니다", - "create.minecart_coupling.no_loops": "고리 모양으로 연결할 수는 없습니다", - "create.minecart_coupling.removed": "이 광산 수레에 연결되어 있는 이음쇠를 전부 제거했습니다", - "create.minecart_coupling.too_far": "너무 멀리 떨어져 있습니다", + "create.minecart_coupling.two_couplings_max": "광산 수레는 최대 2개의 커플링만 가질 수 있습니다", + "create.minecart_coupling.unloaded": "열차 일부분이 로딩되지 않은 청크에 있는 것 같습니다", + "create.minecart_coupling.no_loops": "커플링은 반복할 수 없습니다", + "create.minecart_coupling.removed": "광산 수레에서 모든 커플링을 제거했습니다.", + "create.minecart_coupling.too_far": "광산 수레들이 너무 멀리 떨어져 있습니다", "create.contraptions.movement_mode": "이동 설정", - "create.contraptions.movement_mode.move_place": "부착된 블록이 멈춰있을 때만 설치되어 있게 됨", - "create.contraptions.movement_mode.move_place_returned": "부착된 블록이 시작 위치에서만 설치되어 있게 됨", - "create.contraptions.movement_mode.move_never_place": "부착기가 파괴되었을 때만 부착된 블록이 설치되어 있게 됨", - "create.contraptions.movement_mode.rotate_place": "부착된 블록이 멈춰있을 때만 설치되어 있게 됨", - "create.contraptions.movement_mode.rotate_place_returned": "부착된 블록이 초기 각도 근처에서만 설치되어 있게 됨", - "create.contraptions.movement_mode.rotate_never_place": "부착기가 파괴되었을 때만 부착된 블록이 설치되어 있게 됨", - "create.contraptions.cart_movement_mode": "수레 장치 설정", - "create.contraptions.cart_movement_mode.rotate": "방향 회전", - "create.contraptions.cart_movement_mode.rotate_paused": "수레의 방향이 바뀌면 장치가 정지", - "create.contraptions.cart_movement_mode.rotation_locked": "방향 고정", + "create.contraptions.movement_mode.move_place": "멈췄을때 항상 블록이 설치됨", + "create.contraptions.movement_mode.move_place_returned": "멈췄을때 시작 위치에서만 블록이 설치됨", + "create.contraptions.movement_mode.move_never_place": "멈춰도 블록을 설치하지 않음", + "create.contraptions.movement_mode.rotate_place": "멈췄을때 항상 블록이 설치됨", + "create.contraptions.movement_mode.rotate_place_returned": "멈췄을때 시작 위치에서만 블록이 설치됨", + "create.contraptions.movement_mode.rotate_never_place": "멈춰도 블록을 설치하지 않음", + "create.contraptions.cart_movement_mode": "수레 장치 이동 설정", + "create.contraptions.cart_movement_mode.rotate": "구조물이 항상 전방을 향함", + "create.contraptions.cart_movement_mode.rotate_paused": "수레가 회전할때 구조물이 행동을 멈춤", + "create.contraptions.cart_movement_mode.rotation_locked": "구조물이 회전하지 않음", "create.contraptions.windmill.rotation_direction": "회전 방향", "create.contraptions.clockwork.clock_hands": "시계침", - "create.contraptions.clockwork.hour_first": "시침", - "create.contraptions.clockwork.minute_first": "분침", - "create.contraptions.clockwork.hour_first_24": "24시간", + "create.contraptions.clockwork.hour_first": "시침 먼저", + "create.contraptions.clockwork.minute_first": "분침 먼저", + "create.contraptions.clockwork.hour_first_24": "24시간 바늘 먼저", "create.logistics.filter": "필터", - "create.logistics.recipe_filter": "제작법 필터", + "create.logistics.recipe_filter": "조합법 필터", "create.logistics.fluid_filter": "액체 필터", - "create.logistics.firstFrequency": "연동 #1", - "create.logistics.secondFrequency": "연동 #2", + "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.gui.goggles.generator_stats": "동적 근원 상태:", - "create.gui.goggles.kinetic_stats": "동적 장치 상태:", - "create.gui.goggles.at_current_speed": "(현재 속도에서)", - "create.gui.goggles.pole_length": "연장대 길이:", + "create.gui.goggles.generator_stats": "동력 상태:", + "create.gui.goggles.kinetic_stats": "작동 상태:", + "create.gui.goggles.at_current_speed": "현재 에너지량", + "create.gui.goggles.pole_length": "축 길이:", "create.gui.goggles.fluid_container": "액체 저장 정보:", - "create.gui.goggles.fluid_container.capacity": "수용량: ", - "create.gui.assembly.exception": "장치를 가동할 수 없습니다:", - "create.gui.assembly.exception.unmovableBlock": "[%1$s,%2$s,%3$s]에 움직일 수 없는 블록(%4$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.gauge.info_header": "측정 정보:", + "create.gui.goggles.fluid_container.capacity": "용량: ", + "create.gui.assembly.exception": "이 구조물은 움직일 수 없습니다:", + "create.gui.assembly.exception.unmovableBlock": "[%1$s,%2$s,%3$s]에 움직일 수 없는 [%4$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.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.adjustable_crate.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.goggles.contraptions.unmovable_block": "움직일 수 없는 블록: (%d, %d, %d)의 \"%s\"", + "create.gui.adjustable_crate.title": "가변 창고", "create.gui.adjustable_crate.storageSpace": "저장 공간", - "create.gui.stockpile_switch.title": "물량 감지기", - "create.gui.stockpile_switch.invert_signal": "신호 전환", - "create.gui.stockpile_switch.move_to_lower_at": "아이템이 차지하는 비율이 %1$s%% 이하일 때 신호", - "create.gui.stockpile_switch.move_to_upper_at": "아이템이 차지하는 비율이 %1$s%% 이상일 때 신호", - "create.gui.sequenced_gearshift.title": "순서화 전환기", + "create.gui.stockpile_switch.title": "수량 스위치", + "create.gui.stockpile_switch.invert_signal": "신호 반전", + "create.gui.stockpile_switch.move_to_lower_at": "최소 신호 발동 비율:%1$s%%", + "create.gui.stockpile_switch.move_to_upper_at": "최소 신호 유지 비율:%1$s%%", + "create.gui.sequenced_gearshift.title": "순서 기어쉬프트", "create.gui.sequenced_gearshift.instruction": "지시", - "create.gui.sequenced_gearshift.instruction.turn_angle.descriptive": "각도 회전", - "create.gui.sequenced_gearshift.instruction.turn_angle": "회전", + "create.gui.sequenced_gearshift.instruction.turn_angle.descriptive": "축 회전", + "create.gui.sequenced_gearshift.instruction.turn_angle": "축 회전", "create.gui.sequenced_gearshift.instruction.turn_angle.angle": "각도", - "create.gui.sequenced_gearshift.instruction.turn_distance.descriptive": "피스톤/도르래/다리 장치를 회전 이동", - "create.gui.sequenced_gearshift.instruction.turn_distance": "피스톤", + "create.gui.sequenced_gearshift.instruction.turn_distance.descriptive": "피스톤/도르래/겐트리 회전", + "create.gui.sequenced_gearshift.instruction.turn_distance": "장치 회전", "create.gui.sequenced_gearshift.instruction.turn_distance.distance": "거리", "create.gui.sequenced_gearshift.instruction.delay.descriptive": "지연 시간", "create.gui.sequenced_gearshift.instruction.delay": "지연", - "create.gui.sequenced_gearshift.instruction.delay.duration": "시간", + "create.gui.sequenced_gearshift.instruction.delay.duration": "지연시간", "create.gui.sequenced_gearshift.instruction.end.descriptive": "종료", "create.gui.sequenced_gearshift.instruction.end": "종료", - "create.gui.sequenced_gearshift.instruction.await.descriptive": "새로운 레드스톤 신호가 전달될 때까지 대기", + "create.gui.sequenced_gearshift.instruction.await.descriptive": "새 레드스톤 신호 대기", "create.gui.sequenced_gearshift.instruction.await": "대기", "create.gui.sequenced_gearshift.speed": "속도, 방향", "create.gui.sequenced_gearshift.speed.forward": "입력 속도, 그대로 회전", @@ -886,167 +985,170 @@ "create.schematicAndQuill.fallbackName": "My Schematic", "create.schematicAndQuill.saved": "%1$s으(로) 저장했습니다", - "create.schematic.invalid": "[!] 잘못된 아이템 - 설계도 탁자를 사용하세요", + "create.schematic.invalid": "[!] 없는 아이템 - 청사진 테이블을 이용하세요", "create.schematic.position": "위치", "create.schematic.rotation": "회전", - "create.schematic.rotation.none": "기본", - "create.schematic.rotation.cw90": "시계방향으로 90° 회전", - "create.schematic.rotation.cw180": "시계방향으로 180° 회전", - "create.schematic.rotation.cw270": "시계방향으로 270° 회전", - "create.schematic.mirror": "대칭 이동", - "create.schematic.mirror.none": "기본", + "create.schematic.rotation.none": "없음", + "create.schematic.rotation.cw90": "90도 시계방향 회전", + "create.schematic.rotation.cw180": "180도 시계방향 회전", + "create.schematic.rotation.cw270": "270도 시계방향 회전", + "create.schematic.mirror": "거울", + "create.schematic.mirror.none": "없음", "create.schematic.mirror.frontBack": "전-후", "create.schematic.mirror.leftRight": "좌-우", - "create.schematic.tool.deploy": "배치", - "create.schematic.tool.move": "X/Z 좌표 이동", - "create.schematic.tool.movey": "Y 좌표 이동", + "create.schematic.tool.deploy": "전개", + "create.schematic.tool.move": "X/Z좌표 이동", + "create.schematic.tool.movey": "Y좌표 이동", "create.schematic.tool.rotate": "회전", "create.schematic.tool.print": "설치", - "create.schematic.tool.flip": "대칭 이동", + "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.move.description.0": "설계도가 수평 이동합니다.", - "create.schematic.tool.move.description.1": "설계도를 바라보며 [CTRL]을 누르고 스크롤하면 설계도를 밀어냅니다.", + "create.schematic.tool.move.description.0": "청사진이 수평 이동합니다.", + "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.0": "청사진을 수직 이동시킵니다.", + "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.0": "구조물을 즉시 설치합니다.", + "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.maxAllowedSize": "최대 설계도 크기:", + "create.schematics.uploadTooLarge": "청사진이 너무 큽니다!.", + "create.schematics.maxAllowedSize": "최대 청사진 파일 크기:", + "create.gui.schematicTable.title": "청사진 테이블", "create.gui.schematicTable.refresh": "파일 새로고침", "create.gui.schematicTable.open_folder": "폴더 열기", - "create.gui.schematicTable.title": "설계도 탁자", - "create.gui.schematicTable.availableSchematics": "사용 가능한 설계도", - "create.gui.schematicTable.noSchematics": "저장된 설계도가 없습니다", - "create.gui.schematicTable.uploading": "전송 중...", - "create.gui.schematicTable.finished": "전송 완료!", - "create.gui.schematicannon.title": "설계대포", + "create.gui.schematicTable.availableSchematics": "사용가능한 청사진", + "create.gui.schematicTable.noSchematics": "저장된 청사진 없음", + "create.gui.schematicTable.uploading": "업로딩 중...", + "create.gui.schematicTable.finished": "업로드 완료!", + "create.gui.schematicannon.title": "청사진 대포", "create.gui.schematicannon.listPrinter": "재료 목록 인쇄", - "create.gui.schematicannon.gunpowderLevel": "화약: %1$s%%", - "create.gui.schematicannon.shotsRemaining": "남은 발포 수: %1$s", - "create.gui.schematicannon.shotsRemainingWithBackup": "남은 화약을 포함한 발포 수: %1$s", - "create.gui.schematicannon.optionEnabled": "활성화되어 있습니다", - "create.gui.schematicannon.optionDisabled": "비활성화되어 있습니다", - "create.gui.schematicannon.showOptions": "설치 설정", - "create.gui.schematicannon.option.dontReplaceSolid": "고체 블록을 대체하지 않습니다", - "create.gui.schematicannon.option.replaceWithSolid": "고체 블록을 고체 블록으로 대체합니다", - "create.gui.schematicannon.option.replaceWithAny": "고체 블록을 아무 블록으로 대체합니다", - "create.gui.schematicannon.option.replaceWithEmpty": "고체 블록을 공기로 대체합니다", - "create.gui.schematicannon.option.skipMissing": "부족한 아이템은 건너뜁니다", - "create.gui.schematicannon.option.skipTileEntities": "정보 블록을 보호합니다", - "create.gui.schematicannon.slot.gunpowder": "여기에 화약을 넣으면 대포에 연료를 채울 수 있습니다", - "create.gui.schematicannon.slot.listPrinter": "여기에 책을 넣으면 재료 목록이 불러와 집니다", - "create.gui.schematicannon.slot.schematic": "여기에 설계도를 넣으면 대포가 설계도대로 블록을 발포합니다. 설계도는 특정한 위치에 배치되어 있어야 합니다.", - "create.gui.schematicannon.option.skipMissing.description": "대포가 배치에 필요한 블록을 찾을 수 없는 경우, 그 블록을 건너뛰고 다음 위치에 블록을 설치합니다.", - "create.gui.schematicannon.option.skipTileEntities.description": "대포가 상자 같은 정보를 가진 블록을 대체하지 않습니다.", - "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.gunpowderLevel": "화약 용량 %1$s%%", + "create.gui.schematicannon.shotsRemaining": "남은 발포 수 : %1$s", + "create.gui.schematicannon.shotsRemainingWithBackup": "화약 여분: %1$s", + "create.gui.schematicannon.optionEnabled": "현재 활성화 됨", + "create.gui.schematicannon.optionDisabled": "현재 비활성화 됨", + "create.gui.schematicannon.showOptions": "대포 설치 설정 열기", + "create.gui.schematicannon.option.dontReplaceSolid": "온전한 블록을 대체하지 않음", + "create.gui.schematicannon.option.replaceWithSolid": "온전한 블록을 재료로 대체함", + "create.gui.schematicannon.option.replaceWithAny": "온전한 블록을 아무 재료로 대체함", + "create.gui.schematicannon.option.replaceWithEmpty": "온전한 블록을 공기로 채움", + "create.gui.schematicannon.option.skipMissing": "부족한 블록을 무시하고 진행", + "create.gui.schematicannon.option.skipTileEntities": "타일 엔티티를 보호", + "create.gui.schematicannon.slot.gunpowder": "화약을 넣어 대포 연료를 채우세요", + "create.gui.schematicannon.slot.listPrinter": "책을 넣어 건축 재료 체크리스트를 인쇄하세요", + "create.gui.schematicannon.slot.schematic": "여기에 청사진을 넣으세요. 건설 구역이 설정되어 있어야 합니다.", + "create.gui.schematicannon.option.skipMissing.description": "만약 대포가 설치에 필요한 블록을 찾지 못할 경우,건너뛰고 다음 블록 설치를 진행합니다.", + "create.gui.schematicannon.option.skipTileEntities.description": "대포가 상세정보가 든 상자같은 타일 엔티티 설치를 무시합니다.", + "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.schematicannon.status.idle": "휴식 중", - "create.schematicannon.status.ready": "준비되었습니다", + "create.schematicannon.status.idle": "휴식", + "create.schematicannon.status.ready": "준비됨", "create.schematicannon.status.running": "작동 중", "create.schematicannon.status.finished": "완료", "create.schematicannon.status.paused": "일시 중지", - "create.schematicannon.status.stopped": "중단", - "create.schematicannon.status.noGunpowder": "화약이 부족합니다", - "create.schematicannon.status.targetNotLoaded": "목표가 불러와지지 않았습니다", - "create.schematicannon.status.targetOutsideRange": "목표가 너무 멀리 떨어져 있습니다", - "create.schematicannon.status.searching": "탐색 중", + "create.schematicannon.status.stopped": "중단됨", + "create.schematicannon.status.noGunpowder": "화약이 부족함", + "create.schematicannon.status.targetNotLoaded": "목표가 없음", + "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.schematicInvalid": "설계도가 잘못되었습니다", - "create.schematicannon.status.schematicNotPlaced": "설계도가 배치되지 않았습니다", - "create.schematicannon.status.schematicExpired": "설계도 파일이 누락되었습니다", + "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.gui.filter.blacklist": "블랙리스트", + "create.gui.filter.blacklist.description": "위 목록에 맞지않는 아이템이면 통과합니다. 빈 블랙리스트는 모두 통과시킵니다.", + "create.gui.filter.whitelist": "화이트리스트", + "create.gui.filter.whitelist.description": "위 목록에 맞는 아이템이면 통과합니다. 빈 화이트리스트는 모두 통과시키지 않습니다.", + "create.gui.filter.respect_data": "상세정보 일치", + "create.gui.filter.respect_data.description": "위 목록 아이템의 내구도, 마법부여, 그리고 다른 NBT와 일치할 때 통과시킵니다.", + "create.gui.filter.ignore_data": "상세정보 무시", + "create.gui.filter.ignore_data.description": "상세정보와 상관없이 아이템 종류만 일치한다면 통과시킵니다.", - "create.gui.filter.deny_list": "금지", - "create.gui.filter.deny_list.description": "위의 아이템과 일치하지 않는 아이템만 통과됩니다. 위에 아무 아이템도 없다면 모든 아이템이 다 통과됩니다.", - "create.gui.filter.allow_list": "허가", - "create.gui.filter.allow_list.description": "위의 아이템과 일치하는 아이템만 통과됩니다. 위에 아무 아이템도 없다면 모든 아이템이 다 통과할 수 없게 됩니다.", - "create.gui.filter.respect_data": "정보 존중", - "create.gui.filter.respect_data.description": "아이템의 내구도나 마법 부여, 여려가지 특성이 일치하는 아이템만 위의 아이템과 일치하는 아이템으로 취급합니다.", - "create.gui.filter.ignore_data": "정보 무시", - "create.gui.filter.ignore_data.description": "아이템의 특성에 상관없이 같은 아이템이라면 위의 아이템과 일치하는 아이템으로 취급합니다.", - - "create.item_attributes.placeable": "설치할 수 있는", - "create.item_attributes.placeable.inverted": "설치할 수 없는", - "create.item_attributes.consumable": "먹을 수 있는", - "create.item_attributes.consumable.inverted": "먹을 수 없는", - "create.item_attributes.smeltable": "제련할 수 있는", - "create.item_attributes.smeltable.inverted": "제련할 수 없는", - "create.item_attributes.washable": "세척할 수 있는", - "create.item_attributes.washable.inverted": "세척할 수 없는", - "create.item_attributes.smokable": "훈연할 수 있는", - "create.item_attributes.smokable.inverted": "훈연할 수 없는", - "create.item_attributes.crushable": "분쇄할 수 있는", - "create.item_attributes.crushable.inverted": "분쇄할 수 없는", - "create.item_attributes.blastable": "용광로에 녹일 수 있는", - "create.item_attributes.blastable.inverted": "용광로에 녹일 수 없는", - "create.item_attributes.enchanted": "마법 부여가 되어있는", - "create.item_attributes.enchanted.inverted": "마법 부여가 되어있지 않은", - "create.item_attributes.damaged": "내구도가 닳은", - "create.item_attributes.damaged.inverted": "내구도가 닳지 않은", - "create.item_attributes.badly_damaged": "심하게 내구도가 닳은", - "create.item_attributes.badly_damaged.inverted": "심하게 내구도가 닳은", - "create.item_attributes.not_stackable": "겹쳐질 수 없는", - "create.item_attributes.not_stackable.inverted": "겹쳐질 수 있는", - "create.item_attributes.equipable": "장착할 수 있는", - "create.item_attributes.equipable.inverted": "장착할 수 없는", - "create.item_attributes.furnace_fuel": "화로의 연료로 사용할 수 있는", - "create.item_attributes.furnace_fuel.inverted": "화로의 연료로 사용할 수 없는", - "create.item_attributes.in_tag": "%1$s 태그가 있는", - "create.item_attributes.in_tag.inverted": "%1$s 태그가 없는", - "create.item_attributes.in_item_group": "'%1$s' 그룹에 속해 있는", - "create.item_attributes.in_item_group.inverted": "'%1$s' 그룹에 속해 있지 않은", - "create.item_attributes.added_by": "%1$s에 의해 추가된", - "create.item_attributes.added_by.inverted": "%1$s에 의해 추가되지 않은", - "create.item_attributes.has_enchant": "%1$s 마법이 부여된", - "create.item_attributes.has_enchant.inverted": "%1$s 마법이 부여되지 않은", - "create.item_attributes.color": "염색된 %1$s", - "create.item_attributes.color.inverted": "염색되지 않은 %1$s", - "create.item_attributes.max_enchanted": "마법 부여가 최고 등급인", - "create.item_attributes.max_enchanted.inverted": "마법 부여가 최고 등급이지 않은", - "create.item_attributes.fluid_container": "액체를 담을 수 있는", - "create.item_attributes.fluid_container.inverted": "액체를 담을 수 없는", - "create.item_attributes.has_fluid": "%1$s이(가) 담긴", - "create.item_attributes.has_fluid.inverted": "%1$s이(가) 담기지 않은", - "create.item_attributes.has_name": "사용자 지정 이름이 '%1$s'인", - "create.item_attributes.has_name.inverted": "사용자 지정 이름이 '%1$s'이지 않은", - "create.item_attributes.book_author": "%1$s이(가) 작성한", - "create.item_attributes.book_author.inverted": "%1$s이(가) 작성하지 않은", - "create.item_attributes.book_copy_original": "원본인", - "create.item_attributes.book_copy_original.inverted": "원본이지 않은", - "create.item_attributes.book_copy_first": "원본의 복사본인", - "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.placeable": "설치할 수 있음", + "create.item_attributes.placeable.inverted": "설치할 수 없음", + "create.item_attributes.consumable": "먹을 수 있음", + "create.item_attributes.consumable.inverted": "먹을 수 없음", + "create.item_attributes.smeltable": "구워질 수 있음", + "create.item_attributes.smeltable.inverted": "구워질 수 없음", + "create.item_attributes.washable": "세척될 수 있음", + "create.item_attributes.washable.inverted": "세척될 수 없음", + "create.item_attributes.smokable": "훈연될 수 있음", + "create.item_attributes.smokable.inverted": "훈연될 수 없음", + "create.item_attributes.crushable": "분쇄될 수 있음", + "create.item_attributes.crushable.inverted": "분쇄될 수 없음", + "create.item_attributes.blastable": "용광로에 녹일 수 있음", + "create.item_attributes.blastable.inverted": "용광로에 녹일 수 없음", + "create.item_attributes.enchanted": "마법부여됨", + "create.item_attributes.enchanted.inverted": "마법부여되지 않음", + "create.item_attributes.damaged": "내구도가 닮", + "create.item_attributes.damaged.inverted": "내구도가 닳지 않음", + "create.item_attributes.badly_damaged": "심각하게 내구도가 닮", + "create.item_attributes.badly_damaged.inverted": "심각하게 내구도가 닳지 않음", + "create.item_attributes.not_stackable": "겹쳐질 수 없음", + "create.item_attributes.not_stackable.inverted": "겹쳐질 수 있음", + "create.item_attributes.equipable": "장착할 수 있음", + "create.item_attributes.equipable.inverted": "장착할 수 없음", + "create.item_attributes.furnace_fuel": "화로 연료로 쓸 수 있음", + "create.item_attributes.furnace_fuel.inverted": "화로 연료로 쓸 수 없음", + "create.item_attributes.in_tag": "%1$s로 등록됨", + "create.item_attributes.in_tag.inverted": "%1$s로 등록되지 않음", + "create.item_attributes.in_item_group": "%1$s탭에 속함", + "create.item_attributes.in_item_group.inverted": "%1$s탭에 속함", + "create.item_attributes.added_by": "%1$s모드가 추가함", + "create.item_attributes.added_by.inverted": "%1$s모드가 추가하지 않음", + "create.item_attributes.shulker_level": "셜커가 %1$s있음", + "create.item_attributes.shulker_level.inverted": "셜커가 %1$s있지 않음", + "create.item_attributes.shulker_level.full": "가득 차", + "create.item_attributes.shulker_level.empty": "비어", + "create.item_attributes.shulker_level.partial": "조금 차", + "create.item_attributes.has_enchant": "%1$s 마법부여를 가지고 있음", + "create.item_attributes.has_enchant.inverted": "%1$s 마법부여를 가지고 있지 않음", + "create.item_attributes.color": "염색됨", + "create.item_attributes.color.inverted": "염색되지 않음", + "create.item_attributes.max_enchanted": "마법부여가 최고 레벨임", + "create.item_attributes.max_enchanted.inverted": "마법부여가 최고 레벨이 아님", + "create.item_attributes.has_fluid": "%1$s을(를) 담고 있음", + "create.item_attributes.has_fluid.inverted": "%1$s을(를) 담고 있지 않음", + "create.item_attributes.has_name": "%1$s이라는 이름을 갖고 있음", + "create.item_attributes.has_name.inverted": "%1$s이라는 이름을 갖고 있지 않음", + "create.item_attributes.book_author": "%1$s이(가) 작성함", + "create.item_attributes.book_author.inverted": "%1$s이(가) 작성하지 않음", + "create.item_attributes.book_copy_original": "원본임", + "create.item_attributes.book_copy_original.inverted": "원본이 아님", + "create.item_attributes.book_copy_first": "원본의 복사본임", + "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.astralsorcery_crystal": "%1$s 수정 속성을 가진", "create.item_attributes.astralsorcery_crystal.inverted": "%1$s 수정 속성을 가지고 있지 않은", "create.item_attributes.astralsorcery_constellation": "%1$s에 조율된", @@ -1056,1070 +1158,1209 @@ "create.item_attributes.astralsorcery_amulet": "%1$s이(가) 향상된", "create.item_attributes.astralsorcery_amulet.inverted": "%1$s이(가) 향상되지 않은", - "create.gui.attribute_filter.no_selected_attributes": "특성이 선택되지 않았습니다", - "create.gui.attribute_filter.selected_attributes": "특성 목록:", - "create.gui.attribute_filter.add_attribute": "선택한 특성을 목록에 추가", - "create.gui.attribute_filter.add_inverted_attribute": "선택한 특성에 반대되는 특성을 목록에 추가", - "create.gui.attribute_filter.allow_list_disjunctive": "허가 (아무)", - "create.gui.attribute_filter.allow_list_disjunctive.description": "목록에 나와 있는 특성이 하나라도 있는 아이템만 통과됩니다.", - "create.gui.attribute_filter.allow_list_conjunctive": "허가 (전부)", - "create.gui.attribute_filter.allow_list_conjunctive.description": "목록에 나와 있는 특성이 전부 있는 아이템만 통과됩니다.", - "create.gui.attribute_filter.deny_list": "금지", - "create.gui.attribute_filter.deny_list.description": "목록에 나와 있는 특성이 있지 않은 아이템만 통과됩니다.", - "create.gui.attribute_filter.add_reference_item": "참조할 아이템을 넣어주세요", + "create.gui.attribute_filter.no_selected_attributes": "속성이 선택되지 않음", + "create.gui.attribute_filter.selected_attributes": "선택된 속성:", + "create.gui.attribute_filter.add_attribute": "리스트에 속성을 추가합니다", + "create.gui.attribute_filter.add_inverted_attribute": "리스트에 반대 속성을 추가합니다.", + "create.gui.attribute_filter.allow_list_disjunctive": "화이트리스트 (최소)", + "create.gui.attribute_filter.allow_list_disjunctive.description": "아이템이 선택된 속성 중 하나라도 가지고 있다면 통과시킵니다.", + "create.gui.attribute_filter.allow_list_conjunctive": "화이트리스트 (모두)", + "create.gui.attribute_filter.allow_list_conjunctive.description": "아이템이 선택된 속성 모두를 가지고 있어야 통과시킵니다.", + "create.gui.attribute_filter.deny_list": "블랙리스트", + "create.gui.attribute_filter.deny_list.description": "아이템이 선택된 속성이 없다면 통과시킵니다.", + "create.gui.attribute_filter.add_reference_item": "참고할 아이템을 추가하기", - "create.tooltip.holdForDescription": "[%1$s]을(를) 누르면 설명을 확인합니다", - "create.tooltip.holdForControls": "[%1$s]을(를) 누르면 조작법을 확인합니다", + "create.tooltip.holdForDescription": "[%1$s]을 눌러 설명 보기", + "create.tooltip.holdForControls": "[%1$s]을 눌러 조작법 보기", "create.tooltip.keyShift": "Shift", "create.tooltip.keyCtrl": "Ctrl", - "create.tooltip.speedRequirement": "요구 속도: %1$s", + "create.tooltip.speedRequirement": "요구 회전속도: %1$s", "create.tooltip.speedRequirement.none": "없음", "create.tooltip.speedRequirement.medium": "보통", "create.tooltip.speedRequirement.high": "빠름", - "create.tooltip.stressImpact": "동적 부하 영향력: %1$s", + "create.tooltip.stressImpact": "피로도 부하: %1$s", "create.tooltip.stressImpact.low": "낮음", "create.tooltip.stressImpact.medium": "보통", "create.tooltip.stressImpact.high": "높음", "create.tooltip.stressImpact.overstressed": "과부하", - "create.tooltip.capacityProvided": "동적 부하 수용량: %1$s", - "create.tooltip.capacityProvided.low": "작음", + "create.tooltip.capacityProvided": "피로도 용량: %1$s", + "create.tooltip.capacityProvided.low": "적음", "create.tooltip.capacityProvided.medium": "보통", "create.tooltip.capacityProvided.high": "큼", - "create.tooltip.generationSpeed": "동력 생산: %1$s %2$s", - "create.tooltip.analogStrength": "전력: %1$s/15", + "create.tooltip.generationSpeed": "%1$s %2$s만큼 발전함", + "create.tooltip.analogStrength": "레드스톤 출력: %1$s/15", "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.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.stack_size": "발사하는 아이템의 수량", + "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.stack_size": "투척하는 아이템의 수량", + "create.logistics.when_multiple_outputs_available": "여러 출력구가 있을 때", "create.mechanical_arm.selection_mode.round_robin": "돌아가며 처리", - "create.mechanical_arm.selection_mode.forced_round_robin": "강제적으로 돌아가며 처리", + "create.mechanical_arm.selection_mode.forced_round_robin": "돌아가며 처리(강제적)", "create.mechanical_arm.selection_mode.prefer_first": "설정 순서 우선시", "create.tunnel.selection_mode.split": "분할", - "create.tunnel.selection_mode.forced_split": "강제적으로 분할", - "create.tunnel.selection_mode.round_robin": "돌아가며 처리", - "create.tunnel.selection_mode.forced_round_robin": "강제적으로 돌아가며 처리", + "create.tunnel.selection_mode.forced_split": "분할(강제적)", + "create.tunnel.selection_mode.round_robin": "순서대로 처리", + "create.tunnel.selection_mode.forced_round_robin": "순서대로 처리(강제적)", "create.tunnel.selection_mode.prefer_nearest": "가장 가까운 곳", "create.tunnel.selection_mode.randomize": "무작위", "create.tunnel.selection_mode.synchronize": "입력 동기화", - "create.tooltip.chute.header": "도관 정보", + "create.tooltip.chute.header": "슈트 정보", "create.tooltip.chute.items_move_down": "아이템이 아래로 이동", "create.tooltip.chute.items_move_up": "아이템이 위로 이동", "create.tooltip.chute.no_fans_attached": "선풍기가 부착되지 않음", - "create.tooltip.chute.fans_push_up": "선풍기가 아래에서 밀어냄", - "create.tooltip.chute.fans_push_down": "선풍기가 위에서 밀어냄", - "create.tooltip.chute.fans_pull_up": "선풍기가 위에서 당겨냄", - "create.tooltip.chute.fans_pull_down": "선풍기가 아래에서 당겨냄", - "create.tooltip.chute.contains": "들어 있는 아이템: %1$s x%2$s", + "create.tooltip.chute.fans_push_up": "선풍기가 아래에서 밈", + "create.tooltip.chute.fans_push_down": "선풍기가 위에서 밈", + "create.tooltip.chute.fans_pull_up": "선풍기가 위에서 당김", + "create.tooltip.chute.fans_pull_down": "선풍기가 아래에서 당김", + "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.hint.hose_pulley.title": "무한한 공급량", - "create.hint.hose_pulley": "액체를 무한하다고 간주합니다.", - "create.hint.mechanical_arm_no_targets.title": "목표가 없음", - "create.hint.mechanical_arm_no_targets": "이 기계식 팔은 대상이 설정되어 있지 않습니다. 기계식 팔을 손에 들고 벨트, 아이템 거치대, 퍼널 등에 오른쪽 버튼을(를) 누르면 목표가 설정됩니다.", - "create.hint.empty_bearing.title": "회전장치 갱신", - "create.hint.empty_bearing": "비어있는 손으로 오른쪽 버튼을(를) 누르면 앞에 있는 구조물이 회전합니다.", - "create.hint.full_deployer.title": "전개장치에 아이템이 가득 참", - "create.hint.full_deployer": "이 _전개장치_에 아이템이 가득 찼습니다. 호퍼나 퍼널, 다른 수단을 써 아이템을 빼내세요.", + "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.key_bound": "%1$s에 주파수가 연결되었습니다", + "create.linked_controller.frequency_slot_1": "조작키: %1$s, 주파수 #1", + "create.linked_controller.frequency_slot_2": "조작키: %1$s, 주파수 #2", - "create.gui.config.overlay1": "안녕 :)", - "create.gui.config.overlay2": "이건 샘플 오버레이야.", - "create.gui.config.overlay3": "클릭하거나 드래그하면,", - "create.gui.config.overlay4": "이 미리 보기가 움직여.", - "create.gui.config.overlay5": "ESC를 누르면 이 화면에서 나가지고,", - "create.gui.config.overlay6": "변경된 위치가 저장될 거야.", - "create.gui.config.overlay7": "명령어 창에 /create overlay reset을 입력하면,", - "create.gui.config.overlay8": "오버레이가 기본 위치로 되돌아갈 거야.", + "create.crafting_blueprint.crafting_slot": "재료 슬롯", + "create.crafting_blueprint.filter_items_viable": "필터도 가능합니다", + "create.crafting_blueprint.display_slot": "전시 슬롯", + "create.crafting_blueprint.inferred": "실제 조합법과 같음", + "create.crafting_blueprint.manually_assigned": "직접 지정함", + "create.crafting_blueprint.secondary_display_slot": "두번째 전시 슬롯", + "create.crafting_blueprint.optional": "추가적", + + "create.potato_cannon.ammo.attack_damage": "%1$s 공격 피해", + "create.potato_cannon.ammo.reload_ticks": "%1$s 재장전 틱", + "create.potato_cannon.ammo.knockback": "%1$s 밀쳐내는 거리", + + "create.hint.hose_pulley.title": "무한 공급", + "create.hint.hose_pulley": "해당 액체는 _무한_으로 간주됩니다.", + "create.hint.mechanical_arm_no_targets.title": "목표 없음", + "create.hint.mechanical_arm_no_targets": "이 _기계 팔_은 _목표_가 설정되지 않았습니다. _기계 팔을 손에 들고_ 벨트, 아이템 거치대, 퍼널을 _우클릭_하여 목표로 지정하세요.", + "create.hint.empty_bearing.title": "베어링 업데이트", + "create.hint.empty_bearing": "_맨 손_으로 베어링을 _우클릭_하여 구조물을 _부착_하세요.", + "create.hint.full_deployer.title": "배포기 아이템 과적", + "create.hint.full_deployer": "이 _배포기_는 _배출_할 아이템을 가지고 있습니다. 호퍼 , 퍼널 등을 이용해 아이템을 빼내세요.", + + + "create.gui.config.overlay1": "UNLOCALIZED: Hi :)", + "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", + "create.gui.config.overlay5": "UNLOCALIZED: Press ESC to exit this screen", + "create.gui.config.overlay6": "UNLOCALIZED: and save the new position", + "create.gui.config.overlay7": "UNLOCALIZED: Run /create overlay reset", + "create.gui.config.overlay8": "UNLOCALIZED: to reset to the default position", "create.command.killTPSCommand": "killtps", - "create.command.killTPSCommand.status.slowed_by.0": "[크리에이트]: 서버 틱이 현재 %s 밀리초만큼 느려졌습니다 :o", - "create.command.killTPSCommand.status.slowed_by.1": "[크리에이트]: 서버 틱이 지금 %s 밀리초만큼 느려졌습니다 >:)", - "create.command.killTPSCommand.status.slowed_by.2": "[크리에이트]: 서버 틱이 다시 정상 속도로 돌아왔습니다 :D", - "create.command.killTPSCommand.status.usage.0": "[크리에이트]: 사용법: /killtps stop 서버 틱 속도를 정상 속도로 되돌립니다", - "create.command.killTPSCommand.status.usage.1": "[크리에이트]: 사용법: /killtps start <틱 시간> 서버 틱 속도를 인위적으로 늦춥니다", - "create.command.killTPSCommand.argument.tickTime": "틱 시간", + "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": "이 수레에 붙은 장치가 너무 큽니다", + "create.contraption.minecart_contraption_too_big": "이 수레 구조물은 들기에 너무 큽니다", + "create.contraption.minecart_contraption_illegal_pickup": "신비로운 힘이 이 수레 구조물을 세계에 묶어두고 있습니다", + + "_": "->------------------------] Subtitles [------------------------<-", + + "create.subtitle.contraption_disassemble": "구조물이 멈춤", + "create.subtitle.peculiar_bell_use": "황동 종이 울림", + "create.subtitle.mixing": "섞는 소리", + "create.subtitle.mechanical_press_activation_belt": "압착기가 작동함", + "create.subtitle.fwoomp": "감자포를 쏨", + "create.subtitle.worldshaper_place": "세계편집기가 쏨", + "create.subtitle.crushing_1": "분쇄되는 소리", + "create.subtitle.depot_slide": "아이템이 미끄러짐", + "create.subtitle.saw_activate_stone": "톱이 작동함", + "create.subtitle.blaze_munch": "블레이즈 버너가 섭취함", + "create.subtitle.funnel_flap": "퍼널이 펄럭거림", + "create.subtitle.schematicannon_finish": "청사진 대포가 끝남", + "create.subtitle.haunted_bell_use": "귀신들린 종이 울림", + "create.subtitle.scroll_value": "스크롤 소리", + "create.subtitle.crafter_craft": "조합기가 조합함", + "create.subtitle.controller_put": "조작기를 놓음", + "create.subtitle.cranking": "크랭크가 돌아감", + "create.subtitle.wrench_remove": "장치가 부숴짐", + "create.subtitle.cogs": "톱니바퀴가 돌아감", + "create.subtitle.slime_added": "슬라임이 철퍽거림", + "create.subtitle.wrench_rotate": "렌치를 사용함", + "create.subtitle.potato_hit": "채소가 부딫힘", + "create.subtitle.saw_activate_wood": "톱이 작동함", + "create.subtitle.haunted_bell_convert": "종에 귀신이 들림", + "create.subtitle.deployer_polish": "배포기가 윤나게 함", + "create.subtitle.deny": "취소음", + "create.subtitle.controller_click": "조작기를 누름", + "create.subtitle.schematicannon_launch_block": "청사진 대포가 발사함", + "create.subtitle.copper_armor_equip": "잠수용 장비가 철커덕거림", + "create.subtitle.controller_take": "독서대가 비워짐", + "create.subtitle.mechanical_press_activation": "압착기가 작동함", + "create.subtitle.contraption_assemble": "구조물이 움직임", + "create.subtitle.crafter_click": "조합기가 작동함", + "create.subtitle.depot_plop": "아이템이 놓임", + "create.subtitle.confirm": "확인음", - "_": "->------------------------] 소리 자막 [------------------------<-", + "_": "->------------------------] Item Descriptions [------------------------<-", - "create.subtitle.schematicannon_launch_block": "설계대포가 무언가를 발포함", - "create.subtitle.schematicannon_finish": "설계대포가 알림을 울림", - "create.subtitle.slime_added": "철퍽거리는 소리", - "create.subtitle.mechanical_press_activation_belt": "기계식 압착기가 무언가를 압착함", - "create.subtitle.mechanical_press_activation": "기계식 압착기가 어딘가에 부딪히는 소리", - "create.subtitle.blockzapper_deny": "부정적인 효과음", - "create.subtitle.blockzapper_confirm": "긍정적인 효과음", - "create.subtitle.blockzapper_place": "휴대용 블록발사기가 블록을 발사함", - "create.subtitle.blaze_munch": "블레이즈 가열기가 무언가를 먹어 치움", - - - "_": "->------------------------] 아이템 설명 [------------------------<-", - - "item.create.example_item.tooltip": "예시 아이템 (그냥 설명만 확인하시면 됩니다)", - "item.create.example_item.tooltip.summary": "아이템에 대한 간단한 설명입니다. _밑줄_은 용어를 강조 표시합니다.", - "item.create.example_item.tooltip.condition1": "이것을 할 때", - "item.create.example_item.tooltip.behaviour1": "이것을 하면, 이 아이템이 이것을 수행합니다. (Shift을(를) 누르면 동작이 표시됩니다)", - "item.create.example_item.tooltip.condition2": "그리고, 이것을 할 때", - "item.create.example_item.tooltip.behaviour2": "원하는 만큼의 동작을 표시할 수 있습니다", - "item.create.example_item.tooltip.control1": "Ctrl을(를) 눌렀을 때", - "item.create.example_item.tooltip.action1": "이러한 조작법이 표시됩니다", + "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.condition1": "When this", + "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", + "item.create.example_item.tooltip.action1": "These controls are displayed.", "block.create.wooden_bracket.tooltip": "나무 지지대", - "block.create.wooden_bracket.tooltip.summary": "_축_과 _톱니바퀴_, _액체관_을 장식할 수 있는 나무로 만든 지지대입니다.", + "block.create.wooden_bracket.tooltip.summary": "나무를 이용해 _축, 톱니바퀴, 파이프_를 꾸며보세요.", "block.create.metal_bracket.tooltip": "금속 지지대", - "block.create.metal_bracket.tooltip.summary": "_축_과 _톱니바퀴_, _액체관_을 장식할 수 있는 견고한 공업용 지지대입니다.", + "block.create.metal_bracket.tooltip.summary": "금속을 이용해 _축, 톱니바퀴, 파이프_를 꾸며보세요.", - "block.create.copper_casing.tooltip": "구리 틀", - "block.create.copper_casing.tooltip.summary": "다양한 용도로 사용할 수 있는 견고한 틀입니다. 장식용으로 사용할 수 있습니다.", - "block.create.copper_casing.tooltip.condition1": "액체관에 사용했을 때", - "block.create.copper_casing.tooltip.behaviour1": "_액체관_에 _구리 틀_을 씌웁니다. 틀을 씌운 액체관은 연결이 고정되어, 주변 파이프의 변화에 반응하지 않습니다.", - - "block.create.encased_fluid_pipe.tooltip": "틀을 씌운 액체관", - "block.create.encased_fluid_pipe.tooltip.summary": "_구리 틀_이 씌워진 액체관입니다.", - - "block.create.seat.tooltip": "좌석", - "block.create.seat.tooltip.summary": "앉으세요! 이동하는 _장치_에 플레이어를 고정합니다. 가구로 사용해도 괜찮습니다! 다양한 색상으로 염색할 수 있습니다.", - "block.create.seat.tooltip.condition1": "좌석에다 오른쪽 버튼을 눌렀을 때", - "block.create.seat.tooltip.behaviour1": "플레이어가 _좌석_에 앉습니다. L-shift을(를) 누르면 좌석에서 일어납니다.", + "block.create.seat.tooltip": "SEAT", + "block.create.seat.tooltip.summary": "앉아서 드라이브를 즐기세요! _움직이는 구조물_에 _플레이어_를 _고정_시킵니다. 가구용으로도 좋습니다! 다양한 색깔이 존재합니다.", + "block.create.seat.tooltip.condition1": "좌석에 우클릭", + "block.create.seat.tooltip.behaviour1": "플레이어가 좌석에 _앉습니다_. _왼쪽 쉬프트_를 눌러 좌석에서 _일어섭니다_.", "item.create.blaze_cake.tooltip": "블레이즈 케이크", - "item.create.blaze_cake.tooltip.summary": "열심히 일하는 _블레이즈 가열기_를 위한 맛있는 음식입니다. 화력 상승!", + "item.create.blaze_cake.tooltip.summary": "열심히 일하는 _블레이즈_ _버너_의 식사입니다. 블레이즈를 더 뜨겁게 만드세요!", - "block.create.fluid_pipe.tooltip": "액체관", - "block.create.fluid_pipe.tooltip.summary": "_액체_를 수송할 수 있습니다. _액체_를 흐르게 만들려면 기계식 펌프가 필요합니다.", - "block.create.fluid_pipe.tooltip.condition1": "액체 이동", - "block.create.fluid_pipe.tooltip.behaviour1": "_탱크_나 _대야_ 같은 액체 저장소에 연결할 수 있습니다. 노출된 액체관의 구멍에서 액체를 흡수하거나 배출할 수 있습니다. 누출을 조심하세요!", - "block.create.fluid_pipe.tooltip.condition2": "스패너를 들고 오른쪽 버튼을 눌렀을 때", - "block.create.fluid_pipe.tooltip.behaviour2": "가능하다면, 액체관에 창을 냅니다.", - - "block.create.hose_pulley.tooltip": "액체관 도르래", - "block.create.hose_pulley.tooltip.summary": "액체를 _흡수_하거나 _배출_할 수 있습니다.", - "block.create.hose_pulley.tooltip.condition1": "동력을 받았을 때", - "block.create.hose_pulley.tooltip.behaviour1": "호스를 _올려_보내거나 _내려_보냅니다. 호스의 위치는 액체를 흡수하는 높이와 배출하는 높이를 결정합니다.", - "block.create.hose_pulley.tooltip.condition2": "도르래에서 액체가 당겨질 때", - "block.create.hose_pulley.tooltip.behaviour2": "아래로 내려간 _호스의 끝_에서 _액체를 흡수_하기 시작합니다. 매우 많은 양의 액체는 무한하다고 간주합니다.", - "block.create.hose_pulley.tooltip.condition3": "도르래에서 액체가 밀어질 때", - "block.create.hose_pulley.tooltip.behaviour3": "아래로 내려간 _호스의 끝_에서 _액체를 배출_하기 시작합니다.", - - "block.create.fluid_tank.tooltip": "액체 탱크", - "block.create.fluid_tank.tooltip.summary": "원하는 액체를 _저장_할 수 있습니다. _액체 탱크_끼리 연결하여, 탱크의 크기를 조절할 수 있습니다.", - "block.create.fluid_tank.tooltip.condition1": "스패너를 들고 오른쪽 버튼을 눌렀을 때", - "block.create.fluid_tank.tooltip.behaviour1": "탱크에 창을 제거하거나 창을 냅니다.", - - "block.create.creative_fluid_tank.tooltip": "크리에이티브 액체 탱크", - "block.create.creative_fluid_tank.tooltip.summary": "이 _액체 탱크_는 안에 들어간 액체를 무한대로 복제할 수 있습니다. 크리에이티브 액체 탱크끼리 연결하여, 탱크의 크기를 조절할 수 있습니다.", - "block.create.creative_fluid_tank.tooltip.condition1": "액체가 탱크 안에 있을 때", - "block.create.creative_fluid_tank.tooltip.behaviour1": "이 탱크는 탱크 안에 들어 있는 액체를 연결된 액체관에 무한대로 공급합니다. 이 탱크로 들어오는 액체는 모두 _사라집니다_.", - "block.create.creative_fluid_tank.tooltip.condition2": "스패너를 들고 오른쪽 버튼을 눌렀을 때", - "block.create.creative_fluid_tank.tooltip.behaviour2": "탱크에 창을 제거하거나 창을 냅니다.", - - "block.create.fluid_valve.tooltip": "액체 밸브", - "block.create.fluid_valve.tooltip.summary": "액체관을 따라 흐르는 액체의 흐름을 막습니다.", - "block.create.fluid_valve.tooltip.condition1": "흐름 조절", - "block.create.fluid_valve.tooltip.behaviour1": "_회전력_을 받으면 밸브가 닫혀, 액체가 흐르지 않게 됩니다. 반대 방향의 회전력을 받으면 밸브가 다시 열립니다.", - - "block.create.mechanical_pump.tooltip": "기계식 펌프", - "block.create.mechanical_pump.tooltip.summary": "_회전력_을 사용하여 _액체관_을 따라 액체를 흐르게 만듭니다. 양방향의 최대 범위가 정해져 있습니다. (기본적으로는 16블록입니다)", - "block.create.mechanical_pump.tooltip.condition1": "액체 흐름", - "block.create.mechanical_pump.tooltip.behaviour1": "_회전력_을 받으면 액체가 액체관을 통해 흐르도록 압력을 발생시킵니다. 반대 방향의 회전력을 받으면 액체가 흐르는 방향이 전환됩니다.", - "block.create.mechanical_pump.tooltip.control1": "스패너를 들고 오른쪽 버튼을 눌렀을 때", - "block.create.mechanical_pump.tooltip.action1": "_펌프_의 방향을 반대로 돌려, 흐름의 기본적인 방향을 전환합니다.", - - "block.create.smart_fluid_pipe.tooltip": "지능형 액체관", - "block.create.smart_fluid_pipe.tooltip.summary": "필터가 있는 _액체관_입니다. 액체관에 흐르는 액체를 설정할 수 있습니다.", - "block.create.smart_fluid_pipe.tooltip.condition1": "액체가 들어올 때", - "block.create.smart_fluid_pipe.tooltip.behaviour1": "액체가 _필터_와 일치하지 않는다면, 액체의 흐름을 막습니다.", - "block.create.smart_fluid_pipe.tooltip.condition2": "액체 저장소와 가까이 있을 때", - "block.create.smart_fluid_pipe.tooltip.behaviour2": "지능형 액체관이 저장소의 흐름에 시작에 있다면, 지능형 액체관은 필터와 일치하는 액체만 배출합니다.", - - "block.create.spout.tooltip": "주입기", - "block.create.spout.tooltip.summary": "아이템에 _액체_를 채워 넣는 장치입니다.", - "block.create.spout.tooltip.condition1": "액체 이동", - "block.create.spout.tooltip.behaviour1": "_양동이_나 _유리병_ 같은 액체가 담길 수 있는 아이템이 밑에 놓이면, 주입기가 저장된 액체를 주입합니다.", - "block.create.spout.tooltip.condition2": "액체 자동화", - "block.create.spout.tooltip.behaviour2": "_벨트_나 _아이템 거치대_ 위에 설치된 주입기는 액체가 담길 수 있는 아이템이 밑에 놓이면 자동으로 반응합니다.", - - "block.create.item_drain.tooltip": "흡수통", - "block.create.item_drain.tooltip.summary": "_액체가 담긴 아이템_을 흡수할 수 있는 철창이 박힌 통입니다", - "block.create.item_drain.tooltip.condition1": "액체 이동", - "block.create.item_drain.tooltip.behaviour1": "_물 양동이_나 _물병_ 같은 액체가 담긴 아이템이 퍼널을 통해 옆으로 들어오면, 액체가 담긴 아이템을 흡수하고, 흡수된 아이템을 반대쪽으로 튕겨냅니다.", - - "item.create.wand_of_symmetry.tooltip": "대칭의 지팡이", - "item.create.wand_of_symmetry.tooltip.summary": "블록에 대한 변화를 완벽하게 반사하는 거울을 배치할 수 있는 지팡이입니다.", + "item.create.wand_of_symmetry.tooltip": "SYMMETRY WAND", + "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.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_blockzapper.tooltip": "블록발사기", - "item.create.handheld_blockzapper.tooltip.summary": "먼 곳에다 블록을 설치할 수 있는 특이한 장치입니다.", - "item.create.handheld_blockzapper.tooltip.control1": "블록에다 왼쪽 버튼을 눌렀을 때", - "item.create.handheld_blockzapper.tooltip.action1": "선택한 블록이 발사할 블록으로 설정됩니다.", - "item.create.handheld_blockzapper.tooltip.control2": "블록에다 오른쪽 버튼을 눌렀을 때", - "item.create.handheld_blockzapper.tooltip.action2": "블록이 설치되거나 대체됩니다.", - "item.create.handheld_blockzapper.tooltip.control3": "웅크리고 오른쪽 버튼을 눌렀을 때", - "item.create.handheld_blockzapper.tooltip.action3": "_설정 창_이 열립니다.", + "item.create.handheld_worldshaper.tooltip": "HANDHELD WORLDSHAPER", + "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": "휴대용 세계성형기", - "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": "TREE FERTILIZER", + "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.deforester.tooltip": "삼림 파괴기", - "item.create.deforester.tooltip.summary": "단숨에 나무를 절단할 수 있는 _빛의 도끼_입니다.", + "item.create.extendo_grip.tooltip": "EXTENDO GRIP", + "item.create.extendo_grip.tooltip.summary": "띠요오옹! 사용자의 _사거리_를 늘려줍니다.", + "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": "연장용 팔", - "item.create.extendo_grip.tooltip.summary": "띠요오용! 사용자의 _범위_가 많이 늘어납니다.", - "item.create.extendo_grip.tooltip.condition1": "주로 사용하지 않는 손에 있을 때", - "item.create.extendo_grip.tooltip.behaviour1": "_주로 사용하는 손_에 있는 아이템의 범위가 증가합니다.", + "item.create.potato_cannon.tooltip": "POTATO CANNON", + "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": "FILTER", + "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.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": "ATTRIBUTE FILTER", + "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.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": "EMPTY SCHEMATIC", + "item.create.empty_schematic.tooltip.summary": "조합 재료로 쓰이거나 청사진 테이블에서 청사진을 불러올 때 쓰입니다.", - "item.create.schematic.tooltip": "설계도", - "item.create.schematic.tooltip.summary": "원하는 위치에 홀로그램을 배치하고, 설계대포를 사용하여 구조물을 건설할 수 있습니다.", - "item.create.schematic.tooltip.condition1": "들고 있을 때", - "item.create.schematic.tooltip.behaviour1": "설계도의 _위치_를 지정할 수 있습니다.", - "item.create.schematic.tooltip.control1": "웅크리고 오른쪽 버튼을 눌렀을 때", - "item.create.schematic.tooltip.action1": "정확한 좌표를 입력할 수 있는 _설정 창_이 열립니다.", + "item.create.schematic.tooltip": "SCHEMATIC", + "item.create.schematic.tooltip.summary": "세계에 구조물을 _홀로그램으로_ 불러와 지정하고 설치합니다. 지정된 홀로그램은 _청사진_ _대포_의 _작업_ _영역_이 됩니다.", + "item.create.schematic.tooltip.condition1": "들고 있을 떄", + "item.create.schematic.tooltip.behaviour1": "UI의 도구로 _변경/설치_ 할 수 있습니다.", + "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": "SCHEMATIC AND QUILL", + "item.create.schematic_and_quill.tooltip.summary": "세계에 있는 구조물을 _.nbt파일_로 저장할 때 쓰입니다.", "item.create.schematic_and_quill.tooltip.condition1": "1단계", - "item.create.schematic_and_quill.tooltip.behaviour1": "오른쪽 버튼을 눌러 구조물의 모서리를 지정합니다.", + "item.create.schematic_and_quill.tooltip.behaviour1": "_두_ _모서리_를 우클릭으로 선택하세요.", "item.create.schematic_and_quill.tooltip.condition2": "2단계", - "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": "_Scroll_를 이용하여 거리를 조정합니다.", + "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.behaviour1": "_설정 창_이 열립니다", + "block.create.schematicannon.tooltip": "SCHEMATICANNON", + "block.create.schematicannon.tooltip.summary": "장착된 청사진을 바탕으로 블록들을 _발포_합니다. _화약_을 연료로 사용하고 주변 보관함에서 아이템을 사용합니다.", + "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.condition1": "비어있는 설계도가 올려졌을 때", - "block.create.schematic_table.tooltip.behaviour1": "_선택한 설계도_를 비어있는 설계도로 전송할 수 있습니다.", + "block.create.schematic_table.tooltip": "SCHEMATIC TABLE", + "block.create.schematic_table.tooltip.summary": "_빈_ _청사진_에 저장된 청사진을 불러옵니다.", + "block.create.schematic_table.tooltip.condition1": "빈 청사진을 넣을 때", + "block.create.schematic_table.tooltip.behaviour1": "Schematics 폴더에서 선택한 파일을 업로드합니다.", - "item.create.goggles.tooltip": "안경", - "item.create.goggles.tooltip.summary": "_장치의 정보_를 두 눈으로 직접 확인할 수 있도록, 시야가 증강되게 만들어주는 유용한 안경입니다.", + "item.create.goggles.tooltip": "GOGGLES", + "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.behaviour1": "해당 장치의 _속도_, _피로도_, _용량_을 레벨에 따라 에 따라 색상 UI를 보여줍니다.", + "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": "렌치", + "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.nozzle.tooltip": "NOZZLE", + "block.create.nozzle.tooltip.summary": "덮힌 환풍기 _앞_에 붙여 환풍기의 효과를 _전방_으로 _확대_합니다.", + + "block.create.cuckoo_clock.tooltip": "CUCKOO CLOCK", + "block.create.cuckoo_clock.tooltip.summary": "_시간의_ _흐름_을 알고 공간을 _꾸미는_ 데 좋은 공예품입니다.", + "block.create.cuckoo_clock.tooltip.condition1": "회전할 때", + "block.create.cuckoo_clock.tooltip.behaviour1": "현재 시각을 보여주고 하루에 두 번 울립니다. 점심과 플레이어가 바로 잘 수 있는 저녁에 울립니다.", - "block.create.cuckoo_clock.tooltip": "뻐꾸기시계", - "block.create.cuckoo_clock.tooltip.summary": "공간을 장식하고 _시간_을 알려주는 정교한 장치입니다.", - "block.create.cuckoo_clock.tooltip.condition1": "동력을 받았을 때", - "block.create.cuckoo_clock.tooltip.behaviour1": "_현재 시각_을 표시합니다. 정오와 플레이어가 잠을 잘 수 있게 되는 시각에 작동합니다.", + "block.create.turntable.tooltip": "TURNTABLE", + "block.create.turntable.tooltip.summary": "_동력_으로 _멀미_를 일으킵니다.", - "block.create.turntable.tooltip": "회전대", - "block.create.turntable.tooltip.summary": "_회전력_을 받으면 회전합니다. 회전력을 받은 회전대 위에 올라서면 미묘한 멀미가 일어납니다.", + "block.create.stockpile_switch.tooltip": "stockpile_switch", + "block.create.stockpile_switch.tooltip.summary": "붙어있는 _보관함_에 들어있는 아이템을 기반으로 레드스톤 신호를 보냅니다. 필터도 제공됩니다. _비교기_와 반대로, 수량 스위치는 신호가 반전되는 _임계점_을 조절할 수 있습니다.", + "block.create.stockpile_switch.tooltip.condition1": "우클릭", + "block.create.stockpile_switch.tooltip.behaviour1": "설정 창을 엽니다.", - "block.create.portable_fluid_interface.tooltip": "연결식 액체 전달기", - "block.create.portable_fluid_interface.tooltip.summary": "피스톤이나 회전장치, 광산 수레, 도르래에 의해 이동하는 구조물에 액체를 전달할 수 있는 연결식 액체 교환 장치입니다. 교환 장치끼리 서로 마주보고 1-2블록의 간격을 두고 있어야 액체가 전달됩니다.", - "block.create.portable_fluid_interface.tooltip.condition1": "움직일 때", - "block.create.portable_fluid_interface.tooltip.behaviour1": "움직이지 않는 _액체 전달기_와 상호작용하여 액체를 교환할 수 있습니다. 움직이지 않는 액체 전달기에 액체를 배출하거나 방출하려면 액체 저장소와 장치가 직접 연결되어 있어야 합니다. 액체가 교환되는 동안은 장치가 잠시 멈춥니다.", - "block.create.portable_fluid_interface.tooltip.condition2": "레드스톤 신호를 받았을 때", - "block.create.portable_fluid_interface.tooltip.behaviour2": "교환 장치끼리 _연결되지 않게_ 됩니다.", + "block.create.content_observer.tooltip": "CONTENT OBSERVER", + "block.create.content_observer.tooltip.summary": "보관함이나 벨트의 아이템을 등록된 _필터_를 이용해 _탐지_합니다. _보관함, 벨트, 슈트_ 안에 해당 아이템을 탐지하는 동안, 레드스톤 신호를 보냅니다. _퍼널_가 해당 아이템을 수송하면, _1틱_의 레드스톤 신호를 보냅니다.", - "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.adjustable_crate.tooltip": "ADJUSTABLE CRATE", + "block.create.adjustable_crate.tooltip.summary": "이 보관함는 용량을 _직접_ _정할_ 수 있습니다. 아무아이템이나 최대 16스택씩 담을 수 있습니다. 레드스톤 비교기와 호환됩니다.", + "block.create.adjustable_crate.tooltip.condition1": "우클릭", + "block.create.adjustable_crate.tooltip.behaviour1": "설정 창을 엽니다.", - "block.create.content_observer.tooltip": "아이템 감지기", - "block.create.content_observer.tooltip.summary": "설정된 _필터_와 일치하는 아이템을 감지합니다. 붙어있는 벨트나 도관, 저장소에 일치하는 아이템이 있다면 장치가 레드스톤 신호를 내보내고, _퍼널_이 아이템을 전송해도 장치가 레드스톤 신호를 내보냅니다.", + "block.create.creative_crate.tooltip": "THE ENDLESS CRATE", + "block.create.creative_crate.tooltip.summary": "이 상자는 아무 아이템을 _무한히_ 저장합니다. 청사진 대포 옆에 놓을 시 준비물을 _전부_ 공급합니다.", + "block.create.creative_crate.tooltip.condition1": "필터에 아이템을 설정할 시", + "block.create.creative_crate.tooltip.behaviour1": "선택된 아이템을 _무한정_으로 _빼낼_ 수 있습니다. 대신 _들어간_ 아이템은 _삭제_됩니다.", - "block.create.adjustable_crate.tooltip": "조절식 상자", - "block.create.adjustable_crate.tooltip.summary": "이 _아이템 저장소_는 용량을 수동으로 조절할 수 있습니다. 아이템을 최대 16묶음까지 넣을 수 있고, 레드스톤 비교기와 같이 사용할 수 있습니다.", - "block.create.adjustable_crate.tooltip.condition1": "오른쪽 버튼을 눌렀을 때", - "block.create.adjustable_crate.tooltip.behaviour1": "_설정 창_이 열립니다.", + "block.create.controller_rail.tooltip": "CONTROLLER RAIL", + "block.create.controller_rail.tooltip.summary": "_광산 수레_의 _이동속도_를 _세밀하게_ _조정_할 수 있는 _양방향_ _전동 레일_입니다.", + "block.create.controller_rail.tooltip.condition1": "레드스톤 신호를 받을 때", + "block.create.controller_rail.tooltip.behaviour1": "_신호 세기에 따라_ 지나가는 수레를 _가속, 감속_합니다. 레드스톤 신호는 다른 방향 레일에도 전달됩니다. 두 방향레일에 다른 세기를 전달하면 중간 레일들은 두 세기 사이의 신호를 받습니다.", - "block.create.creative_crate.tooltip": "무한한 상자", - "block.create.creative_crate.tooltip.summary": "이 _저장소_는 아이템을 무한대로 복제할 수 있습니다. 설계대포의 옆에 설치하면 재료를 무한대로 공급합니다.", - "block.create.creative_crate.tooltip.condition1": "필터 슬롯에 아이템이 들어갔을 때", - "block.create.creative_crate.tooltip.behaviour1": "이 저장소는 필터 슬롯에 들어간 아이템을 무한대로 공급합니다. 이 저장소로 들어오는 아이템은 모두 _사라집니다_.", + "item.create.sand_paper.tooltip": "SAND PAPER", + "item.create.sand_paper.tooltip.summary": "재료들을 _윤내는 데_ 쓰이는 거친 종이입니다. 배포기가 자동으로 쓸 수 있습니다.", + "item.create.sand_paper.tooltip.condition1": "사용할 때", + "item.create.sand_paper.tooltip.behaviour1": "_다른 손_에있는 아이템과 _바닥에 있는 아이템_을 윤냅니다.", + + "item.create.builders_tea.tooltip": "BUILDERS TEA", + "item.create.builders_tea.tooltip.summary": "하루를 시작하기에 좋은 음료입니다. _ 새로운 영감_을 줍니다.", - "block.create.controller_rail.tooltip": "제어 레일", - "block.create.controller_rail.tooltip.summary": "광산 수레의 _이동 속도_를 정밀하게 제어할 수 있는 단방향 전동 레일입니다.", - "block.create.controller_rail.tooltip.condition1": "레드스톤 신호를 받았을 때", - "block.create.controller_rail.tooltip.behaviour1": "_신호의 세기_에 따라 _광산 수레_의 속도가 가속되거나 감속됩니다. 근처에 레일이 있다면 레일에 신호를 전파합니다. 두 제어 레일에 각자 다른 세기의 신호를 공급할 때 그 사이에 제어 레일이 연결되어 있다면, 사이에 있는 제어 레일은 두 세기의 사이 신호를 받습니다.", + "item.create.refined_radiance.tooltip": "REFINED RADIANCE", + "item.create.refined_radiance.tooltip.summary": "_흡수된_ _빛_으로 제련된 색채 혼합물입니다.", - "item.create.sand_paper.tooltip": "사포", - "item.create.sand_paper.tooltip.summary": "_재료_를 _갈아낼_ 수 있는 거친 종이입니다. 전개장치를 사용하여 자동으로 재료를 갈아낼 수 있습니다.", - "item.create.sand_paper.tooltip.condition1": "사용하는 방법", - "item.create.sand_paper.tooltip.behaviour1": "_손_에 아이템을 들고, _반대 손_에 사포를 든 상태로 오른쪽 버튼을 누르거나 떨어져 있는 아이템을 바라보고 오른쪽 버튼을 누르면 아이템을 갈아냅니다.", + "item.create.shadow_steel.tooltip": "SHADOW STEEL", + "item.create.shadow_steel.tooltip.summary": "_공허_에서 제련된 색채 혼합물입니다.", - "item.create.builders_tea.tooltip": "건축가의 차", - "item.create.builders_tea.tooltip.summary": "하루를 시작하기 위한 완벽한 차입니다. -_동기_와 _포만감_을 줍니다.", + "item.create.linked_controller.tooltip": "LINKED CONTROLLER", + "item.create.linked_controller.tooltip.summary": "_여섯_ _버튼_으로 _레드스톤_ _링크_와 연결되는 _휴대용_ _조작기_입니다.", + "item.create.linked_controller.tooltip.condition1": "우클릭", + "item.create.linked_controller.tooltip.behaviour1": "조작기를 킵니다. 조작하면서 _움직일_ _수_ _없습니다_.", + "item.create.linked_controller.tooltip.condition2": "웅크리면서 우클릭", + "item.create.linked_controller.tooltip.behaviour2": "_설정_ _창_을 엽니다.", + "item.create.linked_controller.tooltip.condition3": "레드스톤 링크 수신기에 우클릭", + "item.create.linked_controller.tooltip.behaviour3": "_연결_ _모드_를 활성화하고, _여섯_ _버튼_ 중 하나를 눌러 조작기를 주파수와 연결합니다.", + "item.create.linked_controller.tooltip.condition4": "독서대에 우클릭", + "item.create.linked_controller.tooltip.behaviour4": "조작기를 독서대에 올려놓아 쉽게 조작할 수 있습니다. (웅크리면서 우클릭으로 회수헙니다.)", - "item.create.refined_radiance.tooltip": "섬세한 섬광", - "item.create.refined_radiance.tooltip.summary": "_흡수의 빛_으로 제련된 혼돈의 혼합물입니다.", + "item.create.diving_helmet.tooltip": "DIVING HELMET", + "item.create.diving_helmet.tooltip.summary": "_구리_ _산소통_과 함께, 착용자가 물 속에서 _오랫동안_ _호흡_할 수 있게합니다.", + "item.create.diving_helmet.tooltip.condition1": "착용했을 때", + "item.create.diving_helmet.tooltip.behaviour1": "산소통에서 공기를 느리게 빨아들이며 _수중_ _호흡_ 효과를 제공합니다.", - "item.create.shadow_steel.tooltip": "그림자 금속", - "item.create.shadow_steel.tooltip.summary": "_공허_에서 제련된 혼돈의 혼합물입니다.", + "item.create.copper_backtank.tooltip": "COPPER BACKTANK", + "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.minecart_coupling.tooltip": "광산 수레 이음쇠", - "item.create.minecart_coupling.tooltip.summary": "_광산 수레_를 연결하여 장엄한 기차를 만들 수 있습니다.", - "item.create.minecart_coupling.tooltip.condition1": "광산 수레에 사용했을 때", - "item.create.minecart_coupling.tooltip.behaviour1": "두 광산 수레가 연결되어 이동할 때 일정한 거리를 유지하게 만듭니다.", + "item.create.diving_boots.tooltip": "DIVING BOOTS", + "item.create.diving_boots.tooltip.summary": "해저를 돌아다니기에 적합한 _무거운_ _부츠_ 한 켤레입니다.", + "item.create.diving_boots.tooltip.condition1": "착용했을 때", + "item.create.diving_boots.tooltip.behaviour1": "착용자는 빠르게 가라앉고 _수영_할 수 _없습니다_. 대신 물 속에서 _걷고_, _뛸_ 수 있습니다. 또한 _벨트_에 영향받지 않습니다.", + + "item.create.crafting_blueprint.tooltip": "CRAFTING BLUEPRINT", + "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": "MINECART COUPLING", + "item.create.minecart_coupling.tooltip.summary": "당신의 모든 _수레들을 이어 _멋진 _기차_를 만들어보세요.", + "item.create.minecart_coupling.tooltip.condition1": "광산 수레에 사용할 때", + "item.create.minecart_coupling.tooltip.behaviour1": "_두 수레를 묶어_ 이동할 때 고정된 _거리를 유지하게_ 합니다.", + + "block.create.peculiar_bell.tooltip": "PECULIAR BELL", + "block.create.peculiar_bell.tooltip.summary": "장식을 위한 황동 종입니다. 영혼 불꽃 위에 설치하면 _기이한_ 일이 일어난다고 합니다...", + + "block.create.haunted_bell.tooltip": "HAUNTED BELL", + "block.create.haunted_bell.tooltip.summary": "지옥의 길잃은 영혼들이 씌인 _저주받은_ 종입니다.", + "block.create.haunted_bell.tooltip.condition1": "들고 있거나 종을 울릴 때", + "block.create.haunted_bell.tooltip.behaviour1": "_적대적_ _몹_이 생성되는 _빛이_ _없는_ 자리를 표시합니다.", "create.tooltip.wip": "WIP", - "create.tooltip.workInProgress": "제작 중!", - "create.tooltip.randomWipDescription0": "이 아이템을 어린이에 가까이 두지 마세요.", - "create.tooltip.randomWipDescription1": "이 아이템을 사용할 때마다 아기 판다가 죽습니다. 때.마.다.", - "create.tooltip.randomWipDescription2": "위험을 무릅쓰고 사용하세요.", - "create.tooltip.randomWipDescription3": "찾으시는 상품이 아닙니다. *손가락 흔들기* 해산해주세요.", - "create.tooltip.randomWipDescription4": "이 아이템은 10초 후에 자폭합니다. 10, 9, 8...", - "create.tooltip.randomWipDescription5": "날 믿어, 이 아이템은 쓸모없어.", - "create.tooltip.randomWipDescription6": "이 아이템을 사용함으로써 귀하는 당사의 권리 포기 각서에 동의하고 그 조건에 동의합니다.", - "create.tooltip.randomWipDescription7": "이건 널 위한 게 아닐지도 몰라, 이건 어때?", - "create.tooltip.randomWipDescription8": "사용하고 자신이 내린 결정을 후회하세요.", + "create.tooltip.workInProgress": "Work in progress!", + "create.tooltip.randomWipDescription0": "Please keep this item away from children.", + "create.tooltip.randomWipDescription1": "A baby panda dies every time you use this item. Every. Time.", + "create.tooltip.randomWipDescription2": "Use at your own risk.", + "create.tooltip.randomWipDescription3": "This is not the item you are looking for, *finger-wiggles* please disperse.", + "create.tooltip.randomWipDescription4": "This item will self-destruct in 10 seconds. 10, 9, 8...", + "create.tooltip.randomWipDescription5": "Believe me, it's useless.", + "create.tooltip.randomWipDescription6": "By using this item, you hereby consent to our disclaimer and agree to its terms.", + "create.tooltip.randomWipDescription7": "This one maybe isn't for you. What about that one?", + "create.tooltip.randomWipDescription8": "Use it and regret your decision immediately.", + "_": "->------------------------] Ponder Content [------------------------<-", - "_": "->------------------------] 분석 내용 [------------------------<-", - - "create.ponder.hold_to_ponder": "[%1$s]을(를) 누르면 이 아이템을 분석합니다", - "create.ponder.subject": "이 분석의 주제", - "create.ponder.pondering": "분석...", - "create.ponder.identify_mode": "알아보기 모드가 활성화되었습니다.\n해제하려면 [%1$s]을(를) 누르세요", - "create.ponder.associated": "관련된 아이템", + "create.ponder.hold_to_ponder": "[%1$s]키를 눌러 분석하기", + "create.ponder.subject": "분석의 주제", + "create.ponder.pondering": "분석 중입니다...", + "create.ponder.identify_mode": "탐색모드가 활성화되어 있습니다. [%1$s]를 눌러 중지합니다.", + "create.ponder.associated": "연관된 항록들", "create.ponder.close": "닫기", - "create.ponder.identify": "알아보기", + "create.ponder.identify": "탐색", "create.ponder.next": "다음 장면", "create.ponder.previous": "이전 장면", - "create.ponder.replay": "다시 보기", - "create.ponder.think_back": "되짚어보기", - "create.ponder.slow_text": "천천히 읽기", - "create.ponder.shared.movement_anchors": "연결대나 강력 접착제의 도움으로 큰 구조물을 움직이게 만들 수 있습니다", - "create.ponder.shared.rpm32": "32 RPM / 분당 회전수", + "create.ponder.replay": "다시 재생", + "create.ponder.think_back": "되돌아가기", + "create.ponder.slow_text": "편하게 읽기", + "create.ponder.exit": "나가기", + "create.ponder.welcome": "분석 메뉴에 어서오세요", + "create.ponder.categories": "Create에서 둘러볼 수 있는 목록들", + "create.ponder.index_description": "아이콘을 클릭해 관련 아이템과 블록에 대해 알아볼 수 있습니다.", + "create.ponder.index_title": "분석 메뉴 제목", + "create.ponder.shared.movement_anchors": "섀시나 강력 접착제로 큰 구조물도 옮길 수 있습니다.", + "create.ponder.shared.rpm32": "32 RPM", "create.ponder.shared.sneak_and": "웅크리기 +", - "create.ponder.shared.storage_on_contraption": "장치에 저장소를 붙이면, 자동으로 떨어져 있는 아이템을 줍습니다", - "create.ponder.shared.behaviour_modify_wrench": "이러한 방식은 스패너를 사용하여 변경할 수 있습니다", - "create.ponder.shared.rpm8": "8 RPM / 분당 회전수", + "create.ponder.shared.storage_on_contraption": "구조물에 부착된 보관함은 구조물이 떨어뜨린 아이템을 자동으로 줍습니다.", + "create.ponder.shared.behaviour_modify_wrench": "이 기능은 렌치를 이용해 변경할 수 있습니다.", + "create.ponder.shared.rpm8": "8 RPM", "create.ponder.shared.ctrl_and": "Ctrl +", - "create.ponder.shared.rpm16_source": "근원: 16 RPM / 분당 회전수", - "create.ponder.shared.rpm16": "16 RPM / 분당 회전수", - "create.ponder.tag.kinetic_sources": "동적 근원", - "create.ponder.tag.kinetic_sources.description": "회전력을 만들어 내는 장치입니다.", - "create.ponder.tag.contraption_actor": "동작장치", - "create.ponder.tag.contraption_actor.description": "웅직이는 장치에 부착하면 특정한 행동을 보이는 장치입니다.", - "create.ponder.tag.arm_targets": "기계식 팔의 대상", - "create.ponder.tag.arm_targets.description": "기계식 팔의 입력구나 출력구로 선택할 수 있는 장치입니다.", - "create.ponder.tag.logistics": "아이템 이동", - "create.ponder.tag.logistics.description": "아이템을 옮기거나 옮기는 것을 도와주는 장치입니다.", - "create.ponder.tag.movement_anchor": "부착장치", - "create.ponder.tag.movement_anchor.description": "다양한 방법으로 구조물을 부착하여 움직이게 만드는 장치입니다.", + "create.ponder.shared.rpm16_source": "기본 속도: 16 RPM", + "create.ponder.shared.rpm16": "16 RPM", + "create.ponder.tag.kinetic_sources": "동력 생산", + "create.ponder.tag.kinetic_sources.description": "동력을 생산하는 장치입니다.", + "create.ponder.tag.contraption_actor": "구조물 장치", + "create.ponder.tag.contraption_actor.description": "움직이는 구조물에 부착되어 특정 기능을 수행하는 장치입니다.", + "create.ponder.tag.arm_targets": "기계 팔의 목표 대상", + "create.ponder.tag.arm_targets.description": "기계 팔이 가져가거나 놓을 곳으로 선택할 수 있는 부품입니다.", + "create.ponder.tag.logistics": "아이템 수송", + "create.ponder.tag.logistics.description": "아이템을 옮기는데 도움을 줄 부품입니다.", + "create.ponder.tag.movement_anchor": "이동 고정장치", + "create.ponder.tag.movement_anchor.description": "부착된 구조물을 다양한 방법으로 움직이게하는 장치입니다.", "create.ponder.tag.creative": "크리에이티브 모드", - "create.ponder.tag.creative.description": "일반적으로 서바이벌 모드에서는 이용할 수 없는 장치입니다.", - "create.ponder.tag.kinetic_relays": "동적 블록", - "create.ponder.tag.kinetic_relays.description": "회전력을 다른 방향으로 전달하는 장치입니다.", - "create.ponder.tag.windmill_sails": "날개 블록과 풍차 회전장치", - "create.ponder.tag.windmill_sails.description": "풍차에 이용할 수 있는 풍차의 힘을 결정하는 블록입니다. 이러한 블록들은 모두 동일한 효율을 냅니다.", - "create.ponder.tag.contraption_assembly": "블록 부착 아이템", - "create.ponder.tag.contraption_assembly.description": "구조물을 연결할 수 있는 도구, 장치입니다.", - "create.ponder.tag.decoration": "미적 블록", - "create.ponder.tag.decoration.description": "주로 장식용으로 이용되는 장치입니다.", - "create.ponder.tag.kinetic_appliances": "동적 기계장치", - "create.ponder.tag.kinetic_appliances.description": "회전력을 이용하는 장치입니다.", - "create.ponder.tag.redstone": "레드스톤 장치", - "create.ponder.tag.redstone.description": "레드스톤 공학에 이용할 수 있는 장치입니다.", - "create.ponder.tag.fluids": "액체 조종장치", - "create.ponder.tag.fluids.description": "액체를 전달하고 이용할 수 있는 장치입니다.", + "create.ponder.tag.creative.description": "서바이벌 모드에서는 얻을 수 없는 부품입니다.", + "create.ponder.tag.kinetic_relays": "동력 부품", + "create.ponder.tag.kinetic_relays.description": "동력을 다른 곳으로 연결할 때 도움을 주는 부품입니다.", + "create.ponder.tag.windmill_sails": "풍차 베어링의 날개", + "create.ponder.tag.windmill_sails.description": "조립되었을 때 풍차 구조물의 동력에 영향을 주는 블록들입니다. 이 블록들은 동일한 효율을 가집니다.", + "create.ponder.tag.contraption_assembly": "블록 부착 도구", + "create.ponder.tag.contraption_assembly.description": "블록들을 이어 구조물로 만들게해주는 도구와 부품입니다.", + "create.ponder.tag.decoration": "장식", + "create.ponder.tag.decoration.description": "주로 장식 용도로 쓰이는 부품입니다.", + "create.ponder.tag.kinetic_appliances": "동력 장치", + "create.ponder.tag.kinetic_appliances.description": "동력을 사용하는 장치입니다.", + "create.ponder.tag.redstone": "레드스톤 부품", + "create.ponder.tag.redstone.description": "레드스톤 공학에 쓰이는 부품입니다.", + "create.ponder.tag.fluids": "액체 조정", + "create.ponder.tag.fluids.description": "액체를 나르고 사용하는 장치입니다.", - "create.ponder.adjustable_pulse_repeater.header": "조절식 순간작동 중계기를 통한 신호 제어", - "create.ponder.adjustable_pulse_repeater.text_1": "조절식 순간작동 중계기는 지연 후에 짧은 신호를 내보냅니다", - "create.ponder.adjustable_pulse_repeater.text_2": "스크롤하여, 지연 시간을 설정할 수 있습니다", - "create.ponder.adjustable_pulse_repeater.text_3": "설정할 수 있는 최대 지연 시간은 30분입니다", + "create.ponder.adjustable_pulse_repeater.header": "가변 펄스 리피터를 이용해 신호 조절하기", + "create.ponder.adjustable_pulse_repeater.text_1": "가변 펄스 리피터는 딜레이 이후 짧은 신호를 보냅니다.", + "create.ponder.adjustable_pulse_repeater.text_2": "마우스 휠을 이용하여 딜레이를 조절합니다.", + "create.ponder.adjustable_pulse_repeater.text_3": "딜레이는 최대 30분까지 조절할 수 있습니다.", - "create.ponder.adjustable_repeater.header": "조절식 중계기를 통한 신호 제어", - "create.ponder.adjustable_repeater.text_1": "조절식 중계기는 일반적인 중계기와 비슷하게 작동합니다", - "create.ponder.adjustable_repeater.text_2": "지연 후에 신호를 내보내고...", - "create.ponder.adjustable_repeater.text_3": "...지연 시간만큼 신호가 남습니다", - "create.ponder.adjustable_repeater.text_4": "스크롤하여, 지연 시간을 설정할 수 있습니다", - "create.ponder.adjustable_repeater.text_5": "설정할 수 있는 최대 지연 시간은 30분입니다", + "create.ponder.adjustable_repeater.header": "가변 리피터를 이용해 신호 조절하기", + "create.ponder.adjustable_repeater.text_1": "가변 리피터는 기존 리피터와 비슷합니다.", + "create.ponder.adjustable_repeater.text_2": "정해진 딜레이만큼 신호를 주고...", + "create.ponder.adjustable_repeater.text_3": "...정해진 딜레이만큼 쉽니다.", + "create.ponder.adjustable_repeater.text_4": "마우스 휠을 이용해 딜레이를 조절합니다.", + "create.ponder.adjustable_repeater.text_5": "딜레이는 최대 30분까지 조절할 수 있습니다.", - "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_4": "나머지 아이템은 계속 수송됩니다", + "create.ponder.andesite_tunnel.header": "안산암 터널 사용하기", + "create.ponder.andesite_tunnel.text_1": "안산암 터널은 벨트를 덮는데 사용할 수 있습니다.", + "create.ponder.andesite_tunnel.text_2": "인신임 터널의 옆면에 접촉점이 있다면...", + "create.ponder.andesite_tunnel.text_3": "...터널은 통과하는 아이템 스택에서 1개의 아이템을 분리시킵니다.", + "create.ponder.andesite_tunnel.text_4": "나머지는 가던 길을 갑니다.", - "create.ponder.basin.header": "대야를 통한 아이템 처리", - "create.ponder.basin.text_1": "대야는 아이템과 액체를 저장하고 처리할 수 있습니다", - "create.ponder.basin.text_2": "처리되면, 대야는 대야의 측면 아래쪽에 처리된 아이템을 출력하려 합니다", - "create.ponder.basin.text_3": "아래에 출력 블록이 있다면, 대야에 출력 구멍이 나타납니다", - "create.ponder.basin.text_4": "다양한 블록들을 출력 블록으로 사용할 수 있습니다", - "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.header": "대야 안에서 아이템 처리하기", + "create.ponder.basin.text_1": "대야는 아이템과 액체를 담을 수 있습니다.", + "create.ponder.basin.text_2": "처리 이후, 대야는 옆면 아래로 결과물을 내보냅니다.", + "create.ponder.basin.text_3": "알맞는 부품이 있다면, 대야는 수송관을 나타냅니다.", + "create.ponder.basin.text_4": "다양한 부품들이 아이템을 받을 수 있습니다.", + "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.bearing_modes.header": "기계식 회전장치의 회전 방식", - "create.ponder.bearing_modes.text_1": "회전장치가 작동을 멈출 때마다 구조물이 가장 가까운 각도에서 블록으로 되돌아갑니다", - "create.ponder.bearing_modes.text_2": "초기 각도에 근접해 있는 경우에만 설치되어 있게 만들거나 절대 설치되어 있지 않게 만들도록 설정할 수 있습니다", + "create.ponder.bearing_modes.header": "베어링의 이동 설정", + "create.ponder.bearing_modes.text_1": "멈췄을 때, 베어링은 구조물을 가까운 수직 각도로 설치합니다.", + "create.ponder.bearing_modes.text_2": "이는 절대 설치하지 않거나, 시작한 지점에만 설치하도록 설정할 수 있습니다.", - "create.ponder.belt_casing.header": "틀을 씌운 벨트", - "create.ponder.belt_casing.text_1": "황동 틀이나 안산암 틀로 벨트를 장식할 수 있습니다", - "create.ponder.belt_casing.text_2": "스패너를 사용하면 틀을 해체할 수 있습니다", + "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_2": "웅크리고 오른쪽 버튼을 누르면 선택을 취소할 수 있습니다", - "create.ponder.belt_connector.text_3": "벨트 전체에는 추가적인 축을 설치할 수 있습니다", - "create.ponder.belt_connector.text_4": "벨트를 통해 연결된 축은 동일한 속도와 방향으로 회전합니다", - "create.ponder.belt_connector.text_5": "추가된 축은 스패너로 해체할 수 있습니다", - "create.ponder.belt_connector.text_6": "벨트는 염료로 염색할 수 있습니다", + "create.ponder.belt_connector.header": "벨트 사용하기", + "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_5": "추가된 축은 렌치로 없앨 수 있습니다.", + "create.ponder.belt_connector.text_6": "벨트를 염색하여 꾸밀 수 있습니다.", - "create.ponder.belt_directions.header": "벨트의 유효한 방향", - "create.ponder.belt_directions.text_1": "벨트는 아무 방향으로나 연결할 수 없습니다", - "create.ponder.belt_directions.text_2": "1. 수평으로 연결할 수 있습니다", - "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.header": "벨트 설치에 알맞는 방향", + "create.ponder.belt_directions.text_1": "벨트는 임의의 각도로 설치할 수 없습니다.", + "create.ponder.belt_directions.text_2": "1. 수평으로 연결할 수 있습니다.", + "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_transport.header": "벨트의 물류적 이용", - "create.ponder.belt_transport.text_1": "벨트가 이동하면 아이템과 기타 엔티티가 운송됩니다", - "create.ponder.belt_transport.text_2": "비어있는 손으로 오른쪽 버튼을 눌러 벨트에 있는 아이템을 가져갈 수 있습니다", + "create.ponder.belt_transport.header": "벨트를 이용한 수송", + "create.ponder.belt_transport.text_1": "움직이는 벨트는 아이템과 엔티티를 옮깁니다.", + "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.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.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_6": "붙어있는 벨트에 황동 터널을 설치하면 터널끼리 연결할 수 있습니다", - "create.ponder.brass_tunnel.text_7": "연결된 출력구는 들어오는 아이템을 분류합니다", - "create.ponder.brass_tunnel.text_8": "아이템을 분류하기 위해, 퍼널로 아이템을 직접 넣을 수도 있습니다", + "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_6": "벨트 위, 평행한 황동 터널끼리는 연결됩니다.", + "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.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.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.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.header": "수레 구조물 회전 설정", + "create.ponder.cart_assembler_modes.text_1": "구조물이 바라보는 방향은 수레의 방향과 동일합니다.", + "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.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.chain_drive.header": "연쇄 전달기를 통한 회전력 전달", - "create.ponder.chain_drive.text_1": "연쇄 전달기는 일렬로만 연결될 수 있습니다", - "create.ponder.chain_drive.text_2": "연결된 모든 축은 동일한 방향, 동일한 속도로 회전합니다", - "create.ponder.chain_drive.text_3": "전달기는 90도 회전되어 있어도 연결될 수 있습니다", + "create.ponder.chain_drive.header": "체인 드라이브로 회전 전달하기", + "create.ponder.chain_drive.text_1": "체인 드라이브는 한 줄로 회전을 전달합니다.", + "create.ponder.chain_drive.text_2": "이렇게 연결된 모든 축들은 같은 방향으로 회전합니다.", + "create.ponder.chain_drive.text_3": "한 줄의 아무 부분을 90도 돌릴 수 있습니다.", - "create.ponder.chain_gearshift.header": "연쇄 변속기를 통한 회전 속도 제어", - "create.ponder.chain_gearshift.text_1": "신호를 받지 않은 연쇄 변속기는 연쇄 전달기와 똑같이 작동합니다", - "create.ponder.chain_gearshift.text_2": "신호를 받으면, 연결된 연쇄 전달기에 속도가 2배로 빨라집니다", - "create.ponder.chain_gearshift.text_3": "신호를 받은 연쇄 변속기가 근원에 없다면, 변속기의 속도가 절반으로 줄어듭니다", - "create.ponder.chain_gearshift.text_4": "두 경우 모두, 신호를 받은 연쇄 변속기보다 연결된 연쇄 전달기가 2배 더 빠른 속도로 회전됩니다", - "create.ponder.chain_gearshift.text_5": "조절식 레버를 사용하면, 1에서 2배 사이의 속도 배율을 더 정확하게 조절할 수 있습니다", - "create.ponder.chain_gearshift.text_6": "12 RPM / 분당 회전수", + "create.ponder.chain_gearshift.header": "벨트 변속기를 통해 회전 속도 조절하기", + "create.ponder.chain_gearshift.text_1": "신호를 받지 않은 벨트 변속기는 체인 드라이브와 똑같이 작동합니다.", + "create.ponder.chain_gearshift.text_2": "신호를 받으면, 다른 체인 드라이브에 전달되는 속도는 2배가 됩니다.", + "create.ponder.chain_gearshift.text_3": "반대로 벨트 변속기가 직접 회전을 받지 않고 있다면, 변속기의 속도는 절반이 됩니다.", + "create.ponder.chain_gearshift.text_4": "두 가지 경우에도, 같은 줄의 체인 드라이브의 속도는 변속기 속도의 2배가 됩니다.", + "create.ponder.chain_gearshift.text_5": "아날로그 레버를 사용하면, 속도 비율을 1 ~ 2배 사이로 맞출 수 있습니다.", + "create.ponder.chain_gearshift.text_6": "12 RPM", - "create.ponder.chute.header": "도관을 통한 아래 방향 아이템 이동", - "create.ponder.chute.text_1": "도관은 아이템을 수직으로 수송합니다", - "create.ponder.chute.text_2": "스패너를 사용하여, 도관에 창을 낼 수 있습니다", - "create.ponder.chute.text_3": "도관의 옆면에 도관을 설치하면 도관이 대각선으로 설치됩니다", + "create.ponder.chute.header": "슈트를 이용해 아이템을 아래로 옮기기", + "create.ponder.chute.text_1": "슈트는 보관함에 있는 아이템을 수직으로 옮길 수 있습니다.", + "create.ponder.chute.text_2": "렌치를 이용해 창문을 만들 수 있습니다.", + "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.header": "슈트를 이용해 아이템을 위로 옮기기", + "create.ponder.chute_upward.text_1": "선풍기를 위/아래에 설치하면, 슈트는 아이템을 위로 보낼 수 있습니다.", + "create.ponder.chute_upward.text_2": "엔지니어의 고글로 슈트를 관찰하여 이동 방향을 확인하세요.", + "create.ponder.chute_upward.text_3": "막힌 끝 부분에서 아이템은 옆에서 넣거나 빼내야합니다.", - "create.ponder.clockwork_bearing.header": "시계 회전장치를 통한 구조물 회전", - "create.ponder.clockwork_bearing.text_1": "시계 회전장치는 부착된 블록을 시계 바늘처럼 회전하게 만들 수 있습니다", - "create.ponder.clockwork_bearing.text_2": "회전력을 받으면 구조물이 시침처럼 현재 시각에 따라 회전합니다", + "create.ponder.clockwork_bearing.header": "시계 베어링을 이용한 구조물 움직이기", + "create.ponder.clockwork_bearing.text_1": "시계 베어링은 앞에 있는 블록을 부착시킵니다.", + "create.ponder.clockwork_bearing.text_2": "동력을 받으면, 현재 시간에 맞춰 구조물이 돌아갑니다.", "create.ponder.clockwork_bearing.text_3": "3:00", "create.ponder.clockwork_bearing.text_4": "4:00", - "create.ponder.clockwork_bearing.text_5": "회전장치를 오른쪽 버튼으로 누르면 구조물이 회전하거나 회전을 멈춥니다", - "create.ponder.clockwork_bearing.text_6": "시침 앞에는 두 번째 구조물을 추가할 수 있습니다", - "create.ponder.clockwork_bearing.text_7": "강력 접착제 등을 통해 두 구조물이 서로 부착되어 있지 않아야 합니다", - "create.ponder.clockwork_bearing.text_8": "이제, 두 번째 구조물이 분침처럼 회전합니다", + "create.ponder.clockwork_bearing.text_5": "베어링을 우클릭하여 구조물을 멈추거나 움직이세요.", + "create.ponder.clockwork_bearing.text_6": "시침 구조물 앞에 분침 구조물을 추가할 수 있습니다.", + "create.ponder.clockwork_bearing.text_7": "접착제나 슬라임볼로 두 구조물을 연결하지 마세요.", + "create.ponder.clockwork_bearing.text_8": "두번째 구조물은 분침처럼 돌아갑니다.", - "create.ponder.clutch.header": "단절기를 통한 회전력 제어", - "create.ponder.clutch.text_1": "단절기는 회전력을 다른 방향으로 전달하지 않습니다", - "create.ponder.clutch.text_2": "레드스톤 신호를 받으면, 연결이 끊어집니다", + "create.ponder.clutch.header": "클러치를 이용해 동력 조절하기", + "create.ponder.clutch.text_1": "클러치는 한 줄로 동력을 전달합니다.", + "create.ponder.clutch.text_2": "레드스톤 신호를 받으면, 동력 전달을 끊습니다.", - "create.ponder.cog_speedup.header": "톱니바퀴를 통한 변속", - "create.ponder.cog_speedup.text_1": "큰 톱니바퀴와 작은 톱니바퀴는 대각선으로 연결할 수 있습니다", - "create.ponder.cog_speedup.text_2": "큰 톱니바퀴에서 작은 톱니바퀴로 회전력이 전달되면 회전력이 2배로 빨라집니다", - "create.ponder.cog_speedup.text_3": "반대로 위치를 바꾸면, 전달되는 속도가 절반으로 줄어듭니다", + "create.ponder.cog_speedup.header": "톱니바퀴로 기어변속하기", + "create.ponder.cog_speedup.text_1": "큰 톱니바퀴와 작은 톱니바퀴는 대각선으로 연결됩니다.", + "create.ponder.cog_speedup.text_2": "큰 쪽에서 작은 쪽으로 가는 속도는 2배가 됩니다.", + "create.ponder.cog_speedup.text_3": "반대의 경우에는 속도가 절반이 됩니다.", - "create.ponder.cogwheel.header": "톱니바퀴를 통한 회전력 전달", - "create.ponder.cogwheel.text_1": "톱니바퀴는 가까이에 있는 다른 톱니바퀴에다 회전력을 전달합니다", - "create.ponder.cogwheel.text_2": "바로 옆에 연결된 톱니바퀴는 반대 방향으로 회전합니다", + "create.ponder.cogwheel.header": "톱니바퀴를 이용해 동력 전달하기", + "create.ponder.cogwheel.text_1": "톱니바퀴는 인접한 톱니바퀴에 동력을 전달합니다.", + "create.ponder.cogwheel.text_2": "이렇게 연결된 톱니바퀴 축은 반대방향으로 돌아갑니다.", - "create.ponder.creative_motor.header": "크리에이티브 모터를 통한 회전력 생성", - "create.ponder.creative_motor.text_1": "크리에이티브 모터는 회전력을 설정할 수 있는 작은 동적 근원입니다", - "create.ponder.creative_motor.text_2": "뒤쪽을 바라보고 스크롤하면 모터의 분당 회전수가 변경됩니다", + "create.ponder.creative_fluid_tank.header": "크리에이티브 탱크", + "create.ponder.creative_fluid_tank.text_1": "크리에이티브 탱크는 무한히 액체를 공급합니다.", + "create.ponder.creative_fluid_tank.text_2": "액체가 든 용기로 우클릭하여 액체를 채울 수 있습니다.", + "create.ponder.creative_fluid_tank.text_3": "파이프로 탱크에서 액체를 무한히 뽑아낼 수 있습니다.", + "create.ponder.creative_fluid_tank.text_4": "크리에이티브 탱크로 들어가는 모든 액체는 삭제됩니다.", - "create.ponder.crushing_wheels.header": "분쇄용 바퀴를 통한 아이템 처리", - "create.ponder.crushing_wheels.text_1": "한 쌍의 분쇄용 바퀴는 매우 효과적으로 아이템을 갈아낼 수 있습니다", - "create.ponder.crushing_wheels.text_2": "분쇄용 바퀴가 작동되려면, 바퀴가 안쪽으로 회전해야 합니다", - "create.ponder.crushing_wheels.text_3": "아이템을 바퀴 위에 던지거나 입력하면 아이템이 처리됩니다", - "create.ponder.crushing_wheels.text_4": "이러한 장치로 아이템을 자동으로 처리할 수 있습니다", + "create.ponder.creative_motor.header": "크리에이티브 모터를 이용해 동력 생산하기", + "create.ponder.creative_motor.text_1": "크리에이티브 모터는 동력을 쉽게 생산, 조절합니다.", + "create.ponder.creative_motor.text_2": "모터 후면을 스크롤해서 모터의 RPM을 조절할 수 있습니다.", - "create.ponder.deployer.header": "전개장치의 이용", - "create.ponder.deployer.text_1": "전개장치는 회전력을 받으면, 플레이어의 상호작용을 따라 할 수 있습니다", - "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": "전개장치는 항상 2블록 앞의 위치에만 상호작용합니다", - "create.ponder.deployer.text_3": "바로 앞에 있는 블록이 직접적으로 상호작용을 방해하지는 않습니다", - "create.ponder.deployer.text_4": "전개장치는:", - "create.ponder.deployer.text_5": "블록을 설치하고,", - "create.ponder.deployer.text_6": "아이템을 사용하고,", - "create.ponder.deployer.text_7": "블록을 활성화하고,", - "create.ponder.deployer.text_8": "블록을 파괴하고,", - "create.ponder.deployer.text_9": "몬스터를 공격할 수 있습니다", + "create.ponder.crushing_wheels.header": "분쇄 휠을 이용해 아이템 가공하기", + "create.ponder.crushing_wheels.text_1": "한 쌍의 분쇄 휠은 아이템을 매우 효과적으로 갈아버립니다.", + "create.ponder.crushing_wheels.text_2": "동력을 전달하여 서로 맞물리게 해야합니다.", + "create.ponder.crushing_wheels.text_3": "위에서 투입된 아이템은 가공되고, 아래로 떨어집니다.", + "create.ponder.crushing_wheels.text_4": "이 과정은 자동화 될 수 있습니다.", - "create.ponder.deployer_contraption.header": "장치에서의 전개장치의 이용", - "create.ponder.deployer_contraption.text_1": "움직이는 장치에서 전개장치가 이동하면...", - "create.ponder.deployer_contraption.text_2": "전개장치는 장소마다 작동하며, 전개장치는 붙어있는 저장소의 아이템을 사용할 수 있습니다", - "create.ponder.deployer_contraption.text_3": "필터 슬롯을 사용하여 사용할 아이템을 지정할 수 있습니다", + "create.ponder.deployer.header": "배포기 이용하기", + "create.ponder.deployer.text_1": "동력을 받으면, 배포기는 플레이어의 행동을 흉내냅니다.", + "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_3": "바로 앞에 블록이 있어도 상괸없습니다.", + "create.ponder.deployer.text_4": "배포기가 할 수 있는 것:", + "create.ponder.deployer.text_5": "블록 설치하기", + "create.ponder.deployer.text_6": "아이템 사용하기", + "create.ponder.deployer.text_7": "블록 활성화하기", + "create.ponder.deployer.text_8": "블록 수확하기", + "create.ponder.deployer.text_9": "몹 공격하기", - "create.ponder.deployer_modes.header": "전개장치의 방식", - "create.ponder.deployer_modes.text_1": "기본적으로, 전개장치는 오른쪽 버튼을 누르는 상호작용을 따라합니다", - "create.ponder.deployer_modes.text_2": "스패너를 사용하면, 왼쪽 버튼을 따라하도록 설정할 수 있습니다", + "create.ponder.deployer_contraption.header": "구조물에서의 배포기", + "create.ponder.deployer_contraption.text_1": "배포기가 움직이는 구조물의 일부일 때,", + "create.ponder.deployer_contraption.text_2": "배포기는 움직일 때마다 작동하며, 구조물에 붙어있는 아무 보관함의 아이템을 사용합니다.", + "create.ponder.deployer_contraption.text_3": "필터를 이용해 어떤 아이템을 사용할 지 정할 수 있습니다.", - "create.ponder.deployer_redstone.header": "레드스톤을 통한 전개장치의 제어", - "create.ponder.deployer_redstone.text_1": "레드스톤 신호를 받으면, 전개장치가 작동되지 않습니다", - "create.ponder.deployer_redstone.text_2": "작동이 정지되기 전에, 전개장치는 모든 작동을 완료하고 정지됩니다", - "create.ponder.deployer_redstone.text_3": "따라서, 아주 짧은 시간 동안 신호를 차단하면 1번만 작동하게 만들 수 있습니다", + "create.ponder.deployer_modes.header": "배포기의 작동 방식", + "create.ponder.deployer_modes.text_1": "배포기는 기본적으로 우클릭을 흉내냅니다.", + "create.ponder.deployer_modes.text_2": "렌치를 이용해, 좌클릭을 흉내내도록 설정할 수 있습니다.", - "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.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.empty_blaze_burner.header": "비어있는 블레이즈 가열기의 이용", - "create.ponder.empty_blaze_burner.text_1": "비어있는 가열기를 들고 오른쪽 버튼을 누르면 블레이즈를 포획할 수 있습니다", - "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_6": "하지만, 산업용으로 이용하기에는 적합하지 않습니다.", + "create.ponder.deployer_redstone.header": "레드스톤과 배포기", + "create.ponder.deployer_redstone.text_1": "레드스톤 신호를 받으면, 배포기는 작동하지 않습니다.", + "create.ponder.deployer_redstone.text_2": "작동을 멈추기 전에, 배포기는 입력된 행동을 마무리합니다.", + "create.ponder.deployer_redstone.text_3": "따라서 부정 펄스는 한 번만 작동하게 합니다.", - "create.ponder.fan_direction.header": "공업용 선풍기의 바람", - "create.ponder.fan_direction.text_1": "공업용 선풍기는 회전력을 사용하여 바람을 일으킬 수 있습니다", - "create.ponder.fan_direction.text_2": "회전력에 따라 바람의 방향과 힘이 달라집니다", + "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.fan_processing.header": "선풍기를 통한 아이템 처리", - "create.ponder.fan_processing.text_1": "바람이 용암을 통과하면, 바람이 뜨거워집니다", - "create.ponder.fan_processing.text_2": "아이템에 뜨거운 바람을 쐬면 아이템이 제련됩니다", - "create.ponder.fan_processing.text_3": "음식 아이템에 뜨거운 바람을 쐬면 아이템이 소각됩니다", - "create.ponder.fan_processing.text_4": "대신에, 불을 사용하면 음식 아이템을 훈연할 수 있습니다", - "create.ponder.fan_processing.text_5": "바람이 물을 통과하면 바람으로 아이템을 세척할 수 있습니다", - "create.ponder.fan_processing.text_6": "세척은 제련, 훈연과 달리 새로운 처리를 할 수 있습니다", - "create.ponder.fan_processing.text_7": "선풍기의 속도는 처리 속도에 관여하지 않고 바람의 범위에만 영향을 줍니다", - "create.ponder.fan_processing.text_8": "또한, 선풍기는 아이템 거치대와 벨트에 놓인 아이템도 처리할 수 있습니다", + "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_3": "이제 당신은 다양한 장치에 쓰일 이상적인 열원을 얻었습니다.", + "create.ponder.empty_blaze_burner.text_4": "장식적인 요소로는 라이터로 불을 붙일 수 있습니다.", + "create.ponder.empty_blaze_burner.text_5": "불꽃은 영혼불꽃으로 바꿀 수 있습니다.", + "create.ponder.empty_blaze_burner.text_6": "그러나 장치에 쓰일 열원으로는 적합하지 않습니다.", - "create.ponder.fan_source.header": "공업용 선풍기를 통한 회전력 생성", - "create.ponder.fan_source.text_1": "아래쪽에 있는 불이나 용암을 바라보고 있는 선풍기는 회전력을 생성할 수 있습니다", - "create.ponder.fan_source.text_2": "레드스톤 신호를 받으면, 선풍기가 회전력을 생성합니다", + "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_3": "이 파이프는 이제 나중에 추가된 블록에 영향받지 않습니다.", - "create.ponder.flywheel.header": "축 회전바퀴를 통한 회전력 생성", - "create.ponder.flywheel.text_1": "축 회전바퀴는 화로 원동기에서 회전력을 생성할 수 있습니다", - "create.ponder.flywheel.text_2": "매우 큰 부하 수용량을 가지고 있습니다", - "create.ponder.flywheel.text_3": "용광로를 사용하면 원동기의 효율이 2배로 증가합니다", + "create.ponder.fan_direction.header": "선풍기의 공기흐름", + "create.ponder.fan_direction.text_1": "선풍기는 동력을 이용해 바람을 만들어냅니다.", + "create.ponder.fan_direction.text_2": "바람의 세기와 방향, 거리는 동력에 따라 달라집니다.", - "create.ponder.funnel_compat.header": "퍼널의 호환성", - "create.ponder.funnel_compat.text_1": "퍼널은 여러 가지 블록과 원활하게 상호작용할 수 있습니다", - "create.ponder.funnel_compat.text_2": "톱", + "create.ponder.fan_processing.header": "선풍기로 아이템 가공하기", + "create.ponder.fan_processing.text_1": "바람이 용암을 통과하면, 공기가 뜨거워집니다.", + "create.ponder.fan_processing.text_2": "바람이 지나가는 자리의 아이템은 구워집니다.", + "create.ponder.fan_processing.text_3": "음식은 불타 없어집니다.", + "create.ponder.fan_processing.text_4": "대신, 불을 이용하면 음식을 구울 수 있습니다.", + "create.ponder.fan_processing.text_5": "물을 통과하는 바람을 통해 세척할 수 있습니다.", + "create.ponder.fan_processing.text_6": "이를 통해 새로운 가공을 할 수 있습니다.", + "create.ponder.fan_processing.text_7": "선풍기의 속도는 가공 속도와 관련이 없습니다!", + "create.ponder.fan_processing.text_8": "선풍기 가공은 벨트나 아이템 거치대의 아이템에도 적용됩니다.", + + "create.ponder.fan_source.header": "선풍기를 이용해 동력 생산하기", + "create.ponder.fan_source.text_1": "열원을 향한 선풍기는 동력을 제공할 수 있습니다.", + "create.ponder.fan_source.text_2": "레드스톤 신호를 받으면, 동력을 제공하기 시작합니다.", + + "create.ponder.fluid_pipe_flow.header": "파이프로 액체 옮기기", + "create.ponder.fluid_pipe_flow.text_1": "파이프는 한 종류의 액체만 옮길 수 있습니다.", + "create.ponder.fluid_pipe_flow.text_2": "렌치를 이용하여 직선 파이프에 창문을 달 수 있습니다.", + "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_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_5": "다양한 다른 블록에서도 액체를 뽑아낼 수도 있습니다.", + + "create.ponder.fluid_tank_sizes.header": "액체 탱크의 크기", + "create.ponder.fluid_tank_sizes.text_1": "액체 탱크는 여러개 연결하여 용량을 늘릴 수 있습니다.", + "create.ponder.fluid_tank_sizes.text_2": "밑면 너비는 3블록까지 늘릴 수 있습니다.", + "create.ponder.fluid_tank_sizes.text_3": "높이는 32블록까지 가능합니다.", + "create.ponder.fluid_tank_sizes.text_4": "렌치를 이용해 탱크의 창문을 닫을 수 있습니다.", + + "create.ponder.fluid_tank_storage.header": "탱크에 액체 저장하기", + "create.ponder.fluid_tank_storage.text_1": "탱크는 많은 양의 액체를 저장합니다.", + "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.flywheel.header": "플라이휠로 동력 생산하기", + "create.ponder.flywheel.text_1": "플라이휠로 동력을 생산하기 위해선, 화로 엔진이 필요합니다.", + "create.ponder.flywheel.text_2": "플라이휠은 피로도 용량이 매우 높습니다.", + "create.ponder.flywheel.text_3": "용광로를 사용하면 동력 속도가 2배가 됩니다.", + + "create.ponder.funnel_compat.header": "퍼널 호환성", + "create.ponder.funnel_compat.text_1": "퍼널는 다른 장치들 위에 설치할 수도 있습니다.", + "create.ponder.funnel_compat.text_2": "세로 톱", "create.ponder.funnel_compat.text_3": "아이템 거치대", - "create.ponder.funnel_compat.text_4": "흡수통", + "create.ponder.funnel_compat.text_4": "아이템 배수구", - "create.ponder.funnel_direction.header": "이동 방향", - "create.ponder.funnel_direction.text_1": "일반적으로 설치하면, 퍼널이 저장소에서 아이템을 꺼냅니다", - "create.ponder.funnel_direction.text_2": "웅크리고 설치하면, 퍼널이 저장소에 아이템을 넣습니다", - "create.ponder.funnel_direction.text_3": "스패너를 사용하면, 설치된 퍼널의 방향이 변경됩니다", - "create.ponder.funnel_direction.text_4": "대부분의 방향에도 동일한 규칙이 적용됩니다", - "create.ponder.funnel_direction.text_5": "벨트 위에 설치된 퍼널은 이동 방향에 따라 아이템이 입력/출력됩니다", + "create.ponder.funnel_direction.header": "수송 방향", + "create.ponder.funnel_direction.text_1": "설치하면, 보관함에서 아이템을 빼냅니다.", + "create.ponder.funnel_direction.text_2": "웅크리면서 설치하면, 아이템을 가져갑니다.", + "create.ponder.funnel_direction.text_3": "렌치를 이용해 설치 이후에도 설정을 변경할 수 있습니다.", + "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.header": "퍼널 사용하기", + "create.ponder.funnel_intro.text_1": "퍼널는 보관함에서 아이템을 옮기거나 빼낼 때 유용합니다.", - "create.ponder.funnel_redstone.header": "레드스톤 제어", - "create.ponder.funnel_redstone.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_2": "이러한 용도로는 도관이나 지능형 도관이 더 적합할 수 있습니다", - "create.ponder.funnel_transfer.text_3": "수평 이동은 퍼널이 더 적합합니다", + "create.ponder.funnel_transfer.header": "직접 수송", + "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.text_2": "매우 큰 부하 수용량을 가지고 있습니다", - "create.ponder.furnace_engine.text_3": "용광로를 사용하면 원동기의 효율이 2배로 증가합니다", + "create.ponder.furnace_engine.header": "화로 엔진을 이용해 동력 생산하기", + "create.ponder.furnace_engine.text_1": "화로 엔진은 부착된 화로가 타오를 때 동력을 생산합니다.", + "create.ponder.furnace_engine.text_2": "제공되는 피로도 용량이 매우 높습니다.", + "create.ponder.furnace_engine.text_3": "용광로를 사용하면 동력 속도가 2배가 됩니다.", - "create.ponder.gantry_carriage.header": "다리 운반대의 이용", - "create.ponder.gantry_carriage.text_1": "다리 운반대는 다리 축에서 움직일 수 있습니다", - "create.ponder.gantry_carriage.text_2": "다리 운반대는 부착된 블록을 움직이게 만들 수 있습니다", + "create.ponder.gantry_carriage.header": "갠트리 운반대 사용하기", + "create.ponder.gantry_carriage.text_1": "갠트리 운반대는 갠트리 축 위에서 움직일 수 있습니다.", + "create.ponder.gantry_carriage.text_2": "갠트리 장치는 부착된 블록들을 움직일 수 있습니다.", - "create.ponder.gantry_cascaded.header": "계단식 다리", - "create.ponder.gantry_cascaded.text_1": "다리 축은 강력 접착제 없이도 운반대에 부착할 수 있습니다", - "create.ponder.gantry_cascaded.text_2": "움직이고 있는 다리 축에 설치된 운반대도 마찬가지입니다", - "create.ponder.gantry_cascaded.text_3": "따라서, 다리는 여러 이동 축을 제어할 수 있는 계단식으로 만들 수 있습니다", + "create.ponder.gantry_cascaded.header": "계단식 갠트리", + "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_4": "전달되는 회전력에도 동일한 규칙이 적용됩니다", + "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_4": "운반대 축의 회전에도 적용됩니다.", - "create.ponder.gantry_redstone.header": "레드스톤을 통한 다리의 제어", - "create.ponder.gantry_redstone.text_1": "레드스톤 신호를 받으면, 다리에 있는 운반대가 움직이지 않습니다", - "create.ponder.gantry_redstone.text_2": "대신에, 회전력이 운반대의 출력축으로 전달됩니다", + "create.ponder.gantry_redstone.header": "갠트리 동력 전달", + "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.header": "갠트리 축 사용하기", + "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.header": "기어박스를 이용해 동력 전달하기", + "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": "전환기는 회전력을 다른 방향으로 전달하지 않습니다", - "create.ponder.gearshift.text_2": "레드스톤 신호를 받으면, 축을 반대로 돌립니다", + "create.ponder.gearshift.header": "기어쉬프트를 이용해 동력 조절하기", + "create.ponder.gearshift.text_1": "기어쉬프트는 한 줄로 동력을 전달합니다.", + "create.ponder.gearshift.text_2": "레드스톤 신호를 받으면, 회전을 반전시킵니다.", - "create.ponder.hand_crank.header": "자가발전용 손잡이를 통한 회전력 생성", - "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.header": "핸드 크랭크로 동력 생산하기", + "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.large_cogwheel.header": "큰 톱니바퀴를 통한 회전력 전달", - "create.ponder.large_cogwheel.text_1": "큰 톱니바퀴는 직각으로 연결할 수 있습니다", - "create.ponder.large_cogwheel.text_2": "회전력을 다른 방향의 축으로 전달할 수 있습니다", + "create.ponder.hose_pulley.header": "호스 도르래로 액체 채우고 비우기", + "create.ponder.hose_pulley.text_1": "호스 도르래는 많은 양의 액체를 채우거나 비울 수 있습니다.", + "create.ponder.hose_pulley.text_2": "동력을 전달하여 호스의 높이를 정합니다.", + "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_7": "호스의 채우거나 비우는 속도는 펌프 속도에 기반합니다.", - "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_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.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.linear_chassis_group.header": "선형 연결대의 집단 이동", - "create.ponder.linear_chassis_group.text_1": "선형 연결대는 옆에 있는 동일한 연결대 블록과 연결됩니다", - "create.ponder.linear_chassis_group.text_2": "장치에 의해 움직이면, 같이 이동됩니다", - "create.ponder.linear_chassis_group.text_3": "종류가 다르거나 다른 방향을 바라보는 연결대는 연결되지 않습니다", + "create.ponder.hose_pulley_level.header": "호스 도르래의 채우고 비우는 기준", + "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": "맨 아래부터 채웁니다.", + "create.ponder.hose_pulley_level.text_5": "호스 끝부분 위는 채우지 않습니다.", - "create.ponder.mechanical_arm.header": "기계식 팔의 설정", - "create.ponder.mechanical_arm.text_1": "기계식 팔은 설치하기 전에, 입력구와 출력구를 지정해야 합니다", - "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_8": "퍼널이나 아이템 거치대로 이러한 문제를 어느 정도 해결할 수 있습니다", + "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.mechanical_arm_filtering.header": "기계식 팔의 출력 필터", - "create.ponder.mechanical_arm_filtering.text_1": "입력구", - "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_6": "기계식 팔은 필요한 양만큼 아이템을 가져올 수 있습니다", + "create.ponder.large_cogwheel.header": "큰 톱니바퀴로 동력 전달하기", + "create.ponder.large_cogwheel.text_1": "큰 톱니바퀴는 수직으로 서로 맞물릴 수 있습니다.", + "create.ponder.large_cogwheel.text_2": "이는 다른 축으로 동력을 전달하는데 도움이 됩니다.", - "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_5": "스패너를 들고 스크롤하면 팔을 설정할 수 있습니다", - "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.linear_chassis_attachment.header": "직선 섀시를 이용해 블록 붙이기", + "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.mechanical_arm_redstone.header": "레드스톤을 통한 기계식 팔의 제어", - "create.ponder.mechanical_arm_redstone.text_1": "레드스톤 신호를 받으면, 기계식 팔이 작동되지 않습니다", - "create.ponder.mechanical_arm_redstone.text_2": "작동이 정지되기 전에, 기계식 팔은 모든 작동을 완료하고 정지됩니다", - "create.ponder.mechanical_arm_redstone.text_3": "따라서, 아주 짧은 시간 동안 신호를 차단하면 1번만 작동하게 만들 수 있습니다", + "create.ponder.linear_chassis_group.header": "여러 직선 섀시 움직이기", + "create.ponder.linear_chassis_group.text_1": "직선 섀시는 다른 직선 섀시와 연결될 수 있습니다.", + "create.ponder.linear_chassis_group.text_2": "하나가 움직이면, 다른 섀시도 같이 움직입니다.", + "create.ponder.linear_chassis_group.text_3": "다른 종류의 섀시, 다른 면을 바라보는 섀시는 붙지 않습니다.", - "create.ponder.mechanical_bearing.header": "기계식 회전장치를 통한 구조물 회전", - "create.ponder.mechanical_bearing.text_1": "기계식 회전장치는 부착된 블록을 회전하게 만들 수 있습니다", - "create.ponder.mechanical_bearing.text_2": "회전력을 받으면, 장치가 회전합니다", + "create.ponder.mechanical_arm.header": "기계 팔 설치하기", + "create.ponder.mechanical_arm.text_1": "기계 팔은 설치되기 전, 입력부와 출력부를 지정해야 합니다.", + "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_8": "퍼널와 아이템 거치대가 이런 문제를 해결할 수 있습니다.", - "create.ponder.mechanical_crafter.header": "기계식 제작기의 설정", - "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_5": "기계식 제작기가 작동하려면 회전력이 필요합니다", - "create.ponder.mechanical_crafter.text_6": "오른쪽 버튼을 누르면 아이템을 수동으로 넣을 수 있습니다", - "create.ponder.mechanical_crafter.text_7": "경로의 모든 슬롯에 아이템이 들어가면 제작이 시작됩니다", - "create.ponder.mechanical_crafter.text_8": "모든 슬롯에 아이템이 들어가지 않는 제작법의 경우 레드스톤 신호를 사용하여 강제로 제작할 수 있습니다", + "create.ponder.mechanical_arm_filtering.header": "기계 팔 필터링", + "create.ponder.mechanical_arm_filtering.text_1": "입력부", + "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_6": "기계 팔은 필터에 맞게 적당한 양만 가져가는 똑똑한 친구입니다.", - "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_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_5": "렌치로 스크롤하여 어떻게 분배할지 설정하세요.", + "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_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_arm_redstone.header": "기계 팔과 레드스톤", + "create.ponder.mechanical_arm_redstone.text_1": "레드스톤 신호를 받으면, 기계 팔은 작동을 멈춥니다.", + "create.ponder.mechanical_arm_redstone.text_2": "작동을 멈추기 전에, 기계 팔은 입력된 행동을 마무리합니다.", + "create.ponder.mechanical_arm_redstone.text_3": "따라서 부정 펄스는 한 번만 작동하게 합니다.", - "create.ponder.mechanical_drill.header": "기계식 드릴을 통한 블록 파괴", - "create.ponder.mechanical_drill.text_1": "회전력을 받으면, 기계식 드릴은 앞에 있는 블록을 파괴합니다", - "create.ponder.mechanical_drill.text_2": "채굴 속도는 회전력에 따라 달라집니다", + "create.ponder.mechanical_bearing.header": "베어링으로 구조물 옮기기", + "create.ponder.mechanical_bearing.text_1": "베어링은 앞에 있는 블록을 부착시킵니다.", + "create.ponder.mechanical_bearing.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_crafter.header": "기계식 조합기 설치하기", + "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_5": "기계식 조합기는 동력이 요구됩니다.", + "create.ponder.mechanical_crafter.text_6": "앞면을 우클릭해서 직접 아이템을 넣을 수 있습니다.", + "create.ponder.mechanical_crafter.text_7": "모든 면이 아이템을 가지고 있다면, 조합이 시작됩니다.", + "create.ponder.mechanical_crafter.text_8": "모든 면이 아이템을 가지고 있지 않아도, 레드스톤 신호로 조합을 강제 시작할 수 있습니다.", - "create.ponder.mechanical_harvester.header": "장치에서의 기계식 수확기의 이용", - "create.ponder.mechanical_harvester.text_1": "움직이는 장치에서 기계식 수확기가 이동하면...", - "create.ponder.mechanical_harvester.text_2": "수확기가 다 자란 작물을 수확하고 다시 심습니다", + "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_mixer.header": "기계식 믹서기를 통한 아이템 처리", - "create.ponder.mechanical_mixer.text_1": "믹서기와 대야를 사용하면 일부 제작법과 맞는 아이템을 자동으로 제작할 수 있습니다", - "create.ponder.mechanical_mixer.text_2": "특정한 배치를 가지고 있지 않은 제작법과 몇 가지의 추가적인 제작법을 사용할 수 있습니다", - "create.ponder.mechanical_mixer.text_3": "그 제작법 중 일부는 블레이즈 가열기의 열기가 필요할 수 있습니다", - "create.ponder.mechanical_mixer.text_4": "두 가지의 제작법이 중복되는 경우 필터 슬롯을 사용하여 해결할 수 있습니다", + "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_piston.header": "기계식 피스톤을 통한 구조물 이동", - "create.ponder.mechanical_piston.text_1": "기계식 피스톤은 블록 앞으로 밀어낼 수 있습니다", - "create.ponder.mechanical_piston.text_2": "회전력에 따라 이동 속도와 방향이 달라집니다", - "create.ponder.mechanical_piston.text_3": "기계식 끈끈이 피스톤은 부착된 블록을 뒤로 당길 수 있습니다", + "create.ponder.mechanical_drill.header": "드릴을 이용해 블록 부수기", + "create.ponder.mechanical_drill.text_1": "동력을 받으면, 드릴은 앞에 있는 블록을 파괴합니다.", + "create.ponder.mechanical_drill.text_2": "채굴 속도는 동력 속도에 비례합니다.", - "create.ponder.mechanical_piston_modes.header": "기계식 피스톤의 이동 방식", - "create.ponder.mechanical_piston_modes.text_1": "피스톤이 동작을 멈출 때마다 이동된 구조물이 블록으로 되돌아갑니다", - "create.ponder.mechanical_piston_modes.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_plough.header": "장치에서의 기계식 경작기의 이용", - "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_harvester.header": "구조물에서의 수확기", + "create.ponder.mechanical_harvester.text_1": "수확기가 움직이는 구조물의 일부일 때,", + "create.ponder.mechanical_harvester.text_2": "지나가는 길에 있는 작물을 수확하고, 성장 수치를 초기화합니다.", - "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_4": "압착기가 자동으로 아이템을 처리합니다", + "create.ponder.mechanical_mixer.header": "믹서로 아이템 가공하기", + "create.ponder.mechanical_mixer.text_1": "믹서와 대야를 이용해 몇몇 조합을 자동화할 수 있습니다.", + "create.ponder.mechanical_mixer.text_2": "가능한 조합법은 어느 무형 조합법이나 가능하며, 모드에서 추가된 조합법도 있습니다.", + "create.ponder.mechanical_mixer.text_3": "몇몇 조합법은 블레이즈 버너의 열을 요구합니다.", + "create.ponder.mechanical_mixer.text_4": "필터 슬롯을 이용해 조합법이 겹치는 것을 방지할 수 있습니다.", - "create.ponder.mechanical_press_compacting.header": "기계식 압착기를 통한 아이템 압축", - "create.ponder.mechanical_press_compacting.text_1": "대야에 있는 아이템을 압착하면 아이템이 압축됩니다", - "create.ponder.mechanical_press_compacting.text_2": "같은 아이템을 2x2이나 3x3으로 사용하는 제작법과 몇 가지의 추가적인 제작법을 사용할 수 있습니다", - "create.ponder.mechanical_press_compacting.text_3": "그 제작법 중 일부는 블레이즈 가열기의 열기가 필요할 수 있습니다", - "create.ponder.mechanical_press_compacting.text_4": "두 가지의 제작법이 중복되는 경우 필터 슬롯을 사용하여 해결할 수 있습니다", + "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_saw_breaker.header": "기계식 톱을 통한 나무 절단", - "create.ponder.mechanical_saw_breaker.text_1": "회전력을 받으면, 기계식 톱은 앞에 있는 나무를 자릅니다", - "create.ponder.mechanical_saw_breaker.text_2": "나무를 완전히 자르려면, 나무와 땅을 연결하는 마지막 블록을 잘라야 합니다", + "create.ponder.mechanical_piston_modes.header": "기계식 피스톤의 이동 설정", + "create.ponder.mechanical_piston_modes.text_1": "피스톤이 움직임을 멈추면, 움직인 구조물은 블록으로 바뀝니다.", + "create.ponder.mechanical_piston_modes.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_plough.header": "구조물에서의 쟁기", + "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_saw_processing.header": "기계식 톱을 통한 아이템 처리", - "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.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_4": "압착기가 알아서 아이템 이동을 멈추고 가공합니다.", - "create.ponder.millstone.header": "맷돌을 통한 아이템 처리", - "create.ponder.millstone.text_1": "맷돌은 아이템을 갈아낼 수 있습니다", - "create.ponder.millstone.text_2": "톱니바퀴를 측면에 연결하여 회전력을 받을 수 있습니다", - "create.ponder.millstone.text_3": "아이템을 맷돌 위에 던지거나 입력하면 아이템이 처리됩니다", - "create.ponder.millstone.text_4": "시간이 지나고 맷돌에 오른쪽 버튼을 누르면 갈아낸 아이템을 얻을 수 있습니다", - "create.ponder.millstone.text_5": "이러한 장치로 아이템을 자동으로 처리할 수 있습니다", + "create.ponder.mechanical_press_compacting.header": "압착기로 아이템 압축하기", + "create.ponder.mechanical_press_compacting.text_1": "대야와 함께 사용해서 아이템을 압축할 수 있습니다.", + "create.ponder.mechanical_press_compacting.text_2": "가능한 조합법은 2x2 / 3x3 조합법을 포함하고, 모드에서 추가된 조합법도 있습니다.", + "create.ponder.mechanical_press_compacting.text_3": "몇몇 조합법은 블레이즈 버너의 열을 요구합니다.", + "create.ponder.mechanical_press_compacting.text_4": "필터 슬롯을 이용해 조합법이 겹치는 것을 방지할 수 있습니다.", - "create.ponder.nixie_tube.header": "표시등의 이용", - "create.ponder.nixie_tube.text_1": "레드스톤 신호를 받으면, 표시등은 레드스톤 신호의 전력을 표시합니다", - "create.ponder.nixie_tube.text_2": "모루로 이름을 바꾼 이름표를 사용하면 원하는 글씨를 표시할 수 있습니다", + "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_5": "동력 방향을 반전시키면 흐름의 방향도 반전됩니다.", + "create.ponder.mechanical_pump_flow.text_6": "렌치로 펌프 방향 자체를 돌릴 수도 있습니다.", - "create.ponder.piston_pole.header": "피스톤 연장대", - "create.ponder.piston_pole.text_1": "연결된 연장대가 없다면, 기계식 피스톤은 사용할 수 없습니다", - "create.ponder.piston_pole.text_2": "뒤에 추가된 연장대의 길이에 따라 피스톤의 거리가 바뀝니다", + "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_4": "펌프는 병렬로 설치할 수 있습니다.", + "create.ponder.mechanical_pump_speed.text_5": "펌프 방향을 바꾸어 흐름의 뱡향을 통일할 수 있습니다.", - "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_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_8": "아이템 교환이 끝났다면, 장치가 다시 움직입니다", + "create.ponder.mechanical_saw_breaker.header": "톱으로 나무 베기", + "create.ponder.mechanical_saw_breaker.text_1": "동력을 받으면 앞에 있는 나무를 벱니다.", + "create.ponder.mechanical_saw_breaker.text_2": "두꺼운 나무를 벨려면, 땅에 붙어있는 마지막 나무 블록을 파괴해야합니다.", - "create.ponder.portable_storage_interface_redstone.header": "레드스톤 제어", - "create.ponder.portable_storage_interface_redstone.text_1": "레드스톤 신호를 받으면, 전달기가 장치에 개입하지 않습니다", + "create.ponder.mechanical_saw_contraption.header": "구조물에서의 톱", + "create.ponder.mechanical_saw_contraption.text_1": "톱이 움직이는 구조물의 일부일 때,", + "create.ponder.mechanical_saw_contraption.text_2": "부딫히는 모든 나무를 벱니다.", - "create.ponder.powered_latch.header": "레드스톤 잠금기를 통한 신호 제어", - "create.ponder.powered_latch.text_1": "레드스톤 잠금기는 레드스톤 신호를 제어할 수 있는 레버입니다", - "create.ponder.powered_latch.text_2": "뒤쪽에서 신호를 주면, 잠금기가 켜집니다", - "create.ponder.powered_latch.text_3": "옆쪽에서 신호를 주면, 잠금기가 꺼집니다", - "create.ponder.powered_latch.text_4": "레드스톤 잠금기는 수동으로 전환할 수 있습니다", + "create.ponder.mechanical_saw_processing.header": "톱으로 아이템 가공하기", + "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.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_4": "레버식 레드스톤 잠금기는 수동으로 전환할 수 있습니다", + "create.ponder.millstone.header": "맷돌로 아이템 갈기", + "create.ponder.millstone.text_1": "맷돌은 아이템을 갈아버립니다!", + "create.ponder.millstone.text_2": "톱니바퀴를 옆에 설치하여 돌릴 수 있습니다.", + "create.ponder.millstone.text_3": "윗면으로 아이템을 투입하세요.", + "create.ponder.millstone.text_4": "시간이 지난 후, 우클릭으로 결과물을 얻을 수 있습니다.", + "create.ponder.millstone.text_5": "결과물은 자동으로 빼낼 수 있습니다.", - "create.ponder.pulse_repeater.header": "순간작동 중계기를 통한 신호 제어", - "create.ponder.pulse_repeater.text_1": "순간작동 중계기는 모든 레드스톤 신호를 잠깐의 신호로 단축합니다", + "create.ponder.nixie_tube.header": "닉시관 사용하기", + "create.ponder.nixie_tube.text_1": "레드스톤 신호를 받으면, 닉시관은 레드스톤 신호 세기를 나타냅니다.", + "create.ponder.nixie_tube.text_2": "이름표를 사용하여 원하는 글자를 나타낼 수도 있습니다.", + "create.ponder.nixie_tube.text_3": "염료를 들고 우클릭하여 색을 바꿀 수 있습니다.", - "create.ponder.radial_chassis.header": "반경 연결대를 통한 블록 부착", - "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.piston_pole.header": "피스톤 연장 축", + "create.ponder.piston_pole.text_1": "연장 축이 없으면, 기계식 피스톤은 움직일 수 없습니다.", + "create.ponder.piston_pole.text_2": "연장 축의 수가 곧 피스톤이 연장할 수 있는 거리입니다.", - "create.ponder.redstone_contact.header": "레드스톤 접촉기", - "create.ponder.redstone_contact.text_1": "레드스톤 접촉기끼리 서로 마주 보면 레드스톤 신호를 방출합니다", - "create.ponder.redstone_contact.text_2": "접촉기 중 하나가 이동하는 장치에 포함되어 있어도 적용됩니다", + "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_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_8": "일정 시간동안 아이템이 교환되지 않으면, 장치는 움직입니다.", - "create.ponder.redstone_link.header": "레드스톤 연동 장치의 이용", - "create.ponder.redstone_link.text_1": "레드스톤 연동 장치는 레드스톤 신호를 무선으로 전송할 수 있습니다", - "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.portable_fluid_interface.header": "구조물 장치의 액체 교환", + "create.ponder.portable_fluid_interface.text_1": "액체 인터페이스는 장치를 멈추지 않아도 탱크와 상호작용할 수 있습니다.", + "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_8": "일정 시간동안 액체가 교환되지 않으면, 장치는 움직입니다.", - "create.ponder.rope_pulley.header": "밧줄 도르래를 통한 구조물 이동", - "create.ponder.rope_pulley.text_1": "회전력을 받으면, 밧줄 도르래는 블록을 수직으로 움직이게 만듭니다", - "create.ponder.rope_pulley.text_2": "이동 방향과 속도는 회전력에 따라 달라집니다", + "create.ponder.portable_storage_interface_redstone.header": "레드스톤 설정", + "create.ponder.portable_storage_interface_redstone.text_1": "레드스톤 신호를 받으면 인터페이스가 작동하지 않습니다.", - "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_3": "도르래가 멈춘 상태에서만 이동할 수 있습니다", + "create.ponder.powered_latch.header": "레드스톤 걸쇠 사용하기", + "create.ponder.powered_latch.text_1": "레드스톤 걸쇠는 설정 가능한 레버입니다.", + "create.ponder.powered_latch.text_2": "뒤에서 오는 신호는 걸쇠 신호를 키고,", + "create.ponder.powered_latch.text_3": "옆에서 오는 신호는 걸쇠 신호를 끕니다.", + "create.ponder.powered_latch.text_4": "레드스톤 걸쇠는 직접 끄고 킬 수도 있습니다.", - "create.ponder.rope_pulley_modes.header": "밧줄 도르래의 이동 방식", - "create.ponder.rope_pulley_modes.text_1": "도르래가 동작을 멈출 때마다 이동된 구조물이 블록으로 되돌아갑니다", - "create.ponder.rope_pulley_modes.text_2": "초기 위치에 있는 경우에만 설치되어 있게 만들거나 절대 설치되어 있지 않게 만들도록 설정할 수 있습니다", + "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_4": "레드스톤 토글 걸쇠는 직접 끄고 킬 수도 있습니다.", - "create.ponder.rotation_speed_controller.header": "회전 속도 제어기의 이용", - "create.ponder.rotation_speed_controller.text_1": "회전 속도 제어기는 회전력을 축에서 위에 있는 큰 톱니바퀴로 전달합니다", - "create.ponder.rotation_speed_controller.text_2": "옆쪽을 스크롤하여 회전 속도를 설정할 수 있습니다", + "create.ponder.pulse_repeater.header": "펄스 리피터 사용하기", + "create.ponder.pulse_repeater.text_1": "펄스 리피터는 어느 레드스톤 신호라도 1틱 신호로 바꿉니다.", - "create.ponder.sail.header": "캔버스를 통한 풍차의 작동", - "create.ponder.sail.text_1": "캔버스는 풍차를 위한 블록입니다", - "create.ponder.sail.text_2": "강력 접착제나 연결대 블록 없이 연결될 수 있습니다", - "create.ponder.sail.text_3": "오른쪽 버튼을 누르면 염색할 수 있습니다", - "create.ponder.sail.text_4": "가위를 들고 오른쪽 버튼을 누르면 캔버스 틀로 만들 수 있습니다", + "create.ponder.radial_chassis.header": "원형 섀시를 이용해 블록 붙이기", + "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.sail_frame.header": "캔버스 틀을 통한 풍차의 작동", - "create.ponder.sail_frame.text_1": "캔버스 틀은 풍차를 위한 블록입니다", - "create.ponder.sail_frame.text_2": "강력 접착제나 연결대 블록 없이 연결될 수 있습니다", + "create.ponder.redstone_contact.header": "동형 감지기", + "create.ponder.redstone_contact.text_1": "서로 마주보는 동형 감지기는 레드스톤 신호를 발생시킵니다.", + "create.ponder.redstone_contact.text_2": "어느 한쪽이 움직이는 장치의 일부라도 동일하게 작동합니다.", + + "create.ponder.redstone_link.header": "레드스톤 링크 사용하기", + "create.ponder.redstone_link.text_1": "레드스톤 링크는 레드스톤 신호를 무선으로 전달합니다.", + "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.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_3": "다만 도르래는 멈춰있을 떄만 작동할 수 있습니다.", + + "create.ponder.rope_pulley_modes.header": "밧줄 도르래의 이동 설정", + "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": "회전 속도 컨트롤러는 회전을 위 톱니바퀴로 회전을 전달합니다.", + "create.ponder.rotation_speed_controller.text_2": "스크롤하여 톱니바퀴에 전달되는 RPM을 조절합니다.", + + "create.ponder.sail.header": "날개를 이용해 풍차 조립하기", + "create.ponder.sail.text_1": "날개는 풍차를 만들기에 좋은 블록입니다.", + "create.ponder.sail.text_2": "강력 접착제나 섀시 없이 연결할 수 있습니다", + "create.ponder.sail.text_3": "염료로 우클릭하여 염색합니다.", + "create.ponder.sail.text_4": "가위로 우클릭하여 틀만 남길 수 있습니다.", + + "create.ponder.sail_frame.header": "날개 틀을 이용해 풍차 조립하기", + "create.ponder.sail_frame.text_1": "날개 틀은 풍차를 만들기에 좋은 블록입니다.", + "create.ponder.sail_frame.text_2": "강력 접착제나 섀시 없이 연결할 수 있습니다", "create.ponder.sequenced_gearshift.header": "순서화 전환기를 통한 회전 속도 제어", - "create.ponder.sequenced_gearshift.text_1": "순서화 전환기는 설정한 지시에 따라 회전됩니다", - "create.ponder.sequenced_gearshift.text_2": "오른쪽 버튼을 누르면 설정 창이 열립니다", - "create.ponder.sequenced_gearshift.text_3": "레드스톤 신호를 받으면 설정된 지시에 따라 회전하기 시작합니다", - "create.ponder.sequenced_gearshift.text_4": "완료되면, 다음 레드스톤 신호를 기다립니다", - "create.ponder.sequenced_gearshift.text_5": "레드스톤 비교기를 사용하면 현재 진행 상황을 알 수 있습니다", + "create.ponder.sequenced_gearshift.text_1": "순서화 전환기는 설정한 지시에 따라 회전됩니다.", + "create.ponder.sequenced_gearshift.text_2": "오른쪽 버튼을 누르면 설정 창이 열립니다.", + "create.ponder.sequenced_gearshift.text_3": "레드스톤 신호를 받으면 설정된 지시에 따라 회전하기 시작합니다.", + "create.ponder.sequenced_gearshift.text_4": "완료되면, 다음 레드스톤 신호를 기다립니다.", + "create.ponder.sequenced_gearshift.text_5": "레드스톤 비교기를 사용하면 현재 진행 상황을 알 수 있습니다.", - "create.ponder.shaft.header": "축을 통한 회전력 전달", - "create.ponder.shaft.text_1": "축은 일직선으로 회전합니다", + "create.ponder.shaft.header": "축을 통한 동력 전달", + "create.ponder.shaft.text_1": "축은 일직선으로 회전을 전달합니다.", - "create.ponder.shaft_casing.header": "틀을 씌운 축", - "create.ponder.shaft_casing.text_1": "황동 틀이나 안산암 틀로 축을 장식할 수 있습니다", + "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.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.speedometer.header": "속도계를 통한 동적 정보 확인", - "create.ponder.speedometer.text_1": "속도계는 연결된 장치의 현재 속도를 표시합니다", - "create.ponder.speedometer.text_2": "공학자의 안경을 장착하면, 세부 정보를 확인할 수 있습니다", - "create.ponder.speedometer.text_3": "속도계의 측정값에 따라 비교기가 레드스톤 신호를 방출합니다", + "create.ponder.smart_pipe.header": "스마트 파이프를 통한 액체 필터", + "create.ponder.smart_pipe.text_1": "스마트 파이프는 필터 기능이 있는 파이프입니다.", + "create.ponder.smart_pipe.text_2": "비울 곳에다 설치하면, 어떤 액체를 뽑아낼지 설정할 수 있습니다.", + "create.ponder.smart_pipe.text_3": "필터 슬롯에 원하는 액체가 담긴 용기를 우클릭하면 됩니다.", + "create.ponder.smart_pipe.text_4": "다른 곳에 설치하면, 스마트 파이프는 맞는 액체만 통과시킵니다.", - "create.ponder.stabilized_bearings.header": "안정적인 장치", - "create.ponder.stabilized_bearings.text_1": "기계식 회전장치는 움직이는 구조물에서 이동해도...", - "create.ponder.stabilized_bearings.text_2": "...방향이 유지됩니다", - "create.ponder.stabilized_bearings.text_3": "회전장치의 앞에 블록이 부착되어도...", - "create.ponder.stabilized_bearings.text_4": "부착된 구조물의 방향이 유지됩니다", + "create.ponder.speedometer.header": "속도 계측기를 통한 정보 확인", + "create.ponder.speedometer.text_1": "속도 계측기는 연결된 장치의 속도를 표시합니다.", + "create.ponder.speedometer.text_2": "고글을 장착하면, 세부 정보를 확인할 수 있습니다.", + "create.ponder.speedometer.text_3": "속도 계측기의 측정값에 따라 비교기가 레드스톤 신호를 내보냅니다.", + + "create.ponder.spout_filling.header": "주입기로 아이템에 액체 채우기", + "create.ponder.spout_filling.text_1": "주입기는 아래있는 아이템을 액체를 채울 수 있습니다.", + "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_6": "주입기가 알아서 아이템 이동을 멈추고 가공합니다.", + + "create.ponder.stabilized_bearings.header": "베어링 안정화", + "create.ponder.stabilized_bearings.text_1": "베어링이 움직이는 구조물의 일부분이어도,", + "create.ponder.stabilized_bearings.text_2": "방향이 유지됩니다.", + "create.ponder.stabilized_bearings.text_3": "베어링에 블록이 부착되어도,", + "create.ponder.stabilized_bearings.text_4": "부착된 구조물의 방향이 유지됩니다.", "create.ponder.sticker.header": "부착기를 통한 블록 부착", - "create.ponder.sticker.text_1": "부착기는 레드스톤으로 제어할 수 있습니다", - "create.ponder.sticker.text_2": "신호를 받으면, 부착기가 블록을 부착합니다", - "create.ponder.sticker.text_3": "장치가 이동하면 부착된 블록도 같이 이동합니다", - "create.ponder.sticker.text_4": "다시 한번 신호를 받으면, 블록이 부착되지 않게 됩니다", + "create.ponder.sticker.text_1": "부착기는 레드스톤으로 제어할 수 있습니다.", + "create.ponder.sticker.text_2": "신호를 받으면, 부착기가 블록을 부착합니다.", + "create.ponder.sticker.text_3": "장치가 이동하면 부착된 블록도 같이 이동합니다.", + "create.ponder.sticker.text_4": "다시 한번 신호를 받으면, 블록이 부착되지 않습니다.", - "create.ponder.stressometer.header": "부하계를 통한 동적 정보 확인", - "create.ponder.stressometer.text_1": "부하계는 연결된 장치의 현재 부하를 표시합니다", - "create.ponder.stressometer.text_2": "공학자의 안경을 장착하면, 세부 정보를 확인할 수 있습니다", - "create.ponder.stressometer.text_3": "부하계의 측정값에 따라 비교기가 레드스톤 신호를 방출합니다", + "create.ponder.stressometer.header": "피로도 계측기를 통한 동적 정보 확인", + "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_5": "왼쪽 버튼을 누르면 강력 접착제를 제거할 수 있습니다", + "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_5": "왼쪽 버튼을 누르면 강력 접착제를 제거할 수 있습니다.", - "create.ponder.valve_handle.header": "밸브 손잡이를 통한 회전력 생성", - "create.ponder.valve_handle.text_1": "밸브 손잡이를 사용하면 수동으로 회전력을 생성할 수 있습니다", - "create.ponder.valve_handle.text_2": "오른쪽 버튼을 누르면 반시계 방향으로 회전합니다", - "create.ponder.valve_handle.text_3": "전달되는 속도는 상대적으로 낮습니다", - "create.ponder.valve_handle.text_4": "웅크리고 오른쪽 버튼을 누르면 시계 방향으로 회전합니다", - "create.ponder.valve_handle.text_5": "밸브 손잡이는 염료로 염색할 수 있습니다", + "create.ponder.valve_handle.header": "밸브 손잡이로 동력 생산하기", + "create.ponder.valve_handle.text_1": "밸브 손잡이를 사용하면 수동으로 동력을 생성할 수 있습니다.", + "create.ponder.valve_handle.text_2": "오클릭하면 반시계 방향으로 회전합니다.", + "create.ponder.valve_handle.text_3": "전달되는 속도는 상대적으로 낮습니다.", + "create.ponder.valve_handle.text_4": "웅크리고 우클릭하면 시계 방향으로 회전합니다.", + "create.ponder.valve_handle.text_5": "염료로 염색할 수 있습니다.", - "create.ponder.water_wheel.header": "물레바퀴를 통한 회전력 생성", - "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.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.weighted_ejector.header": "발사대의 이용", - "create.ponder.weighted_ejector.text_1": "발사대를 들고 웅크리고 오른쪽 버튼을 누르면 발사 지점을 지정할 수 있습니다", - "create.ponder.weighted_ejector.text_10": "이제, 발사대에 놓인 아이템의 양이 설정한 양에 도달한 경우에만 발사대가 작동됩니다", - "create.ponder.weighted_ejector.text_11": "다른 엔티티가 발사대를 밟으면, 항상 발사대가 작동합니다", - "create.ponder.weighted_ejector.text_2": "설치된 발사대는 지정한 위치에다 물체를 발사합니다", - "create.ponder.weighted_ejector.text_3": "이 범위 내에 아무 장소에 있는 지점에만 발사할 수 있습니다", - "create.ponder.weighted_ejector.text_4": "옆으로 발사할 수는 없습니다", - "create.ponder.weighted_ejector.text_5": "발사 지점이 선택되지 않거나 올바르지 않은 경우, 바로 앞에 물체를 발사합니다", - "create.ponder.weighted_ejector.text_6": "발사하려면 회전력이 필요합니다", - "create.ponder.weighted_ejector.text_7": "발사대에 아이템을 놓으면 발사대가 작동됩니다", - "create.ponder.weighted_ejector.text_8": "저장소가 발사 지점인 경우에는 발사대가 저장소에 공간이 생길 때까지 기다립니다", - "create.ponder.weighted_ejector.text_9": "스패너를 사용하여, 발사에 필요한 아이템의 양을 설정할 수 있습니다", + "create.ponder.water_wheel.header": "물레바퀴로 동력 생산하기", + "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_redstone.header": "레드스톤을 통한 발사대의 제어", - "create.ponder.weighted_ejector_redstone.text_1": "레드스톤 신호를 받으면, 발사대가 작동되지 않습니다", - "create.ponder.weighted_ejector_redstone.text_2": "또한, 관측기는 발사대가 작동하는 것 탐지할 수 있습니다", + "create.ponder.weighted_ejector.header": "투척기 사용하기", + "create.ponder.weighted_ejector.text_1": "투척기를 들고 웅크리고 우클릭하면, 발사 지점을 정할 수 있습니다.", + "create.ponder.weighted_ejector.text_10": "투척기에 놓인 아이템의 양이 설정량에 도달한 경우에만 투척기가 작동합니다.", + "create.ponder.weighted_ejector.text_11": "다른 엔티티가 발사대를 밟으면, 항상 발사대가 작동합니다.", + "create.ponder.weighted_ejector.text_2": "투척기는 지정한 위치에다 물체를 투척합니다.", + "create.ponder.weighted_ejector.text_3": "이 범위의 아무 장소에 투척할 수 있습니다.", + "create.ponder.weighted_ejector.text_4": "옆으로 투척할 수는 없습니다.", + "create.ponder.weighted_ejector.text_5": "투척 지점이 선택되지 않거나 올바르지 않은 경우, 바로 앞에 물체를 투척합니다.", + "create.ponder.weighted_ejector.text_6": "투척하려면 회전력이 필요합니다.", + "create.ponder.weighted_ejector.text_7": "투척기에 아이템을 놓으면 투척기가 작동합니다.", + "create.ponder.weighted_ejector.text_8": "보관함이 투척 지점인 경우에는 보관함에 공간이 생길 때까지 기다립니다.", + "create.ponder.weighted_ejector.text_9": "렌치를 사용하여, 투척에 필요한 아이템의 양을 설정할 수 있습니다.", - "create.ponder.weighted_ejector_tunnel.header": "발사대를 통한 아이템의 분할", - "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_redstone.header": "투척기와 레드스톤", + "create.ponder.weighted_ejector_redstone.text_1": "레드스톤 신호를 받으면, 투척기가 작동하지 않습니다.", + "create.ponder.weighted_ejector_redstone.text_2": "관측기는 투척기가 작동하는 것을 탐지할 수 있습니다.", - "create.ponder.windmill_source.header": "풍차 회전장치를 통한 회전력 생성", - "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_5": "스패너를 들고 스크롤하면 회전 방향을 설정할 수 있습니다", - "create.ponder.windmill_source.text_6": "회전장치에 오른쪽 버튼을 누르면 회전장치가 멈추고, 구조물을 편집할 수 있게 됩니다", + "create.ponder.weighted_ejector_tunnel.header": "투척기로 아이템 분할하기", + "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.windmill_structure.header": "풍차 장치", - "create.ponder.windmill_structure.text_1": "최소 8개 이상의 날개 블록이 있는 구조물만 풍차로 사용할 수 있습니다", + "create.ponder.windmill_source.header": "풍차 베어링으로 동력 생산하기", + "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_5": "렌치를 들고 스크롤하면 회전 방향을 바꿀 수 있습니다.", + "create.ponder.windmill_source.text_6": "베어링에 우클릭하면 멈추고, 구조물을 수정할 수 있게 됩니다", - "_": "크리에이트를 번역해 주셔서 고맙습니다!" + "create.ponder.windmill_structure.header": "풍차 구조물", + "create.ponder.windmill_structure.text_1": "최소 8개 이상의 날개 블록이 있는 구조물만 풍차로 사용할 수 있습니다.", -} \ No newline at end of file + + "_": "Thank you for translating Create!" +} From 091a70b42065c8d4afad8c62bb8790b5220592ab Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Mon, 12 Jul 2021 11:35:43 +0200 Subject: [PATCH 076/118] Post-PR datagen --- src/generated/resources/.cache/cache | 4 +- .../assets/create/lang/unfinished/ko_kr.json | 3282 ++++++++--------- .../data/create/advancements/aesthetics.json | 4 +- 3 files changed, 1645 insertions(+), 1645 deletions(-) diff --git a/src/generated/resources/.cache/cache b/src/generated/resources/.cache/cache index 6abf55f73..8cef15816 100644 --- a/src/generated/resources/.cache/cache +++ b/src/generated/resources/.cache/cache @@ -433,7 +433,7 @@ a01222895bd7e3d06d7ae3d34fa4caecbd86448d assets/create/lang/unfinished/es_mx.jso b05d56b0e9d724490ea143a3685b0bc9ebe6268a assets/create/lang/unfinished/fr_fr.json 1633b5a42865fba17572980560ad07a3015c1743 assets/create/lang/unfinished/it_it.json 5422e990c8075d4132d58287fa9ca858f9a0bc1f assets/create/lang/unfinished/ja_jp.json -05eac4946a1172cf32d171d23f4049a58654b43b assets/create/lang/unfinished/ko_kr.json +a1cfa4e628a915c25dc406918028ef6aa99c5c3d assets/create/lang/unfinished/ko_kr.json 95828eb4fa2e1353f737dc909407af21d50be149 assets/create/lang/unfinished/nl_nl.json d8ed3929f5d8f0e58f4bd4de34ab20395f8d2c55 assets/create/lang/unfinished/pl_pl.json ae37d77d132f6fac4bc718273637a367959533a1 assets/create/lang/unfinished/pt_br.json @@ -1699,7 +1699,7 @@ d080b1b25e5bc8baf5aee68691b08c7f12ece3b0 assets/create/models/item/windmill_bear a80fb25a0b655e76be986b5b49fcb0f03461a1ab assets/create/models/item/zinc_nugget.json b1689617190c05ef34bd18456b0c7ae09bb3210f assets/create/models/item/zinc_ore.json 58880e397902f8ca5b3b59ed4423e626109ddc4c assets/create/sounds.json -0f1b4b980afba9bf2caf583b88e261bba8b10313 data/create/advancements/aesthetics.json +5d0cc4c0255dc241e61c173b31ddca70c88d08e4 data/create/advancements/aesthetics.json 187921fa131b06721bfaf63f2623a28c141aae9a data/create/advancements/andesite_alloy.json 0ea2db7173b5be28b289ea7c9a6a0cf5805c60c7 data/create/advancements/andesite_casing.json 83c046bd200623933545c9e4326f782fb02c87fa data/create/advancements/arm_blaze_burner.json diff --git a/src/generated/resources/assets/create/lang/unfinished/ko_kr.json b/src/generated/resources/assets/create/lang/unfinished/ko_kr.json index 02e420bed..accb593d5 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ko_kr.json +++ b/src/generated/resources/assets/create/lang/unfinished/ko_kr.json @@ -1,53 +1,53 @@ { - "_": "Missing Localizations: 287", + "_": "Missing Localizations: 19", "_": "->------------------------] Game Elements [------------------------<-", - "block.create.acacia_window": "아카시아나무 판자 창문", - "block.create.acacia_window_pane": "아카시아나무 판자 창문판", - "block.create.adjustable_chain_gearshift": "연쇄 변속기", - "block.create.adjustable_crate": "조절식 상자", - "block.create.adjustable_pulse_repeater": "조절식 순간작동 중계기", - "block.create.adjustable_repeater": "조절식 중계기", - "block.create.analog_lever": "조절식 레버", - "block.create.andesite_belt_funnel": "안산암 벨트 퍼널", + "block.create.acacia_window": "아카시아 유리창", + "block.create.acacia_window_pane": "아카시아나무 유리판 ", + "block.create.adjustable_chain_gearshift": "벨트 변속기", + "block.create.adjustable_crate": "가변 창고", + "block.create.adjustable_pulse_repeater": "가변 펄스 리피터", + "block.create.adjustable_repeater": "가변 리피터", + "block.create.analog_lever": "아날로그 레버", + "block.create.andesite_belt_funnel": "안산암 퍼널", "block.create.andesite_bricks": "안산암 벽돌", "block.create.andesite_bricks_slab": "안산암 벽돌 반 블록", "block.create.andesite_bricks_stairs": "안산암 벽돌 계단", "block.create.andesite_bricks_wall": "안산암 벽돌 담장", - "block.create.andesite_casing": "안산암 틀", + "block.create.andesite_casing": "안산암 케이스", "block.create.andesite_cobblestone": "안산암 조약돌", "block.create.andesite_cobblestone_slab": "안산암 조약돌 반 블록", "block.create.andesite_cobblestone_stairs": "안산암 조약돌 계단", "block.create.andesite_cobblestone_wall": "안산암 조약돌 담장", - "block.create.andesite_encased_shaft": "안산암 틀을 씌운 축", + "block.create.andesite_encased_shaft": "안산암 케이스를 씌운 축", "block.create.andesite_funnel": "안산암 퍼널", "block.create.andesite_pillar": "안산암 기둥", "block.create.andesite_tunnel": "안산암 터널", "block.create.basin": "대야", "block.create.belt": "벨트", - "block.create.birch_window": "자작나무 판자 창문", - "block.create.birch_window_pane": "자작나무 판자 창문판", - "block.create.black_nixie_tube": "UNLOCALIZED: Black Nixie Tube", - "block.create.black_sail": "검은색 캔버스", + "block.create.birch_window": "자작나무 유리창", + "block.create.birch_window_pane": "자작나무 유리판", + "block.create.black_nixie_tube": "검은색 닉시관", + "block.create.black_sail": "검은색 날개", "block.create.black_seat": "검은색 좌석", "block.create.black_valve_handle": "검은색 밸브 손잡이", - "block.create.blaze_burner": "블레이즈 가열기", - "block.create.blue_nixie_tube": "UNLOCALIZED: Blue Nixie Tube", - "block.create.blue_sail": "파란색 캔버스", + "block.create.blaze_burner": "블레이즈 버너", + "block.create.blue_nixie_tube": "파란색 닉시관", + "block.create.blue_sail": "파란색 날개", "block.create.blue_seat": "파란색 좌석", "block.create.blue_valve_handle": "파란색 밸브 손잡이", - "block.create.brass_belt_funnel": "황동 벨트 퍼널", + "block.create.brass_belt_funnel": "황동 퍼널", "block.create.brass_block": "황동 블록", - "block.create.brass_casing": "황동 틀", - "block.create.brass_encased_shaft": "황동 틀을 씌운 축", + "block.create.brass_casing": "황동 케이스", + "block.create.brass_encased_shaft": "황동 케이스를 씌운 축", "block.create.brass_funnel": "황동 퍼널", "block.create.brass_tunnel": "황동 터널", - "block.create.brown_nixie_tube": "UNLOCALIZED: Brown Nixie Tube", - "block.create.brown_sail": "갈색 캔버스", + "block.create.brown_nixie_tube": "갈색 닉시관", + "block.create.brown_sail": "갈색 날개", "block.create.brown_seat": "갈색 좌석", "block.create.brown_valve_handle": "갈색 밸브 손잡이", - "block.create.cart_assembler": "수레 부착기", + "block.create.cart_assembler": "카트 조립기", "block.create.chiseled_dark_scoria": "조각된 짙은 스코리아", "block.create.chiseled_dolomite": "조각된 백운암", "block.create.chiseled_gabbro": "조각된 반려암", @@ -55,33 +55,33 @@ "block.create.chiseled_scoria": "조각된 스코리아", "block.create.chiseled_weathered_limestone": "조각된 풍화된 석회암", "block.create.chocolate": "초콜릿", - "block.create.chute": "도관", - "block.create.clockwork_bearing": "시계 회전장치", - "block.create.clutch": "단절기", + "block.create.chute": "슈트", + "block.create.clockwork_bearing": "시계 베어링", + "block.create.clutch": "클러치", "block.create.cogwheel": "톱니바퀴", - "block.create.content_observer": "아이템 감지기", - "block.create.controller_rail": "제어 레일", - "block.create.copper_backtank": "UNLOCALIZED: Copper Backtank", + "block.create.content_observer": "정보 감지기", + "block.create.controller_rail": "방향 레일", + "block.create.copper_backtank": "구리 산소통", "block.create.copper_block": "구리 블록", - "block.create.copper_casing": "구리 틀", + "block.create.copper_casing": "구리 케이스", "block.create.copper_ore": "구리 광석", - "block.create.copper_shingles": "구리 널판", + "block.create.copper_shingles": "구리 판자", "block.create.copper_tiles": "구리 타일", "block.create.copper_valve_handle": "구리 밸브 손잡이", - "block.create.creative_crate": "크리에이티브 상자", - "block.create.creative_fluid_tank": "크리에이티브 액체 탱크", + "block.create.creative_crate": "크리에이티브 창고", + "block.create.creative_fluid_tank": "크리에이티브 탱크", "block.create.creative_motor": "크리에이티브 모터", - "block.create.crimson_window": "진홍빛 판자 창문", - "block.create.crimson_window_pane": "진홍빛 판자 창문판", - "block.create.crushing_wheel": "분쇄용 바퀴", - "block.create.crushing_wheel_controller": "분쇄용 바퀴 제어기", - "block.create.cuckoo_clock": "뻐꾸기시계", - "block.create.cyan_nixie_tube": "UNLOCALIZED: Cyan Nixie Tube", - "block.create.cyan_sail": "청록색 캔버스", + "block.create.crimson_window": "진홍빛 유리창", + "block.create.crimson_window_pane": "진홍빛 유리판", + "block.create.crushing_wheel": "분쇄 휠", + "block.create.crushing_wheel_controller": "분쇄 휠 컨트롤러", + "block.create.cuckoo_clock": "뻐꾸기 시계", + "block.create.cyan_nixie_tube": "청록색 닉시관", + "block.create.cyan_sail": "청록색 날개", "block.create.cyan_seat": "청록색 좌석", "block.create.cyan_valve_handle": "청록색 밸브 손잡이", - "block.create.dark_oak_window": "짙은 참나무 판자 창문", - "block.create.dark_oak_window_pane": "짙은 참나무 판자 창문판", + "block.create.dark_oak_window": "짙은 참나무 유리창", + "block.create.dark_oak_window_pane": "짙은 참나무 유리판", "block.create.dark_scoria": "짙은 스코리아", "block.create.dark_scoria_bricks": "짙은 스코리아 벽돌", "block.create.dark_scoria_bricks_slab": "짙은 스코리아 벽돌 반 블록", @@ -92,7 +92,7 @@ "block.create.dark_scoria_cobblestone_stairs": "짙은 스코리아 조약돌 계단", "block.create.dark_scoria_cobblestone_wall": "짙은 스코리아 조약돌 담장", "block.create.dark_scoria_pillar": "짙은 스코리아 기둥", - "block.create.deployer": "전개장치", + "block.create.deployer": "배포기", "block.create.depot": "아이템 거치대", "block.create.diorite_bricks": "섬록암 벽돌", "block.create.diorite_bricks_slab": "섬록암 벽돌 반 블록", @@ -113,52 +113,52 @@ "block.create.dolomite_cobblestone_stairs": "백운암 조약돌 계단", "block.create.dolomite_cobblestone_wall": "백운암 조약돌 담장", "block.create.dolomite_pillar": "백운암 기둥", - "block.create.encased_chain_drive": "연쇄 전달기", - "block.create.encased_fan": "공업용 선풍기", - "block.create.encased_fluid_pipe": "틀을 씌운 액체관", - "block.create.fancy_andesite_bricks": "복잡한 안산암 벽돌", - "block.create.fancy_andesite_bricks_slab": "복잡한 안산암 벽돌 반 블록", - "block.create.fancy_andesite_bricks_stairs": "복잡한 안산암 벽돌 계단", - "block.create.fancy_andesite_bricks_wall": "복잡한 안산암 벽돌 담장", - "block.create.fancy_dark_scoria_bricks": "복잡한 짙은 스코리아 벽돌", - "block.create.fancy_dark_scoria_bricks_slab": "복잡한 짙은 스코리아 벽돌 반 블록", - "block.create.fancy_dark_scoria_bricks_stairs": "복잡한 짙은 스코리아 벽돌 계단", - "block.create.fancy_dark_scoria_bricks_wall": "복잡한 짙은 스코리아 벽돌 담장", - "block.create.fancy_diorite_bricks": "복잡한 섬록암 벽돌", - "block.create.fancy_diorite_bricks_slab": "복잡한 섬록암 벽돌 반 블록", - "block.create.fancy_diorite_bricks_stairs": "복잡한 섬록암 벽돌 계단", - "block.create.fancy_diorite_bricks_wall": "복잡한 섬록암 벽돌 담장", - "block.create.fancy_dolomite_bricks": "복잡한 백운암 벽돌", - "block.create.fancy_dolomite_bricks_slab": "복잡한 백운암 벽돌 반 블록", - "block.create.fancy_dolomite_bricks_stairs": "복잡한 백운암 벽돌 계단", - "block.create.fancy_dolomite_bricks_wall": "복잡한 백운암 벽돌 담장", - "block.create.fancy_gabbro_bricks": "복잡한 반려암 벽돌", - "block.create.fancy_gabbro_bricks_slab": "복잡한 반려암 벽돌 반 블록", - "block.create.fancy_gabbro_bricks_stairs": "복잡한 반려암 벽돌 계단", - "block.create.fancy_gabbro_bricks_wall": "복잡한 반려암 벽돌 담장", - "block.create.fancy_granite_bricks": "복잡한 화강암 벽돌", - "block.create.fancy_granite_bricks_slab": "복잡한 화강암 벽돌 반 블록", - "block.create.fancy_granite_bricks_stairs": "복잡한 화강암 벽돌 계단", - "block.create.fancy_granite_bricks_wall": "복잡한 화강암 벽돌 담장", - "block.create.fancy_limestone_bricks": "복잡한 석회암 벽돌", - "block.create.fancy_limestone_bricks_slab": "복잡한 석회암 벽돌 반 블록", - "block.create.fancy_limestone_bricks_stairs": "복잡한 석회암 벽돌 계단", - "block.create.fancy_limestone_bricks_wall": "복잡한 석회암 벽돌 담장", - "block.create.fancy_scoria_bricks": "복잡한 스코리아 벽돌", - "block.create.fancy_scoria_bricks_slab": "복잡한 스코리아 벽돌 반 블록", - "block.create.fancy_scoria_bricks_stairs": "복잡한 스코리아 벽돌 계단", - "block.create.fancy_scoria_bricks_wall": "복잡한 스코리아 벽돌 담장", - "block.create.fancy_weathered_limestone_bricks": "복잡한 풍화된 석회암 벽돌", - "block.create.fancy_weathered_limestone_bricks_slab": "복잡한 풍화된 석회암 벽돌 반 블록", - "block.create.fancy_weathered_limestone_bricks_stairs": "복잡한 풍화된 석회암 벽돌 계단", - "block.create.fancy_weathered_limestone_bricks_wall": "복잡한 풍화된 석회암 벽돌 담장", - "block.create.fluid_pipe": "액체관", + "block.create.encased_chain_drive": "체인 드라이브", + "block.create.encased_fan": "선풍기", + "block.create.encased_fluid_pipe": "구리 케이스를 씌운 파이프", + "block.create.fancy_andesite_bricks": "장식된 안산암 벽돌", + "block.create.fancy_andesite_bricks_slab": "장식된 안산암 벽돌 반 블록", + "block.create.fancy_andesite_bricks_stairs": "장식된 안산암 벽돌 계단", + "block.create.fancy_andesite_bricks_wall": "장식된 안산암 벽돌 담장", + "block.create.fancy_dark_scoria_bricks": "장식된 짙은 스코리아 벽돌", + "block.create.fancy_dark_scoria_bricks_slab": "장식된 짙은 스코리아 벽돌 반 블록", + "block.create.fancy_dark_scoria_bricks_stairs": "장식된 짙은 스코리아 벽돌 계단", + "block.create.fancy_dark_scoria_bricks_wall": "장식된 짙은 스코리아 벽돌 담장", + "block.create.fancy_diorite_bricks": "장식된 섬록암 벽돌", + "block.create.fancy_diorite_bricks_slab": "장식된 섬록암 벽돌 반 블록", + "block.create.fancy_diorite_bricks_stairs": "장식된 섬록암 벽돌 계단", + "block.create.fancy_diorite_bricks_wall": "장식된 섬록암 벽돌 담장", + "block.create.fancy_dolomite_bricks": "장식된 백운암 벽돌", + "block.create.fancy_dolomite_bricks_slab": "장식된 백운암 벽돌 반 블록", + "block.create.fancy_dolomite_bricks_stairs": "장식된 백운암 벽돌 계단", + "block.create.fancy_dolomite_bricks_wall": "장식된 백운암 벽돌 담장", + "block.create.fancy_gabbro_bricks": "장식된 반려암 벽돌", + "block.create.fancy_gabbro_bricks_slab": "장식된 반려암 벽돌 반 블록", + "block.create.fancy_gabbro_bricks_stairs": "장식된 반려암 벽돌 계단", + "block.create.fancy_gabbro_bricks_wall": "장식된 반려암 벽돌 담장", + "block.create.fancy_granite_bricks": "장식된 화강암 벽돌", + "block.create.fancy_granite_bricks_slab": "장식된 화강암 벽돌 반 블록", + "block.create.fancy_granite_bricks_stairs": "장식된 화강암 벽돌 계단", + "block.create.fancy_granite_bricks_wall": "장식된 화강암 벽돌 담장", + "block.create.fancy_limestone_bricks": "장식된 석회암 벽돌", + "block.create.fancy_limestone_bricks_slab": "장식된 석회암 벽돌 반 블록", + "block.create.fancy_limestone_bricks_stairs": "장식된 석회암 벽돌 계단", + "block.create.fancy_limestone_bricks_wall": "장식된 석회암 벽돌 담장", + "block.create.fancy_scoria_bricks": "장식된 스코리아 벽돌", + "block.create.fancy_scoria_bricks_slab": "장식된 스코리아 벽돌 반 블록", + "block.create.fancy_scoria_bricks_stairs": "장식된 스코리아 벽돌 계단", + "block.create.fancy_scoria_bricks_wall": "장식된 스코리아 벽돌 담장", + "block.create.fancy_weathered_limestone_bricks": "장식된 풍화된 석회암 벽돌", + "block.create.fancy_weathered_limestone_bricks_slab": "장식된 풍화된 석회암 벽돌 반 블록", + "block.create.fancy_weathered_limestone_bricks_stairs": "장식된 풍화된 석회암 벽돌 계단", + "block.create.fancy_weathered_limestone_bricks_wall": "장식된 풍화된 석회암 벽돌 담장", + "block.create.fluid_pipe": "액체 파이프", "block.create.fluid_tank": "액체 탱크", "block.create.fluid_valve": "액체 밸브", - "block.create.flywheel": "축 회전바퀴", - "block.create.framed_glass": "틀 유리", - "block.create.framed_glass_pane": "틀 유리판", - "block.create.furnace_engine": "화로 원동기", + "block.create.flywheel": "플라이휠", + "block.create.framed_glass": "큰 유리", + "block.create.framed_glass_pane": "큰 유리판", + "block.create.furnace_engine": "화로 엔진", "block.create.gabbro": "반려암", "block.create.gabbro_bricks": "반려암 벽돌", "block.create.gabbro_bricks_slab": "반려암 벽돌 반 블록", @@ -169,61 +169,61 @@ "block.create.gabbro_cobblestone_stairs": "반려암 조약돌 계단", "block.create.gabbro_cobblestone_wall": "반려암 조약돌 담장", "block.create.gabbro_pillar": "반려암 기둥", - "block.create.gantry_carriage": "다리 운반대", - "block.create.gantry_shaft": "다리 축", - "block.create.gearbox": "전환장치", - "block.create.gearshift": "전환기", - "block.create.glass_fluid_pipe": "유리 액체관", + "block.create.gantry_carriage": "갠트리 운반대", + "block.create.gantry_shaft": "갠트리 축", + "block.create.gearbox": "기어박스", + "block.create.gearshift": "기어쉬프트", + "block.create.glass_fluid_pipe": "액체 파이프", "block.create.granite_bricks": "화강암 벽돌", - "block.create.granite_bricks_slab": "화강암 벽돌 반 블록", - "block.create.granite_bricks_stairs": "화강암 벽돌 계단", - "block.create.granite_bricks_wall": "화강암 벽돌 담장", + "block.create.granite_bricks_slab": "화강함 벽돌 반 블록", + "block.create.granite_bricks_stairs": "화강함 벽돌 계단", + "block.create.granite_bricks_wall": "화강함 벽돌 담장", "block.create.granite_cobblestone": "화강암 조약돌", "block.create.granite_cobblestone_slab": "화강암 조약돌 반 블록", "block.create.granite_cobblestone_stairs": "화강암 조약돌 계단", "block.create.granite_cobblestone_wall": "화강암 조약돌 담장", "block.create.granite_pillar": "화강암 기둥", - "block.create.gray_nixie_tube": "UNLOCALIZED: Gray Nixie Tube", - "block.create.gray_sail": "회색 캔버스", + "block.create.gray_nixie_tube": "회색 닉시관", + "block.create.gray_sail": "회색 날개", "block.create.gray_seat": "회색 좌석", "block.create.gray_valve_handle": "회색 밸브 손잡이", - "block.create.green_nixie_tube": "UNLOCALIZED: Green Nixie Tube", - "block.create.green_sail": "초록색 캔버스", + "block.create.green_nixie_tube": "초록색 닉시관", + "block.create.green_sail": "초록색 날개", "block.create.green_seat": "초록색 좌석", "block.create.green_valve_handle": "초록색 밸브 손잡이", - "block.create.hand_crank": "자가발전용 손잡이", - "block.create.haunted_bell": "UNLOCALIZED: Haunted Bell", + "block.create.hand_crank": "핸드 크랭크", + "block.create.haunted_bell": "귀신들린 종", "block.create.honey": "꿀", - "block.create.horizontal_framed_glass": "가로 틀 유리", - "block.create.horizontal_framed_glass_pane": "가로 틀 유리판", - "block.create.hose_pulley": "액체관 도르래", - "block.create.item_drain": "흡수통", - "block.create.jungle_window": "정글 나무 판자 창문", - "block.create.jungle_window_pane": "정글 나무 판자 창문판", - "block.create.large_cogwheel": "큰 톱니바퀴 ", - "block.create.layered_andesite": "틀 안산암", - "block.create.layered_dark_scoria": "틀 짙은 스코리아", - "block.create.layered_diorite": "틀 섬록암", - "block.create.layered_dolomite": "틀 백운암", - "block.create.layered_gabbro": "틀 반려암", - "block.create.layered_granite": "틀 화강암", - "block.create.layered_limestone": "틀 석회암", - "block.create.layered_scoria": "틀 스코리아", - "block.create.layered_weathered_limestone": "틀 풍화된 석회암", - "block.create.lectern_controller": "UNLOCALIZED: Lectern Controller", - "block.create.light_blue_nixie_tube": "UNLOCALIZED: Light Blue Nixie Tube", - "block.create.light_blue_sail": "하늘색 캔버스", + "block.create.horizontal_framed_glass": "수평 유리", + "block.create.horizontal_framed_glass_pane": "수평 유리판", + "block.create.hose_pulley": "호스 도르래", + "block.create.item_drain": "아이템 배수구", + "block.create.jungle_window": "정글나무 유리창", + "block.create.jungle_window_pane": "정글나무 유리판", + "block.create.large_cogwheel": "큰 톱니바퀴", + "block.create.layered_andesite": "이어지는 안산암", + "block.create.layered_dark_scoria": "이어지는 짙은 스코리아", + "block.create.layered_diorite": "이어지는 섬록암", + "block.create.layered_dolomite": "이어지는 백운암", + "block.create.layered_gabbro": "이어지는 반려암", + "block.create.layered_granite": "이어지는 화강암", + "block.create.layered_limestone": "이어지는 석회암", + "block.create.layered_scoria": "이어지는 스코리아", + "block.create.layered_weathered_limestone": "이어지는 풍화된 석회암", + "block.create.lectern_controller": "독서대 조작기", + "block.create.light_blue_nixie_tube": "하늘핵 닉시관", + "block.create.light_blue_sail": "하늘색 날개", "block.create.light_blue_seat": "하늘색 좌석", "block.create.light_blue_valve_handle": "하늘색 밸브 손잡이", - "block.create.light_gray_nixie_tube": "UNLOCALIZED: Light Gray Nixie Tube", - "block.create.light_gray_sail": "회백색 캔버스", + "block.create.light_gray_nixie_tube": "회백색 닉시관", + "block.create.light_gray_sail": "회백색 날개", "block.create.light_gray_seat": "회백색 좌석", "block.create.light_gray_valve_handle": "회백색 밸브 손잡이", - "block.create.lime_nixie_tube": "UNLOCALIZED: Lime Nixie Tube", - "block.create.lime_sail": "연두색 캔버스", + "block.create.lime_nixie_tube": "연두색 닉시관", + "block.create.lime_sail": "연두색 날개", "block.create.lime_seat": "연두색 좌석", "block.create.lime_valve_handle": "연두색 밸브 손잡이", - "block.create.limesand": "석회 가루", + "block.create.limesand": "석회모래", "block.create.limestone": "석회암", "block.create.limestone_bricks": "석회암 벽돌", "block.create.limestone_bricks_slab": "석회암 벽돌 반 블록", @@ -234,63 +234,63 @@ "block.create.limestone_cobblestone_stairs": "석회암 조약돌 계단", "block.create.limestone_cobblestone_wall": "석회암 조약돌 담장", "block.create.limestone_pillar": "석회암 기둥", - "block.create.linear_chassis": "선형 연결대", - "block.create.lit_blaze_burner": "불이 붙은 블레이즈 가열기", - "block.create.magenta_nixie_tube": "UNLOCALIZED: Magenta Nixie Tube", - "block.create.magenta_sail": "자홍색 캔버스", + "block.create.linear_chassis": "어두운 직선 섀시", + "block.create.lit_blaze_burner": "불타는 빈 블레이즈 버너", + "block.create.magenta_nixie_tube": "자홍색 닉시관", + "block.create.magenta_sail": "자홍색 날개", "block.create.magenta_seat": "자홍색 좌석", "block.create.magenta_valve_handle": "자홍색 밸브 손잡이", - "block.create.mechanical_arm": "기계식 팔", - "block.create.mechanical_bearing": "기계식 회전장치", - "block.create.mechanical_crafter": "기계식 제작기", - "block.create.mechanical_drill": "기계식 드릴", - "block.create.mechanical_harvester": "기계식 수확기", - "block.create.mechanical_mixer": "기계식 믹서기", + "block.create.mechanical_arm": "기계 팔", + "block.create.mechanical_bearing": "베어링", + "block.create.mechanical_crafter": "조합기", + "block.create.mechanical_drill": "드릴", + "block.create.mechanical_harvester": "수확기", + "block.create.mechanical_mixer": "믹서", "block.create.mechanical_piston": "기계식 피스톤", "block.create.mechanical_piston_head": "기계식 피스톤 머리", - "block.create.mechanical_plough": "기계식 경작기", - "block.create.mechanical_press": "기계식 압착기", - "block.create.mechanical_pump": "기계식 펌프", - "block.create.mechanical_saw": "기계식 톱", + "block.create.mechanical_plough": "쟁기", + "block.create.mechanical_press": "압착기", + "block.create.mechanical_pump": "펌프", + "block.create.mechanical_saw": "톱", "block.create.metal_bracket": "금속 지지대", "block.create.millstone": "맷돌", - "block.create.minecart_anchor": "광산 수레 부착대", + "block.create.minecart_anchor": "광산 수레 정박기", "block.create.mossy_andesite": "이끼 낀 안산암", "block.create.mossy_dark_scoria": "이끼 낀 짙은 스코리아", "block.create.mossy_diorite": "이끼 낀 섬록암", - "block.create.mossy_dolomite": "이끼 낀 백운암", - "block.create.mossy_gabbro": "이끼 낀 반려암", - "block.create.mossy_granite": "이끼 낀 화강암", + "block.create.mossy_dolomite": "이끼낀 백운암", + "block.create.mossy_gabbro": "이끼낀 반려암", + "block.create.mossy_granite": "이끼 낀 화강암 벽돌", "block.create.mossy_limestone": "이끼 낀 석회암", "block.create.mossy_scoria": "이끼 낀 스코리아", "block.create.mossy_weathered_limestone": "이끼 낀 풍화된 석회암", - "block.create.mysterious_cuckoo_clock": "기이한 뻐꾸기시계", - "block.create.natural_scoria": "자연적인 스코리아", - "block.create.nixie_tube": "표시등", - "block.create.nozzle": "분출구", - "block.create.oak_window": "참나무 판자 창문", - "block.create.oak_window_pane": "참나무 판자 창문판", - "block.create.orange_sail": "주황색 캔버스", + "block.create.mysterious_cuckoo_clock": "뻐꾸기 시계?", + "block.create.natural_scoria": "자연 스코리아", + "block.create.nixie_tube": "닉시관", + "block.create.nozzle": "노즐", + "block.create.oak_window": "참나무 유리창", + "block.create.oak_window_pane": "참나무 유리판", + "block.create.orange_sail": "주황색 날개", "block.create.orange_seat": "주황색 좌석", "block.create.orange_valve_handle": "주황색 밸브 손잡이", - "block.create.ornate_iron_window": "화려한 철제 창문", - "block.create.ornate_iron_window_pane": "화려한 철제 창문판", + "block.create.ornate_iron_window": "장식된 철 유리창", + "block.create.ornate_iron_window_pane": "장식된 철 유리판", "block.create.overgrown_andesite": "이끼로 뒤덮힌 안산암", - "block.create.overgrown_dark_scoria": "이끼로 뒤덮힌 짙은 스코리아", + "block.create.overgrown_dark_scoria": "이끼가 뒤덮힌 짙은 스코리아", "block.create.overgrown_diorite": "이끼로 뒤덮힌 섬록암", "block.create.overgrown_dolomite": "이끼로 뒤덮힌 백운암", "block.create.overgrown_gabbro": "이끼로 뒤덮힌 반려암", - "block.create.overgrown_granite": "이끼로 뒤덮힌 화강암", + "block.create.overgrown_granite": "이끼로 뒤덮힌 화강암 벽돌", "block.create.overgrown_limestone": "이끼로 뒤덮힌 석회암", "block.create.overgrown_scoria": "이끼로 뒤덮힌 스코리아", - "block.create.overgrown_weathered_limestone": "이끼 풍화된 석회암", + "block.create.overgrown_weathered_limestone": "이끼로 뒤덮힌 풍화된 석회암", "block.create.paved_andesite": "포장된 안산암", "block.create.paved_andesite_slab": "포장된 안산암 반 블록", "block.create.paved_andesite_stairs": "포장된 안산암 계단", "block.create.paved_andesite_wall": "포장된 안산암 담장", "block.create.paved_dark_scoria": "포장된 짙은 스코리아", - "block.create.paved_dark_scoria_slab": "포장된 짙은 스코리아 반 블록", - "block.create.paved_dark_scoria_stairs": "포장된 짙은 스코리아 계단", + "block.create.paved_dark_scoria_slab": "포장된 스코리아 반 블록", + "block.create.paved_dark_scoria_stairs": "포장된 짙은 스코리 계단", "block.create.paved_dark_scoria_wall": "포장된 짙은 스코리아 담장", "block.create.paved_diorite": "포장된 섬록암", "block.create.paved_diorite_slab": "포장된 섬록암 반 블록", @@ -320,12 +320,12 @@ "block.create.paved_weathered_limestone_slab": "포장된 풍화된 석회암 반 블록", "block.create.paved_weathered_limestone_stairs": "포장된 풍화된 석회암 계단", "block.create.paved_weathered_limestone_wall": "포장된 풍화된 석회암 담장", - "block.create.peculiar_bell": "UNLOCALIZED: Peculiar Bell", - "block.create.pink_nixie_tube": "UNLOCALIZED: Pink Nixie Tube", - "block.create.pink_sail": "분홍색 캔버스", + "block.create.peculiar_bell": "황동 종", + "block.create.pink_nixie_tube": "분홍색 닉시관", + "block.create.pink_sail": "분홍색 날개", "block.create.pink_seat": "분홍색 좌석", "block.create.pink_valve_handle": "분홍색 밸브 손잡이", - "block.create.piston_extension_pole": "피스톤 연장대", + "block.create.piston_extension_pole": "피스톤 연장 축", "block.create.polished_dark_scoria": "윤나는 짙은 스코리아", "block.create.polished_dark_scoria_slab": "윤나는 짙은 스코리아 반 블록", "block.create.polished_dark_scoria_stairs": "윤나는 짙은 스코리아 계단", @@ -350,31 +350,31 @@ "block.create.polished_weathered_limestone_slab": "윤나는 풍화된 석회암 반 블록", "block.create.polished_weathered_limestone_stairs": "윤나는 풍화된 석회암 계단", "block.create.polished_weathered_limestone_wall": "윤나는 풍화된 석회암 담장", - "block.create.portable_fluid_interface": "연결식 액체 전달기", - "block.create.portable_storage_interface": "연결식 아이템 전달기", - "block.create.powered_latch": "레드스톤 잠금기", - "block.create.powered_toggle_latch": "레버식 레드스톤 잠금기", + "block.create.portable_fluid_interface": "액체 인터페이스", + "block.create.portable_storage_interface": "아이템 인터페이스", + "block.create.powered_latch": "레드스톤 걸쇠", + "block.create.powered_toggle_latch": "레드스톤 토글 걸쇠", "block.create.pulley_magnet": "도르래 자석", - "block.create.pulse_repeater": "순간작동 중계기", - "block.create.purple_nixie_tube": "UNLOCALIZED: Purple Nixie Tube", - "block.create.purple_sail": "보라색 캔버스", + "block.create.pulse_repeater": "펄스 리피터", + "block.create.purple_nixie_tube": "보라샥 닉시관", + "block.create.purple_sail": "보라색 날개", "block.create.purple_seat": "보라색 좌석", "block.create.purple_valve_handle": "보라색 밸브 손잡이", - "block.create.radial_chassis": "반경 연결대", - "block.create.red_nixie_tube": "UNLOCALIZED: Red Nixie Tube", - "block.create.red_sail": "빨간색 캔버스", + "block.create.radial_chassis": "원형 섀시", + "block.create.red_nixie_tube": "빨간색 닉시관", + "block.create.red_sail": "빨간색 날개", "block.create.red_seat": "빨간색 좌석", "block.create.red_valve_handle": "빨간색 밸브 손잡이", - "block.create.redstone_contact": "레드스톤 접촉기", - "block.create.redstone_link": "레드스톤 연동 장치", - "block.create.refined_radiance_casing": "빛의 틀", - "block.create.reinforced_rail": "보강된 레일", - "block.create.rope": "도르래 밧줄", + "block.create.redstone_contact": "동형 감지기", + "block.create.redstone_link": "레드스톤 링크", + "block.create.refined_radiance_casing": "빛나는 케이스", + "block.create.reinforced_rail": "강화된 레일", + "block.create.rope": "밧줄", "block.create.rope_pulley": "밧줄 도르래", - "block.create.rotation_speed_controller": "회전 속도 제어기", - "block.create.sail_frame": "캔버스 틀", - "block.create.schematic_table": "설계도 탁자", - "block.create.schematicannon": "설계대포", + "block.create.rotation_speed_controller": "회전 속도 컨트롤러", + "block.create.sail_frame": "풍차 날개 틀", + "block.create.schematic_table": "청사진 탁자", + "block.create.schematicannon": "청사진 대포", "block.create.scoria": "스코리아", "block.create.scoria_bricks": "스코리아 벽돌", "block.create.scoria_bricks_slab": "스코리아 벽돌 반 블록", @@ -385,28 +385,28 @@ "block.create.scoria_cobblestone_stairs": "스코리아 조약돌 계단", "block.create.scoria_cobblestone_wall": "스코리아 조약돌 담장", "block.create.scoria_pillar": "스코리아 기둥", - "block.create.secondary_linear_chassis": "이차 선형 연결대", - "block.create.sequenced_gearshift": "순서화 전환기", - "block.create.shadow_steel_casing": "어둠의 틀", + "block.create.secondary_linear_chassis": "밝은 직선 섀시", + "block.create.sequenced_gearshift": "순서 기어쉬프트", + "block.create.shadow_steel_casing": "그림자 케이스", "block.create.shaft": "축", - "block.create.smart_chute": "지능형 도관", - "block.create.smart_fluid_pipe": "지능형 액체관", - "block.create.speedometer": "속도계", + "block.create.smart_chute": "스마트 슈트", + "block.create.smart_fluid_pipe": "스마트 액체 파이프", + "block.create.speedometer": "속도 계측기", "block.create.spout": "주입기", - "block.create.spruce_window": "가문비나무 판자 창문", - "block.create.spruce_window_pane": "가문비나무 판자 창문판", + "block.create.spruce_window": "가문비나무 유리창", + "block.create.spruce_window_pane": "가문비나무 유리판", "block.create.sticker": "부착기", "block.create.sticky_mechanical_piston": "기계식 끈끈이 피스톤", - "block.create.stockpile_switch": "물량 감지기", - "block.create.stressometer": "부하계", - "block.create.tiled_glass": "칸 유리", - "block.create.tiled_glass_pane": "칸 유리판", - "block.create.turntable": "회전대", - "block.create.vertical_framed_glass": "세로 틀 유리", - "block.create.vertical_framed_glass_pane": "세로 틀 유리판", - "block.create.warped_window": "뒤틀린 판자 창문", - "block.create.warped_window_pane": "뒤틀린 판자 창문판", - "block.create.water_wheel": "물레바퀴", + "block.create.stockpile_switch": "수량 스위치", + "block.create.stressometer": "피로도 계측기", + "block.create.tiled_glass": "타일 유리", + "block.create.tiled_glass_pane": "타일 유리판", + "block.create.turntable": "돌림판", + "block.create.vertical_framed_glass": "수직 유리", + "block.create.vertical_framed_glass_pane": "수직 유리판", + "block.create.warped_window": "뒤틀린 유리창", + "block.create.warped_window_pane": "뒤틀린 유리판", + "block.create.water_wheel": "물레방아", "block.create.weathered_limestone": "풍화된 석회암", "block.create.weathered_limestone_bricks": "풍화된 석회암 벽돌", "block.create.weathered_limestone_bricks_slab": "풍화된 석회암 벽돌 반 블록", @@ -417,498 +417,498 @@ "block.create.weathered_limestone_cobblestone_stairs": "풍화된 석회암 조약돌 계단", "block.create.weathered_limestone_cobblestone_wall": "풍화된 석회암 조약돌 담장", "block.create.weathered_limestone_pillar": "풍화된 석회암 기둥", - "block.create.weighted_ejector": "발사대", - "block.create.white_nixie_tube": "UNLOCALIZED: White Nixie Tube", - "block.create.white_sail": "하얀색 캔버스", + "block.create.weighted_ejector": "투척기", + "block.create.white_nixie_tube": "하얀색 닉시관", + "block.create.white_sail": "하얀색 날개", "block.create.white_seat": "하얀색 좌석", "block.create.white_valve_handle": "하얀색 밸브 손잡이", - "block.create.windmill_bearing": "풍차 회전장치", + "block.create.windmill_bearing": "풍차 베어링", "block.create.wooden_bracket": "나무 지지대", - "block.create.yellow_nixie_tube": "UNLOCALIZED: Yellow Nixie Tube", - "block.create.yellow_sail": "노란색 캔버스", + "block.create.yellow_nixie_tube": "노란색 닉시관", + "block.create.yellow_sail": "노란색 날개", "block.create.yellow_seat": "노란색 좌석", "block.create.yellow_valve_handle": "노란색 밸브 손잡이", "block.create.zinc_block": "아연 블록", "block.create.zinc_ore": "아연 광석", - "enchantment.create.capacity": "UNLOCALIZED: Capacity", - "enchantment.create.potato_recovery": "UNLOCALIZED: Potato Recovery", + "enchantment.create.capacity": "저장량", + "enchantment.create.potato_recovery": "대포알 회수", - "entity.create.contraption": "장치", - "entity.create.crafting_blueprint": "UNLOCALIZED: Crafting Blueprint", - "entity.create.gantry_contraption": "다리 장치", - "entity.create.potato_projectile": "UNLOCALIZED: Potato Projectile", + "entity.create.contraption": "구조물", + "entity.create.crafting_blueprint": "조합 청사진", + "entity.create.gantry_contraption": "갠트리 구조물", + "entity.create.potato_projectile": "감자포 투사체", "entity.create.seat": "좌석", - "entity.create.stationary_contraption": "고정된 장치", + "entity.create.stationary_contraption": "고정된 구조물", "entity.create.super_glue": "강력 접착제", "fluid.create.milk": "우유", - "fluid.create.potion": "물약", + "fluid.create.potion": "포션", "fluid.create.tea": "건축가의 차", "item.create.andesite_alloy": "안산암 합금", - "item.create.attribute_filter": "특성 필터", + "item.create.attribute_filter": "속성 필터 틀", "item.create.bar_of_chocolate": "초콜릿 바", "item.create.belt_connector": "벨트", "item.create.blaze_cake": "블레이즈 케이크", - "item.create.blaze_cake_base": "블레이즈 케이크 빵", - "item.create.brass_hand": "황동제 손", - "item.create.brass_ingot": "황동괴", + "item.create.blaze_cake_base": "블레이즈 케이크 틀", + "item.create.brass_hand": "황동 손", + "item.create.brass_ingot": "황동 주괴", "item.create.brass_nugget": "황동 조각", - "item.create.brass_sheet": "황동판", + "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": "UNLOCALIZED: Copper Backtank", - "item.create.copper_ingot": "구리괴", + "item.create.chocolate_glazed_berries": "초콜릿 바른 열매", + "item.create.chromatic_compound": "색채 혼합물", + "item.create.cinder_flour": "잿가루", + "item.create.copper_backtank": "구리 산소통", + "item.create.copper_ingot": "구리 주괴", "item.create.copper_nugget": "구리 조각", - "item.create.copper_sheet": "구리판", - "item.create.crafter_slot_cover": "제작 슬롯 덮개", - "item.create.crafting_blueprint": "UNLOCALIZED: Crafting Blueprint", - "item.create.crushed_aluminum_ore": "분쇄된 알루미늄 광석", + "item.create.copper_sheet": "구리 판", + "item.create.crafter_slot_cover": "조합기 슬롯 덮개", + "item.create.crafting_blueprint": "조합 청사진", + "item.create.crushed_aluminum_ore": "UNLOCALIZED: Crushed Aluminum Ore", "item.create.crushed_brass": "분쇄된 황동", "item.create.crushed_copper_ore": "분쇄된 구리 광석", - "item.create.crushed_gold_ore": "분쇄된 금광석", - "item.create.crushed_iron_ore": "분쇄된 철광석", - "item.create.crushed_lead_ore": "분쇄된 납 광석", - "item.create.crushed_nickel_ore": "분쇄된 니켈 광석", - "item.create.crushed_osmium_ore": "분쇄된 오스뮴 광석", - "item.create.crushed_platinum_ore": "분쇄된 백금 광석", - "item.create.crushed_quicksilver_ore": "분쇄된 수은 광석", - "item.create.crushed_silver_ore": "분쇄된 은광석", - "item.create.crushed_tin_ore": "분쇄된 주석 광석", - "item.create.crushed_uranium_ore": "분쇄된 우라늄 광석", + "item.create.crushed_gold_ore": "분쇄된 금 광석", + "item.create.crushed_iron_ore": "분쇄된 철 광석", + "item.create.crushed_lead_ore": "UNLOCALIZED: Crushed Lead Ore", + "item.create.crushed_nickel_ore": "UNLOCALIZED: Crushed Nickel Ore", + "item.create.crushed_osmium_ore": "UNLOCALIZED: Crushed Osmium Ore", + "item.create.crushed_platinum_ore": "UNLOCALIZED: Crushed Platinum Ore", + "item.create.crushed_quicksilver_ore": "UNLOCALIZED: Crushed Quicksilver Ore", + "item.create.crushed_silver_ore": "UNLOCALIZED: Crushed Silver Ore", + "item.create.crushed_tin_ore": "UNLOCALIZED: Crushed Tin Ore", + "item.create.crushed_uranium_ore": "UNLOCALIZED: Crushed Uranium Ore", "item.create.crushed_zinc_ore": "분쇄된 아연 광석", - "item.create.diving_boots": "UNLOCALIZED: Diving Boots", - "item.create.diving_helmet": "UNLOCALIZED: Diving Helmet", + "item.create.diving_boots": "다이빙 부츠", + "item.create.diving_helmet": "다이빙 헬멧", "item.create.dough": "반죽", - "item.create.electron_tube": "진공관", - "item.create.empty_blaze_burner": "비어있는 블레이즈 가열기", - "item.create.empty_schematic": "비어있는 설계도", - "item.create.extendo_grip": "연장용 팔", - "item.create.filter": "필터", - "item.create.furnace_minecart_contraption": "장치를 붙인 화로가 실린 광산 수레", - "item.create.goggles": "공학자의 안경", - "item.create.golden_sheet": "금판", - "item.create.handheld_worldshaper": "휴대용 세계성형기", + "item.create.electron_tube": "전지 튜브", + "item.create.empty_blaze_burner": "빈 블레이즈 버너", + "item.create.empty_schematic": "빈 청사진", + "item.create.extendo_grip": "외장형 연장 팔", + "item.create.filter": "필터 틀", + "item.create.furnace_minecart_contraption": "화로가 실린 광산 수레 구조물", + "item.create.goggles": "엔지니어의 고글", + "item.create.golden_sheet": "금 판", + "item.create.handheld_worldshaper": "크리에이티브 세계편집기", "item.create.honey_bucket": "꿀 양동이", - "item.create.honeyed_apple": "꿀사과", - "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.iron_sheet": "철판", - "item.create.linked_controller": "UNLOCALIZED: Linked Controller", - "item.create.minecart_contraption": "장치를 붙인 광산 수레", - "item.create.minecart_coupling": "광산 수레 이음쇠", - "item.create.polished_rose_quartz": "갈아낸 붉은 석영", - "item.create.potato_cannon": "UNLOCALIZED: Potato Cannon", + "item.create.honeyed_apple": "꿀 바른 사과", + "item.create.incomplete_cogwheel": "미완성된 톱니바퀴", + "item.create.incomplete_large_cogwheel": "미완성된 큰 톱니바퀴", + "item.create.incomplete_precision_mechanism": "미완성된 정밀 기계장치", + "item.create.iron_sheet": "철 판", + "item.create.linked_controller": "레드스톤 링크 조작기", + "item.create.minecart_contraption": "광산 수레 구조물", + "item.create.minecart_coupling": "광산 수레 커플링", + "item.create.polished_rose_quartz": "윤나는 장밋빛 석영", + "item.create.potato_cannon": "감자포", "item.create.powdered_obsidian": "흑요석 가루", - "item.create.precision_mechanism": "UNLOCALIZED: Precision Mechanism", - "item.create.propeller": "날개", - "item.create.red_sand_paper": "붉은 사포 ", - "item.create.refined_radiance": "섬세한 섬광", - "item.create.rose_quartz": "붉은 석영", + "item.create.precision_mechanism": "정밀 기계장치", + "item.create.propeller": "프로펠러", + "item.create.red_sand_paper": "붉은 사포", + "item.create.refined_radiance": "정제된 광채", + "item.create.rose_quartz": "장밋빛 석영", "item.create.sand_paper": "사포", - "item.create.schematic": "설계도", - "item.create.schematic_and_quill": "설계도와 깃펜", - "item.create.shadow_steel": "그림자 금속", + "item.create.schematic": "청사진", + "item.create.schematic_and_quill": "청사진과 깃펜", + "item.create.shadow_steel": "그림자 강철", "item.create.super_glue": "강력 접착제", - "item.create.sweet_roll": "스위트롤", + "item.create.sweet_roll": "롤빵", "item.create.tree_fertilizer": "나무 비료", - "item.create.vertical_gearbox": "세로 전환장치", + "item.create.vertical_gearbox": "수직 기어박스", "item.create.wand_of_symmetry": "대칭의 지팡이", "item.create.wheat_flour": "밀가루", - "item.create.whisk": "거품기", - "item.create.wrench": "스패너", - "item.create.zinc_ingot": "아연괴", + "item.create.whisk": "혼합기", + "item.create.wrench": "렌치", + "item.create.zinc_ingot": "아연 주괴", "item.create.zinc_nugget": "아연 조각", "_": "->------------------------] Advancements [------------------------<-", - "advancement.create.root": "크리에이트", - "advancement.create.root.desc": "굉장한 장치들을 만들어볼 시간입니다!", - "advancement.create.andesite_alloy": "특이한 작명센스", - "advancement.create.andesite_alloy.desc": "크리에이트에는 이상한 이름을 가진 재료들이 많습니다. 안산암 합금도 그중 하나이지요.", - "advancement.create.its_alive": "움직인다!", - "advancement.create.its_alive.desc": "동적 장치를 회전하게 만드세요.", - "advancement.create.shifting_gears": "톱니바퀴 변속", - "advancement.create.shifting_gears.desc": "작은 톱니바퀴에 큰 톱니바퀴를 연결하고 회전하게 만드세요. 크기가 다른 톱니바퀴끼리 연결하면, 장치의 속도가 변경됩니다.", - "advancement.create.overstressed": "과부하", - "advancement.create.overstressed.desc": "부하의 한계를 경험하세요.", + "advancement.create.root": "Create!", + "advancement.create.root.desc": "멋진 장치들을 창조할 시간입니다!", + "advancement.create.andesite_alloy": "이게 합금?", + "advancement.create.andesite_alloy.desc": "암석으로도 합금을 만들 수 있나요?", + "advancement.create.its_alive": "살아 움직이는", + "advancement.create.its_alive.desc": "당신의 첫 장치가 움직입니다!", + "advancement.create.shifting_gears": "톱니바퀴 돌리고!", + "advancement.create.shifting_gears.desc": "크기가 다른 톱니바퀴를 연결하여 장치의 속도를 바꿀 수 있습니다.", + "advancement.create.overstressed": "과부화", + "advancement.create.overstressed.desc": "피로도의 한계를 경험해보세요.", "advancement.create.belt": "켈프 벨트", - "advancement.create.belt.desc": "축 2개에 벨트를 연결하세요.", - "advancement.create.tunnel": "엄폐!", - "advancement.create.tunnel.desc": "벨트를 이용해 터널을 장식하세요.", - "advancement.create.splitter_tunnel": "분할 정복", - "advancement.create.splitter_tunnel.desc": "황동 터널을 일렬로 설치하여 아이템을 나누세요.", - "advancement.create.chute": "아래로 떨어지는", - "advancement.create.chute.desc": "세로로 된 벨트의 역할을 하는 도관을 설치하세요.", + "advancement.create.belt.desc": "두 축에 컨베이어 벨트를 이으세요.", + "advancement.create.tunnel": "벨트 꾸미기", + "advancement.create.tunnel.desc": "터널을 이용해 벨트를 꾸며보세요.", + "advancement.create.splitter_tunnel": "분할 정복 알고리즘", + "advancement.create.splitter_tunnel.desc": "여러 황동 터널을 일렬로 설치해, 아이템을 나누세요.", + "advancement.create.chute": "쏟아져 내려와", + "advancement.create.chute.desc": "수직 벨트역할을 하는 슈트를 설치하세요.", "advancement.create.upward_chute": "바람 납치", - "advancement.create.upward_chute.desc": "도관 속 던진 아이템이 선풍기에 의해 올라가는 것을 관찰하세요.", - "advancement.create.belt_funnel": "퍼널 공정", - "advancement.create.belt_funnel.desc": "벨트나 아이템 거치대 위에 벽에다가 퍼널을 설치하여 특별한 유형의 퍼널을 만드세요.", - "advancement.create.belt_funnel_kiss": "퍼널은 어떻게 태어나?", - "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_water": "세밀한 세척", - "advancement.create.fan_water.desc": "아이템을 세척하는 바람을 느끼세요.", - "advancement.create.fan_smoke": "기계식 풍구", - "advancement.create.fan_smoke.desc": "아이템을 훈연하는 바람을 느끼세요.", - "advancement.create.wrench": "간편한 설정", - "advancement.create.wrench.desc": "장치를 쉽게 설정할 수 있는 스패너를 만드세요.", - "advancement.create.goggles": "부하 확인", - "advancement.create.goggles.desc": "장치의 동적 정보를 쉽게 확인할 수 있는 공학자의 안경을 만드세요.", - "advancement.create.speedometer": "속도를 얼마나 정확하게 측정해?", - "advancement.create.speedometer.desc": "속도계를 설치하고 동력을 공급하세요. 공학자의 안경을 쓰고 관찰하면 정확한 값을 알 수 있습니다.", - "advancement.create.stressometer": "부하를 얼마나 정확하게 측정해?", - "advancement.create.stressometer.desc": "부하계를 설치하고 동력을 공급하세요. 공학자의 안경을 쓰고 관찰하면 정확한 값을 알 수 있습니다.", + "advancement.create.upward_chute.desc": "선풍기를 설치하고, 슈트안에서 아이템이 날아가는 것을 보세요.", + "advancement.create.belt_funnel": "퍼널 깔기", + "advancement.create.belt_funnel.desc": "퍼널을 벨트나 아이템 거치대에 설치하여 특별한 모양을 만들어 보세요.", + "advancement.create.belt_funnel_kiss": "퍼널는 어떻게 태어나?", + "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_water": "축축한 세척", + "advancement.create.fan_water.desc": "아이템을 씻는 바람을 느껴보세요.", + "advancement.create.fan_smoke": "기계 풀무", + "advancement.create.fan_smoke.desc": "아이템을 굽는 바람을 느껴보세요.", + "advancement.create.wrench": "곡괭이여 잘 있거라", + "advancement.create.wrench.desc": "당신의 장치 설계를 도와줄 렌치를 만드세요.", + "advancement.create.goggles": "피로돋보기", + "advancement.create.goggles.desc": "장치에 대한 운동 정보를 가져다 줄 고글을 만드세요.", + "advancement.create.speedometer": "근데 얼마나 빨라?", + "advancement.create.speedometer.desc": "속도 계측기를 작동하세요. 고글을 통해 수치가 얼마나 되는지 보세요.", + "advancement.create.stressometer": "근데 얼마나 피로해?", + "advancement.create.stressometer.desc": "피로도 계측기를 작동하세요. 고글을 통해 수치가 얼마나 되는지 보세요.", "advancement.create.aesthetics": "미적 감각!", - "advancement.create.aesthetics.desc": "축과 액체관, 톱니바퀴에다 지지대를 설치하세요.", + "advancement.create.aesthetics.desc": "축, 파이프, 톱니바퀴에 지지대를 설치하세요.", "advancement.create.reinforced": "튼튼 보강!", - "advancement.create.reinforced.desc": "축과 액체관, 벨트에다 어울리는 틀을 씌우세요.", - "advancement.create.water_wheel": "수력 활용", - "advancement.create.water_wheel.desc": "물레바퀴를 설치하고 회전하게 만드세요!", - "advancement.create.chocolate_wheel": "달콤한 동력", - "advancement.create.chocolate_wheel.desc": "물레바퀴를 녹은 초콜릿으로 회전하게 만드세요!.", - "advancement.create.lava_wheel": "불레바퀴", - "advancement.create.lava_wheel.desc": "물레바퀴를 용암으로 회전하게 만드세ㅇ... 어? 작동하면 안 되는데...", + "advancement.create.reinforced.desc": "축, 파이프, 벨트에 적절한 케이스를 씌우세요.", + "advancement.create.water_wheel": "수력 동력화", + "advancement.create.water_wheel.desc": "물레방아를 설치하고 회전하게 만드세요!", + "advancement.create.chocolate_wheel": "초콜릿방아", + "advancement.create.chocolate_wheel.desc": "녹은 초콜릿으로 물레방아를 돌리세요.", + "advancement.create.lava_wheel": "불레방아", + "advancement.create.lava_wheel.desc": "용암으로 물레바퀴를 회전하게 만드세ㅇ... 어?", "advancement.create.cuckoo": "벌써 이렇게나 시간이 지났어?", - "advancement.create.cuckoo.desc": "밤을 알리고 있는 뻐꾸기시계를 관찰하세요.", - "advancement.create.millstone": "작은 분쇄기", - "advancement.create.millstone.desc": "맷돌을 설치하고 동력을 공급하세요.", - "advancement.create.windmill": "산들바람", - "advancement.create.windmill.desc": "풍차를 가동하세요.", - "advancement.create.maxed_windmill": "거센바람", - "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": "눌러! 쾅!", - "advancement.create.press.desc": "기계식 압착기에 동력을 공급하여 재료를 판으로 만드세요.", - "advancement.create.polished_rose_quartz": "적색 다이아몬드", - "advancement.create.polished_rose_quartz.desc": "사포를 사용하여 붉은 석영을 투명해질 때까지 가세요.", - "advancement.create.electron_tube": "삐뽀삐뽀!", - "advancement.create.electron_tube.desc": "진공관을 만드세요. 진공관은 덜 원시적인 기계에 쓰입니다.", - "advancement.create.mechanical_saw": "회전하는 벌목기", - "advancement.create.mechanical_saw.desc": "기계식 톱을 설치하고 동력을 공급하세요.", - "advancement.create.basin": "커다란 대야", + "advancement.create.cuckoo.desc": "뻐꾸기 시계가 잘 시간을 알립니다. 잘 자...", + "advancement.create.millstone": "나만의 작은 분쇄기", + "advancement.create.millstone.desc": "멧돌을 설치하고 작동시키세요.", + "advancement.create.windmill": "산들 바람", + "advancement.create.windmill.desc": "풍차 베어링을 작동시키세요.", + "advancement.create.maxed_windmill": "거센 바람", + "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": "'깡!'", + "advancement.create.press.desc": "프레스를 만들고 금속 판을 만들어보세요.", + "advancement.create.polished_rose_quartz": "장밋빛 다이아몬드", + "advancement.create.polished_rose_quartz.desc": "장밋빛 석영을 투명해지도록 열심히 사포질하세요.", + "advancement.create.electron_tube": "삐-빅", + "advancement.create.electron_tube.desc": "전지 튜브를 만드세요. 발전된 장치들에 쓰입니다.", + "advancement.create.mechanical_saw": "벌목기 작동", + "advancement.create.mechanical_saw.desc": "톱을 설치하고 작동시키세요.", + "advancement.create.basin": "대야 시스템", "advancement.create.basin.desc": "대야를 설치하고 아이템을 던져보세요.", - "advancement.create.mixer": "섞어!", - "advancement.create.mixer.desc": "기계식 믹서기를 대야 위에 설치하고, 동력을 공급하여 재료들을 섞으세요.", - "advancement.create.blaze_burner": "살아있는 난로", - "advancement.create.blaze_burner.desc": "블레이즈 가열기를 얻으세요.", - "advancement.create.compact": "기계식 압축", - "advancement.create.compact.desc": "대야에 있는 작은 재료들을 압축하세요.", - "advancement.create.brass": "황금빛 합금", - "advancement.create.brass.desc": "분쇄된 구리와 분쇄된 아연으로 황동을 만드세요.", + "advancement.create.mixer": "섞고 돌리고 섞고", + "advancement.create.mixer.desc": "대야 위에 믹서를 설치하고, 작동시켜 재료를 만드세요.", + "advancement.create.blaze_burner": "살아있는 불", + "advancement.create.blaze_burner.desc": "블레이즈 버너를 얻으세요.", + "advancement.create.compact": "자동 압축", + "advancement.create.compact.desc": "대야와 압착기를 이용하서 아이템을 섞어보세요.", + "advancement.create.brass": "진짜 합금", + "advancement.create.brass.desc": "구리와 아연을 가지고 황동을 만드세요.", "advancement.create.brass_casing": "황동기 시대", - "advancement.create.brass_casing.desc": "새로 얻은 황동과 나무를 사용하여 고급 틀을 만드세요.", - "advancement.create.copper_casing": "구리기 시대", - "advancement.create.copper_casing.desc": "구리판과 나무를 사용하여 구리 틀을 만드세요.", - "advancement.create.spout": "쪼르륵", + "advancement.create.brass_casing.desc": "새롭게 얻은 황동과 나무를 가지고 업그레이드된 케이스를 만드세요.", + "advancement.create.copper_casing": "구리 시대", + "advancement.create.copper_casing.desc": "구리 판을 이용해 구리 케이스를 만드세요.", + "advancement.create.spout": "쪼르록", "advancement.create.spout.desc": "주입기를 사용하여 아이템에 액체를 채우세요.", - "advancement.create.spout_potion": "양조장", + "advancement.create.spout_potion": "대규모 양조", "advancement.create.spout_potion.desc": "주입기를 사용하여 유리병에 물약을 채우세요.", - "advancement.create.chocolate": "상상 속 세계", - "advancement.create.chocolate.desc": "녹은 초콜릿이 담긴 양동이를 얻으세요.", - "advancement.create.item_drain": "아래로 쏟아지는", - "advancement.create.item_drain.desc": "흡수통이 액체가 담긴 아이템을 흡수하는 것을 관찰하세요.", - "advancement.create.chained_item_drain": "굴러!", - "advancement.create.chained_item_drain.desc": "연결된 여러 개의 흡수통 위에서 구르는 아이템을 관찰하세요.", + "advancement.create.chocolate": "상상의 세계", + "advancement.create.chocolate.desc": "초콜릿 양동이를 얻으세요.", + "advancement.create.item_drain": "회전 배수", + "advancement.create.item_drain.desc": "아이템 배수구가 액체를 비우는 것을 보세요.", + "advancement.create.chained_item_drain": "구른다!", + "advancement.create.chained_item_drain.desc": "아이템이 여러 배수구 위를 굴러가는 것을 보세요.", "advancement.create.glass_pipe": "액체 엿보기", - "advancement.create.glass_pipe.desc": "액체가 유리창 액체관을 통해 전송되는 것을 관찰하세요. 곧은 액체관에 스패너를 사용하면 유리창 액체관이 됩니다.", + "advancement.create.glass_pipe.desc": "액체가 창이 달린 파이프를 지나는 것을 보세요. 직선 파이프에 렌치로 우클릭하면 창문이 생깁니다.", "advancement.create.pipe_collision": "그 액체를 섞지 마오", "advancement.create.pipe_collision.desc": "액체관에서 두 가지 액체가 만나는 것을 관찰하세요.", - "advancement.create.pipe_spill": "물 샌다!", - "advancement.create.pipe_spill.desc": "액체관의 구멍에서 액체를 흡수하거나, 배출하는 것을 관찰하세요.", - "advancement.create.hose_pulley": "누출 사고", - "advancement.create.hose_pulley.desc": "액체관 도르래가 호스를 내려 액체를 흡수하거나, 배출하는 것을 관찰하세요.", - "advancement.create.infinite_water": "바다 흡수", - "advancement.create.infinite_water.desc": "무한하다고 간주되는 거대한 수역을 흡수하세요.", - "advancement.create.infinite_lava": "외핵 흡수", - "advancement.create.infinite_lava.desc": "무한하다고 간주되는 거대한 용암 바다를 흡수하세요.", - "advancement.create.infinite_chocolate": "상상 속으로!", - "advancement.create.infinite_chocolate.desc": "무한하다고 간주되는 거대한 초콜릿 퐁듀를 흡수하세요.", + "advancement.create.pipe_spill": "누출 사고", + "advancement.create.pipe_spill.desc": "파이프 끝을 열어 액체가 밖으로 나오는 것을 보세요.", + "advancement.create.hose_pulley": "공업 펌프", + "advancement.create.hose_pulley.desc": "호스 도르래를 사용하여 액체를 채우거나 빨아들이세요.", + "advancement.create.infinite_water": "바다를 흡수하다", + "advancement.create.infinite_water.desc": "무한으로 인식되는 물 웅덩이에서 물을 끌어올리세요.", + "advancement.create.infinite_lava": "지옥을 흡수하다", + "advancement.create.infinite_lava.desc": "무한으로 인식되는 용암 웅덩이에서 용암을 끌어올리세요.", + "advancement.create.infinite_chocolate": "상상 속에 잠기다", + "advancement.create.infinite_chocolate.desc": "무한으로 인식되는 초콜릿 웅덩이에서 초콜릿을 끌어올리세요.", "advancement.create.crafter": "자동 조합", - "advancement.create.crafter.desc": "기계식 제작기를 설치하고 동력을 공급하세요.", - "advancement.create.clockwork_bearing": "시계장치", - "advancement.create.clockwork_bearing.desc": "시계 회전장치를 가동하세요.", - "advancement.create.nixie_tube": "스타일의 표시", - "advancement.create.nixie_tube.desc": "표시등을 설치하세요.", - "advancement.create.deployer": "만들고, 설치하고, 공격!", - "advancement.create.deployer.desc": "전개장치를 설치하고 동력을 공급하세요. 사람의 손을 완벽하게 본뜬 장치입니다.", - "advancement.create.speed_controller": "마음대로", - "advancement.create.speed_controller.desc": "궁극적인 장치, 회전 속도 제어기를 설치하세요.", + "advancement.create.crafter.desc": "기계식 조합기를 설치하고 작동시키세요.", + "advancement.create.clockwork_bearing": "시계 제작", + "advancement.create.clockwork_bearing.desc": "시계 베어링에 구조물을 달고 작동시키세요.", + "advancement.create.nixie_tube": "나는 스타일있게 표시해", + "advancement.create.nixie_tube.desc": "닉시관을 만들고 설치하세요.", + "advancement.create.deployer": "찌르고, 설치하고, 공격!", + "advancement.create.deployer.desc": "당신의 분신, 배포기를 설치하고 작동시키세요.", + "advancement.create.speed_controller": "엔지니어들이 이 장치를 싫어합니다", + "advancement.create.speed_controller.desc": "궁극의 회전속도 변경장치, 회전 속도 컨트롤러를 설치하세요.", "advancement.create.flywheel": "공장의 심장", - "advancement.create.flywheel.desc": "원동기를 회전바퀴에 성공적으로 연결하세요.", - "advancement.create.overstress_flywheel": "엄청난 부하", - "advancement.create.overstress_flywheel.desc": "화로 원동기를 과부하되게 만드세요", - "advancement.create.precision_mechanism": "UNLOCALIZED: Complex Curiosities", - "advancement.create.precision_mechanism.desc": "UNLOCALIZED: Assemble a Precision Mechanism.", + "advancement.create.flywheel.desc": "화로엔진에 플라이휠을 연결하세요.", + "advancement.create.overstress_flywheel": "정말정말 높은 피로", + "advancement.create.overstress_flywheel.desc": "화로 엔진을 과부하하세요.", + "advancement.create.precision_mechanism": "복잡한 호기심", + "advancement.create.precision_mechanism.desc": "정밀 기계장치를 조립하세요.", "advancement.create.mechanical_arm": "바쁘다 바빠!", - "advancement.create.mechanical_arm.desc": "기계식 팔을 제작하고, 입력구와 출력구를 선택하고, 설치한 후 동력을 공급한 다음, 작업이 수행되는 것을 관찰하세요.", - "advancement.create.musical_arm": "흥이 넘친다!", - "advancement.create.musical_arm.desc": "기계식 팔이 주크박스에 음반을 넣는 것을 관찰하세요.", - "advancement.create.arm_many_targets": "체계화 프로그램", - "advancement.create.arm_many_targets.desc": "기계식 팔에 10개 이상의 출력부를 설정하세요.", - "advancement.create.arm_blaze_burner": "연소 프로그램", - "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.mechanical_arm.desc": "기계 팔을 조합하고, 입력부와 출력부를 정하고, 설치한 다음 돌리세요. 그리고 그것이 작동하는 것을 보세요.", + "advancement.create.musical_arm": "볼륨 최대로!", + "advancement.create.musical_arm.desc": "기계 팔이 주크박스를 작동시키는 것을 보세요.", + "advancement.create.arm_many_targets": "정리를 할 수 있는 정도의 능력", + "advancement.create.arm_many_targets.desc": "기계 팔에 10개 이상의 출력부를 설정하세요.", + "advancement.create.arm_blaze_burner": "연료를 줄 수 있는 정도의 능력", + "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.chromatic_compound": "양극성 자원", - "advancement.create.chromatic_compound.desc": "혼돈의 혼합물을 만드세요.", + "advancement.create.blaze_cake.desc": "블레이즈 버너에게 줄 특별한 케이크를 만드세요.", + "advancement.create.chromatic_compound": "양극성 재료", + "advancement.create.chromatic_compound.desc": "색채 혼합물를 만드세요.", "advancement.create.shadow_steel": "공허에서의 복귀", - "advancement.create.shadow_steel.desc": "혼돈의 혼합물에 세계 밖의 어둠을 노출하여 무의 금속, 어둠의 강철을 만드세요.", + "advancement.create.shadow_steel.desc": "무의 금속, 그림자 강철을 생성하세요.", "advancement.create.refined_radiance": "빛으로부터의 자극", - "advancement.create.refined_radiance.desc": "혼돈의 혼합물에 신호기의 빛을 쐬어 강렬한 색채를 지닌 물질, 섬세한 섬광을 만드세요.", - "advancement.create.chromatic_age": "극과 극", - "advancement.create.chromatic_age.desc": "빛과 어둠의 틀을 만드세요.", - "advancement.create.wand_of_symmetry": "빛의 거울", + "advancement.create.refined_radiance.desc": "강력한 색채 물질, 정제된 빛을 생성하세요.", + "advancement.create.chromatic_age": "양극 시대", + "advancement.create.chromatic_age.desc": "빛과 어둠의 케이스를 제작하세요.", + "advancement.create.wand_of_symmetry": "빛나는 건축", "advancement.create.wand_of_symmetry.desc": "대칭의 지팡이를 만드세요.", - "advancement.create.extendo_grip": "띠요오용!", - "advancement.create.extendo_grip.desc": "연장용 팔을 손에 쥐세요.", - "advancement.create.potato_cannon": "UNLOCALIZED: Fwoomp!", - "advancement.create.potato_cannon.desc": "UNLOCALIZED: Defeat an enemy with your Potato Cannon.", - "advancement.create.dual_extendo_grip": "궁극의 띠용시대", - "advancement.create.dual_extendo_grip.desc": "연장용 팔을 이중으로 손에 쥐어 초인으로의 한 발짝을 내딛으세요.", - "advancement.create.eob": "베타의 끝", - "advancement.create.eob.desc": "이후에 나올 업데이트를 기대해주세요. <3", + "advancement.create.extendo_grip": "띠요오옹!", + "advancement.create.extendo_grip.desc": "외장형 연장 팔을 손에 쥐세요.", + "advancement.create.potato_cannon": "퐁!", + "advancement.create.potato_cannon.desc": "감자포로 적을 처치하세요.", + "advancement.create.dual_extendo_grip": "궁극의 띠용!", + "advancement.create.dual_extendo_grip.desc": "쌍으로 외장형 연장 팔을 들어 인간을 뛰어넘은 사거리를 가지세요.", + "advancement.create.eob": "End of Beta", + "advancement.create.eob.desc": "이후 업데이트를 기다려주세요. <3", "_": "->------------------------] UI & Messages [------------------------<-", - "itemGroup.create.base": "크리에이트 공학", - "itemGroup.create.palettes": "크리에이트 블록", + "itemGroup.create.base": "Create", + "itemGroup.create.palettes": "Create 팔레트", - "death.attack.create.crush": "%1$s이(가) 분쇄용 바퀴에 갈려나갔습니다", - "death.attack.create.crush.player": "UNLOCALIZED: %1$s was thrown into Crushing Wheels by %2$s", + "death.attack.create.crush": "%1$s이(가) 분쇄 휠로 가공되었습니다", + "death.attack.create.crush.player": "%1$s이(가) %2$s 때문에 분쇄 휠에서 가공되었습니다", "death.attack.create.fan_fire": "%1$s이(가) 뜨거운 바람에 익어버렸습니다", - "death.attack.create.fan_fire.player": "UNLOCALIZED: %1$s was thrown into a smoker by %2$s", - "death.attack.create.fan_lava": "%1$s이(가) 불길 같은 바람에 구워졌습니다", - "death.attack.create.fan_lava.player": "UNLOCALIZED: %1$s was thrown into a smelter by %2$s", - "death.attack.create.mechanical_drill": "%1$s이(가) 기계식 드릴에 관통당했습니다", - "death.attack.create.mechanical_drill.player": "UNLOCALIZED: %1$s was thrown in front of a Drill by %2$s", - "death.attack.create.mechanical_saw": "%1$s이(가) 기계식 톱에 의해 반으로 잘려 나갔습니다", - "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.cuckoo_clock_explosion": "%1$s이(가) 변경된 뻐꾸기시계에 의해 폭파당했습니다", - "death.attack.create.cuckoo_clock_explosion.player": "UNLOCALIZED: %1$s was blown up by tampered cuckoo clock", + "death.attack.create.fan_fire.player": "%1$s이(가) %2$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.potato_cannon": "%1$s이(가) %2$s의 감자포에 맞고 죽었습니다.", + "death.attack.create.potato_cannon.item": "%1$s이(가) %3$s을(를) 사용한 %2$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.block.deployer.damage_source_name": "배포기", + "create.block.cart_assembler.invalid": "카트조립기를 레일 위에 설치하세요", - "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": "메뉴로 돌아가기", + "create.menu.configure": "설정...", + "create.menu.ponder_index": "분석 메뉴", + "create.menu.only_ingame": "일시 정지 메뉴에서 가능합니다", + "create.menu.project_page": "Curseforge 페이지", + "create.menu.report_bugs": "버그 제보하기", + "create.menu.support": "후원하기", "create.recipe.crushing": "분쇄", "create.recipe.milling": "제분", "create.recipe.fan_washing": "세척", - "create.recipe.fan_washing.fan": "물과 공업용 선풍기", + "create.recipe.fan_washing.fan": "물과 선풍기", "create.recipe.fan_smoking": "훈연", - "create.recipe.fan_smoking.fan": "불과 공업용 선풍기", + "create.recipe.fan_smoking.fan": "불과 선풍기", "create.recipe.fan_blasting": "제련", - "create.recipe.fan_blasting.fan": "용암과 공업용 선풍기", + "create.recipe.fan_blasting.fan": "용암과 선풍기", "create.recipe.pressing": "압착", "create.recipe.mixing": "혼합", "create.recipe.deploying": "UNLOCALIZED: Deploying", - "create.recipe.automatic_shapeless": "기계식 제작 (믹서기)", - "create.recipe.automatic_brewing": "기계식 양조", + "create.recipe.automatic_shapeless": "무형 자동 조합", + "create.recipe.automatic_brewing": "자동 양조", "create.recipe.packing": "압축", - "create.recipe.automatic_packing": "기계식 압축", - "create.recipe.sawing": "톱질", - "create.recipe.mechanical_crafting": "기계식 제작", - "create.recipe.automatic_shaped": "기계식 제작 (제작기)", + "create.recipe.automatic_packing": "자동 압축", + "create.recipe.sawing": "제재", + "create.recipe.mechanical_crafting": "기계 조합", + "create.recipe.automatic_shaped": "유형 자동 조합", "create.recipe.block_cutting": "블록 절단", "create.recipe.wood_cutting": "나무 절단", "create.recipe.sandpaper_polishing": "사포질", - "create.recipe.mystery_conversion": "불가사의한 변환", + "create.recipe.mystery_conversion": "?", "create.recipe.spout_filling": "채우기", - "create.recipe.draining": "흡수", - "create.recipe.sequenced_assembly": "UNLOCALIZED: Sequenced Assembly", - "create.recipe.assembly.next": "UNLOCALIZED: Next: %1$s", - "create.recipe.assembly.step": "UNLOCALIZED: Step %1$s:", - "create.recipe.assembly.progress": "UNLOCALIZED: Progress: %1$s/%2$s", - "create.recipe.assembly.pressing": "UNLOCALIZED: Process in Press", - "create.recipe.assembly.spout_filling_fluid": "UNLOCALIZED: Spout %1$s", - "create.recipe.assembly.deploying_item": "UNLOCALIZED: Deploy %1$s", - "create.recipe.assembly.cutting": "UNLOCALIZED: Cut with Saw", - "create.recipe.assembly.repeat": "UNLOCALIZED: Repeat Sequence %1$s Times", - "create.recipe.assembly.junk": "UNLOCALIZED: Random junk", + "create.recipe.draining": "배수", + "create.recipe.sequenced_assembly": "순서 조립", + "create.recipe.assembly.next": "다음 단계: %1$s", + "create.recipe.assembly.step": "단계 %1$s:", + "create.recipe.assembly.progress": "진행도: %1$s/%2$s", + "create.recipe.assembly.pressing": "압착하기", + "create.recipe.assembly.spout_filling_fluid": "%1$s 주입하기", + "create.recipe.assembly.deploying_item": "%1$s 사용하기", + "create.recipe.assembly.cutting": "톱으로 자르기", + "create.recipe.assembly.repeat": "%1$s번 반복하기", + "create.recipe.assembly.junk": "조립 실패한 조각들", "create.recipe.processing.chance": "%1$s%% 확률", - "create.recipe.heat_requirement.none": "가열기가 필요하지 않습니다", - "create.recipe.heat_requirement.heated": "가열", - "create.recipe.heat_requirement.superheated": "초가열", + "create.recipe.heat_requirement.none": "열이 필요하지 않음", + "create.recipe.heat_requirement.heated": "가열됨", + "create.recipe.heat_requirement.superheated": "초고온 가열됨", "create.generic.range": "범위", - "create.generic.radius": "반경", + "create.generic.radius": "반지름", "create.generic.width": "폭", "create.generic.height": "높이", "create.generic.length": "길이", "create.generic.speed": "속도", - "create.generic.delay": "지연", + "create.generic.delay": "딜레이", "create.generic.unit.ticks": "틱", "create.generic.unit.seconds": "초", "create.generic.unit.minutes": "분", - "create.generic.unit.rpm": "RPM / 분당 회전수", - "create.generic.unit.stress": " 부하", + "create.generic.unit.rpm": "RPM", + "create.generic.unit.stress": "su", "create.generic.unit.degrees": "°", - "create.generic.unit.millibuckets": "%1$s 밀리양동이", + "create.generic.unit.millibuckets": "%1$smB", "create.generic.clockwise": "시계 방향", - "create.generic.counter_clockwise": "반시계 방향", + "create.generic.counter_clockwise": "시계 반대 방향", - "create.action.scroll": "스크롤", + "create.action.scroll": "스크롤하세요", "create.action.confirm": "확인", "create.action.abort": "중단", "create.action.saveToFile": "저장", "create.action.discard": "삭제", - "create.keyinfo.toolmenu": "집중", - "create.keyinfo.scrollup": "마우스 휠을 위로 이동 (세계에서)", - "create.keyinfo.scrolldown": "마우스 휠을 아래로 이동 (세계에서)", + "create.keyinfo.toolmenu": "메뉴 세부정보 보기", + "create.keyinfo.scrollup": "마우스 휠을 위로 이동 (인게임에서)", + "create.keyinfo.scrolldown": "마우스 휠을 아래로 이동 (인게임에서)", - "create.gui.scrollInput.defaultTitle": "옵션 선택:", - "create.gui.scrollInput.scrollToModify": "스크롤로 수정할 수 있습니다", - "create.gui.scrollInput.scrollToAdjustAmount": "스크롤로 수량을 조절할 수 있습니다", - "create.gui.scrollInput.scrollToSelect": "스크롤로 선택할 수 있습니다", - "create.gui.scrollInput.shiftScrollsFaster": "Shift을(를) 누르고 스크롤하면 빠르게 이동합니다", - "create.gui.toolmenu.focusKey": "[%1$s]을(를) 누르면 집중합니다", - "create.gui.toolmenu.cycle": "[스크롤]하면 모드를 변경합니다", + "create.gui.scrollInput.defaultTitle": "옵션을 선택하세요:", + "create.gui.scrollInput.scrollToModify": "스크롤로 수정하기", + "create.gui.scrollInput.scrollToAdjustAmount": "스크롤로 수량 조절하기", + "create.gui.scrollInput.scrollToSelect": "스크롤로 선택", + "create.gui.scrollInput.shiftScrollsFaster": "쉬프트-스크롤로 빨리 수정하기", + "create.gui.toolmenu.focusKey": "[%1$s]를 눌러 세부정보 보기", + "create.gui.toolmenu.cycle": "스크롤로 순환", "create.gui.symmetryWand.mirrorType": "거울의 형태", "create.gui.symmetryWand.orientation": "거울의 방향", - "create.symmetry.mirror.plane": "기본", + "create.symmetry.mirror.plane": "거울", "create.symmetry.mirror.doublePlane": "사각형", "create.symmetry.mirror.triplePlane": "팔각형", - "create.orientation.orthogonal": "직각", - "create.orientation.diagonal": "대각", - "create.orientation.horizontal": "가로", - "create.orientation.alongZ": "Z 좌표", - "create.orientation.alongX": "X 좌표", + "create.orientation.orthogonal": "수직으로", + "create.orientation.diagonal": "대각선으로", + "create.orientation.horizontal": "수평으로", + "create.orientation.alongZ": "Z좌표를 따라", + "create.orientation.alongX": "X좌표를 따라", - "create.gui.terrainzapper.title": "휴대용 세계성형기", - "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.placement": "기준", - "create.gui.terrainzapper.placement.merged": "중간", - "create.gui.terrainzapper.placement.attached": "밖", - "create.gui.terrainzapper.placement.inserted": "안", - "create.gui.terrainzapper.brush": "형태", - "create.gui.terrainzapper.brush.cuboid": "직육면체", - "create.gui.terrainzapper.brush.sphere": "구체", + "create.gui.terrainzapper.title": "크리에이티브 세계편집기", + "create.gui.terrainzapper.searchDiagonal": "대각선 블록 포함", + "create.gui.terrainzapper.searchFuzzy": "물질 경계 무시", + "create.gui.terrainzapper.patternSection": "패턴", + "create.gui.terrainzapper.pattern.solid": "기본", + "create.gui.terrainzapper.pattern.checkered": "체스판", + "create.gui.terrainzapper.pattern.inversecheckered": "반전된 체스판", + "create.gui.terrainzapper.pattern.chance25": "랜덤하게 25% 채우기", + "create.gui.terrainzapper.pattern.chance50": "랜덤하게 50% 채우기", + "create.gui.terrainzapper.pattern.chance75": "랜덤하게 75% 채우기", + "create.gui.terrainzapper.placement": "설치 기준", + "create.gui.terrainzapper.placement.merged": "선택한 블록에", + "create.gui.terrainzapper.placement.attached": "선택한 블록 밖에", + "create.gui.terrainzapper.placement.inserted": "선택한 블록 안에", + "create.gui.terrainzapper.brush": "브러쉬", + "create.gui.terrainzapper.brush.cuboid": "정육면체", + "create.gui.terrainzapper.brush.sphere": "구", "create.gui.terrainzapper.brush.cylinder": "원기둥", - "create.gui.terrainzapper.brush.surface": "UNLOCALIZED: Surface", - "create.gui.terrainzapper.brush.cluster": "UNLOCALIZED: Cluster", - "create.gui.terrainzapper.tool": "방식", + "create.gui.terrainzapper.brush.surface": "면", + "create.gui.terrainzapper.brush.cluster": "원", + "create.gui.terrainzapper.tool": "설치 방식", "create.gui.terrainzapper.tool.fill": "채우기", "create.gui.terrainzapper.tool.place": "설치하기", - "create.gui.terrainzapper.tool.replace": "대체하기", + "create.gui.terrainzapper.tool.replace": "대체", "create.gui.terrainzapper.tool.clear": "지우기", "create.gui.terrainzapper.tool.overlay": "덮어씌우기", "create.gui.terrainzapper.tool.flatten": "다듬기", - "create.terrainzapper.shiftRightClickToSet": "Shift-오른쪽 버튼으로 모양을 선택할 수 있습니다", - "create.terrainzapper.usingBlock": "UNLOCALIZED: Using: %1$s", - "create.terrainzapper.leftClickToSet": "UNLOCALIZED: Left-Click a Block to set Material", + "create.terrainzapper.shiftRightClickToSet": "쉬프트-우클릭으로 모양 설정하기", + "create.terrainzapper.usingBlock": "사용 중: %1$s", + "create.terrainzapper.leftClickToSet": "좌클릭으로 재료로 쓸 블록을 선택하세요", - "create.minecart_coupling.two_couplings_max": "2개 이상의 이음쇠를 연결할 수는 없습니다", - "create.minecart_coupling.unloaded": "일부분이 불러와지지 않은 청크에 있는 것 같습니다", - "create.minecart_coupling.no_loops": "고리 모양으로 연결할 수는 없습니다", - "create.minecart_coupling.removed": "이 광산 수레에 연결되어 있는 이음쇠를 전부 제거했습니다", - "create.minecart_coupling.too_far": "너무 멀리 떨어져 있습니다", + "create.minecart_coupling.two_couplings_max": "광산 수레는 최대 2개의 커플링만 가질 수 있습니다", + "create.minecart_coupling.unloaded": "열차 일부분이 로딩되지 않은 청크에 있는 것 같습니다", + "create.minecart_coupling.no_loops": "커플링은 반복할 수 없습니다", + "create.minecart_coupling.removed": "광산 수레에서 모든 커플링을 제거했습니다.", + "create.minecart_coupling.too_far": "광산 수레들이 너무 멀리 떨어져 있습니다", "create.contraptions.movement_mode": "이동 설정", - "create.contraptions.movement_mode.move_place": "부착된 블록이 멈춰있을 때만 설치되어 있게 됨", - "create.contraptions.movement_mode.move_place_returned": "부착된 블록이 시작 위치에서만 설치되어 있게 됨", - "create.contraptions.movement_mode.move_never_place": "부착기가 파괴되었을 때만 부착된 블록이 설치되어 있게 됨", - "create.contraptions.movement_mode.rotate_place": "부착된 블록이 멈춰있을 때만 설치되어 있게 됨", - "create.contraptions.movement_mode.rotate_place_returned": "부착된 블록이 초기 각도 근처에서만 설치되어 있게 됨", - "create.contraptions.movement_mode.rotate_never_place": "부착기가 파괴되었을 때만 부착된 블록이 설치되어 있게 됨", - "create.contraptions.cart_movement_mode": "수레 장치 설정", - "create.contraptions.cart_movement_mode.rotate": "방향 회전", - "create.contraptions.cart_movement_mode.rotate_paused": "수레의 방향이 바뀌면 장치가 정지", - "create.contraptions.cart_movement_mode.rotation_locked": "방향 고정", + "create.contraptions.movement_mode.move_place": "멈췄을때 항상 블록이 설치됨", + "create.contraptions.movement_mode.move_place_returned": "멈췄을때 시작 위치에서만 블록이 설치됨", + "create.contraptions.movement_mode.move_never_place": "멈춰도 블록을 설치하지 않음", + "create.contraptions.movement_mode.rotate_place": "멈췄을때 항상 블록이 설치됨", + "create.contraptions.movement_mode.rotate_place_returned": "멈췄을때 시작 위치에서만 블록이 설치됨", + "create.contraptions.movement_mode.rotate_never_place": "멈춰도 블록을 설치하지 않음", + "create.contraptions.cart_movement_mode": "수레 장치 이동 설정", + "create.contraptions.cart_movement_mode.rotate": "구조물이 항상 전방을 향함", + "create.contraptions.cart_movement_mode.rotate_paused": "수레가 회전할때 구조물이 행동을 멈춤", + "create.contraptions.cart_movement_mode.rotation_locked": "구조물이 회전하지 않음", "create.contraptions.windmill.rotation_direction": "회전 방향", "create.contraptions.clockwork.clock_hands": "시계침", - "create.contraptions.clockwork.hour_first": "시침", - "create.contraptions.clockwork.minute_first": "분침", - "create.contraptions.clockwork.hour_first_24": "24시간", + "create.contraptions.clockwork.hour_first": "시침 먼저", + "create.contraptions.clockwork.minute_first": "분침 먼저", + "create.contraptions.clockwork.hour_first_24": "24시간 바늘 먼저", "create.logistics.filter": "필터", - "create.logistics.recipe_filter": "제작법 필터", + "create.logistics.recipe_filter": "조합법 필터", "create.logistics.fluid_filter": "액체 필터", - "create.logistics.firstFrequency": "연동 #1", - "create.logistics.secondFrequency": "연동 #2", + "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.gui.goggles.generator_stats": "동적 근원 상태:", - "create.gui.goggles.kinetic_stats": "동적 장치 상태:", - "create.gui.goggles.at_current_speed": "(현재 속도에서)", - "create.gui.goggles.pole_length": "연장대 길이:", + "create.gui.goggles.generator_stats": "동력 상태:", + "create.gui.goggles.kinetic_stats": "작동 상태:", + "create.gui.goggles.at_current_speed": "현재 에너지량", + "create.gui.goggles.pole_length": "축 길이:", "create.gui.goggles.fluid_container": "액체 저장 정보:", - "create.gui.goggles.fluid_container.capacity": "수용량: ", - "create.gui.assembly.exception": "장치를 가동할 수 없습니다:", - "create.gui.assembly.exception.unmovableBlock": "[%1$s,%2$s,%3$s]에 움직일 수 없는 블록(%4$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.gauge.info_header": "측정 정보:", + "create.gui.goggles.fluid_container.capacity": "용량: ", + "create.gui.assembly.exception": "이 구조물은 움직일 수 없습니다:", + "create.gui.assembly.exception.unmovableBlock": "[%1$s,%2$s,%3$s]에 움직일 수 없는 [%4$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.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.adjustable_crate.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.adjustable_crate.title": "가변 창고", "create.gui.adjustable_crate.storageSpace": "저장 공간", - "create.gui.stockpile_switch.title": "물량 감지기", - "create.gui.stockpile_switch.invert_signal": "신호 전환", - "create.gui.stockpile_switch.move_to_lower_at": "아이템이 차지하는 비율이 %1$s%% 이하일 때 신호", - "create.gui.stockpile_switch.move_to_upper_at": "아이템이 차지하는 비율이 %1$s%% 이상일 때 신호", - "create.gui.sequenced_gearshift.title": "순서화 전환기", + "create.gui.stockpile_switch.title": "수량 스위치", + "create.gui.stockpile_switch.invert_signal": "신호 반전", + "create.gui.stockpile_switch.move_to_lower_at": "최소 신호 발동 비율:%1$s%%", + "create.gui.stockpile_switch.move_to_upper_at": "최소 신호 유지 비율:%1$s%%", + "create.gui.sequenced_gearshift.title": "순서 기어쉬프트", "create.gui.sequenced_gearshift.instruction": "지시", - "create.gui.sequenced_gearshift.instruction.turn_angle.descriptive": "각도 회전", - "create.gui.sequenced_gearshift.instruction.turn_angle": "회전", + "create.gui.sequenced_gearshift.instruction.turn_angle.descriptive": "축 회전", + "create.gui.sequenced_gearshift.instruction.turn_angle": "축 회전", "create.gui.sequenced_gearshift.instruction.turn_angle.angle": "각도", - "create.gui.sequenced_gearshift.instruction.turn_distance.descriptive": "피스톤/도르래/다리 장치를 회전 이동", - "create.gui.sequenced_gearshift.instruction.turn_distance": "피스톤", + "create.gui.sequenced_gearshift.instruction.turn_distance.descriptive": "피스톤/도르래/겐트리 회전", + "create.gui.sequenced_gearshift.instruction.turn_distance": "장치 회전", "create.gui.sequenced_gearshift.instruction.turn_distance.distance": "거리", "create.gui.sequenced_gearshift.instruction.delay.descriptive": "지연 시간", "create.gui.sequenced_gearshift.instruction.delay": "지연", - "create.gui.sequenced_gearshift.instruction.delay.duration": "시간", + "create.gui.sequenced_gearshift.instruction.delay.duration": "지연시간", "create.gui.sequenced_gearshift.instruction.end.descriptive": "종료", "create.gui.sequenced_gearshift.instruction.end": "종료", - "create.gui.sequenced_gearshift.instruction.await.descriptive": "새로운 레드스톤 신호가 전달될 때까지 대기", + "create.gui.sequenced_gearshift.instruction.await.descriptive": "새 레드스톤 신호 대기", "create.gui.sequenced_gearshift.instruction.await": "대기", "create.gui.sequenced_gearshift.speed": "속도, 방향", "create.gui.sequenced_gearshift.speed.forward": "입력 속도, 그대로 회전", @@ -926,170 +926,170 @@ "create.schematicAndQuill.fallbackName": "My Schematic", "create.schematicAndQuill.saved": "%1$s으(로) 저장했습니다", - "create.schematic.invalid": "[!] 잘못된 아이템 - 설계도 탁자를 사용하세요", + "create.schematic.invalid": "[!] 없는 아이템 - 청사진 테이블을 이용하세요", "create.schematic.position": "위치", "create.schematic.rotation": "회전", - "create.schematic.rotation.none": "기본", - "create.schematic.rotation.cw90": "시계방향으로 90° 회전", - "create.schematic.rotation.cw180": "시계방향으로 180° 회전", - "create.schematic.rotation.cw270": "시계방향으로 270° 회전", - "create.schematic.mirror": "대칭 이동", - "create.schematic.mirror.none": "기본", + "create.schematic.rotation.none": "없음", + "create.schematic.rotation.cw90": "90도 시계방향 회전", + "create.schematic.rotation.cw180": "180도 시계방향 회전", + "create.schematic.rotation.cw270": "270도 시계방향 회전", + "create.schematic.mirror": "거울", + "create.schematic.mirror.none": "없음", "create.schematic.mirror.frontBack": "전-후", "create.schematic.mirror.leftRight": "좌-우", - "create.schematic.tool.deploy": "배치", - "create.schematic.tool.move": "X/Z 좌표 이동", - "create.schematic.tool.movey": "Y 좌표 이동", + "create.schematic.tool.deploy": "전개", + "create.schematic.tool.move": "X/Z좌표 이동", + "create.schematic.tool.movey": "Y좌표 이동", "create.schematic.tool.rotate": "회전", "create.schematic.tool.print": "설치", - "create.schematic.tool.flip": "대칭 이동", + "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.move.description.0": "설계도가 수평 이동합니다.", - "create.schematic.tool.move.description.1": "설계도를 바라보며 [CTRL]을 누르고 스크롤하면 설계도를 밀어냅니다.", + "create.schematic.tool.move.description.0": "청사진이 수평 이동합니다.", + "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.0": "청사진을 수직 이동시킵니다.", + "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.0": "구조물을 즉시 설치합니다.", + "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.maxAllowedSize": "최대 설계도 크기:", + "create.schematics.uploadTooLarge": "청사진이 너무 큽니다!.", + "create.schematics.maxAllowedSize": "최대 청사진 파일 크기:", "create.gui.schematicTable.refresh": "파일 새로고침", "create.gui.schematicTable.open_folder": "폴더 열기", - "create.gui.schematicTable.title": "설계도 탁자", - "create.gui.schematicTable.availableSchematics": "사용 가능한 설계도", - "create.gui.schematicTable.noSchematics": "저장된 설계도가 없습니다", - "create.gui.schematicTable.uploading": "전송 중...", - "create.gui.schematicTable.finished": "전송 완료!", - "create.gui.schematicannon.title": "설계대포", + "create.gui.schematicTable.title": "청사진 테이블", + "create.gui.schematicTable.availableSchematics": "사용가능한 청사진", + "create.gui.schematicTable.noSchematics": "저장된 청사진 없음", + "create.gui.schematicTable.uploading": "업로딩 중...", + "create.gui.schematicTable.finished": "업로드 완료!", + "create.gui.schematicannon.title": "청사진 대포", "create.gui.schematicannon.listPrinter": "재료 목록 인쇄", - "create.gui.schematicannon.gunpowderLevel": "화약: %1$s%%", - "create.gui.schematicannon.shotsRemaining": "남은 발포 수: %1$s", - "create.gui.schematicannon.shotsRemainingWithBackup": "남은 화약을 포함한 발포 수: %1$s", - "create.gui.schematicannon.optionEnabled": "활성화되어 있습니다", - "create.gui.schematicannon.optionDisabled": "비활성화되어 있습니다", - "create.gui.schematicannon.showOptions": "설치 설정", - "create.gui.schematicannon.option.dontReplaceSolid": "고체 블록을 대체하지 않습니다", - "create.gui.schematicannon.option.replaceWithSolid": "고체 블록을 고체 블록으로 대체합니다", - "create.gui.schematicannon.option.replaceWithAny": "고체 블록을 아무 블록으로 대체합니다", - "create.gui.schematicannon.option.replaceWithEmpty": "고체 블록을 공기로 대체합니다", - "create.gui.schematicannon.option.skipMissing": "부족한 아이템은 건너뜁니다", - "create.gui.schematicannon.option.skipTileEntities": "정보 블록을 보호합니다", - "create.gui.schematicannon.slot.gunpowder": "여기에 화약을 넣으면 대포에 연료를 채울 수 있습니다", - "create.gui.schematicannon.slot.listPrinter": "여기에 책을 넣으면 재료 목록이 불러와 집니다", - "create.gui.schematicannon.slot.schematic": "여기에 설계도를 넣으면 대포가 설계도대로 블록을 발포합니다. 설계도는 특정한 위치에 배치되어 있어야 합니다.", - "create.gui.schematicannon.option.skipMissing.description": "대포가 배치에 필요한 블록을 찾을 수 없는 경우, 그 블록을 건너뛰고 다음 위치에 블록을 설치합니다.", - "create.gui.schematicannon.option.skipTileEntities.description": "대포가 상자 같은 정보를 가진 블록을 대체하지 않습니다.", - "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.gunpowderLevel": "화약 용량 %1$s%%", + "create.gui.schematicannon.shotsRemaining": "남은 발포 수 : %1$s", + "create.gui.schematicannon.shotsRemainingWithBackup": "화약 여분: %1$s", + "create.gui.schematicannon.optionEnabled": "현재 활성화 됨", + "create.gui.schematicannon.optionDisabled": "현재 비활성화 됨", + "create.gui.schematicannon.showOptions": "대포 설치 설정 열기", + "create.gui.schematicannon.option.dontReplaceSolid": "온전한 블록을 대체하지 않음", + "create.gui.schematicannon.option.replaceWithSolid": "온전한 블록을 재료로 대체함", + "create.gui.schematicannon.option.replaceWithAny": "온전한 블록을 아무 재료로 대체함", + "create.gui.schematicannon.option.replaceWithEmpty": "온전한 블록을 공기로 채움", + "create.gui.schematicannon.option.skipMissing": "부족한 블록을 무시하고 진행", + "create.gui.schematicannon.option.skipTileEntities": "타일 엔티티를 보호", + "create.gui.schematicannon.slot.gunpowder": "화약을 넣어 대포 연료를 채우세요", + "create.gui.schematicannon.slot.listPrinter": "책을 넣어 건축 재료 체크리스트를 인쇄하세요", + "create.gui.schematicannon.slot.schematic": "여기에 청사진을 넣으세요. 건설 구역이 설정되어 있어야 합니다.", + "create.gui.schematicannon.option.skipMissing.description": "만약 대포가 설치에 필요한 블록을 찾지 못할 경우,건너뛰고 다음 블록 설치를 진행합니다.", + "create.gui.schematicannon.option.skipTileEntities.description": "대포가 상세정보가 든 상자같은 타일 엔티티 설치를 무시합니다.", + "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.schematicannon.status.idle": "휴식 중", - "create.schematicannon.status.ready": "준비되었습니다", + "create.schematicannon.status.idle": "휴식", + "create.schematicannon.status.ready": "준비됨", "create.schematicannon.status.running": "작동 중", "create.schematicannon.status.finished": "완료", "create.schematicannon.status.paused": "일시 중지", - "create.schematicannon.status.stopped": "중단", - "create.schematicannon.status.noGunpowder": "화약이 부족합니다", - "create.schematicannon.status.targetNotLoaded": "목표가 불러와지지 않았습니다", - "create.schematicannon.status.targetOutsideRange": "목표가 너무 멀리 떨어져 있습니다", - "create.schematicannon.status.searching": "탐색 중", + "create.schematicannon.status.stopped": "중단됨", + "create.schematicannon.status.noGunpowder": "화약이 부족함", + "create.schematicannon.status.targetNotLoaded": "목표가 없음", + "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.schematicInvalid": "설계도가 잘못되었습니다", - "create.schematicannon.status.schematicNotPlaced": "설계도가 배치되지 않았습니다", - "create.schematicannon.status.schematicExpired": "설계도 파일이 누락되었습니다", + "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.gui.filter.deny_list": "금지", - "create.gui.filter.deny_list.description": "위의 아이템과 일치하지 않는 아이템만 통과됩니다. 위에 아무 아이템도 없다면 모든 아이템이 다 통과됩니다.", - "create.gui.filter.allow_list": "허가", - "create.gui.filter.allow_list.description": "위의 아이템과 일치하는 아이템만 통과됩니다. 위에 아무 아이템도 없다면 모든 아이템이 다 통과할 수 없게 됩니다.", - "create.gui.filter.respect_data": "정보 존중", - "create.gui.filter.respect_data.description": "아이템의 내구도나 마법 부여, 여려가지 특성이 일치하는 아이템만 위의 아이템과 일치하는 아이템으로 취급합니다.", - "create.gui.filter.ignore_data": "정보 무시", - "create.gui.filter.ignore_data.description": "아이템의 특성에 상관없이 같은 아이템이라면 위의 아이템과 일치하는 아이템으로 취급합니다.", + "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": "상세정보 일치", + "create.gui.filter.respect_data.description": "위 목록 아이템의 내구도, 마법부여, 그리고 다른 NBT와 일치할 때 통과시킵니다.", + "create.gui.filter.ignore_data": "상세정보 무시", + "create.gui.filter.ignore_data.description": "상세정보와 상관없이 아이템 종류만 일치한다면 통과시킵니다.", - "create.item_attributes.placeable": "설치할 수 있는", - "create.item_attributes.placeable.inverted": "설치할 수 없는", - "create.item_attributes.consumable": "먹을 수 있는", - "create.item_attributes.consumable.inverted": "먹을 수 없는", - "create.item_attributes.smeltable": "제련할 수 있는", - "create.item_attributes.smeltable.inverted": "제련할 수 없는", - "create.item_attributes.washable": "세척할 수 있는", - "create.item_attributes.washable.inverted": "세척할 수 없는", - "create.item_attributes.smokable": "훈연할 수 있는", - "create.item_attributes.smokable.inverted": "훈연할 수 없는", - "create.item_attributes.crushable": "분쇄할 수 있는", - "create.item_attributes.crushable.inverted": "분쇄할 수 없는", - "create.item_attributes.blastable": "용광로에 녹일 수 있는", - "create.item_attributes.blastable.inverted": "용광로에 녹일 수 없는", - "create.item_attributes.enchanted": "마법 부여가 되어있는", - "create.item_attributes.enchanted.inverted": "마법 부여가 되어있지 않은", - "create.item_attributes.damaged": "내구도가 닳은", - "create.item_attributes.damaged.inverted": "내구도가 닳지 않은", - "create.item_attributes.badly_damaged": "심하게 내구도가 닳은", - "create.item_attributes.badly_damaged.inverted": "심하게 내구도가 닳은", - "create.item_attributes.not_stackable": "겹쳐질 수 없는", - "create.item_attributes.not_stackable.inverted": "겹쳐질 수 있는", - "create.item_attributes.equipable": "장착할 수 있는", - "create.item_attributes.equipable.inverted": "장착할 수 없는", - "create.item_attributes.furnace_fuel": "화로의 연료로 사용할 수 있는", - "create.item_attributes.furnace_fuel.inverted": "화로의 연료로 사용할 수 없는", - "create.item_attributes.in_tag": "%1$s 태그가 있는", - "create.item_attributes.in_tag.inverted": "%1$s 태그가 없는", - "create.item_attributes.in_item_group": "'%1$s' 그룹에 속해 있는", - "create.item_attributes.in_item_group.inverted": "'%1$s' 그룹에 속해 있지 않은", - "create.item_attributes.added_by": "%1$s에 의해 추가된", - "create.item_attributes.added_by.inverted": "%1$s에 의해 추가되지 않은", - "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.has_enchant": "%1$s 마법이 부여된", - "create.item_attributes.has_enchant.inverted": "%1$s 마법이 부여되지 않은", - "create.item_attributes.color": "염색된 %1$s", - "create.item_attributes.color.inverted": "염색되지 않은 %1$s", - "create.item_attributes.max_enchanted": "마법 부여가 최고 등급인", - "create.item_attributes.max_enchanted.inverted": "마법 부여가 최고 등급이지 않은", - "create.item_attributes.has_fluid": "%1$s이(가) 담긴", - "create.item_attributes.has_fluid.inverted": "%1$s이(가) 담기지 않은", - "create.item_attributes.has_name": "사용자 지정 이름이 '%1$s'인", - "create.item_attributes.has_name.inverted": "사용자 지정 이름이 '%1$s'이지 않은", - "create.item_attributes.book_author": "%1$s이(가) 작성한", - "create.item_attributes.book_author.inverted": "%1$s이(가) 작성하지 않은", - "create.item_attributes.book_copy_original": "원본인", - "create.item_attributes.book_copy_original.inverted": "원본이지 않은", - "create.item_attributes.book_copy_first": "원본의 복사본인", - "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.placeable": "설치할 수 있음", + "create.item_attributes.placeable.inverted": "설치할 수 없음", + "create.item_attributes.consumable": "먹을 수 있음", + "create.item_attributes.consumable.inverted": "먹을 수 없음", + "create.item_attributes.smeltable": "구워질 수 있음", + "create.item_attributes.smeltable.inverted": "구워질 수 없음", + "create.item_attributes.washable": "세척될 수 있음", + "create.item_attributes.washable.inverted": "세척될 수 없음", + "create.item_attributes.smokable": "훈연될 수 있음", + "create.item_attributes.smokable.inverted": "훈연될 수 없음", + "create.item_attributes.crushable": "분쇄될 수 있음", + "create.item_attributes.crushable.inverted": "분쇄될 수 없음", + "create.item_attributes.blastable": "용광로에 녹일 수 있음", + "create.item_attributes.blastable.inverted": "용광로에 녹일 수 없음", + "create.item_attributes.enchanted": "마법부여됨", + "create.item_attributes.enchanted.inverted": "마법부여되지 않음", + "create.item_attributes.damaged": "내구도가 닮", + "create.item_attributes.damaged.inverted": "내구도가 닳지 않음", + "create.item_attributes.badly_damaged": "심각하게 내구도가 닮", + "create.item_attributes.badly_damaged.inverted": "심각하게 내구도가 닳지 않음", + "create.item_attributes.not_stackable": "겹쳐질 수 없음", + "create.item_attributes.not_stackable.inverted": "겹쳐질 수 있음", + "create.item_attributes.equipable": "장착할 수 있음", + "create.item_attributes.equipable.inverted": "장착할 수 없음", + "create.item_attributes.furnace_fuel": "화로 연료로 쓸 수 있음", + "create.item_attributes.furnace_fuel.inverted": "화로 연료로 쓸 수 없음", + "create.item_attributes.in_tag": "%1$s로 등록됨", + "create.item_attributes.in_tag.inverted": "%1$s로 등록되지 않음", + "create.item_attributes.in_item_group": "%1$s탭에 속함", + "create.item_attributes.in_item_group.inverted": "%1$s탭에 속함", + "create.item_attributes.added_by": "%1$s모드가 추가함", + "create.item_attributes.added_by.inverted": "%1$s모드가 추가하지 않음", + "create.item_attributes.shulker_level": "셜커가 %1$s있음", + "create.item_attributes.shulker_level.inverted": "셜커가 %1$s있지 않음", + "create.item_attributes.shulker_level.full": "가득 차", + "create.item_attributes.shulker_level.empty": "비어", + "create.item_attributes.shulker_level.partial": "조금 차", + "create.item_attributes.has_enchant": "%1$s 마법부여를 가지고 있음", + "create.item_attributes.has_enchant.inverted": "%1$s 마법부여를 가지고 있지 않음", + "create.item_attributes.color": "염색됨", + "create.item_attributes.color.inverted": "염색되지 않음", + "create.item_attributes.max_enchanted": "마법부여가 최고 레벨임", + "create.item_attributes.max_enchanted.inverted": "마법부여가 최고 레벨이 아님", + "create.item_attributes.has_fluid": "%1$s을(를) 담고 있음", + "create.item_attributes.has_fluid.inverted": "%1$s을(를) 담고 있지 않음", + "create.item_attributes.has_name": "%1$s이라는 이름을 갖고 있음", + "create.item_attributes.has_name.inverted": "%1$s이라는 이름을 갖고 있지 않음", + "create.item_attributes.book_author": "%1$s이(가) 작성함", + "create.item_attributes.book_author.inverted": "%1$s이(가) 작성하지 않음", + "create.item_attributes.book_copy_original": "원본임", + "create.item_attributes.book_copy_original.inverted": "원본이 아님", + "create.item_attributes.book_copy_first": "원본의 복사본임", + "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.astralsorcery_crystal": "%1$s 수정 속성을 가진", "create.item_attributes.astralsorcery_crystal.inverted": "%1$s 수정 속성을 가지고 있지 않은", "create.item_attributes.astralsorcery_constellation": "%1$s에 조율된", @@ -1099,1202 +1099,1202 @@ "create.item_attributes.astralsorcery_amulet": "%1$s이(가) 향상된", "create.item_attributes.astralsorcery_amulet.inverted": "%1$s이(가) 향상되지 않은", - "create.gui.attribute_filter.no_selected_attributes": "특성이 선택되지 않았습니다", - "create.gui.attribute_filter.selected_attributes": "특성 목록:", - "create.gui.attribute_filter.add_attribute": "선택한 특성을 목록에 추가", - "create.gui.attribute_filter.add_inverted_attribute": "선택한 특성에 반대되는 특성을 목록에 추가", - "create.gui.attribute_filter.allow_list_disjunctive": "허가 (아무)", - "create.gui.attribute_filter.allow_list_disjunctive.description": "목록에 나와 있는 특성이 하나라도 있는 아이템만 통과됩니다.", - "create.gui.attribute_filter.allow_list_conjunctive": "허가 (전부)", - "create.gui.attribute_filter.allow_list_conjunctive.description": "목록에 나와 있는 특성이 전부 있는 아이템만 통과됩니다.", - "create.gui.attribute_filter.deny_list": "금지", - "create.gui.attribute_filter.deny_list.description": "목록에 나와 있는 특성이 있지 않은 아이템만 통과됩니다.", - "create.gui.attribute_filter.add_reference_item": "참조할 아이템을 넣어주세요", + "create.gui.attribute_filter.no_selected_attributes": "속성이 선택되지 않음", + "create.gui.attribute_filter.selected_attributes": "선택된 속성:", + "create.gui.attribute_filter.add_attribute": "리스트에 속성을 추가합니다", + "create.gui.attribute_filter.add_inverted_attribute": "리스트에 반대 속성을 추가합니다.", + "create.gui.attribute_filter.allow_list_disjunctive": "화이트리스트 (최소)", + "create.gui.attribute_filter.allow_list_disjunctive.description": "아이템이 선택된 속성 중 하나라도 가지고 있다면 통과시킵니다.", + "create.gui.attribute_filter.allow_list_conjunctive": "화이트리스트 (모두)", + "create.gui.attribute_filter.allow_list_conjunctive.description": "아이템이 선택된 속성 모두를 가지고 있어야 통과시킵니다.", + "create.gui.attribute_filter.deny_list": "블랙리스트", + "create.gui.attribute_filter.deny_list.description": "아이템이 선택된 속성이 없다면 통과시킵니다.", + "create.gui.attribute_filter.add_reference_item": "참고할 아이템을 추가하기", - "create.tooltip.holdForDescription": "[%1$s]을(를) 누르면 설명을 확인합니다", - "create.tooltip.holdForControls": "[%1$s]을(를) 누르면 조작법을 확인합니다", + "create.tooltip.holdForDescription": "[%1$s]을 눌러 설명 보기", + "create.tooltip.holdForControls": "[%1$s]을 눌러 조작법 보기", "create.tooltip.keyShift": "Shift", "create.tooltip.keyCtrl": "Ctrl", - "create.tooltip.speedRequirement": "요구 속도: %1$s", + "create.tooltip.speedRequirement": "요구 회전속도: %1$s", "create.tooltip.speedRequirement.none": "없음", "create.tooltip.speedRequirement.medium": "보통", "create.tooltip.speedRequirement.high": "빠름", - "create.tooltip.stressImpact": "동적 부하 영향력: %1$s", + "create.tooltip.stressImpact": "피로도 부하: %1$s", "create.tooltip.stressImpact.low": "낮음", "create.tooltip.stressImpact.medium": "보통", "create.tooltip.stressImpact.high": "높음", "create.tooltip.stressImpact.overstressed": "과부하", - "create.tooltip.capacityProvided": "동적 부하 수용량: %1$s", - "create.tooltip.capacityProvided.low": "작음", + "create.tooltip.capacityProvided": "피로도 용량: %1$s", + "create.tooltip.capacityProvided.low": "적음", "create.tooltip.capacityProvided.medium": "보통", "create.tooltip.capacityProvided.high": "큼", - "create.tooltip.generationSpeed": "동력 생산: %1$s %2$s", - "create.tooltip.analogStrength": "전력: %1$s/15", + "create.tooltip.generationSpeed": "%1$s %2$s만큼 발전함", + "create.tooltip.analogStrength": "레드스톤 출력: %1$s/15", "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.stack_size": "발사하는 아이템의 수량", + "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.stack_size": "투척하는 아이템의 수량", "create.logistics.when_multiple_outputs_available": "여러 출력구가 있을 때", "create.mechanical_arm.selection_mode.round_robin": "돌아가며 처리", - "create.mechanical_arm.selection_mode.forced_round_robin": "강제적으로 돌아가며 처리", + "create.mechanical_arm.selection_mode.forced_round_robin": "돌아가며 처리(강제적)", "create.mechanical_arm.selection_mode.prefer_first": "설정 순서 우선시", "create.tunnel.selection_mode.split": "분할", - "create.tunnel.selection_mode.forced_split": "강제적으로 분할", - "create.tunnel.selection_mode.round_robin": "돌아가며 처리", - "create.tunnel.selection_mode.forced_round_robin": "강제적으로 돌아가며 처리", + "create.tunnel.selection_mode.forced_split": "분할(강제적)", + "create.tunnel.selection_mode.round_robin": "순서대로 처리", + "create.tunnel.selection_mode.forced_round_robin": "순서대로 처리(강제적)", "create.tunnel.selection_mode.prefer_nearest": "가장 가까운 곳", "create.tunnel.selection_mode.randomize": "무작위", "create.tunnel.selection_mode.synchronize": "입력 동기화", - "create.tooltip.chute.header": "도관 정보", + "create.tooltip.chute.header": "슈트 정보", "create.tooltip.chute.items_move_down": "아이템이 아래로 이동", "create.tooltip.chute.items_move_up": "아이템이 위로 이동", "create.tooltip.chute.no_fans_attached": "선풍기가 부착되지 않음", - "create.tooltip.chute.fans_push_up": "선풍기가 아래에서 밀어냄", - "create.tooltip.chute.fans_push_down": "선풍기가 위에서 밀어냄", - "create.tooltip.chute.fans_pull_up": "선풍기가 위에서 당겨냄", - "create.tooltip.chute.fans_pull_down": "선풍기가 아래에서 당겨냄", - "create.tooltip.chute.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.fans_push_up": "선풍기가 아래에서 밈", + "create.tooltip.chute.fans_push_down": "선풍기가 위에서 밈", + "create.tooltip.chute.fans_pull_up": "선풍기가 위에서 당김", + "create.tooltip.chute.fans_pull_down": "선풍기가 아래에서 당김", + "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.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": "연결 모드 활성화", + "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", - "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": "재료 슬롯", + "create.crafting_blueprint.filter_items_viable": "필터도 가능합니다", + "create.crafting_blueprint.display_slot": "전시 슬롯", + "create.crafting_blueprint.inferred": "실제 조합법과 같음", + "create.crafting_blueprint.manually_assigned": "직접 지정함", + "create.crafting_blueprint.secondary_display_slot": "두번째 전시 슬롯", + "create.crafting_blueprint.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 공격 피해", + "create.potato_cannon.ammo.reload_ticks": "%1$s 재장전 틱", + "create.potato_cannon.ammo.knockback": "%1$s 밀쳐내는 거리", - "create.hint.hose_pulley.title": "무한한 공급량", - "create.hint.hose_pulley": "액체를 무한하다고 간주합니다.", - "create.hint.mechanical_arm_no_targets.title": "목표가 없음", - "create.hint.mechanical_arm_no_targets": "이 기계식 팔은 대상이 설정되어 있지 않습니다. 기계식 팔을 손에 들고 벨트, 아이템 거치대, 퍼널 등에 오른쪽 버튼을(를) 누르면 목표가 설정됩니다.", - "create.hint.empty_bearing.title": "회전장치 갱신", - "create.hint.empty_bearing": "비어있는 손으로 오른쪽 버튼을(를) 누르면 앞에 있는 구조물이 회전합니다.", - "create.hint.full_deployer.title": "전개장치에 아이템이 가득 참", - "create.hint.full_deployer": "이 _전개장치_에 아이템이 가득 찼습니다. 호퍼나 퍼널, 다른 수단을 써 아이템을 빼내세요.", + "create.hint.hose_pulley.title": "무한 공급", + "create.hint.hose_pulley": "해당 액체는 _무한_으로 간주됩니다.", + "create.hint.mechanical_arm_no_targets.title": "목표 없음", + "create.hint.mechanical_arm_no_targets": "이 _기계 팔_은 _목표_가 설정되지 않았습니다. _기계 팔을 손에 들고_ 벨트, 아이템 거치대, 퍼널을 _우클릭_하여 목표로 지정하세요.", + "create.hint.empty_bearing.title": "베어링 업데이트", + "create.hint.empty_bearing": "_맨 손_으로 베어링을 _우클릭_하여 구조물을 _부착_하세요.", + "create.hint.full_deployer.title": "배포기 아이템 과적", + "create.hint.full_deployer": "이 _배포기_는 _배출_할 아이템을 가지고 있습니다. 호퍼 , 퍼널 등을 이용해 아이템을 빼내세요.", - "create.gui.config.overlay1": "안녕 :)", - "create.gui.config.overlay2": "이건 샘플 오버레이야.", - "create.gui.config.overlay3": "클릭하거나 드래그하면,", - "create.gui.config.overlay4": "이 미리 보기가 움직여.", - "create.gui.config.overlay5": "ESC를 누르면 이 화면에서 나가지고,", - "create.gui.config.overlay6": "변경된 위치가 저장될 거야.", - "create.gui.config.overlay7": "명령어 창에 /create overlay reset을 입력하면,", - "create.gui.config.overlay8": "오버레이가 기본 위치로 되돌아갈 거야.", + "create.gui.config.overlay1": "UNLOCALIZED: Hi :)", + "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", + "create.gui.config.overlay5": "UNLOCALIZED: Press ESC to exit this screen", + "create.gui.config.overlay6": "UNLOCALIZED: and save the new position", + "create.gui.config.overlay7": "UNLOCALIZED: Run /create overlay reset", + "create.gui.config.overlay8": "UNLOCALIZED: to reset to the default position", "create.command.killTPSCommand": "killtps", - "create.command.killTPSCommand.status.slowed_by.0": "[크리에이트]: 서버 틱이 현재 %s 밀리초만큼 느려졌습니다 :o", - "create.command.killTPSCommand.status.slowed_by.1": "[크리에이트]: 서버 틱이 지금 %s 밀리초만큼 느려졌습니다 >:)", - "create.command.killTPSCommand.status.slowed_by.2": "[크리에이트]: 서버 틱이 다시 정상 속도로 돌아왔습니다 :D", - "create.command.killTPSCommand.status.usage.0": "[크리에이트]: 사용법: /killtps stop 서버 틱 속도를 정상 속도로 되돌립니다", - "create.command.killTPSCommand.status.usage.1": "[크리에이트]: 사용법: /killtps start <틱 시간> 서버 틱 속도를 인위적으로 늦춥니다", - "create.command.killTPSCommand.argument.tickTime": "틱 시간", + "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": "이 수레에 붙은 장치가 너무 큽니다", - "create.contraption.minecart_contraption_illegal_pickup": "UNLOCALIZED: A mystical force is binding this Cart Contraption to the world", + "create.contraption.minecart_contraption_too_big": "이 수레 구조물은 들기에 너무 큽니다", + "create.contraption.minecart_contraption_illegal_pickup": "신비로운 힘이 이 수레 구조물을 세계에 묶어두고 있습니다", "_": "->------------------------] 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": "기계식 압착기가 무언가를 압착함", - "create.subtitle.fwoomp": "UNLOCALIZED: Potato Launcher fwoomps", - "create.subtitle.worldshaper_place": "UNLOCALIZED: Worldshaper zaps", - "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": "블레이즈 가열기가 무언가를 먹어 치움", - "create.subtitle.funnel_flap": "UNLOCALIZED: Funnel Flaps", - "create.subtitle.schematicannon_finish": "설계대포가 알림을 울림", - "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.cogs": "UNLOCALIZED: Cogwheels rumble", - "create.subtitle.slime_added": "철퍽거리는 소리", - "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.deployer_polish": "UNLOCALIZED: Deployer applies polish", - "create.subtitle.deny": "UNLOCALIZED: Declining boop", - "create.subtitle.controller_click": "UNLOCALIZED: Controller clicks", - "create.subtitle.schematicannon_launch_block": "설계대포가 무언가를 발포함", - "create.subtitle.copper_armor_equip": "UNLOCALIZED: Diving equipment clinks", - "create.subtitle.controller_take": "UNLOCALIZED: Lectern empties", - "create.subtitle.mechanical_press_activation": "기계식 압착기가 어딘가에 부딪히는 소리", - "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": "구조물이 멈춤", + "create.subtitle.peculiar_bell_use": "황동 종이 울림", + "create.subtitle.mixing": "섞는 소리", + "create.subtitle.mechanical_press_activation_belt": "압착기가 작동함", + "create.subtitle.fwoomp": "감자포를 쏨", + "create.subtitle.worldshaper_place": "세계편집기가 쏨", + "create.subtitle.crushing_1": "분쇄되는 소리", + "create.subtitle.depot_slide": "아이템이 미끄러짐", + "create.subtitle.saw_activate_stone": "톱이 작동함", + "create.subtitle.blaze_munch": "블레이즈 버너가 섭취함", + "create.subtitle.funnel_flap": "퍼널이 펄럭거림", + "create.subtitle.schematicannon_finish": "청사진 대포가 끝남", + "create.subtitle.haunted_bell_use": "귀신들린 종이 울림", + "create.subtitle.scroll_value": "스크롤 소리", + "create.subtitle.crafter_craft": "조합기가 조합함", + "create.subtitle.controller_put": "조작기를 놓음", + "create.subtitle.cranking": "크랭크가 돌아감", + "create.subtitle.wrench_remove": "장치가 부숴짐", + "create.subtitle.cogs": "톱니바퀴가 돌아감", + "create.subtitle.slime_added": "슬라임이 철퍽거림", + "create.subtitle.wrench_rotate": "렌치를 사용함", + "create.subtitle.potato_hit": "채소가 부딫힘", + "create.subtitle.saw_activate_wood": "톱이 작동함", + "create.subtitle.haunted_bell_convert": "종에 귀신이 들림", + "create.subtitle.deployer_polish": "배포기가 윤나게 함", + "create.subtitle.deny": "취소음", + "create.subtitle.controller_click": "조작기를 누름", + "create.subtitle.schematicannon_launch_block": "청사진 대포가 발사함", + "create.subtitle.copper_armor_equip": "잠수용 장비가 철커덕거림", + "create.subtitle.controller_take": "독서대가 비워짐", + "create.subtitle.mechanical_press_activation": "압착기가 작동함", + "create.subtitle.contraption_assemble": "구조물이 움직임", + "create.subtitle.crafter_click": "조합기가 작동함", + "create.subtitle.depot_plop": "아이템이 놓임", + "create.subtitle.confirm": "확인음", "_": "->------------------------] Item Descriptions [------------------------<-", - "item.create.example_item.tooltip": "예시 아이템 (그냥 설명만 확인하시면 됩니다)", - "item.create.example_item.tooltip.summary": "아이템에 대한 간단한 설명입니다. _밑줄_은 용어를 강조 표시합니다.", - "item.create.example_item.tooltip.condition1": "이것을 할 때", - "item.create.example_item.tooltip.behaviour1": "이것을 하면, 이 아이템이 이것을 수행합니다. (Shift을(를) 누르면 동작이 표시됩니다)", - "item.create.example_item.tooltip.condition2": "그리고, 이것을 할 때", - "item.create.example_item.tooltip.behaviour2": "원하는 만큼의 동작을 표시할 수 있습니다", - "item.create.example_item.tooltip.control1": "Ctrl을(를) 눌렀을 때", - "item.create.example_item.tooltip.action1": "이러한 조작법이 표시됩니다", + "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.condition1": "When this", + "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", + "item.create.example_item.tooltip.action1": "These controls are displayed.", "block.create.wooden_bracket.tooltip": "나무 지지대", - "block.create.wooden_bracket.tooltip.summary": "_축_과 _톱니바퀴_, _액체관_을 장식할 수 있는 나무로 만든 지지대입니다.", + "block.create.wooden_bracket.tooltip.summary": "나무를 이용해 _축, 톱니바퀴, 파이프_를 꾸며보세요.", "block.create.metal_bracket.tooltip": "금속 지지대", - "block.create.metal_bracket.tooltip.summary": "_축_과 _톱니바퀴_, _액체관_을 장식할 수 있는 견고한 공업용 지지대입니다.", + "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": "플레이어가 _좌석_에 앉습니다. L-shift을(를) 누르면 좌석에서 일어납니다.", + "block.create.seat.tooltip": "SEAT", + "block.create.seat.tooltip.summary": "앉아서 드라이브를 즐기세요! _움직이는 구조물_에 _플레이어_를 _고정_시킵니다. 가구용으로도 좋습니다! 다양한 색깔이 존재합니다.", + "block.create.seat.tooltip.condition1": "좌석에 우클릭", + "block.create.seat.tooltip.behaviour1": "플레이어가 좌석에 _앉습니다_. _왼쪽 쉬프트_를 눌러 좌석에서 _일어섭니다_.", "item.create.blaze_cake.tooltip": "블레이즈 케이크", - "item.create.blaze_cake.tooltip.summary": "열심히 일하는 _블레이즈 가열기_를 위한 맛있는 음식입니다. 화력 상승!", + "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": "SYMMETRY WAND", + "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.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": "HANDHELD WORLDSHAPER", + "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": "TREE FERTILIZER", + "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": "띠요오용! 사용자의 _범위_가 많이 늘어납니다.", - "item.create.extendo_grip.tooltip.condition1": "주로 사용하지 않는 손에 있을 때", - "item.create.extendo_grip.tooltip.behaviour1": "_주로 사용하는 손_에 있는 아이템의 범위가 증가합니다.", - "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": "EXTENDO GRIP", + "item.create.extendo_grip.tooltip.summary": "띠요오옹! 사용자의 _사거리_를 늘려줍니다.", + "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": "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": "POTATO CANNON", + "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": "FILTER", + "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.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": "ATTRIBUTE FILTER", + "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.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": "EMPTY SCHEMATIC", + "item.create.empty_schematic.tooltip.summary": "조합 재료로 쓰이거나 청사진 테이블에서 청사진을 불러올 때 쓰입니다.", - "item.create.schematic.tooltip": "설계도", - "item.create.schematic.tooltip.summary": "원하는 위치에 홀로그램을 배치하고, 설계대포를 사용하여 구조물을 건설할 수 있습니다.", - "item.create.schematic.tooltip.condition1": "들고 있을 때", - "item.create.schematic.tooltip.behaviour1": "설계도의 _위치_를 지정할 수 있습니다.", - "item.create.schematic.tooltip.control1": "웅크리고 오른쪽 버튼을 눌렀을 때", - "item.create.schematic.tooltip.action1": "정확한 좌표를 입력할 수 있는 _설정 창_이 열립니다.", + "item.create.schematic.tooltip": "SCHEMATIC", + "item.create.schematic.tooltip.summary": "세계에 구조물을 _홀로그램으로_ 불러와 지정하고 설치합니다. 지정된 홀로그램은 _청사진_ _대포_의 _작업_ _영역_이 됩니다.", + "item.create.schematic.tooltip.condition1": "들고 있을 떄", + "item.create.schematic.tooltip.behaviour1": "UI의 도구로 _변경/설치_ 할 수 있습니다.", + "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": "SCHEMATIC AND QUILL", + "item.create.schematic_and_quill.tooltip.summary": "세계에 있는 구조물을 _.nbt파일_로 저장할 때 쓰입니다.", "item.create.schematic_and_quill.tooltip.condition1": "1단계", - "item.create.schematic_and_quill.tooltip.behaviour1": "오른쪽 버튼을 눌러 구조물의 모서리를 지정합니다.", + "item.create.schematic_and_quill.tooltip.behaviour1": "_두_ _모서리_를 우클릭으로 선택하세요.", "item.create.schematic_and_quill.tooltip.condition2": "2단계", - "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": "_Scroll_를 이용하여 거리를 조정합니다.", + "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.behaviour1": "_설정 창_이 열립니다", + "block.create.schematicannon.tooltip": "SCHEMATICANNON", + "block.create.schematicannon.tooltip.summary": "장착된 청사진을 바탕으로 블록들을 _발포_합니다. _화약_을 연료로 사용하고 주변 보관함에서 아이템을 사용합니다.", + "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.condition1": "비어있는 설계도가 올려졌을 때", - "block.create.schematic_table.tooltip.behaviour1": "_선택한 설계도_를 비어있는 설계도로 전송할 수 있습니다.", + "block.create.schematic_table.tooltip": "SCHEMATIC TABLE", + "block.create.schematic_table.tooltip.summary": "_빈_ _청사진_에 저장된 청사진을 불러옵니다.", + "block.create.schematic_table.tooltip.condition1": "빈 청사진을 넣을 때", + "block.create.schematic_table.tooltip.behaviour1": "Schematics 폴더에서 선택한 파일을 업로드합니다.", - "item.create.goggles.tooltip": "안경", - "item.create.goggles.tooltip.summary": "_장치의 정보_를 두 눈으로 직접 확인할 수 있도록, 시야가 증강되게 만들어주는 유용한 안경입니다.", + "item.create.goggles.tooltip": "GOGGLES", + "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.behaviour1": "해당 장치의 _속도_, _피로도_, _용량_을 레벨에 따라 에 따라 색상 UI를 보여줍니다.", + "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": "렌치", + "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.nozzle.tooltip": "NOZZLE", + "block.create.nozzle.tooltip.summary": "덮힌 환풍기 _앞_에 붙여 환풍기의 효과를 _전방_으로 _확대_합니다.", - "block.create.cuckoo_clock.tooltip": "뻐꾸기시계", - "block.create.cuckoo_clock.tooltip.summary": "공간을 장식하고 _시간_을 알려주는 정교한 장치입니다.", - "block.create.cuckoo_clock.tooltip.condition1": "동력을 받았을 때", - "block.create.cuckoo_clock.tooltip.behaviour1": "_현재 시각_을 표시합니다. 정오와 플레이어가 잠을 잘 수 있게 되는 시각에 작동합니다.", + "block.create.cuckoo_clock.tooltip": "CUCKOO CLOCK", + "block.create.cuckoo_clock.tooltip.summary": "_시간의_ _흐름_을 알고 공간을 _꾸미는_ 데 좋은 공예품입니다.", + "block.create.cuckoo_clock.tooltip.condition1": "회전할 때", + "block.create.cuckoo_clock.tooltip.behaviour1": "현재 시각을 보여주고 하루에 두 번 울립니다. 점심과 플레이어가 바로 잘 수 있는 저녁에 울립니다.", - "block.create.turntable.tooltip": "회전대", - "block.create.turntable.tooltip.summary": "_회전력_을 받으면 회전합니다. 회전력을 받은 회전대 위에 올라서면 미묘한 멀미가 일어납니다.", + "block.create.turntable.tooltip": "TURNTABLE", + "block.create.turntable.tooltip.summary": "_동력_으로 _멀미_를 일으킵니다.", - "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": "stockpile_switch", + "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": "CONTENT OBSERVER", + "block.create.content_observer.tooltip.summary": "보관함이나 벨트의 아이템을 등록된 _필터_를 이용해 _탐지_합니다. _보관함, 벨트, 슈트_ 안에 해당 아이템을 탐지하는 동안, 레드스톤 신호를 보냅니다. _퍼널_가 해당 아이템을 수송하면, _1틱_의 레드스톤 신호를 보냅니다.", - "block.create.adjustable_crate.tooltip": "조절식 상자", - "block.create.adjustable_crate.tooltip.summary": "이 _아이템 저장소_는 용량을 수동으로 조절할 수 있습니다. 아이템을 최대 16묶음까지 넣을 수 있고, 레드스톤 비교기와 같이 사용할 수 있습니다.", - "block.create.adjustable_crate.tooltip.condition1": "오른쪽 버튼을 눌렀을 때", - "block.create.adjustable_crate.tooltip.behaviour1": "_설정 창_이 열립니다.", + "block.create.adjustable_crate.tooltip": "ADJUSTABLE CRATE", + "block.create.adjustable_crate.tooltip.summary": "이 보관함는 용량을 _직접_ _정할_ 수 있습니다. 아무아이템이나 최대 16스택씩 담을 수 있습니다. 레드스톤 비교기와 호환됩니다.", + "block.create.adjustable_crate.tooltip.condition1": "우클릭", + "block.create.adjustable_crate.tooltip.behaviour1": "설정 창을 엽니다.", - "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": "THE ENDLESS CRATE", + "block.create.creative_crate.tooltip.summary": "이 상자는 아무 아이템을 _무한히_ 저장합니다. 청사진 대포 옆에 놓을 시 준비물을 _전부_ 공급합니다.", + "block.create.creative_crate.tooltip.condition1": "필터에 아이템을 설정할 시", + "block.create.creative_crate.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": "CONTROLLER RAIL", + "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.condition1": "사용하는 방법", - "item.create.sand_paper.tooltip.behaviour1": "_손_에 아이템을 들고, _반대 손_에 사포를 든 상태로 오른쪽 버튼을 누르거나 떨어져 있는 아이템을 바라보고 오른쪽 버튼을 누르면 아이템을 갈아냅니다.", + "item.create.sand_paper.tooltip": "SAND PAPER", + "item.create.sand_paper.tooltip.summary": "재료들을 _윤내는 데_ 쓰이는 거친 종이입니다. 배포기가 자동으로 쓸 수 있습니다.", + "item.create.sand_paper.tooltip.condition1": "사용할 때", + "item.create.sand_paper.tooltip.behaviour1": "_다른 손_에있는 아이템과 _바닥에 있는 아이템_을 윤냅니다.", - "item.create.builders_tea.tooltip": "건축가의 차", - "item.create.builders_tea.tooltip.summary": "하루를 시작하기 위한 완벽한 차입니다. -_동기_와 _포만감_을 줍니다.", + "item.create.builders_tea.tooltip": "BUILDERS TEA", + "item.create.builders_tea.tooltip.summary": "하루를 시작하기에 좋은 음료입니다. _ 새로운 영감_을 줍니다.", - "item.create.refined_radiance.tooltip": "섬세한 섬광", - "item.create.refined_radiance.tooltip.summary": "_흡수의 빛_으로 제련된 혼돈의 혼합물입니다.", + "item.create.refined_radiance.tooltip": "REFINED RADIANCE", + "item.create.refined_radiance.tooltip.summary": "_흡수된_ _빛_으로 제련된 색채 혼합물입니다.", "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.shadow_steel.tooltip": "그림자 금속", - "item.create.shadow_steel.tooltip.summary": "_공허_에서 제련된 혼돈의 혼합물입니다.", + "item.create.shadow_steel.tooltip": "SHADOW STEEL", + "item.create.shadow_steel.tooltip.summary": "_공허_에서 제련된 색채 혼합물입니다.", "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.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": "LINKED CONTROLLER", + "item.create.linked_controller.tooltip.summary": "_여섯_ _버튼_으로 _레드스톤_ _링크_와 연결되는 _휴대용_ _조작기_입니다.", + "item.create.linked_controller.tooltip.condition1": "우클릭", + "item.create.linked_controller.tooltip.behaviour1": "조작기를 킵니다. 조작하면서 _움직일_ _수_ _없습니다_.", + "item.create.linked_controller.tooltip.condition2": "웅크리면서 우클릭", + "item.create.linked_controller.tooltip.behaviour2": "_설정_ _창_을 엽니다.", + "item.create.linked_controller.tooltip.condition3": "레드스톤 링크 수신기에 우클릭", + "item.create.linked_controller.tooltip.behaviour3": "_연결_ _모드_를 활성화하고, _여섯_ _버튼_ 중 하나를 눌러 조작기를 주파수와 연결합니다.", + "item.create.linked_controller.tooltip.condition4": "독서대에 우클릭", + "item.create.linked_controller.tooltip.behaviour4": "조작기를 독서대에 올려놓아 쉽게 조작할 수 있습니다. (웅크리면서 우클릭으로 회수헙니다.)", - "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": "DIVING HELMET", + "item.create.diving_helmet.tooltip.summary": "_구리_ _산소통_과 함께, 착용자가 물 속에서 _오랫동안_ _호흡_할 수 있게합니다.", + "item.create.diving_helmet.tooltip.condition1": "착용했을 때", + "item.create.diving_helmet.tooltip.behaviour1": "산소통에서 공기를 느리게 빨아들이며 _수중_ _호흡_ 효과를 제공합니다.", - "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": "COPPER BACKTANK", + "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.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": "DIVING BOOTS", + "item.create.diving_boots.tooltip.summary": "해저를 돌아다니기에 적합한 _무거운_ _부츠_ 한 켤레입니다.", + "item.create.diving_boots.tooltip.condition1": "착용했을 때", + "item.create.diving_boots.tooltip.behaviour1": "착용자는 빠르게 가라앉고 _수영_할 수 _없습니다_. 대신 물 속에서 _걷고_, _뛸_ 수 있습니다. 또한 _벨트_에 영향받지 않습니다.", - "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": "CRAFTING BLUEPRINT", + "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": "MINECART COUPLING", + "item.create.minecart_coupling.tooltip.summary": "당신의 모든 _수레들을 이어 _멋진 _기차_를 만들어보세요.", + "item.create.minecart_coupling.tooltip.condition1": "광산 수레에 사용할 때", + "item.create.minecart_coupling.tooltip.behaviour1": "_두 수레를 묶어_ 이동할 때 고정된 _거리를 유지하게_ 합니다.", - "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": "PECULIAR BELL", + "block.create.peculiar_bell.tooltip.summary": "장식을 위한 황동 종입니다. 영혼 불꽃 위에 설치하면 _기이한_ 일이 일어난다고 합니다...", - "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": "HAUNTED BELL", + "block.create.haunted_bell.tooltip.summary": "지옥의 길잃은 영혼들이 씌인 _저주받은_ 종입니다.", + "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": "알아보기 모드가 활성화되었습니다.\n해제하려면 [%1$s]을(를) 누르세요", - "create.ponder.associated": "관련된 아이템", + "create.ponder.hold_to_ponder": "[%1$s]키를 눌러 분석하기", + "create.ponder.subject": "분석의 주제", + "create.ponder.pondering": "분석 중입니다...", + "create.ponder.identify_mode": "탐색모드가 활성화되어 있습니다. [%1$s]를 눌러 중지합니다.", + "create.ponder.associated": "연관된 항록들", "create.ponder.close": "닫기", - "create.ponder.identify": "알아보기", + "create.ponder.identify": "탐색", "create.ponder.next": "다음 장면", "create.ponder.previous": "이전 장면", - "create.ponder.replay": "다시 보기", - "create.ponder.think_back": "되짚어보기", - "create.ponder.slow_text": "천천히 읽기", - "create.ponder.exit": "UNLOCALIZED: Exit", - "create.ponder.welcome": "UNLOCALIZED: Welcome to Ponder", - "create.ponder.categories": "UNLOCALIZED: Available Categories in Create", - "create.ponder.index_description": "UNLOCALIZED: Click one of the icons to learn about its associated Items and Blocks", - "create.ponder.index_title": "UNLOCALIZED: Ponder Index", - "create.ponder.shared.movement_anchors": "연결대나 강력 접착제의 도움으로 큰 구조물을 움직이게 만들 수 있습니다", - "create.ponder.shared.rpm32": "32 RPM / 분당 회전수", + "create.ponder.replay": "다시 재생", + "create.ponder.think_back": "되돌아가기", + "create.ponder.slow_text": "편하게 읽기", + "create.ponder.exit": "나가기", + "create.ponder.welcome": "분석 메뉴에 어서오세요", + "create.ponder.categories": "Create에서 둘러볼 수 있는 목록들", + "create.ponder.index_description": "아이콘을 클릭해 관련 아이템과 블록에 대해 알아볼 수 있습니다.", + "create.ponder.index_title": "분석 메뉴 제목", + "create.ponder.shared.movement_anchors": "섀시나 강력 접착제로 큰 구조물도 옮길 수 있습니다.", + "create.ponder.shared.rpm32": "32 RPM", "create.ponder.shared.sneak_and": "웅크리기 +", - "create.ponder.shared.storage_on_contraption": "장치에 저장소를 붙이면, 자동으로 떨어져 있는 아이템을 줍습니다", - "create.ponder.shared.behaviour_modify_wrench": "이러한 방식은 스패너를 사용하여 변경할 수 있습니다", - "create.ponder.shared.rpm8": "8 RPM / 분당 회전수", + "create.ponder.shared.storage_on_contraption": "구조물에 부착된 보관함은 구조물이 떨어뜨린 아이템을 자동으로 줍습니다.", + "create.ponder.shared.behaviour_modify_wrench": "이 기능은 렌치를 이용해 변경할 수 있습니다.", + "create.ponder.shared.rpm8": "8 RPM", "create.ponder.shared.ctrl_and": "Ctrl +", - "create.ponder.shared.rpm16_source": "근원: 16 RPM / 분당 회전수", - "create.ponder.shared.rpm16": "16 RPM / 분당 회전수", - "create.ponder.tag.kinetic_sources": "동적 근원", - "create.ponder.tag.kinetic_sources.description": "회전력을 만들어 내는 장치입니다.", - "create.ponder.tag.contraption_actor": "동작장치", - "create.ponder.tag.contraption_actor.description": "웅직이는 장치에 부착하면 특정한 행동을 보이는 장치입니다.", - "create.ponder.tag.arm_targets": "기계식 팔의 대상", - "create.ponder.tag.arm_targets.description": "기계식 팔의 입력구나 출력구로 선택할 수 있는 장치입니다.", - "create.ponder.tag.logistics": "아이템 이동", - "create.ponder.tag.logistics.description": "아이템을 옮기거나 옮기는 것을 도와주는 장치입니다.", - "create.ponder.tag.movement_anchor": "부착장치", - "create.ponder.tag.movement_anchor.description": "다양한 방법으로 구조물을 부착하여 움직이게 만드는 장치입니다.", + "create.ponder.shared.rpm16_source": "기본 속도: 16 RPM", + "create.ponder.shared.rpm16": "16 RPM", + "create.ponder.tag.kinetic_sources": "동력 생산", + "create.ponder.tag.kinetic_sources.description": "동력을 생산하는 장치입니다.", + "create.ponder.tag.contraption_actor": "구조물 장치", + "create.ponder.tag.contraption_actor.description": "움직이는 구조물에 부착되어 특정 기능을 수행하는 장치입니다.", + "create.ponder.tag.arm_targets": "기계 팔의 목표 대상", + "create.ponder.tag.arm_targets.description": "기계 팔이 가져가거나 놓을 곳으로 선택할 수 있는 부품입니다.", + "create.ponder.tag.logistics": "아이템 수송", + "create.ponder.tag.logistics.description": "아이템을 옮기는데 도움을 줄 부품입니다.", + "create.ponder.tag.movement_anchor": "이동 고정장치", + "create.ponder.tag.movement_anchor.description": "부착된 구조물을 다양한 방법으로 움직이게하는 장치입니다.", "create.ponder.tag.creative": "크리에이티브 모드", - "create.ponder.tag.creative.description": "일반적으로 서바이벌 모드에서는 이용할 수 없는 장치입니다.", - "create.ponder.tag.kinetic_relays": "동적 블록", - "create.ponder.tag.kinetic_relays.description": "회전력을 다른 방향으로 전달하는 장치입니다.", - "create.ponder.tag.windmill_sails": "날개 블록과 풍차 회전장치", - "create.ponder.tag.windmill_sails.description": "풍차에 이용할 수 있는 풍차의 힘을 결정하는 블록입니다. 이러한 블록들은 모두 동일한 효율을 냅니다.", - "create.ponder.tag.contraption_assembly": "블록 부착 아이템", - "create.ponder.tag.contraption_assembly.description": "구조물을 연결할 수 있는 도구, 장치입니다.", - "create.ponder.tag.decoration": "미적 블록", - "create.ponder.tag.decoration.description": "주로 장식용으로 이용되는 장치입니다.", - "create.ponder.tag.kinetic_appliances": "동적 기계장치", - "create.ponder.tag.kinetic_appliances.description": "회전력을 이용하는 장치입니다.", - "create.ponder.tag.redstone": "레드스톤 장치", - "create.ponder.tag.redstone.description": "레드스톤 공학에 이용할 수 있는 장치입니다.", - "create.ponder.tag.fluids": "액체 조종장치", - "create.ponder.tag.fluids.description": "액체를 전달하고 이용할 수 있는 장치입니다.", + "create.ponder.tag.creative.description": "서바이벌 모드에서는 얻을 수 없는 부품입니다.", + "create.ponder.tag.kinetic_relays": "동력 부품", + "create.ponder.tag.kinetic_relays.description": "동력을 다른 곳으로 연결할 때 도움을 주는 부품입니다.", + "create.ponder.tag.windmill_sails": "풍차 베어링의 날개", + "create.ponder.tag.windmill_sails.description": "조립되었을 때 풍차 구조물의 동력에 영향을 주는 블록들입니다. 이 블록들은 동일한 효율을 가집니다.", + "create.ponder.tag.contraption_assembly": "블록 부착 도구", + "create.ponder.tag.contraption_assembly.description": "블록들을 이어 구조물로 만들게해주는 도구와 부품입니다.", + "create.ponder.tag.decoration": "장식", + "create.ponder.tag.decoration.description": "주로 장식 용도로 쓰이는 부품입니다.", + "create.ponder.tag.kinetic_appliances": "동력 장치", + "create.ponder.tag.kinetic_appliances.description": "동력을 사용하는 장치입니다.", + "create.ponder.tag.redstone": "레드스톤 부품", + "create.ponder.tag.redstone.description": "레드스톤 공학에 쓰이는 부품입니다.", + "create.ponder.tag.fluids": "액체 조정", + "create.ponder.tag.fluids.description": "액체를 나르고 사용하는 장치입니다.", - "create.ponder.adjustable_pulse_repeater.header": "조절식 순간작동 중계기를 통한 신호 제어", - "create.ponder.adjustable_pulse_repeater.text_1": "조절식 순간작동 중계기는 지연 후에 짧은 신호를 내보냅니다", - "create.ponder.adjustable_pulse_repeater.text_2": "스크롤하여, 지연 시간을 설정할 수 있습니다", - "create.ponder.adjustable_pulse_repeater.text_3": "설정할 수 있는 최대 지연 시간은 30분입니다", + "create.ponder.adjustable_pulse_repeater.header": "가변 펄스 리피터를 이용해 신호 조절하기", + "create.ponder.adjustable_pulse_repeater.text_1": "가변 펄스 리피터는 딜레이 이후 짧은 신호를 보냅니다.", + "create.ponder.adjustable_pulse_repeater.text_2": "마우스 휠을 이용하여 딜레이를 조절합니다.", + "create.ponder.adjustable_pulse_repeater.text_3": "딜레이는 최대 30분까지 조절할 수 있습니다.", - "create.ponder.adjustable_repeater.header": "조절식 중계기를 통한 신호 제어", - "create.ponder.adjustable_repeater.text_1": "조절식 중계기는 일반적인 중계기와 비슷하게 작동합니다", - "create.ponder.adjustable_repeater.text_2": "지연 후에 신호를 내보내고...", - "create.ponder.adjustable_repeater.text_3": "...지연 시간만큼 신호가 남습니다", - "create.ponder.adjustable_repeater.text_4": "스크롤하여, 지연 시간을 설정할 수 있습니다", - "create.ponder.adjustable_repeater.text_5": "설정할 수 있는 최대 지연 시간은 30분입니다", + "create.ponder.adjustable_repeater.header": "가변 리피터를 이용해 신호 조절하기", + "create.ponder.adjustable_repeater.text_1": "가변 리피터는 기존 리피터와 비슷합니다.", + "create.ponder.adjustable_repeater.text_2": "정해진 딜레이만큼 신호를 주고...", + "create.ponder.adjustable_repeater.text_3": "...정해진 딜레이만큼 쉽니다.", + "create.ponder.adjustable_repeater.text_4": "마우스 휠을 이용해 딜레이를 조절합니다.", + "create.ponder.adjustable_repeater.text_5": "딜레이는 최대 30분까지 조절할 수 있습니다.", - "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_4": "나머지 아이템은 계속 수송됩니다", + "create.ponder.andesite_tunnel.header": "안산암 터널 사용하기", + "create.ponder.andesite_tunnel.text_1": "안산암 터널은 벨트를 덮는데 사용할 수 있습니다.", + "create.ponder.andesite_tunnel.text_2": "인신임 터널의 옆면에 접촉점이 있다면...", + "create.ponder.andesite_tunnel.text_3": "...터널은 통과하는 아이템 스택에서 1개의 아이템을 분리시킵니다.", + "create.ponder.andesite_tunnel.text_4": "나머지는 가던 길을 갑니다.", - "create.ponder.basin.header": "대야를 통한 아이템 처리", - "create.ponder.basin.text_1": "대야는 아이템과 액체를 저장하고 처리할 수 있습니다", - "create.ponder.basin.text_2": "처리되면, 대야는 대야의 측면 아래쪽에 처리된 아이템을 출력하려 합니다", - "create.ponder.basin.text_3": "아래에 출력 블록이 있다면, 대야에 출력 구멍이 나타납니다", - "create.ponder.basin.text_4": "다양한 블록들을 출력 블록으로 사용할 수 있습니다", - "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.header": "대야 안에서 아이템 처리하기", + "create.ponder.basin.text_1": "대야는 아이템과 액체를 담을 수 있습니다.", + "create.ponder.basin.text_2": "처리 이후, 대야는 옆면 아래로 결과물을 내보냅니다.", + "create.ponder.basin.text_3": "알맞는 부품이 있다면, 대야는 수송관을 나타냅니다.", + "create.ponder.basin.text_4": "다양한 부품들이 아이템을 받을 수 있습니다.", + "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.bearing_modes.header": "기계식 회전장치의 회전 방식", - "create.ponder.bearing_modes.text_1": "회전장치가 작동을 멈출 때마다 구조물이 가장 가까운 각도에서 블록으로 되돌아갑니다", - "create.ponder.bearing_modes.text_2": "초기 각도에 근접해 있는 경우에만 설치되어 있게 만들거나 절대 설치되어 있지 않게 만들도록 설정할 수 있습니다", + "create.ponder.bearing_modes.header": "베어링의 이동 설정", + "create.ponder.bearing_modes.text_1": "멈췄을 때, 베어링은 구조물을 가까운 수직 각도로 설치합니다.", + "create.ponder.bearing_modes.text_2": "이는 절대 설치하지 않거나, 시작한 지점에만 설치하도록 설정할 수 있습니다.", - "create.ponder.belt_casing.header": "틀을 씌운 벨트", - "create.ponder.belt_casing.text_1": "황동 틀이나 안산암 틀로 벨트를 장식할 수 있습니다", - "create.ponder.belt_casing.text_2": "스패너를 사용하면 틀을 해체할 수 있습니다", + "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_2": "웅크리고 오른쪽 버튼을 누르면 선택을 취소할 수 있습니다", - "create.ponder.belt_connector.text_3": "벨트 전체에는 추가적인 축을 설치할 수 있습니다", - "create.ponder.belt_connector.text_4": "벨트를 통해 연결된 축은 동일한 속도와 방향으로 회전합니다", - "create.ponder.belt_connector.text_5": "추가된 축은 스패너로 해체할 수 있습니다", - "create.ponder.belt_connector.text_6": "벨트는 염료로 염색할 수 있습니다", + "create.ponder.belt_connector.header": "벨트 사용하기", + "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_5": "추가된 축은 렌치로 없앨 수 있습니다.", + "create.ponder.belt_connector.text_6": "벨트를 염색하여 꾸밀 수 있습니다.", - "create.ponder.belt_directions.header": "벨트의 유효한 방향", - "create.ponder.belt_directions.text_1": "벨트는 아무 방향으로나 연결할 수 없습니다", - "create.ponder.belt_directions.text_2": "1. 수평으로 연결할 수 있습니다", - "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.header": "벨트 설치에 알맞는 방향", + "create.ponder.belt_directions.text_1": "벨트는 임의의 각도로 설치할 수 없습니다.", + "create.ponder.belt_directions.text_2": "1. 수평으로 연결할 수 있습니다.", + "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_transport.header": "벨트의 물류적 이용", - "create.ponder.belt_transport.text_1": "벨트가 이동하면 아이템과 기타 엔티티가 운송됩니다", - "create.ponder.belt_transport.text_2": "비어있는 손으로 오른쪽 버튼을 눌러 벨트에 있는 아이템을 가져갈 수 있습니다", + "create.ponder.belt_transport.header": "벨트를 이용한 수송", + "create.ponder.belt_transport.text_1": "움직이는 벨트는 아이템과 엔티티를 옮깁니다.", + "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.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.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_6": "붙어있는 벨트에 황동 터널을 설치하면 터널끼리 연결할 수 있습니다", - "create.ponder.brass_tunnel.text_7": "연결된 출력구는 들어오는 아이템을 분류합니다", - "create.ponder.brass_tunnel.text_8": "아이템을 분류하기 위해, 퍼널로 아이템을 직접 넣을 수도 있습니다", + "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_6": "벨트 위, 평행한 황동 터널끼리는 연결됩니다.", + "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.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.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.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_3": "UNLOCALIZED: If the Assembler is set to Lock Rotation, the contraptions' orientation will never change", + "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_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.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.chain_drive.header": "연쇄 전달기를 통한 회전력 전달", - "create.ponder.chain_drive.text_1": "연쇄 전달기는 일렬로만 연결될 수 있습니다", - "create.ponder.chain_drive.text_2": "연결된 모든 축은 동일한 방향, 동일한 속도로 회전합니다", - "create.ponder.chain_drive.text_3": "전달기는 90도 회전되어 있어도 연결될 수 있습니다", + "create.ponder.chain_drive.header": "체인 드라이브로 회전 전달하기", + "create.ponder.chain_drive.text_1": "체인 드라이브는 한 줄로 회전을 전달합니다.", + "create.ponder.chain_drive.text_2": "이렇게 연결된 모든 축들은 같은 방향으로 회전합니다.", + "create.ponder.chain_drive.text_3": "한 줄의 아무 부분을 90도 돌릴 수 있습니다.", - "create.ponder.chain_gearshift.header": "연쇄 변속기를 통한 회전 속도 제어", - "create.ponder.chain_gearshift.text_1": "신호를 받지 않은 연쇄 변속기는 연쇄 전달기와 똑같이 작동합니다", - "create.ponder.chain_gearshift.text_2": "신호를 받으면, 연결된 연쇄 전달기에 속도가 2배로 빨라집니다", - "create.ponder.chain_gearshift.text_3": "신호를 받은 연쇄 변속기가 근원에 없다면, 변속기의 속도가 절반으로 줄어듭니다", - "create.ponder.chain_gearshift.text_4": "두 경우 모두, 신호를 받은 연쇄 변속기보다 연결된 연쇄 전달기가 2배 더 빠른 속도로 회전됩니다", - "create.ponder.chain_gearshift.text_5": "조절식 레버를 사용하면, 1에서 2배 사이의 속도 배율을 더 정확하게 조절할 수 있습니다", - "create.ponder.chain_gearshift.text_6": "12 RPM / 분당 회전수", + "create.ponder.chain_gearshift.header": "벨트 변속기를 통해 회전 속도 조절하기", + "create.ponder.chain_gearshift.text_1": "신호를 받지 않은 벨트 변속기는 체인 드라이브와 똑같이 작동합니다.", + "create.ponder.chain_gearshift.text_2": "신호를 받으면, 다른 체인 드라이브에 전달되는 속도는 2배가 됩니다.", + "create.ponder.chain_gearshift.text_3": "반대로 벨트 변속기가 직접 회전을 받지 않고 있다면, 변속기의 속도는 절반이 됩니다.", + "create.ponder.chain_gearshift.text_4": "두 가지 경우에도, 같은 줄의 체인 드라이브의 속도는 변속기 속도의 2배가 됩니다.", + "create.ponder.chain_gearshift.text_5": "아날로그 레버를 사용하면, 속도 비율을 1 ~ 2배 사이로 맞출 수 있습니다.", + "create.ponder.chain_gearshift.text_6": "12 RPM", - "create.ponder.chute.header": "도관을 통한 아래 방향 아이템 이동", - "create.ponder.chute.text_1": "도관은 아이템을 수직으로 수송합니다", - "create.ponder.chute.text_2": "스패너를 사용하여, 도관에 창을 낼 수 있습니다", - "create.ponder.chute.text_3": "도관의 옆면에 도관을 설치하면 도관이 대각선으로 설치됩니다", + "create.ponder.chute.header": "슈트를 이용해 아이템을 아래로 옮기기", + "create.ponder.chute.text_1": "슈트는 보관함에 있는 아이템을 수직으로 옮길 수 있습니다.", + "create.ponder.chute.text_2": "렌치를 이용해 창문을 만들 수 있습니다.", + "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.header": "슈트를 이용해 아이템을 위로 옮기기", + "create.ponder.chute_upward.text_1": "선풍기를 위/아래에 설치하면, 슈트는 아이템을 위로 보낼 수 있습니다.", + "create.ponder.chute_upward.text_2": "엔지니어의 고글로 슈트를 관찰하여 이동 방향을 확인하세요.", + "create.ponder.chute_upward.text_3": "막힌 끝 부분에서 아이템은 옆에서 넣거나 빼내야합니다.", - "create.ponder.clockwork_bearing.header": "시계 회전장치를 통한 구조물 회전", - "create.ponder.clockwork_bearing.text_1": "시계 회전장치는 부착된 블록을 시계 바늘처럼 회전하게 만들 수 있습니다", - "create.ponder.clockwork_bearing.text_2": "회전력을 받으면 구조물이 시침처럼 현재 시각에 따라 회전합니다", + "create.ponder.clockwork_bearing.header": "시계 베어링을 이용한 구조물 움직이기", + "create.ponder.clockwork_bearing.text_1": "시계 베어링은 앞에 있는 블록을 부착시킵니다.", + "create.ponder.clockwork_bearing.text_2": "동력을 받으면, 현재 시간에 맞춰 구조물이 돌아갑니다.", "create.ponder.clockwork_bearing.text_3": "3:00", "create.ponder.clockwork_bearing.text_4": "4:00", - "create.ponder.clockwork_bearing.text_5": "회전장치를 오른쪽 버튼으로 누르면 구조물이 회전하거나 회전을 멈춥니다", - "create.ponder.clockwork_bearing.text_6": "시침 앞에는 두 번째 구조물을 추가할 수 있습니다", - "create.ponder.clockwork_bearing.text_7": "강력 접착제 등을 통해 두 구조물이 서로 부착되어 있지 않아야 합니다", - "create.ponder.clockwork_bearing.text_8": "이제, 두 번째 구조물이 분침처럼 회전합니다", + "create.ponder.clockwork_bearing.text_5": "베어링을 우클릭하여 구조물을 멈추거나 움직이세요.", + "create.ponder.clockwork_bearing.text_6": "시침 구조물 앞에 분침 구조물을 추가할 수 있습니다.", + "create.ponder.clockwork_bearing.text_7": "접착제나 슬라임볼로 두 구조물을 연결하지 마세요.", + "create.ponder.clockwork_bearing.text_8": "두번째 구조물은 분침처럼 돌아갑니다.", - "create.ponder.clutch.header": "단절기를 통한 회전력 제어", - "create.ponder.clutch.text_1": "단절기는 회전력을 다른 방향으로 전달하지 않습니다", - "create.ponder.clutch.text_2": "레드스톤 신호를 받으면, 연결이 끊어집니다", + "create.ponder.clutch.header": "클러치를 이용해 동력 조절하기", + "create.ponder.clutch.text_1": "클러치는 한 줄로 동력을 전달합니다.", + "create.ponder.clutch.text_2": "레드스톤 신호를 받으면, 동력 전달을 끊습니다.", - "create.ponder.cog_speedup.header": "톱니바퀴를 통한 변속", - "create.ponder.cog_speedup.text_1": "큰 톱니바퀴와 작은 톱니바퀴는 대각선으로 연결할 수 있습니다", - "create.ponder.cog_speedup.text_2": "큰 톱니바퀴에서 작은 톱니바퀴로 회전력이 전달되면 회전력이 2배로 빨라집니다", - "create.ponder.cog_speedup.text_3": "반대로 위치를 바꾸면, 전달되는 속도가 절반으로 줄어듭니다", + "create.ponder.cog_speedup.header": "톱니바퀴로 기어변속하기", + "create.ponder.cog_speedup.text_1": "큰 톱니바퀴와 작은 톱니바퀴는 대각선으로 연결됩니다.", + "create.ponder.cog_speedup.text_2": "큰 쪽에서 작은 쪽으로 가는 속도는 2배가 됩니다.", + "create.ponder.cog_speedup.text_3": "반대의 경우에는 속도가 절반이 됩니다.", - "create.ponder.cogwheel.header": "톱니바퀴를 통한 회전력 전달", - "create.ponder.cogwheel.text_1": "톱니바퀴는 가까이에 있는 다른 톱니바퀴에다 회전력을 전달합니다", - "create.ponder.cogwheel.text_2": "바로 옆에 연결된 톱니바퀴는 반대 방향으로 회전합니다", + "create.ponder.cogwheel.header": "톱니바퀴를 이용해 동력 전달하기", + "create.ponder.cogwheel.text_1": "톱니바퀴는 인접한 톱니바퀴에 동력을 전달합니다.", + "create.ponder.cogwheel.text_2": "이렇게 연결된 톱니바퀴 축은 반대방향으로 돌아갑니다.", - "create.ponder.creative_fluid_tank.header": "UNLOCALIZED: Creative Fluid Tanks", - "create.ponder.creative_fluid_tank.text_1": "UNLOCALIZED: Creative Fluid Tanks can be used to provide a bottomless supply of fluid", - "create.ponder.creative_fluid_tank.text_2": "UNLOCALIZED: Right-Click with a fluid containing item to configure it", - "create.ponder.creative_fluid_tank.text_3": "UNLOCALIZED: Pipe Networks can now endlessly draw the assigned fluid from the tank", - "create.ponder.creative_fluid_tank.text_4": "UNLOCALIZED: Any Fluids pushed back into a Creative Fluid Tank will be voided", + "create.ponder.creative_fluid_tank.header": "크리에이티브 탱크", + "create.ponder.creative_fluid_tank.text_1": "크리에이티브 탱크는 무한히 액체를 공급합니다.", + "create.ponder.creative_fluid_tank.text_2": "액체가 든 용기로 우클릭하여 액체를 채울 수 있습니다.", + "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": "모터 후면을 스크롤해서 모터의 RPM을 조절할 수 있습니다.", - "create.ponder.crushing_wheels.header": "분쇄용 바퀴를 통한 아이템 처리", - "create.ponder.crushing_wheels.text_1": "한 쌍의 분쇄용 바퀴는 매우 효과적으로 아이템을 갈아낼 수 있습니다", - "create.ponder.crushing_wheels.text_2": "분쇄용 바퀴가 작동되려면, 바퀴가 안쪽으로 회전해야 합니다", - "create.ponder.crushing_wheels.text_3": "아이템을 바퀴 위에 던지거나 입력하면 아이템이 처리됩니다", - "create.ponder.crushing_wheels.text_4": "이러한 장치로 아이템을 자동으로 처리할 수 있습니다", + "create.ponder.crushing_wheels.header": "분쇄 휠을 이용해 아이템 가공하기", + "create.ponder.crushing_wheels.text_1": "한 쌍의 분쇄 휠은 아이템을 매우 효과적으로 갈아버립니다.", + "create.ponder.crushing_wheels.text_2": "동력을 전달하여 서로 맞물리게 해야합니다.", + "create.ponder.crushing_wheels.text_3": "위에서 투입된 아이템은 가공되고, 아래로 떨어집니다.", + "create.ponder.crushing_wheels.text_4": "이 과정은 자동화 될 수 있습니다.", - "create.ponder.deployer.header": "전개장치의 이용", - "create.ponder.deployer.text_1": "전개장치는 회전력을 받으면, 플레이어의 상호작용을 따라 할 수 있습니다", - "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": "전개장치는 항상 2블록 앞의 위치에만 상호작용합니다", - "create.ponder.deployer.text_3": "바로 앞에 있는 블록이 직접적으로 상호작용을 방해하지는 않습니다", - "create.ponder.deployer.text_4": "전개장치는:", - "create.ponder.deployer.text_5": "블록을 설치하고,", - "create.ponder.deployer.text_6": "아이템을 사용하고,", - "create.ponder.deployer.text_7": "블록을 활성화하고,", - "create.ponder.deployer.text_8": "블록을 파괴하고,", - "create.ponder.deployer.text_9": "몬스터를 공격할 수 있습니다", + "create.ponder.deployer.header": "배포기 이용하기", + "create.ponder.deployer.text_1": "동력을 받으면, 배포기는 플레이어의 행동을 흉내냅니다.", + "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_3": "바로 앞에 블록이 있어도 상괸없습니다.", + "create.ponder.deployer.text_4": "배포기가 할 수 있는 것:", + "create.ponder.deployer.text_5": "블록 설치하기", + "create.ponder.deployer.text_6": "아이템 사용하기", + "create.ponder.deployer.text_7": "블록 활성화하기", + "create.ponder.deployer.text_8": "블록 수확하기", + "create.ponder.deployer.text_9": "몹 공격하기", - "create.ponder.deployer_contraption.header": "장치에서의 전개장치의 이용", - "create.ponder.deployer_contraption.text_1": "움직이는 장치에서 전개장치가 이동하면...", - "create.ponder.deployer_contraption.text_2": "전개장치는 장소마다 작동하며, 전개장치는 붙어있는 저장소의 아이템을 사용할 수 있습니다", - "create.ponder.deployer_contraption.text_3": "필터 슬롯을 사용하여 사용할 아이템을 지정할 수 있습니다", + "create.ponder.deployer_contraption.header": "구조물에서의 배포기", + "create.ponder.deployer_contraption.text_1": "배포기가 움직이는 구조물의 일부일 때,", + "create.ponder.deployer_contraption.text_2": "배포기는 움직일 때마다 작동하며, 구조물에 붙어있는 아무 보관함의 아이템을 사용합니다.", + "create.ponder.deployer_contraption.text_3": "필터를 이용해 어떤 아이템을 사용할 지 정할 수 있습니다.", - "create.ponder.deployer_modes.header": "전개장치의 방식", - "create.ponder.deployer_modes.text_1": "기본적으로, 전개장치는 오른쪽 버튼을 누르는 상호작용을 따라합니다", - "create.ponder.deployer_modes.text_2": "스패너를 사용하면, 왼쪽 버튼을 따라하도록 설정할 수 있습니다", + "create.ponder.deployer_modes.header": "배포기의 작동 방식", + "create.ponder.deployer_modes.text_1": "배포기는 기본적으로 우클릭을 흉내냅니다.", + "create.ponder.deployer_modes.text_2": "렌치를 이용해, 좌클릭을 흉내내도록 설정할 수 있습니다.", - "create.ponder.deployer_processing.header": "UNLOCALIZED: Processing Items using Deployers", - "create.ponder.deployer_processing.text_1": "UNLOCALIZED: With a fitting held item, Deployers can process items provided beneath them", - "create.ponder.deployer_processing.text_2": "UNLOCALIZED: The Input items can be dropped or placed on a Depot under the Deployer", - "create.ponder.deployer_processing.text_3": "UNLOCALIZED: When items are provided on a belt...", - "create.ponder.deployer_processing.text_4": "UNLOCALIZED: The Deployer will hold and process them automatically", + "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_redstone.header": "레드스톤을 통한 전개장치의 제어", - "create.ponder.deployer_redstone.text_1": "레드스톤 신호를 받으면, 전개장치가 작동되지 않습니다", - "create.ponder.deployer_redstone.text_2": "작동이 정지되기 전에, 전개장치는 모든 작동을 완료하고 정지됩니다", - "create.ponder.deployer_redstone.text_3": "따라서, 아주 짧은 시간 동안 신호를 차단하면 1번만 작동하게 만들 수 있습니다", + "create.ponder.deployer_redstone.header": "레드스톤과 배포기", + "create.ponder.deployer_redstone.text_1": "레드스톤 신호를 받으면, 배포기는 작동하지 않습니다.", + "create.ponder.deployer_redstone.text_2": "작동을 멈추기 전에, 배포기는 입력된 행동을 마무리합니다.", + "create.ponder.deployer_redstone.text_3": "따라서 부정 펄스는 한 번만 작동하게 합니다.", - "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.header": "아이템 거치대 사용하기", + "create.ponder.depot.text_1": "아이템 거치대는 고정된 벨트 역할입니다.", + "create.ponder.depot.text_2": "우클릭해서 아이템을 놓거나 가져갈 수 있습니다.", + "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_3": "이제 다양한 기계에서 사용할 수 있습니다", - "create.ponder.empty_blaze_burner.text_4": "부싯돌과 부시를 사용하여 비어있는 블레이즈 가열기에 불을 붙일 수도 있습니다", - "create.ponder.empty_blaze_burner.text_5": "UNLOCALIZED: The flame can be transformed using a soul-infused item", - "create.ponder.empty_blaze_burner.text_6": "하지만, 산업용으로 이용하기에는 적합하지 않습니다.", + "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_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": "UNLOCALIZED: Encasing Fluid Pipes", - "create.ponder.encased_fluid_pipe.text_1": "UNLOCALIZED: Copper Casing can be used to decorate Fluid Pipes", - "create.ponder.encased_fluid_pipe.text_2": "UNLOCALIZED: Aside from being conceiled, Encased Pipes are locked into their connectivity state", - "create.ponder.encased_fluid_pipe.text_3": "UNLOCALIZED: It will no longer react to any neighbouring blocks being added or removed", + "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_3": "이 파이프는 이제 나중에 추가된 블록에 영향받지 않습니다.", - "create.ponder.fan_direction.header": "공업용 선풍기의 바람", - "create.ponder.fan_direction.text_1": "공업용 선풍기는 회전력을 사용하여 바람을 일으킬 수 있습니다", - "create.ponder.fan_direction.text_2": "회전력에 따라 바람의 방향과 힘이 달라집니다", + "create.ponder.fan_direction.header": "선풍기의 공기흐름", + "create.ponder.fan_direction.text_1": "선풍기는 동력을 이용해 바람을 만들어냅니다.", + "create.ponder.fan_direction.text_2": "바람의 세기와 방향, 거리는 동력에 따라 달라집니다.", - "create.ponder.fan_processing.header": "선풍기를 통한 아이템 처리", - "create.ponder.fan_processing.text_1": "바람이 용암을 통과하면, 바람이 뜨거워집니다", - "create.ponder.fan_processing.text_2": "아이템에 뜨거운 바람을 쐬면 아이템이 제련됩니다", - "create.ponder.fan_processing.text_3": "음식 아이템에 뜨거운 바람을 쐬면 아이템이 소각됩니다", - "create.ponder.fan_processing.text_4": "대신에, 불을 사용하면 음식 아이템을 훈연할 수 있습니다", - "create.ponder.fan_processing.text_5": "바람이 물을 통과하면 바람으로 아이템을 세척할 수 있습니다", - "create.ponder.fan_processing.text_6": "세척은 제련, 훈연과 달리 새로운 처리를 할 수 있습니다", - "create.ponder.fan_processing.text_7": "선풍기의 속도는 처리 속도에 관여하지 않고 바람의 범위에만 영향을 줍니다", - "create.ponder.fan_processing.text_8": "또한, 선풍기는 아이템 거치대와 벨트에 놓인 아이템도 처리할 수 있습니다", + "create.ponder.fan_processing.header": "선풍기로 아이템 가공하기", + "create.ponder.fan_processing.text_1": "바람이 용암을 통과하면, 공기가 뜨거워집니다.", + "create.ponder.fan_processing.text_2": "바람이 지나가는 자리의 아이템은 구워집니다.", + "create.ponder.fan_processing.text_3": "음식은 불타 없어집니다.", + "create.ponder.fan_processing.text_4": "대신, 불을 이용하면 음식을 구울 수 있습니다.", + "create.ponder.fan_processing.text_5": "물을 통과하는 바람을 통해 세척할 수 있습니다.", + "create.ponder.fan_processing.text_6": "이를 통해 새로운 가공을 할 수 있습니다.", + "create.ponder.fan_processing.text_7": "선풍기의 속도는 가공 속도와 관련이 없습니다!", + "create.ponder.fan_processing.text_8": "선풍기 가공은 벨트나 아이템 거치대의 아이템에도 적용됩니다.", - "create.ponder.fan_source.header": "공업용 선풍기를 통한 회전력 생성", - "create.ponder.fan_source.text_1": "아래쪽에 있는 불이나 용암을 바라보고 있는 선풍기는 회전력을 생성할 수 있습니다", - "create.ponder.fan_source.text_2": "레드스톤 신호를 받으면, 선풍기가 회전력을 생성합니다", + "create.ponder.fan_source.header": "선풍기를 이용해 동력 생산하기", + "create.ponder.fan_source.text_1": "열원을 향한 선풍기는 동력을 제공할 수 있습니다.", + "create.ponder.fan_source.text_2": "레드스톤 신호를 받으면, 동력을 제공하기 시작합니다.", - "create.ponder.fluid_pipe_flow.header": "UNLOCALIZED: Moving Fluids using Copper Pipes", - "create.ponder.fluid_pipe_flow.text_1": "UNLOCALIZED: Fluid Pipes can connect two or more fluid sources and targets", - "create.ponder.fluid_pipe_flow.text_2": "UNLOCALIZED: Using a wrench, a straight pipe segment can be given a window", - "create.ponder.fluid_pipe_flow.text_3": "UNLOCALIZED: Windowed pipes will not connect to any other adjacent pipe segments", - "create.ponder.fluid_pipe_flow.text_4": "UNLOCALIZED: Powered by Mechanical Pumps, the Pipes can transport Fluids", - "create.ponder.fluid_pipe_flow.text_5": "UNLOCALIZED: No fluid is being extracted at first", - "create.ponder.fluid_pipe_flow.text_6": "UNLOCALIZED: Once the flow connects them, the endpoints gradually transfer their contents", - "create.ponder.fluid_pipe_flow.text_7": "UNLOCALIZED: Thus, the Pipe blocks themselves never 'physically' contain any fluid", + "create.ponder.fluid_pipe_flow.header": "파이프로 액체 옮기기", + "create.ponder.fluid_pipe_flow.text_1": "파이프는 한 종류의 액체만 옮길 수 있습니다.", + "create.ponder.fluid_pipe_flow.text_2": "렌치를 이용하여 직선 파이프에 창문을 달 수 있습니다.", + "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_7": "이렇기 때문에, 파이프는 실질적으로 아무런 액체도 담을 수 없습니다.", - "create.ponder.fluid_pipe_interaction.header": "UNLOCALIZED: Draining and Filling fluid containers", - "create.ponder.fluid_pipe_interaction.text_1": "UNLOCALIZED: Endpoints of a pipe network can interact with a variety of blocks", - "create.ponder.fluid_pipe_interaction.text_2": "UNLOCALIZED: Any block with fluid storage capabilities can be filled or drained", - "create.ponder.fluid_pipe_interaction.text_3": "UNLOCALIZED: Source blocks right in front of an open end can be picked up...", - "create.ponder.fluid_pipe_interaction.text_4": "UNLOCALIZED: ...while spilling into empty spaces can create fluid sources", - "create.ponder.fluid_pipe_interaction.text_5": "UNLOCALIZED: Pipes can also extract fluids from a handful of other blocks directly", + "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_5": "다양한 다른 블록에서도 액체를 뽑아낼 수도 있습니다.", - "create.ponder.fluid_tank_sizes.header": "UNLOCALIZED: Dimensions of a Fluid tank", - "create.ponder.fluid_tank_sizes.text_1": "UNLOCALIZED: Fluid Tanks can be combined to increase the total capacity", - "create.ponder.fluid_tank_sizes.text_2": "UNLOCALIZED: Their base square can be up to 3 blocks wide...", - "create.ponder.fluid_tank_sizes.text_3": "UNLOCALIZED: ...and grow in height by more than 30 additional layers", - "create.ponder.fluid_tank_sizes.text_4": "UNLOCALIZED: Using a Wrench, a tanks' window can be toggled", + "create.ponder.fluid_tank_sizes.header": "액체 탱크의 크기", + "create.ponder.fluid_tank_sizes.text_1": "액체 탱크는 여러개 연결하여 용량을 늘릴 수 있습니다.", + "create.ponder.fluid_tank_sizes.text_2": "밑면 너비는 3블록까지 늘릴 수 있습니다.", + "create.ponder.fluid_tank_sizes.text_3": "높이는 32블록까지 가능합니다.", + "create.ponder.fluid_tank_sizes.text_4": "렌치를 이용해 탱크의 창문을 닫을 수 있습니다.", - "create.ponder.fluid_tank_storage.header": "UNLOCALIZED: Storing Fluids in Fluid Tanks", - "create.ponder.fluid_tank_storage.text_1": "UNLOCALIZED: Fluid Tanks can be used to store large amounts of fluid", - "create.ponder.fluid_tank_storage.text_2": "UNLOCALIZED: Pipe networks can push and pull fluids from any side", - "create.ponder.fluid_tank_storage.text_3": "UNLOCALIZED: The contained fluid can be measured by a Comparator", - "create.ponder.fluid_tank_storage.text_4": "UNLOCALIZED: However, in Survival Mode Fluids cannot be added or taken manually", - "create.ponder.fluid_tank_storage.text_5": "UNLOCALIZED: You can use Basins, Item Drains and Spouts to drain or fill fluid containing items", + "create.ponder.fluid_tank_storage.header": "탱크에 액체 저장하기", + "create.ponder.fluid_tank_storage.text_1": "탱크는 많은 양의 액체를 저장합니다.", + "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.flywheel.header": "축 회전바퀴를 통한 회전력 생성", - "create.ponder.flywheel.text_1": "축 회전바퀴는 화로 원동기에서 회전력을 생성할 수 있습니다", - "create.ponder.flywheel.text_2": "매우 큰 부하 수용량을 가지고 있습니다", - "create.ponder.flywheel.text_3": "용광로를 사용하면 원동기의 효율이 2배로 증가합니다", + "create.ponder.flywheel.header": "플라이휠로 동력 생산하기", + "create.ponder.flywheel.text_1": "플라이휠로 동력을 생산하기 위해선, 화로 엔진이 필요합니다.", + "create.ponder.flywheel.text_2": "플라이휠은 피로도 용량이 매우 높습니다.", + "create.ponder.flywheel.text_3": "용광로를 사용하면 동력 속도가 2배가 됩니다.", - "create.ponder.funnel_compat.header": "퍼널의 호환성", - "create.ponder.funnel_compat.text_1": "퍼널은 여러 가지 블록과 원활하게 상호작용할 수 있습니다", - "create.ponder.funnel_compat.text_2": "톱", + "create.ponder.funnel_compat.header": "퍼널 호환성", + "create.ponder.funnel_compat.text_1": "퍼널는 다른 장치들 위에 설치할 수도 있습니다.", + "create.ponder.funnel_compat.text_2": "세로 톱", "create.ponder.funnel_compat.text_3": "아이템 거치대", - "create.ponder.funnel_compat.text_4": "흡수통", + "create.ponder.funnel_compat.text_4": "아이템 배수구", - "create.ponder.funnel_direction.header": "이동 방향", - "create.ponder.funnel_direction.text_1": "일반적으로 설치하면, 퍼널이 저장소에서 아이템을 꺼냅니다", - "create.ponder.funnel_direction.text_2": "웅크리고 설치하면, 퍼널이 저장소에 아이템을 넣습니다", - "create.ponder.funnel_direction.text_3": "스패너를 사용하면, 설치된 퍼널의 방향이 변경됩니다", - "create.ponder.funnel_direction.text_4": "대부분의 방향에도 동일한 규칙이 적용됩니다", - "create.ponder.funnel_direction.text_5": "벨트 위에 설치된 퍼널은 이동 방향에 따라 아이템이 입력/출력됩니다", + "create.ponder.funnel_direction.header": "수송 방향", + "create.ponder.funnel_direction.text_1": "설치하면, 보관함에서 아이템을 빼냅니다.", + "create.ponder.funnel_direction.text_2": "웅크리면서 설치하면, 아이템을 가져갑니다.", + "create.ponder.funnel_direction.text_3": "렌치를 이용해 설치 이후에도 설정을 변경할 수 있습니다.", + "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.header": "퍼널 사용하기", + "create.ponder.funnel_intro.text_1": "퍼널는 보관함에서 아이템을 옮기거나 빼낼 때 유용합니다.", - "create.ponder.funnel_redstone.header": "레드스톤 제어", - "create.ponder.funnel_redstone.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_2": "이러한 용도로는 도관이나 지능형 도관이 더 적합할 수 있습니다", - "create.ponder.funnel_transfer.text_3": "수평 이동은 퍼널이 더 적합합니다", + "create.ponder.funnel_transfer.header": "직접 수송", + "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.text_2": "매우 큰 부하 수용량을 가지고 있습니다", - "create.ponder.furnace_engine.text_3": "용광로를 사용하면 원동기의 효율이 2배로 증가합니다", + "create.ponder.furnace_engine.header": "화로 엔진을 이용해 동력 생산하기", + "create.ponder.furnace_engine.text_1": "화로 엔진은 부착된 화로가 타오를 때 동력을 생산합니다.", + "create.ponder.furnace_engine.text_2": "제공되는 피로도 용량이 매우 높습니다.", + "create.ponder.furnace_engine.text_3": "용광로를 사용하면 동력 속도가 2배가 됩니다.", - "create.ponder.gantry_carriage.header": "다리 운반대의 이용", - "create.ponder.gantry_carriage.text_1": "다리 운반대는 다리 축에서 움직일 수 있습니다", - "create.ponder.gantry_carriage.text_2": "다리 운반대는 부착된 블록을 움직이게 만들 수 있습니다", + "create.ponder.gantry_carriage.header": "갠트리 운반대 사용하기", + "create.ponder.gantry_carriage.text_1": "갠트리 운반대는 갠트리 축 위에서 움직일 수 있습니다.", + "create.ponder.gantry_carriage.text_2": "갠트리 장치는 부착된 블록들을 움직일 수 있습니다.", - "create.ponder.gantry_cascaded.header": "계단식 다리", - "create.ponder.gantry_cascaded.text_1": "다리 축은 강력 접착제 없이도 운반대에 부착할 수 있습니다", - "create.ponder.gantry_cascaded.text_2": "움직이고 있는 다리 축에 설치된 운반대도 마찬가지입니다", - "create.ponder.gantry_cascaded.text_3": "따라서, 다리는 여러 이동 축을 제어할 수 있는 계단식으로 만들 수 있습니다", + "create.ponder.gantry_cascaded.header": "계단식 갠트리", + "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_4": "전달되는 회전력에도 동일한 규칙이 적용됩니다", + "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_4": "운반대 축의 회전에도 적용됩니다.", - "create.ponder.gantry_redstone.header": "레드스톤을 통한 다리의 제어", - "create.ponder.gantry_redstone.text_1": "레드스톤 신호를 받으면, 다리에 있는 운반대가 움직이지 않습니다", - "create.ponder.gantry_redstone.text_2": "대신에, 회전력이 운반대의 출력축으로 전달됩니다", + "create.ponder.gantry_redstone.header": "갠트리 동력 전달", + "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.header": "갠트리 축 사용하기", + "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.header": "기어박스를 이용해 동력 전달하기", + "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": "전환기는 회전력을 다른 방향으로 전달하지 않습니다", - "create.ponder.gearshift.text_2": "레드스톤 신호를 받으면, 축을 반대로 돌립니다", + "create.ponder.gearshift.header": "기어쉬프트를 이용해 동력 조절하기", + "create.ponder.gearshift.text_1": "기어쉬프트는 한 줄로 동력을 전달합니다.", + "create.ponder.gearshift.text_2": "레드스톤 신호를 받으면, 회전을 반전시킵니다.", - "create.ponder.hand_crank.header": "자가발전용 손잡이를 통한 회전력 생성", - "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.header": "핸드 크랭크로 동력 생산하기", + "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.hose_pulley.header": "UNLOCALIZED: Source Filling and Draining using Hose Pulleys", - "create.ponder.hose_pulley.text_1": "UNLOCALIZED: Hose Pulleys can be used to fill or drain large bodies of Fluid", - "create.ponder.hose_pulley.text_2": "UNLOCALIZED: With the Kinetic Input, the height of the pulleys' hose can be controlled", - "create.ponder.hose_pulley.text_3": "UNLOCALIZED: The Pulley retracts while the input rotation is inverted", - "create.ponder.hose_pulley.text_4": "UNLOCALIZED: On the opposite side, pipes can be connected", - "create.ponder.hose_pulley.text_5": "UNLOCALIZED: Attached pipe networks can either provide fluid to the hose...", - "create.ponder.hose_pulley.text_6": "UNLOCALIZED: ...or pull from it, draining the pool instead", - "create.ponder.hose_pulley.text_7": "UNLOCALIZED: Fill and Drain speed of the pulley depends entirely on the fluid networks' throughput", + "create.ponder.hose_pulley.header": "호스 도르래로 액체 채우고 비우기", + "create.ponder.hose_pulley.text_1": "호스 도르래는 많은 양의 액체를 채우거나 비울 수 있습니다.", + "create.ponder.hose_pulley.text_2": "동력을 전달하여 호스의 높이를 정합니다.", + "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_7": "호스의 채우거나 비우는 속도는 펌프 속도에 기반합니다.", - "create.ponder.hose_pulley_infinite.header": "UNLOCALIZED: Passively Filling and Draining large bodies of Fluid", - "create.ponder.hose_pulley_infinite.text_1": "UNLOCALIZED: When deploying the Hose Pulley into a large enough ocean...", - "create.ponder.hose_pulley_infinite.text_2": "UNLOCALIZED: It will provide/dispose fluids without affecting the source", - "create.ponder.hose_pulley_infinite.text_3": "UNLOCALIZED: Pipe networks can limitlessly take fluids from/to such pulleys", + "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": "UNLOCALIZED: Fill and Drain level of Hose Pulleys", - "create.ponder.hose_pulley_level.text_1": "UNLOCALIZED: While fully retracted, the Hose Pulley cannot operate", - "create.ponder.hose_pulley_level.text_2": "UNLOCALIZED: Draining runs from top to bottom", - "create.ponder.hose_pulley_level.text_3": "UNLOCALIZED: The surface level will end up just below where the hose ends", - "create.ponder.hose_pulley_level.text_4": "UNLOCALIZED: Filling runs from bottom to top", - "create.ponder.hose_pulley_level.text_5": "UNLOCALIZED: The filled pool will not grow beyond the layer above the hose end", + "create.ponder.hose_pulley_level.header": "호스 도르래의 채우고 비우는 기준", + "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": "맨 아래부터 채웁니다.", + "create.ponder.hose_pulley_level.text_5": "호스 끝부분 위는 채우지 않습니다.", - "create.ponder.item_drain.header": "UNLOCALIZED: Emptying Fluid Containers using Item Drains", - "create.ponder.item_drain.text_1": "UNLOCALIZED: Item Drains can extract fluids from items", - "create.ponder.item_drain.text_2": "UNLOCALIZED: Right-click it to pour fluids from your held item into it", - "create.ponder.item_drain.text_3": "UNLOCALIZED: When items are inserted from the side...", - "create.ponder.item_drain.text_4": "UNLOCALIZED: ...they roll across, emptying out their contained fluid", - "create.ponder.item_drain.text_5": "UNLOCALIZED: Pipe Networks can now pull the fluid from the drains' internal buffer", + "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.large_cogwheel.header": "큰 톱니바퀴를 통한 회전력 전달", - "create.ponder.large_cogwheel.text_1": "큰 톱니바퀴는 직각으로 연결할 수 있습니다", - "create.ponder.large_cogwheel.text_2": "회전력을 다른 방향의 축으로 전달할 수 있습니다", + "create.ponder.large_cogwheel.header": "큰 톱니바퀴로 동력 전달하기", + "create.ponder.large_cogwheel.text_1": "큰 톱니바퀴는 수직으로 서로 맞물릴 수 있습니다.", + "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_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.header": "직선 섀시를 이용해 블록 붙이기", + "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_group.header": "선형 연결대의 집단 이동", - "create.ponder.linear_chassis_group.text_1": "선형 연결대는 옆에 있는 동일한 연결대 블록과 연결됩니다", - "create.ponder.linear_chassis_group.text_2": "장치에 의해 움직이면, 같이 이동됩니다", - "create.ponder.linear_chassis_group.text_3": "종류가 다르거나 다른 방향을 바라보는 연결대는 연결되지 않습니다", + "create.ponder.linear_chassis_group.header": "여러 직선 섀시 움직이기", + "create.ponder.linear_chassis_group.text_1": "직선 섀시는 다른 직선 섀시와 연결될 수 있습니다.", + "create.ponder.linear_chassis_group.text_2": "하나가 움직이면, 다른 섀시도 같이 움직입니다.", + "create.ponder.linear_chassis_group.text_3": "다른 종류의 섀시, 다른 면을 바라보는 섀시는 붙지 않습니다.", - "create.ponder.mechanical_arm.header": "기계식 팔의 설정", - "create.ponder.mechanical_arm.text_1": "기계식 팔은 설치하기 전에, 입력구와 출력구를 지정해야 합니다", - "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_8": "퍼널이나 아이템 거치대로 이러한 문제를 어느 정도 해결할 수 있습니다", + "create.ponder.mechanical_arm.header": "기계 팔 설치하기", + "create.ponder.mechanical_arm.text_1": "기계 팔은 설치되기 전, 입력부와 출력부를 지정해야 합니다.", + "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_8": "퍼널와 아이템 거치대가 이런 문제를 해결할 수 있습니다.", - "create.ponder.mechanical_arm_filtering.header": "기계식 팔의 출력 필터", - "create.ponder.mechanical_arm_filtering.text_1": "입력구", - "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_6": "기계식 팔은 필요한 양만큼 아이템을 가져올 수 있습니다", + "create.ponder.mechanical_arm_filtering.header": "기계 팔 필터링", + "create.ponder.mechanical_arm_filtering.text_1": "입력부", + "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_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_5": "스패너를 들고 스크롤하면 팔을 설정할 수 있습니다", - "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.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_5": "렌치로 스크롤하여 어떻게 분배할지 설정하세요.", + "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_redstone.header": "레드스톤을 통한 기계식 팔의 제어", - "create.ponder.mechanical_arm_redstone.text_1": "레드스톤 신호를 받으면, 기계식 팔이 작동되지 않습니다", - "create.ponder.mechanical_arm_redstone.text_2": "작동이 정지되기 전에, 기계식 팔은 모든 작동을 완료하고 정지됩니다", - "create.ponder.mechanical_arm_redstone.text_3": "따라서, 아주 짧은 시간 동안 신호를 차단하면 1번만 작동하게 만들 수 있습니다", + "create.ponder.mechanical_arm_redstone.header": "기계 팔과 레드스톤", + "create.ponder.mechanical_arm_redstone.text_1": "레드스톤 신호를 받으면, 기계 팔은 작동을 멈춥니다.", + "create.ponder.mechanical_arm_redstone.text_2": "작동을 멈추기 전에, 기계 팔은 입력된 행동을 마무리합니다.", + "create.ponder.mechanical_arm_redstone.text_3": "따라서 부정 펄스는 한 번만 작동하게 합니다.", - "create.ponder.mechanical_bearing.header": "기계식 회전장치를 통한 구조물 회전", - "create.ponder.mechanical_bearing.text_1": "기계식 회전장치는 부착된 블록을 회전하게 만들 수 있습니다", - "create.ponder.mechanical_bearing.text_2": "회전력을 받으면, 장치가 회전합니다", + "create.ponder.mechanical_bearing.header": "베어링으로 구조물 옮기기", + "create.ponder.mechanical_bearing.text_1": "베어링은 앞에 있는 블록을 부착시킵니다.", + "create.ponder.mechanical_bearing.text_2": "동력을 받으면, 블록들은 회전하는 구조물로 변합니다.", - "create.ponder.mechanical_crafter.header": "기계식 제작기의 설정", - "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_5": "기계식 제작기가 작동하려면 회전력이 필요합니다", - "create.ponder.mechanical_crafter.text_6": "오른쪽 버튼을 누르면 아이템을 수동으로 넣을 수 있습니다", - "create.ponder.mechanical_crafter.text_7": "경로의 모든 슬롯에 아이템이 들어가면 제작이 시작됩니다", - "create.ponder.mechanical_crafter.text_8": "모든 슬롯에 아이템이 들어가지 않는 제작법의 경우 레드스톤 신호를 사용하여 강제로 제작할 수 있습니다", + "create.ponder.mechanical_crafter.header": "기계식 조합기 설치하기", + "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_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.text_1": "제작기에는 아이템을 자동으로 넣을 수 있습니다", - "create.ponder.mechanical_crafter_connect.text_2": "제작기의 뒤에 스패너를 사용하여 입력을 결합할 수 있습니다", - "create.ponder.mechanical_crafter_connect.text_3": "결합된 모든 제작기는 동일한 입력 위치에서 아이템이 입력될 수 있습니다", + "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.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_drill.header": "기계식 드릴을 통한 블록 파괴", - "create.ponder.mechanical_drill.text_1": "회전력을 받으면, 기계식 드릴은 앞에 있는 블록을 파괴합니다", - "create.ponder.mechanical_drill.text_2": "채굴 속도는 회전력에 따라 달라집니다", + "create.ponder.mechanical_drill.header": "드릴을 이용해 블록 부수기", + "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.header": "구조물에서의 드릴", + "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_2": "수확기가 다 자란 작물을 수확하고 다시 심습니다", + "create.ponder.mechanical_harvester.header": "구조물에서의 수확기", + "create.ponder.mechanical_harvester.text_1": "수확기가 움직이는 구조물의 일부일 때,", + "create.ponder.mechanical_harvester.text_2": "지나가는 길에 있는 작물을 수확하고, 성장 수치를 초기화합니다.", - "create.ponder.mechanical_mixer.header": "기계식 믹서기를 통한 아이템 처리", - "create.ponder.mechanical_mixer.text_1": "믹서기와 대야를 사용하면 일부 제작법과 맞는 아이템을 자동으로 제작할 수 있습니다", - "create.ponder.mechanical_mixer.text_2": "특정한 배치를 가지고 있지 않은 제작법과 몇 가지의 추가적인 제작법을 사용할 수 있습니다", - "create.ponder.mechanical_mixer.text_3": "그 제작법 중 일부는 블레이즈 가열기의 열기가 필요할 수 있습니다", - "create.ponder.mechanical_mixer.text_4": "두 가지의 제작법이 중복되는 경우 필터 슬롯을 사용하여 해결할 수 있습니다", + "create.ponder.mechanical_mixer.header": "믹서로 아이템 가공하기", + "create.ponder.mechanical_mixer.text_1": "믹서와 대야를 이용해 몇몇 조합을 자동화할 수 있습니다.", + "create.ponder.mechanical_mixer.text_2": "가능한 조합법은 어느 무형 조합법이나 가능하며, 모드에서 추가된 조합법도 있습니다.", + "create.ponder.mechanical_mixer.text_3": "몇몇 조합법은 블레이즈 버너의 열을 요구합니다.", + "create.ponder.mechanical_mixer.text_4": "필터 슬롯을 이용해 조합법이 겹치는 것을 방지할 수 있습니다.", - "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.header": "기계식 피스톤으로 구조물 옮기기", + "create.ponder.mechanical_piston.text_1": "기계식 피스톤은 블록들을 앞으로 움직일 수 있습니다.", + "create.ponder.mechanical_piston.text_2": "속도와 방향은 들어오는 동력에 기반합니다.", + "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_2": "초기 위치에 있는 경우에만 설치되어 있게 만들거나 절대 설치되어 있지 않게 만들도록 설정할 수 있습니다", + "create.ponder.mechanical_piston_modes.header": "기계식 피스톤의 이동 설정", + "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_3": "게다가, 경작기는 땅을 경작할 수 있습니다", - "create.ponder.mechanical_plough.text_4": "엔티티에게 피해를 주지 않으면서, 엔티티를 밀어낼 수 있습니다", + "create.ponder.mechanical_plough.header": "구조물에서의 쟁기", + "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_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_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_4": "압착기가 알아서 아이템 이동을 멈추고 가공합니다.", - "create.ponder.mechanical_press_compacting.header": "기계식 압착기를 통한 아이템 압축", - "create.ponder.mechanical_press_compacting.text_1": "대야에 있는 아이템을 압착하면 아이템이 압축됩니다", - "create.ponder.mechanical_press_compacting.text_2": "같은 아이템을 2x2이나 3x3으로 사용하는 제작법과 몇 가지의 추가적인 제작법을 사용할 수 있습니다", - "create.ponder.mechanical_press_compacting.text_3": "그 제작법 중 일부는 블레이즈 가열기의 열기가 필요할 수 있습니다", - "create.ponder.mechanical_press_compacting.text_4": "두 가지의 제작법이 중복되는 경우 필터 슬롯을 사용하여 해결할 수 있습니다", + "create.ponder.mechanical_press_compacting.header": "압착기로 아이템 압축하기", + "create.ponder.mechanical_press_compacting.text_1": "대야와 함께 사용해서 아이템을 압축할 수 있습니다.", + "create.ponder.mechanical_press_compacting.text_2": "가능한 조합법은 2x2 / 3x3 조합법을 포함하고, 모드에서 추가된 조합법도 있습니다.", + "create.ponder.mechanical_press_compacting.text_3": "몇몇 조합법은 블레이즈 버너의 열을 요구합니다.", + "create.ponder.mechanical_press_compacting.text_4": "필터 슬롯을 이용해 조합법이 겹치는 것을 방지할 수 있습니다.", - "create.ponder.mechanical_pump_flow.header": "UNLOCALIZED: Fluid Transportation using Mechanical Pumps", - "create.ponder.mechanical_pump_flow.text_1": "UNLOCALIZED: Mechanical Pumps govern the flow of their attached pipe networks", - "create.ponder.mechanical_pump_flow.text_2": "UNLOCALIZED: When powered, their arrow indicates the direction of flow", - "create.ponder.mechanical_pump_flow.text_3": "UNLOCALIZED: The network behind is now pulling fluids...", - "create.ponder.mechanical_pump_flow.text_4": "UNLOCALIZED: ...while the network in front is transferring it outward", - "create.ponder.mechanical_pump_flow.text_5": "UNLOCALIZED: Reversing the input rotation reverses the direction of flow", - "create.ponder.mechanical_pump_flow.text_6": "UNLOCALIZED: Use a Wrench to reverse the orientation of pumps manually", + "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_5": "동력 방향을 반전시키면 흐름의 방향도 반전됩니다.", + "create.ponder.mechanical_pump_flow.text_6": "렌치로 펌프 방향 자체를 돌릴 수도 있습니다.", - "create.ponder.mechanical_pump_speed.header": "UNLOCALIZED: Throughput of Mechanical Pumps", - "create.ponder.mechanical_pump_speed.text_1": "UNLOCALIZED: Regardless of speed, Mechanical Pumps affect pipes connected up to 16 blocks away", - "create.ponder.mechanical_pump_speed.text_2": "UNLOCALIZED: Speeding up the input rotation changes the speed of flow propagation...", - "create.ponder.mechanical_pump_speed.text_3": "UNLOCALIZED: ...aswell as how quickly fluids are transferred", - "create.ponder.mechanical_pump_speed.text_4": "UNLOCALIZED: Pumps can combine their throughputs within shared pipe networks", - "create.ponder.mechanical_pump_speed.text_5": "UNLOCALIZED: Alternating their orientation can help align their flow directions", + "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_4": "펌프는 병렬로 설치할 수 있습니다.", + "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_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.header": "구조물에서의 톱", + "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_2": "처리된 아이템은 항상 톱의 회전 방향에 따라 이동합니다", - "create.ponder.mechanical_saw_processing.text_3": "톱은 벨트와 같이 사용할 수 있습니다", - "create.ponder.mechanical_saw_processing.text_4": "재료로 만들 수 있는 아이템이 여러 개인 경우 필터 슬롯을 사용하여 해결할 수 있습니다", - "create.ponder.mechanical_saw_processing.text_5": "필터가 없다면 재료로 만들 수 있는 모든 아이템를 순서대로 만듭니다", + "create.ponder.mechanical_saw_processing.header": "톱으로 아이템 가공하기", + "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_2": "톱니바퀴를 측면에 연결하여 회전력을 받을 수 있습니다", - "create.ponder.millstone.text_3": "아이템을 맷돌 위에 던지거나 입력하면 아이템이 처리됩니다", - "create.ponder.millstone.text_4": "시간이 지나고 맷돌에 오른쪽 버튼을 누르면 갈아낸 아이템을 얻을 수 있습니다", - "create.ponder.millstone.text_5": "이러한 장치로 아이템을 자동으로 처리할 수 있습니다", + "create.ponder.millstone.header": "맷돌로 아이템 갈기", + "create.ponder.millstone.text_1": "맷돌은 아이템을 갈아버립니다!", + "create.ponder.millstone.text_2": "톱니바퀴를 옆에 설치하여 돌릴 수 있습니다.", + "create.ponder.millstone.text_3": "윗면으로 아이템을 투입하세요.", + "create.ponder.millstone.text_4": "시간이 지난 후, 우클릭으로 결과물을 얻을 수 있습니다.", + "create.ponder.millstone.text_5": "결과물은 자동으로 빼낼 수 있습니다.", - "create.ponder.nixie_tube.header": "표시등의 이용", - "create.ponder.nixie_tube.text_1": "레드스톤 신호를 받으면, 표시등은 레드스톤 신호의 전력을 표시합니다", - "create.ponder.nixie_tube.text_2": "모루로 이름을 바꾼 이름표를 사용하면 원하는 글씨를 표시할 수 있습니다", - "create.ponder.nixie_tube.text_3": "UNLOCALIZED: Right-Click with Dye to change their display colour", + "create.ponder.nixie_tube.header": "닉시관 사용하기", + "create.ponder.nixie_tube.text_1": "레드스톤 신호를 받으면, 닉시관은 레드스톤 신호 세기를 나타냅니다.", + "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.header": "피스톤 연장 축", + "create.ponder.piston_pole.text_1": "연장 축이 없으면, 기계식 피스톤은 움직일 수 없습니다.", + "create.ponder.piston_pole.text_2": "연장 축의 수가 곧 피스톤이 연장할 수 있는 거리입니다.", - "create.ponder.portable_fluid_interface.header": "UNLOCALIZED: Contraption Fluid Exchange", - "create.ponder.portable_fluid_interface.text_1": "UNLOCALIZED: Fluid Tanks on moving contraptions cannot be accessed by any pipes", + "create.ponder.portable_fluid_interface.header": "구조물 장치의 액체 교환", + "create.ponder.portable_fluid_interface.text_1": "액체 인터페이스는 장치를 멈추지 않아도 탱크와 상호작용할 수 있습니다.", "create.ponder.portable_fluid_interface.text_2": "UNLOCALIZED: This component can interact with fluid tanks without the need to stop the contraption", - "create.ponder.portable_fluid_interface.text_3": "UNLOCALIZED: Place a second one with a gap of 1 or 2 blocks inbetween", - "create.ponder.portable_fluid_interface.text_4": "UNLOCALIZED: Whenever they pass by each other, they will engage in a connection", - "create.ponder.portable_fluid_interface.text_5": "UNLOCALIZED: While engaged, the stationary interface will represent ALL Tanks on the contraption", - "create.ponder.portable_fluid_interface.text_6": "UNLOCALIZED: Fluid can now be inserted...", - "create.ponder.portable_fluid_interface.text_7": "UNLOCALIZED: ...or extracted from the contraption", - "create.ponder.portable_fluid_interface.text_8": "UNLOCALIZED: After no contents have been exchanged for a while, the contraption will continue on its way", + "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_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_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_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_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_8": "일정 시간동안 아이템이 교환되지 않으면, 장치는 움직입니다.", - "create.ponder.portable_storage_interface_redstone.header": "레드스톤 제어", - "create.ponder.portable_storage_interface_redstone.text_1": "레드스톤 신호를 받으면, 전달기가 장치에 개입하지 않습니다", + "create.ponder.portable_storage_interface_redstone.header": "레드스톤 설정", + "create.ponder.portable_storage_interface_redstone.text_1": "레드스톤 신호를 받으면 인터페이스가 작동하지 않습니다.", - "create.ponder.powered_latch.header": "레드스톤 잠금기를 통한 신호 제어", - "create.ponder.powered_latch.text_1": "레드스톤 잠금기는 레드스톤 신호를 제어할 수 있는 레버입니다", - "create.ponder.powered_latch.text_2": "뒤쪽에서 신호를 주면, 잠금기가 켜집니다", - "create.ponder.powered_latch.text_3": "옆쪽에서 신호를 주면, 잠금기가 꺼집니다", - "create.ponder.powered_latch.text_4": "레드스톤 잠금기는 수동으로 전환할 수 있습니다", + "create.ponder.powered_latch.header": "레드스톤 걸쇠 사용하기", + "create.ponder.powered_latch.text_1": "레드스톤 걸쇠는 설정 가능한 레버입니다.", + "create.ponder.powered_latch.text_2": "뒤에서 오는 신호는 걸쇠 신호를 키고,", + "create.ponder.powered_latch.text_3": "옆에서 오는 신호는 걸쇠 신호를 끕니다.", + "create.ponder.powered_latch.text_4": "레드스톤 걸쇠는 직접 끄고 킬 수도 있습니다.", - "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_4": "레버식 레드스톤 잠금기는 수동으로 전환할 수 있습니다", + "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_4": "레드스톤 토글 걸쇠는 직접 끄고 킬 수도 있습니다.", - "create.ponder.pulse_repeater.header": "순간작동 중계기를 통한 신호 제어", - "create.ponder.pulse_repeater.text_1": "순간작동 중계기는 모든 레드스톤 신호를 잠깐의 신호로 단축합니다", + "create.ponder.pulse_repeater.header": "펄스 리피터 사용하기", + "create.ponder.pulse_repeater.text_1": "펄스 리피터는 어느 레드스톤 신호라도 1틱 신호로 바꿉니다.", - "create.ponder.radial_chassis.header": "반경 연결대를 통한 블록 부착", - "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.header": "원형 섀시를 이용해 블록 붙이기", + "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.redstone_contact.header": "레드스톤 접촉기", - "create.ponder.redstone_contact.text_1": "레드스톤 접촉기끼리 서로 마주 보면 레드스톤 신호를 방출합니다", - "create.ponder.redstone_contact.text_2": "접촉기 중 하나가 이동하는 장치에 포함되어 있어도 적용됩니다", + "create.ponder.redstone_contact.header": "동형 감지기", + "create.ponder.redstone_contact.text_1": "서로 마주보는 동형 감지기는 레드스톤 신호를 발생시킵니다.", + "create.ponder.redstone_contact.text_2": "어느 한쪽이 움직이는 장치의 일부라도 동일하게 작동합니다.", - "create.ponder.redstone_link.header": "레드스톤 연동 장치의 이용", - "create.ponder.redstone_link.text_1": "레드스톤 연동 장치는 레드스톤 신호를 무선으로 전송할 수 있습니다", - "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.header": "레드스톤 링크 사용하기", + "create.ponder.redstone_link.text_1": "레드스톤 링크는 레드스톤 신호를 무선으로 전달합니다.", + "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.rope_pulley.header": "밧줄 도르래를 통한 구조물 이동", - "create.ponder.rope_pulley.text_1": "회전력을 받으면, 밧줄 도르래는 블록을 수직으로 움직이게 만듭니다", - "create.ponder.rope_pulley.text_2": "이동 방향과 속도는 회전력에 따라 달라집니다", + "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_3": "도르래가 멈춘 상태에서만 이동할 수 있습니다", + "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_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.header": "밧줄 도르래의 이동 설정", + "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": "회전 속도 제어기는 회전력을 축에서 위에 있는 큰 톱니바퀴로 전달합니다", - "create.ponder.rotation_speed_controller.text_2": "옆쪽을 스크롤하여 회전 속도를 설정할 수 있습니다", + "create.ponder.rotation_speed_controller.header": "회전 속도 컨트롤러 사용하기", + "create.ponder.rotation_speed_controller.text_1": "회전 속도 컨트롤러는 회전을 위 톱니바퀴로 회전을 전달합니다.", + "create.ponder.rotation_speed_controller.text_2": "스크롤하여 톱니바퀴에 전달되는 RPM을 조절합니다.", - "create.ponder.sail.header": "캔버스를 통한 풍차의 작동", - "create.ponder.sail.text_1": "캔버스는 풍차를 위한 블록입니다", - "create.ponder.sail.text_2": "강력 접착제나 연결대 블록 없이 연결될 수 있습니다", - "create.ponder.sail.text_3": "오른쪽 버튼을 누르면 염색할 수 있습니다", - "create.ponder.sail.text_4": "가위를 들고 오른쪽 버튼을 누르면 캔버스 틀로 만들 수 있습니다", + "create.ponder.sail.header": "날개를 이용해 풍차 조립하기", + "create.ponder.sail.text_1": "날개는 풍차를 만들기에 좋은 블록입니다.", + "create.ponder.sail.text_2": "강력 접착제나 섀시 없이 연결할 수 있습니다", + "create.ponder.sail.text_3": "염료로 우클릭하여 염색합니다.", + "create.ponder.sail.text_4": "가위로 우클릭하여 틀만 남길 수 있습니다.", - "create.ponder.sail_frame.header": "캔버스 틀을 통한 풍차의 작동", - "create.ponder.sail_frame.text_1": "캔버스 틀은 풍차를 위한 블록입니다", - "create.ponder.sail_frame.text_2": "강력 접착제나 연결대 블록 없이 연결될 수 있습니다", + "create.ponder.sail_frame.header": "날개 틀을 이용해 풍차 조립하기", + "create.ponder.sail_frame.text_1": "날개 틀은 풍차를 만들기에 좋은 블록입니다.", + "create.ponder.sail_frame.text_2": "강력 접착제나 섀시 없이 연결할 수 있습니다", "create.ponder.sequenced_gearshift.header": "순서화 전환기를 통한 회전 속도 제어", - "create.ponder.sequenced_gearshift.text_1": "순서화 전환기는 설정한 지시에 따라 회전됩니다", - "create.ponder.sequenced_gearshift.text_2": "오른쪽 버튼을 누르면 설정 창이 열립니다", - "create.ponder.sequenced_gearshift.text_3": "레드스톤 신호를 받으면 설정된 지시에 따라 회전하기 시작합니다", - "create.ponder.sequenced_gearshift.text_4": "완료되면, 다음 레드스톤 신호를 기다립니다", - "create.ponder.sequenced_gearshift.text_5": "레드스톤 비교기를 사용하면 현재 진행 상황을 알 수 있습니다", + "create.ponder.sequenced_gearshift.text_1": "순서화 전환기는 설정한 지시에 따라 회전됩니다.", + "create.ponder.sequenced_gearshift.text_2": "오른쪽 버튼을 누르면 설정 창이 열립니다.", + "create.ponder.sequenced_gearshift.text_3": "레드스톤 신호를 받으면 설정된 지시에 따라 회전하기 시작합니다.", + "create.ponder.sequenced_gearshift.text_4": "완료되면, 다음 레드스톤 신호를 기다립니다.", + "create.ponder.sequenced_gearshift.text_5": "레드스톤 비교기를 사용하면 현재 진행 상황을 알 수 있습니다.", - "create.ponder.shaft.header": "축을 통한 회전력 전달", - "create.ponder.shaft.text_1": "축은 일직선으로 회전합니다", + "create.ponder.shaft.header": "축을 통한 동력 전달", + "create.ponder.shaft.text_1": "축은 일직선으로 회전을 전달합니다.", - "create.ponder.shaft_casing.header": "틀을 씌운 축", - "create.ponder.shaft_casing.text_1": "황동 틀이나 안산암 틀로 축을 장식할 수 있습니다", + "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.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_pipe.header": "UNLOCALIZED: Controlling Fluid flow using Smart Pipes", - "create.ponder.smart_pipe.text_1": "UNLOCALIZED: Smart pipes can help control flows by fluid type", - "create.ponder.smart_pipe.text_2": "UNLOCALIZED: When placed directly at the source, they can specify the type of fluid to extract", - "create.ponder.smart_pipe.text_3": "UNLOCALIZED: Simply Right-Click their filter slot with any item containing the desired fluid", - "create.ponder.smart_pipe.text_4": "UNLOCALIZED: When placed further down a pipe network, smart pipes will only let matching fluids continue", + "create.ponder.smart_pipe.header": "스마트 파이프를 통한 액체 필터", + "create.ponder.smart_pipe.text_1": "스마트 파이프는 필터 기능이 있는 파이프입니다.", + "create.ponder.smart_pipe.text_2": "비울 곳에다 설치하면, 어떤 액체를 뽑아낼지 설정할 수 있습니다.", + "create.ponder.smart_pipe.text_3": "필터 슬롯에 원하는 액체가 담긴 용기를 우클릭하면 됩니다.", + "create.ponder.smart_pipe.text_4": "다른 곳에 설치하면, 스마트 파이프는 맞는 액체만 통과시킵니다.", - "create.ponder.speedometer.header": "속도계를 통한 동적 정보 확인", - "create.ponder.speedometer.text_1": "속도계는 연결된 장치의 현재 속도를 표시합니다", - "create.ponder.speedometer.text_2": "공학자의 안경을 장착하면, 세부 정보를 확인할 수 있습니다", - "create.ponder.speedometer.text_3": "속도계의 측정값에 따라 비교기가 레드스톤 신호를 방출합니다", + "create.ponder.speedometer.header": "속도 계측기를 통한 정보 확인", + "create.ponder.speedometer.text_1": "속도 계측기는 연결된 장치의 속도를 표시합니다.", + "create.ponder.speedometer.text_2": "고글을 장착하면, 세부 정보를 확인할 수 있습니다.", + "create.ponder.speedometer.text_3": "속도 계측기의 측정값에 따라 비교기가 레드스톤 신호를 내보냅니다.", - "create.ponder.spout_filling.header": "UNLOCALIZED: Filling Items using a Spout", - "create.ponder.spout_filling.text_1": "UNLOCALIZED: The Spout can fill fluid holding items provided beneath it", - "create.ponder.spout_filling.text_2": "UNLOCALIZED: The content of a Spout cannot be accessed manually", - "create.ponder.spout_filling.text_3": "UNLOCALIZED: Instead, Pipes can be used to supply it with fluids", - "create.ponder.spout_filling.text_4": "UNLOCALIZED: The Input items can be placed on a Depot under the Spout", - "create.ponder.spout_filling.text_5": "UNLOCALIZED: When items are provided on a belt...", - "create.ponder.spout_filling.text_6": "UNLOCALIZED: The Spout will hold and process them automatically", + "create.ponder.spout_filling.header": "주입기로 아이템에 액체 채우기", + "create.ponder.spout_filling.text_1": "주입기는 아래있는 아이템을 액체를 채울 수 있습니다.", + "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_6": "주입기가 알아서 아이템 이동을 멈추고 가공합니다.", - "create.ponder.stabilized_bearings.header": "안정적인 장치", - "create.ponder.stabilized_bearings.text_1": "기계식 회전장치는 움직이는 구조물에서 이동해도...", - "create.ponder.stabilized_bearings.text_2": "...방향이 유지됩니다", - "create.ponder.stabilized_bearings.text_3": "회전장치의 앞에 블록이 부착되어도...", - "create.ponder.stabilized_bearings.text_4": "부착된 구조물의 방향이 유지됩니다", + "create.ponder.stabilized_bearings.header": "베어링 안정화", + "create.ponder.stabilized_bearings.text_1": "베어링이 움직이는 구조물의 일부분이어도,", + "create.ponder.stabilized_bearings.text_2": "방향이 유지됩니다.", + "create.ponder.stabilized_bearings.text_3": "베어링에 블록이 부착되어도,", + "create.ponder.stabilized_bearings.text_4": "부착된 구조물의 방향이 유지됩니다.", "create.ponder.sticker.header": "부착기를 통한 블록 부착", - "create.ponder.sticker.text_1": "부착기는 레드스톤으로 제어할 수 있습니다", - "create.ponder.sticker.text_2": "신호를 받으면, 부착기가 블록을 부착합니다", - "create.ponder.sticker.text_3": "장치가 이동하면 부착된 블록도 같이 이동합니다", - "create.ponder.sticker.text_4": "다시 한번 신호를 받으면, 블록이 부착되지 않게 됩니다", + "create.ponder.sticker.text_1": "부착기는 레드스톤으로 제어할 수 있습니다.", + "create.ponder.sticker.text_2": "신호를 받으면, 부착기가 블록을 부착합니다.", + "create.ponder.sticker.text_3": "장치가 이동하면 부착된 블록도 같이 이동합니다.", + "create.ponder.sticker.text_4": "다시 한번 신호를 받으면, 블록이 부착되지 않습니다.", - "create.ponder.stressometer.header": "부하계를 통한 동적 정보 확인", - "create.ponder.stressometer.text_1": "부하계는 연결된 장치의 현재 부하를 표시합니다", - "create.ponder.stressometer.text_2": "공학자의 안경을 장착하면, 세부 정보를 확인할 수 있습니다", - "create.ponder.stressometer.text_3": "부하계의 측정값에 따라 비교기가 레드스톤 신호를 방출합니다", + "create.ponder.stressometer.header": "피로도 계측기를 통한 동적 정보 확인", + "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_5": "왼쪽 버튼을 누르면 강력 접착제를 제거할 수 있습니다", + "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_5": "왼쪽 버튼을 누르면 강력 접착제를 제거할 수 있습니다.", - "create.ponder.valve_handle.header": "밸브 손잡이를 통한 회전력 생성", - "create.ponder.valve_handle.text_1": "밸브 손잡이를 사용하면 수동으로 회전력을 생성할 수 있습니다", - "create.ponder.valve_handle.text_2": "오른쪽 버튼을 누르면 반시계 방향으로 회전합니다", - "create.ponder.valve_handle.text_3": "전달되는 속도는 상대적으로 낮습니다", - "create.ponder.valve_handle.text_4": "웅크리고 오른쪽 버튼을 누르면 시계 방향으로 회전합니다", - "create.ponder.valve_handle.text_5": "밸브 손잡이는 염료로 염색할 수 있습니다", + "create.ponder.valve_handle.header": "밸브 손잡이로 동력 생산하기", + "create.ponder.valve_handle.text_1": "밸브 손잡이를 사용하면 수동으로 동력을 생성할 수 있습니다.", + "create.ponder.valve_handle.text_2": "오클릭하면 반시계 방향으로 회전합니다.", + "create.ponder.valve_handle.text_3": "전달되는 속도는 상대적으로 낮습니다.", + "create.ponder.valve_handle.text_4": "웅크리고 우클릭하면 시계 방향으로 회전합니다.", + "create.ponder.valve_handle.text_5": "염료로 염색할 수 있습니다.", - "create.ponder.valve_pipe.header": "UNLOCALIZED: Controlling Fluid flow using Valves", - "create.ponder.valve_pipe.text_1": "UNLOCALIZED: Valve pipes help control fluids propagating through pipe networks", - "create.ponder.valve_pipe.text_2": "UNLOCALIZED: Their shaft input controls whether fluid is currently allowed through", - "create.ponder.valve_pipe.text_3": "UNLOCALIZED: Given Rotational Force in the opening direction, the valve will open up", - "create.ponder.valve_pipe.text_4": "UNLOCALIZED: It can be closed again by reversing the input rotation", + "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_2": "더 많은 면에 힘이 가해질수록 물레바퀴가 더 빠르게 회전합니다", - "create.ponder.water_wheel.text_3": "바퀴의 날이 물이 흐르는 방향으로 향하게 된다면...", - "create.ponder.water_wheel.text_4": "회전 속도가 감소하게 됩니다", + "create.ponder.water_wheel.header": "물레바퀴로 동력 생산하기", + "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_10": "이제, 발사대에 놓인 아이템의 양이 설정한 양에 도달한 경우에만 발사대가 작동됩니다", - "create.ponder.weighted_ejector.text_11": "다른 엔티티가 발사대를 밟으면, 항상 발사대가 작동합니다", - "create.ponder.weighted_ejector.text_2": "설치된 발사대는 지정한 위치에다 물체를 발사합니다", - "create.ponder.weighted_ejector.text_3": "이 범위 내에 아무 장소에 있는 지점에만 발사할 수 있습니다", - "create.ponder.weighted_ejector.text_4": "옆으로 발사할 수는 없습니다", - "create.ponder.weighted_ejector.text_5": "발사 지점이 선택되지 않거나 올바르지 않은 경우, 바로 앞에 물체를 발사합니다", - "create.ponder.weighted_ejector.text_6": "발사하려면 회전력이 필요합니다", - "create.ponder.weighted_ejector.text_7": "발사대에 아이템을 놓으면 발사대가 작동됩니다", - "create.ponder.weighted_ejector.text_8": "저장소가 발사 지점인 경우에는 발사대가 저장소에 공간이 생길 때까지 기다립니다", - "create.ponder.weighted_ejector.text_9": "스패너를 사용하여, 발사에 필요한 아이템의 양을 설정할 수 있습니다", + "create.ponder.weighted_ejector.header": "투척기 사용하기", + "create.ponder.weighted_ejector.text_1": "투척기를 들고 웅크리고 우클릭하면, 발사 지점을 정할 수 있습니다.", + "create.ponder.weighted_ejector.text_10": "투척기에 놓인 아이템의 양이 설정량에 도달한 경우에만 투척기가 작동합니다.", + "create.ponder.weighted_ejector.text_11": "다른 엔티티가 발사대를 밟으면, 항상 발사대가 작동합니다.", + "create.ponder.weighted_ejector.text_2": "투척기는 지정한 위치에다 물체를 투척합니다.", + "create.ponder.weighted_ejector.text_3": "이 범위의 아무 장소에 투척할 수 있습니다.", + "create.ponder.weighted_ejector.text_4": "옆으로 투척할 수는 없습니다.", + "create.ponder.weighted_ejector.text_5": "투척 지점이 선택되지 않거나 올바르지 않은 경우, 바로 앞에 물체를 투척합니다.", + "create.ponder.weighted_ejector.text_6": "투척하려면 회전력이 필요합니다.", + "create.ponder.weighted_ejector.text_7": "투척기에 아이템을 놓으면 투척기가 작동합니다.", + "create.ponder.weighted_ejector.text_8": "보관함이 투척 지점인 경우에는 보관함에 공간이 생길 때까지 기다립니다.", + "create.ponder.weighted_ejector.text_9": "렌치를 사용하여, 투척에 필요한 아이템의 양을 설정할 수 있습니다.", - "create.ponder.weighted_ejector_redstone.header": "레드스톤을 통한 발사대의 제어", - "create.ponder.weighted_ejector_redstone.text_1": "레드스톤 신호를 받으면, 발사대가 작동되지 않습니다", - "create.ponder.weighted_ejector_redstone.text_2": "또한, 관측기는 발사대가 작동하는 것 탐지할 수 있습니다", + "create.ponder.weighted_ejector_redstone.header": "투척기와 레드스톤", + "create.ponder.weighted_ejector_redstone.text_1": "레드스톤 신호를 받으면, 투척기가 작동하지 않습니다.", + "create.ponder.weighted_ejector_redstone.text_2": "관측기는 투척기가 작동하는 것을 탐지할 수 있습니다.", - "create.ponder.weighted_ejector_tunnel.header": "발사대를 통한 아이템의 분할", - "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.header": "투척기로 아이템 분할하기", + "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.windmill_source.header": "풍차 회전장치를 통한 회전력 생성", - "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_5": "스패너를 들고 스크롤하면 회전 방향을 설정할 수 있습니다", - "create.ponder.windmill_source.text_6": "회전장치에 오른쪽 버튼을 누르면 회전장치가 멈추고, 구조물을 편집할 수 있게 됩니다", + "create.ponder.windmill_source.header": "풍차 베어링으로 동력 생산하기", + "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_5": "렌치를 들고 스크롤하면 회전 방향을 바꿀 수 있습니다.", + "create.ponder.windmill_source.text_6": "베어링에 우클릭하면 멈추고, 구조물을 수정할 수 있게 됩니다", - "create.ponder.windmill_structure.header": "풍차 장치", - "create.ponder.windmill_structure.text_1": "최소 8개 이상의 날개 블록이 있는 구조물만 풍차로 사용할 수 있습니다", + "create.ponder.windmill_structure.header": "풍차 구조물", + "create.ponder.windmill_structure.text_1": "최소 8개 이상의 날개 블록이 있는 구조물만 풍차로 사용할 수 있습니다.", "_": "Thank you for translating Create!" diff --git a/src/generated/resources/data/create/advancements/aesthetics.json b/src/generated/resources/data/create/advancements/aesthetics.json index d723cbe38..59a86f429 100644 --- a/src/generated/resources/data/create/advancements/aesthetics.json +++ b/src/generated/resources/data/create/advancements/aesthetics.json @@ -28,8 +28,8 @@ "trigger": "create:bracket_apply", "conditions": { "accepted_entries": [ - "create:cogwheel", - "create:large_cogwheel" + "create:large_cogwheel", + "create:cogwheel" ] } }, From 2300e0e58a0288fe7bd1dca6be1ccaae71eba9e2 Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Mon, 12 Jul 2021 20:02:47 +0200 Subject: [PATCH 077/118] Bug Fixes - Copper backtanks can no longer accumulate air pressure when waterlogged - Copper backtanks now emit a comparator output - Removed id prefix requirement for ponder and seq. assembly tooltips #1931 - Improved the odds to succeed of existing sequenced assembly recipes - "junk" -> "salvage" --- gradle.properties | 2 +- src/generated/resources/.cache/cache | 30 +++++++++--------- .../resources/assets/create/lang/en_us.json | 2 +- .../assets/create/lang/unfinished/de_de.json | 2 +- .../assets/create/lang/unfinished/es_mx.json | 2 +- .../assets/create/lang/unfinished/fr_fr.json | 2 +- .../assets/create/lang/unfinished/it_it.json | 2 +- .../assets/create/lang/unfinished/nl_nl.json | 2 +- .../assets/create/lang/unfinished/pl_pl.json | 2 +- .../assets/create/lang/unfinished/pt_br.json | 2 +- .../assets/create/lang/unfinished/ru_ru.json | 2 +- .../assets/create/lang/unfinished/zh_cn.json | 2 +- .../assets/create/lang/unfinished/zh_tw.json | 2 +- .../data/create/advancements/aesthetics.json | 4 +-- .../recipes/sequenced_assembly/cogwheel.json | 2 +- .../sequenced_assembly/large_cogwheel.json | 2 +- .../precision_mechanism.json | 2 +- src/main/java/com/simibubi/create/Create.java | 2 +- .../armor/CopperBacktankBlock.java | 11 +++++++ .../armor/CopperBacktankTileEntity.java | 21 +++++++++++-- .../simibubi/create/events/ClientEvents.java | 31 ++++++++++--------- .../recipe/SequencedAssemblyRecipeGen.java | 6 ++-- src/main/resources/META-INF/mods.toml | 2 +- .../assets/create/lang/default/messages.json | 2 +- 24 files changed, 85 insertions(+), 54 deletions(-) diff --git a/gradle.properties b/gradle.properties index b569369be..80e22c8e0 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,7 +4,7 @@ org.gradle.jvmargs = -Xmx3G org.gradle.daemon = false # mod version info -mod_version = 0.3.2a +mod_version = 0.3.2b minecraft_version = 1.16.5 forge_version = 36.1.32 diff --git a/src/generated/resources/.cache/cache b/src/generated/resources/.cache/cache index 8cef15816..817561684 100644 --- a/src/generated/resources/.cache/cache +++ b/src/generated/resources/.cache/cache @@ -426,20 +426,20 @@ a3a11524cd3515fc01d905767b4b7ea782adaf03 assets/create/blockstates/yellow_seat.j 7f39521b211441f5c3e06d60c5978cebe16cacfb assets/create/blockstates/zinc_block.json b7181bcd8182b2f17088e5aa881f374c9c65470c assets/create/blockstates/zinc_ore.json e1d3c02695cbd2ee7bbede97f72941835634a3a5 assets/create/lang/en_ud.json -f7ffc8417ea58584ecbe70ce0e9a6ec74e5ec463 assets/create/lang/en_us.json -cc3d964242bf7e777caa0edb5f62e00246a28993 assets/create/lang/unfinished/de_de.json +dda27625581783c310eaddce4fbd1aa4c983c15c assets/create/lang/en_us.json +52509bf5d478b5deff21180c19632ec6467aee35 assets/create/lang/unfinished/de_de.json 8e90f32c39e3a4d7e85b2db53100ffc90cc8eb67 assets/create/lang/unfinished/es_es.json -a01222895bd7e3d06d7ae3d34fa4caecbd86448d assets/create/lang/unfinished/es_mx.json -b05d56b0e9d724490ea143a3685b0bc9ebe6268a assets/create/lang/unfinished/fr_fr.json -1633b5a42865fba17572980560ad07a3015c1743 assets/create/lang/unfinished/it_it.json +3a3fd8c21798552e1358ad44f9f7e525d91b2741 assets/create/lang/unfinished/es_mx.json +7c30cbe707f3002a070289a98291bfd7119da3b6 assets/create/lang/unfinished/fr_fr.json +e266432ad97663dfdf76dfd35a6188f5550689d7 assets/create/lang/unfinished/it_it.json 5422e990c8075d4132d58287fa9ca858f9a0bc1f assets/create/lang/unfinished/ja_jp.json a1cfa4e628a915c25dc406918028ef6aa99c5c3d assets/create/lang/unfinished/ko_kr.json -95828eb4fa2e1353f737dc909407af21d50be149 assets/create/lang/unfinished/nl_nl.json -d8ed3929f5d8f0e58f4bd4de34ab20395f8d2c55 assets/create/lang/unfinished/pl_pl.json -ae37d77d132f6fac4bc718273637a367959533a1 assets/create/lang/unfinished/pt_br.json -4710f5a451b522b1a99529f79c68674df5d7fc57 assets/create/lang/unfinished/ru_ru.json -9f2a382e23291db21f8e441eb6a14adbfdcf2d9f assets/create/lang/unfinished/zh_cn.json -9bb1d1a10e4d536ef629114516a9ccadea2da110 assets/create/lang/unfinished/zh_tw.json +c26d8d9b04ce47d1ab9ff83925b173e50b2c8776 assets/create/lang/unfinished/nl_nl.json +4527d31d932661341bf92f49af8d599166b57985 assets/create/lang/unfinished/pl_pl.json +3034e1d6f167365a3c399ddabe68b05831bbcb73 assets/create/lang/unfinished/pt_br.json +a2e2cfcacca1e707d5cbb43a3fb15107a3dd59f7 assets/create/lang/unfinished/ru_ru.json +e1b094a37a11896f835e6dd11c91a61704bb8069 assets/create/lang/unfinished/zh_cn.json +dce3b0ec1fa06b020c43a3040aab044510595972 assets/create/lang/unfinished/zh_tw.json 487a511a01b2a4531fb672f917922312db78f958 assets/create/models/block/acacia_window.json b48060cba1a382f373a05bf0039054053eccf076 assets/create/models/block/acacia_window_pane_noside.json 3066db1bf03cffa1a9c7fbacf47ae586632f4eb3 assets/create/models/block/acacia_window_pane_noside_alt.json @@ -1699,7 +1699,7 @@ d080b1b25e5bc8baf5aee68691b08c7f12ece3b0 assets/create/models/item/windmill_bear a80fb25a0b655e76be986b5b49fcb0f03461a1ab assets/create/models/item/zinc_nugget.json b1689617190c05ef34bd18456b0c7ae09bb3210f assets/create/models/item/zinc_ore.json 58880e397902f8ca5b3b59ed4423e626109ddc4c assets/create/sounds.json -5d0cc4c0255dc241e61c173b31ddca70c88d08e4 data/create/advancements/aesthetics.json +0f1b4b980afba9bf2caf583b88e261bba8b10313 data/create/advancements/aesthetics.json 187921fa131b06721bfaf63f2623a28c141aae9a data/create/advancements/andesite_alloy.json 0ea2db7173b5be28b289ea7c9a6a0cf5805c60c7 data/create/advancements/andesite_casing.json 83c046bd200623933545c9e4326f782fb02c87fa data/create/advancements/arm_blaze_burner.json @@ -3607,9 +3607,9 @@ f7b7ff190929ae525297fecb3c116f32fc05fd88 data/create/recipes/scoria_cobblestone_ a9096822db9d12b6014d6d34e52de5821305c03f data/create/recipes/scoria_cobblestone_wall_from_scoria_cobblestone_stonecutting.json a513468ce4d55fe3b3919bd76ba2bd5b6fac4d4e data/create/recipes/scoria_pillar.json 2e0ecbd3619f080d0fc6fe48307c5a5bcc2e91b4 data/create/recipes/scoria_pillar_from_scoria_stonecutting.json -23c9f4c033e5e04539c6c48e1253c95ad58ecf34 data/create/recipes/sequenced_assembly/cogwheel.json -eb8f0341d5fffab74003297af8bc36dd936b06fc data/create/recipes/sequenced_assembly/large_cogwheel.json -bf48a1da348c4fc536f2082aeead28ad7de7756e data/create/recipes/sequenced_assembly/precision_mechanism.json +1b6bec69b00c44e74951973d69caae53d85383cb data/create/recipes/sequenced_assembly/cogwheel.json +3bc3d13856f9ab8ccc47c3188cfd839f6db2359b data/create/recipes/sequenced_assembly/large_cogwheel.json +b49a0da57a179edc087eee224221ded22fd1be01 data/create/recipes/sequenced_assembly/precision_mechanism.json 4e817b521623966fa24186731a70f0e14c03168e data/create/recipes/smelting/aluminum_ingot_compat_silents_mechanisms.json ae90f50589bc06b44765ac8cbb9fbdc2b58fdb32 data/create/recipes/smelting/brass_ingot_from_crushed.json 64cbf425effba00ff2e31d95cffc2be2e0191932 data/create/recipes/smelting/bread.json diff --git a/src/generated/resources/assets/create/lang/en_us.json b/src/generated/resources/assets/create/lang/en_us.json index 29a8c9a09..b3803cd55 100644 --- a/src/generated/resources/assets/create/lang/en_us.json +++ b/src/generated/resources/assets/create/lang/en_us.json @@ -750,7 +750,7 @@ "create.recipe.assembly.deploying_item": "Deploy %1$s", "create.recipe.assembly.cutting": "Cut with Saw", "create.recipe.assembly.repeat": "Repeat Sequence %1$s Times", - "create.recipe.assembly.junk": "Random junk", + "create.recipe.assembly.junk": "Random salvage", "create.recipe.processing.chance": "%1$s%% Chance", "create.recipe.heat_requirement.none": "No Heating Required", "create.recipe.heat_requirement.heated": "Heated", 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 61a378803..d80593cfd 100644 --- a/src/generated/resources/assets/create/lang/unfinished/de_de.json +++ b/src/generated/resources/assets/create/lang/unfinished/de_de.json @@ -751,7 +751,7 @@ "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 junk", + "create.recipe.assembly.junk": "UNLOCALIZED: Random salvage", "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", diff --git a/src/generated/resources/assets/create/lang/unfinished/es_mx.json b/src/generated/resources/assets/create/lang/unfinished/es_mx.json index 9c1662f37..8c0efb9a1 100644 --- a/src/generated/resources/assets/create/lang/unfinished/es_mx.json +++ b/src/generated/resources/assets/create/lang/unfinished/es_mx.json @@ -751,7 +751,7 @@ "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 junk", + "create.recipe.assembly.junk": "UNLOCALIZED: Random salvage", "create.recipe.processing.chance": "UNLOCALIZED: %1$s%% Chance", "create.recipe.heat_requirement.none": "UNLOCALIZED: No Heating Required", "create.recipe.heat_requirement.heated": "UNLOCALIZED: Heated", diff --git a/src/generated/resources/assets/create/lang/unfinished/fr_fr.json b/src/generated/resources/assets/create/lang/unfinished/fr_fr.json index 284af00e8..e3d87f4cb 100644 --- a/src/generated/resources/assets/create/lang/unfinished/fr_fr.json +++ b/src/generated/resources/assets/create/lang/unfinished/fr_fr.json @@ -751,7 +751,7 @@ "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 junk", + "create.recipe.assembly.junk": "UNLOCALIZED: Random salvage", "create.recipe.processing.chance": "%1$s%% de chance", "create.recipe.heat_requirement.none": "Pas de chauffage requis", "create.recipe.heat_requirement.heated": "Chauffé", diff --git a/src/generated/resources/assets/create/lang/unfinished/it_it.json b/src/generated/resources/assets/create/lang/unfinished/it_it.json index 21fbf2683..da615360f 100644 --- a/src/generated/resources/assets/create/lang/unfinished/it_it.json +++ b/src/generated/resources/assets/create/lang/unfinished/it_it.json @@ -751,7 +751,7 @@ "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 junk", + "create.recipe.assembly.junk": "UNLOCALIZED: Random salvage", "create.recipe.processing.chance": "%1$s%% di probabilità", "create.recipe.heat_requirement.none": "Nessun riscaldamento", "create.recipe.heat_requirement.heated": "Riscaldamento", diff --git a/src/generated/resources/assets/create/lang/unfinished/nl_nl.json b/src/generated/resources/assets/create/lang/unfinished/nl_nl.json index 171e5b407..28abd156a 100644 --- a/src/generated/resources/assets/create/lang/unfinished/nl_nl.json +++ b/src/generated/resources/assets/create/lang/unfinished/nl_nl.json @@ -751,7 +751,7 @@ "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 junk", + "create.recipe.assembly.junk": "UNLOCALIZED: Random salvage", "create.recipe.processing.chance": "%1$s%% Kans", "create.recipe.heat_requirement.none": "UNLOCALIZED: No Heating Required", "create.recipe.heat_requirement.heated": "UNLOCALIZED: Heated", diff --git a/src/generated/resources/assets/create/lang/unfinished/pl_pl.json b/src/generated/resources/assets/create/lang/unfinished/pl_pl.json index f27107538..d479a10d3 100644 --- a/src/generated/resources/assets/create/lang/unfinished/pl_pl.json +++ b/src/generated/resources/assets/create/lang/unfinished/pl_pl.json @@ -751,7 +751,7 @@ "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 junk", + "create.recipe.assembly.junk": "UNLOCALIZED: Random salvage", "create.recipe.processing.chance": "%1$s%% szans", "create.recipe.heat_requirement.none": "Nie wymaga podgrzewania", "create.recipe.heat_requirement.heated": "Podrzewane", 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 7c9a9dbe2..9210563b0 100644 --- a/src/generated/resources/assets/create/lang/unfinished/pt_br.json +++ b/src/generated/resources/assets/create/lang/unfinished/pt_br.json @@ -751,7 +751,7 @@ "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 junk", + "create.recipe.assembly.junk": "UNLOCALIZED: Random salvage", "create.recipe.processing.chance": "%1$s%% de chance", "create.recipe.heat_requirement.none": "UNLOCALIZED: No Heating Required", "create.recipe.heat_requirement.heated": "UNLOCALIZED: Heated", diff --git a/src/generated/resources/assets/create/lang/unfinished/ru_ru.json b/src/generated/resources/assets/create/lang/unfinished/ru_ru.json index 38eb1010b..291b78f3e 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ru_ru.json +++ b/src/generated/resources/assets/create/lang/unfinished/ru_ru.json @@ -751,7 +751,7 @@ "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 junk", + "create.recipe.assembly.junk": "UNLOCALIZED: Random salvage", "create.recipe.processing.chance": "%1$s%% шанса", "create.recipe.heat_requirement.none": "Не требует нагрева", "create.recipe.heat_requirement.heated": "Нагрето", 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 650be5c55..c7d719c9c 100644 --- a/src/generated/resources/assets/create/lang/unfinished/zh_cn.json +++ b/src/generated/resources/assets/create/lang/unfinished/zh_cn.json @@ -751,7 +751,7 @@ "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 junk", + "create.recipe.assembly.junk": "UNLOCALIZED: Random salvage", "create.recipe.processing.chance": "%1$s%%概率", "create.recipe.heat_requirement.none": "无需加热", "create.recipe.heat_requirement.heated": "加热", diff --git a/src/generated/resources/assets/create/lang/unfinished/zh_tw.json b/src/generated/resources/assets/create/lang/unfinished/zh_tw.json index 47656d31a..84fd62ea1 100644 --- a/src/generated/resources/assets/create/lang/unfinished/zh_tw.json +++ b/src/generated/resources/assets/create/lang/unfinished/zh_tw.json @@ -751,7 +751,7 @@ "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 junk", + "create.recipe.assembly.junk": "UNLOCALIZED: Random salvage", "create.recipe.processing.chance": "%1$s%%概率", "create.recipe.heat_requirement.none": "不需要加熱", "create.recipe.heat_requirement.heated": "普通加熱", diff --git a/src/generated/resources/data/create/advancements/aesthetics.json b/src/generated/resources/data/create/advancements/aesthetics.json index 59a86f429..d723cbe38 100644 --- a/src/generated/resources/data/create/advancements/aesthetics.json +++ b/src/generated/resources/data/create/advancements/aesthetics.json @@ -28,8 +28,8 @@ "trigger": "create:bracket_apply", "conditions": { "accepted_entries": [ - "create:large_cogwheel", - "create:cogwheel" + "create:cogwheel", + "create:large_cogwheel" ] } }, diff --git a/src/generated/resources/data/create/recipes/sequenced_assembly/cogwheel.json b/src/generated/resources/data/create/recipes/sequenced_assembly/cogwheel.json index 84ae9aa9e..3815a5bdc 100644 --- a/src/generated/resources/data/create/recipes/sequenced_assembly/cogwheel.json +++ b/src/generated/resources/data/create/recipes/sequenced_assembly/cogwheel.json @@ -42,7 +42,7 @@ { "item": "create:cogwheel", "count": 12, - "chance": 22.0 + "chance": 32.0 }, { "item": "create:andesite_alloy", diff --git a/src/generated/resources/data/create/recipes/sequenced_assembly/large_cogwheel.json b/src/generated/resources/data/create/recipes/sequenced_assembly/large_cogwheel.json index 6fa8f6ff2..6c80cc515 100644 --- a/src/generated/resources/data/create/recipes/sequenced_assembly/large_cogwheel.json +++ b/src/generated/resources/data/create/recipes/sequenced_assembly/large_cogwheel.json @@ -58,7 +58,7 @@ { "item": "create:large_cogwheel", "count": 6, - "chance": 22.0 + "chance": 32.0 }, { "item": "create:andesite_alloy", diff --git a/src/generated/resources/data/create/recipes/sequenced_assembly/precision_mechanism.json b/src/generated/resources/data/create/recipes/sequenced_assembly/precision_mechanism.json index 1a795ca46..c130de722 100644 --- a/src/generated/resources/data/create/recipes/sequenced_assembly/precision_mechanism.json +++ b/src/generated/resources/data/create/recipes/sequenced_assembly/precision_mechanism.json @@ -59,7 +59,7 @@ "results": [ { "item": "create:precision_mechanism", - "chance": 60.0 + "chance": 120.0 }, { "item": "create:golden_sheet", diff --git a/src/main/java/com/simibubi/create/Create.java b/src/main/java/com/simibubi/create/Create.java index 4fe1ec34f..952135f5b 100644 --- a/src/main/java/com/simibubi/create/Create.java +++ b/src/main/java/com/simibubi/create/Create.java @@ -56,7 +56,7 @@ public class Create { public static final String ID = "create"; public static final String NAME = "Create"; - public static final String VERSION = "0.3.2a"; + public static final String VERSION = "0.3.2b"; public static final Logger LOGGER = LogManager.getLogger(); diff --git a/src/main/java/com/simibubi/create/content/curiosities/armor/CopperBacktankBlock.java b/src/main/java/com/simibubi/create/content/curiosities/armor/CopperBacktankBlock.java index c19b2d6d9..2976b1b26 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/armor/CopperBacktankBlock.java +++ b/src/main/java/com/simibubi/create/content/curiosities/armor/CopperBacktankBlock.java @@ -63,6 +63,17 @@ public class CopperBacktankBlock extends HorizontalKineticBlock builder.add(BlockStateProperties.WATERLOGGED); super.fillStateContainer(builder); } + + @Override + public boolean hasComparatorInputOverride(BlockState p_149740_1_) { + return true; + } + + @Override + public int getComparatorInputOverride(BlockState p_180641_1_, World world, BlockPos pos) { + return getTileEntityOptional(world, pos).map(CopperBacktankTileEntity::getComparatorOutput) + .orElse(0); + } @Override public BlockState updatePostPlacement(BlockState state, Direction direction, BlockState neighbourState, diff --git a/src/main/java/com/simibubi/create/content/curiosities/armor/CopperBacktankTileEntity.java b/src/main/java/com/simibubi/create/content/curiosities/armor/CopperBacktankTileEntity.java index a4e94dd08..22c3e2f2e 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/armor/CopperBacktankTileEntity.java +++ b/src/main/java/com/simibubi/create/content/curiosities/armor/CopperBacktankTileEntity.java @@ -5,12 +5,15 @@ import com.simibubi.create.AllSoundEvents; import com.simibubi.create.Create; import com.simibubi.create.content.contraptions.base.KineticTileEntity; import com.simibubi.create.content.contraptions.particle.AirParticleData; +import com.simibubi.create.foundation.tileEntity.ComparatorUtil; import com.simibubi.create.foundation.utility.VecHelper; import net.minecraft.block.BlockState; import net.minecraft.nbt.CompoundNBT; import net.minecraft.nbt.ListNBT; import net.minecraft.particles.ParticleTypes; +import net.minecraft.state.BooleanProperty; +import net.minecraft.state.properties.BlockStateProperties; import net.minecraft.tileentity.TileEntityType; import net.minecraft.util.Direction.Axis; import net.minecraft.util.INameable; @@ -25,7 +28,7 @@ public class CopperBacktankTileEntity extends KineticTileEntity implements IName public int airLevel; public int airLevelTimer; private ITextComponent customName; - + private int capacityEnchantLevel; private ListNBT enchantmentTag; @@ -39,6 +42,12 @@ public class CopperBacktankTileEntity extends KineticTileEntity implements IName super.tick(); if (getSpeed() == 0) return; + + BlockState state = getBlockState(); + BooleanProperty waterProperty = BlockStateProperties.WATERLOGGED; + if (state.contains(waterProperty) && state.get(waterProperty)) + return; + if (airLevelTimer > 0) { airLevelTimer--; return; @@ -57,14 +66,22 @@ public class CopperBacktankTileEntity extends KineticTileEntity implements IName if (airLevel == max) return; + int prevComparatorLevel = getComparatorOutput(); float abs = Math.abs(getSpeed()); int increment = MathHelper.clamp(((int) abs - 100) / 20, 1, 5); airLevel = Math.min(max, airLevel + increment); + if (getComparatorOutput() != prevComparatorLevel && !world.isRemote) + world.updateComparatorOutputLevel(pos, state.getBlock()); if (airLevel == max) sendData(); airLevelTimer = MathHelper.clamp((int) (128f - abs / 5f) - 108, 0, 20); } + public int getComparatorOutput() { + int max = BackTankUtil.maxAir(capacityEnchantLevel); + return ComparatorUtil.fractionToRedstoneLevel(airLevel / (float) max); + } + @Override protected void write(CompoundNBT compound, boolean clientPacket) { super.write(compound, clientPacket); @@ -139,7 +156,7 @@ public class CopperBacktankTileEntity extends KineticTileEntity implements IName public void setEnchantmentTag(ListNBT enchantmentTag) { this.enchantmentTag = enchantmentTag; } - + public void setCapacityEnchantLevel(int capacityEnchantLevel) { this.capacityEnchantLevel = capacityEnchantLevel; } diff --git a/src/main/java/com/simibubi/create/events/ClientEvents.java b/src/main/java/com/simibubi/create/events/ClientEvents.java index 38284706d..cf8c2a81c 100644 --- a/src/main/java/com/simibubi/create/events/ClientEvents.java +++ b/src/main/java/com/simibubi/create/events/ClientEvents.java @@ -168,7 +168,8 @@ public class ClientEvents { @SubscribeEvent public static void onUnloadWorld(WorldEvent.Unload event) { - if (event.getWorld().isRemote()) { + if (event.getWorld() + .isRemote()) { CreateClient.invalidateRenderers(); CreateClient.SOUL_PULSE_EFFECT_HANDLER.refresh(); AnimationTickHolder.reset(); @@ -178,7 +179,7 @@ public class ClientEvents { @SubscribeEvent public static void onRenderWorld(RenderWorldLastEvent event) { Vector3d cameraPos = Minecraft.getInstance().gameRenderer.getActiveRenderInfo() - .getProjectedView(); + .getProjectedView(); float pt = AnimationTickHolder.getPartialTicks(); MatrixStack ms = event.getMatrixStack(); @@ -239,17 +240,16 @@ public class ClientEvents { ItemStack stack = event.getItemStack(); String translationKey = stack.getItem() .getTranslationKey(stack); - if (!translationKey.startsWith(itemPrefix) && !translationKey.startsWith(blockPrefix)) - return; - if (TooltipHelper.hasTooltip(stack, event.getPlayer())) { - List itemTooltip = event.getToolTip(); - List toolTip = new ArrayList<>(); - toolTip.add(itemTooltip.remove(0)); - TooltipHelper.getTooltip(stack) - .addInformation(toolTip); - itemTooltip.addAll(0, toolTip); - } + if (translationKey.startsWith(itemPrefix) || translationKey.startsWith(blockPrefix)) + if (TooltipHelper.hasTooltip(stack, event.getPlayer())) { + List itemTooltip = event.getToolTip(); + List toolTip = new ArrayList<>(); + toolTip.add(itemTooltip.remove(0)); + TooltipHelper.getTooltip(stack) + .addInformation(toolTip); + itemTooltip.addAll(0, toolTip); + } if (stack.getItem() instanceof BlockItem) { BlockItem item = (BlockItem) stack.getItem(); @@ -337,8 +337,11 @@ public class ClientEvents { } public static void loadCompleted(FMLLoadCompleteEvent event) { - ModContainer createContainer = ModList.get().getModContainerById(Create.ID).orElseThrow(() -> new IllegalStateException("Create Mod Container missing after loadCompleted")); - createContainer.registerExtensionPoint(ExtensionPoint.CONFIGGUIFACTORY, () -> (mc, previousScreen) -> BaseConfigScreen.forCreate(previousScreen)); + ModContainer createContainer = ModList.get() + .getModContainerById(Create.ID) + .orElseThrow(() -> new IllegalStateException("Create Mod Container missing after loadCompleted")); + createContainer.registerExtensionPoint(ExtensionPoint.CONFIGGUIFACTORY, + () -> (mc, previousScreen) -> BaseConfigScreen.forCreate(previousScreen)); } } diff --git a/src/main/java/com/simibubi/create/foundation/data/recipe/SequencedAssemblyRecipeGen.java b/src/main/java/com/simibubi/create/foundation/data/recipe/SequencedAssemblyRecipeGen.java index 7795e749a..42b653da0 100644 --- a/src/main/java/com/simibubi/create/foundation/data/recipe/SequencedAssemblyRecipeGen.java +++ b/src/main/java/com/simibubi/create/foundation/data/recipe/SequencedAssemblyRecipeGen.java @@ -35,7 +35,7 @@ public class SequencedAssemblyRecipeGen extends CreateRecipeProvider { PRECISION_MECHANISM = create("precision_mechanism", b -> b.require(I.goldSheet()) .transitionTo(AllItems.INCOMPLETE_PRECISION_MECHANISM.get()) - .addOutput(AllItems.PRECISION_MECHANISM.get(), 60) + .addOutput(AllItems.PRECISION_MECHANISM.get(), 120) .addOutput(AllItems.GOLDEN_SHEET.get(), 8) .addOutput(AllItems.ANDESITE_ALLOY.get(), 8) .addOutput(AllBlocks.COGWHEEL.get(), 5) @@ -52,7 +52,7 @@ public class SequencedAssemblyRecipeGen extends CreateRecipeProvider { COGWHEEL = create("cogwheel", b -> b.require(I.andesite()) .transitionTo(AllItems.INCOMPLETE_COGWHEEL.get()) - .addOutput(new ItemStack(AllBlocks.COGWHEEL.get(), 12), 22) + .addOutput(new ItemStack(AllBlocks.COGWHEEL.get(), 12), 32) .addOutput(AllItems.ANDESITE_ALLOY.get(), 2) .addOutput(Blocks.ANDESITE, 1) .addOutput(AllBlocks.LARGE_COGWHEEL.get(), 1) @@ -65,7 +65,7 @@ public class SequencedAssemblyRecipeGen extends CreateRecipeProvider { LARGE_COGWHEEL = create("large_cogwheel", b -> b.require(I.andesite()) .transitionTo(AllItems.INCOMPLETE_LARGE_COGWHEEL.get()) - .addOutput(new ItemStack(AllBlocks.LARGE_COGWHEEL.get(), 6), 22) + .addOutput(new ItemStack(AllBlocks.LARGE_COGWHEEL.get(), 6), 32) .addOutput(AllItems.ANDESITE_ALLOY.get(), 2) .addOutput(Blocks.ANDESITE, 1) .addOutput(AllBlocks.COGWHEEL.get(), 1) diff --git a/src/main/resources/META-INF/mods.toml b/src/main/resources/META-INF/mods.toml index 76afcc02d..ac2e2c277 100644 --- a/src/main/resources/META-INF/mods.toml +++ b/src/main/resources/META-INF/mods.toml @@ -5,7 +5,7 @@ license="MIT" [[mods]] modId="create" -version="v0.3.2a for 1.16.5" +version="v0.3.2b for 1.16.5" displayName="Create" #updateJSONURL="" displayURL="https://www.curseforge.com/minecraft/mc-mods/create" diff --git a/src/main/resources/assets/create/lang/default/messages.json b/src/main/resources/assets/create/lang/default/messages.json index 0de1d3e9b..1df9899de 100644 --- a/src/main/resources/assets/create/lang/default/messages.json +++ b/src/main/resources/assets/create/lang/default/messages.json @@ -62,7 +62,7 @@ "create.recipe.assembly.deploying_item": "Deploy %1$s", "create.recipe.assembly.cutting": "Cut with Saw", "create.recipe.assembly.repeat": "Repeat Sequence %1$s Times", - "create.recipe.assembly.junk": "Random junk", + "create.recipe.assembly.junk": "Random salvage", "create.recipe.processing.chance": "%1$s%% Chance", "create.recipe.heat_requirement.none": "No Heating Required", From f3a521121d5bca73d1f0287cbe684670439059b5 Mon Sep 17 00:00:00 2001 From: reidbhuntley Date: Mon, 12 Jul 2021 22:03:22 -0400 Subject: [PATCH 078/118] Advanced Arm Applications - Mechanical Arms remember their targets when placed by Schematicannon (for real this time) - Mechanical Arms will now rotate/mirror their targets when rotated/mirrored in a schematic or contraption --- .../structureMovement/Contraption.java | 2 + .../structureMovement/ITransformableTE.java | 7 +++ .../structureMovement/StructureTransform.java | 51 ++++++++++++++----- .../mechanicalArm/ArmInteractionPoint.java | 7 +++ .../block/mechanicalArm/ArmTileEntity.java | 17 ++++++- .../content/schematics/SchematicPrinter.java | 10 +++- .../create/foundation/utility/VecHelper.java | 26 +++++++++- 7 files changed, 104 insertions(+), 16 deletions(-) create mode 100644 src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ITransformableTE.java diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/Contraption.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/Contraption.java index 240096801..0454b058c 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/Contraption.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/Contraption.java @@ -1057,6 +1057,8 @@ public abstract class Contraption { mountedStorage.addStorageToWorld(tileEntity); } } + + transform.apply(tileEntity); } } for (BlockInfo block : blocks.values()) { diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ITransformableTE.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ITransformableTE.java new file mode 100644 index 000000000..64d77b497 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ITransformableTE.java @@ -0,0 +1,7 @@ +package com.simibubi.create.content.contraptions.components.structureMovement; + +public interface ITransformableTE { + + void transform(StructureTransform transform); + +} diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/StructureTransform.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/StructureTransform.java index 1d47d2554..225cbc02f 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/StructureTransform.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/StructureTransform.java @@ -27,9 +27,11 @@ import net.minecraft.state.properties.BellAttachment; import net.minecraft.state.properties.BlockStateProperties; import net.minecraft.state.properties.Half; import net.minecraft.state.properties.SlabType; +import net.minecraft.tileentity.TileEntity; import net.minecraft.util.Direction; import net.minecraft.util.Direction.Axis; import net.minecraft.util.Direction.AxisDirection; +import net.minecraft.util.Mirror; import net.minecraft.util.Rotation; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.vector.Vector3d; @@ -41,27 +43,33 @@ public class StructureTransform { int angle; Axis rotationAxis; BlockPos offset; + Mirror mirror; - private StructureTransform(BlockPos offset, int angle, Axis axis, Rotation rotation) { + private StructureTransform(BlockPos offset, int angle, Axis axis, Rotation rotation, Mirror mirror) { this.offset = offset; this.angle = angle; rotationAxis = axis; this.rotation = rotation; + this.mirror = mirror; + } + + public StructureTransform(BlockPos offset, Axis axis, Rotation rotation, Mirror mirror) { + this(offset, rotation == Rotation.NONE ? 0 : (4 - rotation.ordinal())*90, axis, rotation, mirror); } public StructureTransform(BlockPos offset, float xRotation, float yRotation, float zRotation) { this.offset = offset; if (xRotation != 0) { rotationAxis = Axis.X; - angle = (int) (Math.round(xRotation / 90) * 90); + angle = Math.round(xRotation / 90) * 90; } if (yRotation != 0) { rotationAxis = Axis.Y; - angle = (int) (Math.round(yRotation / 90) * 90); + angle = Math.round(yRotation / 90) * 90; } if (zRotation != 0) { rotationAxis = Axis.Z; - angle = (int) (Math.round(zRotation / 90) * 90); + angle = Math.round(zRotation / 90) * 90; } angle %= 360; @@ -76,22 +84,33 @@ public class StructureTransform { if (angle == 180) this.rotation = Rotation.CLOCKWISE_180; + mirror = Mirror.NONE; } - public Vector3d apply(Vector3d localVec) { + public Vector3d applyWithoutOffset(Vector3d localVec) { Vector3d vec = localVec; + if (mirror != null) + vec = VecHelper.mirrorCentered(vec, mirror); if (rotationAxis != null) vec = VecHelper.rotateCentered(vec, angle, rotationAxis); - vec = vec.add(Vector3d.of(offset)); return vec; } + public Vector3d apply(Vector3d localVec) { + return applyWithoutOffset(localVec).add(Vector3d.of(offset)); + } + + public BlockPos applyWithoutOffset(BlockPos localPos) { + return new BlockPos(applyWithoutOffset(VecHelper.getCenterOf(localPos))); + } + public BlockPos apply(BlockPos localPos) { - Vector3d vec = VecHelper.getCenterOf(localPos); - if (rotationAxis != null) - vec = VecHelper.rotateCentered(vec, angle, rotationAxis); - localPos = new BlockPos(vec); - return localPos.add(offset); + return applyWithoutOffset(localPos).add(offset); + } + + public void apply(TileEntity te) { + if (te instanceof ITransformableTE) + ((ITransformableTE) te).transform(this); } /** @@ -100,6 +119,9 @@ public class StructureTransform { * horizontal axes */ public BlockState apply(BlockState state) { + if (mirror != null) + state = state.mirror(mirror); + Block block = state.getBlock(); if (rotationAxis == Axis.Y) { @@ -299,6 +321,8 @@ public class StructureTransform { } public Direction transformFacing(Direction facing) { + if (mirror != null) + facing = mirror.mirror(facing); for (int i = 0; i < rotation.ordinal(); i++) facing = DirectionHelper.rotateAround(facing, rotationAxis); return facing; @@ -335,8 +359,10 @@ public class StructureTransform { int readAngle = buffer.readInt(); int axisIndex = buffer.readVarInt(); int rotationIndex = buffer.readVarInt(); + int mirrorIndex = buffer.readVarInt(); return new StructureTransform(readBlockPos, readAngle, axisIndex == -1 ? null : Axis.values()[axisIndex], - rotationIndex == -1 ? null : Rotation.values()[rotationIndex]); + rotationIndex == -1 ? null : Rotation.values()[rotationIndex], + mirrorIndex == -1 ? null : Mirror.values()[mirrorIndex]); } public void writeToBuffer(PacketBuffer buffer) { @@ -344,6 +370,7 @@ public class StructureTransform { buffer.writeInt(angle); buffer.writeVarInt(rotationAxis == null ? -1 : rotationAxis.ordinal()); buffer.writeVarInt(rotation == null ? -1 : rotation.ordinal()); + buffer.writeVarInt(mirror == null ? - 1 : mirror.ordinal()); } } 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 b3394640b..f6b40d285 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 @@ -17,6 +17,7 @@ import com.simibubi.create.content.contraptions.components.crafter.MechanicalCra 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; @@ -218,6 +219,12 @@ public abstract class ArmInteractionPoint { return interactionPoint; } + protected static void transformPos(StructureTransform transform, CompoundNBT nbt) { + BlockPos pos = NBTUtil.readBlockPos(nbt.getCompound("Pos")); + pos = transform.applyWithoutOffset(pos); + nbt.put("Pos", NBTUtil.writeBlockPos(pos)); + } + public static abstract class TopFaceArmInteractionPoint extends ArmInteractionPoint { @Override 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 9db6a126a..6a9fbde49 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 @@ -7,6 +7,8 @@ import javax.annotation.Nullable; 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; @@ -41,7 +43,7 @@ import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.common.util.Constants.NBT; -public class ArmTileEntity extends KineticTileEntity { +public class ArmTileEntity extends KineticTileEntity implements ITransformableTE { // Server List inputs; @@ -384,6 +386,19 @@ public class ArmTileEntity extends KineticTileEntity { searchForItem(); } + @Override + public void transform(StructureTransform transform) { + if (interactionPointTag == null) + return; + + for (INBT inbt : interactionPointTag) { + ArmInteractionPoint.transformPos(transform, (CompoundNBT) inbt); + } + + sendData(); + markDirty(); + } + protected void initInteractionPoints() { if (!updateInteractionPoints || interactionPointTag == null) return; diff --git a/src/main/java/com/simibubi/create/content/schematics/SchematicPrinter.java b/src/main/java/com/simibubi/create/content/schematics/SchematicPrinter.java index 50c05fb04..cc4634615 100644 --- a/src/main/java/com/simibubi/create/content/schematics/SchematicPrinter.java +++ b/src/main/java/com/simibubi/create/content/schematics/SchematicPrinter.java @@ -6,6 +6,7 @@ import java.util.stream.Collectors; import com.simibubi.create.AllBlocks; import com.simibubi.create.content.contraptions.components.structureMovement.BlockMovementChecks; +import com.simibubi.create.content.contraptions.components.structureMovement.StructureTransform; import com.simibubi.create.content.schematics.item.SchematicItem; import com.simibubi.create.foundation.utility.BlockHelper; @@ -81,6 +82,12 @@ public class SchematicPrinter { blockReader = new SchematicWorld(schematicAnchor, originalWorld); activeTemplate.place(blockReader, schematicAnchor, settings, blockReader.getRandom()); + StructureTransform transform = new StructureTransform(settings.getCenterOffset(), Direction.Axis.Y, + settings.getRotation(), settings.getMirror()); + for (TileEntity te : blockReader.tileEntities.values()) { + transform.apply(te); + } + printingEntityIndex = -1; printStage = PrintStage.BLOCKS; deferredBlocks.clear(); @@ -292,7 +299,8 @@ public class SchematicPrinter { } public static boolean shouldDeferBlock(BlockState state) { - return state.getBlock().is(AllBlocks.GANTRY_CARRIAGE.get()) || BlockMovementChecks.isBrittle(state); + return AllBlocks.GANTRY_CARRIAGE.has(state) || AllBlocks.MECHANICAL_ARM.has(state) + || BlockMovementChecks.isBrittle(state); } } diff --git a/src/main/java/com/simibubi/create/foundation/utility/VecHelper.java b/src/main/java/com/simibubi/create/foundation/utility/VecHelper.java index a2cb48d26..676e3f7fb 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/VecHelper.java +++ b/src/main/java/com/simibubi/create/foundation/utility/VecHelper.java @@ -12,6 +12,7 @@ import net.minecraft.nbt.DoubleNBT; import net.minecraft.nbt.ListNBT; import net.minecraft.util.Direction; import net.minecraft.util.Direction.Axis; +import net.minecraft.util.Mirror; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.vector.Quaternion; @@ -34,8 +35,7 @@ public class VecHelper { public static Vector3d rotateCentered(Vector3d vec, double deg, Axis axis) { Vector3d shift = getCenterOf(BlockPos.ZERO); - return VecHelper.rotate(vec.subtract(shift), deg, axis) - .add(shift); + return VecHelper.rotate(vec.subtract(shift), deg, axis).add(shift); } public static Vector3d rotate(Vector3d vec, double deg, Axis axis) { @@ -60,6 +60,28 @@ public class VecHelper { return vec; } + public static Vector3d mirrorCentered(Vector3d vec, Mirror mirror) { + Vector3d shift = getCenterOf(BlockPos.ZERO); + return VecHelper.mirror(vec.subtract(shift), mirror).add(shift); + } + + public static Vector3d mirror(Vector3d vec, Mirror mirror) { + if (mirror == null || mirror == Mirror.NONE) + return vec; + if (vec == Vector3d.ZERO) + return vec; + + double x = vec.x; + double y = vec.y; + double z = vec.z; + + if (mirror == Mirror.LEFT_RIGHT) + return new Vector3d(x, y, -z); + if (mirror == Mirror.FRONT_BACK) + return new Vector3d(-x, y, z); + return vec; + } + public static Vector3d lookAt(Vector3d vec, Vector3d fwd) { fwd = fwd.normalize(); Vector3d up = new Vector3d(0,1,0); From 2b1a76039e805d4ff58331083d4c1b4fdf848c43 Mon Sep 17 00:00:00 2001 From: Simba-Fs <39305460+simba-fs@users.noreply.github.com> Date: Tue, 13 Jul 2021 23:26:54 +0800 Subject: [PATCH 079/118] Updates to zh_tw.json by simba-fs (#1952) --- .../resources/assets/create/lang/zh_tw.json | 1233 ++++++++++------- 1 file changed, 697 insertions(+), 536 deletions(-) diff --git a/src/main/resources/assets/create/lang/zh_tw.json b/src/main/resources/assets/create/lang/zh_tw.json index aa751d6bf..70b74b490 100644 --- a/src/main/resources/assets/create/lang/zh_tw.json +++ b/src/main/resources/assets/create/lang/zh_tw.json @@ -1,5 +1,5 @@ { - "_": "for create 0.3.1c", + "_": "for create 0.3.2a", "_": "->------------------------] Game Elements [------------------------<-", @@ -28,10 +28,12 @@ "block.create.belt": "輸送帶", "block.create.birch_window": "白樺木窗戶", "block.create.birch_window_pane": "白樺木窗戶片", + "block.create.black_nixie_tube": "黑色真空管", "block.create.black_sail": "黑色風帆", "block.create.black_seat": "黑色坐墊", "block.create.black_valve_handle": "黑色閥門開關", "block.create.blaze_burner": "烈焰使者動力爐", + "block.create.blue_nixie_tube": "藍色真空管", "block.create.blue_sail": "藍色風帆", "block.create.blue_seat": "藍色坐墊", "block.create.blue_valve_handle": "藍色閥門開關", @@ -41,6 +43,7 @@ "block.create.brass_encased_shaft": "黃銅傳動軸箱", "block.create.brass_funnel": "黃銅漏斗", "block.create.brass_tunnel": "黃銅物品隧道", + "block.create.brown_nixie_tube": "棕色真空管", "block.create.brown_sail": "棕色風帆", "block.create.brown_seat": "棕色坐墊", "block.create.brown_valve_handle": "棕色閥門開關", @@ -58,6 +61,7 @@ "block.create.cogwheel": "齒輪", "block.create.content_observer": "物品偵測器", "block.create.controller_rail": "控制鐵軌", + "block.create.copper_backtank": "銅製後背包", "block.create.copper_block": "銅磚", "block.create.copper_casing": "銅機殼", "block.create.copper_ore": "銅礦石", @@ -72,6 +76,7 @@ "block.create.crushing_wheel": "粉碎輪", "block.create.crushing_wheel_controller": "粉碎輪控制器", "block.create.cuckoo_clock": "布穀鳥鐘", + "block.create.cyan_nixie_tube": "青色真空管", "block.create.cyan_sail": "藍綠色風帆", "block.create.cyan_seat": "藍綠色坐墊", "block.create.cyan_valve_handle": "藍綠色閥門開關", @@ -178,13 +183,16 @@ "block.create.granite_cobblestone_stairs": "碎花崗岩樓梯", "block.create.granite_cobblestone_wall": "碎花崗岩牆", "block.create.granite_pillar": "豎紋花崗岩", + "block.create.gray_nixie_tube": "灰色真空管", "block.create.gray_sail": "灰色風帆", "block.create.gray_seat": "灰色坐墊", "block.create.gray_valve_handle": "灰色閥門開關", + "block.create.green_nixie_tube": "綠色真空管", "block.create.green_sail": "綠色風帆", "block.create.green_seat": "綠色坐墊", "block.create.green_valve_handle": "綠色閥門開關", "block.create.hand_crank": "手搖把手", + "block.create.haunted_bell": "靈魂鐘", "block.create.honey": "蜂蜜", "block.create.horizontal_framed_glass": "豎直邊框玻璃", "block.create.horizontal_framed_glass_pane": "豎直邊框玻璃片", @@ -202,12 +210,16 @@ "block.create.layered_limestone": "疊層石灰岩", "block.create.layered_scoria": "疊層火成岩", "block.create.layered_weathered_limestone": "疊層風化石灰岩", + "block.create.lectern_controller": "講台遙控器", + "block.create.light_blue_nixie_tube": "亮藍色真空管", "block.create.light_blue_sail": "淡藍色風帆", "block.create.light_blue_seat": "淡藍色坐墊", "block.create.light_blue_valve_handle": "淡藍色閥門開關", + "block.create.light_gray_nixie_tube": "亮灰色真空管", "block.create.light_gray_sail": "淡灰色風帆", "block.create.light_gray_seat": "淡灰色坐墊", "block.create.light_gray_valve_handle": "淡灰色閥門開關", + "block.create.lime_nixie_tube": "淺綠色真空管", "block.create.lime_sail": "黃綠色風帆", "block.create.lime_seat": "黃綠色坐墊", "block.create.lime_valve_handle": "黃綠色閥門開關", @@ -224,6 +236,7 @@ "block.create.limestone_pillar": "豎紋石灰岩", "block.create.linear_chassis": "機殼底盤", "block.create.lit_blaze_burner": "烈焰使者動力爐(已啟動)", + "block.create.magenta_nixie_tube": "洋紅色真空管", "block.create.magenta_sail": "洋紅色風帆", "block.create.magenta_seat": "洋紅色坐墊", "block.create.magenta_valve_handle": "洋紅色閥門開關", @@ -307,6 +320,8 @@ "block.create.paved_weathered_limestone_slab": "風化石灰岩鋪路石半磚", "block.create.paved_weathered_limestone_stairs": "風化石灰岩鋪路石樓梯", "block.create.paved_weathered_limestone_wall": "風化石灰岩鋪路石牆", + "block.create.peculiar_bell": "黃銅鐘", + "block.create.pink_nixie_tube": "粉紅色真空管", "block.create.pink_sail": "粉紅色風帆", "block.create.pink_seat": "粉紅色坐墊", "block.create.pink_valve_handle": "粉紅色閥門開關", @@ -341,10 +356,12 @@ "block.create.powered_toggle_latch": "T型正反器", "block.create.pulley_magnet": "滑輪磁鐵", "block.create.pulse_repeater": "脈衝中繼器", + "block.create.purple_nixie_tube": "紫色真空管", "block.create.purple_sail": "紫色風帆", "block.create.purple_seat": "紫色坐墊", "block.create.purple_valve_handle": "紫色閥門開關", "block.create.radial_chassis": "旋轉底盤", + "block.create.red_nixie_tube": "紅色真空管", "block.create.red_sail": "紅色風帆", "block.create.red_seat": "紅色坐墊", "block.create.red_valve_handle": "紅色閥門開關", @@ -401,19 +418,26 @@ "block.create.weathered_limestone_cobblestone_wall": "碎風化石灰岩牆", "block.create.weathered_limestone_pillar": "豎紋風化石灰岩", "block.create.weighted_ejector": "物品彈射器", + "block.create.white_nixie_tube": "白色真空管", "block.create.white_sail": "白色風帆", "block.create.white_seat": "白色坐墊", "block.create.white_valve_handle": "白色閥門開關", "block.create.windmill_bearing": "風車軸承", "block.create.wooden_bracket": "木製支架", + "block.create.yellow_nixie_tube": "黃色真空管", "block.create.yellow_sail": "黃色風帆", "block.create.yellow_seat": "黃色坐墊", "block.create.yellow_valve_handle": "黃色閥門開關", "block.create.zinc_block": "鋅磚", "block.create.zinc_ore": "鋅礦石", + "enchantment.create.capacity": "容量", + "enchantment.create.potato_recovery": "馬鈴薯恢復", + "entity.create.contraption": "結構", + "entity.create.crafting_blueprint": "合成藍圖", "entity.create.gantry_contraption": "門式結構", + "entity.create.potato_projectile": "馬鈴薯彈藥", "entity.create.seat": "坐墊", "entity.create.stationary_contraption": "固定結構", "entity.create.super_glue": "強力膠", @@ -438,10 +462,12 @@ "item.create.chocolate_glazed_berries": "巧克力甜莓", "item.create.chromatic_compound": "異彩化合物", "item.create.cinder_flour": "地獄麵粉", + "item.create.copper_backtank": "銅製後背包", "item.create.copper_ingot": "銅錠", "item.create.copper_nugget": "銅粒", "item.create.copper_sheet": "銅板", "item.create.crafter_slot_cover": "合成器蓋板", + "item.create.crafting_blueprint": "合成藍圖", "item.create.crushed_aluminum_ore": "碎狀鋁礦石", "item.create.crushed_brass": "碎狀黃銅", "item.create.crushed_copper_ore": "碎狀銅礦石", @@ -456,7 +482,8 @@ "item.create.crushed_tin_ore": "碎狀錫礦石", "item.create.crushed_uranium_ore": "碎狀鈾礦石", "item.create.crushed_zinc_ore": "碎狀鋅礦石", - "item.create.deforester": "連根拔樹斧", + "item.create.diving_boots": "潛水鞋", + "item.create.diving_helmet": "潛水頭盔", "item.create.dough": "麵團", "item.create.electron_tube": "真空管", "item.create.empty_blaze_burner": "空的烈焰使者動力爐", @@ -466,17 +493,20 @@ "item.create.furnace_minecart_contraption": "裝配過的機械礦車", "item.create.goggles": "MR護目鏡", "item.create.golden_sheet": "金板", - "item.create.handheld_blockzapper": "方塊放置器", "item.create.handheld_worldshaper": "地形雕塑器", "item.create.honey_bucket": "蜂蜜桶", "item.create.honeyed_apple": "蜂蜜蘋果", - "item.create.integrated_circuit": "IC板", + "item.create.incomplete_cogwheel": "未完成的小齒輪", + "item.create.incomplete_large_cogwheel": "未完成的大齒輪", + "item.create.incomplete_precision_mechanism": "未完成的精確控制器", "item.create.iron_sheet": "鐵板", - "item.create.lapis_sheet": "青金石板", + "item.create.linked_controller": "遙控器", "item.create.minecart_contraption": "裝修過的礦車", "item.create.minecart_coupling": "礦車連結器", "item.create.polished_rose_quartz": "磨製玫瑰石英", + "item.create.potato_cannon": "馬鈴薯大砲", "item.create.powdered_obsidian": "黑曜石粉末", + "item.create.precision_mechanism": " 精確控制器", "item.create.propeller": "扇葉", "item.create.red_sand_paper": "紅砂紙", "item.create.refined_radiance": "光輝石", @@ -621,8 +651,8 @@ "advancement.create.flywheel.desc": "將引擎成功連接到飛輪。", "advancement.create.overstress_flywheel": "壓力過大", "advancement.create.overstress_flywheel.desc": "超載熔爐引擎。", - "advancement.create.integrated_circuit": "複雜的運算", - "advancement.create.integrated_circuit.desc": "合成IC板。", + "advancement.create.precision_mechanism": "複雜的好奇心", + "advancement.create.precision_mechanism.desc": "組裝一個精確控制器", "advancement.create.mechanical_arm": "忙碌的手!", "advancement.create.mechanical_arm.desc": "製作機械手臂,選擇輸入和輸出,放置並給它動能; 然後看著它完成所有你交代的工作。", "advancement.create.musical_arm": "沒人能在我的BGM裡打敗我!", @@ -645,16 +675,12 @@ "advancement.create.refined_radiance.desc": "製作光輝石", "advancement.create.chromatic_age": "繽紛時代", "advancement.create.chromatic_age.desc": "創造出光與影的機殼。", - "advancement.create.zapper": "專業的建築師", - "advancement.create.zapper.desc": "製作一個非常方便的方塊放置器", - "advancement.create.upgraded_zapper": "來自異世界的超頻", - "advancement.create.upgraded_zapper.desc": "製作一個完全升級的方塊放置器", "advancement.create.wand_of_symmetry": "簡單的鏡面幾何學", "advancement.create.wand_of_symmetry.desc": "製作一個對稱杖", - "advancement.create.deforester": "超時空砍伐", - "advancement.create.deforester.desc": "製作一個連根拔樹斧,然後跟你後院的樹林道別吧", "advancement.create.extendo_grip": "piu piu piu!", "advancement.create.extendo_grip.desc": "拿到一個伸縮機械手", + "advancement.create.potato_cannon": "噗~碰", + "advancement.create.potato_cannon.desc": "用馬鈴薯大砲擊殺一隻怪物", "advancement.create.dual_extendo_grip": "piu——piu——piu——", "advancement.create.dual_extendo_grip.desc": "雙持伸縮機械手進一步加長觸碰距離", "advancement.create.eob": "Beta版結束", @@ -667,15 +693,30 @@ "itemGroup.create.palettes": "動力機械建築與裝飾方塊", "death.attack.create.crush": "%1$s被壓扁了", + "death.attack.create.crush.player": "%1$s 被 %2$s 打包丟進粉碎輪", "death.attack.create.fan_fire": "%1$s想接受熱風的洗禮", + "death.attack.create.fan_fire.player": "%1$s 被 %2$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.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 被布穀鳥鐘炸得粉身碎骨", "create.block.deployer.damage_source_name": "機械手", "create.block.cart_assembler.invalid": "將您的礦車裝修站放在鐵軌上", + "create.menu.return": "回到選單", + "create.menu.configure": "設定", + "create.menu.ponder_index": "示範目錄", + "create.menu.project_page": "專案頁面", + "create.menu.report_bugs": "回報問題", + "create.menu.support": "支持我們", + "create.recipe.crushing": "粉碎", "create.recipe.milling": "研磨", "create.recipe.fan_washing": "批次洗滌", @@ -695,11 +736,19 @@ "create.recipe.automatic_shaped": "自動合成", "create.recipe.block_cutting": "方塊切割", "create.recipe.wood_cutting": "木材切割", - "create.recipe.blockzapper_upgrade": "方塊放置器升級", "create.recipe.sandpaper_polishing": "砂紙打磨", "create.recipe.mystery_conversion": "神秘轉化", "create.recipe.spout_filling": "注液", "create.recipe.draining": "分液", + "create.recipe.sequenced_assembly": "排序中的步驟", + "create.recipe.assembly.next": "下一步:%1$s", + "create.recipe.assembly.step": "步驟 %1$s:", + "create.recipe.assembly.progress": "進度:%1$s/%2$s", + "create.recipe.assembly.spout_filling_fluid": "注入:%1$s", + "create.recipe.assembly.deploying_item": "使用:%1$s", + "create.recipe.assembly.cutting": "用鋸子切", + "create.recipe.assembly.repeat": "重複 %1$s 次", + "create.recipe.assembly.junk": "有機率得到垃圾", "create.recipe.processing.chance": "%1$s%%概率", "create.recipe.heat_requirement.none": "不需要加熱", "create.recipe.heat_requirement.heated": "普通加熱", @@ -752,20 +801,15 @@ "create.orientation.alongZ": "以z軸對齊", "create.orientation.alongX": "以x軸對齊", - "create.gui.blockzapper.title": "方塊放置機", - "create.gui.blockzapper.replaceMode": "替換模式", - "create.gui.blockzapper.searchDiagonal": "對角線延伸", - "create.gui.blockzapper.searchFuzzy": "忽視種類分界", - "create.gui.blockzapper.range": "延伸範圍", - "create.gui.blockzapper.needsUpgradedAmplifier": "需要升級範圍擴大器", - "create.gui.blockzapper.patternSection": "模式", - "create.gui.blockzapper.pattern.solid": "實心", - "create.gui.blockzapper.pattern.checkered": "棋盤", - "create.gui.blockzapper.pattern.inversecheckered": "反轉棋盤", - "create.gui.blockzapper.pattern.chance25": "25% ", - "create.gui.blockzapper.pattern.chance50": "50% ", - "create.gui.blockzapper.pattern.chance75": "75% ", "create.gui.terrainzapper.title": "地形雕塑器", + "create.gui.terrainzapper.searchDiagonal": "跟隨對角線", + "create.gui.terrainzapper.searchFuzzy": "忽略材質邊界", + "create.gui.terrainzapper.pattern.solid": "填滿", + "create.gui.terrainzapper.pattern.checkered": "棋盤狀", + "create.gui.terrainzapper.pattern.inversecheckered": "反轉棋盤狀", + "create.gui.terrainzapper.pattern.chance25": "隨機填滿 25% 的面積", + "create.gui.terrainzapper.pattern.chance50": "隨機填滿 50% 的面積", + "create.gui.terrainzapper.pattern.chance75": "隨機填滿 75% 的面積", "create.gui.terrainzapper.placement": "放置模式", "create.gui.terrainzapper.placement.merged": "結合", "create.gui.terrainzapper.placement.attached": "依附", @@ -774,6 +818,8 @@ "create.gui.terrainzapper.brush.cuboid": "矩形體", "create.gui.terrainzapper.brush.sphere": "球體", "create.gui.terrainzapper.brush.cylinder": "圓柱體", + "create.gui.terrainzapper.brush.surface": "表面", + "create.gui.terrainzapper.brush.cluster": "群組", "create.gui.terrainzapper.tool": "填充類型", "create.gui.terrainzapper.tool.fill": "填充", "create.gui.terrainzapper.tool.place": "覆寫", @@ -783,19 +829,8 @@ "create.gui.terrainzapper.tool.flatten": "平整", "create.terrainzapper.shiftRightClickToSet": "Shift+滑鼠右鍵 以設定雕塑類型", - - "create.blockzapper.usingBlock": "使用:%1$s", - "create.blockzapper.componentUpgrades": "零件升級:", - "create.blockzapper.component.body": "放置器機體", - "create.blockzapper.component.amplifier": "範圍擴大器", - "create.blockzapper.component.accelerator": "射擊加速器", - "create.blockzapper.component.retriever": "物品撿回器", - "create.blockzapper.component.scope": "距離觀察鏡", - "create.blockzapper.componentTier.none": "無", - "create.blockzapper.componentTier.brass": "黃銅", - "create.blockzapper.componentTier.chromatic": "異彩化合物", - "create.blockzapper.leftClickToSet": "左鍵點擊方塊以設定方塊種類", - "create.blockzapper.empty": "方塊不足!", + "create.terrainzapper.usingBlock": "使用:%1$s", + "create.terrainzapper.leftClickToSet": "左鍵點擊方塊可以設定材質", "create.minecart_coupling.two_couplings_max": "礦車無法被連接兩個以上的礦車連結器", "create.minecart_coupling.unloaded": "有一部份礦車存在於未讀取區塊中", @@ -1026,6 +1061,11 @@ "create.item_attributes.in_item_group.inverted": "不屬於%1$s", "create.item_attributes.added_by": "由%1$s添加", "create.item_attributes.added_by.inverted": "不是由%1$s添加", + "create.item_attributes.shulker_level": "界伏盒是 %1$s", + "create.item_attributes.shulker_level.inverted": "界伏盒不是 %1$s", + "create.item_attributes.shulker_level.full": "滿的", + "create.item_attributes.shulker_level.empty": "空的", + "create.item_attributes.shulker_level.partial": "有裝東西但沒滿", "create.item_attributes.has_enchant": "有附魔效果%1$s", "create.item_attributes.has_enchant.inverted": "沒有附魔效果%1$s", "create.item_attributes.color": "已被染色成 %1$s", @@ -1121,6 +1161,26 @@ "create.tooltip.chute.fans_pull_up": "鼓風機從下方進行吸引", "create.tooltip.chute.fans_pull_down": "鼓風機從上方進行吸引", "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.linked_controller.bind_mode": "綁定模式", + "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", + + "create.crafting_blueprint.crafting_slot": "材料格", + "create.crafting_blueprint.display_slot": "顯示格", + "create.crafting_blueprint.inferred": "根據配方推論", + "create.crafting_blueprint.manually_assigned": "手動設定", + "create.crafting_blueprint.secondary_display_slot": "次要顯示格", + "create.crafting_blueprint.optional": "可選的", + + "create.potato_cannon.ammo.attack_damage": "%1$s 攻擊傷害", + "create.potato_cannon.ammo.reload_ticks": "%1$s 攻擊速度", + "create.potato_cannon.ammo.knockback": "%1$s 擊退", "create.hint.hose_pulley.title": "無限供應", "create.hint.hose_pulley": "目標液體為無限供應", @@ -1149,19 +1209,41 @@ "create.command.killTPSCommand.argument.tickTime": "tickTime", "create.contraption.minecart_contraption_too_big": "這個礦車結構太大了而無法撿取", + "create.contraption.minecart_contraption_illegal_pickup": "一股神秘的力量將這個礦車結構與世界綁在一起", "_": "->------------------------] Subtitles [------------------------<-", - "create.subtitle.schematicannon_launch_block": "藍圖大炮發射", - "create.subtitle.schematicannon_finish": "藍圖大炮完成任務", - "create.subtitle.slime_added": "黏液擠壓", + "create.subtitle.contraption_disassemble": "結構停止", + "create.subtitle.peculiar_bell_use": "黃銅鐘聲", + "create.subtitle.mixing": "攪拌機噪音", "create.subtitle.mechanical_press_activation_belt": "液壓機工作", - "create.subtitle.mechanical_press_activation": "液壓機工作", - "create.subtitle.blockzapper_deny": "放置失敗", - "create.subtitle.blockzapper_confirm": "選擇方塊", - "create.subtitle.blockzapper_place": "放置方塊", + "create.subtitle.fwoomp": "馬鈴薯大砲發射", + "create.subtitle.worldshaper_place": "地形塑造器發射聲", + "create.subtitle.crushing_1": "粉碎機咀嚼聲", + "create.subtitle.depot_slide": "物品滑動聲", + "create.subtitle.saw_activate_stone": "機械鋸子聲", "create.subtitle.blaze_munch": "烈焰使者開心地吃著", + "create.subtitle.schematicannon_finish": "藍圖大炮完成任務", + "create.subtitle.haunted_bell_use": "靈魂鐘敲響", + "create.subtitle.scroll_value": "滾動輸入聲", + "create.subtitle.crafter_craft": "機械合成器合成聲", + "create.subtitle.controller_put": "遙控器放置聲", + "create.subtitle.cranking": "手搖把手轉動聲", + "create.subtitle.wrench_remove": "零件移除聲", + "create.subtitle.cogs": "齒輪隆隆聲", + "create.subtitle.slime_added": "黏液擠壓", + "create.subtitle.potato_hit": "食物撞擊聲", + "create.subtitle.saw_activate_wood": "機械鋸子運作聲", + "create.subtitle.haunted_bell_convert": "靈魂鐘轉化聲", + "create.subtitle.deployer_polish": "機械手拋光聲", + "create.subtitle.controller_click": "遙控器按鍵聲", + "create.subtitle.schematicannon_launch_block": "藍圖大炮發射", + "create.subtitle.copper_armor_equip": "潛水裝裝備聲", + "create.subtitle.controller_take": "拿下遙控器", + "create.subtitle.mechanical_press_activation": "液壓機工作", + "create.subtitle.contraption_assemble": "結構移動", + "create.subtitle.crafter_click": "機械合成器工作聲", "_": "->------------------------] Item Descriptions [------------------------<-", @@ -1181,14 +1263,6 @@ "block.create.metal_bracket.tooltip": "金屬支架", "block.create.metal_bracket.tooltip.summary": "用來裝飾_傳動軸_,_齒輪_和_管道_。", - "block.create.copper_casing.tooltip": "銅製機殼", - "block.create.copper_casing.tooltip.summary": "具備多種用途的堅固機殼,也可用於裝飾。", - "block.create.copper_casing.tooltip.condition1": "對液體管道使用時", - "block.create.copper_casing.tooltip.behaviour1": "會把管道裝入機殼,裝進機殼的管道會與其他管道分開,以免它們自動相連。", - - "block.create.encased_fluid_pipe.tooltip": "液體管道箱", - "block.create.encased_fluid_pipe.tooltip.summary": "用銅機殼加固后的液體管道。", - "block.create.seat.tooltip": "坐墊", "block.create.seat.tooltip.summary": "坐下來享受旅程吧!坐墊將會把玩家固定在一個移動裝置上。也可以用來作為居家裝飾,畢竟他有許多顏色。", "block.create.seat.tooltip.condition1": "對坐墊右鍵", @@ -1197,65 +1271,6 @@ "item.create.blaze_cake.tooltip": "熔岩蛋糕", "item.create.blaze_cake.tooltip.summary": "對辛苦的_烈焰使者_的美味款待。讓他們興奮起來吧!", - "block.create.fluid_pipe.tooltip": "液體管道", - "block.create.fluid_pipe.tooltip.summary": "用來傳輸_液體_。需要一個_機械泵_來提供壓強。", - "block.create.fluid_pipe.tooltip.condition1": "轉移液體", - "block.create.fluid_pipe.tooltip.behaviour1": "可以與_液體容器_如_儲存罐_或_作業盆_相連_。裸露的_管道_末端也可以排放或抽取液體。注意別漏水了!", - "block.create.fluid_pipe.tooltip.condition2": "使用扳手對其右鍵時", - "block.create.fluid_pipe.tooltip.behaviour2": "在狀況許可的情況下在管道上安裝透明窗", - - "block.create.hose_pulley.tooltip": "軟管滑輪", - "block.create.hose_pulley.tooltip.summary": "用來在_世界_中放置或排放大量的液體。", - "block.create.hose_pulley.tooltip.condition1": "接入機械時", - "block.create.hose_pulley.tooltip.behaviour1": "升高或降低軟管,軟管的位置決定了抽取或填充液體的高度。", - "block.create.hose_pulley.tooltip.condition2": "當軟管滑輪抽取液體時", - "block.create.hose_pulley.tooltip.behaviour2": "開始從軟管末端將其從中取出_液體方塊_。巨大的液體湖將被認定是_無限_的", - "block.create.hose_pulley.tooltip.condition3": "當液體從軟管滑輪中排出時", - "block.create.hose_pulley.tooltip.behaviour3": "開始向世界填充液體,直到達到_軟管末端_的高度。", - - "block.create.fluid_tank.tooltip": "液體儲存罐", - "block.create.fluid_tank.tooltip.summary": "_儲存_任意_液體_", - "block.create.fluid_tank.tooltip.condition1": "使用扳手右鍵", - "block.create.fluid_tank.tooltip.behaviour1": "改變可選窗口", - - "block.create.creative_fluid_tank.tooltip": "創造液體儲存罐", - "block.create.creative_fluid_tank.tooltip.summary": "此液體儲存罐能夠_無限的復制_任何液體。", - "block.create.creative_fluid_tank.tooltip.condition1": "罐中裝有液體時", - "block.create.creative_fluid_tank.tooltip.behaviour1": "任意的_液體提取設備_能夠從中提取無窮無盡的指定液體,液體的導入功能同時也會無效。", - "block.create.creative_fluid_tank.tooltip.condition2": "扳手右擊時", - "block.create.creative_fluid_tank.tooltip.behaviour2": "打開關閉窗戶", - - "block.create.fluid_valve.tooltip": "液體閥門", - "block.create.fluid_valve.tooltip.summary": "阻止液體沿管道向前流動。", - "block.create.fluid_valve.tooltip.condition1": "控制流量", - "block.create.fluid_valve.tooltip.behaviour1": "施加的_動能_將迫使閥門關閉,從而阻止液體流動。_逆轉旋轉方向_以重新打開閥門。", - - "block.create.mechanical_pump.tooltip": "機械泵", - "block.create.mechanical_pump.tooltip.summary": "_接入機械_,能迫使液體_沿管道指定方向移動_。在兩個方向上都有_最大的作用範圍_。(默認為16個方塊距離)", - "block.create.mechanical_pump.tooltip.condition1": "液體流向", - "block.create.mechanical_pump.tooltip.behaviour1": "_接入機械_后會產生壓力,迫使液體通過管道。_反轉機械_的方向以切換液體_流向_。", - "block.create.mechanical_pump.tooltip.control1": "扳手右鍵時", - "block.create.mechanical_pump.tooltip.action1": "反轉泵的方向,從而改變默認的液體流向", - - "block.create.smart_fluid_pipe.tooltip": "智慧液體管道", - "block.create.smart_fluid_pipe.tooltip.summary": "帶有過濾器的_液體管道_。可以指定通過哪個_液體_。", - "block.create.smart_fluid_pipe.tooltip.condition1": "當液體進入時", - "block.create.smart_fluid_pipe.tooltip.behaviour1": "進入的液體與_過濾器_不匹配時,智慧管道將_阻止_其通過。", - "block.create.smart_fluid_pipe.tooltip.condition2": "與_液體容器相鄰_時", - "block.create.smart_fluid_pipe.tooltip.behaviour2": "從_任何容器_開始流動的_智慧管道_只會抽取與其過濾器匹配的液體。", - - "block.create.spout.tooltip": "注液器", - "block.create.spout.tooltip.summary": "一種用來_裝罐_的機器。", - "block.create.spout.tooltip.condition1": "液體傳輸", - "block.create.spout.tooltip.behaviour1": "當下方放置類似_玻璃瓶_,_桶_這樣的液體容器物品時,注液器將試圖將自身儲存的液體注入到下方的_液體容器物品_中。", - "block.create.spout.tooltip.condition2": "液體自動化", - "block.create.spout.tooltip.behaviour2": "注液器位於_輸送帶_或者_置物臺_上方時,將自動為流水線上的_液體容器物品_進行_注入_。", - - "block.create.item_drain.tooltip": "分液池", - "block.create.item_drain.tooltip.summary": "一種用來_抽空液體容器物品_的置物臺", - "block.create.item_drain.tooltip.condition1": "液體傳輸", - "block.create.item_drain.tooltip.behaviour1": "當從側面導入諸如_桶_或_瓶子_之類的_液體容器物品_時,_分液池_將嘗試將其倒入其_自身的液體庫存_中。空的_液體容器物品_將被彈出至_另一側_。", - "item.create.wand_of_symmetry.tooltip": "對稱杖", "item.create.wand_of_symmetry.tooltip.summary": "完美地鏡面復制工作區域內的方塊放置於破壞", "item.create.wand_of_symmetry.tooltip.condition1": "當在熱鍵欄時", @@ -1267,15 +1282,6 @@ "item.create.wand_of_symmetry.tooltip.control3": "當潛行右鍵時", "item.create.wand_of_symmetry.tooltip.action3": "打開_gui介面_", - "item.create.handheld_blockzapper.tooltip": "方塊放置器", - "item.create.handheld_blockzapper.tooltip.summary": "新穎的小工具,可以遠距離放置或更換方塊。", - "item.create.handheld_blockzapper.tooltip.control1": "當左鍵方塊時", - "item.create.handheld_blockzapper.tooltip.action1": "設定放置此方塊。", - "item.create.handheld_blockzapper.tooltip.control2": "當右鍵方塊時", - "item.create.handheld_blockzapper.tooltip.action2": "_放置_或_替換_目標方塊。", - "item.create.handheld_blockzapper.tooltip.control3": "當潛行右鍵時", - "item.create.handheld_blockzapper.tooltip.action3": "打開_gui介面_", - "item.create.handheld_worldshaper.tooltip": "環境塑形器", "item.create.handheld_worldshaper.tooltip.summary": "_大面積_更改地形的手持工具", "item.create.handheld_worldshaper.tooltip.control1": "當左鍵方塊時", @@ -1290,13 +1296,19 @@ "item.create.tree_fertilizer.tooltip.condition1": "在樹苗上使用時", "item.create.tree_fertilizer.tooltip.behaviour1": "無論_生長時間_多少,直接長大", - "item.create.deforester.tooltip": "連根拔樹斧", - "item.create.deforester.tooltip.summary": "_連根拔樹斧_,從最根砍樹時,能夠瞬間連根拔起一棵樹", - "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.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.filter.tooltip": "過濾器", "item.create.filter.tooltip.summary": "將物品更精確地進行_篩選分類_,可以同時_篩選_多個物品或者將已標記的_過濾器_放在另一個_過濾器_里_嵌套_使用。", @@ -1372,13 +1384,6 @@ "block.create.turntable.tooltip": "轉盤", "block.create.turntable.tooltip.summary": "讓旋轉機械給你帶來一場刺激的旋轉風車體驗。", - "block.create.portable_fluid_interface.tooltip": "移動液體接口", - "block.create.portable_fluid_interface.tooltip.summary": "為機械活塞、裝配礦車、旋轉軸承、滑輪_等移動結構_設計的_液體接口_,_移動結構_和_固定結構_之間的液體交換站,兩個會面的接口必須彼此面對且彼此隔開1-2個方塊。", - "block.create.portable_fluid_interface.tooltip.condition1": "裝配在移動結構上時", - "block.create.portable_fluid_interface.tooltip.behaviour1": "移動到能夠滿足與_固定結構_上的_移動式液體接口_對接的條件后,移動結構會_短暫地停下_,開始對接,並直接與_移動結構上的_液體儲存罐_交互,進行液體的_導入導出_。", - "block.create.portable_fluid_interface.tooltip.condition2": "被紅石激活時", - "block.create.portable_fluid_interface.tooltip.behaviour2": "立即終止任何活動的連接。", - "block.create.stockpile_switch.tooltip": "存量偵測器", "block.create.stockpile_switch.tooltip.summary": "根據連接的容器_儲存空間_的占用情況切換紅石訊號強度。", "block.create.stockpile_switch.tooltip.condition1": "低於_下線_或高於_上線_時", @@ -1412,42 +1417,82 @@ "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.shadow_steel.tooltip": "暗影鋼", "item.create.shadow_steel.tooltip.summary": "一種用_虛空_鍛造的化合物材料。", + "item.create.shadow_steel.tooltip.condition1": "工作進度", + "item.create.shadow_steel.tooltip.behaviour1": "在未來的更新中會更新更多用途", + + "item.create.linked_controller.tooltip": "遙控器", + "item.create.linked_controller.tooltip.summary": "提供_六個_連接到相對應_按鍵_的_無線紅石訊號機_ _手持的控制_", + "item.create.linked_controller.tooltip.condition1": "點擊右鍵時", + "item.create.linked_controller.tooltip.behaviour1": "_切換_遙控器,當遙控器啟動時你會失去_移動控制_", + "item.create.linked_controller.tooltip.condition2": "當右鍵時", + "item.create.linked_controller.tooltip.behaviour2": "打開_設定面板_", + "item.create.linked_controller.tooltip.condition3": "當對無線紅石訊號機點右鍵時", + "item.create.linked_controller.tooltip.behaviour3": "開啟_綁定模式_。按_六個控制鍵_的其中一個來綁定_頻率_到遙控器上", + "item.create.linked_controller.tooltip.condition4": "當對講台按右鍵時", + "item.create.linked_controller.tooltip.behaviour4": "把遙控器放到講台上,可以更方便的控制它。(蹲下右鍵取回)", + + "item.create.diving_helmet.tooltip": "潛水頭盔", + "item.create.diving_helmet.tooltip.summary": "和_銅製後背包_一起裝備時可以延長在_水下呼吸_的時間", + "item.create.diving_helmet.tooltip.condition1": "當裝備時", + "item.create.diving_helmet.tooltip.behaviour1": "提昇_水下呼吸效果_,會緩慢的抽取銅製後背包中的_壓縮空氣_", + + "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.diving_boots.tooltip": "潛水鞋", + "item.create.diving_boots.tooltip.summary": "一雙_沈重的鞋子_,提供更好的水下移動", + "item.create.diving_boots.tooltip.condition1": "當裝備時", + "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.minecart_coupling.tooltip": "礦車連軸器", "item.create.minecart_coupling.tooltip.summary": "將多個_礦車_或運輸結構鏈接在一起,構成雄偉的火車。", "item.create.minecart_coupling.tooltip.condition1": "作用與礦車時", "item.create.minecart_coupling.tooltip.behaviour1": "將兩個礦車耦合在一起,在移動時將它們保持_恒定的距離_。", - "create.tooltip.wip": "半成品", - "create.tooltip.workInProgress": "尚在製作中!", - "create.tooltip.randomWipDescription0": "禁止將此物品給屁孩。", - "create.tooltip.randomWipDescription1": "每~一~次~你使用此物品時,就會使一隻小熊貓死亡。", - "create.tooltip.randomWipDescription2": "使用此物品請自負後果。", - "create.tooltip.randomWipDescription3": "快走開,這不是你要找的東西(搖手指", - "create.tooltip.randomWipDescription4": "啟動自爆模式,10、9、8...。", - "create.tooltip.randomWipDescription5": "你已經沒有退路了。", - "create.tooltip.randomWipDescription6": "作者我將不負任何你使用此物所造成的責任。", - "create.tooltip.randomWipDescription7": "這東西不是給你用的,再找找吧!", - "create.tooltip.randomWipDescription8": "用了就死定了。", + "block.create.peculiar_bell.tooltip": "黃銅鐘", + "block.create.peculiar_bell.tooltip.summary": "一個裝飾性的_鐘_,放在_靈魂火_正上方會有意想不到的副作用", + + "block.create.haunted_bell.tooltip": "靈魂鐘", + "block.create.haunted_bell.tooltip.summary": "一個受到地獄亡魂_詛咒的鐘_", + "block.create.haunted_bell.tooltip.condition1": "當拿者或是被敲響時", + "block.create.haunted_bell.tooltip.behaviour1": "標示附近_不夠亮_、會生成_敵對生物_的地方", "_": "->------------------------] Ponder Content [------------------------<-", - "create.ponder.hold_to_ponder": "按住 [%1$s] 來思考此物品", + "create.ponder.hold_to_ponder": "按住 [%1$s] 來查看此物品的教學", "create.ponder.subject": "本場景的主題", - "create.ponder.pondering": "思考有關於...", + "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.replay": "重放", + "create.ponder.replay": "重播", "create.ponder.think_back": "返回", - "create.ponder.slow_text": "降低文字顯示速度", + "create.ponder.slow_text": "放慢文字顯示速度", + "create.ponder.exit": "離開", + "create.ponder.welcome": "歡迎來到教學", + "create.ponder.categories": "Create 中的分類", + "create.ponder.index_description": "點擊其中一個圖像查看和他相關的物品以及方塊", + "create.ponder.index_title": "教學首頁", "create.ponder.shared.movement_anchors": "有了機殼底盤和強力膠就可以移動大型結構", "create.ponder.shared.rpm32": "32 RPM", "create.ponder.shared.sneak_and": "潛行 +", @@ -1459,14 +1504,14 @@ "create.ponder.shared.rpm16": "16 RPM", "create.ponder.tag.kinetic_sources": "動能產生裝置", "create.ponder.tag.kinetic_sources.description": "該裝置能夠產生動能", - "create.ponder.tag.contraption_actor": "Contraption Actors", - "create.ponder.tag.contraption_actor.description": "Components which expose special behaviour when attached to a moving contraption", + "create.ponder.tag.contraption_actor": "特殊方塊", + "create.ponder.tag.contraption_actor.description": "附加到移動裝置上時表現出特殊行為的方塊", "create.ponder.tag.arm_targets": "機械手臂的目標物", "create.ponder.tag.arm_targets.description": "該裝置可作為機械手臂的工作目標", "create.ponder.tag.logistics": "傳輸物品", "create.ponder.tag.logistics.description": "該裝置用於物品的傳輸", - "create.ponder.tag.movement_anchor": "Movement Anchors", - "create.ponder.tag.movement_anchor.description": "Components which allow the creation of moving contraptions, animating an attached structure in a variety of ways", + "create.ponder.tag.movement_anchor": "運動錨點", + "create.ponder.tag.movement_anchor.description": "允許建立移動裝置的元件,以各種方式為連接的結構設置動畫", "create.ponder.tag.creative": "創造模式", "create.ponder.tag.creative.description": "該裝置無法在生存模式中獲得", "create.ponder.tag.kinetic_relays": "動能傳遞方塊", @@ -1595,6 +1640,7 @@ "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_3": "如果在裝修站鎖定其方向,則結構方向不會隨礦車方向改變", "create.ponder.cart_assembler_rails.header": "其他種類的礦車和鐵軌", "create.ponder.cart_assembler_rails.text_1": "放在普通鐵軌上的礦車裝修站不會影響礦車的動作", @@ -1635,402 +1681,496 @@ "create.ponder.clockwork_bearing.text_7": "你必須確保時針分針結構間未被使用強力膠之類的相連零件", "create.ponder.clockwork_bearing.text_8": "分針結構此時將正常運作", - "create.ponder.clutch.header": "使用離合器控制動能", - "create.ponder.clutch.text_1": "離合器能將動能直線傳遞", - "create.ponder.clutch.text_2": "當離合器被啟動,離合器會中斷動能傳遞", + "create.ponder.clutch.header": "使用離合器控制動能", + "create.ponder.clutch.text_1": "離合器能將動能直線傳遞", + "create.ponder.clutch.text_2": "當離合器被啟動,離合器會中斷動能傳遞", - "create.ponder.cog_speedup.header": "使用大小齒輪來變速", - "create.ponder.cog_speedup.text_1": "大齒輪與小齒輪可以斜向傳遞動能", - "create.ponder.cog_speedup.text_2": "從大齒輪傳遞動能至小齒輪時,轉速加倍", - "create.ponder.cog_speedup.text_3": "從小齒輪傳遞動能至大齒輪時,轉速減半", - - "create.ponder.cogwheel.header": "使用齒輪來傳遞動能", - "create.ponder.cogwheel.text_1": "齒輪會將動力傳遞至臨近的齒輪", - "create.ponder.cogwheel.text_2": "以此方式連接的齒輪,旋轉方向相反", + "create.ponder.cog_speedup.header": "使用大小齒輪來變速", + "create.ponder.cog_speedup.text_1": "大齒輪與小齒輪可以斜向傳遞動能", + "create.ponder.cog_speedup.text_2": "從大齒輪傳遞動能至小齒輪時,轉速加倍", + "create.ponder.cog_speedup.text_3": "從小齒輪傳遞動能至大齒輪時,轉速減半", - "create.ponder.creative_motor.header": "使用創造馬達產生動能", - "create.ponder.creative_motor.text_1": "創造馬達不僅能夠手動設定輸出動能,而且體積相當小巧", - "create.ponder.creative_motor.text_2": "對其背後面板滾動滾輪,可以改變馬達的轉速", + "create.ponder.cogwheel.header": "使用齒輪來傳遞動能", + "create.ponder.cogwheel.text_1": "齒輪會將動力傳遞至臨近的齒輪", + "create.ponder.cogwheel.text_2": "以此方式連接的齒輪,旋轉方向相反", - "create.ponder.crushing_wheels.header": "使用粉碎輪處理物品", - "create.ponder.crushing_wheels.text_1": "一對粉碎輪,磨物快又準", - "create.ponder.crushing_wheels.text_2": "接入的動能必須使這兩個輪子契合轉動", - "create.ponder.crushing_wheels.text_3": "扔入或者放入的物品都會被粉碎處理", - "create.ponder.crushing_wheels.text_4": "你也可以使用自動化進行物品的輸入以及撿取", + "create.ponder.creative_fluid_tank.header": "創造液體除存罐", + "create.ponder.creative_fluid_tank.text_1": "創造液體除存罐可以提供無限的液體", + "create.ponder.creative_fluid_tank.text_2": "拿著一個液體物品點擊可以設定它", + "create.ponder.creative_fluid_tank.text_3": "現在管線網路可以無限制的從它抽取液體", + "create.ponder.creative_fluid_tank.text_4": "任何被抽進創造液體除存罐的液體都會消失", - "create.ponder.deployer.header": "使用機械手", - "create.ponder.deployer.text_1": "在機械手獲得動能後能夠模仿玩家的各種行為", - "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_3": "放在在它面前的方塊不會阻攔它的工作", - "create.ponder.deployer.text_4": "機械手可以:", - "create.ponder.deployer.text_5": "放置方塊", - "create.ponder.deployer.text_6": "使用物品", - "create.ponder.deployer.text_7": "啟動方塊", - "create.ponder.deployer.text_8": "採收方塊", - "create.ponder.deployer.text_9": "以及攻擊生物", + "create.ponder.creative_motor.header": "使用創造馬達產生動能", + "create.ponder.creative_motor.text_1": "創造馬達不僅能夠手動設定輸出動能,而且體積相當小巧", + "create.ponder.creative_motor.text_2": "對其背後面板滾動滾輪,可以改變馬達的轉速", - "create.ponder.deployer_contraption.header": "在裝置上使用機械手", - "create.ponder.deployer_contraption.text_1": "當機械手在移動的結構上時...", - "create.ponder.deployer_contraption.text_2": "機械手會對每一個經過的方塊使用裝置中任意容器內的物品", - "create.ponder.deployer_contraption.text_3": "可以透過過濾格來指定其從存儲空間中抽取的物品", + "create.ponder.crushing_wheels.header": "使用粉碎輪處理物品", + "create.ponder.crushing_wheels.text_1": "一對粉碎輪,磨物快又準", + "create.ponder.crushing_wheels.text_2": "接入的動能必須使這兩個輪子契合轉動", + "create.ponder.crushing_wheels.text_3": "扔入或者放入的物品都會被粉碎處理", + "create.ponder.crushing_wheels.text_4": "你也可以使用自動化進行物品的輸入以及撿取", - "create.ponder.deployer_modes.header": "機械手的工作模式", - "create.ponder.deployer_modes.text_1": "在設設情況下,機械手模仿玩家的右鍵", - "create.ponder.deployer_modes.text_2": "使用扳手可以將模式調整為模仿玩家的左鍵", + "create.ponder.deployer.header": "使用機械手", + "create.ponder.deployer.text_1": "在機械手獲得動能後能夠模仿玩家的各種行為", + "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_3": "放在在它面前的方塊不會阻攔它的工作", + "create.ponder.deployer.text_4": "機械手可以:", + "create.ponder.deployer.text_5": "放置方塊", + "create.ponder.deployer.text_6": "使用物品", + "create.ponder.deployer.text_7": "啟動方塊", + "create.ponder.deployer.text_8": "採收方塊", + "create.ponder.deployer.text_9": "以及攻擊生物", - "create.ponder.deployer_redstone.header": "使用紅石控制機械手", - "create.ponder.deployer_redstone.text_1": "當機械手收到紅時訊號時會停止工作", - "create.ponder.deployer_redstone.text_2": "在停止工作前,機械手會完成目前手頭上的工作", - "create.ponder.deployer_redstone.text_3": "因此,輸入脈衝訊號可以使其每次只進行一個週期的工作", - - "_": "m", - - "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.deployer_contraption.header": "在裝置上使用機械手", + "create.ponder.deployer_contraption.text_1": "當機械手在移動的結構上時...", + "create.ponder.deployer_contraption.text_2": "機械手會對每一個經過的方塊使用裝置中任意容器內的物品", + "create.ponder.deployer_contraption.text_3": "可以透過過濾格來指定其從存儲空間中抽取的物品", + + "create.ponder.deployer_modes.header": "機械手的工作模式", + "create.ponder.deployer_modes.text_1": "在設設情況下,機械手模仿玩家的右鍵", + "create.ponder.deployer_modes.text_2": "使用扳手可以將模式調整為模仿玩家的左鍵", + + "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_redstone.header": "使用紅石控制機械手", + "create.ponder.deployer_redstone.text_1": "當機械手收到紅時訊號時會停止工作", + "create.ponder.deployer_redstone.text_2": "在停止工作前,機械手會完成目前手頭上的工作", + "create.ponder.deployer_redstone.text_3": "因此,輸入脈衝訊號可以使其每次只進行一個週期的工作", + + "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.empty_blaze_burner.header": "使用空的烈焰人燃燒室", + "create.ponder.empty_blaze_burner.text_1": "手持空的烈焰人燃燒室右擊烈焰人來抓取烈焰人", + "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.empty_blaze_burner.header": "使用空的烈焰人燃燒室", - "create.ponder.empty_blaze_burner.text_1": "手持空的烈焰人燃燒室右擊烈焰人來抓取烈焰人", - "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_6": "但是,這樣的熱源不足以給機器提加工供足夠的熱量", - "create.ponder.fan_direction.header": "鼓風機的氣流", - "create.ponder.fan_direction.text_1": "鼓風機使用動能來製造氣流", - "create.ponder.fan_direction.text_2": "流速以及方向由所接收動能的強弱以及方向而定", - + "create.ponder.fan_direction.text_1": "鼓風機使用動能來製造氣流", + "create.ponder.fan_direction.text_2": "流速以及方向由所接收動能的強弱以及方向而定", + "create.ponder.fan_processing.header": "使用鼓風機加工物品", - "create.ponder.fan_processing.text_1": "當氣流吹過熔岩時,氣流會被加熱", - "create.ponder.fan_processing.text_2": "熱氣流中的物品會被冶煉", - "create.ponder.fan_processing.text_3": "但在氣流中的食物會被直接燒成灰", - "create.ponder.fan_processing.text_4": "而想要烹飪食物,必須要透過吹過火焰的氣流來煙燻食物", - "create.ponder.fan_processing.text_5": "當氣流吹過水後,便可用於洗滌物品", - "create.ponder.fan_processing.text_6": "這種加工方法可以做到不少有趣的事情", - "create.ponder.fan_processing.text_7": "鼓風機的轉速對加工的速度沒有影響,只影響氣流的吹拂距離", - "create.ponder.fan_processing.text_8": "而那些放置在置物台或者傳送帶上的物品,鼓風機也是可以處理的", - + "create.ponder.fan_processing.text_1": "當氣流吹過熔岩時,氣流會被加熱", + "create.ponder.fan_processing.text_2": "熱氣流中的物品會被冶煉", + "create.ponder.fan_processing.text_3": "但在氣流中的食物會被直接燒成灰", + "create.ponder.fan_processing.text_4": "而想要烹飪食物,必須要透過吹過火焰的氣流來煙燻食物", + "create.ponder.fan_processing.text_5": "當氣流吹過水後,便可用於洗滌物品", + "create.ponder.fan_processing.text_6": "這種加工方法可以做到不少有趣的事情", + "create.ponder.fan_processing.text_7": "鼓風機的轉速對加工的速度沒有影響,只影響氣流的吹拂距離", + "create.ponder.fan_processing.text_8": "而那些放置在置物台或者傳送帶上的物品,鼓風機也是可以處理的", + "create.ponder.fan_source.header": "使用鼓風機來產生動能", - "create.ponder.fan_source.text_1": "如鼓風機的扇葉向下朝著熱源放置,鼓風機可以藉此產生動能", - "create.ponder.fan_source.text_2": "當鼓風機接受紅石訊號後,它便會向外供給動能", - + "create.ponder.fan_source.text_1": "如鼓風機的扇葉向下朝著熱源放置,鼓風機可以藉此產生動能", + "create.ponder.fan_source.text_2": "當鼓風機接受紅石訊號後,它便會向外供給動能", + + "create.ponder.fluid_pipe_flow.header": "始用銅製管道來移動液體", + "create.ponder.fluid_pipe_flow.text_1": "液體管可以連接兩個或更多的液體來源與目標", + "create.ponder.fluid_pipe_flow.text_2": "使用扳手可以在一段直管線上開窗戶", + "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_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_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_4": "扳手可以用來開關窗戶", + + "create.ponder.fluid_tank_storage.header": "在液體罐中儲存液體", + "create.ponder.fluid_tank_storage.text_1": "液體罐中可儲存大量的液體", + "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.flywheel.header": "使用飛輪來產生動能", - "create.ponder.flywheel.text_1": "飛輪和熔爐引擎必須配套使用,方可產生動能", - "create.ponder.flywheel.text_2": "如此產生的動能具有非常大的應力值", - "create.ponder.flywheel.text_3": "使用高爐會使得引擎的效率翻倍", - + "create.ponder.flywheel.text_1": "飛輪和熔爐引擎必須配套使用,方可產生動能", + "create.ponder.flywheel.text_2": "如此產生的動能具有非常大的應力值", + "create.ponder.flywheel.text_3": "使用高爐會使得引擎的效率翻倍", + "create.ponder.funnel_compat.header": "漏斗的相容性", - "create.ponder.funnel_compat.text_1": "漏斗可以與一些其他組件互動", - "create.ponder.funnel_compat.text_2": "動力鋸", - "create.ponder.funnel_compat.text_3": "置物台", - "create.ponder.funnel_compat.text_4": "分液池", - + "create.ponder.funnel_compat.text_1": "漏斗可以與一些其他組件互動", + "create.ponder.funnel_compat.text_2": "動力鋸", + "create.ponder.funnel_compat.text_3": "置物台", + "create.ponder.funnel_compat.text_4": "分液池", + "create.ponder.funnel_direction.header": "物流方向", - "create.ponder.funnel_direction.text_1": "直接放置時,漏斗會將物品從容器中取出", - "create.ponder.funnel_direction.text_2": "潛行時放置時,漏斗會將物品置入容器中", - "create.ponder.funnel_direction.text_3": "使用扳手可以改變漏斗的存/取模式", - "create.ponder.funnel_direction.text_4": "對大多數朝向放置的漏斗都具有此特性", - "create.ponder.funnel_direction.text_5": "在傳送帶末端放置的漏斗會根據傳送帶的傳動方向存/取物品", - + "create.ponder.funnel_direction.text_1": "直接放置時,漏斗會將物品從容器中取出", + "create.ponder.funnel_direction.text_2": "潛行時放置時,漏斗會將物品置入容器中", + "create.ponder.funnel_direction.text_3": "使用扳手可以改變漏斗的存/取模式", + "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_redstone.text_1": "紅石訊號會使漏斗停止工作", + "create.ponder.funnel_transfer.header": "直接運輸", - "create.ponder.funnel_transfer.text_1": "漏斗無法將物品傳輸到非開放式的物品欄中", - "create.ponder.funnel_transfer.text_2": "溜槽和智慧溜槽更適用於這樣的場景", - "create.ponder.funnel_transfer.text_3": "水平傳輸也是如此,也許傳送帶更方便快捷", - + "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.text_2": "如此產生的動能具有非常大的應力值", - "create.ponder.furnace_engine.text_3": "使用高爐會使得引擎的效率翻倍", - + "create.ponder.furnace_engine.text_1": "熔爐引擎會在與其相連熔爐工作時生產動能", + "create.ponder.furnace_engine.text_2": "如此產生的動能具有非常大的應力值", + "create.ponder.furnace_engine.text_3": "使用高爐會使得引擎的效率翻倍", + "create.ponder.gantry_carriage.header": "使用起重機取物器", - "create.ponder.gantry_carriage.text_1": "起重機取物器可以被放置在起重機杆上,並且可以沿著起重機杆運動", - "create.ponder.gantry_carriage.text_2": "起重機可以移動其黏附的方塊", - + "create.ponder.gantry_carriage.text_1": "起重機取物器可以被放置在起重機杆上,並且可以沿著起重機杆運動", + "create.ponder.gantry_carriage.text_2": "起重機可以移動其黏附的方塊", + "create.ponder.gantry_cascaded.header": "串聯起重機", - "create.ponder.gantry_cascaded.text_1": "無需強力膠,取物器便可與起重機杆相連", - "create.ponder.gantry_cascaded.text_2": "即使是在移動的起重機杆上也是如此", - "create.ponder.gantry_cascaded.text_3": "因此,起重機系統可以串聯起來,如此可以影響到多軸向的運動", - + "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_4": "在旋轉傳遞中,此規則同樣適用", - + "create.ponder.gantry_direction.text_1": "起重機杆可以有相反的方向", + "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_2": "作為替代,杆上的動能會傳遞到取物器的輸出杆上", - + "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": "反轉齒輪箱可以直線傳輸旋轉", - "create.ponder.gearshift.text_2": "通入紅石訊號後,輸出端的旋轉方向會被反轉", - + "create.ponder.gearshift.text_1": "反轉齒輪箱可以直線傳輸旋轉", + "create.ponder.gearshift.text_2": "通入紅石訊號後,輸出端的旋轉方向會被反轉", + "create.ponder.hand_crank.header": "使用手搖把手產生動能", - "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_1": "玩家可以使用手搖把手來手動產生動能", + "create.ponder.hand_crank.text_2": "按住右鍵可以逆時針旋轉它", + "create.ponder.hand_crank.text_3": "它產生的轉速相對較高", + "create.ponder.hand_crank.text_4": "潛行長按右鍵可以順時針旋轉它", + + "create.ponder.hose_pulley.header": "使用軟管滑輪抽取、填滿液體", + "create.ponder.hose_pulley.text_1": "軟管滑輪可以用來抽取、填滿大量的液體", + "create.ponder.hose_pulley.text_2": "你可以透過輸入轉動來控制軟管的高度", + "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_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.text_3": "管線網路可以無限的抽取、排放液體到海洋中而不影響海洋", + + "create.ponder.hose_pulley_level.header": "軟管滑輪抽取、填滿水平面", + "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": "而填充工作將由下而上進行將由上而下進行", + "create.ponder.hose_pulley_level.text_5": "水平面不會超過軟管末端", + + "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.large_cogwheel.header": "使用大齒輪傳遞動能", - "create.ponder.large_cogwheel.text_1": "大齒輪可以以特定的角度相互連接", - "create.ponder.large_cogwheel.text_2": "可以利用大齒輪變更旋轉軸向", - + "create.ponder.large_cogwheel.text_1": "大齒輪可以以特定的角度相互連接", + "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_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_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_group.header": "成組移動機殼底盤", - "create.ponder.linear_chassis_group.text_1": "相鄰的機殼底盤可以相互連接在一起", - "create.ponder.linear_chassis_group.text_2": "其中的一個底盤若被移動,其餘的底盤也會跟著移動", - "create.ponder.linear_chassis_group.text_3": "不同種類的底盤,或者是朝向不一致的底盤,將不會相連", - + "create.ponder.linear_chassis_group.text_1": "相鄰的機殼底盤可以相互連接在一起", + "create.ponder.linear_chassis_group.text_2": "其中的一個底盤若被移動,其餘的底盤也會跟著移動", + "create.ponder.linear_chassis_group.text_3": "不同種類的底盤,或者是朝向不一致的底盤,將不會相連", + "create.ponder.mechanical_arm.header": "設定動力臂", - "create.ponder.mechanical_arm.text_1": "你得在放置動力臂之前就設定好它的輸入以及輸出端", - "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_8": "在此情況下,漏斗和置物台可以解決此問題", - + "create.ponder.mechanical_arm.text_1": "你得在放置動力臂之前就設定好它的輸入以及輸出端", + "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_8": "在此情況下,漏斗和置物台可以解決此問題", + "create.ponder.mechanical_arm_filtering.header": "過濾動力臂的輸出端", - "create.ponder.mechanical_arm_filtering.text_1": "輸入", - "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_6": "動力臂足夠智慧,它不會去拿取那些它無法分配的物品", - + "create.ponder.mechanical_arm_filtering.text_1": "輸入", + "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_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_5": "手持扳手對其滑動滾輪,可以改變其設定", - "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_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_5": "手持扳手對其滑動滾輪,可以改變其設定", + "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_redstone.header": "利用紅石訊號控制動力臂", - "create.ponder.mechanical_arm_redstone.text_1": "通入紅石訊號後,動力臂會停止工作", - "create.ponder.mechanical_arm_redstone.text_2": "在停止工作前,它會完成目前正在進行的工作週期", - "create.ponder.mechanical_arm_redstone.text_3": "因此,通入單次負紅石脈衝可以精確控制動力臂,使其每次只進行單個週期的工作", - + "create.ponder.mechanical_arm_redstone.text_1": "通入紅石訊號後,動力臂會停止工作", + "create.ponder.mechanical_arm_redstone.text_2": "在停止工作前,它會完成目前正在進行的工作週期", + "create.ponder.mechanical_arm_redstone.text_3": "因此,通入單次負紅石脈衝可以精確控制動力臂,使其每次只進行單個週期的工作", + "create.ponder.mechanical_bearing.header": "使用動力軸承移動結構", - "create.ponder.mechanical_bearing.text_1": "動力軸承會與其前方的方塊黏合在一起", - "create.ponder.mechanical_bearing.text_2": "接收到動能後,它會將這一黏合結構組裝為旋轉裝置", - + "create.ponder.mechanical_bearing.text_1": "動力軸承會與其前方的方塊黏合在一起", + "create.ponder.mechanical_bearing.text_2": "接收到動能後,它會將這一黏合結構組裝為旋轉裝置", + "create.ponder.mechanical_crafter.header": "設置動力合成器", - "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_5": "動力合成器的運轉需要動能的供應", - "create.ponder.mechanical_crafter.text_6": "右擊合成器正面,可以手動放入物品", - "create.ponder.mechanical_crafter.text_7": "一旦合成通路上的所有合成槽位都有了物品,合成就會開始", - "create.ponder.mechanical_crafter.text_8": "而對於那些沒有完全占滿所有合成器槽位的配方,你可以通入紅石訊號強制開啟合成", - + "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_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.text_1": "合成器可以自動接受向其輸入的物品", - "create.ponder.mechanical_crafter_connect.text_2": "對其背面使用扳手,可以連接合成器", - "create.ponder.mechanical_crafter_connect.text_3": "所有相連的合成器可以訪問同一個位置的輸入", - + "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_1": "有些配方需要額外的合成器,來補足合成通路上的間隙", + "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_2": "它會採收其路徑上的作物,並重設這些作物的生長進度", - + "create.ponder.mechanical_harvester.text_1": "在運動裝置中使用動力收割機時...", + "create.ponder.mechanical_harvester.text_2": "它會採收其路徑上的作物,並重設這些作物的生長進度", + "create.ponder.mechanical_mixer.header": "使用動力攪拌器處理物品", - "create.ponder.mechanical_mixer.text_1": "使用攪拌器和工作盆,你可以自動化某些合成配方", - "create.ponder.mechanical_mixer.text_2": "有效配方包括各種無序合成配方,以及一些額外的配方", - "create.ponder.mechanical_mixer.text_3": "一些配方可能需要使用烈焰人燃燒室提供熱量", - "create.ponder.mechanical_mixer.text_4": "過濾槽可用於解決兩個配方相互衝突的情況", - + "create.ponder.mechanical_mixer.text_1": "使用攪拌器和工作盆,你可以自動化某些合成配方", + "create.ponder.mechanical_mixer.text_2": "有效配方包括各種無序合成配方,以及一些額外的配方", + "create.ponder.mechanical_mixer.text_3": "一些配方可能需要使用烈焰人燃燒室提供熱量", + "create.ponder.mechanical_mixer.text_4": "過濾槽可用於解決兩個配方相互衝突的情況", + "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_1": "動力活塞可以移動它前方的方塊", + "create.ponder.mechanical_piston.text_2": "移動速度和方向取決於通入活塞的動能", + "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_2": "你也可以將其設定為從不方塊化,或者只在起始位置方塊化", - + "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_3": "此外,動力犁可以耕地", - "create.ponder.mechanical_plough.text_4": "...它也可以在不傷害實體的情況下推動它們", - + "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_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_4": "輥軋機會使物品停下,然後自動處理這一物品", - + "create.ponder.mechanical_press.text_1": "機械液壓機可以處理位於其下方的物品", + "create.ponder.mechanical_press.text_2": "在其下方丟入物品,或者將物品放在置物台上,都算作有效的物品輸入", + "create.ponder.mechanical_press.text_3": "若物品被輸入時正位於傳送帶上...", + "create.ponder.mechanical_press.text_4": "輥軋機會使物品停下,然後自動處理這一物品", + "create.ponder.mechanical_press_compacting.header": "使用機械液壓機壓縮物品", - "create.ponder.mechanical_press_compacting.text_1": "對放置於工作盆內的物品進行輥軋,可以將這些物品壓縮在一起", - "create.ponder.mechanical_press_compacting.text_2": "壓縮意指任何同種物品填滿了 2x2 或者 3x3 網格的配方,以及一些額外的配方", - "create.ponder.mechanical_press_compacting.text_3": "一些配方可能需要烈焰人燃燒室提供熱量", - "create.ponder.mechanical_press_compacting.text_4": "過濾槽可用於解決兩個配方相互衝突的情況", - + "create.ponder.mechanical_press_compacting.text_1": "對放置於工作盆內的物品進行輥軋,可以將這些物品壓縮在一起", + "create.ponder.mechanical_press_compacting.text_2": "壓縮意指任何同種物品填滿了 2x2 或者 3x3 網格的配方,以及一些額外的配方", + "create.ponder.mechanical_press_compacting.text_3": "一些配方可能需要烈焰人燃燒室提供熱量", + "create.ponder.mechanical_press_compacting.text_4": "過濾槽可用於解決兩個配方相互衝突的情況", + + "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_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_4": "在同一個管線網路中機械幫浦可以結合他們的吞吐量", + "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_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_2": "處理過後的物品的彈出方向始終與通入鋸中的旋轉轉向相反", - "create.ponder.mechanical_saw_processing.text_3": "鋸子可以", - "create.ponder.mechanical_saw_processing.text_4": "若輸入原料有多種可能產物,你可以用動力鋸上的過濾槽指定只產出某種產物", - "create.ponder.mechanical_saw_processing.text_5": "若沒有使用過濾槽,動力鋸會在各產物中按順序循環輸出", - + "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_2": "在其側邊使用齒輪與其相耦合,方可為其通入動力", - "create.ponder.millstone.text_3": "頂部可以丟入或者塞入物品", - "create.ponder.millstone.text_4": "一段時間過後,右擊石磨可以拿出其中的產物", - "create.ponder.millstone.text_5": "產物的提取也是可以自動化的", - + "create.ponder.millstone.text_1": "石磨會對輸入的物品進行磨製", + "create.ponder.millstone.text_2": "在其側邊使用齒輪與其相耦合,方可為其通入動力", + "create.ponder.millstone.text_3": "頂部可以丟入或者塞入物品", + "create.ponder.millstone.text_4": "一段時間過後,右擊石磨可以拿出其中的產物", + "create.ponder.millstone.text_5": "產物的提取也是可以自動化的", + "create.ponder.nixie_tube.header": "使用真空管顯示器", - "create.ponder.nixie_tube.text_1": "通入紅石訊號後,真空管顯示器會顯示出紅石訊號的強度", - "create.ponder.nixie_tube.text_2": "使用命名牌在鐵砧上為其命名,可以自訂它的顯示文本", - + "create.ponder.nixie_tube.text_1": "通入紅石訊號後,真空管顯示器會顯示出紅石訊號的強度", + "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": "任何管道線都無法與移動裝置上的液體罐連接", + "create.ponder.portable_fluid_interface.text_2": "該元件可以與液體罐相互作用,而無需停止裝置", + "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_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_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_8": "物品交換完畢後,裝置仍然會停留在原地一小會,然後才會繼續前行", - + "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_8": "物品交換完畢後,裝置仍然會停留在原地一小會,然後才會繼續前行", + "create.ponder.portable_storage_interface_redstone.header": "紅石控制", - "create.ponder.portable_storage_interface_redstone.text_1": "通入紅石訊號可以阻止固定側介面的連接行為", - + "create.ponder.portable_storage_interface_redstone.text_1": "通入紅石訊號可以阻止固定側介面的連接行為", + "create.ponder.powered_latch.header": "使用閂鎖器控制訊號", - "create.ponder.powered_latch.text_1": "閂鎖器是一種可以用紅石訊號控制的拉杆", - "create.ponder.powered_latch.text_2": "後方輸入的訊號會將其設為開啟狀態", - "create.ponder.powered_latch.text_3": "側邊輸入的訊號會將其設為關閉狀態", - "create.ponder.powered_latch.text_4": "你也可以手動切換其狀態", - + "create.ponder.powered_latch.text_1": "閂鎖器是一種可以用紅石訊號控制的拉杆", + "create.ponder.powered_latch.text_2": "後方輸入的訊號會將其設為開啟狀態", + "create.ponder.powered_latch.text_3": "側邊輸入的訊號會將其設為關閉狀態", + "create.ponder.powered_latch.text_4": "你也可以手動切換其狀態", + "create.ponder.powered_toggle_latch.header": "使用T型正反器控制訊號", - "create.ponder.powered_toggle_latch.text_1": "T型正反器是一種可以用紅石訊號控制的拉杆", - "create.ponder.powered_toggle_latch.text_2": "後方訊號輸入可以改變它的狀態", - "create.ponder.powered_toggle_latch.text_3": "...開啟或者是關閉", - "create.ponder.powered_toggle_latch.text_4": "你也可以手動切換其狀態", - + "create.ponder.powered_toggle_latch.text_1": "T型正反器是一種可以用紅石訊號控制的拉杆", + "create.ponder.powered_toggle_latch.text_2": "後方訊號輸入可以改變它的狀態", + "create.ponder.powered_toggle_latch.text_3": "...開啟或者是關閉", + "create.ponder.powered_toggle_latch.text_4": "你也可以手動切換其狀態", + "create.ponder.pulse_repeater.header": "使用脈衝中繼器控制訊號", - "create.ponder.pulse_repeater.text_1": "脈衝中繼器會將所有通入的紅石訊號縮減為一次脈衝", - + "create.ponder.pulse_repeater.text_1": "脈衝中繼器會將所有通入的紅石訊號縮減為一次脈衝", + "create.ponder.radial_chassis.header": "使用旋轉底盤黏著方塊", - "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_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.redstone_contact.header": "接觸式紅石訊號發生器", - "create.ponder.redstone_contact.text_1": "當兩個接觸式紅石訊號發生器面對面時,它們會發出紅石訊號", - "create.ponder.redstone_contact.text_2": "並且,若有一方位於運動裝置上,此特性也能正常生效", - + "create.ponder.redstone_contact.text_1": "當兩個接觸式紅石訊號發生器面對面時,它們會發出紅石訊號", + "create.ponder.redstone_contact.text_2": "並且,若有一方位於運動裝置上,此特性也能正常生效", + "create.ponder.redstone_link.header": "使用無線紅石訊號機", - "create.ponder.redstone_link.text_1": "無線紅石訊號機可以無線傳輸紅石訊號", - "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_1": "無線紅石訊號機可以無線傳輸紅石訊號", + "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.rope_pulley.header": "使用繩索滑輪移動結構", - "create.ponder.rope_pulley.text_1": "繩索滑輪在接受動能時可以垂直移動方塊結構", - "create.ponder.rope_pulley.text_2": "移動的方向及速度取決於提供的轉速", - + "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_3": "注意,只有繩索滑輪停止工作時才能被移動", - + "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": "轉速控制器將動能從其轉軸傳遞至它上方的大齒輪", - "create.ponder.rotation_speed_controller.text_2": "在其側面滾動滑鼠滾輪,可以調節輸出轉速", - + "create.ponder.rotation_speed_controller.text_1": "轉速控制器將動能從其轉軸傳遞至它上方的大齒輪", + "create.ponder.rotation_speed_controller.text_2": "在其側面滾動滑鼠滾輪,可以調節輸出轉速", + "create.ponder.sail.header": "使用風帆來組裝風車", - "create.ponder.sail.text_1": "風帆是製作風車的趁手材料", - "create.ponder.sail.text_2": "無需強力膠等黏附手段,它們便可自行互相連結", - "create.ponder.sail.text_3": "手持染料右擊可對其染色", - "create.ponder.sail.text_4": "手持剪刀右擊可剪除帆布,使其變迴風帆框架", - + "create.ponder.sail.text_1": "風帆是製作風車的趁手材料", + "create.ponder.sail.text_2": "無需強力膠等黏附手段,它們便可自行互相連結", + "create.ponder.sail.text_3": "手持染料右擊可對其染色", + "create.ponder.sail.text_4": "手持剪刀右擊可剪除帆布,使其變迴風帆框架", + "create.ponder.sail_frame.header": "使用風帆框架來組裝風車", - "create.ponder.sail_frame.text_1": "風帆框架是製作風車的趁手材料", - "create.ponder.sail_frame.text_2": "無需強力膠等黏附手段,它們便可自行互相連結", - + "create.ponder.sail_frame.text_1": "風帆框架是製作風車的趁手材料", + "create.ponder.sail_frame.text_2": "無需強力膠等黏附手段,它們便可自行互相連結", + "create.ponder.sequenced_gearshift.header": "使用可編程齒輪箱來控制轉速", - "create.ponder.sequenced_gearshift.text_1": "可編程齒輪箱能夠根據玩家設置的預設時序表來傳遞旋轉", - "create.ponder.sequenced_gearshift.text_2": "對其右擊可以打開設置面板", - "create.ponder.sequenced_gearshift.text_3": "接受紅石訊號時,它會開始執行其內部已設定好的時序指令表", - "create.ponder.sequenced_gearshift.text_4": "當完成時序指令表後,它會進入待機狀態,再次接受紅石訊號後,它才會再次執行時序指令表內容", - "create.ponder.sequenced_gearshift.text_5": "紅石比較器可以讀取目前時序指令表完成進度", + "create.ponder.sequenced_gearshift.text_1": "可編程齒輪箱能夠根據玩家設置的預設時序表來傳遞旋轉", + "create.ponder.sequenced_gearshift.text_2": "對其右擊可以打開設置面板", + "create.ponder.sequenced_gearshift.text_3": "接受紅石訊號時,它會開始執行其內部已設定好的時序指令表", + "create.ponder.sequenced_gearshift.text_4": "當完成時序指令表後,它會進入待機狀態,再次接受紅石訊號後,它才會再次執行時序指令表內容", + "create.ponder.sequenced_gearshift.text_5": "紅石比較器可以讀取目前時序指令表完成進度", "create.ponder.shaft.header": "使用傳動軸來傳送動能", "create.ponder.shaft.text_1": "傳動軸可以直線傳送動能", @@ -2040,20 +2180,34 @@ "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_2": "當在其過濾槽內指定了物品後,溜槽只會傳輸這一指定標記的物品", + "create.ponder.smart_chute.text_3": "使用滑鼠滾輪可以指定被過濾的物品數量", + "create.ponder.smart_chute.text_4": "通入紅石訊號,智慧溜槽將會完全暫停工作", + + "create.ponder.smart_pipe.header": "使用智慧液體管道控制液體", + "create.ponder.smart_pipe.text_1": "智慧液體管道可以按照液體類型控制液體流", + "create.ponder.smart_pipe.text_2": "當直接放置在源頭時,他們可以指定要提取的液體類型", + "create.ponder.smart_pipe.text_3": "只需用包含所需液體的任何項目右鍵點擊其過濾槽", + "create.ponder.smart_pipe.text_4": "在管網裡時,智慧液體管道只會讓匹配的液體經過", + "create.ponder.speedometer.header": "使用速度計來監測轉速", - "create.ponder.speedometer.text_1": "速度計能顯示相接組件的轉速", - "create.ponder.speedometer.text_2": "當佩戴MR護目鏡時,可以看到儀表所顯示的更詳細的數據", - "create.ponder.speedometer.text_3": "紅石比較器可以根據速度計的數值輸出不同強弱的紅石訊號", - + "create.ponder.speedometer.text_1": "速度計能顯示相接組件的轉速", + "create.ponder.speedometer.text_2": "當佩戴MR護目鏡時,可以看到儀表所顯示的更詳細的數據", + "create.ponder.speedometer.text_3": "紅石比較器可以根據速度計的數值輸出不同強弱的紅石訊號", + + "create.ponder.spout_filling.header": "使用液體灌注器填充物品", + "create.ponder.spout_filling.text_1": "液體灌注器可以填充下方的液體容器", + "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_6": "液體灌注器會停下他並且自動填滿", + "create.ponder.stabilized_bearings.header": "裝置固定朝向", - "create.ponder.stabilized_bearings.text_1": "當動力軸承在結構被帶動時...", - "create.ponder.stabilized_bearings.text_2": "...它會確保它轉盤的垂直朝向不變", - "create.ponder.stabilized_bearings.text_3": "跟預設的一樣,動力軸承會黏著它前方的方塊", - "create.ponder.stabilized_bearings.text_4": "這種情況下,它所黏著的子結構的垂直朝向也不會改變", + "create.ponder.stabilized_bearings.text_1": "當動力軸承在結構被帶動時...", + "create.ponder.stabilized_bearings.text_2": "...它會確保它轉盤的垂直朝向不變", + "create.ponder.stabilized_bearings.text_3": "跟預設的一樣,動力軸承會黏著它前方的方塊", + "create.ponder.stabilized_bearings.text_4": "這種情況下,它所黏著的子結構的垂直朝向也不會改變", "create.ponder.sticker.header": "使用方塊黏著器來黏取方塊", "create.ponder.sticker.text_1": "方塊黏著器是一個很棒的裝置,他受控於紅石訊號", @@ -2061,53 +2215,60 @@ "create.ponder.sticker.text_3": "如果此時方塊黏著器被移動,被黏到的方塊會跟著移動", "create.ponder.sticker.text_4": "再次接收到訊號後,黏著器會放下它面前的方塊", - "create.ponder.stressometer.header": "使用動能錶來監測應力", - "create.ponder.stressometer.text_1": "動能錶能顯示目前動能網路內的應力訊息", - "create.ponder.stressometer.text_2": "當佩戴MR護目鏡時,可以看到儀表所顯示的更詳細的數據", - "create.ponder.stressometer.text_3": "紅石比較器可以根據動能錶的數值輸出不同強弱的紅石訊號", - + "create.ponder.stressometer.header": "使用動能錶來監測應力", + "create.ponder.stressometer.text_1": "動能錶能顯示目前動能網路內的應力訊息", + "create.ponder.stressometer.text_2": "當佩戴MR護目鏡時,可以看到儀表所顯示的更詳細的數據", + "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_5": "左擊可以清除強力膠", - + "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_5": "左擊可以清除強力膠", + "create.ponder.valve_handle.header": "使用閥門手輪產生動能", - "create.ponder.valve_handle.text_1": "玩家可以手動使用閥門手輪來產生動能", - "create.ponder.valve_handle.text_2": "右擊可使它逆時針旋轉", - "create.ponder.valve_handle.text_3": "它的轉速慢而精確", - "create.ponder.valve_handle.text_4": "潛行右擊可使它順時針旋轉", - "create.ponder.valve_handle.text_5": "可以透過染色來美化閥門手輪", - + "create.ponder.valve_handle.text_1": "玩家可以手動使用閥門手輪來產生動能", + "create.ponder.valve_handle.text_2": "右擊可使它逆時針旋轉", + "create.ponder.valve_handle.text_3": "它的轉速慢而精確", + "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.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_2": "水車接觸水流的麵越多,它的轉速越高", - "create.ponder.water_wheel.text_3": "水車葉片應逆著水流方向擺放", - "create.ponder.water_wheel.text_4": "如果順著水流擺放,它的效率則會降低", - + "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_10": "現在,只有等被放置的物品數量等於所設定數量時,彈射置物台才會彈射物品", - "create.ponder.weighted_ejector.text_11": "當其他實體站在彈射置物台上時會被直接彈射", - "create.ponder.weighted_ejector.text_2": "現在,放置下的彈射置物台會將物品彈射至目標位置", - "create.ponder.weighted_ejector.text_3": "限制範圍內的任意距離和高度均可作為有效目標地點", - "create.ponder.weighted_ejector.text_4": "但是,目標位置與置物台的連線,必須垂直於置物台的側面", - "create.ponder.weighted_ejector.text_5": "如果沒有設置有效目標位置,彈射置物台會直接將其前方一格設為默認目標位置", - "create.ponder.weighted_ejector.text_6": "提供動能可為其蓄力", - "create.ponder.weighted_ejector.text_7": "蓄力完畢後,放置在它上方的物品會被立刻彈射出去", - "create.ponder.weighted_ejector.text_8": "如果目標為容器,則彈射置物台會等待容器有位置後再彈射物品", - "create.ponder.weighted_ejector.text_9": "使用扳手可以調整彈射所要求的物品數量", - + "create.ponder.weighted_ejector.text_1": "手持彈射置物台時,潛行時右擊可以設置彈射目標位置", + "create.ponder.weighted_ejector.text_10": "現在,只有等被放置的物品數量等於所設定數量時,彈射置物台才會彈射物品", + "create.ponder.weighted_ejector.text_11": "當其他實體站在彈射置物台上時會被直接彈射", + "create.ponder.weighted_ejector.text_2": "現在,放置下的彈射置物台會將物品彈射至目標位置", + "create.ponder.weighted_ejector.text_3": "限制範圍內的任意距離和高度均可作為有效目標地點", + "create.ponder.weighted_ejector.text_4": "但是,目標位置與置物台的連線,必須垂直於置物台的側面", + "create.ponder.weighted_ejector.text_5": "如果沒有設置有效目標位置,彈射置物台會直接將其前方一格設為默認目標位置", + "create.ponder.weighted_ejector.text_6": "提供動能可為其蓄力", + "create.ponder.weighted_ejector.text_7": "蓄力完畢後,放置在它上方的物品會被立刻彈射出去", + "create.ponder.weighted_ejector.text_8": "如果目標為容器,則彈射置物台會等待容器有位置後再彈射物品", + "create.ponder.weighted_ejector.text_9": "使用扳手可以調整彈射所要求的物品數量", + "create.ponder.weighted_ejector_redstone.header": "使用紅石控制彈射置物台", - "create.ponder.weighted_ejector_redstone.text_1": "當被紅石充能時,彈射置物台停止工作", - "create.ponder.weighted_ejector_redstone.text_2": "此外,置物台彈射的瞬間可以被偵測器偵測", - "create.ponder.weighted_ejector_tunnel.header": "使用彈射置物台來分流物品", - "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_redstone.text_1": "當被紅石充能時,彈射置物台停止工作", + "create.ponder.weighted_ejector_redstone.text_2": "此外,置物台彈射的瞬間可以被偵測器偵測", + + "create.ponder.weighted_ejector_tunnel.header": "使用彈射置物台來分流物品", + "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.windmill_source.header": "使用風車軸承產生動能", "create.ponder.windmill_source.text_1": "風車軸承會黏著它面前的方塊結構", @@ -2122,4 +2283,4 @@ "_": "Thank you for translating Create!" -} \ No newline at end of file +} From a17dd26aabf74118d955ed89d9a92b4ddb8a0d07 Mon Sep 17 00:00:00 2001 From: PepperBell <44146161+PepperCode1@users.noreply.github.com> Date: Wed, 14 Jul 2021 13:29:02 -0700 Subject: [PATCH 080/118] Add creative cake - Item texture and particle colors are not final --- src/generated/resources/.cache/cache | 33 +- .../resources/assets/create/lang/en_ud.json | 1 + .../resources/assets/create/lang/en_us.json | 1 + .../assets/create/lang/unfinished/de_de.json | 3 +- .../assets/create/lang/unfinished/es_es.json | 3 +- .../assets/create/lang/unfinished/es_mx.json | 3 +- .../assets/create/lang/unfinished/fr_fr.json | 3 +- .../assets/create/lang/unfinished/it_it.json | 3 +- .../assets/create/lang/unfinished/ja_jp.json | 3 +- .../assets/create/lang/unfinished/ko_kr.json | 3 +- .../assets/create/lang/unfinished/nl_nl.json | 3 +- .../assets/create/lang/unfinished/pl_pl.json | 3 +- .../assets/create/lang/unfinished/pt_br.json | 3 +- .../assets/create/lang/unfinished/ru_ru.json | 3 +- .../assets/create/lang/unfinished/zh_cn.json | 3 +- .../assets/create/lang/unfinished/zh_tw.json | 565 +++++++++--------- .../create/models/item/creative_cake.json | 6 + .../create/tags/items/upright_on_belt.json | 1 + .../java/com/simibubi/create/AllBlocks.java | 2 +- .../java/com/simibubi/create/AllItems.java | 7 + .../processing/burner/BlazeBurnerBlock.java | 124 ++-- .../processing/burner/BlazeBurnerHandler.java | 18 +- .../burner/BlazeBurnerTileEntity.java | 175 ++++-- .../mechanicalArm/ArmInteractionPoint.java | 4 +- .../foundation/utility/ColorHelper.java | 14 +- .../create/textures/item/creative_cake.png | Bin 0 -> 1996 bytes 26 files changed, 563 insertions(+), 424 deletions(-) create mode 100644 src/generated/resources/assets/create/models/item/creative_cake.json create mode 100644 src/main/resources/assets/create/textures/item/creative_cake.png diff --git a/src/generated/resources/.cache/cache b/src/generated/resources/.cache/cache index 817561684..b344fbfc0 100644 --- a/src/generated/resources/.cache/cache +++ b/src/generated/resources/.cache/cache @@ -425,21 +425,21 @@ a3a11524cd3515fc01d905767b4b7ea782adaf03 assets/create/blockstates/yellow_seat.j 6801fa1f466f172700e573e5b8ee8ee5f9ca4583 assets/create/blockstates/yellow_valve_handle.json 7f39521b211441f5c3e06d60c5978cebe16cacfb assets/create/blockstates/zinc_block.json b7181bcd8182b2f17088e5aa881f374c9c65470c assets/create/blockstates/zinc_ore.json -e1d3c02695cbd2ee7bbede97f72941835634a3a5 assets/create/lang/en_ud.json -dda27625581783c310eaddce4fbd1aa4c983c15c assets/create/lang/en_us.json -52509bf5d478b5deff21180c19632ec6467aee35 assets/create/lang/unfinished/de_de.json -8e90f32c39e3a4d7e85b2db53100ffc90cc8eb67 assets/create/lang/unfinished/es_es.json -3a3fd8c21798552e1358ad44f9f7e525d91b2741 assets/create/lang/unfinished/es_mx.json -7c30cbe707f3002a070289a98291bfd7119da3b6 assets/create/lang/unfinished/fr_fr.json -e266432ad97663dfdf76dfd35a6188f5550689d7 assets/create/lang/unfinished/it_it.json -5422e990c8075d4132d58287fa9ca858f9a0bc1f assets/create/lang/unfinished/ja_jp.json -a1cfa4e628a915c25dc406918028ef6aa99c5c3d assets/create/lang/unfinished/ko_kr.json -c26d8d9b04ce47d1ab9ff83925b173e50b2c8776 assets/create/lang/unfinished/nl_nl.json -4527d31d932661341bf92f49af8d599166b57985 assets/create/lang/unfinished/pl_pl.json -3034e1d6f167365a3c399ddabe68b05831bbcb73 assets/create/lang/unfinished/pt_br.json -a2e2cfcacca1e707d5cbb43a3fb15107a3dd59f7 assets/create/lang/unfinished/ru_ru.json -e1b094a37a11896f835e6dd11c91a61704bb8069 assets/create/lang/unfinished/zh_cn.json -dce3b0ec1fa06b020c43a3040aab044510595972 assets/create/lang/unfinished/zh_tw.json +58e72b5fe2423b661e4892a817e08985c3944318 assets/create/lang/en_ud.json +11aa112733e592f4956a52cc3ed4640e36da3f85 assets/create/lang/en_us.json +7be14d4c5b04da2d01c3c498c58aa3f5d2c3f5ff assets/create/lang/unfinished/de_de.json +a97d5f67e1b10b7bd90865d4c38979ac55f6e1a9 assets/create/lang/unfinished/es_es.json +c6067e65d082a7e65df3d0e6a2e34b0641c3608a assets/create/lang/unfinished/es_mx.json +ad6de725cce34a60b6169a9dd801fc3d6414a80b assets/create/lang/unfinished/fr_fr.json +6460fe050efde9460f419aee00a8e8eb1d884a7a assets/create/lang/unfinished/it_it.json +3c0796b466146287fd99a6166781a881c3e0a7a4 assets/create/lang/unfinished/ja_jp.json +fbfd50f5fdb0017963866bf81a15486003a5ea2c assets/create/lang/unfinished/ko_kr.json +bd22d6747a51ffe022c4ad03460a9392176de330 assets/create/lang/unfinished/nl_nl.json +060e368b61b5f43c50b74f42a82973d414de5fca assets/create/lang/unfinished/pl_pl.json +0762cd7b62a5666d2622ef35dadb84626bccf036 assets/create/lang/unfinished/pt_br.json +0deb7d094e8e270d0d702d5e17abe19237751e91 assets/create/lang/unfinished/ru_ru.json +50872bdfe0dfd7e54b1cfa34a0f3be075da12fc4 assets/create/lang/unfinished/zh_cn.json +b21ee1356b57cec916cc6e34e37779b1f3d051de assets/create/lang/unfinished/zh_tw.json 487a511a01b2a4531fb672f917922312db78f958 assets/create/models/block/acacia_window.json b48060cba1a382f373a05bf0039054053eccf076 assets/create/models/block/acacia_window_pane_noside.json 3066db1bf03cffa1a9c7fbacf47ae586632f4eb3 assets/create/models/block/acacia_window_pane_noside_alt.json @@ -1316,6 +1316,7 @@ f56bf22324faf8958eaef4d94b958f1108d52e5a assets/create/models/item/copper_tiles. 5583368909c319acfcf0f7a419bedf23272fe613 assets/create/models/item/copper_valve_handle.json 4e253e7c0626dfd76e2d39786ce1a34e0baaa62d assets/create/models/item/crafter_slot_cover.json 1f947dafff30da701b7675f5b026ccab3129b079 assets/create/models/item/crafting_blueprint.json +6fa0ffd887f51034d7ac923b1cabb6ab44d33fe9 assets/create/models/item/creative_cake.json 7b333dea353afaa27b182aedc647c9e9e34e92ef assets/create/models/item/creative_crate.json f7d06c52c3ca8c22ad67f5741471f06ac22e7fcb assets/create/models/item/creative_fluid_tank.json 5b39403f6c81f05e566b621b62e267267de47c41 assets/create/models/item/creative_motor.json @@ -3754,7 +3755,7 @@ eac71740fb12bdb38b5dfaa2268613d7ba82b809 data/create/tags/blocks/windmill_sails. 081f5aa35602fc27af2ca01ea9f2fd5e7eb284dc data/create/tags/items/create_ingots.json 94c62bf22678ef55b2b8a5398a7960e5b00682dc data/create/tags/items/crushed_ores.json 6cdeeac1689f7b5bfd9bc40b462143d8eaf3ad0b data/create/tags/items/seats.json -c7efc23c08d5e3602c84ff43dac18f72b1cfced3 data/create/tags/items/upright_on_belt.json +94826d9ceac981342c753460b7f7ea9d23dd13a0 data/create/tags/items/upright_on_belt.json 50936b211d94167a35ec78c89954082a336b6269 data/create/tags/items/valve_handles.json 16bcb8fcbe9170c2c11f1ca8d99d8b36cd812bbd data/forge/tags/blocks/glass/colorless.json 81d3eb40b048160fcc2d6bb7ff12b49276297efd data/forge/tags/blocks/glass_panes.json diff --git a/src/generated/resources/assets/create/lang/en_ud.json b/src/generated/resources/assets/create/lang/en_ud.json index 8731d1eda..d27982c36 100644 --- a/src/generated/resources/assets/create/lang/en_ud.json +++ b/src/generated/resources/assets/create/lang/en_ud.json @@ -460,6 +460,7 @@ "item.create.copper_sheet": "\u0287\u01DD\u01DD\u0265S \u0279\u01DDddo\u0186", "item.create.crafter_slot_cover": "\u0279\u01DD\u028Co\u0186 \u0287o\u05DFS \u0279\u01DD\u0287\u025F\u0250\u0279\u0186", "item.create.crafting_blueprint": "\u0287u\u0131\u0279d\u01DDn\u05DF\u15FA bu\u0131\u0287\u025F\u0250\u0279\u0186", + "item.create.creative_cake": "\u01DD\u029E\u0250\u0186 \u01DD\u028C\u0131\u0287\u0250\u01DD\u0279\u0186", "item.create.crushed_aluminum_ore": "\u01DD\u0279O \u026Fnu\u0131\u026Fn\u05DF\u2C6F p\u01DD\u0265sn\u0279\u0186", "item.create.crushed_brass": "ss\u0250\u0279\u15FA p\u01DD\u0265sn\u0279\u0186", "item.create.crushed_copper_ore": "\u01DD\u0279O \u0279\u01DDddo\u0186 p\u01DD\u0265sn\u0279\u0186", diff --git a/src/generated/resources/assets/create/lang/en_us.json b/src/generated/resources/assets/create/lang/en_us.json index b3803cd55..4c46a01c1 100644 --- a/src/generated/resources/assets/create/lang/en_us.json +++ b/src/generated/resources/assets/create/lang/en_us.json @@ -467,6 +467,7 @@ "item.create.copper_sheet": "Copper Sheet", "item.create.crafter_slot_cover": "Crafter Slot Cover", "item.create.crafting_blueprint": "Crafting Blueprint", + "item.create.creative_cake": "Creative Cake", "item.create.crushed_aluminum_ore": "Crushed Aluminum Ore", "item.create.crushed_brass": "Crushed Brass", "item.create.crushed_copper_ore": "Crushed Copper Ore", 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 d80593cfd..a35521306 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: 1129", + "_": "Missing Localizations: 1130", "_": "->------------------------] Game Elements [------------------------<-", @@ -468,6 +468,7 @@ "item.create.copper_sheet": "Kupferblech", "item.create.crafter_slot_cover": "Handwerkseinheit Slot Abdeckung", "item.create.crafting_blueprint": "UNLOCALIZED: Crafting Blueprint", + "item.create.creative_cake": "UNLOCALIZED: Creative Cake", "item.create.crushed_aluminum_ore": "Zerkleinertes Aluminiumerz", "item.create.crushed_brass": "Zerkleinertes Messing", "item.create.crushed_copper_ore": "Zerkleinertes Kupfererz", 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 825c63f65..8519828ba 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: 52", + "_": "Missing Localizations: 53", "_": "->------------------------] Game Elements [------------------------<-", @@ -468,6 +468,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_cake": "UNLOCALIZED: Creative Cake", "item.create.crushed_aluminum_ore": "Mineral de aluminio molido", "item.create.crushed_brass": "Latón molido", "item.create.crushed_copper_ore": "Mineral de cobre molido", diff --git a/src/generated/resources/assets/create/lang/unfinished/es_mx.json b/src/generated/resources/assets/create/lang/unfinished/es_mx.json index 8c0efb9a1..1b820a49b 100644 --- a/src/generated/resources/assets/create/lang/unfinished/es_mx.json +++ b/src/generated/resources/assets/create/lang/unfinished/es_mx.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 1496", + "_": "Missing Localizations: 1497", "_": "->------------------------] Game Elements [------------------------<-", @@ -468,6 +468,7 @@ "item.create.copper_sheet": "Lámina de Cobre", "item.create.crafter_slot_cover": "Cubierta de Ranura del Crafter", "item.create.crafting_blueprint": "UNLOCALIZED: Crafting Blueprint", + "item.create.creative_cake": "UNLOCALIZED: Creative Cake", "item.create.crushed_aluminum_ore": "Mineral de Aluminio Molido", "item.create.crushed_brass": "Latón Molido", "item.create.crushed_copper_ore": "Mineral de Cobre Molido", diff --git a/src/generated/resources/assets/create/lang/unfinished/fr_fr.json b/src/generated/resources/assets/create/lang/unfinished/fr_fr.json index e3d87f4cb..c1e42f1ab 100644 --- a/src/generated/resources/assets/create/lang/unfinished/fr_fr.json +++ b/src/generated/resources/assets/create/lang/unfinished/fr_fr.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 1381", + "_": "Missing Localizations: 1382", "_": "->------------------------] Game Elements [------------------------<-", @@ -468,6 +468,7 @@ "item.create.copper_sheet": "Plaques de cuivre", "item.create.crafter_slot_cover": "Couvercle", "item.create.crafting_blueprint": "UNLOCALIZED: Crafting Blueprint", + "item.create.creative_cake": "UNLOCALIZED: Creative Cake", "item.create.crushed_aluminum_ore": "Aluminium concassé", "item.create.crushed_brass": "Laiton concassé", "item.create.crushed_copper_ore": "Cuivre concassé", diff --git a/src/generated/resources/assets/create/lang/unfinished/it_it.json b/src/generated/resources/assets/create/lang/unfinished/it_it.json index da615360f..5a8bcc502 100644 --- a/src/generated/resources/assets/create/lang/unfinished/it_it.json +++ b/src/generated/resources/assets/create/lang/unfinished/it_it.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 909", + "_": "Missing Localizations: 910", "_": "->------------------------] Game Elements [------------------------<-", @@ -468,6 +468,7 @@ "item.create.copper_sheet": "Lamiera di rame", "item.create.crafter_slot_cover": "Rivestimento per slot da costruzione", "item.create.crafting_blueprint": "UNLOCALIZED: Crafting Blueprint", + "item.create.creative_cake": "UNLOCALIZED: Creative Cake", "item.create.crushed_aluminum_ore": "Alluminio grezzo frantumato", "item.create.crushed_brass": "Ottone frantumato", "item.create.crushed_copper_ore": "Rame grezzo frantumato", diff --git a/src/generated/resources/assets/create/lang/unfinished/ja_jp.json b/src/generated/resources/assets/create/lang/unfinished/ja_jp.json index a53bab0a1..708242d90 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ja_jp.json +++ b/src/generated/resources/assets/create/lang/unfinished/ja_jp.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 41", + "_": "Missing Localizations: 42", "_": "->------------------------] Game Elements [------------------------<-", @@ -468,6 +468,7 @@ "item.create.copper_sheet": "銅板", "item.create.crafter_slot_cover": "クラフタースロットカバー", "item.create.crafting_blueprint": "クラフトブループリント", + "item.create.creative_cake": "UNLOCALIZED: Creative Cake", "item.create.crushed_aluminum_ore": "砕いたアルミニウム鉱石", "item.create.crushed_brass": "砕いた真鍮", "item.create.crushed_copper_ore": "砕いた銅鉱石", diff --git a/src/generated/resources/assets/create/lang/unfinished/ko_kr.json b/src/generated/resources/assets/create/lang/unfinished/ko_kr.json index accb593d5..a54728c08 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ko_kr.json +++ b/src/generated/resources/assets/create/lang/unfinished/ko_kr.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 19", + "_": "Missing Localizations: 20", "_": "->------------------------] Game Elements [------------------------<-", @@ -468,6 +468,7 @@ "item.create.copper_sheet": "구리 판", "item.create.crafter_slot_cover": "조합기 슬롯 덮개", "item.create.crafting_blueprint": "조합 청사진", + "item.create.creative_cake": "UNLOCALIZED: Creative Cake", "item.create.crushed_aluminum_ore": "UNLOCALIZED: Crushed Aluminum Ore", "item.create.crushed_brass": "분쇄된 황동", "item.create.crushed_copper_ore": "분쇄된 구리 광석", diff --git a/src/generated/resources/assets/create/lang/unfinished/nl_nl.json b/src/generated/resources/assets/create/lang/unfinished/nl_nl.json index 28abd156a..0a2818f35 100644 --- a/src/generated/resources/assets/create/lang/unfinished/nl_nl.json +++ b/src/generated/resources/assets/create/lang/unfinished/nl_nl.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 1762", + "_": "Missing Localizations: 1763", "_": "->------------------------] Game Elements [------------------------<-", @@ -468,6 +468,7 @@ "item.create.copper_sheet": "UNLOCALIZED: Copper Sheet", "item.create.crafter_slot_cover": "UNLOCALIZED: Crafter Slot Cover", "item.create.crafting_blueprint": "UNLOCALIZED: Crafting Blueprint", + "item.create.creative_cake": "UNLOCALIZED: Creative Cake", "item.create.crushed_aluminum_ore": "UNLOCALIZED: Crushed Aluminum Ore", "item.create.crushed_brass": "Gemalen Brons", "item.create.crushed_copper_ore": "UNLOCALIZED: Crushed Copper Ore", diff --git a/src/generated/resources/assets/create/lang/unfinished/pl_pl.json b/src/generated/resources/assets/create/lang/unfinished/pl_pl.json index d479a10d3..c830498fc 100644 --- a/src/generated/resources/assets/create/lang/unfinished/pl_pl.json +++ b/src/generated/resources/assets/create/lang/unfinished/pl_pl.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 251", + "_": "Missing Localizations: 252", "_": "->------------------------] Game Elements [------------------------<-", @@ -468,6 +468,7 @@ "item.create.copper_sheet": "Arkusz miedzi", "item.create.crafter_slot_cover": "Przykrywka na slot stołu rzemieślniczego", "item.create.crafting_blueprint": "UNLOCALIZED: Crafting Blueprint", + "item.create.creative_cake": "UNLOCALIZED: Creative Cake", "item.create.crushed_aluminum_ore": "Rozkruszona ruda żelaza", "item.create.crushed_brass": "Rozkruszony mosiądz", "item.create.crushed_copper_ore": "Rozkruszona ruda miedzi", 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 9210563b0..8640c064c 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: 1803", + "_": "Missing Localizations: 1804", "_": "->------------------------] Game Elements [------------------------<-", @@ -468,6 +468,7 @@ "item.create.copper_sheet": "UNLOCALIZED: Copper Sheet", "item.create.crafter_slot_cover": "UNLOCALIZED: Crafter Slot Cover", "item.create.crafting_blueprint": "UNLOCALIZED: Crafting Blueprint", + "item.create.creative_cake": "UNLOCALIZED: Creative Cake", "item.create.crushed_aluminum_ore": "UNLOCALIZED: Crushed Aluminum Ore", "item.create.crushed_brass": "UNLOCALIZED: Crushed Brass", "item.create.crushed_copper_ore": "UNLOCALIZED: Crushed Copper Ore", diff --git a/src/generated/resources/assets/create/lang/unfinished/ru_ru.json b/src/generated/resources/assets/create/lang/unfinished/ru_ru.json index 291b78f3e..3a0da71be 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ru_ru.json +++ b/src/generated/resources/assets/create/lang/unfinished/ru_ru.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 282", + "_": "Missing Localizations: 283", "_": "->------------------------] Game Elements [------------------------<-", @@ -468,6 +468,7 @@ "item.create.copper_sheet": "Медный лист", "item.create.crafter_slot_cover": "Крышка на слот крафтера", "item.create.crafting_blueprint": "UNLOCALIZED: Crafting Blueprint", + "item.create.creative_cake": "UNLOCALIZED: Creative Cake", "item.create.crushed_aluminum_ore": "Измельчённая алюминиевая руда", "item.create.crushed_brass": "Дроблёная латунь", "item.create.crushed_copper_ore": "Дроблёная медная руда", 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 c7d719c9c..2d5d6ebb6 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: 292", + "_": "Missing Localizations: 293", "_": "->------------------------] Game Elements [------------------------<-", @@ -468,6 +468,7 @@ "item.create.copper_sheet": "铜板", "item.create.crafter_slot_cover": "合成器盖板", "item.create.crafting_blueprint": "UNLOCALIZED: Crafting Blueprint", + "item.create.creative_cake": "UNLOCALIZED: Creative Cake", "item.create.crushed_aluminum_ore": "粉碎铝矿石", "item.create.crushed_brass": "粉碎黄铜", "item.create.crushed_copper_ore": "粉碎铜矿石", diff --git a/src/generated/resources/assets/create/lang/unfinished/zh_tw.json b/src/generated/resources/assets/create/lang/unfinished/zh_tw.json index 84fd62ea1..2ab510123 100644 --- a/src/generated/resources/assets/create/lang/unfinished/zh_tw.json +++ b/src/generated/resources/assets/create/lang/unfinished/zh_tw.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 287", + "_": "Missing Localizations: 15", "_": "->------------------------] Game Elements [------------------------<-", @@ -28,12 +28,12 @@ "block.create.belt": "輸送帶", "block.create.birch_window": "白樺木窗戶", "block.create.birch_window_pane": "白樺木窗戶片", - "block.create.black_nixie_tube": "UNLOCALIZED: Black Nixie Tube", + "block.create.black_nixie_tube": "黑色真空管", "block.create.black_sail": "黑色風帆", "block.create.black_seat": "黑色坐墊", "block.create.black_valve_handle": "黑色閥門開關", "block.create.blaze_burner": "烈焰使者動力爐", - "block.create.blue_nixie_tube": "UNLOCALIZED: Blue Nixie Tube", + "block.create.blue_nixie_tube": "藍色真空管", "block.create.blue_sail": "藍色風帆", "block.create.blue_seat": "藍色坐墊", "block.create.blue_valve_handle": "藍色閥門開關", @@ -43,7 +43,7 @@ "block.create.brass_encased_shaft": "黃銅傳動軸箱", "block.create.brass_funnel": "黃銅漏斗", "block.create.brass_tunnel": "黃銅物品隧道", - "block.create.brown_nixie_tube": "UNLOCALIZED: Brown Nixie Tube", + "block.create.brown_nixie_tube": "棕色真空管", "block.create.brown_sail": "棕色風帆", "block.create.brown_seat": "棕色坐墊", "block.create.brown_valve_handle": "棕色閥門開關", @@ -61,7 +61,7 @@ "block.create.cogwheel": "齒輪", "block.create.content_observer": "物品偵測器", "block.create.controller_rail": "控制鐵軌", - "block.create.copper_backtank": "UNLOCALIZED: Copper Backtank", + "block.create.copper_backtank": "銅製後背包", "block.create.copper_block": "銅磚", "block.create.copper_casing": "銅機殼", "block.create.copper_ore": "銅礦石", @@ -76,7 +76,7 @@ "block.create.crushing_wheel": "粉碎輪", "block.create.crushing_wheel_controller": "粉碎輪控制器", "block.create.cuckoo_clock": "布穀鳥鐘", - "block.create.cyan_nixie_tube": "UNLOCALIZED: Cyan Nixie Tube", + "block.create.cyan_nixie_tube": "青色真空管", "block.create.cyan_sail": "藍綠色風帆", "block.create.cyan_seat": "藍綠色坐墊", "block.create.cyan_valve_handle": "藍綠色閥門開關", @@ -183,16 +183,16 @@ "block.create.granite_cobblestone_stairs": "碎花崗岩樓梯", "block.create.granite_cobblestone_wall": "碎花崗岩牆", "block.create.granite_pillar": "豎紋花崗岩", - "block.create.gray_nixie_tube": "UNLOCALIZED: Gray Nixie Tube", + "block.create.gray_nixie_tube": "灰色真空管", "block.create.gray_sail": "灰色風帆", "block.create.gray_seat": "灰色坐墊", "block.create.gray_valve_handle": "灰色閥門開關", - "block.create.green_nixie_tube": "UNLOCALIZED: Green Nixie Tube", + "block.create.green_nixie_tube": "綠色真空管", "block.create.green_sail": "綠色風帆", "block.create.green_seat": "綠色坐墊", "block.create.green_valve_handle": "綠色閥門開關", "block.create.hand_crank": "手搖把手", - "block.create.haunted_bell": "UNLOCALIZED: Haunted Bell", + "block.create.haunted_bell": "靈魂鐘", "block.create.honey": "蜂蜜", "block.create.horizontal_framed_glass": "豎直邊框玻璃", "block.create.horizontal_framed_glass_pane": "豎直邊框玻璃片", @@ -210,16 +210,16 @@ "block.create.layered_limestone": "疊層石灰岩", "block.create.layered_scoria": "疊層火成岩", "block.create.layered_weathered_limestone": "疊層風化石灰岩", - "block.create.lectern_controller": "UNLOCALIZED: Lectern Controller", - "block.create.light_blue_nixie_tube": "UNLOCALIZED: Light Blue Nixie Tube", + "block.create.lectern_controller": "講台遙控器", + "block.create.light_blue_nixie_tube": "亮藍色真空管", "block.create.light_blue_sail": "淡藍色風帆", "block.create.light_blue_seat": "淡藍色坐墊", "block.create.light_blue_valve_handle": "淡藍色閥門開關", - "block.create.light_gray_nixie_tube": "UNLOCALIZED: Light Gray Nixie Tube", + "block.create.light_gray_nixie_tube": "亮灰色真空管", "block.create.light_gray_sail": "淡灰色風帆", "block.create.light_gray_seat": "淡灰色坐墊", "block.create.light_gray_valve_handle": "淡灰色閥門開關", - "block.create.lime_nixie_tube": "UNLOCALIZED: Lime Nixie Tube", + "block.create.lime_nixie_tube": "淺綠色真空管", "block.create.lime_sail": "黃綠色風帆", "block.create.lime_seat": "黃綠色坐墊", "block.create.lime_valve_handle": "黃綠色閥門開關", @@ -236,7 +236,7 @@ "block.create.limestone_pillar": "豎紋石灰岩", "block.create.linear_chassis": "機殼底盤", "block.create.lit_blaze_burner": "烈焰使者動力爐(已啟動)", - "block.create.magenta_nixie_tube": "UNLOCALIZED: Magenta Nixie Tube", + "block.create.magenta_nixie_tube": "洋紅色真空管", "block.create.magenta_sail": "洋紅色風帆", "block.create.magenta_seat": "洋紅色坐墊", "block.create.magenta_valve_handle": "洋紅色閥門開關", @@ -320,8 +320,8 @@ "block.create.paved_weathered_limestone_slab": "風化石灰岩鋪路石半磚", "block.create.paved_weathered_limestone_stairs": "風化石灰岩鋪路石樓梯", "block.create.paved_weathered_limestone_wall": "風化石灰岩鋪路石牆", - "block.create.peculiar_bell": "UNLOCALIZED: Peculiar Bell", - "block.create.pink_nixie_tube": "UNLOCALIZED: Pink Nixie Tube", + "block.create.peculiar_bell": "黃銅鐘", + "block.create.pink_nixie_tube": "粉紅色真空管", "block.create.pink_sail": "粉紅色風帆", "block.create.pink_seat": "粉紅色坐墊", "block.create.pink_valve_handle": "粉紅色閥門開關", @@ -356,12 +356,12 @@ "block.create.powered_toggle_latch": "T型正反器", "block.create.pulley_magnet": "滑輪磁鐵", "block.create.pulse_repeater": "脈衝中繼器", - "block.create.purple_nixie_tube": "UNLOCALIZED: Purple Nixie Tube", + "block.create.purple_nixie_tube": "紫色真空管", "block.create.purple_sail": "紫色風帆", "block.create.purple_seat": "紫色坐墊", "block.create.purple_valve_handle": "紫色閥門開關", "block.create.radial_chassis": "旋轉底盤", - "block.create.red_nixie_tube": "UNLOCALIZED: Red Nixie Tube", + "block.create.red_nixie_tube": "紅色真空管", "block.create.red_sail": "紅色風帆", "block.create.red_seat": "紅色坐墊", "block.create.red_valve_handle": "紅色閥門開關", @@ -418,26 +418,26 @@ "block.create.weathered_limestone_cobblestone_wall": "碎風化石灰岩牆", "block.create.weathered_limestone_pillar": "豎紋風化石灰岩", "block.create.weighted_ejector": "物品彈射器", - "block.create.white_nixie_tube": "UNLOCALIZED: White Nixie Tube", + "block.create.white_nixie_tube": "白色真空管", "block.create.white_sail": "白色風帆", "block.create.white_seat": "白色坐墊", "block.create.white_valve_handle": "白色閥門開關", "block.create.windmill_bearing": "風車軸承", "block.create.wooden_bracket": "木製支架", - "block.create.yellow_nixie_tube": "UNLOCALIZED: Yellow Nixie Tube", + "block.create.yellow_nixie_tube": "黃色真空管", "block.create.yellow_sail": "黃色風帆", "block.create.yellow_seat": "黃色坐墊", "block.create.yellow_valve_handle": "黃色閥門開關", "block.create.zinc_block": "鋅磚", "block.create.zinc_ore": "鋅礦石", - "enchantment.create.capacity": "UNLOCALIZED: Capacity", - "enchantment.create.potato_recovery": "UNLOCALIZED: Potato Recovery", + "enchantment.create.capacity": "容量", + "enchantment.create.potato_recovery": "馬鈴薯恢復", "entity.create.contraption": "結構", - "entity.create.crafting_blueprint": "UNLOCALIZED: Crafting Blueprint", + "entity.create.crafting_blueprint": "合成藍圖", "entity.create.gantry_contraption": "門式結構", - "entity.create.potato_projectile": "UNLOCALIZED: Potato Projectile", + "entity.create.potato_projectile": "馬鈴薯彈藥", "entity.create.seat": "坐墊", "entity.create.stationary_contraption": "固定結構", "entity.create.super_glue": "強力膠", @@ -462,12 +462,13 @@ "item.create.chocolate_glazed_berries": "巧克力甜莓", "item.create.chromatic_compound": "異彩化合物", "item.create.cinder_flour": "地獄麵粉", - "item.create.copper_backtank": "UNLOCALIZED: Copper Backtank", + "item.create.copper_backtank": "銅製後背包", "item.create.copper_ingot": "銅錠", "item.create.copper_nugget": "銅粒", "item.create.copper_sheet": "銅板", "item.create.crafter_slot_cover": "合成器蓋板", - "item.create.crafting_blueprint": "UNLOCALIZED: Crafting Blueprint", + "item.create.crafting_blueprint": "合成藍圖", + "item.create.creative_cake": "UNLOCALIZED: Creative Cake", "item.create.crushed_aluminum_ore": "碎狀鋁礦石", "item.create.crushed_brass": "碎狀黃銅", "item.create.crushed_copper_ore": "碎狀銅礦石", @@ -482,8 +483,8 @@ "item.create.crushed_tin_ore": "碎狀錫礦石", "item.create.crushed_uranium_ore": "碎狀鈾礦石", "item.create.crushed_zinc_ore": "碎狀鋅礦石", - "item.create.diving_boots": "UNLOCALIZED: Diving Boots", - "item.create.diving_helmet": "UNLOCALIZED: Diving Helmet", + "item.create.diving_boots": "潛水鞋", + "item.create.diving_helmet": "潛水頭盔", "item.create.dough": "麵團", "item.create.electron_tube": "真空管", "item.create.empty_blaze_burner": "空的烈焰使者動力爐", @@ -496,17 +497,17 @@ "item.create.handheld_worldshaper": "地形雕塑器", "item.create.honey_bucket": "蜂蜜桶", "item.create.honeyed_apple": "蜂蜜蘋果", - "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": "未完成的小齒輪", + "item.create.incomplete_large_cogwheel": "未完成的大齒輪", + "item.create.incomplete_precision_mechanism": "未完成的精確控制器", "item.create.iron_sheet": "鐵板", - "item.create.linked_controller": "UNLOCALIZED: Linked Controller", + "item.create.linked_controller": "遙控器", "item.create.minecart_contraption": "裝修過的礦車", "item.create.minecart_coupling": "礦車連結器", "item.create.polished_rose_quartz": "磨製玫瑰石英", - "item.create.potato_cannon": "UNLOCALIZED: Potato Cannon", + "item.create.potato_cannon": "馬鈴薯大砲", "item.create.powdered_obsidian": "黑曜石粉末", - "item.create.precision_mechanism": "UNLOCALIZED: Precision Mechanism", + "item.create.precision_mechanism": " 精確控制器", "item.create.propeller": "扇葉", "item.create.red_sand_paper": "紅砂紙", "item.create.refined_radiance": "光輝石", @@ -651,8 +652,8 @@ "advancement.create.flywheel.desc": "將引擎成功連接到飛輪。", "advancement.create.overstress_flywheel": "壓力過大", "advancement.create.overstress_flywheel.desc": "超載熔爐引擎。", - "advancement.create.precision_mechanism": "UNLOCALIZED: Complex Curiosities", - "advancement.create.precision_mechanism.desc": "UNLOCALIZED: Assemble a Precision Mechanism.", + "advancement.create.precision_mechanism": "複雜的好奇心", + "advancement.create.precision_mechanism.desc": "組裝一個精確控制器", "advancement.create.mechanical_arm": "忙碌的手!", "advancement.create.mechanical_arm.desc": "製作機械手臂,選擇輸入和輸出,放置並給它動能; 然後看著它完成所有你交代的工作。", "advancement.create.musical_arm": "沒人能在我的BGM裡打敗我!", @@ -679,8 +680,8 @@ "advancement.create.wand_of_symmetry.desc": "製作一個對稱杖", "advancement.create.extendo_grip": "piu piu piu!", "advancement.create.extendo_grip.desc": "拿到一個伸縮機械手", - "advancement.create.potato_cannon": "UNLOCALIZED: Fwoomp!", - "advancement.create.potato_cannon.desc": "UNLOCALIZED: Defeat an enemy with your Potato Cannon.", + "advancement.create.potato_cannon": "噗~碰", + "advancement.create.potato_cannon.desc": "用馬鈴薯大砲擊殺一隻怪物", "advancement.create.dual_extendo_grip": "piu——piu——piu——", "advancement.create.dual_extendo_grip.desc": "雙持伸縮機械手進一步加長觸碰距離", "advancement.create.eob": "Beta版結束", @@ -693,30 +694,30 @@ "itemGroup.create.palettes": "動力機械建築與裝飾方塊", "death.attack.create.crush": "%1$s被壓扁了", - "death.attack.create.crush.player": "UNLOCALIZED: %1$s was thrown into Crushing Wheels by %2$s", + "death.attack.create.crush.player": "%1$s 被 %2$s 打包丟進粉碎輪", "death.attack.create.fan_fire": "%1$s想接受熱風的洗禮", - "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 被 %2$s 推入火坑", "death.attack.create.fan_lava": "%1$s想接受熱風的洗禮但走火入魔", - "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 被 %2$s 推進岩漿", "death.attack.create.mechanical_drill": "%1$s被鑽頭鑽爆腦袋", - "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 被 %2$s 當成礦物放在鑽頭前面而死", "death.attack.create.mechanical_saw": "%1$s被鋸切成了兩半", - "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 被 %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": "UNLOCALIZED: %1$s was blown up by tampered cuckoo clock", + "death.attack.create.cuckoo_clock_explosion.player": "%1$s 被布穀鳥鐘炸得粉身碎骨", "create.block.deployer.damage_source_name": "機械手", "create.block.cart_assembler.invalid": "將您的礦車裝修站放在鐵軌上", - "create.menu.return": "UNLOCALIZED: Return to Menu", - "create.menu.configure": "UNLOCALIZED: Configure...", - "create.menu.ponder_index": "UNLOCALIZED: Ponder Index", + "create.menu.return": "回到選單", + "create.menu.configure": "設定", + "create.menu.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.project_page": "專案頁面", + "create.menu.report_bugs": "回報問題", + "create.menu.support": "支持我們", "create.recipe.crushing": "粉碎", "create.recipe.milling": "研磨", @@ -742,16 +743,16 @@ "create.recipe.mystery_conversion": "神秘轉化", "create.recipe.spout_filling": "注液", "create.recipe.draining": "分液", - "create.recipe.sequenced_assembly": "UNLOCALIZED: Sequenced Assembly", - "create.recipe.assembly.next": "UNLOCALIZED: Next: %1$s", - "create.recipe.assembly.step": "UNLOCALIZED: Step %1$s:", - "create.recipe.assembly.progress": "UNLOCALIZED: Progress: %1$s/%2$s", + "create.recipe.sequenced_assembly": "排序中的步驟", + "create.recipe.assembly.next": "下一步:%1$s", + "create.recipe.assembly.step": "步驟 %1$s:", + "create.recipe.assembly.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.assembly.spout_filling_fluid": "注入:%1$s", + "create.recipe.assembly.deploying_item": "使用:%1$s", + "create.recipe.assembly.cutting": "用鋸子切", + "create.recipe.assembly.repeat": "重複 %1$s 次", + "create.recipe.assembly.junk": "有機率得到垃圾", "create.recipe.processing.chance": "%1$s%%概率", "create.recipe.heat_requirement.none": "不需要加熱", "create.recipe.heat_requirement.heated": "普通加熱", @@ -805,15 +806,15 @@ "create.orientation.alongX": "以x軸對齊", "create.gui.terrainzapper.title": "地形雕塑器", - "create.gui.terrainzapper.searchDiagonal": "UNLOCALIZED: Follow Diagonals", - "create.gui.terrainzapper.searchFuzzy": "UNLOCALIZED: Ignore Material Borders", + "create.gui.terrainzapper.searchDiagonal": "跟隨對角線", + "create.gui.terrainzapper.searchFuzzy": "忽略材質邊界", "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.pattern.solid": "填滿", + "create.gui.terrainzapper.pattern.checkered": "棋盤狀", + "create.gui.terrainzapper.pattern.inversecheckered": "反轉棋盤狀", + "create.gui.terrainzapper.pattern.chance25": "隨機填滿 25% 的面積", + "create.gui.terrainzapper.pattern.chance50": "隨機填滿 50% 的面積", + "create.gui.terrainzapper.pattern.chance75": "隨機填滿 75% 的面積", "create.gui.terrainzapper.placement": "放置模式", "create.gui.terrainzapper.placement.merged": "結合", "create.gui.terrainzapper.placement.attached": "依附", @@ -822,8 +823,8 @@ "create.gui.terrainzapper.brush.cuboid": "矩形體", "create.gui.terrainzapper.brush.sphere": "球體", "create.gui.terrainzapper.brush.cylinder": "圓柱體", - "create.gui.terrainzapper.brush.surface": "UNLOCALIZED: Surface", - "create.gui.terrainzapper.brush.cluster": "UNLOCALIZED: Cluster", + "create.gui.terrainzapper.brush.surface": "表面", + "create.gui.terrainzapper.brush.cluster": "群組", "create.gui.terrainzapper.tool": "填充類型", "create.gui.terrainzapper.tool.fill": "填充", "create.gui.terrainzapper.tool.place": "覆寫", @@ -833,8 +834,8 @@ "create.gui.terrainzapper.tool.flatten": "平整", "create.terrainzapper.shiftRightClickToSet": "Shift+滑鼠右鍵 以設定雕塑類型", - "create.terrainzapper.usingBlock": "UNLOCALIZED: Using: %1$s", - "create.terrainzapper.leftClickToSet": "UNLOCALIZED: Left-Click a Block to set Material", + "create.terrainzapper.usingBlock": "使用:%1$s", + "create.terrainzapper.leftClickToSet": "左鍵點擊方塊可以設定材質", "create.minecart_coupling.two_couplings_max": "礦車無法被連接兩個以上的礦車連結器", "create.minecart_coupling.unloaded": "有一部份礦車存在於未讀取區塊中", @@ -1065,11 +1066,11 @@ "create.item_attributes.in_item_group.inverted": "不屬於%1$s", "create.item_attributes.added_by": "由%1$s添加", "create.item_attributes.added_by.inverted": "不是由%1$s添加", - "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": "界伏盒是 %1$s", + "create.item_attributes.shulker_level.inverted": "界伏盒不是 %1$s", + "create.item_attributes.shulker_level.full": "滿的", + "create.item_attributes.shulker_level.empty": "空的", + "create.item_attributes.shulker_level.partial": "有裝東西但沒滿", "create.item_attributes.has_enchant": "有附魔效果%1$s", "create.item_attributes.has_enchant.inverted": "沒有附魔效果%1$s", "create.item_attributes.color": "已被染色成 %1$s", @@ -1165,27 +1166,27 @@ "create.tooltip.chute.fans_pull_up": "鼓風機從下方進行吸引", "create.tooltip.chute.fans_pull_down": "鼓風機從上方進行吸引", "create.tooltip.chute.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.brass_tunnel.contains": "正在處理", + "create.tooltip.brass_tunnel.contains_entry": "> %1$s x%2$s", + "create.tooltip.brass_tunnel.retrieve": "右鍵取回", - "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": "綁定模式", + "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", - "create.crafting_blueprint.crafting_slot": "UNLOCALIZED: Ingredient Slot", + "create.crafting_blueprint.crafting_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.display_slot": "顯示格", + "create.crafting_blueprint.inferred": "根據配方推論", + "create.crafting_blueprint.manually_assigned": "手動設定", + "create.crafting_blueprint.secondary_display_slot": "次要顯示格", + "create.crafting_blueprint.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 攻擊傷害", + "create.potato_cannon.ammo.reload_ticks": "%1$s 攻擊速度", + "create.potato_cannon.ammo.knockback": "%1$s 擊退", "create.hint.hose_pulley.title": "無限供應", "create.hint.hose_pulley": "目標液體為無限供應", @@ -1214,44 +1215,44 @@ "create.command.killTPSCommand.argument.tickTime": "tickTime", "create.contraption.minecart_contraption_too_big": "這個礦車結構太大了而無法撿取", - "create.contraption.minecart_contraption_illegal_pickup": "UNLOCALIZED: A mystical force is binding this Cart Contraption to the world", + "create.contraption.minecart_contraption_illegal_pickup": "一股神秘的力量將這個礦車結構與世界綁在一起", "_": "->------------------------] 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.contraption_disassemble": "結構停止", + "create.subtitle.peculiar_bell_use": "黃銅鐘聲", + "create.subtitle.mixing": "攪拌機噪音", "create.subtitle.mechanical_press_activation_belt": "液壓機工作", - "create.subtitle.fwoomp": "UNLOCALIZED: Potato Launcher fwoomps", - "create.subtitle.worldshaper_place": "UNLOCALIZED: Worldshaper zaps", - "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.fwoomp": "馬鈴薯大砲發射", + "create.subtitle.worldshaper_place": "地形塑造器發射聲", + "create.subtitle.crushing_1": "粉碎機咀嚼聲", + "create.subtitle.depot_slide": "物品滑動聲", + "create.subtitle.saw_activate_stone": "機械鋸子聲", "create.subtitle.blaze_munch": "烈焰使者開心地吃著", "create.subtitle.funnel_flap": "UNLOCALIZED: Funnel Flaps", "create.subtitle.schematicannon_finish": "藍圖大炮完成任務", - "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.cogs": "UNLOCALIZED: Cogwheels rumble", + "create.subtitle.haunted_bell_use": "靈魂鐘敲響", + "create.subtitle.scroll_value": "滾動輸入聲", + "create.subtitle.crafter_craft": "機械合成器合成聲", + "create.subtitle.controller_put": "遙控器放置聲", + "create.subtitle.cranking": "手搖把手轉動聲", + "create.subtitle.wrench_remove": "零件移除聲", + "create.subtitle.cogs": "齒輪隆隆聲", "create.subtitle.slime_added": "黏液擠壓", "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.deployer_polish": "UNLOCALIZED: Deployer applies polish", + "create.subtitle.potato_hit": "食物撞擊聲", + "create.subtitle.saw_activate_wood": "機械鋸子運作聲", + "create.subtitle.haunted_bell_convert": "靈魂鐘轉化聲", + "create.subtitle.deployer_polish": "機械手拋光聲", "create.subtitle.deny": "UNLOCALIZED: Declining boop", - "create.subtitle.controller_click": "UNLOCALIZED: Controller clicks", + "create.subtitle.controller_click": "遙控器按鍵聲", "create.subtitle.schematicannon_launch_block": "藍圖大炮發射", - "create.subtitle.copper_armor_equip": "UNLOCALIZED: Diving equipment clinks", - "create.subtitle.controller_take": "UNLOCALIZED: Lectern empties", + "create.subtitle.copper_armor_equip": "潛水裝裝備聲", + "create.subtitle.controller_take": "拿下遙控器", "create.subtitle.mechanical_press_activation": "液壓機工作", - "create.subtitle.contraption_assemble": "UNLOCALIZED: Contraption moves", - "create.subtitle.crafter_click": "UNLOCALIZED: Crafter clicks", + "create.subtitle.contraption_assemble": "結構移動", + "create.subtitle.crafter_click": "機械合成器工作聲", "create.subtitle.depot_plop": "UNLOCALIZED: Item lands", "create.subtitle.confirm": "UNLOCALIZED: Affirmative ding", @@ -1310,15 +1311,15 @@ "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": "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.condition2": "當裝備銅製後背包時", + "item.create.extendo_grip.tooltip.behaviour2": "_不會消耗耐久_ 但是會抽取銅製後背包裡的_壓縮空氣_", - "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": "馬鈴薯大砲", + "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": "將物品更精確地進行_篩選分類_,可以同時_篩選_多個物品或者將已標記的_過濾器_放在另一個_過濾器_里_嵌套_使用。", @@ -1427,82 +1428,82 @@ "item.create.refined_radiance.tooltip": "光輝石", "item.create.refined_radiance.tooltip.summary": "一種用_光輝_鍛造的化合物材料。", - "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.condition1": "工作進度", + "item.create.refined_radiance.tooltip.behaviour1": "在未來的更新中會更新更多用途", "item.create.shadow_steel.tooltip": "暗影鋼", "item.create.shadow_steel.tooltip.summary": "一種用_虛空_鍛造的化合物材料。", - "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.condition1": "工作進度", + "item.create.shadow_steel.tooltip.behaviour1": "在未來的更新中會更新更多用途", - "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": "遙控器", + "item.create.linked_controller.tooltip.summary": "提供_六個_連接到相對應_按鍵_的_無線紅石訊號機_ _手持的控制_", + "item.create.linked_controller.tooltip.condition1": "點擊右鍵時", + "item.create.linked_controller.tooltip.behaviour1": "_切換_遙控器,當遙控器啟動時你會失去_移動控制_", + "item.create.linked_controller.tooltip.condition2": "當右鍵時", + "item.create.linked_controller.tooltip.behaviour2": "打開_設定面板_", + "item.create.linked_controller.tooltip.condition3": "當對無線紅石訊號機點右鍵時", + "item.create.linked_controller.tooltip.behaviour3": "開啟_綁定模式_。按_六個控制鍵_的其中一個來綁定_頻率_到遙控器上", + "item.create.linked_controller.tooltip.condition4": "當對講台按右鍵時", + "item.create.linked_controller.tooltip.behaviour4": "把遙控器放到講台上,可以更方便的控制它。(蹲下右鍵取回)", - "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": "潛水頭盔", + "item.create.diving_helmet.tooltip.summary": "和_銅製後背包_一起裝備時可以延長在_水下呼吸_的時間", + "item.create.diving_helmet.tooltip.condition1": "當裝備時", + "item.create.diving_helmet.tooltip.behaviour1": "提昇_水下呼吸效果_,會緩慢的抽取銅製後背包中的_壓縮空氣_", - "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": "銅製後背包", + "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.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": "潛水鞋", + "item.create.diving_boots.tooltip.summary": "一雙_沈重的鞋子_,提供更好的水下移動", + "item.create.diving_boots.tooltip.condition1": "當裝備時", + "item.create.diving_boots.tooltip.behaviour1": "你可以在水下走得更快而且可以跳躍,但是不能游泳。穿著者不會被輸送帶移動。", - "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": "合成藍圖", + "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": "將兩個礦車耦合在一起,在移動時將它們保持_恒定的距離_。", - "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": "黃銅鐘", + "block.create.peculiar_bell.tooltip.summary": "一個裝飾性的_鐘_,放在_靈魂火_正上方會有意想不到的副作用", - "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": "靈魂鐘", + "block.create.haunted_bell.tooltip.summary": "一個受到地獄亡魂_詛咒的鐘_", + "block.create.haunted_bell.tooltip.condition1": "當拿者或是被敲響時", + "block.create.haunted_bell.tooltip.behaviour1": "標示附近_不夠亮_、會生成_敵對生物_的地方", "_": "->------------------------] Ponder Content [------------------------<-", - "create.ponder.hold_to_ponder": "按住 [%1$s] 來思考此物品", + "create.ponder.hold_to_ponder": "按住 [%1$s] 來查看此物品的教學", "create.ponder.subject": "本場景的主題", - "create.ponder.pondering": "思考有關於...", + "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.replay": "重放", + "create.ponder.replay": "重播", "create.ponder.think_back": "返回", - "create.ponder.slow_text": "降低文字顯示速度", - "create.ponder.exit": "UNLOCALIZED: Exit", - "create.ponder.welcome": "UNLOCALIZED: Welcome to Ponder", - "create.ponder.categories": "UNLOCALIZED: Available Categories in Create", - "create.ponder.index_description": "UNLOCALIZED: Click one of the icons to learn about its associated Items and Blocks", - "create.ponder.index_title": "UNLOCALIZED: Ponder Index", + "create.ponder.slow_text": "放慢文字顯示速度", + "create.ponder.exit": "離開", + "create.ponder.welcome": "歡迎來到教學", + "create.ponder.categories": "Create 中的分類", + "create.ponder.index_description": "點擊其中一個圖像查看和他相關的物品以及方塊", + "create.ponder.index_title": "教學首頁", "create.ponder.shared.movement_anchors": "有了機殼底盤和強力膠就可以移動大型結構", "create.ponder.shared.rpm32": "32 RPM", "create.ponder.shared.sneak_and": "潛行 +", @@ -1514,14 +1515,14 @@ "create.ponder.shared.rpm16": "16 RPM", "create.ponder.tag.kinetic_sources": "動能產生裝置", "create.ponder.tag.kinetic_sources.description": "該裝置能夠產生動能", - "create.ponder.tag.contraption_actor": "Contraption Actors", - "create.ponder.tag.contraption_actor.description": "Components which expose special behaviour when attached to a moving contraption", + "create.ponder.tag.contraption_actor": "特殊方塊", + "create.ponder.tag.contraption_actor.description": "附加到移動裝置上時表現出特殊行為的方塊", "create.ponder.tag.arm_targets": "機械手臂的目標物", "create.ponder.tag.arm_targets.description": "該裝置可作為機械手臂的工作目標", "create.ponder.tag.logistics": "傳輸物品", "create.ponder.tag.logistics.description": "該裝置用於物品的傳輸", - "create.ponder.tag.movement_anchor": "Movement Anchors", - "create.ponder.tag.movement_anchor.description": "Components which allow the creation of moving contraptions, animating an attached structure in a variety of ways", + "create.ponder.tag.movement_anchor": "運動錨點", + "create.ponder.tag.movement_anchor.description": "允許建立移動裝置的元件,以各種方式為連接的結構設置動畫", "create.ponder.tag.creative": "創造模式", "create.ponder.tag.creative.description": "該裝置無法在生存模式中獲得", "create.ponder.tag.kinetic_relays": "動能傳遞方塊", @@ -1650,7 +1651,7 @@ "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_3": "UNLOCALIZED: If the Assembler is set to Lock Rotation, the contraptions' orientation will never change", + "create.ponder.cart_assembler_modes.text_3": "如果在裝修站鎖定其方向,則結構方向不會隨礦車方向改變", "create.ponder.cart_assembler_rails.header": "其他種類的礦車和鐵軌", "create.ponder.cart_assembler_rails.text_1": "放在普通鐵軌上的礦車裝修站不會影響礦車的動作", @@ -1704,11 +1705,11 @@ "create.ponder.cogwheel.text_1": "齒輪會將動力傳遞至臨近的齒輪", "create.ponder.cogwheel.text_2": "以此方式連接的齒輪,旋轉方向相反", - "create.ponder.creative_fluid_tank.header": "UNLOCALIZED: Creative Fluid Tanks", - "create.ponder.creative_fluid_tank.text_1": "UNLOCALIZED: Creative Fluid Tanks can be used to provide a bottomless supply of fluid", - "create.ponder.creative_fluid_tank.text_2": "UNLOCALIZED: Right-Click with a fluid containing item to configure it", - "create.ponder.creative_fluid_tank.text_3": "UNLOCALIZED: Pipe Networks can now endlessly draw the assigned fluid from the tank", - "create.ponder.creative_fluid_tank.text_4": "UNLOCALIZED: Any Fluids pushed back into a Creative Fluid Tank will be voided", + "create.ponder.creative_fluid_tank.header": "創造液體除存罐", + "create.ponder.creative_fluid_tank.text_1": "創造液體除存罐可以提供無限的液體", + "create.ponder.creative_fluid_tank.text_2": "拿著一個液體物品點擊可以設定它", + "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": "創造馬達不僅能夠手動設定輸出動能,而且體積相當小巧", @@ -1746,11 +1747,11 @@ "create.ponder.deployer_modes.text_1": "在設設情況下,機械手模仿玩家的右鍵", "create.ponder.deployer_modes.text_2": "使用扳手可以將模式調整為模仿玩家的左鍵", - "create.ponder.deployer_processing.header": "UNLOCALIZED: Processing Items using Deployers", - "create.ponder.deployer_processing.text_1": "UNLOCALIZED: With a fitting held item, Deployers can process items provided beneath them", - "create.ponder.deployer_processing.text_2": "UNLOCALIZED: The Input items can be dropped or placed on a Depot under the Deployer", - "create.ponder.deployer_processing.text_3": "UNLOCALIZED: When items are provided on a belt...", - "create.ponder.deployer_processing.text_4": "UNLOCALIZED: The Deployer will hold and process them automatically", + "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_redstone.header": "使用紅石控制機械手", "create.ponder.deployer_redstone.text_1": "當機械手收到紅時訊號時會停止工作", @@ -1768,7 +1769,7 @@ "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": "UNLOCALIZED: The flame can be transformed using a soul-infused item", + "create.ponder.empty_blaze_burner.text_5": "可以放入靈魂物品將火焰轉化成靈魂火", "create.ponder.empty_blaze_burner.text_6": "但是,這樣的熱源不足以給機器提加工供足夠的熱量", "create.ponder.encased_fluid_pipe.header": "UNLOCALIZED: Encasing Fluid Pipes", @@ -1794,34 +1795,34 @@ "create.ponder.fan_source.text_1": "如鼓風機的扇葉向下朝著熱源放置,鼓風機可以藉此產生動能", "create.ponder.fan_source.text_2": "當鼓風機接受紅石訊號後,它便會向外供給動能", - "create.ponder.fluid_pipe_flow.header": "UNLOCALIZED: Moving Fluids using Copper Pipes", - "create.ponder.fluid_pipe_flow.text_1": "UNLOCALIZED: Fluid Pipes can connect two or more fluid sources and targets", - "create.ponder.fluid_pipe_flow.text_2": "UNLOCALIZED: Using a wrench, a straight pipe segment can be given a window", - "create.ponder.fluid_pipe_flow.text_3": "UNLOCALIZED: Windowed pipes will not connect to any other adjacent pipe segments", - "create.ponder.fluid_pipe_flow.text_4": "UNLOCALIZED: Powered by Mechanical Pumps, the Pipes can transport Fluids", - "create.ponder.fluid_pipe_flow.text_5": "UNLOCALIZED: No fluid is being extracted at first", - "create.ponder.fluid_pipe_flow.text_6": "UNLOCALIZED: Once the flow connects them, the endpoints gradually transfer their contents", - "create.ponder.fluid_pipe_flow.text_7": "UNLOCALIZED: Thus, the Pipe blocks themselves never 'physically' contain any fluid", + "create.ponder.fluid_pipe_flow.header": "始用銅製管道來移動液體", + "create.ponder.fluid_pipe_flow.text_1": "液體管可以連接兩個或更多的液體來源與目標", + "create.ponder.fluid_pipe_flow.text_2": "使用扳手可以在一段直管線上開窗戶", + "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_7": "因此,管線裡不會『物理上的』含有液體", - "create.ponder.fluid_pipe_interaction.header": "UNLOCALIZED: Draining and Filling fluid containers", - "create.ponder.fluid_pipe_interaction.text_1": "UNLOCALIZED: Endpoints of a pipe network can interact with a variety of blocks", - "create.ponder.fluid_pipe_interaction.text_2": "UNLOCALIZED: Any block with fluid storage capabilities can be filled or drained", - "create.ponder.fluid_pipe_interaction.text_3": "UNLOCALIZED: Source blocks right in front of an open end can be picked up...", - "create.ponder.fluid_pipe_interaction.text_4": "UNLOCALIZED: ...while spilling into empty spaces can create fluid sources", - "create.ponder.fluid_pipe_interaction.text_5": "UNLOCALIZED: Pipes can also extract fluids from a handful of other blocks directly", + "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_5": "管線也可以直接從其他方塊中抽取流體", - "create.ponder.fluid_tank_sizes.header": "UNLOCALIZED: Dimensions of a Fluid tank", - "create.ponder.fluid_tank_sizes.text_1": "UNLOCALIZED: Fluid Tanks can be combined to increase the total capacity", - "create.ponder.fluid_tank_sizes.text_2": "UNLOCALIZED: Their base square can be up to 3 blocks wide...", - "create.ponder.fluid_tank_sizes.text_3": "UNLOCALIZED: ...and grow in height by more than 30 additional layers", - "create.ponder.fluid_tank_sizes.text_4": "UNLOCALIZED: Using a Wrench, a tanks' window can be toggled", + "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_4": "扳手可以用來開關窗戶", - "create.ponder.fluid_tank_storage.header": "UNLOCALIZED: Storing Fluids in Fluid Tanks", - "create.ponder.fluid_tank_storage.text_1": "UNLOCALIZED: Fluid Tanks can be used to store large amounts of fluid", - "create.ponder.fluid_tank_storage.text_2": "UNLOCALIZED: Pipe networks can push and pull fluids from any side", - "create.ponder.fluid_tank_storage.text_3": "UNLOCALIZED: The contained fluid can be measured by a Comparator", - "create.ponder.fluid_tank_storage.text_4": "UNLOCALIZED: However, in Survival Mode Fluids cannot be added or taken manually", - "create.ponder.fluid_tank_storage.text_5": "UNLOCALIZED: You can use Basins, Item Drains and Spouts to drain or fill fluid containing items", + "create.ponder.fluid_tank_storage.header": "在液體罐中儲存液體", + "create.ponder.fluid_tank_storage.text_1": "液體罐中可儲存大量的液體", + "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.flywheel.header": "使用飛輪來產生動能", "create.ponder.flywheel.text_1": "飛輪和熔爐引擎必須配套使用,方可產生動能", @@ -1896,33 +1897,33 @@ "create.ponder.hand_crank.text_3": "它產生的轉速相對較高", "create.ponder.hand_crank.text_4": "潛行長按右鍵可以順時針旋轉它", - "create.ponder.hose_pulley.header": "UNLOCALIZED: Source Filling and Draining using Hose Pulleys", - "create.ponder.hose_pulley.text_1": "UNLOCALIZED: Hose Pulleys can be used to fill or drain large bodies of Fluid", - "create.ponder.hose_pulley.text_2": "UNLOCALIZED: With the Kinetic Input, the height of the pulleys' hose can be controlled", - "create.ponder.hose_pulley.text_3": "UNLOCALIZED: The Pulley retracts while the input rotation is inverted", - "create.ponder.hose_pulley.text_4": "UNLOCALIZED: On the opposite side, pipes can be connected", - "create.ponder.hose_pulley.text_5": "UNLOCALIZED: Attached pipe networks can either provide fluid to the hose...", - "create.ponder.hose_pulley.text_6": "UNLOCALIZED: ...or pull from it, draining the pool instead", - "create.ponder.hose_pulley.text_7": "UNLOCALIZED: Fill and Drain speed of the pulley depends entirely on the fluid networks' throughput", + "create.ponder.hose_pulley.header": "使用軟管滑輪抽取、填滿液體", + "create.ponder.hose_pulley.text_1": "軟管滑輪可以用來抽取、填滿大量的液體", + "create.ponder.hose_pulley.text_2": "你可以透過輸入轉動來控制軟管的高度", + "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_7": "抽取或填滿的速度取決於管線系統的吞吐量", - "create.ponder.hose_pulley_infinite.header": "UNLOCALIZED: Passively Filling and Draining large bodies of Fluid", - "create.ponder.hose_pulley_infinite.text_1": "UNLOCALIZED: When deploying the Hose Pulley into a large enough ocean...", - "create.ponder.hose_pulley_infinite.text_2": "UNLOCALIZED: It will provide/dispose fluids without affecting the source", - "create.ponder.hose_pulley_infinite.text_3": "UNLOCALIZED: Pipe networks can limitlessly take fluids from/to such pulleys", + "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": "UNLOCALIZED: Fill and Drain level of Hose Pulleys", - "create.ponder.hose_pulley_level.text_1": "UNLOCALIZED: While fully retracted, the Hose Pulley cannot operate", - "create.ponder.hose_pulley_level.text_2": "UNLOCALIZED: Draining runs from top to bottom", - "create.ponder.hose_pulley_level.text_3": "UNLOCALIZED: The surface level will end up just below where the hose ends", - "create.ponder.hose_pulley_level.text_4": "UNLOCALIZED: Filling runs from bottom to top", - "create.ponder.hose_pulley_level.text_5": "UNLOCALIZED: The filled pool will not grow beyond the layer above the hose end", + "create.ponder.hose_pulley_level.header": "軟管滑輪抽取、填滿水平面", + "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": "而填充工作將由下而上進行將由上而下進行", + "create.ponder.hose_pulley_level.text_5": "水平面不會超過軟管末端", - "create.ponder.item_drain.header": "UNLOCALIZED: Emptying Fluid Containers using Item Drains", - "create.ponder.item_drain.text_1": "UNLOCALIZED: Item Drains can extract fluids from items", - "create.ponder.item_drain.text_2": "UNLOCALIZED: Right-click it to pour fluids from your held item into it", - "create.ponder.item_drain.text_3": "UNLOCALIZED: When items are inserted from the side...", - "create.ponder.item_drain.text_4": "UNLOCALIZED: ...they roll across, emptying out their contained fluid", - "create.ponder.item_drain.text_5": "UNLOCALIZED: Pipe Networks can now pull the fluid from the drains' internal buffer", + "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.large_cogwheel.header": "使用大齒輪傳遞動能", "create.ponder.large_cogwheel.text_1": "大齒輪可以以特定的角度相互連接", @@ -2046,20 +2047,20 @@ "create.ponder.mechanical_press_compacting.text_3": "一些配方可能需要烈焰人燃燒室提供熱量", "create.ponder.mechanical_press_compacting.text_4": "過濾槽可用於解決兩個配方相互衝突的情況", - "create.ponder.mechanical_pump_flow.header": "UNLOCALIZED: Fluid Transportation using Mechanical Pumps", - "create.ponder.mechanical_pump_flow.text_1": "UNLOCALIZED: Mechanical Pumps govern the flow of their attached pipe networks", - "create.ponder.mechanical_pump_flow.text_2": "UNLOCALIZED: When powered, their arrow indicates the direction of flow", - "create.ponder.mechanical_pump_flow.text_3": "UNLOCALIZED: The network behind is now pulling fluids...", - "create.ponder.mechanical_pump_flow.text_4": "UNLOCALIZED: ...while the network in front is transferring it outward", - "create.ponder.mechanical_pump_flow.text_5": "UNLOCALIZED: Reversing the input rotation reverses the direction of flow", - "create.ponder.mechanical_pump_flow.text_6": "UNLOCALIZED: Use a Wrench to reverse the orientation of pumps manually", + "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_5": "反轉輸入的動力可以反轉液體的方向", + "create.ponder.mechanical_pump_flow.text_6": "扳手可以手動調整方向", - "create.ponder.mechanical_pump_speed.header": "UNLOCALIZED: Throughput of Mechanical Pumps", - "create.ponder.mechanical_pump_speed.text_1": "UNLOCALIZED: Regardless of speed, Mechanical Pumps affect pipes connected up to 16 blocks away", - "create.ponder.mechanical_pump_speed.text_2": "UNLOCALIZED: Speeding up the input rotation changes the speed of flow propagation...", - "create.ponder.mechanical_pump_speed.text_3": "UNLOCALIZED: ...aswell as how quickly fluids are transferred", - "create.ponder.mechanical_pump_speed.text_4": "UNLOCALIZED: Pumps can combine their throughputs within shared pipe networks", - "create.ponder.mechanical_pump_speed.text_5": "UNLOCALIZED: Alternating their orientation can help align their flow directions", + "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_4": "在同一個管線網路中機械幫浦可以結合他們的吞吐量", + "create.ponder.mechanical_pump_speed.text_5": "改變它們的方向可以對齊它們的流動方向", "create.ponder.mechanical_saw_breaker.header": "使用動力鋸伐木", "create.ponder.mechanical_saw_breaker.text_1": "向其通入動能後,動力鋸可以直接砍伐掉它面前的樹木", @@ -2086,21 +2087,21 @@ "create.ponder.nixie_tube.header": "使用真空管顯示器", "create.ponder.nixie_tube.text_1": "通入紅石訊號後,真空管顯示器會顯示出紅石訊號的強度", "create.ponder.nixie_tube.text_2": "使用命名牌在鐵砧上為其命名,可以自訂它的顯示文本", - "create.ponder.nixie_tube.text_3": "UNLOCALIZED: Right-Click with Dye to change their display colour", + "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.portable_fluid_interface.header": "UNLOCALIZED: Contraption Fluid Exchange", - "create.ponder.portable_fluid_interface.text_1": "UNLOCALIZED: Fluid Tanks on moving contraptions cannot be accessed by any pipes", - "create.ponder.portable_fluid_interface.text_2": "UNLOCALIZED: This component can interact with fluid tanks without the need to stop the contraption", - "create.ponder.portable_fluid_interface.text_3": "UNLOCALIZED: Place a second one with a gap of 1 or 2 blocks inbetween", - "create.ponder.portable_fluid_interface.text_4": "UNLOCALIZED: Whenever they pass by each other, they will engage in a connection", - "create.ponder.portable_fluid_interface.text_5": "UNLOCALIZED: While engaged, the stationary interface will represent ALL Tanks on the contraption", - "create.ponder.portable_fluid_interface.text_6": "UNLOCALIZED: Fluid can now be inserted...", - "create.ponder.portable_fluid_interface.text_7": "UNLOCALIZED: ...or extracted from the contraption", - "create.ponder.portable_fluid_interface.text_8": "UNLOCALIZED: After no contents have been exchanged for a while, the contraption will continue on its way", + "create.ponder.portable_fluid_interface.header": "移動式液體口", + "create.ponder.portable_fluid_interface.text_1": "任何管道線都無法與移動裝置上的液體罐連接", + "create.ponder.portable_fluid_interface.text_2": "該元件可以與液體罐相互作用,而無需停止裝置", + "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_8": "一段時間沒有液體交換後,裝置將繼續前進", "create.ponder.portable_storage_interface.header": "裝置存儲交換", "create.ponder.portable_storage_interface.text_1": "玩家無法與運動裝置內的存儲空間進行互動", @@ -2199,24 +2200,24 @@ "create.ponder.smart_chute.text_3": "使用滑鼠滾輪可以指定被過濾的物品數量", "create.ponder.smart_chute.text_4": "通入紅石訊號,智慧溜槽將會完全暫停工作", - "create.ponder.smart_pipe.header": "UNLOCALIZED: Controlling Fluid flow using Smart Pipes", - "create.ponder.smart_pipe.text_1": "UNLOCALIZED: Smart pipes can help control flows by fluid type", - "create.ponder.smart_pipe.text_2": "UNLOCALIZED: When placed directly at the source, they can specify the type of fluid to extract", - "create.ponder.smart_pipe.text_3": "UNLOCALIZED: Simply Right-Click their filter slot with any item containing the desired fluid", - "create.ponder.smart_pipe.text_4": "UNLOCALIZED: When placed further down a pipe network, smart pipes will only let matching fluids continue", + "create.ponder.smart_pipe.header": "使用智慧液體管道控制液體", + "create.ponder.smart_pipe.text_1": "智慧液體管道可以按照液體類型控制液體流", + "create.ponder.smart_pipe.text_2": "當直接放置在源頭時,他們可以指定要提取的液體類型", + "create.ponder.smart_pipe.text_3": "只需用包含所需液體的任何項目右鍵點擊其過濾槽", + "create.ponder.smart_pipe.text_4": "在管網裡時,智慧液體管道只會讓匹配的液體經過", "create.ponder.speedometer.header": "使用速度計來監測轉速", "create.ponder.speedometer.text_1": "速度計能顯示相接組件的轉速", "create.ponder.speedometer.text_2": "當佩戴MR護目鏡時,可以看到儀表所顯示的更詳細的數據", "create.ponder.speedometer.text_3": "紅石比較器可以根據速度計的數值輸出不同強弱的紅石訊號", - "create.ponder.spout_filling.header": "UNLOCALIZED: Filling Items using a Spout", - "create.ponder.spout_filling.text_1": "UNLOCALIZED: The Spout can fill fluid holding items provided beneath it", - "create.ponder.spout_filling.text_2": "UNLOCALIZED: The content of a Spout cannot be accessed manually", - "create.ponder.spout_filling.text_3": "UNLOCALIZED: Instead, Pipes can be used to supply it with fluids", - "create.ponder.spout_filling.text_4": "UNLOCALIZED: The Input items can be placed on a Depot under the Spout", - "create.ponder.spout_filling.text_5": "UNLOCALIZED: When items are provided on a belt...", - "create.ponder.spout_filling.text_6": "UNLOCALIZED: The Spout will hold and process them automatically", + "create.ponder.spout_filling.header": "使用液體灌注器填充物品", + "create.ponder.spout_filling.text_1": "液體灌注器可以填充下方的液體容器", + "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_6": "液體灌注器會停下他並且自動填滿", "create.ponder.stabilized_bearings.header": "裝置固定朝向", "create.ponder.stabilized_bearings.text_1": "當動力軸承在結構被帶動時...", @@ -2249,11 +2250,11 @@ "create.ponder.valve_handle.text_4": "潛行右擊可使它順時針旋轉", "create.ponder.valve_handle.text_5": "可以透過染色來美化閥門手輪", - "create.ponder.valve_pipe.header": "UNLOCALIZED: Controlling Fluid flow using Valves", - "create.ponder.valve_pipe.text_1": "UNLOCALIZED: Valve pipes help control fluids propagating through pipe networks", - "create.ponder.valve_pipe.text_2": "UNLOCALIZED: Their shaft input controls whether fluid is currently allowed through", - "create.ponder.valve_pipe.text_3": "UNLOCALIZED: Given Rotational Force in the opening direction, the valve will open up", - "create.ponder.valve_pipe.text_4": "UNLOCALIZED: It can be closed again by reversing the input rotation", + "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": "水車利用臨近的水流來進行應力發生", diff --git a/src/generated/resources/assets/create/models/item/creative_cake.json b/src/generated/resources/assets/create/models/item/creative_cake.json new file mode 100644 index 000000000..099efc773 --- /dev/null +++ b/src/generated/resources/assets/create/models/item/creative_cake.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "create:item/creative_cake" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/tags/items/upright_on_belt.json b/src/generated/resources/data/create/tags/items/upright_on_belt.json index 0aa3286d8..7c95b9dc3 100644 --- a/src/generated/resources/data/create/tags/items/upright_on_belt.json +++ b/src/generated/resources/data/create/tags/items/upright_on_belt.json @@ -3,6 +3,7 @@ "values": [ "create:blaze_cake_base", "create:blaze_cake", + "create:creative_cake", "create:builders_tea", "minecraft:glass_bottle", "minecraft:potion", diff --git a/src/main/java/com/simibubi/create/AllBlocks.java b/src/main/java/com/simibubi/create/AllBlocks.java index 8f1d0d508..33d76cd0e 100644 --- a/src/main/java/com/simibubi/create/AllBlocks.java +++ b/src/main/java/com/simibubi/create/AllBlocks.java @@ -484,7 +484,7 @@ public class AllBlocks { public static final BlockEntry BLAZE_BURNER = REGISTRATE.block("blaze_burner", BlazeBurnerBlock::new) .initialProperties(SharedProperties::softMetal) - .properties(p -> p.luminance($ -> 12)) + .properties(p -> p.luminance(BlazeBurnerBlock::getLight)) .addLayer(() -> RenderType::getCutoutMipped) .tag(AllBlockTags.FAN_TRANSPARENT.tag, AllBlockTags.FAN_HEATERS.tag) .loot((lt, block) -> lt.registerLootTable(block, BlazeBurnerBlock.buildLootTable())) diff --git a/src/main/java/com/simibubi/create/AllItems.java b/src/main/java/com/simibubi/create/AllItems.java index 8e7c0bea4..9bcceb2b1 100644 --- a/src/main/java/com/simibubi/create/AllItems.java +++ b/src/main/java/com/simibubi/create/AllItems.java @@ -105,6 +105,13 @@ public class AllItems { public static final ItemEntry BLAZE_CAKE = REGISTRATE.item("blaze_cake", CombustibleItem::new) .tag(AllItemTags.UPRIGHT_ON_BELT.tag) + .onRegister(i -> i.setBurnTime(240)) + .register(); + + public static final ItemEntry CREATIVE_CAKE = REGISTRATE.item("creative_cake", CombustibleItem::new) + .properties(p -> p.rarity(Rarity.EPIC)) + .tag(AllItemTags.UPRIGHT_ON_BELT.tag) + .onRegister(i -> i.setBurnTime(Integer.MAX_VALUE)) .register(); public static final ItemEntry BAR_OF_CHOCOLATE = REGISTRATE.item("bar_of_chocolate", Item::new) diff --git a/src/main/java/com/simibubi/create/content/contraptions/processing/burner/BlazeBurnerBlock.java b/src/main/java/com/simibubi/create/content/contraptions/processing/burner/BlazeBurnerBlock.java index 527441ceb..6a30952f5 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/processing/burner/BlazeBurnerBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/processing/burner/BlazeBurnerBlock.java @@ -32,7 +32,6 @@ import net.minecraft.loot.conditions.ILootCondition.IBuilder; import net.minecraft.loot.conditions.SurvivesExplosion; import net.minecraft.pathfinding.PathType; import net.minecraft.state.EnumProperty; -import net.minecraft.state.Property; import net.minecraft.state.StateContainer.Builder; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.ActionResult; @@ -58,11 +57,11 @@ import net.minecraftforge.common.util.FakePlayer; @ParametersAreNonnullByDefault public class BlazeBurnerBlock extends Block implements ITE { - public static final Property HEAT_LEVEL = EnumProperty.create("blaze", HeatLevel.class); + public static final EnumProperty HEAT_LEVEL = EnumProperty.create("blaze", HeatLevel.class); public BlazeBurnerBlock(Properties properties) { super(properties); - setDefaultState(super.getDefaultState().with(HEAT_LEVEL, HeatLevel.NONE)); + setDefaultState(getDefaultState().with(HEAT_LEVEL, HeatLevel.NONE)); } @Override @@ -89,9 +88,9 @@ public class BlazeBurnerBlock extends Block implements ITE p_149666_2_) { - p_149666_2_.add(AllItems.EMPTY_BLAZE_BURNER.asStack()); - super.fillItemGroup(p_149666_1_, p_149666_2_); + public void fillItemGroup(ItemGroup group, NonNullList itemList) { + itemList.add(AllItems.EMPTY_BLAZE_BURNER.asStack()); + super.fillItemGroup(group, itemList); } @Nullable @@ -109,8 +108,6 @@ public class BlazeBurnerBlock extends Block implements ITE res = tryInsert(state, world, pos, dontConsume ? heldItem.copy() : heldItem, forceOverflow, false); + boolean doNotConsume = player.isCreative(); + boolean forceOverflow = !(player instanceof FakePlayer); + + ActionResult res = tryInsert(state, world, pos, heldItem, doNotConsume, forceOverflow, false); ItemStack leftover = res.getResult(); - if (!world.isRemote && !dontConsume && !leftover.isEmpty()) { + if (!world.isRemote && !doNotConsume && !leftover.isEmpty()) { if (heldItem.isEmpty()) { player.setHeldItem(hand, leftover); } else if (!player.inventory.addItemStackToInventory(leftover)) { @@ -135,11 +135,11 @@ public class BlazeBurnerBlock extends Block implements ITE tryInsert(BlockState state, World world, BlockPos pos, ItemStack stack, boolean forceOverflow, - boolean simulate) { + public static ActionResult tryInsert(BlockState state, World world, BlockPos pos, ItemStack stack, boolean doNotConsume, + boolean forceOverflow, boolean simulate) { if (!state.hasTileEntity()) return ActionResult.fail(ItemStack.EMPTY); @@ -148,17 +148,22 @@ public class BlazeBurnerBlock extends Block implements ITE= heatLevel.ordinal(); + } + @Override public String getString() { return Lang.asId(name()); } + } - public boolean isAtLeast(HeatLevel heatLevel) { - return this.ordinal() >= heatLevel.ordinal(); - } - } - - @Override - public boolean allowsMovement(BlockState state, IBlockReader reader, BlockPos pos, PathType type) { - return false; - } - } diff --git a/src/main/java/com/simibubi/create/content/contraptions/processing/burner/BlazeBurnerHandler.java b/src/main/java/com/simibubi/create/content/contraptions/processing/burner/BlazeBurnerHandler.java index 2b30de6ab..9ebeeff8a 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/processing/burner/BlazeBurnerHandler.java +++ b/src/main/java/com/simibubi/create/content/contraptions/processing/burner/BlazeBurnerHandler.java @@ -57,16 +57,18 @@ public class BlazeBurnerHandler { World world = event.getThrowable().world; if (world.isRemote) return; - + BlazeBurnerTileEntity heater = (BlazeBurnerTileEntity) tile; - if (heater.activeFuel != FuelType.SPECIAL) { - heater.activeFuel = FuelType.NORMAL; - heater.remainingBurnTime = - MathHelper.clamp(heater.remainingBurnTime + 80, 0, BlazeBurnerTileEntity.maxHeatCapacity); - heater.updateBlockState(); - heater.notifyUpdate(); + if (!heater.isCreative()) { + if (heater.activeFuel != FuelType.SPECIAL) { + heater.activeFuel = FuelType.NORMAL; + heater.remainingBurnTime = + MathHelper.clamp(heater.remainingBurnTime + 80, 0, BlazeBurnerTileEntity.MAX_HEAT_CAPACITY); + heater.updateBlockState(); + heater.notifyUpdate(); + } } - + AllSoundEvents.BLAZE_MUNCH.playOnServer(world, heater.getPos()); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/processing/burner/BlazeBurnerTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/processing/burner/BlazeBurnerTileEntity.java index 7e104acca..6a9db895e 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/processing/burner/BlazeBurnerTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/processing/burner/BlazeBurnerTileEntity.java @@ -19,42 +19,76 @@ import net.minecraft.client.entity.player.ClientPlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompoundNBT; import net.minecraft.tileentity.TileEntityType; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.SoundEvents; import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.vector.Vector3d; import net.minecraftforge.common.ForgeHooks; public class BlazeBurnerTileEntity extends SmartTileEntity { - private final static int[][] heatParticleColors = - { { 0x3B141A, 0x47141A, 0x7A3B24, 0x854D26 }, { 0x2A0103, 0x741B0A, 0xC38246, 0xCCBD78 }, - { 0x630B03, 0x8B3503, 0xBC8200, 0xCCC849 }, { 0x1C6378, 0x4798B5, 0x4DA6C0, 0xBAC8CE } }; + public static final int MAX_HEAT_CAPACITY = 10000; - public static final int maxHeatCapacity = 10000; + private static final Vector3d EMPTY_COLOR = new Vector3d(0, 0, 0); + private final static Vector3d[][] PARTICLE_COLORS; + private final static Vector3d[] CREATIVE_PARTICLE_COLORS; + static { + int[][] colors = { + { }, + { 0x3B141A, 0x47141A, 0x7A3B24, 0x854D26 }, + { 0x2A0103, 0x741B0A, 0xC38246, 0xCCBD78 }, + { 0x630B03, 0x8B3503, 0xBC8200, 0xCCC849 }, + { 0x1C6378, 0x4798B5, 0x4DA6C0, 0xBAC8CE } + }; - public static enum FuelType { - NONE, NORMAL, SPECIAL + int[] creativeColors = { 0xFF1FF9, 0xF799FF }; + + PARTICLE_COLORS = new Vector3d[colors.length][]; + for (int i = 0; i < colors.length; i++) { + PARTICLE_COLORS[i] = ColorHelper.toVectors(colors[i]); + } + + CREATIVE_PARTICLE_COLORS = ColorHelper.toVectors(creativeColors); } - int remainingBurnTime; - FuelType activeFuel; - LerpedFloat headAngle; + protected FuelType activeFuel; + protected int remainingBurnTime; + protected LerpedFloat headAngle; + protected boolean isCreative; public BlazeBurnerTileEntity(TileEntityType tileEntityTypeIn) { super(tileEntityTypeIn); activeFuel = FuelType.NONE; remainingBurnTime = 0; headAngle = LerpedFloat.angular(); + isCreative = false; + } + + public FuelType getActiveFuel() { + return activeFuel; + } + + public int getRemainingBurnTime() { + return remainingBurnTime; + } + + public boolean isCreative() { + return isCreative; } @Override public void tick() { super.tick(); + if (world.isRemote) { tickRotation(); spawnParticles(getHeatLevelFromBlock(), 1); return; } + if (isCreative) + return; + if (remainingBurnTime > 0) remainingBurnTime--; @@ -65,22 +99,26 @@ public class BlazeBurnerTileEntity extends SmartTileEntity { if (activeFuel == FuelType.SPECIAL) { activeFuel = FuelType.NORMAL; - remainingBurnTime = maxHeatCapacity / 2; + remainingBurnTime = MAX_HEAT_CAPACITY / 2; } else activeFuel = FuelType.NONE; + updateBlockState(); notifyUpdate(); } private void tickRotation() { - ClientPlayerEntity player = Minecraft.getInstance().player; float target = 0; + ClientPlayerEntity player = Minecraft.getInstance().player; if (player != null) { - double x = player.getX(); - double z = player.getZ(); + double x; + double z; if (isVirtual()) { x = -4; z = -10; + } else { + x = player.getX(); + z = player.getZ(); } double dx = x - (getPos().getX() + 0.5); double dz = z - (getPos().getZ() + 0.5); @@ -96,8 +134,12 @@ public class BlazeBurnerTileEntity extends SmartTileEntity { @Override public void write(CompoundNBT compound, boolean clientPacket) { - compound.putInt("fuelLevel", activeFuel.ordinal()); - compound.putInt("burnTimeRemaining", remainingBurnTime); + if (!isCreative) { + compound.putInt("fuelLevel", activeFuel.ordinal()); + compound.putInt("burnTimeRemaining", remainingBurnTime); + } else { + compound.putBoolean("isCreative", true); + } super.write(compound, clientPacket); } @@ -105,22 +147,44 @@ public class BlazeBurnerTileEntity extends SmartTileEntity { protected void fromTag(BlockState state, CompoundNBT compound, boolean clientPacket) { activeFuel = FuelType.values()[compound.getInt("fuelLevel")]; remainingBurnTime = compound.getInt("burnTimeRemaining"); + isCreative = compound.getBoolean("isCreative"); super.fromTag(state, compound, clientPacket); } + public BlazeBurnerBlock.HeatLevel getHeatLevelFromBlock() { + return BlazeBurnerBlock.getHeatLevelOf(getBlockState()); + } + + public void updateBlockState() { + setBlockHeat(getHeatLevelFromFuelType(activeFuel)); + } + + protected void setBlockHeat(HeatLevel heat) { + HeatLevel inBlockState = getHeatLevelFromBlock(); + if (inBlockState == heat) + return; + world.setBlockState(pos, getBlockState().with(BlazeBurnerBlock.HEAT_LEVEL, heat)); + notifyUpdate(); + } + /** * @return true if the heater updated its burn time and a item should be * consumed */ - boolean tryUpdateFuel(ItemStack itemStack, boolean forceOverflow, boolean simulate) { - FuelType newFuel = FuelType.NONE; - int newBurnTime = ForgeHooks.getBurnTime(itemStack); + protected boolean tryUpdateFuel(ItemStack itemStack, boolean forceOverflow, boolean simulate) { + if (isCreative) + return false; + + FuelType newFuel = FuelType.NONE; + int newBurnTime; - if (newBurnTime > 0) - newFuel = FuelType.NORMAL; if (AllItems.BLAZE_CAKE.isIn(itemStack)) { newBurnTime = 1000; newFuel = FuelType.SPECIAL; + } else { + newBurnTime = ForgeHooks.getBurnTime(itemStack); + if (newBurnTime > 0) + newFuel = FuelType.NORMAL; } if (newFuel == FuelType.NONE) @@ -131,9 +195,9 @@ public class BlazeBurnerTileEntity extends SmartTileEntity { return false; if (newFuel == activeFuel) { - if (remainingBurnTime + newBurnTime > maxHeatCapacity && !forceOverflow) + if (remainingBurnTime + newBurnTime > MAX_HEAT_CAPACITY && !forceOverflow) return false; - newBurnTime = MathHelper.clamp(remainingBurnTime + newBurnTime, 0, maxHeatCapacity); + newBurnTime = MathHelper.clamp(remainingBurnTime + newBurnTime, 0, MAX_HEAT_CAPACITY); } if (simulate) @@ -143,27 +207,43 @@ public class BlazeBurnerTileEntity extends SmartTileEntity { remainingBurnTime = newBurnTime; if (world.isRemote) { - HeatLevel level = getHeatLevelFromFuelType(newFuel); + HeatLevel level = getHeatLevelFromFuelType(activeFuel); for (int i = 0; i < 20; i++) spawnParticles(level, 1 + (.25 * (i / 4))); - return true; + } else { + playSound(); + updateBlockState(); } - updateBlockState(); return true; } - public BlazeBurnerBlock.HeatLevel getHeatLevelFromBlock() { - return BlazeBurnerBlock.getHeatLevelOf(getBlockState()); + protected void applyCreativeFuel() { + boolean wasCreative = isCreative; + + activeFuel = FuelType.NONE; + remainingBurnTime = 0; + isCreative = true; + + if (world.isRemote) { + for (int i = 0; i < 30; i++) { + double burstMult = 1 + (.25 * (i / 4)); + spawnParticle(CREATIVE_PARTICLE_COLORS, 0.04F, 35, false, 0.03 * burstMult, 0.15 * burstMult); + } + } else { + playSound(); + if (wasCreative) + setBlockHeat(getHeatLevelFromBlock().nextActiveLevel()); + } } - public void updateBlockState() { - HeatLevel inBlockState = getHeatLevelFromBlock(); - HeatLevel inTE = getHeatLevelFromFuelType(activeFuel); - if (inBlockState == inTE) - return; - world.setBlockState(pos, getBlockState().with(BlazeBurnerBlock.HEAT_LEVEL, inTE)); - notifyUpdate(); + public boolean isCreativeFuel(ItemStack stack) { + return AllItems.CREATIVE_CAKE.isIn(stack); + } + + protected void playSound() { + world.playSound(null, pos, SoundEvents.ENTITY_BLAZE_SHOOT, SoundCategory.BLOCKS, + .125f + world.rand.nextFloat() * .125f, .75f - world.rand.nextFloat() * .25f); } protected HeatLevel getHeatLevelFromFuelType(FuelType fuel) { @@ -173,7 +253,7 @@ public class BlazeBurnerTileEntity extends SmartTileEntity { level = HeatLevel.SEETHING; break; case NORMAL: - boolean lowPercent = (double) remainingBurnTime / maxHeatCapacity < 0.1; + boolean lowPercent = (double) remainingBurnTime / MAX_HEAT_CAPACITY < 0.1; level = lowPercent ? HeatLevel.FADING : HeatLevel.KINDLED; break; default: @@ -183,7 +263,7 @@ public class BlazeBurnerTileEntity extends SmartTileEntity { return level; } - private void spawnParticles(HeatLevel heatLevel, double burstMult) { + protected void spawnParticles(HeatLevel heatLevel, double burstMult) { if (world == null) return; if (heatLevel == BlazeBurnerBlock.HeatLevel.NONE) @@ -216,9 +296,8 @@ public class BlazeBurnerTileEntity extends SmartTileEntity { } } - private void spawnParticle(HeatLevel heatLevel, float scale, int avgAge, boolean hot, double speed, double spread) { + protected void spawnParticle(Vector3d color, float scale, int avgAge, boolean hot, double speed, double spread) { Random random = world.getRandom(); - Vector3d color = randomColor(heatLevel); world.addOptionalParticle( new CubeParticleData((float) color.x, (float) color.y, (float) color.z, scale, avgAge, hot), (double) pos.getX() + 0.5D + (random.nextDouble() * 2.0 - 1D) * spread, @@ -226,10 +305,22 @@ public class BlazeBurnerTileEntity extends SmartTileEntity { (double) pos.getZ() + 0.5D + (random.nextDouble() * 2.0 - 1D) * spread, 0.0D, speed, 0.0D); } - private static Vector3d randomColor(BlazeBurnerBlock.HeatLevel heatLevel) { - if (heatLevel == BlazeBurnerBlock.HeatLevel.NONE) - return new Vector3d(0, 0, 0); - return ColorHelper.getRGB(heatParticleColors[heatLevel.ordinal() - 1][(int) (Math.random() * 4)]); + protected void spawnParticle(Vector3d[] colors, float scale, int avgAge, boolean hot, double speed, double spread) { + Vector3d color; + if (colors.length == 0) { + color = EMPTY_COLOR; + } else { + color = colors[(int) (Math.random() * colors.length)]; + } + spawnParticle(color, scale, avgAge, hot, speed, spread); + } + + protected void spawnParticle(HeatLevel heatLevel, float scale, int avgAge, boolean hot, double speed, double spread) { + spawnParticle(PARTICLE_COLORS[heatLevel.ordinal()], scale, avgAge, hot, speed, spread); + } + + public enum FuelType { + NONE, NORMAL, SPECIAL } } 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 f6b40d285..eaf395174 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 @@ -332,12 +332,12 @@ public abstract class ArmInteractionPoint { @Override protected ItemStack insert(World world, ItemStack stack, boolean simulate) { ItemStack input = stack.copy(); - if (!BlazeBurnerBlock.tryInsert(state, world, pos, input, false, true) + if (!BlazeBurnerBlock.tryInsert(state, world, pos, input, false, false, true) .getResult() .isEmpty()) { return stack; } - ActionResult res = BlazeBurnerBlock.tryInsert(state, world, pos, input, false, simulate); + ActionResult res = BlazeBurnerBlock.tryInsert(state, world, pos, input, false, false, simulate); return res.getType() == ActionResultType.SUCCESS ? ItemHandlerHelper.copyStackWithSize(stack, stack.getCount() - 1) : stack; diff --git a/src/main/java/com/simibubi/create/foundation/utility/ColorHelper.java b/src/main/java/com/simibubi/create/foundation/utility/ColorHelper.java index d02fb3156..30337a080 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/ColorHelper.java +++ b/src/main/java/com/simibubi/create/foundation/utility/ColorHelper.java @@ -37,7 +37,7 @@ public class ColorHelper { public static int applyAlpha(int color, float alpha) { int prevAlphaChannel = (color >> 24) & 0xFF; if (prevAlphaChannel > 0) - alpha *= prevAlphaChannel / 256f; + alpha *= prevAlphaChannel / 255f; int alphaChannel = (int) (0xFF * MathHelper.clamp(alpha, 0, 1)); return (color & 0xFFFFFF) | alphaChannel << 24; } @@ -98,7 +98,7 @@ public class ColorHelper { int g = (color >> 8) & 0xFF; int b = color & 0xFF; - RenderSystem.color4f(r / 256f, g / 256f, b / 256f, 1); + RenderSystem.color4f(r / 255f, g / 255f, b / 255f, 1); } public static void glResetColor() { @@ -109,7 +109,15 @@ public class ColorHelper { int r = (color >> 16) & 0xFF; int g = (color >> 8) & 0xFF; int b = color & 0xFF; - return new Vector3d(r, g, b).scale(1 / 256d); + return new Vector3d(r, g, b).scale(1 / 255d); + } + + public static Vector3d[] toVectors(int[] colors) { + Vector3d[] vectors = new Vector3d[colors.length]; + for (int i = 0; i < colors.length; i++) { + vectors[i] = ColorHelper.getRGB(colors[i]); + } + return vectors; } public static int colorFromUUID(UUID uuid) { diff --git a/src/main/resources/assets/create/textures/item/creative_cake.png b/src/main/resources/assets/create/textures/item/creative_cake.png new file mode 100644 index 0000000000000000000000000000000000000000..4eba9b120f656a71e6fb3bfafc377c5c5d333150 GIT binary patch literal 1996 zcmV;-2Q&DIP) zaB^>EX>4U6ba`-PAZ2)IW&i+q+U-|ak|ZY#{pS=u0!V<>pcGb-7&yoUs3`d@zz^9LSss>TP=m}0beeDaAhDr)z$OK1K1o`!u?ZvEyOAapTG z-p$z0{EYtau|WLkFZX^U^~lj9$X$Zh!&CFDw`1fH#I*a}X`6HwdMaPnFf@d|zc zby;u1t2WyT)*4(b#uhY^BOpGUcgBq)h0IGBCPLWwGG3h=r?V!%UV z1s@g6F}mrp#Vx&Q>Vq!7iHn3ua8_<`=U- zh#Lpfu<&(e7xwj;#4;ER3uc9b*_JJ$1oyGGc=60O7)`L8FSQCe4WwBaH=b{2_ zyL9cT=YhR8c=!=U95QsIkuTN`t9RC3nfozo?yyFSs5wtQSVOnSLxh{@Buvi0727P0nm0Hq3!wWtikNHyHzizB>xTUEF;z_m(#UbbpmM`ieO-srx6G zGn2X}=05ZG1#2y@bjypN8HKR zR|6-AF9gKU{JkV0?vJ=?>1OD^!8YTFoLNIL@W z2uNINKLSRmL+V$a-BiFK^AnHWc>+i7V$B!O-d$~)-&lRaz0U&`AG@kg$8J*09PxO(BZ8a|k% z(n@ofyJfd1*-E0_LMTX0pH#HEhhcW_E){R)2u>SzNZETRx!yh&$o3T$rM|70eBl1DmXR`7e1+jxaDsp!+nBO($wftYuzaU5k?vM!!{{~WW7fWhH zhkXD50flKpLr_UWLm+T+Z)Rz1WdHzpoPCi!NW(xJ#a~mUMJf)hAmWgrI$03EaFi+* z!9r;(wCZ4T>4(syAxUv@6kH1qek@iUT%2`va1{i>4-hvuCq)-2@qbC7MT`f>{djlp zarX`o8WpCRU1NZ%Sw=b$7jyX)G4P52g6KyWQxY@vWM&}?&+&B+A7AfcJj?sspQBeP zm<;fV#IsB{EaG+I=}k-LyiXiqWl14ECmuEEg2azpmtB72Tyj|8nGqwKo+FMBi=_^h zJD8OXm3Wdks;C;}3ptk+&Rd+-N{zMd$zK>MXv-O{(;Pwqi%22`5i)AnKm`_Jv}&Z7 zNYj4Y!$0WwQ{i*0`l1A$$jS-0))W7}?? z0RCs-N^AS84PfSz^m<#19szyZz{Pc2llOqj9bn)|mkh~~{4|AP5qLkNZ^{GVTcBsv z?X9(s(+40+T`k=J2Zz8&iL%!`-W}}h?cX!4{(b2-{@DB)VV(2<0004WQchCKPp~+kpaIGiL4Tm{GvM-r2EwW#@_l2BwM` z9i6ME3ox*{SI%0!qd0(pG1C(0LW-Y eK|uj*Rs#TF2OZ>QzBRi50000 Date: Wed, 14 Jul 2021 15:12:59 -0700 Subject: [PATCH 081/118] Fix depot rendering and potato cannon model - Upright items were reflected when rendered on depots - Potato cannon model had itself as parent and faces with invalid texture --- .../create/content/logistics/block/depot/DepotRenderer.java | 4 ++-- .../assets/create/models/item/potato_cannon/item.json | 3 --- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/simibubi/create/content/logistics/block/depot/DepotRenderer.java b/src/main/java/com/simibubi/create/content/logistics/block/depot/DepotRenderer.java index 6afe2734a..457359749 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/depot/DepotRenderer.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/depot/DepotRenderer.java @@ -117,10 +117,10 @@ public class DepotRenderer extends SafeTileEntityRenderer { Vector3d positionVec = renderViewEntity.getPositionVec(); Vector3d vectorForOffset = itemPosition; Vector3d diff = vectorForOffset.subtract(positionVec); - float yRot = (float) MathHelper.atan2(diff.z, -diff.x); + float yRot = (float) -MathHelper.atan2(diff.z, diff.x); ms.multiply(Vector3f.POSITIVE_Y.getRadialQuaternion((float) (yRot - Math.PI / 2))); } - ms.translate(0, 3 / 32d, 1 / 16f); + ms.translate(0, 3 / 32d, -1 / 16f); } for (int i = 0; i <= count; i++) { diff --git a/src/main/resources/assets/create/models/item/potato_cannon/item.json b/src/main/resources/assets/create/models/item/potato_cannon/item.json index 9588f519b..ece021b34 100644 --- a/src/main/resources/assets/create/models/item/potato_cannon/item.json +++ b/src/main/resources/assets/create/models/item/potato_cannon/item.json @@ -1,6 +1,5 @@ { "credit": "Made with Blockbench", - "parent": "create:item/potato_cannon/item", "texture_size": [32, 32], "textures": { "1": "create:item/potato_cannon", @@ -12,7 +11,6 @@ "to": [9.5, 10, 6.5], "rotation": {"angle": 0, "axis": "y", "origin": [7, 7.6, 11]}, "faces": { - "north": {"uv": [7.5, 1, 9.5, 4], "texture": "#missing"}, "east": {"uv": [4, 2, 0, 3.5], "texture": "#1"}, "south": {"uv": [10, 6, 11.5, 7.5], "texture": "#1"}, "west": {"uv": [0, 2, 4, 3.5], "texture": "#1"}, @@ -63,7 +61,6 @@ "to": [9, 6, 15.5], "rotation": {"angle": 0, "axis": "y", "origin": [8, 7.6, 11]}, "faces": { - "north": {"uv": [13, 13, 15, 15], "texture": "#missing"}, "east": {"uv": [0.5, 10, 1, 11], "texture": "#1"}, "west": {"uv": [0.5, 10, 1, 11], "texture": "#1"}, "up": {"uv": [0.5, 10, 1, 10.25], "rotation": 90, "texture": "#1"}, From a8bdf710faf9ef64b9f7568d70d7d00bf3479b1c Mon Sep 17 00:00:00 2001 From: Jozufozu Date: Wed, 14 Jul 2021 15:56:44 -0700 Subject: [PATCH 082/118] Bump flywheel version --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 80e22c8e0..f6faa393e 100644 --- a/gradle.properties +++ b/gradle.properties @@ -16,7 +16,7 @@ cursegradle_version = 1.4.0 # dependency versions registrate_version = 1.0.4 -flywheel_version = 1.16-0.1.0.21 +flywheel_version = 1.16-0.1.1.24 jei_version = 7.7.0.106 # curseforge information From 8f4be44a6d3ca9418daa7cc2c49e61bd2ea5d443 Mon Sep 17 00:00:00 2001 From: PepperBell <44146161+PepperCode1@users.noreply.github.com> Date: Wed, 14 Jul 2021 16:00:29 -0700 Subject: [PATCH 083/118] Fix blaze cake burn time - 240 ticks/1.2 items -> 6400 ticks/32 items --- src/main/java/com/simibubi/create/AllItems.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/simibubi/create/AllItems.java b/src/main/java/com/simibubi/create/AllItems.java index 9bcceb2b1..b23cd19f2 100644 --- a/src/main/java/com/simibubi/create/AllItems.java +++ b/src/main/java/com/simibubi/create/AllItems.java @@ -105,7 +105,7 @@ public class AllItems { public static final ItemEntry BLAZE_CAKE = REGISTRATE.item("blaze_cake", CombustibleItem::new) .tag(AllItemTags.UPRIGHT_ON_BELT.tag) - .onRegister(i -> i.setBurnTime(240)) + .onRegister(i -> i.setBurnTime(6400)) .register(); public static final ItemEntry CREATIVE_CAKE = REGISTRATE.item("creative_cake", CombustibleItem::new) From a0482856992899cdb6c7dc150119ac3cced694b3 Mon Sep 17 00:00:00 2001 From: grimmauld Date: Thu, 15 Jul 2021 11:32:03 +0200 Subject: [PATCH 084/118] Bulk remap, compiles --- build.gradle | 2 +- .../com/simibubi/create/AllBlockPartials.java | 4 +- .../java/com/simibubi/create/AllBlocks.java | 262 ++-- .../com/simibubi/create/AllEntityTypes.java | 2 +- .../java/com/simibubi/create/AllFluids.java | 16 +- .../java/com/simibubi/create/AllItems.java | 32 +- .../java/com/simibubi/create/AllKeys.java | 8 +- .../com/simibubi/create/AllParticleTypes.java | 2 +- .../com/simibubi/create/AllRecipeTypes.java | 2 +- .../java/com/simibubi/create/AllShapes.java | 12 +- .../com/simibubi/create/AllSoundEvents.java | 94 +- .../simibubi/create/AllSpecialTextures.java | 2 +- .../com/simibubi/create/AllSpriteShifts.java | 4 +- .../java/com/simibubi/create/AllTags.java | 26 +- .../com/simibubi/create/CreateClient.java | 22 +- .../compat/dynamictrees/DynamicTree.java | 4 +- .../create/compat/jei/ConversionRecipe.java | 2 +- .../simibubi/create/compat/jei/CreateJEI.java | 10 +- .../create/compat/jei/DoubleItemIcon.java | 14 +- .../compat/jei/GhostIngredientHandler.java | 10 +- .../compat/jei/ScreenResourceWrapper.java | 2 +- .../compat/jei/category/BasinCategory.java | 12 +- .../jei/category/BlockCuttingCategory.java | 8 +- .../jei/category/CreateRecipeCategory.java | 6 +- .../compat/jei/category/CrushingCategory.java | 2 +- .../jei/category/DeployingCategory.java | 8 +- .../jei/category/FanBlastingCategory.java | 4 +- .../jei/category/FanSmokingCategory.java | 2 +- .../jei/category/FanWashingCategory.java | 6 +- .../jei/category/ItemDrainCategory.java | 10 +- .../category/MechanicalCraftingCategory.java | 42 +- .../compat/jei/category/MillingCategory.java | 2 +- .../MysteriousItemConversionCategory.java | 2 +- .../compat/jei/category/PackingCategory.java | 4 +- .../jei/category/PolishingCategory.java | 4 +- .../compat/jei/category/PressingCategory.java | 2 +- .../category/ProcessingViaFanCategory.java | 16 +- .../compat/jei/category/SawingCategory.java | 2 +- .../category/SequencedAssemblyCategory.java | 36 +- .../compat/jei/category/SpoutCategory.java | 12 +- .../animations/AnimatedBlazeBurner.java | 8 +- .../category/animations/AnimatedCrafter.java | 4 +- .../animations/AnimatedCrushingWheels.java | 8 +- .../category/animations/AnimatedDeployer.java | 16 +- .../animations/AnimatedItemDrain.java | 12 +- .../category/animations/AnimatedKinetics.java | 2 +- .../animations/AnimatedMillstone.java | 4 +- .../category/animations/AnimatedMixer.java | 8 +- .../category/animations/AnimatedPress.java | 8 +- .../jei/category/animations/AnimatedSaw.java | 10 +- .../category/animations/AnimatedSpout.java | 20 +- .../SequencedAssemblySubCategory.java | 18 +- .../create/content/CreateItemGroup.java | 2 +- .../content/contraptions/KineticDebugger.java | 24 +- .../content/contraptions/KineticNetwork.java | 14 +- .../contraptions/RotationPropagator.java | 98 +- .../contraptions/TorquePropagator.java | 2 +- .../base/BackHalfShaftInstance.java | 2 +- .../contraptions/base/CasingBlock.java | 4 +- .../base/DirectionalAxisKineticBlock.java | 28 +- .../base/DirectionalKineticBlock.java | 28 +- .../base/GeneratingKineticTileEntity.java | 18 +- .../contraptions/base/HalfShaftInstance.java | 2 +- .../base/HorizontalAxisKineticBlock.java | 24 +- .../base/HorizontalHalfShaftInstance.java | 2 +- .../base/HorizontalKineticBlock.java | 24 +- .../content/contraptions/base/IRotate.java | 6 +- .../contraptions/base/KineticBlock.java | 20 +- .../contraptions/base/KineticData.java | 2 +- .../base/KineticEffectHandler.java | 18 +- .../contraptions/base/KineticTileEntity.java | 75 +- .../base/KineticTileEntityRenderer.java | 12 +- .../base/KineticTileInstance.java | 2 +- .../base/RotatedPillarKineticBlock.java | 36 +- .../contraptions/base/RotatingData.java | 6 +- .../components/AssemblyOperatorBlockItem.java | 20 +- .../components/actors/ActorData.java | 12 +- .../components/actors/AttachedActorBlock.java | 30 +- .../actors/BellMovementBehaviour.java | 4 +- .../BlockBreakingKineticTileEntity.java | 50 +- .../BlockBreakingMovementBehaviour.java | 42 +- .../actors/CampfireMovementBehaviour.java | 16 +- .../components/actors/DrillActorInstance.java | 4 +- .../components/actors/DrillBlock.java | 20 +- .../components/actors/DrillInstance.java | 2 +- .../actors/DrillMovementBehaviour.java | 6 +- .../components/actors/DrillRenderer.java | 8 +- .../components/actors/DrillTileEntity.java | 2 +- .../actors/HarvesterActorInstance.java | 4 +- .../components/actors/HarvesterBlock.java | 2 + .../actors/HarvesterMovementBehaviour.java | 38 +- .../components/actors/HarvesterRenderer.java | 8 +- .../actors/HarvesterTileEntity.java | 2 +- .../components/actors/PloughBlock.java | 2 + .../actors/PloughMovementBehaviour.java | 24 +- .../PortableFluidInterfaceTileEntity.java | 2 + .../actors/PortableStorageInterfaceBlock.java | 10 +- .../PortableStorageInterfaceMovement.java | 30 +- .../PortableStorageInterfaceRenderer.java | 8 +- .../PortableStorageInterfaceTileEntity.java | 12 +- .../actors/SawMovementBehaviour.java | 14 +- .../components/actors/SeatBlock.java | 52 +- .../components/actors/SeatEntity.java | 34 +- .../actors/SeatMovementBehaviour.java | 12 +- .../dispenser/ContraptionBlockSource.java | 18 +- .../dispenser/DispenserMovementBehaviour.java | 16 +- .../dispenser/DropperMovementBehaviour.java | 8 +- .../IMovedDispenseItemBehaviour.java | 40 +- .../MovedDefaultDispenseItemBehaviour.java | 20 +- .../MovedOptionalDispenseBehaviour.java | 2 +- .../MovedProjectileDispenserBehaviour.java | 10 +- .../actors/dispenser/SimplePos.java | 6 +- .../components/clock/CuckooClockBlock.java | 16 +- .../components/clock/CuckooClockRenderer.java | 14 +- .../clock/CuckooClockTileEntity.java | 48 +- .../crafter/ConnectedInputHandler.java | 54 +- .../crafter/CrafterCTBehaviour.java | 10 +- .../components/crafter/CrafterHelper.java | 2 +- .../crafter/MechanicalCrafterBlock.java | 86 +- .../crafter/MechanicalCrafterInstance.java | 2 +- .../crafter/MechanicalCrafterRenderer.java | 52 +- .../crafter/MechanicalCrafterTileEntity.java | 92 +- .../crafter/MechanicalCraftingInventory.java | 4 +- .../crafter/MechanicalCraftingRecipe.java | 12 +- .../components/crafter/RecipeGridHandler.java | 34 +- .../components/crank/HandCrankBlock.java | 38 +- .../components/crank/HandCrankInstance.java | 4 +- .../components/crank/HandCrankRenderer.java | 6 +- .../components/crank/HandCrankTileEntity.java | 8 +- .../components/crank/ValveHandleBlock.java | 22 +- .../components/crusher/CrushingRecipe.java | 2 +- .../crusher/CrushingWheelBlock.java | 68 +- .../crusher/CrushingWheelControllerBlock.java | 48 +- .../CrushingWheelControllerTileEntity.java | 76 +- .../crusher/CrushingWheelTileEntity.java | 10 +- .../deployer/BeltDeployerCallbacks.java | 18 +- .../deployer/DeployerActorInstance.java | 6 +- .../deployer/DeployerApplicationRecipe.java | 12 +- .../components/deployer/DeployerBlock.java | 40 +- .../deployer/DeployerFakePlayer.java | 24 +- .../deployer/DeployerFilterSlot.java | 4 +- .../components/deployer/DeployerHandler.java | 158 +- .../components/deployer/DeployerInstance.java | 14 +- .../deployer/DeployerItemHandler.java | 10 +- .../deployer/DeployerMovementBehaviour.java | 48 +- .../components/deployer/DeployerRenderer.java | 46 +- .../deployer/DeployerTileEntity.java | 118 +- .../components/fan/AirCurrent.java | 108 +- .../components/fan/AirCurrentSound.java | 22 +- .../components/fan/EncasedFanBlock.java | 40 +- .../components/fan/EncasedFanRenderer.java | 12 +- .../components/fan/EncasedFanTileEntity.java | 30 +- .../components/fan/FanInstance.java | 6 +- .../components/fan/NozzleBlock.java | 20 +- .../components/fan/NozzleTileEntity.java | 44 +- .../components/fan/SplashingRecipe.java | 2 +- .../components/flywheel/FlyWheelInstance.java | 30 +- .../components/flywheel/FlywheelBlock.java | 42 +- .../flywheel/FlywheelGenerator.java | 6 +- .../components/flywheel/FlywheelRenderer.java | 16 +- .../flywheel/FlywheelTileEntity.java | 6 +- .../flywheel/engine/EngineBlock.java | 24 +- .../flywheel/engine/EngineInstance.java | 2 +- .../flywheel/engine/EngineRenderer.java | 8 +- .../flywheel/engine/EngineTileEntity.java | 26 +- .../flywheel/engine/FurnaceEngineBlock.java | 8 +- .../engine/FurnaceEngineTileEntity.java | 4 +- .../components/millstone/MillingRecipe.java | 2 +- .../components/millstone/MillstoneBlock.java | 24 +- .../millstone/MillstoneTileEntity.java | 30 +- .../mixer/MechanicalMixerBlock.java | 9 +- .../mixer/MechanicalMixerRenderer.java | 12 +- .../mixer/MechanicalMixerTileEntity.java | 28 +- .../components/mixer/MixerInstance.java | 2 +- .../components/motor/CreativeMotorBlock.java | 14 +- .../motor/CreativeMotorGenerator.java | 8 +- .../motor/CreativeMotorTileEntity.java | 4 +- .../press/BeltPressingCallbacks.java | 2 +- .../press/MechanicalPressBlock.java | 14 +- .../press/MechanicalPressRenderer.java | 12 +- .../press/MechanicalPressTileEntity.java | 80 +- .../components/press/PressInstance.java | 2 +- .../components/press/PressingRecipe.java | 2 +- .../components/saw/CuttingRecipe.java | 2 +- .../contraptions/components/saw/SawBlock.java | 40 +- .../components/saw/SawFilterSlot.java | 6 +- .../components/saw/SawGenerator.java | 8 +- .../components/saw/SawInstance.java | 6 +- .../components/saw/SawRenderer.java | 44 +- .../components/saw/SawTileEntity.java | 100 +- .../AbstractContraptionEntity.java | 180 +-- .../structureMovement/AssemblyException.java | 6 +- .../BlockMovementChecks.java | 82 +- .../structureMovement/Contraption.java | 224 +-- .../ContraptionCollider.java | 186 +-- .../ContraptionEntityRenderer.java | 2 +- .../structureMovement/ContraptionHandler.java | 8 +- .../ContraptionHandlerClient.java | 24 +- .../structureMovement/ContraptionLighter.java | 4 +- .../structureMovement/ContraptionWorld.java | 6 +- .../ControlledContraptionEntity.java | 28 +- .../DirectionalExtenderScrollOptionSlot.java | 4 +- .../IDisplayAssemblyExceptions.java | 4 +- .../MountedFluidStorage.java | 2 +- .../structureMovement/MountedStorage.java | 22 +- .../structureMovement/MovementBehaviour.java | 6 +- .../structureMovement/MovementContext.java | 2 +- .../NonStationaryLighter.java | 4 +- .../OrientedContraptionEntity.java | 144 +- .../OrientedContraptionEntityRenderer.java | 2 +- .../structureMovement/StructureTransform.java | 106 +- .../TranslatingContraption.java | 2 +- .../bearing/BearingBlock.java | 10 +- .../bearing/BearingContraption.java | 8 +- .../bearing/BearingInstance.java | 14 +- .../bearing/BearingRenderer.java | 8 +- .../bearing/ClockworkBearingBlock.java | 16 +- .../bearing/ClockworkBearingTileEntity.java | 82 +- .../bearing/ClockworkContraption.java | 14 +- .../bearing/IBearingTileEntity.java | 2 +- .../bearing/MechanicalBearingBlock.java | 12 +- .../bearing/MechanicalBearingTileEntity.java | 64 +- .../structureMovement/bearing/SailBlock.java | 56 +- .../bearing/StabilizedBearingInstance.java | 8 +- .../StabilizedBearingMovementBehaviour.java | 14 +- .../bearing/StabilizedContraption.java | 6 +- .../bearing/WindmillBearingBlock.java | 12 +- .../bearing/WindmillBearingTileEntity.java | 2 +- .../chassis/AbstractChassisBlock.java | 50 +- .../chassis/ChassisRangeDisplay.java | 26 +- .../chassis/ChassisTileEntity.java | 58 +- .../chassis/LinearChassisBlock.java | 50 +- .../chassis/RadialChassisBlock.java | 12 +- .../chassis/StickerBlock.java | 80 +- .../chassis/StickerInstance.java | 8 +- .../chassis/StickerRenderer.java | 12 +- .../chassis/StickerTileEntity.java | 16 +- .../gantry/GantryCarriageBlock.java | 50 +- .../gantry/GantryCarriageInstance.java | 14 +- .../gantry/GantryCarriageRenderer.java | 18 +- .../gantry/GantryCarriageTileEntity.java | 46 +- .../gantry/GantryContraption.java | 6 +- .../gantry/GantryContraptionEntity.java | 54 +- .../glue/GlueEffectPacket.java | 8 +- .../structureMovement/glue/GlueInstance.java | 20 +- .../glue/SuperGlueEntity.java | 164 +-- .../glue/SuperGlueHandler.java | 34 +- .../structureMovement/glue/SuperGlueItem.java | 32 +- .../glue/SuperGlueRenderer.java | 36 +- .../mounted/CartAssembleRailType.java | 2 +- .../mounted/CartAssemblerBlock.java | 112 +- .../mounted/CartAssemblerBlockItem.java | 34 +- .../mounted/CartAssemblerTileEntity.java | 66 +- .../ItemHandlerModifiableFromIInventory.java | 10 +- .../mounted/MinecartContraptionItem.java | 92 +- .../mounted/MountedContraption.java | 16 +- .../piston/LinearActuatorTileEntity.java | 36 +- .../piston/MechanicalPistonBlock.java | 90 +- .../piston/MechanicalPistonGenerator.java | 12 +- .../piston/MechanicalPistonHeadBlock.java | 44 +- .../piston/MechanicalPistonTileEntity.java | 50 +- .../piston/PistonContraption.java | 64 +- .../piston/PistonExtensionPoleBlock.java | 70 +- .../piston/PistonLighter.java | 2 +- .../pulley/AbstractPulleyInstance.java | 14 +- .../pulley/AbstractPulleyRenderer.java | 18 +- .../structureMovement/pulley/PulleyBlock.java | 64 +- .../pulley/PulleyLighter.java | 4 +- .../pulley/PulleyRenderer.java | 4 +- .../pulley/PulleyTileEntity.java | 84 +- .../render/ActorInstance.java | 2 +- .../render/ContraptionMatrices.java | 30 +- .../render/ContraptionRenderDispatcher.java | 58 +- .../render/ContraptionWorldHolder.java | 2 +- .../render/RenderedContraption.java | 24 +- .../sync/ClientMotionPacket.java | 8 +- .../sync/ContraptionFluidPacket.java | 2 +- .../sync/ContraptionInteractionPacket.java | 14 +- .../sync/ContraptionSeatMappingPacket.java | 6 +- .../sync/LimbSwingUpdatePacket.java | 8 +- .../train/CouplingCreationPacket.java | 6 +- .../train/CouplingHandler.java | 16 +- .../train/CouplingHandlerClient.java | 8 +- .../train/CouplingPhysics.java | 32 +- .../train/CouplingRenderer.java | 66 +- .../train/MinecartCouplingItem.java | 10 +- .../train/MinecartSim2020.java | 56 +- .../CapabilityMinecartController.java | 26 +- .../train/capability/MinecartController.java | 56 +- .../MinecartControllerUpdatePacket.java | 10 +- .../tracks/ControllerRailBlock.java | 116 +- .../tracks/ControllerRailGenerator.java | 4 +- .../tracks/ReinforcedRailBlock.java | 46 +- .../components/turntable/TurntableBlock.java | 38 +- .../turntable/TurntableHandler.java | 14 +- .../waterwheel/WaterWheelBlock.java | 72 +- .../waterwheel/WaterWheelTileEntity.java | 10 +- .../contraptions/fluids/FlowSource.java | 2 +- .../fluids/FluidBottleItemHook.java | 10 +- .../content/contraptions/fluids/FluidFX.java | 16 +- .../contraptions/fluids/FluidPropagator.java | 32 +- .../contraptions/fluids/FluidReactions.java | 28 +- .../fluids/FluidTransportBehaviour.java | 12 +- .../contraptions/fluids/OpenEndedPipe.java | 68 +- .../fluids/PipeAttachmentModel.java | 10 +- .../contraptions/fluids/PipeConnection.java | 22 +- .../contraptions/fluids/PumpBlock.java | 64 +- .../contraptions/fluids/PumpCogInstance.java | 2 +- .../contraptions/fluids/PumpRenderer.java | 8 +- .../contraptions/fluids/PumpTileEntity.java | 50 +- .../contraptions/fluids/VirtualFluid.java | 16 +- .../fluids/actors/FillingBySpout.java | 10 +- .../fluids/actors/FillingRecipe.java | 2 +- .../fluids/actors/FluidDrainingBehaviour.java | 42 +- .../fluids/actors/FluidFillingBehaviour.java | 78 +- .../actors/FluidManipulationBehaviour.java | 32 +- .../fluids/actors/FluidSplashPacket.java | 2 +- .../fluids/actors/GenericItemFilling.java | 10 +- .../fluids/actors/HosePulleyBlock.java | 38 +- .../fluids/actors/HosePulleyFluidHandler.java | 2 + .../fluids/actors/HosePulleyRenderer.java | 4 +- .../fluids/actors/HosePulleyTileEntity.java | 24 +- .../fluids/actors/ItemDrainBlock.java | 22 +- .../fluids/actors/ItemDrainItemHandler.java | 2 +- .../fluids/actors/ItemDrainRenderer.java | 36 +- .../fluids/actors/ItemDrainTileEntity.java | 48 +- .../fluids/actors/SpoutBlock.java | 8 +- .../fluids/actors/SpoutRenderer.java | 12 +- .../fluids/actors/SpoutTileEntity.java | 40 +- .../fluids/particle/BasinFluidParticle.java | 52 +- .../fluids/particle/FluidParticleData.java | 10 +- .../fluids/particle/FluidStackParticle.java | 60 +- .../fluids/pipes/AxisPipeBlock.java | 48 +- .../fluids/pipes/BracketBlock.java | 16 +- .../fluids/pipes/BracketBlockItem.java | 22 +- .../fluids/pipes/BracketGenerator.java | 6 +- .../fluids/pipes/EncasedPipeBlock.java | 56 +- .../fluids/pipes/FluidPipeBlock.java | 104 +- .../fluids/pipes/FluidPipeTileEntity.java | 6 +- .../fluids/pipes/FluidValveBlock.java | 36 +- .../fluids/pipes/FluidValveInstance.java | 2 +- .../fluids/pipes/FluidValveRenderer.java | 6 +- .../fluids/pipes/FluidValveTileEntity.java | 10 +- .../fluids/pipes/GlassFluidPipeBlock.java | 30 +- .../fluids/pipes/SmartFluidPipeBlock.java | 52 +- .../fluids/pipes/SmartFluidPipeGenerator.java | 6 +- .../pipes/SmartFluidPipeTileEntity.java | 12 +- .../fluids/pipes/StraightPipeTileEntity.java | 6 +- .../TransparentStraightPipeRenderer.java | 4 +- .../fluids/potion/PotionFluid.java | 15 +- .../fluids/potion/PotionFluidHandler.java | 44 +- .../recipe/PotionMixingRecipeManager.java | 14 +- .../tank/CreativeFluidTankTileEntity.java | 2 + .../fluids/tank/FluidTankBlock.java | 78 +- .../tank/FluidTankConnectivityHandler.java | 54 +- .../fluids/tank/FluidTankGenerator.java | 8 +- .../fluids/tank/FluidTankItem.java | 42 +- .../fluids/tank/FluidTankModel.java | 6 +- .../fluids/tank/FluidTankRenderer.java | 6 +- .../fluids/tank/FluidTankTileEntity.java | 78 +- .../goggles/GoggleConfigScreen.java | 34 +- .../goggles/GoggleOverlayRenderer.java | 36 +- .../contraptions/goggles/GogglesItem.java | 16 +- .../goggles/IHaveGoggleInformation.java | 22 +- .../itemAssembly/SequencedAssemblyItem.java | 6 +- .../itemAssembly/SequencedAssemblyRecipe.java | 28 +- .../SequencedAssemblyRecipeBuilder.java | 14 +- .../SequencedAssemblyRecipeSerializer.java | 24 +- .../itemAssembly/SequencedRecipe.java | 8 +- .../particle/AirFlowParticle.java | 120 +- .../particle/AirFlowParticleData.java | 10 +- .../contraptions/particle/AirParticle.java | 54 +- .../particle/AirParticleData.java | 10 +- .../contraptions/particle/CubeParticle.java | 54 +- .../particle/CubeParticleData.java | 10 +- .../contraptions/particle/HeaterParticle.java | 68 +- .../particle/HeaterParticleData.java | 10 +- .../particle/ICustomParticleData.java | 4 +- .../ICustomParticleDataWithSprite.java | 4 +- .../particle/RotationIndicatorParticle.java | 38 +- .../RotationIndicatorParticleData.java | 10 +- .../contraptions/processing/BasinBlock.java | 58 +- .../processing/BasinGenerator.java | 4 +- .../processing/BasinMovementBehaviour.java | 8 +- .../processing/BasinOperatingTileEntity.java | 12 +- .../contraptions/processing/BasinRecipe.java | 16 +- .../processing/BasinRenderer.java | 32 +- .../processing/BasinTileEntity.java | 98 +- .../processing/EmptyingByBasin.java | 4 +- .../processing/EmptyingRecipe.java | 2 +- .../processing/InWorldProcessing.java | 64 +- .../processing/ProcessingOutput.java | 16 +- .../processing/ProcessingRecipe.java | 10 +- .../processing/ProcessingRecipeBuilder.java | 22 +- .../ProcessingRecipeSerializer.java | 28 +- .../processing/burner/BlazeBurnerBlock.java | 100 +- .../burner/BlazeBurnerBlockItem.java | 64 +- .../processing/burner/BlazeBurnerHandler.java | 32 +- .../burner/BlazeBurnerRenderer.java | 4 +- .../burner/BlazeBurnerTileEntity.java | 24 +- .../burner/LitBlazeBurnerBlock.java | 50 +- .../relays/advanced/GantryShaftBlock.java | 118 +- .../advanced/GantryShaftTileEntity.java | 32 +- .../relays/advanced/SpeedControllerBlock.java | 24 +- .../advanced/SpeedControllerRenderer.java | 12 +- .../advanced/SpeedControllerTileEntity.java | 12 +- .../ConfigureSequencedGearshiftPacket.java | 4 +- .../sequencer/SequencedGearshiftBlock.java | 48 +- .../SequencedGearshiftGenerator.java | 6 +- .../sequencer/SequencedGearshiftScreen.java | 10 +- .../SequencedGearshiftTileEntity.java | 12 +- .../contraptions/relays/belt/BeltBlock.java | 160 ++- .../contraptions/relays/belt/BeltData.java | 20 +- .../relays/belt/BeltGenerator.java | 22 +- .../contraptions/relays/belt/BeltHelper.java | 24 +- .../relays/belt/BeltInstance.java | 16 +- .../contraptions/relays/belt/BeltModel.java | 6 +- .../contraptions/relays/belt/BeltPart.java | 2 +- .../relays/belt/BeltRenderer.java | 66 +- .../contraptions/relays/belt/BeltShapes.java | 62 +- .../contraptions/relays/belt/BeltSlope.java | 2 +- .../relays/belt/BeltTileEntity.java | 120 +- .../belt/item/BeltConnectorHandler.java | 28 +- .../relays/belt/item/BeltConnectorItem.java | 84 +- .../BeltCrusherInteractionHandler.java | 8 +- .../BeltFunnelInteractionHandler.java | 14 +- .../relays/belt/transport/BeltInventory.java | 38 +- .../belt/transport/BeltMovementHandler.java | 70 +- .../BeltTunnelInteractionHandler.java | 34 +- .../transport/ItemHandlerBeltSegment.java | 4 +- .../belt/transport/TransportedItemStack.java | 6 +- .../relays/elementary/AbstractShaftBlock.java | 44 +- .../BracketedKineticBlockModel.java | 4 +- .../BracketedTileEntityBehaviour.java | 10 +- .../relays/elementary/CogWheelBlock.java | 34 +- .../relays/elementary/CogwheelBlockItem.java | 104 +- .../relays/elementary/ShaftBlock.java | 18 +- .../elementary/SimpleKineticTileEntity.java | 8 +- .../encased/AbstractEncasedShaftBlock.java | 18 +- .../relays/encased/AdjustablePulleyBlock.java | 26 +- .../encased/AdjustablePulleyTileEntity.java | 8 +- .../relays/encased/ClutchBlock.java | 10 +- .../relays/encased/ClutchTileEntity.java | 2 +- .../DirectionalShaftHalvesTileEntity.java | 4 +- .../relays/encased/EncasedBeltBlock.java | 80 +- .../relays/encased/EncasedBeltGenerator.java | 16 +- .../relays/encased/EncasedShaftBlock.java | 8 +- .../relays/encased/GearshiftBlock.java | 28 +- .../relays/encased/SplitShaftRenderer.java | 8 +- .../contraptions/relays/gauge/GaugeBlock.java | 58 +- .../relays/gauge/GaugeInstance.java | 12 +- .../relays/gauge/GaugeRenderer.java | 10 +- .../relays/gauge/GaugeTileEntity.java | 6 +- .../relays/gauge/SpeedGaugeTileEntity.java | 8 +- .../relays/gauge/StressGaugeTileEntity.java | 24 +- .../relays/gearbox/GearboxBlock.java | 18 +- .../relays/gearbox/GearboxInstance.java | 10 +- .../relays/gearbox/GearboxRenderer.java | 14 +- .../relays/gearbox/GearshiftTileEntity.java | 2 +- .../relays/gearbox/VerticalGearboxItem.java | 22 +- .../contraptions/wrench/IWrenchable.java | 60 +- .../wrench/IWrenchableWithBracket.java | 12 +- .../contraptions/wrench/WrenchItem.java | 28 +- .../wrench/WrenchItemRenderer.java | 2 +- .../content/curiosities/BuildersTeaItem.java | 26 +- .../curiosities/ChromaticCompoundColor.java | 2 +- .../curiosities/ChromaticCompoundItem.java | 36 +- .../content/curiosities/CombustibleItem.java | 2 + .../curiosities/NoGravMagicalDohickyItem.java | 14 +- .../curiosities/RefinedRadianceItem.java | 6 +- .../content/curiosities/ShadowSteelItem.java | 6 +- .../curiosities/TreeFertilizerItem.java | 54 +- .../curiosities/armor/AllArmorMaterials.java | 14 +- .../curiosities/armor/BackTankUtil.java | 8 +- .../armor/CapacityEnchantment.java | 2 + .../curiosities/armor/CopperArmorItem.java | 6 +- .../armor/CopperBacktankArmorLayer.java | 32 +- .../armor/CopperBacktankBlock.java | 68 +- .../curiosities/armor/CopperBacktankItem.java | 12 +- .../armor/CopperBacktankRenderer.java | 6 +- .../armor/CopperBacktankTileEntity.java | 20 +- .../curiosities/armor/DivingBootsItem.java | 18 +- .../curiosities/armor/DivingHelmetItem.java | 18 +- .../curiosities/bell/AbstractBellBlock.java | 28 +- .../curiosities/bell/BasicParticleData.java | 10 +- .../curiosities/bell/BellRenderer.java | 10 +- .../bell/CustomRotationParticle.java | 40 +- .../curiosities/bell/HauntedBellBlock.java | 4 +- .../bell/HauntedBellMovementBehaviour.java | 2 +- .../curiosities/bell/HauntedBellPulser.java | 6 +- .../bell/HauntedBellTileEntity.java | 16 +- .../curiosities/bell/PeculiarBellBlock.java | 24 +- .../curiosities/bell/SoulBaseParticle.java | 20 +- .../curiosities/bell/SoulParticle.java | 36 +- .../curiosities/bell/SoulPulseEffect.java | 18 +- .../symmetry/SymmetryEffectPacket.java | 2 +- .../curiosities/symmetry/SymmetryHandler.java | 70 +- .../symmetry/SymmetryWandItem.java | 94 +- .../symmetry/SymmetryWandScreen.java | 18 +- .../client/SymmetryWandItemRenderer.java | 2 +- .../symmetry/mirror/CrossPlaneMirror.java | 2 +- .../symmetry/mirror/EmptyMirror.java | 2 +- .../symmetry/mirror/PlaneMirror.java | 2 +- .../symmetry/mirror/SymmetryMirror.java | 14 +- .../BlueprintAssignCompleteRecipePacket.java | 8 +- .../curiosities/tools/BlueprintContainer.java | 28 +- .../curiosities/tools/BlueprintEntity.java | 213 +-- .../curiosities/tools/BlueprintItem.java | 40 +- .../tools/BlueprintOverlayRenderer.java | 38 +- .../curiosities/tools/BlueprintRenderer.java | 72 +- .../curiosities/tools/BlueprintScreen.java | 50 +- .../tools/ExtendoGripInteractionPacket.java | 12 +- .../curiosities/tools/ExtendoGripItem.java | 66 +- .../tools/ExtendoGripItemRenderer.java | 16 +- .../tools/ExtendoGripRenderHandler.java | 34 +- .../curiosities/tools/SandPaperItem.java | 58 +- .../tools/SandPaperItemRenderer.java | 30 +- .../tools/SandPaperPolishingRecipe.java | 6 +- .../curiosities/weapons/PotatoCannonItem.java | 82 +- .../weapons/PotatoCannonItemRenderer.java | 14 +- .../weapons/PotatoCannonPacket.java | 4 +- .../weapons/PotatoCannonProjectileTypes.java | 72 +- .../weapons/PotatoCannonRenderHandler.java | 4 +- .../weapons/PotatoProjectileEntity.java | 118 +- .../weapons/PotatoProjectileRenderMode.java | 10 +- .../weapons/PotatoProjectileRenderer.java | 10 +- .../weapons/PotatoRecoveryEnchantment.java | 2 + .../weapons/ProperProjectileEntity.java | 8 +- .../curiosities/zapper/ShootGadgetPacket.java | 4 +- .../zapper/ShootableGadgetItemMethods.java | 24 +- .../zapper/ShootableGadgetRenderHandler.java | 42 +- .../zapper/ZapperInteractionHandler.java | 46 +- .../curiosities/zapper/ZapperItem.java | 66 +- .../zapper/ZapperItemRenderer.java | 12 +- .../content/curiosities/zapper/ZapperLog.java | 2 +- .../zapper/ZapperRenderHandler.java | 6 +- .../curiosities/zapper/ZapperScreen.java | 14 +- .../zapper/terrainzapper/CuboidBrush.java | 8 +- .../zapper/terrainzapper/CylinderBrush.java | 6 +- .../zapper/terrainzapper/DynamicBrush.java | 18 +- .../zapper/terrainzapper/FlattenTool.java | 24 +- .../zapper/terrainzapper/ShapedBrush.java | 2 +- .../zapper/terrainzapper/SphereBrush.java | 4 +- .../zapper/terrainzapper/TerrainTools.java | 12 +- .../zapper/terrainzapper/WorldshaperItem.java | 10 +- .../WorldshaperItemRenderer.java | 8 +- .../WorldshaperRenderHandler.java | 18 +- .../terrainzapper/WorldshaperScreen.java | 14 +- .../logistics/RedstoneLinkNetworkHandler.java | 4 +- .../content/logistics/block/FlapData.java | 2 +- .../block/belts/tunnel/BeltTunnelBlock.java | 108 +- .../belts/tunnel/BeltTunnelInstance.java | 6 +- .../block/belts/tunnel/BeltTunnelItem.java | 20 +- .../belts/tunnel/BeltTunnelRenderer.java | 12 +- .../block/belts/tunnel/BeltTunnelShapes.java | 19 +- .../belts/tunnel/BeltTunnelTileEntity.java | 30 +- .../block/belts/tunnel/BrassTunnelBlock.java | 18 +- .../belts/tunnel/BrassTunnelCTBehaviour.java | 4 +- .../belts/tunnel/BrassTunnelTileEntity.java | 108 +- .../block/chute/AbstractChuteBlock.java | 50 +- .../logistics/block/chute/ChuteBlock.java | 78 +- .../logistics/block/chute/ChuteGenerator.java | 6 +- .../logistics/block/chute/ChuteItem.java | 32 +- .../logistics/block/chute/ChuteRenderer.java | 10 +- .../logistics/block/chute/ChuteShapes.java | 20 +- .../block/chute/ChuteTileEntity.java | 176 +-- .../block/chute/SmartChuteBlock.java | 30 +- .../block/chute/SmartChuteTileEntity.java | 6 +- .../logistics/block/depot/DepotBehaviour.java | 22 +- .../logistics/block/depot/DepotBlock.java | 16 +- .../logistics/block/depot/DepotRenderer.java | 38 +- .../logistics/block/depot/EjectorBlock.java | 44 +- .../block/depot/EjectorElytraPacket.java | 6 +- .../block/depot/EjectorInstance.java | 2 +- .../logistics/block/depot/EjectorItem.java | 22 +- .../block/depot/EjectorPlacementPacket.java | 12 +- .../block/depot/EjectorRenderer.java | 22 +- .../block/depot/EjectorTargetHandler.java | 58 +- .../block/depot/EjectorTileEntity.java | 116 +- .../logistics/block/depot/EntityLauncher.java | 4 +- .../block/depot/SharedDepotBlockMethods.java | 22 +- .../block/diodes/AbstractDiodeBlock.java | 4 +- .../block/diodes/AbstractDiodeGenerator.java | 2 +- .../AdjustablePulseRepeaterTileEntity.java | 10 +- .../block/diodes/AdjustableRepeaterBlock.java | 22 +- .../diodes/AdjustableRepeaterGenerator.java | 2 +- .../diodes/AdjustableRepeaterScrollSlot.java | 2 +- .../diodes/AdjustableRepeaterTileEntity.java | 12 +- .../block/diodes/PoweredLatchBlock.java | 62 +- .../block/diodes/PoweredLatchGenerator.java | 2 +- .../block/diodes/PulseRepeaterBlock.java | 32 +- .../block/diodes/PulseRepeaterGenerator.java | 2 +- .../block/diodes/ToggleLatchBlock.java | 42 +- .../block/diodes/ToggleLatchGenerator.java | 2 +- .../AbstractDirectionalFunnelBlock.java | 12 +- .../block/funnel/AbstractFunnelBlock.java | 40 +- .../funnel/AbstractHorizontalFunnelBlock.java | 12 +- .../block/funnel/AndesiteFunnelBlock.java | 6 +- .../block/funnel/BeltFunnelBlock.java | 78 +- .../block/funnel/BeltFunnelGenerator.java | 8 +- .../block/funnel/BrassFunnelBlock.java | 6 +- .../logistics/block/funnel/FunnelBlock.java | 56 +- .../funnel/FunnelFilterSlotPositioning.java | 8 +- .../block/funnel/FunnelGenerator.java | 12 +- .../block/funnel/FunnelInstance.java | 6 +- .../logistics/block/funnel/FunnelItem.java | 16 +- .../block/funnel/FunnelMovementBehaviour.java | 24 +- .../block/funnel/FunnelRenderer.java | 12 +- .../block/funnel/FunnelTileEntity.java | 56 +- .../inventories/AdjustableCrateBlock.java | 38 +- .../inventories/AdjustableCrateContainer.java | 20 +- .../inventories/AdjustableCrateScreen.java | 42 +- .../AdjustableCrateTileEntity.java | 14 +- .../block/inventories/CrateBlock.java | 54 +- .../block/inventories/CrateTileEntity.java | 6 +- .../block/inventories/CreativeCrateBlock.java | 4 +- .../inventories/CreativeCrateTileEntity.java | 10 +- .../block/mechanicalArm/ArmAngleTarget.java | 12 +- .../block/mechanicalArm/ArmBlock.java | 28 +- .../block/mechanicalArm/ArmInstance.java | 18 +- .../mechanicalArm/ArmInteractionPoint.java | 62 +- .../ArmInteractionPointHandler.java | 36 +- .../block/mechanicalArm/ArmItem.java | 18 +- .../mechanicalArm/ArmPlacementPacket.java | 10 +- .../block/mechanicalArm/ArmRenderer.java | 24 +- .../block/mechanicalArm/ArmTileEntity.java | 84 +- .../block/redstone/AnalogLeverBlock.java | 48 +- .../block/redstone/AnalogLeverInstance.java | 4 +- .../block/redstone/AnalogLeverRenderer.java | 10 +- .../block/redstone/AnalogLeverTileEntity.java | 6 +- .../redstone/ContactMovementBehaviour.java | 14 +- .../block/redstone/ContentObserverBlock.java | 50 +- .../redstone/ContentObserverTileEntity.java | 16 +- .../redstone/FilteredDetectorFilterSlot.java | 2 +- .../block/redstone/NixieTubeBlock.java | 76 +- .../block/redstone/NixieTubeGenerator.java | 4 +- .../block/redstone/NixieTubeRenderer.java | 48 +- .../block/redstone/NixieTubeTileEntity.java | 12 +- .../block/redstone/RedstoneContactBlock.java | 58 +- .../block/redstone/RedstoneLinkBlock.java | 82 +- .../redstone/RedstoneLinkFrequencySlot.java | 4 +- .../block/redstone/RedstoneLinkGenerator.java | 10 +- .../redstone/RedstoneLinkTileEntity.java | 18 +- .../block/redstone/StockpileSwitchBlock.java | 46 +- .../block/redstone/StockpileSwitchScreen.java | 18 +- .../redstone/StockpileSwitchTileEntity.java | 22 +- .../logistics/item/CardboardBoxItem.java | 26 +- .../item/LecternControllerBlock.java | 38 +- .../item/LecternControllerRenderer.java | 8 +- .../item/LecternControllerTileEntity.java | 56 +- .../item/LinkedControllerBindPacket.java | 2 +- .../item/LinkedControllerClientHandler.java | 66 +- .../item/LinkedControllerContainer.java | 34 +- .../item/LinkedControllerInputPacket.java | 6 +- .../logistics/item/LinkedControllerItem.java | 50 +- .../item/LinkedControllerItemRenderer.java | 22 +- .../item/LinkedControllerPacketBase.java | 6 +- .../item/LinkedControllerScreen.java | 44 +- .../item/filter/AbstractFilterContainer.java | 12 +- .../item/filter/AbstractFilterScreen.java | 26 +- .../item/filter/AttributeFilterContainer.java | 26 +- .../item/filter/AttributeFilterScreen.java | 92 +- .../logistics/item/filter/FilterItem.java | 38 +- .../logistics/item/filter/FilterScreen.java | 30 +- .../item/filter/FilterScreenPacket.java | 14 +- .../logistics/item/filter/ItemAttribute.java | 24 +- .../item/filter/attribute/ColorAttribute.java | 4 +- .../filter/attribute/EnchantAttribute.java | 4 +- .../attribute/FluidContentsAttribute.java | 2 +- .../filter/attribute/ItemNameAttribute.java | 2 +- .../attribute/ShulkerFillLevelAttribute.java | 4 +- .../AstralSorceryAmuletAttribute.java | 4 +- .../logistics/packet/FunnelFlapPacket.java | 2 +- .../logistics/packet/TunnelFlapPacket.java | 6 +- .../content/palettes/AllPaletteBlocks.java | 16 +- .../content/palettes/ConnectedGlassBlock.java | 6 +- .../palettes/ConnectedGlassPaneBlock.java | 6 +- .../content/palettes/GlassPaneBlock.java | 2 + .../content/palettes/PaletteBlockPartial.java | 8 +- .../content/palettes/PaletteBlockPattern.java | 30 +- .../content/palettes/PalettesItemGroup.java | 2 +- .../palettes/PalettesVariantEntry.java | 2 +- .../create/content/palettes/PavedBlock.java | 16 +- .../palettes/StandardFoliageColorHandler.java | 2 +- .../create/content/palettes/WindowBlock.java | 8 +- .../schematics/ClientSchematicLoader.java | 8 +- .../content/schematics/ItemRequirement.java | 16 +- .../content/schematics/MaterialChecklist.java | 26 +- .../content/schematics/SchematicPrinter.java | 60 +- .../schematics/SchematicProcessor.java | 4 +- .../content/schematics/SchematicWorld.java | 60 +- .../schematics/ServerSchematicLoader.java | 18 +- .../schematics/block/LaunchedItem.java | 18 +- .../schematics/block/SchematicTableBlock.java | 24 +- .../block/SchematicTableContainer.java | 26 +- .../block/SchematicTableScreen.java | 46 +- .../block/SchematicTableTileEntity.java | 20 +- .../schematics/block/SchematicannonBlock.java | 12 +- .../block/SchematicannonContainer.java | 26 +- .../block/SchematicannonInstance.java | 4 +- .../block/SchematicannonInventory.java | 6 +- .../block/SchematicannonRenderer.java | 52 +- .../block/SchematicannonScreen.java | 70 +- .../block/SchematicannonTileEntity.java | 89 +- .../client/SchematicAndQuillHandler.java | 60 +- .../client/SchematicEditScreen.java | 44 +- .../schematics/client/SchematicHandler.java | 36 +- .../client/SchematicHotbarSlotOverlay.java | 8 +- .../client/SchematicPromptScreen.java | 16 +- .../schematics/client/SchematicRenderer.java | 28 +- .../client/SchematicTransformation.java | 12 +- .../schematics/client/tools/DeployTool.java | 10 +- .../schematics/client/tools/FlipTool.java | 16 +- .../schematics/client/tools/MoveTool.java | 4 +- .../schematics/client/tools/RotateTool.java | 2 +- .../client/tools/SchematicToolBase.java | 22 +- .../filtering/SchematicInstances.java | 2 +- .../item/SchematicAndQuillItem.java | 2 + .../schematics/item/SchematicItem.java | 28 +- .../packet/ConfigureSchematicannonPacket.java | 8 +- .../packet/InstantSchematicPacket.java | 6 +- .../packet/SchematicPlacePacket.java | 12 +- .../packet/SchematicSyncPacket.java | 12 +- .../packet/SchematicUploadPacket.java | 8 +- .../simibubi/create/events/ClientEvents.java | 44 +- .../simibubi/create/events/CommonEvents.java | 10 +- .../simibubi/create/events/InputEvents.java | 8 +- .../create/foundation/BreakProgressHook.java | 4 +- .../advancement/AllAdvancements.java | 470 +++--- .../foundation/advancement/AllTriggers.java | 4 +- .../advancement/CriterionTriggerBase.java | 12 +- .../foundation/advancement/SimpleTrigger.java | 4 +- .../StringSerializableTrigger.java | 8 +- .../simibubi/create/foundation/block/ITE.java | 2 +- .../foundation/block/ItemUseOverrides.java | 4 +- .../block/ProperDirectionalBlock.java | 16 +- .../foundation/block/connected/CTModel.java | 12 +- .../block/connected/CTSpriteShiftEntry.java | 4 +- .../connected/ConnectedTextureBehaviour.java | 10 +- .../block/render/ColoredVertexModel.java | 2 +- .../foundation/block/render/QuadHelper.java | 4 +- .../block/render/SpriteShiftEntry.java | 2 +- .../collision/ContinuousOBBCollider.java | 12 +- .../foundation/collision/OrientedBB.java | 6 +- .../foundation/command/AllCommands.java | 2 +- .../create/foundation/command/ChunkUtil.java | 28 +- .../foundation/command/ChunkUtilCommand.java | 30 +- .../command/ClearBufferCacheCommand.java | 4 +- .../foundation/command/CloneCommand.java | 64 +- .../foundation/command/ConfigCommand.java | 16 +- .../command/ConfigureConfigCommand.java | 8 +- .../foundation/command/CouplingCommand.java | 32 +- .../command/FabulousWarningCommand.java | 2 +- .../command/FixLightingCommand.java | 4 +- .../foundation/command/FlySpeedCommand.java | 12 +- .../foundation/command/GlueCommand.java | 8 +- .../foundation/command/HighlightCommand.java | 24 +- .../foundation/command/HighlightPacket.java | 12 +- .../foundation/command/KillTPSCommand.java | 24 +- .../command/OverlayConfigCommand.java | 6 +- .../foundation/command/PonderCommand.java | 14 +- .../ReplaceInCommandBlocksCommand.java | 18 +- .../command/SConfigureConfigPacket.java | 36 +- .../create/foundation/config/CClient.java | 6 + .../foundation/config/CCuriosities.java | 2 + .../create/foundation/config/CFluids.java | 2 + .../create/foundation/config/CKinetics.java | 6 + .../create/foundation/config/CLogistics.java | 2 + .../create/foundation/config/CRecipes.java | 3 + .../create/foundation/config/CSchematics.java | 4 + .../create/foundation/config/CServer.java | 3 + .../create/foundation/config/CWorldGen.java | 2 + .../config/ui/BaseConfigScreen.java | 12 +- .../config/ui/CConfigureConfigPacket.java | 14 +- .../foundation/config/ui/ConfigScreen.java | 34 +- .../config/ui/ConfigScreenList.java | 38 +- .../foundation/config/ui/ConfigTextField.java | 6 +- .../config/ui/OpenCreateMenuButton.java | 8 +- .../config/ui/SubMenuConfigScreen.java | 20 +- .../config/ui/entries/EnumEntry.java | 2 +- .../config/ui/entries/NumberEntry.java | 20 +- .../config/ui/entries/ValueEntry.java | 8 +- .../create/foundation/data/AssetLookup.java | 6 +- .../create/foundation/data/BlockStateGen.java | 70 +- .../foundation/data/BuilderTransformers.java | 42 +- .../data/DirectionalAxisBlockStateGen.java | 10 +- .../create/foundation/data/LangMerger.java | 8 +- .../create/foundation/data/NamedTag.java | 6 +- .../foundation/data/SharedProperties.java | 2 +- .../foundation/data/SpecialBlockStateGen.java | 2 +- .../create/foundation/data/WindowGen.java | 52 +- .../data/recipe/CompactingRecipeGen.java | 2 + .../data/recipe/CreateRecipeProvider.java | 2 +- .../data/recipe/CrushingRecipeGen.java | 3 + .../data/recipe/CuttingRecipeGen.java | 3 + .../data/recipe/EmptyingRecipeGen.java | 2 + .../data/recipe/FillingRecipeGen.java | 2 + .../MechanicalCraftingRecipeBuilder.java | 16 +- .../recipe/MechanicalCraftingRecipeGen.java | 21 +- .../data/recipe/MillingRecipeGen.java | 2 + .../data/recipe/MixingRecipeGen.java | 3 + .../data/recipe/PolishingRecipeGen.java | 2 + .../data/recipe/PressingRecipeGen.java | 5 +- .../data/recipe/ProcessingRecipeGen.java | 8 +- .../recipe/SequencedAssemblyRecipeGen.java | 3 + .../data/recipe/StandardRecipeGen.java | 1268 +++++++++-------- .../data/recipe/WashingRecipeGen.java | 4 +- .../foundation/fluid/CombinedTankWrapper.java | 2 + .../create/foundation/fluid/FluidHelper.java | 26 +- .../foundation/fluid/FluidIngredient.java | 26 +- .../foundation/fluid/FluidRenderer.java | 48 +- .../gui/AbstractSimiContainerScreen.java | 50 +- .../foundation/gui/AbstractSimiScreen.java | 12 +- .../create/foundation/gui/AllGuiTextures.java | 4 +- .../create/foundation/gui/AllIcons.java | 14 +- .../create/foundation/gui/BoxElement.java | 8 +- .../foundation/gui/ClearContainerPacket.java | 4 +- .../gui/CombinedStencilElement.java | 8 +- .../foundation/gui/ConfirmationScreen.java | 46 +- .../gui/CustomLightingSettings.java | 14 +- .../foundation/gui/GhostItemContainer.java | 34 +- .../foundation/gui/GhostItemSubmitPacket.java | 10 +- .../create/foundation/gui/GuiGameElement.java | 82 +- .../foundation/gui/ILightingSettings.java | 4 +- .../create/foundation/gui/ScreenOpener.java | 8 +- .../create/foundation/gui/StencilElement.java | 6 +- .../foundation/gui/TextStencilElement.java | 14 +- .../foundation/gui/ToolSelectionScreen.java | 40 +- .../create/foundation/gui/UIRenderHelper.java | 78 +- .../gui/mainMenu/CreateMainMenuScreen.java | 48 +- .../gui/widgets/AbstractSimiWidget.java | 6 +- .../foundation/gui/widgets/BoxWidget.java | 8 +- .../foundation/gui/widgets/ElementWidget.java | 4 +- .../foundation/gui/widgets/IconButton.java | 6 +- .../create/foundation/gui/widgets/Label.java | 16 +- .../foundation/gui/widgets/ScrollInput.java | 8 +- .../gui/widgets/SelectionScrollInput.java | 12 +- .../foundation/item/CreateItemGroupBase.java | 10 +- .../foundation/item/HiddenIngredientItem.java | 8 +- .../foundation/item/ItemDescription.java | 40 +- .../create/foundation/item/ItemHelper.java | 14 +- .../foundation/item/SmartInventory.java | 6 +- .../item/TagDependentIngredientItem.java | 12 +- .../create/foundation/item/TooltipHelper.java | 46 +- .../item/render/CustomRenderedItemModel.java | 4 +- .../CustomRenderedItemModelRenderer.java | 8 +- .../item/render/PartialItemModelRenderer.java | 14 +- .../foundation/mixin/BreakProgressMixin.java | 4 +- .../EntityContraptionInteractionMixin.java | 38 +- .../mixin/FixNormalScalingMixin.java | 2 + .../mixin/HeavyBootsOnPlayerMixin.java | 2 +- .../mixin/ModelDataRefreshMixin.java | 4 +- .../foundation/mixin/WindowResizeMixin.java | 2 +- .../foundation/networking/AllPackets.java | 2 +- .../networking/ISyncPersistentData.java | 10 +- .../foundation/networking/NbtPacket.java | 10 +- .../TileEntityConfigurationPacket.java | 8 +- .../networking/TileEntityDataPacket.java | 4 +- .../ponder/NavigatableSimiScreen.java | 50 +- .../foundation/ponder/PonderProgressBar.java | 32 +- .../foundation/ponder/PonderRegistry.java | 6 +- .../create/foundation/ponder/PonderScene.java | 36 +- .../ponder/PonderTooltipHandler.java | 30 +- .../create/foundation/ponder/PonderUI.java | 216 +-- .../create/foundation/ponder/PonderWorld.java | 94 +- .../ponder/PonderWorldParticles.java | 18 +- .../foundation/ponder/SceneBuilder.java | 34 +- .../foundation/ponder/SceneBuildingUtil.java | 12 +- .../create/foundation/ponder/Selection.java | 12 +- .../foundation/ponder/content/ArmScenes.java | 50 +- .../ponder/content/BearingScenes.java | 60 +- .../foundation/ponder/content/BeltScenes.java | 46 +- .../ponder/content/CartAssemblerScenes.java | 52 +- .../ponder/content/ChainDriveScenes.java | 30 +- .../ponder/content/ChassisScenes.java | 34 +- .../ponder/content/ChuteScenes.java | 14 +- .../ponder/content/CrafterScenes.java | 6 +- .../ponder/content/DebugScenes.java | 22 +- .../ponder/content/DeployerScenes.java | 52 +- .../ponder/content/EjectorScenes.java | 6 +- .../foundation/ponder/content/FanScenes.java | 26 +- .../ponder/content/FunnelScenes.java | 44 +- .../ponder/content/GantryScenes.java | 4 +- .../ponder/content/KineticsScenes.java | 58 +- .../ponder/content/MechanicalDrillScenes.java | 4 +- .../ponder/content/MechanicalSawScenes.java | 34 +- .../ponder/content/MovementActorScenes.java | 24 +- .../ponder/content/PistonScenes.java | 42 +- .../ponder/content/PonderChapter.java | 8 +- .../ponder/content/PonderIndexScreen.java | 22 +- .../foundation/ponder/content/PonderTag.java | 8 +- .../ponder/content/PonderTagIndexScreen.java | 42 +- .../ponder/content/PonderTagScreen.java | 48 +- .../ponder/content/ProcessingScenes.java | 76 +- .../ponder/content/PulleyScenes.java | 4 +- .../ponder/content/RedstoneScenes.java | 44 +- .../ponder/content/TunnelScenes.java | 18 +- .../fluid/FluidMovementActorScenes.java | 2 +- .../ponder/content/fluid/FluidTankScenes.java | 4 +- .../content/fluid/HosePulleyScenes.java | 36 +- .../ponder/content/fluid/PipeScenes.java | 76 +- .../ponder/content/fluid/PumpScenes.java | 66 +- .../ponder/content/fluid/SpoutScenes.java | 8 +- .../ponder/elements/AnimatedSceneElement.java | 12 +- .../ponder/elements/InputWindowElement.java | 12 +- .../ponder/elements/MinecartElement.java | 48 +- .../ponder/elements/ParrotElement.java | 98 +- .../ponder/elements/TextWindowElement.java | 16 +- .../ponder/elements/WorldSectionElement.java | 66 +- .../AnimateTileEntityInstruction.java | 2 +- .../EmitParticlesInstruction.java | 2 +- .../FadeIntoSceneInstruction.java | 2 +- .../FadeOutOfSceneInstruction.java | 2 +- .../instructions/HideAllInstruction.java | 2 +- .../HighlightValueBoxInstruction.java | 2 +- .../ReplaceBlocksInstruction.java | 6 +- .../TileEntityDataInstruction.java | 8 +- .../foundation/ponder/ui/ChapterLabel.java | 2 +- .../foundation/ponder/ui/PonderButton.java | 2 +- .../foundation/render/PartialBufferer.java | 2 +- .../foundation/render/ShadowRenderHelper.java | 34 +- .../foundation/render/SuperByteBuffer.java | 102 +- .../render/SuperByteBufferCache.java | 14 +- .../render/TileEntityRenderHelper.java | 14 +- .../foundation/renderState/RenderTypes.java | 112 +- .../renderState/SuperRenderTypeBuffer.java | 42 +- .../foundation/sound/ContinuousSound.java | 8 +- .../foundation/sound/RepeatingSound.java | 4 +- .../create/foundation/sound/SoundScape.java | 6 +- .../create/foundation/sound/SoundScapes.java | 8 +- .../tileEntity/SmartTileEntity.java | 24 +- .../tileEntity/SyncedTileEntity.java | 26 +- .../tileEntity/TileEntityBehaviour.java | 8 +- .../tileEntity/behaviour/ValueBox.java | 40 +- .../behaviour/ValueBoxRenderer.java | 6 +- .../behaviour/ValueBoxTransform.java | 8 +- .../belt/BeltProcessingBehaviour.java | 4 +- .../belt/DirectBeltInputBehaviour.java | 10 +- .../TransportedItemStackHandlerBehaviour.java | 2 +- .../EdgeInteractionHandler.java | 24 +- .../EdgeInteractionRenderer.java | 18 +- .../filtering/FilteringBehaviour.java | 14 +- .../filtering/FilteringCountUpdatePacket.java | 2 +- .../behaviour/filtering/FilteringHandler.java | 34 +- .../filtering/FilteringRenderer.java | 28 +- .../filtering/SidedFilteringBehaviour.java | 6 +- .../fluid/SmartFluidTankBehaviour.java | 10 +- .../inventory/InvManipulationBehaviour.java | 18 +- .../behaviour/linked/LinkBehaviour.java | 26 +- .../behaviour/linked/LinkHandler.java | 8 +- .../behaviour/linked/LinkRenderer.java | 16 +- .../scrollvalue/ScrollValueBehaviour.java | 6 +- .../scrollvalue/ScrollValueHandler.java | 14 +- .../scrollvalue/ScrollValueRenderer.java | 18 +- .../ColoredOverlayTileEntityRenderer.java | 4 +- .../renderer/SafeTileEntityRenderer.java | 2 +- .../utility/AbstractBlockBreakQueue.java | 2 +- .../foundation/utility/AngleHelper.java | 4 +- .../utility/AnimationTickHolder.java | 4 +- .../create/foundation/utility/BlockFace.java | 2 +- .../foundation/utility/BlockHelper.java | 158 +- .../foundation/utility/ColorHandlers.java | 4 +- .../create/foundation/utility/Debug.java | 12 +- .../foundation/utility/DirectionHelper.java | 2 +- .../foundation/utility/EmptyNamedTag.java | 4 +- .../create/foundation/utility/FontHelper.java | 16 +- .../utility/ISimpleReloadListener.java | 2 +- .../create/foundation/utility/Iterate.java | 6 +- .../create/foundation/utility/Lang.java | 2 +- .../foundation/utility/MatrixStacker.java | 30 +- .../create/foundation/utility/NBTHelper.java | 14 +- .../foundation/utility/NBTProcessors.java | 6 +- .../create/foundation/utility/Pointing.java | 2 +- .../foundation/utility/RaycastHelper.java | 8 +- .../utility/ServerSpeedProvider.java | 4 +- .../create/foundation/utility/TreeCutter.java | 32 +- .../create/foundation/utility/VecHelper.java | 74 +- .../foundation/utility/VoxelShaper.java | 10 +- .../foundation/utility/WorldHelper.java | 6 +- .../utility/animation/LerpedFloat.java | 6 +- .../utility/ghost/GhostBlockParams.java | 2 +- .../utility/ghost/GhostBlockRenderer.java | 48 +- .../utility/outliner/AABBOutline.java | 6 +- .../utility/outliner/BlockClusterOutline.java | 26 +- .../utility/outliner/ChasingAABBOutline.java | 4 +- .../foundation/utility/outliner/Outline.java | 36 +- .../utility/placement/IPlacementHelper.java | 10 +- .../utility/placement/PlacementHelpers.java | 52 +- .../utility/placement/PlacementOffset.java | 20 +- .../utility/placement/util/PoleHelper.java | 10 +- .../utility/recipe/RecipeConditions.java | 2 +- .../PlacementSimulationServerWorld.java | 14 +- .../PlacementSimulationWorld.java | 24 +- .../utility/worldWrappers/RayTraceWorld.java | 4 +- .../worldWrappers/WrappedChunkProvider.java | 10 +- .../worldWrappers/WrappedClientWorld.java | 42 +- .../worldWrappers/WrappedServerWorld.java | 56 +- .../utility/worldWrappers/WrappedWorld.java | 82 +- .../worldWrappers/chunk/EmptierChunk.java | 28 +- .../worldWrappers/chunk/WrappedChunk.java | 52 +- .../chunk/WrappedChunkSection.java | 4 +- .../foundation/worldgen/AllWorldFeatures.java | 2 +- .../worldgen/ConfigDrivenDecorator.java | 2 +- .../worldgen/ConfigDrivenFeatureEntry.java | 11 +- .../worldgen/ConfigDrivenOreFeature.java | 10 +- .../ConfigDrivenOreFeatureConfig.java | 2 +- .../foundation/worldgen/OxidizingBlock.java | 34 +- 1007 files changed, 13314 insertions(+), 12817 deletions(-) diff --git a/build.gradle b/build.gradle index ced646afd..c2d1456ad 100644 --- a/build.gradle +++ b/build.gradle @@ -32,7 +32,7 @@ archivesBaseName = 'create' sourceCompatibility = targetCompatibility = compileJava.sourceCompatibility = compileJava.targetCompatibility = '1.8' minecraft { - mappings channel: 'snapshot', version: '20200920-mixed-1.16.3' + mappings channel: 'official', version: "${minecraft_version}" accessTransformer = file('src/main/resources/META-INF/accesstransformer.cfg') runs { diff --git a/src/main/java/com/simibubi/create/AllBlockPartials.java b/src/main/java/com/simibubi/create/AllBlockPartials.java index 0eff8e238..8fb10077e 100644 --- a/src/main/java/com/simibubi/create/AllBlockPartials.java +++ b/src/main/java/com/simibubi/create/AllBlockPartials.java @@ -127,14 +127,14 @@ public class AllBlockPartials { Map map = new HashMap<>(); for (Direction d : Iterate.directions) { String asId = Lang.asId(type.name()); - map.put(d, get("fluid_pipe/" + asId + "/" + Lang.asId(d.getString()))); + map.put(d, get("fluid_pipe/" + asId + "/" + Lang.asId(d.getSerializedName()))); } PIPE_ATTACHMENTS.put(type, map); } for (BlazeBurnerBlock.HeatLevel heat : BlazeBurnerBlock.HeatLevel.values()) { if (heat == BlazeBurnerBlock.HeatLevel.NONE) continue; - BLAZES.put(heat, get("blaze_burner/blaze/" + heat.getString())); + BLAZES.put(heat, get("blaze_burner/blaze/" + heat.getSerializedName())); } } diff --git a/src/main/java/com/simibubi/create/AllBlocks.java b/src/main/java/com/simibubi/create/AllBlocks.java index 8f1d0d508..df9bbf1c6 100644 --- a/src/main/java/com/simibubi/create/AllBlocks.java +++ b/src/main/java/com/simibubi/create/AllBlocks.java @@ -221,14 +221,14 @@ public class AllBlocks { .initialProperties(() -> Blocks.DISPENSER) .blockstate((ctx, prov) -> prov.simpleBlock(ctx.getEntry(), AssetLookup.partialBaseModel(ctx, prov))) .loot((lt, block) -> { - Builder builder = LootTable.builder(); - IBuilder survivesExplosion = SurvivesExplosion.builder(); - lt.registerLootTable(block, builder.addLootPool(LootPool.builder() - .acceptCondition(survivesExplosion) - .rolls(ConstantRange.of(1)) - .addEntry(ItemLootEntry.builder(AllBlocks.SCHEMATICANNON.get().asItem()) - .acceptFunction(CopyNbt.func_215881_a(CopyNbt.Source.BLOCK_ENTITY) - .func_216056_a("Options", "BlockEntityTag.Options"))))); + Builder builder = LootTable.lootTable(); + IBuilder survivesExplosion = SurvivesExplosion.survivesExplosion(); + lt.add(block, builder.withPool(LootPool.lootPool() + .when(survivesExplosion) + .setRolls(ConstantRange.exactly(1)) + .add(ItemLootEntry.lootTableItem(AllBlocks.SCHEMATICANNON.get().asItem()) + .apply(CopyNbt.copyData(CopyNbt.Source.BLOCK_ENTITY) + .copy("Options", "BlockEntityTag.Options"))))); }) .item() .transform(customItemModel()) @@ -289,11 +289,11 @@ public class AllBlocks { public static final BlockEntry GEARBOX = REGISTRATE.block("gearbox", GearboxBlock::new) .initialProperties(SharedProperties::stone) - .properties(AbstractBlock.Properties::nonOpaque) + .properties(AbstractBlock.Properties::noOcclusion) .transform(StressConfigDefaults.setNoImpact()) .onRegister(CreateRegistrate.connectedTextures(new EncasedCTBehaviour(AllSpriteShifts.ANDESITE_CASING))) .onRegister(CreateRegistrate.casingConnectivity((block, cc) -> cc.make(block, AllSpriteShifts.ANDESITE_CASING, - (s, f) -> f.getAxis() == s.get(GearboxBlock.AXIS)))) + (s, f) -> f.getAxis() == s.getValue(GearboxBlock.AXIS)))) .blockstate((c, p) -> axisBlock(c, p, $ -> AssetLookup.partialBaseModel(c, p), true)) .item() .transform(customItemModel()) @@ -301,7 +301,7 @@ public class AllBlocks { public static final BlockEntry CLUTCH = REGISTRATE.block("clutch", ClutchBlock::new) .initialProperties(SharedProperties::stone) - .properties(AbstractBlock.Properties::nonOpaque) + .properties(AbstractBlock.Properties::noOcclusion) .transform(StressConfigDefaults.setNoImpact()) .blockstate((c, p) -> BlockStateGen.axisBlock(c, p, AssetLookup.forPowered(c, p))) .item() @@ -310,7 +310,7 @@ public class AllBlocks { public static final BlockEntry GEARSHIFT = REGISTRATE.block("gearshift", GearshiftBlock::new) .initialProperties(SharedProperties::stone) - .properties(AbstractBlock.Properties::nonOpaque) + .properties(AbstractBlock.Properties::noOcclusion) .transform(StressConfigDefaults.setNoImpact()) .blockstate((c, p) -> BlockStateGen.axisBlock(c, p, AssetLookup.forPowered(c, p))) .item() @@ -320,7 +320,7 @@ public class AllBlocks { public static final BlockEntry ENCASED_CHAIN_DRIVE = REGISTRATE.block("encased_chain_drive", EncasedBeltBlock::new) .initialProperties(SharedProperties::stone) - .properties(AbstractBlock.Properties::nonOpaque) + .properties(AbstractBlock.Properties::noOcclusion) .transform(StressConfigDefaults.setNoImpact()) .blockstate((c, p) -> new EncasedBeltGenerator((state, suffix) -> p.models() .getExistingFile(p.modLoc("block/" + c.getName() + "/" + suffix))).generate(c, p)) @@ -331,10 +331,10 @@ public class AllBlocks { public static final BlockEntry ADJUSTABLE_CHAIN_GEARSHIFT = REGISTRATE.block("adjustable_chain_gearshift", AdjustablePulleyBlock::new) .initialProperties(SharedProperties::stone) - .properties(AbstractBlock.Properties::nonOpaque) + .properties(AbstractBlock.Properties::noOcclusion) .transform(StressConfigDefaults.setNoImpact()) .blockstate((c, p) -> new EncasedBeltGenerator((state, suffix) -> { - String powered = state.get(AdjustablePulleyBlock.POWERED) ? "_powered" : ""; + String powered = state.getValue(AdjustablePulleyBlock.POWERED) ? "_powered" : ""; return p.models() .withExistingParent(c.getName() + "_" + suffix + powered, p.modLoc("block/encased_chain_drive/" + suffix)) @@ -347,9 +347,9 @@ public class AllBlocks { .register(); public static final BlockEntry BELT = REGISTRATE.block("belt", BeltBlock::new) - .initialProperties(SharedProperties.beltMaterial, MaterialColor.GRAY) - .properties(p -> p.sound(SoundType.CLOTH)) - .properties(p -> p.hardnessAndResistance(0.8F)) + .initialProperties(SharedProperties.beltMaterial, MaterialColor.COLOR_GRAY) + .properties(p -> p.sound(SoundType.WOOL)) + .properties(p -> p.strength(0.8F)) .blockstate(new BeltGenerator()::generate) .transform(StressConfigDefaults.setImpact(1.0)) .onRegister(CreateRegistrate.blockModel(() -> BeltModel::new)) @@ -368,9 +368,9 @@ public class AllBlocks { public static final BlockEntry WATER_WHEEL = REGISTRATE.block("water_wheel", WaterWheelBlock::new) .initialProperties(SharedProperties::wooden) - .properties(AbstractBlock.Properties::nonOpaque) + .properties(AbstractBlock.Properties::noOcclusion) .blockstate(BlockStateGen.directionalBlockProviderIgnoresWaterlogged(false)) - .addLayer(() -> RenderType::getCutoutMipped) + .addLayer(() -> RenderType::cutoutMipped) .transform(StressConfigDefaults.setCapacity(16.0)) .simpleItem() .register(); @@ -378,7 +378,7 @@ public class AllBlocks { public static final BlockEntry ENCASED_FAN = REGISTRATE.block("encased_fan", EncasedFanBlock::new) .initialProperties(SharedProperties::stone) .blockstate(BlockStateGen.directionalBlockProvider(true)) - .addLayer(() -> RenderType::getCutoutMipped) + .addLayer(() -> RenderType::cutoutMipped) .transform(StressConfigDefaults.setCapacity(16.0)) .transform(StressConfigDefaults.setImpact(2.0)) .item() @@ -389,7 +389,7 @@ public class AllBlocks { .initialProperties(SharedProperties::stone) .tag(AllBlockTags.BRITTLE.tag) .blockstate(BlockStateGen.directionalBlockProvider(true)) - .addLayer(() -> RenderType::getCutoutMipped) + .addLayer(() -> RenderType::cutoutMipped) .item() .transform(customItemModel()) .register(); @@ -434,9 +434,9 @@ public class AllBlocks { public static final BlockEntry CRUSHING_WHEEL = REGISTRATE.block("crushing_wheel", CrushingWheelBlock::new) .initialProperties(SharedProperties::stone) - .properties(AbstractBlock.Properties::nonOpaque) + .properties(AbstractBlock.Properties::noOcclusion) .blockstate(BlockStateGen.axisBlockProvider(false)) - .addLayer(() -> RenderType::getCutoutMipped) + .addLayer(() -> RenderType::cutoutMipped) .transform(StressConfigDefaults.setImpact(8.0)) .simpleItem() .register(); @@ -454,7 +454,7 @@ public class AllBlocks { public static final BlockEntry MECHANICAL_PRESS = REGISTRATE.block("mechanical_press", MechanicalPressBlock::new) .initialProperties(SharedProperties::stone) - .properties(AbstractBlock.Properties::nonOpaque) + .properties(AbstractBlock.Properties::noOcclusion) .blockstate(BlockStateGen.horizontalBlockProvider(true)) .transform(StressConfigDefaults.setImpact(8.0)) .item(AssemblyOperatorBlockItem::new) @@ -464,9 +464,9 @@ public class AllBlocks { public static final BlockEntry MECHANICAL_MIXER = REGISTRATE.block("mechanical_mixer", MechanicalMixerBlock::new) .initialProperties(SharedProperties::stone) - .properties(AbstractBlock.Properties::nonOpaque) + .properties(AbstractBlock.Properties::noOcclusion) .blockstate((c, p) -> p.simpleBlock(c.getEntry(), AssetLookup.partialBaseModel(c, p))) - .addLayer(() -> RenderType::getCutoutMipped) + .addLayer(() -> RenderType::cutoutMipped) .transform(StressConfigDefaults.setImpact(4.0)) .item(AssemblyOperatorBlockItem::new) .transform(customItemModel()) @@ -474,7 +474,7 @@ public class AllBlocks { public static final BlockEntry BASIN = REGISTRATE.block("basin", BasinBlock::new) .initialProperties(SharedProperties::stone) - .properties(p -> p.sound(SoundType.NETHERITE)) + .properties(p -> p.sound(SoundType.NETHERITE_BLOCK)) .blockstate(new BasinGenerator()::generate) .onRegister(addMovementBehaviour(new BasinMovementBehaviour())) .item() @@ -484,10 +484,10 @@ public class AllBlocks { public static final BlockEntry BLAZE_BURNER = REGISTRATE.block("blaze_burner", BlazeBurnerBlock::new) .initialProperties(SharedProperties::softMetal) - .properties(p -> p.luminance($ -> 12)) - .addLayer(() -> RenderType::getCutoutMipped) + .properties(p -> p.lightLevel($ -> 12)) + .addLayer(() -> RenderType::cutoutMipped) .tag(AllBlockTags.FAN_TRANSPARENT.tag, AllBlockTags.FAN_HEATERS.tag) - .loot((lt, block) -> lt.registerLootTable(block, BlazeBurnerBlock.buildLootTable())) + .loot((lt, block) -> lt.add(block, BlazeBurnerBlock.buildLootTable())) .blockstate((c, p) -> p.simpleBlock(c.getEntry(), AssetLookup.partialBaseModel(c, p))) .item(BlazeBurnerBlockItem::withBlaze) .model(AssetLookup.customBlockItemModel("blaze_burner", "block_with_blaze")) @@ -497,14 +497,14 @@ public class AllBlocks { public static final BlockEntry LIT_BLAZE_BURNER = REGISTRATE.block("lit_blaze_burner", LitBlazeBurnerBlock::new) .initialProperties(SharedProperties::softMetal) - .properties(p -> p.luminance(LitBlazeBurnerBlock::getLight)) - .addLayer(() -> RenderType::getCutoutMipped) + .properties(p -> p.lightLevel(LitBlazeBurnerBlock::getLight)) + .addLayer(() -> RenderType::cutoutMipped) .tag(AllBlockTags.FAN_TRANSPARENT.tag, AllBlockTags.FAN_HEATERS.tag) - .loot((lt, block) -> lt.registerDropping(block, AllItems.EMPTY_BLAZE_BURNER.get())) + .loot((lt, block) -> lt.dropOther(block, AllItems.EMPTY_BLAZE_BURNER.get())) .blockstate((c, p) -> p.getVariantBuilder(c.get()).forAllStates(state -> ConfiguredModel.builder() .modelFile(p.models().getExistingFile(p.modLoc( - "block/blaze_burner/" + (state.get(LitBlazeBurnerBlock.FLAME_TYPE) == LitBlazeBurnerBlock.FlameType.SOUL ? "block_with_soul_fire" : "block_with_fire") + "block/blaze_burner/" + (state.getValue(LitBlazeBurnerBlock.FLAME_TYPE) == LitBlazeBurnerBlock.FlameType.SOUL ? "block_with_soul_fire" : "block_with_fire") ))) .build())) .register(); @@ -519,7 +519,7 @@ public class AllBlocks { public static final BlockEntry WEIGHTED_EJECTOR = REGISTRATE.block("weighted_ejector", EjectorBlock::new) .initialProperties(SharedProperties::stone) - .properties(Block.Properties::nonOpaque) + .properties(AbstractBlock.Properties::noOcclusion) .blockstate((c, p) -> p.horizontalBlock(c.getEntry(), AssetLookup.partialBaseModel(c, p), 180)) .transform(StressConfigDefaults.setImpact(2.0)) .item(EjectorItem::new) @@ -528,8 +528,8 @@ public class AllBlocks { public static final BlockEntry CHUTE = REGISTRATE.block("chute", ChuteBlock::new) .initialProperties(SharedProperties::softMetal) - .properties(p -> p.sound(SoundType.NETHERITE)) - .addLayer(() -> RenderType::getCutoutMipped) + .properties(p -> p.sound(SoundType.NETHERITE_BLOCK)) + .addLayer(() -> RenderType::cutoutMipped) .blockstate(new ChuteGenerator()::generate) .item(ChuteItem::new) .transform(customItemModel("_", "block")) @@ -537,7 +537,7 @@ public class AllBlocks { public static final BlockEntry SMART_CHUTE = REGISTRATE.block("smart_chute", SmartChuteBlock::new) .initialProperties(SharedProperties::softMetal) - .properties(p -> p.sound(SoundType.NETHERITE)) + .properties(p -> p.sound(SoundType.NETHERITE_BLOCK)) .blockstate((c, p) -> BlockStateGen.simpleBlock(c, p, AssetLookup.forPowered(c, p))) .item() .transform(customItemModel("_", "block")) @@ -584,23 +584,23 @@ public class AllBlocks { public static final BlockEntry ENCASED_FLUID_PIPE = REGISTRATE.block("encased_fluid_pipe", EncasedPipeBlock::new) .initialProperties(SharedProperties::softMetal) - .properties(Block.Properties::nonOpaque) + .properties(AbstractBlock.Properties::noOcclusion) .blockstate(BlockStateGen.encasedPipe()) .onRegister(CreateRegistrate.connectedTextures(new EncasedCTBehaviour(AllSpriteShifts.COPPER_CASING))) .onRegister(CreateRegistrate.casingConnectivity((block, cc) -> cc.make(block, AllSpriteShifts.COPPER_CASING, - (s, f) -> !s.get(EncasedPipeBlock.FACING_TO_PROPERTY_MAP.get(f))))) + (s, f) -> !s.getValue(EncasedPipeBlock.FACING_TO_PROPERTY_MAP.get(f))))) .onRegister(CreateRegistrate.blockModel(() -> PipeAttachmentModel::new)) - .loot((p, b) -> p.registerDropping(b, FLUID_PIPE.get())) + .loot((p, b) -> p.dropOther(b, FLUID_PIPE.get())) .register(); public static final BlockEntry GLASS_FLUID_PIPE = REGISTRATE.block("glass_fluid_pipe", GlassFluidPipeBlock::new) .initialProperties(SharedProperties::softMetal) - .addLayer(() -> RenderType::getCutoutMipped) + .addLayer(() -> RenderType::cutoutMipped) .blockstate((c, p) -> BlockStateGen.axisBlock(c, p, s -> p.models() - .getExistingFile(p.modLoc("block/fluid_pipe/window" + (s.get(GlassFluidPipeBlock.ALT) ? "_alt" : ""))))) + .getExistingFile(p.modLoc("block/fluid_pipe/window" + (s.getValue(GlassFluidPipeBlock.ALT) ? "_alt" : ""))))) .onRegister(CreateRegistrate.blockModel(() -> PipeAttachmentModel::new)) - .loot((p, b) -> p.registerDropping(b, FLUID_PIPE.get())) + .loot((p, b) -> p.dropOther(b, FLUID_PIPE.get())) .register(); public static final BlockEntry MECHANICAL_PUMP = REGISTRATE.block("mechanical_pump", PumpBlock::new) @@ -625,7 +625,7 @@ public class AllBlocks { .initialProperties(SharedProperties::softMetal) .blockstate((c, p) -> BlockStateGen.directionalAxisBlock(c, p, (state, vertical) -> AssetLookup.partialBaseModel(c, p, vertical ? "vertical" : "horizontal", - state.get(FluidValveBlock.ENABLED) ? "open" : "closed"))) + state.getValue(FluidValveBlock.ENABLED) ? "open" : "closed"))) .onRegister(CreateRegistrate.blockModel(() -> PipeAttachmentModel::new)) .item() .transform(customItemModel()) @@ -637,25 +637,25 @@ public class AllBlocks { .register(); public static final DyedBlockList DYED_VALVE_HANDLES = new DyedBlockList<>(colour -> { - String colourName = colour.getString(); + String colourName = colour.getSerializedName(); return REGISTRATE.block(colourName + "_valve_handle", ValveHandleBlock::dyed) .transform(BuilderTransformers.valveHandle(colour)) - .recipe((c, p) -> ShapedRecipeBuilder.shapedRecipe(c.get()) - .patternLine("#") - .patternLine("-") - .key('#', DyeHelper.getTagOfDye(colour)) - .key('-', AllItemTags.VALVE_HANDLES.tag) - .addCriterion("has_valve", RegistrateRecipeProvider.hasItem(AllItemTags.VALVE_HANDLES.tag)) - .build(p, Create.asResource("crafting/kinetics/" + c.getName() + "_from_other_valve_handle"))) + .recipe((c, p) -> ShapedRecipeBuilder.shaped(c.get()) + .pattern("#") + .pattern("-") + .define('#', DyeHelper.getTagOfDye(colour)) + .define('-', AllItemTags.VALVE_HANDLES.tag) + .unlockedBy("has_valve", RegistrateRecipeProvider.hasItem(AllItemTags.VALVE_HANDLES.tag)) + .save(p, Create.asResource("crafting/kinetics/" + c.getName() + "_from_other_valve_handle"))) .register(); }); public static final BlockEntry FLUID_TANK = REGISTRATE.block("fluid_tank", FluidTankBlock::regular) .initialProperties(SharedProperties::softMetal) - .properties(AbstractBlock.Properties::nonOpaque) + .properties(AbstractBlock.Properties::noOcclusion) .blockstate(new FluidTankGenerator()::generate) .onRegister(CreateRegistrate.blockModel(() -> FluidTankModel::standard)) - .addLayer(() -> RenderType::getCutoutMipped) + .addLayer(() -> RenderType::cutoutMipped) .item(FluidTankItem::new) .model(AssetLookup.customBlockItemModel("_", "block_single_window")) .build() @@ -665,10 +665,10 @@ public class AllBlocks { REGISTRATE.block("creative_fluid_tank", FluidTankBlock::creative) .initialProperties(SharedProperties::softMetal) .tag(AllBlockTags.SAFE_NBT.tag) - .properties(Block.Properties::nonOpaque) + .properties(AbstractBlock.Properties::noOcclusion) .blockstate(new FluidTankGenerator("creative_")::generate) .onRegister(CreateRegistrate.blockModel(() -> FluidTankModel::creative)) - .addLayer(() -> RenderType::getCutoutMipped) + .addLayer(() -> RenderType::cutoutMipped) .item(FluidTankItem::new) .properties(p -> p.rarity(Rarity.EPIC)) .model((c, p) -> p.withExistingParent(c.getName(), p.modLoc("block/fluid_tank/block_single_window")) @@ -688,7 +688,7 @@ public class AllBlocks { public static final BlockEntry ITEM_DRAIN = REGISTRATE.block("item_drain", ItemDrainBlock::new) .initialProperties(SharedProperties::softMetal) - .addLayer(() -> RenderType::getCutoutMipped) + .addLayer(() -> RenderType::cutoutMipped) .blockstate((c, p) -> p.simpleBlock(c.get(), AssetLookup.standardModel(c, p))) .simpleItem() .register(); @@ -696,7 +696,7 @@ public class AllBlocks { public static final BlockEntry SPOUT = REGISTRATE.block("spout", SpoutBlock::new) .initialProperties(SharedProperties::softMetal) .blockstate((ctx, prov) -> prov.simpleBlock(ctx.getEntry(), AssetLookup.partialBaseModel(ctx, prov))) - .addLayer(() -> RenderType::getCutoutMipped) + .addLayer(() -> RenderType::cutoutMipped) .item(AssemblyOperatorBlockItem::new) .transform(customItemModel()) .register(); @@ -734,16 +734,16 @@ public class AllBlocks { public static final BlockEntry MECHANICAL_PISTON_HEAD = REGISTRATE.block("mechanical_piston_head", MechanicalPistonHeadBlock::new) .initialProperties(() -> Blocks.PISTON_HEAD) - .loot((p, b) -> p.registerDropping(b, PISTON_EXTENSION_POLE.get())) + .loot((p, b) -> p.dropOther(b, PISTON_EXTENSION_POLE.get())) .blockstate((c, p) -> BlockStateGen.directionalBlockIgnoresWaterlogged(c, p, state -> p.models() - .getExistingFile(p.modLoc("block/mechanical_piston/" + state.get(MechanicalPistonHeadBlock.TYPE) - .getString() + "/head")))) + .getExistingFile(p.modLoc("block/mechanical_piston/" + state.getValue(MechanicalPistonHeadBlock.TYPE) + .getSerializedName() + "/head")))) .register(); public static final BlockEntry GANTRY_CARRIAGE = REGISTRATE.block("gantry_carriage", GantryCarriageBlock::new) .initialProperties(SharedProperties::stone) - .properties(Block.Properties::nonOpaque) + .properties(AbstractBlock.Properties::noOcclusion) .blockstate(BlockStateGen.directionalAxisBlockProvider()) .item() .transform(customItemModel()) @@ -753,11 +753,11 @@ public class AllBlocks { REGISTRATE.block("gantry_shaft", GantryShaftBlock::new) .initialProperties(SharedProperties::stone) .blockstate((c, p) -> p.directionalBlock(c.get(), s -> { - boolean isPowered = s.get(GantryShaftBlock.POWERED); - boolean isFlipped = s.get(GantryShaftBlock.FACING) + boolean isPowered = s.getValue(GantryShaftBlock.POWERED); + boolean isFlipped = s.getValue(GantryShaftBlock.FACING) .getAxisDirection() == AxisDirection.NEGATIVE; - String partName = s.get(GantryShaftBlock.PART) - .getString(); + String partName = s.getValue(GantryShaftBlock.PART) + .getSerializedName(); String flipped = isFlipped ? "_flipped" : ""; String powered = isPowered ? "_powered" : ""; ModelFile existing = AssetLookup.partialBaseModel(c, p, partName); @@ -804,9 +804,9 @@ public class AllBlocks { .register(); public static final BlockEntry ROPE = REGISTRATE.block("rope", PulleyBlock.RopeBlock::new) - .initialProperties(SharedProperties.beltMaterial, MaterialColor.BROWN) + .initialProperties(SharedProperties.beltMaterial, MaterialColor.COLOR_BROWN) .tag(AllBlockTags.BRITTLE.tag) - .properties(p -> p.sound(SoundType.CLOTH)) + .properties(p -> p.sound(SoundType.WOOL)) .blockstate((c, p) -> p.simpleBlock(c.get(), p.models() .getExistingFile(p.modLoc("block/rope_pulley/" + c.getName())))) .register(); @@ -822,9 +822,9 @@ public class AllBlocks { public static final BlockEntry CART_ASSEMBLER = REGISTRATE.block("cart_assembler", CartAssemblerBlock::new) .initialProperties(SharedProperties::stone) - .properties(AbstractBlock.Properties::nonOpaque) + .properties(AbstractBlock.Properties::noOcclusion) .blockstate(BlockStateGen.cartAssembler()) - .addLayer(() -> RenderType::getCutoutMipped) + .addLayer(() -> RenderType::cutoutMipped) .tag(BlockTags.RAILS, AllBlockTags.SAFE_NBT.tag) .item(CartAssemblerBlockItem::new) .transform(customItemModel()) @@ -833,9 +833,9 @@ public class AllBlocks { public static final BlockEntry REINFORCED_RAIL = REGISTRATE.block("reinforced_rail", ReinforcedRailBlock::new) .initialProperties(SharedProperties::stone) - .properties(AbstractBlock.Properties::nonOpaque) + .properties(AbstractBlock.Properties::noOcclusion) .blockstate(BlockStateGen.reinforcedRail()) - .addLayer(() -> RenderType::getCutoutMipped) + .addLayer(() -> RenderType::cutoutMipped) .tag(BlockTags.RAILS) .item() .model((c, p) -> p.blockItem(() -> c.getEntry() @@ -847,7 +847,7 @@ public class AllBlocks { REGISTRATE.block("controller_rail", ControllerRailBlock::new) .initialProperties(() -> Blocks.POWERED_RAIL) .blockstate(new ControllerRailGenerator()::generate) - .addLayer(() -> RenderType::getCutoutMipped) + .addLayer(() -> RenderType::cutoutMipped) .color(() -> ColorHandlers::getRedstonePower) .tag(BlockTags.RAILS) .item() @@ -896,8 +896,8 @@ public class AllBlocks { public static final BlockEntry STICKER = REGISTRATE.block("sticker", StickerBlock::new) .initialProperties(SharedProperties::stone) - .properties(Block.Properties::nonOpaque) - .addLayer(() -> RenderType::getCutoutMipped) + .properties(AbstractBlock.Properties::noOcclusion) + .addLayer(() -> RenderType::cutoutMipped) .blockstate((c, p) -> p.directionalBlock(c.get(), AssetLookup.forPowered(c, p))) .item() .transform(customItemModel()) @@ -917,7 +917,7 @@ public class AllBlocks { .blockstate(new SawGenerator()::generate) .transform(StressConfigDefaults.setImpact(4.0)) .onRegister(addMovementBehaviour(new SawMovementBehaviour())) - .addLayer(() -> RenderType::getCutoutMipped) + .addLayer(() -> RenderType::cutoutMipped) .item() .transform(customItemModel()) .register(); @@ -954,7 +954,7 @@ public class AllBlocks { .initialProperties(SharedProperties::stone) .onRegister(addMovementBehaviour(new HarvesterMovementBehaviour())) .blockstate(BlockStateGen.horizontalBlockProvider(true)) - .addLayer(() -> RenderType::getCutoutMipped) + .addLayer(() -> RenderType::cutoutMipped) .item() .transform(customItemModel()) .register(); @@ -968,7 +968,7 @@ public class AllBlocks { .register(); public static final DyedBlockList SEATS = new DyedBlockList<>(colour -> { - String colourName = colour.getString(); + String colourName = colour.getSerializedName(); SeatMovementBehaviour movementBehaviour = new SeatMovementBehaviour(); return REGISTRATE.block(colourName + "_seat", p -> new SeatBlock(p, colour == DyeColor.RED)) .initialProperties(SharedProperties::wooden) @@ -980,20 +980,20 @@ public class AllBlocks { .texture("2", p.modLoc("block/seat/side_" + colourName))); }) .recipe((c, p) -> { - ShapedRecipeBuilder.shapedRecipe(c.get()) - .patternLine("#") - .patternLine("-") - .key('#', DyeHelper.getWoolOfDye(colour)) - .key('-', ItemTags.WOODEN_SLABS) - .addCriterion("has_wool", RegistrateRecipeProvider.hasItem(ItemTags.WOOL)) - .build(p, Create.asResource("crafting/kinetics/" + c.getName())); - ShapedRecipeBuilder.shapedRecipe(c.get()) - .patternLine("#") - .patternLine("-") - .key('#', DyeHelper.getTagOfDye(colour)) - .key('-', AllItemTags.SEATS.tag) - .addCriterion("has_seat", RegistrateRecipeProvider.hasItem(AllItemTags.SEATS.tag)) - .build(p, Create.asResource("crafting/kinetics/" + c.getName() + "_from_other_seat")); + ShapedRecipeBuilder.shaped(c.get()) + .pattern("#") + .pattern("-") + .define('#', DyeHelper.getWoolOfDye(colour)) + .define('-', ItemTags.WOODEN_SLABS) + .unlockedBy("has_wool", RegistrateRecipeProvider.hasItem(ItemTags.WOOL)) + .save(p, Create.asResource("crafting/kinetics/" + c.getName())); + ShapedRecipeBuilder.shaped(c.get()) + .pattern("#") + .pattern("-") + .define('#', DyeHelper.getTagOfDye(colour)) + .define('-', AllItemTags.SEATS.tag) + .unlockedBy("has_seat", RegistrateRecipeProvider.hasItem(AllItemTags.SEATS.tag)) + .save(p, Create.asResource("crafting/kinetics/" + c.getName() + "_from_other_seat")); }) .onRegisterAfter(Item.class, v -> TooltipHelper.referTo(v, "block.create.seat")) .tag(AllBlockTags.SEATS.tag) @@ -1005,7 +1005,7 @@ public class AllBlocks { public static final BlockEntry SAIL_FRAME = REGISTRATE.block("sail_frame", p -> SailBlock.frame(p)) .initialProperties(SharedProperties::wooden) - .properties(Block.Properties::nonOpaque) + .properties(AbstractBlock.Properties::noOcclusion) .blockstate(BlockStateGen.directionalBlockProvider(false)) .tag(AllBlockTags.WINDMILL_SAILS.tag) .tag(AllBlockTags.FAN_TRANSPARENT.tag) @@ -1014,7 +1014,7 @@ public class AllBlocks { public static final BlockEntry SAIL = REGISTRATE.block("white_sail", p -> SailBlock.withCanvas(p)) .initialProperties(SharedProperties::wooden) - .properties(Block.Properties::nonOpaque) + .properties(AbstractBlock.Properties::noOcclusion) .blockstate(BlockStateGen.directionalBlockProvider(false)) .tag(AllBlockTags.WINDMILL_SAILS.tag) .simpleItem() @@ -1024,16 +1024,16 @@ public class AllBlocks { if (colour == DyeColor.WHITE) { return SAIL; } - String colourName = colour.getString(); + String colourName = colour.getSerializedName(); return REGISTRATE.block(colourName + "_sail", p -> SailBlock.withCanvas(p)) - .properties(Block.Properties::nonOpaque) + .properties(AbstractBlock.Properties::noOcclusion) .initialProperties(SharedProperties::wooden) .blockstate((c, p) -> p.directionalBlock(c.get(), p.models() .withExistingParent(colourName + "_sail", p.modLoc("block/white_sail")) .texture("0", p.modLoc("block/sail/canvas_" + colourName)))) .tag(AllBlockTags.WINDMILL_SAILS.tag) .tag(AllBlockTags.SAILS.tag) - .loot((p, b) -> p.registerDropping(b, SAIL.get())) + .loot((p, b) -> p.dropOther(b, SAIL.get())) .register(); }); @@ -1058,18 +1058,18 @@ public class AllBlocks { public static final BlockEntry REFINED_RADIANCE_CASING = REGISTRATE.block("refined_radiance_casing", CasingBlock::new) .transform(BuilderTransformers.casing(AllSpriteShifts.REFINED_RADIANCE_CASING)) - .properties(p -> p.luminance($ -> 12)) + .properties(p -> p.lightLevel($ -> 12)) .lang("Radiant Casing") .register(); public static final BlockEntry MECHANICAL_CRAFTER = REGISTRATE.block("mechanical_crafter", MechanicalCrafterBlock::new) .initialProperties(SharedProperties::softMetal) - .properties(AbstractBlock.Properties::nonOpaque) + .properties(AbstractBlock.Properties::noOcclusion) .blockstate(BlockStateGen.horizontalBlockProvider(true)) .transform(StressConfigDefaults.setImpact(2.0)) .onRegister(CreateRegistrate.connectedTextures(new CrafterCTBehaviour())) - .addLayer(() -> RenderType::getCutoutMipped) + .addLayer(() -> RenderType::cutoutMipped) .item() .transform(customItemModel()) .register(); @@ -1078,7 +1078,7 @@ public class AllBlocks { REGISTRATE.block("sequenced_gearshift", SequencedGearshiftBlock::new) .initialProperties(SharedProperties::stone) .tag(AllBlockTags.SAFE_NBT.tag) - .properties(AbstractBlock.Properties::nonOpaque) + .properties(AbstractBlock.Properties::noOcclusion) .transform(StressConfigDefaults.setNoImpact()) .blockstate(new SequencedGearshiftGenerator()::generate) .item() @@ -1087,7 +1087,7 @@ public class AllBlocks { public static final BlockEntry FLYWHEEL = REGISTRATE.block("flywheel", FlywheelBlock::new) .initialProperties(SharedProperties::softMetal) - .properties(AbstractBlock.Properties::nonOpaque) + .properties(AbstractBlock.Properties::noOcclusion) .transform(StressConfigDefaults.setNoImpact()) .blockstate(new FlywheelGenerator()::generate) .item() @@ -1125,7 +1125,7 @@ public class AllBlocks { .blockstate((c, p) -> p.getVariantBuilder(c.get()) .forAllStates(s -> ConfiguredModel.builder() .modelFile(AssetLookup.partialBaseModel(c, p)) - .rotationX(s.get(ArmBlock.CEILING) ? 180 : 0) + .rotationX(s.getValue(ArmBlock.CEILING) ? 180 : 0) .build())) .transform(StressConfigDefaults.setImpact(2.0)) .item(ArmItem::new) @@ -1148,7 +1148,7 @@ public class AllBlocks { .initialProperties(SharedProperties::stone) .tag(AllBlockTags.SAFE_NBT.tag) .blockstate(new BeltFunnelGenerator("andesite", new ResourceLocation("block/polished_andesite"))::generate) - .loot((p, b) -> p.registerDropping(b, ANDESITE_FUNNEL.get())) + .loot((p, b) -> p.dropOther(b, ANDESITE_FUNNEL.get())) .register(); public static final BlockEntry BRASS_FUNNEL = @@ -1167,7 +1167,7 @@ public class AllBlocks { .initialProperties(SharedProperties::softMetal) .tag(AllBlockTags.SAFE_NBT.tag) .blockstate(new BeltFunnelGenerator("brass", Create.asResource("block/brass_block"))::generate) - .loot((p, b) -> p.registerDropping(b, BRASS_FUNNEL.get())) + .loot((p, b) -> p.dropOther(b, BRASS_FUNNEL.get())) .register(); public static final BlockEntry ANDESITE_TUNNEL = @@ -1211,9 +1211,9 @@ public class AllBlocks { public static final BlockEntry ORANGE_NIXIE_TUBE = REGISTRATE.block("nixie_tube", p -> new NixieTubeBlock(p, DyeColor.ORANGE)) .initialProperties(SharedProperties::softMetal) - .properties(p -> p.luminance($ -> 5)) + .properties(p -> p.lightLevel($ -> 5)) .blockstate(new NixieTubeGenerator()::generate) - .addLayer(() -> RenderType::getTranslucent) + .addLayer(() -> RenderType::translucent) .item() .transform(customItemModel()) .register(); @@ -1221,13 +1221,13 @@ public class AllBlocks { public static final DyedBlockList NIXIE_TUBES = new DyedBlockList<>(colour -> { if (colour == DyeColor.ORANGE) return ORANGE_NIXIE_TUBE; - String colourName = colour.getString(); + String colourName = colour.getSerializedName(); return REGISTRATE.block(colourName + "_nixie_tube", p -> new NixieTubeBlock(p, colour)) .initialProperties(SharedProperties::softMetal) - .properties(p -> p.luminance($ -> 5)) + .properties(p -> p.lightLevel($ -> 5)) .blockstate(new NixieTubeGenerator()::generate) - .loot((p, b) -> p.registerDropping(b, ORANGE_NIXIE_TUBE.get())) - .addLayer(() -> RenderType::getTranslucent) + .loot((p, b) -> p.dropOther(b, ORANGE_NIXIE_TUBE.get())) + .addLayer(() -> RenderType::translucent) .register(); }); @@ -1236,7 +1236,7 @@ public class AllBlocks { .initialProperties(SharedProperties::wooden) .tag(AllBlockTags.BRITTLE.tag, AllBlockTags.SAFE_NBT.tag) .blockstate(new RedstoneLinkGenerator()::generate) - .addLayer(() -> RenderType::getCutoutMipped) + .addLayer(() -> RenderType::cutoutMipped) .item() .transform(customItemModel("_", "transmitter")) .register(); @@ -1255,7 +1255,7 @@ public class AllBlocks { REGISTRATE.block("pulse_repeater", PulseRepeaterBlock::new) .initialProperties(() -> Blocks.REPEATER) .blockstate(new PulseRepeaterGenerator()::generate) - .addLayer(() -> RenderType::getCutoutMipped) + .addLayer(() -> RenderType::cutoutMipped) .item() .transform(customItemModel("diodes", "pulse_repeater")) .register(); @@ -1275,7 +1275,7 @@ public class AllBlocks { .initialProperties(() -> Blocks.REPEATER) .tag(AllBlockTags.SAFE_NBT.tag) .blockstate(new AdjustableRepeaterGenerator()::generate) - .addLayer(() -> RenderType::getCutoutMipped) + .addLayer(() -> RenderType::cutoutMipped) .item() .model(AbstractDiodeGenerator.diodeItemModel(true)) .build() @@ -1285,7 +1285,7 @@ public class AllBlocks { REGISTRATE.block("powered_latch", PoweredLatchBlock::new) .initialProperties(() -> Blocks.REPEATER) .blockstate(new PoweredLatchGenerator()::generate) - .addLayer(() -> RenderType::getCutoutMipped) + .addLayer(() -> RenderType::cutoutMipped) .simpleItem() .register(); @@ -1293,7 +1293,7 @@ public class AllBlocks { REGISTRATE.block("powered_toggle_latch", ToggleLatchBlock::new) .initialProperties(() -> Blocks.REPEATER) .blockstate(new ToggleLatchGenerator()::generate) - .addLayer(() -> RenderType::getCutoutMipped) + .addLayer(() -> RenderType::cutoutMipped) .item() .transform(customItemModel("diodes", "latch_off")) .register(); @@ -1303,7 +1303,7 @@ public class AllBlocks { .initialProperties(() -> Blocks.LECTERN) .blockstate((c,p) -> p.horizontalBlock(c.get(), p.models() .getExistingFile(p.mcLoc("block/lectern")))) - .loot((lt, block) -> lt.registerDropping(block, Blocks.LECTERN)) + .loot((lt, block) -> lt.dropOther(block, Blocks.LECTERN)) .register(); @@ -1317,20 +1317,20 @@ public class AllBlocks { REGISTRATE.block("copper_backtank", CopperBacktankBlock::new) .initialProperties(SharedProperties::softMetal) .blockstate((c, p) -> p.horizontalBlock(c.getEntry(), AssetLookup.partialBaseModel(c, p))) - .addLayer(() -> RenderType::getCutoutMipped) + .addLayer(() -> RenderType::cutoutMipped) .transform(StressConfigDefaults.setImpact(4.0)) .loot((lt, block) -> { - Builder builder = LootTable.builder(); - IBuilder survivesExplosion = SurvivesExplosion.builder(); - lt.registerLootTable(block, builder.addLootPool(LootPool.builder() - .acceptCondition(survivesExplosion) - .rolls(ConstantRange.of(1)) - .addEntry(ItemLootEntry.builder(AllItems.COPPER_BACKTANK.get()) - .acceptFunction(CopyName.builder(CopyName.Source.BLOCK_ENTITY)) - .acceptFunction(CopyNbt.func_215881_a(CopyNbt.Source.BLOCK_ENTITY) - .func_216056_a("Air", "Air")) - .acceptFunction(CopyNbt.func_215881_a(CopyNbt.Source.BLOCK_ENTITY) - .func_216056_a("Enchantments", "Enchantments"))))); + Builder builder = LootTable.lootTable(); + IBuilder survivesExplosion = SurvivesExplosion.survivesExplosion(); + lt.add(block, builder.withPool(LootPool.lootPool() + .when(survivesExplosion) + .setRolls(ConstantRange.exactly(1)) + .add(ItemLootEntry.lootTableItem(AllItems.COPPER_BACKTANK.get()) + .apply(CopyName.copyName(CopyName.Source.BLOCK_ENTITY)) + .apply(CopyNbt.copyData(CopyNbt.Source.BLOCK_ENTITY) + .copy("Air", "Air")) + .apply(CopyNbt.copyData(CopyNbt.Source.BLOCK_ENTITY) + .copy("Enchantments", "Enchantments"))))); }) .register(); diff --git a/src/main/java/com/simibubi/create/AllEntityTypes.java b/src/main/java/com/simibubi/create/AllEntityTypes.java index 0b763e565..c67800ab2 100644 --- a/src/main/java/com/simibubi/create/AllEntityTypes.java +++ b/src/main/java/com/simibubi/create/AllEntityTypes.java @@ -72,7 +72,7 @@ public class AllEntityTypes { .properties(propertyBuilder) .properties(b -> { if (immuneToFire) - b.immuneToFire(); + b.fireImmune(); }) .renderer(renderer); } diff --git a/src/main/java/com/simibubi/create/AllFluids.java b/src/main/java/com/simibubi/create/AllFluids.java index 12a881022..d2b208839 100644 --- a/src/main/java/com/simibubi/create/AllFluids.java +++ b/src/main/java/com/simibubi/create/AllFluids.java @@ -23,6 +23,8 @@ import net.minecraftforge.common.Tags; import net.minecraftforge.fluids.FluidAttributes; import net.minecraftforge.fluids.ForgeFlowingFluid; +import net.minecraftforge.fluids.FluidAttributes.Builder; + public class AllFluids { private static final CreateRegistrate REGISTRATE = Create.registrate(); @@ -53,7 +55,7 @@ public class AllFluids { .explosionResistance(100f)) .tag(AllFluidTags.HONEY.tag) .bucket() - .properties(p -> p.maxStackSize(1)) + .properties(p -> p.stacksTo(1)) .build() .register(); @@ -68,7 +70,7 @@ public class AllFluids { .slopeFindDistance(3) .explosionResistance(100f)) .bucket() - .properties(p -> p.maxStackSize(1)) + .properties(p -> p.stacksTo(1)) .build() .register(); @@ -82,18 +84,18 @@ public class AllFluids { @OnlyIn(Dist.CLIENT) private static void makeTranslucent(FluidEntry entry) { ForgeFlowingFluid fluid = entry.get(); - RenderTypeLookup.setRenderLayer(fluid, RenderType.getTranslucent()); - RenderTypeLookup.setRenderLayer(fluid.getStillFluid(), RenderType.getTranslucent()); + RenderTypeLookup.setRenderLayer(fluid, RenderType.translucent()); + RenderTypeLookup.setRenderLayer(fluid.getSource(), RenderType.translucent()); } @Nullable public static BlockState getLavaInteraction(FluidState fluidState) { - Fluid fluid = fluidState.getFluid(); - if (fluid.isEquivalentTo(HONEY.get())) + Fluid fluid = fluidState.getType(); + if (fluid.isSame(HONEY.get())) return fluidState.isSource() ? AllPaletteBlocks.LIMESTONE.getDefaultState() : AllPaletteBlocks.LIMESTONE_VARIANTS.registeredBlocks.get(0) .getDefaultState(); - if (fluid.isEquivalentTo(CHOCOLATE.get())) + if (fluid.isSame(CHOCOLATE.get())) return fluidState.isSource() ? AllPaletteBlocks.SCORIA.getDefaultState() : AllPaletteBlocks.SCORIA_VARIANTS.registeredBlocks.get(0) .getDefaultState(); diff --git a/src/main/java/com/simibubi/create/AllItems.java b/src/main/java/com/simibubi/create/AllItems.java index 8e7c0bea4..37ed1b9d6 100644 --- a/src/main/java/com/simibubi/create/AllItems.java +++ b/src/main/java/com/simibubi/create/AllItems.java @@ -108,33 +108,33 @@ public class AllItems { .register(); public static final ItemEntry BAR_OF_CHOCOLATE = REGISTRATE.item("bar_of_chocolate", Item::new) - .properties(p -> p.food(new Food.Builder().hunger(6) - .saturation(0.3F) + .properties(p -> p.food(new Food.Builder().nutrition(6) + .saturationMod(0.3F) .build())) .lang("Bar of Chocolate") .register(); public static final ItemEntry SWEET_ROLL = REGISTRATE.item("sweet_roll", Item::new) - .properties(p -> p.food(new Food.Builder().hunger(6) - .saturation(0.8F) + .properties(p -> p.food(new Food.Builder().nutrition(6) + .saturationMod(0.8F) .build())) .register(); public static final ItemEntry CHOCOLATE_BERRIES = REGISTRATE.item("chocolate_glazed_berries", Item::new) - .properties(p -> p.food(new Food.Builder().hunger(7) - .saturation(0.8F) + .properties(p -> p.food(new Food.Builder().nutrition(7) + .saturationMod(0.8F) .build())) .register(); public static final ItemEntry HONEYED_APPLE = REGISTRATE.item("honeyed_apple", Item::new) - .properties(p -> p.food(new Food.Builder().hunger(8) - .saturation(0.8F) + .properties(p -> p.food(new Food.Builder().nutrition(8) + .saturationMod(0.8F) .build())) .register(); public static final ItemEntry BUILDERS_TEA = REGISTRATE.item("builders_tea", BuildersTeaItem::new) .tag(AllItemTags.UPRIGHT_ON_BELT.tag) - .properties(p -> p.maxStackSize(16)) + .properties(p -> p.stacksTo(16)) .lang("Builder's Tea") .register(); @@ -203,7 +203,7 @@ public class AllItems { .register(); public static final ItemEntry GOGGLES = REGISTRATE.item("goggles", GogglesItem::new) - .properties(p -> p.maxStackSize(1)) + .properties(p -> p.stacksTo(1)) .onRegister(CreateRegistrate.itemModel(() -> GogglesModel::new)) .lang("Engineer's Goggles") .register(); @@ -229,7 +229,7 @@ public class AllItems { .register(); public static final ItemEntry WRENCH = REGISTRATE.item("wrench", WrenchItem::new) - .properties(p -> p.maxStackSize(1)) + .properties(p -> p.stacksTo(1)) .transform(CreateRegistrate.customRenderedItem(() -> WrenchModel::new)) .model(AssetLookup.itemModelWithPartials()) .register(); @@ -254,14 +254,14 @@ public class AllItems { public static final ItemEntry LINKED_CONTROLLER = REGISTRATE.item("linked_controller", LinkedControllerItem::new) - .properties(p -> p.maxStackSize(1)) + .properties(p -> p.stacksTo(1)) .transform(CreateRegistrate.customRenderedItem(() -> LinkedControllerModel::new)) .model(AssetLookup.itemModelWithPartials()) .register(); public static final ItemEntry POTATO_CANNON = REGISTRATE.item("potato_cannon", PotatoCannonItem::new) - .properties(p -> p.maxStackSize(1)) + .properties(p -> p.stacksTo(1)) .transform(CreateRegistrate.customRenderedItem(() -> PotatoCannonModel::new)) .model(AssetLookup.itemModelWithPartials()) .register(); @@ -325,16 +325,16 @@ public class AllItems { } public static final ItemEntry EMPTY_SCHEMATIC = REGISTRATE.item("empty_schematic", Item::new) - .properties(p -> p.maxStackSize(1)) + .properties(p -> p.stacksTo(1)) .register(); public static final ItemEntry SCHEMATIC_AND_QUILL = REGISTRATE.item("schematic_and_quill", SchematicAndQuillItem::new) - .properties(p -> p.maxStackSize(1)) + .properties(p -> p.stacksTo(1)) .register(); public static final ItemEntry SCHEMATIC = REGISTRATE.item("schematic", SchematicItem::new) - .properties(p -> p.maxStackSize(1)) + .properties(p -> p.stacksTo(1)) .register(); // Shortcuts diff --git a/src/main/java/com/simibubi/create/AllKeys.java b/src/main/java/com/simibubi/create/AllKeys.java index 3877f1026..6253094c1 100644 --- a/src/main/java/com/simibubi/create/AllKeys.java +++ b/src/main/java/com/simibubi/create/AllKeys.java @@ -42,24 +42,24 @@ public enum AllKeys { public boolean isPressed() { if (!modifiable) return isKeyDown(key); - return keybind.isKeyDown(); + return keybind.isDown(); } public String getBoundKey() { - return keybind.getBoundKeyLocalizedText() + return keybind.getTranslatedKeyMessage() .getString() .toUpperCase(); } public int getBoundCode() { return keybind.getKey() - .getKeyCode(); + .getValue(); } public static boolean isKeyDown(int key) { return GLFW.glfwGetKey(Minecraft.getInstance() .getWindow() - .getHandle(), key) != 0; + .getWindow(), key) != 0; } public static boolean ctrlDown() { diff --git a/src/main/java/com/simibubi/create/AllParticleTypes.java b/src/main/java/com/simibubi/create/AllParticleTypes.java index a7cd1df79..d2ceade86 100644 --- a/src/main/java/com/simibubi/create/AllParticleTypes.java +++ b/src/main/java/com/simibubi/create/AllParticleTypes.java @@ -54,7 +54,7 @@ public enum AllParticleTypes { @OnlyIn(Dist.CLIENT) public static void registerFactories(ParticleFactoryRegisterEvent event) { - ParticleManager particles = Minecraft.getInstance().particles; + ParticleManager particles = Minecraft.getInstance().particleEngine; for (AllParticleTypes particle : values()) particle.entry.registerFactory(particles); } diff --git a/src/main/java/com/simibubi/create/AllRecipeTypes.java b/src/main/java/com/simibubi/create/AllRecipeTypes.java index d3731470c..d88471657 100644 --- a/src/main/java/com/simibubi/create/AllRecipeTypes.java +++ b/src/main/java/com/simibubi/create/AllRecipeTypes.java @@ -101,6 +101,6 @@ public enum AllRecipeTypes { public > Optional find(C inv, World world) { return world.getRecipeManager() - .getRecipe(getType(), inv, world); + .getRecipeFor(getType(), inv, world); } } diff --git a/src/main/java/com/simibubi/create/AllShapes.java b/src/main/java/com/simibubi/create/AllShapes.java index af45533cf..234676ad0 100644 --- a/src/main/java/com/simibubi/create/AllShapes.java +++ b/src/main/java/com/simibubi/create/AllShapes.java @@ -123,9 +123,9 @@ public class AllShapes { // Internally Shared Shapes private static final VoxelShape - PISTON_HEAD = Blocks.PISTON_HEAD.getDefaultState() - .with(DirectionalBlock.FACING, UP) - .with(PistonHeadBlock.SHORT, true) + PISTON_HEAD = Blocks.PISTON_HEAD.defaultBlockState() + .setValue(DirectionalBlock.FACING, UP) + .setValue(PistonHeadBlock.SHORT, true) .getShape(null, null), PISTON_EXTENDED = shape(CASING_12PX.get(UP)).add(FOUR_VOXEL_POLE.get(Axis.Y)) .build(), @@ -159,7 +159,7 @@ public class AllShapes { HEATER_BLOCK_SPECIAL_COLLISION_SHAPE = shape(0, 0, 0, 16, 4, 16).build(), CRUSHING_WHEEL_COLLISION_SHAPE = cuboid(0, 0, 0, 16, 16, 16), SEAT = cuboid(0, 0, 0, 16, 8, 16), SEAT_COLLISION = cuboid(0, 0, 0, 16, 6, 16), - MECHANICAL_PROCESSOR_SHAPE = shape(VoxelShapes.fullCube()).erase(4, 0, 4, 12, 16, 12) + MECHANICAL_PROCESSOR_SHAPE = shape(VoxelShapes.block()).erase(4, 0, 4, 12, 16, 12) .build(), TURNTABLE_SHAPE = shape(1, 4, 1, 15, 8, 15).add(5, 0, 5, 11, 4, 11) .build(), @@ -237,7 +237,7 @@ public class AllShapes { } private static VoxelShape cuboid(double x1, double y1, double z1, double x2, double y2, double z2) { - return Block.makeCuboidShape(x1, y1, z1, x2, y2, z2); + return Block.box(x1, y1, z1, x2, y2, z2); } public static class Builder { @@ -258,7 +258,7 @@ public class AllShapes { public Builder erase(double x1, double y1, double z1, double x2, double y2, double z2) { this.shape = - VoxelShapes.combineAndSimplify(shape, cuboid(x1, y1, z1, x2, y2, z2), IBooleanFunction.ONLY_FIRST); + VoxelShapes.join(shape, cuboid(x1, y1, z1, x2, y2, z2), IBooleanFunction.ONLY_FIRST); return this; } diff --git a/src/main/java/com/simibubi/create/AllSoundEvents.java b/src/main/java/com/simibubi/create/AllSoundEvents.java index 8b2f07adf..062ceb94a 100644 --- a/src/main/java/com/simibubi/create/AllSoundEvents.java +++ b/src/main/java/com/simibubi/create/AllSoundEvents.java @@ -37,78 +37,78 @@ public class AllSoundEvents { public static final SoundEntry SCHEMATICANNON_LAUNCH_BLOCK = create("schematicannon_launch_block").subtitle("Schematicannon fires") - .playExisting(SoundEvents.ENTITY_GENERIC_EXPLODE, .1f, 1.1f) + .playExisting(SoundEvents.GENERIC_EXPLODE, .1f, 1.1f) .category(SoundCategory.BLOCKS) .build(), SCHEMATICANNON_FINISH = create("schematicannon_finish").subtitle("Schematicannon dings") - .playExisting(SoundEvents.BLOCK_NOTE_BLOCK_BELL, 1, .7f) + .playExisting(SoundEvents.NOTE_BLOCK_BELL, 1, .7f) .category(SoundCategory.BLOCKS) .build(), DEPOT_SLIDE = create("depot_slide").subtitle("Item slides") - .playExisting(SoundEvents.BLOCK_SAND_BREAK, .125f, 1.5f) + .playExisting(SoundEvents.SAND_BREAK, .125f, 1.5f) .category(SoundCategory.BLOCKS) .build(), DEPOT_PLOP = create("depot_plop").subtitle("Item lands") - .playExisting(SoundEvents.ENTITY_ITEM_FRAME_ADD_ITEM, .25f, 1.25f) + .playExisting(SoundEvents.ITEM_FRAME_ADD_ITEM, .25f, 1.25f) .category(SoundCategory.BLOCKS) .build(), FUNNEL_FLAP = create("funnel_flap").subtitle("Funnel Flaps") - .playExisting(SoundEvents.ENTITY_ITEM_FRAME_ROTATE_ITEM, .125f, 1.5f) - .playExisting(SoundEvents.BLOCK_WOOL_BREAK, .0425f, .75f) + .playExisting(SoundEvents.ITEM_FRAME_ROTATE_ITEM, .125f, 1.5f) + .playExisting(SoundEvents.WOOL_BREAK, .0425f, .75f) .category(SoundCategory.BLOCKS) .build(), SLIME_ADDED = create("slime_added").subtitle("Slime squishes") - .playExisting(SoundEvents.BLOCK_SLIME_BLOCK_PLACE) + .playExisting(SoundEvents.SLIME_BLOCK_PLACE) .category(SoundCategory.BLOCKS) .build(), MECHANICAL_PRESS_ACTIVATION = create("mechanical_press_activation").subtitle("Mechanical Press clangs") - .playExisting(SoundEvents.BLOCK_ANVIL_LAND, .125f, 1f) - .playExisting(SoundEvents.ENTITY_ITEM_BREAK, .5f, 1f) + .playExisting(SoundEvents.ANVIL_LAND, .125f, 1f) + .playExisting(SoundEvents.ITEM_BREAK, .5f, 1f) .category(SoundCategory.BLOCKS) .build(), MECHANICAL_PRESS_ACTIVATION_ON_BELT = create("mechanical_press_activation_belt").subtitle("Mechanical Press bonks") - .playExisting(SoundEvents.BLOCK_WOOL_HIT, .75f, 1f) - .playExisting(SoundEvents.ENTITY_ITEM_BREAK, .15f, .75f) + .playExisting(SoundEvents.WOOL_HIT, .75f, 1f) + .playExisting(SoundEvents.ITEM_BREAK, .15f, .75f) .category(SoundCategory.BLOCKS) .build(), MIXING = create("mixing").subtitle("Mixing Noises") - .playExisting(SoundEvents.BLOCK_GILDED_BLACKSTONE_BREAK, .125f, .5f) - .playExisting(SoundEvents.BLOCK_NETHERRACK_BREAK, .125f, .5f) + .playExisting(SoundEvents.GILDED_BLACKSTONE_BREAK, .125f, .5f) + .playExisting(SoundEvents.NETHERRACK_BREAK, .125f, .5f) .category(SoundCategory.BLOCKS) .build(), CRANKING = create("cranking").subtitle("Hand Crank turns") - .playExisting(SoundEvents.BLOCK_WOOD_PLACE, .075f, .5f) - .playExisting(SoundEvents.BLOCK_WOODEN_BUTTON_CLICK_OFF, .025f, .5f) + .playExisting(SoundEvents.WOOD_PLACE, .075f, .5f) + .playExisting(SoundEvents.WOODEN_BUTTON_CLICK_OFF, .025f, .5f) .category(SoundCategory.BLOCKS) .build(), WORLDSHAPER_PLACE = create("worldshaper_place").subtitle("Worldshaper zaps") - .playExisting(SoundEvents.BLOCK_NOTE_BLOCK_BASEDRUM) + .playExisting(SoundEvents.NOTE_BLOCK_BASEDRUM) .category(SoundCategory.PLAYERS) .build(), SCROLL_VALUE = create("scroll_value").subtitle("Scroll-input clicks") - .playExisting(SoundEvents.BLOCK_NOTE_BLOCK_HAT, .124f, 1f) + .playExisting(SoundEvents.NOTE_BLOCK_HAT, .124f, 1f) .category(SoundCategory.PLAYERS) .build(), CONFIRM = create("confirm").subtitle("Affirmative ding") - .playExisting(SoundEvents.BLOCK_NOTE_BLOCK_BELL, 0.5f, 0.8f) + .playExisting(SoundEvents.NOTE_BLOCK_BELL, 0.5f, 0.8f) .category(SoundCategory.PLAYERS) .build(), DENY = create("deny").subtitle("Declining boop") - .playExisting(SoundEvents.BLOCK_NOTE_BLOCK_BASS, 1f, 0.5f) + .playExisting(SoundEvents.NOTE_BLOCK_BASS, 1f, 0.5f) .category(SoundCategory.PLAYERS) .build(), @@ -121,46 +121,46 @@ public class AllSoundEvents { .build(), POTATO_HIT = create("potato_hit").subtitle("Vegetable impacts") - .playExisting(SoundEvents.ENTITY_ITEM_FRAME_BREAK, .75f, .75f) - .playExisting(SoundEvents.BLOCK_WEEPING_VINES_BREAK, .75f, 1.25f) + .playExisting(SoundEvents.ITEM_FRAME_BREAK, .75f, .75f) + .playExisting(SoundEvents.WEEPING_VINES_BREAK, .75f, 1.25f) .category(SoundCategory.PLAYERS) .build(), CONTRAPTION_ASSEMBLE = create("contraption_assemble").subtitle("Contraption moves") - .playExisting(SoundEvents.BLOCK_WOODEN_TRAPDOOR_OPEN, .5f, .5f) - .playExisting(SoundEvents.BLOCK_CHEST_OPEN, .045f, .74f) + .playExisting(SoundEvents.WOODEN_TRAPDOOR_OPEN, .5f, .5f) + .playExisting(SoundEvents.CHEST_OPEN, .045f, .74f) .category(SoundCategory.BLOCKS) .build(), CONTRAPTION_DISASSEMBLE = create("contraption_disassemble").subtitle("Contraption stops") - .playExisting(SoundEvents.BLOCK_IRON_TRAPDOOR_CLOSE, .35f, .75f) + .playExisting(SoundEvents.IRON_TRAPDOOR_CLOSE, .35f, .75f) .category(SoundCategory.BLOCKS) .build(), WRENCH_ROTATE = create("wrench_rotate").subtitle("Wrench used") - .playExisting(SoundEvents.BLOCK_WOODEN_TRAPDOOR_CLOSE, .25f, 1.25f) + .playExisting(SoundEvents.WOODEN_TRAPDOOR_CLOSE, .25f, 1.25f) .category(SoundCategory.BLOCKS) .build(), WRENCH_REMOVE = create("wrench_remove").subtitle("Component breaks") - .playExisting(SoundEvents.ENTITY_ITEM_PICKUP, .25f, .75f) - .playExisting(SoundEvents.BLOCK_NETHERITE_BLOCK_HIT, .25f, .75f) + .playExisting(SoundEvents.ITEM_PICKUP, .25f, .75f) + .playExisting(SoundEvents.NETHERITE_BLOCK_HIT, .25f, .75f) .category(SoundCategory.BLOCKS) .build(), CRAFTER_CLICK = create("crafter_click").subtitle("Crafter clicks") - .playExisting(SoundEvents.BLOCK_NETHERITE_BLOCK_HIT, .25f, 1) - .playExisting(SoundEvents.BLOCK_WOODEN_TRAPDOOR_OPEN, .125f, 1) + .playExisting(SoundEvents.NETHERITE_BLOCK_HIT, .25f, 1) + .playExisting(SoundEvents.WOODEN_TRAPDOOR_OPEN, .125f, 1) .category(SoundCategory.BLOCKS) .build(), CRAFTER_CRAFT = create("crafter_craft").subtitle("Crafter crafts") - .playExisting(SoundEvents.ENTITY_ITEM_BREAK, .125f, .75f) + .playExisting(SoundEvents.ITEM_BREAK, .125f, .75f) .category(SoundCategory.BLOCKS) .build(), COPPER_ARMOR_EQUIP = create("copper_armor_equip").subtitle("Diving equipment clinks") - .playExisting(SoundEvents.ITEM_ARMOR_EQUIP_GOLD, 1f, 1f) + .playExisting(SoundEvents.ARMOR_EQUIP_GOLD, 1f, 1f) .category(SoundCategory.PLAYERS) .build(), @@ -170,22 +170,22 @@ public class AllSoundEvents { .build(), CONTROLLER_CLICK = create("controller_click").subtitle("Controller clicks") - .playExisting(SoundEvents.ENTITY_ITEM_FRAME_ADD_ITEM, .35f, 1f) + .playExisting(SoundEvents.ITEM_FRAME_ADD_ITEM, .35f, 1f) .category(SoundCategory.BLOCKS) .build(), CONTROLLER_PUT = create("controller_put").subtitle("Controller thumps") - .playExisting(SoundEvents.ITEM_BOOK_PUT, 1f, 1f) + .playExisting(SoundEvents.BOOK_PUT, 1f, 1f) .category(SoundCategory.BLOCKS) .build(), CONTROLLER_TAKE = create("controller_take").subtitle("Lectern empties") - .playExisting(SoundEvents.ENTITY_ITEM_FRAME_REMOVE_ITEM, 1f, 1f) + .playExisting(SoundEvents.ITEM_FRAME_REMOVE_ITEM, 1f, 1f) .category(SoundCategory.BLOCKS) .build(), SAW_ACTIVATE_WOOD = create("saw_activate_wood").subtitle("Mechanical Saw activates") - .playExisting(SoundEvents.ENTITY_BOAT_PADDLE_LAND, .75f, 1.5f) + .playExisting(SoundEvents.BOAT_PADDLE_LAND, .75f, 1.5f) .category(SoundCategory.BLOCKS) .build(), @@ -195,27 +195,27 @@ public class AllSoundEvents { .build(), BLAZE_MUNCH = create("blaze_munch").subtitle("Blaze Burner munches") - .playExisting(SoundEvents.ENTITY_GENERIC_EAT, .5f, 1f) + .playExisting(SoundEvents.GENERIC_EAT, .5f, 1f) .category(SoundCategory.BLOCKS) .build(), CRUSHING_1 = create("crushing_1").subtitle("Crushing noises") - .playExisting(SoundEvents.BLOCK_NETHERRACK_HIT) + .playExisting(SoundEvents.NETHERRACK_HIT) .category(SoundCategory.BLOCKS) .build(), CRUSHING_2 = create("crushing_2").noSubtitle() - .playExisting(SoundEvents.BLOCK_GRAVEL_PLACE) + .playExisting(SoundEvents.GRAVEL_PLACE) .category(SoundCategory.BLOCKS) .build(), CRUSHING_3 = create("crushing_3").noSubtitle() - .playExisting(SoundEvents.BLOCK_NETHERITE_BLOCK_BREAK) + .playExisting(SoundEvents.NETHERITE_BLOCK_BREAK) .category(SoundCategory.BLOCKS) .build(), PECULIAR_BELL_USE = create("peculiar_bell_use").subtitle("Peculiar Bell tolls") - .playExisting(SoundEvents.BLOCK_BELL_USE) + .playExisting(SoundEvents.BELL_BLOCK) .category(SoundCategory.BLOCKS) .build(), @@ -273,7 +273,7 @@ public class AllSoundEvents { } @Override - public void act(DirectoryCache cache) throws IOException { + public void run(DirectoryCache cache) throws IOException { generate(generator.getOutputFolder(), cache); } @@ -409,7 +409,7 @@ public class AllSoundEvents { public void playFrom(Entity entity, float volume, float pitch) { if (!entity.isSilent()) - play(entity.world, null, entity.getBlockPos(), volume, pitch); + play(entity.level, null, entity.blockPosition(), volume, pitch); } public void play(World world, PlayerEntity entity, BlockPos pos, float volume, float pitch) { @@ -417,7 +417,7 @@ public class AllSoundEvents { } public void play(World world, PlayerEntity entity, Vector3d pos, float volume, float pitch) { - play(world, entity, pos.getX(), pos.getY(), pos.getZ(), volume, pitch); + play(world, entity, pos.x(), pos.y(), pos.z(), volume, pitch); } public abstract void play(World world, PlayerEntity entity, double x, double y, double z, float volume, float pitch); @@ -427,7 +427,7 @@ public class AllSoundEvents { } public void playAt(World world, Vector3d pos, float volume, float pitch, boolean fade) { - playAt(world, pos.getX(), pos.getY(), pos.getZ(), volume, pitch, fade); + playAt(world, pos.x(), pos.y(), pos.z(), volume, pitch, fade); } public abstract void playAt(World world, double x, double y, double z, float volume, float pitch, boolean fade); @@ -480,7 +480,7 @@ public class AllSoundEvents { JsonArray list = new JsonArray(); JsonObject s = new JsonObject(); s.addProperty("name", pair.getFirst() - .getName() + .getLocation() .toString()); s.addProperty("type", "event"); list.add(s); @@ -504,7 +504,7 @@ public class AllSoundEvents { public void playAt(World world, double x, double y, double z, float volume, float pitch, boolean fade) { for (Pair> pair : compiledEvents) { Couple volPitch = pair.getSecond(); - world.playSound(x, y, z, pair.getFirst(), category, volPitch.getFirst() * volume, + world.playLocalSound(x, y, z, pair.getFirst(), category, volPitch.getFirst() * volume, volPitch.getSecond() * pitch, fade); } } @@ -551,7 +551,7 @@ public class AllSoundEvents { @Override public void playAt(World world, double x, double y, double z, float volume, float pitch, boolean fade) { - world.playSound(x, y, z, event, category, volume, pitch, fade); + world.playLocalSound(x, y, z, event, category, volume, pitch, fade); } } diff --git a/src/main/java/com/simibubi/create/AllSpecialTextures.java b/src/main/java/com/simibubi/create/AllSpecialTextures.java index 786dde9be..3f0826421 100644 --- a/src/main/java/com/simibubi/create/AllSpecialTextures.java +++ b/src/main/java/com/simibubi/create/AllSpecialTextures.java @@ -24,7 +24,7 @@ public enum AllSpecialTextures { public void bind() { Minecraft.getInstance() .getTextureManager() - .bindTexture(location); + .bind(location); } public ResourceLocation getLocation() { diff --git a/src/main/java/com/simibubi/create/AllSpriteShifts.java b/src/main/java/com/simibubi/create/AllSpriteShifts.java index e2c943f9f..94ba43b41 100644 --- a/src/main/java/com/simibubi/create/AllSpriteShifts.java +++ b/src/main/java/com/simibubi/create/AllSpriteShifts.java @@ -83,7 +83,7 @@ public class AllSpriteShifts { WoodType.CRIMSON, WoodType.WARPED }; Arrays.stream(supportedWoodTypes) - .forEach(woodType -> WOODEN_WINDOWS.put(woodType, vertical("palettes/" + woodType.getName() + "_window"))); + .forEach(woodType -> WOODEN_WINDOWS.put(woodType, vertical("palettes/" + woodType.name() + "_window"))); for (PaletteStoneVariants paletteStoneVariants : PaletteStoneVariants.values()) { String variantName = Lang.asId(paletteStoneVariants.name()); @@ -98,7 +98,7 @@ public class AllSpriteShifts { } for (DyeColor color : DyeColor.values()) { - String id = color.getString(); + String id = color.getSerializedName(); DYED_BELTS.put(color, SpriteShifter.get("block/belt", "block/belt/" + id + "_scroll")); DYED_OFFSET_BELTS.put(color, SpriteShifter.get("block/belt_offset", "block/belt/" + id + "_scroll")); DYED_DIAGONAL_BELTS.put(color, diff --git a/src/main/java/com/simibubi/create/AllTags.java b/src/main/java/com/simibubi/create/AllTags.java index 2fa0b7294..a3542f906 100644 --- a/src/main/java/com/simibubi/create/AllTags.java +++ b/src/main/java/com/simibubi/create/AllTags.java @@ -41,15 +41,15 @@ public class AllTags { } public static ITag.INamedTag forgeBlockTag(String name) { - return forgeTag(BlockTags::makeWrapperTag, name); + return forgeTag(BlockTags::bind, name); } public static ITag.INamedTag forgeItemTag(String name) { - return forgeTag(ItemTags::makeWrapperTag, name); + return forgeTag(ItemTags::bind, name); } public static ITag.INamedTag forgeFluidTag(String name) { - return forgeTag(FluidTags::makeWrapperTag, name); + return forgeTag(FluidTags::bind, name); } public static ITag.INamedTag forgeTag(Function> wrapperFactory, String name) { @@ -95,9 +95,9 @@ public class AllTags { } private AllItemTags(NameSpace namespace, String path) { - tag = ItemTags.makeWrapperTag( + tag = ItemTags.bind( new ResourceLocation(namespace.id, (path.isEmpty() ? "" : path + "/") + Lang.asId(name())).toString()); - REGISTRATE.addDataGenerator(ProviderType.ITEM_TAGS, prov -> prov.getOrCreateTagBuilder(tag)); + REGISTRATE.addDataGenerator(ProviderType.ITEM_TAGS, prov -> prov.tag(tag)); } public boolean matches(ItemStack stack) { @@ -105,12 +105,12 @@ public class AllTags { } public void add(Item... values) { - REGISTRATE.addDataGenerator(ProviderType.ITEM_TAGS, prov -> prov.getOrCreateTagBuilder(tag) + REGISTRATE.addDataGenerator(ProviderType.ITEM_TAGS, prov -> prov.tag(tag) .add(values)); } public void includeIn(AllItemTags parent) { - REGISTRATE.addDataGenerator(ProviderType.ITEM_TAGS, prov -> prov.getOrCreateTagBuilder(parent.tag) + REGISTRATE.addDataGenerator(ProviderType.ITEM_TAGS, prov -> prov.tag(parent.tag) .addTag(tag)); } } @@ -137,7 +137,7 @@ public class AllTags { } public boolean matches(Fluid fluid) { - return fluid != null && fluid.isIn(tag); + return fluid != null && fluid.is(tag); } static void loadClass() {} @@ -173,8 +173,8 @@ public class AllTags { new ResourceLocation(namespace.id, (path.isEmpty() ? "" : path + "/") + Lang.asId(name())); if (ModList.get() .isLoaded(namespace.id)) { - tag = BlockTags.makeWrapperTag(id.toString()); - REGISTRATE.addDataGenerator(ProviderType.BLOCK_TAGS, prov -> prov.getOrCreateTagBuilder(tag)); + tag = BlockTags.bind(id.toString()); + REGISTRATE.addDataGenerator(ProviderType.BLOCK_TAGS, prov -> prov.tag(tag)); } else { tag = new EmptyNamedTag<>(id); } @@ -186,17 +186,17 @@ public class AllTags { } public void includeIn(AllBlockTags parent) { - REGISTRATE.addDataGenerator(ProviderType.BLOCK_TAGS, prov -> prov.getOrCreateTagBuilder(parent.tag) + REGISTRATE.addDataGenerator(ProviderType.BLOCK_TAGS, prov -> prov.tag(parent.tag) .addTag(tag)); } public void includeAll(ITag.INamedTag child) { - REGISTRATE.addDataGenerator(ProviderType.BLOCK_TAGS, prov -> prov.getOrCreateTagBuilder(tag) + REGISTRATE.addDataGenerator(ProviderType.BLOCK_TAGS, prov -> prov.tag(tag) .addTag(child)); } public void add(Block... values) { - REGISTRATE.addDataGenerator(ProviderType.BLOCK_TAGS, prov -> prov.getOrCreateTagBuilder(tag) + REGISTRATE.addDataGenerator(ProviderType.BLOCK_TAGS, prov -> prov.tag(tag) .add(values)); } } diff --git a/src/main/java/com/simibubi/create/CreateClient.java b/src/main/java/com/simibubi/create/CreateClient.java index 275c67b7d..f4aa5f356 100644 --- a/src/main/java/com/simibubi/create/CreateClient.java +++ b/src/main/java/com/simibubi/create/CreateClient.java @@ -110,7 +110,7 @@ public class CreateClient { IResourceManager resourceManager = Minecraft.getInstance() .getResourceManager(); if (resourceManager instanceof IReloadableResourceManager) - ((IReloadableResourceManager) resourceManager).addReloadListener(new ResourceReloadHandler()); + ((IReloadableResourceManager) resourceManager).registerReloadListener(new ResourceReloadHandler()); event.enqueueWork(() -> { CopperBacktankArmorLayer.register(); @@ -119,8 +119,8 @@ public class CreateClient { public static void onTextureStitch(TextureStitchEvent.Pre event) { if (!event.getMap() - .getId() - .equals(PlayerContainer.BLOCK_ATLAS_TEXTURE)) + .location() + .equals(PlayerContainer.BLOCK_ATLAS)) return; SpriteShifter.getAllTargetSprites() .forEach(event::addSprite); @@ -151,10 +151,10 @@ public class CreateClient { protected static List getAllBlockStateModelLocations(Block block) { List models = new ArrayList<>(); - block.getStateContainer() - .getValidStates() + block.getStateDefinition() + .getPossibleStates() .forEach(state -> { - models.add(getBlockModelLocation(block, BlockModelShapes.getPropertyMapString(state.getValues()))); + models.add(getBlockModelLocation(block, BlockModelShapes.statePropertiesToString(state.getValues()))); }); return models; } @@ -210,21 +210,21 @@ public class CreateClient { if (mc.player == null) return; - if (mc.gameSettings.graphicsMode != GraphicsFanciness.FABULOUS) + if (mc.options.graphicsMode != GraphicsFanciness.FABULOUS) return; if (AllConfigs.CLIENT.ignoreFabulousWarning.get()) return; - IFormattableTextComponent text = TextComponentUtils.bracketed(new StringTextComponent("WARN")) - .formatted(TextFormatting.GOLD) + IFormattableTextComponent text = TextComponentUtils.wrapInSquareBrackets(new StringTextComponent("WARN")) + .withStyle(TextFormatting.GOLD) .append(new StringTextComponent( " Some of Create's visual features will not be available while Fabulous graphics are enabled!")) - .styled(style -> style + .withStyle(style -> style .withClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/create dismissFabulousWarning")) .withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new StringTextComponent("Click here to disable this warning")))); - mc.ingameGUI.addChatMessage(ChatType.CHAT, text, mc.player.getUniqueID()); + mc.gui.handleChat(ChatType.CHAT, text, mc.player.getUUID()); } } diff --git a/src/main/java/com/simibubi/create/compat/dynamictrees/DynamicTree.java b/src/main/java/com/simibubi/create/compat/dynamictrees/DynamicTree.java index fa6463858..2238c7d76 100644 --- a/src/main/java/com/simibubi/create/compat/dynamictrees/DynamicTree.java +++ b/src/main/java/com/simibubi/create/compat/dynamictrees/DynamicTree.java @@ -35,13 +35,13 @@ public class DynamicTree extends AbstractBlockBreakQueue { return; // Play and render block break sound and particles - world.playEvent(null, 2001, startCutPos, Block.getStateId(world.getBlockState(startCutPos))); + world.levelEvent(null, 2001, startCutPos, Block.getId(world.getBlockState(startCutPos))); // Actually breaks the tree BranchDestructionData data = start.destroyBranchFromNode(world, startCutPos, Direction.DOWN, false, playerEntity); // Feed all the tree drops to drop bi-consumer - data.leavesDrops.forEach(stackPos -> drop.accept(stackPos.pos.add(startCutPos), stackPos.stack)); + data.leavesDrops.forEach(stackPos -> drop.accept(stackPos.pos.offset(startCutPos), stackPos.stack)); start.getLogDrops(world, startCutPos, data.species, data.woodVolume).forEach(stack -> drop.accept(startCutPos, stack)); } diff --git a/src/main/java/com/simibubi/create/compat/jei/ConversionRecipe.java b/src/main/java/com/simibubi/create/compat/jei/ConversionRecipe.java index c6d46653b..a59c356e1 100644 --- a/src/main/java/com/simibubi/create/compat/jei/ConversionRecipe.java +++ b/src/main/java/com/simibubi/create/compat/jei/ConversionRecipe.java @@ -25,7 +25,7 @@ public class ConversionRecipe extends ProcessingRecipe { public static ConversionRecipe create(ItemStack from, ItemStack to) { ResourceLocation recipeId = Create.asResource("conversion_" + counter++); return new ProcessingRecipeBuilder<>(ConversionRecipe::new, recipeId) - .withItemIngredients(Ingredient.fromStacks(from)) + .withItemIngredients(Ingredient.of(from)) .withSingleItemOutput(to) .build(); } diff --git a/src/main/java/com/simibubi/create/compat/jei/CreateJEI.java b/src/main/java/com/simibubi/create/compat/jei/CreateJEI.java index 498db0bc8..76b994322 100644 --- a/src/main/java/com/simibubi/create/compat/jei/CreateJEI.java +++ b/src/main/java/com/simibubi/create/compat/jei/CreateJEI.java @@ -127,7 +127,7 @@ public class CreateJEI implements IModPlugin { .build(), autoShapeless = register("automatic_shapeless", MixingCategory::autoShapeless) - .recipes(r -> r.getSerializer() == IRecipeSerializer.CRAFTING_SHAPELESS && r.getIngredients() + .recipes(r -> r.getSerializer() == IRecipeSerializer.SHAPELESS_RECIPE && r.getIngredients() .size() > 1 && !MechanicalPressTileEntity.canCompress(r.getIngredients()), BasinRecipe::convertShapeless) .catalyst(AllBlocks.MECHANICAL_MIXER::get) @@ -153,7 +153,7 @@ public class CreateJEI implements IModPlugin { woodCutting = register("wood_cutting", () -> new BlockCuttingCategory(Items.OAK_STAIRS)) .recipeList(() -> CondensedBlockCuttingRecipe - .condenseRecipes(findRecipesByType(SawTileEntity.woodcuttingRecipeType.getValue()))) + .condenseRecipes(findRecipesByType(SawTileEntity.woodcuttingRecipeType.get()))) .catalyst(AllBlocks.MECHANICAL_SAW::get) .enableWhenBool(c -> c.allowWoodcuttingOnSaw.get() && ModList.get() .isLoaded("druidcraft")) @@ -202,7 +202,7 @@ public class CreateJEI implements IModPlugin { .build(), autoShaped = register("automatic_shaped", MechanicalCraftingCategory::new) - .recipes(r -> r.getSerializer() == IRecipeSerializer.CRAFTING_SHAPELESS && r.getIngredients() + .recipes(r -> r.getSerializer() == IRecipeSerializer.SHAPELESS_RECIPE && r.getIngredients() .size() == 1) .recipes( r -> (r.getType() == IRecipeType.CRAFTING && r.getType() != AllRecipeTypes.MECHANICAL_CRAFTING.type) @@ -359,7 +359,7 @@ public class CreateJEI implements IModPlugin { } public static List> findRecipes(Predicate> predicate) { - return Minecraft.getInstance().world.getRecipeManager() + return Minecraft.getInstance().level.getRecipeManager() .getRecipes() .stream() .filter(predicate) @@ -396,7 +396,7 @@ public class CreateJEI implements IModPlugin { public static boolean doInputsMatch(IRecipe recipe1, IRecipe recipe2) { ItemStack[] matchingStacks = recipe1.getIngredients() .get(0) - .getMatchingStacks(); + .getItems(); if (matchingStacks.length == 0) return true; if (recipe2.getIngredients() diff --git a/src/main/java/com/simibubi/create/compat/jei/DoubleItemIcon.java b/src/main/java/com/simibubi/create/compat/jei/DoubleItemIcon.java index 9abd1c945..84ae49721 100644 --- a/src/main/java/com/simibubi/create/compat/jei/DoubleItemIcon.java +++ b/src/main/java/com/simibubi/create/compat/jei/DoubleItemIcon.java @@ -39,26 +39,26 @@ public class DoubleItemIcon implements IDrawable { secondaryStack = secondarySupplier.get(); } - RenderHelper.enable(); + RenderHelper.turnBackOn(); RenderSystem.color4f(1, 1, 1, 1); RenderSystem.enableDepthTest(); - matrixStack.push(); + matrixStack.pushPose(); matrixStack.translate(xOffset, yOffset, 0); - matrixStack.push(); + matrixStack.pushPose(); matrixStack.translate(1, 1, 0); GuiGameElement.of(primaryStack) .render(matrixStack); - matrixStack.pop(); + matrixStack.popPose(); - matrixStack.push(); + matrixStack.pushPose(); matrixStack.translate(10, 10, 100); matrixStack.scale(.5f, .5f, .5f); GuiGameElement.of(secondaryStack) .render(matrixStack); - matrixStack.pop(); + matrixStack.popPose(); - matrixStack.pop(); + matrixStack.popPose(); RenderSystem.enableBlend(); } diff --git a/src/main/java/com/simibubi/create/compat/jei/GhostIngredientHandler.java b/src/main/java/com/simibubi/create/compat/jei/GhostIngredientHandler.java index 7a1644dda..90646791f 100644 --- a/src/main/java/com/simibubi/create/compat/jei/GhostIngredientHandler.java +++ b/src/main/java/com/simibubi/create/compat/jei/GhostIngredientHandler.java @@ -17,6 +17,8 @@ import net.minecraft.client.renderer.Rectangle2d; import net.minecraft.inventory.container.Slot; import net.minecraft.item.ItemStack; +import mezz.jei.api.gui.handlers.IGhostIngredientHandler.Target; + @MethodsReturnNonnullByDefault @ParametersAreNonnullByDefault public class GhostIngredientHandler> @@ -28,7 +30,7 @@ public class GhostIngredientHandler> boolean isAttributeFilter = gui instanceof AttributeFilterScreen; if (ingredient instanceof ItemStack) { - for (int i = 36; i < gui.getContainer().inventorySlots.size(); i++) { + for (int i = 36; i < gui.getMenu().slots.size(); i++) { targets.add(new GhostTarget<>(gui, i - 36, isAttributeFilter)); // Only accept items in 1st slot. 2nd is used for functionality, don't wanna override that one @@ -61,8 +63,8 @@ public class GhostIngredientHandler> this.gui = gui; this.slotIndex = slotIndex; this.isAttributeFilter = isAttributeFilter; - Slot slot = gui.getContainer().inventorySlots.get(slotIndex + 36); - this.area = new Rectangle2d(gui.getGuiLeft() + slot.xPos, gui.getGuiTop() + slot.yPos, 16, 16); + Slot slot = gui.getMenu().slots.get(slotIndex + 36); + this.area = new Rectangle2d(gui.getGuiLeft() + slot.x, gui.getGuiTop() + slot.y, 16, 16); } @Override @@ -74,7 +76,7 @@ public class GhostIngredientHandler> public void accept(I ingredient) { ItemStack stack = ((ItemStack) ingredient).copy(); stack.setCount(1); - gui.getContainer().ghostInventory.setStackInSlot(slotIndex, stack); + gui.getMenu().ghostInventory.setStackInSlot(slotIndex, stack); if (isAttributeFilter) return; diff --git a/src/main/java/com/simibubi/create/compat/jei/ScreenResourceWrapper.java b/src/main/java/com/simibubi/create/compat/jei/ScreenResourceWrapper.java index 67e7ce970..a4f2989c5 100644 --- a/src/main/java/com/simibubi/create/compat/jei/ScreenResourceWrapper.java +++ b/src/main/java/com/simibubi/create/compat/jei/ScreenResourceWrapper.java @@ -27,7 +27,7 @@ public class ScreenResourceWrapper implements IDrawable { @Override public void draw(MatrixStack matrixStack, int xOffset, int yOffset) { resource.bind(); - AbstractGui.drawTexture(matrixStack, xOffset, yOffset, 0, resource.startX, resource.startY, resource.width, + AbstractGui.blit(matrixStack, xOffset, yOffset, 0, resource.startX, resource.startY, resource.width, resource.height, 256, 256); } diff --git a/src/main/java/com/simibubi/create/compat/jei/category/BasinCategory.java b/src/main/java/com/simibubi/create/compat/jei/category/BasinCategory.java index 32526f37f..60bd73223 100644 --- a/src/main/java/com/simibubi/create/compat/jei/category/BasinCategory.java +++ b/src/main/java/com/simibubi/create/compat/jei/category/BasinCategory.java @@ -51,9 +51,9 @@ public class BasinCategory extends CreateRecipeCategory { HeatCondition requiredHeat = recipe.getRequiredHeat(); if (!requiredHeat.testBlazeBurner(HeatLevel.NONE)) - itemIngredients.add(Ingredient.fromItems(AllBlocks.BLAZE_BURNER.get())); + itemIngredients.add(Ingredient.of(AllBlocks.BLAZE_BURNER.get())); if (!requiredHeat.testBlazeBurner(HeatLevel.KINDLED)) - itemIngredients.add(Ingredient.fromItems(AllItems.BLAZE_CAKE.get())); + itemIngredients.add(Ingredient.of(AllItems.BLAZE_CAKE.get())); ingredients.setInputIngredients(itemIngredients); ingredients.setInputLists(VanillaTypes.FLUID, recipe.getFluidIngredients() @@ -62,7 +62,7 @@ public class BasinCategory extends CreateRecipeCategory { .collect(Collectors.toList())); if (!recipe.getRollableResults() .isEmpty()) - ingredients.setOutput(VanillaTypes.ITEM, recipe.getRecipeOutput()); + ingredients.setOutput(VanillaTypes.ITEM, recipe.getResultItem()); if (!recipe.getFluidResults() .isEmpty()) ingredients.setOutputs(VanillaTypes.FLUID, recipe.getFluidResults()); @@ -97,7 +97,7 @@ public class BasinCategory extends CreateRecipeCategory { Ingredient ingredient = pair.getFirst(); MutableInt amount = pair.getSecond(); - for (ItemStack itemStack : ingredient.getMatchingStacks()) { + for (ItemStack itemStack : ingredient.getItems()) { ItemStack stack = itemStack.copy(); stack.setCount(amount.getValue()); stacks.add(stack); @@ -117,7 +117,7 @@ public class BasinCategory extends CreateRecipeCategory { if (!itemOutput.isEmpty()) { itemStacks.init(i, false, 141, 50 + yOffset); - itemStacks.set(i, recipe.getRecipeOutput() + itemStacks.set(i, recipe.getResultItem() .getStack()); yOffset -= 19; } @@ -165,7 +165,7 @@ public class BasinCategory extends CreateRecipeCategory { AllGuiTextures heatBar = noHeat ? AllGuiTextures.JEI_NO_HEAT_BAR : AllGuiTextures.JEI_HEAT_BAR; heatBar.draw(matrixStack, 4, 80); - Minecraft.getInstance().fontRenderer.draw(matrixStack, Lang.translate(requiredHeat.getTranslationKey()), 9, + Minecraft.getInstance().font.draw(matrixStack, Lang.translate(requiredHeat.getTranslationKey()), 9, 86, requiredHeat.getColor()); } diff --git a/src/main/java/com/simibubi/create/compat/jei/category/BlockCuttingCategory.java b/src/main/java/com/simibubi/create/compat/jei/category/BlockCuttingCategory.java index 2d1cfe9b7..95dd72956 100644 --- a/src/main/java/com/simibubi/create/compat/jei/category/BlockCuttingCategory.java +++ b/src/main/java/com/simibubi/create/compat/jei/category/BlockCuttingCategory.java @@ -45,7 +45,7 @@ public class BlockCuttingCategory extends CreateRecipeCategory> results = recipe.getCondensedOutputs(); for (int outputIndex = 0; outputIndex < results.size(); outputIndex++) { @@ -110,19 +110,19 @@ public class BlockCuttingCategory extends CreateRecipeCategory> implements IRec float chance = output.getChance(); if (chance != 1) tooltip.add(1, Lang.translate("recipe.processing.chance", chance < 0.01 ? "<1" : (int) (chance * 100)) - .formatted(TextFormatting.GOLD)); + .withStyle(TextFormatting.GOLD)); }); } @@ -138,7 +138,7 @@ public abstract class CreateRecipeCategory> implements IRec return; if (fluid.getFluid() - .isEquivalentTo(AllFluids.POTION.get())) { + .isSame(AllFluids.POTION.get())) { ITextComponent name = fluid.getDisplayName(); if (tooltip.isEmpty()) tooltip.add(0, name); @@ -152,7 +152,7 @@ public abstract class CreateRecipeCategory> implements IRec } int amount = amounts.get(index != -1 ? 0 : slotIndex); - ITextComponent text = (Lang.translate("generic.unit.millibuckets", amount)).formatted(TextFormatting.GOLD); + ITextComponent text = (Lang.translate("generic.unit.millibuckets", amount)).withStyle(TextFormatting.GOLD); if (tooltip.isEmpty()) tooltip.add(0, text); else { diff --git a/src/main/java/com/simibubi/create/compat/jei/category/CrushingCategory.java b/src/main/java/com/simibubi/create/compat/jei/category/CrushingCategory.java index 6d8fab965..794b43cfd 100644 --- a/src/main/java/com/simibubi/create/compat/jei/category/CrushingCategory.java +++ b/src/main/java/com/simibubi/create/compat/jei/category/CrushingCategory.java @@ -41,7 +41,7 @@ public class CrushingCategory extends CreateRecipeCategory results = recipe.getRollableResults(); int size = results.size(); diff --git a/src/main/java/com/simibubi/create/compat/jei/category/DeployingCategory.java b/src/main/java/com/simibubi/create/compat/jei/category/DeployingCategory.java index d3d6c6d3e..ce0a0748b 100644 --- a/src/main/java/com/simibubi/create/compat/jei/category/DeployingCategory.java +++ b/src/main/java/com/simibubi/create/compat/jei/category/DeployingCategory.java @@ -39,7 +39,7 @@ public class DeployingCategory extends CreateRecipeCategory @Override public void renderAttachedBlock(MatrixStack matrixStack) { - GuiGameElement.of(Blocks.FIRE.getDefaultState()) + GuiGameElement.of(Blocks.FIRE.defaultBlockState()) .scale(24) .atLocal(0, 0, 2) .render(matrixStack); diff --git a/src/main/java/com/simibubi/create/compat/jei/category/FanWashingCategory.java b/src/main/java/com/simibubi/create/compat/jei/category/FanWashingCategory.java index d6bb5a96d..939071a61 100644 --- a/src/main/java/com/simibubi/create/compat/jei/category/FanWashingCategory.java +++ b/src/main/java/com/simibubi/create/compat/jei/category/FanWashingCategory.java @@ -40,7 +40,7 @@ public class FanWashingCategory extends ProcessingViaFanCategory results = recipe.getRollableResults(); boolean single = results.size() == 1; @@ -86,14 +86,14 @@ public class FanWashingCategory extends ProcessingViaFanCategory { .forEach(stack -> { if (stack.getItem() instanceof PotionItem) { FluidStack fluidFromPotionItem = PotionFluidHandler.getFluidFromPotionItem(stack); - Ingredient potion = Ingredient.fromStacks(stack); + Ingredient potion = Ingredient.of(stack); recipes.add(new ProcessingRecipeBuilder<>(EmptyingRecipe::new, Create.asResource("potions")) .withItemIngredients(potion) .withFluidOutputs(fluidFromPotionItem) @@ -71,7 +71,7 @@ public class ItemDrainCategory extends CreateRecipeCategory { if (extracted.isEmpty()) return; - Ingredient ingredient = Ingredient.fromStacks(stack); + Ingredient ingredient = Ingredient.of(stack); ResourceLocation itemName = stack.getItem() .getRegistryName(); ResourceLocation fluidName = extracted.getFluid() @@ -99,7 +99,7 @@ public class ItemDrainCategory extends CreateRecipeCategory { if (!recipe.getRollableResults() .isEmpty()) - ingredients.setOutput(VanillaTypes.ITEM, recipe.getRecipeOutput()); + ingredients.setOutput(VanillaTypes.ITEM, recipe.getResultItem()); if (!recipe.getFluidResults() .isEmpty()) ingredients.setOutputs(VanillaTypes.FLUID, recipe.getFluidResults()); @@ -112,14 +112,14 @@ public class ItemDrainCategory extends CreateRecipeCategory { FluidStack fluidOutput = recipe.getResultingFluid(); List matchingIngredients = Arrays.asList(recipe.getIngredients() .get(0) - .getMatchingStacks()); + .getItems()); fluidStacks.init(0, true, 132, 8); fluidStacks.set(0, withImprovedVisibility(fluidOutput)); itemStacks.init(0, true, 26, 7); itemStacks.set(0, matchingIngredients); itemStacks.init(1, false, 131, 26); - itemStacks.set(1, recipe.getRecipeOutput()); + itemStacks.set(1, recipe.getResultItem()); addFluidTooltip(fluidStacks, Collections.emptyList(), ImmutableList.of(fluidOutput)); } diff --git a/src/main/java/com/simibubi/create/compat/jei/category/MechanicalCraftingCategory.java b/src/main/java/com/simibubi/create/compat/jei/category/MechanicalCraftingCategory.java index 86febc77d..545184839 100644 --- a/src/main/java/com/simibubi/create/compat/jei/category/MechanicalCraftingCategory.java +++ b/src/main/java/com/simibubi/create/compat/jei/category/MechanicalCraftingCategory.java @@ -41,7 +41,7 @@ public class MechanicalCraftingCategory extends CreateRecipeCategory recipeIngredients = recipe.getIngredients(); itemStacks.init(0, false, 133, 80); - itemStacks.set(0, recipe.getRecipeOutput() + itemStacks.set(0, recipe.getResultItem() .getStack()); int x = getXPadding(recipe); @@ -66,7 +66,7 @@ public class MechanicalCraftingCategory extends CreateRecipeCategory list = new ArrayList<>(); TranslationTextComponent crash = new TranslationTextComponent("jei.tooltip.error.crash"); - list.add(crash.formatted(TextFormatting.RED)); + list.add(crash.withStyle(TextFormatting.RED)); return list; } } diff --git a/src/main/java/com/simibubi/create/compat/jei/category/MillingCategory.java b/src/main/java/com/simibubi/create/compat/jei/category/MillingCategory.java index ddd53ff55..fda2f0e9b 100644 --- a/src/main/java/com/simibubi/create/compat/jei/category/MillingCategory.java +++ b/src/main/java/com/simibubi/create/compat/jei/category/MillingCategory.java @@ -41,7 +41,7 @@ public class MillingCategory extends CreateRecipeCategory results = recipe.getRollableResults(); boolean single = results.size() == 1; diff --git a/src/main/java/com/simibubi/create/compat/jei/category/MysteriousItemConversionCategory.java b/src/main/java/com/simibubi/create/compat/jei/category/MysteriousItemConversionCategory.java index 079191032..86332537c 100644 --- a/src/main/java/com/simibubi/create/compat/jei/category/MysteriousItemConversionCategory.java +++ b/src/main/java/com/simibubi/create/compat/jei/category/MysteriousItemConversionCategory.java @@ -47,7 +47,7 @@ public class MysteriousItemConversionCategory extends CreateRecipeCategory results = recipe.getRollableResults(); itemStacks.init(0, true, 26, 16); - itemStacks.set(0, Arrays.asList(recipe.getIngredients().get(0).getMatchingStacks())); + itemStacks.set(0, Arrays.asList(recipe.getIngredients().get(0).getItems())); itemStacks.init(1, false, 131, 16); itemStacks.set(1, results.get(0).getStack()); } diff --git a/src/main/java/com/simibubi/create/compat/jei/category/PackingCategory.java b/src/main/java/com/simibubi/create/compat/jei/category/PackingCategory.java index 2dcdce197..1e44ef274 100644 --- a/src/main/java/com/simibubi/create/compat/jei/category/PackingCategory.java +++ b/src/main/java/com/simibubi/create/compat/jei/category/PackingCategory.java @@ -55,12 +55,12 @@ public class PackingCategory extends BasinCategory { while (i < size) { Ingredient ingredient = ingredients2.get(i); itemStacks.init(i, true, (rows == 2 ? 26 : 17) + (i % rows) * 19, 50 - (i / rows) * 19); - itemStacks.set(i, Arrays.asList(ingredient.getMatchingStacks())); + itemStacks.set(i, Arrays.asList(ingredient.getItems())); i++; } itemStacks.init(i, false, 141, 50); - itemStacks.set(i, recipe.getRecipeOutput()); + itemStacks.set(i, recipe.getResultItem()); } @Override diff --git a/src/main/java/com/simibubi/create/compat/jei/category/PolishingCategory.java b/src/main/java/com/simibubi/create/compat/jei/category/PolishingCategory.java index 99a5cbaf0..e3e2a461d 100644 --- a/src/main/java/com/simibubi/create/compat/jei/category/PolishingCategory.java +++ b/src/main/java/com/simibubi/create/compat/jei/category/PolishingCategory.java @@ -47,7 +47,7 @@ public class PolishingCategory extends CreateRecipeCategory ingredients = recipe.getIngredients(); ItemStack[] matchingStacks = ingredients.get(0) - .getMatchingStacks(); + .getItems(); if (matchingStacks.length == 0) return; diff --git a/src/main/java/com/simibubi/create/compat/jei/category/PressingCategory.java b/src/main/java/com/simibubi/create/compat/jei/category/PressingCategory.java index fbd9d0656..ac32b8c5c 100644 --- a/src/main/java/com/simibubi/create/compat/jei/category/PressingCategory.java +++ b/src/main/java/com/simibubi/create/compat/jei/category/PressingCategory.java @@ -41,7 +41,7 @@ public class PressingCategory extends CreateRecipeCategory { itemStacks.init(0, true, 26, 50); itemStacks.set(0, Arrays.asList(recipe.getIngredients() .get(0) - .getMatchingStacks())); + .getItems())); List results = recipe.getRollableResults(); for (int outputIndex = 0; outputIndex < results.size(); outputIndex++) { diff --git a/src/main/java/com/simibubi/create/compat/jei/category/ProcessingViaFanCategory.java b/src/main/java/com/simibubi/create/compat/jei/category/ProcessingViaFanCategory.java index ace3e71e2..b8c27e694 100644 --- a/src/main/java/com/simibubi/create/compat/jei/category/ProcessingViaFanCategory.java +++ b/src/main/java/com/simibubi/create/compat/jei/category/ProcessingViaFanCategory.java @@ -35,12 +35,12 @@ public abstract class ProcessingViaFanCategory> extends Cre @Override public void setIngredients(T recipe, IIngredients ingredients) { ingredients.setInputIngredients(recipe.getIngredients()); - ingredients.setOutput(VanillaTypes.ITEM, recipe.getRecipeOutput()); + ingredients.setOutput(VanillaTypes.ITEM, recipe.getResultItem()); } public static Supplier getFan(String name) { return () -> AllBlocks.ENCASED_FAN.asStack() - .setDisplayName(Lang.translate("recipe." + name + ".fan").styled(style -> style.withItalic(false))); + .setHoverName(Lang.translate("recipe." + name + ".fan").withStyle(style -> style.withItalic(false))); } @Override @@ -49,10 +49,10 @@ public abstract class ProcessingViaFanCategory> extends Cre itemStacks.init(0, true, 20, 47); itemStacks.set(0, Arrays.asList(recipe.getIngredients() .get(0) - .getMatchingStacks())); + .getItems())); itemStacks.init(1, false, 139, 47); - itemStacks.set(1, recipe.getRecipeOutput()); + itemStacks.set(1, recipe.getResultItem()); } protected void renderWidgets(MatrixStack matrixStack, T recipe, double mouseX, double mouseY) { @@ -69,10 +69,10 @@ public abstract class ProcessingViaFanCategory> extends Cre return; renderWidgets(matrixStack, recipe, mouseX, mouseY); - matrixStack.push(); + matrixStack.pushPose(); translateFan(matrixStack); - matrixStack.multiply(Vector3f.POSITIVE_X.getDegreesQuaternion(-12.5f)); - matrixStack.multiply(Vector3f.POSITIVE_Y.getDegreesQuaternion(22.5f)); + matrixStack.mulPose(Vector3f.XP.rotationDegrees(-12.5f)); + matrixStack.mulPose(Vector3f.YP.rotationDegrees(22.5f)); int scale = 24; GuiGameElement.of(AllBlockPartials.ENCASED_FAN_INNER) @@ -89,7 +89,7 @@ public abstract class ProcessingViaFanCategory> extends Cre .render(matrixStack); renderAttachedBlock(matrixStack); - matrixStack.pop(); + matrixStack.popPose(); } protected void translateFan(MatrixStack matrixStack) { diff --git a/src/main/java/com/simibubi/create/compat/jei/category/SawingCategory.java b/src/main/java/com/simibubi/create/compat/jei/category/SawingCategory.java index 61f88da28..83a6275e4 100644 --- a/src/main/java/com/simibubi/create/compat/jei/category/SawingCategory.java +++ b/src/main/java/com/simibubi/create/compat/jei/category/SawingCategory.java @@ -41,7 +41,7 @@ public class SawingCategory extends CreateRecipeCategory { itemStacks.init(0, true, 43, 4); itemStacks.set(0, Arrays.asList(recipe.getIngredients() .get(0) - .getMatchingStacks())); + .getItems())); List results = recipe.getRollableResults(); for (int outputIndex = 0; outputIndex < results.size(); outputIndex++) { diff --git a/src/main/java/com/simibubi/create/compat/jei/category/SequencedAssemblyCategory.java b/src/main/java/com/simibubi/create/compat/jei/category/SequencedAssemblyCategory.java index a15d9b477..74a81570f 100644 --- a/src/main/java/com/simibubi/create/compat/jei/category/SequencedAssemblyCategory.java +++ b/src/main/java/com/simibubi/create/compat/jei/category/SequencedAssemblyCategory.java @@ -58,7 +58,7 @@ public class SequencedAssemblyCategory extends CreateRecipeCategory 1) { - matrixStack.push(); + matrixStack.pushPose(); matrixStack.translate(15, 9, 0); RenderSystem.color4f(.65f, .65f, .65f, 1); AllIcons.I_REFRESH.draw(matrixStack, 50 + xOffset, 75); RenderSystem.color4f(1, 1, 1, 1); ITextComponent repeat = new StringTextComponent("x" + recipe.getLoops()); font.draw(matrixStack, repeat, 66 + xOffset, 80, 0x888888); - matrixStack.pop(); + matrixStack.popPose(); } - matrixStack.pop(); + matrixStack.popPose(); int width = 0; int margin = 3; @@ -162,18 +162,18 @@ public class SequencedAssemblyCategory extends CreateRecipeCategory> sequence = recipe.getSequence(); for (int i = 0; i < sequence.size(); i++) { SequencedRecipe sequencedRecipe = sequence.get(i); SequencedAssemblySubCategory subCategory = getSubCategory(sequencedRecipe); int subWidth = subCategory.getWidth(); StringTextComponent component = new StringTextComponent("" + romans[Math.min(i, 6)]); - font.draw(matrixStack, component, font.getWidth(component) / -2 + subWidth / 2, 2, 0x888888); + font.draw(matrixStack, component, font.width(component) / -2 + subWidth / 2, 2, 0x888888); subCategory.draw(sequencedRecipe, matrixStack, mouseX, mouseY, i); matrixStack.translate(subWidth + margin, 0, 0); } - matrixStack.pop(); + matrixStack.popPose(); } @Override @@ -194,7 +194,7 @@ public class SequencedAssemblyCategory extends CreateRecipeCategory getAllItemIngredients(SequencedAssemblyRecipe recipe) { List assemblyIngredients = new ArrayList<>(); assemblyIngredients.add(recipe.getIngredient()); - assemblyIngredients.add(Ingredient.fromStacks(recipe.getTransitionalItem())); + assemblyIngredients.add(Ingredient.of(recipe.getTransitionalItem())); recipe.addAdditionalIngredientsAndMachines(assemblyIngredients); return assemblyIngredients; } diff --git a/src/main/java/com/simibubi/create/compat/jei/category/SpoutCategory.java b/src/main/java/com/simibubi/create/compat/jei/category/SpoutCategory.java index 0c965b5c6..dd9f16238 100644 --- a/src/main/java/com/simibubi/create/compat/jei/category/SpoutCategory.java +++ b/src/main/java/com/simibubi/create/compat/jei/category/SpoutCategory.java @@ -52,7 +52,7 @@ public class SpoutCategory extends CreateRecipeCategory { .forEach(stack -> { if (stack.getItem() instanceof PotionItem) { FluidStack fluidFromPotionItem = PotionFluidHandler.getFluidFromPotionItem(stack); - Ingredient bottle = Ingredient.fromItems(Items.GLASS_BOTTLE); + Ingredient bottle = Ingredient.of(Items.GLASS_BOTTLE); recipes.add(new ProcessingRecipeBuilder<>(FillingRecipe::new, Create.asResource("potions")) .withItemIngredients(bottle) .withFluidIngredients(FluidIngredient.fromFluidStack(fluidFromPotionItem)) @@ -78,12 +78,12 @@ public class SpoutCategory extends CreateRecipeCategory { fluidCopy.setAmount(1000); fhi.fill(fluidCopy, FluidAction.EXECUTE); ItemStack container = fhi.getContainer(); - if (container.isItemEqual(copy)) + if (container.sameItem(copy)) return; if (container.isEmpty()) return; - Ingredient bucket = Ingredient.fromStacks(stack); + Ingredient bucket = Ingredient.of(stack); ResourceLocation itemName = stack.getItem() .getRegistryName(); ResourceLocation fluidName = fluidCopy.getFluid() @@ -117,7 +117,7 @@ public class SpoutCategory extends CreateRecipeCategory { if (!recipe.getRollableResults() .isEmpty()) - ingredients.setOutput(VanillaTypes.ITEM, recipe.getRecipeOutput()); + ingredients.setOutput(VanillaTypes.ITEM, recipe.getResultItem()); if (!recipe.getFluidResults() .isEmpty()) ingredients.setOutputs(VanillaTypes.FLUID, recipe.getFluidResults()); @@ -130,14 +130,14 @@ public class SpoutCategory extends CreateRecipeCategory { FluidIngredient fluidIngredient = recipe.getRequiredFluid(); List matchingIngredients = Arrays.asList(recipe.getIngredients() .get(0) - .getMatchingStacks()); + .getItems()); fluidStacks.init(0, true, 27, 32); fluidStacks.set(0, withImprovedVisibility(fluidIngredient.getMatchingFluidStacks())); itemStacks.init(0, true, 26, 50); itemStacks.set(0, matchingIngredients); itemStacks.init(1, false, 131, 50); - itemStacks.set(1, recipe.getRecipeOutput()); + itemStacks.set(1, recipe.getResultItem()); addFluidTooltip(fluidStacks, ImmutableList.of(fluidIngredient), Collections.emptyList()); } diff --git a/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedBlazeBurner.java b/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedBlazeBurner.java index 6757ced6d..7a0bcd91d 100644 --- a/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedBlazeBurner.java +++ b/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedBlazeBurner.java @@ -20,10 +20,10 @@ public class AnimatedBlazeBurner extends AnimatedKinetics { } public void draw(MatrixStack matrixStack, int xOffset, int yOffset) { - matrixStack.push(); + matrixStack.pushPose(); matrixStack.translate(xOffset, yOffset, 200); - matrixStack.multiply(Vector3f.POSITIVE_X.getDegreesQuaternion(-15.5f)); - matrixStack.multiply(Vector3f.POSITIVE_Y.getDegreesQuaternion(22.5f)); + matrixStack.mulPose(Vector3f.XP.rotationDegrees(-15.5f)); + matrixStack.mulPose(Vector3f.YP.rotationDegrees(22.5f)); int scale = 23; defaultBlockElement(AllBlocks.BLAZE_BURNER.getDefaultState()) @@ -39,7 +39,7 @@ public class AnimatedBlazeBurner extends AnimatedKinetics { .scale(scale) .render(matrixStack); - matrixStack.pop(); + matrixStack.popPose(); } } diff --git a/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedCrafter.java b/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedCrafter.java index 525558289..2fc1b195d 100644 --- a/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedCrafter.java +++ b/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedCrafter.java @@ -9,7 +9,7 @@ public class AnimatedCrafter extends AnimatedKinetics { @Override public void draw(MatrixStack matrixStack, int xOffset, int yOffset) { - matrixStack.push(); + matrixStack.pushPose(); matrixStack.translate(xOffset, yOffset, 0); AllGuiTextures.JEI_SHADOW.draw(matrixStack, -16, 13); @@ -29,7 +29,7 @@ public class AnimatedCrafter extends AnimatedKinetics { .scale(scale) .render(matrixStack); - matrixStack.pop(); + matrixStack.popPose(); } } diff --git a/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedCrushingWheels.java b/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedCrushingWheels.java index eecc33882..d4f0f7e7f 100644 --- a/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedCrushingWheels.java +++ b/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedCrushingWheels.java @@ -11,13 +11,13 @@ import net.minecraft.util.math.vector.Vector3f; public class AnimatedCrushingWheels extends AnimatedKinetics { private final BlockState wheel = AllBlocks.CRUSHING_WHEEL.getDefaultState() - .with(BlockStateProperties.AXIS, Axis.X); + .setValue(BlockStateProperties.AXIS, Axis.X); @Override public void draw(MatrixStack matrixStack, int xOffset, int yOffset) { - matrixStack.push(); + matrixStack.pushPose(); matrixStack.translate(xOffset, yOffset, 100); - matrixStack.multiply(Vector3f.POSITIVE_Y.getDegreesQuaternion(-22.5f)); + matrixStack.mulPose(Vector3f.YP.rotationDegrees(-22.5f)); int scale = 22; defaultBlockElement(wheel) @@ -31,7 +31,7 @@ public class AnimatedCrushingWheels extends AnimatedKinetics { .scale(scale) .render(matrixStack); - matrixStack.pop(); + matrixStack.popPose(); } } diff --git a/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedDeployer.java b/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedDeployer.java index 8e5faedab..a1fe3e741 100644 --- a/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedDeployer.java +++ b/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedDeployer.java @@ -14,10 +14,10 @@ public class AnimatedDeployer extends AnimatedKinetics { @Override public void draw(MatrixStack matrixStack, int xOffset, int yOffset) { - matrixStack.push(); + matrixStack.pushPose(); matrixStack.translate(xOffset, yOffset, 100); - matrixStack.multiply(Vector3f.POSITIVE_X.getDegreesQuaternion(-15.5f)); - matrixStack.multiply(Vector3f.POSITIVE_Y.getDegreesQuaternion(22.5f)); + matrixStack.mulPose(Vector3f.XP.rotationDegrees(-15.5f)); + matrixStack.mulPose(Vector3f.YP.rotationDegrees(22.5f)); int scale = 20; defaultBlockElement(shaft(Axis.Z)) @@ -26,15 +26,15 @@ public class AnimatedDeployer extends AnimatedKinetics { .render(matrixStack); defaultBlockElement(AllBlocks.DEPLOYER.getDefaultState() - .with(DeployerBlock.FACING, Direction.DOWN) - .with(DeployerBlock.AXIS_ALONG_FIRST_COORDINATE, false)) + .setValue(DeployerBlock.FACING, Direction.DOWN) + .setValue(DeployerBlock.AXIS_ALONG_FIRST_COORDINATE, false)) .scale(scale) .render(matrixStack); float cycle = (AnimationTickHolder.getRenderTime() - offset * 8) % 30; float offset = cycle < 10 ? cycle / 10f : cycle < 20 ? (20 - cycle) / 10f : 0; - matrixStack.push(); + matrixStack.pushPose(); matrixStack.translate(0, offset * 17, 0); defaultBlockElement(AllBlockPartials.DEPLOYER_POLE) @@ -46,14 +46,14 @@ public class AnimatedDeployer extends AnimatedKinetics { .scale(scale) .render(matrixStack); - matrixStack.pop(); + matrixStack.popPose(); defaultBlockElement(AllBlocks.DEPOT.getDefaultState()) .atLocal(0, 2, 0) .scale(scale) .render(matrixStack); - matrixStack.pop(); + matrixStack.popPose(); } } diff --git a/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedItemDrain.java b/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedItemDrain.java index 7bb1e0126..1b792cdbb 100644 --- a/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedItemDrain.java +++ b/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedItemDrain.java @@ -21,10 +21,10 @@ public class AnimatedItemDrain extends AnimatedKinetics { @Override public void draw(MatrixStack matrixStack, int xOffset, int yOffset) { - matrixStack.push(); + matrixStack.pushPose(); matrixStack.translate(xOffset, yOffset, 100); - matrixStack.multiply(Vector3f.POSITIVE_X.getDegreesQuaternion(-15.5f)); - matrixStack.multiply(Vector3f.POSITIVE_Y.getDegreesQuaternion(22.5f)); + matrixStack.mulPose(Vector3f.XP.rotationDegrees(-15.5f)); + matrixStack.mulPose(Vector3f.YP.rotationDegrees(22.5f)); int scale = 20; defaultBlockElement(AllBlocks.ITEM_DRAIN.getDefaultState()) @@ -32,14 +32,14 @@ public class AnimatedItemDrain extends AnimatedKinetics { .render(matrixStack); Impl buffer = IRenderTypeBuffer.immediate(Tessellator.getInstance() - .getBuffer()); + .getBuilder()); MatrixStack ms = new MatrixStack(); ms.scale(scale, -scale, scale); float from = 2/16f; float to = 1f - from; FluidRenderer.renderTiledFluidBB(fluid, from, from, from, to, 3/4f, to, buffer, ms, 0xF000F0, false); - buffer.draw(); + buffer.endBatch(); - matrixStack.pop(); + matrixStack.popPose(); } } diff --git a/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedKinetics.java b/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedKinetics.java index a07c37fd8..d41bdccec 100644 --- a/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedKinetics.java +++ b/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedKinetics.java @@ -27,7 +27,7 @@ public abstract class AnimatedKinetics implements IDrawable { } protected BlockState shaft(Axis axis) { - return AllBlocks.SHAFT.getDefaultState().with(BlockStateProperties.AXIS, axis); + return AllBlocks.SHAFT.getDefaultState().setValue(BlockStateProperties.AXIS, axis); } protected PartialModel cogwheel() { diff --git a/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedMillstone.java b/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedMillstone.java index 147d9b2c4..8bd4827bf 100644 --- a/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedMillstone.java +++ b/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedMillstone.java @@ -9,7 +9,7 @@ public class AnimatedMillstone extends AnimatedKinetics { @Override public void draw(MatrixStack matrixStack, int xOffset, int yOffset) { - matrixStack.push(); + matrixStack.pushPose(); matrixStack.translate(xOffset, yOffset, 0); AllGuiTextures.JEI_SHADOW.draw(matrixStack, -16, 13); matrixStack.translate(-2, 18, 0); @@ -25,7 +25,7 @@ public class AnimatedMillstone extends AnimatedKinetics { .scale(scale) .render(matrixStack); - matrixStack.pop(); + matrixStack.popPose(); } } diff --git a/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedMixer.java b/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedMixer.java index 05f9b806e..ec24775ef 100644 --- a/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedMixer.java +++ b/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedMixer.java @@ -12,10 +12,10 @@ public class AnimatedMixer extends AnimatedKinetics { @Override public void draw(MatrixStack matrixStack, int xOffset, int yOffset) { - matrixStack.push(); + matrixStack.pushPose(); matrixStack.translate(xOffset, yOffset, 200); - matrixStack.multiply(Vector3f.POSITIVE_X.getDegreesQuaternion(-15.5f)); - matrixStack.multiply(Vector3f.POSITIVE_Y.getDegreesQuaternion(22.5f)); + matrixStack.mulPose(Vector3f.XP.rotationDegrees(-15.5f)); + matrixStack.mulPose(Vector3f.YP.rotationDegrees(22.5f)); int scale = 23; defaultBlockElement(cogwheel()) @@ -47,7 +47,7 @@ public class AnimatedMixer extends AnimatedKinetics { .scale(scale) .render(matrixStack); - matrixStack.pop(); + matrixStack.popPose(); } } diff --git a/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedPress.java b/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedPress.java index 7f1b7dca0..98414e0da 100644 --- a/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedPress.java +++ b/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedPress.java @@ -18,10 +18,10 @@ public class AnimatedPress extends AnimatedKinetics { @Override public void draw(MatrixStack matrixStack, int xOffset, int yOffset) { - matrixStack.push(); + matrixStack.pushPose(); matrixStack.translate(xOffset, yOffset, 100); - matrixStack.multiply(Vector3f.POSITIVE_X.getDegreesQuaternion(-15.5f)); - matrixStack.multiply(Vector3f.POSITIVE_Y.getDegreesQuaternion(22.5f)); + matrixStack.mulPose(Vector3f.XP.rotationDegrees(-15.5f)); + matrixStack.mulPose(Vector3f.YP.rotationDegrees(22.5f)); int scale = basin ? 20 : 24; defaultBlockElement(shaft(Axis.Z)) @@ -44,7 +44,7 @@ public class AnimatedPress extends AnimatedKinetics { .scale(scale) .render(matrixStack); - matrixStack.pop(); + matrixStack.popPose(); } private float getAnimatedHeadOffset() { diff --git a/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedSaw.java b/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedSaw.java index 1b051efd3..a2f17a740 100644 --- a/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedSaw.java +++ b/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedSaw.java @@ -13,12 +13,12 @@ public class AnimatedSaw extends AnimatedKinetics { @Override public void draw(MatrixStack matrixStack, int xOffset, int yOffset) { - matrixStack.push(); + matrixStack.pushPose(); matrixStack.translate(xOffset, yOffset, 0); matrixStack.translate(0, 0, 200); matrixStack.translate(2, 22, 0); - matrixStack.multiply(Vector3f.POSITIVE_X.getDegreesQuaternion(-15.5f)); - matrixStack.multiply(Vector3f.POSITIVE_Y.getDegreesQuaternion(22.5f + 90)); + matrixStack.mulPose(Vector3f.XP.rotationDegrees(-15.5f)); + matrixStack.mulPose(Vector3f.YP.rotationDegrees(22.5f + 90)); int scale = 25; defaultBlockElement(shaft(Axis.X)) @@ -27,7 +27,7 @@ public class AnimatedSaw extends AnimatedKinetics { .render(matrixStack); defaultBlockElement(AllBlocks.MECHANICAL_SAW.getDefaultState() - .with(SawBlock.FACING, Direction.UP)) + .setValue(SawBlock.FACING, Direction.UP)) .rotateBlock(0, 0, 0) .scale(scale) .render(matrixStack); @@ -37,7 +37,7 @@ public class AnimatedSaw extends AnimatedKinetics { .scale(scale) .render(matrixStack); - matrixStack.pop(); + matrixStack.popPose(); } } diff --git a/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedSpout.java b/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedSpout.java index 6d812aab3..94ee2df86 100644 --- a/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedSpout.java +++ b/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedSpout.java @@ -26,10 +26,10 @@ public class AnimatedSpout extends AnimatedKinetics { @Override public void draw(MatrixStack matrixStack, int xOffset, int yOffset) { - matrixStack.push(); + matrixStack.pushPose(); matrixStack.translate(xOffset, yOffset, 100); - matrixStack.multiply(Vector3f.POSITIVE_X.getDegreesQuaternion(-15.5f)); - matrixStack.multiply(Vector3f.POSITIVE_Y.getDegreesQuaternion(22.5f)); + matrixStack.mulPose(Vector3f.XP.rotationDegrees(-15.5f)); + matrixStack.mulPose(Vector3f.YP.rotationDegrees(22.5f)); int scale = 20; defaultBlockElement(AllBlocks.SPOUT.getDefaultState()) @@ -40,7 +40,7 @@ public class AnimatedSpout extends AnimatedKinetics { float squeeze = cycle < 20 ? MathHelper.sin((float) (cycle / 20f * Math.PI)) : 0; squeeze *= 20; - matrixStack.push(); + matrixStack.pushPose(); defaultBlockElement(AllBlockPartials.SPOUT_TOP) .scale(scale) @@ -55,7 +55,7 @@ public class AnimatedSpout extends AnimatedKinetics { .render(matrixStack); matrixStack.translate(0, -3 * squeeze / 32f, 0); - matrixStack.pop(); + matrixStack.popPose(); defaultBlockElement(AllBlocks.DEPOT.getDefaultState()) .atLocal(0, 2, 0) @@ -63,13 +63,13 @@ public class AnimatedSpout extends AnimatedKinetics { .render(matrixStack); Impl buffer = IRenderTypeBuffer.immediate(Tessellator.getInstance() - .getBuffer()); - matrixStack.push(); + .getBuilder()); + matrixStack.pushPose(); matrixStack.scale(16, -16, 16); float from = 2/16f; float to = 1f - from; FluidRenderer.renderTiledFluidBB(fluids.get(0), from, from, from, to, to, to, buffer, matrixStack, 0xF000F0, false); - matrixStack.pop(); + matrixStack.popPose(); float width = 1 / 128f * squeeze; matrixStack.translate(scale / 2f, scale * 1.5f, scale / 2f); @@ -77,9 +77,9 @@ public class AnimatedSpout extends AnimatedKinetics { matrixStack.translate(-width / 2, 0, -width / 2); FluidRenderer.renderTiledFluidBB(fluids.get(0), 0, -0.001f, 0, width, 2.001f, width, buffer, matrixStack, 0xF000F0, false); - buffer.draw(); + buffer.endBatch(); - matrixStack.pop(); + matrixStack.popPose(); } } diff --git a/src/main/java/com/simibubi/create/compat/jei/category/sequencedAssembly/SequencedAssemblySubCategory.java b/src/main/java/com/simibubi/create/compat/jei/category/sequencedAssembly/SequencedAssemblySubCategory.java index 00f2784cb..99810a1e1 100644 --- a/src/main/java/com/simibubi/create/compat/jei/category/sequencedAssembly/SequencedAssemblySubCategory.java +++ b/src/main/java/com/simibubi/create/compat/jei/category/sequencedAssembly/SequencedAssemblySubCategory.java @@ -51,11 +51,11 @@ public abstract class SequencedAssemblySubCategory { @Override public void draw(SequencedRecipe recipe, MatrixStack ms, double mouseX, double mouseY, int index) { press.offset = index; - ms.push(); + ms.pushPose(); ms.translate(-5, 50, 0); ms.scale(.6f, .6f, .6f); press.draw(ms, getWidth() / 2, 0); - ms.pop(); + ms.popPose(); } } @@ -86,7 +86,7 @@ public abstract class SequencedAssemblySubCategory { public void draw(SequencedRecipe recipe, MatrixStack ms, double mouseX, double mouseY, int index) { spout.offset = index; AllGuiTextures.JEI_SLOT.draw(ms, 3, 14); - ms.push(); + ms.pushPose(); ms.translate(-7, 50, 0); ms.scale(.75f, .75f, .75f); spout.withFluids(recipe.getRecipe() @@ -94,7 +94,7 @@ public abstract class SequencedAssemblySubCategory { .get(0) .getMatchingFluidStacks()) .draw(ms, getWidth() / 2, 0); - ms.pop(); + ms.popPose(); } } @@ -114,18 +114,18 @@ public abstract class SequencedAssemblySubCategory { itemStacks.set(index, Arrays.asList(recipe.getRecipe() .getIngredients() .get(1) - .getMatchingStacks())); + .getItems())); return 1; } @Override public void draw(SequencedRecipe recipe, MatrixStack ms, double mouseX, double mouseY, int index) { deployer.offset = index; - ms.push(); + ms.pushPose(); ms.translate(-7, 50, 0); ms.scale(.75f, .75f, .75f); deployer.draw(ms, getWidth() / 2, 0); - ms.pop(); + ms.popPose(); AllGuiTextures.JEI_SLOT.draw(ms, 3, 14); } @@ -142,11 +142,11 @@ public abstract class SequencedAssemblySubCategory { @Override public void draw(SequencedRecipe recipe, MatrixStack ms, double mouseX, double mouseY, int index) { - ms.push(); + ms.pushPose(); ms.translate(0, 51.5f, 0); ms.scale(.6f, .6f, .6f); saw.draw(ms, getWidth() / 2, 30); - ms.pop(); + ms.popPose(); } } diff --git a/src/main/java/com/simibubi/create/content/CreateItemGroup.java b/src/main/java/com/simibubi/create/content/CreateItemGroup.java index e773d83b5..b36ce6945 100644 --- a/src/main/java/com/simibubi/create/content/CreateItemGroup.java +++ b/src/main/java/com/simibubi/create/content/CreateItemGroup.java @@ -19,7 +19,7 @@ public class CreateItemGroup extends CreateItemGroupBase { } @Override - public ItemStack createIcon() { + public ItemStack makeIcon() { return AllBlocks.COGWHEEL.asStack(); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/KineticDebugger.java b/src/main/java/com/simibubi/create/content/contraptions/KineticDebugger.java index 6876dd717..0a3fa7cbd 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/KineticDebugger.java +++ b/src/main/java/com/simibubi/create/content/contraptions/KineticDebugger.java @@ -37,23 +37,23 @@ public class KineticDebugger { if (te == null) return; - World world = Minecraft.getInstance().world; - BlockPos toOutline = te.hasSource() ? te.source : te.getPos(); + World world = Minecraft.getInstance().level; + BlockPos toOutline = te.hasSource() ? te.source : te.getBlockPos(); BlockState state = te.getBlockState(); VoxelShape shape = world.getBlockState(toOutline) - .getRenderShape(world, toOutline); + .getBlockSupportShape(world, toOutline); if (te.getTheoreticalSpeed() != 0 && !shape.isEmpty()) - CreateClient.OUTLINER.chaseAABB("kineticSource", shape.getBoundingBox() - .offset(toOutline)) + CreateClient.OUTLINER.chaseAABB("kineticSource", shape.bounds() + .move(toOutline)) .lineWidth(1 / 16f) .colored(te.hasSource() ? ColorHelper.colorFromLong(te.network) : 0xffcc00); if (state.getBlock() instanceof IRotate) { Axis axis = ((IRotate) state.getBlock()).getRotationAxis(state); - Vector3d vec = Vector3d.of(Direction.getFacingFromAxis(AxisDirection.POSITIVE, axis) - .getDirectionVec()); - Vector3d center = VecHelper.getCenterOf(te.getPos()); + Vector3d vec = Vector3d.atLowerCornerOf(Direction.get(AxisDirection.POSITIVE, axis) + .getNormal()); + Vector3d center = VecHelper.getCenterOf(te.getBlockPos()); CreateClient.OUTLINER.showLine("rotationAxis", center.add(vec), center.subtract(vec)) .lineWidth(1 / 16f); } @@ -61,12 +61,12 @@ public class KineticDebugger { } public static boolean isActive() { - return Minecraft.getInstance().gameSettings.showDebugInfo && AllConfigs.CLIENT.rainbowDebug.get(); + return Minecraft.getInstance().options.renderDebug && AllConfigs.CLIENT.rainbowDebug.get(); } public static KineticTileEntity getSelectedTE() { - RayTraceResult obj = Minecraft.getInstance().objectMouseOver; - ClientWorld world = Minecraft.getInstance().world; + RayTraceResult obj = Minecraft.getInstance().hitResult; + ClientWorld world = Minecraft.getInstance().level; if (obj == null) return null; if (world == null) @@ -75,7 +75,7 @@ public class KineticDebugger { return null; BlockRayTraceResult ray = (BlockRayTraceResult) obj; - TileEntity te = world.getTileEntity(ray.getPos()); + TileEntity te = world.getBlockEntity(ray.getBlockPos()); if (!(te instanceof KineticTileEntity)) return null; diff --git a/src/main/java/com/simibubi/create/content/contraptions/KineticNetwork.java b/src/main/java/com/simibubi/create/content/contraptions/KineticNetwork.java index bbbe8e585..af9076cb6 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/KineticNetwork.java +++ b/src/main/java/com/simibubi/create/content/contraptions/KineticNetwork.java @@ -89,7 +89,7 @@ public class KineticNetwork { te.updateFromNetwork(0, 0, 0); if (members.isEmpty()) { - TorquePropagator.networks.get(te.getWorld()) + TorquePropagator.networks.get(te.getLevel()) .remove(this.id); return; } @@ -109,9 +109,9 @@ public class KineticNetwork { boolean wasOverStressed = te.isOverStressed(); te.updateFromNetwork(currentCapacity, currentStress, getSize()); if (!wasOverStressed && te.isOverStressed() && te.getTheoreticalSpeed() != 0) { - AllTriggers.triggerForNearbyPlayers(AllTriggers.OVERSTRESSED, te.getWorld(), te.getPos(), 4); + AllTriggers.triggerForNearbyPlayers(AllTriggers.OVERSTRESSED, te.getLevel(), te.getBlockPos(), 4); if (containsFlywheel) - AllTriggers.triggerForNearbyPlayers(AllTriggers.OVERSTRESS_FLYWHEEL, te.getWorld(), te.getPos(), 4); + AllTriggers.triggerForNearbyPlayers(AllTriggers.OVERSTRESS_FLYWHEEL, te.getLevel(), te.getBlockPos(), 4); } } @@ -147,8 +147,8 @@ public class KineticNetwork { for (Iterator iterator = sources.keySet() .iterator(); iterator.hasNext();) { KineticTileEntity te = iterator.next(); - if (te.getWorld() - .getTileEntity(te.getPos()) != te) { + if (te.getLevel() + .getBlockEntity(te.getBlockPos()) != te) { iterator.remove(); continue; } @@ -164,8 +164,8 @@ public class KineticNetwork { for (Iterator iterator = members.keySet() .iterator(); iterator.hasNext();) { KineticTileEntity te = iterator.next(); - if (te.getWorld() - .getTileEntity(te.getPos()) != te) { + if (te.getLevel() + .getBlockEntity(te.getBlockPos()) != te) { iterator.remove(); continue; } diff --git a/src/main/java/com/simibubi/create/content/contraptions/RotationPropagator.java b/src/main/java/com/simibubi/create/content/contraptions/RotationPropagator.java index faa8c2046..c12e8a081 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/RotationPropagator.java +++ b/src/main/java/com/simibubi/create/content/contraptions/RotationPropagator.java @@ -51,20 +51,20 @@ public class RotationPropagator { final IRotate definitionFrom = (IRotate) fromBlock; final IRotate definitionTo = (IRotate) toBlock; - final BlockPos diff = to.getPos() - .subtract(from.getPos()); - final Direction direction = Direction.getFacingFromVector(diff.getX(), diff.getY(), diff.getZ()); - final World world = from.getWorld(); + final BlockPos diff = to.getBlockPos() + .subtract(from.getBlockPos()); + final Direction direction = Direction.getNearest(diff.getX(), diff.getY(), diff.getZ()); + final World world = from.getLevel(); boolean alignedAxes = true; for (Axis axis : Axis.values()) if (axis != direction.getAxis()) - if (axis.getCoordinate(diff.getX(), diff.getY(), diff.getZ()) != 0) + if (axis.choose(diff.getX(), diff.getY(), diff.getZ()) != 0) alignedAxes = false; boolean connectedByAxis = - alignedAxes && definitionFrom.hasShaftTowards(world, from.getPos(), stateFrom, direction) - && definitionTo.hasShaftTowards(world, to.getPos(), stateTo, direction.getOpposite()); + alignedAxes && definitionFrom.hasShaftTowards(world, from.getBlockPos(), stateFrom, direction) + && definitionTo.hasShaftTowards(world, to.getBlockPos(), stateTo, direction.getOpposite()); boolean connectedByGears = ICogWheel.isSmallCog(stateFrom) && ICogWheel.isSmallCog(stateTo); @@ -89,10 +89,10 @@ public class RotationPropagator { // Large Gear <-> Large Gear if (isLargeToLargeGear(stateFrom, stateTo, diff)) { - Axis sourceAxis = stateFrom.get(AXIS); - Axis targetAxis = stateTo.get(AXIS); - int sourceAxisDiff = sourceAxis.getCoordinate(diff.getX(), diff.getY(), diff.getZ()); - int targetAxisDiff = targetAxis.getCoordinate(diff.getX(), diff.getY(), diff.getZ()); + Axis sourceAxis = stateFrom.getValue(AXIS); + Axis targetAxis = stateTo.getValue(AXIS); + int sourceAxisDiff = sourceAxis.choose(diff.getX(), diff.getY(), diff.getZ()); + int targetAxisDiff = targetAxis.choose(diff.getX(), diff.getY(), diff.getZ()); return sourceAxisDiff > 0 ^ targetAxisDiff > 0 ? -1 : 1; } @@ -107,7 +107,7 @@ public class RotationPropagator { // Gear <-> Gear if (connectedByGears) { - if (diff.manhattanDistance(BlockPos.ZERO) != 1) + if (diff.distManhattan(BlockPos.ZERO) != 1) return 0; if (ICogWheel.isLargeCog(stateTo)) return 0; @@ -125,11 +125,11 @@ public class RotationPropagator { final BlockState stateTo = to.getBlockState(); // Rotation Speed Controller <-> Large Gear - if (isLargeCogToSpeedController(stateFrom, stateTo, to.getPos() - .subtract(from.getPos()))) + if (isLargeCogToSpeedController(stateFrom, stateTo, to.getBlockPos() + .subtract(from.getBlockPos()))) return SpeedControllerTileEntity.getConveyedSpeed(from, to, true); - if (isLargeCogToSpeedController(stateTo, stateFrom, from.getPos() - .subtract(to.getPos()))) + if (isLargeCogToSpeedController(stateTo, stateFrom, from.getBlockPos() + .subtract(to.getBlockPos()))) return SpeedControllerTileEntity.getConveyedSpeed(to, from, false); float rotationSpeedModifier = getRotationSpeedModifier(from, to); @@ -139,12 +139,12 @@ public class RotationPropagator { private static boolean isLargeToLargeGear(BlockState from, BlockState to, BlockPos diff) { if (!ICogWheel.isLargeCog(from) || !ICogWheel.isLargeCog(to)) return false; - Axis fromAxis = from.get(AXIS); - Axis toAxis = to.get(AXIS); + Axis fromAxis = from.getValue(AXIS); + Axis toAxis = to.getValue(AXIS); if (fromAxis == toAxis) return false; for (Axis axis : Axis.values()) { - int axisDiff = axis.getCoordinate(diff.getX(), diff.getY(), diff.getZ()); + int axisDiff = axis.choose(diff.getX(), diff.getY(), diff.getZ()); if (axis == fromAxis || axis == toAxis) { if (axisDiff == 0) return false; @@ -171,15 +171,15 @@ public class RotationPropagator { } private static boolean isLargeToSmallCog(BlockState from, BlockState to, IRotate defTo, BlockPos diff) { - Axis axisFrom = from.get(AXIS); + Axis axisFrom = from.getValue(AXIS); if (axisFrom != defTo.getRotationAxis(to)) return false; - if (axisFrom.getCoordinate(diff.getX(), diff.getY(), diff.getZ()) != 0) + if (axisFrom.choose(diff.getX(), diff.getY(), diff.getZ()) != 0) return false; for (Axis axis : Axis.values()) { if (axis == axisFrom) continue; - if (Math.abs(axis.getCoordinate(diff.getX(), diff.getY(), diff.getZ())) != 1) + if (Math.abs(axis.choose(diff.getX(), diff.getY(), diff.getZ())) != 1) return false; } return true; @@ -188,12 +188,12 @@ public class RotationPropagator { private static boolean isLargeCogToSpeedController(BlockState from, BlockState to, BlockPos diff) { if (!ICogWheel.isLargeCog(from) || !AllBlocks.ROTATION_SPEED_CONTROLLER.has(to)) return false; - if (!diff.equals(BlockPos.ZERO.down())) + if (!diff.equals(BlockPos.ZERO.below())) return false; - Axis axis = from.get(CogWheelBlock.AXIS); + Axis axis = from.getValue(CogWheelBlock.AXIS); if (axis.isVertical()) return false; - if (to.get(SpeedControllerBlock.HORIZONTAL_AXIS) == axis) + if (to.getValue(SpeedControllerBlock.HORIZONTAL_AXIS) == axis) return false; return true; } @@ -205,9 +205,9 @@ public class RotationPropagator { * @param pos */ public static void handleAdded(World worldIn, BlockPos pos, KineticTileEntity addedTE) { - if (worldIn.isRemote) + if (worldIn.isClientSide) return; - if (!worldIn.isBlockPresent(pos)) + if (!worldIn.isLoaded(pos)) return; propagateNewSource(addedTE); } @@ -218,8 +218,8 @@ public class RotationPropagator { * @param currentTE */ private static void propagateNewSource(KineticTileEntity currentTE) { - BlockPos pos = currentTE.getPos(); - World world = currentTE.getWorld(); + BlockPos pos = currentTE.getBlockPos(); + World world = currentTE.getLevel(); for (KineticTileEntity neighbourTE : getConnectedNeighbours(currentTE)) { float speedOfCurrent = currentTE.getTheoreticalSpeed(); @@ -251,7 +251,7 @@ public class RotationPropagator { // Neighbour faster, overpower the incoming tree if (Math.abs(oppositeSpeed) > Math.abs(speedOfCurrent)) { float prevSpeed = currentTE.getSpeed(); - currentTE.setSource(neighbourTE.getPos()); + currentTE.setSource(neighbourTE.getBlockPos()); currentTE.setSpeed(getConveyedSpeed(neighbourTE, currentTE)); currentTE.onSpeedChanged(prevSpeed); currentTE.sendData(); @@ -271,11 +271,11 @@ public class RotationPropagator { continue; } - if (currentTE.hasSource() && currentTE.source.equals(neighbourTE.getPos())) + if (currentTE.hasSource() && currentTE.source.equals(neighbourTE.getBlockPos())) currentTE.removeSource(); float prevSpeed = neighbourTE.getSpeed(); - neighbourTE.setSource(currentTE.getPos()); + neighbourTE.setSource(currentTE.getBlockPos()); neighbourTE.setSpeed(getConveyedSpeed(currentTE, neighbourTE)); neighbourTE.onSpeedChanged(prevSpeed); neighbourTE.sendData(); @@ -289,7 +289,7 @@ public class RotationPropagator { float prevSpeed = neighbourTE.getSpeed(); neighbourTE.setSpeed(newSpeed); - neighbourTE.setSource(currentTE.getPos()); + neighbourTE.setSource(currentTE.getBlockPos()); neighbourTE.onSpeedChanged(prevSpeed); neighbourTE.sendData(); propagateNewSource(neighbourTE); @@ -305,7 +305,7 @@ public class RotationPropagator { * @param removedTE */ public static void handleRemoved(World worldIn, BlockPos pos, KineticTileEntity removedTE) { - if (worldIn.isRemote) + if (worldIn.isClientSide) return; if (removedTE == null) return; @@ -316,7 +316,7 @@ public class RotationPropagator { BlockState neighbourState = worldIn.getBlockState(neighbourPos); if (!(neighbourState.getBlock() instanceof IRotate)) continue; - TileEntity tileEntity = worldIn.getTileEntity(neighbourPos); + TileEntity tileEntity = worldIn.getBlockEntity(neighbourPos); if (!(tileEntity instanceof KineticTileEntity)) continue; @@ -336,16 +336,16 @@ public class RotationPropagator { * @param updateTE */ private static void propagateMissingSource(KineticTileEntity updateTE) { - final World world = updateTE.getWorld(); + final World world = updateTE.getLevel(); List potentialNewSources = new LinkedList<>(); List frontier = new LinkedList<>(); - frontier.add(updateTE.getPos()); + frontier.add(updateTE.getBlockPos()); BlockPos missingSource = updateTE.hasSource() ? updateTE.source : null; while (!frontier.isEmpty()) { final BlockPos pos = frontier.remove(0); - TileEntity tileEntity = world.getTileEntity(pos); + TileEntity tileEntity = world.getBlockEntity(pos); if (!(tileEntity instanceof KineticTileEntity)) continue; final KineticTileEntity currentTE = (KineticTileEntity) tileEntity; @@ -354,7 +354,7 @@ public class RotationPropagator { currentTE.sendData(); for (KineticTileEntity neighbourTE : getConnectedNeighbours(currentTE)) { - if (neighbourTE.getPos() + if (neighbourTE.getBlockPos() .equals(missingSource)) continue; if (!neighbourTE.hasSource()) @@ -368,7 +368,7 @@ public class RotationPropagator { if (neighbourTE.isSource()) potentialNewSources.add(neighbourTE); - frontier.add(neighbourTE.getPos()); + frontier.add(neighbourTE.getBlockPos()); } } @@ -381,14 +381,14 @@ public class RotationPropagator { } private static KineticTileEntity findConnectedNeighbour(KineticTileEntity currentTE, BlockPos neighbourPos) { - BlockState neighbourState = currentTE.getWorld() + BlockState neighbourState = currentTE.getLevel() .getBlockState(neighbourPos); if (!(neighbourState.getBlock() instanceof IRotate)) return null; if (!neighbourState.hasTileEntity()) return null; - TileEntity neighbourTE = currentTE.getWorld() - .getTileEntity(neighbourPos); + TileEntity neighbourTE = currentTE.getLevel() + .getBlockEntity(neighbourPos); if (!(neighbourTE instanceof KineticTileEntity)) return null; KineticTileEntity neighbourKTE = (KineticTileEntity) neighbourTE; @@ -403,8 +403,8 @@ public class RotationPropagator { public static boolean isConnected(KineticTileEntity from, KineticTileEntity to) { final BlockState stateFrom = from.getBlockState(); final BlockState stateTo = to.getBlockState(); - return isLargeCogToSpeedController(stateFrom, stateTo, to.getPos() - .subtract(from.getPos())) || getRotationSpeedModifier(from, to) != 0 + return isLargeCogToSpeedController(stateFrom, stateTo, to.getBlockPos() + .subtract(from.getBlockPos())) || getRotationSpeedModifier(from, to) != 0 || from.isCustomConnection(to, stateFrom, stateTo); } @@ -423,13 +423,13 @@ public class RotationPropagator { private static List getPotentialNeighbourLocations(KineticTileEntity te) { List neighbours = new LinkedList<>(); - if (!te.getWorld() - .isAreaLoaded(te.getPos(), 1)) + if (!te.getLevel() + .isAreaLoaded(te.getBlockPos(), 1)) return neighbours; for (Direction facing : Iterate.directions) - neighbours.add(te.getPos() - .offset(facing)); + neighbours.add(te.getBlockPos() + .relative(facing)); BlockState blockState = te.getBlockState(); if (!(blockState.getBlock() instanceof IRotate)) diff --git a/src/main/java/com/simibubi/create/content/contraptions/TorquePropagator.java b/src/main/java/com/simibubi/create/content/contraptions/TorquePropagator.java index 3d169a6ef..72b8fd57c 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/TorquePropagator.java +++ b/src/main/java/com/simibubi/create/content/contraptions/TorquePropagator.java @@ -26,7 +26,7 @@ public class TorquePropagator { public KineticNetwork getOrCreateNetworkFor(KineticTileEntity te) { Long id = te.network; KineticNetwork network; - Map map = networks.get(te.getWorld()); + Map map = networks.get(te.getLevel()); if (id == null) return null; diff --git a/src/main/java/com/simibubi/create/content/contraptions/base/BackHalfShaftInstance.java b/src/main/java/com/simibubi/create/content/contraptions/base/BackHalfShaftInstance.java index 592db77bf..02570c895 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/base/BackHalfShaftInstance.java +++ b/src/main/java/com/simibubi/create/content/contraptions/base/BackHalfShaftInstance.java @@ -12,6 +12,6 @@ public class BackHalfShaftInstance extends HalfShaftInstance { @Override protected Direction getShaftDirection() { - return tile.getBlockState().get(BlockStateProperties.FACING).getOpposite(); + return tile.getBlockState().getValue(BlockStateProperties.FACING).getOpposite(); } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/base/CasingBlock.java b/src/main/java/com/simibubi/create/content/contraptions/base/CasingBlock.java index 75fb9c3d3..b58a1fffd 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/base/CasingBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/base/CasingBlock.java @@ -11,6 +11,8 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.world.IBlockReader; import net.minecraftforge.common.ToolType; +import net.minecraft.block.AbstractBlock.Properties; + public class CasingBlock extends Block implements IWrenchable { public CasingBlock(Properties p_i48440_1_) { @@ -29,7 +31,7 @@ public class CasingBlock extends Block implements IWrenchable { @Override public boolean canHarvestBlock(BlockState state, IBlockReader world, BlockPos pos, PlayerEntity player) { - for (ToolType toolType : player.getHeldItemMainhand().getToolTypes()) { + for (ToolType toolType : player.getMainHandItem().getToolTypes()) { if (isToolEffective(state, toolType)) return true; } diff --git a/src/main/java/com/simibubi/create/content/contraptions/base/DirectionalAxisKineticBlock.java b/src/main/java/com/simibubi/create/content/contraptions/base/DirectionalAxisKineticBlock.java index e3e4bc013..5795ff7b2 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/base/DirectionalAxisKineticBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/base/DirectionalAxisKineticBlock.java @@ -15,6 +15,8 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.world.IWorldReader; import net.minecraft.world.World; +import net.minecraft.block.AbstractBlock.Properties; + public abstract class DirectionalAxisKineticBlock extends DirectionalKineticBlock { public static final BooleanProperty AXIS_ALONG_FIRST_COORDINATE = BooleanProperty.create("axis_along_first"); @@ -24,30 +26,30 @@ public abstract class DirectionalAxisKineticBlock extends DirectionalKineticBloc } @Override - protected void fillStateContainer(Builder builder) { + protected void createBlockStateDefinition(Builder builder) { builder.add(AXIS_ALONG_FIRST_COORDINATE); - super.fillStateContainer(builder); + super.createBlockStateDefinition(builder); } protected Direction getFacingForPlacement(BlockItemUseContext context) { Direction facing = context.getNearestLookingDirection() .getOpposite(); if (context.getPlayer() != null && context.getPlayer() - .isSneaking()) + .isShiftKeyDown()) facing = facing.getOpposite(); return facing; } protected boolean getAxisAlignmentForPlacement(BlockItemUseContext context) { - return context.getPlacementHorizontalFacing() + return context.getHorizontalDirection() .getAxis() == Axis.X; } @Override public BlockState getStateForPlacement(BlockItemUseContext context) { Direction facing = getFacingForPlacement(context); - BlockPos pos = context.getPos(); - World world = context.getWorld(); + BlockPos pos = context.getClickedPos(); + World world = context.getLevel(); boolean alongFirst = false; Axis faceAxis = facing.getAxis(); @@ -70,7 +72,7 @@ public abstract class DirectionalAxisKineticBlock extends DirectionalKineticBloc for (Direction side : Iterate.horizontalDirections) { if (!prefersConnectionTo(world, pos, side, true) - && !prefersConnectionTo(world, pos, side.rotateY(), false)) + && !prefersConnectionTo(world, pos, side.getClockWise(), false)) continue; if (prefferedSide != null && prefferedSide.getAxis() != side.getAxis()) { prefferedSide = null; @@ -83,15 +85,15 @@ public abstract class DirectionalAxisKineticBlock extends DirectionalKineticBloc alongFirst = prefferedSide.getAxis() == Axis.X; } - return this.getDefaultState() - .with(FACING, facing) - .with(AXIS_ALONG_FIRST_COORDINATE, alongFirst); + return this.defaultBlockState() + .setValue(FACING, facing) + .setValue(AXIS_ALONG_FIRST_COORDINATE, alongFirst); } protected boolean prefersConnectionTo(IWorldReader reader, BlockPos pos, Direction facing, boolean shaftAxis) { if (!shaftAxis) return false; - BlockPos neighbourPos = pos.offset(facing); + BlockPos neighbourPos = pos.relative(facing); BlockState blockState = reader.getBlockState(neighbourPos); Block block = blockState.getBlock(); return block instanceof IRotate @@ -100,9 +102,9 @@ public abstract class DirectionalAxisKineticBlock extends DirectionalKineticBloc @Override public Axis getRotationAxis(BlockState state) { - Axis pistonAxis = state.get(FACING) + Axis pistonAxis = state.getValue(FACING) .getAxis(); - boolean alongFirst = state.get(AXIS_ALONG_FIRST_COORDINATE); + boolean alongFirst = state.getValue(AXIS_ALONG_FIRST_COORDINATE); if (pistonAxis == Axis.X) return alongFirst ? Axis.Y : Axis.Z; diff --git a/src/main/java/com/simibubi/create/content/contraptions/base/DirectionalKineticBlock.java b/src/main/java/com/simibubi/create/content/contraptions/base/DirectionalKineticBlock.java index d6b43ef65..745948fa6 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/base/DirectionalKineticBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/base/DirectionalKineticBlock.java @@ -12,6 +12,8 @@ import net.minecraft.util.Direction; import net.minecraft.util.Mirror; import net.minecraft.util.Rotation; +import net.minecraft.block.AbstractBlock.Properties; + public abstract class DirectionalKineticBlock extends KineticBlock { public static final DirectionProperty FACING = BlockStateProperties.FACING; @@ -21,20 +23,20 @@ public abstract class DirectionalKineticBlock extends KineticBlock { } @Override - protected void fillStateContainer(Builder builder) { + protected void createBlockStateDefinition(Builder builder) { builder.add(FACING); - super.fillStateContainer(builder); + super.createBlockStateDefinition(builder); } public Direction getPreferredFacing(BlockItemUseContext context) { Direction prefferedSide = null; for (Direction side : Iterate.directions) { - BlockState blockState = context.getWorld() - .getBlockState(context.getPos() - .offset(side)); + BlockState blockState = context.getLevel() + .getBlockState(context.getClickedPos() + .relative(side)); if (blockState.getBlock() instanceof IRotate) { - if (((IRotate) blockState.getBlock()).hasShaftTowards(context.getWorld(), context.getPos() - .offset(side), blockState, side.getOpposite())) + if (((IRotate) blockState.getBlock()).hasShaftTowards(context.getLevel(), context.getClickedPos() + .relative(side), blockState, side.getOpposite())) if (prefferedSide != null && prefferedSide.getAxis() != side.getAxis()) { prefferedSide = null; break; @@ -50,22 +52,22 @@ public abstract class DirectionalKineticBlock extends KineticBlock { public BlockState getStateForPlacement(BlockItemUseContext context) { Direction preferred = getPreferredFacing(context); if (preferred == null || (context.getPlayer() != null && context.getPlayer() - .isSneaking())) { + .isShiftKeyDown())) { Direction nearestLookingDirection = context.getNearestLookingDirection(); - return getDefaultState().with(FACING, context.getPlayer() != null && context.getPlayer() - .isSneaking() ? nearestLookingDirection : nearestLookingDirection.getOpposite()); + return defaultBlockState().setValue(FACING, context.getPlayer() != null && context.getPlayer() + .isShiftKeyDown() ? nearestLookingDirection : nearestLookingDirection.getOpposite()); } - return getDefaultState().with(FACING, preferred.getOpposite()); + return defaultBlockState().setValue(FACING, preferred.getOpposite()); } @Override public BlockState rotate(BlockState state, Rotation rot) { - return state.with(FACING, rot.rotate(state.get(FACING))); + return state.setValue(FACING, rot.rotate(state.getValue(FACING))); } @Override public BlockState mirror(BlockState state, Mirror mirrorIn) { - return state.rotate(mirrorIn.toRotation(state.get(FACING))); + return state.rotate(mirrorIn.getRotation(state.getValue(FACING))); } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/base/GeneratingKineticTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/base/GeneratingKineticTileEntity.java index 916b8fe27..b96f34fff 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/base/GeneratingKineticTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/base/GeneratingKineticTileEntity.java @@ -36,7 +36,7 @@ public abstract class GeneratingKineticTileEntity extends KineticTileEntity { @Override public void setSource(BlockPos source) { super.setSource(source); - TileEntity tileEntity = world.getTileEntity(source); + TileEntity tileEntity = level.getBlockEntity(source); if (!(tileEntity instanceof KineticTileEntity)) return; KineticTileEntity sourceTe = (KineticTileEntity) tileEntity; @@ -59,8 +59,8 @@ public abstract class GeneratingKineticTileEntity extends KineticTileEntity { float stressBase = calculateAddedStressCapacity(); if (stressBase != 0 && IRotate.StressImpact.isEnabled()) { - tooltip.add(componentSpacing.copy().append(Lang.translate("gui.goggles.generator_stats"))); - tooltip.add(componentSpacing.copy().append(Lang.translate("tooltip.capacityProvided").formatted(TextFormatting.GRAY))); + tooltip.add(componentSpacing.plainCopy().append(Lang.translate("gui.goggles.generator_stats"))); + tooltip.add(componentSpacing.plainCopy().append(Lang.translate("tooltip.capacityProvided").withStyle(TextFormatting.GRAY))); float speed = getTheoreticalSpeed(); if (speed != getGeneratedSpeed() && speed != 0) @@ -70,12 +70,12 @@ public abstract class GeneratingKineticTileEntity extends KineticTileEntity { float stressTotal = stressBase * speed; tooltip.add( - componentSpacing.copy() + componentSpacing.plainCopy() .append(new StringTextComponent(" " + IHaveGoggleInformation.format(stressTotal)) .append(Lang.translate("generic.unit.stress")) - .formatted(TextFormatting.AQUA)) + .withStyle(TextFormatting.AQUA)) .append(" ") - .append(Lang.translate("gui.goggles.at_current_speed").formatted(TextFormatting.DARK_GRAY))); + .append(Lang.translate("gui.goggles.at_current_speed").withStyle(TextFormatting.DARK_GRAY))); added = true; } @@ -87,7 +87,7 @@ public abstract class GeneratingKineticTileEntity extends KineticTileEntity { float speed = getGeneratedSpeed(); float prevSpeed = this.speed; - if (world.isRemote) + if (level.isClientSide) return; if (prevSpeed != speed) { @@ -141,7 +141,7 @@ public abstract class GeneratingKineticTileEntity extends KineticTileEntity { // Staying below Overpowered speed if (Math.abs(prevSpeed) >= Math.abs(speed)) { if (Math.signum(prevSpeed) != Math.signum(speed)) - world.destroyBlock(pos, true); + level.destroyBlock(worldPosition, true); return; } @@ -161,6 +161,6 @@ public abstract class GeneratingKineticTileEntity extends KineticTileEntity { } public Long createNetworkId() { - return pos.toLong(); + return worldPosition.asLong(); } } 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 cd06bf1a4..65b8920ba 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 @@ -19,6 +19,6 @@ public class HalfShaftInstance extends SingleRotatingInstance { } protected Direction getShaftDirection() { - return blockState.get(BlockStateProperties.FACING); + return blockState.getValue(BlockStateProperties.FACING); } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/base/HorizontalAxisKineticBlock.java b/src/main/java/com/simibubi/create/content/contraptions/base/HorizontalAxisKineticBlock.java index 659d87bc6..c627f5e15 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/base/HorizontalAxisKineticBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/base/HorizontalAxisKineticBlock.java @@ -16,6 +16,8 @@ import net.minecraft.util.Rotation; import net.minecraft.util.math.BlockPos; import net.minecraft.world.IWorldReader; +import net.minecraft.block.AbstractBlock.Properties; + public abstract class HorizontalAxisKineticBlock extends KineticBlock { public static final Property HORIZONTAL_AXIS = BlockStateProperties.HORIZONTAL_AXIS; @@ -25,25 +27,25 @@ public abstract class HorizontalAxisKineticBlock extends KineticBlock { } @Override - protected void fillStateContainer(Builder builder) { + protected void createBlockStateDefinition(Builder builder) { builder.add(HORIZONTAL_AXIS); - super.fillStateContainer(builder); + super.createBlockStateDefinition(builder); } @Override public BlockState getStateForPlacement(BlockItemUseContext context) { Axis preferredAxis = getPreferredHorizontalAxis(context); if (preferredAxis != null) - return this.getDefaultState().with(HORIZONTAL_AXIS, preferredAxis); - return this.getDefaultState().with(HORIZONTAL_AXIS, context.getPlacementHorizontalFacing().rotateY().getAxis()); + return this.defaultBlockState().setValue(HORIZONTAL_AXIS, preferredAxis); + return this.defaultBlockState().setValue(HORIZONTAL_AXIS, context.getHorizontalDirection().getClockWise().getAxis()); } public static Axis getPreferredHorizontalAxis(BlockItemUseContext context) { Direction prefferedSide = null; for (Direction side : Iterate.horizontalDirections) { - BlockState blockState = context.getWorld().getBlockState(context.getPos().offset(side)); + BlockState blockState = context.getLevel().getBlockState(context.getClickedPos().relative(side)); if (blockState.getBlock() instanceof IRotate) { - if (((IRotate) blockState.getBlock()).hasShaftTowards(context.getWorld(), context.getPos().offset(side), + if (((IRotate) blockState.getBlock()).hasShaftTowards(context.getLevel(), context.getClickedPos().relative(side), blockState, side.getOpposite())) if (prefferedSide != null && prefferedSide.getAxis() != side.getAxis()) { prefferedSide = null; @@ -58,19 +60,19 @@ public abstract class HorizontalAxisKineticBlock extends KineticBlock { @Override public Axis getRotationAxis(BlockState state) { - return state.get(HORIZONTAL_AXIS); + return state.getValue(HORIZONTAL_AXIS); } @Override public boolean hasShaftTowards(IWorldReader world, BlockPos pos, BlockState state, Direction face) { - return face.getAxis() == state.get(HORIZONTAL_AXIS); + return face.getAxis() == state.getValue(HORIZONTAL_AXIS); } @Override public BlockState rotate(BlockState state, Rotation rot) { - Axis axis = state.get(HORIZONTAL_AXIS); - return state.with(HORIZONTAL_AXIS, - rot.rotate(Direction.getFacingFromAxis(AxisDirection.POSITIVE, axis)).getAxis()); + Axis axis = state.getValue(HORIZONTAL_AXIS); + return state.setValue(HORIZONTAL_AXIS, + rot.rotate(Direction.get(AxisDirection.POSITIVE, axis)).getAxis()); } @Override diff --git a/src/main/java/com/simibubi/create/content/contraptions/base/HorizontalHalfShaftInstance.java b/src/main/java/com/simibubi/create/content/contraptions/base/HorizontalHalfShaftInstance.java index c7298995f..eafd86c5d 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/base/HorizontalHalfShaftInstance.java +++ b/src/main/java/com/simibubi/create/content/contraptions/base/HorizontalHalfShaftInstance.java @@ -13,6 +13,6 @@ public class HorizontalHalfShaftInstance extends HalfShaftInstance { @Override protected Direction getShaftDirection() { - return blockState.get(BlockStateProperties.HORIZONTAL_FACING).getOpposite(); + return blockState.getValue(BlockStateProperties.HORIZONTAL_FACING).getOpposite(); } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/base/HorizontalKineticBlock.java b/src/main/java/com/simibubi/create/content/contraptions/base/HorizontalKineticBlock.java index e763f9f03..c4b47d01a 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/base/HorizontalKineticBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/base/HorizontalKineticBlock.java @@ -12,6 +12,8 @@ import net.minecraft.util.Direction; import net.minecraft.util.Mirror; import net.minecraft.util.Rotation; +import net.minecraft.block.AbstractBlock.Properties; + public abstract class HorizontalKineticBlock extends KineticBlock { public static final Property HORIZONTAL_FACING = BlockStateProperties.HORIZONTAL_FACING; @@ -21,27 +23,27 @@ public abstract class HorizontalKineticBlock extends KineticBlock { } @Override - protected void fillStateContainer(Builder builder) { + protected void createBlockStateDefinition(Builder builder) { builder.add(HORIZONTAL_FACING); - super.fillStateContainer(builder); + super.createBlockStateDefinition(builder); } @Override public BlockState getStateForPlacement(BlockItemUseContext context) { - return this.getDefaultState() - .with(HORIZONTAL_FACING, context.getPlacementHorizontalFacing() + return this.defaultBlockState() + .setValue(HORIZONTAL_FACING, context.getHorizontalDirection() .getOpposite()); } public Direction getPreferredHorizontalFacing(BlockItemUseContext context) { Direction prefferedSide = null; for (Direction side : Iterate.horizontalDirections) { - BlockState blockState = context.getWorld() - .getBlockState(context.getPos() - .offset(side)); + BlockState blockState = context.getLevel() + .getBlockState(context.getClickedPos() + .relative(side)); if (blockState.getBlock() instanceof IRotate) { - if (((IRotate) blockState.getBlock()).hasShaftTowards(context.getWorld(), context.getPos() - .offset(side), blockState, side.getOpposite())) + if (((IRotate) blockState.getBlock()).hasShaftTowards(context.getLevel(), context.getClickedPos() + .relative(side), blockState, side.getOpposite())) if (prefferedSide != null && prefferedSide.getAxis() != side.getAxis()) { prefferedSide = null; break; @@ -55,12 +57,12 @@ public abstract class HorizontalKineticBlock extends KineticBlock { @Override public BlockState rotate(BlockState state, Rotation rot) { - return state.with(HORIZONTAL_FACING, rot.rotate(state.get(HORIZONTAL_FACING))); + return state.setValue(HORIZONTAL_FACING, rot.rotate(state.getValue(HORIZONTAL_FACING))); } @Override public BlockState mirror(BlockState state, Mirror mirrorIn) { - return state.rotate(mirrorIn.toRotation(state.get(HORIZONTAL_FACING))); + return state.rotate(mirrorIn.getRotation(state.getValue(HORIZONTAL_FACING))); } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/base/IRotate.java b/src/main/java/com/simibubi/create/content/contraptions/base/IRotate.java index 958290270..2f2540eb7 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/base/IRotate.java +++ b/src/main/java/com/simibubi/create/content/contraptions/base/IRotate.java @@ -72,9 +72,9 @@ public interface IRotate extends IWrenchable { level.append(" (" + IHaveGoggleInformation.format(Math.abs(speed))).append(Lang.translate("generic.unit.rpm")).append(") "); if (overstressed) - level.formatted(TextFormatting.DARK_GRAY, TextFormatting.STRIKETHROUGH); + level.withStyle(TextFormatting.DARK_GRAY, TextFormatting.STRIKETHROUGH); else - level.formatted(speedLevel.getTextColor()); + level.withStyle(speedLevel.getTextColor()); return level; } @@ -115,7 +115,7 @@ public interface IRotate extends IWrenchable { level.append(String.format(" (%s%%) ", (int) (stressPercent * 100))); - return level.formatted(color); + return level.withStyle(color); } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/base/KineticBlock.java b/src/main/java/com/simibubi/create/content/contraptions/base/KineticBlock.java index 01e8db956..351ece5f8 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/base/KineticBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/base/KineticBlock.java @@ -16,6 +16,8 @@ import net.minecraft.world.IWorldReader; import net.minecraft.world.World; import net.minecraftforge.common.ToolType; +import net.minecraft.block.AbstractBlock.Properties; + public abstract class KineticBlock extends Block implements IRotate { protected static final Palette color = Palette.Red; @@ -31,7 +33,7 @@ public abstract class KineticBlock extends Block implements IRotate { @Override public boolean canHarvestBlock(BlockState state, IBlockReader world, BlockPos pos, PlayerEntity player) { - for (ToolType toolType : player.getHeldItemMainhand() + for (ToolType toolType : player.getMainHandItem() .getToolTypes()) { if (isToolEffective(state, toolType)) return true; @@ -45,13 +47,13 @@ public abstract class KineticBlock extends Block implements IRotate { } @Override - public void onBlockAdded(BlockState state, World worldIn, BlockPos pos, BlockState oldState, boolean isMoving) { + public void onPlace(BlockState state, World worldIn, BlockPos pos, BlockState oldState, boolean isMoving) { // onBlockAdded is useless for init, as sometimes the TE gets re-instantiated // however, if a block change occurs that does not change kinetic connections, // we can prevent a major re-propagation here - TileEntity tileEntity = worldIn.getTileEntity(pos); + TileEntity tileEntity = worldIn.getBlockEntity(pos); if (tileEntity instanceof KineticTileEntity) { KineticTileEntity kineticTileEntity = (KineticTileEntity) tileEntity; kineticTileEntity.preventSpeedUpdate = 0; @@ -87,11 +89,11 @@ public abstract class KineticBlock extends Block implements IRotate { public abstract TileEntity createTileEntity(BlockState state, IBlockReader world); @Override - public void updateDiagonalNeighbors(BlockState stateIn, IWorld worldIn, BlockPos pos, int flags, int count) { - if (worldIn.isRemote()) + public void updateIndirectNeighbourShapes(BlockState stateIn, IWorld worldIn, BlockPos pos, int flags, int count) { + if (worldIn.isClientSide()) return; - TileEntity tileEntity = worldIn.getTileEntity(pos); + TileEntity tileEntity = worldIn.getBlockEntity(pos); if (!(tileEntity instanceof KineticTileEntity)) return; KineticTileEntity kte = (KineticTileEntity) tileEntity; @@ -108,11 +110,11 @@ public abstract class KineticBlock extends Block implements IRotate { } @Override - public void onBlockPlacedBy(World worldIn, BlockPos pos, BlockState state, LivingEntity placer, ItemStack stack) { - if (worldIn.isRemote) + public void setPlacedBy(World worldIn, BlockPos pos, BlockState state, LivingEntity placer, ItemStack stack) { + if (worldIn.isClientSide) return; - TileEntity tileEntity = worldIn.getTileEntity(pos); + TileEntity tileEntity = worldIn.getBlockEntity(pos); if (!(tileEntity instanceof KineticTileEntity)) return; diff --git a/src/main/java/com/simibubi/create/content/contraptions/base/KineticData.java b/src/main/java/com/simibubi/create/content/contraptions/base/KineticData.java index 6eb292670..2976a4cfd 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/base/KineticData.java +++ b/src/main/java/com/simibubi/create/content/contraptions/base/KineticData.java @@ -24,7 +24,7 @@ public class KineticData extends BasicData { } public KineticData setPosition(Vector3f pos) { - return setPosition(pos.getX(), pos.getY(), pos.getZ()); + return setPosition(pos.x(), pos.y(), pos.z()); } public KineticData setPosition(float x, float y, float z) { diff --git a/src/main/java/com/simibubi/create/content/contraptions/base/KineticEffectHandler.java b/src/main/java/com/simibubi/create/content/contraptions/base/KineticEffectHandler.java index 9e9d70c0b..6709d540e 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/base/KineticEffectHandler.java +++ b/src/main/java/com/simibubi/create/content/contraptions/base/KineticEffectHandler.java @@ -29,9 +29,9 @@ public class KineticEffectHandler { } public void tick() { - World world = kte.getWorld(); + World world = kte.getLevel(); - if (world.isRemote) { + if (world.isClientSide) { if (overStressedTime > 0) if (--overStressedTime == 0) if (kte.isOverStressed()) { @@ -59,15 +59,15 @@ public class KineticEffectHandler { } public void spawnEffect(IParticleData particle, float maxMotion, int amount) { - World world = kte.getWorld(); + World world = kte.getLevel(); if (world == null) return; - if (!world.isRemote) + if (!world.isClientSide) return; - Random r = world.rand; + Random r = world.random; for (int i = 0; i < amount; i++) { Vector3d motion = VecHelper.offsetRandomly(Vector3d.ZERO, r, maxMotion); - Vector3d position = VecHelper.getCenterOf(kte.getPos()); + Vector3d position = VecHelper.getCenterOf(kte.getBlockPos()); world.addParticle(particle, position.x, position.y, position.z, motion.x, motion.y, motion.z); } } @@ -87,8 +87,8 @@ public class KineticEffectHandler { float radius2 = kb.getParticleTargetRadius(); Axis axis = kb.getRotationAxis(state); - BlockPos pos = kte.getPos(); - World world = kte.getWorld(); + BlockPos pos = kte.getBlockPos(); + World world = kte.getLevel(); if (axis == null) return; if (world == null) @@ -105,7 +105,7 @@ public class KineticEffectHandler { AllTriggers.triggerForNearbyPlayers(AllTriggers.ROTATION, world, pos, 5); RotationIndicatorParticleData particleData = new RotationIndicatorParticleData(color, particleSpeed, radius1, radius2, 10, axisChar); - ((ServerWorld) world).spawnParticle(particleData, vec.x, vec.y, vec.z, 20, 0, 0, 0, 1); + ((ServerWorld) world).sendParticles(particleData, vec.x, vec.y, vec.z, 20, 0, 0, 0, 1); } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/base/KineticTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/base/KineticTileEntity.java index 6878a5167..ec172249f 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/base/KineticTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/base/KineticTileEntity.java @@ -78,7 +78,7 @@ public abstract class KineticTileEntity extends SmartTileEntity @Override public void initialize() { - if (hasNetwork() && !world.isRemote) { + if (hasNetwork() && !level.isClientSide) { KineticNetwork network = getOrCreateNetwork(); if (!network.initialized) network.initFromTE(capacity, stress, networkSize); @@ -90,13 +90,13 @@ public abstract class KineticTileEntity extends SmartTileEntity @Override public void tick() { - if (!world.isRemote && needsSpeedUpdate()) + if (!level.isClientSide && needsSpeedUpdate()) attachKinetics(); super.tick(); effects.tick(); - if (world.isRemote) { + if (level.isClientSide) { cachedBoundingBox = null; // cache the bounding box for every frame between ticks DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> this.tickAudio()); return; @@ -124,10 +124,10 @@ public abstract class KineticTileEntity extends SmartTileEntity return; } - if (!world.isBlockPresent(source)) + if (!level.isLoaded(source)) return; - TileEntity tileEntity = world.getTileEntity(source); + TileEntity tileEntity = level.getBlockEntity(source); KineticTileEntity sourceTe = tileEntity instanceof KineticTileEntity ? (KineticTileEntity) tileEntity : null; if (sourceTe == null || sourceTe.speed == 0) { @@ -184,13 +184,13 @@ public abstract class KineticTileEntity extends SmartTileEntity } @Override - public void remove() { - if (!world.isRemote) { + public void setRemoved() { + if (!level.isClientSide) { if (hasNetwork()) getOrCreateNetwork().remove(this); detachKinetics(); } - super.remove(); + super.setRemoved(); } @Override @@ -289,10 +289,10 @@ public abstract class KineticTileEntity extends SmartTileEntity public void setSource(BlockPos source) { this.source = source; - if (world == null || world.isRemote) + if (level == null || level.isClientSide) return; - TileEntity tileEntity = world.getTileEntity(source); + TileEntity tileEntity = level.getBlockEntity(source); if (!(tileEntity instanceof KineticTileEntity)) { removeSource(); return; @@ -339,11 +339,11 @@ public abstract class KineticTileEntity extends SmartTileEntity public void attachKinetics() { updateSpeed = false; - RotationPropagator.handleAdded(world, pos, this); + RotationPropagator.handleAdded(level, worldPosition, this); } public void detachKinetics() { - RotationPropagator.handleRemoved(world, pos, this); + RotationPropagator.handleRemoved(level, worldPosition, this); } public boolean isSpeedRequirementFulfilled() { @@ -362,17 +362,17 @@ public abstract class KineticTileEntity extends SmartTileEntity } public static void switchToBlockState(World world, BlockPos pos, BlockState state) { - if (world.isRemote) + if (world.isClientSide) return; - TileEntity tileEntityIn = world.getTileEntity(pos); + TileEntity tileEntityIn = world.getBlockEntity(pos); BlockState currentState = world.getBlockState(pos); boolean isKinetic = tileEntityIn instanceof KineticTileEntity; if (currentState == state) return; if (tileEntityIn == null || !isKinetic) { - world.setBlockState(pos, state, 3); + world.setBlock(pos, state, 3); return; } @@ -386,7 +386,7 @@ public abstract class KineticTileEntity extends SmartTileEntity tileEntity.removeSource(); } - world.setBlockState(pos, state, 3); + world.setBlock(pos, state, 3); } @Override @@ -397,27 +397,27 @@ public abstract class KineticTileEntity extends SmartTileEntity boolean notFastEnough = !isSpeedRequirementFulfilled() && getSpeed() != 0; if (overStressed && AllConfigs.CLIENT.enableOverstressedTooltip.get()) { - tooltip.add(componentSpacing.copy() + tooltip.add(componentSpacing.plainCopy() .append(Lang.translate("gui.stressometer.overstressed") - .formatted(GOLD))); + .withStyle(GOLD))); ITextComponent hint = Lang.translate("gui.contraptions.network_overstressed"); List cutString = TooltipHelper.cutTextComponent(hint, GRAY, TextFormatting.WHITE); for (int i = 0; i < cutString.size(); i++) - tooltip.add(componentSpacing.copy() + tooltip.add(componentSpacing.plainCopy() .append(cutString.get(i))); return true; } if (notFastEnough) { - tooltip.add(componentSpacing.copy() + tooltip.add(componentSpacing.plainCopy() .append(Lang.translate("tooltip.speedRequirement") - .formatted(GOLD))); + .withStyle(GOLD))); ITextComponent hint = - Lang.translate("gui.contraptions.not_fast_enough", I18n.format(getBlockState().getBlock() - .getTranslationKey())); + Lang.translate("gui.contraptions.not_fast_enough", I18n.get(getBlockState().getBlock() + .getDescriptionId())); List cutString = TooltipHelper.cutTextComponent(hint, GRAY, TextFormatting.WHITE); for (int i = 0; i < cutString.size(); i++) - tooltip.add(componentSpacing.copy() + tooltip.add(componentSpacing.plainCopy() .append(cutString.get(i))); return true; } @@ -431,21 +431,21 @@ public abstract class KineticTileEntity extends SmartTileEntity float stressAtBase = calculateStressApplied(); if (calculateStressApplied() != 0 && StressImpact.isEnabled()) { - tooltip.add(componentSpacing.copy() + tooltip.add(componentSpacing.plainCopy() .append(Lang.translate("gui.goggles.kinetic_stats"))); - tooltip.add(componentSpacing.copy() + tooltip.add(componentSpacing.plainCopy() .append(Lang.translate("tooltip.stressImpact") - .formatted(TextFormatting.GRAY))); + .withStyle(TextFormatting.GRAY))); float stressTotal = stressAtBase * Math.abs(getTheoreticalSpeed()); - tooltip.add(componentSpacing.copy() + tooltip.add(componentSpacing.plainCopy() .append(new StringTextComponent(" " + IHaveGoggleInformation.format(stressTotal)) .append(Lang.translate("generic.unit.stress")) .append(" ") - .formatted(TextFormatting.AQUA)) + .withStyle(TextFormatting.AQUA)) .append(Lang.translate("gui.goggles.at_current_speed") - .formatted(TextFormatting.DARK_GRAY))); + .withStyle(TextFormatting.DARK_GRAY))); added = true; } @@ -526,13 +526,13 @@ public abstract class KineticTileEntity extends SmartTileEntity return neighbours; Axis axis = block.getRotationAxis(state); - BlockPos.getAllInBox(new BlockPos(-1, -1, -1), new BlockPos(1, 1, 1)) + BlockPos.betweenClosedStream(new BlockPos(-1, -1, -1), new BlockPos(1, 1, 1)) .forEach(offset -> { - if (axis.getCoordinate(offset.getX(), offset.getY(), offset.getZ()) != 0) + if (axis.choose(offset.getX(), offset.getY(), offset.getZ()) != 0) return; - if (offset.distanceSq(0, 0, 0, false) != BlockPos.ZERO.distanceSq(1, 1, 0, false)) + if (offset.distSqr(0, 0, 0, false) != BlockPos.ZERO.distSqr(1, 1, 0, false)) return; - neighbours.add(pos.add(offset)); + neighbours.add(worldPosition.offset(offset)); }); return neighbours; } @@ -560,7 +560,7 @@ public abstract class KineticTileEntity extends SmartTileEntity @Override public void requestModelDataUpdate() { super.requestModelDataUpdate(); - if (!this.removed) + if (!this.remove) DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> InstancedRenderDispatcher.enqueueUpdate(this)); } @@ -586,15 +586,16 @@ public abstract class KineticTileEntity extends SmartTileEntity float pitch = MathHelper.clamp((componentSpeed / 256f) + .45f, .85f, 1f); if (isNoisy()) - SoundScapes.play(AmbienceGroup.KINETIC, pos, pitch); + SoundScapes.play(AmbienceGroup.KINETIC, worldPosition, pitch); Block block = getBlockState().getBlock(); if (ICogWheel.isSmallCog(block) || ICogWheel.isLargeCog(block) || block instanceof GearboxBlock) - SoundScapes.play(AmbienceGroup.COG, pos, pitch); + SoundScapes.play(AmbienceGroup.COG, worldPosition, pitch); } protected boolean isNoisy() { return true; } + } diff --git a/src/main/java/com/simibubi/create/content/contraptions/base/KineticTileEntityRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/base/KineticTileEntityRenderer.java index 213c8f91d..91dc9f7ee 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/base/KineticTileEntityRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/base/KineticTileEntityRenderer.java @@ -39,9 +39,9 @@ public class KineticTileEntityRenderer extends SafeTileEntityRenderer extends T public static BlockState shaft(Direction.Axis axis) { return AllBlocks.SHAFT.getDefaultState() - .with(ShaftBlock.AXIS, axis); + .setValue(ShaftBlock.AXIS, axis); } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/base/RotatedPillarKineticBlock.java b/src/main/java/com/simibubi/create/content/contraptions/base/RotatedPillarKineticBlock.java index 75c45893c..beb855895 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/base/RotatedPillarKineticBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/base/RotatedPillarKineticBlock.java @@ -12,14 +12,16 @@ import net.minecraft.util.Direction; import net.minecraft.util.Direction.Axis; import net.minecraft.util.Rotation; +import net.minecraft.block.AbstractBlock.Properties; + public abstract class RotatedPillarKineticBlock extends KineticBlock { public static final EnumProperty AXIS = BlockStateProperties.AXIS; public RotatedPillarKineticBlock(Properties properties) { super(properties); - this.setDefaultState(this.getDefaultState() - .with(AXIS, Direction.Axis.Y)); + this.registerDefaultState(this.defaultBlockState() + .setValue(AXIS, Direction.Axis.Y)); } @Override @@ -27,11 +29,11 @@ public abstract class RotatedPillarKineticBlock extends KineticBlock { switch (rot) { case COUNTERCLOCKWISE_90: case CLOCKWISE_90: - switch (state.get(AXIS)) { + switch (state.getValue(AXIS)) { case X: - return state.with(AXIS, Direction.Axis.Z); + return state.setValue(AXIS, Direction.Axis.Z); case Z: - return state.with(AXIS, Direction.Axis.X); + return state.setValue(AXIS, Direction.Axis.X); default: return state; } @@ -43,12 +45,12 @@ public abstract class RotatedPillarKineticBlock extends KineticBlock { public static Axis getPreferredAxis(BlockItemUseContext context) { Axis prefferedAxis = null; for (Direction side : Iterate.directions) { - BlockState blockState = context.getWorld() - .getBlockState(context.getPos() - .offset(side)); + BlockState blockState = context.getLevel() + .getBlockState(context.getClickedPos() + .relative(side)); if (blockState.getBlock() instanceof IRotate) { - if (((IRotate) blockState.getBlock()).hasShaftTowards(context.getWorld(), context.getPos() - .offset(side), blockState, side.getOpposite())) + if (((IRotate) blockState.getBlock()).hasShaftTowards(context.getLevel(), context.getClickedPos() + .relative(side), blockState, side.getOpposite())) if (prefferedAxis != null && prefferedAxis != side.getAxis()) { prefferedAxis = null; break; @@ -61,7 +63,7 @@ public abstract class RotatedPillarKineticBlock extends KineticBlock { } @Override - protected void fillStateContainer(StateContainer.Builder builder) { + protected void createBlockStateDefinition(StateContainer.Builder builder) { builder.add(AXIS); } @@ -69,12 +71,12 @@ public abstract class RotatedPillarKineticBlock extends KineticBlock { public BlockState getStateForPlacement(BlockItemUseContext context) { Axis preferredAxis = getPreferredAxis(context); if (preferredAxis != null && (context.getPlayer() == null || !context.getPlayer() - .isSneaking())) - return this.getDefaultState() - .with(AXIS, preferredAxis); - return this.getDefaultState() - .with(AXIS, preferredAxis != null && context.getPlayer() - .isSneaking() ? context.getFace() + .isShiftKeyDown())) + return this.defaultBlockState() + .setValue(AXIS, preferredAxis); + return this.defaultBlockState() + .setValue(AXIS, preferredAxis != null && context.getPlayer() + .isShiftKeyDown() ? context.getClickedFace() .getAxis() : context.getNearestLookingDirection() .getAxis()); diff --git a/src/main/java/com/simibubi/create/content/contraptions/base/RotatingData.java b/src/main/java/com/simibubi/create/content/contraptions/base/RotatingData.java index 443168be0..b155b5fba 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/base/RotatingData.java +++ b/src/main/java/com/simibubi/create/content/contraptions/base/RotatingData.java @@ -16,13 +16,13 @@ public class RotatingData extends KineticData { } public RotatingData setRotationAxis(Direction.Axis axis) { - Direction orientation = Direction.getFacingFromAxis(Direction.AxisDirection.POSITIVE, axis); - setRotationAxis(orientation.getUnitVector()); + Direction orientation = Direction.get(Direction.AxisDirection.POSITIVE, axis); + setRotationAxis(orientation.step()); return this; } public RotatingData setRotationAxis(Vector3f axis) { - setRotationAxis(axis.getX(), axis.getY(), axis.getZ()); + setRotationAxis(axis.x(), axis.y(), axis.z()); return this; } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/AssemblyOperatorBlockItem.java b/src/main/java/com/simibubi/create/content/contraptions/components/AssemblyOperatorBlockItem.java index fcba185b0..ea2eedcec 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/AssemblyOperatorBlockItem.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/AssemblyOperatorBlockItem.java @@ -12,6 +12,8 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockRayTraceResult; import net.minecraft.util.math.vector.Vector3d; +import net.minecraft.item.Item.Properties; + public class AssemblyOperatorBlockItem extends BlockItem { public AssemblyOperatorBlockItem(Block block, Properties builder) { @@ -19,15 +21,15 @@ public class AssemblyOperatorBlockItem extends BlockItem { } @Override - public ActionResultType tryPlace(BlockItemUseContext context) { - BlockPos placedOnPos = context.getPos() - .offset(context.getFace() + public ActionResultType place(BlockItemUseContext context) { + BlockPos placedOnPos = context.getClickedPos() + .relative(context.getClickedFace() .getOpposite()); - BlockState placedOnState = context.getWorld() + BlockState placedOnState = context.getLevel() .getBlockState(placedOnPos); if (operatesOn(placedOnState)) { - if (context.getWorld() - .getBlockState(placedOnPos.up(2)) + if (context.getLevel() + .getBlockState(placedOnPos.above(2)) .getMaterial() .isReplaceable()) context = adjustContext(context, placedOnPos); @@ -35,12 +37,12 @@ public class AssemblyOperatorBlockItem extends BlockItem { return ActionResultType.FAIL; } - return super.tryPlace(context); + return super.place(context); } protected BlockItemUseContext adjustContext(BlockItemUseContext context, BlockPos placedOnPos) { - BlockPos up = placedOnPos.up(2); - return new AssemblyOperatorUseContext(context.getWorld(), context.getPlayer(), context.getHand(), context.getItem(), new BlockRayTraceResult(new Vector3d((double)up.getX() + 0.5D + (double) Direction.UP.getXOffset() * 0.5D, (double)up.getY() + 0.5D + (double) Direction.UP.getYOffset() * 0.5D, (double)up.getZ() + 0.5D + (double) Direction.UP.getZOffset() * 0.5D), Direction.UP, up, false)); + BlockPos up = placedOnPos.above(2); + return new AssemblyOperatorUseContext(context.getLevel(), context.getPlayer(), context.getHand(), context.getItemInHand(), new BlockRayTraceResult(new Vector3d((double)up.getX() + 0.5D + (double) Direction.UP.getStepX() * 0.5D, (double)up.getY() + 0.5D + (double) Direction.UP.getStepY() * 0.5D, (double)up.getZ() + 0.5D + (double) Direction.UP.getStepZ() * 0.5D), Direction.UP, up, false)); } protected boolean operatesOn(BlockState placedOnState) { diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/ActorData.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/ActorData.java index dd8c01e8e..cc3e6535c 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/ActorData.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/ActorData.java @@ -66,7 +66,7 @@ public class ActorData extends InstanceData { } public ActorData setRotationAxis(Vector3f axis) { - setRotationAxis(axis.getX(), axis.getY(), axis.getZ()); + setRotationAxis(axis.x(), axis.y(), axis.z()); return this; } @@ -79,7 +79,7 @@ public class ActorData extends InstanceData { } public ActorData setRotationCenter(Vector3f axis) { - setRotationCenter(axis.getX(), axis.getY(), axis.getZ()); + setRotationCenter(axis.x(), axis.y(), axis.z()); return this; } @@ -92,10 +92,10 @@ public class ActorData extends InstanceData { } public ActorData setLocalRotation(Quaternion q) { - this.qX = q.getX(); - this.qY = q.getY(); - this.qZ = q.getZ(); - this.qW = q.getW(); + this.qX = q.i(); + this.qY = q.j(); + this.qZ = q.k(); + this.qW = q.r(); markDirty(); return this; } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/AttachedActorBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/AttachedActorBlock.java index c9ea4bac8..3ad9dfa6d 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/AttachedActorBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/AttachedActorBlock.java @@ -22,6 +22,8 @@ import net.minecraft.util.math.shapes.VoxelShape; import net.minecraft.world.IBlockReader; import net.minecraft.world.IWorldReader; +import net.minecraft.block.AbstractBlock.Properties; + @ParametersAreNonnullByDefault @MethodsReturnNonnullByDefault public abstract class AttachedActorBlock extends HorizontalBlock implements IWrenchable { @@ -37,41 +39,41 @@ public abstract class AttachedActorBlock extends HorizontalBlock implements IWre @Override public VoxelShape getShape(BlockState state, IBlockReader worldIn, BlockPos pos, ISelectionContext context) { - Direction direction = state.get(HORIZONTAL_FACING); + Direction direction = state.getValue(FACING); return AllShapes.HARVESTER_BASE.get(direction); } @Override - protected void fillStateContainer(Builder builder) { - builder.add(HORIZONTAL_FACING); - super.fillStateContainer(builder); + protected void createBlockStateDefinition(Builder builder) { + builder.add(FACING); + super.createBlockStateDefinition(builder); } @Override - public boolean isValidPosition(BlockState state, IWorldReader worldIn, BlockPos pos) { - Direction direction = state.get(HORIZONTAL_FACING); - BlockPos offset = pos.offset(direction.getOpposite()); + public boolean canSurvive(BlockState state, IWorldReader worldIn, BlockPos pos) { + Direction direction = state.getValue(FACING); + BlockPos offset = pos.relative(direction.getOpposite()); return BlockHelper.hasBlockSolidSide(worldIn.getBlockState(offset), worldIn, offset, direction); } @Override public BlockState getStateForPlacement(BlockItemUseContext context) { Direction facing; - if (context.getFace().getAxis().isVertical()) - facing = context.getPlacementHorizontalFacing().getOpposite(); + if (context.getClickedFace().getAxis().isVertical()) + facing = context.getHorizontalDirection().getOpposite(); else { BlockState blockState = - context.getWorld().getBlockState(context.getPos().offset(context.getFace().getOpposite())); + context.getLevel().getBlockState(context.getClickedPos().relative(context.getClickedFace().getOpposite())); if (blockState.getBlock() instanceof AttachedActorBlock) - facing = blockState.get(HORIZONTAL_FACING); + facing = blockState.getValue(FACING); else - facing = context.getFace(); + facing = context.getClickedFace(); } - return getDefaultState().with(HORIZONTAL_FACING, facing); + return defaultBlockState().setValue(FACING, facing); } @Override - public boolean allowsMovement(BlockState state, IBlockReader reader, BlockPos pos, PathType type) { + public boolean isPathfindable(BlockState state, IBlockReader reader, BlockPos pos, PathType type) { return false; } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/BellMovementBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/BellMovementBehaviour.java index 10ab639cd..b635039d8 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/BellMovementBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/BellMovementBehaviour.java @@ -20,7 +20,7 @@ public class BellMovementBehaviour extends MovementBehaviour { @Override public void onSpeedChanged(MovementContext context, Vector3d oldMotion, Vector3d motion) { - double dotProduct = oldMotion.dotProduct(motion); + double dotProduct = oldMotion.dot(motion); if (dotProduct <= 0 && (context.relativeMotion.length() != 0) || context.firstMovement) playSound(context); @@ -41,7 +41,7 @@ public class BellMovementBehaviour extends MovementBehaviour { ((AbstractBellBlock) block).playSound(world, pos); } else { // Vanilla bell sound - world.playSound(null, pos, SoundEvents.BLOCK_BELL_USE, + world.playSound(null, pos, SoundEvents.BELL_BLOCK, SoundCategory.BLOCKS, 2f, 1f); } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/BlockBreakingKineticTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/BlockBreakingKineticTileEntity.java index a74d1a200..a9b11e083 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/BlockBreakingKineticTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/BlockBreakingKineticTileEntity.java @@ -77,17 +77,17 @@ public abstract class BlockBreakingKineticTileEntity extends KineticTileEntity { } @Override - public void remove() { - if (!world.isRemote && destroyProgress != 0) - world.sendBlockBreakProgress(breakerId, breakingPos, -1); - super.remove(); + public void setRemoved() { + if (!level.isClientSide && destroyProgress != 0) + level.destroyBlockProgress(breakerId, breakingPos, -1); + super.setRemoved(); } @Override public void tick() { super.tick(); - if (world.isRemote) + if (level.isClientSide) return; if (!shouldRun()) return; @@ -101,31 +101,31 @@ public abstract class BlockBreakingKineticTileEntity extends KineticTileEntity { if (ticksUntilNextProgress-- > 0) return; - BlockState stateToBreak = world.getBlockState(breakingPos); - float blockHardness = stateToBreak.getBlockHardness(world, breakingPos); + BlockState stateToBreak = level.getBlockState(breakingPos); + float blockHardness = stateToBreak.getDestroySpeed(level, breakingPos); if (!canBreak(stateToBreak, blockHardness)) { if (destroyProgress != 0) { destroyProgress = 0; - world.sendBlockBreakProgress(breakerId, breakingPos, -1); + level.destroyBlockProgress(breakerId, breakingPos, -1); } return; } float breakSpeed = getBreakSpeed(); destroyProgress += MathHelper.clamp((int) (breakSpeed / blockHardness), 1, 10 - destroyProgress); - world.playSound(null, pos, stateToBreak.getSoundType().getHitSound(), SoundCategory.NEUTRAL, .25f, 1); + level.playSound(null, worldPosition, stateToBreak.getSoundType().getHitSound(), SoundCategory.NEUTRAL, .25f, 1); if (destroyProgress >= 10) { onBlockBroken(stateToBreak); destroyProgress = 0; ticksUntilNextProgress = -1; - world.sendBlockBreakProgress(breakerId, breakingPos, -1); + level.destroyBlockProgress(breakerId, breakingPos, -1); return; } ticksUntilNextProgress = (int) (blockHardness / breakSpeed); - world.sendBlockBreakProgress(breakerId, breakingPos, (int) destroyProgress); + level.destroyBlockProgress(breakerId, breakingPos, (int) destroyProgress); } public boolean canBreak(BlockState stateToBreak, float blockHardness) { @@ -138,23 +138,23 @@ public abstract class BlockBreakingKineticTileEntity extends KineticTileEntity { } public void onBlockBroken(BlockState stateToBreak) { - FluidState FluidState = world.getFluidState(breakingPos); - world.playEvent(2001, breakingPos, Block.getStateId(stateToBreak)); - TileEntity tileentity = stateToBreak.hasTileEntity() ? world.getTileEntity(breakingPos) : null; - Vector3d vec = VecHelper.offsetRandomly(VecHelper.getCenterOf(breakingPos), world.rand, .125f); + FluidState FluidState = level.getFluidState(breakingPos); + level.levelEvent(2001, breakingPos, Block.getId(stateToBreak)); + TileEntity tileentity = stateToBreak.hasTileEntity() ? level.getBlockEntity(breakingPos) : null; + Vector3d vec = VecHelper.offsetRandomly(VecHelper.getCenterOf(breakingPos), level.random, .125f); - Block.getDrops(stateToBreak, (ServerWorld) world, breakingPos, tileentity).forEach((stack) -> { - if (!stack.isEmpty() && world.getGameRules().getBoolean(GameRules.DO_TILE_DROPS) - && !world.restoringBlockSnapshots) { - ItemEntity itementity = new ItemEntity(world, vec.x, vec.y, vec.z, stack); - itementity.setDefaultPickupDelay(); - itementity.setMotion(Vector3d.ZERO); - world.addEntity(itementity); + Block.getDrops(stateToBreak, (ServerWorld) level, breakingPos, tileentity).forEach((stack) -> { + if (!stack.isEmpty() && level.getGameRules().getBoolean(GameRules.RULE_DOBLOCKDROPS) + && !level.restoringBlockSnapshots) { + ItemEntity itementity = new ItemEntity(level, vec.x, vec.y, vec.z, stack); + itementity.setDefaultPickUpDelay(); + itementity.setDeltaMovement(Vector3d.ZERO); + level.addFreshEntity(itementity); } }); - if (world instanceof ServerWorld) - stateToBreak.spawnAdditionalDrops((ServerWorld) world, breakingPos, ItemStack.EMPTY); - world.setBlockState(breakingPos, FluidState.getBlockState(), 3); + if (level instanceof ServerWorld) + stateToBreak.spawnAfterBreak((ServerWorld) level, breakingPos, ItemStack.EMPTY); + level.setBlock(breakingPos, FluidState.createLegacyBlock(), 3); } protected float getBreakSpeed() { diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/BlockBreakingMovementBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/BlockBreakingMovementBehaviour.java index 419a5a577..b23ce8153 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/BlockBreakingMovementBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/BlockBreakingMovementBehaviour.java @@ -25,7 +25,7 @@ public class BlockBreakingMovementBehaviour extends MovementBehaviour { @Override public void startMoving(MovementContext context) { - if (context.world.isRemote) + if (context.world.isClientSide) return; context.data.putInt("BreakerId", -BlockBreakingKineticTileEntity.NEXT_BREAKER_ID.incrementAndGet()); } @@ -35,9 +35,9 @@ public class BlockBreakingMovementBehaviour extends MovementBehaviour { World world = context.world; BlockState stateVisited = world.getBlockState(pos); - if (!stateVisited.isNormalCube(world, pos)) + if (!stateVisited.isRedstoneConductor(world, pos)) damageEntities(context, pos, world); - if (world.isRemote) + if (world.isClientSide) return; if (!canBreak(world, pos, stateVisited)) return; @@ -50,29 +50,29 @@ public class BlockBreakingMovementBehaviour extends MovementBehaviour { DamageSource damageSource = getDamageSource(); if (damageSource == null && !throwsEntities()) return; - Entities: for (Entity entity : world.getEntitiesWithinAABB(Entity.class, new AxisAlignedBB(pos))) { + Entities: for (Entity entity : world.getEntitiesOfClass(Entity.class, new AxisAlignedBB(pos))) { if (entity instanceof ItemEntity) continue; if (entity instanceof AbstractContraptionEntity) continue; if (entity instanceof AbstractMinecartEntity) - for (Entity passenger : entity.getRecursivePassengers()) + for (Entity passenger : entity.getIndirectPassengers()) if (passenger instanceof AbstractContraptionEntity && ((AbstractContraptionEntity) passenger).getContraption() == context.contraption) continue Entities; - if (damageSource != null && !world.isRemote) { + if (damageSource != null && !world.isClientSide) { float damage = (float) MathHelper.clamp(6 * Math.pow(context.relativeMotion.length(), 0.4) + 1, 2, 10); - entity.attackEntityFrom(damageSource, damage); + entity.hurt(damageSource, damage); } - if (throwsEntities() && (world.isRemote == (entity instanceof PlayerEntity))) { + if (throwsEntities() && (world.isClientSide == (entity instanceof PlayerEntity))) { Vector3d motionBoost = context.motion.add(0, context.motion.length() / 4f, 0); int maxBoost = 4; if (motionBoost.length() > maxBoost) { motionBoost = motionBoost.subtract(motionBoost.normalize().scale(motionBoost.length() - maxBoost)); } - entity.setMotion(entity.getMotion().add(motionBoost)); - entity.velocityChanged = true; + entity.setDeltaMovement(entity.getDeltaMovement().add(motionBoost)); + entity.hurtMarked = true; } } } @@ -88,7 +88,7 @@ public class BlockBreakingMovementBehaviour extends MovementBehaviour { @Override public void stopMoving(MovementContext context) { CompoundNBT data = context.data; - if (context.world.isRemote) + if (context.world.isClientSide) return; if (!data.contains("BreakingPos")) return; @@ -102,7 +102,7 @@ public class BlockBreakingMovementBehaviour extends MovementBehaviour { data.remove("BreakingPos"); context.stall = false; - world.sendBlockBreakProgress(id, breakingPos, -1); + world.destroyBlockProgress(id, breakingPos, -1); } @Override @@ -129,7 +129,7 @@ public class BlockBreakingMovementBehaviour extends MovementBehaviour { public void tickBreaker(MovementContext context) { CompoundNBT data = context.data; - if (context.world.isRemote) + if (context.world.isClientSide) return; if (!data.contains("BreakingPos")) return; @@ -149,7 +149,7 @@ public class BlockBreakingMovementBehaviour extends MovementBehaviour { int destroyProgress = data.getInt("Progress"); int id = data.getInt("BreakerId"); BlockState stateToBreak = world.getBlockState(breakingPos); - float blockHardness = stateToBreak.getBlockHardness(world, breakingPos); + float blockHardness = stateToBreak.getDestroySpeed(world, breakingPos); if (!canBreak(world, breakingPos, stateToBreak)) { if (destroyProgress != 0) { @@ -157,7 +157,7 @@ public class BlockBreakingMovementBehaviour extends MovementBehaviour { data.remove("Progress"); data.remove("TicksUntilNextProgress"); data.remove("BreakingPos"); - world.sendBlockBreakProgress(id, breakingPos, -1); + world.destroyBlockProgress(id, breakingPos, -1); } context.stall = false; return; @@ -168,14 +168,14 @@ public class BlockBreakingMovementBehaviour extends MovementBehaviour { world.playSound(null, breakingPos, stateToBreak.getSoundType().getHitSound(), SoundCategory.NEUTRAL, .25f, 1); if (destroyProgress >= 10) { - world.sendBlockBreakProgress(id, breakingPos, -1); + world.destroyBlockProgress(id, breakingPos, -1); // break falling blocks from top to bottom BlockPos ogPos = breakingPos; - BlockState stateAbove = world.getBlockState(breakingPos.up()); + BlockState stateAbove = world.getBlockState(breakingPos.above()); while (stateAbove.getBlock() instanceof FallingBlock) { - breakingPos = breakingPos.up(); - stateAbove = world.getBlockState(breakingPos.up()); + breakingPos = breakingPos.above(); + stateAbove = world.getBlockState(breakingPos.above()); } stateToBreak = world.getBlockState(breakingPos); @@ -191,7 +191,7 @@ public class BlockBreakingMovementBehaviour extends MovementBehaviour { } ticksUntilNextProgress = (int) (blockHardness / breakSpeed); - world.sendBlockBreakProgress(id, breakingPos, (int) destroyProgress); + world.destroyBlockProgress(id, breakingPos, (int) destroyProgress); data.putInt("TicksUntilNextProgress", ticksUntilNextProgress); data.putInt("Progress", destroyProgress); } @@ -201,7 +201,7 @@ public class BlockBreakingMovementBehaviour extends MovementBehaviour { } public boolean canBreak(World world, BlockPos breakingPos, BlockState state) { - float blockHardness = state.getBlockHardness(world, breakingPos); + float blockHardness = state.getDestroySpeed(world, breakingPos); return BlockBreakingKineticTileEntity.isBreakable(state, blockHardness); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/CampfireMovementBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/CampfireMovementBehaviour.java index e27cffee5..39ac14bce 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/CampfireMovementBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/CampfireMovementBehaviour.java @@ -16,20 +16,20 @@ public class CampfireMovementBehaviour extends MovementBehaviour { @Override public void tick(MovementContext context) { - if (context.world == null || !context.world.isRemote || context.position == null - || !context.state.get(CampfireBlock.LIT)) + if (context.world == null || !context.world.isClientSide || context.position == null + || !context.state.getValue(CampfireBlock.LIT)) return; // Mostly copied from CampfireBlock and CampfireTileEntity - Random random = context.world.rand; + Random random = context.world.random; if (random.nextFloat() < 0.11F) { for (int i = 0; i < random.nextInt(2) + 2; ++i) { - context.world.addOptionalParticle( - context.state.get(CampfireBlock.SIGNAL_FIRE) ? ParticleTypes.CAMPFIRE_SIGNAL_SMOKE + context.world.addAlwaysVisibleParticle( + context.state.getValue(CampfireBlock.SIGNAL_FIRE) ? ParticleTypes.CAMPFIRE_SIGNAL_SMOKE : ParticleTypes.CAMPFIRE_COSY_SMOKE, - true, context.position.getX() + random.nextDouble() / (random.nextBoolean() ? 3D : -3D), - context.position.getY() + random.nextDouble() + random.nextDouble(), - context.position.getZ() + random.nextDouble() / (random.nextBoolean() ? 3D : -3D), 0.0D, 0.07D, + true, context.position.x() + random.nextDouble() / (random.nextBoolean() ? 3D : -3D), + context.position.y() + random.nextDouble() + random.nextDouble(), + context.position.z() + random.nextDouble() / (random.nextBoolean() ? 3D : -3D), 0.0D, 0.07D, 0.0D); } } 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 316d7eed2..c1458d1e4 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 @@ -26,7 +26,7 @@ public class DrillActorInstance extends ActorInstance { BlockState state = context.state; - facing = state.get(DrillBlock.FACING); + facing = state.getValue(DrillBlock.FACING); Direction.Axis axis = facing.getAxis(); float eulerX = AngleHelper.verticalAngle(facing); @@ -35,7 +35,7 @@ public class DrillActorInstance extends ActorInstance { if (axis == Direction.Axis.Y) eulerY = 0; else - eulerY = facing.getHorizontalAngle() + ((axis == Direction.Axis.X) ? 180 : 0); + eulerY = facing.toYRot() + ((axis == Direction.Axis.X) ? 180 : 0); drillHead = instanceMaterial.getModel(AllBlockPartials.DRILL_HEAD, state).createInstance(); diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/DrillBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/DrillBlock.java index b7c9d029a..65efab837 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/DrillBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/DrillBlock.java @@ -27,10 +27,12 @@ import net.minecraft.world.IBlockReader; import net.minecraft.world.IWorldReader; import net.minecraft.world.World; +import net.minecraft.block.AbstractBlock.Properties; + @ParametersAreNonnullByDefault @MethodsReturnNonnullByDefault public class DrillBlock extends DirectionalKineticBlock implements ITE { - public static DamageSource damageSourceDrill = new DamageSource("create.mechanical_drill").setDamageBypassesArmor(); + public static DamageSource damageSourceDrill = new DamageSource("create.mechanical_drill").bypassArmor(); public DrillBlock(Properties properties) { super(properties); @@ -42,15 +44,15 @@ public class DrillBlock extends DirectionalKineticBlock implements ITE { if (te.getSpeed() == 0) return; - entityIn.attackEntityFrom(damageSourceDrill, (float) getDamage(te.getSpeed())); + entityIn.hurt(damageSourceDrill, (float) getDamage(te.getSpeed())); }); } @@ -61,7 +63,7 @@ public class DrillBlock extends DirectionalKineticBlock implements ITE getModel() { BlockState referenceState = tile.getBlockState(); - Direction facing = referenceState.get(FACING); + Direction facing = referenceState.getValue(FACING); return getRotatingMaterial().getModel(AllBlockPartials.DRILL_HEAD, referenceState, facing); } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/DrillMovementBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/DrillMovementBehaviour.java index cda9e9a75..ad88f0c32 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/DrillMovementBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/DrillMovementBehaviour.java @@ -23,14 +23,14 @@ public class DrillMovementBehaviour extends BlockBreakingMovementBehaviour { @Override public boolean isActive(MovementContext context) { - return !VecHelper.isVecPointingTowards(context.relativeMotion, context.state.get(DrillBlock.FACING) + return !VecHelper.isVecPointingTowards(context.relativeMotion, context.state.getValue(DrillBlock.FACING) .getOpposite()); } @Override public Vector3d getActiveAreaOffset(MovementContext context) { - return Vector3d.of(context.state.get(DrillBlock.FACING) - .getDirectionVec()).scale(.65f); + return Vector3d.atLowerCornerOf(context.state.getValue(DrillBlock.FACING) + .getNormal()).scale(.65f); } @Override diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/DrillRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/DrillRenderer.java index df1e668d9..af8bd9be0 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/DrillRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/DrillRenderer.java @@ -36,7 +36,7 @@ public class DrillRenderer extends KineticTileEntityRenderer { ContraptionMatrices matrices, IRenderTypeBuffer buffer) { BlockState state = context.state; SuperByteBuffer superBuffer = PartialBufferer.get(AllBlockPartials.DRILL_HEAD, state); - Direction facing = state.get(DrillBlock.FACING); + Direction facing = state.getValue(DrillBlock.FACING); float speed = (float) (context.contraption.stalled || !VecHelper.isVecPointingTowards(context.relativeMotion, facing @@ -45,7 +45,7 @@ public class DrillRenderer extends KineticTileEntityRenderer { float angle = (float) (((time * speed) % 360)); MatrixStack m = matrices.contraptionStack; - m.push(); + m.pushPose(); MatrixStacker.of(m) .centre() .rotateY(AngleHelper.horizontalAngle(facing)) @@ -57,9 +57,9 @@ public class DrillRenderer extends KineticTileEntityRenderer { .transform(m) .light(matrices.entityMatrix, ContraptionRenderDispatcher.getContraptionWorldLight(context, renderWorld)) - .renderInto(matrices.entityStack, buffer.getBuffer(RenderType.getSolid())); + .renderInto(matrices.entityStack, buffer.getBuffer(RenderType.solid())); - m.pop(); + m.popPose(); } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/DrillTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/DrillTileEntity.java index 065d18491..6c124890e 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/DrillTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/DrillTileEntity.java @@ -11,7 +11,7 @@ public class DrillTileEntity extends BlockBreakingKineticTileEntity { @Override protected BlockPos getBreakingPos() { - return getPos().offset(getBlockState().get(DrillBlock.FACING)); + return getBlockPos().relative(getBlockState().getValue(DrillBlock.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 fafd7c7e2..e3b7235ea 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 @@ -40,11 +40,11 @@ public class HarvesterActorInstance extends ActorInstance { BlockState state = context.state; - facing = state.get(HORIZONTAL_FACING); + facing = state.getValue(HORIZONTAL_FACING); harvester = instanceMaterial.getModel(AllBlockPartials.HARVESTER_BLADE, state).createInstance(); - horizontalAngle = facing.getHorizontalAngle() + ((facing.getAxis() == Direction.Axis.X) ? 180 : 0); + horizontalAngle = facing.toYRot() + ((facing.getAxis() == Direction.Axis.X) ? 180 : 0); harvester.setBlockLight(localBlockLight()); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/HarvesterBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/HarvesterBlock.java index 8f6182917..978928e91 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/HarvesterBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/HarvesterBlock.java @@ -6,6 +6,8 @@ import net.minecraft.block.BlockState; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.IBlockReader; +import net.minecraft.block.AbstractBlock.Properties; + public class HarvesterBlock extends AttachedActorBlock { public HarvesterBlock(Properties p_i48377_1_) { diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/HarvesterMovementBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/HarvesterMovementBehaviour.java index 0aed0b128..fdb268f4e 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/HarvesterMovementBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/HarvesterMovementBehaviour.java @@ -1,6 +1,6 @@ package com.simibubi.create.content.contraptions.components.actors; -import static net.minecraft.block.HorizontalBlock.HORIZONTAL_FACING; +import static net.minecraft.block.HorizontalBlock.FACING; import javax.annotation.Nullable; @@ -38,7 +38,7 @@ public class HarvesterMovementBehaviour extends MovementBehaviour { @Override public boolean isActive(MovementContext context) { - return !VecHelper.isVecPointingTowards(context.relativeMotion, context.state.get(HORIZONTAL_FACING) + return !VecHelper.isVecPointingTowards(context.relativeMotion, context.state.getValue(FACING) .getOpposite()); } @@ -62,8 +62,8 @@ public class HarvesterMovementBehaviour extends MovementBehaviour { @Override public Vector3d getActiveAreaOffset(MovementContext context) { - return Vector3d.of(context.state.get(HORIZONTAL_FACING) - .getDirectionVec()) + return Vector3d.atLowerCornerOf(context.state.getValue(FACING) + .getNormal()) .scale(.45); } @@ -73,7 +73,7 @@ public class HarvesterMovementBehaviour extends MovementBehaviour { BlockState stateVisited = world.getBlockState(pos); boolean notCropButCuttable = false; - if (world.isRemote) + if (world.isClientSide) return; if (!isValidCrop(world, pos, stateVisited)) { @@ -86,14 +86,14 @@ public class HarvesterMovementBehaviour extends MovementBehaviour { MutableBoolean seedSubtracted = new MutableBoolean(notCropButCuttable); BlockState state = stateVisited; BlockHelper.destroyBlock(world, pos, 1, stack -> { - if (!seedSubtracted.getValue() && stack.isItemEqual(new ItemStack(state.getBlock()))) { + if (!seedSubtracted.getValue() && stack.sameItem(new ItemStack(state.getBlock()))) { stack.shrink(1); seedSubtracted.setTrue(); } dropItem(context, stack); }); - world.setBlockState(pos, cutCrop(world, pos, stateVisited)); + world.setBlockAndUpdate(pos, cutCrop(world, pos, stateVisited)); } private boolean isValidCrop(World world, BlockPos pos, BlockState state) { @@ -109,10 +109,10 @@ public class HarvesterMovementBehaviour extends MovementBehaviour { if (!(property instanceof IntegerProperty)) continue; if (!property.getName() - .equals(BlockStateProperties.AGE_0_1.getName())) + .equals(BlockStateProperties.AGE_1.getName())) continue; - if (((IntegerProperty) property).getAllowedValues() - .size() - 1 != state.get((IntegerProperty) property) + if (((IntegerProperty) property).getPossibleValues() + .size() - 1 != state.getValue((IntegerProperty) property) .intValue()) continue; return true; @@ -139,7 +139,7 @@ public class HarvesterMovementBehaviour extends MovementBehaviour { if (!(property instanceof IntegerProperty)) continue; if (!property.getName() - .equals(BlockStateProperties.AGE_0_1.getName())) + .equals(BlockStateProperties.AGE_1.getName())) continue; return false; } @@ -155,17 +155,17 @@ public class HarvesterMovementBehaviour extends MovementBehaviour { Block block = state.getBlock(); if (block instanceof CropsBlock) { CropsBlock crop = (CropsBlock) block; - return crop.withAge(0); + return crop.getStateForAge(0); } if (block == Blocks.SWEET_BERRY_BUSH) { - return state.with(BlockStateProperties.AGE_0_3, Integer.valueOf(1)); + return state.setValue(BlockStateProperties.AGE_3, Integer.valueOf(1)); } if (block == Blocks.SUGAR_CANE || block == Blocks.KELP) { if (state.getFluidState() .isEmpty()) - return Blocks.AIR.getDefaultState(); + return Blocks.AIR.defaultBlockState(); return state.getFluidState() - .getBlockState(); + .createLegacyBlock(); } if (state.getCollisionShape(world, pos) .isEmpty() || block instanceof CocoaBlock) { @@ -173,17 +173,17 @@ public class HarvesterMovementBehaviour extends MovementBehaviour { if (!(property instanceof IntegerProperty)) continue; if (!property.getName() - .equals(BlockStateProperties.AGE_0_1.getName())) + .equals(BlockStateProperties.AGE_1.getName())) continue; - return state.with((IntegerProperty) property, Integer.valueOf(0)); + return state.setValue((IntegerProperty) property, Integer.valueOf(0)); } } if (state.getFluidState() .isEmpty()) - return Blocks.AIR.getDefaultState(); + return Blocks.AIR.defaultBlockState(); return state.getFluidState() - .getBlockState(); + .createLegacyBlock(); } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/HarvesterRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/HarvesterRenderer.java index 652e42e85..79eee6a0a 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/HarvesterRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/HarvesterRenderer.java @@ -35,16 +35,16 @@ public class HarvesterRenderer extends SafeTileEntityRenderer dropItem(context, s)); @@ -108,7 +108,7 @@ public class PloughMovementBehaviour extends BlockBreakingMovementBehaviour { private PloughFakePlayer getPlayer(MovementContext context) { if (!(context.temporaryData instanceof PloughFakePlayer) && context.world != null) { PloughFakePlayer player = new PloughFakePlayer((ServerWorld) context.world); - player.setHeldItem(Hand.MAIN_HAND, new ItemStack(Items.DIAMOND_HOE)); + player.setItemInHand(Hand.MAIN_HAND, new ItemStack(Items.DIAMOND_HOE)); context.temporaryData = player; } return (PloughFakePlayer) context.temporaryData; diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/PortableFluidInterfaceTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/PortableFluidInterfaceTileEntity.java index 1559bd22d..51de4cc00 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/PortableFluidInterfaceTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/PortableFluidInterfaceTileEntity.java @@ -10,6 +10,8 @@ import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.capability.IFluidHandler; import net.minecraftforge.fluids.capability.templates.FluidTank; +import net.minecraftforge.fluids.capability.IFluidHandler.FluidAction; + public class PortableFluidInterfaceTileEntity extends PortableStorageInterfaceTileEntity { protected LazyOptional capability; diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/PortableStorageInterfaceBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/PortableStorageInterfaceBlock.java index 7afae49c4..41263760d 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/PortableStorageInterfaceBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/PortableStorageInterfaceBlock.java @@ -18,6 +18,8 @@ import net.minecraft.util.math.shapes.VoxelShape; import net.minecraft.world.IBlockReader; import net.minecraft.world.World; +import net.minecraft.block.AbstractBlock.Properties; + @ParametersAreNonnullByDefault @MethodsReturnNonnullByDefault public class PortableStorageInterfaceBlock extends ProperDirectionalBlock @@ -57,22 +59,22 @@ public class PortableStorageInterfaceBlock extends ProperDirectionalBlock @Override public BlockState getStateForPlacement(BlockItemUseContext context) { - return getDefaultState().with(FACING, context.getNearestLookingDirection() + return defaultBlockState().setValue(FACING, context.getNearestLookingDirection() .getOpposite()); } @Override public VoxelShape getShape(BlockState state, IBlockReader worldIn, BlockPos pos, ISelectionContext context) { - return AllShapes.PORTABLE_STORAGE_INTERFACE.get(state.get(FACING)); + return AllShapes.PORTABLE_STORAGE_INTERFACE.get(state.getValue(FACING)); } @Override - public boolean hasComparatorInputOverride(BlockState state) { + public boolean hasAnalogOutputSignal(BlockState state) { return true; } @Override - public int getComparatorInputOverride(BlockState blockState, World worldIn, BlockPos pos) { + public int getAnalogOutputSignal(BlockState blockState, World worldIn, BlockPos pos) { return getTileEntityOptional(worldIn, pos).map(te -> te.isConnected() ? 15 : 0) .orElse(0); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/PortableStorageInterfaceMovement.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/PortableStorageInterfaceMovement.java index 6bd6b8f13..c0d2a2a19 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/PortableStorageInterfaceMovement.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/PortableStorageInterfaceMovement.java @@ -26,8 +26,8 @@ public class PortableStorageInterfaceMovement extends MovementBehaviour { @Override public Vector3d getActiveAreaOffset(MovementContext context) { - return Vector3d.of(context.state.get(PortableStorageInterfaceBlock.FACING) - .getDirectionVec()).scale(1.85f); + return Vector3d.atLowerCornerOf(context.state.getValue(PortableStorageInterfaceBlock.FACING) + .getNormal()).scale(1.85f); } @Override @@ -55,13 +55,13 @@ public class PortableStorageInterfaceMovement extends MovementBehaviour { if (psi == null) return false; - if ((psi.isTransferring() || psi.isPowered()) && !context.world.isRemote) + if ((psi.isTransferring() || psi.isPowered()) && !context.world.isClientSide) return false; - context.data.put(_workingPos_, NBTUtil.writeBlockPos(psi.getPos())); - if (!context.world.isRemote) { - Vector3d diff = VecHelper.getCenterOf(psi.getPos()) + context.data.put(_workingPos_, NBTUtil.writeBlockPos(psi.getBlockPos())); + if (!context.world.isClientSide) { + Vector3d diff = VecHelper.getCenterOf(psi.getBlockPos()) .subtract(context.position); - diff = VecHelper.project(diff, Vector3d.of(currentFacing.getDirectionVec())); + diff = VecHelper.project(diff, Vector3d.atLowerCornerOf(currentFacing.getNormal())); float distance = (float) (diff.length() + 1.85f - 1); psi.startTransferringTo(context.contraption, distance); } else { @@ -72,7 +72,7 @@ public class PortableStorageInterfaceMovement extends MovementBehaviour { @Override public void tick(MovementContext context) { - if (context.world.isRemote) { + if (context.world.isClientSide) { boolean stalled = context.contraption.stalled; if (stalled && !context.data.contains(_workingPos_)) { BlockPos pos = new BlockPos(context.position); @@ -117,7 +117,7 @@ public class PortableStorageInterfaceMovement extends MovementBehaviour { Direction facing) { for (int i = 0; i < 2; i++) { PortableStorageInterfaceTileEntity interfaceAt = - getStationaryInterfaceAt(world, pos.offset(facing, i), state, facing); + getStationaryInterfaceAt(world, pos.relative(facing, i), state, facing); if (interfaceAt == null) continue; return interfaceAt; @@ -127,23 +127,23 @@ public class PortableStorageInterfaceMovement extends MovementBehaviour { private PortableStorageInterfaceTileEntity getStationaryInterfaceAt(World world, BlockPos pos, BlockState state, Direction facing) { - TileEntity te = world.getTileEntity(pos); + TileEntity te = world.getBlockEntity(pos); if (!(te instanceof PortableStorageInterfaceTileEntity)) return null; BlockState blockState = world.getBlockState(pos); if (blockState.getBlock() != state.getBlock()) return null; - if (blockState.get(PortableStorageInterfaceBlock.FACING) != facing.getOpposite()) + if (blockState.getValue(PortableStorageInterfaceBlock.FACING) != facing.getOpposite()) return null; return (PortableStorageInterfaceTileEntity) te; } private Optional getCurrentFacingIfValid(MovementContext context) { - Vector3d directionVec = Vector3d.of(context.state.get(PortableStorageInterfaceBlock.FACING) - .getDirectionVec()); + Vector3d directionVec = Vector3d.atLowerCornerOf(context.state.getValue(PortableStorageInterfaceBlock.FACING) + .getNormal()); directionVec = context.rotation.apply(directionVec); - Direction facingFromVector = Direction.getFacingFromVector(directionVec.x, directionVec.y, directionVec.z); - if (directionVec.distanceTo(Vector3d.of(facingFromVector.getDirectionVec())) > 1 / 2f) + Direction facingFromVector = Direction.getNearest(directionVec.x, directionVec.y, directionVec.z); + if (directionVec.distanceTo(Vector3d.atLowerCornerOf(facingFromVector.getNormal())) > 1 / 2f) return Optional.empty(); return Optional.of(facingFromVector); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/PortableStorageInterfaceRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/PortableStorageInterfaceRenderer.java index 287b2314f..edf462cb4 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/PortableStorageInterfaceRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/PortableStorageInterfaceRenderer.java @@ -37,7 +37,7 @@ public class PortableStorageInterfaceRenderer extends SafeTileEntityRenderer sbb.light(light) .renderInto(ms, vb)); } @@ -46,7 +46,7 @@ public class PortableStorageInterfaceRenderer extends SafeTileEntityRenderer dynamicTree = TreeCutter.findDynamicTree(brokenState.getBlock(), pos); @@ -80,8 +80,8 @@ public class SawMovementBehaviour extends BlockBreakingMovementBehaviour { Vector3d dropPos = VecHelper.getCenterOf(pos); float distance = (float) dropPos.distanceTo(context.position); ItemEntity entity = new ItemEntity(world, dropPos.x, dropPos.y, dropPos.z, remainder); - entity.setMotion(context.relativeMotion.scale(distance / 20f)); - world.addEntity(entity); + entity.setDeltaMovement(context.relativeMotion.scale(distance / 20f)); + world.addFreshEntity(entity); } @Override diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/SeatBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/SeatBlock.java index bd2f0001c..048ee7125 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/SeatBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/SeatBlock.java @@ -33,6 +33,8 @@ import net.minecraft.util.math.shapes.VoxelShape; import net.minecraft.world.IBlockReader; import net.minecraft.world.World; +import net.minecraft.block.AbstractBlock.Properties; + @ParametersAreNonnullByDefault @MethodsReturnNonnullByDefault public class SeatBlock extends Block { @@ -45,28 +47,28 @@ public class SeatBlock extends Block { } @Override - public void fillItemGroup(ItemGroup group, NonNullList p_149666_2_) { - if (group != ItemGroup.SEARCH && !inCreativeTab) + public void fillItemCategory(ItemGroup group, NonNullList p_149666_2_) { + if (group != ItemGroup.TAB_SEARCH && !inCreativeTab) return; - super.fillItemGroup(group, p_149666_2_); + super.fillItemCategory(group, p_149666_2_); } @Override - public void onFallenUpon(World p_180658_1_, BlockPos p_180658_2_, Entity p_180658_3_, float p_180658_4_) { - super.onFallenUpon(p_180658_1_, p_180658_2_, p_180658_3_, p_180658_4_ * 0.5F); + public void fallOn(World p_180658_1_, BlockPos p_180658_2_, Entity p_180658_3_, float p_180658_4_) { + super.fallOn(p_180658_1_, p_180658_2_, p_180658_3_, p_180658_4_ * 0.5F); } @Override - public void onLanded(IBlockReader reader, Entity entity) { - BlockPos pos = entity.getBlockPos(); - if (entity instanceof PlayerEntity || !(entity instanceof LivingEntity) || !canBePickedUp(entity) || isSeatOccupied(entity.world, pos)) { - Blocks.PINK_BED.onLanded(reader, entity); + public void updateEntityAfterFallOn(IBlockReader reader, Entity entity) { + BlockPos pos = entity.blockPosition(); + if (entity instanceof PlayerEntity || !(entity instanceof LivingEntity) || !canBePickedUp(entity) || isSeatOccupied(entity.level, pos)) { + Blocks.PINK_BED.updateEntityAfterFallOn(reader, entity); return; } if (reader.getBlockState(pos) .getBlock() != this) return; - sitDown(entity.world, pos, entity); + sitDown(entity.level, pos, entity); } @Override @@ -88,46 +90,46 @@ public class SeatBlock extends Block { } @Override - public ActionResultType onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, + public ActionResultType use(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockRayTraceResult p_225533_6_) { - if (player.isSneaking()) + if (player.isShiftKeyDown()) return ActionResultType.PASS; - ItemStack heldItem = player.getHeldItem(hand); + ItemStack heldItem = player.getItemInHand(hand); for (DyeColor color : DyeColor.values()) { if (!heldItem.getItem() - .isIn(DyeHelper.getTagOfDye(color))) + .is(DyeHelper.getTagOfDye(color))) continue; - if (world.isRemote) + if (world.isClientSide) return ActionResultType.SUCCESS; BlockState newState = AllBlocks.SEATS.get(color).getDefaultState(); if (newState != state) - world.setBlockState(pos, newState); + world.setBlockAndUpdate(pos, newState); return ActionResultType.SUCCESS; } - List seats = world.getEntitiesWithinAABB(SeatEntity.class, new AxisAlignedBB(pos)); + List seats = world.getEntitiesOfClass(SeatEntity.class, new AxisAlignedBB(pos)); if (!seats.isEmpty()) { SeatEntity seatEntity = seats.get(0); List passengers = seatEntity.getPassengers(); if (!passengers.isEmpty() && passengers.get(0) instanceof PlayerEntity) return ActionResultType.PASS; - if (!world.isRemote) { - seatEntity.removePassengers(); + if (!world.isClientSide) { + seatEntity.ejectPassengers(); player.startRiding(seatEntity); } return ActionResultType.SUCCESS; } - if (world.isRemote) + if (world.isClientSide) return ActionResultType.SUCCESS; sitDown(world, pos, player); return ActionResultType.SUCCESS; } public static boolean isSeatOccupied(World world, BlockPos pos) { - return !world.getEntitiesWithinAABB(SeatEntity.class, new AxisAlignedBB(pos)) + return !world.getEntitiesOfClass(SeatEntity.class, new AxisAlignedBB(pos)) .isEmpty(); } @@ -136,16 +138,16 @@ public class SeatBlock extends Block { } public static void sitDown(World world, BlockPos pos, Entity entity) { - if (world.isRemote) + if (world.isClientSide) return; SeatEntity seat = new SeatEntity(world, pos); - seat.setPos(pos.getX() + .5f, pos.getY(), pos.getZ() + .5f); - world.addEntity(seat); + seat.setPosRaw(pos.getX() + .5f, pos.getY(), pos.getZ() + .5f); + world.addFreshEntity(seat); entity.startRiding(seat, true); } @Override - public boolean allowsMovement(BlockState state, IBlockReader reader, BlockPos pos, PathType type) { + public boolean isPathfindable(BlockState state, IBlockReader reader, BlockPos pos, PathType type) { return false; } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/SeatEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/SeatEntity.java index b5dea8fcd..9777aedd8 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/SeatEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/SeatEntity.java @@ -27,13 +27,13 @@ public class SeatEntity extends Entity implements IEntityAdditionalSpawnData { public SeatEntity(World world, BlockPos pos) { this(AllEntityTypes.SEAT.get(), world); - noClip = true; + noPhysics = true; } public static EntityType.Builder build(EntityType.Builder builder) { @SuppressWarnings("unchecked") EntityType.Builder entityBuilder = (EntityType.Builder) builder; - return entityBuilder.size(0.25f, 0.35f); + return entityBuilder.sized(0.25f, 0.35f); } @Override @@ -42,29 +42,29 @@ public class SeatEntity extends Entity implements IEntityAdditionalSpawnData { } @Override - public void setPos(double x, double y, double z) { - super.setPos(x, y, z); + public void setPosRaw(double x, double y, double z) { + super.setPosRaw(x, y, z); AxisAlignedBB bb = getBoundingBox(); Vector3d diff = new Vector3d(x, y, z).subtract(bb.getCenter()); - setBoundingBox(bb.offset(diff)); + setBoundingBox(bb.move(diff)); } @Override - public void setMotion(Vector3d p_213317_1_) {} + public void setDeltaMovement(Vector3d p_213317_1_) {} @Override public void tick() { - if (world.isRemote) + if (level.isClientSide) return; - boolean blockPresent = world.getBlockState(getBlockPos()) + boolean blockPresent = level.getBlockState(blockPosition()) .getBlock() instanceof SeatBlock; - if (isBeingRidden() && blockPresent) + if (isVehicle() && blockPresent) return; this.remove(); } @Override - protected boolean canBeRidden(Entity entity) { + protected boolean canRide(Entity entity) { // Fake Players (tested with deployers) have a BUNCH of weird issues, don't let them ride seats return !(entity instanceof FakePlayer); } @@ -72,21 +72,21 @@ public class SeatEntity extends Entity implements IEntityAdditionalSpawnData { @Override protected void removePassenger(Entity entity) { super.removePassenger(entity); - Vector3d pos = entity.getPositionVec(); - entity.setPosition(pos.x, pos.y + 0.85f, pos.z); + Vector3d pos = entity.position(); + entity.setPos(pos.x, pos.y + 0.85f, pos.z); } @Override - protected void registerData() {} + protected void defineSynchedData() {} @Override - protected void readAdditional(CompoundNBT p_70037_1_) {} + protected void readAdditionalSaveData(CompoundNBT p_70037_1_) {} @Override - protected void writeAdditional(CompoundNBT p_213281_1_) {} + protected void addAdditionalSaveData(CompoundNBT p_213281_1_) {} @Override - public IPacket createSpawnPacket() { + public IPacket getAddEntityPacket() { return NetworkHooks.getEntitySpawningPacket(this); } @@ -102,7 +102,7 @@ public class SeatEntity extends Entity implements IEntityAdditionalSpawnData { } @Override - public ResourceLocation getEntityTexture(SeatEntity p_110775_1_) { + public ResourceLocation getTextureLocation(SeatEntity p_110775_1_) { return null; } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/SeatMovementBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/SeatMovementBehaviour.java index e2143baf2..84776eb68 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/SeatMovementBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/SeatMovementBehaviour.java @@ -40,8 +40,8 @@ public class SeatMovementBehaviour extends MovementBehaviour { Map seatMapping = context.contraption.getSeatMapping(); BlockState blockState = context.world.getBlockState(pos); - boolean slab = blockState.getBlock() instanceof SlabBlock && blockState.get(SlabBlock.TYPE) == SlabType.BOTTOM; - boolean solid = blockState.isSolid() || slab; + boolean slab = blockState.getBlock() instanceof SlabBlock && blockState.getValue(SlabBlock.TYPE) == SlabType.BOTTOM; + boolean solid = blockState.canOcclude() || slab; // Occupied if (seatMapping.containsValue(index)) { @@ -53,7 +53,7 @@ public class SeatMovementBehaviour extends MovementBehaviour { continue; for (Entity entity : contraptionEntity.getPassengers()) { if (!entry.getKey() - .equals(entity.getUniqueID())) + .equals(entity.getUUID())) continue; toDismount = entity; } @@ -62,7 +62,7 @@ public class SeatMovementBehaviour extends MovementBehaviour { toDismount.stopRiding(); Vector3d position = VecHelper.getCenterOf(pos) .add(0, slab ? .5f : 1f, 0); - toDismount.setPositionAndUpdate(position.x, position.y, position.z); + toDismount.teleportTo(position.x, position.y, position.z); toDismount.getPersistentData() .remove("ContraptionDismountLocation"); } @@ -72,8 +72,8 @@ public class SeatMovementBehaviour extends MovementBehaviour { if (solid) return; - List nearbyEntities = context.world.getEntitiesWithinAABB(Entity.class, - new AxisAlignedBB(pos).shrink(1 / 16f), SeatBlock::canBePickedUp); + List nearbyEntities = context.world.getEntitiesOfClass(Entity.class, + new AxisAlignedBB(pos).deflate(1 / 16f), SeatBlock::canBePickedUp); if (!nearbyEntities.isEmpty()) contraptionEntity.addSittingPassenger(nearbyEntities.get(0), index); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/ContraptionBlockSource.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/ContraptionBlockSource.java index 57bfc9449..d7660c434 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/ContraptionBlockSource.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/ContraptionBlockSource.java @@ -31,42 +31,42 @@ public class ContraptionBlockSource implements IBlockSource { } @Override - public double getX() { + public double x() { return (double)this.pos.getX() + 0.5D; } @Override - public double getY() { + public double y() { return (double)this.pos.getY() + 0.5D; } @Override - public double getZ() { + public double z() { return (double)this.pos.getZ() + 0.5D; } @Override - public BlockPos getBlockPos() { + public BlockPos getPos() { return pos; } @Override public BlockState getBlockState() { - if(context.state.contains(BlockStateProperties.FACING) && overrideFacing != null) - return context.state.with(BlockStateProperties.FACING, overrideFacing); + if(context.state.hasProperty(BlockStateProperties.FACING) && overrideFacing != null) + return context.state.setValue(BlockStateProperties.FACING, overrideFacing); return context.state; } @Override @Nullable - public T getBlockTileEntity() { + public T getEntity() { return null; } @Override @Nullable - public ServerWorld getWorld() { + public ServerWorld getLevel() { MinecraftServer server = context.world.getServer(); - return server != null ? server.getWorld(context.world.getRegistryKey()) : null; + return server != null ? server.getLevel(context.world.dimension()) : null; } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/DispenserMovementBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/DispenserMovementBehaviour.java index 39837a67f..70b70d49c 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/DispenserMovementBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/DispenserMovementBehaviour.java @@ -19,6 +19,8 @@ import net.minecraft.util.Direction; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.vector.Vector3d; +import net.minecraft.block.AbstractBlock; + public class DispenserMovementBehaviour extends DropperMovementBehaviour { private static final HashMap MOVED_DISPENSE_ITEM_BEHAVIOURS = new HashMap<>(); private static final HashMap MOVED_PROJECTILE_DISPENSE_BEHAVIOURS = new HashMap<>(); @@ -42,7 +44,7 @@ public class DispenserMovementBehaviour extends DropperMovementBehaviour { DispenseItemLocation location = getDispenseLocation(context); if (location.isEmpty()) { - context.world.playEvent(1001, pos, 0); + context.world.levelEvent(1001, pos, 0); } else { ItemStack itemstack = getItemStackAt(location, context); // Special dispense item behaviour for moving contraptions @@ -59,7 +61,7 @@ public class DispenserMovementBehaviour extends DropperMovementBehaviour { return; } - IDispenseItemBehavior idispenseitembehavior = BEHAVIOUR_LOOKUP.getBehavior(itemstack); + IDispenseItemBehavior idispenseitembehavior = BEHAVIOUR_LOOKUP.getDispenseMethod(itemstack); if (idispenseitembehavior instanceof ProjectileDispenseBehavior) { // Projectile behaviours can be converted most of the time IMovedDispenseItemBehaviour iMovedDispenseItemBehaviour = MovedProjectileDispenserBehaviour.of((ProjectileDispenseBehavior) idispenseitembehavior); setItemStackAt(location, iMovedDispenseItemBehaviour.dispense(itemstack, context, pos), context); @@ -67,10 +69,10 @@ public class DispenserMovementBehaviour extends DropperMovementBehaviour { return; } - Vector3d facingVec = Vector3d.of(context.state.get(DispenserBlock.FACING).getDirectionVec()); + Vector3d facingVec = Vector3d.atLowerCornerOf(context.state.getValue(DispenserBlock.FACING).getNormal()); facingVec = context.rotation.apply(facingVec); facingVec.normalize(); - Direction clostestFacing = Direction.getFacingFromVector(facingVec.x, facingVec.y, facingVec.z); + Direction clostestFacing = Direction.getNearest(facingVec.x, facingVec.y, facingVec.z); ContraptionBlockSource blockSource = new ContraptionBlockSource(context, pos, clostestFacing); if (idispenseitembehavior.getClass() != DefaultDispenseItemBehavior.class) { // There is a dispense item behaviour registered for the vanilla dispenser @@ -89,11 +91,11 @@ public class DispenserMovementBehaviour extends DropperMovementBehaviour { @MethodsReturnNonnullByDefault private static class DispenserLookup extends DispenserBlock { protected DispenserLookup() { - super(Block.Properties.from(Blocks.DISPENSER)); + super(AbstractBlock.Properties.copy(Blocks.DISPENSER)); } - public IDispenseItemBehavior getBehavior(ItemStack itemStack) { - return super.getBehavior(itemStack); + public IDispenseItemBehavior getDispenseMethod(ItemStack itemStack) { + return super.getDispenseMethod(itemStack); } } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/DropperMovementBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/DropperMovementBehaviour.java index 27aa13c60..e9771be43 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/DropperMovementBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/DropperMovementBehaviour.java @@ -21,7 +21,7 @@ public class DropperMovementBehaviour extends MovementBehaviour { protected void activate(MovementContext context, BlockPos pos) { DispenseItemLocation location = getDispenseLocation(context); if (location.isEmpty()) { - context.world.playEvent(1001, pos, 0); + context.world.levelEvent(1001, pos, 0); } else { setItemStackAt(location, defaultBehaviour.dispense(getItemStackAt(location, context), context, pos), context); } @@ -29,7 +29,7 @@ public class DropperMovementBehaviour extends MovementBehaviour { @Override public void visitNewPosition(MovementContext context, BlockPos pos) { - if (context.world.isRemote) + if (context.world.isClientSide) return; collectItems(context); activate(context, pos); @@ -37,7 +37,7 @@ public class DropperMovementBehaviour extends MovementBehaviour { private void collectItems(MovementContext context) { getStacks(context).stream().filter(itemStack -> !itemStack.isEmpty() && itemStack.getItem() != Items.AIR && itemStack.getMaxStackSize() > itemStack.getCount()).forEach(itemStack -> itemStack.grow( - ItemHelper.extract(context.contraption.inventory, itemStack::isItemEqual, ItemHelper.ExtractionCountMode.UPTO, itemStack.getMaxStackSize() - itemStack.getCount(), false).getCount())); + ItemHelper.extract(context.contraption.inventory, itemStack::sameItem, ItemHelper.ExtractionCountMode.UPTO, itemStack.getMaxStackSize() - itemStack.getCount(), false).getCount())); } private void updateTemporaryData(MovementContext context) { @@ -62,7 +62,7 @@ public class DropperMovementBehaviour extends MovementBehaviour { if (testStack == null || testStack.isEmpty()) continue; if (testStack.getMaxStackSize() == 1) { - location = new DispenseItemLocation(false, ItemHelper.findFirstMatchingSlotIndex(context.contraption.inventory, testStack::isItemEqual)); + location = new DispenseItemLocation(false, ItemHelper.findFirstMatchingSlotIndex(context.contraption.inventory, testStack::sameItem)); if (!getItemStackAt(location, context).isEmpty()) useable.add(location); } else if (testStack.getCount() >= 2) diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/IMovedDispenseItemBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/IMovedDispenseItemBehaviour.java index c70c6b899..bfb7e7e9f 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/IMovedDispenseItemBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/IMovedDispenseItemBehaviour.java @@ -47,17 +47,17 @@ public interface IMovedDispenseItemBehaviour { if (context.world instanceof ServerWorld) { EntityType entityType = ((SpawnEggItem) itemStack.getItem()).getType(itemStack.getTag()); Entity spawnedEntity = entityType.spawn((ServerWorld) context.world, itemStack, null, - pos.add(facing.x + .7, facing.y + .7, facing.z + .7), SpawnReason.DISPENSER, facing.y < .5, + pos.offset(facing.x + .7, facing.y + .7, facing.z + .7), SpawnReason.DISPENSER, facing.y < .5, false); if (spawnedEntity != null) - spawnedEntity.setMotion(context.motion.scale(2)); + spawnedEntity.setDeltaMovement(context.motion.scale(2)); } itemStack.shrink(1); return itemStack; } }; - for (SpawnEggItem spawneggitem : SpawnEggItem.getEggs()) + for (SpawnEggItem spawneggitem : SpawnEggItem.eggs()) DispenserMovementBehaviour.registerMovedDispenseItemBehaviour(spawneggitem, spawnEggDispenseBehaviour); } @@ -92,10 +92,10 @@ public interface IMovedDispenseItemBehaviour { double y = pos.getY() + facing.y * .7 + .5; double z = pos.getZ() + facing.z * .7 + .5; TNTEntity tntentity = new TNTEntity(context.world, x, y, z, null); - tntentity.addVelocity(context.motion.x, context.motion.y, context.motion.z); - context.world.addEntity(tntentity); + tntentity.push(context.motion.x, context.motion.y, context.motion.z); + context.world.addFreshEntity(tntentity); context.world.playSound(null, tntentity.getX(), tntentity.getY(), tntentity.getZ(), - SoundEvents.ENTITY_TNT_PRIMED, SoundCategory.BLOCKS, 1.0F, 1.0F); + SoundEvents.TNT_PRIMED, SoundCategory.BLOCKS, 1.0F, 1.0F); itemStack.shrink(1); return itemStack; } @@ -112,14 +112,14 @@ public interface IMovedDispenseItemBehaviour { FireworkRocketEntity fireworkrocketentity = new FireworkRocketEntity(context.world, itemStack, x, y, z, true); fireworkrocketentity.shoot(facing.x, facing.y, facing.z, 0.5F, 1.0F); - context.world.addEntity(fireworkrocketentity); + context.world.addFreshEntity(fireworkrocketentity); itemStack.shrink(1); return itemStack; } @Override protected void playDispenseSound(IWorld world, BlockPos pos) { - world.playEvent(1004, pos, 0); + world.levelEvent(1004, pos, 0); } }); @@ -127,22 +127,22 @@ public interface IMovedDispenseItemBehaviour { new MovedDefaultDispenseItemBehaviour() { @Override protected void playDispenseSound(IWorld world, BlockPos pos) { - world.playEvent(1018, pos, 0); + world.levelEvent(1018, pos, 0); } @Override protected ItemStack dispenseStack(ItemStack itemStack, MovementContext context, BlockPos pos, Vector3d facing) { - Random random = context.world.rand; + Random random = context.world.random; double x = pos.getX() + facing.x * .7 + .5; double y = pos.getY() + facing.y * .7 + .5; double z = pos.getZ() + facing.z * .7 + .5; - context.world.addEntity(Util.make( + context.world.addFreshEntity(Util.make( new SmallFireballEntity(context.world, x, y, z, random.nextGaussian() * 0.05D + facing.x + context.motion.x, random.nextGaussian() * 0.05D + facing.y + context.motion.y, random.nextGaussian() * 0.05D + facing.z + context.motion.z), - (p_229425_1_) -> p_229425_1_.setStack(itemStack))); + (p_229425_1_) -> p_229425_1_.setItem(itemStack))); itemStack.shrink(1); return itemStack; } @@ -154,21 +154,21 @@ public interface IMovedDispenseItemBehaviour { protected ItemStack dispenseStack(ItemStack itemStack, MovementContext context, BlockPos pos, Vector3d facing) { this.successful = false; - BlockPos interactAt = pos.offset(getClosestFacingDirection(facing)); + BlockPos interactAt = pos.relative(getClosestFacingDirection(facing)); BlockState state = context.world.getBlockState(interactAt); Block block = state.getBlock(); - if (block.isIn(BlockTags.BEEHIVES) && state.get(BeehiveBlock.HONEY_LEVEL) >= 5) { - ((BeehiveBlock) block).takeHoney(context.world, state, interactAt, null, + if (block.is(BlockTags.BEEHIVES) && state.getValue(BeehiveBlock.HONEY_LEVEL) >= 5) { + ((BeehiveBlock) block).releaseBeesAndResetHoneyLevel(context.world, state, interactAt, null, BeehiveTileEntity.State.BEE_RELEASED); this.successful = true; return placeItemInInventory(itemStack, new ItemStack(Items.HONEY_BOTTLE), context, pos, facing); } else if (context.world.getFluidState(interactAt) - .isTagged(FluidTags.WATER)) { + .is(FluidTags.WATER)) { this.successful = true; return placeItemInInventory(itemStack, - PotionUtils.addPotionToItemStack(new ItemStack(Items.POTION), Potions.WATER), context, pos, + PotionUtils.setPotion(new ItemStack(Items.POTION), Potions.WATER), context, pos, facing); } else { return super.dispenseStack(itemStack, context, pos, facing); @@ -181,13 +181,13 @@ public interface IMovedDispenseItemBehaviour { @Override protected ItemStack dispenseStack(ItemStack itemStack, MovementContext context, BlockPos pos, Vector3d facing) { - BlockPos interactAt = pos.offset(getClosestFacingDirection(facing)); + BlockPos interactAt = pos.relative(getClosestFacingDirection(facing)); BlockState state = context.world.getBlockState(interactAt); Block block = state.getBlock(); if (block instanceof IBucketPickupHandler) { - Fluid fluid = ((IBucketPickupHandler) block).pickupFluid(context.world, interactAt, state); + Fluid fluid = ((IBucketPickupHandler) block).takeLiquid(context.world, interactAt, state); if (fluid instanceof FlowingFluid) - return placeItemInInventory(itemStack, new ItemStack(fluid.getFilledBucket()), context, pos, + return placeItemInInventory(itemStack, new ItemStack(fluid.getBucket()), context, pos, facing); } return super.dispenseStack(itemStack, context, pos, facing); diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/MovedDefaultDispenseItemBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/MovedDefaultDispenseItemBehaviour.java index 88aea0fed..d12d2d31a 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/MovedDefaultDispenseItemBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/MovedDefaultDispenseItemBehaviour.java @@ -21,32 +21,32 @@ public class MovedDefaultDispenseItemBehaviour implements IMovedDispenseItemBeha double d0 = p_82486_4_.getX() + facing.x + .5; double d1 = p_82486_4_.getY() + facing.y + .5; double d2 = p_82486_4_.getZ() + facing.z + .5; - if (Direction.getFacingFromVector(facing.x, facing.y, facing.z).getAxis() == Direction.Axis.Y) { + if (Direction.getNearest(facing.x, facing.y, facing.z).getAxis() == Direction.Axis.Y) { d1 = d1 - 0.125D; } else { d1 = d1 - 0.15625D; } ItemEntity itementity = new ItemEntity(p_82486_0_, d0, d1, d2, p_82486_1_); - double d3 = p_82486_0_.rand.nextDouble() * 0.1D + 0.2D; - itementity.setMotion(p_82486_0_.rand.nextGaussian() * (double) 0.0075F * (double) p_82486_2_ + facing.getX() * d3 + context.motion.x, p_82486_0_.rand.nextGaussian() * (double) 0.0075F * (double) p_82486_2_ + facing.getY() * d3 + context.motion.y, p_82486_0_.rand.nextGaussian() * (double) 0.0075F * (double) p_82486_2_ + facing.getZ() * d3 + context.motion.z); - p_82486_0_.addEntity(itementity); + double d3 = p_82486_0_.random.nextDouble() * 0.1D + 0.2D; + itementity.setDeltaMovement(p_82486_0_.random.nextGaussian() * (double) 0.0075F * (double) p_82486_2_ + facing.x() * d3 + context.motion.x, p_82486_0_.random.nextGaussian() * (double) 0.0075F * (double) p_82486_2_ + facing.y() * d3 + context.motion.y, p_82486_0_.random.nextGaussian() * (double) 0.0075F * (double) p_82486_2_ + facing.z() * d3 + context.motion.z); + p_82486_0_.addFreshEntity(itementity); } @Override public ItemStack dispense(ItemStack itemStack, MovementContext context, BlockPos pos) { - Vector3d facingVec = Vector3d.of(context.state.get(DispenserBlock.FACING).getDirectionVec()); + Vector3d facingVec = Vector3d.atLowerCornerOf(context.state.getValue(DispenserBlock.FACING).getNormal()); facingVec = context.rotation.apply(facingVec); facingVec.normalize(); Direction closestToFacing = getClosestFacingDirection(facingVec); - IInventory iinventory = HopperTileEntity.getInventoryAtPosition(context.world, pos.offset(closestToFacing)); + IInventory iinventory = HopperTileEntity.getContainerAt(context.world, pos.relative(closestToFacing)); if (iinventory == null) { this.playDispenseSound(context.world, pos); this.spawnDispenseParticles(context.world, pos, closestToFacing); return this.dispenseStack(itemStack, context, pos, facingVec); } else { - if (HopperTileEntity.putStackInInventoryAllSlots(null, iinventory, itemStack.copy().split(1), closestToFacing.getOpposite()).isEmpty()) + if (HopperTileEntity.addItem(null, iinventory, itemStack.copy().split(1), closestToFacing.getOpposite()).isEmpty()) itemStack.shrink(1); return itemStack; } @@ -65,7 +65,7 @@ public class MovedDefaultDispenseItemBehaviour implements IMovedDispenseItemBeha * Play the dispense sound from the specified block. */ protected void playDispenseSound(IWorld world, BlockPos pos) { - world.playEvent(1000, pos, 0); + world.levelEvent(1000, pos, 0); } /** @@ -76,11 +76,11 @@ public class MovedDefaultDispenseItemBehaviour implements IMovedDispenseItemBeha } protected void spawnDispenseParticles(IWorld world, BlockPos pos, Direction direction) { - world.playEvent(2000, pos, direction.getIndex()); + world.levelEvent(2000, pos, direction.get3DDataValue()); } protected Direction getClosestFacingDirection(Vector3d exactFacing) { - return Direction.getFacingFromVector(exactFacing.x, exactFacing.y, exactFacing.z); + return Direction.getNearest(exactFacing.x, exactFacing.y, exactFacing.z); } protected ItemStack placeItemInInventory(ItemStack consumedFrom, ItemStack output, MovementContext context, BlockPos pos, Vector3d facing) { diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/MovedOptionalDispenseBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/MovedOptionalDispenseBehaviour.java index d3eb7e88e..9b8ecef5e 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/MovedOptionalDispenseBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/MovedOptionalDispenseBehaviour.java @@ -8,6 +8,6 @@ public class MovedOptionalDispenseBehaviour extends MovedDefaultDispenseItemBeha @Override protected void playDispenseSound(IWorld world, BlockPos pos) { - world.playEvent(this.successful ? 1000 : 1001, pos, 0); + world.levelEvent(this.successful ? 1000 : 1001, pos, 0); } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/MovedProjectileDispenserBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/MovedProjectileDispenserBehaviour.java index bd39d404f..d717dfa63 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/MovedProjectileDispenserBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/MovedProjectileDispenserBehaviour.java @@ -28,14 +28,14 @@ public abstract class MovedProjectileDispenserBehaviour extends MovedDefaultDisp return itemStack; Vector3d effectiveMovementVec = facing.scale(getProjectileVelocity()).add(context.motion); ProjectileEntity.shoot(effectiveMovementVec.x, effectiveMovementVec.y, effectiveMovementVec.z, (float) effectiveMovementVec.length(), this.getProjectileInaccuracy()); - context.world.addEntity(ProjectileEntity); + context.world.addFreshEntity(ProjectileEntity); itemStack.shrink(1); return itemStack; } @Override protected void playDispenseSound(IWorld world, BlockPos pos) { - world.playEvent(1002, pos, 0); + world.levelEvent(1002, pos, 0); } @Nullable @@ -81,19 +81,19 @@ public abstract class MovedProjectileDispenserBehaviour extends MovedDefaultDisp } private static Method getProjectileEntityLookup() { - Method getProjectileEntity = ObfuscationReflectionHelper.findMethod(ProjectileDispenseBehavior.class, "func_82499_a", World.class, IPosition.class, ItemStack.class); + Method getProjectileEntity = ObfuscationReflectionHelper.findMethod(ProjectileDispenseBehavior.class, "getProjectile", World.class, IPosition.class, ItemStack.class); // getProjectile getProjectileEntity.setAccessible(true); return getProjectileEntity; } private static Method getProjectileInaccuracyLookup() { - Method getProjectileInaccuracy = ObfuscationReflectionHelper.findMethod(ProjectileDispenseBehavior.class, "func_82498_a"); + Method getProjectileInaccuracy = ObfuscationReflectionHelper.findMethod(ProjectileDispenseBehavior.class, "getUncertainty"); // getUncertainty getProjectileInaccuracy.setAccessible(true); return getProjectileInaccuracy; } private static Method getProjectileVelocityLookup() { - Method getProjectileVelocity = ObfuscationReflectionHelper.findMethod(ProjectileDispenseBehavior.class, "func_82500_b"); + Method getProjectileVelocity = ObfuscationReflectionHelper.findMethod(ProjectileDispenseBehavior.class, "getPower"); // getPower getProjectileVelocity.setAccessible(true); return getProjectileVelocity; } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/SimplePos.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/SimplePos.java index 5da3e0b13..a751cc024 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/SimplePos.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/SimplePos.java @@ -14,17 +14,17 @@ public class SimplePos implements IPosition { } @Override - public double getX() { + public double x() { return x; } @Override - public double getY() { + public double y() { return y; } @Override - public double getZ() { + public double z() { return z; } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/clock/CuckooClockBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/clock/CuckooClockBlock.java index 3b179fc49..97d823099 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/clock/CuckooClockBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/clock/CuckooClockBlock.java @@ -20,6 +20,8 @@ import net.minecraft.util.math.shapes.VoxelShape; import net.minecraft.world.IBlockReader; import net.minecraft.world.IWorldReader; +import net.minecraft.block.AbstractBlock.Properties; + public class CuckooClockBlock extends HorizontalKineticBlock { private boolean mysterious; @@ -49,22 +51,22 @@ public class CuckooClockBlock extends HorizontalKineticBlock { } @Override - public void fillItemGroup(ItemGroup group, NonNullList items) { + public void fillItemCategory(ItemGroup group, NonNullList items) { if (!mysterious) - super.fillItemGroup(group, items); + super.fillItemCategory(group, items); } @Override public BlockState getStateForPlacement(BlockItemUseContext context) { Direction preferred = getPreferredHorizontalFacing(context); if (preferred != null) - return getDefaultState().with(HORIZONTAL_FACING, preferred.getOpposite()); - return this.getDefaultState().with(HORIZONTAL_FACING, context.getPlacementHorizontalFacing().getOpposite()); + return defaultBlockState().setValue(HORIZONTAL_FACING, preferred.getOpposite()); + return this.defaultBlockState().setValue(HORIZONTAL_FACING, context.getHorizontalDirection().getOpposite()); } @Override public boolean hasShaftTowards(IWorldReader world, BlockPos pos, BlockState state, Direction face) { - return face == state.get(HORIZONTAL_FACING).getOpposite(); + return face == state.getValue(HORIZONTAL_FACING).getOpposite(); } public static boolean containsSurprise(BlockState state) { @@ -74,11 +76,11 @@ public class CuckooClockBlock extends HorizontalKineticBlock { @Override public Axis getRotationAxis(BlockState state) { - return state.get(HORIZONTAL_FACING).getAxis(); + return state.getValue(HORIZONTAL_FACING).getAxis(); } @Override - public boolean allowsMovement(BlockState state, IBlockReader reader, BlockPos pos, PathType type) { + public boolean isPathfindable(BlockState state, IBlockReader reader, BlockPos pos, PathType type) { return false; } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/clock/CuckooClockRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/components/clock/CuckooClockRenderer.java index 03f8fa982..443c00b11 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/clock/CuckooClockRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/clock/CuckooClockRenderer.java @@ -34,10 +34,10 @@ public class CuckooClockRenderer extends KineticTileEntityRenderer { CuckooClockTileEntity clock = (CuckooClockTileEntity) te; BlockState blockState = te.getBlockState(); - int packedLightmapCoords = WorldRenderer.getLightmapCoordinates(te.getWorld(), blockState, te.getPos()); - Direction direction = blockState.get(CuckooClockBlock.HORIZONTAL_FACING); + int packedLightmapCoords = WorldRenderer.getLightColor(te.getLevel(), blockState, te.getBlockPos()); + Direction direction = blockState.getValue(CuckooClockBlock.HORIZONTAL_FACING); - IVertexBuilder vb = buffer.getBuffer(RenderType.getSolid()); + IVertexBuilder vb = buffer.getBuffer(RenderType.solid()); // Render Hands SuperByteBuffer hourHand = PartialBufferer.get(AllBlockPartials.CUCKOO_HOUR_HAND, blockState); @@ -83,7 +83,7 @@ public class CuckooClockRenderer extends KineticTileEntityRenderer { PartialModel partialModel = (clock.animationType == Animation.PIG ? AllBlockPartials.CUCKOO_PIG : AllBlockPartials.CUCKOO_CREEPER); SuperByteBuffer figure = PartialBufferer.get(partialModel, blockState); - figure.rotateCentered(Direction.UP, AngleHelper.rad(AngleHelper.horizontalAngle(direction.rotateYCCW()))); + figure.rotateCentered(Direction.UP, AngleHelper.rad(AngleHelper.horizontalAngle(direction.getCounterClockWise()))); figure.translate(offset, 0, 0); figure.light(packedLightmapCoords) .renderInto(ms, vb); @@ -98,7 +98,7 @@ public class CuckooClockRenderer extends KineticTileEntityRenderer { private SuperByteBuffer transform(PartialModel partial, KineticTileEntity te) { return PartialBufferer.getFacing(partial, te.getBlockState(), te.getBlockState() - .get(CuckooClockBlock.HORIZONTAL_FACING) + .getValue(CuckooClockBlock.HORIZONTAL_FACING) .getOpposite()); } @@ -106,7 +106,7 @@ public class CuckooClockRenderer extends KineticTileEntityRenderer { float pivotX = 2 / 16f; float pivotY = 6 / 16f; float pivotZ = 8 / 16f; - buffer.rotateCentered(Direction.UP, AngleHelper.rad(AngleHelper.horizontalAngle(facing.rotateYCCW()))); + buffer.rotateCentered(Direction.UP, AngleHelper.rad(AngleHelper.horizontalAngle(facing.getCounterClockWise()))); buffer.translate(pivotX, pivotY, pivotZ); buffer.rotate(Direction.EAST, angle); buffer.translate(-pivotX, -pivotY, -pivotZ); @@ -117,7 +117,7 @@ public class CuckooClockRenderer extends KineticTileEntityRenderer { float pivotX = 2 / 16f; float pivotY = 0; float pivotZ = (left ? 6 : 10) / 16f; - buffer.rotateCentered(Direction.UP, AngleHelper.rad(AngleHelper.horizontalAngle(facing.rotateYCCW()))); + buffer.rotateCentered(Direction.UP, AngleHelper.rad(AngleHelper.horizontalAngle(facing.getCounterClockWise()))); buffer.translate(pivotX, pivotY, pivotZ); buffer.rotate(Direction.UP, AngleHelper.rad(angle) * (left ? -1 : 1)); buffer.translate(-pivotX, -pivotY, -pivotZ); diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/clock/CuckooClockTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/clock/CuckooClockTileEntity.java index 9b3aefbd8..a38d44ee1 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/clock/CuckooClockTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/clock/CuckooClockTileEntity.java @@ -67,24 +67,24 @@ public class CuckooClockTileEntity extends KineticTileEntity { return; - boolean isNatural = world.getDimension().isNatural(); - int dayTime = (int) ((world.getDayTime() * (isNatural ? 1 : 24)) % 24000); + boolean isNatural = level.dimensionType().natural(); + int dayTime = (int) ((level.getDayTime() * (isNatural ? 1 : 24)) % 24000); int hours = (dayTime / 1000 + 6) % 24; int minutes = (dayTime % 1000) * 60 / 1000; if (!isNatural) { - if (world.isRemote) { + if (level.isClientSide) { moveHands(hours, minutes); if (AnimationTickHolder.getTicks() % 6 == 0) - playSound(SoundEvents.BLOCK_NOTE_BLOCK_HAT, 1 / 16f, 2f); + playSound(SoundEvents.NOTE_BLOCK_HAT, 1 / 16f, 2f); else if (AnimationTickHolder.getTicks() % 3 == 0) - playSound(SoundEvents.BLOCK_NOTE_BLOCK_HAT, 1 / 16f, 1.5f); + playSound(SoundEvents.NOTE_BLOCK_HAT, 1 / 16f, 1.5f); } return; } - if (!world.isRemote) { + if (!level.isClientSide) { if (animationType == Animation.NONE) { if (hours == 12 && minutes < 5) startAnimation(Animation.PIG); @@ -97,23 +97,23 @@ public class CuckooClockTileEntity extends KineticTileEntity { animationType = Animation.NONE; if (animationType == Animation.SURPRISE && animationProgress.value == 50) { - Vector3d center = VecHelper.getCenterOf(pos); - world.destroyBlock(pos, false); - world.createExplosion(null, CUCKOO_SURPRISE, null, center.x, center.y, center.z, 3, false, + Vector3d center = VecHelper.getCenterOf(worldPosition); + level.destroyBlock(worldPosition, false); + level.explode(null, CUCKOO_SURPRISE, null, center.x, center.y, center.z, 3, false, Explosion.Mode.BREAK); } } } - if (world.isRemote) { + if (level.isClientSide) { moveHands(hours, minutes); if (animationType == Animation.NONE) { if (AnimationTickHolder.getTicks() % 32 == 0) - playSound(SoundEvents.BLOCK_NOTE_BLOCK_HAT, 1 / 16f, 2f); + playSound(SoundEvents.NOTE_BLOCK_HAT, 1 / 16f, 2f); else if (AnimationTickHolder.getTicks() % 16 == 0) - playSound(SoundEvents.BLOCK_NOTE_BLOCK_HAT, 1 / 16f, 1.5f); + playSound(SoundEvents.NOTE_BLOCK_HAT, 1 / 16f, 1.5f); } else { boolean isSurprise = animationType == Animation.SURPRISE; @@ -125,29 +125,29 @@ public class CuckooClockTileEntity extends KineticTileEntity { // sounds if (value == 1) - playSound(SoundEvents.BLOCK_NOTE_BLOCK_CHIME, 2, .5f); + playSound(SoundEvents.NOTE_BLOCK_CHIME, 2, .5f); if (value == 21) - playSound(SoundEvents.BLOCK_NOTE_BLOCK_CHIME, 2, 0.793701f); + playSound(SoundEvents.NOTE_BLOCK_CHIME, 2, 0.793701f); if (value > 30 && isSurprise) { - Vector3d pos = VecHelper.offsetRandomly(VecHelper.getCenterOf(this.pos), world.rand, .5f); - world.addParticle(ParticleTypes.LARGE_SMOKE, pos.x, pos.y, pos.z, 0, 0, 0); + Vector3d pos = VecHelper.offsetRandomly(VecHelper.getCenterOf(this.worldPosition), level.random, .5f); + level.addParticle(ParticleTypes.LARGE_SMOKE, pos.x, pos.y, pos.z, 0, 0, 0); } if (value == 40 && isSurprise) - playSound(SoundEvents.ENTITY_TNT_PRIMED, 1f, 1f); + playSound(SoundEvents.TNT_PRIMED, 1f, 1f); int step = isSurprise ? 3 : 15; for (int phase = 30; phase <= 60; phase += step) { if (value == phase - step / 3) - playSound(SoundEvents.BLOCK_CHEST_OPEN, 1 / 16f, 2f); + playSound(SoundEvents.CHEST_OPEN, 1 / 16f, 2f); if (value == phase) { if (animationType == Animation.PIG) - playSound(SoundEvents.ENTITY_PIG_AMBIENT, 1 / 4f, 1f); + playSound(SoundEvents.PIG_AMBIENT, 1 / 4f, 1f); else - playSound(SoundEvents.ENTITY_CREEPER_HURT, 1 / 4f, 3f); + playSound(SoundEvents.CREEPER_HURT, 1 / 4f, 3f); } if (value == phase + step / 3) - playSound(SoundEvents.BLOCK_CHEST_CLOSE, 1 / 16f, 2f); + playSound(SoundEvents.CHEST_CLOSE, 1 / 16f, 2f); } @@ -166,7 +166,7 @@ public class CuckooClockTileEntity extends KineticTileEntity { sendAnimationUpdate = true; if (animation == Animation.CREEPER) - AllTriggers.triggerForNearbyPlayers(AllTriggers.CUCKOO, world, pos, 10); + AllTriggers.triggerForNearbyPlayers(AllTriggers.CUCKOO, level, worldPosition, 10); sendData(); } @@ -183,8 +183,8 @@ public class CuckooClockTileEntity extends KineticTileEntity { } private void playSound(SoundEvent sound, float volume, float pitch) { - Vector3d vec = VecHelper.getCenterOf(pos); - world.playSound(vec.x, vec.y, vec.z, sound, SoundCategory.BLOCKS, volume, pitch, false); + Vector3d vec = VecHelper.getCenterOf(worldPosition); + level.playLocalSound(vec.x, vec.y, vec.z, sound, SoundCategory.BLOCKS, volume, pitch, false); } @Override diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/crafter/ConnectedInputHandler.java b/src/main/java/com/simibubi/create/content/contraptions/components/crafter/ConnectedInputHandler.java index db6b86bfd..39e725e9b 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/crafter/ConnectedInputHandler.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/crafter/ConnectedInputHandler.java @@ -34,17 +34,17 @@ public class ConnectedInputHandler { public static boolean shouldConnect(World world, BlockPos pos, Direction face, Direction direction) { BlockState refState = world.getBlockState(pos); - if (!refState.contains(HORIZONTAL_FACING)) + if (!refState.hasProperty(HORIZONTAL_FACING)) return false; - Direction refDirection = refState.get(HORIZONTAL_FACING); + Direction refDirection = refState.getValue(HORIZONTAL_FACING); if (direction.getAxis() == refDirection.getAxis()) return false; if (face == refDirection) return false; - BlockState neighbour = world.getBlockState(pos.offset(direction)); + BlockState neighbour = world.getBlockState(pos.relative(direction)); if (!AllBlocks.MECHANICAL_CRAFTER.has(neighbour)) return false; - if (refDirection != neighbour.get(HORIZONTAL_FACING)) + if (refDirection != neighbour.getValue(HORIZONTAL_FACING)) return false; return true; } @@ -56,16 +56,16 @@ public class ConnectedInputHandler { if (crafter1 == null || crafter2 == null) return; - BlockPos controllerPos1 = crafter1.getPos() - .add(crafter1.input.data.get(0)); - BlockPos controllerPos2 = crafter2.getPos() - .add(crafter2.input.data.get(0)); + BlockPos controllerPos1 = crafter1.getBlockPos() + .offset(crafter1.input.data.get(0)); + BlockPos controllerPos2 = crafter2.getBlockPos() + .offset(crafter2.input.data.get(0)); if (controllerPos1.equals(controllerPos2)) { MechanicalCrafterTileEntity controller = CrafterHelper.getCrafter(world, controllerPos1); Set positions = controller.input.data.stream() - .map(controllerPos1::add) + .map(controllerPos1::offset) .collect(Collectors.toSet()); List frontier = new LinkedList<>(); List splitGroup = new ArrayList<>(); @@ -76,7 +76,7 @@ public class ConnectedInputHandler { while (!frontier.isEmpty()) { BlockPos current = frontier.remove(0); for (Direction direction : Iterate.directions) { - BlockPos next = current.offset(direction); + BlockPos next = current.relative(direction); if (!positions.remove(next)) continue; splitGroup.add(next); @@ -87,9 +87,9 @@ public class ConnectedInputHandler { initAndAddAll(world, crafter1, positions); initAndAddAll(world, crafter2, splitGroup); - crafter1.markDirty(); + crafter1.setChanged(); crafter1.connectivityChanged(); - crafter2.markDirty(); + crafter2.setChanged(); crafter2.connectivityChanged(); return; } @@ -103,11 +103,11 @@ public class ConnectedInputHandler { connectControllers(world, crafter1, crafter2); - world.setBlockState(crafter1.getPos(), crafter1.getBlockState(), 3); + world.setBlock(crafter1.getBlockPos(), crafter1.getBlockState(), 3); - crafter1.markDirty(); + crafter1.setChanged(); crafter1.connectivityChanged(); - crafter2.markDirty(); + crafter2.setChanged(); crafter2.connectivityChanged(); } @@ -115,8 +115,8 @@ public class ConnectedInputHandler { crafter.input = new ConnectedInput(); positions.forEach(splitPos -> { modifyAndUpdate(world, splitPos, input -> { - input.attachTo(crafter.getPos(), splitPos); - crafter.input.data.add(splitPos.subtract(crafter.getPos())); + input.attachTo(crafter.getBlockPos(), splitPos); + crafter.input.data.add(splitPos.subtract(crafter.getBlockPos())); }); }); } @@ -125,8 +125,8 @@ public class ConnectedInputHandler { MechanicalCrafterTileEntity crafter2) { crafter1.input.data.forEach(offset -> { - BlockPos connectedPos = crafter1.getPos() - .add(offset); + BlockPos connectedPos = crafter1.getBlockPos() + .offset(offset); modifyAndUpdate(world, connectedPos, input -> { }); }); @@ -134,26 +134,26 @@ public class ConnectedInputHandler { crafter2.input.data.forEach(offset -> { if (offset.equals(BlockPos.ZERO)) return; - BlockPos connectedPos = crafter2.getPos() - .add(offset); + BlockPos connectedPos = crafter2.getBlockPos() + .offset(offset); modifyAndUpdate(world, connectedPos, input -> { - input.attachTo(crafter1.getPos(), connectedPos); + input.attachTo(crafter1.getBlockPos(), connectedPos); crafter1.input.data.add(BlockPos.ZERO.subtract(input.data.get(0))); }); }); - crafter2.input.attachTo(crafter1.getPos(), crafter2.getPos()); + crafter2.input.attachTo(crafter1.getBlockPos(), crafter2.getBlockPos()); crafter1.input.data.add(BlockPos.ZERO.subtract(crafter2.input.data.get(0))); } private static void modifyAndUpdate(World world, BlockPos pos, Consumer callback) { - TileEntity te = world.getTileEntity(pos); + TileEntity te = world.getBlockEntity(pos); if (!(te instanceof MechanicalCrafterTileEntity)) return; MechanicalCrafterTileEntity crafter = (MechanicalCrafterTileEntity) te; callback.accept(crafter.input); - crafter.markDirty(); + crafter.setChanged(); crafter.connectivityChanged(); } @@ -174,7 +174,7 @@ public class ConnectedInputHandler { public IItemHandler getItemHandler(World world, BlockPos pos) { if (!isController) { - BlockPos controllerPos = pos.add(data.get(0)); + BlockPos controllerPos = pos.offset(data.get(0)); ConnectedInput input = CrafterHelper.getInput(world, controllerPos); if (input == this || input == null || !input.isController) return new ItemStackHandler(); @@ -182,7 +182,7 @@ public class ConnectedInputHandler { } List list = data.stream() - .map(l -> CrafterHelper.getCrafter(world, pos.add(l))) + .map(l -> CrafterHelper.getCrafter(world, pos.offset(l))) .filter(Objects::nonNull) .map(crafter -> crafter.getInventory()) .collect(Collectors.toList()); diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/crafter/CrafterCTBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/components/crafter/CrafterCTBehaviour.java index f4cf702e7..3649a3ab4 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/crafter/CrafterCTBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/crafter/CrafterCTBehaviour.java @@ -21,7 +21,7 @@ public class CrafterCTBehaviour extends ConnectedTextureBehaviour { Direction face) { if (state.getBlock() != other.getBlock()) return false; - if (state.get(HORIZONTAL_FACING) != other.get(HORIZONTAL_FACING)) + if (state.getValue(HORIZONTAL_FACING) != other.getValue(HORIZONTAL_FACING)) return false; ConnectedInput input1 = CrafterHelper.getInput(reader, pos); @@ -32,8 +32,8 @@ public class CrafterCTBehaviour extends ConnectedTextureBehaviour { if (input1.data.isEmpty() || input2.data.isEmpty()) return false; try { - if (pos.add(input1.data.get(0)) - .equals(otherPos.add(input2.data.get(0)))) + if (pos.offset(input1.data.get(0)) + .equals(otherPos.offset(input2.data.get(0)))) return true; } catch (IndexOutOfBoundsException e) { // race condition. data somehow becomes empty between the last 2 if statements @@ -47,7 +47,7 @@ public class CrafterCTBehaviour extends ConnectedTextureBehaviour { if (!direction.getAxis() .isVertical()) return false; - Direction facing = state.get(HORIZONTAL_FACING); + Direction facing = state.getValue(HORIZONTAL_FACING); if (facing.getAxis() == direction.getAxis()) return false; @@ -59,7 +59,7 @@ public class CrafterCTBehaviour extends ConnectedTextureBehaviour { @Override public CTSpriteShiftEntry get(BlockState state, Direction direction) { - Direction facing = state.get(HORIZONTAL_FACING); + Direction facing = state.getValue(HORIZONTAL_FACING); boolean isFront = facing.getAxis() == direction.getAxis(); boolean isVertical = direction.getAxis() .isVertical(); diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/crafter/CrafterHelper.java b/src/main/java/com/simibubi/create/content/contraptions/components/crafter/CrafterHelper.java index ed41f7c3a..b954fe412 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/crafter/CrafterHelper.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/crafter/CrafterHelper.java @@ -7,7 +7,7 @@ import net.minecraft.world.IBlockDisplayReader; public class CrafterHelper { public static MechanicalCrafterTileEntity getCrafter(IBlockDisplayReader reader, BlockPos pos) { - TileEntity te = reader.getTileEntity(pos); + TileEntity te = reader.getBlockEntity(pos); if (!(te instanceof MechanicalCrafterTileEntity)) return null; return (MechanicalCrafterTileEntity) te; diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/crafter/MechanicalCrafterBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/crafter/MechanicalCrafterBlock.java index 05c41789d..b4ef94055 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/crafter/MechanicalCrafterBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/crafter/MechanicalCrafterBlock.java @@ -41,18 +41,20 @@ import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.ItemHandlerHelper; import net.minecraftforge.items.ItemStackHandler; +import net.minecraft.block.AbstractBlock.Properties; + public class MechanicalCrafterBlock extends HorizontalKineticBlock implements ITE, ICogWheel { public static final EnumProperty POINTING = EnumProperty.create("pointing", Pointing.class); public MechanicalCrafterBlock(Properties properties) { super(properties); - setDefaultState(getDefaultState().with(POINTING, Pointing.UP)); + registerDefaultState(defaultBlockState().setValue(POINTING, Pointing.UP)); } @Override - protected void fillStateContainer(Builder builder) { - super.fillStateContainer(builder.add(POINTING)); + protected void createBlockStateDefinition(Builder builder) { + super.createBlockStateDefinition(builder.add(POINTING)); } @Override @@ -62,35 +64,35 @@ public class MechanicalCrafterBlock extends HorizontalKineticBlock implements IT @Override public Axis getRotationAxis(BlockState state) { - return state.get(HORIZONTAL_FACING) + return state.getValue(HORIZONTAL_FACING) .getAxis(); } @Override public BlockState getStateForPlacement(BlockItemUseContext context) { - Direction face = context.getFace(); - BlockPos placedOnPos = context.getPos() - .offset(face.getOpposite()); - BlockState blockState = context.getWorld() + Direction face = context.getClickedFace(); + BlockPos placedOnPos = context.getClickedPos() + .relative(face.getOpposite()); + BlockState blockState = context.getLevel() .getBlockState(placedOnPos); if ((blockState.getBlock() != this) || (context.getPlayer() != null && context.getPlayer() - .isSneaking())) { + .isShiftKeyDown())) { BlockState stateForPlacement = super.getStateForPlacement(context); - Direction direction = stateForPlacement.get(HORIZONTAL_FACING); + Direction direction = stateForPlacement.getValue(HORIZONTAL_FACING); if (direction != face) - stateForPlacement = stateForPlacement.with(POINTING, pointingFromFacing(face, direction)); + stateForPlacement = stateForPlacement.setValue(POINTING, pointingFromFacing(face, direction)); return stateForPlacement; } - Direction otherFacing = blockState.get(HORIZONTAL_FACING); + Direction otherFacing = blockState.getValue(HORIZONTAL_FACING); Pointing pointing = pointingFromFacing(face, otherFacing); - return getDefaultState().with(HORIZONTAL_FACING, otherFacing) - .with(POINTING, pointing); + return defaultBlockState().setValue(HORIZONTAL_FACING, otherFacing) + .setValue(POINTING, pointing); } @Override - public void onReplaced(BlockState state, World worldIn, BlockPos pos, BlockState newState, boolean isMoving) { + public void onRemove(BlockState state, World worldIn, BlockPos pos, BlockState newState, boolean isMoving) { if (state.getBlock() == newState.getBlock()) { if (getTargetDirection(state) != getTargetDirection(newState)) { MechanicalCrafterTileEntity crafter = CrafterHelper.getCrafter(worldIn, pos); @@ -103,29 +105,29 @@ public class MechanicalCrafterBlock extends HorizontalKineticBlock implements IT MechanicalCrafterTileEntity crafter = CrafterHelper.getCrafter(worldIn, pos); if (crafter != null) { if (crafter.covered) - Block.spawnAsEntity(worldIn, pos, AllItems.CRAFTER_SLOT_COVER.asStack()); + Block.popResource(worldIn, pos, AllItems.CRAFTER_SLOT_COVER.asStack()); crafter.ejectWholeGrid(); } for (Direction direction : Iterate.directions) { - if (direction.getAxis() == state.get(HORIZONTAL_FACING) + if (direction.getAxis() == state.getValue(HORIZONTAL_FACING) .getAxis()) continue; - BlockPos otherPos = pos.offset(direction); + BlockPos otherPos = pos.relative(direction); ConnectedInput thisInput = CrafterHelper.getInput(worldIn, pos); ConnectedInput otherInput = CrafterHelper.getInput(worldIn, otherPos); if (thisInput == null || otherInput == null) continue; - if (!pos.add(thisInput.data.get(0)) - .equals(otherPos.add(otherInput.data.get(0)))) + if (!pos.offset(thisInput.data.get(0)) + .equals(otherPos.offset(otherInput.data.get(0)))) continue; ConnectedInputHandler.toggleConnection(worldIn, pos, otherPos); } - worldIn.removeTileEntity(pos); + worldIn.removeBlockEntity(pos); } } @@ -146,9 +148,9 @@ public class MechanicalCrafterBlock extends HorizontalKineticBlock implements IT @Override public ActionResultType onWrenched(BlockState state, ItemUseContext context) { - if (context.getFace() == state.get(HORIZONTAL_FACING)) { - if (!context.getWorld().isRemote) - KineticTileEntity.switchToBlockState(context.getWorld(), context.getPos(), state.cycle(POINTING)); + if (context.getClickedFace() == state.getValue(HORIZONTAL_FACING)) { + if (!context.getLevel().isClientSide) + KineticTileEntity.switchToBlockState(context.getLevel(), context.getClickedPos(), state.cycle(POINTING)); return ActionResultType.SUCCESS; } @@ -156,12 +158,12 @@ public class MechanicalCrafterBlock extends HorizontalKineticBlock implements IT } @Override - public ActionResultType onUse(BlockState state, World worldIn, BlockPos pos, PlayerEntity player, Hand handIn, + public ActionResultType use(BlockState state, World worldIn, BlockPos pos, PlayerEntity player, Hand handIn, BlockRayTraceResult hit) { - ItemStack heldItem = player.getHeldItem(handIn); + ItemStack heldItem = player.getItemInHand(handIn); boolean isHand = heldItem.isEmpty() && handIn == Hand.MAIN_HAND; - TileEntity te = worldIn.getTileEntity(pos); + TileEntity te = worldIn.getBlockEntity(pos); if (!(te instanceof MechanicalCrafterTileEntity)) return ActionResultType.PASS; MechanicalCrafterTileEntity crafter = (MechanicalCrafterTileEntity) te; @@ -170,7 +172,7 @@ public class MechanicalCrafterBlock extends HorizontalKineticBlock implements IT if (AllBlocks.MECHANICAL_ARM.isIn(heldItem)) return ActionResultType.PASS; - if (hit.getFace() == state.get(HORIZONTAL_FACING)) { + if (hit.getDirection() == state.getValue(HORIZONTAL_FACING)) { if (crafter.phase != Phase.IDLE && !wrenched) { crafter.ejectWholeGrid(); @@ -178,7 +180,7 @@ public class MechanicalCrafterBlock extends HorizontalKineticBlock implements IT } if (crafter.phase == Phase.IDLE && !isHand && !wrenched) { - if (worldIn.isRemote) + if (worldIn.isClientSide) return ActionResultType.SUCCESS; if (AllItems.CRAFTER_SLOT_COVER.isIn(heldItem)) { @@ -187,7 +189,7 @@ public class MechanicalCrafterBlock extends HorizontalKineticBlock implements IT if (!crafter.inventory.isEmpty()) return ActionResultType.PASS; crafter.covered = true; - crafter.markDirty(); + crafter.setChanged(); crafter.sendData(); if (!player.isCreative()) heldItem.shrink(1); @@ -201,17 +203,17 @@ public class MechanicalCrafterBlock extends HorizontalKineticBlock implements IT ItemStack remainder = ItemHandlerHelper.insertItem(capability.orElse(new ItemStackHandler()), heldItem.copy(), false); if (remainder.getCount() != heldItem.getCount()) - player.setHeldItem(handIn, remainder); + player.setItemInHand(handIn, remainder); return ActionResultType.SUCCESS; } - ItemStack inSlot = crafter.getInventory().getStackInSlot(0); + ItemStack inSlot = crafter.getInventory().getItem(0); if (inSlot.isEmpty()) { if (crafter.covered && !wrenched) { - if (worldIn.isRemote) + if (worldIn.isClientSide) return ActionResultType.SUCCESS; crafter.covered = false; - crafter.markDirty(); + crafter.setChanged(); crafter.sendData(); if (!player.isCreative()) player.inventory.placeItemBackInInventory(worldIn, AllItems.CRAFTER_SLOT_COVER.asStack()); @@ -221,7 +223,7 @@ public class MechanicalCrafterBlock extends HorizontalKineticBlock implements IT } if (!isHand && !ItemHandlerHelper.canItemStacksStack(heldItem, inSlot)) return ActionResultType.PASS; - if (worldIn.isRemote) + if (worldIn.isClientSide) return ActionResultType.SUCCESS; player.inventory.placeItemBackInInventory(worldIn, inSlot); crafter.getInventory().setStackInSlot(0, ItemStack.EMPTY); @@ -252,25 +254,25 @@ public class MechanicalCrafterBlock extends HorizontalKineticBlock implements IT public static Direction getTargetDirection(BlockState state) { if (!AllBlocks.MECHANICAL_CRAFTER.has(state)) return Direction.UP; - Direction facing = state.get(HORIZONTAL_FACING); - Pointing point = state.get(POINTING); + Direction facing = state.getValue(HORIZONTAL_FACING); + Pointing point = state.getValue(POINTING); Vector3d targetVec = new Vector3d(0, 1, 0); targetVec = VecHelper.rotate(targetVec, -point.getXRotation(), Axis.Z); targetVec = VecHelper.rotate(targetVec, AngleHelper.horizontalAngle(facing), Axis.Y); - return Direction.getFacingFromVector(targetVec.x, targetVec.y, targetVec.z); + return Direction.getNearest(targetVec.x, targetVec.y, targetVec.z); } public static boolean isValidTarget(World world, BlockPos targetPos, BlockState crafterState) { BlockState targetState = world.getBlockState(targetPos); - if (!world.isBlockPresent(targetPos)) + if (!world.isLoaded(targetPos)) return false; if (!AllBlocks.MECHANICAL_CRAFTER.has(targetState)) return false; - if (crafterState.get(HORIZONTAL_FACING) != targetState.get(HORIZONTAL_FACING)) + if (crafterState.getValue(HORIZONTAL_FACING) != targetState.getValue(HORIZONTAL_FACING)) return false; - if (Math.abs(crafterState.get(POINTING) + if (Math.abs(crafterState.getValue(POINTING) .getXRotation() - - targetState.get(POINTING) + - targetState.getValue(POINTING) .getXRotation()) == 180) return false; return true; 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 4ca256adf..009dc3abe 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 @@ -21,7 +21,7 @@ public class MechanicalCrafterInstance extends SingleRotatingInstance { @Override protected Instancer getModel() { - Direction facing = blockState.get(MechanicalCrafterBlock.HORIZONTAL_FACING); + Direction facing = blockState.getValue(MechanicalCrafterBlock.HORIZONTAL_FACING); Supplier ms = () -> { MatrixStack stack = new MatrixStack(); diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/crafter/MechanicalCrafterRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/components/crafter/MechanicalCrafterRenderer.java index a4575de82..e77faa354 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/crafter/MechanicalCrafterRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/crafter/MechanicalCrafterRenderer.java @@ -41,25 +41,25 @@ public class MechanicalCrafterRenderer extends SafeTileEntityRenderer { - if (getStackInSlot(slot).isEmpty()) + if (getItem(slot).isEmpty()) return; if (te.phase == Phase.IDLE) te.checkCompletedRecipe(false); @@ -72,8 +72,8 @@ public class MechanicalCrafterTileEntity extends KineticTileEntity { return stack; ItemStack insertItem = super.insertItem(slot, stack, simulate); if (insertItem.getCount() != stack.getCount() && !simulate) - te.getWorld() - .playSound(null, te.getPos(), SoundEvents.ENTITY_ITEM_FRAME_ADD_ITEM, SoundCategory.BLOCKS, .25f, + te.getLevel() + .playSound(null, te.getBlockPos(), SoundEvents.ITEM_FRAME_ADD_ITEM, SoundCategory.BLOCKS, .25f, .5f); return insertItem; } @@ -83,7 +83,7 @@ public class MechanicalCrafterTileEntity extends KineticTileEntity { protected Inventory inventory; protected GroupedItems groupedItems = new GroupedItems(); protected ConnectedInput input = new ConnectedInput(); - protected LazyOptional invSupplier = LazyOptional.of(() -> input.getItemHandler(world, pos)); + protected LazyOptional invSupplier = LazyOptional.of(() -> input.getItemHandler(level, worldPosition)); protected boolean reRender; protected Phase phase; protected int countDown; @@ -176,25 +176,25 @@ public class MechanicalCrafterTileEntity extends KineticTileEntity { if (!clientPacket) return; if (compound.contains("Redraw")) - world.notifyBlockUpdate(getPos(), getBlockState(), getBlockState(), 16); + level.sendBlockUpdated(getBlockPos(), getBlockState(), getBlockState(), 16); if (phaseBefore != phase && phase == Phase.CRAFTING) groupedItemsBeforeCraft = before; if (phaseBefore == Phase.EXPORTING && phase == Phase.WAITING) { - Direction facing = getBlockState().get(MechanicalCrafterBlock.HORIZONTAL_FACING); - Vector3d vec = Vector3d.of(facing.getDirectionVec()) + Direction facing = getBlockState().getValue(MechanicalCrafterBlock.HORIZONTAL_FACING); + Vector3d vec = Vector3d.atLowerCornerOf(facing.getNormal()) .scale(.75) - .add(VecHelper.getCenterOf(pos)); + .add(VecHelper.getCenterOf(worldPosition)); Direction targetDirection = MechanicalCrafterBlock.getTargetDirection(getBlockState()); - vec = vec.add(Vector3d.of(targetDirection.getDirectionVec()) + vec = vec.add(Vector3d.atLowerCornerOf(targetDirection.getNormal()) .scale(1)); - world.addParticle(ParticleTypes.CRIT, vec.x, vec.y, vec.z, 0, 0, 0); + level.addParticle(ParticleTypes.CRIT, vec.x, vec.y, vec.z, 0, 0, 0); } } @Override - public void remove() { + public void setRemoved() { invSupplier.invalidate(); - super.remove(); + super.setRemoved(); } public int getCountDownSpeed() { @@ -210,11 +210,11 @@ public class MechanicalCrafterTileEntity extends KineticTileEntity { if (phase == Phase.ACCEPTING) return; - boolean onClient = world.isRemote; + boolean onClient = level.isClientSide; boolean runLogic = !onClient || isVirtual(); - if (wasPoweredBefore != world.isBlockPowered(pos)) { - wasPoweredBefore = world.isBlockPowered(pos); + if (wasPoweredBefore != level.hasNeighborSignal(worldPosition)) { + wasPoweredBefore = level.hasNeighborSignal(worldPosition); if (wasPoweredBefore) { if (!runLogic) return; @@ -236,7 +236,7 @@ public class MechanicalCrafterTileEntity extends KineticTileEntity { } ItemStack result = - isVirtual() ? scriptedResult : RecipeGridHandler.tryToApplyRecipe(world, groupedItems); + isVirtual() ? scriptedResult : RecipeGridHandler.tryToApplyRecipe(level, groupedItems); if (result != null) { List containers = new ArrayList<>(); @@ -282,12 +282,12 @@ public class MechanicalCrafterTileEntity extends KineticTileEntity { return; } - Pointing pointing = getBlockState().get(MechanicalCrafterBlock.POINTING); + Pointing pointing = getBlockState().getValue(MechanicalCrafterBlock.POINTING); groupedItems.mergeOnto(targetingCrafter.groupedItems, pointing); groupedItems = new GroupedItems(); float pitch = targetingCrafter.groupedItems.grid.size() * 1/16f + .5f; - AllSoundEvents.CRAFTER_CLICK.playOnServer(world, pos, 1, pitch); + AllSoundEvents.CRAFTER_CLICK.playOnServer(level, worldPosition, 1, pitch); phase = Phase.WAITING; countDown = 0; @@ -301,18 +301,18 @@ public class MechanicalCrafterTileEntity extends KineticTileEntity { if (phase == Phase.CRAFTING) { if (onClient) { - Direction facing = getBlockState().get(MechanicalCrafterBlock.HORIZONTAL_FACING); + Direction facing = getBlockState().getValue(MechanicalCrafterBlock.HORIZONTAL_FACING); float progress = countDown / 2000f; - Vector3d facingVec = Vector3d.of(facing.getDirectionVec()); + Vector3d facingVec = Vector3d.atLowerCornerOf(facing.getNormal()); Vector3d vec = facingVec.scale(.65) - .add(VecHelper.getCenterOf(pos)); - Vector3d offset = VecHelper.offsetRandomly(Vector3d.ZERO, world.rand, .125f) - .mul(VecHelper.axisAlingedPlaneOf(facingVec)) + .add(VecHelper.getCenterOf(worldPosition)); + Vector3d offset = VecHelper.offsetRandomly(Vector3d.ZERO, level.random, .125f) + .multiply(VecHelper.axisAlingedPlaneOf(facingVec)) .normalize() .scale(progress * .5f) .add(vec); if (progress > .5f) - world.addParticle(ParticleTypes.CRIT, offset.x, offset.y, offset.z, 0, 0, 0); + level.addParticle(ParticleTypes.CRIT, offset.x, offset.y, offset.z, 0, 0, 0); if (!groupedItemsBeforeCraft.grid.isEmpty() && progress < .5f) { if (groupedItems.grid.containsKey(Pair.of(0, 0))) { @@ -320,13 +320,13 @@ public class MechanicalCrafterTileEntity extends KineticTileEntity { groupedItemsBeforeCraft = new GroupedItems(); for (int i = 0; i < 10; i++) { - Vector3d randVec = VecHelper.offsetRandomly(Vector3d.ZERO, world.rand, .125f) - .mul(VecHelper.axisAlingedPlaneOf(facingVec)) + Vector3d randVec = VecHelper.offsetRandomly(Vector3d.ZERO, level.random, .125f) + .multiply(VecHelper.axisAlingedPlaneOf(facingVec)) .normalize() .scale(.25f); Vector3d offset2 = randVec.add(vec); randVec = randVec.scale(.35f); - world.addParticle(new ItemParticleData(ParticleTypes.ITEM, stack), offset2.x, offset2.y, + level.addParticle(new ItemParticleData(ParticleTypes.ITEM, stack), offset2.x, offset2.y, offset2.z, randVec.x, randVec.y, randVec.z); } } @@ -337,8 +337,8 @@ public class MechanicalCrafterTileEntity extends KineticTileEntity { countDown -= getCountDownSpeed(); if (countDown < 1000 && prev >= 1000) { - AllSoundEvents.CRAFTER_CLICK.playOnServer(world, pos, 1, 2); - AllSoundEvents.CRAFTER_CRAFT.playOnServer(world, pos); + AllSoundEvents.CRAFTER_CLICK.playOnServer(level, worldPosition, 1, 2); + AllSoundEvents.CRAFTER_CRAFT.playOnServer(level, worldPosition); } if (countDown < 0) { @@ -363,8 +363,8 @@ public class MechanicalCrafterTileEntity extends KineticTileEntity { } protected DirectBeltInputBehaviour getTargetingBelt() { - BlockPos targetPos = pos.offset(getTargetDirection()); - return TileEntityBehaviour.get(world, targetPos, DirectBeltInputBehaviour.TYPE); + BlockPos targetPos = worldPosition.relative(getTargetDirection()); + return TileEntityBehaviour.get(level, targetPos, DirectBeltInputBehaviour.TYPE); } public void tryInsert() { @@ -380,7 +380,7 @@ public class MechanicalCrafterTileEntity extends KineticTileEntity { for (Entry, ItemStack> entry : groupedItems.grid.entrySet()) { Pair pair = entry.getKey(); ItemStack stack = entry.getValue(); - BlockFace face = getTargetFace(world, pos, getBlockState()); + BlockFace face = getTargetFace(level, worldPosition, getBlockState()); ItemStack remainder = behaviour == null ? inserting.insert(stack.copy()) : behaviour.handleInsertion(stack, face.getFace(), false); @@ -411,15 +411,15 @@ public class MechanicalCrafterTileEntity extends KineticTileEntity { public void eject() { BlockState blockState = getBlockState(); boolean present = AllBlocks.MECHANICAL_CRAFTER.has(blockState); - Vector3d vec = present ? Vector3d.of(blockState.get(HORIZONTAL_FACING) - .getDirectionVec()) + Vector3d vec = present ? Vector3d.atLowerCornerOf(blockState.getValue(HORIZONTAL_FACING) + .getNormal()) .scale(.75f) : Vector3d.ZERO; - Vector3d ejectPos = VecHelper.getCenterOf(pos) + Vector3d ejectPos = VecHelper.getCenterOf(worldPosition) .add(vec); groupedItems.grid.forEach((pair, stack) -> dropItem(ejectPos, stack)); - if (!inventory.getStackInSlot(0) + if (!inventory.getItem(0) .isEmpty()) - dropItem(ejectPos, inventory.getStackInSlot(0)); + dropItem(ejectPos, inventory.getItem(0)); phase = Phase.IDLE; groupedItems = new GroupedItems(); inventory.setStackInSlot(0, ItemStack.EMPTY); @@ -427,15 +427,15 @@ public class MechanicalCrafterTileEntity extends KineticTileEntity { } public void dropItem(Vector3d ejectPos, ItemStack stack) { - ItemEntity itemEntity = new ItemEntity(world, ejectPos.x, ejectPos.y, ejectPos.z, stack); - itemEntity.setDefaultPickupDelay(); - world.addEntity(itemEntity); + ItemEntity itemEntity = new ItemEntity(level, ejectPos.x, ejectPos.y, ejectPos.z, stack); + itemEntity.setDefaultPickUpDelay(); + level.addFreshEntity(itemEntity); } @Override public void lazyTick() { super.lazyTick(); - if (world.isRemote && !isVirtual()) + if (level.isClientSide && !isVirtual()) return; if (phase == Phase.IDLE && craftingItemPresent()) checkCompletedRecipe(false); @@ -444,19 +444,19 @@ public class MechanicalCrafterTileEntity extends KineticTileEntity { } public boolean craftingItemPresent() { - return !inventory.getStackInSlot(0) + return !inventory.getItem(0) .isEmpty(); } public boolean craftingItemOrCoverPresent() { - return !inventory.getStackInSlot(0) + return !inventory.getItem(0) .isEmpty() || covered; } protected void checkCompletedRecipe(boolean poweredStart) { if (getSpeed() == 0) return; - if (world.isRemote && !isVirtual()) + if (level.isClientSide && !isVirtual()) return; List chain = RecipeGridHandler.getAllCraftersOfChainIf(this, poweredStart ? MechanicalCrafterTileEntity::craftingItemPresent @@ -469,7 +469,7 @@ public class MechanicalCrafterTileEntity extends KineticTileEntity { protected void begin() { phase = Phase.ACCEPTING; - groupedItems = new GroupedItems(inventory.getStackInSlot(0)); + groupedItems = new GroupedItems(inventory.getItem(0)); inventory.setStackInSlot(0, ItemStack.EMPTY); if (RecipeGridHandler.getPrecedingCrafters(this) .isEmpty()) { @@ -505,7 +505,7 @@ public class MechanicalCrafterTileEntity extends KineticTileEntity { reRender = true; sendData(); invSupplier.invalidate(); - invSupplier = LazyOptional.of(() -> input.getItemHandler(world, pos)); + invSupplier = LazyOptional.of(() -> input.getItemHandler(level, worldPosition)); } public Inventory getInventory() { diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/crafter/MechanicalCraftingInventory.java b/src/main/java/com/simibubi/create/content/contraptions/components/crafter/MechanicalCraftingInventory.java index 600cb4996..21cf5d725 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/crafter/MechanicalCraftingInventory.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/crafter/MechanicalCraftingInventory.java @@ -12,7 +12,7 @@ import net.minecraft.item.ItemStack; public class MechanicalCraftingInventory extends CraftingInventory { private static Container dummyContainer = new Container(null, -1) { - public boolean canInteractWith(PlayerEntity playerIn) { + public boolean stillValid(PlayerEntity playerIn) { return false; } }; @@ -22,7 +22,7 @@ public class MechanicalCraftingInventory extends CraftingInventory { for (int y = 0; y < items.height; y++) { for (int x = 0; x < items.width; x++) { ItemStack stack = items.grid.get(Pair.of(x + items.minX, y + items.minY)); - setInventorySlotContents(x + (items.height - y - 1) * items.width, + setItem(x + (items.height - y - 1) * items.width, stack == null ? ItemStack.EMPTY : stack.copy()); } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/crafter/MechanicalCraftingRecipe.java b/src/main/java/com/simibubi/create/content/contraptions/components/crafter/MechanicalCraftingRecipe.java index a44acfa42..6ee3fb525 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/crafter/MechanicalCraftingRecipe.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/crafter/MechanicalCraftingRecipe.java @@ -23,7 +23,7 @@ public class MechanicalCraftingRecipe extends ShapedRecipe { private static MechanicalCraftingRecipe fromShaped(ShapedRecipe recipe) { return new MechanicalCraftingRecipe(recipe.getId(), recipe.getGroup(), recipe.getWidth(), recipe.getHeight(), - recipe.getIngredients(), recipe.getRecipeOutput()); + recipe.getIngredients(), recipe.getResultItem()); } @Override @@ -37,7 +37,7 @@ public class MechanicalCraftingRecipe extends ShapedRecipe { } @Override - public boolean isDynamic() { + public boolean isSpecial() { return true; } @@ -49,13 +49,13 @@ public class MechanicalCraftingRecipe extends ShapedRecipe { public static class Serializer extends ShapedRecipe.Serializer { @Override - public ShapedRecipe read(ResourceLocation recipeId, JsonObject json) { - return fromShaped(super.read(recipeId, json)); + public ShapedRecipe fromJson(ResourceLocation recipeId, JsonObject json) { + return fromShaped(super.fromJson(recipeId, json)); } @Override - public ShapedRecipe read(ResourceLocation recipeId, PacketBuffer buffer) { - return fromShaped(super.read(recipeId, buffer)); + public ShapedRecipe fromNetwork(ResourceLocation recipeId, PacketBuffer buffer) { + return fromShaped(super.fromNetwork(recipeId, buffer)); } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/crafter/RecipeGridHandler.java b/src/main/java/com/simibubi/create/content/contraptions/components/crafter/RecipeGridHandler.java index 0650e9107..12a0ee73a 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/crafter/RecipeGridHandler.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/crafter/RecipeGridHandler.java @@ -66,8 +66,8 @@ public class RecipeGridHandler { empty = true; else allEmpty = false; - if (poweredStart && current.getWorld() - .isBlockPowered(current.getPos())) + if (poweredStart && current.getLevel() + .hasNeighborSignal(current.getBlockPos())) powered = true; crafters.add(current); @@ -89,29 +89,29 @@ public class RecipeGridHandler { if (!isCrafter(state)) return null; - BlockPos targetPos = crafter.getPos() - .offset(MechanicalCrafterBlock.getTargetDirection(state)); - MechanicalCrafterTileEntity targetTE = CrafterHelper.getCrafter(crafter.getWorld(), targetPos); + BlockPos targetPos = crafter.getBlockPos() + .relative(MechanicalCrafterBlock.getTargetDirection(state)); + MechanicalCrafterTileEntity targetTE = CrafterHelper.getCrafter(crafter.getLevel(), targetPos); if (targetTE == null) return null; BlockState targetState = targetTE.getBlockState(); if (!isCrafter(targetState)) return null; - if (state.get(HORIZONTAL_FACING) != targetState.get(HORIZONTAL_FACING)) + if (state.getValue(HORIZONTAL_FACING) != targetState.getValue(HORIZONTAL_FACING)) return null; return targetTE; } public static List getPrecedingCrafters(MechanicalCrafterTileEntity crafter) { - BlockPos pos = crafter.getPos(); - World world = crafter.getWorld(); + BlockPos pos = crafter.getBlockPos(); + World world = crafter.getLevel(); List crafters = new ArrayList<>(); BlockState blockState = crafter.getBlockState(); if (!isCrafter(blockState)) return crafters; - Direction blockFacing = blockState.get(HORIZONTAL_FACING); + Direction blockFacing = blockState.getValue(HORIZONTAL_FACING); Direction blockPointing = MechanicalCrafterBlock.getTargetDirection(blockState); for (Direction facing : Iterate.directions) { if (blockFacing.getAxis() == facing.getAxis()) @@ -119,13 +119,13 @@ public class RecipeGridHandler { if (blockPointing == facing) continue; - BlockPos neighbourPos = pos.offset(facing); + BlockPos neighbourPos = pos.relative(facing); BlockState neighbourState = world.getBlockState(neighbourPos); if (!isCrafter(neighbourState)) continue; if (MechanicalCrafterBlock.getTargetDirection(neighbourState) != facing.getOpposite()) continue; - if (blockFacing != neighbourState.get(HORIZONTAL_FACING)) + if (blockFacing != neighbourState.getValue(HORIZONTAL_FACING)) continue; MechanicalCrafterTileEntity te = CrafterHelper.getCrafter(world, neighbourPos); if (te == null) @@ -147,21 +147,21 @@ public class RecipeGridHandler { ItemStack result = null; if (AllConfigs.SERVER.recipes.allowRegularCraftingInCrafter.get()) result = world.getRecipeManager() - .getRecipe(IRecipeType.CRAFTING, craftinginventory, world) + .getRecipeFor(IRecipeType.CRAFTING, craftinginventory, world) .filter(r -> isRecipeAllowed(r, craftinginventory)) - .map(r -> r.getCraftingResult(craftinginventory)) + .map(r -> r.assemble(craftinginventory)) .orElse(null); if (result == null) result = AllRecipeTypes.MECHANICAL_CRAFTING.find(craftinginventory, world) - .map(r -> r.getCraftingResult(craftinginventory)) + .map(r -> r.assemble(craftinginventory)) .orElse(null); return result; } public static boolean isRecipeAllowed(ICraftingRecipe recipe, CraftingInventory inventory) { if (!AllConfigs.SERVER.recipes.allowBiggerFireworksInCrafter.get() && recipe instanceof FireworkRocketRecipe) { - int numItems = IntStream.range(0, inventory.getSizeInventory()) - .map(i -> inventory.getStackInSlot(i).isEmpty() ? 0 : 1) + int numItems = IntStream.range(0, inventory.getContainerSize()) + .map(i -> inventory.getItem(i).isEmpty() ? 0 : 1) .sum(); if (numItems > 9) return false; @@ -207,7 +207,7 @@ public class RecipeGridHandler { CompoundNBT entry = (CompoundNBT) inbt; int x = entry.getInt("x"); int y = entry.getInt("y"); - ItemStack stack = ItemStack.read(entry.getCompound("item")); + ItemStack stack = ItemStack.of(entry.getCompound("item")); items.grid.put(Pair.of(x, y), stack); }); return items; diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/crank/HandCrankBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/crank/HandCrankBlock.java index bef299a96..601de50ad 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/crank/HandCrankBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/crank/HandCrankBlock.java @@ -29,6 +29,8 @@ import net.minecraft.world.World; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraft.block.AbstractBlock.Properties; + public class HandCrankBlock extends DirectionalKineticBlock implements ITE { public HandCrankBlock(Properties properties) { @@ -37,7 +39,7 @@ public class HandCrankBlock extends DirectionalKineticBlock implements ITE te.turn(player.isSneaking())); - player.addExhaustion(getRotationSpeed() * AllConfigs.SERVER.kinetics.crankHungerMultiplier.getF()); + withTileEntityDo(worldIn, pos, te -> te.turn(player.isShiftKeyDown())); + player.causeFoodExhaustion(getRotationSpeed() * AllConfigs.SERVER.kinetics.crankHungerMultiplier.getF()); return ActionResultType.SUCCESS; } @@ -67,16 +69,16 @@ public class HandCrankBlock extends DirectionalKineticBlock implements ITE model = getTransformMaterial().getModel(renderedHandle, blockState, opposite); crank = model.createInstance(); @@ -54,7 +54,7 @@ public class HandCrankInstance extends SingleRotatingInstance implements IDynami MatrixStacker.of(ms) .translate(getInstancePosition()) .centre() - .rotate(Direction.getFacingFromAxis(Direction.AxisDirection.POSITIVE, axis), angle) + .rotate(Direction.get(Direction.AxisDirection.POSITIVE, axis), angle) .unCentre(); crank.setTransform(ms); diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/crank/HandCrankRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/components/crank/HandCrankRenderer.java index 586f0ea90..f4a6c7871 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/crank/HandCrankRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/crank/HandCrankRenderer.java @@ -28,7 +28,7 @@ public class HandCrankRenderer extends KineticTileEntityRenderer { int light, int overlay) { super.renderSafe(te, partialTicks, ms, buffer, light, overlay); - if (Backend.getInstance().canUseInstancing(te.getWorld())) return; + if (Backend.getInstance().canUseInstancing(te.getLevel())) return; BlockState state = te.getBlockState(); Block block = state.getBlock(); @@ -38,12 +38,12 @@ public class HandCrankRenderer extends KineticTileEntityRenderer { if (renderedHandle == null) return; - Direction facing = state.get(FACING); + Direction facing = state.getValue(FACING); SuperByteBuffer handle = PartialBufferer.getFacing(renderedHandle, state, facing.getOpposite()); HandCrankTileEntity crank = (HandCrankTileEntity) te; kineticRotationTransform(handle, te, facing.getAxis(), (crank.independentAngle + partialTicks * crank.chasingVelocity) / 360, light); - handle.renderInto(ms, buffer.getBuffer(RenderType.getSolid())); + handle.renderInto(ms, buffer.getBuffer(RenderType.solid())); } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/crank/HandCrankTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/crank/HandCrankTileEntity.java index 13c10c6e3..c7ad300fd 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/crank/HandCrankTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/crank/HandCrankTileEntity.java @@ -31,7 +31,7 @@ public class HandCrankTileEntity extends GeneratingKineticTileEntity { inUse = 10; this.backwards = back; - if (update && !world.isRemote) + if (update && !level.isClientSide) updateGeneratedRotation(); } @@ -42,7 +42,7 @@ public class HandCrankTileEntity extends GeneratingKineticTileEntity { return 0; HandCrankBlock crank = (HandCrankBlock) block; int speed = (inUse == 0 ? 0 : backwards ? -1 : 1) * crank.getRotationSpeed(); - return convertToDirection(speed, getBlockState().get(HandCrankBlock.FACING)); + return convertToDirection(speed, getBlockState().getValue(HandCrankBlock.FACING)); } @Override @@ -68,7 +68,7 @@ public class HandCrankTileEntity extends GeneratingKineticTileEntity { if (inUse > 0) { inUse--; - if (inUse == 0 && !world.isRemote) + if (inUse == 0 && !level.isClientSide) updateGeneratedRotation(); } } @@ -90,7 +90,7 @@ public class HandCrankTileEntity extends GeneratingKineticTileEntity { if (inUse > 0 && AnimationTickHolder.getTicks() % 10 == 0) { if (!AllBlocks.HAND_CRANK.has(getBlockState())) return; - AllSoundEvents.CRANKING.playAt(world, pos, (inUse) / 2.5f, .65f + (10 - inUse) / 10f, true); + AllSoundEvents.CRANKING.playAt(level, worldPosition, (inUse) / 2.5f, .65f + (10 - inUse) / 10f, true); } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/crank/ValveHandleBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/crank/ValveHandleBlock.java index 8b0b71e91..7698e17af 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/crank/ValveHandleBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/crank/ValveHandleBlock.java @@ -20,6 +20,8 @@ import net.minecraft.world.World; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraft.block.AbstractBlock.Properties; + @ParametersAreNonnullByDefault public class ValveHandleBlock extends HandCrankBlock { private final boolean inCreativeTab; @@ -38,32 +40,32 @@ public class ValveHandleBlock extends HandCrankBlock { } @Override - public ActionResultType onUse(BlockState state, World worldIn, BlockPos pos, PlayerEntity player, Hand handIn, + public ActionResultType use(BlockState state, World worldIn, BlockPos pos, PlayerEntity player, Hand handIn, BlockRayTraceResult hit) { - ItemStack heldItem = player.getHeldItem(handIn); + ItemStack heldItem = player.getItemInHand(handIn); for (DyeColor color : DyeColor.values()) { if (!heldItem.getItem() - .isIn(DyeHelper.getTagOfDye(color))) + .is(DyeHelper.getTagOfDye(color))) continue; - if (worldIn.isRemote) + if (worldIn.isClientSide) return ActionResultType.SUCCESS; BlockState newState = AllBlocks.DYED_VALVE_HANDLES.get(color) .getDefaultState() - .with(FACING, state.get(FACING)); + .setValue(FACING, state.getValue(FACING)); if (newState != state) - worldIn.setBlockState(pos, newState); + worldIn.setBlockAndUpdate(pos, newState); return ActionResultType.SUCCESS; } - return super.onUse(state, worldIn, pos, player, handIn, hit); + return super.use(state, worldIn, pos, player, handIn, hit); } @Override - public void fillItemGroup(ItemGroup group, NonNullList p_149666_2_) { - if (group != ItemGroup.SEARCH && !inCreativeTab) + public void fillItemCategory(ItemGroup group, NonNullList p_149666_2_) { + if (group != ItemGroup.TAB_SEARCH && !inCreativeTab) return; - super.fillItemGroup(group, p_149666_2_); + super.fillItemCategory(group, p_149666_2_); } @Override diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/crusher/CrushingRecipe.java b/src/main/java/com/simibubi/create/content/contraptions/components/crusher/CrushingRecipe.java index d03b8e07e..1260470e8 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/crusher/CrushingRecipe.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/crusher/CrushingRecipe.java @@ -20,7 +20,7 @@ public class CrushingRecipe extends AbstractCrushingRecipe { if (inv.isEmpty()) return false; return ingredients.get(0) - .test(inv.getStackInSlot(0)); + .test(inv.getItem(0)); } @Override diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/crusher/CrushingWheelBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/crusher/CrushingWheelBlock.java index 34e587985..de5526d9e 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/crusher/CrushingWheelBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/crusher/CrushingWheelBlock.java @@ -25,6 +25,8 @@ import net.minecraft.world.IBlockReader; import net.minecraft.world.IWorldReader; import net.minecraft.world.World; +import net.minecraft.block.AbstractBlock.Properties; + public class CrushingWheelBlock extends RotatedPillarKineticBlock implements ITE { public CrushingWheelBlock(Properties properties) { @@ -38,11 +40,11 @@ public class CrushingWheelBlock extends RotatedPillarKineticBlock implements ITE @Override public Axis getRotationAxis(BlockState state) { - return state.get(AXIS); + return state.getValue(AXIS); } @Override - public BlockRenderType getRenderType(BlockState state) { + public BlockRenderType getRenderShape(BlockState state) { return BlockRenderType.ENTITYBLOCK_ANIMATED; } @@ -53,35 +55,35 @@ public class CrushingWheelBlock extends RotatedPillarKineticBlock implements ITE } @Override - public void onReplaced(BlockState state, World worldIn, BlockPos pos, BlockState newState, boolean isMoving) { + public void onRemove(BlockState state, World worldIn, BlockPos pos, BlockState newState, boolean isMoving) { for (Direction d : Iterate.directions) { - if (d.getAxis() == state.get(AXIS)) + if (d.getAxis() == state.getValue(AXIS)) continue; - if (AllBlocks.CRUSHING_WHEEL_CONTROLLER.has(worldIn.getBlockState(pos.offset(d)))) - worldIn.setBlockState(pos.offset(d), Blocks.AIR.getDefaultState()); + if (AllBlocks.CRUSHING_WHEEL_CONTROLLER.has(worldIn.getBlockState(pos.relative(d)))) + worldIn.setBlockAndUpdate(pos.relative(d), Blocks.AIR.defaultBlockState()); } if (state.hasTileEntity() && state.getBlock() != newState.getBlock()) { - worldIn.removeTileEntity(pos); + worldIn.removeBlockEntity(pos); } } public void updateControllers(BlockState state, World world, BlockPos pos, Direction side) { - if (side.getAxis() == state.get(AXIS)) + if (side.getAxis() == state.getValue(AXIS)) return; if (world == null) return; - BlockPos controllerPos = pos.offset(side); - BlockPos otherWheelPos = pos.offset(side, 2); + BlockPos controllerPos = pos.relative(side); + BlockPos otherWheelPos = pos.relative(side, 2); boolean controllerExists = AllBlocks.CRUSHING_WHEEL_CONTROLLER.has(world.getBlockState(controllerPos)); boolean controllerIsValid = controllerExists && world.getBlockState(controllerPos) - .get(VALID); + .getValue(VALID); Direction controllerOldDirection = controllerExists ? world.getBlockState(controllerPos) - .get(FACING) + .getValue(FACING) : null; boolean controllerShouldExist = false; @@ -97,29 +99,29 @@ public class CrushingWheelBlock extends RotatedPillarKineticBlock implements ITE if (te != null && otherTe != null && (te.getSpeed() > 0) != (otherTe.getSpeed() > 0) && te.getSpeed() != 0) { - Axis wheelAxis = state.get(AXIS); + Axis wheelAxis = state.getValue(AXIS); Axis sideAxis = side.getAxis(); - int controllerADO = Math.round(Math.signum(te.getSpeed())) * side.getAxisDirection().getOffset(); + int controllerADO = Math.round(Math.signum(te.getSpeed())) * side.getAxisDirection().getStep(); Vector3d controllerDirVec = new Vector3d(wheelAxis == Axis.X ? 1 : 0 , wheelAxis == Axis.Y ? 1 : 0 , wheelAxis == Axis.Z ? 1 : 0) - .crossProduct(new Vector3d(sideAxis == Axis.X ? 1 : 0 + .cross(new Vector3d(sideAxis == Axis.X ? 1 : 0 , sideAxis == Axis.Y ? 1 : 0 , sideAxis == Axis.Z ? 1 : 0)); - controllerNewDirection = Direction.getFacingFromVector(controllerDirVec.x * controllerADO + controllerNewDirection = Direction.getNearest(controllerDirVec.x * controllerADO , controllerDirVec.y * controllerADO , controllerDirVec.z * controllerADO); controllerShouldBeValid = true; } - if (otherState.get(AXIS) != state.get(AXIS)) + if (otherState.getValue(AXIS) != state.getValue(AXIS)) controllerShouldExist = false; } if (!controllerShouldExist) { if (controllerExists) - world.setBlockState(controllerPos, Blocks.AIR.getDefaultState()); + world.setBlockAndUpdate(controllerPos, Blocks.AIR.defaultBlockState()); return; } @@ -128,13 +130,13 @@ public class CrushingWheelBlock extends RotatedPillarKineticBlock implements ITE .getMaterial() .isReplaceable()) return; - world.setBlockState(controllerPos, AllBlocks.CRUSHING_WHEEL_CONTROLLER.getDefaultState() - .with(VALID, controllerShouldBeValid) - .with(FACING, controllerNewDirection)); + world.setBlockAndUpdate(controllerPos, AllBlocks.CRUSHING_WHEEL_CONTROLLER.getDefaultState() + .setValue(VALID, controllerShouldBeValid) + .setValue(FACING, controllerNewDirection)); } else if (controllerIsValid != controllerShouldBeValid || controllerOldDirection != controllerNewDirection) { - world.setBlockState(controllerPos, world.getBlockState(controllerPos) - .with(VALID, controllerShouldBeValid) - .with(FACING, controllerNewDirection)); + world.setBlockAndUpdate(controllerPos, world.getBlockState(controllerPos) + .setValue(VALID, controllerShouldBeValid) + .setValue(FACING, controllerNewDirection)); } ((CrushingWheelControllerBlock) AllBlocks.CRUSHING_WHEEL_CONTROLLER.get()) @@ -143,7 +145,7 @@ public class CrushingWheelBlock extends RotatedPillarKineticBlock implements ITE } @Override - public void onEntityCollision(BlockState state, World worldIn, BlockPos pos, Entity entityIn) { + public void entityInside(BlockState state, World worldIn, BlockPos pos, Entity entityIn) { if (entityIn.getY() < pos.getY() + 1.25f || !entityIn.isOnGround()) return; @@ -153,29 +155,29 @@ public class CrushingWheelBlock extends RotatedPillarKineticBlock implements ITE double x = 0; double z = 0; - if (state.get(AXIS) == Axis.X) { + if (state.getValue(AXIS) == Axis.X) { z = speed / 20f; x += (pos.getX() + .5f - entityIn.getX()) * .1f; } - if (state.get(AXIS) == Axis.Z) { + if (state.getValue(AXIS) == Axis.Z) { x = speed / -20f; z += (pos.getZ() + .5f - entityIn.getZ()) * .1f; } - entityIn.setMotion(entityIn.getMotion() + entityIn.setDeltaMovement(entityIn.getDeltaMovement() .add(x, 0, z)); } @Override - public boolean isValidPosition(BlockState state, IWorldReader worldIn, BlockPos pos) { + public boolean canSurvive(BlockState state, IWorldReader worldIn, BlockPos pos) { for (Direction direction : Iterate.directions) { - BlockPos neighbourPos = pos.offset(direction); + BlockPos neighbourPos = pos.relative(direction); BlockState neighbourState = worldIn.getBlockState(neighbourPos); - Axis stateAxis = state.get(AXIS); + Axis stateAxis = state.getValue(AXIS); if (AllBlocks.CRUSHING_WHEEL_CONTROLLER.has(neighbourState) && direction.getAxis() != stateAxis) return false; if (!AllBlocks.CRUSHING_WHEEL.has(neighbourState)) continue; - if (neighbourState.get(AXIS) != stateAxis || stateAxis != direction.getAxis()) + if (neighbourState.getValue(AXIS) != stateAxis || stateAxis != direction.getAxis()) return false; } @@ -184,7 +186,7 @@ public class CrushingWheelBlock extends RotatedPillarKineticBlock implements ITE @Override public boolean hasShaftTowards(IWorldReader world, BlockPos pos, BlockState state, Direction face) { - return face.getAxis() == state.get(AXIS); + return face.getAxis() == state.getValue(AXIS); } @Override diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/crusher/CrushingWheelControllerBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/crusher/CrushingWheelControllerBlock.java index 944b8e073..686d13d2b 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/crusher/CrushingWheelControllerBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/crusher/CrushingWheelControllerBlock.java @@ -37,6 +37,8 @@ import net.minecraft.world.IBlockReader; import net.minecraft.world.IWorld; import net.minecraft.world.World; +import net.minecraft.block.AbstractBlock.Properties; + public class CrushingWheelControllerBlock extends DirectionalBlock implements ITE { @@ -52,7 +54,7 @@ public class CrushingWheelControllerBlock extends DirectionalBlock } @Override - public boolean isReplaceable(BlockState state, BlockItemUseContext useContext) { + public boolean canBeReplaced(BlockState state, BlockItemUseContext useContext) { return false; } @@ -67,17 +69,17 @@ public class CrushingWheelControllerBlock extends DirectionalBlock } @Override - protected void fillStateContainer(Builder builder) { + protected void createBlockStateDefinition(Builder builder) { builder.add(VALID); builder.add(FACING); - super.fillStateContainer(builder); + super.createBlockStateDefinition(builder); } - public void onEntityCollision(BlockState state, World worldIn, BlockPos pos, Entity entityIn) { - if (!state.get(VALID)) + public void entityInside(BlockState state, World worldIn, BlockPos pos, Entity entityIn) { + if (!state.getValue(VALID)) return; - Direction facing = state.get(FACING); + Direction facing = state.getValue(FACING); Axis axis = facing.getAxis(); checkEntityForProcessing(worldIn, pos, entityIn); @@ -85,7 +87,7 @@ public class CrushingWheelControllerBlock extends DirectionalBlock withTileEntityDo(worldIn, pos, te -> { if (te.processingEntity == entityIn) - entityIn.setMotionMultiplier(state, new Vector3d(axis == Axis.X ? (double) 0.05F : 0.25D + entityIn.makeStuckInBlock(state, new Vector3d(axis == Axis.X ? (double) 0.05F : 0.25D , axis == Axis.Y ? (double) 0.05F : 0.25D , axis == Axis.Z ? (double) 0.05F : 0.25D)); }); @@ -98,7 +100,7 @@ public class CrushingWheelControllerBlock extends DirectionalBlock if (te.crushingspeed == 0) return; if (entityIn instanceof ItemEntity) - ((ItemEntity) entityIn).setPickupDelay(10); + ((ItemEntity) entityIn).setPickUpDelay(10); CompoundNBT data = entityIn.getPersistentData(); if (data.contains("BypassCrushingWheel")) { if (pos.equals(NBTUtil.readBlockPos(data.getCompound("BypassCrushingWheel")))) @@ -109,21 +111,21 @@ public class CrushingWheelControllerBlock extends DirectionalBlock boolean isPlayer = entityIn instanceof PlayerEntity; if (isPlayer && ((PlayerEntity) entityIn).isCreative()) return; - if (isPlayer && entityIn.world.getDifficulty() == Difficulty.PEACEFUL) + if (isPlayer && entityIn.level.getDifficulty() == Difficulty.PEACEFUL) return; te.startCrushing(entityIn); } @Override - public void onLanded(IBlockReader worldIn, Entity entityIn) { - super.onLanded(worldIn, entityIn); + public void updateEntityAfterFallOn(IBlockReader worldIn, Entity entityIn) { + super.updateEntityAfterFallOn(worldIn, entityIn); //Moved to onEntityCollision to allow for omnidirectional input } @Override public void animateTick(BlockState stateIn, World worldIn, BlockPos pos, Random rand) { - if (!stateIn.get(VALID)) + if (!stateIn.getValue(VALID)) return; if (rand.nextInt(1) != 0) return; @@ -134,7 +136,7 @@ public class CrushingWheelControllerBlock extends DirectionalBlock } @Override - public BlockState updatePostPlacement(BlockState stateIn, Direction facing, BlockState facingState, IWorld worldIn, + public BlockState updateShape(BlockState stateIn, Direction facing, BlockState facingState, IWorld worldIn, BlockPos currentPos, BlockPos facingPos) { updateSpeed(stateIn, worldIn, currentPos); return stateIn; @@ -142,7 +144,7 @@ public class CrushingWheelControllerBlock extends DirectionalBlock public void updateSpeed(BlockState state, IWorld world, BlockPos pos) { withTileEntityDo(world, pos, te -> { - if (!state.get(VALID)) { + if (!state.getValue(VALID)) { if (te.crushingspeed != 0) { te.crushingspeed = 0; te.sendData(); @@ -151,12 +153,12 @@ public class CrushingWheelControllerBlock extends DirectionalBlock } for (Direction d : Iterate.directions) { - BlockState neighbour = world.getBlockState(pos.offset(d)); + BlockState neighbour = world.getBlockState(pos.relative(d)); if (!AllBlocks.CRUSHING_WHEEL.has(neighbour)) continue; - if (neighbour.get(BlockStateProperties.AXIS) == d.getAxis()) + if (neighbour.getValue(BlockStateProperties.AXIS) == d.getAxis()) continue; - KineticTileEntity wheelTe = (KineticTileEntity) world.getTileEntity(pos.offset(d)); + KineticTileEntity wheelTe = (KineticTileEntity) world.getBlockEntity(pos.relative(d)); te.crushingspeed = Math.abs(wheelTe.getSpeed() / 50f); te.sendData(); break; @@ -167,9 +169,9 @@ public class CrushingWheelControllerBlock extends DirectionalBlock @Override public VoxelShape getCollisionShape(BlockState state, IBlockReader worldIn, BlockPos pos, ISelectionContext context) { - VoxelShape standardShape = AllShapes.CRUSHING_WHEEL_CONTROLLER_COLLISION.get(state.get(FACING)); + VoxelShape standardShape = AllShapes.CRUSHING_WHEEL_CONTROLLER_COLLISION.get(state.getValue(FACING)); - if (!state.get(VALID)) + if (!state.getValue(VALID)) return standardShape; Entity entity = context.getEntity(); @@ -179,7 +181,7 @@ public class CrushingWheelControllerBlock extends DirectionalBlock CompoundNBT data = entity.getPersistentData(); if (data.contains("BypassCrushingWheel")) if (pos.equals(NBTUtil.readBlockPos(data.getCompound("BypassCrushingWheel")))) - if (state.get(FACING) != Direction.UP) // Allow output items to land on top of the block rather than falling back through. + if (state.getValue(FACING) != Direction.UP) // Allow output items to land on top of the block rather than falling back through. return VoxelShapes.empty(); CrushingWheelControllerTileEntity te = getTileEntity(worldIn, pos); @@ -190,12 +192,12 @@ public class CrushingWheelControllerBlock extends DirectionalBlock } @Override - public void onReplaced(BlockState state, World worldIn, BlockPos pos, BlockState newState, boolean isMoving) { + public void onRemove(BlockState state, World worldIn, BlockPos pos, BlockState newState, boolean isMoving) { if (!state.hasTileEntity() || state.getBlock() == newState.getBlock()) return; withTileEntityDo(worldIn, pos, te -> ItemHelper.dropContents(worldIn, pos, te.inventory)); - worldIn.removeTileEntity(pos); + worldIn.removeBlockEntity(pos); } @Override @@ -204,7 +206,7 @@ public class CrushingWheelControllerBlock extends DirectionalBlock } @Override - public boolean allowsMovement(BlockState state, IBlockReader reader, BlockPos pos, PathType type) { + public boolean isPathfindable(BlockState state, IBlockReader reader, BlockPos pos, PathType type) { return false; } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/crusher/CrushingWheelControllerTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/crusher/CrushingWheelControllerTileEntity.java index dbe728ad9..5928a5838 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/crusher/CrushingWheelControllerTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/crusher/CrushingWheelControllerTileEntity.java @@ -82,7 +82,7 @@ public class CrushingWheelControllerTileEntity extends SmartTileEntity { BlockState blockState = getBlockState(); if (blockState == null) return false; - Direction direction = blockState.get(CrushingWheelControllerBlock.FACING); + Direction direction = blockState.getValue(CrushingWheelControllerBlock.FACING); return direction == Direction.DOWN || direction == side; } @@ -91,8 +91,8 @@ public class CrushingWheelControllerTileEntity extends SmartTileEntity { super.tick(); if (searchForEntity) { searchForEntity = false; - List search = world.getEntitiesInAABBexcluding(null, new AxisAlignedBB(getPos()), - e -> entityUUID.equals(e.getUniqueID())); + List search = level.getEntities((Entity) null, new AxisAlignedBB(getBlockPos()), + e -> entityUUID.equals(e.getUUID())); if (search.isEmpty()) clear(); else @@ -104,15 +104,15 @@ public class CrushingWheelControllerTileEntity extends SmartTileEntity { if (crushingspeed == 0) return; - if (world.isRemote) + if (level.isClientSide) DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> this.tickAudio()); float speed = crushingspeed * 4; - Vector3d centerPos = VecHelper.getCenterOf(pos); - Direction facing = getBlockState().get(FACING); + Vector3d centerPos = VecHelper.getCenterOf(worldPosition); + Direction facing = getBlockState().getValue(FACING); int offset = facing.getAxisDirection() - .getOffset(); + .getStep(); Vector3d outSpeed = new Vector3d((facing.getAxis() == Axis.X ? 0.25D : 0.0D) * offset, offset == 1 ? (facing.getAxis() == Axis.Y ? 0.5D : 0.0D) : 0.0D // Increased upwards speed so upwards // crushing wheels shoot out the item @@ -130,13 +130,13 @@ public class CrushingWheelControllerTileEntity extends SmartTileEntity { inventory.remainingTime -= processingSpeed; spawnParticles(inventory.getStackInSlot(0)); - if (world.isRemote) + if (level.isClientSide) return; if (inventory.remainingTime < 20 && !inventory.appliedRecipe) { applyRecipe(); inventory.appliedRecipe = true; - world.notifyBlockUpdate(pos, getBlockState(), getBlockState(), 2 | 16); + level.sendBlockUpdated(worldPosition, getBlockState(), getBlockState(), 2 | 16); return; } @@ -148,10 +148,10 @@ public class CrushingWheelControllerTileEntity extends SmartTileEntity { // Output Items if (facing.getAxis() .isHorizontal() || facing == Direction.DOWN) { - BlockPos nextPos = pos.add(facing.getAxis() == Axis.X ? 1f * offset : 0f, (-1f), + BlockPos nextPos = worldPosition.offset(facing.getAxis() == Axis.X ? 1f * offset : 0f, (-1f), facing.getAxis() == Axis.Z ? 1f * offset : 0f); DirectBeltInputBehaviour behaviour = - TileEntityBehaviour.get(world, nextPos, DirectBeltInputBehaviour.TYPE); + TileEntityBehaviour.get(level, nextPos, DirectBeltInputBehaviour.TYPE); if (behaviour != null) { boolean changed = false; if (!behaviour.canInsertFromSide(facing)) @@ -167,7 +167,7 @@ public class CrushingWheelControllerTileEntity extends SmartTileEntity { changed = true; } if (changed) { - markDirty(); + setChanged(); sendData(); } return; @@ -179,30 +179,30 @@ public class CrushingWheelControllerTileEntity extends SmartTileEntity { ItemStack stack = inventory.getStackInSlot(slot); if (stack.isEmpty()) continue; - ItemEntity entityIn = new ItemEntity(world, outPos.x, outPos.y, outPos.z, stack); - entityIn.setMotion(outSpeed); + ItemEntity entityIn = new ItemEntity(level, outPos.x, outPos.y, outPos.z, stack); + entityIn.setDeltaMovement(outSpeed); entityIn.getPersistentData() - .put("BypassCrushingWheel", NBTUtil.writeBlockPos(pos)); - world.addEntity(entityIn); + .put("BypassCrushingWheel", NBTUtil.writeBlockPos(worldPosition)); + level.addFreshEntity(entityIn); } inventory.clear(); - world.notifyBlockUpdate(pos, getBlockState(), getBlockState(), 2 | 16); + level.sendBlockUpdated(worldPosition, getBlockState(), getBlockState(), 2 | 16); return; } if (!processingEntity.isAlive() || !processingEntity.getBoundingBox() - .intersects(new AxisAlignedBB(pos).grow(.5f))) { + .intersects(new AxisAlignedBB(worldPosition).inflate(.5f))) { clear(); return; } - double xMotion = ((pos.getX() + .5f) - processingEntity.getX()) / 2f; - double zMotion = ((pos.getZ() + .5f) - processingEntity.getZ()) / 2f; - if (processingEntity.isSneaking()) + double xMotion = ((worldPosition.getX() + .5f) - processingEntity.getX()) / 2f; + double zMotion = ((worldPosition.getZ() + .5f) - processingEntity.getZ()) / 2f; + if (processingEntity.isShiftKeyDown()) xMotion = zMotion = 0; double movement = Math.max(-speed / 4f, -.5f) * -offset; - processingEntity.setMotion( + processingEntity.setDeltaMovement( new Vector3d(facing.getAxis() == Axis.X ? movement : xMotion, facing.getAxis() == Axis.Y ? movement : 0f // Do // not // move @@ -215,7 +215,7 @@ public class CrushingWheelControllerTileEntity extends SmartTileEntity { // crushers, , facing.getAxis() == Axis.Z ? movement : zMotion)); // Or they'll only get their feet crushed. - if (world.isRemote) + if (level.isClientSide) return; if (!(processingEntity instanceof ItemEntity)) { @@ -230,18 +230,18 @@ public class CrushingWheelControllerTileEntity extends SmartTileEntity { // kill them. && (((LivingEntity) processingEntity).hurtTime <= 0)) { // This way it can actually output the items // to the right spot. - processingEntity.setPosition(entityOutPos.x, entityOutPos.y, entityOutPos.z); + processingEntity.setPos(entityOutPos.x, entityOutPos.y, entityOutPos.z); } } - processingEntity.attackEntityFrom(CrushingWheelTileEntity.damageSource, crusherDamage); + processingEntity.hurt(CrushingWheelTileEntity.damageSource, crusherDamage); if (!processingEntity.isAlive()) { - processingEntity.setPosition(entityOutPos.x, entityOutPos.y, entityOutPos.z); + processingEntity.setPos(entityOutPos.x, entityOutPos.y, entityOutPos.z); } return; } ItemEntity itemEntity = (ItemEntity) processingEntity; - itemEntity.setPickupDelay(20); + itemEntity.setPickUpDelay(20); if (facing.getAxis() == Axis.Y) { if (processingEntity.getY() * -offset < (centerPos.y - .25f) * -offset) { intakeItem(itemEntity); @@ -263,7 +263,7 @@ public class CrushingWheelControllerTileEntity extends SmartTileEntity { if (entityUUID == null && inventory.getStackInSlot(0) .isEmpty()) return; - SoundScapes.play(AmbienceGroup.CRUSHING, pos, pitch); + SoundScapes.play(AmbienceGroup.CRUSHING, worldPosition, pitch); } private void intakeItem(ItemEntity itemEntity) { @@ -272,7 +272,7 @@ public class CrushingWheelControllerTileEntity extends SmartTileEntity { .copy()); itemInserted(inventory.getStackInSlot(0)); itemEntity.remove(); - world.notifyBlockUpdate(pos, getBlockState(), getBlockState(), 2 | 16); + level.sendBlockUpdated(worldPosition, getBlockState(), getBlockState(), 2 | 16); } protected void spawnParticles(ItemStack stack) { @@ -282,14 +282,14 @@ public class CrushingWheelControllerTileEntity extends SmartTileEntity { IParticleData particleData = null; if (stack.getItem() instanceof BlockItem) particleData = new BlockParticleData(ParticleTypes.BLOCK, ((BlockItem) stack.getItem()).getBlock() - .getDefaultState()); + .defaultBlockState()); else particleData = new ItemParticleData(ParticleTypes.ITEM, stack); - Random r = world.rand; + Random r = level.random; for (int i = 0; i < 4; i++) - world.addParticle(particleData, pos.getX() + r.nextFloat(), pos.getY() + r.nextFloat(), - pos.getZ() + r.nextFloat(), 0, 0, 0); + level.addParticle(particleData, worldPosition.getX() + r.nextFloat(), worldPosition.getY() + r.nextFloat(), + worldPosition.getZ() + r.nextFloat(), 0, 0, 0); } private void applyRecipe() { @@ -317,16 +317,16 @@ public class CrushingWheelControllerTileEntity extends SmartTileEntity { } public Optional> findRecipe() { - Optional> crushingRecipe = AllRecipeTypes.CRUSHING.find(wrapper, world); + Optional> crushingRecipe = AllRecipeTypes.CRUSHING.find(wrapper, level); if (!crushingRecipe.isPresent()) - crushingRecipe = AllRecipeTypes.MILLING.find(wrapper, world); + crushingRecipe = AllRecipeTypes.MILLING.find(wrapper, level); return crushingRecipe; } @Override public void write(CompoundNBT compound, boolean clientPacket) { if (hasEntity()) - compound.put("Entity", NBTUtil.fromUuid(entityUUID)); + compound.put("Entity", NBTUtil.createUUID(entityUUID)); compound.put("Inventory", inventory.serializeNBT()); compound.putFloat("Speed", crushingspeed); super.write(compound, clientPacket); @@ -336,7 +336,7 @@ public class CrushingWheelControllerTileEntity extends SmartTileEntity { protected void fromTag(BlockState state, CompoundNBT compound, boolean clientPacket) { super.fromTag(state, compound, clientPacket); if (compound.contains("Entity") && !isOccupied()) { - entityUUID = NBTUtil.readUniqueId(NBTHelper.getINBT(compound, "Entity")); + entityUUID = NBTUtil.loadUUID(NBTHelper.getINBT(compound, "Entity")); this.searchForEntity = true; } crushingspeed = compound.getFloat("Speed"); @@ -345,7 +345,7 @@ public class CrushingWheelControllerTileEntity extends SmartTileEntity { public void startCrushing(Entity entity) { processingEntity = entity; - entityUUID = entity.getUniqueID(); + entityUUID = entity.getUUID(); } private void itemInserted(ItemStack stack) { diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/crusher/CrushingWheelTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/crusher/CrushingWheelTileEntity.java index ea210238d..fa0fa32af 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/crusher/CrushingWheelTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/crusher/CrushingWheelTileEntity.java @@ -17,8 +17,8 @@ import net.minecraftforge.fml.common.Mod.EventBusSubscriber; @EventBusSubscriber public class CrushingWheelTileEntity extends KineticTileEntity { - public static DamageSource damageSource = new DamageSource("create.crush").setDamageBypassesArmor() - .setDifficultyScaled(); + public static DamageSource damageSource = new DamageSource("create.crush").bypassArmor() + .setScalesWithDifficulty(); public CrushingWheelTileEntity(TileEntityType type) { super(type); @@ -33,13 +33,13 @@ public class CrushingWheelTileEntity extends KineticTileEntity { public void fixControllers() { for (Direction d : Iterate.directions) - ((CrushingWheelBlock) getBlockState().getBlock()).updateControllers(getBlockState(), getWorld(), getPos(), + ((CrushingWheelBlock) getBlockState().getBlock()).updateControllers(getBlockState(), getLevel(), getBlockPos(), d); } @Override public AxisAlignedBB makeRenderBoundingBox() { - return new AxisAlignedBB(pos).grow(1); + return new AxisAlignedBB(worldPosition).inflate(1); } @Override @@ -61,7 +61,7 @@ public class CrushingWheelTileEntity extends KineticTileEntity { return; Vector3d outSpeed = Vector3d.ZERO; for (ItemEntity outputItem : event.getDrops()) { - outputItem.setMotion(outSpeed); + outputItem.setDeltaMovement(outSpeed); } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/deployer/BeltDeployerCallbacks.java b/src/main/java/com/simibubi/create/content/contraptions/components/deployer/BeltDeployerCallbacks.java index 7d007d11e..b0900e2be 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/deployer/BeltDeployerCallbacks.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/deployer/BeltDeployerCallbacks.java @@ -38,7 +38,7 @@ public class BeltDeployerCallbacks { if (deployerTileEntity.mode == Mode.PUNCH) return ProcessingResult.PASS; BlockState blockState = deployerTileEntity.getBlockState(); - if (!blockState.contains(FACING) || blockState.get(FACING) != Direction.DOWN) + if (!blockState.hasProperty(FACING) || blockState.getValue(FACING) != Direction.DOWN) return ProcessingResult.PASS; if (deployerTileEntity.state != State.WAITING) return ProcessingResult.HOLD; @@ -58,7 +58,7 @@ public class BeltDeployerCallbacks { if (deployerTileEntity.getSpeed() == 0) return ProcessingResult.PASS; BlockState blockState = deployerTileEntity.getBlockState(); - if (!blockState.contains(FACING) || blockState.get(FACING) != Direction.DOWN) + if (!blockState.hasProperty(FACING) || blockState.getValue(FACING) != Direction.DOWN) return ProcessingResult.PASS; IRecipe recipe = deployerTileEntity.getRecipe(s.stack); if (recipe == null) @@ -103,17 +103,17 @@ public class BeltDeployerCallbacks { else handler.handleProcessingOnItem(transported, TransportedResult.convertToAndLeaveHeld(collect, left)); - ItemStack heldItem = deployerTileEntity.player.getHeldItemMainhand(); - if (heldItem.isDamageable()) - heldItem.damageItem(1, deployerTileEntity.player, s -> s.sendBreakAnimation(Hand.MAIN_HAND)); + ItemStack heldItem = deployerTileEntity.player.getMainHandItem(); + if (heldItem.isDamageableItem()) + heldItem.hurtAndBreak(1, deployerTileEntity.player, s -> s.broadcastBreakEvent(Hand.MAIN_HAND)); else heldItem.shrink(1); - BlockPos pos = deployerTileEntity.getPos(); - World world = deployerTileEntity.getWorld(); + BlockPos pos = deployerTileEntity.getBlockPos(); + World world = deployerTileEntity.getLevel(); if (heldItem.isEmpty()) - world.playSound(null, pos, SoundEvents.ENTITY_ITEM_BREAK, SoundCategory.BLOCKS, .25f, 1); - world.playSound(null, pos, SoundEvents.ENTITY_ITEM_PICKUP, SoundCategory.BLOCKS, .25f, .75f); + world.playSound(null, pos, SoundEvents.ITEM_BREAK, SoundCategory.BLOCKS, .25f, 1); + world.playSound(null, pos, SoundEvents.ITEM_PICKUP, SoundCategory.BLOCKS, .25f, .75f); if (recipe instanceof SandPaperPolishingRecipe) AllSoundEvents.AUTO_POLISH.playOnServer(world, pos, .25f, 1f); 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 437ac1686..2a2d19cd1 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 @@ -51,9 +51,9 @@ public class DeployerActorInstance extends ActorInstance { PartialModel handPose = DeployerRenderer.getHandPose(mode); stationaryTimer = context.data.contains("StationaryTimer"); - facing = state.get(FACING); + facing = state.getValue(FACING); - boolean rotatePole = state.get(AXIS_ALONG_FIRST_COORDINATE) ^ facing.getAxis() == Direction.Axis.Z; + boolean rotatePole = state.getValue(AXIS_ALONG_FIRST_COORDINATE) ^ facing.getAxis() == Direction.Axis.Z; yRot = AngleHelper.horizontalAngle(facing); zRot = facing == Direction.UP ? 270 : facing == Direction.DOWN ? 90 : 0; zRotPole = rotatePole ? 90 : 0; @@ -89,7 +89,7 @@ public class DeployerActorInstance extends ActorInstance { factor = .5f - MathHelper.clamp(MathHelper.lerp(AnimationTickHolder.getPartialTicks(), distance, nextDistance), 0, 1); } - Vector3d offset = Vector3d.of(facing.getDirectionVec()).scale(factor); + Vector3d offset = Vector3d.atLowerCornerOf(facing.getNormal()).scale(factor); MatrixStack ms = new MatrixStack(); MatrixStacker msr = MatrixStacker.of(ms); diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerApplicationRecipe.java b/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerApplicationRecipe.java index d3c6f0ed8..c315bea50 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerApplicationRecipe.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerApplicationRecipe.java @@ -37,9 +37,9 @@ public class DeployerApplicationRecipe extends ProcessingRecipe i @Override public boolean matches(RecipeWrapper inv, World p_77569_2_) { return ingredients.get(0) - .test(inv.getStackInSlot(0)) + .test(inv.getItem(0)) && ingredients.get(1) - .test(inv.getStackInSlot(1)); + .test(inv.getItem(1)); } @Override @@ -69,8 +69,8 @@ public class DeployerApplicationRecipe extends ProcessingRecipe i .map(r -> new ProcessingRecipeBuilder<>(DeployerApplicationRecipe::new, Create.asResource(r.getId() .getPath() + "_using_deployer")).require(r.getIngredients() .get(0)) - .require(Ingredient.fromItems(AllItems.SAND_PAPER.get(), AllItems.RED_SAND_PAPER.get())) - .output(r.getRecipeOutput()) + .require(Ingredient.of(AllItems.SAND_PAPER.get(), AllItems.RED_SAND_PAPER.get())) + .output(r.getResultItem()) .build()) .collect(Collectors.toList()); } @@ -84,11 +84,11 @@ public class DeployerApplicationRecipe extends ProcessingRecipe i @OnlyIn(Dist.CLIENT) public ITextComponent getDescriptionForAssembly() { ItemStack[] matchingStacks = ingredients.get(1) - .getMatchingStacks(); + .getItems(); if (matchingStacks.length == 0) return new StringTextComponent("Invalid"); return Lang.translate("recipe.assembly.deploying_item", - new TranslationTextComponent(matchingStacks[0].getTranslationKey()).getString()); + new TranslationTextComponent(matchingStacks[0].getDescriptionId()).getString()); } @Override diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerBlock.java index 8934429fa..5485dd542 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerBlock.java @@ -31,6 +31,8 @@ import net.minecraft.util.math.shapes.VoxelShape; import net.minecraft.world.IBlockReader; import net.minecraft.world.World; +import net.minecraft.block.AbstractBlock.Properties; + @ParametersAreNonnullByDefault @MethodsReturnNonnullByDefault public class DeployerBlock extends DirectionalAxisKineticBlock implements ITE { @@ -45,63 +47,63 @@ public class DeployerBlock extends DirectionalAxisKineticBlock implements ITE { if (te.player != null && !isMoving) { - te.player.inventory.dropAllItems(); - te.overflowItems.forEach(itemstack -> te.player.dropItem(itemstack, true, false)); + te.player.inventory.dropAll(); + te.overflowItems.forEach(itemstack -> te.player.drop(itemstack, true, false)); te.player.remove(); te.player = null; } }); TileEntityBehaviour.destroy(worldIn, pos, FilteringBehaviour.TYPE); - worldIn.removeTileEntity(pos); + worldIn.removeBlockEntity(pos); } } @Override - public ActionResultType onUse(BlockState state, World worldIn, BlockPos pos, PlayerEntity player, Hand handIn, + public ActionResultType use(BlockState state, World worldIn, BlockPos pos, PlayerEntity player, Hand handIn, BlockRayTraceResult hit) { - ItemStack heldByPlayer = player.getHeldItem(handIn) + ItemStack heldByPlayer = player.getItemInHand(handIn) .copy(); if (AllItems.WRENCH.isIn(heldByPlayer)) return ActionResultType.PASS; - if (hit.getFace() != state.get(FACING)) + if (hit.getDirection() != state.getValue(FACING)) return ActionResultType.PASS; - if (worldIn.isRemote) + if (worldIn.isClientSide) return ActionResultType.SUCCESS; withTileEntityDo(worldIn, pos, te -> { - ItemStack heldByDeployer = te.player.getHeldItemMainhand() + ItemStack heldByDeployer = te.player.getMainHandItem() .copy(); if (heldByDeployer.isEmpty() && heldByPlayer.isEmpty()) return; - player.setHeldItem(handIn, heldByDeployer); - te.player.setHeldItem(Hand.MAIN_HAND, heldByPlayer); + player.setItemInHand(handIn, heldByDeployer); + te.player.setItemInHand(Hand.MAIN_HAND, heldByPlayer); te.sendData(); }); @@ -114,8 +116,8 @@ public class DeployerBlock extends DirectionalAxisKineticBlock implements ITE fakePlayer.inventory.placeItemBackInInventory(trueSource.world, stack.getItem())); + .forEach(stack -> fakePlayer.inventory.placeItemBackInInventory(trueSource.level, stack.getItem())); event.setCanceled(true); } } @@ -118,8 +118,8 @@ public class DeployerFakePlayer extends FakePlayer { @Override public void remove(boolean keepData) { - if (blockBreakingProgress != null && !world.isRemote) - world.sendBlockBreakProgress(getEntityId(), blockBreakingProgress.getKey(), -1); + if (blockBreakingProgress != null && !level.isClientSide) + level.destroyBlockProgress(getId(), blockBreakingProgress.getKey(), -1); super.remove(keepData); } @@ -142,11 +142,11 @@ public class DeployerFakePlayer extends FakePlayer { switch (setting) { case ALL: - mob.setAttackTarget(null); + mob.setTarget(null); break; case CREEPERS: if (mob instanceof CreeperEntity) - mob.setAttackTarget(null); + mob.setTarget(null); break; case NONE: default: @@ -159,10 +159,10 @@ public class DeployerFakePlayer extends FakePlayer { } @Override - public void sendPacket(IPacket packetIn) {} + public void send(IPacket packetIn) {} @Override - public void sendPacket(IPacket packetIn, + public void send(IPacket packetIn, GenericFutureListener> futureListeners) {} } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerFilterSlot.java b/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerFilterSlot.java index b5c071b12..5267ac546 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerFilterSlot.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerFilterSlot.java @@ -15,7 +15,7 @@ public class DeployerFilterSlot extends ValueBoxTransform { @Override protected Vector3d getLocalOffset(BlockState state) { - Direction facing = state.get(DeployerBlock.FACING); + Direction facing = state.getValue(DeployerBlock.FACING); Vector3d vec = VecHelper.voxelSpace(8f, 13.5f, 11.5f); float yRot = AngleHelper.horizontalAngle(facing); @@ -28,7 +28,7 @@ public class DeployerFilterSlot extends ValueBoxTransform { @Override protected void rotate(BlockState state, MatrixStack ms) { - Direction facing = state.get(DeployerBlock.FACING); + Direction facing = state.getValue(DeployerBlock.FACING); float xRot = facing == Direction.UP ? 90 : facing == Direction.DOWN ? 270 : 0; float yRot = AngleHelper.horizontalAngle(facing) + 180; MatrixStacker.of(ms) diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerHandler.java b/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerHandler.java index 696332e89..60809d55c 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerHandler.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerHandler.java @@ -80,26 +80,26 @@ public class DeployerHandler { boolean rayMode = false; private ItemUseWorld(World world, Direction face, BlockPos pos) { - super(world, world.getChunkProvider()); + super(world, world.getChunkSource()); this.face = face; this.pos = pos; } @Override - public BlockRayTraceResult rayTraceBlocks(RayTraceContext context) { + public BlockRayTraceResult clip(RayTraceContext context) { rayMode = true; - BlockRayTraceResult rayTraceBlocks = super.rayTraceBlocks(context); + BlockRayTraceResult rayTraceBlocks = super.clip(context); rayMode = false; return rayTraceBlocks; } @Override public BlockState getBlockState(BlockPos position) { - if (rayMode && (pos.offset(face.getOpposite(), 3) + if (rayMode && (pos.relative(face.getOpposite(), 3) .equals(position) - || pos.offset(face.getOpposite(), 1) + || pos.relative(face.getOpposite(), 1) .equals(position))) - return Blocks.BEDROCK.getDefaultState(); + return Blocks.BEDROCK.defaultBlockState(); return world.getBlockState(position); } } @@ -114,7 +114,7 @@ public class DeployerHandler { BucketItem bucketItem = (BucketItem) held.getItem(); Fluid fluid = bucketItem.getFluid(); if (fluid != Fluids.EMPTY && world.getFluidState(targetPos) - .getFluid() == fluid) + .getType() == fluid) return false; } @@ -127,13 +127,13 @@ public class DeployerHandler { static void activate(DeployerFakePlayer player, Vector3d vec, BlockPos clickedPos, Vector3d extensionVector, Mode mode) { - Multimap attributeModifiers = player.getHeldItemMainhand() + Multimap attributeModifiers = player.getMainHandItem() .getAttributeModifiers(EquipmentSlotType.MAINHAND); player.getAttributes() - .addTemporaryModifiers(attributeModifiers); + .addTransientAttributeModifiers(attributeModifiers); activateInner(player, vec, clickedPos, extensionVector, mode); player.getAttributes() - .addTemporaryModifiers(attributeModifiers); + .addTransientAttributeModifiers(attributeModifiers); } private static void activateInner(DeployerFakePlayer player, Vector3d vec, BlockPos clickedPos, @@ -141,19 +141,19 @@ public class DeployerHandler { Vector3d rayOrigin = vec.add(extensionVector.scale(3 / 2f + 1 / 64f)); Vector3d rayTarget = vec.add(extensionVector.scale(5 / 2f - 1 / 64f)); - player.setPosition(rayOrigin.x, rayOrigin.y, rayOrigin.z); + player.setPos(rayOrigin.x, rayOrigin.y, rayOrigin.z); BlockPos pos = new BlockPos(vec); - ItemStack stack = player.getHeldItemMainhand(); + ItemStack stack = player.getMainHandItem(); Item item = stack.getItem(); // Check for entities - final ServerWorld world = player.getServerWorld(); - List entities = world.getEntitiesWithinAABB(Entity.class, new AxisAlignedBB(clickedPos)).stream() + final ServerWorld world = player.getLevel(); + List entities = world.getEntitiesOfClass(Entity.class, new AxisAlignedBB(clickedPos)).stream() .filter(e -> !(e instanceof AbstractContraptionEntity)) .collect(Collectors.toList()); Hand hand = Hand.MAIN_HAND; if (!entities.isEmpty()) { - Entity entity = entities.get(world.rand.nextInt(entities.size())); + Entity entity = entities.get(world.random.nextInt(entities.size())); List capturedDrops = new ArrayList<>(); boolean success = false; entity.captureDrops(capturedDrops); @@ -166,24 +166,24 @@ public class DeployerHandler { return; } if (cancelResult == null) { - if (entity.processInitialInteract(player, hand) - .isAccepted()){ + if (entity.interact(player, hand) + .consumesAction()){ if (entity instanceof AbstractVillagerEntity) { AbstractVillagerEntity villager = ((AbstractVillagerEntity) entity); - if (villager.getCustomer() instanceof DeployerFakePlayer) - villager.setCustomer(null); + if (villager.getTradingPlayer() instanceof DeployerFakePlayer) + villager.setTradingPlayer(null); } success = true; } - else if (entity instanceof LivingEntity && stack.useOnEntity(player, (LivingEntity) entity, hand) - .isAccepted()) + else if (entity instanceof LivingEntity && stack.interactLivingEntity(player, (LivingEntity) entity, hand) + .consumesAction()) success = true; } - if (!success && stack.isFood() && entity instanceof PlayerEntity) { + if (!success && stack.isEdible() && entity instanceof PlayerEntity) { PlayerEntity playerEntity = (PlayerEntity) entity; - if (playerEntity.canEat(item.getFood() - .canEatWhenFull())) { - playerEntity.onFoodEaten(world, stack); + if (playerEntity.canEat(item.getFoodProperties() + .canAlwaysEat())) { + playerEntity.eat(world, stack); player.spawnedItemEffects = stack.copy(); success = true; } @@ -192,8 +192,8 @@ public class DeployerHandler { // Punch entity if (mode == Mode.PUNCH) { - player.resetCooldown(); - player.attackTargetEntityWithCurrentItem(entity); + player.resetAttackStrengthTicker(); + player.attack(entity); success = true; } @@ -206,18 +206,18 @@ public class DeployerHandler { // Shoot ray RayTraceContext rayTraceContext = new RayTraceContext(rayOrigin, rayTarget, BlockMode.OUTLINE, FluidMode.NONE, player); - BlockRayTraceResult result = world.rayTraceBlocks(rayTraceContext); - if (result.getPos() != clickedPos) - result = new BlockRayTraceResult(result.getHitVec(), result.getFace(), clickedPos, result.isInside()); + BlockRayTraceResult result = world.clip(rayTraceContext); + if (result.getBlockPos() != clickedPos) + result = new BlockRayTraceResult(result.getLocation(), result.getDirection(), clickedPos, result.isInside()); BlockState clickedState = world.getBlockState(clickedPos); - Direction face = result.getFace(); + Direction face = result.getDirection(); if (face == null) - face = Direction.getFacingFromVector(extensionVector.x, extensionVector.y, extensionVector.z) + face = Direction.getNearest(extensionVector.x, extensionVector.y, extensionVector.z) .getOpposite(); // Left click if (mode == Mode.PUNCH) { - if (!world.isBlockModifiable(player, clickedPos)) + if (!world.mayInteract(player, clickedPos)) return; if (clickedState.getShape(world, clickedPos) .isEmpty()) { @@ -230,11 +230,11 @@ public class DeployerHandler { if (BlockHelper.extinguishFire(world, player, clickedPos, face)) // FIXME: is there an equivalent in world, as there was in 1.15? return; if (event.getUseBlock() != DENY) - clickedState.onBlockClicked(world, clickedPos, player); + clickedState.attack(world, clickedPos, player); if (stack.isEmpty()) return; - float progress = clickedState.getPlayerRelativeBlockHardness(player, world, clickedPos) * 16; + float progress = clickedState.getDestroyProgress(player, world, clickedPos) * 16; float before = 0; Pair blockBreakingProgress = player.blockBreakingProgress; if (blockBreakingProgress != null) @@ -244,8 +244,8 @@ public class DeployerHandler { .getHitSound(), SoundCategory.NEUTRAL, .25f, 1); if (progress >= 1) { - tryHarvestBlock(player.interactionManager, clickedPos); - world.sendBlockBreakProgress(player.getEntityId(), clickedPos, -1); + tryHarvestBlock(player.gameMode, clickedPos); + world.destroyBlockProgress(player.getId(), clickedPos, -1); player.blockBreakingProgress = null; return; } @@ -255,7 +255,7 @@ public class DeployerHandler { } if ((int) (before * 10) != (int) (progress * 10)) - world.sendBlockBreakProgress(player.getEntityId(), clickedPos, (int) (progress * 10)); + world.destroyBlockProgress(player.getId(), clickedPos, (int) (progress * 10)); player.blockBreakingProgress = Pair.of(clickedPos, progress); return; } @@ -278,14 +278,14 @@ public class DeployerHandler { return; } - boolean holdingSomething = !player.getHeldItemMainhand() + boolean holdingSomething = !player.getMainHandItem() .isEmpty(); boolean flag1 = - !(player.isSneaking() && holdingSomething) || (stack.doesSneakBypassUse(world, clickedPos, player)); + !(player.isShiftKeyDown() && holdingSomething) || (stack.doesSneakBypassUse(world, clickedPos, player)); // Use on block if (useBlock != DENY && flag1 - && safeOnUse(clickedState, world, clickedPos, player, hand, result).isAccepted()) + && safeOnUse(clickedState, world, clickedPos, player, hand, result).consumesAction()) return; if (stack.isEmpty()) return; @@ -293,24 +293,24 @@ public class DeployerHandler { return; if (item instanceof BlockItem && !(item instanceof CartAssemblerBlockItem) - && !clickedState.isReplaceable(new BlockItemUseContext(itemusecontext))) + && !clickedState.canBeReplaced(new BlockItemUseContext(itemusecontext))) return; // Reposition fire placement for convenience if (item == Items.FLINT_AND_STEEL) { - Direction newFace = result.getFace(); - BlockPos newPos = result.getPos(); - if (!AbstractFireBlock.method_30032(world, clickedPos, newFace)) + Direction newFace = result.getDirection(); + BlockPos newPos = result.getBlockPos(); + if (!AbstractFireBlock.canBePlacedAt(world, clickedPos, newFace)) newFace = Direction.UP; if (clickedState.getMaterial() == Material.AIR) - newPos = newPos.offset(face.getOpposite()); - result = new BlockRayTraceResult(result.getHitVec(), newFace, newPos, result.isInside()); + newPos = newPos.relative(face.getOpposite()); + result = new BlockRayTraceResult(result.getLocation(), newFace, newPos, result.isInside()); itemusecontext = new ItemUseContext(player, hand, result); } // 'Inert' item use behaviour & block placement - ActionResultType onItemUse = stack.onItemUse(itemusecontext); - if (onItemUse.isAccepted()) + ActionResultType onItemUse = stack.useOn(itemusecontext); + if (onItemUse.consumesAction()) return; if (item == Items.ENDER_PEARL) return; @@ -320,76 +320,76 @@ public class DeployerHandler { if (item instanceof BucketItem || item instanceof SandPaperItem) itemUseWorld = new ItemUseWorld(world, face, pos); - ActionResult onItemRightClick = item.onItemRightClick(itemUseWorld, player, hand); - ItemStack resultStack = onItemRightClick.getResult(); + ActionResult onItemRightClick = item.use(itemUseWorld, player, hand); + ItemStack resultStack = onItemRightClick.getObject(); if (resultStack != stack || resultStack.getCount() != stack.getCount() || resultStack.getUseDuration() > 0 - || resultStack.getDamage() != stack.getDamage()) { - player.setHeldItem(hand, onItemRightClick.getResult()); + || resultStack.getDamageValue() != stack.getDamageValue()) { + player.setItemInHand(hand, onItemRightClick.getObject()); } CompoundNBT tag = stack.getTag(); if (tag != null && stack.getItem() instanceof SandPaperItem && tag.contains("Polishing")) { - player.spawnedItemEffects = ItemStack.read(tag.getCompound("Polishing")); + player.spawnedItemEffects = ItemStack.of(tag.getCompound("Polishing")); AllSoundEvents.AUTO_POLISH.playOnServer(world, pos, .25f, 1f); } - if (!player.getActiveItemStack() + if (!player.getUseItem() .isEmpty()) - player.setHeldItem(hand, stack.onItemUseFinish(world, player)); + player.setItemInHand(hand, stack.finishUsingItem(world, player)); - player.resetActiveHand(); + player.stopUsingItem(); } public static boolean tryHarvestBlock(PlayerInteractionManager interactionManager, BlockPos pos) { // <> PlayerInteractionManager#tryHarvestBlock - ServerWorld world = interactionManager.world; + ServerWorld world = interactionManager.level; ServerPlayerEntity player = interactionManager.player; BlockState blockstate = world.getBlockState(pos); - GameType gameType = interactionManager.getGameType(); + GameType gameType = interactionManager.getGameModeForPlayer(); if (net.minecraftforge.common.ForgeHooks.onBlockBreakEvent(world, gameType, player, pos) == -1) return false; - TileEntity tileentity = world.getTileEntity(pos); - if (player.getHeldItemMainhand() + TileEntity tileentity = world.getBlockEntity(pos); + if (player.getMainHandItem() .onBlockStartBreak(pos, player)) return false; - if (player.isBlockBreakingRestricted(world, pos, gameType)) + if (player.blockActionRestricted(world, pos, gameType)) return false; - ItemStack prevHeldItem = player.getHeldItemMainhand(); + ItemStack prevHeldItem = player.getMainHandItem(); ItemStack heldItem = prevHeldItem.copy(); boolean canHarvest = blockstate.canHarvestBlock(world, pos, player); - prevHeldItem.onBlockDestroyed(world, blockstate, pos, player); + prevHeldItem.mineBlock(world, blockstate, pos, player); if (prevHeldItem.isEmpty() && !heldItem.isEmpty()) net.minecraftforge.event.ForgeEventFactory.onPlayerDestroyItem(player, heldItem, Hand.MAIN_HAND); - BlockPos posUp = pos.up(); + BlockPos posUp = pos.above(); BlockState stateUp = world.getBlockState(posUp); if (blockstate.getBlock() instanceof DoublePlantBlock - && blockstate.get(DoublePlantBlock.HALF) == DoubleBlockHalf.LOWER + && blockstate.getValue(DoublePlantBlock.HALF) == DoubleBlockHalf.LOWER && stateUp.getBlock() == blockstate.getBlock() - && stateUp.get(DoublePlantBlock.HALF) == DoubleBlockHalf.UPPER + && stateUp.getValue(DoublePlantBlock.HALF) == DoubleBlockHalf.UPPER ) { // hack to prevent DoublePlantBlock from dropping a duplicate item - world.setBlockState(pos, Blocks.AIR.getDefaultState(), 35); - world.setBlockState(posUp, Blocks.AIR.getDefaultState(), 35); + world.setBlock(pos, Blocks.AIR.defaultBlockState(), 35); + world.setBlock(posUp, Blocks.AIR.defaultBlockState(), 35); } else { if (!blockstate.removedByPlayer(world, pos, player, canHarvest, world.getFluidState(pos))) return true; } blockstate.getBlock() - .onPlayerDestroy(world, pos, blockstate); + .destroy(world, pos, blockstate); if (!canHarvest) return true; Block.getDrops(blockstate, world, pos, tileentity, player, prevHeldItem) .forEach(item -> player.inventory.placeItemBackInInventory(world, item)); - blockstate.spawnAdditionalDrops(world, pos, prevHeldItem); + blockstate.spawnAfterBreak(world, pos, prevHeldItem); return true; } @@ -397,7 +397,7 @@ public class DeployerHandler { Hand hand, BlockRayTraceResult ray) { if (state.getBlock() instanceof BeehiveBlock) return safeOnBeehiveUse(state, world, pos, player, hand); - return state.onUse(world, player, hand, ray); + return state.use(world, player, hand, ray); } protected static ActionResultType safeOnBeehiveUse(BlockState state, World world, BlockPos pos, PlayerEntity player, @@ -405,28 +405,28 @@ public class DeployerHandler { // <> BeehiveBlock#onUse BeehiveBlock block = (BeehiveBlock) state.getBlock(); - ItemStack prevHeldItem = player.getHeldItem(hand); - int honeyLevel = state.get(BeehiveBlock.HONEY_LEVEL); + ItemStack prevHeldItem = player.getItemInHand(hand); + int honeyLevel = state.getValue(BeehiveBlock.HONEY_LEVEL); boolean success = false; if (honeyLevel < 5) return ActionResultType.PASS; if (prevHeldItem.getItem() == Items.SHEARS) { - world.playSound(player, player.getX(), player.getY(), player.getZ(), SoundEvents.BLOCK_BEEHIVE_SHEAR, + world.playSound(player, player.getX(), player.getY(), player.getZ(), SoundEvents.BEEHIVE_SHEAR, SoundCategory.NEUTRAL, 1.0F, 1.0F); // <> BeehiveBlock#dropHoneycomb player.inventory.placeItemBackInInventory(world, new ItemStack(Items.HONEYCOMB, 3)); - prevHeldItem.damageItem(1, player, s -> s.sendBreakAnimation(hand)); + prevHeldItem.hurtAndBreak(1, player, s -> s.broadcastBreakEvent(hand)); success = true; } if (prevHeldItem.getItem() == Items.GLASS_BOTTLE) { prevHeldItem.shrink(1); - world.playSound(player, player.getX(), player.getY(), player.getZ(), SoundEvents.ITEM_BOTTLE_FILL, + world.playSound(player, player.getX(), player.getY(), player.getZ(), SoundEvents.BOTTLE_FILL, SoundCategory.NEUTRAL, 1.0F, 1.0F); ItemStack honeyBottle = new ItemStack(Items.HONEY_BOTTLE); if (prevHeldItem.isEmpty()) - player.setHeldItem(hand, honeyBottle); + player.setItemInHand(hand, honeyBottle); else player.inventory.placeItemBackInInventory(world, honeyBottle); success = true; @@ -435,7 +435,7 @@ public class DeployerHandler { if (!success) return ActionResultType.PASS; - block.takeHoney(world, state, pos); + block.resetHoneyLevel(world, state, pos); return ActionResultType.SUCCESS; } 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 5981b32d8..dfff538bd 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 @@ -40,9 +40,9 @@ public class DeployerInstance extends ShaftInstance implements IDynamicInstance, super(dispatcher, tile); this.tile = (DeployerTileEntity) super.tile; - facing = blockState.get(FACING); + facing = blockState.getValue(FACING); - boolean rotatePole = blockState.get(AXIS_ALONG_FIRST_COORDINATE) ^ facing.getAxis() == Direction.Axis.Z; + boolean rotatePole = blockState.getValue(AXIS_ALONG_FIRST_COORDINATE) ^ facing.getAxis() == Direction.Axis.Z; yRot = AngleHelper.horizontalAngle(facing); zRot = facing == Direction.UP ? 270 : facing == Direction.DOWN ? 90 : 0; @@ -68,7 +68,7 @@ public class DeployerInstance extends ShaftInstance implements IDynamicInstance, float newProgress = getProgress(AnimationTickHolder.getPartialTicks()); - if (!newHand && MathHelper.epsilonEquals(newProgress, progress)) return; + if (!newHand && MathHelper.equal(newProgress, progress)) return; progress = newProgress; newHand = false; @@ -118,7 +118,7 @@ public class DeployerInstance extends ShaftInstance implements IDynamicInstance, float handLength = currentHand == AllBlockPartials.DEPLOYER_HAND_POINTING ? 0 : currentHand == AllBlockPartials.DEPLOYER_HAND_HOLDING ? 4 / 16f : 3 / 16f; float distance = Math.min(MathHelper.clamp(progress, 0, 1) * (tile.reach + handLength), 21 / 16f); - Vector3i facingVec = facing.getDirectionVec(); + Vector3i facingVec = facing.getNormal(); BlockPos blockPos = getInstancePosition(); float x = blockPos.getX() + ((float) facingVec.getX()) * distance; @@ -131,12 +131,12 @@ public class DeployerInstance extends ShaftInstance implements IDynamicInstance, static void updateRotation(OrientedData pole, OrientedData hand, float yRot, float zRot, float zRotPole) { - Quaternion q = Direction.SOUTH.getUnitVector().getDegreesQuaternion(zRot); - q.multiply(Direction.UP.getUnitVector().getDegreesQuaternion(yRot)); + Quaternion q = Direction.SOUTH.step().rotationDegrees(zRot); + q.mul(Direction.UP.step().rotationDegrees(yRot)); hand.setRotation(q); - q.multiply(Direction.SOUTH.getUnitVector().getDegreesQuaternion(zRotPole)); + q.mul(Direction.SOUTH.step().rotationDegrees(zRotPole)); pole.setRotation(q); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerItemHandler.java b/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerItemHandler.java index 0e7ba0183..55dfa8d48 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerItemHandler.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerItemHandler.java @@ -32,16 +32,16 @@ public class DeployerItemHandler implements IItemHandlerModifiable { public ItemStack getHeld() { if (player == null) return ItemStack.EMPTY; - return player.getHeldItemMainhand(); + return player.getMainHandItem(); } public void set(ItemStack stack) { if (player == null) return; - if (te.getWorld().isRemote) + if (te.getLevel().isClientSide) return; - player.setHeldItem(Hand.MAIN_HAND, stack); - te.markDirty(); + player.setItemInHand(Hand.MAIN_HAND, stack); + te.setChanged(); te.sendData(); } @@ -119,7 +119,7 @@ public class DeployerItemHandler implements IItemHandlerModifiable { .split(amount); ItemStack toReturn = held.split(amount); - te.markDirty(); + te.setChanged(); te.sendData(); return toReturn; } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerMovementBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerMovementBehaviour.java index 4243f024a..6b0a5601d 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerMovementBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerMovementBehaviour.java @@ -51,20 +51,20 @@ public class DeployerMovementBehaviour extends MovementBehaviour { @Override public Vector3d getActiveAreaOffset(MovementContext context) { - return Vector3d.of(context.state.get(DeployerBlock.FACING) - .getDirectionVec()) + return Vector3d.atLowerCornerOf(context.state.getValue(DeployerBlock.FACING) + .getNormal()) .scale(2); } @Override public void visitNewPosition(MovementContext context, BlockPos pos) { - if (context.world.isRemote) + if (context.world.isClientSide) return; tryGrabbingItem(context); DeployerFakePlayer player = getPlayer(context); Mode mode = getMode(context); - if (mode == Mode.USE && !DeployerHandler.shouldActivate(player.getHeldItemMainhand(), context.world, pos, null)) + if (mode == Mode.USE && !DeployerHandler.shouldActivate(player.getMainHandItem(), context.world, pos, null)) return; activate(context, pos, player, mode); @@ -79,12 +79,12 @@ public class DeployerMovementBehaviour extends MovementBehaviour { if (AllItems.SCHEMATIC.isIn(filter)) activateAsSchematicPrinter(context, pos, player, world, filter); - Vector3d facingVec = Vector3d.of(context.state.get(DeployerBlock.FACING) - .getDirectionVec()); + Vector3d facingVec = Vector3d.atLowerCornerOf(context.state.getValue(DeployerBlock.FACING) + .getNormal()); facingVec = context.rotation.apply(facingVec); Vector3d vec = context.position.subtract(facingVec.scale(2)); - player.rotationYaw = AbstractContraptionEntity.yawFromVector(facingVec); - player.rotationPitch = AbstractContraptionEntity.pitchFromVector(facingVec) - 90; + player.yRot = AbstractContraptionEntity.yawFromVector(facingVec); + player.xRot = AbstractContraptionEntity.pitchFromVector(facingVec) - 90; DeployerHandler.activate(player, vec, pos, facingVec, mode); } @@ -105,10 +105,10 @@ public class DeployerMovementBehaviour extends MovementBehaviour { if (schematicWorld == null) return; if (!schematicWorld.getBounds() - .isVecInside(pos.subtract(schematicWorld.anchor))) + .isInside(pos.subtract(schematicWorld.anchor))) return; BlockState blockState = schematicWorld.getBlockState(pos); - ItemRequirement requirement = ItemRequirement.of(blockState, schematicWorld.getTileEntity(pos)); + ItemRequirement requirement = ItemRequirement.of(blockState, schematicWorld.getBlockEntity(pos)); if (requirement.isInvalid() || requirement.isEmpty()) return; if (AllBlocks.BELT.has(blockState)) @@ -134,14 +134,14 @@ public class DeployerMovementBehaviour extends MovementBehaviour { CompoundNBT data = null; if (AllBlockTags.SAFE_NBT.matches(blockState)) { - TileEntity tile = schematicWorld.getTileEntity(pos); + TileEntity tile = schematicWorld.getBlockEntity(pos); if (tile != null) { - data = tile.write(new CompoundNBT()); + data = tile.save(new CompoundNBT()); data = NBTProcessors.process(tile, data, true); } } - BlockSnapshot blocksnapshot = BlockSnapshot.create(world.getRegistryKey(), world, pos); + BlockSnapshot blocksnapshot = BlockSnapshot.create(world.dimension(), world, pos); BlockHelper.placeSchematicBlock(world, blockState, pos, firstRequired, data); if (ForgeEventFactory.onBlockPlace(player, blocksnapshot, Direction.UP)) blocksnapshot.restore(true, false); @@ -149,7 +149,7 @@ public class DeployerMovementBehaviour extends MovementBehaviour { @Override public void tick(MovementContext context) { - if (context.world.isRemote) + if (context.world.isClientSide) return; if (!context.stall) return; @@ -176,14 +176,14 @@ public class DeployerMovementBehaviour extends MovementBehaviour { @Override public void stopMoving(MovementContext context) { - if (context.world.isRemote) + if (context.world.isClientSide) return; DeployerFakePlayer player = getPlayer(context); if (player == null) return; - context.tileData.put("Inventory", player.inventory.write(new ListNBT())); + context.tileData.put("Inventory", player.inventory.save(new ListNBT())); player.remove(); } @@ -191,14 +191,14 @@ public class DeployerMovementBehaviour extends MovementBehaviour { DeployerFakePlayer player = getPlayer(context); if (player == null) return; - if (player.getHeldItemMainhand() + if (player.getMainHandItem() .isEmpty()) { ItemStack filter = getFilter(context); if (AllItems.SCHEMATIC.isIn(filter)) return; ItemStack held = ItemHelper.extract(context.contraption.inventory, stack -> FilterItem.test(context.world, stack, filter), 1, false); - player.setHeldItem(Hand.MAIN_HAND, held); + player.setItemInHand(Hand.MAIN_HAND, held); } } @@ -209,13 +209,13 @@ public class DeployerMovementBehaviour extends MovementBehaviour { PlayerInventory inv = player.inventory; ItemStack filter = getFilter(context); - for (List list : Arrays.asList(inv.armorInventory, inv.offHandInventory, inv.mainInventory)) { + for (List list : Arrays.asList(inv.armor, inv.offhand, inv.items)) { for (int i = 0; i < list.size(); ++i) { ItemStack itemstack = list.get(i); if (itemstack.isEmpty()) continue; - if (list == inv.mainInventory && i == inv.currentItem + if (list == inv.items && i == inv.selected && FilterItem.test(context.world, itemstack, filter)) continue; @@ -230,16 +230,16 @@ public class DeployerMovementBehaviour extends MovementBehaviour { DeployerFakePlayer player = getPlayer(context); if (player == null) return; - context.data.put("HeldItem", player.getHeldItemMainhand() + context.data.put("HeldItem", player.getMainHandItem() .serializeNBT()); } private DeployerFakePlayer getPlayer(MovementContext context) { if (!(context.temporaryData instanceof DeployerFakePlayer) && context.world instanceof ServerWorld) { DeployerFakePlayer deployerFakePlayer = new DeployerFakePlayer((ServerWorld) context.world); - deployerFakePlayer.inventory.read(context.tileData.getList("Inventory", NBT.TAG_COMPOUND)); + deployerFakePlayer.inventory.load(context.tileData.getList("Inventory", NBT.TAG_COMPOUND)); if (context.data.contains("HeldItem")) - deployerFakePlayer.setHeldItem(Hand.MAIN_HAND, ItemStack.read(context.data.getCompound("HeldItem"))); + deployerFakePlayer.setItemInHand(Hand.MAIN_HAND, ItemStack.of(context.data.getCompound("HeldItem"))); context.tileData.remove("Inventory"); context.temporaryData = deployerFakePlayer; } @@ -247,7 +247,7 @@ public class DeployerMovementBehaviour extends MovementBehaviour { } private ItemStack getFilter(MovementContext context) { - return ItemStack.read(context.tileData.getCompound("Filter")); + return ItemStack.of(context.tileData.getCompound("Filter")); } private Mode getMode(MovementContext context) { diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerRenderer.java index 9eee73565..72b799cb3 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerRenderer.java @@ -53,7 +53,7 @@ public class DeployerRenderer extends SafeTileEntityRenderer renderItem(te, partialTicks, ms, buffer, light, overlay); FilteringRenderer.renderOnTileEntity(te, partialTicks, ms, buffer, light, overlay); - if (Backend.getInstance().canUseInstancing(te.getWorld())) return; + if (Backend.getInstance().canUseInstancing(te.getLevel())) return; renderComponents(te, partialTicks, ms, buffer, light, overlay); } @@ -65,19 +65,19 @@ public class DeployerRenderer extends SafeTileEntityRenderer BlockState deployerState = te.getBlockState(); Vector3d offset = getHandOffset(te, partialTicks, deployerState).add(VecHelper.getCenterOf(BlockPos.ZERO)); - ms.push(); + ms.pushPose(); ms.translate(offset.x, offset.y, offset.z); - Direction facing = deployerState.get(FACING); + Direction facing = deployerState.getValue(FACING); boolean punching = te.mode == Mode.PUNCH; float yRot = AngleHelper.horizontalAngle(facing) + 180; float zRot = facing == Direction.UP ? 90 : facing == Direction.DOWN ? 270 : 0; boolean displayMode = facing == Direction.UP && te.getSpeed() == 0 && !punching; - ms.multiply(Vector3f.POSITIVE_Y.getDegreesQuaternion(yRot)); + ms.mulPose(Vector3f.YP.rotationDegrees(yRot)); if (!displayMode) { - ms.multiply(Vector3f.POSITIVE_X.getDegreesQuaternion(zRot)); + ms.mulPose(Vector3f.XP.rotationDegrees(zRot)); ms.translate(0, 0, -11 / 16f); } @@ -89,7 +89,7 @@ public class DeployerRenderer extends SafeTileEntityRenderer TransformType transform = TransformType.NONE; boolean isBlockItem = (te.heldItem.getItem() instanceof BlockItem) - && itemRenderer.getItemModelWithOverrides(te.heldItem, Minecraft.getInstance().world, null) + && itemRenderer.getModel(te.heldItem, Minecraft.getInstance().level, null) .isGui3d(); if (displayMode) { @@ -97,7 +97,7 @@ public class DeployerRenderer extends SafeTileEntityRenderer ms.translate(0, isBlockItem ? 9 / 16f : 11 / 16f, 0); ms.scale(scale, scale, scale); transform = TransformType.GROUND; - ms.multiply(Vector3f.POSITIVE_Y.getDegreesQuaternion(AnimationTickHolder.getRenderTime(te.getWorld()))); + ms.mulPose(Vector3f.YP.rotationDegrees(AnimationTickHolder.getRenderTime(te.getLevel()))); } else { float scale = punching ? .75f : isBlockItem ? .75f - 1 / 64f : .5f; @@ -105,33 +105,33 @@ public class DeployerRenderer extends SafeTileEntityRenderer transform = punching ? TransformType.THIRD_PERSON_RIGHT_HAND : TransformType.FIXED; } - itemRenderer.renderItem(te.heldItem, transform, light, overlay, ms, buffer); - ms.pop(); + itemRenderer.renderStatic(te.heldItem, transform, light, overlay, ms, buffer); + ms.popPose(); } protected void renderComponents(DeployerTileEntity te, float partialTicks, MatrixStack ms, IRenderTypeBuffer buffer, int light, int overlay) { - IVertexBuilder vb = buffer.getBuffer(RenderType.getSolid()); - if (!Backend.getInstance().canUseInstancing(te.getWorld())) { + IVertexBuilder vb = buffer.getBuffer(RenderType.solid()); + if (!Backend.getInstance().canUseInstancing(te.getLevel())) { KineticTileEntityRenderer.renderRotatingKineticBlock(te, getRenderedBlockState(te), ms, vb, light); } BlockState blockState = te.getBlockState(); - BlockPos pos = te.getPos(); + BlockPos pos = te.getBlockPos(); Vector3d offset = getHandOffset(te, partialTicks, blockState); SuperByteBuffer pole = PartialBufferer.get(AllBlockPartials.DEPLOYER_POLE, blockState); SuperByteBuffer hand = PartialBufferer.get(te.getHandPose(), blockState); - transform(te.getWorld(), pole.translate(offset.x, offset.y, offset.z), blockState, pos, true).renderInto(ms, + transform(te.getLevel(), pole.translate(offset.x, offset.y, offset.z), blockState, pos, true).renderInto(ms, vb); - transform(te.getWorld(), hand.translate(offset.x, offset.y, offset.z), blockState, pos, false).renderInto(ms, + transform(te.getLevel(), hand.translate(offset.x, offset.y, offset.z), blockState, pos, false).renderInto(ms, vb); } protected Vector3d getHandOffset(DeployerTileEntity te, float partialTicks, BlockState blockState) { float distance = te.getHandOffset(partialTicks); - return Vector3d.of(blockState.get(FACING).getDirectionVec()).scale(distance); + return Vector3d.atLowerCornerOf(blockState.getValue(FACING).getNormal()).scale(distance); } protected BlockState getRenderedBlockState(KineticTileEntity te) { @@ -140,10 +140,10 @@ public class DeployerRenderer extends SafeTileEntityRenderer private static SuperByteBuffer transform(World world, SuperByteBuffer buffer, BlockState deployerState, BlockPos pos, boolean axisDirectionMatters) { - Direction facing = deployerState.get(FACING); + Direction facing = deployerState.getValue(FACING); float zRotLast = - axisDirectionMatters && (deployerState.get(AXIS_ALONG_FIRST_COORDINATE) ^ facing.getAxis() == Axis.Z) ? 90 + axisDirectionMatters && (deployerState.getValue(AXIS_ALONG_FIRST_COORDINATE) ^ facing.getAxis() == Axis.Z) ? 90 : 0; float yRot = AngleHelper.horizontalAngle(facing); float zRot = facing == Direction.UP ? 270 : facing == Direction.DOWN ? 90 : 0; @@ -151,13 +151,13 @@ public class DeployerRenderer extends SafeTileEntityRenderer buffer.rotateCentered(Direction.SOUTH, (float) ((zRot) / 180 * Math.PI)); buffer.rotateCentered(Direction.UP, (float) ((yRot) / 180 * Math.PI)); buffer.rotateCentered(Direction.SOUTH, (float) ((zRotLast) / 180 * Math.PI)); - buffer.light(WorldRenderer.getLightmapCoordinates(world, deployerState, pos)); + buffer.light(WorldRenderer.getLightColor(world, deployerState, pos)); return buffer; } public static void renderInContraption(MovementContext context, PlacementSimulationWorld renderWorld, ContraptionMatrices matrices, IRenderTypeBuffer buffer) { - IVertexBuilder builder = buffer.getBuffer(RenderType.getSolid()); + IVertexBuilder builder = buffer.getBuffer(RenderType.solid()); BlockState blockState = context.state; BlockPos pos = BlockPos.ZERO; Mode mode = NBTHelper.readEnum(context.tileData, "Mode", Mode.class); @@ -178,11 +178,11 @@ public class DeployerRenderer extends SafeTileEntityRenderer factor = .5f - MathHelper.clamp(MathHelper.lerp(AnimationTickHolder.getPartialTicks(), distance, nextDistance), 0, 1); } - Vector3d offset = Vector3d.of(blockState.get(FACING) - .getDirectionVec()).scale(factor); + Vector3d offset = Vector3d.atLowerCornerOf(blockState.getValue(FACING) + .getNormal()).scale(factor); MatrixStack m = matrices.contraptionStack; - m.push(); + m.pushPose(); m.translate(offset.x, offset.y, offset.z); pole.transform(m); @@ -195,7 +195,7 @@ public class DeployerRenderer extends SafeTileEntityRenderer hand.light(matrices.entityMatrix, ContraptionRenderDispatcher.getContraptionWorldLight(context, renderWorld)) .renderInto(matrices.entityStack, builder); - m.pop(); + m.popPose(); } static PartialModel getHandPose(DeployerTileEntity.Mode mode) { diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerTileEntity.java index 8c69d61d9..b8af6dae6 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerTileEntity.java @@ -104,24 +104,24 @@ public class DeployerTileEntity extends KineticTileEntity { @Override public void initialize() { super.initialize(); - if (!world.isRemote) { - player = new DeployerFakePlayer((ServerWorld) world); + if (!level.isClientSide) { + player = new DeployerFakePlayer((ServerWorld) level); if (deferredInventoryList != null) { - player.inventory.read(deferredInventoryList); + player.inventory.load(deferredInventoryList); deferredInventoryList = null; - heldItem = player.getHeldItemMainhand(); + heldItem = player.getMainHandItem(); sendData(); } - Vector3d initialPos = VecHelper.getCenterOf(pos.offset(getBlockState().get(FACING))); - player.setPosition(initialPos.x, initialPos.y, initialPos.z); + Vector3d initialPos = VecHelper.getCenterOf(worldPosition.relative(getBlockState().getValue(FACING))); + player.setPos(initialPos.x, initialPos.y, initialPos.z); } invHandler = LazyOptional.of(this::createHandler); } protected void onExtract(ItemStack stack) { - player.setHeldItem(Hand.MAIN_HAND, stack.copy()); + player.setItemInHand(Hand.MAIN_HAND, stack.copy()); sendData(); - markDirty(); + setChanged(); } protected int getTimerSpeed() { @@ -134,9 +134,9 @@ public class DeployerTileEntity extends KineticTileEntity { if (getSpeed() == 0) return; - if (!world.isRemote && player != null && player.blockBreakingProgress != null) { - if (world.isAirBlock(player.blockBreakingProgress.getKey())) { - world.sendBlockBreakProgress(player.getEntityId(), player.blockBreakingProgress.getKey(), -1); + if (!level.isClientSide && player != null && player.blockBreakingProgress != null) { + if (level.isEmptyBlock(player.blockBreakingProgress.getKey())) { + level.destroyBlockProgress(player.getId(), player.blockBreakingProgress.getKey(), -1); player.blockBreakingProgress = null; } } @@ -144,10 +144,10 @@ public class DeployerTileEntity extends KineticTileEntity { timer -= getTimerSpeed(); return; } - if (world.isRemote) + if (level.isClientSide) return; - ItemStack stack = player.getHeldItemMainhand(); + ItemStack stack = player.getMainHandItem(); if (state == State.WAITING) { if (!overflowItems.isEmpty()) { timer = getTimerSpeed() * 10; @@ -155,15 +155,15 @@ public class DeployerTileEntity extends KineticTileEntity { } boolean changed = false; - for (int i = 0; i < player.inventory.getSizeInventory(); i++) { + for (int i = 0; i < player.inventory.getContainerSize(); i++) { if (overflowItems.size() > 10) break; - ItemStack item = player.inventory.getStackInSlot(i); + ItemStack item = player.inventory.getItem(i); if (item.isEmpty()) continue; if (item != stack || !filtering.test(item)) { overflowItems.add(item); - player.inventory.setInventorySlotContents(i, ItemStack.EMPTY); + player.inventory.setItem(i, ItemStack.EMPTY); changed = true; } } @@ -174,8 +174,8 @@ public class DeployerTileEntity extends KineticTileEntity { return; } - Direction facing = getBlockState().get(FACING); - if (mode == Mode.USE && !DeployerHandler.shouldActivate(stack, world, pos.offset(facing, 2), facing)) { + Direction facing = getBlockState().getValue(FACING); + if (mode == Mode.USE && !DeployerHandler.shouldActivate(stack, level, worldPosition.relative(facing, 2), facing)) { timer = getTimerSpeed() * 10; return; } @@ -213,14 +213,14 @@ public class DeployerTileEntity extends KineticTileEntity { protected void start() { state = State.EXPANDING; Vector3d movementVector = getMovementVector(); - Vector3d rayOrigin = VecHelper.getCenterOf(pos) + Vector3d rayOrigin = VecHelper.getCenterOf(worldPosition) .add(movementVector.scale(3 / 2f)); - Vector3d rayTarget = VecHelper.getCenterOf(pos) + Vector3d rayTarget = VecHelper.getCenterOf(worldPosition) .add(movementVector.scale(5 / 2f)); RayTraceContext rayTraceContext = new RayTraceContext(rayOrigin, rayTarget, BlockMode.OUTLINE, FluidMode.NONE, player); - BlockRayTraceResult result = world.rayTraceBlocks(rayTraceContext); - reach = (float) (.5f + Math.min(result.getHitVec() + BlockRayTraceResult result = level.clip(rayTraceContext); + reach = (float) (.5f + Math.min(result.getLocation() .subtract(rayOrigin) .length(), .75f)); timer = 1000; @@ -228,17 +228,17 @@ public class DeployerTileEntity extends KineticTileEntity { } public boolean startBoop(Direction facing) { - if (!world.isAirBlock(pos.offset(facing, 1)) || !world.isAirBlock(pos.offset(facing, 2))) + if (!level.isEmptyBlock(worldPosition.relative(facing, 1)) || !level.isEmptyBlock(worldPosition.relative(facing, 2))) return false; - BlockPos otherDeployer = pos.offset(facing, 4); - if (!world.isBlockPresent(otherDeployer)) + BlockPos otherDeployer = worldPosition.relative(facing, 4); + if (!level.isLoaded(otherDeployer)) return false; - TileEntity otherTile = world.getTileEntity(otherDeployer); + TileEntity otherTile = level.getBlockEntity(otherDeployer); if (!(otherTile instanceof DeployerTileEntity)) return false; DeployerTileEntity deployerTile = (DeployerTileEntity) otherTile; - if (world.getBlockState(otherDeployer) - .get(FACING) + if (level.getBlockState(otherDeployer) + .getValue(FACING) .getOpposite() != facing || deployerTile.mode != Mode.PUNCH) return false; @@ -251,7 +251,7 @@ public class DeployerTileEntity extends KineticTileEntity { } public void triggerBoop() { - TileEntity otherTile = world.getTileEntity(pos.offset(getBlockState().get(FACING), 4)); + TileEntity otherTile = level.getBlockEntity(worldPosition.relative(getBlockState().getValue(FACING), 4)); if (!(otherTile instanceof DeployerTileEntity)) return; @@ -270,32 +270,32 @@ public class DeployerTileEntity extends KineticTileEntity { // award nearby players List players = - world.getEntitiesWithinAABB(ServerPlayerEntity.class, new AxisAlignedBB(pos).grow(9)); + level.getEntitiesOfClass(ServerPlayerEntity.class, new AxisAlignedBB(worldPosition).inflate(9)); players.forEach(AllTriggers.DEPLOYER_BOOP::trigger); } protected void activate() { Vector3d movementVector = getMovementVector(); - Direction direction = getBlockState().get(FACING); - Vector3d center = VecHelper.getCenterOf(pos); - BlockPos clickedPos = pos.offset(direction, 2); - player.rotationYaw = direction.getHorizontalAngle(); - player.rotationPitch = direction == Direction.UP ? -90 : direction == Direction.DOWN ? 90 : 0; + Direction direction = getBlockState().getValue(FACING); + Vector3d center = VecHelper.getCenterOf(worldPosition); + BlockPos clickedPos = worldPosition.relative(direction, 2); + player.yRot = direction.toYRot(); + player.xRot = direction == Direction.UP ? -90 : direction == Direction.DOWN ? 90 : 0; if (direction == Direction.DOWN - && TileEntityBehaviour.get(world, clickedPos, TransportedItemStackHandlerBehaviour.TYPE) != null) + && TileEntityBehaviour.get(level, clickedPos, TransportedItemStackHandlerBehaviour.TYPE) != null) return; // Belt processing handled in BeltDeployerCallbacks DeployerHandler.activate(player, center, clickedPos, movementVector, mode); if (player != null) - heldItem = player.getHeldItemMainhand(); + heldItem = player.getMainHandItem(); } protected Vector3d getMovementVector() { if (!AllBlocks.DEPLOYER.has(getBlockState())) return Vector3d.ZERO; - return Vector3d.of(getBlockState().get(FACING) - .getDirectionVec()); + return Vector3d.atLowerCornerOf(getBlockState().getValue(FACING) + .getNormal()); } @Override @@ -308,16 +308,16 @@ public class DeployerTileEntity extends KineticTileEntity { deferredInventoryList = compound.getList("Inventory", NBT.TAG_COMPOUND); overflowItems = NBTHelper.readItemList(compound.getList("Overflow", NBT.TAG_COMPOUND)); if (compound.contains("HeldItem")) - heldItem = ItemStack.read(compound.getCompound("HeldItem")); + heldItem = ItemStack.of(compound.getCompound("HeldItem")); super.fromTag(blockState, compound, clientPacket); if (!clientPacket) return; reach = compound.getFloat("Reach"); if (compound.contains("Particle")) { - ItemStack particleStack = ItemStack.read(compound.getCompound("Particle")); - SandPaperItem.spawnParticles(VecHelper.getCenterOf(pos) - .add(getMovementVector().scale(reach + 1)), particleStack, this.world); + ItemStack particleStack = ItemStack.of(compound.getCompound("Particle")); + SandPaperItem.spawnParticles(VecHelper.getCenterOf(worldPosition) + .add(getMovementVector().scale(reach + 1)), particleStack, this.level); } } @@ -330,9 +330,9 @@ public class DeployerTileEntity extends KineticTileEntity { if (player != null) { ListNBT invNBT = new ListNBT(); - player.inventory.write(invNBT); + player.inventory.save(invNBT); compound.put("Inventory", invNBT); - compound.put("HeldItem", player.getHeldItemMainhand().serializeNBT()); + compound.put("HeldItem", player.getMainHandItem().serializeNBT()); compound.put("Overflow", NBTHelper.writeItemList(overflowItems)); } else if (deferredInventoryList != null) { compound.put("Inventory", deferredInventoryList); @@ -345,7 +345,7 @@ public class DeployerTileEntity extends KineticTileEntity { compound.putFloat("Reach", reach); if (player == null) return; - compound.put("HeldItem", player.getHeldItemMainhand() + compound.put("HeldItem", player.getMainHandItem() .serializeNBT()); if (player.spawnedItemEffects != null) { compound.put("Particle", player.spawnedItemEffects.serializeNBT()); @@ -358,9 +358,9 @@ public class DeployerTileEntity extends KineticTileEntity { } public void redstoneUpdate() { - if (world.isRemote) + if (level.isClientSide) return; - boolean blockPowered = world.isBlockPowered(pos); + boolean blockPowered = level.hasNeighborSignal(worldPosition); if (blockPowered == redstoneLocked) return; redstoneLocked = blockPowered; @@ -374,19 +374,19 @@ public class DeployerTileEntity extends KineticTileEntity { @Override public AxisAlignedBB makeRenderBoundingBox() { - return super.makeRenderBoundingBox().grow(3); + return super.makeRenderBoundingBox().inflate(3); } @Override - public void remove() { - super.remove(); + public void setRemoved() { + super.setRemoved(); if (invHandler != null) invHandler.invalidate(); } public void changeMode() { mode = mode == Mode.PUNCH ? Mode.USE : Mode.PUNCH; - markDirty(); + setChanged(); sendData(); } @@ -444,21 +444,21 @@ public class DeployerTileEntity extends KineticTileEntity { public IRecipe getRecipe(ItemStack stack) { if (player == null) return null; - ItemStack heldItemMainhand = player.getHeldItemMainhand(); + ItemStack heldItemMainhand = player.getMainHandItem(); if (heldItemMainhand.getItem() instanceof SandPaperItem) { - sandpaperInv.setInventorySlotContents(0, stack); - return AllRecipeTypes.SANDPAPER_POLISHING.find(sandpaperInv, world) + sandpaperInv.setItem(0, stack); + return AllRecipeTypes.SANDPAPER_POLISHING.find(sandpaperInv, level) .orElse(null); } - recipeInv.setInventorySlotContents(0, stack); - recipeInv.setInventorySlotContents(1, heldItemMainhand); + recipeInv.setItem(0, stack); + recipeInv.setItem(1, heldItemMainhand); - Optional assemblyRecipe = SequencedAssemblyRecipe.getRecipe(world, recipeInv, + Optional assemblyRecipe = SequencedAssemblyRecipe.getRecipe(level, recipeInv, AllRecipeTypes.DEPLOYING.getType(), DeployerApplicationRecipe.class); if (assemblyRecipe.isPresent()) return assemblyRecipe.get(); - return AllRecipeTypes.DEPLOYING.find(recipeInv, world) + return AllRecipeTypes.DEPLOYING.find(recipeInv, level) .orElse(null); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/fan/AirCurrent.java b/src/main/java/com/simibubi/create/content/contraptions/components/fan/AirCurrent.java index 72001c7ee..97f522e18 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/fan/AirCurrent.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/fan/AirCurrent.java @@ -46,10 +46,10 @@ import net.minecraftforge.fml.DistExecutor; public class AirCurrent { - private static final DamageSource damageSourceFire = new DamageSource("create.fan_fire").setDifficultyScaled() - .setFireDamage(); - private static final DamageSource damageSourceLava = new DamageSource("create.fan_lava").setDifficultyScaled() - .setFireDamage(); + private static final DamageSource damageSourceFire = new DamageSource("create.fan_fire").setScalesWithDifficulty() + .setIsFire(); + private static final DamageSource damageSourceLava = new DamageSource("create.fan_lava").setScalesWithDifficulty() + .setIsFire(); public final IAirCurrentSource source; public AxisAlignedBB bounds = new AxisAlignedBB(0, 0, 0, 0, 0, 0); @@ -73,12 +73,12 @@ public class AirCurrent { rebuild(); World world = source.getAirCurrentWorld(); Direction facing = direction; - if (world != null && world.isRemote) { + if (world != null && world.isClientSide) { float offset = pushing ? 0.5f : maxDistance + .5f; Vector3d pos = VecHelper.getCenterOf(source.getAirCurrentPos()) - .add(Vector3d.of(facing.getDirectionVec()) + .add(Vector3d.atLowerCornerOf(facing.getNormal()) .scale(offset)); - if (world.rand.nextFloat() < AllConfigs.CLIENT.fanParticleDensity.get()) + if (world.random.nextFloat() < AllConfigs.CLIENT.fanParticleDensity.get()) world.addParticle(new AirFlowParticleData(source.getAirCurrentPos()), pos.x, pos.y, pos.z, 0, 0, 0); } @@ -95,14 +95,14 @@ public class AirCurrent { } Vector3d center = VecHelper.getCenterOf(source.getAirCurrentPos()); - Vector3i flow = (pushing ? facing : facing.getOpposite()).getDirectionVec(); + Vector3i flow = (pushing ? facing : facing.getOpposite()).getNormal(); - float sneakModifier = entity.isSneaking() ? 4096f : 512f; + float sneakModifier = entity.isShiftKeyDown() ? 4096f : 512f; float speed = Math.abs(source.getSpeed()); - double entityDistance = entity.getPositionVec() + double entityDistance = entity.position() .distanceTo(center); float acceleration = (float) (speed / sneakModifier / (entityDistance / maxDistance)); - Vector3d previousMotion = entity.getMotion(); + Vector3d previousMotion = entity.getDeltaMovement(); float maxAcceleration = 5; double xIn = @@ -112,13 +112,13 @@ public class AirCurrent { double zIn = MathHelper.clamp(flow.getZ() * acceleration - previousMotion.z, -maxAcceleration, maxAcceleration); - entity.setMotion(previousMotion.add(new Vector3d(xIn, yIn, zIn).scale(1 / 8f))); + entity.setDeltaMovement(previousMotion.add(new Vector3d(xIn, yIn, zIn).scale(1 / 8f))); entity.fallDistance = 0; DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> enableClientPlayerSound(entity, MathHelper.clamp(speed / 128f * .4f, 0.01f, .4f))); if (entity instanceof ServerPlayerEntity) - ((ServerPlayerEntity) entity).connection.floatingTickCount = 0; + ((ServerPlayerEntity) entity).connection.aboveGroundTickCount = 0; entityDistance -= .5f; InWorldProcessing.Type processingType = getSegmentAt((float) entityDistance); @@ -131,41 +131,41 @@ public class AirCurrent { } if (entity instanceof ItemEntity) { - InWorldProcessing.spawnParticlesForProcessing(world, entity.getPositionVec(), processingType); + InWorldProcessing.spawnParticlesForProcessing(world, entity.position(), processingType); ItemEntity itemEntity = (ItemEntity) entity; - if (world.isRemote) + if (world.isClientSide) continue; if (InWorldProcessing.canProcess(itemEntity, processingType)) InWorldProcessing.applyProcessing(itemEntity, processingType); continue; } - if (world.isRemote) + if (world.isClientSide) continue; switch (processingType) { case BLASTING: - if (!entity.isFireImmune()) { - entity.setFire(10); - entity.attackEntityFrom(damageSourceLava, 4); + if (!entity.fireImmune()) { + entity.setSecondsOnFire(10); + entity.hurt(damageSourceLava, 4); } break; case SMOKING: - if (!entity.isFireImmune()) { - entity.setFire(2); - entity.attackEntityFrom(damageSourceFire, 2); + if (!entity.fireImmune()) { + entity.setSecondsOnFire(2); + entity.hurt(damageSourceFire, 2); } break; case SPLASHING: if (entity instanceof EndermanEntity || entity.getType() == EntityType.SNOW_GOLEM || entity.getType() == EntityType.BLAZE) { - entity.attackEntityFrom(DamageSource.DROWN, 2); + entity.hurt(DamageSource.DROWN, 2); } - if (!entity.isBurning()) + if (!entity.isOnFire()) break; - entity.extinguish(); - world.playSound(null, entity.getBlockPos(), SoundEvents.ENTITY_GENERIC_EXTINGUISH_FIRE, - SoundCategory.NEUTRAL, 0.7F, 1.6F + (world.rand.nextFloat() - world.rand.nextFloat()) * 0.4F); + entity.clearFire(); + world.playSound(null, entity.blockPosition(), SoundEvents.GENERIC_EXTINGUISH_FIRE, + SoundCategory.NEUTRAL, 0.7F, 1.6F + (world.random.nextFloat() - world.random.nextFloat()) * 0.4F); break; default: break; @@ -190,7 +190,7 @@ public class AirCurrent { BlockPos start = source.getAirCurrentPos(); float max = this.maxDistance; Direction facing = direction; - Vector3d directionVec = Vector3d.of(facing.getDirectionVec()); + Vector3d directionVec = Vector3d.atLowerCornerOf(facing.getNormal()); maxDistance = getFlowLimit(world, start, max, facing); // Determine segments with transported fluids/gases @@ -205,7 +205,7 @@ public class AirCurrent { int searchStep = pushing ? 1 : -1; for (int i = searchStart; i * searchStep <= searchEnd * searchStep; i += searchStep) { - BlockPos currentPos = start.offset(direction, i); + BlockPos currentPos = start.relative(direction, i); InWorldProcessing.Type newType = InWorldProcessing.Type.byBlock(world, currentPos); if (newType != Type.NONE) type = newType; @@ -228,40 +228,40 @@ public class AirCurrent { float factor = maxDistance - 1; Vector3d scale = directionVec.scale(factor); if (factor > 0) - bounds = new AxisAlignedBB(start.offset(direction)).expand(scale); + bounds = new AxisAlignedBB(start.relative(direction)).expandTowards(scale); else { - bounds = new AxisAlignedBB(start.offset(direction)).contract(scale.x, scale.y, scale.z) - .offset(scale); + bounds = new AxisAlignedBB(start.relative(direction)).contract(scale.x, scale.y, scale.z) + .move(scale); } } findAffectedHandlers(); } public static float getFlowLimit(World world, BlockPos start, float max, Direction facing) { - Vector3d directionVec = Vector3d.of(facing.getDirectionVec()); + Vector3d directionVec = Vector3d.atLowerCornerOf(facing.getNormal()); Vector3d planeVec = VecHelper.axisAlingedPlaneOf(directionVec); // 4 Rays test for holes in the shapes blocking the flow float offsetDistance = .25f; - Vector3d[] offsets = new Vector3d[] { planeVec.mul(offsetDistance, offsetDistance, offsetDistance), - planeVec.mul(-offsetDistance, -offsetDistance, offsetDistance), - planeVec.mul(offsetDistance, -offsetDistance, -offsetDistance), - planeVec.mul(-offsetDistance, offsetDistance, -offsetDistance), }; + Vector3d[] offsets = new Vector3d[] { planeVec.multiply(offsetDistance, offsetDistance, offsetDistance), + planeVec.multiply(-offsetDistance, -offsetDistance, offsetDistance), + planeVec.multiply(offsetDistance, -offsetDistance, -offsetDistance), + planeVec.multiply(-offsetDistance, offsetDistance, -offsetDistance), }; float limitedDistance = 0; // Determine the distance of the air flow Outer: for (int i = 1; i <= max; i++) { - BlockPos currentPos = start.offset(facing, i); - if (!world.isBlockPresent(currentPos)) + BlockPos currentPos = start.relative(facing, i); + if (!world.isLoaded(currentPos)) break; BlockState state = world.getBlockState(currentPos); if (shouldAlwaysPass(state)) continue; - VoxelShape voxelshape = state.getCollisionShape(world, currentPos, ISelectionContext.dummy()); + VoxelShape voxelshape = state.getCollisionShape(world, currentPos, ISelectionContext.empty()); if (voxelshape.isEmpty()) continue; - if (voxelshape == VoxelShapes.fullCube()) { + if (voxelshape == VoxelShapes.block()) { max = i - 1; break; } @@ -272,11 +272,11 @@ public class AirCurrent { .add(offset); Vector3d rayEnd = rayStart.add(directionVec.scale(1 + 1 / 32f)); BlockRayTraceResult blockraytraceresult = - world.rayTraceBlocks(rayStart, rayEnd, currentPos, voxelshape, state); + world.clipWithInteractionOverride(rayStart, rayEnd, currentPos, voxelshape, state); if (blockraytraceresult == null) continue Outer; - double distance = i - 1 + blockraytraceresult.getHitVec() + double distance = i - 1 + blockraytraceresult.getLocation() .distanceTo(rayStart); if (limitedDistance < distance) limitedDistance = (float) distance; @@ -291,7 +291,7 @@ public class AirCurrent { public void findEntities() { caughtEntities.clear(); caughtEntities = source.getAirCurrentWorld() - .getEntitiesWithinAABBExcludingEntity(null, bounds); + .getEntities(null, bounds); } public void findAffectedHandlers() { @@ -304,8 +304,8 @@ public class AirCurrent { continue; for (int offset : Iterate.zeroAndOne) { - BlockPos pos = start.offset(direction, i) - .down(offset); + BlockPos pos = start.relative(direction, i) + .below(offset); TransportedItemStackHandlerBehaviour behaviour = TileEntityBehaviour.get(world, pos, TransportedItemStackHandlerBehaviour.TYPE); if (behaviour != null) @@ -326,7 +326,7 @@ public class AirCurrent { handler.handleProcessingOnAllItems((transported) -> { InWorldProcessing.spawnParticlesForProcessing(world, handler.getWorldPositionOf(transported), processingType); - if (world.isRemote) + if (world.isClientSide) return TransportedResult.doNothing(); return InWorldProcessing.applyProcessing(transported, world, processingType); }); @@ -360,18 +360,18 @@ public class AirCurrent { @OnlyIn(Dist.CLIENT) private static void enableClientPlayerSound(Entity e, float maxVolume) { if (e != Minecraft.getInstance() - .getRenderViewEntity()) + .getCameraEntity()) return; isClientPlayerInAirCurrent = true; - float pitch = (float) MathHelper.clamp(e.getMotion() + float pitch = (float) MathHelper.clamp(e.getDeltaMovement() .length() * .5f, .5f, 2f); - if (flyingSound == null || flyingSound.isDonePlaying()) { - flyingSound = new AirCurrentSound(SoundEvents.ITEM_ELYTRA_FLYING, pitch); + if (flyingSound == null || flyingSound.isStopped()) { + flyingSound = new AirCurrentSound(SoundEvents.ELYTRA_FLYING, pitch); Minecraft.getInstance() - .getSoundHandler() + .getSoundManager() .play(flyingSound); } flyingSound.setPitch(pitch); @@ -382,7 +382,7 @@ public class AirCurrent { public static void tickClientPlayerSounds() { if (!AirCurrent.isClientPlayerInAirCurrent && flyingSound != null) if (flyingSound.isFaded()) - flyingSound.stop(); + flyingSound.stopSound(); else flyingSound.fadeOut(); isClientPlayerInAirCurrent = false; @@ -391,7 +391,7 @@ public class AirCurrent { public static boolean isPlayerCreativeFlying(Entity entity) { if (entity instanceof PlayerEntity) { PlayerEntity player = (PlayerEntity) entity; - return player.isCreative() && player.abilities.isFlying; + return player.isCreative() && player.abilities.flying; } return false; } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/fan/AirCurrentSound.java b/src/main/java/com/simibubi/create/content/contraptions/components/fan/AirCurrentSound.java index 7a9c4a7db..72a39910b 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/fan/AirCurrentSound.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/fan/AirCurrentSound.java @@ -12,9 +12,9 @@ public class AirCurrentSound extends TickableSound { super(p_i46532_1_, SoundCategory.BLOCKS); this.pitch = pitch; volume = 0.01f; - repeat = true; - repeatDelay = 0; - global = true; + looping = true; + delay = 0; + relative = true; } @Override @@ -23,26 +23,26 @@ public class AirCurrentSound extends TickableSound { public void setPitch(float pitch) { this.pitch = pitch; } - + public void fadeIn(float maxVolume) { volume = Math.min(maxVolume, volume + .05f); } - + public void fadeOut() { volume = Math.max(0, volume - .05f); } - + public boolean isFaded() { return volume == 0; } - + @Override public float getPitch() { return pitch; } - - public void stop() { - setDone(); + + public void stopSound() { + stop(); } - + } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/fan/EncasedFanBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/fan/EncasedFanBlock.java index 8cb03c361..79f244a1d 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/fan/EncasedFanBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/fan/EncasedFanBlock.java @@ -19,6 +19,8 @@ import net.minecraft.world.IWorld; import net.minecraft.world.IWorldReader; import net.minecraft.world.World; +import net.minecraft.block.AbstractBlock.Properties; + public class EncasedFanBlock extends DirectionalKineticBlock implements ITE { public EncasedFanBlock(Properties properties) { @@ -31,22 +33,22 @@ public class EncasedFanBlock extends DirectionalKineticBlock implements ITE te.queueGeneratorUpdate()); } @@ -91,19 +93,19 @@ public class EncasedFanBlock extends DirectionalKineticBlock implements ITE 0) speed = MathHelper.clamp(speed, 80, 64 * 20); diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/fan/EncasedFanTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/fan/EncasedFanTileEntity.java index 16da67993..fc1730c97 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/fan/EncasedFanTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/fan/EncasedFanTileEntity.java @@ -78,11 +78,11 @@ public class EncasedFanTileEntity extends GeneratingKineticTileEntity implements if (!AllBlocks.ENCASED_FAN.has(blockState)) shouldGenerate = false; - if (shouldGenerate && blockState.get(EncasedFanBlock.FACING) != Direction.DOWN) + if (shouldGenerate && blockState.getValue(EncasedFanBlock.FACING) != Direction.DOWN) shouldGenerate = false; if (shouldGenerate) - shouldGenerate = world != null && world.isBlockPowered(pos) && world.isBlockPresent(pos.down()) && blockBelowIsHot(); + shouldGenerate = level != null && level.hasNeighborSignal(worldPosition) && level.isLoaded(worldPosition.below()) && blockBelowIsHot(); if (shouldGenerate == isGenerator) return; @@ -91,19 +91,19 @@ public class EncasedFanTileEntity extends GeneratingKineticTileEntity implements } public boolean blockBelowIsHot() { - if (world == null) + if (level == null) return false; - BlockState checkState = world.getBlockState(pos.down()); + BlockState checkState = level.getBlockState(worldPosition.below()); if (!checkState.getBlock() - .isIn(AllBlockTags.FAN_HEATERS.tag)) + .is(AllBlockTags.FAN_HEATERS.tag)) return false; - if (checkState.contains(BlazeBurnerBlock.HEAT_LEVEL) && !checkState.get(BlazeBurnerBlock.HEAT_LEVEL) + if (checkState.hasProperty(BlazeBurnerBlock.HEAT_LEVEL) && !checkState.getValue(BlazeBurnerBlock.HEAT_LEVEL) .isAtLeast(BlazeBurnerBlock.HeatLevel.FADING)) return false; - if (checkState.contains(BlockStateProperties.LIT) && !checkState.get(BlockStateProperties.LIT)) + if (checkState.hasProperty(BlockStateProperties.LIT) && !checkState.getValue(BlockStateProperties.LIT)) return false; return true; @@ -117,18 +117,18 @@ public class EncasedFanTileEntity extends GeneratingKineticTileEntity implements @Nullable @Override public World getAirCurrentWorld() { - return world; + return level; } @Override public BlockPos getAirCurrentPos() { - return pos; + return worldPosition; } @Override public Direction getAirflowOriginSide() { return this.getBlockState() - .get(EncasedFanBlock.FACING); + .getValue(EncasedFanBlock.FACING); } @Override @@ -136,14 +136,14 @@ public class EncasedFanTileEntity extends GeneratingKineticTileEntity implements float speed = getSpeed(); if (speed == 0) return null; - Direction facing = getBlockState().get(BlockStateProperties.FACING); + Direction facing = getBlockState().getValue(BlockStateProperties.FACING); speed = convertToDirection(speed, facing); return speed > 0 ? facing : facing.getOpposite(); } @Override public boolean isSourceRemoved() { - return removed; + return remove; } @Override @@ -154,11 +154,11 @@ public class EncasedFanTileEntity extends GeneratingKineticTileEntity implements } public void updateChute() { - Direction direction = getBlockState().get(EncasedFanBlock.FACING); + Direction direction = getBlockState().getValue(EncasedFanBlock.FACING); if (!direction.getAxis() .isVertical()) return; - TileEntity poweredChute = world.getTileEntity(pos.offset(direction)); + TileEntity poweredChute = level.getBlockEntity(worldPosition.relative(direction)); if (!(poweredChute instanceof ChuteTileEntity)) return; ChuteTileEntity chuteTE = (ChuteTileEntity) poweredChute; @@ -176,7 +176,7 @@ public class EncasedFanTileEntity extends GeneratingKineticTileEntity implements public void tick() { super.tick(); - boolean server = !world.isRemote || isVirtual(); + boolean server = !level.isClientSide || isVirtual(); if (server && airCurrentUpdateCooldown-- <= 0) { airCurrentUpdateCooldown = AllConfigs.SERVER.kinetics.fanBlockCheckRate.get(); 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 5bae092ce..91f4edce5 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 @@ -21,7 +21,7 @@ public class FanInstance extends KineticTileInstance { public FanInstance(MaterialManager modelManager, EncasedFanTileEntity tile) { super(modelManager, tile); - direction = blockState.get(FACING); + direction = blockState.getValue(FACING); opposite = direction.getOpposite(); shaft = getRotatingMaterial().getModel(AllBlockPartials.SHAFT_HALF, blockState, opposite).createInstance(); @@ -48,10 +48,10 @@ public class FanInstance extends KineticTileInstance { @Override public void updateLight() { - BlockPos behind = pos.offset(opposite); + BlockPos behind = pos.relative(opposite); relight(behind, shaft); - BlockPos inFront = pos.offset(direction); + BlockPos inFront = pos.relative(direction); relight(inFront, fan); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/fan/NozzleBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/fan/NozzleBlock.java index b25a7d0d5..ed9b2fb73 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/fan/NozzleBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/fan/NozzleBlock.java @@ -22,6 +22,8 @@ import net.minecraft.world.IBlockReader; import net.minecraft.world.IWorldReader; import net.minecraft.world.World; +import net.minecraft.block.AbstractBlock.Properties; + @MethodsReturnNonnullByDefault @ParametersAreNonnullByDefault public class NozzleBlock extends ProperDirectionalBlock { @@ -47,37 +49,37 @@ public class NozzleBlock extends ProperDirectionalBlock { @Override public BlockState getStateForPlacement(BlockItemUseContext context) { - return getDefaultState().with(FACING, context.getFace()); + return defaultBlockState().setValue(FACING, context.getClickedFace()); } @Override public VoxelShape getShape(BlockState state, IBlockReader worldIn, BlockPos pos, ISelectionContext context) { - return AllShapes.NOZZLE.get(state.get(FACING)); + return AllShapes.NOZZLE.get(state.getValue(FACING)); } @Override public void neighborChanged(BlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos, boolean isMoving) { - if (worldIn.isRemote) + if (worldIn.isClientSide) return; - if (fromPos.equals(pos.offset(state.get(FACING).getOpposite()))) - if (!isValidPosition(state, worldIn, pos)) { + if (fromPos.equals(pos.relative(state.getValue(FACING).getOpposite()))) + if (!canSurvive(state, worldIn, pos)) { worldIn.destroyBlock(pos, true); return; } } @Override - public boolean isValidPosition(BlockState state, IWorldReader worldIn, BlockPos pos) { - Direction towardsFan = state.get(FACING).getOpposite(); - TileEntity te = worldIn.getTileEntity(pos.offset(towardsFan)); + public boolean canSurvive(BlockState state, IWorldReader worldIn, BlockPos pos) { + Direction towardsFan = state.getValue(FACING).getOpposite(); + TileEntity te = worldIn.getBlockEntity(pos.relative(towardsFan)); return te instanceof IAirCurrentSource && ((IAirCurrentSource) te).getAirflowOriginSide() == towardsFan.getOpposite(); } @Override - public boolean allowsMovement(BlockState state, IBlockReader reader, BlockPos pos, PathType type) { + public boolean isPathfindable(BlockState state, IBlockReader reader, BlockPos pos, PathType type) { return false; } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/fan/NozzleTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/fan/NozzleTileEntity.java index 73066ab14..1ca0d1ee5 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/fan/NozzleTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/fan/NozzleTileEntity.java @@ -61,7 +61,7 @@ public class NozzleTileEntity extends SmartTileEntity { @Override public void initialize() { - fanPos = pos.offset(getBlockState().get(NozzleBlock.FACING) + fanPos = worldPosition.relative(getBlockState().getValue(NozzleBlock.FACING) .getOpposite()); super.initialize(); } @@ -74,28 +74,28 @@ public class NozzleTileEntity extends SmartTileEntity { if (this.range != range) setRange(range); - Vector3d center = VecHelper.getCenterOf(pos); - if (world.isRemote && range != 0) { - if (world.rand.nextInt( + Vector3d center = VecHelper.getCenterOf(worldPosition); + if (level.isClientSide && range != 0) { + if (level.random.nextInt( MathHelper.clamp((AllConfigs.SERVER.kinetics.fanPushDistance.get() - (int) range), 1, 10)) == 0) { - Vector3d start = VecHelper.offsetRandomly(center, world.rand, pushing ? 1 : range / 2); + Vector3d start = VecHelper.offsetRandomly(center, level.random, pushing ? 1 : range / 2); Vector3d motion = center.subtract(start) .normalize() .scale(MathHelper.clamp(range * (pushing ? .025f : 1f), 0, .5f) * (pushing ? -1 : 1)); - world.addParticle(ParticleTypes.POOF, start.x, start.y, start.z, motion.x, motion.y, motion.z); + level.addParticle(ParticleTypes.POOF, start.x, start.y, start.z, motion.x, motion.y, motion.z); } } for (Iterator iterator = pushingEntities.iterator(); iterator.hasNext();) { Entity entity = iterator.next(); - Vector3d diff = entity.getPositionVec() + Vector3d diff = entity.position() .subtract(center); - if (!(entity instanceof PlayerEntity) && world.isRemote) + if (!(entity instanceof PlayerEntity) && level.isClientSide) continue; double distance = diff.length(); - if (distance > range || entity.isSneaking() || AirCurrent.isPlayerCreativeFlying(entity)) { + if (distance > range || entity.isShiftKeyDown() || AirCurrent.isPlayerCreativeFlying(entity)) { iterator.remove(); continue; } @@ -106,10 +106,10 @@ public class NozzleTileEntity extends SmartTileEntity { float factor = (entity instanceof ItemEntity) ? 1 / 128f : 1 / 32f; Vector3d pushVec = diff.normalize() .scale((range - distance) * (pushing ? 1 : -1)); - entity.setMotion(entity.getMotion() + entity.setDeltaMovement(entity.getDeltaMovement() .add(pushVec.scale(factor))); entity.fallDistance = 0; - entity.velocityChanged = true; + entity.hurtMarked = true; } } @@ -122,7 +122,7 @@ public class NozzleTileEntity extends SmartTileEntity { } private float calcRange() { - TileEntity te = world.getTileEntity(fanPos); + TileEntity te = level.getBlockEntity(fanPos); if (!(te instanceof IAirCurrentSource)) return 0; @@ -144,15 +144,15 @@ public class NozzleTileEntity extends SmartTileEntity { if (range == 0) return; - Vector3d center = VecHelper.getCenterOf(pos); - AxisAlignedBB bb = new AxisAlignedBB(center, center).grow(range / 2f); + Vector3d center = VecHelper.getCenterOf(worldPosition); + AxisAlignedBB bb = new AxisAlignedBB(center, center).inflate(range / 2f); - for (Entity entity : world.getEntitiesWithinAABB(Entity.class, bb)) { - Vector3d diff = entity.getPositionVec() + for (Entity entity : level.getEntitiesOfClass(Entity.class, bb)) { + Vector3d diff = entity.position() .subtract(center); double distance = diff.length(); - if (distance > range || entity.isSneaking() || AirCurrent.isPlayerCreativeFlying(entity)) + if (distance > range || entity.isShiftKeyDown() || AirCurrent.isPlayerCreativeFlying(entity)) continue; boolean canSee = canSee(entity); @@ -172,8 +172,8 @@ public class NozzleTileEntity extends SmartTileEntity { iterator.remove(); } - if (!pushing && pushingEntities.size() > 256 && !world.isRemote) { - world.createExplosion(null, center.x, center.y, center.z, 2, Mode.NONE); + if (!pushing && pushingEntities.size() > 256 && !level.isClientSide) { + level.explode(null, center.x, center.y, center.z, 2, Mode.NONE); for (Iterator iterator = pushingEntities.iterator(); iterator.hasNext();) { Entity entity = iterator.next(); entity.remove(); @@ -184,10 +184,10 @@ public class NozzleTileEntity extends SmartTileEntity { } private boolean canSee(Entity entity) { - RayTraceContext context = new RayTraceContext(entity.getPositionVec(), VecHelper.getCenterOf(pos), + RayTraceContext context = new RayTraceContext(entity.position(), VecHelper.getCenterOf(worldPosition), BlockMode.COLLIDER, FluidMode.NONE, entity); - return pos.equals(world.rayTraceBlocks(context) - .getPos()); + return worldPosition.equals(level.clip(context) + .getBlockPos()); } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/fan/SplashingRecipe.java b/src/main/java/com/simibubi/create/content/contraptions/components/fan/SplashingRecipe.java index 9a9801cc3..499f6c8ff 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/fan/SplashingRecipe.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/fan/SplashingRecipe.java @@ -22,7 +22,7 @@ public class SplashingRecipe extends ProcessingRecipe im public FlyWheelInstance(MaterialManager modelManager, FlywheelTileEntity tile) { super(modelManager, tile); - facing = blockState.get(HORIZONTAL_FACING); + facing = blockState.getValue(HORIZONTAL_FACING); shaft = setup(shaftModel().createInstance()); BlockState referenceState = blockState.rotate(Rotation.CLOCKWISE_90); - wheel = getTransformMaterial().getModel(AllBlockPartials.FLYWHEEL, referenceState, referenceState.get(HORIZONTAL_FACING)).createInstance(); + wheel = getTransformMaterial().getModel(AllBlockPartials.FLYWHEEL, referenceState, referenceState.getValue(HORIZONTAL_FACING)).createInstance(); connection = FlywheelBlock.getConnection(blockState); if (connection != null) { - connectedLeft = blockState.get(FlywheelBlock.CONNECTION) == FlywheelBlock.ConnectionState.LEFT; + connectedLeft = blockState.getValue(FlywheelBlock.CONNECTION) == FlywheelBlock.ConnectionState.LEFT; boolean flipAngle = connection.getAxis() == Direction.Axis.X ^ connection.getAxisDirection() == Direction.AxisDirection.NEGATIVE; @@ -102,34 +102,34 @@ public class FlyWheelInstance extends KineticTileInstance im if (connection != null) { float rotation = angle * connectorAngleMult; - ms.push(); + ms.pushPose(); rotateToFacing(msr, connection); - ms.push(); + ms.pushPose(); transformConnector(msr, true, true, rotation, connectedLeft); upperRotating.setTransform(ms); - ms.pop(); + ms.popPose(); - ms.push(); + ms.pushPose(); transformConnector(msr, false, true, rotation, connectedLeft); lowerRotating.setTransform(ms); - ms.pop(); + ms.popPose(); - ms.push(); + ms.pushPose(); transformConnector(msr, true, false, rotation, connectedLeft); upperSliding.setTransform(ms); - ms.pop(); + ms.popPose(); - ms.push(); + ms.pushPose(); transformConnector(msr, false, false, rotation, connectedLeft); lowerSliding.setTransform(ms); - ms.pop(); + ms.popPose(); - ms.pop(); + ms.popPose(); } msr.centre() - .rotate(Direction.getFacingFromAxis(Direction.AxisDirection.POSITIVE, facing.getAxis()), AngleHelper.rad(angle)) + .rotate(Direction.get(Direction.AxisDirection.POSITIVE, facing.getAxis()), AngleHelper.rad(angle)) .unCentre(); wheel.setTransform(ms); @@ -145,7 +145,7 @@ public class FlyWheelInstance extends KineticTileInstance im relight(pos, shaft, wheel); if (connection != null) { - relight(this.pos.offset(connection), connectors.stream()); + relight(this.pos.relative(connection), connectors.stream()); } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/flywheel/FlywheelBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/flywheel/FlywheelBlock.java index 607dcdd19..453b74a35 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/flywheel/FlywheelBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/flywheel/FlywheelBlock.java @@ -23,18 +23,20 @@ import net.minecraft.world.IBlockReader; import net.minecraft.world.IWorldReader; import net.minecraft.world.World; +import net.minecraft.block.AbstractBlock.Properties; + public class FlywheelBlock extends HorizontalKineticBlock { public static EnumProperty CONNECTION = EnumProperty.create("connection", ConnectionState.class); public FlywheelBlock(Properties properties) { super(properties); - setDefaultState(getDefaultState().with(CONNECTION, ConnectionState.NONE)); + registerDefaultState(defaultBlockState().setValue(CONNECTION, ConnectionState.NONE)); } @Override - protected void fillStateContainer(Builder builder) { - super.fillStateContainer(builder.add(CONNECTION)); + protected void createBlockStateDefinition(Builder builder) { + super.createBlockStateDefinition(builder.add(CONNECTION)); } @Override @@ -46,8 +48,8 @@ public class FlywheelBlock extends HorizontalKineticBlock { public BlockState getStateForPlacement(BlockItemUseContext context) { Direction preferred = getPreferredHorizontalFacing(context); if (preferred != null) - return getDefaultState().with(HORIZONTAL_FACING, preferred.getOpposite()); - return this.getDefaultState().with(HORIZONTAL_FACING, context.getPlacementHorizontalFacing()); + return defaultBlockState().setValue(HORIZONTAL_FACING, preferred.getOpposite()); + return this.defaultBlockState().setValue(HORIZONTAL_FACING, context.getHorizontalDirection()); } public static boolean isConnected(BlockState state) { @@ -55,37 +57,37 @@ public class FlywheelBlock extends HorizontalKineticBlock { } public static Direction getConnection(BlockState state) { - Direction facing = state.get(HORIZONTAL_FACING); - ConnectionState connection = state.get(CONNECTION); + Direction facing = state.getValue(HORIZONTAL_FACING); + ConnectionState connection = state.getValue(CONNECTION); if (connection == ConnectionState.LEFT) - return facing.rotateYCCW(); + return facing.getCounterClockWise(); if (connection == ConnectionState.RIGHT) - return facing.rotateY(); + return facing.getClockWise(); return null; } public static void setConnection(World world, BlockPos pos, BlockState state, Direction direction) { - Direction facing = state.get(HORIZONTAL_FACING); + Direction facing = state.getValue(HORIZONTAL_FACING); ConnectionState connection = ConnectionState.NONE; - if (direction == facing.rotateY()) + if (direction == facing.getClockWise()) connection = ConnectionState.RIGHT; - if (direction == facing.rotateYCCW()) + if (direction == facing.getCounterClockWise()) connection = ConnectionState.LEFT; - world.setBlockState(pos, state.with(CONNECTION, connection), 18); + world.setBlock(pos, state.setValue(CONNECTION, connection), 18); AllTriggers.triggerForNearbyPlayers(AllTriggers.FLYWHEEL, world, pos, 4); } @Override public boolean hasShaftTowards(IWorldReader world, BlockPos pos, BlockState state, Direction face) { - return face == state.get(HORIZONTAL_FACING).getOpposite(); + return face == state.getValue(HORIZONTAL_FACING).getOpposite(); } @Override public Axis getRotationAxis(BlockState state) { - return state.get(HORIZONTAL_FACING).getAxis(); + return state.getValue(HORIZONTAL_FACING).getAxis(); } @Override @@ -94,23 +96,23 @@ public class FlywheelBlock extends HorizontalKineticBlock { if (connection == null) return super.onWrenched(state ,context); - if (context.getFace().getAxis() == state.get(HORIZONTAL_FACING).getAxis()) + if (context.getClickedFace().getAxis() == state.getValue(HORIZONTAL_FACING).getAxis()) return ActionResultType.PASS; - World world = context.getWorld(); - BlockPos enginePos = context.getPos().offset(connection, 2); + World world = context.getLevel(); + BlockPos enginePos = context.getClickedPos().relative(connection, 2); BlockState engine = world.getBlockState(enginePos); if (engine.getBlock() instanceof FurnaceEngineBlock) ((FurnaceEngineBlock) engine.getBlock()).withTileEntityDo(world, enginePos, EngineTileEntity::detachWheel); - return super.onWrenched(state.with(CONNECTION, ConnectionState.NONE), context); + return super.onWrenched(state.setValue(CONNECTION, ConnectionState.NONE), context); } public enum ConnectionState implements IStringSerializable { NONE, LEFT, RIGHT; @Override - public String getString() { + public String getSerializedName() { return Lang.asId(name()); } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/flywheel/FlywheelGenerator.java b/src/main/java/com/simibubi/create/content/contraptions/components/flywheel/FlywheelGenerator.java index 13dc7759d..9244651ad 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/flywheel/FlywheelGenerator.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/flywheel/FlywheelGenerator.java @@ -17,14 +17,14 @@ public class FlywheelGenerator extends SpecialBlockStateGen { @Override protected int getYRotation(BlockState state) { - return horizontalAngle(state.get(FlywheelBlock.HORIZONTAL_FACING)) + 90; + return horizontalAngle(state.getValue(FlywheelBlock.HORIZONTAL_FACING)) + 90; } @Override public ModelFile getModel(DataGenContext ctx, RegistrateBlockstateProvider prov, BlockState state) { return prov.models() - .getExistingFile(prov.modLoc("block/" + ctx.getName() + "/casing_" + state.get(FlywheelBlock.CONNECTION) - .getString())); + .getExistingFile(prov.modLoc("block/" + ctx.getName() + "/casing_" + state.getValue(FlywheelBlock.CONNECTION) + .getSerializedName())); } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/flywheel/FlywheelRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/components/flywheel/FlywheelRenderer.java index fc67fbd98..6eac080f0 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/flywheel/FlywheelRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/flywheel/FlywheelRenderer.java @@ -36,7 +36,7 @@ public class FlywheelRenderer extends KineticTileEntityRenderer { int light, int overlay) { super.renderSafe(te, partialTicks, ms, buffer, light, overlay); - if (Backend.getInstance().canUseInstancing(te.getWorld())) return; + if (Backend.getInstance().canUseInstancing(te.getLevel())) return; BlockState blockState = te.getBlockState(); FlywheelTileEntity wte = (FlywheelTileEntity) te; @@ -44,16 +44,16 @@ public class FlywheelRenderer extends KineticTileEntityRenderer { float speed = wte.visualSpeed.get(partialTicks) * 3 / 10f; float angle = wte.angle + speed * partialTicks; - IVertexBuilder vb = buffer.getBuffer(RenderType.getSolid()); + IVertexBuilder vb = buffer.getBuffer(RenderType.solid()); if (FlywheelBlock.isConnected(blockState)) { Direction connection = FlywheelBlock.getConnection(blockState); - light = WorldRenderer.getLightmapCoordinates(te.getWorld(), blockState, te.getPos() - .offset(connection)); + light = WorldRenderer.getLightColor(te.getLevel(), blockState, te.getBlockPos() + .relative(connection)); float rotation = connection.getAxis() == Axis.X ^ connection.getAxisDirection() == AxisDirection.NEGATIVE ? -angle : angle; - boolean flip = blockState.get(FlywheelBlock.CONNECTION) == ConnectionState.LEFT; + boolean flip = blockState.getValue(FlywheelBlock.CONNECTION) == ConnectionState.LEFT; transformConnector( rotateToFacing(PartialBufferer.get(AllBlockPartials.FLYWHEEL_UPPER_ROTATING, blockState), connection), true, true, @@ -77,9 +77,9 @@ public class FlywheelRenderer extends KineticTileEntityRenderer { private void renderFlywheel(KineticTileEntity te, MatrixStack ms, int light, BlockState blockState, float angle, IVertexBuilder vb) { BlockState referenceState = blockState.rotate(Rotation.CLOCKWISE_90); - Direction facing = referenceState.get(BlockStateProperties.HORIZONTAL_FACING); + Direction facing = referenceState.getValue(BlockStateProperties.HORIZONTAL_FACING); SuperByteBuffer wheel = PartialBufferer.getFacing(AllBlockPartials.FLYWHEEL, referenceState, facing); - kineticRotationTransform(wheel, te, blockState.get(HORIZONTAL_FACING) + kineticRotationTransform(wheel, te, blockState.getValue(HORIZONTAL_FACING) .getAxis(), AngleHelper.rad(angle), light); wheel.renderInto(ms, vb); } @@ -87,7 +87,7 @@ public class FlywheelRenderer extends KineticTileEntityRenderer { @Override protected SuperByteBuffer getRotatedModel(KineticTileEntity te) { return PartialBufferer.getFacing(AllBlockPartials.SHAFT_HALF, te.getBlockState(), te.getBlockState() - .get(BlockStateProperties.HORIZONTAL_FACING) + .getValue(BlockStateProperties.HORIZONTAL_FACING) .getOpposite()); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/flywheel/FlywheelTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/flywheel/FlywheelTileEntity.java index b27ccb01c..ece43296c 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/flywheel/FlywheelTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/flywheel/FlywheelTileEntity.java @@ -40,7 +40,7 @@ public class FlywheelTileEntity extends GeneratingKineticTileEntity { @Override public float getGeneratedSpeed() { - return convertToDirection(generatedSpeed, getBlockState().get(FlywheelBlock.HORIZONTAL_FACING)); + return convertToDirection(generatedSpeed, getBlockState().getValue(FlywheelBlock.HORIZONTAL_FACING)); } @Override @@ -50,7 +50,7 @@ public class FlywheelTileEntity extends GeneratingKineticTileEntity { @Override public AxisAlignedBB makeRenderBoundingBox() { - return super.makeRenderBoundingBox().grow(2); + return super.makeRenderBoundingBox().inflate(2); } @Override @@ -76,7 +76,7 @@ public class FlywheelTileEntity extends GeneratingKineticTileEntity { public void tick() { super.tick(); - if (world.isRemote) { + if (level.isClientSide) { float targetSpeed = isVirtual() ? speed : getGeneratedSpeed(); visualSpeed.target(targetSpeed); visualSpeed.tick(); 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 a32696209..a817af1aa 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 @@ -22,6 +22,8 @@ import net.minecraft.world.World; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraft.block.AbstractBlock.Properties; + public abstract class EngineBlock extends HorizontalBlock implements IWrenchable { protected EngineBlock(Properties builder) { @@ -29,8 +31,8 @@ public abstract class EngineBlock extends HorizontalBlock implements IWrenchable } @Override - public boolean isValidPosition(BlockState state, IWorldReader worldIn, BlockPos pos) { - return isValidPosition(state, worldIn, pos, state.get(HORIZONTAL_FACING)); + public boolean canSurvive(BlockState state, IWorldReader worldIn, BlockPos pos) { + return isValidPosition(state, worldIn, pos, state.getValue(FACING)); } @Override @@ -48,24 +50,24 @@ public abstract class EngineBlock extends HorizontalBlock implements IWrenchable @Override public BlockState getStateForPlacement(BlockItemUseContext context) { - Direction facing = context.getFace(); - return getDefaultState().with(HORIZONTAL_FACING, - facing.getAxis().isVertical() ? context.getPlacementHorizontalFacing().getOpposite() : facing); + Direction facing = context.getClickedFace(); + return defaultBlockState().setValue(FACING, + facing.getAxis().isVertical() ? context.getHorizontalDirection().getOpposite() : facing); } @Override - protected void fillStateContainer(Builder builder) { - super.fillStateContainer(builder.add(HORIZONTAL_FACING)); + protected void createBlockStateDefinition(Builder builder) { + super.createBlockStateDefinition(builder.add(FACING)); } @Override public void neighborChanged(BlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos, boolean isMoving) { - if (worldIn.isRemote) + if (worldIn.isClientSide) return; if (fromPos.equals(getBaseBlockPos(state, pos))) { - if (!isValidPosition(state, worldIn, pos)) { + if (!canSurvive(state, worldIn, pos)) { worldIn.destroyBlock(pos, true); return; } @@ -79,7 +81,7 @@ public abstract class EngineBlock extends HorizontalBlock implements IWrenchable for (Direction otherFacing : Iterate.horizontalDirections) { if (otherFacing == facing) continue; - BlockPos otherPos = baseBlockPos.offset(otherFacing); + BlockPos otherPos = baseBlockPos.relative(otherFacing); BlockState otherState = world.getBlockState(otherPos); if (otherState.getBlock() instanceof EngineBlock && getBaseBlockPos(otherState, otherPos).equals(baseBlockPos)) @@ -90,7 +92,7 @@ public abstract class EngineBlock extends HorizontalBlock implements IWrenchable } public static BlockPos getBaseBlockPos(BlockState state, BlockPos pos) { - return pos.offset(state.get(HORIZONTAL_FACING).getOpposite()); + return pos.relative(state.getValue(FACING).getOpposite()); } @Nullable 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 4ce123e96..94092ad1e 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 @@ -27,7 +27,7 @@ public class EngineInstance extends TileEntityInstance { EngineBlock engineBlock = (EngineBlock) block; PartialModel frame = engineBlock.getFrameModel(); - Direction facing = blockState.get(BlockStateProperties.HORIZONTAL_FACING); + Direction facing = blockState.getValue(BlockStateProperties.HORIZONTAL_FACING); this.frame = getTransformMaterial().getModel(frame, blockState).createInstance(); diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/flywheel/engine/EngineRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/components/flywheel/engine/EngineRenderer.java index ce77b42ef..0d09715ae 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/flywheel/engine/EngineRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/flywheel/engine/EngineRenderer.java @@ -24,7 +24,7 @@ public class EngineRenderer extends SafeTileEntityRe protected void renderSafe(T te, float partialTicks, MatrixStack ms, IRenderTypeBuffer buffer, int light, int overlay) { - if (Backend.getInstance().canUseInstancing(te.getWorld())) return; + if (Backend.getInstance().canUseInstancing(te.getLevel())) return; Block block = te.getBlockState() .getBlock(); @@ -33,13 +33,13 @@ public class EngineRenderer extends SafeTileEntityRe PartialModel frame = engineBlock.getFrameModel(); if (frame != null) { Direction facing = te.getBlockState() - .get(EngineBlock.HORIZONTAL_FACING); + .getValue(EngineBlock.FACING); float angle = AngleHelper.rad(AngleHelper.horizontalAngle(facing)); PartialBufferer.get(frame, te.getBlockState()) .rotateCentered(Direction.UP, angle) .translate(0, 0, -1) - .light(WorldRenderer.getLightmapCoordinates(te.getWorld(), te.getBlockState(), te.getPos())) - .renderInto(ms, buffer.getBuffer(RenderType.getSolid())); + .light(WorldRenderer.getLightColor(te.getLevel(), te.getBlockState(), te.getBlockPos())) + .renderInto(ms, buffer.getBuffer(RenderType.solid())); } } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/flywheel/engine/EngineTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/flywheel/engine/EngineTileEntity.java index 719a735ca..9ae752b75 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/flywheel/engine/EngineTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/flywheel/engine/EngineTileEntity.java @@ -15,6 +15,7 @@ import net.minecraft.tileentity.TileEntityType; import net.minecraft.util.Direction; import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; @@ -37,7 +38,7 @@ public class EngineTileEntity extends SmartTileEntity implements IInstanceRender @OnlyIn(Dist.CLIENT) public AxisAlignedBB getRenderBoundingBox() { if (cachedBoundingBox == null) { - cachedBoundingBox = super.getRenderBoundingBox().grow(1.5f); + cachedBoundingBox = super.getRenderBoundingBox().inflate(1.5f); } return cachedBoundingBox; } @@ -45,7 +46,7 @@ public class EngineTileEntity extends SmartTileEntity implements IInstanceRender @Override public void lazyTick() { super.lazyTick(); - if (world.isRemote) + if (level.isClientSide) return; if (poweredWheel != null && poweredWheel.isRemoved()) poweredWheel = null; @@ -54,23 +55,23 @@ public class EngineTileEntity extends SmartTileEntity implements IInstanceRender } public void attachWheel() { - Direction engineFacing = getBlockState().get(EngineBlock.HORIZONTAL_FACING); - BlockPos wheelPos = pos.offset(engineFacing, 2); - BlockState wheelState = world.getBlockState(wheelPos); + Direction engineFacing = getBlockState().getValue(EngineBlock.FACING); + BlockPos wheelPos = worldPosition.relative(engineFacing, 2); + BlockState wheelState = level.getBlockState(wheelPos); if (!AllBlocks.FLYWHEEL.has(wheelState)) return; - Direction wheelFacing = wheelState.get(FlywheelBlock.HORIZONTAL_FACING); - if (wheelFacing.getAxis() != engineFacing.rotateY().getAxis()) + Direction wheelFacing = wheelState.getValue(FlywheelBlock.HORIZONTAL_FACING); + if (wheelFacing.getAxis() != engineFacing.getClockWise().getAxis()) return; if (FlywheelBlock.isConnected(wheelState) && FlywheelBlock.getConnection(wheelState) != engineFacing.getOpposite()) return; - TileEntity te = world.getTileEntity(wheelPos); + TileEntity te = level.getBlockEntity(wheelPos); if (te.isRemoved()) return; if (te instanceof FlywheelTileEntity) { if (!FlywheelBlock.isConnected(wheelState)) - FlywheelBlock.setConnection(world, te.getPos(), te.getBlockState(), engineFacing.getOpposite()); + FlywheelBlock.setConnection(level, te.getBlockPos(), te.getBlockState(), engineFacing.getOpposite()); poweredWheel = (FlywheelTileEntity) te; refreshWheelSpeed(); } @@ -80,14 +81,14 @@ public class EngineTileEntity extends SmartTileEntity implements IInstanceRender if (poweredWheel == null || poweredWheel.isRemoved()) return; poweredWheel.setRotation(0, 0); - FlywheelBlock.setConnection(world, poweredWheel.getPos(), poweredWheel.getBlockState(), null); + FlywheelBlock.setConnection(level, poweredWheel.getBlockPos(), poweredWheel.getBlockState(), null); poweredWheel = null; } @Override - public void remove() { + public void setRemoved() { detachWheel(); - super.remove(); + super.setRemoved(); } protected void refreshWheelSpeed() { @@ -96,4 +97,5 @@ public class EngineTileEntity extends SmartTileEntity implements IInstanceRender poweredWheel.setRotation(appliedSpeed, appliedCapacity); } + } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/flywheel/engine/FurnaceEngineBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/flywheel/engine/FurnaceEngineBlock.java index e3083ac1a..fe251a7ba 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/flywheel/engine/FurnaceEngineBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/flywheel/engine/FurnaceEngineBlock.java @@ -24,6 +24,8 @@ import net.minecraftforge.eventbus.api.Event.Result; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod.EventBusSubscriber; +import net.minecraft.block.AbstractBlock.Properties; + @EventBusSubscriber public class FurnaceEngineBlock extends EngineBlock implements ITE { @@ -38,7 +40,7 @@ public class FurnaceEngineBlock extends EngineBlock implements ITE, ICogWheel { public MillstoneBlock(Properties properties) { @@ -54,11 +56,11 @@ public class MillstoneBlock extends KineticBlock implements ITE { @@ -80,7 +82,7 @@ public class MillstoneBlock extends KineticBlock implements ITE { ItemHelper.dropContents(worldIn, pos, te.inputInv); ItemHelper.dropContents(worldIn, pos, te.outputInv); }); - worldIn.removeTileEntity(pos); + worldIn.removeBlockEntity(pos); } } @@ -141,7 +143,7 @@ public class MillstoneBlock extends KineticBlock implements ITE 0) { timer -= getProcessingSpeed(); - if (world.isRemote) { + if (level.isClientSide) { spawnParticles(); return; } @@ -95,8 +95,8 @@ public class MillstoneTileEntity extends KineticTileEntity { return; RecipeWrapper inventoryIn = new RecipeWrapper(inputInv); - if (lastRecipe == null || !lastRecipe.matches(inventoryIn, world)) { - Optional recipe = AllRecipeTypes.MILLING.find(inventoryIn, world); + if (lastRecipe == null || !lastRecipe.matches(inventoryIn, level)) { + Optional recipe = AllRecipeTypes.MILLING.find(inventoryIn, level); if (!recipe.isPresent()) { timer = 100; sendData(); @@ -113,16 +113,16 @@ public class MillstoneTileEntity extends KineticTileEntity { } @Override - public void remove() { - super.remove(); + public void setRemoved() { + super.setRemoved(); capability.invalidate(); } private void process() { RecipeWrapper inventoryIn = new RecipeWrapper(inputInv); - if (lastRecipe == null || !lastRecipe.matches(inventoryIn, world)) { - Optional recipe = AllRecipeTypes.MILLING.find(inventoryIn, world); + if (lastRecipe == null || !lastRecipe.matches(inventoryIn, level)) { + Optional recipe = AllRecipeTypes.MILLING.find(inventoryIn, level); if (!recipe.isPresent()) return; lastRecipe = recipe.get(); @@ -134,7 +134,7 @@ public class MillstoneTileEntity extends KineticTileEntity { lastRecipe.rollResults() .forEach(stack -> ItemHandlerHelper.insertItemStacked(outputInv, stack, false)); sendData(); - markDirty(); + setChanged(); } public void spawnParticles() { @@ -143,14 +143,14 @@ public class MillstoneTileEntity extends KineticTileEntity { return; ItemParticleData data = new ItemParticleData(ParticleTypes.ITEM, stackInSlot); - float angle = world.rand.nextFloat() * 360; + float angle = level.random.nextFloat() * 360; Vector3d offset = new Vector3d(0, 0, 0.5f); offset = VecHelper.rotate(offset, angle, Axis.Y); Vector3d target = VecHelper.rotate(offset, getSpeed() > 0 ? 25 : -25, Axis.Y); - Vector3d center = offset.add(VecHelper.getCenterOf(pos)); - target = VecHelper.offsetRandomly(target.subtract(offset), world.rand, 1 / 128f); - world.addParticle(data, center.x, center.y, center.z, target.x, target.y, target.z); + Vector3d center = offset.add(VecHelper.getCenterOf(worldPosition)); + target = VecHelper.offsetRandomly(target.subtract(offset), level.random, 1 / 128f); + level.addParticle(data, center.x, center.y, center.z, target.x, target.y, target.z); } @Override @@ -185,9 +185,9 @@ public class MillstoneTileEntity extends KineticTileEntity { tester.setStackInSlot(0, stack); RecipeWrapper inventoryIn = new RecipeWrapper(tester); - if (lastRecipe != null && lastRecipe.matches(inventoryIn, world)) + if (lastRecipe != null && lastRecipe.matches(inventoryIn, level)) return true; - return AllRecipeTypes.MILLING.find(inventoryIn, world) + return AllRecipeTypes.MILLING.find(inventoryIn, level) .isPresent(); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/mixer/MechanicalMixerBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/mixer/MechanicalMixerBlock.java index 1d20436b9..0e80f176c 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/mixer/MechanicalMixerBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/mixer/MechanicalMixerBlock.java @@ -19,6 +19,9 @@ import net.minecraft.util.math.shapes.VoxelShape; import net.minecraft.world.IBlockReader; import net.minecraft.world.IWorldReader; +import com.simibubi.create.content.contraptions.base.IRotate.SpeedLevel; +import net.minecraft.block.AbstractBlock.Properties; + public class MechanicalMixerBlock extends KineticBlock implements ITE, ICogWheel { public MechanicalMixerBlock(Properties properties) { @@ -31,8 +34,8 @@ public class MechanicalMixerBlock extends KineticBlock implements ITE bte.setAreFluidsMoving(running && runningTicks <= 20)); } @@ -120,11 +120,11 @@ public class MechanicalMixerTileEntity extends BasinOperatingTileEntity { } float speed = Math.abs(getSpeed()); - if (running && world != null) { - if (world.isRemote && runningTicks == 20) + if (running && level != null) { + if (level.isClientSide && runningTicks == 20) renderParticles(); - if ((!world.isRemote || isVirtual()) && runningTicks == 20) { + if ((!level.isClientSide || isVirtual()) && runningTicks == 20) { if (processingTicks < 0) { processingTicks = MathHelper.clamp((MathHelper.log2((int) (512 / speed))) * 15 + 1, 1, 512); @@ -136,7 +136,7 @@ public class MechanicalMixerTileEntity extends BasinOperatingTileEntity { .isEmpty() || !tanks.getSecond() .isEmpty()) - world.playSound(null, pos, SoundEvents.BLOCK_BUBBLE_COLUMN_WHIRLPOOL_AMBIENT, + level.playSound(null, worldPosition, SoundEvents.BUBBLE_COLUMN_WHIRLPOOL_AMBIENT, SoundCategory.BLOCKS, .75f, speed < 65 ? .75f : 1.5f); } @@ -158,13 +158,13 @@ public class MechanicalMixerTileEntity extends BasinOperatingTileEntity { public void renderParticles() { Optional basin = getBasin(); - if (!basin.isPresent() || world == null) + if (!basin.isPresent() || level == null) return; for (SmartInventory inv : basin.get() .getInvs()) { for (int slot = 0; slot < inv.getSlots(); slot++) { - ItemStack stackInSlot = inv.getStackInSlot(slot); + ItemStack stackInSlot = inv.getItem(slot); if (stackInSlot.isEmpty()) continue; ItemParticleData data = new ItemParticleData(ParticleTypes.ITEM, stackInSlot); @@ -185,14 +185,14 @@ public class MechanicalMixerTileEntity extends BasinOperatingTileEntity { } protected void spillParticle(IParticleData data) { - float angle = world.rand.nextFloat() * 360; + float angle = level.random.nextFloat() * 360; Vector3d offset = new Vector3d(0, 0, 0.25f); offset = VecHelper.rotate(offset, angle, Axis.Y); Vector3d target = VecHelper.rotate(offset, getSpeed() > 0 ? 25 : -25, Axis.Y) .add(0, .25f, 0); - Vector3d center = offset.add(VecHelper.getCenterOf(pos)); - target = VecHelper.offsetRandomly(target.subtract(offset), world.rand, 1 / 128f); - world.addParticle(data, center.x, center.y - 1.75f, center.z, target.x, target.y, target.z); + Vector3d center = offset.add(VecHelper.getCenterOf(worldPosition)); + target = VecHelper.offsetRandomly(target.subtract(offset), level.random, 1 / 128f); + level.addParticle(data, center.x, center.y - 1.75f, center.z, target.x, target.y, target.z); } @Override @@ -226,7 +226,7 @@ public class MechanicalMixerTileEntity extends BasinOperatingTileEntity { @Override protected boolean matchStaticFilters(IRecipe r) { - return ((r.getSerializer() == IRecipeSerializer.CRAFTING_SHAPELESS + return ((r.getSerializer() == IRecipeSerializer.SHAPELESS_RECIPE && AllConfigs.SERVER.recipes.allowShapelessInMixer.get() && r.getIngredients() .size() > 1) || r.getType() == AllRecipeTypes.MIXING.type); @@ -280,7 +280,7 @@ public class MechanicalMixerTileEntity extends BasinOperatingTileEntity { if (slow && AnimationTickHolder.getTicks() % 2 == 0) return; if (runningTicks == 20) - AllSoundEvents.MIXING.playAt(world, pos, .75f, 1, true); + AllSoundEvents.MIXING.playAt(level, worldPosition, .75f, 1, true); } } 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 7aac448c8..19d81bdc9 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 @@ -66,7 +66,7 @@ public class MixerInstance extends ShaftlessCogInstance implements IDynamicInsta public void updateLight() { super.updateLight(); - relight(pos.down(), mixerHead); + relight(pos.below(), mixerHead); relight(pos, mixerPole); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/motor/CreativeMotorBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/motor/CreativeMotorBlock.java index 7239a505e..037947564 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/motor/CreativeMotorBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/motor/CreativeMotorBlock.java @@ -16,6 +16,8 @@ import net.minecraft.util.math.shapes.VoxelShape; import net.minecraft.world.IBlockReader; import net.minecraft.world.IWorldReader; +import net.minecraft.block.AbstractBlock.Properties; + public class CreativeMotorBlock extends DirectionalKineticBlock { public CreativeMotorBlock(Properties properties) { @@ -24,7 +26,7 @@ public class CreativeMotorBlock extends DirectionalKineticBlock { @Override public VoxelShape getShape(BlockState state, IBlockReader worldIn, BlockPos pos, ISelectionContext context) { - return AllShapes.MOTOR_BLOCK.get(state.get(FACING)); + return AllShapes.MOTOR_BLOCK.get(state.getValue(FACING)); } @Override @@ -36,21 +38,21 @@ public class CreativeMotorBlock extends DirectionalKineticBlock { public BlockState getStateForPlacement(BlockItemUseContext context) { Direction preferred = getPreferredFacing(context); if ((context.getPlayer() != null && context.getPlayer() - .isSneaking()) || preferred == null) + .isShiftKeyDown()) || preferred == null) return super.getStateForPlacement(context); - return getDefaultState().with(FACING, preferred); + return defaultBlockState().setValue(FACING, preferred); } // IRotate: @Override public boolean hasShaftTowards(IWorldReader world, BlockPos pos, BlockState state, Direction face) { - return face == state.get(FACING); + return face == state.getValue(FACING); } @Override public Axis getRotationAxis(BlockState state) { - return state.get(FACING) + return state.getValue(FACING) .getAxis(); } @@ -60,7 +62,7 @@ public class CreativeMotorBlock extends DirectionalKineticBlock { } @Override - public boolean allowsMovement(BlockState state, IBlockReader reader, BlockPos pos, PathType type) { + public boolean isPathfindable(BlockState state, IBlockReader reader, BlockPos pos, PathType type) { return false; } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/motor/CreativeMotorGenerator.java b/src/main/java/com/simibubi/create/content/contraptions/components/motor/CreativeMotorGenerator.java index a26c54d41..032783bb6 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/motor/CreativeMotorGenerator.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/motor/CreativeMotorGenerator.java @@ -14,20 +14,20 @@ public class CreativeMotorGenerator extends SpecialBlockStateGen { @Override protected int getXRotation(BlockState state) { - return state.get(CreativeMotorBlock.FACING) == Direction.DOWN ? 180 : 0; + return state.getValue(CreativeMotorBlock.FACING) == Direction.DOWN ? 180 : 0; } @Override protected int getYRotation(BlockState state) { - return state.get(CreativeMotorBlock.FACING) + return state.getValue(CreativeMotorBlock.FACING) .getAxis() - .isVertical() ? 0 : horizontalAngle(state.get(CreativeMotorBlock.FACING)); + .isVertical() ? 0 : horizontalAngle(state.getValue(CreativeMotorBlock.FACING)); } @Override public ModelFile getModel(DataGenContext ctx, RegistrateBlockstateProvider prov, BlockState state) { - return state.get(CreativeMotorBlock.FACING) + return state.getValue(CreativeMotorBlock.FACING) .getAxis() .isVertical() ? AssetLookup.partialBaseModel(ctx, prov, "vertical") : AssetLookup.partialBaseModel(ctx, prov); diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/motor/CreativeMotorTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/motor/CreativeMotorTileEntity.java index 1f0168b87..4509f6ff8 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/motor/CreativeMotorTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/motor/CreativeMotorTileEntity.java @@ -28,7 +28,7 @@ public class CreativeMotorTileEntity extends GeneratingKineticTileEntity { Integer max = AllConfigs.SERVER.kinetics.maxMotorSpeed.get(); CenteredSideValueBoxTransform slot = new CenteredSideValueBoxTransform( - (motor, side) -> motor.get(CreativeMotorBlock.FACING) == side.getOpposite()); + (motor, side) -> motor.getValue(CreativeMotorBlock.FACING) == side.getOpposite()); generatedSpeed = new ScrollValueBehaviour(Lang.translate("generic.speed"), this, slot); generatedSpeed.between(-max, max); @@ -51,7 +51,7 @@ public class CreativeMotorTileEntity extends GeneratingKineticTileEntity { public float getGeneratedSpeed() { if (!AllBlocks.CREATIVE_MOTOR.has(getBlockState())) return 0; - return convertToDirection(generatedSpeed.getValue(), getBlockState().get(CreativeMotorBlock.FACING)); + return convertToDirection(generatedSpeed.getValue(), getBlockState().getValue(CreativeMotorBlock.FACING)); } public static int step(StepContext context) { diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/press/BeltPressingCallbacks.java b/src/main/java/com/simibubi/create/content/contraptions/components/press/BeltPressingCallbacks.java index 3c4c63ef4..1af77a41f 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/press/BeltPressingCallbacks.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/press/BeltPressingCallbacks.java @@ -84,7 +84,7 @@ public class BeltPressingCallbacks { handler.handleProcessingOnItem(transported, TransportedResult.convertToAndLeaveHeld(collect, left)); } - AllTriggers.triggerForNearbyPlayers(AllTriggers.BONK, pressTe.getWorld(), pressTe.getPos(), 4); + AllTriggers.triggerForNearbyPlayers(AllTriggers.BONK, pressTe.getLevel(), pressTe.getBlockPos(), 4); pressTe.sendData(); return HOLD; } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/press/MechanicalPressBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/press/MechanicalPressBlock.java index 8de328a78..d4ca80567 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/press/MechanicalPressBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/press/MechanicalPressBlock.java @@ -19,6 +19,8 @@ import net.minecraft.util.math.shapes.VoxelShape; import net.minecraft.world.IBlockReader; import net.minecraft.world.IWorldReader; +import net.minecraft.block.AbstractBlock.Properties; + public class MechanicalPressBlock extends HorizontalKineticBlock implements ITE { public MechanicalPressBlock(Properties properties) { @@ -33,8 +35,8 @@ public class MechanicalPressBlock extends HorizontalKineticBlock implements ITE< } @Override - public boolean isValidPosition(BlockState state, IWorldReader worldIn, BlockPos pos) { - return !AllBlocks.BASIN.has(worldIn.getBlockState(pos.down())); + public boolean canSurvive(BlockState state, IWorldReader worldIn, BlockPos pos) { + return !AllBlocks.BASIN.has(worldIn.getBlockState(pos.below())); } @Override @@ -46,19 +48,19 @@ public class MechanicalPressBlock extends HorizontalKineticBlock implements ITE< public BlockState getStateForPlacement(BlockItemUseContext context) { Direction prefferedSide = getPreferredHorizontalFacing(context); if (prefferedSide != null) - return getDefaultState().with(HORIZONTAL_FACING, prefferedSide); + return defaultBlockState().setValue(HORIZONTAL_FACING, prefferedSide); return super.getStateForPlacement(context); } @Override public Axis getRotationAxis(BlockState state) { - return state.get(HORIZONTAL_FACING) + return state.getValue(HORIZONTAL_FACING) .getAxis(); } @Override public boolean hasShaftTowards(IWorldReader world, BlockPos pos, BlockState state, Direction face) { - return face.getAxis() == state.get(HORIZONTAL_FACING) + return face.getAxis() == state.getValue(HORIZONTAL_FACING) .getAxis(); } @@ -68,7 +70,7 @@ public class MechanicalPressBlock extends HorizontalKineticBlock implements ITE< } @Override - public boolean allowsMovement(BlockState state, IBlockReader reader, BlockPos pos, PathType type) { + public boolean isPathfindable(BlockState state, IBlockReader reader, BlockPos pos, PathType type) { return false; } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/press/MechanicalPressRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/components/press/MechanicalPressRenderer.java index 2b31d4afc..731294f2c 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/press/MechanicalPressRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/press/MechanicalPressRenderer.java @@ -24,7 +24,7 @@ public class MechanicalPressRenderer extends KineticTileEntityRenderer { } @Override - public boolean isGlobalRenderer(KineticTileEntity te) { + public boolean shouldRenderOffScreen(KineticTileEntity te) { return true; } @@ -33,17 +33,17 @@ public class MechanicalPressRenderer extends KineticTileEntityRenderer { int light, int overlay) { super.renderSafe(te, partialTicks, ms, buffer, light, overlay); - if (Backend.getInstance().canUseInstancing(te.getWorld())) return; + if (Backend.getInstance().canUseInstancing(te.getLevel())) return; - BlockPos pos = te.getPos(); + BlockPos pos = te.getBlockPos(); BlockState blockState = te.getBlockState(); - int packedLightmapCoords = WorldRenderer.getLightmapCoordinates(te.getWorld(), blockState, pos); + int packedLightmapCoords = WorldRenderer.getLightColor(te.getLevel(), blockState, pos); float renderedHeadOffset = ((MechanicalPressTileEntity) te).getRenderedHeadOffset(partialTicks); - SuperByteBuffer headRender = PartialBufferer.getFacing(AllBlockPartials.MECHANICAL_PRESS_HEAD, blockState, blockState.get(HORIZONTAL_FACING)); + SuperByteBuffer headRender = PartialBufferer.getFacing(AllBlockPartials.MECHANICAL_PRESS_HEAD, blockState, blockState.getValue(HORIZONTAL_FACING)); headRender.translate(0, -renderedHeadOffset, 0) .light(packedLightmapCoords) - .renderInto(ms, buffer.getBuffer(RenderType.getSolid())); + .renderInto(ms, buffer.getBuffer(RenderType.solid())); } @Override diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/press/MechanicalPressTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/press/MechanicalPressTileEntity.java index 78ff1aeab..38b639cc7 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/press/MechanicalPressTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/press/MechanicalPressTileEntity.java @@ -86,7 +86,7 @@ public class MechanicalPressTileEntity extends BasinOperatingTileEntity { if (clientPacket) { NBTHelper.iterateCompoundList(compound.getList("ParticleItems", NBT.TAG_COMPOUND), - c -> pressedItems.add(ItemStack.read(c))); + c -> pressedItems.add(ItemStack.of(c))); spawnParticles(); } } @@ -107,8 +107,8 @@ public class MechanicalPressTileEntity extends BasinOperatingTileEntity { @Override public AxisAlignedBB makeRenderBoundingBox() { - return new AxisAlignedBB(pos).expand(0, -1.5, 0) - .expand(0, 1, 0); + return new AxisAlignedBB(worldPosition).expandTowards(0, -1.5, 0) + .expandTowards(0, 1, 0); } public float getRenderedHeadOffset(float partialTicks) { @@ -142,8 +142,8 @@ public class MechanicalPressTileEntity extends BasinOperatingTileEntity { public void tick() { super.tick(); - if (!running || world == null) { - if (hasWorld() && !world.isRemote) { + if (!running || level == null) { + if (hasLevel() && !level.isClientSide) { if (getSpeed() == 0) return; @@ -151,13 +151,13 @@ public class MechanicalPressTileEntity extends BasinOperatingTileEntity { entityScanCooldown--; if (entityScanCooldown <= 0) { entityScanCooldown = ENTITY_SCAN; - if (TileEntityBehaviour.get(world, pos.down(2), TransportedItemStackHandlerBehaviour.TYPE) != null) + if (TileEntityBehaviour.get(level, worldPosition.below(2), TransportedItemStackHandlerBehaviour.TYPE) != null) return; - if (AllBlocks.BASIN.has(world.getBlockState(pos.down(2)))) + if (AllBlocks.BASIN.has(level.getBlockState(worldPosition.below(2)))) return; - for (ItemEntity itemEntity : world.getEntitiesWithinAABB(ItemEntity.class, - new AxisAlignedBB(pos.down()).shrink(.125f))) { + for (ItemEntity itemEntity : level.getEntitiesOfClass(ItemEntity.class, + new AxisAlignedBB(worldPosition.below()).deflate(.125f))) { if (!itemEntity.isAlive() || !itemEntity.isOnGround()) continue; ItemStack stack = itemEntity.getItem(); @@ -173,7 +173,7 @@ public class MechanicalPressTileEntity extends BasinOperatingTileEntity { return; } - if (world.isRemote && runningTicks == -CYCLE / 2) { + if (level.isClientSide && runningTicks == -CYCLE / 2) { prevRunningTicks = CYCLE / 2; return; } @@ -184,16 +184,16 @@ public class MechanicalPressTileEntity extends BasinOperatingTileEntity { if (onBasin()) applyCompactingOnBasin(); - if (world.getBlockState(pos.down(2)).getSoundType() == SoundType.CLOTH) - AllSoundEvents.MECHANICAL_PRESS_ACTIVATION_ON_BELT.playOnServer(world, pos); + if (level.getBlockState(worldPosition.below(2)).getSoundType() == SoundType.WOOL) + AllSoundEvents.MECHANICAL_PRESS_ACTIVATION_ON_BELT.playOnServer(level, worldPosition); else - AllSoundEvents.MECHANICAL_PRESS_ACTIVATION.playOnServer(world, pos, .5f, .75f + (Math.abs(getSpeed()) / 1024f)); + AllSoundEvents.MECHANICAL_PRESS_ACTIVATION.playOnServer(level, worldPosition, .5f, .75f + (Math.abs(getSpeed()) / 1024f)); - if (!world.isRemote) + if (!level.isClientSide) sendData(); } - if (!world.isRemote && runningTicks > CYCLE) { + if (!level.isClientSide && runningTicks > CYCLE) { finished = true; running = false; @@ -212,13 +212,13 @@ public class MechanicalPressTileEntity extends BasinOperatingTileEntity { if (prevRunningTicks < CYCLE / 2 && runningTicks >= CYCLE / 2) { runningTicks = CYCLE / 2; // Pause the ticks until a packet is received - if (world.isRemote && !isVirtual()) + if (level.isClientSide && !isVirtual()) runningTicks = -(CYCLE / 2); } } protected void applyCompactingOnBasin() { - if (world.isRemote) + if (level.isClientSide) return; pressedItems.clear(); applyBasinRecipe(); @@ -227,7 +227,7 @@ public class MechanicalPressTileEntity extends BasinOperatingTileEntity { .getInputInventory(); if (basin.isPresent()) { for (int slot = 0; slot < inputs.getSlots(); slot++) { - ItemStack stackInSlot = inputs.getStackInSlot(slot); + ItemStack stackInSlot = inputs.getItem(slot); if (stackInSlot.isEmpty()) continue; pressedItems.add(stackInSlot); @@ -237,12 +237,12 @@ public class MechanicalPressTileEntity extends BasinOperatingTileEntity { } protected void applyPressingInWorld() { - AxisAlignedBB bb = new AxisAlignedBB(pos.down(1)); + AxisAlignedBB bb = new AxisAlignedBB(worldPosition.below(1)); boolean bulk = canProcessInBulk(); pressedItems.clear(); - if (world.isRemote) + if (level.isClientSide) return; - for (Entity entity : world.getEntitiesWithinAABBExcludingEntity(null, bb)) { + for (Entity entity : level.getEntities(null, bb)) { if (!(entity instanceof ItemEntity)) continue; if (!entity.isAlive() || !entity.isOnGround()) @@ -261,15 +261,15 @@ public class MechanicalPressTileEntity extends BasinOperatingTileEntity { for (ItemStack result : InWorldProcessing.applyRecipeOn(ItemHandlerHelper.copyStackWithSize(item, 1), recipe.get())) { ItemEntity created = - new ItemEntity(world, itemEntity.getX(), itemEntity.getY(), itemEntity.getZ(), result); - created.setDefaultPickupDelay(); - created.setMotion(VecHelper.offsetRandomly(Vector3d.ZERO, Create.RANDOM, .05f)); - world.addEntity(created); + new ItemEntity(level, itemEntity.getX(), itemEntity.getY(), itemEntity.getZ(), result); + created.setDefaultPickUpDelay(); + created.setDeltaMovement(VecHelper.offsetRandomly(Vector3d.ZERO, Create.RANDOM, .05f)); + level.addFreshEntity(created); } item.shrink(1); } - AllTriggers.triggerForNearbyPlayers(AllTriggers.BONK, world, pos, 4); + AllTriggers.triggerForNearbyPlayers(AllTriggers.BONK, level, worldPosition, 4); entityScanCooldown = 0; if (!bulk) @@ -292,35 +292,35 @@ public class MechanicalPressTileEntity extends BasinOperatingTileEntity { return; if (mode == Mode.BASIN) - pressedItems.forEach(stack -> makeCompactingParticleEffect(VecHelper.getCenterOf(pos.down(2)), stack)); + pressedItems.forEach(stack -> makeCompactingParticleEffect(VecHelper.getCenterOf(worldPosition.below(2)), stack)); if (mode == Mode.BELT) - pressedItems.forEach(stack -> makePressingParticleEffect(VecHelper.getCenterOf(pos.down(2)) + pressedItems.forEach(stack -> makePressingParticleEffect(VecHelper.getCenterOf(worldPosition.below(2)) .add(0, 8 / 16f, 0), stack)); if (mode == Mode.WORLD) - pressedItems.forEach(stack -> makePressingParticleEffect(VecHelper.getCenterOf(pos.down(1)) + pressedItems.forEach(stack -> makePressingParticleEffect(VecHelper.getCenterOf(worldPosition.below(1)) .add(0, -1 / 4f, 0), stack)); pressedItems.clear(); } public void makePressingParticleEffect(Vector3d pos, ItemStack stack) { - if (world == null || !world.isRemote) + if (level == null || !level.isClientSide) return; for (int i = 0; i < 20; i++) { - Vector3d motion = VecHelper.offsetRandomly(Vector3d.ZERO, world.rand, .125f) - .mul(1, 0, 1); - world.addParticle(new ItemParticleData(ParticleTypes.ITEM, stack), pos.x, pos.y - .25f, pos.z, motion.x, + Vector3d motion = VecHelper.offsetRandomly(Vector3d.ZERO, level.random, .125f) + .multiply(1, 0, 1); + level.addParticle(new ItemParticleData(ParticleTypes.ITEM, stack), pos.x, pos.y - .25f, pos.z, motion.x, motion.y + .125f, motion.z); } } public void makeCompactingParticleEffect(Vector3d pos, ItemStack stack) { - if (world == null || !world.isRemote) + if (level == null || !level.isClientSide) return; for (int i = 0; i < 20; i++) { - Vector3d motion = VecHelper.offsetRandomly(Vector3d.ZERO, world.rand, .175f) - .mul(1, 0, 1); - world.addParticle(new ItemParticleData(ParticleTypes.ITEM, stack), pos.x, pos.y, pos.z, motion.x, + Vector3d motion = VecHelper.offsetRandomly(Vector3d.ZERO, level.random, .175f) + .multiply(1, 0, 1); + level.addParticle(new ItemParticleData(ParticleTypes.ITEM, stack), pos.x, pos.y, pos.z, motion.x, motion.y + .25f, motion.z); } } @@ -329,12 +329,12 @@ public class MechanicalPressTileEntity extends BasinOperatingTileEntity { public Optional getRecipe(ItemStack item) { Optional assemblyRecipe = - SequencedAssemblyRecipe.getRecipe(world, item, AllRecipeTypes.PRESSING.getType(), PressingRecipe.class); + SequencedAssemblyRecipe.getRecipe(level, item, AllRecipeTypes.PRESSING.getType(), PressingRecipe.class); if (assemblyRecipe.isPresent()) return assemblyRecipe; - pressingInv.setInventorySlotContents(0, item); - return AllRecipeTypes.PRESSING.find(pressingInv, world); + pressingInv.setItem(0, item); + return AllRecipeTypes.PRESSING.find(pressingInv, level); } public static boolean canCompress(NonNullList ingredients) { 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 866fd4fa3..418fa0fea 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 @@ -24,7 +24,7 @@ public class PressInstance extends ShaftInstance implements IDynamicInstance { .getModel(AllBlockPartials.MECHANICAL_PRESS_HEAD, blockState) .createInstance(); - Quaternion q = Vector3f.POSITIVE_Y.getDegreesQuaternion(AngleHelper.horizontalAngle(blockState.get(MechanicalPressBlock.HORIZONTAL_FACING))); + Quaternion q = Vector3f.YP.rotationDegrees(AngleHelper.horizontalAngle(blockState.getValue(MechanicalPressBlock.HORIZONTAL_FACING))); pressHead.setRotation(q); diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/press/PressingRecipe.java b/src/main/java/com/simibubi/create/content/contraptions/components/press/PressingRecipe.java index 4f9374ec1..f68c4abeb 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/press/PressingRecipe.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/press/PressingRecipe.java @@ -34,7 +34,7 @@ public class PressingRecipe extends ProcessingRecipe implements I if (inv.isEmpty()) return false; return ingredients.get(0) - .test(inv.getStackInSlot(0)); + .test(inv.getItem(0)); } @Override diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/saw/CuttingRecipe.java b/src/main/java/com/simibubi/create/content/contraptions/components/saw/CuttingRecipe.java index eddb48062..0933bec29 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/saw/CuttingRecipe.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/saw/CuttingRecipe.java @@ -34,7 +34,7 @@ public class CuttingRecipe extends ProcessingRecipe implements IA if (inv.isEmpty()) return false; return ingredients.get(0) - .test(inv.getStackInSlot(0)); + .test(inv.getItem(0)); } @Override diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/saw/SawBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/saw/SawBlock.java index a4458acd7..30aa20e8f 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/saw/SawBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/saw/SawBlock.java @@ -30,10 +30,12 @@ import net.minecraft.world.IBlockReader; import net.minecraft.world.IWorldReader; import net.minecraft.world.World; +import net.minecraft.block.AbstractBlock.Properties; + @ParametersAreNonnullByDefault @MethodsReturnNonnullByDefault public class SawBlock extends DirectionalAxisKineticBlock implements ITE { - public static DamageSource damageSourceSaw = new DamageSource("create.mechanical_saw").setDamageBypassesArmor(); + public static DamageSource damageSourceSaw = new DamageSource("create.mechanical_saw").bypassArmor(); public SawBlock(Properties properties) { super(properties); @@ -42,10 +44,10 @@ public class SawBlock extends DirectionalAxisKineticBlock implements ITE { if (te.getSpeed() == 0) return; - entityIn.attackEntityFrom(damageSourceSaw, (float) DrillBlock.getDamage(te.getSpeed())); + entityIn.hurt(damageSourceSaw, (float) DrillBlock.getDamage(te.getSpeed())); }); } @Override - public void onLanded(IBlockReader worldIn, Entity entityIn) { - super.onLanded(worldIn, entityIn); + public void updateEntityAfterFallOn(IBlockReader worldIn, Entity entityIn) { + super.updateEntityAfterFallOn(worldIn, entityIn); if (!(entityIn instanceof ItemEntity)) return; - if (entityIn.world.isRemote) + if (entityIn.level.isClientSide) return; - BlockPos pos = entityIn.getBlockPos(); - withTileEntityDo(entityIn.world, pos, te -> { + BlockPos pos = entityIn.blockPosition(); + withTileEntityDo(entityIn.level, pos, te -> { if (te.getSpeed() == 0) return; te.insertItem((ItemEntity) entityIn); @@ -88,33 +90,33 @@ public class SawBlock extends DirectionalAxisKineticBlock implements ITE ItemHelper.dropContents(worldIn, pos, te.inventory)); TileEntityBehaviour.destroy(worldIn, pos, FilteringBehaviour.TYPE); - worldIn.removeTileEntity(pos); + worldIn.removeBlockEntity(pos); } @Override @@ -123,7 +125,7 @@ public class SawBlock extends DirectionalAxisKineticBlock implements ITE ModelFile getModel(DataGenContext ctx, RegistrateBlockstateProvider prov, BlockState state) { String path = "block/" + ctx.getName() + "/"; - String orientation = state.get(SawBlock.FACING) + String orientation = state.getValue(SawBlock.FACING) .getAxis() .isVertical() ? "vertical" : "horizontal"; 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 287e1b80f..73fac169c 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 @@ -21,9 +21,9 @@ public class SawInstance extends SingleRotatingInstance { @Override protected Instancer getModel() { - if (blockState.get(FACING).getAxis().isHorizontal()) { - BlockState referenceState = blockState.rotate(tile.getWorld(), tile.getPos(), Rotation.CLOCKWISE_180); - Direction facing = referenceState.get(FACING); + if (blockState.getValue(FACING).getAxis().isHorizontal()) { + BlockState referenceState = blockState.rotate(tile.getLevel(), tile.getBlockPos(), Rotation.CLOCKWISE_180); + Direction facing = referenceState.getValue(FACING); return getRotatingMaterial().getModel(AllBlockPartials.SHAFT_HALF, referenceState, facing); } else { return getRotatingMaterial().getModel(shaft()); diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/saw/SawRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/components/saw/SawRenderer.java index 3d0ab3a95..76831398a 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/saw/SawRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/saw/SawRenderer.java @@ -50,7 +50,7 @@ public class SawRenderer extends SafeTileEntityRenderer { FilteringRenderer.renderOnTileEntity(te, partialTicks, ms, buffer, light, overlay); if (Backend.getInstance() - .canUseInstancing(te.getWorld())) + .canUseInstancing(te.getLevel())) return; renderShaft(te, ms, buffer, light, overlay); @@ -79,7 +79,7 @@ public class SawRenderer extends SafeTileEntityRenderer { partial = AllBlockPartials.SAW_BLADE_VERTICAL_INACTIVE; } - if (!blockState.get(SawBlock.AXIS_ALONG_FIRST_COORDINATE)) + if (!blockState.getValue(SawBlock.AXIS_ALONG_FIRST_COORDINATE)) rotate = true; } @@ -89,22 +89,22 @@ public class SawRenderer extends SafeTileEntityRenderer { } superBuffer.color(0xFFFFFF) .light(light) - .renderInto(ms, buffer.getBuffer(RenderType.getCutoutMipped())); + .renderInto(ms, buffer.getBuffer(RenderType.cutoutMipped())); } protected void renderShaft(SawTileEntity te, MatrixStack ms, IRenderTypeBuffer buffer, int light, int overlay) { KineticTileEntityRenderer.renderRotatingBuffer(te, getRotatedModel(te), ms, - buffer.getBuffer(RenderType.getSolid()), light); + buffer.getBuffer(RenderType.solid()), light); } protected void renderItems(SawTileEntity te, float partialTicks, MatrixStack ms, IRenderTypeBuffer buffer, int light, int overlay) { boolean processingMode = te.getBlockState() - .get(SawBlock.FACING) == Direction.UP; + .getValue(SawBlock.FACING) == Direction.UP; if (processingMode && !te.inventory.isEmpty()) { boolean alongZ = !te.getBlockState() - .get(SawBlock.AXIS_ALONG_FIRST_COORDINATE); - ms.push(); + .getValue(SawBlock.AXIS_ALONG_FIRST_COORDINATE); + ms.pushPose(); boolean moving = te.inventory.recipeDuration != 0; float offset = moving ? (float) (te.inventory.remainingTime) / te.inventory.recipeDuration : 0; @@ -129,30 +129,30 @@ public class SawRenderer extends SafeTileEntityRenderer { ItemRenderer itemRenderer = Minecraft.getInstance() .getItemRenderer(); - IBakedModel modelWithOverrides = itemRenderer.getItemModelWithOverrides(stack, te.getWorld(), null); + IBakedModel modelWithOverrides = itemRenderer.getModel(stack, te.getLevel(), null); boolean blockItem = modelWithOverrides.isGui3d(); ms.translate(alongZ ? offset : .5, blockItem ? .925f : 13f / 16f, alongZ ? .5 : offset); ms.scale(.5f, .5f, .5f); if (alongZ) - ms.multiply(Vector3f.POSITIVE_Y.getDegreesQuaternion(90)); - ms.multiply(Vector3f.POSITIVE_X.getDegreesQuaternion(90)); - itemRenderer.renderItem(stack, ItemCameraTransforms.TransformType.FIXED, light, overlay, ms, buffer); + ms.mulPose(Vector3f.YP.rotationDegrees(90)); + ms.mulPose(Vector3f.XP.rotationDegrees(90)); + itemRenderer.renderStatic(stack, ItemCameraTransforms.TransformType.FIXED, light, overlay, ms, buffer); break; } - ms.pop(); + ms.popPose(); } } protected SuperByteBuffer getRotatedModel(KineticTileEntity te) { BlockState state = te.getBlockState(); - if (state.get(FACING) + if (state.getValue(FACING) .getAxis() .isHorizontal()) return PartialBufferer.getFacing(AllBlockPartials.SHAFT_HALF, - state.rotate(te.getWorld(), te.getPos(), Rotation.CLOCKWISE_180)); + state.rotate(te.getLevel(), te.getBlockPos(), Rotation.CLOCKWISE_180)); return CreateClient.BUFFER_CACHE.renderBlockIn(KineticTileEntityRenderer.KINETIC_TILE, getRenderedBlockState(te)); } @@ -164,13 +164,13 @@ public class SawRenderer extends SafeTileEntityRenderer { public static void renderInContraption(MovementContext context, PlacementSimulationWorld renderWorld, ContraptionMatrices matrices, IRenderTypeBuffer buffer) { BlockState state = context.state; - Direction facing = state.get(SawBlock.FACING); + Direction facing = state.getValue(SawBlock.FACING); - Vector3d facingVec = Vector3d.of(context.state.get(SawBlock.FACING) - .getDirectionVec()); + Vector3d facingVec = Vector3d.atLowerCornerOf(context.state.getValue(SawBlock.FACING) + .getNormal()); facingVec = context.rotation.apply(facingVec); - Direction closestToFacing = Direction.getFacingFromVector(facingVec.x, facingVec.y, facingVec.z); + Direction closestToFacing = Direction.getNearest(facingVec.x, facingVec.y, facingVec.z); boolean horizontal = closestToFacing.getAxis() .isHorizontal(); @@ -193,22 +193,22 @@ public class SawRenderer extends SafeTileEntityRenderer { } MatrixStack m = matrices.contraptionStack; - m.push(); + m.pushPose(); MatrixStacker.of(m) .centre() .rotateY(AngleHelper.horizontalAngle(facing)) .rotateX(AngleHelper.verticalAngle(facing)); if (!SawBlock.isHorizontal(state)) MatrixStacker.of(m) - .rotateZ(state.get(SawBlock.AXIS_ALONG_FIRST_COORDINATE) ? 0 : 90); + .rotateZ(state.getValue(SawBlock.AXIS_ALONG_FIRST_COORDINATE) ? 0 : 90); MatrixStacker.of(m) .unCentre(); superBuffer.transform(m) .light(matrices.entityMatrix, ContraptionRenderDispatcher.getContraptionWorldLight(context, renderWorld)) - .renderInto(matrices.entityStack, buffer.getBuffer(RenderType.getCutoutMipped())); + .renderInto(matrices.entityStack, buffer.getBuffer(RenderType.cutoutMipped())); - m.pop(); + m.popPose(); } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/saw/SawTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/saw/SawTileEntity.java index 5eeb534f1..f05dba37e 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/saw/SawTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/saw/SawTileEntity.java @@ -76,7 +76,7 @@ public class SawTileEntity extends BlockBreakingKineticTileEntity { private static final Object cuttingRecipesKey = new Object(); public static final LazyValue> woodcuttingRecipeType = - new LazyValue<>(() -> Registry.RECIPE_TYPE.getOrDefault(new ResourceLocation("druidcraft", "woodcutting"))); + new LazyValue<>(() -> Registry.RECIPE_TYPE.get(new ResourceLocation("druidcraft", "woodcutting"))); public ProcessingInventory inventory; private int recipeIndex; @@ -120,14 +120,14 @@ public class SawTileEntity extends BlockBreakingKineticTileEntity { inventory.deserializeNBT(compound.getCompound("Inventory")); recipeIndex = compound.getInt("RecipeIndex"); if (compound.contains("PlayEvent")) - playEvent = ItemStack.read(compound.getCompound("PlayEvent")); + playEvent = ItemStack.of(compound.getCompound("PlayEvent")); } @Override protected AxisAlignedBB makeRenderBoundingBox() { - Direction facing = getBlockState().get(SawBlock.FACING); - AxisAlignedBB box = RENDER_BOX.expand(facing.getXOffset() * 0.125f, facing.getYOffset() * 0.125f, facing.getZOffset() * 0.125f); - return box.offset(pos); + Direction facing = getBlockState().getValue(SawBlock.FACING); + AxisAlignedBB box = RENDER_BOX.expandTowards(facing.getStepX() * 0.125f, facing.getStepY() * 0.125f, facing.getStepZ() * 0.125f); + return box.move(worldPosition); } @Override @@ -142,14 +142,14 @@ public class SawTileEntity extends BlockBreakingKineticTileEntity { Item item = playEvent.getItem(); if (item instanceof BlockItem) { Block block = ((BlockItem) item).getBlock(); - isWood = block.getSoundType(block.getDefaultState(), world, pos, null) == SoundType.WOOD; + isWood = block.getSoundType(block.defaultBlockState(), level, worldPosition, null) == SoundType.WOOD; } spawnEventParticles(playEvent); playEvent = ItemStack.EMPTY; if (!isWood) - AllSoundEvents.SAW_ACTIVATE_STONE.playAt(world, pos, 3, 1, true); + AllSoundEvents.SAW_ACTIVATE_STONE.playAt(level, worldPosition, 3, 1, true); else - AllSoundEvents.SAW_ACTIVATE_WOOD.playAt(world, pos, 3, 1, true); + AllSoundEvents.SAW_ACTIVATE_WOOD.playAt(level, worldPosition, 3, 1, true); return; } } @@ -177,7 +177,7 @@ public class SawTileEntity extends BlockBreakingKineticTileEntity { spawnParticles(inventory.getStackInSlot(0)); if (inventory.remainingTime < 5 && !inventory.appliedRecipe) { - if (world.isRemote && !isVirtual()) + if (level.isClientSide && !isVirtual()) return; playEvent = inventory.getStackInSlot(0); applyRecipe(); @@ -189,7 +189,7 @@ public class SawTileEntity extends BlockBreakingKineticTileEntity { } Vector3d itemMovement = getItemMovementVec(); - Direction itemMovementFacing = Direction.getFacingFromVector(itemMovement.x, itemMovement.y, itemMovement.z); + Direction itemMovementFacing = Direction.getNearest(itemMovement.x, itemMovement.y, itemMovement.z); if (inventory.remainingTime > 0) return; inventory.remainingTime = 0; @@ -211,13 +211,13 @@ public class SawTileEntity extends BlockBreakingKineticTileEntity { } } - BlockPos nextPos = pos.add(itemMovement.x, itemMovement.y, itemMovement.z); - DirectBeltInputBehaviour behaviour = TileEntityBehaviour.get(world, nextPos, DirectBeltInputBehaviour.TYPE); + BlockPos nextPos = worldPosition.offset(itemMovement.x, itemMovement.y, itemMovement.z); + DirectBeltInputBehaviour behaviour = TileEntityBehaviour.get(level, nextPos, DirectBeltInputBehaviour.TYPE); if (behaviour != null) { boolean changed = false; if (!behaviour.canInsertFromSide(itemMovementFacing)) return; - if (world.isRemote && !isVirtual()) + if (level.isClientSide && !isVirtual()) return; for (int slot = 0; slot < inventory.getSlots(); slot++) { ItemStack stack = inventory.getStackInSlot(slot); @@ -230,14 +230,14 @@ public class SawTileEntity extends BlockBreakingKineticTileEntity { changed = true; } if (changed) { - markDirty(); + setChanged(); sendData(); } return; } // Eject Items - Vector3d outPos = VecHelper.getCenterOf(pos) + Vector3d outPos = VecHelper.getCenterOf(worldPosition) .add(itemMovement.scale(.5f) .add(0, .5, 0)); Vector3d outMotion = itemMovement.scale(.0625) @@ -246,20 +246,20 @@ public class SawTileEntity extends BlockBreakingKineticTileEntity { ItemStack stack = inventory.getStackInSlot(slot); if (stack.isEmpty()) continue; - ItemEntity entityIn = new ItemEntity(world, outPos.x, outPos.y, outPos.z, stack); - entityIn.setMotion(outMotion); - world.addEntity(entityIn); + ItemEntity entityIn = new ItemEntity(level, outPos.x, outPos.y, outPos.z, stack); + entityIn.setDeltaMovement(outMotion); + level.addFreshEntity(entityIn); } inventory.clear(); - world.updateComparatorOutputLevel(pos, getBlockState().getBlock()); + level.updateNeighbourForOutputSignal(worldPosition, getBlockState().getBlock()); inventory.remainingTime = -1; sendData(); } @Override - public void remove() { + public void setRemoved() { invProvider.invalidate(); - super.remove(); + super.setRemoved(); } @Override @@ -276,16 +276,16 @@ public class SawTileEntity extends BlockBreakingKineticTileEntity { IParticleData particleData = null; if (stack.getItem() instanceof BlockItem) particleData = new BlockParticleData(ParticleTypes.BLOCK, ((BlockItem) stack.getItem()).getBlock() - .getDefaultState()); + .defaultBlockState()); else particleData = new ItemParticleData(ParticleTypes.ITEM, stack); - Random r = world.rand; - Vector3d v = VecHelper.getCenterOf(this.pos) + Random r = level.random; + Vector3d v = VecHelper.getCenterOf(this.worldPosition) .add(0, 5 / 16f, 0); for (int i = 0; i < 10; i++) { Vector3d m = VecHelper.offsetRandomly(new Vector3d(0, 0.25f, 0), r, .125f); - world.addParticle(particleData, v.x, v.y, v.z, m.x, m.y, m.y); + level.addParticle(particleData, v.x, v.y, v.z, m.x, m.y, m.y); } } @@ -297,25 +297,25 @@ public class SawTileEntity extends BlockBreakingKineticTileEntity { float speed = 1; if (stack.getItem() instanceof BlockItem) particleData = new BlockParticleData(ParticleTypes.BLOCK, ((BlockItem) stack.getItem()).getBlock() - .getDefaultState()); + .defaultBlockState()); else { particleData = new ItemParticleData(ParticleTypes.ITEM, stack); speed = .125f; } - Random r = world.rand; + Random r = level.random; Vector3d vec = getItemMovementVec(); - Vector3d pos = VecHelper.getCenterOf(this.pos); + Vector3d pos = VecHelper.getCenterOf(this.worldPosition); float offset = inventory.recipeDuration != 0 ? (float) (inventory.remainingTime) / inventory.recipeDuration : 0; offset /= 2; if (inventory.appliedRecipe) offset -= .5f; - world.addParticle(particleData, pos.getX() + -vec.x * offset, pos.getY() + .45f, pos.getZ() + -vec.z * offset, + level.addParticle(particleData, pos.x() + -vec.x * offset, pos.y() + .45f, pos.z() + -vec.z * offset, -vec.x * speed, r.nextFloat() * speed, -vec.z * speed); } public Vector3d getItemMovementVec() { - boolean alongX = !getBlockState().get(SawBlock.AXIS_ALONG_FIRST_COORDINATE); + boolean alongX = !getBlockState().getValue(SawBlock.AXIS_ALONG_FIRST_COORDINATE); int offset = getSpeed() < 0 ? -1 : 1; return new Vector3d(offset * (alongX ? 1 : 0), 0, offset * (alongX ? 0 : -1)); } @@ -338,8 +338,8 @@ public class SawTileEntity extends BlockBreakingKineticTileEntity { List results = new LinkedList(); if (recipe instanceof CuttingRecipe) results = ((CuttingRecipe) recipe).rollResults(); - else if (recipe instanceof StonecuttingRecipe || recipe.getType() == woodcuttingRecipeType.getValue()) - results.add(recipe.getRecipeOutput() + else if (recipe instanceof StonecuttingRecipe || recipe.getType() == woodcuttingRecipeType.get()) + results.add(recipe.getResultItem() .copy()); for (int i = 0; i < results.size(); i++) { @@ -354,17 +354,17 @@ public class SawTileEntity extends BlockBreakingKineticTileEntity { } private List> getRecipes() { - Optional assemblyRecipe = SequencedAssemblyRecipe.getRecipe(world, inventory.getStackInSlot(0), + Optional assemblyRecipe = SequencedAssemblyRecipe.getRecipe(level, inventory.getStackInSlot(0), AllRecipeTypes.CUTTING.getType(), CuttingRecipe.class); if (assemblyRecipe.isPresent() && filtering.test(assemblyRecipe.get() - .getRecipeOutput())) + .getResultItem())) return ImmutableList.of(assemblyRecipe.get()); Predicate> types = RecipeConditions.isOfType(AllRecipeTypes.CUTTING.getType(), AllConfigs.SERVER.recipes.allowStonecuttingOnSaw.get() ? IRecipeType.STONECUTTING : null, - AllConfigs.SERVER.recipes.allowWoodcuttingOnSaw.get() ? woodcuttingRecipeType.getValue() : null); + AllConfigs.SERVER.recipes.allowWoodcuttingOnSaw.get() ? woodcuttingRecipeType.get() : null); - List> startedSearch = RecipeFinder.get(cuttingRecipesKey, world, types); + List> startedSearch = RecipeFinder.get(cuttingRecipesKey, level, types); return startedSearch.stream() .filter(RecipeConditions.outputMatchesFilter(filtering)) .filter(RecipeConditions.firstIngredientMatches(inventory.getStackInSlot(0))) @@ -378,7 +378,7 @@ public class SawTileEntity extends BlockBreakingKineticTileEntity { return; if (!entity.isAlive()) return; - if (world.isRemote) + if (level.isClientSide) return; inventory.clear(); @@ -395,7 +395,7 @@ public class SawTileEntity extends BlockBreakingKineticTileEntity { return; if (inventory.isEmpty()) return; - if (world.isRemote && !isVirtual()) + if (level.isClientSide && !isVirtual()) return; List> recipes = getRecipes(); @@ -427,43 +427,43 @@ public class SawTileEntity extends BlockBreakingKineticTileEntity { } protected boolean canProcess() { - return getBlockState().get(SawBlock.FACING) == Direction.UP; + return getBlockState().getValue(SawBlock.FACING) == Direction.UP; } // Block Breaker @Override protected boolean shouldRun() { - return getBlockState().get(SawBlock.FACING) + return getBlockState().getValue(SawBlock.FACING) .getAxis() .isHorizontal(); } @Override protected BlockPos getBreakingPos() { - return getPos().offset(getBlockState().get(SawBlock.FACING)); + return getBlockPos().relative(getBlockState().getValue(SawBlock.FACING)); } @Override public void onBlockBroken(BlockState stateToBreak) { Optional dynamicTree = TreeCutter.findDynamicTree(stateToBreak.getBlock(), breakingPos); if (dynamicTree.isPresent()) { - dynamicTree.get().destroyBlocks(world, null, this::dropItemFromCutTree); + dynamicTree.get().destroyBlocks(level, null, this::dropItemFromCutTree); return; } super.onBlockBroken(stateToBreak); - TreeCutter.findTree(world, breakingPos) - .destroyBlocks(world, null, this::dropItemFromCutTree); + TreeCutter.findTree(level, breakingPos) + .destroyBlocks(level, null, this::dropItemFromCutTree); } public void dropItemFromCutTree(BlockPos pos, ItemStack stack) { - float distance = (float) Math.sqrt(pos.distanceSq(breakingPos)); + float distance = (float) Math.sqrt(pos.distSqr(breakingPos)); Vector3d dropPos = VecHelper.getCenterOf(pos); - ItemEntity entity = new ItemEntity(world, dropPos.x, dropPos.y, dropPos.z, stack); - entity.setMotion(Vector3d.of(breakingPos.subtract(this.pos)) + ItemEntity entity = new ItemEntity(level, dropPos.x, dropPos.y, dropPos.z, stack); + entity.setDeltaMovement(Vector3d.atLowerCornerOf(breakingPos.subtract(this.worldPosition)) .scale(distance / 20f)); - world.addEntity(entity); + level.addFreshEntity(entity); } @Override @@ -473,8 +473,8 @@ public class SawTileEntity extends BlockBreakingKineticTileEntity { } public static boolean isSawable(BlockState stateToBreak) { - if (stateToBreak.isIn(BlockTags.LOGS) || AllTags.AllBlockTags.SLIMY_LOGS.matches(stateToBreak) - || stateToBreak.isIn(BlockTags.LEAVES)) + if (stateToBreak.is(BlockTags.LOGS) || AllTags.AllBlockTags.SLIMY_LOGS.matches(stateToBreak) + || stateToBreak.is(BlockTags.LEAVES)) return true; Block block = stateToBreak.getBlock(); if (block instanceof BambooBlock) diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/AbstractContraptionEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/AbstractContraptionEntity.java index d898d12c3..3c2dcc97a 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/AbstractContraptionEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/AbstractContraptionEntity.java @@ -55,10 +55,12 @@ import net.minecraftforge.fml.common.registry.IEntityAdditionalSpawnData; import net.minecraftforge.fml.network.NetworkHooks; import net.minecraftforge.fml.network.PacketDistributor; +import net.minecraft.entity.Entity.IMoveCallback; + public abstract class AbstractContraptionEntity extends Entity implements IEntityAdditionalSpawnData { private static final DataParameter STALLED = - EntityDataManager.createKey(AbstractContraptionEntity.class, DataSerializers.BOOLEAN); + EntityDataManager.defineId(AbstractContraptionEntity.class, DataSerializers.BOOLEAN); public final Map collidingEntities; @@ -77,7 +79,7 @@ public abstract class AbstractContraptionEntity extends Entity implements IEntit this.contraption = contraption; if (contraption == null) return; - if (world.isRemote) + if (level.isClientSide) return; contraption.onEntityCreated(this); } @@ -87,7 +89,7 @@ public abstract class AbstractContraptionEntity extends Entity implements IEntit } protected void contraptionInitialize() { - contraption.onEntityInitialize(world, this); + contraption.onEntityInitialize(level, this); initialized = true; } @@ -97,32 +99,32 @@ public abstract class AbstractContraptionEntity extends Entity implements IEntit public void addSittingPassenger(Entity passenger, int seatIndex) { passenger.startRiding(this, true); - if (world.isRemote) + if (level.isClientSide) return; contraption.getSeatMapping() - .put(passenger.getUniqueID(), seatIndex); + .put(passenger.getUUID(), seatIndex); AllPackets.channel.send(PacketDistributor.TRACKING_ENTITY.with(() -> this), - new ContraptionSeatMappingPacket(getEntityId(), contraption.getSeatMapping())); + new ContraptionSeatMappingPacket(getId(), contraption.getSeatMapping())); } @Override protected void removePassenger(Entity passenger) { Vector3d transformedVector = getPassengerPosition(passenger, 1); super.removePassenger(passenger); - if (world.isRemote) + if (level.isClientSide) return; if (transformedVector != null) passenger.getPersistentData() .put("ContraptionDismountLocation", VecHelper.writeNBT(transformedVector)); contraption.getSeatMapping() - .remove(passenger.getUniqueID()); + .remove(passenger.getUUID()); AllPackets.channel.send(PacketDistributor.TRACKING_ENTITY.with(() -> this), - new ContraptionSeatMappingPacket(getEntityId(), contraption.getSeatMapping())); + new ContraptionSeatMappingPacket(getId(), contraption.getSeatMapping())); } @Override - public void updatePassengerPosition(Entity passenger, IMoveCallback callback) { - if (!isPassenger(passenger)) + public void positionRider(Entity passenger, IMoveCallback callback) { + if (!hasPassenger(passenger)) return; Vector3d transformedVector = getPassengerPosition(passenger, 1); if (transformedVector == null) @@ -131,7 +133,7 @@ public abstract class AbstractContraptionEntity extends Entity implements IEntit } protected Vector3d getPassengerPosition(Entity passenger, float partialTicks) { - UUID id = passenger.getUniqueID(); + UUID id = passenger.getUUID(); if (passenger instanceof OrientedContraptionEntity) { BlockPos localPos = contraption.getBearingPosOf(id); if (localPos != null) @@ -141,18 +143,18 @@ public abstract class AbstractContraptionEntity extends Entity implements IEntit } AxisAlignedBB bb = passenger.getBoundingBox(); - double ySize = bb.getYSize(); + double ySize = bb.getYsize(); BlockPos seat = contraption.getSeatOf(id); if (seat == null) return null; - Vector3d transformedVector = toGlobalVector(Vector3d.of(seat) - .add(.5, passenger.getYOffset() + ySize - .15f, .5), partialTicks).add(VecHelper.getCenterOf(BlockPos.ZERO)) + Vector3d transformedVector = toGlobalVector(Vector3d.atLowerCornerOf(seat) + .add(.5, passenger.getMyRidingOffset() + ySize - .15f, .5), partialTicks).add(VecHelper.getCenterOf(BlockPos.ZERO)) .subtract(0.5, ySize, 0.5); return transformedVector; } @Override - protected boolean canFitPassenger(Entity p_184219_1_) { + protected boolean canAddPassenger(Entity p_184219_1_) { if (p_184219_1_ instanceof OrientedContraptionEntity) return true; return contraption.getSeatMapping() @@ -175,7 +177,7 @@ public abstract class AbstractContraptionEntity extends Entity implements IEntit continue; for (Entity entity : getPassengers()) { if (!entry.getKey() - .equals(entity.getUniqueID())) + .equals(entity.getUUID())) continue; if (entity instanceof PlayerEntity) return false; @@ -183,14 +185,14 @@ public abstract class AbstractContraptionEntity extends Entity implements IEntit } } - if (toDismount != null && !world.isRemote) { + if (toDismount != null && !level.isClientSide) { Vector3d transformedVector = getPassengerPosition(toDismount, 1); toDismount.stopRiding(); if (transformedVector != null) - toDismount.setPositionAndUpdate(transformedVector.x, transformedVector.y, transformedVector.z); + toDismount.teleportTo(transformedVector.x, transformedVector.y, transformedVector.z); } - if (world.isRemote) + if (level.isClientSide) return true; addSittingPassenger(player, indexOfSeat); return true; @@ -228,14 +230,14 @@ public abstract class AbstractContraptionEntity extends Entity implements IEntit .incrementAndGet() > 3) iterator.remove(); - prevPosX = getX(); - prevPosY = getY(); - prevPosZ = getZ(); + xo = getX(); + yo = getY(); + zo = getZ(); prevPosInvalid = false; if (!initialized) contraptionInitialize(); - contraption.onEntityTick(world); + contraption.onEntityTick(level); tickContraption(); super.tick(); } @@ -249,7 +251,7 @@ public abstract class AbstractContraptionEntity extends Entity implements IEntit public void tickActors() { boolean stalledPreviously = contraption.stalled; - if (!world.isRemote) + if (!level.isClientSide) contraption.stalled = false; ticking = true; @@ -286,7 +288,7 @@ public abstract class AbstractContraptionEntity extends Entity implements IEntit contraption.stalled |= context.stall; } if (!isAlive()) { - contraption.stop(world); + contraption.stop(level); return; } ticking = false; @@ -294,7 +296,7 @@ public abstract class AbstractContraptionEntity extends Entity implements IEntit for (Entity entity : getPassengers()) { if (!(entity instanceof OrientedContraptionEntity)) continue; - if (!contraption.stabilizedSubContraptions.containsKey(entity.getUniqueID())) + if (!contraption.stabilizedSubContraptions.containsKey(entity.getUUID())) continue; OrientedContraptionEntity orientedCE = (OrientedContraptionEntity) entity; if (orientedCE.contraption != null && orientedCE.contraption.stalled) { @@ -303,10 +305,10 @@ public abstract class AbstractContraptionEntity extends Entity implements IEntit } } - if (!world.isRemote) { + if (!level.isClientSide) { if (!stalledPreviously && contraption.stalled) onContraptionStalled(); - dataManager.set(STALLED, contraption.stalled); + entityData.set(STALLED, contraption.stalled); return; } @@ -315,7 +317,7 @@ public abstract class AbstractContraptionEntity extends Entity implements IEntit protected void onContraptionStalled() { AllPackets.channel.send(PacketDistributor.TRACKING_ENTITY.with(() -> this), - new ContraptionStallPacket(getEntityId(), getX(), getY(), getZ(), getStalledAngle())); + new ContraptionStallPacket(getId(), getX(), getY(), getZ(), getStalledAngle())); } protected boolean shouldActorTrigger(MovementContext context, BlockInfo blockInfo, MovementBehaviour actor, @@ -333,11 +335,11 @@ public abstract class AbstractContraptionEntity extends Entity implements IEntit } public void move(double x, double y, double z) { - setPosition(getX() + x, getY() + y, getZ() + z); + setPos(getX() + x, getY() + y, getZ() + z); } public Vector3d getAnchorVec() { - return getPositionVec(); + return position(); } public float getYawOffset() { @@ -345,15 +347,15 @@ public abstract class AbstractContraptionEntity extends Entity implements IEntit } @Override - public void setPosition(double x, double y, double z) { - super.setPosition(x, y, z); + public void setPos(double x, double y, double z) { + super.setPos(x, y, z); if (contraption == null) return; AxisAlignedBB cbox = contraption.bounds; if (cbox == null) return; Vector3d actualVec = getAnchorVec(); - setBoundingBox(cbox.offset(actualVec)); + setBoundingBox(cbox.move(actualVec)); } public static float yawFromVector(Vector3d vec) { @@ -368,16 +370,16 @@ public abstract class AbstractContraptionEntity extends Entity implements IEntit @SuppressWarnings("unchecked") EntityType.Builder entityBuilder = (EntityType.Builder) builder; - return entityBuilder.size(1, 1); + return entityBuilder.sized(1, 1); } @Override - protected void registerData() { - this.dataManager.register(STALLED, false); + protected void defineSynchedData() { + this.entityData.define(STALLED, false); } @Override - public IPacket createSpawnPacket() { + public IPacket getAddEntityPacket() { return NetworkHooks.getEntitySpawningPacket(this); } @@ -393,22 +395,22 @@ public abstract class AbstractContraptionEntity extends Entity implements IEntit int estimatedPacketSize = byteArray.length; if (estimatedPacketSize > 2_000_000) { Create.LOGGER.warn("Could not send Contraption Spawn Data (Packet too big): " - + getContraption().getType().id + " @" + getPositionVec() + " (" + getUniqueID().toString() + ")"); - buffer.writeCompoundTag(new CompoundNBT()); + + getContraption().getType().id + " @" + position() + " (" + getUUID().toString() + ")"); + buffer.writeNbt(new CompoundNBT()); return; } } catch (IOException e) { e.printStackTrace(); - buffer.writeCompoundTag(new CompoundNBT()); + buffer.writeNbt(new CompoundNBT()); return; } - buffer.writeCompoundTag(compound); + buffer.writeNbt(compound); } @Override - protected final void writeAdditional(CompoundNBT compound) { + protected final void addAdditionalSaveData(CompoundNBT compound) { writeAdditional(compound, false); } @@ -421,11 +423,11 @@ public abstract class AbstractContraptionEntity extends Entity implements IEntit @Override public void readSpawnData(PacketBuffer additionalData) { - readAdditional(additionalData.readCompoundTag(), true); + readAdditional(additionalData.readNbt(), true); } @Override - protected final void readAdditional(CompoundNBT compound) { + protected final void readAdditionalSaveData(CompoundNBT compound) { readAdditional(compound, false); } @@ -434,9 +436,9 @@ public abstract class AbstractContraptionEntity extends Entity implements IEntit return; initialized = compound.getBoolean("Initialized"); - contraption = Contraption.fromNBT(world, compound.getCompound("Contraption"), spawnData); + contraption = Contraption.fromNBT(level, compound.getCompound("Contraption"), spawnData); contraption.entity = this; - dataManager.set(STALLED, compound.getBoolean("Stalled")); + entityData.set(STALLED, compound.getBoolean("Stalled")); } public void disassemble() { @@ -449,45 +451,45 @@ public abstract class AbstractContraptionEntity extends Entity implements IEntit StructureTransform transform = makeStructureTransform(); AllPackets.channel.send(PacketDistributor.TRACKING_ENTITY.with(() -> this), - new ContraptionDisassemblyPacket(this.getEntityId(), transform)); + new ContraptionDisassemblyPacket(this.getId(), transform)); - contraption.addBlocksToWorld(world, transform); - contraption.addPassengersToWorld(world, transform, getPassengers()); + contraption.addBlocksToWorld(level, transform); + contraption.addPassengersToWorld(level, transform, getPassengers()); for (Entity entity : getPassengers()) { if (!(entity instanceof OrientedContraptionEntity)) continue; - UUID id = entity.getUniqueID(); + UUID id = entity.getUUID(); if (!contraption.stabilizedSubContraptions.containsKey(id)) continue; BlockPos transformed = transform.apply(contraption.stabilizedSubContraptions.get(id) .getConnectedPos()); - entity.setPosition(transformed.getX(), transformed.getY(), transformed.getZ()); + entity.setPos(transformed.getX(), transformed.getY(), transformed.getZ()); ((AbstractContraptionEntity) entity).disassemble(); } - removePassengers(); + ejectPassengers(); moveCollidedEntitiesOnDisassembly(transform); - AllSoundEvents.CONTRAPTION_DISASSEMBLE.playOnServer(world, getBlockPos()); + AllSoundEvents.CONTRAPTION_DISASSEMBLE.playOnServer(level, blockPosition()); } private void moveCollidedEntitiesOnDisassembly(StructureTransform transform) { for (Entity entity : collidingEntities.keySet()) { - Vector3d localVec = toLocalVector(entity.getPositionVec(), 0); + Vector3d localVec = toLocalVector(entity.position(), 0); Vector3d transformed = transform.apply(localVec); - if (world.isRemote) - entity.setPosition(transformed.x, transformed.y + 1 / 16f, transformed.z); + if (level.isClientSide) + entity.setPos(transformed.x, transformed.y + 1 / 16f, transformed.z); else - entity.setPositionAndUpdate(transformed.x, transformed.y + 1 / 16f, transformed.z); + entity.teleportTo(transformed.x, transformed.y + 1 / 16f, transformed.z); } } @SuppressWarnings("deprecation") @Override public void remove(boolean keepData) { - if (!world.isRemote && !removed && contraption != null) { + if (!level.isClientSide && !removed && contraption != null) { if (!ticking) - contraption.stop(world); + contraption.stop(level); } if (contraption != null) contraption.onEntityRemoved(this); @@ -497,21 +499,21 @@ public abstract class AbstractContraptionEntity extends Entity implements IEntit protected abstract StructureTransform makeStructureTransform(); @Override - public void onKillCommand() { - removePassengers(); - super.onKillCommand(); + public void kill() { + ejectPassengers(); + super.kill(); } @Override protected void outOfWorld() { - removePassengers(); + ejectPassengers(); super.outOfWorld(); } @Override public void onRemovedFromWorld() { super.onRemovedFromWorld(); - if (world != null && world.isRemote) + if (level != null && level.isClientSide) return; getPassengers().forEach(Entity::remove); } @@ -524,12 +526,12 @@ public abstract class AbstractContraptionEntity extends Entity implements IEntit } public boolean isStalled() { - return dataManager.get(STALLED); + return entityData.get(STALLED); } @OnlyIn(Dist.CLIENT) static void handleStallPacket(ContraptionStallPacket packet) { - Entity entity = Minecraft.getInstance().world.getEntityByID(packet.entityID); + Entity entity = Minecraft.getInstance().level.getEntity(packet.entityID); if (!(entity instanceof AbstractContraptionEntity)) return; AbstractContraptionEntity ce = (AbstractContraptionEntity) entity; @@ -538,7 +540,7 @@ public abstract class AbstractContraptionEntity extends Entity implements IEntit @OnlyIn(Dist.CLIENT) static void handleDisassemblyPacket(ContraptionDisassemblyPacket packet) { - Entity entity = Minecraft.getInstance().world.getEntityByID(packet.entityID); + Entity entity = Minecraft.getInstance().level.getEntity(packet.entityID); if (!(entity instanceof AbstractContraptionEntity)) return; AbstractContraptionEntity ce = (AbstractContraptionEntity) entity; @@ -551,8 +553,8 @@ public abstract class AbstractContraptionEntity extends Entity implements IEntit @Override @SuppressWarnings("deprecation") - public CompoundNBT writeWithoutTypeId(CompoundNBT nbt) { - Vector3d vec = getPositionVec(); + public CompoundNBT saveWithoutId(CompoundNBT nbt) { + Vector3d vec = position(); List passengers = getPassengers(); for (Entity entity : passengers) { @@ -560,43 +562,43 @@ public abstract class AbstractContraptionEntity extends Entity implements IEntit entity.removed = true; // Gather passengers into same chunk when saving - Vector3d prevVec = entity.getPositionVec(); - entity.setPos(vec.x, prevVec.y, vec.z); + Vector3d prevVec = entity.position(); + entity.setPosRaw(vec.x, prevVec.y, vec.z); // Super requires all passengers to not be removed in order to write them to the // tag entity.removed = false; } - CompoundNBT tag = super.writeWithoutTypeId(nbt); + CompoundNBT tag = super.saveWithoutId(nbt); return tag; } @Override // Make sure nothing can move contraptions out of the way - public void setMotion(Vector3d motionIn) {} + public void setDeltaMovement(Vector3d motionIn) {} @Override - public PushReaction getPushReaction() { + public PushReaction getPistonPushReaction() { return PushReaction.IGNORE; } public void setContraptionMotion(Vector3d vec) { - super.setMotion(vec); + super.setDeltaMovement(vec); } @Override - public boolean canBeCollidedWith() { + public boolean isPickable() { return false; } @Override - public boolean attackEntityFrom(DamageSource source, float amount) { + public boolean hurt(DamageSource source, float amount) { return false; } public Vector3d getPrevPositionVec() { - return prevPosInvalid ? getPositionVec() : new Vector3d(prevPosX, prevPosY, prevPosZ); + return prevPosInvalid ? position() : new Vector3d(xo, yo, zo); } public abstract ContraptionRotationState getRotationState(); @@ -606,13 +608,13 @@ public abstract class AbstractContraptionEntity extends Entity implements IEntit return Vector3d.ZERO; Vector3d contactPoint = toGlobalVector(toLocalVector(globalContactPoint, 0), 1); return contactPoint.subtract(globalContactPoint) - .add(getPositionVec().subtract(getPrevPositionVec())); + .add(position().subtract(getPrevPositionVec())); } public boolean canCollideWith(Entity e) { if (e instanceof PlayerEntity && e.isSpectator()) return false; - if (e.noClip) + if (e.noPhysics) return false; if (e instanceof HangingEntity) return false; @@ -624,21 +626,21 @@ public abstract class AbstractContraptionEntity extends Entity implements IEntit return false; if (e instanceof ProjectileEntity) return false; - if (e.getRidingEntity() != null) + if (e.getVehicle() != null) return false; - Entity riding = this.getRidingEntity(); + Entity riding = this.getVehicle(); while (riding != null) { if (riding == e) return false; - riding = riding.getRidingEntity(); + riding = riding.getVehicle(); } - return e.getPushReaction() == PushReaction.NORMAL; + return e.getPistonPushReaction() == PushReaction.NORMAL; } @Override - public boolean isOnePlayerRiding() { + public boolean hasOnePlayerPassenger() { return false; } @@ -680,7 +682,7 @@ public abstract class AbstractContraptionEntity extends Entity implements IEntit @Override - protected boolean updateWaterState() { + protected boolean updateInWaterStateAndDoFluidPushing() { /* * Override this with an empty method to reduce enormous calculation time when contraptions are in water * WARNING: THIS HAS A BUNCH OF SIDE EFFECTS! @@ -695,7 +697,7 @@ public abstract class AbstractContraptionEntity extends Entity implements IEntit } @Override - public void setFire(int p_70015_1_) { + public void setSecondsOnFire(int p_70015_1_) { // Contraptions no longer catch fire } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/AssemblyException.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/AssemblyException.java index 51eb14340..0f1972ad4 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/AssemblyException.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/AssemblyException.java @@ -22,7 +22,7 @@ public class AssemblyException extends Exception { nbt.putString("Component", ITextComponent.Serializer.toJson(exception.component)); if (exception.hasPosition()) nbt.putLong("Position", exception.getPosition() - .toLong()); + .asLong()); compound.put("LastException", nbt); } @@ -35,7 +35,7 @@ public class AssemblyException extends Exception { String string = nbt.getString("Component"); AssemblyException exception = new AssemblyException(ITextComponent.Serializer.fromJson(string)); if (nbt.contains("Position")) - exception.position = BlockPos.fromLong(nbt.getLong("Position")); + exception.position = BlockPos.of(nbt.getLong("Position")); return exception; } @@ -51,7 +51,7 @@ public class AssemblyException extends Exception { public static AssemblyException unmovableBlock(BlockPos pos, BlockState state) { AssemblyException e = new AssemblyException("unmovableBlock", pos.getX(), pos.getY(), pos.getZ(), new TranslationTextComponent(state.getBlock() - .getTranslationKey())); + .getDescriptionId())); e.position = pos; return e; } 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 f2d12f89d..c1b5b796b 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 @@ -191,7 +191,7 @@ public class BlockMovementChecks { Block block = state.getBlock(); if (block instanceof AbstractChassisBlock) return true; - if (state.getBlockHardness(world, pos) == -1) + if (state.getDestroySpeed(world, pos) == -1) return false; if (state.getBlock().getTags().contains(NON_MOVABLE)) return false; @@ -200,25 +200,25 @@ public class BlockMovementChecks { return false; // Move controllers only when they aren't moving - if (block instanceof MechanicalPistonBlock && state.get(MechanicalPistonBlock.STATE) != PistonState.MOVING) + if (block instanceof MechanicalPistonBlock && state.getValue(MechanicalPistonBlock.STATE) != PistonState.MOVING) return true; if (block instanceof MechanicalBearingBlock) { - TileEntity te = world.getTileEntity(pos); + TileEntity te = world.getBlockEntity(pos); if (te instanceof MechanicalBearingTileEntity) return !((MechanicalBearingTileEntity) te).isRunning(); } if (block instanceof WindmillBearingBlock) { - TileEntity te = world.getTileEntity(pos); + TileEntity te = world.getBlockEntity(pos); if (te instanceof WindmillBearingTileEntity) return !((WindmillBearingTileEntity) te).isRunning(); } if (block instanceof ClockworkBearingBlock) { - TileEntity te = world.getTileEntity(pos); + TileEntity te = world.getBlockEntity(pos); if (te instanceof ClockworkBearingTileEntity) return !((ClockworkBearingTileEntity) te).isRunning(); } if (block instanceof PulleyBlock) { - TileEntity te = world.getTileEntity(pos); + TileEntity te = world.getBlockEntity(pos); if (te instanceof PulleyTileEntity) return !((PulleyTileEntity) te).running; } @@ -227,12 +227,12 @@ public class BlockMovementChecks { return true; if (state.getBlock() instanceof GrindstoneBlock) return true; - return state.getPushReaction() != PushReaction.BLOCK; + return state.getPistonPushReaction() != PushReaction.BLOCK; } private static boolean isBrittleFallback(BlockState state) { Block block = state.getBlock(); - if (state.contains(BlockStateProperties.HANGING)) + if (state.hasProperty(BlockStateProperties.HANGING)) return true; if (block instanceof LadderBlock) @@ -262,28 +262,28 @@ public class BlockMovementChecks { Direction direction) { Block block = state.getBlock(); if (block instanceof LadderBlock) - return state.get(LadderBlock.FACING) == direction.getOpposite(); + return state.getValue(LadderBlock.FACING) == direction.getOpposite(); if (block instanceof WallTorchBlock) - return state.get(WallTorchBlock.HORIZONTAL_FACING) == direction.getOpposite(); + return state.getValue(WallTorchBlock.FACING) == direction.getOpposite(); if (block instanceof WallSignBlock) - return state.get(WallSignBlock.FACING) == direction.getOpposite(); + return state.getValue(WallSignBlock.FACING) == direction.getOpposite(); if (block instanceof StandingSignBlock) return direction == Direction.DOWN; if (block instanceof AbstractPressurePlateBlock) return direction == Direction.DOWN; if (block instanceof DoorBlock) { - if (state.get(DoorBlock.HALF) == DoubleBlockHalf.LOWER && direction == Direction.UP) + if (state.getValue(DoorBlock.HALF) == DoubleBlockHalf.LOWER && direction == Direction.UP) return true; return direction == Direction.DOWN; } if (block instanceof BedBlock) { - Direction facing = state.get(BedBlock.HORIZONTAL_FACING); - if (state.get(BedBlock.PART) == BedPart.HEAD) + Direction facing = state.getValue(BedBlock.FACING); + if (state.getValue(BedBlock.PART) == BedPart.HEAD) facing = facing.getOpposite(); return direction == facing; } if (block instanceof RedstoneLinkBlock) - return direction.getOpposite() == state.get(RedstoneLinkBlock.FACING); + return direction.getOpposite() == state.getValue(RedstoneLinkBlock.FACING); if (block instanceof FlowerPotBlock) return direction == Direction.DOWN; if (block instanceof RedstoneDiodeBlock) @@ -293,82 +293,82 @@ public class BlockMovementChecks { if (block instanceof CarpetBlock) return direction == Direction.DOWN; if (block instanceof RedstoneWallTorchBlock) - return state.get(RedstoneWallTorchBlock.FACING) == direction.getOpposite(); + return state.getValue(RedstoneWallTorchBlock.FACING) == direction.getOpposite(); if (block instanceof TorchBlock) return direction == Direction.DOWN; if (block instanceof HorizontalFaceBlock) { - AttachFace attachFace = state.get(HorizontalFaceBlock.FACE); + AttachFace attachFace = state.getValue(HorizontalFaceBlock.FACE); if (attachFace == AttachFace.CEILING) return direction == Direction.UP; if (attachFace == AttachFace.FLOOR) return direction == Direction.DOWN; if (attachFace == AttachFace.WALL) - return direction.getOpposite() == state.get(HorizontalFaceBlock.HORIZONTAL_FACING); + return direction.getOpposite() == state.getValue(HorizontalFaceBlock.FACING); } - if (state.contains(BlockStateProperties.HANGING)) - return direction == (state.get(BlockStateProperties.HANGING) ? Direction.UP : Direction.DOWN); + if (state.hasProperty(BlockStateProperties.HANGING)) + return direction == (state.getValue(BlockStateProperties.HANGING) ? Direction.UP : Direction.DOWN); if (block instanceof AbstractRailBlock) return direction == Direction.DOWN; if (block instanceof AttachedActorBlock) - return direction == state.get(HarvesterBlock.HORIZONTAL_FACING) + return direction == state.getValue(HarvesterBlock.FACING) .getOpposite(); if (block instanceof HandCrankBlock) - return direction == state.get(HandCrankBlock.FACING) + return direction == state.getValue(HandCrankBlock.FACING) .getOpposite(); if (block instanceof NozzleBlock) - return direction == state.get(NozzleBlock.FACING) + return direction == state.getValue(NozzleBlock.FACING) .getOpposite(); if (block instanceof EngineBlock) - return direction == state.get(EngineBlock.HORIZONTAL_FACING) + return direction == state.getValue(EngineBlock.FACING) .getOpposite(); if (block instanceof BellBlock) { - BellAttachment attachment = state.get(BlockStateProperties.BELL_ATTACHMENT); + BellAttachment attachment = state.getValue(BlockStateProperties.BELL_ATTACHMENT); if (attachment == BellAttachment.FLOOR) return direction == Direction.DOWN; if (attachment == BellAttachment.CEILING) return direction == Direction.UP; - return direction == state.get(HorizontalBlock.HORIZONTAL_FACING); + return direction == state.getValue(HorizontalBlock.FACING); } if (state.getBlock() instanceof SailBlock) - return direction.getAxis() != state.get(SailBlock.FACING) + return direction.getAxis() != state.getValue(SailBlock.FACING) .getAxis(); if (state.getBlock() instanceof FluidTankBlock) - return FluidTankConnectivityHandler.isConnected(world, pos, pos.offset(direction)); - if (AllBlocks.STICKER.has(state) && state.get(StickerBlock.EXTENDED)) { - return direction == state.get(StickerBlock.FACING) - && !isNotSupportive(world.getBlockState(pos.offset(direction)), direction.getOpposite()); + return FluidTankConnectivityHandler.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()); } return false; } private static boolean isNotSupportiveFallback(BlockState state, Direction facing) { if (AllBlocks.MECHANICAL_DRILL.has(state)) - return state.get(BlockStateProperties.FACING) == facing; + return state.getValue(BlockStateProperties.FACING) == facing; if (AllBlocks.MECHANICAL_BEARING.has(state)) - return state.get(BlockStateProperties.FACING) == facing; + return state.getValue(BlockStateProperties.FACING) == facing; if (AllBlocks.CART_ASSEMBLER.has(state)) return Direction.DOWN == facing; if (AllBlocks.MECHANICAL_SAW.has(state)) - return state.get(BlockStateProperties.FACING) == facing; + return state.getValue(BlockStateProperties.FACING) == facing; if (AllBlocks.PORTABLE_STORAGE_INTERFACE.has(state)) - return state.get(PortableStorageInterfaceBlock.FACING) == facing; + return state.getValue(PortableStorageInterfaceBlock.FACING) == facing; if (state.getBlock() instanceof AttachedActorBlock) - return state.get(BlockStateProperties.HORIZONTAL_FACING) == facing; + return state.getValue(BlockStateProperties.HORIZONTAL_FACING) == facing; if (AllBlocks.ROPE_PULLEY.has(state)) return facing == Direction.DOWN; if (state.getBlock() instanceof CarpetBlock) return facing == Direction.UP; if (state.getBlock() instanceof SailBlock) - return facing.getAxis() == state.get(SailBlock.FACING) + return facing.getAxis() == state.getValue(SailBlock.FACING) .getAxis(); if (AllBlocks.PISTON_EXTENSION_POLE.has(state)) - return facing.getAxis() != state.get(BlockStateProperties.FACING) + return facing.getAxis() != state.getValue(BlockStateProperties.FACING) .getAxis(); if (AllBlocks.MECHANICAL_PISTON_HEAD.has(state)) - return facing.getAxis() != state.get(BlockStateProperties.FACING) + return facing.getAxis() != state.getValue(BlockStateProperties.FACING) .getAxis(); - if (AllBlocks.STICKER.has(state) && !state.get(StickerBlock.EXTENDED)) - return facing == state.get(StickerBlock.FACING); + if (AllBlocks.STICKER.has(state) && !state.getValue(StickerBlock.EXTENDED)) + return facing == state.getValue(StickerBlock.FACING); return isBrittle(state); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/Contraption.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/Contraption.java index 0454b058c..e36065d43 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/Contraption.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/Contraption.java @@ -170,7 +170,7 @@ public abstract class Contraption { public ContraptionWorld getContraptionWorld() { if (world == null) - world = new ContraptionWorld(entity.world, this); + world = new ContraptionWorld(entity.level, this); return world; } @@ -232,7 +232,7 @@ public abstract class Contraption { for (BlockFace blockFace : pendingSubContraptions) { Direction face = blockFace.getFace(); StabilizedContraption subContraption = new StabilizedContraption(face); - World world = entity.world; + World world = entity.level; BlockPos pos = blockFace.getPos(); try { if (!subContraption.assemble(world, pos)) @@ -243,9 +243,9 @@ public abstract class Contraption { subContraption.removeBlocksFromWorld(world, BlockPos.ZERO); OrientedContraptionEntity movedContraption = OrientedContraptionEntity.create(world, subContraption, face); BlockPos anchor = blockFace.getConnectedPos(); - movedContraption.setPosition(anchor.getX() + .5f, anchor.getY(), anchor.getZ() + .5f); - world.addEntity(movedContraption); - stabilizedSubContraptions.put(movedContraption.getUniqueID(), new BlockFace(toLocalPos(pos), face)); + movedContraption.setPos(anchor.getX() + .5f, anchor.getY(), anchor.getZ() + .5f); + world.addFreshEntity(movedContraption); + stabilizedSubContraptions.put(movedContraption.getUUID(), new BlockFace(toLocalPos(pos), face)); } // Gather itemhandlers of mounted storage @@ -272,13 +272,13 @@ public abstract class Contraption { } public void onEntityInitialize(World world, AbstractContraptionEntity contraptionEntity) { - if (world.isRemote) + if (world.isClientSide) return; - for (OrientedContraptionEntity orientedCE : world.getEntitiesWithinAABB(OrientedContraptionEntity.class, + for (OrientedContraptionEntity orientedCE : world.getEntitiesOfClass(OrientedContraptionEntity.class, contraptionEntity.getBoundingBox() - .grow(1))) - if (stabilizedSubContraptions.containsKey(orientedCE.getUniqueID())) + .inflate(1))) + if (stabilizedSubContraptions.containsKey(orientedCE.getUUID())) orientedCE.startRiding(contraptionEntity); for (BlockPos seatPos : getSeats()) { @@ -293,7 +293,7 @@ public abstract class Contraption { } public void onEntityTick(World world) { - fluidStorage.forEach((pos, mfs) -> mfs.tick(entity, pos, world.isRemote)); + fluidStorage.forEach((pos, mfs) -> mfs.tick(entity, pos, world.isClientSide)); } /** move the first block in frontier queue */ @@ -306,7 +306,7 @@ public abstract class Contraption { if (World.isOutsideBuildHeight(pos)) return true; - if (!world.isBlockPresent(pos)) + if (!world.isLoaded(pos)) throw AssemblyException.unloadedChunk(pos); if (isAnchoringBlockAt(pos)) return true; @@ -331,9 +331,9 @@ public abstract class Contraption { if (AllBlocks.GANTRY_SHAFT.has(state)) moveGantryShaft(world, pos, frontier, visited, state); - if (AllBlocks.STICKER.has(state) && state.get(StickerBlock.EXTENDED)) { - Direction offset = state.get(StickerBlock.FACING); - BlockPos attached = pos.offset(offset); + if (AllBlocks.STICKER.has(state) && state.getValue(StickerBlock.EXTENDED)) { + Direction offset = state.getValue(StickerBlock.FACING); + BlockPos attached = pos.relative(offset); if (!visited.contains(attached) && !BlockMovementChecks.isNotSupportive(world.getBlockState(attached), offset.getOpposite())) frontier.add(attached); @@ -365,7 +365,7 @@ public abstract class Contraption { movePistonHead(world, pos, frontier, visited, state); // Cart assemblers attach themselves - BlockPos posDown = pos.down(); + BlockPos posDown = pos.below(); BlockState stateBelow = world.getBlockState(posDown); if (!visited.contains(posDown) && AllBlocks.CART_ASSEMBLER.has(stateBelow)) frontier.add(posDown); @@ -374,7 +374,7 @@ public abstract class Contraption { // Slime blocks and super glue drag adjacent blocks if possible for (Direction offset : Iterate.directions) { - BlockPos offsetPos = pos.offset(offset); + BlockPos offsetPos = pos.relative(offset); BlockState blockState = world.getBlockState(offsetPos); if (isAnchoringBlockAt(offsetPos)) continue; @@ -391,8 +391,8 @@ public abstract class Contraption { boolean brittle = BlockMovementChecks.isBrittle(blockState); boolean canStick = !brittle && state.canStickTo(blockState) && blockState.canStickTo(state); if (canStick) { - if (state.getPushReaction() == PushReaction.PUSH_ONLY - || blockState.getPushReaction() == PushReaction.PUSH_ONLY) { + if (state.getPistonPushReaction() == PushReaction.PUSH_ONLY + || blockState.getPistonPushReaction() == PushReaction.PUSH_ONLY) { canStick = false; } if (BlockMovementChecks.isNotSupportive(state, offset)) { @@ -419,21 +419,21 @@ public abstract class Contraption { protected void movePistonHead(World world, BlockPos pos, Queue frontier, Set visited, BlockState state) { - Direction direction = state.get(MechanicalPistonHeadBlock.FACING); - BlockPos offset = pos.offset(direction.getOpposite()); + Direction direction = state.getValue(MechanicalPistonHeadBlock.FACING); + BlockPos offset = pos.relative(direction.getOpposite()); if (!visited.contains(offset)) { BlockState blockState = world.getBlockState(offset); - if (isExtensionPole(blockState) && blockState.get(PistonExtensionPoleBlock.FACING) + if (isExtensionPole(blockState) && blockState.getValue(PistonExtensionPoleBlock.FACING) .getAxis() == direction.getAxis()) frontier.add(offset); if (blockState.getBlock() instanceof MechanicalPistonBlock) { - Direction pistonFacing = blockState.get(MechanicalPistonBlock.FACING); - if (pistonFacing == direction && blockState.get(MechanicalPistonBlock.STATE) == PistonState.EXTENDED) + Direction pistonFacing = blockState.getValue(MechanicalPistonBlock.FACING); + if (pistonFacing == direction && blockState.getValue(MechanicalPistonBlock.STATE) == PistonState.EXTENDED) frontier.add(offset); } } - if (state.get(MechanicalPistonHeadBlock.TYPE) == PistonType.STICKY) { - BlockPos attached = pos.offset(direction); + if (state.getValue(MechanicalPistonHeadBlock.TYPE) == PistonType.STICKY) { + BlockPos attached = pos.relative(direction); if (!visited.contains(attached)) frontier.add(attached); } @@ -441,21 +441,21 @@ public abstract class Contraption { protected void movePistonPole(World world, BlockPos pos, Queue frontier, Set visited, BlockState state) { - for (Direction d : Iterate.directionsInAxis(state.get(PistonExtensionPoleBlock.FACING) + for (Direction d : Iterate.directionsInAxis(state.getValue(PistonExtensionPoleBlock.FACING) .getAxis())) { - BlockPos offset = pos.offset(d); + BlockPos offset = pos.relative(d); if (!visited.contains(offset)) { BlockState blockState = world.getBlockState(offset); - if (isExtensionPole(blockState) && blockState.get(PistonExtensionPoleBlock.FACING) + if (isExtensionPole(blockState) && blockState.getValue(PistonExtensionPoleBlock.FACING) .getAxis() == d.getAxis()) frontier.add(offset); - if (isPistonHead(blockState) && blockState.get(MechanicalPistonHeadBlock.FACING) + if (isPistonHead(blockState) && blockState.getValue(MechanicalPistonHeadBlock.FACING) .getAxis() == d.getAxis()) frontier.add(offset); if (blockState.getBlock() instanceof MechanicalPistonBlock) { - Direction pistonFacing = blockState.get(MechanicalPistonBlock.FACING); + Direction pistonFacing = blockState.getValue(MechanicalPistonBlock.FACING); if (pistonFacing == d || pistonFacing == d.getOpposite() - && blockState.get(MechanicalPistonBlock.STATE) == PistonState.EXTENDED) + && blockState.getValue(MechanicalPistonBlock.STATE) == PistonState.EXTENDED) frontier.add(offset); } } @@ -464,14 +464,14 @@ public abstract class Contraption { protected void moveGantryPinion(World world, BlockPos pos, Queue frontier, Set visited, BlockState state) { - BlockPos offset = pos.offset(state.get(GantryCarriageBlock.FACING)); + BlockPos offset = pos.relative(state.getValue(GantryCarriageBlock.FACING)); if (!visited.contains(offset)) frontier.add(offset); Axis rotationAxis = ((IRotate) state.getBlock()).getRotationAxis(state); for (Direction d : Iterate.directionsInAxis(rotationAxis)) { - offset = pos.offset(d); + offset = pos.relative(d); BlockState offsetState = world.getBlockState(offset); - if (AllBlocks.GANTRY_SHAFT.has(offsetState) && offsetState.get(GantryShaftBlock.FACING) + if (AllBlocks.GANTRY_SHAFT.has(offsetState) && offsetState.getValue(GantryShaftBlock.FACING) .getAxis() == d.getAxis()) if (!visited.contains(offset)) frontier.add(offset); @@ -481,30 +481,30 @@ public abstract class Contraption { protected void moveGantryShaft(World world, BlockPos pos, Queue frontier, Set visited, BlockState state) { for (Direction d : Iterate.directions) { - BlockPos offset = pos.offset(d); + BlockPos offset = pos.relative(d); if (!visited.contains(offset)) { BlockState offsetState = world.getBlockState(offset); - Direction facing = state.get(GantryShaftBlock.FACING); + Direction facing = state.getValue(GantryShaftBlock.FACING); if (d.getAxis() == facing.getAxis() && AllBlocks.GANTRY_SHAFT.has(offsetState) - && offsetState.get(GantryShaftBlock.FACING) == facing) + && offsetState.getValue(GantryShaftBlock.FACING) == facing) frontier.add(offset); - else if (AllBlocks.GANTRY_CARRIAGE.has(offsetState) && offsetState.get(GantryCarriageBlock.FACING) == d) + else if (AllBlocks.GANTRY_CARRIAGE.has(offsetState) && offsetState.getValue(GantryCarriageBlock.FACING) == d) frontier.add(offset); } } } private void moveWindmillBearing(BlockPos pos, Queue frontier, Set visited, BlockState state) { - Direction facing = state.get(WindmillBearingBlock.FACING); - BlockPos offset = pos.offset(facing); + Direction facing = state.getValue(WindmillBearingBlock.FACING); + BlockPos offset = pos.relative(facing); if (!visited.contains(offset)) frontier.add(offset); } private void moveBearing(BlockPos pos, Queue frontier, Set visited, BlockState state) { - Direction facing = state.get(MechanicalBearingBlock.FACING); + Direction facing = state.getValue(MechanicalBearingBlock.FACING); if (!canBeStabilized(facing, pos.subtract(anchor))) { - BlockPos offset = pos.offset(facing); + BlockPos offset = pos.relative(facing); if (!visited.contains(offset)) frontier.add(offset); return; @@ -524,7 +524,7 @@ public abstract class Contraption { private void moveSeat(World world, BlockPos pos) { BlockPos local = toLocalPos(pos); getSeats().add(local); - List seatsEntities = world.getEntitiesWithinAABB(SeatEntity.class, new AxisAlignedBB(pos)); + List seatsEntities = world.getEntitiesOfClass(SeatEntity.class, new AxisAlignedBB(pos)); if (!seatsEntities.isEmpty()) { SeatEntity seat = seatsEntities.get(0); List passengers = seat.getPassengers(); @@ -537,8 +537,8 @@ public abstract class Contraption { int limit = AllConfigs.SERVER.kinetics.maxRopeLength.get(); BlockPos ropePos = pos; while (limit-- >= 0) { - ropePos = ropePos.down(); - if (!world.isBlockPresent(ropePos)) + ropePos = ropePos.below(); + if (!world.isLoaded(ropePos)) break; BlockState ropeState = world.getBlockState(ropePos); Block block = ropeState.getBlock(); @@ -553,21 +553,21 @@ public abstract class Contraption { private boolean moveMechanicalPiston(World world, BlockPos pos, Queue frontier, Set visited, BlockState state) throws AssemblyException { - Direction direction = state.get(MechanicalPistonBlock.FACING); - PistonState pistonState = state.get(MechanicalPistonBlock.STATE); + Direction direction = state.getValue(MechanicalPistonBlock.FACING); + PistonState pistonState = state.getValue(MechanicalPistonBlock.STATE); if (pistonState == PistonState.MOVING) return false; - BlockPos offset = pos.offset(direction.getOpposite()); + BlockPos offset = pos.relative(direction.getOpposite()); if (!visited.contains(offset)) { BlockState poleState = world.getBlockState(offset); - if (AllBlocks.PISTON_EXTENSION_POLE.has(poleState) && poleState.get(PistonExtensionPoleBlock.FACING) + if (AllBlocks.PISTON_EXTENSION_POLE.has(poleState) && poleState.getValue(PistonExtensionPoleBlock.FACING) .getAxis() == direction.getAxis()) frontier.add(offset); } if (pistonState == PistonState.EXTENDED || MechanicalPistonBlock.isStickyPiston(state)) { - offset = pos.offset(direction); + offset = pos.relative(direction); if (!visited.contains(offset)) frontier.add(offset); } @@ -577,7 +577,7 @@ public abstract class Contraption { private boolean moveChassis(World world, BlockPos pos, Direction movementDirection, Queue frontier, Set visited) { - TileEntity te = world.getTileEntity(pos); + TileEntity te = world.getBlockEntity(pos); if (!(te instanceof ChassisTileEntity)) return false; ChassisTileEntity chassis = (ChassisTileEntity) te; @@ -594,23 +594,23 @@ public abstract class Contraption { protected Pair capture(World world, BlockPos pos) { BlockState blockstate = world.getBlockState(pos); if (blockstate.getBlock() instanceof ChestBlock) - blockstate = blockstate.with(ChestBlock.TYPE, ChestType.SINGLE); + blockstate = blockstate.setValue(ChestBlock.TYPE, ChestType.SINGLE); if (AllBlocks.ADJUSTABLE_CRATE.has(blockstate)) - blockstate = blockstate.with(AdjustableCrateBlock.DOUBLE, false); + blockstate = blockstate.setValue(AdjustableCrateBlock.DOUBLE, false); if (AllBlocks.REDSTONE_CONTACT.has(blockstate)) - blockstate = blockstate.with(RedstoneContactBlock.POWERED, true); + blockstate = blockstate.setValue(RedstoneContactBlock.POWERED, true); if (blockstate.getBlock() instanceof AbstractButtonBlock) { - blockstate = blockstate.with(AbstractButtonBlock.POWERED, false); - world.getPendingBlockTicks() + blockstate = blockstate.setValue(AbstractButtonBlock.POWERED, false); + world.getBlockTicks() .scheduleTick(pos, blockstate.getBlock(), -1); } if (blockstate.getBlock() instanceof PressurePlateBlock) { - blockstate = blockstate.with(PressurePlateBlock.POWERED, false); - world.getPendingBlockTicks() + blockstate = blockstate.setValue(PressurePlateBlock.POWERED, false); + world.getBlockTicks() .scheduleTick(pos, blockstate.getBlock(), -1); } CompoundNBT compoundnbt = getTileEntityNBT(world, pos); - TileEntity tileentity = world.getTileEntity(pos); + TileEntity tileentity = world.getBlockEntity(pos); return Pair.of(new BlockInfo(pos, blockstate, compoundnbt), tileentity); } @@ -621,7 +621,7 @@ public abstract class Contraption { if (blocks.put(localPos, blockInfo) != null) return; - bounds = bounds.union(new AxisAlignedBB(localPos)); + bounds = bounds.minmax(new AxisAlignedBB(localPos)); TileEntity te = pair.getValue(); if (te != null && MountedStorage.canUseAsStorage(te)) @@ -639,10 +639,10 @@ public abstract class Contraption { @Nullable protected CompoundNBT getTileEntityNBT(World world, BlockPos pos) { - TileEntity tileentity = world.getTileEntity(pos); + TileEntity tileentity = world.getBlockEntity(pos); if (tileentity == null) return null; - CompoundNBT nbt = tileentity.write(new CompoundNBT()); + CompoundNBT nbt = tileentity.save(new CompoundNBT()); nbt.remove("x"); nbt.remove("y"); nbt.remove("z"); @@ -695,18 +695,18 @@ public abstract class Contraption { superglue.clear(); NBTHelper.iterateCompoundList(nbt.getList("Superglue", NBT.TAG_COMPOUND), c -> superglue - .add(Pair.of(NBTUtil.readBlockPos(c.getCompound("Pos")), Direction.byIndex(c.getByte("Direction"))))); + .add(Pair.of(NBTUtil.readBlockPos(c.getCompound("Pos")), Direction.from3DDataValue(c.getByte("Direction"))))); seats.clear(); NBTHelper.iterateCompoundList(nbt.getList("Seats", NBT.TAG_COMPOUND), c -> seats.add(NBTUtil.readBlockPos(c))); seatMapping.clear(); NBTHelper.iterateCompoundList(nbt.getList("Passengers", NBT.TAG_COMPOUND), - c -> seatMapping.put(NBTUtil.readUniqueId(NBTHelper.getINBT(c, "Id")), c.getInt("Seat"))); + c -> seatMapping.put(NBTUtil.loadUUID(NBTHelper.getINBT(c, "Id")), c.getInt("Seat"))); stabilizedSubContraptions.clear(); NBTHelper.iterateCompoundList(nbt.getList("SubContraptions", NBT.TAG_COMPOUND), - c -> stabilizedSubContraptions.put(c.getUniqueId("Id"), BlockFace.fromNBT(c.getCompound("Location")))); + c -> stabilizedSubContraptions.put(c.getUUID("Id"), BlockFace.fromNBT(c.getCompound("Location")))); storage.clear(); NBTHelper.iterateCompoundList(nbt.getList("Storage", NBT.TAG_COMPOUND), c -> storage @@ -774,7 +774,7 @@ public abstract class Contraption { CompoundNBT c = new CompoundNBT(); c.put("Pos", NBTUtil.writeBlockPos(glueEntry.getKey())); c.putByte("Direction", (byte) glueEntry.getValue() - .getIndex()); + .get3DDataValue()); superglueNBT.add(c); } @@ -803,14 +803,14 @@ public abstract class Contraption { nbt.put("Seats", NBTHelper.writeCompoundList(getSeats(), NBTUtil::writeBlockPos)); nbt.put("Passengers", NBTHelper.writeCompoundList(getSeatMapping().entrySet(), e -> { CompoundNBT tag = new CompoundNBT(); - tag.put("Id", NBTUtil.fromUuid(e.getKey())); + tag.put("Id", NBTUtil.createUUID(e.getKey())); tag.putInt("Seat", e.getValue()); return tag; })); nbt.put("SubContraptions", NBTHelper.writeCompoundList(stabilizedSubContraptions.entrySet(), e -> { CompoundNBT tag = new CompoundNBT(); - tag.putUniqueId("Id", e.getKey()); + tag.putUUID("Id", e.getKey()); tag.put("Location", e.getValue() .serializeNBT()); return tag; @@ -843,7 +843,7 @@ public abstract class Contraption { for (BlockInfo block : this.blocks.values()) { int id = palette.idFor(block.state); CompoundNBT c = new CompoundNBT(); - c.putLong("Pos", block.pos.toLong()); + c.putLong("Pos", block.pos.asLong()); c.putInt("State", id); if (block.nbt != null) c.put("Data", block.nbt); @@ -851,7 +851,7 @@ public abstract class Contraption { } ListNBT paletteNBT = new ListNBT(); - palette.writePaletteToList(paletteNBT); + palette.write(paletteNBT); compound.put("Palette", paletteNBT); compound.put("BlockList", blockList); @@ -881,7 +881,7 @@ public abstract class Contraption { this.blocks.put(info.pos, info); - if (world.isRemote) { + if (world.isClientSide) { Block block = info.state.getBlock(); CompoundNBT tag = info.nbt; MovementBehaviour movementBehaviour = AllMovementBehaviours.of(block); @@ -892,10 +892,10 @@ public abstract class Contraption { tag.putInt("y", info.pos.getY()); tag.putInt("z", info.pos.getZ()); - TileEntity te = TileEntity.createFromTag(info.state, tag); + TileEntity te = TileEntity.loadStatic(info.state, tag); if (te == null) return; - te.setLocation(new ContraptionTileWorld(world, te, info), te.getPos()); + te.setLevelAndPosition(new ContraptionTileWorld(world, te, info), te.getBlockPos()); if (te instanceof KineticTileEntity) ((KineticTileEntity) te).setSpeed(0); te.getBlockState(); @@ -914,8 +914,8 @@ public abstract class Contraption { } private static BlockInfo readBlockInfo(CompoundNBT blockListEntry, HashMapPalette palette) { - return new BlockInfo(BlockPos.fromLong(blockListEntry.getLong("Pos")), - Objects.requireNonNull(palette.get(blockListEntry.getInt("State"))), + return new BlockInfo(BlockPos.of(blockListEntry.getLong("Pos")), + Objects.requireNonNull(palette.valueFor(blockListEntry.getInt("State"))), blockListEntry.contains("Data") ? blockListEntry.getCompound("Data") : null); } @@ -939,33 +939,33 @@ public abstract class Contraption { if (brittles != BlockMovementChecks.isBrittle(block.state)) continue; - BlockPos add = block.pos.add(anchor) - .add(offset); + BlockPos add = block.pos.offset(anchor) + .offset(offset); if (customBlockRemoval(world, add, block.state)) continue; BlockState oldState = world.getBlockState(add); Block blockIn = oldState.getBlock(); if (block.state.getBlock() != blockIn) iterator.remove(); - world.removeTileEntity(add); + world.removeBlockEntity(add); int flags = BlockFlags.IS_MOVING | BlockFlags.NO_NEIGHBOR_DROPS | BlockFlags.UPDATE_NEIGHBORS | BlockFlags.BLOCK_UPDATE | BlockFlags.RERENDER_MAIN_THREAD; - if (blockIn instanceof IWaterLoggable && oldState.contains(BlockStateProperties.WATERLOGGED) - && oldState.get(BlockStateProperties.WATERLOGGED)) { - world.setBlockState(add, Blocks.WATER.getDefaultState(), flags); + if (blockIn instanceof IWaterLoggable && oldState.hasProperty(BlockStateProperties.WATERLOGGED) + && oldState.getValue(BlockStateProperties.WATERLOGGED)) { + world.setBlock(add, Blocks.WATER.defaultBlockState(), flags); continue; } - world.setBlockState(add, Blocks.AIR.getDefaultState(), flags); + world.setBlock(add, Blocks.AIR.defaultBlockState(), flags); } } for (BlockInfo block : blocks.values()) { - BlockPos add = block.pos.add(anchor) - .add(offset); + BlockPos add = block.pos.offset(anchor) + .offset(offset); // if (!shouldUpdateAfterMovement(block)) // continue; int flags = BlockFlags.IS_MOVING | BlockFlags.DEFAULT; - world.notifyBlockUpdate(add, block.state, Blocks.AIR.getDefaultState(), flags); + world.sendBlockUpdated(add, block.state, Blocks.AIR.defaultBlockState(), flags); // when the blockstate is set to air, the block's POI data is removed, but markAndNotifyBlock tries to // remove it again, so to prevent an error from being logged by double-removal we add the POI data back now @@ -973,13 +973,13 @@ public abstract class Contraption { ServerWorld serverWorld = (ServerWorld) world; PointOfInterestType.forState(block.state).ifPresent(poiType -> { world.getServer().execute(() -> { - serverWorld.getPointOfInterestManager().func_219135_a(add, poiType); - DebugPacketSender.func_218799_a(serverWorld, add); + serverWorld.getPoiManager().add(add, poiType); + DebugPacketSender.sendPoiAddedPacket(serverWorld, add); }); }); - world.markAndNotifyBlock(add, world.getChunkAt(add), block.state, Blocks.AIR.getDefaultState(), flags, 512); - block.state.updateDiagonalNeighbors(world, add, flags & -2); + world.markAndNotifyBlock(add, world.getChunkAt(add), block.state, Blocks.AIR.defaultBlockState(), flags, 512); + block.state.updateIndirectNeighbourShapes(world, add, flags & -2); } } @@ -997,27 +997,27 @@ public abstract class Contraption { if (nonBrittles) for (Direction face : Iterate.directions) - state = state.updatePostPlacement(face, world.getBlockState(targetPos.offset(face)), world, - targetPos, targetPos.offset(face)); + state = state.updateShape(face, world.getBlockState(targetPos.relative(face)), world, + targetPos, targetPos.relative(face)); BlockState blockState = world.getBlockState(targetPos); - if (blockState.getBlockHardness(world, targetPos) == -1 || (state.getCollisionShape(world, targetPos) + if (blockState.getDestroySpeed(world, targetPos) == -1 || (state.getCollisionShape(world, targetPos) .isEmpty() && !blockState.getCollisionShape(world, targetPos) .isEmpty())) { if (targetPos.getY() == 0) - targetPos = targetPos.up(); - world.playEvent(2001, targetPos, Block.getStateId(state)); - Block.spawnDrops(state, world, targetPos, null); + targetPos = targetPos.above(); + world.levelEvent(2001, targetPos, Block.getId(state)); + Block.dropResources(state, world, targetPos, null); continue; } - if (state.getBlock() instanceof IWaterLoggable && state.contains(BlockStateProperties.WATERLOGGED)) { + if (state.getBlock() instanceof IWaterLoggable && state.hasProperty(BlockStateProperties.WATERLOGGED)) { FluidState FluidState = world.getFluidState(targetPos); - state = state.with(BlockStateProperties.WATERLOGGED, FluidState.getFluid() == Fluids.WATER); + state = state.setValue(BlockStateProperties.WATERLOGGED, FluidState.getType() == Fluids.WATER); } world.destroyBlock(targetPos, true); - world.setBlockState(targetPos, state, 3 | BlockFlags.IS_MOVING); + world.setBlock(targetPos, state, 3 | BlockFlags.IS_MOVING); boolean verticalRotation = transform.rotationAxis == null || transform.rotationAxis.isHorizontal(); verticalRotation = verticalRotation && transform.rotation != Rotation.NONE; @@ -1026,7 +1026,7 @@ public abstract class Contraption { world.destroyBlock(targetPos, true); } - TileEntity tileEntity = world.getTileEntity(targetPos); + TileEntity tileEntity = world.getBlockEntity(targetPos); CompoundNBT tag = block.nbt; if (tileEntity != null) tag = NBTProcessors.process(tileEntity, tag, false); @@ -1041,9 +1041,9 @@ public abstract class Contraption { } if (tileEntity instanceof FluidTankTileEntity && tag.contains("LastKnownPos")) - tag.put("LastKnownPos", NBTUtil.writeBlockPos(BlockPos.ZERO.down())); + tag.put("LastKnownPos", NBTUtil.writeBlockPos(BlockPos.ZERO.below())); - tileEntity.fromTag(block.state, tag); + tileEntity.load(block.state, tag); if (storage.containsKey(block.pos)) { MountedStorage mountedStorage = storage.get(block.pos); @@ -1082,8 +1082,8 @@ public abstract class Contraption { SuperGlueEntity entity = new SuperGlueEntity(world, targetPos, targetFacing); if (entity.onValidSurface()) { - if (!world.isRemote) - world.addEntity(entity); + if (!world.isClientSide) + world.addFreshEntity(entity); } } } @@ -1092,7 +1092,7 @@ public abstract class Contraption { for (Entity seatedEntity : seatedEntities) { if (getSeatMapping().isEmpty()) continue; - Integer seatIndex = getSeatMapping().get(seatedEntity.getUniqueID()); + Integer seatIndex = getSeatMapping().get(seatedEntity.getUUID()); BlockPos seatPos = getSeats().get(seatIndex); seatPos = transform.apply(seatPos); if (!(world.getBlockState(seatPos) @@ -1216,11 +1216,11 @@ public abstract class Contraption { VoxelShape collisionShape = info.state.getCollisionShape(world, localPos); if (collisionShape.isEmpty()) continue; - combinedShape = VoxelShapes.combine(combinedShape, - collisionShape.withOffset(localPos.getX(), localPos.getY(), localPos.getZ()), IBooleanFunction.OR); + combinedShape = VoxelShapes.joinUnoptimized(combinedShape, + collisionShape.move(localPos.getX(), localPos.getY(), localPos.getZ()), IBooleanFunction.OR); } - return combinedShape.simplify() - .toBoundingBoxList(); + return combinedShape.optimize() + .toAabbs(); }) .thenAccept(r -> { simplifiedEntityColliders = Optional.of(r); @@ -1269,14 +1269,14 @@ public abstract class Contraption { @Override public BlockState getBlockState(BlockPos pos) { - if (!pos.equals(te.getPos())) - return Blocks.AIR.getDefaultState(); + if (!pos.equals(te.getBlockPos())) + return Blocks.AIR.defaultBlockState(); return info.state; } @Override - public boolean isBlockPresent(BlockPos pos) { - return pos.equals(te.getPos()); + public boolean isLoaded(BlockPos pos) { + return pos.equals(te.getBlockPos()); } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionCollider.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionCollider.java index 0c0bee7e1..f07a194b1 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionCollider.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionCollider.java @@ -1,7 +1,7 @@ package com.simibubi.create.content.contraptions.components.structureMovement; import static net.minecraft.entity.Entity.collideBoundingBoxHeuristically; -import static net.minecraft.entity.Entity.horizontalMag; +import static net.minecraft.entity.Entity.getHorizontalDistanceSqr; import java.util.ArrayList; import java.util.List; @@ -60,7 +60,7 @@ public class ContraptionCollider { } static void collideEntities(AbstractContraptionEntity contraptionEntity) { - World world = contraptionEntity.getEntityWorld(); + World world = contraptionEntity.getCommandSenderWorld(); Contraption contraption = contraptionEntity.getContraption(); AxisAlignedBB bounds = contraptionEntity.getBoundingBox(); @@ -69,7 +69,7 @@ public class ContraptionCollider { if (bounds == null) return; - Vector3d contraptionPosition = contraptionEntity.getPositionVec(); + Vector3d contraptionPosition = contraptionEntity.position(); Vector3d contraptionMotion = contraptionPosition.subtract(contraptionEntity.getPrevPositionVec()); Vector3d anchorVec = contraptionEntity.getAnchorVec(); ContraptionRotationState rotation = null; @@ -77,8 +77,8 @@ public class ContraptionCollider { // After death, multiple refs to the client player may show up in the area boolean skipClientPlayer = false; - List entitiesWithinAABB = world.getEntitiesWithinAABB(Entity.class, bounds.grow(2) - .expand(0, 32, 0), contraptionEntity::canCollideWith); + List entitiesWithinAABB = world.getEntitiesOfClass(Entity.class, bounds.inflate(2) + .expandTowards(0, 32, 0), contraptionEntity::canCollideWith); for (Entity entity : entitiesWithinAABB) { PlayerType playerType = getPlayerType(entity); @@ -86,7 +86,7 @@ public class ContraptionCollider { continue; if (playerType == PlayerType.SERVER && entity instanceof ServerPlayerEntity) { - ((ServerPlayerEntity) entity).connection.floatingTickCount = 0; + ((ServerPlayerEntity) entity).connection.aboveGroundTickCount = 0; continue; } @@ -102,30 +102,30 @@ public class ContraptionCollider { Matrix3d rotationMatrix = rotation.asMatrix(); // Transform entity position and motion to local space - Vector3d entityPosition = entity.getPositionVec(); + Vector3d entityPosition = entity.position(); AxisAlignedBB entityBounds = entity.getBoundingBox(); - Vector3d motion = entity.getMotion(); + Vector3d motion = entity.getDeltaMovement(); float yawOffset = rotation.getYawOffset(); Vector3d position = getWorldToLocalTranslation(entity, anchorVec, rotationMatrix, yawOffset); // Prepare entity bounds - AxisAlignedBB localBB = entityBounds.offset(position) - .grow(1.0E-7D); + AxisAlignedBB localBB = entityBounds.move(position) + .inflate(1.0E-7D); OrientedBB obb = new OrientedBB(localBB); obb.setRotation(rotationMatrix); motion = motion.subtract(contraptionMotion); motion = rotationMatrix.transform(motion); - // Use simplified bbs when present + // Use simplified bbs when present final Vector3d motionCopy = motion; List collidableBBs = contraption.simplifiedEntityColliders.orElseGet(() -> { // Else find 'nearby' individual block shapes to collide with List bbs = new ArrayList<>(); ReuseableStream potentialHits = - getPotentiallyCollidedShapes(world, contraption, localBB.expand(motionCopy)); - potentialHits.createStream() - .forEach(shape -> shape.toBoundingBoxList() + getPotentiallyCollidedShapes(world, contraption, localBB.expandTowards(motionCopy)); + potentialHits.getStream() + .forEach(shape -> shape.toAabbs() .forEach(bbs::add)); return bbs; @@ -147,12 +147,12 @@ public class ContraptionCollider { Vector3d currentResponse = collisionResponse.getValue(); Vector3d currentCenter = obbCenter.add(currentResponse); - if (Math.abs(currentCenter.x - bb.getCenter().x) - entityBounds.getXSize() - 1 > bb.getXSize() / 2) + if (Math.abs(currentCenter.x - bb.getCenter().x) - entityBounds.getXsize() - 1 > bb.getXsize() / 2) continue; - if (Math.abs((currentCenter.y + motion.y) - bb.getCenter().y) - entityBounds.getYSize() - - 1 > bb.getYSize() / 2) + if (Math.abs((currentCenter.y + motion.y) - bb.getCenter().y) - entityBounds.getYsize() + - 1 > bb.getYsize() / 2) continue; - if (Math.abs(currentCenter.z - bb.getCenter().z) - entityBounds.getZSize() - 1 > bb.getZSize() / 2) + if (Math.abs(currentCenter.z - bb.getCenter().z) - entityBounds.getZsize() - 1 > bb.getZsize() / 2) continue; obb.setCenter(currentCenter); @@ -169,7 +169,7 @@ public class ContraptionCollider { Vector3d collisionPosition = intersect.getCollisionPosition(); if (!isTemporal) { - Vector3d separation = intersect.asSeparationVec(entity.stepHeight); + Vector3d separation = intersect.asSeparationVec(entity.maxUpStep); if (separation != null && !separation.equals(Vector3d.ZERO)) { collisionResponse.setValue(currentResponse.add(separation)); timeOfImpact = 0; @@ -198,12 +198,12 @@ public class ContraptionCollider { // Re-run collisions with horizontal offset collisionResponse.setValue(collisionResponse.getValue() - .mul(129 / 128f, 0, 129 / 128f)); + .multiply(129 / 128f, 0, 129 / 128f)); continue; } // Resolve collision - Vector3d entityMotion = entity.getMotion(); + Vector3d entityMotion = entity.getDeltaMovement(); Vector3d entityMotionNoTemporal = entityMotion; Vector3d collisionNormal = normal.getValue(); Vector3d collisionLocation = location.getValue(); @@ -230,7 +230,7 @@ public class ContraptionCollider { double slide = 0; if (!collisionLocation.equals(Vector3d.ZERO)) { - collisionLocation = collisionLocation.add(entity.getPositionVec() + collisionLocation = collisionLocation.add(entity.position() .add(entity.getBoundingBox() .getCenter()) .scale(.5f)); @@ -250,8 +250,8 @@ public class ContraptionCollider { boolean anyCollision = hardCollision || temporalCollision; if (bounce > 0 && hasNormal && anyCollision && bounceEntity(entity, collisionNormal, contraptionEntity, bounce)) { - entity.world.playSound(playerType == PlayerType.CLIENT ? (PlayerEntity) entity : null, - entity.getX(), entity.getY(), entity.getZ(), SoundEvents.BLOCK_SLIME_BLOCK_FALL, + entity.level.playSound(playerType == PlayerType.CLIENT ? (PlayerEntity) entity : null, + entity.getX(), entity.getY(), entity.getZ(), SoundEvents.SLIME_BLOCK_FALL, SoundCategory.BLOCKS, .5f, 1); continue; } @@ -259,53 +259,53 @@ public class ContraptionCollider { if (temporalCollision) { double idealVerticalMotion = motionResponse.y; if (idealVerticalMotion != entityMotion.y) { - entity.setMotion(entityMotion.mul(1, 0, 1) + entity.setDeltaMovement(entityMotion.multiply(1, 0, 1) .add(0, idealVerticalMotion, 0)); - entityMotion = entity.getMotion(); + entityMotion = entity.getDeltaMovement(); } } if (hardCollision) { - double motionX = entityMotion.getX(); - double motionY = entityMotion.getY(); - double motionZ = entityMotion.getZ(); - double intersectX = totalResponse.getX(); - double intersectY = totalResponse.getY(); - double intersectZ = totalResponse.getZ(); + double motionX = entityMotion.x(); + double motionY = entityMotion.y(); + double motionZ = entityMotion.z(); + double intersectX = totalResponse.x(); + double intersectY = totalResponse.y(); + double intersectZ = totalResponse.z(); double horizonalEpsilon = 1 / 128f; if (motionX != 0 && Math.abs(intersectX) > horizonalEpsilon && motionX > 0 == intersectX < 0) - entityMotion = entityMotion.mul(0, 1, 1); + entityMotion = entityMotion.multiply(0, 1, 1); if (motionY != 0 && intersectY != 0 && motionY > 0 == intersectY < 0) - entityMotion = entityMotion.mul(1, 0, 1) + entityMotion = entityMotion.multiply(1, 0, 1) .add(0, contraptionMotion.y, 0); if (motionZ != 0 && Math.abs(intersectZ) > horizonalEpsilon && motionZ > 0 == intersectZ < 0) - entityMotion = entityMotion.mul(1, 1, 0); + entityMotion = entityMotion.multiply(1, 1, 0); } if (bounce == 0 && slide > 0 && hasNormal && anyCollision && rotation.hasVerticalRotation()) { - double slideFactor = collisionNormal.mul(1, 0, 1) + double slideFactor = collisionNormal.multiply(1, 0, 1) .length() * 1.25f; - Vector3d motionIn = entityMotionNoTemporal.mul(0, .9, 0) + Vector3d motionIn = entityMotionNoTemporal.multiply(0, .9, 0) .add(0, -.01f, 0); - Vector3d slideNormal = collisionNormal.crossProduct(motionIn.crossProduct(collisionNormal)) + Vector3d slideNormal = collisionNormal.cross(motionIn.cross(collisionNormal)) .normalize(); - Vector3d newMotion = entityMotion.mul(.85, 0, .85) + Vector3d newMotion = entityMotion.multiply(.85, 0, .85) .add(slideNormal.scale((.2f + slide) * motionIn.length() * slideFactor) .add(0, -.1f - collisionNormal.y * .125f, 0)); - entity.setMotion(newMotion); - entityMotion = entity.getMotion(); + entity.setDeltaMovement(newMotion); + entityMotion = entity.getDeltaMovement(); } if (!hardCollision && surfaceCollision.isFalse()) continue; Vector3d allowedMovement = getAllowedMovement(totalResponse, entity); - entity.setPosition(entityPosition.x + allowedMovement.x, entityPosition.y + allowedMovement.y, + entity.setPos(entityPosition.x + allowedMovement.x, entityPosition.y + allowedMovement.y, entityPosition.z + allowedMovement.z); - entityPosition = entity.getPositionVec(); + entityPosition = entity.position(); - entity.velocityChanged = true; + entity.hurtMarked = true; Vector3d contactPointMotion = Vector3d.ZERO; if (surfaceCollision.isTrue()) { @@ -316,21 +316,21 @@ public class ContraptionCollider { if (canWalk) entity.onGround = true; if (entity instanceof ItemEntity) - entityMotion = entityMotion.mul(.5f, 1, .5f); + entityMotion = entityMotion.multiply(.5f, 1, .5f); } contactPointMotion = contraptionEntity.getContactPointMotion(entityPosition); allowedMovement = getAllowedMovement(contactPointMotion, entity); - entity.setPosition(entityPosition.x + allowedMovement.x, entityPosition.y, + entity.setPos(entityPosition.x + allowedMovement.x, entityPosition.y, entityPosition.z + allowedMovement.z); } - entity.setMotion(entityMotion); + entity.setDeltaMovement(entityMotion); if (playerType != PlayerType.CLIENT) continue; - double d0 = entity.getX() - entity.prevPosX - contactPointMotion.x; - double d1 = entity.getZ() - entity.prevPosZ - contactPointMotion.z; + double d0 = entity.getX() - entity.xo - contactPointMotion.x; + double d1 = entity.getZ() - entity.zo - contactPointMotion.z; float limbSwing = MathHelper.sqrt(d0 * d0 + d1 * d1) * 4.0F; if (limbSwing > 1.0F) limbSwing = 1.0F; @@ -342,15 +342,15 @@ public class ContraptionCollider { static boolean bounceEntity(Entity entity, Vector3d normal, AbstractContraptionEntity contraption, double factor) { if (factor == 0) return false; - if (entity.bypassesLandingEffects()) + if (entity.isSuppressingBounce()) return false; - Vector3d contactPointMotion = contraption.getContactPointMotion(entity.getPositionVec()); - Vector3d motion = entity.getMotion().subtract(contactPointMotion); - Vector3d deltav = normal.scale(factor*2*motion.dotProduct(normal)); - if (deltav.dotProduct(deltav) < 0.1f) + Vector3d contactPointMotion = contraption.getContactPointMotion(entity.position()); + Vector3d motion = entity.getDeltaMovement().subtract(contactPointMotion); + Vector3d deltav = normal.scale(factor*2*motion.dot(normal)); + if (deltav.dot(deltav) < 0.1f) return false; - entity.setMotion(entity.getMotion().subtract(deltav)); + entity.setDeltaMovement(entity.getDeltaMovement().subtract(deltav)); return true; } @@ -363,8 +363,8 @@ public class ContraptionCollider { } public static Vector3d getWorldToLocalTranslation(Entity entity, Vector3d anchorVec, Matrix3d rotationMatrix, float yawOffset) { - Vector3d entityPosition = entity.getPositionVec(); - Vector3d centerY = new Vector3d(0, entity.getBoundingBox().getYSize() / 2, 0); + Vector3d entityPosition = entity.position(); + Vector3d centerY = new Vector3d(0, entity.getBoundingBox().getYsize() / 2, 0); Vector3d position = entityPosition; position = position.add(centerY); position = position.subtract(VecHelper.CENTER_OF_ORIGIN); @@ -399,38 +399,38 @@ public class ContraptionCollider { /** From Entity#getAllowedMovement **/ static Vector3d getAllowedMovement(Vector3d movement, Entity e) { AxisAlignedBB bb = e.getBoundingBox(); - ISelectionContext ctx = ISelectionContext.forEntity(e); - World world = e.world; + ISelectionContext ctx = ISelectionContext.of(e); + World world = e.level; VoxelShape voxelshape = world.getWorldBorder() - .getShape(); + .getCollisionShape(); Stream stream = - VoxelShapes.compare(voxelshape, VoxelShapes.create(bb.shrink(1.0E-7D)), IBooleanFunction.AND) + VoxelShapes.joinIsNotEmpty(voxelshape, VoxelShapes.create(bb.deflate(1.0E-7D)), IBooleanFunction.AND) ? Stream.empty() : Stream.of(voxelshape); - Stream stream1 = world.getEntityCollisions(e, bb.expand(movement), entity -> false); // FIXME: 1.15 equivalent translated correctly? + Stream stream1 = world.getEntityCollisions(e, bb.expandTowards(movement), entity -> false); // FIXME: 1.15 equivalent translated correctly? ReuseableStream reuseablestream = new ReuseableStream<>(Stream.concat(stream1, stream)); - Vector3d allowedMovement = movement.lengthSquared() == 0.0D ? movement + Vector3d allowedMovement = movement.lengthSqr() == 0.0D ? movement : collideBoundingBoxHeuristically(e, movement, bb, world, ctx, reuseablestream); boolean xDifferent = movement.x != allowedMovement.x; boolean yDifferent = movement.y != allowedMovement.y; boolean zDifferent = movement.z != allowedMovement.z; boolean notMovingUp = e.isOnGround() || yDifferent && movement.y < 0.0D; - if (e.stepHeight > 0.0F && notMovingUp && (xDifferent || zDifferent)) { - Vector3d allowedStep = collideBoundingBoxHeuristically(e, new Vector3d(movement.x, (double) e.stepHeight, movement.z), + if (e.maxUpStep > 0.0F && notMovingUp && (xDifferent || zDifferent)) { + Vector3d allowedStep = collideBoundingBoxHeuristically(e, new Vector3d(movement.x, (double) e.maxUpStep, movement.z), bb, world, ctx, reuseablestream); - Vector3d allowedStepGivenMovement = collideBoundingBoxHeuristically(e, new Vector3d(0.0D, (double) e.stepHeight, 0.0D), - bb.expand(movement.x, 0.0D, movement.z), world, ctx, reuseablestream); - if (allowedStepGivenMovement.y < (double) e.stepHeight) { + Vector3d allowedStepGivenMovement = collideBoundingBoxHeuristically(e, new Vector3d(0.0D, (double) e.maxUpStep, 0.0D), + bb.expandTowards(movement.x, 0.0D, movement.z), world, ctx, reuseablestream); + if (allowedStepGivenMovement.y < (double) e.maxUpStep) { Vector3d vec3 = collideBoundingBoxHeuristically(e, new Vector3d(movement.x, 0.0D, movement.z), - bb.offset(allowedStepGivenMovement), world, ctx, reuseablestream).add(allowedStepGivenMovement); - if (horizontalMag(vec3) > horizontalMag(allowedStep)) { + bb.move(allowedStepGivenMovement), world, ctx, reuseablestream).add(allowedStepGivenMovement); + if (getHorizontalDistanceSqr(vec3) > getHorizontalDistanceSqr(allowedStep)) { allowedStep = vec3; } } - if (horizontalMag(allowedStep) > horizontalMag(allowedMovement)) { + if (getHorizontalDistanceSqr(allowedStep) > getHorizontalDistanceSqr(allowedMovement)) { return allowedStep.add(collideBoundingBoxHeuristically(e, new Vector3d(0.0D, -allowedStep.y + movement.y, 0.0D), - bb.offset(allowedStep), world, ctx, reuseablestream)); + bb.move(allowedStep), world, ctx, reuseablestream)); } } @@ -440,7 +440,7 @@ public class ContraptionCollider { private static PlayerType getPlayerType(Entity entity) { if (!(entity instanceof PlayerEntity)) return PlayerType.NONE; - if (!entity.world.isRemote) + if (!entity.level.isClientSide) return PlayerType.SERVER; MutableBoolean isClient = new MutableBoolean(false); DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> isClient.setValue(isClientPlayerEntity(entity))); @@ -455,17 +455,17 @@ public class ContraptionCollider { private static ReuseableStream getPotentiallyCollidedShapes(World world, Contraption contraption, AxisAlignedBB localBB) { - double height = localBB.getYSize(); - double width = localBB.getXSize(); + double height = localBB.getYsize(); + double width = localBB.getXsize(); double horizontalFactor = (height > width && width != 0) ? height / width : 1; double verticalFactor = (width > height && height != 0) ? width / height : 1; - AxisAlignedBB blockScanBB = localBB.grow(0.5f); - blockScanBB = blockScanBB.grow(horizontalFactor, verticalFactor, horizontalFactor); + AxisAlignedBB blockScanBB = localBB.inflate(0.5f); + blockScanBB = blockScanBB.inflate(horizontalFactor, verticalFactor, horizontalFactor); BlockPos min = new BlockPos(blockScanBB.minX, blockScanBB.minY, blockScanBB.minZ); BlockPos max = new BlockPos(blockScanBB.maxX, blockScanBB.maxY, blockScanBB.maxZ); - ReuseableStream potentialHits = new ReuseableStream<>(BlockPos.getAllInBox(min, max) + ReuseableStream potentialHits = new ReuseableStream<>(BlockPos.betweenClosedStream(min, max) .filter(contraption.getBlocks()::containsKey) .map(p -> { BlockState blockState = contraption.getBlocks() @@ -473,7 +473,7 @@ public class ContraptionCollider { BlockPos pos = contraption.getBlocks() .get(p).pos; VoxelShape collisionShape = blockState.getCollisionShape(world, p); - return collisionShape.withOffset(pos.getX(), pos.getY(), pos.getZ()); + return collisionShape.move(pos.getX(), pos.getY(), pos.getZ()); }) .filter(Predicates.not(VoxelShape::isEmpty))); @@ -484,11 +484,11 @@ public class ContraptionCollider { if (!contraptionEntity.supportsTerrainCollision()) return false; - World world = contraptionEntity.getEntityWorld(); - Vector3d motion = contraptionEntity.getMotion(); + World world = contraptionEntity.getCommandSenderWorld(); + Vector3d motion = contraptionEntity.getDeltaMovement(); TranslatingContraption contraption = (TranslatingContraption) contraptionEntity.getContraption(); AxisAlignedBB bounds = contraptionEntity.getBoundingBox(); - Vector3d position = contraptionEntity.getPositionVec(); + Vector3d position = contraptionEntity.position(); BlockPos gridPos = new BlockPos(position); if (contraption == null) @@ -498,37 +498,37 @@ public class ContraptionCollider { if (motion.equals(Vector3d.ZERO)) return false; - Direction movementDirection = Direction.getFacingFromVector(motion.x, motion.y, motion.z); + Direction movementDirection = Direction.getNearest(motion.x, motion.y, motion.z); // Blocks in the world if (movementDirection.getAxisDirection() == AxisDirection.POSITIVE) - gridPos = gridPos.offset(movementDirection); + gridPos = gridPos.relative(movementDirection); if (isCollidingWithWorld(world, contraption, gridPos, movementDirection)) return true; // Other moving Contraptions - for (ControlledContraptionEntity otherContraptionEntity : world.getEntitiesWithinAABB( - ControlledContraptionEntity.class, bounds.grow(1), e -> !e.equals(contraptionEntity))) { + for (ControlledContraptionEntity otherContraptionEntity : world.getEntitiesOfClass( + ControlledContraptionEntity.class, bounds.inflate(1), e -> !e.equals(contraptionEntity))) { if (!otherContraptionEntity.supportsTerrainCollision()) continue; - Vector3d otherMotion = otherContraptionEntity.getMotion(); + Vector3d otherMotion = otherContraptionEntity.getDeltaMovement(); TranslatingContraption otherContraption = (TranslatingContraption) otherContraptionEntity.getContraption(); AxisAlignedBB otherBounds = otherContraptionEntity.getBoundingBox(); - Vector3d otherPosition = otherContraptionEntity.getPositionVec(); + Vector3d otherPosition = otherContraptionEntity.position(); if (otherContraption == null) return false; if (otherBounds == null) return false; - if (!bounds.offset(motion) - .intersects(otherBounds.offset(otherMotion))) + if (!bounds.move(motion) + .intersects(otherBounds.move(otherMotion))) continue; for (BlockPos colliderPos : contraption.getColliders(world, movementDirection)) { - colliderPos = colliderPos.add(gridPos) + colliderPos = colliderPos.offset(gridPos) .subtract(new BlockPos(otherPosition)); if (!otherContraption.getBlocks() .containsKey(colliderPos)) @@ -543,9 +543,9 @@ public class ContraptionCollider { public static boolean isCollidingWithWorld(World world, TranslatingContraption contraption, BlockPos anchor, Direction movementDirection) { for (BlockPos pos : contraption.getColliders(world, movementDirection)) { - BlockPos colliderPos = pos.add(anchor); + BlockPos colliderPos = pos.offset(anchor); - if (!world.isBlockPresent(colliderPos)) + if (!world.isLoaded(colliderPos)) return true; BlockState collidedState = world.getBlockState(colliderPos); diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionEntityRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionEntityRenderer.java index 8d8ed3b62..fe20059fa 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionEntityRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionEntityRenderer.java @@ -17,7 +17,7 @@ public class ContraptionEntityRenderer exte } @Override - public ResourceLocation getEntityTexture(C entity) { + public ResourceLocation getTextureLocation(C entity) { return null; } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionHandler.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionHandler.java index c1c5dfea3..ef0a9dedd 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionHandler.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionHandler.java @@ -36,7 +36,7 @@ public class ContraptionHandler { List queued = queuedAdditions.get(world); for (AbstractContraptionEntity contraptionEntity : queued) - map.put(contraptionEntity.getEntityId(), new WeakReference<>(contraptionEntity)); + map.put(contraptionEntity.getId(), new WeakReference<>(contraptionEntity)); queued.clear(); Collection> values = map.values(); @@ -58,14 +58,14 @@ public class ContraptionHandler { } public static void entitiesWhoJustDismountedGetSentToTheRightLocation(LivingEntity entityLiving, World world) { - if (world.isRemote) + if (world.isClientSide) return; CompoundNBT data = entityLiving.getPersistentData(); if (!data.contains("ContraptionDismountLocation")) return; Vector3d position = VecHelper.readNBT(data.getList("ContraptionDismountLocation", NBT.TAG_DOUBLE)); - if (entityLiving.getRidingEntity() == null) - entityLiving.setPositionAndUpdate(position.x, position.y, position.z); + if (entityLiving.getVehicle() == null) + entityLiving.teleportTo(position.x, position.y, position.z); data.remove("ContraptionDismountLocation"); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionHandlerClient.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionHandlerClient.java index 3ab9bb670..deb7ec47c 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionHandlerClient.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionHandlerClient.java @@ -52,8 +52,8 @@ public class ContraptionHandlerClient { } float limbSwing = data.getFloat("OverrideLimbSwing"); - remotePlayer.prevPosX = remotePlayer.getX() - (limbSwing / 4); - remotePlayer.prevPosZ = remotePlayer.getZ(); + remotePlayer.xo = remotePlayer.getX() - (limbSwing / 4); + remotePlayer.zo = remotePlayer.getZ(); } @SubscribeEvent @@ -65,20 +65,20 @@ public class ContraptionHandlerClient { return; if (player.isPassenger()) return; - if (mc.world == null) + if (mc.level == null) return; if (!event.isUseItem()) return; Vector3d origin = RaycastHelper.getTraceOrigin(player); - double reach = mc.playerController.getBlockReachDistance(); - if (mc.objectMouseOver != null && mc.objectMouseOver.getHitVec() != null) - reach = Math.min(mc.objectMouseOver.getHitVec() + double reach = mc.gameMode.getPickRange(); + if (mc.hitResult != null && mc.hitResult.getLocation() != null) + reach = Math.min(mc.hitResult.getLocation() .distanceTo(origin), reach); Vector3d target = RaycastHelper.getTraceTarget(player, reach, origin); - for (AbstractContraptionEntity contraptionEntity : mc.world - .getEntitiesWithinAABB(AbstractContraptionEntity.class, new AxisAlignedBB(origin, target))) { + for (AbstractContraptionEntity contraptionEntity : mc.level + .getEntitiesOfClass(AbstractContraptionEntity.class, new AxisAlignedBB(origin, target))) { Vector3d localOrigin = contraptionEntity.toLocalVector(origin, 1); Vector3d localTarget = contraptionEntity.toLocalVector(target, 1); @@ -91,10 +91,10 @@ public class ContraptionHandlerClient { if (blockInfo == null) return false; BlockState state = blockInfo.state; - VoxelShape raytraceShape = state.getShape(Minecraft.getInstance().world, BlockPos.ZERO.down()); + VoxelShape raytraceShape = state.getShape(Minecraft.getInstance().level, BlockPos.ZERO.below()); if (raytraceShape.isEmpty()) return false; - BlockRayTraceResult rayTrace = raytraceShape.rayTrace(localOrigin, localTarget, p); + BlockRayTraceResult rayTrace = raytraceShape.clip(localOrigin, localTarget, p); if (rayTrace != null) { mutableResult.setValue(rayTrace); return true; @@ -107,8 +107,8 @@ public class ContraptionHandlerClient { BlockRayTraceResult rayTraceResult = mutableResult.getValue(); Hand hand = event.getHand(); - Direction face = rayTraceResult.getFace(); - BlockPos pos = rayTraceResult.getPos(); + Direction face = rayTraceResult.getDirection(); + BlockPos pos = rayTraceResult.getBlockPos(); if (!contraptionEntity.handlePlayerInteraction(player, pos, face, hand)) return; diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionLighter.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionLighter.java index 73d5a39e2..7b130e908 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionLighter.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionLighter.java @@ -24,7 +24,7 @@ public abstract class ContraptionLighter implements ILigh lightVolume = new LightVolume(contraptionBoundsToVolume(bounds.copy())); - lightVolume.initialize(contraption.entity.world); + lightVolume.initialize(contraption.entity.level); scheduleRebuild = true; startListening(); @@ -32,7 +32,7 @@ public abstract class ContraptionLighter implements ILigh public void tick(RenderedContraption owner) { if (scheduleRebuild) { - lightVolume.initialize(owner.contraption.entity.world); + lightVolume.initialize(owner.contraption.entity.level); scheduleRebuild = false; } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionWorld.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionWorld.java index bff9499dd..28d9dc99b 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionWorld.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionWorld.java @@ -29,7 +29,7 @@ public class ContraptionWorld extends WrappedWorld { if (blockInfo != null) return blockInfo.state; - return Blocks.AIR.getDefaultState(); + return Blocks.AIR.defaultBlockState(); } @Override @@ -43,7 +43,7 @@ public class ContraptionWorld extends WrappedWorld { } @Override - public void playSound(double x, double y, double z, SoundEvent p_184134_7_, SoundCategory p_184134_8_, float p_184134_9_, float p_184134_10_, boolean p_184134_11_) { - world.playSound(x, y, z, p_184134_7_, p_184134_8_, p_184134_9_, p_184134_10_, p_184134_11_); + public void playLocalSound(double x, double y, double z, SoundEvent p_184134_7_, SoundCategory p_184134_8_, float p_184134_9_, float p_184134_10_, boolean p_184134_11_) { + world.playLocalSound(x, y, z, p_184134_7_, p_184134_8_, p_184134_9_, p_184134_10_, p_184134_11_); } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ControlledContraptionEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ControlledContraptionEntity.java index dbdef7a30..be07bba20 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ControlledContraptionEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ControlledContraptionEntity.java @@ -22,6 +22,8 @@ import net.minecraft.world.gen.feature.template.Template.BlockInfo; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; +import com.simibubi.create.content.contraptions.components.structureMovement.AbstractContraptionEntity.ContraptionRotationState; + /** * Ex: Pistons, bearings
    * Controlled Contraption Entities can rotate around one axis and translate. @@ -52,7 +54,7 @@ public class ControlledContraptionEntity extends AbstractContraptionEntity { @Override public Vector3d getContactPointMotion(Vector3d globalContactPoint) { if (contraption instanceof TranslatingContraption) - return getMotion(); + return getDeltaMovement(); return super.getContactPointMotion(globalContactPoint); } @@ -124,11 +126,11 @@ public class ControlledContraptionEntity extends AbstractContraptionEntity { } @Override - public void setPositionAndUpdate(double p_70634_1_, double p_70634_3_, double p_70634_5_) {} + public void teleportTo(double p_70634_1_, double p_70634_3_, double p_70634_5_) {} @Override @OnlyIn(Dist.CLIENT) - public void setPositionAndRotationDirect(double x, double y, double z, float yw, float pt, int inc, boolean t) {} + public void lerpTo(double x, double y, double z, float yw, float pt, int inc, boolean t) {} protected void tickContraption() { angleDelta = angle - prevAngle; @@ -137,7 +139,7 @@ public class ControlledContraptionEntity extends AbstractContraptionEntity { if (controllerPos == null) return; - if (!world.isBlockPresent(controllerPos)) + if (!level.isLoaded(controllerPos)) return; IControlContraption controller = getController(); if (controller == null) { @@ -146,11 +148,11 @@ public class ControlledContraptionEntity extends AbstractContraptionEntity { } if (!controller.isAttachedTo(this)) { controller.attach(this); - if (world.isRemote) - setPosition(getX(), getY(), getZ()); + if (level.isClientSide) + setPos(getX(), getY(), getZ()); } - Vector3d motion = getMotion(); + Vector3d motion = getDeltaMovement(); move(motion.x, motion.y, motion.z); if (ContraptionCollider.collideBlocks(this)) getController().collided(); @@ -168,12 +170,12 @@ public class ControlledContraptionEntity extends AbstractContraptionEntity { BearingContraption bc = (BearingContraption) contraption; Direction facing = bc.getFacing(); Vector3d activeAreaOffset = actor.getActiveAreaOffset(context); - if (!activeAreaOffset.mul(VecHelper.axisAlingedPlaneOf(Vector3d.of(facing.getDirectionVec()))) + if (!activeAreaOffset.multiply(VecHelper.axisAlingedPlaneOf(Vector3d.atLowerCornerOf(facing.getNormal()))) .equals(Vector3d.ZERO)) return false; if (!VecHelper.onSameAxis(blockInfo.pos, BlockPos.ZERO, facing.getAxis())) return false; - context.motion = Vector3d.of(facing.getDirectionVec()).scale(angleDelta / 360.0); + context.motion = Vector3d.atLowerCornerOf(facing.getNormal()).scale(angleDelta / 360.0); context.relativeMotion = context.motion; int timer = context.data.getInt("StationaryTimer"); if (timer > 0) { @@ -188,9 +190,9 @@ public class ControlledContraptionEntity extends AbstractContraptionEntity { protected IControlContraption getController() { if (controllerPos == null) return null; - if (!world.isBlockPresent(controllerPos)) + if (!level.isLoaded(controllerPos)) return null; - TileEntity te = world.getTileEntity(controllerPos); + TileEntity te = level.getBlockEntity(controllerPos); if (!(te instanceof IControlContraption)) return null; return (IControlContraption) te; @@ -220,7 +222,7 @@ public class ControlledContraptionEntity extends AbstractContraptionEntity { @Override protected void handleStallInformation(float x, float y, float z, float angle) { - setPos(x, y, z); + setPosRaw(x, y, z); this.angle = angle; } @@ -232,7 +234,7 @@ public class ControlledContraptionEntity extends AbstractContraptionEntity { for (MatrixStack stack : matrixStacks) MatrixStacker.of(stack) - .nudge(getEntityId()) + .nudge(getId()) .centre() .rotate(angle, axis) .unCentre(); diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/DirectionalExtenderScrollOptionSlot.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/DirectionalExtenderScrollOptionSlot.java index 2bf9f5db0..defea334f 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/DirectionalExtenderScrollOptionSlot.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/DirectionalExtenderScrollOptionSlot.java @@ -21,13 +21,13 @@ public class DirectionalExtenderScrollOptionSlot extends CenteredSideValueBoxTra @Override protected Vector3d getLocalOffset(BlockState state) { return super.getLocalOffset(state) - .add(Vector3d.of(state.get(BlockStateProperties.FACING).getDirectionVec()).scale(-2 / 16f)); + .add(Vector3d.atLowerCornerOf(state.getValue(BlockStateProperties.FACING).getNormal()).scale(-2 / 16f)); } @Override protected void rotate(BlockState state, MatrixStack ms) { if (!getSide().getAxis().isHorizontal()) - MatrixStacker.of(ms).rotateY(AngleHelper.horizontalAngle(state.get(BlockStateProperties.FACING)) - 90); + MatrixStacker.of(ms).rotateY(AngleHelper.horizontalAngle(state.getValue(BlockStateProperties.FACING)) - 90); super.rotate(state, ms); } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/IDisplayAssemblyExceptions.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/IDisplayAssemblyExceptions.java index 36455b9cd..80c154e7e 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/IDisplayAssemblyExceptions.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/IDisplayAssemblyExceptions.java @@ -24,12 +24,12 @@ public interface IDisplayAssemblyExceptions { if (!tooltip.isEmpty()) tooltip.add(StringTextComponent.EMPTY); - tooltip.add(IHaveGoggleInformation.componentSpacing.copy().append(Lang.translate("gui.assembly.exception").formatted(TextFormatting.GOLD))); + tooltip.add(IHaveGoggleInformation.componentSpacing.plainCopy().append(Lang.translate("gui.assembly.exception").withStyle(TextFormatting.GOLD))); String text = e.component.getString(); Arrays.stream(text.split("\n")) .forEach(l -> TooltipHelper.cutStringTextComponent(l, GRAY, WHITE) - .forEach(c -> tooltip.add(IHaveGoggleInformation.componentSpacing.copy().append(c)))); + .forEach(c -> tooltip.add(IHaveGoggleInformation.componentSpacing.plainCopy().append(c)))); return true; } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/MountedFluidStorage.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/MountedFluidStorage.java index 1709ae7d9..8ef8f2a3a 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/MountedFluidStorage.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/MountedFluidStorage.java @@ -63,7 +63,7 @@ public class MountedFluidStorage { else if (sendPacket) { sendPacket = false; AllPackets.channel.send(PacketDistributor.TRACKING_ENTITY.with(() -> entity), - new ContraptionFluidPacket(entity.getEntityId(), pos, tank.getFluid())); + new ContraptionFluidPacket(entity.getId(), pos, tank.getFluid())); packetCooldown = 8; } return; diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/MountedStorage.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/MountedStorage.java index fb49312d3..cc9769c8a 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/MountedStorage.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/MountedStorage.java @@ -62,21 +62,21 @@ public class MountedStorage { // Split double chests if (te.getType() == TileEntityType.CHEST || te.getType() == TileEntityType.TRAPPED_CHEST) { if (te.getBlockState() - .get(ChestBlock.TYPE) != ChestType.SINGLE) - te.getWorld() - .setBlockState(te.getPos(), te.getBlockState() - .with(ChestBlock.TYPE, ChestType.SINGLE)); - te.updateContainingBlockInfo(); + .getValue(ChestBlock.TYPE) != ChestType.SINGLE) + te.getLevel() + .setBlockAndUpdate(te.getBlockPos(), te.getBlockState() + .setValue(ChestBlock.TYPE, ChestType.SINGLE)); + te.clearCache(); } // Split double flexcrates if (AllTileEntities.ADJUSTABLE_CRATE.is(te)) { if (te.getBlockState() - .get(AdjustableCrateBlock.DOUBLE)) - te.getWorld() - .setBlockState(te.getPos(), te.getBlockState() - .with(AdjustableCrateBlock.DOUBLE, false)); - te.updateContainingBlockInfo(); + .getValue(AdjustableCrateBlock.DOUBLE)) + te.getLevel() + .setBlockAndUpdate(te.getBlockPos(), te.getBlockState() + .setValue(AdjustableCrateBlock.DOUBLE, false)); + te.clearCache(); } IItemHandler teHandler = te.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) @@ -146,7 +146,7 @@ public class MountedStorage { storage.valid = true; if (nbt.contains("Bottomless")) { - ItemStack providedStack = ItemStack.read(nbt.getCompound("ProvidedStack")); + ItemStack providedStack = ItemStack.of(nbt.getCompound("ProvidedStack")); storage.handler = new BottomlessItemHandler(() -> providedStack); return storage; } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/MovementBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/MovementBehaviour.java index e2b035323..a94aa49c8 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/MovementBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/MovementBehaviour.java @@ -39,9 +39,9 @@ public abstract class MovementBehaviour { Vector3d vec = context.position; ItemEntity itemEntity = new ItemEntity(context.world, vec.x, vec.y, vec.z, remainder); - itemEntity.setMotion(context.motion.add(0, 0.5f, 0) - .scale(context.world.rand.nextFloat() * .3f)); - context.world.addEntity(itemEntity); + itemEntity.setDeltaMovement(context.motion.add(0, 0.5f, 0) + .scale(context.world.random.nextFloat() * .3f)); + context.world.addFreshEntity(itemEntity); } public void stopMoving(MovementContext context) { diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/MovementContext.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/MovementContext.java index fa26f9ca1..d100c6707 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/MovementContext.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/MovementContext.java @@ -49,7 +49,7 @@ public class MovementContext { public float getAnimationSpeed() { int modifier = 1000; double length = -motion.length(); - if (world.isRemote && contraption.stalled) + if (world.isClientSide && contraption.stalled) return 700; if (Math.abs(length) < 1 / 512f) return 0; diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/NonStationaryLighter.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/NonStationaryLighter.java index 50345908c..800ee2a59 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/NonStationaryLighter.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/NonStationaryLighter.java @@ -14,7 +14,7 @@ public class NonStationaryLighter extends ContraptionLigh GridAlignedBB contraptionBounds = getContraptionBounds(); if (!contraptionBounds.sameAs(bounds)) { - lightVolume.move(contraption.entity.world, contraptionBoundsToVolume(contraptionBounds)); + lightVolume.move(contraption.entity.level, contraptionBoundsToVolume(contraptionBounds)); bounds = contraptionBounds; startListening(); @@ -25,7 +25,7 @@ public class NonStationaryLighter extends ContraptionLigh public GridAlignedBB getContraptionBounds() { GridAlignedBB bb = GridAlignedBB.from(contraption.bounds); - bb.translate(contraption.entity.getBlockPos()); + bb.translate(contraption.entity.blockPosition()); return bb; } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/OrientedContraptionEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/OrientedContraptionEntity.java index cbed32edf..d78fe1f53 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/OrientedContraptionEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/OrientedContraptionEntity.java @@ -48,6 +48,8 @@ import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.common.util.LazyOptional; +import com.simibubi.create.content.contraptions.components.structureMovement.AbstractContraptionEntity.ContraptionRotationState; + /** * Ex: Minecarts, Couplings
    * Oriented Contraption Entities can rotate freely around two axes @@ -55,12 +57,12 @@ import net.minecraftforge.common.util.LazyOptional; */ public class OrientedContraptionEntity extends AbstractContraptionEntity { - private static final Ingredient FUEL_ITEMS = Ingredient.fromItems(Items.COAL, Items.CHARCOAL); + private static final Ingredient FUEL_ITEMS = Ingredient.of(Items.COAL, Items.CHARCOAL); private static final DataParameter> COUPLING = - EntityDataManager.createKey(OrientedContraptionEntity.class, DataSerializers.OPTIONAL_UNIQUE_ID); + EntityDataManager.defineId(OrientedContraptionEntity.class, DataSerializers.OPTIONAL_UUID); private static final DataParameter INITIAL_ORIENTATION = - EntityDataManager.createKey(OrientedContraptionEntity.class, DataSerializers.DIRECTION); + EntityDataManager.defineId(OrientedContraptionEntity.class, DataSerializers.DIRECTION); protected Vector3d motionBeforeStall; protected boolean forceAngle; @@ -105,16 +107,16 @@ public class OrientedContraptionEntity extends AbstractContraptionEntity { } public void setInitialOrientation(Direction direction) { - dataManager.set(INITIAL_ORIENTATION, direction); + entityData.set(INITIAL_ORIENTATION, direction); } public Direction getInitialOrientation() { - return dataManager.get(INITIAL_ORIENTATION); + return entityData.get(INITIAL_ORIENTATION); } public void deferOrientation(Direction newInitialAngle) { - dataManager.set(INITIAL_ORIENTATION, Direction.UP); - yaw = initialYawOffset = newInitialAngle.getHorizontalAngle(); + entityData.set(INITIAL_ORIENTATION, Direction.UP); + yaw = initialYawOffset = newInitialAngle.toYRot(); } @Override @@ -123,15 +125,15 @@ public class OrientedContraptionEntity extends AbstractContraptionEntity { } public float getInitialYaw() { - return (isInitialOrientationPresent() ? dataManager.get(INITIAL_ORIENTATION) : Direction.SOUTH) - .getHorizontalAngle(); + return (isInitialOrientationPresent() ? entityData.get(INITIAL_ORIENTATION) : Direction.SOUTH) + .toYRot(); } @Override - protected void registerData() { - super.registerData(); - dataManager.register(COUPLING, Optional.empty()); - dataManager.register(INITIAL_ORIENTATION, Direction.UP); + protected void defineSynchedData() { + super.defineSynchedData(); + entityData.define(COUPLING, Optional.empty()); + entityData.define(INITIAL_ORIENTATION, Direction.UP); } @Override @@ -152,7 +154,7 @@ public class OrientedContraptionEntity extends AbstractContraptionEntity { @Override public void stopRiding() { - if (!world.isRemote && isAlive()) + if (!level.isClientSide && isAlive()) disassemble(); super.stopRiding(); } @@ -176,10 +178,10 @@ public class OrientedContraptionEntity extends AbstractContraptionEntity { motionBeforeStall = new Vector3d(vecNBT.getDouble(0), vecNBT.getDouble(1), vecNBT.getDouble(2)); if (!motionBeforeStall.equals(Vector3d.ZERO)) targetYaw = prevYaw = yaw += yawFromVector(motionBeforeStall); - setMotion(Vector3d.ZERO); + setDeltaMovement(Vector3d.ZERO); } - setCouplingId(compound.contains("OnCoupling") ? compound.getUniqueId("OnCoupling") : null); + setCouplingId(compound.contains("OnCoupling") ? compound.getUUID("OnCoupling") : null); } @Override @@ -188,9 +190,9 @@ public class OrientedContraptionEntity extends AbstractContraptionEntity { if (motionBeforeStall != null) compound.put("CachedMotion", - newDoubleNBTList(motionBeforeStall.x, motionBeforeStall.y, motionBeforeStall.z)); + newDoubleList(motionBeforeStall.x, motionBeforeStall.y, motionBeforeStall.z)); - Direction optional = dataManager.get(INITIAL_ORIENTATION); + Direction optional = entityData.get(INITIAL_ORIENTATION); if (optional.getAxis() .isHorizontal()) NBTHelper.writeEnum(compound, "InitialOrientation", optional); @@ -204,18 +206,18 @@ public class OrientedContraptionEntity extends AbstractContraptionEntity { compound.putFloat("Pitch", pitch); if (getCouplingId() != null) - compound.putUniqueId("OnCoupling", getCouplingId()); + compound.putUUID("OnCoupling", getCouplingId()); } @Override - public void notifyDataManagerChange(DataParameter key) { - super.notifyDataManagerChange(key); + public void onSyncedDataUpdated(DataParameter key) { + super.onSyncedDataUpdated(key); if (key == INITIAL_ORIENTATION && isInitialOrientationPresent() && !manuallyPlaced) startAtInitialYaw(); } public boolean isInitialOrientationPresent() { - return dataManager.get(INITIAL_ORIENTATION) + return entityData.get(INITIAL_ORIENTATION) .getAxis() .isHorizontal(); } @@ -232,30 +234,30 @@ public class OrientedContraptionEntity extends AbstractContraptionEntity { @Override public Vector3d applyRotation(Vector3d localPos, float partialTicks) { localPos = VecHelper.rotate(localPos, getInitialYaw(), Axis.Y); - localPos = VecHelper.rotate(localPos, getPitch(partialTicks), Axis.Z); - localPos = VecHelper.rotate(localPos, getYaw(partialTicks), Axis.Y); + localPos = VecHelper.rotate(localPos, getViewXRot(partialTicks), Axis.Z); + localPos = VecHelper.rotate(localPos, getViewYRot(partialTicks), Axis.Y); return localPos; } @Override public Vector3d reverseRotation(Vector3d localPos, float partialTicks) { - localPos = VecHelper.rotate(localPos, -getYaw(partialTicks), Axis.Y); - localPos = VecHelper.rotate(localPos, -getPitch(partialTicks), Axis.Z); + localPos = VecHelper.rotate(localPos, -getViewYRot(partialTicks), Axis.Y); + localPos = VecHelper.rotate(localPos, -getViewXRot(partialTicks), Axis.Z); localPos = VecHelper.rotate(localPos, -getInitialYaw(), Axis.Y); return localPos; } - public float getYaw(float partialTicks) { + public float getViewYRot(float partialTicks) { return -(partialTicks == 1.0F ? yaw : angleLerp(partialTicks, prevYaw, yaw)); } - public float getPitch(float partialTicks) { + public float getViewXRot(float partialTicks) { return partialTicks == 1.0F ? pitch : angleLerp(partialTicks, prevPitch, pitch); } @Override protected void tickContraption() { - Entity e = getRidingEntity(); + Entity e = getVehicle(); if (e == null) return; @@ -269,8 +271,8 @@ public class OrientedContraptionEntity extends AbstractContraptionEntity { } Entity riding = e; - while (riding.getRidingEntity() != null && !(contraption instanceof StabilizedContraption)) - riding = riding.getRidingEntity(); + while (riding.getVehicle() != null && !(contraption instanceof StabilizedContraption)) + riding = riding.getVehicle(); boolean isOnCoupling = false; UUID couplingId = getCouplingId(); @@ -289,22 +291,22 @@ public class OrientedContraptionEntity extends AbstractContraptionEntity { LazyOptional capability = riding.getCapability(CapabilityMinecartController.MINECART_CONTROLLER_CAPABILITY); if (capability.isPresent()) { - if (!world.isRemote()) + if (!level.isClientSide()) capability.orElse(null) .setStalledExternally(isStalled); } else { if (isStalled) { if (!wasStalled) - motionBeforeStall = riding.getMotion(); - riding.setMotion(0, 0, 0); + motionBeforeStall = riding.getDeltaMovement(); + riding.setDeltaMovement(0, 0, 0); } if (wasStalled && !isStalled) { - riding.setMotion(motionBeforeStall); + riding.setDeltaMovement(motionBeforeStall); motionBeforeStall = Vector3d.ZERO; } } - if (world.isRemote) + if (level.isClientSide) return; if (!isStalled()) { @@ -328,10 +330,10 @@ public class OrientedContraptionEntity extends AbstractContraptionEntity { Vector3d positionVec = coupledCarts.getFirst() .cart() - .getPositionVec(); + .position(); Vector3d coupledVec = coupledCarts.getSecond() .cart() - .getPositionVec(); + .position(); double diffX = positionVec.x - coupledVec.x; double diffY = positionVec.y - coupledVec.y; @@ -342,7 +344,7 @@ public class OrientedContraptionEntity extends AbstractContraptionEntity { yaw = (float) (MathHelper.atan2(diffZ, diffX) * 180 / Math.PI); pitch = (float) (Math.atan2(diffY, Math.sqrt(diffX * diffX + diffZ * diffZ)) * 180 / Math.PI); - if (getCouplingId().equals(riding.getUniqueID())) { + if (getCouplingId().equals(riding.getUUID())) { pitch *= -1; yaw += 180; } @@ -359,7 +361,7 @@ public class OrientedContraptionEntity extends AbstractContraptionEntity { return false; OrientedContraptionEntity parent = (OrientedContraptionEntity) riding; prevYaw = yaw; - yaw = -parent.getYaw(1); + yaw = -parent.getViewYRot(1); return false; } @@ -368,9 +370,9 @@ public class OrientedContraptionEntity extends AbstractContraptionEntity { return false; boolean rotating = false; - Vector3d movementVector = riding.getMotion(); - Vector3d locationDiff = riding.getPositionVec() - .subtract(riding.prevPosX, riding.prevPosY, riding.prevPosZ); + Vector3d movementVector = riding.getDeltaMovement(); + Vector3d locationDiff = riding.position() + .subtract(riding.xo, riding.yo, riding.zo); if (!(riding instanceof AbstractMinecartEntity)) movementVector = locationDiff; Vector3d motion = movementVector.normalize(); @@ -379,11 +381,11 @@ public class OrientedContraptionEntity extends AbstractContraptionEntity { if (riding instanceof AbstractMinecartEntity) { AbstractMinecartEntity minecartEntity = (AbstractMinecartEntity) riding; BlockPos railPosition = minecartEntity.getCurrentRailPosition(); - BlockState blockState = world.getBlockState(railPosition); + BlockState blockState = level.getBlockState(railPosition); if (blockState.getBlock() instanceof AbstractRailBlock) { AbstractRailBlock abstractRailBlock = (AbstractRailBlock) blockState.getBlock(); RailShape railDirection = - abstractRailBlock.getRailDirection(blockState, world, railPosition, minecartEntity); + abstractRailBlock.getRailDirection(blockState, level, railPosition, minecartEntity); motion = VecHelper.project(motion, MinecartSim2020.getRailVec(railDirection)); } } @@ -397,7 +399,7 @@ public class OrientedContraptionEntity extends AbstractContraptionEntity { } prevYaw = yaw; - float maxApproachSpeed = (float) (motion.length() * 12f / (Math.max(1, getBoundingBox().getXSize() / 6f))); + float maxApproachSpeed = (float) (motion.length() * 12f / (Math.max(1, getBoundingBox().getXsize() / 6f))); float approach = AngleHelper.getShortestAngleDiff(yaw, targetYaw); approach = MathHelper.clamp(approach, -maxApproachSpeed, maxApproachSpeed); yaw += approach; @@ -427,15 +429,15 @@ public class OrientedContraptionEntity extends AbstractContraptionEntity { int i = MathHelper.floor(furnaceCart.getX()); int j = MathHelper.floor(furnaceCart.getY()); int k = MathHelper.floor(furnaceCart.getZ()); - if (furnaceCart.world.getBlockState(new BlockPos(i, j - 1, k)) - .isIn(BlockTags.RAILS)) + if (furnaceCart.level.getBlockState(new BlockPos(i, j - 1, k)) + .is(BlockTags.RAILS)) --j; BlockPos blockpos = new BlockPos(i, j, k); - BlockState blockstate = this.world.getBlockState(blockpos); - if (furnaceCart.canUseRail() && blockstate.isIn(BlockTags.RAILS)) + BlockState blockstate = this.level.getBlockState(blockpos); + if (furnaceCart.canUseRail() && blockstate.is(BlockTags.RAILS)) if (fuel > 1) - riding.setMotion(riding.getMotion() + riding.setDeltaMovement(riding.getDeltaMovement() .normalize() .scale(1)); if (fuel < 5 && contraption != null) { @@ -457,11 +459,11 @@ public class OrientedContraptionEntity extends AbstractContraptionEntity { UUID couplingId = getCouplingId(); if (couplingId == null) return null; - MinecartController controller = CapabilityMinecartController.getIfPresent(world, couplingId); + MinecartController controller = CapabilityMinecartController.getIfPresent(level, couplingId); if (controller == null || !controller.isPresent()) return null; UUID coupledCart = controller.getCoupledCart(true); - MinecartController coupledController = CapabilityMinecartController.getIfPresent(world, coupledCart); + MinecartController coupledController = CapabilityMinecartController.getIfPresent(level, coupledCart); if (coupledController == null || !coupledController.isPresent()) return null; return Couple.create(controller, coupledController); @@ -480,18 +482,18 @@ public class OrientedContraptionEntity extends AbstractContraptionEntity { } @Override - public CompoundNBT writeWithoutTypeId(CompoundNBT nbt) { - return isSerializingFurnaceCart ? nbt : super.writeWithoutTypeId(nbt); + public CompoundNBT saveWithoutId(CompoundNBT nbt) { + return isSerializingFurnaceCart ? nbt : super.saveWithoutId(nbt); } @Nullable public UUID getCouplingId() { - Optional uuid = dataManager.get(COUPLING); + Optional uuid = entityData.get(COUPLING); return uuid == null ? null : uuid.isPresent() ? uuid.get() : null; } public void setCouplingId(UUID id) { - dataManager.set(COUPLING, Optional.ofNullable(id)); + entityData.set(COUPLING, Optional.ofNullable(id)); } @Override @@ -519,25 +521,25 @@ public class OrientedContraptionEntity extends AbstractContraptionEntity { @OnlyIn(Dist.CLIENT) public void doLocalTransforms(float partialTicks, MatrixStack[] matrixStacks) { float angleInitialYaw = getInitialYaw(); - float angleYaw = getYaw(partialTicks); - float anglePitch = getPitch(partialTicks); + float angleYaw = getViewYRot(partialTicks); + float anglePitch = getViewXRot(partialTicks); for (MatrixStack stack : matrixStacks) stack.translate(-.5f, 0, -.5f); - Entity ridingEntity = getRidingEntity(); + Entity ridingEntity = getVehicle(); if (ridingEntity instanceof AbstractMinecartEntity) repositionOnCart(partialTicks, matrixStacks, ridingEntity); else if (ridingEntity instanceof AbstractContraptionEntity) { - if (ridingEntity.getRidingEntity() instanceof AbstractMinecartEntity) - repositionOnCart(partialTicks, matrixStacks, ridingEntity.getRidingEntity()); + if (ridingEntity.getVehicle() instanceof AbstractMinecartEntity) + repositionOnCart(partialTicks, matrixStacks, ridingEntity.getVehicle()); else repositionOnContraption(partialTicks, matrixStacks, ridingEntity); } for (MatrixStack stack : matrixStacks) MatrixStacker.of(stack) - .nudge(getEntityId()) + .nudge(getId()) .centre() .rotateY(angleYaw) .rotateZ(anglePitch) @@ -569,9 +571,9 @@ public class OrientedContraptionEntity extends AbstractContraptionEntity { private Vector3d getContraptionOffset(float partialTicks, Entity ridingEntity) { AbstractContraptionEntity parent = (AbstractContraptionEntity) ridingEntity; Vector3d passengerPosition = parent.getPassengerPosition(this, partialTicks); - double x = passengerPosition.x - MathHelper.lerp(partialTicks, this.lastTickPosX, this.getX()); - double y = passengerPosition.y - MathHelper.lerp(partialTicks, this.lastTickPosY, this.getY()); - double z = passengerPosition.z - MathHelper.lerp(partialTicks, this.lastTickPosZ, this.getZ()); + double x = passengerPosition.x - MathHelper.lerp(partialTicks, this.xOld, this.getX()); + double y = passengerPosition.y - MathHelper.lerp(partialTicks, this.yOld, this.getY()); + double z = passengerPosition.z - MathHelper.lerp(partialTicks, this.zOld, this.getZ()); return new Vector3d(x, y, z); } @@ -579,14 +581,14 @@ public class OrientedContraptionEntity extends AbstractContraptionEntity { @OnlyIn(Dist.CLIENT) private Vector3d getCartOffset(float partialTicks, Entity ridingEntity) { AbstractMinecartEntity cart = (AbstractMinecartEntity) ridingEntity; - double cartX = MathHelper.lerp(partialTicks, cart.lastTickPosX, cart.getX()); - double cartY = MathHelper.lerp(partialTicks, cart.lastTickPosY, cart.getY()); - double cartZ = MathHelper.lerp(partialTicks, cart.lastTickPosZ, cart.getZ()); + double cartX = MathHelper.lerp(partialTicks, cart.xOld, cart.getX()); + double cartY = MathHelper.lerp(partialTicks, cart.yOld, cart.getY()); + double cartZ = MathHelper.lerp(partialTicks, cart.zOld, cart.getZ()); Vector3d cartPos = cart.getPos(cartX, cartY, cartZ); if (cartPos != null) { - Vector3d cartPosFront = cart.getPosOffset(cartX, cartY, cartZ, (double) 0.3F); - Vector3d cartPosBack = cart.getPosOffset(cartX, cartY, cartZ, (double) -0.3F); + Vector3d cartPosFront = cart.getPosOffs(cartX, cartY, cartZ, (double) 0.3F); + Vector3d cartPosBack = cart.getPosOffs(cartX, cartY, cartZ, (double) -0.3F); if (cartPosFront == null) cartPosFront = cartPos; if (cartPosBack == null) diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/OrientedContraptionEntityRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/OrientedContraptionEntityRenderer.java index d1cfea7c5..a2fa2b4ab 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/OrientedContraptionEntityRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/OrientedContraptionEntityRenderer.java @@ -15,7 +15,7 @@ public class OrientedContraptionEntityRenderer extends ContraptionEntityRenderer if (!super.shouldRender(entity, p_225626_2_, p_225626_3_, p_225626_5_, p_225626_7_)) return false; if (entity.getContraption() - .getType() == ContraptionType.MOUNTED && entity.getRidingEntity() == null) + .getType() == ContraptionType.MOUNTED && entity.getVehicle() == null) return false; return true; } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/StructureTransform.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/StructureTransform.java index 225cbc02f..67aab845a 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/StructureTransform.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/StructureTransform.java @@ -97,7 +97,7 @@ public class StructureTransform { } public Vector3d apply(Vector3d localVec) { - return applyWithoutOffset(localVec).add(Vector3d.of(offset)); + return applyWithoutOffset(localVec).add(Vector3d.atLowerCornerOf(offset)); } public BlockPos applyWithoutOffset(BlockPos localPos) { @@ -105,7 +105,7 @@ public class StructureTransform { } public BlockPos apply(BlockPos localPos) { - return applyWithoutOffset(localPos).add(offset); + return applyWithoutOffset(localPos).offset(offset); } public void apply(TileEntity te) { @@ -126,11 +126,11 @@ public class StructureTransform { if (rotationAxis == Axis.Y) { if (block instanceof BellBlock) { - if (state.get(BlockStateProperties.BELL_ATTACHMENT) == BellAttachment.DOUBLE_WALL) { - state = state.with(BlockStateProperties.BELL_ATTACHMENT, BellAttachment.SINGLE_WALL); + if (state.getValue(BlockStateProperties.BELL_ATTACHMENT) == BellAttachment.DOUBLE_WALL) { + state = state.setValue(BlockStateProperties.BELL_ATTACHMENT, BellAttachment.SINGLE_WALL); } - return state.with(HorizontalFaceBlock.HORIZONTAL_FACING, - rotation.rotate(state.get(HorizontalFaceBlock.HORIZONTAL_FACING))); + return state.setValue(HorizontalFaceBlock.FACING, + rotation.rotate(state.getValue(HorizontalFaceBlock.FACING))); } return state.rotate(rotation); } @@ -139,30 +139,30 @@ public class StructureTransform { return rotateChassis(state); if (block instanceof HorizontalFaceBlock) { - Direction stateFacing = state.get(HorizontalFaceBlock.HORIZONTAL_FACING); - AttachFace stateFace = state.get(FACE); + Direction stateFacing = state.getValue(HorizontalFaceBlock.FACING); + AttachFace stateFace = state.getValue(FACE); Direction forcedAxis = rotationAxis == Axis.Z ? Direction.EAST : Direction.SOUTH; if (stateFacing.getAxis() == rotationAxis && stateFace == AttachFace.WALL) return state; for (int i = 0; i < rotation.ordinal(); i++) { - stateFace = state.get(FACE); - stateFacing = state.get(HorizontalFaceBlock.HORIZONTAL_FACING); + stateFace = state.getValue(FACE); + stateFacing = state.getValue(HorizontalFaceBlock.FACING); - boolean b = state.get(FACE) == AttachFace.CEILING; - state = state.with(HORIZONTAL_FACING, b ? forcedAxis : forcedAxis.getOpposite()); + boolean b = state.getValue(FACE) == AttachFace.CEILING; + state = state.setValue(HORIZONTAL_FACING, b ? forcedAxis : forcedAxis.getOpposite()); if (stateFace != AttachFace.WALL) { - state = state.with(FACE, AttachFace.WALL); + state = state.setValue(FACE, AttachFace.WALL); continue; } if (stateFacing.getAxisDirection() == AxisDirection.POSITIVE) { - state = state.with(FACE, AttachFace.FLOOR); + state = state.setValue(FACE, AttachFace.FLOOR); continue; } - state = state.with(FACE, AttachFace.CEILING); + state = state.setValue(FACE, AttachFace.CEILING); } return state; @@ -179,51 +179,51 @@ public class StructureTransform { return state; } - if (state.contains(FACING)) { - Direction newFacing = transformFacing(state.get(FACING)); - if (state.contains(DirectionalAxisKineticBlock.AXIS_ALONG_FIRST_COORDINATE)) { + if (state.hasProperty(FACING)) { + Direction newFacing = transformFacing(state.getValue(FACING)); + if (state.hasProperty(DirectionalAxisKineticBlock.AXIS_ALONG_FIRST_COORDINATE)) { if (rotationAxis == newFacing.getAxis() && rotation.ordinal() % 2 == 1) state = state.cycle(DirectionalAxisKineticBlock.AXIS_ALONG_FIRST_COORDINATE); } - state = state.with(FACING, newFacing); + state = state.setValue(FACING, newFacing); - } else if (state.contains(AXIS)) { - state = state.with(AXIS, transformAxis(state.get(AXIS))); + } else if (state.hasProperty(AXIS)) { + state = state.setValue(AXIS, transformAxis(state.getValue(AXIS))); } else if (halfTurn) { - if (state.contains(FACING)) { - Direction stateFacing = state.get(FACING); + if (state.hasProperty(FACING)) { + Direction stateFacing = state.getValue(FACING); if (stateFacing.getAxis() == rotationAxis) return state; } - if (state.contains(HORIZONTAL_FACING)) { - Direction stateFacing = state.get(HORIZONTAL_FACING); + if (state.hasProperty(HORIZONTAL_FACING)) { + Direction stateFacing = state.getValue(HORIZONTAL_FACING); if (stateFacing.getAxis() == rotationAxis) return state; } state = state.rotate(rotation); - if (state.contains(SlabBlock.TYPE) && state.get(SlabBlock.TYPE) != SlabType.DOUBLE) - state = state.with(SlabBlock.TYPE, - state.get(SlabBlock.TYPE) == SlabType.BOTTOM ? SlabType.TOP : SlabType.BOTTOM); + if (state.hasProperty(SlabBlock.TYPE) && state.getValue(SlabBlock.TYPE) != SlabType.DOUBLE) + state = state.setValue(SlabBlock.TYPE, + state.getValue(SlabBlock.TYPE) == SlabType.BOTTOM ? SlabType.TOP : SlabType.BOTTOM); } return state; } protected BlockState transformStairs(BlockState state, boolean halfTurn) { - if (state.get(StairsBlock.FACING) + if (state.getValue(StairsBlock.FACING) .getAxis() != rotationAxis) { for (int i = 0; i < rotation.ordinal(); i++) { - Direction direction = state.get(StairsBlock.FACING); - Half half = state.get(StairsBlock.HALF); + Direction direction = state.getValue(StairsBlock.FACING); + Half half = state.getValue(StairsBlock.HALF); if (direction.getAxisDirection() == AxisDirection.POSITIVE ^ half == Half.BOTTOM ^ direction.getAxis() == Axis.Z) state = state.cycle(StairsBlock.HALF); else - state = state.with(StairsBlock.FACING, direction.getOpposite()); + state = state.setValue(StairsBlock.FACING, direction.getOpposite()); } } else { if (halfTurn) { @@ -234,14 +234,14 @@ public class StructureTransform { } protected BlockState transformBelt(BlockState state, boolean halfTurn) { - Direction initialDirection = state.get(BeltBlock.HORIZONTAL_FACING); + Direction initialDirection = state.getValue(BeltBlock.HORIZONTAL_FACING); boolean diagonal = - state.get(BeltBlock.SLOPE) == BeltSlope.DOWNWARD || state.get(BeltBlock.SLOPE) == BeltSlope.UPWARD; + state.getValue(BeltBlock.SLOPE) == BeltSlope.DOWNWARD || state.getValue(BeltBlock.SLOPE) == BeltSlope.UPWARD; if (!diagonal) { for (int i = 0; i < rotation.ordinal(); i++) { - Direction direction = state.get(BeltBlock.HORIZONTAL_FACING); - BeltSlope slope = state.get(BeltBlock.SLOPE); + Direction direction = state.getValue(BeltBlock.HORIZONTAL_FACING); + BeltSlope slope = state.getValue(BeltBlock.SLOPE); boolean vertical = slope == BeltSlope.VERTICAL; boolean horizontal = slope == BeltSlope.HORIZONTAL; boolean sideways = slope == BeltSlope.SIDEWAYS; @@ -251,7 +251,7 @@ public class StructureTransform { if (vertical) { if (direction.getAxis() == rotationAxis) { - newDirection = direction.rotateYCCW(); + newDirection = direction.getCounterClockWise(); newSlope = BeltSlope.SIDEWAYS; } else { newSlope = BeltSlope.HORIZONTAL; @@ -266,7 +266,7 @@ public class StructureTransform { if (direction.getAxis() == rotationAxis) newSlope = BeltSlope.HORIZONTAL; else - newDirection = direction.rotateYCCW(); + newDirection = direction.getCounterClockWise(); } if (horizontal) { @@ -277,44 +277,44 @@ public class StructureTransform { newDirection = direction.getOpposite(); } - state = state.with(BeltBlock.HORIZONTAL_FACING, newDirection); - state = state.with(BeltBlock.SLOPE, newSlope); + state = state.setValue(BeltBlock.HORIZONTAL_FACING, newDirection); + state = state.setValue(BeltBlock.SLOPE, newSlope); } } else if (initialDirection.getAxis() != rotationAxis) { for (int i = 0; i < rotation.ordinal(); i++) { - Direction direction = state.get(BeltBlock.HORIZONTAL_FACING); + Direction direction = state.getValue(BeltBlock.HORIZONTAL_FACING); Direction newDirection = direction.getOpposite(); - BeltSlope slope = state.get(BeltBlock.SLOPE); + BeltSlope slope = state.getValue(BeltBlock.SLOPE); boolean upward = slope == BeltSlope.UPWARD; boolean downward = slope == BeltSlope.DOWNWARD; // Rotate diagonal if (direction.getAxisDirection() == AxisDirection.POSITIVE ^ downward ^ direction.getAxis() == Axis.Z) { - state = state.with(BeltBlock.SLOPE, upward ? BeltSlope.DOWNWARD : BeltSlope.UPWARD); + state = state.setValue(BeltBlock.SLOPE, upward ? BeltSlope.DOWNWARD : BeltSlope.UPWARD); } else { - state = state.with(BeltBlock.HORIZONTAL_FACING, newDirection); + state = state.setValue(BeltBlock.HORIZONTAL_FACING, newDirection); } } } else if (halfTurn) { - Direction direction = state.get(BeltBlock.HORIZONTAL_FACING); + Direction direction = state.getValue(BeltBlock.HORIZONTAL_FACING); Direction newDirection = direction.getOpposite(); - BeltSlope slope = state.get(BeltBlock.SLOPE); + BeltSlope slope = state.getValue(BeltBlock.SLOPE); boolean vertical = slope == BeltSlope.VERTICAL; if (diagonal) { - state = state.with(BeltBlock.SLOPE, slope == BeltSlope.UPWARD ? BeltSlope.DOWNWARD + state = state.setValue(BeltBlock.SLOPE, slope == BeltSlope.UPWARD ? BeltSlope.DOWNWARD : slope == BeltSlope.DOWNWARD ? BeltSlope.UPWARD : slope); } else if (vertical) { - state = state.with(BeltBlock.HORIZONTAL_FACING, newDirection); + state = state.setValue(BeltBlock.HORIZONTAL_FACING, newDirection); } } return state; } public Axis transformAxis(Axis axisIn) { - Direction facing = Direction.getFacingFromAxis(AxisDirection.POSITIVE, axisIn); + Direction facing = Direction.get(AxisDirection.POSITIVE, axisIn); facing = transformFacing(facing); Axis axis = facing.getAxis(); return axis; @@ -332,23 +332,23 @@ public class StructureTransform { if (rotation == Rotation.NONE) return state; - BlockState rotated = state.with(AXIS, transformAxis(state.get(AXIS))); + BlockState rotated = state.setValue(AXIS, transformAxis(state.getValue(AXIS))); AbstractChassisBlock block = (AbstractChassisBlock) state.getBlock(); for (Direction face : Iterate.directions) { BooleanProperty glueableSide = block.getGlueableSide(rotated, face); if (glueableSide != null) - rotated = rotated.with(glueableSide, false); + rotated = rotated.setValue(glueableSide, false); } for (Direction face : Iterate.directions) { BooleanProperty glueableSide = block.getGlueableSide(state, face); - if (glueableSide == null || !state.get(glueableSide)) + if (glueableSide == null || !state.getValue(glueableSide)) continue; Direction rotatedFacing = transformFacing(face); BooleanProperty rotatedGlueableSide = block.getGlueableSide(rotated, rotatedFacing); if (rotatedGlueableSide != null) - rotated = rotated.with(rotatedGlueableSide, true); + rotated = rotated.setValue(rotatedGlueableSide, true); } return rotated; diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/TranslatingContraption.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/TranslatingContraption.java index a692a112a..a28788f0e 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/TranslatingContraption.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/TranslatingContraption.java @@ -22,7 +22,7 @@ public abstract class TranslatingContraption extends Contraption { cachedColliderDirection = movementDirection; for (BlockInfo info : getBlocks().values()) { - BlockPos offsetPos = info.pos.offset(movementDirection); + BlockPos offsetPos = info.pos.relative(movementDirection); if (info.state.getCollisionShape(world, offsetPos) .isEmpty()) continue; diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/BearingBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/BearingBlock.java index 66e55acbe..bfd702852 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/BearingBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/BearingBlock.java @@ -11,6 +11,8 @@ import net.minecraft.util.Direction.Axis; import net.minecraft.util.math.BlockPos; import net.minecraft.world.IWorldReader; +import net.minecraft.block.AbstractBlock.Properties; + public abstract class BearingBlock extends DirectionalKineticBlock { public BearingBlock(Properties properties) { @@ -19,12 +21,12 @@ public abstract class BearingBlock extends DirectionalKineticBlock { @Override public boolean hasShaftTowards(IWorldReader world, BlockPos pos, BlockState state, Direction face) { - return face == state.get(FACING).getOpposite(); + return face == state.getValue(FACING).getOpposite(); } @Override public Axis getRotationAxis(BlockState state) { - return state.get(FACING).getAxis(); + return state.getValue(FACING).getAxis(); } @Override @@ -35,8 +37,8 @@ public abstract class BearingBlock extends DirectionalKineticBlock { @Override public ActionResultType onWrenched(BlockState state, ItemUseContext context) { ActionResultType resultType = super.onWrenched(state, context); - if (!context.getWorld().isRemote && resultType.isAccepted()) { - TileEntity te = context.getWorld().getTileEntity(context.getPos()); + if (!context.getLevel().isClientSide && resultType.consumesAction()) { + TileEntity te = context.getLevel().getBlockEntity(context.getClickedPos()); if (te instanceof MechanicalBearingTileEntity) { ((MechanicalBearingTileEntity) te).disassemble(); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/BearingContraption.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/BearingContraption.java index 8e1e60aa6..871ce7a0f 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/BearingContraption.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/BearingContraption.java @@ -34,7 +34,7 @@ public class BearingContraption extends Contraption { @Override public boolean assemble(World world, BlockPos pos) throws AssemblyException { - BlockPos offset = pos.offset(facing); + BlockPos offset = pos.relative(facing); if (!searchMovedStructure(world, offset, null)) return false; startMoving(world); @@ -53,7 +53,7 @@ public class BearingContraption extends Contraption { @Override protected boolean isAnchoringBlockAt(BlockPos pos) { - return pos.equals(anchor.offset(facing.getOpposite())); + return pos.equals(anchor.relative(facing.getOpposite())); } @Override @@ -68,14 +68,14 @@ public class BearingContraption extends Contraption { public CompoundNBT writeNBT(boolean spawnPacket) { CompoundNBT tag = super.writeNBT(spawnPacket); tag.putInt("Sails", sailBlocks); - tag.putInt("Facing", facing.getIndex()); + tag.putInt("Facing", facing.get3DDataValue()); return tag; } @Override public void readNBT(World world, CompoundNBT tag, boolean spawnData) { sailBlocks = tag.getInt("Sails"); - facing = Direction.byIndex(tag.getInt("Facing")); + facing = Direction.from3DDataValue(tag.getInt("Facing")); super.readNBT(world, tag, spawnData); } 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 52febb972..67f2cb537 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 @@ -27,8 +27,8 @@ public class BearingInstance e super(modelManager, tile); this.bearing = tile; - Direction facing = blockState.get(BlockStateProperties.FACING); - rotationAxis = Direction.getFacingFromAxis(Direction.AxisDirection.POSITIVE, axis).getUnitVector(); + Direction facing = blockState.getValue(BlockStateProperties.FACING); + rotationAxis = Direction.get(Direction.AxisDirection.POSITIVE, axis).step(); blockOrientation = getBlockStateOrientation(facing); @@ -44,9 +44,9 @@ public class BearingInstance e public void beginFrame() { float interpolatedAngle = bearing.getInterpolatedAngle(AnimationTickHolder.getPartialTicks() - 1); - Quaternion rot = rotationAxis.getDegreesQuaternion(interpolatedAngle); + Quaternion rot = rotationAxis.rotationDegrees(interpolatedAngle); - rot.multiply(blockOrientation); + rot.mul(blockOrientation); topInstance.setRotation(rot); } @@ -67,12 +67,12 @@ public class BearingInstance e Quaternion orientation; if (facing.getAxis().isHorizontal()) { - orientation = Vector3f.POSITIVE_Y.getDegreesQuaternion(AngleHelper.horizontalAngle(facing.getOpposite())); + orientation = Vector3f.YP.rotationDegrees(AngleHelper.horizontalAngle(facing.getOpposite())); } else { - orientation = Quaternion.IDENTITY.copy(); + orientation = Quaternion.ONE.copy(); } - orientation.multiply(Vector3f.POSITIVE_X.getDegreesQuaternion(-90 - AngleHelper.verticalAngle(facing))); + orientation.mul(Vector3f.XP.rotationDegrees(-90 - AngleHelper.verticalAngle(facing))); return orientation; } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/BearingRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/BearingRenderer.java index 0d23f7523..e8521f53b 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/BearingRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/BearingRenderer.java @@ -26,13 +26,13 @@ public class BearingRenderer extends KineticTileEntityRenderer { protected void renderSafe(KineticTileEntity te, float partialTicks, MatrixStack ms, IRenderTypeBuffer buffer, int light, int overlay) { - if (Backend.getInstance().canUseInstancing(te.getWorld())) return; + if (Backend.getInstance().canUseInstancing(te.getLevel())) return; super.renderSafe(te, partialTicks, ms, buffer, light, overlay); IBearingTileEntity bearingTe = (IBearingTileEntity) te; final Direction facing = te.getBlockState() - .get(BlockStateProperties.FACING); + .getValue(BlockStateProperties.FACING); PartialModel top = bearingTe.isWoodenTop() ? AllBlockPartials.BEARING_TOP_WOODEN : AllBlockPartials.BEARING_TOP; SuperByteBuffer superBuffer = PartialBufferer.get(top, te.getBlockState()); @@ -45,13 +45,13 @@ public class BearingRenderer extends KineticTileEntityRenderer { superBuffer.rotateCentered(Direction.UP, AngleHelper.rad(AngleHelper.horizontalAngle(facing.getOpposite()))); superBuffer.rotateCentered(Direction.EAST, AngleHelper.rad(-90 - AngleHelper.verticalAngle(facing))); - superBuffer.renderInto(ms, buffer.getBuffer(RenderType.getSolid())); + superBuffer.renderInto(ms, buffer.getBuffer(RenderType.solid())); } @Override protected SuperByteBuffer getRotatedModel(KineticTileEntity te) { return PartialBufferer.getFacing(AllBlockPartials.SHAFT_HALF, te.getBlockState(), te.getBlockState() - .get(BearingBlock.FACING) + .getValue(BearingBlock.FACING) .getOpposite()); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/ClockworkBearingBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/ClockworkBearingBlock.java index 125950656..eb84c4af1 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/ClockworkBearingBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/ClockworkBearingBlock.java @@ -14,6 +14,8 @@ import net.minecraft.util.math.BlockRayTraceResult; import net.minecraft.world.IBlockReader; import net.minecraft.world.World; +import net.minecraft.block.AbstractBlock.Properties; + public class ClockworkBearingBlock extends BearingBlock implements ITE { public ClockworkBearingBlock(Properties properties) { @@ -26,14 +28,14 @@ public class ClockworkBearingBlock extends BearingBlock implements ITE { if (te.running) { te.disassemble(); @@ -55,8 +57,8 @@ public class ClockworkBearingBlock extends BearingBlock implements ITE contraption; try { - contraption = ClockworkContraption.assembleClockworkAt(world, pos, direction); + contraption = ClockworkContraption.assembleClockworkAt(level, worldPosition, direction); lastException = null; } catch (AssemblyException e) { lastException = e; @@ -230,25 +230,25 @@ public class ClockworkBearingTileEntity extends KineticTileEntity .getBlocks() .isEmpty()) return; - BlockPos anchor = pos.offset(direction); + BlockPos anchor = worldPosition.relative(direction); contraption.getLeft() - .removeBlocksFromWorld(world, BlockPos.ZERO); - hourHand = ControlledContraptionEntity.create(world, this, contraption.getLeft()); - hourHand.setPosition(anchor.getX(), anchor.getY(), anchor.getZ()); + .removeBlocksFromWorld(level, BlockPos.ZERO); + hourHand = ControlledContraptionEntity.create(level, this, contraption.getLeft()); + hourHand.setPos(anchor.getX(), anchor.getY(), anchor.getZ()); hourHand.setRotationAxis(direction.getAxis()); - world.addEntity(hourHand); + level.addFreshEntity(hourHand); - AllTriggers.triggerForNearbyPlayers(AllTriggers.CLOCKWORK_BEARING, world, pos, 5); + AllTriggers.triggerForNearbyPlayers(AllTriggers.CLOCKWORK_BEARING, level, worldPosition, 5); if (contraption.getRight() != null) { - anchor = pos.offset(direction, contraption.getRight().offset + 1); + anchor = worldPosition.relative(direction, contraption.getRight().offset + 1); contraption.getRight() - .removeBlocksFromWorld(world, BlockPos.ZERO); - minuteHand = ControlledContraptionEntity.create(world, this, contraption.getRight()); - minuteHand.setPosition(anchor.getX(), anchor.getY(), anchor.getZ()); + .removeBlocksFromWorld(level, BlockPos.ZERO); + minuteHand = ControlledContraptionEntity.create(level, this, contraption.getRight()); + minuteHand.setPos(anchor.getX(), anchor.getY(), anchor.getZ()); minuteHand.setRotationAxis(direction.getAxis()); - world.addEntity(minuteHand); + level.addFreshEntity(minuteHand); } // Run @@ -284,17 +284,17 @@ public class ClockworkBearingTileEntity extends KineticTileEntity return; ClockworkContraption cc = (ClockworkContraption) contraption.getContraption(); - markDirty(); - Direction facing = getBlockState().get(BlockStateProperties.FACING); - BlockPos anchor = pos.offset(facing, cc.offset + 1); + setChanged(); + Direction facing = getBlockState().getValue(BlockStateProperties.FACING); + BlockPos anchor = worldPosition.relative(facing, cc.offset + 1); if (cc.handType == HandType.HOUR) { this.hourHand = contraption; - hourHand.setPosition(anchor.getX(), anchor.getY(), anchor.getZ()); + hourHand.setPos(anchor.getX(), anchor.getY(), anchor.getZ()); } else { this.minuteHand = contraption; - minuteHand.setPosition(anchor.getX(), anchor.getY(), anchor.getZ()); + minuteHand.setPos(anchor.getX(), anchor.getY(), anchor.getZ()); } - if (!world.isRemote) { + if (!level.isClientSide) { this.running = true; sendData(); } @@ -356,15 +356,15 @@ public class ClockworkBearingTileEntity extends KineticTileEntity @Override public void onStall() { - if (!world.isRemote) + if (!level.isClientSide) sendData(); } @Override - public void remove() { - if (!world.isRemote) + public void setRemoved() { + if (!level.isClientSide) disassemble(); - super.remove(); + super.setRemoved(); } @Override @@ -415,7 +415,7 @@ public class ClockworkBearingTileEntity extends KineticTileEntity @Override public BlockPos getBlockPosition() { - return pos; + return worldPosition; } @Override diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/ClockworkContraption.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/ClockworkContraption.java index 949228ba9..7c0af2c70 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/ClockworkContraption.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/ClockworkContraption.java @@ -31,12 +31,12 @@ public class ClockworkContraption extends Contraption { private void ignoreBlocks(Set blocks, BlockPos anchor) { for (BlockPos blockPos : blocks) - ignoreBlocks.add(anchor.add(blockPos)); + ignoreBlocks.add(anchor.offset(blockPos)); } @Override protected boolean isAnchoringBlockAt(BlockPos pos) { - return pos.equals(anchor.offset(facing.getOpposite(), offset + 1)); + return pos.equals(anchor.relative(facing.getOpposite(), offset + 1)); } public static Pair assembleClockworkAt(World world, BlockPos pos, @@ -51,7 +51,7 @@ public class ClockworkContraption extends Contraption { if (!hourArm.assemble(world, pos)) return null; for (int i = 0; i < 16; i++) { - BlockPos offsetPos = BlockPos.ZERO.offset(direction, i); + BlockPos offsetPos = BlockPos.ZERO.relative(direction, i); if (hourArm.getBlocks() .containsKey(offsetPos)) continue; @@ -89,7 +89,7 @@ public class ClockworkContraption extends Contraption { @Override public boolean searchMovedStructure(World world, BlockPos pos, Direction direction) throws AssemblyException { - return super.searchMovedStructure(world, pos.offset(direction, offset + 1), null); + return super.searchMovedStructure(world, pos.relative(direction, offset + 1), null); } @Override @@ -105,7 +105,7 @@ public class ClockworkContraption extends Contraption { @Override public CompoundNBT writeNBT(boolean spawnPacket) { CompoundNBT tag = super.writeNBT(spawnPacket); - tag.putInt("facing", facing.getIndex()); + tag.putInt("facing", facing.get3DDataValue()); tag.putInt("offset", offset); NBTHelper.writeEnum(tag, "HandType", handType); return tag; @@ -113,7 +113,7 @@ public class ClockworkContraption extends Contraption { @Override public void readNBT(World world, CompoundNBT tag, boolean spawnData) { - facing = Direction.byIndex(tag.getInt("facing")); + facing = Direction.from3DDataValue(tag.getInt("facing")); handType = NBTHelper.readEnum(tag, "HandType", HandType.class); offset = tag.getInt("offset"); super.readNBT(world, tag, spawnData); @@ -121,7 +121,7 @@ public class ClockworkContraption extends Contraption { @Override public boolean canBeStabilized(Direction facing, BlockPos localPos) { - if (BlockPos.ZERO.equals(localPos) || BlockPos.ZERO.equals(localPos.offset(facing))) + if (BlockPos.ZERO.equals(localPos) || BlockPos.ZERO.equals(localPos.relative(facing))) return false; return facing.getAxis() == this.facing.getAxis(); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/IBearingTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/IBearingTileEntity.java index e729feae4..af8a52b22 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/IBearingTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/IBearingTileEntity.java @@ -15,7 +15,7 @@ public interface IBearingTileEntity extends IControlContraption { default ValueBoxTransform getMovementModeSlot() { return new DirectionalExtenderScrollOptionSlot((state, d) -> { Axis axis = d.getAxis(); - Axis bearingAxis = state.get(BearingBlock.FACING) + Axis bearingAxis = state.getValue(BearingBlock.FACING) .getAxis(); return bearingAxis != axis; }); diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/MechanicalBearingBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/MechanicalBearingBlock.java index 9bf59c537..6114db22d 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/MechanicalBearingBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/MechanicalBearingBlock.java @@ -13,6 +13,8 @@ import net.minecraft.util.math.BlockRayTraceResult; import net.minecraft.world.IBlockReader; import net.minecraft.world.World; +import net.minecraft.block.AbstractBlock.Properties; + public class MechanicalBearingBlock extends BearingBlock implements ITE { public MechanicalBearingBlock(Properties properties) { @@ -25,15 +27,15 @@ public class MechanicalBearingBlock extends BearingBlock implements ITE { if (te.running) { diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/MechanicalBearingTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/MechanicalBearingTileEntity.java index ef692c0a3..7c90fcc94 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/MechanicalBearingTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/MechanicalBearingTileEntity.java @@ -27,6 +27,8 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.MathHelper; import net.minecraft.util.text.ITextComponent; +import com.simibubi.create.content.contraptions.components.structureMovement.IControlContraption.RotationMode; + public class MechanicalBearingTileEntity extends GeneratingKineticTileEntity implements IBearingTileEntity, IDisplayAssemblyExceptions { @@ -60,10 +62,10 @@ public class MechanicalBearingTileEntity extends GeneratingKineticTileEntity } @Override - public void remove() { - if (!world.isRemote) + public void setRemoved() { + if (!level.isClientSide) disassemble(); - super.remove(); + super.setRemoved(); } @Override @@ -111,7 +113,7 @@ public class MechanicalBearingTileEntity extends GeneratingKineticTileEntity if (movedContraption != null && Math.signum(prevSpeed) != Math.signum(getSpeed()) && prevSpeed != 0) { movedContraption.getContraption() - .stop(world); + .stop(level); } } @@ -119,7 +121,7 @@ public class MechanicalBearingTileEntity extends GeneratingKineticTileEntity float speed = convertToAngular(isWindmill() ? getGeneratedSpeed() : getSpeed()); if (getSpeed() == 0) speed = 0; - if (world.isRemote) { + if (level.isClientSide) { speed *= ServerSpeedProvider.get(); speed += clientAngleDiff / 3f; } @@ -137,18 +139,18 @@ public class MechanicalBearingTileEntity extends GeneratingKineticTileEntity @Override public BlockPos getBlockPosition() { - return pos; + return worldPosition; } public void assemble() { - if (!(world.getBlockState(pos) + if (!(level.getBlockState(worldPosition) .getBlock() instanceof BearingBlock)) return; - Direction direction = getBlockState().get(FACING); + Direction direction = getBlockState().getValue(FACING); BearingContraption contraption = new BearingContraption(isWindmill(), direction); try { - if (!contraption.assemble(world, pos)) + if (!contraption.assemble(level, worldPosition)) return; lastException = null; @@ -159,18 +161,18 @@ public class MechanicalBearingTileEntity extends GeneratingKineticTileEntity } if (isWindmill()) - AllTriggers.triggerForNearbyPlayers(AllTriggers.WINDMILL, world, pos, 5); + AllTriggers.triggerForNearbyPlayers(AllTriggers.WINDMILL, level, worldPosition, 5); if (contraption.getSailBlocks() >= 16 * 8) - AllTriggers.triggerForNearbyPlayers(AllTriggers.MAXED_WINDMILL, world, pos, 5); + AllTriggers.triggerForNearbyPlayers(AllTriggers.MAXED_WINDMILL, level, worldPosition, 5); - contraption.removeBlocksFromWorld(world, BlockPos.ZERO); - movedContraption = ControlledContraptionEntity.create(world, this, contraption); - BlockPos anchor = pos.offset(direction); - movedContraption.setPosition(anchor.getX(), anchor.getY(), anchor.getZ()); + contraption.removeBlocksFromWorld(level, BlockPos.ZERO); + movedContraption = ControlledContraptionEntity.create(level, this, contraption); + BlockPos anchor = worldPosition.relative(direction); + movedContraption.setPos(anchor.getX(), anchor.getY(), anchor.getZ()); movedContraption.setRotationAxis(direction.getAxis()); - world.addEntity(movedContraption); + level.addFreshEntity(movedContraption); - AllSoundEvents.CONTRAPTION_ASSEMBLE.playOnServer(world, pos); + AllSoundEvents.CONTRAPTION_ASSEMBLE.playOnServer(level, worldPosition); running = true; angle = 0; @@ -186,7 +188,7 @@ public class MechanicalBearingTileEntity extends GeneratingKineticTileEntity applyRotation(); if (movedContraption != null) { movedContraption.disassemble(); - AllSoundEvents.CONTRAPTION_DISASSEMBLE.playOnServer(world, pos); + AllSoundEvents.CONTRAPTION_DISASSEMBLE.playOnServer(level, worldPosition); } movedContraption = null; @@ -201,10 +203,10 @@ public class MechanicalBearingTileEntity extends GeneratingKineticTileEntity super.tick(); prevAngle = angle; - if (world.isRemote) + if (level.isClientSide) clientAngleDiff /= 2; - if (!world.isRemote && assembleNextTick) { + if (!level.isClientSide && assembleNextTick) { assembleNextTick = false; if (running) { boolean canDisassemble = movementMode.get() == RotationMode.ROTATE_PLACE @@ -214,7 +216,7 @@ public class MechanicalBearingTileEntity extends GeneratingKineticTileEntity .isEmpty())) { if (movedContraption != null) movedContraption.getContraption() - .stop(world); + .stop(level); disassemble(); return; } @@ -244,7 +246,7 @@ public class MechanicalBearingTileEntity extends GeneratingKineticTileEntity @Override public void lazyTick() { super.lazyTick(); - if (movedContraption != null && !world.isRemote) + if (movedContraption != null && !level.isClientSide) sendData(); } @@ -253,8 +255,8 @@ public class MechanicalBearingTileEntity extends GeneratingKineticTileEntity return; movedContraption.setAngle(angle); BlockState blockState = getBlockState(); - if (blockState.contains(BlockStateProperties.FACING)) - movedContraption.setRotationAxis(blockState.get(BlockStateProperties.FACING) + if (blockState.hasProperty(BlockStateProperties.FACING)) + movedContraption.setRotationAxis(blockState.getValue(BlockStateProperties.FACING) .getAxis()); } @@ -263,14 +265,14 @@ public class MechanicalBearingTileEntity extends GeneratingKineticTileEntity BlockState blockState = getBlockState(); if (!(contraption.getContraption() instanceof BearingContraption)) return; - if (!blockState.contains(FACING)) + if (!blockState.hasProperty(FACING)) return; this.movedContraption = contraption; - markDirty(); - BlockPos anchor = pos.offset(blockState.get(FACING)); - movedContraption.setPosition(anchor.getX(), anchor.getY(), anchor.getZ()); - if (!world.isRemote) { + setChanged(); + BlockPos anchor = worldPosition.relative(blockState.getValue(FACING)); + movedContraption.setPos(anchor.getX(), anchor.getY(), anchor.getZ()); + if (!level.isClientSide) { this.running = true; sendData(); } @@ -278,7 +280,7 @@ public class MechanicalBearingTileEntity extends GeneratingKineticTileEntity @Override public void onStall() { - if (!world.isRemote) + if (!level.isClientSide) sendData(); } @@ -313,7 +315,7 @@ public class MechanicalBearingTileEntity extends GeneratingKineticTileEntity if (!(state.getBlock() instanceof BearingBlock)) return false; - BlockState attachedState = world.getBlockState(pos.offset(state.get(BearingBlock.FACING))); + BlockState attachedState = level.getBlockState(worldPosition.relative(state.getValue(BearingBlock.FACING))); if (attachedState.getMaterial() .isReplaceable()) return false; diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/SailBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/SailBlock.java index b4cfaea85..bdee280ce 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/SailBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/SailBlock.java @@ -41,6 +41,8 @@ import net.minecraft.util.math.vector.Vector3d; import net.minecraft.world.IBlockReader; import net.minecraft.world.World; +import net.minecraft.block.AbstractBlock.Properties; + public class SailBlock extends ProperDirectionalBlock { public static SailBlock frame(Properties properties) { @@ -63,19 +65,19 @@ public class SailBlock extends ProperDirectionalBlock { @Override public BlockState getStateForPlacement(BlockItemUseContext context) { BlockState state = super.getStateForPlacement(context); - return state.with(FACING, state.get(FACING).getOpposite()); + return state.setValue(FACING, state.getValue(FACING).getOpposite()); } @Override - public ActionResultType onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockRayTraceResult ray) { - ItemStack heldItem = player.getHeldItem(hand); + public ActionResultType use(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockRayTraceResult ray) { + ItemStack heldItem = player.getItemInHand(hand); IPlacementHelper placementHelper = PlacementHelpers.get(placementHelperId); if (placementHelper.matchesItem(heldItem)) return placementHelper.getOffset(player, world, state, pos, ray).placeInWorld(world, (BlockItem) heldItem.getItem(), player, hand, ray); if (heldItem.getItem() instanceof ShearsItem) { - if (!world.isRemote) + if (!world.isClientSide) applyDye(state, world, pos, null); return ActionResultType.SUCCESS; } @@ -85,9 +87,9 @@ public class SailBlock extends ProperDirectionalBlock { for (DyeColor color : DyeColor.values()) { if (!heldItem.getItem() - .isIn(DyeHelper.getTagOfDye(color))) + .is(DyeHelper.getTagOfDye(color))) continue; - if (!world.isRemote) + if (!world.isClientSide) applyDye(state, world, pos, color); return ActionResultType.SUCCESS; } @@ -98,27 +100,27 @@ public class SailBlock extends ProperDirectionalBlock { protected void applyDye(BlockState state, World world, BlockPos pos, @Nullable DyeColor color) { BlockState newState = (color == null ? AllBlocks.SAIL_FRAME : AllBlocks.DYED_SAILS.get(color)).getDefaultState() - .with(FACING, state.get(FACING)); + .setValue(FACING, state.getValue(FACING)); // Dye the block itself if (state != newState) { - world.setBlockState(pos, newState); + world.setBlockAndUpdate(pos, newState); return; } // Dye all adjacent for (Direction d : Iterate.directions) { - if (d.getAxis() == state.get(FACING) + if (d.getAxis() == state.getValue(FACING) .getAxis()) continue; - BlockPos offset = pos.offset(d); + BlockPos offset = pos.relative(d); BlockState adjacentState = world.getBlockState(offset); Block block = adjacentState.getBlock(); if (!(block instanceof SailBlock) || ((SailBlock) block).frame) continue; if (state == adjacentState) continue; - world.setBlockState(offset, newState); + world.setBlockAndUpdate(offset, newState); return; } @@ -135,10 +137,10 @@ public class SailBlock extends ProperDirectionalBlock { visited.add(currentPos); for (Direction d : Iterate.directions) { - if (d.getAxis() == state.get(FACING) + if (d.getAxis() == state.getValue(FACING) .getAxis()) continue; - BlockPos offset = currentPos.offset(d); + BlockPos offset = currentPos.relative(d); if (visited.contains(offset)) continue; BlockState adjacentState = world.getBlockState(offset); @@ -146,7 +148,7 @@ public class SailBlock extends ProperDirectionalBlock { if (!(block instanceof SailBlock) || ((SailBlock) block).frame && color != null) continue; if (state != adjacentState) - world.setBlockState(offset, newState); + world.setBlockAndUpdate(offset, newState); frontier.add(offset); visited.add(offset); } @@ -155,13 +157,13 @@ public class SailBlock extends ProperDirectionalBlock { @Override public VoxelShape getShape(BlockState state, IBlockReader p_220053_2_, BlockPos p_220053_3_, ISelectionContext p_220053_4_) { - return (frame ? AllShapes.SAIL_FRAME : AllShapes.SAIL).get(state.get(FACING)); + return (frame ? AllShapes.SAIL_FRAME : AllShapes.SAIL).get(state.getValue(FACING)); } @Override public VoxelShape getCollisionShape(BlockState state, IBlockReader p_220071_2_, BlockPos p_220071_3_, ISelectionContext p_220071_4_) { if (frame) - return AllShapes.SAIL_FRAME_COLLISION.get(state.get(FACING)); + return AllShapes.SAIL_FRAME_COLLISION.get(state.getValue(FACING)); return getShape(state, p_220071_2_, p_220071_3_, p_220071_4_); } @@ -174,31 +176,31 @@ public class SailBlock extends ProperDirectionalBlock { return pickBlock; } - public void onFallenUpon(World p_180658_1_, BlockPos p_180658_2_, Entity p_180658_3_, float p_180658_4_) { + public void fallOn(World p_180658_1_, BlockPos p_180658_2_, Entity p_180658_3_, float p_180658_4_) { if (frame) - super.onFallenUpon(p_180658_1_, p_180658_2_, p_180658_3_, p_180658_4_); - super.onFallenUpon(p_180658_1_, p_180658_2_, p_180658_3_, 0); + super.fallOn(p_180658_1_, p_180658_2_, p_180658_3_, p_180658_4_); + super.fallOn(p_180658_1_, p_180658_2_, p_180658_3_, 0); } - public void onLanded(IBlockReader p_176216_1_, Entity p_176216_2_) { - if (frame || p_176216_2_.bypassesLandingEffects()) { - super.onLanded(p_176216_1_, p_176216_2_); + public void updateEntityAfterFallOn(IBlockReader p_176216_1_, Entity p_176216_2_) { + if (frame || p_176216_2_.isSuppressingBounce()) { + super.updateEntityAfterFallOn(p_176216_1_, p_176216_2_); } else { this.bounce(p_176216_2_); } } private void bounce(Entity p_226860_1_) { - Vector3d Vector3d = p_226860_1_.getMotion(); + Vector3d Vector3d = p_226860_1_.getDeltaMovement(); if (Vector3d.y < 0.0D) { double d0 = p_226860_1_ instanceof LivingEntity ? 1.0D : 0.8D; - p_226860_1_.setMotion(Vector3d.x, -Vector3d.y * (double) 0.26F * d0, Vector3d.z); + p_226860_1_.setDeltaMovement(Vector3d.x, -Vector3d.y * (double) 0.26F * d0, Vector3d.z); } } @Override - public boolean allowsMovement(BlockState state, IBlockReader reader, BlockPos pos, PathType type) { + public boolean isPathfindable(BlockState state, IBlockReader reader, BlockPos pos, PathType type) { return false; } @@ -216,12 +218,12 @@ public class SailBlock extends ProperDirectionalBlock { @Override public PlacementOffset getOffset(PlayerEntity player, World world, BlockState state, BlockPos pos, BlockRayTraceResult ray) { - List directions = IPlacementHelper.orderedByDistanceExceptAxis(pos, ray.getHitVec(), state.get(SailBlock.FACING).getAxis(), dir -> world.getBlockState(pos.offset(dir)).getMaterial().isReplaceable()); + List directions = IPlacementHelper.orderedByDistanceExceptAxis(pos, ray.getLocation(), state.getValue(SailBlock.FACING).getAxis(), dir -> world.getBlockState(pos.relative(dir)).getMaterial().isReplaceable()); if (directions.isEmpty()) return PlacementOffset.fail(); else { - return PlacementOffset.success(pos.offset(directions.get(0)), s -> s.with(FACING, state.get(FACING))); + return PlacementOffset.success(pos.relative(directions.get(0)), s -> s.setValue(FACING, state.getValue(FACING))); } } } 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 9f7080e50..13c7b8836 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 @@ -27,8 +27,8 @@ public class StabilizedBearingInstance extends ActorInstance { BlockState blockState = context.state; - facing = blockState.get(BlockStateProperties.FACING); - rotationAxis = Direction.getFacingFromAxis(Direction.AxisDirection.POSITIVE, facing.getAxis()).getUnitVector(); + facing = blockState.getValue(BlockStateProperties.FACING); + rotationAxis = Direction.get(Direction.AxisDirection.POSITIVE, facing.getAxis()).step(); blockOrientation = BearingInstance.getBlockStateOrientation(facing); @@ -43,9 +43,9 @@ public class StabilizedBearingInstance extends ActorInstance { public void beginFrame() { float counterRotationAngle = StabilizedBearingMovementBehaviour.getCounterRotationAngle(context, facing, AnimationTickHolder.getPartialTicks()); - Quaternion rotation = rotationAxis.getDegreesQuaternion(counterRotationAngle); + Quaternion rotation = rotationAxis.rotationDegrees(counterRotationAngle); - rotation.multiply(blockOrientation); + rotation.mul(blockOrientation); topInstance.setRotation(rotation); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/StabilizedBearingMovementBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/StabilizedBearingMovementBehaviour.java index 3ca4d5d17..d45c48db0 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/StabilizedBearingMovementBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/StabilizedBearingMovementBehaviour.java @@ -36,7 +36,7 @@ public class StabilizedBearingMovementBehaviour extends MovementBehaviour { ContraptionMatrices matrices, IRenderTypeBuffer buffer) { if (Backend.getInstance().canUseInstancing()) return; - Direction facing = context.state.get(BlockStateProperties.FACING); + Direction facing = context.state.getValue(BlockStateProperties.FACING); PartialModel top = AllBlockPartials.BEARING_TOP; SuperByteBuffer superBuffer = PartialBufferer.get(top, context.state); float renderPartialTicks = AnimationTickHolder.getPartialTicks(); @@ -45,11 +45,11 @@ public class StabilizedBearingMovementBehaviour extends MovementBehaviour { Quaternion orientation = BearingInstance.getBlockStateOrientation(facing); // rotate against parent - float angle = getCounterRotationAngle(context, facing, renderPartialTicks) * facing.getAxisDirection().getOffset(); + float angle = getCounterRotationAngle(context, facing, renderPartialTicks) * facing.getAxisDirection().getStep(); - Quaternion rotation = facing.getUnitVector().getDegreesQuaternion(angle); + Quaternion rotation = facing.step().rotationDegrees(angle); - rotation.multiply(orientation); + rotation.mul(orientation); orientation = rotation; @@ -60,7 +60,7 @@ public class StabilizedBearingMovementBehaviour extends MovementBehaviour { superBuffer .light(matrices.entityMatrix, ContraptionRenderDispatcher.getContraptionWorldLight(context, renderWorld)) - .renderInto(matrices.entityStack, buffer.getBuffer(RenderType.getSolid())); + .renderInto(matrices.entityStack, buffer.getBuffer(RenderType.solid())); } @Override @@ -88,11 +88,11 @@ public class StabilizedBearingMovementBehaviour extends MovementBehaviour { } else if (entity instanceof OrientedContraptionEntity) { OrientedContraptionEntity orientedCE = (OrientedContraptionEntity) entity; if (axis.isVertical()) - offset = -orientedCE.getYaw(renderPartialTicks); + offset = -orientedCE.getViewYRot(renderPartialTicks); else { if (orientedCE.isInitialOrientationPresent() && orientedCE.getInitialOrientation() .getAxis() == axis) - offset = -orientedCE.getPitch(renderPartialTicks); + offset = -orientedCE.getViewXRot(renderPartialTicks); } } return offset; diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/StabilizedContraption.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/StabilizedContraption.java index 4eec742bc..e3f96872d 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/StabilizedContraption.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/StabilizedContraption.java @@ -23,7 +23,7 @@ public class StabilizedContraption extends Contraption { @Override public boolean assemble(World world, BlockPos pos) throws AssemblyException { - BlockPos offset = pos.offset(facing); + BlockPos offset = pos.relative(facing); if (!searchMovedStructure(world, offset, null)) return false; startMoving(world); @@ -45,13 +45,13 @@ public class StabilizedContraption extends Contraption { @Override public CompoundNBT writeNBT(boolean spawnPacket) { CompoundNBT tag = super.writeNBT(spawnPacket); - tag.putInt("Facing", facing.getIndex()); + tag.putInt("Facing", facing.get3DDataValue()); return tag; } @Override public void readNBT(World world, CompoundNBT tag, boolean spawnData) { - facing = Direction.byIndex(tag.getInt("Facing")); + facing = Direction.from3DDataValue(tag.getInt("Facing")); super.readNBT(world, tag, spawnData); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/WindmillBearingBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/WindmillBearingBlock.java index 0f5bb749f..f6a82f784 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/WindmillBearingBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/WindmillBearingBlock.java @@ -13,6 +13,8 @@ import net.minecraft.util.math.BlockRayTraceResult; import net.minecraft.world.IBlockReader; import net.minecraft.world.World; +import net.minecraft.block.AbstractBlock.Properties; + public class WindmillBearingBlock extends BearingBlock implements ITE { public WindmillBearingBlock(Properties properties) { @@ -25,15 +27,15 @@ public class WindmillBearingBlock extends BearingBlock implements ITE { if (te.running) { diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/WindmillBearingTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/WindmillBearingTileEntity.java index ccd717284..ff43fe15d 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/WindmillBearingTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/WindmillBearingTileEntity.java @@ -82,7 +82,7 @@ public class WindmillBearingTileEntity extends MechanicalBearingTileEntity { private void onDirectionChanged() { if (!running) return; - if (!world.isRemote) + if (!level.isClientSide) updateGeneratedRotation(); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/chassis/AbstractChassisBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/chassis/AbstractChassisBlock.java index 2156411af..4fc5cdaee 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/chassis/AbstractChassisBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/chassis/AbstractChassisBlock.java @@ -25,6 +25,8 @@ import net.minecraft.world.IBlockReader; import net.minecraft.world.World; import net.minecraftforge.common.Tags; +import net.minecraft.block.AbstractBlock.Properties; + public abstract class AbstractChassisBlock extends RotatedPillarBlock implements IWrenchable { public AbstractChassisBlock(Properties properties) { @@ -42,51 +44,51 @@ public abstract class AbstractChassisBlock extends RotatedPillarBlock implements } @Override - public ActionResultType onUse(BlockState state, World worldIn, BlockPos pos, PlayerEntity player, Hand handIn, + public ActionResultType use(BlockState state, World worldIn, BlockPos pos, PlayerEntity player, Hand handIn, BlockRayTraceResult hit) { - if (!player.isAllowEdit()) + if (!player.mayBuild()) return ActionResultType.PASS; - ItemStack heldItem = player.getHeldItem(handIn); + ItemStack heldItem = player.getItemInHand(handIn); boolean isSlimeBall = heldItem.getItem() - .isIn(Tags.Items.SLIMEBALLS) || AllItems.SUPER_GLUE.isIn(heldItem); + .is(Tags.Items.SLIMEBALLS) || AllItems.SUPER_GLUE.isIn(heldItem); - BooleanProperty affectedSide = getGlueableSide(state, hit.getFace()); + BooleanProperty affectedSide = getGlueableSide(state, hit.getDirection()); if (affectedSide == null) return ActionResultType.PASS; - if (isSlimeBall && state.get(affectedSide)) { + if (isSlimeBall && state.getValue(affectedSide)) { for (Direction face : Iterate.directions) { BooleanProperty glueableSide = getGlueableSide(state, face); - if (glueableSide != null && !state.get(glueableSide) && glueAllowedOnSide(worldIn, pos, state, face)) { - if (worldIn.isRemote) { - Vector3d vec = hit.getHitVec(); + if (glueableSide != null && !state.getValue(glueableSide) && glueAllowedOnSide(worldIn, pos, state, face)) { + if (worldIn.isClientSide) { + Vector3d vec = hit.getLocation(); worldIn.addParticle(ParticleTypes.ITEM_SLIME, vec.x, vec.y, vec.z, 0, 0, 0); return ActionResultType.SUCCESS; } AllSoundEvents.SLIME_ADDED.playOnServer(worldIn, pos, .5f, 1); - state = state.with(glueableSide, true); + state = state.setValue(glueableSide, true); } } - if (!worldIn.isRemote) - worldIn.setBlockState(pos, state); + if (!worldIn.isClientSide) + worldIn.setBlockAndUpdate(pos, state); return ActionResultType.SUCCESS; } - if ((!heldItem.isEmpty() || !player.isSneaking()) && !isSlimeBall) + if ((!heldItem.isEmpty() || !player.isShiftKeyDown()) && !isSlimeBall) return ActionResultType.PASS; - if (state.get(affectedSide) == isSlimeBall) + if (state.getValue(affectedSide) == isSlimeBall) return ActionResultType.PASS; - if (!glueAllowedOnSide(worldIn, pos, state, hit.getFace())) + if (!glueAllowedOnSide(worldIn, pos, state, hit.getDirection())) return ActionResultType.PASS; - if (worldIn.isRemote) { - Vector3d vec = hit.getHitVec(); + if (worldIn.isClientSide) { + Vector3d vec = hit.getLocation(); worldIn.addParticle(ParticleTypes.ITEM_SLIME, vec.x, vec.y, vec.z, 0, 0, 0); return ActionResultType.SUCCESS; } AllSoundEvents.SLIME_ADDED.playOnServer(worldIn, pos, .5f, 1); - worldIn.setBlockState(pos, state.with(affectedSide, isSlimeBall)); + worldIn.setBlockAndUpdate(pos, state.setValue(affectedSide, isSlimeBall)); return ActionResultType.SUCCESS; } @@ -100,17 +102,17 @@ public abstract class AbstractChassisBlock extends RotatedPillarBlock implements for (Direction face : Iterate.directions) { BooleanProperty glueableSide = getGlueableSide(rotated, face); if (glueableSide != null) - rotated = rotated.with(glueableSide, false); + rotated = rotated.setValue(glueableSide, false); } for (Direction face : Iterate.directions) { BooleanProperty glueableSide = getGlueableSide(state, face); - if (glueableSide == null || !state.get(glueableSide)) + if (glueableSide == null || !state.getValue(glueableSide)) continue; Direction rotatedFacing = rotation.rotate(face); BooleanProperty rotatedGlueableSide = getGlueableSide(rotated, rotatedFacing); if (rotatedGlueableSide != null) - rotated = rotated.with(rotatedGlueableSide, true); + rotated = rotated.setValue(rotatedGlueableSide, true); } return rotated; @@ -125,17 +127,17 @@ public abstract class AbstractChassisBlock extends RotatedPillarBlock implements for (Direction face : Iterate.directions) { BooleanProperty glueableSide = getGlueableSide(mirrored, face); if (glueableSide != null) - mirrored = mirrored.with(glueableSide, false); + mirrored = mirrored.setValue(glueableSide, false); } for (Direction face : Iterate.directions) { BooleanProperty glueableSide = getGlueableSide(state, face); - if (glueableSide == null || !state.get(glueableSide)) + if (glueableSide == null || !state.getValue(glueableSide)) continue; Direction mirroredFacing = mirrorIn.mirror(face); BooleanProperty mirroredGlueableSide = getGlueableSide(mirrored, mirroredFacing); if (mirroredGlueableSide != null) - mirrored = mirrored.with(mirroredGlueableSide, true); + mirrored = mirrored.setValue(mirroredGlueableSide, true); } return mirrored; diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/chassis/ChassisRangeDisplay.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/chassis/ChassisRangeDisplay.java index fee951e82..5477f449e 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/chassis/ChassisRangeDisplay.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/chassis/ChassisRangeDisplay.java @@ -43,7 +43,7 @@ public class ChassisRangeDisplay { } protected Object getOutlineKey() { - return Pair.of(te.getPos(), 1); + return Pair.of(te.getBlockPos(), 1); } protected Set createSelection(ChassisTileEntity chassis) { @@ -88,8 +88,8 @@ public class ChassisRangeDisplay { public static void tick() { PlayerEntity player = Minecraft.getInstance().player; - World world = Minecraft.getInstance().world; - boolean hasWrench = AllItems.WRENCH.isIn(player.getHeldItemMainhand()); + World world = Minecraft.getInstance().level; + boolean hasWrench = AllItems.WRENCH.isIn(player.getMainHandItem()); for (Iterator iterator = entries.keySet() .iterator(); iterator.hasNext();) { @@ -113,12 +113,12 @@ public class ChassisRangeDisplay { if (!hasWrench) return; - RayTraceResult over = Minecraft.getInstance().objectMouseOver; + RayTraceResult over = Minecraft.getInstance().hitResult; if (!(over instanceof BlockRayTraceResult)) return; BlockRayTraceResult ray = (BlockRayTraceResult) over; - BlockPos pos = ray.getPos(); - TileEntity tileEntity = world.getTileEntity(pos); + BlockPos pos = ray.getBlockPos(); + TileEntity tileEntity = world.getBlockEntity(pos); if (tileEntity == null || tileEntity.isRemoved()) return; if (!(tileEntity instanceof ChassisTileEntity)) @@ -131,7 +131,7 @@ public class ChassisRangeDisplay { GroupEntry existingGroupForPos = getExistingGroupForPos(pos); if (existingGroupForPos != null) { for (ChassisTileEntity included : existingGroupForPos.includedTEs) - entries.remove(included.getPos()); + entries.remove(included.getBlockPos()); existingGroupForPos.timer = DISPLAY_TIME; return; } @@ -147,11 +147,11 @@ public class ChassisRangeDisplay { private static boolean tickEntry(Entry entry, boolean hasWrench) { ChassisTileEntity chassisTileEntity = entry.te; - World teWorld = chassisTileEntity.getWorld(); - World world = Minecraft.getInstance().world; + World teWorld = chassisTileEntity.getLevel(); + World world = Minecraft.getInstance().level; if (chassisTileEntity.isRemoved() || teWorld == null || teWorld != world - || !world.isBlockPresent(chassisTileEntity.getPos())) { + || !world.isLoaded(chassisTileEntity.getBlockPos())) { return true; } @@ -173,7 +173,7 @@ public class ChassisRangeDisplay { GroupEntry hoveredGroup = new GroupEntry(chassis); for (ChassisTileEntity included : hoveredGroup.includedTEs) - CreateClient.OUTLINER.remove(included.getPos()); + CreateClient.OUTLINER.remove(included.getBlockPos()); groupEntries.forEach(entry -> CreateClient.OUTLINER.remove(entry.getOutlineKey())); groupEntries.clear(); @@ -183,7 +183,7 @@ public class ChassisRangeDisplay { } // Display an individual chassis and kill any group selections that contained it - BlockPos pos = chassis.getPos(); + BlockPos pos = chassis.getBlockPos(); GroupEntry entry = getExistingGroupForPos(pos); if (entry != null) CreateClient.OUTLINER.remove(entry.getOutlineKey()); @@ -197,7 +197,7 @@ public class ChassisRangeDisplay { private static GroupEntry getExistingGroupForPos(BlockPos pos) { for (GroupEntry groupEntry : groupEntries) for (ChassisTileEntity chassis : groupEntry.includedTEs) - if (pos.equals(chassis.getPos())) + if (pos.equals(chassis.getBlockPos())) return groupEntry; return null; } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/chassis/ChassisTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/chassis/ChassisTileEntity.java index 51e17c7fc..a5590caf6 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/chassis/ChassisTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/chassis/ChassisTileEntity.java @@ -73,20 +73,20 @@ public class ChassisTileEntity extends SmartTileEntity { } protected boolean isRadial() { - return world.getBlockState(pos).getBlock() instanceof RadialChassisBlock; + return level.getBlockState(worldPosition).getBlock() instanceof RadialChassisBlock; } public List collectChassisGroup() { Queue frontier = new LinkedList<>(); List collected = new ArrayList<>(); Set visited = new HashSet<>(); - frontier.add(pos); + frontier.add(worldPosition); while (!frontier.isEmpty()) { BlockPos current = frontier.poll(); if (visited.contains(current)) continue; visited.add(current); - TileEntity tileEntity = world.getTileEntity(current); + TileEntity tileEntity = level.getBlockEntity(current); if (tileEntity instanceof ChassisTileEntity) { ChassisTileEntity chassis = (ChassisTileEntity) tileEntity; collected.add(chassis); @@ -101,20 +101,20 @@ public class ChassisTileEntity extends SmartTileEntity { BlockState state = getBlockState(); if (!(state.getBlock() instanceof AbstractChassisBlock)) return false; - Axis axis = state.get(AbstractChassisBlock.AXIS); + Axis axis = state.getValue(AbstractChassisBlock.AXIS); if (isRadial()) { // Collect chain of radial chassis for (int offset : new int[] { -1, 1 }) { - Direction direction = Direction.getFacingFromAxis(AxisDirection.POSITIVE, axis); - BlockPos currentPos = pos.offset(direction, offset); - if (!world.isBlockPresent(currentPos)) + Direction direction = Direction.get(AxisDirection.POSITIVE, axis); + BlockPos currentPos = worldPosition.relative(direction, offset); + if (!level.isLoaded(currentPos)) return false; - BlockState neighbourState = world.getBlockState(currentPos); + BlockState neighbourState = level.getBlockState(currentPos); if (!AllBlocks.RADIAL_CHASSIS.has(neighbourState)) continue; - if (axis != neighbourState.get(BlockStateProperties.AXIS)) + if (axis != neighbourState.getValue(BlockStateProperties.AXIS)) continue; if (!visited.contains(currentPos)) frontier.add(currentPos); @@ -125,18 +125,18 @@ public class ChassisTileEntity extends SmartTileEntity { // Collect group of connected linear chassis for (Direction offset : Iterate.directions) { - BlockPos current = pos.offset(offset); + BlockPos current = worldPosition.relative(offset); if (visited.contains(current)) continue; - if (!world.isBlockPresent(current)) + if (!level.isLoaded(current)) return false; - BlockState neighbourState = world.getBlockState(current); + BlockState neighbourState = level.getBlockState(current); if (!LinearChassisBlock.isChassis(neighbourState)) continue; if (!LinearChassisBlock.sameKind(state, neighbourState)) continue; - if (neighbourState.get(AXIS) != axis) + if (neighbourState.getValue(AXIS) != axis) continue; frontier.add(current); @@ -149,23 +149,23 @@ public class ChassisTileEntity extends SmartTileEntity { List positions = new ArrayList<>(); BlockState state = getBlockState(); AbstractChassisBlock block = (AbstractChassisBlock) state.getBlock(); - Axis axis = state.get(AbstractChassisBlock.AXIS); - Direction facing = Direction.getFacingFromAxis(AxisDirection.POSITIVE, axis); + Axis axis = state.getValue(AbstractChassisBlock.AXIS); + Direction facing = Direction.get(AxisDirection.POSITIVE, axis); int chassisRange = visualize ? range.scrollableValue : getRange(); for (int offset : new int[] { 1, -1 }) { if (offset == -1) facing = facing.getOpposite(); - boolean sticky = state.get(block.getGlueableSide(state, facing)); + boolean sticky = state.getValue(block.getGlueableSide(state, facing)); for (int i = 1; i <= chassisRange; i++) { - BlockPos current = pos.offset(facing, i); - BlockState currentState = world.getBlockState(current); + BlockPos current = worldPosition.relative(facing, i); + BlockState currentState = level.getBlockState(current); if (forcedMovement != facing && !sticky) break; // Ignore replaceable Blocks and Air-like - if (!BlockMovementChecks.isMovementNecessary(currentState, world, current)) + if (!BlockMovementChecks.isMovementNecessary(currentState, level, current)) break; if (BlockMovementChecks.isBrittle(currentState)) break; @@ -182,48 +182,48 @@ public class ChassisTileEntity extends SmartTileEntity { private List getIncludedBlockPositionsRadial(Direction forcedMovement, boolean visualize) { List positions = new ArrayList<>(); - BlockState state = world.getBlockState(pos); - Axis axis = state.get(AbstractChassisBlock.AXIS); + BlockState state = level.getBlockState(worldPosition); + Axis axis = state.getValue(AbstractChassisBlock.AXIS); AbstractChassisBlock block = (AbstractChassisBlock) state.getBlock(); int chassisRange = visualize ? range.scrollableValue : getRange(); for (Direction facing : Iterate.directions) { if (facing.getAxis() == axis) continue; - if (!state.get(block.getGlueableSide(state, facing))) + if (!state.getValue(block.getGlueableSide(state, facing))) continue; - BlockPos startPos = pos.offset(facing); + BlockPos startPos = worldPosition.relative(facing); List localFrontier = new LinkedList<>(); Set localVisited = new HashSet<>(); localFrontier.add(startPos); while (!localFrontier.isEmpty()) { BlockPos searchPos = localFrontier.remove(0); - BlockState searchedState = world.getBlockState(searchPos); + BlockState searchedState = level.getBlockState(searchPos); if (localVisited.contains(searchPos)) continue; - if (!searchPos.withinDistance(pos, chassisRange + .5f)) + if (!searchPos.closerThan(worldPosition, chassisRange + .5f)) continue; - if (!BlockMovementChecks.isMovementNecessary(searchedState, world, searchPos)) + if (!BlockMovementChecks.isMovementNecessary(searchedState, level, searchPos)) continue; if (BlockMovementChecks.isBrittle(searchedState)) continue; localVisited.add(searchPos); - if (!searchPos.equals(pos)) + if (!searchPos.equals(worldPosition)) positions.add(searchPos); for (Direction offset : Iterate.directions) { if (offset.getAxis() == axis) continue; - if (searchPos.equals(pos) && offset != facing) + if (searchPos.equals(worldPosition) && offset != facing) continue; if (BlockMovementChecks.isNotSupportive(searchedState, offset)) continue; - localFrontier.add(searchPos.offset(offset)); + localFrontier.add(searchPos.relative(offset)); } } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/chassis/LinearChassisBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/chassis/LinearChassisBlock.java index c10ea95da..cc648fd20 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/chassis/LinearChassisBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/chassis/LinearChassisBlock.java @@ -18,6 +18,8 @@ import net.minecraft.world.IBlockDisplayReader; import net.minecraft.world.IBlockReader; import net.minecraft.world.IWorld; +import net.minecraft.block.AbstractBlock.Properties; + public class LinearChassisBlock extends AbstractChassisBlock { public static final BooleanProperty STICKY_TOP = BooleanProperty.create("sticky_top"); @@ -25,54 +27,54 @@ public class LinearChassisBlock extends AbstractChassisBlock { public LinearChassisBlock(Properties properties) { super(properties); - setDefaultState(getDefaultState().with(STICKY_TOP, false) - .with(STICKY_BOTTOM, false)); + registerDefaultState(defaultBlockState().setValue(STICKY_TOP, false) + .setValue(STICKY_BOTTOM, false)); } @Override - protected void fillStateContainer(Builder builder) { + protected void createBlockStateDefinition(Builder builder) { builder.add(STICKY_TOP, STICKY_BOTTOM); - super.fillStateContainer(builder); + super.createBlockStateDefinition(builder); } @Override public BlockState getStateForPlacement(BlockItemUseContext context) { - BlockPos placedOnPos = context.getPos() - .offset(context.getFace() + BlockPos placedOnPos = context.getClickedPos() + .relative(context.getClickedFace() .getOpposite()); - BlockState blockState = context.getWorld() + BlockState blockState = context.getLevel() .getBlockState(placedOnPos); if (context.getPlayer() == null || !context.getPlayer() - .isSneaking()) { + .isShiftKeyDown()) { if (isChassis(blockState)) - return getDefaultState().with(AXIS, blockState.get(AXIS)); - return getDefaultState().with(AXIS, context.getNearestLookingDirection() + return defaultBlockState().setValue(AXIS, blockState.getValue(AXIS)); + return defaultBlockState().setValue(AXIS, context.getNearestLookingDirection() .getAxis()); } return super.getStateForPlacement(context); } @Override - public BlockState updatePostPlacement(BlockState state, Direction side, BlockState other, IWorld p_196271_4_, + public BlockState updateShape(BlockState state, Direction side, BlockState other, IWorld p_196271_4_, BlockPos p_196271_5_, BlockPos p_196271_6_) { BooleanProperty property = getGlueableSide(state, side); - if (property == null || !sameKind(state, other) || state.get(AXIS) != other.get(AXIS)) + if (property == null || !sameKind(state, other) || state.getValue(AXIS) != other.getValue(AXIS)) return state; - return state.with(property, false); + return state.setValue(property, false); } @Override public BooleanProperty getGlueableSide(BlockState state, Direction face) { - if (face.getAxis() != state.get(AXIS)) + if (face.getAxis() != state.getValue(AXIS)) return null; return face.getAxisDirection() == AxisDirection.POSITIVE ? STICKY_TOP : STICKY_BOTTOM; } @Override protected boolean glueAllowedOnSide(IBlockReader world, BlockPos pos, BlockState state, Direction side) { - BlockState other = world.getBlockState(pos.offset(side)); - return !sameKind(other, state) || state.get(AXIS) != other.get(AXIS); + BlockState other = world.getBlockState(pos.relative(side)); + return !sameKind(other, state) || state.getValue(AXIS) != other.getValue(AXIS); } public static boolean isChassis(BlockState state) { @@ -92,20 +94,20 @@ public class LinearChassisBlock extends AbstractChassisBlock { if (glueableSide == null) return AllBlocks.LINEAR_CHASSIS.has(state) ? AllSpriteShifts.CHASSIS_SIDE : AllSpriteShifts.SECONDARY_CHASSIS_SIDE; - return state.get(glueableSide) ? AllSpriteShifts.CHASSIS_STICKY : AllSpriteShifts.CHASSIS; + return state.getValue(glueableSide) ? AllSpriteShifts.CHASSIS_STICKY : AllSpriteShifts.CHASSIS; } @Override protected Direction getUpDirection(IBlockDisplayReader reader, BlockPos pos, BlockState state, Direction face) { - Axis axis = state.get(AXIS); + Axis axis = state.getValue(AXIS); if (face.getAxis() == axis) return super.getUpDirection(reader, pos, state, face); - return Direction.getFacingFromAxis(AxisDirection.POSITIVE, axis); + return Direction.get(AxisDirection.POSITIVE, axis); } @Override protected Direction getRightDirection(IBlockDisplayReader reader, BlockPos pos, BlockState state, Direction face) { - Axis axis = state.get(AXIS); + Axis axis = state.getValue(AXIS); return axis != face.getAxis() && axis.isHorizontal() ? (face.getAxis() .isHorizontal() ? Direction.DOWN : (axis == Axis.X ? Direction.NORTH : Direction.EAST)) : super.getRightDirection(reader, pos, state, face); @@ -113,7 +115,7 @@ public class LinearChassisBlock extends AbstractChassisBlock { @Override protected boolean reverseUVsHorizontally(BlockState state, Direction face) { - Axis axis = state.get(AXIS); + Axis axis = state.getValue(AXIS); boolean side = face.getAxis() != axis; if (side && axis == Axis.X && face.getAxis() .isHorizontal()) @@ -128,7 +130,7 @@ public class LinearChassisBlock extends AbstractChassisBlock { @Override public boolean reverseUVs(BlockState state, Direction face) { - Axis axis = state.get(AXIS); + Axis axis = state.getValue(AXIS); boolean end = face.getAxis() == axis; if (end && axis.isHorizontal() && (face.getAxisDirection() == AxisDirection.POSITIVE)) return true; @@ -140,10 +142,10 @@ public class LinearChassisBlock extends AbstractChassisBlock { @Override public boolean connectsTo(BlockState state, BlockState other, IBlockDisplayReader reader, BlockPos pos, BlockPos otherPos, Direction face) { - Axis axis = state.get(AXIS); + Axis axis = state.getValue(AXIS); boolean superConnect = face.getAxis() == axis ? super.connectsTo(state, other, reader, pos, otherPos, face) : sameKind(state, other); - return superConnect && axis == other.get(AXIS); + return superConnect && axis == other.getValue(AXIS); } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/chassis/RadialChassisBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/chassis/RadialChassisBlock.java index 852c168bb..9231de81b 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/chassis/RadialChassisBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/chassis/RadialChassisBlock.java @@ -7,6 +7,8 @@ import net.minecraft.state.StateContainer.Builder; import net.minecraft.util.Direction; import net.minecraft.util.Direction.Axis; +import net.minecraft.block.AbstractBlock.Properties; + public class RadialChassisBlock extends AbstractChassisBlock { public static final BooleanProperty STICKY_NORTH = BooleanProperty.create("sticky_north"); @@ -16,19 +18,19 @@ public class RadialChassisBlock extends AbstractChassisBlock { public RadialChassisBlock(Properties properties) { super(properties); - setDefaultState(getDefaultState().with(STICKY_EAST, false).with(STICKY_SOUTH, false).with(STICKY_NORTH, false) - .with(STICKY_WEST, false)); + registerDefaultState(defaultBlockState().setValue(STICKY_EAST, false).setValue(STICKY_SOUTH, false).setValue(STICKY_NORTH, false) + .setValue(STICKY_WEST, false)); } @Override - protected void fillStateContainer(Builder builder) { + protected void createBlockStateDefinition(Builder builder) { builder.add(STICKY_NORTH, STICKY_EAST, STICKY_SOUTH, STICKY_WEST); - super.fillStateContainer(builder); + super.createBlockStateDefinition(builder); } @Override public BooleanProperty getGlueableSide(BlockState state, Direction face) { - Axis axis = state.get(AXIS); + Axis axis = state.getValue(AXIS); if (axis == Axis.X) { if (face == Direction.NORTH) diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/chassis/StickerBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/chassis/StickerBlock.java index 277223c95..126f1722a 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/chassis/StickerBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/chassis/StickerBlock.java @@ -25,6 +25,8 @@ import net.minecraft.world.IWorldReader; import net.minecraft.world.World; import net.minecraft.world.server.ServerWorld; +import net.minecraft.block.AbstractBlock.Properties; + public class StickerBlock extends ProperDirectionalBlock implements ITE { public static final BooleanProperty POWERED = BlockStateProperties.POWERED; @@ -32,39 +34,39 @@ public class StickerBlock extends ProperDirectionalBlock implements ITE builder) { - super.fillStateContainer(builder.add(POWERED, EXTENDED)); + protected void createBlockStateDefinition(Builder builder) { + super.createBlockStateDefinition(builder.add(POWERED, EXTENDED)); } @Override public void neighborChanged(BlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos, boolean isMoving) { - if (worldIn.isRemote) + if (worldIn.isClientSide) return; - boolean previouslyPowered = state.get(POWERED); - if (previouslyPowered != worldIn.isBlockPowered(pos)) { + boolean previouslyPowered = state.getValue(POWERED); + if (previouslyPowered != worldIn.hasNeighborSignal(pos)) { state = state.cycle(POWERED); - if (state.get(POWERED)) + if (state.getValue(POWERED)) state = state.cycle(EXTENDED); - worldIn.setBlockState(pos, state, 2); + worldIn.setBlock(pos, state, 2); } } @@ -92,52 +94,52 @@ public class StickerBlock extends ProperDirectionalBlock implements ITE imple head = getTransformMaterial().getModel(AllBlockPartials.STICKER_HEAD, blockState).createInstance(); - fakeWorld = tile.getWorld() != Minecraft.getInstance().world; - facing = blockState.get(StickerBlock.FACING); - offset = blockState.get(StickerBlock.EXTENDED) ? 1 : 0; + fakeWorld = tile.getLevel() != Minecraft.getInstance().level; + facing = blockState.getValue(StickerBlock.FACING); + offset = blockState.getValue(StickerBlock.EXTENDED) ? 1 : 0; animateHead(offset); } @@ -42,7 +42,7 @@ public class StickerInstance extends TileEntityInstance imple if (fakeWorld) offset = this.offset; - if (MathHelper.epsilonEquals(offset, lastOffset)) + if (MathHelper.equal(offset, lastOffset)) return; animateHead(offset); diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/chassis/StickerRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/chassis/StickerRenderer.java index a63c27957..91ef67f06 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/chassis/StickerRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/chassis/StickerRenderer.java @@ -26,16 +26,16 @@ public class StickerRenderer extends SafeTileEntityRenderer { protected void renderSafe(StickerTileEntity te, float partialTicks, MatrixStack ms, IRenderTypeBuffer buffer, int light, int overlay) { - if (Backend.getInstance().canUseInstancing(te.getWorld())) return; + if (Backend.getInstance().canUseInstancing(te.getLevel())) return; BlockState state = te.getBlockState(); SuperByteBuffer head = PartialBufferer.get(AllBlockPartials.STICKER_HEAD, state); - float offset = te.piston.getValue(AnimationTickHolder.getPartialTicks(te.getWorld())); + float offset = te.piston.getValue(AnimationTickHolder.getPartialTicks(te.getLevel())); - if (te.getWorld() != Minecraft.getInstance().world && !te.isVirtual()) - offset = state.get(StickerBlock.EXTENDED) ? 1 : 0; + if (te.getLevel() != Minecraft.getInstance().level && !te.isVirtual()) + offset = state.getValue(StickerBlock.EXTENDED) ? 1 : 0; - Direction facing = state.get(StickerBlock.FACING); + Direction facing = state.getValue(StickerBlock.FACING); head.matrixStacker() .nudge(te.hashCode()) .centre() @@ -45,7 +45,7 @@ public class StickerRenderer extends SafeTileEntityRenderer { .translate(0, (offset * offset) * 4 / 16f, 0); head.light(light) - .renderInto(ms, buffer.getBuffer(RenderType.getSolid())); + .renderInto(ms, buffer.getBuffer(RenderType.solid())); } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/chassis/StickerTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/chassis/StickerTileEntity.java index 7282a1183..8b2a039c6 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/chassis/StickerTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/chassis/StickerTileEntity.java @@ -18,6 +18,7 @@ import net.minecraft.client.Minecraft; import net.minecraft.nbt.CompoundNBT; import net.minecraft.tileentity.TileEntityType; import net.minecraft.util.Direction; +import net.minecraft.world.World; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.fml.DistExecutor; @@ -39,26 +40,26 @@ public class StickerTileEntity extends SmartTileEntity implements IInstanceRende @Override public void initialize() { super.initialize(); - if (!world.isRemote) + if (!level.isClientSide) return; piston.startWithValue(isBlockStateExtended() ? 1 : 0); } public boolean isBlockStateExtended() { BlockState blockState = getBlockState(); - boolean extended = AllBlocks.STICKER.has(blockState) && blockState.get(StickerBlock.EXTENDED); + boolean extended = AllBlocks.STICKER.has(blockState) && blockState.getValue(StickerBlock.EXTENDED); return extended; } @Override public void tick() { super.tick(); - if (!world.isRemote) + if (!level.isClientSide) return; piston.tickChaser(); if (isAttachedToBlock() && piston.getValue(0) != piston.getValue() && piston.getValue() == 1) { - SuperGlueItem.spawnParticles(world, pos, getBlockState().get(StickerBlock.FACING), true); + SuperGlueItem.spawnParticles(level, worldPosition, getBlockState().getValue(StickerBlock.FACING), true); DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> playSound(true)); } @@ -77,8 +78,8 @@ public class StickerTileEntity extends SmartTileEntity implements IInstanceRende BlockState blockState = getBlockState(); if (!AllBlocks.STICKER.has(blockState)) return false; - Direction direction = blockState.get(StickerBlock.FACING); - return SuperGlueEntity.isValidFace(world, pos.offset(direction), direction.getOpposite()); + Direction direction = blockState.getValue(StickerBlock.FACING); + return SuperGlueEntity.isValidFace(level, worldPosition.relative(direction), direction.getOpposite()); } @Override @@ -90,7 +91,8 @@ public class StickerTileEntity extends SmartTileEntity implements IInstanceRende @OnlyIn(Dist.CLIENT) public void playSound(boolean attach) { - AllSoundEvents.SLIME_ADDED.play(world, Minecraft.getInstance().player, pos, 0.35f, attach ? 0.75f : 0.2f); + AllSoundEvents.SLIME_ADDED.play(level, Minecraft.getInstance().player, worldPosition, 0.35f, attach ? 0.75f : 0.2f); } + } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/gantry/GantryCarriageBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/gantry/GantryCarriageBlock.java index 849bfb36b..f969f3840 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/gantry/GantryCarriageBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/gantry/GantryCarriageBlock.java @@ -24,6 +24,8 @@ import net.minecraft.world.IWorld; import net.minecraft.world.IWorldReader; import net.minecraft.world.World; +import net.minecraft.block.AbstractBlock.Properties; + public class GantryCarriageBlock extends DirectionalAxisKineticBlock implements ITE { public GantryCarriageBlock(Properties properties) { @@ -31,22 +33,22 @@ public class GantryCarriageBlock extends DirectionalAxisKineticBlock implements } @Override - public boolean isValidPosition(BlockState state, IWorldReader world, BlockPos pos) { - Direction direction = state.get(FACING); - BlockState shaft = world.getBlockState(pos.offset(direction.getOpposite())); - return AllBlocks.GANTRY_SHAFT.has(shaft) && shaft.get(GantryShaftBlock.FACING) + public boolean canSurvive(BlockState state, IWorldReader world, BlockPos pos) { + Direction direction = state.getValue(FACING); + BlockState shaft = world.getBlockState(pos.relative(direction.getOpposite())); + return AllBlocks.GANTRY_SHAFT.has(shaft) && shaft.getValue(GantryShaftBlock.FACING) .getAxis() != direction.getAxis(); } @Override - public void updateDiagonalNeighbors(BlockState stateIn, IWorld worldIn, BlockPos pos, int flags, int count) { - super.updateDiagonalNeighbors(stateIn, worldIn, pos, flags, count); + public void updateIndirectNeighbourShapes(BlockState stateIn, IWorld worldIn, BlockPos pos, int flags, int count) { + super.updateIndirectNeighbourShapes(stateIn, worldIn, pos, flags, count); withTileEntityDo(worldIn, pos, GantryCarriageTileEntity::checkValidGantryShaft); } @Override - public void onBlockAdded(BlockState state, World worldIn, BlockPos pos, BlockState oldState, boolean isMoving) { - super.onBlockAdded(state, worldIn, pos, oldState, isMoving); + public void onPlace(BlockState state, World worldIn, BlockPos pos, BlockState oldState, boolean isMoving) { + super.onPlace(state, worldIn, pos, oldState, isMoving); } @Override @@ -56,14 +58,14 @@ public class GantryCarriageBlock extends DirectionalAxisKineticBlock implements @Override protected Direction getFacingForPlacement(BlockItemUseContext context) { - return context.getFace(); + return context.getClickedFace(); } - public ActionResultType onUse(BlockState state, World worldIn, BlockPos pos, PlayerEntity player, Hand handIn, + public ActionResultType use(BlockState state, World worldIn, BlockPos pos, PlayerEntity player, Hand handIn, BlockRayTraceResult hit) { - if (!player.isAllowEdit() || player.isSneaking()) + if (!player.mayBuild() || player.isShiftKeyDown()) return ActionResultType.PASS; - if (player.getHeldItem(handIn) + if (player.getItemInHand(handIn) .isEmpty()) { withTileEntityDo(worldIn, pos, te -> te.checkValidGantryShaft()); return ActionResultType.SUCCESS; @@ -74,25 +76,25 @@ public class GantryCarriageBlock extends DirectionalAxisKineticBlock implements @Override public BlockState getStateForPlacement(BlockItemUseContext context) { BlockState stateForPlacement = super.getStateForPlacement(context); - Direction opposite = stateForPlacement.get(FACING) + Direction opposite = stateForPlacement.getValue(FACING) .getOpposite(); - return cycleAxisIfNecessary(stateForPlacement, opposite, context.getWorld() - .getBlockState(context.getPos() - .offset(opposite))); + return cycleAxisIfNecessary(stateForPlacement, opposite, context.getLevel() + .getBlockState(context.getClickedPos() + .relative(opposite))); } @Override public void neighborChanged(BlockState state, World world, BlockPos pos, Block p_220069_4_, BlockPos updatePos, boolean p_220069_6_) { - if (updatePos.equals(pos.offset(state.get(FACING) - .getOpposite())) && !isValidPosition(state, world, pos)) + if (updatePos.equals(pos.relative(state.getValue(FACING) + .getOpposite())) && !canSurvive(state, world, pos)) world.destroyBlock(pos, true); } @Override - public BlockState updatePostPlacement(BlockState state, Direction direction, BlockState otherState, IWorld world, + public BlockState updateShape(BlockState state, Direction direction, BlockState otherState, IWorld world, BlockPos pos, BlockPos p_196271_6_) { - if (state.get(FACING) != direction.getOpposite()) + if (state.getValue(FACING) != direction.getOpposite()) return state; return cycleAxisIfNecessary(state, direction, otherState); } @@ -100,7 +102,7 @@ public class GantryCarriageBlock extends DirectionalAxisKineticBlock implements protected BlockState cycleAxisIfNecessary(BlockState state, Direction direction, BlockState otherState) { if (!AllBlocks.GANTRY_SHAFT.has(otherState)) return state; - if (otherState.get(GantryShaftBlock.FACING) + if (otherState.getValue(GantryShaftBlock.FACING) .getAxis() == direction.getAxis()) return state; if (isValidGantryShaftAxis(state, otherState)) @@ -109,7 +111,7 @@ public class GantryCarriageBlock extends DirectionalAxisKineticBlock implements } public static boolean isValidGantryShaftAxis(BlockState pinionState, BlockState gantryState) { - return getValidGantryShaftAxis(pinionState) == gantryState.get(GantryShaftBlock.FACING) + return getValidGantryShaftAxis(pinionState) == gantryState.getValue(GantryShaftBlock.FACING) .getAxis(); } @@ -118,7 +120,7 @@ public class GantryCarriageBlock extends DirectionalAxisKineticBlock implements return Axis.Y; IRotate block = (IRotate) state.getBlock(); Axis rotationAxis = block.getRotationAxis(state); - Axis facingAxis = state.get(FACING) + Axis facingAxis = state.getValue(FACING) .getAxis(); for (Axis axis : Iterate.axes) if (axis != rotationAxis && axis != facingAxis) @@ -127,7 +129,7 @@ public class GantryCarriageBlock extends DirectionalAxisKineticBlock implements } public static Axis getValidGantryPinionAxis(BlockState state, Axis shaftAxis) { - Axis facingAxis = state.get(FACING) + Axis facingAxis = state.getValue(FACING) .getAxis(); for (Axis axis : Iterate.axes) if (axis != shaftAxis && axis != facingAxis) 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 e2d3a8630..e60fee02c 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 @@ -36,15 +36,15 @@ public class GantryCarriageInstance extends ShaftInstance implements IDynamicIns .getModel(AllBlockPartials.GANTRY_COGS, blockState) .createInstance(); - facing = blockState.get(GantryCarriageBlock.FACING); - alongFirst = blockState.get(GantryCarriageBlock.AXIS_ALONG_FIRST_COORDINATE); + facing = blockState.getValue(GantryCarriageBlock.FACING); + alongFirst = blockState.getValue(GantryCarriageBlock.AXIS_ALONG_FIRST_COORDINATE); rotationAxis = KineticTileEntityRenderer.getRotationAxisOf(tile); rotationMult = getRotationMultiplier(getGantryAxis(), facing); - visualPos = facing.getAxisDirection() == Direction.AxisDirection.POSITIVE ? tile.getPos() - : tile.getPos() - .offset(facing.getOpposite()); + visualPos = facing.getAxisDirection() == Direction.AxisDirection.POSITIVE ? tile.getBlockPos() + : tile.getBlockPos() + .relative(facing.getOpposite()); animateCogs(getCogAngle()); } @@ -53,7 +53,7 @@ public class GantryCarriageInstance extends ShaftInstance implements IDynamicIns public void beginFrame() { float cogAngle = getCogAngle(); - if (MathHelper.epsilonEquals(cogAngle, lastAngle)) return; + if (MathHelper.equal(cogAngle, lastAngle)) return; animateCogs(cogAngle); } @@ -71,7 +71,7 @@ public class GantryCarriageInstance extends ShaftInstance implements IDynamicIns .rotateX(facing == Direction.UP ? 0 : facing == Direction.DOWN ? 180 : 90) .rotateY(alongFirst ^ facing.getAxis() == Direction.Axis.Z ? 90 : 0) .translate(0, -9 / 16f, 0) - .multiply(Vector3f.POSITIVE_X.getRadialQuaternion(-cogAngle)) + .multiply(Vector3f.XP.rotation(-cogAngle)) .translate(0, 9 / 16f, 0) .unCentre(); diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/gantry/GantryCarriageRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/gantry/GantryCarriageRenderer.java index 5ae13bc6d..63efd4fc7 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/gantry/GantryCarriageRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/gantry/GantryCarriageRenderer.java @@ -32,15 +32,15 @@ public class GantryCarriageRenderer extends KineticTileEntityRenderer { int light, int overlay) { super.renderSafe(te, partialTicks, ms, buffer, light, overlay); - if (Backend.getInstance().canUseInstancing(te.getWorld())) return; + if (Backend.getInstance().canUseInstancing(te.getLevel())) return; BlockState state = te.getBlockState(); - Direction facing = state.get(GantryCarriageBlock.FACING); - Boolean alongFirst = state.get(GantryCarriageBlock.AXIS_ALONG_FIRST_COORDINATE); + Direction facing = state.getValue(GantryCarriageBlock.FACING); + Boolean alongFirst = state.getValue(GantryCarriageBlock.AXIS_ALONG_FIRST_COORDINATE); Axis rotationAxis = getRotationAxisOf(te); - BlockPos visualPos = facing.getAxisDirection() == AxisDirection.POSITIVE ? te.getPos() - : te.getPos() - .offset(facing.getOpposite()); + BlockPos visualPos = facing.getAxisDirection() == AxisDirection.POSITIVE ? te.getBlockPos() + : te.getBlockPos() + .relative(facing.getOpposite()); float angleForTe = getAngleForTe(te, visualPos, rotationAxis); Axis gantryAxis = Axis.X; @@ -62,17 +62,17 @@ public class GantryCarriageRenderer extends KineticTileEntityRenderer { .rotateX(facing == Direction.UP ? 0 : facing == Direction.DOWN ? 180 : 90) .rotateY(alongFirst ^ facing.getAxis() == Axis.Z ? 90 : 0) .translate(0, -9 / 16f, 0) - .multiply(Vector3f.POSITIVE_X.getRadialQuaternion(-angleForTe)) + .multiply(Vector3f.XP.rotation(-angleForTe)) .translate(0, 9 / 16f, 0) .unCentre(); cogs.light(light) - .renderInto(ms, buffer.getBuffer(RenderType.getSolid())); + .renderInto(ms, buffer.getBuffer(RenderType.solid())); } public static float getAngleForTe(KineticTileEntity te, final BlockPos pos, Axis axis) { - float time = AnimationTickHolder.getRenderTime(te.getWorld()); + float time = AnimationTickHolder.getRenderTime(te.getLevel()); float offset = getRotationOffsetForPosition(te, pos, axis); return ((time * te.getSpeed() * 3f / 20 + offset) % 360) / 180 * (float) Math.PI; } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/gantry/GantryCarriageTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/gantry/GantryCarriageTileEntity.java index 897068624..7e516d2dc 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/gantry/GantryCarriageTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/gantry/GantryCarriageTileEntity.java @@ -41,8 +41,8 @@ public class GantryCarriageTileEntity extends KineticTileEntity implements IDisp @Override public void initialize() { super.initialize(); - if (!getBlockState().isValidPosition(world, pos)) - world.destroyBlock(pos, true); + if (!getBlockState().canSurvive(level, worldPosition)) + level.destroyBlock(worldPosition, true); } public void queueAssembly() { @@ -53,7 +53,7 @@ public class GantryCarriageTileEntity extends KineticTileEntity implements IDisp public void tick() { super.tick(); - if (world.isRemote) + if (level.isClientSide) return; if (assembleNextTick) { @@ -72,10 +72,10 @@ public class GantryCarriageTileEntity extends KineticTileEntity implements IDisp if (!(blockState.getBlock() instanceof GantryCarriageBlock)) return; - Direction direction = blockState.get(FACING); + Direction direction = blockState.getValue(FACING); GantryContraption contraption = new GantryContraption(direction); - TileEntity shaftTe = world.getTileEntity(pos.offset(direction.getOpposite())); + TileEntity shaftTe = level.getBlockEntity(worldPosition.relative(direction.getOpposite())); if (!(shaftTe instanceof GantryShaftTileEntity)) return; BlockState shaftState = shaftTe.getBlockState(); @@ -83,14 +83,14 @@ public class GantryCarriageTileEntity extends KineticTileEntity implements IDisp return; float pinionMovementSpeed = ((GantryShaftTileEntity) shaftTe).getPinionMovementSpeed(); - Direction shaftOrientation = shaftState.get(GantryShaftBlock.FACING); + Direction shaftOrientation = shaftState.getValue(GantryShaftBlock.FACING); Direction movementDirection = shaftOrientation; if (pinionMovementSpeed < 0) movementDirection = movementDirection.getOpposite(); try { lastException = null; - if (!contraption.assemble(world, pos)) + if (!contraption.assemble(level, worldPosition)) return; sendData(); @@ -99,17 +99,17 @@ public class GantryCarriageTileEntity extends KineticTileEntity implements IDisp sendData(); return; } - if (ContraptionCollider.isCollidingWithWorld(world, contraption, pos.offset(movementDirection), + if (ContraptionCollider.isCollidingWithWorld(level, contraption, worldPosition.relative(movementDirection), movementDirection)) return; - contraption.removeBlocksFromWorld(world, BlockPos.ZERO); + contraption.removeBlocksFromWorld(level, BlockPos.ZERO); GantryContraptionEntity movedContraption = - GantryContraptionEntity.create(world, contraption, shaftOrientation); - BlockPos anchor = pos; - movedContraption.setPosition(anchor.getX(), anchor.getY(), anchor.getZ()); - AllSoundEvents.CONTRAPTION_ASSEMBLE.playOnServer(world, pos); - world.addEntity(movedContraption); + GantryContraptionEntity.create(level, contraption, shaftOrientation); + BlockPos anchor = worldPosition; + movedContraption.setPos(anchor.getX(), anchor.getY(), anchor.getZ()); + AllSoundEvents.CONTRAPTION_ASSEMBLE.playOnServer(level, worldPosition); + level.addFreshEntity(movedContraption); } @Override @@ -134,19 +134,19 @@ public class GantryCarriageTileEntity extends KineticTileEntity implements IDisp return defaultModifier; if (!AllBlocks.GANTRY_SHAFT.has(stateTo)) return defaultModifier; - if (!stateTo.get(GantryShaftBlock.POWERED)) + if (!stateTo.getValue(GantryShaftBlock.POWERED)) return defaultModifier; - Direction direction = Direction.getFacingFromVector(diff.getX(), diff.getY(), diff.getZ()); - if (stateFrom.get(GantryCarriageBlock.FACING) != direction.getOpposite()) + Direction direction = Direction.getNearest(diff.getX(), diff.getY(), diff.getZ()); + if (stateFrom.getValue(GantryCarriageBlock.FACING) != direction.getOpposite()) return defaultModifier; - return getGantryPinionModifier(stateTo.get(GantryShaftBlock.FACING), stateFrom.get(GantryCarriageBlock.FACING)); + return getGantryPinionModifier(stateTo.getValue(GantryShaftBlock.FACING), stateFrom.getValue(GantryCarriageBlock.FACING)); } public static float getGantryPinionModifier(Direction shaft, Direction pinionDirection) { Axis shaftAxis = shaft.getAxis(); float directionModifier = shaft.getAxisDirection() - .getOffset(); + .getStep(); if (shaftAxis == Axis.Y) if (pinionDirection == Direction.NORTH || pinionDirection == Direction.EAST) return -directionModifier; @@ -163,14 +163,14 @@ public class GantryCarriageTileEntity extends KineticTileEntity implements IDisp BlockState blockState = getBlockState(); if (!(blockState.getBlock() instanceof GantryCarriageBlock)) return false; - Direction facing = blockState.get(GantryCarriageBlock.FACING) + Direction facing = blockState.getValue(GantryCarriageBlock.FACING) .getOpposite(); - BlockState shaftState = world.getBlockState(pos.offset(facing)); + BlockState shaftState = level.getBlockState(worldPosition.relative(facing)); if (!(shaftState.getBlock() instanceof GantryShaftBlock)) return false; - if (shaftState.get(GantryShaftBlock.POWERED)) + if (shaftState.getValue(GantryShaftBlock.POWERED)) return false; - TileEntity te = world.getTileEntity(pos.offset(facing)); + TileEntity te = level.getBlockEntity(worldPosition.relative(facing)); return te instanceof GantryShaftTileEntity && ((GantryShaftTileEntity) te).canAssembleOn(); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/gantry/GantryContraption.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/gantry/GantryContraption.java index df6366c73..260da29e1 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/gantry/GantryContraption.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/gantry/GantryContraption.java @@ -34,19 +34,19 @@ public class GantryContraption extends TranslatingContraption { @Override public CompoundNBT writeNBT(boolean spawnPacket) { CompoundNBT tag = super.writeNBT(spawnPacket); - tag.putInt("Facing", facing.getIndex()); + tag.putInt("Facing", facing.get3DDataValue()); return tag; } @Override public void readNBT(World world, CompoundNBT tag, boolean spawnData) { - facing = Direction.byIndex(tag.getInt("Facing")); + facing = Direction.from3DDataValue(tag.getInt("Facing")); super.readNBT(world, tag, spawnData); } @Override protected boolean isAnchoringBlockAt(BlockPos pos) { - return super.isAnchoringBlockAt(pos.offset(facing)); + return super.isAnchoringBlockAt(pos.relative(facing)); } @Override diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/gantry/GantryContraptionEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/gantry/GantryContraptionEntity.java index 4066c61b4..bcf52fedb 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/gantry/GantryContraptionEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/gantry/GantryContraptionEntity.java @@ -28,6 +28,8 @@ import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.fml.network.PacketDistributor; +import com.simibubi.create.content.contraptions.components.structureMovement.AbstractContraptionEntity.ContraptionRotationState; + public class GantryContraptionEntity extends AbstractContraptionEntity { Direction movementAxis; @@ -51,27 +53,27 @@ public class GantryContraptionEntity extends AbstractContraptionEntity { return; double prevAxisMotion = axisMotion; - if (world.isRemote) { + if (level.isClientSide) { clientOffsetDiff *= .75f; updateClientMotion(); } checkPinionShaft(); tickActors(); - Vector3d movementVec = getMotion(); + Vector3d movementVec = getDeltaMovement(); if (ContraptionCollider.collideBlocks(this)) { - if (!world.isRemote) + if (!level.isClientSide) disassemble(); return; } - if (!isStalled() && ticksExisted > 2) + if (!isStalled() && tickCount > 2) move(movementVec.x, movementVec.y, movementVec.z); if (Math.signum(prevAxisMotion) != Math.signum(axisMotion) && prevAxisMotion != 0) - contraption.stop(world); - if (!world.isRemote && (prevAxisMotion != axisMotion || ticksExisted % 3 == 0)) + contraption.stop(level); + if (!level.isClientSide && (prevAxisMotion != axisMotion || tickCount % 3 == 0)) sendPacket(); } @@ -79,11 +81,11 @@ public class GantryContraptionEntity extends AbstractContraptionEntity { Vector3d movementVec; Direction facing = ((GantryContraption) contraption).getFacing(); Vector3d currentPosition = getAnchorVec().add(.5, .5, .5); - BlockPos gantryShaftPos = new BlockPos(currentPosition).offset(facing.getOpposite()); + BlockPos gantryShaftPos = new BlockPos(currentPosition).relative(facing.getOpposite()); - TileEntity te = world.getTileEntity(gantryShaftPos); + TileEntity te = level.getBlockEntity(gantryShaftPos); if (!(te instanceof GantryShaftTileEntity) || !AllBlocks.GANTRY_SHAFT.has(te.getBlockState())) { - if (!world.isRemote) { + if (!level.isClientSide) { setContraptionMotion(Vector3d.ZERO); disassemble(); } @@ -91,35 +93,35 @@ public class GantryContraptionEntity extends AbstractContraptionEntity { } BlockState blockState = te.getBlockState(); - Direction direction = blockState.get(GantryShaftBlock.FACING); + Direction direction = blockState.getValue(GantryShaftBlock.FACING); GantryShaftTileEntity gantryShaftTileEntity = (GantryShaftTileEntity) te; float pinionMovementSpeed = gantryShaftTileEntity.getPinionMovementSpeed(); - movementVec = Vector3d.of(direction.getDirectionVec()).scale(pinionMovementSpeed); + movementVec = Vector3d.atLowerCornerOf(direction.getNormal()).scale(pinionMovementSpeed); - if (blockState.get(GantryShaftBlock.POWERED) || pinionMovementSpeed == 0) { + if (blockState.getValue(GantryShaftBlock.POWERED) || pinionMovementSpeed == 0) { setContraptionMotion(Vector3d.ZERO); - if (!world.isRemote) + if (!level.isClientSide) disassemble(); return; } Vector3d nextPosition = currentPosition.add(movementVec); double currentCoord = direction.getAxis() - .getCoordinate(currentPosition.x, currentPosition.y, currentPosition.z); + .choose(currentPosition.x, currentPosition.y, currentPosition.z); double nextCoord = direction.getAxis() - .getCoordinate(nextPosition.x, nextPosition.y, nextPosition.z); + .choose(nextPosition.x, nextPosition.y, nextPosition.z); if ((MathHelper.floor(currentCoord) + .5f < nextCoord != (pinionMovementSpeed * direction.getAxisDirection() - .getOffset() < 0))) + .getStep() < 0))) if (!gantryShaftTileEntity.canAssembleOn()) { setContraptionMotion(Vector3d.ZERO); - if (!world.isRemote) + if (!level.isClientSide) disassemble(); return; } - if (world.isRemote) + if (level.isClientSide) return; axisMotion = pinionMovementSpeed; @@ -158,15 +160,15 @@ public class GantryContraptionEntity extends AbstractContraptionEntity { } @Override - public void setPositionAndUpdate(double p_70634_1_, double p_70634_3_, double p_70634_5_) {} + public void teleportTo(double p_70634_1_, double p_70634_3_, double p_70634_5_) {} @Override @OnlyIn(Dist.CLIENT) - public void setPositionAndRotationDirect(double x, double y, double z, float yw, float pt, int inc, boolean t) {} + public void lerpTo(double x, double y, double z, float yw, float pt, int inc, boolean t) {} @Override protected void handleStallInformation(float x, float y, float z, float angle) { - setPos(x, y, z); + setPosRaw(x, y, z); clientOffsetDiff = 0; } @@ -180,25 +182,25 @@ public class GantryContraptionEntity extends AbstractContraptionEntity { public void updateClientMotion() { float modifier = movementAxis.getAxisDirection() - .getOffset(); - setContraptionMotion(Vector3d.of(movementAxis.getDirectionVec()) + .getStep(); + setContraptionMotion(Vector3d.atLowerCornerOf(movementAxis.getNormal()) .scale((axisMotion + clientOffsetDiff * modifier / 2f) * ServerSpeedProvider.get())); } public double getAxisCoord() { Vector3d anchorVec = getAnchorVec(); return movementAxis.getAxis() - .getCoordinate(anchorVec.x, anchorVec.y, anchorVec.z); + .choose(anchorVec.x, anchorVec.y, anchorVec.z); } public void sendPacket() { AllPackets.channel.send(PacketDistributor.TRACKING_ENTITY.with(() -> this), - new GantryContraptionUpdatePacket(getEntityId(), getAxisCoord(), axisMotion)); + new GantryContraptionUpdatePacket(getId(), getAxisCoord(), axisMotion)); } @OnlyIn(Dist.CLIENT) public static void handlePacket(GantryContraptionUpdatePacket packet) { - Entity entity = Minecraft.getInstance().world.getEntityByID(packet.entityID); + Entity entity = Minecraft.getInstance().level.getEntity(packet.entityID); if (!(entity instanceof GantryContraptionEntity)) return; GantryContraptionEntity ce = (GantryContraptionEntity) entity; diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/glue/GlueEffectPacket.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/glue/GlueEffectPacket.java index a70a8d1c7..8811e0208 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/glue/GlueEffectPacket.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/glue/GlueEffectPacket.java @@ -27,13 +27,13 @@ public class GlueEffectPacket extends SimplePacketBase { public GlueEffectPacket(PacketBuffer buffer) { pos = buffer.readBlockPos(); - direction = Direction.byIndex(buffer.readByte()); + direction = Direction.from3DDataValue(buffer.readByte()); fullBlock = buffer.readBoolean(); } public void write(PacketBuffer buffer) { buffer.writeBlockPos(pos); - buffer.writeByte(direction.getIndex()); + buffer.writeByte(direction.get3DDataValue()); buffer.writeBoolean(fullBlock); } @@ -41,9 +41,9 @@ public class GlueEffectPacket extends SimplePacketBase { public void handle(Supplier context) { context.get().enqueueWork(() -> DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> { Minecraft mc = Minecraft.getInstance(); - if (!mc.player.getBlockPos().withinDistance(pos, 100)) + if (!mc.player.blockPosition().closerThan(pos, 100)) return; - SuperGlueItem.spawnParticles(mc.world, pos, direction, fullBlock); + SuperGlueItem.spawnParticles(mc.level, pos, direction, fullBlock); })); context.get().setPacketHandled(true); } 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 4f57c980f..38fc81deb 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 @@ -87,25 +87,25 @@ public class GlueInstance extends EntityInstance implements ITi private void updateLight(OrientedData model) { BlockPos pos = entity.getHangingPosition(); - model.setBlockLight(world.getLightLevel(LightType.BLOCK, pos)) - .setSkyLight(world.getLightLevel(LightType.SKY, pos)); + model.setBlockLight(world.getBrightness(LightType.BLOCK, pos)) + .setSkyLight(world.getBrightness(LightType.SKY, pos)); } private boolean shouldShow() { PlayerEntity player = Minecraft.getInstance().player; return entity.isVisible() - || AllItems.SUPER_GLUE.isIn(player.getHeldItemMainhand()) - || AllItems.SUPER_GLUE.isIn(player.getHeldItemOffhand()); + || AllItems.SUPER_GLUE.isIn(player.getMainHandItem()) + || AllItems.SUPER_GLUE.isIn(player.getOffhandItem()); } public static BufferedModel supplyModel() { - Vector3d diff = Vector3d.of(Direction.SOUTH.getDirectionVec()); + Vector3d diff = Vector3d.atLowerCornerOf(Direction.SOUTH.getNormal()); Vector3d extension = diff.normalize() .scale(1 / 32f - 1 / 128f); Vector3d plane = VecHelper.axisAlingedPlaneOf(diff); - Direction.Axis axis = Direction.getFacingFromVector(diff.x, diff.y, diff.z) + Direction.Axis axis = Direction.getNearest(diff.x, diff.y, diff.z) .getAxis(); Vector3d start = Vector3d.ZERO.subtract(extension); @@ -133,10 +133,10 @@ public class GlueInstance extends EntityInstance implements ITi if (USE_ATLAS) { TextureAtlasSprite sprite = AllStitchedTextures.SUPER_GLUE.getSprite(); - minU = sprite.getMinU(); - maxU = sprite.getMaxU(); - minV = sprite.getMinV(); - maxV = sprite.getMaxV(); + minU = sprite.getU0(); + maxU = sprite.getU1(); + minV = sprite.getV0(); + maxV = sprite.getV1(); } else { minU = minV = 0; maxU = maxV = 1; diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/glue/SuperGlueEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/glue/SuperGlueEntity.java index 2e206b129..c6e6ff037 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/glue/SuperGlueEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/glue/SuperGlueEntity.java @@ -85,7 +85,7 @@ public class SuperGlueEntity extends Entity implements IEntityAdditionalSpawnDat } @Override - protected void registerData() {} + protected void defineSynchedData() {} public int getWidthPixels() { return 12; @@ -96,7 +96,7 @@ public class SuperGlueEntity extends Entity implements IEntityAdditionalSpawnDat } public void onBroken(@Nullable Entity breaker) { - playSound(SoundEvents.ENTITY_SLIME_SQUISH_SMALL, 1.0F, 1.0F); + playSound(SoundEvents.SLIME_SQUISH_SMALL, 1.0F, 1.0F); if (onValidSurface()) { AllPackets.channel.send(PacketDistributor.TRACKING_ENTITY.with(() -> this), new GlueEffectPacket(getHangingPosition(), getFacingDirection().getOpposite(), false)); @@ -112,26 +112,26 @@ public class SuperGlueEntity extends Entity implements IEntityAdditionalSpawnDat Validate.notNull(getFacingDirection()); if (getFacingDirection().getAxis() .isHorizontal()) { - this.rotationPitch = 0.0F; - this.rotationYaw = getFacingDirection().getHorizontalIndex() * 90; + this.xRot = 0.0F; + this.yRot = getFacingDirection().get2DDataValue() * 90; } else { - this.rotationPitch = -90 * getFacingDirection().getAxisDirection() - .getOffset(); - this.rotationYaw = 0.0F; + this.xRot = -90 * getFacingDirection().getAxisDirection() + .getStep(); + this.yRot = 0.0F; } - this.prevRotationPitch = this.rotationPitch; - this.prevRotationYaw = this.rotationYaw; + this.xRotO = this.xRot; + this.yRotO = this.yRot; this.updateBoundingBox(); } protected void updateBoundingBox() { if (this.getFacingDirection() != null) { double offset = 0.5 - 1 / 256d; - double x = hangingPosition.getX() + 0.5 - facingDirection.getXOffset() * offset; - double y = hangingPosition.getY() + 0.5 - facingDirection.getYOffset() * offset; - double z = hangingPosition.getZ() + 0.5 - facingDirection.getZOffset() * offset; - this.setPos(x, y, z); + double x = hangingPosition.getX() + 0.5 - facingDirection.getStepX() * offset; + double y = hangingPosition.getY() + 0.5 - facingDirection.getStepY() * offset; + double z = hangingPosition.getZ() + 0.5 - facingDirection.getStepZ() * offset; + this.setPosRaw(x, y, z); double w = getWidthPixels(); double h = getHeightPixels(); double l = getWidthPixels(); @@ -159,7 +159,7 @@ public class SuperGlueEntity extends Entity implements IEntityAdditionalSpawnDat @Override public void tick() { - if (this.validationTimer++ == 10 && !this.world.isRemote) { + if (this.validationTimer++ == 10 && !this.level.isClientSide) { this.validationTimer = 0; if (isAlive() && !this.onValidSurface()) { remove(); @@ -172,29 +172,29 @@ public class SuperGlueEntity extends Entity implements IEntityAdditionalSpawnDat public boolean isVisible() { if (!isAlive()) return false; - if (world instanceof WrappedWorld) + if (level instanceof WrappedWorld) return true; BlockPos pos = hangingPosition; - BlockPos pos2 = pos.offset(getFacingDirection().getOpposite()); - return isValidFace(world, pos2, getFacingDirection()) != isValidFace(world, pos, + BlockPos pos2 = pos.relative(getFacingDirection().getOpposite()); + return isValidFace(level, pos2, getFacingDirection()) != isValidFace(level, pos, getFacingDirection().getOpposite()); } public boolean onValidSurface() { BlockPos pos = hangingPosition; - BlockPos pos2 = hangingPosition.offset(getFacingDirection().getOpposite()); + BlockPos pos2 = hangingPosition.relative(getFacingDirection().getOpposite()); if (pos2.getY() >= 256) return false; - if (!world.isAreaLoaded(pos, 0) || !world.isAreaLoaded(pos2, 0)) + if (!level.isAreaLoaded(pos, 0) || !level.isAreaLoaded(pos2, 0)) return true; - if (!isValidFace(world, pos2, getFacingDirection()) - && !isValidFace(world, pos, getFacingDirection().getOpposite())) + if (!isValidFace(level, pos2, getFacingDirection()) + && !isValidFace(level, pos, getFacingDirection().getOpposite())) return false; - if (isSideSticky(world, pos2, getFacingDirection()) - || isSideSticky(world, pos, getFacingDirection().getOpposite())) + if (isSideSticky(level, pos2, getFacingDirection()) + || isSideSticky(level, pos, getFacingDirection().getOpposite())) return false; - return world.getEntitiesInAABBexcluding(this, getBoundingBox(), e -> e instanceof SuperGlueEntity) + return level.getEntities(this, getBoundingBox(), e -> e instanceof SuperGlueEntity) .isEmpty(); } @@ -212,10 +212,10 @@ public class SuperGlueEntity extends Entity implements IEntityAdditionalSpawnDat public static boolean isSideSticky(World world, BlockPos pos, Direction direction) { BlockState state = world.getBlockState(pos); if (AllBlocks.STICKY_MECHANICAL_PISTON.has(state)) - return state.get(DirectionalKineticBlock.FACING) == direction; + return state.getValue(DirectionalKineticBlock.FACING) == direction; if (AllBlocks.STICKER.has(state)) - return state.get(DirectionalBlock.FACING) == direction; + return state.getValue(DirectionalBlock.FACING) == direction; if (state.getBlock() == Blocks.SLIME_BLOCK) return true; @@ -226,59 +226,59 @@ public class SuperGlueEntity extends Entity implements IEntityAdditionalSpawnDat return Direction.UP == direction; if (AllBlocks.GANTRY_CARRIAGE.has(state)) - return state.get(DirectionalKineticBlock.FACING) == direction; + return state.getValue(DirectionalKineticBlock.FACING) == direction; if (state.getBlock() instanceof BearingBlock) { - return state.get(DirectionalKineticBlock.FACING) == direction; + return state.getValue(DirectionalKineticBlock.FACING) == direction; } if (state.getBlock() instanceof AbstractChassisBlock) { BooleanProperty glueableSide = ((AbstractChassisBlock) state.getBlock()).getGlueableSide(state, direction); if (glueableSide == null) return false; - return state.get(glueableSide); + return state.getValue(glueableSide); } return false; } @Override - public boolean canBeCollidedWith() { + public boolean isPickable() { return true; } @Override - public boolean hitByEntity(Entity entity) { + public boolean skipAttackInteraction(Entity entity) { return entity instanceof PlayerEntity - ? attackEntityFrom(DamageSource.causePlayerDamage((PlayerEntity) entity), 0) + ? hurt(DamageSource.playerAttack((PlayerEntity) entity), 0) : false; } @Override - public Direction getHorizontalFacing() { + public Direction getDirection() { return this.getFacingDirection(); } @Override - public boolean attackEntityFrom(DamageSource source, float amount) { + public boolean hurt(DamageSource source, float amount) { if (this.isInvulnerableTo(source)) return false; - boolean mobGriefing = world.getGameRules().getBoolean(GameRules.MOB_GRIEFING); - Entity trueSource = source.getTrueSource(); + boolean mobGriefing = level.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING); + Entity trueSource = source.getEntity(); if (!mobGriefing && trueSource instanceof MobEntity) return false; - Entity immediateSource = source.getImmediateSource(); + Entity immediateSource = source.getDirectEntity(); if (!isVisible() && immediateSource instanceof PlayerEntity) { - if (!AllItems.SUPER_GLUE.isIn(((PlayerEntity) immediateSource).getHeldItemMainhand())) + if (!AllItems.SUPER_GLUE.isIn(((PlayerEntity) immediateSource).getMainHandItem())) return true; } - if (isAlive() && !world.isRemote) { + if (isAlive() && !level.isClientSide) { remove(); - markVelocityChanged(); - onBroken(source.getTrueSource()); + markHurt(); + onBroken(source.getEntity()); } return true; @@ -286,15 +286,15 @@ public class SuperGlueEntity extends Entity implements IEntityAdditionalSpawnDat @Override public void move(MoverType typeIn, Vector3d pos) { - if (!world.isRemote && isAlive() && pos.lengthSquared() > 0.0D) { + if (!level.isClientSide && isAlive() && pos.lengthSqr() > 0.0D) { remove(); onBroken(null); } } @Override - public void addVelocity(double x, double y, double z) { - if (!world.isRemote && isAlive() && x * x + y * y + z * z > 0.0D) { + public void push(double x, double y, double z) { + if (!level.isClientSide && isAlive() && x * x + y * y + z * z > 0.0D) { remove(); onBroken(null); } @@ -311,12 +311,12 @@ public class SuperGlueEntity extends Entity implements IEntityAdditionalSpawnDat } @Override - public void applyEntityCollision(Entity entityIn) { - super.applyEntityCollision(entityIn); + public void push(Entity entityIn) { + super.push(entityIn); } @Override - public ActionResultType processInitialInteract(PlayerEntity player, Hand hand) { + public ActionResultType interact(PlayerEntity player, Hand hand) { if (player instanceof FakePlayer) return ActionResultType.PASS; DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> { @@ -329,43 +329,43 @@ public class SuperGlueEntity extends Entity implements IEntityAdditionalSpawnDat private void triggerPlaceBlock(PlayerEntity player, Hand hand) { if (!(player instanceof ClientPlayerEntity)) return; - if (!(player.world instanceof ClientWorld)) + if (!(player.level instanceof ClientWorld)) return; ClientPlayerEntity cPlayer = (ClientPlayerEntity) player; Minecraft mc = Minecraft.getInstance(); RayTraceResult ray = - cPlayer.pick(mc.playerController.getBlockReachDistance(), AnimationTickHolder.getPartialTicks(), false); + cPlayer.pick(mc.gameMode.getPickRange(), AnimationTickHolder.getPartialTicks(), false); if (!(ray instanceof BlockRayTraceResult)) return; if (ray.getType() == Type.MISS) return; BlockRayTraceResult blockRay = (BlockRayTraceResult) ray; - BlockFace rayFace = new BlockFace(blockRay.getPos(), blockRay.getFace()); + BlockFace rayFace = new BlockFace(blockRay.getBlockPos(), blockRay.getDirection()); BlockFace hangingFace = new BlockFace(getHangingPosition(), getFacingDirection().getOpposite()); if (!rayFace.isEquivalent(hangingFace)) return; for (Hand handIn : Hand.values()) { - ItemStack itemstack = cPlayer.getHeldItem(handIn); + ItemStack itemstack = cPlayer.getItemInHand(handIn); int countBefore = itemstack.getCount(); ActionResultType actionResultType = - mc.playerController.func_217292_a(cPlayer, (ClientWorld) cPlayer.world, handIn, blockRay); + mc.gameMode.useItemOn(cPlayer, (ClientWorld) cPlayer.level, handIn, blockRay); if (actionResultType != ActionResultType.SUCCESS) return; - cPlayer.swingArm(handIn); - if (!itemstack.isEmpty() && (itemstack.getCount() != countBefore || mc.playerController.isInCreativeMode())) - mc.gameRenderer.itemRenderer.resetEquippedProgress(handIn); + cPlayer.swing(handIn); + if (!itemstack.isEmpty() && (itemstack.getCount() != countBefore || mc.gameMode.hasInfiniteItems())) + mc.gameRenderer.itemInHandRenderer.itemUsed(handIn); return; } } @Override - public void writeAdditional(CompoundNBT compound) { + public void addAdditionalSaveData(CompoundNBT compound) { compound.putByte("Facing", (byte) this.getFacingDirection() - .getIndex()); + .get3DDataValue()); BlockPos blockpos = this.getHangingPosition(); compound.putInt("TileX", blockpos.getX()); compound.putInt("TileY", blockpos.getY()); @@ -373,40 +373,40 @@ public class SuperGlueEntity extends Entity implements IEntityAdditionalSpawnDat } @Override - public void readAdditional(CompoundNBT compound) { + public void readAdditionalSaveData(CompoundNBT compound) { this.hangingPosition = new BlockPos(compound.getInt("TileX"), compound.getInt("TileY"), compound.getInt("TileZ")); - this.facingDirection = Direction.byIndex(compound.getByte("Facing")); + this.facingDirection = Direction.from3DDataValue(compound.getByte("Facing")); updateFacingWithBoundingBox(); } @Override - public ItemEntity entityDropItem(ItemStack stack, float yOffset) { + public ItemEntity spawnAtLocation(ItemStack stack, float yOffset) { float xOffset = (float) this.getFacingDirection() - .getXOffset() * 0.15F; + .getStepX() * 0.15F; float zOffset = (float) this.getFacingDirection() - .getZOffset() * 0.15F; + .getStepZ() * 0.15F; ItemEntity itementity = - new ItemEntity(this.world, this.getX() + xOffset, this.getY() + yOffset, this.getZ() + zOffset, stack); - itementity.setDefaultPickupDelay(); - this.world.addEntity(itementity); + new ItemEntity(this.level, this.getX() + xOffset, this.getY() + yOffset, this.getZ() + zOffset, stack); + itementity.setDefaultPickUpDelay(); + this.level.addFreshEntity(itementity); return itementity; } @Override - protected boolean shouldSetPosAfterLoading() { + protected boolean repositionEntityAfterLoad() { return false; } @Override - public void setPosition(double x, double y, double z) { + public void setPos(double x, double y, double z) { hangingPosition = new BlockPos(x, y, z); updateBoundingBox(); - isAirBorne = true; + hasImpulse = true; } @Override - public float getRotatedYaw(Rotation transformRotation) { + public float rotate(Rotation transformRotation) { if (this.getFacingDirection() .getAxis() != Direction.Axis.Y) { switch (transformRotation) { @@ -414,16 +414,16 @@ public class SuperGlueEntity extends Entity implements IEntityAdditionalSpawnDat facingDirection = facingDirection.getOpposite(); break; case COUNTERCLOCKWISE_90: - facingDirection = facingDirection.rotateYCCW(); + facingDirection = facingDirection.getCounterClockWise(); break; case CLOCKWISE_90: - facingDirection = facingDirection.rotateY(); + facingDirection = facingDirection.getClockWise(); default: break; } } - float f = MathHelper.wrapDegrees(this.rotationYaw); + float f = MathHelper.wrapDegrees(this.yRot); switch (transformRotation) { case CLOCKWISE_180: return f + 180.0F; @@ -441,8 +441,8 @@ public class SuperGlueEntity extends Entity implements IEntityAdditionalSpawnDat } @Override - public float getMirroredYaw(Mirror transformMirror) { - return this.getRotatedYaw(transformMirror.toRotation(this.getFacingDirection())); + public float mirror(Mirror transformMirror) { + return this.rotate(transformMirror.getRotation(this.getFacingDirection())); } public Direction getAttachedDirection(BlockPos pos) { @@ -450,10 +450,10 @@ public class SuperGlueEntity extends Entity implements IEntityAdditionalSpawnDat } @Override - public void onStruckByLightning(ServerWorld world, LightningBoltEntity lightningBolt) {} + public void thunderHit(ServerWorld world, LightningBoltEntity lightningBolt) {} @Override - public void recalculateSize() {} + public void refreshDimensions() {} public static EntityType.Builder build(EntityType.Builder builder) { @SuppressWarnings("unchecked") @@ -462,20 +462,20 @@ public class SuperGlueEntity extends Entity implements IEntityAdditionalSpawnDat } @Override - public IPacket createSpawnPacket() { + public IPacket getAddEntityPacket() { return NetworkHooks.getEntitySpawningPacket(this); } @Override public void writeSpawnData(PacketBuffer buffer) { CompoundNBT compound = new CompoundNBT(); - writeAdditional(compound); - buffer.writeCompoundTag(compound); + addAdditionalSaveData(compound); + buffer.writeNbt(compound); } @Override public void readSpawnData(PacketBuffer additionalData) { - readAdditional(additionalData.readCompoundTag()); + readAdditionalSaveData(additionalData.readNbt()); } public Direction getFacingDirection() { @@ -488,12 +488,12 @@ public class SuperGlueEntity extends Entity implements IEntityAdditionalSpawnDat } @Override - public boolean doesEntityNotTriggerPressurePlate() { + public boolean isIgnoringBlockTriggers() { return true; } @Override public World getWorld() { - return world; + return level; } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/glue/SuperGlueHandler.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/glue/SuperGlueHandler.java index 89830765c..f1778657f 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/glue/SuperGlueHandler.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/glue/SuperGlueHandler.java @@ -35,7 +35,7 @@ import net.minecraftforge.fml.network.PacketDistributor; public class SuperGlueHandler { public static Map gatherGlue(IWorld world, BlockPos pos) { - List entities = world.getEntitiesWithinAABB(SuperGlueEntity.class, new AxisAlignedBB(pos)); + List entities = world.getEntitiesOfClass(SuperGlueEntity.class, new AxisAlignedBB(pos)); Map map = new HashMap<>(); for (SuperGlueEntity entity : entities) map.put(entity.getAttachedDirection(pos), entity); @@ -50,7 +50,7 @@ public class SuperGlueHandler { if (entity == null || world == null || pos == null) return; - if (world.isRemote()) + if (world.isClientSide()) return; Map gatheredGlue = gatherGlue(world, pos); @@ -63,50 +63,50 @@ public class SuperGlueHandler { } public static void glueInOffHandAppliesOnBlockPlace(EntityPlaceEvent event, BlockPos pos, PlayerEntity placer) { - ItemStack itemstack = placer.getHeldItemOffhand(); + ItemStack itemstack = placer.getOffhandItem(); ModifiableAttributeInstance reachAttribute = placer.getAttribute(ForgeMod.REACH_DISTANCE.get()); if (!AllItems.SUPER_GLUE.isIn(itemstack) || reachAttribute == null) return; - if (AllItems.WRENCH.isIn(placer.getHeldItemMainhand())) + if (AllItems.WRENCH.isIn(placer.getMainHandItem())) return; if (event.getPlacedAgainst() == IPlacementHelper.ID) return; double distance = reachAttribute.getValue(); Vector3d start = placer.getEyePosition(1); - Vector3d look = placer.getLook(1); + Vector3d look = placer.getViewVector(1); Vector3d end = start.add(look.x * distance, look.y * distance, look.z * distance); - World world = placer.world; + World world = placer.level; RayTraceWorld rayTraceWorld = - new RayTraceWorld(world, (p, state) -> p.equals(pos) ? Blocks.AIR.getDefaultState() : state); - BlockRayTraceResult ray = rayTraceWorld.rayTraceBlocks( + new RayTraceWorld(world, (p, state) -> p.equals(pos) ? Blocks.AIR.defaultBlockState() : state); + BlockRayTraceResult ray = rayTraceWorld.clip( new RayTraceContext(start, end, RayTraceContext.BlockMode.OUTLINE, RayTraceContext.FluidMode.NONE, placer)); - Direction face = ray.getFace(); + Direction face = ray.getDirection(); if (face == null || ray.getType() == Type.MISS) return; - if (!ray.getPos() - .offset(face) + if (!ray.getBlockPos() + .relative(face) .equals(pos)) { event.setCanceled(true); return; } - SuperGlueEntity entity = new SuperGlueEntity(world, ray.getPos(), face.getOpposite()); + SuperGlueEntity entity = new SuperGlueEntity(world, ray.getBlockPos(), face.getOpposite()); CompoundNBT compoundnbt = itemstack.getTag(); if (compoundnbt != null) - EntityType.applyItemNBT(world, placer, entity, compoundnbt); + EntityType.updateCustomEntityTag(world, placer, entity, compoundnbt); if (entity.onValidSurface()) { - if (!world.isRemote) { + if (!world.isClientSide) { entity.playPlaceSound(); - world.addEntity(entity); + world.addFreshEntity(entity); AllPackets.channel.send(PacketDistributor.TRACKING_ENTITY_AND_SELF.with(() -> entity), - new GlueEffectPacket(ray.getPos(), face, true)); + new GlueEffectPacket(ray.getBlockPos(), face, true)); } - itemstack.damageItem(1, placer, SuperGlueItem::onBroken); + itemstack.hurtAndBreak(1, placer, SuperGlueItem::onBroken); } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/glue/SuperGlueItem.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/glue/SuperGlueItem.java index 98863bfaa..7cbd56b8f 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/glue/SuperGlueItem.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/glue/SuperGlueItem.java @@ -20,6 +20,8 @@ import net.minecraft.world.World; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraft.item.Item.Properties; + public class SuperGlueItem extends Item { public SuperGlueItem(Properties properties) { @@ -27,7 +29,7 @@ public class SuperGlueItem extends Item { } @Override - public boolean isDamageable() { + public boolean canBeDepleted() { return true; } @@ -42,30 +44,30 @@ public class SuperGlueItem extends Item { } @Override - public ActionResultType onItemUse(ItemUseContext context) { - BlockPos blockpos = context.getPos(); - Direction direction = context.getFace(); - BlockPos blockpos1 = blockpos.offset(direction); + public ActionResultType useOn(ItemUseContext context) { + BlockPos blockpos = context.getClickedPos(); + Direction direction = context.getClickedFace(); + BlockPos blockpos1 = blockpos.relative(direction); PlayerEntity playerentity = context.getPlayer(); - ItemStack itemstack = context.getItem(); + ItemStack itemstack = context.getItemInHand(); if (playerentity == null || !this.canPlace(playerentity, direction, itemstack, blockpos1)) return ActionResultType.FAIL; - World world = context.getWorld(); + World world = context.getLevel(); SuperGlueEntity entity = new SuperGlueEntity(world, blockpos1, direction); CompoundNBT compoundnbt = itemstack.getTag(); if (compoundnbt != null) - EntityType.applyItemNBT(world, playerentity, entity, compoundnbt); + EntityType.updateCustomEntityTag(world, playerentity, entity, compoundnbt); if (!entity.onValidSurface()) return ActionResultType.FAIL; - if (!world.isRemote) { + if (!world.isClientSide) { entity.playPlaceSound(); - world.addEntity(entity); + world.addFreshEntity(entity); } - itemstack.damageItem(1, playerentity, SuperGlueItem::onBroken); + itemstack.hurtAndBreak(1, playerentity, SuperGlueItem::onBroken); return ActionResultType.SUCCESS; } @@ -75,22 +77,22 @@ public class SuperGlueItem extends Item { } protected boolean canPlace(PlayerEntity entity, Direction facing, ItemStack stack, BlockPos pos) { - return !World.isOutsideBuildHeight(pos) && entity.canPlayerEdit(pos, facing, stack); + return !World.isOutsideBuildHeight(pos) && entity.mayUseItemAt(pos, facing, stack); } @OnlyIn(Dist.CLIENT) public static void spawnParticles(World world, BlockPos pos, Direction direction, boolean fullBlock) { - Vector3d vec = Vector3d.of(direction.getDirectionVec()); + Vector3d vec = Vector3d.atLowerCornerOf(direction.getNormal()); Vector3d plane = VecHelper.axisAlingedPlaneOf(vec); Vector3d facePos = VecHelper.getCenterOf(pos) .add(vec.scale(.5f)); - float distance = fullBlock ? 1f : .25f + .25f * (world.rand.nextFloat() - .5f); + float distance = fullBlock ? 1f : .25f + .25f * (world.random.nextFloat() - .5f); plane = plane.scale(distance); ItemStack stack = new ItemStack(Items.SLIME_BALL); for (int i = fullBlock ? 40 : 15; i > 0; i--) { - Vector3d offset = VecHelper.rotate(plane, 360 * world.rand.nextFloat(), direction.getAxis()); + Vector3d offset = VecHelper.rotate(plane, 360 * world.random.nextFloat(), direction.getAxis()); Vector3d motion = offset.normalize() .scale(1 / 16f); if (fullBlock) diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/glue/SuperGlueRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/glue/SuperGlueRenderer.java index 34bfa5f3b..78e6f7868 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/glue/SuperGlueRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/glue/SuperGlueRenderer.java @@ -41,7 +41,7 @@ public class SuperGlueRenderer extends EntityRenderer { } @Override - public ResourceLocation getEntityTexture(SuperGlueEntity entity) { + public ResourceLocation getTextureLocation(SuperGlueEntity entity) { return regular; } @@ -50,8 +50,8 @@ public class SuperGlueRenderer extends EntityRenderer { if (super.shouldRender(entity, frustum, x, y, z)) { PlayerEntity player = Minecraft.getInstance().player; boolean visible = entity.isVisible(); - boolean holdingGlue = AllItems.SUPER_GLUE.isIn(player.getHeldItemMainhand()) - || AllItems.SUPER_GLUE.isIn(player.getHeldItemOffhand()); + boolean holdingGlue = AllItems.SUPER_GLUE.isIn(player.getMainHandItem()) + || AllItems.SUPER_GLUE.isIn(player.getOffhandItem()); if (visible || holdingGlue) return true; @@ -64,29 +64,29 @@ public class SuperGlueRenderer extends EntityRenderer { IRenderTypeBuffer buffer, int light) { super.render(entity, yaw, partialTicks, ms, buffer, light); - IVertexBuilder builder = buffer.getBuffer(RenderType.getEntityCutout(getEntityTexture(entity))); + IVertexBuilder builder = buffer.getBuffer(RenderType.entityCutout(getTextureLocation(entity))); light = getBrightnessForRender(entity); Direction face = entity.getFacingDirection(); - ms.push(); + ms.pushPose(); MatrixStacker.of(ms) .rotateY(AngleHelper.horizontalAngleNew(face)) .rotateX(AngleHelper.verticalAngle(face)); - Entry peek = ms.peek(); + Entry peek = ms.last(); renderQuad(builder, peek, insideQuad, light, -1); renderQuad(builder, peek, outsideQuad, light, 1); - ms.pop(); + ms.popPose(); } private void initQuads() { - Vector3d diff = Vector3d.of(Direction.SOUTH.getDirectionVec()); + Vector3d diff = Vector3d.atLowerCornerOf(Direction.SOUTH.getNormal()); Vector3d extension = diff.normalize() .scale(1 / 32f - 1 / 128f); Vector3d plane = VecHelper.axisAlingedPlaneOf(diff); - Axis axis = Direction.getFacingFromVector(diff.x, diff.y, diff.z) + Axis axis = Direction.getNearest(diff.x, diff.y, diff.z) .getAxis(); Vector3d start = Vector3d.ZERO.subtract(extension); @@ -121,24 +121,24 @@ public class SuperGlueRenderer extends EntityRenderer { private int getBrightnessForRender(SuperGlueEntity entity) { BlockPos blockpos = entity.getHangingPosition(); - BlockPos blockpos2 = blockpos.offset(entity.getFacingDirection() + BlockPos blockpos2 = blockpos.relative(entity.getFacingDirection() .getOpposite()); - World world = entity.getEntityWorld(); - int light = world.isBlockPresent(blockpos) ? WorldRenderer.getLightmapCoordinates(world, blockpos) : 15; - int light2 = world.isBlockPresent(blockpos2) ? WorldRenderer.getLightmapCoordinates(world, blockpos2) : 15; + World world = entity.getCommandSenderWorld(); + int light = world.isLoaded(blockpos) ? WorldRenderer.getLightColor(world, blockpos) : 15; + int light2 = world.isLoaded(blockpos2) ? WorldRenderer.getLightColor(world, blockpos2) : 15; return Math.max(light, light2); } // Vertex format: pos x, pos y, pos z, u, v private void renderQuad(IVertexBuilder builder, Entry matrix, float[] data, int light, float normalZ) { for (int i = 0; i < 4; i++) { - builder.vertex(matrix.getModel(), data[5 * i], data[5 * i + 1], data[5 * i + 2]) + builder.vertex(matrix.pose(), data[5 * i], data[5 * i + 1], data[5 * i + 2]) .color(255, 255, 255, 255) - .texture(data[5 * i + 3], data[5 * i + 4]) - .overlay(OverlayTexture.DEFAULT_UV) - .light(light) - .normal(matrix.getNormal(), 0.0f, 0.0f, normalZ) + .uv(data[5 * i + 3], data[5 * i + 4]) + .overlayCoords(OverlayTexture.NO_OVERLAY) + .uv2(light) + .normal(matrix.normal(), 0.0f, 0.0f, normalZ) .endVertex(); } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/mounted/CartAssembleRailType.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/mounted/CartAssembleRailType.java index 555d2ef1d..20dd43e65 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/mounted/CartAssembleRailType.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/mounted/CartAssembleRailType.java @@ -48,7 +48,7 @@ public enum CartAssembleRailType implements IStringSerializable { } @Override - public String getString() { + public String getSerializedName() { return Lang.asId(name()); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/mounted/CartAssemblerBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/mounted/CartAssemblerBlock.java index 73c1d93a2..18ffa2a3d 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/mounted/CartAssemblerBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/mounted/CartAssemblerBlock.java @@ -57,6 +57,8 @@ import net.minecraft.world.IWorldReader; import net.minecraft.world.World; import net.minecraft.world.server.ServerWorld; +import net.minecraft.block.AbstractBlock.Properties; + public class CartAssemblerBlock extends AbstractRailBlock implements ITE, IWrenchable, ISpecialBlockItemRequirement { @@ -69,36 +71,36 @@ public class CartAssemblerBlock extends AbstractRailBlock public CartAssemblerBlock(Properties properties) { super(true, properties); - setDefaultState(getDefaultState().with(POWERED, false) - .with(BACKWARDS, false) - .with(RAIL_TYPE, CartAssembleRailType.POWERED_RAIL)); + registerDefaultState(defaultBlockState().setValue(POWERED, false) + .setValue(BACKWARDS, false) + .setValue(RAIL_TYPE, CartAssembleRailType.POWERED_RAIL)); } public static BlockState createAnchor(BlockState state) { - Axis axis = state.get(RAIL_SHAPE) == RailShape.NORTH_SOUTH ? Axis.Z : Axis.X; + Axis axis = state.getValue(RAIL_SHAPE) == RailShape.NORTH_SOUTH ? Axis.Z : Axis.X; return AllBlocks.MINECART_ANCHOR.getDefaultState() - .with(BlockStateProperties.HORIZONTAL_AXIS, axis); + .setValue(BlockStateProperties.HORIZONTAL_AXIS, axis); } private static Item getRailItem(BlockState state) { - return state.get(RAIL_TYPE) + return state.getValue(RAIL_TYPE) .getItem(); } public static BlockState getRailBlock(BlockState state) { - AbstractRailBlock railBlock = (AbstractRailBlock) state.get(RAIL_TYPE) + AbstractRailBlock railBlock = (AbstractRailBlock) state.getValue(RAIL_TYPE) .getBlock(); - BlockState railState = railBlock.getDefaultState() - .with(railBlock.getShapeProperty(), state.get(RAIL_SHAPE)); - if (railState.contains(ControllerRailBlock.BACKWARDS)) - railState = railState.with(ControllerRailBlock.BACKWARDS, state.get(BACKWARDS)); + BlockState railState = railBlock.defaultBlockState() + .setValue(railBlock.getShapeProperty(), state.getValue(RAIL_SHAPE)); + if (railState.hasProperty(ControllerRailBlock.BACKWARDS)) + railState = railState.setValue(ControllerRailBlock.BACKWARDS, state.getValue(BACKWARDS)); return railState; } @Override - protected void fillStateContainer(Builder builder) { + protected void createBlockStateDefinition(Builder builder) { builder.add(RAIL_SHAPE, POWERED, RAIL_TYPE, BACKWARDS); - super.fillStateContainer(builder); + super.createBlockStateDefinition(builder); } @Override @@ -121,7 +123,7 @@ public class CartAssemblerBlock extends AbstractRailBlock AbstractMinecartEntity cart) { if (!canAssembleTo(cart)) return; - if (world.isRemote) + if (world.isClientSide) return; withTileEntityDo(world, pos, te -> te.assembleNextTick(cart)); @@ -140,8 +142,8 @@ public class CartAssemblerBlock extends AbstractRailBlock } public static CartAssemblerAction getActionForCart(BlockState state, AbstractMinecartEntity cart) { - CartAssembleRailType type = state.get(RAIL_TYPE); - boolean powered = state.get(POWERED); + CartAssembleRailType type = state.getValue(RAIL_TYPE); + boolean powered = state.getValue(POWERED); switch (type) { case ACTIVATOR_RAIL: return powered ? CartAssemblerAction.DISASSEMBLE : CartAssemblerAction.PASS; @@ -166,10 +168,10 @@ public class CartAssemblerBlock extends AbstractRailBlock @Override @Nonnull - public ActionResultType onUse(@Nonnull BlockState state, @Nonnull World world, @Nonnull BlockPos pos, + public ActionResultType use(@Nonnull BlockState state, @Nonnull World world, @Nonnull BlockPos pos, PlayerEntity player, @Nonnull Hand hand, @Nonnull BlockRayTraceResult blockRayTraceResult) { - ItemStack itemStack = player.getHeldItem(hand); + ItemStack itemStack = player.getItemInHand(hand); Item previousItem = getRailItem(state); Item heldItem = itemStack.getItem(); if (heldItem != previousItem) { @@ -180,8 +182,8 @@ public class CartAssemblerBlock extends AbstractRailBlock newType = type; if (newType == null) return ActionResultType.PASS; - world.playSound(null, pos, SoundEvents.ENTITY_ITEM_PICKUP, SoundCategory.PLAYERS, 1, 1); - world.setBlockState(pos, state.with(RAIL_TYPE, newType)); + world.playSound(null, pos, SoundEvents.ITEM_PICKUP, SoundCategory.PLAYERS, 1, 1); + world.setBlockAndUpdate(pos, state.setValue(RAIL_TYPE, newType)); if (!player.isCreative()) { itemStack.shrink(1); @@ -196,11 +198,11 @@ public class CartAssemblerBlock extends AbstractRailBlock @Override public void neighborChanged(@Nonnull BlockState state, @Nonnull World worldIn, @Nonnull BlockPos pos, @Nonnull Block blockIn, @Nonnull BlockPos fromPos, boolean isMoving) { - if (worldIn.isRemote) + if (worldIn.isClientSide) return; - boolean previouslyPowered = state.get(POWERED); - if (previouslyPowered != worldIn.isBlockPowered(pos)) - worldIn.setBlockState(pos, state.cycle(POWERED), 2); + boolean previouslyPowered = state.getValue(POWERED); + if (previouslyPowered != worldIn.hasNeighborSignal(pos)) + worldIn.setBlock(pos, state.cycle(POWERED), 2); super.neighborChanged(state, worldIn, pos, blockIn, fromPos, isMoving); } @@ -218,7 +220,7 @@ public class CartAssemblerBlock extends AbstractRailBlock } protected Axis getRailAxis(BlockState state) { - return state.get(RAIL_SHAPE) == RailShape.NORTH_SOUTH ? Direction.Axis.Z : Direction.Axis.X; + return state.getValue(RAIL_SHAPE) == RailShape.NORTH_SOUTH ? Direction.Axis.Z : Direction.Axis.X; } @Override @@ -230,12 +232,12 @@ public class CartAssemblerBlock extends AbstractRailBlock return VoxelShapes.empty(); if (entity instanceof PlayerEntity) return AllShapes.CART_ASSEMBLER_PLAYER_COLLISION.get(getRailAxis(state)); - return VoxelShapes.fullCube(); + return VoxelShapes.block(); } @Override @Nonnull - public PushReaction getPushReaction(@Nonnull BlockState state) { + public PushReaction getPistonPushReaction(@Nonnull BlockState state) { return PushReaction.BLOCK; } @@ -245,7 +247,7 @@ public class CartAssemblerBlock extends AbstractRailBlock } @Override - public boolean isValidPosition(@Nonnull BlockState state, @Nonnull IWorldReader world, @Nonnull BlockPos pos) { + public boolean canSurvive(@Nonnull BlockState state, @Nonnull IWorldReader world, @Nonnull BlockPos pos) { return false; } @@ -270,26 +272,26 @@ public class CartAssemblerBlock extends AbstractRailBlock @SuppressWarnings("deprecation") public List getDropsNoRail(BlockState state, ServerWorld world, BlockPos pos, @Nullable TileEntity p_220077_3_, @Nullable Entity p_220077_4_, ItemStack p_220077_5_) { - return super.getDrops(state, (new LootContext.Builder(world)).withRandom(world.rand) - .withParameter(LootParameters.ORIGIN, Vector3d.of(pos)) + return super.getDrops(state, (new LootContext.Builder(world)).withRandom(world.random) + .withParameter(LootParameters.ORIGIN, Vector3d.atLowerCornerOf(pos)) .withParameter(LootParameters.TOOL, p_220077_5_) - .withNullableParameter(LootParameters.THIS_ENTITY, p_220077_4_) - .withNullableParameter(LootParameters.BLOCK_ENTITY, p_220077_3_)); + .withOptionalParameter(LootParameters.THIS_ENTITY, p_220077_4_) + .withOptionalParameter(LootParameters.BLOCK_ENTITY, p_220077_3_)); } @Override public ActionResultType onSneakWrenched(BlockState state, ItemUseContext context) { - World world = context.getWorld(); - BlockPos pos = context.getPos(); + World world = context.getLevel(); + BlockPos pos = context.getClickedPos(); PlayerEntity player = context.getPlayer(); - if (world.isRemote) + if (world.isClientSide) return ActionResultType.SUCCESS; if (player != null && !player.isCreative()) - getDropsNoRail(state, (ServerWorld) world, pos, world.getTileEntity(pos), player, context.getItem()) + getDropsNoRail(state, (ServerWorld) world, pos, world.getBlockEntity(pos), player, context.getItemInHand()) .forEach(itemStack -> player.inventory.placeItemBackInInventory(world, itemStack)); if (world instanceof ServerWorld) - state.spawnAdditionalDrops((ServerWorld) world, pos, ItemStack.EMPTY); - world.setBlockState(pos, getRailBlock(state)); + state.spawnAfterBreak((ServerWorld) world, pos, ItemStack.EMPTY); + world.setBlockAndUpdate(pos, getRailBlock(state)); return ActionResultType.SUCCESS; } @@ -300,9 +302,9 @@ public class CartAssemblerBlock extends AbstractRailBlock } @Override - protected void fillStateContainer(Builder builder) { + protected void createBlockStateDefinition(Builder builder) { builder.add(BlockStateProperties.HORIZONTAL_AXIS); - super.fillStateContainer(builder); + super.createBlockStateDefinition(builder); } @Override @@ -314,18 +316,18 @@ public class CartAssemblerBlock extends AbstractRailBlock } @Override - public boolean allowsMovement(BlockState state, IBlockReader reader, BlockPos pos, PathType type) { + public boolean isPathfindable(BlockState state, IBlockReader reader, BlockPos pos, PathType type) { return false; } @Override public ActionResultType onWrenched(BlockState state, ItemUseContext context) { - World world = context.getWorld(); - if (world.isRemote) + World world = context.getLevel(); + if (world.isClientSide) return ActionResultType.SUCCESS; - BlockPos pos = context.getPos(); - world.setBlockState(pos, rotate(state, Rotation.CLOCKWISE_90), 3); - world.notifyNeighborsOfStateChange(pos.down(), this); + BlockPos pos = context.getClickedPos(); + world.setBlock(pos, rotate(state, Rotation.CLOCKWISE_90), 3); + world.updateNeighborsAt(pos.below(), this); return ActionResultType.SUCCESS; } @@ -334,11 +336,11 @@ public class CartAssemblerBlock extends AbstractRailBlock if (rotation == Rotation.NONE) return state; BlockState base = AllBlocks.CONTROLLER_RAIL.getDefaultState() - .with(ControllerRailBlock.SHAPE, state.get(RAIL_SHAPE)) - .with(ControllerRailBlock.BACKWARDS, state.get(BACKWARDS)) + .setValue(ControllerRailBlock.SHAPE, state.getValue(RAIL_SHAPE)) + .setValue(ControllerRailBlock.BACKWARDS, state.getValue(BACKWARDS)) .rotate(rotation); - return state.with(RAIL_SHAPE, base.get(ControllerRailBlock.SHAPE)) - .with(BACKWARDS, base.get(ControllerRailBlock.BACKWARDS)); + return state.setValue(RAIL_SHAPE, base.getValue(ControllerRailBlock.SHAPE)) + .setValue(BACKWARDS, base.getValue(ControllerRailBlock.BACKWARDS)); } @Override @@ -346,21 +348,21 @@ public class CartAssemblerBlock extends AbstractRailBlock if (mirror == Mirror.NONE) return state; BlockState base = AllBlocks.CONTROLLER_RAIL.getDefaultState() - .with(ControllerRailBlock.SHAPE, state.get(RAIL_SHAPE)) - .with(ControllerRailBlock.BACKWARDS, state.get(BACKWARDS)) + .setValue(ControllerRailBlock.SHAPE, state.getValue(RAIL_SHAPE)) + .setValue(ControllerRailBlock.BACKWARDS, state.getValue(BACKWARDS)) .mirror(mirror); - return state.with(BACKWARDS, base.get(ControllerRailBlock.BACKWARDS)); + return state.setValue(BACKWARDS, base.getValue(ControllerRailBlock.BACKWARDS)); } public static Direction getHorizontalDirection(BlockState blockState) { if (!(blockState.getBlock() instanceof CartAssemblerBlock)) return Direction.SOUTH; Direction pointingTo = getPointingTowards(blockState); - return blockState.get(BACKWARDS) ? pointingTo.getOpposite() : pointingTo; + return blockState.getValue(BACKWARDS) ? pointingTo.getOpposite() : pointingTo; } private static Direction getPointingTowards(BlockState state) { - switch (state.get(RAIL_SHAPE)) { + switch (state.getValue(RAIL_SHAPE)) { case EAST_WEST: return Direction.WEST; default: diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/mounted/CartAssemblerBlockItem.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/mounted/CartAssemblerBlockItem.java index b09d2a59c..cb597bab5 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/mounted/CartAssemblerBlockItem.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/mounted/CartAssemblerBlockItem.java @@ -21,6 +21,8 @@ import net.minecraft.util.SoundEvents; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; +import net.minecraft.item.Item.Properties; + public class CartAssemblerBlockItem extends BlockItem { public CartAssemblerBlockItem(Block block, Properties properties) { @@ -29,18 +31,18 @@ public class CartAssemblerBlockItem extends BlockItem { @Override @Nonnull - public ActionResultType onItemUse(ItemUseContext context) { + public ActionResultType useOn(ItemUseContext context) { if (tryPlaceAssembler(context)) { - context.getWorld() - .playSound(null, context.getPos(), SoundEvents.BLOCK_STONE_PLACE, SoundCategory.BLOCKS, 1, 1); + context.getLevel() + .playSound(null, context.getClickedPos(), SoundEvents.STONE_PLACE, SoundCategory.BLOCKS, 1, 1); return ActionResultType.SUCCESS; } - return super.onItemUse(context); + return super.useOn(context); } public boolean tryPlaceAssembler(ItemUseContext context) { - BlockPos pos = context.getPos(); - World world = context.getWorld(); + BlockPos pos = context.getClickedPos(); + World world = context.getLevel(); BlockState state = world.getBlockState(pos); Block block = state.getBlock(); PlayerEntity player = context.getPlayer(); @@ -52,33 +54,33 @@ public class CartAssemblerBlockItem extends BlockItem { return false; } - RailShape shape = state.get(((AbstractRailBlock) block).getShapeProperty()); + RailShape shape = state.getValue(((AbstractRailBlock) block).getShapeProperty()); if (shape != RailShape.EAST_WEST && shape != RailShape.NORTH_SOUTH) return false; BlockState newState = AllBlocks.CART_ASSEMBLER.getDefaultState() - .with(CartAssemblerBlock.RAIL_SHAPE, shape); + .setValue(CartAssemblerBlock.RAIL_SHAPE, shape); CartAssembleRailType newType = null; for (CartAssembleRailType type : CartAssembleRailType.values()) if (type.matches(state)) newType = type; if (newType == null) return false; - if (world.isRemote) + if (world.isClientSide) return true; - newState = newState.with(CartAssemblerBlock.RAIL_TYPE, newType); - if (state.contains(ControllerRailBlock.BACKWARDS)) - newState = newState.with(CartAssemblerBlock.BACKWARDS, state.get(ControllerRailBlock.BACKWARDS)); + newState = newState.setValue(CartAssemblerBlock.RAIL_TYPE, newType); + if (state.hasProperty(ControllerRailBlock.BACKWARDS)) + newState = newState.setValue(CartAssemblerBlock.BACKWARDS, state.getValue(ControllerRailBlock.BACKWARDS)); else { - Direction direction = player.getAdjustedHorizontalFacing(); + Direction direction = player.getMotionDirection(); newState = - newState.with(CartAssemblerBlock.BACKWARDS, direction.getAxisDirection() == AxisDirection.POSITIVE); + newState.setValue(CartAssemblerBlock.BACKWARDS, direction.getAxisDirection() == AxisDirection.POSITIVE); } - world.setBlockState(pos, newState); + world.setBlockAndUpdate(pos, newState); if (!player.isCreative()) - context.getItem() + context.getItemInHand() .shrink(1); return true; } 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 ea52e21b3..80393ed1e 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 @@ -73,43 +73,43 @@ public class CartAssemblerTileEntity extends SmartTileEntity implements IDisplay return; resetTicksSinceMinecartUpdate(); - BlockState state = world.getBlockState(pos); + BlockState state = level.getBlockState(worldPosition); if (!AllBlocks.CART_ASSEMBLER.has(state)) return; CartAssemblerBlock block = (CartAssemblerBlock) state.getBlock(); CartAssemblerBlock.CartAssemblerAction action = CartAssemblerBlock.getActionForCart(state, cart); if (action.shouldAssemble()) - assemble(world, pos, cart); + assemble(level, worldPosition, cart); if (action.shouldDisassemble()) - disassemble(world, pos, cart); + disassemble(level, worldPosition, cart); if (action == CartAssemblerBlock.CartAssemblerAction.ASSEMBLE_ACCELERATE) { - if (cart.getMotion() + if (cart.getDeltaMovement() .length() > 1 / 128f) { - Direction facing = cart.getAdjustedHorizontalFacing(); - RailShape railShape = state.get(CartAssemblerBlock.RAIL_SHAPE); + Direction facing = cart.getMotionDirection(); + RailShape railShape = state.getValue(CartAssemblerBlock.RAIL_SHAPE); for (Direction d : Iterate.directionsInAxis(railShape == RailShape.EAST_WEST ? Axis.X : Axis.Z)) - if (world.getBlockState(pos.offset(d)) - .isNormalCube(world, pos.offset(d))) + if (level.getBlockState(worldPosition.relative(d)) + .isRedstoneConductor(level, worldPosition.relative(d))) facing = d.getOpposite(); - float speed = block.getRailMaxSpeed(state, world, pos, cart); - cart.setMotion(facing.getXOffset() * speed, facing.getYOffset() * speed, facing.getZOffset() * speed); + float speed = block.getRailMaxSpeed(state, level, worldPosition, cart); + cart.setDeltaMovement(facing.getStepX() * speed, facing.getStepY() * speed, facing.getStepZ() * speed); } } if (action == CartAssemblerBlock.CartAssemblerAction.ASSEMBLE_ACCELERATE_DIRECTIONAL) { Vector3i accelerationVector = ControllerRailBlock.getAccelerationVector(AllBlocks.CONTROLLER_RAIL.getDefaultState() - .with(ControllerRailBlock.SHAPE, state.get(CartAssemblerBlock.RAIL_SHAPE)) - .with(ControllerRailBlock.BACKWARDS, state.get(CartAssemblerBlock.BACKWARDS))); - float speed = block.getRailMaxSpeed(state, world, pos, cart); - cart.setMotion(Vector3d.of(accelerationVector) + .setValue(ControllerRailBlock.SHAPE, state.getValue(CartAssemblerBlock.RAIL_SHAPE)) + .setValue(ControllerRailBlock.BACKWARDS, state.getValue(CartAssemblerBlock.BACKWARDS))); + float speed = block.getRailMaxSpeed(state, level, worldPosition, cart); + cart.setDeltaMovement(Vector3d.atLowerCornerOf(accelerationVector) .scale(speed)); } if (action == CartAssemblerBlock.CartAssemblerAction.DISASSEMBLE_BRAKE) { - Vector3d diff = VecHelper.getCenterOf(pos) - .subtract(cart.getPositionVec()); - cart.setMotion(diff.x / 16f, 0, diff.z / 16f); + Vector3d diff = VecHelper.getCenterOf(worldPosition) + .subtract(cart.position()); + cart.setDeltaMovement(diff.x / 16f, 0, diff.z / 16f); } } @@ -143,9 +143,9 @@ public class CartAssemblerTileEntity extends SmartTileEntity implements IDisplay Direction initialOrientation = CartAssemblerBlock.getHorizontalDirection(getBlockState()); if (couplingFound) { - cart.setPosition(pos.getX() + .5f, pos.getY(), pos.getZ() + .5f); - if (!CouplingHandler.tryToCoupleCarts(null, world, cart.getEntityId(), - contraption.connectedCart.getEntityId())) + cart.setPos(pos.getX() + .5f, pos.getY(), pos.getZ() + .5f); + if (!CouplingHandler.tryToCoupleCarts(null, world, cart.getId(), + contraption.connectedCart.getId())) return; } @@ -154,16 +154,16 @@ public class CartAssemblerTileEntity extends SmartTileEntity implements IDisplay contraption.expandBoundsAroundAxis(Axis.Y); if (couplingFound) { - Vector3d diff = contraption.connectedCart.getPositionVec() - .subtract(cart.getPositionVec()); - initialOrientation = Direction.fromAngle(MathHelper.atan2(diff.z, diff.x) * 180 / Math.PI); + Vector3d diff = contraption.connectedCart.position() + .subtract(cart.position()); + initialOrientation = Direction.fromYRot(MathHelper.atan2(diff.z, diff.x) * 180 / Math.PI); } OrientedContraptionEntity entity = OrientedContraptionEntity.create(world, contraption, initialOrientation); if (couplingFound) - entity.setCouplingId(cart.getUniqueID()); - entity.setPosition(pos.getX(), pos.getY(), pos.getZ()); - world.addEntity(entity); + entity.setCouplingId(cart.getUUID()); + entity.setPos(pos.getX(), pos.getY(), pos.getZ()); + world.addFreshEntity(entity); entity.startRiding(cart); if (cart instanceof FurnaceMinecartEntity) { @@ -187,7 +187,7 @@ public class CartAssemblerTileEntity extends SmartTileEntity implements IDisplay if (couplingId == null) { contraption.yaw = CartAssemblerBlock.getHorizontalDirection(getBlockState()) - .getHorizontalAngle(); + .toYRot(); disassembleCart(cart); return; } @@ -202,7 +202,7 @@ public class CartAssemblerTileEntity extends SmartTileEntity implements IDisplay if (minecartController.cart() == cart) continue; BlockPos otherPos = minecartController.cart() - .getBlockPos(); + .blockPosition(); BlockState blockState = world.getBlockState(otherPos); if (!AllBlocks.CART_ASSEMBLER.has(blockState)) return; @@ -218,11 +218,11 @@ public class CartAssemblerTileEntity extends SmartTileEntity implements IDisplay } protected void disassembleCart(AbstractMinecartEntity cart) { - cart.removePassengers(); + cart.ejectPassengers(); if (cart instanceof FurnaceMinecartEntity) { CompoundNBT nbt = cart.serializeNBT(); - nbt.putDouble("PushZ", cart.getMotion().x); - nbt.putDouble("PushX", cart.getMotion().z); + nbt.putDouble("PushZ", cart.getDeltaMovement().x); + nbt.putDouble("PushX", cart.getDeltaMovement().z); cart.deserializeNBT(nbt); } } @@ -263,9 +263,9 @@ public class CartAssemblerTileEntity extends SmartTileEntity implements IDisplay if (d.getAxis() .isVertical()) return false; - if (!state.contains(CartAssemblerBlock.RAIL_SHAPE)) + if (!state.hasProperty(CartAssemblerBlock.RAIL_SHAPE)) return false; - RailShape railShape = state.get(CartAssemblerBlock.RAIL_SHAPE); + RailShape railShape = state.getValue(CartAssemblerBlock.RAIL_SHAPE); return (d.getAxis() == Axis.X) == (railShape == RailShape.NORTH_SOUTH); }); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/mounted/ItemHandlerModifiableFromIInventory.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/mounted/ItemHandlerModifiableFromIInventory.java index 3dd313411..669bff17e 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/mounted/ItemHandlerModifiableFromIInventory.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/mounted/ItemHandlerModifiableFromIInventory.java @@ -21,17 +21,17 @@ public class ItemHandlerModifiableFromIInventory implements IItemHandlerModifiab @Override public void setStackInSlot(int slot, ItemStack stack) { - inventory.setInventorySlotContents(slot, stack); + inventory.setItem(slot, stack); } @Override public int getSlots() { - return inventory.getSizeInventory(); + return inventory.getContainerSize(); } @Override public ItemStack getStackInSlot(int slot) { - return inventory.getStackInSlot(slot); + return inventory.getItem(slot); } @Override @@ -119,12 +119,12 @@ public class ItemHandlerModifiableFromIInventory implements IItemHandlerModifiab @Override public int getSlotLimit(int slot) { - return inventory.getInventoryStackLimit(); + return inventory.getMaxStackSize(); } @Override public boolean isItemValid(int slot, ItemStack stack) { - return inventory.isItemValidForSlot(slot, stack); + return inventory.canPlaceItem(slot, stack); } private void validateSlotIndex(int slot) diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/mounted/MinecartContraptionItem.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/mounted/MinecartContraptionItem.java index 3bd9f4fe4..8e88ff2a5 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/mounted/MinecartContraptionItem.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/mounted/MinecartContraptionItem.java @@ -46,6 +46,8 @@ import net.minecraftforge.event.entity.player.PlayerInteractEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod.EventBusSubscriber; +import net.minecraft.item.Item.Properties; + @EventBusSubscriber public class MinecartContraptionItem extends Item { @@ -66,7 +68,7 @@ public class MinecartContraptionItem extends Item { private MinecartContraptionItem(Type minecartTypeIn, Properties builder) { super(builder); this.minecartType = minecartTypeIn; - DispenserBlock.registerDispenseBehavior(this, DISPENSER_BEHAVIOR); + DispenserBlock.registerBehavior(this, DISPENSER_BEHAVIOR); } // Taken and adjusted from MinecartItem @@ -74,35 +76,35 @@ public class MinecartContraptionItem extends Item { private final DefaultDispenseItemBehavior behaviourDefaultDispenseItem = new DefaultDispenseItemBehavior(); @Override - public ItemStack dispenseStack(IBlockSource source, ItemStack stack) { + public ItemStack execute(IBlockSource source, ItemStack stack) { Direction direction = source.getBlockState() - .get(DispenserBlock.FACING); - World world = source.getWorld(); - double d0 = source.getX() + (double) direction.getXOffset() * 1.125D; - double d1 = Math.floor(source.getY()) + (double) direction.getYOffset(); - double d2 = source.getZ() + (double) direction.getZOffset() * 1.125D; - BlockPos blockpos = source.getBlockPos() - .offset(direction); + .getValue(DispenserBlock.FACING); + World world = source.getLevel(); + double d0 = source.x() + (double) direction.getStepX() * 1.125D; + double d1 = Math.floor(source.y()) + (double) direction.getStepY(); + double d2 = source.z() + (double) direction.getStepZ() * 1.125D; + BlockPos blockpos = source.getPos() + .relative(direction); BlockState blockstate = world.getBlockState(blockpos); RailShape railshape = blockstate.getBlock() instanceof AbstractRailBlock ? ((AbstractRailBlock) blockstate.getBlock()).getRailDirection(blockstate, world, blockpos, null) : RailShape.NORTH_SOUTH; double d3; - if (blockstate.isIn(BlockTags.RAILS)) { + if (blockstate.is(BlockTags.RAILS)) { if (railshape.isAscending()) { d3 = 0.6D; } else { d3 = 0.1D; } } else { - if (blockstate.getMaterial() != Material.AIR || !world.getBlockState(blockpos.down()) - .isIn(BlockTags.RAILS)) { + if (blockstate.getMaterial() != Material.AIR || !world.getBlockState(blockpos.below()) + .is(BlockTags.RAILS)) { return this.behaviourDefaultDispenseItem.dispense(source, stack); } - BlockState blockstate1 = world.getBlockState(blockpos.down()); + BlockState blockstate1 = world.getBlockState(blockpos.below()); RailShape railshape1 = blockstate1.getBlock() instanceof AbstractRailBlock - ? ((AbstractRailBlock) blockstate1.getBlock()).getRailDirection(blockstate1, world, blockpos.down(), + ? ((AbstractRailBlock) blockstate1.getBlock()).getRailDirection(blockstate1, world, blockpos.below(), null) : RailShape.NORTH_SOUTH; if (direction != Direction.DOWN && railshape1.isAscending()) { @@ -112,11 +114,11 @@ public class MinecartContraptionItem extends Item { } } - AbstractMinecartEntity abstractminecartentity = AbstractMinecartEntity.create(world, d0, d1 + d3, d2, + AbstractMinecartEntity abstractminecartentity = AbstractMinecartEntity.createMinecart(world, d0, d1 + d3, d2, ((MinecartContraptionItem) stack.getItem()).minecartType); - if (stack.hasDisplayName()) - abstractminecartentity.setCustomName(stack.getDisplayName()); - world.addEntity(abstractminecartentity); + if (stack.hasCustomHoverName()) + abstractminecartentity.setCustomName(stack.getHoverName()); + world.addFreshEntity(abstractminecartentity); addContraptionToMinecart(world, stack, abstractminecartentity, direction); stack.shrink(1); @@ -124,23 +126,23 @@ public class MinecartContraptionItem extends Item { } @Override - protected void playDispenseSound(IBlockSource source) { - source.getWorld() - .playEvent(1000, source.getBlockPos(), 0); + protected void playSound(IBlockSource source) { + source.getLevel() + .levelEvent(1000, source.getPos(), 0); } }; // Taken and adjusted from MinecartItem @Override - public ActionResultType onItemUse(ItemUseContext context) { - World world = context.getWorld(); - BlockPos blockpos = context.getPos(); + public ActionResultType useOn(ItemUseContext context) { + World world = context.getLevel(); + BlockPos blockpos = context.getClickedPos(); BlockState blockstate = world.getBlockState(blockpos); - if (!blockstate.isIn(BlockTags.RAILS)) { + if (!blockstate.is(BlockTags.RAILS)) { return ActionResultType.FAIL; } else { - ItemStack itemstack = context.getItem(); - if (!world.isRemote) { + ItemStack itemstack = context.getItemInHand(); + if (!world.isClientSide) { RailShape railshape = blockstate.getBlock() instanceof AbstractRailBlock ? ((AbstractRailBlock) blockstate.getBlock()).getRailDirection(blockstate, world, blockpos, null) : RailShape.NORTH_SOUTH; @@ -150,14 +152,14 @@ public class MinecartContraptionItem extends Item { } AbstractMinecartEntity abstractminecartentity = - AbstractMinecartEntity.create(world, (double) blockpos.getX() + 0.5D, + AbstractMinecartEntity.createMinecart(world, (double) blockpos.getX() + 0.5D, (double) blockpos.getY() + 0.0625D + d0, (double) blockpos.getZ() + 0.5D, this.minecartType); - if (itemstack.hasDisplayName()) - abstractminecartentity.setCustomName(itemstack.getDisplayName()); + if (itemstack.hasCustomHoverName()) + abstractminecartentity.setCustomName(itemstack.getHoverName()); PlayerEntity player = context.getPlayer(); - world.addEntity(abstractminecartentity); + world.addFreshEntity(abstractminecartentity); addContraptionToMinecart(world, itemstack, abstractminecartentity, - player == null ? null : player.getHorizontalFacing()); + player == null ? null : player.getDirection()); } itemstack.shrink(1); @@ -177,21 +179,21 @@ public class MinecartContraptionItem extends Item { OrientedContraptionEntity contraptionEntity = newFacing == null ? OrientedContraptionEntity.create(world, mountedContraption, intialOrientation) : OrientedContraptionEntity.createAtYaw(world, mountedContraption, intialOrientation, - newFacing.getHorizontalAngle()); + newFacing.toYRot()); contraptionEntity.startRiding(cart); - contraptionEntity.setPosition(cart.getX(), cart.getY(), cart.getZ()); - world.addEntity(contraptionEntity); + contraptionEntity.setPos(cart.getX(), cart.getY(), cart.getZ()); + world.addFreshEntity(contraptionEntity); } } @Override - public String getTranslationKey(ItemStack stack) { + public String getDescriptionId(ItemStack stack) { return "item.create.minecart_contraption"; } @Override - public void fillItemGroup(ItemGroup group, NonNullList items) {} + public void fillItemCategory(ItemGroup group, NonNullList items) {} @SubscribeEvent public static void wrenchCanBeUsedToPickUpMinecartContraptions(PlayerInteractEvent.EntityInteract event) { @@ -200,11 +202,11 @@ public class MinecartContraptionItem extends Item { if (player == null || entity == null) return; - ItemStack wrench = player.getHeldItem(event.getHand()); + ItemStack wrench = player.getItemInHand(event.getHand()); if (!AllItems.WRENCH.isIn(wrench)) return; if (entity instanceof AbstractContraptionEntity) - entity = entity.getRidingEntity(); + entity = entity.getVehicle(); if (!(entity instanceof AbstractMinecartEntity)) return; if (!entity.isAlive()) @@ -222,27 +224,27 @@ public class MinecartContraptionItem extends Item { Contraption blocks = contraption.getContraption(); if (blocks != null && blocks.getBlocks().values().stream() .anyMatch(i -> i.state.getBlock() instanceof SpawnerBlock)) { - player.sendStatusMessage(Lang.translate("contraption.minecart_contraption_illegal_pickup") - .formatted(TextFormatting.RED), true); + player.displayClientMessage(Lang.translate("contraption.minecart_contraption_illegal_pickup") + .withStyle(TextFormatting.RED), true); return; } } - if (event.getWorld().isRemote) { + if (event.getWorld().isClientSide) { event.setCancellationResult(ActionResultType.SUCCESS); event.setCanceled(true); return; } - ItemStack generatedStack = create(type, contraption).setDisplayName(entity.getCustomName()); + ItemStack generatedStack = create(type, contraption).setHoverName(entity.getCustomName()); try { ByteArrayDataOutput dataOutput = ByteStreams.newDataOutput(); CompressedStreamTools.write(generatedStack.serializeNBT(), dataOutput); int estimatedPacketSize = dataOutput.toByteArray().length; if (estimatedPacketSize > 2_000_000) { - player.sendStatusMessage(Lang.translate("contraption.minecart_contraption_too_big") - .formatted(TextFormatting.RED), true); + player.displayClientMessage(Lang.translate("contraption.minecart_contraption_too_big") + .withStyle(TextFormatting.RED), true); return; } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/mounted/MountedContraption.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/mounted/MountedContraption.java index 9f4149f81..959dcc4cf 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/mounted/MountedContraption.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/mounted/MountedContraption.java @@ -35,6 +35,8 @@ import net.minecraft.world.gen.feature.template.Template.BlockInfo; import net.minecraftforge.items.IItemHandlerModifiable; import net.minecraftforge.items.wrapper.InvWrapper; +import com.simibubi.create.content.contraptions.components.structureMovement.Contraption.ContraptionInvWrapper; + public class MountedContraption extends Contraption { public CartMovementMode rotationMode; @@ -56,14 +58,14 @@ public class MountedContraption extends Contraption { @Override public boolean assemble(World world, BlockPos pos) throws AssemblyException { BlockState state = world.getBlockState(pos); - if (!state.contains(RAIL_SHAPE)) + if (!state.hasProperty(RAIL_SHAPE)) return false; if (!searchMovedStructure(world, pos, null)) return false; - Axis axis = state.get(RAIL_SHAPE) == RailShape.EAST_WEST ? Axis.X : Axis.Z; + Axis axis = state.getValue(RAIL_SHAPE) == RailShape.EAST_WEST ? Axis.X : Axis.Z; addBlock(pos, Pair.of(new BlockInfo(pos, AllBlocks.MINECART_ANCHOR.getDefaultState() - .with(BlockStateProperties.HORIZONTAL_AXIS, axis), null), null)); + .setValue(BlockStateProperties.HORIZONTAL_AXIS, axis), null), null)); if (blocks.size() == 1) return false; @@ -74,7 +76,7 @@ public class MountedContraption extends Contraption { @Override protected boolean addToInitialFrontier(World world, BlockPos pos, Direction direction, Queue frontier) { frontier.clear(); - frontier.add(pos.up()); + frontier.add(pos.above()); return true; } @@ -94,11 +96,11 @@ public class MountedContraption extends Contraption { if (axis.isVertical() || !VecHelper.onSameAxis(anchor, pos, axis)) continue; for (AbstractMinecartEntity abstractMinecartEntity : world - .getEntitiesWithinAABB(AbstractMinecartEntity.class, new AxisAlignedBB(pos))) { + .getEntitiesOfClass(AbstractMinecartEntity.class, new AxisAlignedBB(pos))) { if (!CartAssemblerBlock.canAssembleTo(abstractMinecartEntity)) break; connectedCart = abstractMinecartEntity; - connectedCart.setPosition(pos.getX() + .5, pos.getY(), pos.getZ() + .5f); + connectedCart.setPos(pos.getX() + .5, pos.getY(), pos.getZ() + .5f); } } @@ -117,7 +119,7 @@ public class MountedContraption extends Contraption { if (axis.isVertical() || !VecHelper.onSameAxis(anchor, pos, axis)) continue; for (AbstractMinecartEntity abstractMinecartEntity : world - .getEntitiesWithinAABB(AbstractMinecartEntity.class, new AxisAlignedBB(pos))) { + .getEntitiesOfClass(AbstractMinecartEntity.class, new AxisAlignedBB(pos))) { if (!CartAssemblerBlock.canAssembleTo(abstractMinecartEntity)) break; return true; diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/piston/LinearActuatorTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/piston/LinearActuatorTileEntity.java index 35dfac048..bb4962679 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/piston/LinearActuatorTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/piston/LinearActuatorTileEntity.java @@ -21,6 +21,8 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.vector.Vector3d; +import com.simibubi.create.content.contraptions.components.structureMovement.IControlContraption.MovementMode; + public abstract class LinearActuatorTileEntity extends KineticTileEntity implements IControlContraption, IDisplayAssemblyExceptions { @@ -61,11 +63,11 @@ public abstract class LinearActuatorTileEntity extends KineticTileEntity movedContraption = null; } - if (world.isRemote) + if (level.isClientSide) clientOffsetDiff *= .75f; if (waitingForSpeedChange && movedContraption != null) { - if (world.isRemote) { + if (level.isClientSide) { float syncSpeed = clientOffsetDiff / 2f; offset += syncSpeed; movedContraption.setContraptionMotion(toMotionVector(syncSpeed)); @@ -75,7 +77,7 @@ public abstract class LinearActuatorTileEntity extends KineticTileEntity return; } - if (!world.isRemote && assembleNextTick) { + if (!level.isClientSide && assembleNextTick) { assembleNextTick = false; if (running) { if (getSpeed() == 0) @@ -114,7 +116,7 @@ public abstract class LinearActuatorTileEntity extends KineticTileEntity int extensionRange = getExtensionRange(); if (offset <= 0 || offset >= extensionRange) { offset = offset <= 0 ? 0 : extensionRange; - if (!world.isRemote) { + if (!level.isClientSide) { applyContraptionMotion(); applyContraptionPosition(); tryDisassemble(); @@ -130,7 +132,7 @@ public abstract class LinearActuatorTileEntity extends KineticTileEntity @Override public void lazyTick() { super.lazyTick(); - if (movedContraption != null && !world.isRemote) + if (movedContraption != null && !level.isClientSide) sendData(); } @@ -152,16 +154,16 @@ public abstract class LinearActuatorTileEntity extends KineticTileEntity if (movedContraption != null && Math.signum(prevSpeed) != Math.signum(getSpeed()) && prevSpeed != 0) { movedContraption.getContraption() - .stop(world); + .stop(level); } } @Override - public void remove() { - this.removed = true; - if (!world.isRemote) + public void setRemoved() { + this.remove = true; + if (!level.isClientSide) disassemble(); - super.remove(); + super.setRemoved(); } @Override @@ -223,7 +225,7 @@ public abstract class LinearActuatorTileEntity extends KineticTileEntity protected void visitNewPosition() {} protected void tryDisassemble() { - if (removed) { + if (remove) { disassemble(); return; } @@ -241,7 +243,7 @@ public abstract class LinearActuatorTileEntity extends KineticTileEntity @Override public void collided() { - if (world.isRemote) { + if (level.isClientSide) { waitingForSpeedChange = true; return; } @@ -264,14 +266,14 @@ public abstract class LinearActuatorTileEntity extends KineticTileEntity if (movedContraption == null) return; Vector3d vec = toPosition(offset); - movedContraption.setPosition(vec.x, vec.y, vec.z); + movedContraption.setPos(vec.x, vec.y, vec.z); if (getSpeed() == 0 || waitingForSpeedChange) movedContraption.setContraptionMotion(Vector3d.ZERO); } public float getMovementSpeed() { float movementSpeed = MathHelper.clamp(convertToLinear(getSpeed()), -.49f, .49f) + clientOffsetDiff / 2f; - if (world.isRemote) + if (level.isClientSide) movementSpeed *= ServerSpeedProvider.get(); return movementSpeed; } @@ -282,7 +284,7 @@ public abstract class LinearActuatorTileEntity extends KineticTileEntity @Override public void onStall() { - if (!world.isRemote) { + if (!level.isClientSide) { forceMove = true; sendData(); } @@ -301,7 +303,7 @@ public abstract class LinearActuatorTileEntity extends KineticTileEntity @Override public void attach(ControlledContraptionEntity contraption) { this.movedContraption = contraption; - if (!world.isRemote) { + if (!level.isClientSide) { this.running = true; sendData(); } @@ -314,6 +316,6 @@ public abstract class LinearActuatorTileEntity extends KineticTileEntity @Override public BlockPos getBlockPosition() { - return pos; + return worldPosition; } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/piston/MechanicalPistonBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/piston/MechanicalPistonBlock.java index 98efed20f..04d12e65b 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/piston/MechanicalPistonBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/piston/MechanicalPistonBlock.java @@ -35,6 +35,8 @@ import net.minecraft.world.World; import net.minecraft.world.server.ServerWorld; import net.minecraftforge.common.Tags; +import net.minecraft.block.AbstractBlock.Properties; + public class MechanicalPistonBlock extends DirectionalAxisKineticBlock implements ITE { public static final EnumProperty STATE = EnumProperty.create("state", PistonState.class); @@ -50,75 +52,75 @@ public class MechanicalPistonBlock extends DirectionalAxisKineticBlock implement protected MechanicalPistonBlock(Properties properties, boolean sticky) { super(properties); - setDefaultState(getDefaultState().with(FACING, Direction.NORTH) - .with(STATE, PistonState.RETRACTED)); + registerDefaultState(defaultBlockState().setValue(FACING, Direction.NORTH) + .setValue(STATE, PistonState.RETRACTED)); isSticky = sticky; } @Override - protected void fillStateContainer(Builder builder) { + protected void createBlockStateDefinition(Builder builder) { builder.add(STATE); - super.fillStateContainer(builder); + super.createBlockStateDefinition(builder); } @Override - public ActionResultType onUse(BlockState state, World worldIn, BlockPos pos, PlayerEntity player, Hand handIn, + public ActionResultType use(BlockState state, World worldIn, BlockPos pos, PlayerEntity player, Hand handIn, BlockRayTraceResult hit) { - if (!player.isAllowEdit()) + if (!player.mayBuild()) return ActionResultType.PASS; - if (player.isSneaking()) + if (player.isShiftKeyDown()) return ActionResultType.PASS; - if (!player.getHeldItem(handIn) + if (!player.getItemInHand(handIn) .getItem() - .isIn(Tags.Items.SLIMEBALLS)) { - if (player.getHeldItem(handIn) + .is(Tags.Items.SLIMEBALLS)) { + if (player.getItemInHand(handIn) .isEmpty()) { withTileEntityDo(worldIn, pos, te -> te.assembleNextTick = true); return ActionResultType.SUCCESS; } return ActionResultType.PASS; } - if (state.get(STATE) != PistonState.RETRACTED) + if (state.getValue(STATE) != PistonState.RETRACTED) return ActionResultType.PASS; - Direction direction = state.get(FACING); - if (hit.getFace() != direction) + Direction direction = state.getValue(FACING); + if (hit.getDirection() != direction) return ActionResultType.PASS; if (((MechanicalPistonBlock) state.getBlock()).isSticky) return ActionResultType.PASS; - if (worldIn.isRemote) { - Vector3d vec = hit.getHitVec(); + if (worldIn.isClientSide) { + Vector3d vec = hit.getLocation(); worldIn.addParticle(ParticleTypes.ITEM_SLIME, vec.x, vec.y, vec.z, 0, 0, 0); return ActionResultType.SUCCESS; } AllSoundEvents.SLIME_ADDED.playOnServer(worldIn, pos, .5f, 1); if (!player.isCreative()) - player.getHeldItem(handIn) + player.getItemInHand(handIn) .shrink(1); - worldIn.setBlockState(pos, AllBlocks.STICKY_MECHANICAL_PISTON.getDefaultState() - .with(FACING, direction) - .with(AXIS_ALONG_FIRST_COORDINATE, state.get(AXIS_ALONG_FIRST_COORDINATE))); + worldIn.setBlockAndUpdate(pos, AllBlocks.STICKY_MECHANICAL_PISTON.getDefaultState() + .setValue(FACING, direction) + .setValue(AXIS_ALONG_FIRST_COORDINATE, state.getValue(AXIS_ALONG_FIRST_COORDINATE))); return ActionResultType.SUCCESS; } @Override public void neighborChanged(BlockState state, World world, BlockPos pos, Block p_220069_4_, BlockPos fromPos, boolean p_220069_6_) { - Direction direction = state.get(FACING); - if (!fromPos.equals(pos.offset(direction.getOpposite()))) + Direction direction = state.getValue(FACING); + if (!fromPos.equals(pos.relative(direction.getOpposite()))) return; - if (!world.isRemote && !world.getPendingBlockTicks() - .isTickPending(pos, this)) - world.getPendingBlockTicks() + if (!world.isClientSide && !world.getBlockTicks() + .willTickThisTick(pos, this)) + world.getBlockTicks() .scheduleTick(pos, this, 0); } @Override - public void scheduledTick(BlockState state, ServerWorld worldIn, BlockPos pos, Random r) { - Direction direction = state.get(FACING); - BlockState pole = worldIn.getBlockState(pos.offset(direction.getOpposite())); + public void tick(BlockState state, ServerWorld worldIn, BlockPos pos, Random r) { + Direction direction = state.getValue(FACING); + BlockState pole = worldIn.getBlockState(pos.relative(direction.getOpposite())); if (!AllBlocks.PISTON_EXTENSION_POLE.has(pole)) return; - if (pole.get(PistonExtensionPoleBlock.FACING) + if (pole.getValue(PistonExtensionPoleBlock.FACING) .getAxis() != direction.getAxis()) return; withTileEntityDo(worldIn, pos, te -> { @@ -136,7 +138,7 @@ public class MechanicalPistonBlock extends DirectionalAxisKineticBlock implement @Override public ActionResultType onWrenched(BlockState state, ItemUseContext context) { - if (state.get(STATE) != PistonState.RETRACTED) + if (state.getValue(STATE) != PistonState.RETRACTED) return ActionResultType.PASS; return super.onWrenched(state, context); } @@ -145,28 +147,28 @@ public class MechanicalPistonBlock extends DirectionalAxisKineticBlock implement RETRACTED, MOVING, EXTENDED; @Override - public String getString() { + public String getSerializedName() { return Lang.asId(name()); } } @Override - public void onBlockHarvested(World worldIn, BlockPos pos, BlockState state, PlayerEntity player) { - Direction direction = state.get(FACING); + public void playerWillDestroy(World worldIn, BlockPos pos, BlockState state, PlayerEntity player) { + Direction direction = state.getValue(FACING); BlockPos pistonHead = null; BlockPos pistonBase = pos; boolean dropBlocks = player == null || !player.isCreative(); Integer maxPoles = maxAllowedPistonPoles(); for (int offset = 1; offset < maxPoles; offset++) { - BlockPos currentPos = pos.offset(direction, offset); + BlockPos currentPos = pos.relative(direction, offset); BlockState block = worldIn.getBlockState(currentPos); - if (isExtensionPole(block) && direction.getAxis() == block.get(BlockStateProperties.FACING) + if (isExtensionPole(block) && direction.getAxis() == block.getValue(BlockStateProperties.FACING) .getAxis()) continue; - if (isPistonHead(block) && block.get(BlockStateProperties.FACING) == direction) { + if (isPistonHead(block) && block.getValue(BlockStateProperties.FACING) == direction) { pistonHead = currentPos; } @@ -174,16 +176,16 @@ public class MechanicalPistonBlock extends DirectionalAxisKineticBlock implement } if (pistonHead != null && pistonBase != null) { - BlockPos.getAllInBox(pistonBase, pistonHead) + BlockPos.betweenClosedStream(pistonBase, pistonHead) .filter(p -> !p.equals(pos)) .forEach(p -> worldIn.destroyBlock(p, dropBlocks)); } for (int offset = 1; offset < maxPoles; offset++) { - BlockPos currentPos = pos.offset(direction.getOpposite(), offset); + BlockPos currentPos = pos.relative(direction.getOpposite(), offset); BlockState block = worldIn.getBlockState(currentPos); - if (isExtensionPole(block) && direction.getAxis() == block.get(BlockStateProperties.FACING) + if (isExtensionPole(block) && direction.getAxis() == block.getValue(BlockStateProperties.FACING) .getAxis()) { worldIn.destroyBlock(currentPos, dropBlocks); continue; @@ -192,7 +194,7 @@ public class MechanicalPistonBlock extends DirectionalAxisKineticBlock implement break; } - super.onBlockHarvested(worldIn, pos, state, player); + super.playerWillDestroy(worldIn, pos, state, player); } public static int maxAllowedPistonPoles() { @@ -202,13 +204,13 @@ public class MechanicalPistonBlock extends DirectionalAxisKineticBlock implement @Override public VoxelShape getShape(BlockState state, IBlockReader worldIn, BlockPos pos, ISelectionContext context) { - if (state.get(STATE) == PistonState.EXTENDED) - return AllShapes.MECHANICAL_PISTON_EXTENDED.get(state.get(FACING)); + if (state.getValue(STATE) == PistonState.EXTENDED) + return AllShapes.MECHANICAL_PISTON_EXTENDED.get(state.getValue(FACING)); - if (state.get(STATE) == PistonState.MOVING) - return AllShapes.MECHANICAL_PISTON.get(state.get(FACING)); + if (state.getValue(STATE) == PistonState.MOVING) + return AllShapes.MECHANICAL_PISTON.get(state.getValue(FACING)); - return VoxelShapes.fullCube(); + return VoxelShapes.block(); } @Override diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/piston/MechanicalPistonGenerator.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/piston/MechanicalPistonGenerator.java index 34e30c52c..4b3363bcf 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/piston/MechanicalPistonGenerator.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/piston/MechanicalPistonGenerator.java @@ -23,14 +23,14 @@ public class MechanicalPistonGenerator extends SpecialBlockStateGen { @Override protected int getXRotation(BlockState state) { - Direction facing = state.get(MechanicalPistonBlock.FACING); + Direction facing = state.getValue(MechanicalPistonBlock.FACING); return facing.getAxis() .isVertical() ? facing == Direction.DOWN ? 180 : 0 : 90; } @Override protected int getYRotation(BlockState state) { - Direction facing = state.get(MechanicalPistonBlock.FACING); + Direction facing = state.getValue(MechanicalPistonBlock.FACING); return facing.getAxis() .isVertical() ? 0 : horizontalAngle(facing) + 180; } @@ -38,12 +38,12 @@ public class MechanicalPistonGenerator extends SpecialBlockStateGen { @Override public ModelFile getModel(DataGenContext ctx, RegistrateBlockstateProvider prov, BlockState state) { - Direction facing = state.get(PistonBlock.FACING); - boolean axisAlongFirst = state.get(MechanicalPistonBlock.AXIS_ALONG_FIRST_COORDINATE); - PistonState pistonState = state.get(MechanicalPistonBlock.STATE); + Direction facing = state.getValue(PistonBlock.FACING); + boolean axisAlongFirst = state.getValue(MechanicalPistonBlock.AXIS_ALONG_FIRST_COORDINATE); + PistonState pistonState = state.getValue(MechanicalPistonBlock.STATE); String path = "block/mechanical_piston"; - String folder = pistonState == PistonState.RETRACTED ? type.getString() : pistonState.getString(); + String folder = pistonState == PistonState.RETRACTED ? type.getSerializedName() : pistonState.getSerializedName(); String partial = facing.getAxis() == Axis.X ^ axisAlongFirst ? "block_rotated" : "block"; return prov.models() diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/piston/MechanicalPistonHeadBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/piston/MechanicalPistonHeadBlock.java index fe9c50d8a..0b8e4553c 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/piston/MechanicalPistonHeadBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/piston/MechanicalPistonHeadBlock.java @@ -30,23 +30,25 @@ import net.minecraft.world.IBlockReader; import net.minecraft.world.IWorld; import net.minecraft.world.World; +import net.minecraft.block.AbstractBlock.Properties; + public class MechanicalPistonHeadBlock extends ProperDirectionalBlock implements IWaterLoggable { public static final EnumProperty TYPE = BlockStateProperties.PISTON_TYPE; public MechanicalPistonHeadBlock(Properties p_i48415_1_) { super(p_i48415_1_); - setDefaultState(super.getDefaultState().with(BlockStateProperties.WATERLOGGED, false)); + registerDefaultState(super.defaultBlockState().setValue(BlockStateProperties.WATERLOGGED, false)); } @Override - protected void fillStateContainer(Builder builder) { + protected void createBlockStateDefinition(Builder builder) { builder.add(TYPE, BlockStateProperties.WATERLOGGED); - super.fillStateContainer(builder); + super.createBlockStateDefinition(builder); } @Override - public PushReaction getPushReaction(BlockState state) { + public PushReaction getPistonPushReaction(BlockState state) { return PushReaction.NORMAL; } @@ -57,20 +59,20 @@ public class MechanicalPistonHeadBlock extends ProperDirectionalBlock implements } @Override - public void onBlockHarvested(World worldIn, BlockPos pos, BlockState state, PlayerEntity player) { - Direction direction = state.get(FACING); + public void playerWillDestroy(World worldIn, BlockPos pos, BlockState state, PlayerEntity player) { + Direction direction = state.getValue(FACING); BlockPos pistonHead = pos; BlockPos pistonBase = null; for (int offset = 1; offset < MechanicalPistonBlock.maxAllowedPistonPoles(); offset++) { - BlockPos currentPos = pos.offset(direction.getOpposite(), offset); + BlockPos currentPos = pos.relative(direction.getOpposite(), offset); BlockState block = worldIn.getBlockState(currentPos); - if (isExtensionPole(block) && direction.getAxis() == block.get(BlockStateProperties.FACING) + if (isExtensionPole(block) && direction.getAxis() == block.getValue(BlockStateProperties.FACING) .getAxis()) continue; - if (MechanicalPistonBlock.isPiston(block) && block.get(BlockStateProperties.FACING) == direction) + if (MechanicalPistonBlock.isPiston(block) && block.getValue(BlockStateProperties.FACING) == direction) pistonBase = currentPos; break; @@ -78,43 +80,43 @@ public class MechanicalPistonHeadBlock extends ProperDirectionalBlock implements if (pistonHead != null && pistonBase != null) { final BlockPos basePos = pistonBase; - BlockPos.getAllInBox(pistonBase, pistonHead) + BlockPos.betweenClosedStream(pistonBase, pistonHead) .filter(p -> !p.equals(pos) && !p.equals(basePos)) .forEach(p -> worldIn.destroyBlock(p, !player.isCreative())); - worldIn.setBlockState(basePos, worldIn.getBlockState(basePos) - .with(MechanicalPistonBlock.STATE, PistonState.RETRACTED)); + worldIn.setBlockAndUpdate(basePos, worldIn.getBlockState(basePos) + .setValue(MechanicalPistonBlock.STATE, PistonState.RETRACTED)); } - super.onBlockHarvested(worldIn, pos, state, player); + super.playerWillDestroy(worldIn, pos, state, player); } @Override public VoxelShape getShape(BlockState state, IBlockReader worldIn, BlockPos pos, ISelectionContext context) { - return AllShapes.MECHANICAL_PISTON_HEAD.get(state.get(FACING)); + return AllShapes.MECHANICAL_PISTON_HEAD.get(state.getValue(FACING)); } @Override public FluidState getFluidState(BlockState state) { - return state.get(BlockStateProperties.WATERLOGGED) ? Fluids.WATER.getStillFluidState(false) : Fluids.EMPTY.getDefaultState(); + return state.getValue(BlockStateProperties.WATERLOGGED) ? Fluids.WATER.getSource(false) : Fluids.EMPTY.defaultFluidState(); } @Override - public BlockState updatePostPlacement(BlockState state, Direction direction, BlockState neighbourState, + public BlockState updateShape(BlockState state, Direction direction, BlockState neighbourState, IWorld world, BlockPos pos, BlockPos neighbourPos) { - if (state.get(BlockStateProperties.WATERLOGGED)) { - world.getPendingFluidTicks().scheduleTick(pos, Fluids.WATER, Fluids.WATER.getTickRate(world)); + if (state.getValue(BlockStateProperties.WATERLOGGED)) { + world.getLiquidTicks().scheduleTick(pos, Fluids.WATER, Fluids.WATER.getTickDelay(world)); } return state; } @Override public BlockState getStateForPlacement(BlockItemUseContext context) { - FluidState FluidState = context.getWorld().getFluidState(context.getPos()); - return super.getStateForPlacement(context).with(BlockStateProperties.WATERLOGGED, Boolean.valueOf(FluidState.getFluid() == Fluids.WATER)); + FluidState FluidState = context.getLevel().getFluidState(context.getClickedPos()); + return super.getStateForPlacement(context).setValue(BlockStateProperties.WATERLOGGED, Boolean.valueOf(FluidState.getType() == Fluids.WATER)); } @Override - public boolean allowsMovement(BlockState state, IBlockReader reader, BlockPos pos, PathType type) { + public boolean isPathfindable(BlockState state, IBlockReader reader, BlockPos pos, PathType type) { return false; } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/piston/MechanicalPistonTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/piston/MechanicalPistonTileEntity.java index 8297c9b20..5ca97b096 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/piston/MechanicalPistonTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/piston/MechanicalPistonTileEntity.java @@ -45,23 +45,23 @@ public class MechanicalPistonTileEntity extends LinearActuatorTileEntity { @Override public void assemble() throws AssemblyException { - if (!(world.getBlockState(pos) + if (!(level.getBlockState(worldPosition) .getBlock() instanceof MechanicalPistonBlock)) return; - Direction direction = getBlockState().get(BlockStateProperties.FACING); + Direction direction = getBlockState().getValue(BlockStateProperties.FACING); // Collect Construct PistonContraption contraption = new PistonContraption(direction, getMovementSpeed() < 0); - if (!contraption.assemble(world, pos)) + if (!contraption.assemble(level, worldPosition)) return; - Direction positive = Direction.getFacingFromAxis(AxisDirection.POSITIVE, direction.getAxis()); + Direction positive = Direction.get(AxisDirection.POSITIVE, direction.getAxis()); Direction movementDirection = getSpeed() > 0 ^ direction.getAxis() != Axis.Z ? positive : positive.getOpposite(); - BlockPos anchor = contraption.anchor.offset(direction, contraption.initialExtensionProgress); - if (ContraptionCollider.isCollidingWithWorld(world, contraption, anchor.offset(movementDirection), + BlockPos anchor = contraption.anchor.relative(direction, contraption.initialExtensionProgress); + if (ContraptionCollider.isCollidingWithWorld(level, contraption, anchor.relative(movementDirection), movementDirection)) return; @@ -78,35 +78,35 @@ public class MechanicalPistonTileEntity extends LinearActuatorTileEntity { sendData(); clientOffsetDiff = 0; - BlockPos startPos = BlockPos.ZERO.offset(direction, contraption.initialExtensionProgress); - contraption.removeBlocksFromWorld(world, startPos); - movedContraption = ControlledContraptionEntity.create(getWorld(), this, contraption); + BlockPos startPos = BlockPos.ZERO.relative(direction, contraption.initialExtensionProgress); + contraption.removeBlocksFromWorld(level, startPos); + movedContraption = ControlledContraptionEntity.create(getLevel(), this, contraption); applyContraptionPosition(); forceMove = true; - world.addEntity(movedContraption); + level.addFreshEntity(movedContraption); - AllSoundEvents.CONTRAPTION_ASSEMBLE.playOnServer(world, pos); + AllSoundEvents.CONTRAPTION_ASSEMBLE.playOnServer(level, worldPosition); } @Override public void disassemble() { if (!running && movedContraption == null) return; - if (!removed) - getWorld().setBlockState(pos, getBlockState().with(MechanicalPistonBlock.STATE, PistonState.EXTENDED), + if (!remove) + getLevel().setBlock(worldPosition, getBlockState().setValue(MechanicalPistonBlock.STATE, PistonState.EXTENDED), 3 | 16); if (movedContraption != null) { applyContraptionPosition(); movedContraption.disassemble(); - AllSoundEvents.CONTRAPTION_DISASSEMBLE.playOnServer(world, pos); + AllSoundEvents.CONTRAPTION_DISASSEMBLE.playOnServer(level, worldPosition); } running = false; movedContraption = null; sendData(); - if (removed) + if (remove) AllBlocks.MECHANICAL_PISTON.get() - .onBlockHarvested(world, pos, getBlockState(), null); + .playerWillDestroy(level, worldPosition, getBlockState(), null); } @Override @@ -119,11 +119,11 @@ public class MechanicalPistonTileEntity extends LinearActuatorTileEntity { @Override public float getMovementSpeed() { float movementSpeed = MathHelper.clamp(convertToLinear(getSpeed()), -.49f, .49f); - if (world.isRemote) + if (level.isClientSide) movementSpeed *= ServerSpeedProvider.get(); - Direction pistonDirection = getBlockState().get(BlockStateProperties.FACING); + Direction pistonDirection = getBlockState().getValue(BlockStateProperties.FACING); int movementModifier = pistonDirection.getAxisDirection() - .getOffset() * (pistonDirection.getAxis() == Axis.Z ? -1 : 1); + .getStep() * (pistonDirection.getAxis() == Axis.Z ? -1 : 1); movementSpeed = movementSpeed * -movementModifier + clientOffsetDiff / 2f; int extensionRange = getExtensionRange(); @@ -141,24 +141,24 @@ public class MechanicalPistonTileEntity extends LinearActuatorTileEntity { @Override protected Vector3d toMotionVector(float speed) { - Direction pistonDirection = getBlockState().get(BlockStateProperties.FACING); - return Vector3d.of(pistonDirection.getDirectionVec()) + Direction pistonDirection = getBlockState().getValue(BlockStateProperties.FACING); + return Vector3d.atLowerCornerOf(pistonDirection.getNormal()) .scale(speed); } @Override protected Vector3d toPosition(float offset) { - Vector3d position = Vector3d.of(getBlockState().get(BlockStateProperties.FACING) - .getDirectionVec()) + Vector3d position = Vector3d.atLowerCornerOf(getBlockState().getValue(BlockStateProperties.FACING) + .getNormal()) .scale(offset); - return position.add(Vector3d.of(movedContraption.getContraption().anchor)); + return position.add(Vector3d.atLowerCornerOf(movedContraption.getContraption().anchor)); } @Override protected ValueBoxTransform getMovementModeSlot() { return new DirectionalExtenderScrollOptionSlot((state, d) -> { Axis axis = d.getAxis(); - Axis extensionAxis = state.get(MechanicalPistonBlock.FACING) + Axis extensionAxis = state.getValue(MechanicalPistonBlock.FACING) .getAxis(); Axis shaftAxis = ((IRotate) state.getBlock()).getRotationAxis(state); return extensionAxis != axis && shaftAxis != axis; diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/piston/PistonContraption.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/piston/PistonContraption.java index b8c33f45b..5c79bd6fb 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/piston/PistonContraption.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/piston/PistonContraption.java @@ -70,7 +70,7 @@ public class PistonContraption extends TranslatingContraption { if (blocks.size() == count) { // no new blocks added bounds = pistonExtensionCollisionBox; } else { - bounds = bounds.union(pistonExtensionCollisionBox); + bounds = bounds.minmax(pistonExtensionCollisionBox); } startMoving(world); return true; @@ -79,7 +79,7 @@ public class PistonContraption extends TranslatingContraption { private boolean collectExtensions(World world, BlockPos pos, Direction direction) throws AssemblyException { List poles = new ArrayList<>(); BlockPos actualStart = pos; - BlockState nextBlock = world.getBlockState(actualStart.offset(direction)); + BlockState nextBlock = world.getBlockState(actualStart.relative(direction)); int extensionsInFront = 0; BlockState blockState = world.getBlockState(pos); boolean sticky = isStickyPiston(blockState); @@ -87,17 +87,17 @@ public class PistonContraption extends TranslatingContraption { if (!isPiston(blockState)) return false; - if (blockState.get(MechanicalPistonBlock.STATE) == PistonState.EXTENDED) { - while (PistonExtensionPoleBlock.PlacementHelper.get().matchesAxis(nextBlock, direction.getAxis()) || isPistonHead(nextBlock) && nextBlock.get(FACING) == direction) { + if (blockState.getValue(MechanicalPistonBlock.STATE) == PistonState.EXTENDED) { + while (PistonExtensionPoleBlock.PlacementHelper.get().matchesAxis(nextBlock, direction.getAxis()) || isPistonHead(nextBlock) && nextBlock.getValue(FACING) == direction) { - actualStart = actualStart.offset(direction); - poles.add(new BlockInfo(actualStart, nextBlock.with(FACING, direction), null)); + actualStart = actualStart.relative(direction); + poles.add(new BlockInfo(actualStart, nextBlock.setValue(FACING, direction), null)); extensionsInFront++; if (isPistonHead(nextBlock)) break; - nextBlock = world.getBlockState(actualStart.offset(direction)); + nextBlock = world.getBlockState(actualStart.relative(direction)); if (extensionsInFront > MechanicalPistonBlock.maxAllowedPistonPoles()) throw AssemblyException.tooManyPistonPoles(); } @@ -105,32 +105,32 @@ public class PistonContraption extends TranslatingContraption { if (extensionsInFront == 0) poles.add(new BlockInfo(pos, MECHANICAL_PISTON_HEAD.getDefaultState() - .with(FACING, direction) - .with(BlockStateProperties.PISTON_TYPE, sticky ? PistonType.STICKY : PistonType.DEFAULT), null)); + .setValue(FACING, direction) + .setValue(BlockStateProperties.PISTON_TYPE, sticky ? PistonType.STICKY : PistonType.DEFAULT), null)); else poles.add(new BlockInfo(pos, PISTON_EXTENSION_POLE.getDefaultState() - .with(FACING, direction), null)); + .setValue(FACING, direction), null)); BlockPos end = pos; - nextBlock = world.getBlockState(end.offset(direction.getOpposite())); + nextBlock = world.getBlockState(end.relative(direction.getOpposite())); int extensionsInBack = 0; while (PistonExtensionPoleBlock.PlacementHelper.get().matchesAxis(nextBlock, direction.getAxis())) { - end = end.offset(direction.getOpposite()); - poles.add(new BlockInfo(end, nextBlock.with(FACING, direction), null)); + end = end.relative(direction.getOpposite()); + poles.add(new BlockInfo(end, nextBlock.setValue(FACING, direction), null)); extensionsInBack++; - nextBlock = world.getBlockState(end.offset(direction.getOpposite())); + nextBlock = world.getBlockState(end.relative(direction.getOpposite())); if (extensionsInFront + extensionsInBack > MechanicalPistonBlock.maxAllowedPistonPoles()) throw AssemblyException.tooManyPistonPoles(); } - anchor = pos.offset(direction, initialExtensionProgress + 1); + anchor = pos.relative(direction, initialExtensionProgress + 1); extensionLength = extensionsInBack + extensionsInFront; initialExtensionProgress = extensionsInFront; pistonExtensionCollisionBox = new AxisAlignedBB( - BlockPos.ZERO.offset(direction, -1), - BlockPos.ZERO.offset(direction, -extensionLength - 1)).expand(1, + BlockPos.ZERO.relative(direction, -1), + BlockPos.ZERO.relative(direction, -extensionLength - 1)).expandTowards(1, 1, 1); if (extensionLength == 0) @@ -139,7 +139,7 @@ public class PistonContraption extends TranslatingContraption { bounds = new AxisAlignedBB(0, 0, 0, 0, 0, 0); for (BlockInfo pole : poles) { - BlockPos relPos = pole.pos.offset(direction, -extensionsInFront); + BlockPos relPos = pole.pos.relative(direction, -extensionsInFront); BlockPos localPos = relPos.subtract(anchor); getBlocks().put(localPos, new BlockInfo(localPos, pole.state, null)); //pistonExtensionCollisionBox = pistonExtensionCollisionBox.union(new AxisAlignedBB(localPos)); @@ -156,31 +156,31 @@ public class PistonContraption extends TranslatingContraption { @Override protected boolean addToInitialFrontier(World world, BlockPos pos, Direction direction, Queue frontier) throws AssemblyException { frontier.clear(); - boolean sticky = isStickyPiston(world.getBlockState(pos.offset(orientation, -1))); + boolean sticky = isStickyPiston(world.getBlockState(pos.relative(orientation, -1))); boolean retracting = direction != orientation; if (retracting && !sticky) return true; for (int offset = 0; offset <= AllConfigs.SERVER.kinetics.maxChassisRange.get(); offset++) { if (offset == 1 && retracting) return true; - BlockPos currentPos = pos.offset(orientation, offset + initialExtensionProgress); + BlockPos currentPos = pos.relative(orientation, offset + initialExtensionProgress); if (retracting && World.isOutsideBuildHeight(currentPos)) return true; - if (!world.isBlockPresent(currentPos)) + if (!world.isLoaded(currentPos)) throw AssemblyException.unloadedChunk(currentPos); BlockState state = world.getBlockState(currentPos); if (!BlockMovementChecks.isMovementNecessary(state, world, currentPos)) return true; if (BlockMovementChecks.isBrittle(state) && !(state.getBlock() instanceof CarpetBlock)) return true; - if (isPistonHead(state) && state.get(FACING) == direction.getOpposite()) + if (isPistonHead(state) && state.getValue(FACING) == direction.getOpposite()) return true; if (!BlockMovementChecks.isMovementAllowed(state, world, currentPos)) if (retracting) return true; else throw AssemblyException.unmovableBlock(currentPos, state); - if (retracting && state.getPushReaction() == PushReaction.PUSH_ONLY) + if (retracting && state.getPistonPushReaction() == PushReaction.PUSH_ONLY) return true; frontier.add(currentPos); if (BlockMovementChecks.isNotSupportive(state, orientation)) @@ -191,25 +191,25 @@ public class PistonContraption extends TranslatingContraption { @Override public void addBlock(BlockPos pos, Pair capture) { - super.addBlock(pos.offset(orientation, -initialExtensionProgress), capture); + super.addBlock(pos.relative(orientation, -initialExtensionProgress), capture); } @Override public BlockPos toLocalPos(BlockPos globalPos) { return globalPos.subtract(anchor) - .offset(orientation, -initialExtensionProgress); + .relative(orientation, -initialExtensionProgress); } @Override protected boolean customBlockPlacement(IWorld world, BlockPos pos, BlockState state) { - BlockPos pistonPos = anchor.offset(orientation, -1); + BlockPos pistonPos = anchor.relative(orientation, -1); BlockState pistonState = world.getBlockState(pistonPos); - TileEntity te = world.getTileEntity(pistonPos); + TileEntity te = world.getBlockEntity(pistonPos); if (pos.equals(pistonPos)) { if (te == null || te.isRemoved()) return true; if (!isExtensionPole(state) && isPiston(pistonState)) - world.setBlockState(pistonPos, pistonState.with(MechanicalPistonBlock.STATE, PistonState.RETRACTED), + world.setBlock(pistonPos, pistonState.setValue(MechanicalPistonBlock.STATE, PistonState.RETRACTED), 3 | 16); return true; } @@ -218,10 +218,10 @@ public class PistonContraption extends TranslatingContraption { @Override protected boolean customBlockRemoval(IWorld world, BlockPos pos, BlockState state) { - BlockPos pistonPos = anchor.offset(orientation, -1); + BlockPos pistonPos = anchor.relative(orientation, -1); BlockState blockState = world.getBlockState(pos); if (pos.equals(pistonPos) && isPiston(blockState)) { - world.setBlockState(pos, blockState.with(MechanicalPistonBlock.STATE, PistonState.MOVING), 66 | 16); + world.setBlock(pos, blockState.setValue(MechanicalPistonBlock.STATE, PistonState.MOVING), 66 | 16); return true; } return false; @@ -232,7 +232,7 @@ public class PistonContraption extends TranslatingContraption { super.readNBT(world, nbt, spawnData); initialExtensionProgress = nbt.getInt("InitialLength"); extensionLength = nbt.getInt("ExtensionLength"); - orientation = Direction.byIndex(nbt.getInt("Orientation")); + orientation = Direction.from3DDataValue(nbt.getInt("Orientation")); } @Override @@ -240,7 +240,7 @@ public class PistonContraption extends TranslatingContraption { CompoundNBT tag = super.writeNBT(spawnPacket); tag.putInt("InitialLength", initialExtensionProgress); tag.putInt("ExtensionLength", extensionLength); - tag.putInt("Orientation", orientation.getIndex()); + tag.putInt("Orientation", orientation.get3DDataValue()); return tag; } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/piston/PistonExtensionPoleBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/piston/PistonExtensionPoleBlock.java index 38191de92..658c60781 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/piston/PistonExtensionPoleBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/piston/PistonExtensionPoleBlock.java @@ -44,13 +44,15 @@ import net.minecraft.world.IWorld; import net.minecraft.world.World; import net.minecraftforge.common.ToolType; +import net.minecraft.block.AbstractBlock.Properties; + public class PistonExtensionPoleBlock extends ProperDirectionalBlock implements IWrenchable, IWaterLoggable { private static final int placementHelperId = PlacementHelpers.register(PlacementHelper.get()); public PistonExtensionPoleBlock(Properties properties) { super(properties); - setDefaultState(getDefaultState().with(FACING, Direction.UP).with(BlockStateProperties.WATERLOGGED, false)); + registerDefaultState(defaultBlockState().setValue(FACING, Direction.UP).setValue(BlockStateProperties.WATERLOGGED, false)); } @Override @@ -60,7 +62,7 @@ public class PistonExtensionPoleBlock extends ProperDirectionalBlock implements @Override public boolean canHarvestBlock(BlockState state, IBlockReader world, BlockPos pos, PlayerEntity player) { - for (ToolType toolType : player.getHeldItemMainhand() + for (ToolType toolType : player.getMainHandItem() .getToolTypes()) { if (isToolEffective(state, toolType)) return true; @@ -74,33 +76,33 @@ public class PistonExtensionPoleBlock extends ProperDirectionalBlock implements } @Override - public PushReaction getPushReaction(BlockState state) { + public PushReaction getPistonPushReaction(BlockState state) { return PushReaction.NORMAL; } @Override - public void onBlockHarvested(World worldIn, BlockPos pos, BlockState state, PlayerEntity player) { - Axis axis = state.get(FACING) + public void playerWillDestroy(World worldIn, BlockPos pos, BlockState state, PlayerEntity player) { + Axis axis = state.getValue(FACING) .getAxis(); - Direction direction = Direction.getFacingFromAxis(AxisDirection.POSITIVE, axis); + Direction direction = Direction.get(AxisDirection.POSITIVE, axis); BlockPos pistonHead = null; BlockPos pistonBase = null; for (int modifier : new int[] { 1, -1 }) { for (int offset = modifier; modifier * offset < MechanicalPistonBlock.maxAllowedPistonPoles(); offset += modifier) { - BlockPos currentPos = pos.offset(direction, offset); + BlockPos currentPos = pos.relative(direction, offset); BlockState block = worldIn.getBlockState(currentPos); - if (isExtensionPole(block) && axis == block.get(FACING) + if (isExtensionPole(block) && axis == block.getValue(FACING) .getAxis()) continue; - if (isPiston(block) && block.get(BlockStateProperties.FACING) + if (isPiston(block) && block.getValue(BlockStateProperties.FACING) .getAxis() == axis) pistonBase = currentPos; - if (isPistonHead(block) && block.get(BlockStateProperties.FACING) + if (isPistonHead(block) && block.getValue(BlockStateProperties.FACING) .getAxis() == axis) pistonHead = currentPos; @@ -109,17 +111,17 @@ public class PistonExtensionPoleBlock extends ProperDirectionalBlock implements } if (pistonHead != null && pistonBase != null && worldIn.getBlockState(pistonHead) - .get(BlockStateProperties.FACING) == worldIn.getBlockState(pistonBase) - .get(BlockStateProperties.FACING)) { + .getValue(BlockStateProperties.FACING) == worldIn.getBlockState(pistonBase) + .getValue(BlockStateProperties.FACING)) { final BlockPos basePos = pistonBase; - BlockPos.getAllInBox(pistonBase, pistonHead) + BlockPos.betweenClosedStream(pistonBase, pistonHead) .filter(p -> !p.equals(pos) && !p.equals(basePos)) .forEach(p -> worldIn.destroyBlock(p, !player.isCreative())); - worldIn.setBlockState(basePos, worldIn.getBlockState(basePos) - .with(MechanicalPistonBlock.STATE, PistonState.RETRACTED)); + worldIn.setBlockAndUpdate(basePos, worldIn.getBlockState(basePos) + .setValue(MechanicalPistonBlock.STATE, PistonState.RETRACTED)); - TileEntity te = worldIn.getTileEntity(basePos); + TileEntity te = worldIn.getBlockEntity(basePos); if (te instanceof MechanicalPistonTileEntity) { MechanicalPistonTileEntity baseTE = (MechanicalPistonTileEntity) te; baseTE.offset = 0; @@ -127,31 +129,31 @@ public class PistonExtensionPoleBlock extends ProperDirectionalBlock implements } } - super.onBlockHarvested(worldIn, pos, state, player); + super.playerWillDestroy(worldIn, pos, state, player); } @Override public VoxelShape getShape(BlockState state, IBlockReader worldIn, BlockPos pos, ISelectionContext context) { - return AllShapes.FOUR_VOXEL_POLE.get(state.get(FACING) + return AllShapes.FOUR_VOXEL_POLE.get(state.getValue(FACING) .getAxis()); } @Override public BlockState getStateForPlacement(BlockItemUseContext context) { - FluidState FluidState = context.getWorld() - .getFluidState(context.getPos()); - return getDefaultState().with(FACING, context.getFace() + FluidState FluidState = context.getLevel() + .getFluidState(context.getClickedPos()); + return defaultBlockState().setValue(FACING, context.getClickedFace() .getOpposite()) - .with(BlockStateProperties.WATERLOGGED, Boolean.valueOf(FluidState.getFluid() == Fluids.WATER)); + .setValue(BlockStateProperties.WATERLOGGED, Boolean.valueOf(FluidState.getType() == Fluids.WATER)); } @Override - public ActionResultType onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, + public ActionResultType use(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockRayTraceResult ray) { - ItemStack heldItem = player.getHeldItem(hand); + ItemStack heldItem = player.getItemInHand(hand); IPlacementHelper placementHelper = PlacementHelpers.get(placementHelperId); - if (placementHelper.matchesItem(heldItem) && !player.isSneaking()) + if (placementHelper.matchesItem(heldItem) && !player.isShiftKeyDown()) return placementHelper.getOffset(player, world, state, pos, ray).placeInWorld(world, (BlockItem) heldItem.getItem(), player, hand, ray); return ActionResultType.PASS; @@ -159,26 +161,26 @@ public class PistonExtensionPoleBlock extends ProperDirectionalBlock implements @Override public FluidState getFluidState(BlockState state) { - return state.get(BlockStateProperties.WATERLOGGED) ? Fluids.WATER.getStillFluidState(false) - : Fluids.EMPTY.getDefaultState(); + return state.getValue(BlockStateProperties.WATERLOGGED) ? Fluids.WATER.getSource(false) + : Fluids.EMPTY.defaultFluidState(); } @Override - protected void fillStateContainer(Builder builder) { + protected void createBlockStateDefinition(Builder builder) { builder.add(BlockStateProperties.WATERLOGGED); - super.fillStateContainer(builder); + super.createBlockStateDefinition(builder); } @Override - public BlockState updatePostPlacement(BlockState state, Direction direction, BlockState neighbourState, IWorld world, BlockPos pos, BlockPos neighbourPos) { - if (state.get(BlockStateProperties.WATERLOGGED)) { - world.getPendingFluidTicks().scheduleTick(pos, Fluids.WATER, Fluids.WATER.getTickRate(world)); + public BlockState updateShape(BlockState state, Direction direction, BlockState neighbourState, IWorld world, BlockPos pos, BlockPos neighbourPos) { + if (state.getValue(BlockStateProperties.WATERLOGGED)) { + world.getLiquidTicks().scheduleTick(pos, Fluids.WATER, Fluids.WATER.getTickDelay(world)); } return state; } @Override - public boolean allowsMovement(BlockState state, IBlockReader reader, BlockPos pos, PathType type) { + public boolean isPathfindable(BlockState state, IBlockReader reader, BlockPos pos, PathType type) { return false; } @@ -194,7 +196,7 @@ public class PistonExtensionPoleBlock extends ProperDirectionalBlock implements private PlacementHelper(){ super( AllBlocks.PISTON_EXTENSION_POLE::has, - state -> state.get(FACING).getAxis(), + state -> state.getValue(FACING).getAxis(), FACING ); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/piston/PistonLighter.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/piston/PistonLighter.java index 84fa87b31..1c05d8b77 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/piston/PistonLighter.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/piston/PistonLighter.java @@ -16,7 +16,7 @@ public class PistonLighter extends ContraptionLighter { bounds.translate(contraption.anchor); int length = contraption.extensionLength; - Vector3i direction = contraption.orientation.getDirectionVec(); + Vector3i direction = contraption.orientation.getNormal(); int shift = length / 2; int shiftX = direction.getX() * shift; diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/pulley/AbstractPulleyInstance.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/pulley/AbstractPulleyInstance.java index b77adc308..9e88c809c 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/pulley/AbstractPulleyInstance.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/pulley/AbstractPulleyInstance.java @@ -40,8 +40,8 @@ public abstract class AbstractPulleyInstance extends ShaftInstance implements ID public AbstractPulleyInstance(MaterialManager dispatcher, KineticTileEntity tile) { super(dispatcher, tile); - rotatingAbout = Direction.getFacingFromAxis(Direction.AxisDirection.POSITIVE, axis); - rotationAxis = rotatingAbout.getUnitVector(); + rotatingAbout = Direction.get(Direction.AxisDirection.POSITIVE, axis); + rotationAxis = rotatingAbout.step(); coil = getCoilModel() .createInstance() @@ -66,7 +66,7 @@ public abstract class AbstractPulleyInstance extends ShaftInstance implements ID private void transformModels() { resizeRope(); - coil.setRotation(rotationAxis.getDegreesQuaternion(offset * 180)); + coil.setRotation(rotationAxis.rotationDegrees(offset * 180)); magnet.update().get().ifPresent(data -> { int index = Math.max(0, MathHelper.floor(offset)); @@ -137,7 +137,7 @@ public abstract class AbstractPulleyInstance extends ShaftInstance implements ID int length = MathHelper.ceil(offset); if (volume == null || bLight.length < length + 1) { - volume = GridAlignedBB.from(pos.down(length), pos); + volume = GridAlignedBB.from(pos.below(length), pos); volume.fixMinMax(); bLight = Arrays.copyOf(bLight, length + 1); @@ -188,9 +188,9 @@ public abstract class AbstractPulleyInstance extends ShaftInstance implements ID int top = this.pos.getY(); BlockPos.Mutable pos = new BlockPos.Mutable(); changed.forEachContained((x, y, z) -> { - pos.setPos(x, y, z); - byte block = (byte) world.getLightLevel(LightType.BLOCK, pos); - byte sky = (byte) world.getLightLevel(LightType.SKY, pos); + pos.set(x, y, z); + byte block = (byte) world.getBrightness(LightType.BLOCK, pos); + byte sky = (byte) world.getBrightness(LightType.SKY, pos); int i = top - y; diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/pulley/AbstractPulleyRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/pulley/AbstractPulleyRenderer.java index f8994d9e7..5599b93a4 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/pulley/AbstractPulleyRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/pulley/AbstractPulleyRenderer.java @@ -36,7 +36,7 @@ public abstract class AbstractPulleyRenderer extends KineticTileEntityRenderer { } @Override - public boolean isGlobalRenderer(KineticTileEntity p_188185_1_) { + public boolean shouldRenderOffScreen(KineticTileEntity p_188185_1_) { return true; } @@ -44,7 +44,7 @@ public abstract class AbstractPulleyRenderer extends KineticTileEntityRenderer { protected void renderSafe(KineticTileEntity te, float partialTicks, MatrixStack ms, IRenderTypeBuffer buffer, int light, int overlay) { - if (Backend.getInstance().canUseInstancing(te.getWorld())) return; + if (Backend.getInstance().canUseInstancing(te.getLevel())) return; super.renderSafe(te, partialTicks, ms, buffer, light, overlay); float offset = getOffset(te, partialTicks); @@ -53,18 +53,18 @@ public abstract class AbstractPulleyRenderer extends KineticTileEntityRenderer { Axis rotationAxis = ((IRotate) te.getBlockState() .getBlock()).getRotationAxis(te.getBlockState()); kineticRotationTransform(getRotatedCoil(te), te, rotationAxis, AngleHelper.rad(offset * 180), light) - .renderInto(ms, buffer.getBuffer(RenderType.getSolid())); + .renderInto(ms, buffer.getBuffer(RenderType.solid())); - World world = te.getWorld(); + World world = te.getLevel(); BlockState blockState = te.getBlockState(); - BlockPos pos = te.getPos(); + BlockPos pos = te.getBlockPos(); SuperByteBuffer halfMagnet = PartialBufferer.get(this.halfMagnet, blockState); SuperByteBuffer halfRope = PartialBufferer.get(this.halfRope, blockState); SuperByteBuffer magnet = renderMagnet(te); SuperByteBuffer rope = renderRope(te); - IVertexBuilder vb = buffer.getBuffer(RenderType.getSolid()); + IVertexBuilder vb = buffer.getBuffer(RenderType.solid()); if (running || offset == 0) renderAt(world, offset > .25f ? magnet : halfMagnet, offset, pos, ms, vb); @@ -81,8 +81,8 @@ public abstract class AbstractPulleyRenderer extends KineticTileEntityRenderer { private void renderAt(IWorld world, SuperByteBuffer partial, float offset, BlockPos pulleyPos, MatrixStack ms, IVertexBuilder buffer) { - BlockPos actualPos = pulleyPos.down((int) offset); - int light = WorldRenderer.getLightmapCoordinates(world, world.getBlockState(actualPos), actualPos); + BlockPos actualPos = pulleyPos.below((int) offset); + int light = WorldRenderer.getLightColor(world, world.getBlockState(actualPos), actualPos); partial.translate(0, -offset, 0) .light(light) .renderInto(ms, buffer); @@ -107,7 +107,7 @@ public abstract class AbstractPulleyRenderer extends KineticTileEntityRenderer { protected SuperByteBuffer getRotatedCoil(KineticTileEntity te) { BlockState blockState = te.getBlockState(); - return PartialBufferer.getFacing(getCoil(), blockState, Direction.getFacingFromAxis(AxisDirection.POSITIVE, getShaftAxis(te))); + return PartialBufferer.getFacing(getCoil(), blockState, Direction.get(AxisDirection.POSITIVE, getShaftAxis(te))); } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/pulley/PulleyBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/pulley/PulleyBlock.java index adcaca95f..aafc9c3e2 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/pulley/PulleyBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/pulley/PulleyBlock.java @@ -33,6 +33,8 @@ import net.minecraft.world.IBlockReader; import net.minecraft.world.IWorld; import net.minecraft.world.World; +import net.minecraft.block.AbstractBlock.Properties; + public class PulleyBlock extends HorizontalAxisKineticBlock implements ITE { public static EnumProperty HORIZONTAL_AXIS = BlockStateProperties.HORIZONTAL_AXIS; @@ -42,7 +44,7 @@ public class PulleyBlock extends HorizontalAxisKineticBlock implements ITE te.assembleNextTick = true); return ActionResultType.SUCCESS; @@ -84,7 +86,7 @@ public class PulleyBlock extends HorizontalAxisKineticBlock implements ITE builder) { + protected void createBlockStateDefinition(Builder builder) { builder.add(BlockStateProperties.WATERLOGGED); - super.fillStateContainer(builder); + super.createBlockStateDefinition(builder); } @Override - public BlockState updatePostPlacement(BlockState state, Direction direction, BlockState neighbourState, + public BlockState updateShape(BlockState state, Direction direction, BlockState neighbourState, IWorld world, BlockPos pos, BlockPos neighbourPos) { - if (state.get(BlockStateProperties.WATERLOGGED)) { - world.getPendingFluidTicks().scheduleTick(pos, Fluids.WATER, Fluids.WATER.getTickRate(world)); + if (state.getValue(BlockStateProperties.WATERLOGGED)) { + world.getLiquidTicks().scheduleTick(pos, Fluids.WATER, Fluids.WATER.getTickDelay(world)); } return state; } @Override public BlockState getStateForPlacement(BlockItemUseContext context) { - FluidState FluidState = context.getWorld().getFluidState(context.getPos()); - return super.getStateForPlacement(context).with(BlockStateProperties.WATERLOGGED, Boolean.valueOf(FluidState.getFluid() == Fluids.WATER)); + FluidState FluidState = context.getLevel().getFluidState(context.getClickedPos()); + return super.getStateForPlacement(context).setValue(BlockStateProperties.WATERLOGGED, Boolean.valueOf(FluidState.getType() == Fluids.WATER)); } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/pulley/PulleyLighter.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/pulley/PulleyLighter.java index 27d75fa07..e148c3837 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/pulley/PulleyLighter.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/pulley/PulleyLighter.java @@ -17,9 +17,9 @@ public class PulleyLighter extends ContraptionLighter { GridAlignedBB bounds = GridAlignedBB.from(contraption.bounds); - World world = contraption.entity.world; + World world = contraption.entity.level; - BlockPos.Mutable pos = contraption.anchor.mutableCopy(); + BlockPos.Mutable pos = contraption.anchor.mutable(); while (!AllBlocks.ROPE_PULLEY.has(world.getBlockState(pos)) && pos.getY() < 256) { pos.move(0, 1, 0); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/pulley/PulleyRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/pulley/PulleyRenderer.java index c1813dc06..233dbe8d5 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/pulley/PulleyRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/pulley/PulleyRenderer.java @@ -21,7 +21,7 @@ public class PulleyRenderer extends AbstractPulleyRenderer { @Override protected Axis getShaftAxis(KineticTileEntity te) { return te.getBlockState() - .get(PulleyBlock.HORIZONTAL_AXIS); + .getValue(PulleyBlock.HORIZONTAL_AXIS); } @Override @@ -57,7 +57,7 @@ public class PulleyRenderer extends AbstractPulleyRenderer { if (tile.movedContraption != null) { AbstractContraptionEntity e = tile.movedContraption; PulleyContraption c = (PulleyContraption) tile.movedContraption.getContraption(); - double entityPos = MathHelper.lerp(partialTicks, e.lastTickPosY, e.getY()); + double entityPos = MathHelper.lerp(partialTicks, e.yOld, e.getY()); offset = (float) -(entityPos - c.anchor.getY() - c.initialOffset); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/pulley/PulleyTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/pulley/PulleyTileEntity.java index f892445c5..5af548f7c 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/pulley/PulleyTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/pulley/PulleyTileEntity.java @@ -35,12 +35,12 @@ public class PulleyTileEntity extends LinearActuatorTileEntity { @Override public AxisAlignedBB makeRenderBoundingBox() { - return super.makeRenderBoundingBox().expand(0, -offset, 0); + return super.makeRenderBoundingBox().expandTowards(0, -offset, 0); } @Override - public double getMaxRenderDistanceSquared() { - return super.getMaxRenderDistanceSquared() + offset * offset; + public double getViewDistance() { + return super.getViewDistance() + offset * offset; } @Override @@ -52,7 +52,7 @@ public class PulleyTileEntity extends LinearActuatorTileEntity { @Override protected void assemble() throws AssemblyException { - if (!(world.getBlockState(pos) + if (!(level.getBlockState(worldPosition) .getBlock() instanceof PulleyBlock)) return; if (speed == 0) @@ -60,8 +60,8 @@ public class PulleyTileEntity extends LinearActuatorTileEntity { int maxLength = AllConfigs.SERVER.kinetics.maxRopeLength.get(); int i = 1; while (i <= maxLength) { - BlockPos ropePos = pos.down(i); - BlockState ropeState = world.getBlockState(ropePos); + BlockPos ropePos = worldPosition.below(i); + BlockState ropeState = level.getBlockState(ropePos); if (!AllBlocks.ROPE.has(ropeState) && !AllBlocks.PULLEY_MAGNET.has(ropeState)) { break; } @@ -74,15 +74,15 @@ public class PulleyTileEntity extends LinearActuatorTileEntity { return; // Collect Construct - if (!world.isRemote) { - BlockPos anchor = pos.down(MathHelper.floor(offset + 1)); + if (!level.isClientSide) { + BlockPos anchor = worldPosition.below(MathHelper.floor(offset + 1)); initialOffset = MathHelper.floor(offset); PulleyContraption contraption = new PulleyContraption(initialOffset); - boolean canAssembleStructure = contraption.assemble(world, anchor); + boolean canAssembleStructure = contraption.assemble(level, anchor); if (canAssembleStructure) { Direction movementDirection = getSpeed() > 0 ? Direction.DOWN : Direction.UP; - if (ContraptionCollider.isCollidingWithWorld(world, contraption, anchor.offset(movementDirection), + if (ContraptionCollider.isCollidingWithWorld(level, contraption, anchor.relative(movementDirection), movementDirection)) canAssembleStructure = false; } @@ -91,21 +91,21 @@ public class PulleyTileEntity extends LinearActuatorTileEntity { return; for (i = ((int) offset); i > 0; i--) { - BlockPos offset = pos.down(i); - BlockState oldState = world.getBlockState(offset); - if (oldState.getBlock() instanceof IWaterLoggable && oldState.contains(BlockStateProperties.WATERLOGGED) - && oldState.get(BlockStateProperties.WATERLOGGED)) { - world.setBlockState(offset, Blocks.WATER.getDefaultState(), 66); + BlockPos offset = worldPosition.below(i); + BlockState oldState = level.getBlockState(offset); + if (oldState.getBlock() instanceof IWaterLoggable && oldState.hasProperty(BlockStateProperties.WATERLOGGED) + && oldState.getValue(BlockStateProperties.WATERLOGGED)) { + level.setBlock(offset, Blocks.WATER.defaultBlockState(), 66); continue; } - world.setBlockState(offset, Blocks.AIR.getDefaultState(), 66); + level.setBlock(offset, Blocks.AIR.defaultBlockState(), 66); } if (!contraption.getBlocks().isEmpty()) { - contraption.removeBlocksFromWorld(world, BlockPos.ZERO); - movedContraption = ControlledContraptionEntity.create(world, this, contraption); - movedContraption.setPosition(anchor.getX(), anchor.getY(), anchor.getZ()); - world.addEntity(movedContraption); + contraption.removeBlocksFromWorld(level, BlockPos.ZERO); + movedContraption = ControlledContraptionEntity.create(level, this, contraption); + movedContraption.setPos(anchor.getX(), anchor.getY(), anchor.getZ()); + level.addFreshEntity(movedContraption); forceMove = true; } } @@ -123,33 +123,33 @@ public class PulleyTileEntity extends LinearActuatorTileEntity { if (movedContraption != null) applyContraptionPosition(); - if (!world.isRemote) { - if (!removed) { + if (!level.isClientSide) { + if (!remove) { if (offset > 0) { - BlockPos magnetPos = pos.down((int) offset); - FluidState ifluidstate = world.getFluidState(magnetPos); - world.destroyBlock(magnetPos, world.getBlockState(magnetPos) - .getCollisionShape(world, magnetPos) + BlockPos magnetPos = worldPosition.below((int) offset); + FluidState ifluidstate = level.getFluidState(magnetPos); + level.destroyBlock(magnetPos, level.getBlockState(magnetPos) + .getCollisionShape(level, magnetPos) .isEmpty()); - world.setBlockState(magnetPos, AllBlocks.PULLEY_MAGNET.getDefaultState() - .with(BlockStateProperties.WATERLOGGED, - Boolean.valueOf(ifluidstate.getFluid() == Fluids.WATER)), + level.setBlock(magnetPos, AllBlocks.PULLEY_MAGNET.getDefaultState() + .setValue(BlockStateProperties.WATERLOGGED, + Boolean.valueOf(ifluidstate.getType() == Fluids.WATER)), 66); } boolean[] waterlog = new boolean[(int) offset]; for (int i = 1; i <= ((int) offset) - 1; i++) { - BlockPos ropePos = pos.down(i); - FluidState ifluidstate = world.getFluidState(ropePos); - waterlog[i] = ifluidstate.getFluid() == Fluids.WATER; - world.destroyBlock(ropePos, world.getBlockState(ropePos) - .getCollisionShape(world, ropePos) + BlockPos ropePos = worldPosition.below(i); + FluidState ifluidstate = level.getFluidState(ropePos); + waterlog[i] = ifluidstate.getType() == Fluids.WATER; + level.destroyBlock(ropePos, level.getBlockState(ropePos) + .getCollisionShape(level, ropePos) .isEmpty()); } for (int i = 1; i <= ((int) offset) - 1; i++) - world.setBlockState(pos.down(i), AllBlocks.ROPE.getDefaultState() - .with(BlockStateProperties.WATERLOGGED, waterlog[i]), 66); + level.setBlock(worldPosition.below(i), AllBlocks.ROPE.getDefaultState() + .setValue(BlockStateProperties.WATERLOGGED, waterlog[i]), 66); } if (movedContraption != null) @@ -168,7 +168,7 @@ public class PulleyTileEntity extends LinearActuatorTileEntity { protected Vector3d toPosition(float offset) { if (movedContraption.getContraption() instanceof PulleyContraption) { PulleyContraption contraption = (PulleyContraption) movedContraption.getContraption(); - return Vector3d.of(contraption.anchor).add(0, contraption.initialOffset - offset, 0); + return Vector3d.atLowerCornerOf(contraption.anchor).add(0, contraption.initialOffset - offset, 0); } return Vector3d.ZERO; @@ -177,16 +177,16 @@ public class PulleyTileEntity extends LinearActuatorTileEntity { @Override protected void visitNewPosition() { super.visitNewPosition(); - if (world.isRemote) + if (level.isClientSide) return; if (movedContraption != null) return; if (getSpeed() <= 0) return; - BlockPos posBelow = pos.down((int) (offset + getMovementSpeed()) + 1); - BlockState state = world.getBlockState(posBelow); - if (!BlockMovementChecks.isMovementNecessary(state, world, posBelow)) + BlockPos posBelow = worldPosition.below((int) (offset + getMovementSpeed()) + 1); + BlockState state = level.getBlockState(posBelow); + if (!BlockMovementChecks.isMovementNecessary(state, level, posBelow)) return; if (BlockMovementChecks.isBrittle(state)) return; @@ -209,7 +209,7 @@ public class PulleyTileEntity extends LinearActuatorTileEntity { @Override protected int getExtensionRange() { - return Math.max(0, Math.min(AllConfigs.SERVER.kinetics.maxRopeLength.get(), pos.getY() - 1)); + return Math.max(0, Math.min(AllConfigs.SERVER.kinetics.maxRopeLength.get(), worldPosition.getY() - 1)); } @Override diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/render/ActorInstance.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/render/ActorInstance.java index 4c02741d1..77ffe3c9f 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/render/ActorInstance.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/render/ActorInstance.java @@ -22,6 +22,6 @@ public abstract class ActorInstance { public void beginFrame() { } protected int localBlockLight() { - return simulationWorld.getLightLevel(LightType.BLOCK, context.localPos); + return simulationWorld.getBrightness(LightType.BLOCK, context.localPos); } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/render/ContraptionMatrices.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/render/ContraptionMatrices.java index d6e82d17d..199d07e48 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/render/ContraptionMatrices.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/render/ContraptionMatrices.java @@ -30,36 +30,36 @@ public class ContraptionMatrices { } public Matrix4f getFinalModel() { - Matrix4f finalModel = entityStack.peek().getModel().copy(); - finalModel.multiply(contraptionStack.peek().getModel()); + Matrix4f finalModel = entityStack.last().pose().copy(); + finalModel.multiply(contraptionStack.last().pose()); return finalModel; } public Matrix3f getFinalNormal() { - Matrix3f finalNormal = entityStack.peek().getNormal().copy(); - finalNormal.multiply(contraptionStack.peek().getNormal()); + Matrix3f finalNormal = entityStack.last().normal().copy(); + finalNormal.mul(contraptionStack.last().normal()); return finalNormal; } public Matrix4f getFinalLight() { Matrix4f lightTransform = entityMatrix.copy(); - lightTransform.multiply(contraptionStack.peek().getModel()); + lightTransform.multiply(contraptionStack.last().pose()); return lightTransform; } public static Matrix4f translateTo(Entity entity, float partialTicks) { - double x = MathHelper.lerp(partialTicks, entity.lastTickPosX, entity.getX()); - double y = MathHelper.lerp(partialTicks, entity.lastTickPosY, entity.getY()); - double z = MathHelper.lerp(partialTicks, entity.lastTickPosZ, entity.getZ()); - return Matrix4f.translate((float) x, (float) y, (float) z); + double x = MathHelper.lerp(partialTicks, entity.xOld, entity.getX()); + double y = MathHelper.lerp(partialTicks, entity.yOld, entity.getY()); + double z = MathHelper.lerp(partialTicks, entity.zOld, entity.getZ()); + return Matrix4f.createTranslateMatrix((float) x, (float) y, (float) z); } public static void transform(MatrixStack ms, MatrixStack transform) { - ms.peek().getModel() - .multiply(transform.peek() - .getModel()); - ms.peek().getNormal() - .multiply(transform.peek() - .getNormal()); + ms.last().pose() + .multiply(transform.last() + .pose()); + ms.last().normal() + .mul(transform.last() + .normal()); } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/render/ContraptionRenderDispatcher.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/render/ContraptionRenderDispatcher.java index 96086b861..aaff598e0 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/render/ContraptionRenderDispatcher.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/render/ContraptionRenderDispatcher.java @@ -71,7 +71,7 @@ import net.minecraftforge.fml.common.Mod; @Mod.EventBusSubscriber(Dist.CLIENT) public class ContraptionRenderDispatcher { private static final Lazy MODEL_RENDERER = Lazy.of(() -> new BlockModelRenderer(Minecraft.getInstance().getBlockColors())); - private static final Lazy BLOCK_MODELS = Lazy.of(() -> Minecraft.getInstance().getModelManager().getBlockModelShapes()); + private static final Lazy BLOCK_MODELS = Lazy.of(() -> Minecraft.getInstance().getModelManager().getBlockModelShaper()); private static int worldHolderRefreshCounter; public static final Int2ObjectMap RENDERERS = new Int2ObjectOpenHashMap<>(); @@ -79,7 +79,7 @@ public class ContraptionRenderDispatcher { public static final Compartment> CONTRAPTION = new Compartment<>(); public static void tick() { - if (Minecraft.getInstance().isGamePaused()) return; + if (Minecraft.getInstance().isPaused()) return; for (RenderedContraption contraption : RENDERERS.values()) { ContraptionLighter lighter = contraption.getLighter(); @@ -99,9 +99,9 @@ public class ContraptionRenderDispatcher { @SubscribeEvent public static void beginFrame(BeginFrameEvent event) { ActiveRenderInfo info = event.getInfo(); - double camX = info.getProjectedView().x; - double camY = info.getProjectedView().y; - double camZ = info.getProjectedView().z; + double camX = info.getPosition().x; + double camY = info.getPosition().y; + double camZ = info.getPosition().z; for (RenderedContraption renderer : RENDERERS.values()) { renderer.beginFrame(info, camX, camY, camZ); } @@ -114,7 +114,7 @@ public class ContraptionRenderDispatcher { if (RENDERERS.isEmpty()) return; RenderType layer = event.getType(); - layer.startDrawing(); + layer.setupRenderState(); glEnable(GL_TEXTURE_3D); glActiveTexture(GL_TEXTURE4); // the shaders expect light volumes to be in texture 4 @@ -137,7 +137,7 @@ public class ContraptionRenderDispatcher { } glBindTexture(GL_TEXTURE_3D, 0); - layer.endDrawing(); + layer.clearRenderState(); glDisable(GL_TEXTURE_3D); glActiveTexture(GL_TEXTURE0); glUseProgram(0); @@ -154,7 +154,7 @@ public class ContraptionRenderDispatcher { public static void render(AbstractContraptionEntity entity, Contraption contraption, ContraptionMatrices matrices, IRenderTypeBuffer buffers) { - World world = entity.world; + World world = entity.level; if (Backend.getInstance().canUseVBOs() && Backend.isFlywheelWorld(world)) { RenderedContraption renderer = getRenderer(world, contraption); PlacementSimulationWorld renderWorld = renderer.renderWorld; @@ -170,7 +170,7 @@ public class ContraptionRenderDispatcher { } private static RenderedContraption getRenderer(World world, Contraption c) { - int entityId = c.entity.getEntityId(); + int entityId = c.entity.getId(); RenderedContraption contraption = RENDERERS.get(entityId); if (contraption == null) { @@ -183,7 +183,7 @@ public class ContraptionRenderDispatcher { } private static ContraptionWorldHolder getWorldHolder(World world, Contraption c) { - int entityId = c.entity.getEntityId(); + int entityId = c.entity.getId(); ContraptionWorldHolder holder = WORLD_HOLDERS.get(entityId); if (holder == null) { @@ -203,10 +203,10 @@ public class ContraptionRenderDispatcher { for (Template.BlockInfo info : c.getBlocks() .values()) // Skip individual lighting updates to prevent lag with large contraptions - renderWorld.setBlockState(info.pos, info.state, 128); + renderWorld.setBlock(info.pos, info.state, 128); renderWorld.updateLightSources(); - renderWorld.lighter.tick(Integer.MAX_VALUE, false, false); + renderWorld.lighter.runUpdates(Integer.MAX_VALUE, false, false); return renderWorld; } @@ -215,7 +215,7 @@ public class ContraptionRenderDispatcher { ContraptionMatrices matrices, IRenderTypeBuffer buffer) { renderTileEntities(world, renderWorld, c, matrices, buffer); if (buffer instanceof IRenderTypeBuffer.Impl) - ((IRenderTypeBuffer.Impl) buffer).draw(); + ((IRenderTypeBuffer.Impl) buffer).endBatch(); renderActors(world, renderWorld, c, matrices, buffer); } @@ -236,7 +236,7 @@ public class ContraptionRenderDispatcher { Template.BlockInfo blockInfo = actor.getLeft(); MatrixStack m = matrices.contraptionStack; - m.push(); + m.pushPose(); MatrixStacker.of(m) .translate(blockInfo.pos); @@ -244,16 +244,16 @@ public class ContraptionRenderDispatcher { if (movementBehaviour != null) movementBehaviour.renderInContraption(context, renderWorld, matrices, buffer); - m.pop(); + m.popPose(); } } public static void renderStructure(World world, PlacementSimulationWorld renderWorld, Contraption c, ContraptionMatrices matrices, IRenderTypeBuffer buffer) { SuperByteBufferCache bufferCache = CreateClient.BUFFER_CACHE; - List blockLayers = RenderType.getBlockLayers(); + List blockLayers = RenderType.chunkBufferLayers(); - buffer.getBuffer(RenderType.getSolid()); + buffer.getBuffer(RenderType.solid()); for (int i = 0; i < blockLayers.size(); i++) { RenderType layer = blockLayers.get(i); Pair key = Pair.of(c, i); @@ -280,28 +280,28 @@ public class ContraptionRenderDispatcher { builder.begin(GL_QUADS, DefaultVertexFormats.BLOCK); ForgeHooksClient.setRenderLayer(layer); - BlockModelRenderer.enableCache(); + BlockModelRenderer.enableCaching(); for (Template.BlockInfo info : c.getBlocks() .values()) { BlockState state = info.state; - if (state.getRenderType() != BlockRenderType.MODEL) + if (state.getRenderShape() != BlockRenderType.MODEL) continue; if (!RenderTypeLookup.canRenderInLayer(state, layer)) continue; BlockPos pos = info.pos; - ms.push(); + ms.pushPose(); ms.translate(pos.getX(), pos.getY(), pos.getZ()); - MODEL_RENDERER.get().renderModel(renderWorld, BLOCK_MODELS.get().getModel(state), state, pos, ms, builder, true, - random, 42, OverlayTexture.DEFAULT_UV, EmptyModelData.INSTANCE); - ms.pop(); + MODEL_RENDERER.get().renderModel(renderWorld, BLOCK_MODELS.get().getBlockModel(state), state, pos, ms, builder, true, + random, 42, OverlayTexture.NO_OVERLAY, EmptyModelData.INSTANCE); + ms.popPose(); } - BlockModelRenderer.disableCache(); + BlockModelRenderer.clearCache(); ForgeHooksClient.setRenderLayer(null); - builder.finishDrawing(); + builder.end(); return builder; } @@ -313,16 +313,16 @@ public class ContraptionRenderDispatcher { for (float zOffset = offset; zOffset >= -offset; zOffset -= 2 * offset) for (float yOffset = offset; yOffset >= -offset; yOffset -= 2 * offset) for (float xOffset = offset; xOffset >= -offset; xOffset -= 2 * offset) { - pos.setPos(lx + xOffset, ly + yOffset, lz + zOffset); - block += world.getLightLevel(LightType.BLOCK, pos) / 8f; - sky += world.getLightLevel(LightType.SKY, pos) / 8f; + pos.set(lx + xOffset, ly + yOffset, lz + zOffset); + block += world.getBrightness(LightType.BLOCK, pos) / 8f; + sky += world.getBrightness(LightType.SKY, pos) / 8f; } return LightTexture.pack((int) block, (int) sky); } public static int getContraptionWorldLight(MovementContext context, PlacementSimulationWorld renderWorld) { - return WorldRenderer.getLightmapCoordinates(renderWorld, context.localPos); + return WorldRenderer.getLightColor(renderWorld, context.localPos); } public static void invalidateAll() { diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/render/ContraptionWorldHolder.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/render/ContraptionWorldHolder.java index 4ae414016..0f3cc5ab7 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/render/ContraptionWorldHolder.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/render/ContraptionWorldHolder.java @@ -13,7 +13,7 @@ public class ContraptionWorldHolder { } public int getEntityId() { - return contraption.entity.getEntityId(); + return contraption.entity.getId(); } public boolean isDead() { diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/render/RenderedContraption.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/render/RenderedContraption.java index 84ce22b80..3b6c4eece 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/render/RenderedContraption.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/render/RenderedContraption.java @@ -90,18 +90,18 @@ public class RenderedContraption extends ContraptionWorldHolder { MatrixStack stack = new MatrixStack(); - double x = MathHelper.lerp(pt, entity.lastTickPosX, entity.getX()) - camX; - double y = MathHelper.lerp(pt, entity.lastTickPosY, entity.getY()) - camY; - double z = MathHelper.lerp(pt, entity.lastTickPosZ, entity.getZ()) - camZ; + double x = MathHelper.lerp(pt, entity.xOld, entity.getX()) - camX; + double y = MathHelper.lerp(pt, entity.yOld, entity.getY()) - camY; + double z = MathHelper.lerp(pt, entity.zOld, entity.getZ()) - camZ; stack.translate(x, y, z); entity.doLocalTransforms(pt, new MatrixStack[] { stack }); - model = stack.peek().getModel(); + model = stack.last().pose(); AxisAlignedBB lightBox = GridAlignedBB.toAABB(lighter.lightVolume.getTextureVolume()); - this.lightBox = lightBox.offset(-camX, -camY, -camZ); + this.lightBox = lightBox.move(-camX, -camY, -camZ); } void setup(ContraptionProgram shader) { @@ -129,7 +129,7 @@ public class RenderedContraption extends ContraptionWorldHolder { renderLayers.clear(); - List blockLayers = RenderType.getBlockLayers(); + List blockLayers = RenderType.chunkBufferLayers(); for (RenderType layer : blockLayers) { BufferedModel layerModel = buildStructureModel(renderWorld, contraption, layer); @@ -148,11 +148,11 @@ public class RenderedContraption extends ContraptionWorldHolder { if (!tileEntities.isEmpty()) { for (TileEntity te : tileEntities) { if (te instanceof IInstanceRendered) { - World world = te.getWorld(); - BlockPos pos = te.getPos(); - te.setLocation(renderWorld, pos); + World world = te.getLevel(); + BlockPos pos = te.getBlockPos(); + te.setLevelAndPosition(renderWorld, pos); kinetics.add(te); - te.setLocation(world, pos); + te.setLevelAndPosition(world, pos); } } } @@ -193,8 +193,8 @@ public class RenderedContraption extends ContraptionWorldHolder { int light = reader.getLight(i); - byte block = (byte) (LightTexture.getBlockLightCoordinates(light) << 4); - byte sky = (byte) (LightTexture.getSkyLightCoordinates(light) << 4); + byte block = (byte) (LightTexture.block(light) << 4); + byte sky = (byte) (LightTexture.sky(light) << 4); vertices.put(block); vertices.put(sky); diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/sync/ClientMotionPacket.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/sync/ClientMotionPacket.java index 1a4c7307c..9e2487763 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/sync/ClientMotionPacket.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/sync/ClientMotionPacket.java @@ -46,15 +46,15 @@ public class ClientMotionPacket extends SimplePacketBase { .getSender(); if (sender == null) return; - sender.setMotion(motion); + sender.setDeltaMovement(motion); sender.setOnGround(onGround); if (onGround) { - sender.handleFallDamage(sender.fallDistance, 1); + sender.causeFallDamage(sender.fallDistance, 1); sender.fallDistance = 0; - sender.connection.floatingTickCount = 0; + sender.connection.aboveGroundTickCount = 0; } AllPackets.channel.send(PacketDistributor.TRACKING_ENTITY.with(() -> sender), - new LimbSwingUpdatePacket(sender.getEntityId(), sender.getPositionVec(), limbSwing)); + new LimbSwingUpdatePacket(sender.getId(), sender.position(), limbSwing)); }); context.get() .setPacketHandled(true); diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/sync/ContraptionFluidPacket.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/sync/ContraptionFluidPacket.java index bc0d308bd..fd648bb5d 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/sync/ContraptionFluidPacket.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/sync/ContraptionFluidPacket.java @@ -41,7 +41,7 @@ public class ContraptionFluidPacket extends SimplePacketBase { public void handle(Supplier context) { context.get() .enqueueWork(() -> { - Entity entityByID = Minecraft.getInstance().world.getEntityByID(entityId); + Entity entityByID = Minecraft.getInstance().level.getEntity(entityId); if (!(entityByID instanceof AbstractContraptionEntity)) return; AbstractContraptionEntity contraptionEntity = (AbstractContraptionEntity) entityByID; diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/sync/ContraptionInteractionPacket.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/sync/ContraptionInteractionPacket.java index 1120719d6..9d731d735 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/sync/ContraptionInteractionPacket.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/sync/ContraptionInteractionPacket.java @@ -24,7 +24,7 @@ public class ContraptionInteractionPacket extends SimplePacketBase { public ContraptionInteractionPacket(AbstractContraptionEntity target, Hand hand, BlockPos localPos, Direction side) { this.interactionHand = hand; this.localPos = localPos; - this.target = target.getEntityId(); + this.target = target.getId(); this.face = side; } @@ -33,7 +33,7 @@ public class ContraptionInteractionPacket extends SimplePacketBase { int handId = buffer.readInt(); interactionHand = handId == -1 ? null : Hand.values()[handId]; localPos = buffer.readBlockPos(); - face = Direction.byIndex(buffer.readShort()); + face = Direction.from3DDataValue(buffer.readShort()); } @Override @@ -41,7 +41,7 @@ public class ContraptionInteractionPacket extends SimplePacketBase { buffer.writeInt(target); buffer.writeInt(interactionHand == null ? -1 : interactionHand.ordinal()); buffer.writeBlockPos(localPos); - buffer.writeShort(face.getIndex()); + buffer.writeShort(face.get3DDataValue()); } @Override @@ -50,20 +50,20 @@ public class ContraptionInteractionPacket extends SimplePacketBase { ServerPlayerEntity sender = context.get().getSender(); if (sender == null) return; - Entity entityByID = sender.getServerWorld().getEntityByID(target); + Entity entityByID = sender.getLevel().getEntity(target); if (!(entityByID instanceof AbstractContraptionEntity)) return; AbstractContraptionEntity contraptionEntity = (AbstractContraptionEntity) entityByID; double d = sender.getAttribute(ForgeMod.REACH_DISTANCE.get()).getValue() + 10; - if (!sender.canEntityBeSeen(entityByID)) + if (!sender.canSee(entityByID)) d -= 3; d *= d; - if (sender.getDistanceSq(entityByID) > d) { + if (sender.distanceToSqr(entityByID) > d) { // TODO log? return; } if (contraptionEntity.handlePlayerInteraction(sender, localPos, face, interactionHand)) - sender.swingHand(interactionHand, true); + sender.swing(interactionHand, true); }); context.get().setPacketHandled(true); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/sync/ContraptionSeatMappingPacket.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/sync/ContraptionSeatMappingPacket.java index 6d6ce8d8f..b05df0f01 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/sync/ContraptionSeatMappingPacket.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/sync/ContraptionSeatMappingPacket.java @@ -28,7 +28,7 @@ public class ContraptionSeatMappingPacket extends SimplePacketBase { mapping = new HashMap<>(); short size = buffer.readShort(); for (int i = 0; i < size; i++) - mapping.put(buffer.readUniqueId(), (int) buffer.readShort()); + mapping.put(buffer.readUUID(), (int) buffer.readShort()); } @Override @@ -36,7 +36,7 @@ public class ContraptionSeatMappingPacket extends SimplePacketBase { buffer.writeInt(entityID); buffer.writeShort(mapping.size()); mapping.forEach((k, v) -> { - buffer.writeUniqueId(k); + buffer.writeUUID(k); buffer.writeShort(v); }); } @@ -45,7 +45,7 @@ public class ContraptionSeatMappingPacket extends SimplePacketBase { public void handle(Supplier context) { context.get() .enqueueWork(() -> { - Entity entityByID = Minecraft.getInstance().world.getEntityByID(entityID); + Entity entityByID = Minecraft.getInstance().level.getEntity(entityID); if (!(entityByID instanceof AbstractContraptionEntity)) return; AbstractContraptionEntity contraptionEntity = (AbstractContraptionEntity) entityByID; diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/sync/LimbSwingUpdatePacket.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/sync/LimbSwingUpdatePacket.java index c4f1f70a8..454ef81d4 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/sync/LimbSwingUpdatePacket.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/sync/LimbSwingUpdatePacket.java @@ -43,17 +43,17 @@ public class LimbSwingUpdatePacket extends SimplePacketBase { public void handle(Supplier context) { context.get() .enqueueWork(() -> { - ClientWorld world = Minecraft.getInstance().world; + ClientWorld world = Minecraft.getInstance().level; if (world == null) return; - Entity entity = world.getEntityByID(entityId); + Entity entity = world.getEntity(entityId); if (entity == null) return; CompoundNBT data = entity.getPersistentData(); data.putInt("LastOverrideLimbSwingUpdate", 0); data.putFloat("OverrideLimbSwing", limbSwing); - entity.setPositionAndRotationDirect(position.x, position.y, position.z, entity.rotationYaw, - entity.rotationPitch, 2, false); + entity.lerpTo(position.x, position.y, position.z, entity.yRot, + entity.xRot, 2, false); }); context.get() .setPacketHandled(true); diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/CouplingCreationPacket.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/CouplingCreationPacket.java index 795a3e89e..c042219d1 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/CouplingCreationPacket.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/CouplingCreationPacket.java @@ -14,8 +14,8 @@ public class CouplingCreationPacket extends SimplePacketBase { int id1, id2; public CouplingCreationPacket(AbstractMinecartEntity cart1, AbstractMinecartEntity cart2) { - id1 = cart1.getEntityId(); - id2 = cart2.getEntityId(); + id1 = cart1.getId(); + id2 = cart2.getId(); } public CouplingCreationPacket(PacketBuffer buffer) { @@ -36,7 +36,7 @@ public class CouplingCreationPacket extends SimplePacketBase { ServerPlayerEntity sender = context.get() .getSender(); if (sender != null) - CouplingHandler.tryToCoupleCarts(sender, sender.world, id1, id2); + CouplingHandler.tryToCoupleCarts(sender, sender.level, id1, id2); }); context.get() .setPacketHandled(true); diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/CouplingHandler.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/CouplingHandler.java index e16e87de6..924bd4d11 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/CouplingHandler.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/CouplingHandler.java @@ -67,8 +67,8 @@ public class CouplingHandler { } public static boolean tryToCoupleCarts(@Nullable PlayerEntity player, World world, int cartId1, int cartId2) { - Entity entity1 = world.getEntityByID(cartId1); - Entity entity2 = world.getEntityByID(cartId2); + Entity entity1 = world.getEntity(cartId1); + Entity entity2 = world.getEntity(cartId2); if (!(entity1 instanceof AbstractMinecartEntity)) return false; @@ -80,8 +80,8 @@ public class CouplingHandler { String noLoops = "no_loops"; String tooFar = "too_far"; - int distanceTo = (int) entity1.getPositionVec() - .distanceTo(entity2.getPositionVec()); + int distanceTo = (int) entity1.position() + .distanceTo(entity2.position()); boolean contraptionCoupling = player == null; if (distanceTo < 2) { @@ -97,8 +97,8 @@ public class CouplingHandler { AbstractMinecartEntity cart1 = (AbstractMinecartEntity) entity1; AbstractMinecartEntity cart2 = (AbstractMinecartEntity) entity2; - UUID mainID = cart1.getUniqueID(); - UUID connectedID = cart2.getUniqueID(); + UUID mainID = cart1.getUUID(); + UUID connectedID = cart2.getUUID(); MinecartController mainController = CapabilityMinecartController.getIfPresent(world, mainID); MinecartController connectedController = CapabilityMinecartController.getIfPresent(world, connectedID); @@ -146,7 +146,7 @@ public class CouplingHandler { for (Hand hand : Hand.values()) { if (player.isCreative()) break; - ItemStack heldItem = player.getHeldItem(hand); + ItemStack heldItem = player.getItemInHand(hand); if (!AllItems.MINECART_COUPLING.isIn(heldItem)) continue; heldItem.shrink(1); @@ -177,7 +177,7 @@ public class CouplingHandler { public static void status(PlayerEntity player, String key) { if (player == null) return; - player.sendStatusMessage(Lang.translate("minecart_coupling." + key), true); + player.displayClientMessage(Lang.translate("minecart_coupling." + key), true); } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/CouplingHandlerClient.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/CouplingHandlerClient.java index 00fda4789..d4b34b7c0 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/CouplingHandlerClient.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/CouplingHandlerClient.java @@ -28,8 +28,8 @@ public class CouplingHandlerClient { return; spawnSelectionParticles(selectedCart.getBoundingBox(), false); ClientPlayerEntity player = Minecraft.getInstance().player; - ItemStack heldItemMainhand = player.getHeldItemMainhand(); - ItemStack heldItemOffhand = player.getHeldItemOffhand(); + ItemStack heldItemMainhand = player.getMainHandItem(); + ItemStack heldItemOffhand = player.getOffhandItem(); if (AllItems.MINECART_COUPLING.isIn(heldItemMainhand) || AllItems.MINECART_COUPLING.isIn(heldItemOffhand)) return; selectedCart = null; @@ -53,14 +53,14 @@ public class CouplingHandlerClient { } private static void spawnSelectionParticles(AxisAlignedBB axisAlignedBB, boolean highlight) { - ClientWorld world = Minecraft.getInstance().world; + ClientWorld world = Minecraft.getInstance().level; Vector3d center = axisAlignedBB.getCenter(); int amount = highlight ? 100 : 2; IParticleData particleData = highlight ? ParticleTypes.END_ROD : new RedstoneParticleData(1, 1, 1, 1); for (int i = 0; i < amount; i++) { Vector3d v = VecHelper.offsetRandomly(Vector3d.ZERO, r, 1); double yOffset = v.y; - v = v.mul(1, 0, 1) + v = v.multiply(1, 0, 1) .normalize() .add(0, yOffset / 8f, 0) .add(center); diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/CouplingPhysics.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/CouplingPhysics.java index e16ea5263..24c97dc04 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/CouplingPhysics.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/CouplingPhysics.java @@ -28,7 +28,7 @@ public class CouplingPhysics { float couplingLength = c.getFirst() .getCouplingLength(true); softCollisionStep(world, carts, couplingLength); - if (world.isRemote) + if (world.isClientSide) return; hardCollisionStep(world, carts, couplingLength); } @@ -44,15 +44,15 @@ public class CouplingPhysics { AbstractMinecartEntity cart = carts.get(current); AbstractMinecartEntity otherCart = carts.get(!current); - float stress = (float) (couplingLength - cart.getPositionVec() - .distanceTo(otherCart.getPositionVec())); + float stress = (float) (couplingLength - cart.position() + .distanceTo(otherCart.position())); if (Math.abs(stress) < 1 / 8f) continue; RailShape shape = null; BlockPos railPosition = cart.getCurrentRailPosition(); - BlockState railState = world.getBlockState(railPosition.up()); + BlockState railState = world.getBlockState(railPosition.above()); if (railState.getBlock() instanceof AbstractRailBlock) { AbstractRailBlock block = (AbstractRailBlock) railState.getBlock(); @@ -60,8 +60,8 @@ public class CouplingPhysics { } Vector3d correction = Vector3d.ZERO; - Vector3d pos = cart.getPositionVec(); - Vector3d link = otherCart.getPositionVec() + Vector3d pos = cart.position(); + Vector3d link = otherCart.position() .subtract(pos); float correctionMagnitude = firstLoop ? -stress / 2f : -stress; @@ -83,7 +83,7 @@ public class CouplingPhysics { MinecartSim2020.moveCartAlongTrack(cart, correction, railPosition, railState); else { cart.move(MoverType.SELF, correction); - cart.setMotion(cart.getMotion() + cart.setDeltaMovement(cart.getDeltaMovement() .scale(0.95f)); } firstLoop = false; @@ -95,20 +95,20 @@ public class CouplingPhysics { Couple canAddmotion = carts.map(MinecartSim2020::canAddMotion); // Assuming Minecarts will never move faster than 1 block/tick - Couple motions = carts.map(Entity::getMotion); + Couple motions = carts.map(Entity::getDeltaMovement); motions.replaceWithParams(VecHelper::clamp, Couple.create(1f, 1f)); Couple nextPositions = carts.map(MinecartSim2020::predictNextPositionOf); Couple shapes = carts.mapWithContext((cart, current) -> { AbstractMinecartEntity minecart = cart.getMinecart(); Vector3d vec = nextPositions.get(current); - int x = MathHelper.floor(vec.getX()); - int y = MathHelper.floor(vec.getY()); - int z = MathHelper.floor(vec.getZ()); + int x = MathHelper.floor(vec.x()); + int y = MathHelper.floor(vec.y()); + int z = MathHelper.floor(vec.z()); BlockPos pos = new BlockPos(x, y - 1, z); - if (minecart.world.getBlockState(pos).isIn(BlockTags.RAILS)) pos = pos.down(); + if (minecart.level.getBlockState(pos).is(BlockTags.RAILS)) pos = pos.below(); BlockPos railPosition = pos; - BlockState railState = world.getBlockState(railPosition.up()); + BlockState railState = world.getBlockState(railPosition.above()); if (!(railState.getBlock() instanceof AbstractRailBlock)) return null; AbstractRailBlock block = (AbstractRailBlock) railState.getBlock(); @@ -117,7 +117,7 @@ public class CouplingPhysics { float futureStress = (float) (couplingLength - nextPositions.getFirst() .distanceTo(nextPositions.getSecond())); - if (MathHelper.epsilonEquals(futureStress, 0D)) + if (MathHelper.equal(futureStress, 0D)) return; for (boolean current : Iterate.trueAndFalse) { @@ -147,11 +147,11 @@ public class CouplingPhysics { } motions.replaceWithParams(VecHelper::clamp, maxSpeed); - carts.forEachWithParams(Entity::setMotion, motions); + carts.forEachWithParams(Entity::setDeltaMovement, motions); } public static Vector3d followLinkOnRail(Vector3d link, Vector3d cart, float diffToReduce, Vector3d railAxis) { - double dotProduct = railAxis.dotProduct(link); + double dotProduct = railAxis.dot(link); if (Double.isNaN(dotProduct) || dotProduct == 0 || diffToReduce == 0) return cart; diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/CouplingRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/CouplingRenderer.java index 7e987e371..577ed99c1 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/CouplingRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/CouplingRenderer.java @@ -33,7 +33,7 @@ import net.minecraft.util.math.vector.Vector3f; public class CouplingRenderer { public static void renderAll(MatrixStack ms, IRenderTypeBuffer buffer) { - CouplingHandler.forEachLoadedCoupling(Minecraft.getInstance().world, + CouplingHandler.forEachLoadedCoupling(Minecraft.getInstance().level, c -> { if (c.getFirst().hasContraptionCoupling(true)) return; @@ -43,29 +43,29 @@ public class CouplingRenderer { public static void tickDebugModeRenders() { if (KineticDebugger.isActive()) - CouplingHandler.forEachLoadedCoupling(Minecraft.getInstance().world, CouplingRenderer::doDebugRender); + CouplingHandler.forEachLoadedCoupling(Minecraft.getInstance().level, CouplingRenderer::doDebugRender); } public static void renderCoupling(MatrixStack ms, IRenderTypeBuffer buffer, Couple carts) { - ClientWorld world = Minecraft.getInstance().world; + ClientWorld world = Minecraft.getInstance().level; if (carts.getFirst() == null || carts.getSecond() == null) return; Couple lightValues = - carts.map(c -> WorldRenderer.getLightmapCoordinates(world, new BlockPos(c.getBoundingBox() + carts.map(c -> WorldRenderer.getLightColor(world, new BlockPos(c.getBoundingBox() .getCenter()))); Vector3d center = carts.getFirst() - .getPositionVec() + .position() .add(carts.getSecond() - .getPositionVec()) + .position()) .scale(.5f); Couple transforms = carts.map(c -> getSuitableCartEndpoint(c, center)); - BlockState renderState = Blocks.AIR.getDefaultState(); - IVertexBuilder builder = buffer.getBuffer(RenderType.getSolid()); + BlockState renderState = Blocks.AIR.defaultBlockState(); + IVertexBuilder builder = buffer.getBuffer(RenderType.solid()); SuperByteBuffer attachment = PartialBufferer.get(AllBlockPartials.COUPLING_ATTACHMENT, renderState); SuperByteBuffer ring = PartialBufferer.get(AllBlockPartials.COUPLING_RING, renderState); SuperByteBuffer connector = PartialBufferer.get(AllBlockPartials.COUPLING_CONNECTOR, renderState); @@ -77,21 +77,21 @@ public class CouplingRenderer { .apply(zero); Vector3d endPointDiff = secondEndpoint.subtract(firstEndpoint); double connectorYaw = -Math.atan2(endPointDiff.z, endPointDiff.x) * 180.0D / Math.PI; - double connectorPitch = Math.atan2(endPointDiff.y, endPointDiff.mul(1, 0, 1) + double connectorPitch = Math.atan2(endPointDiff.y, endPointDiff.multiply(1, 0, 1) .length()) * 180 / Math.PI; MatrixStacker msr = MatrixStacker.of(ms); carts.forEachWithContext((cart, isFirst) -> { CartEndpoint cartTransform = transforms.get(isFirst); - ms.push(); + ms.pushPose(); cartTransform.apply(ms); attachment.light(lightValues.get(isFirst)) .renderInto(ms, builder); msr.rotateY(connectorYaw - cartTransform.yaw); ring.light(lightValues.get(isFirst)) .renderInto(ms, builder); - ms.pop(); + ms.popPose(); }); int l1 = lightValues.getFirst(); @@ -99,7 +99,7 @@ public class CouplingRenderer { int meanBlockLight = (((l1 >> 4) & 0xf) + ((l2 >> 4) & 0xf)) / 2; int meanSkyLight = (((l1 >> 20) & 0xf) + ((l2 >> 20) & 0xf)) / 2; - ms.push(); + ms.pushPose(); msr.translate(firstEndpoint) .rotateY(connectorYaw) .rotateZ(connectorPitch); @@ -107,11 +107,11 @@ public class CouplingRenderer { connector.light(meanSkyLight << 20 | meanBlockLight << 4) .renderInto(ms, builder); - ms.pop(); + ms.popPose(); } private static CartEndpoint getSuitableCartEndpoint(AbstractMinecartEntity cart, Vector3d centerOfCoupling) { - long i = cart.getEntityId() * 493286711L; + long i = cart.getId() * 493286711L; i = i * i * 4392167121L + i * 98761L; float x = (((float) (i >> 16 & 7L) + 0.5F) / 8.0F - 0.5F) * 0.004F; float y = (((float) (i >> 20 & 7L) + 0.5F) / 8.0F - 0.5F) * 0.004F + 0.375F; @@ -119,18 +119,18 @@ public class CouplingRenderer { float pt = AnimationTickHolder.getPartialTicks(); - double xIn = lerp(pt, cart.lastTickPosX, cart.getX()); - double yIn = lerp(pt, cart.lastTickPosY, cart.getY()); - double zIn = lerp(pt, cart.lastTickPosZ, cart.getZ()); + double xIn = lerp(pt, cart.xOld, cart.getX()); + double yIn = lerp(pt, cart.yOld, cart.getY()); + double zIn = lerp(pt, cart.zOld, cart.getZ()); - float yaw = lerp(pt, cart.prevRotationYaw, cart.rotationYaw); - float pitch = lerp(pt, cart.prevRotationPitch, cart.rotationPitch); - float roll = cart.getRollingAmplitude() - pt; + float yaw = lerp(pt, cart.yRotO, cart.yRot); + float pitch = lerp(pt, cart.xRotO, cart.xRot); + float roll = cart.getHurtTime() - pt; float rollAmplifier = cart.getDamage() - pt; if (rollAmplifier < 0.0F) rollAmplifier = 0.0F; - roll = roll > 0 ? MathHelper.sin(roll) * roll * rollAmplifier / 10.0F * cart.getRollingDirection() : 0; + roll = roll > 0 ? MathHelper.sin(roll) * roll * rollAmplifier / 10.0F * cart.getHurtDir() : 0; Vector3d positionVec = new Vector3d(xIn, yIn, zIn); Vector3d frontVec = positionVec.add(VecHelper.rotate(new Vector3d(.5, 0, 0), 180 - yaw, Axis.Y)); @@ -140,8 +140,8 @@ public class CouplingRenderer { boolean flip = false; if (railVecOfPos != null) { - frontVec = cart.getPosOffset(xIn, yIn, zIn, (double) 0.3F); - backVec = cart.getPosOffset(xIn, yIn, zIn, (double) -0.3F); + frontVec = cart.getPosOffs(xIn, yIn, zIn, (double) 0.3F); + backVec = cart.getPosOffs(xIn, yIn, zIn, (double) -0.3F); if (frontVec == null) frontVec = railVecOfPos; if (backVec == null) @@ -165,7 +165,7 @@ public class CouplingRenderer { final float offsetMagnitude = 13 / 16f; boolean isBackFaceCloser = - frontVec.squareDistanceTo(centerOfCoupling) > backVec.squareDistanceTo(centerOfCoupling); + frontVec.distanceToSqr(centerOfCoupling) > backVec.distanceToSqr(centerOfCoupling); flip = isBackFaceCloser; float offset = isBackFaceCloser ? -offsetMagnitude : offsetMagnitude; @@ -204,12 +204,12 @@ public class CouplingRenderer { public void apply(MatrixStack ms) { ms.translate(x, y, z); - ms.multiply(Vector3f.POSITIVE_Y.getDegreesQuaternion(yaw)); - ms.multiply(Vector3f.POSITIVE_Z.getDegreesQuaternion(pitch)); - ms.multiply(Vector3f.POSITIVE_X.getDegreesQuaternion(roll)); + ms.mulPose(Vector3f.YP.rotationDegrees(yaw)); + ms.mulPose(Vector3f.ZP.rotationDegrees(pitch)); + ms.mulPose(Vector3f.XP.rotationDegrees(roll)); ms.translate(offset, 0, 0); if (flip) - ms.multiply(Vector3f.POSITIVE_Y.getDegreesQuaternion(180)); + ms.mulPose(Vector3f.YP.rotationDegrees(180)); } } @@ -218,23 +218,23 @@ public class CouplingRenderer { int yOffset = 1; MinecartController first = c.getFirst(); AbstractMinecartEntity mainCart = first.cart(); - Vector3d mainCenter = mainCart.getPositionVec() + Vector3d mainCenter = mainCart.position() .add(0, yOffset, 0); Vector3d connectedCenter = c.getSecond() .cart() - .getPositionVec() + .position() .add(0, yOffset, 0); int color = ColorHelper.mixColors(0xabf0e9, 0xee8572, (float) MathHelper .clamp(Math.abs(first.getCouplingLength(true) - connectedCenter.distanceTo(mainCenter)) * 8, 0, 1)); - CreateClient.OUTLINER.showLine(mainCart.getEntityId() + "", mainCenter, connectedCenter) + CreateClient.OUTLINER.showLine(mainCart.getId() + "", mainCenter, connectedCenter) .colored(color) .lineWidth(1 / 8f); - Vector3d point = mainCart.getPositionVec() + Vector3d point = mainCart.position() .add(0, yOffset, 0); - CreateClient.OUTLINER.showLine(mainCart.getEntityId() + "_dot", point, point.add(0, 1 / 128f, 0)) + CreateClient.OUTLINER.showLine(mainCart.getId() + "_dot", point, point.add(0, 1 / 128f, 0)) .colored(0xffffff) .lineWidth(1 / 4f); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/MinecartCouplingItem.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/MinecartCouplingItem.java index 268ba703a..9b839a131 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/MinecartCouplingItem.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/MinecartCouplingItem.java @@ -22,6 +22,8 @@ import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.DistExecutor; import net.minecraftforge.fml.common.Mod.EventBusSubscriber; +import net.minecraft.item.Item.Properties; + @EventBusSubscriber public class MinecartCouplingItem extends Item { @@ -44,7 +46,7 @@ public class MinecartCouplingItem extends Item { return; MinecartController controller = capability.orElse(null); - ItemStack heldItem = player.getHeldItem(event.getHand()); + ItemStack heldItem = player.getItemInHand(event.getHand()); if (AllItems.MINECART_COUPLING.isIn(heldItem)) { if (!onCouplingInteractOnMinecart(event, minecart, player, controller)) return; @@ -62,11 +64,11 @@ public class MinecartCouplingItem extends Item { AbstractMinecartEntity minecart, PlayerEntity player, MinecartController controller) { World world = event.getWorld(); if (controller.isFullyCoupled()) { - if (!world.isRemote) + if (!world.isClientSide) CouplingHandler.status(player, "two_couplings_max"); return true; } - if (world != null && world.isRemote) + if (world != null && world.isClientSide) DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> cartClicked(player, minecart)); return true; } @@ -76,7 +78,7 @@ public class MinecartCouplingItem extends Item { int couplings = (controller.isConnectedToCoupling() ? 1 : 0) + (controller.isLeadingCoupling() ? 1 : 0); if (couplings == 0) return false; - if (event.getWorld().isRemote) + if (event.getWorld().isClientSide) return true; for (boolean forward : Iterate.trueAndFalse) { diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/MinecartSim2020.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/MinecartSim2020.java index 0a8f00f41..0c0f3689b 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/MinecartSim2020.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/MinecartSim2020.java @@ -1,6 +1,6 @@ package com.simibubi.create.content.contraptions.components.structureMovement.train; -import static net.minecraft.entity.Entity.horizontalMag; +import static net.minecraft.entity.Entity.getHorizontalDistanceSqr; import java.util.Map; @@ -30,32 +30,32 @@ import net.minecraftforge.common.util.LazyOptional; public class MinecartSim2020 { private static final Map> MATRIX = Util.make(Maps.newEnumMap(RailShape.class), (map) -> { - Vector3i west = Direction.WEST.getDirectionVec(); - Vector3i east = Direction.EAST.getDirectionVec(); - Vector3i north = Direction.NORTH.getDirectionVec(); - Vector3i south = Direction.SOUTH.getDirectionVec(); + Vector3i west = Direction.WEST.getNormal(); + Vector3i east = Direction.EAST.getNormal(); + Vector3i north = Direction.NORTH.getNormal(); + Vector3i south = Direction.SOUTH.getNormal(); map.put(RailShape.NORTH_SOUTH, Pair.of(north, south)); map.put(RailShape.EAST_WEST, Pair.of(west, east)); - map.put(RailShape.ASCENDING_EAST, Pair.of(west.down(), east)); - map.put(RailShape.ASCENDING_WEST, Pair.of(west, east.down())); - map.put(RailShape.ASCENDING_NORTH, Pair.of(north, south.down())); - map.put(RailShape.ASCENDING_SOUTH, Pair.of(north.down(), south)); + map.put(RailShape.ASCENDING_EAST, Pair.of(west.below(), east)); + map.put(RailShape.ASCENDING_WEST, Pair.of(west, east.below())); + map.put(RailShape.ASCENDING_NORTH, Pair.of(north, south.below())); + map.put(RailShape.ASCENDING_SOUTH, Pair.of(north.below(), south)); map.put(RailShape.SOUTH_EAST, Pair.of(south, east)); map.put(RailShape.SOUTH_WEST, Pair.of(south, west)); map.put(RailShape.NORTH_WEST, Pair.of(north, west)); map.put(RailShape.NORTH_EAST, Pair.of(north, east)); }); - + public static Vector3d predictNextPositionOf(AbstractMinecartEntity cart) { - Vector3d position = cart.getPositionVec(); - Vector3d motion = VecHelper.clamp(cart.getMotion(), 1f); + Vector3d position = cart.position(); + Vector3d motion = VecHelper.clamp(cart.getDeltaMovement(), 1f); return position.add(motion); } public static boolean canAddMotion(AbstractMinecartEntity c) { if (c instanceof FurnaceMinecartEntity) - return MathHelper.epsilonEquals(((FurnaceMinecartEntity) c).pushX, 0) - && MathHelper.epsilonEquals(((FurnaceMinecartEntity) c).pushZ, 0); + return MathHelper.equal(((FurnaceMinecartEntity) c).xPush, 0) + && MathHelper.equal(((FurnaceMinecartEntity) c).zPush, 0); LazyOptional capability = c.getCapability(CapabilityMinecartController.MINECART_CONTROLLER_CAPABILITY); if (capability.isPresent() && capability.orElse(null) @@ -70,7 +70,7 @@ public class MinecartSim2020 { if (forcedMovement.equals(Vector3d.ZERO)) return; - Vector3d previousMotion = cart.getMotion(); + Vector3d previousMotion = cart.getDeltaMovement(); cart.fallDistance = 0.0F; double x = cart.getX(); @@ -85,7 +85,7 @@ public class MinecartSim2020 { actualY = cartPos.getY() + 1; AbstractRailBlock abstractrailblock = (AbstractRailBlock) trackState.getBlock(); - RailShape railshape = abstractrailblock.getRailDirection(trackState, cart.world, cartPos, cart); + RailShape railshape = abstractrailblock.getRailDirection(trackState, cart.level, cartPos, cart); switch (railshape) { case ASCENDING_EAST: forcedMovement = forcedMovement.add(-1 * cart.getSlopeAdjustment(), 0.0D, 0.0D); @@ -138,8 +138,8 @@ public class MinecartSim2020 { actualX = d23 + d4 * d14; actualZ = d10 + d5 * d14; - cart.setPosition(actualX, actualY, actualZ); - cart.setMotion(forcedMovement); + cart.setPos(actualX, actualY, actualZ); + cart.setDeltaMovement(forcedMovement); cart.moveMinecartOnRail(cartPos); x = cart.getX(); @@ -148,10 +148,10 @@ public class MinecartSim2020 { if (Vector3i.getY() != 0 && MathHelper.floor(x) - cartPos.getX() == Vector3i.getX() && MathHelper.floor(z) - cartPos.getZ() == Vector3i.getZ()) { - cart.setPosition(x, y + (double) Vector3i.getY(), z); + cart.setPos(x, y + (double) Vector3i.getY(), z); } else if (Vector3i1.getY() != 0 && MathHelper.floor(x) - cartPos.getX() == Vector3i1.getX() && MathHelper.floor(z) - cartPos.getZ() == Vector3i1.getZ()) { - cart.setPosition(x, y + (double) Vector3i1.getY(), z); + cart.setPos(x, y + (double) Vector3i1.getY(), z); } x = cart.getX(); @@ -161,13 +161,13 @@ public class MinecartSim2020 { Vector3d Vector3d3 = cart.getPos(x, y, z); if (Vector3d3 != null && actualVec != null) { double d17 = (actualVec.y - Vector3d3.y) * 0.05D; - Vector3d Vector3d4 = cart.getMotion(); - double d18 = Math.sqrt(horizontalMag(Vector3d4)); + Vector3d Vector3d4 = cart.getDeltaMovement(); + double d18 = Math.sqrt(getHorizontalDistanceSqr(Vector3d4)); if (d18 > 0.0D) { - cart.setMotion(Vector3d4.mul((d18 + d17) / d18, 1.0D, (d18 + d17) / d18)); + cart.setDeltaMovement(Vector3d4.multiply((d18 + d17) / d18, 1.0D, (d18 + d17) / d18)); } - cart.setPosition(x, Vector3d3.y, z); + cart.setPos(x, Vector3d3.y, z); } x = cart.getX(); @@ -177,12 +177,12 @@ public class MinecartSim2020 { int j = MathHelper.floor(x); int i = MathHelper.floor(z); if (j != cartPos.getX() || i != cartPos.getZ()) { - Vector3d Vector3d5 = cart.getMotion(); - double d26 = Math.sqrt(horizontalMag(Vector3d5)); - cart.setMotion(d26 * (double) (j - cartPos.getX()), Vector3d5.y, d26 * (double) (i - cartPos.getZ())); + Vector3d Vector3d5 = cart.getDeltaMovement(); + double d26 = Math.sqrt(getHorizontalDistanceSqr(Vector3d5)); + cart.setDeltaMovement(d26 * (double) (j - cartPos.getX()), Vector3d5.y, d26 * (double) (i - cartPos.getZ())); } - cart.setMotion(previousMotion); + cart.setDeltaMovement(previousMotion); } public static Vector3d getRailVec(RailShape shape) { diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/capability/CapabilityMinecartController.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/capability/CapabilityMinecartController.java index c8e790a0b..7dcb896ba 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/capability/CapabilityMinecartController.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/capability/CapabilityMinecartController.java @@ -98,13 +98,13 @@ public class CapabilityMinecartController implements ICapabilitySerializable carts = loadedMinecartsByUUID.get(world); List unloads = queuedUnloads.get(world); - UUID uniqueID = entity.getUniqueID(); + UUID uniqueID = entity.getUUID(); if (!carts.containsKey(uniqueID) || unloads.contains(uniqueID)) return; - if (world.isRemote) + if (world.isClientSide) return; - handleKilledMinecart(world, carts.get(uniqueID), entity.getPositionVec()); + handleKilledMinecart(world, carts.get(uniqueID), entity.position()); } protected static void handleKilledMinecart(World world, MinecartController controller, Vector3d removedPos) { @@ -184,13 +184,13 @@ public class CapabilityMinecartController implements ICapabilitySerializable { internalStall.booleanValue() || otherCart == null || !otherCart.isPresent() || otherCart.isStalled(false)); })); - if (!world.isRemote) { + if (!world.isClientSide) { setStalled(internalStall.booleanValue(), true); disassemble(cart); } @@ -99,29 +99,29 @@ public class MinecartController implements INBTSerializable { if (passengers.isEmpty() || !(passengers.get(0) instanceof AbstractContraptionEntity)) { return; } - World world = cart.world; + World world = cart.level; int i = MathHelper.floor(cart.getX()); int j = MathHelper.floor(cart.getY()); int k = MathHelper.floor(cart.getZ()); if (world.getBlockState(new BlockPos(i, j - 1, k)) - .isIn(BlockTags.RAILS)) { + .is(BlockTags.RAILS)) { --j; } BlockPos blockpos = new BlockPos(i, j, k); BlockState blockstate = world.getBlockState(blockpos); - if (cart.canUseRail() && blockstate.isIn(BlockTags.RAILS) + if (cart.canUseRail() && blockstate.is(BlockTags.RAILS) && blockstate.getBlock() instanceof PoweredRailBlock && ((PoweredRailBlock) blockstate.getBlock()) .isActivatorRail()) { - if (cart.isBeingRidden()) { - cart.removePassengers(); + if (cart.isVehicle()) { + cart.ejectPassengers(); } - if (cart.getRollingAmplitude() == 0) { - cart.setRollingDirection(-cart.getRollingDirection()); - cart.setRollingAmplitude(10); + if (cart.getHurtTime() == 0) { + cart.setHurtDir(-cart.getHurtDir()); + cart.setHurtTime(10); cart.setDamage(50.0F); - cart.velocityChanged = true; + cart.hurtMarked = true; } } } @@ -172,7 +172,7 @@ public class MinecartController implements INBTSerializable { } public void removeConnection(boolean main) { - if (hasContraptionCoupling(main) && !getWorld().isRemote) { + if (hasContraptionCoupling(main) && !getWorld().isClientSide) { List passengers = cart().getPassengers(); if (!passengers.isEmpty()) { Entity entity = passengers.get(0); @@ -240,8 +240,8 @@ public class MinecartController implements INBTSerializable { } public void coupleWith(boolean isLeading, UUID coupled, float length, boolean contraption) { - UUID mainID = isLeading ? cart().getUniqueID() : coupled; - UUID connectedID = isLeading ? coupled : cart().getUniqueID(); + UUID mainID = isLeading ? cart().getUUID() : coupled; + UUID connectedID = isLeading ? coupled : cart().getUUID(); couplings.set(isLeading, Optional.of(new CouplingData(mainID, connectedID, length, contraption))); needsEntryRefresh |= isLeading; sendData(); @@ -290,7 +290,7 @@ public class MinecartController implements INBTSerializable { } public void sendData() { - if (getWorld().isRemote) + if (getWorld().isClientSide) return; AllPackets.channel.send(PacketDistributor.TRACKING_ENTITY.with(this::cart), new MinecartControllerUpdatePacket(this)); @@ -342,7 +342,7 @@ public class MinecartController implements INBTSerializable { } private World getWorld() { - return cart().getEntityWorld(); + return cart().getCommandSenderWorld(); } private static class CouplingData { @@ -367,16 +367,16 @@ public class MinecartController implements INBTSerializable { CompoundNBT serialize() { CompoundNBT nbt = new CompoundNBT(); - nbt.put("Main", NBTUtil.fromUuid(mainCartID)); - nbt.put("Connected", NBTUtil.fromUuid(connectedCartID)); + nbt.put("Main", NBTUtil.createUUID(mainCartID)); + nbt.put("Connected", NBTUtil.createUUID(connectedCartID)); nbt.putFloat("Length", length); nbt.putBoolean("Contraption", contraption); return nbt; } static CouplingData read(CompoundNBT nbt) { - UUID mainCartID = NBTUtil.readUniqueId(NBTHelper.getINBT(nbt, "Main")); - UUID connectedCartID = NBTUtil.readUniqueId(NBTHelper.getINBT(nbt, "Connected")); + UUID mainCartID = NBTUtil.loadUUID(NBTHelper.getINBT(nbt, "Main")); + UUID connectedCartID = NBTUtil.loadUUID(NBTHelper.getINBT(nbt, "Connected")); float length = nbt.getFloat("Length"); boolean contraption = nbt.getBoolean("Contraption"); return new CouplingData(mainCartID, connectedCartID, length, contraption); @@ -396,22 +396,22 @@ public class MinecartController implements INBTSerializable { private StallData() {} StallData(AbstractMinecartEntity entity) { - position = entity.getPositionVec(); - motion = entity.getMotion(); - yaw = entity.rotationYaw; - pitch = entity.rotationPitch; + position = entity.position(); + motion = entity.getDeltaMovement(); + yaw = entity.yRot; + pitch = entity.xRot; tick(entity); } void tick(AbstractMinecartEntity entity) { - entity.setPosition(position.x, position.y, position.z); - entity.setMotion(Vector3d.ZERO); - entity.rotationYaw = yaw; - entity.rotationPitch = pitch; + entity.setPos(position.x, position.y, position.z); + entity.setDeltaMovement(Vector3d.ZERO); + entity.yRot = yaw; + entity.xRot = pitch; } void release(AbstractMinecartEntity entity) { - entity.setMotion(motion); + entity.setDeltaMovement(motion); } CompoundNBT serialize() { diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/capability/MinecartControllerUpdatePacket.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/capability/MinecartControllerUpdatePacket.java index 58008e2c8..2f52fb897 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/capability/MinecartControllerUpdatePacket.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/capability/MinecartControllerUpdatePacket.java @@ -21,19 +21,19 @@ public class MinecartControllerUpdatePacket extends SimplePacketBase { public MinecartControllerUpdatePacket(MinecartController controller) { entityID = controller.cart() - .getEntityId(); + .getId(); nbt = controller.serializeNBT(); } public MinecartControllerUpdatePacket(PacketBuffer buffer) { entityID = buffer.readInt(); - nbt = buffer.readCompoundTag(); + nbt = buffer.readNbt(); } @Override public void write(PacketBuffer buffer) { buffer.writeInt(entityID); - buffer.writeCompoundTag(nbt); + buffer.writeNbt(nbt); } @Override @@ -46,10 +46,10 @@ public class MinecartControllerUpdatePacket extends SimplePacketBase { @OnlyIn(Dist.CLIENT) private void handleCL() { - ClientWorld world = Minecraft.getInstance().world; + ClientWorld world = Minecraft.getInstance().level; if (world == null) return; - Entity entityByID = world.getEntityByID(entityID); + Entity entityByID = world.getEntity(entityID); if (entityByID == null) return; entityByID.getCapability(CapabilityMinecartController.MINECART_CONTROLLER_CAPABILITY) diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/tracks/ControllerRailBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/tracks/ControllerRailBlock.java index 4c803185f..acb0c8c20 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/tracks/ControllerRailBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/tracks/ControllerRailBlock.java @@ -39,29 +39,31 @@ import net.minecraft.util.math.vector.Vector3i; import net.minecraft.world.IBlockReader; import net.minecraft.world.World; +import net.minecraft.block.AbstractBlock.Properties; + @ParametersAreNonnullByDefault @MethodsReturnNonnullByDefault public class ControllerRailBlock extends AbstractRailBlock implements IWrenchable { public static final EnumProperty SHAPE = BlockStateProperties.RAIL_SHAPE_STRAIGHT; public static final BooleanProperty BACKWARDS = BooleanProperty.create("backwards"); - public static final IntegerProperty POWER = BlockStateProperties.POWER_0_15; + public static final IntegerProperty POWER = BlockStateProperties.POWER; public ControllerRailBlock(Properties properties) { super(true, properties); - this.setDefaultState(this.stateContainer.getBaseState() - .with(POWER, 0) - .with(BACKWARDS, false) - .with(SHAPE, NORTH_SOUTH)); + this.registerDefaultState(this.stateDefinition.any() + .setValue(POWER, 0) + .setValue(BACKWARDS, false) + .setValue(SHAPE, NORTH_SOUTH)); } public static Vector3i getAccelerationVector(BlockState state) { Direction pointingTo = getPointingTowards(state); - return (isStateBackwards(state) ? pointingTo.getOpposite() : pointingTo).getDirectionVec(); + return (isStateBackwards(state) ? pointingTo.getOpposite() : pointingTo).getNormal(); } private static Direction getPointingTowards(BlockState state) { - switch (state.get(SHAPE)) { + switch (state.getValue(SHAPE)) { case ASCENDING_WEST: case EAST_WEST: return Direction.WEST; @@ -75,9 +77,9 @@ public class ControllerRailBlock extends AbstractRailBlock implements IWrenchabl } @Override - protected BlockState getUpdatedState(World world, BlockPos pos, BlockState state, boolean p_208489_4_) { - BlockState updatedState = super.getUpdatedState(world, pos, state, p_208489_4_); - if (updatedState.get(SHAPE) == state.get(SHAPE)) + protected BlockState updateDir(World world, BlockPos pos, BlockState state, boolean p_208489_4_) { + BlockState updatedState = super.updateDir(world, pos, state, p_208489_4_); + if (updatedState.getValue(SHAPE) == state.getValue(SHAPE)) return updatedState; BlockState reversedUpdatedState = updatedState; @@ -87,13 +89,13 @@ public class ControllerRailBlock extends AbstractRailBlock implements IWrenchabl Direction offset = getPointingTowards(updatedState); if (opposite) offset = offset.getOpposite(); - for (BlockPos adjPos : Iterate.hereBelowAndAbove(pos.offset(offset))) { + for (BlockPos adjPos : Iterate.hereBelowAndAbove(pos.relative(offset))) { BlockState adjState = world.getBlockState(adjPos); if (!AllBlocks.CONTROLLER_RAIL.has(adjState)) continue; if (getPointingTowards(adjState).getAxis() != offset.getAxis()) continue; - if (adjState.get(BACKWARDS) != reversedUpdatedState.get(BACKWARDS)) + if (adjState.getValue(BACKWARDS) != reversedUpdatedState.getValue(BACKWARDS)) reversedUpdatedState = reversedUpdatedState.cycle(BACKWARDS); } } @@ -101,31 +103,31 @@ public class ControllerRailBlock extends AbstractRailBlock implements IWrenchabl // Replace if changed if (reversedUpdatedState != updatedState) - world.setBlockState(pos, reversedUpdatedState); + world.setBlockAndUpdate(pos, reversedUpdatedState); return reversedUpdatedState; } private static void decelerateCart(BlockPos pos, AbstractMinecartEntity cart) { Vector3d diff = VecHelper.getCenterOf(pos) - .subtract(cart.getPositionVec()); - cart.setMotion(diff.x / 16f, 0, diff.z / 16f); + .subtract(cart.position()); + cart.setDeltaMovement(diff.x / 16f, 0, diff.z / 16f); if (cart instanceof FurnaceMinecartEntity) { FurnaceMinecartEntity fme = (FurnaceMinecartEntity) cart; - fme.pushX = fme.pushZ = 0; + fme.xPush = fme.zPush = 0; } } private static boolean isStableWith(BlockState testState, IBlockReader world, BlockPos pos) { - return hasSolidSideOnTop(world, pos.down()) && (!testState.get(SHAPE) - .isAscending() || hasSolidSideOnTop(world, pos.offset(getPointingTowards(testState)))); + return canSupportRigidBlock(world, pos.below()) && (!testState.getValue(SHAPE) + .isAscending() || canSupportRigidBlock(world, pos.relative(getPointingTowards(testState)))); } @Override public BlockState getStateForPlacement(BlockItemUseContext p_196258_1_) { - Direction direction = p_196258_1_.getPlacementHorizontalFacing(); + Direction direction = p_196258_1_.getHorizontalDirection(); BlockState base = super.getStateForPlacement(p_196258_1_); - return (base == null ? getDefaultState() : base).with(BACKWARDS, + return (base == null ? defaultBlockState() : base).setValue(BACKWARDS, direction.getAxisDirection() == AxisDirection.POSITIVE); } @@ -135,26 +137,26 @@ public class ControllerRailBlock extends AbstractRailBlock implements IWrenchabl } @Override - protected void fillStateContainer(StateContainer.Builder p_206840_1_) { + protected void createBlockStateDefinition(StateContainer.Builder p_206840_1_) { p_206840_1_.add(SHAPE, POWER, BACKWARDS); } @Override public void onMinecartPass(BlockState state, World world, BlockPos pos, AbstractMinecartEntity cart) { - if (world.isRemote) + if (world.isClientSide) return; - Vector3d accelerationVec = Vector3d.of(getAccelerationVector(state)); - double targetSpeed = cart.getMaxSpeedWithRail() * state.get(POWER) / 15f; + Vector3d accelerationVec = Vector3d.atLowerCornerOf(getAccelerationVector(state)); + double targetSpeed = cart.getMaxSpeedWithRail() * state.getValue(POWER) / 15f; if (cart instanceof FurnaceMinecartEntity) { FurnaceMinecartEntity fme = (FurnaceMinecartEntity) cart; - fme.pushX = accelerationVec.x; - fme.pushZ = accelerationVec.z; + fme.xPush = accelerationVec.x; + fme.zPush = accelerationVec.z; } - Vector3d motion = cart.getMotion(); - if ((motion.dotProduct(accelerationVec) >= 0 || motion.lengthSquared() < 0.0001) && targetSpeed > 0) - cart.setMotion(accelerationVec.scale(targetSpeed)); + Vector3d motion = cart.getDeltaMovement(); + if ((motion.dot(accelerationVec) >= 0 || motion.lengthSqr() < 0.0001) && targetSpeed > 0) + cart.setDeltaMovement(accelerationVec.scale(targetSpeed)); else decelerateCart(pos, cart); } @@ -162,12 +164,12 @@ public class ControllerRailBlock extends AbstractRailBlock implements IWrenchabl @Override protected void updateState(BlockState state, World world, BlockPos pos, Block block) { int newPower = calculatePower(world, pos); - if (state.get(POWER) != newPower) - placeAndNotify(state.with(POWER, newPower), pos, world); + if (state.getValue(POWER) != newPower) + placeAndNotify(state.setValue(POWER, newPower), pos, world); } private int calculatePower(World world, BlockPos pos) { - int newPower = world.getRedstonePowerFromNeighbors(pos); + int newPower = world.getBestNeighborSignal(pos); if (newPower != 0) return newPower; @@ -184,7 +186,7 @@ public class ControllerRailBlock extends AbstractRailBlock implements IWrenchabl break; forwardDistance++; lastForwardRail = testPos; - forwardPower = world.getRedstonePowerFromNeighbors(testPos); + forwardPower = world.getBestNeighborSignal(testPos); if (forwardPower != 0) break; } @@ -194,7 +196,7 @@ public class ControllerRailBlock extends AbstractRailBlock implements IWrenchabl break; backwardsDistance++; lastBackwardsRail = testPos; - backwardsPower = world.getRedstonePowerFromNeighbors(testPos); + backwardsPower = world.getBestNeighborSignal(testPos); if (backwardsPower != 0) break; } @@ -213,10 +215,10 @@ public class ControllerRailBlock extends AbstractRailBlock implements IWrenchabl @Override public ActionResultType onWrenched(BlockState state, ItemUseContext context) { - World world = context.getWorld(); - if (world.isRemote) + World world = context.getLevel(); + if (world.isClientSide) return ActionResultType.SUCCESS; - BlockPos pos = context.getPos(); + BlockPos pos = context.getClickedPos(); for (Rotation testRotation : new Rotation[] { Rotation.CLOCKWISE_90, Rotation.CLOCKWISE_180, Rotation.COUNTERCLOCKWISE_90 }) { BlockState testState = rotate(state, testRotation); @@ -225,18 +227,18 @@ public class ControllerRailBlock extends AbstractRailBlock implements IWrenchabl return ActionResultType.SUCCESS; } } - BlockState testState = state.with(BACKWARDS, !state.get(BACKWARDS)); + BlockState testState = state.setValue(BACKWARDS, !state.getValue(BACKWARDS)); if (isStableWith(testState, world, pos)) placeAndNotify(testState, pos, world); return ActionResultType.SUCCESS; } private void placeAndNotify(BlockState state, BlockPos pos, World world) { - world.setBlockState(pos, state, 3); - world.notifyNeighborsOfStateChange(pos.down(), this); - if (state.get(SHAPE) + world.setBlock(pos, state, 3); + world.updateNeighborsAt(pos.below(), this); + if (state.getValue(SHAPE) .isAscending()) - world.notifyNeighborsOfStateChange(pos.up(), this); + world.updateNeighborsAt(pos.above(), this); } @Nullable @@ -245,9 +247,9 @@ public class ControllerRailBlock extends AbstractRailBlock implements IWrenchabl if (!(current.getBlock() instanceof ControllerRailBlock)) return null; Vector3i accelerationVec = getAccelerationVector(current); - BlockPos baseTestPos = reversed ? from.subtract(accelerationVec) : from.add(accelerationVec); + BlockPos baseTestPos = reversed ? from.subtract(accelerationVec) : from.offset(accelerationVec); for (BlockPos testPos : Iterate.hereBelowAndAbove(baseTestPos)) { - if (testPos.getY() > from.getY() && !current.get(SHAPE) + if (testPos.getY() > from.getY() && !current.getValue(SHAPE) .isAscending()) continue; BlockState testState = world.getBlockState(testPos); @@ -259,13 +261,13 @@ public class ControllerRailBlock extends AbstractRailBlock implements IWrenchabl } @Override - public boolean hasComparatorInputOverride(BlockState state) { + public boolean hasAnalogOutputSignal(BlockState state) { return true; } @Override - public int getComparatorInputOverride(BlockState state, World world, BlockPos pos) { - return state.get(POWER); + public int getAnalogOutputSignal(BlockState state, World world, BlockPos pos) { + return state.getValue(POWER); } @Override @@ -273,11 +275,11 @@ public class ControllerRailBlock extends AbstractRailBlock implements IWrenchabl if (rotation == Rotation.NONE) return state; - RailShape railshape = Blocks.POWERED_RAIL.getDefaultState() - .with(SHAPE, state.get(SHAPE)) + RailShape railshape = Blocks.POWERED_RAIL.defaultBlockState() + .setValue(SHAPE, state.getValue(SHAPE)) .rotate(rotation) - .get(SHAPE); - state = state.with(SHAPE, railshape); + .getValue(SHAPE); + state = state.setValue(SHAPE, railshape); if (rotation == Rotation.CLOCKWISE_180 || (getPointingTowards(state).getAxis() == Axis.Z) == (rotation == Rotation.COUNTERCLOCKWISE_90)) @@ -291,11 +293,11 @@ public class ControllerRailBlock extends AbstractRailBlock implements IWrenchabl if (mirror == Mirror.NONE) return state; - RailShape railshape = Blocks.POWERED_RAIL.getDefaultState() - .with(SHAPE, state.get(SHAPE)) + RailShape railshape = Blocks.POWERED_RAIL.defaultBlockState() + .setValue(SHAPE, state.getValue(SHAPE)) .mirror(mirror) - .get(SHAPE); - state = state.with(SHAPE, railshape); + .getValue(SHAPE); + state = state.setValue(SHAPE, railshape); if ((getPointingTowards(state).getAxis() == Axis.Z) == (mirror == Mirror.LEFT_RIGHT)) return state.cycle(BACKWARDS); @@ -304,10 +306,10 @@ public class ControllerRailBlock extends AbstractRailBlock implements IWrenchabl } public static boolean isStateBackwards(BlockState state) { - return state.get(BACKWARDS) ^ isReversedSlope(state); + return state.getValue(BACKWARDS) ^ isReversedSlope(state); } public static boolean isReversedSlope(BlockState state) { - return state.get(SHAPE) == RailShape.ASCENDING_SOUTH || state.get(SHAPE) == RailShape.ASCENDING_EAST; + return state.getValue(SHAPE) == RailShape.ASCENDING_SOUTH || state.getValue(SHAPE) == RailShape.ASCENDING_EAST; } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/tracks/ControllerRailGenerator.java b/src/main/java/com/simibubi/create/content/contraptions/components/tracks/ControllerRailGenerator.java index cc961ac13..0cdda2aa0 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/tracks/ControllerRailGenerator.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/tracks/ControllerRailGenerator.java @@ -25,7 +25,7 @@ public class ControllerRailGenerator extends SpecialBlockStateGen { @Override protected int getYRotation(BlockState state) { - RailShape shape = state.get(ControllerRailBlock.SHAPE); + RailShape shape = state.getValue(ControllerRailBlock.SHAPE); boolean backwards = ControllerRailBlock.isStateBackwards(state); int rotation = backwards ? 180 : 0; @@ -45,7 +45,7 @@ public class ControllerRailGenerator extends SpecialBlockStateGen { @Override public ModelFile getModel(DataGenContext ctx, RegistrateBlockstateProvider prov, BlockState state) { - RailShape shape = state.get(ControllerRailBlock.SHAPE); + RailShape shape = state.getValue(ControllerRailBlock.SHAPE); boolean backwards = ControllerRailBlock.isStateBackwards(state); String model = shape.isAscending() ? backwards ? "ascending_south" : "ascending_north" : "north_south"; diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/tracks/ReinforcedRailBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/tracks/ReinforcedRailBlock.java index cb092ceff..e6b0e662f 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/tracks/ReinforcedRailBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/tracks/ReinforcedRailBlock.java @@ -25,6 +25,8 @@ import net.minecraft.world.IBlockReader; import net.minecraft.world.IWorldReader; import net.minecraft.world.World; +import net.minecraft.block.AbstractBlock.Properties; + public class ReinforcedRailBlock extends AbstractRailBlock { public static Property RAIL_SHAPE = @@ -38,7 +40,7 @@ public class ReinforcedRailBlock extends AbstractRailBlock { } @Override - public void fillItemGroup(ItemGroup p_149666_1_, NonNullList p_149666_2_) { + public void fillItemCategory(ItemGroup p_149666_1_, NonNullList p_149666_2_) { // TODO re-add when finished } @@ -49,15 +51,15 @@ public class ReinforcedRailBlock extends AbstractRailBlock { } @Override - protected void fillStateContainer(Builder builder) { + protected void createBlockStateDefinition(Builder builder) { builder.add(RAIL_SHAPE, CONNECTS_N, CONNECTS_S); - super.fillStateContainer(builder); + super.createBlockStateDefinition(builder); } @Override public BlockState getStateForPlacement(BlockItemUseContext context) { - boolean alongX = context.getPlacementHorizontalFacing().getAxis() == Axis.X; - return super.getStateForPlacement(context).with(RAIL_SHAPE, alongX ? RailShape.EAST_WEST : RailShape.NORTH_SOUTH).with(CONNECTS_N, false).with(CONNECTS_S, false); + boolean alongX = context.getHorizontalDirection().getAxis() == Axis.X; + return super.getStateForPlacement(context).setValue(RAIL_SHAPE, alongX ? RailShape.EAST_WEST : RailShape.NORTH_SOUTH).setValue(CONNECTS_N, false).setValue(CONNECTS_S, false); } @Override @@ -68,22 +70,22 @@ public class ReinforcedRailBlock extends AbstractRailBlock { @Override protected void updateState(@Nonnull BlockState state, @Nonnull World world, @Nonnull BlockPos pos, @Nonnull Block block) { super.updateState(state, world, pos, block); - world.setBlockState(pos, getUpdatedState(world, pos, state, true)); + world.setBlockAndUpdate(pos, updateDir(world, pos, state, true)); } @Override @Nonnull - protected BlockState getUpdatedState(@Nonnull World world, BlockPos pos, BlockState state, + protected BlockState updateDir(@Nonnull World world, BlockPos pos, BlockState state, boolean p_208489_4_) { - boolean alongX = state.get(RAIL_SHAPE) == RailShape.EAST_WEST; - BlockPos sPos = pos.add(alongX ? -1 : 0, 0, alongX ? 0 : 1); - BlockPos nPos = pos.add(alongX ? 1 : 0, 0, alongX ? 0 : -1); + boolean alongX = state.getValue(RAIL_SHAPE) == RailShape.EAST_WEST; + BlockPos sPos = pos.offset(alongX ? -1 : 0, 0, alongX ? 0 : 1); + BlockPos nPos = pos.offset(alongX ? 1 : 0, 0, alongX ? 0 : -1); - return super.getUpdatedState(world, pos, state, p_208489_4_).with(CONNECTS_S, world.getBlockState(sPos).getBlock() instanceof ReinforcedRailBlock && - (world.getBlockState(sPos).get(RAIL_SHAPE) == state.get(RAIL_SHAPE))) - .with(CONNECTS_N, world.getBlockState(nPos).getBlock() instanceof ReinforcedRailBlock && - (world.getBlockState(nPos).get(RAIL_SHAPE) == state.get(RAIL_SHAPE))); + return super.updateDir(world, pos, state, p_208489_4_).setValue(CONNECTS_S, world.getBlockState(sPos).getBlock() instanceof ReinforcedRailBlock && + (world.getBlockState(sPos).getValue(RAIL_SHAPE) == state.getValue(RAIL_SHAPE))) + .setValue(CONNECTS_N, world.getBlockState(nPos).getBlock() instanceof ReinforcedRailBlock && + (world.getBlockState(nPos).getValue(RAIL_SHAPE) == state.getValue(RAIL_SHAPE))); } @Override @@ -98,13 +100,13 @@ public class ReinforcedRailBlock extends AbstractRailBlock { @Override @Nonnull public VoxelShape getShape(BlockState state, @Nonnull IBlockReader reader, @Nonnull BlockPos pos, ISelectionContext context) { - boolean alongX = state.get(RAIL_SHAPE) == RailShape.EAST_WEST; - return VoxelShapes.or(makeCuboidShape(0, -2, 0, 16, 2, 16), VoxelShapes.or(makeCuboidShape(0, -2, 0, alongX ? 16 : -1, 12, alongX ? -1 : 16), makeCuboidShape(alongX ? 0 : 17, -2, alongX ? 17 : 0, 16, 12, 16))); + boolean alongX = state.getValue(RAIL_SHAPE) == RailShape.EAST_WEST; + return VoxelShapes.or(box(0, -2, 0, 16, 2, 16), VoxelShapes.or(box(0, -2, 0, alongX ? 16 : -1, 12, alongX ? -1 : 16), box(alongX ? 0 : 17, -2, alongX ? 17 : 0, 16, 12, 16))); } @Override @Nonnull - public PushReaction getPushReaction(BlockState state) { + public PushReaction getPistonPushReaction(BlockState state) { return PushReaction.BLOCK; } @@ -115,16 +117,16 @@ public class ReinforcedRailBlock extends AbstractRailBlock { }*/ @Override - public boolean isValidPosition(BlockState state, IWorldReader world, BlockPos pos) { - return !(world.getBlockState(pos.down()).getBlock() instanceof AbstractRailBlock || world.getBlockState(pos.up()).getBlock() instanceof AbstractRailBlock); + public boolean canSurvive(BlockState state, IWorldReader world, BlockPos pos) { + return !(world.getBlockState(pos.below()).getBlock() instanceof AbstractRailBlock || world.getBlockState(pos.above()).getBlock() instanceof AbstractRailBlock); } @Override public void neighborChanged(@Nonnull BlockState state, World world, @Nonnull BlockPos pos, @Nonnull Block block, @Nonnull BlockPos pos2, boolean p_220069_6_) { - if (!world.isRemote) { - if ((world.getBlockState(pos.down()).getBlock() instanceof AbstractRailBlock)) { + if (!world.isClientSide) { + if ((world.getBlockState(pos.below()).getBlock() instanceof AbstractRailBlock)) { if (!p_220069_6_) { - spawnDrops(state, world, pos); + dropResources(state, world, pos); } world.removeBlock(pos, false); } else { diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/turntable/TurntableBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/turntable/TurntableBlock.java index c9763ef7f..9db909491 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/turntable/TurntableBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/turntable/TurntableBlock.java @@ -25,6 +25,8 @@ import net.minecraft.world.IBlockReader; import net.minecraft.world.IWorldReader; import net.minecraft.world.World; +import net.minecraft.block.AbstractBlock.Properties; + public class TurntableBlock extends KineticBlock implements ITE { public TurntableBlock(Properties properties) { @@ -37,7 +39,7 @@ public class TurntableBlock extends KineticBlock implements ITE 0) + if (e.getDeltaMovement().y > 0) return; if (e.getY() < pos.getY() + .5f) return; @@ -60,36 +62,36 @@ public class TurntableBlock extends KineticBlock implements ITE 1/4f) speed *= MathHelper.clamp((1/2f - offset.length()) * 2, 0, 1); - mc.player.rotationYaw = mc.player.prevRotationYaw - speed * AnimationTickHolder.getPartialTicks(); - mc.player.renderYawOffset = mc.player.rotationYaw; + mc.player.yRot = mc.player.yRotO - speed * AnimationTickHolder.getPartialTicks(); + mc.player.yBodyRot = mc.player.yRot; } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/waterwheel/WaterWheelBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/waterwheel/WaterWheelBlock.java index 86d267b38..30f644fef 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/waterwheel/WaterWheelBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/waterwheel/WaterWheelBlock.java @@ -32,6 +32,8 @@ import net.minecraft.world.IWorld; import net.minecraft.world.IWorldReader; import net.minecraft.world.World; +import net.minecraft.block.AbstractBlock.Properties; + @ParametersAreNonnullByDefault @MethodsReturnNonnullByDefault public class WaterWheelBlock extends DirectionalKineticBlock implements ITE { @@ -46,21 +48,21 @@ public class WaterWheelBlock extends DirectionalKineticBlock implements ITE 0 ^ !clockwise ? -flow.z * clockwiseMultiplier : -flow.z; } - if (te.getSpeed() == 0 && flowStrength != 0 && !world.isRemote()) { + if (te.getSpeed() == 0 && flowStrength != 0 && !world.isClientSide()) { AllTriggers.triggerForNearbyPlayers(AllTriggers.WATER_WHEEL, world, pos, 5); - if (FluidHelper.isLava(fluid.getFluid())) + if (FluidHelper.isLava(fluid.getType())) AllTriggers.triggerForNearbyPlayers(AllTriggers.LAVA_WHEEL, world, pos, 5); - if (fluid.getFluid() - .isEquivalentTo(AllFluids.CHOCOLATE.get())) + if (fluid.getType() + .isSame(AllFluids.CHOCOLATE.get())) AllTriggers.triggerForNearbyPlayers(AllTriggers.CHOCOLATE_WHEEL, world, pos, 5); } @@ -156,48 +158,48 @@ public class WaterWheelBlock extends DirectionalKineticBlock implements ITE tolerance) + else if (Vector3d.atLowerCornerOf(Direction.DOWN.getNormal()) + .dot(lookVec.normalize()) > tolerance) facing = Direction.DOWN; - else if (Vector3d.of(Direction.UP.getDirectionVec()) - .dotProduct(lookVec.normalize()) > tolerance) + else if (Vector3d.atLowerCornerOf(Direction.UP.getNormal()) + .dot(lookVec.normalize()) > tolerance) facing = Direction.UP; else facing = horizontalFacing; } - return getDefaultState().with(FACING, sneaking ? facing.getOpposite() : facing); + return defaultBlockState().setValue(FACING, sneaking ? facing.getOpposite() : facing); } @Override public boolean hasShaftTowards(IWorldReader world, BlockPos pos, BlockState state, Direction face) { - return state.get(FACING) + return state.getValue(FACING) .getAxis() == face.getAxis(); } @Override public Axis getRotationAxis(BlockState state) { - return state.get(FACING) + return state.getValue(FACING) .getAxis(); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/waterwheel/WaterWheelTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/waterwheel/WaterWheelTileEntity.java index 7f89e5c47..6b8b9e9d7 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/waterwheel/WaterWheelTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/waterwheel/WaterWheelTileEntity.java @@ -32,20 +32,20 @@ public class WaterWheelTileEntity extends GeneratingKineticTileEntity { if (compound.contains("Flows")) { for (Direction d : Iterate.directions) setFlow(d, compound.getCompound("Flows") - .getFloat(d.getString())); + .getFloat(d.getSerializedName())); } } @Override public AxisAlignedBB makeRenderBoundingBox() { - return new AxisAlignedBB(pos).grow(1); + return new AxisAlignedBB(worldPosition).inflate(1); } @Override public void write(CompoundNBT compound, boolean clientPacket) { CompoundNBT flows = new CompoundNBT(); for (Direction d : Iterate.directions) - flows.putFloat(d.getString(), this.flows.get(d)); + flows.putFloat(d.getSerializedName(), this.flows.get(d)); compound.put("Flows", flows); super.write(compound, clientPacket); @@ -53,7 +53,7 @@ public class WaterWheelTileEntity extends GeneratingKineticTileEntity { public void setFlow(Direction direction, float speed) { flows.put(direction, speed); - markDirty(); + setChanged(); } @Override @@ -70,7 +70,7 @@ public class WaterWheelTileEntity extends GeneratingKineticTileEntity { public void lazyTick() { super.lazyTick(); AllBlocks.WATER_WHEEL.get() - .updateAllSides(getBlockState(), world, pos); + .updateAllSides(getBlockState(), level, worldPosition); } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/FlowSource.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/FlowSource.java index e2beb3a37..4df90ba50 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/FlowSource.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/FlowSource.java @@ -70,7 +70,7 @@ public abstract class FlowSource { public void manageSource(World world) { if (fluidHandler.isPresent()) return; - TileEntity tileEntity = world.getTileEntity(location.getConnectedPos()); + TileEntity tileEntity = world.getBlockEntity(location.getConnectedPos()); if (tileEntity != null) fluidHandler = tileEntity.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, location.getOppositeFace()); diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidBottleItemHook.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidBottleItemHook.java index 9a2d9f047..16df63210 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidBottleItemHook.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidBottleItemHook.java @@ -18,6 +18,8 @@ import net.minecraftforge.event.entity.player.PlayerInteractEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod.EventBusSubscriber; +import net.minecraft.item.Item.Properties; + @EventBusSubscriber public class FluidBottleItemHook extends Item { @@ -35,15 +37,15 @@ public class FluidBottleItemHook extends Item { World world = event.getWorld(); PlayerEntity player = event.getPlayer(); - RayTraceResult raytraceresult = rayTrace(world, player, RayTraceContext.FluidMode.SOURCE_ONLY); + RayTraceResult raytraceresult = getPlayerPOVHitResult(world, player, RayTraceContext.FluidMode.SOURCE_ONLY); if (raytraceresult.getType() != RayTraceResult.Type.BLOCK) return; - BlockPos blockpos = ((BlockRayTraceResult) raytraceresult).getPos(); - if (!world.isBlockModifiable(player, blockpos)) + BlockPos blockpos = ((BlockRayTraceResult) raytraceresult).getBlockPos(); + if (!world.mayInteract(player, blockpos)) return; FluidState fluidState = world.getFluidState(blockpos); - if (fluidState.isTagged(FluidTags.WATER) && fluidState.getFluid() + if (fluidState.is(FluidTags.WATER) && fluidState.getType() .getRegistryName() .getNamespace() .equals(Create.ID)) { diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidFX.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidFX.java index bd22b97d1..8fb4b209f 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidFX.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidFX.java @@ -29,12 +29,12 @@ public class FluidFX { if (fluid == Fluids.EMPTY) return; - FluidState defaultState = fluid.getDefaultState(); + FluidState defaultState = fluid.defaultFluidState(); if (defaultState == null || defaultState.isEmpty()) { return; } - BlockParticleData blockParticleData = new BlockParticleData(ParticleTypes.BLOCK, defaultState.getBlockState()); + BlockParticleData blockParticleData = new BlockParticleData(ParticleTypes.BLOCK, defaultState.createLegacyBlock()); Vector3d center = VecHelper.getCenterOf(pos); for (int i = 0; i < 20; i++) { @@ -61,17 +61,17 @@ public class FluidFX { public static void spawnRimParticles(World world, BlockPos pos, Direction side, int amount, IParticleData particle, float rimRadius) { - Vector3d directionVec = Vector3d.of(side.getDirectionVec()); + Vector3d directionVec = Vector3d.atLowerCornerOf(side.getNormal()); for (int i = 0; i < amount; i++) { Vector3d vec = VecHelper.offsetRandomly(Vector3d.ZERO, r, 1) .normalize(); vec = VecHelper.clampComponentWise(vec, rimRadius) - .mul(VecHelper.axisAlingedPlaneOf(directionVec)) + .multiply(VecHelper.axisAlingedPlaneOf(directionVec)) .add(directionVec.scale(.45 + r.nextFloat() / 16f)); Vector3d m = vec.scale(.05f); vec = vec.add(VecHelper.getCenterOf(pos)); - world.addOptionalParticle(particle, vec.x, vec.y - 1 / 16f, vec.z, m.x, m.y, m.z); + world.addAlwaysVisibleParticle(particle, vec.x, vec.y - 1 / 16f, vec.z, m.x, m.y, m.z); } } @@ -79,7 +79,7 @@ public class FluidFX { float rimRadius, Vector3d directionVec, boolean inbound) { for (int i = 0; i < amount; i++) { Vector3d vec = VecHelper.offsetRandomly(Vector3d.ZERO, r, rimRadius * .75f); - vec = vec.mul(VecHelper.axisAlingedPlaneOf(directionVec)) + vec = vec.multiply(VecHelper.axisAlingedPlaneOf(directionVec)) .add(directionVec.scale(.5 + r.nextFloat() / 4f)); Vector3d m = vec.scale(1 / 4f); Vector3d centerOf = VecHelper.getCenterOf(pos); @@ -90,7 +90,7 @@ public class FluidFX { .subtract(vec) .scale(1 / 16f); } - world.addOptionalParticle(particle, vec.x, vec.y - 1 / 16f, vec.z, m.x, m.y, m.z); + world.addAlwaysVisibleParticle(particle, vec.x, vec.y - 1 / 16f, vec.z, m.x, m.y, m.z); } } @@ -99,7 +99,7 @@ public class FluidFX { } private static World world() { - return Minecraft.getInstance().world; + return Minecraft.getInstance().level; } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidPropagator.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidPropagator.java index 6e49b3c2e..9fe68887f 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidPropagator.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidPropagator.java @@ -54,14 +54,14 @@ public class FluidPropagator { pipe.wipePressure(); for (Direction direction : getPipeConnections(currentState, pipe)) { - BlockPos target = currentPos.offset(direction); + BlockPos target = currentPos.relative(direction); if (!world.isAreaLoaded(target, 0)) continue; - TileEntity tileEntity = world.getTileEntity(target); + TileEntity tileEntity = world.getBlockEntity(target); BlockState targetState = world.getBlockState(target); if (tileEntity instanceof PumpTileEntity) { - if (!AllBlocks.MECHANICAL_PUMP.has(targetState) || targetState.get(PumpBlock.FACING) + if (!AllBlocks.MECHANICAL_PUMP.has(targetState) || targetState.getValue(PumpBlock.FACING) .getAxis() != direction.getAxis()) continue; discoveredPumps.add(Pair.of((PumpTileEntity) tileEntity, direction.getOpposite())); @@ -101,7 +101,7 @@ public class FluidPropagator { for (Direction d : Iterate.directions) { if (pos.equals(start) && d != side) continue; - BlockPos target = pos.offset(d); + BlockPos target = pos.relative(d); if (visited.contains(target)) continue; @@ -123,7 +123,7 @@ public class FluidPropagator { public static Direction validateNeighbourChange(BlockState state, World world, BlockPos pos, Block otherBlock, BlockPos neighborPos, boolean isMoving) { - if (world.isRemote) + if (world.isClientSide) return null; if (otherBlock instanceof FluidPipeBlock) return null; @@ -136,7 +136,7 @@ public class FluidPropagator { if (getStraightPipeAxis(state) == null) return null; for (Direction d : Iterate.directions) { - if (!pos.offset(d) + if (!pos.relative(d) .equals(neighborPos)) continue; return d; @@ -149,21 +149,21 @@ public class FluidPropagator { } public static boolean isOpenEnd(IBlockReader reader, BlockPos pos, Direction side) { - BlockPos connectedPos = pos.offset(side); + BlockPos connectedPos = pos.relative(side); BlockState connectedState = reader.getBlockState(connectedPos); FluidTransportBehaviour pipe = FluidPropagator.getPipe(reader, connectedPos); if (pipe != null && pipe.canHaveFlowToward(connectedState, side.getOpposite())) return false; - if (PumpBlock.isPump(connectedState) && connectedState.get(PumpBlock.FACING) + if (PumpBlock.isPump(connectedState) && connectedState.getValue(PumpBlock.FACING) .getAxis() == side.getAxis()) return false; - if (connectedState.contains(BlockStateProperties.HONEY_LEVEL)) + if (connectedState.hasProperty(BlockStateProperties.LEVEL_HONEY)) return true; if (BlockHelper.hasBlockSolidSide(connectedState, reader, connectedPos, side.getOpposite())) return false; if (!(connectedState.getMaterial() - .isReplaceable() && connectedState.getBlockHardness(reader, connectedPos) != -1) - && !connectedState.contains(BlockStateProperties.WATERLOGGED)) + .isReplaceable() && connectedState.getDestroySpeed(reader, connectedPos) != -1) + && !connectedState.hasProperty(BlockStateProperties.WATERLOGGED)) return false; return true; } @@ -202,7 +202,7 @@ public class FluidPropagator { // } public static boolean hasFluidCapability(IBlockReader world, BlockPos pos, Direction side) { - TileEntity tileEntity = world.getTileEntity(pos); + TileEntity tileEntity = world.getBlockEntity(pos); return tileEntity != null && tileEntity.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, side) .isPresent(); } @@ -210,17 +210,17 @@ public class FluidPropagator { @Nullable public static Axis getStraightPipeAxis(BlockState state) { if (state.getBlock() instanceof PumpBlock) - return state.get(PumpBlock.FACING) + return state.getValue(PumpBlock.FACING) .getAxis(); if (state.getBlock() instanceof AxisPipeBlock) - return state.get(AxisPipeBlock.AXIS); + return state.getValue(AxisPipeBlock.AXIS); if (!FluidPipeBlock.isPipe(state)) return null; Axis axisFound = null; int connections = 0; for (Axis axis : Iterate.axes) { - Direction d1 = Direction.getFacingFromAxis(AxisDirection.NEGATIVE, axis); - Direction d2 = Direction.getFacingFromAxis(AxisDirection.POSITIVE, axis); + Direction d1 = Direction.get(AxisDirection.NEGATIVE, axis); + Direction d2 = Direction.get(AxisDirection.POSITIVE, axis); boolean openAt1 = FluidPipeBlock.isOpenAt(state, d1); boolean openAt2 = FluidPipeBlock.isOpenAt(state, d2); if (openAt1) diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidReactions.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidReactions.java index aa010ab7b..9c249f8fd 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidReactions.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidReactions.java @@ -24,41 +24,41 @@ public class FluidReactions { AllTriggers.triggerForNearbyPlayers(AllTriggers.PIPE_COLLISION, world, pos, 5); if (f1 == Fluids.WATER && f2 == Fluids.LAVA || f2 == Fluids.WATER && f1 == Fluids.LAVA) - world.setBlockState(pos, Blocks.COBBLESTONE.getDefaultState()); + world.setBlockAndUpdate(pos, Blocks.COBBLESTONE.defaultBlockState()); else if (f1 == Fluids.LAVA && FluidHelper.hasBlockState(f2)) { BlockState lavaInteraction = AllFluids.getLavaInteraction(FluidHelper.convertToFlowing(f2) - .getDefaultState()); + .defaultFluidState()); if (lavaInteraction != null) - world.setBlockState(pos, lavaInteraction); + world.setBlockAndUpdate(pos, lavaInteraction); } else if (f2 == Fluids.LAVA && FluidHelper.hasBlockState(f1)) { BlockState lavaInteraction = AllFluids.getLavaInteraction(FluidHelper.convertToFlowing(f1) - .getDefaultState()); + .defaultFluidState()); if (lavaInteraction != null) - world.setBlockState(pos, lavaInteraction); + world.setBlockAndUpdate(pos, lavaInteraction); } } public static void handlePipeSpillCollision(World world, BlockPos pos, Fluid pipeFluid, FluidState worldFluid) { Fluid pf = FluidHelper.convertToStill(pipeFluid); - Fluid wf = worldFluid.getFluid(); - if (pf.isIn(FluidTags.WATER) && wf == Fluids.LAVA) - world.setBlockState(pos, Blocks.OBSIDIAN.getDefaultState()); + Fluid wf = worldFluid.getType(); + if (pf.is(FluidTags.WATER) && wf == Fluids.LAVA) + world.setBlockAndUpdate(pos, Blocks.OBSIDIAN.defaultBlockState()); else if (pf == Fluids.WATER && wf == Fluids.FLOWING_LAVA) - world.setBlockState(pos, Blocks.COBBLESTONE.getDefaultState()); + world.setBlockAndUpdate(pos, Blocks.COBBLESTONE.defaultBlockState()); else if (pf == Fluids.LAVA && wf == Fluids.WATER) - world.setBlockState(pos, Blocks.STONE.getDefaultState()); + world.setBlockAndUpdate(pos, Blocks.STONE.defaultBlockState()); else if (pf == Fluids.LAVA && wf == Fluids.FLOWING_WATER) - world.setBlockState(pos, Blocks.COBBLESTONE.getDefaultState()); + world.setBlockAndUpdate(pos, Blocks.COBBLESTONE.defaultBlockState()); if (pf == Fluids.LAVA) { BlockState lavaInteraction = AllFluids.getLavaInteraction(worldFluid); if (lavaInteraction != null) - world.setBlockState(pos, lavaInteraction); + world.setBlockAndUpdate(pos, lavaInteraction); } else if (wf == Fluids.FLOWING_LAVA && FluidHelper.hasBlockState(pf)) { BlockState lavaInteraction = AllFluids.getLavaInteraction(FluidHelper.convertToFlowing(pf) - .getDefaultState()); + .defaultFluidState()); if (lavaInteraction != null) - world.setBlockState(pos, lavaInteraction); + world.setBlockAndUpdate(pos, lavaInteraction); } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidTransportBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidTransportBehaviour.java index 1370d3b5d..87d73c00c 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidTransportBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidTransportBehaviour.java @@ -60,7 +60,7 @@ public abstract class FluidTransportBehaviour extends TileEntityBehaviour { super.tick(); World world = getWorld(); BlockPos pos = getPos(); - boolean onServer = !world.isRemote || tileEntity.isVirtual(); + boolean onServer = !world.isClientSide || tileEntity.isVirtual(); if (interfaces == null) return; @@ -145,7 +145,7 @@ public abstract class FluidTransportBehaviour extends TileEntityBehaviour { if (interfaces == null) interfaces = new IdentityHashMap<>(); for (Direction face : Iterate.directions) - if (nbt.contains(face.getName2())) + if (nbt.contains(face.getName())) interfaces.computeIfAbsent(face, d -> new PipeConnection(d)); // Invalid data (missing/outdated). Defer init to runtime @@ -155,7 +155,7 @@ public abstract class FluidTransportBehaviour extends TileEntityBehaviour { } interfaces.values() - .forEach(connection -> connection.deserializeNBT(nbt, tileEntity.getPos(), clientPacket)); + .forEach(connection -> connection.deserializeNBT(nbt, tileEntity.getBlockPos(), clientPacket)); } @Override @@ -238,15 +238,15 @@ public abstract class FluidTransportBehaviour extends TileEntityBehaviour { if (!canHaveFlowToward(state, direction)) return AttachmentTypes.NONE; - BlockPos offsetPos = pos.offset(direction); + BlockPos offsetPos = pos.relative(direction); BlockState facingState = world.getBlockState(offsetPos); - if (facingState.getBlock() instanceof PumpBlock && facingState.get(PumpBlock.FACING) + if (facingState.getBlock() instanceof PumpBlock && facingState.getValue(PumpBlock.FACING) .getAxis() == direction.getAxis()) return AttachmentTypes.NONE; if (AllBlocks.ENCASED_FLUID_PIPE.has(facingState) - && facingState.get(EncasedPipeBlock.FACING_TO_PROPERTY_MAP.get(direction.getOpposite()))) + && facingState.getValue(EncasedPipeBlock.FACING_TO_PROPERTY_MAP.get(direction.getOpposite()))) return AttachmentTypes.NONE; if (FluidPropagator.hasFluidCapability(world, offsetPos, direction.getOpposite()) diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/OpenEndedPipe.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/OpenEndedPipe.java index 1aa0ecd7c..f412b03d9 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/OpenEndedPipe.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/OpenEndedPipe.java @@ -1,6 +1,6 @@ package com.simibubi.create.content.contraptions.fluids; -import static net.minecraft.state.properties.BlockStateProperties.HONEY_LEVEL; +import static net.minecraft.state.properties.BlockStateProperties.LEVEL_HONEY; import static net.minecraft.state.properties.BlockStateProperties.WATERLOGGED; import java.util.List; @@ -38,6 +38,8 @@ import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.capability.IFluidHandler; import net.minecraftforge.fluids.capability.templates.FluidTank; +import net.minecraftforge.fluids.capability.IFluidHandler.FluidAction; + public class OpenEndedPipe extends FlowSource { World world; @@ -56,9 +58,9 @@ public class OpenEndedPipe extends FlowSource { fluidHandler = new OpenEndFluidHandler(); outputPos = face.getConnectedPos(); pos = face.getPos(); - aoe = new AxisAlignedBB(outputPos).expand(0, -1, 0); + aoe = new AxisAlignedBB(outputPos).expandTowards(0, -1, 0); if (face.getFace() == Direction.DOWN) - aoe = aoe.expand(0, -1, 0); + aoe = aoe.expandTowards(0, -1, 0); } @Override @@ -75,13 +77,13 @@ public class OpenEndedPipe extends FlowSource { BlockState state = world.getBlockState(outputPos); FluidState fluidState = state.getFluidState(); - boolean waterlog = state.contains(WATERLOGGED); + boolean waterlog = state.hasProperty(WATERLOGGED); - if (state.contains(HONEY_LEVEL) && state.get(HONEY_LEVEL) >= 5) { + if (state.hasProperty(LEVEL_HONEY) && state.getValue(LEVEL_HONEY) >= 5) { if (!simulate) - world.setBlockState(outputPos, state.with(HONEY_LEVEL, 0), 3); + world.setBlock(outputPos, state.setValue(LEVEL_HONEY, 0), 3); return new FluidStack(AllFluids.HONEY.get() - .getStillFluid(), 250); + .getSource(), 250); } if (!waterlog && !state.getMaterial() @@ -90,7 +92,7 @@ public class OpenEndedPipe extends FlowSource { if (fluidState.isEmpty() || !fluidState.isSource()) return empty; - FluidStack stack = new FluidStack(fluidState.getFluid(), 1000); + FluidStack stack = new FluidStack(fluidState.getType(), 1000); if (simulate) return stack; @@ -98,13 +100,13 @@ public class OpenEndedPipe extends FlowSource { AllTriggers.triggerForNearbyPlayers(AllTriggers.PIPE_SPILL, world, pos, 5); if (waterlog) { - world.setBlockState(outputPos, state.with(WATERLOGGED, false), 3); - world.getPendingFluidTicks() + world.setBlock(outputPos, state.setValue(WATERLOGGED, false), 3); + world.getLiquidTicks() .scheduleTick(outputPos, Fluids.WATER, 1); return stack; } - world.setBlockState(outputPos, fluidState.getBlockState() - .with(FlowingFluidBlock.LEVEL, 14), 3); + world.setBlock(outputPos, fluidState.createLegacyBlock() + .setValue(FlowingFluidBlock.LEVEL, 14), 3); return stack; } @@ -116,7 +118,7 @@ public class OpenEndedPipe extends FlowSource { BlockState state = world.getBlockState(outputPos); FluidState fluidState = state.getFluidState(); - boolean waterlog = state.contains(WATERLOGGED); + boolean waterlog = state.hasProperty(WATERLOGGED); if (!waterlog && !state.getMaterial() .isReplaceable()) @@ -129,7 +131,7 @@ public class OpenEndedPipe extends FlowSource { return true; } - if (!fluidState.isEmpty() && fluidState.getFluid() != fluid.getFluid()) { + if (!fluidState.isEmpty() && fluidState.getType() != fluid.getFluid()) { FluidReactions.handlePipeSpillCollision(world, outputPos, fluid.getFluid(), fluidState); return false; } @@ -141,35 +143,35 @@ public class OpenEndedPipe extends FlowSource { if (simulate) return true; - if (world.getDimension() - .isUltrawarm() + if (world.dimensionType() + .ultraWarm() && fluid.getFluid() - .isIn(FluidTags.WATER)) { + .is(FluidTags.WATER)) { int i = outputPos.getX(); int j = outputPos.getY(); int k = outputPos.getZ(); - world.playSound(null, i, j, k, SoundEvents.BLOCK_FIRE_EXTINGUISH, SoundCategory.BLOCKS, 0.5F, - 2.6F + (world.rand.nextFloat() - world.rand.nextFloat()) * 0.8F); + world.playSound(null, i, j, k, SoundEvents.FIRE_EXTINGUISH, SoundCategory.BLOCKS, 0.5F, + 2.6F + (world.random.nextFloat() - world.random.nextFloat()) * 0.8F); return true; } AllTriggers.triggerForNearbyPlayers(AllTriggers.PIPE_SPILL, world, pos, 5); if (waterlog) { - world.setBlockState(outputPos, state.with(WATERLOGGED, true), 3); - world.getPendingFluidTicks() + world.setBlock(outputPos, state.setValue(WATERLOGGED, true), 3); + world.getLiquidTicks() .scheduleTick(outputPos, Fluids.WATER, 1); return true; } - world.setBlockState(outputPos, fluid.getFluid() - .getDefaultState() - .getBlockState(), 3); + world.setBlock(outputPos, fluid.getFluid() + .defaultFluidState() + .createLegacyBlock(), 3); return true; } private boolean canApplyEffects(World world, FluidStack fluid) { Fluid fluidType = fluid.getFluid(); - if (fluidType.isEquivalentTo(AllFluids.POTION.get())) + if (fluidType.isSame(AllFluids.POTION.get())) return true; if (Tags.Fluids.MILK.contains(fluidType)) return true; @@ -179,14 +181,14 @@ public class OpenEndedPipe extends FlowSource { private void applyEffects(World world, FluidStack fluid) { Fluid fluidType = fluid.getFluid(); - if (fluidType.isEquivalentTo(AllFluids.POTION.get())) + if (fluidType.isSame(AllFluids.POTION.get())) applyPotionEffects(world, fluid); if (Tags.Fluids.MILK.contains(fluidType)) { if (world.getGameTime() % 5 != 0) return; List list = - world.getEntitiesWithinAABB(LivingEntity.class, aoe, LivingEntity::canBeHitWithPotion); + world.getEntitiesOfClass(LivingEntity.class, aoe, LivingEntity::isAffectedByPotions); ItemStack curativeItem = new ItemStack(Items.MILK_BUCKET); for (LivingEntity livingentity : list) livingentity.curePotionEffects(curativeItem); @@ -198,22 +200,22 @@ public class OpenEndedPipe extends FlowSource { FluidStack copy = fluid.copy(); copy.setAmount(250); ItemStack bottle = PotionFluidHandler.fillBottle(new ItemStack(Items.GLASS_BOTTLE), fluid); - cachedEffects = PotionUtils.getEffectsFromStack(bottle); + cachedEffects = PotionUtils.getMobEffects(bottle); } if (cachedEffects.isEmpty()) return; List list = - world.getEntitiesWithinAABB(LivingEntity.class, aoe, LivingEntity::canBeHitWithPotion); + world.getEntitiesOfClass(LivingEntity.class, aoe, LivingEntity::isAffectedByPotions); for (LivingEntity livingentity : list) { for (EffectInstance effectinstance : cachedEffects) { - Effect effect = effectinstance.getPotion(); - if (effect.isInstant()) { - effect.affectEntity(null, null, livingentity, effectinstance.getAmplifier(), 0.5D); + Effect effect = effectinstance.getEffect(); + if (effect.isInstantenous()) { + effect.applyInstantenousEffect(null, null, livingentity, effectinstance.getAmplifier(), 0.5D); continue; } - livingentity.addPotionEffect(new EffectInstance(effectinstance)); + livingentity.addEffect(new EffectInstance(effectinstance)); } } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/PipeAttachmentModel.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/PipeAttachmentModel.java index cda095609..686d00915 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/PipeAttachmentModel.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/PipeAttachmentModel.java @@ -90,8 +90,8 @@ public class PipeAttachmentModel extends BakedModelWrapperWithData { public void putBracket(BlockState state) { this.bracket = Minecraft.getInstance() - .getBlockRendererDispatcher() - .getModelForState(state); + .getBlockRenderer() + .getBlockModel(state); } public IBakedModel getBracket() { @@ -99,7 +99,7 @@ public class PipeAttachmentModel extends BakedModelWrapperWithData { } public void putRim(Direction face, AttachmentTypes rim) { - rims[face.getIndex()] = rim; + rims[face.get3DDataValue()] = rim; } public void setEncased(boolean encased) { @@ -107,11 +107,11 @@ public class PipeAttachmentModel extends BakedModelWrapperWithData { } public boolean hasRim(Direction face) { - return rims[face.getIndex()] != AttachmentTypes.NONE; + return rims[face.get3DDataValue()] != AttachmentTypes.NONE; } public AttachmentTypes getRim(Direction face) { - return rims[face.getIndex()]; + return rims[face.get3DDataValue()]; } public boolean isEncased() { diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/PipeConnection.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/PipeConnection.java index 072abea8c..f766f18f4 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/PipeConnection.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/PipeConnection.java @@ -178,7 +178,7 @@ public class PipeConnection { } FluidTransportBehaviour behaviour = - TileEntityBehaviour.get(world, pos.offset(side), FluidTransportBehaviour.TYPE); + TileEntityBehaviour.get(world, pos.relative(side), FluidTransportBehaviour.TYPE); source = Optional.of(behaviour == null ? new FlowSource.Blocked(location) : new FlowSource.OtherPipe(location)); return true; } @@ -190,7 +190,7 @@ public class PipeConnection { if (flow.fluid.isEmpty()) return; - if (world.isRemote) { + if (world.isClientSide) { if (!source.isPresent()) determineSource(world, pos); @@ -211,12 +211,12 @@ public class PipeConnection { public void serializeNBT(CompoundNBT tag, boolean clientPacket) { CompoundNBT connectionData = new CompoundNBT(); - tag.put(side.getName2(), connectionData); + tag.put(side.getName(), connectionData); if (hasPressure()) { ListNBT pressureData = new ListNBT(); - pressureData.add(FloatNBT.of(getInboundPressure())); - pressureData.add(FloatNBT.of(getOutwardPressure())); + pressureData.add(FloatNBT.valueOf(getInboundPressure())); + pressureData.add(FloatNBT.valueOf(getOutwardPressure())); connectionData.put("Pressure", pressureData); } @@ -240,7 +240,7 @@ public class PipeConnection { } public void deserializeNBT(CompoundNBT tag, BlockPos tilePos, boolean clientPacket) { - CompoundNBT connectionData = tag.getCompound(side.getName2()); + CompoundNBT connectionData = tag.getCompound(side.getName()); if (connectionData.contains("Pressure")) { ListNBT pressureData = connectionData.getList("Pressure", NBT.TAG_FLOAT); @@ -367,7 +367,7 @@ public class PipeConnection { @OnlyIn(Dist.CLIENT) private void spawnParticlesInner(World world, BlockPos pos, FluidStack fluid) { - if (world == Minecraft.getInstance().world) + if (world == Minecraft.getInstance().level) if (!isRenderEntityWithinDistance(pos)) return; if (hasOpenEnd()) @@ -378,7 +378,7 @@ public class PipeConnection { @OnlyIn(Dist.CLIENT) private void spawnSplashOnRimInner(World world, BlockPos pos, FluidStack fluid) { - if (world == Minecraft.getInstance().world) + if (world == Minecraft.getInstance().level) if (!isRenderEntityWithinDistance(pos)) return; spawnRimParticles(world, pos, fluid, SPLASH_PARTICLE_AMOUNT); @@ -398,7 +398,7 @@ public class PipeConnection { @OnlyIn(Dist.CLIENT) private void spawnPouringLiquid(World world, BlockPos pos, FluidStack fluid, int amount) { IParticleData particle = FluidFX.getFluidParticle(fluid); - Vector3d directionVec = Vector3d.of(side.getDirectionVec()); + Vector3d directionVec = Vector3d.atLowerCornerOf(side.getNormal()); if (!hasFlow()) return; Flow flow = this.flow.get(); @@ -408,11 +408,11 @@ public class PipeConnection { @OnlyIn(Dist.CLIENT) public static boolean isRenderEntityWithinDistance(BlockPos pos) { Entity renderViewEntity = Minecraft.getInstance() - .getRenderViewEntity(); + .getCameraEntity(); if (renderViewEntity == null) return false; Vector3d center = VecHelper.getCenterOf(pos); - if (renderViewEntity.getPositionVec() + if (renderViewEntity.position() .distanceTo(center) > MAX_PARTICLE_RENDER_DISTANCE) return false; return true; diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/PumpBlock.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/PumpBlock.java index 6dd88516a..9c40cd741 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/PumpBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/PumpBlock.java @@ -32,11 +32,13 @@ import net.minecraft.world.TickPriority; import net.minecraft.world.World; import net.minecraft.world.server.ServerWorld; +import net.minecraft.block.AbstractBlock.Properties; + public class PumpBlock extends DirectionalKineticBlock implements IWaterLoggable, ICogWheel { public PumpBlock(Properties p_i48415_1_) { super(p_i48415_1_); - setDefaultState(super.getDefaultState().with(BlockStateProperties.WATERLOGGED, false)); + registerDefaultState(super.defaultBlockState().setValue(BlockStateProperties.WATERLOGGED, false)); } @Override @@ -51,18 +53,18 @@ public class PumpBlock extends DirectionalKineticBlock implements IWaterLoggable @Override public BlockState getRotatedBlockState(BlockState originalState, Direction targetedFace) { - return originalState.with(FACING, originalState.get(FACING) + return originalState.setValue(FACING, originalState.getValue(FACING) .getOpposite()); } @Override public BlockState updateAfterWrenched(BlockState newState, ItemUseContext context) { BlockState state = super.updateAfterWrenched(newState, context); - World world = context.getWorld(); - BlockPos pos = context.getPos(); - if (world.isRemote) + World world = context.getLevel(); + BlockPos pos = context.getClickedPos(); + if (world.isClientSide) return state; - TileEntity tileEntity = world.getTileEntity(pos); + TileEntity tileEntity = world.getBlockEntity(pos); if (!(tileEntity instanceof PumpTileEntity)) return state; PumpTileEntity pump = (PumpTileEntity) tileEntity; @@ -73,26 +75,26 @@ public class PumpBlock extends DirectionalKineticBlock implements IWaterLoggable @Override public Axis getRotationAxis(BlockState state) { - return state.get(FACING) + return state.getValue(FACING) .getAxis(); } @Override public VoxelShape getShape(BlockState state, IBlockReader p_220053_2_, BlockPos p_220053_3_, ISelectionContext p_220053_4_) { - return AllShapes.PUMP.get(state.get(FACING)); + return AllShapes.PUMP.get(state.getValue(FACING)); } @Override public void neighborChanged(BlockState state, World world, BlockPos pos, Block otherBlock, BlockPos neighborPos, boolean isMoving) { - DebugPacketSender.func_218806_a(world, pos); + DebugPacketSender.sendNeighborsUpdatePacket(world, pos); Direction d = FluidPropagator.validateNeighbourChange(state, world, pos, otherBlock, neighborPos, isMoving); if (d == null) return; if (!isOpenAt(state, d)) return; - world.getPendingBlockTicks() + world.getBlockTicks() .scheduleTick(pos, this, 1, TickPriority.HIGH); // if (world.isRemote) // return; @@ -114,32 +116,32 @@ public class PumpBlock extends DirectionalKineticBlock implements IWaterLoggable @Override public FluidState getFluidState(BlockState state) { - return state.get(BlockStateProperties.WATERLOGGED) ? Fluids.WATER.getStillFluidState(false) - : Fluids.EMPTY.getDefaultState(); + return state.getValue(BlockStateProperties.WATERLOGGED) ? Fluids.WATER.getSource(false) + : Fluids.EMPTY.defaultFluidState(); } @Override - protected void fillStateContainer(Builder builder) { + protected void createBlockStateDefinition(Builder builder) { builder.add(BlockStateProperties.WATERLOGGED); - super.fillStateContainer(builder); + super.createBlockStateDefinition(builder); } @Override - public BlockState updatePostPlacement(BlockState state, Direction direction, BlockState neighbourState, + public BlockState updateShape(BlockState state, Direction direction, BlockState neighbourState, IWorld world, BlockPos pos, BlockPos neighbourPos) { - if (state.get(BlockStateProperties.WATERLOGGED)) { - world.getPendingFluidTicks() - .scheduleTick(pos, Fluids.WATER, Fluids.WATER.getTickRate(world)); + if (state.getValue(BlockStateProperties.WATERLOGGED)) { + world.getLiquidTicks() + .scheduleTick(pos, Fluids.WATER, Fluids.WATER.getTickDelay(world)); } return state; } @Override public BlockState getStateForPlacement(BlockItemUseContext context) { - FluidState FluidState = context.getWorld() - .getFluidState(context.getPos()); - return super.getStateForPlacement(context).with(BlockStateProperties.WATERLOGGED, - Boolean.valueOf(FluidState.getFluid() == Fluids.WATER)); + FluidState FluidState = context.getLevel() + .getFluidState(context.getClickedPos()); + return super.getStateForPlacement(context).setValue(BlockStateProperties.WATERLOGGED, + Boolean.valueOf(FluidState.getType() == Fluids.WATER)); } public static boolean isPump(BlockState state) { @@ -147,35 +149,35 @@ public class PumpBlock extends DirectionalKineticBlock implements IWaterLoggable } @Override - public void onBlockAdded(BlockState state, World world, BlockPos pos, BlockState oldState, boolean isMoving) { - if (world.isRemote) + public void onPlace(BlockState state, World world, BlockPos pos, BlockState oldState, boolean isMoving) { + if (world.isClientSide) return; if (state != oldState) - world.getPendingBlockTicks() + world.getBlockTicks() .scheduleTick(pos, this, 1, TickPriority.HIGH); } public static boolean isOpenAt(BlockState state, Direction d) { - return d.getAxis() == state.get(FACING) + return d.getAxis() == state.getValue(FACING) .getAxis(); } @Override - public void scheduledTick(BlockState state, ServerWorld world, BlockPos pos, Random r) { + public void tick(BlockState state, ServerWorld world, BlockPos pos, Random r) { FluidPropagator.propagateChangedPipe(world, pos, state); } @Override - public void onReplaced(BlockState state, World world, BlockPos pos, BlockState newState, boolean isMoving) { + public void onRemove(BlockState state, World world, BlockPos pos, BlockState newState, boolean isMoving) { boolean blockTypeChanged = state.getBlock() != newState.getBlock(); - if (blockTypeChanged && !world.isRemote) + if (blockTypeChanged && !world.isClientSide) FluidPropagator.propagateChangedPipe(world, pos, state); if (state.hasTileEntity() && (blockTypeChanged || !newState.hasTileEntity())) - world.removeTileEntity(pos); + world.removeBlockEntity(pos); } @Override - public boolean allowsMovement(BlockState state, IBlockReader reader, BlockPos pos, PathType type) { + public boolean isPathfindable(BlockState state, IBlockReader reader, BlockPos pos, PathType type) { return false; } diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/PumpCogInstance.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/PumpCogInstance.java index 119c8b141..2cb223bb9 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/PumpCogInstance.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/PumpCogInstance.java @@ -21,7 +21,7 @@ public class PumpCogInstance extends SingleRotatingInstance { @Override protected Instancer getModel() { BlockState referenceState = tile.getBlockState(); - Direction facing = referenceState.get(FACING); + Direction facing = referenceState.getValue(FACING); return getRotatingMaterial().getModel(AllBlockPartials.MECHANICAL_PUMP_COG, referenceState, facing); } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/PumpRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/PumpRenderer.java index 8ecc077a4..8d9726dba 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/PumpRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/PumpRenderer.java @@ -34,9 +34,9 @@ public class PumpRenderer extends KineticTileEntityRenderer { BlockState blockState = te.getBlockState(); float angle = MathHelper.lerp(pump.arrowDirection.getValue(partialTicks), 0, 90) - 90; for (float yRot : new float[] { 0, 90 }) { - ms.push(); + ms.pushPose(); SuperByteBuffer arrow = PartialBufferer.get(AllBlockPartials.MECHANICAL_PUMP_ARROW, blockState); - Direction direction = blockState.get(PumpBlock.FACING); + Direction direction = blockState.getValue(PumpBlock.FACING); MatrixStacker.of(ms) .centre() .rotateY(AngleHelper.horizontalAngle(direction) + 180) @@ -46,8 +46,8 @@ public class PumpRenderer extends KineticTileEntityRenderer { .rotateY(yRot) .rotateZ(angle) .translateBack(rotationOffset); - arrow.light(light).renderInto(ms, buffer.getBuffer(RenderType.getSolid())); - ms.pop(); + arrow.light(light).renderInto(ms, buffer.getBuffer(RenderType.solid())); + ms.popPose(); } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/PumpTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/PumpTileEntity.java index 3c05b3abf..a1143ffc5 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/PumpTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/PumpTileEntity.java @@ -35,6 +35,8 @@ import net.minecraftforge.common.util.LazyOptional; import net.minecraftforge.fluids.capability.CapabilityFluidHandler; import net.minecraftforge.fluids.capability.IFluidHandler; +import com.simibubi.create.content.contraptions.fluids.FluidTransportBehaviour.AttachmentTypes; + public class PumpTileEntity extends KineticTileEntity { LerpedFloat arrowDirection; @@ -65,7 +67,7 @@ public class PumpTileEntity extends KineticTileEntity { super.tick(); float speed = getSpeed(); - if (world.isRemote) { + if (level.isClientSide) { if (speed == 0) return; arrowDirection.chase(speed >= 0 ? 1 : -1, .5f, Chaser.EXP); @@ -97,13 +99,13 @@ public class PumpTileEntity extends KineticTileEntity { return; if (speed != 0) reversed = speed < 0; - if (world.isRemote && !isVirtual()) + if (level.isClientSide && !isVirtual()) return; - BlockPos frontPos = pos.offset(getFront()); - BlockPos backPos = pos.offset(getFront().getOpposite()); - FluidPropagator.propagateChangedPipe(world, frontPos, world.getBlockState(frontPos)); - FluidPropagator.propagateChangedPipe(world, backPos, world.getBlockState(backPos)); + BlockPos frontPos = worldPosition.relative(getFront()); + BlockPos backPos = worldPosition.relative(getFront().getOpposite()); + FluidPropagator.propagateChangedPipe(level, frontPos, level.getBlockState(frontPos)); + FluidPropagator.propagateChangedPipe(level, backPos, level.getBlockState(backPos)); FluidTransportBehaviour behaviour = getBehaviour(FluidTransportBehaviour.TYPE); if (behaviour != null) @@ -115,17 +117,17 @@ public class PumpTileEntity extends KineticTileEntity { if (getSpeed() == 0) return; - BlockFace start = new BlockFace(pos, side); + BlockFace start = new BlockFace(worldPosition, side); boolean pull = isPullingOnSide(isFront(side)); Set targets = new HashSet<>(); Map>> pipeGraph = new HashMap<>(); if (!pull) - FluidPropagator.resetAffectedFluidNetworks(world, pos, side.getOpposite()); + FluidPropagator.resetAffectedFluidNetworks(level, worldPosition, side.getOpposite()); - if (!hasReachedValidEndpoint(world, start, pull)) { + if (!hasReachedValidEndpoint(level, start, pull)) { - pipeGraph.computeIfAbsent(pos, $ -> Pair.of(0, new IdentityHashMap<>())) + pipeGraph.computeIfAbsent(worldPosition, $ -> Pair.of(0, new IdentityHashMap<>())) .getSecond() .put(side, pull); pipeGraph.computeIfAbsent(start.getConnectedPos(), $ -> Pair.of(1, new IdentityHashMap<>())) @@ -142,13 +144,13 @@ public class PumpTileEntity extends KineticTileEntity { int distance = entry.getFirst(); BlockPos currentPos = entry.getSecond(); - if (!world.isAreaLoaded(currentPos, 0)) + if (!level.isAreaLoaded(currentPos, 0)) continue; if (visited.contains(currentPos)) continue; visited.add(currentPos); - BlockState currentState = world.getBlockState(currentPos); - FluidTransportBehaviour pipe = FluidPropagator.getPipe(world, currentPos); + BlockState currentState = level.getBlockState(currentPos); + FluidTransportBehaviour pipe = FluidPropagator.getPipe(level, currentPos); if (pipe == null) continue; @@ -156,11 +158,11 @@ public class PumpTileEntity extends KineticTileEntity { BlockFace blockFace = new BlockFace(currentPos, face); BlockPos connectedPos = blockFace.getConnectedPos(); - if (!world.isAreaLoaded(connectedPos, 0)) + if (!level.isAreaLoaded(connectedPos, 0)) continue; if (blockFace.isEquivalent(start)) continue; - if (hasReachedValidEndpoint(world, blockFace, pull)) { + if (hasReachedValidEndpoint(level, blockFace, pull)) { pipeGraph.computeIfAbsent(currentPos, $ -> Pair.of(distance, new IdentityHashMap<>())) .getSecond() .put(face, pull); @@ -168,7 +170,7 @@ public class PumpTileEntity extends KineticTileEntity { continue; } - FluidTransportBehaviour pipeBehaviour = FluidPropagator.getPipe(world, connectedPos); + FluidTransportBehaviour pipeBehaviour = FluidPropagator.getPipe(level, connectedPos); if (pipeBehaviour == null) continue; if (pipeBehaviour instanceof PumpFluidTransferBehaviour) @@ -206,13 +208,13 @@ public class PumpTileEntity extends KineticTileEntity { BlockPos pipePos = face.getPos(); Direction pipeSide = face.getFace(); - if (pipePos.equals(pos)) + if (pipePos.equals(worldPosition)) continue; boolean inbound = pipeGraph.get(pipePos) .getSecond() .get(pipeSide); - FluidTransportBehaviour pipeBehaviour = FluidPropagator.getPipe(world, pipePos); + FluidTransportBehaviour pipeBehaviour = FluidPropagator.getPipe(level, pipePos); if (pipeBehaviour == null) continue; @@ -249,7 +251,7 @@ public class PumpTileEntity extends KineticTileEntity { if (map.get(nextFacing) != pull) continue; if (!searchForEndpointRecursively(pipeGraph, targets, validFaces, - new BlockFace(currentPos.offset(nextFacing), nextFacing.getOpposite()), pull)) + new BlockFace(currentPos.relative(nextFacing), nextFacing.getOpposite()), pull)) continue; validFaces.computeIfAbsent(distance, $ -> new HashSet<>()) @@ -267,11 +269,11 @@ public class PumpTileEntity extends KineticTileEntity { private boolean hasReachedValidEndpoint(IWorld world, BlockFace blockFace, boolean pull) { BlockPos connectedPos = blockFace.getConnectedPos(); BlockState connectedState = world.getBlockState(connectedPos); - TileEntity tileEntity = world.getTileEntity(connectedPos); + TileEntity tileEntity = world.getBlockEntity(connectedPos); Direction face = blockFace.getFace(); // facing a pump - if (PumpBlock.isPump(connectedState) && connectedState.get(PumpBlock.FACING) + if (PumpBlock.isPump(connectedState) && connectedState.getValue(PumpBlock.FACING) .getAxis() == face.getAxis() && tileEntity instanceof PumpTileEntity) { PumpTileEntity pumpTE = (PumpTileEntity) tileEntity; return pumpTE.isPullingOnSide(pumpTE.isFront(blockFace.getOppositeFace())) != pull; @@ -317,7 +319,7 @@ public class PumpTileEntity extends KineticTileEntity { BlockState blockState = getBlockState(); if (!(blockState.getBlock() instanceof PumpBlock)) return false; - Direction front = blockState.get(PumpBlock.FACING); + Direction front = blockState.getValue(PumpBlock.FACING); boolean isFront = side == front; return isFront; } @@ -327,7 +329,7 @@ public class PumpTileEntity extends KineticTileEntity { BlockState blockState = getBlockState(); if (!(blockState.getBlock() instanceof PumpBlock)) return null; - return blockState.get(PumpBlock.FACING); + return blockState.getValue(PumpBlock.FACING); } protected void updatePipeNetwork(boolean front) { @@ -339,7 +341,7 @@ public class PumpTileEntity extends KineticTileEntity { BlockState blockState = getBlockState(); if (!(blockState.getBlock() instanceof PumpBlock)) return false; - return blockState.get(PumpBlock.FACING) + return blockState.getValue(PumpBlock.FACING) .getAxis() == side.getAxis(); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/VirtualFluid.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/VirtualFluid.java index 9ab196582..6affc6d7b 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/VirtualFluid.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/VirtualFluid.java @@ -8,6 +8,8 @@ import net.minecraft.item.Item; import net.minecraft.item.Items; import net.minecraftforge.fluids.ForgeFlowingFluid; +import net.minecraftforge.fluids.ForgeFlowingFluid.Properties; + public class VirtualFluid extends ForgeFlowingFluid { public VirtualFluid(Properties properties) { @@ -15,23 +17,23 @@ public class VirtualFluid extends ForgeFlowingFluid { } @Override - public Fluid getStillFluid() { - return super.getStillFluid(); + public Fluid getSource() { + return super.getSource(); } @Override - public Fluid getFlowingFluid() { + public Fluid getFlowing() { return this; } @Override - public Item getFilledBucket() { + public Item getBucket() { return Items.AIR; } @Override - protected BlockState getBlockState(FluidState state) { - return Blocks.AIR.getDefaultState(); + protected BlockState createLegacyBlock(FluidState state) { + return Blocks.AIR.defaultBlockState(); } @Override @@ -40,7 +42,7 @@ public class VirtualFluid extends ForgeFlowingFluid { } @Override - public int getLevel(FluidState p_207192_1_) { + public int getAmount(FluidState p_207192_1_) { return 0; } diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/FillingBySpout.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/FillingBySpout.java index a3036d007..314a02e88 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/FillingBySpout.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/FillingBySpout.java @@ -19,7 +19,7 @@ public class FillingBySpout { static RecipeWrapper wrapper = new RecipeWrapper(new ItemStackHandler(1)); public static boolean canItemBeFilled(World world, ItemStack stack) { - wrapper.setInventorySlotContents(0, stack); + wrapper.setItem(0, stack); Optional assemblyRecipe = SequencedAssemblyRecipe.getRecipe(world, wrapper, AllRecipeTypes.FILLING.getType(), FillingRecipe.class); @@ -33,7 +33,7 @@ public class FillingBySpout { } public static int getRequiredAmountForItem(World world, ItemStack stack, FluidStack availableFluid) { - wrapper.setInventorySlotContents(0, stack); + wrapper.setItem(0, stack); Optional assemblyRecipe = SequencedAssemblyRecipe.getRecipe(world, wrapper, AllRecipeTypes.FILLING.getType(), FillingRecipe.class); @@ -45,7 +45,7 @@ public class FillingBySpout { } for (IRecipe recipe : world.getRecipeManager() - .getRecipes(AllRecipeTypes.FILLING.getType(), wrapper, world)) { + .getRecipesFor(AllRecipeTypes.FILLING.getType(), wrapper, world)) { FillingRecipe fillingRecipe = (FillingRecipe) recipe; FluidIngredient requiredFluid = fillingRecipe.getRequiredFluid(); if (requiredFluid.test(availableFluid)) @@ -58,7 +58,7 @@ public class FillingBySpout { FluidStack toFill = availableFluid.copy(); toFill.setAmount(requiredAmount); - wrapper.setInventorySlotContents(0, stack); + wrapper.setItem(0, stack); FillingRecipe fillingRecipe = SequencedAssemblyRecipe.getRecipe(world, wrapper, AllRecipeTypes.FILLING.getType(), FillingRecipe.class) @@ -66,7 +66,7 @@ public class FillingBySpout { .test(toFill)) .orElseGet(() -> { for (IRecipe recipe : world.getRecipeManager() - .getRecipes(AllRecipeTypes.FILLING.getType(), wrapper, world)) { + .getRecipesFor(AllRecipeTypes.FILLING.getType(), wrapper, world)) { FillingRecipe fr = (FillingRecipe) recipe; FluidIngredient requiredFluid = fr.getRequiredFluid(); if (requiredFluid.test(toFill)) diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/FillingRecipe.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/FillingRecipe.java index 56dd45e26..21e3d3499 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/FillingRecipe.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/FillingRecipe.java @@ -33,7 +33,7 @@ public class FillingRecipe extends ProcessingRecipe implements IA @Override public boolean matches(RecipeWrapper inv, World p_77569_2_) { return ingredients.get(0) - .test(inv.getStackInSlot(0)); + .test(inv.getItem(0)); } @Override 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 b1bbcb128..3ebbd9e83 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 @@ -28,6 +28,8 @@ import net.minecraft.util.math.shapes.ISelectionContext; import net.minecraft.world.World; import net.minecraftforge.fluids.FluidStack; +import com.simibubi.create.content.contraptions.fluids.actors.FluidManipulationBehaviour.BlockPosEntry; + public class FluidDrainingBehaviour extends FluidManipulationBehaviour { Fluid fluid; @@ -86,18 +88,18 @@ public class FluidDrainingBehaviour extends FluidManipulationBehaviour { BlockState emptied = blockState; Fluid fluid = Fluids.EMPTY; - if (blockState.contains(BlockStateProperties.WATERLOGGED) && blockState.get(BlockStateProperties.WATERLOGGED)) { - emptied = blockState.with(BlockStateProperties.WATERLOGGED, Boolean.valueOf(false)); + if (blockState.hasProperty(BlockStateProperties.WATERLOGGED) && blockState.getValue(BlockStateProperties.WATERLOGGED)) { + emptied = blockState.setValue(BlockStateProperties.WATERLOGGED, Boolean.valueOf(false)); fluid = Fluids.WATER; } else if (blockState.getBlock() instanceof FlowingFluidBlock) { FlowingFluidBlock flowingFluid = (FlowingFluidBlock) blockState.getBlock(); - emptied = Blocks.AIR.getDefaultState(); - if (blockState.get(FlowingFluidBlock.LEVEL) == 0) + emptied = Blocks.AIR.defaultBlockState(); + if (blockState.getValue(FlowingFluidBlock.LEVEL) == 0) fluid = flowingFluid.getFluid(); else { - affectedArea.expandTo(new MutableBoundingBox(currentPos, currentPos)); + affectedArea.expand(new MutableBoundingBox(currentPos, currentPos)); if (!tileEntity.isVirtual()) - world.setBlockState(currentPos, emptied, 2 | 16); + world.setBlock(currentPos, emptied, 2 | 16); queue.dequeue(); if (queue.isEmpty()) { isValid = checkValid(world, rootPos); @@ -106,18 +108,18 @@ public class FluidDrainingBehaviour extends FluidManipulationBehaviour { continue; } } else if (blockState.getFluidState() - .getFluid() != Fluids.EMPTY - && blockState.getCollisionShape(world, currentPos, ISelectionContext.dummy()) + .getType() != Fluids.EMPTY + && blockState.getCollisionShape(world, currentPos, ISelectionContext.empty()) .isEmpty()) { fluid = blockState.getFluidState() - .getFluid(); - emptied = Blocks.AIR.getDefaultState(); + .getType(); + emptied = Blocks.AIR.defaultBlockState(); } if (this.fluid == null) this.fluid = fluid; - if (!this.fluid.isEquivalentTo(fluid)) { + if (!this.fluid.isSame(fluid)) { queue.dequeue(); if (queue.isEmpty()) { isValid = checkValid(world, rootPos); @@ -130,16 +132,16 @@ public class FluidDrainingBehaviour extends FluidManipulationBehaviour { return true; playEffect(world, currentPos, fluid, true); - AllTriggers.triggerForNearbyPlayers(AllTriggers.HOSE_PULLEY, world, tileEntity.getPos(), 8); + AllTriggers.triggerForNearbyPlayers(AllTriggers.HOSE_PULLEY, world, tileEntity.getBlockPos(), 8); if (infinite) { - AllTriggers.triggerForNearbyPlayers(AllTriggers.INFINITE_FLUID.constructTriggerFor(FluidHelper.convertToStill(fluid)), world, tileEntity.getPos(), 8); + AllTriggers.triggerForNearbyPlayers(AllTriggers.INFINITE_FLUID.constructTriggerFor(FluidHelper.convertToStill(fluid)), world, tileEntity.getBlockPos(), 8); return true; } if (!tileEntity.isVirtual()) - world.setBlockState(currentPos, emptied, 2 | 16); - affectedArea.expandTo(new MutableBoundingBox(currentPos, currentPos)); + world.setBlock(currentPos, emptied, 2 | 16); + affectedArea.expand(new MutableBoundingBox(currentPos, currentPos)); queue.dequeue(); if (queue.isEmpty()) { @@ -175,10 +177,10 @@ public class FluidDrainingBehaviour extends FluidManipulationBehaviour { protected boolean checkValid(World world, BlockPos root) { BlockPos currentPos = root; - for (int timeout = 1000; timeout > 0 && !root.equals(tileEntity.getPos()); timeout--) { + for (int timeout = 1000; timeout > 0 && !root.equals(tileEntity.getBlockPos()); timeout--) { FluidBlockType canPullFluidsFrom = canPullFluidsFrom(world.getBlockState(currentPos), currentPos); if (canPullFluidsFrom == FluidBlockType.FLOWING) { - currentPos = currentPos.up(); + currentPos = currentPos.above(); continue; } if (canPullFluidsFrom == FluidBlockType.SOURCE) @@ -200,12 +202,12 @@ public class FluidDrainingBehaviour extends FluidManipulationBehaviour { } protected FluidBlockType canPullFluidsFrom(BlockState blockState, BlockPos pos) { - if (blockState.contains(BlockStateProperties.WATERLOGGED) && blockState.get(BlockStateProperties.WATERLOGGED)) + if (blockState.hasProperty(BlockStateProperties.WATERLOGGED) && blockState.getValue(BlockStateProperties.WATERLOGGED)) return FluidBlockType.SOURCE; if (blockState.getBlock() instanceof FlowingFluidBlock) - return blockState.get(FlowingFluidBlock.LEVEL) == 0 ? FluidBlockType.SOURCE : FluidBlockType.FLOWING; + return blockState.getValue(FlowingFluidBlock.LEVEL) == 0 ? FluidBlockType.SOURCE : FluidBlockType.FLOWING; if (blockState.getFluidState() - .getFluid() != Fluids.EMPTY && blockState.getCollisionShape(getWorld(), pos, ISelectionContext.dummy()) + .getType() != Fluids.EMPTY && blockState.getCollisionShape(getWorld(), pos, ISelectionContext.empty()) .isEmpty()) return FluidBlockType.SOURCE; return FluidBlockType.NONE; 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 0fbd08807..0ad365d4c 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 @@ -39,6 +39,8 @@ import net.minecraft.world.NextTickListEntry; import net.minecraft.world.World; import net.minecraft.world.server.ServerTickList; +import com.simibubi.create.content.contraptions.fluids.actors.FluidManipulationBehaviour.BlockPosEntry; + public class FluidFillingBehaviour extends FluidManipulationBehaviour { PriorityQueue queue; @@ -59,7 +61,7 @@ public class FluidFillingBehaviour extends FluidManipulationBehaviour { super.tick(); if (!infinityCheckFrontier.isEmpty() && rootPos != null) { Fluid fluid = getWorld().getFluidState(rootPos) - .getFluid(); + .getType(); if (fluid != Fluids.EMPTY) continueValidation(fluid); } @@ -124,13 +126,13 @@ public class FluidFillingBehaviour extends FluidManipulationBehaviour { int maxRange = maxRange(); int maxRangeSq = maxRange * maxRange; int maxBlocks = maxBlocks(); - boolean evaporate = world.getDimension() - .isUltrawarm() && fluid.isIn(FluidTags.WATER); + boolean evaporate = world.dimensionType() + .ultraWarm() && fluid.is(FluidTags.WATER); if (infinite || evaporate) { FluidState fluidState = world.getFluidState(rootPos); - boolean equivalentTo = fluidState.getFluid() - .isEquivalentTo(fluid); + boolean equivalentTo = fluidState.getType() + .isSame(fluid); if (!equivalentTo && !evaporate) return false; if (simulate) @@ -140,8 +142,8 @@ public class FluidFillingBehaviour extends FluidManipulationBehaviour { int i = root.getX(); int j = root.getY(); int k = root.getZ(); - world.playSound(null, i, j, k, SoundEvents.BLOCK_FIRE_EXTINGUISH, SoundCategory.BLOCKS, 0.5F, - 2.6F + (world.rand.nextFloat() - world.rand.nextFloat()) * 0.8F); + world.playSound(null, i, j, k, SoundEvents.FIRE_EXTINGUISH, SoundCategory.BLOCKS, 0.5F, + 2.6F + (world.random.nextFloat() - world.random.nextFloat()) * 0.8F); } return true; } @@ -175,36 +177,36 @@ public class FluidFillingBehaviour extends FluidManipulationBehaviour { playEffect(world, currentPos, fluid, false); BlockState blockState = world.getBlockState(currentPos); - if (blockState.contains(BlockStateProperties.WATERLOGGED) && fluid.isEquivalentTo(Fluids.WATER)) { + if (blockState.hasProperty(BlockStateProperties.WATERLOGGED) && fluid.isSame(Fluids.WATER)) { if (!tileEntity.isVirtual()) - world.setBlockState(currentPos, - updatePostWaterlogging(blockState.with(BlockStateProperties.WATERLOGGED, true)), + world.setBlock(currentPos, + updatePostWaterlogging(blockState.setValue(BlockStateProperties.WATERLOGGED, true)), 2 | 16); } else { replaceBlock(world, currentPos, blockState); if (!tileEntity.isVirtual()) - world.setBlockState(currentPos, FluidHelper.convertToStill(fluid) - .getDefaultState() - .getBlockState(), 2 | 16); + world.setBlock(currentPos, FluidHelper.convertToStill(fluid) + .defaultFluidState() + .createLegacyBlock(), 2 | 16); } - ITickList pendingFluidTicks = world.getPendingFluidTicks(); + ITickList pendingFluidTicks = world.getLiquidTicks(); if (pendingFluidTicks instanceof ServerTickList) { ServerTickList serverTickList = (ServerTickList) pendingFluidTicks; NextTickListEntry removedEntry = null; - for (NextTickListEntry nextTickListEntry : serverTickList.pendingTickListEntriesHashSet) { - if (nextTickListEntry.position.equals(currentPos)) { + for (NextTickListEntry nextTickListEntry : serverTickList.tickNextTickSet) { + if (nextTickListEntry.pos.equals(currentPos)) { removedEntry = nextTickListEntry; break; } } if (removedEntry != null) { - serverTickList.pendingTickListEntriesHashSet.remove(removedEntry); - serverTickList.pendingTickListEntriesTreeSet.remove(removedEntry); + serverTickList.tickNextTickSet.remove(removedEntry); + serverTickList.tickNextTickList.remove(removedEntry); } } - affectedArea.expandTo(new MutableBoundingBox(currentPos, currentPos)); + affectedArea.expand(new MutableBoundingBox(currentPos, currentPos)); } } @@ -218,10 +220,10 @@ public class FluidFillingBehaviour extends FluidManipulationBehaviour { if (side == Direction.UP) continue; - BlockPos offsetPos = currentPos.offset(side); + BlockPos offsetPos = currentPos.relative(side); if (visited.contains(offsetPos)) continue; - if (offsetPos.distanceSq(rootPos) > maxRangeSq) + if (offsetPos.distSqr(rootPos) > maxRangeSq) continue; SpaceType nextSpaceType = getAtPos(world, offsetPos, fluid); @@ -231,7 +233,7 @@ public class FluidFillingBehaviour extends FluidManipulationBehaviour { } if (!simulate && success) - AllTriggers.triggerForNearbyPlayers(AllTriggers.HOSE_PULLEY, world, tileEntity.getPos(), 8); + AllTriggers.triggerForNearbyPlayers(AllTriggers.HOSE_PULLEY, world, tileEntity.getBlockPos(), 8); return success; } @@ -252,39 +254,39 @@ public class FluidFillingBehaviour extends FluidManipulationBehaviour { BlockState blockState = world.getBlockState(pos); FluidState fluidState = blockState.getFluidState(); - if (blockState.contains(BlockStateProperties.WATERLOGGED)) - return toFill.isEquivalentTo(Fluids.WATER) - ? blockState.get(BlockStateProperties.WATERLOGGED) ? SpaceType.FILLED : SpaceType.FILLABLE + if (blockState.hasProperty(BlockStateProperties.WATERLOGGED)) + return toFill.isSame(Fluids.WATER) + ? blockState.getValue(BlockStateProperties.WATERLOGGED) ? SpaceType.FILLED : SpaceType.FILLABLE : SpaceType.BLOCKING; if (blockState.getBlock() instanceof FlowingFluidBlock) - return blockState.get(FlowingFluidBlock.LEVEL) == 0 - ? toFill.isEquivalentTo(fluidState.getFluid()) ? SpaceType.FILLED : SpaceType.BLOCKING + return blockState.getValue(FlowingFluidBlock.LEVEL) == 0 + ? toFill.isSame(fluidState.getType()) ? SpaceType.FILLED : SpaceType.BLOCKING : SpaceType.FILLABLE; - if (fluidState.getFluid() != Fluids.EMPTY - && blockState.getCollisionShape(getWorld(), pos, ISelectionContext.dummy()) + if (fluidState.getType() != Fluids.EMPTY + && blockState.getCollisionShape(getWorld(), pos, ISelectionContext.empty()) .isEmpty()) - return toFill.isEquivalentTo(fluidState.getFluid()) ? SpaceType.FILLED : SpaceType.BLOCKING; + return toFill.isSame(fluidState.getType()) ? SpaceType.FILLED : SpaceType.BLOCKING; return canBeReplacedByFluid(world, pos, blockState) ? SpaceType.FILLABLE : SpaceType.BLOCKING; } protected void replaceBlock(World world, BlockPos pos, BlockState state) { TileEntity tileentity = state.getBlock() - .hasTileEntity(state) ? world.getTileEntity(pos) : null; - Block.spawnDrops(state, world, pos, tileentity); + .hasTileEntity(state) ? world.getBlockEntity(pos) : null; + Block.dropResources(state, world, pos, tileentity); } // From FlowingFluidBlock#isBlocked protected boolean canBeReplacedByFluid(IBlockReader world, BlockPos pos, BlockState state) { Block block = state.getBlock(); - if (!(block instanceof DoorBlock) && !block.isIn(BlockTags.SIGNS) && block != Blocks.LADDER + if (!(block instanceof DoorBlock) && !block.is(BlockTags.SIGNS) && block != Blocks.LADDER && block != Blocks.SUGAR_CANE && block != Blocks.BUBBLE_COLUMN) { Material material = state.getMaterial(); - if (material != Material.PORTAL && material != Material.STRUCTURE_VOID && material != Material.OCEAN_PLANT - && material != Material.SEA_GRASS) { - return !material.blocksMovement(); + if (material != Material.PORTAL && material != Material.STRUCTURAL_AIR && material != Material.WATER_PLANT + && material != Material.REPLACEABLE_WATER_PLANT) { + return !material.blocksMotion(); } else { return false; } @@ -294,8 +296,8 @@ public class FluidFillingBehaviour extends FluidManipulationBehaviour { } protected BlockState updatePostWaterlogging(BlockState state) { - if (state.contains(BlockStateProperties.LIT)) - state = state.with(BlockStateProperties.LIT, false); + if (state.hasProperty(BlockStateProperties.LIT)) + state = state.setValue(BlockStateProperties.LIT, false); return state; } diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/FluidManipulationBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/FluidManipulationBehaviour.java index a3c70ed09..d3ecf1394 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/FluidManipulationBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/FluidManipulationBehaviour.java @@ -108,13 +108,13 @@ public abstract class FluidManipulationBehaviour extends TileEntityBehaviour { protected void scheduleUpdatesInAffectedArea() { World world = getWorld(); - BlockPos.getAllInBox(new BlockPos(affectedArea.minX - 1, affectedArea.minY - 1, affectedArea.minZ - 1), new BlockPos(affectedArea.maxX + 1, affectedArea.maxY + 1, affectedArea.maxZ + 1)) + BlockPos.betweenClosedStream(new BlockPos(affectedArea.x0 - 1, affectedArea.y0 - 1, affectedArea.z0 - 1), new BlockPos(affectedArea.x1 + 1, affectedArea.y1 + 1, affectedArea.z1 + 1)) .forEach(pos -> { FluidState nextFluidState = world.getFluidState(pos); if (nextFluidState.isEmpty()) return; - world.getPendingFluidTicks() - .scheduleTick(pos, nextFluidState.getFluid(), world.getRandom() + world.getLiquidTicks() + .scheduleTick(pos, nextFluidState.getType(), world.getRandom() .nextInt(5)); }); } @@ -129,9 +129,9 @@ public abstract class FluidManipulationBehaviour extends TileEntityBehaviour { if (compareDistance != 0) return compareDistance; return Double.compare(VecHelper.getCenterOf(pos2) - .squareDistanceTo(centerOfRoot), + .distanceToSqr(centerOfRoot), VecHelper.getCenterOf(pos1) - .squareDistanceTo(centerOfRoot)); + .distanceToSqr(centerOfRoot)); } protected Fluid search(Fluid fluid, List frontier, Set visited, @@ -154,10 +154,10 @@ public abstract class FluidManipulationBehaviour extends TileEntityBehaviour { if (fluidState.isEmpty()) continue; - Fluid currentFluid = FluidHelper.convertToStill(fluidState.getFluid()); + Fluid currentFluid = FluidHelper.convertToStill(fluidState.getType()); if (fluid == null) fluid = currentFluid; - if (!currentFluid.isEquivalentTo(fluid)) + if (!currentFluid.isSame(fluid)) continue; add.accept(currentPos, entry.distance); @@ -166,16 +166,16 @@ public abstract class FluidManipulationBehaviour extends TileEntityBehaviour { if (!searchDownward && side == Direction.DOWN) continue; - BlockPos offsetPos = currentPos.offset(side); + BlockPos offsetPos = currentPos.relative(side); if (visited.contains(offsetPos)) continue; - if (offsetPos.distanceSq(rootPos) > maxRangeSq) + if (offsetPos.distSqr(rootPos) > maxRangeSq) continue; FluidState nextFluidState = world.getFluidState(offsetPos); if (nextFluidState.isEmpty()) continue; - Fluid nextFluid = nextFluidState.getFluid(); + Fluid nextFluid = nextFluidState.getType(); if (nextFluid == FluidHelper.convertToFlowing(nextFluid) && side == Direction.UP && !VecHelper.onSameAxis(rootPos, offsetPos, Axis.Y)) continue; @@ -188,16 +188,16 @@ public abstract class FluidManipulationBehaviour extends TileEntityBehaviour { } protected void playEffect(World world, BlockPos pos, Fluid fluid, boolean fillSound) { - BlockPos splooshPos = pos == null ? tileEntity.getPos() : pos; + BlockPos splooshPos = pos == null ? tileEntity.getBlockPos() : pos; SoundEvent soundevent = fillSound ? fluid.getAttributes() .getFillSound() : fluid.getAttributes() .getEmptySound(); if (soundevent == null) - soundevent = fluid.isIn(FluidTags.LAVA) - ? fillSound ? SoundEvents.ITEM_BUCKET_FILL_LAVA : SoundEvents.ITEM_BUCKET_EMPTY_LAVA - : fillSound ? SoundEvents.ITEM_BUCKET_FILL : SoundEvents.ITEM_BUCKET_EMPTY; + soundevent = fluid.is(FluidTags.LAVA) + ? fillSound ? SoundEvents.BUCKET_FILL_LAVA : SoundEvents.BUCKET_EMPTY_LAVA + : fillSound ? SoundEvents.BUCKET_FILL : SoundEvents.BUCKET_EMPTY; world.playSound(null, splooshPos, soundevent, SoundCategory.BLOCKS, 0.3F, 1.0F); if (world instanceof ServerWorld) @@ -214,9 +214,9 @@ public abstract class FluidManipulationBehaviour extends TileEntityBehaviour { nbt.put("LastPos", NBTUtil.writeBlockPos(rootPos)); if (affectedArea != null) { nbt.put("AffectedAreaFrom", - NBTUtil.writeBlockPos(new BlockPos(affectedArea.minX, affectedArea.minY, affectedArea.minZ))); + NBTUtil.writeBlockPos(new BlockPos(affectedArea.x0, affectedArea.y0, affectedArea.z0))); nbt.put("AffectedAreaTo", - NBTUtil.writeBlockPos(new BlockPos(affectedArea.maxX, affectedArea.maxY, affectedArea.maxZ))); + NBTUtil.writeBlockPos(new BlockPos(affectedArea.x1, affectedArea.y1, affectedArea.z1))); } super.write(nbt, clientPacket); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/FluidSplashPacket.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/FluidSplashPacket.java index 0b523ffcc..8704f92a7 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/FluidSplashPacket.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/FluidSplashPacket.java @@ -37,7 +37,7 @@ public class FluidSplashPacket extends SimplePacketBase { public void handle(Supplier ctx) { ctx.get() .enqueueWork(() -> DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> { - if (Minecraft.getInstance().player.getPositionVec() + if (Minecraft.getInstance().player.position() .distanceTo(new Vector3d(pos.getX(), pos.getY(), pos.getZ())) > 100) return; FluidFX.splash(pos, fluid); diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/GenericItemFilling.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/GenericItemFilling.java index 271378b4d..b4a1bc614 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/GenericItemFilling.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/GenericItemFilling.java @@ -83,7 +83,7 @@ public class GenericItemFilling { return -1; if (tank instanceof FluidBucketWrapper) { Item filledBucket = availableFluid.getFluid() - .getFilledBucket(); + .getBucket(); if (filledBucket == null || filledBucket == Items.AIR) return -1; if (!((FluidBucketWrapper) tank).getFluid() @@ -98,14 +98,14 @@ public class GenericItemFilling { private static boolean canFillGlassBottleInternally(FluidStack availableFluid) { return availableFluid.getFluid() - .isEquivalentTo(Fluids.WATER) + .isSame(Fluids.WATER) || availableFluid.getFluid() - .isEquivalentTo(AllFluids.POTION.get()); + .isSame(AllFluids.POTION.get()); } private static boolean canFillBucketInternally(FluidStack availableFluid) { return availableFluid.getFluid() - .isEquivalentTo(AllFluids.MILK.get().getFlowingFluid()); + .isSame(AllFluids.MILK.get().getFlowing()); } public static ItemStack fillItem(World world, int requiredAmount, ItemStack stack, FluidStack availableFluid) { @@ -116,7 +116,7 @@ public class GenericItemFilling { if (stack.getItem() == Items.GLASS_BOTTLE && canFillGlassBottleInternally(toFill)) { ItemStack fillBottle = ItemStack.EMPTY; if (FluidHelper.isWater(toFill.getFluid())) - fillBottle = PotionUtils.addPotionToItemStack(new ItemStack(Items.POTION), Potions.WATER); + fillBottle = PotionUtils.setPotion(new ItemStack(Items.POTION), Potions.WATER); else fillBottle = PotionFluidHandler.fillBottle(stack, toFill); stack.shrink(1); diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/HosePulleyBlock.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/HosePulleyBlock.java index 7ec814a63..19635c8d8 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/HosePulleyBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/HosePulleyBlock.java @@ -20,6 +20,8 @@ import net.minecraft.world.IBlockReader; import net.minecraft.world.IWorldReader; import net.minecraft.world.World; +import net.minecraft.block.AbstractBlock.Properties; + public class HosePulleyBlock extends HorizontalKineticBlock implements ITE { public HosePulleyBlock(Properties properties) { @@ -28,30 +30,30 @@ public class HosePulleyBlock extends HorizontalKineticBlock implements ITE pos.down((int) Math.ceil(offset.getValue())), () -> !this.isMoving); + () -> worldPosition.below((int) Math.ceil(offset.getValue())), () -> !this.isMoving); capability = LazyOptional.of(() -> handler); } @@ -83,7 +83,7 @@ public class HosePulleyTileEntity extends KineticTileEntity { float newOffset = offset.getValue() + getMovementSpeed(); if (newOffset < 0) isMoving = false; - if (!world.getBlockState(pos.down((int) Math.ceil(newOffset))) + if (!level.getBlockState(worldPosition.below((int) Math.ceil(newOffset))) .getMaterial() .isReplaceable()) { isMoving = false; @@ -100,13 +100,13 @@ public class HosePulleyTileEntity extends KineticTileEntity { @Override @OnlyIn(Dist.CLIENT) public AxisAlignedBB getRenderBoundingBox() { - return super.getRenderBoundingBox().expand(0, -offset.getValue(), 0); + return super.getRenderBoundingBox().expandTowards(0, -offset.getValue(), 0); } @Override @OnlyIn(Dist.CLIENT) - public double getMaxRenderDistanceSquared() { - return super.getMaxRenderDistanceSquared() + offset.getValue() * offset.getValue(); + public double getViewDistance() { + return super.getViewDistance() + offset.getValue() * offset.getValue(); } @Override @@ -117,7 +117,7 @@ public class HosePulleyTileEntity extends KineticTileEntity { newOffset = 0; isMoving = false; } - if (!world.getBlockState(pos.down((int) Math.ceil(newOffset))) + if (!level.getBlockState(worldPosition.below((int) Math.ceil(newOffset))) .getMaterial() .isReplaceable()) { newOffset = (int) newOffset; @@ -132,13 +132,13 @@ public class HosePulleyTileEntity extends KineticTileEntity { @Override public void lazyTick() { super.lazyTick(); - if (world.isRemote) + if (level.isClientSide) return; if (isMoving) return; int ceil = (int) Math.ceil(offset.getValue() + getMovementSpeed()); - if (getMovementSpeed() > 0 && world.getBlockState(pos.down(ceil)) + if (getMovementSpeed() > 0 && level.getBlockState(worldPosition.below(ceil)) .getMaterial() .isReplaceable()) { isMoving = true; @@ -169,14 +169,14 @@ public class HosePulleyTileEntity extends KineticTileEntity { } @Override - public void remove() { - super.remove(); + public void setRemoved() { + super.setRemoved(); capability.invalidate(); } public float getMovementSpeed() { float movementSpeed = convertToLinear(getSpeed()); - if (world.isRemote) + if (level.isClientSide) movementSpeed *= ServerSpeedProvider.get(); return movementSpeed; } @@ -188,7 +188,7 @@ public class HosePulleyTileEntity extends KineticTileEntity { @Override public LazyOptional getCapability(Capability cap, Direction side) { if (isFluidHandlerCap(cap) - && (side == null || HosePulleyBlock.hasPipeTowards(world, pos, getBlockState(), side))) + && (side == null || HosePulleyBlock.hasPipeTowards(level, worldPosition, getBlockState(), side))) return this.capability.cast(); return super.getCapability(cap, side); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/ItemDrainBlock.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/ItemDrainBlock.java index 5b9e93781..0a7a13fdd 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/ItemDrainBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/ItemDrainBlock.java @@ -25,6 +25,8 @@ import net.minecraft.util.math.shapes.VoxelShape; import net.minecraft.world.IBlockReader; import net.minecraft.world.World; +import net.minecraft.block.AbstractBlock.Properties; + public class ItemDrainBlock extends Block implements IWrenchable, ITE { public ItemDrainBlock(Properties p_i48440_1_) { @@ -32,21 +34,21 @@ public class ItemDrainBlock extends Block implements IWrenchable, ITE { if (!heldItem.isEmpty()) { te.internalTank.allowInsertion(); ActionResultType tryExchange = tryExchange(worldIn, player, handIn, heldItem, te); te.internalTank.forbidInsertion(); - if (tryExchange.isAccepted()) + if (tryExchange.consumesAction()) return tryExchange; } ItemStack heldItemStack = te.getHeldItemStack(); - if (!worldIn.isRemote && !heldItemStack.isEmpty()) { + if (!worldIn.isClientSide && !heldItemStack.isEmpty()) { player.inventory.placeItemBackInInventory(worldIn, heldItemStack); te.heldItem = null; te.notifyUpdate(); @@ -71,15 +73,15 @@ public class ItemDrainBlock extends Block implements IWrenchable, ITE { ItemStack heldItemStack = te.getHeldItemStack(); if (!heldItemStack.isEmpty()) - InventoryHelper.spawnItemStack(worldIn, pos.getX(), pos.getY(), pos.getZ(), heldItemStack); + InventoryHelper.dropItemStack(worldIn, pos.getX(), pos.getY(), pos.getZ(), heldItemStack); }); - worldIn.removeTileEntity(pos); + worldIn.removeBlockEntity(pos); } @Override @@ -98,17 +100,17 @@ public class ItemDrainBlock extends Block implements IWrenchable, ITE 1 && EmptyingByBasin.canItemBeEmptied(te.getWorld(), stack)) { + if (stack.getCount() > 1 && EmptyingByBasin.canItemBeEmptied(te.getLevel(), stack)) { returned = ItemHandlerHelper.copyStackWithSize(stack, stack.getCount() - 1); stack = ItemHandlerHelper.copyStackWithSize(stack, 1); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/ItemDrainRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/ItemDrainRenderer.java index 8b7ac12f4..597289981 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/ItemDrainRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/ItemDrainRenderer.java @@ -49,24 +49,24 @@ public class ItemDrainRenderer extends SmartTileEntityRenderer 1 && EmptyingByBasin.canItemBeEmptied(world, inserted)) { + if (inserted.getCount() > 1 && EmptyingByBasin.canItemBeEmptied(level, inserted)) { returned = ItemHandlerHelper.copyStackWithSize(inserted, inserted.getCount() - 1); inserted = ItemHandlerHelper.copyStackWithSize(inserted, 1); } @@ -81,7 +81,7 @@ public class ItemDrainTileEntity extends SmartTileEntity implements IHaveGoggleI transportedStack.prevSideOffset = transportedStack.sideOffset; transportedStack.prevBeltPosition = transportedStack.beltPosition; setHeldItem(transportedStack, side); - markDirty(); + setChanged(); sendData(); return returned; @@ -100,7 +100,7 @@ public class ItemDrainTileEntity extends SmartTileEntity implements IHaveGoggleI return; } - boolean onClient = world.isRemote && !isVirtual(); + boolean onClient = level.isClientSide && !isVirtual(); if (processingTicks > 0) { heldItem.prevBeltPosition = .5f; @@ -144,26 +144,26 @@ public class ItemDrainTileEntity extends SmartTileEntity implements IHaveGoggleI return; } - BlockPos nextPosition = pos.offset(side); + BlockPos nextPosition = worldPosition.relative(side); DirectBeltInputBehaviour directBeltInputBehaviour = - TileEntityBehaviour.get(world, nextPosition, DirectBeltInputBehaviour.TYPE); + TileEntityBehaviour.get(level, nextPosition, DirectBeltInputBehaviour.TYPE); if (directBeltInputBehaviour == null) { - if (!BlockHelper.hasBlockSolidSide(world.getBlockState(nextPosition), world, nextPosition, + if (!BlockHelper.hasBlockSolidSide(level.getBlockState(nextPosition), level, nextPosition, side.getOpposite())) { ItemStack ejected = heldItem.stack; - Vector3d outPos = VecHelper.getCenterOf(pos) - .add(Vector3d.of(side.getDirectionVec()) + Vector3d outPos = VecHelper.getCenterOf(worldPosition) + .add(Vector3d.atLowerCornerOf(side.getNormal()) .scale(.75)); float movementSpeed = itemMovementPerTick(); - Vector3d outMotion = Vector3d.of(side.getDirectionVec()) + Vector3d outMotion = Vector3d.atLowerCornerOf(side.getNormal()) .scale(movementSpeed) .add(0, 1 / 8f, 0); outPos.add(outMotion.normalize()); - ItemEntity entity = new ItemEntity(world, outPos.x, outPos.y + 6 / 16f, outPos.z, ejected); - entity.setMotion(outMotion); - entity.setDefaultPickupDelay(); - entity.velocityChanged = true; - world.addEntity(entity); + ItemEntity entity = new ItemEntity(level, outPos.x, outPos.y + 6 / 16f, outPos.z, ejected); + entity.setDeltaMovement(outMotion); + entity.setDefaultPickUpDelay(); + entity.hurtMarked = true; + level.addFreshEntity(entity); heldItem = null; notifyUpdate(); @@ -177,8 +177,8 @@ public class ItemDrainTileEntity extends SmartTileEntity implements IHaveGoggleI ItemStack returned = directBeltInputBehaviour.handleInsertion(heldItem.copy(), side, false); if (returned.isEmpty()) { - if (world.getTileEntity(nextPosition) instanceof ItemDrainTileEntity) - AllTriggers.triggerForNearbyPlayers(AllTriggers.CHAINED_ITEM_DRAIN, world, pos, 5); + if (level.getBlockEntity(nextPosition) instanceof ItemDrainTileEntity) + AllTriggers.triggerForNearbyPlayers(AllTriggers.CHAINED_ITEM_DRAIN, level, worldPosition, 5); heldItem = null; notifyUpdate(); return; @@ -194,7 +194,7 @@ public class ItemDrainTileEntity extends SmartTileEntity implements IHaveGoggleI } if (heldItem.prevBeltPosition < .5f && heldItem.beltPosition >= .5f) { - if (!EmptyingByBasin.canItemBeEmptied(world, heldItem.stack)) + if (!EmptyingByBasin.canItemBeEmptied(level, heldItem.stack)) return; heldItem.beltPosition = .5f; if (onClient) @@ -206,14 +206,14 @@ public class ItemDrainTileEntity extends SmartTileEntity implements IHaveGoggleI } protected boolean continueProcessing() { - if (world.isRemote && !isVirtual()) + if (level.isClientSide && !isVirtual()) return true; if (processingTicks < 5) return true; - if (!EmptyingByBasin.canItemBeEmptied(world, heldItem.stack)) + if (!EmptyingByBasin.canItemBeEmptied(level, heldItem.stack)) return false; - Pair emptyItem = EmptyingByBasin.emptyItem(world, heldItem.stack, true); + Pair emptyItem = EmptyingByBasin.emptyItem(level, heldItem.stack, true); FluidStack fluidFromItem = emptyItem.getFirst(); if (processingTicks > 5) { @@ -228,8 +228,8 @@ public class ItemDrainTileEntity extends SmartTileEntity implements IHaveGoggleI return true; } - emptyItem = EmptyingByBasin.emptyItem(world, heldItem.stack.copy(), false); - AllTriggers.triggerForNearbyPlayers(AllTriggers.ITEM_DRAIN, world, pos, 5); + emptyItem = EmptyingByBasin.emptyItem(level, heldItem.stack.copy(), false); + AllTriggers.triggerForNearbyPlayers(AllTriggers.ITEM_DRAIN, level, worldPosition, 5); // Process finished ItemStack out = emptyItem.getSecond(); @@ -250,8 +250,8 @@ public class ItemDrainTileEntity extends SmartTileEntity implements IHaveGoggleI } @Override - public void remove() { - super.remove(); + public void setRemoved() { + super.setRemoved(); for (LazyOptional lazyOptional : itemHandlers.values()) lazyOptional.invalidate(); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/SpoutBlock.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/SpoutBlock.java index be3a9dcd2..2d5634321 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/SpoutBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/SpoutBlock.java @@ -15,6 +15,8 @@ import net.minecraft.util.math.shapes.VoxelShape; import net.minecraft.world.IBlockReader; import net.minecraft.world.World; +import net.minecraft.block.AbstractBlock.Properties; + public class SpoutBlock extends Block implements IWrenchable { public SpoutBlock(Properties p_i48440_1_) { @@ -38,17 +40,17 @@ public class SpoutBlock extends Block implements IWrenchable { } @Override - public boolean hasComparatorInputOverride(BlockState state) { + public boolean hasAnalogOutputSignal(BlockState state) { return true; } @Override - public int getComparatorInputOverride(BlockState blockState, World worldIn, BlockPos pos) { + public int getAnalogOutputSignal(BlockState blockState, World worldIn, BlockPos pos) { return ComparatorUtil.levelOfSmartFluidTank(worldIn, pos); } @Override - public boolean allowsMovement(BlockState state, IBlockReader reader, BlockPos pos, PathType type) { + public boolean isPathfindable(BlockState state, IBlockReader reader, BlockPos pos, PathType type) { return false; } diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/SpoutRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/SpoutRenderer.java index 56e8a77d6..5594f5ef7 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/SpoutRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/SpoutRenderer.java @@ -42,11 +42,11 @@ public class SpoutRenderer extends SafeTileEntityRenderer { float min = 2.5f / 16f; float max = min + (11 / 16f); float yOffset = (11 / 16f) * level; - ms.push(); + ms.pushPose(); ms.translate(0, yOffset, 0); FluidRenderer.renderTiledFluidBB(fluidStack, min, min - yOffset, min, max, min, max, buffer, ms, light, false); - ms.pop(); + ms.popPose(); } int processingTicks = te.getCorrectedProcessingTicks(); @@ -57,7 +57,7 @@ public class SpoutRenderer extends SafeTileEntityRenderer { if (processingTicks != -1) { radius = (float) (Math.pow(((2 * processingProgress) - 1), 2) - 1); - AxisAlignedBB bb = new AxisAlignedBB(0.5, .5, 0.5, 0.5, -1.2, 0.5).grow(radius / 32f); + AxisAlignedBB bb = new AxisAlignedBB(0.5, .5, 0.5, 0.5, -1.2, 0.5).inflate(radius / 32f); FluidRenderer.renderTiledFluidBB(fluidStack, (float) bb.minX, (float) bb.minY, (float) bb.minZ, (float) bb.maxX, (float) bb.maxY, (float) bb.maxZ, buffer, ms, light, true); } @@ -70,14 +70,14 @@ public class SpoutRenderer extends SafeTileEntityRenderer { else if (processingPT < 10) squeeze = -1; - ms.push(); + ms.pushPose(); for (PartialModel bit : BITS) { PartialBufferer.get(bit, te.getBlockState()) .light(light) - .renderInto(ms, buffer.getBuffer(RenderType.getSolid())); + .renderInto(ms, buffer.getBuffer(RenderType.solid())); ms.translate(0, -3 * squeeze / 32f, 0); } - ms.pop(); + ms.popPose(); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/SpoutTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/SpoutTileEntity.java index df7db0317..371e73e47 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/SpoutTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/SpoutTileEntity.java @@ -76,7 +76,7 @@ public class SpoutTileEntity extends SmartTileEntity implements IHaveGoggleInfor @OnlyIn(Dist.CLIENT) public AxisAlignedBB getRenderBoundingBox() { if (cachedBoundingBox == null) - cachedBoundingBox = super.getRenderBoundingBox().expand(0, -2, 0); + cachedBoundingBox = super.getRenderBoundingBox().expandTowards(0, -2, 0); return cachedBoundingBox; } @@ -93,11 +93,11 @@ public class SpoutTileEntity extends SmartTileEntity implements IHaveGoggleInfor protected ProcessingResult onItemReceived(TransportedItemStack transported, TransportedItemStackHandlerBehaviour handler) { - if (!FillingBySpout.canItemBeFilled(world, transported.stack)) + if (!FillingBySpout.canItemBeFilled(level, transported.stack)) return PASS; if (tank.isEmpty()) return HOLD; - if (FillingBySpout.getRequiredAmountForItem(world, transported.stack, getCurrentFluidInTank()) == -1) + if (FillingBySpout.getRequiredAmountForItem(level, transported.stack, getCurrentFluidInTank()) == -1) return PASS; return HOLD; } @@ -107,12 +107,12 @@ public class SpoutTileEntity extends SmartTileEntity implements IHaveGoggleInfor shouldAnimate = true; if (processingTicks != -1 && processingTicks != 5) return HOLD; - if (!FillingBySpout.canItemBeFilled(world, transported.stack)) + if (!FillingBySpout.canItemBeFilled(level, transported.stack)) return PASS; if (tank.isEmpty()) return HOLD; FluidStack fluid = getCurrentFluidInTank(); - int requiredAmountForItem = FillingBySpout.getRequiredAmountForItem(world, transported.stack, fluid.copy()); + int requiredAmountForItem = FillingBySpout.getRequiredAmountForItem(level, transported.stack, fluid.copy()); if (requiredAmountForItem == -1) return PASS; if (requiredAmountForItem > fluid.getAmount()) @@ -125,7 +125,7 @@ public class SpoutTileEntity extends SmartTileEntity implements IHaveGoggleInfor } // Process finished - ItemStack out = FillingBySpout.fillItem(world, requiredAmountForItem, transported.stack, fluid); + ItemStack out = FillingBySpout.fillItem(level, requiredAmountForItem, transported.stack, fluid); if (!out.isEmpty()) { List outList = new ArrayList<>(); TransportedItemStack held = null; @@ -137,10 +137,10 @@ public class SpoutTileEntity extends SmartTileEntity implements IHaveGoggleInfor handler.handleProcessingOnItem(transported, TransportedResult.convertToAndLeaveHeld(outList, held)); } - AllTriggers.triggerForNearbyPlayers(AllTriggers.SPOUT, world, pos, 5); - if (out.getItem() instanceof PotionItem && !PotionUtils.getEffectsFromStack(out) + AllTriggers.triggerForNearbyPlayers(AllTriggers.SPOUT, level, worldPosition, 5); + if (out.getItem() instanceof PotionItem && !PotionUtils.getMobEffects(out) .isEmpty()) - AllTriggers.triggerForNearbyPlayers(AllTriggers.SPOUT_POTION, world, pos, 5); + AllTriggers.triggerForNearbyPlayers(AllTriggers.SPOUT_POTION, level, worldPosition, 5); tank.getPrimaryHandler() .setFluid(fluid); @@ -152,7 +152,7 @@ public class SpoutTileEntity extends SmartTileEntity implements IHaveGoggleInfor private void processTicCastBlock() { if (!IS_TIC_LOADED || CASTING_FLUID_HANDLER_CLASS == null) return; - if (world == null) + if (level == null) return; IFluidHandler localTank = this.tank.getCapability() .orElse(null); @@ -161,10 +161,10 @@ public class SpoutTileEntity extends SmartTileEntity implements IHaveGoggleInfor FluidStack fluid = getCurrentFluidInTank(); if (fluid.getAmount() == 0) return; - TileEntity te = world.getTileEntity(pos.down(2)); + TileEntity te = level.getBlockEntity(worldPosition.below(2)); if (te == null) return; - IFluidHandler handler = getFluidHandler(pos.down(2), Direction.UP); + IFluidHandler handler = getFluidHandler(worldPosition.below(2), Direction.UP); if (!CASTING_FLUID_HANDLER_CLASS.isInstance(handler)) return; if (handler.getTanks() != 1) @@ -242,7 +242,7 @@ public class SpoutTileEntity extends SmartTileEntity implements IHaveGoggleInfor processTicCastBlock(); if (processingTicks >= 0) processingTicks--; - if (processingTicks >= 8 && world.isRemote && shouldAnimate) + if (processingTicks >= 8 && level.isClientSide && shouldAnimate) spawnProcessingParticles(tank.getPrimaryTank() .getRenderedFluid()); } @@ -250,10 +250,10 @@ public class SpoutTileEntity extends SmartTileEntity implements IHaveGoggleInfor protected void spawnProcessingParticles(FluidStack fluid) { if (isVirtual()) return; - Vector3d vec = VecHelper.getCenterOf(pos); + Vector3d vec = VecHelper.getCenterOf(worldPosition); vec = vec.subtract(0, 8 / 16f, 0); IParticleData particle = FluidFX.getFluidParticle(fluid); - world.addOptionalParticle(particle, vec.x, vec.y, vec.z, 0, -.1f, 0); + level.addAlwaysVisibleParticle(particle, vec.x, vec.y, vec.z, 0, -.1f, 0); } protected static int SPLASH_PARTICLE_COUNT = 20; @@ -261,22 +261,22 @@ public class SpoutTileEntity extends SmartTileEntity implements IHaveGoggleInfor protected void spawnSplash(FluidStack fluid) { if (isVirtual()) return; - Vector3d vec = VecHelper.getCenterOf(pos); + Vector3d vec = VecHelper.getCenterOf(worldPosition); vec = vec.subtract(0, 2 - 5 / 16f, 0); IParticleData particle = FluidFX.getFluidParticle(fluid); for (int i = 0; i < SPLASH_PARTICLE_COUNT; i++) { - Vector3d m = VecHelper.offsetRandomly(Vector3d.ZERO, world.rand, 0.125f); + Vector3d m = VecHelper.offsetRandomly(Vector3d.ZERO, level.random, 0.125f); m = new Vector3d(m.x, Math.abs(m.y), m.z); - world.addOptionalParticle(particle, vec.x, vec.y, vec.z, m.x, m.y, m.z); + level.addAlwaysVisibleParticle(particle, vec.x, vec.y, vec.z, m.x, m.y, m.z); } } @Nullable private IFluidHandler getFluidHandler(BlockPos pos, Direction direction) { - if (this.world == null) { + if (this.level == null) { return null; } else { - TileEntity te = this.world.getTileEntity(pos); + TileEntity te = this.level.getBlockEntity(pos); return te != null ? te.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, direction) .orElse(null) : null; } diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/particle/BasinFluidParticle.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/particle/BasinFluidParticle.java index 64f392743..05fa110d9 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/particle/BasinFluidParticle.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/particle/BasinFluidParticle.java @@ -24,72 +24,72 @@ public class BasinFluidParticle extends FluidStackParticle { public BasinFluidParticle(ClientWorld world, FluidStack fluid, double x, double y, double z, double vx, double vy, double vz) { super(world, fluid, x, y, z, vx, vy, vz); - particleGravity = 0; - motionX = 0; - motionY = 0; - motionZ = 0; - yOffset = world.rand.nextFloat() * 1 / 32f; - posY += yOffset; - particleScale = 0; - maxAge = 60; - Vector3d currentPos = new Vector3d(posX, posY, posZ); + gravity = 0; + xd = 0; + yd = 0; + zd = 0; + yOffset = world.random.nextFloat() * 1 / 32f; + y += yOffset; + quadSize = 0; + lifetime = 60; + Vector3d currentPos = new Vector3d(x, y, z); basinPos = new BlockPos(currentPos); centerOfBasin = VecHelper.getCenterOf(basinPos); if (vx != 0) { - maxAge = 20; + lifetime = 20; Vector3d centerOf = VecHelper.getCenterOf(basinPos); Vector3d diff = currentPos.subtract(centerOf) - .mul(1, 0, 1) + .multiply(1, 0, 1) .normalize() .scale(.375); targetPos = centerOf.add(diff); - prevPosX = posX = centerOfBasin.x; - prevPosZ = posZ = centerOfBasin.z; + xo = x = centerOfBasin.x; + zo = z = centerOfBasin.z; } } @Override public void tick() { super.tick(); - particleScale = targetPos != null ? Math.max(1 / 32f, ((1f * age) / maxAge) / 8) - : 1 / 8f * (1 - ((Math.abs(age - (maxAge / 2)) / (1f * maxAge)))); + quadSize = targetPos != null ? Math.max(1 / 32f, ((1f * age) / lifetime) / 8) + : 1 / 8f * (1 - ((Math.abs(age - (lifetime / 2)) / (1f * lifetime)))); if (age % 2 == 0) { - if (!AllBlocks.BASIN.has(world.getBlockState(basinPos))) { - setExpired(); + if (!AllBlocks.BASIN.has(level.getBlockState(basinPos))) { + remove(); return; } - TileEntity tileEntity = world.getTileEntity(basinPos); + TileEntity tileEntity = level.getBlockEntity(basinPos); if (tileEntity instanceof BasinTileEntity) { float totalUnits = ((BasinTileEntity) tileEntity).getTotalFluidUnits(0); if (totalUnits < 1) totalUnits = 0; float fluidLevel = MathHelper.clamp(totalUnits / 2000, 0, 1); - posY = 2 / 16f + basinPos.getY() + 12 / 16f * fluidLevel + yOffset; + y = 2 / 16f + basinPos.getY() + 12 / 16f * fluidLevel + yOffset; } } if (targetPos != null) { - float progess = (1f * age) / maxAge; + float progess = (1f * age) / lifetime; Vector3d currentPos = centerOfBasin.add(targetPos.subtract(centerOfBasin) .scale(progess)); - posX = currentPos.x; - posZ = currentPos.z; + x = currentPos.x; + z = currentPos.z; } } @Override - public void buildGeometry(IVertexBuilder vb, ActiveRenderInfo info, float pt) { - Quaternion rotation = info.getRotation(); + public void render(IVertexBuilder vb, ActiveRenderInfo info, float pt) { + Quaternion rotation = info.rotation(); Quaternion prevRotation = new Quaternion(rotation); rotation.set(1, 0, 0, 1); rotation.normalize(); - super.buildGeometry(vb, info, pt); + super.render(vb, info, pt); rotation.set(0, 0, 0, 1); - rotation.multiply(prevRotation); + rotation.mul(prevRotation); } @Override diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/particle/FluidParticleData.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/particle/FluidParticleData.java index 14c324e72..1e2b7a503 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/particle/FluidParticleData.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/particle/FluidParticleData.java @@ -21,6 +21,8 @@ import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.registries.ForgeRegistries; +import net.minecraft.particles.IParticleData.IDeserializer; + public class FluidParticleData implements IParticleData, ICustomParticleData { private ParticleType type; @@ -47,12 +49,12 @@ public class FluidParticleData implements IParticleData, ICustomParticleData() { // TODO Fluid particles on command - public FluidParticleData deserialize(ParticleType particleTypeIn, StringReader reader) + public FluidParticleData fromCommand(ParticleType particleTypeIn, StringReader reader) throws CommandSyntaxException { return new FluidParticleData(particleTypeIn, new FluidStack(Fluids.WATER, 1)); } - public FluidParticleData read(ParticleType particleTypeIn, PacketBuffer buffer) { + public FluidParticleData fromNetwork(ParticleType particleTypeIn, PacketBuffer buffer) { return new FluidParticleData(particleTypeIn, buffer.readFluidStack()); } }; diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/particle/FluidStackParticle.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/particle/FluidStackParticle.java index 1119601b4..12a2eaacb 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/particle/FluidStackParticle.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/particle/FluidStackParticle.java @@ -15,8 +15,8 @@ import net.minecraft.util.math.vector.Vector3d; import net.minecraftforge.fluids.FluidStack; public class FluidStackParticle extends SpriteTexturedParticle { - private final float field_217587_G; - private final float field_217588_H; + private final float uo; + private final float vo; private FluidStack fluid; public static FluidStackParticle create(ParticleType type, ClientWorld world, FluidStack fluid, double x, @@ -31,31 +31,31 @@ public class FluidStackParticle extends SpriteTexturedParticle { super(world, x, y, z, vx, vy, vz); this.fluid = fluid; this.setSprite(Minecraft.getInstance() - .getSpriteAtlas(PlayerContainer.BLOCK_ATLAS_TEXTURE) + .getTextureAtlas(PlayerContainer.BLOCK_ATLAS) .apply(fluid.getFluid() .getAttributes() .getStillTexture())); - this.particleGravity = 1.0F; - this.particleRed = 0.8F; - this.particleGreen = 0.8F; - this.particleBlue = 0.8F; + this.gravity = 1.0F; + this.rCol = 0.8F; + this.gCol = 0.8F; + this.bCol = 0.8F; this.multiplyColor(fluid.getFluid() .getAttributes() .getColor(fluid)); - this.motionX = vx; - this.motionY = vy; - this.motionZ = vz; + this.xd = vx; + this.yd = vy; + this.zd = vz; - this.particleScale /= 2.0F; - this.field_217587_G = this.rand.nextFloat() * 3.0F; - this.field_217588_H = this.rand.nextFloat() * 3.0F; + this.quadSize /= 2.0F; + this.uo = this.random.nextFloat() * 3.0F; + this.vo = this.random.nextFloat() * 3.0F; } @Override - protected int getBrightnessForRender(float p_189214_1_) { - int brightnessForRender = super.getBrightnessForRender(p_189214_1_); + protected int getLightColor(float p_189214_1_) { + int brightnessForRender = super.getLightColor(p_189214_1_); int skyLight = brightnessForRender >> 20; int blockLight = (brightnessForRender >> 4) & 0xf; blockLight = Math.max(blockLight, fluid.getFluid() @@ -65,25 +65,25 @@ public class FluidStackParticle extends SpriteTexturedParticle { } protected void multiplyColor(int color) { - this.particleRed *= (float) (color >> 16 & 255) / 255.0F; - this.particleGreen *= (float) (color >> 8 & 255) / 255.0F; - this.particleBlue *= (float) (color & 255) / 255.0F; + this.rCol *= (float) (color >> 16 & 255) / 255.0F; + this.gCol *= (float) (color >> 8 & 255) / 255.0F; + this.bCol *= (float) (color & 255) / 255.0F; } - protected float getMinU() { - return this.sprite.getInterpolatedU((double) ((this.field_217587_G + 1.0F) / 4.0F * 16.0F)); + protected float getU0() { + return this.sprite.getU((double) ((this.uo + 1.0F) / 4.0F * 16.0F)); } - protected float getMaxU() { - return this.sprite.getInterpolatedU((double) (this.field_217587_G / 4.0F * 16.0F)); + protected float getU1() { + return this.sprite.getU((double) (this.uo / 4.0F * 16.0F)); } - protected float getMinV() { - return this.sprite.getInterpolatedV((double) (this.field_217588_H / 4.0F * 16.0F)); + protected float getV0() { + return this.sprite.getV((double) (this.vo / 4.0F * 16.0F)); } - protected float getMaxV() { - return this.sprite.getInterpolatedV((double) ((this.field_217588_H + 1.0F) / 4.0F * 16.0F)); + protected float getV1() { + return this.sprite.getV((double) ((this.vo + 1.0F) / 4.0F * 16.0F)); } @Override @@ -92,16 +92,16 @@ public class FluidStackParticle extends SpriteTexturedParticle { if (!canEvaporate()) return; if (onGround) - setExpired(); - if (!isExpired) + remove(); + if (!removed) return; - if (!onGround && world.rand.nextFloat() < 1 / 8f) + if (!onGround && level.random.nextFloat() < 1 / 8f) return; Vector3d rgb = ColorHelper.getRGB(fluid.getFluid() .getAttributes() .getColor(fluid)); - world.addParticle(ParticleTypes.ENTITY_EFFECT, posX, posY, posZ, rgb.x, rgb.y, rgb.z); + level.addParticle(ParticleTypes.ENTITY_EFFECT, x, y, z, rgb.x, rgb.y, rgb.z); } protected boolean canEvaporate() { diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/AxisPipeBlock.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/AxisPipeBlock.java index d9410ff54..1ea8c401f 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/AxisPipeBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/AxisPipeBlock.java @@ -38,6 +38,8 @@ import net.minecraft.world.TickPriority; import net.minecraft.world.World; import net.minecraft.world.server.ServerWorld; +import net.minecraft.block.AbstractBlock.Properties; + public class AxisPipeBlock extends RotatedPillarBlock implements IWrenchableWithBracket, IAxisPipe { public AxisPipeBlock(Properties p_i48339_1_) { @@ -45,27 +47,27 @@ public class AxisPipeBlock extends RotatedPillarBlock implements IWrenchableWith } @Override - public void onReplaced(BlockState state, World world, BlockPos pos, BlockState newState, boolean isMoving) { + public void onRemove(BlockState state, World world, BlockPos pos, BlockState newState, boolean isMoving) { boolean blockTypeChanged = state.getBlock() != newState.getBlock(); - if (blockTypeChanged && !world.isRemote) + if (blockTypeChanged && !world.isClientSide) FluidPropagator.propagateChangedPipe(world, pos, state); if (state != newState && !isMoving) - removeBracket(world, pos, true).ifPresent(stack -> Block.spawnAsEntity(world, pos, stack)); + removeBracket(world, pos, true).ifPresent(stack -> Block.popResource(world, pos, stack)); if (state.hasTileEntity() && (blockTypeChanged || !newState.hasTileEntity())) - world.removeTileEntity(pos); + world.removeBlockEntity(pos); } @Override - public ActionResultType onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, + public ActionResultType use(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockRayTraceResult hit) { - if (!AllBlocks.COPPER_CASING.isIn(player.getHeldItem(hand))) + if (!AllBlocks.COPPER_CASING.isIn(player.getItemInHand(hand))) return ActionResultType.PASS; - if (!world.isRemote) { + if (!world.isClientSide) { BlockState newState = AllBlocks.ENCASED_FLUID_PIPE.getDefaultState(); for (Direction d : Iterate.directionsInAxis(getAxis(state))) - newState = newState.with(EncasedPipeBlock.FACING_TO_PROPERTY_MAP.get(d), true); + newState = newState.setValue(EncasedPipeBlock.FACING_TO_PROPERTY_MAP.get(d), true); FluidTransportBehaviour.cacheFlows(world, pos); - world.setBlockState(pos, newState); + world.setBlockAndUpdate(pos, newState); FluidTransportBehaviour.loadFlows(world, pos); } AllTriggers.triggerFor(AllTriggers.CASING_PIPE, player); @@ -73,11 +75,11 @@ public class AxisPipeBlock extends RotatedPillarBlock implements IWrenchableWith } @Override - public void onBlockAdded(BlockState state, World world, BlockPos pos, BlockState oldState, boolean isMoving) { - if (world.isRemote) + public void onPlace(BlockState state, World world, BlockPos pos, BlockState oldState, boolean isMoving) { + if (world.isClientSide) return; if (state != oldState) - world.getPendingBlockTicks() + world.getBlockTicks() .scheduleTick(pos, this, 1, TickPriority.HIGH); } @@ -90,43 +92,43 @@ public class AxisPipeBlock extends RotatedPillarBlock implements IWrenchableWith @Override public void neighborChanged(BlockState state, World world, BlockPos pos, Block otherBlock, BlockPos neighborPos, boolean isMoving) { - DebugPacketSender.func_218806_a(world, pos); + DebugPacketSender.sendNeighborsUpdatePacket(world, pos); Direction d = FluidPropagator.validateNeighbourChange(state, world, pos, otherBlock, neighborPos, isMoving); if (d == null) return; if (!isOpenAt(state, d)) return; - world.getPendingBlockTicks() + world.getBlockTicks() .scheduleTick(pos, this, 1, TickPriority.HIGH); } public static boolean isOpenAt(BlockState state, Direction d) { - return d.getAxis() == state.get(AXIS); + return d.getAxis() == state.getValue(AXIS); } @Override - public void scheduledTick(BlockState state, ServerWorld world, BlockPos pos, Random r) { + public void tick(BlockState state, ServerWorld world, BlockPos pos, Random r) { FluidPropagator.propagateChangedPipe(world, pos, state); } @Override public VoxelShape getShape(BlockState state, IBlockReader p_220053_2_, BlockPos p_220053_3_, ISelectionContext p_220053_4_) { - return AllShapes.EIGHT_VOXEL_POLE.get(state.get(AXIS)); + return AllShapes.EIGHT_VOXEL_POLE.get(state.getValue(AXIS)); } public BlockState toRegularPipe(IWorld world, BlockPos pos, BlockState state) { - Direction side = Direction.getFacingFromAxis(AxisDirection.POSITIVE, state.get(AXIS)); - Map facingToPropertyMap = FluidPipeBlock.FACING_TO_PROPERTY_MAP; + Direction side = Direction.get(AxisDirection.POSITIVE, state.getValue(AXIS)); + Map facingToPropertyMap = FluidPipeBlock.PROPERTY_BY_DIRECTION; return AllBlocks.FLUID_PIPE.get() .updateBlockState(AllBlocks.FLUID_PIPE.getDefaultState() - .with(facingToPropertyMap.get(side), true) - .with(facingToPropertyMap.get(side.getOpposite()), true), side, null, world, pos); + .setValue(facingToPropertyMap.get(side), true) + .setValue(facingToPropertyMap.get(side.getOpposite()), true), side, null, world, pos); } @Override public Axis getAxis(BlockState state) { - return state.get(AXIS); + return state.getValue(AXIS); } @Override @@ -136,7 +138,7 @@ public class AxisPipeBlock extends RotatedPillarBlock implements IWrenchableWith return Optional.empty(); BlockState bracket = behaviour.getBracket(); behaviour.removeBracket(inOnReplacedContext); - if (bracket == Blocks.AIR.getDefaultState()) + if (bracket == Blocks.AIR.defaultBlockState()) return Optional.empty(); return Optional.of(new ItemStack(bracket.getBlock())); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/BracketBlock.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/BracketBlock.java index 6932c02fb..df522f4dc 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/BracketBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/BracketBlock.java @@ -19,6 +19,8 @@ import net.minecraft.util.Direction; import net.minecraft.util.Direction.Axis; import net.minecraft.util.IStringSerializable; +import net.minecraft.block.AbstractBlock.Properties; + public class BracketBlock extends ProperDirectionalBlock { public static final BooleanProperty AXIS_ALONG_FIRST_COORDINATE = @@ -29,15 +31,15 @@ public class BracketBlock extends ProperDirectionalBlock { PIPE, COG, SHAFT; @Override - public String getString() { + public String getSerializedName() { return Lang.asId(name()); } } @Override - protected void fillStateContainer(Builder builder) { - super.fillStateContainer(builder.add(AXIS_ALONG_FIRST_COORDINATE) + protected void createBlockStateDefinition(Builder builder) { + super.createBlockStateDefinition(builder.add(AXIS_ALONG_FIRST_COORDINATE) .add(TYPE)); } @@ -47,7 +49,7 @@ public class BracketBlock extends ProperDirectionalBlock { public Optional getSuitableBracket(BlockState blockState, Direction direction) { if (blockState.getBlock() instanceof AbstractShaftBlock) - return getSuitableBracket(blockState.get(RotatedPillarKineticBlock.AXIS), direction, + return getSuitableBracket(blockState.getValue(RotatedPillarKineticBlock.AXIS), direction, blockState.getBlock() instanceof CogWheelBlock ? BracketType.COG : BracketType.SHAFT); return getSuitableBracket(FluidPropagator.getStraightPipeAxis(blockState), direction, BracketType.PIPE); } @@ -58,9 +60,9 @@ public class BracketBlock extends ProperDirectionalBlock { return Optional.empty(); boolean alongFirst = axis != Axis.Z ? targetBlockAxis == Axis.Z : targetBlockAxis == Axis.Y; - return Optional.of(getDefaultState().with(TYPE, type) - .with(FACING, direction) - .with(AXIS_ALONG_FIRST_COORDINATE, !alongFirst)); + return Optional.of(defaultBlockState().setValue(TYPE, type) + .setValue(FACING, direction) + .setValue(AXIS_ALONG_FIRST_COORDINATE, !alongFirst)); } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/BracketBlockItem.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/BracketBlockItem.java index d7aaf70b8..243f3a31b 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/BracketBlockItem.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/BracketBlockItem.java @@ -17,6 +17,8 @@ import net.minecraft.util.Direction; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; +import net.minecraft.item.Item.Properties; + public class BracketBlockItem extends BlockItem { public BracketBlockItem(Block p_i48527_1_, Properties p_i48527_2_) { @@ -24,9 +26,9 @@ public class BracketBlockItem extends BlockItem { } @Override - public ActionResultType onItemUse(ItemUseContext context) { - World world = context.getWorld(); - BlockPos pos = context.getPos(); + public ActionResultType useOn(ItemUseContext context) { + World world = context.getLevel(); + BlockPos pos = context.getClickedPos(); BlockState state = world.getBlockState(pos); BracketBlock bracketBlock = getBracketBlock(); PlayerEntity player = context.getPlayer(); @@ -37,29 +39,29 @@ public class BracketBlockItem extends BlockItem { return ActionResultType.FAIL; if (!behaviour.canHaveBracket()) return ActionResultType.FAIL; - if (world.isRemote) + if (world.isClientSide) return ActionResultType.SUCCESS; - Optional suitableBracket = bracketBlock.getSuitableBracket(state, context.getFace()); + Optional suitableBracket = bracketBlock.getSuitableBracket(state, context.getClickedFace()); if (!suitableBracket.isPresent() && player != null) suitableBracket = - bracketBlock.getSuitableBracket(state, Direction.getFacingDirections(player)[0].getOpposite()); + bracketBlock.getSuitableBracket(state, Direction.orderedByNearest(player)[0].getOpposite()); if (!suitableBracket.isPresent()) return ActionResultType.SUCCESS; BlockState bracket = behaviour.getBracket(); behaviour.applyBracket(suitableBracket.get()); - if (!world.isRemote && player != null) + if (!world.isClientSide && player != null) behaviour.triggerAdvancements(world, player, state); if (player == null || !player.isCreative()) { - context.getItem() + context.getItemInHand() .shrink(1); - if (bracket != Blocks.AIR.getDefaultState()) { + if (bracket != Blocks.AIR.defaultBlockState()) { ItemStack returnedStack = new ItemStack(bracket.getBlock()); if (player == null) - Block.spawnAsEntity(world, pos, returnedStack); + Block.popResource(world, pos, returnedStack); else player.inventory.placeItemBackInInventory(world, returnedStack); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/BracketGenerator.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/BracketGenerator.java index 456ee4766..e31ac7a86 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/BracketGenerator.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/BracketGenerator.java @@ -28,9 +28,9 @@ public class BracketGenerator extends DirectionalAxisBlockStateGen { @Override public ModelFile getModel(DataGenContext ctx, RegistrateBlockstateProvider prov, BlockState state) { - String type = state.get(BracketBlock.TYPE) - .getString(); - boolean vertical = state.get(BracketBlock.FACING) + String type = state.getValue(BracketBlock.TYPE) + .getSerializedName(); + boolean vertical = state.getValue(BracketBlock.FACING) .getAxis() .isVertical(); diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/EncasedPipeBlock.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/EncasedPipeBlock.java index 6c59b77a7..be375a2dc 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/EncasedPipeBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/EncasedPipeBlock.java @@ -38,24 +38,26 @@ import net.minecraft.world.TickPriority; import net.minecraft.world.World; import net.minecraft.world.server.ServerWorld; +import net.minecraft.block.AbstractBlock.Properties; + public class EncasedPipeBlock extends Block implements IWrenchable, ISpecialBlockItemRequirement { - public static final Map FACING_TO_PROPERTY_MAP = SixWayBlock.FACING_TO_PROPERTY_MAP; + public static final Map FACING_TO_PROPERTY_MAP = SixWayBlock.PROPERTY_BY_DIRECTION; public EncasedPipeBlock(Properties p_i48339_1_) { super(p_i48339_1_); - setDefaultState(getDefaultState().with(NORTH, false) - .with(SOUTH, false) - .with(DOWN, false) - .with(UP, false) - .with(WEST, false) - .with(EAST, false)); + registerDefaultState(defaultBlockState().setValue(NORTH, false) + .setValue(SOUTH, false) + .setValue(DOWN, false) + .setValue(UP, false) + .setValue(WEST, false) + .setValue(EAST, false)); } @Override - protected void fillStateContainer(Builder builder) { + protected void createBlockStateDefinition(Builder builder) { builder.add(NORTH, EAST, SOUTH, WEST, UP, DOWN); - super.fillStateContainer(builder); + super.createBlockStateDefinition(builder); } @Override @@ -64,18 +66,18 @@ public class EncasedPipeBlock extends Block implements IWrenchable, ISpecialBloc } @Override - public void onReplaced(BlockState state, World world, BlockPos pos, BlockState newState, boolean isMoving) { + public void onRemove(BlockState state, World world, BlockPos pos, BlockState newState, boolean isMoving) { boolean blockTypeChanged = state.getBlock() != newState.getBlock(); - if (blockTypeChanged && !world.isRemote) + if (blockTypeChanged && !world.isClientSide) FluidPropagator.propagateChangedPipe(world, pos, state); if (state.hasTileEntity() && (blockTypeChanged || !newState.hasTileEntity())) - world.removeTileEntity(pos); + world.removeBlockEntity(pos); } @Override - public void onBlockAdded(BlockState state, World world, BlockPos pos, BlockState oldState, boolean isMoving) { - if (!world.isRemote && state != oldState) - world.getPendingBlockTicks() + public void onPlace(BlockState state, World world, BlockPos pos, BlockState oldState, boolean isMoving) { + if (!world.isClientSide && state != oldState) + world.getBlockTicks() .scheduleTick(pos, this, 1, TickPriority.HIGH); } @@ -88,18 +90,18 @@ public class EncasedPipeBlock extends Block implements IWrenchable, ISpecialBloc @Override public void neighborChanged(BlockState state, World world, BlockPos pos, Block otherBlock, BlockPos neighborPos, boolean isMoving) { - DebugPacketSender.func_218806_a(world, pos); + DebugPacketSender.sendNeighborsUpdatePacket(world, pos); Direction d = FluidPropagator.validateNeighbourChange(state, world, pos, otherBlock, neighborPos, isMoving); if (d == null) return; - if (!state.get(FACING_TO_PROPERTY_MAP.get(d))) + if (!state.getValue(FACING_TO_PROPERTY_MAP.get(d))) return; - world.getPendingBlockTicks() + world.getBlockTicks() .scheduleTick(pos, this, 1, TickPriority.HIGH); } @Override - public void scheduledTick(BlockState state, ServerWorld world, BlockPos pos, Random r) { + public void tick(BlockState state, ServerWorld world, BlockPos pos, Random r) { FluidPropagator.propagateChangedPipe(world, pos, state); } @@ -110,25 +112,25 @@ public class EncasedPipeBlock extends Block implements IWrenchable, ISpecialBloc @Override public ActionResultType onWrenched(BlockState state, ItemUseContext context) { - World world = context.getWorld(); - BlockPos pos = context.getPos(); + World world = context.getLevel(); + BlockPos pos = context.getClickedPos(); - if (world.isRemote) + if (world.isClientSide) return ActionResultType.SUCCESS; - context.getWorld() - .playEvent(2001, context.getPos(), Block.getStateId(state)); + context.getLevel() + .levelEvent(2001, context.getClickedPos(), Block.getId(state)); BlockState equivalentPipe = transferSixWayProperties(state, AllBlocks.FLUID_PIPE.getDefaultState()); Direction firstFound = Direction.UP; for (Direction d : Iterate.directions) - if (state.get(FACING_TO_PROPERTY_MAP.get(d))) { + if (state.getValue(FACING_TO_PROPERTY_MAP.get(d))) { firstFound = d; break; } FluidTransportBehaviour.cacheFlows(world, pos); - world.setBlockState(pos, AllBlocks.FLUID_PIPE.get() + world.setBlockAndUpdate(pos, AllBlocks.FLUID_PIPE.get() .updateBlockState(equivalentPipe, firstFound, null, world, pos)); FluidTransportBehaviour.loadFlows(world, pos); return ActionResultType.SUCCESS; @@ -137,7 +139,7 @@ public class EncasedPipeBlock extends Block implements IWrenchable, ISpecialBloc public static BlockState transferSixWayProperties(BlockState from, BlockState to) { for (Direction d : Iterate.directions) { BooleanProperty property = FACING_TO_PROPERTY_MAP.get(d); - to = to.with(property, from.get(property)); + to = to.setValue(property, from.getValue(property)); } return to; } diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/FluidPipeBlock.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/FluidPipeBlock.java index 2f6d15103..a42ef87b3 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/FluidPipeBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/FluidPipeBlock.java @@ -46,11 +46,13 @@ import net.minecraft.world.TickPriority; import net.minecraft.world.World; import net.minecraft.world.server.ServerWorld; +import net.minecraft.block.AbstractBlock.Properties; + public class FluidPipeBlock extends SixWayBlock implements IWaterLoggable, IWrenchableWithBracket { public FluidPipeBlock(Properties properties) { super(4 / 16f, properties); - this.setDefaultState(super.getDefaultState().with(BlockStateProperties.WATERLOGGED, false)); + this.registerDefaultState(super.defaultBlockState().setValue(BlockStateProperties.WATERLOGGED, false)); } @Override @@ -58,33 +60,33 @@ public class FluidPipeBlock extends SixWayBlock implements IWaterLoggable, IWren if (tryRemoveBracket(context)) return ActionResultType.SUCCESS; - World world = context.getWorld(); - BlockPos pos = context.getPos(); + World world = context.getLevel(); + BlockPos pos = context.getClickedPos(); Axis axis = getAxis(world, pos, state); if (axis == null) return ActionResultType.PASS; - if (context.getFace() + if (context.getClickedFace() .getAxis() == axis) return ActionResultType.PASS; - if (!world.isRemote) { + if (!world.isClientSide) { FluidTransportBehaviour.cacheFlows(world, pos); - world.setBlockState(pos, AllBlocks.GLASS_FLUID_PIPE.getDefaultState() - .with(GlassFluidPipeBlock.AXIS, axis) - .with(BlockStateProperties.WATERLOGGED, state.get(BlockStateProperties.WATERLOGGED))); + world.setBlockAndUpdate(pos, AllBlocks.GLASS_FLUID_PIPE.getDefaultState() + .setValue(GlassFluidPipeBlock.AXIS, axis) + .setValue(BlockStateProperties.WATERLOGGED, state.getValue(BlockStateProperties.WATERLOGGED))); FluidTransportBehaviour.loadFlows(world, pos); } return ActionResultType.SUCCESS; } @Override - public ActionResultType onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, + public ActionResultType use(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockRayTraceResult hit) { - if (!AllBlocks.COPPER_CASING.isIn(player.getHeldItem(hand))) + if (!AllBlocks.COPPER_CASING.isIn(player.getItemInHand(hand))) return ActionResultType.PASS; AllTriggers.triggerFor(AllTriggers.CASING_PIPE, player); - if (!world.isRemote) { + if (!world.isClientSide) { FluidTransportBehaviour.cacheFlows(world, pos); - world.setBlockState(pos, + world.setBlockAndUpdate(pos, EncasedPipeBlock.transferSixWayProperties(state, AllBlocks.ENCASED_FLUID_PIPE.getDefaultState())); FluidTransportBehaviour.loadFlows(world, pos); } @@ -92,9 +94,9 @@ public class FluidPipeBlock extends SixWayBlock implements IWaterLoggable, IWren } public BlockState getAxisState(Axis axis) { - BlockState defaultState = getDefaultState(); + BlockState defaultState = defaultBlockState(); for (Direction d : Iterate.directions) - defaultState = defaultState.with(FACING_TO_PROPERTY_MAP.get(d), d.getAxis() == axis); + defaultState = defaultState.setValue(PROPERTY_BY_DIRECTION.get(d), d.getAxis() == axis); return defaultState; } @@ -114,40 +116,40 @@ public class FluidPipeBlock extends SixWayBlock implements IWaterLoggable, IWren } @Override - public void onReplaced(BlockState state, World world, BlockPos pos, BlockState newState, boolean isMoving) { + public void onRemove(BlockState state, World world, BlockPos pos, BlockState newState, boolean isMoving) { boolean blockTypeChanged = state.getBlock() != newState.getBlock(); - if (blockTypeChanged && !world.isRemote) + if (blockTypeChanged && !world.isClientSide) FluidPropagator.propagateChangedPipe(world, pos, state); if (state != newState && !isMoving) - removeBracket(world, pos, true).ifPresent(stack -> Block.spawnAsEntity(world, pos, stack)); + removeBracket(world, pos, true).ifPresent(stack -> Block.popResource(world, pos, stack)); if (state.hasTileEntity() && (blockTypeChanged || !newState.hasTileEntity())) - world.removeTileEntity(pos); + world.removeBlockEntity(pos); } @Override - public void onBlockAdded(BlockState state, World world, BlockPos pos, BlockState oldState, boolean isMoving) { - if (world.isRemote) + public void onPlace(BlockState state, World world, BlockPos pos, BlockState oldState, boolean isMoving) { + if (world.isClientSide) return; if (state != oldState) - world.getPendingBlockTicks() + world.getBlockTicks() .scheduleTick(pos, this, 1, TickPriority.HIGH); } @Override public void neighborChanged(BlockState state, World world, BlockPos pos, Block otherBlock, BlockPos neighborPos, boolean isMoving) { - DebugPacketSender.func_218806_a(world, pos); + DebugPacketSender.sendNeighborsUpdatePacket(world, pos); Direction d = FluidPropagator.validateNeighbourChange(state, world, pos, otherBlock, neighborPos, isMoving); if (d == null) return; if (!isOpenAt(state, d)) return; - world.getPendingBlockTicks() + world.getBlockTicks() .scheduleTick(pos, this, 1, TickPriority.HIGH); } @Override - public void scheduledTick(BlockState state, ServerWorld world, BlockPos pos, Random r) { + public void tick(BlockState state, ServerWorld world, BlockPos pos, Random r) { FluidPropagator.propagateChangedPipe(world, pos, state); } @@ -158,7 +160,7 @@ public class FluidPipeBlock extends SixWayBlock implements IWaterLoggable, IWren public static boolean canConnectTo(IBlockDisplayReader world, BlockPos neighbourPos, BlockState neighbour, Direction direction) { if (FluidPropagator.hasFluidCapability(world, neighbourPos, direction.getOpposite())) return true; - if (neighbour.contains(BlockStateProperties.HONEY_LEVEL)) + if (neighbour.hasProperty(BlockStateProperties.LEVEL_HONEY)) return true; FluidTransportBehaviour transport = TileEntityBehaviour.get(world, neighbourPos, FluidTransportBehaviour.TYPE); BracketedTileEntityBehaviour bracket = TileEntityBehaviour.get(world, neighbourPos, BracketedTileEntityBehaviour.TYPE); @@ -172,7 +174,7 @@ public class FluidPipeBlock extends SixWayBlock implements IWaterLoggable, IWren public static boolean shouldDrawRim(IBlockDisplayReader world, BlockPos pos, BlockState state, Direction direction) { - BlockPos offsetPos = pos.offset(direction); + BlockPos offsetPos = pos.relative(direction); BlockState facingState = world.getBlockState(offsetPos); if (!isPipe(facingState)) return true; @@ -190,7 +192,7 @@ public class FluidPipeBlock extends SixWayBlock implements IWaterLoggable, IWren } public static boolean isOpenAt(BlockState state, Direction direction) { - return state.get(FACING_TO_PROPERTY_MAP.get(direction)); + return state.getValue(PROPERTY_BY_DIRECTION.get(direction)); } public static boolean isCornerOrEndPipe(IBlockDisplayReader world, BlockPos pos, BlockState state) { @@ -213,28 +215,28 @@ public class FluidPipeBlock extends SixWayBlock implements IWaterLoggable, IWren } @Override - protected void fillStateContainer(Builder builder) { + protected void createBlockStateDefinition(Builder builder) { builder.add(NORTH, EAST, SOUTH, WEST, UP, DOWN, BlockStateProperties.WATERLOGGED); - super.fillStateContainer(builder); + super.createBlockStateDefinition(builder); } @Override public BlockState getStateForPlacement(BlockItemUseContext context) { - FluidState FluidState = context.getWorld() - .getFluidState(context.getPos()); - return updateBlockState(getDefaultState(), context.getNearestLookingDirection(), null, context.getWorld(), - context.getPos()).with(BlockStateProperties.WATERLOGGED, - Boolean.valueOf(FluidState.getFluid() == Fluids.WATER)); + FluidState FluidState = context.getLevel() + .getFluidState(context.getClickedPos()); + return updateBlockState(defaultBlockState(), context.getNearestLookingDirection(), null, context.getLevel(), + context.getClickedPos()).setValue(BlockStateProperties.WATERLOGGED, + Boolean.valueOf(FluidState.getType() == Fluids.WATER)); } @Override - public BlockState updatePostPlacement(BlockState state, Direction direction, BlockState neighbourState, + public BlockState updateShape(BlockState state, Direction direction, BlockState neighbourState, IWorld world, BlockPos pos, BlockPos neighbourPos) { - if (state.get(BlockStateProperties.WATERLOGGED)) - world.getPendingFluidTicks() - .scheduleTick(pos, Fluids.WATER, Fluids.WATER.getTickRate(world)); - if (isOpenAt(state, direction) && neighbourState.contains(BlockStateProperties.WATERLOGGED)) - world.getPendingBlockTicks() + if (state.getValue(BlockStateProperties.WATERLOGGED)) + world.getLiquidTicks() + .scheduleTick(pos, Fluids.WATER, Fluids.WATER.getTickDelay(world)); + if (isOpenAt(state, direction) && neighbourState.hasProperty(BlockStateProperties.WATERLOGGED)) + world.getBlockTicks() .scheduleTick(pos, this, 1, TickPriority.HIGH); return updateBlockState(state, direction, direction.getOpposite(), world, pos); } @@ -248,15 +250,15 @@ public class FluidPipeBlock extends SixWayBlock implements IWaterLoggable, IWren BlockState prevState = state; int prevStateSides = (int) Arrays.stream(Iterate.directions) - .map(FACING_TO_PROPERTY_MAP::get) - .filter(prevState::get) + .map(PROPERTY_BY_DIRECTION::get) + .filter(prevState::getValue) .count(); // Update sides that are not ignored for (Direction d : Iterate.directions) if (d != ignore) { - boolean shouldConnect = canConnectTo(world, pos.offset(d), world.getBlockState(pos.offset(d)), d); - state = state.with(FACING_TO_PROPERTY_MAP.get(d), shouldConnect); + boolean shouldConnect = canConnectTo(world, pos.relative(d), world.getBlockState(pos.relative(d)), d); + state = state.setValue(PROPERTY_BY_DIRECTION.get(d), shouldConnect); } // See if it has enough connections @@ -271,21 +273,21 @@ public class FluidPipeBlock extends SixWayBlock implements IWaterLoggable, IWren // Add opposite end if only one connection if (connectedDirection != null) - return state.with(FACING_TO_PROPERTY_MAP.get(connectedDirection.getOpposite()), true); + return state.setValue(PROPERTY_BY_DIRECTION.get(connectedDirection.getOpposite()), true); // If we can't connect to anything and weren't connected before, do nothing if (prevStateSides == 2) return prevState; // Use preferred - return state.with(FACING_TO_PROPERTY_MAP.get(preferredDirection), true) - .with(FACING_TO_PROPERTY_MAP.get(preferredDirection.getOpposite()), true); + return state.setValue(PROPERTY_BY_DIRECTION.get(preferredDirection), true) + .setValue(PROPERTY_BY_DIRECTION.get(preferredDirection.getOpposite()), true); } @Override public FluidState getFluidState(BlockState state) { - return state.get(BlockStateProperties.WATERLOGGED) ? Fluids.WATER.getStillFluidState(false) - : Fluids.EMPTY.getDefaultState(); + return state.getValue(BlockStateProperties.WATERLOGGED) ? Fluids.WATER.getSource(false) + : Fluids.EMPTY.defaultFluidState(); } @Override @@ -296,13 +298,13 @@ public class FluidPipeBlock extends SixWayBlock implements IWaterLoggable, IWren return Optional.empty(); BlockState bracket = behaviour.getBracket(); behaviour.removeBracket(inOnReplacedContext); - if (bracket == Blocks.AIR.getDefaultState()) + if (bracket == Blocks.AIR.defaultBlockState()) return Optional.empty(); return Optional.of(new ItemStack(bracket.getBlock())); } @Override - public boolean allowsMovement(BlockState state, IBlockReader reader, BlockPos pos, PathType type) { + public boolean isPathfindable(BlockState state, IBlockReader reader, BlockPos pos, PathType type) { return false; } diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/FluidPipeTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/FluidPipeTileEntity.java index dbcbb66f1..bc630c4aa 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/FluidPipeTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/FluidPipeTileEntity.java @@ -15,6 +15,8 @@ import net.minecraft.util.Direction; import net.minecraft.util.math.BlockPos; import net.minecraft.world.IBlockDisplayReader; +import com.simibubi.create.content.contraptions.fluids.FluidTransportBehaviour.AttachmentTypes; + public class FluidPipeTileEntity extends SmartTileEntity { public FluidPipeTileEntity(TileEntityType tileEntityTypeIn) { @@ -41,7 +43,7 @@ public class FluidPipeTileEntity extends SmartTileEntity { @Override public boolean canHaveFlowToward(BlockState state, Direction direction) { return (FluidPipeBlock.isPipe(state) || state.getBlock() instanceof EncasedPipeBlock) - && state.get(FluidPipeBlock.FACING_TO_PROPERTY_MAP.get(direction)); + && state.getValue(FluidPipeBlock.PROPERTY_BY_DIRECTION.get(direction)); } @Override @@ -52,7 +54,7 @@ public class FluidPipeTileEntity extends SmartTileEntity { if (attachment == AttachmentTypes.RIM && AllBlocks.ENCASED_FLUID_PIPE.has(state)) return AttachmentTypes.RIM; - BlockPos offsetPos = pos.offset(direction); + BlockPos offsetPos = pos.relative(direction); if (!FluidPipeBlock.isPipe(world.getBlockState(offsetPos))) { FluidTransportBehaviour pipeBehaviour = TileEntityBehaviour.get(world, offsetPos, FluidTransportBehaviour.TYPE); diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/FluidValveBlock.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/FluidValveBlock.java index 051093f80..16faae839 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/FluidValveBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/FluidValveBlock.java @@ -28,13 +28,15 @@ import net.minecraft.world.TickPriority; import net.minecraft.world.World; import net.minecraft.world.server.ServerWorld; +import net.minecraft.block.AbstractBlock.Properties; + public class FluidValveBlock extends DirectionalAxisKineticBlock implements IAxisPipe { public static final BooleanProperty ENABLED = BooleanProperty.create("enabled"); public FluidValveBlock(Properties properties) { super(properties); - setDefaultState(getDefaultState().with(ENABLED, false)); + registerDefaultState(defaultBlockState().setValue(ENABLED, false)); } @Override @@ -44,14 +46,14 @@ public class FluidValveBlock extends DirectionalAxisKineticBlock implements IAxi } @Override - protected void fillStateContainer(Builder builder) { - super.fillStateContainer(builder.add(ENABLED)); + protected void createBlockStateDefinition(Builder builder) { + super.createBlockStateDefinition(builder.add(ENABLED)); } @Override protected boolean prefersConnectionTo(IWorldReader reader, BlockPos pos, Direction facing, boolean shaftAxis) { if (!shaftAxis) { - BlockPos offset = pos.offset(facing); + BlockPos offset = pos.relative(facing); BlockState blockState = reader.getBlockState(offset); return FluidPipeBlock.canConnectTo(reader, offset, blockState, facing); } @@ -67,8 +69,8 @@ public class FluidValveBlock extends DirectionalAxisKineticBlock implements IAxi public static Axis getPipeAxis(BlockState state) { if (!(state.getBlock() instanceof FluidValveBlock)) throw new IllegalStateException("Provided BlockState is for a different block."); - Direction facing = state.get(FACING); - boolean alongFirst = !state.get(AXIS_ALONG_FIRST_COORDINATE); + Direction facing = state.getValue(FACING); + boolean alongFirst = !state.getValue(AXIS_ALONG_FIRST_COORDINATE); for (Axis axis : Iterate.axes) { if (axis == facing.getAxis()) continue; @@ -87,38 +89,38 @@ public class FluidValveBlock extends DirectionalAxisKineticBlock implements IAxi } @Override - public void onReplaced(BlockState state, World world, BlockPos pos, BlockState newState, boolean isMoving) { + public void onRemove(BlockState state, World world, BlockPos pos, BlockState newState, boolean isMoving) { boolean blockTypeChanged = state.getBlock() != newState.getBlock(); - if (blockTypeChanged && !world.isRemote) + if (blockTypeChanged && !world.isClientSide) FluidPropagator.propagateChangedPipe(world, pos, state); if (state.hasTileEntity() && (blockTypeChanged || !newState.hasTileEntity())) - world.removeTileEntity(pos); + world.removeBlockEntity(pos); } @Override - public boolean isValidPosition(BlockState p_196260_1_, IWorldReader p_196260_2_, BlockPos p_196260_3_) { + public boolean canSurvive(BlockState p_196260_1_, IWorldReader p_196260_2_, BlockPos p_196260_3_) { return true; } @Override - public void onBlockAdded(BlockState state, World world, BlockPos pos, BlockState oldState, boolean isMoving) { - if (world.isRemote) + public void onPlace(BlockState state, World world, BlockPos pos, BlockState oldState, boolean isMoving) { + if (world.isClientSide) return; if (state != oldState) - world.getPendingBlockTicks() + world.getBlockTicks() .scheduleTick(pos, this, 1, TickPriority.HIGH); } @Override public void neighborChanged(BlockState state, World world, BlockPos pos, Block otherBlock, BlockPos neighborPos, boolean isMoving) { - DebugPacketSender.func_218806_a(world, pos); + DebugPacketSender.sendNeighborsUpdatePacket(world, pos); Direction d = FluidPropagator.validateNeighbourChange(state, world, pos, otherBlock, neighborPos, isMoving); if (d == null) return; if (!isOpenAt(state, d)) return; - world.getPendingBlockTicks() + world.getBlockTicks() .scheduleTick(pos, this, 1, TickPriority.HIGH); } @@ -127,12 +129,12 @@ public class FluidValveBlock extends DirectionalAxisKineticBlock implements IAxi } @Override - public void scheduledTick(BlockState state, ServerWorld world, BlockPos pos, Random r) { + public void tick(BlockState state, ServerWorld world, BlockPos pos, Random r) { FluidPropagator.propagateChangedPipe(world, pos, state); } @Override - public boolean allowsMovement(BlockState state, IBlockReader reader, BlockPos pos, PathType type) { + public boolean isPathfindable(BlockState state, IBlockReader reader, BlockPos pos, PathType type) { return false; } 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 33632b40b..a355a98e4 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 @@ -26,7 +26,7 @@ public class FluidValveInstance extends ShaftInstance implements IDynamicInstanc public FluidValveInstance(MaterialManager dispatcher, KineticTileEntity tile) { super(dispatcher, tile); - Direction facing = blockState.get(FluidValveBlock.FACING); + Direction facing = blockState.getValue(FluidValveBlock.FACING); yRot = AngleHelper.horizontalAngle(facing); xRot = facing == Direction.UP ? 0 : facing == Direction.DOWN ? 180 : 90; diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/FluidValveRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/FluidValveRenderer.java index f2f6306cd..4118f52a1 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/FluidValveRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/FluidValveRenderer.java @@ -28,12 +28,12 @@ public class FluidValveRenderer extends KineticTileEntityRenderer { protected void renderSafe(KineticTileEntity te, float partialTicks, MatrixStack ms, IRenderTypeBuffer buffer, int light, int overlay) { - if (Backend.getInstance().canUseInstancing(te.getWorld())) return; + if (Backend.getInstance().canUseInstancing(te.getLevel())) return; super.renderSafe(te, partialTicks, ms, buffer, light, overlay); BlockState blockState = te.getBlockState(); SuperByteBuffer pointer = PartialBufferer.get(AllBlockPartials.FLUID_VALVE_POINTER, blockState); - Direction facing = blockState.get(FluidValveBlock.FACING); + Direction facing = blockState.getValue(FluidValveBlock.FACING); if (!(te instanceof FluidValveTileEntity)) return; @@ -54,7 +54,7 @@ public class FluidValveRenderer extends KineticTileEntityRenderer { .unCentre(); pointer.light(light) - .renderInto(ms, buffer.getBuffer(RenderType.getSolid())); + .renderInto(ms, buffer.getBuffer(RenderType.solid())); } @Override diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/FluidValveTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/FluidValveTileEntity.java index 8125ea16f..524a02405 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/FluidValveTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/FluidValveTileEntity.java @@ -40,20 +40,20 @@ public class FluidValveTileEntity extends KineticTileEntity { super.tick(); pointer.tickChaser(); - if (world.isRemote) + if (level.isClientSide) return; BlockState blockState = getBlockState(); if (!(blockState.getBlock() instanceof FluidValveBlock)) return; - boolean stateOpen = blockState.get(FluidValveBlock.ENABLED); + boolean stateOpen = blockState.getValue(FluidValveBlock.ENABLED); if (stateOpen && pointer.getValue() == 0) { - switchToBlockState(world, pos, blockState.with(FluidValveBlock.ENABLED, false)); + switchToBlockState(level, worldPosition, blockState.setValue(FluidValveBlock.ENABLED, false)); return; } if (!stateOpen && pointer.getValue() == 1) { - switchToBlockState(world, pos, blockState.with(FluidValveBlock.ENABLED, true)); + switchToBlockState(level, worldPosition, blockState.setValue(FluidValveBlock.ENABLED, true)); return; } } @@ -97,7 +97,7 @@ public class FluidValveTileEntity extends KineticTileEntity { @Override public boolean canPullFluidFrom(FluidStack fluid, BlockState state, Direction direction) { - if (state.contains(FluidValveBlock.ENABLED) && state.get(FluidValveBlock.ENABLED)) + if (state.hasProperty(FluidValveBlock.ENABLED) && state.getValue(FluidValveBlock.ENABLED)) return super.canPullFluidFrom(fluid, state, direction); return false; } diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/GlassFluidPipeBlock.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/GlassFluidPipeBlock.java index d85e25e8f..7680aa163 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/GlassFluidPipeBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/GlassFluidPipeBlock.java @@ -27,6 +27,8 @@ import net.minecraft.world.IBlockReader; import net.minecraft.world.World; +import net.minecraft.block.AbstractBlock.Properties; + @MethodsReturnNonnullByDefault @ParametersAreNonnullByDefault public class GlassFluidPipeBlock extends AxisPipeBlock implements IWaterLoggable, ISpecialBlockItemRequirement { @@ -35,12 +37,12 @@ public class GlassFluidPipeBlock extends AxisPipeBlock implements IWaterLoggable public GlassFluidPipeBlock(Properties p_i48339_1_) { super(p_i48339_1_); - setDefaultState(getDefaultState().with(ALT, false).with(BlockStateProperties.WATERLOGGED, false)); + registerDefaultState(defaultBlockState().setValue(ALT, false).setValue(BlockStateProperties.WATERLOGGED, false)); } @Override - protected void fillStateContainer(Builder p_206840_1_) { - super.fillStateContainer(p_206840_1_.add(ALT, BlockStateProperties.WATERLOGGED)); + protected void createBlockStateDefinition(Builder p_206840_1_) { + super.createBlockStateDefinition(p_206840_1_.add(ALT, BlockStateProperties.WATERLOGGED)); } @Override @@ -58,28 +60,28 @@ public class GlassFluidPipeBlock extends AxisPipeBlock implements IWaterLoggable if (tryRemoveBracket(context)) return ActionResultType.SUCCESS; BlockState newState; - World world = context.getWorld(); - BlockPos pos = context.getPos(); + World world = context.getLevel(); + BlockPos pos = context.getClickedPos(); FluidTransportBehaviour.cacheFlows(world, pos); - newState = toRegularPipe(world, pos, state).with(BlockStateProperties.WATERLOGGED, state.get(BlockStateProperties.WATERLOGGED)); - world.setBlockState(pos, newState, 3); + newState = toRegularPipe(world, pos, state).setValue(BlockStateProperties.WATERLOGGED, state.getValue(BlockStateProperties.WATERLOGGED)); + world.setBlock(pos, newState, 3); FluidTransportBehaviour.loadFlows(world, pos); return ActionResultType.SUCCESS; } @Override public BlockState getStateForPlacement(BlockItemUseContext context) { - FluidState ifluidstate = context.getWorld() - .getFluidState(context.getPos()); + FluidState ifluidstate = context.getLevel() + .getFluidState(context.getClickedPos()); BlockState state = super.getStateForPlacement(context); - return state == null ? null : state.with(BlockStateProperties.WATERLOGGED, - ifluidstate.getFluid() == Fluids.WATER); + return state == null ? null : state.setValue(BlockStateProperties.WATERLOGGED, + ifluidstate.getType() == Fluids.WATER); } @Override public FluidState getFluidState(BlockState state) { - return state.get(BlockStateProperties.WATERLOGGED) ? Fluids.WATER.getStillFluidState(false) - : Fluids.EMPTY.getDefaultState(); + return state.getValue(BlockStateProperties.WATERLOGGED) ? Fluids.WATER.getSource(false) + : Fluids.EMPTY.defaultFluidState(); } @Override @@ -88,7 +90,7 @@ public class GlassFluidPipeBlock extends AxisPipeBlock implements IWaterLoggable } @Override - public boolean allowsMovement(BlockState state, IBlockReader reader, BlockPos pos, PathType type) { + public boolean isPathfindable(BlockState state, IBlockReader reader, BlockPos pos, PathType type) { return false; } diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/SmartFluidPipeBlock.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/SmartFluidPipeBlock.java index 2fcd7aa9a..17058c21b 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/SmartFluidPipeBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/SmartFluidPipeBlock.java @@ -28,6 +28,8 @@ import net.minecraft.world.TickPriority; import net.minecraft.world.World; import net.minecraft.world.server.ServerWorld; +import net.minecraft.block.AbstractBlock.Properties; + public class SmartFluidPipeBlock extends HorizontalFaceBlock implements IAxisPipe { public SmartFluidPipeBlock(Properties p_i48339_1_) { @@ -35,17 +37,17 @@ public class SmartFluidPipeBlock extends HorizontalFaceBlock implements IAxisPip } @Override - protected void fillStateContainer(Builder builder) { + protected void createBlockStateDefinition(Builder builder) { builder.add(FACE) - .add(HORIZONTAL_FACING); + .add(FACING); } @Override public BlockState getStateForPlacement(BlockItemUseContext ctx) { BlockState stateForPlacement = super.getStateForPlacement(ctx); Axis prefferedAxis = null; - BlockPos pos = ctx.getPos(); - World world = ctx.getWorld(); + BlockPos pos = ctx.getClickedPos(); + World world = ctx.getLevel(); for (Direction side : Iterate.directions) { if (!prefersConnectionTo(world, pos, side)) continue; @@ -57,16 +59,16 @@ public class SmartFluidPipeBlock extends HorizontalFaceBlock implements IAxisPip } if (prefferedAxis == Axis.Y) - stateForPlacement = stateForPlacement.with(FACE, AttachFace.WALL) - .with(HORIZONTAL_FACING, stateForPlacement.get(HORIZONTAL_FACING) + stateForPlacement = stateForPlacement.setValue(FACE, AttachFace.WALL) + .setValue(FACING, stateForPlacement.getValue(FACING) .getOpposite()); else if (prefferedAxis != null) { - if (stateForPlacement.get(FACE) == AttachFace.WALL) - stateForPlacement = stateForPlacement.with(FACE, AttachFace.FLOOR); + if (stateForPlacement.getValue(FACE) == AttachFace.WALL) + stateForPlacement = stateForPlacement.setValue(FACE, AttachFace.FLOOR); for (Direction direction : ctx.getNearestLookingDirections()) { if (direction.getAxis() != prefferedAxis) continue; - stateForPlacement = stateForPlacement.with(HORIZONTAL_FACING, direction.getOpposite()); + stateForPlacement = stateForPlacement.setValue(FACING, direction.getOpposite()); } } @@ -74,44 +76,44 @@ public class SmartFluidPipeBlock extends HorizontalFaceBlock implements IAxisPip } protected boolean prefersConnectionTo(IWorldReader reader, BlockPos pos, Direction facing) { - BlockPos offset = pos.offset(facing); + BlockPos offset = pos.relative(facing); BlockState blockState = reader.getBlockState(offset); return FluidPipeBlock.canConnectTo(reader, offset, blockState, facing); } @Override - public void onReplaced(BlockState state, World world, BlockPos pos, BlockState newState, boolean isMoving) { + public void onRemove(BlockState state, World world, BlockPos pos, BlockState newState, boolean isMoving) { boolean blockTypeChanged = state.getBlock() != newState.getBlock(); - if (blockTypeChanged && !world.isRemote) + if (blockTypeChanged && !world.isClientSide) FluidPropagator.propagateChangedPipe(world, pos, state); if (state.hasTileEntity() && (blockTypeChanged || !newState.hasTileEntity())) - world.removeTileEntity(pos); + world.removeBlockEntity(pos); } @Override - public boolean isValidPosition(BlockState p_196260_1_, IWorldReader p_196260_2_, BlockPos p_196260_3_) { + public boolean canSurvive(BlockState p_196260_1_, IWorldReader p_196260_2_, BlockPos p_196260_3_) { return true; } @Override - public void onBlockAdded(BlockState state, World world, BlockPos pos, BlockState oldState, boolean isMoving) { - if (world.isRemote) + public void onPlace(BlockState state, World world, BlockPos pos, BlockState oldState, boolean isMoving) { + if (world.isClientSide) return; if (state != oldState) - world.getPendingBlockTicks() + world.getBlockTicks() .scheduleTick(pos, this, 1, TickPriority.HIGH); } @Override public void neighborChanged(BlockState state, World world, BlockPos pos, Block otherBlock, BlockPos neighborPos, boolean isMoving) { - DebugPacketSender.func_218806_a(world, pos); + DebugPacketSender.sendNeighborsUpdatePacket(world, pos); Direction d = FluidPropagator.validateNeighbourChange(state, world, pos, otherBlock, neighborPos, isMoving); if (d == null) return; if (!isOpenAt(state, d)) return; - world.getPendingBlockTicks() + world.getBlockTicks() .scheduleTick(pos, this, 1, TickPriority.HIGH); } @@ -120,13 +122,13 @@ public class SmartFluidPipeBlock extends HorizontalFaceBlock implements IAxisPip } @Override - public void scheduledTick(BlockState state, ServerWorld world, BlockPos pos, Random r) { + public void tick(BlockState state, ServerWorld world, BlockPos pos, Random r) { FluidPropagator.propagateChangedPipe(world, pos, state); } protected static Axis getPipeAxis(BlockState state) { - return state.get(FACE) == AttachFace.WALL ? Axis.Y - : state.get(HORIZONTAL_FACING) + return state.getValue(FACE) == AttachFace.WALL ? Axis.Y + : state.getValue(FACING) .getAxis(); } @@ -143,10 +145,10 @@ public class SmartFluidPipeBlock extends HorizontalFaceBlock implements IAxisPip @Override public VoxelShape getShape(BlockState state, IBlockReader p_220053_2_, BlockPos p_220053_3_, ISelectionContext p_220053_4_) { - AttachFace face = state.get(FACE); + AttachFace face = state.getValue(FACE); VoxelShaper shape = face == AttachFace.FLOOR ? AllShapes.SMART_FLUID_PIPE_FLOOR : face == AttachFace.CEILING ? AllShapes.SMART_FLUID_PIPE_CEILING : AllShapes.SMART_FLUID_PIPE_WALL; - return shape.get(state.get(HORIZONTAL_FACING)); + return shape.get(state.getValue(FACING)); } @Override @@ -155,7 +157,7 @@ public class SmartFluidPipeBlock extends HorizontalFaceBlock implements IAxisPip } @Override - public boolean allowsMovement(BlockState state, IBlockReader reader, BlockPos pos, PathType type) { + public boolean isPathfindable(BlockState state, IBlockReader reader, BlockPos pos, PathType type) { return false; } diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/SmartFluidPipeGenerator.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/SmartFluidPipeGenerator.java index 0b2467ab0..aff0ac8f5 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/SmartFluidPipeGenerator.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/SmartFluidPipeGenerator.java @@ -14,14 +14,14 @@ public class SmartFluidPipeGenerator extends SpecialBlockStateGen { @Override protected int getXRotation(BlockState state) { - AttachFace attachFace = state.get(SmartFluidPipeBlock.FACE); + AttachFace attachFace = state.getValue(SmartFluidPipeBlock.FACE); return attachFace == AttachFace.CEILING ? 180 : attachFace == AttachFace.FLOOR ? 0 : 270; } @Override protected int getYRotation(BlockState state) { - AttachFace attachFace = state.get(SmartFluidPipeBlock.FACE); - int angle = horizontalAngle(state.get(SmartFluidPipeBlock.HORIZONTAL_FACING)); + AttachFace attachFace = state.getValue(SmartFluidPipeBlock.FACE); + int angle = horizontalAngle(state.getValue(SmartFluidPipeBlock.FACING)); return angle + (attachFace == AttachFace.CEILING ? 180 : 0); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/SmartFluidPipeTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/SmartFluidPipeTileEntity.java index 8b9544464..72c4367a9 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/SmartFluidPipeTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/SmartFluidPipeTileEntity.java @@ -38,9 +38,9 @@ public class SmartFluidPipeTileEntity extends SmartTileEntity { } private void onFilterChanged(ItemStack newFilter) { - if (world.isRemote) + if (level.isClientSide) return; - FluidPropagator.propagateChangedPipe(world, pos, getBlockState()); + FluidPropagator.propagateChangedPipe(level, worldPosition, getBlockState()); } class SmartPipeBehaviour extends StraightPipeFluidTransportBehaviour { @@ -68,7 +68,7 @@ public class SmartFluidPipeTileEntity extends SmartTileEntity { @Override protected Vector3d getLocalOffset(BlockState state) { - AttachFace face = state.get(SmartFluidPipeBlock.FACE); + AttachFace face = state.getValue(SmartFluidPipeBlock.FACE); float y = face == AttachFace.CEILING ? 0.3f : face == AttachFace.WALL ? 11.3f : 15.3f; float z = face == AttachFace.CEILING ? 4.6f : face == AttachFace.WALL ? 0.6f : 4.6f; return VecHelper.rotateCentered(VecHelper.voxelSpace(8, y, z), angleY(state), Axis.Y); @@ -76,15 +76,15 @@ public class SmartFluidPipeTileEntity extends SmartTileEntity { @Override protected void rotate(BlockState state, MatrixStack ms) { - AttachFace face = state.get(SmartFluidPipeBlock.FACE); + AttachFace face = state.getValue(SmartFluidPipeBlock.FACE); MatrixStacker.of(ms) .rotateY(angleY(state)) .rotateX(face == AttachFace.CEILING ? -45 : 45); } protected float angleY(BlockState state) { - AttachFace face = state.get(SmartFluidPipeBlock.FACE); - float horizontalAngle = AngleHelper.horizontalAngle(state.get(SmartFluidPipeBlock.HORIZONTAL_FACING)); + AttachFace face = state.getValue(SmartFluidPipeBlock.FACE); + float horizontalAngle = AngleHelper.horizontalAngle(state.getValue(SmartFluidPipeBlock.FACING)); if (face == AttachFace.WALL) horizontalAngle += 180; return horizontalAngle; diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/StraightPipeTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/StraightPipeTileEntity.java index 6b886ede3..56c9ba2b0 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/StraightPipeTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/StraightPipeTileEntity.java @@ -15,6 +15,8 @@ import net.minecraft.util.Direction.AxisDirection; import net.minecraft.util.math.BlockPos; import net.minecraft.world.IBlockDisplayReader; +import com.simibubi.create.content.contraptions.fluids.FluidTransportBehaviour.AttachmentTypes; + public class StraightPipeTileEntity extends SmartTileEntity { public StraightPipeTileEntity(TileEntityType tileEntityTypeIn) { @@ -35,14 +37,14 @@ public class StraightPipeTileEntity extends SmartTileEntity { @Override public boolean canHaveFlowToward(BlockState state, Direction direction) { - return state.contains(AxisPipeBlock.AXIS) && state.get(AxisPipeBlock.AXIS) == direction.getAxis(); + return state.hasProperty(AxisPipeBlock.AXIS) && state.getValue(AxisPipeBlock.AXIS) == direction.getAxis(); } @Override public AttachmentTypes getRenderedRimAttachment(IBlockDisplayReader world, BlockPos pos, BlockState state, Direction direction) { AttachmentTypes attachment = super.getRenderedRimAttachment(world, pos, state, direction); - BlockState otherState = world.getBlockState(pos.offset(direction)); + BlockState otherState = world.getBlockState(pos.relative(direction)); Axis axis = IAxisPipe.getAxisOf(state); Axis otherAxis = IAxisPipe.getAxisOf(otherState); diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/TransparentStraightPipeRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/TransparentStraightPipeRenderer.java index 5fc575317..2b65b410d 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/TransparentStraightPipeRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/TransparentStraightPipeRenderer.java @@ -47,8 +47,8 @@ public class TransparentStraightPipeRenderer extends SafeTileEntityRenderer customEffects) { FluidStack fluidStack = new FluidStack(AllFluids.POTION.get() - .getStillFluid(), amount); + .getSource(), amount); addPotionToFluidStack(fluidStack, potion); appendEffects(fluidStack, customEffects); return fluidStack; @@ -47,7 +50,7 @@ public class PotionFluid extends VirtualFluid { @Override public int getColor(FluidStack stack) { CompoundNBT tag = stack.getOrCreateTag(); - int color = PotionUtils.getPotionColorFromEffectList(PotionUtils.getEffectsFromTag(tag)) | 0xff000000; + int color = PotionUtils.getColor(PotionUtils.getAllEffects(tag)) | 0xff000000; return color; } @@ -56,9 +59,9 @@ public class PotionFluid extends VirtualFluid { CompoundNBT tag = stack.getOrCreateTag(); IItemProvider itemFromBottleType = PotionFluidHandler.itemFromBottleType(NBTHelper.readEnum(tag, "Bottle", BottleType.class)); - return PotionUtils.getPotionTypeFromNBT(tag) - .getNamePrefixed(itemFromBottleType.asItem() - .getTranslationKey() + ".effect."); + return PotionUtils.getPotion(tag) + .getName(itemFromBottleType.asItem() + .getDescriptionId() + ".effect."); } } @@ -80,7 +83,7 @@ public class PotionFluid extends VirtualFluid { CompoundNBT compoundnbt = fs.getOrCreateTag(); ListNBT listnbt = compoundnbt.getList("CustomPotionEffects", 9); for (EffectInstance effectinstance : customEffects) - listnbt.add(effectinstance.write(new CompoundNBT())); + listnbt.add(effectinstance.save(new CompoundNBT())); compoundnbt.put("CustomPotionEffects", listnbt); return fs; } diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/potion/PotionFluidHandler.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/potion/PotionFluidHandler.java index f577c249c..e53d83064 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/potion/PotionFluidHandler.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/potion/PotionFluidHandler.java @@ -45,12 +45,12 @@ public class PotionFluidHandler { public static FluidIngredient potionIngredient(Potion potion, int amount) { return FluidIngredient.fromFluidStack(FluidHelper.copyStackWithAmount(PotionFluidHandler - .getFluidFromPotionItem(PotionUtils.addPotionToItemStack(new ItemStack(Items.POTION), potion)), amount)); + .getFluidFromPotionItem(PotionUtils.setPotion(new ItemStack(Items.POTION), potion)), amount)); } public static FluidStack getFluidFromPotionItem(ItemStack stack) { - Potion potion = PotionUtils.getPotionFromItem(stack); - List list = PotionUtils.getFullEffectsFromItem(stack); + Potion potion = PotionUtils.getPotion(stack); + List list = PotionUtils.getCustomEffects(stack); FluidStack fluid = PotionFluid.withEffects(250, potion, list); BottleType bottleTypeFromItem = bottleTypeFromItem(stack); if (potion == Potions.WATER && list.isEmpty() && bottleTypeFromItem == BottleType.REGULAR) @@ -87,31 +87,31 @@ public class PotionFluidHandler { public static ItemStack fillBottle(ItemStack stack, FluidStack availableFluid) { CompoundNBT tag = availableFluid.getOrCreateTag(); ItemStack potionStack = new ItemStack(itemFromBottleType(NBTHelper.readEnum(tag, "Bottle", BottleType.class))); - PotionUtils.addPotionToItemStack(potionStack, PotionUtils.getPotionTypeFromNBT(tag)); - PotionUtils.appendEffects(potionStack, PotionUtils.getFullEffectsFromTag(tag)); + PotionUtils.setPotion(potionStack, PotionUtils.getPotion(tag)); + PotionUtils.setCustomEffects(potionStack, PotionUtils.getCustomEffects(tag)); return potionStack; } // Modified version of PotionUtils#addPotionTooltip @OnlyIn(Dist.CLIENT) public static void addPotionTooltip(FluidStack fs, List tooltip, float p_185182_2_) { - List list = PotionUtils.getEffectsFromTag(fs.getOrCreateTag()); + List list = PotionUtils.getAllEffects(fs.getOrCreateTag()); List> list1 = Lists.newArrayList(); if (list.isEmpty()) { - tooltip.add((new TranslationTextComponent("effect.none")).formatted(TextFormatting.GRAY)); + tooltip.add((new TranslationTextComponent("effect.none")).withStyle(TextFormatting.GRAY)); } else { for (EffectInstance effectinstance : list) { - TranslationTextComponent textcomponent = new TranslationTextComponent(effectinstance.getEffectName()); - Effect effect = effectinstance.getPotion(); - Map map = effect.getAttributeModifierMap(); + TranslationTextComponent textcomponent = new TranslationTextComponent(effectinstance.getDescriptionId()); + Effect effect = effectinstance.getEffect(); + Map map = effect.getAttributeModifiers(); if (!map.isEmpty()) { for (Entry entry : map.entrySet()) { AttributeModifier attributemodifier = entry.getValue(); AttributeModifier attributemodifier1 = new AttributeModifier(attributemodifier.getName(), - effect.getAttributeModifierAmount(effectinstance.getAmplifier(), attributemodifier), + effect.getAttributeModifierValue(effectinstance.getAmplifier(), attributemodifier), attributemodifier.getOperation()); list1.add(new Tuple<>( - entry.getKey().getTranslationKey(), + entry.getKey().getDescriptionId(), attributemodifier1)); } } @@ -123,18 +123,18 @@ public class PotionFluidHandler { if (effectinstance.getDuration() > 20) { textcomponent.append(" (") - .append(EffectUtils.getPotionDurationString(effectinstance, p_185182_2_)) + .append(EffectUtils.formatDuration(effectinstance, p_185182_2_)) .append(")"); } - tooltip.add(textcomponent.formatted(effect.getEffectType() - .getColor())); + tooltip.add(textcomponent.withStyle(effect.getCategory() + .getTooltipFormatting())); } } if (!list1.isEmpty()) { tooltip.add(new StringTextComponent("")); - tooltip.add((new TranslationTextComponent("potion.whenDrank")).formatted(TextFormatting.DARK_PURPLE)); + tooltip.add((new TranslationTextComponent("potion.whenDrank")).withStyle(TextFormatting.DARK_PURPLE)); for (Tuple tuple : list1) { AttributeModifier attributemodifier2 = tuple.getB(); @@ -150,18 +150,18 @@ public class PotionFluidHandler { if (d0 > 0.0D) { tooltip.add((new TranslationTextComponent( "attribute.modifier.plus." + attributemodifier2.getOperation() - .getId(), - ItemStack.DECIMALFORMAT.format(d1), + .toValue(), + ItemStack.ATTRIBUTE_MODIFIER_FORMAT.format(d1), new TranslationTextComponent(tuple.getA()))) - .formatted(TextFormatting.BLUE)); + .withStyle(TextFormatting.BLUE)); } else if (d0 < 0.0D) { d1 = d1 * -1.0D; tooltip.add((new TranslationTextComponent( "attribute.modifier.take." + attributemodifier2.getOperation() - .getId(), - ItemStack.DECIMALFORMAT.format(d1), + .toValue(), + ItemStack.ATTRIBUTE_MODIFIER_FORMAT.format(d1), new TranslationTextComponent(tuple.getA()))) - .formatted(TextFormatting.RED)); + .withStyle(TextFormatting.RED)); } } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/recipe/PotionMixingRecipeManager.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/recipe/PotionMixingRecipeManager.java index 1219f058a..52e356dd0 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/recipe/PotionMixingRecipeManager.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/recipe/PotionMixingRecipeManager.java @@ -43,8 +43,8 @@ public class PotionMixingRecipeManager { continue; List bottles = new ArrayList<>(); - PotionBrewing.POTION_ITEMS.forEach(i -> { - for (ItemStack itemStack : i.getMatchingStacks()) + PotionBrewing.ALLOWED_CONTAINERS.forEach(i -> { + for (ItemStack itemStack : i.getItems()) bottles.add(itemStack); }); @@ -55,7 +55,7 @@ public class PotionMixingRecipeManager { if (potion == Potions.EMPTY) continue; for (ItemStack stack : bottles) - basicPotions.add(PotionUtils.addPotionToItemStack(stack.copy(), potion)); + basicPotions.add(PotionUtils.setPotion(stack.copy(), potion)); } Set uniqueKeys = new HashSet<>(); @@ -69,7 +69,7 @@ public class PotionMixingRecipeManager { newPotions.clear(); for (ItemStack inputPotionStack : potionFrontier) { - Potion inputPotion = PotionUtils.getPotionFromItem(inputPotionStack); + Potion inputPotion = PotionUtils.getPotion(inputPotionStack); for (ItemStack potionReagent : reagents) { ItemStack outputPotionStack = iBrewingRecipe.getOutput(inputPotionStack.copy(), potionReagent); @@ -89,7 +89,7 @@ public class PotionMixingRecipeManager { continue; if (inputPotionStack.getItem() == outputPotionStack.getItem()) { - Potion outputPotion = PotionUtils.getPotionFromItem(outputPotionStack); + Potion outputPotion = PotionUtils.getPotion(outputPotionStack); if (outputPotion == Potions.WATER) continue; } @@ -100,7 +100,7 @@ public class PotionMixingRecipeManager { fluidFromPotionItem2.setAmount(1000); MixingRecipe mixingRecipe = new ProcessingRecipeBuilder<>(MixingRecipe::new, - Create.asResource("potion_" + recipeIndex++)).require(Ingredient.fromStacks(potionReagent)) + Create.asResource("potion_" + recipeIndex++)).require(Ingredient.of(potionReagent)) .require(FluidIngredient.fromFluidStack(fluidFromPotionItem)) .output(fluidFromPotionItem2) .requiresHeat(HeatCondition.HEATED) @@ -135,7 +135,7 @@ public class PotionMixingRecipeManager { ALL.clear(); getAllBrewingRecipes().forEach(recipe -> { for (Ingredient ingredient : recipe.getIngredients()) { - for (ItemStack itemStack : ingredient.getMatchingStacks()) { + for (ItemStack itemStack : ingredient.getItems()) { ALL.computeIfAbsent(itemStack.getItem(), t -> new ArrayList<>()) .add(recipe); return; diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/CreativeFluidTankTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/CreativeFluidTankTileEntity.java index e5bf6f58a..2dcff2dc9 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/CreativeFluidTankTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/CreativeFluidTankTileEntity.java @@ -9,6 +9,8 @@ import net.minecraft.tileentity.TileEntityType; import net.minecraft.util.text.ITextComponent; import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.capability.IFluidHandler.FluidAction; + public class CreativeFluidTankTileEntity extends FluidTankTileEntity { public CreativeFluidTankTileEntity(TileEntityType tileEntityTypeIn) { 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 3907fd89f..3b4068981 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 @@ -47,6 +47,8 @@ import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.capability.CapabilityFluidHandler; import net.minecraftforge.fluids.capability.IFluidHandler; +import net.minecraft.block.AbstractBlock.Properties; + public class FluidTankBlock extends Block implements IWrenchable, ITE { public static final BooleanProperty TOP = BooleanProperty.create("top"); @@ -66,9 +68,9 @@ public class FluidTankBlock extends Block implements IWrenchable, ITE p_206840_1_) { + protected void createBlockStateDefinition(Builder p_206840_1_) { p_206840_1_.add(TOP, BOTTOM, SHAPE); } @@ -102,15 +104,15 @@ public class FluidTankBlock extends Block implements IWrenchable, ITE ComparatorUtil.fractionToRedstoneLevel(te.getFillState())) .orElse(0); diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankConnectivityHandler.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankConnectivityHandler.java index 39b694816..02f1d3116 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankConnectivityHandler.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankConnectivityHandler.java @@ -39,7 +39,7 @@ public class FluidTankConnectivityHandler { TankSearchCache cache = new TankSearchCache(); List frontier = new ArrayList<>(); frontier.add(te); - formTanks(te.getType(), te.getWorld(), cache, frontier); + formTanks(te.getType(), te.getLevel(), cache, frontier); } private static void formTanks(TileEntityType type, IBlockReader world, TankSearchCache cache, @@ -50,7 +50,7 @@ public class FluidTankConnectivityHandler { int minX = Integer.MAX_VALUE; int minZ = Integer.MAX_VALUE; for (FluidTankTileEntity fluidTankTileEntity : frontier) { - BlockPos pos = fluidTankTileEntity.getPos(); + BlockPos pos = fluidTankTileEntity.getBlockPos(); minX = Math.min(pos.getX(), minX); minZ = Math.min(pos.getZ(), minZ); } @@ -59,7 +59,7 @@ public class FluidTankConnectivityHandler { while (!frontier.isEmpty()) { FluidTankTileEntity tank = frontier.remove(0); - BlockPos tankPos = tank.getPos(); + BlockPos tankPos = tank.getBlockPos(); if (visited.contains(tankPos)) continue; @@ -70,8 +70,8 @@ public class FluidTankConnectivityHandler { creationQueue.add(Pair.of(amount, tank)); for (Axis axis : Iterate.axes) { - Direction d = Direction.getFacingFromAxis(AxisDirection.NEGATIVE, axis); - BlockPos next = tankPos.offset(d); + Direction d = Direction.get(AxisDirection.NEGATIVE, axis); + BlockPos next = tankPos.relative(d); if (next.getX() <= minX || next.getZ() <= minZ) continue; @@ -91,9 +91,9 @@ public class FluidTankConnectivityHandler { while (!creationQueue.isEmpty()) { Pair next = creationQueue.poll(); FluidTankTileEntity toCreate = next.getValue(); - if (visited.contains(toCreate.getPos())) + if (visited.contains(toCreate.getBlockPos())) continue; - visited.add(toCreate.getPos()); + visited.add(toCreate.getBlockPos()); tryToFormNewTank(toCreate, cache, false); } @@ -131,15 +131,15 @@ public class FluidTankConnectivityHandler { BlockState state = te.getBlockState(); if (FluidTankBlock.isTank(state)) { - state = state.with(FluidTankBlock.BOTTOM, true); - state = state.with(FluidTankBlock.TOP, te.height == 1); - te.getWorld() - .setBlockState(te.getPos(), state, 22); + 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.markDirty(); + te.setChanged(); } return bestAmount; @@ -150,8 +150,8 @@ public class FluidTankConnectivityHandler { int amount = 0; int height = 0; TileEntityType type = te.getType(); - World world = te.getWorld(); - BlockPos origin = te.getPos(); + World 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)) @@ -163,7 +163,7 @@ public class FluidTankConnectivityHandler { for (int xOffset = 0; xOffset < width; xOffset++) { for (int zOffset = 0; zOffset < width; zOffset++) { - BlockPos pos = origin.add(xOffset, yOffset, zOffset); + BlockPos pos = origin.offset(xOffset, yOffset, zOffset); Optional tank = cache.getOrCache(type, world, pos); if (!tank.isPresent()) break Search; @@ -173,7 +173,7 @@ public class FluidTankConnectivityHandler { if (otherWidth > width) break Search; - BlockPos controllerPos = controller.getPos(); + BlockPos controllerPos = controller.getBlockPos(); if (!controllerPos.equals(origin)) { if (controllerPos.getX() < origin.getX()) break Search; @@ -205,7 +205,7 @@ public class FluidTankConnectivityHandler { for (int yOffset = 0; yOffset < height; yOffset++) { for (int xOffset = 0; xOffset < width; xOffset++) { for (int zOffset = 0; zOffset < width; zOffset++) { - BlockPos pos = origin.add(xOffset, yOffset, zOffset); + BlockPos pos = origin.offset(xOffset, yOffset, zOffset); FluidTankTileEntity tank = tankAt(type, world, pos); if (tank == te) continue; @@ -228,9 +228,9 @@ public class FluidTankConnectivityHandler { BlockState state = world.getBlockState(pos); if (!FluidTankBlock.isTank(state)) continue; - state = state.with(FluidTankBlock.BOTTOM, yOffset == 0); - state = state.with(FluidTankBlock.TOP, yOffset == height - 1); - world.setBlockState(pos, state, 22); + state = state.setValue(FluidTankBlock.BOTTOM, yOffset == 0); + state = state.setValue(FluidTankBlock.TOP, yOffset == height - 1); + world.setBlock(pos, state, 22); } } } @@ -253,8 +253,8 @@ public class FluidTankConnectivityHandler { if (width == 1 && height == 1) return; - World world = te.getWorld(); - BlockPos origin = te.getPos(); + World world = te.getLevel(); + BlockPos origin = te.getBlockPos(); List frontier = new ArrayList<>(); FluidStack toDistribute = te.tankInventory.getFluid() .copy(); @@ -267,7 +267,7 @@ public class FluidTankConnectivityHandler { for (int xOffset = 0; xOffset < width; xOffset++) { for (int zOffset = 0; zOffset < width; zOffset++) { - BlockPos pos = origin.add(xOffset, yOffset, zOffset); + BlockPos pos = origin.offset(xOffset, yOffset, zOffset); FluidTankTileEntity tankAt = tankAt(te.getType(), world, pos); if (tankAt == null) continue; @@ -317,7 +317,7 @@ public class FluidTankConnectivityHandler { @Nullable public static FluidTankTileEntity tankAt(TileEntityType type, IBlockReader world, BlockPos pos) { - TileEntity te = world.getTileEntity(pos); + TileEntity te = world.getBlockEntity(pos); if (te instanceof FluidTankTileEntity && te.getType() == type) return (FluidTankTileEntity) te; return null; @@ -325,7 +325,7 @@ public class FluidTankConnectivityHandler { @Nullable public static FluidTankTileEntity anyTankAt(IBlockReader world, BlockPos pos) { - TileEntity te = world.getTileEntity(pos); + TileEntity te = world.getBlockEntity(pos); if (te instanceof FluidTankTileEntity) return (FluidTankTileEntity) te; return null; @@ -370,8 +370,8 @@ public class FluidTankConnectivityHandler { } public static boolean isConnected(IBlockReader world, BlockPos tankPos, BlockPos otherTankPos) { - TileEntity te1 = world.getTileEntity(tankPos); - TileEntity te2 = world.getTileEntity(otherTankPos); + TileEntity te1 = world.getBlockEntity(tankPos); + TileEntity te2 = world.getBlockEntity(otherTankPos); if (!(te1 instanceof FluidTankTileEntity) || !(te2 instanceof FluidTankTileEntity)) return false; return ((FluidTankTileEntity) te1).getController() diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankGenerator.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankGenerator.java index 1a64dbeae..71fdd634b 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankGenerator.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankGenerator.java @@ -35,9 +35,9 @@ public class FluidTankGenerator extends SpecialBlockStateGen { @Override public ModelFile getModel(DataGenContext ctx, RegistrateBlockstateProvider prov, BlockState state) { - Boolean top = state.get(FluidTankBlock.TOP); - Boolean bottom = state.get(FluidTankBlock.BOTTOM); - Shape shape = state.get(FluidTankBlock.SHAPE); + Boolean top = state.getValue(FluidTankBlock.TOP); + Boolean bottom = state.getValue(FluidTankBlock.BOTTOM); + Shape shape = state.getValue(FluidTankBlock.SHAPE); String shapeName = "middle"; if (top && bottom) @@ -47,7 +47,7 @@ public class FluidTankGenerator extends SpecialBlockStateGen { else if (bottom) shapeName = "bottom"; - String modelName = shapeName + (shape == Shape.PLAIN ? "" : "_" + shape.getString()); + String modelName = shapeName + (shape == Shape.PLAIN ? "" : "_" + shape.getSerializedName()); if (!prefix.isEmpty()) return prov.models() 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 cec618615..3687fcf89 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 @@ -14,6 +14,8 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import net.minecraftforge.fluids.FluidStack; +import net.minecraft.item.Item.Properties; + public class FluidTankItem extends BlockItem { public FluidTankItem(Block p_i48527_1_, Properties p_i48527_2_) { @@ -21,21 +23,21 @@ public class FluidTankItem extends BlockItem { } @Override - public ActionResultType tryPlace(BlockItemUseContext ctx) { - ActionResultType initialResult = super.tryPlace(ctx); - if (!initialResult.isAccepted()) + public ActionResultType place(BlockItemUseContext ctx) { + ActionResultType initialResult = super.place(ctx); + if (!initialResult.consumesAction()) return initialResult; tryMultiPlace(ctx); return initialResult; } @Override - protected boolean onBlockPlaced(BlockPos p_195943_1_, World p_195943_2_, PlayerEntity p_195943_3_, + protected boolean updateCustomBlockEntityTag(BlockPos p_195943_1_, World p_195943_2_, PlayerEntity p_195943_3_, ItemStack p_195943_4_, BlockState p_195943_5_) { MinecraftServer minecraftserver = p_195943_2_.getServer(); if (minecraftserver == null) return false; - CompoundNBT nbt = p_195943_4_.getChildTag("BlockEntityTag"); + CompoundNBT nbt = p_195943_4_.getTagElement("BlockEntityTag"); if (nbt != null) { nbt.remove("Luminosity"); nbt.remove("Size"); @@ -50,23 +52,23 @@ public class FluidTankItem extends BlockItem { } } } - return super.onBlockPlaced(p_195943_1_, p_195943_2_, p_195943_3_, p_195943_4_, p_195943_5_); + return super.updateCustomBlockEntityTag(p_195943_1_, p_195943_2_, p_195943_3_, p_195943_4_, p_195943_5_); } private void tryMultiPlace(BlockItemUseContext ctx) { PlayerEntity player = ctx.getPlayer(); if (player == null) return; - if (player.isSneaking()) + if (player.isShiftKeyDown()) return; - Direction face = ctx.getFace(); + Direction face = ctx.getClickedFace(); if (!face.getAxis() .isVertical()) return; - ItemStack stack = ctx.getItem(); - World world = ctx.getWorld(); - BlockPos pos = ctx.getPos(); - BlockPos placedOnPos = pos.offset(face.getOpposite()); + ItemStack stack = ctx.getItemInHand(); + World world = ctx.getLevel(); + BlockPos pos = ctx.getClickedPos(); + BlockPos placedOnPos = pos.relative(face.getOpposite()); BlockState placedOnState = world.getBlockState(placedOnPos); if (!FluidTankBlock.isTank(placedOnState)) @@ -83,17 +85,17 @@ public class FluidTankItem extends BlockItem { return; int tanksToPlace = 0; - BlockPos startPos = face == Direction.DOWN ? controllerTE.getPos() - .down() - : controllerTE.getPos() - .up(controllerTE.height); + BlockPos startPos = face == Direction.DOWN ? controllerTE.getBlockPos() + .below() + : controllerTE.getBlockPos() + .above(controllerTE.height); if (startPos.getY() != pos.getY()) return; for (int xOffset = 0; xOffset < width; xOffset++) { for (int zOffset = 0; zOffset < width; zOffset++) { - BlockPos offsetPos = startPos.add(xOffset, 0, zOffset); + BlockPos offsetPos = startPos.offset(xOffset, 0, zOffset); BlockState blockState = world.getBlockState(offsetPos); if (FluidTankBlock.isTank(blockState)) continue; @@ -109,14 +111,14 @@ public class FluidTankItem extends BlockItem { for (int xOffset = 0; xOffset < width; xOffset++) { for (int zOffset = 0; zOffset < width; zOffset++) { - BlockPos offsetPos = startPos.add(xOffset, 0, zOffset); + BlockPos offsetPos = startPos.offset(xOffset, 0, zOffset); BlockState blockState = world.getBlockState(offsetPos); if (FluidTankBlock.isTank(blockState)) continue; - BlockItemUseContext context = BlockItemUseContext.func_221536_a(ctx, offsetPos, face); + BlockItemUseContext context = BlockItemUseContext.at(ctx, offsetPos, face); player.getPersistentData() .putBoolean("SilenceTankSound", true); - super.tryPlace(context); + super.place(context); player.getPersistentData() .remove("SilenceTankSound"); } 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 b182b7be1..08019b105 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 @@ -41,7 +41,7 @@ public class FluidTankModel extends CTModel { protected Builder gatherModelData(Builder builder, IBlockDisplayReader world, BlockPos pos, BlockState state) { CullData cullData = new CullData(); for (Direction d : Iterate.horizontalDirections) - cullData.setCulled(d, FluidTankConnectivityHandler.isConnected(world, pos, pos.offset(d))); + cullData.setCulled(d, FluidTankConnectivityHandler.isConnected(world, pos, pos.relative(d))); return super.gatherModelData(builder, world, pos, state).withInitial(CULL_PROPERTY, cullData); } @@ -73,14 +73,14 @@ public class FluidTankModel extends CTModel { if (face.getAxis() .isVertical()) return; - culledFaces[face.getHorizontalIndex()] = cull; + culledFaces[face.get2DDataValue()] = cull; } boolean isCulled(Direction face) { if (face.getAxis() .isVertical()) return false; - return culledFaces[face.getHorizontalIndex()]; + return culledFaces[face.get2DDataValue()]; } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankRenderer.java index c3d51df67..fc46d3386 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankRenderer.java @@ -62,14 +62,14 @@ public class FluidTankRenderer extends SafeTileEntityRenderer(); - tooltip.add(componentSpacing.copy() + tooltip.add(componentSpacing.plainCopy() .append(Lang.translate("gui.config.overlay1"))); - tooltip.add(componentSpacing.copy() + tooltip.add(componentSpacing.plainCopy() .append(Lang.translate("gui.config.overlay2") - .formatted(TextFormatting.GRAY))); + .withStyle(TextFormatting.GRAY))); tooltip.add(StringTextComponent.EMPTY); - tooltip.add(componentSpacing.copy() + tooltip.add(componentSpacing.plainCopy() .append(Lang.translate("gui.config.overlay3"))); - tooltip.add(componentSpacing.copy() + tooltip.add(componentSpacing.plainCopy() .append(Lang.translate("gui.config.overlay4"))); tooltip.add(StringTextComponent.EMPTY); - tooltip.add(componentSpacing.copy() + tooltip.add(componentSpacing.plainCopy() .append(Lang.translate("gui.config.overlay5") - .formatted(TextFormatting.GRAY))); - tooltip.add(componentSpacing.copy() + .withStyle(TextFormatting.GRAY))); + tooltip.add(componentSpacing.plainCopy() .append(Lang.translate("gui.config.overlay6") - .formatted(TextFormatting.GRAY))); + .withStyle(TextFormatting.GRAY))); tooltip.add(StringTextComponent.EMPTY); - tooltip.add(componentSpacing.copy() + tooltip.add(componentSpacing.plainCopy() .append(Lang.translate("gui.config.overlay7"))); - tooltip.add(componentSpacing.copy() + tooltip.add(componentSpacing.plainCopy() .append(Lang.translate("gui.config.overlay8"))); } @Override protected void init() { - this.width = client.getWindow() - .getScaledWidth(); - this.height = client.getWindow() - .getScaledHeight(); + this.width = minecraft.getWindow() + .getGuiScaledWidth(); + this.height = minecraft.getWindow() + .getGuiScaledHeight(); offsetX = AllConfigs.CLIENT.overlayOffsetX.get(); offsetY = AllConfigs.CLIENT.overlayOffsetY.get(); @@ -89,7 +89,7 @@ public class GoggleConfigScreen extends AbstractSimiScreen { int titleLinesCount = 1; int tooltipTextWidth = 0; for (ITextProperties textLine : tooltip) { - int textLineWidth = client.fontRenderer.getWidth(textLine); + int textLineWidth = minecraft.font.width(textLine); if (textLineWidth > tooltipTextWidth) tooltipTextWidth = textLineWidth; } @@ -108,7 +108,7 @@ public class GoggleConfigScreen extends AbstractSimiScreen { protected void renderWindow(MatrixStack ms, int mouseX, int mouseY, float partialTicks) { int posX = this.width / 2 + offsetX; int posY = this.height / 2 + offsetY; - renderTooltip(ms, tooltip, posX, posY); + renderComponentTooltip(ms, tooltip, posX, posY); // UIRenderHelper.breadcrumbArrow(ms, 50, 50, 100, 50, 20, 10, 0x80aa9999, 0x10aa9999); // UIRenderHelper.breadcrumbArrow(ms, 100, 80, 0, -50, 20, -10, 0x80aa9999, 0x10aa9999); diff --git a/src/main/java/com/simibubi/create/content/contraptions/goggles/GoggleOverlayRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/goggles/GoggleOverlayRenderer.java index 2acd72a7a..fcc209268 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/goggles/GoggleOverlayRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/goggles/GoggleOverlayRenderer.java @@ -41,7 +41,7 @@ public class GoggleOverlayRenderer { public static void renderOverlay(MatrixStack ms, IRenderTypeBuffer buffer, int light, int overlay, float partialTicks) { - RayTraceResult objectMouseOver = Minecraft.getInstance().objectMouseOver; + RayTraceResult objectMouseOver = Minecraft.getInstance().hitResult; if (!(objectMouseOver instanceof BlockRayTraceResult)) return; @@ -56,10 +56,10 @@ public class GoggleOverlayRenderer { BlockRayTraceResult result = (BlockRayTraceResult) objectMouseOver; Minecraft mc = Minecraft.getInstance(); - ClientWorld world = mc.world; - BlockPos pos = result.getPos(); - ItemStack headSlot = mc.player.getItemStackFromSlot(EquipmentSlotType.HEAD); - TileEntity te = world.getTileEntity(pos); + ClientWorld world = mc.level; + BlockPos pos = result.getBlockPos(); + ItemStack headSlot = mc.player.getItemBySlot(EquipmentSlotType.HEAD); + TileEntity te = world.getBlockEntity(pos); boolean wearingGoggles = AllItems.GOGGLES.isIn(headSlot); @@ -73,14 +73,14 @@ public class GoggleOverlayRenderer { if (hasGoggleInformation && wearingGoggles) { IHaveGoggleInformation gte = (IHaveGoggleInformation) te; - goggleAddedInformation = gte.addToGoggleTooltip(tooltip, mc.player.isSneaking()); + goggleAddedInformation = gte.addToGoggleTooltip(tooltip, mc.player.isShiftKeyDown()); } if (hasHoveringInformation) { if (!tooltip.isEmpty()) tooltip.add(StringTextComponent.EMPTY); IHaveHoveringInformation hte = (IHaveHoveringInformation) te; - hoverAddedInformation = hte.addToTooltip(tooltip, mc.player.isSneaking()); + hoverAddedInformation = hte.addToTooltip(tooltip, mc.player.isShiftKeyDown()); if (goggleAddedInformation && !hoverAddedInformation) tooltip.remove(tooltip.size() - 1); @@ -101,7 +101,7 @@ public class GoggleOverlayRenderer { // check for piston poles if goggles are worn BlockState state = world.getBlockState(pos); if (wearingGoggles && AllBlocks.PISTON_EXTENSION_POLE.has(state)) { - Direction[] directions = Iterate.directionsInAxis(state.get(PistonExtensionPoleBlock.FACING) + Direction[] directions = Iterate.directionsInAxis(state.getValue(PistonExtensionPoleBlock.FACING) .getAxis()); int poles = 1; boolean pistonFound = false; @@ -109,7 +109,7 @@ public class GoggleOverlayRenderer { int attachedPoles = PistonExtensionPoleBlock.PlacementHelper.get() .attachedPoles(world, pos, dir); poles += attachedPoles; - pistonFound |= world.getBlockState(pos.offset(dir, attachedPoles + 1)) + pistonFound |= world.getBlockState(pos.relative(dir, attachedPoles + 1)) .getBlock() instanceof MechanicalPistonBlock; } @@ -118,7 +118,7 @@ public class GoggleOverlayRenderer { if (!tooltip.isEmpty()) tooltip.add(StringTextComponent.EMPTY); - tooltip.add(IHaveGoggleInformation.componentSpacing.copy() + tooltip.add(IHaveGoggleInformation.componentSpacing.plainCopy() .append(Lang.translate("gui.goggles.pole_length")) .append(new StringTextComponent(" " + poles))); } @@ -126,17 +126,17 @@ public class GoggleOverlayRenderer { if (tooltip.isEmpty()) return; - ms.push(); + ms.pushPose(); Screen tooltipScreen = new TooltipScreen(null); tooltipScreen.init(mc, mc.getWindow() - .getScaledWidth(), + .getGuiScaledWidth(), mc.getWindow() - .getScaledHeight()); + .getGuiScaledHeight()); int titleLinesCount = 1; int tooltipTextWidth = 0; for (ITextProperties textLine : tooltip) { - int textLineWidth = mc.fontRenderer.getWidth(textLine); + int textLineWidth = mc.font.width(textLine); if (textLineWidth > tooltipTextWidth) tooltipTextWidth = textLineWidth; } @@ -154,13 +154,13 @@ public class GoggleOverlayRenderer { posX = Math.min(posX, tooltipScreen.width - tooltipTextWidth - 20); posY = Math.min(posY, tooltipScreen.height - tooltipHeight - 20); - tooltipScreen.renderTooltip(ms, tooltip, posX, posY); + tooltipScreen.renderComponentTooltip(ms, tooltip, posX, posY); ItemStack item = AllItems.GOGGLES.asStack(); GuiGameElement.of(item) .at(posX + 10, posY - 16, 450) .render(ms); - ms.pop(); + ms.popPose(); } public static final class TooltipScreen extends Screen { @@ -170,9 +170,9 @@ public class GoggleOverlayRenderer { @Override public void init(Minecraft mc, int width, int height) { - this.client = mc; + this.minecraft = mc; this.itemRenderer = mc.getItemRenderer(); - this.textRenderer = mc.fontRenderer; + this.font = mc.font; this.width = width; this.height = height; } diff --git a/src/main/java/com/simibubi/create/content/contraptions/goggles/GogglesItem.java b/src/main/java/com/simibubi/create/content/contraptions/goggles/GogglesItem.java index 3f917e6be..09c31ad95 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/goggles/GogglesItem.java +++ b/src/main/java/com/simibubi/create/content/contraptions/goggles/GogglesItem.java @@ -14,11 +14,13 @@ import net.minecraft.util.ActionResultType; import net.minecraft.util.Hand; import net.minecraft.world.World; +import net.minecraft.item.Item.Properties; + public class GogglesItem extends Item { public GogglesItem(Properties properties) { super(properties); - DispenserBlock.registerDispenseBehavior(this, ArmorItem.DISPENSER_BEHAVIOR); + DispenserBlock.registerBehavior(this, ArmorItem.DISPENSE_ITEM_BEHAVIOR); } @Override @@ -26,12 +28,12 @@ public class GogglesItem extends Item { return EquipmentSlotType.HEAD; } - public ActionResult onItemRightClick(World worldIn, PlayerEntity playerIn, Hand handIn) { - ItemStack itemstack = playerIn.getHeldItem(handIn); - EquipmentSlotType equipmentslottype = MobEntity.getSlotForItemStack(itemstack); - ItemStack itemstack1 = playerIn.getItemStackFromSlot(equipmentslottype); + public ActionResult use(World worldIn, PlayerEntity playerIn, Hand handIn) { + ItemStack itemstack = playerIn.getItemInHand(handIn); + EquipmentSlotType equipmentslottype = MobEntity.getEquipmentSlotForItem(itemstack); + ItemStack itemstack1 = playerIn.getItemBySlot(equipmentslottype); if (itemstack1.isEmpty()) { - playerIn.setItemStackToSlot(equipmentslottype, itemstack.copy()); + playerIn.setItemSlot(equipmentslottype, itemstack.copy()); itemstack.setCount(0); return new ActionResult<>(ActionResultType.SUCCESS, itemstack); } else { @@ -40,7 +42,7 @@ public class GogglesItem extends Item { } public static boolean canSeeParticles(PlayerEntity player) { - for (ItemStack itemStack : player.getArmorInventoryList()) + for (ItemStack itemStack : player.getArmorSlots()) if (AllItems.GOGGLES.isIn(itemStack)) return true; return false; diff --git a/src/main/java/com/simibubi/create/content/contraptions/goggles/IHaveGoggleInformation.java b/src/main/java/com/simibubi/create/content/contraptions/goggles/IHaveGoggleInformation.java index af546a856..b67227e94 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/goggles/IHaveGoggleInformation.java +++ b/src/main/java/com/simibubi/create/content/contraptions/goggles/IHaveGoggleInformation.java @@ -42,7 +42,7 @@ public interface IHaveGoggleInformation { } default boolean containedFluidTooltip(List tooltip, boolean isPlayerSneaking, LazyOptional handler) { - tooltip.add(componentSpacing.copy().append(Lang.translate("gui.goggles.fluid_container"))); + tooltip.add(componentSpacing.plainCopy().append(Lang.translate("gui.goggles.fluid_container"))); TranslationTextComponent mb = Lang.translate("generic.unit.millibuckets"); Optional resolve = handler.resolve(); if (!resolve.isPresent()) @@ -60,14 +60,14 @@ public interface IHaveGoggleInformation { if (fluidStack.isEmpty()) continue; - ITextComponent fluidName = new TranslationTextComponent(fluidStack.getTranslationKey()).formatted(TextFormatting.GRAY); - ITextComponent contained = new StringTextComponent(format(fluidStack.getAmount())).append(mb).formatted(TextFormatting.GOLD); - ITextComponent slash = new StringTextComponent(" / ").formatted(TextFormatting.GRAY); - ITextComponent capacity = new StringTextComponent(format(tank.getTankCapacity(i))).append(mb).formatted(TextFormatting.DARK_GRAY); + ITextComponent fluidName = new TranslationTextComponent(fluidStack.getTranslationKey()).withStyle(TextFormatting.GRAY); + ITextComponent contained = new StringTextComponent(format(fluidStack.getAmount())).append(mb).withStyle(TextFormatting.GOLD); + ITextComponent slash = new StringTextComponent(" / ").withStyle(TextFormatting.GRAY); + ITextComponent capacity = new StringTextComponent(format(tank.getTankCapacity(i))).append(mb).withStyle(TextFormatting.DARK_GRAY); - tooltip.add(indent.copy() + tooltip.add(indent.plainCopy() .append(fluidName)); - tooltip.add(indent.copy() + tooltip.add(indent.plainCopy() .append(contained) .append(slash) .append(capacity)); @@ -84,10 +84,10 @@ public interface IHaveGoggleInformation { if (!isEmpty) return true; - ITextComponent capacity = Lang.translate("gui.goggles.fluid_container.capacity").formatted(TextFormatting.GRAY); - ITextComponent amount = new StringTextComponent(format(tank.getTankCapacity(0))).append(mb).formatted(TextFormatting.GOLD); + ITextComponent capacity = Lang.translate("gui.goggles.fluid_container.capacity").withStyle(TextFormatting.GRAY); + ITextComponent amount = new StringTextComponent(format(tank.getTankCapacity(0))).append(mb).withStyle(TextFormatting.GOLD); - tooltip.add(indent.copy() + tooltip.add(indent.plainCopy() .append(capacity) .append(amount)); return true; @@ -106,7 +106,7 @@ public interface IHaveGoggleInformation { public void update() { format = NumberFormat.getInstance(Minecraft.getInstance() .getLanguageManager() - .getCurrentLanguage() + .getSelected() .getJavaLocale()); format.setMaximumFractionDigits(2); format.setMinimumFractionDigits(0); diff --git a/src/main/java/com/simibubi/create/content/contraptions/itemAssembly/SequencedAssemblyItem.java b/src/main/java/com/simibubi/create/content/contraptions/itemAssembly/SequencedAssemblyItem.java index 2ac7b3bbe..f3cb49835 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/itemAssembly/SequencedAssemblyItem.java +++ b/src/main/java/com/simibubi/create/content/contraptions/itemAssembly/SequencedAssemblyItem.java @@ -9,14 +9,16 @@ import net.minecraft.nbt.CompoundNBT; import net.minecraft.util.NonNullList; import net.minecraft.util.math.MathHelper; +import net.minecraft.item.Item.Properties; + public class SequencedAssemblyItem extends Item { public SequencedAssemblyItem(Properties p_i48487_1_) { - super(p_i48487_1_.maxStackSize(1)); + super(p_i48487_1_.stacksTo(1)); } @Override - public void fillItemGroup(ItemGroup p_150895_1_, NonNullList p_150895_2_) {} + public void fillItemCategory(ItemGroup p_150895_1_, NonNullList p_150895_2_) {} @Override public double getDurabilityForDisplay(ItemStack stack) { diff --git a/src/main/java/com/simibubi/create/content/contraptions/itemAssembly/SequencedAssemblyRecipe.java b/src/main/java/com/simibubi/create/content/contraptions/itemAssembly/SequencedAssemblyRecipe.java index 9d854412a..a09fef111 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/itemAssembly/SequencedAssemblyRecipe.java +++ b/src/main/java/com/simibubi/create/content/contraptions/itemAssembly/SequencedAssemblyRecipe.java @@ -56,14 +56,14 @@ public class SequencedAssemblyRecipe implements IRecipe { public static > Optional getRecipe(World world, C inv, IRecipeType type, Class recipeClass) { //return getRecipe(world, inv.getStackInSlot(0), type, recipeClass).filter(r -> r.matches(inv, world)); - return getRecipes(world, inv.getStackInSlot(0), type, recipeClass).filter(r -> r.matches(inv, world)) + return getRecipes(world, inv.getItem(0), type, recipeClass).filter(r -> r.matches(inv, world)) .findFirst(); } public static > Optional getRecipe(World world, ItemStack item, IRecipeType type, Class recipeClass) { List all = world.getRecipeManager() - .listAllOfType(AllRecipeTypes.SEQUENCED_ASSEMBLY.getType()); + .getAllRecipesFor(AllRecipeTypes.SEQUENCED_ASSEMBLY.getType()); for (SequencedAssemblyRecipe sequencedAssemblyRecipe : all) { if (!sequencedAssemblyRecipe.appliesTo(item)) continue; @@ -80,7 +80,7 @@ public class SequencedAssemblyRecipe implements IRecipe { public static > Stream getRecipes(World world, ItemStack item, IRecipeType type, Class recipeClass) { List all = world.getRecipeManager() - .listAllOfType(AllRecipeTypes.SEQUENCED_ASSEMBLY.getType()); + .getAllRecipesFor(AllRecipeTypes.SEQUENCED_ASSEMBLY.getType()); return all.stream() .filter(it -> it.appliesTo(item)) @@ -122,7 +122,7 @@ public class SequencedAssemblyRecipe implements IRecipe { sequence.forEach(sr -> sr.getAsAssemblyRecipe() .addRequiredMachines(machines)); machines.stream() - .map(Ingredient::fromItems) + .map(Ingredient::of) .forEach(list::add); } @@ -176,17 +176,17 @@ public class SequencedAssemblyRecipe implements IRecipe { } @Override - public ItemStack getCraftingResult(RecipeWrapper p_77572_1_) { + public ItemStack assemble(RecipeWrapper p_77572_1_) { return ItemStack.EMPTY; } @Override - public boolean canFit(int p_194133_1_, int p_194133_2_) { + public boolean canCraftInDimensions(int p_194133_1_, int p_194133_2_) { return false; } @Override - public ItemStack getRecipeOutput() { + public ItemStack getResultItem() { return resultPool.get(0) .getStack(); } @@ -210,7 +210,7 @@ public class SequencedAssemblyRecipe implements IRecipe { } @Override - public boolean isDynamic() { + public boolean isSpecial() { return true; } @@ -227,8 +227,8 @@ public class SequencedAssemblyRecipe implements IRecipe { CompoundNBT compound = stack.getTag() .getCompound("SequencedAssembly"); ResourceLocation resourceLocation = new ResourceLocation(compound.getString("id")); - Optional> recipe = Minecraft.getInstance().world.getRecipeManager() - .getRecipe(resourceLocation); + Optional> recipe = Minecraft.getInstance().level.getRecipeManager() + .byKey(resourceLocation); if (!recipe.isPresent()) return; IRecipe iRecipe = recipe.get(); @@ -241,9 +241,9 @@ public class SequencedAssemblyRecipe implements IRecipe { int total = length * sequencedAssemblyRecipe.loops; toolTip.add(new StringTextComponent("")); toolTip.add(Lang.translate("recipe.sequenced_assembly") - .formatted(TextFormatting.GRAY)); + .withStyle(TextFormatting.GRAY)); toolTip.add(Lang.translate("recipe.assembly.progress", step, total) - .formatted(TextFormatting.DARK_GRAY)); + .withStyle(TextFormatting.DARK_GRAY)); int remaining = total - step; for (int i = 0; i < length; i++) { @@ -254,10 +254,10 @@ public class SequencedAssemblyRecipe implements IRecipe { .getDescriptionForAssembly(); if (i == 0) toolTip.add(Lang.translate("recipe.assembly.next", textComponent) - .formatted(TextFormatting.AQUA)); + .withStyle(TextFormatting.AQUA)); else toolTip.add(new StringTextComponent("-> ").append(textComponent) - .formatted(TextFormatting.DARK_AQUA)); + .withStyle(TextFormatting.DARK_AQUA)); } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/itemAssembly/SequencedAssemblyRecipeBuilder.java b/src/main/java/com/simibubi/create/content/contraptions/itemAssembly/SequencedAssemblyRecipeBuilder.java index 756209811..9453108aa 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/itemAssembly/SequencedAssemblyRecipeBuilder.java +++ b/src/main/java/com/simibubi/create/content/contraptions/itemAssembly/SequencedAssemblyRecipeBuilder.java @@ -51,11 +51,11 @@ public class SequencedAssemblyRecipeBuilder { } public SequencedAssemblyRecipeBuilder require(IItemProvider ingredient) { - return require(Ingredient.fromItems(ingredient)); + return require(Ingredient.of(ingredient)); } public SequencedAssemblyRecipeBuilder require(ITag.INamedTag tag) { - return require(Ingredient.fromTag(tag)); + return require(Ingredient.of(tag)); } public SequencedAssemblyRecipeBuilder require(Ingredient ingredient) { @@ -102,7 +102,7 @@ public class SequencedAssemblyRecipeBuilder { } @Override - public void serialize(JsonObject json) { + public void serializeRecipeData(JsonObject json) { serializer.write(json, recipe); if (recipeConditions.isEmpty()) return; @@ -113,22 +113,22 @@ public class SequencedAssemblyRecipeBuilder { } @Override - public ResourceLocation getID() { + public ResourceLocation getId() { return id; } @Override - public IRecipeSerializer getSerializer() { + public IRecipeSerializer getType() { return serializer; } @Override - public JsonObject getAdvancementJson() { + public JsonObject serializeAdvancement() { return null; } @Override - public ResourceLocation getAdvancementID() { + public ResourceLocation getAdvancementId() { return null; } diff --git a/src/main/java/com/simibubi/create/content/contraptions/itemAssembly/SequencedAssemblyRecipeSerializer.java b/src/main/java/com/simibubi/create/content/contraptions/itemAssembly/SequencedAssemblyRecipeSerializer.java index d7c922399..91d54fd21 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/itemAssembly/SequencedAssemblyRecipeSerializer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/itemAssembly/SequencedAssemblyRecipeSerializer.java @@ -20,7 +20,7 @@ public class SequencedAssemblyRecipeSerializer extends ForgeRegistryEntry nestedRecipes.add(i.toJson())); recipe.resultPool.forEach(p -> results.add(p.serialize())); json.add("transitionalItem", recipe.transitionalItem.serialize()); @@ -31,20 +31,20 @@ public class SequencedAssemblyRecipeSerializer extends ForgeRegistryEntry sr.writeToBuffer(buffer)); buffer.writeVarInt(recipe.resultPool.size()); @@ -55,7 +55,7 @@ public class SequencedAssemblyRecipeSerializer extends ForgeRegistryEntry> { public static SequencedRecipe fromJson(JsonObject json, SequencedAssemblyRecipe parent, int index) { ResourceLocation parentId = parent.getId(); - IRecipe recipe = RecipeManager.deserializeRecipe( + IRecipe recipe = RecipeManager.fromJson( new ResourceLocation(parentId.getNamespace(), parentId.getPath() + "_step_" + index), json); if (recipe instanceof ProcessingRecipe && recipe instanceof IAssemblyRecipe) { ProcessingRecipe processingRecipe = (ProcessingRecipe) recipe; IAssemblyRecipe assemblyRecipe = (IAssemblyRecipe) recipe; if (assemblyRecipe.supportsAssembly()) { - Ingredient transit = Ingredient.fromStacks(parent.getTransitionalItem()); + Ingredient transit = Ingredient.of(parent.getTransitionalItem()); processingRecipe.getIngredients() .set(0, index == 0 ? Ingredient.merge(ImmutableList.of(transit, parent.getIngredient())) : transit); SequencedRecipe sequencedRecipe = new SequencedRecipe<>(processingRecipe); @@ -63,7 +63,7 @@ public class SequencedRecipe> { ProcessingRecipeSerializer serializer = (ProcessingRecipeSerializer) wrapped.getSerializer(); buffer.writeResourceLocation(ForgeRegistries.RECIPE_SERIALIZERS.getKey(serializer)); buffer.writeResourceLocation(wrapped.getId()); - serializer.write(buffer, wrapped); + serializer.toNetwork(buffer, wrapped); } public static SequencedRecipe readFromBuffer(PacketBuffer buffer) { @@ -73,7 +73,7 @@ public class SequencedRecipe> { if (!(serializer instanceof ProcessingRecipeSerializer)) throw new JsonParseException("Not a supported recipe type"); @SuppressWarnings("rawtypes") - ProcessingRecipe recipe = (ProcessingRecipe) serializer.read(resourcelocation1, buffer); + ProcessingRecipe recipe = (ProcessingRecipe) serializer.fromNetwork(resourcelocation1, buffer); return new SequencedRecipe<>(recipe); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/particle/AirFlowParticle.java b/src/main/java/com/simibubi/create/content/contraptions/particle/AirFlowParticle.java index d4399cde7..22b0bbe7f 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/particle/AirFlowParticle.java +++ b/src/main/java/com/simibubi/create/content/contraptions/particle/AirFlowParticle.java @@ -29,18 +29,18 @@ public class AirFlowParticle extends SimpleAnimatedParticle { protected AirFlowParticle(ClientWorld world, IAirCurrentSource source, double x, double y, double z, IAnimatedSprite sprite) { - super(world, x, y, z, sprite, world.rand.nextFloat() * .5f); + super(world, x, y, z, sprite, world.random.nextFloat() * .5f); this.source = source; - this.particleScale *= 0.75F; - this.maxAge = 40; - canCollide = false; + this.quadSize *= 0.75F; + this.lifetime = 40; + hasPhysics = false; selectSprite(7); Vector3d offset = VecHelper.offsetRandomly(Vector3d.ZERO, Create.RANDOM, .25f); - this.setPosition(posX + offset.x, posY + offset.y, posZ + offset.z); - this.prevPosX = posX; - this.prevPosY = posY; - this.prevPosZ = posZ; - setAlphaF(.25f); + this.setPos(x + offset.x, y + offset.y, z + offset.z); + this.xo = x; + this.yo = y; + this.zo = z; + setAlpha(.25f); } @Nonnull @@ -54,43 +54,43 @@ public class AirFlowParticle extends SimpleAnimatedParticle { dissipate(); return; } - this.prevPosX = this.posX; - this.prevPosY = this.posY; - this.prevPosZ = this.posZ; - if (this.age++ >= this.maxAge) { - this.setExpired(); + this.xo = this.x; + this.yo = this.y; + this.zo = this.z; + if (this.age++ >= this.lifetime) { + this.remove(); } else { - if (source.getAirCurrent() == null || !source.getAirCurrent().bounds.grow(.25f).contains(posX, posY, posZ)) { + if (source.getAirCurrent() == null || !source.getAirCurrent().bounds.inflate(.25f).contains(x, y, z)) { dissipate(); return; } - Vector3d directionVec = Vector3d.of(source.getAirCurrent().direction.getDirectionVec()); + Vector3d directionVec = Vector3d.atLowerCornerOf(source.getAirCurrent().direction.getNormal()); Vector3d motion = directionVec.scale(1 / 8f); if (!source.getAirCurrent().pushing) motion = motion.scale(-1); - double distance = new Vector3d(posX, posY, posZ).subtract(VecHelper.getCenterOf(source.getAirCurrentPos())) - .mul(directionVec).length() - .5f; + double distance = new Vector3d(x, y, z).subtract(VecHelper.getCenterOf(source.getAirCurrentPos())) + .multiply(directionVec).length() - .5f; if (distance > source.getAirCurrent().maxDistance + 1 || distance < -.25f) { dissipate(); return; } motion = motion.scale(source.getAirCurrent().maxDistance - (distance - 1f)).scale(.5f); - selectSprite((int) MathHelper.clamp((distance / source.getAirCurrent().maxDistance) * 8 + world.rand.nextInt(4), + selectSprite((int) MathHelper.clamp((distance / source.getAirCurrent().maxDistance) * 8 + level.random.nextInt(4), 0, 7)); morphType(distance); - motionX = motion.x; - motionY = motion.y; - motionZ = motion.z; + xd = motion.x; + yd = motion.y; + zd = motion.z; if (this.onGround) { - this.motionX *= 0.7; - this.motionZ *= 0.7; + this.xd *= 0.7; + this.zd *= 0.7; } - this.move(this.motionX, this.motionY, this.motionZ); + this.move(this.xd, this.yd, this.zd); } @@ -102,59 +102,59 @@ public class AirFlowParticle extends SimpleAnimatedParticle { InWorldProcessing.Type type = source.getAirCurrent().getSegmentAt((float) distance); if (type == InWorldProcessing.Type.SPLASHING) { - setColor(ColorHelper.mixColors(0x4499FF, 0x2277FF, world.rand.nextFloat())); - setAlphaF(1f); - selectSprite(world.rand.nextInt(3)); - if (world.rand.nextFloat() < 1 / 32f) - world.addParticle(ParticleTypes.BUBBLE, posX, posY, posZ, motionX * .125f, motionY * .125f, - motionZ * .125f); - if (world.rand.nextFloat() < 1 / 32f) - world.addParticle(ParticleTypes.BUBBLE_POP, posX, posY, posZ, motionX * .125f, motionY * .125f, - motionZ * .125f); + setColor(ColorHelper.mixColors(0x4499FF, 0x2277FF, level.random.nextFloat())); + setAlpha(1f); + selectSprite(level.random.nextInt(3)); + if (level.random.nextFloat() < 1 / 32f) + level.addParticle(ParticleTypes.BUBBLE, x, y, z, xd * .125f, yd * .125f, + zd * .125f); + if (level.random.nextFloat() < 1 / 32f) + level.addParticle(ParticleTypes.BUBBLE_POP, x, y, z, xd * .125f, yd * .125f, + zd * .125f); } if (type == InWorldProcessing.Type.SMOKING) { - setColor(ColorHelper.mixColors(0x0, 0x555555, world.rand.nextFloat())); - setAlphaF(1f); - selectSprite(world.rand.nextInt(3)); - if (world.rand.nextFloat() < 1 / 32f) - world.addParticle(ParticleTypes.SMOKE, posX, posY, posZ, motionX * .125f, motionY * .125f, - motionZ * .125f); - if (world.rand.nextFloat() < 1 / 32f) - world.addParticle(ParticleTypes.LARGE_SMOKE, posX, posY, posZ, motionX * .125f, motionY * .125f, - motionZ * .125f); + setColor(ColorHelper.mixColors(0x0, 0x555555, level.random.nextFloat())); + setAlpha(1f); + selectSprite(level.random.nextInt(3)); + if (level.random.nextFloat() < 1 / 32f) + level.addParticle(ParticleTypes.SMOKE, x, y, z, xd * .125f, yd * .125f, + zd * .125f); + if (level.random.nextFloat() < 1 / 32f) + level.addParticle(ParticleTypes.LARGE_SMOKE, x, y, z, xd * .125f, yd * .125f, + zd * .125f); } if (type == InWorldProcessing.Type.BLASTING) { - setColor(ColorHelper.mixColors(0xFF4400, 0xFF8855, world.rand.nextFloat())); - setAlphaF(.5f); - selectSprite(world.rand.nextInt(3)); - if (world.rand.nextFloat() < 1 / 32f) - world.addParticle(ParticleTypes.FLAME, posX, posY, posZ, motionX * .25f, motionY * .25f, - motionZ * .25f); - if (world.rand.nextFloat() < 1 / 16f) - world.addParticle(new BlockParticleData(ParticleTypes.BLOCK, Blocks.LAVA.getDefaultState()), posX, posY, - posZ, motionX * .25f, motionY * .25f, motionZ * .25f); + setColor(ColorHelper.mixColors(0xFF4400, 0xFF8855, level.random.nextFloat())); + setAlpha(.5f); + selectSprite(level.random.nextInt(3)); + if (level.random.nextFloat() < 1 / 32f) + level.addParticle(ParticleTypes.FLAME, x, y, z, xd * .25f, yd * .25f, + zd * .25f); + if (level.random.nextFloat() < 1 / 16f) + level.addParticle(new BlockParticleData(ParticleTypes.BLOCK, Blocks.LAVA.defaultBlockState()), x, y, + z, xd * .25f, yd * .25f, zd * .25f); } if (type == null) { setColor(0xEEEEEE); - setAlphaF(.25f); + setAlpha(.25f); setSize(.2f, .2f); } } private void dissipate() { - setExpired(); + remove(); } - public int getBrightnessForRender(float partialTick) { - BlockPos blockpos = new BlockPos(this.posX, this.posY, this.posZ); - return this.world.isBlockPresent(blockpos) ? WorldRenderer.getLightmapCoordinates(world, blockpos) : 0; + public int getLightColor(float partialTick) { + BlockPos blockpos = new BlockPos(this.x, this.y, this.z); + return this.level.isLoaded(blockpos) ? WorldRenderer.getLightColor(level, blockpos) : 0; } private void selectSprite(int index) { - setSprite(field_217584_C.get(index, 8)); + setSprite(sprites.get(index, 8)); } public static class Factory implements IParticleFactory { @@ -164,9 +164,9 @@ public class AirFlowParticle extends SimpleAnimatedParticle { this.spriteSet = animatedSprite; } - public Particle makeParticle(AirFlowParticleData data, ClientWorld worldIn, double x, double y, double z, + public Particle createParticle(AirFlowParticleData data, ClientWorld worldIn, double x, double y, double z, double xSpeed, double ySpeed, double zSpeed) { - TileEntity te = worldIn.getTileEntity(new BlockPos(data.posX, data.posY, data.posZ)); + TileEntity te = worldIn.getBlockEntity(new BlockPos(data.posX, data.posY, data.posZ)); if (!(te instanceof IAirCurrentSource)) te = null; return new AirFlowParticle(worldIn, (IAirCurrentSource) te, x, y, z, this.spriteSet); diff --git a/src/main/java/com/simibubi/create/content/contraptions/particle/AirFlowParticleData.java b/src/main/java/com/simibubi/create/content/contraptions/particle/AirFlowParticleData.java index 74f6d9a32..af874fb00 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/particle/AirFlowParticleData.java +++ b/src/main/java/com/simibubi/create/content/contraptions/particle/AirFlowParticleData.java @@ -16,6 +16,8 @@ import net.minecraft.util.math.vector.Vector3i; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraft.particles.IParticleData.IDeserializer; + public class AirFlowParticleData implements IParticleData, ICustomParticleDataWithSprite { public static final Codec CODEC = RecordCodecBuilder.create(i -> @@ -26,7 +28,7 @@ public class AirFlowParticleData implements IParticleData, ICustomParticleDataWi .apply(i, AirFlowParticleData::new)); public static final IParticleData.IDeserializer DESERIALIZER = new IParticleData.IDeserializer() { - public AirFlowParticleData deserialize(ParticleType particleTypeIn, StringReader reader) + public AirFlowParticleData fromCommand(ParticleType particleTypeIn, StringReader reader) throws CommandSyntaxException { reader.expect(' '); int x = reader.readInt(); @@ -37,7 +39,7 @@ public class AirFlowParticleData implements IParticleData, ICustomParticleDataWi return new AirFlowParticleData(x, y, z); } - public AirFlowParticleData read(ParticleType particleTypeIn, PacketBuffer buffer) { + public AirFlowParticleData fromNetwork(ParticleType particleTypeIn, PacketBuffer buffer) { return new AirFlowParticleData(buffer.readInt(), buffer.readInt(), buffer.readInt()); } }; @@ -66,14 +68,14 @@ public class AirFlowParticleData implements IParticleData, ICustomParticleDataWi } @Override - public void write(PacketBuffer buffer) { + public void writeToNetwork(PacketBuffer buffer) { buffer.writeInt(posX); buffer.writeInt(posY); buffer.writeInt(posZ); } @Override - public String getParameters() { + public String writeToString() { return String.format(Locale.ROOT, "%s %d %d %d", AllParticleTypes.AIR_FLOW.parameter(), posX, posY, posZ); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/particle/AirParticle.java b/src/main/java/com/simibubi/create/content/contraptions/particle/AirParticle.java index ff51b5719..25d7d9f02 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/particle/AirParticle.java +++ b/src/main/java/com/simibubi/create/content/contraptions/particle/AirParticle.java @@ -26,14 +26,14 @@ public class AirParticle extends SimpleAnimatedParticle { protected AirParticle(ClientWorld world, AirParticleData data, double x, double y, double z, double dx, double dy, double dz, IAnimatedSprite sprite) { - super(world, x, y, z, sprite, world.rand.nextFloat() * .5f); - particleScale *= 0.75F; - canCollide = false; + super(world, x, y, z, sprite, world.random.nextFloat() * .5f); + quadSize *= 0.75F; + hasPhysics = false; - setPosition(posX, posY, posZ); - originX = (float) (prevPosX = posX); - originY = (float) (prevPosY = posY); - originZ = (float) (prevPosZ = posZ); + setPos(x, y, z); + originX = (float) (xo = x); + originY = (float) (yo = y); + originZ = (float) (zo = z); targetX = (float) (x + dx); targetY = (float) (y + dy); targetZ = (float) (z + dz); @@ -45,13 +45,13 @@ public class AirParticle extends SimpleAnimatedParticle { // speed in m/ticks double length = new Vector3d(dx, dy, dz).length(); - maxAge = Math.min((int) (length / data.speed), 60); + lifetime = Math.min((int) (length / data.speed), 60); selectSprite(7); - setAlphaF(.25f); + setAlpha(.25f); if (length == 0) { - setExpired(); - setAlphaF(0); + remove(); + setAlpha(0); } } @@ -61,15 +61,15 @@ public class AirParticle extends SimpleAnimatedParticle { @Override public void tick() { - this.prevPosX = this.posX; - this.prevPosY = this.posY; - this.prevPosZ = this.posZ; - if (this.age++ >= this.maxAge) { - this.setExpired(); + this.xo = this.x; + this.yo = this.y; + this.zo = this.z; + if (this.age++ >= this.lifetime) { + this.remove(); return; } - float progress = (float) Math.pow(((float) age) / maxAge, drag); + float progress = (float) Math.pow(((float) age) / lifetime, drag); float angle = (progress * 2 * 360 + twirlAngleOffset) % 360; Vector3d twirl = VecHelper.rotate(new Vector3d(0, twirlRadius, 0), angle, twirlAxis); @@ -77,21 +77,21 @@ public class AirParticle extends SimpleAnimatedParticle { float y = (float) (MathHelper.lerp(progress, originY, targetY) + twirl.y); float z = (float) (MathHelper.lerp(progress, originZ, targetZ) + twirl.z); - motionX = x - posX; - motionY = y - posY; - motionZ = z - posZ; + xd = x - x; + yd = y - y; + zd = z - z; - selectSpriteWithAge(field_217584_C); - this.move(this.motionX, this.motionY, this.motionZ); + setSpriteFromAge(sprites); + this.move(this.xd, this.yd, this.zd); } - public int getBrightnessForRender(float partialTick) { - BlockPos blockpos = new BlockPos(this.posX, this.posY, this.posZ); - return this.world.isBlockPresent(blockpos) ? WorldRenderer.getLightmapCoordinates(world, blockpos) : 0; + public int getLightColor(float partialTick) { + BlockPos blockpos = new BlockPos(this.x, this.y, this.z); + return this.level.isLoaded(blockpos) ? WorldRenderer.getLightColor(level, blockpos) : 0; } private void selectSprite(int index) { - setSprite(field_217584_C.get(index, 8)); + setSprite(sprites.get(index, 8)); } public static class Factory implements IParticleFactory { @@ -101,7 +101,7 @@ public class AirParticle extends SimpleAnimatedParticle { this.spriteSet = animatedSprite; } - public Particle makeParticle(AirParticleData data, ClientWorld worldIn, double x, double y, double z, double xSpeed, + public Particle createParticle(AirParticleData data, ClientWorld worldIn, double x, double y, double z, double xSpeed, double ySpeed, double zSpeed) { return new AirParticle(worldIn, data, x, y, z, xSpeed, ySpeed, zSpeed, this.spriteSet); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/particle/AirParticleData.java b/src/main/java/com/simibubi/create/content/contraptions/particle/AirParticleData.java index 7159756f8..9f214547d 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/particle/AirParticleData.java +++ b/src/main/java/com/simibubi/create/content/contraptions/particle/AirParticleData.java @@ -15,6 +15,8 @@ import net.minecraft.particles.ParticleType; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraft.particles.IParticleData.IDeserializer; + public class AirParticleData implements IParticleData, ICustomParticleDataWithSprite { public static final Codec CODEC = RecordCodecBuilder.create(i -> @@ -25,7 +27,7 @@ public class AirParticleData implements IParticleData, ICustomParticleDataWithSp public static final IParticleData.IDeserializer DESERIALIZER = new IParticleData.IDeserializer() { - public AirParticleData deserialize(ParticleType particleTypeIn, StringReader reader) + public AirParticleData fromCommand(ParticleType particleTypeIn, StringReader reader) throws CommandSyntaxException { reader.expect(' '); float drag = reader.readFloat(); @@ -34,7 +36,7 @@ public class AirParticleData implements IParticleData, ICustomParticleDataWithSp return new AirParticleData(drag, speed); } - public AirParticleData read(ParticleType particleTypeIn, PacketBuffer buffer) { + public AirParticleData fromNetwork(ParticleType particleTypeIn, PacketBuffer buffer) { return new AirParticleData(buffer.readFloat(), buffer.readFloat()); } }; @@ -57,13 +59,13 @@ public class AirParticleData implements IParticleData, ICustomParticleDataWithSp } @Override - public void write(PacketBuffer buffer) { + public void writeToNetwork(PacketBuffer buffer) { buffer.writeFloat(drag); buffer.writeFloat(speed); } @Override - public String getParameters() { + public String writeToString() { return String.format(Locale.ROOT, "%s %f %f", AllParticleTypes.AIR.parameter(), drag, speed); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/particle/CubeParticle.java b/src/main/java/com/simibubi/create/content/contraptions/particle/CubeParticle.java index f50fdf30d..bc68081d2 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/particle/CubeParticle.java +++ b/src/main/java/com/simibubi/create/content/contraptions/particle/CubeParticle.java @@ -53,7 +53,7 @@ public class CubeParticle extends Particle { private static final IParticleRenderType renderType = new IParticleRenderType() { @Override - public void beginRender(BufferBuilder builder, TextureManager textureManager) { + public void begin(BufferBuilder builder, TextureManager textureManager) { RenderSystem.disableTexture(); // transparent, additive blending @@ -72,8 +72,8 @@ public class CubeParticle extends Particle { } @Override - public void finishRender(Tessellator tessellator) { - tessellator.draw(); + public void end(Tessellator tessellator) { + tessellator.end(); RenderSystem.blendFunc(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA); RenderSystem.disableLighting(); @@ -86,9 +86,9 @@ public class CubeParticle extends Particle { public CubeParticle(ClientWorld world, double x, double y, double z, double motionX, double motionY, double motionZ) { super(world, x, y, z); - this.motionX = motionX; - this.motionY = motionY; - this.motionZ = motionZ; + this.xd = motionX; + this.yd = motionY; + this.zd = motionZ; setScale(0.2F); } @@ -99,7 +99,7 @@ public class CubeParticle extends Particle { } public void averageAge(int age) { - this.maxAge = (int) (age + (rand.nextDouble() * 2D - 1D) * 8); + this.lifetime = (int) (age + (random.nextDouble() * 2D - 1D) * 8); } public void setHot(boolean hot) { @@ -111,34 +111,34 @@ public class CubeParticle extends Particle { @Override public void tick() { if (this.hot && this.age > 0) { - if (this.prevPosY == this.posY) { + if (this.yo == this.y) { billowing = true; - field_21507 = false; // Prevent motion being ignored due to vertical collision - if (this.motionX == 0 && this.motionZ == 0) { - Vector3d diff = Vector3d.of(new BlockPos(posX, posY, posZ)).add(0.5, 0.5, 0.5).subtract(posX, posY, posZ); - this.motionX = -diff.x * 0.1; - this.motionZ = -diff.z * 0.1; + stoppedByCollision = false; // Prevent motion being ignored due to vertical collision + if (this.xd == 0 && this.zd == 0) { + Vector3d diff = Vector3d.atLowerCornerOf(new BlockPos(x, y, z)).add(0.5, 0.5, 0.5).subtract(x, y, z); + this.xd = -diff.x * 0.1; + this.zd = -diff.z * 0.1; } - this.motionX *= 1.1; - this.motionY *= 0.9; - this.motionZ *= 1.1; + this.xd *= 1.1; + this.yd *= 0.9; + this.zd *= 1.1; } else if (billowing) { - this.motionY *= 1.2; + this.yd *= 1.2; } } super.tick(); } @Override - public void buildGeometry(IVertexBuilder builder, ActiveRenderInfo renderInfo, float p_225606_3_) { - Vector3d projectedView = renderInfo.getProjectedView(); - float lerpedX = (float) (MathHelper.lerp(p_225606_3_, this.prevPosX, this.posX) - projectedView.getX()); - float lerpedY = (float) (MathHelper.lerp(p_225606_3_, this.prevPosY, this.posY) - projectedView.getY()); - float lerpedZ = (float) (MathHelper.lerp(p_225606_3_, this.prevPosZ, this.posZ) - projectedView.getZ()); + public void render(IVertexBuilder builder, ActiveRenderInfo renderInfo, float p_225606_3_) { + Vector3d projectedView = renderInfo.getPosition(); + float lerpedX = (float) (MathHelper.lerp(p_225606_3_, this.xo, this.x) - projectedView.x()); + float lerpedY = (float) (MathHelper.lerp(p_225606_3_, this.yo, this.y) - projectedView.y()); + float lerpedZ = (float) (MathHelper.lerp(p_225606_3_, this.zo, this.z) - projectedView.z()); // int light = getBrightnessForRender(p_225606_3_); int light = 15728880;// 15<<20 && 15<<4 - double ageMultiplier = 1 - Math.pow(age, 3) / Math.pow(maxAge, 3); + double ageMultiplier = 1 - Math.pow(age, 3) / Math.pow(lifetime, 3); for (int i = 0; i < 6; i++) { // 6 faces to a cube @@ -151,9 +151,9 @@ public class CubeParticle extends Particle { Vector3d normal = CUBE_NORMALS[i]; builder.vertex(vec.x, vec.y, vec.z) - .color(particleRed, particleGreen, particleBlue, particleAlpha) - .texture(0, 0) - .light(light) + .color(rCol, gCol, bCol, alpha) + .uv(0, 0) + .uv2(light) .normal((float) normal.x, (float) normal.y, (float) normal.z) .endVertex(); } @@ -170,7 +170,7 @@ public class CubeParticle extends Particle { public Factory() {} @Override - public Particle makeParticle(CubeParticleData data, ClientWorld world, double x, double y, double z, double motionX, + public Particle createParticle(CubeParticleData data, ClientWorld world, double x, double y, double z, double motionX, double motionY, double motionZ) { CubeParticle particle = new CubeParticle(world, x, y, z, motionX, motionY, motionZ); particle.setColor(data.r, data.g, data.b); diff --git a/src/main/java/com/simibubi/create/content/contraptions/particle/CubeParticleData.java b/src/main/java/com/simibubi/create/content/contraptions/particle/CubeParticleData.java index 442a68b49..39c21b7b9 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/particle/CubeParticleData.java +++ b/src/main/java/com/simibubi/create/content/contraptions/particle/CubeParticleData.java @@ -15,6 +15,8 @@ import net.minecraft.particles.ParticleType; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraft.particles.IParticleData.IDeserializer; + public class CubeParticleData implements IParticleData, ICustomParticleData { public static final Codec CODEC = RecordCodecBuilder.create(i -> @@ -29,7 +31,7 @@ public class CubeParticleData implements IParticleData, ICustomParticleData DESERIALIZER = new IParticleData.IDeserializer() { @Override - public CubeParticleData deserialize(ParticleType type, StringReader reader) throws CommandSyntaxException { + public CubeParticleData fromCommand(ParticleType type, StringReader reader) throws CommandSyntaxException { reader.expect(' '); float r = reader.readFloat(); reader.expect(' '); @@ -46,7 +48,7 @@ public class CubeParticleData implements IParticleData, ICustomParticleData type, PacketBuffer buffer) { + public CubeParticleData fromNetwork(ParticleType type, PacketBuffer buffer) { return new CubeParticleData(buffer.readFloat(), buffer.readFloat(), buffer.readFloat(), buffer.readFloat(), buffer.readInt(), buffer.readBoolean()); } }; @@ -93,7 +95,7 @@ public class CubeParticleData implements IParticleData, ICustomParticleData> 16 & 255; j = j + (int) (f * 15.0F * 16.0F); @@ -76,20 +76,20 @@ public class HeaterParticle extends SimpleAnimatedParticle { @Override public void tick() { - this.prevPosX = this.posX; - this.prevPosY = this.posY; - this.prevPosZ = this.posZ; - if (this.age++ >= this.maxAge) { - this.setExpired(); + this.xo = this.x; + this.yo = this.y; + this.zo = this.z; + if (this.age++ >= this.lifetime) { + this.remove(); } else { - this.selectSpriteWithAge(animatedSprite); - this.move(this.motionX, this.motionY, this.motionZ); - this.motionX *= (double) 0.96F; - this.motionY *= (double) 0.96F; - this.motionZ *= (double) 0.96F; + this.setSpriteFromAge(animatedSprite); + this.move(this.xd, this.yd, this.zd); + this.xd *= (double) 0.96F; + this.yd *= (double) 0.96F; + this.zd *= (double) 0.96F; if (this.onGround) { - this.motionX *= (double) 0.7F; - this.motionZ *= (double) 0.7F; + this.xd *= (double) 0.7F; + this.zd *= (double) 0.7F; } } } @@ -102,7 +102,7 @@ public class HeaterParticle extends SimpleAnimatedParticle { } @Override - public Particle makeParticle(HeaterParticleData data, ClientWorld worldIn, double x, double y, double z, double vx, + public Particle createParticle(HeaterParticleData data, ClientWorld worldIn, double x, double y, double z, double vx, double vy, double vz) { return new HeaterParticle(worldIn, data.r, data.g, data.b, x, y, z, vx, vy, vz, this.spriteSet); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/particle/HeaterParticleData.java b/src/main/java/com/simibubi/create/content/contraptions/particle/HeaterParticleData.java index a547ba995..a9a08dfba 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/particle/HeaterParticleData.java +++ b/src/main/java/com/simibubi/create/content/contraptions/particle/HeaterParticleData.java @@ -18,6 +18,8 @@ import net.minecraft.particles.ParticleType; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraft.particles.IParticleData.IDeserializer; + @ParametersAreNonnullByDefault @MethodsReturnNonnullByDefault public class HeaterParticleData implements IParticleData, ICustomParticleDataWithSprite { @@ -32,7 +34,7 @@ public class HeaterParticleData implements IParticleData, ICustomParticleDataWit public static final IParticleData.IDeserializer DESERIALIZER = new IParticleData.IDeserializer() { @Override - public HeaterParticleData deserialize(ParticleType arg0, StringReader reader) + public HeaterParticleData fromCommand(ParticleType arg0, StringReader reader) throws CommandSyntaxException { reader.expect(' '); float r = reader.readFloat(); @@ -44,7 +46,7 @@ public class HeaterParticleData implements IParticleData, ICustomParticleDataWit } @Override - public HeaterParticleData read(ParticleType type, PacketBuffer buffer) { + public HeaterParticleData fromNetwork(ParticleType type, PacketBuffer buffer) { return new HeaterParticleData(buffer.readFloat(), buffer.readFloat(), buffer.readFloat()); } }; @@ -80,7 +82,7 @@ public class HeaterParticleData implements IParticleData, ICustomParticleDataWit } @Override - public String getParameters() { + public String writeToString() { return String.format(Locale.ROOT, "%s %f %f %f", AllParticleTypes.HEATER_PARTICLE.parameter(), r, g, b); } @@ -90,7 +92,7 @@ public class HeaterParticleData implements IParticleData, ICustomParticleDataWit } @Override - public void write(PacketBuffer buffer) { + public void writeToNetwork(PacketBuffer buffer) { buffer.writeFloat(r); buffer.writeFloat(g); buffer.writeFloat(b); diff --git a/src/main/java/com/simibubi/create/content/contraptions/particle/ICustomParticleData.java b/src/main/java/com/simibubi/create/content/contraptions/particle/ICustomParticleData.java index 8e067799c..8d76c0788 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/particle/ICustomParticleData.java +++ b/src/main/java/com/simibubi/create/content/contraptions/particle/ICustomParticleData.java @@ -20,7 +20,7 @@ public interface ICustomParticleData { return new ParticleType(false, getDeserializer()) { @Override - public Codec getCodec() { + public Codec codec() { return ICustomParticleData.this.getCodec(this); } }; @@ -31,7 +31,7 @@ public interface ICustomParticleData { @OnlyIn(Dist.CLIENT) public default void register(ParticleType type, ParticleManager particles) { - particles.registerFactory(type, getFactory()); + particles.register(type, getFactory()); } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/particle/ICustomParticleDataWithSprite.java b/src/main/java/com/simibubi/create/content/contraptions/particle/ICustomParticleDataWithSprite.java index 65dd04908..30c554549 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/particle/ICustomParticleDataWithSprite.java +++ b/src/main/java/com/simibubi/create/content/contraptions/particle/ICustomParticleDataWithSprite.java @@ -19,7 +19,7 @@ public interface ICustomParticleDataWithSprite extends return new ParticleType(false, getDeserializer()) { @Override - public Codec getCodec() { + public Codec codec() { return ICustomParticleDataWithSprite.this.getCodec(this); } }; @@ -37,7 +37,7 @@ public interface ICustomParticleDataWithSprite extends @Override @OnlyIn(Dist.CLIENT) public default void register(ParticleType type, ParticleManager particles) { - particles.registerFactory(type, getMetaFactory()); + particles.register(type, getMetaFactory()); } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/particle/RotationIndicatorParticle.java b/src/main/java/com/simibubi/create/content/contraptions/particle/RotationIndicatorParticle.java index ffb2f1996..28b6290b9 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/particle/RotationIndicatorParticle.java +++ b/src/main/java/com/simibubi/create/content/contraptions/particle/RotationIndicatorParticle.java @@ -31,15 +31,15 @@ public class RotationIndicatorParticle extends SimpleAnimatedParticle { private RotationIndicatorParticle(ClientWorld world, double x, double y, double z, int color, float radius1, float radius2, float speed, Axis axis, int lifeSpan, boolean isVisible, IAnimatedSprite sprite) { super(world, x, y, z, sprite, 0); - this.motionX = 0; - this.motionY = 0; - this.motionZ = 0; + this.xd = 0; + this.yd = 0; + this.zd = 0; this.origin = new Vector3d(x, y, z); - this.particleScale *= 0.75F; - this.maxAge = lifeSpan + this.rand.nextInt(32); - this.setColorFade(color); + this.quadSize *= 0.75F; + this.lifetime = lifeSpan + this.random.nextInt(32); + this.setFadeColor(color); this.setColor(ColorHelper.mixColors(color, 0xFFFFFF, .5f)); - this.selectSpriteWithAge(sprite); + this.setSpriteFromAge(sprite); this.radius1 = radius1; this.radius = radius1; this.radius2 = radius2; @@ -48,9 +48,9 @@ public class RotationIndicatorParticle extends SimpleAnimatedParticle { this.isVisible = isVisible; this.offset = axis.isHorizontal() ? new Vector3d(0, 1, 0) : new Vector3d(1, 0, 0); move(0, 0, 0); - this.prevPosX = this.posX; - this.prevPosY = this.posY; - this.prevPosZ = this.posZ; + this.xo = this.x; + this.yo = this.y; + this.zo = this.z; } @Override @@ -60,21 +60,21 @@ public class RotationIndicatorParticle extends SimpleAnimatedParticle { } @Override - public void buildGeometry(IVertexBuilder buffer, ActiveRenderInfo renderInfo, float partialTicks) { + public void render(IVertexBuilder buffer, ActiveRenderInfo renderInfo, float partialTicks) { if (!isVisible) return; - super.buildGeometry(buffer, renderInfo, partialTicks); + super.render(buffer, renderInfo, partialTicks); } public void move(double x, double y, double z) { - float time = AnimationTickHolder.getTicks(world); - float angle = (float) ((time * speed) % 360) - (speed / 2 * age * (((float) age) / maxAge)); + float time = AnimationTickHolder.getTicks(level); + float angle = (float) ((time * speed) % 360) - (speed / 2 * age * (((float) age) / lifetime)); if (speed < 0 && axis.isVertical()) angle += 180; Vector3d position = VecHelper.rotate(this.offset.scale(radius), angle, axis).add(origin); - posX = position.x; - posY = position.y; - posZ = position.z; + x = position.x; + y = position.y; + z = position.z; } public static class Factory implements IParticleFactory { @@ -84,11 +84,11 @@ public class RotationIndicatorParticle extends SimpleAnimatedParticle { this.spriteSet = animatedSprite; } - public Particle makeParticle(RotationIndicatorParticleData data, ClientWorld worldIn, double x, double y, double z, + public Particle createParticle(RotationIndicatorParticleData data, ClientWorld worldIn, double x, double y, double z, double xSpeed, double ySpeed, double zSpeed) { Minecraft mc = Minecraft.getInstance(); ClientPlayerEntity player = mc.player; - boolean visible = worldIn != mc.world || player != null && GogglesItem.canSeeParticles(player); + boolean visible = worldIn != mc.level || player != null && GogglesItem.canSeeParticles(player); return new RotationIndicatorParticle(worldIn, x, y, z, data.color, data.radius1, data.radius2, data.speed, data.getAxis(), data.lifeSpan, visible, this.spriteSet); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/particle/RotationIndicatorParticleData.java b/src/main/java/com/simibubi/create/content/contraptions/particle/RotationIndicatorParticleData.java index 23fb007e9..f69c5f031 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/particle/RotationIndicatorParticleData.java +++ b/src/main/java/com/simibubi/create/content/contraptions/particle/RotationIndicatorParticleData.java @@ -19,6 +19,8 @@ import net.minecraft.util.Direction.Axis; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraft.particles.IParticleData.IDeserializer; + public class RotationIndicatorParticleData implements IParticleData, ICustomParticleDataWithSprite { @@ -58,7 +60,7 @@ public class RotationIndicatorParticleData public static final IParticleData.IDeserializer DESERIALIZER = new IParticleData.IDeserializer() { - public RotationIndicatorParticleData deserialize(ParticleType particleTypeIn, + public RotationIndicatorParticleData fromCommand(ParticleType particleTypeIn, StringReader reader) throws CommandSyntaxException { reader.expect(' '); int color = reader.readInt(); @@ -75,7 +77,7 @@ public class RotationIndicatorParticleData return new RotationIndicatorParticleData(color, speed, rad1, rad2, lifeSpan, axis); } - public RotationIndicatorParticleData read(ParticleType particleTypeIn, + public RotationIndicatorParticleData fromNetwork(ParticleType particleTypeIn, PacketBuffer buffer) { return new RotationIndicatorParticleData(buffer.readInt(), buffer.readFloat(), buffer.readFloat(), buffer.readFloat(), buffer.readInt(), buffer.readChar()); @@ -113,7 +115,7 @@ public class RotationIndicatorParticleData } @Override - public void write(PacketBuffer buffer) { + public void writeToNetwork(PacketBuffer buffer) { buffer.writeInt(color); buffer.writeFloat(speed); buffer.writeFloat(radius1); @@ -123,7 +125,7 @@ public class RotationIndicatorParticleData } @Override - public String getParameters() { + public String writeToString() { return String.format(Locale.ROOT, "%s %d %.2f %.2f %.2f %d %c", AllParticleTypes.ROTATION_INDICATOR.parameter(), color, speed, radius1, radius2, lifeSpan, axis); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/processing/BasinBlock.java b/src/main/java/com/simibubi/create/content/contraptions/processing/BasinBlock.java index 3829c5339..61ada67e1 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/processing/BasinBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/processing/BasinBlock.java @@ -48,13 +48,15 @@ import net.minecraftforge.items.IItemHandlerModifiable; import net.minecraftforge.items.ItemHandlerHelper; import net.minecraftforge.items.ItemStackHandler; +import net.minecraft.block.AbstractBlock.Properties; + public class BasinBlock extends Block implements ITE, IWrenchable { - public static final DirectionProperty FACING = BlockStateProperties.FACING_EXCEPT_UP; + public static final DirectionProperty FACING = BlockStateProperties.FACING_HOPPER; public BasinBlock(Properties p_i48440_1_) { super(p_i48440_1_); - setDefaultState(getDefaultState().with(FACING, Direction.DOWN)); + registerDefaultState(defaultBlockState().setValue(FACING, Direction.DOWN)); } @Override @@ -63,13 +65,13 @@ public class BasinBlock extends Block implements ITE, IWrenchab } @Override - protected void fillStateContainer(Builder p_206840_1_) { - super.fillStateContainer(p_206840_1_.add(FACING)); + protected void createBlockStateDefinition(Builder p_206840_1_) { + super.createBlockStateDefinition(p_206840_1_.add(FACING)); } @Override - public boolean isValidPosition(BlockState state, IWorldReader world, BlockPos pos) { - TileEntity tileEntity = world.getTileEntity(pos.up()); + public boolean canSurvive(BlockState state, IWorldReader world, BlockPos pos) { + TileEntity tileEntity = world.getBlockEntity(pos.above()); if (tileEntity instanceof BasinOperatingTileEntity) return false; return true; @@ -82,15 +84,15 @@ public class BasinBlock extends Block implements ITE, IWrenchab @Override public ActionResultType onWrenched(BlockState state, ItemUseContext context) { - if (!context.getWorld().isRemote) - withTileEntityDo(context.getWorld(), context.getPos(), bte -> bte.onWrenched(context.getFace())); + if (!context.getLevel().isClientSide) + withTileEntityDo(context.getLevel(), context.getClickedPos(), bte -> bte.onWrenched(context.getClickedFace())); return ActionResultType.SUCCESS; } @Override - public ActionResultType onUse(BlockState state, World worldIn, BlockPos pos, PlayerEntity player, Hand handIn, + public ActionResultType use(BlockState state, World worldIn, BlockPos pos, PlayerEntity player, Hand handIn, BlockRayTraceResult hit) { - ItemStack heldItem = player.getHeldItem(handIn); + ItemStack heldItem = player.getItemInHand(handIn); return onTileEntityUse(worldIn, pos, te -> { if (!heldItem.isEmpty()) { @@ -124,7 +126,7 @@ public class BasinBlock extends Block implements ITE, IWrenchab success = true; } if (success) - worldIn.playSound(null, pos, SoundEvents.ENTITY_ITEM_PICKUP, SoundCategory.PLAYERS, .2f, + worldIn.playSound(null, pos, SoundEvents.ITEM_PICKUP, SoundCategory.PLAYERS, .2f, 1f + Create.RANDOM.nextFloat()); te.onEmptied(); return ActionResultType.SUCCESS; @@ -132,16 +134,16 @@ public class BasinBlock extends Block implements ITE, IWrenchab } @Override - public void onLanded(IBlockReader worldIn, Entity entityIn) { - super.onLanded(worldIn, entityIn); - if (!AllBlocks.BASIN.has(worldIn.getBlockState(entityIn.getBlockPos()))) + public void updateEntityAfterFallOn(IBlockReader worldIn, Entity entityIn) { + super.updateEntityAfterFallOn(worldIn, entityIn); + if (!AllBlocks.BASIN.has(worldIn.getBlockState(entityIn.blockPosition()))) return; if (!(entityIn instanceof ItemEntity)) return; if (!entityIn.isAlive()) return; ItemEntity itemEntity = (ItemEntity) entityIn; - withTileEntityDo(worldIn, entityIn.getBlockPos(), te -> { + withTileEntityDo(worldIn, entityIn.blockPosition(), te -> { // Tossed items bypass the quarter-stack limit te.inputInventory.withMaxStackSize(64); @@ -151,9 +153,9 @@ public class BasinBlock extends Block implements ITE, IWrenchab if (insertItem.isEmpty()) { itemEntity.remove(); - if (!itemEntity.world.isRemote) - AllTriggers.triggerForNearbyPlayers(AllTriggers.BASIN_THROW, itemEntity.world, - itemEntity.getBlockPos(), 3); + if (!itemEntity.level.isClientSide) + AllTriggers.triggerForNearbyPlayers(AllTriggers.BASIN_THROW, itemEntity.level, + itemEntity.blockPosition(), 3); return; } @@ -162,7 +164,7 @@ public class BasinBlock extends Block implements ITE, IWrenchab } @Override - public VoxelShape getRaytraceShape(BlockState p_199600_1_, IBlockReader p_199600_2_, BlockPos p_199600_3_) { + public VoxelShape getInteractionShape(BlockState p_199600_1_, IBlockReader p_199600_2_, BlockPos p_199600_3_) { return AllShapes.BASIN_RAYTRACE_SHAPE; } @@ -179,25 +181,25 @@ public class BasinBlock extends Block implements ITE, IWrenchab } @Override - public void onReplaced(BlockState state, World worldIn, BlockPos pos, BlockState newState, boolean isMoving) { + public void onRemove(BlockState state, World worldIn, BlockPos pos, BlockState newState, boolean isMoving) { if (!state.hasTileEntity() || state.getBlock() == newState.getBlock()) return; TileEntityBehaviour.destroy(worldIn, pos, FilteringBehaviour.TYPE); withTileEntityDo(worldIn, pos, te -> { ItemHelper.dropContents(worldIn, pos, te.inputInventory); ItemHelper.dropContents(worldIn, pos, te.outputInventory); - te.spoutputBuffer.forEach(is -> Block.spawnAsEntity(worldIn, pos, is)); + te.spoutputBuffer.forEach(is -> Block.popResource(worldIn, pos, is)); }); - worldIn.removeTileEntity(pos); + worldIn.removeBlockEntity(pos); } @Override - public boolean hasComparatorInputOverride(BlockState state) { + public boolean hasAnalogOutputSignal(BlockState state) { return true; } @Override - public int getComparatorInputOverride(BlockState blockState, World worldIn, BlockPos pos) { + public int getAnalogOutputSignal(BlockState blockState, World worldIn, BlockPos pos) { return getTileEntityOptional(worldIn, pos).map(BasinTileEntity::getInputInventory) .map(ItemHelper::calcRedstoneFromInventory) .orElse(0); @@ -209,8 +211,8 @@ public class BasinBlock extends Block implements ITE, IWrenchab } public static boolean canOutputTo(IBlockReader world, BlockPos basinPos, Direction direction) { - BlockPos neighbour = basinPos.offset(direction); - BlockPos output = neighbour.down(); + BlockPos neighbour = basinPos.relative(direction); + BlockPos output = neighbour.below(); BlockState blockState = world.getBlockState(neighbour); if (FunnelBlock.isFunnel(blockState)) { @@ -220,7 +222,7 @@ public class BasinBlock extends Block implements ITE, IWrenchab .isEmpty()) { return false; } else { - TileEntity tileEntity = world.getTileEntity(output); + TileEntity tileEntity = world.getBlockEntity(output); if (tileEntity instanceof BeltTileEntity) { BeltTileEntity belt = (BeltTileEntity) tileEntity; return belt.getSpeed() == 0 || belt.getMovementFacing() != direction.getOpposite(); @@ -235,7 +237,7 @@ public class BasinBlock extends Block implements ITE, IWrenchab } @Override - public boolean allowsMovement(BlockState state, IBlockReader reader, BlockPos pos, PathType type) { + public boolean isPathfindable(BlockState state, IBlockReader reader, BlockPos pos, PathType type) { return false; } diff --git a/src/main/java/com/simibubi/create/content/contraptions/processing/BasinGenerator.java b/src/main/java/com/simibubi/create/content/contraptions/processing/BasinGenerator.java index fe96055ac..5df06ac99 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/processing/BasinGenerator.java +++ b/src/main/java/com/simibubi/create/content/contraptions/processing/BasinGenerator.java @@ -18,13 +18,13 @@ public class BasinGenerator extends SpecialBlockStateGen { @Override protected int getYRotation(BlockState state) { - return horizontalAngle(state.get(BasinBlock.FACING)); + return horizontalAngle(state.getValue(BasinBlock.FACING)); } @Override public ModelFile getModel(DataGenContext ctx, RegistrateBlockstateProvider prov, BlockState state) { - if (state.get(BasinBlock.FACING).getAxis().isVertical()) + if (state.getValue(BasinBlock.FACING).getAxis().isVertical()) return AssetLookup.partialBaseModel(ctx, prov); return AssetLookup.partialBaseModel(ctx, prov, "directional"); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/processing/BasinMovementBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/processing/BasinMovementBehaviour.java index 8c51a8fa8..1bf64f5ae 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/processing/BasinMovementBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/processing/BasinMovementBehaviour.java @@ -31,9 +31,9 @@ public class BasinMovementBehaviour extends MovementBehaviour { public void tick(MovementContext context) { super.tick(context); if (context.temporaryData == null || (boolean) context.temporaryData) { - Vector3d facingVec = context.rotation.apply(Vector3d.of(Direction.UP.getDirectionVec())); + Vector3d facingVec = context.rotation.apply(Vector3d.atLowerCornerOf(Direction.UP.getNormal())); facingVec.normalize(); - if (Direction.getFacingFromVector(facingVec.x, facingVec.y, facingVec.z) == Direction.DOWN) + if (Direction.getNearest(facingVec.x, facingVec.y, facingVec.z) == Direction.DOWN) dump(context, facingVec); } } @@ -46,8 +46,8 @@ public class BasinMovementBehaviour extends MovementBehaviour { continue; ItemEntity itemEntity = new ItemEntity(context.world, context.position.x, context.position.y, context.position.z, itemStackHandler.getStackInSlot(i)); - itemEntity.setMotion(facingVec.scale(.05)); - context.world.addEntity(itemEntity); + itemEntity.setDeltaMovement(facingVec.scale(.05)); + context.world.addFreshEntity(itemEntity); itemStackHandler.setStackInSlot(i, ItemStack.EMPTY); } context.tileData.put(key, itemStackHandler.serializeNBT()); diff --git a/src/main/java/com/simibubi/create/content/contraptions/processing/BasinOperatingTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/processing/BasinOperatingTileEntity.java index 7710ca28e..9eae5b034 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/processing/BasinOperatingTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/processing/BasinOperatingTileEntity.java @@ -61,7 +61,7 @@ public abstract class BasinOperatingTileEntity extends KineticTileEntity { return true; if (isRunning()) return true; - if (world == null || world.isRemote) + if (level == null || level.isClientSide) return true; if (!getBasin().filter(BasinTileEntity::canContinueProcessing) .isPresent()) @@ -105,8 +105,8 @@ public abstract class BasinOperatingTileEntity extends KineticTileEntity { if (!BasinRecipe.apply(basin, currentRecipe)) return; Optional processedRecipeTrigger = getProcessedRecipeTrigger(); - if (world != null && !world.isRemote && processedRecipeTrigger.isPresent()) - AllTriggers.triggerForNearbyPlayers(processedRecipeTrigger.get(), world, pos, 4); + if (level != null && !level.isClientSide && processedRecipeTrigger.isPresent()) + AllTriggers.triggerForNearbyPlayers(processedRecipeTrigger.get(), level, worldPosition, 4); basin.inputTank.sendDataImmediately(); // Continue mixing @@ -119,7 +119,7 @@ public abstract class BasinOperatingTileEntity extends KineticTileEntity { } protected List> getMatchingRecipes() { - List> list = RecipeFinder.get(getRecipeCacheKey(), world, this::matchStaticFilters); + List> list = RecipeFinder.get(getRecipeCacheKey(), level, this::matchStaticFilters); return list.stream() .filter(this::matchBasinRecipe) .sorted((r1, r2) -> r2.getIngredients() @@ -132,9 +132,9 @@ public abstract class BasinOperatingTileEntity extends KineticTileEntity { protected abstract void onBasinRemoved(); protected Optional getBasin() { - if (world == null) + if (level == null) return Optional.empty(); - TileEntity basinTE = world.getTileEntity(pos.down(2)); + TileEntity basinTE = level.getBlockEntity(worldPosition.below(2)); if (!(basinTE instanceof BasinTileEntity)) return Optional.empty(); return Optional.of((BasinTileEntity) basinTE); 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 80e7a6349..a45124772 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 @@ -35,7 +35,7 @@ public class BasinRecipe extends ProcessingRecipe { if (filter == null) return false; - boolean filterTest = filter.test(recipe.getRecipeOutput()); + boolean filterTest = filter.test(recipe.getResultItem()); if (recipe instanceof BasinRecipe) { BasinRecipe basinRecipe = (BasinRecipe) recipe; if (basinRecipe.getRollableResults() @@ -66,9 +66,9 @@ public class BasinRecipe extends ProcessingRecipe { if (availableItems == null || availableFluids == null) return false; - HeatLevel heat = BasinTileEntity.getHeatLevelOf(basin.getWorld() - .getBlockState(basin.getPos() - .down(1))); + HeatLevel heat = BasinTileEntity.getHeatLevelOf(basin.getLevel() + .getBlockState(basin.getBlockPos() + .below(1))); if (isBasinRecipe && !((BasinRecipe) recipe).getRequiredHeat() .testBlazeBurner(heat)) return false; @@ -77,7 +77,7 @@ public class BasinRecipe extends ProcessingRecipe { List recipeOutputFluids = new ArrayList<>(); List ingredients = new LinkedList<>(recipe.getIngredients()); - ingredients.sort(Comparator.comparingInt(i -> i.getMatchingStacks().length)); + ingredients.sort(Comparator.comparingInt(i -> i.getItems().length)); List fluidIngredients = isBasinRecipe ? ((BasinRecipe) recipe).getFluidIngredients() : Collections.emptyList(); @@ -101,7 +101,7 @@ public class BasinRecipe extends ProcessingRecipe { continue; // Catalyst items are never consumed if (extracted.hasContainerItem() && extracted.getContainerItem() - .isItemEqual(extracted)) + .sameItem(extracted)) continue Ingredients; if (!simulate) availableItems.extractItem(slot, 1, false); @@ -155,7 +155,7 @@ public class BasinRecipe extends ProcessingRecipe { recipeOutputItems.addAll(((BasinRecipe) recipe).rollResults()); recipeOutputFluids.addAll(((BasinRecipe) recipe).getFluidResults()); } else - recipeOutputItems.add(recipe.getRecipeOutput()); + recipeOutputItems.add(recipe.getResultItem()); } if (!basin.acceptOutputs(recipeOutputItems, recipeOutputFluids, simulate)) @@ -168,7 +168,7 @@ public class BasinRecipe extends ProcessingRecipe { public static BasinRecipe convertShapeless(IRecipe recipe) { BasinRecipe basinRecipe = new ProcessingRecipeBuilder<>(BasinRecipe::new, recipe.getId()).withItemIngredients(recipe.getIngredients()) - .withSingleItemOutput(recipe.getRecipeOutput()) + .withSingleItemOutput(recipe.getResultItem()) .build(); return basinRecipe; } diff --git a/src/main/java/com/simibubi/create/content/contraptions/processing/BasinRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/processing/BasinRenderer.java index c19142761..4f13b695e 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/processing/BasinRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/processing/BasinRenderer.java @@ -42,9 +42,9 @@ public class BasinRenderer extends SmartTileEntityRenderer { float fluidLevel = renderFluids(basin, partialTicks, ms, buffer, light, overlay); float level = MathHelper.clamp(fluidLevel - .3f, .125f, .6f); - ms.push(); + ms.pushPose(); - BlockPos pos = basin.getPos(); + BlockPos pos = basin.getBlockPos(); ms.translate(.5, .2f, .5); MatrixStacker.of(ms) .rotateY(basin.ingredientRotation.getValue(partialTicks)); @@ -68,12 +68,12 @@ public class BasinRenderer extends SmartTileEntityRenderer { if (stack.isEmpty()) continue; - ms.push(); + ms.pushPose(); if (fluidLevel > 0) { ms.translate(0, (MathHelper.sin( - AnimationTickHolder.getRenderTime(basin.getWorld()) / 12f + anglePartition * itemCount) + 1.5f) + AnimationTickHolder.getRenderTime(basin.getLevel()) / 12f + anglePartition * itemCount) + 1.5f) * 1 / 32f, 0); } @@ -85,34 +85,34 @@ public class BasinRenderer extends SmartTileEntityRenderer { .rotateX(65); for (int i = 0; i <= stack.getCount() / 8; i++) { - ms.push(); + ms.pushPose(); Vector3d vec = VecHelper.offsetRandomly(Vector3d.ZERO, r, 1 / 16f); ms.translate(vec.x, vec.y, vec.z); renderItem(ms, buffer, light, overlay, stack); - ms.pop(); + ms.popPose(); } - ms.pop(); + ms.popPose(); itemCount--; } - ms.pop(); + ms.popPose(); BlockState blockState = basin.getBlockState(); if (!(blockState.getBlock() instanceof BasinBlock)) return; - Direction direction = blockState.get(BasinBlock.FACING); + Direction direction = blockState.getValue(BasinBlock.FACING); if (direction == Direction.DOWN) return; - Vector3d directionVec = Vector3d.of(direction.getDirectionVec()); + Vector3d directionVec = Vector3d.atLowerCornerOf(direction.getNormal()); Vector3d outVec = VecHelper.getCenterOf(BlockPos.ZERO) .add(directionVec.scale(.55) .subtract(0, 1 / 2f, 0)); - boolean outToBasin = basin.getWorld() - .getBlockState(basin.getPos() - .offset(direction)) + boolean outToBasin = basin.getLevel() + .getBlockState(basin.getBlockPos() + .relative(direction)) .getBlock() instanceof BasinBlock; for (IntAttached intAttached : basin.visualizedOutputItems) { @@ -121,7 +121,7 @@ public class BasinRenderer extends SmartTileEntityRenderer { if (!outToBasin && progress > .35f) continue; - ms.push(); + ms.pushPose(); MatrixStacker.of(ms) .translate(outVec) .translate(new Vector3d(0, Math.max(-.55f, -(progress * progress * 2)), 0)) @@ -129,14 +129,14 @@ public class BasinRenderer extends SmartTileEntityRenderer { .rotateY(AngleHelper.horizontalAngle(direction)) .rotateX(progress * 180); renderItem(ms, buffer, light, overlay, intAttached.getValue()); - ms.pop(); + ms.popPose(); } } protected void renderItem(MatrixStack ms, IRenderTypeBuffer buffer, int light, int overlay, ItemStack stack) { Minecraft.getInstance() .getItemRenderer() - .renderItem(stack, TransformType.GROUND, light, overlay, ms, buffer); + .renderStatic(stack, TransformType.GROUND, light, overlay, ms, buffer); } protected float renderFluids(BasinTileEntity basin, float partialTicks, MatrixStack ms, IRenderTypeBuffer buffer, diff --git a/src/main/java/com/simibubi/create/content/contraptions/processing/BasinTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/processing/BasinTileEntity.java index 91e3b3c4c..e71fa7d2b 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/processing/BasinTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/processing/BasinTileEntity.java @@ -152,7 +152,7 @@ public class BasinTileEntity extends SmartTileEntity implements IHaveGoggleInfor preferredSpoutput = NBTHelper.readEnum(compound, "PreferredSpoutput", Direction.class); disabledSpoutputs.clear(); ListNBT disabledList = compound.getList("DisabledSpoutput", NBT.TAG_STRING); - disabledList.forEach(d -> disabledSpoutputs.add(Direction.valueOf(((StringNBT) d).getString()))); + disabledList.forEach(d -> disabledSpoutputs.add(Direction.valueOf(((StringNBT) d).getAsString()))); spoutputBuffer = NBTHelper.readItemList(compound.getList("Overflow", NBT.TAG_COMPOUND)); spoutputFluidBuffer = NBTHelper.readCompoundList(compound.getList("FluidOverflow", NBT.TAG_COMPOUND), FluidStack::loadFluidStackFromNBT); @@ -161,7 +161,7 @@ public class BasinTileEntity extends SmartTileEntity implements IHaveGoggleInfor return; NBTHelper.iterateCompoundList(compound.getList("VisualizedItems", NBT.TAG_COMPOUND), - c -> visualizedOutputItems.add(IntAttached.with(OUTPUT_ANIMATION_TIME, ItemStack.read(c)))); + c -> visualizedOutputItems.add(IntAttached.with(OUTPUT_ANIMATION_TIME, ItemStack.of(c)))); NBTHelper.iterateCompoundList(compound.getList("VisualizedFluids", NBT.TAG_COMPOUND), c -> visualizedOutputFluids .add(IntAttached.with(OUTPUT_ANIMATION_TIME, FluidStack.loadFluidStackFromNBT(c)))); @@ -176,7 +176,7 @@ public class BasinTileEntity extends SmartTileEntity implements IHaveGoggleInfor if (preferredSpoutput != null) NBTHelper.writeEnum(compound, "PreferredSpoutput", preferredSpoutput); ListNBT disabledList = new ListNBT(); - disabledSpoutputs.forEach(d -> disabledList.add(StringNBT.of(d.name()))); + disabledSpoutputs.forEach(d -> disabledList.add(StringNBT.valueOf(d.name()))); compound.put("DisabledSpoutput", disabledList); compound.put("Overflow", NBTHelper.writeItemList(spoutputBuffer)); compound.put("FluidOverflow", @@ -198,11 +198,11 @@ public class BasinTileEntity extends SmartTileEntity implements IHaveGoggleInfor } @Override - public void remove() { + public void setRemoved() { onEmptied(); itemCapability.invalidate(); fluidCapability.invalidate(); - super.remove(); + super.setRemoved(); } @Nonnull @@ -224,10 +224,10 @@ public class BasinTileEntity extends SmartTileEntity implements IHaveGoggleInfor public void lazyTick() { super.lazyTick(); updateSpoutput(); - if (!world.isRemote) + if (!level.isClientSide) return; - TileEntity tileEntity = world.getTileEntity(pos.up(2)); + TileEntity tileEntity = level.getBlockEntity(worldPosition.above(2)); if (!(tileEntity instanceof MechanicalMixerTileEntity)) { setAreFluidsMoving(false); return; @@ -238,7 +238,7 @@ public class BasinTileEntity extends SmartTileEntity implements IHaveGoggleInfor public void onWrenched(Direction face) { BlockState blockState = getBlockState(); - Direction currentFacing = blockState.get(BasinBlock.FACING); + Direction currentFacing = blockState.getValue(BasinBlock.FACING); disabledSpoutputs.remove(face); if (currentFacing == face) { @@ -252,41 +252,41 @@ public class BasinTileEntity extends SmartTileEntity implements IHaveGoggleInfor } private void updateSpoutput() { - if (world.isRemote) + if (level.isClientSide) return; BlockState blockState = getBlockState(); - Direction currentFacing = blockState.get(BasinBlock.FACING); + Direction currentFacing = blockState.getValue(BasinBlock.FACING); if (currentFacing != Direction.DOWN) notifyChangeOfContents(); Direction newFacing = Direction.DOWN; for (Direction test : Iterate.horizontalDirections) { - boolean canOutputTo = BasinBlock.canOutputTo(world, pos, test); + boolean canOutputTo = BasinBlock.canOutputTo(level, worldPosition, test); if (canOutputTo && !disabledSpoutputs.contains(test)) newFacing = test; } - if (preferredSpoutput != null && BasinBlock.canOutputTo(world, pos, preferredSpoutput) + if (preferredSpoutput != null && BasinBlock.canOutputTo(level, worldPosition, preferredSpoutput) && preferredSpoutput != Direction.UP) newFacing = preferredSpoutput; if (newFacing != currentFacing) - world.setBlockState(pos, blockState.with(BasinBlock.FACING, newFacing)); + level.setBlockAndUpdate(worldPosition, blockState.setValue(BasinBlock.FACING, newFacing)); } @Override public void tick() { super.tick(); - if (world.isRemote) { + if (level.isClientSide) { createFluidParticles(); tickVisualizedOutputs(); ingredientRotationSpeed.tickChaser(); ingredientRotation.setValue(ingredientRotation.getValue() + ingredientRotationSpeed.getValue()); } - if ((!spoutputBuffer.isEmpty() || !spoutputFluidBuffer.isEmpty()) && !world.isRemote) + if ((!spoutputBuffer.isEmpty() || !spoutputFluidBuffer.isEmpty()) && !level.isClientSide) tryClearingSpoutputOverflow(); if (!contentsChanged) return; @@ -295,12 +295,12 @@ public class BasinTileEntity extends SmartTileEntity implements IHaveGoggleInfor getOperator().ifPresent(te -> te.basinChecker.scheduleUpdate()); for (Direction offset : Iterate.horizontalDirections) { - BlockPos toUpdate = pos.up() - .offset(offset); - BlockState stateToUpdate = world.getBlockState(toUpdate); + BlockPos toUpdate = worldPosition.above() + .relative(offset); + BlockState stateToUpdate = level.getBlockState(toUpdate); if (stateToUpdate.getBlock() instanceof BasinBlock - && stateToUpdate.get(BasinBlock.FACING) == offset.getOpposite()) { - TileEntity te = world.getTileEntity(toUpdate); + && stateToUpdate.getValue(BasinBlock.FACING) == offset.getOpposite()) { + TileEntity te = level.getBlockEntity(toUpdate); if (te instanceof BasinTileEntity) ((BasinTileEntity) te).contentsChanged = true; } @@ -311,15 +311,15 @@ public class BasinTileEntity extends SmartTileEntity implements IHaveGoggleInfor BlockState blockState = getBlockState(); if (!(blockState.getBlock() instanceof BasinBlock)) return; - Direction direction = blockState.get(BasinBlock.FACING); - TileEntity te = world.getTileEntity(pos.down() - .offset(direction)); + Direction direction = blockState.getValue(BasinBlock.FACING); + TileEntity te = level.getBlockEntity(worldPosition.below() + .relative(direction)); FilteringBehaviour filter = null; InvManipulationBehaviour inserter = null; if (te != null) { - filter = TileEntityBehaviour.get(world, te.getPos(), FilteringBehaviour.TYPE); - inserter = TileEntityBehaviour.get(world, te.getPos(), InvManipulationBehaviour.TYPE); + filter = TileEntityBehaviour.get(level, te.getBlockPos(), FilteringBehaviour.TYPE); + inserter = TileEntityBehaviour.get(level, te.getBlockPos(), InvManipulationBehaviour.TYPE); } IItemHandler targetInv = te == null ? null @@ -336,7 +336,7 @@ public class BasinTileEntity extends SmartTileEntity implements IHaveGoggleInfor ItemStack itemStack = iterator.next(); if (direction == Direction.DOWN) { - Block.spawnAsEntity(world, pos, itemStack); + Block.popResource(level, worldPosition, itemStack); iterator.remove(); update = true; continue; @@ -417,9 +417,9 @@ public class BasinTileEntity extends SmartTileEntity implements IHaveGoggleInfor } private Optional getOperator() { - if (world == null) + if (level == null) return Optional.empty(); - TileEntity te = world.getTileEntity(pos.up(2)); + TileEntity te = level.getBlockEntity(worldPosition.above(2)); if (te instanceof BasinOperatingTileEntity) return Optional.of((BasinOperatingTileEntity) te); return Optional.empty(); @@ -443,7 +443,7 @@ public class BasinTileEntity extends SmartTileEntity implements IHaveGoggleInfor @Override @OnlyIn(Dist.CLIENT) - public double getMaxRenderDistanceSquared() { + public double getViewDistance() { return 256; } @@ -465,14 +465,14 @@ public class BasinTileEntity extends SmartTileEntity implements IHaveGoggleInfor if (!(blockState.getBlock() instanceof BasinBlock)) return false; - Direction direction = blockState.get(BasinBlock.FACING); + Direction direction = blockState.getValue(BasinBlock.FACING); if (direction != Direction.DOWN) { - TileEntity te = world.getTileEntity(pos.down() - .offset(direction)); + TileEntity te = level.getBlockEntity(worldPosition.below() + .relative(direction)); InvManipulationBehaviour inserter = - te == null ? null : TileEntityBehaviour.get(world, te.getPos(), InvManipulationBehaviour.TYPE); + te == null ? null : TileEntityBehaviour.get(level, te.getBlockPos(), InvManipulationBehaviour.TYPE); IItemHandler targetInv = te == null ? null : te.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, direction.getOpposite()) .orElse(inserter == null ? null : inserter.getInventory()); @@ -488,7 +488,7 @@ public class BasinTileEntity extends SmartTileEntity implements IHaveGoggleInfor return true; for (ItemStack itemStack : outputItems) { if (itemStack.hasContainerItem() && itemStack.getContainerItem() - .isItemEqual(itemStack)) + .sameItem(itemStack)) continue; spoutputBuffer.add(itemStack.copy()); } @@ -507,7 +507,7 @@ public class BasinTileEntity extends SmartTileEntity implements IHaveGoggleInfor for (ItemStack itemStack : outputItems) { // Catalyst items are never consumed if (itemStack.hasContainerItem() && itemStack.getContainerItem() - .isItemEqual(itemStack)) + .sameItem(itemStack)) continue; if (!ItemHandlerHelper.insertItemStacked(targetInv, itemStack.copy(), simulate) .isEmpty()) @@ -537,8 +537,8 @@ public class BasinTileEntity extends SmartTileEntity implements IHaveGoggleInfor } public static HeatLevel getHeatLevelOf(BlockState state) { - if (state.contains(BlazeBurnerBlock.HEAT_LEVEL)) - return state.get(BlazeBurnerBlock.HEAT_LEVEL); + if (state.hasProperty(BlazeBurnerBlock.HEAT_LEVEL)) + return state.getValue(BlazeBurnerBlock.HEAT_LEVEL); return AllTags.AllBlockTags.FAN_HEATERS.matches(state) ? HeatLevel.SMOULDERING : HeatLevel.NONE; } @@ -560,7 +560,7 @@ public class BasinTileEntity extends SmartTileEntity implements IHaveGoggleInfor } private void createFluidParticles() { - Random r = world.rand; + Random r = level.random; if (!visualizedOutputFluids.isEmpty()) createOutputFluidParticles(r); @@ -585,7 +585,7 @@ public class BasinTileEntity extends SmartTileEntity implements IHaveGoggleInfor float fluidLevel = MathHelper.clamp(totalUnits / 2000, 0, 1); float rim = 2 / 16f; float space = 12 / 16f; - float surface = pos.getY() + rim + space * fluidLevel + 1 / 32f; + float surface = worldPosition.getY() + rim + space * fluidLevel + 1 / 32f; if (areFluidsMoving) { createMovingFluidParticles(surface, segments); @@ -598,9 +598,9 @@ public class BasinTileEntity extends SmartTileEntity implements IHaveGoggleInfor for (TankSegment tankSegment : behaviour.getTanks()) { if (tankSegment.isEmpty(0)) continue; - float x = pos.getX() + rim + space * r.nextFloat(); - float z = pos.getZ() + rim + space * r.nextFloat(); - world.addOptionalParticle( + float x = worldPosition.getX() + rim + space * r.nextFloat(); + float z = worldPosition.getZ() + rim + space * r.nextFloat(); + level.addAlwaysVisibleParticle( new FluidParticleData(AllParticleTypes.BASIN_FLUID.get(), tankSegment.getRenderedFluid()), x, surface, z, 0, 0, 0); } @@ -611,11 +611,11 @@ public class BasinTileEntity extends SmartTileEntity implements IHaveGoggleInfor BlockState blockState = getBlockState(); if (!(blockState.getBlock() instanceof BasinBlock)) return; - Direction direction = blockState.get(BasinBlock.FACING); + Direction direction = blockState.getValue(BasinBlock.FACING); if (direction == Direction.DOWN) return; - Vector3d directionVec = Vector3d.of(direction.getDirectionVec()); - Vector3d outVec = VecHelper.getCenterOf(pos) + Vector3d directionVec = Vector3d.atLowerCornerOf(direction.getNormal()); + Vector3d outVec = VecHelper.getCenterOf(worldPosition) .add(directionVec.scale(.65) .subtract(0, 1 / 4f, 0)); Vector3d outMotion = directionVec.scale(1 / 16f) @@ -626,7 +626,7 @@ public class BasinTileEntity extends SmartTileEntity implements IHaveGoggleInfor FluidStack fluidStack = ia.getValue(); IParticleData fluidParticle = FluidFX.getFluidParticle(fluidStack); Vector3d m = VecHelper.offsetRandomly(outMotion, r, 1 / 16f); - world.addOptionalParticle(fluidParticle, outVec.x, outVec.y, outVec.z, m.x, m.y, m.z); + level.addAlwaysVisibleParticle(fluidParticle, outVec.x, outVec.y, outVec.z, m.x, m.y, m.z); }); } } @@ -634,7 +634,7 @@ public class BasinTileEntity extends SmartTileEntity implements IHaveGoggleInfor private void createMovingFluidParticles(float surface, int segments) { Vector3d pointer = new Vector3d(1, 0, 0).scale(1 / 16f); float interval = 360f / segments; - Vector3d centerOf = VecHelper.getCenterOf(pos); + Vector3d centerOf = VecHelper.getCenterOf(worldPosition); float intervalOffset = (AnimationTickHolder.getTicks() * 18) % 360; int currentSegment = 0; @@ -646,9 +646,9 @@ public class BasinTileEntity extends SmartTileEntity implements IHaveGoggleInfor continue; float angle = interval * (1 + currentSegment) + intervalOffset; Vector3d vec = centerOf.add(VecHelper.rotate(pointer, angle, Axis.Y)); - world.addOptionalParticle( + level.addAlwaysVisibleParticle( new FluidParticleData(AllParticleTypes.BASIN_FLUID.get(), tankSegment.getRenderedFluid()), - vec.getX(), surface, vec.getZ(), 1, 0, 0); + vec.x(), surface, vec.z(), 1, 0, 0); currentSegment++; } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/processing/EmptyingByBasin.java b/src/main/java/com/simibubi/create/content/contraptions/processing/EmptyingByBasin.java index 8545a81d1..cddadc1cf 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/processing/EmptyingByBasin.java +++ b/src/main/java/com/simibubi/create/content/contraptions/processing/EmptyingByBasin.java @@ -27,7 +27,7 @@ public class EmptyingByBasin { if (stack.getItem() instanceof PotionItem) return true; - wrapper.setInventorySlotContents(0, stack); + wrapper.setItem(0, stack); if (AllRecipeTypes.EMPTYING.find(wrapper, world) .isPresent()) return true; @@ -52,7 +52,7 @@ public class EmptyingByBasin { if (stack.getItem() instanceof PotionItem) return PotionFluidHandler.emptyPotion(stack, simulate); - wrapper.setInventorySlotContents(0, stack); + wrapper.setItem(0, stack); Optional> recipe = AllRecipeTypes.EMPTYING.find(wrapper, world); if (recipe.isPresent()) { EmptyingRecipe emptyingRecipe = (EmptyingRecipe) recipe.get(); diff --git a/src/main/java/com/simibubi/create/content/contraptions/processing/EmptyingRecipe.java b/src/main/java/com/simibubi/create/content/contraptions/processing/EmptyingRecipe.java index fbed9d886..8c7cebfab 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/processing/EmptyingRecipe.java +++ b/src/main/java/com/simibubi/create/content/contraptions/processing/EmptyingRecipe.java @@ -15,7 +15,7 @@ public class EmptyingRecipe extends ProcessingRecipe { @Override public boolean matches(RecipeWrapper inv, World p_77569_2_) { - return ingredients.get(0).test(inv.getStackInSlot(0)); + return ingredients.get(0).test(inv.getItem(0)); } @Override diff --git a/src/main/java/com/simibubi/create/content/contraptions/processing/InWorldProcessing.java b/src/main/java/com/simibubi/create/content/contraptions/processing/InWorldProcessing.java index b433755f1..5f97cb6c1 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/processing/InWorldProcessing.java +++ b/src/main/java/com/simibubi/create/content/contraptions/processing/InWorldProcessing.java @@ -57,11 +57,11 @@ public class InWorldProcessing { public static Type byBlock(IBlockReader reader, BlockPos pos) { BlockState blockState = reader.getBlockState(pos); FluidState fluidState = reader.getFluidState(pos); - if (fluidState.getFluid() == Fluids.WATER || fluidState.getFluid() == Fluids.FLOWING_WATER) + if (fluidState.getType() == Fluids.WATER || fluidState.getType() == Fluids.FLOWING_WATER) return Type.SPLASHING; Block block = blockState.getBlock(); if (block == Blocks.FIRE || AllBlocks.LIT_BLAZE_BURNER.has(blockState) - || (BlockTags.CAMPFIRES.contains(block) && blockState.method_28500(CampfireBlock.LIT).orElse(false)) + || (BlockTags.CAMPFIRES.contains(block) && blockState.getOptionalValue(CampfireBlock.LIT).orElse(false)) || getHeatLevelOf(blockState) == BlazeBurnerBlock.HeatLevel.SMOULDERING) return Type.SMOKING; if (block == Blocks.LAVA || getHeatLevelOf(blockState).isAtLeast(BlazeBurnerBlock.HeatLevel.FADING)) @@ -79,7 +79,7 @@ public class InWorldProcessing { CompoundNBT processing = compound.getCompound("Processing"); if (Type.valueOf(processing.getString("Type")) != type) { - boolean canProcess = canProcess(entity.getItem(), type, entity.world); + boolean canProcess = canProcess(entity.getItem(), type, entity.level); processing.putString("Type", type.name()); if (!canProcess) processing.putInt("Time", -1); @@ -90,32 +90,32 @@ public class InWorldProcessing { return false; } } - return canProcess(entity.getItem(), type, entity.world); + return canProcess(entity.getItem(), type, entity.level); } private static boolean canProcess(ItemStack stack, Type type, World world) { if (type == Type.BLASTING) { - WRAPPER.setInventorySlotContents(0, stack); + WRAPPER.setItem(0, stack); Optional smeltingRecipe = world.getRecipeManager() - .getRecipe(IRecipeType.SMELTING, WRAPPER, world); + .getRecipeFor(IRecipeType.SMELTING, WRAPPER, world); if (smeltingRecipe.isPresent()) return true; - WRAPPER.setInventorySlotContents(0, stack); + WRAPPER.setItem(0, stack); Optional blastingRecipe = world.getRecipeManager() - .getRecipe(IRecipeType.BLASTING, WRAPPER, world); + .getRecipeFor(IRecipeType.BLASTING, WRAPPER, world); if (blastingRecipe.isPresent()) return true; - return !stack.getItem().isFireproof(); + return !stack.getItem().isFireResistant(); } if (type == Type.SMOKING) { - WRAPPER.setInventorySlotContents(0, stack); + WRAPPER.setItem(0, stack); Optional recipe = world.getRecipeManager() - .getRecipe(IRecipeType.SMOKING, WRAPPER, world); + .getRecipeFor(IRecipeType.SMOKING, WRAPPER, world); return recipe.isPresent(); } @@ -126,7 +126,7 @@ public class InWorldProcessing { } public static boolean isWashable(ItemStack stack, World world) { - SPLASHING_WRAPPER.setInventorySlotContents(0, stack); + SPLASHING_WRAPPER.setItem(0, stack); Optional recipe = AllRecipeTypes.SPLASHING.find(SPLASHING_WRAPPER, world); return recipe.isPresent(); } @@ -134,7 +134,7 @@ public class InWorldProcessing { public static void applyProcessing(ItemEntity entity, Type type) { if (decrementProcessingTime(entity, type) != 0) return; - List stacks = process(entity.getItem(), type, entity.world); + List stacks = process(entity.getItem(), type, entity.level); if (stacks == null) return; if (stacks.isEmpty()) { @@ -143,9 +143,9 @@ public class InWorldProcessing { } entity.setItem(stacks.remove(0)); for (ItemStack additional : stacks) { - ItemEntity entityIn = new ItemEntity(entity.world, entity.getX(), entity.getY(), entity.getZ(), additional); - entityIn.setMotion(entity.getMotion()); - entity.world.addEntity(entityIn); + ItemEntity entityIn = new ItemEntity(entity.level, entity.getX(), entity.getY(), entity.getZ(), additional); + entityIn.setDeltaMovement(entity.getDeltaMovement()); + entity.level.addFreshEntity(entityIn); } } @@ -181,29 +181,29 @@ public class InWorldProcessing { private static List process(ItemStack stack, Type type, World world) { if (type == Type.SPLASHING) { - SPLASHING_WRAPPER.setInventorySlotContents(0, stack); + SPLASHING_WRAPPER.setItem(0, stack); Optional recipe = AllRecipeTypes.SPLASHING.find(SPLASHING_WRAPPER, world); if (recipe.isPresent()) return applyRecipeOn(stack, recipe.get()); return null; } - WRAPPER.setInventorySlotContents(0, stack); + WRAPPER.setItem(0, stack); Optional smokingRecipe = world.getRecipeManager() - .getRecipe(IRecipeType.SMOKING, WRAPPER, world); + .getRecipeFor(IRecipeType.SMOKING, WRAPPER, world); if (type == Type.BLASTING) { if (!smokingRecipe.isPresent()) { - WRAPPER.setInventorySlotContents(0, stack); + WRAPPER.setItem(0, stack); Optional smeltingRecipe = world.getRecipeManager() - .getRecipe(IRecipeType.SMELTING, WRAPPER, world); + .getRecipeFor(IRecipeType.SMELTING, WRAPPER, world); if (smeltingRecipe.isPresent()) return applyRecipeOn(stack, smeltingRecipe.get()); - WRAPPER.setInventorySlotContents(0, stack); + WRAPPER.setItem(0, stack); Optional blastingRecipe = world.getRecipeManager() - .getRecipe(IRecipeType.BLASTING, WRAPPER, world); + .getRecipeFor(IRecipeType.BLASTING, WRAPPER, world); if (blastingRecipe.isPresent()) return applyRecipeOn(stack, blastingRecipe.get()); @@ -253,9 +253,9 @@ public class InWorldProcessing { } entity.setItem(stacks.remove(0)); for (ItemStack additional : stacks) { - ItemEntity entityIn = new ItemEntity(entity.world, entity.getX(), entity.getY(), entity.getZ(), additional); - entityIn.setMotion(entity.getMotion()); - entity.world.addEntity(entityIn); + ItemEntity entityIn = new ItemEntity(entity.level, entity.getX(), entity.getY(), entity.getZ(), additional); + entityIn.setDeltaMovement(entity.getDeltaMovement()); + entity.level.addFreshEntity(entityIn); } } @@ -285,7 +285,7 @@ public class InWorldProcessing { } } } else { - ItemStack out = recipe.getRecipeOutput() + ItemStack out = recipe.getResultItem() .copy(); stacks = ItemHelper.multipliedOutput(stackIn, out); } @@ -294,9 +294,9 @@ public class InWorldProcessing { } public static void spawnParticlesForProcessing(@Nullable World world, Vector3d vec, Type type) { - if (world == null || !world.isRemote) + if (world == null || !world.isClientSide) return; - if (world.rand.nextInt(8) != 0) + if (world.random.nextInt(8) != 0) return; switch (type) { @@ -309,10 +309,10 @@ public class InWorldProcessing { case SPLASHING: Vector3d color = ColorHelper.getRGB(0x0055FF); world.addParticle(new RedstoneParticleData((float) color.x, (float) color.y, (float) color.z, 1), - vec.x + (world.rand.nextFloat() - .5f) * .5f, vec.y + .5f, vec.z + (world.rand.nextFloat() - .5f) * .5f, + vec.x + (world.random.nextFloat() - .5f) * .5f, vec.y + .5f, vec.z + (world.random.nextFloat() - .5f) * .5f, 0, 1 / 8f, 0); - world.addParticle(ParticleTypes.SPIT, vec.x + (world.rand.nextFloat() - .5f) * .5f, vec.y + .5f, - vec.z + (world.rand.nextFloat() - .5f) * .5f, 0, 1 / 8f, 0); + world.addParticle(ParticleTypes.SPIT, vec.x + (world.random.nextFloat() - .5f) * .5f, vec.y + .5f, + vec.z + (world.random.nextFloat() - .5f) * .5f, 0, 1 / 8f, 0); break; default: break; diff --git a/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingOutput.java b/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingOutput.java index 8303e0686..c83f362e8 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingOutput.java +++ b/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingOutput.java @@ -79,16 +79,16 @@ public class ProcessingOutput { throw new JsonSyntaxException("ProcessingOutput must be a json object"); JsonObject json = je.getAsJsonObject(); - String itemId = JSONUtils.getString(json, "item"); - int count = JSONUtils.getInt(json, "count", 1); - float chance = JSONUtils.hasField(json, "chance") ? JSONUtils.getFloat(json, "chance") : 1; + String itemId = JSONUtils.getAsString(json, "item"); + int count = JSONUtils.getAsInt(json, "count", 1); + float chance = JSONUtils.isValidNode(json, "chance") ? JSONUtils.getAsFloat(json, "chance") : 1; ItemStack itemstack = new ItemStack(ForgeRegistries.ITEMS.getValue(new ResourceLocation(itemId)), count); - if (JSONUtils.hasField(json, "nbt")) { + if (JSONUtils.isValidNode(json, "nbt")) { try { JsonElement element = json.get("nbt"); - itemstack.setTag(JsonToNBT.getTagFromJson( - element.isJsonObject() ? Create.GSON.toJson(element) : JSONUtils.getString(element, "nbt"))); + itemstack.setTag(JsonToNBT.parseTag( + element.isJsonObject() ? Create.GSON.toJson(element) : JSONUtils.convertToString(element, "nbt"))); } catch (CommandSyntaxException e) { e.printStackTrace(); } @@ -98,12 +98,12 @@ public class ProcessingOutput { } public void write(PacketBuffer buf) { - buf.writeItemStack(getStack()); + buf.writeItem(getStack()); buf.writeFloat(getChance()); } public static ProcessingOutput read(PacketBuffer buf) { - return new ProcessingOutput(buf.readItemStack(), buf.readFloat()); + return new ProcessingOutput(buf.readItem(), buf.readFloat()); } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingRecipe.java b/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingRecipe.java index 00317d125..4f4dff700 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingRecipe.java +++ b/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingRecipe.java @@ -169,17 +169,17 @@ public abstract class ProcessingRecipe implements IRecipe< // IRecipe<> paperwork @Override - public ItemStack getCraftingResult(T inv) { - return getRecipeOutput(); + public ItemStack assemble(T inv) { + return getResultItem(); } @Override - public boolean canFit(int width, int height) { + public boolean canCraftInDimensions(int width, int height) { return true; } @Override - public ItemStack getRecipeOutput() { + public ItemStack getResultItem() { return getRollableResults().isEmpty() ? ItemStack.EMPTY : getRollableResults().get(0) .getStack(); @@ -191,7 +191,7 @@ public abstract class ProcessingRecipe implements IRecipe< } @Override - public boolean isDynamic() { + public boolean isSpecial() { return true; } diff --git a/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingRecipeBuilder.java b/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingRecipeBuilder.java index 16f747acb..5099023e8 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingRecipeBuilder.java +++ b/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingRecipeBuilder.java @@ -41,7 +41,7 @@ public class ProcessingRecipeBuilder> { } public ProcessingRecipeBuilder withItemIngredients(Ingredient... ingredients) { - return withItemIngredients(NonNullList.from(Ingredient.EMPTY, ingredients)); + return withItemIngredients(NonNullList.of(Ingredient.EMPTY, ingredients)); } public ProcessingRecipeBuilder withItemIngredients(NonNullList ingredients) { @@ -54,7 +54,7 @@ public class ProcessingRecipeBuilder> { } public ProcessingRecipeBuilder withItemOutputs(ProcessingOutput... outputs) { - return withItemOutputs(NonNullList.from(ProcessingOutput.EMPTY, outputs)); + return withItemOutputs(NonNullList.of(ProcessingOutput.EMPTY, outputs)); } public ProcessingRecipeBuilder withItemOutputs(NonNullList outputs) { @@ -63,7 +63,7 @@ public class ProcessingRecipeBuilder> { } public ProcessingRecipeBuilder withFluidIngredients(FluidIngredient... ingredients) { - return withFluidIngredients(NonNullList.from(FluidIngredient.EMPTY, ingredients)); + return withFluidIngredients(NonNullList.of(FluidIngredient.EMPTY, ingredients)); } public ProcessingRecipeBuilder withFluidIngredients(NonNullList ingredients) { @@ -72,7 +72,7 @@ public class ProcessingRecipeBuilder> { } public ProcessingRecipeBuilder withFluidOutputs(FluidStack... outputs) { - return withFluidOutputs(NonNullList.from(FluidStack.EMPTY, outputs)); + return withFluidOutputs(NonNullList.of(FluidStack.EMPTY, outputs)); } public ProcessingRecipeBuilder withFluidOutputs(NonNullList outputs) { @@ -105,11 +105,11 @@ public class ProcessingRecipeBuilder> { // Datagen shortcuts public ProcessingRecipeBuilder require(ITag.INamedTag tag) { - return require(Ingredient.fromTag(tag)); + return require(Ingredient.of(tag)); } public ProcessingRecipeBuilder require(IItemProvider item) { - return require(Ingredient.fromItems(item)); + return require(Ingredient.of(item)); } public ProcessingRecipeBuilder require(Ingredient ingredient) { @@ -235,7 +235,7 @@ public class ProcessingRecipeBuilder> { } @Override - public void serialize(JsonObject json) { + public void serializeRecipeData(JsonObject json) { serializer.write(json, recipe); if (recipeConditions.isEmpty()) return; @@ -246,22 +246,22 @@ public class ProcessingRecipeBuilder> { } @Override - public ResourceLocation getID() { + public ResourceLocation getId() { return id; } @Override - public IRecipeSerializer getSerializer() { + public IRecipeSerializer getType() { return serializer; } @Override - public JsonObject getAdvancementJson() { + public JsonObject serializeAdvancement() { return null; } @Override - public ResourceLocation getAdvancementID() { + public ResourceLocation getAdvancementId() { return null; } diff --git a/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingRecipeSerializer.java b/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingRecipeSerializer.java index 031a7f973..9d83395c3 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingRecipeSerializer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingRecipeSerializer.java @@ -35,7 +35,7 @@ public class ProcessingRecipeSerializer> extends F JsonArray jsonOutputs = new JsonArray(); recipe.getIngredients() - .forEach(i -> jsonIngredients.add(i.serialize())); + .forEach(i -> jsonIngredients.add(i.toJson())); recipe.getFluidIngredients() .forEach(i -> jsonIngredients.add(i.serialize())); @@ -65,16 +65,16 @@ public class ProcessingRecipeSerializer> extends F NonNullList results = NonNullList.create(); NonNullList fluidResults = NonNullList.create(); - for (JsonElement je : JSONUtils.getJsonArray(json, "ingredients")) { + for (JsonElement je : JSONUtils.getAsJsonArray(json, "ingredients")) { if (FluidIngredient.isFluidIngredient(je)) fluidIngredients.add(FluidIngredient.deserialize(je)); else - ingredients.add(Ingredient.deserialize(je)); + ingredients.add(Ingredient.fromJson(je)); } - for (JsonElement je : JSONUtils.getJsonArray(json, "results")) { + for (JsonElement je : JSONUtils.getAsJsonArray(json, "results")) { JsonObject jsonObject = je.getAsJsonObject(); - if (JSONUtils.hasField(jsonObject, "fluid")) + if (JSONUtils.isValidNode(jsonObject, "fluid")) fluidResults.add(FluidHelper.deserializeFluidStack(jsonObject)); else results.add(ProcessingOutput.deserialize(je)); @@ -85,10 +85,10 @@ public class ProcessingRecipeSerializer> extends F .withFluidIngredients(fluidIngredients) .withFluidOutputs(fluidResults); - if (JSONUtils.hasField(json, "processingTime")) - builder.duration(JSONUtils.getInt(json, "processingTime")); - if (JSONUtils.hasField(json, "heatRequirement")) - builder.requiresHeat(HeatCondition.deserialize(JSONUtils.getString(json, "heatRequirement"))); + if (JSONUtils.isValidNode(json, "processingTime")) + builder.duration(JSONUtils.getAsInt(json, "processingTime")); + if (JSONUtils.isValidNode(json, "heatRequirement")) + builder.requiresHeat(HeatCondition.deserialize(JSONUtils.getAsString(json, "heatRequirement"))); return builder.build(); } @@ -100,7 +100,7 @@ public class ProcessingRecipeSerializer> extends F NonNullList fluidOutputs = recipe.getFluidResults(); buffer.writeVarInt(ingredients.size()); - ingredients.forEach(i -> i.write(buffer)); + ingredients.forEach(i -> i.toNetwork(buffer)); buffer.writeVarInt(fluidIngredients.size()); fluidIngredients.forEach(i -> i.write(buffer)); @@ -122,7 +122,7 @@ public class ProcessingRecipeSerializer> extends F int size = buffer.readVarInt(); for (int i = 0; i < size; i++) - ingredients.add(Ingredient.read(buffer)); + ingredients.add(Ingredient.fromNetwork(buffer)); size = buffer.readVarInt(); for (int i = 0; i < size; i++) @@ -150,17 +150,17 @@ public class ProcessingRecipeSerializer> extends F } @Override - public final T read(ResourceLocation id, JsonObject json) { + public final T fromJson(ResourceLocation id, JsonObject json) { return readFromJson(id, json); } @Override - public final void write(PacketBuffer buffer, T recipe) { + public final void toNetwork(PacketBuffer buffer, T recipe) { writeToBuffer(buffer, recipe); } @Override - public final T read(ResourceLocation id, PacketBuffer buffer) { + public final T fromNetwork(ResourceLocation id, PacketBuffer buffer) { return readFromBuffer(id, buffer); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/processing/burner/BlazeBurnerBlock.java b/src/main/java/com/simibubi/create/content/contraptions/processing/burner/BlazeBurnerBlock.java index 527441ceb..c03d496d2 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/processing/burner/BlazeBurnerBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/processing/burner/BlazeBurnerBlock.java @@ -54,6 +54,8 @@ import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.common.util.FakePlayer; +import net.minecraft.block.AbstractBlock.Properties; + @MethodsReturnNonnullByDefault @ParametersAreNonnullByDefault public class BlazeBurnerBlock extends Block implements ITE { @@ -62,20 +64,20 @@ public class BlazeBurnerBlock extends Block implements ITE builder) { - super.fillStateContainer(builder); + protected void createBlockStateDefinition(Builder builder) { + super.createBlockStateDefinition(builder); builder.add(HEAT_LEVEL); } @Override - public void onBlockAdded(BlockState state, World world, BlockPos pos, BlockState p_220082_4_, boolean p_220082_5_) { - if (world.isRemote) + public void onPlace(BlockState state, World world, BlockPos pos, BlockState p_220082_4_, boolean p_220082_5_) { + if (world.isClientSide) return; - TileEntity tileEntity = world.getTileEntity(pos.up()); + TileEntity tileEntity = world.getBlockEntity(pos.above()); if (!(tileEntity instanceof BasinTileEntity)) return; BasinTileEntity basin = (BasinTileEntity) tileEntity; @@ -84,14 +86,14 @@ public class BlazeBurnerBlock extends Block implements ITE p_149666_2_) { + public void fillItemCategory(ItemGroup p_149666_1_, NonNullList p_149666_2_) { p_149666_2_.add(AllItems.EMPTY_BLAZE_BURNER.asStack()); - super.fillItemGroup(p_149666_1_, p_149666_2_); + super.fillItemCategory(p_149666_1_, p_149666_2_); } @Nullable @@ -106,36 +108,36 @@ public class BlazeBurnerBlock extends Block implements ITE p.sendBreakAnimation(hand)); - world.setBlockState(pos, AllBlocks.LIT_BLAZE_BURNER.getDefaultState()); + heldItem.hurtAndBreak(1, player, p -> p.broadcastBreakEvent(hand)); + world.setBlockAndUpdate(pos, AllBlocks.LIT_BLAZE_BURNER.getDefaultState()); return ActionResultType.SUCCESS; } return ActionResultType.PASS; } ActionResult res = tryInsert(state, world, pos, dontConsume ? heldItem.copy() : heldItem, forceOverflow, false); - ItemStack leftover = res.getResult(); - if (!world.isRemote && !dontConsume && !leftover.isEmpty()) { + ItemStack leftover = res.getObject(); + if (!world.isClientSide && !dontConsume && !leftover.isEmpty()) { if (heldItem.isEmpty()) { - player.setHeldItem(hand, leftover); - } else if (!player.inventory.addItemStackToInventory(leftover)) { - player.dropItem(leftover, false); + player.setItemInHand(hand, leftover); + } else if (!player.inventory.add(leftover)) { + player.drop(leftover, false); } } - return res.getType() == ActionResultType.SUCCESS ? res.getType() : ActionResultType.PASS; + return res.getResult() == ActionResultType.SUCCESS ? res.getResult() : ActionResultType.PASS; } public static ActionResult tryInsert(BlockState state, World world, BlockPos pos, ItemStack stack, boolean forceOverflow, @@ -143,7 +145,7 @@ public class BlazeBurnerBlock extends Block implements ITE p_195946_1_, Item p_195946_2_) { + public void registerBlocks(Map p_195946_1_, Item p_195946_2_) { if (!hasCapturedBlaze()) return; - super.addToBlockToItemMap(p_195946_1_, p_195946_2_); + super.registerBlocks(p_195946_1_, p_195946_2_); } private BlazeBurnerBlockItem(Block block, Properties properties, boolean capturedBlaze) { @@ -63,67 +65,67 @@ public class BlazeBurnerBlockItem extends BlockItem { } @Override - public void fillItemGroup(ItemGroup p_150895_1_, NonNullList p_150895_2_) { + public void fillItemCategory(ItemGroup p_150895_1_, NonNullList p_150895_2_) { if (!hasCapturedBlaze()) return; - super.fillItemGroup(p_150895_1_, p_150895_2_); + super.fillItemCategory(p_150895_1_, p_150895_2_); } @Override - public String getTranslationKey() { - return hasCapturedBlaze() ? super.getTranslationKey() : "item.create." + getRegistryName().getPath(); + public String getDescriptionId() { + return hasCapturedBlaze() ? super.getDescriptionId() : "item.create." + getRegistryName().getPath(); } @Override - public ActionResultType onItemUse(ItemUseContext context) { + public ActionResultType useOn(ItemUseContext context) { if (hasCapturedBlaze()) - return super.onItemUse(context); + return super.useOn(context); - World world = context.getWorld(); - BlockPos pos = context.getPos(); - TileEntity te = world.getTileEntity(pos); + World world = context.getLevel(); + BlockPos pos = context.getClickedPos(); + TileEntity te = world.getBlockEntity(pos); PlayerEntity player = context.getPlayer(); if (!(te instanceof MobSpawnerTileEntity)) - return super.onItemUse(context); + return super.useOn(context); - AbstractSpawner spawner = ((MobSpawnerTileEntity) te).getSpawnerBaseLogic(); + AbstractSpawner spawner = ((MobSpawnerTileEntity) te).getSpawner(); List possibleSpawns = - ObfuscationReflectionHelper.getPrivateValue(AbstractSpawner.class, spawner, "field_98285_e"); + ObfuscationReflectionHelper.getPrivateValue(AbstractSpawner.class, spawner, "spawnPotentials"); // spawnPotentials if (possibleSpawns.isEmpty()) { possibleSpawns = new ArrayList<>(); possibleSpawns - .add(ObfuscationReflectionHelper.getPrivateValue(AbstractSpawner.class, spawner, "field_98282_f")); + .add(ObfuscationReflectionHelper.getPrivateValue(AbstractSpawner.class, spawner, "nextSpawnData")); // nextSpawnData } ResourceLocation blazeId = EntityType.BLAZE.getRegistryName(); for (WeightedSpawnerEntity e : possibleSpawns) { - ResourceLocation spawnerEntityId = new ResourceLocation(e.getNbt() + ResourceLocation spawnerEntityId = new ResourceLocation(e.getTag() .getString("id")); if (!spawnerEntityId.equals(blazeId)) continue; spawnCaptureEffects(world, VecHelper.getCenterOf(pos)); - if (world.isRemote || player == null) + if (world.isClientSide || player == null) return ActionResultType.SUCCESS; - giveBurnerItemTo(player, context.getItem(), context.getHand()); + giveBurnerItemTo(player, context.getItemInHand(), context.getHand()); return ActionResultType.SUCCESS; } - return super.onItemUse(context); + return super.useOn(context); } @Override - public ActionResultType itemInteractionForEntity(ItemStack heldItem, PlayerEntity player, LivingEntity entity, Hand hand) { + public ActionResultType interactLivingEntity(ItemStack heldItem, PlayerEntity player, LivingEntity entity, Hand hand) { if (hasCapturedBlaze()) return ActionResultType.PASS; if (!(entity instanceof BlazeEntity)) return ActionResultType.PASS; - World world = player.world; - spawnCaptureEffects(world, entity.getPositionVec()); - if (world.isRemote) + World world = player.level; + spawnCaptureEffects(world, entity.position()); + if (world.isClientSide) return ActionResultType.FAIL; giveBurnerItemTo(player, heldItem, hand); @@ -136,18 +138,18 @@ public class BlazeBurnerBlockItem extends BlockItem { if (!player.isCreative()) heldItem.shrink(1); if (heldItem.isEmpty()) { - player.setHeldItem(hand, filled); + player.setItemInHand(hand, filled); return; } - player.inventory.placeItemBackInInventory(player.world, filled); + player.inventory.placeItemBackInInventory(player.level, filled); } private void spawnCaptureEffects(World world, Vector3d vec) { - if (world.isRemote) { + if (world.isClientSide) { for (int i = 0; i < 40; i++) { - Vector3d motion = VecHelper.offsetRandomly(Vector3d.ZERO, world.rand, .125f); + Vector3d motion = VecHelper.offsetRandomly(Vector3d.ZERO, world.random, .125f); world.addParticle(ParticleTypes.FLAME, vec.x, vec.y, vec.z, motion.x, motion.y, motion.z); - Vector3d circle = motion.mul(1, 0, 1) + Vector3d circle = motion.multiply(1, 0, 1) .normalize() .scale(.5f); world.addParticle(ParticleTypes.SMOKE, circle.x, vec.y, circle.z, 0, -0.125, 0); @@ -156,8 +158,8 @@ public class BlazeBurnerBlockItem extends BlockItem { } BlockPos soundPos = new BlockPos(vec); - world.playSound(null, soundPos, SoundEvents.ENTITY_BLAZE_HURT, SoundCategory.HOSTILE, .25f, .75f); - world.playSound(null, soundPos, SoundEvents.BLOCK_FIRE_EXTINGUISH, SoundCategory.HOSTILE, .5f, .75f); + world.playSound(null, soundPos, SoundEvents.BLAZE_HURT, SoundCategory.HOSTILE, .25f, .75f); + world.playSound(null, soundPos, SoundEvents.FIRE_EXTINGUISH, SoundCategory.HOSTILE, .5f, .75f); } public boolean hasCapturedBlaze() { diff --git a/src/main/java/com/simibubi/create/content/contraptions/processing/burner/BlazeBurnerHandler.java b/src/main/java/com/simibubi/create/content/contraptions/processing/burner/BlazeBurnerHandler.java index 2b30de6ab..42affc19b 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/processing/burner/BlazeBurnerHandler.java +++ b/src/main/java/com/simibubi/create/content/contraptions/processing/burner/BlazeBurnerHandler.java @@ -42,20 +42,20 @@ public class BlazeBurnerHandler { .getType() != RayTraceResult.Type.BLOCK) return; - TileEntity tile = event.getThrowable().world.getTileEntity(new BlockPos(event.getRayTraceResult() - .getHitVec())); + TileEntity tile = event.getThrowable().level.getBlockEntity(new BlockPos(event.getRayTraceResult() + .getLocation())); if (!(tile instanceof BlazeBurnerTileEntity)) { return; } event.setCanceled(true); event.getThrowable() - .setMotion(Vector3d.ZERO); + .setDeltaMovement(Vector3d.ZERO); event.getThrowable() .remove(); - World world = event.getThrowable().world; - if (world.isRemote) + World world = event.getThrowable().level; + if (world.isClientSide) return; BlazeBurnerTileEntity heater = (BlazeBurnerTileEntity) tile; @@ -67,11 +67,11 @@ public class BlazeBurnerHandler { heater.notifyUpdate(); } - AllSoundEvents.BLAZE_MUNCH.playOnServer(world, heater.getPos()); + AllSoundEvents.BLAZE_MUNCH.playOnServer(world, heater.getBlockPos()); } public static void splashExtinguishesBurner(ProjectileImpactEvent.Throwable event) { - if (event.getThrowable().world.isRemote) + if (event.getThrowable().level.isClientSide) return; if (!(event.getThrowable() instanceof PotionEntity)) @@ -83,18 +83,18 @@ public class BlazeBurnerHandler { return; ItemStack stack = entity.getItem(); - Potion potion = PotionUtils.getPotionFromItem(stack); - if (potion == Potions.WATER && PotionUtils.getEffectsFromStack(stack).isEmpty()) { + Potion potion = PotionUtils.getPotion(stack); + if (potion == Potions.WATER && PotionUtils.getMobEffects(stack).isEmpty()) { BlockRayTraceResult result = (BlockRayTraceResult) event.getRayTraceResult(); - World world = entity.world; - Direction face = result.getFace(); - BlockPos pos = result.getPos().offset(face); + World world = entity.level; + Direction face = result.getDirection(); + BlockPos pos = result.getBlockPos().relative(face); extinguishLitBurners(world, pos, face); - extinguishLitBurners(world, pos.offset(face.getOpposite()), face); + extinguishLitBurners(world, pos.relative(face.getOpposite()), face); for (Direction face1 : Direction.Plane.HORIZONTAL) { - extinguishLitBurners(world, pos.offset(face1), face1); + extinguishLitBurners(world, pos.relative(face1), face1); } } } @@ -102,8 +102,8 @@ public class BlazeBurnerHandler { private static void extinguishLitBurners(World world, BlockPos pos, Direction direction) { BlockState state = world.getBlockState(pos); if (AllBlocks.LIT_BLAZE_BURNER.has(state)) { - world.playSound(null, pos, SoundEvents.BLOCK_FIRE_EXTINGUISH, SoundCategory.BLOCKS, 0.5F, 2.6F + (world.rand.nextFloat() - world.rand.nextFloat()) * 0.8F); - world.setBlockState(pos, AllBlocks.BLAZE_BURNER.getDefaultState()); + world.playSound(null, pos, SoundEvents.FIRE_EXTINGUISH, SoundCategory.BLOCKS, 0.5F, 2.6F + (world.random.nextFloat() - world.random.nextFloat()) * 0.8F); + world.setBlockAndUpdate(pos, AllBlocks.BLAZE_BURNER.getDefaultState()); } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/processing/burner/BlazeBurnerRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/processing/burner/BlazeBurnerRenderer.java index cf99503c0..9f000b228 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/processing/burner/BlazeBurnerRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/processing/burner/BlazeBurnerRenderer.java @@ -29,7 +29,7 @@ public class BlazeBurnerRenderer extends SafeTileEntityRenderer 0.25) @@ -217,13 +217,13 @@ public class BlazeBurnerTileEntity extends SmartTileEntity { } private void spawnParticle(HeatLevel heatLevel, float scale, int avgAge, boolean hot, double speed, double spread) { - Random random = world.getRandom(); + Random random = level.getRandom(); Vector3d color = randomColor(heatLevel); - world.addOptionalParticle( + level.addAlwaysVisibleParticle( new CubeParticleData((float) color.x, (float) color.y, (float) color.z, scale, avgAge, hot), - (double) pos.getX() + 0.5D + (random.nextDouble() * 2.0 - 1D) * spread, - (double) pos.getY() + 0.6D + (random.nextDouble() / 4.0), - (double) pos.getZ() + 0.5D + (random.nextDouble() * 2.0 - 1D) * spread, 0.0D, speed, 0.0D); + (double) worldPosition.getX() + 0.5D + (random.nextDouble() * 2.0 - 1D) * spread, + (double) worldPosition.getY() + 0.6D + (random.nextDouble() / 4.0), + (double) worldPosition.getZ() + 0.5D + (random.nextDouble() * 2.0 - 1D) * spread, 0.0D, speed, 0.0D); } private static Vector3d randomColor(BlazeBurnerBlock.HeatLevel heatLevel) { diff --git a/src/main/java/com/simibubi/create/content/contraptions/processing/burner/LitBlazeBurnerBlock.java b/src/main/java/com/simibubi/create/content/contraptions/processing/burner/LitBlazeBurnerBlock.java index 51220474d..c0d9fa4fa 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/processing/burner/LitBlazeBurnerBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/processing/burner/LitBlazeBurnerBlock.java @@ -31,41 +31,43 @@ import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.common.ToolType; +import net.minecraft.block.AbstractBlock.Properties; + public class LitBlazeBurnerBlock extends Block { public static final EnumProperty FLAME_TYPE = EnumProperty.create("flame_type", FlameType.class); public LitBlazeBurnerBlock(Properties properties) { super(properties); - setDefaultState(getDefaultState().with(FLAME_TYPE, FlameType.REGULAR)); + registerDefaultState(defaultBlockState().setValue(FLAME_TYPE, FlameType.REGULAR)); } @Override - protected void fillStateContainer(Builder builder) { - super.fillStateContainer(builder); + protected void createBlockStateDefinition(Builder builder) { + super.createBlockStateDefinition(builder); builder.add(FLAME_TYPE); } @Override - public ActionResultType onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, + public ActionResultType use(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockRayTraceResult blockRayTraceResult) { - ItemStack heldItem = player.getHeldItem(hand); + ItemStack heldItem = player.getItemInHand(hand); if (heldItem.getToolTypes().contains(ToolType.SHOVEL)) { - world.playSound(player, pos, SoundEvents.ENTITY_GENERIC_EXTINGUISH_FIRE, SoundCategory.BLOCKS, 0.5f, 2); - if (world.isRemote) + world.playSound(player, pos, SoundEvents.GENERIC_EXTINGUISH_FIRE, SoundCategory.BLOCKS, 0.5f, 2); + if (world.isClientSide) return ActionResultType.SUCCESS; - heldItem.damageItem(1, player, p -> p.sendBreakAnimation(hand)); - world.setBlockState(pos, AllBlocks.BLAZE_BURNER.getDefaultState()); + heldItem.hurtAndBreak(1, player, p -> p.broadcastBreakEvent(hand)); + world.setBlockAndUpdate(pos, AllBlocks.BLAZE_BURNER.getDefaultState()); return ActionResultType.SUCCESS; } - if (state.get(FLAME_TYPE) == FlameType.REGULAR) { - if (heldItem.getItem().isIn(ItemTags.SOUL_FIRE_BASE_BLOCKS)) { - world.playSound(player, pos, SoundEvents.BLOCK_SOUL_SAND_PLACE, SoundCategory.BLOCKS, 1.0f, world.rand.nextFloat() * 0.4F + 0.8F); - if (world.isRemote) + if (state.getValue(FLAME_TYPE) == FlameType.REGULAR) { + if (heldItem.getItem().is(ItemTags.SOUL_FIRE_BASE_BLOCKS)) { + world.playSound(player, pos, SoundEvents.SOUL_SAND_PLACE, SoundCategory.BLOCKS, 1.0f, world.random.nextFloat() * 0.4F + 0.8F); + if (world.isClientSide) return ActionResultType.SUCCESS; - world.setBlockState(pos, getDefaultState().with(FLAME_TYPE, FlameType.SOUL)); + world.setBlockAndUpdate(pos, defaultBlockState().setValue(FLAME_TYPE, FlameType.SOUL)); return ActionResultType.SUCCESS; } } @@ -87,19 +89,19 @@ public class LitBlazeBurnerBlock extends Block { @OnlyIn(Dist.CLIENT) public void animateTick(BlockState state, World world, BlockPos pos, Random random) { - world.addOptionalParticle(ParticleTypes.LARGE_SMOKE, true, + world.addAlwaysVisibleParticle(ParticleTypes.LARGE_SMOKE, true, (double) pos.getX() + 0.5D + random.nextDouble() / 3.0D * (double) (random.nextBoolean() ? 1 : -1), (double) pos.getY() + random.nextDouble() + random.nextDouble(), (double) pos.getZ() + 0.5D + random.nextDouble() / 3.0D * (double) (random.nextBoolean() ? 1 : -1), 0.0D, 0.07D, 0.0D); if (random.nextInt(10) == 0) { - world.playSound((double) ((float) pos.getX() + 0.5F), (double) ((float) pos.getY() + 0.5F), - (double) ((float) pos.getZ() + 0.5F), SoundEvents.BLOCK_CAMPFIRE_CRACKLE, SoundCategory.BLOCKS, + world.playLocalSound((double) ((float) pos.getX() + 0.5F), (double) ((float) pos.getY() + 0.5F), + (double) ((float) pos.getZ() + 0.5F), SoundEvents.CAMPFIRE_CRACKLE, SoundCategory.BLOCKS, 0.25F + random.nextFloat() * .25f, random.nextFloat() * 0.7F + 0.6F, false); } - if (state.get(FLAME_TYPE) == FlameType.SOUL) { + if (state.getValue(FLAME_TYPE) == FlameType.SOUL) { if (random.nextInt(8) == 0) { world.addParticle(ParticleTypes.SOUL, pos.getX() + 0.5F + random.nextDouble() / 4 * (random.nextBoolean() ? 1 : -1), @@ -120,13 +122,13 @@ public class LitBlazeBurnerBlock extends Block { } @Override - public boolean hasComparatorInputOverride(BlockState p_149740_1_) { + public boolean hasAnalogOutputSignal(BlockState p_149740_1_) { return true; } @Override - public int getComparatorInputOverride(BlockState state, World p_180641_2_, BlockPos p_180641_3_) { - return state.get(FLAME_TYPE) == FlameType.REGULAR ? 1 : 2; + public int getAnalogOutputSignal(BlockState state, World p_180641_2_, BlockPos p_180641_3_) { + return state.getValue(FLAME_TYPE) == FlameType.REGULAR ? 1 : 2; } @Override @@ -137,12 +139,12 @@ public class LitBlazeBurnerBlock extends Block { } @Override - public boolean allowsMovement(BlockState state, IBlockReader reader, BlockPos pos, PathType type) { + public boolean isPathfindable(BlockState state, IBlockReader reader, BlockPos pos, PathType type) { return false; } public static int getLight(BlockState state) { - if (state.get(FLAME_TYPE) == FlameType.SOUL) + if (state.getValue(FLAME_TYPE) == FlameType.SOUL) return 9; else return 12; @@ -153,7 +155,7 @@ public class LitBlazeBurnerBlock extends Block { REGULAR, SOUL; @Override - public String getString() { + public String getSerializedName() { return Lang.asId(name()); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/advanced/GantryShaftBlock.java b/src/main/java/com/simibubi/create/content/contraptions/relays/advanced/GantryShaftBlock.java index 19a563c35..3219d900b 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/advanced/GantryShaftBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/advanced/GantryShaftBlock.java @@ -45,6 +45,8 @@ import net.minecraft.world.IWorld; import net.minecraft.world.IWorldReader; import net.minecraft.world.World; +import net.minecraft.block.AbstractBlock.Properties; + public class GantryShaftBlock extends DirectionalKineticBlock { public static final Property PART = EnumProperty.create("part", Part.class); @@ -56,19 +58,19 @@ public class GantryShaftBlock extends DirectionalKineticBlock { START, MIDDLE, END, SINGLE; @Override - public String getString() { + public String getSerializedName() { return Lang.asId(name()); } } @Override - protected void fillStateContainer(Builder builder) { - super.fillStateContainer(builder.add(PART, POWERED)); + protected void createBlockStateDefinition(Builder builder) { + super.createBlockStateDefinition(builder.add(PART, POWERED)); } @Override - public ActionResultType onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockRayTraceResult ray) { - ItemStack heldItem = player.getHeldItem(hand); + public ActionResultType use(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockRayTraceResult ray) { + ItemStack heldItem = player.getItemInHand(hand); IPlacementHelper placementHelper = PlacementHelpers.get(placementHelperId); if (!placementHelper.matchesItem(heldItem)) @@ -80,25 +82,25 @@ public class GantryShaftBlock extends DirectionalKineticBlock { @Override public VoxelShape getShape(BlockState state, IBlockReader p_220053_2_, BlockPos p_220053_3_, ISelectionContext p_220053_4_) { - return AllShapes.EIGHT_VOXEL_POLE.get(state.get(FACING) + return AllShapes.EIGHT_VOXEL_POLE.get(state.getValue(FACING) .getAxis()); } @Override - public BlockRenderType getRenderType(BlockState state) { + public BlockRenderType getRenderShape(BlockState state) { return BlockRenderType.ENTITYBLOCK_ANIMATED; } @Override - public BlockState updatePostPlacement(BlockState state, Direction direction, BlockState neighbour, IWorld world, + public BlockState updateShape(BlockState state, Direction direction, BlockState neighbour, IWorld world, BlockPos pos, BlockPos neighbourPos) { - Direction facing = state.get(FACING); + Direction facing = state.getValue(FACING); Axis axis = facing.getAxis(); if (direction.getAxis() != axis) return state; - boolean connect = AllBlocks.GANTRY_SHAFT.has(neighbour) && neighbour.get(FACING) == facing; + boolean connect = AllBlocks.GANTRY_SHAFT.has(neighbour) && neighbour.getValue(FACING) == facing; - Part part = state.get(PART); + Part part = state.getValue(PART); if (direction.getAxisDirection() == facing.getAxisDirection()) { if (connect) { if (part == Part.END) @@ -125,58 +127,58 @@ public class GantryShaftBlock extends DirectionalKineticBlock { } } - return state.with(PART, part); + return state.setValue(PART, part); } public GantryShaftBlock(Properties properties) { super(properties); - setDefaultState(getDefaultState().with(POWERED, false) - .with(PART, Part.SINGLE)); + registerDefaultState(defaultBlockState().setValue(POWERED, false) + .setValue(PART, Part.SINGLE)); } @Override public BlockState getStateForPlacement(BlockItemUseContext context) { BlockState state = super.getStateForPlacement(context); - BlockPos pos = context.getPos(); - World world = context.getWorld(); - Direction face = context.getFace(); + BlockPos pos = context.getClickedPos(); + World world = context.getLevel(); + Direction face = context.getClickedFace(); - BlockState neighbour = world.getBlockState(pos.offset(state.get(FACING) + BlockState neighbour = world.getBlockState(pos.relative(state.getValue(FACING) .getOpposite())); BlockState clickedState = - AllBlocks.GANTRY_SHAFT.has(neighbour) ? neighbour : world.getBlockState(pos.offset(face.getOpposite())); + AllBlocks.GANTRY_SHAFT.has(neighbour) ? neighbour : world.getBlockState(pos.relative(face.getOpposite())); - if (AllBlocks.GANTRY_SHAFT.has(clickedState) && clickedState.get(FACING) - .getAxis() == state.get(FACING) + if (AllBlocks.GANTRY_SHAFT.has(clickedState) && clickedState.getValue(FACING) + .getAxis() == state.getValue(FACING) .getAxis()) { - Direction facing = clickedState.get(FACING); - state = state.with(FACING, context.getPlayer() == null || !context.getPlayer() - .isSneaking() ? facing : facing.getOpposite()); + Direction facing = clickedState.getValue(FACING); + state = state.setValue(FACING, context.getPlayer() == null || !context.getPlayer() + .isShiftKeyDown() ? facing : facing.getOpposite()); } - return state.with(POWERED, shouldBePowered(state, world, pos)); + return state.setValue(POWERED, shouldBePowered(state, world, pos)); } @Override public ActionResultType onWrenched(BlockState state, ItemUseContext context) { ActionResultType onWrenched = super.onWrenched(state, context); - if (onWrenched.isAccepted()) { - BlockPos pos = context.getPos(); - World world = context.getWorld(); + if (onWrenched.consumesAction()) { + BlockPos pos = context.getClickedPos(); + World world = context.getLevel(); neighborChanged(world.getBlockState(pos), world, pos, state.getBlock(), pos, false); } return onWrenched; } @Override - public void onBlockAdded(BlockState state, World worldIn, BlockPos pos, BlockState oldState, boolean isMoving) { - super.onBlockAdded(state, worldIn, pos, oldState, isMoving); + public void onPlace(BlockState state, World worldIn, BlockPos pos, BlockState oldState, boolean isMoving) { + super.onPlace(state, worldIn, pos, oldState, isMoving); - if (!worldIn.isRemote() && oldState.getBlock().is(AllBlocks.GANTRY_SHAFT.get())) { - Part oldPart = oldState.get(PART), part = state.get(PART); + if (!worldIn.isClientSide() && oldState.getBlock().is(AllBlocks.GANTRY_SHAFT.get())) { + Part oldPart = oldState.getValue(PART), part = state.getValue(PART); if ((oldPart != Part.MIDDLE && part == Part.MIDDLE) || (oldPart == Part.SINGLE && part != Part.SINGLE)) { - TileEntity te = worldIn.getTileEntity(pos); + TileEntity te = worldIn.getBlockEntity(pos); if (te instanceof GantryShaftTileEntity) ((GantryShaftTileEntity) te).checkAttachedCarriageBlocks(); } @@ -186,13 +188,13 @@ public class GantryShaftBlock extends DirectionalKineticBlock { @Override public void neighborChanged(BlockState state, World worldIn, BlockPos pos, Block p_220069_4_, BlockPos p_220069_5_, boolean p_220069_6_) { - if (worldIn.isRemote) + if (worldIn.isClientSide) return; - boolean previouslyPowered = state.get(POWERED); - boolean shouldPower = worldIn.isBlockPowered(pos); // shouldBePowered(state, worldIn, pos); + boolean previouslyPowered = state.getValue(POWERED); + boolean shouldPower = worldIn.hasNeighborSignal(pos); // shouldBePowered(state, worldIn, pos); if (!previouslyPowered && !shouldPower && shouldBePowered(state, worldIn, pos)) { - worldIn.setBlockState(pos, state.with(POWERED, true), 3); + worldIn.setBlock(pos, state.setValue(POWERED, true), 3); return; } @@ -201,52 +203,52 @@ public class GantryShaftBlock extends DirectionalKineticBlock { // Collect affected gantry shafts List toUpdate = new ArrayList<>(); - Direction facing = state.get(FACING); + Direction facing = state.getValue(FACING); Axis axis = facing.getAxis(); for (Direction d : Iterate.directionsInAxis(axis)) { - BlockPos currentPos = pos.offset(d); + BlockPos currentPos = pos.relative(d); while (true) { - if (!worldIn.isBlockPresent(currentPos)) + if (!worldIn.isLoaded(currentPos)) break; BlockState currentState = worldIn.getBlockState(currentPos); if (!(currentState.getBlock() instanceof GantryShaftBlock)) break; - if (currentState.get(FACING) != facing) + if (currentState.getValue(FACING) != facing) break; - if (!shouldPower && currentState.get(POWERED) && worldIn.isBlockPowered(currentPos)) + if (!shouldPower && currentState.getValue(POWERED) && worldIn.hasNeighborSignal(currentPos)) return; - if (currentState.get(POWERED) == shouldPower) + if (currentState.getValue(POWERED) == shouldPower) break; toUpdate.add(currentPos); - currentPos = currentPos.offset(d); + currentPos = currentPos.relative(d); } } toUpdate.add(pos); for (BlockPos blockPos : toUpdate) { BlockState blockState = worldIn.getBlockState(blockPos); - TileEntity te = worldIn.getTileEntity(blockPos); + TileEntity te = worldIn.getBlockEntity(blockPos); if (te instanceof KineticTileEntity) ((KineticTileEntity) te).detachKinetics(); if (blockState.getBlock() instanceof GantryShaftBlock) - worldIn.setBlockState(blockPos, blockState.with(POWERED, shouldPower), 2); + worldIn.setBlock(blockPos, blockState.setValue(POWERED, shouldPower), 2); } } protected boolean shouldBePowered(BlockState state, World worldIn, BlockPos pos) { - boolean shouldPower = worldIn.isBlockPowered(pos); + boolean shouldPower = worldIn.hasNeighborSignal(pos); - Direction facing = state.get(FACING); + Direction facing = state.getValue(FACING); for (Direction d : Iterate.directionsInAxis(facing.getAxis())) { - BlockPos neighbourPos = pos.offset(d); - if (!worldIn.isBlockPresent(neighbourPos)) + BlockPos neighbourPos = pos.relative(d); + if (!worldIn.isLoaded(neighbourPos)) continue; BlockState neighbourState = worldIn.getBlockState(neighbourPos); if (!(neighbourState.getBlock() instanceof GantryShaftBlock)) continue; - if (neighbourState.get(FACING) != facing) + if (neighbourState.getValue(FACING) != facing) continue; - shouldPower |= neighbourState.get(POWERED); + shouldPower |= neighbourState.getValue(POWERED); } return shouldPower; @@ -254,13 +256,13 @@ public class GantryShaftBlock extends DirectionalKineticBlock { @Override public boolean hasShaftTowards(IWorldReader world, BlockPos pos, BlockState state, Direction face) { - return face.getAxis() == state.get(FACING) + return face.getAxis() == state.getValue(FACING) .getAxis(); } @Override public Axis getRotationAxis(BlockState state) { - return state.get(FACING) + return state.getValue(FACING) .getAxis(); } @@ -272,7 +274,7 @@ public class GantryShaftBlock extends DirectionalKineticBlock { @Override protected boolean areStatesKineticallyEquivalent(BlockState oldState, BlockState newState) { return super.areStatesKineticallyEquivalent(oldState, newState) - && oldState.get(POWERED) == newState.get(POWERED); + && oldState.getValue(POWERED) == newState.getValue(POWERED); } @Override @@ -286,14 +288,14 @@ public class GantryShaftBlock extends DirectionalKineticBlock { } @Override - public boolean allowsMovement(BlockState state, IBlockReader reader, BlockPos pos, PathType type) { + public boolean isPathfindable(BlockState state, IBlockReader reader, BlockPos pos, PathType type) { return false; } public static class PlacementHelper extends PoleHelper { public PlacementHelper() { - super(AllBlocks.GANTRY_SHAFT::has, s -> s.get(FACING) + super(AllBlocks.GANTRY_SHAFT::has, s -> s.getValue(FACING) .getAxis(), FACING); } @@ -305,7 +307,7 @@ public class GantryShaftBlock extends DirectionalKineticBlock { @Override public PlacementOffset getOffset(PlayerEntity player, World world, BlockState state, BlockPos pos, BlockRayTraceResult ray) { PlacementOffset offset = super.getOffset(player, world, state, pos, ray); - offset.withTransform(offset.getTransform().andThen(s -> s.with(POWERED, state.get(POWERED)))); + offset.withTransform(offset.getTransform().andThen(s -> s.setValue(POWERED, state.getValue(POWERED)))); return offset; } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/advanced/GantryShaftTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/relays/advanced/GantryShaftTileEntity.java index 4cd68bcbf..2d29850bb 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/advanced/GantryShaftTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/advanced/GantryShaftTileEntity.java @@ -23,16 +23,16 @@ public class GantryShaftTileEntity extends KineticTileEntity { if (!canAssembleOn()) return; for (Direction d : Iterate.directions) { - if (d.getAxis() == getBlockState().get(GantryShaftBlock.FACING) + if (d.getAxis() == getBlockState().getValue(GantryShaftBlock.FACING) .getAxis()) continue; - BlockPos offset = pos.offset(d); - BlockState pinionState = world.getBlockState(offset); + BlockPos offset = worldPosition.relative(d); + BlockState pinionState = level.getBlockState(offset); if (!AllBlocks.GANTRY_CARRIAGE.has(pinionState)) continue; - if (pinionState.get(GantryCarriageBlock.FACING) != d) + if (pinionState.getValue(GantryCarriageBlock.FACING) != d) continue; - TileEntity tileEntity = world.getTileEntity(offset); + TileEntity tileEntity = level.getBlockEntity(offset); if (tileEntity instanceof GantryCarriageTileEntity) ((GantryCarriageTileEntity) tileEntity).queueAssembly(); } @@ -52,37 +52,37 @@ public class GantryShaftTileEntity extends KineticTileEntity { if (connectedViaAxes) return defaultModifier; - if (!stateFrom.get(GantryShaftBlock.POWERED)) + if (!stateFrom.getValue(GantryShaftBlock.POWERED)) return defaultModifier; if (!AllBlocks.GANTRY_CARRIAGE.has(stateTo)) return defaultModifier; - Direction direction = Direction.getFacingFromVector(diff.getX(), diff.getY(), diff.getZ()); - if (stateTo.get(GantryCarriageBlock.FACING) != direction) + Direction direction = Direction.getNearest(diff.getX(), diff.getY(), diff.getZ()); + if (stateTo.getValue(GantryCarriageBlock.FACING) != direction) return defaultModifier; - return GantryCarriageTileEntity.getGantryPinionModifier(stateFrom.get(GantryShaftBlock.FACING), - stateTo.get(GantryCarriageBlock.FACING)); + return GantryCarriageTileEntity.getGantryPinionModifier(stateFrom.getValue(GantryShaftBlock.FACING), + stateTo.getValue(GantryCarriageBlock.FACING)); } @Override public boolean isCustomConnection(KineticTileEntity other, BlockState state, BlockState otherState) { if (!AllBlocks.GANTRY_CARRIAGE.has(otherState)) return false; - final BlockPos diff = other.getPos() - .subtract(pos); - Direction direction = Direction.getFacingFromVector(diff.getX(), diff.getY(), diff.getZ()); - return otherState.get(GantryCarriageBlock.FACING) == direction; + final BlockPos diff = other.getBlockPos() + .subtract(worldPosition); + Direction direction = Direction.getNearest(diff.getX(), diff.getY(), diff.getZ()); + return otherState.getValue(GantryCarriageBlock.FACING) == direction; } public boolean canAssembleOn() { BlockState blockState = getBlockState(); if (!AllBlocks.GANTRY_SHAFT.has(blockState)) return false; - if (blockState.get(GantryShaftBlock.POWERED)) + if (blockState.getValue(GantryShaftBlock.POWERED)) return false; float speed = getPinionMovementSpeed(); - switch (blockState.get(GantryShaftBlock.PART)) { + switch (blockState.getValue(GantryShaftBlock.PART)) { case END: return speed < 0; case MIDDLE: diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/advanced/SpeedControllerBlock.java b/src/main/java/com/simibubi/create/content/contraptions/relays/advanced/SpeedControllerBlock.java index 46a4f25d4..2c2be6f0e 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/advanced/SpeedControllerBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/advanced/SpeedControllerBlock.java @@ -33,6 +33,8 @@ import net.minecraft.util.math.shapes.VoxelShape; import net.minecraft.world.IBlockReader; import net.minecraft.world.World; +import net.minecraft.block.AbstractBlock.Properties; + @ParametersAreNonnullByDefault @MethodsReturnNonnullByDefault public class SpeedControllerBlock extends HorizontalAxisKineticBlock implements ITE { @@ -50,27 +52,27 @@ public class SpeedControllerBlock extends HorizontalAxisKineticBlock implements @Override public BlockState getStateForPlacement(BlockItemUseContext context) { - BlockState above = context.getWorld() - .getBlockState(context.getPos() - .up()); - if (ICogWheel.isLargeCog(above) && above.get(CogWheelBlock.AXIS) + BlockState above = context.getLevel() + .getBlockState(context.getClickedPos() + .above()); + if (ICogWheel.isLargeCog(above) && above.getValue(CogWheelBlock.AXIS) .isHorizontal()) - return getDefaultState().with(HORIZONTAL_AXIS, above.get(CogWheelBlock.AXIS) == Axis.X ? Axis.Z : Axis.X); + return defaultBlockState().setValue(HORIZONTAL_AXIS, above.getValue(CogWheelBlock.AXIS) == Axis.X ? Axis.Z : Axis.X); return super.getStateForPlacement(context); } @Override public void neighborChanged(BlockState state, World world, BlockPos pos, Block p_220069_4_, BlockPos neighbourPos, boolean p_220069_6_) { - if (neighbourPos.equals(pos.up())) + if (neighbourPos.equals(pos.above())) withTileEntityDo(world, pos, SpeedControllerTileEntity::updateBracket); } @Override - public ActionResultType onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, + public ActionResultType use(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockRayTraceResult ray) { - ItemStack heldItem = player.getHeldItem(hand); + ItemStack heldItem = player.getItemInHand(hand); IPlacementHelper helper = PlacementHelpers.get(placementHelperId); if (helper.matchesItem(heldItem)) return helper.getOffset(player, world, state, pos, ray).placeInWorld(world, (BlockItem) heldItem.getItem(), player, hand, ray); @@ -97,18 +99,18 @@ public class SpeedControllerBlock extends HorizontalAxisKineticBlock implements @Override public PlacementOffset getOffset(PlayerEntity player, World world, BlockState state, BlockPos pos, BlockRayTraceResult ray) { - BlockPos newPos = pos.up(); + BlockPos newPos = pos.above(); if (!world.getBlockState(newPos) .getMaterial() .isReplaceable()) return PlacementOffset.fail(); - Axis newAxis = state.get(HORIZONTAL_AXIS) == Axis.X ? Axis.Z : Axis.X; + Axis newAxis = state.getValue(HORIZONTAL_AXIS) == Axis.X ? Axis.Z : Axis.X; if (!CogWheelBlock.isValidCogwheelPosition(true, world, newPos, newAxis)) return PlacementOffset.fail(); - return PlacementOffset.success(newPos, s -> s.with(CogWheelBlock.AXIS, newAxis)); + return PlacementOffset.success(newPos, s -> s.setValue(CogWheelBlock.AXIS, newAxis)); } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/advanced/SpeedControllerRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/relays/advanced/SpeedControllerRenderer.java index cb6c22d09..54349d915 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/advanced/SpeedControllerRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/advanced/SpeedControllerRenderer.java @@ -31,24 +31,24 @@ public class SpeedControllerRenderer extends SmartTileEntityRenderer { public static final BooleanProperty VERTICAL = BooleanProperty.create("vertical"); @@ -46,8 +48,8 @@ public class SequencedGearshiftBlock extends HorizontalAxisKineticBlock implemen } @Override - protected void fillStateContainer(Builder builder) { - super.fillStateContainer(builder.add(STATE, VERTICAL)); + protected void createBlockStateDefinition(Builder builder) { + super.createBlockStateDefinition(builder.add(STATE, VERTICAL)); } @Override @@ -63,18 +65,18 @@ public class SequencedGearshiftBlock extends HorizontalAxisKineticBlock implemen @Override public void neighborChanged(BlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos, boolean isMoving) { - if (worldIn.isRemote) + if (worldIn.isClientSide) return; - if (!worldIn.getPendingBlockTicks() - .isTickPending(pos, this)) - worldIn.getPendingBlockTicks() + if (!worldIn.getBlockTicks() + .willTickThisTick(pos, this)) + worldIn.getBlockTicks() .scheduleTick(pos, this, 0); } @Override - public void scheduledTick(BlockState state, ServerWorld worldIn, BlockPos pos, Random r) { - boolean previouslyPowered = state.get(STATE) != 0; - boolean isPowered = worldIn.isBlockPowered(pos); + public void tick(BlockState state, ServerWorld worldIn, BlockPos pos, Random r) { + boolean previouslyPowered = state.getValue(STATE) != 0; + boolean isPowered = worldIn.hasNeighborSignal(pos); withTileEntityDo(worldIn, pos, sgte -> sgte.onRedstoneUpdate(isPowered, previouslyPowered)); } @@ -85,21 +87,21 @@ public class SequencedGearshiftBlock extends HorizontalAxisKineticBlock implemen @Override public boolean hasShaftTowards(IWorldReader world, BlockPos pos, BlockState state, Direction face) { - if (state.get(VERTICAL)) + if (state.getValue(VERTICAL)) return face.getAxis() .isVertical(); return super.hasShaftTowards(world, pos, state, face); } @Override - public ActionResultType onUse(BlockState state, World worldIn, BlockPos pos, PlayerEntity player, Hand handIn, + public ActionResultType use(BlockState state, World worldIn, BlockPos pos, PlayerEntity player, Hand handIn, BlockRayTraceResult hit) { - ItemStack held = player.getHeldItemMainhand(); + ItemStack held = player.getMainHandItem(); if (AllItems.WRENCH.isIn(held)) return ActionResultType.PASS; if (held.getItem() instanceof BlockItem) { BlockItem blockItem = (BlockItem) held.getItem(); - if (blockItem.getBlock() instanceof KineticBlock && hasShaftTowards(worldIn, pos, state, hit.getFace())) + if (blockItem.getBlock() instanceof KineticBlock && hasShaftTowards(worldIn, pos, state, hit.getDirection())) return ActionResultType.PASS; } @@ -118,7 +120,7 @@ public class SequencedGearshiftBlock extends HorizontalAxisKineticBlock implemen public BlockState getStateForPlacement(BlockItemUseContext context) { Axis preferredAxis = RotatedPillarKineticBlock.getPreferredAxis(context); if (preferredAxis != null && (context.getPlayer() == null || !context.getPlayer() - .isSneaking())) + .isShiftKeyDown())) return withAxis(preferredAxis, context); return withAxis(context.getNearestLookingDirection() .getAxis(), context); @@ -128,9 +130,9 @@ public class SequencedGearshiftBlock extends HorizontalAxisKineticBlock implemen public ActionResultType onWrenched(BlockState state, ItemUseContext context) { BlockState newState = state; - if (context.getFace() + if (context.getClickedFace() .getAxis() != Axis.Y) - if (newState.get(HORIZONTAL_AXIS) != context.getFace() + if (newState.getValue(HORIZONTAL_AXIS) != context.getClickedFace() .getAxis()) newState = newState.cycle(VERTICAL); @@ -138,16 +140,16 @@ public class SequencedGearshiftBlock extends HorizontalAxisKineticBlock implemen } private BlockState withAxis(Axis axis, BlockItemUseContext context) { - BlockState state = getDefaultState().with(VERTICAL, axis.isVertical()); + BlockState state = defaultBlockState().setValue(VERTICAL, axis.isVertical()); if (axis.isVertical()) - return state.with(HORIZONTAL_AXIS, context.getPlacementHorizontalFacing() + return state.setValue(HORIZONTAL_AXIS, context.getHorizontalDirection() .getAxis()); - return state.with(HORIZONTAL_AXIS, axis); + return state.setValue(HORIZONTAL_AXIS, axis); } @Override public Axis getRotationAxis(BlockState state) { - if (state.get(VERTICAL)) + if (state.getValue(VERTICAL)) return Axis.Y; return super.getRotationAxis(state); } @@ -158,13 +160,13 @@ public class SequencedGearshiftBlock extends HorizontalAxisKineticBlock implemen } @Override - public boolean hasComparatorInputOverride(BlockState p_149740_1_) { + public boolean hasAnalogOutputSignal(BlockState p_149740_1_) { return true; } @Override - public int getComparatorInputOverride(BlockState state, World world, BlockPos pos) { - return state.get(STATE) + public int getAnalogOutputSignal(BlockState state, World world, BlockPos pos) { + return state.getValue(STATE) .intValue(); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/advanced/sequencer/SequencedGearshiftGenerator.java b/src/main/java/com/simibubi/create/content/contraptions/relays/advanced/sequencer/SequencedGearshiftGenerator.java index 86b5f5b59..9301fecdd 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/advanced/sequencer/SequencedGearshiftGenerator.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/advanced/sequencer/SequencedGearshiftGenerator.java @@ -13,19 +13,19 @@ public class SequencedGearshiftGenerator extends SpecialBlockStateGen { @Override protected int getXRotation(BlockState state) { - return state.get(SequencedGearshiftBlock.VERTICAL) ? 90 : 0; + return state.getValue(SequencedGearshiftBlock.VERTICAL) ? 90 : 0; } @Override protected int getYRotation(BlockState state) { - return state.get(SequencedGearshiftBlock.HORIZONTAL_AXIS) == Axis.X ? 90 : 0; + return state.getValue(SequencedGearshiftBlock.HORIZONTAL_AXIS) == Axis.X ? 90 : 0; } @Override public ModelFile getModel(DataGenContext ctx, RegistrateBlockstateProvider prov, BlockState state) { String variant = "idle"; - int seq = state.get(SequencedGearshiftBlock.STATE); + int seq = state.getValue(SequencedGearshiftBlock.STATE); if (seq > 0) variant = "seq_" + seq; return prov.models() diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/advanced/sequencer/SequencedGearshiftScreen.java b/src/main/java/com/simibubi/create/content/contraptions/relays/advanced/sequencer/SequencedGearshiftScreen.java index 5ba9d46bd..30a7063fc 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/advanced/sequencer/SequencedGearshiftScreen.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/advanced/sequencer/SequencedGearshiftScreen.java @@ -35,7 +35,7 @@ public class SequencedGearshiftScreen extends AbstractSimiScreen { public SequencedGearshiftScreen(SequencedGearshiftTileEntity te) { super(Lang.translate("gui.sequenced_gearshift.title")); this.instructions = te.instructions; - this.pos = te.getPos(); + this.pos = te.getBlockPos(); compareTag = Instruction.serializeAll(instructions); } @@ -147,14 +147,14 @@ public class SequencedGearshiftScreen extends AbstractSimiScreen { label(ms, 36, yOffset - 3, Lang.translate(def.translationKey)); if (def.hasValueParameter) { String text = def.formatValue(instruction.value); - int stringWidth = textRenderer.getStringWidth(text); + int stringWidth = font.width(text); label(ms, 90 + (12 - stringWidth / 2), yOffset - 3, new StringTextComponent(text)); } if (def.hasSpeedParameter) label(ms, 127, yOffset - 3, instruction.speedModifier.label); } - drawCenteredText(ms, textRenderer, title, x + (background.width - 8) / 2, y + 3, 0xFFFFFF); + drawCenteredString(ms, font, title, x + (background.width - 8) / 2, y + 3, 0xFFFFFF); GuiGameElement.of(renderedItem) .at(x + background.width + 6, y + background.height - 56, -200) @@ -163,7 +163,7 @@ public class SequencedGearshiftScreen extends AbstractSimiScreen { } private void label(MatrixStack ms, int x, int y, ITextComponent text) { - textRenderer.drawWithShadow(ms, text, guiLeft + x, guiTop + 26 + y, 0xFFFFEE); + font.drawShadow(ms, text, guiLeft + x, guiTop + 26 + y, 0xFFFFEE); } public void sendPacket() { @@ -201,7 +201,7 @@ public class SequencedGearshiftScreen extends AbstractSimiScreen { @Override public boolean mouseClicked(double x, double y, int button) { if (confirmButton.isHovered()) { - client.player.closeScreen(); + minecraft.player.closeContainer(); return true; } diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/advanced/sequencer/SequencedGearshiftTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/relays/advanced/sequencer/SequencedGearshiftTileEntity.java index c65896513..4801c13ac 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/advanced/sequencer/SequencedGearshiftTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/advanced/sequencer/SequencedGearshiftTileEntity.java @@ -35,7 +35,7 @@ public class SequencedGearshiftTileEntity extends SplitShaftTileEntity { if (isIdle()) return; - if (world.isRemote) + if (level.isClientSide) return; if (currentInstructionDuration < 0) return; @@ -78,8 +78,8 @@ public class SequencedGearshiftTileEntity extends SplitShaftTileEntity { return; if (isPowered == isRunning) return; - if (!world.isBlockPowered(pos)) { - world.setBlockState(pos, getBlockState().with(SequencedGearshiftBlock.STATE, 0), 3); + if (!level.hasNeighborSignal(worldPosition)) { + level.setBlock(worldPosition, getBlockState().setValue(SequencedGearshiftBlock.STATE, 0), 3); return; } if (getSpeed() == 0) @@ -113,8 +113,8 @@ public class SequencedGearshiftTileEntity extends SplitShaftTileEntity { currentInstructionDuration = -1; currentInstructionProgress = 0; timer = 0; - if (!world.isBlockPowered(pos)) - world.setBlockState(pos, getBlockState().with(SequencedGearshiftBlock.STATE, 0), 3); + if (!level.hasNeighborSignal(worldPosition)) + level.setBlock(worldPosition, getBlockState().setValue(SequencedGearshiftBlock.STATE, 0), 3); else sendData(); return; @@ -125,7 +125,7 @@ public class SequencedGearshiftTileEntity extends SplitShaftTileEntity { currentInstruction = instructionIndex; currentInstructionProgress = 0; timer = 0; - world.setBlockState(pos, getBlockState().with(SequencedGearshiftBlock.STATE, instructionIndex + 1), 3); + level.setBlock(worldPosition, getBlockState().setValue(SequencedGearshiftBlock.STATE, instructionIndex + 1), 3); } public Instruction getInstruction(int instructionIndex) { diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltBlock.java b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltBlock.java index 0385ae526..a10935923 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltBlock.java @@ -76,6 +76,8 @@ import net.minecraftforge.common.Tags; import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.IItemHandler; +import net.minecraft.block.AbstractBlock.Properties; + public class BeltBlock extends HorizontalKineticBlock implements ITE, ISpecialBlockItemRequirement { public static final Property SLOPE = EnumProperty.create("slope", BeltSlope.class); @@ -84,19 +86,19 @@ public class BeltBlock extends HorizontalKineticBlock implements ITE p_149666_2_) { + public void fillItemCategory(ItemGroup p_149666_1_, NonNullList p_149666_2_) { p_149666_2_.add(AllItems.BELT_CONNECTOR.asStack()); } @Override protected boolean areStatesKineticallyEquivalent(BlockState oldState, BlockState newState) { - return super.areStatesKineticallyEquivalent(oldState, newState) && oldState.get(PART) == newState.get(PART); + return super.areStatesKineticallyEquivalent(oldState, newState) && oldState.getValue(PART) == newState.getValue(PART); } @Override @@ -109,10 +111,10 @@ public class BeltBlock extends HorizontalKineticBlock implements ITE getDrops(BlockState state, net.minecraft.loot.LootContext.Builder builder) { List drops = super.getDrops(state, builder); - TileEntity tileEntity = builder.get(LootParameters.BLOCK_ENTITY); + TileEntity tileEntity = builder.getOptionalParameter(LootParameters.BLOCK_ENTITY); if (tileEntity instanceof BeltTileEntity && ((BeltTileEntity) tileEntity).hasPulley()) drops.addAll(AllBlocks.SHAFT.getDefaultState() .getDrops(builder)); @@ -143,7 +145,7 @@ public class BeltBlock extends HorizontalKineticBlock implements ITE 0) + if (entityIn.getDeltaMovement().y > 0) return; if (!entityIn.isAlive()) return; @@ -220,7 +222,7 @@ public class BeltBlock extends HorizontalKineticBlock implements ITE te.applyColor(DyeColor.getColor(heldItem))); return ActionResultType.SUCCESS; } @@ -263,7 +265,7 @@ public class BeltBlock extends HorizontalKineticBlock implements ITE te.setCasingType(CasingType.BRASS)); @@ -297,7 +299,7 @@ public class BeltBlock extends HorizontalKineticBlock implements ITE te.setCasingType(CasingType.ANDESITE)); @@ -309,21 +311,21 @@ public class BeltBlock extends HorizontalKineticBlock implements ITE te.setCasingType(CasingType.NONE)); return ActionResultType.SUCCESS; } - if (state.get(PART) == BeltPart.PULLEY) { - if (world.isRemote) + if (state.getValue(PART) == BeltPart.PULLEY) { + if (world.isClientSide) return ActionResultType.SUCCESS; - KineticTileEntity.switchToBlockState(world, pos, state.with(PART, BeltPart.MIDDLE)); + KineticTileEntity.switchToBlockState(world, pos, state.setValue(PART, BeltPart.MIDDLE)); if (player != null && !player.isCreative()) player.inventory.placeItemBackInInventory(world, AllBlocks.SHAFT.asStack()); return ActionResultType.SUCCESS; @@ -333,9 +335,9 @@ public class BeltBlock extends HorizontalKineticBlock implements ITE builder) { + protected void createBlockStateDefinition(Builder builder) { builder.add(SLOPE, PART, CASING); - super.fillStateContainer(builder); + super.createBlockStateDefinition(builder); } @Override @@ -387,15 +389,15 @@ public class BeltBlock extends HorizontalKineticBlock implements ITE required = new ArrayList<>(); - if (state.get(PART) != BeltPart.MIDDLE) + if (state.getValue(PART) != BeltPart.MIDDLE) required.add(AllBlocks.SHAFT.asStack()); - if (state.get(PART) == BeltPart.START) + if (state.getValue(PART) == BeltPart.START) required.add(AllItems.BELT_CONNECTOR.asStack()); if (required.isEmpty()) return ItemRequirement.NONE; @@ -599,22 +601,22 @@ public class BeltBlock extends HorizontalKineticBlock implements ITE ModelFile getModel(DataGenContext ctx, RegistrateBlockstateProvider prov, BlockState state) { - Boolean casing = state.get(BeltBlock.CASING); + Boolean casing = state.getValue(BeltBlock.CASING); if (!casing) return prov.models() .getExistingFile(prov.modLoc("block/belt/particle")); - BeltPart part = state.get(BeltBlock.PART); - Direction direction = state.get(BeltBlock.HORIZONTAL_FACING); - BeltSlope slope = state.get(BeltBlock.SLOPE); + BeltPart part = state.getValue(BeltBlock.PART); + Direction direction = state.getValue(BeltBlock.HORIZONTAL_FACING); + BeltSlope slope = state.getValue(BeltBlock.SLOPE); boolean downward = slope == BeltSlope.DOWNWARD; boolean diagonal = slope == BeltSlope.UPWARD || downward; boolean vertical = slope == BeltSlope.VERTICAL; @@ -63,8 +63,8 @@ public class BeltGenerator extends SpecialBlockStateGen { slope = BeltSlope.SIDEWAYS; String path = "block/" + (casing ? "belt_casing/" : "belt/"); - String slopeName = slope.getString(); - String partName = part.getString(); + String slopeName = slope.getSerializedName(); + String partName = part.getSerializedName(); if (diagonal) slopeName = "diagonal"; diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltHelper.java b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltHelper.java index 9ce688a16..a2a339ba3 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltHelper.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltHelper.java @@ -18,13 +18,13 @@ public class BeltHelper { return stack.getCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY) .isPresent() || stack.getItem() - .isIn(AllItemTags.UPRIGHT_ON_BELT.tag); + .is(AllItemTags.UPRIGHT_ON_BELT.tag); } public static BeltTileEntity getSegmentTE(IWorld world, BlockPos pos) { if (!world.isAreaLoaded(pos, 0)) return null; - TileEntity tileEntity = world.getTileEntity(pos); + TileEntity tileEntity = world.getBlockEntity(pos); if (!(tileEntity instanceof BeltTileEntity)) return null; return (BeltTileEntity) tileEntity; @@ -46,36 +46,36 @@ public class BeltHelper { public static BeltTileEntity getBeltAtSegment(BeltTileEntity controller, int segment) { BlockPos pos = getPositionForOffset(controller, segment); - TileEntity te = controller.getWorld() - .getTileEntity(pos); + TileEntity te = controller.getLevel() + .getBlockEntity(pos); if (te == null || !(te instanceof BeltTileEntity)) return null; return (BeltTileEntity) te; } public static BlockPos getPositionForOffset(BeltTileEntity controller, int offset) { - BlockPos pos = controller.getPos(); + BlockPos pos = controller.getBlockPos(); Vector3i vec = controller.getBeltFacing() - .getDirectionVec(); + .getNormal(); BeltSlope slope = controller.getBlockState() - .get(BeltBlock.SLOPE); + .getValue(BeltBlock.SLOPE); int verticality = slope == BeltSlope.DOWNWARD ? -1 : slope == BeltSlope.UPWARD ? 1 : 0; - return pos.add(offset * vec.getX(), MathHelper.clamp(offset, 0, controller.beltLength - 1) * verticality, + return pos.offset(offset * vec.getX(), MathHelper.clamp(offset, 0, controller.beltLength - 1) * verticality, offset * vec.getZ()); } public static Vector3d getVectorForOffset(BeltTileEntity controller, float offset) { BeltSlope slope = controller.getBlockState() - .get(BeltBlock.SLOPE); + .getValue(BeltBlock.SLOPE); int verticality = slope == BeltSlope.DOWNWARD ? -1 : slope == BeltSlope.UPWARD ? 1 : 0; float verticalMovement = verticality; if (offset < .5) verticalMovement = 0; verticalMovement = verticalMovement * (Math.min(offset, controller.beltLength - .5f) - .5f); - Vector3d vec = VecHelper.getCenterOf(controller.getPos()); - Vector3d horizontalMovement = Vector3d.of(controller.getBeltFacing() - .getDirectionVec()).scale(offset - .5f); + Vector3d vec = VecHelper.getCenterOf(controller.getBlockPos()); + Vector3d horizontalMovement = Vector3d.atLowerCornerOf(controller.getBeltFacing() + .getNormal()).scale(offset - .5f); if (slope == BeltSlope.VERTICAL) horizontalMovement = Vector3d.ZERO; 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 510e9f125..f30d42e08 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 @@ -43,8 +43,8 @@ public class BeltInstance extends KineticTileInstance { keys = new ArrayList<>(2); - beltSlope = blockState.get(BeltBlock.SLOPE); - facing = blockState.get(BeltBlock.HORIZONTAL_FACING); + beltSlope = blockState.getValue(BeltBlock.SLOPE); + facing = blockState.getValue(BeltBlock.HORIZONTAL_FACING); upward = beltSlope == BeltSlope.UPWARD; diagonal = beltSlope.isDiagonal(); sideways = beltSlope == BeltSlope.SIDEWAYS; @@ -52,7 +52,7 @@ public class BeltInstance extends KineticTileInstance { alongX = facing.getAxis() == Direction.Axis.X; alongZ = facing.getAxis() == Direction.Axis.Z; - BeltPart part = blockState.get(BeltBlock.PART); + BeltPart part = blockState.getValue(BeltBlock.PART); boolean start = part == BeltPart.START; boolean end = part == BeltPart.END; DyeColor color = tile.color.orElse(null); @@ -144,8 +144,8 @@ public class BeltInstance extends KineticTileInstance { } private Direction getOrientation() { - Direction dir = blockState.get(BeltBlock.HORIZONTAL_FACING) - .rotateY(); + Direction dir = blockState.getValue(BeltBlock.HORIZONTAL_FACING) + .getClockWise(); if (beltSlope == BeltSlope.SIDEWAYS) dir = Direction.UP; @@ -155,7 +155,7 @@ public class BeltInstance extends KineticTileInstance { private BeltData setup(BeltData key, boolean bottom, SpriteShiftEntry spriteShift) { boolean downward = beltSlope == BeltSlope.DOWNWARD; float rotX = (!diagonal && beltSlope != BeltSlope.HORIZONTAL ? 90 : 0) + (downward ? 180 : 0) + (sideways ? 90 : 0) + (vertical && alongZ ? 180 : 0); - float rotY = facing.getHorizontalAngle() + ((diagonal ^ alongX) && !downward ? 180 : 0) + (sideways && alongZ ? 180 : 0) + (vertical && alongX ? 90 : 0); + float rotY = facing.toYRot() + ((diagonal ^ alongX) && !downward ? 180 : 0) + (sideways && alongZ ? 180 : 0) + (vertical && alongX ? 90 : 0); float rotZ = (sideways ? 90 : 0) + (vertical && alongX ? 90 : 0); Quaternion q = new Quaternion(rotX, rotY, rotZ, true); @@ -167,8 +167,8 @@ public class BeltInstance extends KineticTileInstance { .setRotationOffset(bottom ? 0.5f : 0f) .setColor(tile) .setPosition(getInstancePosition()) - .setBlockLight(world.getLightLevel(LightType.BLOCK, pos)) - .setSkyLight(world.getLightLevel(LightType.SKY, pos)); + .setBlockLight(world.getBrightness(LightType.BLOCK, pos)) + .setSkyLight(world.getBrightness(LightType.SKY, pos)); return key; } diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltModel.java b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltModel.java index 668cbad48..5a1539690 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltModel.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltModel.java @@ -51,7 +51,7 @@ public class BeltModel extends BakedModelWrapper { TextureAtlasSprite original = quad.getSprite(); TextureAtlasSprite target = spriteShift.getTarget(); BakedQuad newQuad = QuadHelper.clone(quad); - int[] vertexData = newQuad.getVertexData(); + int[] vertexData = newQuad.getVertices(); for (int vertex = 0; vertex < vertexData.length; vertex += format.getIntegerSize()) { int uvOffset = 16 / 4; @@ -60,9 +60,9 @@ public class BeltModel extends BakedModelWrapper { float u = Float.intBitsToFloat(vertexData[uIndex]); float v = Float.intBitsToFloat(vertexData[vIndex]); vertexData[uIndex] = - Float.floatToRawIntBits(target.getInterpolatedU(SuperByteBuffer.getUnInterpolatedU(original, u))); + Float.floatToRawIntBits(target.getU(SuperByteBuffer.getUnInterpolatedU(original, u))); vertexData[vIndex] = - Float.floatToRawIntBits(target.getInterpolatedV(SuperByteBuffer.getUnInterpolatedV(original, v))); + Float.floatToRawIntBits(target.getV(SuperByteBuffer.getUnInterpolatedV(original, v))); } quads.set(i, newQuad); diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltPart.java b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltPart.java index 90c20c6eb..d864d7bb8 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltPart.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltPart.java @@ -8,7 +8,7 @@ public enum BeltPart implements IStringSerializable { START, MIDDLE, END, PULLEY; @Override - public String getString() { + public String getSerializedName() { return Lang.asId(name()); } } \ No newline at end of file diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltRenderer.java index 780de7876..1700ae9bc 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltRenderer.java @@ -49,7 +49,7 @@ public class BeltRenderer extends SafeTileEntityRenderer { } @Override - public boolean isGlobalRenderer(BeltTileEntity te) { + public boolean shouldRenderOffScreen(BeltTileEntity te) { return te.isController(); } @@ -57,14 +57,14 @@ public class BeltRenderer extends SafeTileEntityRenderer { protected void renderSafe(BeltTileEntity te, float partialTicks, MatrixStack ms, IRenderTypeBuffer buffer, int light, int overlay) { - if (!Backend.getInstance().canUseInstancing(te.getWorld())) { + if (!Backend.getInstance().canUseInstancing(te.getLevel())) { BlockState blockState = te.getBlockState(); if (!AllBlocks.BELT.has(blockState)) return; - BeltSlope beltSlope = blockState.get(BeltBlock.SLOPE); - BeltPart part = blockState.get(BeltBlock.PART); - Direction facing = blockState.get(BeltBlock.HORIZONTAL_FACING); + BeltSlope beltSlope = blockState.getValue(BeltBlock.SLOPE); + BeltPart part = blockState.getValue(BeltBlock.PART); + Direction facing = blockState.getValue(BeltBlock.HORIZONTAL_FACING); AxisDirection axisDirection = facing.getAxisDirection(); boolean downward = beltSlope == BeltSlope.DOWNWARD; @@ -77,8 +77,8 @@ public class BeltRenderer extends SafeTileEntityRenderer { MatrixStack localTransforms = new MatrixStack(); MatrixStacker msr = MatrixStacker.of(localTransforms); - IVertexBuilder vb = buffer.getBuffer(RenderType.getSolid()); - float renderTick = AnimationTickHolder.getRenderTime(te.getWorld()); + IVertexBuilder vb = buffer.getBuffer(RenderType.solid()); + float renderTick = AnimationTickHolder.getRenderTime(te.getLevel()); msr.centre(); msr.rotateY(AngleHelper.horizontalAngle(facing) + (upward ? 180 : 0) + (sideways ? 270 : 0)); @@ -106,13 +106,13 @@ public class BeltRenderer extends SafeTileEntityRenderer { // UV shift float speed = te.getSpeed(); if (speed != 0 || te.color.isPresent()) { - float time = renderTick * axisDirection.getOffset(); + float time = renderTick * axisDirection.getStep(); if (diagonal && (downward ^ alongX) || !sideways && !diagonal && alongX || sideways && axisDirection == AxisDirection.NEGATIVE) speed = -speed; float scrollMult = diagonal ? 3f / 8f : 0.5f; - float spriteSize = spriteShift.getTarget().getMaxV() - spriteShift.getTarget().getMinV(); + float spriteSize = spriteShift.getTarget().getV1() - spriteShift.getTarget().getV0(); double scroll = speed * time / (31.5 * 16) + (bottom ? 0.5 : 0.0); scroll = scroll - Math.floor(scroll); @@ -130,7 +130,7 @@ public class BeltRenderer extends SafeTileEntityRenderer { } if (te.hasPulley()) { - Direction dir = sideways ? Direction.UP : blockState.get(BeltBlock.HORIZONTAL_FACING).rotateY(); + Direction dir = sideways ? Direction.UP : blockState.getValue(BeltBlock.HORIZONTAL_FACING).getClockWise(); Supplier matrixStackSupplier = () -> { MatrixStack stack = new MatrixStack(); @@ -183,25 +183,25 @@ public class BeltRenderer extends SafeTileEntityRenderer { if (te.beltLength == 0) return; - ms.push(); + ms.pushPose(); Direction beltFacing = te.getBeltFacing(); Vector3i directionVec = beltFacing - .getDirectionVec(); - Vector3d beltStartOffset = Vector3d.of(directionVec).scale(-.5) + .getNormal(); + Vector3d beltStartOffset = Vector3d.atLowerCornerOf(directionVec).scale(-.5) .add(.5, 13 / 16f + .125f, .5); ms.translate(beltStartOffset.x, beltStartOffset.y, beltStartOffset.z); BeltSlope slope = te.getBlockState() - .get(BeltBlock.SLOPE); + .getValue(BeltBlock.SLOPE); int verticality = slope == BeltSlope.DOWNWARD ? -1 : slope == BeltSlope.UPWARD ? 1 : 0; boolean slopeAlongX = beltFacing .getAxis() == Axis.X; - boolean onContraption = te.getWorld() instanceof WrappedWorld; + boolean onContraption = te.getLevel() instanceof WrappedWorld; for (TransportedItemStack transported : te.getInventory() .getTransportedItems()) { - ms.push(); + ms.pushPose(); MatrixStacker.of(ms) .nudge(transported.angle); float offset = MathHelper.lerp(partialTicks, transported.prevBeltPosition, transported.beltPosition); @@ -218,7 +218,7 @@ public class BeltRenderer extends SafeTileEntityRenderer { if (offset < .5) verticalMovement = 0; verticalMovement = verticalMovement * (Math.min(offset, te.beltLength - .5f) - .5f); - Vector3d offsetVec = Vector3d.of(directionVec).scale(offset) + Vector3d offsetVec = Vector3d.atLowerCornerOf(directionVec).scale(offset) .add(0, verticalMovement, 0); boolean onSlope = slope != BeltSlope.HORIZONTAL && MathHelper.clamp(offset, .5f, te.beltLength - .5f) == offset; @@ -230,7 +230,7 @@ public class BeltRenderer extends SafeTileEntityRenderer { ms.translate(offsetVec.x, offsetVec.y, offsetVec.z); boolean alongX = beltFacing - .rotateY() + .getClockWise() .getAxis() == Axis.X; if (!alongX) sideOffset *= -1; @@ -239,42 +239,42 @@ public class BeltRenderer extends SafeTileEntityRenderer { ItemRenderer itemRenderer = Minecraft.getInstance() .getItemRenderer(); boolean renderUpright = BeltHelper.isItemUpright(transported.stack); - boolean blockItem = itemRenderer.getItemModelWithOverrides(transported.stack, te.getWorld(), null) + boolean blockItem = itemRenderer.getModel(transported.stack, te.getLevel(), null) .isGui3d(); int count = (int) (MathHelper.log2((int) (transported.stack.getCount()))) / 2; Random r = new Random(transported.angle); - if (Minecraft.getInstance().gameSettings.graphicsMode == GraphicsFanciness.FANCY) { - Vector3d shadowPos = Vector3d.of(te.getPos()).add(beltStartOffset.scale(1) + if (Minecraft.getInstance().options.graphicsMode == GraphicsFanciness.FANCY) { + Vector3d shadowPos = Vector3d.atLowerCornerOf(te.getBlockPos()).add(beltStartOffset.scale(1) .add(offsetVec) .add(alongX ? sideOffset : 0, .39, alongX ? 0 : sideOffset)); ShadowRenderHelper.renderShadow(ms, buffer, shadowPos, .75f, blockItem ? .2f : .2f); } if (renderUpright) { - Entity renderViewEntity = Minecraft.getInstance().renderViewEntity; + Entity renderViewEntity = Minecraft.getInstance().cameraEntity; if (renderViewEntity != null) { - Vector3d positionVec = renderViewEntity.getPositionVec(); + Vector3d positionVec = renderViewEntity.position(); Vector3d vectorForOffset = BeltHelper.getVectorForOffset(te, offset); Vector3d diff = vectorForOffset.subtract(positionVec); float yRot = (float) MathHelper.atan2(diff.z, -diff.x); - ms.multiply(Vector3f.POSITIVE_Y.getRadialQuaternion((float) (yRot + Math.PI / 2))); + ms.mulPose(Vector3f.YP.rotation((float) (yRot + Math.PI / 2))); } ms.translate(0, 3 / 32d, 1 / 16f); } if (!renderUpright) - ms.multiply(new Vector3f(slopeAlongX ? 0 : 1, 0, slopeAlongX ? 1 : 0).getDegreesQuaternion(slopeAngle)); + ms.mulPose(new Vector3f(slopeAlongX ? 0 : 1, 0, slopeAlongX ? 1 : 0).rotationDegrees(slopeAngle)); if (onSlope) ms.translate(0, 1 / 8f, 0); for (int i = 0; i <= count; i++) { - ms.push(); + ms.pushPose(); - ms.multiply(Vector3f.POSITIVE_Y.getDegreesQuaternion(transported.angle)); + ms.mulPose(Vector3f.YP.rotationDegrees(transported.angle)); if (!blockItem && !renderUpright) { ms.translate(0, -.09375, 0); - ms.multiply(Vector3f.POSITIVE_X.getDegreesQuaternion(90)); + ms.mulPose(Vector3f.XP.rotationDegrees(90)); } if (blockItem) { @@ -282,21 +282,21 @@ public class BeltRenderer extends SafeTileEntityRenderer { } ms.scale(.5f, .5f, .5f); - itemRenderer.renderItem(transported.stack, TransformType.FIXED, stackLight, overlay, ms, buffer); - ms.pop(); + itemRenderer.renderStatic(transported.stack, TransformType.FIXED, stackLight, overlay, ms, buffer); + ms.popPose(); if (!renderUpright) { if (!blockItem) - ms.multiply(Vector3f.POSITIVE_Y.getDegreesQuaternion(10)); + ms.mulPose(Vector3f.YP.rotationDegrees(10)); ms.translate(0, blockItem ? 1 / 64d : 1 / 16d, 0); } else ms.translate(0, 0, -1 / 16f); } - ms.pop(); + ms.popPose(); } - ms.pop(); + ms.popPose(); } protected int getPackedLight(BeltTileEntity controller, float beltPos) { diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltShapes.java b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltShapes.java index 572fc124d..aa20a4d02 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltShapes.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltShapes.java @@ -1,6 +1,6 @@ package com.simibubi.create.content.contraptions.relays.belt; -import static net.minecraft.block.Block.makeCuboidShape; +import static net.minecraft.block.Block.box; import java.util.HashMap; import java.util.Map; @@ -76,27 +76,27 @@ public class BeltShapes { FLAT_FULL_PART = makeFlatFull(), FLAT_END_PART = makeFlatEnding(); - private static final VoxelShape SOUTH_MASK = makeCuboidShape(0,-5,8,16,16+5,16); - private static final VoxelShape NORTH_MASK = makeCuboidShape(0,-5,0,16,16+5,8); + private static final VoxelShape SOUTH_MASK = box(0,-5,8,16,16+5,16); + private static final VoxelShape NORTH_MASK = box(0,-5,0,16,16+5,8); //Vertical Shapes private static final VoxelShaper VERTICAL_FULL = VerticalBeltShaper.make(FLAT_FULL_PART), VERTICAL_END = VerticalBeltShaper.make(compose(FLAT_END_PART, FLAT_FULL_PART)), VERTICAL_START = VerticalBeltShaper.make(compose(FLAT_FULL_PART, FLAT_END_PART)); - + //Flat Shapes private static final VoxelShaper FLAT_FULL = VoxelShaper.forHorizontalAxis(FLAT_FULL_PART, Axis.Z), FLAT_END = VoxelShaper.forHorizontal(compose(FLAT_END_PART, FLAT_FULL_PART), Direction.SOUTH), FLAT_START = VoxelShaper.forHorizontal(compose(FLAT_FULL_PART, FLAT_END_PART), Direction.SOUTH); - + //Sideways Shapes private static final VoxelShaper SIDE_FULL = VoxelShaper.forHorizontalAxis(SIDEWAYS_FULL_PART, Axis.Z), SIDE_END = VoxelShaper.forHorizontal(compose(SIDEWAYS_END_PART, SIDEWAYS_FULL_PART), Direction.SOUTH), SIDE_START = VoxelShaper.forHorizontal(compose(SIDEWAYS_FULL_PART, SIDEWAYS_END_PART), Direction.SOUTH); - + //Sloped Shapes private static final VoxelShaper SLOPE_DESC = VoxelShaper.forHorizontal(SLOPE_DESC_PART, Direction.SOUTH), @@ -107,20 +107,20 @@ public class BeltShapes { SLOPE_ASC_START = VoxelShaper.forHorizontal(compose(SLOPE_ASC_PART, FLAT_END_PART), Direction.SOUTH); private static final VoxelShaper - PARTIAL_CASING = VoxelShaper.forHorizontal(makeCuboidShape(0, 0, 5, 16, 11, 16), Direction.SOUTH); + PARTIAL_CASING = VoxelShaper.forHorizontal(box(0, 0, 5, 16, 11, 16), Direction.SOUTH); static Map cache = new HashMap<>(); static Map collisionCache = new HashMap<>(); private static VoxelShape compose(VoxelShape southPart, VoxelShape northPart){ return VoxelShapes.or( - VoxelShapes.combine(SOUTH_MASK, southPart, IBooleanFunction.AND), - VoxelShapes.combine(NORTH_MASK, northPart, IBooleanFunction.AND) + VoxelShapes.joinUnoptimized(SOUTH_MASK, southPart, IBooleanFunction.AND), + VoxelShapes.joinUnoptimized(NORTH_MASK, northPart, IBooleanFunction.AND) ); } private static VoxelShape makeSlopePart(boolean ascendingInstead) { - VoxelShape slice = makeCuboidShape(1, 0, 16, 15, 11, 15); + VoxelShape slice = box(1, 0, 16, 15, 11, 15); VoxelShape result = VoxelShapes.empty(); for (int i = 0; i < 16; i++) { @@ -129,7 +129,7 @@ public class BeltShapes { result = VoxelShapes.or( result,//move slice i voxels "right" and i-5 voxels "down" - slice.withOffset(0, yOffset / 16f, -i / 16f)); + slice.move(0, yOffset / 16f, -i / 16f)); } return result; @@ -137,24 +137,24 @@ public class BeltShapes { private static VoxelShape makeFlatEnding(){ return VoxelShapes.or( - makeCuboidShape(1,4,0,15,12,16), - makeCuboidShape(1,3,1,15,13,15) + box(1,4,0,15,12,16), + box(1,3,1,15,13,15) ); } private static VoxelShape makeFlatFull(){ - return makeCuboidShape(1,3,0,15,13,16); + return box(1,3,0,15,13,16); } - + private static VoxelShape makeSidewaysEnding(){ return VoxelShapes.or( - makeCuboidShape(4,1,0,12,15,16), - makeCuboidShape(3,1,1,13,15,15) + box(4,1,0,12,15,16), + box(3,1,1,13,15,15) ); } - + private static VoxelShape makeSidewaysFull(){ - return makeCuboidShape(3,1,0,13,15,16); + return box(3,1,0,13,15,16); } public static VoxelShape getShape(BlockState state) { @@ -164,20 +164,20 @@ public class BeltShapes { cache.put(state, createdShape); return createdShape; } - + public static VoxelShape getCollisionShape(BlockState state) { if (collisionCache.containsKey(state)) return collisionCache.get(state); - VoxelShape createdShape = VoxelShapes.combine(AllShapes.BELT_COLLISION_MASK, getShape(state), IBooleanFunction.AND); + VoxelShape createdShape = VoxelShapes.joinUnoptimized(AllShapes.BELT_COLLISION_MASK, getShape(state), IBooleanFunction.AND); collisionCache.put(state, createdShape); return createdShape; } private static VoxelShape getBeltShape(BlockState state) { - Direction facing = state.get(BeltBlock.HORIZONTAL_FACING); + Direction facing = state.getValue(BeltBlock.HORIZONTAL_FACING); Axis axis = facing.getAxis(); - BeltPart part = state.get(BeltBlock.PART); - BeltSlope slope = state.get(BeltBlock.SLOPE); + BeltPart part = state.getValue(BeltBlock.PART); + BeltSlope slope = state.getValue(BeltBlock.SLOPE); //vertical if (slope == BeltSlope.VERTICAL) { @@ -194,7 +194,7 @@ public class BeltShapes { //flat ending return (part == BeltPart.START ? FLAT_START : FLAT_END).get(facing); } - + //sideways part if (slope == BeltSlope.SIDEWAYS) { if (part == BeltPart.MIDDLE || part == BeltPart.PULLEY) @@ -217,12 +217,12 @@ public class BeltShapes { } private static VoxelShape getCasingShape(BlockState state) { - if (!state.get(BeltBlock.CASING)) + if (!state.getValue(BeltBlock.CASING)) return VoxelShapes.empty(); - Direction facing = state.get(BeltBlock.HORIZONTAL_FACING); - BeltPart part = state.get(BeltBlock.PART); - BeltSlope slope = state.get(BeltBlock.SLOPE); + Direction facing = state.getValue(BeltBlock.HORIZONTAL_FACING); + BeltPart part = state.getValue(BeltBlock.PART); + BeltSlope slope = state.getValue(BeltBlock.SLOPE); if (slope == BeltSlope.VERTICAL) return VoxelShapes.empty(); @@ -242,7 +242,7 @@ public class BeltShapes { return slope == BeltSlope.DOWNWARD ? AllShapes.CASING_11PX.get(Direction.UP) : PARTIAL_CASING.get(facing); //something went wrong - return VoxelShapes.fullCube(); + return VoxelShapes.block(); } private static class VerticalBeltShaper extends VoxelShaper { @@ -254,7 +254,7 @@ public class BeltShapes { Direction.Plane.HORIZONTAL,//idk, this can probably be improved :S direction -> new Vector3d( direction.getAxisDirection() == Direction.AxisDirection.POSITIVE ? 0 : 180, - -direction.getHorizontalAngle(), + -direction.toYRot(), 0)); } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltSlope.java b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltSlope.java index ba8b4a8f5..16114f955 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltSlope.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltSlope.java @@ -8,7 +8,7 @@ public enum BeltSlope implements IStringSerializable { HORIZONTAL, UPWARD, DOWNWARD, VERTICAL, SIDEWAYS; @Override - public String getString() { + public String getSerializedName() { return Lang.asId(name()); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltTileEntity.java index 5beca0399..30ac4da87 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltTileEntity.java @@ -105,8 +105,8 @@ public class BeltTileEntity extends KineticTileEntity implements ILightUpdateLis // Init belt if (beltLength == 0) - BeltBlock.initBelt(world, pos); - if (!AllBlocks.BELT.has(world.getBlockState(pos))) + BeltBlock.initBelt(level, worldPosition); + if (!AllBlocks.BELT.has(level.getBlockState(worldPosition))) return; initializeItemHandler(); @@ -115,7 +115,7 @@ public class BeltTileEntity extends KineticTileEntity implements ILightUpdateLis if (!isController()) return; - if (light == null && world.isRemote) { + if (light == null && level.isClientSide) { initializeLight(); LightUpdater.getInstance() .startListening(getBeltVolume(), this); @@ -134,7 +134,7 @@ public class BeltTileEntity extends KineticTileEntity implements ILightUpdateLis passengers.forEach((entity, info) -> { boolean canBeTransported = BeltMovementHandler.canBeTransported(entity); boolean leftTheBelt = - info.getTicksSinceLastCollision() > ((getBlockState().get(BeltBlock.SLOPE) != HORIZONTAL) ? 3 : 1); + info.getTicksSinceLastCollision() > ((getBlockState().getValue(BeltBlock.SLOPE) != HORIZONTAL) ? 3 : 1); if (!canBeTransported || leftTheBelt) { toRemove.add(entity); return; @@ -158,15 +158,15 @@ public class BeltTileEntity extends KineticTileEntity implements ILightUpdateLis if (!isController()) return super.makeRenderBoundingBox(); else - return super.makeRenderBoundingBox().grow(beltLength + 1); + return super.makeRenderBoundingBox().inflate(beltLength + 1); } protected void initializeItemHandler() { - if (world.isRemote || itemHandler.isPresent()) + if (level.isClientSide || itemHandler.isPresent()) return; - if (!world.isBlockPresent(controller)) + if (!level.isLoaded(controller)) return; - TileEntity te = world.getTileEntity(controller); + TileEntity te = level.getBlockEntity(controller); if (te == null || !(te instanceof BeltTileEntity)) return; BeltInventory inventory = ((BeltTileEntity) te).getInventory(); @@ -187,8 +187,8 @@ public class BeltTileEntity extends KineticTileEntity implements ILightUpdateLis } @Override - public void remove() { - super.remove(); + public void setRemoved() { + super.setRemoved(); itemHandler.invalidate(); } @@ -214,7 +214,7 @@ public class BeltTileEntity extends KineticTileEntity implements ILightUpdateLis super.fromTag(state, compound, clientPacket); if (compound.getBoolean("IsController")) - controller = pos; + controller = worldPosition; color = compound.contains("Dye") ? Optional.of(NBTHelper.readEnum(compound, "Dye", DyeColor.class)) : Optional.empty(); @@ -240,8 +240,8 @@ public class BeltTileEntity extends KineticTileEntity implements ILightUpdateLis return; if (!isVirtual()) requestModelDataUpdate(); - if (hasWorld()) - world.notifyBlockUpdate(getPos(), getBlockState(), getBlockState(), 16); + if (hasLevel()) + level.sendBlockUpdated(getBlockPos(), getBlockState(), getBlockState(), 16); } @Override @@ -260,12 +260,12 @@ public class BeltTileEntity extends KineticTileEntity implements ILightUpdateLis } else if (color.isPresent() && color.get() == colorIn) return; - for (BlockPos blockPos : BeltBlock.getBeltChain(world, getController())) { - BeltTileEntity belt = BeltHelper.getSegmentTE(world, blockPos); + for (BlockPos blockPos : BeltBlock.getBeltChain(level, getController())) { + BeltTileEntity belt = BeltHelper.getSegmentTE(level, blockPos); if (belt == null) continue; belt.color = Optional.ofNullable(colorIn); - belt.markDirty(); + belt.setChanged(); belt.sendData(); DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> InstancedRenderDispatcher.enqueueUpdate(belt)); } @@ -274,9 +274,9 @@ public class BeltTileEntity extends KineticTileEntity implements ILightUpdateLis public BeltTileEntity getControllerTE() { if (controller == null) return null; - if (!world.isBlockPresent(controller)) + if (!level.isLoaded(controller)) return null; - TileEntity te = world.getTileEntity(controller); + TileEntity te = level.getBlockEntity(controller); if (te == null || !(te instanceof BeltTileEntity)) return null; return (BeltTileEntity) te; @@ -287,12 +287,12 @@ public class BeltTileEntity extends KineticTileEntity implements ILightUpdateLis } public BlockPos getController() { - return controller == null ? pos : controller; + return controller == null ? worldPosition : controller; } public boolean isController() { - return controller != null && pos.getX() == controller.getX() && pos.getY() == controller.getY() - && pos.getZ() == controller.getZ(); + return controller != null && worldPosition.getX() == controller.getX() && worldPosition.getY() == controller.getY() + && worldPosition.getZ() == controller.getZ(); } public float getBeltMovementSpeed() { @@ -301,7 +301,7 @@ public class BeltTileEntity extends KineticTileEntity implements ILightUpdateLis public float getDirectionAwareBeltMovementSpeed() { int offset = getBeltFacing().getAxisDirection() - .getOffset(); + .getStep(); if (getBeltFacing().getAxis() == Axis.X) offset *= -1; return getBeltMovementSpeed() * offset; @@ -310,7 +310,7 @@ public class BeltTileEntity extends KineticTileEntity implements ILightUpdateLis public boolean hasPulley() { if (!AllBlocks.BELT.has(getBlockState())) return false; - return getBlockState().get(BeltBlock.PART) != MIDDLE; + return getBlockState().getValue(BeltBlock.PART) != MIDDLE; } protected boolean isLastBelt() { @@ -318,15 +318,15 @@ public class BeltTileEntity extends KineticTileEntity implements ILightUpdateLis return false; Direction direction = getBeltFacing(); - if (getBlockState().get(BeltBlock.SLOPE) == BeltSlope.VERTICAL) + if (getBlockState().getValue(BeltBlock.SLOPE) == BeltSlope.VERTICAL) return false; - BeltPart part = getBlockState().get(BeltBlock.PART); + BeltPart part = getBlockState().getValue(BeltBlock.PART); if (part == MIDDLE) return false; boolean movingPositively = (getSpeed() > 0 == (direction.getAxisDirection() - .getOffset() == 1)) ^ direction.getAxis() == Axis.X; + .getStep() == 1)) ^ direction.getAxis() == Axis.X; return part == BeltPart.START ^ movingPositively; } @@ -343,16 +343,16 @@ public class BeltTileEntity extends KineticTileEntity implements ILightUpdateLis return BlockPos.ZERO; final BlockState blockState = getBlockState(); - final Direction beltFacing = blockState.get(BlockStateProperties.HORIZONTAL_FACING); - final BeltSlope slope = blockState.get(BeltBlock.SLOPE); - final BeltPart part = blockState.get(BeltBlock.PART); + final Direction beltFacing = blockState.getValue(BlockStateProperties.HORIZONTAL_FACING); + final BeltSlope slope = blockState.getValue(BeltBlock.SLOPE); + final BeltPart part = blockState.getValue(BeltBlock.PART); final Axis axis = beltFacing.getAxis(); - Direction movementFacing = Direction.getFacingFromAxis(axis == Axis.X ? NEGATIVE : POSITIVE, axis); - boolean notHorizontal = blockState.get(BeltBlock.SLOPE) != HORIZONTAL; + Direction movementFacing = Direction.get(axis == Axis.X ? NEGATIVE : POSITIVE, axis); + boolean notHorizontal = blockState.getValue(BeltBlock.SLOPE) != HORIZONTAL; if (getSpeed() < 0) movementFacing = movementFacing.getOpposite(); - Vector3i movement = movementFacing.getDirectionVec(); + Vector3i movement = movementFacing.getNormal(); boolean slopeBeforeHalf = (part == BeltPart.END) == (beltFacing.getAxisDirection() == POSITIVE); boolean onSlope = notHorizontal && (part == MIDDLE || slopeBeforeHalf == firstHalf || ignoreHalves); @@ -366,12 +366,12 @@ public class BeltTileEntity extends KineticTileEntity implements ILightUpdateLis public Direction getMovementFacing() { Axis axis = getBeltFacing().getAxis(); - return Direction.getFacingFromAxisDirection(axis, + return Direction.fromAxisAndDirection(axis, getBeltMovementSpeed() < 0 ^ axis == Axis.X ? NEGATIVE : POSITIVE); } protected Direction getBeltFacing() { - return getBlockState().get(BlockStateProperties.HORIZONTAL_FACING); + return getBlockState().getValue(BlockStateProperties.HORIZONTAL_FACING); } public BeltInventory getInventory() { @@ -408,15 +408,15 @@ public class BeltTileEntity extends KineticTileEntity implements ILightUpdateLis if (casing == type) return; if (casing != CasingType.NONE) - world.playEvent(2001, pos, - Block.getStateId(casing == CasingType.ANDESITE ? AllBlocks.ANDESITE_CASING.getDefaultState() + level.levelEvent(2001, worldPosition, + Block.getId(casing == CasingType.ANDESITE ? AllBlocks.ANDESITE_CASING.getDefaultState() : AllBlocks.BRASS_CASING.getDefaultState())); casing = type; boolean shouldBlockHaveCasing = type != CasingType.NONE; BlockState blockState = getBlockState(); - if (blockState.get(BeltBlock.CASING) != shouldBlockHaveCasing) - KineticTileEntity.switchToBlockState(world, pos, blockState.with(BeltBlock.CASING, shouldBlockHaveCasing)); - markDirty(); + if (blockState.getValue(BeltBlock.CASING) != shouldBlockHaveCasing) + KineticTileEntity.switchToBlockState(level, worldPosition, blockState.setValue(BeltBlock.CASING, shouldBlockHaveCasing)); + setChanged(); sendData(); } @@ -424,8 +424,8 @@ public class BeltTileEntity extends KineticTileEntity implements ILightUpdateLis if (getSpeed() == 0) return false; BlockState state = getBlockState(); - if (state.contains(BeltBlock.SLOPE) - && (state.get(BeltBlock.SLOPE) == BeltSlope.SIDEWAYS || state.get(BeltBlock.SLOPE) == BeltSlope.VERTICAL)) + if (state.hasProperty(BeltBlock.SLOPE) + && (state.getValue(BeltBlock.SLOPE) == BeltSlope.SIDEWAYS || state.getValue(BeltBlock.SLOPE) == BeltSlope.VERTICAL)) return false; return getMovementFacing() != side.getOpposite(); } @@ -441,7 +441,7 @@ public class BeltTileEntity extends KineticTileEntity implements ILightUpdateLis if (nextInventory == null) return inserted; - TileEntity teAbove = world.getTileEntity(pos.up()); + TileEntity teAbove = level.getBlockEntity(worldPosition.above()); if (teAbove instanceof BrassTunnelTileEntity) { BrassTunnelTileEntity tunnelTE = (BrassTunnelTileEntity) teAbove; if (tunnelTE.hasDistributionBehaviour()) { @@ -475,7 +475,7 @@ public class BeltTileEntity extends KineticTileEntity implements ILightUpdateLis .isVertical()) { if (movementFacing != side) { transportedStack.sideOffset = side.getAxisDirection() - .getOffset() * .35f; + .getStep() * .35f; if (side.getAxis() == Axis.X) transportedStack.sideOffset *= -1; } else @@ -490,7 +490,7 @@ public class BeltTileEntity extends KineticTileEntity implements ILightUpdateLis BeltTunnelInteractionHandler.flapTunnel(nextInventory, index, side.getOpposite(), true); nextInventory.addItem(transportedStack); - nextBeltController.markDirty(); + nextBeltController.setChanged(); nextBeltController.sendData(); return empty; } @@ -505,8 +505,8 @@ public class BeltTileEntity extends KineticTileEntity implements ILightUpdateLis @Override protected boolean canPropagateDiagonally(IRotate block, BlockState state) { - return state.contains(BeltBlock.SLOPE) - && (state.get(BeltBlock.SLOPE) == BeltSlope.UPWARD || state.get(BeltBlock.SLOPE) == BeltSlope.DOWNWARD); + return state.hasProperty(BeltBlock.SLOPE) + && (state.getValue(BeltBlock.SLOPE) == BeltSlope.UPWARD || state.getValue(BeltBlock.SLOPE) == BeltSlope.DOWNWARD); } @Override @@ -519,15 +519,15 @@ public class BeltTileEntity extends KineticTileEntity implements ILightUpdateLis @Override public boolean shouldRenderNormally() { - if (world == null) + if (level == null) return isController(); BlockState state = getBlockState(); - return state != null && state.contains(BeltBlock.PART) && state.get(BeltBlock.PART) == BeltPart.START; + return state != null && state.hasProperty(BeltBlock.PART) && state.getValue(BeltBlock.PART) == BeltPart.START; } @Override public boolean onLightUpdate(IBlockDisplayReader world, LightType type, GridAlignedBB changed) { - if (this.removed) { + if (this.remove) { return true; } @@ -547,7 +547,7 @@ public class BeltTileEntity extends KineticTileEntity implements ILightUpdateLis private GridAlignedBB getBeltVolume() { BlockPos endPos = BeltHelper.getPositionForOffset(this, beltLength - 1); - GridAlignedBB bb = GridAlignedBB.from(pos, endPos); + GridAlignedBB bb = GridAlignedBB.from(worldPosition, endPos); bb.fixMinMax(); return bb; } @@ -556,40 +556,40 @@ public class BeltTileEntity extends KineticTileEntity implements ILightUpdateLis if (beltLength > 0) { light = new byte[beltLength * 2]; - Vector3i vec = getBeltFacing().getDirectionVec(); - BeltSlope slope = getBlockState().get(BeltBlock.SLOPE); + Vector3i vec = getBeltFacing().getNormal(); + BeltSlope slope = getBlockState().getValue(BeltBlock.SLOPE); int verticality = slope == BeltSlope.DOWNWARD ? -1 : slope == BeltSlope.UPWARD ? 1 : 0; BlockPos.Mutable pos = new BlockPos.Mutable(controller.getX(), controller.getY(), controller.getZ()); for (int i = 0; i < beltLength * 2; i += 2) { - light[i] = (byte) world.getLightLevel(LightType.BLOCK, pos); - light[i + 1] = (byte) world.getLightLevel(LightType.SKY, pos); + light[i] = (byte) level.getBrightness(LightType.BLOCK, pos); + light[i + 1] = (byte) level.getBrightness(LightType.SKY, pos); pos.move(vec.getX(), verticality, vec.getZ()); } } } private void updateBlockLight() { - Vector3i vec = getBeltFacing().getDirectionVec(); - BeltSlope slope = getBlockState().get(BeltBlock.SLOPE); + Vector3i vec = getBeltFacing().getNormal(); + BeltSlope slope = getBlockState().getValue(BeltBlock.SLOPE); int verticality = slope == BeltSlope.DOWNWARD ? -1 : slope == BeltSlope.UPWARD ? 1 : 0; BlockPos.Mutable pos = new BlockPos.Mutable(controller.getX(), controller.getY(), controller.getZ()); for (int i = 0; i < beltLength * 2; i += 2) { - light[i] = (byte) world.getLightLevel(LightType.BLOCK, pos); + light[i] = (byte) level.getBrightness(LightType.BLOCK, pos); pos.move(vec.getX(), verticality, vec.getZ()); } } private void updateSkyLight() { - Vector3i vec = getBeltFacing().getDirectionVec(); - BeltSlope slope = getBlockState().get(BeltBlock.SLOPE); + Vector3i vec = getBeltFacing().getNormal(); + BeltSlope slope = getBlockState().getValue(BeltBlock.SLOPE); int verticality = slope == BeltSlope.DOWNWARD ? -1 : slope == BeltSlope.UPWARD ? 1 : 0; BlockPos.Mutable pos = new BlockPos.Mutable(controller.getX(), controller.getY(), controller.getZ()); for (int i = 1; i < beltLength * 2; i += 2) { - light[i] = (byte) world.getLightLevel(LightType.SKY, pos); + light[i] = (byte) level.getBrightness(LightType.SKY, pos); pos.move(vec.getX(), verticality, vec.getZ()); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/item/BeltConnectorHandler.java b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/item/BeltConnectorHandler.java index 420cf78e5..d6c8d2719 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/item/BeltConnectorHandler.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/item/BeltConnectorHandler.java @@ -29,15 +29,15 @@ public class BeltConnectorHandler { public static void tick() { PlayerEntity player = Minecraft.getInstance().player; - World world = Minecraft.getInstance().world; + World world = Minecraft.getInstance().level; if (player == null || world == null) return; - if (Minecraft.getInstance().currentScreen != null) + if (Minecraft.getInstance().screen != null) return; for (Hand hand : Hand.values()) { - ItemStack heldItem = player.getHeldItem(hand); + ItemStack heldItem = player.getItemInHand(hand); if (!AllItems.BELT_CONNECTOR.isIn(heldItem)) continue; @@ -50,12 +50,12 @@ public class BeltConnectorHandler { BlockPos first = NBTUtil.readBlockPos(tag.getCompound("FirstPulley")); - if (!world.getBlockState(first).contains(BlockStateProperties.AXIS)) + if (!world.getBlockState(first).hasProperty(BlockStateProperties.AXIS)) continue; Axis axis = world.getBlockState(first) - .get(BlockStateProperties.AXIS); + .getValue(BlockStateProperties.AXIS); - RayTraceResult rayTrace = Minecraft.getInstance().objectMouseOver; + RayTraceResult rayTrace = Minecraft.getInstance().hitResult; if (rayTrace == null || !(rayTrace instanceof BlockRayTraceResult)) { if (r.nextInt(50) == 0) { world.addParticle(new RedstoneParticleData(.3f, .9f, .5f, 1), @@ -65,25 +65,25 @@ public class BeltConnectorHandler { return; } - BlockPos selected = ((BlockRayTraceResult) rayTrace).getPos(); + BlockPos selected = ((BlockRayTraceResult) rayTrace).getBlockPos(); if (world.getBlockState(selected) .getMaterial() .isReplaceable()) return; if (!ShaftBlock.isShaft(world.getBlockState(selected))) - selected = selected.offset(((BlockRayTraceResult) rayTrace).getFace()); - if (!selected.withinDistance(first, AllConfigs.SERVER.kinetics.maxBeltLength.get())) + selected = selected.relative(((BlockRayTraceResult) rayTrace).getDirection()); + if (!selected.closerThan(first, AllConfigs.SERVER.kinetics.maxBeltLength.get())) return; boolean canConnect = BeltConnectorItem.validateAxis(world, selected) && BeltConnectorItem.canConnect(world, first, selected); - Vector3d start = Vector3d.of(first); - Vector3d end = Vector3d.of(selected); + Vector3d start = Vector3d.atLowerCornerOf(first); + Vector3d end = Vector3d.atLowerCornerOf(selected); Vector3d actualDiff = end.subtract(start); - end = end.subtract(axis.getCoordinate(actualDiff.x, 0, 0), axis.getCoordinate(0, actualDiff.y, 0), - axis.getCoordinate(0, 0, actualDiff.z)); + end = end.subtract(axis.choose(actualDiff.x, 0, 0), axis.choose(0, actualDiff.y, 0), + axis.choose(0, 0, actualDiff.z)); Vector3d diff = end.subtract(start); double x = Math.abs(diff.x); @@ -98,7 +98,7 @@ public class BeltConnectorHandler { for (int i = -1; i <= 1; i++) for (int j = -1; j <= 1; j++) for (int k = -1; k <= 1; k++) { - if (axis.getCoordinate(i, j, k) != 0) + if (axis.choose(i, j, k) != 0) continue; if (axis == Axis.Y && i != 0 && k != 0) continue; diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/item/BeltConnectorItem.java b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/item/BeltConnectorItem.java index 442431fa5..733031c90 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/item/BeltConnectorItem.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/item/BeltConnectorItem.java @@ -34,6 +34,8 @@ import net.minecraft.util.NonNullList; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; +import net.minecraft.item.Item.Properties; + public class BeltConnectorItem extends BlockItem { public BeltConnectorItem(Properties properties) { @@ -41,44 +43,44 @@ public class BeltConnectorItem extends BlockItem { } @Override - public String getTranslationKey() { - return getDefaultTranslationKey(); + public String getDescriptionId() { + return getOrCreateDescriptionId(); } @Override - public void fillItemGroup(ItemGroup p_150895_1_, NonNullList p_150895_2_) { + public void fillItemCategory(ItemGroup p_150895_1_, NonNullList p_150895_2_) { if (p_150895_1_ == Create.BASE_CREATIVE_TAB) return; - super.fillItemGroup(p_150895_1_, p_150895_2_); + super.fillItemCategory(p_150895_1_, p_150895_2_); } @Nonnull @Override - public ActionResultType onItemUse(ItemUseContext context) { + public ActionResultType useOn(ItemUseContext context) { PlayerEntity playerEntity = context.getPlayer(); - if (playerEntity != null && playerEntity.isSneaking()) { - context.getItem() + if (playerEntity != null && playerEntity.isShiftKeyDown()) { + context.getItemInHand() .setTag(null); return ActionResultType.SUCCESS; } - World world = context.getWorld(); - BlockPos pos = context.getPos(); + World world = context.getLevel(); + BlockPos pos = context.getClickedPos(); boolean validAxis = validateAxis(world, pos); - if (world.isRemote) + if (world.isClientSide) return validAxis ? ActionResultType.SUCCESS : ActionResultType.FAIL; - CompoundNBT tag = context.getItem() + CompoundNBT tag = context.getItemInHand() .getOrCreateTag(); BlockPos firstPulley = null; // Remove first if no longer existant or valid if (tag.contains("FirstPulley")) { firstPulley = NBTUtil.readBlockPos(tag.getCompound("FirstPulley")); - if (!validateAxis(world, firstPulley) || !firstPulley.withinDistance(pos, maxLength() * 2)) { + if (!validateAxis(world, firstPulley) || !firstPulley.closerThan(pos, maxLength() * 2)) { tag.remove("FirstPulley"); - context.getItem() + context.getItemInHand() .setTag(tag); } } @@ -95,25 +97,25 @@ public class BeltConnectorItem extends BlockItem { createBelts(world, firstPulley, pos); AllTriggers.triggerFor(AllTriggers.CONNECT_BELT, playerEntity); if (!playerEntity.isCreative()) - context.getItem() + context.getItemInHand() .shrink(1); } - if (!context.getItem() + if (!context.getItemInHand() .isEmpty()) { - context.getItem() + context.getItemInHand() .setTag(null); - playerEntity.getCooldownTracker() - .setCooldown(this, 5); + playerEntity.getCooldowns() + .addCooldown(this, 5); } return ActionResultType.SUCCESS; } tag.put("FirstPulley", NBTUtil.writeBlockPos(pos)); - context.getItem() + context.getItemInHand() .setTag(tag); - playerEntity.getCooldownTracker() - .setCooldown(this, 5); + playerEntity.getCooldowns() + .addCooldown(this, 5); return ActionResultType.SUCCESS; } @@ -124,8 +126,8 @@ public class BeltConnectorItem extends BlockItem { BlockPos diff = end.subtract(start); if (diff.getX() == diff.getZ()) - facing = Direction.getFacingFromAxis(facing.getAxisDirection(), world.getBlockState(start) - .get(BlockStateProperties.AXIS) == Axis.X ? Axis.Z : Axis.X); + facing = Direction.get(facing.getAxisDirection(), world.getBlockState(start) + .getValue(BlockStateProperties.AXIS) == Axis.X ? Axis.Z : Axis.X); List beltsToCreate = getBeltChainBetween(start, end, slope, facing); BlockState beltBlock = AllBlocks.BELT.getDefaultState(); @@ -136,11 +138,11 @@ public class BeltConnectorItem extends BlockItem { boolean pulley = ShaftBlock.isShaft(shaftState); if (part == BeltPart.MIDDLE && pulley) part = BeltPart.PULLEY; - if (pulley && shaftState.get(AbstractShaftBlock.AXIS) == Axis.Y) + if (pulley && shaftState.getValue(AbstractShaftBlock.AXIS) == Axis.Y) slope = BeltSlope.SIDEWAYS; - KineticTileEntity.switchToBlockState(world, pos, beltBlock.with(BeltBlock.SLOPE, slope) - .with(BeltBlock.PART, part) - .with(BeltBlock.HORIZONTAL_FACING, facing)); + KineticTileEntity.switchToBlockState(world, pos, beltBlock.setValue(BeltBlock.SLOPE, slope) + .setValue(BeltBlock.PART, part) + .setValue(BeltBlock.HORIZONTAL_FACING, facing)); } } @@ -152,10 +154,10 @@ public class BeltConnectorItem extends BlockItem { if (diff.getX() == 0 && diff.getZ() == 0) axisDirection = diff.getY() > 0 ? AxisDirection.POSITIVE : AxisDirection.NEGATIVE; else - axisDirection = beltAxis.getCoordinate(diff.getX(), 0, diff.getZ()) > 0 ? AxisDirection.POSITIVE + axisDirection = beltAxis.choose(diff.getX(), 0, diff.getZ()) > 0 ? AxisDirection.POSITIVE : AxisDirection.NEGATIVE; - return Direction.getFacingFromAxis(axisDirection, beltAxis); + return Direction.get(axisDirection, beltAxis); } private static BeltSlope getSlopeBetween(BlockPos start, BlockPos end) { @@ -178,13 +180,13 @@ public class BeltConnectorItem extends BlockItem { positions.add(current); if (slope == BeltSlope.VERTICAL) { - current = current.up(direction.getAxisDirection() == AxisDirection.POSITIVE ? 1 : -1); + current = current.above(direction.getAxisDirection() == AxisDirection.POSITIVE ? 1 : -1); continue; } - current = current.offset(direction); + current = current.relative(direction); if (slope != BeltSlope.HORIZONTAL) - current = current.up(slope == BeltSlope.UPWARD ? 1 : -1); + current = current.above(slope == BeltSlope.UPWARD ? 1 : -1); } while (!current.equals(end) && limit-- > 0); @@ -197,12 +199,12 @@ public class BeltConnectorItem extends BlockItem { return false; if (!world.isAreaLoaded(second, 1)) return false; - if (!second.withinDistance(first, maxLength())) + if (!second.closerThan(first, maxLength())) return false; BlockPos diff = second.subtract(first); Axis shaftAxis = world.getBlockState(first) - .get(BlockStateProperties.AXIS); + .getValue(BlockStateProperties.AXIS); int x = diff.getX(); int y = diff.getY(); @@ -210,18 +212,18 @@ public class BeltConnectorItem extends BlockItem { int sames = ((Math.abs(x) == Math.abs(y)) ? 1 : 0) + ((Math.abs(y) == Math.abs(z)) ? 1 : 0) + ((Math.abs(z) == Math.abs(x)) ? 1 : 0); - if (shaftAxis.getCoordinate(x, y, z) != 0) + if (shaftAxis.choose(x, y, z) != 0) return false; if (sames != 1) return false; if (shaftAxis != world.getBlockState(second) - .get(BlockStateProperties.AXIS)) + .getValue(BlockStateProperties.AXIS)) return false; if (shaftAxis == Axis.Y && x != 0 && z != 0) return false; - TileEntity tileEntity = world.getTileEntity(first); - TileEntity tileEntity2 = world.getTileEntity(second); + TileEntity tileEntity = world.getBlockEntity(first); + TileEntity tileEntity2 = world.getBlockEntity(second); if (!(tileEntity instanceof KineticTileEntity)) return false; @@ -235,10 +237,10 @@ public class BeltConnectorItem extends BlockItem { BlockPos step = new BlockPos(Math.signum(diff.getX()), Math.signum(diff.getY()), Math.signum(diff.getZ())); int limit = 1000; - for (BlockPos currentPos = first.add(step); !currentPos.equals(second) && limit-- > 0; currentPos = - currentPos.add(step)) { + for (BlockPos currentPos = first.offset(step); !currentPos.equals(second) && limit-- > 0; currentPos = + currentPos.offset(step)) { BlockState blockState = world.getBlockState(currentPos); - if (ShaftBlock.isShaft(blockState) && blockState.get(AbstractShaftBlock.AXIS) == shaftAxis) + if (ShaftBlock.isShaft(blockState) && blockState.getValue(AbstractShaftBlock.AXIS) == shaftAxis) continue; if (!blockState.getMaterial() .isReplaceable()) diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/transport/BeltCrusherInteractionHandler.java b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/transport/BeltCrusherInteractionHandler.java index 39400e412..8399a5788 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/transport/BeltCrusherInteractionHandler.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/transport/BeltCrusherInteractionHandler.java @@ -26,12 +26,12 @@ public class BeltCrusherInteractionHandler { for (int segment = firstUpcomingSegment; beltMovementPositive ? segment <= nextOffset : segment + 1 >= nextOffset; segment += step) { BlockPos crusherPos = BeltHelper.getPositionForOffset(beltInventory.belt, segment) - .up(); - World world = beltInventory.belt.getWorld(); + .above(); + World world = beltInventory.belt.getLevel(); BlockState crusherState = world.getBlockState(crusherPos); if (!(crusherState.getBlock() instanceof CrushingWheelControllerBlock)) continue; - Direction crusherFacing = crusherState.get(CrushingWheelControllerBlock.FACING); + Direction crusherFacing = crusherState.getValue(CrushingWheelControllerBlock.FACING); Direction movementFacing = beltInventory.belt.getMovementFacing(); if (crusherFacing != movementFacing) continue; @@ -46,7 +46,7 @@ public class BeltCrusherInteractionHandler { return false; currentItem.beltPosition = crusherEntry; - TileEntity te = world.getTileEntity(crusherPos); + TileEntity te = world.getBlockEntity(crusherPos); if (!(te instanceof CrushingWheelControllerTileEntity)) return true; diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/transport/BeltFunnelInteractionHandler.java b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/transport/BeltFunnelInteractionHandler.java index 8ea4af97f..b2c504191 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/transport/BeltFunnelInteractionHandler.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/transport/BeltFunnelInteractionHandler.java @@ -28,21 +28,21 @@ public class BeltFunnelInteractionHandler { for (int segment = firstUpcomingSegment; beltMovementPositive ? segment <= nextOffset : segment + 1 >= nextOffset; segment += step) { BlockPos funnelPos = BeltHelper.getPositionForOffset(beltInventory.belt, segment) - .up(); - World world = beltInventory.belt.getWorld(); + .above(); + World world = beltInventory.belt.getLevel(); BlockState funnelState = world.getBlockState(funnelPos); if (!(funnelState.getBlock() instanceof BeltFunnelBlock)) continue; - Direction funnelFacing = funnelState.get(BeltFunnelBlock.HORIZONTAL_FACING); + Direction funnelFacing = funnelState.getValue(BeltFunnelBlock.HORIZONTAL_FACING); Direction movementFacing = beltInventory.belt.getMovementFacing(); boolean blocking = funnelFacing == movementFacing.getOpposite(); if (funnelFacing == movementFacing) continue; - if (funnelState.get(BeltFunnelBlock.SHAPE) == Shape.PUSHING) + if (funnelState.getValue(BeltFunnelBlock.SHAPE) == Shape.PUSHING) continue; float funnelEntry = segment + .5f; - if (funnelState.get(BeltFunnelBlock.SHAPE) == Shape.EXTENDED) + if (funnelState.getValue(BeltFunnelBlock.SHAPE) == Shape.EXTENDED) funnelEntry += .499f * (beltMovementPositive ? -1 : 1); boolean hasCrossed = nextOffset > funnelEntry && beltMovementPositive @@ -52,13 +52,13 @@ public class BeltFunnelInteractionHandler { if (blocking) currentItem.beltPosition = funnelEntry; - if (world.isRemote || funnelState.method_28500(BeltFunnelBlock.POWERED).orElse(false)) + if (world.isClientSide || funnelState.getOptionalValue(BeltFunnelBlock.POWERED).orElse(false)) if (blocking) return true; else continue; - TileEntity te = world.getTileEntity(funnelPos); + TileEntity te = world.getBlockEntity(funnelPos); if (!(te instanceof FunnelTileEntity)) return true; diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/transport/BeltInventory.java b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/transport/BeltInventory.java index d445f9567..a7e684e09 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/transport/BeltInventory.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/transport/BeltInventory.java @@ -55,7 +55,7 @@ public class BeltInventory { toInsert.clear(); items.removeAll(toRemove); toRemove.clear(); - belt.markDirty(); + belt.setChanged(); belt.sendData(); } @@ -66,7 +66,7 @@ public class BeltInventory { if (beltMovementPositive != belt.getDirectionAwareBeltMovementSpeed() > 0) { beltMovementPositive = !beltMovementPositive; Collections.reverse(items); - belt.markDirty(); + belt.setChanged(); belt.sendData(); } @@ -79,10 +79,10 @@ public class BeltInventory { float beltSpeed = belt.getDirectionAwareBeltMovementSpeed(); Direction movementFacing = belt.getMovementFacing(); boolean horizontal = belt.getBlockState() - .get(BeltBlock.SLOPE) == BeltSlope.HORIZONTAL; + .getValue(BeltBlock.SLOPE) == BeltSlope.HORIZONTAL; float spacing = 1; - World world = belt.getWorld(); - boolean onClient = world.isRemote && !belt.isVirtual(); + World world = belt.getLevel(); + boolean onClient = world.isClientSide && !belt.isVirtual(); // resolve ending only when items will reach it this tick Ending ending = Ending.UNRESOLVED; @@ -105,7 +105,7 @@ public class BeltInventory { movement *= ServerSpeedProvider.get(); // Don't move if held by processing (client) - if (world.isRemote && currentItem.locked) + if (world.isClientSide && currentItem.locked) continue; // Don't move if held by external components @@ -256,7 +256,7 @@ public class BeltInventory { continue; if (stackHandlerBehaviour == null) continue; - if (BeltProcessingBehaviour.isBlocked(belt.getWorld(), BeltHelper.getPositionForOffset(belt, segment))) + if (BeltProcessingBehaviour.isBlocked(belt.getLevel(), BeltHelper.getPositionForOffset(belt, segment))) continue; ProcessingResult result = processingBehaviour.handleReceivedItem(currentItem, stackHandlerBehaviour); @@ -276,12 +276,12 @@ public class BeltInventory { } protected BeltProcessingBehaviour getBeltProcessingAtSegment(int segment) { - return TileEntityBehaviour.get(belt.getWorld(), BeltHelper.getPositionForOffset(belt, segment) - .up(2), BeltProcessingBehaviour.TYPE); + return TileEntityBehaviour.get(belt.getLevel(), BeltHelper.getPositionForOffset(belt, segment) + .above(2), BeltProcessingBehaviour.TYPE); } protected TransportedItemStackHandlerBehaviour getTransportedItemStackHandlerAtSegment(int segment) { - return TileEntityBehaviour.get(belt.getWorld(), BeltHelper.getPositionForOffset(belt, segment), + return TileEntityBehaviour.get(belt.getLevel(), BeltHelper.getPositionForOffset(belt, segment), TransportedItemStackHandlerBehaviour.TYPE); } @@ -296,7 +296,7 @@ public class BeltInventory { } private Ending resolveEnding() { - World world = belt.getWorld(); + World world = belt.getLevel(); BlockPos nextPosition = BeltHelper.getPositionForOffset(belt, beltMovementPositive ? belt.beltLength : -1); // if (AllBlocks.BRASS_BELT_FUNNEL.has(world.getBlockState(lastPosition.up()))) @@ -397,15 +397,15 @@ public class BeltInventory { ItemStack ejected = stack.stack; Vector3d outPos = BeltHelper.getVectorForOffset(belt, stack.beltPosition); float movementSpeed = Math.max(Math.abs(belt.getBeltMovementSpeed()), 1 / 8f); - Vector3d outMotion = Vector3d.of(belt.getBeltChainDirection()).scale(movementSpeed) + Vector3d outMotion = Vector3d.atLowerCornerOf(belt.getBeltChainDirection()).scale(movementSpeed) .add(0, 1 / 8f, 0); outPos = outPos.add(outMotion.normalize().scale(0.001)); - ItemEntity entity = new ItemEntity(belt.getWorld(), outPos.x, outPos.y + 6 / 16f, outPos.z, ejected); - entity.setMotion(outMotion); - entity.setDefaultPickupDelay(); - entity.velocityChanged = true; - belt.getWorld() - .addEntity(entity); + ItemEntity entity = new ItemEntity(belt.getLevel(), outPos.x, outPos.y + 6 / 16f, outPos.z, ejected); + entity.setDeltaMovement(outMotion); + entity.setDefaultPickUpDelay(); + entity.hurtMarked = true; + belt.getLevel() + .addFreshEntity(entity); } public void ejectAll() { @@ -434,7 +434,7 @@ public class BeltInventory { toRemove.add(transported); } if (dirty) { - belt.markDirty(); + belt.setChanged(); belt.sendData(); } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/transport/BeltMovementHandler.java b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/transport/BeltMovementHandler.java index e96ebabdf..6983ce99b 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/transport/BeltMovementHandler.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/transport/BeltMovementHandler.java @@ -43,7 +43,7 @@ public class BeltMovementHandler { public void refresh(BlockPos collision, BlockState belt) { ticksSinceLastCollision = 0; - lastCollidedPos = new BlockPos(collision).toImmutable(); + lastCollidedPos = new BlockPos(collision).immutable(); lastCollidedState = belt; } @@ -60,19 +60,19 @@ public class BeltMovementHandler { public static boolean canBeTransported(Entity entity) { if (!entity.isAlive()) return false; - if (entity instanceof PlayerEntity && ((PlayerEntity) entity).isSneaking()) + if (entity instanceof PlayerEntity && ((PlayerEntity) entity).isShiftKeyDown()) return false; return true; } public static void transportEntity(BeltTileEntity beltTe, Entity entityIn, TransportedEntityInfo info) { BlockPos pos = info.lastCollidedPos; - World world = beltTe.getWorld(); - TileEntity te = world.getTileEntity(pos); - TileEntity tileEntityBelowPassenger = world.getTileEntity(entityIn.getBlockPos()); + World world = beltTe.getLevel(); + TileEntity te = world.getBlockEntity(pos); + TileEntity tileEntityBelowPassenger = world.getBlockEntity(entityIn.blockPosition()); BlockState blockState = info.lastCollidedState; Direction movementFacing = - Direction.getFacingFromAxisDirection(blockState.get(BlockStateProperties.HORIZONTAL_FACING) + Direction.fromAxisAndDirection(blockState.getValue(BlockStateProperties.HORIZONTAL_FACING) .getAxis(), beltTe.getSpeed() < 0 ? POSITIVE : NEGATIVE); boolean collidedWithBelt = te instanceof BeltTileEntity; @@ -85,7 +85,7 @@ public class BeltMovementHandler { // Too slow boolean notHorizontal = beltTe.getBlockState() - .get(BeltBlock.SLOPE) != BeltSlope.HORIZONTAL; + .getValue(BeltBlock.SLOPE) != BeltSlope.HORIZONTAL; if (Math.abs(beltTe.getSpeed()) < 1) return; @@ -96,18 +96,18 @@ public class BeltMovementHandler { // Lock entities in place boolean isPlayer = entityIn instanceof PlayerEntity; if (entityIn instanceof LivingEntity && !isPlayer) - ((LivingEntity) entityIn).addPotionEffect(new EffectInstance(Effects.SLOWNESS, 10, 1, false, false)); + ((LivingEntity) entityIn).addEffect(new EffectInstance(Effects.MOVEMENT_SLOWDOWN, 10, 1, false, false)); - final Direction beltFacing = blockState.get(BlockStateProperties.HORIZONTAL_FACING); - final BeltSlope slope = blockState.get(BeltBlock.SLOPE); + final Direction beltFacing = blockState.getValue(BlockStateProperties.HORIZONTAL_FACING); + final BeltSlope slope = blockState.getValue(BeltBlock.SLOPE); final Axis axis = beltFacing.getAxis(); float movementSpeed = beltTe.getBeltMovementSpeed(); - final Direction movementDirection = Direction.getFacingFromAxis(axis == Axis.X ? NEGATIVE : POSITIVE, axis); + final Direction movementDirection = Direction.get(axis == Axis.X ? NEGATIVE : POSITIVE, axis); - Vector3i centeringDirection = Direction.getFacingFromAxis(POSITIVE, beltFacing.rotateY() + Vector3i centeringDirection = Direction.get(POSITIVE, beltFacing.getClockWise() .getAxis()) - .getDirectionVec(); - Vector3d movement = Vector3d.of(movementDirection.getDirectionVec()) + .getNormal(); + Vector3d movement = Vector3d.atLowerCornerOf(movementDirection.getNormal()) .scale(movementSpeed); double diffCenter = @@ -115,7 +115,7 @@ public class BeltMovementHandler { if (Math.abs(diffCenter) > 48 / 64f) return; - BeltPart part = blockState.get(BeltBlock.PART); + BeltPart part = blockState.getValue(BeltBlock.PART); float top = 13 / 16f; boolean onSlope = notHorizontal && (part == BeltPart.MIDDLE || part == BeltPart.PULLEY || part == (slope == BeltSlope.UPWARD ? BeltPart.END : BeltPart.START) && entityIn.getY() - pos.getY() < top @@ -132,19 +132,19 @@ public class BeltMovementHandler { } if (movingUp) - movement = movement.add(0, Math.abs(axis.getCoordinate(movement.x, movement.y, movement.z)), 0); + movement = movement.add(0, Math.abs(axis.choose(movement.x, movement.y, movement.z)), 0); if (movingDown) - movement = movement.add(0, -Math.abs(axis.getCoordinate(movement.x, movement.y, movement.z)), 0); + movement = movement.add(0, -Math.abs(axis.choose(movement.x, movement.y, movement.z)), 0); - Vector3d centering = Vector3d.of(centeringDirection).scale(diffCenter * Math.min(Math.abs(movementSpeed), .1f) * 4); + Vector3d centering = Vector3d.atLowerCornerOf(centeringDirection).scale(diffCenter * Math.min(Math.abs(movementSpeed), .1f) * 4); if (!(entityIn instanceof LivingEntity) - || ((LivingEntity) entityIn).moveForward == 0 && ((LivingEntity) entityIn).moveStrafing == 0) + || ((LivingEntity) entityIn).zza == 0 && ((LivingEntity) entityIn).xxa == 0) movement = movement.add(centering); - float step = entityIn.stepHeight; + float step = entityIn.maxUpStep; if (!isPlayer) - entityIn.stepHeight = 1; + entityIn.maxUpStep = 1; // Entity Collisions if (Math.abs(movementSpeed) < .5f) { @@ -152,12 +152,12 @@ public class BeltMovementHandler { .scale(0.5); AxisAlignedBB bb = entityIn.getBoundingBox(); AxisAlignedBB checkBB = new AxisAlignedBB(bb.minX, bb.minY, bb.minZ, bb.maxX, bb.maxY, bb.maxZ); - checkBB = checkBB.offset(checkDistance) - .grow(-Math.abs(checkDistance.x), -Math.abs(checkDistance.y), -Math.abs(checkDistance.z)); - List list = world.getEntitiesWithinAABBExcludingEntity(entityIn, checkBB); + checkBB = checkBB.move(checkDistance) + .inflate(-Math.abs(checkDistance.x), -Math.abs(checkDistance.y), -Math.abs(checkDistance.z)); + List list = world.getEntities(entityIn, checkBB); list.removeIf(e -> shouldIgnoreBlocking(entityIn, e)); if (!list.isEmpty()) { - entityIn.setMotion(0, 0, 0); + entityIn.setDeltaMovement(0, 0, 0); info.ticksSinceLastCollision--; return; } @@ -169,10 +169,10 @@ public class BeltMovementHandler { float minVelocity = .13f; float yMovement = (float) -(Math.max(Math.abs(movement.y), minVelocity)); entityIn.move(SELF, new Vector3d(0, yMovement, 0)); - entityIn.move(SELF, movement.mul(1, 0, 1)); + entityIn.move(SELF, movement.multiply(1, 0, 1)); } else if (movingDown) { - entityIn.move(SELF, movement.mul(1, 0, 1)); - entityIn.move(SELF, movement.mul(0, 1, 0)); + entityIn.move(SELF, movement.multiply(1, 0, 1)); + entityIn.move(SELF, movement.multiply(0, 1, 0)); } else { entityIn.move(SELF, movement); } @@ -180,17 +180,17 @@ public class BeltMovementHandler { entityIn.onGround = true; if (!isPlayer) - entityIn.stepHeight = step; + entityIn.maxUpStep = step; - boolean movedPastEndingSlope = onSlope && (AllBlocks.BELT.has(world.getBlockState(entityIn.getBlockPos())) - || AllBlocks.BELT.has(world.getBlockState(entityIn.getBlockPos() - .down()))); + boolean movedPastEndingSlope = onSlope && (AllBlocks.BELT.has(world.getBlockState(entityIn.blockPosition())) + || AllBlocks.BELT.has(world.getBlockState(entityIn.blockPosition() + .below()))); if (movedPastEndingSlope && !movingDown && Math.abs(movementSpeed) > 0) - entityIn.setPosition(entityIn.getX(), entityIn.getY() + movement.y, entityIn.getZ()); + entityIn.setPos(entityIn.getX(), entityIn.getY() + movement.y, entityIn.getZ()); if (movedPastEndingSlope) { - entityIn.setMotion(movement); - entityIn.velocityChanged = true; + entityIn.setDeltaMovement(movement); + entityIn.hurtMarked = true; } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/transport/BeltTunnelInteractionHandler.java b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/transport/BeltTunnelInteractionHandler.java index 6ff160496..4dee31a2e 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/transport/BeltTunnelInteractionHandler.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/transport/BeltTunnelInteractionHandler.java @@ -40,8 +40,8 @@ public class BeltTunnelInteractionHandler { return true; } - World world = beltInventory.belt.getWorld(); - boolean onServer = !world.isRemote || beltInventory.belt.isVirtual(); + World world = beltInventory.belt.getLevel(); + boolean onServer = !world.isClientSide || beltInventory.belt.isVirtual(); boolean removed = false; BeltTunnelTileEntity nextTunnel = getTunnelOnSegment(beltInventory, upcomingSegment); @@ -54,7 +54,7 @@ public class BeltTunnelInteractionHandler { brassTunnel.setStackToDistribute(current.stack); current.stack = ItemStack.EMPTY; beltInventory.belt.sendData(); - beltInventory.belt.markDirty(); + beltInventory.belt.setChanged(); } removed = true; } @@ -62,17 +62,17 @@ public class BeltTunnelInteractionHandler { BlockState blockState = nextTunnel.getBlockState(); if (current.stack.getCount() > 1 && AllBlocks.ANDESITE_TUNNEL.has(blockState) && BeltTunnelBlock.isJunction(blockState) - && movementFacing.getAxis() == blockState.get(BeltTunnelBlock.HORIZONTAL_AXIS)) { + && movementFacing.getAxis() == blockState.getValue(BeltTunnelBlock.HORIZONTAL_AXIS)) { for (Direction d : Iterate.horizontalDirections) { - if (d.getAxis() == blockState.get(BeltTunnelBlock.HORIZONTAL_AXIS)) + if (d.getAxis() == blockState.getValue(BeltTunnelBlock.HORIZONTAL_AXIS)) continue; if (!nextTunnel.flaps.containsKey(d)) continue; - BlockPos outpos = nextTunnel.getPos() - .down() - .offset(d); - if (!world.isBlockPresent(outpos)) + BlockPos outpos = nextTunnel.getBlockPos() + .below() + .relative(d); + if (!world.isLoaded(outpos)) return true; DirectBeltInputBehaviour behaviour = TileEntityBehaviour.get(world, outpos, DirectBeltInputBehaviour.TYPE); @@ -110,13 +110,13 @@ public class BeltTunnelInteractionHandler { Direction movementDirection) { BeltTileEntity belt = beltInventory.belt; BlockPos pos = BeltHelper.getPositionForOffset(belt, offset) - .up(); - if (!(belt.getWorld() + .above(); + if (!(belt.getLevel() .getBlockState(pos) .getBlock() instanceof BrassTunnelBlock)) return false; - TileEntity te = belt.getWorld() - .getTileEntity(pos); + TileEntity te = belt.getLevel() + .getBlockEntity(pos); if (te == null || !(te instanceof BrassTunnelTileEntity)) return false; BrassTunnelTileEntity tunnel = (BrassTunnelTileEntity) te; @@ -133,16 +133,16 @@ public class BeltTunnelInteractionHandler { protected static BeltTunnelTileEntity getTunnelOnSegment(BeltInventory beltInventory, int offset) { BeltTileEntity belt = beltInventory.belt; if (belt.getBlockState() - .get(BeltBlock.SLOPE) != BeltSlope.HORIZONTAL) + .getValue(BeltBlock.SLOPE) != BeltSlope.HORIZONTAL) return null; - return getTunnelOnPosition(belt.getWorld(), BeltHelper.getPositionForOffset(belt, offset)); + return getTunnelOnPosition(belt.getLevel(), BeltHelper.getPositionForOffset(belt, offset)); } public static BeltTunnelTileEntity getTunnelOnPosition(World world, BlockPos pos) { - pos = pos.up(); + pos = pos.above(); if (!(world.getBlockState(pos).getBlock() instanceof BeltTunnelBlock)) return null; - TileEntity te = world.getTileEntity(pos); + TileEntity te = world.getBlockEntity(pos); if (te == null || !(te instanceof BeltTunnelTileEntity)) return null; return ((BeltTunnelTileEntity) te); diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/transport/ItemHandlerBeltSegment.java b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/transport/ItemHandlerBeltSegment.java index 896051089..c29866810 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/transport/ItemHandlerBeltSegment.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/transport/ItemHandlerBeltSegment.java @@ -35,7 +35,7 @@ public class ItemHandlerBeltSegment implements IItemHandler { newStack.beltPosition = offset + .5f + (beltInventory.beltMovementPositive ? -1 : 1) / 16f; newStack.prevBeltPosition = newStack.beltPosition; this.beltInventory.addItem(newStack); - this.beltInventory.belt.markDirty(); + this.beltInventory.belt.setChanged(); this.beltInventory.belt.sendData(); } return ItemStack.EMPTY; @@ -52,7 +52,7 @@ public class ItemHandlerBeltSegment implements IItemHandler { amount = Math.min(amount, transported.stack.getCount()); ItemStack extracted = simulate ? transported.stack.copy().split(amount) : transported.stack.split(amount); if (!simulate) { - this.beltInventory.belt.markDirty(); + this.beltInventory.belt.setChanged(); this.beltInventory.belt.sendData(); } return extracted; diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/transport/TransportedItemStack.java b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/transport/TransportedItemStack.java index 85cea6d9a..522d43fb2 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/transport/TransportedItemStack.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/transport/TransportedItemStack.java @@ -73,7 +73,7 @@ public class TransportedItemStack implements Comparable { nbt.putFloat("PrevOffset", prevSideOffset); nbt.putInt("InSegment", insertedAt); nbt.putInt("Angle", angle); - nbt.putInt("InDirection", insertedFrom.getIndex()); + nbt.putInt("InDirection", insertedFrom.get3DDataValue()); if (locked) nbt.putBoolean("Locked", locked); if (lockedExternally) @@ -82,14 +82,14 @@ public class TransportedItemStack implements Comparable { } public static TransportedItemStack read(CompoundNBT nbt) { - TransportedItemStack stack = new TransportedItemStack(ItemStack.read(nbt.getCompound("Item"))); + TransportedItemStack stack = new TransportedItemStack(ItemStack.of(nbt.getCompound("Item"))); stack.beltPosition = nbt.getFloat("Pos"); stack.prevBeltPosition = nbt.getFloat("PrevPos"); stack.sideOffset = nbt.getFloat("Offset"); stack.prevSideOffset = nbt.getFloat("PrevOffset"); stack.insertedAt = nbt.getInt("InSegment"); stack.angle = nbt.getInt("Angle"); - stack.insertedFrom = Direction.byIndex(nbt.getInt("InDirection")); + stack.insertedFrom = Direction.from3DDataValue(nbt.getInt("InDirection")); stack.locked = nbt.getBoolean("Locked"); stack.lockedExternally = nbt.getBoolean("LockedExternally"); return stack; diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/elementary/AbstractShaftBlock.java b/src/main/java/com/simibubi/create/content/contraptions/relays/elementary/AbstractShaftBlock.java index ec3e1aff9..6e74032a9 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/elementary/AbstractShaftBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/elementary/AbstractShaftBlock.java @@ -30,12 +30,14 @@ import net.minecraft.world.IWorld; import net.minecraft.world.IWorldReader; import net.minecraft.world.World; +import net.minecraft.block.AbstractBlock.Properties; + public abstract class AbstractShaftBlock extends RotatedPillarKineticBlock implements IWaterLoggable, IWrenchableWithBracket { public AbstractShaftBlock(Properties properties) { super(properties); - setDefaultState(super.getDefaultState().with(BlockStateProperties.WATERLOGGED, false)); + registerDefaultState(super.defaultBlockState().setValue(BlockStateProperties.WATERLOGGED, false)); } @Override @@ -44,7 +46,7 @@ public abstract class AbstractShaftBlock extends RotatedPillarKineticBlock } @Override - public PushReaction getPushReaction(BlockState state) { + public PushReaction getPistonPushReaction(BlockState state) { return PushReaction.NORMAL; } @@ -55,52 +57,52 @@ public abstract class AbstractShaftBlock extends RotatedPillarKineticBlock @Override @SuppressWarnings("deprecation") - public void onReplaced(BlockState state, World world, BlockPos pos, BlockState newState, boolean isMoving) { + public void onRemove(BlockState state, World world, BlockPos pos, BlockState newState, boolean isMoving) { if (state != newState && !isMoving) - removeBracket(world, pos, true).ifPresent(stack -> Block.spawnAsEntity(world, pos, stack)); - super.onReplaced(state, world, pos, newState, isMoving); + removeBracket(world, pos, true).ifPresent(stack -> Block.popResource(world, pos, stack)); + super.onRemove(state, world, pos, newState, isMoving); } // IRotate: @Override public boolean hasShaftTowards(IWorldReader world, BlockPos pos, BlockState state, Direction face) { - return face.getAxis() == state.get(AXIS); + return face.getAxis() == state.getValue(AXIS); } @Override public Axis getRotationAxis(BlockState state) { - return state.get(AXIS); + return state.getValue(AXIS); } @Override public FluidState getFluidState(BlockState state) { - return state.get(BlockStateProperties.WATERLOGGED) ? Fluids.WATER.getStillFluidState(false) - : Fluids.EMPTY.getDefaultState(); + return state.getValue(BlockStateProperties.WATERLOGGED) ? Fluids.WATER.getSource(false) + : Fluids.EMPTY.defaultFluidState(); } @Override - protected void fillStateContainer(Builder builder) { + protected void createBlockStateDefinition(Builder builder) { builder.add(BlockStateProperties.WATERLOGGED); - super.fillStateContainer(builder); + super.createBlockStateDefinition(builder); } @Override - public BlockState updatePostPlacement(BlockState state, Direction direction, BlockState neighbourState, + public BlockState updateShape(BlockState state, Direction direction, BlockState neighbourState, IWorld world, BlockPos pos, BlockPos neighbourPos) { - if (state.get(BlockStateProperties.WATERLOGGED)) { - world.getPendingFluidTicks() - .scheduleTick(pos, Fluids.WATER, Fluids.WATER.getTickRate(world)); + if (state.getValue(BlockStateProperties.WATERLOGGED)) { + world.getLiquidTicks() + .scheduleTick(pos, Fluids.WATER, Fluids.WATER.getTickDelay(world)); } return state; } @Override public BlockState getStateForPlacement(BlockItemUseContext context) { - FluidState ifluidstate = context.getWorld() - .getFluidState(context.getPos()); - return super.getStateForPlacement(context).with(BlockStateProperties.WATERLOGGED, - Boolean.valueOf(ifluidstate.getFluid() == Fluids.WATER)); + FluidState ifluidstate = context.getLevel() + .getFluidState(context.getClickedPos()); + return super.getStateForPlacement(context).setValue(BlockStateProperties.WATERLOGGED, + Boolean.valueOf(ifluidstate.getType() == Fluids.WATER)); } @Override @@ -110,13 +112,13 @@ public abstract class AbstractShaftBlock extends RotatedPillarKineticBlock return Optional.empty(); BlockState bracket = behaviour.getBracket(); behaviour.removeBracket(inOnReplacedContext); - if (bracket == Blocks.AIR.getDefaultState()) + if (bracket == Blocks.AIR.defaultBlockState()) return Optional.empty(); return Optional.of(new ItemStack(bracket.getBlock())); } @Override - public boolean allowsMovement(BlockState state, IBlockReader reader, BlockPos pos, PathType type) { + public boolean isPathfindable(BlockState state, IBlockReader reader, BlockPos pos, PathType type) { return false; } diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/elementary/BracketedKineticBlockModel.java b/src/main/java/com/simibubi/create/content/contraptions/relays/elementary/BracketedKineticBlockModel.java index 390a3ed1d..e4a432b7f 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/elementary/BracketedKineticBlockModel.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/elementary/BracketedKineticBlockModel.java @@ -67,8 +67,8 @@ public class BracketedKineticBlockModel extends BakedModelWrapper { public void putBracket(BlockState state) { this.bracket = Minecraft.getInstance() - .getBlockRendererDispatcher() - .getModelForState(state); + .getBlockRenderer() + .getBlockModel(state); } public IBakedModel getBracket() { diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/elementary/BracketedTileEntityBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/relays/elementary/BracketedTileEntityBehaviour.java index c926acd2f..1e677317c 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/elementary/BracketedTileEntityBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/elementary/BracketedTileEntityBehaviour.java @@ -64,8 +64,8 @@ public class BracketedTileEntityBehaviour extends TileEntityBehaviour { public void removeBracket(boolean inOnReplacedContext) { World world = getWorld(); - if (!world.isRemote) - world.playEvent(2001, getPos(), Block.getStateId(getBracket())); + if (!world.isClientSide) + world.levelEvent(2001, getPos(), Block.getId(getBracket())); this.bracket = Optional.empty(); reRender = true; if (inOnReplacedContext) @@ -75,11 +75,11 @@ public class BracketedTileEntityBehaviour extends TileEntityBehaviour { } public boolean isBracketPresent() { - return getBracket() != Blocks.AIR.getDefaultState(); + return getBracket() != Blocks.AIR.defaultBlockState(); } public BlockState getBracket() { - return bracket.orElse(Blocks.AIR.getDefaultState()); + return bracket.orElse(Blocks.AIR.defaultBlockState()); } @Override @@ -108,7 +108,7 @@ public class BracketedTileEntityBehaviour extends TileEntityBehaviour { if (nbt.contains("Bracket")) bracket = Optional.of(NBTUtil.readBlockState(nbt.getCompound("Bracket"))); if (clientPacket && nbt.contains("Redraw")) - getWorld().notifyBlockUpdate(getPos(), tileEntity.getBlockState(), tileEntity.getBlockState(), 16); + getWorld().sendBlockUpdated(getPos(), tileEntity.getBlockState(), tileEntity.getBlockState(), 16); super.read(nbt, clientPacket); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/elementary/CogWheelBlock.java b/src/main/java/com/simibubi/create/content/contraptions/relays/elementary/CogWheelBlock.java index 7662c10f5..7df1faa2f 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/elementary/CogWheelBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/elementary/CogWheelBlock.java @@ -23,6 +23,8 @@ import net.minecraft.world.IBlockReader; import net.minecraft.world.IWorldReader; import net.minecraft.world.World; +import net.minecraft.block.AbstractBlock.Properties; + @ParametersAreNonnullByDefault @MethodsReturnNonnullByDefault @SuppressWarnings("deprecation") @@ -54,12 +56,12 @@ public class CogWheelBlock extends AbstractShaftBlock implements ICogWheel { @Override public VoxelShape getShape(BlockState state, IBlockReader worldIn, BlockPos pos, ISelectionContext context) { - return (isLarge ? AllShapes.LARGE_GEAR : AllShapes.SMALL_GEAR).get(state.get(AXIS)); + return (isLarge ? AllShapes.LARGE_GEAR : AllShapes.SMALL_GEAR).get(state.getValue(AXIS)); } @Override - public boolean isValidPosition(BlockState state, IWorldReader worldIn, BlockPos pos) { - return isValidCogwheelPosition(ICogWheel.isLargeCog(state), worldIn, pos, state.get(AXIS)); + public boolean canSurvive(BlockState state, IWorldReader worldIn, BlockPos pos) { + return isValidCogwheelPosition(ICogWheel.isLargeCog(state), worldIn, pos, state.getValue(AXIS)); } public static boolean isValidCogwheelPosition(boolean large, IWorldReader worldIn, BlockPos pos, Axis cogAxis) { @@ -67,9 +69,9 @@ public class CogWheelBlock extends AbstractShaftBlock implements ICogWheel { if (facing.getAxis() == cogAxis) continue; - BlockPos offsetPos = pos.offset(facing); + BlockPos offsetPos = pos.relative(facing); BlockState blockState = worldIn.getBlockState(offsetPos); - if (blockState.contains(AXIS) && facing.getAxis() == blockState.get(AXIS)) + if (blockState.hasProperty(AXIS) && facing.getAxis() == blockState.getValue(AXIS)) continue; if (ICogWheel.isLargeCog(blockState) || large && ICogWheel.isSmallCog(blockState)) @@ -79,16 +81,16 @@ public class CogWheelBlock extends AbstractShaftBlock implements ICogWheel { } protected Axis getAxisForPlacement(BlockItemUseContext context) { - if (context.getPlayer() != null && context.getPlayer().isSneaking()) - return context.getFace().getAxis(); + if (context.getPlayer() != null && context.getPlayer().isShiftKeyDown()) + return context.getClickedFace().getAxis(); - World world = context.getWorld(); - BlockState stateBelow = world.getBlockState(context.getPos().down()); + World world = context.getLevel(); + BlockState stateBelow = world.getBlockState(context.getClickedPos().below()); if (AllBlocks.ROTATION_SPEED_CONTROLLER.has(stateBelow) && isLargeCog()) - return stateBelow.get(SpeedControllerBlock.HORIZONTAL_AXIS) == Axis.X ? Axis.Z : Axis.X; + return stateBelow.getValue(SpeedControllerBlock.HORIZONTAL_AXIS) == Axis.X ? Axis.Z : Axis.X; - BlockPos placedOnPos = context.getPos().offset(context.getFace().getOpposite()); + BlockPos placedOnPos = context.getClickedPos().relative(context.getClickedFace().getOpposite()); BlockState placedAgainst = world.getBlockState(placedOnPos); Block block = placedAgainst.getBlock(); @@ -96,15 +98,15 @@ public class CogWheelBlock extends AbstractShaftBlock implements ICogWheel { return ((IRotate) block).getRotationAxis(placedAgainst); Axis preferredAxis = getPreferredAxis(context); - return preferredAxis != null ? preferredAxis : context.getFace().getAxis(); + return preferredAxis != null ? preferredAxis : context.getClickedFace().getAxis(); } @Override public BlockState getStateForPlacement(BlockItemUseContext context) { - boolean shouldWaterlog = context.getWorld().getFluidState(context.getPos()).getFluid() == Fluids.WATER; - return this.getDefaultState() - .with(AXIS, getAxisForPlacement(context)) - .with(BlockStateProperties.WATERLOGGED, shouldWaterlog); + boolean shouldWaterlog = context.getLevel().getFluidState(context.getClickedPos()).getType() == Fluids.WATER; + return this.defaultBlockState() + .setValue(AXIS, getAxisForPlacement(context)) + .setValue(BlockStateProperties.WATERLOGGED, shouldWaterlog); } @Override diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/elementary/CogwheelBlockItem.java b/src/main/java/com/simibubi/create/content/contraptions/relays/elementary/CogwheelBlockItem.java index a1e96d272..60b44226c 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/elementary/CogwheelBlockItem.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/elementary/CogwheelBlockItem.java @@ -29,6 +29,8 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockRayTraceResult; import net.minecraft.world.World; +import net.minecraft.item.Item.Properties; + public class CogwheelBlockItem extends BlockItem { boolean large; @@ -46,21 +48,21 @@ public class CogwheelBlockItem extends BlockItem { @Override public ActionResultType onItemUseFirst(ItemStack stack, ItemUseContext context) { - World world = context.getWorld(); - BlockPos pos = context.getPos(); + World world = context.getLevel(); + BlockPos pos = context.getClickedPos(); BlockState state = world.getBlockState(pos); IPlacementHelper helper = PlacementHelpers.get(placementHelperId); PlayerEntity player = context.getPlayer(); - BlockRayTraceResult ray = new BlockRayTraceResult(context.getHitVec(), context.getFace(), pos, true); - if (helper.matchesState(state) && player != null && !player.isSneaking()) { + BlockRayTraceResult ray = new BlockRayTraceResult(context.getClickLocation(), context.getClickedFace(), pos, true); + if (helper.matchesState(state) && player != null && !player.isShiftKeyDown()) { return helper.getOffset(player, world, state, pos, ray).placeInWorld(world, this, player, context.getHand(), ray); } if (integratedCogHelperId != -1) { helper = PlacementHelpers.get(integratedCogHelperId); - if (helper.matchesState(state) && player != null && !player.isSneaking()) { + if (helper.matchesState(state) && player != null && !player.isShiftKeyDown()) { return helper.getOffset(player, world, state, pos, ray).placeInWorld(world, this, player, context.getHand(), ray); } } @@ -71,33 +73,33 @@ public class CogwheelBlockItem extends BlockItem { @Override // Trigger cogwheel criterion protected boolean placeBlock(BlockItemUseContext context, BlockState state) { - triggerShiftingGearsAdvancement(context.getWorld(), context.getPos(), state, context.getPlayer()); + triggerShiftingGearsAdvancement(context.getLevel(), context.getClickedPos(), state, context.getPlayer()); return super.placeBlock(context, state); } protected void triggerShiftingGearsAdvancement(World world, BlockPos pos, BlockState state, PlayerEntity player) { - if (world.isRemote || player == null) + if (world.isClientSide || player == null) return; - Axis axis = state.get(CogWheelBlock.AXIS); + Axis axis = state.getValue(CogWheelBlock.AXIS); for (Axis perpendicular1 : Iterate.axes) { if (perpendicular1 == axis) continue; - Direction d1 = Direction.getFacingFromAxis(AxisDirection.POSITIVE, perpendicular1); + Direction d1 = Direction.get(AxisDirection.POSITIVE, perpendicular1); for (Axis perpendicular2 : Iterate.axes) { if (perpendicular1 == perpendicular2) continue; if (axis == perpendicular2) continue; - Direction d2 = Direction.getFacingFromAxis(AxisDirection.POSITIVE, perpendicular2); + Direction d2 = Direction.get(AxisDirection.POSITIVE, perpendicular2); for (int offset1 : Iterate.positiveAndNegative) { for (int offset2 : Iterate.positiveAndNegative) { - BlockPos connectedPos = pos.offset(d1, offset1) - .offset(d2, offset2); + BlockPos connectedPos = pos.relative(d1, offset1) + .relative(d2, offset2); BlockState blockState = world.getBlockState(connectedPos); if (!(blockState.getBlock() instanceof CogWheelBlock)) continue; - if (blockState.get(CogWheelBlock.AXIS) != axis) + if (blockState.getValue(CogWheelBlock.AXIS) != axis) continue; if (ICogWheel.isLargeCog(blockState) == large) continue; @@ -123,12 +125,12 @@ public class CogwheelBlockItem extends BlockItem { if (!((CogWheelBlock) state.getBlock()).isLarge) { List directions = - IPlacementHelper.orderedByDistanceExceptAxis(pos, ray.getHitVec(), state.get(AXIS)); + IPlacementHelper.orderedByDistanceExceptAxis(pos, ray.getLocation(), state.getValue(AXIS)); for (Direction dir : directions) { - BlockPos newPos = pos.offset(dir); + BlockPos newPos = pos.relative(dir); - if (!CogWheelBlock.isValidCogwheelPosition(false, world, newPos, state.get(AXIS))) + if (!CogWheelBlock.isValidCogwheelPosition(false, world, newPos, state.getValue(AXIS))) continue; if (!world.getBlockState(newPos) @@ -136,7 +138,7 @@ public class CogwheelBlockItem extends BlockItem { .isReplaceable()) continue; - return PlacementOffset.success(newPos, s -> s.with(AXIS, state.get(AXIS))); + return PlacementOffset.success(newPos, s -> s.setValue(AXIS, state.getValue(AXIS))); } @@ -161,13 +163,13 @@ public class CogwheelBlockItem extends BlockItem { return PlacementOffset.fail(); if (((CogWheelBlock) state.getBlock()).isLarge) { - Direction side = IPlacementHelper.orderedByDistanceOnlyAxis(pos, ray.getHitVec(), state.get(AXIS)) + Direction side = IPlacementHelper.orderedByDistanceOnlyAxis(pos, ray.getLocation(), state.getValue(AXIS)) .get(0); List directions = - IPlacementHelper.orderedByDistanceExceptAxis(pos, ray.getHitVec(), state.get(AXIS)); + IPlacementHelper.orderedByDistanceExceptAxis(pos, ray.getLocation(), state.getValue(AXIS)); for (Direction dir : directions) { - BlockPos newPos = pos.offset(dir) - .offset(side); + BlockPos newPos = pos.relative(dir) + .relative(side); if (!CogWheelBlock.isValidCogwheelPosition(true, world, newPos, dir.getAxis())) continue; @@ -177,7 +179,7 @@ public class CogwheelBlockItem extends BlockItem { .isReplaceable()) continue; - return PlacementOffset.success(newPos, s -> s.with(AXIS, dir.getAxis())); + return PlacementOffset.success(newPos, s -> s.setValue(AXIS, dir.getAxis())); } return PlacementOffset.fail(); @@ -198,34 +200,34 @@ public class CogwheelBlockItem extends BlockItem { @Override public PlacementOffset getOffset(PlayerEntity player, World world, BlockState state, BlockPos pos, BlockRayTraceResult ray) { // diagonal gears of different size - Direction closest = IPlacementHelper.orderedByDistanceExceptAxis(pos, ray.getHitVec(), state.get(AXIS)) + Direction closest = IPlacementHelper.orderedByDistanceExceptAxis(pos, ray.getLocation(), state.getValue(AXIS)) .get(0); - List directions = IPlacementHelper.orderedByDistanceExceptAxis(pos, ray.getHitVec(), - state.get(AXIS), d -> d.getAxis() != closest.getAxis()); + List directions = IPlacementHelper.orderedByDistanceExceptAxis(pos, ray.getLocation(), + state.getValue(AXIS), d -> d.getAxis() != closest.getAxis()); for (Direction dir : directions) { - BlockPos newPos = pos.offset(dir) - .offset(closest); + BlockPos newPos = pos.relative(dir) + .relative(closest); if (!world.getBlockState(newPos) .getMaterial() .isReplaceable()) continue; - if (!CogWheelBlock.isValidCogwheelPosition(ICogWheel.isLargeCog(state), world, newPos, state.get(AXIS))) + if (!CogWheelBlock.isValidCogwheelPosition(ICogWheel.isLargeCog(state), world, newPos, state.getValue(AXIS))) continue; - return PlacementOffset.success(newPos, s -> s.with(AXIS, state.get(AXIS))); + return PlacementOffset.success(newPos, s -> s.setValue(AXIS, state.getValue(AXIS))); } return PlacementOffset.fail(); } protected boolean hitOnShaft(BlockState state, BlockRayTraceResult ray) { - return AllShapes.SIX_VOXEL_POLE.get(state.get(AXIS)) - .getBoundingBox() - .grow(0.001) - .contains(ray.getHitVec() - .subtract(ray.getHitVec() + return AllShapes.SIX_VOXEL_POLE.get(state.getValue(AXIS)) + .bounds() + .inflate(0.001) + .contains(ray.getLocation() + .subtract(ray.getLocation() .align(Iterate.axisSet))); } } @@ -245,14 +247,14 @@ public class CogwheelBlockItem extends BlockItem { @Override public PlacementOffset getOffset(PlayerEntity player, World world, BlockState state, BlockPos pos, BlockRayTraceResult ray) { - Direction face = ray.getFace(); + Direction face = ray.getDirection(); Axis newAxis; - if (state.contains(HorizontalKineticBlock.HORIZONTAL_FACING)) - newAxis = state.get(HorizontalKineticBlock.HORIZONTAL_FACING) + if (state.hasProperty(HorizontalKineticBlock.HORIZONTAL_FACING)) + newAxis = state.getValue(HorizontalKineticBlock.HORIZONTAL_FACING) .getAxis(); - else if (state.contains(DirectionalKineticBlock.FACING)) - newAxis = state.get(DirectionalKineticBlock.FACING) + else if (state.hasProperty(DirectionalKineticBlock.FACING)) + newAxis = state.getValue(DirectionalKineticBlock.FACING) .getAxis(); else newAxis = Axis.Y; @@ -261,11 +263,11 @@ public class CogwheelBlockItem extends BlockItem { return PlacementOffset.fail(); List directions = - IPlacementHelper.orderedByDistanceExceptAxis(pos, ray.getHitVec(), face.getAxis(), newAxis); + IPlacementHelper.orderedByDistanceExceptAxis(pos, ray.getLocation(), face.getAxis(), newAxis); for (Direction d : directions) { - BlockPos newPos = pos.offset(face) - .offset(d); + BlockPos newPos = pos.relative(face) + .relative(d); if (!world.getBlockState(newPos) .getMaterial() @@ -275,7 +277,7 @@ public class CogwheelBlockItem extends BlockItem { if (!CogWheelBlock.isValidCogwheelPosition(false, world, newPos, newAxis)) return PlacementOffset.fail(); - return PlacementOffset.success(newPos, s -> s.with(CogWheelBlock.AXIS, newAxis)); + return PlacementOffset.success(newPos, s -> s.setValue(CogWheelBlock.AXIS, newAxis)); } return PlacementOffset.fail(); @@ -298,14 +300,14 @@ public class CogwheelBlockItem extends BlockItem { @Override public PlacementOffset getOffset(PlayerEntity player, World world, BlockState state, BlockPos pos, BlockRayTraceResult ray) { - Direction face = ray.getFace(); + Direction face = ray.getDirection(); Axis newAxis; - if (state.contains(HorizontalKineticBlock.HORIZONTAL_FACING)) - newAxis = state.get(HorizontalKineticBlock.HORIZONTAL_FACING) + if (state.hasProperty(HorizontalKineticBlock.HORIZONTAL_FACING)) + newAxis = state.getValue(HorizontalKineticBlock.HORIZONTAL_FACING) .getAxis(); - else if (state.contains(DirectionalKineticBlock.FACING)) - newAxis = state.get(DirectionalKineticBlock.FACING) + else if (state.hasProperty(DirectionalKineticBlock.FACING)) + newAxis = state.getValue(DirectionalKineticBlock.FACING) .getAxis(); else newAxis = Axis.Y; @@ -313,10 +315,10 @@ public class CogwheelBlockItem extends BlockItem { if (face.getAxis() == newAxis) return PlacementOffset.fail(); - List directions = IPlacementHelper.orderedByDistanceExceptAxis(pos, ray.getHitVec(), newAxis); + List directions = IPlacementHelper.orderedByDistanceExceptAxis(pos, ray.getLocation(), newAxis); for (Direction d : directions) { - BlockPos newPos = pos.offset(d); + BlockPos newPos = pos.relative(d); if (!world.getBlockState(newPos) .getMaterial() @@ -328,7 +330,7 @@ public class CogwheelBlockItem extends BlockItem { return PlacementOffset.success() .at(newPos) - .withTransform(s -> s.with(CogWheelBlock.AXIS, newAxis)); + .withTransform(s -> s.setValue(CogWheelBlock.AXIS, newAxis)); } return PlacementOffset.fail(); diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/elementary/ShaftBlock.java b/src/main/java/com/simibubi/create/content/contraptions/relays/elementary/ShaftBlock.java index 51c02d3af..e169a93e8 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/elementary/ShaftBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/elementary/ShaftBlock.java @@ -26,6 +26,8 @@ import net.minecraft.util.math.shapes.VoxelShape; import net.minecraft.world.IBlockReader; import net.minecraft.world.World; +import net.minecraft.block.AbstractBlock.Properties; + public class ShaftBlock extends AbstractShaftBlock { private static final int placementHelperId = PlacementHelpers.register(new PlacementHelper()); @@ -40,7 +42,7 @@ public class ShaftBlock extends AbstractShaftBlock { @Override public VoxelShape getShape(BlockState state, IBlockReader worldIn, BlockPos pos, ISelectionContext context) { - return AllShapes.SIX_VOXEL_POLE.get(state.get(AXIS)); + return AllShapes.SIX_VOXEL_POLE.get(state.getValue(AXIS)); } @Override @@ -54,12 +56,12 @@ public class ShaftBlock extends AbstractShaftBlock { } @Override - public ActionResultType onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, + public ActionResultType use(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockRayTraceResult ray) { - if (player.isSneaking() || !player.isAllowEdit()) + if (player.isShiftKeyDown() || !player.mayBuild()) return ActionResultType.PASS; - ItemStack heldItem = player.getHeldItem(hand); + ItemStack heldItem = player.getItemInHand(hand); for (EncasedShaftBlock encasedShaft : new EncasedShaftBlock[] { AllBlocks.ANDESITE_ENCASED_SHAFT.get(), AllBlocks.BRASS_ENCASED_SHAFT.get() }) { @@ -67,12 +69,12 @@ public class ShaftBlock extends AbstractShaftBlock { .isIn(heldItem)) continue; - if (world.isRemote) + if (world.isClientSide) return ActionResultType.SUCCESS; AllTriggers.triggerFor(AllTriggers.CASING_SHAFT, player); - KineticTileEntity.switchToBlockState(world, pos, encasedShaft.getDefaultState() - .with(AXIS, state.get(AXIS))); + KineticTileEntity.switchToBlockState(world, pos, encasedShaft.defaultBlockState() + .setValue(AXIS, state.getValue(AXIS))); return ActionResultType.SUCCESS; } @@ -90,7 +92,7 @@ public class ShaftBlock extends AbstractShaftBlock { private PlacementHelper(){ super( state -> state.getBlock() instanceof AbstractShaftBlock, - state -> state.get(AXIS), + state -> state.getValue(AXIS), AXIS ); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/elementary/SimpleKineticTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/relays/elementary/SimpleKineticTileEntity.java index 5c651a8a7..4545e3f4a 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/elementary/SimpleKineticTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/elementary/SimpleKineticTileEntity.java @@ -27,7 +27,7 @@ public class SimpleKineticTileEntity extends KineticTileEntity { @Override public AxisAlignedBB makeRenderBoundingBox() { - return new AxisAlignedBB(pos).grow(1); + return new AxisAlignedBB(worldPosition).inflate(1); } @Override @@ -35,10 +35,10 @@ public class SimpleKineticTileEntity extends KineticTileEntity { if (!ICogWheel.isLargeCog(state)) return super.addPropagationLocations(block, state, neighbours); - BlockPos.getAllInBox(new BlockPos(-1, -1, -1), new BlockPos(1, 1, 1)) + BlockPos.betweenClosedStream(new BlockPos(-1, -1, -1), new BlockPos(1, 1, 1)) .forEach(offset -> { - if (offset.distanceSq(0, 0, 0, false) == BlockPos.ZERO.distanceSq(1, 1, 0, false)) - neighbours.add(pos.add(offset)); + if (offset.distSqr(0, 0, 0, false) == BlockPos.ZERO.distSqr(1, 1, 0, false)) + neighbours.add(worldPosition.offset(offset)); }); return neighbours; } diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/encased/AbstractEncasedShaftBlock.java b/src/main/java/com/simibubi/create/content/contraptions/relays/encased/AbstractEncasedShaftBlock.java index df29e6e41..7c7c7ea29 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/encased/AbstractEncasedShaftBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/encased/AbstractEncasedShaftBlock.java @@ -14,6 +14,8 @@ import net.minecraft.util.Direction; import net.minecraft.util.math.BlockPos; import net.minecraft.world.IWorldReader; +import net.minecraft.block.AbstractBlock.Properties; + @MethodsReturnNonnullByDefault public abstract class AbstractEncasedShaftBlock extends RotatedPillarKineticBlock { public AbstractEncasedShaftBlock(Properties properties) { @@ -21,8 +23,8 @@ public abstract class AbstractEncasedShaftBlock extends RotatedPillarKineticBloc } @Override - protected void fillStateContainer(StateContainer.Builder builder) { - super.fillStateContainer(builder); + protected void createBlockStateDefinition(StateContainer.Builder builder) { + super.createBlockStateDefinition(builder); } @Override @@ -31,28 +33,28 @@ public abstract class AbstractEncasedShaftBlock extends RotatedPillarKineticBloc } @Override - public PushReaction getPushReaction(@Nullable BlockState state) { + public PushReaction getPistonPushReaction(@Nullable BlockState state) { return PushReaction.NORMAL; } @Override public BlockState getStateForPlacement(BlockItemUseContext context) { if (context.getPlayer() != null && context.getPlayer() - .isSneaking()) + .isShiftKeyDown()) return super.getStateForPlacement(context); Direction.Axis preferredAxis = getPreferredAxis(context); - return this.getDefaultState() - .with(AXIS, preferredAxis == null ? context.getNearestLookingDirection() + return this.defaultBlockState() + .setValue(AXIS, preferredAxis == null ? context.getNearestLookingDirection() .getAxis() : preferredAxis); } @Override public boolean hasShaftTowards(IWorldReader world, BlockPos pos, BlockState state, Direction face) { - return face.getAxis() == state.get(AXIS); + return face.getAxis() == state.getValue(AXIS); } @Override public Direction.Axis getRotationAxis(BlockState state) { - return state.get(AXIS); + return state.getValue(AXIS); } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/encased/AdjustablePulleyBlock.java b/src/main/java/com/simibubi/create/content/contraptions/relays/encased/AdjustablePulleyBlock.java index 5ecd6ee43..e2f5b841f 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/encased/AdjustablePulleyBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/encased/AdjustablePulleyBlock.java @@ -14,18 +14,20 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.world.IBlockReader; import net.minecraft.world.World; +import net.minecraft.block.AbstractBlock.Properties; + public class AdjustablePulleyBlock extends EncasedBeltBlock implements ITE { public static BooleanProperty POWERED = BlockStateProperties.POWERED; public AdjustablePulleyBlock(Properties properties) { super(properties); - setDefaultState(getDefaultState().with(POWERED, false)); + registerDefaultState(defaultBlockState().setValue(POWERED, false)); } @Override - protected void fillStateContainer(Builder builder) { - super.fillStateContainer(builder.add(POWERED)); + protected void createBlockStateDefinition(Builder builder) { + super.createBlockStateDefinition(builder.add(POWERED)); } @Override @@ -34,8 +36,8 @@ public class AdjustablePulleyBlock extends EncasedBeltBlock implements ITE PART = EnumProperty.create("part", Part.class); @@ -35,7 +37,7 @@ public class EncasedBeltBlock extends RotatedPillarKineticBlock { public EncasedBeltBlock(Properties properties) { super(properties); - setDefaultState(getDefaultState().with(PART, Part.NONE)); + registerDefaultState(defaultBlockState().setValue(PART, Part.NONE)); } @Override @@ -44,13 +46,13 @@ public class EncasedBeltBlock extends RotatedPillarKineticBlock { } @Override - public PushReaction getPushReaction(BlockState state) { + public PushReaction getPistonPushReaction(BlockState state) { return PushReaction.NORMAL; } @Override - protected void fillStateContainer(Builder builder) { - super.fillStateContainer(builder.add(PART, CONNECTED_ALONG_FIRST_COORDINATE)); + protected void createBlockStateDefinition(Builder builder) { + super.createBlockStateDefinition(builder.add(PART, CONNECTED_ALONG_FIRST_COORDINATE)); } @Override @@ -58,28 +60,28 @@ public class EncasedBeltBlock extends RotatedPillarKineticBlock { Axis placedAxis = context.getNearestLookingDirection() .getAxis(); Axis axis = context.getPlayer() != null && context.getPlayer() - .isSneaking() ? placedAxis : getPreferredAxis(context); + .isShiftKeyDown() ? placedAxis : getPreferredAxis(context); if (axis == null) axis = placedAxis; - BlockState state = getDefaultState().with(AXIS, axis); + BlockState state = defaultBlockState().setValue(AXIS, axis); for (Direction facing : Iterate.directions) { if (facing.getAxis() == axis) continue; - BlockPos pos = context.getPos(); - BlockPos offset = pos.offset(facing); - state = updatePostPlacement(state, facing, context.getWorld() - .getBlockState(offset), context.getWorld(), pos, offset); + BlockPos pos = context.getClickedPos(); + BlockPos offset = pos.relative(facing); + state = updateShape(state, facing, context.getLevel() + .getBlockState(offset), context.getLevel(), pos, offset); } return state; } @Override - public BlockState updatePostPlacement(BlockState stateIn, Direction face, BlockState neighbour, IWorld worldIn, + public BlockState updateShape(BlockState stateIn, Direction face, BlockState neighbour, IWorld worldIn, BlockPos currentPos, BlockPos facingPos) { - Part part = stateIn.get(PART); - Axis axis = stateIn.get(AXIS); - boolean connectionAlongFirst = stateIn.get(CONNECTED_ALONG_FIRST_COORDINATE); + Part part = stateIn.getValue(PART); + Axis axis = stateIn.getValue(AXIS); + boolean connectionAlongFirst = stateIn.getValue(CONNECTED_ALONG_FIRST_COORDINATE); Axis connectionAxis = connectionAlongFirst ? (axis == Axis.X ? Axis.Y : Axis.X) : (axis == Axis.Z ? Axis.Y : Axis.Z); @@ -94,19 +96,19 @@ public class EncasedBeltBlock extends RotatedPillarKineticBlock { if (facingAlongFirst != connectionAlongFirst || part == Part.NONE) return stateIn; if (part == Part.MIDDLE) - return stateIn.with(PART, positive ? Part.END : Part.START); + return stateIn.setValue(PART, positive ? Part.END : Part.START); if ((part == Part.START) == positive) - return stateIn.with(PART, Part.NONE); + return stateIn.setValue(PART, Part.NONE); return stateIn; } - Part otherPart = neighbour.get(PART); - Axis otherAxis = neighbour.get(AXIS); - boolean otherConnection = neighbour.get(CONNECTED_ALONG_FIRST_COORDINATE); + Part otherPart = neighbour.getValue(PART); + Axis otherAxis = neighbour.getValue(AXIS); + boolean otherConnection = neighbour.getValue(CONNECTED_ALONG_FIRST_COORDINATE); Axis otherConnectionAxis = otherConnection ? (otherAxis == Axis.X ? Axis.Y : Axis.X) : (otherAxis == Axis.Z ? Axis.Y : Axis.Z); - if (neighbour.get(AXIS) == faceAxis) + if (neighbour.getValue(AXIS) == faceAxis) return stateIn; if (otherPart != Part.NONE && otherConnectionAxis != faceAxis) return stateIn; @@ -121,34 +123,34 @@ public class EncasedBeltBlock extends RotatedPillarKineticBlock { if ((part == Part.START) != positive) part = Part.MIDDLE; - return stateIn.with(PART, part) - .with(CONNECTED_ALONG_FIRST_COORDINATE, connectionAlongFirst); + return stateIn.setValue(PART, part) + .setValue(CONNECTED_ALONG_FIRST_COORDINATE, connectionAlongFirst); } @Override public BlockState getRotatedBlockState(BlockState originalState, Direction targetedFace) { - if (originalState.get(PART) == Part.NONE) + if (originalState.getValue(PART) == Part.NONE) return super.getRotatedBlockState(originalState, targetedFace); return super.getRotatedBlockState(originalState, - Direction.getFacingFromAxis(AxisDirection.POSITIVE, getConnectionAxis(originalState))); + Direction.get(AxisDirection.POSITIVE, getConnectionAxis(originalState))); } @Override public BlockState updateAfterWrenched(BlockState newState, ItemUseContext context) { // Blocks.AIR.getDefaultState() // .updateNeighbors(context.getWorld(), context.getPos(), 1); - Axis axis = newState.get(AXIS); - newState = getDefaultState().with(AXIS, axis); - if (newState.contains(BlockStateProperties.POWERED)) - newState = newState.with(BlockStateProperties.POWERED, context.getWorld() - .isBlockPowered(context.getPos())); + Axis axis = newState.getValue(AXIS); + newState = defaultBlockState().setValue(AXIS, axis); + if (newState.hasProperty(BlockStateProperties.POWERED)) + newState = newState.setValue(BlockStateProperties.POWERED, context.getLevel() + .hasNeighborSignal(context.getClickedPos())); for (Direction facing : Iterate.directions) { if (facing.getAxis() == axis) continue; - BlockPos pos = context.getPos(); - BlockPos offset = pos.offset(facing); - newState = updatePostPlacement(newState, facing, context.getWorld() - .getBlockState(offset), context.getWorld(), pos, offset); + BlockPos pos = context.getClickedPos(); + BlockPos offset = pos.relative(facing); + newState = updateShape(newState, facing, context.getLevel() + .getBlockState(offset), context.getLevel(), pos, offset); } // newState.updateNeighbors(context.getWorld(), context.getPos(), 1 | 2); return newState; @@ -156,16 +158,16 @@ public class EncasedBeltBlock extends RotatedPillarKineticBlock { @Override public boolean hasShaftTowards(IWorldReader world, BlockPos pos, BlockState state, Direction face) { - return face.getAxis() == state.get(AXIS); + return face.getAxis() == state.getValue(AXIS); } @Override public Axis getRotationAxis(BlockState state) { - return state.get(AXIS); + return state.getValue(AXIS); } public static boolean areBlocksConnected(BlockState state, BlockState other, Direction facing) { - Part part = state.get(PART); + Part part = state.getValue(PART); Axis connectionAxis = getConnectionAxis(state); Axis otherConnectionAxis = getConnectionAxis(other); @@ -182,8 +184,8 @@ public class EncasedBeltBlock extends RotatedPillarKineticBlock { } protected static Axis getConnectionAxis(BlockState state) { - Axis axis = state.get(AXIS); - boolean connectionAlongFirst = state.get(CONNECTED_ALONG_FIRST_COORDINATE); + Axis axis = state.getValue(AXIS); + boolean connectionAlongFirst = state.getValue(CONNECTED_ALONG_FIRST_COORDINATE); Axis connectionAxis = connectionAlongFirst ? (axis == Axis.X ? Axis.Y : Axis.X) : (axis == Axis.Z ? Axis.Y : Axis.Z); return connectionAxis; @@ -208,7 +210,7 @@ public class EncasedBeltBlock extends RotatedPillarKineticBlock { START, MIDDLE, END, NONE; @Override - public String getString() { + public String getSerializedName() { return Lang.asId(name()); } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/encased/EncasedBeltGenerator.java b/src/main/java/com/simibubi/create/content/contraptions/relays/encased/EncasedBeltGenerator.java index 5ef334001..0e75bbb16 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/encased/EncasedBeltGenerator.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/encased/EncasedBeltGenerator.java @@ -22,9 +22,9 @@ public class EncasedBeltGenerator extends SpecialBlockStateGen { @Override protected int getXRotation(BlockState state) { - EncasedBeltBlock.Part part = state.get(EncasedBeltBlock.PART); - boolean connectedAlongFirst = state.get(EncasedBeltBlock.CONNECTED_ALONG_FIRST_COORDINATE); - Axis axis = state.get(EncasedBeltBlock.AXIS); + EncasedBeltBlock.Part part = state.getValue(EncasedBeltBlock.PART); + boolean connectedAlongFirst = state.getValue(EncasedBeltBlock.CONNECTED_ALONG_FIRST_COORDINATE); + Axis axis = state.getValue(EncasedBeltBlock.AXIS); if (part == Part.NONE) return axis == Axis.Y ? 90 : 0; @@ -37,9 +37,9 @@ public class EncasedBeltGenerator extends SpecialBlockStateGen { @Override protected int getYRotation(BlockState state) { - EncasedBeltBlock.Part part = state.get(EncasedBeltBlock.PART); - boolean connectedAlongFirst = state.get(EncasedBeltBlock.CONNECTED_ALONG_FIRST_COORDINATE); - Axis axis = state.get(EncasedBeltBlock.AXIS); + EncasedBeltBlock.Part part = state.getValue(EncasedBeltBlock.PART); + boolean connectedAlongFirst = state.getValue(EncasedBeltBlock.CONNECTED_ALONG_FIRST_COORDINATE); + Axis axis = state.getValue(EncasedBeltBlock.AXIS); if (part == Part.NONE) return axis == Axis.X ? 90 : 0; @@ -58,8 +58,8 @@ public class EncasedBeltGenerator extends SpecialBlockStateGen { } protected String getModelSuffix(BlockState state) { - EncasedBeltBlock.Part part = state.get(EncasedBeltBlock.PART); - Axis axis = state.get(EncasedBeltBlock.AXIS); + EncasedBeltBlock.Part part = state.getValue(EncasedBeltBlock.PART); + Axis axis = state.getValue(EncasedBeltBlock.AXIS); if (part == Part.NONE) return "single"; diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/encased/EncasedShaftBlock.java b/src/main/java/com/simibubi/create/content/contraptions/relays/encased/EncasedShaftBlock.java index 09e6749a7..f4a3ed011 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/encased/EncasedShaftBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/encased/EncasedShaftBlock.java @@ -15,6 +15,8 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.util.ActionResultType; import net.minecraft.world.IBlockReader; +import net.minecraft.block.AbstractBlock.Properties; + public class EncasedShaftBlock extends AbstractEncasedShaftBlock implements ISpecialBlockItemRequirement { private BlockEntry casing; @@ -43,10 +45,10 @@ public class EncasedShaftBlock extends AbstractEncasedShaftBlock implements ISpe @Override public ActionResultType onSneakWrenched(BlockState state, ItemUseContext context) { - if (context.getWorld().isRemote) + if (context.getLevel().isClientSide) return ActionResultType.SUCCESS; - context.getWorld().playEvent(2001, context.getPos(), Block.getStateId(state)); - KineticTileEntity.switchToBlockState(context.getWorld(), context.getPos(), AllBlocks.SHAFT.getDefaultState().with(AXIS, state.get(AXIS))); + context.getLevel().levelEvent(2001, context.getClickedPos(), Block.getId(state)); + KineticTileEntity.switchToBlockState(context.getLevel(), context.getClickedPos(), AllBlocks.SHAFT.getDefaultState().setValue(AXIS, state.getValue(AXIS))); return ActionResultType.SUCCESS; } diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/encased/GearshiftBlock.java b/src/main/java/com/simibubi/create/content/contraptions/relays/encased/GearshiftBlock.java index 9e381f491..c907cbbd0 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/encased/GearshiftBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/encased/GearshiftBlock.java @@ -21,13 +21,15 @@ import net.minecraft.world.TickPriority; import net.minecraft.world.World; import net.minecraft.world.server.ServerWorld; +import net.minecraft.block.AbstractBlock.Properties; + public class GearshiftBlock extends AbstractEncasedShaftBlock implements ITE { public static final BooleanProperty POWERED = BlockStateProperties.POWERED; public GearshiftBlock(Properties properties) { super(properties); - setDefaultState(getDefaultState().with(POWERED, false)); + registerDefaultState(defaultBlockState().setValue(POWERED, false)); } @Override @@ -36,27 +38,27 @@ public class GearshiftBlock extends AbstractEncasedShaftBlock implements ITE builder) { + protected void createBlockStateDefinition(Builder builder) { builder.add(POWERED); - super.fillStateContainer(builder); + super.createBlockStateDefinition(builder); } @Override public BlockState getStateForPlacement(BlockItemUseContext context) { - return super.getStateForPlacement(context).with(POWERED, - context.getWorld().isBlockPowered(context.getPos())); + return super.getStateForPlacement(context).setValue(POWERED, + context.getLevel().hasNeighborSignal(context.getClickedPos())); } @Override public void neighborChanged(BlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos, boolean isMoving) { - if (worldIn.isRemote) + if (worldIn.isClientSide) return; - boolean previouslyPowered = state.get(POWERED); - if (previouslyPowered != worldIn.isBlockPowered(pos)) { + boolean previouslyPowered = state.getValue(POWERED); + if (previouslyPowered != worldIn.hasNeighborSignal(pos)) { detachKinetics(worldIn, pos, true); - worldIn.setBlockState(pos, state.cycle(POWERED), 2); + worldIn.setBlock(pos, state.cycle(POWERED), 2); } } @@ -66,19 +68,19 @@ public class GearshiftBlock extends AbstractEncasedShaftBlock implements ITE 1 ? 4 : 1; if (particleCount == 1 && rand.nextFloat() > 1 / 4f) @@ -163,7 +165,7 @@ public class GaugeBlock extends DirectionalAxisKineticBlock { for (int i = 0; i < particleCount; i++) { Vector3d mul = VecHelper.offsetRandomly(Vector3d.ZERO, rand, .25f) - .mul(new Vector3d(1, 1, 1).subtract(positiveFaceVec)) + .multiply(new Vector3d(1, 1, 1).subtract(positiveFaceVec)) .normalize() .scale(.3f); Vector3d offset = VecHelper.getCenterOf(pos) @@ -179,17 +181,17 @@ public class GaugeBlock extends DirectionalAxisKineticBlock { @Override public VoxelShape getShape(BlockState state, IBlockReader worldIn, BlockPos pos, ISelectionContext context) { - return GAUGE.get(state.get(FACING), state.get(AXIS_ALONG_FIRST_COORDINATE)); + return GAUGE.get(state.getValue(FACING), state.getValue(AXIS_ALONG_FIRST_COORDINATE)); } @Override - public boolean hasComparatorInputOverride(BlockState state) { + public boolean hasAnalogOutputSignal(BlockState state) { return true; } @Override - public int getComparatorInputOverride(BlockState blockState, World worldIn, BlockPos pos) { - TileEntity te = worldIn.getTileEntity(pos); + public int getAnalogOutputSignal(BlockState blockState, World worldIn, BlockPos pos) { + TileEntity te = worldIn.getBlockEntity(pos); if (te instanceof GaugeTileEntity) { GaugeTileEntity gaugeTileEntity = (GaugeTileEntity) te; return MathHelper.ceil(MathHelper.clamp(gaugeTileEntity.dialTarget * 14, 0, 15)); @@ -198,7 +200,7 @@ public class GaugeBlock extends DirectionalAxisKineticBlock { } @Override - public boolean allowsMovement(BlockState state, IBlockReader reader, BlockPos pos, PathType type) { + public boolean isPathfindable(BlockState state, IBlockReader reader, BlockPos pos, PathType type) { return false; } } 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 de3a27ed8..b19d48f37 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 @@ -61,7 +61,7 @@ public abstract class GaugeInstance extends ShaftInstance implements IDynamicIns public void beginFrame() { GaugeTileEntity gaugeTile = (GaugeTileEntity) tile; - if (MathHelper.epsilonEquals(gaugeTile.prevDialState, gaugeTile.dialState)) + if (MathHelper.equal(gaugeTile.prevDialState, gaugeTile.dialState)) return; float progress = MathHelper.lerp(AnimationTickHolder.getPartialTicks(), gaugeTile.prevDialState, gaugeTile.dialState); @@ -102,7 +102,7 @@ public abstract class GaugeInstance extends ShaftInstance implements IDynamicIns private void setupTransform(MatrixStacker msr, float progress) { float dialPivot = 5.75f / 16; - ms.push(); + ms.pushPose(); rotateToFace(msr); getSecond().setTransform(ms); @@ -113,13 +113,13 @@ public abstract class GaugeInstance extends ShaftInstance implements IDynamicIns getFirst().setTransform(ms); - ms.pop(); + ms.popPose(); } private void updateTransform(MatrixStacker msr, float progress) { float dialPivot = 5.75f / 16; - ms.push(); + ms.pushPose(); rotateToFace(msr) .translate(0, dialPivot, dialPivot) @@ -128,12 +128,12 @@ public abstract class GaugeInstance extends ShaftInstance implements IDynamicIns getFirst().setTransform(ms); - ms.pop(); + ms.popPose(); } protected MatrixStacker rotateToFace(MatrixStacker msr) { return msr.centre() - .rotate(Direction.UP, (float) ((-face.getHorizontalAngle() - 90) / 180 * Math.PI)) + .rotate(Direction.UP, (float) ((-face.toYRot() - 90) / 180 * Math.PI)) .unCentre(); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/gauge/GaugeRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/relays/gauge/GaugeRenderer.java index 442cb9bdf..182c75728 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/gauge/GaugeRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/gauge/GaugeRenderer.java @@ -40,12 +40,12 @@ public class GaugeRenderer extends KineticTileEntityRenderer { @Override protected void renderSafe(KineticTileEntity te, float partialTicks, MatrixStack ms, IRenderTypeBuffer buffer, int light, int overlay) { - if (Backend.getInstance().canUseInstancing(te.getWorld())) return; + if (Backend.getInstance().canUseInstancing(te.getLevel())) return; super.renderSafe(te, partialTicks, ms, buffer, light, overlay); BlockState gaugeState = te.getBlockState(); GaugeTileEntity gaugeTE = (GaugeTileEntity) te; - int lightCoords = WorldRenderer.getLightmapCoordinates(te.getWorld(), gaugeState, te.getPos()); + int lightCoords = WorldRenderer.getLightColor(te.getLevel(), gaugeState, te.getBlockPos()); PartialModel partialModel = (type == Type.SPEED ? AllBlockPartials.GAUGE_HEAD_SPEED : AllBlockPartials.GAUGE_HEAD_STRESS); SuperByteBuffer headBuffer = @@ -56,11 +56,11 @@ public class GaugeRenderer extends KineticTileEntityRenderer { float progress = MathHelper.lerp(partialTicks, gaugeTE.prevDialState, gaugeTE.dialState); for (Direction facing : Iterate.directions) { - if (!((GaugeBlock) gaugeState.getBlock()).shouldRenderHeadOnFace(te.getWorld(), te.getPos(), gaugeState, + if (!((GaugeBlock) gaugeState.getBlock()).shouldRenderHeadOnFace(te.getLevel(), te.getBlockPos(), gaugeState, facing)) continue; - IVertexBuilder vb = buffer.getBuffer(RenderType.getSolid()); + IVertexBuilder vb = buffer.getBuffer(RenderType.solid()); rotateBufferTowards(dialBuffer, facing).translate(0, dialPivot, dialPivot) .rotate(Direction.EAST, (float) (Math.PI / 2 * -progress)) .translate(0, -dialPivot, -dialPivot) @@ -78,7 +78,7 @@ public class GaugeRenderer extends KineticTileEntityRenderer { } protected SuperByteBuffer rotateBufferTowards(SuperByteBuffer buffer, Direction target) { - return buffer.rotateCentered(Direction.UP, (float) ((-target.getHorizontalAngle() - 90) / 180 * Math.PI)); + return buffer.rotateCentered(Direction.UP, (float) ((-target.toYRot() - 90) / 180 * Math.PI)); } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/gauge/GaugeTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/relays/gauge/GaugeTileEntity.java index 1a1c4a8b2..dfe96cf3c 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/gauge/GaugeTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/gauge/GaugeTileEntity.java @@ -41,13 +41,13 @@ public class GaugeTileEntity extends KineticTileEntity implements IHaveGoggleInf super.tick(); prevDialState = dialState; dialState += (dialTarget - dialState) * .125f; - if (dialState > 1 && world.rand.nextFloat() < 1 / 2f) - dialState -= (dialState - 1) * world.rand.nextFloat(); + if (dialState > 1 && level.random.nextFloat() < 1 / 2f) + dialState -= (dialState - 1) * level.random.nextFloat(); } @Override public boolean addToGoggleTooltip(List tooltip, boolean isPlayerSneaking) { - tooltip.add(componentSpacing.copy().append(Lang.translate("gui.gauge.info_header"))); + tooltip.add(componentSpacing.plainCopy().append(Lang.translate("gui.gauge.info_header"))); return true; } diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/gauge/SpeedGaugeTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/relays/gauge/SpeedGaugeTileEntity.java index 1bdb7b191..391949d6e 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/gauge/SpeedGaugeTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/gauge/SpeedGaugeTileEntity.java @@ -29,10 +29,10 @@ public class SpeedGaugeTileEntity extends GaugeTileEntity { : ColorHelper.mixColors(SpeedLevel.of(speed) .getColor(), 0xffffff, .25f); if (speed == 69) - AllTriggers.triggerForNearbyPlayers(AllTriggers.SPEED_READ, world, pos, 6, GogglesItem::canSeeParticles); + AllTriggers.triggerForNearbyPlayers(AllTriggers.SPEED_READ, level, worldPosition, 6, GogglesItem::canSeeParticles); dialTarget = getDialTarget(speed); - markDirty(); + setChanged(); } public static float getDialTarget(float speed) { @@ -59,8 +59,8 @@ public class SpeedGaugeTileEntity extends GaugeTileEntity { public boolean addToGoggleTooltip(List tooltip, boolean isPlayerSneaking) { super.addToGoggleTooltip(tooltip, isPlayerSneaking); - tooltip.add(componentSpacing.copy().append(Lang.translate("gui.speedometer.title").formatted(TextFormatting.GRAY))); - tooltip.add(componentSpacing.copy().append(SpeedLevel.getFormattedSpeedText(speed, isOverStressed()))); + tooltip.add(componentSpacing.plainCopy().append(Lang.translate("gui.speedometer.title").withStyle(TextFormatting.GRAY))); + tooltip.add(componentSpacing.plainCopy().append(SpeedLevel.getFormattedSpeedText(speed, isOverStressed()))); return true; } diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/gauge/StressGaugeTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/relays/gauge/StressGaugeTileEntity.java index 470522dff..1ea44cb46 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/gauge/StressGaugeTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/gauge/StressGaugeTileEntity.java @@ -43,7 +43,7 @@ public class StressGaugeTileEntity extends GaugeTileEntity { } sendData(); - markDirty(); + setChanged(); } @Override @@ -51,7 +51,7 @@ public class StressGaugeTileEntity extends GaugeTileEntity { super.onSpeedChanged(prevSpeed); if (getSpeed() == 0) { dialTarget = 0; - markDirty(); + setChanged(); return; } @@ -68,30 +68,30 @@ public class StressGaugeTileEntity extends GaugeTileEntity { double capacity = getNetworkCapacity(); double stressFraction = getNetworkStress() / (capacity == 0 ? 1 : capacity); - tooltip.add(componentSpacing.copy().append(Lang.translate("gui.stressometer.title").formatted(TextFormatting.GRAY))); + tooltip.add(componentSpacing.plainCopy().append(Lang.translate("gui.stressometer.title").withStyle(TextFormatting.GRAY))); if (getTheoreticalSpeed() == 0) - tooltip.add(new StringTextComponent(spacing + ItemDescription.makeProgressBar(3, -1)).append(Lang.translate("gui.stressometer.no_rotation")).formatted(TextFormatting.DARK_GRAY)); + tooltip.add(new StringTextComponent(spacing + ItemDescription.makeProgressBar(3, -1)).append(Lang.translate("gui.stressometer.no_rotation")).withStyle(TextFormatting.DARK_GRAY)); // tooltip.add(new StringTextComponent(TextFormatting.DARK_GRAY + ItemDescription.makeProgressBar(3, -1) // + Lang.translate("gui.stressometer.no_rotation"))); else { - tooltip.add(componentSpacing.copy().append(StressImpact.getFormattedStressText(stressFraction))); + tooltip.add(componentSpacing.plainCopy().append(StressImpact.getFormattedStressText(stressFraction))); - tooltip.add(componentSpacing.copy().append(Lang.translate("gui.stressometer.capacity").formatted(TextFormatting.GRAY))); + tooltip.add(componentSpacing.plainCopy().append(Lang.translate("gui.stressometer.capacity").withStyle(TextFormatting.GRAY))); double remainingCapacity = capacity - getNetworkStress(); ITextComponent su = Lang.translate("generic.unit.stress"); - IFormattableTextComponent stressTooltip = componentSpacing.copy() + IFormattableTextComponent stressTooltip = componentSpacing.plainCopy() .append(new StringTextComponent(" " + IHaveGoggleInformation.format(remainingCapacity)) - .append(su.copy()) - .formatted(StressImpact.of(stressFraction).getRelativeColor())); + .append(su.plainCopy()) + .withStyle(StressImpact.of(stressFraction).getRelativeColor())); if (remainingCapacity != capacity) { stressTooltip - .append(new StringTextComponent(" / ").formatted(TextFormatting.GRAY)) + .append(new StringTextComponent(" / ").withStyle(TextFormatting.GRAY)) .append(new StringTextComponent(IHaveGoggleInformation.format(capacity)) - .append(su.copy()) - .formatted(TextFormatting.DARK_GRAY)); + .append(su.plainCopy()) + .withStyle(TextFormatting.DARK_GRAY)); } tooltip.add(stressTooltip); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/gearbox/GearboxBlock.java b/src/main/java/com/simibubi/create/content/contraptions/relays/gearbox/GearboxBlock.java index bb867e1a0..bf75f70ed 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/gearbox/GearboxBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/gearbox/GearboxBlock.java @@ -23,6 +23,8 @@ import net.minecraft.util.math.RayTraceResult; import net.minecraft.world.IBlockReader; import net.minecraft.world.IWorldReader; +import net.minecraft.block.AbstractBlock.Properties; + public class GearboxBlock extends RotatedPillarKineticBlock { public GearboxBlock(Properties properties) { @@ -35,20 +37,20 @@ public class GearboxBlock extends RotatedPillarKineticBlock { } @Override - public PushReaction getPushReaction(BlockState state) { + public PushReaction getPistonPushReaction(BlockState state) { return PushReaction.PUSH_ONLY; } @Override - public void fillItemGroup(ItemGroup group, NonNullList items) { - super.fillItemGroup(group, items); + public void fillItemCategory(ItemGroup group, NonNullList items) { + super.fillItemCategory(group, items); items.add(AllItems.VERTICAL_GEARBOX.asStack()); } @SuppressWarnings("deprecation") @Override public List getDrops(BlockState state, Builder builder) { - if (state.get(AXIS).isVertical()) + if (state.getValue(AXIS).isVertical()) return super.getDrops(state, builder); return Arrays.asList(new ItemStack(AllItems.VERTICAL_GEARBOX.get())); } @@ -56,25 +58,25 @@ public class GearboxBlock extends RotatedPillarKineticBlock { @Override public ItemStack getPickBlock(BlockState state, RayTraceResult target, IBlockReader world, BlockPos pos, PlayerEntity player) { - if (state.get(AXIS).isVertical()) + if (state.getValue(AXIS).isVertical()) return super.getPickBlock(state, target, world, pos, player); return new ItemStack(AllItems.VERTICAL_GEARBOX.get()); } @Override public BlockState getStateForPlacement(BlockItemUseContext context) { - return getDefaultState().with(AXIS, Axis.Y); + return defaultBlockState().setValue(AXIS, Axis.Y); } // IRotate: @Override public boolean hasShaftTowards(IWorldReader world, BlockPos pos, BlockState state, Direction face) { - return face.getAxis() != state.get(AXIS); + return face.getAxis() != state.getValue(AXIS); } @Override public Axis getRotationAxis(BlockState state) { - return state.get(AXIS); + return state.getValue(AXIS); } } 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 fc795f92e..35e266927 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 @@ -27,10 +27,10 @@ public class GearboxInstance extends KineticTileInstance { keys = new EnumMap<>(Direction.class); - final Direction.Axis boxAxis = blockState.get(BlockStateProperties.AXIS); + final Direction.Axis boxAxis = blockState.getValue(BlockStateProperties.AXIS); - int blockLight = world.getLightLevel(LightType.BLOCK, pos); - int skyLight = world.getLightLevel(LightType.SKY, pos); + int blockLight = world.getBrightness(LightType.BLOCK, pos); + int skyLight = world.getBrightness(LightType.SKY, pos); updateSourceFacing(); InstanceMaterial rotatingMaterial = getRotatingMaterial(); @@ -44,7 +44,7 @@ public class GearboxInstance extends KineticTileInstance { RotatingData key = shaft.createInstance(); - key.setRotationAxis(Direction.getFacingFromAxis(Direction.AxisDirection.POSITIVE, axis).getUnitVector()) + key.setRotationAxis(Direction.get(Direction.AxisDirection.POSITIVE, axis).step()) .setRotationalSpeed(getSpeed(direction)) .setRotationOffset(getRotationOffset(axis)).setColor(tile) .setPosition(getInstancePosition()) @@ -70,7 +70,7 @@ public class GearboxInstance extends KineticTileInstance { protected void updateSourceFacing() { if (tile.hasSource()) { BlockPos source = tile.source.subtract(pos); - sourceFacing = Direction.getFacingFromVector(source.getX(), source.getY(), source.getZ()); + sourceFacing = Direction.getNearest(source.getX(), source.getY(), source.getZ()); } else { sourceFacing = null; } diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/gearbox/GearboxRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/relays/gearbox/GearboxRenderer.java index 0c9313b2f..2bd534af4 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/gearbox/GearboxRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/gearbox/GearboxRenderer.java @@ -27,11 +27,11 @@ public class GearboxRenderer extends KineticTileEntityRenderer { @Override protected void renderSafe(KineticTileEntity te, float partialTicks, MatrixStack ms, IRenderTypeBuffer buffer, int light, int overlay) { - if (Backend.getInstance().canUseInstancing(te.getWorld())) return; + if (Backend.getInstance().canUseInstancing(te.getLevel())) return; - final Axis boxAxis = te.getBlockState().get(BlockStateProperties.AXIS); - final BlockPos pos = te.getPos(); - float time = AnimationTickHolder.getRenderTime(te.getWorld()); + final Axis boxAxis = te.getBlockState().getValue(BlockStateProperties.AXIS); + final BlockPos pos = te.getBlockPos(); + float time = AnimationTickHolder.getRenderTime(te.getLevel()); for (Direction direction : Iterate.directions) { final Axis axis = direction.getAxis(); @@ -43,8 +43,8 @@ public class GearboxRenderer extends KineticTileEntityRenderer { float angle = (time * te.getSpeed() * 3f / 10) % 360; if (te.getSpeed() != 0 && te.hasSource()) { - BlockPos source = te.source.subtract(te.getPos()); - Direction sourceFacing = Direction.getFacingFromVector(source.getX(), source.getY(), source.getZ()); + BlockPos source = te.source.subtract(te.getBlockPos()); + Direction sourceFacing = Direction.getNearest(source.getX(), source.getY(), source.getZ()); if (sourceFacing.getAxis() == direction.getAxis()) angle *= sourceFacing == direction ? 1 : -1; else if (sourceFacing.getAxisDirection() == direction.getAxisDirection()) @@ -55,7 +55,7 @@ public class GearboxRenderer extends KineticTileEntityRenderer { angle = angle / 180f * (float) Math.PI; kineticRotationTransform(shaft, te, axis, angle, light); - shaft.renderInto(ms, buffer.getBuffer(RenderType.getSolid())); + shaft.renderInto(ms, buffer.getBuffer(RenderType.solid())); } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/gearbox/GearshiftTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/relays/gearbox/GearshiftTileEntity.java index a819022c1..2e4b6cf62 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/gearbox/GearshiftTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/gearbox/GearshiftTileEntity.java @@ -15,7 +15,7 @@ public class GearshiftTileEntity extends SplitShaftTileEntity { @Override public float getRotationSpeedModifier(Direction face) { if (hasSource()) { - if (face != getSourceFacing() && getBlockState().get(BlockStateProperties.POWERED)) + if (face != getSourceFacing() && getBlockState().getValue(BlockStateProperties.POWERED)) return -1; } return 1; diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/gearbox/VerticalGearboxItem.java b/src/main/java/com/simibubi/create/content/contraptions/relays/gearbox/VerticalGearboxItem.java index 153b85154..5fea417ea 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/gearbox/VerticalGearboxItem.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/gearbox/VerticalGearboxItem.java @@ -20,6 +20,8 @@ import net.minecraft.util.NonNullList; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; +import net.minecraft.item.Item.Properties; + public class VerticalGearboxItem extends BlockItem { public VerticalGearboxItem(Properties builder) { @@ -27,25 +29,25 @@ public class VerticalGearboxItem extends BlockItem { } @Override - public void fillItemGroup(ItemGroup p_150895_1_, NonNullList p_150895_2_) { + public void fillItemCategory(ItemGroup p_150895_1_, NonNullList p_150895_2_) { } @Override - public String getTranslationKey() { + public String getDescriptionId() { return "item.create.vertical_gearbox"; } @Override - public void addToBlockToItemMap(Map p_195946_1_, Item p_195946_2_) { + public void registerBlocks(Map p_195946_1_, Item p_195946_2_) { } @Override - protected boolean onBlockPlaced(BlockPos pos, World world, PlayerEntity player, ItemStack stack, BlockState state) { + protected boolean updateCustomBlockEntityTag(BlockPos pos, World world, PlayerEntity player, ItemStack stack, BlockState state) { Axis prefferedAxis = null; for (Direction side : Iterate.horizontalDirections) { - BlockState blockState = world.getBlockState(pos.offset(side)); + BlockState blockState = world.getBlockState(pos.relative(side)); if (blockState.getBlock() instanceof IRotate) { - if (((IRotate) blockState.getBlock()).hasShaftTowards(world, pos.offset(side), blockState, + if (((IRotate) blockState.getBlock()).hasShaftTowards(world, pos.relative(side), blockState, side.getOpposite())) if (prefferedAxis != null && prefferedAxis != side.getAxis()) { prefferedAxis = null; @@ -56,11 +58,11 @@ public class VerticalGearboxItem extends BlockItem { } } - Axis axis = prefferedAxis == null ? player.getHorizontalFacing() - .rotateY() + Axis axis = prefferedAxis == null ? player.getDirection() + .getClockWise() .getAxis() : prefferedAxis == Axis.X ? Axis.Z : Axis.X; - world.setBlockState(pos, state.with(BlockStateProperties.AXIS, axis)); - return super.onBlockPlaced(pos, world, player, stack, state); + world.setBlockAndUpdate(pos, state.setValue(BlockStateProperties.AXIS, axis)); + return super.updateCustomBlockEntityTag(pos, world, player, stack, state); } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/wrench/IWrenchable.java b/src/main/java/com/simibubi/create/content/contraptions/wrench/IWrenchable.java index 68b5365a5..7c6102815 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/wrench/IWrenchable.java +++ b/src/main/java/com/simibubi/create/content/contraptions/wrench/IWrenchable.java @@ -27,43 +27,43 @@ import net.minecraft.world.server.ServerWorld; public interface IWrenchable { default ActionResultType onWrenched(BlockState state, ItemUseContext context) { - World world = context.getWorld(); - BlockState rotated = getRotatedBlockState(state, context.getFace()); - if (!rotated.isValidPosition(world, context.getPos())) + World world = context.getLevel(); + BlockState rotated = getRotatedBlockState(state, context.getClickedFace()); + if (!rotated.canSurvive(world, context.getClickedPos())) return ActionResultType.PASS; - KineticTileEntity.switchToBlockState(world, context.getPos(), updateAfterWrenched(rotated, context)); + KineticTileEntity.switchToBlockState(world, context.getClickedPos(), updateAfterWrenched(rotated, context)); - TileEntity te = context.getWorld() - .getTileEntity(context.getPos()); + TileEntity te = context.getLevel() + .getBlockEntity(context.getClickedPos()); if (te != null) - te.updateContainingBlockInfo(); + te.clearCache(); if (te instanceof GeneratingKineticTileEntity) { ((GeneratingKineticTileEntity) te).reActivateSource = true; } - if (world.getBlockState(context.getPos()) != state) - playRotateSound(world, context.getPos()); + if (world.getBlockState(context.getClickedPos()) != state) + playRotateSound(world, context.getClickedPos()); return ActionResultType.SUCCESS; } default BlockState updateAfterWrenched(BlockState newState, ItemUseContext context) { // return newState; - return Block.getValidBlockForPosition(newState, context.getWorld(), context.getPos()); + return Block.updateFromNeighbourShapes(newState, context.getLevel(), context.getClickedPos()); } default ActionResultType onSneakWrenched(BlockState state, ItemUseContext context) { - World world = context.getWorld(); - BlockPos pos = context.getPos(); + World world = context.getLevel(); + BlockPos pos = context.getClickedPos(); PlayerEntity player = context.getPlayer(); if (world instanceof ServerWorld) { if (player != null && !player.isCreative()) - Block.getDrops(state, (ServerWorld) world, pos, world.getTileEntity(pos), player, context.getItem()) + Block.getDrops(state, (ServerWorld) world, pos, world.getBlockEntity(pos), player, context.getItemInHand()) .forEach(itemStack -> { player.inventory.placeItemBackInInventory(world, itemStack); }); - state.spawnAdditionalDrops((ServerWorld) world, pos, ItemStack.EMPTY); + state.spawnAfterBreak((ServerWorld) world, pos, ItemStack.EMPTY); world.destroyBlock(pos, false); playRemoveSound(world, pos); } @@ -82,42 +82,42 @@ public interface IWrenchable { BlockState newState = originalState; if (targetedFace.getAxis() == Direction.Axis.Y) { - if (originalState.contains(HorizontalAxisKineticBlock.HORIZONTAL_AXIS)) - return originalState.with(HorizontalAxisKineticBlock.HORIZONTAL_AXIS, DirectionHelper - .rotateAround(VoxelShaper.axisAsFace(originalState.get(HorizontalAxisKineticBlock.HORIZONTAL_AXIS)), + if (originalState.hasProperty(HorizontalAxisKineticBlock.HORIZONTAL_AXIS)) + return originalState.setValue(HorizontalAxisKineticBlock.HORIZONTAL_AXIS, DirectionHelper + .rotateAround(VoxelShaper.axisAsFace(originalState.getValue(HorizontalAxisKineticBlock.HORIZONTAL_AXIS)), targetedFace.getAxis()) .getAxis()); - if (originalState.contains(HorizontalKineticBlock.HORIZONTAL_FACING)) - return originalState.with(HorizontalKineticBlock.HORIZONTAL_FACING, DirectionHelper - .rotateAround(originalState.get(HorizontalKineticBlock.HORIZONTAL_FACING), targetedFace.getAxis())); + if (originalState.hasProperty(HorizontalKineticBlock.HORIZONTAL_FACING)) + return originalState.setValue(HorizontalKineticBlock.HORIZONTAL_FACING, DirectionHelper + .rotateAround(originalState.getValue(HorizontalKineticBlock.HORIZONTAL_FACING), targetedFace.getAxis())); } - if (originalState.contains(RotatedPillarKineticBlock.AXIS)) - return originalState.with(RotatedPillarKineticBlock.AXIS, + if (originalState.hasProperty(RotatedPillarKineticBlock.AXIS)) + return originalState.setValue(RotatedPillarKineticBlock.AXIS, DirectionHelper - .rotateAround(VoxelShaper.axisAsFace(originalState.get(RotatedPillarKineticBlock.AXIS)), + .rotateAround(VoxelShaper.axisAsFace(originalState.getValue(RotatedPillarKineticBlock.AXIS)), targetedFace.getAxis()) .getAxis()); - if (!originalState.contains(DirectionalKineticBlock.FACING)) + if (!originalState.hasProperty(DirectionalKineticBlock.FACING)) return originalState; - Direction stateFacing = originalState.get(DirectionalKineticBlock.FACING); + Direction stateFacing = originalState.getValue(DirectionalKineticBlock.FACING); if (stateFacing.getAxis() .equals(targetedFace.getAxis())) { - if (originalState.contains(DirectionalAxisKineticBlock.AXIS_ALONG_FIRST_COORDINATE)) + if (originalState.hasProperty(DirectionalAxisKineticBlock.AXIS_ALONG_FIRST_COORDINATE)) return originalState.cycle(DirectionalAxisKineticBlock.AXIS_ALONG_FIRST_COORDINATE); else return originalState; } else { do { - newState = newState.with(DirectionalKineticBlock.FACING, - DirectionHelper.rotateAround(newState.get(DirectionalKineticBlock.FACING), targetedFace.getAxis())); + newState = newState.setValue(DirectionalKineticBlock.FACING, + DirectionHelper.rotateAround(newState.getValue(DirectionalKineticBlock.FACING), targetedFace.getAxis())); if (targetedFace.getAxis() == Direction.Axis.Y - && newState.contains(DirectionalAxisKineticBlock.AXIS_ALONG_FIRST_COORDINATE)) + && newState.hasProperty(DirectionalAxisKineticBlock.AXIS_ALONG_FIRST_COORDINATE)) newState = newState.cycle(DirectionalAxisKineticBlock.AXIS_ALONG_FIRST_COORDINATE); - } while (newState.get(DirectionalKineticBlock.FACING) + } while (newState.getValue(DirectionalKineticBlock.FACING) .getAxis() .equals(targetedFace.getAxis())); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/wrench/IWrenchableWithBracket.java b/src/main/java/com/simibubi/create/content/contraptions/wrench/IWrenchableWithBracket.java index e2c79126c..9161d4309 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/wrench/IWrenchableWithBracket.java +++ b/src/main/java/com/simibubi/create/content/contraptions/wrench/IWrenchableWithBracket.java @@ -29,22 +29,22 @@ public interface IWrenchableWithBracket extends IWrenchable { } default boolean tryRemoveBracket(ItemUseContext context) { - World world = context.getWorld(); - BlockPos pos = context.getPos(); + World world = context.getLevel(); + BlockPos pos = context.getClickedPos(); Optional bracket = removeBracket(world, pos, false); BlockState blockState = world.getBlockState(pos); if (bracket.isPresent()) { PlayerEntity player = context.getPlayer(); - if (!world.isRemote && !player.isCreative()) + if (!world.isClientSide && !player.isCreative()) player.inventory.placeItemBackInInventory(world, bracket.get()); - if (!world.isRemote && AllBlocks.FLUID_PIPE.has(blockState)) { + if (!world.isClientSide && AllBlocks.FLUID_PIPE.has(blockState)) { Axis preferred = FluidPropagator.getStraightPipeAxis(blockState); Direction preferredDirection = - preferred == null ? Direction.UP : Direction.getFacingFromAxis(AxisDirection.POSITIVE, preferred); + preferred == null ? Direction.UP : Direction.get(AxisDirection.POSITIVE, preferred); BlockState updated = AllBlocks.FLUID_PIPE.get() .updateBlockState(blockState, preferredDirection, null, world, pos); if (updated != blockState) - world.setBlockState(pos, updated); + world.setBlockAndUpdate(pos, updated); } return true; } diff --git a/src/main/java/com/simibubi/create/content/contraptions/wrench/WrenchItem.java b/src/main/java/com/simibubi/create/content/contraptions/wrench/WrenchItem.java index 190156a87..057738739 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/wrench/WrenchItem.java +++ b/src/main/java/com/simibubi/create/content/contraptions/wrench/WrenchItem.java @@ -22,6 +22,8 @@ import net.minecraft.world.World; import net.minecraft.world.server.ServerWorld; import net.minecraftforge.event.entity.player.AttackEntityEvent; +import net.minecraft.item.Item.Properties; + public class WrenchItem extends Item { public WrenchItem(Properties properties) { @@ -30,23 +32,23 @@ public class WrenchItem extends Item { @Nonnull @Override - public ActionResultType onItemUse(ItemUseContext context) { + public ActionResultType useOn(ItemUseContext context) { PlayerEntity player = context.getPlayer(); - if (player == null || !player.isAllowEdit()) - return super.onItemUse(context); + if (player == null || !player.mayBuild()) + return super.useOn(context); - BlockState state = context.getWorld() - .getBlockState(context.getPos()); + BlockState state = context.getLevel() + .getBlockState(context.getClickedPos()); Block block = state.getBlock(); if (!(block instanceof IWrenchable)) { if (canWrenchPickup(state)) return onItemUseOnOther(context); - return super.onItemUse(context); + return super.useOn(context); } IWrenchable actor = (IWrenchable) block; - if (player.isSneaking()) + if (player.isShiftKeyDown()) return actor.onSneakWrenched(state, context); return actor.onWrenched(state, context); } @@ -57,15 +59,15 @@ public class WrenchItem extends Item { private ActionResultType onItemUseOnOther(ItemUseContext context) { PlayerEntity player = context.getPlayer(); - World world = context.getWorld(); - BlockPos pos = context.getPos(); + World world = context.getLevel(); + BlockPos pos = context.getClickedPos(); BlockState state = world.getBlockState(pos); if (!(world instanceof ServerWorld)) return ActionResultType.SUCCESS; if (player != null && !player.isCreative()) - Block.getDrops(state, (ServerWorld) world, pos, world.getTileEntity(pos), player, context.getItem()) + Block.getDrops(state, (ServerWorld) world, pos, world.getBlockEntity(pos), player, context.getItemInHand()) .forEach(itemStack -> player.inventory.placeItemBackInInventory(world, itemStack)); - state.spawnAdditionalDrops((ServerWorld) world, pos, ItemStack.EMPTY); + state.spawnAfterBreak((ServerWorld) world, pos, ItemStack.EMPTY); world.destroyBlock(pos, false); AllSoundEvents.WRENCH_REMOVE.playOnServer(world, pos, 1, Create.RANDOM.nextFloat() * .5f + .5f); return ActionResultType.SUCCESS; @@ -76,13 +78,13 @@ public class WrenchItem extends Item { if (!(target instanceof AbstractMinecartEntity)) return; PlayerEntity player = event.getPlayer(); - ItemStack heldItem = player.getHeldItemMainhand(); + ItemStack heldItem = player.getMainHandItem(); if (!AllItems.WRENCH.isIn(heldItem)) return; if (player.isCreative()) return; AbstractMinecartEntity minecart = (AbstractMinecartEntity) target; - minecart.attackEntityFrom(DamageSource.causePlayerDamage(player), 100); + minecart.hurt(DamageSource.playerAttack(player), 100); } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/wrench/WrenchItemRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/wrench/WrenchItemRenderer.java index 7b9e15cda..41ae4fec9 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/wrench/WrenchItemRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/wrench/WrenchItemRenderer.java @@ -20,7 +20,7 @@ public class WrenchItemRenderer extends CustomRenderedItemModelRenderer onItemRightClick(World p_77659_1_, PlayerEntity p_77659_2_, Hand p_77659_3_) { - p_77659_2_.setActiveHand(p_77659_3_); - return ActionResult.success(p_77659_2_.getHeldItem(p_77659_3_)); + public ActionResult use(World p_77659_1_, PlayerEntity p_77659_2_, Hand p_77659_3_) { + p_77659_2_.startUsingItem(p_77659_3_); + return ActionResult.success(p_77659_2_.getItemInHand(p_77659_3_)); } } diff --git a/src/main/java/com/simibubi/create/content/curiosities/ChromaticCompoundColor.java b/src/main/java/com/simibubi/create/content/curiosities/ChromaticCompoundColor.java index 60c3e3754..92957ffc5 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/ChromaticCompoundColor.java +++ b/src/main/java/com/simibubi/create/content/curiosities/ChromaticCompoundColor.java @@ -14,7 +14,7 @@ public class ChromaticCompoundColor implements IItemColor { public int getColor(ItemStack stack, int layer) { Minecraft mc = Minecraft.getInstance(); float pt = AnimationTickHolder.getPartialTicks(); - float progress = (float) ((mc.player.getYaw(pt)) / 180 * Math.PI) + (AnimationTickHolder.getRenderTime() / 10f); + float progress = (float) ((mc.player.getViewYRot(pt)) / 180 * Math.PI) + (AnimationTickHolder.getRenderTime() / 10f); if (layer == 0) return ColorHelper.mixColors(0x6e5773, 0x6B3074, ((float) MathHelper.sin(progress) + 1) / 2); if (layer == 1) diff --git a/src/main/java/com/simibubi/create/content/curiosities/ChromaticCompoundItem.java b/src/main/java/com/simibubi/create/content/curiosities/ChromaticCompoundItem.java index 3b7d0ae2d..0c32dbb7a 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/ChromaticCompoundItem.java +++ b/src/main/java/com/simibubi/create/content/curiosities/ChromaticCompoundItem.java @@ -27,6 +27,8 @@ import net.minecraft.util.math.vector.Vector3d; import net.minecraft.world.World; import net.minecraft.world.gen.Heightmap; +import net.minecraft.item.Item.Properties; + public class ChromaticCompoundItem extends Item { public ChromaticCompoundItem(Properties properties) { @@ -34,7 +36,7 @@ public class ChromaticCompoundItem extends Item { } @Override - public boolean shouldSyncTag() { + public boolean shouldOverrideMultiplayerNbt() { return true; } @@ -65,15 +67,15 @@ public class ChromaticCompoundItem extends Item { @Override public boolean onEntityItemUpdate(ItemStack stack, ItemEntity entity) { double y = entity.getY(); - double yMotion = entity.getMotion().y; - World world = entity.world; + double yMotion = entity.getDeltaMovement().y; + World world = entity.level; CompoundNBT data = entity.getPersistentData(); CompoundNBT itemData = entity.getItem() .getOrCreateTag(); - Vector3d positionVec = entity.getPositionVec(); + Vector3d positionVec = entity.position(); CRecipes config = AllConfigs.SERVER.recipes; - if (world.isRemote) { + if (world.isClientSide) { int light = itemData.getInt("CollectingLight"); if (random.nextInt(config.lightSourceCountForRefinedRadiance.get() + 20) < light) { Vector3d start = VecHelper.offsetRandomly(positionVec, random, 3); @@ -100,11 +102,11 @@ public class ChromaticCompoundItem extends Item { if (itemData.getInt("CollectingLight") >= config.lightSourceCountForRefinedRadiance.get()) { ItemStack newStack = AllItems.REFINED_RADIANCE.asStack(); ItemEntity newEntity = new ItemEntity(world, entity.getX(), entity.getY(), entity.getZ(), newStack); - newEntity.setMotion(entity.getMotion()); + newEntity.setDeltaMovement(entity.getDeltaMovement()); newEntity.getPersistentData() .putBoolean("JustCreated", true); itemData.remove("CollectingLight"); - world.addEntity(newEntity); + world.addFreshEntity(newEntity); stack.split(1); entity.setItem(stack); @@ -125,17 +127,17 @@ public class ChromaticCompoundItem extends Item { while (testPos.getY() > 0) { testPos.move(Direction.DOWN); BlockState state = world.getBlockState(testPos); - if (state.getOpacity(world, testPos) >= 15 && state.getBlock() != Blocks.BEDROCK) + if (state.getLightBlock(world, testPos) >= 15 && state.getBlock() != Blocks.BEDROCK) break; if (state.getBlock() == Blocks.BEACON) { - TileEntity te = world.getTileEntity(testPos); + TileEntity te = world.getBlockEntity(testPos); if (!(te instanceof BeaconTileEntity)) break; BeaconTileEntity bte = (BeaconTileEntity) te; - if (bte.getLevels() != 0 && !bte.beamSegments.isEmpty()) + if (bte.getLevels() != 0 && !bte.beamSections.isEmpty()) isOverBeacon = true; break; @@ -151,7 +153,7 @@ public class ChromaticCompoundItem extends Item { } // Find a light source and eat it. - Random r = world.rand; + Random r = world.random; int range = 3; float rate = 1 / 2f; if (r.nextFloat() > rate) @@ -161,15 +163,15 @@ public class ChromaticCompoundItem extends Item { BlockState state = world.getBlockState(randomOffset); if (state.getLightValue(world, randomOffset) == 0) return false; - if (state.getBlockHardness(world, randomOffset) == -1) + if (state.getDestroySpeed(world, randomOffset) == -1) return false; if (state.getBlock() == Blocks.BEACON) return false; RayTraceContext context = new RayTraceContext(positionVec, VecHelper.getCenterOf(randomOffset), BlockMode.COLLIDER, FluidMode.NONE, entity); - if (!randomOffset.equals(world.rayTraceBlocks(context) - .getPos())) + if (!randomOffset.equals(world.clip(context) + .getBlockPos())) return false; world.destroyBlock(randomOffset, false); @@ -178,9 +180,9 @@ public class ChromaticCompoundItem extends Item { newStack.getOrCreateTag() .putInt("CollectingLight", itemData.getInt("CollectingLight") + 1); ItemEntity newEntity = new ItemEntity(world, entity.getX(), entity.getY(), entity.getZ(), newStack); - newEntity.setMotion(entity.getMotion()); - newEntity.setDefaultPickupDelay(); - world.addEntity(newEntity); + newEntity.setDeltaMovement(entity.getDeltaMovement()); + newEntity.setDefaultPickUpDelay(); + world.addFreshEntity(newEntity); entity.lifespan = 6000; if (stack.isEmpty()) entity.remove(); diff --git a/src/main/java/com/simibubi/create/content/curiosities/CombustibleItem.java b/src/main/java/com/simibubi/create/content/curiosities/CombustibleItem.java index a92cb727d..caaed78ae 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/CombustibleItem.java +++ b/src/main/java/com/simibubi/create/content/curiosities/CombustibleItem.java @@ -3,6 +3,8 @@ package com.simibubi.create.content.curiosities; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; +import net.minecraft.item.Item.Properties; + public class CombustibleItem extends Item { private int burnTime = -1; diff --git a/src/main/java/com/simibubi/create/content/curiosities/NoGravMagicalDohickyItem.java b/src/main/java/com/simibubi/create/content/curiosities/NoGravMagicalDohickyItem.java index 2921241d3..0a41070cf 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/NoGravMagicalDohickyItem.java +++ b/src/main/java/com/simibubi/create/content/curiosities/NoGravMagicalDohickyItem.java @@ -11,6 +11,8 @@ import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.vector.Vector3d; import net.minecraft.world.World; +import net.minecraft.item.Item.Properties; + public class NoGravMagicalDohickyItem extends Item { public NoGravMagicalDohickyItem(Properties p_i48487_1_) { @@ -19,13 +21,13 @@ public class NoGravMagicalDohickyItem extends Item { @Override public boolean onEntityItemUpdate(ItemStack stack, ItemEntity entity) { - World world = entity.world; - Vector3d pos = entity.getPositionVec(); + World world = entity.level; + Vector3d pos = entity.position(); CompoundNBT persistentData = entity.getPersistentData(); - if (world.isRemote) { - if (world.rand.nextFloat() < getIdleParticleChance(entity)) { - Vector3d ppos = VecHelper.offsetRandomly(pos, world.rand, .5f); + if (world.isClientSide) { + if (world.random.nextFloat() < getIdleParticleChance(entity)) { + Vector3d ppos = VecHelper.offsetRandomly(pos, world.random, .5f); world.addParticle(ParticleTypes.END_ROD, ppos.x, pos.y, ppos.z, 0, -.1f, 0); } @@ -33,7 +35,7 @@ public class NoGravMagicalDohickyItem extends Item { Vector3d basemotion = new Vector3d(0, 1, 0); world.addParticle(ParticleTypes.FLASH, pos.x, pos.y, pos.z, 0, 0, 0); for (int i = 0; i < 20; i++) { - Vector3d motion = VecHelper.offsetRandomly(basemotion, world.rand, 1); + Vector3d motion = VecHelper.offsetRandomly(basemotion, world.random, 1); world.addParticle(ParticleTypes.WITCH, pos.x, pos.y, pos.z, motion.x, motion.y, motion.z); world.addParticle(ParticleTypes.END_ROD, pos.x, pos.y, pos.z, motion.x, motion.y, motion.z); } diff --git a/src/main/java/com/simibubi/create/content/curiosities/RefinedRadianceItem.java b/src/main/java/com/simibubi/create/content/curiosities/RefinedRadianceItem.java index c853d6be7..1712ae8d0 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/RefinedRadianceItem.java +++ b/src/main/java/com/simibubi/create/content/curiosities/RefinedRadianceItem.java @@ -4,6 +4,8 @@ import net.minecraft.entity.item.ItemEntity; import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompoundNBT; +import net.minecraft.item.Item.Properties; + public class RefinedRadianceItem extends NoGravMagicalDohickyItem { public RefinedRadianceItem(Properties properties) { @@ -11,14 +13,14 @@ public class RefinedRadianceItem extends NoGravMagicalDohickyItem { } @Override - public boolean hasEffect(ItemStack stack) { + public boolean isFoil(ItemStack stack) { return true; } @Override protected void onCreated(ItemEntity entity, CompoundNBT persistentData) { super.onCreated(entity, persistentData); - entity.setMotion(entity.getMotion() + entity.setDeltaMovement(entity.getDeltaMovement() .add(0, .15f, 0)); } diff --git a/src/main/java/com/simibubi/create/content/curiosities/ShadowSteelItem.java b/src/main/java/com/simibubi/create/content/curiosities/ShadowSteelItem.java index 007e0f627..96b1c5548 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/ShadowSteelItem.java +++ b/src/main/java/com/simibubi/create/content/curiosities/ShadowSteelItem.java @@ -4,6 +4,8 @@ import net.minecraft.entity.item.ItemEntity; import net.minecraft.nbt.CompoundNBT; import net.minecraft.util.math.MathHelper; +import net.minecraft.item.Item.Properties; + public class ShadowSteelItem extends NoGravMagicalDohickyItem { public ShadowSteelItem(Properties properties) { @@ -14,13 +16,13 @@ public class ShadowSteelItem extends NoGravMagicalDohickyItem { protected void onCreated(ItemEntity entity, CompoundNBT persistentData) { super.onCreated(entity, persistentData); float yMotion = (entity.fallDistance + 3) / 50f; - entity.setMotion(0, yMotion, 0); + entity.setDeltaMovement(0, yMotion, 0); } @Override protected float getIdleParticleChance(ItemEntity entity) { return (float) (MathHelper.clamp(entity.getItem() - .getCount() - 10, MathHelper.clamp(entity.getMotion().y * 20, 5, 20), 100) / 64f); + .getCount() - 10, MathHelper.clamp(entity.getDeltaMovement().y * 20, 5, 20), 100) / 64f); } } 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 65768046d..f9bdccf0f 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/TreeFertilizerItem.java +++ b/src/main/java/com/simibubi/create/content/curiosities/TreeFertilizerItem.java @@ -13,6 +13,8 @@ import net.minecraft.util.ActionResultType; import net.minecraft.util.math.BlockPos; import net.minecraft.world.server.ServerWorld; +import net.minecraft.item.Item.Properties; + public class TreeFertilizerItem extends Item { public TreeFertilizerItem(Properties properties) { @@ -20,60 +22,60 @@ public class TreeFertilizerItem extends Item { } @Override - public ActionResultType onItemUse(ItemUseContext context) { - BlockState state = context.getWorld() - .getBlockState(context.getPos()); + public ActionResultType useOn(ItemUseContext context) { + BlockState state = context.getLevel() + .getBlockState(context.getClickedPos()); Block block = state.getBlock(); if (block instanceof SaplingBlock) { - if (context.getWorld().isRemote) { - BoneMealItem.spawnBonemealParticles(context.getWorld(), context.getPos(), 100); + if (context.getLevel().isClientSide) { + BoneMealItem.addGrowthParticles(context.getLevel(), context.getClickedPos(), 100); return ActionResultType.SUCCESS; } - BlockPos saplingPos = context.getPos(); - TreesDreamWorld world = new TreesDreamWorld((ServerWorld) context.getWorld(), saplingPos); + BlockPos saplingPos = context.getClickedPos(); + TreesDreamWorld world = new TreesDreamWorld((ServerWorld) context.getLevel(), saplingPos); - for (BlockPos pos : BlockPos.getAllInBoxMutable(-1, 0, -1, 1, 0, 1)) { - if (context.getWorld() - .getBlockState(saplingPos.add(pos)) + for (BlockPos pos : BlockPos.betweenClosed(-1, 0, -1, 1, 0, 1)) { + if (context.getLevel() + .getBlockState(saplingPos.offset(pos)) .getBlock() == block) - world.setBlockState(pos.up(10), state.with(SaplingBlock.STAGE, 1)); + world.setBlockAndUpdate(pos.above(10), state.setValue(SaplingBlock.STAGE, 1)); } - ((SaplingBlock) block).grow(world, world.getRandom(), BlockPos.ZERO.up(10), - state.with(SaplingBlock.STAGE, 1)); + ((SaplingBlock) block).performBonemeal(world, world.getRandom(), BlockPos.ZERO.above(10), + state.setValue(SaplingBlock.STAGE, 1)); for (BlockPos pos : world.blocksAdded.keySet()) { - BlockPos actualPos = pos.add(saplingPos).down(10); + BlockPos actualPos = pos.offset(saplingPos).below(10); BlockState newState = world.blocksAdded.get(pos); // Don't replace Bedrock - if (context.getWorld() + if (context.getLevel() .getBlockState(actualPos) - .getBlockHardness(context.getWorld(), actualPos) == -1) + .getDestroySpeed(context.getLevel(), actualPos) == -1) continue; // Don't replace solid blocks with leaves - if (!newState.isNormalCube(world, pos) - && !context.getWorld() + if (!newState.isRedstoneConductor(world, pos) + && !context.getLevel() .getBlockState(actualPos) - .getCollisionShape(context.getWorld(), actualPos) + .getCollisionShape(context.getLevel(), actualPos) .isEmpty()) continue; - context.getWorld() - .setBlockState(actualPos, newState); + context.getLevel() + .setBlockAndUpdate(actualPos, newState); } if (context.getPlayer() != null && !context.getPlayer() .isCreative()) - context.getItem() + context.getItemInHand() .shrink(1); return ActionResultType.SUCCESS; } - return super.onItemUse(context); + return super.useOn(context); } private class TreesDreamWorld extends PlacementSimulationServerWorld { @@ -83,7 +85,7 @@ public class TreeFertilizerItem extends Item { protected TreesDreamWorld(ServerWorld wrapped, BlockPos saplingPos) { super(wrapped); this.saplingPos = saplingPos; - soil = wrapped.getBlockState(saplingPos.down()); + soil = wrapped.getBlockState(saplingPos.below()); } @Override @@ -94,10 +96,10 @@ public class TreeFertilizerItem extends Item { } @Override - public boolean setBlockState(BlockPos pos, BlockState newState, int flags) { + public boolean setBlock(BlockPos pos, BlockState newState, int flags) { if (newState.getBlock() == Blocks.PODZOL) return true; - return super.setBlockState(pos, newState, flags); + return super.setBlock(pos, newState, flags); } } diff --git a/src/main/java/com/simibubi/create/content/curiosities/armor/AllArmorMaterials.java b/src/main/java/com/simibubi/create/content/curiosities/armor/AllArmorMaterials.java index 1b0f7f6e1..5129dbbdf 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/armor/AllArmorMaterials.java +++ b/src/main/java/com/simibubi/create/content/curiosities/armor/AllArmorMaterials.java @@ -16,7 +16,7 @@ import net.minecraftforge.api.distmarker.OnlyIn; public enum AllArmorMaterials implements IArmorMaterial { COPPER("copper", 7, new int[] { 1, 3, 4, 2 }, 25, AllSoundEvents.COPPER_ARMOR_EQUIP.getMainEvent(), 0.0F, 0.0F, - () -> Ingredient.fromItems(AllItems.COPPER_INGOT.get())) + () -> Ingredient.of(AllItems.COPPER_INGOT.get())) ; @@ -42,24 +42,24 @@ public enum AllArmorMaterials implements IArmorMaterial { this.repairMaterial = new LazyValue<>(p_i231593_10_); } - public int getDurability(EquipmentSlotType p_200896_1_) { + public int getDurabilityForSlot(EquipmentSlotType p_200896_1_) { return MAX_DAMAGE_ARRAY[p_200896_1_.getIndex()] * this.maxDamageFactor; } - public int getDamageReductionAmount(EquipmentSlotType p_200902_1_) { + public int getDefenseForSlot(EquipmentSlotType p_200902_1_) { return this.damageReductionAmountArray[p_200902_1_.getIndex()]; } - public int getEnchantability() { + public int getEnchantmentValue() { return this.enchantability; } - public SoundEvent getSoundEvent() { + public SoundEvent getEquipSound() { return this.soundEvent; } - public Ingredient getRepairMaterial() { - return this.repairMaterial.getValue(); + public Ingredient getRepairIngredient() { + return this.repairMaterial.get(); } @OnlyIn(Dist.CLIENT) diff --git a/src/main/java/com/simibubi/create/content/curiosities/armor/BackTankUtil.java b/src/main/java/com/simibubi/create/content/curiosities/armor/BackTankUtil.java index 6310de114..a53b0d477 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/armor/BackTankUtil.java +++ b/src/main/java/com/simibubi/create/content/curiosities/armor/BackTankUtil.java @@ -18,7 +18,7 @@ import net.minecraftforge.api.distmarker.OnlyIn; public class BackTankUtil { public static ItemStack get(LivingEntity entity) { - for (ItemStack itemStack : entity.getArmorInventoryList()) + for (ItemStack itemStack : entity.getArmorSlots()) if (AllItems.COPPER_BACKTANK.isIn(itemStack)) return itemStack; return ItemStack.EMPTY; @@ -40,7 +40,7 @@ public class BackTankUtil { } public static int maxAir(ItemStack backtank) { - return maxAir(EnchantmentHelper.getEnchantmentLevel(AllEnchantments.CAPACITY.get(), backtank)); + return maxAir(EnchantmentHelper.getItemEnchantmentLevel(AllEnchantments.CAPACITY.get(), backtank)); } public static int maxAir(int enchantLevel) { @@ -78,7 +78,7 @@ public class BackTankUtil { return 0; ItemStack backtank = get(player); if (backtank.isEmpty() || !hasAirRemaining(backtank)) - return MathHelper.hsvToRGB( + return MathHelper.hsvToRgb( Math.max(0.0F, (float) (1.0F - getDurabilityForDisplay(stack, usesPerTank))) / 3.0F, 1.0F, 1.0F); return backtank.getItem() .getRGBDurabilityForDisplay(backtank); @@ -93,7 +93,7 @@ public class BackTankUtil { return 0; ItemStack backtank = get(player); if (backtank.isEmpty() || !hasAirRemaining(backtank)) - return (double) stack.getDamage() / (double) stack.getMaxDamage(); + return (double) stack.getDamageValue() / (double) stack.getMaxDamage(); return backtank.getItem() .getDurabilityForDisplay(backtank); } diff --git a/src/main/java/com/simibubi/create/content/curiosities/armor/CapacityEnchantment.java b/src/main/java/com/simibubi/create/content/curiosities/armor/CapacityEnchantment.java index 49b31df0d..da5c2dc37 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/armor/CapacityEnchantment.java +++ b/src/main/java/com/simibubi/create/content/curiosities/armor/CapacityEnchantment.java @@ -5,6 +5,8 @@ import net.minecraft.enchantment.EnchantmentType; import net.minecraft.inventory.EquipmentSlotType; import net.minecraft.item.ItemStack; +import net.minecraft.enchantment.Enchantment.Rarity; + public class CapacityEnchantment extends Enchantment { public CapacityEnchantment(Rarity p_i46731_1_, EnchantmentType p_i46731_2_, EquipmentSlotType[] p_i46731_3_) { diff --git a/src/main/java/com/simibubi/create/content/curiosities/armor/CopperArmorItem.java b/src/main/java/com/simibubi/create/content/curiosities/armor/CopperArmorItem.java index 8825db1c5..df735ef18 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/armor/CopperArmorItem.java +++ b/src/main/java/com/simibubi/create/content/curiosities/armor/CopperArmorItem.java @@ -7,14 +7,16 @@ import net.minecraft.inventory.EquipmentSlotType; import net.minecraft.item.ArmorItem; import net.minecraft.item.ItemStack; +import net.minecraft.item.Item.Properties; + public class CopperArmorItem extends ArmorItem { public CopperArmorItem(EquipmentSlotType p_i48534_2_, Properties p_i48534_3_) { - super(AllArmorMaterials.COPPER, p_i48534_2_, p_i48534_3_.maxStackSize(1)); + super(AllArmorMaterials.COPPER, p_i48534_2_, p_i48534_3_.stacksTo(1)); } public boolean isWornBy(Entity entity) { - for (ItemStack itemStack : entity.getArmorInventoryList()) + for (ItemStack itemStack : entity.getArmorSlots()) if (itemStack.getItem() == this) return true; return false; diff --git a/src/main/java/com/simibubi/create/content/curiosities/armor/CopperBacktankArmorLayer.java b/src/main/java/com/simibubi/create/content/curiosities/armor/CopperBacktankArmorLayer.java index 2d97378b4..851ce18cc 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/armor/CopperBacktankArmorLayer.java +++ b/src/main/java/com/simibubi/create/content/curiosities/armor/CopperBacktankArmorLayer.java @@ -53,21 +53,21 @@ public class CopperBacktankArmorLayer model = (BipedModel) entityModel; BlockState renderedState = AllBlocks.COPPER_BACKTANK.getDefaultState() - .with(CopperBacktankBlock.HORIZONTAL_FACING, Direction.SOUTH); - RenderType renderType = Atlases.getEntityCutout(); + .setValue(CopperBacktankBlock.HORIZONTAL_FACING, Direction.SOUTH); + RenderType renderType = Atlases.cutoutBlockSheet(); SuperByteBuffer backtank = CreateClient.BUFFER_CACHE.renderBlock(renderedState); SuperByteBuffer cogs = CreateClient.BUFFER_CACHE.renderPartial(AllBlockPartials.COPPER_BACKTANK_COGS, renderedState); - model.bipedBody.rotate(ms); + model.body.translateAndRotate(ms); ms.translate(-1 / 2f, 10 / 16f, 1f); ms.scale(1, -1, -1); backtank.forEntityRender() @@ -79,20 +79,20 @@ public class CopperBacktankArmorLayer renderer : renderManager.renderers.values()) registerOn(renderer); } @@ -112,19 +112,19 @@ public class CopperBacktankArmorLayer, IWaterLoggable { public CopperBacktankBlock(Properties properties) { super(properties); - setDefaultState(super.getDefaultState().with(BlockStateProperties.WATERLOGGED, false)); + registerDefaultState(super.defaultBlockState().setValue(BlockStateProperties.WATERLOGGED, false)); } @Override public FluidState getFluidState(BlockState state) { - return state.get(BlockStateProperties.WATERLOGGED) ? Fluids.WATER.getStillFluidState(false) - : Fluids.EMPTY.getDefaultState(); + return state.getValue(BlockStateProperties.WATERLOGGED) ? Fluids.WATER.getSource(false) + : Fluids.EMPTY.defaultFluidState(); } @Override - protected void fillStateContainer(Builder builder) { + protected void createBlockStateDefinition(Builder builder) { builder.add(BlockStateProperties.WATERLOGGED); - super.fillStateContainer(builder); + super.createBlockStateDefinition(builder); } @Override - public boolean hasComparatorInputOverride(BlockState p_149740_1_) { + public boolean hasAnalogOutputSignal(BlockState p_149740_1_) { return true; } @Override - public int getComparatorInputOverride(BlockState p_180641_1_, World world, BlockPos pos) { + public int getAnalogOutputSignal(BlockState p_180641_1_, World world, BlockPos pos) { return getTileEntityOptional(world, pos).map(CopperBacktankTileEntity::getComparatorOutput) .orElse(0); } @Override - public BlockState updatePostPlacement(BlockState state, Direction direction, BlockState neighbourState, + public BlockState updateShape(BlockState state, Direction direction, BlockState neighbourState, IWorld world, BlockPos pos, BlockPos neighbourPos) { - if (state.get(BlockStateProperties.WATERLOGGED)) { - world.getPendingFluidTicks() - .scheduleTick(pos, Fluids.WATER, Fluids.WATER.getTickRate(world)); + if (state.getValue(BlockStateProperties.WATERLOGGED)) { + world.getLiquidTicks() + .scheduleTick(pos, Fluids.WATER, Fluids.WATER.getTickDelay(world)); } return state; } @Override public BlockState getStateForPlacement(BlockItemUseContext context) { - FluidState ifluidstate = context.getWorld() - .getFluidState(context.getPos()); - return super.getStateForPlacement(context).with(BlockStateProperties.WATERLOGGED, - Boolean.valueOf(ifluidstate.getFluid() == Fluids.WATER)); + FluidState ifluidstate = context.getLevel() + .getFluidState(context.getClickedPos()); + return super.getStateForPlacement(context).setValue(BlockStateProperties.WATERLOGGED, + Boolean.valueOf(ifluidstate.getType() == Fluids.WATER)); } @Override @@ -104,48 +106,48 @@ public class CopperBacktankBlock extends HorizontalKineticBlock } @Override - public void onBlockPlacedBy(World worldIn, BlockPos pos, BlockState state, LivingEntity placer, ItemStack stack) { - super.onBlockPlacedBy(worldIn, pos, state, placer, stack); - if (worldIn.isRemote) + public void setPlacedBy(World worldIn, BlockPos pos, BlockState state, LivingEntity placer, ItemStack stack) { + super.setPlacedBy(worldIn, pos, state, placer, stack); + if (worldIn.isClientSide) return; if (stack == null) return; withTileEntityDo(worldIn, pos, te -> { - te.setCapacityEnchantLevel(EnchantmentHelper.getEnchantmentLevel(AllEnchantments.CAPACITY.get(), stack)); + te.setCapacityEnchantLevel(EnchantmentHelper.getItemEnchantmentLevel(AllEnchantments.CAPACITY.get(), stack)); te.setAirLevel(stack.getOrCreateTag() .getInt("Air")); if (stack.isEnchanted()) - te.setEnchantmentTag(stack.getEnchantmentTagList()); - if (stack.hasDisplayName()) - te.setCustomName(stack.getDisplayName()); + te.setEnchantmentTag(stack.getEnchantmentTags()); + if (stack.hasCustomHoverName()) + te.setCustomName(stack.getHoverName()); }); } @Override - public ActionResultType onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand p_225533_5_, + public ActionResultType use(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand p_225533_5_, BlockRayTraceResult p_225533_6_) { if (player == null) return ActionResultType.PASS; if (player instanceof FakePlayer) return ActionResultType.PASS; - if (player.isSneaking()) + if (player.isShiftKeyDown()) return ActionResultType.PASS; - if (player.getHeldItemMainhand() + if (player.getMainHandItem() .getItem() instanceof BlockItem) return ActionResultType.PASS; - if (!player.getItemStackFromSlot(EquipmentSlotType.CHEST) + if (!player.getItemBySlot(EquipmentSlotType.CHEST) .isEmpty()) return ActionResultType.PASS; - if (!world.isRemote) { - world.playSound(null, pos, SoundEvents.ENTITY_ITEM_PICKUP, SoundCategory.PLAYERS, .75f, 1); - player.setItemStackToSlot(EquipmentSlotType.CHEST, getItem(world, pos, state)); + if (!world.isClientSide) { + world.playSound(null, pos, SoundEvents.ITEM_PICKUP, SoundCategory.PLAYERS, .75f, 1); + player.setItemSlot(EquipmentSlotType.CHEST, getCloneItemStack(world, pos, state)); world.destroyBlock(pos, false); } return ActionResultType.SUCCESS; } @Override - public ItemStack getItem(IBlockReader p_185473_1_, BlockPos p_185473_2_, BlockState p_185473_3_) { + public ItemStack getCloneItemStack(IBlockReader p_185473_1_, BlockPos p_185473_2_, BlockState p_185473_3_) { ItemStack item = AllItems.COPPER_BACKTANK.asStack(); Optional tileEntityOptional = getTileEntityOptional(p_185473_1_, p_185473_2_); @@ -157,7 +159,7 @@ public class CopperBacktankBlock extends HorizontalKineticBlock ListNBT enchants = tileEntityOptional.map(CopperBacktankTileEntity::getEnchantmentTag) .orElse(new ListNBT()); if (!enchants.isEmpty()) { - ListNBT enchantmentTagList = item.getEnchantmentTagList(); + ListNBT enchantmentTagList = item.getEnchantmentTags(); enchantmentTagList.addAll(enchants); tag.put("Enchantments", enchantmentTagList); } @@ -165,7 +167,7 @@ public class CopperBacktankBlock extends HorizontalKineticBlock ITextComponent customName = tileEntityOptional.map(CopperBacktankTileEntity::getCustomName) .orElse(null); if (customName != null) - item.setDisplayName(customName); + item.setHoverName(customName); return item; } @@ -186,7 +188,7 @@ public class CopperBacktankBlock extends HorizontalKineticBlock } @Override - public boolean allowsMovement(BlockState state, IBlockReader reader, BlockPos pos, PathType type) { + public boolean isPathfindable(BlockState state, IBlockReader reader, BlockPos pos, PathType type) { return false; } diff --git a/src/main/java/com/simibubi/create/content/curiosities/armor/CopperBacktankItem.java b/src/main/java/com/simibubi/create/content/curiosities/armor/CopperBacktankItem.java index d01a1cda2..3fa0f3065 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/armor/CopperBacktankItem.java +++ b/src/main/java/com/simibubi/create/content/curiosities/armor/CopperBacktankItem.java @@ -12,6 +12,8 @@ import net.minecraft.util.ActionResultType; import net.minecraft.util.NonNullList; import net.minecraft.util.math.MathHelper; +import net.minecraft.item.Item.Properties; + public class CopperBacktankItem extends CopperArmorItem implements ICapacityEnchantable { public static final int DURABILITY_BAR = 0xefefef; @@ -23,12 +25,12 @@ public class CopperBacktankItem extends CopperArmorItem implements ICapacityEnch } @Override - public ActionResultType onItemUse(ItemUseContext p_195939_1_) { - return blockItem.onItemUse(p_195939_1_); + public ActionResultType useOn(ItemUseContext p_195939_1_) { + return blockItem.useOn(p_195939_1_); } @Override - public boolean isDamageable() { + public boolean canBeDepleted() { return false; } @@ -43,8 +45,8 @@ public class CopperBacktankItem extends CopperArmorItem implements ICapacityEnch } @Override - public void fillItemGroup(ItemGroup p_150895_1_, NonNullList p_150895_2_) { - if (!isInGroup(p_150895_1_)) + public void fillItemCategory(ItemGroup p_150895_1_, NonNullList p_150895_2_) { + if (!allowdedIn(p_150895_1_)) return; ItemStack stack = new ItemStack(this); diff --git a/src/main/java/com/simibubi/create/content/curiosities/armor/CopperBacktankRenderer.java b/src/main/java/com/simibubi/create/content/curiosities/armor/CopperBacktankRenderer.java index 1fe8b76a6..c9075a4ae 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/armor/CopperBacktankRenderer.java +++ b/src/main/java/com/simibubi/create/content/curiosities/armor/CopperBacktankRenderer.java @@ -31,14 +31,14 @@ public class CopperBacktankRenderer extends KineticTileEntityRenderer { cogs.matrixStacker() .centre() .rotateY(180 + AngleHelper.horizontalAngle(te.getBlockState() - .get(CopperBacktankBlock.HORIZONTAL_FACING))) + .getValue(CopperBacktankBlock.HORIZONTAL_FACING))) .unCentre() .translate(0, 6.5f / 16, 11f / 16) .rotate(Direction.EAST, - AngleHelper.rad(te.getSpeed() / 4f * AnimationTickHolder.getRenderTime(te.getWorld()) % 360)) + AngleHelper.rad(te.getSpeed() / 4f * AnimationTickHolder.getRenderTime(te.getLevel()) % 360)) .translate(0, -6.5f / 16, -11f / 16); cogs.light(light) - .renderInto(ms, buffer.getBuffer(RenderType.getSolid())); + .renderInto(ms, buffer.getBuffer(RenderType.solid())); } @Override diff --git a/src/main/java/com/simibubi/create/content/curiosities/armor/CopperBacktankTileEntity.java b/src/main/java/com/simibubi/create/content/curiosities/armor/CopperBacktankTileEntity.java index 22c3e2f2e..b03b79038 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/armor/CopperBacktankTileEntity.java +++ b/src/main/java/com/simibubi/create/content/curiosities/armor/CopperBacktankTileEntity.java @@ -45,7 +45,7 @@ public class CopperBacktankTileEntity extends KineticTileEntity implements IName BlockState state = getBlockState(); BooleanProperty waterProperty = BlockStateProperties.WATERLOGGED; - if (state.contains(waterProperty) && state.get(waterProperty)) + if (state.hasProperty(waterProperty) && state.getValue(waterProperty)) return; if (airLevelTimer > 0) { @@ -54,12 +54,12 @@ public class CopperBacktankTileEntity extends KineticTileEntity implements IName } int max = BackTankUtil.maxAir(capacityEnchantLevel); - if (world.isRemote) { - Vector3d centerOf = VecHelper.getCenterOf(pos); + if (level.isClientSide) { + Vector3d centerOf = VecHelper.getCenterOf(worldPosition); Vector3d v = VecHelper.offsetRandomly(centerOf, Create.RANDOM, .65f); Vector3d m = centerOf.subtract(v); if (airLevel != max) - world.addParticle(new AirParticleData(1, .05f), v.x, v.y, v.z, m.x, m.y, m.z); + level.addParticle(new AirParticleData(1, .05f), v.x, v.y, v.z, m.x, m.y, m.z); return; } @@ -70,8 +70,8 @@ public class CopperBacktankTileEntity extends KineticTileEntity implements IName float abs = Math.abs(getSpeed()); int increment = MathHelper.clamp(((int) abs - 100) / 20, 1, 5); airLevel = Math.min(max, airLevel + increment); - if (getComparatorOutput() != prevComparatorLevel && !world.isRemote) - world.updateComparatorOutputLevel(pos, state.getBlock()); + if (getComparatorOutput() != prevComparatorLevel && !level.isClientSide) + level.updateNeighbourForOutputSignal(worldPosition, state.getBlock()); if (airLevel == max) sendData(); airLevelTimer = MathHelper.clamp((int) (128f - abs / 5f) - 108, 0, 20); @@ -108,15 +108,15 @@ public class CopperBacktankTileEntity extends KineticTileEntity implements IName } protected void playFilledEffect() { - AllSoundEvents.CONFIRM.playAt(world, pos, 0.4f, 1, true); + AllSoundEvents.CONFIRM.playAt(level, worldPosition, 0.4f, 1, true); Vector3d baseMotion = new Vector3d(.25, 0.1, 0); - Vector3d baseVec = VecHelper.getCenterOf(pos); + Vector3d baseVec = VecHelper.getCenterOf(worldPosition); for (int i = 0; i < 360; i += 10) { Vector3d m = VecHelper.rotate(baseMotion, i, Axis.Y); Vector3d v = baseVec.add(m.normalize() .scale(.25f)); - world.addParticle(ParticleTypes.SPIT, v.x, v.y, v.z, m.x, m.y, m.z); + level.addParticle(ParticleTypes.SPIT, v.x, v.y, v.z, m.x, m.y, m.z); } } @@ -124,7 +124,7 @@ public class CopperBacktankTileEntity extends KineticTileEntity implements IName public ITextComponent getName() { return this.customName != null ? this.customName : new TranslationTextComponent(AllItems.COPPER_BACKTANK.get() - .getTranslationKey()); + .getDescriptionId()); } @Override diff --git a/src/main/java/com/simibubi/create/content/curiosities/armor/DivingBootsItem.java b/src/main/java/com/simibubi/create/content/curiosities/armor/DivingBootsItem.java index 9b83bbb72..2b69e2950 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/armor/DivingBootsItem.java +++ b/src/main/java/com/simibubi/create/content/curiosities/armor/DivingBootsItem.java @@ -13,6 +13,8 @@ import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod.EventBusSubscriber; import net.minecraftforge.fml.common.ObfuscationReflectionHelper; +import net.minecraft.item.Item.Properties; + @EventBusSubscriber public class DivingBootsItem extends CopperArmorItem { @@ -26,9 +28,9 @@ public class DivingBootsItem extends CopperArmorItem { if (!affects(entity)) return; - Vector3d motion = entity.getMotion(); - Boolean isJumping = ObfuscationReflectionHelper.getPrivateValue(LivingEntity.class, entity, "field_70703_bu"); - entity.onGround |= entity.collidedVertically; + Vector3d motion = entity.getDeltaMovement(); + Boolean isJumping = ObfuscationReflectionHelper.getPrivateValue(LivingEntity.class, entity, "jumping"); // jumping + entity.onGround |= entity.verticalCollision; if (isJumping && entity.onGround) { motion = motion.add(0, .5f, 0); @@ -38,10 +40,10 @@ public class DivingBootsItem extends CopperArmorItem { } float multiplier = 1.3f; - if (motion.mul(1, 0, 1) - .length() < 0.145f && (entity.moveForward > 0 || entity.moveStrafing != 0) && !entity.isSneaking()) - motion = motion.mul(multiplier, 1, multiplier); - entity.setMotion(motion); + if (motion.multiply(1, 0, 1) + .length() < 0.145f && (entity.zza > 0 || entity.xxa != 0) && !entity.isShiftKeyDown()) + motion = motion.multiply(multiplier, 1, multiplier); + entity.setDeltaMovement(motion); } protected static boolean affects(LivingEntity entity) { @@ -59,7 +61,7 @@ public class DivingBootsItem extends CopperArmorItem { return false; if (entity instanceof PlayerEntity) { PlayerEntity playerEntity = (PlayerEntity) entity; - if (playerEntity.abilities.isFlying) + if (playerEntity.abilities.flying) return false; } return true; diff --git a/src/main/java/com/simibubi/create/content/curiosities/armor/DivingHelmetItem.java b/src/main/java/com/simibubi/create/content/curiosities/armor/DivingHelmetItem.java index dae5e477a..e0d14b13c 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/armor/DivingHelmetItem.java +++ b/src/main/java/com/simibubi/create/content/curiosities/armor/DivingHelmetItem.java @@ -14,6 +14,8 @@ import net.minecraftforge.event.entity.living.LivingEvent.LivingUpdateEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod.EventBusSubscriber; +import net.minecraft.item.Item.Properties; + @EventBusSubscriber public class DivingHelmetItem extends CopperArmorItem { @@ -24,18 +26,18 @@ public class DivingHelmetItem extends CopperArmorItem { @SubscribeEvent public static void breatheUnderwater(LivingUpdateEvent event) { LivingEntity entity = event.getEntityLiving(); - World world = entity.world; + World world = entity.level; boolean second = world.getGameTime() % 20 == 0; - boolean drowning = entity.getAir() == 0; + boolean drowning = entity.getAirSupply() == 0; - if (world.isRemote) + if (world.isClientSide) entity.getPersistentData() .remove("VisualBacktankAir"); if (!AllItems.DIVING_HELMET.get() .isWornBy(entity)) return; - if (!entity.areEyesInFluid(FluidTags.WATER)) + if (!entity.isEyeInFluid(FluidTags.WATER)) return; if (entity instanceof PlayerEntity && ((PlayerEntity) entity).isCreative()) return; @@ -47,17 +49,17 @@ public class DivingHelmetItem extends CopperArmorItem { return; if (drowning) - entity.setAir(10); + entity.setAirSupply(10); - if (world.isRemote) + if (world.isClientSide) entity.getPersistentData() .putInt("VisualBacktankAir", (int) BackTankUtil.getAir(backtank)); if (!second) return; - entity.setAir(Math.min(entity.getMaxAir(), entity.getAir() + 10)); - entity.addPotionEffect(new EffectInstance(Effects.WATER_BREATHING, 30, 0, true, false, true)); + entity.setAirSupply(Math.min(entity.getMaxAirSupply(), entity.getAirSupply() + 10)); + entity.addEffect(new EffectInstance(Effects.WATER_BREATHING, 30, 0, true, false, true)); BackTankUtil.consumeAir(backtank, 1); } diff --git a/src/main/java/com/simibubi/create/content/curiosities/bell/AbstractBellBlock.java b/src/main/java/com/simibubi/create/content/curiosities/bell/AbstractBellBlock.java index 2b74cdd75..e8a446804 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/bell/AbstractBellBlock.java +++ b/src/main/java/com/simibubi/create/content/curiosities/bell/AbstractBellBlock.java @@ -20,6 +20,8 @@ import net.minecraft.util.math.shapes.VoxelShapes; import net.minecraft.world.IBlockReader; import net.minecraft.world.World; +import net.minecraft.block.AbstractBlock.Properties; + public abstract class AbstractBellBlock extends BellBlock implements ITE { public AbstractBellBlock(Properties properties) { @@ -28,14 +30,14 @@ public abstract class AbstractBellBlock exten @Override @Nullable - public TileEntity createNewTileEntity(IBlockReader block) { + public TileEntity newBlockEntity(IBlockReader block) { return null; } @Override public VoxelShape getShape(BlockState state, IBlockReader reader, BlockPos pos, ISelectionContext selection) { - Direction facing = state.get(field_220133_a); - switch (state.get(field_220134_b)) { + Direction facing = state.getValue(FACING); + switch (state.getValue(ATTACHMENT)) { case CEILING: return AllShapes.BELL_CEILING.get(facing); case DOUBLE_WALL: @@ -45,30 +47,30 @@ public abstract class AbstractBellBlock exten case SINGLE_WALL: return AllShapes.BELL_WALL.get(facing); default: - return VoxelShapes.fullCube(); + return VoxelShapes.block(); } } @Override - public boolean ring(World world, BlockState state, BlockRayTraceResult hit, @Nullable PlayerEntity player, + public boolean onHit(World world, BlockState state, BlockRayTraceResult hit, @Nullable PlayerEntity player, boolean flag) { - BlockPos pos = hit.getPos(); - Direction direction = hit.getFace(); + BlockPos pos = hit.getBlockPos(); + Direction direction = hit.getDirection(); if (direction == null) direction = world.getBlockState(pos) - .get(field_220133_a); + .getValue(FACING); - if (!this.canRingFrom(state, direction, hit.getHitVec().y - pos.getY())) + if (!this.canRingFrom(state, direction, hit.getLocation().y - pos.getY())) return false; TE te = getTileEntity(world, pos); if (te == null || !te.ring(world, pos, direction)) return false; - if (!world.isRemote) { + if (!world.isClientSide) { playSound(world, pos); if (player != null) - player.addStat(Stats.BELL_RING); + player.awardStat(Stats.BELL_RING); } return true; @@ -80,8 +82,8 @@ public abstract class AbstractBellBlock exten if (heightChange > 0.8124) return false; - Direction direction = state.get(field_220133_a); - BellAttachment bellAttachment = state.get(field_220134_b); + Direction direction = state.getValue(FACING); + BellAttachment bellAttachment = state.getValue(ATTACHMENT); switch (bellAttachment) { case FLOOR: case CEILING: diff --git a/src/main/java/com/simibubi/create/content/curiosities/bell/BasicParticleData.java b/src/main/java/com/simibubi/create/content/curiosities/bell/BasicParticleData.java index 9f6374e97..2eecfd4d7 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/bell/BasicParticleData.java +++ b/src/main/java/com/simibubi/create/content/curiosities/bell/BasicParticleData.java @@ -18,6 +18,8 @@ import net.minecraft.util.registry.Registry; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraft.particles.IParticleData.IDeserializer; + @ParametersAreNonnullByDefault @MethodsReturnNonnullByDefault public abstract class BasicParticleData implements IParticleData, ICustomParticleDataWithSprite> { @@ -29,12 +31,12 @@ public abstract class BasicParticleData implements IParticle BasicParticleData data = this; return new IParticleData.IDeserializer>() { @Override - public BasicParticleData deserialize(ParticleType> arg0, StringReader reader) { + public BasicParticleData fromCommand(ParticleType> arg0, StringReader reader) { return data; } @Override - public BasicParticleData read(ParticleType> type, PacketBuffer buffer) { + public BasicParticleData fromNetwork(ParticleType> type, PacketBuffer buffer) { return data; } }; @@ -60,10 +62,10 @@ public abstract class BasicParticleData implements IParticle } @Override - public String getParameters() { + public String writeToString() { return Registry.PARTICLE_TYPE.getKey(getType()).toString(); } @Override - public void write(PacketBuffer buffer) { } + public void writeToNetwork(PacketBuffer buffer) { } } diff --git a/src/main/java/com/simibubi/create/content/curiosities/bell/BellRenderer.java b/src/main/java/com/simibubi/create/content/curiosities/bell/BellRenderer.java index 1b68c75a4..37d12a927 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/bell/BellRenderer.java +++ b/src/main/java/com/simibubi/create/content/curiosities/bell/BellRenderer.java @@ -26,21 +26,21 @@ public class BellRenderer extends SafeTileEnt @Override protected void renderSafe(TE te, float partialTicks, MatrixStack ms, IRenderTypeBuffer buffer, int light, int overlay) { BlockState state = te.getBlockState(); - Direction facing = state.get(BellBlock.field_220133_a); - BellAttachment attachment = state.get(BellBlock.field_220134_b); + Direction facing = state.getValue(BellBlock.FACING); + BellAttachment attachment = state.getValue(BellBlock.ATTACHMENT); SuperByteBuffer bell = PartialBufferer.get(te.getBellModel(), state); if (te.isRinging) - bell.rotateCentered(te.ringDirection.rotateYCCW(), getSwingAngle(te.ringingTicks + partialTicks)); + bell.rotateCentered(te.ringDirection.getCounterClockWise(), getSwingAngle(te.ringingTicks + partialTicks)); float rY = AngleHelper.horizontalAngle(facing); if (attachment == BellAttachment.SINGLE_WALL || attachment == BellAttachment.DOUBLE_WALL) rY += 90; bell.rotateCentered(Direction.UP, AngleHelper.rad(rY)); - IVertexBuilder vb = buffer.getBuffer(RenderType.getCutout()); - int lightCoords = WorldRenderer.getLightmapCoordinates(te.getWorld(), state, te.getPos()); + IVertexBuilder vb = buffer.getBuffer(RenderType.cutout()); + int lightCoords = WorldRenderer.getLightColor(te.getLevel(), state, te.getBlockPos()); bell.light(lightCoords).renderInto(ms, vb); } diff --git a/src/main/java/com/simibubi/create/content/curiosities/bell/CustomRotationParticle.java b/src/main/java/com/simibubi/create/content/curiosities/bell/CustomRotationParticle.java index 21bc73de8..66e708d8d 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/bell/CustomRotationParticle.java +++ b/src/main/java/com/simibubi/create/content/curiosities/bell/CustomRotationParticle.java @@ -28,20 +28,20 @@ public class CustomRotationParticle extends SimpleAnimatedParticle { } public Quaternion getCustomRotation(ActiveRenderInfo camera, float partialTicks) { - Quaternion quaternion = new Quaternion(camera.getRotation()); - if (particleAngle != 0.0F) { - float angle = MathHelper.lerp(partialTicks, prevParticleAngle, particleAngle); - quaternion.multiply(Vector3f.POSITIVE_Z.getRadialQuaternion(angle)); + Quaternion quaternion = new Quaternion(camera.rotation()); + if (roll != 0.0F) { + float angle = MathHelper.lerp(partialTicks, oRoll, roll); + quaternion.mul(Vector3f.ZP.rotation(angle)); } return quaternion; } @Override - public void buildGeometry(IVertexBuilder builder, ActiveRenderInfo camera, float partialTicks) { - Vector3d cameraPos = camera.getProjectedView(); - float originX = (float) (MathHelper.lerp(partialTicks, prevPosX, posX) - cameraPos.getX()); - float originY = (float) (MathHelper.lerp(partialTicks, prevPosY, posY) - cameraPos.getY()); - float originZ = (float) (MathHelper.lerp(partialTicks, prevPosZ, posZ) - cameraPos.getZ()); + public void render(IVertexBuilder builder, ActiveRenderInfo camera, float partialTicks) { + Vector3d cameraPos = camera.getPosition(); + float originX = (float) (MathHelper.lerp(partialTicks, xo, x) - cameraPos.x()); + float originY = (float) (MathHelper.lerp(partialTicks, yo, y) - cameraPos.y()); + float originZ = (float) (MathHelper.lerp(partialTicks, zo, z) - cameraPos.z()); Vector3f[] vertices = new Vector3f[] { new Vector3f(-1.0F, -1.0F, 0.0F), @@ -49,24 +49,24 @@ public class CustomRotationParticle extends SimpleAnimatedParticle { new Vector3f(1.0F, 1.0F, 0.0F), new Vector3f(1.0F, -1.0F, 0.0F) }; - float scale = getScale(partialTicks); + float scale = getQuadSize(partialTicks); Quaternion rotation = getCustomRotation(camera, partialTicks); for(int i = 0; i < 4; ++i) { Vector3f vertex = vertices[i]; - vertex.func_214905_a(rotation); + vertex.transform(rotation); vertex.mul(scale); vertex.add(originX, originY, originZ); } - float minU = mirror ? getMaxU() : getMinU(); - float maxU = mirror ? getMinU() : getMaxU(); - float minV = getMinV(); - float maxV = getMaxV(); - int brightness = OptifineHandler.usingShaders() ? LightTexture.pack(12, 15 ) : getBrightnessForRender(partialTicks); - builder.vertex(vertices[0].getX(), vertices[0].getY(), vertices[0].getZ()).texture(maxU, maxV).color(particleRed, particleGreen, particleBlue, particleAlpha).light(brightness).endVertex(); - builder.vertex(vertices[1].getX(), vertices[1].getY(), vertices[1].getZ()).texture(maxU, minV).color(particleRed, particleGreen, particleBlue, particleAlpha).light(brightness).endVertex(); - builder.vertex(vertices[2].getX(), vertices[2].getY(), vertices[2].getZ()).texture(minU, minV).color(particleRed, particleGreen, particleBlue, particleAlpha).light(brightness).endVertex(); - builder.vertex(vertices[3].getX(), vertices[3].getY(), vertices[3].getZ()).texture(minU, maxV).color(particleRed, particleGreen, particleBlue, particleAlpha).light(brightness).endVertex(); + float minU = mirror ? getU1() : getU0(); + float maxU = mirror ? getU0() : getU1(); + float minV = getV0(); + float maxV = getV1(); + int brightness = OptifineHandler.usingShaders() ? LightTexture.pack(12, 15 ) : getLightColor(partialTicks); + builder.vertex(vertices[0].x(), vertices[0].y(), vertices[0].z()).uv(maxU, maxV).color(rCol, gCol, bCol, alpha).uv2(brightness).endVertex(); + builder.vertex(vertices[1].x(), vertices[1].y(), vertices[1].z()).uv(maxU, minV).color(rCol, gCol, bCol, alpha).uv2(brightness).endVertex(); + builder.vertex(vertices[2].x(), vertices[2].y(), vertices[2].z()).uv(minU, minV).color(rCol, gCol, bCol, alpha).uv2(brightness).endVertex(); + builder.vertex(vertices[3].x(), vertices[3].y(), vertices[3].z()).uv(minU, maxV).color(rCol, gCol, bCol, alpha).uv2(brightness).endVertex(); } } diff --git a/src/main/java/com/simibubi/create/content/curiosities/bell/HauntedBellBlock.java b/src/main/java/com/simibubi/create/content/curiosities/bell/HauntedBellBlock.java index 5bcc703d5..bb4df62fd 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/bell/HauntedBellBlock.java +++ b/src/main/java/com/simibubi/create/content/curiosities/bell/HauntedBellBlock.java @@ -9,6 +9,8 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.world.IBlockReader; import net.minecraft.world.World; +import net.minecraft.block.AbstractBlock.Properties; + public class HauntedBellBlock extends AbstractBellBlock { public HauntedBellBlock(Properties properties) { @@ -31,7 +33,7 @@ public class HauntedBellBlock extends AbstractBellBlock { } @Override - public void onBlockAdded(BlockState state, World world, BlockPos pos, BlockState oldState, boolean isMoving) { + public void onPlace(BlockState state, World world, BlockPos pos, BlockState oldState, boolean isMoving) { if (oldState.getBlock() != this) withTileEntityDo(world, pos, HauntedBellTileEntity::startEffect); } diff --git a/src/main/java/com/simibubi/create/content/curiosities/bell/HauntedBellMovementBehaviour.java b/src/main/java/com/simibubi/create/content/curiosities/bell/HauntedBellMovementBehaviour.java index e54d29d73..bbd46e191 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/bell/HauntedBellMovementBehaviour.java +++ b/src/main/java/com/simibubi/create/content/curiosities/bell/HauntedBellMovementBehaviour.java @@ -18,7 +18,7 @@ public class HauntedBellMovementBehaviour extends BellMovementBehaviour { @Override public void visitNewPosition(MovementContext context, BlockPos pos) { - if (!context.world.isRemote && getRecharge(context) == 0) { + if (!context.world.isClientSide && getRecharge(context) == 0) { HauntedBellPulser.sendPulse(context.world, pos, DISTANCE, false); setRecharge(context, HauntedBellTileEntity.RECHARGE_TICKS); playSound(context); diff --git a/src/main/java/com/simibubi/create/content/curiosities/bell/HauntedBellPulser.java b/src/main/java/com/simibubi/create/content/curiosities/bell/HauntedBellPulser.java index 626089218..a26c96c1f 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/bell/HauntedBellPulser.java +++ b/src/main/java/com/simibubi/create/content/curiosities/bell/HauntedBellPulser.java @@ -46,7 +46,7 @@ public class HauntedBellPulser { boolean firstPulse = false; try { - IntAttached ticker = WARMUP.get(player.getUniqueID(), () -> IntAttached.with(WARMUP_TICKS, player)); + IntAttached ticker = WARMUP.get(player.getUUID(), () -> IntAttached.with(WARMUP_TICKS, player)); firstPulse = ticker.getFirst() .intValue() == 1; ticker.decrement(); @@ -55,9 +55,9 @@ public class HauntedBellPulser { } catch (ExecutionException e) { } - long gameTime = player.world.getGameTime(); + long gameTime = player.level.getGameTime(); if (firstPulse || gameTime % RECHARGE_TICKS != 0) - sendPulse(player.world, event.player.getBlockPos(), DISTANCE, false); + sendPulse(player.level, event.player.blockPosition(), DISTANCE, false); } public static void sendPulse(World world, BlockPos pos, int distance, boolean canOverlap) { diff --git a/src/main/java/com/simibubi/create/content/curiosities/bell/HauntedBellTileEntity.java b/src/main/java/com/simibubi/create/content/curiosities/bell/HauntedBellTileEntity.java index d55823ec0..4847c815e 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/bell/HauntedBellTileEntity.java +++ b/src/main/java/com/simibubi/create/content/curiosities/bell/HauntedBellTileEntity.java @@ -45,7 +45,7 @@ public class HauntedBellTileEntity extends AbstractBellTileEntity { if (!super.ring(world, pos, direction)) return false; - if (!world.isRemote) + if (!world.isClientSide) HauntedBellPulser.sendPulse(world, pos, DISTANCE, false); startEffect(); @@ -78,10 +78,10 @@ public class HauntedBellTileEntity extends AbstractBellTileEntity { return; effectTicks--; - if (!world.isRemote) + if (!level.isClientSide) return; - Random rand = world.getRandom(); + Random rand = level.getRandom(); if (rand.nextFloat() > 0.25f) return; @@ -90,19 +90,19 @@ public class HauntedBellTileEntity extends AbstractBellTileEntity { } protected void spawnParticle(Random rand) { - double x = pos.getX() + rand.nextDouble(); - double y = pos.getY() + 0.5; - double z = pos.getZ() + rand.nextDouble(); + double x = worldPosition.getX() + rand.nextDouble(); + double y = worldPosition.getY() + 0.5; + double z = worldPosition.getZ() + rand.nextDouble(); double vx = rand.nextDouble() * 0.04 - 0.02; double vy = 0.1; double vz = rand.nextDouble() * 0.04 - 0.02; - world.addParticle(ParticleTypes.SOUL, x, y, z, vx, vy, vz); + level.addParticle(ParticleTypes.SOUL, x, y, z, vx, vy, vz); } protected void playSound(Random rand) { float vol = rand.nextFloat() * 0.4F + rand.nextFloat() > 0.9F ? 0.6F : 0.0F; float pitch = 0.6F + rand.nextFloat() * 0.4F; - world.playSound(null, pos, SoundEvents.PARTICLE_SOUL_ESCAPE, SoundCategory.BLOCKS, vol, pitch); + level.playSound(null, worldPosition, SoundEvents.SOUL_ESCAPE, SoundCategory.BLOCKS, vol, pitch); } } diff --git a/src/main/java/com/simibubi/create/content/curiosities/bell/PeculiarBellBlock.java b/src/main/java/com/simibubi/create/content/curiosities/bell/PeculiarBellBlock.java index 8033bc7b6..32bf92fd6 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/bell/PeculiarBellBlock.java +++ b/src/main/java/com/simibubi/create/content/curiosities/bell/PeculiarBellBlock.java @@ -19,6 +19,8 @@ import net.minecraft.world.IBlockReader; import net.minecraft.world.IWorld; import net.minecraft.world.World; +import net.minecraft.block.AbstractBlock.Properties; + public class PeculiarBellBlock extends AbstractBellBlock { public PeculiarBellBlock(Properties properties) { @@ -46,15 +48,15 @@ public class PeculiarBellBlock extends AbstractBellBlock if (newState == null) return null; - World world = ctx.getWorld(); - BlockPos pos = ctx.getPos(); - return tryConvert(world, pos, newState, world.getBlockState(pos.offset(Direction.DOWN))); + World world = ctx.getLevel(); + BlockPos pos = ctx.getClickedPos(); + return tryConvert(world, pos, newState, world.getBlockState(pos.relative(Direction.DOWN))); } @Override - public BlockState updatePostPlacement(BlockState state, Direction facing, BlockState facingState, IWorld world, + public BlockState updateShape(BlockState state, Direction facing, BlockState facingState, IWorld world, BlockPos currentPos, BlockPos facingPos) { - BlockState newState = super.updatePostPlacement(state, facing, facingState, world, currentPos, facingPos); + BlockState newState = super.updateShape(state, facing, facingState, world, currentPos, facingPos); if (facing != Direction.DOWN) return newState; @@ -66,16 +68,16 @@ public class PeculiarBellBlock extends AbstractBellBlock if (!(Blocks.SOUL_FIRE.is(underBlock) || Blocks.SOUL_CAMPFIRE.is(underBlock))) return state; - if (world.isRemote()) { + if (world.isClientSide()) { spawnConversionParticles(world, pos); } else if (world instanceof World) { AllSoundEvents.HAUNTED_BELL_CONVERT.playOnServer((World) world, pos); } return AllBlocks.HAUNTED_BELL.getDefaultState() - .with(HauntedBellBlock.field_220133_a, state.get(field_220133_a)) - .with(HauntedBellBlock.field_220134_b, state.get(field_220134_b)) - .with(HauntedBellBlock.POWERED, state.get(POWERED)); + .setValue(HauntedBellBlock.FACING, state.getValue(FACING)) + .setValue(HauntedBellBlock.ATTACHMENT, state.getValue(ATTACHMENT)) + .setValue(HauntedBellBlock.POWERED, state.getValue(POWERED)); } public void spawnConversionParticles(IWorld world, BlockPos blockPos) { @@ -84,8 +86,8 @@ public class PeculiarBellBlock extends AbstractBellBlock for (int i = 0; i < num; i++) { float pitch = random.nextFloat() * 120 - 90; float yaw = random.nextFloat() * 360; - Vector3d vel = Vector3d.fromPitchYaw(pitch, yaw).scale(random.nextDouble() * 0.1 + 0.1); - Vector3d pos = Vector3d.ofCenter(blockPos); + Vector3d vel = Vector3d.directionFromRotation(pitch, yaw).scale(random.nextDouble() * 0.1 + 0.1); + Vector3d pos = Vector3d.atCenterOf(blockPos); world.addParticle(ParticleTypes.SOUL_FIRE_FLAME, pos.x, pos.y, pos.z, vel.x, vel.y, vel.z); } } diff --git a/src/main/java/com/simibubi/create/content/curiosities/bell/SoulBaseParticle.java b/src/main/java/com/simibubi/create/content/curiosities/bell/SoulBaseParticle.java index 232c4211c..b55cf3908 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/bell/SoulBaseParticle.java +++ b/src/main/java/com/simibubi/create/content/curiosities/bell/SoulBaseParticle.java @@ -10,6 +10,8 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.vector.Quaternion; import net.minecraft.util.math.vector.Vector3f; +import com.simibubi.create.content.curiosities.bell.BasicParticleData.IBasicParticleFactory; + public class SoulBaseParticle extends CustomRotationParticle { private final IAnimatedSprite animatedSprite; @@ -18,26 +20,26 @@ public class SoulBaseParticle extends CustomRotationParticle { IAnimatedSprite spriteSet) { super(worldIn, x, y, z, spriteSet, 0); this.animatedSprite = spriteSet; - this.particleScale = 0.5f; - this.setSize(this.particleScale, this.particleScale); - this.loopLength = 16 + (int) (this.rand.nextFloat() * 2f - 1f); - this.maxAge = (int) (90.0F / (this.rand.nextFloat() * 0.36F + 0.64F)); + this.quadSize = 0.5f; + this.setSize(this.quadSize, this.quadSize); + this.loopLength = 16 + (int) (this.random.nextFloat() * 2f - 1f); + this.lifetime = (int) (90.0F / (this.random.nextFloat() * 0.36F + 0.64F)); this.selectSpriteLoopingWithAge(animatedSprite); - this.field_21507 = true; // disable movement + this.stoppedByCollision = true; // disable movement } @Override public void tick() { selectSpriteLoopingWithAge(animatedSprite); - BlockPos pos = new BlockPos(posX, posY, posZ); - if (age++ >= maxAge || !SoulPulseEffect.isDark(world, pos)) - setExpired(); + BlockPos pos = new BlockPos(x, y, z); + if (age++ >= lifetime || !SoulPulseEffect.isDark(level, pos)) + remove(); } @Override public Quaternion getCustomRotation(ActiveRenderInfo camera, float partialTicks) { - return Vector3f.POSITIVE_X.getDegreesQuaternion(90); + return Vector3f.XP.rotationDegrees(90); } public static class Data extends BasicParticleData { diff --git a/src/main/java/com/simibubi/create/content/curiosities/bell/SoulParticle.java b/src/main/java/com/simibubi/create/content/curiosities/bell/SoulParticle.java index d2abd7336..2fb9d4c76 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/bell/SoulParticle.java +++ b/src/main/java/com/simibubi/create/content/curiosities/bell/SoulParticle.java @@ -12,6 +12,8 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.vector.Quaternion; import net.minecraft.util.math.vector.Vector3f; +import com.simibubi.create.content.curiosities.bell.BasicParticleData.IBasicParticleFactory; + public class SoulParticle extends CustomRotationParticle { private final IAnimatedSprite animatedSprite; @@ -43,23 +45,23 @@ public class SoulParticle extends CustomRotationParticle { IAnimatedSprite spriteSet, IParticleData data) { super(worldIn, x, y, z, spriteSet, 0); this.animatedSprite = spriteSet; - this.particleScale = 0.5f; - this.setSize(this.particleScale, this.particleScale); + this.quadSize = 0.5f; + this.setSize(this.quadSize, this.quadSize); - this.loopLength = loopFrames + (int) (this.rand.nextFloat() * 5f - 4f); - this.startTicks = startFrames + (int) (this.rand.nextFloat() * 5f - 4f); - this.endTicks = endFrames + (int) (this.rand.nextFloat() * 5f - 4f); - this.numLoops = (int) (1f + this.rand.nextFloat() * 2f); + this.loopLength = loopFrames + (int) (this.random.nextFloat() * 5f - 4f); + this.startTicks = startFrames + (int) (this.random.nextFloat() * 5f - 4f); + this.endTicks = endFrames + (int) (this.random.nextFloat() * 5f - 4f); + this.numLoops = (int) (1f + this.random.nextFloat() * 2f); this.setFrame(0); - this.field_21507 = true; // disable movement - this.mirror = this.rand.nextBoolean(); + this.stoppedByCollision = true; // disable movement + this.mirror = this.random.nextBoolean(); this.isPerimeter = data instanceof PerimeterData; this.isExpandingPerimeter = data instanceof ExpandingPerimeterData; this.animationStage = !isPerimeter ? new StartAnimation(this) : new PerimeterAnimation(this); if (isPerimeter) { - prevPosY = posY -= .5f - 1 / 128f; + yo = y -= .5f - 1 / 128f; totalFrames = perimeterFrames; isVisible = false; } @@ -70,22 +72,22 @@ public class SoulParticle extends CustomRotationParticle { animationStage.tick(); animationStage = animationStage.getNext(); - BlockPos pos = new BlockPos(posX, posY, posZ); + BlockPos pos = new BlockPos(x, y, z); if (animationStage == null) - setExpired(); - if (!SoulPulseEffect.isDark(world, pos)) { + remove(); + if (!SoulPulseEffect.isDark(level, pos)) { isVisible = true; if (!isPerimeter) - setExpired(); + remove(); } else if (isPerimeter) isVisible = false; } @Override - public void buildGeometry(IVertexBuilder builder, ActiveRenderInfo camera, float partialTicks) { + public void render(IVertexBuilder builder, ActiveRenderInfo camera, float partialTicks) { if (!isVisible) return; - super.buildGeometry(builder, camera, partialTicks); + super.render(builder, camera, partialTicks); } public void setFrame(int frame) { @@ -96,8 +98,8 @@ public class SoulParticle extends CustomRotationParticle { @Override public Quaternion getCustomRotation(ActiveRenderInfo camera, float partialTicks) { if (isPerimeter) - return Vector3f.POSITIVE_X.getDegreesQuaternion(90); - return new Quaternion(0, -camera.getYaw(), 0, true); + return Vector3f.XP.rotationDegrees(90); + return new Quaternion(0, -camera.getYRot(), 0, true); } public static class Data extends BasicParticleData { diff --git a/src/main/java/com/simibubi/create/content/curiosities/bell/SoulPulseEffect.java b/src/main/java/com/simibubi/create/content/curiosities/bell/SoulPulseEffect.java index a4ba9164d..437555c64 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/bell/SoulPulseEffect.java +++ b/src/main/java/com/simibubi/create/content/curiosities/bell/SoulPulseEffect.java @@ -69,13 +69,13 @@ public class SoulPulseEffect { if (world == null) return new ArrayList<>(); - return getLayer(currentLayerIdx()).map(p -> p.add(pos)) + return getLayer(currentLayerIdx()).map(p -> p.offset(pos)) .filter(p -> canSpawnSoulAt(world, p, true)) .collect(Collectors.toList()); } public static boolean isDark(World world, BlockPos at) { - return world.getLightLevel(LightType.BLOCK, at) < 8; + return world.getBrightness(LightType.BLOCK, at) < 8; } public static boolean canSpawnSoulAt(World world, BlockPos at, boolean ignoreLight) { @@ -85,7 +85,7 @@ public class SoulPulseEffect { return world != null && WorldEntitySpawner - .canCreatureTypeSpawnAtLocation(EntitySpawnPlacementRegistry.PlacementType.ON_GROUND, world, at, dummy) + .isSpawnPositionOk(EntitySpawnPlacementRegistry.PlacementType.ON_GROUND, world, at, dummy) && (ignoreLight || isDark(world, at)) && world .getBlockCollisions(null, @@ -96,17 +96,17 @@ public class SoulPulseEffect { } public void spawnParticles(World world, BlockPos at) { - if (world == null || !world.isRemote) + if (world == null || !world.isClientSide) return; - Vector3d p = Vector3d.of(at); + Vector3d p = Vector3d.atLowerCornerOf(at); if (canOverlap()) - world.addOptionalParticle(((int) Math.round(VecHelper.getCenterOf(pos) + world.addAlwaysVisibleParticle(((int) Math.round(VecHelper.getCenterOf(pos) .distanceTo(VecHelper.getCenterOf(at)))) >= distance ? new SoulParticle.PerimeterData() : new ExpandingPerimeterData(), p.x + 0.5, p.y + 0.5, p.z + 0.5, 0, 0, 0); - if (world.getLightLevel(LightType.BLOCK, at) < 8) { - world.addOptionalParticle(new SoulParticle.Data(), p.x + 0.5, p.y + 0.5, p.z + 0.5, 0, 0, 0); + if (world.getBrightness(LightType.BLOCK, at) < 8) { + world.addAlwaysVisibleParticle(new SoulParticle.Data(), p.x + 0.5, p.y + 0.5, p.z + 0.5, 0, 0, 0); world.addParticle(new SoulBaseParticle.Data(), p.x + 0.5, p.y + 0.01, p.z + 0.5, 0, 0, 0); } } @@ -121,7 +121,7 @@ public class SoulPulseEffect { for (int z = 0; z < MAX_DISTANCE; z++) { BlockPos candidate = new BlockPos(x, y, z); - int dist = (int) Math.round(Math.sqrt(candidate.distanceSq(0, 0, 0, false))); + int dist = (int) Math.round(Math.sqrt(candidate.distSqr(0, 0, 0, false))); if (dist > MAX_DISTANCE) continue; if (dist <= 0) diff --git a/src/main/java/com/simibubi/create/content/curiosities/symmetry/SymmetryEffectPacket.java b/src/main/java/com/simibubi/create/content/curiosities/symmetry/SymmetryEffectPacket.java index 5ad5d2c63..90609b6a3 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/symmetry/SymmetryEffectPacket.java +++ b/src/main/java/com/simibubi/create/content/curiosities/symmetry/SymmetryEffectPacket.java @@ -43,7 +43,7 @@ public class SymmetryEffectPacket extends SimplePacketBase { public void handle(Supplier ctx) { ctx.get().enqueueWork(() -> DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> { - if (Minecraft.getInstance().player.getPositionVec().distanceTo(Vector3d.of(mirror)) > 100) + if (Minecraft.getInstance().player.position().distanceTo(Vector3d.atLowerCornerOf(mirror)) > 100) return; for (BlockPos to : positions) SymmetryHandler.drawEffect(mirror, to); diff --git a/src/main/java/com/simibubi/create/content/curiosities/symmetry/SymmetryHandler.java b/src/main/java/com/simibubi/create/content/curiosities/symmetry/SymmetryHandler.java index d21926abf..644999081 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/symmetry/SymmetryHandler.java +++ b/src/main/java/com/simibubi/create/content/curiosities/symmetry/SymmetryHandler.java @@ -46,19 +46,19 @@ public class SymmetryHandler { @SubscribeEvent(priority = EventPriority.LOWEST) public static void onBlockPlaced(EntityPlaceEvent event) { if (event.getWorld() - .isRemote()) + .isClientSide()) return; if (!(event.getEntity() instanceof PlayerEntity)) return; PlayerEntity player = (PlayerEntity) event.getEntity(); PlayerInventory inv = player.inventory; - for (int i = 0; i < PlayerInventory.getHotbarSize(); i++) { - if (!inv.getStackInSlot(i) + for (int i = 0; i < PlayerInventory.getSelectionSize(); i++) { + if (!inv.getItem(i) .isEmpty() - && inv.getStackInSlot(i) + && inv.getItem(i) .getItem() == AllItems.WAND_OF_SYMMETRY.get()) { - SymmetryWandItem.apply(player.world, inv.getStackInSlot(i), player, event.getPos(), + SymmetryWandItem.apply(player.level, inv.getItem(i), player, event.getPos(), event.getPlacedBlock()); } } @@ -67,15 +67,15 @@ public class SymmetryHandler { @SubscribeEvent(priority = EventPriority.LOWEST) public static void onBlockDestroyed(BreakEvent event) { if (event.getWorld() - .isRemote()) + .isClientSide()) return; PlayerEntity player = event.getPlayer(); PlayerInventory inv = player.inventory; - for (int i = 0; i < PlayerInventory.getHotbarSize(); i++) { - if (!inv.getStackInSlot(i) - .isEmpty() && AllItems.WAND_OF_SYMMETRY.isIn(inv.getStackInSlot(i))) { - SymmetryWandItem.remove(player.world, inv.getStackInSlot(i), player, event.getPos()); + for (int i = 0; i < PlayerInventory.getSelectionSize(); i++) { + if (!inv.getItem(i) + .isEmpty() && AllItems.WAND_OF_SYMMETRY.isIn(inv.getItem(i))) { + SymmetryWandItem.remove(player.level, inv.getItem(i), player, event.getPos()); } } } @@ -86,8 +86,8 @@ public class SymmetryHandler { Minecraft mc = Minecraft.getInstance(); ClientPlayerEntity player = mc.player; - for (int i = 0; i < PlayerInventory.getHotbarSize(); i++) { - ItemStack stackInSlot = player.inventory.getStackInSlot(i); + for (int i = 0; i < PlayerInventory.getSelectionSize(); i++) { + ItemStack stackInSlot = player.inventory.getItem(i); if (!AllItems.WAND_OF_SYMMETRY.isIn(stackInSlot)) continue; if (!SymmetryWandItem.isEnabled(stackInSlot)) @@ -103,29 +103,29 @@ public class SymmetryHandler { yShift = MathHelper.sin((float) (AnimationTickHolder.getRenderTime() * speed)) / 5f; IRenderTypeBuffer.Impl buffer = Minecraft.getInstance() - .getBufferBuilders() - .getEntityVertexConsumers(); - ActiveRenderInfo info = mc.gameRenderer.getActiveRenderInfo(); - Vector3d view = info.getProjectedView(); + .renderBuffers() + .bufferSource(); + ActiveRenderInfo info = mc.gameRenderer.getMainCamera(); + Vector3d view = info.getPosition(); MatrixStack ms = event.getMatrixStack(); - ms.push(); - ms.translate(-view.getX(), -view.getY(), -view.getZ()); + ms.pushPose(); + ms.translate(-view.x(), -view.y(), -view.z()); ms.translate(pos.getX(), pos.getY(), pos.getZ()); ms.translate(0, yShift + .2f, 0); mirror.applyModelTransform(ms); IBakedModel model = mirror.getModel() .get(); - IVertexBuilder builder = buffer.getBuffer(RenderType.getSolid()); + IVertexBuilder builder = buffer.getBuffer(RenderType.solid()); - mc.getBlockRendererDispatcher() - .getBlockModelRenderer() - .renderModel(player.world, model, Blocks.AIR.getDefaultState(), pos, ms, builder, true, - player.world.getRandom(), MathHelper.getPositionRandom(pos), OverlayTexture.DEFAULT_UV, + mc.getBlockRenderer() + .getModelRenderer() + .renderModel(player.level, model, Blocks.AIR.defaultBlockState(), pos, ms, builder, true, + player.level.getRandom(), MathHelper.getSeed(pos), OverlayTexture.NO_OVERLAY, EmptyModelData.INSTANCE); - buffer.draw(); - ms.pop(); + buffer.endBatch(); + ms.popPose(); } } @@ -137,16 +137,16 @@ public class SymmetryHandler { Minecraft mc = Minecraft.getInstance(); ClientPlayerEntity player = mc.player; - if (mc.world == null) + if (mc.level == null) return; - if (mc.isGamePaused()) + if (mc.isPaused()) return; tickCounter++; if (tickCounter % 10 == 0) { - for (int i = 0; i < PlayerInventory.getHotbarSize(); i++) { - ItemStack stackInSlot = player.inventory.getStackInSlot(i); + for (int i = 0; i < PlayerInventory.getSelectionSize(); i++) { + ItemStack stackInSlot = player.inventory.getItem(i); if (stackInSlot != null && AllItems.WAND_OF_SYMMETRY.isIn(stackInSlot) && SymmetryWandItem.isEnabled(stackInSlot)) { @@ -162,7 +162,7 @@ public class SymmetryHandler { Vector3d pos = mirror.getPosition() .add(0.5 + offsetX, 1 / 4d, 0.5 + offsetZ); Vector3d speed = new Vector3d(0, r.nextDouble() * 1 / 8f, 0); - mc.world.addParticle(ParticleTypes.END_ROD, pos.x, pos.y, pos.z, speed.x, speed.y, speed.z); + mc.level.addParticle(ParticleTypes.END_ROD, pos.x, pos.y, pos.z, speed.x, speed.y, speed.z); } } } @@ -171,8 +171,8 @@ public class SymmetryHandler { public static void drawEffect(BlockPos from, BlockPos to) { double density = 0.8f; - Vector3d start = Vector3d.of(from).add(0.5, 0.5, 0.5); - Vector3d end = Vector3d.of(to).add(0.5, 0.5, 0.5); + Vector3d start = Vector3d.atLowerCornerOf(from).add(0.5, 0.5, 0.5); + Vector3d end = Vector3d.atLowerCornerOf(to).add(0.5, 0.5, 0.5); Vector3d diff = end.subtract(start); Vector3d step = diff.normalize() @@ -184,18 +184,18 @@ public class SymmetryHandler { Vector3d pos = start.add(step.scale(i)); Vector3d speed = new Vector3d(0, r.nextDouble() * -40f, 0); - Minecraft.getInstance().world.addParticle(new RedstoneParticleData(1, 1, 1, 1), pos.x, pos.y, pos.z, + Minecraft.getInstance().level.addParticle(new RedstoneParticleData(1, 1, 1, 1), pos.x, pos.y, pos.z, speed.x, speed.y, speed.z); } Vector3d speed = new Vector3d(0, r.nextDouble() * 1 / 32f, 0); Vector3d pos = start.add(step.scale(2)); - Minecraft.getInstance().world.addParticle(ParticleTypes.END_ROD, pos.x, pos.y, pos.z, speed.x, speed.y, + Minecraft.getInstance().level.addParticle(ParticleTypes.END_ROD, pos.x, pos.y, pos.z, speed.x, speed.y, speed.z); speed = new Vector3d(0, r.nextDouble() * 1 / 32f, 0); pos = start.add(step.scale(steps)); - Minecraft.getInstance().world.addParticle(ParticleTypes.END_ROD, pos.x, pos.y, pos.z, speed.x, speed.y, + Minecraft.getInstance().level.addParticle(ParticleTypes.END_ROD, pos.x, pos.y, pos.z, speed.x, speed.y, speed.z); } diff --git a/src/main/java/com/simibubi/create/content/curiosities/symmetry/SymmetryWandItem.java b/src/main/java/com/simibubi/create/content/curiosities/symmetry/SymmetryWandItem.java index 9ef60eaa1..b127efcb4 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/symmetry/SymmetryWandItem.java +++ b/src/main/java/com/simibubi/create/content/curiosities/symmetry/SymmetryWandItem.java @@ -48,46 +48,48 @@ import net.minecraftforge.event.ForgeEventFactory; import net.minecraftforge.fml.DistExecutor; import net.minecraftforge.fml.network.PacketDistributor; +import net.minecraft.item.Item.Properties; + public class SymmetryWandItem extends Item { public static final String SYMMETRY = "symmetry"; private static final String ENABLE = "enable"; public SymmetryWandItem(Properties properties) { - super(properties.maxStackSize(1) + super(properties.stacksTo(1) .rarity(Rarity.UNCOMMON)); } @Nonnull @Override - public ActionResultType onItemUse(ItemUseContext context) { + public ActionResultType useOn(ItemUseContext context) { PlayerEntity player = context.getPlayer(); - BlockPos pos = context.getPos(); + BlockPos pos = context.getClickedPos(); if (player == null) return ActionResultType.PASS; - player.getCooldownTracker() - .setCooldown(this, 5); - ItemStack wand = player.getHeldItem(context.getHand()); + player.getCooldowns() + .addCooldown(this, 5); + ItemStack wand = player.getItemInHand(context.getHand()); checkNBT(wand); // Shift -> open GUI - if (player.isSneaking()) { - if (player.world.isRemote) { + if (player.isShiftKeyDown()) { + if (player.level.isClientSide) { DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> { openWandGUI(wand, context.getHand()); }); - player.getCooldownTracker() - .setCooldown(this, 5); + player.getCooldowns() + .addCooldown(this, 5); } return ActionResultType.SUCCESS; } - if (context.getWorld().isRemote || context.getHand() != Hand.MAIN_HAND) + if (context.getLevel().isClientSide || context.getHand() != Hand.MAIN_HAND) return ActionResultType.SUCCESS; CompoundNBT compound = wand.getTag() .getCompound(SYMMETRY); - pos = pos.offset(context.getFace()); + pos = pos.relative(context.getClickedFace()); SymmetryMirror previousElement = SymmetryMirror.fromNBT(compound); // No Shift -> Make / Move Mirror @@ -98,7 +100,7 @@ public class SymmetryWandItem extends Item { if (previousElement instanceof EmptyMirror) { newElement.setOrientation( - (player.getHorizontalFacing() == Direction.NORTH || player.getHorizontalFacing() == Direction.SOUTH) + (player.getDirection() == Direction.NORTH || player.getDirection() == Direction.SOUTH) ? PlaneMirror.Align.XY.ordinal() : PlaneMirror.Align.YZ.ordinal()); newElement.enable = true; @@ -110,13 +112,13 @@ public class SymmetryWandItem extends Item { if (previousElement instanceof PlaneMirror) { previousElement.setOrientation( - (player.getHorizontalFacing() == Direction.NORTH || player.getHorizontalFacing() == Direction.SOUTH) + (player.getDirection() == Direction.NORTH || player.getDirection() == Direction.SOUTH) ? PlaneMirror.Align.XY.ordinal() : PlaneMirror.Align.YZ.ordinal()); } if (previousElement instanceof CrossPlaneMirror) { - float rotation = player.getRotationYawHead(); + float rotation = player.getYHeadRot(); float abs = Math.abs(rotation % 90); boolean diagonal = abs > 22 && abs < 45 + 22; previousElement @@ -130,23 +132,23 @@ public class SymmetryWandItem extends Item { wand.getTag() .put(SYMMETRY, compound); - player.setHeldItem(context.getHand(), wand); + player.setItemInHand(context.getHand(), wand); return ActionResultType.SUCCESS; } @Override - public ActionResult onItemRightClick(World worldIn, PlayerEntity playerIn, Hand handIn) { - ItemStack wand = playerIn.getHeldItem(handIn); + public ActionResult use(World worldIn, PlayerEntity playerIn, Hand handIn) { + ItemStack wand = playerIn.getItemInHand(handIn); checkNBT(wand); // Shift -> Open GUI - if (playerIn.isSneaking()) { - if (worldIn.isRemote) { + if (playerIn.isShiftKeyDown()) { + if (worldIn.isClientSide) { DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> { - openWandGUI(playerIn.getHeldItem(handIn), handIn); + openWandGUI(playerIn.getItemInHand(handIn), handIn); }); - playerIn.getCooldownTracker() - .setCooldown(this, 5); + playerIn.getCooldowns() + .addCooldown(this, 5); } return new ActionResult(ActionResultType.SUCCESS, wand); } @@ -189,7 +191,7 @@ public class SymmetryWandItem extends Item { checkNBT(wand); if (!isEnabled(wand)) return; - if (!BlockItem.BLOCK_TO_ITEM.containsKey(block.getBlock())) + if (!BlockItem.BY_BLOCK.containsKey(block.getBlock())) return; Map blockSet = new HashMap<>(); @@ -198,7 +200,7 @@ public class SymmetryWandItem extends Item { .getCompound(SYMMETRY)); Vector3d mirrorPos = symmetry.getPosition(); - if (mirrorPos.distanceTo(Vector3d.of(pos)) > AllConfigs.SERVER.curiosities.maxSymmetryWandRange.get()) + if (mirrorPos.distanceTo(Vector3d.atLowerCornerOf(pos)) > AllConfigs.SERVER.curiosities.maxSymmetryWandRange.get()) return; if (!player.isCreative() && isHoldingBlock(player, block) && BlockHelper.findAndRemoveInInventory(block, player, 1) == 0) @@ -213,14 +215,14 @@ public class SymmetryWandItem extends Item { if (position.equals(pos)) continue; - if (world.canPlace(block, position, ISelectionContext.forEntity(player))) { + if (world.isUnobstructed(block, position, ISelectionContext.of(player))) { BlockState blockState = blockSet.get(position); for (Direction face : Iterate.directions) - blockState = blockState.updatePostPlacement(face, world.getBlockState(position.offset(face)), world, - position, position.offset(face)); + blockState = blockState.updateShape(face, world.getBlockState(position.relative(face)), world, + position, position.relative(face)); if (player.isCreative()) { - world.setBlockState(position, blockState); + world.setBlockAndUpdate(position, blockState); targets.add(position); continue; } @@ -229,7 +231,7 @@ public class SymmetryWandItem extends Item { if (!toReplace.getMaterial() .isReplaceable()) continue; - if (toReplace.getBlockHardness(world, position) == -1) + if (toReplace.getDestroySpeed(world, position) == -1) continue; if (AllBlocks.CART_ASSEMBLER.has(blockState)) { @@ -243,10 +245,10 @@ public class SymmetryWandItem extends Item { continue; } - BlockSnapshot blocksnapshot = BlockSnapshot.create(world.getRegistryKey(), world, position); + BlockSnapshot blocksnapshot = BlockSnapshot.create(world.dimension(), world, position); FluidState ifluidstate = world.getFluidState(position); - world.setBlockState(position, ifluidstate.getBlockState(), BlockFlags.UPDATE_NEIGHBORS); - world.setBlockState(position, blockState); + world.setBlock(position, ifluidstate.createLegacyBlock(), BlockFlags.UPDATE_NEIGHBORS); + world.setBlockAndUpdate(position, blockState); CompoundNBT wandNbt = wand.getOrCreateTag(); wandNbt.putBoolean("Simulate", true); @@ -267,14 +269,14 @@ public class SymmetryWandItem extends Item { private static boolean isHoldingBlock(PlayerEntity player, BlockState block) { ItemStack itemBlock = BlockHelper.getRequiredItem(block); - return player.getHeldItemMainhand() - .isItemEqual(itemBlock) - || player.getHeldItemOffhand() - .isItemEqual(itemBlock); + return player.getMainHandItem() + .sameItem(itemBlock) + || player.getOffhandItem() + .sameItem(itemBlock); } public static void remove(World world, ItemStack wand, PlayerEntity player, BlockPos pos) { - BlockState air = Blocks.AIR.getDefaultState(); + BlockState air = Blocks.AIR.defaultBlockState(); BlockState ogBlock = world.getBlockState(pos); checkNBT(wand); if (!isEnabled(wand)) @@ -286,7 +288,7 @@ public class SymmetryWandItem extends Item { .getCompound(SYMMETRY)); Vector3d mirrorPos = symmetry.getPosition(); - if (mirrorPos.distanceTo(Vector3d.of(pos)) > AllConfigs.SERVER.curiosities.maxSymmetryWandRange.get()) + if (mirrorPos.distanceTo(Vector3d.atLowerCornerOf(pos)) > AllConfigs.SERVER.curiosities.maxSymmetryWandRange.get()) return; symmetry.process(blockSet); @@ -305,16 +307,16 @@ public class SymmetryWandItem extends Item { BlockState blockstate = world.getBlockState(position); if (blockstate.getMaterial() != Material.AIR) { targets.add(position); - world.playEvent(2001, position, Block.getStateId(blockstate)); - world.setBlockState(position, air, 3); + world.levelEvent(2001, position, Block.getId(blockstate)); + world.setBlock(position, air, 3); if (!player.isCreative()) { - if (!player.getHeldItemMainhand() + if (!player.getMainHandItem() .isEmpty()) - player.getHeldItemMainhand() - .onBlockDestroyed(world, blockstate, position, player); - TileEntity tileentity = blockstate.hasTileEntity() ? world.getTileEntity(position) : null; - Block.spawnDrops(blockstate, world, pos, tileentity, player, player.getHeldItemMainhand()); // Add fortune, silk touch and other loot modifiers + player.getMainHandItem() + .mineBlock(world, blockstate, position, player); + TileEntity tileentity = blockstate.hasTileEntity() ? world.getBlockEntity(position) : null; + Block.dropResources(blockstate, world, pos, tileentity, player, player.getMainHandItem()); // Add fortune, silk touch and other loot modifiers } } } diff --git a/src/main/java/com/simibubi/create/content/curiosities/symmetry/SymmetryWandScreen.java b/src/main/java/com/simibubi/create/content/curiosities/symmetry/SymmetryWandScreen.java index dd9a4d638..7760f56b2 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/symmetry/SymmetryWandScreen.java +++ b/src/main/java/com/simibubi/create/content/curiosities/symmetry/SymmetryWandScreen.java @@ -75,7 +75,7 @@ public class SymmetryWandScreen extends AbstractSimiScreen { int state = currentElement instanceof TriplePlaneMirror ? 2 : currentElement instanceof CrossPlaneMirror ? 1 : 0; areaType = new SelectionScrollInput(x + 45, y + 21, 109, 18).forOptions(SymmetryMirror.getMirrors()) - .titled(mirrorType.copy()) + .titled(mirrorType.plainCopy()) .writingTo(labelType) .setState(state); @@ -111,7 +111,7 @@ public class SymmetryWandScreen extends AbstractSimiScreen { widgets.remove(areaAlign); areaAlign = new SelectionScrollInput(x + 45, y + 43, 109, 18).forOptions(element.getAlignToolTips()) - .titled(orientation.copy()) + .titled(orientation.plainCopy()) .writingTo(labelAlign) .setState(element.getOrientationIndex()) .calling(element::setOrientation); @@ -125,7 +125,7 @@ public class SymmetryWandScreen extends AbstractSimiScreen { int y = guiTop; background.draw(ms, this, x, y); - textRenderer.draw(ms, wand.getDisplayName(), x + 11, y + 4, 0x6B3802); + font.draw(ms, wand.getHoverName(), x + 11, y + 4, 0x6B3802); renderBlock(ms, x, y); GuiGameElement.of(wand) @@ -136,33 +136,33 @@ public class SymmetryWandScreen extends AbstractSimiScreen { } protected void renderBlock(MatrixStack ms, int x, int y) { - ms.push(); + ms.pushPose(); ms.translate(x + 26, y + 39, 20); ms.scale(16, 16, 16); - ms.multiply(new Vector3f(.3f, 1f, 0f).getDegreesQuaternion(-22.5f)); + ms.mulPose(new Vector3f(.3f, 1f, 0f).rotationDegrees(-22.5f)); currentElement.applyModelTransform(ms); // RenderSystem.multMatrix(ms.peek().getModel()); GuiGameElement.of(currentElement.getModel()) .render(ms); - ms.pop(); + ms.popPose(); } @Override public void removed() { - ItemStack heldItem = client.player.getHeldItem(hand); + ItemStack heldItem = minecraft.player.getItemInHand(hand); CompoundNBT compound = heldItem.getTag(); compound.put(SymmetryWandItem.SYMMETRY, currentElement.writeToNbt()); heldItem.setTag(compound); AllPackets.channel.send(PacketDistributor.SERVER.noArg(), new NbtPacket(heldItem, hand)); - client.player.setHeldItem(hand, heldItem); + minecraft.player.setItemInHand(hand, heldItem); super.removed(); } @Override public boolean mouseClicked(double x, double y, int button) { if (confirmButton.isHovered()) { - client.player.closeScreen(); + minecraft.player.closeContainer(); return true; } diff --git a/src/main/java/com/simibubi/create/content/curiosities/symmetry/client/SymmetryWandItemRenderer.java b/src/main/java/com/simibubi/create/content/curiosities/symmetry/client/SymmetryWandItemRenderer.java index 0c0461daf..0f71a9cde 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/symmetry/client/SymmetryWandItemRenderer.java +++ b/src/main/java/com/simibubi/create/content/curiosities/symmetry/client/SymmetryWandItemRenderer.java @@ -27,7 +27,7 @@ public class SymmetryWandItemRenderer extends CustomRenderedItemModelRenderer BlueprintItem.assignCompleteRecipe(c.ghostInventory, r)); } }); diff --git a/src/main/java/com/simibubi/create/content/curiosities/tools/BlueprintContainer.java b/src/main/java/com/simibubi/create/content/curiosities/tools/BlueprintContainer.java index eb71d907a..bf08dde69 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/tools/BlueprintContainer.java +++ b/src/main/java/com/simibubi/create/content/curiosities/tools/BlueprintContainer.java @@ -60,14 +60,14 @@ public class BlueprintContainer extends GhostItemContainer { } public void onCraftMatrixChanged() { - if (contentHolder.getBlueprintWorld().isRemote) + if (contentHolder.getBlueprintWorld().isClientSide) return; ServerPlayerEntity serverplayerentity = (ServerPlayerEntity) player; CraftingInventory craftingInventory = new BlueprintCraftingInventory(this, ghostInventory); Optional optional = player.getServer() .getRecipeManager() - .getRecipe(IRecipeType.CRAFTING, craftingInventory, player.getEntityWorld()); + .getRecipeFor(IRecipeType.CRAFTING, craftingInventory, player.getCommandSenderWorld()); if (!optional.isPresent()) { if (ghostInventory.getStackInSlot(9) @@ -77,23 +77,23 @@ public class BlueprintContainer extends GhostItemContainer { return; ghostInventory.setStackInSlot(9, ItemStack.EMPTY); - serverplayerentity.connection.sendPacket(new SSetSlotPacket(windowId, 36 + 9, ItemStack.EMPTY)); + serverplayerentity.connection.send(new SSetSlotPacket(containerId, 36 + 9, ItemStack.EMPTY)); contentHolder.inferredIcon = false; return; } ICraftingRecipe icraftingrecipe = optional.get(); - ItemStack itemstack = icraftingrecipe.getCraftingResult(craftingInventory); + ItemStack itemstack = icraftingrecipe.assemble(craftingInventory); ghostInventory.setStackInSlot(9, itemstack); contentHolder.inferredIcon = true; ItemStack toSend = itemstack.copy(); toSend.getOrCreateTag() .putBoolean("InferredFromRecipe", true); - serverplayerentity.connection.sendPacket(new SSetSlotPacket(windowId, 36 + 9, toSend)); + serverplayerentity.connection.send(new SSetSlotPacket(containerId, 36 + 9, toSend)); } @Override - public void putStackInSlot(int p_75141_1_, ItemStack p_75141_2_) { + public void setItem(int p_75141_1_, ItemStack p_75141_2_) { if (p_75141_1_ == 36 + 9) { if (p_75141_2_.hasTag()) { contentHolder.inferredIcon = p_75141_2_.getTag() @@ -103,7 +103,7 @@ public class BlueprintContainer extends GhostItemContainer { } else contentHolder.inferredIcon = false; } - super.putStackInSlot(p_75141_1_, p_75141_2_); + super.setItem(p_75141_1_, p_75141_2_); } @Override @@ -125,7 +125,7 @@ public class BlueprintContainer extends GhostItemContainer { protected BlueprintSection createOnClient(PacketBuffer extraData) { int entityID = extraData.readVarInt(); int section = extraData.readVarInt(); - Entity entityByID = Minecraft.getInstance().world.getEntityByID(entityID); + Entity entityByID = Minecraft.getInstance().level.getEntity(entityID); if (!(entityByID instanceof BlueprintEntity)) return null; BlueprintEntity blueprintEntity = (BlueprintEntity) entityByID; @@ -134,7 +134,7 @@ public class BlueprintContainer extends GhostItemContainer { } @Override - public boolean canInteractWith(PlayerEntity player) { + public boolean stillValid(PlayerEntity player) { return contentHolder != null && contentHolder.canPlayerUse(player); } @@ -145,7 +145,7 @@ public class BlueprintContainer extends GhostItemContainer { for (int y = 0; y < 3; y++) { for (int x = 0; x < 3; x++) { ItemStack stack = items.getStackInSlot(y * 3 + x); - setInventorySlotContents(y * 3 + x, stack == null ? ItemStack.EMPTY : stack.copy()); + setItem(y * 3 + x, stack == null ? ItemStack.EMPTY : stack.copy()); } } } @@ -162,12 +162,12 @@ public class BlueprintContainer extends GhostItemContainer { } @Override - public void onSlotChanged() { - super.onSlotChanged(); - if (index == 9 && getHasStack() && !contentHolder.getBlueprintWorld().isRemote) { + public void setChanged() { + super.setChanged(); + if (index == 9 && hasItem() && !contentHolder.getBlueprintWorld().isClientSide) { contentHolder.inferredIcon = false; ServerPlayerEntity serverplayerentity = (ServerPlayerEntity) player; - serverplayerentity.connection.sendPacket(new SSetSlotPacket(windowId, 36 + 9, getStack())); + serverplayerentity.connection.send(new SSetSlotPacket(containerId, 36 + 9, getItem())); } if (index < 9) onCraftMatrixChanged(); diff --git a/src/main/java/com/simibubi/create/content/curiosities/tools/BlueprintEntity.java b/src/main/java/com/simibubi/create/content/curiosities/tools/BlueprintEntity.java index fad37fd64..233848c4a 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/tools/BlueprintEntity.java +++ b/src/main/java/com/simibubi/create/content/curiosities/tools/BlueprintEntity.java @@ -87,7 +87,7 @@ public class BlueprintEntity extends HangingEntity for (int size = 3; size > 0; size--) { this.size = size; this.updateFacingWithBoundingBox(facing, verticalOrientation); - if (this.onValidSurface()) + if (this.survives()) break; } } @@ -99,45 +99,45 @@ public class BlueprintEntity extends HangingEntity } @Override - public IPacket createSpawnPacket() { + public IPacket getAddEntityPacket() { return NetworkHooks.getEntitySpawningPacket(this); } @Override - public void writeAdditional(CompoundNBT p_213281_1_) { - p_213281_1_.putByte("Facing", (byte) this.facingDirection.getIndex()); - p_213281_1_.putByte("Orientation", (byte) this.verticalOrientation.getIndex()); + public void addAdditionalSaveData(CompoundNBT p_213281_1_) { + p_213281_1_.putByte("Facing", (byte) this.direction.get3DDataValue()); + p_213281_1_.putByte("Orientation", (byte) this.verticalOrientation.get3DDataValue()); p_213281_1_.putInt("Size", size); - super.writeAdditional(p_213281_1_); + super.addAdditionalSaveData(p_213281_1_); } @Override - public void readAdditional(CompoundNBT p_70037_1_) { - this.facingDirection = Direction.byIndex(p_70037_1_.getByte("Facing")); - this.verticalOrientation = Direction.byIndex(p_70037_1_.getByte("Orientation")); + public void readAdditionalSaveData(CompoundNBT p_70037_1_) { + this.direction = Direction.from3DDataValue(p_70037_1_.getByte("Facing")); + this.verticalOrientation = Direction.from3DDataValue(p_70037_1_.getByte("Orientation")); this.size = p_70037_1_.getInt("Size"); - super.readAdditional(p_70037_1_); - this.updateFacingWithBoundingBox(this.facingDirection, this.verticalOrientation); + super.readAdditionalSaveData(p_70037_1_); + this.updateFacingWithBoundingBox(this.direction, this.verticalOrientation); } protected void updateFacingWithBoundingBox(Direction facing, Direction verticalOrientation) { Validate.notNull(facing); - this.facingDirection = facing; + this.direction = facing; this.verticalOrientation = verticalOrientation; if (facing.getAxis() .isHorizontal()) { - this.rotationPitch = 0.0F; - this.rotationYaw = (float) (this.facingDirection.getHorizontalIndex() * 90); + this.xRot = 0.0F; + this.yRot = (float) (this.direction.get2DDataValue() * 90); } else { - this.rotationPitch = (float) (-90 * facing.getAxisDirection() - .getOffset()); - this.rotationYaw = verticalOrientation.getAxis() - .isHorizontal() ? 180 + verticalOrientation.getHorizontalAngle() : 0; + this.xRot = (float) (-90 * facing.getAxisDirection() + .getStep()); + this.yRot = verticalOrientation.getAxis() + .isHorizontal() ? 180 + verticalOrientation.toYRot() : 0; } - this.prevRotationPitch = this.rotationPitch; - this.prevRotationYaw = this.rotationYaw; - this.updateBoundingBox(); + this.xRotO = this.xRot; + this.yRotO = this.yRot; + this.recalculateBoundingBox(); } @Override @@ -146,43 +146,43 @@ public class BlueprintEntity extends HangingEntity } @Override - protected void updateBoundingBox() { - if (this.facingDirection == null) + protected void recalculateBoundingBox() { + if (this.direction == null) return; if (this.verticalOrientation == null) return; - Vector3d pos = Vector3d.of(hangingPosition) + Vector3d pos = Vector3d.atLowerCornerOf(blockPosition()) .add(.5, .5, .5) - .subtract(Vector3d.of(facingDirection.getDirectionVec()) + .subtract(Vector3d.atLowerCornerOf(direction.getNormal()) .scale(0.46875)); double d1 = pos.x; double d2 = pos.y; double d3 = pos.z; - this.setPos(d1, d2, d3); + this.setPosRaw(d1, d2, d3); - Axis axis = facingDirection.getAxis(); + Axis axis = direction.getAxis(); if (size == 2) - pos = pos.add(Vector3d.of(axis.isHorizontal() ? facingDirection.rotateYCCW() - .getDirectionVec() - : verticalOrientation.rotateY() - .getDirectionVec()) + pos = pos.add(Vector3d.atLowerCornerOf(axis.isHorizontal() ? direction.getCounterClockWise() + .getNormal() + : verticalOrientation.getClockWise() + .getNormal()) .scale(0.5)) .add(Vector3d - .of(axis.isHorizontal() ? Direction.UP.getDirectionVec() - : facingDirection == Direction.UP ? verticalOrientation.getDirectionVec() + .atLowerCornerOf(axis.isHorizontal() ? Direction.UP.getNormal() + : direction == Direction.UP ? verticalOrientation.getNormal() : verticalOrientation.getOpposite() - .getDirectionVec()) + .getNormal()) .scale(0.5)); d1 = pos.x; d2 = pos.y; d3 = pos.z; - double d4 = (double) this.getWidthPixels(); - double d5 = (double) this.getHeightPixels(); - double d6 = (double) this.getWidthPixels(); - Direction.Axis direction$axis = this.facingDirection.getAxis(); + double d4 = (double) this.getWidth(); + double d5 = (double) this.getHeight(); + double d6 = (double) this.getWidth(); + Direction.Axis direction$axis = this.direction.getAxis(); switch (direction$axis) { case X: d4 = 1.0D; @@ -200,29 +200,30 @@ public class BlueprintEntity extends HangingEntity this.setBoundingBox(new AxisAlignedBB(d1 - d4, d2 - d5, d3 - d6, d1 + d4, d2 + d5, d3 + d6)); } - public boolean onValidSurface() { - if (!world.isSpaceEmpty(this)) + @Override + public boolean survives() { + if (!level.noCollision(this)) return false; - int i = Math.max(1, this.getWidthPixels() / 16); - int j = Math.max(1, this.getHeightPixels() / 16); - BlockPos blockpos = this.hangingPosition.offset(this.facingDirection.getOpposite()); - Direction upDirection = facingDirection.getAxis() + int i = Math.max(1, this.getWidth() / 16); + int j = Math.max(1, this.getHeight() / 16); + BlockPos blockpos = this.pos.relative(this.direction.getOpposite()); + Direction upDirection = direction.getAxis() .isHorizontal() ? Direction.UP - : facingDirection == Direction.UP ? verticalOrientation : verticalOrientation.getOpposite(); - Direction direction = facingDirection.getAxis() - .isVertical() ? verticalOrientation.rotateY() : facingDirection.rotateYCCW(); + : direction == Direction.UP ? verticalOrientation : verticalOrientation.getOpposite(); + Direction newDirection = direction.getAxis() + .isVertical() ? verticalOrientation.getClockWise() : direction.getCounterClockWise(); BlockPos.Mutable blockpos$mutable = new BlockPos.Mutable(); for (int k = 0; k < i; ++k) { for (int l = 0; l < j; ++l) { int i1 = (i - 1) / -2; int j1 = (j - 1) / -2; - blockpos$mutable.setPos(blockpos) - .move(direction, k + i1) + blockpos$mutable.set(blockpos) + .move(newDirection, k + i1) .move(upDirection, l + j1); - BlockState blockstate = this.world.getBlockState(blockpos$mutable); - if (Block.hasEnoughSolidSide(this.world, blockpos$mutable, this.facingDirection)) + BlockState blockstate = this.level.getBlockState(blockpos$mutable); + if (Block.canSupportCenter(this.level, blockpos$mutable, this.direction)) continue; if (!blockstate.getMaterial() .isSolid() && !RedstoneDiodeBlock.isDiode(blockstate)) { @@ -231,44 +232,44 @@ public class BlueprintEntity extends HangingEntity } } - return this.world.getEntitiesInAABBexcluding(this, this.getBoundingBox(), IS_HANGING_ENTITY) + return this.level.getEntities(this, this.getBoundingBox(), HANGING_ENTITY) .isEmpty(); } @Override - public int getWidthPixels() { + public int getWidth() { return 16 * size; } @Override - public int getHeightPixels() { + public int getHeight() { return 16 * size; } @Override - public boolean hitByEntity(Entity source) { - if (!(source instanceof PlayerEntity) || world.isRemote) - return super.hitByEntity(source); + public boolean skipAttackInteraction(Entity source) { + if (!(source instanceof PlayerEntity) || level.isClientSide) + return super.skipAttackInteraction(source); PlayerEntity player = (PlayerEntity) source; double attrib = player.getAttribute(ForgeMod.REACH_DISTANCE.get()) .getValue() + (player.isCreative() ? 0 : -0.5F); Vector3d eyePos = source.getEyePosition(1); - Vector3d look = source.getLook(1); + Vector3d look = source.getViewVector(1); Vector3d target = eyePos.add(look.scale(attrib)); - - Optional rayTrace = getBoundingBox().rayTrace(eyePos, target); + + Optional rayTrace = getBoundingBox().clip(eyePos, target); if (!rayTrace.isPresent()) - return super.hitByEntity(source); - + return super.skipAttackInteraction(source); + Vector3d hitVec = rayTrace.get(); - BlueprintSection sectionAt = getSectionAt(hitVec.subtract(getPositionVec())); + BlueprintSection sectionAt = getSectionAt(hitVec.subtract(position())); ItemStackHandler items = sectionAt.getItems(); if (items.getStackInSlot(9) .isEmpty()) - return super.hitByEntity(source); + return super.skipAttackInteraction(source); for (int i = 0; i < items.getSlots(); i++) items.setStackInSlot(i, ItemStack.EMPTY); sectionAt.save(items); @@ -276,20 +277,20 @@ public class BlueprintEntity extends HangingEntity } @Override - public void onBroken(@Nullable Entity p_110128_1_) { - if (!world.getGameRules() - .getBoolean(GameRules.DO_ENTITY_DROPS)) + public void dropItem(@Nullable Entity p_110128_1_) { + if (!level.getGameRules() + .getBoolean(GameRules.RULE_DOENTITYDROPS)) return; - playSound(SoundEvents.ENTITY_PAINTING_BREAK, 1.0F, 1.0F); + playSound(SoundEvents.PAINTING_BREAK, 1.0F, 1.0F); if (p_110128_1_ instanceof PlayerEntity) { PlayerEntity playerentity = (PlayerEntity) p_110128_1_; - if (playerentity.abilities.isCreativeMode) { + if (playerentity.abilities.instabuild) { return; } } - entityDropItem(AllItems.CRAFTING_BLUEPRINT.asStack()); + spawnAtLocation(AllItems.CRAFTING_BLUEPRINT.asStack()); } @Override @@ -303,49 +304,49 @@ public class BlueprintEntity extends HangingEntity } @Override - public void playPlaceSound() { - this.playSound(SoundEvents.ENTITY_PAINTING_PLACE, 1.0F, 1.0F); + public void playPlacementSound() { + this.playSound(SoundEvents.PAINTING_PLACE, 1.0F, 1.0F); } @Override - public void setLocationAndAngles(double p_70012_1_, double p_70012_3_, double p_70012_5_, float p_70012_7_, + public void moveTo(double p_70012_1_, double p_70012_3_, double p_70012_5_, float p_70012_7_, float p_70012_8_) { - this.setPosition(p_70012_1_, p_70012_3_, p_70012_5_); + this.setPos(p_70012_1_, p_70012_3_, p_70012_5_); } @Override @OnlyIn(Dist.CLIENT) - public void setPositionAndRotationDirect(double p_180426_1_, double p_180426_3_, double p_180426_5_, + public void lerpTo(double p_180426_1_, double p_180426_3_, double p_180426_5_, float p_180426_7_, float p_180426_8_, int p_180426_9_, boolean p_180426_10_) { BlockPos blockpos = - this.hangingPosition.add(p_180426_1_ - this.getX(), p_180426_3_ - this.getY(), p_180426_5_ - this.getZ()); - this.setPosition((double) blockpos.getX(), (double) blockpos.getY(), (double) blockpos.getZ()); + this.pos.offset(p_180426_1_ - this.getX(), p_180426_3_ - this.getY(), p_180426_5_ - this.getZ()); + this.setPos((double) blockpos.getX(), (double) blockpos.getY(), (double) blockpos.getZ()); } @Override public void writeSpawnData(PacketBuffer buffer) { CompoundNBT compound = new CompoundNBT(); - writeAdditional(compound); - buffer.writeCompoundTag(compound); - buffer.writeCompoundTag(getPersistentData()); + addAdditionalSaveData(compound); + buffer.writeNbt(compound); + buffer.writeNbt(getPersistentData()); } @Override public void readSpawnData(PacketBuffer additionalData) { - readAdditional(additionalData.readCompoundTag()); - getPersistentData().merge(additionalData.readCompoundTag()); + readAdditionalSaveData(additionalData.readNbt()); + getPersistentData().merge(additionalData.readNbt()); } @Override - public ActionResultType applyPlayerInteraction(PlayerEntity player, Vector3d vec, Hand hand) { + public ActionResultType interactAt(PlayerEntity player, Vector3d vec, Hand hand) { if (player instanceof FakePlayer) return ActionResultType.PASS; - boolean holdingWrench = AllItems.WRENCH.isIn(player.getHeldItem(hand)); + boolean holdingWrench = AllItems.WRENCH.isIn(player.getItemInHand(hand)); BlueprintSection section = getSectionAt(vec); ItemStackHandler items = section.getItems(); - if (!holdingWrench && !world.isRemote && !items.getStackInSlot(9) + if (!holdingWrench && !level.isClientSide && !items.getStackInSlot(9) .isEmpty()) { IItemHandlerModifiable playerInv = new InvWrapper(player.inventory); @@ -367,7 +368,7 @@ public class BlueprintEntity extends HangingEntity } for (int slot = 0; slot < playerInv.getSlots(); slot++) { - if (!FilterItem.test(world, playerInv.getStackInSlot(slot), requestedItem)) + if (!FilterItem.test(level, playerInv.getStackInSlot(slot), requestedItem)) continue; ItemStack currentItem = playerInv.extractItem(slot, 1, false); if (stacksTaken.containsKey(slot)) @@ -387,10 +388,10 @@ public class BlueprintEntity extends HangingEntity CraftingInventory craftingInventory = new BlueprintCraftingInventory(craftingGrid); if (!recipe.isPresent()) - recipe = world.getRecipeManager() - .getRecipe(IRecipeType.CRAFTING, craftingInventory, world); - ItemStack result = recipe.filter(r -> r.matches(craftingInventory, world)) - .map(r -> r.getCraftingResult(craftingInventory)) + recipe = level.getRecipeManager() + .getRecipeFor(IRecipeType.CRAFTING, craftingInventory, level); + ItemStack result = recipe.filter(r -> r.matches(craftingInventory, level)) + .map(r -> r.assemble(craftingInventory)) .orElse(ItemStack.EMPTY); if (result.isEmpty()) { @@ -399,17 +400,17 @@ public class BlueprintEntity extends HangingEntity success = false; } else { amountCrafted += result.getCount(); - result.onCrafting(player.world, player, 1); + result.onCraftedBy(player.level, player, 1); BasicEventHooks.firePlayerCraftingEvent(player, result, craftingInventory); - NonNullList nonnulllist = world.getRecipeManager() - .getRecipeNonNull(IRecipeType.CRAFTING, craftingInventory, world); + NonNullList nonnulllist = level.getRecipeManager() + .getRemainingItemsFor(IRecipeType.CRAFTING, craftingInventory, level); if (firstPass) - world.playSound(null, player.getBlockPos(), SoundEvents.ENTITY_ITEM_PICKUP, + level.playSound(null, player.blockPosition(), SoundEvents.ITEM_PICKUP, SoundCategory.PLAYERS, .2f, 1f + Create.RANDOM.nextFloat()); - player.inventory.placeItemBackInInventory(world, result); + player.inventory.placeItemBackInInventory(level, result); for (ItemStack itemStack : nonnulllist) - player.inventory.placeItemBackInInventory(world, itemStack); + player.inventory.placeItemBackInInventory(level, itemStack); firstPass = false; } } @@ -420,15 +421,15 @@ public class BlueprintEntity extends HangingEntity break; } - } while (player.isSneaking()); + } while (player.isShiftKeyDown()); ForgeHooks.setCraftingPlayer(null); return ActionResultType.SUCCESS; } int i = section.index; - if (!world.isRemote && player instanceof ServerPlayerEntity) { + if (!level.isClientSide && player instanceof ServerPlayerEntity) { NetworkHooks.openGui((ServerPlayerEntity) player, section, buf -> { - buf.writeVarInt(getEntityId()); + buf.writeVarInt(getId()); buf.writeVarInt(i); }); } @@ -439,8 +440,8 @@ public class BlueprintEntity extends HangingEntity public BlueprintSection getSectionAt(Vector3d vec) { int index = 0; if (size > 1) { - vec = VecHelper.rotate(vec, rotationYaw, Axis.Y); - vec = VecHelper.rotate(vec, -rotationPitch, Axis.X); + vec = VecHelper.rotate(vec, yRot, Axis.Y); + vec = VecHelper.rotate(vec, -xRot, Axis.X); vec = vec.add(0.5, 0.5, 0); if (size == 3) vec = vec.add(1, 1, 0); @@ -456,7 +457,7 @@ public class BlueprintEntity extends HangingEntity static class BlueprintCraftingInventory extends CraftingInventory { private static Container dummyContainer = new Container(null, -1) { - public boolean canInteractWith(PlayerEntity playerIn) { + public boolean stillValid(PlayerEntity playerIn) { return false; } }; @@ -466,7 +467,7 @@ public class BlueprintEntity extends HangingEntity for (int y = 0; y < 3; y++) { for (int x = 0; x < 3; x++) { ItemStack stack = items.get(y * 3 + x); - setInventorySlotContents(y * 3 + x, stack == null ? ItemStack.EMPTY : stack.copy()); + setItem(y * 3 + x, stack == null ? ItemStack.EMPTY : stack.copy()); } } } @@ -517,7 +518,7 @@ public class BlueprintEntity extends HangingEntity list.put(index + "", inventory.serializeNBT()); list.putBoolean("InferredIcon", inferredIcon); cachedDisplayItems = null; - if (!world.isRemote) + if (!level.isClientSide) syncPersistentDataWithTracking(BlueprintEntity.this); } @@ -526,7 +527,7 @@ public class BlueprintEntity extends HangingEntity } public World getBlueprintWorld() { - return world; + return level; } @Override @@ -537,7 +538,7 @@ public class BlueprintEntity extends HangingEntity @Override public ITextComponent getDisplayName() { return new TranslationTextComponent(AllItems.CRAFTING_BLUEPRINT.get() - .getTranslationKey()); + .getDescriptionId()); } @Override diff --git a/src/main/java/com/simibubi/create/content/curiosities/tools/BlueprintItem.java b/src/main/java/com/simibubi/create/content/curiosities/tools/BlueprintItem.java index 355df3b30..9846c36b9 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/tools/BlueprintItem.java +++ b/src/main/java/com/simibubi/create/content/curiosities/tools/BlueprintItem.java @@ -32,6 +32,8 @@ import net.minecraftforge.common.crafting.StackList; import net.minecraftforge.fml.common.ObfuscationReflectionHelper; import net.minecraftforge.items.ItemStackHandler; +import net.minecraft.item.Item.Properties; + public class BlueprintItem extends Item { public BlueprintItem(Properties p_i48487_1_) { @@ -39,37 +41,37 @@ public class BlueprintItem extends Item { } @Override - public ActionResultType onItemUse(ItemUseContext ctx) { - Direction face = ctx.getFace(); + public ActionResultType useOn(ItemUseContext ctx) { + Direction face = ctx.getClickedFace(); PlayerEntity player = ctx.getPlayer(); - ItemStack stack = ctx.getItem(); - BlockPos pos = ctx.getPos() - .offset(face); + ItemStack stack = ctx.getItemInHand(); + BlockPos pos = ctx.getClickedPos() + .relative(face); - if (player != null && !player.canPlayerEdit(pos, face, stack)) + if (player != null && !player.mayUseItemAt(pos, face, stack)) return ActionResultType.FAIL; - World world = ctx.getWorld(); + World world = ctx.getLevel(); HangingEntity hangingentity = new BlueprintEntity(world, pos, face, face.getAxis() - .isHorizontal() ? Direction.DOWN : ctx.getPlacementHorizontalFacing()); + .isHorizontal() ? Direction.DOWN : ctx.getHorizontalDirection()); CompoundNBT compoundnbt = stack.getTag(); if (compoundnbt != null) - EntityType.applyItemNBT(world, player, hangingentity, compoundnbt); - if (!hangingentity.onValidSurface()) + EntityType.updateCustomEntityTag(world, player, hangingentity, compoundnbt); + if (!hangingentity.survives()) return ActionResultType.CONSUME; - if (!world.isRemote) { - hangingentity.playPlaceSound(); - world.addEntity(hangingentity); + if (!world.isClientSide) { + hangingentity.playPlacementSound(); + world.addFreshEntity(hangingentity); } stack.shrink(1); - return ActionResultType.success(world.isRemote); + return ActionResultType.sidedSuccess(world.isClientSide); } protected boolean canPlace(PlayerEntity p_200127_1_, Direction p_200127_2_, ItemStack p_200127_3_, BlockPos p_200127_4_) { - return p_200127_1_.canPlayerEdit(p_200127_4_, p_200127_2_, p_200127_3_); + return p_200127_1_.mayUseItemAt(p_200127_4_, p_200127_2_, p_200127_3_); } public static void assignCompleteRecipe(ItemStackHandler inv, IRecipe recipe) { @@ -77,7 +79,7 @@ public class BlueprintItem extends Item { for (int i = 0; i < 9; i++) inv.setStackInSlot(i, ItemStack.EMPTY); - inv.setStackInSlot(9, recipe.getRecipeOutput()); + inv.setStackInSlot(9, recipe.getResultItem()); if (recipe instanceof ShapedRecipe) { ShapedRecipe shapedRecipe = (ShapedRecipe) recipe; @@ -93,7 +95,7 @@ public class BlueprintItem extends Item { private static ItemStack convertIngredientToFilter(Ingredient ingredient) { Ingredient.IItemList[] acceptedItems = - ObfuscationReflectionHelper.getPrivateValue(Ingredient.class, ingredient, "field_199807_b"); + ObfuscationReflectionHelper.getPrivateValue(Ingredient.class, ingredient, "values"); // values if (acceptedItems == null || acceptedItems.length > 18) return ItemStack.EMPTY; if (acceptedItems.length == 0) @@ -111,14 +113,14 @@ public class BlueprintItem extends Item { } private static ItemStack convertIItemListToFilter(IItemList itemList) { - Collection stacks = itemList.getStacks(); + Collection stacks = itemList.getItems(); if (itemList instanceof SingleItemList) { for (ItemStack itemStack : stacks) return itemStack; } if (itemList instanceof TagList) { - ResourceLocation resourcelocation = new ResourceLocation(JSONUtils.getString(itemList.serialize(), "tag")); + ResourceLocation resourcelocation = new ResourceLocation(JSONUtils.getAsString(itemList.serialize(), "tag")); ItemStack filterItem = AllItems.ATTRIBUTE_FILTER.asStack(); filterItem.getOrCreateTag() .putInt("WhitelistMode", WhitelistMode.WHITELIST_DISJ.ordinal()); diff --git a/src/main/java/com/simibubi/create/content/curiosities/tools/BlueprintOverlayRenderer.java b/src/main/java/com/simibubi/create/content/curiosities/tools/BlueprintOverlayRenderer.java index da38ffb60..f52ad6750 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/tools/BlueprintOverlayRenderer.java +++ b/src/main/java/com/simibubi/create/content/curiosities/tools/BlueprintOverlayRenderer.java @@ -55,9 +55,9 @@ public class BlueprintOverlayRenderer { public static void tick() { Minecraft mc = Minecraft.getInstance(); - RayTraceResult mouseOver = mc.objectMouseOver; + RayTraceResult mouseOver = mc.hitResult; BlueprintSection last = lastTargetedSection; - boolean sneak = mc.player.isSneaking(); + boolean sneak = mc.player.isShiftKeyDown(); lastTargetedSection = null; active = false; if (mouseOver == null) @@ -70,8 +70,8 @@ public class BlueprintOverlayRenderer { return; BlueprintEntity blueprintEntity = (BlueprintEntity) entityRay.getEntity(); - BlueprintSection sectionAt = blueprintEntity.getSectionAt(entityRay.getHitVec() - .subtract(blueprintEntity.getPositionVec())); + BlueprintSection sectionAt = blueprintEntity.getSectionAt(entityRay.getLocation() + .subtract(blueprintEntity.position())); lastTargetedSection = last; active = true; @@ -104,9 +104,9 @@ public class BlueprintOverlayRenderer { boolean firstPass = true; boolean success = true; Minecraft mc = Minecraft.getInstance(); - ItemStackHandler playerInv = new ItemStackHandler(mc.player.inventory.getSizeInventory()); + ItemStackHandler playerInv = new ItemStackHandler(mc.player.inventory.getContainerSize()); for (int i = 0; i < playerInv.getSlots(); i++) - playerInv.setStackInSlot(i, mc.player.inventory.getStackInSlot(i) + playerInv.setStackInSlot(i, mc.player.inventory.getItem(i) .copy()); int amountCrafted = 0; @@ -132,7 +132,7 @@ public class BlueprintOverlayRenderer { } for (int slot = 0; slot < playerInv.getSlots(); slot++) { - if (!FilterItem.test(mc.world, playerInv.getStackInSlot(slot), requestedItem)) + if (!FilterItem.test(mc.level, playerInv.getStackInSlot(slot), requestedItem)) continue; ItemStack currentItem = playerInv.extractItem(slot, 1, false); craftingGrid.put(i, currentItem); @@ -147,10 +147,10 @@ public class BlueprintOverlayRenderer { if (success) { CraftingInventory craftingInventory = new BlueprintCraftingInventory(craftingGrid); if (!recipe.isPresent()) - recipe = mc.world.getRecipeManager() - .getRecipe(IRecipeType.CRAFTING, craftingInventory, mc.world); - ItemStack resultFromRecipe = recipe.filter(r -> r.matches(craftingInventory, mc.world)) - .map(r -> r.getCraftingResult(craftingInventory)) + recipe = mc.level.getRecipeManager() + .getRecipeFor(IRecipeType.CRAFTING, craftingInventory, mc.level); + ItemStack resultFromRecipe = recipe.filter(r -> r.matches(craftingInventory, mc.level)) + .map(r -> r.assemble(craftingInventory)) .orElse(ItemStack.EMPTY); if (resultFromRecipe.isEmpty()) { @@ -211,9 +211,9 @@ public class BlueprintOverlayRenderer { int w = 30 + 21 * ingredients.size() + 21; int x = (mc.getWindow() - .getScaledWidth() - w) / 2; + .getGuiScaledWidth() - w) / 2; int y = (int) (mc.getWindow() - .getScaledHeight() / 3f * 2); + .getGuiScaledHeight() / 3f * 2); for (Pair pair : ingredients) { RenderSystem.enableBlend(); @@ -243,7 +243,7 @@ public class BlueprintOverlayRenderer { public static void drawItemStack(MatrixStack ms, Minecraft mc, int x, int y, ItemStack itemStack, String count) { if (itemStack.getItem() instanceof FilterItem) { - int step = AnimationTickHolder.getTicks(mc.world) / 10; + int step = AnimationTickHolder.getTicks(mc.level) / 10; ItemStack[] itemsMatchingFilter = getItemsMatchingFilter(itemStack); if (itemsMatchingFilter.length > 0) itemStack = itemsMatchingFilter[step % itemsMatchingFilter.length]; @@ -253,7 +253,7 @@ public class BlueprintOverlayRenderer { .at(x + 3, y + 3) .render(ms); mc.getItemRenderer() - .renderItemOverlayIntoGUI(mc.fontRenderer, itemStack, x + 3, y + 3, count); + .renderGuiItemDecorations(mc.font, itemStack, x + 3, y + 3, count); } private static ItemStack[] getItemsMatchingFilter(ItemStack filter) { @@ -278,12 +278,12 @@ public class BlueprintOverlayRenderer { ItemAttribute fromNBT = ItemAttribute.fromNBT((CompoundNBT) attributes.get(0)); if (fromNBT instanceof ItemAttribute.InTag) { ItemAttribute.InTag inTag = (ItemAttribute.InTag) fromNBT; - ITag itag = TagCollectionManager.getTagManager() + ITag itag = TagCollectionManager.getInstance() .getItems() - .get(inTag.tagName); + .getTag(inTag.tagName); if (itag != null) - return Ingredient.fromTag(itag) - .getMatchingStacks(); + return Ingredient.of(itag) + .getItems(); } } } diff --git a/src/main/java/com/simibubi/create/content/curiosities/tools/BlueprintRenderer.java b/src/main/java/com/simibubi/create/content/curiosities/tools/BlueprintRenderer.java index 96b25e805..3055488db 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/tools/BlueprintRenderer.java +++ b/src/main/java/com/simibubi/create/content/curiosities/tools/BlueprintRenderer.java @@ -33,28 +33,28 @@ public class BlueprintRenderer extends EntityRenderer { int light) { PartialModel partialModel = entity.size == 3 ? AllBlockPartials.CRAFTING_BLUEPRINT_3x3 : entity.size == 2 ? AllBlockPartials.CRAFTING_BLUEPRINT_2x2 : AllBlockPartials.CRAFTING_BLUEPRINT_1x1; - SuperByteBuffer sbb = PartialBufferer.get(partialModel, Blocks.AIR.getDefaultState()); + SuperByteBuffer sbb = PartialBufferer.get(partialModel, Blocks.AIR.defaultBlockState()); sbb.matrixStacker() .rotateY(-yaw) - .rotateX(90.0F + entity.rotationPitch) + .rotateX(90.0F + entity.xRot) .translate(-.5, -1 / 32f, -.5); if (entity.size == 2) sbb.translate(.5, 0, -.5); sbb.forEntityRender() .light(light) - .renderInto(ms, buffer.getBuffer(Atlases.getEntitySolid())); + .renderInto(ms, buffer.getBuffer(Atlases.solidBlockSheet())); super.render(entity, yaw, pt, ms, buffer, light); - ms.push(); + ms.pushPose(); float fakeNormalXRotation = -15; int bl = light >> 4 & 0xf; int sl = light >> 20 & 0xf; - boolean vertical = entity.rotationPitch != 0; - if (entity.rotationPitch == -90) + boolean vertical = entity.xRot != 0; + if (entity.xRot == -90) fakeNormalXRotation = -45; - else if (entity.rotationPitch == 90 || yaw % 180 != 0) { + else if (entity.xRot == 90 || yaw % 180 != 0) { bl /= 1.35; sl /= 1.35; } @@ -63,73 +63,73 @@ public class BlueprintRenderer extends EntityRenderer { MatrixStacker.of(ms) .rotateY(vertical ? 0 : -yaw) .rotateX(fakeNormalXRotation); - Matrix3f copy = ms.peek() - .getNormal() + Matrix3f copy = ms.last() + .normal() .copy(); - ms.pop(); - ms.push(); + ms.popPose(); + ms.pushPose(); MatrixStacker.of(ms) .rotateY(-yaw) - .rotateX(entity.rotationPitch) + .rotateX(entity.xRot) .translate(0, 0, 1 / 32f + .001); if (entity.size == 3) ms.translate(-1, -1, 0); MatrixStack squashedMS = new MatrixStack(); - squashedMS.peek() - .getModel() - .multiply(ms.peek() - .getModel()); + squashedMS.last() + .pose() + .multiply(ms.last() + .pose()); for (int x = 0; x < entity.size; x++) { - squashedMS.push(); + squashedMS.pushPose(); for (int y = 0; y < entity.size; y++) { BlueprintSection section = entity.getSection(x * entity.size + y); Couple displayItems = section.getDisplayItems(); - squashedMS.push(); + squashedMS.pushPose(); squashedMS.scale(.5f, .5f, 1 / 1024f); displayItems.forEachWithContext((stack, primary) -> { if (stack.isEmpty()) return; - squashedMS.push(); + squashedMS.pushPose(); if (!primary) { squashedMS.translate(0.325f, -0.325f, 1); squashedMS.scale(.625f, .625f, 1); } - Matrix3f n = squashedMS.peek() - .getNormal(); - n.a00 = copy.a00; - n.a01 = copy.a01; - n.a02 = copy.a02; - n.a10 = copy.a10; - n.a11 = copy.a11; - n.a12 = copy.a12; - n.a20 = copy.a20; - n.a21 = copy.a21; - n.a22 = copy.a22; + Matrix3f n = squashedMS.last() + .normal(); + n.m00 = copy.m00; + n.m01 = copy.m01; + n.m02 = copy.m02; + n.m10 = copy.m10; + n.m11 = copy.m11; + n.m12 = copy.m12; + n.m20 = copy.m20; + n.m21 = copy.m21; + n.m22 = copy.m22; Minecraft.getInstance() .getItemRenderer() - .renderItem(stack, TransformType.GUI, itemLight, OverlayTexture.DEFAULT_UV, squashedMS, buffer); - squashedMS.pop(); + .renderStatic(stack, TransformType.GUI, itemLight, OverlayTexture.NO_OVERLAY, squashedMS, buffer); + squashedMS.popPose(); }); - squashedMS.pop(); + squashedMS.popPose(); squashedMS.translate(1, 0, 0); } - squashedMS.pop(); + squashedMS.popPose(); squashedMS.translate(0, 1, 0); } - ms.pop(); + ms.popPose(); } @Override - public ResourceLocation getEntityTexture(BlueprintEntity p_110775_1_) { + public ResourceLocation getTextureLocation(BlueprintEntity p_110775_1_) { return null; } diff --git a/src/main/java/com/simibubi/create/content/curiosities/tools/BlueprintScreen.java b/src/main/java/com/simibubi/create/content/curiosities/tools/BlueprintScreen.java index 5c7150818..5fba8bbbc 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/tools/BlueprintScreen.java +++ b/src/main/java/com/simibubi/create/content/curiosities/tools/BlueprintScreen.java @@ -45,8 +45,8 @@ public class BlueprintScreen extends AbstractSimiContainerScreenat(x + background.width + 20, y + background.height - 32, 0) @@ -79,21 +79,21 @@ public class BlueprintScreen extends AbstractSimiContainerScreen(), hoveredSlot.getSlotIndex(), true), x, y, - textRenderer); + font); } @Override public List getTooltipFromItem(ItemStack stack) { List list = super.getTooltipFromItem(stack); - if (hoveredSlot.inventory == container.playerInventory) + if (hoveredSlot.container == menu.playerInventory) return list; return hoveredSlot != null ? addToTooltip(list, hoveredSlot.getSlotIndex(), false) : list; } @@ -104,26 +104,26 @@ public class BlueprintScreen extends AbstractSimiContainerScreen d) { + if (sender.distanceToSqr(entityByID) > d) { // TODO log? return; } if (interactionHand == null) - sender.attackTargetEntityWithCurrentItem(entityByID); + sender.attack(entityByID); else if (specificPoint == null) sender.interactOn(entityByID, interactionHand); else - entityByID.applyPlayerInteraction(sender, specificPoint, interactionHand); + entityByID.interactAt(sender, specificPoint, interactionHand); } }); context.get().setPacketHandled(true); diff --git a/src/main/java/com/simibubi/create/content/curiosities/tools/ExtendoGripItem.java b/src/main/java/com/simibubi/create/content/curiosities/tools/ExtendoGripItem.java index 1cf868e5a..c833042b6 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/tools/ExtendoGripItem.java +++ b/src/main/java/com/simibubi/create/content/curiosities/tools/ExtendoGripItem.java @@ -49,6 +49,8 @@ import net.minecraftforge.eventbus.api.EventPriority; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod.EventBusSubscriber; +import net.minecraft.item.Item.Properties; + @EventBusSubscriber public class ExtendoGripItem extends Item { private static DamageSource lastActiveDamageSource; @@ -71,7 +73,7 @@ public class ExtendoGripItem extends Item { ImmutableMultimap.of(ForgeMod.REACH_DISTANCE.get(), doubleRangeAttributeModifier)); public ExtendoGripItem(Properties properties) { - super(properties.maxStackSize(1) + super(properties.stacksTo(1) .rarity(Rarity.UNCOMMON)); } @@ -86,8 +88,8 @@ public class ExtendoGripItem extends Item { PlayerEntity player = (PlayerEntity) event.getEntityLiving(); CompoundNBT persistentData = player.getPersistentData(); - boolean inOff = AllItems.EXTENDO_GRIP.isIn(player.getHeldItemOffhand()); - boolean inMain = AllItems.EXTENDO_GRIP.isIn(player.getHeldItemMainhand()); + boolean inOff = AllItems.EXTENDO_GRIP.isIn(player.getOffhandItem()); + boolean inMain = AllItems.EXTENDO_GRIP.isIn(player.getMainHandItem()); boolean holdingDualExtendo = inOff && inMain; boolean holdingExtendo = inOff ^ inMain; holdingExtendo &= !holdingDualExtendo; @@ -97,13 +99,13 @@ public class ExtendoGripItem extends Item { if (holdingExtendo != wasHoldingExtendo) { if (!holdingExtendo) { player.getAttributes() - .removeModifiers(rangeModifier.getValue()); + .removeAttributeModifiers(rangeModifier.get()); persistentData.remove(EXTENDO_MARKER); } else { if (player instanceof ServerPlayerEntity) AllTriggers.EXTENDO.trigger((ServerPlayerEntity) player); player.getAttributes() - .addTemporaryModifiers(rangeModifier.getValue()); + .addTransientAttributeModifiers(rangeModifier.get()); persistentData.putBoolean(EXTENDO_MARKER, true); } } @@ -111,13 +113,13 @@ public class ExtendoGripItem extends Item { if (holdingDualExtendo != wasHoldingDualExtendo) { if (!holdingDualExtendo) { player.getAttributes() - .removeModifiers(doubleRangeModifier.getValue()); + .removeAttributeModifiers(doubleRangeModifier.get()); persistentData.remove(DUAL_EXTENDO_MARKER); } else { if (player instanceof ServerPlayerEntity) AllTriggers.GIGA_EXTENDO.trigger((ServerPlayerEntity) player); player.getAttributes() - .addTemporaryModifiers(doubleRangeModifier.getValue()); + .addTransientAttributeModifiers(doubleRangeModifier.get()); persistentData.putBoolean(DUAL_EXTENDO_MARKER, true); } } @@ -131,10 +133,10 @@ public class ExtendoGripItem extends Item { if (persistentData.contains(DUAL_EXTENDO_MARKER)) player.getAttributes() - .addTemporaryModifiers(doubleRangeModifier.getValue()); + .addTransientAttributeModifiers(doubleRangeModifier.get()); else if (persistentData.contains(EXTENDO_MARKER)) player.getAttributes() - .addTemporaryModifiers(rangeModifier.getValue()); + .addTransientAttributeModifiers(rangeModifier.get()); } @SubscribeEvent @@ -142,11 +144,11 @@ public class ExtendoGripItem extends Item { public static void dontMissEntitiesWhenYouHaveHighReachDistance(ClickInputEvent event) { Minecraft mc = Minecraft.getInstance(); ClientPlayerEntity player = mc.player; - if (mc.world == null || player == null) + if (mc.level == null || player == null) return; if (!isHoldingExtendoGrip(player)) return; - if (mc.objectMouseOver instanceof BlockRayTraceResult && mc.objectMouseOver.getType() != Type.MISS) + if (mc.hitResult instanceof BlockRayTraceResult && mc.hitResult.getType() != Type.MISS) return; // Modified version of GameRenderer#getMouseOver @@ -155,23 +157,23 @@ public class ExtendoGripItem extends Item { if (!player.isCreative()) d0 -= 0.5f; Vector3d Vector3d = player.getEyePosition(AnimationTickHolder.getPartialTicks()); - Vector3d Vector3d1 = player.getLook(1.0F); + Vector3d Vector3d1 = player.getViewVector(1.0F); Vector3d Vector3d2 = Vector3d.add(Vector3d1.x * d0, Vector3d1.y * d0, Vector3d1.z * d0); AxisAlignedBB axisalignedbb = player.getBoundingBox() - .expand(Vector3d1.scale(d0)) - .grow(1.0D, 1.0D, 1.0D); + .expandTowards(Vector3d1.scale(d0)) + .inflate(1.0D, 1.0D, 1.0D); EntityRayTraceResult entityraytraceresult = - ProjectileHelper.rayTraceEntities(player, Vector3d, Vector3d2, axisalignedbb, (e) -> { - return !e.isSpectator() && e.canBeCollidedWith(); + ProjectileHelper.getEntityHitResult(player, Vector3d, Vector3d2, axisalignedbb, (e) -> { + return !e.isSpectator() && e.isPickable(); }, d0 * d0); if (entityraytraceresult != null) { Entity entity1 = entityraytraceresult.getEntity(); - Vector3d Vector3d3 = entityraytraceresult.getHitVec(); - double d2 = Vector3d.squareDistanceTo(Vector3d3); - if (d2 < d0 * d0 || mc.objectMouseOver == null || mc.objectMouseOver.getType() == Type.MISS) { - mc.objectMouseOver = entityraytraceresult; + Vector3d Vector3d3 = entityraytraceresult.getLocation(); + double d2 = Vector3d.distanceToSqr(Vector3d3); + if (d2 < d0 * d0 || mc.hitResult == null || mc.hitResult.getType() == Type.MISS) { + mc.hitResult = entityraytraceresult; if (entity1 instanceof LivingEntity || entity1 instanceof ItemFrameEntity) - mc.pointedEntity = entity1; + mc.crosshairPickEntity = entity1; } } } @@ -196,19 +198,19 @@ public class ExtendoGripItem extends Item { private static void findAndDamageExtendoGrip(PlayerEntity player) { if (player == null) return; - if (player.world.isRemote) + if (player.level.isClientSide) return; Hand hand = Hand.MAIN_HAND; - ItemStack extendo = player.getHeldItemMainhand(); + ItemStack extendo = player.getMainHandItem(); if (!AllItems.EXTENDO_GRIP.isIn(extendo)) { - extendo = player.getHeldItemOffhand(); + extendo = player.getOffhandItem(); hand = Hand.OFF_HAND; } if (!AllItems.EXTENDO_GRIP.isIn(extendo)) return; final Hand h = hand; if (!BackTankUtil.canAbsorbDamage(player, maxUses())) - extendo.damageItem(1, player, p -> p.sendBreakAnimation(h)); + extendo.hurtAndBreak(1, player, p -> p.broadcastBreakEvent(h)); } @Override @@ -231,7 +233,7 @@ public class ExtendoGripItem extends Item { } @Override - public boolean isDamageable() { + public boolean canBeDepleted() { return true; } @@ -248,7 +250,7 @@ public class ExtendoGripItem extends Item { DamageSource source = event.getSource(); if (source == null) return; - Entity trueSource = source.getTrueSource(); + Entity trueSource = source.getEntity(); if (trueSource instanceof PlayerEntity) findAndDamageExtendoGrip((PlayerEntity) trueSource); } @@ -257,7 +259,7 @@ public class ExtendoGripItem extends Item { public static void attacksByExtendoGripHaveMoreKnockback(LivingKnockBackEvent event) { if (lastActiveDamageSource == null) return; - Entity entity = lastActiveDamageSource.getImmediateSource(); + Entity entity = lastActiveDamageSource.getDirectEntity(); if (!(entity instanceof PlayerEntity)) return; PlayerEntity player = (PlayerEntity) entity; @@ -268,9 +270,9 @@ public class ExtendoGripItem extends Item { private static boolean isUncaughtClientInteraction(Entity entity, Entity target) { // Server ignores entity interaction further than 6m - if (entity.getDistanceSq(target) < 36) + if (entity.distanceToSqr(target) < 36) return false; - if (!entity.world.isRemote) + if (!entity.level.isClientSide) return false; if (!(entity instanceof PlayerEntity)) return false; @@ -315,8 +317,8 @@ public class ExtendoGripItem extends Item { } public static boolean isHoldingExtendoGrip(PlayerEntity player) { - boolean inOff = AllItems.EXTENDO_GRIP.isIn(player.getHeldItemOffhand()); - boolean inMain = AllItems.EXTENDO_GRIP.isIn(player.getHeldItemMainhand()); + boolean inOff = AllItems.EXTENDO_GRIP.isIn(player.getOffhandItem()); + boolean inMain = AllItems.EXTENDO_GRIP.isIn(player.getMainHandItem()); boolean holdingGrip = inOff || inMain; return holdingGrip; } diff --git a/src/main/java/com/simibubi/create/content/curiosities/tools/ExtendoGripItemRenderer.java b/src/main/java/com/simibubi/create/content/curiosities/tools/ExtendoGripItemRenderer.java index c604eeb3a..522afa1cf 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/tools/ExtendoGripItemRenderer.java +++ b/src/main/java/com/simibubi/create/content/curiosities/tools/ExtendoGripItemRenderer.java @@ -39,10 +39,10 @@ public class ExtendoGripItemRenderer extends CustomRenderedItemModelRenderer mainHandAnimation && swingProgress > 0) @@ -86,7 +86,7 @@ public class ExtendoGripRenderHandler { ms.translate(flip * (0.64000005F - .1f), -0.4F + equipProgress * -0.6F, -0.71999997F + .3f); - ms.push(); + ms.pushPose(); msr.rotateY(flip * 75.0F); ms.translate(flip * -1.0F, 3.6F, 3.5F); msr.rotateZ(flip * 120) @@ -96,18 +96,18 @@ public class ExtendoGripRenderHandler { msr.rotateY(flip * 40.0F); ms.translate(flip * 0.05f, -0.3f, -0.3f); - PlayerRenderer playerrenderer = (PlayerRenderer) mc.getRenderManager() + PlayerRenderer playerrenderer = (PlayerRenderer) mc.getEntityRenderDispatcher() .getRenderer(player); if (rightHand) - playerrenderer.renderRightArm(event.getMatrixStack(), event.getBuffers(), event.getLight(), player); + playerrenderer.renderRightHand(event.getMatrixStack(), event.getBuffers(), event.getLight(), player); else - playerrenderer.renderLeftArm(event.getMatrixStack(), event.getBuffers(), event.getLight(), player); - ms.pop(); + playerrenderer.renderLeftHand(event.getMatrixStack(), event.getBuffers(), event.getLight(), player); + ms.popPose(); // Render gun - ms.push(); + ms.pushPose(); ms.translate(flip * -0.1f, 0, -0.3f); - FirstPersonRenderer firstPersonRenderer = mc.getFirstPersonRenderer(); + FirstPersonRenderer firstPersonRenderer = mc.getItemInHandRenderer(); TransformType transform = rightHand ? TransformType.FIRST_PERSON_RIGHT_HAND : TransformType.FIRST_PERSON_LEFT_HAND; firstPersonRenderer.renderItem(mc.player, notInOffhand ? heldItem : offhandItem, transform, !rightHand, @@ -115,11 +115,11 @@ public class ExtendoGripRenderHandler { if (!notInOffhand) { ForgeHooksClient.handleCameraTransforms(ms, mc.getItemRenderer() - .getItemModelWithOverrides(offhandItem, null, null), transform, !rightHand); + .getModel(offhandItem, null, null), transform, !rightHand); ms.translate(flip * -.05f, .15f, -1.2f); ms.translate(0, 0, -animation * 2.25f); if (blockItem && mc.getItemRenderer() - .getItemModelWithOverrides(heldItem, null, null) + .getModel(heldItem, null, null) .isGui3d()) { msr.rotateY(flip * 45); ms.translate(flip * 0.15f, -0.15f, -.05f); @@ -130,18 +130,18 @@ public class ExtendoGripRenderHandler { event.getBuffers(), event.getLight()); } - ms.pop(); + ms.popPose(); } - ms.pop(); + ms.popPose(); event.setCanceled(true); } private static ItemStack getRenderedMainHandStack() { - return Minecraft.getInstance().getFirstPersonRenderer().itemStackMainHand; + return Minecraft.getInstance().getItemInHandRenderer().mainHandItem; } private static ItemStack getRenderedOffHandStack() { - return Minecraft.getInstance().getFirstPersonRenderer().itemStackOffHand; + return Minecraft.getInstance().getItemInHandRenderer().offHandItem; } } diff --git a/src/main/java/com/simibubi/create/content/curiosities/tools/SandPaperItem.java b/src/main/java/com/simibubi/create/content/curiosities/tools/SandPaperItem.java index 676b36d80..b35d16750 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/tools/SandPaperItem.java +++ b/src/main/java/com/simibubi/create/content/curiosities/tools/SandPaperItem.java @@ -27,60 +27,62 @@ import net.minecraft.util.math.vector.Vector3d; import net.minecraft.world.World; import net.minecraftforge.common.util.FakePlayer; +import net.minecraft.item.Item.Properties; + @MethodsReturnNonnullByDefault @ParametersAreNonnullByDefault public class SandPaperItem extends Item { public SandPaperItem(Properties properties) { - super(properties.maxDamage(8)); + super(properties.durability(8)); } @Override - public UseAction getUseAction(ItemStack stack) { + public UseAction getUseAnimation(ItemStack stack) { return UseAction.EAT; } @Override - public ActionResultType onItemUse(ItemUseContext context) { + public ActionResultType useOn(ItemUseContext context) { return ActionResultType.PASS; } @Override - public ActionResult onItemRightClick(World worldIn, PlayerEntity playerIn, Hand handIn) { - ItemStack itemstack = playerIn.getHeldItem(handIn); + public ActionResult use(World worldIn, PlayerEntity playerIn, Hand handIn) { + ItemStack itemstack = playerIn.getItemInHand(handIn); ActionResult FAIL = new ActionResult<>(ActionResultType.FAIL, itemstack); if (itemstack.getOrCreateTag() .contains("Polishing")) { - playerIn.setActiveHand(handIn); + playerIn.startUsingItem(handIn); return new ActionResult<>(ActionResultType.PASS, itemstack); } Hand otherHand = handIn == Hand.MAIN_HAND ? Hand.OFF_HAND : Hand.MAIN_HAND; - ItemStack itemInOtherHand = playerIn.getHeldItem(otherHand); + ItemStack itemInOtherHand = playerIn.getItemInHand(otherHand); if (SandPaperPolishingRecipe.canPolish(worldIn, itemInOtherHand)) { ItemStack item = itemInOtherHand.copy(); ItemStack toPolish = item.split(1); - playerIn.setActiveHand(handIn); + playerIn.startUsingItem(handIn); itemstack.getOrCreateTag() .put("Polishing", toPolish.serializeNBT()); - playerIn.setHeldItem(otherHand, item); + playerIn.setItemInHand(otherHand, item); return new ActionResult<>(ActionResultType.SUCCESS, itemstack); } - RayTraceResult raytraceresult = rayTrace(worldIn, playerIn, RayTraceContext.FluidMode.NONE); + RayTraceResult raytraceresult = getPlayerPOVHitResult(worldIn, playerIn, RayTraceContext.FluidMode.NONE); if (!(raytraceresult instanceof BlockRayTraceResult)) return FAIL; BlockRayTraceResult ray = (BlockRayTraceResult) raytraceresult; - Vector3d hitVec = ray.getHitVec(); + Vector3d hitVec = ray.getLocation(); - AxisAlignedBB bb = new AxisAlignedBB(hitVec, hitVec).grow(1f); + AxisAlignedBB bb = new AxisAlignedBB(hitVec, hitVec).inflate(1f); ItemEntity pickUp = null; - for (ItemEntity itemEntity : worldIn.getEntitiesWithinAABB(ItemEntity.class, bb)) { + for (ItemEntity itemEntity : worldIn.getEntitiesOfClass(ItemEntity.class, bb)) { if (!itemEntity.isAlive()) continue; - if (itemEntity.getPositionVec() - .distanceTo(playerIn.getPositionVec()) > 3) + if (itemEntity.position() + .distanceTo(playerIn.position()) > 3) continue; ItemStack stack = itemEntity.getItem(); if (!SandPaperPolishingRecipe.canPolish(worldIn, stack)) @@ -96,9 +98,9 @@ public class SandPaperItem extends Item { .copy(); ItemStack toPolish = item.split(1); - playerIn.setActiveHand(handIn); + playerIn.startUsingItem(handIn); - if (!worldIn.isRemote) { + if (!worldIn.isClientSide) { itemstack.getOrCreateTag() .put("Polishing", toPolish.serializeNBT()); if (item.isEmpty()) @@ -121,19 +123,19 @@ public class SandPaperItem extends Item { } @Override - public ItemStack onItemUseFinish(ItemStack stack, World worldIn, LivingEntity entityLiving) { + public ItemStack finishUsingItem(ItemStack stack, World worldIn, LivingEntity entityLiving) { if (!(entityLiving instanceof PlayerEntity)) return stack; PlayerEntity player = (PlayerEntity) entityLiving; CompoundNBT tag = stack.getOrCreateTag(); if (tag.contains("Polishing")) { - ItemStack toPolish = ItemStack.read(tag.getCompound("Polishing")); + ItemStack toPolish = ItemStack.of(tag.getCompound("Polishing")); ItemStack polished = - SandPaperPolishingRecipe.applyPolish(worldIn, entityLiving.getPositionVec(), toPolish, stack); + SandPaperPolishingRecipe.applyPolish(worldIn, entityLiving.position(), toPolish, stack); - if (worldIn.isRemote) { + if (worldIn.isClientSide) { spawnParticles(entityLiving.getEyePosition(1) - .add(entityLiving.getLookVec() + .add(entityLiving.getLookAngle() .scale(.5f)), toPolish, worldIn); return stack; @@ -141,13 +143,13 @@ public class SandPaperItem extends Item { if (!polished.isEmpty()) { if (player instanceof FakePlayer) { - player.dropItem(polished, false, false); + player.drop(polished, false, false); } else { player.inventory.placeItemBackInInventory(worldIn, polished); } } tag.remove("Polishing"); - stack.damageItem(1, entityLiving, p -> p.sendBreakAnimation(p.getActiveHand())); + stack.hurtAndBreak(1, entityLiving, p -> p.broadcastBreakEvent(p.getUsedItemHand())); } return stack; @@ -155,20 +157,20 @@ public class SandPaperItem extends Item { public static void spawnParticles(Vector3d location, ItemStack polishedStack, World world) { for (int i = 0; i < 20; i++) { - Vector3d motion = VecHelper.offsetRandomly(Vector3d.ZERO, world.rand, 1 / 8f); + Vector3d motion = VecHelper.offsetRandomly(Vector3d.ZERO, world.random, 1 / 8f); world.addParticle(new ItemParticleData(ParticleTypes.ITEM, polishedStack), location.x, location.y, location.z, motion.x, motion.y, motion.z); } } @Override - public void onPlayerStoppedUsing(ItemStack stack, World worldIn, LivingEntity entityLiving, int timeLeft) { + public void releaseUsing(ItemStack stack, World worldIn, LivingEntity entityLiving, int timeLeft) { if (!(entityLiving instanceof PlayerEntity)) return; PlayerEntity player = (PlayerEntity) entityLiving; CompoundNBT tag = stack.getOrCreateTag(); if (tag.contains("Polishing")) { - ItemStack toPolish = ItemStack.read(tag.getCompound("Polishing")); + ItemStack toPolish = ItemStack.of(tag.getCompound("Polishing")); player.inventory.placeItemBackInInventory(worldIn, toPolish); tag.remove("Polishing"); } @@ -180,7 +182,7 @@ public class SandPaperItem extends Item { } @Override - public int getItemEnchantability() { + public int getEnchantmentValue() { return 5; } diff --git a/src/main/java/com/simibubi/create/content/curiosities/tools/SandPaperItemRenderer.java b/src/main/java/com/simibubi/create/content/curiosities/tools/SandPaperItemRenderer.java index fca6a5c45..bdc8946f5 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/tools/SandPaperItemRenderer.java +++ b/src/main/java/com/simibubi/create/content/curiosities/tools/SandPaperItemRenderer.java @@ -19,34 +19,34 @@ import net.minecraft.util.math.vector.Vector3f; public class SandPaperItemRenderer extends ItemStackTileEntityRenderer { @Override - public void render(ItemStack stack, TransformType transformType, MatrixStack ms, IRenderTypeBuffer buffer, int light, int overlay) { + public void renderByItem(ItemStack stack, TransformType transformType, MatrixStack ms, IRenderTypeBuffer buffer, int light, int overlay) { ItemRenderer itemRenderer = Minecraft.getInstance().getItemRenderer(); ClientPlayerEntity player = Minecraft.getInstance().player; - SandPaperModel mainModel = (SandPaperModel) itemRenderer.getItemModelWithOverrides(stack, Minecraft.getInstance().world, null); + SandPaperModel mainModel = (SandPaperModel) itemRenderer.getModel(stack, Minecraft.getInstance().level, null); float partialTicks = AnimationTickHolder.getPartialTicks(); boolean leftHand = transformType == TransformType.FIRST_PERSON_LEFT_HAND; boolean firstPerson = leftHand || transformType == TransformType.FIRST_PERSON_RIGHT_HAND; - ms.push(); + ms.pushPose(); ms.translate(.5f, .5f, .5f); CompoundNBT tag = stack.getOrCreateTag(); boolean jeiMode = tag.contains("JEI"); if (tag.contains("Polishing")) { - ms.push(); + ms.pushPose(); if (transformType == TransformType.GUI) { ms.translate(0.0F, .2f, 1.0F); ms.scale(.75f, .75f, .75f); } else { int modifier = leftHand ? -1 : 1; - ms.multiply(Vector3f.POSITIVE_Y.getDegreesQuaternion(modifier * 40)); + ms.mulPose(Vector3f.YP.rotationDegrees(modifier * 40)); } // Reverse bobbing - float time = (float) (!jeiMode ? player.getItemInUseCount() + float time = (float) (!jeiMode ? player.getUseItemRemainingTicks() : (-AnimationTickHolder.getTicks()) % stack.getUseDuration()) - partialTicks + 1.0F; if (time / (float) stack.getUseDuration() < 0.8F) { float bobbing = -MathHelper.abs(MathHelper.cos(time / 4.0F * (float) Math.PI) * 0.1F); @@ -57,26 +57,26 @@ public class SandPaperItemRenderer extends ItemStackTileEntityRenderer { ms.translate(0.0f, bobbing, 0.0F); } - ItemStack toPolish = ItemStack.read(tag.getCompound("Polishing")); - itemRenderer.renderItem(toPolish, TransformType.NONE, light, overlay, ms, buffer); + ItemStack toPolish = ItemStack.of(tag.getCompound("Polishing")); + itemRenderer.renderStatic(toPolish, TransformType.NONE, light, overlay, ms, buffer); - ms.pop(); + ms.popPose(); } if (firstPerson) { - int itemInUseCount = player.getItemInUseCount(); + int itemInUseCount = player.getUseItemRemainingTicks(); if (itemInUseCount > 0) { int modifier = leftHand ? -1 : 1; ms.translate(modifier * .5f, 0, -.25f); - ms.multiply(Vector3f.POSITIVE_Z.getDegreesQuaternion(modifier * 40)); - ms.multiply(Vector3f.POSITIVE_X.getDegreesQuaternion(modifier * 10)); - ms.multiply(Vector3f.POSITIVE_Y.getDegreesQuaternion(modifier * 90)); + ms.mulPose(Vector3f.ZP.rotationDegrees(modifier * 40)); + ms.mulPose(Vector3f.XP.rotationDegrees(modifier * 10)); + ms.mulPose(Vector3f.YP.rotationDegrees(modifier * 90)); } } - itemRenderer.renderItem(stack, TransformType.NONE, false, ms, buffer, light, overlay, mainModel.getOriginalModel()); + itemRenderer.render(stack, TransformType.NONE, false, ms, buffer, light, overlay, mainModel.getOriginalModel()); - ms.pop(); + ms.popPose(); } public static class SandPaperModel extends CustomRenderedItemModel { diff --git a/src/main/java/com/simibubi/create/content/curiosities/tools/SandPaperPolishingRecipe.java b/src/main/java/com/simibubi/create/content/curiosities/tools/SandPaperPolishingRecipe.java index b949f1f94..8ef830a4f 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/tools/SandPaperPolishingRecipe.java +++ b/src/main/java/com/simibubi/create/content/curiosities/tools/SandPaperPolishingRecipe.java @@ -26,7 +26,7 @@ public class SandPaperPolishingRecipe extends ProcessingRecipe { @Override public boolean matches(SandPaperInv inv, World worldIn) { return ingredients.get(0) - .test(inv.getStackInSlot(0)); + .test(inv.getItem(0)); } @Override @@ -47,14 +47,14 @@ public class SandPaperPolishingRecipe extends ProcessingRecipe { List> matchingRecipes = getMatchingRecipes(world, stack); if (!matchingRecipes.isEmpty()) return matchingRecipes.get(0) - .getCraftingResult(new SandPaperInv(stack)) + .assemble(new SandPaperInv(stack)) .copy(); return stack; } public static List> getMatchingRecipes(World world, ItemStack stack) { return world.getRecipeManager() - .getRecipes(AllRecipeTypes.SANDPAPER_POLISHING.getType(), new SandPaperInv(stack), world); + .getRecipesFor(AllRecipeTypes.SANDPAPER_POLISHING.getType(), new SandPaperInv(stack), world); } public static class SandPaperInv extends RecipeWrapper { diff --git a/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoCannonItem.java b/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoCannonItem.java index 480f44329..7ccfc3b00 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoCannonItem.java +++ b/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoCannonItem.java @@ -44,6 +44,8 @@ import net.minecraft.world.World; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraft.item.Item.Properties; + public class PotatoCannonItem extends ShootableItem { public static ItemStack CLIENT_CURRENT_AMMO = ItemStack.EMPTY; @@ -54,20 +56,20 @@ public class PotatoCannonItem extends ShootableItem { } @Override - public boolean canPlayerBreakBlockWhileHolding(BlockState p_195938_1_, World p_195938_2_, BlockPos p_195938_3_, + public boolean canAttackBlock(BlockState p_195938_1_, World p_195938_2_, BlockPos p_195938_3_, PlayerEntity p_195938_4_) { return false; } @Override public boolean canApplyAtEnchantingTable(ItemStack stack, Enchantment enchantment) { - if (enchantment == Enchantments.POWER) + if (enchantment == Enchantments.POWER_ARROWS) return true; - if (enchantment == Enchantments.PUNCH) + if (enchantment == Enchantments.PUNCH_ARROWS) return true; - if (enchantment == Enchantments.FLAME) + if (enchantment == Enchantments.FLAMING_ARROWS) return true; - if (enchantment == Enchantments.LOOTING) + if (enchantment == Enchantments.MOB_LOOTING) return true; if (enchantment == AllEnchantments.POTATO_RECOVERY.get()) return true; @@ -75,8 +77,8 @@ public class PotatoCannonItem extends ShootableItem { } @Override - public ActionResultType onItemUse(ItemUseContext context) { - return onItemRightClick(context.getWorld(), context.getPlayer(), context.getHand()).getType(); + public ActionResultType useOn(ItemUseContext context) { + return use(context.getLevel(), context.getPlayer(), context.getHand()).getResult(); } @Override @@ -104,7 +106,7 @@ public class PotatoCannonItem extends ShootableItem { } @Override - public boolean isDamageable() { + public boolean canBeDepleted() { return true; } @@ -118,14 +120,14 @@ public class PotatoCannonItem extends ShootableItem { } @Override - public ActionResult onItemRightClick(World world, PlayerEntity player, Hand hand) { - ItemStack stack = player.getHeldItem(hand); + public ActionResult use(World world, PlayerEntity player, Hand hand) { + ItemStack stack = player.getItemInHand(hand); return findAmmoInInventory(world, player, stack).map(itemStack -> { if (ShootableGadgetItemMethods.shouldSwap(player, stack, hand, this::isCannon)) return ActionResult.fail(stack); - if (world.isRemote) { + if (world.isClientSide) { CreateClient.POTATO_CANNON_RENDER_HANDLER.dontAnimateItem(hand); return ActionResult.success(stack); } @@ -134,12 +136,12 @@ public class PotatoCannonItem extends ShootableItem { new Vector3d(.75f, -0.15f, 1.5f)); Vector3d correction = ShootableGadgetItemMethods.getGunBarrelVec(player, hand == Hand.MAIN_HAND, new Vector3d(-.05f, 0, 0)) - .subtract(player.getPositionVec() + .subtract(player.position() .add(0, player.getEyeHeight(), 0)); PotatoCannonProjectileTypes projectileType = PotatoCannonProjectileTypes.getProjectileTypeOf(itemStack) .orElse(PotatoCannonProjectileTypes.FALLBACK); - Vector3d lookVec = player.getLookVec(); + Vector3d lookVec = player.getLookAngle(); Vector3d motion = lookVec.add(correction) .normalize() .scale(projectileType.getVelocityMultiplier()); @@ -165,20 +167,20 @@ public class PotatoCannonItem extends ShootableItem { if (i != 0) projectile.recoveryChance = 0; - projectile.setPosition(barrelPos.x, barrelPos.y, barrelPos.z); - projectile.setMotion(splitMotion); - projectile.setShooter(player); - world.addEntity(projectile); + projectile.setPos(barrelPos.x, barrelPos.y, barrelPos.z); + projectile.setDeltaMovement(splitMotion); + projectile.setOwner(player); + world.addFreshEntity(projectile); } if (!player.isCreative()) { itemStack.shrink(1); if (itemStack.isEmpty()) - player.inventory.deleteStack(itemStack); + player.inventory.removeItem(itemStack); } if (!BackTankUtil.canAbsorbDamage(player, maxUses())) - stack.damageItem(1, player, p -> p.sendBreakAnimation(hand)); + stack.hurtAndBreak(1, player, p -> p.broadcastBreakEvent(hand)); Integer cooldown = findAmmoInInventory(world, player, stack).flatMap(PotatoCannonProjectileTypes::getProjectileTypeOf) @@ -199,7 +201,7 @@ public class PotatoCannonItem extends ShootableItem { } private Optional findAmmoInInventory(World world, PlayerEntity player, ItemStack held) { - ItemStack findAmmo = player.findAmmo(held); + ItemStack findAmmo = player.getProjectile(held); return PotatoCannonProjectileTypes.getProjectileTypeOf(findAmmo) .map($ -> findAmmo); } @@ -214,7 +216,7 @@ public class PotatoCannonItem extends ShootableItem { CLIENT_CURRENT_AMMO = ItemStack.EMPTY; if (player == null) return Optional.empty(); - ItemStack findAmmo = player.findAmmo(cannon); + ItemStack findAmmo = player.getProjectile(cannon); Optional found = PotatoCannonProjectileTypes.getProjectileTypeOf(findAmmo) .map($ -> findAmmo); found.ifPresent(stack -> CLIENT_CURRENT_AMMO = stack); @@ -223,9 +225,9 @@ public class PotatoCannonItem extends ShootableItem { @Override @OnlyIn(Dist.CLIENT) - public void addInformation(ItemStack stack, World world, List tooltip, ITooltipFlag flag) { - int power = EnchantmentHelper.getEnchantmentLevel(Enchantments.POWER, stack); - int punch = EnchantmentHelper.getEnchantmentLevel(Enchantments.PUNCH, stack); + public void appendHoverText(ItemStack stack, World world, List tooltip, ITooltipFlag flag) { + int power = EnchantmentHelper.getItemEnchantmentLevel(Enchantments.POWER_ARROWS, stack); + int punch = EnchantmentHelper.getItemEnchantmentLevel(Enchantments.PUNCH_ARROWS, stack); final float additionalDamage = power * 2; final float additionalKnockback = punch * .5f; @@ -235,8 +237,8 @@ public class PotatoCannonItem extends ShootableItem { String _knockback = "potato_cannon.ammo.knockback"; tooltip.add(new StringTextComponent("")); - tooltip.add(new TranslationTextComponent(ammo.getTranslationKey()).append(new StringTextComponent(":")) - .formatted(TextFormatting.GRAY)); + tooltip.add(new TranslationTextComponent(ammo.getDescriptionId()).append(new StringTextComponent(":")) + .withStyle(TextFormatting.GRAY)); PotatoCannonProjectileTypes type = PotatoCannonProjectileTypes.getProjectileTypeOf(ammo) .get(); StringTextComponent spacing = new StringTextComponent(" "); @@ -250,31 +252,31 @@ public class PotatoCannonItem extends ShootableItem { IFormattableTextComponent knockback = new StringTextComponent("" + (type.getKnockback() + additionalKnockback)); - damage = damage.formatted(additionalDamage > 0 ? green : darkGreen); - knockback = knockback.formatted(additionalKnockback > 0 ? green : darkGreen); - reloadTicks = reloadTicks.formatted(darkGreen); + damage = damage.withStyle(additionalDamage > 0 ? green : darkGreen); + knockback = knockback.withStyle(additionalKnockback > 0 ? green : darkGreen); + reloadTicks = reloadTicks.withStyle(darkGreen); - tooltip.add(spacing.copy() + tooltip.add(spacing.plainCopy() .append(Lang.translate(_attack, damage) - .formatted(darkGreen))); - tooltip.add(spacing.copy() + .withStyle(darkGreen))); + tooltip.add(spacing.plainCopy() .append(Lang.translate(_reload, reloadTicks) - .formatted(darkGreen))); - tooltip.add(spacing.copy() + .withStyle(darkGreen))); + tooltip.add(spacing.plainCopy() .append(Lang.translate(_knockback, knockback) - .formatted(darkGreen))); + .withStyle(darkGreen))); }); - super.addInformation(stack, world, tooltip, flag); + super.appendHoverText(stack, world, tooltip, flag); } @Override - public Predicate getInventoryAmmoPredicate() { + public Predicate getAllSupportedProjectiles() { return stack -> PotatoCannonProjectileTypes.getProjectileTypeOf(stack) .isPresent(); } @Override - public int getItemEnchantability() { + public int getEnchantmentValue() { return 1; } @@ -284,12 +286,12 @@ public class PotatoCannonItem extends ShootableItem { } @Override - public UseAction getUseAction(ItemStack stack) { + public UseAction getUseAnimation(ItemStack stack) { return UseAction.NONE; } @Override - public int getRange() { + public int getDefaultProjectileRange() { return 15; } diff --git a/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoCannonItemRenderer.java b/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoCannonItemRenderer.java index 35ad66a50..520c2911e 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoCannonItemRenderer.java +++ b/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoCannonItemRenderer.java @@ -27,9 +27,9 @@ public class PotatoCannonItemRenderer extends CustomRenderedItemModelRenderer { Entity entity = ray.getEntity(); - World world = entity.world; + World world = entity.level; if (!(entity instanceof ZombieVillagerEntity) - || !((ZombieVillagerEntity) entity).isPotionActive(Effects.WEAKNESS)) + || !((ZombieVillagerEntity) entity).hasEffect(Effects.WEAKNESS)) return foodEffects(Foods.GOLDEN_APPLE, false).test(ray); - if (world.isRemote) + if (world.isClientSide) return false; FakePlayer dummy = ZOMBIE_CONVERTERS.get(world); - dummy.setHeldItem(Hand.MAIN_HAND, new ItemStack(Items.GOLDEN_APPLE, 1)); - ((ZombieVillagerEntity) entity).interactMob(dummy, Hand.MAIN_HAND); + dummy.setItemInHand(Hand.MAIN_HAND, new ItemStack(Items.GOLDEN_APPLE, 1)); + ((ZombieVillagerEntity) entity).mobInteract(dummy, Hand.MAIN_HAND); return true; }) .registerAndAssign(Items.GOLDEN_APPLE), @@ -331,7 +331,7 @@ public class PotatoCannonProjectileTypes { private static Predicate setFire(int seconds) { return ray -> { - ray.getEntity().setFire(seconds); + ray.getEntity().setSecondsOnFire(seconds); return false; }; } @@ -339,7 +339,7 @@ public class PotatoCannonProjectileTypes { private static Predicate potion(Effect effect, int level, int ticks, boolean recoverable) { return ray -> { Entity entity = ray.getEntity(); - if (entity.world.isRemote) + if (entity.level.isClientSide) return true; if (entity instanceof LivingEntity) applyEffect((LivingEntity) entity, new EffectInstance(effect, ticks, level - 1)); @@ -350,7 +350,7 @@ public class PotatoCannonProjectileTypes { private static Predicate foodEffects(Food food, boolean recoverable) { return ray -> { Entity entity = ray.getEntity(); - if (entity.world.isRemote) + if (entity.level.isClientSide) return true; if (entity instanceof LivingEntity) { @@ -364,22 +364,22 @@ public class PotatoCannonProjectileTypes { } public static void applyEffect(LivingEntity entity, EffectInstance effect) { - if (effect.getPotion().isInstant()) - effect.getPotion().affectEntity(null, null, entity, effect.getDuration(), 1.0); + if (effect.getEffect().isInstantenous()) + effect.getEffect().applyInstantenousEffect(null, null, entity, effect.getDuration(), 1.0); else - entity.addPotionEffect(effect); + entity.addEffect(effect); } private static BiPredicate plantCrop(IRegistryDelegate cropBlock) { return (world, ray) -> { - if (world.isRemote()) + if (world.isClientSide()) return true; - BlockPos hitPos = ray.getPos(); + BlockPos hitPos = ray.getBlockPos(); if (!world.isAreaLoaded(hitPos, 1)) return true; - Direction face = ray.getFace(); - BlockPos placePos = hitPos.offset(face); + Direction face = ray.getDirection(); + BlockPos placePos = hitPos.relative(face); if (!world.getBlockState(placePos) .getMaterial() .isReplaceable()) @@ -389,39 +389,39 @@ public class PotatoCannonProjectileTypes { BlockState blockState = world.getBlockState(hitPos); if (!blockState.canSustainPlant(world, hitPos, face, (IPlantable) cropBlock.get())) return false; - world.setBlockState(placePos, cropBlock.get().getDefaultState(), 3); + world.setBlock(placePos, cropBlock.get().defaultBlockState(), 3); return true; }; } private static BiPredicate placeBlockOnGround(IRegistryDelegate block) { return (world, ray) -> { - if (world.isRemote()) + if (world.isClientSide()) return true; - BlockPos hitPos = ray.getPos(); + BlockPos hitPos = ray.getBlockPos(); if (!world.isAreaLoaded(hitPos, 1)) return true; - Direction face = ray.getFace(); - BlockPos placePos = hitPos.offset(face); + Direction face = ray.getDirection(); + BlockPos placePos = hitPos.relative(face); if (!world.getBlockState(placePos) .getMaterial() .isReplaceable()) return false; if (face == Direction.UP) { - world.setBlockState(placePos, block.get().getDefaultState(), 3); + world.setBlock(placePos, block.get().defaultBlockState(), 3); } else if (world instanceof World) { - double y = ray.getHitVec().y - 0.5; - if (!world.isAirBlock(placePos.up())) + double y = ray.getLocation().y - 0.5; + if (!world.isEmptyBlock(placePos.above())) y = Math.min(y, placePos.getY()); - if (!world.isAirBlock(placePos.down())) + if (!world.isEmptyBlock(placePos.below())) y = Math.max(y, placePos.getY()); FallingBlockEntity falling = new FallingBlockEntity((World) world, placePos.getX() + 0.5, y, - placePos.getZ() + 0.5, block.get().getDefaultState()); - falling.fallTime = 1; - world.addEntity(falling); + placePos.getZ() + 0.5, block.get().defaultBlockState()); + falling.time = 1; + world.addFreshEntity(falling); } return true; @@ -431,8 +431,8 @@ public class PotatoCannonProjectileTypes { private static Predicate chorusTeleport(double teleportDiameter) { return ray -> { Entity entity = ray.getEntity(); - World world = entity.getEntityWorld(); - if (world.isRemote) + World world = entity.getCommandSenderWorld(); + if (world.isClientSide) return true; if (!(entity instanceof LivingEntity)) return false; @@ -443,9 +443,9 @@ public class PotatoCannonProjectileTypes { double entityZ = livingEntity.getZ(); for (int teleportTry = 0; teleportTry < 16; ++teleportTry) { - double teleportX = entityX + (livingEntity.getRNG().nextDouble() - 0.5D) * teleportDiameter; - double teleportY = MathHelper.clamp(entityY + (livingEntity.getRNG().nextInt((int) teleportDiameter) - (int) (teleportDiameter / 2)), 0.0D, world.getDimensionHeight() - 1); - double teleportZ = entityZ + (livingEntity.getRNG().nextDouble() - 0.5D) * teleportDiameter; + double teleportX = entityX + (livingEntity.getRandom().nextDouble() - 0.5D) * teleportDiameter; + double teleportY = MathHelper.clamp(entityY + (livingEntity.getRandom().nextInt((int) teleportDiameter) - (int) (teleportDiameter / 2)), 0.0D, world.getHeight() - 1); + double teleportZ = entityZ + (livingEntity.getRandom().nextDouble() - 0.5D) * teleportDiameter; /* Usable as soon as lowest supported forge > 36.1.3 */ @@ -454,14 +454,14 @@ public class PotatoCannonProjectileTypes { // return; // if (livingEntity.attemptTeleport(event.getTargetX(), event.getTargetY(), event.getTargetZ(), true)) { - if (livingEntity.attemptTeleport(teleportX, teleportY, teleportZ, true)) { + if (livingEntity.randomTeleport(teleportX, teleportY, teleportZ, true)) { if (livingEntity.isPassenger()) livingEntity.stopRiding(); - SoundEvent soundevent = livingEntity instanceof FoxEntity ? SoundEvents.ENTITY_FOX_TELEPORT : SoundEvents.ITEM_CHORUS_FRUIT_TELEPORT; + SoundEvent soundevent = livingEntity instanceof FoxEntity ? SoundEvents.FOX_TELEPORT : SoundEvents.CHORUS_FRUIT_TELEPORT; world.playSound(null, entityX, entityY, entityZ, soundevent, SoundCategory.PLAYERS, 1.0F, 1.0F); livingEntity.playSound(soundevent, 1.0F, 1.0F); - livingEntity.setMotion(Vector3d.ZERO); + livingEntity.setDeltaMovement(Vector3d.ZERO); return true; } } diff --git a/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoCannonRenderHandler.java b/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoCannonRenderHandler.java index 0cdf10d4a..3f5affbb6 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoCannonRenderHandler.java +++ b/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoCannonRenderHandler.java @@ -22,7 +22,7 @@ public class PotatoCannonRenderHandler extends ShootableGadgetRenderHandler { @Override protected void playSound(Hand hand, Vector3d position) { - PotatoProjectileEntity.playLaunchSound(Minecraft.getInstance().world, position, nextPitch); + PotatoProjectileEntity.playLaunchSound(Minecraft.getInstance().level, position, nextPitch); } @Override @@ -35,7 +35,7 @@ public class PotatoCannonRenderHandler extends ShootableGadgetRenderHandler { this.nextPitch = nextPitch; if (stack.isEmpty()) return; - ClientWorld world = Minecraft.getInstance().world; + ClientWorld world = Minecraft.getInstance().level; for (int i = 0; i < 2; i++) { Vector3d m = VecHelper.offsetRandomly(motion.scale(0.1f), Create.RANDOM, .025f); world.addParticle(new ItemParticleData(ParticleTypes.ITEM, stack), location.x, location.y, location.z, m.x, diff --git a/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoProjectileEntity.java b/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoProjectileEntity.java index a9faeca72..7de9a3a00 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoProjectileEntity.java +++ b/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoProjectileEntity.java @@ -72,37 +72,37 @@ public class PotatoProjectileEntity extends DamagingProjectileEntity implements } public void setEnchantmentEffectsFromCannon(ItemStack cannon) { - int power = EnchantmentHelper.getEnchantmentLevel(Enchantments.POWER, cannon); - int punch = EnchantmentHelper.getEnchantmentLevel(Enchantments.PUNCH, cannon); - int flame = EnchantmentHelper.getEnchantmentLevel(Enchantments.FLAME, cannon); - int recovery = EnchantmentHelper.getEnchantmentLevel(AllEnchantments.POTATO_RECOVERY.get(), cannon); + int power = EnchantmentHelper.getItemEnchantmentLevel(Enchantments.POWER_ARROWS, cannon); + int punch = EnchantmentHelper.getItemEnchantmentLevel(Enchantments.PUNCH_ARROWS, cannon); + int flame = EnchantmentHelper.getItemEnchantmentLevel(Enchantments.FLAMING_ARROWS, cannon); + int recovery = EnchantmentHelper.getItemEnchantmentLevel(AllEnchantments.POTATO_RECOVERY.get(), cannon); if (power > 0) additionalDamageMult = 1 + power * .2f; if (punch > 0) additionalKnockback = punch * .5f; if (flame > 0) - setFire(100); + setSecondsOnFire(100); if (recovery > 0) recoveryChance = .125f + recovery * .125f; } @Override - public void readAdditional(CompoundNBT nbt) { - stack = ItemStack.read(nbt.getCompound("Item")); + public void readAdditionalSaveData(CompoundNBT nbt) { + stack = ItemStack.of(nbt.getCompound("Item")); additionalDamageMult = nbt.getFloat("AdditionalDamage"); additionalKnockback = nbt.getFloat("AdditionalKnockback"); recoveryChance = nbt.getFloat("Recovery"); - super.readAdditional(nbt); + super.readAdditionalSaveData(nbt); } @Override - public void writeAdditional(CompoundNBT nbt) { + public void addAdditionalSaveData(CompoundNBT nbt) { nbt.put("Item", stack.serializeNBT()); nbt.putFloat("AdditionalDamage", additionalDamageMult); nbt.putFloat("AdditionalKnockback", additionalKnockback); nbt.putFloat("Recovery", recoveryChance); - super.writeAdditional(nbt); + super.addAdditionalSaveData(nbt); } public Entity getStuckEntity() { @@ -115,10 +115,10 @@ public class PotatoProjectileEntity extends DamagingProjectileEntity implements public void setStuckEntity(Entity stuckEntity) { this.stuckEntity = stuckEntity; - this.stuckOffset = getPositionVec().subtract(stuckEntity.getPositionVec()); + this.stuckOffset = position().subtract(stuckEntity.position()); this.stuckRenderer = new PotatoProjectileRenderMode.StuckToEntity(stuckOffset); this.stuckFallSpeed = 0.0; - setMotion(Vector3d.ZERO); + setDeltaMovement(Vector3d.ZERO); } public PotatoProjectileRenderMode getRenderMode() { @@ -134,17 +134,17 @@ public class PotatoProjectileEntity extends DamagingProjectileEntity implements Entity stuckEntity = getStuckEntity(); if (stuckEntity != null) { if (getY() < stuckEntity.getY() - 0.1) { - pop(getPositionVec()); + pop(position()); remove(); } else { stuckFallSpeed += 0.007 * projectileType.getGravityMultiplier(); stuckOffset = stuckOffset.add(0, -stuckFallSpeed, 0); - Vector3d pos = stuckEntity.getPositionVec() + Vector3d pos = stuckEntity.position() .add(stuckOffset); - setPosition(pos.x, pos.y, pos.z); + setPos(pos.x, pos.y, pos.z); } } else { - setMotion(getMotion().add(0, -0.05 * projectileType.getGravityMultiplier(), 0) + setDeltaMovement(getDeltaMovement().add(0, -0.05 * projectileType.getGravityMultiplier(), 0) .scale(projectileType.getDrag())); } @@ -152,28 +152,28 @@ public class PotatoProjectileEntity extends DamagingProjectileEntity implements } @Override - protected float getMotionFactor() { + protected float getInertia() { return 1; } @Override - protected IParticleData getParticle() { + protected IParticleData getTrailParticle() { return new AirParticleData(1, 10); } @Override - protected boolean isFireballFiery() { + protected boolean shouldBurn() { return false; } @Override - protected void onEntityHit(EntityRayTraceResult ray) { - super.onEntityHit(ray); + protected void onHitEntity(EntityRayTraceResult ray) { + super.onHitEntity(ray); if (getStuckEntity() != null) return; - Vector3d hit = ray.getHitVec(); + Vector3d hit = ray.getLocation(); Entity target = ray.getEntity(); PotatoCannonProjectileTypes projectileType = getProjectileType(); float damage = MathHelper.floor(projectileType.getDamage() * additionalDamageMult); @@ -183,23 +183,23 @@ public class PotatoProjectileEntity extends DamagingProjectileEntity implements if (!target.isAlive()) return; if (owner instanceof LivingEntity) - ((LivingEntity) owner).setLastAttackedEntity(target); - if (target instanceof PotatoProjectileEntity && ticksExisted < 10 && target.ticksExisted < 10) + ((LivingEntity) owner).setLastHurtMob(target); + if (target instanceof PotatoProjectileEntity && tickCount < 10 && target.tickCount < 10) return; pop(hit); - if (target instanceof WitherEntity && ((WitherEntity) target).shouldRenderOverlay()) + if (target instanceof WitherEntity && ((WitherEntity) target).isPowered()) return; boolean targetIsEnderman = target.getType() == EntityType.ENDERMAN; - int k = target.getFireTimer(); - if (this.isBurning() && !targetIsEnderman) - target.setFire(5); + int k = target.getRemainingFireTicks(); + if (this.isOnFire() && !targetIsEnderman) + target.setSecondsOnFire(5); - boolean onServer = !world.isRemote; - if (onServer && !target.attackEntityFrom(causePotatoDamage(), damage)) { - target.setFireTicks(k); + boolean onServer = !level.isClientSide; + if (onServer && !target.hurt(causePotatoDamage(), damage)) { + target.setRemainingFireTicks(k); remove(); return; } @@ -208,11 +208,11 @@ public class PotatoProjectileEntity extends DamagingProjectileEntity implements return; if (!projectileType.onEntityHit(ray) && onServer) - if (rand.nextDouble() <= recoveryChance) + if (random.nextDouble() <= recoveryChance) recoverItem(); if (!(target instanceof LivingEntity)) { - playHitSound(world, getPositionVec()); + playHitSound(level, position()); remove(); return; } @@ -220,32 +220,32 @@ public class PotatoProjectileEntity extends DamagingProjectileEntity implements LivingEntity livingentity = (LivingEntity) target; if (type.getReloadTicks() < 10) - livingentity.hurtResistantTime = type.getReloadTicks() + 10; + livingentity.invulnerableTime = type.getReloadTicks() + 10; if (knockback > 0) { - Vector3d appliedMotion = this.getMotion() - .mul(1.0D, 0.0D, 1.0D) + Vector3d appliedMotion = this.getDeltaMovement() + .multiply(1.0D, 0.0D, 1.0D) .normalize() .scale(knockback * 0.6); - if (appliedMotion.lengthSquared() > 0.0D) - livingentity.addVelocity(appliedMotion.x, 0.1D, appliedMotion.z); + if (appliedMotion.lengthSqr() > 0.0D) + livingentity.push(appliedMotion.x, 0.1D, appliedMotion.z); } if (onServer && owner instanceof LivingEntity) { - EnchantmentHelper.applyThornEnchantments(livingentity, owner); - EnchantmentHelper.applyArthropodEnchantments((LivingEntity) owner, livingentity); + EnchantmentHelper.doPostHurtEffects(livingentity, owner); + EnchantmentHelper.doPostDamageEffects((LivingEntity) owner, livingentity); } if (livingentity != owner && livingentity instanceof PlayerEntity && owner instanceof ServerPlayerEntity && !this.isSilent()) { ((ServerPlayerEntity) owner).connection - .sendPacket(new SChangeGameStatePacket(SChangeGameStatePacket.PROJECTILE_HIT_PLAYER, 0.0F)); + .send(new SChangeGameStatePacket(SChangeGameStatePacket.ARROW_HIT_PLAYER, 0.0F)); } if (onServer && owner instanceof ServerPlayerEntity) { ServerPlayerEntity serverplayerentity = (ServerPlayerEntity) owner; if (!target.isAlive() && target.getType() - .getClassification() == EntityClassification.MONSTER + .getCategory() == EntityClassification.MONSTER || (target instanceof PlayerEntity && target != owner)) AllTriggers.POTATO_KILL.trigger(serverplayerentity); } @@ -260,7 +260,7 @@ public class PotatoProjectileEntity extends DamagingProjectileEntity implements private void recoverItem() { if (!stack.isEmpty()) - entityDropItem(ItemHandlerHelper.copyStackWithSize(stack, 1)); + spawnAtLocation(ItemHandlerHelper.copyStackWithSize(stack, 1)); } public static void playHitSound(World world, Vector3d location) { @@ -272,23 +272,23 @@ public class PotatoProjectileEntity extends DamagingProjectileEntity implements } @Override - protected void onBlockHit(BlockRayTraceResult ray) { - Vector3d hit = ray.getHitVec(); + protected void onHitBlock(BlockRayTraceResult ray) { + Vector3d hit = ray.getLocation(); pop(hit); - if (!getProjectileType().onBlockHit(world, ray) && !world.isRemote) - if (rand.nextDouble() <= recoveryChance) + if (!getProjectileType().onBlockHit(level, ray) && !level.isClientSide) + if (random.nextDouble() <= recoveryChance) recoverItem(); - super.onBlockHit(ray); + super.onHitBlock(ray); remove(); } @Override - public boolean attackEntityFrom(DamageSource source, float amt) { + public boolean hurt(DamageSource source, float amt) { if (source == DamageSource.IN_FIRE || source == DamageSource.ON_FIRE) return false; if (this.isInvulnerableTo(source)) return false; - pop(getPositionVec()); + pop(position()); remove(); return true; } @@ -296,12 +296,12 @@ public class PotatoProjectileEntity extends DamagingProjectileEntity implements private void pop(Vector3d hit) { if (!stack.isEmpty()) { for (int i = 0; i < 7; i++) { - Vector3d m = VecHelper.offsetRandomly(Vector3d.ZERO, this.rand, .25f); - world.addParticle(new ItemParticleData(ParticleTypes.ITEM, stack), hit.x, hit.y, hit.z, m.x, m.y, m.z); + Vector3d m = VecHelper.offsetRandomly(Vector3d.ZERO, this.random, .25f); + level.addParticle(new ItemParticleData(ParticleTypes.ITEM, stack), hit.x, hit.y, hit.z, m.x, m.y, m.z); } } - if (!world.isRemote) - playHitSound(world, getPositionVec()); + if (!level.isClientSide) + playHitSound(level, position()); } private DamageSource causePotatoDamage() { @@ -319,24 +319,24 @@ public class PotatoProjectileEntity extends DamagingProjectileEntity implements @SuppressWarnings("unchecked") public static EntityType.Builder build(EntityType.Builder builder) { EntityType.Builder entityBuilder = (EntityType.Builder) builder; - return entityBuilder.size(.25f, .25f); + return entityBuilder.sized(.25f, .25f); } @Override - public IPacket createSpawnPacket() { + public IPacket getAddEntityPacket() { return NetworkHooks.getEntitySpawningPacket(this); } @Override public void writeSpawnData(PacketBuffer buffer) { CompoundNBT compound = new CompoundNBT(); - writeAdditional(compound); - buffer.writeCompoundTag(compound); + addAdditionalSaveData(compound); + buffer.writeNbt(compound); } @Override public void readSpawnData(PacketBuffer additionalData) { - readAdditional(additionalData.readCompoundTag()); + readAdditionalSaveData(additionalData.readNbt()); } } diff --git a/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoProjectileRenderMode.java b/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoProjectileRenderMode.java index 56c23cc01..40888f2d1 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoProjectileRenderMode.java +++ b/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoProjectileRenderMode.java @@ -22,7 +22,7 @@ public abstract class PotatoProjectileRenderMode { @OnlyIn(Dist.CLIENT) public void transform(MatrixStack ms, PotatoProjectileEntity entity, float pt) { Minecraft mc = Minecraft.getInstance(); - Vector3d p1 = mc.getRenderViewEntity() + Vector3d p1 = mc.getCameraEntity() .getEyePosition(pt); Vector3d diff = entity.getBoundingBox() .getCenter() @@ -42,8 +42,8 @@ public abstract class PotatoProjectileRenderMode { public void transform(MatrixStack ms, PotatoProjectileEntity entity, float pt) { super.transform(ms, entity, pt); MatrixStacker.of(ms) - .rotateZ((entity.ticksExisted + pt) * 2 * entityRandom(entity, 16)) - .rotateX((entity.ticksExisted + pt) * entityRandom(entity, 32)); + .rotateZ((entity.tickCount + pt) * 2 * entityRandom(entity, 16)) + .rotateX((entity.tickCount + pt) * entityRandom(entity, 32)); } } @@ -60,13 +60,13 @@ public abstract class PotatoProjectileRenderMode { @Override @OnlyIn(Dist.CLIENT) public void transform(MatrixStack ms, PotatoProjectileEntity entity, float pt) { - Vector3d diff = entity.getMotion(); + Vector3d diff = entity.getDeltaMovement(); MatrixStacker.of(ms) .rotateY(AngleHelper.deg(MathHelper.atan2(diff.x, diff.z))) .rotateX(270 + AngleHelper.deg(MathHelper.atan2(diff.y, -MathHelper.sqrt(diff.x * diff.x + diff.z * diff.z)))); MatrixStacker.of(ms) - .rotateY((entity.ticksExisted + pt) * 20 * spin + entityRandom(entity, 360)) + .rotateY((entity.tickCount + pt) * 20 * spin + entityRandom(entity, 360)) .rotateZ(-spriteAngleOffset); } diff --git a/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoProjectileRenderer.java b/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoProjectileRenderer.java index 01d2ee95b..48138d20b 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoProjectileRenderer.java +++ b/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoProjectileRenderer.java @@ -23,20 +23,20 @@ public class PotatoProjectileRenderer extends EntityRenderer createSpawnPacket() { + public IPacket getAddEntityPacket() { // TODO Auto-generated method stub return null; } diff --git a/src/main/java/com/simibubi/create/content/curiosities/zapper/ShootGadgetPacket.java b/src/main/java/com/simibubi/create/content/curiosities/zapper/ShootGadgetPacket.java index 12a204775..8226cc221 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/zapper/ShootGadgetPacket.java +++ b/src/main/java/com/simibubi/create/content/curiosities/zapper/ShootGadgetPacket.java @@ -57,10 +57,10 @@ public abstract class ShootGadgetPacket extends SimplePacketBase { context.get() .enqueueWork(() -> { Entity renderViewEntity = Minecraft.getInstance() - .getRenderViewEntity(); + .getCameraEntity(); if (renderViewEntity == null) return; - if (renderViewEntity.getPositionVec() + if (renderViewEntity.position() .distanceTo(location) > 100) return; diff --git a/src/main/java/com/simibubi/create/content/curiosities/zapper/ShootableGadgetItemMethods.java b/src/main/java/com/simibubi/create/content/curiosities/zapper/ShootableGadgetItemMethods.java index cefdd485f..a403f6ef0 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/zapper/ShootableGadgetItemMethods.java +++ b/src/main/java/com/simibubi/create/content/curiosities/zapper/ShootableGadgetItemMethods.java @@ -18,9 +18,9 @@ public class ShootableGadgetItemMethods { public static void applyCooldown(PlayerEntity player, ItemStack item, Hand hand, Predicate predicate, int cooldown) { boolean gunInOtherHand = - predicate.test(player.getHeldItem(hand == Hand.MAIN_HAND ? Hand.OFF_HAND : Hand.MAIN_HAND)); - player.getCooldownTracker() - .setCooldown(item.getItem(), gunInOtherHand ? cooldown * 2 / 3 : cooldown); + predicate.test(player.getItemInHand(hand == Hand.MAIN_HAND ? Hand.OFF_HAND : Hand.MAIN_HAND)); + player.getCooldowns() + .addCooldown(item.getItem(), gunInOtherHand ? cooldown * 2 / 3 : cooldown); } public static void sendPackets(PlayerEntity player, Function factory) { @@ -34,7 +34,7 @@ public class ShootableGadgetItemMethods { boolean isSwap = item.getTag() .contains("_Swap"); boolean mainHand = hand == Hand.MAIN_HAND; - boolean gunInOtherHand = predicate.test(player.getHeldItem(mainHand ? Hand.OFF_HAND : Hand.MAIN_HAND)); + boolean gunInOtherHand = predicate.test(player.getItemInHand(mainHand ? Hand.OFF_HAND : Hand.MAIN_HAND)); // Pass To Offhand if (mainHand && isSwap && gunInOtherHand) @@ -46,22 +46,22 @@ public class ShootableGadgetItemMethods { item.getTag() .remove("_Swap"); if (!mainHand && gunInOtherHand) - player.getHeldItem(Hand.MAIN_HAND) + player.getItemInHand(Hand.MAIN_HAND) .getTag() .remove("_Swap"); - player.setActiveHand(hand); + player.startUsingItem(hand); return false; } public static Vector3d getGunBarrelVec(PlayerEntity player, boolean mainHand, Vector3d rightHandForward) { - Vector3d start = player.getPositionVec() + Vector3d start = player.position() .add(0, player.getEyeHeight(), 0); - float yaw = (float) ((player.rotationYaw) / -180 * Math.PI); - float pitch = (float) ((player.rotationPitch) / -180 * Math.PI); - int flip = mainHand == (player.getPrimaryHand() == HandSide.RIGHT) ? -1 : 1; + float yaw = (float) ((player.yRot) / -180 * Math.PI); + float pitch = (float) ((player.xRot) / -180 * Math.PI); + int flip = mainHand == (player.getMainArm() == HandSide.RIGHT) ? -1 : 1; Vector3d barrelPosNoTransform = new Vector3d(flip * rightHandForward.x, rightHandForward.y, rightHandForward.z); - Vector3d barrelPos = start.add(barrelPosNoTransform.rotatePitch(pitch) - .rotateYaw(yaw)); + Vector3d barrelPos = start.add(barrelPosNoTransform.xRot(pitch) + .yRot(yaw)); return barrelPos; } diff --git a/src/main/java/com/simibubi/create/content/curiosities/zapper/ShootableGadgetRenderHandler.java b/src/main/java/com/simibubi/create/content/curiosities/zapper/ShootableGadgetRenderHandler.java index 11b7c2b5e..ae67e4cfd 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/zapper/ShootableGadgetRenderHandler.java +++ b/src/main/java/com/simibubi/create/content/curiosities/zapper/ShootableGadgetRenderHandler.java @@ -46,7 +46,7 @@ public abstract class ShootableGadgetRenderHandler { public void shoot(Hand hand, Vector3d location) { ClientPlayerEntity player = Minecraft.getInstance().player; - boolean rightHand = hand == Hand.MAIN_HAND ^ player.getPrimaryHand() == HandSide.LEFT; + boolean rightHand = hand == Hand.MAIN_HAND ^ player.getMainArm() == HandSide.LEFT; if (rightHand) { rightHandAnimation = .2f; dontReequipRight = false; @@ -77,16 +77,16 @@ public abstract class ShootableGadgetRenderHandler { Minecraft mc = Minecraft.getInstance(); AbstractClientPlayerEntity player = mc.player; TextureManager textureManager = mc.getTextureManager(); - PlayerRenderer playerrenderer = (PlayerRenderer) mc.getRenderManager() + PlayerRenderer playerrenderer = (PlayerRenderer) mc.getEntityRenderDispatcher() .getRenderer(player); - FirstPersonRenderer firstPersonRenderer = mc.getFirstPersonRenderer(); + FirstPersonRenderer firstPersonRenderer = mc.getItemInHandRenderer(); MatrixStack ms = event.getMatrixStack(); IRenderTypeBuffer buffer = event.getBuffers(); int light = event.getLight(); float pt = event.getPartialTicks(); - boolean rightHand = event.getHand() == Hand.MAIN_HAND ^ mc.player.getPrimaryHand() == HandSide.LEFT; + boolean rightHand = event.getHand() == Hand.MAIN_HAND ^ mc.player.getMainArm() == HandSide.LEFT; float recoil = rightHand ? MathHelper.lerp(pt, lastRightHandAnimation, rightHandAnimation) : MathHelper.lerp(pt, lastLeftHandAnimation, leftHandAnimation); float equipProgress = event.getEquipProgress(); @@ -97,8 +97,8 @@ public abstract class ShootableGadgetRenderHandler { equipProgress = 0; // Render arm - ms.push(); - textureManager.bindTexture(player.getLocationSkin()); + ms.pushPose(); + textureManager.bind(player.getSkinTextureLocation()); float flip = rightHand ? 1.0F : -1.0F; float f1 = MathHelper.sqrt(event.getSwingProgress()); @@ -109,40 +109,40 @@ public abstract class ShootableGadgetRenderHandler { float f6 = MathHelper.sin(f1 * (float) Math.PI); ms.translate(flip * (f2 + 0.64F - .1f), f3 + -0.4F + equipProgress * -0.6F, f4 + -0.72F + .3f + recoil); - ms.multiply(Vector3f.POSITIVE_Y.getDegreesQuaternion(flip * 75.0F)); - ms.multiply(Vector3f.POSITIVE_Y.getDegreesQuaternion(flip * f6 * 70.0F)); - ms.multiply(Vector3f.POSITIVE_Z.getDegreesQuaternion(flip * f5 * -20.0F)); + ms.mulPose(Vector3f.YP.rotationDegrees(flip * 75.0F)); + ms.mulPose(Vector3f.YP.rotationDegrees(flip * f6 * 70.0F)); + ms.mulPose(Vector3f.ZP.rotationDegrees(flip * f5 * -20.0F)); ms.translate(flip * -1.0F, 3.6F, 3.5F); - ms.multiply(Vector3f.POSITIVE_Z.getDegreesQuaternion(flip * 120.0F)); - ms.multiply(Vector3f.POSITIVE_X.getDegreesQuaternion(200.0F)); - ms.multiply(Vector3f.POSITIVE_Y.getDegreesQuaternion(flip * -135.0F)); + ms.mulPose(Vector3f.ZP.rotationDegrees(flip * 120.0F)); + ms.mulPose(Vector3f.XP.rotationDegrees(200.0F)); + ms.mulPose(Vector3f.YP.rotationDegrees(flip * -135.0F)); ms.translate(flip * 5.6F, 0.0F, 0.0F); - ms.multiply(Vector3f.POSITIVE_Y.getDegreesQuaternion(flip * 40.0F)); + ms.mulPose(Vector3f.YP.rotationDegrees(flip * 40.0F)); transformHand(ms, flip, equipProgress, recoil, pt); if (rightHand) - playerrenderer.renderRightArm(ms, buffer, light, player); + playerrenderer.renderRightHand(ms, buffer, light, player); else - playerrenderer.renderLeftArm(ms, buffer, light, player); - ms.pop(); + playerrenderer.renderLeftHand(ms, buffer, light, player); + ms.popPose(); // Render gadget - ms.push(); + ms.pushPose(); ms.translate(flip * (f2 + 0.64F - .1f), f3 + -0.4F + equipProgress * -0.6F, f4 + -0.72F - 0.1f + recoil); - ms.multiply(Vector3f.POSITIVE_Y.getDegreesQuaternion(flip * f6 * 70.0F)); - ms.multiply(Vector3f.POSITIVE_Z.getDegreesQuaternion(flip * f5 * -20.0F)); + ms.mulPose(Vector3f.YP.rotationDegrees(flip * f6 * 70.0F)); + ms.mulPose(Vector3f.ZP.rotationDegrees(flip * f5 * -20.0F)); transformTool(ms, flip, equipProgress, recoil, pt); firstPersonRenderer.renderItem(mc.player, heldItem, rightHand ? ItemCameraTransforms.TransformType.FIRST_PERSON_RIGHT_HAND : ItemCameraTransforms.TransformType.FIRST_PERSON_LEFT_HAND, !rightHand, ms, buffer, light); - ms.pop(); + ms.popPose(); event.setCanceled(true); } public void dontAnimateItem(Hand hand) { ClientPlayerEntity player = Minecraft.getInstance().player; - boolean rightHand = hand == Hand.MAIN_HAND ^ player.getPrimaryHand() == HandSide.LEFT; + boolean rightHand = hand == Hand.MAIN_HAND ^ player.getMainArm() == HandSide.LEFT; dontReequipRight |= rightHand; dontReequipLeft |= !rightHand; } diff --git a/src/main/java/com/simibubi/create/content/curiosities/zapper/ZapperInteractionHandler.java b/src/main/java/com/simibubi/create/content/curiosities/zapper/ZapperInteractionHandler.java index c56d86a0e..7a7ba0e59 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/zapper/ZapperInteractionHandler.java +++ b/src/main/java/com/simibubi/create/content/curiosities/zapper/ZapperInteractionHandler.java @@ -30,10 +30,10 @@ public class ZapperInteractionHandler { @SubscribeEvent public static void leftClickingBlocksWithTheZapperSelectsTheBlock(PlayerInteractEvent.LeftClickBlock event) { - if (event.getWorld().isRemote) + if (event.getWorld().isClientSide) return; ItemStack heldItem = event.getPlayer() - .getHeldItemMainhand(); + .getMainHandItem(); if (heldItem.getItem() instanceof ZapperItem && trySelect(heldItem, event.getPlayer())) { event.setCancellationResult(ActionResultType.FAIL); event.setCanceled(true); @@ -41,46 +41,46 @@ public class ZapperInteractionHandler { } public static boolean trySelect(ItemStack stack, PlayerEntity player) { - if (player.isSneaking()) + if (player.isShiftKeyDown()) return false; - Vector3d start = player.getPositionVec() + Vector3d start = player.position() .add(0, player.getEyeHeight(), 0); - Vector3d range = player.getLookVec() + Vector3d range = player.getLookAngle() .scale(getRange(stack)); - BlockRayTraceResult raytrace = player.world - .rayTraceBlocks(new RayTraceContext(start, start.add(range), BlockMode.OUTLINE, FluidMode.NONE, player)); - BlockPos pos = raytrace.getPos(); + BlockRayTraceResult raytrace = player.level + .clip(new RayTraceContext(start, start.add(range), BlockMode.OUTLINE, FluidMode.NONE, player)); + BlockPos pos = raytrace.getBlockPos(); if (pos == null) return false; - player.world.sendBlockBreakProgress(player.getEntityId(), pos, -1); - BlockState newState = player.world.getBlockState(pos); + player.level.destroyBlockProgress(player.getId(), pos, -1); + BlockState newState = player.level.getBlockState(pos); if (BlockHelper.getRequiredItem(newState) .isEmpty()) return false; if (newState.hasTileEntity() && !AllBlockTags.SAFE_NBT.matches(newState)) return false; - if (newState.contains(BlockStateProperties.DOUBLE_BLOCK_HALF)) + if (newState.hasProperty(BlockStateProperties.DOUBLE_BLOCK_HALF)) return false; - if (newState.contains(BlockStateProperties.ATTACHED)) + if (newState.hasProperty(BlockStateProperties.ATTACHED)) return false; - if (newState.contains(BlockStateProperties.HANGING)) + if (newState.hasProperty(BlockStateProperties.HANGING)) return false; - if (newState.contains(BlockStateProperties.BED_PART)) + if (newState.hasProperty(BlockStateProperties.BED_PART)) return false; - if (newState.contains(BlockStateProperties.STAIRS_SHAPE)) - newState = newState.with(BlockStateProperties.STAIRS_SHAPE, StairsShape.STRAIGHT); - if (newState.contains(BlockStateProperties.PERSISTENT)) - newState = newState.with(BlockStateProperties.PERSISTENT, true); - if (newState.contains(BlockStateProperties.WATERLOGGED)) - newState = newState.with(BlockStateProperties.WATERLOGGED, false); + if (newState.hasProperty(BlockStateProperties.STAIRS_SHAPE)) + newState = newState.setValue(BlockStateProperties.STAIRS_SHAPE, StairsShape.STRAIGHT); + if (newState.hasProperty(BlockStateProperties.PERSISTENT)) + newState = newState.setValue(BlockStateProperties.PERSISTENT, true); + if (newState.hasProperty(BlockStateProperties.WATERLOGGED)) + newState = newState.setValue(BlockStateProperties.WATERLOGGED, false); CompoundNBT data = null; - TileEntity tile = player.world.getTileEntity(pos); + TileEntity tile = player.level.getBlockEntity(pos); if (tile != null) { - data = tile.write(new CompoundNBT()); + data = tile.save(new CompoundNBT()); data.remove("x"); data.remove("y"); data.remove("z"); @@ -98,7 +98,7 @@ public class ZapperInteractionHandler { else tag.put("BlockData", data); - AllSoundEvents.CONFIRM.playOnServer(player.world, player.getBlockPos()); + AllSoundEvents.CONFIRM.playOnServer(player.level, player.blockPosition()); return true; } diff --git a/src/main/java/com/simibubi/create/content/curiosities/zapper/ZapperItem.java b/src/main/java/com/simibubi/create/content/curiosities/zapper/ZapperItem.java index 3d2f209e4..54f954931 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/zapper/ZapperItem.java +++ b/src/main/java/com/simibubi/create/content/curiosities/zapper/ZapperItem.java @@ -42,25 +42,27 @@ import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.common.util.Constants.NBT; import net.minecraftforge.fml.DistExecutor; +import net.minecraft.item.Item.Properties; + public abstract class ZapperItem extends Item { public ZapperItem(Properties properties) { - super(properties.maxStackSize(1)); + super(properties.stacksTo(1)); } @Override @OnlyIn(Dist.CLIENT) - public void addInformation(ItemStack stack, World worldIn, List tooltip, ITooltipFlag flagIn) { + public void appendHoverText(ItemStack stack, World worldIn, List tooltip, ITooltipFlag flagIn) { if (stack.hasTag() && stack.getTag() .contains("BlockUsed")) { String usedblock = NBTUtil.readBlockState(stack.getTag() .getCompound("BlockUsed")) .getBlock() - .getTranslationKey(); + .getDescriptionId(); ItemDescription.add(tooltip, Lang.translate("terrainzapper.usingBlock", - new TranslationTextComponent(usedblock).formatted(TextFormatting.GRAY)) - .formatted(TextFormatting.DARK_GRAY)); + new TranslationTextComponent(usedblock).withStyle(TextFormatting.GRAY)) + .withStyle(TextFormatting.DARK_GRAY)); } } @@ -84,38 +86,38 @@ public abstract class ZapperItem extends Item { @Nonnull @Override - public ActionResultType onItemUse(ItemUseContext context) { + public ActionResultType useOn(ItemUseContext context) { // Shift -> open GUI if (context.getPlayer() != null && context.getPlayer() - .isSneaking()) { - if (context.getWorld().isRemote) { + .isShiftKeyDown()) { + if (context.getLevel().isClientSide) { DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> { - openHandgunGUI(context.getItem(), context.getHand() == Hand.OFF_HAND); + openHandgunGUI(context.getItemInHand(), context.getHand() == Hand.OFF_HAND); }); context.getPlayer() - .getCooldownTracker() - .setCooldown(context.getItem() + .getCooldowns() + .addCooldown(context.getItemInHand() .getItem(), 10); } return ActionResultType.SUCCESS; } - return super.onItemUse(context); + return super.useOn(context); } @Override - public ActionResult onItemRightClick(World world, PlayerEntity player, Hand hand) { - ItemStack item = player.getHeldItem(hand); + public ActionResult use(World world, PlayerEntity player, Hand hand) { + ItemStack item = player.getItemInHand(hand); CompoundNBT nbt = item.getOrCreateTag(); boolean mainHand = hand == Hand.MAIN_HAND; // Shift -> Open GUI - if (player.isSneaking()) { - if (world.isRemote) { + if (player.isShiftKeyDown()) { + if (world.isClientSide) { DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> { openHandgunGUI(item, hand == Hand.OFF_HAND); }); - player.getCooldownTracker() - .setCooldown(item.getItem(), 10); + player.getCooldowns() + .addCooldown(item.getItem(), 10); } return new ActionResult<>(ActionResultType.SUCCESS, item); } @@ -126,13 +128,13 @@ public abstract class ZapperItem extends Item { // Check if can be used ITextComponent msg = validateUsage(item); if (msg != null) { - AllSoundEvents.DENY.play(world, player, player.getBlockPos()); - player.sendStatusMessage(msg.copy() - .formatted(TextFormatting.RED), true); + AllSoundEvents.DENY.play(world, player, player.blockPosition()); + player.displayClientMessage(msg.plainCopy() + .withStyle(TextFormatting.RED), true); return new ActionResult<>(ActionResultType.FAIL, item); } - BlockState stateToUse = Blocks.AIR.getDefaultState(); + BlockState stateToUse = Blocks.AIR.defaultBlockState(); if (nbt.contains("BlockUsed")) stateToUse = NBTUtil.readBlockState(nbt.getCompound("BlockUsed")); stateToUse = BlockHelper.setZeroAge(stateToUse); @@ -142,13 +144,13 @@ public abstract class ZapperItem extends Item { } // Raytrace - Find the target - Vector3d start = player.getPositionVec() + Vector3d start = player.position() .add(0, player.getEyeHeight(), 0); - Vector3d range = player.getLookVec() + Vector3d range = player.getLookAngle() .scale(getZappingRange(item)); BlockRayTraceResult raytrace = world - .rayTraceBlocks(new RayTraceContext(start, start.add(range), BlockMode.OUTLINE, FluidMode.NONE, player)); - BlockPos pos = raytrace.getPos(); + .clip(new RayTraceContext(start, start.add(range), BlockMode.OUTLINE, FluidMode.NONE, player)); + BlockPos pos = raytrace.getBlockPos(); BlockState stateReplaced = world.getBlockState(pos); // No target @@ -161,7 +163,7 @@ public abstract class ZapperItem extends Item { Vector3d barrelPos = ShootableGadgetItemMethods.getGunBarrelVec(player, mainHand, new Vector3d(.35f, -0.1f, 1)); // Client side - if (world.isRemote) { + if (world.isClientSide) { CreateClient.ZAPPER_RENDER_HANDLER.dontAnimateItem(hand); return new ActionResult<>(ActionResultType.SUCCESS, item); } @@ -170,7 +172,7 @@ public abstract class ZapperItem extends Item { if (activate(world, player, item, stateToUse, raytrace, data)) { ShootableGadgetItemMethods.applyCooldown(player, item, hand, this::isZapper, getCooldownDelay(item)); ShootableGadgetItemMethods.sendPackets(player, - b -> new ZapperBeamPacket(barrelPos, raytrace.getHitVec(), hand, b)); + b -> new ZapperBeamPacket(barrelPos, raytrace.getLocation(), hand, b)); } return new ActionResult<>(ActionResultType.SUCCESS, item); @@ -203,18 +205,18 @@ public abstract class ZapperItem extends Item { } @Override - public boolean canPlayerBreakBlockWhileHolding(BlockState state, World worldIn, BlockPos pos, PlayerEntity player) { + public boolean canAttackBlock(BlockState state, World worldIn, BlockPos pos, PlayerEntity player) { return false; } @Override - public UseAction getUseAction(ItemStack stack) { + public UseAction getUseAnimation(ItemStack stack) { return UseAction.NONE; } public static void setTileData(World world, BlockPos pos, BlockState state, CompoundNBT data, PlayerEntity player) { if (data != null && AllBlockTags.SAFE_NBT.matches(state)) { - TileEntity tile = world.getTileEntity(pos); + TileEntity tile = world.getBlockEntity(pos); if (tile != null) { data = NBTProcessors.process(tile, data, !player.isCreative()); if (data == null) @@ -222,7 +224,7 @@ public abstract class ZapperItem extends Item { data.putInt("x", pos.getX()); data.putInt("y", pos.getY()); data.putInt("z", pos.getZ()); - tile.fromTag(state, data); + tile.load(state, data); } } } diff --git a/src/main/java/com/simibubi/create/content/curiosities/zapper/ZapperItemRenderer.java b/src/main/java/com/simibubi/create/content/curiosities/zapper/ZapperItemRenderer.java index 91f05d0b0..4b6aa2dcc 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/zapper/ZapperItemRenderer.java +++ b/src/main/java/com/simibubi/create/content/curiosities/zapper/ZapperItemRenderer.java @@ -31,23 +31,23 @@ public abstract class ZapperItemRenderer exte BlockState state = NBTUtil.readBlockState(stack.getTag() .getCompound("BlockUsed")); - ms.push(); + ms.pushPose(); ms.translate(-0.3F, -0.45F, -0.0F); ms.scale(0.25F, 0.25F, 0.25F); IBakedModel modelForState = Minecraft.getInstance() - .getBlockRendererDispatcher() - .getModelForState(state); + .getBlockRenderer() + .getBlockModel(state); if (state.getBlock() instanceof FourWayBlock) modelForState = Minecraft.getInstance() .getItemRenderer() - .getItemModelWithOverrides(new ItemStack(state.getBlock()), Minecraft.getInstance().world, null); + .getModel(new ItemStack(state.getBlock()), Minecraft.getInstance().level, null); Minecraft.getInstance() .getItemRenderer() - .renderItem(new ItemStack(state.getBlock()), TransformType.NONE, false, ms, buffer, light, overlay, + .render(new ItemStack(state.getBlock()), TransformType.NONE, false, ms, buffer, light, overlay, modelForState); - ms.pop(); + ms.popPose(); } protected float getAnimationProgress(float pt, boolean leftHanded, boolean mainHand) { diff --git a/src/main/java/com/simibubi/create/content/curiosities/zapper/ZapperLog.java b/src/main/java/com/simibubi/create/content/curiosities/zapper/ZapperLog.java index 99955c390..6aa5be7bc 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/zapper/ZapperLog.java +++ b/src/main/java/com/simibubi/create/content/curiosities/zapper/ZapperLog.java @@ -35,7 +35,7 @@ public class ZapperLog { activeWorld = world; List blocks = positions.stream().map(pos -> { - TileEntity tileEntity = world.getTileEntity(pos); + TileEntity tileEntity = world.getBlockEntity(pos); return new BlockInfo(pos, world.getBlockState(pos), tileEntity == null ? null : tileEntity.serializeNBT()); }).collect(Collectors.toList()); diff --git a/src/main/java/com/simibubi/create/content/curiosities/zapper/ZapperRenderHandler.java b/src/main/java/com/simibubi/create/content/curiosities/zapper/ZapperRenderHandler.java index 5d370e8de..d04acb1e4 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/zapper/ZapperRenderHandler.java +++ b/src/main/java/com/simibubi/create/content/curiosities/zapper/ZapperRenderHandler.java @@ -50,7 +50,7 @@ public class ZapperRenderHandler extends ShootableGadgetRenderHandler { @Override protected void transformTool(MatrixStack ms, float flip, float equipProgress, float recoil, float pt) { ms.translate(flip * -0.1f, 0.1f, -0.4f); - ms.multiply(Vector3f.POSITIVE_Y.getDegreesQuaternion(flip * 5.0F)); + ms.mulPose(Vector3f.YP.rotationDegrees(flip * 5.0F)); } @Override @@ -60,7 +60,7 @@ public class ZapperRenderHandler extends ShootableGadgetRenderHandler { protected void playSound(Hand hand, Vector3d position) { float pitch = hand == Hand.MAIN_HAND ? 0.1f : 0.9f; Minecraft mc = Minecraft.getInstance(); - AllSoundEvents.WORLDSHAPER_PLACE.play(mc.world, mc.player, position, 0.1f, pitch); + AllSoundEvents.WORLDSHAPER_PLACE.play(mc.level, mc.player, position, 0.1f, pitch); } public void addBeam(LaserBeam beam) { @@ -68,7 +68,7 @@ public class ZapperRenderHandler extends ShootableGadgetRenderHandler { double x = beam.end.x; double y = beam.end.y; double z = beam.end.z; - ClientWorld world = Minecraft.getInstance().world; + ClientWorld world = Minecraft.getInstance().level; Supplier randomSpeed = () -> (r.nextDouble() - .5d) * .2f; Supplier randomOffset = () -> (r.nextDouble() - .5d) * .2f; for (int i = 0; i < 10; i++) { diff --git a/src/main/java/com/simibubi/create/content/curiosities/zapper/ZapperScreen.java b/src/main/java/com/simibubi/create/content/curiosities/zapper/ZapperScreen.java index 58b43fe45..a546067d2 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/zapper/ZapperScreen.java +++ b/src/main/java/com/simibubi/create/content/curiosities/zapper/ZapperScreen.java @@ -97,7 +97,7 @@ public class ZapperScreen extends AbstractSimiScreen { } protected void drawOnBackground(MatrixStack ms, int x, int y) { - textRenderer.draw(ms, title, x + 11, y + 4, 0x54214F); + font.draw(ms, title, x + 11, y + 4, 0x54214F); } @Override @@ -121,7 +121,7 @@ public class ZapperScreen extends AbstractSimiScreen { if (patternButton.isHovered()) { patternButtons.forEach(b -> b.active = true); patternButton.active = false; - patternButton.playDownSound(client.getSoundHandler()); + patternButton.playDownSound(minecraft.getSoundManager()); nbt.putString("Pattern", PlacementPatterns.values()[patternButtons.indexOf(patternButton)].name()); } } @@ -142,13 +142,13 @@ public class ZapperScreen extends AbstractSimiScreen { } protected void renderBlock(MatrixStack ms, int x, int y) { - ms.push(); + ms.pushPose(); ms.translate(x + 32, y + 42, 120); - ms.multiply(new Vector3f(1f, 0, 0).getDegreesQuaternion(-25f)); - ms.multiply(new Vector3f(0, 1f, 0).getDegreesQuaternion(-45f)); + ms.mulPose(new Vector3f(1f, 0, 0).rotationDegrees(-25f)); + ms.mulPose(new Vector3f(0, 1f, 0).rotationDegrees(-45f)); ms.scale(20, 20, 20); - BlockState state = Blocks.AIR.getDefaultState(); + BlockState state = Blocks.AIR.defaultBlockState(); if (zapper.hasTag() && zapper.getTag() .contains("BlockUsed")) state = NBTUtil.readBlockState(zapper.getTag() @@ -156,7 +156,7 @@ public class ZapperScreen extends AbstractSimiScreen { GuiGameElement.of(state) .render(ms); - ms.pop(); + ms.popPose(); } protected void writeAdditionalOptions(CompoundNBT nbt) {} diff --git a/src/main/java/com/simibubi/create/content/curiosities/zapper/terrainzapper/CuboidBrush.java b/src/main/java/com/simibubi/create/content/curiosities/zapper/terrainzapper/CuboidBrush.java index af409cc5a..f7c5d7f45 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/zapper/terrainzapper/CuboidBrush.java +++ b/src/main/java/com/simibubi/create/content/curiosities/zapper/terrainzapper/CuboidBrush.java @@ -26,8 +26,8 @@ public class CuboidBrush extends ShapedBrush { if (updateShape) { BlockPos zero = BlockPos.ZERO; positions = BlockPos - .getAllInBox(zero.add((param0 - 1) / -2, (param1 - 1) / -2, (param2 - 1) / -2), - zero.add((param0) / 2, (param1) / 2, (param2) / 2)) + .betweenClosedStream(zero.offset((param0 - 1) / -2, (param1 - 1) / -2, (param2 - 1) / -2), + zero.offset((param0) / 2, (param1) / 2, (param2) / 2)) .map(BlockPos::new) .collect(Collectors.toList()); } @@ -54,8 +54,8 @@ public class CuboidBrush extends ShapedBrush { int y = (param1 + (param1 == 0 ? 0 : offset)) / 2; int z = (param2 + (param2 == 0 ? 0 : offset)) / 2; - return BlockPos.ZERO.offset(face, face.getAxis() - .getCoordinate(x, y, z) * (option == PlacementOptions.Attached ? 1 : -1)); + return BlockPos.ZERO.relative(face, face.getAxis() + .choose(x, y, z) * (option == PlacementOptions.Attached ? 1 : -1)); } @Override diff --git a/src/main/java/com/simibubi/create/content/curiosities/zapper/terrainzapper/CylinderBrush.java b/src/main/java/com/simibubi/create/content/curiosities/zapper/terrainzapper/CylinderBrush.java index 0ec8b4f99..9ca87ced9 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/zapper/terrainzapper/CylinderBrush.java +++ b/src/main/java/com/simibubi/create/content/curiosities/zapper/terrainzapper/CylinderBrush.java @@ -30,7 +30,7 @@ public class CylinderBrush extends ShapedBrush { for (int i = 0; i <= MAX_RADIUS; i++) { int radius = i; List positions = - BlockPos.getAllInBox(BlockPos.ZERO.add(-i - 1, 0, -i - 1), BlockPos.ZERO.add(i + 1, 0, i + 1)) + BlockPos.betweenClosedStream(BlockPos.ZERO.offset(-i - 1, 0, -i - 1), BlockPos.ZERO.offset(i + 1, 0, i + 1)) .map(BlockPos::new) .filter(p -> VecHelper.getCenterOf(p) .distanceTo(VecHelper.getCenterOf(BlockPos.ZERO)) < radius + .42f) @@ -40,7 +40,7 @@ public class CylinderBrush extends ShapedBrush { for (int layer = 0; layer < h; layer++) { int yOffset = layer - h / 2; for (BlockPos p : positions) - stackedPositions.add(p.up(yOffset)); + stackedPositions.add(p.above(yOffset)); } cachedBrushes.put(Pair.of(i, h), stackedPositions); } @@ -58,7 +58,7 @@ public class CylinderBrush extends ShapedBrush { int r = (param0 + 1 + offset); int y = (param1 + (param1 == 0 ? 0 : yOffset)) / 2; - return BlockPos.ZERO.offset(face, (face.getAxis() + return BlockPos.ZERO.relative(face, (face.getAxis() .isVertical() ? y : r) * (option == PlacementOptions.Attached ? 1 : -1)); } diff --git a/src/main/java/com/simibubi/create/content/curiosities/zapper/terrainzapper/DynamicBrush.java b/src/main/java/com/simibubi/create/content/curiosities/zapper/terrainzapper/DynamicBrush.java index 5305a65e5..7e262093d 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/zapper/terrainzapper/DynamicBrush.java +++ b/src/main/java/com/simibubi/create/content/curiosities/zapper/terrainzapper/DynamicBrush.java @@ -83,10 +83,10 @@ public class DynamicBrush extends Brush { for (int z = -1; z <= 1; z++) if (Math.abs(x) + Math.abs(y) + Math.abs(z) < 2 || searchDiagonals) if (targetFace.getAxis() - .getCoordinate(x, y, z) == 0 || !surface) + .choose(x, y, z) == 0 || !surface) offsets.add(new BlockPos(x, y, z)); - BlockPos startPos = replace ? targetPos : targetPos.offset(targetFace); + BlockPos startPos = replace ? targetPos : targetPos.relative(targetFace); frontier.add(startPos); while (!frontier.isEmpty()) { @@ -94,36 +94,36 @@ public class DynamicBrush extends Brush { if (visited.contains(currentPos)) continue; visited.add(currentPos); - if (!currentPos.withinDistance(startPos, searchRange)) + if (!currentPos.closerThan(startPos, searchRange)) continue; // Replace Mode if (replace) { BlockState stateToReplace = world.getBlockState(currentPos); - BlockState stateAboveStateToReplace = world.getBlockState(currentPos.offset(targetFace)); + BlockState stateAboveStateToReplace = world.getBlockState(currentPos.relative(targetFace)); // Criteria - if (stateToReplace.getBlockHardness(world, currentPos) == -1) + if (stateToReplace.getDestroySpeed(world, currentPos) == -1) continue; if (stateToReplace.getBlock() != state.getBlock() && !fuzzy) continue; if (stateToReplace.getMaterial() .isReplaceable()) continue; - if (BlockHelper.hasBlockSolidSide(stateAboveStateToReplace, world, currentPos.offset(targetFace), + if (BlockHelper.hasBlockSolidSide(stateAboveStateToReplace, world, currentPos.relative(targetFace), targetFace.getOpposite()) && surface) continue; affectedPositions.add(currentPos); // Search adjacent spaces for (BlockPos offset : offsets) - frontier.add(currentPos.add(offset)); + frontier.add(currentPos.offset(offset)); continue; } // Place Mode BlockState stateToPlaceAt = world.getBlockState(currentPos); - BlockState stateToPlaceOn = world.getBlockState(currentPos.offset(targetFace.getOpposite())); + BlockState stateToPlaceOn = world.getBlockState(currentPos.relative(targetFace.getOpposite())); // Criteria if (stateToPlaceOn.getMaterial() @@ -138,7 +138,7 @@ public class DynamicBrush extends Brush { // Search adjacent spaces for (BlockPos offset : offsets) - frontier.add(currentPos.add(offset)); + frontier.add(currentPos.offset(offset)); continue; } diff --git a/src/main/java/com/simibubi/create/content/curiosities/zapper/terrainzapper/FlattenTool.java b/src/main/java/com/simibubi/create/content/curiosities/zapper/terrainzapper/FlattenTool.java index eb11bd942..fc7287ca7 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/zapper/terrainzapper/FlattenTool.java +++ b/src/main/java/com/simibubi/create/content/curiosities/zapper/terrainzapper/FlattenTool.java @@ -56,7 +56,7 @@ public class FlattenTool { public static void apply(World world, List targetPositions, Direction facing) { List surfaces = new ArrayList<>(); Map, Integer> heightMap = new HashMap<>(); - int offset = facing.getAxisDirection().getOffset(); + int offset = facing.getAxisDirection().getStep(); int minEntry = Integer.MAX_VALUE; int minCoord1 = Integer.MAX_VALUE; @@ -80,7 +80,7 @@ public class FlattenTool { continue; } - p = p.offset(facing); + p = p.relative(facing); BlockState surface = world.getBlockState(p); if (!TerrainTools.isReplaceable(surface)) { @@ -90,7 +90,7 @@ public class FlattenTool { } surfaces.add(p); - int coordinate = facing.getAxis().getCoordinate(p.getX(), p.getY(), p.getZ()); + int coordinate = facing.getAxis().choose(p.getX(), p.getY(), p.getZ()); if (!heightMap.containsKey(coords) || heightMap.get(coords).equals(Integer.MAX_VALUE) || heightMap.get(coords).equals(Integer.MIN_VALUE) || heightMap.get(coords) * offset < coordinate * offset) { @@ -130,7 +130,7 @@ public class FlattenTool { for (BlockPos p : surfaces) { Pair coords = getCoords(p, facing); - int surfaceCoord = facing.getAxis().getCoordinate(p.getX(), p.getY(), p.getZ()) * offset; + int surfaceCoord = facing.getAxis().choose(p.getX(), p.getY(), p.getZ()) * offset; int targetCoord = heightMapArray[coords.getKey() - minCoord1][coords.getValue() - minCoord2] * offset; // Keep surface @@ -141,10 +141,10 @@ public class FlattenTool { BlockState blockState = world.getBlockState(p); int timeOut = 1000; while (surfaceCoord > targetCoord) { - BlockPos below = p.offset(facing.getOpposite()); - world.setBlockState(below, blockState); - world.setBlockState(p, blockState.getFluidState().getBlockState()); - p = p.offset(facing.getOpposite()); + BlockPos below = p.relative(facing.getOpposite()); + world.setBlockAndUpdate(below, blockState); + world.setBlockAndUpdate(p, blockState.getFluidState().createLegacyBlock()); + p = p.relative(facing.getOpposite()); surfaceCoord--; if (timeOut-- <= 0) break; @@ -152,11 +152,11 @@ public class FlattenTool { // Raise surface while (surfaceCoord < targetCoord) { - BlockPos above = p.offset(facing); + BlockPos above = p.relative(facing); if (!(blockState.getBlock() instanceof FlowingFluidBlock)) - world.setBlockState(above, blockState); - world.setBlockState(p, world.getBlockState(p.offset(facing.getOpposite()))); - p = p.offset(facing); + world.setBlockAndUpdate(above, blockState); + world.setBlockAndUpdate(p, world.getBlockState(p.relative(facing.getOpposite()))); + p = p.relative(facing); surfaceCoord++; if (timeOut-- <= 0) break; diff --git a/src/main/java/com/simibubi/create/content/curiosities/zapper/terrainzapper/ShapedBrush.java b/src/main/java/com/simibubi/create/content/curiosities/zapper/terrainzapper/ShapedBrush.java index f0e67f3c2..c89e5c7a3 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/zapper/terrainzapper/ShapedBrush.java +++ b/src/main/java/com/simibubi/create/content/curiosities/zapper/terrainzapper/ShapedBrush.java @@ -20,7 +20,7 @@ public abstract class ShapedBrush extends Brush { if (includedPositions == null) return affectedPositions; for (BlockPos blockPos : includedPositions) - affectedPositions.add(targetPos.add(blockPos)); + affectedPositions.add(targetPos.offset(blockPos)); return affectedPositions; } diff --git a/src/main/java/com/simibubi/create/content/curiosities/zapper/terrainzapper/SphereBrush.java b/src/main/java/com/simibubi/create/content/curiosities/zapper/terrainzapper/SphereBrush.java index be7657398..544e70d1d 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/zapper/terrainzapper/SphereBrush.java +++ b/src/main/java/com/simibubi/create/content/curiosities/zapper/terrainzapper/SphereBrush.java @@ -25,7 +25,7 @@ public class SphereBrush extends ShapedBrush { for (int i = 0; i <= MAX_RADIUS; i++) { int radius = i; List positions = - BlockPos.getAllInBox(BlockPos.ZERO.add(-i - 1, -i - 1, -i - 1), BlockPos.ZERO.add(i + 1, i + 1, i + 1)) + BlockPos.betweenClosedStream(BlockPos.ZERO.offset(-i - 1, -i - 1, -i - 1), BlockPos.ZERO.offset(i + 1, i + 1, i + 1)) .map(BlockPos::new).filter(p -> VecHelper.getCenterOf(p) .distanceTo(VecHelper.getCenterOf(BlockPos.ZERO)) < radius + .5f) .collect(Collectors.toList()); @@ -41,7 +41,7 @@ public class SphereBrush extends ShapedBrush { int offset = option == PlacementOptions.Attached ? 0 : -1; int r = (param0 + 1 + offset); - return BlockPos.ZERO.offset(face, r * (option == PlacementOptions.Attached ? 1 : -1)); + return BlockPos.ZERO.relative(face, r * (option == PlacementOptions.Attached ? 1 : -1)); } @Override diff --git a/src/main/java/com/simibubi/create/content/curiosities/zapper/terrainzapper/TerrainTools.java b/src/main/java/com/simibubi/create/content/curiosities/zapper/terrainzapper/TerrainTools.java index 43ba4e9f5..1c51a6883 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/zapper/terrainzapper/TerrainTools.java +++ b/src/main/java/com/simibubi/create/content/curiosities/zapper/terrainzapper/TerrainTools.java @@ -42,14 +42,14 @@ public enum TerrainTools { public void run(World world, List targetPositions, Direction facing, @Nullable BlockState paintedState, @Nullable CompoundNBT data, PlayerEntity player) { switch (this) { case Clear: - targetPositions.forEach(p -> world.setBlockState(p, Blocks.AIR.getDefaultState())); + targetPositions.forEach(p -> world.setBlockAndUpdate(p, Blocks.AIR.defaultBlockState())); break; case Fill: targetPositions.forEach(p -> { BlockState toReplace = world.getBlockState(p); if (!isReplaceable(toReplace)) return; - world.setBlockState(p, paintedState); + world.setBlockAndUpdate(p, paintedState); ZapperItem.setTileData(world, p, paintedState, data, player); }); break; @@ -64,18 +64,18 @@ public enum TerrainTools { if (toOverlay == paintedState) return; - p = p.up(); + p = p.above(); BlockState toReplace = world.getBlockState(p); if (!isReplaceable(toReplace)) return; - world.setBlockState(p, paintedState); + world.setBlockAndUpdate(p, paintedState); ZapperItem.setTileData(world, p, paintedState, data, player); }); break; case Place: targetPositions.forEach(p -> { - world.setBlockState(p, paintedState); + world.setBlockAndUpdate(p, paintedState); ZapperItem.setTileData(world, p, paintedState, data, player); }); break; @@ -84,7 +84,7 @@ public enum TerrainTools { BlockState toReplace = world.getBlockState(p); if (isReplaceable(toReplace)) return; - world.setBlockState(p, paintedState); + world.setBlockAndUpdate(p, paintedState); ZapperItem.setTileData(world, p, paintedState, data, player); }); break; diff --git a/src/main/java/com/simibubi/create/content/curiosities/zapper/terrainzapper/WorldshaperItem.java b/src/main/java/com/simibubi/create/content/curiosities/zapper/terrainzapper/WorldshaperItem.java index 86d74a5c6..9b7a1ce2a 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/zapper/terrainzapper/WorldshaperItem.java +++ b/src/main/java/com/simibubi/create/content/curiosities/zapper/terrainzapper/WorldshaperItem.java @@ -21,6 +21,8 @@ import net.minecraft.world.World; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraft.item.Item.Properties; + public class WorldshaperItem extends ZapperItem { public WorldshaperItem(Properties properties) { @@ -62,7 +64,7 @@ public class WorldshaperItem extends ZapperItem { protected boolean activate(World world, PlayerEntity player, ItemStack stack, BlockState stateToUse, BlockRayTraceResult raytrace, CompoundNBT data) { - BlockPos targetPos = raytrace.getPos(); + BlockPos targetPos = raytrace.getBlockPos(); List affectedPositions = new ArrayList<>(); CompoundNBT tag = stack.getOrCreateTag(); @@ -73,11 +75,11 @@ public class WorldshaperItem extends ZapperItem { TerrainTools tool = NBTHelper.readEnum(tag, "Tool", TerrainTools.class); brush.set(params.getX(), params.getY(), params.getZ()); - targetPos = targetPos.add(brush.getOffset(player.getLookVec(), raytrace.getFace(), option)); - brush.addToGlobalPositions(world, targetPos, raytrace.getFace(), affectedPositions, tool); + targetPos = targetPos.offset(brush.getOffset(player.getLookAngle(), raytrace.getDirection(), option)); + brush.addToGlobalPositions(world, targetPos, raytrace.getDirection(), affectedPositions, tool); PlacementPatterns.applyPattern(affectedPositions, stack); brush.redirectTool(tool) - .run(world, affectedPositions, raytrace.getFace(), stateToUse, data, player); + .run(world, affectedPositions, raytrace.getDirection(), stateToUse, data, player); return true; } diff --git a/src/main/java/com/simibubi/create/content/curiosities/zapper/terrainzapper/WorldshaperItemRenderer.java b/src/main/java/com/simibubi/create/content/curiosities/zapper/terrainzapper/WorldshaperItemRenderer.java index 3b5886bab..d7f6fb113 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/zapper/terrainzapper/WorldshaperItemRenderer.java +++ b/src/main/java/com/simibubi/create/content/curiosities/zapper/terrainzapper/WorldshaperItemRenderer.java @@ -31,9 +31,9 @@ public class WorldshaperItemRenderer extends ZapperItemRenderer brush.addToGlobalPositions(player.world, pos, raytrace.getFace(), new ArrayList<>(), tool); + () -> brush.addToGlobalPositions(player.level, pos, raytrace.getDirection(), new ArrayList<>(), tool); } } diff --git a/src/main/java/com/simibubi/create/content/curiosities/zapper/terrainzapper/WorldshaperScreen.java b/src/main/java/com/simibubi/create/content/curiosities/zapper/terrainzapper/WorldshaperScreen.java index d578b551a..2203efdca 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/zapper/terrainzapper/WorldshaperScreen.java +++ b/src/main/java/com/simibubi/create/content/curiosities/zapper/terrainzapper/WorldshaperScreen.java @@ -48,7 +48,7 @@ public class WorldshaperScreen extends ZapperScreen { public WorldshaperScreen(ItemStack zapper, boolean offhand) { super(AllGuiTextures.TERRAINZAPPER, zapper, offhand); fontColor = 0x767676; - title = zapper.getDisplayName(); + title = zapper.getHoverName(); nbt = zapper.getOrCreateTag(); } @@ -100,9 +100,9 @@ public class WorldshaperScreen extends ZapperScreen { .withRange(currentBrush.getMin(index), currentBrush.getMax(index) + 1) .writingTo(label) .titled(currentBrush.getParamLabel(index) - .copy()) + .plainCopy()) .calling(state -> { - label.x = x + 65 + 20 * indexFinal - textRenderer.getWidth(label.text) / 2; + label.x = x + 65 + 20 * indexFinal - font.width(label.text) / 2; }); input.setState(params[index]); input.onChanged(); @@ -218,7 +218,7 @@ public class WorldshaperScreen extends ZapperScreen { placementButtons.forEach(b -> b.active = true); placementButton.active = false; placementButton.playDownSound(Minecraft.getInstance() - .getSoundHandler()); + .getSoundManager()); nbt.putString("Placement", PlacementOptions.values()[placementButtons.indexOf(placementButton)].name()); } @@ -230,7 +230,7 @@ public class WorldshaperScreen extends ZapperScreen { toolButtons.forEach(b -> b.active = true); toolButton.active = false; toolButton.playDownSound(Minecraft.getInstance() - .getSoundHandler()); + .getSoundManager()); nbt.putString("Tool", supportedTools[toolButtons.indexOf(toolButton)].name()); } } @@ -251,9 +251,9 @@ public class WorldshaperScreen extends ZapperScreen { for (int index = 2; index >= currentBrush.amtParams; index--) AllGuiTextures.TERRAINZAPPER_INACTIVE_PARAM.draw(matrixStack, x + 56 + 20 * index, y + 40); - textRenderer.draw(matrixStack, toolSection, x + 7, y + 69, fontColor); + font.draw(matrixStack, toolSection, x + 7, y + 69, fontColor); if (currentBrush.hasPlacementOptions()) - textRenderer.draw(matrixStack, placementSection, x + 136, y + 69, fontColor); + font.draw(matrixStack, placementSection, x + 136, y + 69, fontColor); } @Override diff --git a/src/main/java/com/simibubi/create/content/logistics/RedstoneLinkNetworkHandler.java b/src/main/java/com/simibubi/create/content/logistics/RedstoneLinkNetworkHandler.java index 38ab8b08c..d16baef0e 100644 --- a/src/main/java/com/simibubi/create/content/logistics/RedstoneLinkNetworkHandler.java +++ b/src/main/java/com/simibubi/create/content/logistics/RedstoneLinkNetworkHandler.java @@ -42,7 +42,7 @@ public class RedstoneLinkNetworkHandler { private Frequency(ItemStack stack) { this.stack = stack; item = stack.getItem(); - CompoundNBT displayTag = stack.getChildTag("display"); + CompoundNBT displayTag = stack.getTagElement("display"); color = displayTag != null && displayTag.contains("color") ? displayTag.getInt("color") : -1; } @@ -138,7 +138,7 @@ public class RedstoneLinkNetworkHandler { if (from == to) return true; return from.getLocation() - .withinDistance(to.getLocation(), AllConfigs.SERVER.logistics.linkRange.get()); + .closerThan(to.getLocation(), AllConfigs.SERVER.logistics.linkRange.get()); } public Map, Set> networksIn(IWorld world) { diff --git a/src/main/java/com/simibubi/create/content/logistics/block/FlapData.java b/src/main/java/com/simibubi/create/content/logistics/block/FlapData.java index 73ca73d70..660b61b42 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/FlapData.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/FlapData.java @@ -40,7 +40,7 @@ public class FlapData extends InstanceData implements IFlatLight { } public FlapData setPosition(Vector3f pos) { - return setPosition(pos.getX(), pos.getY(), pos.getZ()); + return setPosition(pos.x(), pos.y(), pos.z()); } public FlapData setPosition(int x, int y, int z) { diff --git a/src/main/java/com/simibubi/create/content/logistics/block/belts/tunnel/BeltTunnelBlock.java b/src/main/java/com/simibubi/create/content/logistics/block/belts/tunnel/BeltTunnelBlock.java index b16763bf2..3fc108e7b 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/belts/tunnel/BeltTunnelBlock.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/belts/tunnel/BeltTunnelBlock.java @@ -35,6 +35,8 @@ import net.minecraft.world.IWorld; import net.minecraft.world.IWorldReader; import net.minecraft.world.World; +import net.minecraft.block.AbstractBlock.Properties; + public class BeltTunnelBlock extends Block implements ITE, IWrenchable { public static final Property SHAPE = EnumProperty.create("shape", Shape.class); @@ -42,14 +44,14 @@ public class BeltTunnelBlock extends Block implements ITE, public BeltTunnelBlock(Properties properties) { super(properties); - setDefaultState(getDefaultState().with(SHAPE, Shape.STRAIGHT)); + registerDefaultState(defaultBlockState().setValue(SHAPE, Shape.STRAIGHT)); } public enum Shape implements IStringSerializable { STRAIGHT, WINDOW, CLOSED, T_LEFT, T_RIGHT, CROSS; @Override - public String getString() { + public String getSerializedName() { return Lang.asId(name()); } } @@ -70,58 +72,58 @@ public class BeltTunnelBlock extends Block implements ITE, } @Override - public boolean isValidPosition(BlockState state, IWorldReader worldIn, BlockPos pos) { - BlockState blockState = worldIn.getBlockState(pos.down()); + public boolean canSurvive(BlockState state, IWorldReader worldIn, BlockPos pos) { + BlockState blockState = worldIn.getBlockState(pos.below()); if (!isValidPositionForPlacement(state, worldIn, pos)) return false; - if (!blockState.get(BeltBlock.CASING)) + if (!blockState.getValue(BeltBlock.CASING)) return false; return true; } public boolean isValidPositionForPlacement(BlockState state, IWorldReader worldIn, BlockPos pos) { - BlockState blockState = worldIn.getBlockState(pos.down()); + BlockState blockState = worldIn.getBlockState(pos.below()); if (!AllBlocks.BELT.has(blockState)) return false; - if (blockState.get(BeltBlock.SLOPE) != BeltSlope.HORIZONTAL) + if (blockState.getValue(BeltBlock.SLOPE) != BeltSlope.HORIZONTAL) return false; return true; } public static boolean hasWindow(BlockState state) { - return state.get(SHAPE) == Shape.WINDOW || state.get(SHAPE) == Shape.CLOSED; + return state.getValue(SHAPE) == Shape.WINDOW || state.getValue(SHAPE) == Shape.CLOSED; } public static boolean isStraight(BlockState state) { - return hasWindow(state) || state.get(SHAPE) == Shape.STRAIGHT; + return hasWindow(state) || state.getValue(SHAPE) == Shape.STRAIGHT; } public static boolean isJunction(BlockState state) { - Shape shape = state.get(SHAPE); + Shape shape = state.getValue(SHAPE); return shape == Shape.CROSS || shape == Shape.T_LEFT || shape == Shape.T_RIGHT; } @Override public BlockState getStateForPlacement(BlockItemUseContext context) { - return getTunnelState(context.getWorld(), context.getPos()); + return getTunnelState(context.getLevel(), context.getClickedPos()); } @Override - public void onBlockAdded(BlockState state, World world, BlockPos pos, BlockState p_220082_4_, boolean p_220082_5_) { - if (!(world instanceof WrappedWorld) && !world.isRemote()) + public void onPlace(BlockState state, World world, BlockPos pos, BlockState p_220082_4_, boolean p_220082_5_) { + if (!(world instanceof WrappedWorld) && !world.isClientSide()) withTileEntityDo(world, pos, BeltTunnelTileEntity::updateTunnelConnections); } @Override - public BlockState updatePostPlacement(BlockState state, Direction facing, BlockState facingState, IWorld worldIn, + public BlockState updateShape(BlockState state, Direction facing, BlockState facingState, IWorld worldIn, BlockPos currentPos, BlockPos facingPos) { if (facing.getAxis() .isVertical()) return state; - if (!(worldIn instanceof WrappedWorld) && !worldIn.isRemote()) + if (!(worldIn instanceof WrappedWorld) && !worldIn.isClientSide()) withTileEntityDo(worldIn, currentPos, BeltTunnelTileEntity::updateTunnelConnections); BlockState tunnelState = getTunnelState(worldIn, currentPos); - if (tunnelState.get(HORIZONTAL_AXIS) == state.get(HORIZONTAL_AXIS)) { + if (tunnelState.getValue(HORIZONTAL_AXIS) == state.getValue(HORIZONTAL_AXIS)) { if (hasWindow(tunnelState) == hasWindow(state)) return state; } @@ -132,55 +134,55 @@ public class BeltTunnelBlock extends Block implements ITE, public void updateTunnel(IWorld world, BlockPos pos) { BlockState tunnel = world.getBlockState(pos); BlockState newTunnel = getTunnelState(world, pos); - if (tunnel != newTunnel && !world.isRemote()) { - world.setBlockState(pos, newTunnel, 3); - TileEntity te = world.getTileEntity(pos); + if (tunnel != newTunnel && !world.isClientSide()) { + world.setBlock(pos, newTunnel, 3); + TileEntity te = world.getBlockEntity(pos); if (te != null && (te instanceof BeltTunnelTileEntity)) ((BeltTunnelTileEntity) te).updateTunnelConnections(); } } private BlockState getTunnelState(IBlockReader reader, BlockPos pos) { - BlockState state = getDefaultState(); - BlockState belt = reader.getBlockState(pos.down()); + BlockState state = defaultBlockState(); + BlockState belt = reader.getBlockState(pos.below()); if (AllBlocks.BELT.has(belt)) - state = state.with(HORIZONTAL_AXIS, belt.get(BeltBlock.HORIZONTAL_FACING) + state = state.setValue(HORIZONTAL_AXIS, belt.getValue(BeltBlock.HORIZONTAL_FACING) .getAxis()); - Axis axis = state.get(HORIZONTAL_AXIS); + Axis axis = state.getValue(HORIZONTAL_AXIS); // T and Cross - Direction left = Direction.getFacingFromAxis(AxisDirection.POSITIVE, axis) - .rotateY(); - boolean onLeft = hasValidOutput(reader, pos.down(), left); - boolean onRight = hasValidOutput(reader, pos.down(), left.getOpposite()); + Direction left = Direction.get(AxisDirection.POSITIVE, axis) + .getClockWise(); + boolean onLeft = hasValidOutput(reader, pos.below(), left); + boolean onRight = hasValidOutput(reader, pos.below(), left.getOpposite()); if (onLeft && onRight) - state = state.with(SHAPE, Shape.CROSS); + state = state.setValue(SHAPE, Shape.CROSS); else if (onLeft) - state = state.with(SHAPE, Shape.T_LEFT); + state = state.setValue(SHAPE, Shape.T_LEFT); else if (onRight) - state = state.with(SHAPE, Shape.T_RIGHT); + state = state.setValue(SHAPE, Shape.T_RIGHT); - if (state.get(SHAPE) == Shape.STRAIGHT) { + if (state.getValue(SHAPE) == Shape.STRAIGHT) { boolean canHaveWindow = canHaveWindow(reader, pos, axis); if (canHaveWindow) - state = state.with(SHAPE, Shape.WINDOW); + state = state.setValue(SHAPE, Shape.WINDOW); } return state; } protected boolean canHaveWindow(IBlockReader reader, BlockPos pos, Axis axis) { - Direction fw = Direction.getFacingFromAxis(AxisDirection.POSITIVE, axis); - BlockState blockState1 = reader.getBlockState(pos.offset(fw)); - BlockState blockState2 = reader.getBlockState(pos.offset(fw.getOpposite())); + Direction fw = Direction.get(AxisDirection.POSITIVE, axis); + BlockState blockState1 = reader.getBlockState(pos.relative(fw)); + BlockState blockState2 = reader.getBlockState(pos.relative(fw.getOpposite())); boolean funnel1 = blockState1.getBlock() instanceof BeltFunnelBlock - && blockState1.get(BeltFunnelBlock.SHAPE) == BeltFunnelBlock.Shape.EXTENDED - && blockState1.get(BeltFunnelBlock.HORIZONTAL_FACING) == fw.getOpposite(); + && blockState1.getValue(BeltFunnelBlock.SHAPE) == BeltFunnelBlock.Shape.EXTENDED + && blockState1.getValue(BeltFunnelBlock.HORIZONTAL_FACING) == fw.getOpposite(); boolean funnel2 = blockState2.getBlock() instanceof BeltFunnelBlock - && blockState2.get(BeltFunnelBlock.SHAPE) == BeltFunnelBlock.Shape.EXTENDED - && blockState2.get(BeltFunnelBlock.HORIZONTAL_FACING) == fw; + && blockState2.getValue(BeltFunnelBlock.SHAPE) == BeltFunnelBlock.Shape.EXTENDED + && blockState2.getValue(BeltFunnelBlock.HORIZONTAL_FACING) == fw; boolean valid1 = blockState1.getBlock() instanceof BeltTunnelBlock || funnel1; boolean valid2 = blockState2.getBlock() instanceof BeltTunnelBlock || funnel2; @@ -189,12 +191,12 @@ public class BeltTunnelBlock extends Block implements ITE, } private boolean hasValidOutput(IBlockReader world, BlockPos pos, Direction side) { - BlockState blockState = world.getBlockState(pos.offset(side)); + BlockState blockState = world.getBlockState(pos.relative(side)); if (AllBlocks.BELT.has(blockState)) - return blockState.get(BeltBlock.HORIZONTAL_FACING) + return blockState.getValue(BeltBlock.HORIZONTAL_FACING) .getAxis() == side.getAxis(); DirectBeltInputBehaviour behaviour = - TileEntityBehaviour.get(world, pos.offset(side), DirectBeltInputBehaviour.TYPE); + TileEntityBehaviour.get(world, pos.relative(side), DirectBeltInputBehaviour.TYPE); return behaviour != null && behaviour.canInsertFromSide(side); } @@ -204,30 +206,30 @@ public class BeltTunnelBlock extends Block implements ITE, return ActionResultType.PASS; // Toggle windows - Shape shape = state.get(SHAPE); + Shape shape = state.getValue(SHAPE); shape = shape == Shape.CLOSED ? Shape.WINDOW : Shape.CLOSED; - World world = context.getWorld(); - if (!world.isRemote) - world.setBlockState(context.getPos(), state.with(SHAPE, shape), 2); + World world = context.getLevel(); + if (!world.isClientSide) + world.setBlock(context.getClickedPos(), state.setValue(SHAPE, shape), 2); return ActionResultType.SUCCESS; } @Override public BlockState rotate(BlockState state, Rotation rotation) { - Direction fromAxis = Direction.getFacingFromAxis(AxisDirection.POSITIVE, state.get(HORIZONTAL_AXIS)); + Direction fromAxis = Direction.get(AxisDirection.POSITIVE, state.getValue(HORIZONTAL_AXIS)); Direction rotated = rotation.rotate(fromAxis); - return state.with(HORIZONTAL_AXIS, rotated.getAxis()); + return state.setValue(HORIZONTAL_AXIS, rotated.getAxis()); } @Override public void neighborChanged(BlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos, boolean isMoving) { - if (worldIn.isRemote) + if (worldIn.isClientSide) return; - if (fromPos.equals(pos.down())) { - if (!isValidPosition(state, worldIn, pos)) { + if (fromPos.equals(pos.below())) { + if (!canSurvive(state, worldIn, pos)) { worldIn.destroyBlock(pos, true); return; } @@ -235,9 +237,9 @@ public class BeltTunnelBlock extends Block implements ITE, } @Override - protected void fillStateContainer(Builder builder) { + protected void createBlockStateDefinition(Builder builder) { builder.add(HORIZONTAL_AXIS, SHAPE); - super.fillStateContainer(builder); + super.createBlockStateDefinition(builder); } @Override 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 e40dfdff0..beeb853fd 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 @@ -31,14 +31,14 @@ public class BeltTunnelInstance extends TileEntityInstance Instancer model = modelManager.getMaterial(AllMaterialSpecs.FLAPS) .getModel(AllBlockPartials.BELT_TUNNEL_FLAP, blockState); - int blockLight = world.getLightLevel(LightType.BLOCK, pos); - int skyLight = world.getLightLevel(LightType.SKY, pos); + int blockLight = world.getBrightness(LightType.BLOCK, pos); + int skyLight = world.getBrightness(LightType.SKY, pos); tile.flaps.forEach((direction, flapValue) -> { float flapness = flapValue.get(AnimationTickHolder.getPartialTicks()); - float horizontalAngle = direction.getOpposite().getHorizontalAngle(); + float horizontalAngle = direction.getOpposite().toYRot(); float flapScale = direction.getAxis() == Direction.Axis.X ? 1 : -1; diff --git a/src/main/java/com/simibubi/create/content/logistics/block/belts/tunnel/BeltTunnelItem.java b/src/main/java/com/simibubi/create/content/logistics/block/belts/tunnel/BeltTunnelItem.java index 3f7a44fc5..ea38d5455 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/belts/tunnel/BeltTunnelItem.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/belts/tunnel/BeltTunnelItem.java @@ -16,6 +16,8 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.shapes.ISelectionContext; import net.minecraft.world.World; +import net.minecraft.item.Item.Properties; + public class BeltTunnelItem extends BlockItem { public BeltTunnelItem(Block p_i48527_1_, Properties p_i48527_2_) { @@ -26,19 +28,19 @@ public class BeltTunnelItem extends BlockItem { protected boolean canPlace(BlockItemUseContext ctx, BlockState state) { PlayerEntity playerentity = ctx.getPlayer(); ISelectionContext iselectioncontext = - playerentity == null ? ISelectionContext.dummy() : ISelectionContext.forEntity(playerentity); - World world = ctx.getWorld(); - BlockPos pos = ctx.getPos(); - return (!this.checkPosition() || AllBlocks.ANDESITE_TUNNEL.get() - .isValidPositionForPlacement(state, world, pos)) && world.canPlace(state, pos, iselectioncontext); + playerentity == null ? ISelectionContext.empty() : ISelectionContext.of(playerentity); + World world = ctx.getLevel(); + BlockPos pos = ctx.getClickedPos(); + return (!this.mustSurvive() || AllBlocks.ANDESITE_TUNNEL.get() + .isValidPositionForPlacement(state, world, pos)) && world.isUnobstructed(state, pos, iselectioncontext); } @Override - protected boolean onBlockPlaced(BlockPos pos, World world, PlayerEntity p_195943_3_, ItemStack p_195943_4_, + protected boolean updateCustomBlockEntityTag(BlockPos pos, World world, PlayerEntity p_195943_3_, ItemStack p_195943_4_, BlockState state) { - boolean flag = super.onBlockPlaced(pos, world, p_195943_3_, p_195943_4_, state); - if (!world.isRemote) { - BeltTileEntity belt = BeltHelper.getSegmentTE(world, pos.down()); + boolean flag = super.updateCustomBlockEntityTag(pos, world, p_195943_3_, p_195943_4_, state); + if (!world.isClientSide) { + BeltTileEntity belt = BeltHelper.getSegmentTE(world, pos.below()); if (belt != null) { AllTriggers.triggerFor(AllTriggers.PLACE_TUNNEL, p_195943_3_); if (belt.casing == CasingType.NONE) diff --git a/src/main/java/com/simibubi/create/content/logistics/block/belts/tunnel/BeltTunnelRenderer.java b/src/main/java/com/simibubi/create/content/logistics/block/belts/tunnel/BeltTunnelRenderer.java index 920d64259..a94e15361 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/belts/tunnel/BeltTunnelRenderer.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/belts/tunnel/BeltTunnelRenderer.java @@ -31,10 +31,10 @@ public class BeltTunnelRenderer extends SmartTileEntityRenderer { if (!(te instanceof BrassTunnelTileEntity)) return ActionResultType.PASS; BrassTunnelTileEntity bte = (BrassTunnelTileEntity) te; - List stacksOfGroup = bte.grabAllStacksOfGroup(world.isRemote); + List stacksOfGroup = bte.grabAllStacksOfGroup(world.isClientSide); if (stacksOfGroup.isEmpty()) return ActionResultType.PASS; - if (world.isRemote) + if (world.isClientSide) return ActionResultType.SUCCESS; for (ItemStack itemStack : stacksOfGroup) player.inventory.placeItemBackInInventory(world, itemStack.copy()); - world.playSound(null, pos, SoundEvents.ENTITY_ITEM_PICKUP, SoundCategory.PLAYERS, .2f, + world.playSound(null, pos, SoundEvents.ITEM_PICKUP, SoundCategory.PLAYERS, .2f, 1f + Create.RANDOM.nextFloat()); return ActionResultType.SUCCESS; }); @@ -56,22 +56,22 @@ public class BrassTunnelBlock extends BeltTunnelBlock { } @Override - public BlockState updatePostPlacement(BlockState state, Direction facing, BlockState facingState, IWorld worldIn, + public BlockState updateShape(BlockState state, Direction facing, BlockState facingState, IWorld worldIn, BlockPos currentPos, BlockPos facingPos) { - return super.updatePostPlacement(state, facing, facingState, worldIn, currentPos, facingPos); + return super.updateShape(state, facing, facingState, worldIn, currentPos, facingPos); } @Override - public void onReplaced(BlockState p_196243_1_, World p_196243_2_, BlockPos p_196243_3_, BlockState p_196243_4_, + public void onRemove(BlockState p_196243_1_, World p_196243_2_, BlockPos p_196243_3_, BlockState p_196243_4_, boolean p_196243_5_) { if (p_196243_1_.hasTileEntity() && (p_196243_1_.getBlock() != p_196243_4_.getBlock() || !p_196243_4_.hasTileEntity())) { TileEntityBehaviour.destroy(p_196243_2_, p_196243_3_, FilteringBehaviour.TYPE); withTileEntityDo(p_196243_2_, p_196243_3_, te -> { if (te instanceof BrassTunnelTileEntity) - Block.spawnAsEntity(p_196243_2_, p_196243_3_, ((BrassTunnelTileEntity) te).stackToDistribute); + Block.popResource(p_196243_2_, p_196243_3_, ((BrassTunnelTileEntity) te).stackToDistribute); }); - p_196243_2_.removeTileEntity(p_196243_3_); + p_196243_2_.removeBlockEntity(p_196243_3_); } } diff --git a/src/main/java/com/simibubi/create/content/logistics/block/belts/tunnel/BrassTunnelCTBehaviour.java b/src/main/java/com/simibubi/create/content/logistics/block/belts/tunnel/BrassTunnelCTBehaviour.java index ede331c95..2f5f70a03 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/belts/tunnel/BrassTunnelCTBehaviour.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/belts/tunnel/BrassTunnelCTBehaviour.java @@ -10,6 +10,8 @@ import net.minecraft.util.Direction; import net.minecraft.util.math.BlockPos; import net.minecraft.world.IBlockDisplayReader; +import com.simibubi.create.foundation.block.connected.ConnectedTextureBehaviour.CTContext; + public class BrassTunnelCTBehaviour extends ConnectedTextureBehaviour { @Override @@ -25,7 +27,7 @@ public class BrassTunnelCTBehaviour extends ConnectedTextureBehaviour { if (yDiff != 0) return false; - TileEntity te = reader.getTileEntity(pos); + TileEntity te = reader.getBlockEntity(pos); if (!(te instanceof BrassTunnelTileEntity)) return false; BrassTunnelTileEntity tunnelTE = (BrassTunnelTileEntity) te; diff --git a/src/main/java/com/simibubi/create/content/logistics/block/belts/tunnel/BrassTunnelTileEntity.java b/src/main/java/com/simibubi/create/content/logistics/block/belts/tunnel/BrassTunnelTileEntity.java index 62e7ca059..e86042119 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/belts/tunnel/BrassTunnelTileEntity.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/belts/tunnel/BrassTunnelTileEntity.java @@ -111,7 +111,7 @@ public class BrassTunnelTileEntity extends BeltTunnelTileEntity implements IHave @Override public void tick() { super.tick(); - BeltTileEntity beltBelow = BeltHelper.getSegmentTE(world, pos.down()); + BeltTileEntity beltBelow = BeltHelper.getSegmentTE(level, worldPosition.below()); if (distributionProgress > 0) distributionProgress--; @@ -119,7 +119,7 @@ public class BrassTunnelTileEntity extends BeltTunnelTileEntity implements IHave return; if (stackToDistribute.isEmpty() && !syncedOutputActive) return; - if (world.isRemote && !isVirtual()) + if (level.isClientSide && !isVirtual()) return; if (distributionProgress == -1) { @@ -153,8 +153,8 @@ public class BrassTunnelTileEntity extends BeltTunnelTileEntity implements IHave if (insertIntoTunnel(tunnel, output, stackToDistribute, true) == null) continue; distributionTargets.get(!tunnel.flapFilterEmpty(output)) - .add(Pair.of(tunnel.pos, output)); - int distance = tunnel.pos.getX() + tunnel.pos.getZ() - pos.getX() - pos.getZ(); + .add(Pair.of(tunnel.worldPosition, output)); + int distance = tunnel.worldPosition.getX() + tunnel.worldPosition.getZ() - worldPosition.getX() - worldPosition.getZ(); if (distance < 0) distributionDistanceLeft = Math.max(distributionDistanceLeft, -distance); else @@ -184,7 +184,7 @@ public class BrassTunnelTileEntity extends BeltTunnelTileEntity implements IHave for (Pair pair : list) { BlockPos tunnelPos = pair.getKey(); Direction output = pair.getValue(); - TileEntity te = world.getTileEntity(tunnelPos); + TileEntity te = level.getBlockEntity(tunnelPos); if (!(te instanceof BrassTunnelTileEntity)) continue; validTargets.add(Pair.of((BrassTunnelTileEntity) te, output)); @@ -316,7 +316,7 @@ public class BrassTunnelTileEntity extends BeltTunnelTileEntity implements IHave stackToDistribute = stack; distributionProgress = -1; sendData(); - markDirty(); + setChanged(); } public ItemStack getStackToDistribute() { @@ -336,7 +336,7 @@ public class BrassTunnelTileEntity extends BeltTunnelTileEntity implements IHave for (boolean left : Iterate.trueAndFalse) { BrassTunnelTileEntity adjacent = this; while (adjacent != null) { - if (!world.isAreaLoaded(adjacent.getPos(), 1)) + if (!level.isAreaLoaded(adjacent.getBlockPos(), 1)) return null; adjacent = adjacent.getAdjacent(left); if (adjacent == null) @@ -361,13 +361,13 @@ public class BrassTunnelTileEntity extends BeltTunnelTileEntity implements IHave if (!tunnel.testFlapFilter(side, stack)) return null; - BeltTileEntity below = BeltHelper.getSegmentTE(world, tunnel.pos.down()); + BeltTileEntity below = BeltHelper.getSegmentTE(level, tunnel.worldPosition.below()); if (below == null) return null; - BlockPos offset = tunnel.getPos() - .down() - .offset(side); - DirectBeltInputBehaviour sideOutput = TileEntityBehaviour.get(world, offset, DirectBeltInputBehaviour.TYPE); + BlockPos offset = tunnel.getBlockPos() + .below() + .relative(side); + DirectBeltInputBehaviour sideOutput = TileEntityBehaviour.get(level, offset, DirectBeltInputBehaviour.TYPE); if (sideOutput != null) { if (!sideOutput.canInsertFromSide(side)) return null; @@ -379,7 +379,7 @@ public class BrassTunnelTileEntity extends BeltTunnelTileEntity implements IHave Direction movementFacing = below.getMovementFacing(); if (side == movementFacing) - if (!BlockHelper.hasBlockSolidSide(world.getBlockState(offset), world, offset, side.getOpposite())) { + if (!BlockHelper.hasBlockSolidSide(level.getBlockState(offset), level, offset, side.getOpposite())) { BeltTileEntity controllerTE = below.getControllerTE(); if (controllerTE == null) return null; @@ -391,15 +391,15 @@ public class BrassTunnelTileEntity extends BeltTunnelTileEntity implements IHave float movementSpeed = Math.max(Math.abs(beltMovementSpeed), 1 / 8f); int additionalOffset = beltMovementSpeed > 0 ? 1 : 0; Vector3d outPos = BeltHelper.getVectorForOffset(controllerTE, below.index + additionalOffset); - Vector3d outMotion = Vector3d.of(side.getDirectionVec()) + Vector3d outMotion = Vector3d.atLowerCornerOf(side.getNormal()) .scale(movementSpeed) .add(0, 1 / 8f, 0); outPos.add(outMotion.normalize()); - ItemEntity entity = new ItemEntity(world, outPos.x, outPos.y + 6 / 16f, outPos.z, ejected); - entity.setMotion(outMotion); - entity.setDefaultPickupDelay(); - entity.velocityChanged = true; - world.addEntity(entity); + ItemEntity entity = new ItemEntity(level, outPos.x, outPos.y + 6 / 16f, outPos.z, ejected); + entity.setDeltaMovement(outMotion); + entity.setDefaultPickUpDelay(); + entity.hurtMarked = true; + level.addFreshEntity(entity); } return ItemStack.EMPTY; @@ -413,7 +413,7 @@ public class BrassTunnelTileEntity extends BeltTunnelTileEntity implements IHave return false; if (filtering.get(side) == null) { FilteringBehaviour adjacentFilter = - TileEntityBehaviour.get(world, pos.offset(side), FilteringBehaviour.TYPE); + TileEntityBehaviour.get(level, worldPosition.relative(side), FilteringBehaviour.TYPE); if (adjacentFilter == null) return true; return adjacentFilter.test(stack); @@ -426,7 +426,7 @@ public class BrassTunnelTileEntity extends BeltTunnelTileEntity implements IHave return false; if (filtering.get(side) == null) { FilteringBehaviour adjacentFilter = - TileEntityBehaviour.get(world, pos.offset(side), FilteringBehaviour.TYPE); + TileEntityBehaviour.get(level, worldPosition.relative(side), FilteringBehaviour.TYPE); if (adjacentFilter == null) return true; return adjacentFilter.getFilter() @@ -463,7 +463,7 @@ public class BrassTunnelTileEntity extends BeltTunnelTileEntity implements IHave BlockState blockState = getBlockState(); if (!AllBlocks.BRASS_TUNNEL.has(blockState)) return false; - Axis axis = blockState.get(BrassTunnelBlock.HORIZONTAL_AXIS); + Axis axis = blockState.getValue(BrassTunnelBlock.HORIZONTAL_AXIS); for (Direction direction : flaps.keySet()) if (direction.getAxis() != axis) return true; @@ -478,7 +478,7 @@ public class BrassTunnelTileEntity extends BeltTunnelTileEntity implements IHave for (boolean left : Iterate.trueAndFalse) { BrassTunnelTileEntity adjacent = this; while (adjacent != null) { - if (!world.isAreaLoaded(adjacent.getPos(), 1)) + if (!level.isAreaLoaded(adjacent.getBlockPos(), 1)) return null; adjacent = adjacent.getAdjacent(left); if (adjacent == null) @@ -495,7 +495,7 @@ public class BrassTunnelTileEntity extends BeltTunnelTileEntity implements IHave private void addValidOutputsOf(BrassTunnelTileEntity tunnelTE, List> validOutputs) { syncSet.add(tunnelTE); - BeltTileEntity below = BeltHelper.getSegmentTE(world, tunnelTE.pos.down()); + BeltTileEntity below = BeltHelper.getSegmentTE(level, tunnelTE.worldPosition.below()); if (below == null) return; Direction movementFacing = below.getMovementFacing(); @@ -516,13 +516,13 @@ public class BrassTunnelTileEntity extends BeltTunnelTileEntity implements IHave if (direction == movementFacing.getOpposite()) continue; if (tunnelTE.sides.contains(direction)) { - BlockPos offset = tunnelTE.pos.down() - .offset(direction); + BlockPos offset = tunnelTE.worldPosition.below() + .relative(direction); DirectBeltInputBehaviour inputBehaviour = - TileEntityBehaviour.get(world, offset, DirectBeltInputBehaviour.TYPE); + TileEntityBehaviour.get(level, offset, DirectBeltInputBehaviour.TYPE); if (inputBehaviour == null) { if (direction == movementFacing) - if (!BlockHelper.hasBlockSolidSide(world.getBlockState(offset), world, offset, + if (!BlockHelper.hasBlockSolidSide(level.getBlockState(offset), level, offset, direction.getOpposite())) validOutputs.add(Pair.of(tunnelTE, direction)); continue; @@ -572,7 +572,7 @@ public class BrassTunnelTileEntity extends BeltTunnelTileEntity implements IHave CompoundNBT nbt = new CompoundNBT(); nbt.put("Pos", NBTUtil.writeBlockPos(pair.getKey())); nbt.putInt("Face", pair.getValue() - .getIndex()); + .get3DDataValue()); return nbt; })); } @@ -588,7 +588,7 @@ public class BrassTunnelTileEntity extends BeltTunnelTileEntity implements IHave syncedOutputActive = compound.getBoolean("SyncedOutput"); connectedLeft = compound.getBoolean("ConnectedLeft"); connectedRight = compound.getBoolean("ConnectedRight"); - stackToDistribute = ItemStack.read(compound.getCompound("StackToDistribute")); + stackToDistribute = ItemStack.of(compound.getCompound("StackToDistribute")); distributionProgress = compound.getFloat("DistributionProgress"); previousOutputIndex = compound.getInt("PreviousIndex"); distributionDistanceLeft = compound.getInt("DistanceLeft"); @@ -598,7 +598,7 @@ public class BrassTunnelTileEntity extends BeltTunnelTileEntity implements IHave distributionTargets.set(filtered, NBTHelper .readCompoundList(compound.getList(filtered ? "FilteredTargets" : "Targets", NBT.TAG_COMPOUND), nbt -> { BlockPos pos = NBTUtil.readBlockPos(nbt.getCompound("Pos")); - Direction face = Direction.byIndex(nbt.getInt("Face")); + Direction face = Direction.from3DDataValue(nbt.getInt("Face")); return Pair.of(pos, face); })); } @@ -609,8 +609,8 @@ public class BrassTunnelTileEntity extends BeltTunnelTileEntity implements IHave return; if (wasConnectedLeft != connectedLeft || wasConnectedRight != connectedRight) { requestModelDataUpdate(); - if (hasWorld()) - world.notifyBlockUpdate(getPos(), getBlockState(), getBlockState(), 16); + if (hasLevel()) + level.sendBlockUpdated(getBlockPos(), getBlockState(), getBlockState(), 16); } filtering.updateFilterPresence(); } @@ -630,10 +630,10 @@ public class BrassTunnelTileEntity extends BeltTunnelTileEntity implements IHave connectedLeft = nowConnectedLeft; connectivityChanged = true; BrassTunnelTileEntity adjacent = getAdjacent(true); - if (adjacent != null && !world.isRemote) { + if (adjacent != null && !level.isClientSide) { adjacent.updateTunnelConnections(); adjacent.selectionMode.setValue(selectionMode.getValue()); - AllTriggers.triggerForNearbyPlayers(AllTriggers.CONNECT_TUNNEL, world, pos, 4); + AllTriggers.triggerForNearbyPlayers(AllTriggers.CONNECT_TUNNEL, level, worldPosition, 4); } } @@ -641,7 +641,7 @@ public class BrassTunnelTileEntity extends BeltTunnelTileEntity implements IHave connectedRight = nowConnectedRight; connectivityChanged = true; BrassTunnelTileEntity adjacent = getAdjacent(false); - if (adjacent != null && !world.isRemote) { + if (adjacent != null && !level.isClientSide) { adjacent.updateTunnelConnections(); adjacent.selectionMode.setValue(selectionMode.getValue()); } @@ -662,24 +662,24 @@ public class BrassTunnelTileEntity extends BeltTunnelTileEntity implements IHave @Nullable protected BrassTunnelTileEntity getAdjacent(boolean leftSide) { - if (!hasWorld()) + if (!hasLevel()) return null; BlockState blockState = getBlockState(); if (!AllBlocks.BRASS_TUNNEL.has(blockState)) return null; - Axis axis = blockState.get(BrassTunnelBlock.HORIZONTAL_AXIS); - Direction baseDirection = Direction.getFacingFromAxis(AxisDirection.POSITIVE, axis); - Direction direction = leftSide ? baseDirection.rotateYCCW() : baseDirection.rotateY(); - BlockPos adjacentPos = pos.offset(direction); - BlockState adjacentBlockState = world.getBlockState(adjacentPos); + Axis axis = blockState.getValue(BrassTunnelBlock.HORIZONTAL_AXIS); + Direction baseDirection = Direction.get(AxisDirection.POSITIVE, axis); + Direction direction = leftSide ? baseDirection.getCounterClockWise() : baseDirection.getClockWise(); + BlockPos adjacentPos = worldPosition.relative(direction); + BlockState adjacentBlockState = level.getBlockState(adjacentPos); if (!AllBlocks.BRASS_TUNNEL.has(adjacentBlockState)) return null; - if (adjacentBlockState.get(BrassTunnelBlock.HORIZONTAL_AXIS) != axis) + if (adjacentBlockState.getValue(BrassTunnelBlock.HORIZONTAL_AXIS) != axis) return null; - TileEntity adjacentTE = world.getTileEntity(adjacentPos); + TileEntity adjacentTE = level.getBlockEntity(adjacentPos); if (adjacentTE.isRemoved()) return null; if (!(adjacentTE instanceof BrassTunnelTileEntity)) @@ -688,9 +688,9 @@ public class BrassTunnelTileEntity extends BeltTunnelTileEntity implements IHave } @Override - public void remove() { + public void setRemoved() { tunnelCapability.invalidate(); - super.remove(); + super.setRemoved(); } @Override @@ -702,7 +702,7 @@ public class BrassTunnelTileEntity extends BeltTunnelTileEntity implements IHave public LazyOptional getBeltCapability() { if (!beltCapability.isPresent()) { - TileEntity tileEntity = world.getTileEntity(pos.down()); + TileEntity tileEntity = level.getBlockEntity(worldPosition.below()); if (tileEntity != null) beltCapability = tileEntity.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY); } @@ -749,18 +749,18 @@ public class BrassTunnelTileEntity extends BeltTunnelTileEntity implements IHave if (allStacks.isEmpty()) return false; - tooltip.add(componentSpacing.copy() + tooltip.add(componentSpacing.plainCopy() .append(Lang.translate("tooltip.brass_tunnel.contains")) - .formatted(TextFormatting.WHITE)); + .withStyle(TextFormatting.WHITE)); for (ItemStack item : allStacks) { - tooltip.add(componentSpacing.copy() + tooltip.add(componentSpacing.plainCopy() .append(Lang.translate("tooltip.brass_tunnel.contains_entry", new TranslationTextComponent(item.getItem() - .getTranslationKey(item)).getString(), item.getCount())) - .formatted(TextFormatting.GRAY)); + .getDescriptionId(item)).getString(), item.getCount())) + .withStyle(TextFormatting.GRAY)); } - tooltip.add(componentSpacing.copy() + tooltip.add(componentSpacing.plainCopy() .append(Lang.translate("tooltip.brass_tunnel.retrieve")) - .formatted(TextFormatting.DARK_GRAY)); + .withStyle(TextFormatting.DARK_GRAY)); return true; } diff --git a/src/main/java/com/simibubi/create/content/logistics/block/chute/AbstractChuteBlock.java b/src/main/java/com/simibubi/create/content/logistics/block/chute/AbstractChuteBlock.java index 34e2a3976..72960cebf 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/chute/AbstractChuteBlock.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/chute/AbstractChuteBlock.java @@ -32,6 +32,8 @@ import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.common.util.LazyOptional; +import net.minecraft.block.AbstractBlock.Properties; + public abstract class AbstractChuteBlock extends Block implements IWrenchable, ITE { public AbstractChuteBlock(Properties p_i48440_1_) { @@ -76,16 +78,16 @@ public abstract class AbstractChuteBlock extends Block implements IWrenchable, I public abstract TileEntity createTileEntity(BlockState state, IBlockReader world); @Override - public void onLanded(IBlockReader worldIn, Entity entityIn) { - super.onLanded(worldIn, entityIn); + public void updateEntityAfterFallOn(IBlockReader worldIn, Entity entityIn) { + super.updateEntityAfterFallOn(worldIn, entityIn); if (!(entityIn instanceof ItemEntity)) return; - if (entityIn.world.isRemote) + if (entityIn.level.isClientSide) return; if (!entityIn.isAlive()) return; - DirectBeltInputBehaviour input = TileEntityBehaviour.get(entityIn.world, new BlockPos(entityIn.getPositionVec() - .add(0, 0.5f, 0)).down(), DirectBeltInputBehaviour.TYPE); + DirectBeltInputBehaviour input = TileEntityBehaviour.get(entityIn.level, new BlockPos(entityIn.position() + .add(0, 0.5f, 0)).below(), DirectBeltInputBehaviour.TYPE); if (input == null) return; if (!input.canInsertFromSide(Direction.UP)) @@ -102,7 +104,7 @@ public abstract class AbstractChuteBlock extends Block implements IWrenchable, I } @Override - public void onBlockAdded(BlockState state, World world, BlockPos pos, BlockState p_220082_4_, boolean p_220082_5_) { + public void onPlace(BlockState state, World world, BlockPos pos, BlockState p_220082_4_, boolean p_220082_5_) { withTileEntityDo(world, pos, ChuteTileEntity::onAdded); if (p_220082_5_) return; @@ -114,24 +116,24 @@ public abstract class AbstractChuteBlock extends Block implements IWrenchable, I return; AbstractChuteBlock block = (AbstractChuteBlock) state.getBlock(); Direction facing = block.getFacing(state); - BlockPos toUpdate = pos.down(); + BlockPos toUpdate = pos.below(); if (facing.getAxis() .isHorizontal()) - toUpdate = toUpdate.offset(facing.getOpposite()); + toUpdate = toUpdate.relative(facing.getOpposite()); BlockState stateToUpdate = world.getBlockState(toUpdate); - BlockState updated = updateChuteState(stateToUpdate, world.getBlockState(toUpdate.up()), world, toUpdate); - if (stateToUpdate != updated && !world.isRemote) - world.setBlockState(toUpdate, updated); + BlockState updated = updateChuteState(stateToUpdate, world.getBlockState(toUpdate.above()), world, toUpdate); + if (stateToUpdate != updated && !world.isClientSide) + world.setBlockAndUpdate(toUpdate, updated); } @Override - public void onReplaced(BlockState state, World world, BlockPos pos, BlockState p_196243_4_, boolean p_196243_5_) { + public void onRemove(BlockState state, World world, BlockPos pos, BlockState p_196243_4_, boolean p_196243_5_) { boolean differentBlock = state.getBlock() != p_196243_4_.getBlock(); if (state.hasTileEntity() && (differentBlock || !p_196243_4_.hasTileEntity())) { TileEntityBehaviour.destroy(world, pos, FilteringBehaviour.TYPE); withTileEntityDo(world, pos, c -> c.onRemoved(state)); - world.removeTileEntity(pos); + world.removeBlockEntity(pos); } if (p_196243_5_ || !differentBlock) return; @@ -139,20 +141,20 @@ public abstract class AbstractChuteBlock extends Block implements IWrenchable, I updateDiagonalNeighbour(state, world, pos); for (Direction direction : Iterate.horizontalDirections) { - BlockPos toUpdate = pos.up() - .offset(direction); + BlockPos toUpdate = pos.above() + .relative(direction); BlockState stateToUpdate = world.getBlockState(toUpdate); if (!isChute(stateToUpdate)) continue; BlockState updated = ((AbstractChuteBlock) stateToUpdate.getBlock()).updateChuteState(stateToUpdate, - world.getBlockState(toUpdate.up()), world, toUpdate); - if (stateToUpdate != updated && !world.isRemote) - world.setBlockState(toUpdate, updated); + world.getBlockState(toUpdate.above()), world, toUpdate); + if (stateToUpdate != updated && !world.isClientSide) + world.setBlockAndUpdate(toUpdate, updated); } } @Override - public BlockState updatePostPlacement(BlockState state, Direction direction, BlockState above, IWorld world, + public BlockState updateShape(BlockState state, Direction direction, BlockState above, IWorld world, BlockPos pos, BlockPos p_196271_6_) { if (direction != Direction.UP) return state; @@ -162,10 +164,10 @@ public abstract class AbstractChuteBlock extends Block implements IWrenchable, I @Override public void neighborChanged(BlockState p_220069_1_, World world, BlockPos pos, Block p_220069_4_, BlockPos neighbourPos, boolean p_220069_6_) { - if (pos.down() + if (pos.below() .equals(neighbourPos)) withTileEntityDo(world, pos, ChuteTileEntity::blockBelowChanged); - else if (pos.up() + else if (pos.above() .equals(neighbourPos)) withTileEntityDo(world, pos, chute -> chute.capAbove = LazyOptional.empty()); } @@ -197,12 +199,12 @@ public abstract class AbstractChuteBlock extends Block implements IWrenchable, I } @Override - public ActionResultType onUse(BlockState p_225533_1_, World world, BlockPos pos, PlayerEntity player, Hand hand, + public ActionResultType use(BlockState p_225533_1_, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockRayTraceResult p_225533_6_) { - if (!player.getHeldItem(hand) + if (!player.getItemInHand(hand) .isEmpty()) return ActionResultType.PASS; - if (world.isRemote) + if (world.isClientSide) return ActionResultType.SUCCESS; return onTileEntityUse(world, pos, te -> { diff --git a/src/main/java/com/simibubi/create/content/logistics/block/chute/ChuteBlock.java b/src/main/java/com/simibubi/create/content/logistics/block/chute/ChuteBlock.java index 9926f4ba4..bc3f6e87a 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/chute/ChuteBlock.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/chute/ChuteBlock.java @@ -27,22 +27,24 @@ import net.minecraft.world.IBlockReader; import net.minecraft.world.IWorldReader; import net.minecraft.world.World; +import net.minecraft.block.AbstractBlock.Properties; + public class ChuteBlock extends AbstractChuteBlock { public static final Property SHAPE = EnumProperty.create("shape", Shape.class); - public static final DirectionProperty FACING = BlockStateProperties.FACING_EXCEPT_UP; + public static final DirectionProperty FACING = BlockStateProperties.FACING_HOPPER; public ChuteBlock(Properties p_i48440_1_) { super(p_i48440_1_); - setDefaultState(getDefaultState().with(SHAPE, Shape.NORMAL) - .with(FACING, Direction.DOWN)); + registerDefaultState(defaultBlockState().setValue(SHAPE, Shape.NORMAL) + .setValue(FACING, Direction.DOWN)); } public enum Shape implements IStringSerializable { INTERSECTION, WINDOW, NORMAL; @Override - public String getString() { + public String getSerializedName() { return Lang.asId(name()); } } @@ -54,27 +56,27 @@ public class ChuteBlock extends AbstractChuteBlock { @Override public Direction getFacing(BlockState state) { - return state.get(FACING); + return state.getValue(FACING); } @Override public boolean isOpen(BlockState state) { - return state.get(FACING) == Direction.DOWN || state.get(SHAPE) == Shape.INTERSECTION; + return state.getValue(FACING) == Direction.DOWN || state.getValue(SHAPE) == Shape.INTERSECTION; } @Override public boolean isTransparent(BlockState state) { - return state.get(SHAPE) == Shape.WINDOW; + return state.getValue(SHAPE) == Shape.WINDOW; } @Override public ActionResultType onWrenched(BlockState state, ItemUseContext context) { - Shape shape = state.get(SHAPE); - boolean down = state.get(FACING) == Direction.DOWN; - if (!context.getWorld().isRemote && down && shape != Shape.INTERSECTION) { - context.getWorld() - .setBlockState(context.getPos(), - state.with(SHAPE, shape == Shape.WINDOW ? Shape.NORMAL : Shape.WINDOW)); + Shape shape = state.getValue(SHAPE); + boolean down = state.getValue(FACING) == Direction.DOWN; + if (!context.getLevel().isClientSide && down && shape != Shape.INTERSECTION) { + context.getLevel() + .setBlockAndUpdate(context.getClickedPos(), + state.setValue(SHAPE, shape == Shape.WINDOW ? Shape.NORMAL : Shape.WINDOW)); } return ActionResultType.SUCCESS; } @@ -82,24 +84,24 @@ public class ChuteBlock extends AbstractChuteBlock { @Override public BlockState getStateForPlacement(BlockItemUseContext ctx) { BlockState state = super.getStateForPlacement(ctx); - Direction face = ctx.getFace(); + Direction face = ctx.getClickedFace(); if (face.getAxis() - .isHorizontal() && !ctx.shouldCancelInteraction()) { - World world = ctx.getWorld(); - BlockPos pos = ctx.getPos(); - return updateChuteState(state.with(FACING, face), world.getBlockState(pos.up()), world, pos); + .isHorizontal() && !ctx.isSecondaryUseActive()) { + World world = ctx.getLevel(); + BlockPos pos = ctx.getClickedPos(); + return updateChuteState(state.setValue(FACING, face), world.getBlockState(pos.above()), world, pos); } return state; } @Override - protected void fillStateContainer(Builder p_206840_1_) { - super.fillStateContainer(p_206840_1_.add(SHAPE, FACING)); + protected void createBlockStateDefinition(Builder p_206840_1_) { + super.createBlockStateDefinition(p_206840_1_.add(SHAPE, FACING)); } @Override - public boolean isValidPosition(BlockState state, IWorldReader world, BlockPos pos) { - BlockState above = world.getBlockState(pos.up()); + public boolean canSurvive(BlockState state, IWorldReader world, BlockPos pos) { + BlockState above = world.getBlockState(pos.above()); return !isChute(above) || getChuteFacing(above) == Direction.DOWN; } @@ -110,22 +112,22 @@ public class ChuteBlock extends AbstractChuteBlock { Map connections = new HashMap<>(); int amtConnections = 0; - Direction facing = state.get(FACING); + Direction facing = state.getValue(FACING); boolean vertical = facing == Direction.DOWN; if (!vertical) { - BlockState target = world.getBlockState(pos.down() - .offset(facing.getOpposite())); + BlockState target = world.getBlockState(pos.below() + .relative(facing.getOpposite())); if (!isChute(target)) - return state.with(FACING, Direction.DOWN) - .with(SHAPE, Shape.NORMAL); + return state.setValue(FACING, Direction.DOWN) + .setValue(SHAPE, Shape.NORMAL); } for (Direction direction : Iterate.horizontalDirections) { - BlockState diagonalInputChute = world.getBlockState(pos.up() - .offset(direction)); + BlockState diagonalInputChute = world.getBlockState(pos.above() + .relative(direction)); boolean value = - diagonalInputChute.getBlock() instanceof ChuteBlock && diagonalInputChute.get(FACING) == direction; + diagonalInputChute.getBlock() instanceof ChuteBlock && diagonalInputChute.getValue(FACING) == direction; connections.put(direction, value); if (value) amtConnections++; @@ -133,22 +135,22 @@ public class ChuteBlock extends AbstractChuteBlock { boolean noConnections = amtConnections == 0; if (vertical) - return state.with(SHAPE, - noConnections ? state.get(SHAPE) == Shape.WINDOW ? Shape.WINDOW : Shape.NORMAL : Shape.INTERSECTION); + return state.setValue(SHAPE, + noConnections ? state.getValue(SHAPE) == Shape.WINDOW ? Shape.WINDOW : Shape.NORMAL : Shape.INTERSECTION); if (noConnections) - return state.with(SHAPE, Shape.INTERSECTION); + return state.setValue(SHAPE, Shape.INTERSECTION); if (connections.get(Direction.NORTH) && connections.get(Direction.SOUTH)) - return state.with(SHAPE, Shape.INTERSECTION); + return state.setValue(SHAPE, Shape.INTERSECTION); if (connections.get(Direction.EAST) && connections.get(Direction.WEST)) - return state.with(SHAPE, Shape.INTERSECTION); + return state.setValue(SHAPE, Shape.INTERSECTION); if (amtConnections == 1 && connections.get(facing) && !(getChuteFacing(above) == Direction.DOWN) && !(above.getBlock() instanceof FunnelBlock && FunnelBlock.getFunnelFacing(above) == Direction.DOWN)) - return state.with(SHAPE, Shape.NORMAL); - return state.with(SHAPE, Shape.INTERSECTION); + return state.setValue(SHAPE, Shape.NORMAL); + return state.setValue(SHAPE, Shape.INTERSECTION); } @Override - public boolean allowsMovement(BlockState state, IBlockReader reader, BlockPos pos, PathType type) { + public boolean isPathfindable(BlockState state, IBlockReader reader, BlockPos pos, PathType type) { return false; } diff --git a/src/main/java/com/simibubi/create/content/logistics/block/chute/ChuteGenerator.java b/src/main/java/com/simibubi/create/content/logistics/block/chute/ChuteGenerator.java index 5b07d8328..641bfde5e 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/chute/ChuteGenerator.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/chute/ChuteGenerator.java @@ -20,14 +20,14 @@ public class ChuteGenerator extends SpecialBlockStateGen { @Override protected int getYRotation(BlockState state) { - return horizontalAngle(state.get(ChuteBlock.FACING)); + return horizontalAngle(state.getValue(ChuteBlock.FACING)); } @Override public ModelFile getModel(DataGenContext ctx, RegistrateBlockstateProvider prov, BlockState state) { - boolean horizontal = state.get(ChuteBlock.FACING) != Direction.DOWN; - ChuteBlock.Shape shape = state.get(ChuteBlock.SHAPE); + boolean horizontal = state.getValue(ChuteBlock.FACING) != Direction.DOWN; + ChuteBlock.Shape shape = state.getValue(ChuteBlock.SHAPE); if (!horizontal) return shape == Shape.NORMAL ? AssetLookup.partialBaseModel(ctx, prov) diff --git a/src/main/java/com/simibubi/create/content/logistics/block/chute/ChuteItem.java b/src/main/java/com/simibubi/create/content/logistics/block/chute/ChuteItem.java index 9cc13fc30..a9686aeea 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/chute/ChuteItem.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/chute/ChuteItem.java @@ -9,6 +9,8 @@ import net.minecraft.util.Direction; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; +import net.minecraft.item.Item.Properties; + public class ChuteItem extends BlockItem { public ChuteItem(Block p_i48527_1_, Properties p_i48527_2_) { @@ -16,39 +18,39 @@ public class ChuteItem extends BlockItem { } @Override - public ActionResultType tryPlace(BlockItemUseContext context) { - Direction face = context.getFace(); - BlockPos placedOnPos = context.getPos() - .offset(face.getOpposite()); - World world = context.getWorld(); + public ActionResultType place(BlockItemUseContext context) { + Direction face = context.getClickedFace(); + BlockPos placedOnPos = context.getClickedPos() + .relative(face.getOpposite()); + World world = context.getLevel(); BlockState placedOnState = world.getBlockState(placedOnPos); - if (!AbstractChuteBlock.isChute(placedOnState) || context.shouldCancelInteraction()) - return super.tryPlace(context); + if (!AbstractChuteBlock.isChute(placedOnState) || context.isSecondaryUseActive()) + return super.place(context); if (face.getAxis() .isVertical()) - return super.tryPlace(context); + return super.place(context); - BlockPos correctPos = context.getPos() - .up(); + BlockPos correctPos = context.getClickedPos() + .above(); BlockState blockState = world.getBlockState(correctPos); if (blockState.getMaterial() .isReplaceable()) - context = BlockItemUseContext.func_221536_a(context, correctPos, face); + context = BlockItemUseContext.at(context, correctPos, face); else { - if (!(blockState.getBlock() instanceof ChuteBlock) || world.isRemote) + if (!(blockState.getBlock() instanceof ChuteBlock) || world.isClientSide) return ActionResultType.FAIL; AbstractChuteBlock block = (AbstractChuteBlock) blockState.getBlock(); if (block.getFacing(blockState) == Direction.DOWN) { - world.setBlockState(correctPos, block.updateChuteState(blockState.with(ChuteBlock.FACING, face), - world.getBlockState(correctPos.up()), world, correctPos)); + world.setBlockAndUpdate(correctPos, block.updateChuteState(blockState.setValue(ChuteBlock.FACING, face), + world.getBlockState(correctPos.above()), world, correctPos)); return ActionResultType.SUCCESS; } return ActionResultType.FAIL; } - return super.tryPlace(context); + return super.place(context); } } diff --git a/src/main/java/com/simibubi/create/content/logistics/block/chute/ChuteRenderer.java b/src/main/java/com/simibubi/create/content/logistics/block/chute/ChuteRenderer.java index 4d1540b68..0a17faf54 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/chute/ChuteRenderer.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/chute/ChuteRenderer.java @@ -25,9 +25,9 @@ public class ChuteRenderer extends SafeTileEntityRenderer { if (te.item.isEmpty()) return; BlockState blockState = te.getBlockState(); - if (blockState.get(ChuteBlock.FACING) != Direction.DOWN) + if (blockState.getValue(ChuteBlock.FACING) != Direction.DOWN) return; - if (blockState.get(ChuteBlock.SHAPE) != Shape.WINDOW + if (blockState.getValue(ChuteBlock.SHAPE) != Shape.WINDOW && (te.bottomPullDistance == 0 || te.itemPosition.get(partialTicks) > .5f)) return; @@ -39,7 +39,7 @@ public class ChuteRenderer extends SafeTileEntityRenderer { ItemRenderer itemRenderer = Minecraft.getInstance() .getItemRenderer(); MatrixStacker msr = MatrixStacker.of(ms); - ms.push(); + ms.pushPose(); msr.centre(); float itemScale = .5f; float itemPosition = te.itemPosition.get(partialTicks); @@ -47,8 +47,8 @@ public class ChuteRenderer extends SafeTileEntityRenderer { ms.scale(itemScale, itemScale, itemScale); msr.rotateX(itemPosition * 180); msr.rotateY(itemPosition * 180); - itemRenderer.renderItem(te.item, TransformType.FIXED, light, overlay, ms, buffer); - ms.pop(); + itemRenderer.renderStatic(te.item, TransformType.FIXED, light, overlay, ms, buffer); + ms.popPose(); } } diff --git a/src/main/java/com/simibubi/create/content/logistics/block/chute/ChuteShapes.java b/src/main/java/com/simibubi/create/content/logistics/block/chute/ChuteShapes.java index 6e069aeae..e70ed6621 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/chute/ChuteShapes.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/chute/ChuteShapes.java @@ -19,24 +19,24 @@ public class ChuteShapes { static Map cache = new HashMap<>(); static Map collisionCache = new HashMap<>(); - public static final VoxelShape INTERSECTION_MASK = Block.makeCuboidShape(0, -16, 0, 16, 16, 16); - public static final VoxelShape COLLISION_MASK = Block.makeCuboidShape(0, 0, 0, 16, 24, 16); + public static final VoxelShape INTERSECTION_MASK = Block.box(0, -16, 0, 16, 16, 16); + public static final VoxelShape COLLISION_MASK = Block.box(0, 0, 0, 16, 24, 16); public static VoxelShape createShape(BlockState state) { if (AllBlocks.SMART_CHUTE.has(state)) return AllShapes.SMART_CHUTE; - Direction direction = state.get(ChuteBlock.FACING); - Shape shape = state.get(ChuteBlock.SHAPE); + Direction direction = state.getValue(ChuteBlock.FACING); + Shape shape = state.getValue(ChuteBlock.SHAPE); boolean intersection = shape == Shape.INTERSECTION; if (direction == Direction.DOWN) - return intersection ? VoxelShapes.fullCube() : AllShapes.CHUTE; + return intersection ? VoxelShapes.block() : AllShapes.CHUTE; - VoxelShape combineWith = intersection ? VoxelShapes.fullCube() : VoxelShapes.empty(); + VoxelShape combineWith = intersection ? VoxelShapes.block() : VoxelShapes.empty(); VoxelShape result = VoxelShapes.or(combineWith, AllShapes.CHUTE_SLOPE.get(direction)); if (intersection) - result = VoxelShapes.combine(INTERSECTION_MASK, result, IBooleanFunction.AND); + result = VoxelShapes.joinUnoptimized(INTERSECTION_MASK, result, IBooleanFunction.AND); return result; } @@ -51,18 +51,18 @@ public class ChuteShapes { public static VoxelShape getCollisionShape(BlockState state) { if (collisionCache.containsKey(state)) return collisionCache.get(state); - VoxelShape createdShape = VoxelShapes.combine(COLLISION_MASK, getShape(state), IBooleanFunction.AND); + VoxelShape createdShape = VoxelShapes.joinUnoptimized(COLLISION_MASK, getShape(state), IBooleanFunction.AND); collisionCache.put(state, createdShape); return createdShape; } - public static final VoxelShape PANEL = Block.makeCuboidShape(1, -15, 0, 15, 4, 1); + public static final VoxelShape PANEL = Block.box(1, -15, 0, 15, 4, 1); public static VoxelShape createSlope() { VoxelShape shape = VoxelShapes.empty(); for (int i = 0; i < 16; i++) { float offset = i / 16f; - shape = VoxelShapes.combineAndSimplify(shape, PANEL.withOffset(0, offset, offset), IBooleanFunction.OR); + shape = VoxelShapes.join(shape, PANEL.move(0, offset, offset), IBooleanFunction.OR); } return shape; } diff --git a/src/main/java/com/simibubi/create/content/logistics/block/chute/ChuteTileEntity.java b/src/main/java/com/simibubi/create/content/logistics/block/chute/ChuteTileEntity.java index fbbffa98f..f18679690 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/chute/ChuteTileEntity.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/chute/ChuteTileEntity.java @@ -110,7 +110,7 @@ public class ChuteTileEntity extends SmartTileEntity implements IHaveGoggleInfor private boolean canDirectlyInsert() { BlockState blockState = getBlockState(); - BlockState blockStateAbove = world.getBlockState(pos.up()); + BlockState blockStateAbove = level.getBlockState(worldPosition.above()); if (!AbstractChuteBlock.isChute(blockState)) return false; if (AbstractChuteBlock.getChuteFacing(blockStateAbove) == Direction.DOWN) @@ -128,18 +128,18 @@ public class ChuteTileEntity extends SmartTileEntity implements IHaveGoggleInfor @Override public AxisAlignedBB getRenderBoundingBox() { - return new AxisAlignedBB(pos).expand(0, -3, 0); + return new AxisAlignedBB(worldPosition).expandTowards(0, -3, 0); } @Override public void tick() { super.tick(); - if (!world.isRemote) + if (!level.isClientSide) canPickUpItems = canDirectlyInsert(); float itemMotion = getItemMotion(); - if (itemMotion != 0 && world != null && world.isRemote) + if (itemMotion != 0 && level != null && level.isClientSide) spawnParticles(itemMotion); tickAirStreams(itemMotion); @@ -158,7 +158,7 @@ public class ChuteTileEntity extends SmartTileEntity implements IHaveGoggleInfor if (!handleDownwardOutput(true)) nextOffset = .5f; else if (nextOffset < 0) { - handleDownwardOutput(world.isRemote && !isVirtual()); + handleDownwardOutput(level.isClientSide && !isVirtual()); nextOffset = itemPosition.value; } } @@ -167,7 +167,7 @@ public class ChuteTileEntity extends SmartTileEntity implements IHaveGoggleInfor if (!handleUpwardOutput(true)) nextOffset = .5f; else if (nextOffset > 1) { - handleUpwardOutput(world.isRemote && !isVirtual()); + handleUpwardOutput(level.isClientSide && !isVirtual()); nextOffset = itemPosition.value; } } @@ -179,7 +179,7 @@ public class ChuteTileEntity extends SmartTileEntity implements IHaveGoggleInfor private void updateAirFlow(float itemSpeed) { updateAirFlow = false; // airCurrent.rebuild(); - if (itemSpeed > 0 && world != null && !world.isRemote) { + if (itemSpeed > 0 && level != null && !level.isClientSide) { float speed = pull - push; beltBelow = null; @@ -193,15 +193,15 @@ public class ChuteTileEntity extends SmartTileEntity implements IHaveGoggleInfor else maxPullDistance = MathHelper.lerp(speed / 32, 0, 1); - if (AbstractChuteBlock.isChute(world.getBlockState(pos.down()))) + if (AbstractChuteBlock.isChute(level.getBlockState(worldPosition.below()))) maxPullDistance = 0; float flowLimit = maxPullDistance; if (flowLimit > 0) - flowLimit = AirCurrent.getFlowLimit(world, pos, maxPullDistance, Direction.DOWN); + flowLimit = AirCurrent.getFlowLimit(level, worldPosition, maxPullDistance, Direction.DOWN); for (int i = 1; i <= flowLimit + 1; i++) { TransportedItemStackHandlerBehaviour behaviour = - TileEntityBehaviour.get(world, pos.down(i), TransportedItemStackHandlerBehaviour.TYPE); + TileEntityBehaviour.get(level, worldPosition.below(i), TransportedItemStackHandlerBehaviour.TYPE); if (behaviour == null) continue; beltBelow = behaviour; @@ -216,29 +216,29 @@ public class ChuteTileEntity extends SmartTileEntity implements IHaveGoggleInfor private void findEntities(float itemSpeed) { // if (getSpeed() != 0) // airCurrent.findEntities(); - if (bottomPullDistance <= 0 && !getItem().isEmpty() || itemSpeed <= 0 || world == null || world.isRemote) + if (bottomPullDistance <= 0 && !getItem().isEmpty() || itemSpeed <= 0 || level == null || level.isClientSide) return; if (!canCollectItemsFromBelow()) return; - Vector3d center = VecHelper.getCenterOf(pos); + Vector3d center = VecHelper.getCenterOf(worldPosition); AxisAlignedBB searchArea = - new AxisAlignedBB(center.add(0, -bottomPullDistance - 0.5, 0), center.add(0, -0.5, 0)).grow(.45f); - for (ItemEntity itemEntity : world.getEntitiesWithinAABB(ItemEntity.class, searchArea)) { + new AxisAlignedBB(center.add(0, -bottomPullDistance - 0.5, 0), center.add(0, -0.5, 0)).inflate(.45f); + for (ItemEntity itemEntity : level.getEntitiesOfClass(ItemEntity.class, searchArea)) { if (!itemEntity.isAlive()) continue; ItemStack entityItem = itemEntity.getItem(); if (!canAcceptItem(entityItem)) continue; setItem(entityItem.copy(), (float) (itemEntity.getBoundingBox() - .getCenter().y - pos.getY())); + .getCenter().y - worldPosition.getY())); itemEntity.remove(); - AllTriggers.triggerForNearbyPlayers(AllTriggers.UPWARD_CHUTE, world, pos, 5); + AllTriggers.triggerForNearbyPlayers(AllTriggers.UPWARD_CHUTE, level, worldPosition, 5); break; } } private void extractFromBelt(float itemSpeed) { - if (itemSpeed <= 0 || world == null || world.isRemote) + if (itemSpeed <= 0 || level == null || level.isClientSide) return; if (getItem().isEmpty() && beltBelow != null) { beltBelow.handleCenteredProcessingOnAllItems(.5f, ts -> { @@ -252,7 +252,7 @@ public class ChuteTileEntity extends SmartTileEntity implements IHaveGoggleInfor } private void tickAirStreams(float itemSpeed) { - if (!world.isRemote && airCurrentUpdateCooldown-- <= 0) { + if (!level.isClientSide && airCurrentUpdateCooldown-- <= 0) { airCurrentUpdateCooldown = AllConfigs.SERVER.kinetics.fanBlockCheckRate.get(); updateAirFlow = true; } @@ -278,7 +278,7 @@ public class ChuteTileEntity extends SmartTileEntity implements IHaveGoggleInfor private void spawnParticles(float itemMotion) { // todo: reduce the amount of particles - if (world == null) + if (level == null) return; BlockState blockState = getBlockState(); boolean up = itemMotion > 0; @@ -288,7 +288,7 @@ public class ChuteTileEntity extends SmartTileEntity implements IHaveGoggleInfor if (push == 0 && pull == 0) return; - if (up && AbstractChuteBlock.isOpenChute(blockState) && BlockHelper.noCollisionInSpace(world, pos.up())) + if (up && AbstractChuteBlock.isOpenChute(blockState) && BlockHelper.noCollisionInSpace(level, worldPosition.above())) spawnAirFlow(1, 2, absMotion, .5f); if (AbstractChuteBlock.getChuteFacing(blockState) != Direction.DOWN) @@ -297,7 +297,7 @@ public class ChuteTileEntity extends SmartTileEntity implements IHaveGoggleInfor if (AbstractChuteBlock.isTransparentChute(blockState)) spawnAirFlow(up ? 0 : 1, up ? 1 : 0, absMotion, 1); - if (!up && BlockHelper.noCollisionInSpace(world, pos.down())) + if (!up && BlockHelper.noCollisionInSpace(level, worldPosition.below())) spawnAirFlow(0, -1, absMotion, .5f); if (up && canCollectItemsFromBelow() && bottomPullDistance > 0) { @@ -307,17 +307,17 @@ public class ChuteTileEntity extends SmartTileEntity implements IHaveGoggleInfor } private void spawnAirFlow(float verticalStart, float verticalEnd, float motion, float drag) { - if (world == null) + if (level == null) return; AirParticleData airParticleData = new AirParticleData(drag, motion); - Vector3d origin = Vector3d.of(pos); + Vector3d origin = Vector3d.atLowerCornerOf(worldPosition); float xOff = Create.RANDOM.nextFloat() * .5f + .25f; float zOff = Create.RANDOM.nextFloat() * .5f + .25f; Vector3d v = origin.add(xOff, verticalStart, zOff); Vector3d d = origin.add(xOff, verticalEnd, zOff) .subtract(v); if (Create.RANDOM.nextFloat() < 2 * motion) - world.addOptionalParticle(airParticleData, v.x, v.y, v.z, d.x, d.y, d.z); + level.addAlwaysVisibleParticle(airParticleData, v.x, v.y, v.z, d.x, d.y, d.z); } private void handleInputFromAbove() { @@ -350,12 +350,12 @@ public class ChuteTileEntity extends SmartTileEntity implements IHaveGoggleInfor ChuteTileEntity targetChute = getTargetChute(blockState); Direction direction = AbstractChuteBlock.getChuteFacing(blockState); - if (world == null) + if (level == null) return false; if (!capBelow.isPresent()) capBelow = grabCapability(Direction.DOWN); if (capBelow.isPresent()) { - if (world.isRemote && !isVirtual()) + if (level.isClientSide && !isVirtual()) return false; ItemStack remainder = ItemHandlerHelper.insertItemStacked(capBelow.orElse(null), item, simulate); ItemStack held = getItem(); @@ -381,18 +381,18 @@ public class ChuteTileEntity extends SmartTileEntity implements IHaveGoggleInfor .isHorizontal()) return false; - if (FunnelBlock.getFunnelFacing(world.getBlockState(pos.down())) == Direction.DOWN) + if (FunnelBlock.getFunnelFacing(level.getBlockState(worldPosition.below())) == Direction.DOWN) return false; - if (Block.hasSolidSideOnTop(world, pos.down())) + if (Block.canSupportRigidBlock(level, worldPosition.below())) return false; if (!simulate) { - Vector3d dropVec = VecHelper.getCenterOf(pos) + Vector3d dropVec = VecHelper.getCenterOf(worldPosition) .add(0, -12 / 16f, 0); - ItemEntity dropped = new ItemEntity(world, dropVec.x, dropVec.y, dropVec.z, item.copy()); - dropped.setDefaultPickupDelay(); - dropped.setMotion(0, -.25f, 0); - world.addEntity(dropped); + ItemEntity dropped = new ItemEntity(level, dropVec.x, dropVec.y, dropVec.z, item.copy()); + dropped.setDefaultPickUpDelay(); + dropped.setDeltaMovement(0, -.25f, 0); + level.addFreshEntity(dropped); setItem(ItemStack.EMPTY); } @@ -400,16 +400,16 @@ public class ChuteTileEntity extends SmartTileEntity implements IHaveGoggleInfor } private boolean handleUpwardOutput(boolean simulate) { - BlockState stateAbove = world.getBlockState(pos.up()); + BlockState stateAbove = level.getBlockState(worldPosition.above()); - if (world == null) + if (level == null) return false; if (AbstractChuteBlock.isOpenChute(getBlockState())) { if (!capAbove.isPresent()) capAbove = grabCapability(Direction.UP); if (capAbove.isPresent()) { - if (world.isRemote && !isVirtual() && !ChuteBlock.isChute(stateAbove)) + if (level.isClientSide && !isVirtual() && !ChuteBlock.isChute(stateAbove)) return false; int countBefore = item.getCount(); ItemStack remainder = ItemHandlerHelper.insertItemStacked(capAbove.orElse(null), item, simulate); @@ -440,20 +440,20 @@ public class ChuteTileEntity extends SmartTileEntity implements IHaveGoggleInfor return true; } - if (FunnelBlock.getFunnelFacing(world.getBlockState(pos.up())) == Direction.UP) + if (FunnelBlock.getFunnelFacing(level.getBlockState(worldPosition.above())) == Direction.UP) return false; - if (BlockHelper.hasBlockSolidSide(stateAbove, world, pos.up(), Direction.DOWN)) + if (BlockHelper.hasBlockSolidSide(stateAbove, level, worldPosition.above(), Direction.DOWN)) return false; if (!inputChutes.isEmpty()) return false; if (!simulate) { - Vector3d dropVec = VecHelper.getCenterOf(pos) + Vector3d dropVec = VecHelper.getCenterOf(worldPosition) .add(0, 8 / 16f, 0); - ItemEntity dropped = new ItemEntity(world, dropVec.x, dropVec.y, dropVec.z, item.copy()); - dropped.setDefaultPickupDelay(); - dropped.setMotion(0, getItemMotion() * 2, 0); - world.addEntity(dropped); + ItemEntity dropped = new ItemEntity(level, dropVec.x, dropVec.y, dropVec.z, item.copy()); + dropped.setDefaultPickUpDelay(); + dropped.setDeltaMovement(0, getItemMotion() * 2, 0); + level.addFreshEntity(dropped); setItem(ItemStack.EMPTY); } return true; @@ -476,10 +476,10 @@ public class ChuteTileEntity extends SmartTileEntity implements IHaveGoggleInfor } private LazyOptional grabCapability(Direction side) { - BlockPos pos = this.pos.offset(side); - if (world == null) + BlockPos pos = this.worldPosition.relative(side); + if (level == null) return LazyOptional.empty(); - TileEntity te = world.getTileEntity(pos); + TileEntity te = level.getBlockEntity(pos); if (te == null) return LazyOptional.empty(); if (te instanceof ChuteTileEntity) { @@ -496,13 +496,13 @@ public class ChuteTileEntity extends SmartTileEntity implements IHaveGoggleInfor public void setItem(ItemStack stack, float insertionPos) { item = stack; itemPosition.lastValue = itemPosition.value = insertionPos; - markDirty(); + setChanged(); sendData(); } @Override - public void remove() { - super.remove(); + public void setRemoved() { + super.setRemoved(); if (lazyHandler != null) lazyHandler.invalidate(); } @@ -520,7 +520,7 @@ public class ChuteTileEntity extends SmartTileEntity implements IHaveGoggleInfor @Override protected void fromTag(BlockState state, CompoundNBT compound, boolean clientPacket) { ItemStack previousItem = item; - item = ItemStack.read(compound.getCompound("Item")); + item = ItemStack.of(compound.getCompound("Item")); itemPosition.lastValue = itemPosition.value = compound.getFloat("ItemPosition"); pull = compound.getFloat("Pull"); push = compound.getFloat("Push"); @@ -529,13 +529,13 @@ public class ChuteTileEntity extends SmartTileEntity implements IHaveGoggleInfor // if (clientPacket) // airCurrent.rebuild(); - if (hasWorld() && world != null && world.isRemote && !previousItem.equals(item, false) && !item.isEmpty()) { - if (world.rand.nextInt(3) != 0) + if (hasLevel() && level != null && level.isClientSide && !previousItem.equals(item, false) && !item.isEmpty()) { + if (level.random.nextInt(3) != 0) return; - Vector3d p = VecHelper.getCenterOf(pos); - p = VecHelper.offsetRandomly(p, world.rand, .5f); + Vector3d p = VecHelper.getCenterOf(worldPosition); + p = VecHelper.offsetRandomly(p, level.random, .5f); Vector3d m = Vector3d.ZERO; - world.addParticle(new ItemParticleData(ParticleTypes.ITEM, item), p.x, p.y, p.z, m.x, m.y, m.z); + level.addParticle(new ItemParticleData(ParticleTypes.ITEM, item), p.x, p.y, p.z, m.x, m.y, m.z); } } @@ -552,9 +552,9 @@ public class ChuteTileEntity extends SmartTileEntity implements IHaveGoggleInfor public void onRemoved(BlockState chuteState) { ChuteTileEntity targetChute = getTargetChute(chuteState); List inputChutes = getInputChutes(); - if (!item.isEmpty() && world != null) - InventoryHelper.spawnItemStack(world, pos.getX(), pos.getY(), pos.getZ(), item); - remove(); + if (!item.isEmpty() && level != null) + InventoryHelper.dropItemStack(level, worldPosition.getX(), worldPosition.getY(), worldPosition.getZ(), item); + setRemoved(); if (targetChute != null) { targetChute.updatePull(); targetChute.propagatePush(); @@ -563,7 +563,7 @@ public class ChuteTileEntity extends SmartTileEntity implements IHaveGoggleInfor } public void onAdded() { - updateContainingBlockInfo(); + clearCache(); updatePull(); ChuteTileEntity targetChute = getTargetChute(getBlockState()); if (targetChute != null) @@ -600,10 +600,10 @@ public class ChuteTileEntity extends SmartTileEntity implements IHaveGoggleInfor } protected float calculatePull() { - BlockState blockStateAbove = world.getBlockState(pos.up()); + BlockState blockStateAbove = level.getBlockState(worldPosition.above()); if (AllBlocks.ENCASED_FAN.has(blockStateAbove) - && blockStateAbove.get(EncasedFanBlock.FACING) == Direction.DOWN) { - TileEntity te = world.getTileEntity(pos.up()); + && blockStateAbove.getValue(EncasedFanBlock.FACING) == Direction.DOWN) { + TileEntity te = level.getBlockEntity(worldPosition.above()); if (te instanceof EncasedFanTileEntity && !te.isRemoved()) { EncasedFanTileEntity fan = (EncasedFanTileEntity) te; return fan.getSpeed(); @@ -621,11 +621,11 @@ public class ChuteTileEntity extends SmartTileEntity implements IHaveGoggleInfor } protected float calculatePush(int branchCount) { - if (world == null) + if (level == null) return 0; - BlockState blockStateBelow = world.getBlockState(pos.down()); - if (AllBlocks.ENCASED_FAN.has(blockStateBelow) && blockStateBelow.get(EncasedFanBlock.FACING) == Direction.UP) { - TileEntity te = world.getTileEntity(pos.down()); + BlockState blockStateBelow = level.getBlockState(worldPosition.below()); + if (AllBlocks.ENCASED_FAN.has(blockStateBelow) && blockStateBelow.getValue(EncasedFanBlock.FACING) == Direction.UP) { + TileEntity te = level.getBlockEntity(worldPosition.below()); if (te instanceof EncasedFanTileEntity && !te.isRemoved()) { EncasedFanTileEntity fan = (EncasedFanTileEntity) te; return fan.getSpeed(); @@ -640,19 +640,19 @@ public class ChuteTileEntity extends SmartTileEntity implements IHaveGoggleInfor @Nullable private ChuteTileEntity getTargetChute(BlockState state) { - if (world == null) + if (level == null) return null; Direction targetDirection = AbstractChuteBlock.getChuteFacing(state); if (targetDirection == null) return null; - BlockPos chutePos = pos.down(); + BlockPos chutePos = worldPosition.below(); if (targetDirection.getAxis() .isHorizontal()) - chutePos = chutePos.offset(targetDirection.getOpposite()); - BlockState chuteState = world.getBlockState(chutePos); + chutePos = chutePos.relative(targetDirection.getOpposite()); + BlockState chuteState = level.getBlockState(chutePos); if (!AbstractChuteBlock.isChute(chuteState)) return null; - TileEntity te = world.getTileEntity(chutePos); + TileEntity te = level.getBlockEntity(chutePos); if (te instanceof ChuteTileEntity) return (ChuteTileEntity) te; return null; @@ -671,18 +671,18 @@ public class ChuteTileEntity extends SmartTileEntity implements IHaveGoggleInfor @Nullable private ChuteTileEntity getInputChute(Direction direction) { - if (world == null || direction == Direction.DOWN) + if (level == null || direction == Direction.DOWN) return null; direction = direction.getOpposite(); - BlockPos chutePos = pos.up(); + BlockPos chutePos = worldPosition.above(); if (direction.getAxis() .isHorizontal()) - chutePos = chutePos.offset(direction); - BlockState chuteState = world.getBlockState(chutePos); + chutePos = chutePos.relative(direction); + BlockState chuteState = level.getBlockState(chutePos); Direction chuteFacing = AbstractChuteBlock.getChuteFacing(chuteState); if (chuteFacing != direction) return null; - TileEntity te = world.getTileEntity(chutePos); + TileEntity te = level.getBlockEntity(chutePos); if (te instanceof ChuteTileEntity && !te.isRemoved()) return (ChuteTileEntity) te; return null; @@ -690,29 +690,29 @@ public class ChuteTileEntity extends SmartTileEntity implements IHaveGoggleInfor public boolean addToGoggleTooltip(List tooltip, boolean isPlayerSneaking) { boolean downward = getItemMotion() < 0; - tooltip.add(componentSpacing.copy() + tooltip.add(componentSpacing.plainCopy() .append(Lang.translate("tooltip.chute.header"))); if (pull == 0 && push == 0) - tooltip.add(componentSpacing.copy() + tooltip.add(componentSpacing.plainCopy() .append(Lang.translate("tooltip.chute.no_fans_attached")) - .formatted(TextFormatting.GRAY)); + .withStyle(TextFormatting.GRAY)); if (pull != 0) - tooltip.add(componentSpacing.copy() + tooltip.add(componentSpacing.plainCopy() .append(Lang.translate("tooltip.chute.fans_" + (pull > 0 ? "pull_up" : "push_down")) - .formatted(TextFormatting.GRAY))); + .withStyle(TextFormatting.GRAY))); if (push != 0) - tooltip.add(componentSpacing.copy() + tooltip.add(componentSpacing.plainCopy() .append(Lang.translate("tooltip.chute.fans_" + (push > 0 ? "push_up" : "pull_down")) - .formatted(TextFormatting.GRAY))); - tooltip.add(componentSpacing.copy() + .withStyle(TextFormatting.GRAY))); + tooltip.add(componentSpacing.plainCopy() .append("-> ") .append(Lang.translate("tooltip.chute.items_move_" + (downward ? "down" : "up")) - .formatted(TextFormatting.YELLOW))); + .withStyle(TextFormatting.YELLOW))); if (!item.isEmpty()) { - tooltip.add(componentSpacing.copy() + tooltip.add(componentSpacing.plainCopy() .append(Lang.translate("tooltip.chute.contains", new TranslationTextComponent(item.getItem() - .getTranslationKey(item)).getString(), item.getCount())) - .formatted(TextFormatting.GREEN)); + .getDescriptionId(item)).getString(), item.getCount())) + .withStyle(TextFormatting.GREEN)); } return true; } diff --git a/src/main/java/com/simibubi/create/content/logistics/block/chute/SmartChuteBlock.java b/src/main/java/com/simibubi/create/content/logistics/block/chute/SmartChuteBlock.java index 55b0b2d52..1ab93b740 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/chute/SmartChuteBlock.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/chute/SmartChuteBlock.java @@ -17,11 +17,13 @@ import net.minecraft.world.IWorldReader; import net.minecraft.world.World; import net.minecraft.world.server.ServerWorld; +import net.minecraft.block.AbstractBlock.Properties; + public class SmartChuteBlock extends AbstractChuteBlock { public SmartChuteBlock(Properties p_i48440_1_) { super(p_i48440_1_); - setDefaultState(getDefaultState().with(POWERED, true)); + registerDefaultState(defaultBlockState().setValue(POWERED, true)); } public static final BooleanProperty POWERED = BlockStateProperties.POWERED; @@ -30,29 +32,29 @@ public class SmartChuteBlock extends AbstractChuteBlock { public void neighborChanged(BlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos, boolean isMoving) { super.neighborChanged(state, worldIn, pos, blockIn, fromPos, isMoving); - if (worldIn.isRemote) + if (worldIn.isClientSide) return; - if (!worldIn.getPendingBlockTicks() - .isTickPending(pos, this)) - worldIn.getPendingBlockTicks() + if (!worldIn.getBlockTicks() + .willTickThisTick(pos, this)) + worldIn.getBlockTicks() .scheduleTick(pos, this, 0); } @Override - public void scheduledTick(BlockState state, ServerWorld worldIn, BlockPos pos, Random r) { - boolean previouslyPowered = state.get(POWERED); - if (previouslyPowered != worldIn.isBlockPowered(pos)) - worldIn.setBlockState(pos, state.cycle(POWERED), 2); + public void tick(BlockState state, ServerWorld worldIn, BlockPos pos, Random r) { + boolean previouslyPowered = state.getValue(POWERED); + if (previouslyPowered != worldIn.hasNeighborSignal(pos)) + worldIn.setBlock(pos, state.cycle(POWERED), 2); } @Override public BlockState getStateForPlacement(BlockItemUseContext p_196258_1_) { - return super.getStateForPlacement(p_196258_1_).with(POWERED, p_196258_1_.getWorld() - .isBlockPowered(p_196258_1_.getPos())); + return super.getStateForPlacement(p_196258_1_).setValue(POWERED, p_196258_1_.getLevel() + .hasNeighborSignal(p_196258_1_.getClickedPos())); } @Override - public boolean isValidPosition(BlockState state, IWorldReader world, BlockPos pos) { + public boolean canSurvive(BlockState state, IWorldReader world, BlockPos pos) { return true; } @@ -62,8 +64,8 @@ public class SmartChuteBlock extends AbstractChuteBlock { } @Override - protected void fillStateContainer(Builder p_206840_1_) { - super.fillStateContainer(p_206840_1_.add(POWERED)); + protected void createBlockStateDefinition(Builder p_206840_1_) { + super.createBlockStateDefinition(p_206840_1_.add(POWERED)); } @Override diff --git a/src/main/java/com/simibubi/create/content/logistics/block/chute/SmartChuteTileEntity.java b/src/main/java/com/simibubi/create/content/logistics/block/chute/SmartChuteTileEntity.java index 585c7f10b..da88a5a24 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/chute/SmartChuteTileEntity.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/chute/SmartChuteTileEntity.java @@ -39,7 +39,7 @@ public class SmartChuteTileEntity extends ChuteTileEntity { @Override protected boolean canCollectItemsFromBelow() { BlockState blockState = getBlockState(); - return blockState.contains(SmartChuteBlock.POWERED) && !blockState.get(SmartChuteBlock.POWERED); + return blockState.hasProperty(SmartChuteBlock.POWERED) && !blockState.getValue(SmartChuteBlock.POWERED); } @Override @@ -51,8 +51,8 @@ public class SmartChuteTileEntity extends ChuteTileEntity { private boolean isExtracting() { boolean up = getItemMotion() < 0; - BlockPos chutePos = pos.offset(up ? Direction.UP : Direction.DOWN); - BlockState blockState = world.getBlockState(chutePos); + BlockPos chutePos = worldPosition.relative(up ? Direction.UP : Direction.DOWN); + BlockState blockState = level.getBlockState(chutePos); return !AbstractChuteBlock.isChute(blockState) && !blockState.getMaterial() .isReplaceable(); } 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 ecac9759c..8c8d29659 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 @@ -76,20 +76,20 @@ public class DepotBehaviour extends TileEntityBehaviour { public void tick() { super.tick(); - World world = tileEntity.getWorld(); + World world = tileEntity.getLevel(); for (Iterator iterator = incoming.iterator(); iterator.hasNext();) { TransportedItemStack ts = iterator.next(); if (!tick(ts)) continue; - if (world.isRemote && !tileEntity.isVirtual()) + if (world.isClientSide && !tileEntity.isVirtual()) continue; if (heldItem == null) { heldItem = ts; } else { if (!ItemHelper.canItemStackAmountsStack(heldItem.stack, ts.stack)) { - Vector3d vec = VecHelper.getCenterOf(tileEntity.getPos()); - InventoryHelper.spawnItemStack(tileEntity.getWorld(), vec.x, vec.y + .5f, vec.z, ts.stack); + Vector3d vec = VecHelper.getCenterOf(tileEntity.getBlockPos()); + InventoryHelper.dropItemStack(tileEntity.getLevel(), vec.x, vec.y + .5f, vec.z, ts.stack); } else { heldItem.stack.grow(ts.stack.getCount()); } @@ -103,15 +103,15 @@ public class DepotBehaviour extends TileEntityBehaviour { if (!tick(heldItem)) return; - BlockPos pos = tileEntity.getPos(); + BlockPos pos = tileEntity.getBlockPos(); - if (world.isRemote) + if (world.isClientSide) return; if (handleBeltFunnelOutput()) return; BeltProcessingBehaviour processingBehaviour = - TileEntityBehaviour.get(world, pos.up(2), BeltProcessingBehaviour.TYPE); + TileEntityBehaviour.get(world, pos.above(2), BeltProcessingBehaviour.TYPE); if (processingBehaviour == null) return; if (!heldItem.locked && BeltProcessingBehaviour.isBlocked(world, pos)) @@ -145,7 +145,7 @@ public class DepotBehaviour extends TileEntityBehaviour { } private boolean handleBeltFunnelOutput() { - BlockState funnel = getWorld().getBlockState(getPos().up()); + BlockState funnel = getWorld().getBlockState(getPos().above()); Direction funnelFacing = AbstractFunnelBlock.getFunnelFacing(funnel); if (funnelFacing == null || !canFunnelsPullFrom.test(funnelFacing.getOpposite())) return false; @@ -356,8 +356,8 @@ public class DepotBehaviour extends TileEntityBehaviour { continue; } ItemStack remainder = ItemHandlerHelper.insertItemStacked(processingOutputBuffer, added.stack, false); - Vector3d vec = VecHelper.getCenterOf(tileEntity.getPos()); - InventoryHelper.spawnItemStack(tileEntity.getWorld(), vec.x, vec.y + .5f, vec.z, remainder); + Vector3d vec = VecHelper.getCenterOf(tileEntity.getBlockPos()); + InventoryHelper.dropItemStack(tileEntity.getLevel(), vec.x, vec.y + .5f, vec.z, remainder); } if (dirty) @@ -378,7 +378,7 @@ public class DepotBehaviour extends TileEntityBehaviour { private Vector3d getWorldPositionOf(TransportedItemStack transported) { Vector3d offsetVec = new Vector3d(.5f, 14 / 16f, .5f); - return offsetVec.add(Vector3d.of(tileEntity.getPos())); + return offsetVec.add(Vector3d.atLowerCornerOf(tileEntity.getBlockPos())); } @Override diff --git a/src/main/java/com/simibubi/create/content/logistics/block/depot/DepotBlock.java b/src/main/java/com/simibubi/create/content/logistics/block/depot/DepotBlock.java index b9852efb9..ca14a75fe 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/depot/DepotBlock.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/depot/DepotBlock.java @@ -23,6 +23,8 @@ import net.minecraft.util.math.shapes.VoxelShape; import net.minecraft.world.IBlockReader; import net.minecraft.world.World; +import net.minecraft.block.AbstractBlock.Properties; + @ParametersAreNonnullByDefault @MethodsReturnNonnullByDefault public class DepotBlock extends Block implements ITE, IWrenchable { @@ -53,34 +55,34 @@ public class DepotBlock extends Block implements ITE, IWrenchab } @Override - public ActionResultType onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, + public ActionResultType use(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockRayTraceResult ray) { return SharedDepotBlockMethods.onUse(state, world, pos, player, hand, ray); } @Override - public void onReplaced(BlockState state, World worldIn, BlockPos pos, BlockState newState, boolean isMoving) { + public void onRemove(BlockState state, World worldIn, BlockPos pos, BlockState newState, boolean isMoving) { SharedDepotBlockMethods.onReplaced(state, worldIn, pos, newState, isMoving); } @Override - public void onLanded(IBlockReader worldIn, Entity entityIn) { - super.onLanded(worldIn, entityIn); + public void updateEntityAfterFallOn(IBlockReader worldIn, Entity entityIn) { + super.updateEntityAfterFallOn(worldIn, entityIn); SharedDepotBlockMethods.onLanded(worldIn, entityIn); } @Override - public boolean hasComparatorInputOverride(BlockState state) { + public boolean hasAnalogOutputSignal(BlockState state) { return true; } @Override - public int getComparatorInputOverride(BlockState blockState, World worldIn, BlockPos pos) { + public int getAnalogOutputSignal(BlockState blockState, World worldIn, BlockPos pos) { return SharedDepotBlockMethods.getComparatorInputOverride(blockState, worldIn, pos); } @Override - public boolean allowsMovement(BlockState state, IBlockReader reader, BlockPos pos, PathType type) { + public boolean isPathfindable(BlockState state, IBlockReader reader, BlockPos pos, PathType type) { return false; } diff --git a/src/main/java/com/simibubi/create/content/logistics/block/depot/DepotRenderer.java b/src/main/java/com/simibubi/create/content/logistics/block/depot/DepotRenderer.java index 457359749..c60f2db6f 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/depot/DepotRenderer.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/depot/DepotRenderer.java @@ -39,9 +39,9 @@ public class DepotRenderer extends SafeTileEntityRenderer { TransportedItemStack transported = depotBehaviour.heldItem; MatrixStacker msr = MatrixStacker.of(ms); - Vector3d itemPosition = VecHelper.getCenterOf(te.getPos()); + Vector3d itemPosition = VecHelper.getCenterOf(te.getBlockPos()); - ms.push(); + ms.pushPose(); ms.translate(.5f, 15 / 16f, .5f); if (transported != null) @@ -49,17 +49,17 @@ public class DepotRenderer extends SafeTileEntityRenderer { // Render main items for (TransportedItemStack tis : depotBehaviour.incoming) { - ms.push(); + ms.pushPose(); msr.nudge(0); float offset = MathHelper.lerp(partialTicks, tis.prevBeltPosition, tis.beltPosition); float sideOffset = MathHelper.lerp(partialTicks, tis.prevSideOffset, tis.sideOffset); if (tis.insertedFrom.getAxis() .isHorizontal()) { - Vector3d offsetVec = Vector3d.of(tis.insertedFrom.getOpposite() - .getDirectionVec()).scale(.5f - offset); + Vector3d offsetVec = Vector3d.atLowerCornerOf(tis.insertedFrom.getOpposite() + .getNormal()).scale(.5f - offset); ms.translate(offsetVec.x, offsetVec.y, offsetVec.z); - boolean alongX = tis.insertedFrom.rotateY() + boolean alongX = tis.insertedFrom.getClockWise() .getAxis() == Axis.X; if (!alongX) sideOffset *= -1; @@ -70,7 +70,7 @@ public class DepotRenderer extends SafeTileEntityRenderer { int angle = tis.angle; Random r = new Random(0); renderItem(ms, buffer, light, overlay, itemStack, angle, r, itemPosition); - ms.pop(); + ms.popPose(); } if (transported != null) @@ -81,7 +81,7 @@ public class DepotRenderer extends SafeTileEntityRenderer { ItemStack stack = depotBehaviour.processingOutputBuffer.getStackInSlot(i); if (stack.isEmpty()) continue; - ms.push(); + ms.pushPose(); msr.nudge(i); boolean renderUpright = BeltHelper.isItemUpright(stack); @@ -92,10 +92,10 @@ public class DepotRenderer extends SafeTileEntityRenderer { Random r = new Random(i + 1); int angle = (int) (360 * r.nextFloat()); renderItem(ms, buffer, light, overlay, stack, renderUpright ? angle + 90 : angle, r, itemPosition); - ms.pop(); + ms.popPose(); } - ms.pop(); + ms.popPose(); } public static void renderItem(MatrixStack ms, IRenderTypeBuffer buffer, int light, int overlay, ItemStack itemStack, @@ -105,26 +105,26 @@ public class DepotRenderer extends SafeTileEntityRenderer { MatrixStacker msr = MatrixStacker.of(ms); int count = (int) (MathHelper.log2((int) (itemStack.getCount()))) / 2; boolean renderUpright = BeltHelper.isItemUpright(itemStack); - boolean blockItem = itemRenderer.getItemModelWithOverrides(itemStack, null, null) + boolean blockItem = itemRenderer.getModel(itemStack, null, null) .isGui3d(); - ms.push(); + ms.pushPose(); msr.rotateY(angle); if (renderUpright) { - Entity renderViewEntity = Minecraft.getInstance().renderViewEntity; + Entity renderViewEntity = Minecraft.getInstance().cameraEntity; if (renderViewEntity != null) { - Vector3d positionVec = renderViewEntity.getPositionVec(); + Vector3d positionVec = renderViewEntity.position(); Vector3d vectorForOffset = itemPosition; Vector3d diff = vectorForOffset.subtract(positionVec); float yRot = (float) -MathHelper.atan2(diff.z, diff.x); - ms.multiply(Vector3f.POSITIVE_Y.getRadialQuaternion((float) (yRot - Math.PI / 2))); + ms.mulPose(Vector3f.YP.rotation((float) (yRot - Math.PI / 2))); } ms.translate(0, 3 / 32d, -1 / 16f); } for (int i = 0; i <= count; i++) { - ms.push(); + ms.pushPose(); if (blockItem) ms.translate(r.nextFloat() * .0625f * i, 0, r.nextFloat() * .0625f * i); ms.scale(.5f, .5f, .5f); @@ -132,8 +132,8 @@ public class DepotRenderer extends SafeTileEntityRenderer { ms.translate(0, -3 / 16f, 0); msr.rotateX(90); } - itemRenderer.renderItem(itemStack, TransformType.FIXED, light, overlay, ms, buffer); - ms.pop(); + itemRenderer.renderStatic(itemStack, TransformType.FIXED, light, overlay, ms, buffer); + ms.popPose(); if (!renderUpright) { if (!blockItem) @@ -143,7 +143,7 @@ public class DepotRenderer extends SafeTileEntityRenderer { ms.translate(0, 0, -1 / 16f); } - ms.pop(); + ms.popPose(); } } diff --git a/src/main/java/com/simibubi/create/content/logistics/block/depot/EjectorBlock.java b/src/main/java/com/simibubi/create/content/logistics/block/depot/EjectorBlock.java index fcdc894a7..551d843ad 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/depot/EjectorBlock.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/depot/EjectorBlock.java @@ -32,6 +32,8 @@ import net.minecraft.world.IBlockReader; import net.minecraft.world.IWorldReader; import net.minecraft.world.World; +import net.minecraft.block.AbstractBlock.Properties; + public class EjectorBlock extends HorizontalKineticBlock implements ITE { public EjectorBlock(Properties properties) { @@ -58,24 +60,24 @@ public class EjectorBlock extends HorizontalKineticBlock implements ITE tileEntityOptional = getTileEntityOptional(p_180658_1_, p_180658_2_); - if (tileEntityOptional.isPresent() && !p_180658_3_.bypassesLandingEffects()) { - p_180658_3_.handleFallDamage(p_180658_4_, 0.0F); + if (tileEntityOptional.isPresent() && !p_180658_3_.isSuppressingBounce()) { + p_180658_3_.causeFallDamage(p_180658_4_, 0.0F); return; } - super.onFallenUpon(p_180658_1_, p_180658_2_, p_180658_3_, p_180658_4_); + super.fallOn(p_180658_1_, p_180658_2_, p_180658_3_, p_180658_4_); } @Override - public void onLanded(IBlockReader worldIn, Entity entityIn) { - super.onLanded(worldIn, entityIn); - BlockPos position = entityIn.getBlockPos(); + public void updateEntityAfterFallOn(IBlockReader worldIn, Entity entityIn) { + super.updateEntityAfterFallOn(worldIn, entityIn); + BlockPos position = entityIn.blockPosition(); if (!AllBlocks.WEIGHTED_EJECTOR.has(worldIn.getBlockState(position))) return; if (!entityIn.isAlive()) return; - if (entityIn.bypassesLandingEffects()) + if (entityIn.isSuppressingBounce()) return; if (entityIn instanceof ItemEntity) { SharedDepotBlockMethods.onLanded(worldIn, entityIn); @@ -98,41 +100,41 @@ public class EjectorBlock extends HorizontalKineticBlock implements ITE 4 / 16f) { - entityIn.setPosition(vec.x, vec.y, vec.z); + entityIn.setPos(vec.x, vec.y, vec.z); return; } } ejectorTileEntity.activate(); ejectorTileEntity.notifyUpdate(); - if (entityIn.world.isRemote) - AllPackets.channel.sendToServer(new EjectorTriggerPacket(ejectorTileEntity.getPos())); + if (entityIn.level.isClientSide) + AllPackets.channel.sendToServer(new EjectorTriggerPacket(ejectorTileEntity.getBlockPos())); } @Override - public ActionResultType onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, + public ActionResultType use(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockRayTraceResult ray) { - if (AllItems.WRENCH.isIn(player.getHeldItem(hand))) + if (AllItems.WRENCH.isIn(player.getItemInHand(hand))) return ActionResultType.PASS; return SharedDepotBlockMethods.onUse(state, world, pos, player, hand, ray); } @Override - public void onReplaced(BlockState state, World worldIn, BlockPos pos, BlockState newState, boolean isMoving) { + public void onRemove(BlockState state, World worldIn, BlockPos pos, BlockState newState, boolean isMoving) { withTileEntityDo(worldIn, pos, EjectorTileEntity::dropFlyingItems); SharedDepotBlockMethods.onReplaced(state, worldIn, pos, newState, isMoving); } @Override public Axis getRotationAxis(BlockState state) { - return state.get(HORIZONTAL_FACING) - .rotateY() + return state.getValue(HORIZONTAL_FACING) + .getClockWise() .getAxis(); } @@ -152,17 +154,17 @@ public class EjectorBlock extends HorizontalKineticBlock implements ITE () -> EjectorTargetHandler.flushSettings(pos)); - return super.onBlockPlaced(pos, world, p_195943_3_, p_195943_4_, p_195943_5_); + return super.updateCustomBlockEntityTag(pos, world, p_195943_3_, p_195943_4_, p_195943_5_); } @Override - public boolean canPlayerBreakBlockWhileHolding(BlockState state, World world, BlockPos pos, + public boolean canAttackBlock(BlockState state, World world, BlockPos pos, PlayerEntity p_195938_4_) { - return !p_195938_4_.isSneaking(); + return !p_195938_4_.isShiftKeyDown(); } } diff --git a/src/main/java/com/simibubi/create/content/logistics/block/depot/EjectorPlacementPacket.java b/src/main/java/com/simibubi/create/content/logistics/block/depot/EjectorPlacementPacket.java index 3cb0bfc71..54c8e6198 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/depot/EjectorPlacementPacket.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/depot/EjectorPlacementPacket.java @@ -31,7 +31,7 @@ public class EjectorPlacementPacket extends SimplePacketBase { h = buffer.readInt(); v = buffer.readInt(); pos = buffer.readBlockPos(); - facing = Direction.byIndex(buffer.readVarInt()); + facing = Direction.from3DDataValue(buffer.readVarInt()); } @Override @@ -39,7 +39,7 @@ public class EjectorPlacementPacket extends SimplePacketBase { buffer.writeInt(h); buffer.writeInt(v); buffer.writeBlockPos(pos); - buffer.writeVarInt(facing.getIndex()); + buffer.writeVarInt(facing.get3DDataValue()); } @Override @@ -50,15 +50,15 @@ public class EjectorPlacementPacket extends SimplePacketBase { .getSender(); if (player == null) return; - World world = player.world; - if (world == null || !world.isBlockPresent(pos)) + World world = player.level; + if (world == null || !world.isLoaded(pos)) return; - TileEntity tileEntity = world.getTileEntity(pos); + TileEntity tileEntity = world.getBlockEntity(pos); BlockState state = world.getBlockState(pos); if (tileEntity instanceof EjectorTileEntity) ((EjectorTileEntity) tileEntity).setTarget(h, v); if (AllBlocks.WEIGHTED_EJECTOR.has(state)) - world.setBlockState(pos, state.with(EjectorBlock.HORIZONTAL_FACING, facing)); + world.setBlockAndUpdate(pos, state.setValue(EjectorBlock.HORIZONTAL_FACING, facing)); }); context.get() .setPacketHandled(true); diff --git a/src/main/java/com/simibubi/create/content/logistics/block/depot/EjectorRenderer.java b/src/main/java/com/simibubi/create/content/logistics/block/depot/EjectorRenderer.java index 1ddf7bfa7..79f8e2333 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/depot/EjectorRenderer.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/depot/EjectorRenderer.java @@ -31,7 +31,7 @@ public class EjectorRenderer extends KineticTileEntityRenderer { } @Override - public boolean isGlobalRenderer(KineticTileEntity p_188185_1_) { + public boolean shouldRenderOffScreen(KineticTileEntity p_188185_1_) { return true; } @@ -41,11 +41,11 @@ public class EjectorRenderer extends KineticTileEntityRenderer { super.renderSafe(te, partialTicks, ms, buffer, light, overlay); EjectorTileEntity ejector = (EjectorTileEntity) te; - IVertexBuilder vertexBuilder = buffer.getBuffer(RenderType.getSolid()); + IVertexBuilder vertexBuilder = buffer.getBuffer(RenderType.solid()); float lidProgress = ((EjectorTileEntity) te).getLidProgress(partialTicks); float angle = lidProgress * 70; - if (!Backend.getInstance().canUseInstancing(te.getWorld())) { + if (!Backend.getInstance().canUseInstancing(te.getLevel())) { SuperByteBuffer model = PartialBufferer.get(AllBlockPartials.EJECTOR_TOP, te.getBlockState()); applyLidAngle(te, angle, model.matrixStacker()); model.light(light) @@ -61,9 +61,9 @@ public class EjectorRenderer extends KineticTileEntityRenderer { if (time > maxTime) continue; - ms.push(); + ms.pushPose(); Vector3d launchedItemLocation = ejector.getLaunchedItemLocation(time); - msr.translate(launchedItemLocation.subtract(Vector3d.of(te.getPos()))); + msr.translate(launchedItemLocation.subtract(Vector3d.atLowerCornerOf(te.getBlockPos()))); Vector3d itemRotOffset = VecHelper.voxelSpace(0, 3, 0); msr.translate(itemRotOffset); msr.rotateY(AngleHelper.horizontalAngle(ejector.getFacing())); @@ -71,22 +71,22 @@ public class EjectorRenderer extends KineticTileEntityRenderer { msr.translateBack(itemRotOffset); Minecraft.getInstance() .getItemRenderer() - .renderItem(intAttached.getValue(), TransformType.GROUND, light, overlay, ms, buffer); - ms.pop(); + .renderStatic(intAttached.getValue(), TransformType.GROUND, light, overlay, ms, buffer); + ms.popPose(); } DepotBehaviour behaviour = te.getBehaviour(DepotBehaviour.TYPE); if (behaviour == null || behaviour.isEmpty()) return; - ms.push(); + ms.pushPose(); applyLidAngle(te, angle, msr); msr.centre() .rotateY(-180 - AngleHelper.horizontalAngle(te.getBlockState() - .get(EjectorBlock.HORIZONTAL_FACING))) + .getValue(EjectorBlock.HORIZONTAL_FACING))) .unCentre(); DepotRenderer.renderItemsOf(te, partialTicks, ms, buffer, light, overlay, behaviour); - ms.pop(); + ms.popPose(); } static void applyLidAngle(KineticTileEntity te, float angle, MatrixStacker matrixStacker) { @@ -96,7 +96,7 @@ public class EjectorRenderer extends KineticTileEntityRenderer { static void applyLidAngle(KineticTileEntity te, Vector3d rotationOffset, float angle, MatrixStacker matrixStacker) { matrixStacker.centre() .rotateY(180 + AngleHelper.horizontalAngle(te.getBlockState() - .get(EjectorBlock.HORIZONTAL_FACING))) + .getValue(EjectorBlock.HORIZONTAL_FACING))) .unCentre() .translate(rotationOffset) .rotateX(-angle) diff --git a/src/main/java/com/simibubi/create/content/logistics/block/depot/EjectorTargetHandler.java b/src/main/java/com/simibubi/create/content/logistics/block/depot/EjectorTargetHandler.java index 6fc1c45fc..3d254871b 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/depot/EjectorTargetHandler.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/depot/EjectorTargetHandler.java @@ -50,15 +50,15 @@ public class EjectorTargetHandler { return; BlockPos pos = event.getPos(); World world = event.getWorld(); - if (!world.isRemote) + if (!world.isClientSide) return; PlayerEntity player = event.getPlayer(); - if (player == null || player.isSpectator() || !player.isSneaking()) + if (player == null || player.isSpectator() || !player.isShiftKeyDown()) return; String key = "weighted_ejector.target_set"; TextFormatting colour = TextFormatting.GOLD; - player.sendStatusMessage(Lang.translate(key).formatted(colour), true); + player.displayClientMessage(Lang.translate(key).withStyle(colour), true); currentSelection = pos; launcher = null; event.setCanceled(true); @@ -69,10 +69,10 @@ public class EjectorTargetHandler { public static void leftClickingBlocksDeselectsThem(PlayerInteractEvent.LeftClickBlock event) { if (currentItem == null) return; - if (!event.getWorld().isRemote) + if (!event.getWorld().isClientSide) return; if (!event.getPlayer() - .isSneaking()) + .isShiftKeyDown()) return; BlockPos pos = event.getPos(); if (pos.equals(currentSelection)) { @@ -99,7 +99,7 @@ public class EjectorTargetHandler { Direction validTargetDirection = getValidTargetDirection(pos); if (validTargetDirection == null) { - player.sendStatusMessage(Lang.translate(key).formatted(colour), true); + player.displayClientMessage(Lang.translate(key).withStyle(colour), true); currentItem = null; currentSelection = null; return; @@ -108,9 +108,9 @@ public class EjectorTargetHandler { key = "weighted_ejector.targeting"; colour = TextFormatting.GREEN; - player.sendStatusMessage( + player.displayClientMessage( Lang.translate(key, currentSelection.getX(), currentSelection.getY(), currentSelection.getZ()) - .formatted(colour), + .withStyle(colour), true); BlockPos diff = pos.subtract(currentSelection); @@ -137,9 +137,9 @@ public class EjectorTargetHandler { return null; if (xDiff == 0) - return Direction.getFacingFromAxis(zDiff < 0 ? AxisDirection.NEGATIVE : AxisDirection.POSITIVE, Axis.Z); + return Direction.get(zDiff < 0 ? AxisDirection.NEGATIVE : AxisDirection.POSITIVE, Axis.Z); if (zDiff == 0) - return Direction.getFacingFromAxis(xDiff < 0 ? AxisDirection.NEGATIVE : AxisDirection.POSITIVE, Axis.X); + return Direction.get(xDiff < 0 ? AxisDirection.NEGATIVE : AxisDirection.POSITIVE, Axis.X); return null; } @@ -150,7 +150,7 @@ public class EjectorTargetHandler { if (player == null) return; - ItemStack heldItemMainhand = player.getHeldItemMainhand(); + ItemStack heldItemMainhand = player.getMainHandItem(); if (!AllBlocks.WEIGHTED_EJECTOR.isIn(heldItemMainhand)) { currentItem = null; } else { @@ -167,23 +167,23 @@ public class EjectorTargetHandler { protected static void drawArc() { Minecraft mc = Minecraft.getInstance(); - boolean wrench = AllItems.WRENCH.isIn(mc.player.getHeldItemMainhand()); + boolean wrench = AllItems.WRENCH.isIn(mc.player.getMainHandItem()); if (currentSelection == null) return; if (currentItem == null && !wrench) return; - RayTraceResult objectMouseOver = mc.objectMouseOver; + RayTraceResult objectMouseOver = mc.hitResult; if (!(objectMouseOver instanceof BlockRayTraceResult)) return; BlockRayTraceResult blockRayTraceResult = (BlockRayTraceResult) objectMouseOver; if (blockRayTraceResult.getType() == Type.MISS) return; - BlockPos pos = blockRayTraceResult.getPos(); + BlockPos pos = blockRayTraceResult.getBlockPos(); if (!wrench) - pos = pos.offset(blockRayTraceResult.getFace()); + pos = pos.relative(blockRayTraceResult.getDirection()); int xDiff = currentSelection.getX() - pos.getX(); int yDiff = currentSelection.getY() - pos.getY(); @@ -191,12 +191,12 @@ public class EjectorTargetHandler { int validX = Math.abs(zDiff) > Math.abs(xDiff) ? 0 : xDiff; int validZ = Math.abs(zDiff) < Math.abs(xDiff) ? 0 : zDiff; - BlockPos validPos = currentSelection.add(validX, yDiff, validZ); + BlockPos validPos = currentSelection.offset(validX, yDiff, validZ); Direction d = getValidTargetDirection(validPos); if (d == null) return; - if (launcher == null || lastHoveredBlockPos != pos.toLong()) { - lastHoveredBlockPos = pos.toLong(); + if (launcher == null || lastHoveredBlockPos != pos.asLong()) { + lastHoveredBlockPos = pos.asLong(); launcher = new EntityLauncher(Math.abs(validX + validZ), yDiff); } @@ -207,9 +207,9 @@ public class EjectorTargetHandler { int intColor = valid ? 0x9ede73 : 0xff7171; Vector3d color = ColorHelper.getRGB(intColor); RedstoneParticleData data = new RedstoneParticleData((float) color.x, (float) color.y, (float) color.z, 1); - ClientWorld world = mc.world; + ClientWorld world = mc.level; - AxisAlignedBB bb = new AxisAlignedBB(0, 0, 0, 1, 0, 1).offset(currentSelection.add(-validX, -yDiff, -validZ)); + AxisAlignedBB bb = new AxisAlignedBB(0, 0, 0, 1, 0, 1).move(currentSelection.offset(-validX, -yDiff, -validZ)); CreateClient.OUTLINER.chaseAABB("valid", bb) .colored(intColor) .lineWidth(1 / 16f); @@ -225,25 +225,25 @@ public class EjectorTargetHandler { private static void checkForWrench(ItemStack heldItem) { if (!AllItems.WRENCH.isIn(heldItem)) return; - RayTraceResult objectMouseOver = Minecraft.getInstance().objectMouseOver; + RayTraceResult objectMouseOver = Minecraft.getInstance().hitResult; if (!(objectMouseOver instanceof BlockRayTraceResult)) return; BlockRayTraceResult result = (BlockRayTraceResult) objectMouseOver; - BlockPos pos = result.getPos(); + BlockPos pos = result.getBlockPos(); - TileEntity te = Minecraft.getInstance().world.getTileEntity(pos); + TileEntity te = Minecraft.getInstance().level.getBlockEntity(pos); if (!(te instanceof EjectorTileEntity)) { lastHoveredBlockPos = -1; currentSelection = null; return; } - if (lastHoveredBlockPos == -1 || lastHoveredBlockPos != pos.toLong()) { + if (lastHoveredBlockPos == -1 || lastHoveredBlockPos != pos.asLong()) { EjectorTileEntity ejector = (EjectorTileEntity) te; if (!ejector.getTargetPosition() - .equals(ejector.getPos())) + .equals(ejector.getBlockPos())) currentSelection = ejector.getTargetPosition(); - lastHoveredBlockPos = pos.toLong(); + lastHoveredBlockPos = pos.asLong(); launcher = null; } @@ -252,15 +252,15 @@ public class EjectorTargetHandler { } private static void drawOutline(BlockPos selection) { - World world = Minecraft.getInstance().world; + World world = Minecraft.getInstance().level; if (currentSelection == null) return; BlockPos pos = currentSelection; BlockState state = world.getBlockState(pos); VoxelShape shape = state.getShape(world, pos); - AxisAlignedBB boundingBox = shape.isEmpty() ? new AxisAlignedBB(BlockPos.ZERO) : shape.getBoundingBox(); - CreateClient.OUTLINER.showAABB("target", boundingBox.offset(pos)) + AxisAlignedBB boundingBox = shape.isEmpty() ? new AxisAlignedBB(BlockPos.ZERO) : shape.bounds(); + CreateClient.OUTLINER.showAABB("target", boundingBox.move(pos)) .colored(0xffcb74) .lineWidth(1 / 16f); } diff --git a/src/main/java/com/simibubi/create/content/logistics/block/depot/EjectorTileEntity.java b/src/main/java/com/simibubi/create/content/logistics/block/depot/EjectorTileEntity.java index 0cf06c2f8..fc08ef89d 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/depot/EjectorTileEntity.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/depot/EjectorTileEntity.java @@ -126,7 +126,7 @@ public class EjectorTileEntity extends KineticTileEntity { } protected boolean cannotLaunch() { - return state != State.CHARGED && !(world.isRemote && state == State.LAUNCHING); + return state != State.CHARGED && !(level.isClientSide && state == State.LAUNCHING); } public void activateDeferred() { @@ -134,10 +134,10 @@ public class EjectorTileEntity extends KineticTileEntity { return; Direction facing = getFacing(); List entities = - world.getEntitiesWithinAABB(Entity.class, new AxisAlignedBB(pos).grow(-1 / 16f, 0, -1 / 16f)); + level.getEntitiesOfClass(Entity.class, new AxisAlignedBB(worldPosition).inflate(-1 / 16f, 0, -1 / 16f)); // Launch Items - boolean doLogic = !world.isRemote || isVirtual(); + boolean doLogic = !level.isClientSide || isVirtual(); if (doLogic) launchItems(); @@ -151,33 +151,33 @@ public class EjectorTileEntity extends KineticTileEntity { entity.onGround = false; - if (isPlayerEntity != world.isRemote) + if (isPlayerEntity != level.isClientSide) continue; - entity.setPosition(pos.getX() + .5f, pos.getY() + 1, pos.getZ() + .5f); + entity.setPos(worldPosition.getX() + .5f, worldPosition.getY() + 1, worldPosition.getZ() + .5f); launcher.applyMotion(entity, facing); if (!isPlayerEntity) continue; PlayerEntity playerEntity = (PlayerEntity) entity; - if (!(playerEntity.getItemStackFromSlot(EquipmentSlotType.CHEST) + if (!(playerEntity.getItemBySlot(EquipmentSlotType.CHEST) .getItem() instanceof ElytraItem)) continue; - playerEntity.rotationYaw = facing.getHorizontalAngle(); - playerEntity.rotationPitch = -35; - playerEntity.setMotion(playerEntity.getMotion() + playerEntity.yRot = facing.toYRot(); + playerEntity.xRot = -35; + playerEntity.setDeltaMovement(playerEntity.getDeltaMovement() .scale(.75f)); deployElytra(playerEntity); - AllPackets.channel.sendToServer(new EjectorElytraPacket(pos)); + AllPackets.channel.sendToServer(new EjectorElytraPacket(worldPosition)); } if (doLogic) { lidProgress.chase(1, .8f, Chaser.EXP); state = State.LAUNCHING; - if (!world.isRemote) { - world.playSound(null, pos, SoundEvents.BLOCK_WOODEN_TRAPDOOR_CLOSE, SoundCategory.BLOCKS, .35f, 1f); - world.playSound(null, pos, SoundEvents.BLOCK_CHEST_OPEN, SoundCategory.BLOCKS, .1f, 1.4f); + if (!level.isClientSide) { + level.playSound(null, worldPosition, SoundEvents.WOODEN_TRAPDOOR_CLOSE, SoundCategory.BLOCKS, .35f, 1f); + level.playSound(null, worldPosition, SoundEvents.CHEST_OPEN, SoundCategory.BLOCKS, .1f, 1.4f); } } } @@ -190,7 +190,7 @@ public class EjectorTileEntity extends KineticTileEntity { ItemStack heldItemStack = depotBehaviour.getHeldItemStack(); Direction funnelFacing = getFacing().getOpposite(); - if (AbstractFunnelBlock.getFunnelFacing(world.getBlockState(pos.up())) == funnelFacing) { + if (AbstractFunnelBlock.getFunnelFacing(level.getBlockState(worldPosition.above())) == funnelFacing) { DirectBeltInputBehaviour directOutput = getBehaviour(DirectBeltInputBehaviour.TYPE); if (depotBehaviour.heldItem != null) { @@ -199,7 +199,7 @@ public class EjectorTileEntity extends KineticTileEntity { ; else if (remainder.isEmpty()) depotBehaviour.removeHeldItem(); - else if (!remainder.isItemEqual(heldItemStack)) + else if (!remainder.sameItem(heldItemStack)) depotBehaviour.heldItem.stack = remainder; } @@ -211,7 +211,7 @@ public class EjectorTileEntity extends KineticTileEntity { ; else if (remainder.isEmpty()) iterator.remove(); - else if (!remainder.isItemEqual(stack)) + else if (!remainder.sameItem(stack)) transportedItemStack.stack = remainder; } @@ -225,14 +225,14 @@ public class EjectorTileEntity extends KineticTileEntity { return; } - if (!world.isRemote) + if (!level.isClientSide) for (Direction d : Iterate.directions) { - BlockState blockState = world.getBlockState(pos.offset(d)); + BlockState blockState = level.getBlockState(worldPosition.relative(d)); if (!(blockState.getBlock() instanceof ObserverBlock)) continue; - if (blockState.get(ObserverBlock.FACING) != d.getOpposite()) + if (blockState.getValue(ObserverBlock.FACING) != d.getOpposite()) continue; - blockState.updatePostPlacement(d.getOpposite(), blockState, world, pos.offset(d), pos); + blockState.updateShape(d.getOpposite(), blockState, level, worldPosition.relative(d), worldPosition); } if (depotBehaviour.heldItem != null) { @@ -253,7 +253,7 @@ public class EjectorTileEntity extends KineticTileEntity { } protected boolean addToLaunchedItems(ItemStack stack) { - if ((!world.isRemote || isVirtual()) && trackedItem == null && scanCooldown == 0) { + if ((!level.isClientSide || isVirtual()) && trackedItem == null && scanCooldown == 0) { scanCooldown = AllConfigs.SERVER.kinetics.ejectorScanInterval.get(); trackedItem = stack; } @@ -264,7 +264,7 @@ public class EjectorTileEntity extends KineticTileEntity { BlockState blockState = getBlockState(); if (!AllBlocks.WEIGHTED_EJECTOR.has(blockState)) return Direction.UP; - Direction facing = blockState.get(EjectorBlock.HORIZONTAL_FACING); + Direction facing = blockState.getValue(EjectorBlock.HORIZONTAL_FACING); return facing; } @@ -272,7 +272,7 @@ public class EjectorTileEntity extends KineticTileEntity { public void tick() { super.tick(); - boolean doLogic = !world.isRemote || isVirtual(); + boolean doLogic = !level.isClientSide || isVirtual(); State prevState = state; float totalTime = Math.max(3, (float) launcher.getTotalFlyingTicks()); @@ -331,8 +331,8 @@ public class EjectorTileEntity extends KineticTileEntity { int soundRate = (int) (1 / (getWindUpSpeed() * 5)) + 1; float volume = .125f; float pitch = 1.5f - lidProgress.getValue(); - if (((int) world.getGameTime()) % soundRate == 0 && doLogic) - world.playSound(null, pos, SoundEvents.BLOCK_WOODEN_BUTTON_CLICK_OFF, SoundCategory.BLOCKS, volume, + if (((int) level.getGameTime()) % soundRate == 0 && doLogic) + level.playSound(null, worldPosition, SoundEvents.WOODEN_BUTTON_CLICK_OFF, SoundCategory.BLOCKS, volume, pitch); } } @@ -349,7 +349,7 @@ public class EjectorTileEntity extends KineticTileEntity { Vector3d target = getLaunchedItemLocation(time + 1); BlockRayTraceResult rayTraceBlocks = - world.rayTraceBlocks(new RayTraceContext(source, target, BlockMode.COLLIDER, FluidMode.NONE, null)); + level.clip(new RayTraceContext(source, target, BlockMode.COLLIDER, FluidMode.NONE, null)); if (rayTraceBlocks.getType() == Type.MISS) { if (earlyTarget != null && earlyTargetTime < time + 1) { earlyTarget = null; @@ -358,19 +358,19 @@ public class EjectorTileEntity extends KineticTileEntity { return false; } - Vector3d vec = rayTraceBlocks.getHitVec(); - earlyTarget = Pair.of(vec.add(Vector3d.of(rayTraceBlocks.getFace() - .getDirectionVec()).scale(.25f)), rayTraceBlocks.getPos()); + Vector3d vec = rayTraceBlocks.getLocation(); + earlyTarget = Pair.of(vec.add(Vector3d.atLowerCornerOf(rayTraceBlocks.getDirection() + .getNormal()).scale(.25f)), rayTraceBlocks.getBlockPos()); earlyTargetTime = (float) (time + (source.distanceTo(vec) / source.distanceTo(target))); sendData(); return true; } protected void nudgeEntities() { - for (Entity entity : world.getEntitiesWithinAABB(Entity.class, - new AxisAlignedBB(pos).grow(-1 / 16f, 0, -1 / 16f))) + for (Entity entity : level.getEntitiesOfClass(Entity.class, + new AxisAlignedBB(worldPosition).inflate(-1 / 16f, 0, -1 / 16f))) if (!(entity instanceof PlayerEntity)) - entity.setPosition(entity.getX(), entity.getY() + .125f, entity.getZ()); + entity.setPos(entity.getX(), entity.getY() + .125f, entity.getZ()); } protected void ejectIfTriggered() { @@ -386,7 +386,7 @@ public class EjectorTileEntity extends KineticTileEntity { Direction funnelFacing = getFacing().getOpposite(); ItemStack held = depotBehaviour.getHeldItemStack(); - if (AbstractFunnelBlock.getFunnelFacing(world.getBlockState(pos.up())) == funnelFacing) { + if (AbstractFunnelBlock.getFunnelFacing(level.getBlockState(worldPosition.above())) == funnelFacing) { DirectBeltInputBehaviour directOutput = getBehaviour(DirectBeltInputBehaviour.TYPE); if (depotBehaviour.heldItem != null) { ItemStack tryFunnel = directOutput.tryExportingToBeltFunnel(held, funnelFacing, true); @@ -425,25 +425,25 @@ public class EjectorTileEntity extends KineticTileEntity { Vector3d ejectVec = earlyTarget != null ? earlyTarget.getFirst() : getLaunchedItemLocation(maxTime); Vector3d ejectMotionVec = getLaunchedItemMotion(maxTime); - ItemEntity item = new ItemEntity(world, ejectVec.x, ejectVec.y, ejectVec.z, intAttached.getValue()); - item.setMotion(ejectMotionVec); - item.setDefaultPickupDelay(); - world.addEntity(item); + ItemEntity item = new ItemEntity(level, ejectVec.x, ejectVec.y, ejectVec.z, intAttached.getValue()); + item.setDeltaMovement(ejectMotionVec); + item.setDefaultPickUpDelay(); + level.addFreshEntity(item); } public DirectBeltInputBehaviour getTargetOpenInv() { BlockPos targetPos = earlyTarget != null ? earlyTarget.getSecond() - : pos.up(launcher.getVerticalDistance()) - .offset(getFacing(), Math.max(1, launcher.getHorizontalDistance())); - return TileEntityBehaviour.get(world, targetPos, DirectBeltInputBehaviour.TYPE); + : worldPosition.above(launcher.getVerticalDistance()) + .relative(getFacing(), Math.max(1, launcher.getHorizontalDistance())); + return TileEntityBehaviour.get(level, targetPos, DirectBeltInputBehaviour.TYPE); } public Vector3d getLaunchedItemLocation(float time) { - return launcher.getGlobalPos(time, getFacing().getOpposite(), pos); + return launcher.getGlobalPos(time, getFacing().getOpposite(), worldPosition); } public Vector3d getLaunchedItemMotion(float time) { - return launcher.getGlobalVelocity(time, getFacing().getOpposite(), pos) + return launcher.getGlobalVelocity(time, getFacing().getOpposite(), worldPosition) .scale(.5f); } @@ -451,11 +451,11 @@ public class EjectorTileEntity extends KineticTileEntity { for (IntAttached intAttached : launchedItems) { Vector3d ejectVec = getLaunchedItemLocation(intAttached.getFirst()); Vector3d ejectMotionVec = getLaunchedItemMotion(intAttached.getFirst()); - ItemEntity item = new ItemEntity(world, 0, 0, 0, intAttached.getValue()); - item.setPos(ejectVec.x, ejectVec.y, ejectVec.z); - item.setMotion(ejectMotionVec); - item.setDefaultPickupDelay(); - world.addEntity(item); + ItemEntity item = new ItemEntity(level, 0, 0, 0, intAttached.getValue()); + item.setPosRaw(ejectVec.x, ejectVec.y, ejectVec.z); + item.setDeltaMovement(ejectMotionVec); + item.setDefaultPickUpDelay(); + level.addFreshEntity(item); } launchedItems.clear(); } @@ -514,7 +514,7 @@ public class EjectorTileEntity extends KineticTileEntity { state = NBTHelper.readEnum(compound, "State", State.class); lidProgress.readNBT(compound.getCompound("Lid"), false); launchedItems = NBTHelper.readCompoundList(compound.getList("LaunchedItems", NBT.TAG_COMPOUND), - nbt -> IntAttached.read(nbt, ItemStack::read)); + nbt -> IntAttached.read(nbt, ItemStack::of)); earlyTarget = null; earlyTargetTime = 0; @@ -529,7 +529,7 @@ public class EjectorTileEntity extends KineticTileEntity { } public void updateSignal() { - boolean shoudPower = world.isBlockPowered(pos); + boolean shoudPower = level.hasNeighborSignal(worldPosition); if (shoudPower == powered) return; powered = shoudPower; @@ -544,10 +544,10 @@ public class EjectorTileEntity extends KineticTileEntity { public BlockPos getTargetPosition() { BlockState blockState = getBlockState(); if (!AllBlocks.WEIGHTED_EJECTOR.has(blockState)) - return pos; - Direction facing = blockState.get(EjectorBlock.HORIZONTAL_FACING); - return pos.offset(facing, launcher.getHorizontalDistance()) - .up(launcher.getVerticalDistance()); + return worldPosition; + Direction facing = blockState.getValue(EjectorBlock.HORIZONTAL_FACING); + return worldPosition.relative(facing, launcher.getHorizontalDistance()) + .above(launcher.getVerticalDistance()); } @Override @@ -578,8 +578,8 @@ public class EjectorTileEntity extends KineticTileEntity { @Override @OnlyIn(Dist.CLIENT) - public double getMaxRenderDistanceSquared() { - return super.getMaxRenderDistanceSquared() * 16; + public double getViewDistance() { + return super.getViewDistance() * 16; } private static abstract class EntityHack extends Entity { @@ -589,8 +589,8 @@ public class EjectorTileEntity extends KineticTileEntity { } public static void setElytraFlying(Entity e) { - EntityDataManager data = e.getDataManager(); - data.set(FLAGS, (byte) (data.get(FLAGS) | 1 << 7)); + EntityDataManager data = e.getEntityData(); + data.set(DATA_SHARED_FLAGS_ID, (byte) (data.get(DATA_SHARED_FLAGS_ID) | 1 << 7)); } } @@ -611,7 +611,7 @@ public class EjectorTileEntity extends KineticTileEntity { protected float angle(BlockState state) { float horizontalAngle = AllBlocks.WEIGHTED_EJECTOR.has(state) - ? AngleHelper.horizontalAngle(state.get(EjectorBlock.HORIZONTAL_FACING)) + ? AngleHelper.horizontalAngle(state.getValue(EjectorBlock.HORIZONTAL_FACING)) : 0; return horizontalAngle; } diff --git a/src/main/java/com/simibubi/create/content/logistics/block/depot/EntityLauncher.java b/src/main/java/com/simibubi/create/content/logistics/block/depot/EntityLauncher.java index a2ae91d02..281d248ee 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/depot/EntityLauncher.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/depot/EntityLauncher.java @@ -24,7 +24,7 @@ public class EntityLauncher { public void clamp(int max) { set(Math.min(horizontalDistance, max), - MathHelper.signum(verticalDistance) * Math.min(Math.abs(verticalDistance), max)); + MathHelper.sign(verticalDistance) * Math.min(Math.abs(verticalDistance), max)); } public void set(int horizontalDistance, int verticalDistance) { @@ -36,7 +36,7 @@ public class EntityLauncher { public void applyMotion(Entity entity, Direction facing) { Vector3d motionVec = new Vector3d(0, yMotion, xMotion); motionVec = VecHelper.rotate(motionVec, AngleHelper.horizontalAngle(facing), Axis.Y); - entity.setMotion(motionVec.x * .91, motionVec.y * .98, motionVec.z * .91); + entity.setDeltaMovement(motionVec.x * .91, motionVec.y * .98, motionVec.z * .91); } public int getHorizontalDistance() { diff --git a/src/main/java/com/simibubi/create/content/logistics/block/depot/SharedDepotBlockMethods.java b/src/main/java/com/simibubi/create/content/logistics/block/depot/SharedDepotBlockMethods.java index 55ba80aad..4d630916d 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/depot/SharedDepotBlockMethods.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/depot/SharedDepotBlockMethods.java @@ -33,9 +33,9 @@ public class SharedDepotBlockMethods { public static ActionResultType onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockRayTraceResult ray) { - if (ray.getFace() != Direction.UP) + if (ray.getDirection() != Direction.UP) return ActionResultType.PASS; - if (world.isRemote) + if (world.isClientSide) return ActionResultType.SUCCESS; DepotBehaviour behaviour = get(world, pos); @@ -44,7 +44,7 @@ public class SharedDepotBlockMethods { if (!behaviour.canAcceptItems.get()) return ActionResultType.SUCCESS; - ItemStack heldItem = player.getHeldItem(hand); + ItemStack heldItem = player.getItemInHand(hand); boolean wasEmptyHanded = heldItem.isEmpty(); boolean shouldntPlaceItem = AllBlocks.MECHANICAL_ARM.isIn(heldItem); @@ -52,7 +52,7 @@ public class SharedDepotBlockMethods { if (!mainItemStack.isEmpty()) { player.inventory.placeItemBackInInventory(world, mainItemStack); behaviour.removeHeldItem(); - world.playSound(null, pos, SoundEvents.ENTITY_ITEM_PICKUP, SoundCategory.PLAYERS, .2f, + world.playSound(null, pos, SoundEvents.ITEM_PICKUP, SoundCategory.PLAYERS, .2f, 1f + Create.RANDOM.nextFloat()); } ItemStackHandler outputs = behaviour.processingOutputBuffer; @@ -61,11 +61,11 @@ public class SharedDepotBlockMethods { if (!wasEmptyHanded && !shouldntPlaceItem) { TransportedItemStack transported = new TransportedItemStack(heldItem); - transported.insertedFrom = player.getHorizontalFacing(); + transported.insertedFrom = player.getDirection(); transported.prevBeltPosition = .25f; transported.beltPosition = .25f; behaviour.setHeldItem(transported); - player.setHeldItem(hand, ItemStack.EMPTY); + player.setItemInHand(hand, ItemStack.EMPTY); AllSoundEvents.DEPOT_SLIDE.playOnServer(world, pos); } @@ -82,11 +82,11 @@ public class SharedDepotBlockMethods { return; ItemHelper.dropContents(worldIn, pos, behaviour.processingOutputBuffer); for (TransportedItemStack transportedItemStack : behaviour.incoming) - InventoryHelper.spawnItemStack(worldIn, pos.getX(), pos.getY(), pos.getZ(), transportedItemStack.stack); + InventoryHelper.dropItemStack(worldIn, pos.getX(), pos.getY(), pos.getZ(), transportedItemStack.stack); if (!behaviour.getHeldItemStack() .isEmpty()) - InventoryHelper.spawnItemStack(worldIn, pos.getX(), pos.getY(), pos.getZ(), behaviour.getHeldItemStack()); - worldIn.removeTileEntity(pos); + InventoryHelper.dropItemStack(worldIn, pos.getX(), pos.getY(), pos.getZ(), behaviour.getHeldItemStack()); + worldIn.removeBlockEntity(pos); } public static void onLanded(IBlockReader worldIn, Entity entityIn) { @@ -94,12 +94,12 @@ public class SharedDepotBlockMethods { return; if (!entityIn.isAlive()) return; - if (entityIn.world.isRemote) + if (entityIn.level.isClientSide) return; ItemEntity itemEntity = (ItemEntity) entityIn; DirectBeltInputBehaviour inputBehaviour = - TileEntityBehaviour.get(worldIn, entityIn.getBlockPos(), DirectBeltInputBehaviour.TYPE); + TileEntityBehaviour.get(worldIn, entityIn.blockPosition(), DirectBeltInputBehaviour.TYPE); if (inputBehaviour == null) return; ItemStack remainder = inputBehaviour.handleInsertion(itemEntity.getItem(), Direction.DOWN, false); diff --git a/src/main/java/com/simibubi/create/content/logistics/block/diodes/AbstractDiodeBlock.java b/src/main/java/com/simibubi/create/content/logistics/block/diodes/AbstractDiodeBlock.java index a79285187..82c434796 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/diodes/AbstractDiodeBlock.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/diodes/AbstractDiodeBlock.java @@ -5,6 +5,8 @@ import com.simibubi.create.content.contraptions.wrench.IWrenchable; import net.minecraft.block.BlockState; import net.minecraft.block.RedstoneDiodeBlock; +import net.minecraft.block.AbstractBlock.Properties; + public abstract class AbstractDiodeBlock extends RedstoneDiodeBlock implements IWrenchable { public AbstractDiodeBlock(Properties builder) { @@ -12,7 +14,7 @@ public abstract class AbstractDiodeBlock extends RedstoneDiodeBlock implements I } @Override - public boolean canProvidePower(BlockState state) { + public boolean isSignalSource(BlockState state) { return true; } } diff --git a/src/main/java/com/simibubi/create/content/logistics/block/diodes/AbstractDiodeGenerator.java b/src/main/java/com/simibubi/create/content/logistics/block/diodes/AbstractDiodeGenerator.java index 7093f3d29..348b2e0e6 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/diodes/AbstractDiodeGenerator.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/diodes/AbstractDiodeGenerator.java @@ -42,7 +42,7 @@ public abstract class AbstractDiodeGenerator extends SpecialBlockStateGen { @Override protected final int getYRotation(BlockState state) { - return horizontalAngle(state.get(AbstractDiodeBlock.HORIZONTAL_FACING)); + return horizontalAngle(state.getValue(AbstractDiodeBlock.FACING)); } abstract Vector createModels(DataGenContext ctx, BlockModelProvider prov); diff --git a/src/main/java/com/simibubi/create/content/logistics/block/diodes/AdjustablePulseRepeaterTileEntity.java b/src/main/java/com/simibubi/create/content/logistics/block/diodes/AdjustablePulseRepeaterTileEntity.java index a3639fd05..4620d7393 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/diodes/AdjustablePulseRepeaterTileEntity.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/diodes/AdjustablePulseRepeaterTileEntity.java @@ -17,12 +17,12 @@ public class AdjustablePulseRepeaterTileEntity extends AdjustableRepeaterTileEnt if (charging && atMax) { if (powering) { - world.setBlockState(pos, getBlockState().with(POWERING, false)); + level.setBlockAndUpdate(worldPosition, getBlockState().setValue(POWERING, false)); charging = false; return; } - if (!powering && !world.isRemote) - world.setBlockState(pos, getBlockState().with(POWERING, true)); + if (!powering && !level.isClientSide) + level.setBlockAndUpdate(worldPosition, getBlockState().setValue(POWERING, true)); return; } @@ -30,8 +30,8 @@ public class AdjustablePulseRepeaterTileEntity extends AdjustableRepeaterTileEnt return; if (!charging && !atMin) { - if (!world.isRemote) - world.setBlockState(pos, getBlockState().with(POWERING, false)); + if (!level.isClientSide) + level.setBlockAndUpdate(worldPosition, getBlockState().setValue(POWERING, false)); state = 0; return; } diff --git a/src/main/java/com/simibubi/create/content/logistics/block/diodes/AdjustableRepeaterBlock.java b/src/main/java/com/simibubi/create/content/logistics/block/diodes/AdjustableRepeaterBlock.java index 3ba865ded..9a49c184a 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/diodes/AdjustableRepeaterBlock.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/diodes/AdjustableRepeaterBlock.java @@ -12,20 +12,22 @@ import net.minecraft.util.Direction; import net.minecraft.util.math.BlockPos; import net.minecraft.world.IBlockReader; +import net.minecraft.block.AbstractBlock.Properties; + public class AdjustableRepeaterBlock extends AbstractDiodeBlock { public static BooleanProperty POWERING = BooleanProperty.create("powering"); public AdjustableRepeaterBlock(Properties properties) { super(properties); - setDefaultState(getDefaultState().with(POWERED, false) - .with(POWERING, false)); + registerDefaultState(defaultBlockState().setValue(POWERED, false) + .setValue(POWERING, false)); } @Override - protected void fillStateContainer(Builder builder) { - builder.add(POWERED, POWERING, HORIZONTAL_FACING); - super.fillStateContainer(builder); + protected void createBlockStateDefinition(Builder builder) { + builder.add(POWERED, POWERING, FACING); + super.createBlockStateDefinition(builder); } @Override @@ -40,13 +42,13 @@ public class AdjustableRepeaterBlock extends AbstractDiodeBlock { } @Override - protected int getActiveSignal(IBlockReader worldIn, BlockPos pos, BlockState state) { - return state.get(POWERING) ? 15 : 0; + protected int getOutputSignal(IBlockReader worldIn, BlockPos pos, BlockState state) { + return state.getValue(POWERING) ? 15 : 0; } @Override - public int getWeakPower(BlockState blockState, IBlockReader blockAccess, BlockPos pos, Direction side) { - return blockState.get(HORIZONTAL_FACING) == side ? this.getActiveSignal(blockAccess, pos, blockState) : 0; + public int getSignal(BlockState blockState, IBlockReader blockAccess, BlockPos pos, Direction side) { + return blockState.getValue(FACING) == side ? this.getOutputSignal(blockAccess, pos, blockState) : 0; } @Override @@ -58,7 +60,7 @@ public class AdjustableRepeaterBlock extends AbstractDiodeBlock { public boolean canConnectRedstone(BlockState state, IBlockReader world, BlockPos pos, Direction side) { if (side == null) return false; - return side.getAxis() == state.get(HORIZONTAL_FACING) + return side.getAxis() == state.getValue(FACING) .getAxis(); } diff --git a/src/main/java/com/simibubi/create/content/logistics/block/diodes/AdjustableRepeaterGenerator.java b/src/main/java/com/simibubi/create/content/logistics/block/diodes/AdjustableRepeaterGenerator.java index 201675c68..ada44ac84 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/diodes/AdjustableRepeaterGenerator.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/diodes/AdjustableRepeaterGenerator.java @@ -33,7 +33,7 @@ public class AdjustableRepeaterGenerator extends AbstractDiodeGenerator { @Override int getModelIndex(BlockState state) { - return (state.get(AdjustableRepeaterBlock.POWERING) ? 2 : 0) + (state.get(AdjustableRepeaterBlock.POWERED) ? 1 : 0); + return (state.getValue(AdjustableRepeaterBlock.POWERING) ? 2 : 0) + (state.getValue(AdjustableRepeaterBlock.POWERED) ? 1 : 0); } } diff --git a/src/main/java/com/simibubi/create/content/logistics/block/diodes/AdjustableRepeaterScrollSlot.java b/src/main/java/com/simibubi/create/content/logistics/block/diodes/AdjustableRepeaterScrollSlot.java index 54d084788..328a7dfe2 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/diodes/AdjustableRepeaterScrollSlot.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/diodes/AdjustableRepeaterScrollSlot.java @@ -19,7 +19,7 @@ public class AdjustableRepeaterScrollSlot extends ValueBoxTransform { @Override protected void rotate(BlockState state, MatrixStack ms) { - float yRot = AngleHelper.horizontalAngle(state.get(BlockStateProperties.HORIZONTAL_FACING)) + 180; + float yRot = AngleHelper.horizontalAngle(state.getValue(BlockStateProperties.HORIZONTAL_FACING)) + 180; MatrixStacker.of(ms) .rotateY(yRot) .rotateX(90); diff --git a/src/main/java/com/simibubi/create/content/logistics/block/diodes/AdjustableRepeaterTileEntity.java b/src/main/java/com/simibubi/create/content/logistics/block/diodes/AdjustableRepeaterTileEntity.java index c678c6085..e21121bdc 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/diodes/AdjustableRepeaterTileEntity.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/diodes/AdjustableRepeaterTileEntity.java @@ -90,8 +90,8 @@ public class AdjustableRepeaterTileEntity extends SmartTileEntity implements IIn @Override public void tick() { super.tick(); - boolean powered = getBlockState().get(POWERED); - boolean powering = getBlockState().get(POWERING); + boolean powered = getBlockState().getValue(POWERED); + boolean powering = getBlockState().getValue(POWERING); boolean atMax = state >= maxState.getValue(); boolean atMin = state <= 0; updateState(powered, powering, atMax, atMin); @@ -102,16 +102,16 @@ public class AdjustableRepeaterTileEntity extends SmartTileEntity implements IIn charging = true; if (charging && atMax) { - if (!powering && !world.isRemote) - world.setBlockState(pos, getBlockState().with(POWERING, true)); + if (!powering && !level.isClientSide) + level.setBlockAndUpdate(worldPosition, getBlockState().setValue(POWERING, true)); if (!powered) charging = false; return; } if (!charging && atMin) { - if (powering && !world.isRemote) - world.setBlockState(pos, getBlockState().with(POWERING, false)); + if (powering && !level.isClientSide) + level.setBlockAndUpdate(worldPosition, getBlockState().setValue(POWERING, false)); return; } diff --git a/src/main/java/com/simibubi/create/content/logistics/block/diodes/PoweredLatchBlock.java b/src/main/java/com/simibubi/create/content/logistics/block/diodes/PoweredLatchBlock.java index 81f4670ae..667f9cbce 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/diodes/PoweredLatchBlock.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/diodes/PoweredLatchBlock.java @@ -16,90 +16,92 @@ import net.minecraft.world.TickPriority; import net.minecraft.world.World; import net.minecraft.world.server.ServerWorld; +import net.minecraft.block.AbstractBlock.Properties; + public class PoweredLatchBlock extends ToggleLatchBlock { public static BooleanProperty POWERED_SIDE = BooleanProperty.create("powered_side"); public PoweredLatchBlock(Properties properties) { super(properties); - setDefaultState(getDefaultState().with(POWERED_SIDE, false)); + registerDefaultState(defaultBlockState().setValue(POWERED_SIDE, false)); } @Override - protected void fillStateContainer(Builder builder) { - super.fillStateContainer(builder.add(POWERED_SIDE)); + protected void createBlockStateDefinition(Builder builder) { + super.createBlockStateDefinition(builder.add(POWERED_SIDE)); } @Override - protected void updateState(World worldIn, BlockPos pos, BlockState state) { - boolean back = state.get(POWERED); - boolean shouldBack = shouldBePowered(worldIn, pos, state); - boolean side = state.get(POWERED_SIDE); + protected void checkTickOnNeighbor(World worldIn, BlockPos pos, BlockState state) { + boolean back = state.getValue(POWERED); + boolean shouldBack = shouldTurnOn(worldIn, pos, state); + boolean side = state.getValue(POWERED_SIDE); boolean shouldSide = isPoweredOnSides(worldIn, pos, state); TickPriority tickpriority = TickPriority.HIGH; - if (this.isFacingTowardsRepeater(worldIn, pos, state)) + if (this.shouldPrioritize(worldIn, pos, state)) tickpriority = TickPriority.EXTREMELY_HIGH; else if (side || back) tickpriority = TickPriority.VERY_HIGH; - if (worldIn.getPendingBlockTicks().isTickPending(pos, this)) + if (worldIn.getBlockTicks().willTickThisTick(pos, this)) return; if (back != shouldBack || side != shouldSide) - worldIn.getPendingBlockTicks().scheduleTick(pos, this, this.getDelay(state), tickpriority); + worldIn.getBlockTicks().scheduleTick(pos, this, this.getDelay(state), tickpriority); } protected boolean isPoweredOnSides(World worldIn, BlockPos pos, BlockState state) { - Direction direction = state.get(HORIZONTAL_FACING); - Direction left = direction.rotateY(); - Direction right = direction.rotateYCCW(); + Direction direction = state.getValue(FACING); + Direction left = direction.getClockWise(); + Direction right = direction.getCounterClockWise(); for (Direction d : new Direction[] { left, right }) { - BlockPos blockpos = pos.offset(d); - int i = worldIn.getRedstonePower(blockpos, d); + BlockPos blockpos = pos.relative(d); + int i = worldIn.getSignal(blockpos, d); if (i > 0) return true; BlockState blockstate = worldIn.getBlockState(blockpos); - if (blockstate.getBlock() == Blocks.REDSTONE_WIRE && blockstate.get(RedstoneWireBlock.POWER) > 0) + if (blockstate.getBlock() == Blocks.REDSTONE_WIRE && blockstate.getValue(RedstoneWireBlock.POWER) > 0) return true; } return false; } @Override - public void scheduledTick(BlockState state, ServerWorld worldIn, BlockPos pos, Random random) { - boolean back = state.get(POWERED); - boolean shouldBack = this.shouldBePowered(worldIn, pos, state); - boolean side = state.get(POWERED_SIDE); + public void tick(BlockState state, ServerWorld worldIn, BlockPos pos, Random random) { + boolean back = state.getValue(POWERED); + boolean shouldBack = this.shouldTurnOn(worldIn, pos, state); + boolean side = state.getValue(POWERED_SIDE); boolean shouldSide = isPoweredOnSides(worldIn, pos, state); BlockState stateIn = state; if (back != shouldBack) { - state = state.with(POWERED, shouldBack); + state = state.setValue(POWERED, shouldBack); if (shouldBack) - state = state.with(POWERING, true); + state = state.setValue(POWERING, true); else if (side) - state = state.with(POWERING, false); + state = state.setValue(POWERING, false); } if (side != shouldSide) { - state = state.with(POWERED_SIDE, shouldSide); + state = state.setValue(POWERED_SIDE, shouldSide); if (shouldSide) - state = state.with(POWERING, false); + state = state.setValue(POWERING, false); else if (back) - state = state.with(POWERING, true); + state = state.setValue(POWERING, true); } if (state != stateIn) - worldIn.setBlockState(pos, state, 2); + worldIn.setBlock(pos, state, 2); } @Override protected ActionResultType activated(World worldIn, BlockPos pos, BlockState state) { - if (state.get(POWERED) != state.get(POWERED_SIDE)) + if (state.getValue(POWERED) != state.getValue(POWERED_SIDE)) return ActionResultType.PASS; - if (!worldIn.isRemote) - worldIn.setBlockState(pos, state.cycle(POWERING), 2); + if (!worldIn.isClientSide) + worldIn.setBlock(pos, state.cycle(POWERING), 2); return ActionResultType.SUCCESS; } diff --git a/src/main/java/com/simibubi/create/content/logistics/block/diodes/PoweredLatchGenerator.java b/src/main/java/com/simibubi/create/content/logistics/block/diodes/PoweredLatchGenerator.java index 305c3e724..e09fabc11 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/diodes/PoweredLatchGenerator.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/diodes/PoweredLatchGenerator.java @@ -29,7 +29,7 @@ public class PoweredLatchGenerator extends AbstractDiodeGenerator { @Override int getModelIndex(BlockState state) { - return state.get(PoweredLatchBlock.POWERING)? 1 : 0; + return state.getValue(PoweredLatchBlock.POWERING)? 1 : 0; } } diff --git a/src/main/java/com/simibubi/create/content/logistics/block/diodes/PulseRepeaterBlock.java b/src/main/java/com/simibubi/create/content/logistics/block/diodes/PulseRepeaterBlock.java index d15a129ad..2e1253f4a 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/diodes/PulseRepeaterBlock.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/diodes/PulseRepeaterBlock.java @@ -12,13 +12,15 @@ import net.minecraft.world.IBlockReader; import net.minecraft.world.TickPriority; import net.minecraft.world.server.ServerWorld; +import net.minecraft.block.AbstractBlock.Properties; + public class PulseRepeaterBlock extends AbstractDiodeBlock { public static BooleanProperty PULSING = BooleanProperty.create("pulsing"); public PulseRepeaterBlock(Properties properties) { super(properties); - setDefaultState(getDefaultState().with(PULSING, false).with(POWERED, false)); + registerDefaultState(defaultBlockState().setValue(PULSING, false).setValue(POWERED, false)); } @Override @@ -30,35 +32,35 @@ public class PulseRepeaterBlock extends AbstractDiodeBlock { public boolean canConnectRedstone(BlockState state, IBlockReader world, BlockPos pos, Direction side) { if (side == null) return false; - return side.getAxis() == state.get(HORIZONTAL_FACING).getAxis(); + return side.getAxis() == state.getValue(FACING).getAxis(); } @Override - public void scheduledTick(BlockState state, ServerWorld worldIn, BlockPos pos, Random random) { - boolean powered = state.get(POWERED); - boolean pulsing = state.get(PULSING); - boolean shouldPower = shouldBePowered(worldIn, pos, state); + public void tick(BlockState state, ServerWorld worldIn, BlockPos pos, Random random) { + boolean powered = state.getValue(POWERED); + boolean pulsing = state.getValue(PULSING); + boolean shouldPower = shouldTurnOn(worldIn, pos, state); if (pulsing) { - worldIn.setBlockState(pos, state.with(POWERED, shouldPower).with(PULSING, false), 2); + worldIn.setBlock(pos, state.setValue(POWERED, shouldPower).setValue(PULSING, false), 2); } else if (powered && !shouldPower) { - worldIn.setBlockState(pos, state.with(POWERED, false).with(PULSING, false), 2); + worldIn.setBlock(pos, state.setValue(POWERED, false).setValue(PULSING, false), 2); } else if (!powered) { - worldIn.setBlockState(pos, state.with(POWERED, true).with(PULSING, true), 2); - worldIn.getPendingBlockTicks().scheduleTick(pos, this, this.getDelay(state), TickPriority.HIGH); + worldIn.setBlock(pos, state.setValue(POWERED, true).setValue(PULSING, true), 2); + worldIn.getBlockTicks().scheduleTick(pos, this, this.getDelay(state), TickPriority.HIGH); } } @Override - protected int getActiveSignal(IBlockReader worldIn, BlockPos pos, BlockState state) { - return state.get(PULSING) ? 15 : 0; + protected int getOutputSignal(IBlockReader worldIn, BlockPos pos, BlockState state) { + return state.getValue(PULSING) ? 15 : 0; } @Override - protected void fillStateContainer(Builder builder) { - builder.add(HORIZONTAL_FACING, POWERED, PULSING); - super.fillStateContainer(builder); + protected void createBlockStateDefinition(Builder builder) { + builder.add(FACING, POWERED, PULSING); + super.createBlockStateDefinition(builder); } } diff --git a/src/main/java/com/simibubi/create/content/logistics/block/diodes/PulseRepeaterGenerator.java b/src/main/java/com/simibubi/create/content/logistics/block/diodes/PulseRepeaterGenerator.java index fd61ed1a8..c301ec552 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/diodes/PulseRepeaterGenerator.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/diodes/PulseRepeaterGenerator.java @@ -30,7 +30,7 @@ public class PulseRepeaterGenerator extends AbstractDiodeGenerator { @Override int getModelIndex(BlockState state) { - return state.get(PulseRepeaterBlock.PULSING) ? 2 : state.get(PulseRepeaterBlock.POWERED) ? 1 : 0; + return state.getValue(PulseRepeaterBlock.PULSING) ? 2 : state.getValue(PulseRepeaterBlock.POWERED) ? 1 : 0; } } diff --git a/src/main/java/com/simibubi/create/content/logistics/block/diodes/ToggleLatchBlock.java b/src/main/java/com/simibubi/create/content/logistics/block/diodes/ToggleLatchBlock.java index 4f378f8cb..553c704cd 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/diodes/ToggleLatchBlock.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/diodes/ToggleLatchBlock.java @@ -18,24 +18,26 @@ import net.minecraft.world.IBlockReader; import net.minecraft.world.World; import net.minecraft.world.server.ServerWorld; +import net.minecraft.block.AbstractBlock.Properties; + public class ToggleLatchBlock extends AbstractDiodeBlock { public static BooleanProperty POWERING = BooleanProperty.create("powering"); public ToggleLatchBlock(Properties properties) { super(properties); - setDefaultState(getDefaultState().with(POWERING, false) - .with(POWERED, false)); + registerDefaultState(defaultBlockState().setValue(POWERING, false) + .setValue(POWERED, false)); } @Override - protected void fillStateContainer(Builder builder) { - builder.add(POWERED, POWERING, HORIZONTAL_FACING); + protected void createBlockStateDefinition(Builder builder) { + builder.add(POWERED, POWERING, FACING); } @Override - public int getWeakPower(BlockState blockState, IBlockReader blockAccess, BlockPos pos, Direction side) { - return blockState.get(HORIZONTAL_FACING) == side ? this.getActiveSignal(blockAccess, pos, blockState) : 0; + public int getSignal(BlockState blockState, IBlockReader blockAccess, BlockPos pos, Direction side) { + return blockState.getValue(FACING) == side ? this.getOutputSignal(blockAccess, pos, blockState) : 0; } @Override @@ -44,34 +46,34 @@ public class ToggleLatchBlock extends AbstractDiodeBlock { } @Override - public ActionResultType onUse(BlockState state, World worldIn, BlockPos pos, PlayerEntity player, Hand handIn, + public ActionResultType use(BlockState state, World worldIn, BlockPos pos, PlayerEntity player, Hand handIn, BlockRayTraceResult hit) { - if (!player.isAllowEdit()) + if (!player.mayBuild()) return ActionResultType.PASS; - if (player.isSneaking()) + if (player.isShiftKeyDown()) return ActionResultType.PASS; - if (AllItems.WRENCH.isIn(player.getHeldItem(handIn))) + if (AllItems.WRENCH.isIn(player.getItemInHand(handIn))) return ActionResultType.PASS; return activated(worldIn, pos, state); } @Override - protected int getActiveSignal(IBlockReader worldIn, BlockPos pos, BlockState state) { - return state.get(POWERING) ? 15 : 0; + protected int getOutputSignal(IBlockReader worldIn, BlockPos pos, BlockState state) { + return state.getValue(POWERING) ? 15 : 0; } @Override - public void scheduledTick(BlockState state, ServerWorld worldIn, BlockPos pos, Random random) { - boolean poweredPreviously = state.get(POWERED); - super.scheduledTick(state, worldIn, pos, random); + public void tick(BlockState state, ServerWorld worldIn, BlockPos pos, Random random) { + boolean poweredPreviously = state.getValue(POWERED); + super.tick(state, worldIn, pos, random); BlockState newState = worldIn.getBlockState(pos); - if (newState.get(POWERED) && !poweredPreviously) - worldIn.setBlockState(pos, newState.cycle(POWERING), 2); + if (newState.getValue(POWERED) && !poweredPreviously) + worldIn.setBlock(pos, newState.cycle(POWERING), 2); } protected ActionResultType activated(World worldIn, BlockPos pos, BlockState state) { - if (!worldIn.isRemote) - worldIn.setBlockState(pos, state.cycle(POWERING), 2); + if (!worldIn.isClientSide) + worldIn.setBlock(pos, state.cycle(POWERING), 2); return ActionResultType.SUCCESS; } @@ -79,7 +81,7 @@ public class ToggleLatchBlock extends AbstractDiodeBlock { public boolean canConnectRedstone(BlockState state, IBlockReader world, BlockPos pos, Direction side) { if (side == null) return false; - return side.getAxis() == state.get(HORIZONTAL_FACING) + return side.getAxis() == state.getValue(FACING) .getAxis(); } diff --git a/src/main/java/com/simibubi/create/content/logistics/block/diodes/ToggleLatchGenerator.java b/src/main/java/com/simibubi/create/content/logistics/block/diodes/ToggleLatchGenerator.java index 3bcae9dcd..eda899142 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/diodes/ToggleLatchGenerator.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/diodes/ToggleLatchGenerator.java @@ -31,7 +31,7 @@ public class ToggleLatchGenerator extends AbstractDiodeGenerator { @Override int getModelIndex(BlockState state) { - return (state.get(ToggleLatchBlock.POWERING) ? 2 : 0) + (state.get(ToggleLatchBlock.POWERED) ? 1 : 0); + return (state.getValue(ToggleLatchBlock.POWERING) ? 2 : 0) + (state.getValue(ToggleLatchBlock.POWERED) ? 1 : 0); } } diff --git a/src/main/java/com/simibubi/create/content/logistics/block/funnel/AbstractDirectionalFunnelBlock.java b/src/main/java/com/simibubi/create/content/logistics/block/funnel/AbstractDirectionalFunnelBlock.java index 43dd71869..50bedef64 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/funnel/AbstractDirectionalFunnelBlock.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/funnel/AbstractDirectionalFunnelBlock.java @@ -9,6 +9,8 @@ import net.minecraft.util.Direction; import net.minecraft.util.Mirror; import net.minecraft.util.Rotation; +import net.minecraft.block.AbstractBlock.Properties; + public class AbstractDirectionalFunnelBlock extends AbstractFunnelBlock { public static final DirectionProperty FACING = BlockStateProperties.FACING; @@ -18,23 +20,23 @@ public class AbstractDirectionalFunnelBlock extends AbstractFunnelBlock { } @Override - protected void fillStateContainer(Builder builder) { - super.fillStateContainer(builder.add(FACING)); + protected void createBlockStateDefinition(Builder builder) { + super.createBlockStateDefinition(builder.add(FACING)); } @Override protected Direction getFacing(BlockState state) { - return state.get(FACING); + return state.getValue(FACING); } @Override public BlockState rotate(BlockState state, Rotation rot) { - return state.with(FACING, rot.rotate(state.get(FACING))); + return state.setValue(FACING, rot.rotate(state.getValue(FACING))); } @Override public BlockState mirror(BlockState state, Mirror mirrorIn) { - return state.rotate(mirrorIn.toRotation(state.get(FACING))); + return state.rotate(mirrorIn.getRotation(state.getValue(FACING))); } } diff --git a/src/main/java/com/simibubi/create/content/logistics/block/funnel/AbstractFunnelBlock.java b/src/main/java/com/simibubi/create/content/logistics/block/funnel/AbstractFunnelBlock.java index b71846b3a..17beebbdb 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/funnel/AbstractFunnelBlock.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/funnel/AbstractFunnelBlock.java @@ -31,29 +31,31 @@ import net.minecraft.world.server.ServerWorld; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraft.block.AbstractBlock.Properties; + public abstract class AbstractFunnelBlock extends Block implements ITE, IWrenchable { public static final BooleanProperty POWERED = BlockStateProperties.POWERED; protected AbstractFunnelBlock(Properties p_i48377_1_) { super(p_i48377_1_); - setDefaultState(getDefaultState().with(POWERED, false)); + registerDefaultState(defaultBlockState().setValue(POWERED, false)); } @Override public BlockState getStateForPlacement(BlockItemUseContext context) { - return getDefaultState().with(POWERED, context.getWorld() - .isBlockPowered(context.getPos())); + return defaultBlockState().setValue(POWERED, context.getLevel() + .hasNeighborSignal(context.getClickedPos())); } @Override - public boolean allowsMovement(BlockState state, IBlockReader reader, BlockPos pos, PathType type) { + public boolean isPathfindable(BlockState state, IBlockReader reader, BlockPos pos, PathType type) { return false; } @Override - protected void fillStateContainer(Builder builder) { - super.fillStateContainer(builder.add(POWERED)); + protected void createBlockStateDefinition(Builder builder) { + super.createBlockStateDefinition(builder.add(POWERED)); } @Override @@ -66,22 +68,22 @@ public abstract class AbstractFunnelBlock extends Block implements ITE builder) { - super.fillStateContainer(builder.add(HORIZONTAL_FACING)); + protected void createBlockStateDefinition(Builder builder) { + super.createBlockStateDefinition(builder.add(HORIZONTAL_FACING)); } @Override protected Direction getFacing(BlockState state) { - return state.get(HORIZONTAL_FACING); + return state.getValue(HORIZONTAL_FACING); } @Override public BlockState rotate(BlockState p_185499_1_, Rotation p_185499_2_) { - return p_185499_1_.with(HORIZONTAL_FACING, p_185499_2_.rotate(p_185499_1_.get(HORIZONTAL_FACING))); + return p_185499_1_.setValue(HORIZONTAL_FACING, p_185499_2_.rotate(p_185499_1_.getValue(HORIZONTAL_FACING))); } @Override public BlockState mirror(BlockState p_185471_1_, Mirror p_185471_2_) { - return p_185471_1_.rotate(p_185471_2_.toRotation(p_185471_1_.get(HORIZONTAL_FACING))); + return p_185471_1_.rotate(p_185471_2_.getRotation(p_185471_1_.getValue(HORIZONTAL_FACING))); } } diff --git a/src/main/java/com/simibubi/create/content/logistics/block/funnel/AndesiteFunnelBlock.java b/src/main/java/com/simibubi/create/content/logistics/block/funnel/AndesiteFunnelBlock.java index 2dc92c421..2191748a3 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/funnel/AndesiteFunnelBlock.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/funnel/AndesiteFunnelBlock.java @@ -7,6 +7,8 @@ import net.minecraft.util.Direction; import net.minecraft.util.math.BlockPos; import net.minecraft.world.IBlockReader; +import net.minecraft.block.AbstractBlock.Properties; + public class AndesiteFunnelBlock extends FunnelBlock { public AndesiteFunnelBlock(Properties p_i48415_1_) { @@ -17,8 +19,8 @@ public class AndesiteFunnelBlock extends FunnelBlock { public BlockState getEquivalentBeltFunnel(IBlockReader world, BlockPos pos, BlockState state) { Direction facing = getFunnelFacing(state); return AllBlocks.ANDESITE_BELT_FUNNEL.getDefaultState() - .with(BeltFunnelBlock.HORIZONTAL_FACING, facing) - .with(POWERED, state.get(POWERED)); + .setValue(BeltFunnelBlock.HORIZONTAL_FACING, facing) + .setValue(POWERED, state.getValue(POWERED)); } } diff --git a/src/main/java/com/simibubi/create/content/logistics/block/funnel/BeltFunnelBlock.java b/src/main/java/com/simibubi/create/content/logistics/block/funnel/BeltFunnelBlock.java index 56de5730e..e7e95f618 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/funnel/BeltFunnelBlock.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/funnel/BeltFunnelBlock.java @@ -35,6 +35,8 @@ import net.minecraft.world.IWorld; import net.minecraft.world.IWorldReader; import net.minecraft.world.World; +import net.minecraft.block.AbstractBlock.Properties; + public class BeltFunnelBlock extends AbstractHorizontalFunnelBlock implements ISpecialBlockItemRequirement { private BlockEntry parent; @@ -54,7 +56,7 @@ public class BeltFunnelBlock extends AbstractHorizontalFunnelBlock implements IS } @Override - public String getString() { + public String getSerializedName() { return Lang.asId(name()); } } @@ -62,25 +64,25 @@ public class BeltFunnelBlock extends AbstractHorizontalFunnelBlock implements IS public BeltFunnelBlock(BlockEntry parent, Properties p_i48377_1_) { super(p_i48377_1_); this.parent = parent; - setDefaultState(getDefaultState().with(SHAPE, Shape.RETRACTED)); + registerDefaultState(defaultBlockState().setValue(SHAPE, Shape.RETRACTED)); } @Override - protected void fillStateContainer(Builder p_206840_1_) { - super.fillStateContainer(p_206840_1_.add(SHAPE)); + protected void createBlockStateDefinition(Builder p_206840_1_) { + super.createBlockStateDefinition(p_206840_1_.add(SHAPE)); } @Override public VoxelShape getShape(BlockState state, IBlockReader p_220053_2_, BlockPos p_220053_3_, ISelectionContext p_220053_4_) { - return state.get(SHAPE).shaper.get(state.get(HORIZONTAL_FACING)); + return state.getValue(SHAPE).shaper.get(state.getValue(HORIZONTAL_FACING)); } @Override public VoxelShape getCollisionShape(BlockState p_220071_1_, IBlockReader p_220071_2_, BlockPos p_220071_3_, ISelectionContext p_220071_4_) { if (p_220071_4_.getEntity() instanceof ItemEntity - && (p_220071_1_.get(SHAPE) == Shape.PULLING || p_220071_1_.get(SHAPE) == Shape.PUSHING)) + && (p_220071_1_.getValue(SHAPE) == Shape.PULLING || p_220071_1_.getValue(SHAPE) == Shape.PUSHING)) return AllShapes.FUNNEL_COLLISION.get(getFacing(p_220071_1_)); return getShape(p_220071_1_, p_220071_2_, p_220071_3_, p_220071_4_); } @@ -88,25 +90,25 @@ public class BeltFunnelBlock extends AbstractHorizontalFunnelBlock implements IS @Override public BlockState getStateForPlacement(BlockItemUseContext ctx) { BlockState stateForPlacement = super.getStateForPlacement(ctx); - BlockPos pos = ctx.getPos(); - World world = ctx.getWorld(); - Direction facing = ctx.getFace() + BlockPos pos = ctx.getClickedPos(); + World world = ctx.getLevel(); + Direction facing = ctx.getClickedFace() .getAxis() - .isHorizontal() ? ctx.getFace() : ctx.getPlacementHorizontalFacing(); + .isHorizontal() ? ctx.getClickedFace() : ctx.getHorizontalDirection(); - BlockState state = stateForPlacement.with(HORIZONTAL_FACING, facing); + BlockState state = stateForPlacement.setValue(HORIZONTAL_FACING, facing); boolean sneaking = ctx.getPlayer() != null && ctx.getPlayer() - .isSneaking(); - return state.with(SHAPE, getShapeForPosition(world, pos, facing, !sneaking)); + .isShiftKeyDown(); + return state.setValue(SHAPE, getShapeForPosition(world, pos, facing, !sneaking)); } public static Shape getShapeForPosition(IBlockReader world, BlockPos pos, Direction facing, boolean extracting) { - BlockPos posBelow = pos.down(); + BlockPos posBelow = pos.below(); BlockState stateBelow = world.getBlockState(posBelow); Shape perpendicularState = extracting ? Shape.PUSHING : Shape.PULLING; if (!AllBlocks.BELT.has(stateBelow)) return perpendicularState; - Direction movementFacing = stateBelow.get(BeltBlock.HORIZONTAL_FACING); + Direction movementFacing = stateBelow.getValue(BeltBlock.HORIZONTAL_FACING); return movementFacing.getAxis() != facing.getAxis() ? perpendicularState : Shape.RETRACTED; } @@ -117,19 +119,19 @@ public class BeltFunnelBlock extends AbstractHorizontalFunnelBlock implements IS } @Override - public BlockState updatePostPlacement(BlockState state, Direction direction, BlockState neighbour, IWorld world, + public BlockState updateShape(BlockState state, Direction direction, BlockState neighbour, IWorld world, BlockPos pos, BlockPos p_196271_6_) { if (!isOnValidBelt(state, world, pos)) { BlockState parentState = parent.getDefaultState(); - if (state.method_28500(POWERED).orElse(false)) - parentState = parentState.with(POWERED, true); - if (state.get(SHAPE) == Shape.PUSHING) - parentState = parentState.with(FunnelBlock.EXTRACTING, true); - return parentState.with(FunnelBlock.FACING, state.get(HORIZONTAL_FACING)); + if (state.getOptionalValue(POWERED).orElse(false)) + parentState = parentState.setValue(POWERED, true); + if (state.getValue(SHAPE) == Shape.PUSHING) + parentState = parentState.setValue(FunnelBlock.EXTRACTING, true); + return parentState.setValue(FunnelBlock.FACING, state.getValue(HORIZONTAL_FACING)); } Shape updatedShape = - getShapeForPosition(world, pos, state.get(HORIZONTAL_FACING), state.get(SHAPE) == Shape.PUSHING); - Shape currentShape = state.get(SHAPE); + getShapeForPosition(world, pos, state.getValue(HORIZONTAL_FACING), state.getValue(SHAPE) == Shape.PUSHING); + Shape currentShape = state.getValue(SHAPE); if (updatedShape == currentShape) return state; @@ -139,15 +141,15 @@ public class BeltFunnelBlock extends AbstractHorizontalFunnelBlock implements IS if (updatedShape == Shape.RETRACTED && currentShape == Shape.EXTENDED) return state; - return state.with(SHAPE, updatedShape); + return state.setValue(SHAPE, updatedShape); } public static boolean isOnValidBelt(BlockState state, IWorldReader world, BlockPos pos) { - BlockState stateBelow = world.getBlockState(pos.down()); + BlockState stateBelow = world.getBlockState(pos.below()); if ((stateBelow.getBlock() instanceof BeltBlock)) return BeltBlock.canTransportObjects(stateBelow); DirectBeltInputBehaviour directBeltInputBehaviour = - TileEntityBehaviour.get(world, pos.down(), DirectBeltInputBehaviour.TYPE); + TileEntityBehaviour.get(world, pos.below(), DirectBeltInputBehaviour.TYPE); if (directBeltInputBehaviour == null) return false; return directBeltInputBehaviour.canSupportBeltFunnels(); @@ -155,11 +157,11 @@ public class BeltFunnelBlock extends AbstractHorizontalFunnelBlock implements IS @Override public ActionResultType onWrenched(BlockState state, ItemUseContext context) { - World world = context.getWorld(); - if (world.isRemote) + World world = context.getLevel(); + if (world.isClientSide) return ActionResultType.SUCCESS; - Shape shape = state.get(SHAPE); + Shape shape = state.getValue(SHAPE); Shape newShape = shape; if (shape == Shape.PULLING) newShape = Shape.PUSHING; @@ -168,9 +170,9 @@ public class BeltFunnelBlock extends AbstractHorizontalFunnelBlock implements IS else if (shape == Shape.EXTENDED) newShape = Shape.RETRACTED; else if (shape == Shape.RETRACTED) { - BlockState belt = world.getBlockState(context.getPos() - .down()); - if (belt.getBlock() instanceof BeltBlock && belt.get(BeltBlock.SLOPE) != BeltSlope.HORIZONTAL) + BlockState belt = world.getBlockState(context.getClickedPos() + .below()); + if (belt.getBlock() instanceof BeltBlock && belt.getValue(BeltBlock.SLOPE) != BeltSlope.HORIZONTAL) newShape = Shape.RETRACTED; else newShape = Shape.EXTENDED; @@ -179,14 +181,14 @@ public class BeltFunnelBlock extends AbstractHorizontalFunnelBlock implements IS if (newShape == shape) return ActionResultType.SUCCESS; - world.setBlockState(context.getPos(), state.with(SHAPE, newShape)); + world.setBlockAndUpdate(context.getClickedPos(), state.setValue(SHAPE, newShape)); if (newShape == Shape.EXTENDED) { - Direction facing = state.get(HORIZONTAL_FACING); - BlockState opposite = world.getBlockState(context.getPos() - .offset(facing)); - if (opposite.getBlock() instanceof BeltFunnelBlock && opposite.get(SHAPE) == Shape.EXTENDED - && opposite.get(HORIZONTAL_FACING) == facing.getOpposite()) + Direction facing = state.getValue(HORIZONTAL_FACING); + BlockState opposite = world.getBlockState(context.getClickedPos() + .relative(facing)); + if (opposite.getBlock() instanceof BeltFunnelBlock && opposite.getValue(SHAPE) == Shape.EXTENDED + && opposite.getValue(HORIZONTAL_FACING) == facing.getOpposite()) AllTriggers.triggerFor(AllTriggers.BELT_FUNNEL_KISS, context.getPlayer()); } return ActionResultType.SUCCESS; diff --git a/src/main/java/com/simibubi/create/content/logistics/block/funnel/BeltFunnelGenerator.java b/src/main/java/com/simibubi/create/content/logistics/block/funnel/BeltFunnelGenerator.java index 792fbe5c4..2fe07b546 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/funnel/BeltFunnelGenerator.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/funnel/BeltFunnelGenerator.java @@ -27,15 +27,15 @@ public class BeltFunnelGenerator extends SpecialBlockStateGen { @Override protected int getYRotation(BlockState state) { - return horizontalAngle(state.get(BeltFunnelBlock.HORIZONTAL_FACING)) + 180; + return horizontalAngle(state.getValue(BeltFunnelBlock.HORIZONTAL_FACING)) + 180; } @Override public ModelFile getModel(DataGenContext ctx, RegistrateBlockstateProvider prov, BlockState state) { - boolean powered = state.method_28500(BlockStateProperties.POWERED).orElse(false); - String shapeName = state.get(BeltFunnelBlock.SHAPE) - .getString(); + boolean powered = state.getOptionalValue(BlockStateProperties.POWERED).orElse(false); + String shapeName = state.getValue(BeltFunnelBlock.SHAPE) + .getSerializedName(); String poweredSuffix = powered ? "_powered" : ""; String name = ctx.getName() + "_" + poweredSuffix; diff --git a/src/main/java/com/simibubi/create/content/logistics/block/funnel/BrassFunnelBlock.java b/src/main/java/com/simibubi/create/content/logistics/block/funnel/BrassFunnelBlock.java index e44c2aa4d..d5a1f8426 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/funnel/BrassFunnelBlock.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/funnel/BrassFunnelBlock.java @@ -7,6 +7,8 @@ import net.minecraft.util.Direction; import net.minecraft.util.math.BlockPos; import net.minecraft.world.IBlockReader; +import net.minecraft.block.AbstractBlock.Properties; + public class BrassFunnelBlock extends FunnelBlock { public BrassFunnelBlock(Properties p_i48415_1_) { @@ -17,8 +19,8 @@ public class BrassFunnelBlock extends FunnelBlock { public BlockState getEquivalentBeltFunnel(IBlockReader world, BlockPos pos, BlockState state) { Direction facing = getFacing(state); return AllBlocks.BRASS_BELT_FUNNEL.getDefaultState() - .with(BeltFunnelBlock.HORIZONTAL_FACING, facing) - .with(POWERED, state.get(POWERED)); + .setValue(BeltFunnelBlock.HORIZONTAL_FACING, facing) + .setValue(POWERED, state.getValue(POWERED)); } } diff --git a/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelBlock.java b/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelBlock.java index 747414130..51a9b06bd 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelBlock.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelBlock.java @@ -28,13 +28,15 @@ import net.minecraft.world.IBlockReader; import net.minecraft.world.IWorld; import net.minecraft.world.World; +import net.minecraft.block.AbstractBlock.Properties; + public abstract class FunnelBlock extends AbstractDirectionalFunnelBlock { public static final BooleanProperty EXTRACTING = BooleanProperty.create("extracting"); public FunnelBlock(Properties p_i48415_1_) { super(p_i48415_1_); - setDefaultState(getDefaultState().with(EXTRACTING, false)); + registerDefaultState(defaultBlockState().setValue(EXTRACTING, false)); } public abstract BlockState getEquivalentBeltFunnel(IBlockReader world, BlockPos pos, BlockState state); @@ -44,40 +46,40 @@ public abstract class FunnelBlock extends AbstractDirectionalFunnelBlock { BlockState state = super.getStateForPlacement(context); boolean sneak = context.getPlayer() != null && context.getPlayer() - .isSneaking(); - state = state.with(EXTRACTING, !sneak); + .isShiftKeyDown(); + state = state.setValue(EXTRACTING, !sneak); for (Direction direction : context.getNearestLookingDirections()) { - BlockState blockstate = state.with(FACING, direction.getOpposite()); - if (blockstate.isValidPosition(context.getWorld(), context.getPos())) - return blockstate.with(POWERED, state.get(POWERED)); + BlockState blockstate = state.setValue(FACING, direction.getOpposite()); + if (blockstate.canSurvive(context.getLevel(), context.getClickedPos())) + return blockstate.setValue(POWERED, state.getValue(POWERED)); } return state; } @Override - protected void fillStateContainer(Builder builder) { - super.fillStateContainer(builder.add(EXTRACTING)); + protected void createBlockStateDefinition(Builder builder) { + super.createBlockStateDefinition(builder.add(EXTRACTING)); } @Override - public ActionResultType onUse(BlockState state, World worldIn, BlockPos pos, PlayerEntity player, Hand handIn, + public ActionResultType use(BlockState state, World worldIn, BlockPos pos, PlayerEntity player, Hand handIn, BlockRayTraceResult hit) { - ItemStack heldItem = player.getHeldItem(handIn); + ItemStack heldItem = player.getItemInHand(handIn); boolean shouldntInsertItem = AllBlocks.MECHANICAL_ARM.isIn(heldItem) || !canInsertIntoFunnel(state); if (AllItems.WRENCH.isIn(heldItem)) return ActionResultType.PASS; - if (hit.getFace() == getFunnelFacing(state) && !shouldntInsertItem) { - if (!worldIn.isRemote) + if (hit.getDirection() == getFunnelFacing(state) && !shouldntInsertItem) { + if (!worldIn.isClientSide) withTileEntityDo(worldIn, pos, te -> { ItemStack toInsert = heldItem.copy(); ItemStack remainder = tryInsert(worldIn, pos, toInsert, false); - if (!ItemStack.areItemStacksEqual(remainder, toInsert)) - player.setHeldItem(handIn, remainder); + if (!ItemStack.matches(remainder, toInsert)) + player.setItemInHand(handIn, remainder); }); return ActionResultType.SUCCESS; } @@ -87,15 +89,15 @@ public abstract class FunnelBlock extends AbstractDirectionalFunnelBlock { @Override public ActionResultType onWrenched(BlockState state, ItemUseContext context) { - World world = context.getWorld(); - if (!world.isRemote) - world.setBlockState(context.getPos(), state.cycle(EXTRACTING)); + World world = context.getLevel(); + if (!world.isClientSide) + world.setBlockAndUpdate(context.getClickedPos(), state.cycle(EXTRACTING)); return ActionResultType.SUCCESS; } @Override - public void onEntityCollision(BlockState state, World worldIn, BlockPos pos, Entity entityIn) { - if (worldIn.isRemote) + public void entityInside(BlockState state, World worldIn, BlockPos pos, Entity entityIn) { + if (worldIn.isClientSide) return; if (!(entityIn instanceof ItemEntity)) return; @@ -106,11 +108,11 @@ public abstract class FunnelBlock extends AbstractDirectionalFunnelBlock { ItemEntity itemEntity = (ItemEntity) entityIn; Direction direction = getFunnelFacing(state); - Vector3d diff = entityIn.getPositionVec() + Vector3d diff = entityIn.position() .subtract(VecHelper.getCenterOf(pos) - .add(Vector3d.of(direction.getDirectionVec()).scale(-.325f))); + .add(Vector3d.atLowerCornerOf(direction.getNormal()).scale(-.325f))); double projectedDiff = direction.getAxis() - .getCoordinate(diff.x, diff.y, diff.z); + .choose(diff.x, diff.y, diff.z); if (projectedDiff < 0 == (direction.getAxisDirection() == AxisDirection.POSITIVE)) return; @@ -124,12 +126,12 @@ public abstract class FunnelBlock extends AbstractDirectionalFunnelBlock { } protected boolean canInsertIntoFunnel(BlockState state) { - return !state.get(POWERED) && !state.get(EXTRACTING); + return !state.getValue(POWERED) && !state.getValue(EXTRACTING); } @Override public VoxelShape getShape(BlockState state, IBlockReader world, BlockPos pos, ISelectionContext context) { - Direction facing = state.get(FACING); + Direction facing = state.getValue(FACING); return facing == Direction.DOWN ? AllShapes.FUNNEL_CEILING : facing == Direction.UP ? AllShapes.FUNNEL_FLOOR : AllShapes.FUNNEL_WALL.get(facing); } @@ -143,15 +145,15 @@ public abstract class FunnelBlock extends AbstractDirectionalFunnelBlock { } @Override - public BlockState updatePostPlacement(BlockState state, Direction direction, BlockState p_196271_3_, IWorld world, + public BlockState updateShape(BlockState state, Direction direction, BlockState p_196271_3_, IWorld world, BlockPos pos, BlockPos p_196271_6_) { if (getFacing(state).getAxis() .isVertical() || direction != Direction.DOWN) return state; BlockState equivalentFunnel = getEquivalentBeltFunnel(null, null, state); if (BeltFunnelBlock.isOnValidBelt(equivalentFunnel, world, pos)) - return equivalentFunnel.with(BeltFunnelBlock.SHAPE, - BeltFunnelBlock.getShapeForPosition(world, pos, getFacing(state), state.get(EXTRACTING))); + return equivalentFunnel.setValue(BeltFunnelBlock.SHAPE, + BeltFunnelBlock.getShapeForPosition(world, pos, getFacing(state), state.getValue(EXTRACTING))); return state; } diff --git a/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelFilterSlotPositioning.java b/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelFilterSlotPositioning.java index 927296f0a..39aa90062 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelFilterSlotPositioning.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelFilterSlotPositioning.java @@ -22,7 +22,7 @@ public class FunnelFilterSlotPositioning extends ValueBoxTransform.Sided { float stateAngle = AngleHelper.horizontalAngle(funnelFacing); if (state.getBlock() instanceof BeltFunnelBlock) { - switch (state.get(BeltFunnelBlock.SHAPE)) { + switch (state.getValue(BeltFunnelBlock.SHAPE)) { case EXTENDED: return VecHelper.rotateCentered(VecHelper.voxelSpace(8, 15.5f, 13), stateAngle, Axis.Y); @@ -55,8 +55,8 @@ public class FunnelFilterSlotPositioning extends ValueBoxTransform.Sided { } boolean isBeltFunnel = state.getBlock() instanceof BeltFunnelBlock; - if (isBeltFunnel && state.get(BeltFunnelBlock.SHAPE) != Shape.EXTENDED) { - Shape shape = state.get(BeltFunnelBlock.SHAPE); + if (isBeltFunnel && state.getValue(BeltFunnelBlock.SHAPE) != Shape.EXTENDED) { + Shape shape = state.getValue(BeltFunnelBlock.SHAPE); super.rotate(state, ms); if (shape == Shape.PULLING || shape == Shape.PUSHING) MatrixStacker.of(ms) @@ -88,7 +88,7 @@ public class FunnelFilterSlotPositioning extends ValueBoxTransform.Sided { .isVertical()) return direction.getAxis() .isHorizontal(); - if (state.getBlock() instanceof BeltFunnelBlock && state.get(BeltFunnelBlock.SHAPE) == Shape.EXTENDED) + if (state.getBlock() instanceof BeltFunnelBlock && state.getValue(BeltFunnelBlock.SHAPE) == Shape.EXTENDED) return direction == Direction.UP; return direction == facing; } diff --git a/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelGenerator.java b/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelGenerator.java index b41d3384f..3681ed623 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelGenerator.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelGenerator.java @@ -29,21 +29,21 @@ public class FunnelGenerator extends SpecialBlockStateGen { @Override protected int getXRotation(BlockState state) { - return state.get(FunnelBlock.FACING) == Direction.DOWN ? 180 : 0; + return state.getValue(FunnelBlock.FACING) == Direction.DOWN ? 180 : 0; } @Override protected int getYRotation(BlockState state) { - return horizontalAngle(state.get(FunnelBlock.FACING)) + 180; + return horizontalAngle(state.getValue(FunnelBlock.FACING)) + 180; } @Override public ModelFile getModel(DataGenContext c, RegistrateBlockstateProvider p, BlockState s) { - String powered = s.get(FunnelBlock.POWERED) ? "_powered" : ""; - String closed = s.get(FunnelBlock.POWERED) ? "_closed" : "_open"; - String extracting = s.get(FunnelBlock.EXTRACTING) ? "_push" : "_pull"; - Direction facing = s.get(FunnelBlock.FACING); + String powered = s.getValue(FunnelBlock.POWERED) ? "_powered" : ""; + String closed = s.getValue(FunnelBlock.POWERED) ? "_closed" : "_open"; + String extracting = s.getValue(FunnelBlock.EXTRACTING) ? "_push" : "_pull"; + Direction facing = s.getValue(FunnelBlock.FACING); boolean horizontal = facing.getAxis() .isHorizontal(); String parent = horizontal ? "horizontal" : hasFilter ? "vertical" : "vertical_filterless"; diff --git a/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelInstance.java b/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelInstance.java index 26a975859..170d8e578 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelInstance.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelInstance.java @@ -32,13 +32,13 @@ public class FunnelInstance extends TileEntityInstance impleme Instancer model = modelManager.getMaterial(AllMaterialSpecs.FLAPS) .getModel(flapPartial, blockState); - int blockLight = world.getLightLevel(LightType.BLOCK, pos); - int skyLight = world.getLightLevel(LightType.SKY, pos); + int blockLight = world.getBrightness(LightType.BLOCK, pos); + int skyLight = world.getBrightness(LightType.SKY, pos); Direction direction = FunnelBlock.getFunnelFacing(blockState); float flapness = tile.flap.get(AnimationTickHolder.getPartialTicks()); - float horizontalAngle = direction.getOpposite().getHorizontalAngle(); + float horizontalAngle = direction.getOpposite().toYRot(); for (int segment = 0; segment <= 3; segment++) { float intensity = segment == 3 ? 1.5f : segment + 1; diff --git a/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelItem.java b/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelItem.java index f127a2b3c..df9cad383 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelItem.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelItem.java @@ -14,6 +14,8 @@ import net.minecraftforge.eventbus.api.Event.Result; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod.EventBusSubscriber; +import net.minecraft.item.Item.Properties; + @EventBusSubscriber public class FunnelItem extends BlockItem { @@ -29,25 +31,25 @@ public class FunnelItem extends BlockItem { } @Override - protected BlockState getStateForPlacement(BlockItemUseContext ctx) { - World world = ctx.getWorld(); - BlockPos pos = ctx.getPos(); - BlockState state = super.getStateForPlacement(ctx); + protected BlockState getPlacementState(BlockItemUseContext ctx) { + World world = ctx.getLevel(); + BlockPos pos = ctx.getClickedPos(); + BlockState state = super.getPlacementState(ctx); if (state == null) return state; if (!(state.getBlock() instanceof FunnelBlock)) return state; - if (state.get(FunnelBlock.FACING) + if (state.getValue(FunnelBlock.FACING) .getAxis() .isVertical()) return state; - Direction direction = state.get(FunnelBlock.FACING); + Direction direction = state.getValue(FunnelBlock.FACING); FunnelBlock block = (FunnelBlock) getBlock(); Block beltFunnelBlock = block.getEquivalentBeltFunnel(world, pos, state) .getBlock(); BlockState equivalentBeltFunnel = beltFunnelBlock.getStateForPlacement(ctx) - .with(BeltFunnelBlock.HORIZONTAL_FACING, direction); + .setValue(BeltFunnelBlock.HORIZONTAL_FACING, direction); if (BeltFunnelBlock.isOnValidBelt(equivalentBeltFunnel, world, pos)) { AllTriggers.triggerFor(AllTriggers.BELT_FUNNEL, ctx.getPlayer()); return equivalentBeltFunnel; diff --git a/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelMovementBehaviour.java b/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelMovementBehaviour.java index 78d537c64..b5951638e 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelMovementBehaviour.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelMovementBehaviour.java @@ -38,9 +38,9 @@ public class FunnelMovementBehaviour extends MovementBehaviour { @Override public Vector3d getActiveAreaOffset(MovementContext context) { Direction facing = FunnelBlock.getFunnelFacing(context.state); - Vector3d vec = Vector3d.of(facing.getDirectionVec()); + Vector3d vec = Vector3d.atLowerCornerOf(facing.getNormal()); if (facing != Direction.UP) - return vec.scale(context.state.get(FunnelBlock.EXTRACTING) ? .15 : .65); + return vec.scale(context.state.getValue(FunnelBlock.EXTRACTING) ? .15 : .65); return vec.scale(.65); } @@ -49,7 +49,7 @@ public class FunnelMovementBehaviour extends MovementBehaviour { public void visitNewPosition(MovementContext context, BlockPos pos) { super.visitNewPosition(context, pos); - if (context.state.get(FunnelBlock.EXTRACTING)) + if (context.state.getValue(FunnelBlock.EXTRACTING)) extract(context, pos); else succ(context, pos); @@ -61,13 +61,13 @@ public class FunnelMovementBehaviour extends MovementBehaviour { World world = context.world; Vector3d entityPos = context.position; - if (context.state.get(FunnelBlock.FACING) != Direction.DOWN) + if (context.state.getValue(FunnelBlock.FACING) != Direction.DOWN) entityPos = entityPos.add(0, -.5f, 0); if (!world.getBlockState(pos).getCollisionShape(world, pos).isEmpty()) return;//only drop items if the target block is a empty space - if (!world.getEntitiesWithinAABB(ItemEntity.class, new AxisAlignedBB(new BlockPos(entityPos))).isEmpty()) + if (!world.getEntitiesOfClass(ItemEntity.class, new AxisAlignedBB(new BlockPos(entityPos))).isEmpty()) return;//don't drop items if there already are any in the target block space ItemStack filter = getFilter(context); @@ -85,21 +85,21 @@ public class FunnelMovementBehaviour extends MovementBehaviour { if (extract.isEmpty()) return; - if (world.isRemote) + if (world.isClientSide) return; ItemEntity entity = new ItemEntity(world, entityPos.x, entityPos.y, entityPos.z, extract); - entity.setMotion(Vector3d.ZERO); - entity.setPickupDelay(5); - world.playSound(null, pos, SoundEvents.ENTITY_ITEM_PICKUP, SoundCategory.BLOCKS, 1/16f, .1f); - world.addEntity(entity); + entity.setDeltaMovement(Vector3d.ZERO); + entity.setPickUpDelay(5); + world.playSound(null, pos, SoundEvents.ITEM_PICKUP, SoundCategory.BLOCKS, 1/16f, .1f); + world.addFreshEntity(entity); } private void succ(MovementContext context, BlockPos pos) { World world = context.world; - List items = world.getEntitiesWithinAABB(ItemEntity.class, new AxisAlignedBB(pos)); + List items = world.getEntitiesOfClass(ItemEntity.class, new AxisAlignedBB(pos)); ItemStack filter = getFilter(context); for (ItemEntity item : items) { @@ -122,7 +122,7 @@ public class FunnelMovementBehaviour extends MovementBehaviour { } private ItemStack getFilter(MovementContext context) { - return hasFilter ? ItemStack.read(context.tileData.getCompound("Filter")) : ItemStack.EMPTY; + return hasFilter ? ItemStack.of(context.tileData.getCompound("Filter")) : ItemStack.EMPTY; } } diff --git a/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelRenderer.java b/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelRenderer.java index 7416c18ba..a5b1914c6 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelRenderer.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelRenderer.java @@ -30,11 +30,11 @@ public class FunnelRenderer extends SmartTileEntityRenderer { int light, int overlay) { super.renderSafe(te, partialTicks, ms, buffer, light, overlay); - if (!te.hasFlap() || Backend.getInstance().canUseInstancing(te.getWorld())) + if (!te.hasFlap() || Backend.getInstance().canUseInstancing(te.getLevel())) return; BlockState blockState = te.getBlockState(); - IVertexBuilder vb = buffer.getBuffer(RenderType.getSolid()); + IVertexBuilder vb = buffer.getBuffer(RenderType.solid()); PartialModel partialModel = (blockState.getBlock() instanceof FunnelBlock ? AllBlockPartials.FUNNEL_FLAP : AllBlockPartials.BELT_FUNNEL_FLAP); SuperByteBuffer flapBuffer = PartialBufferer.get(partialModel, blockState); @@ -45,14 +45,14 @@ public class FunnelRenderer extends SmartTileEntityRenderer { .getOpposite()); float f = te.flap.get(partialTicks); - ms.push(); + ms.pushPose(); msr.centre() .rotateY(horizontalAngle) .unCentre(); ms.translate(0, 0, -te.getFlapOffset()); for (int segment = 0; segment <= 3; segment++) { - ms.push(); + ms.pushPose(); float intensity = segment == 3 ? 1.5f : segment + 1; float abs = Math.abs(f); @@ -67,10 +67,10 @@ public class FunnelRenderer extends SmartTileEntityRenderer { flapBuffer.light(light) .renderInto(ms, vb); - ms.pop(); + ms.popPose(); ms.translate(-3 / 16f, 0, 0); } - ms.pop(); + ms.popPose(); } } diff --git a/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelTileEntity.java b/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelTileEntity.java index 116d74468..d6e7773bd 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelTileEntity.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelTileEntity.java @@ -62,24 +62,24 @@ public class FunnelTileEntity extends SmartTileEntity implements IHaveHoveringIn BlockState state = getBlockState(); if (!FunnelBlock.isFunnel(state)) return Mode.INVALID; - if (state.method_28500(BlockStateProperties.POWERED) + if (state.getOptionalValue(BlockStateProperties.POWERED) .orElse(false)) return Mode.PAUSED; if (state.getBlock() instanceof BeltFunnelBlock) { - Shape shape = state.get(BeltFunnelBlock.SHAPE); + Shape shape = state.getValue(BeltFunnelBlock.SHAPE); if (shape == Shape.PULLING) return Mode.TAKING_FROM_BELT; if (shape == Shape.PUSHING) return Mode.PUSHING_TO_BELT; - BeltTileEntity belt = BeltHelper.getSegmentTE(world, pos.down()); + BeltTileEntity belt = BeltHelper.getSegmentTE(level, worldPosition.below()); if (belt != null) - return belt.getMovementFacing() == state.get(BeltFunnelBlock.HORIZONTAL_FACING) ? Mode.PUSHING_TO_BELT + return belt.getMovementFacing() == state.getValue(BeltFunnelBlock.HORIZONTAL_FACING) ? Mode.PUSHING_TO_BELT : Mode.TAKING_FROM_BELT; return Mode.INVALID; } if (state.getBlock() instanceof FunnelBlock) - return state.get(FunnelBlock.EXTRACTING) ? Mode.EXTRACT : Mode.COLLECT; + return state.getValue(FunnelBlock.EXTRACTING) ? Mode.EXTRACT : Mode.COLLECT; return Mode.INVALID; } @@ -89,7 +89,7 @@ public class FunnelTileEntity extends SmartTileEntity implements IHaveHoveringIn super.tick(); flap.tick(); Mode mode = determineCurrentMode(); - if (world.isRemote) + if (level.isClientSide) return; // Redstone resets the extraction cooldown @@ -140,7 +140,7 @@ public class FunnelTileEntity extends SmartTileEntity implements IHaveHoveringIn .extract(amountToExtract); if (stack.isEmpty()) return; - for (ItemEntity itemEntity : world.getEntitiesWithinAABB(ItemEntity.class, area)) { + for (ItemEntity itemEntity : level.getEntitiesOfClass(ItemEntity.class, area)) { lastObserved = new WeakReference<>(itemEntity); return; } @@ -153,12 +153,12 @@ public class FunnelTileEntity extends SmartTileEntity implements IHaveHoveringIn flap(false); onTransfer(stack); - Vector3d outputPos = VecHelper.getCenterOf(pos); + Vector3d outputPos = VecHelper.getCenterOf(worldPosition); boolean vertical = facing.getAxis() .isVertical(); boolean up = facing == Direction.UP; - outputPos = outputPos.add(Vector3d.of(facing.getDirectionVec()) + outputPos = outputPos.add(Vector3d.atLowerCornerOf(facing.getNormal()) .scale(vertical ? up ? .15f : .5f : .25f)); if (!vertical) outputPos = outputPos.subtract(0, .45f, 0); @@ -167,31 +167,31 @@ public class FunnelTileEntity extends SmartTileEntity implements IHaveHoveringIn if (up) motion = new Vector3d(0, 4 / 16f, 0); - ItemEntity item = new ItemEntity(world, outputPos.x, outputPos.y, outputPos.z, stack.copy()); - item.setDefaultPickupDelay(); - item.setMotion(motion); - world.addEntity(item); + ItemEntity item = new ItemEntity(level, outputPos.x, outputPos.y, outputPos.z, stack.copy()); + item.setDefaultPickUpDelay(); + item.setDeltaMovement(motion); + level.addFreshEntity(item); lastObserved = new WeakReference<>(item); startCooldown(); } static final AxisAlignedBB coreBB = - new AxisAlignedBB(VecHelper.CENTER_OF_ORIGIN, VecHelper.CENTER_OF_ORIGIN).grow(.75f); + new AxisAlignedBB(VecHelper.CENTER_OF_ORIGIN, VecHelper.CENTER_OF_ORIGIN).inflate(.75f); private AxisAlignedBB getEntityOverflowScanningArea() { Direction facing = AbstractFunnelBlock.getFunnelFacing(getBlockState()); - AxisAlignedBB bb = coreBB.offset(pos); + AxisAlignedBB bb = coreBB.move(worldPosition); if (facing == null || facing == Direction.UP) return bb; - return bb.expand(0, -1, 0); + return bb.expandTowards(0, -1, 0); } private void activateExtractingBeltFunnel() { BlockState blockState = getBlockState(); - Direction facing = blockState.get(BeltFunnelBlock.HORIZONTAL_FACING); + Direction facing = blockState.getValue(BeltFunnelBlock.HORIZONTAL_FACING); DirectBeltInputBehaviour inputBehaviour = - TileEntityBehaviour.get(world, pos.down(), DirectBeltInputBehaviour.TYPE); + TileEntityBehaviour.get(level, worldPosition.below(), DirectBeltInputBehaviour.TYPE); if (inputBehaviour == null) return; @@ -242,13 +242,13 @@ public class FunnelTileEntity extends SmartTileEntity implements IHaveHoveringIn BlockState blockState = getBlockState(); boolean beltFunnelsupportsAmount = false; if (blockState.getBlock() instanceof BeltFunnelBlock) { - Shape shape = blockState.get(BeltFunnelBlock.SHAPE); + Shape shape = blockState.getValue(BeltFunnelBlock.SHAPE); if (shape == Shape.PUSHING) beltFunnelsupportsAmount = true; else - beltFunnelsupportsAmount = BeltHelper.getSegmentTE(world, pos.down()) != null; + beltFunnelsupportsAmount = BeltHelper.getSegmentTE(level, worldPosition.below()) != null; } - boolean extractor = blockState.getBlock() instanceof FunnelBlock && blockState.get(FunnelBlock.EXTRACTING); + boolean extractor = blockState.getBlock() instanceof FunnelBlock && blockState.getValue(FunnelBlock.EXTRACTING); return beltFunnelsupportsAmount || extractor; } @@ -258,7 +258,7 @@ public class FunnelTileEntity extends SmartTileEntity implements IHaveHoveringIn return false; if (!(blockState.getBlock() instanceof FunnelBlock)) return false; - if (blockState.get(FunnelBlock.EXTRACTING)) + if (blockState.getValue(FunnelBlock.EXTRACTING)) return false; return FunnelBlock.getFunnelFacing(blockState) == Direction.UP; } @@ -282,11 +282,11 @@ public class FunnelTileEntity extends SmartTileEntity implements IHaveHoveringIn } public void flap(boolean inward) { - if (!world.isRemote) { + if (!level.isClientSide) { AllPackets.channel.send(packetTarget(), new FunnelFlapPacket(this, inward)); } else { flap.set(inward ? 1 : -1); - AllSoundEvents.FUNNEL_FLAP.playAt(world, pos, 1, 1, true); + AllSoundEvents.FUNNEL_FLAP.playAt(level, worldPosition, 1, 1, true); } } @@ -303,7 +303,7 @@ public class FunnelTileEntity extends SmartTileEntity implements IHaveHoveringIn BlockState blockState = getBlockState(); if (!(blockState.getBlock() instanceof BeltFunnelBlock)) return -1 / 16f; - switch (blockState.get(BeltFunnelBlock.SHAPE)) { + switch (blockState.getValue(BeltFunnelBlock.SHAPE)) { default: case RETRACTED: return 0; @@ -331,13 +331,13 @@ public class FunnelTileEntity extends SmartTileEntity implements IHaveHoveringIn } @Override - public double getMaxRenderDistanceSquared() { - return hasFlap() ? super.getMaxRenderDistanceSquared() : 64; + public double getViewDistance() { + return hasFlap() ? super.getViewDistance() : 64; } public void onTransfer(ItemStack stack) { AllBlocks.CONTENT_OBSERVER.get() - .onFunnelTransfer(world, pos, stack); + .onFunnelTransfer(level, worldPosition, stack); } @Override diff --git a/src/main/java/com/simibubi/create/content/logistics/block/inventories/AdjustableCrateBlock.java b/src/main/java/com/simibubi/create/content/logistics/block/inventories/AdjustableCrateBlock.java index 54af02825..5402bebc7 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/inventories/AdjustableCrateBlock.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/inventories/AdjustableCrateBlock.java @@ -18,6 +18,8 @@ import net.minecraft.world.IBlockReader; import net.minecraft.world.World; import net.minecraftforge.fml.network.NetworkHooks; +import net.minecraft.block.AbstractBlock.Properties; + public class AdjustableCrateBlock extends CrateBlock { public AdjustableCrateBlock(Properties p_i48415_1_) { @@ -35,10 +37,10 @@ public class AdjustableCrateBlock extends CrateBlock { } @Override - public void onBlockAdded(BlockState state, World worldIn, BlockPos pos, BlockState oldState, boolean isMoving) { - if (oldState.getBlock() != state.getBlock() && state.hasTileEntity() && state.get(DOUBLE) - && state.get(FACING).getAxisDirection() == AxisDirection.POSITIVE) { - TileEntity tileEntity = worldIn.getTileEntity(pos); + public void onPlace(BlockState state, World worldIn, BlockPos pos, BlockState oldState, boolean isMoving) { + if (oldState.getBlock() != state.getBlock() && state.hasTileEntity() && state.getValue(DOUBLE) + && state.getValue(FACING).getAxisDirection() == AxisDirection.POSITIVE) { + TileEntity tileEntity = worldIn.getBlockEntity(pos); if (!(tileEntity instanceof AdjustableCrateTileEntity)) return; @@ -57,13 +59,13 @@ public class AdjustableCrateBlock extends CrateBlock { } @Override - public ActionResultType onUse(BlockState state, World worldIn, BlockPos pos, PlayerEntity player, Hand handIn, + public ActionResultType use(BlockState state, World worldIn, BlockPos pos, PlayerEntity player, Hand handIn, BlockRayTraceResult hit) { - if (worldIn.isRemote) { + if (worldIn.isClientSide) { return ActionResultType.SUCCESS; } else { - TileEntity te = worldIn.getTileEntity(pos); + TileEntity te = worldIn.getBlockEntity(pos); if (te instanceof AdjustableCrateTileEntity) { AdjustableCrateTileEntity fte = (AdjustableCrateTileEntity) te; fte = fte.getMainCrate(); @@ -77,39 +79,39 @@ public class AdjustableCrateBlock extends CrateBlock { BlockState state = world.getBlockState(pos); if (!AllBlocks.ADJUSTABLE_CRATE.has(state)) return; - if (!state.get(DOUBLE)) + if (!state.getValue(DOUBLE)) return; - TileEntity te = world.getTileEntity(pos); + TileEntity te = world.getBlockEntity(pos); if (!(te instanceof AdjustableCrateTileEntity)) return; AdjustableCrateTileEntity crateTe = (AdjustableCrateTileEntity) te; crateTe.onSplit(); - world.setBlockState(pos, state.with(DOUBLE, false)); - world.setBlockState(crateTe.getOtherCrate().getPos(), state.with(DOUBLE, false)); + world.setBlockAndUpdate(pos, state.setValue(DOUBLE, false)); + world.setBlockAndUpdate(crateTe.getOtherCrate().getBlockPos(), state.setValue(DOUBLE, false)); } @Override - public void onReplaced(BlockState state, World worldIn, BlockPos pos, BlockState newState, boolean isMoving) { - if (!(worldIn.getTileEntity(pos) instanceof AdjustableCrateTileEntity)) + public void onRemove(BlockState state, World worldIn, BlockPos pos, BlockState newState, boolean isMoving) { + if (!(worldIn.getBlockEntity(pos) instanceof AdjustableCrateTileEntity)) return; if (state.hasTileEntity() && state.getBlock() != newState.getBlock()) { - AdjustableCrateTileEntity te = (AdjustableCrateTileEntity) worldIn.getTileEntity(pos); + AdjustableCrateTileEntity te = (AdjustableCrateTileEntity) worldIn.getBlockEntity(pos); if (!isMoving) te.onDestroyed(); - worldIn.removeTileEntity(pos); + worldIn.removeBlockEntity(pos); } } @Override - public boolean hasComparatorInputOverride(BlockState state) { + public boolean hasAnalogOutputSignal(BlockState state) { return true; } @Override - public int getComparatorInputOverride(BlockState blockState, World worldIn, BlockPos pos) { - TileEntity te = worldIn.getTileEntity(pos); + public int getAnalogOutputSignal(BlockState blockState, World worldIn, BlockPos pos) { + TileEntity te = worldIn.getBlockEntity(pos); if (te instanceof AdjustableCrateTileEntity) { AdjustableCrateTileEntity flexcrateTileEntity = ((AdjustableCrateTileEntity) te).getMainCrate(); return ItemHelper.calcRedstoneFromInventory(flexcrateTileEntity.inventory); diff --git a/src/main/java/com/simibubi/create/content/logistics/block/inventories/AdjustableCrateContainer.java b/src/main/java/com/simibubi/create/content/logistics/block/inventories/AdjustableCrateContainer.java index 20139c8d8..1df87b977 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/inventories/AdjustableCrateContainer.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/inventories/AdjustableCrateContainer.java @@ -22,12 +22,12 @@ public class AdjustableCrateContainer extends Container { public AdjustableCrateContainer(ContainerType type, int id, PlayerInventory inv, PacketBuffer extraData) { super(type, id); - ClientWorld world = Minecraft.getInstance().world; - TileEntity tileEntity = world.getTileEntity(extraData.readBlockPos()); + ClientWorld world = Minecraft.getInstance().level; + TileEntity tileEntity = world.getBlockEntity(extraData.readBlockPos()); this.playerInventory = inv; if (tileEntity instanceof AdjustableCrateTileEntity) { this.te = (AdjustableCrateTileEntity) tileEntity; - this.te.handleUpdateTag(te.getBlockState(), extraData.readCompoundTag()); + this.te.handleUpdateTag(te.getBlockState(), extraData.readNbt()); init(); } } @@ -66,28 +66,28 @@ public class AdjustableCrateContainer extends Container { this.addSlot(new Slot(playerInventory, hotbarSlot, xOffset + hotbarSlot * 18, yOffset + 58)); } - detectAndSendChanges(); + broadcastChanges(); } @Override - public ItemStack transferStackInSlot(PlayerEntity playerIn, int index) { + public ItemStack quickMoveStack(PlayerEntity playerIn, int index) { Slot clickedSlot = getSlot(index); - if (!clickedSlot.getHasStack()) + if (!clickedSlot.hasItem()) return ItemStack.EMPTY; - ItemStack stack = clickedSlot.getStack(); + ItemStack stack = clickedSlot.getItem(); int crateSize = doubleCrate ? 32 : 16; if (index < crateSize) { - mergeItemStack(stack, crateSize, inventorySlots.size(), false); + moveItemStackTo(stack, crateSize, slots.size(), false); te.inventory.onContentsChanged(index); } else - mergeItemStack(stack, 0, crateSize - 1, false); + moveItemStackTo(stack, 0, crateSize - 1, false); return ItemStack.EMPTY; } @Override - public boolean canInteractWith(PlayerEntity player) { + public boolean stillValid(PlayerEntity player) { return te != null && te.canPlayerUse(player); } diff --git a/src/main/java/com/simibubi/create/content/logistics/block/inventories/AdjustableCrateScreen.java b/src/main/java/com/simibubi/create/content/logistics/block/inventories/AdjustableCrateScreen.java index f977b7b61..b77d93a1b 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/inventories/AdjustableCrateScreen.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/inventories/AdjustableCrateScreen.java @@ -52,21 +52,21 @@ public class AdjustableCrateScreen extends AbstractSimiContainerScreen slot * 64) continue; - int slotsPerRow = (container.doubleCrate ? 8 : 4); + int slotsPerRow = (menu.doubleCrate ? 8 : 4); int slotX = x + 22 + (slot % slotsPerRow) * 18; int slotY = y + 19 + (slot / slotsPerRow) * 18; AllGuiTextures.ADJUSTABLE_CRATE_LOCKED_SLOT.draw(ms, this, slotX, slotY); @@ -112,26 +112,26 @@ public class AdjustableCrateScreen extends AbstractSimiContainerScreen= 0) lastModification++; if (lastModification >= 15) { lastModification = -1; - AllPackets.channel.sendToServer(new ConfigureFlexcratePacket(te.getPos(), allowedItems.getState())); + AllPackets.channel.sendToServer(new ConfigureFlexcratePacket(te.getBlockPos(), allowedItems.getState())); } - if (container.doubleCrate != te.isDoubleCrate()) - container.playerInventory.player.closeScreen(); + if (menu.doubleCrate != te.isDoubleCrate()) + menu.playerInventory.player.closeContainer(); } @Override diff --git a/src/main/java/com/simibubi/create/content/logistics/block/inventories/AdjustableCrateTileEntity.java b/src/main/java/com/simibubi/create/content/logistics/block/inventories/AdjustableCrateTileEntity.java index 0840fe8a4..9ec1fbf31 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/inventories/AdjustableCrateTileEntity.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/inventories/AdjustableCrateTileEntity.java @@ -48,7 +48,7 @@ public class AdjustableCrateTileEntity extends CrateTileEntity implements INamed @Override protected void onContentsChanged(int slot) { super.onContentsChanged(slot); - markDirty(); + setChanged(); itemCount = 0; for (int i = 0; i < getSlots(); i++) { @@ -78,7 +78,7 @@ public class AdjustableCrateTileEntity extends CrateTileEntity implements INamed public AdjustableCrateTileEntity getOtherCrate() { if (!AllBlocks.ADJUSTABLE_CRATE.has(getBlockState())) return null; - TileEntity tileEntity = world.getTileEntity(pos.offset(getFacing())); + TileEntity tileEntity = level.getBlockEntity(worldPosition.relative(getFacing())); if (tileEntity instanceof AdjustableCrateTileEntity) return (AdjustableCrateTileEntity) tileEntity; return null; @@ -139,7 +139,7 @@ public class AdjustableCrateTileEntity extends CrateTileEntity implements INamed } private void drop(int slot) { - InventoryHelper.spawnItemStack(world, pos.getX(), pos.getY(), pos.getZ(), inventory.getStackInSlot(slot)); + InventoryHelper.dropItemStack(level, worldPosition.getX(), worldPosition.getY(), worldPosition.getZ(), inventory.getStackInSlot(slot)); } @Override @@ -163,13 +163,13 @@ public class AdjustableCrateTileEntity extends CrateTileEntity implements INamed } public void sendToContainer(PacketBuffer buffer) { - buffer.writeBlockPos(getPos()); - buffer.writeCompoundTag(getUpdateTag()); + buffer.writeBlockPos(getBlockPos()); + buffer.writeNbt(getUpdateTag()); } @Override - public void remove() { - super.remove(); + public void setRemoved() { + super.setRemoved(); invHandler.invalidate(); } diff --git a/src/main/java/com/simibubi/create/content/logistics/block/inventories/CrateBlock.java b/src/main/java/com/simibubi/create/content/logistics/block/inventories/CrateBlock.java index 0cc52ac21..5b3e88f97 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/inventories/CrateBlock.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/inventories/CrateBlock.java @@ -19,14 +19,16 @@ import net.minecraft.world.IBlockReader; import net.minecraft.world.IWorld; import net.minecraft.world.World; +import net.minecraft.block.AbstractBlock.Properties; + public class CrateBlock extends ProperDirectionalBlock implements IWrenchable { public static final BooleanProperty DOUBLE = BooleanProperty.create("double"); public CrateBlock(Properties p_i48415_1_) { super(p_i48415_1_); - setDefaultState(getDefaultState().with(FACING, Direction.UP) - .with(DOUBLE, false)); + registerDefaultState(defaultBlockState().setValue(FACING, Direction.UP) + .setValue(DOUBLE, false)); } @Override @@ -35,56 +37,56 @@ public class CrateBlock extends ProperDirectionalBlock implements IWrenchable { } @Override - public boolean allowsMovement(BlockState state, IBlockReader reader, BlockPos pos, PathType type) { + public boolean isPathfindable(BlockState state, IBlockReader reader, BlockPos pos, PathType type) { return false; } @Override - public BlockState updatePostPlacement(BlockState stateIn, Direction facing, BlockState facingState, IWorld worldIn, + public BlockState updateShape(BlockState stateIn, Direction facing, BlockState facingState, IWorld worldIn, BlockPos currentPos, BlockPos facingPos) { - boolean isDouble = stateIn.get(DOUBLE); - Direction blockFacing = stateIn.get(FACING); - boolean isFacingOther = facingState.getBlock() == this && facingState.get(DOUBLE) - && facingState.get(FACING) == facing.getOpposite(); + boolean isDouble = stateIn.getValue(DOUBLE); + Direction blockFacing = stateIn.getValue(FACING); + boolean isFacingOther = facingState.getBlock() == this && facingState.getValue(DOUBLE) + && facingState.getValue(FACING) == facing.getOpposite(); if (!isDouble) { if (!isFacingOther) return stateIn; - return stateIn.with(DOUBLE, true) - .with(FACING, facing); + return stateIn.setValue(DOUBLE, true) + .setValue(FACING, facing); } if (facing != blockFacing) return stateIn; if (!isFacingOther) - return stateIn.with(DOUBLE, false); + return stateIn.setValue(DOUBLE, false); return stateIn; } @Override public BlockState getStateForPlacement(BlockItemUseContext context) { - BlockPos pos = context.getPos(); - World world = context.getWorld(); + BlockPos pos = context.getClickedPos(); + World world = context.getLevel(); if (context.getPlayer() == null || !context.getPlayer() - .isSneaking()) { + .isShiftKeyDown()) { for (Direction d : Iterate.directions) { - BlockState state = world.getBlockState(pos.offset(d)); - if (state.getBlock() == this && !state.get(DOUBLE)) - return getDefaultState().with(FACING, d) - .with(DOUBLE, true); + BlockState state = world.getBlockState(pos.relative(d)); + if (state.getBlock() == this && !state.getValue(DOUBLE)) + return defaultBlockState().setValue(FACING, d) + .setValue(DOUBLE, true); } } - Direction placedOnFace = context.getFace() + Direction placedOnFace = context.getClickedFace() .getOpposite(); - BlockState state = world.getBlockState(pos.offset(placedOnFace)); - if (state.getBlock() == this && !state.get(DOUBLE)) - return getDefaultState().with(FACING, placedOnFace) - .with(DOUBLE, true); - return getDefaultState(); + BlockState state = world.getBlockState(pos.relative(placedOnFace)); + if (state.getBlock() == this && !state.getValue(DOUBLE)) + return defaultBlockState().setValue(FACING, placedOnFace) + .setValue(DOUBLE, true); + return defaultBlockState(); } @Override @@ -93,8 +95,8 @@ public class CrateBlock extends ProperDirectionalBlock implements IWrenchable { } @Override - protected void fillStateContainer(Builder builder) { - super.fillStateContainer(builder.add(DOUBLE)); + protected void createBlockStateDefinition(Builder builder) { + super.createBlockStateDefinition(builder.add(DOUBLE)); } } diff --git a/src/main/java/com/simibubi/create/content/logistics/block/inventories/CrateTileEntity.java b/src/main/java/com/simibubi/create/content/logistics/block/inventories/CrateTileEntity.java index b4602f230..427afa31f 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/inventories/CrateTileEntity.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/inventories/CrateTileEntity.java @@ -19,11 +19,11 @@ public abstract class CrateTileEntity extends SmartTileEntity { public void addBehaviours(List behaviours) {} public boolean isDoubleCrate() { - return getBlockState().get(AdjustableCrateBlock.DOUBLE); + return getBlockState().getValue(AdjustableCrateBlock.DOUBLE); } public boolean isSecondaryCrate() { - if (!hasWorld()) + if (!hasLevel()) return false; if (!(getBlockState().getBlock() instanceof CrateBlock)) return false; @@ -31,7 +31,7 @@ public abstract class CrateTileEntity extends SmartTileEntity { } public Direction getFacing() { - return getBlockState().get(AdjustableCrateBlock.FACING); + return getBlockState().getValue(AdjustableCrateBlock.FACING); } } diff --git a/src/main/java/com/simibubi/create/content/logistics/block/inventories/CreativeCrateBlock.java b/src/main/java/com/simibubi/create/content/logistics/block/inventories/CreativeCrateBlock.java index f83ba35db..16f35efac 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/inventories/CreativeCrateBlock.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/inventories/CreativeCrateBlock.java @@ -9,6 +9,8 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.world.IBlockReader; import net.minecraft.world.World; +import net.minecraft.block.AbstractBlock.Properties; + public class CreativeCrateBlock extends CrateBlock implements ITE { public CreativeCrateBlock(Properties p_i48415_1_) { @@ -26,7 +28,7 @@ public class CreativeCrateBlock extends CrateBlock implements ITE, ICogWheel { public static final BooleanProperty CEILING = BooleanProperty.create("ceiling"); public ArmBlock(Properties properties) { super(properties); - setDefaultState(getDefaultState().with(CEILING, false)); + registerDefaultState(defaultBlockState().setValue(CEILING, false)); } @Override - protected void fillStateContainer(Builder p_206840_1_) { - super.fillStateContainer(p_206840_1_.add(CEILING)); + protected void createBlockStateDefinition(Builder p_206840_1_) { + super.createBlockStateDefinition(p_206840_1_.add(CEILING)); } @Override public BlockState getStateForPlacement(BlockItemUseContext ctx) { - return getDefaultState().with(CEILING, ctx.getFace() == Direction.DOWN); + return defaultBlockState().setValue(CEILING, ctx.getClickedFace() == Direction.DOWN); } @Override public VoxelShape getShape(BlockState state, IBlockReader p_220053_2_, BlockPos p_220053_3_, ISelectionContext p_220053_4_) { - return state.get(CEILING) ? AllShapes.MECHANICAL_ARM_CEILING : AllShapes.MECHANICAL_ARM; + return state.getValue(CEILING) ? AllShapes.MECHANICAL_ARM_CEILING : AllShapes.MECHANICAL_ARM; } @Override - public void onBlockAdded(BlockState state, World world, BlockPos pos, BlockState oldState, boolean isMoving) { - super.onBlockAdded(state, world, pos, oldState, isMoving); + public void onPlace(BlockState state, World world, BlockPos pos, BlockState oldState, boolean isMoving) { + super.onPlace(state, world, pos, oldState, isMoving); withTileEntityDo(world, pos, ArmTileEntity::redstoneUpdate); } @@ -82,32 +84,32 @@ public class ArmBlock extends KineticBlock implements ITE, ICogWh } @Override - public void onReplaced(BlockState p_196243_1_, World world, BlockPos pos, BlockState p_196243_4_, + public void onRemove(BlockState p_196243_1_, World world, BlockPos pos, BlockState p_196243_4_, boolean p_196243_5_) { if (p_196243_1_.hasTileEntity() && (p_196243_1_.getBlock() != p_196243_4_.getBlock() || !p_196243_4_.hasTileEntity())) { withTileEntityDo(world, pos, te -> { if (!te.heldItem.isEmpty()) - InventoryHelper.spawnItemStack(world, pos.getX(), pos.getY(), pos.getZ(), te.heldItem); + InventoryHelper.dropItemStack(world, pos.getX(), pos.getY(), pos.getZ(), te.heldItem); }); - world.removeTileEntity(pos); + world.removeBlockEntity(pos); } } @Override - public ActionResultType onUse(BlockState p_225533_1_, World world, BlockPos pos, PlayerEntity player, + public ActionResultType use(BlockState p_225533_1_, World world, BlockPos pos, PlayerEntity player, Hand p_225533_5_, BlockRayTraceResult p_225533_6_) { MutableBoolean success = new MutableBoolean(false); withTileEntityDo(world, pos, te -> { if (te.heldItem.isEmpty()) return; success.setTrue(); - if (world.isRemote) + if (world.isClientSide) return; player.inventory.placeItemBackInInventory(world, te.heldItem); te.heldItem = ItemStack.EMPTY; te.phase = Phase.SEARCH_INPUTS; - te.markDirty(); + te.setChanged(); te.sendData(); }); 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 3f0f4b12b..9bc1d69bd 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 @@ -62,7 +62,7 @@ public class ArmInstance extends SingleRotatingInstance implements IDynamicInsta clawGrips = Lists.newArrayList(clawGrip1, clawGrip2); models = Lists.newArrayList(base, lowerBody, upperBody, head, claw, clawGrip1, clawGrip2); arm = tile; - ceiling = blockState.get(ArmBlock.CEILING); + ceiling = blockState.getValue(ArmBlock.CEILING); animateArm(false); } @@ -82,10 +82,10 @@ public class ArmInstance extends SingleRotatingInstance implements IDynamicInsta float upperArmAngleNow = this.arm.upperArmAngle.get(pt); float headAngleNow = this.arm.headAngle.get(pt); - boolean settled = MathHelper.epsilonEquals(baseAngle, baseAngleNow) - && MathHelper.epsilonEquals(lowerArmAngle, lowerArmAngleNow) - && MathHelper.epsilonEquals(upperArmAngle, upperArmAngleNow) - && MathHelper.epsilonEquals(headAngle, headAngleNow); + boolean settled = MathHelper.equal(baseAngle, baseAngleNow) + && MathHelper.equal(lowerArmAngle, lowerArmAngleNow) + && MathHelper.equal(upperArmAngle, upperArmAngleNow) + && MathHelper.equal(headAngle, headAngleNow); this.baseAngle = baseAngleNow; this.lowerArmAngle = lowerArmAngleNow; @@ -107,7 +107,7 @@ public class ArmInstance extends SingleRotatingInstance implements IDynamicInsta int color; if (rave) { - float renderTick = AnimationTickHolder.getRenderTime(this.arm.getWorld()) + (tile.hashCode() % 64); + float renderTick = AnimationTickHolder.getRenderTime(this.arm.getLevel()) + (tile.hashCode() % 64); baseAngle = (renderTick * 10) % 360; lowerArmAngle = MathHelper.lerp((MathHelper.sin(renderTick / 4) + 1) / 2, -45, 15); upperArmAngle = MathHelper.lerp((MathHelper.sin(renderTick / 8) + 1) / 4, -45, 95); @@ -151,15 +151,15 @@ public class ArmInstance extends SingleRotatingInstance implements IDynamicInsta .getItemRenderer(); boolean hasItem = !item.isEmpty(); boolean isBlockItem = hasItem && (item.getItem() instanceof BlockItem) - && itemRenderer.getItemModelWithOverrides(item, Minecraft.getInstance().world, null) + && itemRenderer.getModel(item, Minecraft.getInstance().level, null) .isGui3d(); for (int index : Iterate.zeroAndOne) { - msLocal.push(); + msLocal.pushPose(); int flip = index * 2 - 1; ArmRenderer.transformClawHalf(msr, hasItem, isBlockItem, flip); clawGrips.get(index).setTransform(msLocal); - msLocal.pop(); + msLocal.popPose(); } } 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 f6b40d285..f295f8260 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 @@ -151,7 +151,7 @@ public abstract class ArmInteractionPoint { @Nullable protected IItemHandler getHandler(World world) { if (!cachedHandler.isPresent()) { - TileEntity te = world.getTileEntity(pos); + TileEntity te = world.getBlockEntity(pos); if (te == null) return null; cachedHandler = te.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, Direction.UP); @@ -212,7 +212,7 @@ public abstract class ArmInteractionPoint { protected static ArmInteractionPoint deserialize(IBlockReader world, BlockPos anchor, CompoundNBT nbt) { BlockPos pos = NBTUtil.readBlockPos(nbt.getCompound("Pos")); - ArmInteractionPoint interactionPoint = createAt(world, pos.add(anchor)); + ArmInteractionPoint interactionPoint = createAt(world, pos.offset(anchor)); if (interactionPoint == null) return null; interactionPoint.mode = NBTHelper.readEnum(nbt, "Mode", Mode.class); @@ -229,7 +229,7 @@ public abstract class ArmInteractionPoint { @Override protected Vector3d getInteractionPositionVector() { - return Vector3d.of(pos).add(.5f, 1, .5f); + return Vector3d.atLowerCornerOf(pos).add(.5f, 1, .5f); } } @@ -238,7 +238,7 @@ public abstract class ArmInteractionPoint { @Override protected Vector3d getInteractionPositionVector() { - return Vector3d.of(pos).add(.5f, 14 / 16f, .5f); + return Vector3d.atLowerCornerOf(pos).add(.5f, 14 / 16f, .5f); } @Override @@ -252,8 +252,8 @@ public abstract class ArmInteractionPoint { @Override protected boolean isValid(IBlockReader reader, BlockPos pos, BlockState state) { - return AllBlocks.MECHANICAL_SAW.has(state) && state.get(SawBlock.FACING) == Direction.UP - && ((KineticTileEntity) reader.getTileEntity(pos)).getSpeed() != 0; + return AllBlocks.MECHANICAL_SAW.has(state) && state.getValue(SawBlock.FACING) == Direction.UP + && ((KineticTileEntity) reader.getBlockEntity(pos)).getSpeed() != 0; } } @@ -280,7 +280,7 @@ public abstract class ArmInteractionPoint { @Override protected Vector3d getInteractionPositionVector() { - return Vector3d.of(pos).add(.5f, 13 / 16f, .5f); + return Vector3d.atLowerCornerOf(pos).add(.5f, 13 / 16f, .5f); } @Override @@ -292,7 +292,7 @@ public abstract class ArmInteractionPoint { @Override protected IItemHandler getHandler(World world) { return new InvWrapper( - ((ComposterBlock) Blocks.COMPOSTER).createInventory(world.getBlockState(pos), world, pos)); + ((ComposterBlock) Blocks.COMPOSTER).getContainer(world.getBlockState(pos), world, pos)); } } @@ -305,14 +305,14 @@ public abstract class ArmInteractionPoint { @Override protected Direction getInteractionDirection() { - return state.get(DeployerBlock.FACING) + return state.getValue(DeployerBlock.FACING) .getOpposite(); } @Override protected Vector3d getInteractionPositionVector() { return super.getInteractionPositionVector() - .add(Vector3d.of(getInteractionDirection().getDirectionVec()).scale(.65f)); + .add(Vector3d.atLowerCornerOf(getInteractionDirection().getNormal()).scale(.65f)); } } @@ -333,12 +333,12 @@ public abstract class ArmInteractionPoint { protected ItemStack insert(World world, ItemStack stack, boolean simulate) { ItemStack input = stack.copy(); if (!BlazeBurnerBlock.tryInsert(state, world, pos, input, false, true) - .getResult() + .getObject() .isEmpty()) { return stack; } ActionResult res = BlazeBurnerBlock.tryInsert(state, world, pos, input, false, simulate); - return res.getType() == ActionResultType.SUCCESS + return res.getResult() == ActionResultType.SUCCESS ? ItemHandlerHelper.copyStackWithSize(stack, stack.getCount() - 1) : stack; } @@ -357,13 +357,13 @@ public abstract class ArmInteractionPoint { @Override protected Direction getInteractionDirection() { - return state.get(MechanicalCrafterBlock.HORIZONTAL_FACING) + return state.getValue(MechanicalCrafterBlock.HORIZONTAL_FACING) .getOpposite(); } @Override protected ItemStack extract(World world, int slot, int amount, boolean simulate) { - TileEntity te = world.getTileEntity(pos); + TileEntity te = world.getBlockEntity(pos); if (!(te instanceof MechanicalCrafterTileEntity)) return ItemStack.EMPTY; MechanicalCrafterTileEntity crafter = (MechanicalCrafterTileEntity) te; @@ -377,7 +377,7 @@ public abstract class ArmInteractionPoint { @Override protected Vector3d getInteractionPositionVector() { return super.getInteractionPositionVector() - .add(Vector3d.of(getInteractionDirection().getDirectionVec()).scale(.5f)); + .add(Vector3d.atLowerCornerOf(getInteractionDirection().getNormal()).scale(.5f)); } } @@ -405,7 +405,7 @@ public abstract class ArmInteractionPoint { @Override protected ItemStack insert(World world, ItemStack stack, boolean simulate) { - TileEntity tileEntity = world.getTileEntity(pos); + TileEntity tileEntity = world.getBlockEntity(pos); if (!(tileEntity instanceof JukeboxTileEntity)) return stack; if (!(state.getBlock() instanceof JukeboxBlock)) @@ -419,9 +419,9 @@ public abstract class ArmInteractionPoint { return stack; ItemStack remainder = stack.copy(); ItemStack toInsert = remainder.split(1); - if (!simulate && !world.isRemote) { - jukeboxBlock.insertRecord(world, pos, state, toInsert); - world.playEvent(null, 1010, pos, Item.getIdFromItem(toInsert.getItem())); + 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; @@ -429,7 +429,7 @@ public abstract class ArmInteractionPoint { @Override protected ItemStack extract(World world, int slot, int amount, boolean simulate) { - TileEntity tileEntity = world.getTileEntity(pos); + TileEntity tileEntity = world.getBlockEntity(pos); if (!(tileEntity instanceof JukeboxTileEntity)) return ItemStack.EMPTY; if (!(state.getBlock() instanceof JukeboxBlock)) @@ -438,10 +438,10 @@ public abstract class ArmInteractionPoint { ItemStack itemstack = jukeboxTE.getRecord(); if (itemstack.isEmpty()) return ItemStack.EMPTY; - if (!simulate && !world.isRemote) { - world.playEvent(1010, pos, 0); - jukeboxTE.clear(); - world.setBlockState(pos, state.with(JukeboxBlock.HAS_RECORD, false), 2); + if (!simulate && !world.isClientSide) { + world.levelEvent(1010, pos, 0); + jukeboxTE.clearContent(); + world.setBlock(pos, state.setValue(JukeboxBlock.HAS_RECORD, false), 2); } return itemstack; } @@ -452,7 +452,7 @@ public abstract class ArmInteractionPoint { @Override protected boolean isValid(IBlockReader reader, BlockPos pos, BlockState state) { - return AllBlocks.BELT.has(state) && !(reader.getBlockState(pos.up()) + return AllBlocks.BELT.has(state) && !(reader.getBlockState(pos.above()) .getBlock() instanceof BeltTunnelBlock); } @@ -491,8 +491,8 @@ public abstract class ArmInteractionPoint { @Override protected Vector3d getInteractionPositionVector() { return VecHelper.getCenterOf(pos) - .add(Vector3d.of(FunnelBlock.getFunnelFacing(state) - .getDirectionVec()).scale(-.15f)); + .add(Vector3d.atLowerCornerOf(FunnelBlock.getFunnelFacing(state) + .getNormal()).scale(-.15f)); } @Override @@ -516,7 +516,7 @@ public abstract class ArmInteractionPoint { FilteringBehaviour filtering = TileEntityBehaviour.get(world, pos, FilteringBehaviour.TYPE); InvManipulationBehaviour inserter = TileEntityBehaviour.get(world, pos, InvManipulationBehaviour.TYPE); BlockState state = world.getBlockState(pos); - if (state.method_28500(BlockStateProperties.POWERED).orElse(false)) + if (state.getOptionalValue(BlockStateProperties.POWERED).orElse(false)) return stack; if (inserter == null) return stack; @@ -526,7 +526,7 @@ public abstract class ArmInteractionPoint { inserter.simulate(); ItemStack insert = inserter.insert(stack); if (!simulate && insert.getCount() != stack.getCount()) { - TileEntity tileEntity = world.getTileEntity(pos); + TileEntity tileEntity = world.getBlockEntity(pos); if (tileEntity instanceof FunnelTileEntity) { FunnelTileEntity funnelTileEntity = (FunnelTileEntity) tileEntity; funnelTileEntity.onTransfer(stack); @@ -540,8 +540,8 @@ public abstract class ArmInteractionPoint { @Override protected boolean isValid(IBlockReader reader, BlockPos pos, BlockState state) { return state.getBlock() instanceof AbstractFunnelBlock - && !(state.contains(FunnelBlock.EXTRACTING) && state.get(FunnelBlock.EXTRACTING)) - && !(state.contains(BeltFunnelBlock.SHAPE) && state.get(BeltFunnelBlock.SHAPE) == Shape.PUSHING); + && !(state.hasProperty(FunnelBlock.EXTRACTING) && state.getValue(FunnelBlock.EXTRACTING)) + && !(state.hasProperty(BeltFunnelBlock.SHAPE) && state.getValue(BeltFunnelBlock.SHAPE) == Shape.PUSHING); } @Override 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 ff7cbdcc1..7e7142efc 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 @@ -45,7 +45,7 @@ public class ArmInteractionPointHandler { return; BlockPos pos = event.getPos(); World world = event.getWorld(); - if (!world.isRemote) + if (!world.isClientSide) return; PlayerEntity player = event.getPlayer(); if (player != null && player.isSpectator()) @@ -66,8 +66,8 @@ public class ArmInteractionPointHandler { String key = selected.mode == Mode.DEPOSIT ? "mechanical_arm.deposit_to" : "mechanical_arm.extract_from"; TextFormatting colour = selected.mode == Mode.DEPOSIT ? TextFormatting.GOLD : TextFormatting.AQUA; TranslationTextComponent translatedBlock = new TranslationTextComponent(selected.state.getBlock() - .getTranslationKey()); - player.sendStatusMessage((Lang.translate(key, translatedBlock.formatted(TextFormatting.WHITE, colour)).formatted(colour)), + .getDescriptionId()); + player.displayClientMessage((Lang.translate(key, translatedBlock.withStyle(TextFormatting.WHITE, colour)).withStyle(colour)), true); } @@ -79,7 +79,7 @@ public class ArmInteractionPointHandler { public static void leftClickingBlocksDeselectsThem(PlayerInteractEvent.LeftClickBlock event) { if (currentItem == null) return; - if (!event.getWorld().isRemote) + if (!event.getWorld().isClientSide) return; BlockPos pos = event.getPos(); if (remove(pos) != null) { @@ -95,7 +95,7 @@ public class ArmInteractionPointHandler { int removed = 0; for (Iterator iterator = currentSelection.iterator(); iterator.hasNext();) { ArmInteractionPoint point = iterator.next(); - if (point.pos.withinDistance(pos, ArmTileEntity.getRange())) + if (point.pos.closerThan(pos, ArmTileEntity.getRange())) continue; iterator.remove(); removed++; @@ -103,8 +103,8 @@ public class ArmInteractionPointHandler { ClientPlayerEntity player = Minecraft.getInstance().player; if (removed > 0) { - player.sendStatusMessage(Lang.createTranslationTextComponent("mechanical_arm.points_outside_range", removed) - .formatted(TextFormatting.RED), true); + player.displayClientMessage(Lang.createTranslationTextComponent("mechanical_arm.points_outside_range", removed) + .withStyle(TextFormatting.RED), true); } else { int inputs = 0; int outputs = 0; @@ -115,8 +115,8 @@ public class ArmInteractionPointHandler { inputs++; } if (inputs + outputs > 0) - player.sendStatusMessage(Lang.createTranslationTextComponent("mechanical_arm.summary", inputs, outputs) - .formatted(TextFormatting.WHITE), true); + player.displayClientMessage(Lang.createTranslationTextComponent("mechanical_arm.summary", inputs, outputs) + .withStyle(TextFormatting.WHITE), true); } AllPackets.channel.sendToServer(new ArmPlacementPacket(currentSelection, pos)); @@ -130,7 +130,7 @@ public class ArmInteractionPointHandler { if (player == null) return; - ItemStack heldItemMainhand = player.getHeldItemMainhand(); + ItemStack heldItemMainhand = player.getMainHandItem(); if (!AllBlocks.MECHANICAL_ARM.isIn(heldItemMainhand)) { currentItem = null; } else { @@ -150,27 +150,27 @@ public class ArmInteractionPointHandler { return; } - RayTraceResult objectMouseOver = Minecraft.getInstance().objectMouseOver; + RayTraceResult objectMouseOver = Minecraft.getInstance().hitResult; if (!(objectMouseOver instanceof BlockRayTraceResult)) { return; } BlockRayTraceResult result = (BlockRayTraceResult) objectMouseOver; - BlockPos pos = result.getPos(); + BlockPos pos = result.getBlockPos(); - TileEntity te = Minecraft.getInstance().world.getTileEntity(pos); + TileEntity te = Minecraft.getInstance().level.getBlockEntity(pos); if (!(te instanceof ArmTileEntity)) { lastBlockPos = -1; currentSelection.clear(); return; } - if (lastBlockPos == -1 || lastBlockPos != pos.toLong()) { + if (lastBlockPos == -1 || lastBlockPos != pos.asLong()) { currentSelection.clear(); ArmTileEntity arm = (ArmTileEntity) te; arm.inputs.forEach(ArmInteractionPointHandler::put); arm.outputs.forEach(ArmInteractionPointHandler::put); - lastBlockPos = pos.toLong(); + lastBlockPos = pos.asLong(); } if (lastBlockPos != -1) { @@ -179,7 +179,7 @@ public class ArmInteractionPointHandler { } private static void drawOutlines(Collection selection) { - World world = Minecraft.getInstance().world; + World world = Minecraft.getInstance().level; for (Iterator iterator = selection.iterator(); iterator.hasNext();) { ArmInteractionPoint point = iterator.next(); BlockPos pos = point.pos; @@ -195,8 +195,8 @@ public class ArmInteractionPointHandler { continue; int color = point.mode == Mode.DEPOSIT ? 0xffcb74 : 0x4f8a8b; - CreateClient.OUTLINER.showAABB(point, shape.getBoundingBox() - .offset(pos)) + CreateClient.OUTLINER.showAABB(point, shape.bounds() + .move(pos)) .colored(color) .lineWidth(1 / 16f); } diff --git a/src/main/java/com/simibubi/create/content/logistics/block/mechanicalArm/ArmItem.java b/src/main/java/com/simibubi/create/content/logistics/block/mechanicalArm/ArmItem.java index c032ed3dc..ed0f82dc0 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/mechanicalArm/ArmItem.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/mechanicalArm/ArmItem.java @@ -13,6 +13,8 @@ import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.fml.DistExecutor; import net.minecraftforge.fml.common.Mod.EventBusSubscriber; +import net.minecraft.item.Item.Properties; + @EventBusSubscriber public class ArmItem extends BlockItem { @@ -21,24 +23,24 @@ public class ArmItem extends BlockItem { } @Override - public ActionResultType onItemUse(ItemUseContext ctx) { - World world = ctx.getWorld(); - BlockPos pos = ctx.getPos(); + public ActionResultType useOn(ItemUseContext ctx) { + World world = ctx.getLevel(); + BlockPos pos = ctx.getClickedPos(); if (ArmInteractionPoint.isInteractable(world, pos, world.getBlockState(pos))) return ActionResultType.SUCCESS; - return super.onItemUse(ctx); + return super.useOn(ctx); } @Override - protected boolean onBlockPlaced(BlockPos pos, World world, PlayerEntity p_195943_3_, ItemStack p_195943_4_, + protected boolean updateCustomBlockEntityTag(BlockPos pos, World world, PlayerEntity p_195943_3_, ItemStack p_195943_4_, BlockState p_195943_5_) { - if (world.isRemote) + if (world.isClientSide) DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> ArmInteractionPointHandler.flushSettings(pos)); - return super.onBlockPlaced(pos, world, p_195943_3_, p_195943_4_, p_195943_5_); + return super.updateCustomBlockEntityTag(pos, world, p_195943_3_, p_195943_4_, p_195943_5_); } @Override - public boolean canPlayerBreakBlockWhileHolding(BlockState state, World world, BlockPos pos, + public boolean canAttackBlock(BlockState state, World world, BlockPos pos, PlayerEntity p_195938_4_) { return !ArmInteractionPoint.isInteractable(world, pos, state); } diff --git a/src/main/java/com/simibubi/create/content/logistics/block/mechanicalArm/ArmPlacementPacket.java b/src/main/java/com/simibubi/create/content/logistics/block/mechanicalArm/ArmPlacementPacket.java index 5ef6187a7..df74cd272 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/mechanicalArm/ArmPlacementPacket.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/mechanicalArm/ArmPlacementPacket.java @@ -27,7 +27,7 @@ public class ArmPlacementPacket extends SimplePacketBase { } public ArmPlacementPacket(PacketBuffer buffer) { - CompoundNBT nbt = buffer.readCompoundTag(); + CompoundNBT nbt = buffer.readNbt(); receivedTag = nbt.getList("Points", NBT.TAG_COMPOUND); pos = buffer.readBlockPos(); } @@ -40,7 +40,7 @@ public class ArmPlacementPacket extends SimplePacketBase { .map(aip -> aip.serialize(pos)) .forEach(pointsNBT::add); nbt.put("Points", pointsNBT); - buffer.writeCompoundTag(nbt); + buffer.writeNbt(nbt); buffer.writeBlockPos(pos); } @@ -52,10 +52,10 @@ public class ArmPlacementPacket extends SimplePacketBase { .getSender(); if (player == null) return; - World world = player.world; - if (world == null || !world.isBlockPresent(pos)) + World world = player.level; + if (world == null || !world.isLoaded(pos)) return; - TileEntity tileEntity = world.getTileEntity(pos); + TileEntity tileEntity = world.getBlockEntity(pos); if (!(tileEntity instanceof ArmTileEntity)) return; diff --git a/src/main/java/com/simibubi/create/content/logistics/block/mechanicalArm/ArmRenderer.java b/src/main/java/com/simibubi/create/content/logistics/block/mechanicalArm/ArmRenderer.java index 3955b833c..0b3fc6077 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/mechanicalArm/ArmRenderer.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/mechanicalArm/ArmRenderer.java @@ -32,7 +32,7 @@ public class ArmRenderer extends KineticTileEntityRenderer { } @Override - public boolean isGlobalRenderer(KineticTileEntity te) { + public boolean shouldRenderOffScreen(KineticTileEntity te) { return true; } @@ -44,7 +44,7 @@ public class ArmRenderer extends KineticTileEntityRenderer { ArmTileEntity arm = (ArmTileEntity) te; ItemStack item = arm.heldItem; boolean hasItem = !item.isEmpty(); - boolean usingFlywheel = Backend.getInstance().canUseInstancing(te.getWorld()); + boolean usingFlywheel = Backend.getInstance().canUseInstancing(te.getLevel()); if (usingFlywheel && !hasItem) return; @@ -52,10 +52,10 @@ public class ArmRenderer extends KineticTileEntityRenderer { .getItemRenderer(); boolean isBlockItem = hasItem && (item.getItem() instanceof BlockItem) - && itemRenderer.getItemModelWithOverrides(item, Minecraft.getInstance().world, null) + && itemRenderer.getModel(item, Minecraft.getInstance().level, null) .isGui3d(); - IVertexBuilder builder = buffer.getBuffer(RenderType.getSolid()); + IVertexBuilder builder = buffer.getBuffer(RenderType.solid()); BlockState blockState = te.getBlockState(); MatrixStack msLocal = new MatrixStack(); @@ -69,7 +69,7 @@ public class ArmRenderer extends KineticTileEntityRenderer { boolean rave = arm.phase == Phase.DANCING && te.getSpeed() != 0; if (rave) { - float renderTick = AnimationTickHolder.getRenderTime(te.getWorld()) + (te.hashCode() % 64); + float renderTick = AnimationTickHolder.getRenderTime(te.getLevel()) + (te.hashCode() % 64); baseAngle = (renderTick * 10) % 360; lowerArmAngle = MathHelper.lerp((MathHelper.sin(renderTick / 4) + 1) / 2, -45, 15); upperArmAngle = MathHelper.lerp((MathHelper.sin(renderTick / 8) + 1) / 4, -45, 95); @@ -85,7 +85,7 @@ public class ArmRenderer extends KineticTileEntityRenderer { msr.centre(); - if (blockState.get(ArmBlock.CEILING)) + if (blockState.getValue(ArmBlock.CEILING)) msr.rotateX(180); if (usingFlywheel) @@ -94,17 +94,17 @@ public class ArmRenderer extends KineticTileEntityRenderer { renderArm(builder, ms, msLocal, msr, blockState, color, baseAngle, lowerArmAngle, upperArmAngle, headAngle, hasItem, isBlockItem, light); if (hasItem) { - ms.push(); + ms.pushPose(); float itemScale = isBlockItem ? .5f : .625f; msr.rotateX(90); msLocal.translate(0, -4 / 16f, 0); msLocal.scale(itemScale, itemScale, itemScale); - ms.peek().getModel().multiply(msLocal.peek().getModel()); + ms.last().pose().multiply(msLocal.last().pose()); itemRenderer - .renderItem(item, TransformType.FIXED, light, overlay, ms, buffer); - ms.pop(); + .renderStatic(item, TransformType.FIXED, light, overlay, ms, buffer); + ms.popPose(); } } @@ -140,10 +140,10 @@ public class ArmRenderer extends KineticTileEntityRenderer { .renderInto(ms, builder); for (int flip : Iterate.positiveAndNegative) { - msLocal.push(); + msLocal.pushPose(); transformClawHalf(msr, hasItem, isBlockItem, flip); clawGrip.light(light).transform(msLocal).renderInto(ms, builder); - msLocal.pop(); + msLocal.popPose(); } } 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 6a9fbde49..8c374085a 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 @@ -118,11 +118,11 @@ public class ArmTileEntity extends KineticTileEntity implements ITransformableTE if (phase == Phase.MOVE_TO_INPUT) { ArmInteractionPoint point = getTargetedInteractionPoint(); if (point != null) - point.keepAlive(world); + point.keepAlive(level); } return; } - if (world.isRemote) + if (level.isClientSide) return; if (phase == Phase.MOVE_TO_INPUT) @@ -140,7 +140,7 @@ public class ArmTileEntity extends KineticTileEntity implements ITransformableTE public void lazyTick() { super.lazyTick(); - if (world.isRemote) + if (level.isClientSide) return; if (chasedPointProgress < .5f) return; @@ -154,7 +154,7 @@ public class ArmTileEntity extends KineticTileEntity implements ITransformableTE boolean hasMusic = checkForMusicAmong(inputs) || checkForMusicAmong(outputs); if (hasMusic != (phase == Phase.DANCING)) { phase = hasMusic ? Phase.DANCING : Phase.SEARCH_INPUTS; - markDirty(); + setChanged(); sendData(); } } @@ -162,15 +162,15 @@ public class ArmTileEntity extends KineticTileEntity implements ITransformableTE @Override @OnlyIn(Dist.CLIENT) public AxisAlignedBB makeRenderBoundingBox() { - return super.makeRenderBoundingBox().grow(3); + return super.makeRenderBoundingBox().inflate(3); } private boolean checkForMusicAmong(List list) { for (ArmInteractionPoint armInteractionPoint : list) { if (!(armInteractionPoint instanceof Jukebox)) continue; - BlockState state = world.getBlockState(armInteractionPoint.pos); - if (state.method_28500(JukeboxBlock.HAS_RECORD).orElse(false)) + BlockState state = level.getBlockState(armInteractionPoint.pos); + if (state.getOptionalValue(JukeboxBlock.HAS_RECORD).orElse(false)) return true; } return false; @@ -181,13 +181,13 @@ public class ArmTileEntity extends KineticTileEntity implements ITransformableTE chasedPointProgress += Math.min(256, Math.abs(getSpeed())) / 1024f; if (chasedPointProgress > 1) chasedPointProgress = 1; - if (!world.isRemote) + if (!level.isClientSide) return !targetReachedPreviously && chasedPointProgress >= 1; ArmInteractionPoint targetedInteractionPoint = getTargetedInteractionPoint(); ArmAngleTarget previousTarget = this.previousTarget; ArmAngleTarget target = targetedInteractionPoint == null ? ArmAngleTarget.NO_TARGET - : targetedInteractionPoint.getTargetAngles(pos, isOnCeiling()); + : targetedInteractionPoint.getTargetAngles(worldPosition, isOnCeiling()); baseAngle.set(AngleHelper.angleLerp(chasedPointProgress, previousBaseAngle, target == ArmAngleTarget.NO_TARGET ? previousBaseAngle : target.baseAngle)); @@ -208,7 +208,7 @@ public class ArmTileEntity extends KineticTileEntity implements ITransformableTE protected boolean isOnCeiling() { BlockState state = getBlockState(); - return hasWorld() && state.method_28500(ArmBlock.CEILING).orElse(false); + return hasLevel() && state.getOptionalValue(ArmBlock.CEILING).orElse(false); } @Nullable @@ -239,9 +239,9 @@ public class ArmTileEntity extends KineticTileEntity implements ITransformableTE InteractionPoints: for (int i = startIndex; i < scanRange; i++) { ArmInteractionPoint armInteractionPoint = inputs.get(i); - if (!armInteractionPoint.isStillValid(world)) + if (!armInteractionPoint.isStillValid(level)) continue; - for (int j = 0; j < armInteractionPoint.getSlotCount(world); j++) { + for (int j = 0; j < armInteractionPoint.getSlotCount(level); j++) { if (getDistributableAmount(armInteractionPoint, j) == 0) continue; @@ -277,10 +277,10 @@ public class ArmTileEntity extends KineticTileEntity implements ITransformableTE for (int i = startIndex; i < scanRange; i++) { ArmInteractionPoint armInteractionPoint = outputs.get(i); - if (!armInteractionPoint.isStillValid(world)) + if (!armInteractionPoint.isStillValid(level)) continue; - ItemStack remainder = armInteractionPoint.insert(world, held, true); + ItemStack remainder = armInteractionPoint.insert(level, held, true); if (remainder.equals(heldItem, false)) continue; @@ -310,11 +310,11 @@ public class ArmTileEntity extends KineticTileEntity implements ITransformableTE else lastOutputIndex = index; sendData(); - markDirty(); + setChanged(); } protected int getDistributableAmount(ArmInteractionPoint armInteractionPoint, int i) { - ItemStack stack = armInteractionPoint.extract(world, i, true); + ItemStack stack = armInteractionPoint.extract(level, i, true); ItemStack remainder = simulateInsertion(stack); return stack.getCount() - remainder.getCount(); } @@ -323,37 +323,37 @@ public class ArmTileEntity extends KineticTileEntity implements ITransformableTE ArmInteractionPoint armInteractionPoint = getTargetedInteractionPoint(); if (armInteractionPoint != null) { ItemStack toInsert = heldItem.copy(); - ItemStack remainder = armInteractionPoint.insert(world, toInsert, false); + ItemStack remainder = armInteractionPoint.insert(level, toInsert, false); heldItem = remainder; } phase = heldItem.isEmpty() ? Phase.SEARCH_INPUTS : Phase.SEARCH_OUTPUTS; chasedPointProgress = 0; chasedPointIndex = -1; sendData(); - markDirty(); + setChanged(); - if (!world.isRemote) - AllTriggers.triggerForNearbyPlayers(AllTriggers.MECHANICAL_ARM, world, pos, 10); + if (!level.isClientSide) + AllTriggers.triggerForNearbyPlayers(AllTriggers.MECHANICAL_ARM, level, worldPosition, 10); } protected void collectItem() { ArmInteractionPoint armInteractionPoint = getTargetedInteractionPoint(); if (armInteractionPoint != null) - for (int i = 0; i < armInteractionPoint.getSlotCount(world); i++) { + for (int i = 0; i < armInteractionPoint.getSlotCount(level); i++) { int amountExtracted = getDistributableAmount(armInteractionPoint, i); if (amountExtracted == 0) continue; ItemStack prevHeld = heldItem; - heldItem = armInteractionPoint.extract(world, i, amountExtracted, false); + heldItem = armInteractionPoint.extract(level, i, amountExtracted, false); phase = Phase.SEARCH_OUTPUTS; chasedPointProgress = 0; chasedPointIndex = -1; sendData(); - markDirty(); + setChanged(); - if (!prevHeld.isItemEqual(heldItem)) - world.playSound(null, pos, SoundEvents.ENTITY_ITEM_PICKUP, SoundCategory.BLOCKS, .125f, + if (!prevHeld.sameItem(heldItem)) + level.playSound(null, worldPosition, SoundEvents.ITEM_PICKUP, SoundCategory.BLOCKS, .125f, .5f + Create.RANDOM.nextFloat() * .25f); return; } @@ -362,12 +362,12 @@ public class ArmTileEntity extends KineticTileEntity implements ITransformableTE chasedPointProgress = 0; chasedPointIndex = -1; sendData(); - markDirty(); + setChanged(); } private ItemStack simulateInsertion(ItemStack stack) { for (ArmInteractionPoint armInteractionPoint : outputs) { - stack = armInteractionPoint.insert(world, stack, true); + stack = armInteractionPoint.insert(level, stack, true); if (stack.isEmpty()) break; } @@ -375,9 +375,9 @@ public class ArmTileEntity extends KineticTileEntity implements ITransformableTE } public void redstoneUpdate() { - if (world.isRemote) + if (level.isClientSide) return; - boolean blockPowered = world.isBlockPowered(pos); + boolean blockPowered = level.hasNeighborSignal(worldPosition); if (blockPowered == redstoneLocked) return; redstoneLocked = blockPowered; @@ -396,20 +396,20 @@ public class ArmTileEntity extends KineticTileEntity implements ITransformableTE } sendData(); - markDirty(); + setChanged(); } protected void initInteractionPoints() { if (!updateInteractionPoints || interactionPointTag == null) return; - if (!world.isAreaLoaded(pos, getRange() + 1)) + if (!level.isAreaLoaded(worldPosition, getRange() + 1)) return; inputs.clear(); outputs.clear(); boolean hasBlazeBurner = false; for (INBT inbt : interactionPointTag) { - ArmInteractionPoint point = ArmInteractionPoint.deserialize(world, pos, (CompoundNBT) inbt); + ArmInteractionPoint point = ArmInteractionPoint.deserialize(level, worldPosition, (CompoundNBT) inbt); if (point == null) continue; if (point.mode == Mode.DEPOSIT) @@ -419,16 +419,16 @@ public class ArmTileEntity extends KineticTileEntity implements ITransformableTE hasBlazeBurner |= point instanceof ArmInteractionPoint.BlazeBurner; } - if (!world.isRemote) { + if (!level.isClientSide) { if (outputs.size() >= 10) - AllTriggers.triggerForNearbyPlayers(AllTriggers.ARM_MANY_TARGETS, world, pos, 5); + AllTriggers.triggerForNearbyPlayers(AllTriggers.ARM_MANY_TARGETS, level, worldPosition, 5); if (hasBlazeBurner) - AllTriggers.triggerForNearbyPlayers(AllTriggers.ARM_BLAZE_BURNER, world, pos, 5); + AllTriggers.triggerForNearbyPlayers(AllTriggers.ARM_BLAZE_BURNER, level, worldPosition, 5); } updateInteractionPoints = false; sendData(); - markDirty(); + setChanged(); } public void writeInteractionPoints(CompoundNBT compound) { @@ -437,10 +437,10 @@ public class ArmTileEntity extends KineticTileEntity implements ITransformableTE } else { ListNBT pointsNBT = new ListNBT(); inputs.stream() - .map(aip -> aip.serialize(pos)) + .map(aip -> aip.serialize(worldPosition)) .forEach(pointsNBT::add); outputs.stream() - .map(aip -> aip.serialize(pos)) + .map(aip -> aip.serialize(worldPosition)) .forEach(pointsNBT::add); compound.put("InteractionPoints", pointsNBT); } @@ -473,7 +473,7 @@ public class ArmTileEntity extends KineticTileEntity implements ITransformableTE ListNBT interactionPointTagBefore = interactionPointTag; super.fromTag(state, compound, clientPacket); - heldItem = ItemStack.read(compound.getCompound("HeldItem")); + heldItem = ItemStack.of(compound.getCompound("HeldItem")); phase = NBTHelper.readEnum(compound, "Phase", Phase.class); chasedPointIndex = compound.getInt("TargetPointIndex"); chasedPointProgress = compound.getFloat("MovementProgress"); @@ -493,9 +493,9 @@ public class ArmTileEntity extends KineticTileEntity implements ITransformableTE if (previousPhase == Phase.MOVE_TO_OUTPUT && previousIndex < outputs.size()) previousPoint = outputs.get(previousIndex); previousTarget = - previousPoint == null ? ArmAngleTarget.NO_TARGET : previousPoint.getTargetAngles(pos, ceiling); + previousPoint == null ? ArmAngleTarget.NO_TARGET : previousPoint.getTargetAngles(worldPosition, ceiling); if (previousPoint != null) - previousBaseAngle = previousPoint.getTargetAngles(pos, ceiling).baseAngle; + previousBaseAngle = previousPoint.getTargetAngles(worldPosition, ceiling).baseAngle; } } @@ -531,7 +531,7 @@ public class ArmTileEntity extends KineticTileEntity implements ITransformableTE @Override protected Vector3d getLocalOffset(BlockState state) { - int yPos = state.get(ArmBlock.CEILING) ? 16 - 3 : 3; + int yPos = state.getValue(ArmBlock.CEILING) ? 16 - 3 : 3; Vector3d location = VecHelper.voxelSpace(8, yPos, 15.95); location = VecHelper.rotateCentered(location, AngleHelper.horizontalAngle(getSide()), Direction.Axis.Y); return location; diff --git a/src/main/java/com/simibubi/create/content/logistics/block/redstone/AnalogLeverBlock.java b/src/main/java/com/simibubi/create/content/logistics/block/redstone/AnalogLeverBlock.java index bda0d93db..1f2484371 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/redstone/AnalogLeverBlock.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/redstone/AnalogLeverBlock.java @@ -29,6 +29,8 @@ import net.minecraft.world.World; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraft.block.AbstractBlock.Properties; + public class AnalogLeverBlock extends HorizontalFaceBlock implements ITE { public AnalogLeverBlock(Properties p_i48402_1_) { @@ -46,36 +48,36 @@ public class AnalogLeverBlock extends HorizontalFaceBlock implements ITE { - boolean sneak = player.isSneaking(); + boolean sneak = player.isShiftKeyDown(); te.changeState(sneak); float f = .25f + ((te.state + 5) / 15f) * .5f; - worldIn.playSound(null, pos, SoundEvents.BLOCK_LEVER_CLICK, SoundCategory.BLOCKS, 0.2F, f); + worldIn.playSound(null, pos, SoundEvents.LEVER_CLICK, SoundCategory.BLOCKS, 0.2F, f); return ActionResultType.SUCCESS; }); } @Override - public int getWeakPower(BlockState blockState, IBlockReader blockAccess, BlockPos pos, Direction side) { + public int getSignal(BlockState blockState, IBlockReader blockAccess, BlockPos pos, Direction side) { return getTileEntityOptional(blockAccess, pos).map(al -> al.state) .orElse(0); } @Override - public boolean canProvidePower(BlockState state) { + public boolean isSignalSource(BlockState state) { return true; } @Override - public int getStrongPower(BlockState blockState, IBlockReader blockAccess, BlockPos pos, Direction side) { - return getFacing(blockState) == side ? getWeakPower(blockState, blockAccess, pos, side) : 0; + public int getDirectSignal(BlockState blockState, IBlockReader blockAccess, BlockPos pos, Direction side) { + return getConnectedDirection(blockState) == side ? getSignal(blockState, blockAccess, pos, side) : 0; } @Override @@ -88,32 +90,32 @@ public class AnalogLeverBlock extends HorizontalFaceBlock implements ITE { if (te.state != 0) updateNeighbors(state, worldIn, pos); - worldIn.removeTileEntity(pos); + worldIn.removeBlockEntity(pos); }); } private static void addParticles(BlockState state, IWorld worldIn, BlockPos pos, float alpha) { - Direction direction = state.get(HORIZONTAL_FACING) + Direction direction = state.getValue(FACING) .getOpposite(); - Direction direction1 = getFacing(state).getOpposite(); - double d0 = (double) pos.getX() + 0.5D + 0.1D * (double) direction.getXOffset() - + 0.2D * (double) direction1.getXOffset(); - double d1 = (double) pos.getY() + 0.5D + 0.1D * (double) direction.getYOffset() - + 0.2D * (double) direction1.getYOffset(); - double d2 = (double) pos.getZ() + 0.5D + 0.1D * (double) direction.getZOffset() - + 0.2D * (double) direction1.getZOffset(); + Direction direction1 = getConnectedDirection(state).getOpposite(); + double d0 = (double) pos.getX() + 0.5D + 0.1D * (double) direction.getStepX() + + 0.2D * (double) direction1.getStepX(); + double d1 = (double) pos.getY() + 0.5D + 0.1D * (double) direction.getStepY() + + 0.2D * (double) direction1.getStepY(); + double d2 = (double) pos.getZ() + 0.5D + 0.1D * (double) direction.getStepZ() + + 0.2D * (double) direction1.getStepZ(); worldIn.addParticle(new RedstoneParticleData(1.0F, 0.0F, 0.0F, alpha), d0, d1, d2, 0.0D, 0.0D, 0.0D); } static void updateNeighbors(BlockState state, World world, BlockPos pos) { - world.notifyNeighborsOfStateChange(pos, state.getBlock()); - world.notifyNeighborsOfStateChange(pos.offset(getFacing(state).getOpposite()), state.getBlock()); + world.updateNeighborsAt(pos, state.getBlock()); + world.updateNeighborsAt(pos.relative(getConnectedDirection(state).getOpposite()), state.getBlock()); } @SuppressWarnings("deprecation") @@ -123,8 +125,8 @@ public class AnalogLeverBlock extends HorizontalFaceBlock implements ITE builder) { - super.fillStateContainer(builder.add(HORIZONTAL_FACING, FACE)); + protected void createBlockStateDefinition(Builder builder) { + super.createBlockStateDefinition(builder.add(FACING, FACE)); } @Override @@ -133,7 +135,7 @@ public class AnalogLeverBlock extends HorizontalFaceBlock implements ITE tooltip, boolean isPlayerSneaking) { - tooltip.add(componentSpacing.copy().append(Lang.translate("tooltip.analogStrength", this.state))); + tooltip.add(componentSpacing.plainCopy().append(Lang.translate("tooltip.analogStrength", this.state))); return true; } diff --git a/src/main/java/com/simibubi/create/content/logistics/block/redstone/ContactMovementBehaviour.java b/src/main/java/com/simibubi/create/content/logistics/block/redstone/ContactMovementBehaviour.java index 770dcf450..adbf2b22f 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/redstone/ContactMovementBehaviour.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/redstone/ContactMovementBehaviour.java @@ -16,7 +16,7 @@ public class ContactMovementBehaviour extends MovementBehaviour { @Override public Vector3d getActiveAreaOffset(MovementContext context) { - return Vector3d.of(context.state.get(RedstoneContactBlock.FACING).getDirectionVec()).scale(.65f); + return Vector3d.atLowerCornerOf(context.state.getValue(RedstoneContactBlock.FACING).getNormal()).scale(.65f); } @Override @@ -24,7 +24,7 @@ public class ContactMovementBehaviour extends MovementBehaviour { BlockState block = context.state; World world = context.world; - if (world.isRemote) + if (world.isClientSide) return; if (context.firstMovement) return; @@ -34,13 +34,13 @@ public class ContactMovementBehaviour extends MovementBehaviour { if (!AllBlocks.REDSTONE_CONTACT.has(visitedState)) return; - Vector3d contact = Vector3d.of(block.get(RedstoneContactBlock.FACING).getDirectionVec()); + Vector3d contact = Vector3d.atLowerCornerOf(block.getValue(RedstoneContactBlock.FACING).getNormal()); contact = context.rotation.apply(contact); - Direction direction = Direction.getFacingFromVector(contact.x, contact.y, contact.z); + Direction direction = Direction.getNearest(contact.x, contact.y, contact.z); - if (!RedstoneContactBlock.hasValidContact(world, pos.offset(direction.getOpposite()), direction)) + if (!RedstoneContactBlock.hasValidContact(world, pos.relative(direction.getOpposite()), direction)) return; - world.setBlockState(pos, visitedState.with(RedstoneContactBlock.POWERED, true)); + world.setBlockAndUpdate(pos, visitedState.setValue(RedstoneContactBlock.POWERED, true)); context.data.put("lastContact", NBTUtil.writeBlockPos(pos)); return; } @@ -53,7 +53,7 @@ public class ContactMovementBehaviour extends MovementBehaviour { public void deactivateLastVisitedContact(MovementContext context) { if (context.data.contains("lastContact")) { BlockPos last = NBTUtil.readBlockPos(context.data.getCompound("lastContact")); - context.world.getPendingBlockTicks().scheduleTick(last, AllBlocks.REDSTONE_CONTACT.get(), 1, TickPriority.NORMAL); + context.world.getBlockTicks().scheduleTick(last, AllBlocks.REDSTONE_CONTACT.get(), 1, TickPriority.NORMAL); context.data.remove("lastContact"); } } diff --git a/src/main/java/com/simibubi/create/content/logistics/block/redstone/ContentObserverBlock.java b/src/main/java/com/simibubi/create/content/logistics/block/redstone/ContentObserverBlock.java index a5f568dbf..0eabc9284 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/redstone/ContentObserverBlock.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/redstone/ContentObserverBlock.java @@ -32,19 +32,21 @@ import net.minecraft.world.World; import net.minecraft.world.server.ServerWorld; import net.minecraftforge.items.CapabilityItemHandler; +import net.minecraft.block.AbstractBlock.Properties; + public class ContentObserverBlock extends HorizontalBlock implements ITE, IWrenchable { public static final BooleanProperty POWERED = BlockStateProperties.POWERED; public ContentObserverBlock(Properties properties) { super(properties); - setDefaultState(getDefaultState().with(POWERED, false)); + registerDefaultState(defaultBlockState().setValue(POWERED, false)); } @Override public VoxelShape getShape(BlockState state, IBlockReader p_220053_2_, BlockPos p_220053_3_, ISelectionContext p_220053_4_) { - return AllShapes.CONTENT_OBSERVER.get(state.get(HORIZONTAL_FACING)); + return AllShapes.CONTENT_OBSERVER.get(state.getValue(FACING)); } @Override @@ -58,22 +60,22 @@ public class ContentObserverBlock extends HorizontalBlock implements ITE builder) { - builder.add(POWERED, HORIZONTAL_FACING); - super.fillStateContainer(builder); + protected void createBlockStateDefinition(Builder builder) { + builder.add(POWERED, FACING); + super.createBlockStateDefinition(builder); } @Override public BlockState getStateForPlacement(BlockItemUseContext context) { - BlockState state = getDefaultState(); + BlockState state = defaultBlockState(); Direction preferredFacing = null; for (Direction face : Iterate.horizontalDirections) { - BlockPos offsetPos = context.getPos() - .offset(face); - World world = context.getWorld(); + BlockPos offsetPos = context.getClickedPos() + .relative(face); + World world = context.getLevel(); boolean canDetect = false; - TileEntity tileEntity = world.getTileEntity(offsetPos); + TileEntity tileEntity = world.getBlockEntity(offsetPos); if (TileEntityBehaviour.get(tileEntity, TransportedItemStackHandlerBehaviour.TYPE) != null) canDetect = true; @@ -94,39 +96,39 @@ public class ContentObserverBlock extends HorizontalBlock implements ITE { FilteringBehaviour filteringBehaviour = TileEntityBehaviour.get(te, FilteringBehaviour.TYPE); diff --git a/src/main/java/com/simibubi/create/content/logistics/block/redstone/ContentObserverTileEntity.java b/src/main/java/com/simibubi/create/content/logistics/block/redstone/ContentObserverTileEntity.java index f8db685a2..878053ba1 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/redstone/ContentObserverTileEntity.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/redstone/ContentObserverTileEntity.java @@ -45,18 +45,18 @@ public class ContentObserverTileEntity extends SmartTileEntity { if (turnOffTicks > 0) { turnOffTicks--; if (turnOffTicks == 0) - world.getPendingBlockTicks() - .scheduleTick(pos, state.getBlock(), 1); + level.getBlockTicks() + .scheduleTick(worldPosition, state.getBlock(), 1); } if (!isActive()) return; - Direction facing = state.get(ContentObserverBlock.HORIZONTAL_FACING); - BlockPos targetPos = pos.offset(facing); + Direction facing = state.getValue(ContentObserverBlock.FACING); + BlockPos targetPos = worldPosition.relative(facing); TransportedItemStackHandlerBehaviour behaviour = - TileEntityBehaviour.get(world, targetPos, TransportedItemStackHandlerBehaviour.TYPE); + TileEntityBehaviour.get(level, targetPos, TransportedItemStackHandlerBehaviour.TYPE); if (behaviour != null) { behaviour.handleCenteredProcessingOnAllItems(.45f, stack -> { if (!filtering.test(stack.stack) || turnOffTicks == 6) @@ -83,10 +83,10 @@ public class ContentObserverTileEntity extends SmartTileEntity { public void activate(int ticks) { BlockState state = getBlockState(); turnOffTicks = ticks; - if (state.get(ContentObserverBlock.POWERED)) + if (state.getValue(ContentObserverBlock.POWERED)) return; - world.setBlockState(pos, state.with(ContentObserverBlock.POWERED, true)); - world.notifyNeighborsOfStateChange(pos, state.getBlock()); + level.setBlockAndUpdate(worldPosition, state.setValue(ContentObserverBlock.POWERED, true)); + level.updateNeighborsAt(worldPosition, state.getBlock()); } private boolean isActive() { diff --git a/src/main/java/com/simibubi/create/content/logistics/block/redstone/FilteredDetectorFilterSlot.java b/src/main/java/com/simibubi/create/content/logistics/block/redstone/FilteredDetectorFilterSlot.java index 85c340826..cf9782281 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/redstone/FilteredDetectorFilterSlot.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/redstone/FilteredDetectorFilterSlot.java @@ -20,7 +20,7 @@ public class FilteredDetectorFilterSlot extends ValueBoxTransform { @Override protected void rotate(BlockState state, MatrixStack ms) { - float yRot = AngleHelper.horizontalAngle(state.get(HorizontalBlock.HORIZONTAL_FACING)) + 180; + float yRot = AngleHelper.horizontalAngle(state.getValue(HorizontalBlock.FACING)) + 180; MatrixStacker.of(ms) .rotateY(yRot) .rotateX(90); diff --git a/src/main/java/com/simibubi/create/content/logistics/block/redstone/NixieTubeBlock.java b/src/main/java/com/simibubi/create/content/logistics/block/redstone/NixieTubeBlock.java index c94efdab6..a85d24e45 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/redstone/NixieTubeBlock.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/redstone/NixieTubeBlock.java @@ -38,6 +38,8 @@ import net.minecraft.world.IBlockReader; import net.minecraft.world.World; import net.minecraft.world.server.ServerWorld; +import net.minecraft.block.AbstractBlock.Properties; + public class NixieTubeBlock extends HorizontalBlock implements ITE, IWrenchable, ISpecialBlockItemRequirement { @@ -47,19 +49,19 @@ public class NixieTubeBlock extends HorizontalBlock public NixieTubeBlock(Properties properties, DyeColor color) { super(properties); this.color = color; - setDefaultState(getDefaultState().with(CEILING, false)); + registerDefaultState(defaultBlockState().setValue(CEILING, false)); } @Override - public ActionResultType onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, + public ActionResultType use(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockRayTraceResult ray) { - ItemStack heldItem = player.getHeldItem(hand); + ItemStack heldItem = player.getItemInHand(hand); NixieTubeTileEntity nixie = getTileEntity(world, pos); if (nixie == null) return ActionResultType.PASS; - if (player.isSneaking()) + if (player.isShiftKeyDown()) return ActionResultType.PASS; if (heldItem.isEmpty()) { if (nixie.reactsToRedstone()) @@ -69,26 +71,26 @@ public class NixieTubeBlock extends HorizontalBlock return ActionResultType.SUCCESS; } - boolean display = heldItem.getItem() == Items.NAME_TAG && heldItem.hasDisplayName(); + boolean display = heldItem.getItem() == Items.NAME_TAG && heldItem.hasCustomHoverName(); DyeColor dye = null; for (DyeColor color : DyeColor.values()) if (heldItem.getItem() - .isIn(DyeHelper.getTagOfDye(color))) + .is(DyeHelper.getTagOfDye(color))) dye = color; if (!display && dye == null) return ActionResultType.PASS; - Direction left = state.get(HORIZONTAL_FACING) - .rotateY(); + Direction left = state.getValue(FACING) + .getClockWise(); Direction right = left.getOpposite(); - if (world.isRemote) + if (world.isClientSide) return ActionResultType.SUCCESS; BlockPos currentPos = pos; while (true) { - BlockPos nextPos = currentPos.offset(left); + BlockPos nextPos = currentPos.relative(left); if (!areNixieBlocksEqual(world.getBlockState(nextPos), state)) break; currentPos = nextPos; @@ -102,9 +104,9 @@ public class NixieTubeBlock extends HorizontalBlock if (display) withTileEntityDo(world, currentPos, te -> te.displayCustomNameOf(heldItem, rowPosition)); if (dye != null) - world.setBlockState(currentPos, withColor(state, dye)); + world.setBlockAndUpdate(currentPos, withColor(state, dye)); - BlockPos nextPos = currentPos.offset(right); + BlockPos nextPos = currentPos.relative(right); if (!areNixieBlocksEqual(world.getBlockState(nextPos), state)) break; currentPos = nextPos; @@ -115,19 +117,19 @@ public class NixieTubeBlock extends HorizontalBlock } @Override - protected void fillStateContainer(Builder builder) { - super.fillStateContainer(builder.add(CEILING, HORIZONTAL_FACING)); + protected void createBlockStateDefinition(Builder builder) { + super.createBlockStateDefinition(builder.add(CEILING, FACING)); } @Override - public void onReplaced(BlockState p_196243_1_, World p_196243_2_, BlockPos p_196243_3_, BlockState p_196243_4_, + public void onRemove(BlockState p_196243_1_, World p_196243_2_, BlockPos p_196243_3_, BlockState p_196243_4_, boolean p_196243_5_) { if (!(p_196243_4_.getBlock() instanceof NixieTubeBlock)) - p_196243_2_.removeTileEntity(p_196243_3_); + p_196243_2_.removeBlockEntity(p_196243_3_); } @Override - public ItemStack getItem(IBlockReader p_185473_1_, BlockPos p_185473_2_, BlockState p_185473_3_) { + public ItemStack getCloneItemStack(IBlockReader p_185473_1_, BlockPos p_185473_2_, BlockState p_185473_3_) { return AllBlocks.ORANGE_NIXIE_TUBE.asStack(); } @@ -140,8 +142,8 @@ public class NixieTubeBlock extends HorizontalBlock @Override public VoxelShape getShape(BlockState state, IBlockReader p_220053_2_, BlockPos p_220053_3_, ISelectionContext p_220053_4_) { - return (state.get(CEILING) ? AllShapes.NIXIE_TUBE_CEILING : AllShapes.NIXIE_TUBE) - .get(state.get(HORIZONTAL_FACING) + return (state.getValue(CEILING) ? AllShapes.NIXIE_TUBE_CEILING : AllShapes.NIXIE_TUBE) + .get(state.getValue(FACING) .getAxis()); } @@ -156,34 +158,34 @@ public class NixieTubeBlock extends HorizontalBlock @Override public BlockState getStateForPlacement(BlockItemUseContext context) { - BlockPos pos = context.getPos(); - boolean ceiling = context.getFace() == Direction.DOWN; - Vector3d hitVec = context.getHitVec(); + BlockPos pos = context.getClickedPos(); + boolean ceiling = context.getClickedFace() == Direction.DOWN; + Vector3d hitVec = context.getClickLocation(); if (hitVec != null) ceiling = hitVec.y - pos.getY() > .5f; - return getDefaultState().with(HORIZONTAL_FACING, context.getPlacementHorizontalFacing() + return defaultBlockState().setValue(FACING, context.getHorizontalDirection() .getOpposite()) - .with(CEILING, ceiling); + .setValue(CEILING, ceiling); } @Override public void neighborChanged(BlockState state, World worldIn, BlockPos pos, Block p_220069_4_, BlockPos p_220069_5_, boolean p_220069_6_) { - if (worldIn.isRemote) + if (worldIn.isClientSide) return; - if (!worldIn.getPendingBlockTicks() - .isTickPending(pos, this)) - worldIn.getPendingBlockTicks() + if (!worldIn.getBlockTicks() + .willTickThisTick(pos, this)) + worldIn.getBlockTicks() .scheduleTick(pos, this, 0); } @Override - public void scheduledTick(BlockState state, ServerWorld worldIn, BlockPos pos, Random r) { + public void tick(BlockState state, ServerWorld worldIn, BlockPos pos, Random r) { updateDisplayedRedstoneValue(state, worldIn, pos); } @Override - public void onBlockAdded(BlockState state, World worldIn, BlockPos pos, BlockState oldState, boolean isMoving) { + public void onPlace(BlockState state, World worldIn, BlockPos pos, BlockState oldState, boolean isMoving) { if (state.getBlock() == oldState.getBlock() || isMoving) return; updateDisplayedRedstoneValue(state, worldIn, pos); @@ -200,7 +202,7 @@ public class NixieTubeBlock extends HorizontalBlock } private void updateDisplayedRedstoneValue(BlockState state, World worldIn, BlockPos pos) { - if (worldIn.isRemote) + if (worldIn.isClientSide) return; withTileEntityDo(worldIn, pos, te -> { if (te.reactsToRedstone()) @@ -209,7 +211,7 @@ public class NixieTubeBlock extends HorizontalBlock } static boolean isValidBlock(IBlockReader world, BlockPos pos, boolean above) { - BlockState state = world.getBlockState(pos.up(above ? 1 : -1)); + BlockState state = world.getBlockState(pos.above(above ? 1 : -1)); return !state.getShape(world, pos) .isEmpty(); } @@ -217,14 +219,14 @@ public class NixieTubeBlock extends HorizontalBlock private int getPower(World worldIn, BlockPos pos) { int power = 0; for (Direction direction : Iterate.directions) - power = Math.max(worldIn.getRedstonePower(pos.offset(direction), direction), power); + power = Math.max(worldIn.getSignal(pos.relative(direction), direction), power); for (Direction direction : Iterate.directions) - power = Math.max(worldIn.getRedstonePower(pos.offset(direction), Direction.UP), power); + power = Math.max(worldIn.getSignal(pos.relative(direction), Direction.UP), power); return power; } @Override - public boolean allowsMovement(BlockState state, IBlockReader reader, BlockPos pos, PathType type) { + public boolean isPathfindable(BlockState state, IBlockReader reader, BlockPos pos, PathType type) { return false; } @@ -249,8 +251,8 @@ public class NixieTubeBlock extends HorizontalBlock public static BlockState withColor(BlockState state, DyeColor color) { return (color == DyeColor.ORANGE ? AllBlocks.ORANGE_NIXIE_TUBE : AllBlocks.NIXIE_TUBES.get(color)) .getDefaultState() - .with(HORIZONTAL_FACING, state.get(HORIZONTAL_FACING)) - .with(CEILING, state.get(CEILING)); + .setValue(FACING, state.getValue(FACING)) + .setValue(CEILING, state.getValue(CEILING)); } public static DyeColor colorOf(BlockState blockState) { diff --git a/src/main/java/com/simibubi/create/content/logistics/block/redstone/NixieTubeGenerator.java b/src/main/java/com/simibubi/create/content/logistics/block/redstone/NixieTubeGenerator.java index 14df038a3..6324405aa 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/redstone/NixieTubeGenerator.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/redstone/NixieTubeGenerator.java @@ -12,12 +12,12 @@ public class NixieTubeGenerator extends SpecialBlockStateGen { @Override protected int getXRotation(BlockState state) { - return state.get(NixieTubeBlock.CEILING) ? 180 : 0; + return state.getValue(NixieTubeBlock.CEILING) ? 180 : 0; } @Override protected int getYRotation(BlockState state) { - return horizontalAngle(state.get(NixieTubeBlock.HORIZONTAL_FACING)); + return horizontalAngle(state.getValue(NixieTubeBlock.FACING)); } @Override diff --git a/src/main/java/com/simibubi/create/content/logistics/block/redstone/NixieTubeRenderer.java b/src/main/java/com/simibubi/create/content/logistics/block/redstone/NixieTubeRenderer.java index fe2b2cc0f..c0b19ebe4 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/redstone/NixieTubeRenderer.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/redstone/NixieTubeRenderer.java @@ -57,36 +57,36 @@ public class NixieTubeRenderer extends SafeTileEntityRenderer s = te.getDisplayedStrings(); DyeColor color = NixieTubeBlock.colorOf(te.getBlockState()); - ms.push(); + ms.pushPose(); ms.translate(-4 / 16f, 0, 0); ms.scale(scale, -scale, scale); drawTube(ms, buffer, s.getFirst(), height, color); - ms.pop(); + ms.popPose(); - ms.push(); + ms.pushPose(); ms.translate(4 / 16f, 0, 0); ms.scale(scale, -scale, scale); drawTube(ms, buffer, s.getSecond(), height, color); - ms.pop(); + ms.popPose(); - ms.pop(); + ms.popPose(); } private void drawTube(MatrixStack ms, IRenderTypeBuffer buffer, String c, float height, DyeColor color) { - FontRenderer fontRenderer = Minecraft.getInstance().fontRenderer; - float charWidth = fontRenderer.getStringWidth(c); + FontRenderer fontRenderer = Minecraft.getInstance().font; + float charWidth = fontRenderer.width(c); float shadowOffset = .5f; float flicker = r.nextFloat(); Couple couple = DYE_TABLE.get(color); @@ -94,34 +94,34 @@ public class NixieTubeRenderer extends SafeTileEntityRenderer currentStrings = displayedStrings; parsedCustomText = parseCustomText(); updateDisplayedStrings(); @@ -60,7 +60,7 @@ public class NixieTubeTileEntity extends SmartTileEntity { @Override public void initialize() { - if (world.isRemote) + if (level.isClientSide) updateDisplayedStrings(); } @@ -83,7 +83,7 @@ public class NixieTubeTileEntity extends SmartTileEntity { } public void displayCustomNameOf(ItemStack stack, int nixiePositionInRow) { - CompoundNBT compoundnbt = stack.getChildTag("display"); + CompoundNBT compoundnbt = stack.getTagElement("display"); if (compoundnbt != null && compoundnbt.contains("Name", NBT.TAG_STRING)) { hasCustomText = true; rawCustomText = getJsonFromString(compoundnbt.getString("Name")); @@ -182,9 +182,9 @@ public class NixieTubeTileEntity extends SmartTileEntity { } protected ITextComponent parseDynamicComponent(ITextComponent customText) { - if (world instanceof ServerWorld) { + if (level instanceof ServerWorld) { try { - return TextComponentUtils.parse(getCommandSource(null), customText, null, 0); + return TextComponentUtils.updateForEntity(getCommandSource(null), customText, null, 0); } catch (CommandSyntaxException e) { // } @@ -196,7 +196,7 @@ public class NixieTubeTileEntity extends SmartTileEntity { public CommandSource getCommandSource(@Nullable ServerPlayerEntity p_195539_1_) { String s = p_195539_1_ == null ? "Nixie Tube" : p_195539_1_.getName().getString(); ITextComponent itextcomponent = (ITextComponent)(p_195539_1_ == null ? new StringTextComponent("Nixie Tube") : p_195539_1_.getDisplayName()); - return new CommandSource(ICommandSource.field_213139_a_, Vector3d.ofCenter(this.pos), Vector2f.ZERO, (ServerWorld)this.world, 2, s, itextcomponent, this.world.getServer(), p_195539_1_); + return new CommandSource(ICommandSource.NULL, Vector3d.atCenterOf(this.worldPosition), Vector2f.ZERO, (ServerWorld)this.level, 2, s, itextcomponent, this.level.getServer(), p_195539_1_); } @Override diff --git a/src/main/java/com/simibubi/create/content/logistics/block/redstone/RedstoneContactBlock.java b/src/main/java/com/simibubi/create/content/logistics/block/redstone/RedstoneContactBlock.java index 8db988bfa..4b5859442 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/redstone/RedstoneContactBlock.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/redstone/RedstoneContactBlock.java @@ -22,6 +22,8 @@ import net.minecraft.world.IWorld; import net.minecraft.world.World; import net.minecraft.world.server.ServerWorld; +import net.minecraft.block.AbstractBlock.Properties; + @ParametersAreNonnullByDefault @MethodsReturnNonnullByDefault public class RedstoneContactBlock extends ProperDirectionalBlock { @@ -30,81 +32,81 @@ public class RedstoneContactBlock extends ProperDirectionalBlock { public RedstoneContactBlock(Properties properties) { super(properties); - setDefaultState(getDefaultState().with(POWERED, false) - .with(FACING, Direction.UP)); + registerDefaultState(defaultBlockState().setValue(POWERED, false) + .setValue(FACING, Direction.UP)); } @Override - protected void fillStateContainer(Builder builder) { + protected void createBlockStateDefinition(Builder builder) { builder.add(POWERED); - super.fillStateContainer(builder); + super.createBlockStateDefinition(builder); } @Override public BlockState getStateForPlacement(BlockItemUseContext context) { - BlockState state = getDefaultState().with(FACING, context.getNearestLookingDirection() + BlockState state = defaultBlockState().setValue(FACING, context.getNearestLookingDirection() .getOpposite()); - Direction placeDirection = context.getFace() + Direction placeDirection = context.getClickedFace() .getOpposite(); if ((context.getPlayer() != null && context.getPlayer() - .isSneaking()) || hasValidContact(context.getWorld(), context.getPos(), placeDirection)) - state = state.with(FACING, placeDirection); - if (hasValidContact(context.getWorld(), context.getPos(), state.get(FACING))) - state = state.with(POWERED, true); + .isShiftKeyDown()) || hasValidContact(context.getLevel(), context.getClickedPos(), placeDirection)) + state = state.setValue(FACING, placeDirection); + if (hasValidContact(context.getLevel(), context.getClickedPos(), state.getValue(FACING))) + state = state.setValue(POWERED, true); return state; } @Override - public BlockState updatePostPlacement(BlockState stateIn, Direction facing, BlockState facingState, IWorld worldIn, + public BlockState updateShape(BlockState stateIn, Direction facing, BlockState facingState, IWorld worldIn, BlockPos currentPos, BlockPos facingPos) { - if (facing != stateIn.get(FACING)) + if (facing != stateIn.getValue(FACING)) return stateIn; boolean hasValidContact = hasValidContact(worldIn, currentPos, facing); - if (stateIn.get(POWERED) != hasValidContact) { - return stateIn.with(POWERED, hasValidContact); + if (stateIn.getValue(POWERED) != hasValidContact) { + return stateIn.setValue(POWERED, hasValidContact); } return stateIn; } @SuppressWarnings("deprecation") @Override - public void onReplaced(BlockState state, World worldIn, BlockPos pos, BlockState newState, boolean isMoving) { + public void onRemove(BlockState state, World worldIn, BlockPos pos, BlockState newState, boolean isMoving) { if (state.getBlock() == this && newState.getBlock() == this) { if (state == newState.cycle(POWERED)) - worldIn.notifyNeighborsOfStateChange(pos, this); + worldIn.updateNeighborsAt(pos, this); } - super.onReplaced(state, worldIn, pos, newState, isMoving); + super.onRemove(state, worldIn, pos, newState, isMoving); } @Override - public void scheduledTick(BlockState state, ServerWorld worldIn, BlockPos pos, Random random) { - boolean hasValidContact = hasValidContact(worldIn, pos, state.get(FACING)); - if (state.get(POWERED) != hasValidContact) - worldIn.setBlockState(pos, state.with(POWERED, hasValidContact)); + public void tick(BlockState state, ServerWorld worldIn, BlockPos pos, Random random) { + boolean hasValidContact = hasValidContact(worldIn, pos, state.getValue(FACING)); + if (state.getValue(POWERED) != hasValidContact) + worldIn.setBlockAndUpdate(pos, state.setValue(POWERED, hasValidContact)); } public static boolean hasValidContact(IWorld world, BlockPos pos, Direction direction) { - BlockState blockState = world.getBlockState(pos.offset(direction)); - return AllBlocks.REDSTONE_CONTACT.has(blockState) && blockState.get(FACING) == direction.getOpposite(); + BlockState blockState = world.getBlockState(pos.relative(direction)); + return AllBlocks.REDSTONE_CONTACT.has(blockState) && blockState.getValue(FACING) == direction.getOpposite(); } @Override - public boolean canProvidePower(BlockState state) { - return state.get(POWERED); + public boolean isSignalSource(BlockState state) { + return state.getValue(POWERED); } @Override public boolean canConnectRedstone(BlockState state, IBlockReader world, BlockPos pos, @Nullable Direction side) { if (side == null) return true; - return state.get(FACING) != side.getOpposite(); + return state.getValue(FACING) != side.getOpposite(); } @Override - public int getWeakPower(BlockState state, IBlockReader blockAccess, BlockPos pos, Direction side) { - return state.get(POWERED) ? 15 : 0; + public int getSignal(BlockState state, IBlockReader blockAccess, BlockPos pos, Direction side) { + return state.getValue(POWERED) ? 15 : 0; } } diff --git a/src/main/java/com/simibubi/create/content/logistics/block/redstone/RedstoneLinkBlock.java b/src/main/java/com/simibubi/create/content/logistics/block/redstone/RedstoneLinkBlock.java index 0469c1161..c7505e3dc 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/redstone/RedstoneLinkBlock.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/redstone/RedstoneLinkBlock.java @@ -30,6 +30,8 @@ import net.minecraft.world.IWorldReader; import net.minecraft.world.World; import net.minecraft.world.server.ServerWorld; +import net.minecraft.block.AbstractBlock.Properties; + public class RedstoneLinkBlock extends ProperDirectionalBlock implements ITE { public static final BooleanProperty POWERED = BlockStateProperties.POWERED; @@ -37,53 +39,53 @@ public class RedstoneLinkBlock extends ProperDirectionalBlock implements ITE 0) - worldIn.setBlockState(pos, state.cycle(POWERED), 2); + worldIn.setBlock(pos, state.cycle(POWERED), 2); int transmit = power; withTileEntityDo(worldIn, pos, te -> te.transmit(transmit)); @@ -92,36 +94,36 @@ public class RedstoneLinkBlock extends ProperDirectionalBlock implements ITE builder) { + protected void createBlockStateDefinition(Builder builder) { builder.add(POWERED, RECEIVER); - super.fillStateContainer(builder); + super.createBlockStateDefinition(builder); } @Override @@ -135,22 +137,22 @@ public class RedstoneLinkBlock extends ProperDirectionalBlock implements ITE { - Boolean wasReceiver = state.get(RECEIVER); - boolean blockPowered = worldIn.isBlockPowered(pos); - worldIn.setBlockState(pos, state.cycle(RECEIVER) - .with(POWERED, blockPowered), 3); + Boolean wasReceiver = state.getValue(RECEIVER); + boolean blockPowered = worldIn.hasNeighborSignal(pos); + worldIn.setBlock(pos, state.cycle(RECEIVER) + .setValue(POWERED, blockPowered), 3); te.transmit(wasReceiver ? 0 : getPower(worldIn, pos)); return ActionResultType.SUCCESS; }); @@ -158,7 +160,7 @@ public class RedstoneLinkBlock extends ProperDirectionalBlock implements ITE ModelFile getModel(DataGenContext ctx, RegistrateBlockstateProvider prov, BlockState state) { - String variant = state.get(RedstoneLinkBlock.RECEIVER) ? "receiver" : "transmitter"; - if (state.get(RedstoneLinkBlock.FACING).getAxis().isHorizontal()) + String variant = state.getValue(RedstoneLinkBlock.RECEIVER) ? "receiver" : "transmitter"; + if (state.getValue(RedstoneLinkBlock.FACING).getAxis().isHorizontal()) variant += "_vertical"; - if (state.get(RedstoneLinkBlock.POWERED)) + if (state.getValue(RedstoneLinkBlock.POWERED)) variant += "_powered"; return prov.models().getExistingFile(prov.modLoc("block/redstone_link/" + variant)); diff --git a/src/main/java/com/simibubi/create/content/logistics/block/redstone/RedstoneLinkTileEntity.java b/src/main/java/com/simibubi/create/content/logistics/block/redstone/RedstoneLinkTileEntity.java index 5a11ab2ee..cac4b3355 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/redstone/RedstoneLinkTileEntity.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/redstone/RedstoneLinkTileEntity.java @@ -79,7 +79,7 @@ public class RedstoneLinkTileEntity extends SmartTileEntity { receivedSignal = compound.getInt("Receive"); receivedSignalChanged = compound.getBoolean("ReceivedChanged"); - if (world == null || world.isRemote || !link.newPosition) + if (level == null || level.isClientSide || !link.newPosition) transmittedSignal = compound.getInt("Transmit"); } @@ -98,29 +98,29 @@ public class RedstoneLinkTileEntity extends SmartTileEntity { if (transmitter) return; - if (world.isRemote) + if (level.isClientSide) return; BlockState blockState = getBlockState(); if (!AllBlocks.REDSTONE_LINK.has(blockState)) return; - if ((getReceivedSignal() > 0) != blockState.get(POWERED)) { + if ((getReceivedSignal() > 0) != blockState.getValue(POWERED)) { receivedSignalChanged = true; - world.setBlockState(pos, blockState.cycle(POWERED)); + level.setBlockAndUpdate(worldPosition, blockState.cycle(POWERED)); } if (receivedSignalChanged) { - Direction attachedFace = blockState.get(RedstoneLinkBlock.FACING).getOpposite(); - BlockPos attachedPos = pos.offset(attachedFace); - world.updateNeighbors(pos, world.getBlockState(pos).getBlock()); - world.updateNeighbors(attachedPos, world.getBlockState(attachedPos).getBlock()); + Direction attachedFace = blockState.getValue(RedstoneLinkBlock.FACING).getOpposite(); + BlockPos attachedPos = worldPosition.relative(attachedFace); + level.blockUpdated(worldPosition, level.getBlockState(worldPosition).getBlock()); + level.blockUpdated(attachedPos, level.getBlockState(attachedPos).getBlock()); receivedSignalChanged = false; } } protected Boolean isTransmitterBlock() { - return !getBlockState().get(RedstoneLinkBlock.RECEIVER); + return !getBlockState().getValue(RedstoneLinkBlock.RECEIVER); } public int getReceivedSignal() { diff --git a/src/main/java/com/simibubi/create/content/logistics/block/redstone/StockpileSwitchBlock.java b/src/main/java/com/simibubi/create/content/logistics/block/redstone/StockpileSwitchBlock.java index 7dc6293fa..b2887a7a2 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/redstone/StockpileSwitchBlock.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/redstone/StockpileSwitchBlock.java @@ -35,6 +35,8 @@ import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.fml.DistExecutor; import net.minecraftforge.items.CapabilityItemHandler; +import net.minecraft.block.AbstractBlock.Properties; + public class StockpileSwitchBlock extends HorizontalBlock implements ITE, IWrenchable { public static final IntegerProperty INDICATOR = IntegerProperty.create("indicator", 0, 6); @@ -44,13 +46,13 @@ public class StockpileSwitchBlock extends HorizontalBlock implements ITE 15) @@ -91,20 +93,20 @@ public class StockpileSwitchBlock extends HorizontalBlock implements ITE builder) { - builder.add(HORIZONTAL_FACING, INDICATOR); - super.fillStateContainer(builder); + protected void createBlockStateDefinition(Builder builder) { + builder.add(FACING, INDICATOR); + super.createBlockStateDefinition(builder); } @Override - public ActionResultType onUse(BlockState state, World worldIn, BlockPos pos, PlayerEntity player, Hand handIn, + public ActionResultType use(BlockState state, World worldIn, BlockPos pos, PlayerEntity player, Hand handIn, BlockRayTraceResult hit) { - if (player != null && AllItems.WRENCH.isIn(player.getHeldItem(handIn))) + if (player != null && AllItems.WRENCH.isIn(player.getItemInHand(handIn))) return ActionResultType.PASS; DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> withTileEntityDo(worldIn, pos, te -> this.displayScreen(te, player))); @@ -119,13 +121,13 @@ public class StockpileSwitchBlock extends HorizontalBlock implements ITE { lastModification = 0; offBelow.titled(Lang.translate("gui.stockpile_switch.move_to_upper_at", state)); @@ -70,7 +70,7 @@ public class StockpileSwitchScreen extends AbstractSimiScreen { .setState((int) (te.offWhenBelow * 100)); onAbove = new ScrollInput(x + 36, y + 18, 102, 18).withRange(1, 101) - .titled(StringTextComponent.EMPTY.copy()) + .titled(StringTextComponent.EMPTY.plainCopy()) .calling(state -> { lastModification = 0; onAbove.titled(Lang.translate("gui.stockpile_switch.move_to_lower_at", state)); @@ -105,27 +105,27 @@ public class StockpileSwitchScreen extends AbstractSimiScreen { AllGuiTextures.STOCKSWITCH_POWERED_LANE.draw(ms, this, x + 36, y + (te.isInverted() ? 18 : 40)); AllGuiTextures.STOCKSWITCH_UNPOWERED_LANE.draw(ms, this, x + 36, y + (te.isInverted() ? 40 : 18)); - drawCenteredText(ms, textRenderer, title, x + (background.width - 8) / 2, y + 3, 0xFFFFFF); + drawCenteredString(ms, font, title, x + (background.width - 8) / 2, y + 3, 0xFFFFFF); AllGuiTextures sprite = AllGuiTextures.STOCKSWITCH_INTERVAL; float lowerBound = offBelow.getState(); float upperBound = onAbove.getState(); sprite.bind(); - drawTexture(ms, (int) (x + upperBound) + 37, y + 18, (int) (sprite.startX + upperBound), sprite.startY, + blit(ms, (int) (x + upperBound) + 37, y + 18, (int) (sprite.startX + upperBound), sprite.startY, (int) (sprite.width - upperBound), sprite.height); - drawTexture(ms, x + 37, y + 40, sprite.startX, sprite.startY, (int) (lowerBound), sprite.height); + blit(ms, x + 37, y + 40, sprite.startX, sprite.startY, (int) (lowerBound), sprite.height); AllGuiTextures.STOCKSWITCH_ARROW_UP.draw(ms, this, (int) (x + lowerBound + 36) - 2, y + 35); AllGuiTextures.STOCKSWITCH_ARROW_DOWN.draw(ms, this, (int) (x + upperBound + 36) - 3, y + 17); if (te.currentLevel != -1) { AllGuiTextures cursor = AllGuiTextures.STOCKSWITCH_CURSOR; - ms.push(); + ms.pushPose(); ms.translate(Math.min(99, this.cursor.getValue(partialTicks) * sprite.width), cursorLane.getValue(partialTicks) * 22, 0); cursor.draw(ms, this, x + 34, y + 19); - ms.pop(); + ms.popPose(); } GuiGameElement.of(renderedItem) @@ -158,7 +158,7 @@ public class StockpileSwitchScreen extends AbstractSimiScreen { } protected void send(boolean invert) { - AllPackets.channel.sendToServer(new ConfigureStockswitchPacket(te.getPos(), offBelow.getState() / 100f, + AllPackets.channel.sendToServer(new ConfigureStockswitchPacket(te.getBlockPos(), offBelow.getState() / 100f, onAbove.getState() / 100f, invert)); } @@ -167,7 +167,7 @@ public class StockpileSwitchScreen extends AbstractSimiScreen { if (flipSignals.isHovered()) send(!te.isInverted()); if (confirmButton.isHovered()) { - client.player.closeScreen(); + minecraft.player.closeContainer(); return true; } return super.mouseClicked(x, y, button); diff --git a/src/main/java/com/simibubi/create/content/logistics/block/redstone/StockpileSwitchTileEntity.java b/src/main/java/com/simibubi/create/content/logistics/block/redstone/StockpileSwitchTileEntity.java index 3fbbe0c93..27cb20f2a 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/redstone/StockpileSwitchTileEntity.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/redstone/StockpileSwitchTileEntity.java @@ -62,7 +62,7 @@ public class StockpileSwitchTileEntity extends SmartTileEntity { super.write(compound, clientPacket); } - public float getLevel() { + public float getStockLevel() { return currentLevel; } @@ -72,10 +72,10 @@ public class StockpileSwitchTileEntity extends SmartTileEntity { if (!observedInventory.hasInventory()) { if (currentLevel == -1) return; - world.setBlockState(pos, getBlockState().with(StockpileSwitchBlock.INDICATOR, 0), 3); + level.setBlock(worldPosition, getBlockState().setValue(StockpileSwitchBlock.INDICATOR, 0), 3); currentLevel = -1; state = false; - world.updateNeighbors(pos, getBlockState().getBlock()); + level.blockUpdated(worldPosition, getBlockState().getBlock()); sendData(); return; } @@ -98,10 +98,10 @@ public class StockpileSwitchTileEntity extends SmartTileEntity { occupied += count * (1f / space); } - float level = (float) occupied / totalSpace; - if (currentLevel != level) + float stockLevel = occupied / totalSpace; + if (currentLevel != stockLevel) changed = true; - currentLevel = level; + currentLevel = stockLevel; currentLevel = MathHelper.clamp(currentLevel, 0, 1); boolean previouslyPowered = state; @@ -114,10 +114,10 @@ public class StockpileSwitchTileEntity extends SmartTileEntity { int displayLevel = 0; if (currentLevel > 0) displayLevel = (int) (currentLevel * 6); - world.setBlockState(pos, getBlockState().with(StockpileSwitchBlock.INDICATOR, displayLevel), update ? 3 : 2); + level.setBlock(worldPosition, getBlockState().setValue(StockpileSwitchBlock.INDICATOR, displayLevel), update ? 3 : 2); - if (update && !world.getPendingBlockTicks().isTickPending(pos, getBlockState().getBlock())) - world.getPendingBlockTicks().scheduleTick(pos, getBlockState().getBlock(), 2, TickPriority.NORMAL); + if (update && !level.getBlockTicks().willTickThisTick(worldPosition, getBlockState().getBlock())) + level.getBlockTicks().scheduleTick(worldPosition, getBlockState().getBlock(), 2, TickPriority.NORMAL); if (changed || update) sendData(); @@ -126,7 +126,7 @@ public class StockpileSwitchTileEntity extends SmartTileEntity { @Override public void lazyTick() { super.lazyTick(); - if (world.isRemote) + if (level.isClientSide) return; updateCurrentLevel(); } @@ -155,7 +155,7 @@ public class StockpileSwitchTileEntity extends SmartTileEntity { public void updatePowerAfterDelay() { poweredAfterDelay = shouldBePowered(); - world.updateNeighbors(pos, getBlockState().getBlock()); + level.blockUpdated(worldPosition, getBlockState().getBlock()); } public boolean isPowered() { diff --git a/src/main/java/com/simibubi/create/content/logistics/item/CardboardBoxItem.java b/src/main/java/com/simibubi/create/content/logistics/item/CardboardBoxItem.java index 083722a79..4e6573fa6 100644 --- a/src/main/java/com/simibubi/create/content/logistics/item/CardboardBoxItem.java +++ b/src/main/java/com/simibubi/create/content/logistics/item/CardboardBoxItem.java @@ -24,6 +24,8 @@ import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.common.util.Constants; +import net.minecraft.item.Item.Properties; + public class CardboardBoxItem extends Item { static final int SLOTS = 9; @@ -35,11 +37,11 @@ public class CardboardBoxItem extends Item { } @Override - public ActionResult onItemRightClick(World worldIn, PlayerEntity playerIn, Hand handIn) { - if (!playerIn.isSneaking()) - return super.onItemRightClick(worldIn, playerIn, handIn); + public ActionResult use(World worldIn, PlayerEntity playerIn, Hand handIn) { + if (!playerIn.isShiftKeyDown()) + return super.use(worldIn, playerIn, handIn); - ItemStack box = playerIn.getHeldItem(handIn); + ItemStack box = playerIn.getItemInHand(handIn); for (ItemStack stack : getContents(box)) playerIn.inventory.placeItemBackInInventory(worldIn, stack); @@ -62,7 +64,7 @@ public class CardboardBoxItem extends Item { } @Override - public void fillItemGroup(ItemGroup group, NonNullList items) { + public void fillItemCategory(ItemGroup group, NonNullList items) { } public static void addAddress(ItemStack box, String address) { @@ -95,13 +97,13 @@ public class CardboardBoxItem extends Item { @Override @OnlyIn(value = Dist.CLIENT) - public void addInformation(ItemStack stack, World worldIn, List tooltip, ITooltipFlag flagIn) { - super.addInformation(stack, worldIn, tooltip, flagIn); + public void appendHoverText(ItemStack stack, World worldIn, List tooltip, ITooltipFlag flagIn) { + super.appendHoverText(stack, worldIn, tooltip, flagIn); CompoundNBT compoundnbt = stack.getOrCreateTag(); if (compoundnbt.contains("Address", Constants.NBT.TAG_STRING)) { tooltip.add(new StringTextComponent("-> " + compoundnbt.getString("Address")) - .formatted(TextFormatting.GOLD)); + .withStyle(TextFormatting.GOLD)); } if (!compoundnbt.contains("Items", Constants.NBT.TAG_LIST)) @@ -117,15 +119,15 @@ public class CardboardBoxItem extends Item { ++j; if (i <= 4) { ++i; - ITextComponent itextcomponent = itemstack.getDisplayName(); - tooltip.add(itextcomponent.copy().append(" x").append(String.valueOf(itemstack.getCount())) - .formatted(TextFormatting.GRAY)); + ITextComponent itextcomponent = itemstack.getHoverName(); + tooltip.add(itextcomponent.plainCopy().append(" x").append(String.valueOf(itemstack.getCount())) + .withStyle(TextFormatting.GRAY)); } } if (j - i > 0) { tooltip.add((new TranslationTextComponent("container.shulkerBox.more", j - i)) - .formatted(TextFormatting.ITALIC)); + .withStyle(TextFormatting.ITALIC)); } } diff --git a/src/main/java/com/simibubi/create/content/logistics/item/LecternControllerBlock.java b/src/main/java/com/simibubi/create/content/logistics/item/LecternControllerBlock.java index 339806dbb..eadb09685 100644 --- a/src/main/java/com/simibubi/create/content/logistics/item/LecternControllerBlock.java +++ b/src/main/java/com/simibubi/create/content/logistics/item/LecternControllerBlock.java @@ -25,16 +25,18 @@ import net.minecraft.util.math.RayTraceResult; import net.minecraft.world.IBlockReader; import net.minecraft.world.World; +import net.minecraft.block.AbstractBlock.Properties; + public class LecternControllerBlock extends LecternBlock implements ITE, ISpecialBlockItemRequirement { public LecternControllerBlock(Properties properties) { super(properties); - setDefaultState(getDefaultState().with(HAS_BOOK, true)); + registerDefaultState(defaultBlockState().setValue(HAS_BOOK, true)); } @Nullable @Override - public TileEntity createNewTileEntity(IBlockReader p_196283_1_) { + public TileEntity newBlockEntity(IBlockReader p_196283_1_) { return null; } @@ -50,15 +52,15 @@ public class LecternControllerBlock extends LecternBlock implements ITE te.tryStartUsing(player)); return ActionResultType.SUCCESS; } - if (player.isSneaking()) { - if (!world.isRemote) + if (player.isShiftKeyDown()) { + if (!world.isClientSide) replaceWithLectern(state, world, pos); return ActionResultType.SUCCESS; } @@ -67,32 +69,32 @@ public class LecternControllerBlock extends LecternBlock implements ITE te.dropController(state)); - super.onReplaced(state, world, pos, newState, isMoving); + super.onRemove(state, world, pos, newState, isMoving); } } @Override - public int getComparatorInputOverride(BlockState state, World world, BlockPos pos) { + public int getAnalogOutputSignal(BlockState state, World world, BlockPos pos) { return 15; } public void replaceLectern(BlockState lecternState, World world, BlockPos pos, ItemStack controller) { - world.setBlockState(pos, getDefaultState() - .with(FACING, lecternState.get(FACING)) - .with(POWERED, lecternState.get(POWERED))); + world.setBlockAndUpdate(pos, defaultBlockState() + .setValue(FACING, lecternState.getValue(FACING)) + .setValue(POWERED, lecternState.getValue(POWERED))); withTileEntityDo(world, pos, te -> te.setController(controller)); } public void replaceWithLectern(BlockState state, World world, BlockPos pos) { AllSoundEvents.CONTROLLER_TAKE.playOnServer(world, pos); - world.setBlockState(pos, Blocks.LECTERN.getDefaultState() - .with(FACING, state.get(FACING)) - .with(POWERED, state.get(POWERED))); + world.setBlockAndUpdate(pos, Blocks.LECTERN.defaultBlockState() + .setValue(FACING, state.getValue(FACING)) + .setValue(POWERED, state.getValue(POWERED))); } @Override diff --git a/src/main/java/com/simibubi/create/content/logistics/item/LecternControllerRenderer.java b/src/main/java/com/simibubi/create/content/logistics/item/LecternControllerRenderer.java index bbe2eaf63..14498a253 100644 --- a/src/main/java/com/simibubi/create/content/logistics/item/LecternControllerRenderer.java +++ b/src/main/java/com/simibubi/create/content/logistics/item/LecternControllerRenderer.java @@ -28,21 +28,21 @@ public class LecternControllerRenderer extends SafeTileEntityRenderer this::tryToggleActive); prevUser = user; } - if (!world.isRemote) { + if (!level.isClientSide) { deactivatedThisTick = false; - if (!(world instanceof ServerWorld)) + if (!(level instanceof ServerWorld)) return; if (user == null) return; - Entity entity = ((ServerWorld) world).getEntityByUuid(user); + Entity entity = ((ServerWorld) level).getEntity(user); if (!(entity instanceof PlayerEntity)) { stopUsing(null); return; } PlayerEntity player = (PlayerEntity) entity; - if (!playerInRange(player, world, pos) || !playerIsUsingLectern(player)) + if (!playerInRange(player, level, worldPosition) || !playerIsUsingLectern(player)) stopUsing(player); } } @OnlyIn(Dist.CLIENT) private void tryToggleActive() { - if (user == null && Minecraft.getInstance().player.getUniqueID().equals(prevUser)) { + if (user == null && Minecraft.getInstance().player.getUUID().equals(prevUser)) { LinkedControllerClientHandler.deactivateInLectern(); - } else if (prevUser == null && Minecraft.getInstance().player.getUniqueID().equals(user)) { - LinkedControllerClientHandler.activateInLectern(pos); + } else if (prevUser == null && Minecraft.getInstance().player.getUUID().equals(user)) { + LinkedControllerClientHandler.activateInLectern(worldPosition); } } public void setController(ItemStack newController) { controller = newController; if (newController != null) { - AllSoundEvents.CONTROLLER_PUT.playOnServer(world, pos); + AllSoundEvents.CONTROLLER_PUT.playOnServer(level, worldPosition); } } public void swapControllers(ItemStack stack, PlayerEntity player, Hand hand, BlockState state) { ItemStack newController = stack.copy(); stack.setCount(0); - if (player.getHeldItem(hand).isEmpty()) { - player.setHeldItem(hand, controller); + if (player.getItemInHand(hand).isEmpty()) { + player.setItemInHand(hand, controller); } else { dropController(state); } @@ -156,24 +156,24 @@ public class LecternControllerTileEntity extends SmartTileEntity { } public void dropController(BlockState state) { - Entity playerEntity = ((ServerWorld) world).getEntityByUuid(user); + Entity playerEntity = ((ServerWorld) level).getEntity(user); if (playerEntity instanceof PlayerEntity) stopUsing((PlayerEntity) playerEntity); - Direction dir = state.get(LecternControllerBlock.FACING); - double x = pos.getX() + 0.5 + 0.25*dir.getXOffset(); - double y = pos.getY() + 1; - double z = pos.getZ() + 0.5 + 0.25*dir.getZOffset(); - ItemEntity itementity = new ItemEntity(world, x, y, z, controller.copy()); - itementity.setDefaultPickupDelay(); - world.addEntity(itementity); + Direction dir = state.getValue(LecternControllerBlock.FACING); + double x = worldPosition.getX() + 0.5 + 0.25*dir.getStepX(); + double y = worldPosition.getY() + 1; + double z = worldPosition.getZ() + 0.5 + 0.25*dir.getStepZ(); + ItemEntity itementity = new ItemEntity(level, x, y, z, controller.copy()); + itementity.setDefaultPickUpDelay(); + level.addFreshEntity(itementity); controller = null; } public static boolean playerInRange(PlayerEntity player, World world, BlockPos pos) { //double modifier = world.isRemote ? 0 : 1.0; double reach = 0.4*player.getAttributeValue(ForgeMod.REACH_DISTANCE.get());// + modifier; - return player.getDistanceSq(Vector3d.ofCenter(pos)) < reach*reach; + return player.distanceToSqr(Vector3d.atCenterOf(pos)) < reach*reach; } } diff --git a/src/main/java/com/simibubi/create/content/logistics/item/LinkedControllerBindPacket.java b/src/main/java/com/simibubi/create/content/logistics/item/LinkedControllerBindPacket.java index 3a0366d67..096f4f885 100644 --- a/src/main/java/com/simibubi/create/content/logistics/item/LinkedControllerBindPacket.java +++ b/src/main/java/com/simibubi/create/content/logistics/item/LinkedControllerBindPacket.java @@ -42,7 +42,7 @@ public class LinkedControllerBindPacket extends LinkedControllerPacketBase { return; ItemStackHandler frequencyItems = LinkedControllerItem.getFrequencyItems(heldItem); - LinkBehaviour linkBehaviour = TileEntityBehaviour.get(player.world, linkLocation, LinkBehaviour.TYPE); + LinkBehaviour linkBehaviour = TileEntityBehaviour.get(player.level, linkLocation, LinkBehaviour.TYPE); if (linkBehaviour == null) return; diff --git a/src/main/java/com/simibubi/create/content/logistics/item/LinkedControllerClientHandler.java b/src/main/java/com/simibubi/create/content/logistics/item/LinkedControllerClientHandler.java index 9dfaf30c1..c5dd09860 100644 --- a/src/main/java/com/simibubi/create/content/logistics/item/LinkedControllerClientHandler.java +++ b/src/main/java/com/simibubi/create/content/logistics/item/LinkedControllerClientHandler.java @@ -50,14 +50,14 @@ public class LinkedControllerClientHandler { public static Vector getControls() { if (controls == null) { - GameSettings gameSettings = Minecraft.getInstance().gameSettings; + GameSettings gameSettings = Minecraft.getInstance().options; controls = new Vector<>(6); - controls.add(gameSettings.keyBindForward); - controls.add(gameSettings.keyBindBack); - controls.add(gameSettings.keyBindLeft); - controls.add(gameSettings.keyBindRight); - controls.add(gameSettings.keyBindJump); - controls.add(gameSettings.keySneak); + controls.add(gameSettings.keyUp); + controls.add(gameSettings.keyDown); + controls.add(gameSettings.keyLeft); + controls.add(gameSettings.keyRight); + controls.add(gameSettings.keyJump); + controls.add(gameSettings.keyShift); } return controls; } @@ -101,7 +101,7 @@ public class LinkedControllerClientHandler { } protected static void onReset() { - getControls().forEach(kb -> kb.setPressed(isActuallyPressed(kb))); + getControls().forEach(kb -> kb.setDown(isActuallyPressed(kb))); packetCooldown = 0; selectedLocation = BlockPos.ZERO; @@ -117,9 +117,9 @@ public class LinkedControllerClientHandler { protected static boolean isActuallyPressed(KeyBinding kb) { return InputMappings.isKeyDown(Minecraft.getInstance() .getWindow() - .getHandle(), + .getWindow(), kb.getKey() - .getKeyCode()); + .getValue()); } public static void tick() { @@ -131,7 +131,7 @@ public class LinkedControllerClientHandler { Minecraft mc = Minecraft.getInstance(); ClientPlayerEntity player = mc.player; - ItemStack heldItem = player.getHeldItemMainhand(); + ItemStack heldItem = player.getMainHandItem(); if (player.isSpectator()) { MODE = Mode.IDLE; @@ -140,7 +140,7 @@ public class LinkedControllerClientHandler { } if (!inLectern() && !AllItems.LINKED_CONTROLLER.isIn(heldItem)) { - heldItem = player.getHeldItemOffhand(); + heldItem = player.getOffhandItem(); if (!AllItems.LINKED_CONTROLLER.isIn(heldItem)) { MODE = Mode.IDLE; onReset(); @@ -148,20 +148,20 @@ public class LinkedControllerClientHandler { } } - if (inLectern() && AllBlocks.LECTERN_CONTROLLER.get().getTileEntityOptional(mc.world, lecternPos) + if (inLectern() && AllBlocks.LECTERN_CONTROLLER.get().getTileEntityOptional(mc.level, lecternPos) .map(te -> !te.isUsedBy(mc.player)) .orElse(true)) { deactivateInLectern(); return; } - if (mc.currentScreen != null) { + if (mc.screen != null) { MODE = Mode.IDLE; onReset(); return; } - if (InputMappings.isKeyDown(mc.getWindow().getHandle(), GLFW.GLFW_KEY_ESCAPE)) { + if (InputMappings.isKeyDown(mc.getWindow().getWindow(), GLFW.GLFW_KEY_ESCAPE)) { MODE = Mode.IDLE; onReset(); return; @@ -183,14 +183,14 @@ public class LinkedControllerClientHandler { // Released Keys if (!releasedKeys.isEmpty()) { AllPackets.channel.sendToServer(new LinkedControllerInputPacket(releasedKeys, false, lecternPos)); - AllSoundEvents.CONTROLLER_CLICK.playAt(player.world, player.getBlockPos(), 1f, .5f, true); + AllSoundEvents.CONTROLLER_CLICK.playAt(player.level, player.blockPosition(), 1f, .5f, true); } // Newly Pressed Keys if (!newKeys.isEmpty()) { AllPackets.channel.sendToServer(new LinkedControllerInputPacket(newKeys, true, lecternPos)); packetCooldown = PACKET_RATE; - AllSoundEvents.CONTROLLER_CLICK.playAt(player.world, player.getBlockPos(), 1f, .75f, true); + AllSoundEvents.CONTROLLER_CLICK.playAt(player.level, player.blockPosition(), 1f, .75f, true); } // Keepalive Pressed Keys @@ -203,20 +203,20 @@ public class LinkedControllerClientHandler { } if (MODE == Mode.BIND) { - VoxelShape shape = mc.world.getBlockState(selectedLocation) - .getShape(mc.world, selectedLocation); + VoxelShape shape = mc.level.getBlockState(selectedLocation) + .getShape(mc.level, selectedLocation); if (!shape.isEmpty()) - CreateClient.OUTLINER.showAABB("controller", shape.getBoundingBox() - .offset(selectedLocation)) + CreateClient.OUTLINER.showAABB("controller", shape.bounds() + .move(selectedLocation)) .colored(0xB73C2D) .lineWidth(1 / 16f); for (Integer integer : newKeys) { - LinkBehaviour linkBehaviour = TileEntityBehaviour.get(mc.world, selectedLocation, LinkBehaviour.TYPE); + LinkBehaviour linkBehaviour = TileEntityBehaviour.get(mc.level, selectedLocation, LinkBehaviour.TYPE); if (linkBehaviour != null) { AllPackets.channel.sendToServer(new LinkedControllerBindPacket(integer, selectedLocation)); Lang.sendStatus(mc.player, "linked_controller.key_bound", controls.get(integer) - .getBoundKeyLocalizedText() + .getTranslatedKeyMessage() .getString()); } MODE = Mode.IDLE; @@ -225,7 +225,7 @@ public class LinkedControllerClientHandler { } currentlyPressed = pressedKeys; - controls.forEach(kb -> kb.setPressed(false)); + controls.forEach(kb -> kb.setDown(false)); } public static void renderOverlay(MatrixStack ms, IRenderTypeBuffer buffer, int light, int overlay, @@ -234,38 +234,38 @@ public class LinkedControllerClientHandler { return; Minecraft mc = Minecraft.getInstance(); - ms.push(); + ms.pushPose(); Screen tooltipScreen = new TooltipScreen(null); tooltipScreen.init(mc, mc.getWindow() - .getScaledWidth(), + .getGuiScaledWidth(), mc.getWindow() - .getScaledHeight()); + .getGuiScaledHeight()); Object[] keys = new Object[6]; Vector controls = getControls(); for (int i = 0; i < controls.size(); i++) { KeyBinding keyBinding = controls.get(i); - keys[i] = keyBinding.getBoundKeyLocalizedText() + keys[i] = keyBinding.getTranslatedKeyMessage() .getString(); } List list = new ArrayList<>(); list.add(Lang.createTranslationTextComponent("linked_controller.bind_mode") - .formatted(TextFormatting.GOLD)); + .withStyle(TextFormatting.GOLD)); list.addAll( TooltipHelper.cutTextComponent(Lang.createTranslationTextComponent("linked_controller.press_keybind", keys), TextFormatting.GRAY, TextFormatting.GRAY)); int width = 0; - int height = list.size() * mc.fontRenderer.FONT_HEIGHT; + int height = list.size() * mc.font.lineHeight; for (ITextComponent iTextComponent : list) - width = Math.max(width, mc.fontRenderer.getWidth(iTextComponent)); + width = Math.max(width, mc.font.width(iTextComponent)); int x = (tooltipScreen.width / 3) - width / 2; int y = tooltipScreen.height - height; - tooltipScreen.renderTooltip(ms, list, x, y); + tooltipScreen.renderComponentTooltip(ms, list, x, y); - ms.pop(); + ms.popPose(); } diff --git a/src/main/java/com/simibubi/create/content/logistics/item/LinkedControllerContainer.java b/src/main/java/com/simibubi/create/content/logistics/item/LinkedControllerContainer.java index d2770f269..3f546e399 100644 --- a/src/main/java/com/simibubi/create/content/logistics/item/LinkedControllerContainer.java +++ b/src/main/java/com/simibubi/create/content/logistics/item/LinkedControllerContainer.java @@ -22,7 +22,7 @@ public class LinkedControllerContainer extends Container implements IClearableCo public ItemStackHandler filterInventory; public LinkedControllerContainer(ContainerType type, int id, PlayerInventory inv, PacketBuffer extraData) { - this(type, id, inv, extraData.readItemStack()); + this(type, id, inv, extraData.readItem()); } public LinkedControllerContainer(ContainerType type, int id, PlayerInventory inv, ItemStack filterItem) { @@ -42,7 +42,7 @@ public class LinkedControllerContainer extends Container implements IClearableCo // readData(mainItem); addPlayerSlots(); addLinkSlots(); - detectAndSendChanges(); + broadcastChanges(); } protected void addPlayerSlots() { @@ -77,28 +77,28 @@ public class LinkedControllerContainer extends Container implements IClearableCo } @Override - public boolean canMergeSlot(ItemStack stack, Slot slotIn) { - return canDragIntoSlot(slotIn); + public boolean canTakeItemForPickAll(ItemStack stack, Slot slotIn) { + return canDragTo(slotIn); } @Override - public boolean canDragIntoSlot(Slot slotIn) { - return slotIn.inventory == playerInventory; + public boolean canDragTo(Slot slotIn) { + return slotIn.container == playerInventory; } @Override - public boolean canInteractWith(PlayerEntity playerIn) { - return playerInventory.getCurrentItem() == mainItem; + public boolean stillValid(PlayerEntity playerIn) { + return playerInventory.getSelected() == mainItem; } @Override - public ItemStack slotClick(int slotId, int dragType, ClickType clickTypeIn, PlayerEntity player) { - if (slotId == playerInventory.currentItem && clickTypeIn != ClickType.THROW) + public ItemStack clicked(int slotId, int dragType, ClickType clickTypeIn, PlayerEntity player) { + if (slotId == playerInventory.selected && clickTypeIn != ClickType.THROW) return ItemStack.EMPTY; - ItemStack held = playerInventory.getItemStack(); + ItemStack held = playerInventory.getCarried(); if (slotId < 36) - return super.slotClick(slotId, dragType, clickTypeIn, player); + return super.clicked(slotId, dragType, clickTypeIn, player); if (clickTypeIn == ClickType.THROW) return ItemStack.EMPTY; @@ -108,7 +108,7 @@ public class LinkedControllerContainer extends Container implements IClearableCo ItemStack stackInSlot = filterInventory.getStackInSlot(slot) .copy(); stackInSlot.setCount(64); - playerInventory.setItemStack(stackInSlot); + playerInventory.setCarried(stackInSlot); return ItemStack.EMPTY; } return ItemStack.EMPTY; @@ -130,9 +130,9 @@ public class LinkedControllerContainer extends Container implements IClearableCo } @Override - public ItemStack transferStackInSlot(PlayerEntity playerIn, int index) { + public ItemStack quickMoveStack(PlayerEntity playerIn, int index) { if (index < 36) { - ItemStack stackToInsert = playerInventory.getStackInSlot(index); + ItemStack stackToInsert = playerInventory.getItem(index); for (int i = 0; i < filterInventory.getSlots(); i++) { ItemStack stack = filterInventory.getStackInSlot(i); if (stack.isEmpty()) { @@ -148,8 +148,8 @@ public class LinkedControllerContainer extends Container implements IClearableCo } @Override - public void onContainerClosed(PlayerEntity playerIn) { - super.onContainerClosed(playerIn); + public void removed(PlayerEntity playerIn) { + super.removed(playerIn); mainItem.getOrCreateTag() .put("Items", filterInventory.serializeNBT()); // saveData(filterItem); diff --git a/src/main/java/com/simibubi/create/content/logistics/item/LinkedControllerInputPacket.java b/src/main/java/com/simibubi/create/content/logistics/item/LinkedControllerInputPacket.java index 1b2414602..5a2105141 100644 --- a/src/main/java/com/simibubi/create/content/logistics/item/LinkedControllerInputPacket.java +++ b/src/main/java/com/simibubi/create/content/logistics/item/LinkedControllerInputPacket.java @@ -51,9 +51,9 @@ public class LinkedControllerInputPacket extends LinkedControllerPacketBase { @Override protected void handleItem(ServerPlayerEntity player, ItemStack heldItem) { - World world = player.getEntityWorld(); - UUID uniqueID = player.getUniqueID(); - BlockPos pos = player.getBlockPos(); + World world = player.getCommandSenderWorld(); + UUID uniqueID = player.getUUID(); + BlockPos pos = player.blockPosition(); if (player.isSpectator() && press) return; diff --git a/src/main/java/com/simibubi/create/content/logistics/item/LinkedControllerItem.java b/src/main/java/com/simibubi/create/content/logistics/item/LinkedControllerItem.java index cfdf4be85..21cdf552a 100644 --- a/src/main/java/com/simibubi/create/content/logistics/item/LinkedControllerItem.java +++ b/src/main/java/com/simibubi/create/content/logistics/item/LinkedControllerItem.java @@ -31,6 +31,8 @@ import net.minecraftforge.fml.DistExecutor; import net.minecraftforge.fml.network.NetworkHooks; import net.minecraftforge.items.ItemStackHandler; +import net.minecraft.item.Item.Properties; + public class LinkedControllerItem extends Item implements INamedContainerProvider { public LinkedControllerItem(Properties properties) { @@ -42,29 +44,29 @@ public class LinkedControllerItem extends Item implements INamedContainerProvide PlayerEntity player = ctx.getPlayer(); if (player == null) return ActionResultType.PASS; - World world = ctx.getWorld(); - BlockPos pos = ctx.getPos(); + World world = ctx.getLevel(); + BlockPos pos = ctx.getClickedPos(); BlockState hitState = world.getBlockState(pos); - if (player.isAllowEdit()) { - if (player.isSneaking()) { + if (player.mayBuild()) { + if (player.isShiftKeyDown()) { if (AllBlocks.LECTERN_CONTROLLER.has(hitState)) { - if (!world.isRemote) + if (!world.isClientSide) AllBlocks.LECTERN_CONTROLLER.get().withTileEntityDo(world, pos, te -> te.swapControllers(stack, player, ctx.getHand(), hitState)); return ActionResultType.SUCCESS; } } else { if (AllBlocks.REDSTONE_LINK.has(hitState)) { - if (world.isRemote) - DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> this.toggleBindMode(ctx.getPos())); - player.getCooldownTracker() - .setCooldown(this, 2); + if (world.isClientSide) + DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> this.toggleBindMode(ctx.getClickedPos())); + player.getCooldowns() + .addCooldown(this, 2); return ActionResultType.SUCCESS; } - if (hitState.isIn(Blocks.LECTERN) && !hitState.get(LecternBlock.HAS_BOOK)) { - if (!world.isRemote) { + if (hitState.is(Blocks.LECTERN) && !hitState.getValue(LecternBlock.HAS_BOOK)) { + if (!world.isClientSide) { ItemStack lecternStack = player.isCreative() ? stack.copy() : stack.split(1); AllBlocks.LECTERN_CONTROLLER.get().replaceLectern(hitState, world, pos, lecternStack); } @@ -76,26 +78,26 @@ public class LinkedControllerItem extends Item implements INamedContainerProvide } } - return onItemRightClick(world, player, ctx.getHand()).getType(); + return use(world, player, ctx.getHand()).getResult(); } @Override - public ActionResult onItemRightClick(World world, PlayerEntity player, Hand hand) { - ItemStack heldItem = player.getHeldItem(hand); + public ActionResult use(World world, PlayerEntity player, Hand hand) { + ItemStack heldItem = player.getItemInHand(hand); - if (player.isSneaking() && hand == Hand.MAIN_HAND) { - if (!world.isRemote && player instanceof ServerPlayerEntity && player.isAllowEdit()) + if (player.isShiftKeyDown() && hand == Hand.MAIN_HAND) { + if (!world.isClientSide && player instanceof ServerPlayerEntity && player.mayBuild()) NetworkHooks.openGui((ServerPlayerEntity) player, this, buf -> { - buf.writeItemStack(heldItem); + buf.writeItem(heldItem); }); return ActionResult.success(heldItem); } - if (!player.isSneaking()) { - if (world.isRemote) + if (!player.isShiftKeyDown()) { + if (world.isClientSide) DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> this::toggleActive); - player.getCooldownTracker() - .setCooldown(this, 2); + player.getCooldowns() + .addCooldown(this, 2); } return ActionResult.pass(heldItem); @@ -115,7 +117,7 @@ public class LinkedControllerItem extends Item implements INamedContainerProvide ItemStackHandler newInv = new ItemStackHandler(12); if (AllItems.LINKED_CONTROLLER.get() != stack.getItem()) throw new IllegalArgumentException("Cannot get frequency items from non-controller: " + stack); - CompoundNBT invNBT = stack.getOrCreateChildTag("Items"); + CompoundNBT invNBT = stack.getOrCreateTagElement("Items"); if (!invNBT.isEmpty()) newInv.deserializeNBT(invNBT); return newInv; @@ -129,13 +131,13 @@ public class LinkedControllerItem extends Item implements INamedContainerProvide @Override public Container createMenu(int id, PlayerInventory inv, PlayerEntity player) { - ItemStack heldItem = player.getHeldItemMainhand(); + ItemStack heldItem = player.getMainHandItem(); return LinkedControllerContainer.create(id, inv, heldItem); } @Override public ITextComponent getDisplayName() { - return new TranslationTextComponent(getTranslationKey()); + return new TranslationTextComponent(getDescriptionId()); } } diff --git a/src/main/java/com/simibubi/create/content/logistics/item/LinkedControllerItemRenderer.java b/src/main/java/com/simibubi/create/content/logistics/item/LinkedControllerItemRenderer.java index 26bc5bad5..f99e22e72 100644 --- a/src/main/java/com/simibubi/create/content/logistics/item/LinkedControllerItemRenderer.java +++ b/src/main/java/com/simibubi/create/content/logistics/item/LinkedControllerItemRenderer.java @@ -65,10 +65,10 @@ public class LinkedControllerItemRenderer extends CustomRenderedItemModelRendere float pt = AnimationTickHolder.getPartialTicks(); MatrixStacker msr = MatrixStacker.of(ms); - ms.push(); + ms.pushPose(); Minecraft mc = Minecraft.getInstance(); - boolean rightHanded = mc.gameSettings.mainHand == HandSide.RIGHT; + boolean rightHanded = mc.options.mainHand == HandSide.RIGHT; TransformType mainHand = rightHanded ? TransformType.FIRST_PERSON_RIGHT_HAND : TransformType.FIRST_PERSON_LEFT_HAND; TransformType offHand = @@ -77,15 +77,15 @@ public class LinkedControllerItemRenderer extends CustomRenderedItemModelRendere if (active == null) { active = false; - boolean noControllerInMain = !AllItems.LINKED_CONTROLLER.isIn(mc.player.getHeldItemMainhand()); + boolean noControllerInMain = !AllItems.LINKED_CONTROLLER.isIn(mc.player.getMainHandItem()); if (transformType == mainHand || (transformType == offHand && noControllerInMain)) { active = true; } if (transformType == TransformType.GUI) { - if (stack == mc.player.getHeldItemMainhand()) + if (stack == mc.player.getMainHandItem()) active = true; - if (stack == mc.player.getHeldItemOffhand() && noControllerInMain) + if (stack == mc.player.getOffhandItem() && noControllerInMain) active = true; } @@ -104,7 +104,7 @@ public class LinkedControllerItemRenderer extends CustomRenderedItemModelRendere renderer.render(active ? model.getPartial("powered") : model.getOriginalModel(), light); if (!usedByMe) { - ms.pop(); + ms.popPose(); return; } @@ -118,7 +118,7 @@ public class LinkedControllerItemRenderer extends CustomRenderedItemModelRendere light = i << 20; } - ms.push(); + ms.pushPose(); msr.translate(2 * s, 0, 8 * s); button(renderer, ms, light, pt, button, b, index++); msr.translate(4 * s, 0, 0); @@ -127,23 +127,23 @@ public class LinkedControllerItemRenderer extends CustomRenderedItemModelRendere button(renderer, ms, light, pt, button, b, index++); msr.translate(0, 0, -4 * s); button(renderer, ms, light, pt, button, b, index++); - ms.pop(); + ms.popPose(); msr.translate(3 * s, 0, 3 * s); button(renderer, ms, light, pt, button, b, index++); msr.translate(2 * s, 0, 0); button(renderer, ms, light, pt, button, b, index++); - ms.pop(); + ms.popPose(); } protected static void button(PartialItemModelRenderer renderer, MatrixStack ms, int light, float pt, IBakedModel button, float b, int index) { - ms.push(); + ms.pushPose(); ms.translate(0, b * buttons.get(index) .getValue(pt), 0); renderer.renderSolid(button, light); - ms.pop(); + ms.popPose(); } } diff --git a/src/main/java/com/simibubi/create/content/logistics/item/LinkedControllerPacketBase.java b/src/main/java/com/simibubi/create/content/logistics/item/LinkedControllerPacketBase.java index 78a844af7..d6c391e69 100644 --- a/src/main/java/com/simibubi/create/content/logistics/item/LinkedControllerPacketBase.java +++ b/src/main/java/com/simibubi/create/content/logistics/item/LinkedControllerPacketBase.java @@ -48,14 +48,14 @@ public abstract class LinkedControllerPacketBase extends SimplePacketBase { return; if (inLectern()) { - TileEntity te = player.world.getTileEntity(lecternPos); + TileEntity te = player.level.getBlockEntity(lecternPos); if (!(te instanceof LecternControllerTileEntity)) return; handleLectern(player, (LecternControllerTileEntity) te); } else { - ItemStack controller = player.getHeldItemMainhand(); + ItemStack controller = player.getMainHandItem(); if (!AllItems.LINKED_CONTROLLER.isIn(controller)) { - controller = player.getHeldItemOffhand(); + controller = player.getOffhandItem(); if (!AllItems.LINKED_CONTROLLER.isIn(controller)) return; } diff --git a/src/main/java/com/simibubi/create/content/logistics/item/LinkedControllerScreen.java b/src/main/java/com/simibubi/create/content/logistics/item/LinkedControllerScreen.java index bfbfbbbde..8c95a94d1 100644 --- a/src/main/java/com/simibubi/create/content/logistics/item/LinkedControllerScreen.java +++ b/src/main/java/com/simibubi/create/content/logistics/item/LinkedControllerScreen.java @@ -41,8 +41,8 @@ public class LinkedControllerScreen extends AbstractSimiContainerScreenat(x + background.width - 4, y + background.height - 56, -200) .scale(5) .render(ms); @@ -76,9 +76,9 @@ public class LinkedControllerScreen extends AbstractSimiContainerScreen(), hoveredSlot.getSlotIndex()), x, y, textRenderer); + renderWrappedToolTip(ms, addToTooltip(new LinkedList<>(), hoveredSlot.getSlotIndex()), x, y, font); } @Override public List getTooltipFromItem(ItemStack stack) { List list = super.getTooltipFromItem(stack); - if (hoveredSlot.inventory == container.playerInventory) + if (hoveredSlot.container == menu.playerInventory) return list; return hoveredSlot != null ? addToTooltip(list, hoveredSlot.getSlotIndex()) : list; } @@ -126,9 +126,9 @@ public class LinkedControllerScreen extends AbstractSimiContainerScreen ex super.init(); widgets.clear(); - int x = guiLeft; - int y = guiTop; + int x = leftPos; + int y = topPos; resetButton = new IconButton(x + background.width - 62, y + background.height - 24, AllIcons.I_TRASH); confirmButton = new IconButton(x + background.width - 33, y + background.height - 24, AllIcons.I_CONFIRM); @@ -62,16 +62,16 @@ public abstract class AbstractFilterScreen ex @Override protected void renderWindow(MatrixStack ms, int mouseX, int mouseY, float partialTicks) { int invX = getLeftOfCentered(PLAYER_INVENTORY.width); - int invY = guiTop + background.height + 4; + int invY = topPos + background.height + 4; renderPlayerInventory(ms, invX, invY); - int x = guiLeft; - int y = guiTop; + int x = leftPos; + int y = topPos; background.draw(ms, this, x, y); - drawCenteredText(ms, textRenderer, title, x + (background.width - 8) / 2, y + 3, 0xFFFFFF); + drawCenteredString(ms, font, title, x + (background.width - 8) / 2, y + 3, 0xFFFFFF); - GuiGameElement.of(container.contentHolder) + GuiGameElement.of(menu.contentHolder) .at(x + background.width, y + background.height - 56, -200) .scale(5) .render(ms); @@ -83,9 +83,9 @@ public abstract class AbstractFilterScreen ex super.tick(); handleIndicators(); - if (!container.player.getHeldItemMainhand() - .equals(container.contentHolder, false)) - client.player.closeScreen(); + if (!menu.player.getMainHandItem() + .equals(menu.contentHolder, false)) + minecraft.player.closeContainer(); } public void handleIndicators() { @@ -142,13 +142,13 @@ public abstract class AbstractFilterScreen ex if (button == 0) { if (confirmButton.isHovered()) { - client.player.closeScreen(); + minecraft.player.closeContainer(); return true; } if (resetButton.isHovered()) { - container.clearContents(); + menu.clearContents(); contentsCleared(); - container.sendClearPacket(); + menu.sendClearPacket(); return true; } } diff --git a/src/main/java/com/simibubi/create/content/logistics/item/filter/AttributeFilterContainer.java b/src/main/java/com/simibubi/create/content/logistics/item/filter/AttributeFilterContainer.java index c6ddeec64..8d0691975 100644 --- a/src/main/java/com/simibubi/create/content/logistics/item/filter/AttributeFilterContainer.java +++ b/src/main/java/com/simibubi/create/content/logistics/item/filter/AttributeFilterContainer.java @@ -51,8 +51,8 @@ public class AttributeFilterContainer extends AbstractFilterContainer { protected void init(PlayerInventory inv, ItemStack contentHolder) { super.init(inv, contentHolder); ItemStack stack = new ItemStack(Items.NAME_TAG); - stack.setDisplayName( - new StringTextComponent("Selected Tags").formatted(TextFormatting.RESET, TextFormatting.BLUE)); + stack.setHoverName( + new StringTextComponent("Selected Tags").withStyle(TextFormatting.RESET, TextFormatting.BLUE)); ghostInventory.setStackInSlot(1, stack); } @@ -71,7 +71,7 @@ public class AttributeFilterContainer extends AbstractFilterContainer { this.addSlot(new SlotItemHandler(ghostInventory, 0, 16, 22)); this.addSlot(new SlotItemHandler(ghostInventory, 1, 22, 57) { @Override - public boolean canTakeStack(PlayerEntity playerIn) { + public boolean mayPickup(PlayerEntity playerIn) { return false; } }); @@ -88,28 +88,28 @@ public class AttributeFilterContainer extends AbstractFilterContainer { } @Override - public ItemStack slotClick(int slotId, int dragType, ClickType clickTypeIn, PlayerEntity player) { + public ItemStack clicked(int slotId, int dragType, ClickType clickTypeIn, PlayerEntity player) { if (slotId == 37) return ItemStack.EMPTY; - return super.slotClick(slotId, dragType, clickTypeIn, player); + return super.clicked(slotId, dragType, clickTypeIn, player); } @Override - public boolean canDragIntoSlot(Slot slotIn) { - if (slotIn.slotNumber == 37) + public boolean canDragTo(Slot slotIn) { + if (slotIn.index == 37) return false; - return super.canDragIntoSlot(slotIn); + return super.canDragTo(slotIn); } @Override - public boolean canMergeSlot(ItemStack stack, Slot slotIn) { - if (slotIn.slotNumber == 37) + public boolean canTakeItemForPickAll(ItemStack stack, Slot slotIn) { + if (slotIn.index == 37) return false; - return super.canMergeSlot(stack, slotIn); + return super.canTakeItemForPickAll(stack, slotIn); } @Override - public ItemStack transferStackInSlot(PlayerEntity playerIn, int index) { + public ItemStack quickMoveStack(PlayerEntity playerIn, int index) { if (index == 37) return ItemStack.EMPTY; if (index == 36) { @@ -117,7 +117,7 @@ public class AttributeFilterContainer extends AbstractFilterContainer { return ItemStack.EMPTY; } if (index < 36) { - ItemStack stackToInsert = playerInventory.getStackInSlot(index); + ItemStack stackToInsert = playerInventory.getItem(index); ItemStack copy = stackToInsert.copy(); copy.setCount(1); ghostInventory.setStackInSlot(0, copy); diff --git a/src/main/java/com/simibubi/create/content/logistics/item/filter/AttributeFilterScreen.java b/src/main/java/com/simibubi/create/content/logistics/item/filter/AttributeFilterScreen.java index ba7ccfa45..ee2339881 100644 --- a/src/main/java/com/simibubi/create/content/logistics/item/filter/AttributeFilterScreen.java +++ b/src/main/java/com/simibubi/create/content/logistics/item/filter/AttributeFilterScreen.java @@ -64,8 +64,8 @@ public class AttributeFilterScreen extends AbstractFilterScreen selectedAttributes.add(new StringTextComponent("- ") + selectedAttributes.add((menu.selectedAttributes.isEmpty() ? noSelectedT : selectedT).plainCopy() + .withStyle(TextFormatting.YELLOW)); + menu.selectedAttributes.forEach(at -> selectedAttributes.add(new StringTextComponent("- ") .append(at.getFirst() .format(at.getSecond())) - .formatted(TextFormatting.GRAY))); + .withStyle(TextFormatting.GRAY))); } private void referenceItemChanged(ItemStack stack) { @@ -113,8 +113,8 @@ public class AttributeFilterScreen extends AbstractFilterScreen { @@ -125,12 +125,12 @@ public class AttributeFilterScreen extends AbstractFilterScreen options = attributesOfItem.stream() .map(a -> a.format(false)) .collect(Collectors.toList()); @@ -141,7 +141,7 @@ public class AttributeFilterScreen extends AbstractFilterScreen { attributeSelectorLabel.setTextAndTrim(options.get(i), true, 112); ItemAttribute selected = attributesOfItem.get(i); - for (Pair existing : container.selectedAttributes) { + for (Pair existing : menu.selectedAttributes) { CompoundNBT testTag = new CompoundNBT(); CompoundNBT testTag2 = new CompoundNBT(); existing.getFirst() @@ -161,16 +161,16 @@ public class AttributeFilterScreen extends AbstractFilterScreen getTooltipDescriptions() { - return Arrays.asList(denyDESC.copy(), allowConDESC.copy(), allowDisDESC.copy()); + return Arrays.asList(denyDESC.plainCopy(), allowConDESC.plainCopy(), allowDisDESC.plainCopy()); } @Override @@ -214,19 +214,19 @@ public class AttributeFilterScreen extends AbstractFilterScreen tooltip, ITooltipFlag flagIn) { + public void appendHoverText(ItemStack stack, World worldIn, List tooltip, ITooltipFlag flagIn) { if (!AllKeys.shiftDown()) { List makeSummary = makeSummary(stack); if (makeSummary.isEmpty()) @@ -90,18 +92,18 @@ public class FilterItem extends Item implements INamedContainerProvider { boolean blacklist = filter.getOrCreateTag() .getBoolean("Blacklist"); - list.add((blacklist ? Lang.translate("gui.filter.deny_list") : Lang.translate("gui.filter.allow_list")).formatted(TextFormatting.GOLD)); + list.add((blacklist ? Lang.translate("gui.filter.deny_list") : Lang.translate("gui.filter.allow_list")).withStyle(TextFormatting.GOLD)); int count = 0; for (int i = 0; i < filterItems.getSlots(); i++) { if (count > 3) { - list.add(new StringTextComponent("- ...").formatted(TextFormatting.DARK_GRAY)); + list.add(new StringTextComponent("- ...").withStyle(TextFormatting.DARK_GRAY)); break; } ItemStack filterStack = filterItems.getStackInSlot(i); if (filterStack.isEmpty()) continue; - list.add(new StringTextComponent("- ").append(filterStack.getDisplayName()).formatted(TextFormatting.GRAY)); + list.add(new StringTextComponent("- ").append(filterStack.getHoverName()).withStyle(TextFormatting.GRAY)); count++; } @@ -116,7 +118,7 @@ public class FilterItem extends Item implements INamedContainerProvider { ? Lang.translate("gui.attribute_filter.allow_list_conjunctive") : whitelistMode == WhitelistMode.WHITELIST_DISJ ? Lang.translate("gui.attribute_filter.allow_list_disjunctive") - : Lang.translate("gui.attribute_filter.deny_list")).formatted(TextFormatting.GOLD)); + : Lang.translate("gui.attribute_filter.deny_list")).withStyle(TextFormatting.GOLD)); int count = 0; ListNBT attributes = filter.getOrCreateTag() @@ -126,7 +128,7 @@ public class FilterItem extends Item implements INamedContainerProvider { ItemAttribute attribute = ItemAttribute.fromNBT(compound); boolean inverted = compound.getBoolean("Inverted"); if (count > 3) { - list.add(new StringTextComponent("- ...").formatted(TextFormatting.DARK_GRAY)); + list.add(new StringTextComponent("- ...").withStyle(TextFormatting.DARK_GRAY)); break; } list.add(new StringTextComponent("- ").append(attribute.format(inverted))); @@ -141,13 +143,13 @@ public class FilterItem extends Item implements INamedContainerProvider { } @Override - public ActionResult onItemRightClick(World world, PlayerEntity player, Hand hand) { - ItemStack heldItem = player.getHeldItem(hand); + public ActionResult use(World world, PlayerEntity player, Hand hand) { + ItemStack heldItem = player.getItemInHand(hand); - if (!player.isSneaking() && hand == Hand.MAIN_HAND) { - if (!world.isRemote && player instanceof ServerPlayerEntity) + if (!player.isShiftKeyDown() && hand == Hand.MAIN_HAND) { + if (!world.isClientSide && player instanceof ServerPlayerEntity) NetworkHooks.openGui((ServerPlayerEntity) player, this, buf -> { - buf.writeItemStack(heldItem); + buf.writeItem(heldItem); }); return ActionResult.success(heldItem); } @@ -156,7 +158,7 @@ public class FilterItem extends Item implements INamedContainerProvider { @Override public Container createMenu(int id, PlayerInventory inv, PlayerEntity player) { - ItemStack heldItem = player.getHeldItemMainhand(); + ItemStack heldItem = player.getMainHandItem(); if (type == FilterType.REGULAR) return FilterContainer.create(id, inv, heldItem); if (type == FilterType.ATTRIBUTE) @@ -166,14 +168,14 @@ public class FilterItem extends Item implements INamedContainerProvider { @Override public ITextComponent getDisplayName() { - return new TranslationTextComponent(getTranslationKey()); + return new TranslationTextComponent(getDescriptionId()); } public static ItemStackHandler getFilterItems(ItemStack stack) { ItemStackHandler newInv = new ItemStackHandler(18); if (AllItems.FILTER.get() != stack.getItem()) throw new IllegalArgumentException("Cannot get filter items from non-filter: " + stack); - CompoundNBT invNBT = stack.getOrCreateChildTag("Items"); + CompoundNBT invNBT = stack.getOrCreateTagElement("Items"); if (!invNBT.isEmpty()) newInv.deserializeNBT(invNBT); return newInv; @@ -193,7 +195,7 @@ public class FilterItem extends Item implements INamedContainerProvider { if (!(filter.getItem() instanceof FilterItem)) return (matchNBT ? ItemHandlerHelper.canItemStacksStack(filter, stack) - : ItemStack.areItemsEqual(filter, stack)); + : ItemStack.isSame(filter, stack)); if (AllItems.FILTER.get() == filter.getItem()) { ItemStackHandler filterItems = getFilterItems(filter); @@ -271,7 +273,7 @@ public class FilterItem extends Item implements INamedContainerProvider { return false; if (!matchNBT) return fluidInFilter.getFluid() - .isEquivalentTo(stack.getFluid()); + .isSame(stack.getFluid()); boolean fluidEqual = fluidInFilter.isFluidEqual(stack); return fluidEqual; } diff --git a/src/main/java/com/simibubi/create/content/logistics/item/filter/FilterScreen.java b/src/main/java/com/simibubi/create/content/logistics/item/filter/FilterScreen.java index d4fcd2618..579c8d711 100644 --- a/src/main/java/com/simibubi/create/content/logistics/item/filter/FilterScreen.java +++ b/src/main/java/com/simibubi/create/content/logistics/item/filter/FilterScreen.java @@ -43,8 +43,8 @@ public class FilterScreen extends AbstractFilterScreen { setWindowOffset(-11, 5); super.init(); - int x = guiLeft; - int y = guiTop; + int x = leftPos; + int y = topPos; blacklist = new IconButton(x + 18, y + 73, AllIcons.I_BLACKLIST); blacklist.setToolTip(denyN); @@ -73,25 +73,25 @@ public class FilterScreen extends AbstractFilterScreen { return mouseClicked; if (blacklist.isHovered()) { - container.blacklist = true; + menu.blacklist = true; sendOptionUpdate(Option.BLACKLIST); return true; } if (whitelist.isHovered()) { - container.blacklist = false; + menu.blacklist = false; sendOptionUpdate(Option.WHITELIST); return true; } if (respectNBT.isHovered()) { - container.respectNBT = true; + menu.respectNBT = true; sendOptionUpdate(Option.RESPECT_DATA); return true; } if (ignoreNBT.isHovered()) { - container.respectNBT = false; + menu.respectNBT = false; sendOptionUpdate(Option.IGNORE_DATA); return true; } @@ -106,32 +106,32 @@ public class FilterScreen extends AbstractFilterScreen { @Override protected List getTooltipDescriptions() { - return Arrays.asList(denyDESC.copy(), allowDESC.copy(), respectDataDESC.copy(), ignoreDataDESC.copy()); + return Arrays.asList(denyDESC.plainCopy(), allowDESC.plainCopy(), respectDataDESC.plainCopy(), ignoreDataDESC.plainCopy()); } @Override protected boolean isButtonEnabled(IconButton button) { if (button == blacklist) - return !container.blacklist; + return !menu.blacklist; if (button == whitelist) - return container.blacklist; + return menu.blacklist; if (button == respectNBT) - return !container.respectNBT; + return !menu.respectNBT; if (button == ignoreNBT) - return container.respectNBT; + return menu.respectNBT; return true; } @Override protected boolean isIndicatorOn(Indicator indicator) { if (indicator == blacklistIndicator) - return container.blacklist; + return menu.blacklist; if (indicator == whitelistIndicator) - return !container.blacklist; + return !menu.blacklist; if (indicator == respectNBTIndicator) - return container.respectNBT; + return menu.respectNBT; if (indicator == ignoreNBTIndicator) - return !container.respectNBT; + return !menu.respectNBT; return false; } diff --git a/src/main/java/com/simibubi/create/content/logistics/item/filter/FilterScreenPacket.java b/src/main/java/com/simibubi/create/content/logistics/item/filter/FilterScreenPacket.java index 1b1f61398..a1e50375a 100644 --- a/src/main/java/com/simibubi/create/content/logistics/item/filter/FilterScreenPacket.java +++ b/src/main/java/com/simibubi/create/content/logistics/item/filter/FilterScreenPacket.java @@ -30,13 +30,13 @@ public class FilterScreenPacket extends SimplePacketBase { public FilterScreenPacket(PacketBuffer buffer) { option = Option.values()[buffer.readInt()]; - data = buffer.readCompoundTag(); + data = buffer.readNbt(); } @Override public void write(PacketBuffer buffer) { buffer.writeInt(option.ordinal()); - buffer.writeCompoundTag(data); + buffer.writeNbt(data); } @Override @@ -46,8 +46,8 @@ public class FilterScreenPacket extends SimplePacketBase { if (player == null) return; - if (player.openContainer instanceof FilterContainer) { - FilterContainer c = (FilterContainer) player.openContainer; + if (player.containerMenu instanceof FilterContainer) { + FilterContainer c = (FilterContainer) player.containerMenu; if (option == Option.WHITELIST) c.blacklist = false; if (option == Option.BLACKLIST) @@ -59,11 +59,11 @@ public class FilterScreenPacket extends SimplePacketBase { if (option == Option.UPDATE_FILTER_ITEM) c.ghostInventory.setStackInSlot( data.getInt("Slot"), - net.minecraft.item.ItemStack.read(data.getCompound("Item"))); + net.minecraft.item.ItemStack.of(data.getCompound("Item"))); } - if (player.openContainer instanceof AttributeFilterContainer) { - AttributeFilterContainer c = (AttributeFilterContainer) player.openContainer; + if (player.containerMenu instanceof AttributeFilterContainer) { + AttributeFilterContainer c = (AttributeFilterContainer) player.containerMenu; if (option == Option.WHITELIST) c.whitelistMode = WhitelistMode.WHITELIST_DISJ; if (option == Option.WHITELIST2) 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 beb7a8946..b72d60db7 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 @@ -54,7 +54,7 @@ public interface ItemAttribute { static ItemAttribute standard = register(StandardTraits.DUMMY); static ItemAttribute inTag = register(new InTag(new ResourceLocation("dummy"))); - static ItemAttribute inItemGroup = register(new InItemGroup(ItemGroup.MISC)); + static ItemAttribute inItemGroup = register(new InItemGroup(ItemGroup.TAB_MISC)); static ItemAttribute addedBy = register(new InItemGroup.AddedBy("dummy")); static ItemAttribute hasEnchant = register(EnchantAttribute.EMPTY); static ItemAttribute shulkerFillLevel = register(ShulkerFillLevelAttribute.EMPTY); @@ -128,12 +128,12 @@ public interface ItemAttribute { DUMMY(s -> false), PLACEABLE(s -> s.getItem() instanceof BlockItem), - CONSUMABLE(ItemStack::isFood), + CONSUMABLE(ItemStack::isEdible), FLUID_CONTAINER(s -> s.getCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY).isPresent()), ENCHANTED(ItemStack::isEnchanted), - RENAMED(ItemStack::hasDisplayName), + RENAMED(ItemStack::hasCustomHoverName), DAMAGED(ItemStack::isDamaged), - BADLY_DAMAGED(s -> s.isDamaged() && s.getDamage() / s.getMaxDamage() > 3 / 4f), + BADLY_DAMAGED(s -> s.isDamaged() && s.getDamageValue() / s.getMaxDamage() > 3 / 4f), NOT_STACKABLE(((Predicate) ItemStack::isStackable).negate()), EQUIPABLE(s -> s.getEquipmentSlot() != null), MAX_ENCHANTED(StandardTraits::maxEnchanted), @@ -154,9 +154,9 @@ public interface ItemAttribute { } private static boolean testRecipe(ItemStack s, World w, IRecipeType> type) { - RECIPE_WRAPPER.setInventorySlotContents(0, s.copy()); + RECIPE_WRAPPER.setItem(0, s.copy()); return w.getRecipeManager() - .getRecipe(type, RECIPE_WRAPPER, w) + .getRecipeFor(type, RECIPE_WRAPPER, w) .isPresent(); } @@ -280,13 +280,13 @@ public interface ItemAttribute { @Override public boolean appliesTo(ItemStack stack) { Item item = stack.getItem(); - return item.getGroup() == group; + return item.getItemCategory() == group; } @Override public List listAttributesOf(ItemStack stack) { ItemGroup group = stack.getItem() - .getGroup(); + .getItemCategory(); return group == null ? Collections.emptyList() : Arrays.asList(new InItemGroup(group)); } @@ -299,19 +299,19 @@ public interface ItemAttribute { @OnlyIn(value = Dist.CLIENT) public TranslationTextComponent format(boolean inverted) { return Lang.translate("item_attributes." + getTranslationKey() + (inverted ? ".inverted" : ""), - group.getTranslationKey()); + group.getDisplayName()); } @Override public void writeNBT(CompoundNBT nbt) { - nbt.putString("path", group.getPath()); + nbt.putString("path", group.getRecipeFolderName()); } @Override public ItemAttribute readNBT(CompoundNBT nbt) { String readPath = nbt.getString("path"); - for (ItemGroup group : ItemGroup.GROUPS) - if (group.getPath() + for (ItemGroup group : ItemGroup.TABS) + if (group.getRecipeFolderName() .equals(readPath)) return new InItemGroup(group); return null; diff --git a/src/main/java/com/simibubi/create/content/logistics/item/filter/attribute/ColorAttribute.java b/src/main/java/com/simibubi/create/content/logistics/item/filter/attribute/ColorAttribute.java index f9e5e2380..354fe068c 100644 --- a/src/main/java/com/simibubi/create/content/logistics/item/filter/attribute/ColorAttribute.java +++ b/src/main/java/com/simibubi/create/content/logistics/item/filter/attribute/ColorAttribute.java @@ -56,7 +56,7 @@ public class ColorAttribute implements ItemAttribute { colors.addAll(getFireworkStarColors(nbt.getCompound("Explosion"))); } - Arrays.stream(DyeColor.values()).filter(c -> stack.getItem().getRegistryName().getPath().startsWith(c.getTranslationKey() + "_")).forEach(colors::add); + Arrays.stream(DyeColor.values()).filter(c -> stack.getItem().getRegistryName().getPath().startsWith(c.getName() + "_")).forEach(colors::add); return colors; } @@ -75,7 +75,7 @@ public class ColorAttribute implements ItemAttribute { @Override public Object[] getTranslationParameters() { - return new Object[]{new TranslationTextComponent(color.getTranslationKey()).getUnformattedComponentText()}; + return new Object[]{new TranslationTextComponent(color.getName()).getContents()}; } @Override diff --git a/src/main/java/com/simibubi/create/content/logistics/item/filter/attribute/EnchantAttribute.java b/src/main/java/com/simibubi/create/content/logistics/item/filter/attribute/EnchantAttribute.java index 611eb28a6..d23c806b9 100644 --- a/src/main/java/com/simibubi/create/content/logistics/item/filter/attribute/EnchantAttribute.java +++ b/src/main/java/com/simibubi/create/content/logistics/item/filter/attribute/EnchantAttribute.java @@ -43,7 +43,7 @@ public class EnchantAttribute implements ItemAttribute { public Object[] getTranslationParameters() { String parameter = ""; if(enchantment != null) - parameter = new TranslationTextComponent(enchantment.getName()).getString(); + parameter = new TranslationTextComponent(enchantment.getDescriptionId()).getString(); return new Object[] { parameter }; } @@ -59,6 +59,6 @@ public class EnchantAttribute implements ItemAttribute { @Override public ItemAttribute readNBT(CompoundNBT nbt) { - return nbt.contains("id") ? new EnchantAttribute(ForgeRegistries.ENCHANTMENTS.getValue(ResourceLocation.tryCreate(nbt.getString("id")))) : EMPTY; + return nbt.contains("id") ? new EnchantAttribute(ForgeRegistries.ENCHANTMENTS.getValue(ResourceLocation.tryParse(nbt.getString("id")))) : EMPTY; } } diff --git a/src/main/java/com/simibubi/create/content/logistics/item/filter/attribute/FluidContentsAttribute.java b/src/main/java/com/simibubi/create/content/logistics/item/filter/attribute/FluidContentsAttribute.java index 76638df30..dfe0ee944 100644 --- a/src/main/java/com/simibubi/create/content/logistics/item/filter/attribute/FluidContentsAttribute.java +++ b/src/main/java/com/simibubi/create/content/logistics/item/filter/attribute/FluidContentsAttribute.java @@ -62,7 +62,7 @@ public class FluidContentsAttribute implements ItemAttribute { @Override public ItemAttribute readNBT(CompoundNBT nbt) { - return nbt.contains("id") ? new FluidContentsAttribute(ForgeRegistries.FLUIDS.getValue(ResourceLocation.tryCreate(nbt.getString("id")))) : EMPTY; + return nbt.contains("id") ? new FluidContentsAttribute(ForgeRegistries.FLUIDS.getValue(ResourceLocation.tryParse(nbt.getString("id")))) : EMPTY; } private List extractFluids(ItemStack stack) { diff --git a/src/main/java/com/simibubi/create/content/logistics/item/filter/attribute/ItemNameAttribute.java b/src/main/java/com/simibubi/create/content/logistics/item/filter/attribute/ItemNameAttribute.java index 0c9581cae..ebe7c6024 100644 --- a/src/main/java/com/simibubi/create/content/logistics/item/filter/attribute/ItemNameAttribute.java +++ b/src/main/java/com/simibubi/create/content/logistics/item/filter/attribute/ItemNameAttribute.java @@ -54,7 +54,7 @@ public class ItemNameAttribute implements ItemAttribute { } private String extractCustomName(ItemStack stack) { - CompoundNBT compoundnbt = stack.getChildTag("display"); + CompoundNBT compoundnbt = stack.getTagElement("display"); if (compoundnbt != null && compoundnbt.contains("Name", 8)) { try { ITextComponent itextcomponent = ITextComponent.Serializer.fromJson(compoundnbt.getString("Name")); diff --git a/src/main/java/com/simibubi/create/content/logistics/item/filter/attribute/ShulkerFillLevelAttribute.java b/src/main/java/com/simibubi/create/content/logistics/item/filter/attribute/ShulkerFillLevelAttribute.java index 14cf79a44..8950409b6 100644 --- a/src/main/java/com/simibubi/create/content/logistics/item/filter/attribute/ShulkerFillLevelAttribute.java +++ b/src/main/java/com/simibubi/create/content/logistics/item/filter/attribute/ShulkerFillLevelAttribute.java @@ -82,13 +82,13 @@ public class ShulkerFillLevelAttribute implements ItemAttribute { } private static boolean isShulker(ItemStack stack) { - return Block.getBlockFromItem(stack.getItem()) instanceof ShulkerBoxBlock; + return Block.byItem(stack.getItem()) instanceof ShulkerBoxBlock; } public boolean canApply(ItemStack testStack) { if (!isShulker(testStack)) return false; - CompoundNBT compoundnbt = testStack.getChildTag("BlockEntityTag"); + CompoundNBT compoundnbt = testStack.getTagElement("BlockEntityTag"); if (compoundnbt == null) return requiredSize.test(0); if (compoundnbt.contains("LootTable", 8)) diff --git a/src/main/java/com/simibubi/create/content/logistics/item/filter/attribute/astralsorcery/AstralSorceryAmuletAttribute.java b/src/main/java/com/simibubi/create/content/logistics/item/filter/attribute/astralsorcery/AstralSorceryAmuletAttribute.java index 85b40b8d2..dbc3c8e7a 100644 --- a/src/main/java/com/simibubi/create/content/logistics/item/filter/attribute/astralsorcery/AstralSorceryAmuletAttribute.java +++ b/src/main/java/com/simibubi/create/content/logistics/item/filter/attribute/astralsorcery/AstralSorceryAmuletAttribute.java @@ -54,9 +54,9 @@ public class AstralSorceryAmuletAttribute implements ItemAttribute { public Object[] getTranslationParameters() { String something = ""; - Enchantment enchant = ForgeRegistries.ENCHANTMENTS.getValue(ResourceLocation.tryCreate(enchName)); + Enchantment enchant = ForgeRegistries.ENCHANTMENTS.getValue(ResourceLocation.tryParse(enchName)); if(enchant != null) { - something = new TranslationTextComponent(enchant.getName()).getString(); + something = new TranslationTextComponent(enchant.getDescriptionId()).getString(); } if(enchType == 1) something = "existing " + something; diff --git a/src/main/java/com/simibubi/create/content/logistics/packet/FunnelFlapPacket.java b/src/main/java/com/simibubi/create/content/logistics/packet/FunnelFlapPacket.java index 4118817ff..526fbfe5f 100644 --- a/src/main/java/com/simibubi/create/content/logistics/packet/FunnelFlapPacket.java +++ b/src/main/java/com/simibubi/create/content/logistics/packet/FunnelFlapPacket.java @@ -16,7 +16,7 @@ public class FunnelFlapPacket extends TileEntityDataPacket { } public FunnelFlapPacket(FunnelTileEntity tile, boolean inwards) { - super(tile.getPos()); + super(tile.getBlockPos()); this.inwards = inwards; } diff --git a/src/main/java/com/simibubi/create/content/logistics/packet/TunnelFlapPacket.java b/src/main/java/com/simibubi/create/content/logistics/packet/TunnelFlapPacket.java index 0fcf32b4d..2545b164e 100644 --- a/src/main/java/com/simibubi/create/content/logistics/packet/TunnelFlapPacket.java +++ b/src/main/java/com/simibubi/create/content/logistics/packet/TunnelFlapPacket.java @@ -23,7 +23,7 @@ public class TunnelFlapPacket extends TileEntityDataPacket this.flaps = new ArrayList<>(size); for (int i = 0; i < size; i++) { - Direction direction = Direction.byIndex(buffer.readByte()); + Direction direction = Direction.from3DDataValue(buffer.readByte()); boolean inwards = buffer.readBoolean(); flaps.add(Pair.of(direction, inwards)); @@ -31,7 +31,7 @@ public class TunnelFlapPacket extends TileEntityDataPacket } public TunnelFlapPacket(BeltTunnelTileEntity tile, List> flaps) { - super(tile.getPos()); + super(tile.getBlockPos()); this.flaps = new ArrayList<>(flaps); } @@ -41,7 +41,7 @@ public class TunnelFlapPacket extends TileEntityDataPacket buffer.writeByte(flaps.size()); for (Pair flap : flaps) { - buffer.writeByte(flap.getLeft().getIndex()); + buffer.writeByte(flap.getLeft().get3DDataValue()); buffer.writeBoolean(flap.getRight()); } } diff --git a/src/main/java/com/simibubi/create/content/palettes/AllPaletteBlocks.java b/src/main/java/com/simibubi/create/content/palettes/AllPaletteBlocks.java index f51eb78a1..0e8bae19e 100644 --- a/src/main/java/com/simibubi/create/content/palettes/AllPaletteBlocks.java +++ b/src/main/java/com/simibubi/create/content/palettes/AllPaletteBlocks.java @@ -43,7 +43,7 @@ public class AllPaletteBlocks { public static final BlockEntry TILED_GLASS = REGISTRATE.block("tiled_glass", GlassBlock::new) .initialProperties(() -> Blocks.GLASS) - .addLayer(() -> RenderType::getCutoutMipped) + .addLayer(() -> RenderType::cutoutMipped) .recipe((c, p) -> p.stonecutting(DataIngredient.tag(Tags.Items.GLASS_COLORLESS), c::get)) .blockstate(palettesCubeAll()) .tag(Tags.Blocks.GLASS_COLORLESS, BlockTags.IMPERMEABLE) @@ -61,7 +61,7 @@ public class AllPaletteBlocks { public static final BlockEntry TILED_GLASS_PANE = WindowGen.standardGlassPane("tiled_glass", TILED_GLASS, Create.asResource("block/palettes/tiled_glass"), - new ResourceLocation("block/glass_pane_top"), () -> RenderType::getCutoutMipped); + new ResourceLocation("block/glass_pane_top"), () -> RenderType::cutoutMipped); public static final BlockEntry FRAMED_GLASS_PANE = framedGlassPane("framed_glass", FRAMED_GLASS, AllSpriteShifts.FRAMED_GLASS), @@ -72,26 +72,26 @@ public class AllPaletteBlocks { public static final BlockEntry OAK_WINDOW = woodenWindowBlock(WoodType.OAK, Blocks.OAK_PLANKS), SPRUCE_WINDOW = woodenWindowBlock(WoodType.SPRUCE, Blocks.SPRUCE_PLANKS), - BIRCH_WINDOW = woodenWindowBlock(WoodType.BIRCH, Blocks.BIRCH_PLANKS, () -> RenderType::getTranslucent), + BIRCH_WINDOW = woodenWindowBlock(WoodType.BIRCH, Blocks.BIRCH_PLANKS, () -> RenderType::translucent), JUNGLE_WINDOW = woodenWindowBlock(WoodType.JUNGLE, Blocks.JUNGLE_PLANKS), ACACIA_WINDOW = woodenWindowBlock(WoodType.ACACIA, Blocks.ACACIA_PLANKS), DARK_OAK_WINDOW = woodenWindowBlock(WoodType.DARK_OAK, Blocks.DARK_OAK_PLANKS), CRIMSON_WINDOW = woodenWindowBlock(WoodType.CRIMSON, Blocks.CRIMSON_PLANKS), WARPED_WINDOW = woodenWindowBlock(WoodType.WARPED, Blocks.WARPED_PLANKS), ORNATE_IRON_WINDOW = customWindowBlock("ornate_iron_window", AllItems.ANDESITE_ALLOY, - AllSpriteShifts.ORNATE_IRON_WINDOW, () -> RenderType::getCutoutMipped); + AllSpriteShifts.ORNATE_IRON_WINDOW, () -> RenderType::cutoutMipped); public static final BlockEntry OAK_WINDOW_PANE = woodenWindowPane(WoodType.OAK, OAK_WINDOW), SPRUCE_WINDOW_PANE = woodenWindowPane(WoodType.SPRUCE, SPRUCE_WINDOW), - BIRCH_WINDOW_PANE = woodenWindowPane(WoodType.BIRCH, BIRCH_WINDOW, () -> RenderType::getTranslucent), + BIRCH_WINDOW_PANE = woodenWindowPane(WoodType.BIRCH, BIRCH_WINDOW, () -> RenderType::translucent), JUNGLE_WINDOW_PANE = woodenWindowPane(WoodType.JUNGLE, JUNGLE_WINDOW), ACACIA_WINDOW_PANE = woodenWindowPane(WoodType.ACACIA, ACACIA_WINDOW), DARK_OAK_WINDOW_PANE = woodenWindowPane(WoodType.DARK_OAK, DARK_OAK_WINDOW), CRIMSON_WINDOW_PANE = woodenWindowPane(WoodType.CRIMSON, CRIMSON_WINDOW), WARPED_WINDOW_PANE = woodenWindowPane(WoodType.WARPED, WARPED_WINDOW), ORNATE_IRON_WINDOW_PANE = customWindowPane("ornate_iron_window", ORNATE_IRON_WINDOW, - AllSpriteShifts.ORNATE_IRON_WINDOW, () -> RenderType::getCutoutMipped); + AllSpriteShifts.ORNATE_IRON_WINDOW, () -> RenderType::cutoutMipped); // Vanilla stone variant patterns @@ -157,7 +157,7 @@ public class AllPaletteBlocks { .initialProperties(() -> Blocks.ANDESITE) .tag(BlockTags.BASE_STONE_OVERWORLD) .onRegister(CreateRegistrate.blockVertexColors(new ScoriaVertexColor())) - .loot((p, g) -> p.registerLootTable(g, RegistrateBlockLootTables.droppingWithSilkTouch(g, SCORIA.get()))) + .loot((p, g) -> p.add(g, RegistrateBlockLootTables.droppingWithSilkTouch(g, SCORIA.get()))) .blockstate(palettesCubeAll()) .simpleItem() .register(); @@ -174,7 +174,7 @@ public class AllPaletteBlocks { new PalettesVariantEntry(PaletteStoneVariants.DARK_SCORIA, PaletteBlockPattern.STANDARD_RANGE, DARK_SCORIA); private static NonNullBiConsumer cobblestoneLoot(PaletteStoneVariants variant) { - return (loot, block) -> loot.registerLootTable(block, RegistrateBlockLootTables.droppingWithSilkTouch(block, + return (loot, block) -> loot.add(block, RegistrateBlockLootTables.droppingWithSilkTouch(block, variant.getVariants().registeredBlocks.get(0).get())); } diff --git a/src/main/java/com/simibubi/create/content/palettes/ConnectedGlassBlock.java b/src/main/java/com/simibubi/create/content/palettes/ConnectedGlassBlock.java index 0a2f58468..14bb132ba 100644 --- a/src/main/java/com/simibubi/create/content/palettes/ConnectedGlassBlock.java +++ b/src/main/java/com/simibubi/create/content/palettes/ConnectedGlassBlock.java @@ -9,6 +9,8 @@ import net.minecraft.world.IBlockDisplayReader; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraft.block.AbstractBlock.Properties; + public class ConnectedGlassBlock extends GlassBlock { public ConnectedGlassBlock(Properties p_i48392_1_) { @@ -17,9 +19,9 @@ public class ConnectedGlassBlock extends GlassBlock { @Override @OnlyIn(Dist.CLIENT) - public boolean isSideInvisible(BlockState state, BlockState adjacentBlockState, Direction side) { + public boolean skipRendering(BlockState state, BlockState adjacentBlockState, Direction side) { return adjacentBlockState.getBlock() instanceof ConnectedGlassBlock ? true - : super.isSideInvisible(state, adjacentBlockState, side); + : super.skipRendering(state, adjacentBlockState, side); } @Override diff --git a/src/main/java/com/simibubi/create/content/palettes/ConnectedGlassPaneBlock.java b/src/main/java/com/simibubi/create/content/palettes/ConnectedGlassPaneBlock.java index b7d57bc0d..add90e71a 100644 --- a/src/main/java/com/simibubi/create/content/palettes/ConnectedGlassPaneBlock.java +++ b/src/main/java/com/simibubi/create/content/palettes/ConnectedGlassPaneBlock.java @@ -5,6 +5,8 @@ import net.minecraft.util.Direction; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraft.block.AbstractBlock.Properties; + public class ConnectedGlassPaneBlock extends GlassPaneBlock { public ConnectedGlassPaneBlock(Properties builder) { @@ -13,11 +15,11 @@ public class ConnectedGlassPaneBlock extends GlassPaneBlock { @Override @OnlyIn(Dist.CLIENT) - public boolean isSideInvisible(BlockState state, BlockState adjacentBlockState, Direction side) { + public boolean skipRendering(BlockState state, BlockState adjacentBlockState, Direction side) { if (side.getAxis() .isVertical()) return adjacentBlockState == state; - return super.isSideInvisible(state, adjacentBlockState, side); + return super.skipRendering(state, adjacentBlockState, side); } } diff --git a/src/main/java/com/simibubi/create/content/palettes/GlassPaneBlock.java b/src/main/java/com/simibubi/create/content/palettes/GlassPaneBlock.java index afd74e0d8..85a875828 100644 --- a/src/main/java/com/simibubi/create/content/palettes/GlassPaneBlock.java +++ b/src/main/java/com/simibubi/create/content/palettes/GlassPaneBlock.java @@ -2,6 +2,8 @@ package com.simibubi.create.content.palettes; import net.minecraft.block.PaneBlock; +import net.minecraft.block.AbstractBlock.Properties; + public class GlassPaneBlock extends PaneBlock { public GlassPaneBlock(Properties builder) { diff --git a/src/main/java/com/simibubi/create/content/palettes/PaletteBlockPartial.java b/src/main/java/com/simibubi/create/content/palettes/PaletteBlockPartial.java index 9c79046af..e21cc1e83 100644 --- a/src/main/java/com/simibubi/create/content/palettes/PaletteBlockPartial.java +++ b/src/main/java/com/simibubi/create/content/palettes/PaletteBlockPartial.java @@ -95,7 +95,7 @@ public abstract class PaletteBlockPartial { @Override protected StairsBlock createBlock(Supplier block) { return new StairsBlock(() -> block.get() - .getDefaultState(), Properties.from(block.get())); + .defaultBlockState(), Properties.copy(block.get())); } @Override @@ -135,7 +135,7 @@ public abstract class PaletteBlockPartial { @Override protected SlabBlock createBlock(Supplier block) { - return new SlabBlock(Properties.from(block.get())); + return new SlabBlock(Properties.copy(block.get())); } @Override @@ -186,7 +186,7 @@ public abstract class PaletteBlockPartial { protected BlockBuilder transformBlock( BlockBuilder builder, String variantName, PaletteBlockPattern pattern) { - builder.loot((lt, block) -> lt.registerLootTable(block, RegistrateBlockLootTables.droppingSlab(block))); + builder.loot((lt, block) -> lt.add(block, RegistrateBlockLootTables.droppingSlab(block))); return super.transformBlock(builder, variantName, pattern); } @@ -200,7 +200,7 @@ public abstract class PaletteBlockPartial { @Override protected WallBlock createBlock(Supplier block) { - return new WallBlock(Properties.from(block.get())); + return new WallBlock(Properties.copy(block.get())); } @Override diff --git a/src/main/java/com/simibubi/create/content/palettes/PaletteBlockPattern.java b/src/main/java/com/simibubi/create/content/palettes/PaletteBlockPattern.java index 16cdd6dfe..91819c83d 100644 --- a/src/main/java/com/simibubi/create/content/palettes/PaletteBlockPattern.java +++ b/src/main/java/com/simibubi/create/content/palettes/PaletteBlockPattern.java @@ -43,20 +43,20 @@ public class PaletteBlockPattern { .addRecipes(v -> (c, p) -> { DataIngredient ingredient = DataIngredient.items(c.get()); Block result = v.getBaseBlock().get(); - CookingRecipeBuilder.smeltingRecipe(ingredient, result, 0.1f, 200) - .addCriterion("has_" + p.safeName(ingredient), ingredient.getCritereon(p)) - .build(p, p.safeId(result)); + CookingRecipeBuilder.smelting(ingredient, result, 0.1f, 200) + .unlockedBy("has_" + p.safeName(ingredient), ingredient.getCritereon(p)) + .save(p, p.safeId(result)); }), POLISHED = create("polished", PREFIX, FOR_POLISHED) .addRecipes(v -> (c, p) -> { DataIngredient ingredient = DataIngredient.items(v.getBaseBlock().get()); - ShapedRecipeBuilder.shapedRecipe(c.get(), 4) - .key('#', ingredient) - .patternLine("##") - .patternLine("##") - .addCriterion("has_" + p.safeName(ingredient), ingredient.getCritereon(p)) - .build(p, p.safeId(c.get())); + ShapedRecipeBuilder.shaped(c.get(), 4) + .define('#', ingredient) + .pattern("##") + .pattern("##") + .unlockedBy("has_" + p.safeName(ingredient), ingredient.getCritereon(p)) + .save(p, p.safeId(c.get())); }), BRICKS = create("bricks", SUFFIX, ALL_PARTIALS), FANCY_BRICKS = create("fancy_bricks", WRAP, ALL_PARTIALS), @@ -77,12 +77,12 @@ public class PaletteBlockPattern { .textures("pillar", "pillar_end") .addRecipes(v -> (c, p) -> { DataIngredient ingredient = DataIngredient.items(v.getBaseBlock().get()); - ShapedRecipeBuilder.shapedRecipe(c.get(), 2) - .key('#', ingredient) - .patternLine("#") - .patternLine("#") - .addCriterion("has_" + p.safeName(ingredient), ingredient.getCritereon(p)) - .build(p, p.safeId(c.get())); + ShapedRecipeBuilder.shaped(c.get(), 2) + .define('#', ingredient) + .pattern("#") + .pattern("#") + .unlockedBy("has_" + p.safeName(ingredient), ingredient.getCritereon(p)) + .save(p, p.safeId(c.get())); }), MOSSY = create("mossy", PREFIX).blockStateFactory(p -> p::cubeAllButMossy) diff --git a/src/main/java/com/simibubi/create/content/palettes/PalettesItemGroup.java b/src/main/java/com/simibubi/create/content/palettes/PalettesItemGroup.java index a96173a7b..aa9d5746b 100644 --- a/src/main/java/com/simibubi/create/content/palettes/PalettesItemGroup.java +++ b/src/main/java/com/simibubi/create/content/palettes/PalettesItemGroup.java @@ -23,7 +23,7 @@ public class PalettesItemGroup extends CreateItemGroupBase { public void addItems(NonNullList items, boolean specialItems) {} @Override - public ItemStack createIcon() { + public ItemStack makeIcon() { return new ItemStack(AllPaletteBlocks.ORNATE_IRON_WINDOW.get()); } diff --git a/src/main/java/com/simibubi/create/content/palettes/PalettesVariantEntry.java b/src/main/java/com/simibubi/create/content/palettes/PalettesVariantEntry.java index 9543a7b37..cecd78294 100644 --- a/src/main/java/com/simibubi/create/content/palettes/PalettesVariantEntry.java +++ b/src/main/java/com/simibubi/create/content/palettes/PalettesVariantEntry.java @@ -37,7 +37,7 @@ public class PalettesVariantEntry { .apply(name)::accept); if (pattern.isTranslucent()) - builder.addLayer(() -> RenderType::getTranslucent); + builder.addLayer(() -> RenderType::translucent); if (pattern == PaletteBlockPattern.COBBLESTONE) builder.item().tag(AllTags.AllItemTags.COBBLESTONE.tag); if (pattern.hasFoliage()) diff --git a/src/main/java/com/simibubi/create/content/palettes/PavedBlock.java b/src/main/java/com/simibubi/create/content/palettes/PavedBlock.java index f1376cb8a..5604a46ba 100644 --- a/src/main/java/com/simibubi/create/content/palettes/PavedBlock.java +++ b/src/main/java/com/simibubi/create/content/palettes/PavedBlock.java @@ -9,32 +9,34 @@ import net.minecraft.util.Direction; import net.minecraft.util.math.BlockPos; import net.minecraft.world.IWorld; +import net.minecraft.block.AbstractBlock.Properties; + public class PavedBlock extends Block { public static final BooleanProperty COVERED = BooleanProperty.create("covered"); public PavedBlock(Properties properties) { super(properties); - setDefaultState(getDefaultState().with(COVERED, false)); + registerDefaultState(defaultBlockState().setValue(COVERED, false)); } @Override - protected void fillStateContainer(Builder builder) { - super.fillStateContainer(builder.add(COVERED)); + protected void createBlockStateDefinition(Builder builder) { + super.createBlockStateDefinition(builder.add(COVERED)); } @Override public BlockState getStateForPlacement(BlockItemUseContext context) { - return getDefaultState().with(COVERED, context.getWorld() - .getBlockState(context.getPos().up()) + return defaultBlockState().setValue(COVERED, context.getLevel() + .getBlockState(context.getClickedPos().above()) .getBlock() == this); } @Override - public BlockState updatePostPlacement(BlockState stateIn, Direction face, BlockState neighbour, IWorld worldIn, + public BlockState updateShape(BlockState stateIn, Direction face, BlockState neighbour, IWorld worldIn, BlockPos currentPos, BlockPos facingPos) { if (face == Direction.UP) - return stateIn.with(COVERED, worldIn.getBlockState(facingPos).getBlock() == this); + return stateIn.setValue(COVERED, worldIn.getBlockState(facingPos).getBlock() == this); return stateIn; } diff --git a/src/main/java/com/simibubi/create/content/palettes/StandardFoliageColorHandler.java b/src/main/java/com/simibubi/create/content/palettes/StandardFoliageColorHandler.java index 061ff32aa..d0aaea069 100644 --- a/src/main/java/com/simibubi/create/content/palettes/StandardFoliageColorHandler.java +++ b/src/main/java/com/simibubi/create/content/palettes/StandardFoliageColorHandler.java @@ -14,7 +14,7 @@ public class StandardFoliageColorHandler implements IBlockColor { @Override public int getColor(BlockState state, IBlockDisplayReader light, BlockPos pos, int layer) { - return pos != null && light != null ? BiomeColors.getGrassColor(light, pos) : GrassColors.get(0.5D, 1.0D); + return pos != null && light != null ? BiomeColors.getAverageGrassColor(light, pos) : GrassColors.get(0.5D, 1.0D); } } diff --git a/src/main/java/com/simibubi/create/content/palettes/WindowBlock.java b/src/main/java/com/simibubi/create/content/palettes/WindowBlock.java index 02e3db3f7..827c1f852 100644 --- a/src/main/java/com/simibubi/create/content/palettes/WindowBlock.java +++ b/src/main/java/com/simibubi/create/content/palettes/WindowBlock.java @@ -7,6 +7,8 @@ import net.minecraft.util.Direction; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraft.block.AbstractBlock.Properties; + public class WindowBlock extends ConnectedGlassBlock { public WindowBlock(Properties p_i48392_1_) { @@ -15,11 +17,11 @@ public class WindowBlock extends ConnectedGlassBlock { @Override @OnlyIn(Dist.CLIENT) - public boolean isSideInvisible(BlockState state, BlockState adjacentBlockState, Direction side) { + public boolean skipRendering(BlockState state, BlockState adjacentBlockState, Direction side) { return adjacentBlockState.getBlock() instanceof ConnectedGlassBlock - ? (!RenderTypeLookup.canRenderInLayer(state, RenderType.getTranslucent()) && side.getAxis() + ? (!RenderTypeLookup.canRenderInLayer(state, RenderType.translucent()) && side.getAxis() .isHorizontal() || state.getBlock() == adjacentBlockState.getBlock()) - : super.isSideInvisible(state, adjacentBlockState, side); + : super.skipRendering(state, adjacentBlockState, side); } } diff --git a/src/main/java/com/simibubi/create/content/schematics/ClientSchematicLoader.java b/src/main/java/com/simibubi/create/content/schematics/ClientSchematicLoader.java index 0416a9acd..51e85900f 100644 --- a/src/main/java/com/simibubi/create/content/schematics/ClientSchematicLoader.java +++ b/src/main/java/com/simibubi/create/content/schematics/ClientSchematicLoader.java @@ -80,14 +80,14 @@ public class ClientSchematicLoader { } public static boolean validateSizeLimitation(long size) { - if (Minecraft.getInstance().isSingleplayer()) + if (Minecraft.getInstance().hasSingleplayerServer()) return true; Integer maxSize = AllConfigs.SERVER.schematics.maxTotalSchematicSize.get(); if (size > maxSize * 1000) { ClientPlayerEntity player = Minecraft.getInstance().player; if (player != null) { - player.sendMessage(Lang.translate("schematics.uploadTooLarge").append(" (" + size / 1000 + " KB)."), player.getUniqueID()); - player.sendMessage(Lang.translate("schematics.maxAllowedSize").append(" " + maxSize + " KB"), player.getUniqueID()); + player.sendMessage(Lang.translate("schematics.uploadTooLarge").append(" (" + size / 1000 + " KB)."), player.getUUID()); + player.sendMessage(Lang.translate("schematics.maxAllowedSize").append(" " + maxSize + " KB"), player.getUUID()); } return false; } @@ -104,7 +104,7 @@ public class ClientSchematicLoader { if (status != -1) { if (status < maxPacketSize) data = Arrays.copyOf(data, status); - if (Minecraft.getInstance().world != null) + if (Minecraft.getInstance().level != null) AllPackets.channel.sendToServer(SchematicUploadPacket.write(schematic, data)); else { activeUploads.remove(schematic); diff --git a/src/main/java/com/simibubi/create/content/schematics/ItemRequirement.java b/src/main/java/com/simibubi/create/content/schematics/ItemRequirement.java index e4fa3f827..aa52f4374 100644 --- a/src/main/java/com/simibubi/create/content/schematics/ItemRequirement.java +++ b/src/main/java/com/simibubi/create/content/schematics/ItemRequirement.java @@ -92,17 +92,17 @@ public class ItemRequirement { if (block == Blocks.AIR) return NONE; - Item item = BlockItem.BLOCK_TO_ITEM.getOrDefault(state.getBlock(), Items.AIR); + Item item = BlockItem.BY_BLOCK.getOrDefault(state.getBlock(), Items.AIR); // double slab needs two items - if (state.contains(BlockStateProperties.SLAB_TYPE) && state.get(BlockStateProperties.SLAB_TYPE) == SlabType.DOUBLE) + if (state.hasProperty(BlockStateProperties.SLAB_TYPE) && state.getValue(BlockStateProperties.SLAB_TYPE) == SlabType.DOUBLE) return new ItemRequirement(ItemUseType.CONSUME, Arrays.asList(new ItemStack(item, 2))); if (block instanceof TurtleEggBlock) - return new ItemRequirement(ItemUseType.CONSUME, Arrays.asList(new ItemStack(item, state.get(TurtleEggBlock.EGGS).intValue()))); + return new ItemRequirement(ItemUseType.CONSUME, Arrays.asList(new ItemStack(item, state.getValue(TurtleEggBlock.EGGS).intValue()))); if (block instanceof SeaPickleBlock) - return new ItemRequirement(ItemUseType.CONSUME, Arrays.asList(new ItemStack(item, state.get(SeaPickleBlock.PICKLES).intValue()))); + return new ItemRequirement(ItemUseType.CONSUME, Arrays.asList(new ItemStack(item, state.getValue(SeaPickleBlock.PICKLES).intValue()))); if (block instanceof SnowBlock) - return new ItemRequirement(ItemUseType.CONSUME, Arrays.asList(new ItemStack(item, state.get(SnowBlock.LAYERS).intValue()))); + return new ItemRequirement(ItemUseType.CONSUME, Arrays.asList(new ItemStack(item, state.getValue(SnowBlock.LAYERS).intValue()))); if (block instanceof GrassPathBlock) return new ItemRequirement(ItemUseType.CONSUME, Arrays.asList(new ItemStack(Items.GRASS_BLOCK))); if (block instanceof FarmlandBlock) @@ -120,7 +120,7 @@ public class ItemRequirement { if (type == EntityType.ITEM_FRAME) { ItemFrameEntity ife = (ItemFrameEntity) entity; ItemStack frame = new ItemStack(Items.ITEM_FRAME); - ItemStack displayedItem = ife.getDisplayedItem(); + ItemStack displayedItem = ife.getItem(); if (displayedItem.isEmpty()) return new ItemRequirement(ItemUseType.CONSUME, Items.ITEM_FRAME); return new ItemRequirement(ItemUseType.CONSUME, Arrays.asList(frame, displayedItem)); @@ -132,7 +132,7 @@ public class ItemRequirement { if (type == EntityType.ARMOR_STAND) { List requirements = new ArrayList<>(); ArmorStandEntity armorStandEntity = (ArmorStandEntity) entity; - armorStandEntity.getEquipmentAndArmor().forEach(requirements::add); + armorStandEntity.getAllSlots().forEach(requirements::add); requirements.add(new ItemStack(Items.ARMOR_STAND)); return new ItemRequirement(ItemUseType.CONSUME, requirements); } @@ -144,7 +144,7 @@ public class ItemRequirement { if (entity instanceof BoatEntity) { BoatEntity boatEntity = (BoatEntity) entity; - return new ItemRequirement(ItemUseType.CONSUME, boatEntity.getItemBoat().getItem()); + return new ItemRequirement(ItemUseType.CONSUME, boatEntity.getDropItem().getItem()); } if (type == EntityType.END_CRYSTAL) diff --git a/src/main/java/com/simibubi/create/content/schematics/MaterialChecklist.java b/src/main/java/com/simibubi/create/content/schematics/MaterialChecklist.java index 1619173b4..bcfd97955 100644 --- a/src/main/java/com/simibubi/create/content/schematics/MaterialChecklist.java +++ b/src/main/java/com/simibubi/create/content/schematics/MaterialChecklist.java @@ -83,15 +83,15 @@ public class MaterialChecklist { textComponent = new StringTextComponent("\n" + TextFormatting.RED); textComponent = textComponent.append(Lang.createTranslationTextComponent("materialChecklist.blocksNotLoaded")); - pages.add(StringNBT.of(ITextComponent.Serializer.toJson(textComponent))); + pages.add(StringNBT.valueOf(ITextComponent.Serializer.toJson(textComponent))); } List keys = new ArrayList<>(Sets.union(required.keySet(), damageRequired.keySet())); Collections.sort(keys, (item1, item2) -> { Locale locale = Locale.ENGLISH; - String name1 = new TranslationTextComponent(item1.getTranslationKey()).getString() + String name1 = new TranslationTextComponent(item1.getDescriptionId()).getString() .toLowerCase(locale); - String name2 = new TranslationTextComponent(item2.getTranslationKey()).getString() + String name2 = new TranslationTextComponent(item2.getDescriptionId()).getString() .toLowerCase(locale); return name1.compareTo(name2); }); @@ -110,8 +110,8 @@ public class MaterialChecklist { if (itemsWritten == MAX_ENTRIES_PER_PAGE) { itemsWritten = 0; - textComponent.append(new StringTextComponent("\n >>>").formatted(TextFormatting.BLUE)); - pages.add(StringNBT.of(ITextComponent.Serializer.toJson(textComponent))); + textComponent.append(new StringTextComponent("\n >>>").withStyle(TextFormatting.BLUE)); + pages.add(StringNBT.valueOf(ITextComponent.Serializer.toJson(textComponent))); textComponent = new StringTextComponent(""); } @@ -122,8 +122,8 @@ public class MaterialChecklist { for (Item item : completed) { if (itemsWritten == MAX_ENTRIES_PER_PAGE) { itemsWritten = 0; - textComponent.append(new StringTextComponent("\n >>>").formatted(TextFormatting.DARK_GREEN)); - pages.add(StringNBT.of(ITextComponent.Serializer.toJson(textComponent))); + textComponent.append(new StringTextComponent("\n >>>").withStyle(TextFormatting.DARK_GREEN)); + pages.add(StringNBT.valueOf(ITextComponent.Serializer.toJson(textComponent))); textComponent = new StringTextComponent(""); } @@ -131,7 +131,7 @@ public class MaterialChecklist { textComponent.append(entry(new ItemStack(item), getRequiredAmount(item), false)); } - pages.add(StringNBT.of(ITextComponent.Serializer.toJson(textComponent))); + pages.add(StringNBT.valueOf(ITextComponent.Serializer.toJson(textComponent))); tag.put("pages", pages); tag.putString("author", "Schematicannon"); @@ -139,7 +139,7 @@ public class MaterialChecklist { textComponent = Lang.createTranslationTextComponent("materialChecklist") .setStyle(Style.EMPTY.withColor(TextFormatting.BLUE) .withItalic(Boolean.FALSE)); - book.getOrCreateChildTag("display") + book.getOrCreateTagElement("display") .putString("Name", ITextComponent.Serializer.toJson(textComponent)); book.setTag(tag); @@ -156,13 +156,13 @@ public class MaterialChecklist { private ITextComponent entry(ItemStack item, int amount, boolean unfinished) { int stacks = amount / 64; int remainder = amount % 64; - IFormattableTextComponent tc = new TranslationTextComponent(item.getTranslationKey()); + IFormattableTextComponent tc = new TranslationTextComponent(item.getDescriptionId()); if (!unfinished) tc.append(" \u2714"); - tc.formatted(unfinished ? TextFormatting.BLUE : TextFormatting.DARK_GREEN); - return tc.append(new StringTextComponent("\n" + " x" + amount).formatted(TextFormatting.BLACK)) + tc.withStyle(unfinished ? TextFormatting.BLUE : TextFormatting.DARK_GREEN); + return tc.append(new StringTextComponent("\n" + " x" + amount).withStyle(TextFormatting.BLACK)) .append( - new StringTextComponent(" | " + stacks + "\u25A4 +" + remainder + "\n").formatted(TextFormatting.GRAY)); + new StringTextComponent(" | " + stacks + "\u25A4 +" + remainder + "\n").withStyle(TextFormatting.GRAY)); } } diff --git a/src/main/java/com/simibubi/create/content/schematics/SchematicPrinter.java b/src/main/java/com/simibubi/create/content/schematics/SchematicPrinter.java index cc4634615..99dd33f7a 100644 --- a/src/main/java/com/simibubi/create/content/schematics/SchematicPrinter.java +++ b/src/main/java/com/simibubi/create/content/schematics/SchematicPrinter.java @@ -80,9 +80,9 @@ public class SchematicPrinter { schematicAnchor = NBTUtil.readBlockPos(blueprint.getTag().getCompound("Anchor")); blockReader = new SchematicWorld(schematicAnchor, originalWorld); - activeTemplate.place(blockReader, schematicAnchor, settings, blockReader.getRandom()); + activeTemplate.placeInWorldChunk(blockReader, schematicAnchor, settings, blockReader.getRandom()); - StructureTransform transform = new StructureTransform(settings.getCenterOffset(), Direction.Axis.Y, + StructureTransform transform = new StructureTransform(settings.getRotationPivot(), Direction.Axis.Y, settings.getRotation(), settings.getMirror()); for (TileEntity te : blockReader.tileEntities.values()) { transform.apply(te); @@ -92,7 +92,7 @@ public class SchematicPrinter { printStage = PrintStage.BLOCKS; deferredBlocks.clear(); MutableBoundingBox bounds = blockReader.getBounds(); - currentPos = new BlockPos(bounds.minX - 1, bounds.minY, bounds.minZ); + currentPos = new BlockPos(bounds.x0 - 1, bounds.y0, bounds.z0); schematicLoaded = true; } @@ -113,7 +113,7 @@ public class SchematicPrinter { public BlockPos getCurrentTarget() { if (!isLoaded()) return null; - return schematicAnchor.add(currentPos); + return schematicAnchor.offset(currentPos); } public PrintStage getPrintStage() { @@ -148,7 +148,7 @@ public class SchematicPrinter { entityHandler.handle(target, entity); } else { BlockState blockState = BlockHelper.setZeroAge(blockReader.getBlockState(target)); - TileEntity tileEntity = blockReader.getTileEntity(target); + TileEntity tileEntity = blockReader.getBlockEntity(target); blockHandler.handle(target, blockState, tileEntity); } } @@ -173,28 +173,28 @@ public class SchematicPrinter { public boolean shouldPlaceBlock(World world, PlacementPredicate predicate, BlockPos pos) { BlockState state = BlockHelper.setZeroAge(blockReader.getBlockState(pos)); - TileEntity tileEntity = blockReader.getTileEntity(pos); + TileEntity tileEntity = blockReader.getBlockEntity(pos); BlockState toReplace = world.getBlockState(pos); BlockState toReplaceOther = null; - if (state.contains(BlockStateProperties.BED_PART) && state.contains(BlockStateProperties.HORIZONTAL_FACING) - && state.get(BlockStateProperties.BED_PART) == BedPart.FOOT) - toReplaceOther = world.getBlockState(pos.offset(state.get(BlockStateProperties.HORIZONTAL_FACING))); - if (state.contains(BlockStateProperties.DOUBLE_BLOCK_HALF) - && state.get(BlockStateProperties.DOUBLE_BLOCK_HALF) == DoubleBlockHalf.LOWER) - toReplaceOther = world.getBlockState(pos.up()); + if (state.hasProperty(BlockStateProperties.BED_PART) && state.hasProperty(BlockStateProperties.HORIZONTAL_FACING) + && state.getValue(BlockStateProperties.BED_PART) == BedPart.FOOT) + toReplaceOther = world.getBlockState(pos.relative(state.getValue(BlockStateProperties.HORIZONTAL_FACING))); + if (state.hasProperty(BlockStateProperties.DOUBLE_BLOCK_HALF) + && state.getValue(BlockStateProperties.DOUBLE_BLOCK_HALF) == DoubleBlockHalf.LOWER) + toReplaceOther = world.getBlockState(pos.above()); - if (!world.isBlockPresent(pos)) + if (!world.isLoaded(pos)) return false; - if (!world.getWorldBorder().contains(pos)) + if (!world.getWorldBorder().isWithinBounds(pos)) return false; if (toReplace == state) return false; - if (toReplace.getBlockHardness(world, pos) == -1 - || (toReplaceOther != null && toReplaceOther.getBlockHardness(world, pos) == -1)) + if (toReplace.getDestroySpeed(world, pos) == -1 + || (toReplaceOther != null && toReplaceOther.getDestroySpeed(world, pos) == -1)) return false; - boolean isNormalCube = state.isNormalCube(blockReader, currentPos); + boolean isNormalCube = state.isRedstoneConductor(blockReader, currentPos); return predicate.shouldPlace(pos, state, tileEntity, toReplace, toReplaceOther, isNormalCube); } @@ -206,18 +206,18 @@ public class SchematicPrinter { BlockPos target = getCurrentTarget(); BlockState blockState = BlockHelper.setZeroAge(blockReader.getBlockState(target)); - TileEntity tileEntity = blockReader.getTileEntity(target); + TileEntity tileEntity = blockReader.getBlockEntity(target); return ItemRequirement.of(blockState, tileEntity); } public int markAllBlockRequirements(MaterialChecklist checklist, World world, PlacementPredicate predicate) { int blocksToPlace = 0; for (BlockPos pos : blockReader.getAllPositions()) { - BlockPos relPos = pos.add(schematicAnchor); + BlockPos relPos = pos.offset(schematicAnchor); BlockState required = blockReader.getBlockState(relPos); - TileEntity requiredTE = blockReader.getTileEntity(relPos); + TileEntity requiredTE = blockReader.getBlockEntity(relPos); - if (!world.isAreaLoaded(pos.add(schematicAnchor), 0)) { + if (!world.isAreaLoaded(pos.offset(schematicAnchor), 0)) { checklist.warnBlockNotLoaded(); continue; } @@ -267,30 +267,30 @@ public class SchematicPrinter { if (printStage == PrintStage.ENTITIES) { if (printingEntityIndex + 1 < entities.size()) { printingEntityIndex++; - currentPos = entities.get(printingEntityIndex).getBlockPos().subtract(schematicAnchor); + currentPos = entities.get(printingEntityIndex).blockPosition().subtract(schematicAnchor); } else { // Reached end of printing return false; } } - } while (!blockReader.getBounds().isVecInside(currentPos)); + } while (!blockReader.getBounds().isInside(currentPos)); // More things available to print return true; } public boolean tryAdvanceCurrentPos() { - currentPos = currentPos.offset(Direction.EAST); + currentPos = currentPos.relative(Direction.EAST); MutableBoundingBox bounds = blockReader.getBounds(); - BlockPos posInBounds = currentPos.add(-bounds.minX, -bounds.minY, -bounds.minZ); + BlockPos posInBounds = currentPos.offset(-bounds.x0, -bounds.y0, -bounds.z0); - if (posInBounds.getX() > bounds.getXSize()) - currentPos = new BlockPos(bounds.minX, currentPos.getY(), currentPos.getZ() + 1).west(); - if (posInBounds.getZ() > bounds.getZSize()) - currentPos = new BlockPos(currentPos.getX(), currentPos.getY() + 1, bounds.minZ).west(); + if (posInBounds.getX() > bounds.getXSpan()) + currentPos = new BlockPos(bounds.x0, currentPos.getY(), currentPos.getZ() + 1).west(); + if (posInBounds.getZ() > bounds.getZSpan()) + currentPos = new BlockPos(currentPos.getX(), currentPos.getY() + 1, bounds.z0).west(); // End of blocks reached - if (currentPos.getY() > bounds.getYSize()) { + if (currentPos.getY() > bounds.getYSpan()) { printStage = PrintStage.DEFERRED_BLOCKS; return false; } diff --git a/src/main/java/com/simibubi/create/content/schematics/SchematicProcessor.java b/src/main/java/com/simibubi/create/content/schematics/SchematicProcessor.java index 110444475..7539d6108 100644 --- a/src/main/java/com/simibubi/create/content/schematics/SchematicProcessor.java +++ b/src/main/java/com/simibubi/create/content/schematics/SchematicProcessor.java @@ -51,10 +51,10 @@ public class SchematicProcessor extends StructureProcessor { @Override public Template.EntityInfo processEntity(IWorldReader world, BlockPos pos, Template.EntityInfo rawInfo, Template.EntityInfo info, PlacementSettings settings, Template template) { - return EntityType.readEntityType(info.nbt).flatMap(type -> { + return EntityType.by(info.nbt).flatMap(type -> { if (world instanceof World) { Entity e = type.create((World) world); - if (e != null && !e.ignoreItemEntityData()) { + if (e != null && !e.onlyOpCanSetNbt()) { return Optional.of(info); } } diff --git a/src/main/java/com/simibubi/create/content/schematics/SchematicWorld.java b/src/main/java/com/simibubi/create/content/schematics/SchematicWorld.java index 58df85ed1..c06e3e938 100644 --- a/src/main/java/com/simibubi/create/content/schematics/SchematicWorld.java +++ b/src/main/java/com/simibubi/create/content/schematics/SchematicWorld.java @@ -67,13 +67,13 @@ public class SchematicWorld extends WrappedWorld implements IServerWorld { } @Override - public boolean addEntity(Entity entityIn) { + public boolean addFreshEntity(Entity entityIn) { if (entityIn instanceof ItemFrameEntity) - ((ItemFrameEntity) entityIn).getDisplayedItem() + ((ItemFrameEntity) entityIn).getItem() .setTag(null); if (entityIn instanceof ArmorStandEntity) { ArmorStandEntity armorStandEntity = (ArmorStandEntity) entityIn; - armorStandEntity.getEquipmentAndArmor() + armorStandEntity.getAllSlots() .forEach(stack -> stack.setTag(null)); } @@ -85,7 +85,7 @@ public class SchematicWorld extends WrappedWorld implements IServerWorld { } @Override - public TileEntity getTileEntity(BlockPos pos) { + public TileEntity getBlockEntity(BlockPos pos) { if (isOutsideBuildHeight(pos)) return null; if (tileEntities.containsKey(pos)) @@ -111,18 +111,18 @@ public class SchematicWorld extends WrappedWorld implements IServerWorld { } protected void onTEadded(TileEntity tileEntity, BlockPos pos) { - tileEntity.setLocation(this, pos); + tileEntity.setLevelAndPosition(this, pos); } @Override public BlockState getBlockState(BlockPos globalPos) { BlockPos pos = globalPos.subtract(anchor); - if (pos.getY() - bounds.minY == -1 && !renderMode) - return Blocks.GRASS_BLOCK.getDefaultState(); - if (getBounds().isVecInside(pos) && blocks.containsKey(pos)) + if (pos.getY() - bounds.y0 == -1 && !renderMode) + return Blocks.GRASS_BLOCK.defaultBlockState(); + if (getBounds().isInside(pos) && blocks.containsKey(pos)) return processBlockStateForPrinting(blocks.get(pos)); - return Blocks.AIR.getDefaultState(); + return Blocks.AIR.defaultBlockState(); } public Map getBlockMap() { @@ -140,62 +140,62 @@ public class SchematicWorld extends WrappedWorld implements IServerWorld { } @Override - public int getLightLevel(LightType p_226658_1_, BlockPos p_226658_2_) { + public int getBrightness(LightType p_226658_1_, BlockPos p_226658_2_) { return 10; } @Override - public List getEntitiesInAABBexcluding(Entity arg0, AxisAlignedBB arg1, Predicate arg2) { + public List getEntities(Entity arg0, AxisAlignedBB arg1, Predicate arg2) { return Collections.emptyList(); } @Override - public List getEntitiesWithinAABB(Class arg0, AxisAlignedBB arg1, + public List getEntitiesOfClass(Class arg0, AxisAlignedBB arg1, Predicate arg2) { return Collections.emptyList(); } @Override - public List getPlayers() { + public List players() { return Collections.emptyList(); } @Override - public int getSkylightSubtracted() { + public int getSkyDarken() { return 0; } @Override - public boolean hasBlockState(BlockPos pos, Predicate predicate) { + public boolean isStateAtPosition(BlockPos pos, Predicate predicate) { return predicate.test(getBlockState(pos)); } @Override public boolean destroyBlock(BlockPos arg0, boolean arg1) { - return setBlockState(arg0, Blocks.AIR.getDefaultState(), 3); + return setBlock(arg0, Blocks.AIR.defaultBlockState(), 3); } @Override public boolean removeBlock(BlockPos arg0, boolean arg1) { - return setBlockState(arg0, Blocks.AIR.getDefaultState(), 3); + return setBlock(arg0, Blocks.AIR.defaultBlockState(), 3); } @Override - public boolean setBlockState(BlockPos pos, BlockState arg1, int arg2) { - pos = pos.toImmutable() + public boolean setBlock(BlockPos pos, BlockState arg1, int arg2) { + pos = pos.immutable() .subtract(anchor); - bounds.expandTo(new MutableBoundingBox(pos, pos)); + bounds.expand(new MutableBoundingBox(pos, pos)); blocks.put(pos, arg1); if (tileEntities.containsKey(pos)) { TileEntity tileEntity = tileEntities.get(pos); if (!tileEntity.getType() - .isValidBlock(arg1.getBlock())) { + .isValid(arg1.getBlock())) { tileEntities.remove(pos); renderedTileEntities.remove(tileEntity); } } - TileEntity tileEntity = getTileEntity(pos); + TileEntity tileEntity = getBlockEntity(pos); if (tileEntity != null) tileEntities.put(pos, tileEntity); @@ -203,16 +203,16 @@ public class SchematicWorld extends WrappedWorld implements IServerWorld { } @Override - public void notifyBlockUpdate(BlockPos pos, BlockState oldState, BlockState newState, int flags) { } + public void sendBlockUpdated(BlockPos pos, BlockState oldState, BlockState newState, int flags) { } @Override - public ITickList getPendingBlockTicks() { - return EmptyTickList.get(); + public ITickList getBlockTicks() { + return EmptyTickList.empty(); } @Override - public ITickList getPendingFluidTicks() { - return EmptyTickList.get(); + public ITickList getLiquidTicks() { + return EmptyTickList.empty(); } public MutableBoundingBox getBounds() { @@ -224,13 +224,13 @@ public class SchematicWorld extends WrappedWorld implements IServerWorld { } protected BlockState processBlockStateForPrinting(BlockState state) { - if (state.getBlock() instanceof AbstractFurnaceBlock && state.contains(BlockStateProperties.LIT)) - state = state.with(BlockStateProperties.LIT, false); + if (state.getBlock() instanceof AbstractFurnaceBlock && state.hasProperty(BlockStateProperties.LIT)) + state = state.setValue(BlockStateProperties.LIT, false); return state; } @Override - public ServerWorld getWorld() { + public ServerWorld getLevel() { if (this.world instanceof ServerWorld) { return (ServerWorld) this.world; } diff --git a/src/main/java/com/simibubi/create/content/schematics/ServerSchematicLoader.java b/src/main/java/com/simibubi/create/content/schematics/ServerSchematicLoader.java index 151fdaf08..9c1b40ea1 100644 --- a/src/main/java/com/simibubi/create/content/schematics/ServerSchematicLoader.java +++ b/src/main/java/com/simibubi/create/content/schematics/ServerSchematicLoader.java @@ -116,7 +116,7 @@ public class ServerSchematicLoader { try { // Validate Referenced Block - SchematicTableTileEntity table = getTable(player.getEntityWorld(), pos); + SchematicTableTileEntity table = getTable(player.getCommandSenderWorld(), pos); if (table == null) return; @@ -142,7 +142,7 @@ public class ServerSchematicLoader { // Open Stream OutputStream writer = Files.newOutputStream(uploadPath); - activeUploads.put(playerSchematicId, new SchematicUploadEntry(writer, size, player.getServerWorld(), pos)); + activeUploads.put(playerSchematicId, new SchematicUploadEntry(writer, size, player.getLevel(), pos)); // Notify Tile Entity table.startUpload(schematic); @@ -157,9 +157,9 @@ public class ServerSchematicLoader { Integer maxFileSize = getConfig().maxTotalSchematicSize.get(); if (size > maxFileSize * 1000) { player.sendMessage(new TranslationTextComponent("create.schematics.uploadTooLarge") - .append(new StringTextComponent(" (" + size / 1000 + " KB).")), player.getUniqueID()); + .append(new StringTextComponent(" (" + size / 1000 + " KB).")), player.getUUID()); player.sendMessage(new TranslationTextComponent("create.schematics.maxAllowedSize") - .append(new StringTextComponent(" " + maxFileSize + " KB")), player.getUniqueID()); + .append(new StringTextComponent(" " + maxFileSize + " KB")), player.getUUID()); return false; } return true; @@ -232,7 +232,7 @@ public class ServerSchematicLoader { } public SchematicTableTileEntity getTable(World world, BlockPos pos) { - TileEntity te = world.getTileEntity(pos); + TileEntity te = world.getBlockEntity(pos); if (!(te instanceof SchematicTableTileEntity)) return null; SchematicTableTileEntity table = (SchematicTableTileEntity) te; @@ -291,7 +291,7 @@ public class ServerSchematicLoader { } // Not holding S&Q - if (!AllItems.SCHEMATIC_AND_QUILL.isIn(player.getHeldItemMainhand())) + if (!AllItems.SCHEMATIC_AND_QUILL.isIn(player.getMainHandItem())) return; try { @@ -315,12 +315,12 @@ public class ServerSchematicLoader { } Template t = new Template(); - t.takeBlocksFromWorld(world, pos, bounds, true, Blocks.AIR); + t.fillFromWorld(world, pos, bounds, true, Blocks.AIR); try (OutputStream outputStream = Files.newOutputStream(path)) { - CompoundNBT nbttagcompound = t.writeToNBT(new CompoundNBT()); + CompoundNBT nbttagcompound = t.save(new CompoundNBT()); CompressedStreamTools.writeCompressed(nbttagcompound, outputStream); - player.setHeldItem(Hand.MAIN_HAND, SchematicItem.create(schematic, player.getGameProfile().getName())); + player.setItemInHand(Hand.MAIN_HAND, SchematicItem.create(schematic, player.getGameProfile().getName())); } catch (IOException e) { e.printStackTrace(); diff --git a/src/main/java/com/simibubi/create/content/schematics/block/LaunchedItem.java b/src/main/java/com/simibubi/create/content/schematics/block/LaunchedItem.java index 1e123ebfb..d542734bd 100644 --- a/src/main/java/com/simibubi/create/content/schematics/block/LaunchedItem.java +++ b/src/main/java/com/simibubi/create/content/schematics/block/LaunchedItem.java @@ -33,7 +33,7 @@ public abstract class LaunchedItem { } private static int ticksForDistance(BlockPos start, BlockPos target) { - return (int) (Math.max(10, MathHelper.sqrt(MathHelper.sqrt(target.distanceSq(start))) * 4f)); + return (int) (Math.max(10, MathHelper.sqrt(MathHelper.sqrt(target.distSqr(start))) * 4f)); } LaunchedItem() {} @@ -50,7 +50,7 @@ public abstract class LaunchedItem { ticksRemaining--; return false; } - if (world.isRemote) + if (world.isClientSide) return false; place(world); @@ -79,7 +79,7 @@ public abstract class LaunchedItem { target = NBTUtil.readBlockPos(c.getCompound("Target")); ticksRemaining = c.getInt("TicksLeft"); totalTicks = c.getInt("TotalTicks"); - stack = ItemStack.read(c.getCompound("Stack")); + stack = ItemStack.of(c.getCompound("Stack")); } public static class ForBlockState extends LaunchedItem { @@ -150,13 +150,13 @@ public abstract class LaunchedItem { @Override void place(World world) { // todo place belt - boolean isStart = state.get(BeltBlock.PART) == BeltPart.START; + boolean isStart = state.getValue(BeltBlock.PART) == BeltPart.START; BlockPos offset = BeltBlock.nextSegmentPosition(state, BlockPos.ZERO, isStart); int i = length - 1; - Axis axis = state.get(BeltBlock.HORIZONTAL_FACING).rotateY().getAxis(); - world.setBlockState(target, AllBlocks.SHAFT.getDefaultState().with(AbstractShaftBlock.AXIS, axis)); + Axis axis = state.getValue(BeltBlock.HORIZONTAL_FACING).getClockWise().getAxis(); + world.setBlockAndUpdate(target, AllBlocks.SHAFT.getDefaultState().setValue(AbstractShaftBlock.AXIS, axis)); BeltConnectorItem - .createBelts(world, target, target.add(offset.getX() * i, offset.getY() * i, offset.getZ() * i)); + .createBelts(world, target, target.offset(offset.getX() * i, offset.getY() * i, offset.getZ() * i)); } } @@ -176,7 +176,7 @@ public abstract class LaunchedItem { public boolean update(World world) { if (deferredTag != null && entity == null) { try { - Optional loadEntityUnchecked = EntityType.loadEntityUnchecked(deferredTag, world); + Optional loadEntityUnchecked = EntityType.create(deferredTag, world); if (!loadEntityUnchecked.isPresent()) return true; entity = loadEntityUnchecked.get(); @@ -205,7 +205,7 @@ public abstract class LaunchedItem { @Override void place(World world) { - world.addEntity(entity); + world.addFreshEntity(entity); } } diff --git a/src/main/java/com/simibubi/create/content/schematics/block/SchematicTableBlock.java b/src/main/java/com/simibubi/create/content/schematics/block/SchematicTableBlock.java index 1640a46b0..3b20bce84 100644 --- a/src/main/java/com/simibubi/create/content/schematics/block/SchematicTableBlock.java +++ b/src/main/java/com/simibubi/create/content/schematics/block/SchematicTableBlock.java @@ -25,6 +25,8 @@ import net.minecraft.world.IBlockReader; import net.minecraft.world.World; import net.minecraftforge.fml.network.NetworkHooks; +import net.minecraft.block.AbstractBlock.Properties; + public class SchematicTableBlock extends HorizontalBlock implements ITE { public SchematicTableBlock(Properties properties) { @@ -32,19 +34,19 @@ public class SchematicTableBlock extends HorizontalBlock implements ITE builder) { - builder.add(HORIZONTAL_FACING); - super.fillStateContainer(builder); + protected void createBlockStateDefinition(Builder builder) { + builder.add(FACING); + super.createBlockStateDefinition(builder); } @Override - public PushReaction getPushReaction(BlockState state) { + public PushReaction getPistonPushReaction(BlockState state) { return PushReaction.BLOCK; } @Override public BlockState getStateForPlacement(BlockItemUseContext context) { - return this.getDefaultState().with(HORIZONTAL_FACING, context.getPlacementHorizontalFacing().getOpposite()); + return this.defaultBlockState().setValue(FACING, context.getHorizontalDirection().getOpposite()); } @Override @@ -55,7 +57,7 @@ public class SchematicTableBlock extends HorizontalBlock implements ITE ItemHelper.dropContents(worldIn, pos, te.inventory)); - worldIn.removeTileEntity(pos); + worldIn.removeBlockEntity(pos); } @Override @@ -94,7 +96,7 @@ public class SchematicTableBlock extends HorizontalBlock implements ITE type, int id, PlayerInventory inv, PacketBuffer extraData) { super(type, id); player = inv.player; - ClientWorld world = Minecraft.getInstance().world; - TileEntity tileEntity = world.getTileEntity(extraData.readBlockPos()); + ClientWorld world = Minecraft.getInstance().level; + TileEntity tileEntity = world.getBlockEntity(extraData.readBlockPos()); if (tileEntity instanceof SchematicTableTileEntity) { this.te = (SchematicTableTileEntity) tileEntity; - this.te.handleUpdateTag(te.getBlockState(), extraData.readCompoundTag()); + this.te.handleUpdateTag(te.getBlockState(), extraData.readNbt()); init(); } } @@ -48,7 +48,7 @@ public class SchematicTableContainer extends Container { protected void init() { inputSlot = new SlotItemHandler(te.inventory, 0, 21, 57) { @Override - public boolean isItemValid(ItemStack stack) { + public boolean mayPlace(ItemStack stack) { return AllItems.EMPTY_SCHEMATIC.isIn(stack) || AllItems.SCHEMATIC_AND_QUILL.isIn(stack) || AllItems.SCHEMATIC.isIn(stack); } @@ -56,7 +56,7 @@ public class SchematicTableContainer extends Container { outputSlot = new SlotItemHandler(te.inventory, 1, 166, 57) { @Override - public boolean isItemValid(ItemStack stack) { + public boolean mayPlace(ItemStack stack) { return false; } }; @@ -75,29 +75,29 @@ public class SchematicTableContainer extends Container { this.addSlot(new Slot(player.inventory, hotbarSlot, 38 + hotbarSlot * 18, 163)); } - detectAndSendChanges(); + broadcastChanges(); } public boolean canWrite() { - return inputSlot.getHasStack() && !outputSlot.getHasStack(); + return inputSlot.hasItem() && !outputSlot.hasItem(); } @Override - public boolean canInteractWith(PlayerEntity player) { + public boolean stillValid(PlayerEntity player) { return te != null && te.canPlayerUse(player); } @Override - public ItemStack transferStackInSlot(PlayerEntity playerIn, int index) { + public ItemStack quickMoveStack(PlayerEntity playerIn, int index) { Slot clickedSlot = getSlot(index); - if (!clickedSlot.getHasStack()) + if (!clickedSlot.hasItem()) return ItemStack.EMPTY; - ItemStack stack = clickedSlot.getStack(); + ItemStack stack = clickedSlot.getItem(); if (index < 2) - mergeItemStack(stack, 2, inventorySlots.size(), false); + moveItemStackTo(stack, 2, slots.size(), false); else - mergeItemStack(stack, 0, 1, false); + moveItemStackTo(stack, 0, 1, false); return ItemStack.EMPTY; } diff --git a/src/main/java/com/simibubi/create/content/schematics/block/SchematicTableScreen.java b/src/main/java/com/simibubi/create/content/schematics/block/SchematicTableScreen.java index 658c99f78..deac70f34 100644 --- a/src/main/java/com/simibubi/create/content/schematics/block/SchematicTableScreen.java +++ b/src/main/java/com/simibubi/create/content/schematics/block/SchematicTableScreen.java @@ -70,15 +70,15 @@ public class SchematicTableScreen extends AbstractSimiContainerScreen availableSchematics = CreateClient.SCHEMATIC_SENDER.getAvailableSchematics(); - int x = guiLeft; - int y = guiTop; + int x = leftPos; + int y = topPos; schematicsLabel = new Label(x + 49, y + 26, StringTextComponent.EMPTY).withShadow(); schematicsLabel.text = StringTextComponent.EMPTY; if (!availableSchematics.isEmpty()) { schematicsArea = new SelectionScrollInput(x + 45, y + 21, 139, 18).forOptions(availableSchematics) - .titled(availableSchematicsTitle.copy()) + .titled(availableSchematicsTitle.plainCopy()) .writingTo(schematicsLabel); widgets.add(schematicsArea); widgets.add(schematicsLabel); @@ -97,33 +97,33 @@ public class SchematicTableScreen extends AbstractSimiContainerScreenat(x + background.width, y + background.height - 40, -200) @@ -135,29 +135,29 @@ public class SchematicTableScreen extends AbstractSimiContainerScreen availableSchematics = schematicSender.getAvailableSchematics(); ITextComponent schematic = availableSchematics.get(schematicsArea.getState()); - schematicSender.startNewUpload(schematic.getUnformattedComponentText()); + schematicSender.startNewUpload(schematic.getContents()); } if (folderButton.isHovered()) { - Util.getOSType() + Util.getPlatform() .openFile(Paths.get("schematics/") .toFile()); } @@ -202,9 +202,9 @@ public class SchematicTableScreen extends AbstractSimiContainerScreen { public SchematicannonBlock(Properties properties) { @@ -38,7 +40,7 @@ public class SchematicannonBlock extends Block implements ITE NetworkHooks.openGui((ServerPlayerEntity) player, te, te::sendToContainer)); @@ -58,12 +60,12 @@ public class SchematicannonBlock extends Block implements ITE ItemHelper.dropContents(worldIn, pos, te.inventory)); - worldIn.removeTileEntity(pos); + worldIn.removeBlockEntity(pos); } @Override diff --git a/src/main/java/com/simibubi/create/content/schematics/block/SchematicannonContainer.java b/src/main/java/com/simibubi/create/content/schematics/block/SchematicannonContainer.java index f3dee8ab1..d58a88a24 100644 --- a/src/main/java/com/simibubi/create/content/schematics/block/SchematicannonContainer.java +++ b/src/main/java/com/simibubi/create/content/schematics/block/SchematicannonContainer.java @@ -22,11 +22,11 @@ public class SchematicannonContainer extends Container { public SchematicannonContainer(ContainerType type, int id, PlayerInventory inv, PacketBuffer buffer) { super(type, id); player = inv.player; - ClientWorld world = Minecraft.getInstance().world; - TileEntity tileEntity = world.getTileEntity(buffer.readBlockPos()); + ClientWorld world = Minecraft.getInstance().level; + TileEntity tileEntity = world.getBlockEntity(buffer.readBlockPos()); if (tileEntity instanceof SchematicannonTileEntity) { this.te = (SchematicannonTileEntity) tileEntity; - this.te.handleUpdateTag(te.getBlockState(), buffer.readCompoundTag()); + this.te.handleUpdateTag(te.getBlockState(), buffer.readNbt()); init(); } } @@ -62,17 +62,17 @@ public class SchematicannonContainer extends Container { for (int hotbarSlot = 0; hotbarSlot < 9; ++hotbarSlot) addSlot(new Slot(player.inventory, hotbarSlot, invX + hotbarSlot * 18, invY + 58)); - detectAndSendChanges(); + broadcastChanges(); } @Override - public boolean canInteractWith(PlayerEntity player) { + public boolean stillValid(PlayerEntity player) { return te != null && te.canPlayerUse(player); } @Override - public void onContainerClosed(PlayerEntity playerIn) { - super.onContainerClosed(playerIn); + public void removed(PlayerEntity playerIn) { + super.removed(playerIn); } public SchematicannonTileEntity getTileEntity() { @@ -80,17 +80,17 @@ public class SchematicannonContainer extends Container { } @Override - public ItemStack transferStackInSlot(PlayerEntity playerIn, int index) { + public ItemStack quickMoveStack(PlayerEntity playerIn, int index) { Slot clickedSlot = getSlot(index); - if (!clickedSlot.getHasStack()) + if (!clickedSlot.hasItem()) return ItemStack.EMPTY; - ItemStack stack = clickedSlot.getStack(); + ItemStack stack = clickedSlot.getItem(); if (index < 5) { - mergeItemStack(stack, 5, inventorySlots.size(), false); + moveItemStackTo(stack, 5, slots.size(), false); } else { - if (mergeItemStack(stack, 0, 1, false) || mergeItemStack(stack, 2, 3, false) - || mergeItemStack(stack, 4, 5, false)) + if (moveItemStackTo(stack, 0, 1, false) || moveItemStackTo(stack, 2, 3, false) + || moveItemStackTo(stack, 4, 5, false)) ; } 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 98db7d37b..74903d25c 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 @@ -44,12 +44,12 @@ public class SchematicannonInstance extends TileEntityInstance(4); @@ -168,7 +168,7 @@ public class SchematicannonScreen extends AbstractSimiContainerScreen tip = button.getToolTip(); - tip.add((enabled ? optionEnabled : optionDisabled).copy().formatted(BLUE)); + tip.add((enabled ? optionEnabled : optionDisabled).plainCopy().withStyle(BLUE)); tip.addAll(TooltipHelper.cutTextComponent(Lang.translate("gui.schematicannon.option." + tooltipKey + ".description"), GRAY, GRAY)); } @@ -248,16 +248,16 @@ public class SchematicannonScreen extends AbstractSimiContainerScreen= fuelX && mouseY >= fuelY && mouseX <= fuelX + AllGuiTextures.SCHEMATICANNON_FUEL.width && mouseY <= fuelY + AllGuiTextures.SCHEMATICANNON_FUEL.height) { List tooltip = getFuelLevelTooltip(te); - renderTooltip(matrixStack, tooltip, mouseX, mouseY); + renderComponentTooltip(matrixStack, tooltip, mouseX, mouseY); } - if (hoveredSlot != null && !hoveredSlot.getHasStack()) { - if (hoveredSlot.slotNumber == 0) - renderTooltip(matrixStack, + if (hoveredSlot != null && !hoveredSlot.hasItem()) { + if (hoveredSlot.index == 0) + renderComponentTooltip(matrixStack, TooltipHelper.cutTextComponent(Lang.translate(_slotSchematic), GRAY, TextFormatting.BLUE), mouseX, mouseY); - if (hoveredSlot.slotNumber == 2) - renderTooltip(matrixStack, + if (hoveredSlot.index == 2) + renderComponentTooltip(matrixStack, TooltipHelper.cutTextComponent(Lang.translate(_slotListPrinter), GRAY, TextFormatting.BLUE), mouseX, mouseY); - if (hoveredSlot.slotNumber == 4) - renderTooltip(matrixStack, + if (hoveredSlot.index == 4) + renderComponentTooltip(matrixStack, TooltipHelper.cutTextComponent(Lang.translate(_slotGunpowder), GRAY, TextFormatting.BLUE), mouseX, mouseY); } @@ -371,15 +371,15 @@ public class SchematicannonScreen extends AbstractSimiContainerScreen tileEntityTypeIn) { @@ -141,13 +142,13 @@ public class SchematicannonTileEntity extends SmartTileEntity implements INamedC attachedInventories.clear(); for (Direction facing : Iterate.directions) { - if (!world.isBlockPresent(pos.offset(facing))) + if (!level.isLoaded(worldPosition.relative(facing))) continue; - if (AllBlocks.CREATIVE_CRATE.has(world.getBlockState(pos.offset(facing)))) + if (AllBlocks.CREATIVE_CRATE.has(level.getBlockState(worldPosition.relative(facing)))) hasCreativeCrate = true; - TileEntity tileEntity = world.getTileEntity(pos.offset(facing)); + TileEntity tileEntity = level.getBlockEntity(worldPosition.relative(facing)); if (tileEntity != null) { LazyOptional capability = tileEntity.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, facing.getOpposite()); @@ -175,7 +176,7 @@ public class SchematicannonTileEntity extends SmartTileEntity implements INamedC missingItem = null; if (compound.contains("MissingItem")) - missingItem = ItemStack.read(compound.getCompound("MissingItem")); + missingItem = ItemStack.of(compound.getCompound("MissingItem")); // Settings CompoundNBT options = compound.getCompound("Options"); @@ -205,7 +206,7 @@ public class SchematicannonTileEntity extends SmartTileEntity implements INamedC BlockPos readBlockPos = launched.target; // Always write to Server tile - if (world == null || !world.isRemote) { + if (level == null || !level.isClientSide) { flyingBlocks.add(launched); continue; } @@ -281,7 +282,7 @@ public class SchematicannonTileEntity extends SmartTileEntity implements INamedC previousTarget = printer.getCurrentTarget(); tickFlyingBlocks(); - if (world.isRemote) + if (level.isClientSide) return; // Update Fuel and Paper @@ -302,7 +303,7 @@ public class SchematicannonTileEntity extends SmartTileEntity implements INamedC // Update Client Tile if (sendUpdate) { sendUpdate = false; - world.notifyBlockUpdate(pos, getBlockState(), getBlockState(), 6); + level.sendBlockUpdated(worldPosition, getBlockState(), getBlockState(), 6); } } @@ -369,7 +370,7 @@ public class SchematicannonTileEntity extends SmartTileEntity implements INamedC } // Check block - if (!getWorld().isAreaLoaded(printer.getCurrentTarget(), 0)) { + if (!getLevel().isAreaLoaded(printer.getCurrentTarget(), 0)) { positionNotLoaded = true; statusMsg = "targetNotLoaded"; state = State.PAUSED; @@ -383,7 +384,7 @@ public class SchematicannonTileEntity extends SmartTileEntity implements INamedC // Get item requirement ItemRequirement requirement = printer.getCurrentRequirement(); - if (requirement.isInvalid() || !printer.shouldPlaceCurrent(world, this::shouldPlace)) { + if (requirement.isInvalid() || !printer.shouldPlaceCurrent(level, this::shouldPlace)) { statusMsg = "searching"; blockSkipped = true; return; @@ -455,7 +456,7 @@ public class SchematicannonTileEntity extends SmartTileEntity implements INamedC } // Load blocks into reader - printer.loadSchematic(blueprint, world, true); + printer.loadSchematic(blueprint, level, true); if (printer.isWorldEmpty()) { state = State.STOPPED; @@ -466,7 +467,7 @@ public class SchematicannonTileEntity extends SmartTileEntity implements INamedC return; } - if (!printer.getAnchor().withinDistance(getPos(), MAX_ANCHOR_DISTANCE)) { + if (!printer.getAnchor().closerThan(getBlockPos(), MAX_ANCHOR_DISTANCE)) { state = State.STOPPED; statusMsg = "targetOutsideRange"; printer.resetSchematic(); @@ -481,7 +482,7 @@ public class SchematicannonTileEntity extends SmartTileEntity implements INamedC } protected ItemStack getItemForBlock(BlockState blockState) { - Item item = BlockItem.BLOCK_TO_ITEM.getOrDefault(blockState.getBlock(), Items.AIR); + Item item = BlockItem.BY_BLOCK.getOrDefault(blockState.getBlock(), Items.AIR); return item == Items.AIR ? ItemStack.EMPTY : new ItemStack(item); } @@ -499,13 +500,13 @@ public class SchematicannonTileEntity extends SmartTileEntity implements INamedC ItemStack extractItem = iItemHandler.extractItem(slot, 1, true); if (!ItemRequirement.validate(required, extractItem)) continue; - if (!extractItem.isDamageable()) + if (!extractItem.isDamageableItem()) continue; if (!simulate) { ItemStack stack = iItemHandler.extractItem(slot, 1, false); - stack.setDamage(stack.getDamage() + 1); - if (stack.getDamage() <= stack.getMaxDamage()) { + stack.setDamageValue(stack.getDamageValue() + 1); + if (stack.getDamageValue() <= stack.getMaxDamage()) { if (iItemHandler.getStackInSlot(slot) .isEmpty()) iItemHandler.insertItem(slot, stack, false); @@ -562,7 +563,7 @@ public class SchematicannonTileEntity extends SmartTileEntity implements INamedC state = State.STOPPED; statusMsg = "finished"; resetPrinter(); - AllSoundEvents.SCHEMATICANNON_FINISH.playOnServer(world, pos); + AllSoundEvents.SCHEMATICANNON_FINISH.playOnServer(level, worldPosition); sendUpdate = true; } @@ -577,7 +578,7 @@ public class SchematicannonTileEntity extends SmartTileEntity implements INamedC protected boolean shouldPlace(BlockPos pos, BlockState state, TileEntity te, BlockState toReplace, BlockState toReplaceOther, boolean isNormalCube) { - if (pos.withinDistance(getPos(), 2f)) + if (pos.closerThan(getBlockPos(), 2f)) return false; if (!replaceTileEntities && (toReplace.hasTileEntity() || (toReplaceOther != null && toReplaceOther.hasTileEntity()))) @@ -586,19 +587,19 @@ public class SchematicannonTileEntity extends SmartTileEntity implements INamedC if (shouldIgnoreBlockState(state, te)) return false; - boolean placingAir = state.getBlock().isAir(state, world, pos); + boolean placingAir = state.getBlock().isAir(state, level, pos); if (replaceMode == 3) return true; if (replaceMode == 2 && !placingAir) return true; if (replaceMode == 1 - && (isNormalCube || (!toReplace.isNormalCube(world, pos) - && (toReplaceOther == null || !toReplaceOther.isNormalCube(world, pos)))) + && (isNormalCube || (!toReplace.isRedstoneConductor(level, pos) + && (toReplaceOther == null || !toReplaceOther.isRedstoneConductor(level, pos)))) && !placingAir) return true; - if (replaceMode == 0 && !toReplace.isNormalCube(world, pos) - && (toReplaceOther == null || !toReplaceOther.isNormalCube(world, pos)) && !placingAir) + if (replaceMode == 0 && !toReplace.isRedstoneConductor(level, pos) + && (toReplaceOther == null || !toReplaceOther.isRedstoneConductor(level, pos)) && !placingAir) return true; return false; @@ -616,10 +617,10 @@ public class SchematicannonTileEntity extends SmartTileEntity implements INamedC return false; // Block doesnt need to be placed twice (Doors, beds, double plants) - if (state.contains(BlockStateProperties.DOUBLE_BLOCK_HALF) - && state.get(BlockStateProperties.DOUBLE_BLOCK_HALF) == DoubleBlockHalf.UPPER) + if (state.hasProperty(BlockStateProperties.DOUBLE_BLOCK_HALF) + && state.getValue(BlockStateProperties.DOUBLE_BLOCK_HALF) == DoubleBlockHalf.UPPER) return true; - if (state.contains(BlockStateProperties.BED_PART) && state.get(BlockStateProperties.BED_PART) == BedPart.HEAD) + if (state.hasProperty(BlockStateProperties.BED_PART) && state.getValue(BlockStateProperties.BED_PART) == BedPart.HEAD) return true; if (state.getBlock() instanceof PistonHeadBlock) return true; @@ -630,7 +631,7 @@ public class SchematicannonTileEntity extends SmartTileEntity implements INamedC protected void tickFlyingBlocks() { List toRemove = new LinkedList<>(); for (LaunchedItem b : flyingBlocks) - if (b.update(world)) + if (b.update(level)) toRemove.add(b); flyingBlocks.removeAll(toRemove); } @@ -699,11 +700,11 @@ public class SchematicannonTileEntity extends SmartTileEntity implements INamedC public static BlockState stripBeltIfNotLast(BlockState blockState) { // is highest belt? boolean isLastSegment = false; - Direction facing = blockState.get(BeltBlock.HORIZONTAL_FACING); - BeltSlope slope = blockState.get(BeltBlock.SLOPE); + Direction facing = blockState.getValue(BeltBlock.HORIZONTAL_FACING); + BeltSlope slope = blockState.getValue(BeltBlock.SLOPE); boolean positive = facing.getAxisDirection() == AxisDirection.POSITIVE; - boolean start = blockState.get(BeltBlock.PART) == BeltPart.START; - boolean end = blockState.get(BeltBlock.PART) == BeltPart.END; + boolean start = blockState.getValue(BeltBlock.PART) == BeltPart.START; + boolean end = blockState.getValue(BeltBlock.PART) == BeltPart.END; switch (slope) { case DOWNWARD: @@ -718,9 +719,9 @@ public class SchematicannonTileEntity extends SmartTileEntity implements INamedC isLastSegment = positive && end || !positive && start; } if (!isLastSegment) - blockState = (blockState.get(BeltBlock.PART) == BeltPart.MIDDLE) ? Blocks.AIR.getDefaultState() + blockState = (blockState.getValue(BeltBlock.PART) == BeltPart.MIDDLE) ? Blocks.AIR.defaultBlockState() : AllBlocks.SHAFT.getDefaultState() - .with(AbstractShaftBlock.AXIS, facing.rotateY() + .setValue(AbstractShaftBlock.AXIS, facing.getClockWise() .getAxis()); return blockState; } @@ -736,7 +737,7 @@ public class SchematicannonTileEntity extends SmartTileEntity implements INamedC CompoundNBT data = null; if (tile != null) { if (AllBlockTags.SAFE_NBT.matches(blockState)) { - data = tile.write(new CompoundNBT()); + data = tile.save(new CompoundNBT()); data = NBTProcessors.process(tile, data, true); } else if (tile instanceof IPartialSafeNBT) { data = new CompoundNBT(); @@ -751,30 +752,30 @@ public class SchematicannonTileEntity extends SmartTileEntity implements INamedC protected void launchBelt(BlockPos target, BlockState state, int length) { blocksPlaced++; ItemStack connector = AllItems.BELT_CONNECTOR.asStack(); - flyingBlocks.add(new LaunchedItem.ForBelt(this.getPos(), target, connector, state, length)); + flyingBlocks.add(new LaunchedItem.ForBelt(this.getBlockPos(), target, connector, state, length)); playFiringSound(); } protected void launchBlock(BlockPos target, ItemStack stack, BlockState state, @Nullable CompoundNBT data) { - if (!state.getBlock().isAir(state, world, target)) + if (!state.getBlock().isAir(state, level, target)) blocksPlaced++; - flyingBlocks.add(new LaunchedItem.ForBlockState(this.getPos(), target, stack, state, data)); + flyingBlocks.add(new LaunchedItem.ForBlockState(this.getBlockPos(), target, stack, state, data)); playFiringSound(); } protected void launchEntity(BlockPos target, ItemStack stack, Entity entity) { blocksPlaced++; - flyingBlocks.add(new LaunchedItem.ForEntity(this.getPos(), target, stack, entity)); + flyingBlocks.add(new LaunchedItem.ForEntity(this.getBlockPos(), target, stack, entity)); playFiringSound(); } public void playFiringSound() { - AllSoundEvents.SCHEMATICANNON_LAUNCH_BLOCK.playOnServer(world, pos); + AllSoundEvents.SCHEMATICANNON_LAUNCH_BLOCK.playOnServer(level, worldPosition); } public void sendToContainer(PacketBuffer buffer) { - buffer.writeBlockPos(getPos()); - buffer.writeCompoundTag(getUpdateTag()); + buffer.writeBlockPos(getBlockPos()); + buffer.writeNbt(getUpdateTag()); } @Override @@ -794,7 +795,7 @@ public class SchematicannonTileEntity extends SmartTileEntity implements INamedC if (printer.isLoaded()) { blocksToPlace = blocksPlaced; - blocksToPlace += printer.markAllBlockRequirements(checklist, world, this::shouldPlace); + blocksToPlace += printer.markAllBlockRequirements(checklist, level, this::shouldPlace); printer.markAllEntityRequirements(checklist); } checklist.gathered.clear(); @@ -827,4 +828,6 @@ public class SchematicannonTileEntity extends SmartTileEntity implements INamedC public boolean shouldRenderNormally() { return true; } + + } diff --git a/src/main/java/com/simibubi/create/content/schematics/client/SchematicAndQuillHandler.java b/src/main/java/com/simibubi/create/content/schematics/client/SchematicAndQuillHandler.java index af0624b67..02243a42d 100644 --- a/src/main/java/com/simibubi/create/content/schematics/client/SchematicAndQuillHandler.java +++ b/src/main/java/com/simibubi/create/content/schematics/client/SchematicAndQuillHandler.java @@ -67,9 +67,9 @@ public class SchematicAndQuillHandler { return true; AxisAlignedBB bb = new AxisAlignedBB(firstPos, secondPos); - Vector3i vec = selectedFace.getDirectionVec(); - Vector3d projectedView = Minecraft.getInstance().gameRenderer.getActiveRenderInfo() - .getProjectedView(); + Vector3i vec = selectedFace.getNormal(); + Vector3d projectedView = Minecraft.getInstance().gameRenderer.getMainCamera() + .getPosition(); if (bb.contains(projectedView)) delta *= -1; @@ -79,17 +79,17 @@ public class SchematicAndQuillHandler { AxisDirection axisDirection = selectedFace.getAxisDirection(); if (axisDirection == AxisDirection.NEGATIVE) - bb = bb.offset(-x, -y, -z); + bb = bb.move(-x, -y, -z); - double maxX = Math.max(bb.maxX - x * axisDirection.getOffset(), bb.minX); - double maxY = Math.max(bb.maxY - y * axisDirection.getOffset(), bb.minY); - double maxZ = Math.max(bb.maxZ - z * axisDirection.getOffset(), bb.minZ); + double maxX = Math.max(bb.maxX - x * axisDirection.getStep(), bb.minX); + double maxY = Math.max(bb.maxY - y * axisDirection.getStep(), bb.minY); + double maxZ = Math.max(bb.maxZ - z * axisDirection.getStep(), bb.minZ); bb = new AxisAlignedBB(bb.minX, bb.minY, bb.minZ, maxX, maxY, maxZ); firstPos = new BlockPos(bb.minX, bb.minY, bb.minZ); secondPos = new BlockPos(bb.maxX, bb.maxY, bb.maxZ); - Lang.sendStatus(Minecraft.getInstance().player, "schematicAndQuill.dimensions", (int) bb.getXSize() + 1, - (int) bb.getYSize() + 1, (int) bb.getZSize() + 1); + Lang.sendStatus(Minecraft.getInstance().player, "schematicAndQuill.dimensions", (int) bb.getXsize() + 1, + (int) bb.getYsize() + 1, (int) bb.getZsize() + 1); return true; } @@ -102,7 +102,7 @@ public class SchematicAndQuillHandler { ClientPlayerEntity player = Minecraft.getInstance().player; - if (player.isSneaking()) { + if (player.isShiftKeyDown()) { discard(); return; } @@ -142,21 +142,21 @@ public class SchematicAndQuillHandler { if (AllKeys.ACTIVATE_TOOL.isPressed()) { float pt = AnimationTickHolder.getPartialTicks(); Vector3d targetVec = player.getEyePosition(pt) - .add(player.getLookVec() + .add(player.getLookAngle() .scale(range)); selectedPos = new BlockPos(targetVec); } else { - BlockRayTraceResult trace = RaycastHelper.rayTraceRange(player.world, player, 75); + BlockRayTraceResult trace = RaycastHelper.rayTraceRange(player.level, player, 75); if (trace != null && trace.getType() == Type.BLOCK) { - BlockPos hit = trace.getPos(); - boolean replaceable = player.world.getBlockState(hit) - .isReplaceable(new BlockItemUseContext(new ItemUseContext(player, Hand.MAIN_HAND, trace))); - if (trace.getFace() + BlockPos hit = trace.getBlockPos(); + boolean replaceable = player.level.getBlockState(hit) + .canBeReplaced(new BlockItemUseContext(new ItemUseContext(player, Hand.MAIN_HAND, trace))); + if (trace.getDirection() .getAxis() .isVertical() && !replaceable) - hit = hit.offset(trace.getFace()); + hit = hit.relative(trace.getDirection()); selectedPos = hit; } else selectedPos = null; @@ -164,10 +164,10 @@ public class SchematicAndQuillHandler { selectedFace = null; if (secondPos != null) { - AxisAlignedBB bb = new AxisAlignedBB(firstPos, secondPos).expand(1, 1, 1) - .grow(.45f); - Vector3d projectedView = Minecraft.getInstance().gameRenderer.getActiveRenderInfo() - .getProjectedView(); + AxisAlignedBB bb = new AxisAlignedBB(firstPos, secondPos).expandTowards(1, 1, 1) + .inflate(.45f); + Vector3d projectedView = Minecraft.getInstance().gameRenderer.getMainCamera() + .getPosition(); boolean inside = bb.contains(projectedView); PredicateTraceResult result = RaycastHelper.rayTraceUntil(player, 70, pos -> inside ^ bb.contains(VecHelper.getCenterOf(pos))); @@ -190,27 +190,27 @@ public class SchematicAndQuillHandler { if (firstPos == null) return selectedPos == null ? null : new AxisAlignedBB(selectedPos); return selectedPos == null ? new AxisAlignedBB(firstPos) - : new AxisAlignedBB(firstPos, selectedPos).expand(1, 1, 1); + : new AxisAlignedBB(firstPos, selectedPos).expandTowards(1, 1, 1); } - return new AxisAlignedBB(firstPos, secondPos).expand(1, 1, 1); + return new AxisAlignedBB(firstPos, secondPos).expandTowards(1, 1, 1); } private boolean isActive() { - return isPresent() && AllItems.SCHEMATIC_AND_QUILL.isIn(Minecraft.getInstance().player.getHeldItemMainhand()); + return isPresent() && AllItems.SCHEMATIC_AND_QUILL.isIn(Minecraft.getInstance().player.getMainHandItem()); } private boolean isPresent() { - return Minecraft.getInstance() != null && Minecraft.getInstance().world != null - && Minecraft.getInstance().currentScreen == null; + return Minecraft.getInstance() != null && Minecraft.getInstance().level != null + && Minecraft.getInstance().screen == null; } public void saveSchematic(String string, boolean convertImmediately) { Template t = new Template(); MutableBoundingBox bb = new MutableBoundingBox(firstPos, secondPos); - BlockPos origin = new BlockPos(bb.minX, bb.minY, bb.minZ); - BlockPos bounds = new BlockPos(bb.getXSize(), bb.getYSize(), bb.getZSize()); + BlockPos origin = new BlockPos(bb.x0, bb.y0, bb.z0); + BlockPos bounds = new BlockPos(bb.getXSpan(), bb.getYSpan(), bb.getZSpan()); - t.takeBlocksFromWorld(Minecraft.getInstance().world, origin, bounds, true, Blocks.AIR); + t.fillFromWorld(Minecraft.getInstance().level, origin, bounds, true, Blocks.AIR); if (string.isEmpty()) string = Lang.translate("schematicAndQuill.fallbackName").getString(); @@ -224,7 +224,7 @@ public class SchematicAndQuillHandler { OutputStream outputStream = null; try { outputStream = Files.newOutputStream(path, StandardOpenOption.CREATE); - CompoundNBT nbttagcompound = t.writeToNBT(new CompoundNBT()); + CompoundNBT nbttagcompound = t.save(new CompoundNBT()); CompressedStreamTools.writeCompressed(nbttagcompound, outputStream); } catch (IOException e) { e.printStackTrace(); diff --git a/src/main/java/com/simibubi/create/content/schematics/client/SchematicEditScreen.java b/src/main/java/com/simibubi/create/content/schematics/client/SchematicEditScreen.java index 5f29331d4..4d2f11747 100644 --- a/src/main/java/com/simibubi/create/content/schematics/client/SchematicEditScreen.java +++ b/src/main/java/com/simibubi/create/content/schematics/client/SchematicEditScreen.java @@ -62,30 +62,30 @@ public class SchematicEditScreen extends AbstractSimiScreen { int x = guiLeft; int y = guiTop; - xInput = new TextFieldWidget(textRenderer, x + 50, y + 26, 34, 10, StringTextComponent.EMPTY); - yInput = new TextFieldWidget(textRenderer, x + 90, y + 26, 34, 10, StringTextComponent.EMPTY); - zInput = new TextFieldWidget(textRenderer, x + 130, y + 26, 34, 10, StringTextComponent.EMPTY); + xInput = new TextFieldWidget(font, x + 50, y + 26, 34, 10, StringTextComponent.EMPTY); + yInput = new TextFieldWidget(font, x + 90, y + 26, 34, 10, StringTextComponent.EMPTY); + zInput = new TextFieldWidget(font, x + 130, y + 26, 34, 10, StringTextComponent.EMPTY); BlockPos anchor = handler.getTransformation() .getAnchor(); if (handler.isDeployed()) { - xInput.setText("" + anchor.getX()); - yInput.setText("" + anchor.getY()); - zInput.setText("" + anchor.getZ()); + xInput.setValue("" + anchor.getX()); + yInput.setValue("" + anchor.getY()); + zInput.setValue("" + anchor.getZ()); } else { - BlockPos alt = client.player.getBlockPos(); - xInput.setText("" + alt.getX()); - yInput.setText("" + alt.getY()); - zInput.setText("" + alt.getZ()); + BlockPos alt = minecraft.player.blockPosition(); + xInput.setValue("" + alt.getX()); + yInput.setValue("" + alt.getY()); + zInput.setValue("" + alt.getZ()); } for (TextFieldWidget widget : new TextFieldWidget[] { xInput, yInput, zInput }) { - widget.setMaxStringLength(6); - widget.setEnableBackgroundDrawing(false); + widget.setMaxLength(6); + widget.setBordered(false); widget.setTextColor(0xFFFFFF); widget.changeFocus(false); widget.mouseClicked(0, 0, 0); - widget.setValidator(s -> { + widget.setFilter(s -> { if (s.isEmpty() || s.equals("-")) return true; try { @@ -101,14 +101,14 @@ public class SchematicEditScreen extends AbstractSimiScreen { .toSettings(); Label labelR = new Label(x + 50, y + 48, StringTextComponent.EMPTY).withShadow(); rotationArea = new SelectionScrollInput(x + 45, y + 43, 118, 18).forOptions(rotationOptions) - .titled(rotationLabel.copy()) + .titled(rotationLabel.plainCopy()) .setState(settings.getRotation() .ordinal()) .writingTo(labelR); Label labelM = new Label(x + 50, y + 70, StringTextComponent.EMPTY).withShadow(); mirrorArea = new SelectionScrollInput(x + 45, y + 65, 118, 18).forOptions(mirrorOptions) - .titled(mirrorLabel.copy()) + .titled(mirrorLabel.plainCopy()) .setState(settings.getMirror() .ordinal()) .writingTo(labelM); @@ -124,7 +124,7 @@ public class SchematicEditScreen extends AbstractSimiScreen { @Override public boolean keyPressed(int code, int p_keyPressed_2_, int p_keyPressed_3_) { if (isPaste(code)) { - String coords = client.keyboardListener.getClipboardString(); + String coords = minecraft.keyboardHandler.getClipboard(); if (coords != null && !coords.isEmpty()) { coords.replaceAll(" ", ""); String[] split = coords.split(","); @@ -138,9 +138,9 @@ public class SchematicEditScreen extends AbstractSimiScreen { } } if (valid) { - xInput.setText(split[0]); - yInput.setText(split[1]); - zInput.setText(split[2]); + xInput.setValue(split[0]); + yInput.setValue(split[1]); + zInput.setValue(split[2]); return true; } } @@ -157,7 +157,7 @@ public class SchematicEditScreen extends AbstractSimiScreen { background.draw(ms, this, x, y); String title = handler.getCurrentSchematicName(); - drawCenteredString(ms, textRenderer, title, x + (background.width - 8) / 2, y + 3, 0xFFFFFF); + drawCenteredString(ms, font, title, x + (background.width - 8) / 2, y + 3, 0xFFFFFF); GuiGameElement.of(AllItems.SCHEMATIC.asStack()) .at(x + background.width + 6, y + background.height - 40, -200) @@ -170,8 +170,8 @@ public class SchematicEditScreen extends AbstractSimiScreen { boolean validCoords = true; BlockPos newLocation = null; try { - newLocation = new BlockPos(Integer.parseInt(xInput.getText()), Integer.parseInt(yInput.getText()), - Integer.parseInt(zInput.getText())); + newLocation = new BlockPos(Integer.parseInt(xInput.getValue()), Integer.parseInt(yInput.getValue()), + Integer.parseInt(zInput.getValue())); } catch (NumberFormatException e) { validCoords = false; } diff --git a/src/main/java/com/simibubi/create/content/schematics/client/SchematicHandler.java b/src/main/java/com/simibubi/create/content/schematics/client/SchematicHandler.java index 9bea80f55..305a11982 100644 --- a/src/main/java/com/simibubi/create/content/schematics/client/SchematicHandler.java +++ b/src/main/java/com/simibubi/create/content/schematics/client/SchematicHandler.java @@ -126,17 +126,17 @@ public class SchematicHandler { if (size.equals(BlockPos.ZERO)) return; - World clientWorld = Minecraft.getInstance().world; + World clientWorld = Minecraft.getInstance().level; SchematicWorld w = new SchematicWorld(clientWorld); SchematicWorld wMirroredFB = new SchematicWorld(clientWorld); SchematicWorld wMirroredLR = new SchematicWorld(clientWorld); PlacementSettings placementSettings = new PlacementSettings(); - schematic.place(w, BlockPos.ZERO, placementSettings, w.getRandom()); + schematic.placeInWorldChunk(w, BlockPos.ZERO, placementSettings, w.getRandom()); placementSettings.setMirror(Mirror.FRONT_BACK); - schematic.place(wMirroredFB, BlockPos.ZERO.east(size.getX() - 1), placementSettings, wMirroredFB.getRandom()); + schematic.placeInWorldChunk(wMirroredFB, BlockPos.ZERO.east(size.getX() - 1), placementSettings, wMirroredFB.getRandom()); placementSettings.setMirror(Mirror.LEFT_RIGHT); - schematic.place(wMirroredLR, BlockPos.ZERO.south(size.getZ() - 1), placementSettings, wMirroredFB.getRandom()); + schematic.placeInWorldChunk(wMirroredLR, BlockPos.ZERO.south(size.getZ() - 1), placementSettings, wMirroredFB.getRandom()); renderers.get(0) .display(w); @@ -152,13 +152,13 @@ public class SchematicHandler { return; if (active) { - ms.push(); + ms.pushPose(); currentTool.getTool() .renderTool(ms, buffer); - ms.pop(); + ms.popPose(); } - ms.push(); + ms.pushPose(); transformation.applyGLTransformations(ms); if (!renderers.isEmpty()) { @@ -182,7 +182,7 @@ public class SchematicHandler { currentTool.getTool() .renderOnSchematic(ms, buffer); - ms.pop(); + ms.popPose(); } @@ -202,11 +202,11 @@ public class SchematicHandler { if (!pressed || button != 1) return; Minecraft mc = Minecraft.getInstance(); - if (mc.player.isSneaking()) + if (mc.player.isShiftKeyDown()) return; - if (mc.objectMouseOver instanceof BlockRayTraceResult) { - BlockRayTraceResult blockRayTraceResult = (BlockRayTraceResult) mc.objectMouseOver; - BlockState clickedBlock = mc.world.getBlockState(blockRayTraceResult.getPos()); + if (mc.hitResult instanceof BlockRayTraceResult) { + BlockRayTraceResult blockRayTraceResult = (BlockRayTraceResult) mc.hitResult; + BlockState clickedBlock = mc.level.getBlockState(blockRayTraceResult.getBlockPos()); if (AllBlocks.SCHEMATICANNON.has(clickedBlock)) return; if (AllBlocks.DEPLOYER.has(clickedBlock)) @@ -245,23 +245,23 @@ public class SchematicHandler { } private ItemStack findBlueprintInHand(PlayerEntity player) { - ItemStack stack = player.getHeldItemMainhand(); + ItemStack stack = player.getMainHandItem(); if (!AllItems.SCHEMATIC.isIn(stack)) return null; if (!stack.hasTag()) return null; activeSchematicItem = stack; - activeHotbarSlot = player.inventory.currentItem; + activeHotbarSlot = player.inventory.selected; return stack; } private boolean itemLost(PlayerEntity player) { - for (int i = 0; i < PlayerInventory.getHotbarSize(); i++) { - if (!player.inventory.getStackInSlot(i) - .isItemEqual(activeSchematicItem)) + for (int i = 0; i < PlayerInventory.getSelectionSize(); i++) { + if (!player.inventory.getItem(i) + .sameItem(activeSchematicItem)) continue; - if (!ItemStack.areItemStackTagsEqual(player.inventory.getStackInSlot(i), activeSchematicItem)) + if (!ItemStack.tagMatches(player.inventory.getItem(i), activeSchematicItem)) continue; return false; } diff --git a/src/main/java/com/simibubi/create/content/schematics/client/SchematicHotbarSlotOverlay.java b/src/main/java/com/simibubi/create/content/schematics/client/SchematicHotbarSlotOverlay.java index 33f531cbe..a5fe5eff7 100644 --- a/src/main/java/com/simibubi/create/content/schematics/client/SchematicHotbarSlotOverlay.java +++ b/src/main/java/com/simibubi/create/content/schematics/client/SchematicHotbarSlotOverlay.java @@ -12,12 +12,12 @@ public class SchematicHotbarSlotOverlay extends AbstractGui { public void renderOn(MatrixStack matrixStack, int slot) { MainWindow mainWindow = Minecraft.getInstance().getWindow(); - int x = mainWindow.getScaledWidth() / 2 - 88; - int y = mainWindow.getScaledHeight() - 19; + int x = mainWindow.getGuiScaledWidth() / 2 - 88; + int y = mainWindow.getGuiScaledHeight() - 19; RenderSystem.enableDepthTest(); - matrixStack.push(); + matrixStack.pushPose(); AllGuiTextures.SCHEMATIC_SLOT.draw(matrixStack, this, x + 20 * slot, y); - matrixStack.pop(); + matrixStack.popPose(); } } diff --git a/src/main/java/com/simibubi/create/content/schematics/client/SchematicPromptScreen.java b/src/main/java/com/simibubi/create/content/schematics/client/SchematicPromptScreen.java index c635d4bb9..c13cc1dc0 100644 --- a/src/main/java/com/simibubi/create/content/schematics/client/SchematicPromptScreen.java +++ b/src/main/java/com/simibubi/create/content/schematics/client/SchematicPromptScreen.java @@ -43,11 +43,11 @@ public class SchematicPromptScreen extends AbstractSimiScreen { int x = guiLeft; int y = guiTop; - nameField = new TextFieldWidget(textRenderer, x + 49, y + 26, 131, 10, StringTextComponent.EMPTY); + nameField = new TextFieldWidget(font, x + 49, y + 26, 131, 10, StringTextComponent.EMPTY); nameField.setTextColor(-1); - nameField.setDisabledTextColour(-1); - nameField.setEnableBackgroundDrawing(false); - nameField.setMaxStringLength(35); + nameField.setTextColorUneditable(-1); + nameField.setBordered(false); + nameField.setMaxLength(35); nameField.changeFocus(true); abort = new IconButton(x + 7, y + 53, AllIcons.I_TRASH); @@ -74,7 +74,7 @@ public class SchematicPromptScreen extends AbstractSimiScreen { int y = guiTop; background.draw(ms, this, x, y); - drawCenteredText(ms, textRenderer, title, x + (background.width - 8) / 2, y + 3, 0xFFFFFF); + drawCenteredString(ms, font, title, x + (background.width - 8) / 2, y + 3, 0xFFFFFF); GuiGameElement.of(AllItems.SCHEMATIC.asStack()) .at(x + 22, y + 23, 0) .render(ms); @@ -106,7 +106,7 @@ public class SchematicPromptScreen extends AbstractSimiScreen { } if (abort.isHovered()) { CreateClient.SCHEMATIC_AND_QUILL_HANDLER.discard(); - client.player.closeScreen(); + minecraft.player.closeContainer(); return true; } if (convert.isHovered()) { @@ -117,8 +117,8 @@ public class SchematicPromptScreen extends AbstractSimiScreen { } private void confirm(boolean convertImmediately) { - CreateClient.SCHEMATIC_AND_QUILL_HANDLER.saveSchematic(nameField.getText(), convertImmediately); - client.player.closeScreen(); + CreateClient.SCHEMATIC_AND_QUILL_HANDLER.saveSchematic(nameField.getValue(), convertImmediately); + minecraft.player.closeContainer(); } } 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 75f55c7ba..2cc709335 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 @@ -61,7 +61,7 @@ public class SchematicRenderer { if (!active) return; Minecraft mc = Minecraft.getInstance(); - if (mc.world == null || mc.player == null || !changed) + if (mc.level == null || mc.player == null || !changed) return; redraw(mc); @@ -71,8 +71,8 @@ public class SchematicRenderer { public void render(MatrixStack ms, SuperRenderTypeBuffer buffer) { if (!active) return; - buffer.getBuffer(RenderType.getSolid()); - for (RenderType layer : RenderType.getBlockLayers()) { + buffer.getBuffer(RenderType.solid()); + for (RenderType layer : RenderType.chunkBufferLayers()) { if (!usedBlockRenderLayers.contains(layer)) continue; SuperByteBuffer superByteBuffer = bufferCache.get(layer); @@ -86,21 +86,21 @@ public class SchematicRenderer { startedBufferBuilders.clear(); final SchematicWorld blockAccess = schematic; - final BlockRendererDispatcher blockRendererDispatcher = minecraft.getBlockRendererDispatcher(); + final BlockRendererDispatcher blockRendererDispatcher = minecraft.getBlockRenderer(); List blockstates = new LinkedList<>(); Map buffers = new HashMap<>(); MatrixStack ms = new MatrixStack(); - BlockPos.stream(blockAccess.getBounds()) + BlockPos.betweenClosedStream(blockAccess.getBounds()) .forEach(localPos -> { - ms.push(); + ms.pushPose(); MatrixStacker.of(ms) .translate(localPos); - BlockPos pos = localPos.add(anchor); + BlockPos pos = localPos.offset(anchor); BlockState state = blockAccess.getBlockState(pos); - for (RenderType blockRenderLayer : RenderType.getBlockLayers()) { + for (RenderType blockRenderLayer : RenderType.chunkBufferLayers()) { if (!RenderTypeLookup.canRenderInLayer(state, blockRenderLayer)) continue; ForgeHooksClient.setRenderLayer(blockRenderLayer); @@ -111,10 +111,10 @@ public class SchematicRenderer { if (startedBufferBuilders.add(blockRenderLayer)) bufferBuilder.begin(GL11.GL_QUADS, DefaultVertexFormats.BLOCK); - TileEntity tileEntity = blockAccess.getTileEntity(localPos); + TileEntity tileEntity = blockAccess.getBlockEntity(localPos); if (blockRendererDispatcher.renderModel(state, pos, blockAccess, ms, bufferBuilder, true, - minecraft.world.rand, + minecraft.level.random, tileEntity != null ? tileEntity.getModelData() : EmptyModelData.INSTANCE)) { usedBlockRenderLayers.add(blockRenderLayer); } @@ -122,21 +122,21 @@ public class SchematicRenderer { } ForgeHooksClient.setRenderLayer(null); - ms.pop(); + ms.popPose(); }); // finishDrawing - for (RenderType layer : RenderType.getBlockLayers()) { + for (RenderType layer : RenderType.chunkBufferLayers()) { if (!startedBufferBuilders.contains(layer)) continue; BufferBuilder buf = buffers.get(layer); - buf.finishDrawing(); + buf.end(); bufferCache.put(layer, new SuperByteBuffer(buf)); } } private static int getLayerCount() { - return RenderType.getBlockLayers() + return RenderType.chunkBufferLayers() .size(); } diff --git a/src/main/java/com/simibubi/create/content/schematics/client/SchematicTransformation.java b/src/main/java/com/simibubi/create/content/schematics/client/SchematicTransformation.java index 7c3c6c6a2..97f496ecd 100644 --- a/src/main/java/com/simibubi/create/content/schematics/client/SchematicTransformation.java +++ b/src/main/java/com/simibubi/create/content/schematics/client/SchematicTransformation.java @@ -38,8 +38,8 @@ public class SchematicTransformation { int frontBack = settings.getMirror() == Mirror.FRONT_BACK ? -1 : 1; getScaleFB().start(frontBack); getScaleLR().start(leftRight); - xOrigin = bounds.getXSize() / 2f; - zOrigin = bounds.getZSize() / 2f; + xOrigin = bounds.getXsize() / 2f; + zOrigin = bounds.getZsize() / 2f; int r = -(settings.getRotation() .ordinal() * 90); @@ -99,7 +99,7 @@ public class SchematicTransformation { vec = vec.subtract(xOrigin + rotationOffset.x, 0, zOrigin + rotationOffset.z); vec = VecHelper.rotate(vec, -rotation.get(pt), Axis.Y); vec = vec.add(rotationOffset.x, 0, rotationOffset.z); - vec = vec.mul(getScaleFB().get(pt), 1, getScaleLR().get(pt)); + vec = vec.multiply(getScaleFB().get(pt), 1, getScaleLR().get(pt)); vec = vec.add(xOrigin, 0, zOrigin); return vec; @@ -148,7 +148,7 @@ public class SchematicTransformation { Vector3d rotationOffset = getRotationOffset(false); vec = vec.subtract(xOrigin, 0, zOrigin); vec = vec.subtract(rotationOffset.x, 0, rotationOffset.z); - vec = vec.mul(getScaleFB().getTarget(), 1, getScaleLR().getTarget()); + vec = vec.multiply(getScaleFB().getTarget(), 1, getScaleLR().getTarget()); vec = VecHelper.rotate(vec, rotation.getTarget(), Axis.Y); vec = vec.add(xOrigin, 0, zOrigin); @@ -161,11 +161,11 @@ public class SchematicTransformation { Vector3d rotationOffset = getRotationOffset(false); vec = vec.subtract(xOrigin, 0, zOrigin); vec = vec.subtract(rotationOffset.x, 0, rotationOffset.z); - vec = vec.mul(getScaleFB().getTarget(), 1, getScaleLR().getTarget()); + vec = vec.multiply(getScaleFB().getTarget(), 1, getScaleLR().getTarget()); vec = VecHelper.rotate(vec, rotation.getTarget(), Axis.Y); vec = vec.add(xOrigin, 0, zOrigin); - return Vector3d.of(pos.subtract(new BlockPos(vec.x, vec.y, vec.z))); + return Vector3d.atLowerCornerOf(pos.subtract(new BlockPos(vec.x, vec.y, vec.z))); } public int getRotationTarget() { diff --git a/src/main/java/com/simibubi/create/content/schematics/client/tools/DeployTool.java b/src/main/java/com/simibubi/create/content/schematics/client/tools/DeployTool.java index b873d5f78..ab108da12 100644 --- a/src/main/java/com/simibubi/create/content/schematics/client/tools/DeployTool.java +++ b/src/main/java/com/simibubi/create/content/schematics/client/tools/DeployTool.java @@ -42,7 +42,7 @@ public class DeployTool extends PlacementToolBase { if (selectedPos == null) return; - ms.push(); + ms.pushPose(); float pt = AnimationTickHolder.getPartialTicks(); double x = MathHelper.lerp(pt, lastChasingSelectedPos.x, chasingSelectedPos.x); double y = MathHelper.lerp(pt, lastChasingSelectedPos.y, chasingSelectedPos.y); @@ -54,8 +54,8 @@ public class DeployTool extends PlacementToolBase { Vector3d rotationOffset = transformation.getRotationOffset(true); int centerX = (int) center.x; int centerZ = (int) center.z; - double xOrigin = bounds.getXSize() / 2f; - double zOrigin = bounds.getZSize() / 2f; + double xOrigin = bounds.getXsize() / 2f; + double zOrigin = bounds.getZsize() / 2f; Vector3d origin = new Vector3d(xOrigin, 0, zOrigin); ms.translate(x - centerX, y, z - centerZ); @@ -70,7 +70,7 @@ public class DeployTool extends PlacementToolBase { outline.render(ms, buffer, pt); outline.getParams() .clearTextures(); - ms.pop(); + ms.popPose(); } @Override @@ -88,7 +88,7 @@ public class DeployTool extends PlacementToolBase { return super.handleRightClick(); Vector3d center = schematicHandler.getBounds() .getCenter(); - BlockPos target = selectedPos.add(-((int) center.x), 0, -((int) center.z)); + BlockPos target = selectedPos.offset(-((int) center.x), 0, -((int) center.z)); ItemStack item = schematicHandler.getActiveSchematicItem(); if (item != null) { diff --git a/src/main/java/com/simibubi/create/content/schematics/client/tools/FlipTool.java b/src/main/java/com/simibubi/create/content/schematics/client/tools/FlipTool.java index dc8733e61..82b6b0f2f 100644 --- a/src/main/java/com/simibubi/create/content/schematics/client/tools/FlipTool.java +++ b/src/main/java/com/simibubi/create/content/schematics/client/tools/FlipTool.java @@ -56,17 +56,17 @@ public class FlipTool extends PlacementToolBase { return; } - Direction facing = selectedFace.rotateY(); + Direction facing = selectedFace.getClockWise(); AxisAlignedBB bounds = schematicHandler.getBounds(); - Vector3d directionVec = Vector3d.of(Direction.getFacingFromAxis(AxisDirection.POSITIVE, facing.getAxis()) - .getDirectionVec()); - Vector3d boundsSize = new Vector3d(bounds.getXSize(), bounds.getYSize(), bounds.getZSize()); - Vector3d vec = boundsSize.mul(directionVec); + Vector3d directionVec = Vector3d.atLowerCornerOf(Direction.get(AxisDirection.POSITIVE, facing.getAxis()) + .getNormal()); + Vector3d boundsSize = new Vector3d(bounds.getXsize(), bounds.getYsize(), bounds.getZsize()); + Vector3d vec = boundsSize.multiply(directionVec); bounds = bounds.contract(vec.x, vec.y, vec.z) - .grow(1 - directionVec.x, 1 - directionVec.y, 1 - directionVec.z); - bounds = bounds.offset(directionVec.scale(.5f) - .mul(boundsSize)); + .inflate(1 - directionVec.x, 1 - directionVec.y, 1 - directionVec.z); + bounds = bounds.move(directionVec.scale(.5f) + .multiply(boundsSize)); outline.setBounds(bounds); AllSpecialTextures tex = AllSpecialTextures.CHECKERED; diff --git a/src/main/java/com/simibubi/create/content/schematics/client/tools/MoveTool.java b/src/main/java/com/simibubi/create/content/schematics/client/tools/MoveTool.java index 4fcaf8659..f01e87d7c 100644 --- a/src/main/java/com/simibubi/create/content/schematics/client/tools/MoveTool.java +++ b/src/main/java/com/simibubi/create/content/schematics/client/tools/MoveTool.java @@ -25,8 +25,8 @@ public class MoveTool extends PlacementToolBase { return true; SchematicTransformation transformation = schematicHandler.getTransformation(); - Vector3d vec = Vector3d.of(selectedFace.getDirectionVec()).scale(-Math.signum(delta)); - vec = vec.mul(transformation.getMirrorModifier(Axis.X), 1, transformation.getMirrorModifier(Axis.Z)); + Vector3d vec = Vector3d.atLowerCornerOf(selectedFace.getNormal()).scale(-Math.signum(delta)); + vec = vec.multiply(transformation.getMirrorModifier(Axis.X), 1, transformation.getMirrorModifier(Axis.Z)); vec = VecHelper.rotate(vec, transformation.getRotationTarget(), Axis.Y); transformation.move((float) vec.x, 0, (float) vec.z); schematicHandler.markDirty(); diff --git a/src/main/java/com/simibubi/create/content/schematics/client/tools/RotateTool.java b/src/main/java/com/simibubi/create/content/schematics/client/tools/RotateTool.java index 2e57dd830..bc793d1ec 100644 --- a/src/main/java/com/simibubi/create/content/schematics/client/tools/RotateTool.java +++ b/src/main/java/com/simibubi/create/content/schematics/client/tools/RotateTool.java @@ -23,7 +23,7 @@ public class RotateTool extends PlacementToolBase { @Override public void renderOnSchematic(MatrixStack ms, SuperRenderTypeBuffer buffer) { AxisAlignedBB bounds = schematicHandler.getBounds(); - double height = bounds.getYSize() + Math.max(20, bounds.getYSize()); + double height = bounds.getYsize() + Math.max(20, bounds.getYsize()); Vector3d center = bounds.getCenter() .add(schematicHandler.getTransformation() .getRotationOffset(false)); diff --git a/src/main/java/com/simibubi/create/content/schematics/client/tools/SchematicToolBase.java b/src/main/java/com/simibubi/create/content/schematics/client/tools/SchematicToolBase.java index bbfa5163c..9340d82a6 100644 --- a/src/main/java/com/simibubi/create/content/schematics/client/tools/SchematicToolBase.java +++ b/src/main/java/com/simibubi/create/content/schematics/client/tools/SchematicToolBase.java @@ -60,7 +60,7 @@ public abstract class SchematicToolBase implements ISchematicTool { if (selectedPos == null) return; lastChasingSelectedPos = chasingSelectedPos; - Vector3d target = Vector3d.of(selectedPos); + Vector3d target = Vector3d.atLowerCornerOf(selectedPos); if (target.distanceTo(chasingSelectedPos) < 1 / 512f) { chasingSelectedPos = target; return; @@ -94,30 +94,30 @@ public abstract class SchematicToolBase implements ISchematicTool { if (selectIgnoreBlocks) { float pt = AnimationTickHolder.getPartialTicks(); selectedPos = new BlockPos(player.getEyePosition(pt) - .add(player.getLookVec() + .add(player.getLookAngle() .scale(selectionRange))); if (snap) - lastChasingSelectedPos = chasingSelectedPos = Vector3d.of(selectedPos); + lastChasingSelectedPos = chasingSelectedPos = Vector3d.atLowerCornerOf(selectedPos); return; } // Select targeted Block selectedPos = null; - BlockRayTraceResult trace = RaycastHelper.rayTraceRange(player.world, player, 75); + BlockRayTraceResult trace = RaycastHelper.rayTraceRange(player.level, player, 75); if (trace == null || trace.getType() != Type.BLOCK) return; - BlockPos hit = new BlockPos(trace.getHitVec()); - boolean replaceable = player.world.getBlockState(hit) + BlockPos hit = new BlockPos(trace.getLocation()); + boolean replaceable = player.level.getBlockState(hit) .getMaterial() .isReplaceable(); - if (trace.getFace() + if (trace.getDirection() .getAxis() .isVertical() && !replaceable) - hit = hit.offset(trace.getFace()); + hit = hit.relative(trace.getDirection()); selectedPos = hit; if (snap) - lastChasingSelectedPos = chasingSelectedPos = Vector3d.of(selectedPos); + lastChasingSelectedPos = chasingSelectedPos = Vector3d.atLowerCornerOf(selectedPos); } @Override @@ -131,7 +131,7 @@ public abstract class SchematicToolBase implements ISchematicTool { if (!schematicHandler.isDeployed()) return; - ms.push(); + ms.pushPose(); AABBOutline outline = schematicHandler.getOutline(); if (renderSelectedFace) { outline.getParams() @@ -146,7 +146,7 @@ public abstract class SchematicToolBase implements ISchematicTool { outline.render(ms, buffer, AnimationTickHolder.getPartialTicks()); outline.getParams() .clearTextures(); - ms.pop(); + ms.popPose(); } } diff --git a/src/main/java/com/simibubi/create/content/schematics/filtering/SchematicInstances.java b/src/main/java/com/simibubi/create/content/schematics/filtering/SchematicInstances.java index 8bd1c542b..3942a7eb9 100644 --- a/src/main/java/com/simibubi/create/content/schematics/filtering/SchematicInstances.java +++ b/src/main/java/com/simibubi/create/content/schematics/filtering/SchematicInstances.java @@ -61,7 +61,7 @@ public class SchematicInstances { .getCompound("Anchor")); SchematicWorld world = new SchematicWorld(anchor, wrapped); PlacementSettings settings = SchematicItem.getSettings(schematic); - activeTemplate.place(world, anchor, settings, wrapped.getRandom()); + activeTemplate.placeInWorldChunk(world, anchor, settings, wrapped.getRandom()); return world; } diff --git a/src/main/java/com/simibubi/create/content/schematics/item/SchematicAndQuillItem.java b/src/main/java/com/simibubi/create/content/schematics/item/SchematicAndQuillItem.java index 30e330076..63b5e67ee 100644 --- a/src/main/java/com/simibubi/create/content/schematics/item/SchematicAndQuillItem.java +++ b/src/main/java/com/simibubi/create/content/schematics/item/SchematicAndQuillItem.java @@ -2,6 +2,8 @@ package com.simibubi.create.content.schematics.item; import net.minecraft.item.Item; +import net.minecraft.item.Item.Properties; + public class SchematicAndQuillItem extends Item { public SchematicAndQuillItem(Properties properties) { diff --git a/src/main/java/com/simibubi/create/content/schematics/item/SchematicItem.java b/src/main/java/com/simibubi/create/content/schematics/item/SchematicItem.java index eca91e789..ffdede407 100644 --- a/src/main/java/com/simibubi/create/content/schematics/item/SchematicItem.java +++ b/src/main/java/com/simibubi/create/content/schematics/item/SchematicItem.java @@ -50,12 +50,14 @@ import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.fml.DistExecutor; import net.minecraftforge.fml.common.thread.SidedThreadGroups; +import net.minecraft.item.Item.Properties; + public class SchematicItem extends Item { private static final Logger LOGGER = LogManager.getLogger(); public SchematicItem(Properties properties) { - super(properties.maxStackSize(1)); + super(properties.stacksTo(1)); } public static ItemStack create(String schematic, String owner) { @@ -75,20 +77,20 @@ public class SchematicItem extends Item { } @Override - public void fillItemGroup(ItemGroup group, NonNullList items) {} + public void fillItemCategory(ItemGroup group, NonNullList items) {} @Override @OnlyIn(value = Dist.CLIENT) - public void addInformation(ItemStack stack, World worldIn, List tooltip, ITooltipFlag flagIn) { + public void appendHoverText(ItemStack stack, World worldIn, List tooltip, ITooltipFlag flagIn) { if (stack.hasTag()) { if (stack.getTag() .contains("File")) tooltip.add(new StringTextComponent(TextFormatting.GOLD + stack.getTag() .getString("File"))); } else { - tooltip.add(Lang.translate("schematic.invalid").formatted(TextFormatting.RED)); + tooltip.add(Lang.translate("schematic.invalid").withStyle(TextFormatting.RED)); } - super.addInformation(stack, worldIn, tooltip, flagIn); + super.appendHoverText(stack, worldIn, tooltip, flagIn); } public static void writeSize(ItemStack blueprint) { @@ -141,7 +143,7 @@ public class SchematicItem extends Item { try (DataInputStream stream = new DataInputStream(new BufferedInputStream( new GZIPInputStream(Files.newInputStream(path, StandardOpenOption.READ))))) { CompoundNBT nbt = CompressedStreamTools.read(stream, new NBTSizeTracker(0x20000000L)); - t.read(nbt); + t.load(nbt); } catch (IOException e) { LOGGER.warn("Failed to read schematic", e); } @@ -151,23 +153,23 @@ public class SchematicItem extends Item { @Nonnull @Override - public ActionResultType onItemUse(ItemUseContext context) { + public ActionResultType useOn(ItemUseContext context) { if (context.getPlayer() != null && !onItemUse(context.getPlayer(), context.getHand())) - return super.onItemUse(context); + return super.useOn(context); return ActionResultType.SUCCESS; } @Override - public ActionResult onItemRightClick(World worldIn, PlayerEntity playerIn, Hand handIn) { + public ActionResult use(World worldIn, PlayerEntity playerIn, Hand handIn) { if (!onItemUse(playerIn, handIn)) - return super.onItemRightClick(worldIn, playerIn, handIn); - return new ActionResult<>(ActionResultType.SUCCESS, playerIn.getHeldItem(handIn)); + return super.use(worldIn, playerIn, handIn); + return new ActionResult<>(ActionResultType.SUCCESS, playerIn.getItemInHand(handIn)); } private boolean onItemUse(PlayerEntity player, Hand hand) { - if (!player.isSneaking() || hand != Hand.MAIN_HAND) + if (!player.isShiftKeyDown() || hand != Hand.MAIN_HAND) return false; - if (!player.getHeldItem(hand) + if (!player.getItemInHand(hand) .hasTag()) return false; DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> this::displayBlueprintScreen); diff --git a/src/main/java/com/simibubi/create/content/schematics/packet/ConfigureSchematicannonPacket.java b/src/main/java/com/simibubi/create/content/schematics/packet/ConfigureSchematicannonPacket.java index 2e66fc255..e53a876db 100644 --- a/src/main/java/com/simibubi/create/content/schematics/packet/ConfigureSchematicannonPacket.java +++ b/src/main/java/com/simibubi/create/content/schematics/packet/ConfigureSchematicannonPacket.java @@ -26,21 +26,21 @@ public class ConfigureSchematicannonPacket extends SimplePacketBase { } public ConfigureSchematicannonPacket(PacketBuffer buffer) { - this(buffer.readEnumValue(Option.class), buffer.readBoolean()); + this(buffer.readEnum(Option.class), buffer.readBoolean()); } public void write(PacketBuffer buffer) { - buffer.writeEnumValue(option); + buffer.writeEnum(option); buffer.writeBoolean(set); } public void handle(Supplier context) { context.get().enqueueWork(() -> { ServerPlayerEntity player = context.get().getSender(); - if (player == null || !(player.openContainer instanceof SchematicannonContainer)) + if (player == null || !(player.containerMenu instanceof SchematicannonContainer)) return; - SchematicannonTileEntity te = ((SchematicannonContainer) player.openContainer).getTileEntity(); + SchematicannonTileEntity te = ((SchematicannonContainer) player.containerMenu).getTileEntity(); switch (option) { case DONT_REPLACE: case REPLACE_ANY: diff --git a/src/main/java/com/simibubi/create/content/schematics/packet/InstantSchematicPacket.java b/src/main/java/com/simibubi/create/content/schematics/packet/InstantSchematicPacket.java index 00255c435..433875cb2 100644 --- a/src/main/java/com/simibubi/create/content/schematics/packet/InstantSchematicPacket.java +++ b/src/main/java/com/simibubi/create/content/schematics/packet/InstantSchematicPacket.java @@ -23,14 +23,14 @@ public class InstantSchematicPacket extends SimplePacketBase { } public InstantSchematicPacket(PacketBuffer buffer) { - name = buffer.readString(32767); + name = buffer.readUtf(32767); origin = buffer.readBlockPos(); bounds = buffer.readBlockPos(); } @Override public void write(PacketBuffer buffer) { - buffer.writeString(name); + buffer.writeUtf(name); buffer.writeBlockPos(origin); buffer.writeBlockPos(bounds); } @@ -43,7 +43,7 @@ public class InstantSchematicPacket extends SimplePacketBase { .getSender(); if (player == null) return; - Create.SCHEMATIC_RECEIVER.handleInstantSchematic(player, name, player.world, origin, bounds); + Create.SCHEMATIC_RECEIVER.handleInstantSchematic(player, name, player.level, origin, bounds); }); context.get() .setPacketHandled(true); diff --git a/src/main/java/com/simibubi/create/content/schematics/packet/SchematicPlacePacket.java b/src/main/java/com/simibubi/create/content/schematics/packet/SchematicPlacePacket.java index 01cc59d07..3f6eccd0f 100644 --- a/src/main/java/com/simibubi/create/content/schematics/packet/SchematicPlacePacket.java +++ b/src/main/java/com/simibubi/create/content/schematics/packet/SchematicPlacePacket.java @@ -22,11 +22,11 @@ public class SchematicPlacePacket extends SimplePacketBase { } public SchematicPlacePacket(PacketBuffer buffer) { - stack = buffer.readItemStack(); + stack = buffer.readItem(); } public void write(PacketBuffer buffer) { - buffer.writeItemStack(stack); + buffer.writeItem(stack); } public void handle(Supplier context) { @@ -35,19 +35,19 @@ public class SchematicPlacePacket extends SimplePacketBase { if (player == null) return; - World world = player.getServerWorld(); + World world = player.getLevel(); SchematicPrinter printer = new SchematicPrinter(); - printer.loadSchematic(stack, world, !player.canUseCommandBlock()); + printer.loadSchematic(stack, world, !player.canUseGameMasterBlocks()); while (printer.advanceCurrentPos()) { if (!printer.shouldPlaceCurrent(world)) continue; printer.handleCurrentTarget((pos, state, tile) -> { - CompoundNBT tileData = tile != null ? tile.write(new CompoundNBT()) : null; + CompoundNBT tileData = tile != null ? tile.save(new CompoundNBT()) : null; BlockHelper.placeSchematicBlock(world, state, pos, null, tileData); }, (pos, entity) -> { - world.addEntity(entity); + world.addFreshEntity(entity); }); } }); diff --git a/src/main/java/com/simibubi/create/content/schematics/packet/SchematicSyncPacket.java b/src/main/java/com/simibubi/create/content/schematics/packet/SchematicSyncPacket.java index 030f66a93..f35991b80 100644 --- a/src/main/java/com/simibubi/create/content/schematics/packet/SchematicSyncPacket.java +++ b/src/main/java/com/simibubi/create/content/schematics/packet/SchematicSyncPacket.java @@ -38,8 +38,8 @@ public class SchematicSyncPacket extends SimplePacketBase { slot = buffer.readVarInt(); deployed = buffer.readBoolean(); anchor = buffer.readBlockPos(); - rotation = buffer.readEnumValue(Rotation.class); - mirror = buffer.readEnumValue(Mirror.class); + rotation = buffer.readEnum(Rotation.class); + mirror = buffer.readEnum(Mirror.class); } @Override @@ -47,8 +47,8 @@ public class SchematicSyncPacket extends SimplePacketBase { buffer.writeVarInt(slot); buffer.writeBoolean(deployed); buffer.writeBlockPos(anchor); - buffer.writeEnumValue(rotation); - buffer.writeEnumValue(mirror); + buffer.writeEnum(rotation); + buffer.writeEnum(mirror); } @Override @@ -59,9 +59,9 @@ public class SchematicSyncPacket extends SimplePacketBase { return; ItemStack stack = ItemStack.EMPTY; if (slot == -1) { - stack = player.getHeldItemMainhand(); + stack = player.getMainHandItem(); } else { - stack = player.inventory.getStackInSlot(slot); + stack = player.inventory.getItem(slot); } if (!AllItems.SCHEMATIC.isIn(stack)) { return; diff --git a/src/main/java/com/simibubi/create/content/schematics/packet/SchematicUploadPacket.java b/src/main/java/com/simibubi/create/content/schematics/packet/SchematicUploadPacket.java index bde22038b..3828588c9 100644 --- a/src/main/java/com/simibubi/create/content/schematics/packet/SchematicUploadPacket.java +++ b/src/main/java/com/simibubi/create/content/schematics/packet/SchematicUploadPacket.java @@ -45,7 +45,7 @@ public class SchematicUploadPacket extends SimplePacketBase { public SchematicUploadPacket(PacketBuffer buffer) { code = buffer.readInt(); - schematic = buffer.readString(256); + schematic = buffer.readUtf(256); if (code == BEGIN) size = buffer.readLong(); @@ -55,7 +55,7 @@ public class SchematicUploadPacket extends SimplePacketBase { public void write(PacketBuffer buffer) { buffer.writeInt(code); - buffer.writeString(schematic); + buffer.writeUtf(schematic); if (code == BEGIN) buffer.writeLong(size); @@ -71,8 +71,8 @@ public class SchematicUploadPacket extends SimplePacketBase { if (player == null) return; if (code == BEGIN) { - BlockPos pos = ((SchematicTableContainer) player.openContainer).getTileEntity() - .getPos(); + BlockPos pos = ((SchematicTableContainer) player.containerMenu).getTileEntity() + .getBlockPos(); Create.SCHEMATIC_RECEIVER.handleNewUpload(player, schematic, size, pos); } if (code == WRITE) diff --git a/src/main/java/com/simibubi/create/events/ClientEvents.java b/src/main/java/com/simibubi/create/events/ClientEvents.java index cf8c2a81c..7021f2dfd 100644 --- a/src/main/java/com/simibubi/create/events/ClientEvents.java +++ b/src/main/java/com/simibubi/create/events/ClientEvents.java @@ -96,7 +96,7 @@ public class ClientEvents { @SubscribeEvent public static void onTick(ClientTickEvent event) { - World world = Minecraft.getInstance().world; + World world = Minecraft.getInstance().level; if (!isGameActive()) return; @@ -153,7 +153,7 @@ public class ClientEvents { @SubscribeEvent public static void onLoadWorld(WorldEvent.Load event) { IWorld world = event.getWorld(); - if (world.isRemote() && world instanceof ClientWorld && !(world instanceof WrappedClientWorld)) { + if (world.isClientSide() && world instanceof ClientWorld && !(world instanceof WrappedClientWorld)) { CreateClient.invalidateRenderers(); AnimationTickHolder.reset(); } @@ -169,7 +169,7 @@ public class ClientEvents { @SubscribeEvent public static void onUnloadWorld(WorldEvent.Unload event) { if (event.getWorld() - .isRemote()) { + .isClientSide()) { CreateClient.invalidateRenderers(); CreateClient.SOUL_PULSE_EFFECT_HANDLER.refresh(); AnimationTickHolder.reset(); @@ -178,13 +178,13 @@ public class ClientEvents { @SubscribeEvent public static void onRenderWorld(RenderWorldLastEvent event) { - Vector3d cameraPos = Minecraft.getInstance().gameRenderer.getActiveRenderInfo() - .getProjectedView(); + Vector3d cameraPos = Minecraft.getInstance().gameRenderer.getMainCamera() + .getPosition(); float pt = AnimationTickHolder.getPartialTicks(); MatrixStack ms = event.getMatrixStack(); - ms.push(); - ms.translate(-cameraPos.getX(), -cameraPos.getY(), -cameraPos.getZ()); + ms.pushPose(); + ms.translate(-cameraPos.x(), -cameraPos.y(), -cameraPos.z()); SuperRenderTypeBuffer buffer = SuperRenderTypeBuffer.getInstance(); CouplingRenderer.renderAll(ms, buffer); @@ -196,17 +196,17 @@ public class ClientEvents { buffer.draw(); RenderSystem.enableCull(); - ms.pop(); + ms.popPose(); } @SubscribeEvent public static void onRenderOverlay(RenderGameOverlayEvent.Post event) { MatrixStack ms = event.getMatrixStack(); Impl buffers = Minecraft.getInstance() - .getBufferBuilders() - .getEntityVertexConsumers(); + .renderBuffers() + .bufferSource(); int light = 0xF000F0; - int overlay = OverlayTexture.DEFAULT_UV; + int overlay = OverlayTexture.NO_OVERLAY; float pt = event.getPartialTicks(); if (event.getType() == ElementType.AIR) @@ -239,7 +239,7 @@ public class ClientEvents { ItemStack stack = event.getItemStack(); String translationKey = stack.getItem() - .getTranslationKey(stack); + .getDescriptionId(stack); if (translationKey.startsWith(itemPrefix) || translationKey.startsWith(blockPrefix)) if (TooltipHelper.hasTooltip(stack, event.getPlayer())) { @@ -276,31 +276,31 @@ public class ClientEvents { } protected static boolean isGameActive() { - return !(Minecraft.getInstance().world == null || Minecraft.getInstance().player == null); + return !(Minecraft.getInstance().level == null || Minecraft.getInstance().player == null); } @SubscribeEvent public static void getFogDensity(EntityViewRenderEvent.FogDensity event) { ActiveRenderInfo info = event.getInfo(); - FluidState fluidState = info.getFluidState(); + FluidState fluidState = info.getFluidInCamera(); if (fluidState.isEmpty()) return; - Fluid fluid = fluidState.getFluid(); + Fluid fluid = fluidState.getType(); - if (fluid.isEquivalentTo(AllFluids.CHOCOLATE.get())) { + if (fluid.isSame(AllFluids.CHOCOLATE.get())) { event.setDensity(5f); event.setCanceled(true); return; } - if (fluid.isEquivalentTo(AllFluids.HONEY.get())) { + if (fluid.isSame(AllFluids.HONEY.get())) { event.setDensity(1.5f); event.setCanceled(true); return; } if (FluidHelper.isWater(fluid) && AllItems.DIVING_HELMET.get() - .isWornBy(Minecraft.getInstance().renderViewEntity)) { + .isWornBy(Minecraft.getInstance().cameraEntity)) { event.setDensity(0.010f); event.setCanceled(true); return; @@ -310,18 +310,18 @@ public class ClientEvents { @SubscribeEvent public static void getFogColor(EntityViewRenderEvent.FogColors event) { ActiveRenderInfo info = event.getInfo(); - FluidState fluidState = info.getFluidState(); + FluidState fluidState = info.getFluidInCamera(); if (fluidState.isEmpty()) return; - Fluid fluid = fluidState.getFluid(); + Fluid fluid = fluidState.getType(); - if (fluid.isEquivalentTo(AllFluids.CHOCOLATE.get())) { + if (fluid.isSame(AllFluids.CHOCOLATE.get())) { event.setRed(98 / 256f); event.setGreen(32 / 256f); event.setBlue(32 / 256f); } - if (fluid.isEquivalentTo(AllFluids.HONEY.get())) { + if (fluid.isSame(AllFluids.HONEY.get())) { event.setRed(234 / 256f); event.setGreen(174 / 256f); event.setBlue(47 / 256f); diff --git a/src/main/java/com/simibubi/create/events/CommonEvents.java b/src/main/java/com/simibubi/create/events/CommonEvents.java index 6664931dd..3631e9b0b 100644 --- a/src/main/java/com/simibubi/create/events/CommonEvents.java +++ b/src/main/java/com/simibubi/create/events/CommonEvents.java @@ -71,12 +71,12 @@ public class CommonEvents { BlockPos pos = event.getPos(); IWorld world = event.getWorld(); - if (fluidState.isSource() && FluidHelper.isLava(fluidState.getFluid())) + if (fluidState.isSource() && FluidHelper.isLava(fluidState.getType())) return; for (Direction direction : Iterate.directions) { - FluidState metFluidState = fluidState.isSource() ? fluidState : world.getFluidState(pos.offset(direction)); - if (!metFluidState.isTagged(FluidTags.WATER)) + FluidState metFluidState = fluidState.isSource() ? fluidState : world.getFluidState(pos.relative(direction)); + if (!metFluidState.is(FluidTags.WATER)) continue; BlockState lavaInteraction = AllFluids.getLavaInteraction(metFluidState); if (lavaInteraction == null) @@ -100,7 +100,7 @@ public class CommonEvents { @SubscribeEvent public static void onUpdateLivingEntity(LivingUpdateEvent event) { LivingEntity entityLiving = event.getEntityLiving(); - World world = entityLiving.world; + World world = entityLiving.level; if (world == null) return; ContraptionHandler.entitiesWhoJustDismountedGetSentToTheRightLocation(entityLiving, world); @@ -161,7 +161,7 @@ public class CommonEvents { } public static void leftClickEmpty(ServerPlayerEntity player) { - ItemStack stack = player.getHeldItemMainhand(); + ItemStack stack = player.getMainHandItem(); if (stack.getItem() instanceof ZapperItem) { ZapperInteractionHandler.trySelect(stack, player); } diff --git a/src/main/java/com/simibubi/create/events/InputEvents.java b/src/main/java/com/simibubi/create/events/InputEvents.java index b40da1974..2b97cb343 100644 --- a/src/main/java/com/simibubi/create/events/InputEvents.java +++ b/src/main/java/com/simibubi/create/events/InputEvents.java @@ -22,7 +22,7 @@ public class InputEvents { int key = event.getKey(); boolean pressed = !(event.getAction() == 0); - if (Minecraft.getInstance().currentScreen != null) + if (Minecraft.getInstance().screen != null) return; CreateClient.SCHEMATIC_HANDLER.onKeyInput(key, pressed); @@ -30,7 +30,7 @@ public class InputEvents { @SubscribeEvent public static void onMouseScrolled(MouseScrollEvent event) { - if (Minecraft.getInstance().currentScreen != null) + if (Minecraft.getInstance().screen != null) return; double delta = event.getScrollDelta(); @@ -43,7 +43,7 @@ public class InputEvents { @SubscribeEvent public static void onMouseInput(MouseInputEvent event) { - if (Minecraft.getInstance().currentScreen != null) + if (Minecraft.getInstance().screen != null) return; int button = event.getButton(); @@ -55,7 +55,7 @@ public class InputEvents { @SubscribeEvent public static void onClickInput(ClickInputEvent event) { - if (Minecraft.getInstance().currentScreen != null) + if (Minecraft.getInstance().screen != null) return; if (event.isUseItem()) diff --git a/src/main/java/com/simibubi/create/foundation/BreakProgressHook.java b/src/main/java/com/simibubi/create/foundation/BreakProgressHook.java index 34c16f20e..c77691c83 100644 --- a/src/main/java/com/simibubi/create/foundation/BreakProgressHook.java +++ b/src/main/java/com/simibubi/create/foundation/BreakProgressHook.java @@ -12,10 +12,10 @@ public class BreakProgressHook { public static void whenBreaking(ClientWorld world, WorldRenderer renderer, int playerEntityId, BlockPos pos, int progress) { if (AllBlocks.BELT.has(world.getBlockState(pos))) { - BeltTileEntity belt = (BeltTileEntity) world.getTileEntity(pos); + BeltTileEntity belt = (BeltTileEntity) world.getBlockEntity(pos); for (BlockPos beltPos : BeltBlock.getBeltChain(world, belt.getController())) { - renderer.sendBlockBreakProgress(beltPos.hashCode(), beltPos, progress); + renderer.destroyBlockProgress(beltPos.hashCode(), beltPos, progress); } } } diff --git a/src/main/java/com/simibubi/create/foundation/advancement/AllAdvancements.java b/src/main/java/com/simibubi/create/foundation/advancement/AllAdvancements.java index 42b1a6a5c..f5e4d5b02 100644 --- a/src/main/java/com/simibubi/create/foundation/advancement/AllAdvancements.java +++ b/src/main/java/com/simibubi/create/foundation/advancement/AllAdvancements.java @@ -45,135 +45,135 @@ public class AllAdvancements implements IDataProvider { public void register(Consumer t) { String id = Create.ID; - Advancement root = Advancement.Builder.builder() - .withDisplay(AllItems.BRASS_HAND.asStack(), new TranslationTextComponent(LANG + "root"), + Advancement root = Advancement.Builder.advancement() + .display(AllItems.BRASS_HAND.asStack(), new TranslationTextComponent(LANG + "root"), new TranslationTextComponent(LANG + "root.desc"), new ResourceLocation(Create.ID, "textures/block/palettes/gabbro/bricks.png"), FrameType.TASK, false, false, false) - .withCriterion("0", InventoryChangeTrigger.Instance.forItems(new IItemProvider[] {})) - .register(t, id + ":root"); + .addCriterion("0", InventoryChangeTrigger.Instance.hasItems(new IItemProvider[] {})) + .save(t, id + ":root"); Advancement andesite_alloy = - advancement("andesite_alloy", AllItems.ANDESITE_ALLOY.get(), TaskType.NORMAL).withParent(root) - .withCriterion("0", itemGathered(AllItems.ANDESITE_ALLOY.get())) - .register(t, id + ":andesite_alloy"); + advancement("andesite_alloy", AllItems.ANDESITE_ALLOY.get(), TaskType.NORMAL).parent(root) + .addCriterion("0", itemGathered(AllItems.ANDESITE_ALLOY.get())) + .save(t, id + ":andesite_alloy"); kineticsBranch(t, andesite_alloy); Advancement aesthetics = advancement("aesthetics", AllBlocks.WOODEN_BRACKET.get(), TaskType.NORMAL) - .withParent(andesite_alloy) - .withCriterion("0", AllTriggers.BRACKET_APPLY_TRIGGER.forEntries(AllBlocks.SHAFT.get())) - .withCriterion("1", + .parent(andesite_alloy) + .addCriterion("0", AllTriggers.BRACKET_APPLY_TRIGGER.forEntries(AllBlocks.SHAFT.get())) + .addCriterion("1", AllTriggers.BRACKET_APPLY_TRIGGER.forEntries(AllBlocks.COGWHEEL.get(), AllBlocks.LARGE_COGWHEEL.get())) - .withCriterion("2", AllTriggers.BRACKET_APPLY_TRIGGER.forEntries(AllBlocks.FLUID_PIPE.get())) - .register(t, id + ":aesthetics"); + .addCriterion("2", AllTriggers.BRACKET_APPLY_TRIGGER.forEntries(AllBlocks.FLUID_PIPE.get())) + .save(t, id + ":aesthetics"); Advancement reinforced = - advancement("reinforced", AllBlocks.ANDESITE_ENCASED_SHAFT.get(), TaskType.NORMAL).withParent(aesthetics) - .withCriterion("0", AllTriggers.CASING_SHAFT.instance()) - .withCriterion("1", AllTriggers.CASING_BELT.instance()) - .withCriterion("2", AllTriggers.CASING_PIPE.instance()) - .register(t, id + ":reinforced"); + advancement("reinforced", AllBlocks.ANDESITE_ENCASED_SHAFT.get(), TaskType.NORMAL).parent(aesthetics) + .addCriterion("0", AllTriggers.CASING_SHAFT.instance()) + .addCriterion("1", AllTriggers.CASING_BELT.instance()) + .addCriterion("2", AllTriggers.CASING_PIPE.instance()) + .save(t, id + ":reinforced"); Advancement water_wheel = - advancement("water_wheel", AllBlocks.WATER_WHEEL.get(), TaskType.NORMAL).withParent(andesite_alloy) - .withCriterion("0", placeBlock(AllBlocks.WATER_WHEEL.get())) - .withCriterion("1", AllTriggers.WATER_WHEEL.instance()) - .register(t, id + ":water_wheel"); + advancement("water_wheel", AllBlocks.WATER_WHEEL.get(), TaskType.NORMAL).parent(andesite_alloy) + .addCriterion("0", placeBlock(AllBlocks.WATER_WHEEL.get())) + .addCriterion("1", AllTriggers.WATER_WHEEL.instance()) + .save(t, id + ":water_wheel"); - Advancement lava_wheel = advancement("lava_wheel", Items.LAVA_BUCKET, TaskType.SECRET).withParent(water_wheel) - .withCriterion("0", AllTriggers.LAVA_WHEEL.instance()) - .register(t, id + ":lava_wheel"); + Advancement lava_wheel = advancement("lava_wheel", Items.LAVA_BUCKET, TaskType.SECRET).parent(water_wheel) + .addCriterion("0", AllTriggers.LAVA_WHEEL.instance()) + .save(t, id + ":lava_wheel"); Advancement chocolate_wheel = advancement("chocolate_wheel", AllFluids.CHOCOLATE.get() - .getFilledBucket(), TaskType.SECRET).withParent(water_wheel) - .withCriterion("0", AllTriggers.CHOCOLATE_WHEEL.instance()) - .register(t, id + ":chocolate_wheel"); + .getBucket(), TaskType.SECRET).parent(water_wheel) + .addCriterion("0", AllTriggers.CHOCOLATE_WHEEL.instance()) + .save(t, id + ":chocolate_wheel"); Advancement millstone = - kinecticAdvancement("millstone", AllBlocks.MILLSTONE.get(), TaskType.NORMAL).withParent(andesite_alloy) - .register(t, id + ":millstone"); + kinecticAdvancement("millstone", AllBlocks.MILLSTONE.get(), TaskType.NORMAL).parent(andesite_alloy) + .save(t, id + ":millstone"); Advancement cuckoo = - advancement("cuckoo", AllBlocks.CUCKOO_CLOCK.get(), TaskType.NORMAL).withParent(andesite_alloy) - .withCriterion("0", AllTriggers.CUCKOO.instance()) - .register(t, id + ":cuckoo"); + advancement("cuckoo", AllBlocks.CUCKOO_CLOCK.get(), TaskType.NORMAL).parent(andesite_alloy) + .addCriterion("0", AllTriggers.CUCKOO.instance()) + .save(t, id + ":cuckoo"); Advancement windmill = - advancement("windmill", AllBlocks.WINDMILL_BEARING.get(), TaskType.NORMAL).withParent(andesite_alloy) - .withCriterion("0", AllTriggers.WINDMILL.instance()) - .register(t, id + ":windmill"); + advancement("windmill", AllBlocks.WINDMILL_BEARING.get(), TaskType.NORMAL).parent(andesite_alloy) + .addCriterion("0", AllTriggers.WINDMILL.instance()) + .save(t, id + ":windmill"); Advancement maxed_windmill = - advancement("maxed_windmill", AllBlocks.WINDMILL_BEARING.get(), TaskType.GOAL).withParent(windmill) - .withCriterion("0", AllTriggers.MAXED_WINDMILL.instance()) - .register(t, id + ":maxed_windmill"); + advancement("maxed_windmill", AllBlocks.WINDMILL_BEARING.get(), TaskType.GOAL).parent(windmill) + .addCriterion("0", AllTriggers.MAXED_WINDMILL.instance()) + .save(t, id + ":maxed_windmill"); Advancement andesite_casing = - advancement("andesite_casing", AllBlocks.ANDESITE_CASING.get(), TaskType.GOAL).withParent(andesite_alloy) - .withCriterion("0", itemGathered(AllBlocks.ANDESITE_CASING.get())) - .register(t, id + ":andesite_casing"); + advancement("andesite_casing", AllBlocks.ANDESITE_CASING.get(), TaskType.GOAL).parent(andesite_alloy) + .addCriterion("0", itemGathered(AllBlocks.ANDESITE_CASING.get())) + .save(t, id + ":andesite_casing"); Advancement drill = kinecticAdvancement("mechanical_drill", AllBlocks.MECHANICAL_DRILL.get(), TaskType.NORMAL) - .withParent(andesite_casing) - .register(t, id + ":mechanical_drill"); + .parent(andesite_casing) + .save(t, id + ":mechanical_drill"); Advancement press = - advancement("press", AllBlocks.MECHANICAL_PRESS.get(), TaskType.MILESTONE).withParent(andesite_casing) - .withCriterion("0", AllTriggers.BONK.instance()) - .register(t, id + ":press"); + advancement("press", AllBlocks.MECHANICAL_PRESS.get(), TaskType.MILESTONE).parent(andesite_casing) + .addCriterion("0", AllTriggers.BONK.instance()) + .save(t, id + ":press"); - Advancement fan = advancement("fan", AllBlocks.ENCASED_FAN.get(), TaskType.NORMAL).withParent(press) - .withCriterion("0", AllTriggers.FAN_PROCESSING.forEntries(InWorldProcessing.Type.NONE)) - .register(t, id + ":fan"); + Advancement fan = advancement("fan", AllBlocks.ENCASED_FAN.get(), TaskType.NORMAL).parent(press) + .addCriterion("0", AllTriggers.FAN_PROCESSING.forEntries(InWorldProcessing.Type.NONE)) + .save(t, id + ":fan"); - Advancement fan_lava = advancement("fan_lava", Items.LAVA_BUCKET, TaskType.NORMAL).withParent(fan) - .withCriterion("0", AllTriggers.FAN_PROCESSING.forEntries(InWorldProcessing.Type.BLASTING)) - .register(t, id + ":fan_lava"); + Advancement fan_lava = advancement("fan_lava", Items.LAVA_BUCKET, TaskType.NORMAL).parent(fan) + .addCriterion("0", AllTriggers.FAN_PROCESSING.forEntries(InWorldProcessing.Type.BLASTING)) + .save(t, id + ":fan_lava"); - Advancement fan_smoke = advancement("fan_smoke", Items.CAMPFIRE, TaskType.NORMAL).withParent(fan) - .withCriterion("0", AllTriggers.FAN_PROCESSING.forEntries(InWorldProcessing.Type.SMOKING)) - .register(t, id + ":fan_smoke"); + Advancement fan_smoke = advancement("fan_smoke", Items.CAMPFIRE, TaskType.NORMAL).parent(fan) + .addCriterion("0", AllTriggers.FAN_PROCESSING.forEntries(InWorldProcessing.Type.SMOKING)) + .save(t, id + ":fan_smoke"); - Advancement fan_water = advancement("fan_water", Items.WATER_BUCKET, TaskType.NORMAL).withParent(fan) - .withCriterion("0", AllTriggers.FAN_PROCESSING.forEntries(InWorldProcessing.Type.SPLASHING)) - .register(t, id + ":fan_water"); + Advancement fan_water = advancement("fan_water", Items.WATER_BUCKET, TaskType.NORMAL).parent(fan) + .addCriterion("0", AllTriggers.FAN_PROCESSING.forEntries(InWorldProcessing.Type.SPLASHING)) + .save(t, id + ":fan_water"); Advancement rose_quartz = itemAdvancement("polished_rose_quartz", AllItems.POLISHED_ROSE_QUARTZ, TaskType.NORMAL) - .withParent(andesite_casing) - .register(t, id + ":polished_rose_quartz"); + .parent(andesite_casing) + .save(t, id + ":polished_rose_quartz"); Advancement electron_tube = - itemAdvancement("electron_tube", AllItems.ELECTRON_TUBE, TaskType.NORMAL).withParent(rose_quartz) - .register(t, id + ":electron_tube"); + itemAdvancement("electron_tube", AllItems.ELECTRON_TUBE, TaskType.NORMAL).parent(rose_quartz) + .save(t, id + ":electron_tube"); Advancement saw = - kinecticAdvancement("mechanical_saw", AllBlocks.MECHANICAL_SAW.get(), TaskType.NORMAL).withParent(press) - .register(t, id + ":mechanical_saw"); + kinecticAdvancement("mechanical_saw", AllBlocks.MECHANICAL_SAW.get(), TaskType.NORMAL).parent(press) + .save(t, id + ":mechanical_saw"); - Advancement basin = advancement("basin", AllBlocks.BASIN.get(), TaskType.NORMAL).withParent(press) - .withCriterion("0", placeBlock(AllBlocks.BASIN.get())) - .withCriterion("1", AllTriggers.BASIN_THROW.instance()) - .register(t, id + ":basin"); + Advancement basin = advancement("basin", AllBlocks.BASIN.get(), TaskType.NORMAL).parent(press) + .addCriterion("0", placeBlock(AllBlocks.BASIN.get())) + .addCriterion("1", AllTriggers.BASIN_THROW.instance()) + .save(t, id + ":basin"); Advancement mixer = advancement("mixer", AllBlocks.MECHANICAL_MIXER.get(), TaskType.MILESTONE) - .withCriterion("0", placeBlock(AllBlocks.MECHANICAL_MIXER.get())) - .withCriterion("1", AllTriggers.MIXER_MIX.instance()) - .withParent(basin) - .register(t, id + ":mixer"); + .addCriterion("0", placeBlock(AllBlocks.MECHANICAL_MIXER.get())) + .addCriterion("1", AllTriggers.MIXER_MIX.instance()) + .parent(basin) + .save(t, id + ":mixer"); Advancement compact = advancement("compact", Blocks.IRON_BLOCK, TaskType.NORMAL) - .withCriterion("0", AllTriggers.PRESS_COMPACT.instance()) - .withParent(basin) - .register(t, id + ":compact"); + .addCriterion("0", AllTriggers.PRESS_COMPACT.instance()) + .parent(basin) + .save(t, id + ":compact"); Advancement blaze_burner = - itemAdvancement("blaze_burner", AllBlocks.BLAZE_BURNER, TaskType.NORMAL).withParent(mixer) - .register(t, id + ":blaze_burner"); + itemAdvancement("blaze_burner", AllBlocks.BLAZE_BURNER, TaskType.NORMAL).parent(mixer) + .save(t, id + ":blaze_burner"); - Advancement brass = itemAdvancement("brass", AllItems.BRASS_INGOT, TaskType.NORMAL).withParent(blaze_burner) - .register(t, id + ":brass"); + Advancement brass = itemAdvancement("brass", AllItems.BRASS_INGOT, TaskType.NORMAL).parent(blaze_burner) + .save(t, id + ":brass"); brassAge(t, brass); copperAge(t, press); @@ -182,64 +182,64 @@ public class AllAdvancements implements IDataProvider { void kineticsBranch(Consumer t, Advancement root) { String id = Create.ID; - Advancement its_alive = advancement("its_alive", AllBlocks.COGWHEEL.get(), TaskType.NORMAL).withParent(root) - .withCriterion("0", AllTriggers.ROTATION.instance()) - .register(t, id + ":its_alive"); + Advancement its_alive = advancement("its_alive", AllBlocks.COGWHEEL.get(), TaskType.NORMAL).parent(root) + .addCriterion("0", AllTriggers.ROTATION.instance()) + .save(t, id + ":its_alive"); - Advancement belt = advancement("belt", AllItems.BELT_CONNECTOR.get(), TaskType.NORMAL).withParent(its_alive) - .withCriterion("0", AllTriggers.CONNECT_BELT.instance()) - .register(t, id + ":belt"); + Advancement belt = advancement("belt", AllItems.BELT_CONNECTOR.get(), TaskType.NORMAL).parent(its_alive) + .addCriterion("0", AllTriggers.CONNECT_BELT.instance()) + .save(t, id + ":belt"); - Advancement tunnel = advancement("tunnel", AllBlocks.ANDESITE_TUNNEL.get(), TaskType.NORMAL).withParent(belt) - .withCriterion("0", AllTriggers.PLACE_TUNNEL.instance()) - .register(t, id + ":tunnel"); + Advancement tunnel = advancement("tunnel", AllBlocks.ANDESITE_TUNNEL.get(), TaskType.NORMAL).parent(belt) + .addCriterion("0", AllTriggers.PLACE_TUNNEL.instance()) + .save(t, id + ":tunnel"); Advancement splitter_tunnel = - advancement("splitter_tunnel", AllBlocks.BRASS_TUNNEL.get(), TaskType.MILESTONE).withParent(tunnel) - .withCriterion("0", AllTriggers.CONNECT_TUNNEL.instance()) - .register(t, id + ":splitter_tunnel"); + advancement("splitter_tunnel", AllBlocks.BRASS_TUNNEL.get(), TaskType.MILESTONE).parent(tunnel) + .addCriterion("0", AllTriggers.CONNECT_TUNNEL.instance()) + .save(t, id + ":splitter_tunnel"); - Advancement chute = advancement("chute", AllBlocks.CHUTE.get(), TaskType.NORMAL).withParent(belt) - .withCriterion("0", placeBlock(AllBlocks.CHUTE.get())) - .register(t, id + ":chute"); + Advancement chute = advancement("chute", AllBlocks.CHUTE.get(), TaskType.NORMAL).parent(belt) + .addCriterion("0", placeBlock(AllBlocks.CHUTE.get())) + .save(t, id + ":chute"); Advancement upward_chute = - advancement("upward_chute", AllBlocks.ENCASED_FAN.get(), TaskType.NORMAL).withParent(chute) - .withCriterion("0", AllTriggers.UPWARD_CHUTE.instance()) - .register(t, id + ":upward_chute"); + advancement("upward_chute", AllBlocks.ENCASED_FAN.get(), TaskType.NORMAL).parent(chute) + .addCriterion("0", AllTriggers.UPWARD_CHUTE.instance()) + .save(t, id + ":upward_chute"); Advancement belt_funnel = - advancement("belt_funnel", AllBlocks.ANDESITE_FUNNEL.get(), TaskType.NORMAL).withParent(belt) - .withCriterion("0", AllTriggers.BELT_FUNNEL.instance()) - .register(t, id + ":belt_funnel"); + advancement("belt_funnel", AllBlocks.ANDESITE_FUNNEL.get(), TaskType.NORMAL).parent(belt) + .addCriterion("0", AllTriggers.BELT_FUNNEL.instance()) + .save(t, id + ":belt_funnel"); Advancement belt_funnel_kiss = - advancement("belt_funnel_kiss", AllBlocks.BRASS_FUNNEL.get(), TaskType.SECRET).withParent(belt_funnel) - .withCriterion("0", AllTriggers.BELT_FUNNEL_KISS.instance()) - .register(t, id + ":belt_funnel_kiss"); + advancement("belt_funnel_kiss", AllBlocks.BRASS_FUNNEL.get(), TaskType.SECRET).parent(belt_funnel) + .addCriterion("0", AllTriggers.BELT_FUNNEL_KISS.instance()) + .save(t, id + ":belt_funnel_kiss"); - Advancement wrench = itemAdvancement("wrench", AllItems.WRENCH, TaskType.NORMAL).withParent(its_alive) - .register(t, id + ":wrench"); + Advancement wrench = itemAdvancement("wrench", AllItems.WRENCH, TaskType.NORMAL).parent(its_alive) + .save(t, id + ":wrench"); - Advancement goggles = itemAdvancement("goggles", AllItems.GOGGLES, TaskType.NORMAL).withParent(its_alive) - .register(t, id + ":goggles"); + Advancement goggles = itemAdvancement("goggles", AllItems.GOGGLES, TaskType.NORMAL).parent(its_alive) + .save(t, id + ":goggles"); Advancement speed_gauge = - kinecticAdvancement("speedometer", AllBlocks.SPEEDOMETER.get(), TaskType.NORMAL).withParent(goggles) - .register(t, id + ":speedometer"); + kinecticAdvancement("speedometer", AllBlocks.SPEEDOMETER.get(), TaskType.NORMAL).parent(goggles) + .save(t, id + ":speedometer"); Advancement stress_gauge = - kinecticAdvancement("stressometer", AllBlocks.STRESSOMETER.get(), TaskType.NORMAL).withParent(goggles) - .register(t, id + ":stressometer"); + kinecticAdvancement("stressometer", AllBlocks.STRESSOMETER.get(), TaskType.NORMAL).parent(goggles) + .save(t, id + ":stressometer"); Advancement shifting_gears = - advancement("shifting_gears", AllBlocks.LARGE_COGWHEEL.get(), TaskType.NORMAL).withParent(its_alive) - .withCriterion("0", AllTriggers.SHIFTING_GEARS.instance()) - .register(t, id + ":shifting_gears"); + advancement("shifting_gears", AllBlocks.LARGE_COGWHEEL.get(), TaskType.NORMAL).parent(its_alive) + .addCriterion("0", AllTriggers.SHIFTING_GEARS.instance()) + .save(t, id + ":shifting_gears"); - Advancement overstressed = advancement("overstressed", Items.BARRIER, TaskType.SECRET).withParent(its_alive) - .withCriterion("0", AllTriggers.OVERSTRESSED.instance()) - .register(t, id + ":overstressed"); + Advancement overstressed = advancement("overstressed", Items.BARRIER, TaskType.SECRET).parent(its_alive) + .addCriterion("0", AllTriggers.OVERSTRESSED.instance()) + .save(t, id + ":overstressed"); } @@ -247,190 +247,190 @@ public class AllAdvancements implements IDataProvider { String id = Create.ID; Advancement copper_casing = - advancement("copper_casing", AllBlocks.COPPER_CASING.get(), TaskType.GOAL).withParent(root) - .withCriterion("0", itemGathered(AllBlocks.COPPER_CASING.get())) - .register(t, id + ":copper_casing"); + advancement("copper_casing", AllBlocks.COPPER_CASING.get(), TaskType.GOAL).parent(root) + .addCriterion("0", itemGathered(AllBlocks.COPPER_CASING.get())) + .save(t, id + ":copper_casing"); Advancement item_drain = - advancement("item_drain", AllBlocks.ITEM_DRAIN.get(), TaskType.NORMAL).withParent(copper_casing) - .withCriterion("0", AllTriggers.ITEM_DRAIN.instance()) - .register(t, id + ":item_drain"); + advancement("item_drain", AllBlocks.ITEM_DRAIN.get(), TaskType.NORMAL).parent(copper_casing) + .addCriterion("0", AllTriggers.ITEM_DRAIN.instance()) + .save(t, id + ":item_drain"); Advancement chained_item_drain = - advancement("chained_item_drain", AllBlocks.ITEM_DRAIN.get(), TaskType.SECRET).withParent(item_drain) - .withCriterion("0", AllTriggers.CHAINED_ITEM_DRAIN.instance()) - .register(t, id + ":chained_item_drain"); + advancement("chained_item_drain", AllBlocks.ITEM_DRAIN.get(), TaskType.SECRET).parent(item_drain) + .addCriterion("0", AllTriggers.CHAINED_ITEM_DRAIN.instance()) + .save(t, id + ":chained_item_drain"); - Advancement spout = advancement("spout", AllBlocks.SPOUT.get(), TaskType.NORMAL).withParent(copper_casing) - .withCriterion("0", AllTriggers.SPOUT.instance()) - .register(t, id + ":spout"); + Advancement spout = advancement("spout", AllBlocks.SPOUT.get(), TaskType.NORMAL).parent(copper_casing) + .addCriterion("0", AllTriggers.SPOUT.instance()) + .save(t, id + ":spout"); - Advancement spout_potion = advancement("spout_potion", Items.POTION, TaskType.GOAL).withParent(spout) - .withCriterion("0", AllTriggers.SPOUT_POTION.instance()) - .register(t, id + ":spout_potion"); + Advancement spout_potion = advancement("spout_potion", Items.POTION, TaskType.GOAL).parent(spout) + .addCriterion("0", AllTriggers.SPOUT_POTION.instance()) + .save(t, id + ":spout_potion"); Advancement chocolate = itemAdvancement("chocolate", () -> AllFluids.CHOCOLATE.get() - .getFilledBucket(), TaskType.GOAL).withParent(spout) - .register(t, id + ":chocolate"); + .getBucket(), TaskType.GOAL).parent(spout) + .save(t, id + ":chocolate"); Advancement glass_pipe = - advancement("glass_pipe", AllBlocks.FLUID_PIPE.get(), TaskType.NORMAL).withParent(copper_casing) - .withCriterion("0", AllTriggers.GLASS_PIPE.instance()) - .register(t, id + ":glass_pipe"); + advancement("glass_pipe", AllBlocks.FLUID_PIPE.get(), TaskType.NORMAL).parent(copper_casing) + .addCriterion("0", AllTriggers.GLASS_PIPE.instance()) + .save(t, id + ":glass_pipe"); Advancement pipe_collision = - advancement("pipe_collision", AllBlocks.FLUID_VALVE.get(), TaskType.NORMAL).withParent(glass_pipe) - .withCriterion("0", AllTriggers.PIPE_COLLISION.instance()) - .register(t, id + ":pipe_collision"); + advancement("pipe_collision", AllBlocks.FLUID_VALVE.get(), TaskType.NORMAL).parent(glass_pipe) + .addCriterion("0", AllTriggers.PIPE_COLLISION.instance()) + .save(t, id + ":pipe_collision"); - Advancement pipe_spill = advancement("pipe_spill", Items.BUCKET, TaskType.NORMAL).withParent(glass_pipe) - .withCriterion("0", AllTriggers.PIPE_SPILL.instance()) - .register(t, id + ":pipe_spill"); + Advancement pipe_spill = advancement("pipe_spill", Items.BUCKET, TaskType.NORMAL).parent(glass_pipe) + .addCriterion("0", AllTriggers.PIPE_SPILL.instance()) + .save(t, id + ":pipe_spill"); Advancement hose_pulley = - advancement("hose_pulley", AllBlocks.HOSE_PULLEY.get(), TaskType.NORMAL).withParent(pipe_spill) - .withCriterion("0", AllTriggers.HOSE_PULLEY.instance()) - .register(t, id + ":hose_pulley"); + advancement("hose_pulley", AllBlocks.HOSE_PULLEY.get(), TaskType.NORMAL).parent(pipe_spill) + .addCriterion("0", AllTriggers.HOSE_PULLEY.instance()) + .save(t, id + ":hose_pulley"); Advancement infinite_water = - advancement("infinite_water", Items.WATER_BUCKET, TaskType.NORMAL).withParent(hose_pulley) - .withCriterion("0", isInfinite(Fluids.WATER)) - .register(t, id + ":infinite_water"); + advancement("infinite_water", Items.WATER_BUCKET, TaskType.NORMAL).parent(hose_pulley) + .addCriterion("0", isInfinite(Fluids.WATER)) + .save(t, id + ":infinite_water"); Advancement infinite_lava = - advancement("infinite_lava", Items.LAVA_BUCKET, TaskType.GOAL).withParent(hose_pulley) - .withCriterion("0", isInfinite(Fluids.LAVA)) - .register(t, id + ":infinite_lava"); + advancement("infinite_lava", Items.LAVA_BUCKET, TaskType.GOAL).parent(hose_pulley) + .addCriterion("0", isInfinite(Fluids.LAVA)) + .save(t, id + ":infinite_lava"); Advancement infinite_chocolate = advancement("infinite_chocolate", AllFluids.CHOCOLATE.get() - .getFilledBucket(), TaskType.CHALLENGE).withParent(hose_pulley) - .withCriterion("0", isInfinite(AllFluids.CHOCOLATE.get())) - .register(t, id + ":infinite_chocolate"); + .getBucket(), TaskType.CHALLENGE).parent(hose_pulley) + .addCriterion("0", isInfinite(AllFluids.CHOCOLATE.get())) + .save(t, id + ":infinite_chocolate"); } void brassAge(Consumer t, Advancement root) { String id = Create.ID; Advancement brass_casing = - advancement("brass_casing", AllBlocks.BRASS_CASING.get(), TaskType.GOAL).withParent(root) - .withCriterion("0", itemGathered(AllBlocks.BRASS_CASING.get())) - .register(t, id + ":brass_casing"); + advancement("brass_casing", AllBlocks.BRASS_CASING.get(), TaskType.GOAL).parent(root) + .addCriterion("0", itemGathered(AllBlocks.BRASS_CASING.get())) + .save(t, id + ":brass_casing"); Advancement nixie_tube = - advancement("nixie_tube", AllBlocks.ORANGE_NIXIE_TUBE.get(), TaskType.NORMAL).withParent(brass_casing) - .withCriterion("0", placeBlock(AllBlocks.ORANGE_NIXIE_TUBE.get())) - .register(t, id + ":nixie_tube"); + advancement("nixie_tube", AllBlocks.ORANGE_NIXIE_TUBE.get(), TaskType.NORMAL).parent(brass_casing) + .addCriterion("0", placeBlock(AllBlocks.ORANGE_NIXIE_TUBE.get())) + .save(t, id + ":nixie_tube"); Advancement crafter = kinecticAdvancement("crafter", AllBlocks.MECHANICAL_CRAFTER.get(), TaskType.MILESTONE) - .withParent(brass_casing) - .register(t, id + ":crafter"); + .parent(brass_casing) + .save(t, id + ":crafter"); - Advancement flywheel = advancement("flywheel", AllBlocks.FLYWHEEL.get(), TaskType.NORMAL).withParent(crafter) - .withCriterion("0", AllTriggers.FLYWHEEL.instance()) - .register(t, id + ":flywheel"); + Advancement flywheel = advancement("flywheel", AllBlocks.FLYWHEEL.get(), TaskType.NORMAL).parent(crafter) + .addCriterion("0", AllTriggers.FLYWHEEL.instance()) + .save(t, id + ":flywheel"); Advancement overstress_flywheel = - advancement("overstress_flywheel", AllBlocks.FURNACE_ENGINE.get(), TaskType.CHALLENGE).withParent(flywheel) - .withCriterion("0", AllTriggers.OVERSTRESS_FLYWHEEL.instance()) - .register(t, id + ":overstress_flywheel"); + advancement("overstress_flywheel", AllBlocks.FURNACE_ENGINE.get(), TaskType.CHALLENGE).parent(flywheel) + .addCriterion("0", AllTriggers.OVERSTRESS_FLYWHEEL.instance()) + .save(t, id + ":overstress_flywheel"); Advancement clockwork_bearing = advancement("clockwork_bearing", AllBlocks.CLOCKWORK_BEARING.get(), TaskType.NORMAL) - .withParent(brass_casing) - .withCriterion("0", AllTriggers.CLOCKWORK_BEARING.instance()) - .register(t, id + ":clockwork_bearing"); + .parent(brass_casing) + .addCriterion("0", AllTriggers.CLOCKWORK_BEARING.instance()) + .save(t, id + ":clockwork_bearing"); Advancement mechanical_arm = advancement("mechanical_arm", AllBlocks.MECHANICAL_ARM.get(), TaskType.MILESTONE) - .withCriterion("0", AllTriggers.MECHANICAL_ARM.instance()) - .withParent(brass_casing) - .register(t, id + ":mechanical_arm"); + .addCriterion("0", AllTriggers.MECHANICAL_ARM.instance()) + .parent(brass_casing) + .save(t, id + ":mechanical_arm"); Advancement musical_arm = advancement("musical_arm", Items.MUSIC_DISC_13, TaskType.MILESTONE) - .withCriterion("0", AllTriggers.MUSICAL_ARM.instance()) - .withParent(mechanical_arm) - .register(t, id + ":musical_arm"); + .addCriterion("0", AllTriggers.MUSICAL_ARM.instance()) + .parent(mechanical_arm) + .save(t, id + ":musical_arm"); Advancement arm_many_targets = advancement("arm_many_targets", AllBlocks.BRASS_FUNNEL.get(), TaskType.MILESTONE) - .withCriterion("0", AllTriggers.ARM_MANY_TARGETS.instance()) - .withParent(mechanical_arm) - .register(t, id + ":arm_many_targets"); + .addCriterion("0", AllTriggers.ARM_MANY_TARGETS.instance()) + .parent(mechanical_arm) + .save(t, id + ":arm_many_targets"); Advancement arm_blaze_burner = advancement("arm_blaze_burner", AllBlocks.BLAZE_BURNER.get(), TaskType.NORMAL) - .withCriterion("0", AllTriggers.ARM_BLAZE_BURNER.instance()) - .withParent(mechanical_arm) - .register(t, id + ":arm_blaze_burner"); + .addCriterion("0", AllTriggers.ARM_BLAZE_BURNER.instance()) + .parent(mechanical_arm) + .save(t, id + ":arm_blaze_burner"); Advancement deployer = - kinecticAdvancement("deployer", AllBlocks.DEPLOYER.get(), TaskType.MILESTONE).withParent(brass_casing) - .register(t, id + ":deployer"); + kinecticAdvancement("deployer", AllBlocks.DEPLOYER.get(), TaskType.MILESTONE).parent(brass_casing) + .save(t, id + ":deployer"); Advancement clockwork_component = - itemAdvancement("precision_mechanism", AllItems.PRECISION_MECHANISM, TaskType.NORMAL).withParent(deployer) - .register(t, id + ":precision_mechanism"); + itemAdvancement("precision_mechanism", AllItems.PRECISION_MECHANISM, TaskType.NORMAL).parent(deployer) + .save(t, id + ":precision_mechanism"); - Advancement clockwork_component_eob = deadEnd().withParent(clockwork_component) - .withCriterion("0", itemGathered(AllItems.PRECISION_MECHANISM.get())) - .register(t, id + ":clockwork_component_eob"); + Advancement clockwork_component_eob = deadEnd().parent(clockwork_component) + .addCriterion("0", itemGathered(AllItems.PRECISION_MECHANISM.get())) + .save(t, id + ":clockwork_component_eob"); Advancement extendo_grip = - advancement("extendo_grip", AllItems.EXTENDO_GRIP.get(), TaskType.NORMAL).withParent(clockwork_component) - .withCriterion("0", AllTriggers.EXTENDO.instance()) - .register(t, id + ":extendo_grip"); + advancement("extendo_grip", AllItems.EXTENDO_GRIP.get(), TaskType.NORMAL).parent(clockwork_component) + .addCriterion("0", AllTriggers.EXTENDO.instance()) + .save(t, id + ":extendo_grip"); Advancement potato_cannon = - advancement("potato_cannon", AllItems.POTATO_CANNON.get(), TaskType.GOAL).withParent(clockwork_component) - .withCriterion("0", AllTriggers.POTATO_KILL.instance()) - .register(t, id + ":potato_cannon"); + advancement("potato_cannon", AllItems.POTATO_CANNON.get(), TaskType.GOAL).parent(clockwork_component) + .addCriterion("0", AllTriggers.POTATO_KILL.instance()) + .save(t, id + ":potato_cannon"); Advancement dual_extendo_grip = - advancement("dual_extendo_grip", AllItems.EXTENDO_GRIP.get(), TaskType.SECRET).withParent(extendo_grip) - .withCriterion("0", AllTriggers.GIGA_EXTENDO.instance()) - .register(t, id + ":dual_extendo_grip"); + advancement("dual_extendo_grip", AllItems.EXTENDO_GRIP.get(), TaskType.SECRET).parent(extendo_grip) + .addCriterion("0", AllTriggers.GIGA_EXTENDO.instance()) + .save(t, id + ":dual_extendo_grip"); Advancement speed_controller = kinecticAdvancement("speed_controller", AllBlocks.ROTATION_SPEED_CONTROLLER.get(), TaskType.NORMAL) - .withParent(clockwork_component) - .register(t, id + ":speed_controller"); + .parent(clockwork_component) + .save(t, id + ":speed_controller"); - Advancement fist_bump = advancement("fist_bump", AllBlocks.DEPLOYER.get(), TaskType.SECRET).withParent(deployer) - .withCriterion("0", AllTriggers.DEPLOYER_BOOP.instance()) - .register(t, id + ":fist_bump"); + Advancement fist_bump = advancement("fist_bump", AllBlocks.DEPLOYER.get(), TaskType.SECRET).parent(deployer) + .addCriterion("0", AllTriggers.DEPLOYER_BOOP.instance()) + .save(t, id + ":fist_bump"); Advancement crushing_wheel = - advancement("crushing_wheel", AllBlocks.CRUSHING_WHEEL.get(), TaskType.MILESTONE).withParent(crafter) - .withCriterion("0", itemGathered(AllBlocks.CRUSHING_WHEEL.get())) - .register(t, id + ":crushing_wheel"); + advancement("crushing_wheel", AllBlocks.CRUSHING_WHEEL.get(), TaskType.MILESTONE).parent(crafter) + .addCriterion("0", itemGathered(AllBlocks.CRUSHING_WHEEL.get())) + .save(t, id + ":crushing_wheel"); Advancement blaze_cake = - itemAdvancement("blaze_cake", AllItems.BLAZE_CAKE, TaskType.NORMAL).withParent(crushing_wheel) - .register(t, id + ":blaze_cake"); + itemAdvancement("blaze_cake", AllItems.BLAZE_CAKE, TaskType.NORMAL).parent(crushing_wheel) + .save(t, id + ":blaze_cake"); Advancement chromatic_compound = - itemAdvancement("chromatic_compound", AllItems.CHROMATIC_COMPOUND, TaskType.NORMAL).withParent(blaze_cake) - .register(t, id + ":chromatic_compound"); + itemAdvancement("chromatic_compound", AllItems.CHROMATIC_COMPOUND, TaskType.NORMAL).parent(blaze_cake) + .save(t, id + ":chromatic_compound"); Advancement shadow_steel = - itemAdvancement("shadow_steel", AllItems.SHADOW_STEEL, TaskType.GOAL).withParent(chromatic_compound) - .register(t, id + ":shadow_steel"); + itemAdvancement("shadow_steel", AllItems.SHADOW_STEEL, TaskType.GOAL).parent(chromatic_compound) + .save(t, id + ":shadow_steel"); Advancement refined_radiance = - itemAdvancement("refined_radiance", AllItems.REFINED_RADIANCE, TaskType.GOAL).withParent(chromatic_compound) - .register(t, id + ":refined_radiance"); + itemAdvancement("refined_radiance", AllItems.REFINED_RADIANCE, TaskType.GOAL).parent(chromatic_compound) + .save(t, id + ":refined_radiance"); Advancement chromatic_age = advancement("chromatic_age", AllBlocks.REFINED_RADIANCE_CASING.get(), TaskType.GOAL) - .withParent(chromatic_compound) - .withCriterion("0", itemGathered(AllBlocks.SHADOW_STEEL_CASING.get())) - .withCriterion("1", itemGathered(AllBlocks.REFINED_RADIANCE_CASING.get())) - .register(t, id + "chromatic_age"); + .parent(chromatic_compound) + .addCriterion("0", itemGathered(AllBlocks.SHADOW_STEEL_CASING.get())) + .addCriterion("1", itemGathered(AllBlocks.REFINED_RADIANCE_CASING.get())) + .save(t, id + "chromatic_age"); - Advancement chromatic_eob = deadEnd().withParent(chromatic_age) - .withCriterion("0", itemGathered(AllBlocks.SHADOW_STEEL_CASING.get())) - .withCriterion("1", itemGathered(AllBlocks.REFINED_RADIANCE_CASING.get())) - .register(t, id + ":chromatic_eob"); + Advancement chromatic_eob = deadEnd().parent(chromatic_age) + .addCriterion("0", itemGathered(AllBlocks.SHADOW_STEEL_CASING.get())) + .addCriterion("1", itemGathered(AllBlocks.REFINED_RADIANCE_CASING.get())) + .save(t, id + ":chromatic_eob"); Advancement symmetry_wand = - itemAdvancement("wand_of_symmetry", AllItems.WAND_OF_SYMMETRY, TaskType.NORMAL).withParent(refined_radiance) - .register(t, id + ":wand_of_symmetry"); + itemAdvancement("wand_of_symmetry", AllItems.WAND_OF_SYMMETRY, TaskType.NORMAL).parent(refined_radiance) + .save(t, id + ":wand_of_symmetry"); } @@ -446,7 +446,7 @@ public class AllAdvancements implements IDataProvider { } @Override - public void act(DirectoryCache cache) throws IOException { + public void run(DirectoryCache cache) throws IOException { Path path = this.generator.getOutputFolder(); Set set = Sets.newHashSet(); Consumer consumer = (p_204017_3_) -> { @@ -456,8 +456,8 @@ public class AllAdvancements implements IDataProvider { Path path1 = getPath(path, p_204017_3_); try { - IDataProvider.save(GSON, cache, p_204017_3_.copy() - .serialize(), path1); + IDataProvider.save(GSON, cache, p_204017_3_.deconstruct() + .serializeToJson(), path1); } catch (IOException ioexception) { LOGGER.error("Couldn't save advancement {}", path1, ioexception); } @@ -484,11 +484,11 @@ public class AllAdvancements implements IDataProvider { } public RegistryTrigger.Instance isInfinite(FlowingFluid fluid) { - return AllTriggers.INFINITE_FLUID.forEntries(fluid.getStillFluid()); + return AllTriggers.INFINITE_FLUID.forEntries(fluid.getSource()); } public InventoryChangeTrigger.Instance itemGathered(IItemProvider itemprovider) { - return InventoryChangeTrigger.Instance.forItems(itemprovider); + return InventoryChangeTrigger.Instance.hasItems(itemprovider); } static enum TaskType { @@ -516,7 +516,7 @@ public class AllAdvancements implements IDataProvider { } public Builder kinecticAdvancement(String name, Block block, TaskType type) { - return advancement(name, block, type).withCriterion("0", placeBlock(block)); + return advancement(name, block, type).addCriterion("0", placeBlock(block)); // .withCriterion("1", isPowered(block)); Duplicate toast } @@ -529,14 +529,14 @@ public class AllAdvancements implements IDataProvider { } public Builder advancement(String name, ItemStack icon, TaskType type) { - return Advancement.Builder.builder() - .withDisplay(icon, new TranslationTextComponent(LANG + name), + return Advancement.Builder.advancement() + .display(icon, new TranslationTextComponent(LANG + name), new TranslationTextComponent(LANG + name + ".desc"), null, type.frame, type.toast, type.announce, type.hide); } public Builder itemAdvancement(String name, Supplier item, TaskType type) { - return advancement(name, item.get(), type).withCriterion("0", itemGathered(item.get())); + return advancement(name, item.get(), type).addCriterion("0", itemGathered(item.get())); } } diff --git a/src/main/java/com/simibubi/create/foundation/advancement/AllTriggers.java b/src/main/java/com/simibubi/create/foundation/advancement/AllTriggers.java index 12ecd41c9..d3af35134 100644 --- a/src/main/java/com/simibubi/create/foundation/advancement/AllTriggers.java +++ b/src/main/java/com/simibubi/create/foundation/advancement/AllTriggers.java @@ -72,7 +72,7 @@ public class AllTriggers { Predicate playerFilter) { if (world == null) return; - if (world.isRemote()) + if (world.isClientSide()) return; List players = getPlayersInRange(world, pos, range); players.stream() @@ -81,6 +81,6 @@ public class AllTriggers { } public static List getPlayersInRange(IWorld world, BlockPos pos, int range) { - return world.getEntitiesWithinAABB(ServerPlayerEntity.class, new AxisAlignedBB(pos).grow(range)); + return world.getEntitiesOfClass(ServerPlayerEntity.class, new AxisAlignedBB(pos).inflate(range)); } } diff --git a/src/main/java/com/simibubi/create/foundation/advancement/CriterionTriggerBase.java b/src/main/java/com/simibubi/create/foundation/advancement/CriterionTriggerBase.java index c1acd07f4..7ebc2a596 100644 --- a/src/main/java/com/simibubi/create/foundation/advancement/CriterionTriggerBase.java +++ b/src/main/java/com/simibubi/create/foundation/advancement/CriterionTriggerBase.java @@ -21,6 +21,8 @@ import net.minecraft.advancements.criterion.EntityPredicate; import net.minecraft.entity.player.ServerPlayerEntity; import net.minecraft.util.ResourceLocation; +import net.minecraft.advancements.ICriterionTrigger.Listener; + @ParametersAreNonnullByDefault @MethodsReturnNonnullByDefault public abstract class CriterionTriggerBase implements ICriterionTrigger { @@ -33,14 +35,14 @@ public abstract class CriterionTriggerBase>> listeners = Maps.newHashMap(); @Override - public void addListener(PlayerAdvancements playerAdvancementsIn, Listener listener) { + public void addPlayerListener(PlayerAdvancements playerAdvancementsIn, Listener listener) { Set> playerListeners = this.listeners.computeIfAbsent(playerAdvancementsIn, k -> new HashSet<>()); playerListeners.add(listener); } @Override - public void removeListener(PlayerAdvancements playerAdvancementsIn, Listener listener) { + public void removePlayerListener(PlayerAdvancements playerAdvancementsIn, Listener listener) { Set> playerListeners = this.listeners.get(playerAdvancementsIn); if (playerListeners != null) { playerListeners.remove(listener); @@ -51,7 +53,7 @@ public abstract class CriterionTriggerBase> list = new LinkedList<>(); for (Listener listener : playerListeners) { - if (listener.getCriterionInstance() + if (listener.getTriggerInstance() .test(suppliers)) { list.add(listener); } } - list.forEach(listener -> listener.grantCriterion(playerAdvancements)); + list.forEach(listener -> listener.run(playerAdvancements)); } } diff --git a/src/main/java/com/simibubi/create/foundation/advancement/SimpleTrigger.java b/src/main/java/com/simibubi/create/foundation/advancement/SimpleTrigger.java index 7713bf39d..49ec625e1 100644 --- a/src/main/java/com/simibubi/create/foundation/advancement/SimpleTrigger.java +++ b/src/main/java/com/simibubi/create/foundation/advancement/SimpleTrigger.java @@ -23,7 +23,7 @@ public class SimpleTrigger extends CriterionTriggerBase } @Override - public Instance conditionsFromJson(JsonObject json, ConditionArrayParser context) { + public Instance createInstance(JsonObject json, ConditionArrayParser context) { return new Instance(getId()); } @@ -38,7 +38,7 @@ public class SimpleTrigger extends CriterionTriggerBase public static class Instance extends CriterionTriggerBase.Instance { public Instance(ResourceLocation idIn) { - super(idIn, EntityPredicate.AndPredicate.EMPTY); // FIXME: Is this right? + super(idIn, EntityPredicate.AndPredicate.ANY); // FIXME: Is this right? } @Override diff --git a/src/main/java/com/simibubi/create/foundation/advancement/StringSerializableTrigger.java b/src/main/java/com/simibubi/create/foundation/advancement/StringSerializableTrigger.java index 125e4772d..0c2c3b8fe 100644 --- a/src/main/java/com/simibubi/create/foundation/advancement/StringSerializableTrigger.java +++ b/src/main/java/com/simibubi/create/foundation/advancement/StringSerializableTrigger.java @@ -48,7 +48,7 @@ public abstract class StringSerializableTrigger extends CriterionTriggerBase< } @Override - public Instance conditionsFromJson(JsonObject json, ConditionArrayParser context) { + public Instance createInstance(JsonObject json, ConditionArrayParser context) { if (json.has(getJsonKey())) { JsonArray elements = json.getAsJsonArray(getJsonKey()); return new Instance<>(this, StreamSupport.stream(elements.spliterator(), false) @@ -77,7 +77,7 @@ public abstract class StringSerializableTrigger extends CriterionTriggerBase< private final StringSerializableTrigger trigger; public Instance(StringSerializableTrigger trigger, @Nullable Set entries) { - super(trigger.getId(), EntityPredicate.AndPredicate.EMPTY); + super(trigger.getId(), EntityPredicate.AndPredicate.ANY); this.trigger = trigger; this.entries = entries; } @@ -91,8 +91,8 @@ public abstract class StringSerializableTrigger extends CriterionTriggerBase< } @Override - public JsonObject toJson(ConditionArraySerializer p_230240_1_) { - JsonObject jsonobject = super.toJson(p_230240_1_); + public JsonObject serializeToJson(ConditionArraySerializer p_230240_1_) { + JsonObject jsonobject = super.serializeToJson(p_230240_1_); JsonArray elements = new JsonArray(); if (entries == null) { diff --git a/src/main/java/com/simibubi/create/foundation/block/ITE.java b/src/main/java/com/simibubi/create/foundation/block/ITE.java index 16eae3ba0..f84a378ae 100644 --- a/src/main/java/com/simibubi/create/foundation/block/ITE.java +++ b/src/main/java/com/simibubi/create/foundation/block/ITE.java @@ -31,7 +31,7 @@ public interface ITE { @Nullable @SuppressWarnings("unchecked") default T getTileEntity(IBlockReader worldIn, BlockPos pos) { - TileEntity tileEntity = worldIn.getTileEntity(pos); + TileEntity tileEntity = worldIn.getBlockEntity(pos); Class expectedClass = getTileEntityClass(); if (tileEntity == null) diff --git a/src/main/java/com/simibubi/create/foundation/block/ItemUseOverrides.java b/src/main/java/com/simibubi/create/foundation/block/ItemUseOverrides.java index 9d3dbf59b..5dfee53d8 100644 --- a/src/main/java/com/simibubi/create/foundation/block/ItemUseOverrides.java +++ b/src/main/java/com/simibubi/create/foundation/block/ItemUseOverrides.java @@ -39,9 +39,9 @@ public class ItemUseOverrides { BlockRayTraceResult blockTrace = new BlockRayTraceResult(VecHelper.getCenterOf(event.getPos()), event.getFace(), event.getPos(), true); - ActionResultType result = state.onUse(event.getWorld(), event.getPlayer(), event.getHand(), blockTrace); + ActionResultType result = state.use(event.getWorld(), event.getPlayer(), event.getHand(), blockTrace); - if (!result.isAccepted()) + if (!result.consumesAction()) return; event.setCanceled(true); diff --git a/src/main/java/com/simibubi/create/foundation/block/ProperDirectionalBlock.java b/src/main/java/com/simibubi/create/foundation/block/ProperDirectionalBlock.java index c7e30cb34..17416492a 100644 --- a/src/main/java/com/simibubi/create/foundation/block/ProperDirectionalBlock.java +++ b/src/main/java/com/simibubi/create/foundation/block/ProperDirectionalBlock.java @@ -12,6 +12,8 @@ import net.minecraft.util.Direction; import net.minecraft.util.Mirror; import net.minecraft.util.Rotation; +import net.minecraft.block.AbstractBlock.Properties; + public class ProperDirectionalBlock extends DirectionalBlock implements IWrenchable { public ProperDirectionalBlock(Properties p_i48415_1_) { @@ -19,36 +21,36 @@ public class ProperDirectionalBlock extends DirectionalBlock implements IWrencha } @Override - protected void fillStateContainer(Builder builder) { + protected void createBlockStateDefinition(Builder builder) { builder.add(FACING); - super.fillStateContainer(builder); + super.createBlockStateDefinition(builder); } @Override public BlockState getRotatedBlockState(BlockState originalState, Direction targetedFace) { - Direction facing = originalState.get(FACING); + Direction facing = originalState.getValue(FACING); if (facing.getAxis() == targetedFace.getAxis()) return originalState; Direction newFacing = DirectionHelper.rotateAround(facing, targetedFace.getAxis()); - return originalState.with(FACING, newFacing); + return originalState.setValue(FACING, newFacing); } @Override public BlockState getStateForPlacement(BlockItemUseContext context) { - return getDefaultState().with(FACING, context.getNearestLookingDirection()); + return defaultBlockState().setValue(FACING, context.getNearestLookingDirection()); } @Override public BlockState rotate(BlockState state, Rotation rot) { - return state.with(FACING, rot.rotate(state.get(FACING))); + return state.setValue(FACING, rot.rotate(state.getValue(FACING))); } @Override public BlockState mirror(BlockState state, Mirror mirrorIn) { - return state.rotate(mirrorIn.toRotation(state.get(FACING))); + return state.rotate(mirrorIn.getRotation(state.getValue(FACING))); } } diff --git a/src/main/java/com/simibubi/create/foundation/block/connected/CTModel.java b/src/main/java/com/simibubi/create/foundation/block/connected/CTModel.java index 3ed787c7e..51971939d 100644 --- a/src/main/java/com/simibubi/create/foundation/block/connected/CTModel.java +++ b/src/main/java/com/simibubi/create/foundation/block/connected/CTModel.java @@ -36,11 +36,11 @@ public class CTModel extends BakedModelWrapperWithData { } void put(Direction face, int texture) { - indices[face.getIndex()] = texture; + indices[face.get3DDataValue()] = texture; } int get(Direction face) { - return indices[face.getIndex()]; + return indices[face.get3DDataValue()]; } } @@ -57,7 +57,7 @@ public class CTModel extends BakedModelWrapperWithData { protected CTData createCTData(IBlockDisplayReader world, BlockPos pos, BlockState state) { CTData data = new CTData(); for (Direction face : Iterate.directions) { - if (!Block.shouldSideBeRendered(state, world, pos, face) && !behaviour.buildContextForOccludedDirections()) + if (!Block.shouldRenderFace(state, world, pos, face) && !behaviour.buildContextForOccludedDirections()) continue; CTSpriteShiftEntry spriteShift = behaviour.get(state, face); if (spriteShift == null) @@ -81,17 +81,17 @@ public class CTModel extends BakedModelWrapperWithData { for (int i = 0; i < quads.size(); i++) { BakedQuad quad = quads.get(i); - CTSpriteShiftEntry spriteShift = behaviour.get(state, quad.getFace()); + CTSpriteShiftEntry spriteShift = behaviour.get(state, quad.getDirection()); if (spriteShift == null) continue; if (quad.getSprite() != spriteShift.getOriginal()) continue; - int index = data.get(quad.getFace()); + int index = data.get(quad.getDirection()); if (index == -1) continue; BakedQuad newQuad = QuadHelper.clone(quad); - int[] vertexData = newQuad.getVertexData(); + int[] vertexData = newQuad.getVertices(); for (int vertex = 0; vertex < vertexData.length; vertex += format.getIntegerSize()) { int uvOffset = 16 / 4; diff --git a/src/main/java/com/simibubi/create/foundation/block/connected/CTSpriteShiftEntry.java b/src/main/java/com/simibubi/create/foundation/block/connected/CTSpriteShiftEntry.java index fa99114c3..40d6bf434 100644 --- a/src/main/java/com/simibubi/create/foundation/block/connected/CTSpriteShiftEntry.java +++ b/src/main/java/com/simibubi/create/foundation/block/connected/CTSpriteShiftEntry.java @@ -15,13 +15,13 @@ public abstract class CTSpriteShiftEntry extends SpriteShiftEntry { public float getTargetU(float localU, int index) { float uOffset = (index % textureSheetSize); - return getTarget().getInterpolatedU( + return getTarget().getU( (SuperByteBuffer.getUnInterpolatedU(getOriginal(), localU) + (uOffset * 16)) / ((float) textureSheetSize)); } public float getTargetV(float localV, int index) { float vOffset = (index / textureSheetSize); - return getTarget().getInterpolatedV( + return getTarget().getV( (SuperByteBuffer.getUnInterpolatedV(getOriginal(), localV) + (vOffset * 16)) / ((float) textureSheetSize)); } diff --git a/src/main/java/com/simibubi/create/foundation/block/connected/ConnectedTextureBehaviour.java b/src/main/java/com/simibubi/create/foundation/block/connected/ConnectedTextureBehaviour.java index 4a373e8c2..e2a8f06ed 100644 --- a/src/main/java/com/simibubi/create/foundation/block/connected/ConnectedTextureBehaviour.java +++ b/src/main/java/com/simibubi/create/foundation/block/connected/ConnectedTextureBehaviour.java @@ -41,10 +41,10 @@ public abstract class ConnectedTextureBehaviour { protected boolean isBeingBlocked(BlockState state, IBlockDisplayReader reader, BlockPos pos, BlockPos otherPos, Direction face) { - BlockPos blockingPos = otherPos.offset(face); + BlockPos blockingPos = otherPos.relative(face); return face.getAxis() - .getCoordinate(pos.getX(), pos.getY(), pos.getZ()) == face.getAxis() - .getCoordinate(otherPos.getX(), otherPos.getY(), otherPos.getZ()) + .choose(pos.getX(), pos.getY(), pos.getZ()) == face.getAxis() + .choose(otherPos.getX(), otherPos.getY(), otherPos.getZ()) && connectsTo(state, reader.getBlockState(blockingPos), reader, pos, blockingPos, face); } @@ -106,8 +106,8 @@ public abstract class ConnectedTextureBehaviour { private boolean testConnection(IBlockDisplayReader reader, BlockPos pos, BlockState state, Direction face, final Direction horizontal, final Direction vertical, int sh, int sv) { - BlockPos p = pos.offset(horizontal, sh) - .offset(vertical, sv); + BlockPos p = pos.relative(horizontal, sh) + .relative(vertical, sv); boolean test = connectsTo(state, reader.getBlockState(p), reader, pos, p, face); return test; } diff --git a/src/main/java/com/simibubi/create/foundation/block/render/ColoredVertexModel.java b/src/main/java/com/simibubi/create/foundation/block/render/ColoredVertexModel.java index e4be4b2ba..305e4364d 100644 --- a/src/main/java/com/simibubi/create/foundation/block/render/ColoredVertexModel.java +++ b/src/main/java/com/simibubi/create/foundation/block/render/ColoredVertexModel.java @@ -57,7 +57,7 @@ public class ColoredVertexModel extends BakedModelWrapper { BakedQuad quad = quads.get(i); BakedQuad newQuad = QuadHelper.clone(quad); - int[] vertexData = newQuad.getVertexData(); + int[] vertexData = newQuad.getVertices(); for (int vertex = 0; vertex < vertexData.length; vertex += format.getIntegerSize()) { float x = Float.intBitsToFloat(vertexData[vertex]); diff --git a/src/main/java/com/simibubi/create/foundation/block/render/QuadHelper.java b/src/main/java/com/simibubi/create/foundation/block/render/QuadHelper.java index 81ece13f1..68dc08dac 100644 --- a/src/main/java/com/simibubi/create/foundation/block/render/QuadHelper.java +++ b/src/main/java/com/simibubi/create/foundation/block/render/QuadHelper.java @@ -9,8 +9,8 @@ public final class QuadHelper { private QuadHelper() {} public static BakedQuad clone(BakedQuad quad) { - return new BakedQuad(Arrays.copyOf(quad.getVertexData(), quad.getVertexData().length), - quad.getTintIndex(), quad.getFace(), quad.getSprite(), quad.hasShade()); + return new BakedQuad(Arrays.copyOf(quad.getVertices(), quad.getVertices().length), + quad.getTintIndex(), quad.getDirection(), quad.getSprite(), quad.isShade()); } } diff --git a/src/main/java/com/simibubi/create/foundation/block/render/SpriteShiftEntry.java b/src/main/java/com/simibubi/create/foundation/block/render/SpriteShiftEntry.java index c5c96b82e..dd5593034 100644 --- a/src/main/java/com/simibubi/create/foundation/block/render/SpriteShiftEntry.java +++ b/src/main/java/com/simibubi/create/foundation/block/render/SpriteShiftEntry.java @@ -20,7 +20,7 @@ public class SpriteShiftEntry { protected void loadTextures() { Function textureMap = Minecraft.getInstance() - .getSpriteAtlas(PlayerContainer.BLOCK_ATLAS_TEXTURE); + .getTextureAtlas(PlayerContainer.BLOCK_ATLAS); original = textureMap.apply(originalTextureLocation); target = textureMap.apply(targetTextureLocation); } diff --git a/src/main/java/com/simibubi/create/foundation/collision/ContinuousOBBCollider.java b/src/main/java/com/simibubi/create/foundation/collision/ContinuousOBBCollider.java index ae561cf1c..8b56c8ba6 100644 --- a/src/main/java/com/simibubi/create/foundation/collision/ContinuousOBBCollider.java +++ b/src/main/java/com/simibubi/create/foundation/collision/ContinuousOBBCollider.java @@ -5,6 +5,8 @@ import static java.lang.Math.signum; import net.minecraft.util.math.vector.Vector3d; +import com.simibubi.create.foundation.collision.OBBCollider.SeparationManifold; + public class ContinuousOBBCollider extends OBBCollider { public static ContinuousSeparationManifold separateBBs(Vector3d cA, Vector3d cB, Vector3d eA, Vector3d eB, @@ -89,19 +91,19 @@ public class ContinuousOBBCollider extends OBBCollider { mf.normalSeparation = seperation; } - double dot = mf.stepSeparationAxis.dotProduct(axis); + double dot = mf.stepSeparationAxis.dot(axis); if (dot != 0 && discreteCollision) { - Vector3d cross = axis.crossProduct(mf.stepSeparationAxis); + Vector3d cross = axis.cross(mf.stepSeparationAxis); double dotSeparation = signum(dot) * TL - (rA + rB); double stepSeparation = -dotSeparation; Vector3d stepSeparationVec = axis; if (!cross.equals(Vector3d.ZERO)) { Vector3d sepVec = normalizedAxis.scale(dotSeparation); - Vector3d axisPlane = axis.crossProduct(cross); - Vector3d stepPlane = mf.stepSeparationAxis.crossProduct(cross); + Vector3d axisPlane = axis.cross(cross); + Vector3d stepPlane = mf.stepSeparationAxis.cross(cross); stepSeparationVec = - sepVec.subtract(axisPlane.scale(sepVec.dotProduct(stepPlane) / axisPlane.dotProduct(stepPlane))); + sepVec.subtract(axisPlane.scale(sepVec.dot(stepPlane) / axisPlane.dot(stepPlane))); stepSeparation = stepSeparationVec.length(); if (abs(mf.stepSeparation) > abs(stepSeparation) && stepSeparation != 0) mf.stepSeparation = stepSeparation; diff --git a/src/main/java/com/simibubi/create/foundation/collision/OrientedBB.java b/src/main/java/com/simibubi/create/foundation/collision/OrientedBB.java index 09a2d4579..2fa4c582d 100644 --- a/src/main/java/com/simibubi/create/foundation/collision/OrientedBB.java +++ b/src/main/java/com/simibubi/create/foundation/collision/OrientedBB.java @@ -41,7 +41,7 @@ public class OrientedBB { } private static Vector3d extentsFromBB(AxisAlignedBB bb) { - return new Vector3d(bb.getXSize() / 2, bb.getYSize() / 2, bb.getZSize() / 2); + return new Vector3d(bb.getXsize() / 2, bb.getYsize() / 2, bb.getZsize() / 2); } public Matrix3d getRotation() { @@ -65,8 +65,8 @@ public class OrientedBB { } public AxisAlignedBB getAsAxisAlignedBB() { - return new AxisAlignedBB(0, 0, 0, 0, 0, 0).offset(center) - .grow(extents.x, extents.y, extents.z); + return new AxisAlignedBB(0, 0, 0, 0, 0, 0).move(center) + .inflate(extents.x, extents.y, extents.z); } /* diff --git a/src/main/java/com/simibubi/create/foundation/command/AllCommands.java b/src/main/java/com/simibubi/create/foundation/command/AllCommands.java index 9f393940b..e8534da84 100644 --- a/src/main/java/com/simibubi/create/foundation/command/AllCommands.java +++ b/src/main/java/com/simibubi/create/foundation/command/AllCommands.java @@ -21,7 +21,7 @@ public class AllCommands { LiteralCommandNode util = buildUtilityCommands(); LiteralCommandNode createRoot = dispatcher.register(Commands.literal("create") - .requires(cs -> cs.hasPermissionLevel(0)) + .requires(cs -> cs.hasPermission(0)) // general purpose .then(new ToggleDebugCommand().register()) .then(FabulousWarningCommand.register()) diff --git a/src/main/java/com/simibubi/create/foundation/command/ChunkUtil.java b/src/main/java/com/simibubi/create/foundation/command/ChunkUtil.java index df7abeb39..af82ccc0a 100644 --- a/src/main/java/com/simibubi/create/foundation/command/ChunkUtil.java +++ b/src/main/java/com/simibubi/create/foundation/command/ChunkUtil.java @@ -34,11 +34,11 @@ public class ChunkUtil { new ChunkStatus("full", ChunkStatus.HEIGHTMAPS, 0, POST_FEATURES, ChunkStatus.Type.LEVELCHUNK, (_0, _1, _2, _3, _4, future, _6, chunk) -> future.apply(chunk), (_0, _1, _2, _3, future, chunk) -> { if (markedChunks.contains(chunk.getPos() - .asLong())) { + .toLong())) { LOGGER.debug("trying to load unforced chunk " + chunk.getPos() .toString() + ", returning chunk loading error"); // this.reloadChunk(world.getChunkProvider(), chunk.getPos()); - return ChunkHolder.MISSING_CHUNK_FUTURE; + return ChunkHolder.UNLOADED_CHUNK_FUTURE; } else { // LOGGER.debug("regular, chunkStatus: " + chunk.getStatus().toString()); return future.apply(chunk); @@ -48,11 +48,11 @@ public class ChunkUtil { } public boolean reloadChunk(ServerChunkProvider provider, ChunkPos pos) { - ChunkHolder holder = provider.chunkManager.loadedChunks.remove(pos.asLong()); - provider.chunkManager.immutableLoadedChunksDirty = true; + ChunkHolder holder = provider.chunkMap.updatingChunkMap.remove(pos.toLong()); + provider.chunkMap.modified = true; if (holder != null) { - provider.chunkManager.chunksToUnload.put(pos.asLong(), holder); - provider.chunkManager.scheduleSave(pos.asLong(), holder); + provider.chunkMap.pendingUnloads.put(pos.toLong(), holder); + provider.chunkMap.scheduleUnload(pos.toLong(), holder); return true; } else { return false; @@ -60,8 +60,8 @@ public class ChunkUtil { } public boolean unloadChunk(ServerChunkProvider provider, ChunkPos pos) { - this.interestingChunks.add(pos.asLong()); - this.markedChunks.add(pos.asLong()); + this.interestingChunks.add(pos.toLong()); + this.markedChunks.add(pos.toLong()); return this.reloadChunk(provider, pos); } @@ -78,8 +78,8 @@ public class ChunkUtil { } public void reForce(ServerChunkProvider provider, ChunkPos pos) { - provider.forceChunk(pos, true); - provider.forceChunk(pos, false); + provider.updateChunkForced(pos, true); + provider.updateChunkForced(pos, false); } @SubscribeEvent @@ -87,7 +87,7 @@ public class ChunkUtil { // LOGGER.debug("Chunk Unload: " + event.getChunk().getPos().toString()); if (interestingChunks.contains(event.getChunk() .getPos() - .asLong())) { + .toLong())) { LOGGER.info("Interesting Chunk Unload: " + event.getChunk() .getPos() .toString()); @@ -100,10 +100,10 @@ public class ChunkUtil { ChunkPos pos = event.getChunk() .getPos(); - if (interestingChunks.contains(pos.asLong())) { + if (interestingChunks.contains(pos.toLong())) { LOGGER.info("Interesting Chunk Load: " + pos.toString()); - if (!markedChunks.contains(pos.asLong())) - interestingChunks.remove(pos.asLong()); + if (!markedChunks.contains(pos.toLong())) + interestingChunks.remove(pos.toLong()); } } diff --git a/src/main/java/com/simibubi/create/foundation/command/ChunkUtilCommand.java b/src/main/java/com/simibubi/create/foundation/command/ChunkUtilCommand.java index e999333ca..8179fbbfc 100644 --- a/src/main/java/com/simibubi/create/foundation/command/ChunkUtilCommand.java +++ b/src/main/java/com/simibubi/create/foundation/command/ChunkUtilCommand.java @@ -15,27 +15,27 @@ public class ChunkUtilCommand { public static ArgumentBuilder register() { return Commands.literal("chunk") - .requires(cs -> cs.hasPermissionLevel(2)) + .requires(cs -> cs.hasPermission(2)) .then(Commands.literal("reload") .then(Commands.argument("pos", ColumnPosArgument.columnPos()) .executes(ctx -> { // chunk reload - ColumnPos columnPos = ColumnPosArgument.fromBlockPos(ctx, "pos"); + ColumnPos columnPos = ColumnPosArgument.getColumnPos(ctx, "pos"); ChunkPos chunkPos = new ChunkPos(columnPos.x >> 4, columnPos.z >> 4); ServerChunkProvider chunkProvider = ctx.getSource() - .getWorld() - .getChunkProvider(); + .getLevel() + .getChunkSource(); boolean success = Create.CHUNK_UTIL.reloadChunk(chunkProvider, chunkPos); if (success) { ctx.getSource() - .sendFeedback(new StringTextComponent("scheduled unload for chunk " + .sendSuccess(new StringTextComponent("scheduled unload for chunk " + chunkPos.toString() + ", might need to repeat command"), true); return 1; } else { ctx.getSource() - .sendFeedback( + .sendSuccess( new StringTextComponent( "unable to schedule unload, is chunk " + chunkPos.toString() + " loaded?"), true); @@ -46,26 +46,26 @@ public class ChunkUtilCommand { .then(Commands.argument("pos", ColumnPosArgument.columnPos()) .executes(ctx -> { // chunk unload - ColumnPos columnPos = ColumnPosArgument.fromBlockPos(ctx, "pos"); + ColumnPos columnPos = ColumnPosArgument.getColumnPos(ctx, "pos"); ChunkPos chunkPos = new ChunkPos(columnPos.x >> 4, columnPos.z >> 4); ServerChunkProvider chunkProvider = ctx.getSource() - .getWorld() - .getChunkProvider(); + .getLevel() + .getChunkSource(); boolean success = Create.CHUNK_UTIL.unloadChunk(chunkProvider, chunkPos); ctx.getSource() - .sendFeedback( + .sendSuccess( new StringTextComponent("added chunk " + chunkPos.toString() + " to unload list"), true); if (success) { ctx.getSource() - .sendFeedback(new StringTextComponent("scheduled unload for chunk " + .sendSuccess(new StringTextComponent("scheduled unload for chunk " + chunkPos.toString() + ", might need to repeat command"), true); return 1; } else { ctx.getSource() - .sendFeedback( + .sendSuccess( new StringTextComponent( "unable to schedule unload, is chunk " + chunkPos.toString() + " loaded?"), true); @@ -76,10 +76,10 @@ public class ChunkUtilCommand { .executes(ctx -> { // chunk clear int count = Create.CHUNK_UTIL.clear(ctx.getSource() - .getWorld() - .getChunkProvider()); + .getLevel() + .getChunkSource()); ctx.getSource() - .sendFeedback(new StringTextComponent("removed " + count + " entries from unload list"), false); + .sendSuccess(new StringTextComponent("removed " + count + " entries from unload list"), false); return 1; })); diff --git a/src/main/java/com/simibubi/create/foundation/command/ClearBufferCacheCommand.java b/src/main/java/com/simibubi/create/foundation/command/ClearBufferCacheCommand.java index 3cc35646e..6161a973d 100644 --- a/src/main/java/com/simibubi/create/foundation/command/ClearBufferCacheCommand.java +++ b/src/main/java/com/simibubi/create/foundation/command/ClearBufferCacheCommand.java @@ -14,11 +14,11 @@ public class ClearBufferCacheCommand { static ArgumentBuilder register() { return Commands.literal("clearRenderBuffers") - .requires(cs -> cs.hasPermissionLevel(0)) + .requires(cs -> cs.hasPermission(0)) .executes(ctx -> { DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> ClearBufferCacheCommand::execute); ctx.getSource() - .sendFeedback(new StringTextComponent("Cleared rendering buffers."), true); + .sendSuccess(new StringTextComponent("Cleared rendering buffers."), true); return 1; }); } diff --git a/src/main/java/com/simibubi/create/foundation/command/CloneCommand.java b/src/main/java/com/simibubi/create/foundation/command/CloneCommand.java index 5147a4bae..40f3a16ed 100644 --- a/src/main/java/com/simibubi/create/foundation/command/CloneCommand.java +++ b/src/main/java/com/simibubi/create/foundation/command/CloneCommand.java @@ -35,7 +35,7 @@ public class CloneCommand { public static ArgumentBuilder register() { return Commands.literal("clone") - .requires(cs -> cs.hasPermissionLevel(2)) + .requires(cs -> cs.hasPermission(2)) .then(Commands.argument("begin", BlockPosArgument.blockPos()) .then(Commands.argument("end", BlockPosArgument.blockPos()) .then(Commands.argument("destination", BlockPosArgument.blockPos()) @@ -48,7 +48,7 @@ public class CloneCommand { BlockPosArgument.getLoadedBlockPos(ctx, "destination"), true))))) .executes(ctx -> { ctx.getSource() - .sendFeedback(new StringTextComponent( + .sendSuccess(new StringTextComponent( "Clones all blocks as well as super glue from the specified area to the target destination"), true); @@ -60,28 +60,28 @@ public class CloneCommand { private static int doClone(CommandSource source, BlockPos begin, BlockPos end, BlockPos destination, boolean cloneBlocks) throws CommandSyntaxException { MutableBoundingBox sourceArea = new MutableBoundingBox(begin, end); - BlockPos destinationEnd = destination.add(sourceArea.getLength()); + BlockPos destinationEnd = destination.offset(sourceArea.getLength()); MutableBoundingBox destinationArea = new MutableBoundingBox(destination, destinationEnd); - int i = sourceArea.getXSize() * sourceArea.getYSize() * sourceArea.getZSize(); + int i = sourceArea.getXSpan() * sourceArea.getYSpan() * sourceArea.getZSpan(); if (i > 32768) throw CLONE_TOO_BIG_EXCEPTION.create(32768, i); - ServerWorld world = source.getWorld(); + ServerWorld world = source.getLevel(); - if (!world.isAreaLoaded(begin, end) || !world.isAreaLoaded(destination, destinationEnd)) - throw BlockPosArgument.POS_UNLOADED.create(); + if (!world.hasChunksAt(begin, end) || !world.hasChunksAt(destination, destinationEnd)) + throw BlockPosArgument.ERROR_NOT_LOADED.create(); - BlockPos diffToTarget = new BlockPos(destinationArea.minX - sourceArea.minX, - destinationArea.minY - sourceArea.minY, destinationArea.minZ - sourceArea.minZ); + BlockPos diffToTarget = new BlockPos(destinationArea.x0 - sourceArea.x0, + destinationArea.y0 - sourceArea.y0, destinationArea.z0 - sourceArea.z0); int blockPastes = cloneBlocks ? cloneBlocks(sourceArea, world, diffToTarget) : 0; int gluePastes = cloneGlue(sourceArea, world, diffToTarget); if (cloneBlocks) - source.sendFeedback(new StringTextComponent("Successfully cloned " + blockPastes + " Blocks"), true); + source.sendSuccess(new StringTextComponent("Successfully cloned " + blockPastes + " Blocks"), true); - source.sendFeedback(new StringTextComponent("Successfully applied glue " + gluePastes + " times"), true); + source.sendSuccess(new StringTextComponent("Successfully applied glue " + gluePastes + " times"), true); return blockPastes + gluePastes; } @@ -90,19 +90,19 @@ public class CloneCommand { int gluePastes = 0; List glue = - world.getEntitiesWithinAABB(SuperGlueEntity.class, AxisAlignedBB.func_216363_a(sourceArea)); + world.getEntitiesOfClass(SuperGlueEntity.class, AxisAlignedBB.of(sourceArea)); List> newGlue = Lists.newArrayList(); for (SuperGlueEntity g : glue) { BlockPos pos = g.getHangingPosition(); Direction direction = g.getFacingDirection(); - newGlue.add(Pair.of(pos.add(diffToTarget), direction)); + newGlue.add(Pair.of(pos.offset(diffToTarget), direction)); } for (Pair p : newGlue) { SuperGlueEntity g = new SuperGlueEntity(world, p.getFirst(), p.getSecond()); if (g.onValidSurface()) { - world.addEntity(g); + world.addFreshEntity(g); gluePastes++; } } @@ -115,16 +115,16 @@ public class CloneCommand { List blocks = Lists.newArrayList(); List tileBlocks = Lists.newArrayList(); - for (int z = sourceArea.minZ; z <= sourceArea.maxZ; ++z) { - for (int y = sourceArea.minY; y <= sourceArea.maxY; ++y) { - for (int x = sourceArea.minX; x <= sourceArea.maxX; ++x) { + for (int z = sourceArea.z0; z <= sourceArea.z1; ++z) { + for (int y = sourceArea.y0; y <= sourceArea.y1; ++y) { + for (int x = sourceArea.x0; x <= sourceArea.x1; ++x) { BlockPos currentPos = new BlockPos(x, y, z); - BlockPos newPos = currentPos.add(diffToTarget); + BlockPos newPos = currentPos.offset(diffToTarget); CachedBlockInfo cached = new CachedBlockInfo(world, currentPos, false); - BlockState state = cached.getBlockState(); - TileEntity te = world.getTileEntity(currentPos); + BlockState state = cached.getState(); + TileEntity te = world.getBlockEntity(currentPos); if (te != null) { - CompoundNBT nbt = te.write(new CompoundNBT()); + CompoundNBT nbt = te.save(new CompoundNBT()); tileBlocks.add(new Template.BlockInfo(newPos, state, nbt)); } else { blocks.add(new Template.BlockInfo(newPos, state, null)); @@ -140,36 +140,36 @@ public class CloneCommand { List reverse = Lists.reverse(allBlocks); for (Template.BlockInfo info : reverse) { - TileEntity te = world.getTileEntity(info.pos); - IClearable.clearObj(te); - world.setBlockState(info.pos, Blocks.BARRIER.getDefaultState(), 2); + TileEntity te = world.getBlockEntity(info.pos); + IClearable.tryClear(te); + world.setBlock(info.pos, Blocks.BARRIER.defaultBlockState(), 2); } for (Template.BlockInfo info : allBlocks) { - if (world.setBlockState(info.pos, info.state, 2)) + if (world.setBlock(info.pos, info.state, 2)) blockPastes++; } for (Template.BlockInfo info : tileBlocks) { - TileEntity te = world.getTileEntity(info.pos); + TileEntity te = world.getBlockEntity(info.pos); if (te != null && info.nbt != null) { info.nbt.putInt("x", info.pos.getX()); info.nbt.putInt("y", info.pos.getY()); info.nbt.putInt("z", info.pos.getZ()); - te.fromTag(info.state, info.nbt); - te.markDirty(); + te.load(info.state, info.nbt); + te.setChanged(); } // idk why the state is set twice for a te, but its done like this in the original clone command - world.setBlockState(info.pos, info.state, 2); + world.setBlock(info.pos, info.state, 2); } for (Template.BlockInfo info : reverse) { - world.updateNeighbors(info.pos, info.state.getBlock()); + world.blockUpdated(info.pos, info.state.getBlock()); } - world.getPendingBlockTicks() - .copyTicks(sourceArea, diffToTarget); + world.getBlockTicks() + .copy(sourceArea, diffToTarget); return blockPastes; } diff --git a/src/main/java/com/simibubi/create/foundation/command/ConfigCommand.java b/src/main/java/com/simibubi/create/foundation/command/ConfigCommand.java index 5115d9d6f..2ea2e7971 100644 --- a/src/main/java/com/simibubi/create/foundation/command/ConfigCommand.java +++ b/src/main/java/com/simibubi/create/foundation/command/ConfigCommand.java @@ -25,7 +25,7 @@ public class ConfigCommand { public static ArgumentBuilder register() { return Commands.literal("config") .executes(ctx -> { - ServerPlayerEntity player = ctx.getSource().asPlayer(); + ServerPlayerEntity player = ctx.getSource().getPlayerOrException(); AllPackets.channel.send( PacketDistributor.PLAYER.with(() -> player), new SConfigureConfigPacket(SConfigureConfigPacket.Actions.configScreen.name(), "") @@ -35,7 +35,7 @@ public class ConfigCommand { }) .then(Commands.argument("path", StringArgumentType.string()) .executes(ctx -> { - ServerPlayerEntity player = ctx.getSource().asPlayer(); + ServerPlayerEntity player = ctx.getSource().getPlayerOrException(); AllPackets.channel.send( PacketDistributor.PLAYER.with(() -> player), new SConfigureConfigPacket(SConfigureConfigPacket.Actions.configScreen.name(), StringArgumentType.getString(ctx, "path")) @@ -44,7 +44,7 @@ public class ConfigCommand { return Command.SINGLE_SUCCESS; }) .then(Commands.literal("set") - .requires(cs -> cs.hasPermissionLevel(2)) + .requires(cs -> cs.hasPermission(2)) .then(Commands.argument("value", StringArgumentType.string()) .executes(ctx -> { String path = StringArgumentType.getString(ctx, "path"); @@ -55,12 +55,12 @@ public class ConfigCommand { try { configPath = ConfigHelper.ConfigPath.parse(path); } catch (IllegalArgumentException e) { - ctx.getSource().sendErrorMessage(new StringTextComponent(e.getMessage())); + ctx.getSource().sendFailure(new StringTextComponent(e.getMessage())); return 0; } if (configPath.getType() == ModConfig.Type.CLIENT) { - ServerPlayerEntity player = ctx.getSource().asPlayer(); + ServerPlayerEntity player = ctx.getSource().getPlayerOrException(); AllPackets.channel.send( PacketDistributor.PLAYER.with(() -> player), new SConfigureConfigPacket("SET" + path, value) @@ -71,13 +71,13 @@ public class ConfigCommand { try { ConfigHelper.setConfigValue(configPath, value); - ctx.getSource().sendFeedback(new StringTextComponent("Great Success!"), false); + ctx.getSource().sendSuccess(new StringTextComponent("Great Success!"), false); return Command.SINGLE_SUCCESS; } catch (ConfigHelper.InvalidValueException e) { - ctx.getSource().sendErrorMessage(new StringTextComponent("Config could not be set the the specified value!")); + ctx.getSource().sendFailure(new StringTextComponent("Config could not be set the the specified value!")); return 0; } catch (Exception e) { - ctx.getSource().sendErrorMessage(new StringTextComponent("Something went wrong while trying to set config value. Check the server logs for more information")); + ctx.getSource().sendFailure(new StringTextComponent("Something went wrong while trying to set config value. Check the server logs for more information")); Create.LOGGER.warn("Exception during server-side config value set:", e); return 0; } diff --git a/src/main/java/com/simibubi/create/foundation/command/ConfigureConfigCommand.java b/src/main/java/com/simibubi/create/foundation/command/ConfigureConfigCommand.java index bcb8206d6..31837720d 100644 --- a/src/main/java/com/simibubi/create/foundation/command/ConfigureConfigCommand.java +++ b/src/main/java/com/simibubi/create/foundation/command/ConfigureConfigCommand.java @@ -17,11 +17,11 @@ public abstract class ConfigureConfigCommand { ArgumentBuilder register() { return Commands.literal(this.commandLiteral) - .requires(cs -> cs.hasPermissionLevel(0)) + .requires(cs -> cs.hasPermission(0)) .then(Commands.literal("on") .executes(ctx -> { ServerPlayerEntity player = ctx.getSource() - .asPlayer(); + .getPlayerOrException(); sendPacket(player, String.valueOf(true)); return Command.SINGLE_SUCCESS; @@ -29,14 +29,14 @@ public abstract class ConfigureConfigCommand { .then(Commands.literal("off") .executes(ctx -> { ServerPlayerEntity player = ctx.getSource() - .asPlayer(); + .getPlayerOrException(); sendPacket(player, String.valueOf(false)); return Command.SINGLE_SUCCESS; })) .executes(ctx -> { ServerPlayerEntity player = ctx.getSource() - .asPlayer(); + .getPlayerOrException(); sendPacket(player, "info"); return Command.SINGLE_SUCCESS; diff --git a/src/main/java/com/simibubi/create/foundation/command/CouplingCommand.java b/src/main/java/com/simibubi/create/foundation/command/CouplingCommand.java index 4cec64866..38ebe6177 100644 --- a/src/main/java/com/simibubi/create/foundation/command/CouplingCommand.java +++ b/src/main/java/com/simibubi/create/foundation/command/CouplingCommand.java @@ -36,7 +36,7 @@ public class CouplingCommand { public static ArgumentBuilder register() { return Commands.literal("coupling") - .requires(cs -> cs.hasPermissionLevel(2)) + .requires(cs -> cs.hasPermission(2)) .then(Commands.literal("add") .then(Commands.argument("cart1", EntityArgument.entity()) .then(Commands.argument("cart2", EntityArgument.entity()) @@ -49,16 +49,16 @@ public class CouplingCommand { if (!(cart2 instanceof AbstractMinecartEntity)) throw ONLY_MINECARTS_ALLOWED.create(); - if (!cart1.getEntityWorld() - .equals(cart2.getEntityWorld())) + if (!cart1.getCommandSenderWorld() + .equals(cart2.getCommandSenderWorld())) throw SAME_DIMENSION.create(); Entity source = ctx.getSource() .getEntity(); CouplingHandler.tryToCoupleCarts( - source instanceof PlayerEntity ? (PlayerEntity) source : null, cart1.getEntityWorld(), - cart1.getEntityId(), cart2.getEntityId()); + source instanceof PlayerEntity ? (PlayerEntity) source : null, cart1.getCommandSenderWorld(), + cart1.getId(), cart2.getId()); return Command.SINGLE_SUCCESS; }))) @@ -77,15 +77,15 @@ public class CouplingCommand { if (!(cart2 instanceof AbstractMinecartEntity)) throw ONLY_MINECARTS_ALLOWED.create(); - if (!cart1.getEntityWorld() - .equals(cart2.getEntityWorld())) + if (!cart1.getCommandSenderWorld() + .equals(cart2.getCommandSenderWorld())) throw SAME_DIMENSION.create(); Entity source = ctx.getSource() .getEntity(); CouplingHandler.tryToCoupleCarts(source instanceof PlayerEntity ? (PlayerEntity) source : null, - cart1.getEntityWorld(), cart1.getEntityId(), cart2.getEntityId()); + cart1.getCommandSenderWorld(), cart1.getId(), cart2.getId()); return Command.SINGLE_SUCCESS; }))) @@ -105,7 +105,7 @@ public class CouplingCommand { cart1.getCapability(CapabilityMinecartController.MINECART_CONTROLLER_CAPABILITY); if (!cart1Capability.isPresent()) { ctx.getSource() - .sendFeedback(new StringTextComponent("Minecart has no Couplings Attached"), true); + .sendSuccess(new StringTextComponent("Minecart has no Couplings Attached"), true); return 0; } @@ -115,7 +115,7 @@ public class CouplingCommand { + (cart1Controller.isLeadingCoupling() ? 1 : 0); if (cart1Couplings == 0) { ctx.getSource() - .sendFeedback(new StringTextComponent("Minecart has no Couplings Attached"), true); + .sendSuccess(new StringTextComponent("Minecart has no Couplings Attached"), true); return 0; } @@ -124,11 +124,11 @@ public class CouplingCommand { if (coupledCart == null) continue; - if (coupledCart != cart2.getUniqueID()) + if (coupledCart != cart2.getUUID()) continue; MinecartController cart2Controller = - CapabilityMinecartController.getIfPresent(cart1.getEntityWorld(), coupledCart); + CapabilityMinecartController.getIfPresent(cart1.getCommandSenderWorld(), coupledCart); if (cart2Controller == null) return 0; @@ -138,7 +138,7 @@ public class CouplingCommand { } ctx.getSource() - .sendFeedback(new StringTextComponent("The specified Carts are not coupled"), true); + .sendSuccess(new StringTextComponent("The specified Carts are not coupled"), true); return 0; })))) @@ -153,7 +153,7 @@ public class CouplingCommand { cart.getCapability(CapabilityMinecartController.MINECART_CONTROLLER_CAPABILITY); if (!capability.isPresent()) { ctx.getSource() - .sendFeedback(new StringTextComponent("Minecart has no Couplings Attached"), true); + .sendSuccess(new StringTextComponent("Minecart has no Couplings Attached"), true); return 0; } @@ -163,14 +163,14 @@ public class CouplingCommand { (controller.isConnectedToCoupling() ? 1 : 0) + (controller.isLeadingCoupling() ? 1 : 0); if (couplings == 0) { ctx.getSource() - .sendFeedback(new StringTextComponent("Minecart has no Couplings Attached"), true); + .sendSuccess(new StringTextComponent("Minecart has no Couplings Attached"), true); return 0; } controller.decouple(); ctx.getSource() - .sendFeedback( + .sendSuccess( new StringTextComponent("Removed " + couplings + " couplings from the Minecart"), true); return couplings; diff --git a/src/main/java/com/simibubi/create/foundation/command/FabulousWarningCommand.java b/src/main/java/com/simibubi/create/foundation/command/FabulousWarningCommand.java index 2c03d40b0..c85496e46 100644 --- a/src/main/java/com/simibubi/create/foundation/command/FabulousWarningCommand.java +++ b/src/main/java/com/simibubi/create/foundation/command/FabulousWarningCommand.java @@ -16,7 +16,7 @@ public class FabulousWarningCommand { .requires(AllCommands.sourceIsPlayer) .executes(ctx -> { ServerPlayerEntity player = ctx.getSource() - .asPlayer(); + .getPlayerOrException(); AllPackets.channel.send( PacketDistributor.PLAYER.with(() -> player), diff --git a/src/main/java/com/simibubi/create/foundation/command/FixLightingCommand.java b/src/main/java/com/simibubi/create/foundation/command/FixLightingCommand.java index 4557c07ad..5e11d833d 100644 --- a/src/main/java/com/simibubi/create/foundation/command/FixLightingCommand.java +++ b/src/main/java/com/simibubi/create/foundation/command/FixLightingCommand.java @@ -13,14 +13,14 @@ public class FixLightingCommand { static ArgumentBuilder register() { return Commands.literal("fixLighting") - .requires(cs -> cs.hasPermissionLevel(0)) + .requires(cs -> cs.hasPermission(0)) .executes(ctx -> { AllPackets.channel.send(PacketDistributor.PLAYER.with(() -> (ServerPlayerEntity) ctx.getSource() .getEntity()), new SConfigureConfigPacket(SConfigureConfigPacket.Actions.fixLighting.name(), String.valueOf(true))); ctx.getSource() - .sendFeedback( + .sendSuccess( new StringTextComponent("Forge's experimental block rendering pipeline is now enabled."), true); return 1; diff --git a/src/main/java/com/simibubi/create/foundation/command/FlySpeedCommand.java b/src/main/java/com/simibubi/create/foundation/command/FlySpeedCommand.java index 2a8a1c189..a005f379f 100644 --- a/src/main/java/com/simibubi/create/foundation/command/FlySpeedCommand.java +++ b/src/main/java/com/simibubi/create/foundation/command/FlySpeedCommand.java @@ -17,18 +17,18 @@ public class FlySpeedCommand { public static ArgumentBuilder register() { return Commands.literal("flySpeed") - .requires(cs -> cs.hasPermissionLevel(2)) + .requires(cs -> cs.hasPermission(2)) .then(Commands.argument("speed", FloatArgumentType.floatArg(0)) .then(Commands.argument("target", EntityArgument.player()) .executes(ctx -> sendFlySpeedUpdate(ctx, EntityArgument.getPlayer(ctx, "target"), FloatArgumentType.getFloat(ctx, "speed")))) .executes(ctx -> sendFlySpeedUpdate(ctx, ctx.getSource() - .asPlayer(), FloatArgumentType.getFloat(ctx, "speed")))) + .getPlayerOrException(), FloatArgumentType.getFloat(ctx, "speed")))) .then(Commands.literal("reset") .then(Commands.argument("target", EntityArgument.player()) .executes(ctx -> sendFlySpeedUpdate(ctx, EntityArgument.getPlayer(ctx, "target"), 0.05f))) .executes(ctx -> sendFlySpeedUpdate(ctx, ctx.getSource() - .asPlayer(), 0.05f)) + .getPlayerOrException(), 0.05f)) ); } @@ -36,11 +36,11 @@ public class FlySpeedCommand { private static int sendFlySpeedUpdate(CommandContext ctx, ServerPlayerEntity player, float speed) { SPlayerAbilitiesPacket packet = new SPlayerAbilitiesPacket(player.abilities); // packet.setFlySpeed(speed); - ObfuscationReflectionHelper.setPrivateValue(SPlayerAbilitiesPacket.class, packet, speed, "field_149116_e"); - player.connection.sendPacket(packet); + ObfuscationReflectionHelper.setPrivateValue(SPlayerAbilitiesPacket.class, packet, speed, "flyingSpeed"); // flyingSpeed + player.connection.send(packet); ctx.getSource() - .sendFeedback(new StringTextComponent("Temporarily set " + player.getName() + .sendSuccess(new StringTextComponent("Temporarily set " + player.getName() .getString() + "'s Flying Speed to: " + speed), true); return Command.SINGLE_SUCCESS; diff --git a/src/main/java/com/simibubi/create/foundation/command/GlueCommand.java b/src/main/java/com/simibubi/create/foundation/command/GlueCommand.java index 269d52023..c3535e5a4 100644 --- a/src/main/java/com/simibubi/create/foundation/command/GlueCommand.java +++ b/src/main/java/com/simibubi/create/foundation/command/GlueCommand.java @@ -13,17 +13,17 @@ import net.minecraft.world.server.ServerWorld; public class GlueCommand { public static ArgumentBuilder register() { return Commands.literal("glue") - .requires(cs -> cs.hasPermissionLevel(0)) + .requires(cs -> cs.hasPermission(0)) .then(Commands.argument("pos", BlockPosArgument.blockPos()) //.then(Commands.argument("direction", EnumArgument.enumArgument(Direction.class)) .executes(ctx -> { - BlockPos pos = BlockPosArgument.getBlockPos(ctx, "pos"); + BlockPos pos = BlockPosArgument.getOrLoadBlockPos(ctx, "pos"); - ServerWorld world = ctx.getSource().getWorld(); + ServerWorld world = ctx.getSource().getLevel(); SuperGlueEntity entity = new SuperGlueEntity(world, pos, Direction.UP); entity.playPlaceSound(); - world.addEntity(entity); + world.addFreshEntity(entity); return 1; })); diff --git a/src/main/java/com/simibubi/create/foundation/command/HighlightCommand.java b/src/main/java/com/simibubi/create/foundation/command/HighlightCommand.java index 2d242ee4f..44dc55900 100644 --- a/src/main/java/com/simibubi/create/foundation/command/HighlightCommand.java +++ b/src/main/java/com/simibubi/create/foundation/command/HighlightCommand.java @@ -28,12 +28,12 @@ public class HighlightCommand { public static ArgumentBuilder register() { return Commands.literal("highlight") - .requires(cs -> cs.hasPermissionLevel(0)) + .requires(cs -> cs.hasPermission(0)) .then(Commands.argument("pos", BlockPosArgument.blockPos()) .then(Commands.argument("players", EntityArgument.players()) .executes(ctx -> { Collection players = EntityArgument.getPlayers(ctx, "players"); - BlockPos pos = BlockPosArgument.getBlockPos(ctx, "pos"); + BlockPos pos = BlockPosArgument.getOrLoadBlockPos(ctx, "pos"); for (ServerPlayerEntity p : players) { AllPackets.channel.send(PacketDistributor.PLAYER.with(() -> p), new HighlightPacket(pos)); @@ -53,14 +53,14 @@ public class HighlightCommand { // .requires(AllCommands.sourceIsPlayer) .executes(ctx -> { ServerPlayerEntity player = ctx.getSource() - .asPlayer(); + .getPlayerOrException(); return highlightAssemblyExceptionFor(player, ctx.getSource()); }); } private static void sendMissMessage(CommandSource source) { - source.sendFeedback( + source.sendSuccess( new StringTextComponent("Try looking at a Block that has failed to assemble a Contraption and try again."), true); } @@ -69,19 +69,19 @@ public class HighlightCommand { double distance = player.getAttribute(ForgeMod.REACH_DISTANCE.get()) .getValue(); Vector3d start = player.getEyePosition(1); - Vector3d look = player.getLook(1); + Vector3d look = player.getViewVector(1); Vector3d end = start.add(look.x * distance, look.y * distance, look.z * distance); - World world = player.world; + World world = player.level; - BlockRayTraceResult ray = world.rayTraceBlocks( + BlockRayTraceResult ray = world.clip( new RayTraceContext(start, end, RayTraceContext.BlockMode.OUTLINE, RayTraceContext.FluidMode.NONE, player)); if (ray.getType() == RayTraceResult.Type.MISS) { sendMissMessage(source); return 0; } - BlockPos pos = ray.getPos(); - TileEntity te = world.getTileEntity(pos); + BlockPos pos = ray.getBlockPos(); + TileEntity te = world.getBlockEntity(pos); if (!(te instanceof IDisplayAssemblyExceptions)) { sendMissMessage(source); return 0; @@ -95,13 +95,13 @@ public class HighlightCommand { } if (!exception.hasPosition()) { - source.sendFeedback(new StringTextComponent("Can't highlight a specific position for this issue"), true); + source.sendSuccess(new StringTextComponent("Can't highlight a specific position for this issue"), true); return Command.SINGLE_SUCCESS; } BlockPos p = exception.getPosition(); String command = "/create highlight " + p.getX() + " " + p.getY() + " " + p.getZ(); - return player.server.getCommandManager() - .handleCommand(source, command); + return player.server.getCommands() + .performCommand(source, command); } } diff --git a/src/main/java/com/simibubi/create/foundation/command/HighlightPacket.java b/src/main/java/com/simibubi/create/foundation/command/HighlightPacket.java index 900e250fe..61422c598 100644 --- a/src/main/java/com/simibubi/create/foundation/command/HighlightPacket.java +++ b/src/main/java/com/simibubi/create/foundation/command/HighlightPacket.java @@ -24,12 +24,12 @@ public class HighlightPacket extends SimplePacketBase { } public HighlightPacket(PacketBuffer buffer) { - this.pos = BlockPos.fromLong(buffer.readLong()); + this.pos = BlockPos.of(buffer.readLong()); } @Override public void write(PacketBuffer buffer) { - buffer.writeLong(pos.toLong()); + buffer.writeLong(pos.asLong()); } @Override @@ -45,12 +45,12 @@ public class HighlightPacket extends SimplePacketBase { @OnlyIn(Dist.CLIENT) public static void performHighlight(BlockPos pos) { - if (Minecraft.getInstance().world == null || !Minecraft.getInstance().world.isBlockPresent(pos)) + if (Minecraft.getInstance().level == null || !Minecraft.getInstance().level.isLoaded(pos)) return; - CreateClient.OUTLINER.showAABB("highlightCommand", VoxelShapes.fullCube() - .getBoundingBox() - .offset(pos), 200) + CreateClient.OUTLINER.showAABB("highlightCommand", VoxelShapes.block() + .bounds() + .move(pos), 200) .lineWidth(1 / 32f) .colored(0xEeEeEe) // .colored(0x243B50) diff --git a/src/main/java/com/simibubi/create/foundation/command/KillTPSCommand.java b/src/main/java/com/simibubi/create/foundation/command/KillTPSCommand.java index 46e18f681..366e83196 100644 --- a/src/main/java/com/simibubi/create/foundation/command/KillTPSCommand.java +++ b/src/main/java/com/simibubi/create/foundation/command/KillTPSCommand.java @@ -12,19 +12,19 @@ public class KillTPSCommand { public static ArgumentBuilder register() { return Commands.literal("killtps") - .requires(cs -> cs.hasPermissionLevel(2)) + .requires(cs -> cs.hasPermission(2)) .executes(ctx -> { // killtps no arguments ctx.getSource() - .sendFeedback(Lang.createTranslationTextComponent("command.killTPSCommand.status.slowed_by.0", + .sendSuccess(Lang.createTranslationTextComponent("command.killTPSCommand.status.slowed_by.0", Create.LAGGER.isLagging() ? Create.LAGGER.getTickTime() : 0), true); if (Create.LAGGER.isLagging()) ctx.getSource() - .sendFeedback(Lang.createTranslationTextComponent("command.killTPSCommand.status.usage.0"), + .sendSuccess(Lang.createTranslationTextComponent("command.killTPSCommand.status.usage.0"), true); else ctx.getSource() - .sendFeedback(Lang.createTranslationTextComponent("command.killTPSCommand.status.usage.1"), + .sendSuccess(Lang.createTranslationTextComponent("command.killTPSCommand.status.usage.1"), true); return 1; @@ -36,35 +36,35 @@ public class KillTPSCommand { if (tickTime > 0) { Create.LAGGER.setLagging(true); ctx.getSource() - .sendFeedback((Lang + .sendSuccess((Lang .createTranslationTextComponent("command.killTPSCommand.status.slowed_by.1", tickTime)), true); ctx.getSource() - .sendFeedback(Lang.createTranslationTextComponent("command.killTPSCommand.status.usage.0"), + .sendSuccess(Lang.createTranslationTextComponent("command.killTPSCommand.status.usage.0"), true); } else { ctx.getSource() - .sendFeedback(Lang.createTranslationTextComponent("command.killTPSCommand.status.usage.1"), + .sendSuccess(Lang.createTranslationTextComponent("command.killTPSCommand.status.usage.1"), true); } return 1; }) .then(Commands.argument(Lang.translate("command.killTPSCommand.argument.tickTime") - .getUnformattedComponentText(), IntegerArgumentType.integer(1)) + .getContents(), IntegerArgumentType.integer(1)) .executes(ctx -> { // killtps start tickTime int tickTime = IntegerArgumentType.getInteger(ctx, Lang.translate("command.killTPSCommand.argument.tickTime") - .getUnformattedComponentText()); + .getContents()); Create.LAGGER.setTickTime(tickTime); Create.LAGGER.setLagging(true); ctx.getSource() - .sendFeedback((Lang + .sendSuccess((Lang .createTranslationTextComponent("command.killTPSCommand.status.slowed_by.1", tickTime)), true); ctx.getSource() - .sendFeedback(Lang.createTranslationTextComponent("command.killTPSCommand.status.usage.0"), + .sendSuccess(Lang.createTranslationTextComponent("command.killTPSCommand.status.usage.0"), true); return 1; @@ -74,7 +74,7 @@ public class KillTPSCommand { // killtps stop Create.LAGGER.setLagging(false); ctx.getSource() - .sendFeedback(Lang.createTranslationTextComponent("command.killTPSCommand.status.slowed_by.2"), + .sendSuccess(Lang.createTranslationTextComponent("command.killTPSCommand.status.slowed_by.2"), false); return 1; diff --git a/src/main/java/com/simibubi/create/foundation/command/OverlayConfigCommand.java b/src/main/java/com/simibubi/create/foundation/command/OverlayConfigCommand.java index 034746d58..e7479a2a6 100644 --- a/src/main/java/com/simibubi/create/foundation/command/OverlayConfigCommand.java +++ b/src/main/java/com/simibubi/create/foundation/command/OverlayConfigCommand.java @@ -15,7 +15,7 @@ public class OverlayConfigCommand { public static ArgumentBuilder register() { return Commands.literal("overlay") - .requires(cs -> cs.hasPermissionLevel(0)) + .requires(cs -> cs.hasPermission(0)) .then(Commands.literal("reset") .executes(ctx -> { DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> SConfigureConfigPacket.Actions.overlayReset.performAction("")); @@ -26,7 +26,7 @@ public class OverlayConfigCommand { new SConfigureConfigPacket(SConfigureConfigPacket.Actions.overlayReset.name(), ""))); ctx.getSource() - .sendFeedback(new StringTextComponent("reset overlay offset"), true); + .sendSuccess(new StringTextComponent("reset overlay offset"), true); return 1; }) @@ -40,7 +40,7 @@ public class OverlayConfigCommand { new SConfigureConfigPacket(SConfigureConfigPacket.Actions.overlayScreen.name(), ""))); ctx.getSource() - .sendFeedback(new StringTextComponent("window opened"), true); + .sendSuccess(new StringTextComponent("window opened"), true); return 1; }); diff --git a/src/main/java/com/simibubi/create/foundation/command/PonderCommand.java b/src/main/java/com/simibubi/create/foundation/command/PonderCommand.java index 70d353a64..ea174394b 100644 --- a/src/main/java/com/simibubi/create/foundation/command/PonderCommand.java +++ b/src/main/java/com/simibubi/create/foundation/command/PonderCommand.java @@ -21,18 +21,18 @@ import net.minecraftforge.common.util.FakePlayer; import net.minecraftforge.fml.network.PacketDistributor; public class PonderCommand { - public static final SuggestionProvider ITEM_PONDERS = SuggestionProviders.register(new ResourceLocation("all_ponders"), (iSuggestionProviderCommandContext, builder) -> ISuggestionProvider.func_212476_a(PonderRegistry.all.keySet().stream(), builder)); + public static final SuggestionProvider ITEM_PONDERS = SuggestionProviders.register(new ResourceLocation("all_ponders"), (iSuggestionProviderCommandContext, builder) -> ISuggestionProvider.suggestResource(PonderRegistry.all.keySet().stream(), builder)); static ArgumentBuilder register() { return Commands.literal("ponder") - .requires(cs -> cs.hasPermissionLevel(0)) - .executes(ctx -> openScene("index", ctx.getSource().asPlayer())) - .then(Commands.argument("scene", ResourceLocationArgument.resourceLocation()) + .requires(cs -> cs.hasPermission(0)) + .executes(ctx -> openScene("index", ctx.getSource().getPlayerOrException())) + .then(Commands.argument("scene", ResourceLocationArgument.id()) .suggests(ITEM_PONDERS) - .executes(ctx -> openScene(ResourceLocationArgument.getResourceLocation(ctx, "scene").toString(), ctx.getSource().asPlayer())) + .executes(ctx -> openScene(ResourceLocationArgument.getId(ctx, "scene").toString(), ctx.getSource().getPlayerOrException())) .then(Commands.argument("targets", EntityArgument.players()) - .requires(cs -> cs.hasPermissionLevel(2)) - .executes(ctx -> openScene(ResourceLocationArgument.getResourceLocation(ctx, "scene").toString(), EntityArgument.getPlayers(ctx, "targets"))) + .requires(cs -> cs.hasPermission(2)) + .executes(ctx -> openScene(ResourceLocationArgument.getId(ctx, "scene").toString(), EntityArgument.getPlayers(ctx, "targets"))) ) ); diff --git a/src/main/java/com/simibubi/create/foundation/command/ReplaceInCommandBlocksCommand.java b/src/main/java/com/simibubi/create/foundation/command/ReplaceInCommandBlocksCommand.java index 7a7e136e6..02f62bcc5 100644 --- a/src/main/java/com/simibubi/create/foundation/command/ReplaceInCommandBlocksCommand.java +++ b/src/main/java/com/simibubi/create/foundation/command/ReplaceInCommandBlocksCommand.java @@ -21,7 +21,7 @@ public class ReplaceInCommandBlocksCommand { public static ArgumentBuilder register() { return Commands.literal("replaceInCommandBlocks") - .requires(cs -> cs.hasPermissionLevel(0)) + .requires(cs -> cs.hasPermission(0)) .then(Commands.argument("begin", BlockPosArgument.blockPos()) .then(Commands.argument("end", BlockPosArgument.blockPos()) .then(Commands.argument("toReplace", StringArgumentType.string()) @@ -38,31 +38,31 @@ public class ReplaceInCommandBlocksCommand { private static void doReplace(CommandSource source, BlockPos from, BlockPos to, String toReplace, String replaceWith) { - ServerWorld world = source.getWorld(); + ServerWorld world = source.getLevel(); MutableInt blocks = new MutableInt(0); - BlockPos.getAllInBox(from, to) + BlockPos.betweenClosedStream(from, to) .forEach(pos -> { BlockState blockState = world.getBlockState(pos); if (!(blockState.getBlock() instanceof CommandBlockBlock)) return; - TileEntity tileEntity = world.getTileEntity(pos); + TileEntity tileEntity = world.getBlockEntity(pos); if (!(tileEntity instanceof CommandBlockTileEntity)) return; CommandBlockTileEntity cb = (CommandBlockTileEntity) tileEntity; - CommandBlockLogic commandBlockLogic = cb.getCommandBlockLogic(); + CommandBlockLogic commandBlockLogic = cb.getCommandBlock(); String command = commandBlockLogic.getCommand(); if (command.indexOf(toReplace) != -1) blocks.increment(); commandBlockLogic.setCommand(command.replaceAll(toReplace, replaceWith)); - cb.markDirty(); - world.notifyBlockUpdate(pos, blockState, blockState, 2); + cb.setChanged(); + world.sendBlockUpdated(pos, blockState, blockState, 2); }); int intValue = blocks.intValue(); if (intValue == 0) { - source.sendFeedback(new StringTextComponent("Couldn't find \"" + toReplace + "\" anywhere."), true); + source.sendSuccess(new StringTextComponent("Couldn't find \"" + toReplace + "\" anywhere."), true); return; } - source.sendFeedback(new StringTextComponent("Replaced occurrences in " + intValue + " blocks."), true); + source.sendSuccess(new StringTextComponent("Replaced occurrences in " + intValue + " blocks."), true); } } diff --git a/src/main/java/com/simibubi/create/foundation/command/SConfigureConfigPacket.java b/src/main/java/com/simibubi/create/foundation/command/SConfigureConfigPacket.java index 73ffd6168..192321c33 100644 --- a/src/main/java/com/simibubi/create/foundation/command/SConfigureConfigPacket.java +++ b/src/main/java/com/simibubi/create/foundation/command/SConfigureConfigPacket.java @@ -44,14 +44,14 @@ public class SConfigureConfigPacket extends SimplePacketBase { } public SConfigureConfigPacket(PacketBuffer buffer) { - this.option = buffer.readString(32767); - this.value = buffer.readString(32767); + this.option = buffer.readUtf(32767); + this.value = buffer.readUtf(32767); } @Override public void write(PacketBuffer buffer) { - buffer.writeString(option); - buffer.writeString(value); + buffer.writeUtf(option); + buffer.writeUtf(value); } @Override @@ -85,7 +85,7 @@ public class SConfigureConfigPacket extends SimplePacketBase { try { configPath = ConfigHelper.ConfigPath.parse(option); } catch (IllegalArgumentException e) { - player.sendStatusMessage(new StringTextComponent(e.getMessage()), false); + player.displayClientMessage(new StringTextComponent(e.getMessage()), false); return; } @@ -96,11 +96,11 @@ public class SConfigureConfigPacket extends SimplePacketBase { try { ConfigHelper.setConfigValue(configPath, value); - player.sendStatusMessage(new StringTextComponent("Great Success!"), false); + player.displayClientMessage(new StringTextComponent("Great Success!"), false); } catch (ConfigHelper.InvalidValueException e) { - player.sendStatusMessage(new StringTextComponent("Config could not be set the the specified value!"), false); + player.displayClientMessage(new StringTextComponent("Config could not be set the the specified value!"), false); } catch (Exception e) { - player.sendStatusMessage(new StringTextComponent("Something went wrong while trying to set config value. Check the client logs for more information"), false); + player.displayClientMessage(new StringTextComponent("Something went wrong while trying to set config value. Check the client logs for more information"), false); Create.LOGGER.warn("Exception during client-side config value set:", e); } @@ -140,14 +140,14 @@ public class SConfigureConfigPacket extends SimplePacketBase { try { configPath = ConfigHelper.ConfigPath.parse(value); } catch (IllegalArgumentException e) { - player.sendStatusMessage(new StringTextComponent(e.getMessage()), false); + player.displayClientMessage(new StringTextComponent(e.getMessage()), false); return; } try { ScreenOpener.open(SubMenuConfigScreen.find(configPath)); } catch (Exception e) { - player.sendStatusMessage(new StringTextComponent("Unable to find the specified config"), false); + player.displayClientMessage(new StringTextComponent("Unable to find the specified config"), false); } } @@ -160,14 +160,14 @@ public class SConfigureConfigPacket extends SimplePacketBase { if (value.equals("info")) { ITextComponent text = new StringTextComponent("Rainbow Debug Utility is currently: ") .append(boolToText(AllConfigs.CLIENT.rainbowDebug.get())); - player.sendStatusMessage(text, false); + player.displayClientMessage(text, false); return; } AllConfigs.CLIENT.rainbowDebug.set(Boolean.parseBoolean(value)); ITextComponent text = boolToText(AllConfigs.CLIENT.rainbowDebug.get()) - .append(new StringTextComponent(" Rainbow Debug Utility").formatted(TextFormatting.WHITE)); - player.sendStatusMessage(text, false); + .append(new StringTextComponent(" Rainbow Debug Utility").withStyle(TextFormatting.WHITE)); + player.displayClientMessage(text, false); } @OnlyIn(Dist.CLIENT) @@ -184,7 +184,7 @@ public class SConfigureConfigPacket extends SimplePacketBase { @OnlyIn(Dist.CLIENT) private static void experimentalLighting(String value) { ForgeConfig.CLIENT.experimentalForgeLightPipelineEnabled.set(true); - Minecraft.getInstance().worldRenderer.loadRenderers(); + Minecraft.getInstance().levelRenderer.allChanged(); } @OnlyIn(Dist.CLIENT) @@ -207,14 +207,14 @@ public class SConfigureConfigPacket extends SimplePacketBase { @OnlyIn(Dist.CLIENT) private static void fabulousWarning(String value) { AllConfigs.CLIENT.ignoreFabulousWarning.set(true); - Minecraft.getInstance().ingameGUI.addChatMessage(ChatType.CHAT, + Minecraft.getInstance().gui.handleChat(ChatType.CHAT, new StringTextComponent("Disabled Fabulous graphics warning"), - Minecraft.getInstance().player.getUniqueID()); + Minecraft.getInstance().player.getUUID()); } private static IFormattableTextComponent boolToText(boolean b) { - return b ? new StringTextComponent("enabled").formatted(TextFormatting.DARK_GREEN) - : new StringTextComponent("disabled").formatted(TextFormatting.RED); + return b ? new StringTextComponent("enabled").withStyle(TextFormatting.DARK_GREEN) + : new StringTextComponent("disabled").withStyle(TextFormatting.RED); } } } diff --git a/src/main/java/com/simibubi/create/foundation/config/CClient.java b/src/main/java/com/simibubi/create/foundation/config/CClient.java index bea229d1e..c54d8ad82 100644 --- a/src/main/java/com/simibubi/create/foundation/config/CClient.java +++ b/src/main/java/com/simibubi/create/foundation/config/CClient.java @@ -1,4 +1,10 @@ package com.simibubi.create.foundation.config; +import com.simibubi.create.foundation.config.ConfigBase.ConfigBool; +import com.simibubi.create.foundation.config.ConfigBase.ConfigEnum; +import com.simibubi.create.foundation.config.ConfigBase.ConfigFloat; +import com.simibubi.create.foundation.config.ConfigBase.ConfigGroup; +import com.simibubi.create.foundation.config.ConfigBase.ConfigInt; + public class CClient extends ConfigBase { diff --git a/src/main/java/com/simibubi/create/foundation/config/CCuriosities.java b/src/main/java/com/simibubi/create/foundation/config/CCuriosities.java index 2ba15eaea..e1e5840c5 100644 --- a/src/main/java/com/simibubi/create/foundation/config/CCuriosities.java +++ b/src/main/java/com/simibubi/create/foundation/config/CCuriosities.java @@ -1,4 +1,6 @@ package com.simibubi.create.foundation.config; +import com.simibubi.create.foundation.config.ConfigBase.ConfigInt; + public class CCuriosities extends ConfigBase { diff --git a/src/main/java/com/simibubi/create/foundation/config/CFluids.java b/src/main/java/com/simibubi/create/foundation/config/CFluids.java index ad8684da1..1c546399e 100644 --- a/src/main/java/com/simibubi/create/foundation/config/CFluids.java +++ b/src/main/java/com/simibubi/create/foundation/config/CFluids.java @@ -1,4 +1,6 @@ package com.simibubi.create.foundation.config; +import com.simibubi.create.foundation.config.ConfigBase.ConfigInt; + public class CFluids extends ConfigBase { diff --git a/src/main/java/com/simibubi/create/foundation/config/CKinetics.java b/src/main/java/com/simibubi/create/foundation/config/CKinetics.java index b5fe5002d..d4cf51867 100644 --- a/src/main/java/com/simibubi/create/foundation/config/CKinetics.java +++ b/src/main/java/com/simibubi/create/foundation/config/CKinetics.java @@ -1,4 +1,10 @@ package com.simibubi.create.foundation.config; +import com.simibubi.create.foundation.config.ConfigBase.ConfigBool; +import com.simibubi.create.foundation.config.ConfigBase.ConfigEnum; +import com.simibubi.create.foundation.config.ConfigBase.ConfigFloat; +import com.simibubi.create.foundation.config.ConfigBase.ConfigGroup; +import com.simibubi.create.foundation.config.ConfigBase.ConfigInt; + public class CKinetics extends ConfigBase { diff --git a/src/main/java/com/simibubi/create/foundation/config/CLogistics.java b/src/main/java/com/simibubi/create/foundation/config/CLogistics.java index 33e4333cb..76fbeced0 100644 --- a/src/main/java/com/simibubi/create/foundation/config/CLogistics.java +++ b/src/main/java/com/simibubi/create/foundation/config/CLogistics.java @@ -1,4 +1,6 @@ package com.simibubi.create.foundation.config; +import com.simibubi.create.foundation.config.ConfigBase.ConfigInt; + public class CLogistics extends ConfigBase { diff --git a/src/main/java/com/simibubi/create/foundation/config/CRecipes.java b/src/main/java/com/simibubi/create/foundation/config/CRecipes.java index 86531dcb6..fabba448b 100644 --- a/src/main/java/com/simibubi/create/foundation/config/CRecipes.java +++ b/src/main/java/com/simibubi/create/foundation/config/CRecipes.java @@ -1,4 +1,7 @@ package com.simibubi.create.foundation.config; +import com.simibubi.create.foundation.config.ConfigBase.ConfigBool; +import com.simibubi.create.foundation.config.ConfigBase.ConfigInt; + public class CRecipes extends ConfigBase { diff --git a/src/main/java/com/simibubi/create/foundation/config/CSchematics.java b/src/main/java/com/simibubi/create/foundation/config/CSchematics.java index 21a38ef34..445ca9a2d 100644 --- a/src/main/java/com/simibubi/create/foundation/config/CSchematics.java +++ b/src/main/java/com/simibubi/create/foundation/config/CSchematics.java @@ -1,4 +1,8 @@ package com.simibubi.create.foundation.config; +import com.simibubi.create.foundation.config.ConfigBase.ConfigFloat; +import com.simibubi.create.foundation.config.ConfigBase.ConfigGroup; +import com.simibubi.create.foundation.config.ConfigBase.ConfigInt; + public class CSchematics extends ConfigBase { diff --git a/src/main/java/com/simibubi/create/foundation/config/CServer.java b/src/main/java/com/simibubi/create/foundation/config/CServer.java index e5cf81cfd..ddac01277 100644 --- a/src/main/java/com/simibubi/create/foundation/config/CServer.java +++ b/src/main/java/com/simibubi/create/foundation/config/CServer.java @@ -1,4 +1,7 @@ package com.simibubi.create.foundation.config; +import com.simibubi.create.foundation.config.ConfigBase.ConfigGroup; +import com.simibubi.create.foundation.config.ConfigBase.ConfigInt; + public class CServer extends ConfigBase { diff --git a/src/main/java/com/simibubi/create/foundation/config/CWorldGen.java b/src/main/java/com/simibubi/create/foundation/config/CWorldGen.java index f90afb0a0..f1aa768c3 100644 --- a/src/main/java/com/simibubi/create/foundation/config/CWorldGen.java +++ b/src/main/java/com/simibubi/create/foundation/config/CWorldGen.java @@ -4,6 +4,8 @@ import com.simibubi.create.foundation.worldgen.AllWorldFeatures; import net.minecraftforge.common.ForgeConfigSpec.Builder; +import com.simibubi.create.foundation.config.ConfigBase.ConfigBool; + public class CWorldGen extends ConfigBase { public ConfigBool disable = b(false, "disableWorldGen", Comments.disable); diff --git a/src/main/java/com/simibubi/create/foundation/config/ui/BaseConfigScreen.java b/src/main/java/com/simibubi/create/foundation/config/ui/BaseConfigScreen.java index cb2e3401b..eb551320e 100644 --- a/src/main/java/com/simibubi/create/foundation/config/ui/BaseConfigScreen.java +++ b/src/main/java/com/simibubi/create/foundation/config/ui/BaseConfigScreen.java @@ -117,7 +117,7 @@ public class BaseConfigScreen extends ConfigScreen { super.init(); returnOnClose = true; - TextStencilElement clientText = new TextStencilElement(client.fontRenderer, new StringTextComponent(clientTile)).centered(true, true); + TextStencilElement clientText = new TextStencilElement(minecraft.font, new StringTextComponent(clientTile)).centered(true, true); widgets.add(clientConfigWidget = new BoxWidget(width / 2 - 100, height / 2 - 15 - 30, 200, 16).showingElement(clientText)); if (clientSpec != null) { @@ -129,7 +129,7 @@ public class BaseConfigScreen extends ConfigScreen { clientText.withElementRenderer(DISABLED_RENDERER); } - TextStencilElement commonText = new TextStencilElement(client.fontRenderer, new StringTextComponent(commonTile)).centered(true, true); + TextStencilElement commonText = new TextStencilElement(minecraft.font, new StringTextComponent(commonTile)).centered(true, true); widgets.add(commonConfigWidget = new BoxWidget(width / 2 - 100, height / 2 - 15, 200, 16).showingElement(commonText)); if (commonSpec != null) { @@ -141,14 +141,14 @@ public class BaseConfigScreen extends ConfigScreen { commonText.withElementRenderer(DISABLED_RENDERER); } - TextStencilElement serverText = new TextStencilElement(client.fontRenderer, new StringTextComponent(serverTile)).centered(true, true); + TextStencilElement serverText = new TextStencilElement(minecraft.font, new StringTextComponent(serverTile)).centered(true, true); widgets.add(serverConfigWidget = new BoxWidget(width / 2 - 100, height / 2 - 15 + 30, 200, 16).showingElement(serverText)); if (serverSpec == null) { serverConfigWidget.active = false; serverConfigWidget.updateColorsFromState(); serverText.withElementRenderer(DISABLED_RENDERER); - } else if (Minecraft.getInstance().world == null) { + } else if (Minecraft.getInstance().level == null) { serverText.withElementRenderer(DISABLED_RENDERER); serverConfigWidget.getToolTip() .add(new StringTextComponent("Stored individually per World")); @@ -162,7 +162,7 @@ public class BaseConfigScreen extends ConfigScreen { serverText.withElementRenderer(BoxWidget.gradientFactory.apply(serverConfigWidget)); } - TextStencilElement titleText = new TextStencilElement(client.fontRenderer, modID.toUpperCase(Locale.ROOT)) + TextStencilElement titleText = new TextStencilElement(minecraft.font, modID.toUpperCase(Locale.ROOT)) .centered(true, true) .withElementRenderer((ms, w, h, alpha) -> { UIRenderHelper.angledGradient(ms, 0, 0, h / 2, h, w / 2, Theme.p(Theme.Key.CONFIG_TITLE_A)); @@ -195,7 +195,7 @@ public class BaseConfigScreen extends ConfigScreen { @Override protected void renderWindow(MatrixStack ms, int mouseX, int mouseY, float partialTicks) { - drawCenteredString(ms, client.fontRenderer, "Access Configs for Mod:", width / 2, height / 2 - 105, Theme.i(Theme.Key.TEXT_ACCENT_STRONG)); + drawCenteredString(ms, minecraft.font, "Access Configs for Mod:", width / 2, height / 2 - 105, Theme.i(Theme.Key.TEXT_ACCENT_STRONG)); } private void linkTo(Screen screen) { diff --git a/src/main/java/com/simibubi/create/foundation/config/ui/CConfigureConfigPacket.java b/src/main/java/com/simibubi/create/foundation/config/ui/CConfigureConfigPacket.java index b472b0a70..3def1c55e 100644 --- a/src/main/java/com/simibubi/create/foundation/config/ui/CConfigureConfigPacket.java +++ b/src/main/java/com/simibubi/create/foundation/config/ui/CConfigureConfigPacket.java @@ -25,16 +25,16 @@ public class CConfigureConfigPacket extends SimplePacketBase { } public CConfigureConfigPacket(PacketBuffer buffer) { - this.modID = buffer.readString(32767); - this.path = buffer.readString(32767); - this.value = buffer.readString(32767); + this.modID = buffer.readUtf(32767); + this.path = buffer.readUtf(32767); + this.value = buffer.readUtf(32767); } @Override public void write(PacketBuffer buffer) { - buffer.writeString(modID); - buffer.writeString(path); - buffer.writeString(value); + buffer.writeUtf(modID); + buffer.writeUtf(path); + buffer.writeUtf(value); } @Override @@ -42,7 +42,7 @@ public class CConfigureConfigPacket extends SimplePacketBase { context.get().enqueueWork(() -> { try { ServerPlayerEntity sender = context.get().getSender(); - if (sender == null || !sender.hasPermissionLevel(2)) + if (sender == null || !sender.hasPermissions(2)) return; ForgeConfigSpec spec = ConfigHelper.findConfigSpecFor(ModConfig.Type.SERVER, modID); diff --git a/src/main/java/com/simibubi/create/foundation/config/ui/ConfigScreen.java b/src/main/java/com/simibubi/create/foundation/config/ui/ConfigScreen.java index 475ac2db8..797c4758f 100644 --- a/src/main/java/com/simibubi/create/foundation/config/ui/ConfigScreen.java +++ b/src/main/java/com/simibubi/create/foundation/config/ui/ConfigScreen.java @@ -53,7 +53,7 @@ public abstract class ConfigScreen extends AbstractSimiScreen { public static final Map> backgrounds = new HashMap<>(); public static final PhysicalFloat cogSpin = PhysicalFloat.create().withLimit(10f).withDrag(0.3).addForce(new Force.Static(.2f)); - public static final BlockState cogwheelState = AllBlocks.LARGE_COGWHEEL.getDefaultState().with(CogWheelBlock.AXIS, Direction.Axis.Y); + public static final BlockState cogwheelState = AllBlocks.LARGE_COGWHEEL.getDefaultState().setValue(CogWheelBlock.AXIS, Direction.Axis.Y); public static final Map changes = new HashMap<>(); public static String modID = null; protected final Screen parent; @@ -75,7 +75,7 @@ public abstract class ConfigScreen extends AbstractSimiScreen { @Override protected void renderWindowBackground(MatrixStack ms, int mouseX, int mouseY, float partialTicks) { - if (this.client != null && this.client.world != null) { + if (this.minecraft != null && this.minecraft.level != null) { //in game fill(ms, 0, 0, this.width, this.height, 0xb0_282c34); } else { @@ -102,14 +102,14 @@ public abstract class ConfigScreen extends AbstractSimiScreen { @Override protected void prepareFrame() { Framebuffer thisBuffer = UIRenderHelper.framebuffer; - Framebuffer mainBuffer = Minecraft.getInstance().getFramebuffer(); + Framebuffer mainBuffer = Minecraft.getInstance().getMainRenderTarget(); GlCompat functions = Backend.getInstance().compat; - functions.fbo.bindFramebuffer(GL30.GL_READ_FRAMEBUFFER, mainBuffer.framebufferObject); - functions.fbo.bindFramebuffer(GL30.GL_DRAW_FRAMEBUFFER, thisBuffer.framebufferObject); - functions.blit.blitFramebuffer(0, 0, mainBuffer.framebufferWidth, mainBuffer.framebufferHeight, 0, 0, mainBuffer.framebufferWidth, mainBuffer.framebufferHeight, GL30.GL_COLOR_BUFFER_BIT, GL20.GL_LINEAR); + functions.fbo.bindFramebuffer(GL30.GL_READ_FRAMEBUFFER, mainBuffer.frameBufferId); + functions.fbo.bindFramebuffer(GL30.GL_DRAW_FRAMEBUFFER, thisBuffer.frameBufferId); + functions.blit.blitFramebuffer(0, 0, mainBuffer.viewWidth, mainBuffer.viewHeight, 0, 0, mainBuffer.viewWidth, mainBuffer.viewHeight, GL30.GL_COLOR_BUFFER_BIT, GL20.GL_LINEAR); - functions.fbo.bindFramebuffer(FramebufferConstants.FRAME_BUFFER, thisBuffer.framebufferObject); + functions.fbo.bindFramebuffer(FramebufferConstants.GL_FRAMEBUFFER, thisBuffer.frameBufferId); GL11.glClear(GL30.GL_STENCIL_BUFFER_BIT | GL30.GL_DEPTH_BUFFER_BIT); } @@ -118,14 +118,14 @@ public abstract class ConfigScreen extends AbstractSimiScreen { protected void endFrame() { Framebuffer thisBuffer = UIRenderHelper.framebuffer; - Framebuffer mainBuffer = Minecraft.getInstance().getFramebuffer(); + Framebuffer mainBuffer = Minecraft.getInstance().getMainRenderTarget(); GlCompat functions = Backend.getInstance().compat; - functions.fbo.bindFramebuffer(GL30.GL_READ_FRAMEBUFFER, thisBuffer.framebufferObject); - functions.fbo.bindFramebuffer(GL30.GL_DRAW_FRAMEBUFFER, mainBuffer.framebufferObject); - functions.blit.blitFramebuffer(0, 0, mainBuffer.framebufferWidth, mainBuffer.framebufferHeight, 0, 0, mainBuffer.framebufferWidth, mainBuffer.framebufferHeight, GL30.GL_COLOR_BUFFER_BIT, GL20.GL_LINEAR); + functions.fbo.bindFramebuffer(GL30.GL_READ_FRAMEBUFFER, thisBuffer.frameBufferId); + functions.fbo.bindFramebuffer(GL30.GL_DRAW_FRAMEBUFFER, mainBuffer.frameBufferId); + functions.blit.blitFramebuffer(0, 0, mainBuffer.viewWidth, mainBuffer.viewHeight, 0, 0, mainBuffer.viewWidth, mainBuffer.viewHeight, GL30.GL_COLOR_BUFFER_BIT, GL20.GL_LINEAR); - functions.fbo.bindFramebuffer(FramebufferConstants.FRAME_BUFFER, mainBuffer.framebufferObject); + functions.fbo.bindFramebuffer(FramebufferConstants.GL_FRAMEBUFFER, mainBuffer.frameBufferId); } @Override @@ -164,19 +164,19 @@ public abstract class ConfigScreen extends AbstractSimiScreen { return; } - float elapsedPartials = client.getTickLength(); + float elapsedPartials = minecraft.getDeltaFrameTime(); CreateMainMenuScreen.panorama.render(elapsedPartials, 1); - client.getTextureManager().bindTexture(CreateMainMenuScreen.PANORAMA_OVERLAY_TEXTURES); + minecraft.getTextureManager().bind(CreateMainMenuScreen.PANORAMA_OVERLAY_TEXTURES); RenderSystem.enableBlend(); RenderSystem.blendFunc(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA); - drawTexture(ms, 0, 0, this.width, this.height, 0.0F, 0.0F, 16, 128, 16, 128); + blit(ms, 0, 0, this.width, this.height, 0.0F, 0.0F, 16, 128, 16, 128); fill(ms, 0, 0, this.width, this.height, 0x90_282c34); } protected void renderCog(MatrixStack ms, float partialTicks) { - ms.push(); + ms.pushPose(); ms.translate(-100, 100, -100); ms.scale(200, 200, 1); @@ -184,6 +184,6 @@ public abstract class ConfigScreen extends AbstractSimiScreen { .rotateBlock(22.5, cogSpin.getValue(partialTicks), 22.5) .render(ms); - ms.pop(); + ms.popPose(); } } diff --git a/src/main/java/com/simibubi/create/foundation/config/ui/ConfigScreenList.java b/src/main/java/com/simibubi/create/foundation/config/ui/ConfigScreenList.java index 2b01b9647..1a7f4e105 100644 --- a/src/main/java/com/simibubi/create/foundation/config/ui/ConfigScreenList.java +++ b/src/main/java/com/simibubi/create/foundation/config/ui/ConfigScreenList.java @@ -31,8 +31,8 @@ public class ConfigScreenList extends ExtendedList { public ConfigScreenList(Minecraft client, int width, int height, int top, int bottom, int elementHeight) { super(client, width, height, top, bottom, elementHeight); - func_244605_b(false); - func_244606_c(false); + setRenderBackground(false); + setRenderTopAndBottom(false); setRenderSelection(false); currentText = null; headerHeight = 3; @@ -40,10 +40,10 @@ public class ConfigScreenList extends ExtendedList { @Override public void render(MatrixStack ms, int mouseX, int mouseY, float partialTicks) { - UIRenderHelper.angledGradient(ms, 90, left + width / 2, top, width, 5, 0x60_000000, 0x0); - UIRenderHelper.angledGradient(ms, -90, left + width / 2, bottom, width, 5, 0x60_000000, 0x0); - UIRenderHelper.angledGradient(ms, 0, left, top + height / 2, height, 5, 0x60_000000, 0x0); - UIRenderHelper.angledGradient(ms, 180, right, top + height / 2, height, 5, 0x60_000000, 0x0); + UIRenderHelper.angledGradient(ms, 90, x0 + width / 2, y0, width, 5, 0x60_000000, 0x0); + UIRenderHelper.angledGradient(ms, -90, x0 + width / 2, y1, width, 5, 0x60_000000, 0x0); + UIRenderHelper.angledGradient(ms, 0, x0, y0 + height / 2, height, 5, 0x60_000000, 0x0); + UIRenderHelper.angledGradient(ms, 180, x1, y0 + height / 2, height, 5, 0x60_000000, 0x0); super.render(ms, mouseX, mouseY, partialTicks); } @@ -51,8 +51,8 @@ public class ConfigScreenList extends ExtendedList { @Override protected void renderList(MatrixStack p_238478_1_, int p_238478_2_, int p_238478_3_, int p_238478_4_, int p_238478_5_, float p_238478_6_) { MainWindow window = Minecraft.getInstance().getWindow(); - double d0 = window.getGuiScaleFactor(); - RenderSystem.enableScissor((int) (this.left * d0), (int) (window.getFramebufferHeight() - (this.bottom * d0)), (int) (this.width * d0), (int) (this.height * d0)); + double d0 = window.getGuiScale(); + RenderSystem.enableScissor((int) (this.x0 * d0), (int) (window.getHeight() - (this.y1 * d0)), (int) (this.width * d0), (int) (this.height * d0)); super.renderList(p_238478_1_, p_238478_2_, p_238478_3_, p_238478_4_, p_238478_5_, p_238478_6_); RenderSystem.disableScissor(); } @@ -70,15 +70,15 @@ public class ConfigScreenList extends ExtendedList { } @Override - protected int getScrollbarPositionX() { - return left + this.width - 6; + protected int getScrollbarPosition() { + return x0 + this.width - 6; } public void tick() { for(int i = 0; i < getItemCount(); ++i) { int top = this.getRowTop(i); int bot = top + itemHeight; - if (bot >= this.top && top <= this.bottom) + if (bot >= this.y0 && top <= this.y1) this.getEntry(i).tick(); } @@ -128,7 +128,7 @@ public class ConfigScreenList extends ExtendedList { protected String unit = null; public LabeledEntry(String label) { - this.label = new TextStencilElement(Minecraft.getInstance().fontRenderer, label); + this.label = new TextStencilElement(Minecraft.getInstance().font, label); this.label.withElementRenderer((ms, width, height, alpha) -> UIRenderHelper.angledGradient(ms, 0, 0, height / 2, height, width, Theme.p(Theme.Key.TEXT_ACCENT_STRONG))); labelTooltip = new ArrayList<>(); } @@ -138,12 +138,12 @@ public class ConfigScreenList extends ExtendedList { UIRenderHelper.streak(ms, 0, x - 10, y + height / 2, height - 6, width / 8 * 7, 0xdd_000000); UIRenderHelper.streak(ms, 180, x + (int) (width * 1.35f) + 10, y + height / 2, height - 6, width / 8 * 7, 0xdd_000000); IFormattableTextComponent component = label.getComponent(); - FontRenderer font = Minecraft.getInstance().fontRenderer; - if (font.getWidth(component) > getLabelWidth(width) - 10) { - label.withText(font.trimToWidth(component, getLabelWidth(width) - 15).getString() + "..."); + FontRenderer font = Minecraft.getInstance().font; + if (font.width(component) > getLabelWidth(width) - 10) { + label.withText(font.substrByWidth(component, getLabelWidth(width) - 15).getString() + "..."); } if (unit != null) { - int unitWidth = font.getStringWidth(unit); + int unitWidth = font.width(unit); font.draw(ms, unit, x + getLabelWidth(width) - unitWidth - 5, y + height / 2 + 2, Theme.i(Theme.Key.TEXT_DARKER)); label.at(x + 10, y + height / 2 - 10, 0).render(ms); } else { @@ -157,11 +157,11 @@ public class ConfigScreenList extends ExtendedList { return; GL11.glDisable(GL11.GL_SCISSOR_TEST); - Screen screen = Minecraft.getInstance().currentScreen; - ms.push(); + Screen screen = Minecraft.getInstance().screen; + ms.pushPose(); ms.translate(0, 0, 400); GuiUtils.drawHoveringText(ms, tooltip, mouseX, mouseY, screen.width, screen.height, 300, font); - ms.pop(); + ms.popPose(); GL11.glEnable(GL11.GL_SCISSOR_TEST); } } diff --git a/src/main/java/com/simibubi/create/foundation/config/ui/ConfigTextField.java b/src/main/java/com/simibubi/create/foundation/config/ui/ConfigTextField.java index efa5d886d..e00b8638a 100644 --- a/src/main/java/com/simibubi/create/foundation/config/ui/ConfigTextField.java +++ b/src/main/java/com/simibubi/create/foundation/config/ui/ConfigTextField.java @@ -16,8 +16,8 @@ public class ConfigTextField extends TextFieldWidget { } @Override - public void setFocused2(boolean focus) { - super.setFocused2(focus); + public void setFocus(boolean focus) { + super.setFocus(focus); if (!focus) { if (ConfigScreenList.currentText == this) @@ -27,7 +27,7 @@ public class ConfigTextField extends TextFieldWidget { } if (ConfigScreenList.currentText != null && ConfigScreenList.currentText != this) - ConfigScreenList.currentText.setFocused2(false); + ConfigScreenList.currentText.setFocus(false); ConfigScreenList.currentText = this; } diff --git a/src/main/java/com/simibubi/create/foundation/config/ui/OpenCreateMenuButton.java b/src/main/java/com/simibubi/create/foundation/config/ui/OpenCreateMenuButton.java index 6d12dc3f8..a1f5ed7b2 100644 --- a/src/main/java/com/simibubi/create/foundation/config/ui/OpenCreateMenuButton.java +++ b/src/main/java/com/simibubi/create/foundation/config/ui/OpenCreateMenuButton.java @@ -34,18 +34,18 @@ public class OpenCreateMenuButton extends Button { @Override public void render(MatrixStack mstack, int mouseX, int mouseY, float pticks) { super.render(mstack, mouseX, mouseY, pticks); - Minecraft.getInstance().getItemRenderer().renderItemIntoGUI(icon, x + 2, y + 2); + Minecraft.getInstance().getItemRenderer().renderGuiItem(icon, x + 2, y + 2); } public static void click(Button b) { - ScreenOpener.open(new CreateMainMenuScreen(Minecraft.getInstance().currentScreen)); + ScreenOpener.open(new CreateMainMenuScreen(Minecraft.getInstance().screen)); } public static class SingleMenuRow { public final String left, right; public SingleMenuRow(String left, String right) { - this.left = I18n.format(left); - this.right = I18n.format(right); + this.left = I18n.get(left); + this.right = I18n.get(right); } public SingleMenuRow(String center) { this(center, center); diff --git a/src/main/java/com/simibubi/create/foundation/config/ui/SubMenuConfigScreen.java b/src/main/java/com/simibubi/create/foundation/config/ui/SubMenuConfigScreen.java index 1dd1156b5..639de55c8 100644 --- a/src/main/java/com/simibubi/create/foundation/config/ui/SubMenuConfigScreen.java +++ b/src/main/java/com/simibubi/create/foundation/config/ui/SubMenuConfigScreen.java @@ -166,7 +166,7 @@ public class SubMenuConfigScreen extends ConfigScreen { .withCallback((x, y) -> new ConfirmationScreen() .centered() - .withText(ITextProperties.plain("Resetting all settings of the " + type.toString() + " config. Are you sure?")) + .withText(ITextProperties.of("Resetting all settings of the " + type.toString() + " config. Are you sure?")) .withAction(success -> { if (success) resetConfig(spec.getValues()); @@ -186,7 +186,7 @@ public class SubMenuConfigScreen extends ConfigScreen { new ConfirmationScreen() .centered() - .withText(ITextProperties.plain("Saving " + changes.size() + " changed value" + (changes.size() != 1 ? "s" : "") + "")) + .withText(ITextProperties.of("Saving " + changes.size() + " changed value" + (changes.size() != 1 ? "s" : "") + "")) .withAction(success -> { if (success) saveChanges(); @@ -205,7 +205,7 @@ public class SubMenuConfigScreen extends ConfigScreen { new ConfirmationScreen() .centered() - .withText(ITextProperties.plain("Discarding " + changes.size() + " unsaved change" + (changes.size() != 1 ? "s" : "") + "")) + .withText(ITextProperties.of("Discarding " + changes.size() + " unsaved change" + (changes.size() != 1 ? "s" : "") + "")) .withAction(success -> { if (success) clearChanges(); @@ -227,7 +227,7 @@ public class SubMenuConfigScreen extends ConfigScreen { widgets.add(discardChanges); widgets.add(goBack); - list = new ConfigScreenList(client, listWidth, height - 60, 45, height - 15, 40); + list = new ConfigScreenList(minecraft, listWidth, height - 60, 45, height - 15, 40); list.setLeftPos(this.width / 2 - list.getWidth() / 2); children.add(list); @@ -284,11 +284,11 @@ public class SubMenuConfigScreen extends ConfigScreen { //extras for server configs if (type != ModConfig.Type.SERVER) return; - if (client.isSingleplayer()) + if (minecraft.hasSingleplayerServer()) return; list.isForServer = true; - boolean canEdit = client != null && client.player != null && client.player.hasPermissionLevel(2); + boolean canEdit = minecraft != null && minecraft.player != null && minecraft.player.hasPermissions(2); Couple red = Theme.p(Theme.Key.BUTTON_FAIL); Couple green = Theme.p(Theme.Key.BUTTON_SUCCESS); @@ -306,13 +306,13 @@ public class SubMenuConfigScreen extends ConfigScreen { stencil.withStencilRenderer((ms, w, h, alpha) -> AllIcons.I_CONFIG_LOCKED.draw(ms, 0, 0)); stencil.withElementRenderer((ms, w, h, alpha) -> UIRenderHelper.angledGradient(ms, 90, 8, 0, 16, 16, red)); serverLocked.withBorderColors(red); - serverLocked.getToolTip().add(new StringTextComponent("Locked").formatted(TextFormatting.BOLD)); + serverLocked.getToolTip().add(new StringTextComponent("Locked").withStyle(TextFormatting.BOLD)); serverLocked.getToolTip().addAll(TooltipHelper.cutStringTextComponent("You do not have enough permissions to edit the server config. You can still look at the current values here though.", TextFormatting.GRAY, TextFormatting.GRAY)); } else { stencil.withStencilRenderer((ms, w, h, alpha) -> AllIcons.I_CONFIG_UNLOCKED.draw(ms, 0, 0)); stencil.withElementRenderer((ms, w, h, alpha) -> UIRenderHelper.angledGradient(ms, 90, 8, 0, 16, 16, green)); serverLocked.withBorderColors(green); - serverLocked.getToolTip().add(new StringTextComponent("Unlocked").formatted(TextFormatting.BOLD)); + serverLocked.getToolTip().add(new StringTextComponent("Unlocked").withStyle(TextFormatting.BOLD)); serverLocked.getToolTip().addAll(TooltipHelper.cutStringTextComponent("You have enough permissions to edit the server config. Changes you make here will be synced with the server when you save them.", TextFormatting.GRAY, TextFormatting.GRAY)); } @@ -324,7 +324,7 @@ public class SubMenuConfigScreen extends ConfigScreen { super.renderWindow(ms, mouseX, mouseY, partialTicks); int x = width / 2; - drawCenteredString(ms, client.fontRenderer, ConfigScreen.modID + " > " + type.toString().toLowerCase(Locale.ROOT) + " > " + title, x, 15, Theme.i(Theme.Key.TEXT)); + drawCenteredString(ms, minecraft.font, ConfigScreen.modID + " > " + type.toString().toLowerCase(Locale.ROOT) + " > " + title, x, 15, Theme.i(Theme.Key.TEXT)); list.render(ms, mouseX, mouseY, partialTicks); } @@ -402,7 +402,7 @@ public class SubMenuConfigScreen extends ConfigScreen { public void showLeavingPrompt(Consumer action) { new ConfirmationScreen().centered() - .addText(ITextProperties.plain("Leaving with " + changes.size() + " unsaved change" + .addText(ITextProperties.of("Leaving with " + changes.size() + " unsaved change" + (changes.size() != 1 ? "s" : "") + " for this config")) .withThreeActions(action) .open(this); diff --git a/src/main/java/com/simibubi/create/foundation/config/ui/entries/EnumEntry.java b/src/main/java/com/simibubi/create/foundation/config/ui/entries/EnumEntry.java index da4f56137..2c82b98bf 100644 --- a/src/main/java/com/simibubi/create/foundation/config/ui/entries/EnumEntry.java +++ b/src/main/java/com/simibubi/create/foundation/config/ui/entries/EnumEntry.java @@ -25,7 +25,7 @@ public class EnumEntry extends ValueEntry> { public EnumEntry(String label, ForgeConfigSpec.ConfigValue> value, ForgeConfigSpec.ValueSpec spec) { super(label, value, spec); - valueText = new TextStencilElement(Minecraft.getInstance().fontRenderer, "YEP").centered(true, true); + valueText = new TextStencilElement(Minecraft.getInstance().font, "YEP").centered(true, true); valueText.withElementRenderer((ms, width, height, alpha) -> UIRenderHelper.angledGradient(ms, 0, 0, height / 2, height, width, Theme.p(Theme.Key.TEXT))); diff --git a/src/main/java/com/simibubi/create/foundation/config/ui/entries/NumberEntry.java b/src/main/java/com/simibubi/create/foundation/config/ui/entries/NumberEntry.java index 315d147df..79b5c7a75 100644 --- a/src/main/java/com/simibubi/create/foundation/config/ui/entries/NumberEntry.java +++ b/src/main/java/com/simibubi/create/foundation/config/ui/entries/NumberEntry.java @@ -38,8 +38,8 @@ public abstract class NumberEntry extends ValueEntry { public NumberEntry(String label, ForgeConfigSpec.ConfigValue value, ForgeConfigSpec.ValueSpec spec) { super(label, value, spec); - textField = new ConfigTextField(Minecraft.getInstance().fontRenderer, 0, 0, 200, 20, unit); - textField.setText(String.valueOf(getValue())); + textField = new ConfigTextField(Minecraft.getInstance().font, 0, 0, 200, 20, unit); + textField.setValue(String.valueOf(getValue())); textField.setTextColor(Theme.i(Theme.Key.TEXT)); Object range = spec.getRange(); @@ -51,18 +51,18 @@ public abstract class NumberEntry extends ValueEntry { T min = (T) minField.get(range); T max = (T) maxField.get(range); - FontRenderer font = Minecraft.getInstance().fontRenderer; + FontRenderer font = Minecraft.getInstance().font; if (min.doubleValue() > getTypeMin().doubleValue()) { StringTextComponent t = new StringTextComponent(formatBound(min) + " < "); minText = new TextStencilElement(font, t).centered(true, false); minText.withElementRenderer((ms, width, height, alpha) -> UIRenderHelper.angledGradient(ms, 0 ,0, height/2, height, width, Theme.p(Theme.Key.TEXT_DARKER))); - minOffset = font.getWidth(t); + minOffset = font.width(t); } if (max.doubleValue() < getTypeMax().doubleValue()) { StringTextComponent t = new StringTextComponent(" < " + formatBound(max)); maxText = new TextStencilElement(font, t).centered(true, false); maxText.withElementRenderer((ms, width, height, alpha) -> UIRenderHelper.angledGradient(ms, 0 ,0, height/2, height, width, Theme.p(Theme.Key.TEXT_DARKER))); - maxOffset = font.getWidth(t); + maxOffset = font.width(t); } } catch (NoSuchFieldException | IllegalAccessException | ClassCastException | NullPointerException ignored) { @@ -101,17 +101,17 @@ public abstract class NumberEntry extends ValueEntry { @Override protected void setEditable(boolean b) { super.setEditable(b); - textField.setEnabled(b); + textField.setEditable(b); } @Override public void onValueChange(T newValue) { super.onValueChange(newValue); String newText = String.valueOf(newValue); - if (textField.getText().equals(newText)) + if (textField.getValue().equals(newText)) return; - textField.setText(newText); + textField.setValue(newText); } @Override @@ -133,13 +133,13 @@ public abstract class NumberEntry extends ValueEntry { if (minText != null) minText .at(textField.x - minOffset, textField.y, 0) - .withBounds(minOffset, textField.unusedGetHeight()) + .withBounds(minOffset, textField.getHeight()) .render(ms); if (maxText != null) maxText .at(textField.x + textField.getWidth(), textField.y, 0) - .withBounds(maxOffset, textField.unusedGetHeight()) + .withBounds(maxOffset, textField.getHeight()) .render(ms); } diff --git a/src/main/java/com/simibubi/create/foundation/config/ui/entries/ValueEntry.java b/src/main/java/com/simibubi/create/foundation/config/ui/entries/ValueEntry.java index 52a0d3fa1..1a0d05cdf 100644 --- a/src/main/java/com/simibubi/create/foundation/config/ui/entries/ValueEntry.java +++ b/src/main/java/com/simibubi/create/foundation/config/ui/entries/ValueEntry.java @@ -27,7 +27,7 @@ import net.minecraftforge.common.ForgeConfigSpec; public class ValueEntry extends ConfigScreenList.LabeledEntry { - protected static final IFormattableTextComponent modComponent = new StringTextComponent("* ").formatted(TextFormatting.BOLD, TextFormatting.DARK_BLUE).append(StringTextComponent.EMPTY.copy().formatted(TextFormatting.RESET)); + protected static final IFormattableTextComponent modComponent = new StringTextComponent("* ").withStyle(TextFormatting.BOLD, TextFormatting.DARK_BLUE).append(StringTextComponent.EMPTY.plainCopy().withStyle(TextFormatting.RESET)); protected static final int resetWidth = 28;//including 6px offset on either side public static final Pattern unitPattern = Pattern.compile("\\[(in .*)]"); @@ -54,7 +54,7 @@ public class ValueEntry extends ConfigScreenList.LabeledEntry { listeners.add(resetButton); List path = value.getPath(); - labelTooltip.add(new StringTextComponent(label).formatted(TextFormatting.WHITE)); + labelTooltip.add(new StringTextComponent(label).withStyle(TextFormatting.WHITE)); String comment = spec.getComment(); if (comment == null || comment.isEmpty()) return; @@ -85,7 +85,7 @@ public class ValueEntry extends ConfigScreenList.LabeledEntry { .flatMap(stc -> TooltipHelper.cutTextComponent(stc, TextFormatting.GRAY, TextFormatting.GRAY) .stream()) .collect(Collectors.toList())); - labelTooltip.add(new StringTextComponent(ConfigScreen.modID + ":" + path.get(path.size() - 1)).formatted(TextFormatting.DARK_GRAY)); + labelTooltip.add(new StringTextComponent(ConfigScreen.modID + ":" + path.get(path.size() - 1)).withStyle(TextFormatting.DARK_GRAY)); } @Override @@ -105,7 +105,7 @@ public class ValueEntry extends ConfigScreenList.LabeledEntry { public void render(MatrixStack ms, int index, int y, int x, int width, int height, int mouseX, int mouseY, boolean p_230432_9_, float partialTicks) { if (isCurrentValueChanged()) { IFormattableTextComponent original = label.getComponent(); - IFormattableTextComponent changed = modComponent.copy().append(original); + IFormattableTextComponent changed = modComponent.plainCopy().append(original); label.withText(changed); super.render(ms, index, y, x, width, height, mouseX, mouseY, p_230432_9_, partialTicks); label.withText(original); diff --git a/src/main/java/com/simibubi/create/foundation/data/AssetLookup.java b/src/main/java/com/simibubi/create/foundation/data/AssetLookup.java index 78f8b11df..18977afe5 100644 --- a/src/main/java/com/simibubi/create/foundation/data/AssetLookup.java +++ b/src/main/java/com/simibubi/create/foundation/data/AssetLookup.java @@ -79,7 +79,7 @@ public class AssetLookup { public static Function forPowered(DataGenContext ctx, RegistrateBlockstateProvider prov) { - return state -> state.get(BlockStateProperties.POWERED) ? partialBaseModel(ctx, prov, "powered") + return state -> state.getValue(BlockStateProperties.POWERED) ? partialBaseModel(ctx, prov, "powered") : partialBaseModel(ctx, prov); } @@ -87,7 +87,7 @@ public class AssetLookup { RegistrateBlockstateProvider prov, String path) { return state -> prov.models() .getExistingFile( - prov.modLoc("block/" + path + (state.get(BlockStateProperties.POWERED) ? "_powered" : ""))); + prov.modLoc("block/" + path + (state.getValue(BlockStateProperties.POWERED) ? "_powered" : ""))); } public static Function withIndicator(DataGenContext ctx, @@ -95,7 +95,7 @@ public class AssetLookup { return state -> { ResourceLocation baseModel = baseModelFunc.apply(state) .getLocation(); - Integer integer = state.get(property); + Integer integer = state.getValue(property); return prov.models() .withExistingParent(ctx.getName() + "_" + integer, baseModel) .texture("indicator", "block/indicator/" + integer); diff --git a/src/main/java/com/simibubi/create/foundation/data/BlockStateGen.java b/src/main/java/com/simibubi/create/foundation/data/BlockStateGen.java index 5661543b3..b3bb67a33 100644 --- a/src/main/java/com/simibubi/create/foundation/data/BlockStateGen.java +++ b/src/main/java/com/simibubi/create/foundation/data/BlockStateGen.java @@ -87,7 +87,7 @@ public class BlockStateGen { public static

    NonNullUnaryOperator> oxidizedBlockstate() { return b -> b.blockstate((ctx, prov) -> prov.getVariantBuilder(ctx.getEntry()) .forAllStates(state -> { - String name = AssetLookup.getOxidizedModel(ctx.getName(), state.get(OxidizingBlock.OXIDIZATION)); + String name = AssetLookup.getOxidizedModel(ctx.getName(), state.getValue(OxidizingBlock.OXIDIZATION)); return ConfiguredModel.builder() .modelFile(prov.models() .cubeAll(name, prov.modLoc(name))) @@ -108,14 +108,14 @@ public class BlockStateGen { RegistrateBlockstateProvider prov, Function modelFunc) { prov.getVariantBuilder(ctx.getEntry()) .forAllStatesExcept(state -> { - Direction dir = state.get(BlockStateProperties.FACING); + Direction dir = state.getValue(BlockStateProperties.FACING); return ConfiguredModel.builder() .modelFile(modelFunc.apply(state)) .rotationX(dir == Direction.DOWN ? 180 : dir.getAxis() .isHorizontal() ? 90 : 0) .rotationY(dir.getAxis() - .isVertical() ? 0 : (((int) dir.getHorizontalAngle()) + 180) % 360) + .isVertical() ? 0 : (((int) dir.toYRot()) + 180) % 360) .build(); }, BlockStateProperties.WATERLOGGED); } @@ -129,7 +129,7 @@ public class BlockStateGen { Function modelFunc, boolean uvLock) { prov.getVariantBuilder(ctx.getEntry()) .forAllStatesExcept(state -> { - Axis axis = state.get(BlockStateProperties.AXIS); + Axis axis = state.getValue(BlockStateProperties.AXIS); return ConfiguredModel.builder() .modelFile(modelFunc.apply(state)) .uvLock(uvLock) @@ -153,7 +153,7 @@ public class BlockStateGen { RegistrateBlockstateProvider prov, Function modelFunc) { prov.getVariantBuilder(ctx.getEntry()) .forAllStates(state -> { - Axis axis = state.get(BlockStateProperties.HORIZONTAL_AXIS); + Axis axis = state.getValue(BlockStateProperties.HORIZONTAL_AXIS); return ConfiguredModel.builder() .modelFile(modelFunc.apply(state)) .rotationY(axis == Axis.X ? 90 : 0) @@ -166,13 +166,13 @@ public class BlockStateGen { prov.getVariantBuilder(ctx.getEntry()) .forAllStates(state -> { - boolean alongFirst = state.get(DirectionalAxisKineticBlock.AXIS_ALONG_FIRST_COORDINATE); - Direction direction = state.get(DirectionalAxisKineticBlock.FACING); + boolean alongFirst = state.getValue(DirectionalAxisKineticBlock.AXIS_ALONG_FIRST_COORDINATE); + Direction direction = state.getValue(DirectionalAxisKineticBlock.FACING); boolean vertical = direction.getAxis() .isHorizontal() && (direction.getAxis() == Axis.X) == alongFirst; int xRot = direction == Direction.DOWN ? 270 : direction == Direction.UP ? 90 : 0; int yRot = direction.getAxis() - .isVertical() ? alongFirst ? 0 : 90 : (int) direction.getHorizontalAngle(); + .isVertical() ? alongFirst ? 0 : 90 : (int) direction.toYRot(); return ConfiguredModel.builder() .modelFile(modelFunc.apply(state, vertical)) @@ -188,8 +188,8 @@ public class BlockStateGen { .forAllStates(state -> ConfiguredModel.builder() .modelFile(modelFunc.apply(state)) .rotationX(90) - .rotationY(((int) state.get(BlockStateProperties.HORIZONTAL_FACING) - .getHorizontalAngle() + 180) % 360) + .rotationY(((int) state.getValue(BlockStateProperties.HORIZONTAL_FACING) + .toYRot() + 180) % 360) .build()); } @@ -209,17 +209,17 @@ public class BlockStateGen { ModelFile top, ModelFile covered) { prov.getVariantBuilder(ctx.getEntry()) .forAllStates(state -> ConfiguredModel.builder() - .modelFile(state.get(PavedBlock.COVERED) ? covered : top) + .modelFile(state.getValue(PavedBlock.COVERED) ? covered : top) .build()); } public static NonNullBiConsumer, RegistrateBlockstateProvider> cartAssembler() { return (c, p) -> p.getVariantBuilder(c.get()) .forAllStates(state -> { - CartAssembleRailType type = state.get(CartAssemblerBlock.RAIL_TYPE); - Boolean powered = state.get(CartAssemblerBlock.POWERED); - Boolean backwards = state.get(CartAssemblerBlock.BACKWARDS); - RailShape shape = state.get(CartAssemblerBlock.RAIL_SHAPE); + CartAssembleRailType type = state.getValue(CartAssemblerBlock.RAIL_TYPE); + Boolean powered = state.getValue(CartAssemblerBlock.POWERED); + Boolean backwards = state.getValue(CartAssemblerBlock.BACKWARDS); + RailShape shape = state.getValue(CartAssemblerBlock.RAIL_SHAPE); int yRotation = shape == RailShape.EAST_WEST ? 270 : 0; if (backwards) @@ -228,7 +228,7 @@ public class BlockStateGen { return ConfiguredModel.builder() .modelFile(p.models() .getExistingFile(p.modLoc( - "block/" + c.getName() + "/block_" + type.getString() + (powered ? "_powered" : "")))) + "block/" + c.getName() + "/block_" + type.getSerializedName() + (powered ? "_powered" : "")))) .rotationY(yRotation % 360) .build(); }); @@ -247,9 +247,9 @@ public class BlockStateGen { return ConfiguredModel.builder() .modelFile(p.models() .getExistingFile(p.modLoc( - "block/" + c.getName() + "/block" + (state.get(ReinforcedRailBlock.CONNECTS_S) ? "_s" : "") - + (state.get(ReinforcedRailBlock.CONNECTS_N) ? "_n" : "")))) - .rotationY(state.get(ReinforcedRailBlock.RAIL_SHAPE) == RailShape.EAST_WEST ? 90 : 0) + "block/" + c.getName() + "/block" + (state.getValue(ReinforcedRailBlock.CONNECTS_S) ? "_s" : "") + + (state.getValue(ReinforcedRailBlock.CONNECTS_N) ? "_n" : "")))) + .rotationY(state.getValue(ReinforcedRailBlock.RAIL_SHAPE) == RailShape.EAST_WEST ? 90 : 0) .build(); }); } @@ -272,8 +272,8 @@ public class BlockStateGen { .texture("top", isTopSticky ? top_sticky : top)); BiFunction modelFunc = (t, b) -> models.get((t ? 0 : 2) + (b ? 0 : 1)); - axisBlock(c, p, state -> modelFunc.apply(state.get(LinearChassisBlock.STICKY_TOP), - state.get(LinearChassisBlock.STICKY_BOTTOM))); + axisBlock(c, p, state -> modelFunc.apply(state.getValue(LinearChassisBlock.STICKY_TOP), + state.getValue(LinearChassisBlock.STICKY_BOTTOM))); }; } @@ -290,14 +290,14 @@ public class BlockStateGen { Vector stickyFaces = new Vector<>(3); for (Axis axis : Iterate.axes) { - String suffix = "side_" + axis.getString(); + String suffix = "side_" + axis.getSerializedName(); faces.add(p.models() .withExistingParent("block/" + c.getName() + "_" + suffix, p.modLoc(templateModelPath + "/" + suffix)) .texture("side", side)); } for (Axis axis : Iterate.axes) { - String suffix = "side_" + axis.getString(); + String suffix = "side_" + axis.getSerializedName(); stickyFaces.add(p.models() .withExistingParent("block/" + c.getName() + "_" + suffix + "_sticky", p.modLoc(templateModelPath + "/" + suffix)) @@ -306,8 +306,8 @@ public class BlockStateGen { MultiPartBlockStateBuilder builder = p.getMultipartBuilder(c.get()); BlockState propertyGetter = c.get() - .getDefaultState() - .with(RadialChassisBlock.AXIS, Axis.Y); + .defaultBlockState() + .setValue(RadialChassisBlock.AXIS, Axis.Y); for (Axis axis : Iterate.axes) builder.part() @@ -321,7 +321,7 @@ public class BlockStateGen { for (Direction face : Iterate.horizontalDirections) { for (boolean sticky : Iterate.trueAndFalse) { for (Axis axis : Iterate.axes) { - int horizontalAngle = (int) (face.getHorizontalAngle()); + int horizontalAngle = (int) (face.toYRot()); int index = axis.ordinal(); int xRot = 0; int yRot = 0; @@ -367,7 +367,7 @@ public class BlockStateGen { builder.part() .modelFile(flatPass ? flat : open) .rotationX(verticalAngle) - .rotationY((int) (d.getHorizontalAngle() + (d.getAxis() + .rotationY((int) (d.toYRot() + (d.getAxis() .isVertical() ? 90 : 0)) % 360) .addModel() .condition(EncasedPipeBlock.FACING_TO_PROPERTY_MAP.get(d), !flatPass) @@ -403,22 +403,22 @@ public class BlockStateGen { Map, ModelFile> coreModels = new HashMap<>(); for (Axis axis : Iterate.axes) - coreTemplates.put(axis, p.modLoc(path + "/core_" + axis.getString())); + coreTemplates.put(axis, p.modLoc(path + "/core_" + axis.getSerializedName())); ModelFile end = AssetLookup.partialBaseModel(c, p, "end"); for (Axis axis : Iterate.axes) { ResourceLocation parent = coreTemplates.get(axis); for (String s : orientations) { Pair key = Pair.of(s, axis); - String modelName = path + "/" + s + "_" + axis.getString(); + String modelName = path + "/" + s + "_" + axis.getSerializedName(); coreModels.put(key, p.models() .withExistingParent(modelName, parent) .element() .from(4, 4, 4) .to(12, 12, 12) - .face(Direction.getFacingFromAxis(AxisDirection.POSITIVE, axis)) + .face(Direction.get(AxisDirection.POSITIVE, axis)) .end() - .face(Direction.getFacingFromAxis(AxisDirection.NEGATIVE, axis)) + .face(Direction.get(AxisDirection.NEGATIVE, axis)) .end() .faces((d, builder) -> { Pair pair = uvs.get(s); @@ -441,9 +441,9 @@ public class BlockStateGen { builder.part() .modelFile(end) .rotationX(d == Direction.UP ? 0 : d == Direction.DOWN ? 180 : 90) - .rotationY((int) (d.getHorizontalAngle() + 180) % 360) + .rotationY((int) (d.toYRot() + 180) % 360) .addModel() - .condition(FluidPipeBlock.FACING_TO_PROPERTY_MAP.get(d), true) + .condition(FluidPipeBlock.PROPERTY_BY_DIRECTION.get(d), true) .end(); for (Axis axis : Iterate.axes) { @@ -464,8 +464,8 @@ public class BlockStateGen { private static void putPart(Map, ModelFile> coreModels, MultiPartBlockStateBuilder builder, Axis axis, String s, boolean up, boolean down, boolean left, boolean right) { - Direction positiveAxis = Direction.getFacingFromAxis(AxisDirection.POSITIVE, axis); - Map propertyMap = FluidPipeBlock.FACING_TO_PROPERTY_MAP; + Direction positiveAxis = Direction.get(AxisDirection.POSITIVE, axis); + Map propertyMap = FluidPipeBlock.PROPERTY_BY_DIRECTION; builder.part() .modelFile(coreModels.get(Pair.of(s, axis))) .addModel() diff --git a/src/main/java/com/simibubi/create/foundation/data/BuilderTransformers.java b/src/main/java/com/simibubi/create/foundation/data/BuilderTransformers.java index 799a837af..f4830ec00 100644 --- a/src/main/java/com/simibubi/create/foundation/data/BuilderTransformers.java +++ b/src/main/java/com/simibubi/create/foundation/data/BuilderTransformers.java @@ -41,13 +41,15 @@ import net.minecraft.util.ResourceLocation; import net.minecraftforge.client.model.generators.ConfiguredModel; import net.minecraftforge.client.model.generators.ModelFile; +import net.minecraft.block.AbstractBlock; + public class BuilderTransformers { public static NonNullUnaryOperator> cuckooClock() { return b -> b.initialProperties(SharedProperties::wooden) .blockstate((c, p) -> p.horizontalBlock(c.get(), p.models() .getExistingFile(p.modLoc("block/cuckoo_clock/block")))) - .addLayer(() -> RenderType::getCutoutMipped) + .addLayer(() -> RenderType::cutoutMipped) .transform(StressConfigDefaults.setImpact(1.0)) .item() .transform(ModelGen.customItemModel("cuckoo_clock", "item")); @@ -56,14 +58,14 @@ public class BuilderTransformers { public static NonNullUnaryOperator> encasedShaft(String casing, CTSpriteShiftEntry casingShift) { return builder -> builder.initialProperties(SharedProperties::stone) - .properties(Block.Properties::nonOpaque) + .properties(AbstractBlock.Properties::noOcclusion) .onRegister(CreateRegistrate.connectedTextures(new EncasedCTBehaviour(casingShift))) .onRegister(CreateRegistrate.casingConnectivity( - (block, cc) -> cc.make(block, casingShift, (s, f) -> f.getAxis() != s.get(EncasedShaftBlock.AXIS)))) + (block, cc) -> cc.make(block, casingShift, (s, f) -> f.getAxis() != s.getValue(EncasedShaftBlock.AXIS)))) .blockstate((c, p) -> axisBlock(c, p, blockState -> p.models() .getExistingFile(p.modLoc("block/encased_shaft/block_" + casing)), true)) .transform(StressConfigDefaults.setNoImpact()) - .loot((p, b) -> p.registerDropping(b, AllBlocks.SHAFT.get())) + .loot((p, b) -> p.dropOther(b, AllBlocks.SHAFT.get())) .item() .model(AssetLookup.customBlockItemModel("encased_shaft", "item_" + casing)) .build(); @@ -73,7 +75,7 @@ public class BuilderTransformers { @Nullable DyeColor color) { return b -> b.initialProperties(SharedProperties::softMetal) .blockstate((c, p) -> { - String variant = color == null ? "copper" : color.getString(); + String variant = color == null ? "copper" : color.getSerializedName(); p.directionalBlock(c.get(), p.models() .withExistingParent(variant + "_valve_handle", p.modLoc("block/valve_handle")) .texture("3", p.modLoc("block/valve_handle/valve_handle_" + variant))); @@ -97,15 +99,15 @@ public class BuilderTransformers { public static NonNullUnaryOperator> beltTunnel( String type, ResourceLocation particleTexture) { return b -> b.initialProperties(SharedProperties::stone) - .addLayer(() -> RenderType::getCutoutMipped) - .properties(Block.Properties::nonOpaque) + .addLayer(() -> RenderType::cutoutMipped) + .properties(AbstractBlock.Properties::noOcclusion) .blockstate((c, p) -> p.getVariantBuilder(c.get()) .forAllStates(state -> { String id = "block/" + type + "_tunnel"; - Shape shape = state.get(BeltTunnelBlock.SHAPE); + Shape shape = state.getValue(BeltTunnelBlock.SHAPE); if (shape == BeltTunnelBlock.Shape.CLOSED) shape = BeltTunnelBlock.Shape.STRAIGHT; - String shapeName = shape.getString(); + String shapeName = shape.getSerializedName(); return ConfiguredModel.builder() .modelFile(p.models() .withExistingParent(id + "/" + shapeName, p.modLoc("block/belt_tunnel/" + shapeName)) @@ -113,7 +115,7 @@ public class BuilderTransformers { .texture("2", p.modLoc(id)) .texture("3", p.modLoc(id + "_top_window")) .texture("particle", particleTexture)) - .rotationY(state.get(BeltTunnelBlock.HORIZONTAL_AXIS) == Axis.X ? 0 : 90) + .rotationY(state.getValue(BeltTunnelBlock.HORIZONTAL_AXIS) == Axis.X ? 0 : 90) .build(); })) .item(BeltTunnelItem::new) @@ -129,12 +131,12 @@ public class BuilderTransformers { public static NonNullUnaryOperator> mechanicalPiston(PistonType type) { return b -> b.initialProperties(SharedProperties::stone) - .properties(p -> p.nonOpaque()) + .properties(p -> p.noOcclusion()) .blockstate(new MechanicalPistonGenerator(type)::generate) - .addLayer(() -> RenderType::getCutoutMipped) + .addLayer(() -> RenderType::cutoutMipped) .transform(StressConfigDefaults.setImpact(4.0)) .item() - .transform(ModelGen.customItemModel("mechanical_piston", type.getString(), "item")); + .transform(ModelGen.customItemModel("mechanical_piston", type.getSerializedName(), "item")); } public static NonNullUnaryOperator> bearing(String prefix, @@ -147,7 +149,7 @@ public class BuilderTransformers { ResourceLocation sideTextureLocation = Create.asResource("block/" + prefix + "_bearing_side"); ResourceLocation backTextureLocation = Create.asResource("block/" + backTexture); return b -> b.initialProperties(SharedProperties::stone) - .properties(p -> p.nonOpaque()) + .properties(p -> p.noOcclusion()) .blockstate((c, p) -> p.directionalBlock(c.get(), p.models() .withExistingParent(c.getName(), baseBlockModelLocation) .texture("side", sideTextureLocation) @@ -183,8 +185,8 @@ public class BuilderTransformers { String variant = "single"; int yRot = 0; - if (state.get(CrateBlock.DOUBLE)) { - Direction direction = state.get(CrateBlock.FACING); + if (state.getValue(CrateBlock.DOUBLE)) { + Direction direction = state.getValue(CrateBlock.FACING); if (direction.getAxis() == Axis.X) yRot = 90; @@ -220,13 +222,13 @@ public class BuilderTransformers { public static NonNullUnaryOperator> bell() { return b -> b.initialProperties(SharedProperties::softMetal) - .properties(p -> p.nonOpaque() + .properties(p -> p.noOcclusion() .sound(SoundType.ANVIL)) - .addLayer(() -> RenderType::getCutoutMipped) + .addLayer(() -> RenderType::cutoutMipped) .tag(AllBlockTags.BRITTLE.tag) .blockstate((c, p) -> p.horizontalBlock(c.getEntry(), state -> { - String variant = state.get(BlockStateProperties.BELL_ATTACHMENT) - .getString(); + String variant = state.getValue(BlockStateProperties.BELL_ATTACHMENT) + .getSerializedName(); return p.models() .withExistingParent(c.getName() + "_" + variant, p.modLoc("block/bell_base/block_" + variant)); })) diff --git a/src/main/java/com/simibubi/create/foundation/data/DirectionalAxisBlockStateGen.java b/src/main/java/com/simibubi/create/foundation/data/DirectionalAxisBlockStateGen.java index 64512db71..ec321bd6e 100644 --- a/src/main/java/com/simibubi/create/foundation/data/DirectionalAxisBlockStateGen.java +++ b/src/main/java/com/simibubi/create/foundation/data/DirectionalAxisBlockStateGen.java @@ -14,8 +14,8 @@ public abstract class DirectionalAxisBlockStateGen extends SpecialBlockStateGen @Override protected int getXRotation(BlockState state) { - Direction direction = state.get(GaugeBlock.FACING); - boolean alongFirst = state.get(GaugeBlock.AXIS_ALONG_FIRST_COORDINATE); + Direction direction = state.getValue(GaugeBlock.FACING); + boolean alongFirst = state.getValue(GaugeBlock.AXIS_ALONG_FIRST_COORDINATE); if (direction == Direction.DOWN) return 180; @@ -29,8 +29,8 @@ public abstract class DirectionalAxisBlockStateGen extends SpecialBlockStateGen @Override protected int getYRotation(BlockState state) { - Direction direction = state.get(GaugeBlock.FACING); - boolean alongFirst = state.get(GaugeBlock.AXIS_ALONG_FIRST_COORDINATE); + Direction direction = state.getValue(GaugeBlock.FACING); + boolean alongFirst = state.getValue(GaugeBlock.AXIS_ALONG_FIRST_COORDINATE); if (direction.getAxis() .isVertical()) @@ -45,7 +45,7 @@ public abstract class DirectionalAxisBlockStateGen extends SpecialBlockStateGen @Override public ModelFile getModel(DataGenContext ctx, RegistrateBlockstateProvider prov, BlockState state) { - boolean vertical = state.get(GaugeBlock.FACING) + boolean vertical = state.getValue(GaugeBlock.FACING) .getAxis() .isVertical(); String partial = vertical ? "" : "_wall"; diff --git a/src/main/java/com/simibubi/create/foundation/data/LangMerger.java b/src/main/java/com/simibubi/create/foundation/data/LangMerger.java index 1f92db23c..0b71d5383 100644 --- a/src/main/java/com/simibubi/create/foundation/data/LangMerger.java +++ b/src/main/java/com/simibubi/create/foundation/data/LangMerger.java @@ -76,7 +76,7 @@ public class LangMerger implements IDataProvider { } @Override - public void act(DirectoryCache cache) throws IOException { + public void run(DirectoryCache cache) throws IOException { Path path = this.gen.getOutputFolder() .resolve("assets/" + Create.ID + "/lang/" + "en_us.json"); @@ -232,9 +232,9 @@ public class LangMerger implements IDataProvider { String data = createString(dataIn, missingKeys); // data = JavaUnicodeEscaper.outsideOf(0, 0x7f) // .translate(data); - String hash = IDataProvider.HASH_FUNCTION.hashUnencodedChars(data) + String hash = IDataProvider.SHA1.hashUnencodedChars(data) .toString(); - if (!Objects.equals(cache.getPreviousHash(target), hash) || !Files.exists(target)) { + if (!Objects.equals(cache.getHash(target), hash) || !Files.exists(target)) { Files.createDirectories(target.getParent()); try (BufferedWriter bufferedwriter = Files.newBufferedWriter(target)) { @@ -244,7 +244,7 @@ public class LangMerger implements IDataProvider { } } - cache.recordHash(target, hash); + cache.putNew(target, hash); } protected String createString(List data, int missingKeys) { diff --git a/src/main/java/com/simibubi/create/foundation/data/NamedTag.java b/src/main/java/com/simibubi/create/foundation/data/NamedTag.java index 066552663..000ff1b05 100644 --- a/src/main/java/com/simibubi/create/foundation/data/NamedTag.java +++ b/src/main/java/com/simibubi/create/foundation/data/NamedTag.java @@ -22,7 +22,7 @@ public class NamedTag implements ITag.INamedTag { } @Override - public ResourceLocation getId() { + public ResourceLocation getName() { return id; } @@ -34,9 +34,9 @@ public class NamedTag implements ITag.INamedTag { } @Override - public List values() { + public List getValues() { if (tag == null) return Collections.emptyList(); - return tag.values(); + return tag.getValues(); } } diff --git a/src/main/java/com/simibubi/create/foundation/data/SharedProperties.java b/src/main/java/com/simibubi/create/foundation/data/SharedProperties.java index f685c4368..c65837850 100644 --- a/src/main/java/com/simibubi/create/foundation/data/SharedProperties.java +++ b/src/main/java/com/simibubi/create/foundation/data/SharedProperties.java @@ -10,7 +10,7 @@ import net.minecraft.block.material.PushReaction; @MethodsReturnNonnullByDefault public class SharedProperties { public static Material beltMaterial = - new Material(MaterialColor.GRAY, false, true, true, true, false, false, PushReaction.NORMAL); + new Material(MaterialColor.COLOR_GRAY, false, true, true, true, false, false, PushReaction.NORMAL); public static Block stone() { return Blocks.ANDESITE; diff --git a/src/main/java/com/simibubi/create/foundation/data/SpecialBlockStateGen.java b/src/main/java/com/simibubi/create/foundation/data/SpecialBlockStateGen.java index 98aea3c9c..1529eac07 100644 --- a/src/main/java/com/simibubi/create/foundation/data/SpecialBlockStateGen.java +++ b/src/main/java/com/simibubi/create/foundation/data/SpecialBlockStateGen.java @@ -31,7 +31,7 @@ public abstract class SpecialBlockStateGen { if (direction.getAxis() .isVertical()) return 0; - return (int) direction.getHorizontalAngle(); + return (int) direction.toYRot(); } protected abstract int getXRotation(BlockState state); diff --git a/src/main/java/com/simibubi/create/foundation/data/WindowGen.java b/src/main/java/com/simibubi/create/foundation/data/WindowGen.java index 3aabbe3d3..8139a6f9b 100644 --- a/src/main/java/com/simibubi/create/foundation/data/WindowGen.java +++ b/src/main/java/com/simibubi/create/foundation/data/WindowGen.java @@ -44,10 +44,10 @@ public class WindowGen { private static final CreateRegistrate REGISTRATE = Create.registrate(); private static Properties glassProperties(Properties p) { - return p.allowsSpawning(WindowGen::never) - .solidBlock(WindowGen::never) - .suffocates(WindowGen::never) - .blockVision(WindowGen::never); + return p.isValidSpawn(WindowGen::never) + .isRedstoneConductor(WindowGen::never) + .isSuffocating(WindowGen::never) + .isViewBlocking(WindowGen::never); } private static boolean never(BlockState p_235436_0_, IBlockReader p_235436_1_, BlockPos p_235436_2_) { @@ -60,7 +60,7 @@ public class WindowGen { } public static BlockEntry woodenWindowBlock(WoodType woodType, Block planksBlock) { - return woodenWindowBlock(woodType, planksBlock, () -> RenderType::getCutoutMipped); + return woodenWindowBlock(woodType, planksBlock, () -> RenderType::cutoutMipped); } public static BlockEntry customWindowBlock(String name, Supplier ingredient, @@ -72,7 +72,7 @@ public class WindowGen { public static BlockEntry woodenWindowBlock(WoodType woodType, Block planksBlock, Supplier> renderType) { - String woodName = woodType.getName(); + String woodName = woodType.name(); String name = woodName + "_window"; NonNullFunction end_texture = $ -> new ResourceLocation("block/" + woodName + "_planks"); @@ -87,16 +87,16 @@ public class WindowGen { return REGISTRATE.block(name, WindowBlock::new) .onRegister(connectedTextures(new HorizontalCTBehaviour(ct))) .addLayer(renderType) - .recipe((c, p) -> ShapedRecipeBuilder.shapedRecipe(c.get(), 2) - .patternLine(" # ") - .patternLine("#X#") - .key('#', ingredient.get()) - .key('X', DataIngredient.tag(Tags.Items.GLASS_COLORLESS)) - .addCriterion("has_ingredient", p.hasItem(ingredient.get())) - .build(p::accept)) + .recipe((c, p) -> ShapedRecipeBuilder.shaped(c.get(), 2) + .pattern(" # ") + .pattern("#X#") + .define('#', ingredient.get()) + .define('X', DataIngredient.tag(Tags.Items.GLASS_COLORLESS)) + .unlockedBy("has_ingredient", p.hasItem(ingredient.get())) + .save(p::accept)) .initialProperties(() -> Blocks.GLASS) .properties(WindowGen::glassProperties) - .loot((t, g) -> t.registerSilkTouch(g)) + .loot((t, g) -> t.dropWhenSilkTouch(g)) .blockstate((c, p) -> p.simpleBlock(c.get(), p.models() .cubeColumn(c.getName(), sideTexture.apply(c.getName()), endTexture.apply(c.getName())))) .tag(BlockTags.IMPERMEABLE) @@ -107,10 +107,10 @@ public class WindowGen { public static BlockEntry framedGlass(String name, ConnectedTextureBehaviour behaviour) { return REGISTRATE.block(name, ConnectedGlassBlock::new) .onRegister(connectedTextures(behaviour)) - .addLayer(() -> RenderType::getTranslucent) + .addLayer(() -> RenderType::translucent) .initialProperties(() -> Blocks.GLASS) .properties(WindowGen::glassProperties) - .loot((t, g) -> t.registerSilkTouch(g)) + .loot((t, g) -> t.dropWhenSilkTouch(g)) .recipe((c, p) -> p.stonecutting(DataIngredient.tag(Tags.Items.GLASS_COLORLESS), c::get)) .blockstate((c, p) -> BlockStateGen.cubeAll(c, p, "palettes/", "framed_glass")) .tag(Tags.Blocks.GLASS_COLORLESS, BlockTags.IMPERMEABLE) @@ -127,7 +127,7 @@ public class WindowGen { ResourceLocation sideTexture = Create.asResource(palettesDir() + "framed_glass"); ResourceLocation itemSideTexture = Create.asResource(palettesDir() + name); ResourceLocation topTexture = Create.asResource(palettesDir() + "framed_glass_pane_top"); - Supplier> renderType = () -> RenderType::getTranslucent; + Supplier> renderType = () -> RenderType::translucent; return connectedGlassPane(name, parent, ctshift, sideTexture, itemSideTexture, topTexture, renderType); } @@ -140,12 +140,12 @@ public class WindowGen { public static BlockEntry woodenWindowPane(WoodType woodType, Supplier parent) { - return woodenWindowPane(woodType, parent, () -> RenderType::getCutoutMipped); + return woodenWindowPane(woodType, parent, () -> RenderType::cutoutMipped); } public static BlockEntry woodenWindowPane(WoodType woodType, Supplier parent, Supplier> renderType) { - String woodName = woodType.getName(); + String woodName = woodType.name(); String name = woodName + "_window"; ResourceLocation topTexture = new ResourceLocation("block/" + woodName + "_planks"); ResourceLocation sideTexture = Create.asResource(palettesDir() + name); @@ -203,14 +203,14 @@ public class WindowGen { .addLayer(renderType) .initialProperties(() -> Blocks.GLASS_PANE) .blockstate(stateProvider) - .recipe((c, p) -> ShapedRecipeBuilder.shapedRecipe(c.get(), 16) - .patternLine("###") - .patternLine("###") - .key('#', parent.get()) - .addCriterion("has_ingredient", p.hasItem(parent.get())) - .build(p::accept)) + .recipe((c, p) -> ShapedRecipeBuilder.shaped(c.get(), 16) + .pattern("###") + .pattern("###") + .define('#', parent.get()) + .unlockedBy("has_ingredient", p.hasItem(parent.get())) + .save(p::accept)) .tag(Tags.Blocks.GLASS_PANES) - .loot((t, g) -> t.registerSilkTouch(g)) + .loot((t, g) -> t.dropWhenSilkTouch(g)) .item() .tag(Tags.Items.GLASS_PANES) .model((c, p) -> p.withExistingParent(c.getName(), new ResourceLocation(Create.ID, "item/pane")) diff --git a/src/main/java/com/simibubi/create/foundation/data/recipe/CompactingRecipeGen.java b/src/main/java/com/simibubi/create/foundation/data/recipe/CompactingRecipeGen.java index ccf3125c5..2ae48e5c3 100644 --- a/src/main/java/com/simibubi/create/foundation/data/recipe/CompactingRecipeGen.java +++ b/src/main/java/com/simibubi/create/foundation/data/recipe/CompactingRecipeGen.java @@ -12,6 +12,8 @@ import net.minecraft.fluid.Fluids; import net.minecraft.item.Items; import net.minecraftforge.common.Tags; +import com.simibubi.create.foundation.data.recipe.CreateRecipeProvider.GeneratedRecipe; + public class CompactingRecipeGen extends ProcessingRecipeGen { GeneratedRecipe diff --git a/src/main/java/com/simibubi/create/foundation/data/recipe/CreateRecipeProvider.java b/src/main/java/com/simibubi/create/foundation/data/recipe/CreateRecipeProvider.java index eb4f95506..baae5baa3 100644 --- a/src/main/java/com/simibubi/create/foundation/data/recipe/CreateRecipeProvider.java +++ b/src/main/java/com/simibubi/create/foundation/data/recipe/CreateRecipeProvider.java @@ -27,7 +27,7 @@ public abstract class CreateRecipeProvider extends RecipeProvider { } @Override - protected void registerRecipes(Consumer p_200404_1_) { + protected void buildShapelessRecipes(Consumer p_200404_1_) { all.forEach(c -> c.register(p_200404_1_)); Create.LOGGER.info(getName() + " registered " + all.size() + " recipe" + (all.size() == 1 ? "" : "s")); } 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 4262c8bcc..288ef4b12 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 @@ -14,6 +14,9 @@ import net.minecraft.tags.ItemTags; import net.minecraftforge.common.crafting.conditions.NotCondition; import net.minecraftforge.common.crafting.conditions.TagEmptyCondition; +import com.simibubi.create.foundation.data.recipe.CreateRecipeProvider.GeneratedRecipe; +import com.simibubi.create.foundation.data.recipe.CreateRecipeProvider.I; + public class CrushingRecipeGen extends ProcessingRecipeGen { GeneratedRecipe diff --git a/src/main/java/com/simibubi/create/foundation/data/recipe/CuttingRecipeGen.java b/src/main/java/com/simibubi/create/foundation/data/recipe/CuttingRecipeGen.java index eac7c4424..9251f0b74 100644 --- a/src/main/java/com/simibubi/create/foundation/data/recipe/CuttingRecipeGen.java +++ b/src/main/java/com/simibubi/create/foundation/data/recipe/CuttingRecipeGen.java @@ -7,6 +7,9 @@ import net.minecraft.block.Block; import net.minecraft.block.Blocks; import net.minecraft.data.DataGenerator; +import com.simibubi.create.foundation.data.recipe.CreateRecipeProvider.GeneratedRecipe; +import com.simibubi.create.foundation.data.recipe.CreateRecipeProvider.I; + public class CuttingRecipeGen extends ProcessingRecipeGen { GeneratedRecipe diff --git a/src/main/java/com/simibubi/create/foundation/data/recipe/EmptyingRecipeGen.java b/src/main/java/com/simibubi/create/foundation/data/recipe/EmptyingRecipeGen.java index 9df7864d4..42d9b9bb3 100644 --- a/src/main/java/com/simibubi/create/foundation/data/recipe/EmptyingRecipeGen.java +++ b/src/main/java/com/simibubi/create/foundation/data/recipe/EmptyingRecipeGen.java @@ -7,6 +7,8 @@ import com.simibubi.create.AllRecipeTypes; import net.minecraft.data.DataGenerator; import net.minecraft.item.Items; +import com.simibubi.create.foundation.data.recipe.CreateRecipeProvider.GeneratedRecipe; + public class EmptyingRecipeGen extends ProcessingRecipeGen { /* diff --git a/src/main/java/com/simibubi/create/foundation/data/recipe/FillingRecipeGen.java b/src/main/java/com/simibubi/create/foundation/data/recipe/FillingRecipeGen.java index 62ed6d8b2..6799d7cdd 100644 --- a/src/main/java/com/simibubi/create/foundation/data/recipe/FillingRecipeGen.java +++ b/src/main/java/com/simibubi/create/foundation/data/recipe/FillingRecipeGen.java @@ -12,6 +12,8 @@ import net.minecraft.item.Items; import net.minecraft.potion.Potions; import net.minecraftforge.common.Tags; +import com.simibubi.create.foundation.data.recipe.CreateRecipeProvider.GeneratedRecipe; + public class FillingRecipeGen extends ProcessingRecipeGen { GeneratedRecipe diff --git a/src/main/java/com/simibubi/create/foundation/data/recipe/MechanicalCraftingRecipeBuilder.java b/src/main/java/com/simibubi/create/foundation/data/recipe/MechanicalCraftingRecipeBuilder.java index 1bc1314c7..8bff65111 100644 --- a/src/main/java/com/simibubi/create/foundation/data/recipe/MechanicalCraftingRecipeBuilder.java +++ b/src/main/java/com/simibubi/create/foundation/data/recipe/MechanicalCraftingRecipeBuilder.java @@ -54,14 +54,14 @@ public class MechanicalCraftingRecipeBuilder { * Adds a key to the recipe pattern. */ public MechanicalCraftingRecipeBuilder key(Character p_200469_1_, Tag p_200469_2_) { - return this.key(p_200469_1_, Ingredient.fromTag(p_200469_2_)); + return this.key(p_200469_1_, Ingredient.of(p_200469_2_)); } /** * Adds a key to the recipe pattern. */ public MechanicalCraftingRecipeBuilder key(Character p_200462_1_, IItemProvider p_200462_2_) { - return this.key(p_200462_1_, Ingredient.fromItems(p_200462_2_)); + return this.key(p_200462_1_, Ingredient.of(p_200462_2_)); } /** @@ -161,7 +161,7 @@ public class MechanicalCraftingRecipeBuilder { this.key = p_i48271_7_; } - public void serialize(JsonObject p_218610_1_) { + public void serializeRecipeData(JsonObject p_218610_1_) { JsonArray jsonarray = new JsonArray(); for (String s : this.pattern) jsonarray.add(s); @@ -170,7 +170,7 @@ public class MechanicalCraftingRecipeBuilder { JsonObject jsonobject = new JsonObject(); for (Entry entry : this.key.entrySet()) jsonobject.add(String.valueOf(entry.getKey()), entry.getValue() - .serialize()); + .toJson()); p_218610_1_.add("key", jsonobject); JsonObject jsonobject1 = new JsonObject(); @@ -182,21 +182,21 @@ public class MechanicalCraftingRecipeBuilder { p_218610_1_.add("result", jsonobject1); } - public IRecipeSerializer getSerializer() { + public IRecipeSerializer getType() { return AllRecipeTypes.MECHANICAL_CRAFTING.serializer; } - public ResourceLocation getID() { + public ResourceLocation getId() { return this.id; } @Nullable - public JsonObject getAdvancementJson() { + public JsonObject serializeAdvancement() { return null; } @Nullable - public ResourceLocation getAdvancementID() { + public ResourceLocation getAdvancementId() { return null; } } diff --git a/src/main/java/com/simibubi/create/foundation/data/recipe/MechanicalCraftingRecipeGen.java b/src/main/java/com/simibubi/create/foundation/data/recipe/MechanicalCraftingRecipeGen.java index ba98441ee..2d8585af5 100644 --- a/src/main/java/com/simibubi/create/foundation/data/recipe/MechanicalCraftingRecipeGen.java +++ b/src/main/java/com/simibubi/create/foundation/data/recipe/MechanicalCraftingRecipeGen.java @@ -15,13 +15,16 @@ import net.minecraft.util.IItemProvider; import net.minecraft.util.ResourceLocation; import net.minecraftforge.common.Tags; +import com.simibubi.create.foundation.data.recipe.CreateRecipeProvider.GeneratedRecipe; +import com.simibubi.create.foundation.data.recipe.CreateRecipeProvider.I; + public class MechanicalCraftingRecipeGen extends CreateRecipeProvider { GeneratedRecipe CRUSHING_WHEEL = create(AllBlocks.CRUSHING_WHEEL::get).returns(2) - .recipe(b -> b.key('P', Ingredient.fromTag(ItemTags.PLANKS)) - .key('S', Ingredient.fromTag(I.stone())) + .recipe(b -> b.key('P', Ingredient.of(ItemTags.PLANKS)) + .key('S', Ingredient.of(I.stone())) .key('A', I.andesite()) .patternLine(" AAA ") .patternLine("AAPAA") @@ -30,10 +33,10 @@ public class MechanicalCraftingRecipeGen extends CreateRecipeProvider { .patternLine(" AAA ")), EXTENDO_GRIP = create(AllItems.EXTENDO_GRIP::get).returns(1) - .recipe(b -> b.key('L', Ingredient.fromTag(I.brass())) + .recipe(b -> b.key('L', Ingredient.of(I.brass())) .key('R', I.precisionMechanism()) .key('H', AllItems.BRASS_HAND.get()) - .key('S', Ingredient.fromTag(Tags.Items.RODS_WOODEN)) + .key('S', Ingredient.of(Tags.Items.RODS_WOODEN)) .patternLine(" L ") .patternLine(" R ") .patternLine("SSS") @@ -44,21 +47,21 @@ public class MechanicalCraftingRecipeGen extends CreateRecipeProvider { .recipe(b -> b.key('L', I.andesite()) .key('R', I.precisionMechanism()) .key('S', AllBlocks.FLUID_PIPE.get()) - .key('C', Ingredient.fromTag(I.copper())) + .key('C', Ingredient.of(I.copper())) .patternLine("LRSSS") .patternLine("CC ")), FURNACE_ENGINE = create(AllBlocks.FURNACE_ENGINE::get).returns(1) - .recipe(b -> b.key('P', Ingredient.fromTag(I.brassSheet())) - .key('B', Ingredient.fromTag(I.brass())) - .key('I', Ingredient.fromItems(Blocks.PISTON, Blocks.STICKY_PISTON)) + .recipe(b -> b.key('P', Ingredient.of(I.brassSheet())) + .key('B', Ingredient.of(I.brass())) + .key('I', Ingredient.of(Blocks.PISTON, Blocks.STICKY_PISTON)) .key('C', I.brassCasing()) .patternLine("PPB") .patternLine("PCI") .patternLine("PPB")), FLYWHEEL = create(AllBlocks.FLYWHEEL::get).returns(1) - .recipe(b -> b.key('B', Ingredient.fromTag(I.brass())) + .recipe(b -> b.key('B', Ingredient.of(I.brass())) .key('C', I.brassCasing()) .patternLine(" BBB") .patternLine("CB B") diff --git a/src/main/java/com/simibubi/create/foundation/data/recipe/MillingRecipeGen.java b/src/main/java/com/simibubi/create/foundation/data/recipe/MillingRecipeGen.java index 92480a848..c6e339586 100644 --- a/src/main/java/com/simibubi/create/foundation/data/recipe/MillingRecipeGen.java +++ b/src/main/java/com/simibubi/create/foundation/data/recipe/MillingRecipeGen.java @@ -14,6 +14,8 @@ import net.minecraft.tags.ItemTags; import net.minecraftforge.common.crafting.conditions.NotCondition; import net.minecraftforge.common.crafting.conditions.TagEmptyCondition; +import com.simibubi.create.foundation.data.recipe.CreateRecipeProvider.GeneratedRecipe; + public class MillingRecipeGen extends ProcessingRecipeGen { GeneratedRecipe diff --git a/src/main/java/com/simibubi/create/foundation/data/recipe/MixingRecipeGen.java b/src/main/java/com/simibubi/create/foundation/data/recipe/MixingRecipeGen.java index 6e26a2e26..e3c346298 100644 --- a/src/main/java/com/simibubi/create/foundation/data/recipe/MixingRecipeGen.java +++ b/src/main/java/com/simibubi/create/foundation/data/recipe/MixingRecipeGen.java @@ -13,6 +13,9 @@ import net.minecraft.item.Items; import net.minecraft.tags.ItemTags; import net.minecraftforge.common.Tags; +import com.simibubi.create.foundation.data.recipe.CreateRecipeProvider.GeneratedRecipe; +import com.simibubi.create.foundation.data.recipe.CreateRecipeProvider.I; + public class MixingRecipeGen extends ProcessingRecipeGen { GeneratedRecipe diff --git a/src/main/java/com/simibubi/create/foundation/data/recipe/PolishingRecipeGen.java b/src/main/java/com/simibubi/create/foundation/data/recipe/PolishingRecipeGen.java index 8f1ea96aa..67526b1d0 100644 --- a/src/main/java/com/simibubi/create/foundation/data/recipe/PolishingRecipeGen.java +++ b/src/main/java/com/simibubi/create/foundation/data/recipe/PolishingRecipeGen.java @@ -5,6 +5,8 @@ import com.simibubi.create.AllRecipeTypes; import net.minecraft.data.DataGenerator; +import com.simibubi.create.foundation.data.recipe.CreateRecipeProvider.GeneratedRecipe; + public class PolishingRecipeGen extends ProcessingRecipeGen { GeneratedRecipe diff --git a/src/main/java/com/simibubi/create/foundation/data/recipe/PressingRecipeGen.java b/src/main/java/com/simibubi/create/foundation/data/recipe/PressingRecipeGen.java index e2f38a40c..34fa2f987 100644 --- a/src/main/java/com/simibubi/create/foundation/data/recipe/PressingRecipeGen.java +++ b/src/main/java/com/simibubi/create/foundation/data/recipe/PressingRecipeGen.java @@ -7,13 +7,16 @@ import net.minecraft.data.DataGenerator; import net.minecraft.item.Items; import net.minecraft.item.crafting.Ingredient; +import com.simibubi.create.foundation.data.recipe.CreateRecipeProvider.GeneratedRecipe; +import com.simibubi.create.foundation.data.recipe.CreateRecipeProvider.I; + public class PressingRecipeGen extends ProcessingRecipeGen { GeneratedRecipe SUGAR_CANE = create(() -> Items.SUGAR_CANE, b -> b.output(Items.PAPER)), - PATH = create("path", b -> b.require(Ingredient.fromItems(Items.GRASS_BLOCK, Items.DIRT)) + PATH = create("path", b -> b.require(Ingredient.of(Items.GRASS_BLOCK, Items.DIRT)) .output(Items.GRASS_PATH)), IRON = create("iron_ingot", b -> b.require(I.iron()) diff --git a/src/main/java/com/simibubi/create/foundation/data/recipe/ProcessingRecipeGen.java b/src/main/java/com/simibubi/create/foundation/data/recipe/ProcessingRecipeGen.java index 58d35e2ab..90ae53c38 100644 --- a/src/main/java/com/simibubi/create/foundation/data/recipe/ProcessingRecipeGen.java +++ b/src/main/java/com/simibubi/create/foundation/data/recipe/ProcessingRecipeGen.java @@ -20,6 +20,8 @@ import net.minecraft.util.IItemProvider; import net.minecraft.util.ResourceLocation; import net.minecraftforge.fluids.FluidAttributes; +import com.simibubi.create.foundation.data.recipe.CreateRecipeProvider.GeneratedRecipe; + public abstract class ProcessingRecipeGen extends CreateRecipeProvider { protected static List generators = new ArrayList<>(); @@ -47,10 +49,10 @@ public abstract class ProcessingRecipeGen extends CreateRecipeProvider { } @Override - public void act(DirectoryCache dc) throws IOException { + public void run(DirectoryCache dc) throws IOException { generators.forEach(g -> { try { - g.act(dc); + g.run(dc); } catch (IOException e) { e.printStackTrace(); } @@ -75,7 +77,7 @@ public abstract class ProcessingRecipeGen extends CreateRecipeProvider { transform .apply(new ProcessingRecipeBuilder<>(serializer.getFactory(), new ResourceLocation(namespace, iItemProvider.asItem() .getRegistryName() - .getPath())).withItemIngredients(Ingredient.fromItems(iItemProvider))) + .getPath())).withItemIngredients(Ingredient.of(iItemProvider))) .build(c); }; all.add(generatedRecipe); diff --git a/src/main/java/com/simibubi/create/foundation/data/recipe/SequencedAssemblyRecipeGen.java b/src/main/java/com/simibubi/create/foundation/data/recipe/SequencedAssemblyRecipeGen.java index 42b653da0..6e8497008 100644 --- a/src/main/java/com/simibubi/create/foundation/data/recipe/SequencedAssemblyRecipeGen.java +++ b/src/main/java/com/simibubi/create/foundation/data/recipe/SequencedAssemblyRecipeGen.java @@ -15,6 +15,9 @@ import net.minecraft.item.ItemStack; import net.minecraft.item.Items; import net.minecraft.tags.ItemTags; +import com.simibubi.create.foundation.data.recipe.CreateRecipeProvider.GeneratedRecipe; +import com.simibubi.create.foundation.data.recipe.CreateRecipeProvider.I; + public class SequencedAssemblyRecipeGen extends CreateRecipeProvider { GeneratedRecipe diff --git a/src/main/java/com/simibubi/create/foundation/data/recipe/StandardRecipeGen.java b/src/main/java/com/simibubi/create/foundation/data/recipe/StandardRecipeGen.java index 3d6a0d568..440a573bd 100644 --- a/src/main/java/com/simibubi/create/foundation/data/recipe/StandardRecipeGen.java +++ b/src/main/java/com/simibubi/create/foundation/data/recipe/StandardRecipeGen.java @@ -51,6 +51,10 @@ import net.minecraftforge.common.crafting.conditions.ICondition; import net.minecraftforge.common.crafting.conditions.ModLoadedCondition; import net.minecraftforge.common.crafting.conditions.NotCondition; +import com.simibubi.create.foundation.data.recipe.CreateRecipeProvider.GeneratedRecipe; +import com.simibubi.create.foundation.data.recipe.CreateRecipeProvider.I; +import com.simibubi.create.foundation.data.recipe.CreateRecipeProvider.Marker; + @SuppressWarnings("unused") public class StandardRecipeGen extends CreateRecipeProvider { @@ -77,699 +81,699 @@ public class StandardRecipeGen extends CreateRecipeProvider { ImmutableList.of(I::zincNugget, I::zinc, I::zincBlock)), ANDESITE_ALLOY = create(AllItems.ANDESITE_ALLOY).unlockedByTag(I::iron) - .viaShaped(b -> b.key('A', Blocks.ANDESITE) - .key('B', Tags.Items.NUGGETS_IRON) - .patternLine("BA") - .patternLine("AB")), + .viaShaped(b -> b.define('A', Blocks.ANDESITE) + .define('B', Tags.Items.NUGGETS_IRON) + .pattern("BA") + .pattern("AB")), ANDESITE_ALLOY_FROM_ZINC = create(AllItems.ANDESITE_ALLOY).withSuffix("_from_zinc") .unlockedByTag(I::zinc) - .viaShaped(b -> b.key('A', Blocks.ANDESITE) - .key('B', I.zincNugget()) - .patternLine("BA") - .patternLine("AB")), + .viaShaped(b -> b.define('A', Blocks.ANDESITE) + .define('B', I.zincNugget()) + .pattern("BA") + .pattern("AB")), ANDESITE_CASING = create(AllBlocks.ANDESITE_CASING).returns(4) .unlockedBy(I::andesite) - .viaShaped(b -> b.key('A', ItemTags.PLANKS) - .key('C', I.andesite()) - .key('S', ItemTags.LOGS) - .patternLine("AAA") - .patternLine("CSC") - .patternLine("AAA")), + .viaShaped(b -> b.define('A', ItemTags.PLANKS) + .define('C', I.andesite()) + .define('S', ItemTags.LOGS) + .pattern("AAA") + .pattern("CSC") + .pattern("AAA")), BRASS_CASING = create(AllBlocks.BRASS_CASING).returns(4) .unlockedByTag(I::brass) - .viaShaped(b -> b.key('A', ItemTags.PLANKS) - .key('C', I.brassSheet()) - .key('S', ItemTags.LOGS) - .patternLine("AAA") - .patternLine("CSC") - .patternLine("AAA")), + .viaShaped(b -> b.define('A', ItemTags.PLANKS) + .define('C', I.brassSheet()) + .define('S', ItemTags.LOGS) + .pattern("AAA") + .pattern("CSC") + .pattern("AAA")), COPPER_CASING = create(AllBlocks.COPPER_CASING).returns(4) .unlockedByTag(I::copper) - .viaShaped(b -> b.key('A', ItemTags.PLANKS) - .key('C', I.copperSheet()) - .key('S', ItemTags.LOGS) - .patternLine("AAA") - .patternLine("CSC") - .patternLine("AAA")), + .viaShaped(b -> b.define('A', ItemTags.PLANKS) + .define('C', I.copperSheet()) + .define('S', ItemTags.LOGS) + .pattern("AAA") + .pattern("CSC") + .pattern("AAA")), RADIANT_CASING = create(AllBlocks.REFINED_RADIANCE_CASING).returns(4) .unlockedBy(I::refinedRadiance) - .viaShaped(b -> b.key('A', ItemTags.PLANKS) - .key('C', I.refinedRadiance()) - .key('S', Tags.Items.GLASS_COLORLESS) - .patternLine("AAA") - .patternLine("CSC") - .patternLine("AAA")), + .viaShaped(b -> b.define('A', ItemTags.PLANKS) + .define('C', I.refinedRadiance()) + .define('S', Tags.Items.GLASS_COLORLESS) + .pattern("AAA") + .pattern("CSC") + .pattern("AAA")), SHADOW_CASING = create(AllBlocks.SHADOW_STEEL_CASING).returns(4) .unlockedBy(I::shadowSteel) - .viaShaped(b -> b.key('A', ItemTags.PLANKS) - .key('C', I.shadowSteel()) - .key('S', Tags.Items.OBSIDIAN) - .patternLine("AAA") - .patternLine("CSC") - .patternLine("AAA")), + .viaShaped(b -> b.define('A', ItemTags.PLANKS) + .define('C', I.shadowSteel()) + .define('S', Tags.Items.OBSIDIAN) + .pattern("AAA") + .pattern("CSC") + .pattern("AAA")), ELECTRON_TUBE = create(AllItems.ELECTRON_TUBE).unlockedBy(AllItems.ROSE_QUARTZ::get) - .viaShaped(b -> b.key('L', AllItems.POLISHED_ROSE_QUARTZ.get()) - .key('R', Items.REDSTONE_TORCH) - .key('N', Tags.Items.NUGGETS_IRON) - .patternLine("L") - .patternLine("R") - .patternLine("N")), + .viaShaped(b -> b.define('L', AllItems.POLISHED_ROSE_QUARTZ.get()) + .define('R', Items.REDSTONE_TORCH) + .define('N', Tags.Items.NUGGETS_IRON) + .pattern("L") + .pattern("R") + .pattern("N")), ROSE_QUARTZ = create(AllItems.ROSE_QUARTZ).unlockedBy(() -> Items.REDSTONE) - .viaShapeless(b -> b.addIngredient(Tags.Items.GEMS_QUARTZ) - .addIngredient(Ingredient.fromTag(I.redstone()), 8)), + .viaShapeless(b -> b.requires(Tags.Items.GEMS_QUARTZ) + .requires(Ingredient.of(I.redstone()), 8)), SAND_PAPER = create(AllItems.SAND_PAPER).unlockedBy(() -> Items.PAPER) - .viaShapeless(b -> b.addIngredient(Items.PAPER) - .addIngredient(Tags.Items.SAND_COLORLESS)), + .viaShapeless(b -> b.requires(Items.PAPER) + .requires(Tags.Items.SAND_COLORLESS)), RED_SAND_PAPER = create(AllItems.RED_SAND_PAPER).unlockedBy(() -> Items.PAPER) - .viaShapeless(b -> b.addIngredient(Items.PAPER) - .addIngredient(Tags.Items.SAND_RED)) + .viaShapeless(b -> b.requires(Items.PAPER) + .requires(Tags.Items.SAND_RED)) ; private Marker CURIOSITIES = enterSection(AllSections.CURIOSITIES); GeneratedRecipe WAND_OF_SYMMETRY = create(AllItems.WAND_OF_SYMMETRY).unlockedBy(I::refinedRadiance) - .viaShaped(b -> b.key('E', I.refinedRadiance()) - .key('G', Tags.Items.GLASS_PANES_WHITE) - .key('O', Tags.Items.OBSIDIAN) - .key('L', I.brass()) - .patternLine(" GE") - .patternLine("LEG") - .patternLine("OL ")), + .viaShaped(b -> b.define('E', I.refinedRadiance()) + .define('G', Tags.Items.GLASS_PANES_WHITE) + .define('O', Tags.Items.OBSIDIAN) + .define('L', I.brass()) + .pattern(" GE") + .pattern("LEG") + .pattern("OL ")), MINECART_COUPLING = create(AllItems.MINECART_COUPLING).unlockedBy(I::andesite) - .viaShaped(b -> b.key('E', I.andesite()) - .key('O', I.ironSheet()) - .patternLine(" E") - .patternLine(" O ") - .patternLine("E ")), + .viaShaped(b -> b.define('E', I.andesite()) + .define('O', I.ironSheet()) + .pattern(" E") + .pattern(" O ") + .pattern("E ")), PECULIAR_BELL = create(AllBlocks.PECULIAR_BELL).unlockedByTag(I::brass) - .viaShaped(b -> b.key('I', I.brassBlock()) - .key('P', I.brassSheet()) - .patternLine("I") - .patternLine("P")) + .viaShaped(b -> b.define('I', I.brassBlock()) + .define('P', I.brassSheet()) + .pattern("I") + .pattern("P")) ; private Marker KINETICS = enterSection(AllSections.KINETICS); GeneratedRecipe BASIN = create(AllBlocks.BASIN).unlockedBy(I::andesite) - .viaShaped(b -> b.key('A', I.andesite()) - .patternLine("A A") - .patternLine("AAA")), + .viaShaped(b -> b.define('A', I.andesite()) + .pattern("A A") + .pattern("AAA")), GOGGLES = create(AllItems.GOGGLES).unlockedBy(I::andesite) - .viaShaped(b -> b.key('G', Tags.Items.GLASS) - .key('P', I.goldSheet()) - .key('S', Tags.Items.STRING) - .patternLine(" S ") - .patternLine("GPG")), + .viaShaped(b -> b.define('G', Tags.Items.GLASS) + .define('P', I.goldSheet()) + .define('S', Tags.Items.STRING) + .pattern(" S ") + .pattern("GPG")), WRENCH = create(AllItems.WRENCH).unlockedBy(I::andesite) - .viaShaped(b -> b.key('G', I.goldSheet()) - .key('P', I.cog()) - .key('S', Tags.Items.RODS_WOODEN) - .patternLine("GG") - .patternLine("GP") - .patternLine(" S")), + .viaShaped(b -> b.define('G', I.goldSheet()) + .define('P', I.cog()) + .define('S', Tags.Items.RODS_WOODEN) + .pattern("GG") + .pattern("GP") + .pattern(" S")), FILTER = create(AllItems.FILTER).unlockedBy(I::andesite) - .viaShaped(b -> b.key('S', ItemTags.WOOL) - .key('A', Tags.Items.NUGGETS_IRON) - .patternLine("ASA")), + .viaShaped(b -> b.define('S', ItemTags.WOOL) + .define('A', Tags.Items.NUGGETS_IRON) + .pattern("ASA")), ATTRIBUTE_FILTER = create(AllItems.ATTRIBUTE_FILTER).unlockedByTag(I::brass) - .viaShaped(b -> b.key('S', ItemTags.WOOL) - .key('A', I.brassNugget()) - .patternLine("ASA")), + .viaShaped(b -> b.define('S', ItemTags.WOOL) + .define('A', I.brassNugget()) + .pattern("ASA")), BRASS_HAND = create(AllItems.BRASS_HAND).unlockedByTag(I::brass) - .viaShaped(b -> b.key('A', I.andesite()) - .key('B', I.brassSheet()) - .patternLine(" A ") - .patternLine("BBB") - .patternLine(" B ")), + .viaShaped(b -> b.define('A', I.andesite()) + .define('B', I.brassSheet()) + .pattern(" A ") + .pattern("BBB") + .pattern(" B ")), SUPER_GLUE = create(AllItems.SUPER_GLUE).unlockedByTag(I::ironSheet) - .viaShaped(b -> b.key('A', Tags.Items.SLIMEBALLS) - .key('S', I.ironSheet()) - .key('N', Tags.Items.NUGGETS_IRON) - .patternLine("AS") - .patternLine("NA")), + .viaShaped(b -> b.define('A', Tags.Items.SLIMEBALLS) + .define('S', I.ironSheet()) + .define('N', Tags.Items.NUGGETS_IRON) + .pattern("AS") + .pattern("NA")), CRAFTER_SLOT_COVER = create(AllItems.CRAFTER_SLOT_COVER).unlockedBy(AllBlocks.MECHANICAL_CRAFTER::get) - .viaShaped(b -> b.key('A', I.brassNugget()) - .patternLine("AAA")), + .viaShaped(b -> b.define('A', I.brassNugget()) + .pattern("AAA")), COGWHEEL = create(AllBlocks.COGWHEEL).returns(8) .unlockedBy(I::andesite) - .viaShaped(b -> b.key('S', ItemTags.WOODEN_BUTTONS) - .key('C', I.andesite()) - .patternLine("SSS") - .patternLine("SCS") - .patternLine("SSS")), + .viaShaped(b -> b.define('S', ItemTags.WOODEN_BUTTONS) + .define('C', I.andesite()) + .pattern("SSS") + .pattern("SCS") + .pattern("SSS")), LARGE_COGWHEEL = create(AllBlocks.LARGE_COGWHEEL).returns(2) .unlockedBy(I::andesite) - .viaShaped(b -> b.key('S', ItemTags.WOODEN_BUTTONS) - .key('C', I.andesite()) - .key('D', ItemTags.PLANKS) - .patternLine("SDS") - .patternLine("DCD") - .patternLine("SDS")), + .viaShaped(b -> b.define('S', ItemTags.WOODEN_BUTTONS) + .define('C', I.andesite()) + .define('D', ItemTags.PLANKS) + .pattern("SDS") + .pattern("DCD") + .pattern("SDS")), WATER_WHEEL = create(AllBlocks.WATER_WHEEL).unlockedBy(I::andesite) - .viaShaped(b -> b.key('S', ItemTags.WOODEN_SLABS) - .key('C', AllBlocks.LARGE_COGWHEEL.get()) - .patternLine("SSS") - .patternLine("SCS") - .patternLine("SSS")), + .viaShaped(b -> b.define('S', ItemTags.WOODEN_SLABS) + .define('C', AllBlocks.LARGE_COGWHEEL.get()) + .pattern("SSS") + .pattern("SCS") + .pattern("SSS")), SHAFT = create(AllBlocks.SHAFT).returns(8) .unlockedBy(I::andesite) - .viaShaped(b -> b.key('A', I.andesite()) - .patternLine("A") - .patternLine("A")), + .viaShaped(b -> b.define('A', I.andesite()) + .pattern("A") + .pattern("A")), MECHANICAL_PRESS = create(AllBlocks.MECHANICAL_PRESS).unlockedBy(I::andesiteCasing) - .viaShaped(b -> b.key('B', I.andesite()) - .key('S', I.cog()) - .key('C', I.andesiteCasing()) - .key('I', AllTags.forgeItemTag("storage_blocks/iron")) - .patternLine(" B ") - .patternLine("SCS") - .patternLine(" I ")), + .viaShaped(b -> b.define('B', I.andesite()) + .define('S', I.cog()) + .define('C', I.andesiteCasing()) + .define('I', AllTags.forgeItemTag("storage_blocks/iron")) + .pattern(" B ") + .pattern("SCS") + .pattern(" I ")), MILLSTONE = create(AllBlocks.MILLSTONE).unlockedBy(I::andesite) - .viaShaped(b -> b.key('B', ItemTags.PLANKS) - .key('S', I.andesite()) - .key('C', I.cog()) - .key('I', I.stone()) - .patternLine(" B ") - .patternLine("SCS") - .patternLine(" I ")), + .viaShaped(b -> b.define('B', ItemTags.PLANKS) + .define('S', I.andesite()) + .define('C', I.cog()) + .define('I', I.stone()) + .pattern(" B ") + .pattern("SCS") + .pattern(" I ")), MECHANICAL_PISTON = create(AllBlocks.MECHANICAL_PISTON).unlockedBy(I::andesiteCasing) - .viaShaped(b -> b.key('B', ItemTags.PLANKS) - .key('S', I.cog()) - .key('C', I.andesiteCasing()) - .key('I', AllBlocks.PISTON_EXTENSION_POLE.get()) - .patternLine(" B ") - .patternLine("SCS") - .patternLine(" I ")), + .viaShaped(b -> b.define('B', ItemTags.PLANKS) + .define('S', I.cog()) + .define('C', I.andesiteCasing()) + .define('I', AllBlocks.PISTON_EXTENSION_POLE.get()) + .pattern(" B ") + .pattern("SCS") + .pattern(" I ")), STICKY_MECHANICAL_PISTON = create(AllBlocks.STICKY_MECHANICAL_PISTON).unlockedBy(I::andesite) - .viaShaped(b -> b.key('S', Tags.Items.SLIMEBALLS) - .key('P', AllBlocks.MECHANICAL_PISTON.get()) - .patternLine("S") - .patternLine("P")), + .viaShaped(b -> b.define('S', Tags.Items.SLIMEBALLS) + .define('P', AllBlocks.MECHANICAL_PISTON.get()) + .pattern("S") + .pattern("P")), TURNTABLE = create(AllBlocks.TURNTABLE).unlockedBy(I::andesite) - .viaShaped(b -> b.key('S', I.shaft()) - .key('P', ItemTags.WOODEN_SLABS) - .patternLine("P") - .patternLine("S")), + .viaShaped(b -> b.define('S', I.shaft()) + .define('P', ItemTags.WOODEN_SLABS) + .pattern("P") + .pattern("S")), PISTON_EXTENSION_POLE = create(AllBlocks.PISTON_EXTENSION_POLE).returns(8) .unlockedBy(I::andesite) - .viaShaped(b -> b.key('A', I.andesite()) - .key('P', ItemTags.PLANKS) - .patternLine("P") - .patternLine("A") - .patternLine("P")), + .viaShaped(b -> b.define('A', I.andesite()) + .define('P', ItemTags.PLANKS) + .pattern("P") + .pattern("A") + .pattern("P")), GANTRY_PINION = create(AllBlocks.GANTRY_CARRIAGE).unlockedBy(I::andesiteCasing) - .viaShaped(b -> b.key('B', ItemTags.PLANKS) - .key('S', I.cog()) - .key('C', I.andesiteCasing()) - .key('I', I.shaft()) - .patternLine(" B ") - .patternLine("ICI") - .patternLine(" S ")), + .viaShaped(b -> b.define('B', ItemTags.PLANKS) + .define('S', I.cog()) + .define('C', I.andesiteCasing()) + .define('I', I.shaft()) + .pattern(" B ") + .pattern("ICI") + .pattern(" S ")), GANTRY_SHAFT = create(AllBlocks.GANTRY_SHAFT).returns(8) .unlockedBy(I::andesite) - .viaShaped(b -> b.key('A', I.andesite()) - .key('R', I.redstone()) - .patternLine("A") - .patternLine("R") - .patternLine("A")), + .viaShaped(b -> b.define('A', I.andesite()) + .define('R', I.redstone()) + .pattern("A") + .pattern("R") + .pattern("A")), ANALOG_LEVER = create(AllBlocks.ANALOG_LEVER).unlockedBy(I::andesite) - .viaShaped(b -> b.key('S', I.andesiteCasing()) - .key('P', Tags.Items.RODS_WOODEN) - .patternLine("P") - .patternLine("S")), + .viaShaped(b -> b.define('S', I.andesiteCasing()) + .define('P', Tags.Items.RODS_WOODEN) + .pattern("P") + .pattern("S")), BELT_CONNECTOR = create(AllItems.BELT_CONNECTOR).unlockedBy(I::andesite) - .viaShaped(b -> b.key('D', Items.DRIED_KELP) - .patternLine("DDD") - .patternLine("DDD")), + .viaShaped(b -> b.define('D', Items.DRIED_KELP) + .pattern("DDD") + .pattern("DDD")), ADJUSTABLE_PULLEY = create(AllBlocks.ADJUSTABLE_CHAIN_GEARSHIFT).unlockedBy(I::brassCasing) - .viaShaped(b -> b.key('A', I.electronTube()) - .key('B', AllBlocks.ENCASED_CHAIN_DRIVE.get()) - .key('C', AllBlocks.LARGE_COGWHEEL.get()) - .patternLine("A") - .patternLine("B") - .patternLine("C")), + .viaShaped(b -> b.define('A', I.electronTube()) + .define('B', AllBlocks.ENCASED_CHAIN_DRIVE.get()) + .define('C', AllBlocks.LARGE_COGWHEEL.get()) + .pattern("A") + .pattern("B") + .pattern("C")), CART_ASSEMBLER = create(AllBlocks.CART_ASSEMBLER).unlockedBy(I::andesite) - .viaShaped(b -> b.key('L', ItemTags.LOGS) - .key('R', I.redstone()) - .key('C', I.andesite()) - .patternLine(" L ") - .patternLine("CRC") - .patternLine("L L")), + .viaShaped(b -> b.define('L', ItemTags.LOGS) + .define('R', I.redstone()) + .define('C', I.andesite()) + .pattern(" L ") + .pattern("CRC") + .pattern("L L")), CONTROLLER_RAIL = create(AllBlocks.CONTROLLER_RAIL).returns(6) .unlockedBy(() -> Items.POWERED_RAIL) - .viaShaped(b -> b.key('A', I.gold()) - .key('E', I.electronTube()) - .key('S', Tags.Items.RODS_WOODEN) - .patternLine("A A") - .patternLine("ASA") - .patternLine("AEA")), + .viaShaped(b -> b.define('A', I.gold()) + .define('E', I.electronTube()) + .define('S', Tags.Items.RODS_WOODEN) + .pattern("A A") + .pattern("ASA") + .pattern("AEA")), HAND_CRANK = create(AllBlocks.HAND_CRANK).unlockedBy(I::andesite) - .viaShaped(b -> b.key('A', I.andesite()) - .key('C', ItemTags.PLANKS) - .key('S', I.shaft()) - .patternLine(" S ") - .patternLine("CCC") - .patternLine(" A")), + .viaShaped(b -> b.define('A', I.andesite()) + .define('C', ItemTags.PLANKS) + .define('S', I.shaft()) + .pattern(" S ") + .pattern("CCC") + .pattern(" A")), COPPER_VALVE_HANDLE = create(AllBlocks.COPPER_VALVE_HANDLE).unlockedByTag(I::copper) - .viaShaped(b -> b.key('S', I.andesite()) - .key('C', I.copperSheet()) - .patternLine("CCC") - .patternLine(" S ")), + .viaShaped(b -> b.define('S', I.andesite()) + .define('C', I.copperSheet()) + .pattern("CCC") + .pattern(" S ")), COPPER_VALVE_HANDLE_FROM_OTHER_HANDLES = create(AllBlocks.COPPER_VALVE_HANDLE).withSuffix("_from_others") .unlockedByTag(I::copper) - .viaShapeless(b -> b.addIngredient(AllItemTags.VALVE_HANDLES.tag)), + .viaShapeless(b -> b.requires(AllItemTags.VALVE_HANDLES.tag)), NOZZLE = create(AllBlocks.NOZZLE).unlockedBy(AllBlocks.ENCASED_FAN::get) - .viaShaped(b -> b.key('S', I.andesite()) - .key('C', ItemTags.WOOL) - .patternLine(" S ") - .patternLine(" C ") - .patternLine("SSS")), + .viaShaped(b -> b.define('S', I.andesite()) + .define('C', ItemTags.WOOL) + .pattern(" S ") + .pattern(" C ") + .pattern("SSS")), PROPELLER = create(AllItems.PROPELLER).unlockedByTag(I::ironSheet) - .viaShaped(b -> b.key('S', I.ironSheet()) - .key('C', I.andesite()) - .patternLine(" S ") - .patternLine("SCS") - .patternLine(" S ")), + .viaShaped(b -> b.define('S', I.ironSheet()) + .define('C', I.andesite()) + .pattern(" S ") + .pattern("SCS") + .pattern(" S ")), WHISK = create(AllItems.WHISK).unlockedByTag(I::ironSheet) - .viaShaped(b -> b.key('S', I.ironSheet()) - .key('C', I.andesite()) - .patternLine(" C ") - .patternLine("SCS") - .patternLine("SSS")), + .viaShaped(b -> b.define('S', I.ironSheet()) + .define('C', I.andesite()) + .pattern(" C ") + .pattern("SCS") + .pattern("SSS")), ENCASED_FAN = create(AllBlocks.ENCASED_FAN).unlockedByTag(I::ironSheet) - .viaShaped(b -> b.key('S', I.shaft()) - .key('A', I.andesiteCasing()) - .key('R', I.cog()) - .key('P', AllItems.PROPELLER.get()) - .patternLine(" S ") - .patternLine("RAR") - .patternLine(" P ")), + .viaShaped(b -> b.define('S', I.shaft()) + .define('A', I.andesiteCasing()) + .define('R', I.cog()) + .define('P', AllItems.PROPELLER.get()) + .pattern(" S ") + .pattern("RAR") + .pattern(" P ")), CUCKOO_CLOCK = create(AllBlocks.CUCKOO_CLOCK).unlockedBy(I::andesite) - .viaShaped(b -> b.key('S', ItemTags.PLANKS) - .key('A', Items.CLOCK) - .key('B', ItemTags.LOGS) - .key('P', I.cog()) - .patternLine(" S ") - .patternLine("SAS") - .patternLine("BPB")), + .viaShaped(b -> b.define('S', ItemTags.PLANKS) + .define('A', Items.CLOCK) + .define('B', ItemTags.LOGS) + .define('P', I.cog()) + .pattern(" S ") + .pattern("SAS") + .pattern("BPB")), MECHANICAL_CRAFTER = create(AllBlocks.MECHANICAL_CRAFTER).returns(3) .unlockedBy(I::brassCasing) - .viaShaped(b -> b.key('B', I.electronTube()) - .key('R', Blocks.CRAFTING_TABLE) - .key('C', I.brassCasing()) - .key('S', I.cog()) - .patternLine(" B ") - .patternLine("SCS") - .patternLine(" R ")), + .viaShaped(b -> b.define('B', I.electronTube()) + .define('R', Blocks.CRAFTING_TABLE) + .define('C', I.brassCasing()) + .define('S', I.cog()) + .pattern(" B ") + .pattern("SCS") + .pattern(" R ")), WINDMILL_BEARING = create(AllBlocks.WINDMILL_BEARING).unlockedBy(I::andesite) - .viaShaped(b -> b.key('I', I.shaft()) - .key('B', AllBlocks.TURNTABLE.get()) - .key('C', I.stone()) - .patternLine(" B ") - .patternLine(" C ") - .patternLine(" I ")), + .viaShaped(b -> b.define('I', I.shaft()) + .define('B', AllBlocks.TURNTABLE.get()) + .define('C', I.stone()) + .pattern(" B ") + .pattern(" C ") + .pattern(" I ")), MECHANICAL_BEARING = create(AllBlocks.MECHANICAL_BEARING).unlockedBy(I::andesiteCasing) - .viaShaped(b -> b.key('I', I.shaft()) - .key('S', I.andesite()) - .key('B', AllBlocks.TURNTABLE.get()) - .key('C', I.andesiteCasing()) - .patternLine(" B ") - .patternLine("SCS") - .patternLine(" I ")), + .viaShaped(b -> b.define('I', I.shaft()) + .define('S', I.andesite()) + .define('B', AllBlocks.TURNTABLE.get()) + .define('C', I.andesiteCasing()) + .pattern(" B ") + .pattern("SCS") + .pattern(" I ")), CLOCKWORK_BEARING = create(AllBlocks.CLOCKWORK_BEARING).unlockedBy(I::brassCasing) - .viaShaped(b -> b.key('I', I.shaft()) - .key('S', I.electronTube()) - .key('B', AllBlocks.TURNTABLE.get()) - .key('C', I.brassCasing()) - .patternLine(" B ") - .patternLine("SCS") - .patternLine(" I ")), + .viaShaped(b -> b.define('I', I.shaft()) + .define('S', I.electronTube()) + .define('B', AllBlocks.TURNTABLE.get()) + .define('C', I.brassCasing()) + .pattern(" B ") + .pattern("SCS") + .pattern(" I ")), WOODEN_BRACKET = create(AllBlocks.WOODEN_BRACKET).returns(4) .unlockedBy(I::andesite) - .viaShaped(b -> b.key('S', Tags.Items.RODS_WOODEN) - .key('P', I.planks()) - .key('C', I.andesite()) - .patternLine("SSS") - .patternLine("PCP")), + .viaShaped(b -> b.define('S', Tags.Items.RODS_WOODEN) + .define('P', I.planks()) + .define('C', I.andesite()) + .pattern("SSS") + .pattern("PCP")), METAL_BRACKET = create(AllBlocks.METAL_BRACKET).returns(4) .unlockedBy(I::andesite) - .viaShaped(b -> b.key('S', Tags.Items.NUGGETS_IRON) - .key('P', I.iron()) - .key('C', I.andesite()) - .patternLine("SSS") - .patternLine("PCP")), + .viaShaped(b -> b.define('S', Tags.Items.NUGGETS_IRON) + .define('P', I.iron()) + .define('C', I.andesite()) + .pattern("SSS") + .pattern("PCP")), FLUID_PIPE = create(AllBlocks.FLUID_PIPE).returns(8) .unlockedByTag(I::copper) - .viaShaped(b -> b.key('S', I.copperSheet()) - .key('C', I.copper()) - .patternLine("SCS")), + .viaShaped(b -> b.define('S', I.copperSheet()) + .define('C', I.copper()) + .pattern("SCS")), MECHANICAL_PUMP = create(AllBlocks.MECHANICAL_PUMP).unlockedByTag(I::copper) - .viaShaped(b -> b.key('P', I.cog()) - .key('S', AllBlocks.FLUID_PIPE.get()) - .patternLine("P") - .patternLine("S")), + .viaShaped(b -> b.define('P', I.cog()) + .define('S', AllBlocks.FLUID_PIPE.get()) + .pattern("P") + .pattern("S")), SMART_FLUID_PIPE = create(AllBlocks.SMART_FLUID_PIPE).unlockedByTag(I::copper) - .viaShaped(b -> b.key('P', I.electronTube()) - .key('S', AllBlocks.FLUID_PIPE.get()) - .key('I', I.brassSheet()) - .patternLine("I") - .patternLine("S") - .patternLine("P")), + .viaShaped(b -> b.define('P', I.electronTube()) + .define('S', AllBlocks.FLUID_PIPE.get()) + .define('I', I.brassSheet()) + .pattern("I") + .pattern("S") + .pattern("P")), FLUID_VALVE = create(AllBlocks.FLUID_VALVE).unlockedByTag(I::copper) - .viaShaped(b -> b.key('P', I.shaft()) - .key('S', AllBlocks.FLUID_PIPE.get()) - .key('I', I.ironSheet()) - .patternLine("I") - .patternLine("S") - .patternLine("P")), + .viaShaped(b -> b.define('P', I.shaft()) + .define('S', AllBlocks.FLUID_PIPE.get()) + .define('I', I.ironSheet()) + .pattern("I") + .pattern("S") + .pattern("P")), SPOUT = create(AllBlocks.SPOUT).unlockedBy(I::copperCasing) - .viaShaped(b -> b.key('T', AllBlocks.FLUID_TANK.get()) - .key('P', Items.DRIED_KELP) - .key('S', I.copperNugget()) - .patternLine("T") - .patternLine("P") - .patternLine("S")), + .viaShaped(b -> b.define('T', AllBlocks.FLUID_TANK.get()) + .define('P', Items.DRIED_KELP) + .define('S', I.copperNugget()) + .pattern("T") + .pattern("P") + .pattern("S")), ITEM_DRAIN = create(AllBlocks.ITEM_DRAIN).unlockedBy(I::copperCasing) - .viaShaped(b -> b.key('P', Blocks.IRON_BARS) - .key('S', I.copperCasing()) - .patternLine("P") - .patternLine("S")), + .viaShaped(b -> b.define('P', Blocks.IRON_BARS) + .define('S', I.copperCasing()) + .pattern("P") + .pattern("S")), FLUID_TANK = create(AllBlocks.FLUID_TANK).returns(2) .unlockedBy(I::copperCasing) - .viaShaped(b -> b.key('B', I.copperCasing()) - .key('S', I.copperNugget()) - .key('C', Tags.Items.GLASS) - .patternLine(" B ") - .patternLine("SCS") - .patternLine(" B ")), + .viaShaped(b -> b.define('B', I.copperCasing()) + .define('S', I.copperNugget()) + .define('C', Tags.Items.GLASS) + .pattern(" B ") + .pattern("SCS") + .pattern(" B ")), DEPLOYER = create(AllBlocks.DEPLOYER).unlockedBy(I::electronTube) - .viaShaped(b -> b.key('I', AllItems.BRASS_HAND.get()) - .key('B', I.electronTube()) - .key('S', I.cog()) - .key('C', I.andesiteCasing()) - .patternLine(" B ") - .patternLine("SCS") - .patternLine(" I ")), + .viaShaped(b -> b.define('I', AllItems.BRASS_HAND.get()) + .define('B', I.electronTube()) + .define('S', I.cog()) + .define('C', I.andesiteCasing()) + .pattern(" B ") + .pattern("SCS") + .pattern(" I ")), PORTABLE_STORAGE_INTERFACE = create(AllBlocks.PORTABLE_STORAGE_INTERFACE).unlockedBy(I::brassCasing) - .viaShaped(b -> b.key('I', I.brassCasing()) - .key('B', AllBlocks.ANDESITE_FUNNEL.get()) - .patternLine(" B ") - .patternLine(" I ")), + .viaShaped(b -> b.define('I', I.brassCasing()) + .define('B', AllBlocks.ANDESITE_FUNNEL.get()) + .pattern(" B ") + .pattern(" I ")), PORTABLE_FLUID_INTERFACE = create(AllBlocks.PORTABLE_FLUID_INTERFACE).unlockedBy(I::copperCasing) - .viaShaped(b -> b.key('I', I.copperCasing()) - .key('B', AllBlocks.ANDESITE_FUNNEL.get()) - .patternLine(" B ") - .patternLine(" I ")), + .viaShaped(b -> b.define('I', I.copperCasing()) + .define('B', AllBlocks.ANDESITE_FUNNEL.get()) + .pattern(" B ") + .pattern(" I ")), ROPE_PULLEY = create(AllBlocks.ROPE_PULLEY).unlockedBy(I::andesite) - .viaShaped(b -> b.key('S', I.shaft()) - .key('B', I.andesiteCasing()) - .key('C', ItemTags.WOOL) - .key('I', I.ironSheet()) - .patternLine(" B ") - .patternLine("SCS") - .patternLine(" I ")), + .viaShaped(b -> b.define('S', I.shaft()) + .define('B', I.andesiteCasing()) + .define('C', ItemTags.WOOL) + .define('I', I.ironSheet()) + .pattern(" B ") + .pattern("SCS") + .pattern(" I ")), HOSE_PULLEY = create(AllBlocks.HOSE_PULLEY).unlockedByTag(I::copper) - .viaShaped(b -> b.key('S', I.shaft()) - .key('P', AllBlocks.FLUID_PIPE.get()) - .key('B', I.copperCasing()) - .key('C', Items.DRIED_KELP) - .key('I', I.copperSheet()) - .patternLine(" B ") - .patternLine("SCP") - .patternLine(" I ")), + .viaShaped(b -> b.define('S', I.shaft()) + .define('P', AllBlocks.FLUID_PIPE.get()) + .define('B', I.copperCasing()) + .define('C', Items.DRIED_KELP) + .define('I', I.copperSheet()) + .pattern(" B ") + .pattern("SCP") + .pattern(" I ")), EMPTY_BLAZE_BURNER = create(AllItems.EMPTY_BLAZE_BURNER).unlockedByTag(I::iron) - .viaShaped(b -> b.key('A', Blocks.IRON_BARS) - .key('I', I.ironSheet()) - .patternLine("II") - .patternLine("AA")), + .viaShaped(b -> b.define('A', Blocks.IRON_BARS) + .define('I', I.ironSheet()) + .pattern("II") + .pattern("AA")), CHUTE = create(AllBlocks.CHUTE).unlockedBy(I::andesite) .returns(4) - .viaShaped(b -> b.key('A', I.ironSheet()) - .key('I', I.andesite()) - .patternLine("II") - .patternLine("AA")), + .viaShaped(b -> b.define('A', I.ironSheet()) + .define('I', I.andesite()) + .pattern("II") + .pattern("AA")), SMART_CHUTE = create(AllBlocks.SMART_CHUTE).unlockedBy(AllBlocks.CHUTE::get) - .viaShaped(b -> b.key('P', I.electronTube()) - .key('S', AllBlocks.CHUTE.get()) - .key('I', I.brassSheet()) - .patternLine("I") - .patternLine("S") - .patternLine("P")), + .viaShaped(b -> b.define('P', I.electronTube()) + .define('S', AllBlocks.CHUTE.get()) + .define('I', I.brassSheet()) + .pattern("I") + .pattern("S") + .pattern("P")), DEPOT = create(AllBlocks.DEPOT).unlockedBy(I::andesiteCasing) - .viaShaped(b -> b.key('A', I.andesite()) - .key('I', I.andesiteCasing()) - .patternLine("A") - .patternLine("I")), + .viaShaped(b -> b.define('A', I.andesite()) + .define('I', I.andesiteCasing()) + .pattern("A") + .pattern("I")), WEIGHTED_EJECTOR = create(AllBlocks.WEIGHTED_EJECTOR).unlockedBy(I::andesiteCasing) - .viaShaped(b -> b.key('A', I.goldSheet()) - .key('D', AllBlocks.DEPOT.get()) - .key('I', I.cog()) - .patternLine("A") - .patternLine("D") - .patternLine("I")), + .viaShaped(b -> b.define('A', I.goldSheet()) + .define('D', AllBlocks.DEPOT.get()) + .define('I', I.cog()) + .pattern("A") + .pattern("D") + .pattern("I")), MECHANICAL_ARM = create(AllBlocks.MECHANICAL_ARM::get).unlockedBy(I::brassCasing) .returns(1) - .viaShaped(b -> b.key('L', I.brassSheet()) - .key('I', I.precisionMechanism()) - .key('A', I.andesite()) - .key('C', I.brassCasing()) - .patternLine("LLA") - .patternLine("L ") - .patternLine("IC ")), + .viaShaped(b -> b.define('L', I.brassSheet()) + .define('I', I.precisionMechanism()) + .define('A', I.andesite()) + .define('C', I.brassCasing()) + .pattern("LLA") + .pattern("L ") + .pattern("IC ")), MECHANICAL_MIXER = create(AllBlocks.MECHANICAL_MIXER).unlockedBy(I::andesite) - .viaShaped(b -> b.key('S', I.cog()) - .key('B', I.andesite()) - .key('C', I.andesiteCasing()) - .key('I', AllItems.WHISK.get()) - .patternLine(" B ") - .patternLine("SCS") - .patternLine(" I ")), + .viaShaped(b -> b.define('S', I.cog()) + .define('B', I.andesite()) + .define('C', I.andesiteCasing()) + .define('I', AllItems.WHISK.get()) + .pattern(" B ") + .pattern("SCS") + .pattern(" I ")), CLUTCH = create(AllBlocks.CLUTCH).unlockedBy(I::andesite) - .viaShaped(b -> b.key('S', I.shaft()) - .key('B', I.redstone()) - .key('C', I.andesiteCasing()) - .patternLine(" B ") - .patternLine("SCS") - .patternLine(" B ")), + .viaShaped(b -> b.define('S', I.shaft()) + .define('B', I.redstone()) + .define('C', I.andesiteCasing()) + .pattern(" B ") + .pattern("SCS") + .pattern(" B ")), GEARSHIFT = create(AllBlocks.GEARSHIFT).unlockedBy(I::andesite) - .viaShaped(b -> b.key('S', I.cog()) - .key('B', I.redstone()) - .key('C', I.andesiteCasing()) - .patternLine(" B ") - .patternLine("SCS") - .patternLine(" B ")), + .viaShaped(b -> b.define('S', I.cog()) + .define('B', I.redstone()) + .define('C', I.andesiteCasing()) + .pattern(" B ") + .pattern("SCS") + .pattern(" B ")), SAIL_FRAME = create(AllBlocks.SAIL_FRAME).returns(8) .unlockedBy(I::andesite) - .viaShaped(b -> b.key('A', I.andesite()) - .key('S', Tags.Items.RODS_WOODEN) - .patternLine("SSS") - .patternLine("SAS") - .patternLine("SSS")), + .viaShaped(b -> b.define('A', I.andesite()) + .define('S', Tags.Items.RODS_WOODEN) + .pattern("SSS") + .pattern("SAS") + .pattern("SSS")), SAIL = create(AllBlocks.SAIL).returns(8) .unlockedBy(AllBlocks.SAIL_FRAME::get) - .viaShaped(b -> b.key('F', AllBlocks.SAIL_FRAME.get()) - .key('W', ItemTags.WOOL) - .patternLine("FFF") - .patternLine("FWF") - .patternLine("FFF")), + .viaShaped(b -> b.define('F', AllBlocks.SAIL_FRAME.get()) + .define('W', ItemTags.WOOL) + .pattern("FFF") + .pattern("FWF") + .pattern("FFF")), RADIAL_CHASIS = create(AllBlocks.RADIAL_CHASSIS).returns(3) .unlockedBy(I::andesite) - .viaShaped(b -> b.key('P', I.andesite()) - .key('L', ItemTags.LOGS) - .patternLine(" L ") - .patternLine("PLP") - .patternLine(" L ")), + .viaShaped(b -> b.define('P', I.andesite()) + .define('L', ItemTags.LOGS) + .pattern(" L ") + .pattern("PLP") + .pattern(" L ")), LINEAR_CHASIS = create(AllBlocks.LINEAR_CHASSIS).returns(3) .unlockedBy(I::andesite) - .viaShaped(b -> b.key('P', I.andesite()) - .key('L', ItemTags.LOGS) - .patternLine(" P ") - .patternLine("LLL") - .patternLine(" P ")), + .viaShaped(b -> b.define('P', I.andesite()) + .define('L', ItemTags.LOGS) + .pattern(" P ") + .pattern("LLL") + .pattern(" P ")), LINEAR_CHASSIS_CYCLE = conversionCycle(ImmutableList.of(AllBlocks.LINEAR_CHASSIS, AllBlocks.SECONDARY_LINEAR_CHASSIS)), STICKER = create(AllBlocks.STICKER).returns(1) .unlockedBy(I::andesite) - .viaShaped(b -> b.key('I', I.andesite()) - .key('C', Tags.Items.COBBLESTONE) - .key('R', I.redstone()) - .key('S', Tags.Items.SLIMEBALLS) - .patternLine("ISI") - .patternLine("CRC")), + .viaShaped(b -> b.define('I', I.andesite()) + .define('C', Tags.Items.COBBLESTONE) + .define('R', I.redstone()) + .define('S', Tags.Items.SLIMEBALLS) + .pattern("ISI") + .pattern("CRC")), MINECART = create(() -> Items.MINECART).withSuffix("_from_contraption_cart") .unlockedBy(AllBlocks.CART_ASSEMBLER::get) - .viaShapeless(b -> b.addIngredient(AllItems.MINECART_CONTRAPTION.get())), + .viaShapeless(b -> b.requires(AllItems.MINECART_CONTRAPTION.get())), FURNACE_MINECART = create(() -> Items.FURNACE_MINECART).withSuffix("_from_contraption_cart") .unlockedBy(AllBlocks.CART_ASSEMBLER::get) - .viaShapeless(b -> b.addIngredient(AllItems.FURNACE_MINECART_CONTRAPTION.get())), + .viaShapeless(b -> b.requires(AllItems.FURNACE_MINECART_CONTRAPTION.get())), GEARBOX = create(AllBlocks.GEARBOX).unlockedBy(I::cog) - .viaShaped(b -> b.key('C', I.cog()) - .key('B', I.andesiteCasing()) - .patternLine(" C ") - .patternLine("CBC") - .patternLine(" C ")), + .viaShaped(b -> b.define('C', I.cog()) + .define('B', I.andesiteCasing()) + .pattern(" C ") + .pattern("CBC") + .pattern(" C ")), GEARBOX_CYCLE = conversionCycle(ImmutableList.of(AllBlocks.GEARBOX, AllItems.VERTICAL_GEARBOX)), MYSTERIOUS_CUCKOO_CLOCK = create(AllBlocks.MYSTERIOUS_CUCKOO_CLOCK).unlockedBy(AllBlocks.CUCKOO_CLOCK::get) - .viaShaped(b -> b.key('C', Tags.Items.GUNPOWDER) - .key('B', AllBlocks.CUCKOO_CLOCK.get()) - .patternLine(" C ") - .patternLine("CBC") - .patternLine(" C ")), + .viaShaped(b -> b.define('C', Tags.Items.GUNPOWDER) + .define('B', AllBlocks.CUCKOO_CLOCK.get()) + .pattern(" C ") + .pattern("CBC") + .pattern(" C ")), ENCASED_CHAIN_DRIVE = create(AllBlocks.ENCASED_CHAIN_DRIVE).returns(2) .unlockedBy(I::andesiteCasing) - .viaShaped(b -> b.key('S', I.shaft()) - .key('B', Tags.Items.NUGGETS_IRON) - .key('C', I.andesiteCasing()) - .patternLine(" B ") - .patternLine("SCS") - .patternLine(" B ")), + .viaShaped(b -> b.define('S', I.shaft()) + .define('B', Tags.Items.NUGGETS_IRON) + .define('C', I.andesiteCasing()) + .pattern(" B ") + .pattern("SCS") + .pattern(" B ")), SPEEDOMETER = create(AllBlocks.SPEEDOMETER).unlockedBy(I::andesite) - .viaShaped(b -> b.key('C', Items.COMPASS) - .key('A', I.andesiteCasing()) - .key('S', I.shaft()) - .patternLine(" C ") - .patternLine("SAS")), + .viaShaped(b -> b.define('C', Items.COMPASS) + .define('A', I.andesiteCasing()) + .define('S', I.shaft()) + .pattern(" C ") + .pattern("SAS")), GAUGE_CYCLE = conversionCycle(ImmutableList.of(AllBlocks.SPEEDOMETER, AllBlocks.STRESSOMETER)), ROTATION_SPEED_CONTROLLER = create(AllBlocks.ROTATION_SPEED_CONTROLLER).unlockedBy(I::brassCasing) - .viaShaped(b -> b.key('B', I.precisionMechanism()) - .key('C', I.brassCasing()) - .key('S', I.shaft()) - .patternLine(" B ") - .patternLine("SCS")), + .viaShaped(b -> b.define('B', I.precisionMechanism()) + .define('C', I.brassCasing()) + .define('S', I.shaft()) + .pattern(" B ") + .pattern("SCS")), NIXIE_TUBE = create(AllBlocks.ORANGE_NIXIE_TUBE).unlockedBy(I::brassCasing) - .viaShaped(b -> b.key('E', I.electronTube()) - .key('B', I.brassCasing()) - .patternLine("EBE")), + .viaShaped(b -> b.define('E', I.electronTube()) + .define('B', I.brassCasing()) + .pattern("EBE")), MECHANICAL_SAW = create(AllBlocks.MECHANICAL_SAW).unlockedBy(I::andesiteCasing) - .viaShaped(b -> b.key('C', I.andesiteCasing()) - .key('A', I.ironSheet()) - .key('I', I.iron()) - .patternLine(" A ") - .patternLine("AIA") - .patternLine(" C ")), + .viaShaped(b -> b.define('C', I.andesiteCasing()) + .define('A', I.ironSheet()) + .define('I', I.iron()) + .pattern(" A ") + .pattern("AIA") + .pattern(" C ")), MECHANICAL_HARVESTER = create(AllBlocks.MECHANICAL_HARVESTER).unlockedBy(I::andesiteCasing) - .viaShaped(b -> b.key('C', I.andesiteCasing()) - .key('A', I.andesite()) - .key('I', I.ironSheet()) - .patternLine("AIA") - .patternLine("AIA") - .patternLine(" C ")), + .viaShaped(b -> b.define('C', I.andesiteCasing()) + .define('A', I.andesite()) + .define('I', I.ironSheet()) + .pattern("AIA") + .pattern("AIA") + .pattern(" C ")), MECHANICAL_PLOUGH = create(AllBlocks.MECHANICAL_PLOUGH).unlockedBy(I::andesiteCasing) - .viaShaped(b -> b.key('C', I.andesiteCasing()) - .key('A', I.andesite()) - .key('I', I.ironSheet()) - .patternLine("III") - .patternLine("AAA") - .patternLine(" C ")), + .viaShaped(b -> b.define('C', I.andesiteCasing()) + .define('A', I.andesite()) + .define('I', I.ironSheet()) + .pattern("III") + .pattern("AAA") + .pattern(" C ")), MECHANICAL_DRILL = create(AllBlocks.MECHANICAL_DRILL).unlockedBy(I::andesiteCasing) - .viaShaped(b -> b.key('C', I.andesiteCasing()) - .key('A', I.andesite()) - .key('I', I.iron()) - .patternLine(" A ") - .patternLine("AIA") - .patternLine(" C ")), + .viaShaped(b -> b.define('C', I.andesiteCasing()) + .define('A', I.andesite()) + .define('I', I.iron()) + .pattern(" A ") + .pattern("AIA") + .pattern(" C ")), SEQUENCED_GEARSHIFT = create(AllBlocks.SEQUENCED_GEARSHIFT).unlockedBy(I::brassCasing) - .viaShaped(b -> b.key('B', I.electronTube()) - .key('S', I.cog()) - .key('C', I.brassCasing()) - .key('I', Items.CLOCK) - .patternLine(" B ") - .patternLine("SCS") - .patternLine(" I ")) + .viaShaped(b -> b.define('B', I.electronTube()) + .define('S', I.cog()) + .define('C', I.brassCasing()) + .define('I', Items.CLOCK) + .pattern(" B ") + .pattern("SCS") + .pattern(" I ")) ; @@ -779,111 +783,111 @@ public class StandardRecipeGen extends CreateRecipeProvider { REDSTONE_CONTACT = create(AllBlocks.REDSTONE_CONTACT).returns(2) .unlockedBy(I::brassCasing) - .viaShaped(b -> b.key('W', I.redstone()) - .key('C', Blocks.COBBLESTONE) - .key('S', I.ironSheet()) - .patternLine(" S ") - .patternLine("CWC") - .patternLine("CCC")), + .viaShaped(b -> b.define('W', I.redstone()) + .define('C', Blocks.COBBLESTONE) + .define('S', I.ironSheet()) + .pattern(" S ") + .pattern("CWC") + .pattern("CCC")), ANDESITE_FUNNEL = create(AllBlocks.ANDESITE_FUNNEL).returns(2) .unlockedBy(I::andesite) - .viaShaped(b -> b.key('A', I.andesite()) - .key('K', Items.DRIED_KELP) - .patternLine("AKA") - .patternLine(" K ")), + .viaShaped(b -> b.define('A', I.andesite()) + .define('K', Items.DRIED_KELP) + .pattern("AKA") + .pattern(" K ")), BRASS_FUNNEL = create(AllBlocks.BRASS_FUNNEL).returns(2) .unlockedByTag(I::brass) - .viaShaped(b -> b.key('A', I.brass()) - .key('K', Items.DRIED_KELP) - .key('E', I.electronTube()) - .patternLine("AEA") - .patternLine(" K ")), + .viaShaped(b -> b.define('A', I.brass()) + .define('K', Items.DRIED_KELP) + .define('E', I.electronTube()) + .pattern("AEA") + .pattern(" K ")), ANDESITE_TUNNEL = create(AllBlocks.ANDESITE_TUNNEL).returns(2) .unlockedBy(I::andesite) - .viaShaped(b -> b.key('A', I.andesite()) - .key('K', Items.DRIED_KELP) - .patternLine("AA") - .patternLine("KK")), + .viaShaped(b -> b.define('A', I.andesite()) + .define('K', Items.DRIED_KELP) + .pattern("AA") + .pattern("KK")), BRASS_TUNNEL = create(AllBlocks.BRASS_TUNNEL).returns(2) .unlockedByTag(I::brass) - .viaShaped(b -> b.key('A', I.brass()) - .key('K', Items.DRIED_KELP) - .key('E', I.electronTube()) - .patternLine("E ") - .patternLine("AA") - .patternLine("KK")), + .viaShaped(b -> b.define('A', I.brass()) + .define('K', Items.DRIED_KELP) + .define('E', I.electronTube()) + .pattern("E ") + .pattern("AA") + .pattern("KK")), ADJUSTABLE_CRATE = create(AllBlocks.ADJUSTABLE_CRATE).returns(4) .unlockedBy(I::brassCasing) - .viaShaped(b -> b.key('B', I.brassCasing()) - .patternLine("BBB") - .patternLine("B B") - .patternLine("BBB")), + .viaShaped(b -> b.define('B', I.brassCasing()) + .pattern("BBB") + .pattern("B B") + .pattern("BBB")), BELT_OBSERVER = create(AllBlocks.CONTENT_OBSERVER).unlockedBy(AllItems.BELT_CONNECTOR::get) - .viaShaped(b -> b.key('B', I.brassCasing()) - .key('R', I.redstone()) - .key('I', I.iron()) - .key('C', Blocks.OBSERVER) - .patternLine("RCI") - .patternLine(" B ")), + .viaShaped(b -> b.define('B', I.brassCasing()) + .define('R', I.redstone()) + .define('I', I.iron()) + .define('C', Blocks.OBSERVER) + .pattern("RCI") + .pattern(" B ")), STOCKPILE_SWITCH = create(AllBlocks.STOCKPILE_SWITCH).unlockedBy(I::brassCasing) - .viaShaped(b -> b.key('B', I.brassCasing()) - .key('R', I.redstone()) - .key('I', I.iron()) - .key('C', Blocks.COMPARATOR) - .patternLine("RCI") - .patternLine(" B ")), + .viaShaped(b -> b.define('B', I.brassCasing()) + .define('R', I.redstone()) + .define('I', I.iron()) + .define('C', Blocks.COMPARATOR) + .pattern("RCI") + .pattern(" B ")), ADJUSTABLE_REPEATER = create(AllBlocks.ADJUSTABLE_REPEATER).unlockedByTag(I::redstone) - .viaShaped(b -> b.key('T', Blocks.REDSTONE_TORCH) - .key('C', Items.CLOCK) - .key('R', I.redstone()) - .key('S', I.stone()) - .patternLine("RCT") - .patternLine("SSS")), + .viaShaped(b -> b.define('T', Blocks.REDSTONE_TORCH) + .define('C', Items.CLOCK) + .define('R', I.redstone()) + .define('S', I.stone()) + .pattern("RCT") + .pattern("SSS")), ADJUSTABLE_PULSE_REPEATER = create(AllBlocks.ADJUSTABLE_PULSE_REPEATER).unlockedByTag(I::redstone) - .viaShaped(b -> b.key('S', AllBlocks.PULSE_REPEATER.get()) - .key('P', AllBlocks.ADJUSTABLE_REPEATER.get()) - .patternLine("SP")), + .viaShaped(b -> b.define('S', AllBlocks.PULSE_REPEATER.get()) + .define('P', AllBlocks.ADJUSTABLE_REPEATER.get()) + .pattern("SP")), PULSE_REPEATER = create(AllBlocks.PULSE_REPEATER).unlockedByTag(I::redstone) - .viaShaped(b -> b.key('T', Blocks.REDSTONE_TORCH) - .key('R', I.redstone()) - .key('S', I.stone()) - .patternLine("RRT") - .patternLine("SSS")), + .viaShaped(b -> b.define('T', Blocks.REDSTONE_TORCH) + .define('R', I.redstone()) + .define('S', I.stone()) + .pattern("RRT") + .pattern("SSS")), POWERED_TOGGLE_LATCH = create(AllBlocks.POWERED_TOGGLE_LATCH).unlockedByTag(I::redstone) - .viaShaped(b -> b.key('T', Blocks.REDSTONE_TORCH) - .key('C', Blocks.LEVER) - .key('S', I.stone()) - .patternLine(" T ") - .patternLine(" C ") - .patternLine("SSS")), + .viaShaped(b -> b.define('T', Blocks.REDSTONE_TORCH) + .define('C', Blocks.LEVER) + .define('S', I.stone()) + .pattern(" T ") + .pattern(" C ") + .pattern("SSS")), POWERED_LATCH = create(AllBlocks.POWERED_LATCH).unlockedByTag(I::redstone) - .viaShaped(b -> b.key('T', Blocks.REDSTONE_TORCH) - .key('C', Blocks.LEVER) - .key('R', I.redstone()) - .key('S', I.stone()) - .patternLine(" T ") - .patternLine("RCR") - .patternLine("SSS")), + .viaShaped(b -> b.define('T', Blocks.REDSTONE_TORCH) + .define('C', Blocks.LEVER) + .define('R', I.redstone()) + .define('S', I.stone()) + .pattern(" T ") + .pattern("RCR") + .pattern("SSS")), REDSTONE_LINK = create(AllBlocks.REDSTONE_LINK).returns(2) .unlockedByTag(I::brass) - .viaShaped(b -> b.key('C', Blocks.REDSTONE_TORCH) - .key('S', I.brassSheet()) - .key('I', ItemTags.PLANKS) - .patternLine(" C") - .patternLine("SIS")) + .viaShaped(b -> b.define('C', Blocks.REDSTONE_TORCH) + .define('S', I.brassSheet()) + .define('I', ItemTags.PLANKS) + .pattern(" C") + .pattern("SIS")) ; @@ -892,29 +896,29 @@ public class StandardRecipeGen extends CreateRecipeProvider { GeneratedRecipe SCHEMATIC_TABLE = create(AllBlocks.SCHEMATIC_TABLE).unlockedBy(AllItems.EMPTY_SCHEMATIC::get) - .viaShaped(b -> b.key('W', ItemTags.WOODEN_SLABS) - .key('S', Blocks.SMOOTH_STONE) - .patternLine("WWW") - .patternLine(" S ") - .patternLine(" S ")), + .viaShaped(b -> b.define('W', ItemTags.WOODEN_SLABS) + .define('S', Blocks.SMOOTH_STONE) + .pattern("WWW") + .pattern(" S ") + .pattern(" S ")), SCHEMATICANNON = create(AllBlocks.SCHEMATICANNON).unlockedBy(AllItems.EMPTY_SCHEMATIC::get) - .viaShaped(b -> b.key('L', ItemTags.LOGS) - .key('D', Blocks.DISPENSER) - .key('C', Blocks.CAULDRON) - .key('S', Blocks.SMOOTH_STONE) - .key('I', Blocks.IRON_BLOCK) - .patternLine(" C ") - .patternLine("LDL") - .patternLine("SIS")), + .viaShaped(b -> b.define('L', ItemTags.LOGS) + .define('D', Blocks.DISPENSER) + .define('C', Blocks.CAULDRON) + .define('S', Blocks.SMOOTH_STONE) + .define('I', Blocks.IRON_BLOCK) + .pattern(" C ") + .pattern("LDL") + .pattern("SIS")), EMPTY_SCHEMATIC = create(AllItems.EMPTY_SCHEMATIC).unlockedBy(() -> Items.PAPER) - .viaShapeless(b -> b.addIngredient(Items.PAPER) - .addIngredient(Tags.Items.DYES_LIGHT_BLUE)), + .viaShapeless(b -> b.requires(Items.PAPER) + .requires(Tags.Items.DYES_LIGHT_BLUE)), SCHEMATIC_AND_QUILL = create(AllItems.SCHEMATIC_AND_QUILL).unlockedBy(() -> Items.PAPER) - .viaShapeless(b -> b.addIngredient(AllItems.EMPTY_SCHEMATIC.get()) - .addIngredient(Tags.Items.FEATHERS)) + .viaShapeless(b -> b.requires(AllItems.EMPTY_SCHEMATIC.get()) + .requires(Tags.Items.FEATHERS)) ; @@ -924,24 +928,24 @@ public class StandardRecipeGen extends CreateRecipeProvider { DARK_SCORIA = create(AllPaletteBlocks.DARK_SCORIA).returns(8) .unlockedBy(() -> AllPaletteBlocks.SCORIA.get()) - .viaShaped(b -> b.key('#', AllPaletteBlocks.SCORIA.get()) - .key('D', Tags.Items.DYES_BLACK) - .patternLine("###") - .patternLine("#D#") - .patternLine("###")), + .viaShaped(b -> b.define('#', AllPaletteBlocks.SCORIA.get()) + .define('D', Tags.Items.DYES_BLACK) + .pattern("###") + .pattern("#D#") + .pattern("###")), COPPER_SHINGLES = create(AllBlocks.COPPER_SHINGLES).returns(16) .unlockedByTag(I::copperSheet) - .viaShaped(b -> b.key('#', I.copperSheet()) - .patternLine("##") - .patternLine("##")), + .viaShaped(b -> b.define('#', I.copperSheet()) + .pattern("##") + .pattern("##")), COPPER_SHINGLES_FROM_TILES = create(AllBlocks.COPPER_SHINGLES).withSuffix("_from_tiles") .unlockedByTag(I::copperSheet) - .viaShapeless(b -> b.addIngredient(AllBlocks.COPPER_TILES.get())), + .viaShapeless(b -> b.requires(AllBlocks.COPPER_TILES.get())), COPPER_TILES = create(AllBlocks.COPPER_TILES).unlockedByTag(I::copperSheet) - .viaShapeless(b -> b.addIngredient(AllBlocks.COPPER_SHINGLES.get())) + .viaShapeless(b -> b.requires(AllBlocks.COPPER_SHINGLES.get())) ; @@ -950,52 +954,52 @@ public class StandardRecipeGen extends CreateRecipeProvider { GeneratedRecipe DOUGH = create(AllItems.DOUGH).unlockedBy(AllItems.WHEAT_FLOUR::get) - .viaShapeless(b -> b.addIngredient(AllItems.WHEAT_FLOUR.get()) - .addIngredient(Items.WATER_BUCKET)), + .viaShapeless(b -> b.requires(AllItems.WHEAT_FLOUR.get()) + .requires(Items.WATER_BUCKET)), DIVING_HELMET = create(AllItems.DIVING_HELMET).unlockedByTag(I::copper) - .viaShaped(b -> b.key('G', Tags.Items.GLASS) - .key('P', I.copper()) - .patternLine("PPP") - .patternLine("PGP")), + .viaShaped(b -> b.define('G', Tags.Items.GLASS) + .define('P', I.copper()) + .pattern("PPP") + .pattern("PGP")), COPPER_BACKTANK = create(AllItems.COPPER_BACKTANK).unlockedByTag(I::copper) - .viaShaped(b -> b.key('G', I.shaft()) - .key('A', I.andesite()) - .key('B', I.copperBlock()) - .key('P', I.copper()) - .patternLine("AGA") - .patternLine("PBP") - .patternLine(" P ")), + .viaShaped(b -> b.define('G', I.shaft()) + .define('A', I.andesite()) + .define('B', I.copperBlock()) + .define('P', I.copper()) + .pattern("AGA") + .pattern("PBP") + .pattern(" P ")), DIVING_BOOTS = create(AllItems.DIVING_BOOTS).unlockedByTag(I::copper) - .viaShaped(b -> b.key('G', I.andesite()) - .key('P', I.copper()) - .patternLine("P P") - .patternLine("P P") - .patternLine("G G")), + .viaShaped(b -> b.define('G', I.andesite()) + .define('P', I.copper()) + .pattern("P P") + .pattern("P P") + .pattern("G G")), LINKED_CONTROLLER = create(AllItems.LINKED_CONTROLLER).unlockedBy(AllBlocks.REDSTONE_LINK::get) - .viaShaped(b -> b.key('S', ItemTags.WOODEN_BUTTONS) - .key('P', AllBlocks.REDSTONE_LINK.get()) - .patternLine("SSS") - .patternLine(" P ") - .patternLine("SSS")), + .viaShaped(b -> b.define('S', ItemTags.WOODEN_BUTTONS) + .define('P', AllBlocks.REDSTONE_LINK.get()) + .pattern("SSS") + .pattern(" P ") + .pattern("SSS")), CRAFTING_BLUEPRINT = create(AllItems.CRAFTING_BLUEPRINT).unlockedBy(() -> Items.CRAFTING_TABLE) - .viaShapeless(b -> b.addIngredient(Items.PAINTING) - .addIngredient(Items.CRAFTING_TABLE)), + .viaShapeless(b -> b.requires(Items.PAINTING) + .requires(Items.CRAFTING_TABLE)), SLIME_BALL = create(() -> Items.SLIME_BALL).unlockedBy(AllItems.DOUGH::get) - .viaShapeless(b -> b.addIngredient(AllItems.DOUGH.get()) - .addIngredient(Tags.Items.DYES_LIME)), + .viaShapeless(b -> b.requires(AllItems.DOUGH.get()) + .requires(Tags.Items.DYES_LIME)), TREE_FERTILIZER = create(AllItems.TREE_FERTILIZER).returns(2) .unlockedBy(() -> Items.BONE_MEAL) - .viaShapeless(b -> b.addIngredient(Ingredient.fromTag(ItemTags.SMALL_FLOWERS), 2) - .addIngredient(Ingredient.fromItems(Items.HORN_CORAL, Items.BRAIN_CORAL, Items.TUBE_CORAL, + .viaShapeless(b -> b.requires(Ingredient.of(ItemTags.SMALL_FLOWERS), 2) + .requires(Ingredient.of(Items.HORN_CORAL, Items.BRAIN_CORAL, Items.TUBE_CORAL, Items.BUBBLE_CORAL, Items.FIRE_CORAL)) - .addIngredient(Items.BONE_MEAL)) + .requires(Items.BONE_MEAL)) ; @@ -1130,15 +1134,15 @@ public class StandardRecipeGen extends CreateRecipeProvider { result = create(nextEntry).withSuffix("_from_compacting") .unlockedBy(currentEntry::get) - .viaShaped(b -> b.patternLine("###") - .patternLine("###") - .patternLine("###") - .key('#', currentIngredient.get())); + .viaShaped(b -> b.pattern("###") + .pattern("###") + .pattern("###") + .define('#', currentIngredient.get())); result = create(currentEntry).returns(9) .withSuffix("_from_decompacting") .unlockedBy(nextEntry::get) - .viaShapeless(b -> b.addIngredient(nextIngredient.get())); + .viaShapeless(b -> b.requires(nextIngredient.get())); } return result; } @@ -1150,7 +1154,7 @@ public class StandardRecipeGen extends CreateRecipeProvider { ItemProviderEntry nextEntry = cycle.get((i + 1) % cycle.size()); result = create(nextEntry).withSuffix("from_conversion") .unlockedBy(currentEntry::get) - .viaShapeless(b -> b.addIngredient(currentEntry.get())); + .viaShapeless(b -> b.requires(currentEntry.get())); } return result; } @@ -1189,15 +1193,15 @@ public class StandardRecipeGen extends CreateRecipeProvider { } GeneratedRecipeBuilder unlockedBy(Supplier item) { - this.unlockedBy = () -> ItemPredicate.Builder.create() - .item(item.get()) + this.unlockedBy = () -> ItemPredicate.Builder.item() + .of(item.get()) .build(); return this; } GeneratedRecipeBuilder unlockedByTag(Supplier> tag) { - this.unlockedBy = () -> ItemPredicate.Builder.create() - .tag(tag.get()) + this.unlockedBy = () -> ItemPredicate.Builder.item() + .of(tag.get()) .build(); return this; } @@ -1222,19 +1226,19 @@ public class StandardRecipeGen extends CreateRecipeProvider { GeneratedRecipe viaShaped(UnaryOperator builder) { return register(consumer -> { - ShapedRecipeBuilder b = builder.apply(ShapedRecipeBuilder.shapedRecipe(result.get(), amount)); + ShapedRecipeBuilder b = builder.apply(ShapedRecipeBuilder.shaped(result.get(), amount)); if (unlockedBy != null) - b.addCriterion("has_item", hasItem(unlockedBy.get())); - b.build(consumer, createLocation("crafting")); + b.unlockedBy("has_item", inventoryTrigger(unlockedBy.get())); + b.save(consumer, createLocation("crafting")); }); } GeneratedRecipe viaShapeless(UnaryOperator builder) { return register(consumer -> { - ShapelessRecipeBuilder b = builder.apply(ShapelessRecipeBuilder.shapelessRecipe(result.get(), amount)); + ShapelessRecipeBuilder b = builder.apply(ShapelessRecipeBuilder.shapeless(result.get(), amount)); if (unlockedBy != null) - b.addCriterion("has_item", hasItem(unlockedBy.get())); - b.build(consumer, createLocation("crafting")); + b.unlockedBy("has_item", inventoryTrigger(unlockedBy.get())); + b.save(consumer, createLocation("crafting")); }); } @@ -1253,11 +1257,11 @@ public class StandardRecipeGen extends CreateRecipeProvider { } GeneratedCookingRecipeBuilder viaCooking(Supplier item) { - return unlockedBy(item).viaCookingIngredient(() -> Ingredient.fromItems(item.get())); + return unlockedBy(item).viaCookingIngredient(() -> Ingredient.of(item.get())); } GeneratedCookingRecipeBuilder viaCookingTag(Supplier> tag) { - return unlockedByTag(tag).viaCookingIngredient(() -> Ingredient.fromTag(tag.get())); + return unlockedByTag(tag).viaCookingIngredient(() -> Ingredient.of(tag.get())); } GeneratedCookingRecipeBuilder viaCookingIngredient(Supplier ingredient) { @@ -1270,9 +1274,9 @@ public class StandardRecipeGen extends CreateRecipeProvider { private float exp; private int cookingTime; - private final CookingRecipeSerializer FURNACE = IRecipeSerializer.SMELTING, - SMOKER = IRecipeSerializer.SMOKING, BLAST = IRecipeSerializer.BLASTING, - CAMPFIRE = IRecipeSerializer.CAMPFIRE_COOKING; + private final CookingRecipeSerializer FURNACE = IRecipeSerializer.SMELTING_RECIPE, + SMOKER = IRecipeSerializer.SMOKING_RECIPE, BLAST = IRecipeSerializer.BLASTING_RECIPE, + CAMPFIRE = IRecipeSerializer.CAMPFIRE_COOKING_RECIPE; GeneratedCookingRecipeBuilder(Supplier ingredient) { this.ingredient = ingredient; @@ -1323,11 +1327,11 @@ public class StandardRecipeGen extends CreateRecipeProvider { boolean isOtherMod = compatDatagenOutput != null; CookingRecipeBuilder b = builder.apply( - CookingRecipeBuilder.cookingRecipe(ingredient.get(), isOtherMod ? Items.DIRT : result.get(), + CookingRecipeBuilder.cooking(ingredient.get(), isOtherMod ? Items.DIRT : result.get(), exp, (int) (cookingTime * cookingTimeModifier), serializer)); if (unlockedBy != null) - b.addCriterion("has_item", hasItem(unlockedBy.get())); - b.build(result -> { + b.unlockedBy("has_item", inventoryTrigger(unlockedBy.get())); + b.save(result -> { consumer.accept( isOtherMod ? new ModdedCookingRecipeResult(result, compatDatagenOutput, recipeConditions) : result); @@ -1361,28 +1365,28 @@ public class StandardRecipeGen extends CreateRecipeProvider { } @Override - public ResourceLocation getID() { - return wrapped.getID(); + public ResourceLocation getId() { + return wrapped.getId(); } @Override - public IRecipeSerializer getSerializer() { - return wrapped.getSerializer(); + public IRecipeSerializer getType() { + return wrapped.getType(); } @Override - public JsonObject getAdvancementJson() { - return wrapped.getAdvancementJson(); + public JsonObject serializeAdvancement() { + return wrapped.serializeAdvancement(); } @Override - public ResourceLocation getAdvancementID() { - return wrapped.getAdvancementID(); + public ResourceLocation getAdvancementId() { + return wrapped.getAdvancementId(); } @Override - public void serialize(JsonObject object) { - wrapped.serialize(object); + public void serializeRecipeData(JsonObject object) { + wrapped.serializeRecipeData(object); object.addProperty("result", outputOverride.toString()); JsonArray conds = new JsonArray(); diff --git a/src/main/java/com/simibubi/create/foundation/data/recipe/WashingRecipeGen.java b/src/main/java/com/simibubi/create/foundation/data/recipe/WashingRecipeGen.java index 8f8bb2a0b..1ae416478 100644 --- a/src/main/java/com/simibubi/create/foundation/data/recipe/WashingRecipeGen.java +++ b/src/main/java/com/simibubi/create/foundation/data/recipe/WashingRecipeGen.java @@ -26,6 +26,8 @@ import net.minecraft.util.IItemProvider; import net.minecraft.util.ResourceLocation; import net.minecraftforge.common.Tags; +import com.simibubi.create.foundation.data.recipe.CreateRecipeProvider.GeneratedRecipe; + public class WashingRecipeGen extends ProcessingRecipeGen { GeneratedRecipe @@ -100,7 +102,7 @@ public class WashingRecipeGen extends ProcessingRecipeGen { ResourceLocation nugget = mod.nuggetOf(metalName); create(mod.getId() + "/" + crushed.getId() .getPath(), - b -> b.withItemIngredients(Ingredient.fromItems(crushed::get)) + b -> b.withItemIngredients(Ingredient.of(crushed::get)) .output(1, nugget, 10) .output(.5f, nugget, 5) .whenModLoaded(mod.getId())); diff --git a/src/main/java/com/simibubi/create/foundation/fluid/CombinedTankWrapper.java b/src/main/java/com/simibubi/create/foundation/fluid/CombinedTankWrapper.java index 8a25aa0fe..6639e9722 100644 --- a/src/main/java/com/simibubi/create/foundation/fluid/CombinedTankWrapper.java +++ b/src/main/java/com/simibubi/create/foundation/fluid/CombinedTankWrapper.java @@ -6,6 +6,8 @@ import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.capability.IFluidHandler; import net.minecraftforge.items.wrapper.EmptyHandler; +import net.minecraftforge.fluids.capability.IFluidHandler.FluidAction; + /** * Combines multiple IFluidHandlers into one interface (See CombinedInvWrapper * for items) diff --git a/src/main/java/com/simibubi/create/foundation/fluid/FluidHelper.java b/src/main/java/com/simibubi/create/foundation/fluid/FluidHelper.java index b6494e1d9..2ec01040d 100644 --- a/src/main/java/com/simibubi/create/foundation/fluid/FluidHelper.java +++ b/src/main/java/com/simibubi/create/foundation/fluid/FluidHelper.java @@ -48,9 +48,9 @@ public class FluidHelper { } public static boolean hasBlockState(Fluid fluid) { - BlockState blockState = fluid.getDefaultState() - .getBlockState(); - return blockState != null && blockState != Blocks.AIR.getDefaultState(); + BlockState blockState = fluid.defaultFluidState() + .createLegacyBlock(); + return blockState != null && blockState != Blocks.AIR.defaultBlockState(); } public static FluidStack copyStackWithAmount(FluidStack fs, int amount) { @@ -67,7 +67,7 @@ public class FluidHelper { if (fluid == Fluids.LAVA) return Fluids.FLOWING_LAVA; if (fluid instanceof ForgeFlowingFluid) - return ((ForgeFlowingFluid) fluid).getFlowingFluid(); + return ((ForgeFlowingFluid) fluid).getFlowing(); return fluid; } @@ -77,7 +77,7 @@ public class FluidHelper { if (fluid == Fluids.FLOWING_LAVA) return Fluids.LAVA; if (fluid instanceof ForgeFlowingFluid) - return ((ForgeFlowingFluid) fluid).getStillFluid(); + return ((ForgeFlowingFluid) fluid).getSource(); return fluid; } @@ -94,11 +94,11 @@ public class FluidHelper { } public static FluidStack deserializeFluidStack(JsonObject json) { - ResourceLocation id = new ResourceLocation(JSONUtils.getString(json, "fluid")); + ResourceLocation id = new ResourceLocation(JSONUtils.getAsString(json, "fluid")); Fluid fluid = ForgeRegistries.FLUIDS.getValue(id); if (fluid == null) throw new JsonSyntaxException("Unknown fluid '" + id + "'"); - int amount = JSONUtils.getInt(json, "amount"); + int amount = JSONUtils.getAsInt(json, "amount"); FluidStack stack = new FluidStack(fluid, amount); if (!json.has("nbt")) @@ -106,8 +106,8 @@ public class FluidHelper { try { JsonElement element = json.get("nbt"); - stack.setTag(JsonToNBT.getTagFromJson( - element.isJsonObject() ? Create.GSON.toJson(element) : JSONUtils.getString(element, "nbt"))); + stack.setTag(JsonToNBT.parseTag( + element.isJsonObject() ? Create.GSON.toJson(element) : JSONUtils.convertToString(element, "nbt"))); } catch (CommandSyntaxException e) { e.printStackTrace(); @@ -128,7 +128,7 @@ public class FluidHelper { if (tank == null || fluidStack.getAmount() != tank.fill(fluidStack, FluidAction.SIMULATE)) return false; - if (worldIn.isRemote) + if (worldIn.isClientSide) return true; ItemStack copyOfHeld = heldItem.copy(); @@ -137,9 +137,9 @@ public class FluidHelper { if (!player.isCreative() && !(te instanceof CreativeFluidTankTileEntity)) { if (copyOfHeld.isEmpty()) - player.setHeldItem(handIn, emptyingResult.getSecond()); + player.setItemInHand(handIn, emptyingResult.getSecond()); else { - player.setHeldItem(handIn, copyOfHeld); + player.setItemInHand(handIn, copyOfHeld); player.inventory.placeItemBackInInventory(worldIn, emptyingResult.getSecond()); } } @@ -167,7 +167,7 @@ public class FluidHelper { if (requiredAmountForItem > fluid.getAmount()) continue; - if (world.isRemote) + if (world.isClientSide) return true; if (player.isCreative() || te instanceof CreativeFluidTankTileEntity) diff --git a/src/main/java/com/simibubi/create/foundation/fluid/FluidIngredient.java b/src/main/java/com/simibubi/create/foundation/fluid/FluidIngredient.java index 1082cb755..65e9d416a 100644 --- a/src/main/java/com/simibubi/create/foundation/fluid/FluidIngredient.java +++ b/src/main/java/com/simibubi/create/foundation/fluid/FluidIngredient.java @@ -131,7 +131,7 @@ public abstract class FluidIngredient implements Predicate { if (!json.has("amount")) throw new JsonSyntaxException("Fluid ingredient has to define an amount"); - ingredient.amountRequired = JSONUtils.getInt(json, "amount"); + ingredient.amountRequired = JSONUtils.getAsInt(json, "amount"); return ingredient; } @@ -146,13 +146,13 @@ public abstract class FluidIngredient implements Predicate { void fixFlowing() { if (fluid instanceof FlowingFluid) - fluid = ((FlowingFluid) fluid).getStillFluid(); + fluid = ((FlowingFluid) fluid).getSource(); } @Override protected boolean testInternal(FluidStack t) { if (!t.getFluid() - .isEquivalentTo(fluid)) + .isSame(fluid)) return false; if (tagToMatch.isEmpty()) return true; @@ -165,13 +165,13 @@ public abstract class FluidIngredient implements Predicate { @Override protected void readInternal(PacketBuffer buffer) { fluid = buffer.readRegistryId(); - tagToMatch = buffer.readCompoundTag(); + tagToMatch = buffer.readNbt(); } @Override protected void writeInternal(PacketBuffer buffer) { buffer.writeRegistryId(fluid); - buffer.writeCompoundTag(tagToMatch); + buffer.writeNbt(tagToMatch); } @Override @@ -205,10 +205,10 @@ public abstract class FluidIngredient implements Predicate { if (tag == null) for (FluidStack accepted : getMatchingFluidStacks()) if (accepted.getFluid() - .isEquivalentTo(t.getFluid())) + .isSame(t.getFluid())) return true; return t.getFluid() - .isIn(tag); + .is(tag); } @Override @@ -230,10 +230,10 @@ public abstract class FluidIngredient implements Predicate { @Override protected void readInternal(JsonObject json) { - ResourceLocation id = new ResourceLocation(JSONUtils.getString(json, "fluidTag")); - Optional> optionalINamedTag = FluidTags.getRequiredTags() + ResourceLocation id = new ResourceLocation(JSONUtils.getAsString(json, "fluidTag")); + Optional> optionalINamedTag = FluidTags.getWrappers() .stream() - .filter(fluidINamedTag -> fluidINamedTag.getId() + .filter(fluidINamedTag -> fluidINamedTag.getName() .equals(id)) .findFirst(); // fixme if (!optionalINamedTag.isPresent()) @@ -243,17 +243,17 @@ public abstract class FluidIngredient implements Predicate { @Override protected void writeInternal(JsonObject json) { - json.addProperty("fluidTag", tag.getId() + json.addProperty("fluidTag", tag.getName() .toString()); } @Override protected List determineMatchingFluidStacks() { - return tag.values() + return tag.getValues() .stream() .map(f -> { if (f instanceof FlowingFluid) - return ((FlowingFluid) f).getStillFluid(); + return ((FlowingFluid) f).getSource(); return f; }) .distinct() diff --git a/src/main/java/com/simibubi/create/foundation/fluid/FluidRenderer.java b/src/main/java/com/simibubi/create/foundation/fluid/FluidRenderer.java index a87676674..3415ddf52 100644 --- a/src/main/java/com/simibubi/create/foundation/fluid/FluidRenderer.java +++ b/src/main/java/com/simibubi/create/foundation/fluid/FluidRenderer.java @@ -46,7 +46,7 @@ public class FluidRenderer { Fluid fluid = fluidStack.getFluid(); FluidAttributes fluidAttributes = fluid.getAttributes(); Function spriteAtlas = Minecraft.getInstance() - .getSpriteAtlas(PlayerContainer.BLOCK_ATLAS_TEXTURE); + .getTextureAtlas(PlayerContainer.BLOCK_ATLAS); TextureAtlasSprite flowTexture = spriteAtlas.apply(fluidAttributes.getFlowingTexture(fluidStack)); TextureAtlasSprite stillTexture = spriteAtlas.apply(fluidAttributes.getStillTexture(fluidStack)); @@ -59,7 +59,7 @@ public class FluidRenderer { direction = direction.getOpposite(); MatrixStacker msr = MatrixStacker.of(ms); - ms.push(); + ms.pushPose(); msr.centre() .rotateY(AngleHelper.horizontalAngle(direction)) .rotateX(direction == Direction.UP ? 0 : direction == Direction.DOWN ? 180 : 90) @@ -74,10 +74,10 @@ public class FluidRenderer { float yMax = y + MathHelper.clamp(progress * .5f - 1e-6f, 0, 1); for (int i = 0; i < 4; i++) { - ms.push(); + ms.pushPose(); renderTiledHorizontalFace(h, Direction.SOUTH, hMin, yMin, hMax, yMax, builder, ms, light, color, flowTexture); - ms.pop(); + ms.popPose(); msr.rotateY(90); } @@ -85,7 +85,7 @@ public class FluidRenderer { renderTiledVerticalFace(yMax, Direction.UP, hMin, hMin, hMax, hMax, builder, ms, light, color, stillTexture); - ms.pop(); + ms.popPose(); } public static void renderTiledFluidBB(FluidStack fluidStack, float xMin, float yMin, float zMin, float xMax, @@ -98,7 +98,7 @@ public class FluidRenderer { Fluid fluid = fluidStack.getFluid(); FluidAttributes fluidAttributes = fluid.getAttributes(); TextureAtlasSprite fluidTexture = Minecraft.getInstance() - .getSpriteAtlas(PlayerContainer.BLOCK_ATLAS_TEXTURE) + .getTextureAtlas(PlayerContainer.BLOCK_ATLAS) .apply(fluidAttributes.getStillTexture(fluidStack)); int color = fluidAttributes.getColor(fluidStack); @@ -108,7 +108,7 @@ public class FluidRenderer { Vector3d center = new Vector3d(xMin + (xMax - xMin) / 2, yMin + (yMax - yMin) / 2, zMin + (zMax - zMin) / 2); MatrixStacker msr = MatrixStacker.of(ms); - ms.push(); + ms.pushPose(); if (fluidStack.getFluid() .getAttributes() .isLighterThanAir()) @@ -123,7 +123,7 @@ public class FluidRenderer { if (side.getAxis() .isHorizontal()) { - ms.push(); + ms.pushPose(); if (side.getAxisDirection() == AxisDirection.NEGATIVE) msr.translate(center) @@ -135,7 +135,7 @@ public class FluidRenderer { renderTiledHorizontalFace(X ? xMax : zMax, side, X ? zMin : xMin, yMin, X ? zMax : xMax, yMax, builder, ms, light, darkColor, fluidTexture); - ms.pop(); + ms.popPose(); continue; } @@ -143,7 +143,7 @@ public class FluidRenderer { light, color, fluidTexture); } - ms.pop(); + ms.popPose(); } @@ -156,10 +156,10 @@ public class FluidRenderer { for (float z1 = zMin; z1 < zMax; z1 = z2) { z2 = Math.min((int) (z1 + 1), zMax); - float u1 = texture.getInterpolatedU(local(x1) * 16); - float v1 = texture.getInterpolatedV(local(z1) * 16); - float u2 = texture.getInterpolatedU(x2 == xMax ? local(x2) * 16 : 16); - float v2 = texture.getInterpolatedV(z2 == zMax ? local(z2) * 16 : 16); + float u1 = texture.getU(local(x1) * 16); + float v1 = texture.getV(local(z1) * 16); + float u2 = texture.getU(x2 == xMax ? local(x2) * 16 : 16); + float v2 = texture.getV(z2 == zMax ? local(z2) * 16 : 16); putVertex(builder, ms, x1, y, z2, color, u1, v2, face, light); putVertex(builder, ms, x2, y, z2, color, u2, v2, face, light); @@ -182,10 +182,10 @@ public class FluidRenderer { y2 = Math.min((int) (y1 + 1), yMax); int multiplier = texture.getWidth() == 32 ? 8 : 16; - float u1 = texture.getInterpolatedU(local(h1) * multiplier); - float v1 = texture.getInterpolatedV(local(y1) * multiplier); - float u2 = texture.getInterpolatedU(h2 == hMax ? local(h2) * multiplier : multiplier); - float v2 = texture.getInterpolatedV(y2 == yMax ? local(y2) * multiplier : multiplier); + float u1 = texture.getU(local(h1) * multiplier); + float v1 = texture.getV(local(y1) * multiplier); + float u2 = texture.getU(h2 == hMax ? local(h2) * multiplier : multiplier); + float v2 = texture.getV(y2 == yMax ? local(y2) * multiplier : multiplier); float x1 = X ? h : h1; float x2 = X ? h : h2; @@ -209,19 +209,19 @@ public class FluidRenderer { private static void putVertex(IVertexBuilder builder, MatrixStack ms, float x, float y, float z, int color, float u, float v, Direction face, int light) { - Vector3i n = face.getDirectionVec(); - Entry peek = ms.peek(); + Vector3i n = face.getNormal(); + Entry peek = ms.last(); int ff = 0xff; int a = color >> 24 & ff; int r = color >> 16 & ff; int g = color >> 8 & ff; int b = color & ff; - builder.vertex(peek.getModel(), x, y, z) + builder.vertex(peek.pose(), x, y, z) .color(r, g, b, a) - .texture(u, v) - .overlay(OverlayTexture.DEFAULT_UV) - .light(light) + .uv(u, v) + .overlayCoords(OverlayTexture.NO_OVERLAY) + .uv2(light) .normal(n.getX(), n.getY(), n.getZ()) .endVertex(); } diff --git a/src/main/java/com/simibubi/create/foundation/gui/AbstractSimiContainerScreen.java b/src/main/java/com/simibubi/create/foundation/gui/AbstractSimiContainerScreen.java index fe7b26623..acc765909 100644 --- a/src/main/java/com/simibubi/create/foundation/gui/AbstractSimiContainerScreen.java +++ b/src/main/java/com/simibubi/create/foundation/gui/AbstractSimiContainerScreen.java @@ -44,8 +44,8 @@ public abstract class AbstractSimiContainerScreen extends C } protected void setWindowSize(int width, int height) { - this.xSize = width; - this.ySize = height; + this.imageWidth = width; + this.imageHeight = height; } protected void setWindowOffset(int xOffset, int yOffset) { @@ -56,12 +56,12 @@ public abstract class AbstractSimiContainerScreen extends C @Override protected void init() { super.init(); - guiLeft += windowXOffset; - guiTop += windowYOffset; + leftPos += windowXOffset; + topPos += windowYOffset; } @Override - protected void drawForeground(MatrixStack p_230451_1_, int p_230451_2_, int p_230451_3_) { + protected void renderLabels(MatrixStack p_230451_1_, int p_230451_2_, int p_230451_3_) { // no-op to prevent screen- and inventory-title from being rendered at incorrect location // could also set this.titleX/Y and this.playerInventoryTitleX/Y to the proper values instead } @@ -69,7 +69,7 @@ public abstract class AbstractSimiContainerScreen extends C @Override public void render(MatrixStack matrixStack, int mouseX, int mouseY, float partialTicks) { partialTicks = Minecraft.getInstance() - .getRenderPartialTicks(); + .getFrameTime(); renderBackground(matrixStack); renderWindow(matrixStack, mouseX, mouseY, partialTicks); @@ -81,7 +81,7 @@ public abstract class AbstractSimiContainerScreen extends C RenderSystem.enableAlphaTest(); RenderSystem.enableBlend(); RenderSystem.disableRescaleNormal(); - RenderHelper.disableStandardItemLighting(); + RenderHelper.turnOff(); RenderSystem.disableLighting(); RenderSystem.disableDepthTest(); renderWindowForeground(matrixStack, mouseX, mouseY, partialTicks); @@ -107,8 +107,8 @@ public abstract class AbstractSimiContainerScreen extends C if (super.keyPressed(code, p_keyPressed_2_, p_keyPressed_3_)) return true; - InputMappings.Input mouseKey = InputMappings.getInputByCode(code, p_keyPressed_2_); - if (this.client.gameSettings.keyBindInventory.isActiveAndMatches(mouseKey)) { + InputMappings.Input mouseKey = InputMappings.getKey(code, p_keyPressed_2_); + if (this.minecraft.options.keyInventory.isActiveAndMatches(mouseKey)) { this.onClose(); return true; } @@ -146,18 +146,18 @@ public abstract class AbstractSimiContainerScreen extends C protected abstract void renderWindow(MatrixStack ms, int mouseX, int mouseY, float partialTicks); @Override - protected void drawBackground(MatrixStack p_230450_1_, float p_230450_2_, int p_230450_3_, int p_230450_4_) { + protected void renderBg(MatrixStack p_230450_1_, float p_230450_2_, int p_230450_3_, int p_230450_4_) { } protected void renderWindowForeground(MatrixStack matrixStack, int mouseX, int mouseY, float partialTicks) { - drawMouseoverTooltip(matrixStack, mouseX, mouseY); + renderTooltip(matrixStack, mouseX, mouseY); for (Widget widget : widgets) { if (!widget.isHovered()) continue; if (widget instanceof AbstractSimiWidget) { if (!((AbstractSimiWidget) widget).getToolTip().isEmpty()) - renderTooltip(matrixStack, ((AbstractSimiWidget) widget).getToolTip(), mouseX, mouseY); + renderComponentTooltip(matrixStack, ((AbstractSimiWidget) widget).getToolTip(), mouseX, mouseY); } else { widget.renderToolTip(matrixStack, mouseX, mouseY); @@ -166,8 +166,8 @@ public abstract class AbstractSimiContainerScreen extends C } public double getItemCountTextScale() { - int guiScaleFactor = (int) client.getWindow() - .getGuiScaleFactor(); + int guiScaleFactor = (int) minecraft.getWindow() + .getGuiScale(); double scale = 1; switch (guiScaleFactor) { case 1: @@ -194,7 +194,7 @@ public abstract class AbstractSimiContainerScreen extends C public void renderPlayerInventory(MatrixStack ms, int x, int y) { AllGuiTextures.PLAYER_INVENTORY.draw(ms, this, x, y); - textRenderer.draw(ms, playerInventory.getDisplayName(), x + 8, y + 6, 0x404040); + font.draw(ms, inventory.getDisplayName(), x + 8, y + 6, 0x404040); } /** @@ -221,7 +221,7 @@ public abstract class AbstractSimiContainerScreen extends C RenderSystem.disableAlphaTest(); RenderSystem.disableBlend(); Tessellator tessellator = Tessellator.getInstance(); - BufferBuilder bufferbuilder = tessellator.getBuffer(); + BufferBuilder bufferbuilder = tessellator.getBuilder(); double health = stack.getItem() .getDurabilityForDisplay(stack); int i = Math.round(13.0F - (float) health * 13.0F); @@ -242,19 +242,19 @@ public abstract class AbstractSimiContainerScreen extends C RenderSystem.disableLighting(); RenderSystem.disableDepthTest(); RenderSystem.disableBlend(); - matrixStack.push(); + matrixStack.pushPose(); - int guiScaleFactor = (int) client.getWindow() - .getGuiScaleFactor(); + int guiScaleFactor = (int) minecraft.getWindow() + .getGuiScale(); matrixStack.translate(xPosition + 16.5f, yPosition + 16.5f, 0); double scale = getItemCountTextScale(); matrixStack.scale((float) scale, (float) scale, 0); - matrixStack.translate(-fr.getStringWidth(s) - (guiScaleFactor > 1 ? 0 : -.5f), - -textRenderer.FONT_HEIGHT + (guiScaleFactor > 1 ? 1 : 1.75f), 0); - fr.drawWithShadow(matrixStack, s, 0, 0, textColor); + matrixStack.translate(-fr.width(s) - (guiScaleFactor > 1 ? 0 : -.5f), + -font.lineHeight + (guiScaleFactor > 1 ? 1 : 1.75f), 0); + fr.drawShadow(matrixStack, s, 0, 0, textColor); - matrixStack.pop(); + matrixStack.popPose(); RenderSystem.enableBlend(); RenderSystem.enableLighting(); RenderSystem.enableDepthTest(); @@ -280,12 +280,12 @@ public abstract class AbstractSimiContainerScreen extends C .color(red, green, blue, alpha) .endVertex(); Tessellator.getInstance() - .draw(); + .end(); } @Deprecated protected void debugWindowArea(MatrixStack matrixStack) { - fill(matrixStack, guiLeft + xSize, guiTop + ySize, guiLeft, guiTop, 0xD3D3D3D3); + fill(matrixStack, leftPos + imageWidth, topPos + imageHeight, leftPos, topPos, 0xD3D3D3D3); } @Deprecated diff --git a/src/main/java/com/simibubi/create/foundation/gui/AbstractSimiScreen.java b/src/main/java/com/simibubi/create/foundation/gui/AbstractSimiScreen.java index a9d07e4ec..1329ee837 100644 --- a/src/main/java/com/simibubi/create/foundation/gui/AbstractSimiScreen.java +++ b/src/main/java/com/simibubi/create/foundation/gui/AbstractSimiScreen.java @@ -62,9 +62,9 @@ public abstract class AbstractSimiScreen extends Screen { public void render(MatrixStack ms, int mouseX, int mouseY, float partialTicks) { partialTicks = partialTicks == 10 ? 0 : Minecraft.getInstance() - .getRenderPartialTicks(); + .getFrameTime(); - ms.push(); + ms.pushPose(); prepareFrame(); @@ -76,7 +76,7 @@ public abstract class AbstractSimiScreen extends Screen { endFrame(); - ms.pop(); + ms.popPose(); } protected void prepareFrame() { @@ -111,8 +111,8 @@ public abstract class AbstractSimiScreen extends Screen { if (super.keyPressed(code, p_keyPressed_2_, p_keyPressed_3_)) return true; - InputMappings.Input mouseKey = InputMappings.getInputByCode(code, p_keyPressed_2_); - if (this.client.gameSettings.keyBindInventory.isActiveAndMatches(mouseKey)) { + InputMappings.Input mouseKey = InputMappings.getKey(code, p_keyPressed_2_); + if (this.minecraft.options.keyInventory.isActiveAndMatches(mouseKey)) { this.onClose(); return true; } @@ -166,7 +166,7 @@ public abstract class AbstractSimiScreen extends Screen { if (widget instanceof AbstractSimiWidget) { if (!((AbstractSimiWidget) widget).getToolTip().isEmpty()) - renderTooltip(ms, ((AbstractSimiWidget) widget).getToolTip(), mouseX, mouseY); + renderComponentTooltip(ms, ((AbstractSimiWidget) widget).getToolTip(), mouseX, mouseY); } else { widget.renderToolTip(ms, mouseX, mouseY); diff --git a/src/main/java/com/simibubi/create/foundation/gui/AllGuiTextures.java b/src/main/java/com/simibubi/create/foundation/gui/AllGuiTextures.java index a063943d3..54e04197d 100644 --- a/src/main/java/com/simibubi/create/foundation/gui/AllGuiTextures.java +++ b/src/main/java/com/simibubi/create/foundation/gui/AllGuiTextures.java @@ -132,14 +132,14 @@ public enum AllGuiTextures implements IScreenRenderable { public void bind() { Minecraft.getInstance() .getTextureManager() - .bindTexture(location); + .bind(location); } @Override @OnlyIn(Dist.CLIENT) public void draw(MatrixStack ms, AbstractGui screen, int x, int y) { bind(); - screen.drawTexture(ms, x, y, startX, startY, width, height); + screen.blit(ms, x, y, startX, startY, width, height); } public void draw(MatrixStack ms, int x, int y, Color c) { diff --git a/src/main/java/com/simibubi/create/foundation/gui/AllIcons.java b/src/main/java/com/simibubi/create/foundation/gui/AllIcons.java index 3351867e7..23d28abe8 100644 --- a/src/main/java/com/simibubi/create/foundation/gui/AllIcons.java +++ b/src/main/java/com/simibubi/create/foundation/gui/AllIcons.java @@ -163,24 +163,24 @@ public class AllIcons implements IScreenRenderable { public void bind() { Minecraft.getInstance() .getTextureManager() - .bindTexture(ICON_ATLAS); + .bind(ICON_ATLAS); } @Override @OnlyIn(Dist.CLIENT) public void draw(MatrixStack matrixStack, AbstractGui screen, int x, int y) { bind(); - screen.drawTexture(matrixStack, x, y, iconX, iconY, 16, 16); + screen.blit(matrixStack, x, y, iconX, iconY, 16, 16); } @OnlyIn(Dist.CLIENT) public void draw(MatrixStack ms, IRenderTypeBuffer buffer, int color) { - IVertexBuilder builder = buffer.getBuffer(RenderType.getTextSeeThrough(ICON_ATLAS)); + IVertexBuilder builder = buffer.getBuffer(RenderType.textSeeThrough(ICON_ATLAS)); float sheetSize = 256; int i = 15 << 20 | 15 << 4; int j = i >> 16 & '\uffff'; int k = i & '\uffff'; - Entry peek = ms.peek(); + Entry peek = ms.last(); Vector3d rgb = ColorHelper.getRGB(color); Vector3d vec4 = new Vector3d(1, 1, 0); @@ -206,10 +206,10 @@ public class AllIcons implements IScreenRenderable { @OnlyIn(Dist.CLIENT) private void vertex(Entry peek, IVertexBuilder builder, int j, int k, Vector3d rgb, Vector3d vec, float u, float v) { - builder.vertex(peek.getModel(), (float) vec.x, (float) vec.y, (float) vec.z) + builder.vertex(peek.pose(), (float) vec.x, (float) vec.y, (float) vec.z) .color((float) rgb.x, (float) rgb.y, (float) rgb.z, 1) - .texture(u, v) - .light(j, k) + .uv(u, v) + .uv2(j, k) .endVertex(); } diff --git a/src/main/java/com/simibubi/create/foundation/gui/BoxElement.java b/src/main/java/com/simibubi/create/foundation/gui/BoxElement.java index 673b057b6..405413920 100644 --- a/src/main/java/com/simibubi/create/foundation/gui/BoxElement.java +++ b/src/main/java/com/simibubi/create/foundation/gui/BoxElement.java @@ -100,8 +100,8 @@ public class BoxElement extends RenderElement { Color c2 = ColorHelper.applyAlpha(borderTop, alpha); Color c3 = ColorHelper.applyAlpha(borderBot, alpha); Tessellator tessellator = Tessellator.getInstance(); - BufferBuilder b = tessellator.getBuffer(); - Matrix4f model = ms.peek().getModel(); + BufferBuilder b = tessellator.getBuilder(); + Matrix4f model = ms.last().pose(); b.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_COLOR); //outer top b.vertex(model, x - f - 1 , y - f - 2 , z).color(c1.getRed(), c1.getGreen(), c1.getBlue(), c1.getAlpha()).endVertex(); @@ -128,7 +128,7 @@ public class BoxElement extends RenderElement { b.vertex(model, x - f - 1 , y + f + 1 + height, z).color(c1.getRed(), c1.getGreen(), c1.getBlue(), c1.getAlpha()).endVertex(); b.vertex(model, x + f + 1 + width, y + f + 1 + height, z).color(c1.getRed(), c1.getGreen(), c1.getBlue(), c1.getAlpha()).endVertex(); b.vertex(model, x + f + 1 + width, y - f - 1 , z).color(c1.getRed(), c1.getGreen(), c1.getBlue(), c1.getAlpha()).endVertex(); - tessellator.draw(); + tessellator.end(); b.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_COLOR); //inner top - includes corners b.vertex(model, x - f - 1 , y - f - 1 , z).color(c2.getRed(), c2.getGreen(), c2.getBlue(), c2.getAlpha()).endVertex(); @@ -151,7 +151,7 @@ public class BoxElement extends RenderElement { b.vertex(model, x + f + 1 + width, y + f + height, z).color(c3.getRed(), c3.getGreen(), c3.getBlue(), c3.getAlpha()).endVertex(); b.vertex(model, x + f + 1 + width, y - f , z).color(c2.getRed(), c2.getGreen(), c2.getBlue(), c2.getAlpha()).endVertex(); - tessellator.draw(); + tessellator.end(); RenderSystem.shadeModel(GL11.GL_FLAT); RenderSystem.disableBlend(); diff --git a/src/main/java/com/simibubi/create/foundation/gui/ClearContainerPacket.java b/src/main/java/com/simibubi/create/foundation/gui/ClearContainerPacket.java index 4714c273c..24b961302 100644 --- a/src/main/java/com/simibubi/create/foundation/gui/ClearContainerPacket.java +++ b/src/main/java/com/simibubi/create/foundation/gui/ClearContainerPacket.java @@ -25,9 +25,9 @@ public class ClearContainerPacket extends SimplePacketBase { .getSender(); if (player == null) return; - if (!(player.openContainer instanceof IClearableContainer)) + if (!(player.containerMenu instanceof IClearableContainer)) return; - ((IClearableContainer) player.openContainer).clearContents(); + ((IClearableContainer) player.containerMenu).clearContents(); }); context.get() .setPacketHandled(true); diff --git a/src/main/java/com/simibubi/create/foundation/gui/CombinedStencilElement.java b/src/main/java/com/simibubi/create/foundation/gui/CombinedStencilElement.java index 374479c69..6382dce01 100644 --- a/src/main/java/com/simibubi/create/foundation/gui/CombinedStencilElement.java +++ b/src/main/java/com/simibubi/create/foundation/gui/CombinedStencilElement.java @@ -44,16 +44,16 @@ public class CombinedStencilElement extends StencilElement { @Override protected void renderStencil(MatrixStack ms) { - ms.push(); + ms.pushPose(); element1.transform(ms); element1.withBounds(width, height); element1.renderStencil(ms); - ms.pop(); - ms.push(); + ms.popPose(); + ms.pushPose(); element2.transform(ms); element2.withBounds(width, height); element2.renderStencil(ms); - ms.pop(); + ms.popPose(); } @Override diff --git a/src/main/java/com/simibubi/create/foundation/gui/ConfirmationScreen.java b/src/main/java/com/simibubi/create/foundation/gui/ConfirmationScreen.java index 7dcfd715b..849c1ff51 100644 --- a/src/main/java/com/simibubi/create/foundation/gui/ConfirmationScreen.java +++ b/src/main/java/com/simibubi/create/foundation/gui/ConfirmationScreen.java @@ -95,8 +95,8 @@ public class ConfirmationScreen extends AbstractSimiScreen { public void open(@Nonnull Screen source) { this.source = source; Minecraft client = source.getMinecraft(); - this.init(client, client.getWindow().getScaledWidth(), client.getWindow().getScaledHeight()); - this.client.currentScreen = this; + this.init(client, client.getWindow().getGuiScaledWidth(), client.getWindow().getGuiScaledHeight()); + this.minecraft.screen = this; } @Override @@ -112,9 +112,9 @@ public class ConfirmationScreen extends AbstractSimiScreen { ArrayList copy = new ArrayList<>(text); text.clear(); - copy.forEach(t -> text.addAll(client.fontRenderer.getTextHandler().wrapLines(t, 300, Style.EMPTY))); + copy.forEach(t -> text.addAll(minecraft.font.getSplitter().splitLines(t, 300, Style.EMPTY))); - textHeight = text.size() * (client.fontRenderer.FONT_HEIGHT + 1) + 4; + textHeight = text.size() * (minecraft.font.lineHeight + 1) + 4; textWidth = 300; if (centered) { @@ -136,7 +136,7 @@ public class ConfirmationScreen extends AbstractSimiScreen { int buttonX = x + textWidth / 2 - 6 - (int) (70 * (tristate ? 1.5f : 1)); TextStencilElement confirmText = - new TextStencilElement(client.fontRenderer, tristate ? "Save" : "Confirm").centered(true, true); + new TextStencilElement(minecraft.font, tristate ? "Save" : "Confirm").centered(true, true); confirm = new BoxWidget(buttonX, y + textHeight + 6, 70, 16).withCallback(() -> accept(Response.Confirm)); confirm.showingElement(confirmText.withElementRenderer(BoxWidget.gradientFactory.apply(confirm))); widgets.add(confirm); @@ -145,7 +145,7 @@ public class ConfirmationScreen extends AbstractSimiScreen { if (tristate) { TextStencilElement confirmDontSaveText = - new TextStencilElement(client.fontRenderer, "Don't Save").centered(true, true); + new TextStencilElement(minecraft.font, "Don't Save").centered(true, true); confirmDontSave = new BoxWidget(buttonX, y + textHeight + 6, 70, 16).withCallback(() -> accept(Response.ConfirmDontSave)); confirmDontSave.showingElement( @@ -154,7 +154,7 @@ public class ConfirmationScreen extends AbstractSimiScreen { buttonX += 12 + 70; } - TextStencilElement cancelText = new TextStencilElement(client.fontRenderer, "Cancel").centered(true, true); + TextStencilElement cancelText = new TextStencilElement(minecraft.font, "Cancel").centered(true, true); cancel = new BoxWidget(buttonX, y + textHeight + 6, 70, 16) .withCallback(() -> accept(Response.Cancel)); cancel.showingElement(cancelText.withElementRenderer(BoxWidget.gradientFactory.apply(cancel))); @@ -173,7 +173,7 @@ public class ConfirmationScreen extends AbstractSimiScreen { } private void accept(Response success) { - client.currentScreen = source; + minecraft.screen = source; action.accept(success); } @@ -181,10 +181,10 @@ public class ConfirmationScreen extends AbstractSimiScreen { protected void renderWindow(MatrixStack ms, int mouseX, int mouseY, float partialTicks) { textBackground.render(ms); - int offset = client.fontRenderer.FONT_HEIGHT + 1; + int offset = minecraft.font.lineHeight + 1; int lineY = y - offset; - ms.push(); + ms.pushPose(); ms.translate(0, 0, 200); for (ITextProperties line : text) { @@ -193,11 +193,11 @@ public class ConfirmationScreen extends AbstractSimiScreen { continue; int textX = x; if (text.size() == 1) - x = (width - client.fontRenderer.getWidth(line)) / 2; - client.fontRenderer.draw(ms, line.getString(), textX, lineY, 0xeaeaea); + x = (width - minecraft.font.width(line)) / 2; + minecraft.font.draw(ms, line.getString(), textX, lineY, 0xeaeaea); } - ms.pop(); + ms.popPose(); } @@ -215,14 +215,14 @@ public class ConfirmationScreen extends AbstractSimiScreen { @Override protected void prepareFrame() { Framebuffer thisBuffer = UIRenderHelper.framebuffer; - Framebuffer mainBuffer = Minecraft.getInstance().getFramebuffer(); + Framebuffer mainBuffer = Minecraft.getInstance().getMainRenderTarget(); GlCompat functions = Backend.getInstance().compat; - functions.fbo.bindFramebuffer(GL30.GL_READ_FRAMEBUFFER, mainBuffer.framebufferObject); - functions.fbo.bindFramebuffer(GL30.GL_DRAW_FRAMEBUFFER, thisBuffer.framebufferObject); - functions.blit.blitFramebuffer(0, 0, mainBuffer.framebufferWidth, mainBuffer.framebufferHeight, 0, 0, mainBuffer.framebufferWidth, mainBuffer.framebufferHeight, GL30.GL_COLOR_BUFFER_BIT, GL20.GL_LINEAR); + functions.fbo.bindFramebuffer(GL30.GL_READ_FRAMEBUFFER, mainBuffer.frameBufferId); + functions.fbo.bindFramebuffer(GL30.GL_DRAW_FRAMEBUFFER, thisBuffer.frameBufferId); + functions.blit.blitFramebuffer(0, 0, mainBuffer.viewWidth, mainBuffer.viewHeight, 0, 0, mainBuffer.viewWidth, mainBuffer.viewHeight, GL30.GL_COLOR_BUFFER_BIT, GL20.GL_LINEAR); - functions.fbo.bindFramebuffer(FramebufferConstants.FRAME_BUFFER, thisBuffer.framebufferObject); + functions.fbo.bindFramebuffer(FramebufferConstants.GL_FRAMEBUFFER, thisBuffer.frameBufferId); GL11.glClear(GL30.GL_STENCIL_BUFFER_BIT | GL30.GL_DEPTH_BUFFER_BIT); } @@ -231,14 +231,14 @@ public class ConfirmationScreen extends AbstractSimiScreen { protected void endFrame() { Framebuffer thisBuffer = UIRenderHelper.framebuffer; - Framebuffer mainBuffer = Minecraft.getInstance().getFramebuffer(); + Framebuffer mainBuffer = Minecraft.getInstance().getMainRenderTarget(); GlCompat functions = Backend.getInstance().compat; - functions.fbo.bindFramebuffer(GL30.GL_READ_FRAMEBUFFER, thisBuffer.framebufferObject); - functions.fbo.bindFramebuffer(GL30.GL_DRAW_FRAMEBUFFER, mainBuffer.framebufferObject); - functions.blit.blitFramebuffer(0, 0, mainBuffer.framebufferWidth, mainBuffer.framebufferHeight, 0, 0, mainBuffer.framebufferWidth, mainBuffer.framebufferHeight, GL30.GL_COLOR_BUFFER_BIT, GL20.GL_LINEAR); + functions.fbo.bindFramebuffer(GL30.GL_READ_FRAMEBUFFER, thisBuffer.frameBufferId); + functions.fbo.bindFramebuffer(GL30.GL_DRAW_FRAMEBUFFER, mainBuffer.frameBufferId); + functions.blit.blitFramebuffer(0, 0, mainBuffer.viewWidth, mainBuffer.viewHeight, 0, 0, mainBuffer.viewWidth, mainBuffer.viewHeight, GL30.GL_COLOR_BUFFER_BIT, GL20.GL_LINEAR); - functions.fbo.bindFramebuffer(FramebufferConstants.FRAME_BUFFER, mainBuffer.framebufferObject); + functions.fbo.bindFramebuffer(FramebufferConstants.GL_FRAMEBUFFER, mainBuffer.frameBufferId); } @Override diff --git a/src/main/java/com/simibubi/create/foundation/gui/CustomLightingSettings.java b/src/main/java/com/simibubi/create/foundation/gui/CustomLightingSettings.java index a66e908b0..392dc76fa 100644 --- a/src/main/java/com/simibubi/create/foundation/gui/CustomLightingSettings.java +++ b/src/main/java/com/simibubi/create/foundation/gui/CustomLightingSettings.java @@ -21,20 +21,20 @@ public class CustomLightingSettings implements ILightingSettings { } protected void init(float yRot1, float xRot1, float yRot2, float xRot2, boolean doubleLight) { - light1 = Vector3f.POSITIVE_Z.copy(); - light1.func_214905_a(Vector3f.POSITIVE_Y.getDegreesQuaternion(yRot1)); - light1.func_214905_a(Vector3f.POSITIVE_X.getDegreesQuaternion(xRot1)); + light1 = Vector3f.ZP.copy(); + light1.transform(Vector3f.YP.rotationDegrees(yRot1)); + light1.transform(Vector3f.XP.rotationDegrees(xRot1)); if (doubleLight) { - light2 = Vector3f.POSITIVE_Z.copy(); - light2.func_214905_a(Vector3f.POSITIVE_Y.getDegreesQuaternion(yRot2)); - light2.func_214905_a(Vector3f.POSITIVE_X.getDegreesQuaternion(xRot2)); + light2 = Vector3f.ZP.copy(); + light2.transform(Vector3f.YP.rotationDegrees(yRot2)); + light2.transform(Vector3f.XP.rotationDegrees(xRot2)); } else { light2 = VecHelper.ZERO_3F; } lightMatrix = new Matrix4f(); - lightMatrix.loadIdentity(); + lightMatrix.setIdentity(); } @Override diff --git a/src/main/java/com/simibubi/create/foundation/gui/GhostItemContainer.java b/src/main/java/com/simibubi/create/foundation/gui/GhostItemContainer.java index 5c553ebce..d2b00bea3 100644 --- a/src/main/java/com/simibubi/create/foundation/gui/GhostItemContainer.java +++ b/src/main/java/com/simibubi/create/foundation/gui/GhostItemContainer.java @@ -50,7 +50,7 @@ public abstract class GhostItemContainer extends Container implements ICleara ghostInventory = createGhostInventory(); readData(contentHolder); addSlots(); - detectAndSendChanges(); + broadcastChanges(); } @Override @@ -68,22 +68,22 @@ public abstract class GhostItemContainer extends Container implements ICleara } @Override - public boolean canMergeSlot(ItemStack stack, Slot slotIn) { - return slotIn.inventory == playerInventory; + public boolean canTakeItemForPickAll(ItemStack stack, Slot slotIn) { + return slotIn.container == playerInventory; } @Override - public boolean canDragIntoSlot(Slot slotIn) { + public boolean canDragTo(Slot slotIn) { if (allowRepeats()) return true; - return slotIn.inventory == playerInventory; + return slotIn.container == playerInventory; } @Override - public ItemStack slotClick(int slotId, int dragType, ClickType clickTypeIn, PlayerEntity player) { - ItemStack held = playerInventory.getItemStack(); + public ItemStack clicked(int slotId, int dragType, ClickType clickTypeIn, PlayerEntity player) { + ItemStack held = playerInventory.getCarried(); if (slotId < 36) - return super.slotClick(slotId, dragType, clickTypeIn, player); + return super.clicked(slotId, dragType, clickTypeIn, player); if (clickTypeIn == ClickType.THROW) return ItemStack.EMPTY; @@ -93,7 +93,7 @@ public abstract class GhostItemContainer extends Container implements ICleara ItemStack stackInSlot = ghostInventory.getStackInSlot(slot) .copy(); stackInSlot.setCount(stackInSlot.getMaxStackSize()); - playerInventory.setItemStack(stackInSlot); + playerInventory.setCarried(stackInSlot); return ItemStack.EMPTY; } return ItemStack.EMPTY; @@ -101,21 +101,21 @@ public abstract class GhostItemContainer extends Container implements ICleara if (held.isEmpty()) { ghostInventory.setStackInSlot(slot, ItemStack.EMPTY); - getSlot(slotId).onSlotChanged(); + getSlot(slotId).setChanged(); return ItemStack.EMPTY; } ItemStack insert = held.copy(); insert.setCount(1); ghostInventory.setStackInSlot(slot, insert); - getSlot(slotId).onSlotChanged(); + getSlot(slotId).setChanged(); return held; } @Override - public ItemStack transferStackInSlot(PlayerEntity playerIn, int index) { + public ItemStack quickMoveStack(PlayerEntity playerIn, int index) { if (index < 36) { - ItemStack stackToInsert = playerInventory.getStackInSlot(index); + ItemStack stackToInsert = playerInventory.getItem(index); for (int i = 0; i < ghostInventory.getSlots(); i++) { ItemStack stack = ghostInventory.getStackInSlot(i); if (!allowRepeats() && ItemHandlerHelper.canItemStacksStack(stack, stackToInsert)) @@ -124,20 +124,20 @@ public abstract class GhostItemContainer extends Container implements ICleara ItemStack copy = stackToInsert.copy(); copy.setCount(1); ghostInventory.insertItem(i, copy, false); - getSlot(i + 36).onSlotChanged(); + getSlot(i + 36).setChanged(); break; } } } else { ghostInventory.extractItem(index - 36, 1, false); - getSlot(index).onSlotChanged(); + getSlot(index).setChanged(); } return ItemStack.EMPTY; } @Override - public void onContainerClosed(PlayerEntity playerIn) { - super.onContainerClosed(playerIn); + public void removed(PlayerEntity playerIn) { + super.removed(playerIn); saveData(contentHolder); } diff --git a/src/main/java/com/simibubi/create/foundation/gui/GhostItemSubmitPacket.java b/src/main/java/com/simibubi/create/foundation/gui/GhostItemSubmitPacket.java index 54df945ac..3245586b6 100644 --- a/src/main/java/com/simibubi/create/foundation/gui/GhostItemSubmitPacket.java +++ b/src/main/java/com/simibubi/create/foundation/gui/GhostItemSubmitPacket.java @@ -20,13 +20,13 @@ public class GhostItemSubmitPacket extends SimplePacketBase { } public GhostItemSubmitPacket(PacketBuffer buffer) { - item = buffer.readItemStack(); + item = buffer.readItem(); slot = buffer.readInt(); } @Override public void write(PacketBuffer buffer) { - buffer.writeItemStack(item); + buffer.writeItem(item); buffer.writeInt(slot); } @@ -39,10 +39,10 @@ public class GhostItemSubmitPacket extends SimplePacketBase { if (player == null) return; - if (player.openContainer instanceof GhostItemContainer) { - GhostItemContainer c = (GhostItemContainer) player.openContainer; + if (player.containerMenu instanceof GhostItemContainer) { + GhostItemContainer c = (GhostItemContainer) player.containerMenu; c.ghostInventory.setStackInSlot(slot, item); - c.getSlot(36 + slot).onSlotChanged(); + c.getSlot(36 + slot).setChanged(); } }); diff --git a/src/main/java/com/simibubi/create/foundation/gui/GuiGameElement.java b/src/main/java/com/simibubi/create/foundation/gui/GuiGameElement.java index b2f1bd5f4..9a7c2df7f 100644 --- a/src/main/java/com/simibubi/create/foundation/gui/GuiGameElement.java +++ b/src/main/java/com/simibubi/create/foundation/gui/GuiGameElement.java @@ -58,9 +58,9 @@ public class GuiGameElement { } public static GuiRenderBuilder of(Fluid fluid) { - return new GuiBlockStateRenderBuilder(fluid.getDefaultState() - .getBlockState() - .with(FlowingFluidBlock.LEVEL, 0)); + return new GuiBlockStateRenderBuilder(fluid.defaultFluidState() + .createLegacyBlock() + .setValue(FlowingFluidBlock.LEVEL, 0)); } public static abstract class GuiRenderBuilder extends RenderElement { @@ -111,7 +111,7 @@ public class GuiGameElement { } protected void prepareMatrix(MatrixStack matrixStack) { - matrixStack.push(); + matrixStack.pushPose(); RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); RenderSystem.alphaFunc(516, 0.1F); RenderSystem.enableAlphaTest(); @@ -128,14 +128,14 @@ public class GuiGameElement { matrixStack.translate(xLocal, yLocal, zLocal); matrixStack.scale(1, -1, 1); matrixStack.translate(rotationOffset.x, rotationOffset.y, rotationOffset.z); - matrixStack.multiply(Vector3f.POSITIVE_Z.getDegreesQuaternion((float) zRot)); - matrixStack.multiply(Vector3f.POSITIVE_X.getDegreesQuaternion((float) xRot)); - matrixStack.multiply(Vector3f.POSITIVE_Y.getDegreesQuaternion((float) yRot)); + matrixStack.mulPose(Vector3f.ZP.rotationDegrees((float) zRot)); + matrixStack.mulPose(Vector3f.XP.rotationDegrees((float) xRot)); + matrixStack.mulPose(Vector3f.YP.rotationDegrees((float) yRot)); matrixStack.translate(-rotationOffset.x, -rotationOffset.y, -rotationOffset.z); } protected void cleanUpMatrix(MatrixStack matrixStack) { - matrixStack.pop(); + matrixStack.popPose(); RenderSystem.disableRescaleNormal(); RenderSystem.disableAlphaTest(); cleanUpLighting(matrixStack); @@ -145,13 +145,13 @@ public class GuiGameElement { if (customLighting != null) { customLighting.applyLighting(); } else { - RenderHelper.enableGuiDepthLighting(); + RenderHelper.setupFor3DItems(); } } protected void cleanUpLighting(MatrixStack matrixStack) { if (customLighting != null) { - RenderHelper.enableGuiDepthLighting(); + RenderHelper.setupFor3DItems(); } } } @@ -162,7 +162,7 @@ public class GuiGameElement { protected BlockState blockState; public GuiBlockModelRenderBuilder(IBakedModel blockmodel, @Nullable BlockState blockState) { - this.blockState = blockState == null ? Blocks.AIR.getDefaultState() : blockState; + this.blockState = blockState == null ? Blocks.AIR.defaultBlockState() : blockState; this.blockModel = blockmodel; } @@ -171,17 +171,17 @@ public class GuiGameElement { prepareMatrix(matrixStack); Minecraft mc = Minecraft.getInstance(); - BlockRendererDispatcher blockRenderer = mc.getBlockRendererDispatcher(); - IRenderTypeBuffer.Impl buffer = mc.getBufferBuilders() - .getEntityVertexConsumers(); - RenderType renderType = blockState.getBlock() == Blocks.AIR ? Atlases.getEntityTranslucentCull() - : RenderTypeLookup.getEntityBlockLayer(blockState, true); + BlockRendererDispatcher blockRenderer = mc.getBlockRenderer(); + IRenderTypeBuffer.Impl buffer = mc.renderBuffers() + .bufferSource(); + RenderType renderType = blockState.getBlock() == Blocks.AIR ? Atlases.translucentCullBlockSheet() + : RenderTypeLookup.getRenderType(blockState, true); IVertexBuilder vb = buffer.getBuffer(renderType); transformMatrix(matrixStack); mc.getTextureManager() - .bindTexture(PlayerContainer.BLOCK_ATLAS_TEXTURE); + .bind(PlayerContainer.BLOCK_ATLAS); renderModel(blockRenderer, buffer, renderType, vb, matrixStack); cleanUpMatrix(matrixStack); @@ -193,10 +193,10 @@ public class GuiGameElement { .getBlockColors() .getColor(blockState, null, null, 0); Vector3d rgb = ColorHelper.getRGB(color == -1 ? this.color : color); - blockRenderer.getBlockModelRenderer() - .renderModel(ms.peek(), vb, blockState, blockModel, (float) rgb.x, (float) rgb.y, (float) rgb.z, - 0xF000F0, OverlayTexture.DEFAULT_UV, VirtualEmptyModelData.INSTANCE); - buffer.draw(); + blockRenderer.getModelRenderer() + .renderModel(ms.last(), vb, blockState, blockModel, (float) rgb.x, (float) rgb.y, (float) rgb.z, + 0xF000F0, OverlayTexture.NO_OVERLAY, VirtualEmptyModelData.INSTANCE); + buffer.endBatch(); } } @@ -205,19 +205,19 @@ public class GuiGameElement { public GuiBlockStateRenderBuilder(BlockState blockstate) { super(Minecraft.getInstance() - .getBlockRendererDispatcher() - .getModelForState(blockstate), blockstate); + .getBlockRenderer() + .getBlockModel(blockstate), blockstate); } @Override protected void renderModel(BlockRendererDispatcher blockRenderer, IRenderTypeBuffer.Impl buffer, RenderType renderType, IVertexBuilder vb, MatrixStack ms) { if (blockState.getBlock() instanceof FireBlock) { - RenderHelper.disableGuiDepthLighting(); - blockRenderer.renderBlock(blockState, ms, buffer, 0xF000F0, OverlayTexture.DEFAULT_UV, + RenderHelper.setupForFlatItems(); + blockRenderer.renderBlock(blockState, ms, buffer, 0xF000F0, OverlayTexture.NO_OVERLAY, VirtualEmptyModelData.INSTANCE); - buffer.draw(); - RenderHelper.enableGuiDepthLighting(); + buffer.endBatch(); + RenderHelper.setupFor3DItems(); return; } @@ -228,8 +228,8 @@ public class GuiGameElement { return; FluidRenderer.renderTiledFluidBB(new FluidStack(blockState.getFluidState() - .getFluid(), 1000), 0, 0, 0, 1.0001f, 1.0001f, 1.0001f, buffer, ms, 0xF000F0, false); - buffer.draw(); + .getType(), 1000), 0, 0, 0, 1.0001f, 1.0001f, 1.0001f, buffer, ms, 0xF000F0, false); + buffer.endBatch(); } } @@ -263,11 +263,11 @@ public class GuiGameElement { public static void renderItemIntoGUI(MatrixStack matrixStack, ItemStack stack, boolean useDefaultLighting) { ItemRenderer renderer = Minecraft.getInstance().getItemRenderer(); - IBakedModel bakedModel = renderer.getItemModelWithOverrides(stack, null, null); + IBakedModel bakedModel = renderer.getModel(stack, null, null); - matrixStack.push(); - renderer.textureManager.bindTexture(AtlasTexture.LOCATION_BLOCKS_TEXTURE); - renderer.textureManager.getTexture(AtlasTexture.LOCATION_BLOCKS_TEXTURE).setBlurMipmapDirect(false, false); + matrixStack.pushPose(); + renderer.textureManager.bind(AtlasTexture.LOCATION_BLOCKS); + renderer.textureManager.getTexture(AtlasTexture.LOCATION_BLOCKS).setFilter(false, false); RenderSystem.enableRescaleNormal(); RenderSystem.enableAlphaTest(); RenderSystem.enableCull(); @@ -275,30 +275,30 @@ public class GuiGameElement { RenderSystem.enableBlend(); RenderSystem.blendFunc(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA); RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); - matrixStack.translate(0, 0, 100.0F + renderer.zLevel); + matrixStack.translate(0, 0, 100.0F + renderer.blitOffset); matrixStack.translate(8.0F, -8.0F, 0.0F); matrixStack.scale(16.0F, 16.0F, 16.0F); - IRenderTypeBuffer.Impl buffer = Minecraft.getInstance().getBufferBuilders().getEntityVertexConsumers(); - boolean flatLighting = !bakedModel.isSideLit(); + IRenderTypeBuffer.Impl buffer = Minecraft.getInstance().renderBuffers().bufferSource(); + boolean flatLighting = !bakedModel.usesBlockLight(); if (useDefaultLighting) { if (flatLighting) { - RenderHelper.disableGuiDepthLighting(); + RenderHelper.setupForFlatItems(); } } - renderer.renderItem(stack, ItemCameraTransforms.TransformType.GUI, false, matrixStack, buffer, 0xF000F0, OverlayTexture.DEFAULT_UV, bakedModel); - buffer.draw(); + renderer.render(stack, ItemCameraTransforms.TransformType.GUI, false, matrixStack, buffer, 0xF000F0, OverlayTexture.NO_OVERLAY, bakedModel); + buffer.endBatch(); RenderSystem.enableDepthTest(); if (useDefaultLighting) { if (flatLighting) { - RenderHelper.enableGuiDepthLighting(); + RenderHelper.setupFor3DItems(); } } RenderSystem.disableAlphaTest(); RenderSystem.disableRescaleNormal(); RenderSystem.enableCull(); - matrixStack.pop(); + matrixStack.popPose(); } } diff --git a/src/main/java/com/simibubi/create/foundation/gui/ILightingSettings.java b/src/main/java/com/simibubi/create/foundation/gui/ILightingSettings.java index bd585d587..4248e4de2 100644 --- a/src/main/java/com/simibubi/create/foundation/gui/ILightingSettings.java +++ b/src/main/java/com/simibubi/create/foundation/gui/ILightingSettings.java @@ -6,7 +6,7 @@ public interface ILightingSettings { void applyLighting(); - static final ILightingSettings DEFAULT_3D = () -> RenderHelper.enableGuiDepthLighting(); - static final ILightingSettings DEFAULT_FLAT = () -> RenderHelper.disableGuiDepthLighting(); + static final ILightingSettings DEFAULT_3D = () -> RenderHelper.setupFor3DItems(); + static final ILightingSettings DEFAULT_FLAT = () -> RenderHelper.setupForFlatItems(); } diff --git a/src/main/java/com/simibubi/create/foundation/gui/ScreenOpener.java b/src/main/java/com/simibubi/create/foundation/gui/ScreenOpener.java index cfe1aa1d1..d28fa2eb4 100644 --- a/src/main/java/com/simibubi/create/foundation/gui/ScreenOpener.java +++ b/src/main/java/com/simibubi/create/foundation/gui/ScreenOpener.java @@ -20,7 +20,7 @@ public class ScreenOpener { private static Screen backSteppedFrom = null; public static void open(Screen screen) { - open(Minecraft.getInstance().currentScreen, screen); + open(Minecraft.getInstance().screen, screen); } public static void open(@Nullable Screen current, Screen toOpen) { @@ -70,7 +70,7 @@ public class ScreenOpener { if (!screen.isEquivalentTo((NavigatableSimiScreen) previouslyRenderedScreen)) return false; - openPreviousScreen(Minecraft.getInstance().currentScreen, Optional.of(screen)); + openPreviousScreen(Minecraft.getInstance().screen, Optional.of(screen)); return true; } @@ -89,9 +89,9 @@ public class ScreenOpener { private static void openScreen(Screen screen) { Minecraft.getInstance() - .enqueue(() -> { + .tell(() -> { Minecraft.getInstance() - .displayGuiScreen(screen); + .setScreen(screen); Screen previouslyRenderedScreen = getPreviouslyRenderedScreen(); if (previouslyRenderedScreen != null && screen instanceof NavigatableSimiScreen) previouslyRenderedScreen.init(Minecraft.getInstance(), screen.width, screen.height); diff --git a/src/main/java/com/simibubi/create/foundation/gui/StencilElement.java b/src/main/java/com/simibubi/create/foundation/gui/StencilElement.java index 22c70b75f..6bbdeae75 100644 --- a/src/main/java/com/simibubi/create/foundation/gui/StencilElement.java +++ b/src/main/java/com/simibubi/create/foundation/gui/StencilElement.java @@ -11,14 +11,14 @@ public abstract class StencilElement extends RenderElement { @Override public void render(MatrixStack ms) { - ms.push(); + ms.pushPose(); transform(ms); prepareStencil(ms); renderStencil(ms); prepareElement(ms); renderElement(ms); cleanUp(ms); - ms.pop(); + ms.popPose(); } protected abstract void renderStencil(MatrixStack ms); @@ -32,7 +32,7 @@ public abstract class StencilElement extends RenderElement { protected void prepareStencil(MatrixStack ms) { GL11.glDisable(GL11.GL_STENCIL_TEST); RenderSystem.stencilMask(~0); - RenderSystem.clear(GL11.GL_STENCIL_BUFFER_BIT, Minecraft.IS_RUNNING_ON_MAC); + RenderSystem.clear(GL11.GL_STENCIL_BUFFER_BIT, Minecraft.ON_OSX); GL11.glEnable(GL11.GL_STENCIL_TEST); RenderSystem.stencilOp(GL11.GL_REPLACE, GL11.GL_KEEP, GL11.GL_KEEP); RenderSystem.stencilMask(0xFF); diff --git a/src/main/java/com/simibubi/create/foundation/gui/TextStencilElement.java b/src/main/java/com/simibubi/create/foundation/gui/TextStencilElement.java index cdea4f887..9ede69764 100644 --- a/src/main/java/com/simibubi/create/foundation/gui/TextStencilElement.java +++ b/src/main/java/com/simibubi/create/foundation/gui/TextStencilElement.java @@ -50,10 +50,10 @@ public class TextStencilElement extends DelegatedStencilElement { float x = 0, y = 0; if (centerHorizontally) - x = width / 2f - font.getWidth(component) / 2f; + x = width / 2f - font.width(component) / 2f; if (centerVertically) - y = height / 2f - (font.FONT_HEIGHT - 1) / 2f; + y = height / 2f - (font.lineHeight - 1) / 2f; font.draw(ms, component, x, y, 0xff_000000); } @@ -62,15 +62,15 @@ public class TextStencilElement extends DelegatedStencilElement { protected void renderElement(MatrixStack ms) { float x = 0, y = 0; if (centerHorizontally) - x = width / 2f - font.getWidth(component) / 2f; + x = width / 2f - font.width(component) / 2f; if (centerVertically) - y = height / 2f - (font.FONT_HEIGHT - 1) / 2f; + y = height / 2f - (font.lineHeight - 1) / 2f; - ms.push(); + ms.pushPose(); ms.translate(x, y, 0); - element.render(ms, font.getWidth(component), font.FONT_HEIGHT + 2, alpha); - ms.pop(); + element.render(ms, font.width(component), font.lineHeight + 2, alpha); + ms.popPose(); } public IFormattableTextComponent getComponent() { diff --git a/src/main/java/com/simibubi/create/foundation/gui/ToolSelectionScreen.java b/src/main/java/com/simibubi/create/foundation/gui/ToolSelectionScreen.java index cb77c8b7d..4748a8742 100644 --- a/src/main/java/com/simibubi/create/foundation/gui/ToolSelectionScreen.java +++ b/src/main/java/com/simibubi/create/foundation/gui/ToolSelectionScreen.java @@ -33,7 +33,7 @@ public class ToolSelectionScreen extends Screen { public ToolSelectionScreen(List tools, Consumer callback) { super(new StringTextComponent("Tool Selection")); - this.client = Minecraft.getInstance(); + this.minecraft = Minecraft.getInstance(); this.tools = tools; this.callback = callback; focused = false; @@ -62,12 +62,12 @@ public class ToolSelectionScreen extends Screen { Minecraft mc = Minecraft.getInstance(); MainWindow mainWindow = mc.getWindow(); if (!initialized) - init(mc, mainWindow.getScaledWidth(), mainWindow.getScaledHeight()); + init(mc, mainWindow.getGuiScaledWidth(), mainWindow.getGuiScaledHeight()); - int x = (mainWindow.getScaledWidth() - w) / 2 + 15; - int y = mainWindow.getScaledHeight() - h - 75; + int x = (mainWindow.getGuiScaledWidth() - w) / 2 + 15; + int y = mainWindow.getGuiScaledHeight() - h - 75; - matrixStack.push(); + matrixStack.pushPose(); matrixStack.translate(0, -yOffset, focused ? 100 : 0); AllGuiTextures gray = AllGuiTextures.HUD_BACKGROUND; @@ -76,8 +76,8 @@ public class ToolSelectionScreen extends Screen { Minecraft.getInstance() .getTextureManager() - .bindTexture(gray.location); - drawTexture(matrixStack, x - 15, y, gray.startX, gray.startY, w, h, gray.width, gray.height); + .bind(gray.location); + blit(matrixStack, x - 15, y, gray.startX, gray.startY, w, h, gray.width, gray.height); float toolTipAlpha = yOffset / 10; List toolTip = tools.get(selection) @@ -86,40 +86,40 @@ public class ToolSelectionScreen extends Screen { if (toolTipAlpha > 0.25f) { RenderSystem.color4f(.7f, .7f, .8f, toolTipAlpha); - drawTexture(matrixStack, x - 15, y + 33, gray.startX, gray.startY, w, h + 22, gray.width, gray.height); + blit(matrixStack, x - 15, y + 33, gray.startX, gray.startY, w, h + 22, gray.width, gray.height); RenderSystem.color4f(1, 1, 1, 1); if (toolTip.size() > 0) - textRenderer.draw(matrixStack, toolTip.get(0), x - 10, y + 38, 0xEEEEEE + stringAlphaComponent); + font.draw(matrixStack, toolTip.get(0), x - 10, y + 38, 0xEEEEEE + stringAlphaComponent); if (toolTip.size() > 1) - textRenderer.draw(matrixStack, toolTip.get(1), x - 10, y + 50, 0xCCDDFF + stringAlphaComponent); + font.draw(matrixStack, toolTip.get(1), x - 10, y + 50, 0xCCDDFF + stringAlphaComponent); if (toolTip.size() > 2) - textRenderer.draw(matrixStack, toolTip.get(2), x - 10, y + 60, 0xCCDDFF + stringAlphaComponent); + font.draw(matrixStack, toolTip.get(2), x - 10, y + 60, 0xCCDDFF + stringAlphaComponent); if (toolTip.size() > 3) - textRenderer.draw(matrixStack, toolTip.get(3), x - 10, y + 72, 0xCCCCDD + stringAlphaComponent); + font.draw(matrixStack, toolTip.get(3), x - 10, y + 72, 0xCCCCDD + stringAlphaComponent); } RenderSystem.color4f(1, 1, 1, 1); if (tools.size() > 1) { String keyName = AllKeys.TOOL_MENU.getBoundKey(); - int width = client.getWindow() - .getScaledWidth(); + int width = minecraft.getWindow() + .getGuiScaledWidth(); if (!focused) - drawCenteredText(matrixStack, client.fontRenderer, Lang.translate(holdToFocus, keyName), width / 2, + drawCenteredString(matrixStack, minecraft.font, Lang.translate(holdToFocus, keyName), width / 2, y - 10, 0xCCDDFF); else - drawCenteredString(matrixStack, client.fontRenderer, scrollToCycle, width / 2, y - 10, 0xCCDDFF); + drawCenteredString(matrixStack, minecraft.font, scrollToCycle, width / 2, y - 10, 0xCCDDFF); } else { x += 65; } for (int i = 0; i < tools.size(); i++) { - matrixStack.push(); + matrixStack.pushPose(); float alpha = focused ? 1 : .2f; if (i == selection) { matrixStack.translate(0, -10, 0); - drawCenteredString(matrixStack, client.fontRenderer, tools.get(i) + drawCenteredString(matrixStack, minecraft.font, tools.get(i) .getDisplayName() .getString(), x + i * 50 + 24, y + 28, 0xCCDDFF); alpha = 1; @@ -133,11 +133,11 @@ public class ToolSelectionScreen extends Screen { .getIcon() .draw(matrixStack, this, x + i * 50 + 16, y + 11); - matrixStack.pop(); + matrixStack.popPose(); } RenderSystem.enableBlend(); - matrixStack.pop(); + matrixStack.popPose(); } public void update() { diff --git a/src/main/java/com/simibubi/create/foundation/gui/UIRenderHelper.java b/src/main/java/com/simibubi/create/foundation/gui/UIRenderHelper.java index 562751419..70def0c92 100644 --- a/src/main/java/com/simibubi/create/foundation/gui/UIRenderHelper.java +++ b/src/main/java/com/simibubi/create/foundation/gui/UIRenderHelper.java @@ -32,7 +32,7 @@ public class UIRenderHelper { public static void updateWindowSize(MainWindow mainWindow) { if (framebuffer != null) - framebuffer.func_216491_a(mainWindow.getFramebufferWidth(), mainWindow.getFramebufferHeight(), Minecraft.IS_RUNNING_ON_MAC); + framebuffer.resize(mainWindow.getWidth(), mainWindow.getHeight(), Minecraft.ON_OSX); } public static void init() { @@ -44,9 +44,9 @@ public class UIRenderHelper { } private static Framebuffer createFramebuffer(MainWindow mainWindow) { - Framebuffer framebuffer = new Framebuffer(mainWindow.getFramebufferWidth(), mainWindow.getFramebufferHeight(), true, - Minecraft.IS_RUNNING_ON_MAC); - framebuffer.setFramebufferColor(0, 0, 0, 0); + Framebuffer framebuffer = new Framebuffer(mainWindow.getWidth(), mainWindow.getHeight(), true, + Minecraft.ON_OSX); + framebuffer.setClearColor(0, 0, 0, 0); framebuffer.enableStencil(); return framebuffer; } @@ -55,27 +55,27 @@ public class UIRenderHelper { MainWindow window = Minecraft.getInstance() .getWindow(); - float vx = (float) window.getScaledWidth(); - float vy = (float) window.getScaledHeight(); - float tx = (float) framebuffer.framebufferWidth / (float) framebuffer.framebufferTextureWidth; - float ty = (float) framebuffer.framebufferHeight / (float) framebuffer.framebufferTextureHeight; + float vx = (float) window.getGuiScaledWidth(); + float vy = (float) window.getGuiScaledHeight(); + float tx = (float) framebuffer.viewWidth / (float) framebuffer.width; + float ty = (float) framebuffer.viewHeight / (float) framebuffer.height; RenderSystem.enableTexture(); RenderSystem.enableDepthTest(); - framebuffer.bindFramebufferTexture(); + framebuffer.bindRead(); Tessellator tessellator = Tessellator.getInstance(); - BufferBuilder bufferbuilder = tessellator.getBuffer(); - bufferbuilder.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_COLOR_TEXTURE); + BufferBuilder bufferbuilder = tessellator.getBuilder(); + bufferbuilder.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_COLOR_TEX); - bufferbuilder.vertex(0, vy, 0).color(1, 1, 1, alpha).texture(0, 0).endVertex(); - bufferbuilder.vertex(vx, vy, 0).color(1, 1, 1, alpha).texture(tx, 0).endVertex(); - bufferbuilder.vertex(vx, 0, 0).color(1, 1, 1, alpha).texture(tx, ty).endVertex(); - bufferbuilder.vertex(0, 0, 0).color(1, 1, 1, alpha).texture(0, ty).endVertex(); + bufferbuilder.vertex(0, vy, 0).color(1, 1, 1, alpha).uv(0, 0).endVertex(); + bufferbuilder.vertex(vx, vy, 0).color(1, 1, 1, alpha).uv(tx, 0).endVertex(); + bufferbuilder.vertex(vx, 0, 0).color(1, 1, 1, alpha).uv(tx, ty).endVertex(); + bufferbuilder.vertex(0, 0, 0).color(1, 1, 1, alpha).uv(0, ty).endVertex(); - tessellator.draw(); - framebuffer.unbindFramebufferTexture(); + tessellator.end(); + framebuffer.unbindRead(); } public static void streak(MatrixStack ms, float angle, int x, int y, int breadth, int length) {streak(ms, angle, x, y, breadth, length, Theme.i(Theme.Key.STREAK));} @@ -95,19 +95,19 @@ public class UIRenderHelper { int c3 = a3 | color; int c4 = a4 | color; - ms.push(); + ms.pushPose(); ms.translate(x, y, 0); - ms.multiply(Vector3f.POSITIVE_Z.getDegreesQuaternion(angle - 90)); + ms.mulPose(Vector3f.ZP.rotationDegrees(angle - 90)); streak(ms, breadth / 2, length, c1, c2, c3, c4); - ms.pop(); + ms.popPose(); } private static void streak(MatrixStack ms, int width, int height, int c1, int c2, int c3, int c4) { double split1 = .5; double split2 = .75; - Matrix4f model = ms.peek().getModel(); + Matrix4f model = ms.last().pose(); RenderSystem.disableAlphaTest(); GuiUtils.drawGradientRect(model, 0, -width, 0, width, (int) (split1 * height), c1, c2); GuiUtils.drawGradientRect(model, 0, -width, (int) (split1 * height), width, (int) (split2 * height), c2, c3); @@ -145,27 +145,27 @@ public class UIRenderHelper { * @param breadth the total width of the gradient */ public static void angledGradient(@Nonnull MatrixStack ms, float angle, int x, int y, int z, int breadth, int length, int color1, int color2) { - ms.push(); + ms.pushPose(); ms.translate(x, y, z); - ms.multiply(Vector3f.POSITIVE_Z.getDegreesQuaternion(angle - 90)); + ms.mulPose(Vector3f.ZP.rotationDegrees(angle - 90)); - Matrix4f model = ms.peek().getModel(); + Matrix4f model = ms.last().pose(); int w = breadth / 2; GuiUtils.drawGradientRect(model, 0, -w, 0, w, length, color1, color2); - ms.pop(); + ms.popPose(); } public static void breadcrumbArrow(MatrixStack matrixStack, int x, int y, int z, int width, int height, int indent, Couple colors) {breadcrumbArrow(matrixStack, x, y, z, width, height, indent, colors.getFirst().getRGB(), colors.getSecond().getRGB());} // draws a wide chevron-style breadcrumb arrow pointing left public static void breadcrumbArrow(MatrixStack matrixStack, int x, int y, int z, int width, int height, int indent, int startColor, int endColor) { - matrixStack.push(); + matrixStack.pushPose(); matrixStack.translate(x - indent, y, z); breadcrumbArrow(matrixStack, width, height, indent, startColor, endColor); - matrixStack.pop(); + matrixStack.popPose(); } private static void breadcrumbArrow(MatrixStack ms, int width, int height, int indent, int c1, int c2) { @@ -206,8 +206,8 @@ public class UIRenderHelper { RenderSystem.shadeModel(GL11.GL_SMOOTH); Tessellator tessellator = Tessellator.getInstance(); - BufferBuilder bufferbuilder = tessellator.getBuffer(); - Matrix4f model = ms.peek().getModel(); + BufferBuilder bufferbuilder = tessellator.getBuilder(); + Matrix4f model = ms.last().pose(); bufferbuilder.begin(GL11.GL_TRIANGLES, DefaultVertexFormats.POSITION_COLOR); bufferbuilder.vertex(model, x0, y0, 0).color(fc1 >> 16 & 0xFF, fc1 >> 8 & 0xFF, fc1 & 0xFF, fc1 >> 24 & 0xFF).endVertex(); @@ -234,7 +234,7 @@ public class UIRenderHelper { bufferbuilder.vertex(model, x5, y5, 0).color(fc3 >> 16 & 0xFF, fc3 >> 8 & 0xFF, fc3 & 0xFF, fc3 >> 24 & 0xFF).endVertex(); bufferbuilder.vertex(model, x8, y8, 0).color(fc4 >> 16 & 0xFF, fc4 >> 8 & 0xFF, fc4 & 0xFF, fc4 >> 24 & 0xFF).endVertex(); - tessellator.draw(); + tessellator.end(); RenderSystem.shadeModel(GL11.GL_FLAT); RenderSystem.disableBlend(); RenderSystem.enableCull(); @@ -252,20 +252,20 @@ public class UIRenderHelper { } private static void drawColoredTexture(MatrixStack ms, Color c, int left, int right, int top, int bot, int z, int tex_width, int tex_height, float tex_left, float tex_top, int sheet_width, int sheet_height) { - drawTexturedQuad(ms.peek().getModel(), c, left, right, top, bot, z, (tex_left + 0.0F) / (float) sheet_width, (tex_left + (float) tex_width) / (float) sheet_width, (tex_top + 0.0F) / (float) sheet_height, (tex_top + (float) tex_height) / (float) sheet_height); + drawTexturedQuad(ms.last().pose(), c, left, right, top, bot, z, (tex_left + 0.0F) / (float) sheet_width, (tex_left + (float) tex_width) / (float) sheet_width, (tex_top + 0.0F) / (float) sheet_height, (tex_top + (float) tex_height) / (float) sheet_height); } private static void drawTexturedQuad(Matrix4f m, Color c, int left, int right, int top, int bot, int z, float u1, float u2, float v1, float v2) { RenderSystem.enableBlend(); - BufferBuilder bufferbuilder = Tessellator.getInstance().getBuffer(); - bufferbuilder.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_COLOR_TEXTURE); - bufferbuilder.vertex(m, (float) left , (float) bot, (float) z).color(c.getRed(), c.getGreen(), c.getBlue(), c.getAlpha()).texture(u1, v2).endVertex(); - bufferbuilder.vertex(m, (float) right, (float) bot, (float) z).color(c.getRed(), c.getGreen(), c.getBlue(), c.getAlpha()).texture(u2, v2).endVertex(); - bufferbuilder.vertex(m, (float) right, (float) top, (float) z).color(c.getRed(), c.getGreen(), c.getBlue(), c.getAlpha()).texture(u2, v1).endVertex(); - bufferbuilder.vertex(m, (float) left , (float) top, (float) z).color(c.getRed(), c.getGreen(), c.getBlue(), c.getAlpha()).texture(u1, v1).endVertex(); - bufferbuilder.finishDrawing(); + BufferBuilder bufferbuilder = Tessellator.getInstance().getBuilder(); + bufferbuilder.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_COLOR_TEX); + bufferbuilder.vertex(m, (float) left , (float) bot, (float) z).color(c.getRed(), c.getGreen(), c.getBlue(), c.getAlpha()).uv(u1, v2).endVertex(); + bufferbuilder.vertex(m, (float) right, (float) bot, (float) z).color(c.getRed(), c.getGreen(), c.getBlue(), c.getAlpha()).uv(u2, v2).endVertex(); + bufferbuilder.vertex(m, (float) right, (float) top, (float) z).color(c.getRed(), c.getGreen(), c.getBlue(), c.getAlpha()).uv(u2, v1).endVertex(); + bufferbuilder.vertex(m, (float) left , (float) top, (float) z).color(c.getRed(), c.getGreen(), c.getBlue(), c.getAlpha()).uv(u1, v1).endVertex(); + bufferbuilder.end(); RenderSystem.enableAlphaTest(); - WorldVertexBufferUploader.draw(bufferbuilder); + WorldVertexBufferUploader.end(bufferbuilder); } } diff --git a/src/main/java/com/simibubi/create/foundation/gui/mainMenu/CreateMainMenuScreen.java b/src/main/java/com/simibubi/create/foundation/gui/mainMenu/CreateMainMenuScreen.java index 36e1ab619..912409cd9 100644 --- a/src/main/java/com/simibubi/create/foundation/gui/mainMenu/CreateMainMenuScreen.java +++ b/src/main/java/com/simibubi/create/foundation/gui/mainMenu/CreateMainMenuScreen.java @@ -41,7 +41,7 @@ public class CreateMainMenuScreen extends AbstractSimiScreen { new RenderSkyboxCube(Create.asResource("textures/gui/title/background/panorama")); public static final ResourceLocation PANORAMA_OVERLAY_TEXTURES = new ResourceLocation("textures/gui/title/background/panorama_overlay.png"); - private RenderSkybox vanillaPanorama = new RenderSkybox(MainMenuScreen.PANORAMA_RESOURCES); + private RenderSkybox vanillaPanorama = new RenderSkybox(MainMenuScreen.CUBE_MAP); public static RenderSkybox panorama = new RenderSkybox(PANORAMA_RESOURCES); private long firstRenderTime; private Button gettingStarted; @@ -51,74 +51,74 @@ public class CreateMainMenuScreen extends AbstractSimiScreen { returnOnClose = true; if (parent instanceof MainMenuScreen) vanillaPanorama = ObfuscationReflectionHelper.getPrivateValue(MainMenuScreen.class, (MainMenuScreen) parent, - "field_209101_K"); + "panorama"); } @Override public void render(MatrixStack ms, int mouseX, int mouseY, float partialTicks) { if (firstRenderTime == 0L) - this.firstRenderTime = Util.milliTime(); + this.firstRenderTime = Util.getMillis(); super.render(ms, mouseX, mouseY, partialTicks); } @Override protected void renderWindow(MatrixStack ms, int mouseX, int mouseY, float partialTicks) { - float f = (float) (Util.milliTime() - this.firstRenderTime) / 1000.0F; + float f = (float) (Util.getMillis() - this.firstRenderTime) / 1000.0F; float alpha = MathHelper.clamp(f, 0.0F, 1.0F); - float elapsedPartials = client.getTickLength(); + float elapsedPartials = minecraft.getDeltaFrameTime(); if (parent instanceof MainMenuScreen) { if (alpha < 1) vanillaPanorama.render(elapsedPartials, 1); panorama.render(elapsedPartials, alpha); - client.getTextureManager() - .bindTexture(PANORAMA_OVERLAY_TEXTURES); + minecraft.getTextureManager() + .bind(PANORAMA_OVERLAY_TEXTURES); RenderSystem.enableBlend(); RenderSystem.blendFunc(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA); - drawTexture(ms, 0, 0, this.width, this.height, 0.0F, 0.0F, 16, 128, 16, 128); + blit(ms, 0, 0, this.width, this.height, 0.0F, 0.0F, 16, 128, 16, 128); } RenderSystem.enableDepthTest(); for (int side : Iterate.positiveAndNegative) { - ms.push(); + ms.pushPose(); ms.translate(width / 2, 60, 200); ms.scale(24 * side, 24 * side, 32); ms.translate(-1.75 * ((alpha * alpha) / 2f + .5f), .25f, 0); MatrixStacker.of(ms) .rotateX(45); GuiGameElement.of(AllBlocks.LARGE_COGWHEEL.getDefaultState()) - .rotateBlock(0, Util.milliTime() / 32f * side, 0) + .rotateBlock(0, Util.getMillis() / 32f * side, 0) .render(ms); ms.translate(-1, 0, -1); GuiGameElement.of(AllBlocks.COGWHEEL.getDefaultState()) - .rotateBlock(0, Util.milliTime() / -16f * side + 22.5f, 0) + .rotateBlock(0, Util.getMillis() / -16f * side + 22.5f, 0) .render(ms); - ms.pop(); + ms.popPose(); } - ms.push(); + ms.pushPose(); ms.translate(width / 2 - 32, 32, -10); - ms.push(); + ms.pushPose(); ms.scale(0.25f, 0.25f, 0.25f); AllGuiTextures.LOGO.draw(ms, 0, 0); - ms.pop(); + ms.popPose(); new BoxElement().withBackground(0x88_000000) .flatBorder(new Color(0x01_000000, true)) .at(-32, 56, 100) .withBounds(128, 11) .render(ms); - ms.pop(); + ms.popPose(); - ms.push(); + ms.pushPose(); ms.translate(0, 0, 200); - drawCenteredText(ms, textRenderer, new StringTextComponent(Create.NAME).formatted(TextFormatting.BOLD) + drawCenteredString(ms, font, new StringTextComponent(Create.NAME).withStyle(TextFormatting.BOLD) .append( - new StringTextComponent(" v" + Create.VERSION).formatted(TextFormatting.BOLD, TextFormatting.WHITE)), + new StringTextComponent(" v" + Create.VERSION).withStyle(TextFormatting.BOLD, TextFormatting.WHITE)), width / 2, 89, 0xff_E4BB67); - ms.pop(); + ms.popPose(); RenderSystem.disableDepthTest(); } @@ -170,7 +170,7 @@ public class CreateMainMenuScreen extends AbstractSimiScreen { return; if (mouseY < gettingStarted.y || mouseY > gettingStarted.y + 20) return; - renderTooltip(ms, TooltipHelper.cutTextComponent(Lang.translate("menu.only_ingame"), TextFormatting.GRAY, + renderComponentTooltip(ms, TooltipHelper.cutTextComponent(Lang.translate("menu.only_ingame"), TextFormatting.GRAY, TextFormatting.GRAY), mouseX, mouseY); } } @@ -188,9 +188,9 @@ public class CreateMainMenuScreen extends AbstractSimiScreen { returnOnClose = false; ScreenOpener.open(new ConfirmOpenLinkScreen((p_213069_2_) -> { if (p_213069_2_) - Util.getOSType() - .openURI(url); - this.client.displayGuiScreen(this); + Util.getPlatform() + .openUri(url); + this.minecraft.setScreen(this); }, url, true)); } diff --git a/src/main/java/com/simibubi/create/foundation/gui/widgets/AbstractSimiWidget.java b/src/main/java/com/simibubi/create/foundation/gui/widgets/AbstractSimiWidget.java index f8539a3d3..48e73d983 100644 --- a/src/main/java/com/simibubi/create/foundation/gui/widgets/AbstractSimiWidget.java +++ b/src/main/java/com/simibubi/create/foundation/gui/widgets/AbstractSimiWidget.java @@ -56,7 +56,7 @@ public abstract class AbstractSimiWidget extends Widget { @Override public void render(@Nonnull MatrixStack ms, int mouseX, int mouseY, float partialTicks) { if (visible) { - hovered = isMouseOver(mouseX, mouseY); + isHovered = isMouseOver(mouseX, mouseY); beforeRender(ms, mouseX, mouseY, partialTicks); renderButton(ms, mouseX, mouseY, partialTicks); afterRender(ms, mouseX, mouseY, partialTicks); @@ -73,11 +73,11 @@ public abstract class AbstractSimiWidget extends Widget { } protected void beforeRender(@Nonnull MatrixStack ms, int mouseX, int mouseY, float partialTicks) { - ms.push(); + ms.pushPose(); } protected void afterRender(@Nonnull MatrixStack ms, int mouseX, int mouseY, float partialTicks) { - ms.pop(); + ms.popPose(); } public void runCallback(double mouseX, double mouseY) { diff --git a/src/main/java/com/simibubi/create/foundation/gui/widgets/BoxWidget.java b/src/main/java/com/simibubi/create/foundation/gui/widgets/BoxWidget.java index 2e5cac63e..c74606d81 100644 --- a/src/main/java/com/simibubi/create/foundation/gui/widgets/BoxWidget.java +++ b/src/main/java/com/simibubi/create/foundation/gui/widgets/BoxWidget.java @@ -103,11 +103,11 @@ public class BoxWidget extends ElementWidget { protected void beforeRender(@Nonnull MatrixStack ms, int mouseX, int mouseY, float partialTicks) { super.beforeRender(ms, mouseX, mouseY, partialTicks); - if (hovered != wasHovered) { + if (isHovered != wasHovered) { startGradientAnimation( getColorForState(true), getColorForState(false), - hovered + isHovered ); } @@ -137,7 +137,7 @@ public class BoxWidget extends ElementWidget { super.renderButton(ms, mouseX, mouseY, partialTicks); - wasHovered = hovered; + wasHovered = isHovered; } @Override @@ -192,7 +192,7 @@ public class BoxWidget extends ElementWidget { if (!active) return Theme.p(getDisabledTheme()).get(first); - if (hovered) { + if (isHovered) { if (first) return customBorderTop != null ? customBorderTop.darker() : Theme.c(getHoverTheme(), true); else diff --git a/src/main/java/com/simibubi/create/foundation/gui/widgets/ElementWidget.java b/src/main/java/com/simibubi/create/foundation/gui/widgets/ElementWidget.java index bc782e26f..6bb91486d 100644 --- a/src/main/java/com/simibubi/create/foundation/gui/widgets/ElementWidget.java +++ b/src/main/java/com/simibubi/create/foundation/gui/widgets/ElementWidget.java @@ -130,7 +130,7 @@ public class ElementWidget extends AbstractSimiWidget { @Override public void renderButton(@Nonnull MatrixStack ms, int mouseX, int mouseY, float partialTicks) { - ms.push(); + ms.pushPose(); ms.translate(x + paddingX, y + paddingY, z); float innerWidth = width - 2 * paddingX; float innerHeight = height - 2 * paddingY; @@ -144,7 +144,7 @@ public class ElementWidget extends AbstractSimiWidget { innerHeight /= yScale; } element.withBounds((int) innerWidth, (int) innerHeight).render(ms); - ms.pop(); + ms.popPose(); if (rescaleElement) { element.at(eX, eY); } diff --git a/src/main/java/com/simibubi/create/foundation/gui/widgets/IconButton.java b/src/main/java/com/simibubi/create/foundation/gui/widgets/IconButton.java index fbb6ee950..8209c907a 100644 --- a/src/main/java/com/simibubi/create/foundation/gui/widgets/IconButton.java +++ b/src/main/java/com/simibubi/create/foundation/gui/widgets/IconButton.java @@ -22,15 +22,15 @@ public class IconButton extends AbstractSimiWidget { @Override public void renderButton(@Nonnull MatrixStack matrixStack, int mouseX, int mouseY, float partialTicks) { if (this.visible) { - this.hovered = + this.isHovered = mouseX >= this.x && mouseY >= this.y && mouseX < this.x + this.width && mouseY < this.y + this.height; AllGuiTextures button = (pressed || !active) ? button = AllGuiTextures.BUTTON_DOWN - : (hovered) ? AllGuiTextures.BUTTON_HOVER : AllGuiTextures.BUTTON; + : (isHovered) ? AllGuiTextures.BUTTON_HOVER : AllGuiTextures.BUTTON; RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); AllGuiTextures.BUTTON.bind(); - drawTexture(matrixStack, x, y, button.startX, button.startY, button.width, button.height); + blit(matrixStack, x, y, button.startX, button.startY, button.width, button.height); icon.draw(matrixStack, this, x + 1, y + 1); } } diff --git a/src/main/java/com/simibubi/create/foundation/gui/widgets/Label.java b/src/main/java/com/simibubi/create/foundation/gui/widgets/Label.java index 3c7d904ca..1fc0a881d 100644 --- a/src/main/java/com/simibubi/create/foundation/gui/widgets/Label.java +++ b/src/main/java/com/simibubi/create/foundation/gui/widgets/Label.java @@ -20,8 +20,8 @@ public class Label extends AbstractSimiWidget { protected FontRenderer font; public Label(int x, int y, ITextComponent text) { - super(x, y, Minecraft.getInstance().fontRenderer.getWidth(text), 10); - font = Minecraft.getInstance().fontRenderer; + super(x, y, Minecraft.getInstance().font.width(text), 10); + font = Minecraft.getInstance().font; this.text = new StringTextComponent("Label"); color = 0xFFFFFF; hasShadow = false; @@ -44,15 +44,15 @@ public class Label extends AbstractSimiWidget { } public void setTextAndTrim(ITextComponent newText, boolean trimFront, int maxWidthPx) { - FontRenderer fontRenderer = Minecraft.getInstance().fontRenderer; + FontRenderer fontRenderer = Minecraft.getInstance().font; - if (fontRenderer.getWidth(newText) <= maxWidthPx) { + if (fontRenderer.width(newText) <= maxWidthPx) { text = newText; return; } String trim = "..."; - int trimWidth = fontRenderer.getStringWidth(trim); + int trimWidth = fontRenderer.width(trim); String raw = newText.getString(); StringBuilder builder = new StringBuilder(raw); @@ -62,7 +62,7 @@ public class Label extends AbstractSimiWidget { for (int i = startIndex; i != endIndex; i += step) { String sub = builder.substring(trimFront ? i : startIndex, trimFront ? endIndex + 1 : i + 1); - if (fontRenderer.getWidth(new StringTextComponent(sub).setStyle(newText.getStyle())) + trimWidth <= maxWidthPx) { + if (fontRenderer.width(new StringTextComponent(sub).setStyle(newText.getStyle())) + trimWidth <= maxWidthPx) { text = new StringTextComponent(trimFront ? trim + sub : sub + trim).setStyle(newText.getStyle()); return; } @@ -78,12 +78,12 @@ public class Label extends AbstractSimiWidget { return; RenderSystem.color4f(1, 1, 1, 1); - IFormattableTextComponent copy = text.copy(); + IFormattableTextComponent copy = text.plainCopy(); if (suffix != null && !suffix.isEmpty()) copy.append(suffix); if (hasShadow) - font.drawWithShadow(matrixStack, copy, x, y, color); + font.drawShadow(matrixStack, copy, x, y, color); else font.draw(matrixStack, copy, x, y, color); } diff --git a/src/main/java/com/simibubi/create/foundation/gui/widgets/ScrollInput.java b/src/main/java/com/simibubi/create/foundation/gui/widgets/ScrollInput.java index 146874bbf..8329c530c 100644 --- a/src/main/java/com/simibubi/create/foundation/gui/widgets/ScrollInput.java +++ b/src/main/java/com/simibubi/create/foundation/gui/widgets/ScrollInput.java @@ -91,7 +91,7 @@ public class ScrollInput extends AbstractSimiWidget { @Override public boolean mouseScrolled(double mouseX, double mouseY, double delta) { - if (!hovered) + if (!isHovered) return false; StepContext context = new StepContext(); @@ -137,9 +137,9 @@ public class ScrollInput extends AbstractSimiWidget { protected void updateTooltip() { toolTip.clear(); - toolTip.add(title.copy().formatted(TextFormatting.BLUE)); - toolTip.add(scrollToModify.copy().formatted(TextFormatting.ITALIC, TextFormatting.DARK_GRAY)); - toolTip.add(shiftScrollsFaster.copy().formatted(TextFormatting.ITALIC, TextFormatting.DARK_GRAY)); + toolTip.add(title.plainCopy().withStyle(TextFormatting.BLUE)); + toolTip.add(scrollToModify.plainCopy().withStyle(TextFormatting.ITALIC, TextFormatting.DARK_GRAY)); + toolTip.add(shiftScrollsFaster.plainCopy().withStyle(TextFormatting.ITALIC, TextFormatting.DARK_GRAY)); } } diff --git a/src/main/java/com/simibubi/create/foundation/gui/widgets/SelectionScrollInput.java b/src/main/java/com/simibubi/create/foundation/gui/widgets/SelectionScrollInput.java index c056984fe..4fb8329b7 100644 --- a/src/main/java/com/simibubi/create/foundation/gui/widgets/SelectionScrollInput.java +++ b/src/main/java/com/simibubi/create/foundation/gui/widgets/SelectionScrollInput.java @@ -40,7 +40,7 @@ public class SelectionScrollInput extends ScrollInput { @Override protected void updateTooltip() { toolTip.clear(); - toolTip.add(title.copy().formatted(TextFormatting.BLUE)); + toolTip.add(title.plainCopy().withStyle(TextFormatting.BLUE)); int min = Math.min(this.max - 16, state - 7); int max = Math.max(this.min + 16, state + 8); min = Math.max(min, this.min); @@ -48,19 +48,19 @@ public class SelectionScrollInput extends ScrollInput { if (this.min + 1 == min) min--; if (min > this.min) - toolTip.add(new StringTextComponent("> ...").formatted(TextFormatting.GRAY)); + toolTip.add(new StringTextComponent("> ...").withStyle(TextFormatting.GRAY)); if (this.max - 1 == max) max++; for (int i = min; i < max; i++) { if (i == state) - toolTip.add(StringTextComponent.EMPTY.copy().append("-> ").append(options.get(i)).formatted(TextFormatting.WHITE)); + toolTip.add(StringTextComponent.EMPTY.plainCopy().append("-> ").append(options.get(i)).withStyle(TextFormatting.WHITE)); else - toolTip.add(StringTextComponent.EMPTY.copy().append("> ").append(options.get(i)).formatted(TextFormatting.GRAY)); + toolTip.add(StringTextComponent.EMPTY.plainCopy().append("> ").append(options.get(i)).withStyle(TextFormatting.GRAY)); } if (max < this.max) - toolTip.add(new StringTextComponent("> ...").formatted(TextFormatting.GRAY)); + toolTip.add(new StringTextComponent("> ...").withStyle(TextFormatting.GRAY)); - toolTip.add(scrollToSelect.copy().formatted(TextFormatting.DARK_GRAY, TextFormatting.ITALIC)); + toolTip.add(scrollToSelect.plainCopy().withStyle(TextFormatting.DARK_GRAY, TextFormatting.ITALIC)); } } diff --git a/src/main/java/com/simibubi/create/foundation/item/CreateItemGroupBase.java b/src/main/java/com/simibubi/create/foundation/item/CreateItemGroupBase.java index cc234227a..1b354c712 100644 --- a/src/main/java/com/simibubi/create/foundation/item/CreateItemGroupBase.java +++ b/src/main/java/com/simibubi/create/foundation/item/CreateItemGroupBase.java @@ -30,7 +30,7 @@ public abstract class CreateItemGroupBase extends ItemGroup { @Override @OnlyIn(Dist.CLIENT) - public void fill(NonNullList items) { + public void fillItemList(NonNullList items) { addItems(items, true); addBlocks(items); addItems(items, false); @@ -42,7 +42,7 @@ public abstract class CreateItemGroupBase extends ItemGroup { Block def = entry.get(); Item item = def.asItem(); if (item != Items.AIR) - def.fillItemGroup(this, items); + def.fillItemCategory(this, items); } } @@ -50,17 +50,17 @@ public abstract class CreateItemGroupBase extends ItemGroup { public void addItems(NonNullList items, boolean specialItems) { Minecraft mc = Minecraft.getInstance(); ItemRenderer itemRenderer = mc.getItemRenderer(); - ClientWorld world = mc.world; + ClientWorld world = mc.level; for (RegistryEntry entry : getItems()) { Item item = entry.get(); if (item instanceof BlockItem) continue; ItemStack stack = new ItemStack(item); - IBakedModel model = itemRenderer.getItemModelWithOverrides(stack, world, null); + IBakedModel model = itemRenderer.getModel(stack, world, null); if (model.isGui3d() != specialItems) continue; - item.fillItemGroup(this, items); + item.fillItemCategory(this, items); } } diff --git a/src/main/java/com/simibubi/create/foundation/item/HiddenIngredientItem.java b/src/main/java/com/simibubi/create/foundation/item/HiddenIngredientItem.java index c565d81e9..3671935ad 100644 --- a/src/main/java/com/simibubi/create/foundation/item/HiddenIngredientItem.java +++ b/src/main/java/com/simibubi/create/foundation/item/HiddenIngredientItem.java @@ -5,6 +5,8 @@ import net.minecraft.item.ItemGroup; import net.minecraft.item.ItemStack; import net.minecraft.util.NonNullList; +import net.minecraft.item.Item.Properties; + public class HiddenIngredientItem extends Item { public HiddenIngredientItem(Properties p_i48487_1_) { @@ -12,10 +14,10 @@ public class HiddenIngredientItem extends Item { } @Override - public void fillItemGroup(ItemGroup p_150895_1_, NonNullList p_150895_2_) { - if (p_150895_1_ != ItemGroup.SEARCH) + public void fillItemCategory(ItemGroup p_150895_1_, NonNullList p_150895_2_) { + if (p_150895_1_ != ItemGroup.TAB_SEARCH) return; - super.fillItemGroup(p_150895_1_, p_150895_2_); + super.fillItemCategory(p_150895_1_, p_150895_2_); } } diff --git a/src/main/java/com/simibubi/create/foundation/item/ItemDescription.java b/src/main/java/com/simibubi/create/foundation/item/ItemDescription.java index b9579d81d..f564d0456 100644 --- a/src/main/java/com/simibubi/create/foundation/item/ItemDescription.java +++ b/src/main/java/com/simibubi/create/foundation/item/ItemDescription.java @@ -51,7 +51,7 @@ public class ItemDescription { public static final ItemDescription MISSING = new ItemDescription(null); public static ITextComponent trim = - new StringTextComponent(" ").formatted(WHITE, STRIKETHROUGH); + new StringTextComponent(" ").withStyle(WHITE, STRIKETHROUGH); public enum Palette { @@ -106,7 +106,7 @@ public class ItemDescription { .get() > 0 && StressImpact.isEnabled(); boolean hasStressCapacity = (isHandle || capacities.containsKey(id)) && StressImpact.isEnabled(); boolean hasGlasses = - AllItems.GOGGLES.get() == Minecraft.getInstance().player.getItemStackFromSlot(EquipmentSlotType.HEAD) + AllItems.GOGGLES.get() == Minecraft.getInstance().player.getItemBySlot(EquipmentSlotType.HEAD) .getItem(); ITextComponent rpmUnit = Lang.translate("generic.unit.rpm"); @@ -115,7 +115,7 @@ public class ItemDescription { Lang.translatedOptions("tooltip.speedRequirement", "none", "medium", "high"); int index = minimumRequiredSpeedLevel.ordinal(); IFormattableTextComponent level = - new StringTextComponent(makeProgressBar(3, index)).formatted(minimumRequiredSpeedLevel.getTextColor()); + new StringTextComponent(makeProgressBar(3, index)).withStyle(minimumRequiredSpeedLevel.getTextColor()); if (hasGlasses) level.append(String.valueOf(minimumRequiredSpeedLevel.getSpeedValue())) @@ -125,7 +125,7 @@ public class ItemDescription { level.append(speedLevels.get(index)); list.add(Lang.translate("tooltip.speedRequirement") - .formatted(GRAY)); + .withStyle(GRAY)); list.add(level); } @@ -137,7 +137,7 @@ public class ItemDescription { : (impact >= config.mediumStressImpact.get() ? StressImpact.MEDIUM : StressImpact.LOW); int index = impactId.ordinal(); IFormattableTextComponent level = - new StringTextComponent(makeProgressBar(3, index)).formatted(impactId.getAbsoluteColor()); + new StringTextComponent(makeProgressBar(3, index)).withStyle(impactId.getAbsoluteColor()); if (hasGlasses) level.append(impacts.get(id) @@ -147,7 +147,7 @@ public class ItemDescription { level.append(stressLevels.get(index)); list.add(Lang.translate("tooltip.stressImpact") - .formatted(GRAY)); + .withStyle(GRAY)); list.add(level); } @@ -160,7 +160,7 @@ public class ItemDescription { : (capacity >= config.mediumCapacity.get() ? StressImpact.MEDIUM : StressImpact.HIGH); int index = StressImpact.values().length - 2 - impactId.ordinal(); IFormattableTextComponent level = - new StringTextComponent(makeProgressBar(3, index)).formatted(impactId.getAbsoluteColor()); + new StringTextComponent(makeProgressBar(3, index)).withStyle(impactId.getAbsoluteColor()); if (hasGlasses) level.append(capacity + "x ") @@ -173,14 +173,14 @@ public class ItemDescription { // " " + DARK_GRAY + TextFormatting.ITALIC + Lang.translate("tooltip.capacityProvided.asGenerator"); list.add(Lang.translate("tooltip.capacityProvided") - .formatted(GRAY)); + .withStyle(GRAY)); list.add(level); IFormattableTextComponent genSpeed = generatorSpeed(block, rpmUnit); if (!genSpeed.getString() .isEmpty()) list.add(new StringTextComponent(" ").append(genSpeed) - .formatted(DARK_GRAY)); + .withStyle(DARK_GRAY)); } // if (hasSpeedRequirement || hasStressImpact || hasStressCapacity) @@ -199,13 +199,13 @@ public class ItemDescription { } public ItemDescription withBehaviour(String condition, String behaviour) { - add(linesOnShift, new StringTextComponent(condition).formatted(GRAY)); + add(linesOnShift, new StringTextComponent(condition).withStyle(GRAY)); addStrings(linesOnShift, cutStringTextComponent(behaviour, palette.color, palette.hColor, 1)); return this; } public ItemDescription withControl(String condition, String action) { - add(linesOnCtrl, new StringTextComponent(condition).formatted(GRAY)); + add(linesOnCtrl, new StringTextComponent(condition).withStyle(GRAY)); addStrings(linesOnCtrl, cutStringTextComponent(action, palette.color, palette.hColor, 1)); return this; } @@ -230,19 +230,19 @@ public class ItemDescription { if (hasControls) { IFormattableTextComponent tabBuilder = new StringTextComponent(""); - tabBuilder.append(new StringTextComponent(holdCtrl[0]).formatted(DARK_GRAY)); - tabBuilder.append(keyCtrl.copy() - .formatted(ctrl ? WHITE : GRAY)); - tabBuilder.append(new StringTextComponent(holdCtrl[1]).formatted(DARK_GRAY)); + tabBuilder.append(new StringTextComponent(holdCtrl[0]).withStyle(DARK_GRAY)); + tabBuilder.append(keyCtrl.plainCopy() + .withStyle(ctrl ? WHITE : GRAY)); + tabBuilder.append(new StringTextComponent(holdCtrl[1]).withStyle(DARK_GRAY)); list.add(0, tabBuilder); } if (hasDescription) { IFormattableTextComponent tabBuilder = new StringTextComponent(""); - tabBuilder.append(new StringTextComponent(holdDesc[0]).formatted(DARK_GRAY)); - tabBuilder.append(keyShift.copy() - .formatted(shift ? WHITE : GRAY)); - tabBuilder.append(new StringTextComponent(holdDesc[1]).formatted(DARK_GRAY)); + tabBuilder.append(new StringTextComponent(holdDesc[0]).withStyle(DARK_GRAY)); + tabBuilder.append(keyShift.plainCopy() + .withStyle(shift ? WHITE : GRAY)); + tabBuilder.append(new StringTextComponent(holdDesc[1]).withStyle(DARK_GRAY)); list.add(0, tabBuilder); } @@ -325,7 +325,7 @@ public class ItemDescription { } return !value.equals("") ? Lang.translate("tooltip.generationSpeed", value, unitRPM) - : StringTextComponent.EMPTY.copy(); + : StringTextComponent.EMPTY.plainCopy(); } } 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 155f4758c..fdcdbb801 100644 --- a/src/main/java/com/simibubi/create/foundation/item/ItemHelper.java +++ b/src/main/java/com/simibubi/create/foundation/item/ItemHelper.java @@ -26,7 +26,7 @@ public class ItemHelper { public static void dropContents(World world, BlockPos pos, IItemHandler inv) { for (int slot = 0; slot < inv.getSlots(); slot++) - InventoryHelper.spawnItemStack(world, pos.getX(), pos.getY(), pos.getZ(), inv.getStackInSlot(slot)); + InventoryHelper.dropItemStack(world, pos.getX(), pos.getY(), pos.getZ(), inv.getStackInSlot(slot)); } public static List multipliedOutput(ItemStack in, ItemStack out) { @@ -98,8 +98,8 @@ public class ItemHelper { Ingredients: for (Ingredient igd : recipeIngredients) { for (Pair pair : actualIngredients) { ItemStack[] stacks1 = pair.getFirst() - .getMatchingStacks(); - ItemStack[] stacks2 = igd.getMatchingStacks(); + .getItems(); + ItemStack[] stacks2 = igd.getItems(); if (stacks1.length != stacks2.length) continue; for (int i = 0; i <= stacks1.length; i++) { @@ -108,7 +108,7 @@ public class ItemHelper { .increment(); continue Ingredients; } - if (!ItemStack.areItemStacksEqual(stacks1[i], stacks2[i])) + if (!ItemStack.matches(stacks1[i], stacks2[i])) break; } } @@ -118,11 +118,11 @@ public class ItemHelper { } public static boolean matchIngredients(Ingredient i1, Ingredient i2) { - ItemStack[] stacks1 = i1.getMatchingStacks(); - ItemStack[] stacks2 = i2.getMatchingStacks(); + ItemStack[] stacks1 = i1.getItems(); + ItemStack[] stacks2 = i2.getItems(); if (stacks1.length == stacks2.length) { for (int i = 0; i < stacks1.length; i++) - if (!ItemStack.areItemsEqual(stacks1[i], stacks2[i])) + if (!ItemStack.isSame(stacks1[i], stacks2[i])) return false; return true; } diff --git a/src/main/java/com/simibubi/create/foundation/item/SmartInventory.java b/src/main/java/com/simibubi/create/foundation/item/SmartInventory.java index 7be383918..f8ab9b2f7 100644 --- a/src/main/java/com/simibubi/create/foundation/item/SmartInventory.java +++ b/src/main/java/com/simibubi/create/foundation/item/SmartInventory.java @@ -105,8 +105,8 @@ public class SmartInventory extends RecipeWrapper } @Override - public ItemStack getStackInSlot(int slot) { - return super.getStackInSlot(slot); + public ItemStack getItem(int slot) { + return super.getItem(slot); } public int getStackLimit(int slot, @Nonnull ItemStack stack) { @@ -162,7 +162,7 @@ public class SmartInventory extends RecipeWrapper @Override public ItemStack getStackInSlotIntermediate(int slot) { - return getStackInSlot(slot); + return getItem(slot); } } diff --git a/src/main/java/com/simibubi/create/foundation/item/TagDependentIngredientItem.java b/src/main/java/com/simibubi/create/foundation/item/TagDependentIngredientItem.java index 55e6f5d8f..777e174c9 100644 --- a/src/main/java/com/simibubi/create/foundation/item/TagDependentIngredientItem.java +++ b/src/main/java/com/simibubi/create/foundation/item/TagDependentIngredientItem.java @@ -8,6 +8,8 @@ import net.minecraft.tags.ItemTags; import net.minecraft.util.NonNullList; import net.minecraft.util.ResourceLocation; +import net.minecraft.item.Item.Properties; + public class TagDependentIngredientItem extends Item { private ResourceLocation tag; @@ -18,15 +20,15 @@ public class TagDependentIngredientItem extends Item { } @Override - public void fillItemGroup(ItemGroup p_150895_1_, NonNullList p_150895_2_) { + public void fillItemCategory(ItemGroup p_150895_1_, NonNullList p_150895_2_) { if (!shouldHide()) - super.fillItemGroup(p_150895_1_, p_150895_2_); + super.fillItemCategory(p_150895_1_, p_150895_2_); } public boolean shouldHide() { - ITag tag = ItemTags.getCollection() - .get(this.tag); - return tag == null || tag.values() + ITag tag = ItemTags.getAllTags() + .getTag(this.tag); + return tag == null || tag.getValues() .isEmpty(); } diff --git a/src/main/java/com/simibubi/create/foundation/item/TooltipHelper.java b/src/main/java/com/simibubi/create/foundation/item/TooltipHelper.java index 29f2c2abf..5b1704b5d 100644 --- a/src/main/java/com/simibubi/create/foundation/item/TooltipHelper.java +++ b/src/main/java/com/simibubi/create/foundation/item/TooltipHelper.java @@ -45,26 +45,26 @@ public class TooltipHelper { public static IFormattableTextComponent holdShift(Palette color, boolean highlighted) { return Lang.translate("tooltip.holdForDescription", Lang.translate("tooltip.keyShift") - .formatted(TextFormatting.GRAY)) - .formatted(TextFormatting.DARK_GRAY); + .withStyle(TextFormatting.GRAY)) + .withStyle(TextFormatting.DARK_GRAY); } public static void addHint(List tooltip, String hintKey, Object... messageParams) { ITextComponent spacing = IHaveGoggleInformation.componentSpacing; - tooltip.add(spacing.copy() + tooltip.add(spacing.plainCopy() .append(Lang.translate(hintKey + ".title")) - .formatted(GOLD)); + .withStyle(GOLD)); ITextComponent hint = Lang.translate(hintKey); List cutComponent = TooltipHelper.cutTextComponent(hint, GRAY, TextFormatting.WHITE); for (ITextComponent component : cutComponent) - tooltip.add(spacing.copy() + tooltip.add(spacing.plainCopy() .append(component)); } public static void referTo(IItemProvider item, Supplier itemWithTooltip) { tooltipReferrals.put(item.asItem(), () -> itemWithTooltip.get() .asItem() - .getTranslationKey()); + .getDescriptionId()); } public static void referTo(IItemProvider item, String string) { @@ -73,7 +73,7 @@ public class TooltipHelper { @Deprecated public static List cutString(ITextComponent s, TextFormatting defaultColor, TextFormatting highlightColor) { - return cutString(s.getUnformattedComponentText(), defaultColor, highlightColor, 0); + return cutString(s.getContents(), defaultColor, highlightColor, 0); } @Deprecated @@ -92,7 +92,7 @@ public class TooltipHelper { words.add(word); } - FontRenderer font = Minecraft.getInstance().fontRenderer; + FontRenderer font = Minecraft.getInstance().font; List lines = FontHelper.cutString(font, markedUp, maxWidthPerLine); // Format @@ -140,12 +140,12 @@ public class TooltipHelper { } // Apply hard wrap - FontRenderer font = Minecraft.getInstance().fontRenderer; + FontRenderer font = Minecraft.getInstance().font; List lines = new LinkedList<>(); StringBuilder currentLine = new StringBuilder(); int width = 0; for (String word : words) { - int newWidth = font.getStringWidth(word.replaceAll("_", "")); + int newWidth = font.width(word.replaceAll("_", "")); if (width + newWidth > maxWidthPerLine) { if (width > 0) { String line = currentLine.toString(); @@ -166,16 +166,16 @@ public class TooltipHelper { // Format IFormattableTextComponent lineStart = new StringTextComponent(Strings.repeat(" ", indent)); - lineStart.formatted(defaultColor); + lineStart.withStyle(defaultColor); List formattedLines = new ArrayList<>(lines.size()); Couple f = Couple.create(highlightColor, defaultColor); boolean currentlyHighlighted = false; for (String string : lines) { - IFormattableTextComponent currentComponent = lineStart.copy(); + IFormattableTextComponent currentComponent = lineStart.plainCopy(); String[] split = string.split("_"); for (String part : split) { - currentComponent.append(new StringTextComponent(part).formatted(f.get(currentlyHighlighted))); + currentComponent.append(new StringTextComponent(part).withStyle(f.get(currentlyHighlighted))); currentlyHighlighted = !currentlyHighlighted; } @@ -228,7 +228,7 @@ public class TooltipHelper { private static void checkLocale() { Language currentLanguage = Minecraft.getInstance() .getLanguageManager() - .getCurrentLanguage(); + .getSelected(); if (cachedLanguage != currentLanguage) { cachedTooltips.clear(); cachedLanguage = currentLanguage; @@ -238,7 +238,7 @@ public class TooltipHelper { public static boolean hasTooltip(ItemStack stack, PlayerEntity player) { checkLocale(); - boolean hasGlasses = AllItems.GOGGLES.isIn(player.getItemStackFromSlot(EquipmentSlotType.HEAD)); + boolean hasGlasses = AllItems.GOGGLES.isIn(player.getItemBySlot(EquipmentSlotType.HEAD)); if (hasGlasses != gogglesMode) { gogglesMode = hasGlasses; @@ -264,7 +264,7 @@ public class TooltipHelper { private static boolean findTooltip(ItemStack stack) { String key = getTooltipTranslationKey(stack); - if (I18n.hasKey(key)) { + if (I18n.exists(key)) { cachedTooltips.put(key, buildToolTip(key, stack)); return true; } @@ -278,8 +278,8 @@ public class TooltipHelper { String summaryKey = translationKey + ".summary"; // Summary - if (I18n.hasKey(summaryKey)) - tooltip = tooltip.withSummary(new StringTextComponent(I18n.format(summaryKey))); + if (I18n.exists(summaryKey)) + tooltip = tooltip.withSummary(new StringTextComponent(I18n.get(summaryKey))); // Requirements // if (stack.getItem() instanceof BlockItem) { @@ -293,21 +293,21 @@ public class TooltipHelper { for (int i = 1; i < 100; i++) { String conditionKey = translationKey + ".condition" + i; String behaviourKey = translationKey + ".behaviour" + i; - if (!I18n.hasKey(conditionKey)) + if (!I18n.exists(conditionKey)) break; if (i == 1) tooltip.getLinesOnShift() .add(new StringTextComponent("")); - tooltip.withBehaviour(I18n.format(conditionKey), I18n.format(behaviourKey)); + tooltip.withBehaviour(I18n.get(conditionKey), I18n.get(behaviourKey)); } // Controls for (int i = 1; i < 100; i++) { String controlKey = translationKey + ".control" + i; String actionKey = translationKey + ".action" + i; - if (!I18n.hasKey(controlKey)) + if (!I18n.exists(controlKey)) break; - tooltip.withControl(I18n.format(controlKey), I18n.format(actionKey)); + tooltip.withControl(I18n.get(controlKey), I18n.get(actionKey)); } return tooltip.createTabs(); @@ -318,7 +318,7 @@ public class TooltipHelper { if (tooltipReferrals.containsKey(item)) return tooltipReferrals.get(item) .get() + ".tooltip"; - return item.getTranslationKey(stack) + ".tooltip"; + return item.getDescriptionId(stack) + ".tooltip"; } // private static int getComponentLength(ITextComponent component) { diff --git a/src/main/java/com/simibubi/create/foundation/item/render/CustomRenderedItemModel.java b/src/main/java/com/simibubi/create/foundation/item/render/CustomRenderedItemModel.java index 6ef18e8cd..23fa7f229 100644 --- a/src/main/java/com/simibubi/create/foundation/item/render/CustomRenderedItemModel.java +++ b/src/main/java/com/simibubi/create/foundation/item/render/CustomRenderedItemModel.java @@ -29,7 +29,7 @@ public abstract class CustomRenderedItemModel extends BakedModelWrapper getIntersectingContraptions() { - Set contraptions = ContraptionHandler.loadedContraptions.get(self.world) + Set contraptions = ContraptionHandler.loadedContraptions.get(self.level) .values() .stream() .map(Reference::get) .filter(cEntity -> cEntity != null && cEntity.collidingEntities.containsKey(self)) .collect(Collectors.toSet()); - contraptions.addAll(self.world.getEntitiesWithinAABB(AbstractContraptionEntity.class, self.getBoundingBox() - .grow(1f))); + contraptions.addAll(self.level.getEntitiesOfClass(AbstractContraptionEntity.class, self.getBoundingBox() + .inflate(1f))); return contraptions; } @@ -87,9 +87,9 @@ public abstract class EntityContraptionInteractionMixin extends CapabilityProvid } @Inject(at = @At(value = "JUMP", opcode = 154, // IFNE line 587 injecting before `!blockstate.isAir(this.world, blockpos)` - ordinal = 4), method = "move") + ordinal = 4), method = "move") // nextStep()F private void movementMixin(MoverType mover, Vector3d movement, CallbackInfo ci) { - Vector3d worldPos = self.getPositionVec() + Vector3d worldPos = self.position() .add(0, -0.2, 0); AtomicBoolean stepped = new AtomicBoolean(false); @@ -104,25 +104,25 @@ public abstract class EntityContraptionInteractionMixin extends CapabilityProvid this.nextStepDistance = this.determineNextStepDistance(); } - @Inject(method = { "spawnSprintingParticles" }, at = @At(value = "TAIL")) + @Inject(method = { "spawnSprintingParticles" }, at = @At(value = "TAIL")) // spawnSprintParticle()V private void createRunningParticlesMixin(CallbackInfo ci) { - Vector3d worldPos = self.getPositionVec() + Vector3d worldPos = self.position() .add(0, -0.2, 0); BlockPos pos = new BlockPos(worldPos); // pos where particles are spawned forCollision(worldPos, (contraption, blockstate, blockpos) -> { - if (!blockstate.addRunningEffects(self.world, blockpos, self) - && blockstate.getRenderType() != BlockRenderType.INVISIBLE) { - Vector3d vec3d = self.getMotion(); - self.world.addParticle(new BlockParticleData(ParticleTypes.BLOCK, blockstate).setPos(pos), - self.getX() + ((double) rand.nextFloat() - 0.5D) * (double) self.getWidth(), self.getY() + 0.1D, - self.getZ() + ((double) rand.nextFloat() - 0.5D) * (double) self.getWidth(), vec3d.x * -4.0D, 1.5D, + if (!blockstate.addRunningEffects(self.level, blockpos, self) + && blockstate.getRenderShape() != BlockRenderType.INVISIBLE) { + Vector3d vec3d = self.getDeltaMovement(); + self.level.addParticle(new BlockParticleData(ParticleTypes.BLOCK, blockstate).setPos(pos), + self.getX() + ((double) rand.nextFloat() - 0.5D) * (double) self.getBbWidth(), self.getY() + 0.1D, + self.getZ() + ((double) rand.nextFloat() - 0.5D) * (double) self.getBbWidth(), vec3d.x * -4.0D, 1.5D, vec3d.z * -4.0D); } }); } - @Inject(method = "playSound", at = @At("HEAD"), cancellable = true) + @Inject(method = "playSound", at = @At("HEAD"), cancellable = true) // playSound(Lnet/minecraft/util/SoundEvent;FF)V private void playSoundShifted(SoundEvent event, float pitch, float volume, CallbackInfo ci) { if (this.contraption != null && (!self.isSilent() || self instanceof PlayerEntity)) { double x = self.getX(); @@ -132,7 +132,7 @@ public abstract class EntityContraptionInteractionMixin extends CapabilityProvid worldPos = worldPos.add(x, y, z); - self.world.playSound(null, worldPos.x + x, worldPos.y + y, worldPos.z + z, event, self.getSoundCategory(), + self.level.playSound(null, worldPos.x + x, worldPos.y + y, worldPos.z + z, event, self.getSoundSource(), pitch, volume); ci.cancel(); diff --git a/src/main/java/com/simibubi/create/foundation/mixin/FixNormalScalingMixin.java b/src/main/java/com/simibubi/create/foundation/mixin/FixNormalScalingMixin.java index 46b35d6e3..12bb65618 100644 --- a/src/main/java/com/simibubi/create/foundation/mixin/FixNormalScalingMixin.java +++ b/src/main/java/com/simibubi/create/foundation/mixin/FixNormalScalingMixin.java @@ -18,6 +18,7 @@ public class FixNormalScalingMixin { * same as in the beginning. */ @Inject(at = @At(value = "INVOKE", target = "Lnet/minecraft/util/math/vector/Matrix3f;multiply(F)V", shift = Shift.AFTER), method = "scale(FFF)V", cancellable = true) + // At mul(F)V, method: scale(FFF)V private void returnAfterNegate(float x, float y, float z, CallbackInfo ci) { ci.cancel(); } @@ -30,6 +31,7 @@ public class FixNormalScalingMixin { * does not work for negative numbers. */ @ModifyArg(at = @At(value = "INVOKE", target = "Lnet/minecraft/util/math/MathHelper;fastInverseCbrt(F)F"), method = "scale(FFF)V") + // at fastInvCubeRoot(F)F, method: fastInvCubeRoot(F)F private float absInvCbrtInput(float input) { return Math.abs(input); } diff --git a/src/main/java/com/simibubi/create/foundation/mixin/HeavyBootsOnPlayerMixin.java b/src/main/java/com/simibubi/create/foundation/mixin/HeavyBootsOnPlayerMixin.java index 3ab84bb01..985b74d01 100644 --- a/src/main/java/com/simibubi/create/foundation/mixin/HeavyBootsOnPlayerMixin.java +++ b/src/main/java/com/simibubi/create/foundation/mixin/HeavyBootsOnPlayerMixin.java @@ -22,7 +22,7 @@ public abstract class HeavyBootsOnPlayerMixin extends AbstractClientPlayerEntity super(p_i50991_1_, p_i50991_2_); } - @Inject(at = @At("HEAD"), method = "canSwim", cancellable = true) + @Inject(at = @At("HEAD"), method = "canSwim", cancellable = true) // isUnderWater()Z public void noSwimmingWithHeavyBootsOn(CallbackInfoReturnable cir) { CompoundNBT persistentData = getPersistentData(); if (persistentData.contains("HeavyBoots")) diff --git a/src/main/java/com/simibubi/create/foundation/mixin/ModelDataRefreshMixin.java b/src/main/java/com/simibubi/create/foundation/mixin/ModelDataRefreshMixin.java index cf9babd4d..a7857c1b0 100644 --- a/src/main/java/com/simibubi/create/foundation/mixin/ModelDataRefreshMixin.java +++ b/src/main/java/com/simibubi/create/foundation/mixin/ModelDataRefreshMixin.java @@ -27,8 +27,8 @@ public class ModelDataRefreshMixin { @Inject(at = @At("HEAD"), method = "requestModelDataRefresh", cancellable = true, remap = false) private static void requestModelDataRefresh(TileEntity te, CallbackInfo ci) { if (te != null) { - World world = te.getWorld(); - if (world != Minecraft.getInstance().world && world instanceof SchematicWorld) + World world = te.getLevel(); + if (world != Minecraft.getInstance().level && world instanceof SchematicWorld) ci.cancel(); } } diff --git a/src/main/java/com/simibubi/create/foundation/mixin/WindowResizeMixin.java b/src/main/java/com/simibubi/create/foundation/mixin/WindowResizeMixin.java index 21ed291ff..5d0a60b8c 100644 --- a/src/main/java/com/simibubi/create/foundation/mixin/WindowResizeMixin.java +++ b/src/main/java/com/simibubi/create/foundation/mixin/WindowResizeMixin.java @@ -20,7 +20,7 @@ public class WindowResizeMixin { @Shadow @Final private MainWindow mainWindow; - @Inject(at = @At("TAIL"), method = "updateWindowSize") + @Inject(at = @At("TAIL"), method = "updateWindowSize") // resizeDisplay()V private void updateWindowSize(CallbackInfo ci) { UIRenderHelper.updateWindowSize(mainWindow); } diff --git a/src/main/java/com/simibubi/create/foundation/networking/AllPackets.java b/src/main/java/com/simibubi/create/foundation/networking/AllPackets.java index 4138e6fc1..079bc0cbd 100644 --- a/src/main/java/com/simibubi/create/foundation/networking/AllPackets.java +++ b/src/main/java/com/simibubi/create/foundation/networking/AllPackets.java @@ -143,7 +143,7 @@ public enum AllPackets { public static void sendToNear(World world, BlockPos pos, int range, Object message) { channel.send(PacketDistributor.NEAR - .with(TargetPoint.p(pos.getX(), pos.getY(), pos.getZ(), range, world.getRegistryKey())), message); + .with(TargetPoint.p(pos.getX(), pos.getY(), pos.getZ(), range, world.dimension())), message); } private static class LoadedPacket { diff --git a/src/main/java/com/simibubi/create/foundation/networking/ISyncPersistentData.java b/src/main/java/com/simibubi/create/foundation/networking/ISyncPersistentData.java index f8d30dd44..77d3ccfde 100644 --- a/src/main/java/com/simibubi/create/foundation/networking/ISyncPersistentData.java +++ b/src/main/java/com/simibubi/create/foundation/networking/ISyncPersistentData.java @@ -26,29 +26,29 @@ public interface ISyncPersistentData { public Packet(Entity entity) { this.entity = entity; - this.entityId = entity.getEntityId(); + this.entityId = entity.getId(); } public Packet(PacketBuffer buffer) { entityId = buffer.readInt(); - readData = buffer.readCompoundTag(); + readData = buffer.readNbt(); } @Override public void write(PacketBuffer buffer) { buffer.writeInt(entityId); - buffer.writeCompoundTag(entity.getPersistentData()); + buffer.writeNbt(entity.getPersistentData()); } @Override public void handle(Supplier context) { context.get() .enqueueWork(() -> { - Entity entityByID = Minecraft.getInstance().world.getEntityByID(entityId); + Entity entityByID = Minecraft.getInstance().level.getEntity(entityId); if (!(entityByID instanceof ISyncPersistentData)) return; CompoundNBT data = entityByID.getPersistentData(); - for (Iterator iterator = data.keySet() + for (Iterator iterator = data.getAllKeys() .iterator(); iterator.hasNext(); ) { data.remove(iterator.next()); } diff --git a/src/main/java/com/simibubi/create/foundation/networking/NbtPacket.java b/src/main/java/com/simibubi/create/foundation/networking/NbtPacket.java index b42262760..92d01609e 100644 --- a/src/main/java/com/simibubi/create/foundation/networking/NbtPacket.java +++ b/src/main/java/com/simibubi/create/foundation/networking/NbtPacket.java @@ -30,13 +30,13 @@ public class NbtPacket extends SimplePacketBase { } public NbtPacket(PacketBuffer buffer) { - stack = buffer.readItemStack(); + stack = buffer.readItem(); slot = buffer.readInt(); hand = Hand.values()[buffer.readInt()]; } public void write(PacketBuffer buffer) { - buffer.writeItemStack(stack); + buffer.writeItem(stack); buffer.writeInt(slot); buffer.writeInt(hand.ordinal()); } @@ -51,16 +51,16 @@ public class NbtPacket extends SimplePacketBase { if (!(stack.getItem() instanceof SymmetryWandItem || stack.getItem() instanceof ZapperItem)) { return; } - stack.removeChildTag("AttributeModifiers"); + stack.removeTagKey("AttributeModifiers"); if (slot == -1) { - ItemStack heldItem = player.getHeldItem(hand); + ItemStack heldItem = player.getItemInHand(hand); if (heldItem.getItem() == stack.getItem()) { heldItem.setTag(stack.getTag()); } return; } - ItemStack heldInSlot = player.inventory.getStackInSlot(slot); + ItemStack heldInSlot = player.inventory.getItem(slot); if (heldInSlot.getItem() == stack.getItem()) { heldInSlot.setTag(stack.getTag()); } diff --git a/src/main/java/com/simibubi/create/foundation/networking/TileEntityConfigurationPacket.java b/src/main/java/com/simibubi/create/foundation/networking/TileEntityConfigurationPacket.java index 4bb198dcc..9f0ca903d 100644 --- a/src/main/java/com/simibubi/create/foundation/networking/TileEntityConfigurationPacket.java +++ b/src/main/java/com/simibubi/create/foundation/networking/TileEntityConfigurationPacket.java @@ -39,15 +39,15 @@ public abstract class TileEntityConfigurationPacket .getSender(); if (player == null) return; - World world = player.world; + World world = player.level; - if (world == null || !world.isBlockPresent(pos)) + if (world == null || !world.isLoaded(pos)) return; - TileEntity tileEntity = world.getTileEntity(pos); + TileEntity tileEntity = world.getBlockEntity(pos); if (tileEntity instanceof SyncedTileEntity) { applySettings((TE) tileEntity); ((SyncedTileEntity) tileEntity).sendData(); - tileEntity.markDirty(); + tileEntity.setChanged(); } }); context.get() diff --git a/src/main/java/com/simibubi/create/foundation/networking/TileEntityDataPacket.java b/src/main/java/com/simibubi/create/foundation/networking/TileEntityDataPacket.java index 0be7edd6d..4e8acd5f7 100644 --- a/src/main/java/com/simibubi/create/foundation/networking/TileEntityDataPacket.java +++ b/src/main/java/com/simibubi/create/foundation/networking/TileEntityDataPacket.java @@ -38,12 +38,12 @@ public abstract class TileEntityDataPacket extends public void handle(Supplier context) { NetworkEvent.Context ctx = context.get(); ctx.enqueueWork(() -> { - ClientWorld world = Minecraft.getInstance().world; + ClientWorld world = Minecraft.getInstance().level; if (world == null) return; - TileEntity tile = world.getTileEntity(tilePos); + TileEntity tile = world.getBlockEntity(tilePos); if (tile instanceof SyncedTileEntity) { handlePacket((TE) tile); diff --git a/src/main/java/com/simibubi/create/foundation/ponder/NavigatableSimiScreen.java b/src/main/java/com/simibubi/create/foundation/ponder/NavigatableSimiScreen.java index 3ff97cfbb..83291738a 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/NavigatableSimiScreen.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/NavigatableSimiScreen.java @@ -45,8 +45,8 @@ public abstract class NavigatableSimiScreen extends AbstractSimiScreen { public NavigatableSimiScreen() { MainWindow window = Minecraft.getInstance() .getWindow(); - depthPointX = window.getScaledWidth() / 2; - depthPointY = window.getScaledHeight() / 2; + depthPointX = window.getGuiScaledWidth() / 2; + depthPointY = window.getGuiScaledHeight() / 2; } @Override @@ -100,18 +100,18 @@ public abstract class NavigatableSimiScreen extends AbstractSimiScreen { if (backTrack == null) return; - ms.push(); + ms.pushPose(); ms.translate(0, 0, 500); if (backTrack.isHovered()) { TranslationTextComponent translate = Lang.translate(backTrackingLangKey()); - textRenderer.draw(ms, translate, 41 - textRenderer.getWidth(translate) / 2, height - 16, + font.draw(ms, translate, 41 - font.width(translate) / 2, height - 16, Theme.i(Theme.Key.TEXT_DARKER)); - if (MathHelper.epsilonEquals(arrowAnimation.getValue(), arrowAnimation.getChaseTarget())) { + if (MathHelper.equal(arrowAnimation.getValue(), arrowAnimation.getChaseTarget())) { arrowAnimation.setValue(1); arrowAnimation.setValue(1);// called twice to also set the previous value to 1 } } - ms.pop(); + ms.popPose(); } protected String backTrackingLangKey() { @@ -145,24 +145,24 @@ public abstract class NavigatableSimiScreen extends AbstractSimiScreen { // draw last screen into buffer if (lastScreen != null && lastScreen != this && !transition.settled()) { - ms.push(); - UIRenderHelper.framebuffer.framebufferClear(Minecraft.IS_RUNNING_ON_MAC); + ms.pushPose(); + UIRenderHelper.framebuffer.clear(Minecraft.ON_OSX); ms.translate(0, 0, -1000); - UIRenderHelper.framebuffer.bindFramebuffer(true); + UIRenderHelper.framebuffer.bindWrite(true); lastScreen.render(ms, mouseX, mouseY, partialTicks); - ms.pop(); - ms.push(); + ms.popPose(); + ms.pushPose(); // use the buffer texture Minecraft.getInstance() - .getFramebuffer() - .bindFramebuffer(true); + .getMainRenderTarget() + .bindWrite(true); MainWindow window = Minecraft.getInstance() .getWindow(); - int dpx = window.getScaledWidth() / 2; - int dpy = window.getScaledHeight() / 2; + int dpx = window.getGuiScaledWidth() / 2; + int dpy = window.getGuiScaledHeight() / 2; if (lastScreen instanceof AbstractSimiScreen) { dpx = ((NavigatableSimiScreen) lastScreen).depthPointX; dpy = ((NavigatableSimiScreen) lastScreen).depthPointY; @@ -177,7 +177,7 @@ public abstract class NavigatableSimiScreen extends AbstractSimiScreen { UIRenderHelper.drawFramebuffer(1f - Math.abs(transitionValue)); RenderSystem.disableBlend(); RenderSystem.enableAlphaTest(); - ms.pop(); + ms.popPose(); } // modify current screen as well @@ -202,9 +202,9 @@ public abstract class NavigatableSimiScreen extends AbstractSimiScreen { } public void centerScalingOnMouse() { - MainWindow w = client.getWindow(); - double mouseX = client.mouseHelper.getMouseX() * w.getScaledWidth() / w.getWidth(); - double mouseY = client.mouseHelper.getMouseY() * w.getScaledHeight() / w.getHeight(); + MainWindow w = minecraft.getWindow(); + double mouseX = minecraft.mouseHandler.xpos() * w.getGuiScaledWidth() / w.getScreenWidth(); + double mouseY = minecraft.mouseHandler.ypos() * w.getGuiScaledHeight() / w.getScreenHeight(); centerScalingOn((int) mouseX, (int) mouseY); } @@ -219,7 +219,7 @@ public abstract class NavigatableSimiScreen extends AbstractSimiScreen { if (history.isEmpty()) return; - history.add(0, Minecraft.getInstance().currentScreen); + history.add(0, Minecraft.getInstance().screen); int spacing = 20; List names = history.stream() @@ -227,7 +227,7 @@ public abstract class NavigatableSimiScreen extends AbstractSimiScreen { .collect(Collectors.toList()); int bWidth = names.stream() - .mapToInt(s -> textRenderer.getStringWidth(s) + spacing) + .mapToInt(s -> font.width(s) + spacing) .sum(); MutableInt x = new MutableInt(width - bWidth); @@ -237,18 +237,18 @@ public abstract class NavigatableSimiScreen extends AbstractSimiScreen { if (x.getValue() < 25) x.setValue(25); - ms.push(); + ms.pushPose(); ms.translate(0, 0, 600); names.forEach(s -> { - int sWidth = textRenderer.getStringWidth(s); + int sWidth = font.width(s); UIRenderHelper.breadcrumbArrow(ms, x.getValue(), y.getValue(), 0, sWidth + spacing, 14, spacing / 2, 0xdd101010, 0x44101010); - textRenderer.draw(ms, s, x.getValue() + 5, y.getValue() + 3, first.getValue() ? 0xffeeffee : 0xffddeeff); + font.draw(ms, s, x.getValue() + 5, y.getValue() + 3, first.getValue() ? 0xffeeffee : 0xffddeeff); first.setFalse(); x.add(sWidth + spacing); }); - ms.pop(); + ms.popPose(); } private static String screenTitle(Screen screen) { diff --git a/src/main/java/com/simibubi/create/foundation/ponder/PonderProgressBar.java b/src/main/java/com/simibubi/create/foundation/ponder/PonderProgressBar.java index bcaf05352..b85cbb1db 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/PonderProgressBar.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/PonderProgressBar.java @@ -90,7 +90,7 @@ public class PonderProgressBar extends AbstractSimiWidget { @Override public void renderButton(@Nonnull MatrixStack ms, int mouseX, int mouseY, float partialTicks) { - hovered = clicked(mouseX, mouseY); + isHovered = clicked(mouseX, mouseY); new BoxElement() .withBackground(Theme.c(Theme.Key.PONDER_BACKGROUND_FLAT)) @@ -99,20 +99,20 @@ public class PonderProgressBar extends AbstractSimiWidget { .withBounds(width, height) .render(ms); - ms.push(); + ms.pushPose(); ms.translate(x - 2, y - 2, 200); - ms.push(); + ms.pushPose(); ms.scale((width + 4) * progress.getValue(partialTicks), 1, 1); int c1 = Theme.i(Theme.Key.PONDER_PROGRESSBAR, true); int c2 = Theme.i(Theme.Key.PONDER_PROGRESSBAR, false); - GuiUtils.drawGradientRect(ms.peek().getModel(), 110, 0, 3, 1, 4, c1, c1); - GuiUtils.drawGradientRect(ms.peek().getModel(), 110, 0, 4, 1, 5, c2, c2); - ms.pop(); + GuiUtils.drawGradientRect(ms.last().pose(), 110, 0, 3, 1, 4, c1, c1); + GuiUtils.drawGradientRect(ms.last().pose(), 110, 0, 4, 1, 5, c2, c2); + ms.popPose(); renderKeyframes(ms, mouseX, partialTicks); - ms.pop(); + ms.popPose(); } private void renderKeyframes(MatrixStack ms, int mouseX, float partialTicks) { @@ -124,7 +124,7 @@ public class PonderProgressBar extends AbstractSimiWidget { int idleEndColor = Theme.i(Theme.Key.PONDER_IDLE, false) | 0x40_000000; int hoverIndex; - if (hovered) { + if (isHovered) { hoverIndex = getHoveredKeyframeIndex(activeScene, mouseX); } else { hoverIndex = -2; @@ -152,26 +152,26 @@ public class PonderProgressBar extends AbstractSimiWidget { private void drawKeyframe(MatrixStack ms, PonderScene activeScene, boolean selected, int keyframeTime, int keyframePos, int startColor, int endColor, int height) { if (selected) { - FontRenderer font = Minecraft.getInstance().fontRenderer; - GuiUtils.drawGradientRect(ms.peek() - .getModel(), 100, keyframePos, 10, keyframePos + 1, 10 + height, endColor, startColor); - ms.push(); + FontRenderer font = Minecraft.getInstance().font; + GuiUtils.drawGradientRect(ms.last() + .pose(), 100, keyframePos, 10, keyframePos + 1, 10 + height, endColor, startColor); + ms.pushPose(); ms.translate(0, 0, 100); String text; int offset; if (activeScene.currentTime < keyframeTime) { text = ">"; - offset = -1 - font.getStringWidth(text); + offset = -1 - font.width(text); } else { text = "<"; offset = 3; } font.draw(ms, text, keyframePos + offset, 10, endColor); - ms.pop(); + ms.popPose(); } - GuiUtils.drawGradientRect(ms.peek() - .getModel(), 500, keyframePos, -1, keyframePos + 1, 2 + height, startColor, endColor); + GuiUtils.drawGradientRect(ms.last() + .pose(), 500, keyframePos, -1, keyframePos + 1, 2 + height, startColor, endColor); } @Override diff --git a/src/main/java/com/simibubi/create/foundation/ponder/PonderRegistry.java b/src/main/java/com/simibubi/create/foundation/ponder/PonderRegistry.java index 06348383c..dac81b346 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/PonderRegistry.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/PonderRegistry.java @@ -88,8 +88,8 @@ public class PonderRegistry { for (int i = 0; i < entries.size(); i++) { PonderStoryBoardEntry sb = entries.get(i); Template activeTemplate = loadSchematic(sb.getSchematicName()); - PonderWorld world = new PonderWorld(BlockPos.ZERO, Minecraft.getInstance().world); - activeTemplate.placeAndNotifyListeners(world, BlockPos.ZERO, new PlacementSettings(), world.rand); + PonderWorld world = new PonderWorld(BlockPos.ZERO, Minecraft.getInstance().level); + activeTemplate.placeInWorld(world, BlockPos.ZERO, new PlacementSettings(), world.random); world.createBackup(); PonderScene scene = compileScene(i, sb, world); scene.begin(); @@ -119,7 +119,7 @@ public class PonderRegistry { try (DataInputStream stream = new DataInputStream(new BufferedInputStream(new GZIPInputStream(resourceAsStream)))) { CompoundNBT nbt = CompressedStreamTools.read(stream, new NBTSizeTracker(0x20000000L)); - t.read(nbt); + t.load(nbt); } catch (IOException e) { Create.LOGGER.warn("Failed to read ponder schematic", e); } diff --git a/src/main/java/com/simibubi/create/foundation/ponder/PonderScene.java b/src/main/java/com/simibubi/create/foundation/ponder/PonderScene.java index a970431bd..f1942fba6 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/PonderScene.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/PonderScene.java @@ -107,7 +107,7 @@ public class PonderScene { schedule = new ArrayList<>(); activeSchedule = new ArrayList<>(); transform = new SceneTransform(); - basePlateSize = getBounds().getXSize(); + basePlateSize = getBounds().getXSpan(); info = new SceneRenderInfo(); baseWorldSection = new WorldSectionElement(); renderViewEntity = new ArmorStandEntity(world, 0, 0, 0); @@ -150,10 +150,10 @@ public class PonderScene { BlockPos origin = new BlockPos(basePlateOffsetX, 0, basePlateOffsetZ); if (!world.getBounds() - .isVecInside(selectedPos)) + .isInside(selectedPos)) return Pair.of(ItemStack.EMPTY, null); - if (new MutableBoundingBox(origin, origin.add(new Vector3i(basePlateSize - 1, 0, basePlateSize - 1))) - .isVecInside(selectedPos)) { + if (new MutableBoundingBox(origin, origin.offset(new Vector3i(basePlateSize - 1, 0, basePlateSize - 1))) + .isInside(selectedPos)) { if (PonderIndex.EDITOR_MODE) nearestHit.getValue() .getFirst() @@ -223,15 +223,15 @@ public class PonderScene { } public void renderScene(SuperRenderTypeBuffer buffer, MatrixStack ms, float pt) { - ms.push(); + ms.pushPose(); Minecraft mc = Minecraft.getInstance(); - Entity prevRVE = mc.renderViewEntity; + Entity prevRVE = mc.cameraEntity; - mc.renderViewEntity = this.renderViewEntity; + mc.cameraEntity = this.renderViewEntity; forEachVisible(PonderSceneElement.class, e -> e.renderFirst(world, buffer, ms, pt)); - mc.renderViewEntity = prevRVE; + mc.cameraEntity = prevRVE; - for (RenderType type : RenderType.getBlockLayers()) + for (RenderType type : RenderType.chunkBufferLayers()) forEachVisible(PonderSceneElement.class, e -> e.renderLayer(world, buffer, type, ms, pt)); forEachVisible(PonderSceneElement.class, e -> e.renderLast(world, buffer, ms, pt)); @@ -240,13 +240,13 @@ public class PonderScene { world.renderParticles(ms, buffer, info, pt); outliner.renderOutlines(ms, buffer, pt); - ms.pop(); + ms.popPose(); } public void renderOverlay(PonderUI screen, MatrixStack ms, float partialTicks) { - ms.push(); + ms.pushPose(); forEachVisible(PonderOverlayElement.class, e -> e.render(this, screen, ms, partialTicks)); - ms.pop(); + ms.popPose(); } public void setPointOfInterest(Vector3d poi) { @@ -464,7 +464,7 @@ public class PonderScene { public void updateSceneRVE(float pt) { Vector3d v = screenToScene(width / 2, height / 2, 500, pt); - renderViewEntity.setPosition(v.x, v.y, v.z); + renderViewEntity.setPos(v.x, v.y, v.z); } public Vector3d screenToScene(double x, double y, int depth, float pt) { @@ -482,7 +482,7 @@ public class PonderScene { float f = 1f / (30 * scaleFactor); - vec = vec.mul(f, -f, f); + vec = vec.multiply(f, -f, f); vec = vec.subtract((basePlateSize + basePlateOffsetX) / -2f, -1f + yOffset, (basePlateSize + basePlateOffsetZ) / -2f); @@ -493,14 +493,14 @@ public class PonderScene { refreshMatrix(pt); Vector4f vec4 = new Vector4f((float) vec.x, (float) vec.y, (float) vec.z, 1); vec4.transform(cachedMat); - return new Vector2f(vec4.getX(), vec4.getY()); + return new Vector2f(vec4.x(), vec4.y()); } protected void refreshMatrix(float pt) { if (cachedMat != null) return; - cachedMat = apply(new MatrixStack(), pt, false).peek() - .getModel(); + cachedMat = apply(new MatrixStack(), pt, false).last() + .pose(); } } @@ -508,7 +508,7 @@ public class PonderScene { public class SceneRenderInfo extends ActiveRenderInfo { public void set(float xRotation, float yRotation) { - setDirection(yRotation, xRotation); + setRotation(yRotation, xRotation); } } diff --git a/src/main/java/com/simibubi/create/foundation/ponder/PonderTooltipHandler.java b/src/main/java/com/simibubi/create/foundation/ponder/PonderTooltipHandler.java index 0cb380252..a47304a31 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/PonderTooltipHandler.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/PonderTooltipHandler.java @@ -45,12 +45,12 @@ public class PonderTooltipHandler { } Minecraft instance = Minecraft.getInstance(); - Screen currentScreen = instance.currentScreen; + Screen currentScreen = instance.screen; float value = holdWProgress.getValue(); int keyCode = ponderKeybind().getKey() - .getKeyCode(); + .getValue(); long window = instance.getWindow() - .getHandle(); + .getWindow(); if (!subject && InputMappings.isKeyDown(window, keyCode)) { if (value >= 1) { @@ -77,9 +77,9 @@ public class PonderTooltipHandler { return; float renderPartialTicks = Minecraft.getInstance() - .getRenderPartialTicks(); + .getFrameTime(); ITextComponent component = subject ? Lang.createTranslationTextComponent(SUBJECT) - .formatted(TextFormatting.GREEN) + .withStyle(TextFormatting.GREEN) : makeProgressBar(Math.min(1, holdWProgress.getValue(renderPartialTicks) * 8 / 7f)); if (toolTip.size() < 2) toolTip.add(component); @@ -89,14 +89,14 @@ public class PonderTooltipHandler { protected static void updateHovered(ItemStack stack) { Minecraft instance = Minecraft.getInstance(); - Screen currentScreen = instance.currentScreen; + Screen currentScreen = instance.screen; ItemStack prevStack = trackingStack; hoveredStack = ItemStack.EMPTY; subject = false; if (currentScreen instanceof PonderUI) { PonderUI ponderUI = (PonderUI) currentScreen; - if (stack.isItemEqual(ponderUI.getSubject())) + if (stack.sameItem(ponderUI.getSubject())) subject = true; } @@ -106,7 +106,7 @@ public class PonderTooltipHandler { .getRegistryName())) return; - if (prevStack.isEmpty() || !prevStack.isItemEqual(stack)) + if (prevStack.isEmpty() || !prevStack.sameItem(stack)) holdWProgress.startWithValue(0); hoveredStack = stack; @@ -119,7 +119,7 @@ public class PonderTooltipHandler { if (holdWProgress.getValue() == 0) return; float renderPartialTicks = Minecraft.getInstance() - .getRenderPartialTicks(); + .getFrameTime(); int start = event.getOriginalBorderStart(); int end = event.getOriginalBorderEnd(); float progress = Math.min(1, holdWProgress.getValue(renderPartialTicks) * 8 / 7f); @@ -140,12 +140,12 @@ public class PonderTooltipHandler { private static ITextComponent makeProgressBar(float progress) { IFormattableTextComponent holdW = Lang .translate(HOLD_TO_PONDER, - ((IFormattableTextComponent) ponderKeybind().getBoundKeyLocalizedText()).formatted(TextFormatting.GRAY)) - .formatted(TextFormatting.DARK_GRAY); + ((IFormattableTextComponent) ponderKeybind().getTranslatedKeyMessage()).withStyle(TextFormatting.GRAY)) + .withStyle(TextFormatting.DARK_GRAY); - FontRenderer fontRenderer = Minecraft.getInstance().fontRenderer; - float charWidth = fontRenderer.getStringWidth("|"); - float tipWidth = fontRenderer.getWidth(holdW); + FontRenderer fontRenderer = Minecraft.getInstance().font; + float charWidth = fontRenderer.width("|"); + float tipWidth = fontRenderer.width(holdW); int total = (int) (tipWidth / charWidth); int current = (int) (progress * total); @@ -162,7 +162,7 @@ public class PonderTooltipHandler { } protected static KeyBinding ponderKeybind() { - return Minecraft.getInstance().gameSettings.keyBindForward; + return Minecraft.getInstance().options.keyUp; } } diff --git a/src/main/java/com/simibubi/create/foundation/ponder/PonderUI.java b/src/main/java/com/simibubi/create/foundation/ponder/PonderUI.java index 20a99833a..ddf6de0f7 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/PonderUI.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/PonderUI.java @@ -190,7 +190,7 @@ public class PonderUI extends NavigatableSimiScreen { }).showing(chapter)); }*/ - GameSettings bindings = client.gameSettings; + GameSettings bindings = minecraft.options; int spacing = 8; int bX = (width - 20) / 2 - (70 + 2 * spacing); int bY = height - 20 - 31; @@ -203,7 +203,7 @@ public class PonderUI extends NavigatableSimiScreen { } widgets.add(scan = new PonderButton(bX, bY) - .withShortcut(bindings.keyBindDrop) + .withShortcut(bindings.keyDrop) .showing(AllIcons.I_MTD_SCAN) .enableFade(0, 5) .withCallback(() -> { @@ -212,7 +212,7 @@ public class PonderUI extends NavigatableSimiScreen { scenes.get(index) .deselect(); else - ponderPartialTicksPaused = client.getRenderPartialTicks(); + ponderPartialTicksPaused = minecraft.getFrameTime(); })); widgets.add(slowMode = new PonderButton(width - 20 - 31, bY) @@ -229,28 +229,28 @@ public class PonderUI extends NavigatableSimiScreen { bX += 50 + spacing; widgets.add(left = new PonderButton(bX, bY) - .withShortcut(bindings.keyBindLeft) + .withShortcut(bindings.keyLeft) .showing(AllIcons.I_MTD_LEFT) .enableFade(0, 5) .withCallback(() -> this.scroll(false))); bX += 20 + spacing; widgets.add(close = new PonderButton(bX, bY) - .withShortcut(bindings.keyBindInventory) + .withShortcut(bindings.keyInventory) .showing(AllIcons.I_MTD_CLOSE) .enableFade(0, 5) .withCallback(this::onClose)); bX += 20 + spacing; widgets.add(right = new PonderButton(bX, bY) - .withShortcut(bindings.keyBindRight) + .withShortcut(bindings.keyRight) .showing(AllIcons.I_MTD_RIGHT) .enableFade(0, 5) .withCallback(() -> this.scroll(true))); bX += 50 + spacing; widgets.add(replay = new PonderButton(bX, bY) - .withShortcut(bindings.keyBindBack) + .withShortcut(bindings.keyDown) .showing(AllIcons.I_MTD_REPLAY) .enableFade(0, 5) .withCallback(this::replay)); @@ -342,9 +342,9 @@ public class PonderUI extends NavigatableSimiScreen { if (!identifyMode) return; - MainWindow w = client.getWindow(); - double mouseX = client.mouseHelper.getMouseX() * w.getScaledWidth() / w.getWidth(); - double mouseY = client.mouseHelper.getMouseY() * w.getScaledHeight() / w.getHeight(); + MainWindow w = minecraft.getWindow(); + double mouseX = minecraft.mouseHandler.xpos() * w.getGuiScaledWidth() / w.getScreenWidth(); + double mouseY = minecraft.mouseHandler.ypos() * w.getGuiScaledHeight() / w.getScreenHeight(); SceneTransform t = activeScene.getTransform(); Vector3d vec1 = t.screenToScene(mouseX, mouseY, 1000, 0); Vector3d vec2 = t.screenToScene(mouseX, mouseY, -100, 0); @@ -368,8 +368,8 @@ public class PonderUI extends NavigatableSimiScreen { List list = PonderRegistry.all.get(scene.component); PonderStoryBoardEntry sb = list.get(index); Template activeTemplate = PonderRegistry.loadSchematic(sb.getSchematicName()); - PonderWorld world = new PonderWorld(BlockPos.ZERO, Minecraft.getInstance().world); - activeTemplate.placeAndNotifyListeners(world, BlockPos.ZERO, new PlacementSettings(), new Random()); + PonderWorld world = new PonderWorld(BlockPos.ZERO, Minecraft.getInstance().level); + activeTemplate.placeInWorld(world, BlockPos.ZERO, new PlacementSettings(), new Random()); world.createBackup(); scene = PonderRegistry.compileScene(index, sb, world); scene.begin(); @@ -420,7 +420,7 @@ public class PonderUI extends NavigatableSimiScreen { protected void renderScene(MatrixStack ms, int mouseX, int mouseY, int i, float partialTicks) { SuperRenderTypeBuffer buffer = SuperRenderTypeBuffer.getInstance(); PonderScene story = scenes.get(i); - double value = lazyIndex.getValue(client.getRenderPartialTicks()); + double value = lazyIndex.getValue(minecraft.getFrameTime()); double diff = i - value; double slide = MathHelper.lerp(diff * diff, 200, 600) * diff; @@ -433,7 +433,7 @@ public class PonderUI extends NavigatableSimiScreen { // has to be outside of MS transforms, important for vertex sorting RenderSystem.translated(0, 0, 800); - ms.push(); + ms.pushPose(); ms.translate(0, 0, -800); story.transform.updateScreenParams(width, height, slide); story.transform.apply(ms, partialTicks, false); @@ -442,13 +442,13 @@ public class PonderUI extends NavigatableSimiScreen { buffer.draw(); MutableBoundingBox bounds = story.getBounds(); - ms.push(); + ms.pushPose(); // kool shadow fx { RenderSystem.enableCull(); RenderSystem.enableDepthTest(); - ms.push(); + ms.pushPose(); ms.translate(story.basePlateOffsetX, 0, story.basePlateOffsetZ); ms.scale(1, -1, 1); @@ -461,23 +461,23 @@ public class PonderUI extends NavigatableSimiScreen { for (int f = 0; f < 4; f++) { ms.translate(story.basePlateSize, 0, 0); - ms.push(); + ms.pushPose(); ms.translate(0, 0, -1 / 1024f); if (flash > 0) { - ms.push(); + ms.pushPose(); ms.scale(1, .5f + flash * .75f, 1); - GuiUtils.drawGradientRect(ms.peek() - .getModel(), 0, 0, -1, -story.basePlateSize, 0, 0x00_c6ffc9, + GuiUtils.drawGradientRect(ms.last() + .pose(), 0, 0, -1, -story.basePlateSize, 0, 0x00_c6ffc9, ColorHelper.applyAlpha(0xaa_c6ffc9, alpha)); - ms.pop(); + ms.popPose(); } ms.translate(0, 0, 2 / 1024f); - GuiUtils.drawGradientRect(ms.peek() - .getModel(), 0, 0, 0, -story.basePlateSize, 4, 0x66_000000, 0x00_000000); - ms.pop(); - ms.multiply(Vector3f.POSITIVE_Y.getDegreesQuaternion(-90)); + GuiUtils.drawGradientRect(ms.last() + .pose(), 0, 0, 0, -story.basePlateSize, 4, 0x66_000000, 0x00_000000); + ms.popPose(); + ms.mulPose(Vector3f.YP.rotationDegrees(-90)); } - ms.pop(); + ms.popPose(); RenderSystem.disableCull(); RenderSystem.disableDepthTest(); } @@ -490,48 +490,48 @@ public class PonderUI extends NavigatableSimiScreen { ms.translate(1, -8, -1 / 64f); // X AXIS - ms.push(); + ms.pushPose(); ms.translate(4, -3, 0); ms.translate(0, 0, -2 / 1024f); - for (int x = 0; x <= bounds.getXSize(); x++) { + for (int x = 0; x <= bounds.getXSpan(); x++) { ms.translate(-16, 0, 0); - textRenderer.draw(ms, x == bounds.getXSize() ? "x" : "" + x, 0, 0, 0xFFFFFFFF); + font.draw(ms, x == bounds.getXSpan() ? "x" : "" + x, 0, 0, 0xFFFFFFFF); } - ms.pop(); + ms.popPose(); // Z AXIS - ms.push(); + ms.pushPose(); ms.scale(-1, 1, 1); ms.translate(0, -3, -4); - ms.multiply(Vector3f.POSITIVE_Y.getDegreesQuaternion(-90)); + ms.mulPose(Vector3f.YP.rotationDegrees(-90)); ms.translate(-8, -2, 2 / 64f); - for (int z = 0; z <= bounds.getZSize(); z++) { + for (int z = 0; z <= bounds.getZSpan(); z++) { ms.translate(16, 0, 0); - textRenderer.draw(ms, z == bounds.getZSize() ? "z" : "" + z, 0, 0, 0xFFFFFFFF); + font.draw(ms, z == bounds.getZSpan() ? "z" : "" + z, 0, 0, 0xFFFFFFFF); } - ms.pop(); + ms.popPose(); // DIRECTIONS - ms.push(); - ms.translate(bounds.getXSize() * -8, 0, bounds.getZSize() * 8); - ms.multiply(Vector3f.POSITIVE_Y.getDegreesQuaternion(-90)); + ms.pushPose(); + ms.translate(bounds.getXSpan() * -8, 0, bounds.getZSpan() * 8); + ms.mulPose(Vector3f.YP.rotationDegrees(-90)); for (Direction d : Iterate.horizontalDirections) { - ms.multiply(Vector3f.POSITIVE_Y.getDegreesQuaternion(90)); - ms.push(); - ms.translate(0, 0, bounds.getZSize() * 16); - ms.multiply(Vector3f.POSITIVE_X.getDegreesQuaternion(-90)); - textRenderer.draw(ms, d.name() + ms.mulPose(Vector3f.YP.rotationDegrees(90)); + ms.pushPose(); + ms.translate(0, 0, bounds.getZSpan() * 16); + ms.mulPose(Vector3f.XP.rotationDegrees(-90)); + font.draw(ms, d.name() .substring(0, 1), 0, 0, 0x66FFFFFF); - textRenderer.draw(ms, "|", 2, 10, 0x44FFFFFF); - textRenderer.draw(ms, ".", 2, 14, 0x22FFFFFF); - ms.pop(); + font.draw(ms, "|", 2, 10, 0x44FFFFFF); + font.draw(ms, ".", 2, 14, 0x22FFFFFF); + ms.popPose(); } - ms.pop(); + ms.popPose(); buffer.draw(); } - ms.pop(); - ms.pop(); + ms.popPose(); + ms.popPose(); RenderSystem.popMatrix(); } @@ -550,13 +550,13 @@ public class PonderUI extends NavigatableSimiScreen { int tooltipColor = Theme.i(Theme.Key.TEXT_DARKER); { // Chapter title - ms.push(); + ms.pushPose(); ms.translate(0, 0, 400); int x = 31 + 20 + 8; int y = 31; String title = activeScene.getTitle(); - int wordWrappedHeight = textRenderer.getWordWrappedHeight(title, left.x - 51); + int wordWrappedHeight = font.wordWrapHeight(title, left.x - 51); int streakHeight = 35 - 9 + wordWrappedHeight; UIRenderHelper.streak(ms, 0, x - 4, y - 12 + streakHeight / 2, streakHeight, (int) (150 * fade)); @@ -574,27 +574,27 @@ public class PonderUI extends NavigatableSimiScreen { .at(x - 39, y - 11) .render(ms); - textRenderer.draw(ms, Lang.translate(PONDERING), x, y - 6, tooltipColor); + font.draw(ms, Lang.translate(PONDERING), x, y - 6, tooltipColor); y += 8; x += 0; ms.translate(x, y, 0); - ms.multiply(Vector3f.NEGATIVE_X.getDegreesQuaternion(indexDiff * -75)); + ms.mulPose(Vector3f.XN.rotationDegrees(indexDiff * -75)); ms.translate(0, 0, 5); - FontHelper.drawSplitString(ms, textRenderer, title, 0, 0, left.x - 51, + FontHelper.drawSplitString(ms, font, title, 0, 0, left.x - 51, ColorHelper.applyAlpha(Theme.i(Theme.Key.TEXT), 1 - indexDiff)); - ms.pop(); + ms.popPose(); if (chapter != null) { - ms.push(); + ms.pushPose(); ms.translate(chap.x - 4 - 4, chap.y, 0); UIRenderHelper.streak(ms, 180, 4, 10, 26, (int) (150 * fade)); - drawRightAlignedString(textRenderer, ms, Lang.translate(IN_CHAPTER).getString(), 0, 0, tooltipColor); - drawRightAlignedString(textRenderer, ms, + drawRightAlignedString(font, ms, Lang.translate(IN_CHAPTER).getString(), 0, 0, tooltipColor); + drawRightAlignedString(font, ms, Lang.translate(LANG_PREFIX + "chapter." + chapter.getId()).getString(), 0, 12, Theme.i(Theme.Key.TEXT)); - ms.pop(); + ms.popPose(); } UIRenderHelper.breadcrumbArrow(ms, width / 2 - 20, height - 51, 0, 20, 20, 5, 0x40aa9999, 0x20aa9999); @@ -605,16 +605,16 @@ public class PonderUI extends NavigatableSimiScreen { if (identifyMode) { if (noWidgetsHovered && mouseY < height - 80) { - ms.push(); + ms.pushPose(); ms.translate(mouseX, mouseY, 100); if (hoveredTooltipItem.isEmpty()) { IFormattableTextComponent text = Lang.translate( IDENTIFY_MODE, - ((IFormattableTextComponent) client.gameSettings.keyBindDrop.getBoundKeyLocalizedText()).formatted(TextFormatting.WHITE) - ).formatted(TextFormatting.GRAY); + ((IFormattableTextComponent) minecraft.options.keyDrop.getTranslatedKeyMessage()).withStyle(TextFormatting.WHITE) + ).withStyle(TextFormatting.GRAY); //renderOrderedTooltip(ms, textRenderer.wrapLines(text, width / 3), 0, 0); - renderWrappedToolTip(ms, textRenderer.getTextHandler().wrapLines(text, width / 3, Style.EMPTY), 0, 0, textRenderer); + renderWrappedToolTip(ms, font.getSplitter().splitLines(text, width / 3, Style.EMPTY), 0, 0, font); /*String tooltip = Lang .createTranslationTextComponent(IDENTIFY_MODE, client.gameSettings.keyBindDrop.getBoundKeyLocalizedText().applyTextStyle(TextFormatting.WHITE)) .applyTextStyle(TextFormatting.GRAY) @@ -626,10 +626,10 @@ public class PonderUI extends NavigatableSimiScreen { ms.translate(0, -15, 0); boolean copied = copiedBlockPos != null && hoveredBlockPos.equals(copiedBlockPos); IFormattableTextComponent coords = new StringTextComponent(hoveredBlockPos.getX() + ", " + hoveredBlockPos.getY() + ", " + hoveredBlockPos.getZ()) - .formatted(copied ? TextFormatting.GREEN : TextFormatting.GOLD); + .withStyle(copied ? TextFormatting.GREEN : TextFormatting.GOLD); renderTooltip(ms, coords, 0, 0); } - ms.pop(); + ms.popPose(); } scan.flash(); } else { @@ -651,12 +651,12 @@ public class PonderUI extends NavigatableSimiScreen { { // Scene overlay float scenePT = skipCooling > 0 ? 0 : partialTicks; - ms.push(); + ms.pushPose(); ms.translate(0, 0, 100); renderOverlay(ms, index, scenePT); if (indexDiff > 1 / 512f) renderOverlay(ms, lazyIndexValue < index ? index - 1 : index + 1, scenePT); - ms.pop(); + ms.popPose(); } // Widgets @@ -682,10 +682,10 @@ public class PonderUI extends NavigatableSimiScreen { boolean highlightAll = sceneTags.contains(PonderTag.Highlight.ALL); double s = Minecraft.getInstance() .getWindow() - .getGuiScaleFactor(); + .getGuiScale(); IntStream.range(0, tagButtons.size()) .forEach(i -> { - ms.push(); + ms.pushPose(); LerpedFloat chase = tagFades.get(i); PonderButton button = tagButtons.get(i); if (button.isMouseOver(mouseX, mouseY)) { @@ -712,31 +712,31 @@ public class PonderUI extends NavigatableSimiScreen { String tagName = this.tags.get(i) .getTitle(); - textRenderer.draw(ms, tagName, 3, 8, Theme.i(Theme.Key.TEXT_ACCENT_SLIGHT)); + font.draw(ms, tagName, 3, 8, Theme.i(Theme.Key.TEXT_ACCENT_SLIGHT)); GL11.glDisable(GL11.GL_SCISSOR_TEST); - ms.pop(); + ms.popPose(); }); - ms.push(); + ms.pushPose(); ms.translate(0, 0, 500); int tooltipY = height - 16; if (scan.isHovered()) - drawCenteredText(ms, textRenderer, Lang.translate(IDENTIFY), scan.x + 10, tooltipY, tooltipColor); + drawCenteredString(ms, font, Lang.translate(IDENTIFY), scan.x + 10, tooltipY, tooltipColor); if (index != 0 && left.isHovered()) - drawCenteredText(ms, textRenderer, Lang.translate(PREVIOUS), left.x + 10, tooltipY, tooltipColor); + drawCenteredString(ms, font, Lang.translate(PREVIOUS), left.x + 10, tooltipY, tooltipColor); if (close.isHovered()) - drawCenteredText(ms, textRenderer, Lang.translate(CLOSE), close.x + 10, tooltipY, tooltipColor); + drawCenteredString(ms, font, Lang.translate(CLOSE), close.x + 10, tooltipY, tooltipColor); if (index != scenes.size() - 1 && right.isHovered()) - drawCenteredText(ms, textRenderer, Lang.translate(NEXT), right.x + 10, tooltipY, tooltipColor); + drawCenteredString(ms, font, Lang.translate(NEXT), right.x + 10, tooltipY, tooltipColor); if (replay.isHovered()) - drawCenteredText(ms, textRenderer, Lang.translate(REPLAY), replay.x + 10, tooltipY, tooltipColor); + drawCenteredString(ms, font, Lang.translate(REPLAY), replay.x + 10, tooltipY, tooltipColor); if (slowMode.isHovered()) - drawCenteredText(ms, textRenderer, Lang.translate(SLOW_TEXT), slowMode.x + 5, tooltipY, tooltipColor); + drawCenteredString(ms, font, Lang.translate(SLOW_TEXT), slowMode.x + 5, tooltipY, tooltipColor); if (PonderIndex.EDITOR_MODE && userMode.isHovered()) - drawCenteredString(ms, textRenderer, "Editor View", userMode.x + 10, tooltipY, tooltipColor); - ms.pop(); + drawCenteredString(ms, font, "Editor View", userMode.x + 10, tooltipY, tooltipColor); + ms.popPose(); RenderSystem.enableDepthTest(); } @@ -744,19 +744,19 @@ public class PonderUI extends NavigatableSimiScreen { private void renderOverlay(MatrixStack ms, int i, float partialTicks) { if (identifyMode) return; - ms.push(); + ms.pushPose(); PonderScene story = scenes.get(i); story.renderOverlay(this, ms, skipCooling > 0 ? 0 : identifyMode ? ponderPartialTicksPaused : partialTicks); - ms.pop(); + ms.popPose(); } @Override public boolean mouseClicked(double x, double y, int button) { if (identifyMode && hoveredBlockPos != null && PonderIndex.EDITOR_MODE) { - long handle = client.getWindow() - .getHandle(); + long handle = minecraft.getWindow() + .getWindow(); if (copiedBlockPos != null && button == 1) { - clipboardHelper.setClipboardString(handle, + clipboardHelper.setClipboard(handle, "util.select.fromTo(" + copiedBlockPos.getX() + ", " + copiedBlockPos.getY() + ", " + copiedBlockPos.getZ() + ", " + hoveredBlockPos.getX() + ", " + hoveredBlockPos.getY() + ", " + hoveredBlockPos.getZ() + ")"); @@ -765,10 +765,10 @@ public class PonderUI extends NavigatableSimiScreen { } if (hasShiftDown()) - clipboardHelper.setClipboardString(handle, "util.select.position(" + hoveredBlockPos.getX() + ", " + clipboardHelper.setClipboard(handle, "util.select.position(" + hoveredBlockPos.getX() + ", " + hoveredBlockPos.getY() + ", " + hoveredBlockPos.getZ() + ")"); else - clipboardHelper.setClipboardString(handle, "util.grid.at(" + hoveredBlockPos.getX() + ", " + clipboardHelper.setClipboard(handle, "util.grid.at(" + hoveredBlockPos.getX() + ", " + hoveredBlockPos.getY() + ", " + hoveredBlockPos.getZ() + ")"); copiedBlockPos = hoveredBlockPos; return true; @@ -779,15 +779,15 @@ public class PonderUI extends NavigatableSimiScreen { @Override public boolean keyPressed(int code, int p_keyPressed_2_, int p_keyPressed_3_) { - GameSettings settings = Minecraft.getInstance().gameSettings; - int sCode = settings.keyBindBack.getKey() - .getKeyCode(); - int aCode = settings.keyBindLeft.getKey() - .getKeyCode(); - int dCode = settings.keyBindRight.getKey() - .getKeyCode(); - int qCode = settings.keyBindDrop.getKey() - .getKeyCode(); + GameSettings settings = Minecraft.getInstance().options; + int sCode = settings.keyDown.getKey() + .getValue(); + int aCode = settings.keyLeft.getKey() + .getValue(); + int dCode = settings.keyRight.getKey() + .getValue(); + int qCode = settings.keyDrop.getKey() + .getValue(); if (code == sCode) { replay(); @@ -822,12 +822,12 @@ public class PonderUI extends NavigatableSimiScreen { .getString(); return stack.getItem() - .getName() + .getDescription() .getString(); } public FontRenderer getFontRenderer() { - return textRenderer; + return font; } protected boolean isMouseOver(double mouseX, double mouseY, int x, int y, int w, int h) { @@ -839,7 +839,7 @@ public class PonderUI extends NavigatableSimiScreen { public static void renderSpeechBox(MatrixStack ms, int x, int y, int w, int h, boolean highlighted, Pointing pointing, boolean returnWithLocalTransform) { if (!returnWithLocalTransform) - ms.push(); + ms.pushPose(); int boxX = x; int boxY = y; @@ -895,20 +895,20 @@ public class PonderUI extends NavigatableSimiScreen { .withBounds(w, h) .render(ms); - ms.push(); + ms.pushPose(); ms.translate(divotX + divotRadius, divotY + divotRadius, 10); - ms.multiply(Vector3f.POSITIVE_Z.getDegreesQuaternion(divotRotation)); + ms.mulPose(Vector3f.ZP.rotationDegrees(divotRotation)); ms.translate(-divotRadius, -divotRadius, 0); AllGuiTextures.SPEECH_TOOLTIP_BACKGROUND.draw(ms, 0, 0); AllGuiTextures.SPEECH_TOOLTIP_COLOR.draw(ms, 0, 0, c); - ms.pop(); + ms.popPose(); if (returnWithLocalTransform) { ms.translate(boxX, boxY, 0); return; } - ms.pop(); + ms.popPose(); } @@ -923,7 +923,7 @@ public class PonderUI extends NavigatableSimiScreen { @Override public boolean isEquivalentTo(NavigatableSimiScreen other) { if (other instanceof PonderUI) - return stack.isItemEqual(((PonderUI) other).stack); + return stack.sameItem(((PonderUI) other).stack); return super.isEquivalentTo(other); } @@ -937,10 +937,10 @@ public class PonderUI extends NavigatableSimiScreen { public static float getPartialTicks() { float renderPartialTicks = Minecraft.getInstance() - .getRenderPartialTicks(); + .getFrameTime(); - if (Minecraft.getInstance().currentScreen instanceof PonderUI) { - PonderUI ui = (PonderUI) Minecraft.getInstance().currentScreen; + if (Minecraft.getInstance().screen instanceof PonderUI) { + PonderUI ui = (PonderUI) Minecraft.getInstance().screen; if (ui.identifyMode) return ponderPartialTicksPaused; @@ -967,7 +967,7 @@ public class PonderUI extends NavigatableSimiScreen { public void drawRightAlignedString(FontRenderer fontRenderer, MatrixStack ms, String string, int x, int y, int color) { - fontRenderer.draw(ms, string, (float) (x - fontRenderer.getStringWidth(string)), (float) y, color); + fontRenderer.draw(ms, string, (float) (x - fontRenderer.width(string)), (float) y, color); } public boolean isComfyReadingEnabled() { diff --git a/src/main/java/com/simibubi/create/foundation/ponder/PonderWorld.java b/src/main/java/com/simibubi/create/foundation/ponder/PonderWorld.java index 83a8d7f46..aa659dc95 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/PonderWorld.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/PonderWorld.java @@ -76,7 +76,7 @@ public class PonderWorld extends SchematicWorld { // ParticleManager.factories - ATs don't seem to like this one particleFactories = ObfuscationReflectionHelper.getPrivateValue(ParticleManager.class, - Minecraft.getInstance().particles, "field_178932_g"); + Minecraft.getInstance().particleEngine, "providers"); } public void createBackup() { @@ -84,8 +84,8 @@ public class PonderWorld extends SchematicWorld { originalTileEntities.clear(); blocks.forEach((k, v) -> originalBlocks.put(k, v)); tileEntities.forEach( - (k, v) -> originalTileEntities.put(k, TileEntity.createFromTag(blocks.get(k), v.write(new CompoundNBT())))); - entities.forEach(e -> EntityType.loadEntityUnchecked(e.serializeNBT(), this) + (k, v) -> originalTileEntities.put(k, TileEntity.loadStatic(blocks.get(k), v.save(new CompoundNBT())))); + entities.forEach(e -> EntityType.create(e.serializeNBT(), this) .ifPresent(originalEntities::add)); } @@ -97,12 +97,12 @@ public class PonderWorld extends SchematicWorld { renderedTileEntities.clear(); originalBlocks.forEach((k, v) -> blocks.put(k, v)); originalTileEntities.forEach((k, v) -> { - TileEntity te = TileEntity.createFromTag(originalBlocks.get(k), v.write(new CompoundNBT())); - onTEadded(te, te.getPos()); + TileEntity te = TileEntity.loadStatic(originalBlocks.get(k), v.save(new CompoundNBT())); + onTEadded(te, te.getBlockPos()); tileEntities.put(k, te); renderedTileEntities.add(te); }); - originalEntities.forEach(e -> EntityType.loadEntityUnchecked(e.serializeNBT(), this) + originalEntities.forEach(e -> EntityType.create(e.serializeNBT(), this) .ifPresent(entities::add)); particles.clearEffects(); fixControllerTileEntities(); @@ -113,9 +113,9 @@ public class PonderWorld extends SchematicWorld { if (originalBlocks.containsKey(p)) blocks.put(p, originalBlocks.get(p)); if (originalTileEntities.containsKey(p)) { - TileEntity te = TileEntity.createFromTag(originalBlocks.get(p), originalTileEntities.get(p) - .write(new CompoundNBT())); - onTEadded(te, te.getPos()); + TileEntity te = TileEntity.loadStatic(originalBlocks.get(p), originalTileEntities.get(p) + .save(new CompoundNBT())); + onTEadded(te, te.getBlockPos()); tileEntities.put(p, te); } }); @@ -136,7 +136,7 @@ public class PonderWorld extends SchematicWorld { } @Override - public int getLightLevel(LightType p_226658_1_, BlockPos p_226658_2_) { + public int getBrightness(LightType p_226658_1_, BlockPos p_226658_2_) { return overrideLight == -1 ? 15 : overrideLight; } @@ -151,46 +151,46 @@ public class PonderWorld extends SchematicWorld { @Override public BlockState getBlockState(BlockPos globalPos) { if (mask != null && !mask.test(globalPos.subtract(anchor))) - return Blocks.AIR.getDefaultState(); + return Blocks.AIR.defaultBlockState(); return super.getBlockState(globalPos); } @Override // For particle collision - public IBlockReader getExistingChunk(int p_225522_1_, int p_225522_2_) { + public IBlockReader getChunkForCollisions(int p_225522_1_, int p_225522_2_) { return this; } public void renderEntities(MatrixStack ms, SuperRenderTypeBuffer buffer, ActiveRenderInfo ari, float pt) { - Vector3d Vector3d = ari.getProjectedView(); - double d0 = Vector3d.getX(); - double d1 = Vector3d.getY(); - double d2 = Vector3d.getZ(); + Vector3d Vector3d = ari.getPosition(); + double d0 = Vector3d.x(); + double d1 = Vector3d.y(); + double d2 = Vector3d.z(); for (Entity entity : entities) { - if (entity.ticksExisted == 0) { - entity.lastTickPosX = entity.getX(); - entity.lastTickPosY = entity.getY(); - entity.lastTickPosZ = entity.getZ(); + if (entity.tickCount == 0) { + entity.xOld = entity.getX(); + entity.yOld = entity.getY(); + entity.zOld = entity.getZ(); } renderEntity(entity, d0, d1, d2, pt, ms, buffer); } - buffer.draw(RenderType.getEntitySolid(PlayerContainer.BLOCK_ATLAS_TEXTURE)); - buffer.draw(RenderType.getEntityCutout(PlayerContainer.BLOCK_ATLAS_TEXTURE)); - buffer.draw(RenderType.getEntityCutoutNoCull(PlayerContainer.BLOCK_ATLAS_TEXTURE)); - buffer.draw(RenderType.getEntitySmoothCutout(PlayerContainer.BLOCK_ATLAS_TEXTURE)); + buffer.draw(RenderType.entitySolid(PlayerContainer.BLOCK_ATLAS)); + buffer.draw(RenderType.entityCutout(PlayerContainer.BLOCK_ATLAS)); + buffer.draw(RenderType.entityCutoutNoCull(PlayerContainer.BLOCK_ATLAS)); + buffer.draw(RenderType.entitySmoothCutout(PlayerContainer.BLOCK_ATLAS)); } private void renderEntity(Entity entity, double x, double y, double z, float pt, MatrixStack ms, IRenderTypeBuffer buffer) { - double d0 = MathHelper.lerp((double) pt, entity.lastTickPosX, entity.getX()); - double d1 = MathHelper.lerp((double) pt, entity.lastTickPosY, entity.getY()); - double d2 = MathHelper.lerp((double) pt, entity.lastTickPosZ, entity.getZ()); - float f = MathHelper.lerp(pt, entity.prevRotationYaw, entity.rotationYaw); + double d0 = MathHelper.lerp((double) pt, entity.xOld, entity.getX()); + double d1 = MathHelper.lerp((double) pt, entity.yOld, entity.getY()); + double d2 = MathHelper.lerp((double) pt, entity.zOld, entity.getZ()); + float f = MathHelper.lerp(pt, entity.yRotO, entity.yRot); EntityRendererManager renderManager = Minecraft.getInstance() - .getRenderManager(); + .getEntityRenderDispatcher(); int light = renderManager.getRenderer(entity) - .getLight(entity, pt); + .getPackedLightCoords(entity, pt); renderManager.render(entity, d0 - x, d1 - y, d2 - z, f, pt, ms, buffer, light); } @@ -204,10 +204,10 @@ public class PonderWorld extends SchematicWorld { for (Iterator iterator = entities.iterator(); iterator.hasNext();) { Entity entity = iterator.next(); - entity.ticksExisted++; - entity.lastTickPosX = entity.getX(); - entity.lastTickPosY = entity.getY(); - entity.lastTickPosZ = entity.getZ(); + entity.tickCount++; + entity.xOld = entity.getX(); + entity.yOld = entity.getY(); + entity.zOld = entity.getZ(); entity.tick(); if (entity.getY() <= -.5f) @@ -224,7 +224,7 @@ public class PonderWorld extends SchematicWorld { } @Override - public void addOptionalParticle(IParticleData data, double x, double y, double z, double mx, double my, double mz) { + public void addAlwaysVisibleParticle(IParticleData data, double x, double y, double z, double mx, double my, double mz) { addParticle(data, x, y, z, mx, my, mz); } @@ -235,12 +235,12 @@ public class PonderWorld extends SchematicWorld { ResourceLocation key = ForgeRegistries.PARTICLE_TYPES.getKey(data.getType()); IParticleFactory iparticlefactory = (IParticleFactory) particleFactories.get(key); return iparticlefactory == null ? null - : iparticlefactory.makeParticle(data, asClientWorld.getValue(), x, y, z, mx, my, mz); + : iparticlefactory.createParticle(data, asClientWorld.get(), x, y, z, mx, my, mz); } @Override - public boolean setBlockState(BlockPos pos, BlockState arg1, int arg2) { - return super.setBlockState(pos, arg1, arg2); + public boolean setBlock(BlockPos pos, BlockState arg1, int arg2) { + return super.setBlock(pos, arg1, arg2); } public void addParticle(Particle p) { @@ -263,9 +263,9 @@ public class PonderWorld extends SchematicWorld { BeltTileEntity beltTileEntity = (BeltTileEntity) tileEntity; if (!beltTileEntity.isController()) continue; - BlockPos controllerPos = tileEntity.getPos(); + BlockPos controllerPos = tileEntity.getBlockPos(); for (BlockPos blockPos : BeltBlock.getBeltChain(this, controllerPos)) { - TileEntity tileEntity2 = getTileEntity(blockPos); + TileEntity tileEntity2 = getBlockEntity(blockPos); if (!(tileEntity2 instanceof BeltTileEntity)) continue; BeltTileEntity belt2 = (BeltTileEntity) tileEntity2; @@ -275,14 +275,14 @@ public class PonderWorld extends SchematicWorld { if (tileEntity instanceof FluidTankTileEntity) { FluidTankTileEntity fluidTankTileEntity = (FluidTankTileEntity) tileEntity; BlockPos lastKnown = fluidTankTileEntity.getLastKnownPos(); - BlockPos current = fluidTankTileEntity.getPos(); + BlockPos current = fluidTankTileEntity.getBlockPos(); if (lastKnown == null || current == null) continue; if (fluidTankTileEntity.isController()) continue; if (!lastKnown.equals(current)) { BlockPos newControllerPos = fluidTankTileEntity.getController() - .add(current.subtract(lastKnown)); + .offset(current.subtract(lastKnown)); fluidTankTileEntity.setController(newControllerPos); } } @@ -305,7 +305,7 @@ public class PonderWorld extends SchematicWorld { if (voxelshape.isEmpty()) return; - AxisAlignedBB bb = voxelshape.getBoundingBox(); + AxisAlignedBB bb = voxelshape.bounds(); double d1 = Math.min(1.0D, bb.maxX - bb.minX); double d2 = Math.min(1.0D, bb.maxY - bb.minY); double d3 = Math.min(1.0D, bb.maxZ - bb.minZ); @@ -335,22 +335,22 @@ public class PonderWorld extends SchematicWorld { } @Override - public boolean isBlockLoaded(BlockPos pos) { + public boolean hasChunkAt(BlockPos pos) { return true; // fix particle lighting } @Override - public boolean chunkExists(int x, int y) { + public boolean hasChunk(int x, int y) { return true; // fix particle lighting } @Override - public boolean isBlockPresent(BlockPos pos) { + public boolean isLoaded(BlockPos pos) { return true; // fix particle lighting } @Override - public boolean isPlayerWithin(double p_217358_1_, double p_217358_3_, double p_217358_5_, double p_217358_7_) { + public boolean hasNearbyAlivePlayer(double p_217358_1_, double p_217358_3_, double p_217358_5_, double p_217358_7_) { return true; // always enable spawner animations } } diff --git a/src/main/java/com/simibubi/create/foundation/ponder/PonderWorldParticles.java b/src/main/java/com/simibubi/create/foundation/ponder/PonderWorldParticles.java index 6fad6cdb3..79ce37930 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/PonderWorldParticles.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/PonderWorldParticles.java @@ -61,9 +61,9 @@ public class PonderWorldParticles { public void renderParticles(MatrixStack ms, IRenderTypeBuffer buffer, ActiveRenderInfo renderInfo, float pt) { Minecraft mc = Minecraft.getInstance(); - LightTexture lightTexture = mc.gameRenderer.getLightmapTextureManager(); + LightTexture lightTexture = mc.gameRenderer.lightTexture(); - lightTexture.enableLightmap(); + lightTexture.turnOnLightLayer(); Runnable enable = () -> { RenderSystem.enableAlphaTest(); RenderSystem.defaultAlphaFunc(); @@ -71,8 +71,8 @@ public class PonderWorldParticles { RenderSystem.enableFog(); }; RenderSystem.pushMatrix(); - RenderSystem.multMatrix(ms.peek() - .getModel()); + RenderSystem.multMatrix(ms.last() + .pose()); for (IParticleRenderType iparticlerendertype : this.byType.keySet()) { if (iparticlerendertype == IParticleRenderType.NO_RENDER) @@ -82,13 +82,13 @@ public class PonderWorldParticles { if (iterable != null) { RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); Tessellator tessellator = Tessellator.getInstance(); - BufferBuilder bufferbuilder = tessellator.getBuffer(); - iparticlerendertype.beginRender(bufferbuilder, mc.textureManager); + BufferBuilder bufferbuilder = tessellator.getBuilder(); + iparticlerendertype.begin(bufferbuilder, mc.textureManager); for (Particle particle : iterable) - particle.buildGeometry(bufferbuilder, renderInfo, pt); + particle.render(bufferbuilder, renderInfo, pt); - iparticlerendertype.finishRender(tessellator); + iparticlerendertype.end(tessellator); } } @@ -97,7 +97,7 @@ public class PonderWorldParticles { RenderSystem.depthFunc(515); RenderSystem.disableBlend(); RenderSystem.defaultAlphaFunc(); - lightTexture.disableLightmap(); + lightTexture.turnOffLightLayer(); RenderSystem.disableFog(); } diff --git a/src/main/java/com/simibubi/create/foundation/ponder/SceneBuilder.java b/src/main/java/com/simibubi/create/foundation/ponder/SceneBuilder.java index ed7868ae3..dbecedced 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/SceneBuilder.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/SceneBuilder.java @@ -82,6 +82,8 @@ import net.minecraft.util.math.vector.Vector3d; import net.minecraft.util.math.vector.Vector3i; import net.minecraft.world.World; +import com.simibubi.create.foundation.ponder.elements.TextWindowElement.Builder; + /** * Enqueue instructions to the schedule via this object's methods. */ @@ -264,7 +266,7 @@ public class SceneBuilder { private void rotationIndicator(BlockPos pos, boolean direction) { addInstruction(scene -> { BlockState blockState = scene.world.getBlockState(pos); - TileEntity tileEntity = scene.world.getTileEntity(pos); + TileEntity tileEntity = scene.world.getBlockEntity(pos); if (!(blockState.getBlock() instanceof KineticBlock)) return; @@ -564,7 +566,7 @@ public class SceneBuilder { } public void destroyBlock(BlockPos pos) { - setBlock(pos, Blocks.AIR.getDefaultState(), true); + setBlock(pos, Blocks.AIR.defaultBlockState(), true); } public void setBlock(BlockPos pos, BlockState state, boolean spawnParticles) { @@ -581,7 +583,7 @@ public class SceneBuilder { public void cycleBlockProperty(BlockPos pos, Property property) { modifyBlocks(scene.getSceneBuildingUtil().select.position(pos), - s -> s.contains(property) ? s.cycle(property) : s, false); + s -> s.hasProperty(property) ? s.cycle(property) : s, false); } public void modifyBlocks(Selection selection, UnaryOperator stateFunc, boolean spawnParticles) { @@ -590,11 +592,11 @@ public class SceneBuilder { public void toggleRedstonePower(Selection selection) { modifyBlocks(selection, s -> { - if (s.contains(BlockStateProperties.POWER_0_15)) - s = s.with(BlockStateProperties.POWER_0_15, s.get(BlockStateProperties.POWER_0_15) == 0 ? 15 : 0); - if (s.contains(BlockStateProperties.POWERED)) + if (s.hasProperty(BlockStateProperties.POWER)) + s = s.setValue(BlockStateProperties.POWER, s.getValue(BlockStateProperties.POWER) == 0 ? 15 : 0); + if (s.hasProperty(BlockStateProperties.POWERED)) s = s.cycle(BlockStateProperties.POWERED); - if (s.contains(RedstoneTorchBlock.LIT)) + if (s.hasProperty(RedstoneTorchBlock.LIT)) s = s.cycle(RedstoneTorchBlock.LIT); return s; }, false); @@ -607,7 +609,7 @@ public class SceneBuilder { public void modifyEntitiesInside(Class entityClass, Selection area, Consumer entityCallBack) { addInstruction(scene -> scene.forEachWorldEntity(entityClass, e -> { - if (area.test(e.getBlockPos())) + if (area.test(e.blockPosition())) entityCallBack.accept(e); })); } @@ -628,7 +630,7 @@ public class SceneBuilder { EntityElement handle = new EntityElement(entity); scene.addElement(handle); scene.linkElement(handle, link); - world.addEntity(entity); + world.addFreshEntity(entity); }); return link; } @@ -636,7 +638,7 @@ public class SceneBuilder { public ElementLink createItemEntity(Vector3d location, Vector3d motion, ItemStack stack) { return createEntity(world -> { ItemEntity itemEntity = new ItemEntity(world, location.x, location.y, location.z, stack); - itemEntity.setMotion(motion); + itemEntity.setDeltaMovement(motion); return itemEntity; }); } @@ -649,7 +651,7 @@ public class SceneBuilder { public void createItemOnBeltLike(BlockPos location, Direction insertionSide, ItemStack stack) { addInstruction(scene -> { PonderWorld world = scene.getWorld(); - TileEntity tileEntity = world.getTileEntity(location); + TileEntity tileEntity = world.getBlockEntity(location); if (!(tileEntity instanceof SmartTileEntity)) return; SmartTileEntity beltTileEntity = (SmartTileEntity) tileEntity; @@ -658,7 +660,7 @@ public class SceneBuilder { return; behaviour.handleInsertion(stack, insertionSide.getOpposite(), false); }); - flapFunnel(location.up(), true); + flapFunnel(location.above(), true); } public ElementLink createItemOnBelt(BlockPos beltLocation, Direction insertionSide, @@ -666,7 +668,7 @@ public class SceneBuilder { ElementLink link = new ElementLink<>(BeltItemElement.class); addInstruction(scene -> { PonderWorld world = scene.getWorld(); - TileEntity tileEntity = world.getTileEntity(beltLocation); + TileEntity tileEntity = world.getBlockEntity(beltLocation); if (!(tileEntity instanceof BeltTileEntity)) return; @@ -687,14 +689,14 @@ public class SceneBuilder { return TransportedResult.doNothing(); }); }); - flapFunnel(beltLocation.up(), true); + flapFunnel(beltLocation.above(), true); return link; } public void removeItemsFromBelt(BlockPos beltLocation) { addInstruction(scene -> { PonderWorld world = scene.getWorld(); - TileEntity tileEntity = world.getTileEntity(beltLocation); + TileEntity tileEntity = world.getBlockEntity(beltLocation); if (!(tileEntity instanceof SmartTileEntity)) return; SmartTileEntity beltTileEntity = (SmartTileEntity) tileEntity; @@ -757,7 +759,7 @@ public class SceneBuilder { public void modifyTileEntity(BlockPos position, Class teType, Consumer consumer) { addInstruction(scene -> { - TileEntity tileEntity = scene.world.getTileEntity(position); + TileEntity tileEntity = scene.world.getBlockEntity(position); if (teType.isInstance(tileEntity)) consumer.accept(teType.cast(tileEntity)); }); diff --git a/src/main/java/com/simibubi/create/foundation/ponder/SceneBuildingUtil.java b/src/main/java/com/simibubi/create/foundation/ponder/SceneBuildingUtil.java index a7eed2600..3af92af68 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/SceneBuildingUtil.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/SceneBuildingUtil.java @@ -61,7 +61,7 @@ public class SceneBuildingUtil { } public Vector3d blockSurface(BlockPos pos, Direction face, float margin) { - return centerOf(pos).add(Vector3d.of(face.getDirectionVec()) + return centerOf(pos).add(Vector3d.atLowerCornerOf(face.getNormal()) .scale(.5f + margin)); } @@ -94,7 +94,7 @@ public class SceneBuildingUtil { } public Selection column(int x, int z) { - return cuboid(new BlockPos(x, 1, z), new Vector3i(0, sceneBounds.getYSize(), 0)); + return cuboid(new BlockPos(x, 1, z), new Vector3i(0, sceneBounds.getYSpan(), 0)); } public Selection layer(int y) { @@ -102,16 +102,16 @@ public class SceneBuildingUtil { } public Selection layersFrom(int y) { - return layers(y, sceneBounds.getYSize() - y); + return layers(y, sceneBounds.getYSpan() - y); } public Selection layers(int y, int height) { - return cuboid(new BlockPos(0, y, 0), new Vector3i(sceneBounds.getXSize() - 1, - Math.min(sceneBounds.getYSize() - y, height) - 1, sceneBounds.getZSize() - 1)); + return cuboid(new BlockPos(0, y, 0), new Vector3i(sceneBounds.getXSpan() - 1, + Math.min(sceneBounds.getYSpan() - y, height) - 1, sceneBounds.getZSpan() - 1)); } public Selection cuboid(BlockPos origin, Vector3i size) { - return Selection.of(new MutableBoundingBox(origin, origin.add(size))); + return Selection.of(new MutableBoundingBox(origin, origin.offset(size))); } } diff --git a/src/main/java/com/simibubi/create/foundation/ponder/Selection.java b/src/main/java/com/simibubi/create/foundation/ponder/Selection.java index 4541f1cbe..f0885bce1 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/Selection.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/Selection.java @@ -56,14 +56,14 @@ public abstract class Selection implements Predicate { @Override public Selection add(Selection other) { - other.forEach(p -> posSet.add(p.toImmutable())); + other.forEach(p -> posSet.add(p.immutable())); center = null; return this; } @Override public Selection substract(Selection other) { - other.forEach(p -> posSet.remove(p.toImmutable())); + other.forEach(p -> posSet.remove(p.immutable())); center = null; return this; } @@ -88,7 +88,7 @@ public abstract class Selection implements Predicate { if (posSet.isEmpty()) return center; for (BlockPos blockPos : posSet) - center = center.add(Vector3d.of(blockPos)); + center = center.add(Vector3d.atLowerCornerOf(blockPos)); center = center.scale(1f / posSet.size()); return center.add(new Vector3d(.5, .5, .5)); } @@ -112,7 +112,7 @@ public abstract class Selection implements Predicate { @Override public boolean test(BlockPos t) { - return bb.isVecInside(t); + return bb.isInside(t); } @Override @@ -127,7 +127,7 @@ public abstract class Selection implements Predicate { @Override public void forEach(Consumer callback) { - BlockPos.stream(bb) + BlockPos.betweenClosedStream(bb) .forEach(callback); } @@ -142,7 +142,7 @@ public abstract class Selection implements Predicate { } private AxisAlignedBB getAABB() { - return new AxisAlignedBB(bb.minX, bb.minY, bb.minZ, bb.maxX + 1, bb.maxY + 1, bb.maxZ + 1); + return new AxisAlignedBB(bb.x0, bb.y0, bb.z0, bb.x1 + 1, bb.y1 + 1, bb.z1 + 1); } @Override diff --git a/src/main/java/com/simibubi/create/foundation/ponder/content/ArmScenes.java b/src/main/java/com/simibubi/create/foundation/ponder/content/ArmScenes.java index af26370f7..4ba0e1116 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/content/ArmScenes.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/content/ArmScenes.java @@ -56,8 +56,8 @@ public class ArmScenes { scene.overlay.showControls(new InputWindowElement(depotSurface, Pointing.RIGHT).rightClick() .withItem(armItem), 50); scene.idle(7); - AxisAlignedBB depotBounds = AllShapes.DEPOT.getBoundingBox(); - scene.overlay.chaseBoundingBoxOutline(PonderPalette.INPUT, new Object(), depotBounds.offset(4, 2, 1), 400); + AxisAlignedBB depotBounds = AllShapes.DEPOT.bounds(); + scene.overlay.chaseBoundingBoxOutline(PonderPalette.INPUT, new Object(), depotBounds.move(4, 2, 1), 400); scene.overlay.showText(70) .attachKeyFrame() @@ -74,11 +74,11 @@ public class ArmScenes { scene.overlay.showControls(input, 20); scene.idle(7); Object second = new Object(); - scene.overlay.chaseBoundingBoxOutline(PonderPalette.INPUT, second, depotBounds.offset(0, 2, 1), 100); + scene.overlay.chaseBoundingBoxOutline(PonderPalette.INPUT, second, depotBounds.move(0, 2, 1), 100); scene.idle(25); scene.overlay.showControls(input, 30); scene.idle(7); - scene.overlay.chaseBoundingBoxOutline(PonderPalette.OUTPUT, second, depotBounds.offset(0, 2, 1), 280); + scene.overlay.chaseBoundingBoxOutline(PonderPalette.OUTPUT, second, depotBounds.move(0, 2, 1), 280); scene.overlay.showText(70) .colored(PonderPalette.OUTPUT) .text("Right-Click again to toggle between Input (Blue) and Output (Orange)") @@ -88,7 +88,7 @@ public class ArmScenes { scene.idle(80); scene.world.showSection(util.select.position(1, 1, 0), Direction.DOWN); scene.idle(15); - scene.overlay.chaseBoundingBoxOutline(PonderPalette.INPUT, new Object(), depotBounds.offset(1, 1, 0), 43); + scene.overlay.chaseBoundingBoxOutline(PonderPalette.INPUT, new Object(), depotBounds.move(1, 1, 0), 43); scene.overlay.showText(50) .colored(PonderPalette.WHITE) @@ -138,15 +138,15 @@ public class ArmScenes { scene.world.showSection(util.select.position(4, 1, 2), Direction.DOWN); scene.idle(5); - scene.overlay.chaseBoundingBoxOutline(PonderPalette.OUTPUT, new Object(), depotBounds.offset(0, 2, 1), 60); + scene.overlay.chaseBoundingBoxOutline(PonderPalette.OUTPUT, new Object(), depotBounds.move(0, 2, 1), 60); scene.idle(5); - scene.overlay.chaseBoundingBoxOutline(PonderPalette.INPUT, new Object(), depotBounds.offset(4, 2, 1), 60); + scene.overlay.chaseBoundingBoxOutline(PonderPalette.INPUT, new Object(), depotBounds.move(4, 2, 1), 60); scene.idle(5); - scene.overlay.chaseBoundingBoxOutline(PonderPalette.OUTPUT, new Object(), depotBounds.offset(1, 1, 0), 60); + scene.overlay.chaseBoundingBoxOutline(PonderPalette.OUTPUT, new Object(), depotBounds.move(1, 1, 0), 60); scene.idle(5); - scene.overlay.chaseBoundingBoxOutline(PonderPalette.INPUT, new Object(), depotBounds.offset(1, 3, 4), 60); + scene.overlay.chaseBoundingBoxOutline(PonderPalette.INPUT, new Object(), depotBounds.move(1, 3, 4), 60); scene.idle(5); - scene.overlay.chaseBoundingBoxOutline(PonderPalette.INPUT, new Object(), depotBounds.offset(4, 1, 2), 60); + scene.overlay.chaseBoundingBoxOutline(PonderPalette.INPUT, new Object(), depotBounds.move(4, 1, 2), 60); scene.idle(5); scene.overlay.showText(80) @@ -191,8 +191,8 @@ public class ArmScenes { AxisAlignedBB chestBounds = new AxisAlignedBB(1 / 16f, 0, 1 / 16f, 15 / 16f, 14 / 16f, 15 / 16f); AxisAlignedBB funnelBounds = new AxisAlignedBB(0, 0, 8 / 16f, 16 / 16f, 16 / 16f, 16 / 16f); - scene.overlay.chaseBoundingBoxOutline(PonderPalette.RED, in, chestBounds.offset(4, 2, 3), 120); - scene.overlay.chaseBoundingBoxOutline(PonderPalette.RED, out, chestBounds.offset(0, 2, 3), 120); + scene.overlay.chaseBoundingBoxOutline(PonderPalette.RED, in, chestBounds.move(4, 2, 3), 120); + scene.overlay.chaseBoundingBoxOutline(PonderPalette.RED, out, chestBounds.move(0, 2, 3), 120); scene.overlay.showText(80) .attachKeyFrame() .text("However, not every type of Inventory can be interacted with directly") @@ -206,9 +206,9 @@ public class ArmScenes { scene.world.showSection(util.select.position(0, 2, 2), Direction.SOUTH); scene.idle(10); - scene.overlay.chaseBoundingBoxOutline(PonderPalette.INPUT, in, depotBounds.offset(4, 1, 2), 80); + scene.overlay.chaseBoundingBoxOutline(PonderPalette.INPUT, in, depotBounds.move(4, 1, 2), 80); scene.idle(5); - scene.overlay.chaseBoundingBoxOutline(PonderPalette.OUTPUT, out, funnelBounds.offset(0, 2, 2), 80); + scene.overlay.chaseBoundingBoxOutline(PonderPalette.OUTPUT, out, funnelBounds.move(0, 2, 2), 80); scene.idle(5); scene.overlay.showText(60) @@ -381,7 +381,7 @@ public class ArmScenes { public static void modes(SceneBuilder scene, SceneBuildingUtil util) { scene.title("mechanical_arm_modes", "Distribution modes of the Mechanical Arm"); scene.configureBasePlate(0, 1, 5); - scene.world.setBlock(util.grid.at(3, 1, 0), Blocks.BARRIER.getDefaultState(), false); + scene.world.setBlock(util.grid.at(3, 1, 0), Blocks.BARRIER.defaultBlockState(), false); scene.world.showSection(util.select.layer(0), Direction.UP); scene.idle(5); @@ -392,20 +392,20 @@ public class ArmScenes { scene.world.showSection(util.select.fromTo(1, 1, 1, 5, 1, 2), Direction.SOUTH); scene.idle(10); - AxisAlignedBB depotBox = AllShapes.DEPOT.getBoundingBox(); + AxisAlignedBB depotBox = AllShapes.DEPOT.bounds(); AxisAlignedBB beltBox = depotBox.contract(0, -3 / 16f, 0) - .grow(1, 0, 0); + .inflate(1, 0, 0); BlockPos depotPos = util.grid.at(1, 1, 4); BlockPos armPos = util.grid.at(3, 1, 4); - scene.overlay.chaseBoundingBoxOutline(PonderPalette.INPUT, depotBox, depotBox.offset(1, 1, 4), 60); + scene.overlay.chaseBoundingBoxOutline(PonderPalette.INPUT, depotBox, depotBox.move(1, 1, 4), 60); scene.overlay.showText(30) .text("Input") .pointAt(util.vector.blockSurface(depotPos, Direction.WEST)) .placeNearTarget() .colored(PonderPalette.INPUT); scene.idle(40); - scene.overlay.chaseBoundingBoxOutline(PonderPalette.OUTPUT, depotBox, beltBox.offset(2, 1, 2), 40); + scene.overlay.chaseBoundingBoxOutline(PonderPalette.OUTPUT, depotBox, beltBox.move(2, 1, 2), 40); scene.overlay.showText(40) .text("Outputs") .pointAt(util.vector.blockSurface(util.grid.at(1, 1, 2), Direction.WEST)) @@ -468,13 +468,13 @@ public class ArmScenes { if (i == 12) { scene.world.moveSection(blockage, util.vector.of(-1, 0, 0), 10); - scene.world.setBlock(util.grid.at(3, 1, 0), Blocks.BARRIER.getDefaultState(), false); + scene.world.setBlock(util.grid.at(3, 1, 0), Blocks.BARRIER.defaultBlockState(), false); } int index = i % 3; if (i == 13) { - scene.world.setBlock(util.grid.at(2, 1, 0), Blocks.BARRIER.getDefaultState(), false); + scene.world.setBlock(util.grid.at(2, 1, 0), Blocks.BARRIER.defaultBlockState(), false); ElementLink blockage2 = scene.world.showIndependentSection(util.select.position(4, 1, 0), Direction.UP); scene.world.moveSection(blockage2, util.vector.of(-2, 0, 0), 0); @@ -510,7 +510,7 @@ public class ArmScenes { .colored(PonderPalette.RED); scene.idle(40); scene.world.moveSection(blockage, util.vector.of(1, 0, 0), 10); - scene.world.setBlock(util.grid.at(3, 1, 0), Blocks.AIR.getDefaultState(), false); + scene.world.setBlock(util.grid.at(3, 1, 0), Blocks.AIR.defaultBlockState(), false); scene.idle(50); scene.world.multiplyKineticSpeed(util.select.fromTo(1, 1, 1, 5, 0, 3), 2); } @@ -557,7 +557,7 @@ public class ArmScenes { scene.overlay.showText(60) .colored(PonderPalette.RED) .attachKeyFrame() - .pointAt(util.vector.topOf(armPos.up())) + .pointAt(util.vector.topOf(armPos.above())) .placeNearTarget() .text("When powered by Redstone, Mechanical Arms will not activate"); scene.idle(70); @@ -582,7 +582,7 @@ public class ArmScenes { scene.world.toggleRedstonePower(redstone); scene.effects.indicateRedstone(leverPos); scene.overlay.showText(60) - .pointAt(util.vector.topOf(armPos.up())) + .pointAt(util.vector.topOf(armPos.above())) .placeNearTarget() .text("Before stopping, it will finish any started cycles"); } @@ -593,7 +593,7 @@ public class ArmScenes { scene.overlay.showText(100) .colored(PonderPalette.GREEN) .attachKeyFrame() - .pointAt(util.vector.topOf(armPos.up())) + .pointAt(util.vector.topOf(armPos.above())) .placeNearTarget() .text("Thus, a negative pulse can be used to trigger exactly one activation cycle"); } diff --git a/src/main/java/com/simibubi/create/foundation/ponder/content/BearingScenes.java b/src/main/java/com/simibubi/create/foundation/ponder/content/BearingScenes.java index 34d878e95..394241ae8 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/content/BearingScenes.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/content/BearingScenes.java @@ -31,7 +31,7 @@ public class BearingScenes { scene.world.showSection(util.select.fromTo(1, 0, 1, 5, 0, 5), Direction.UP); scene.world.setBlock(util.grid.at(2, -1, 0), AllBlocks.SAIL.getDefaultState() - .with(SailBlock.FACING, Direction.NORTH), false); + .setValue(SailBlock.FACING, Direction.NORTH), false); scene.idle(5); Selection kinetics = util.select.fromTo(3, 1, 1, 4, 1, 4); Selection largeCog = util.select.position(3, 2, 2); @@ -56,35 +56,35 @@ public class BearingScenes { scene.idle(10); for (Direction d : Iterate.directions) if (d.getAxis() != Axis.Z) - scene.world.showSectionAndMerge(util.select.fromTo(anchorPos.offset(d, 1), anchorPos.offset(d, 2)), + scene.world.showSectionAndMerge(util.select.fromTo(anchorPos.relative(d, 1), anchorPos.relative(d, 2)), d.getOpposite(), structure); scene.idle(10); - scene.world.showSectionAndMerge(util.select.fromTo(anchorPos.up() + scene.world.showSectionAndMerge(util.select.fromTo(anchorPos.above() .east(), - anchorPos.up(3) + anchorPos.above(3) .east()), Direction.WEST, structure); - scene.world.showSectionAndMerge(util.select.fromTo(anchorPos.down() + scene.world.showSectionAndMerge(util.select.fromTo(anchorPos.below() .west(), - anchorPos.down(3) + anchorPos.below(3) .west()), Direction.EAST, structure); scene.world.showSectionAndMerge(util.select.fromTo(anchorPos.east() - .down(), + .below(), anchorPos.east(3) - .down()), + .below()), Direction.UP, structure); scene.world.showSectionAndMerge(util.select.fromTo(anchorPos.west() - .up(), + .above(), anchorPos.west(3) - .up()), + .above()), Direction.DOWN, structure); scene.idle(5); for (Direction d : Iterate.directions) if (d.getAxis() != Axis.Z) - scene.effects.superGlue(anchorPos.offset(d, 1), d.getOpposite(), false); + scene.effects.superGlue(anchorPos.relative(d, 1), d.getOpposite(), false); scene.idle(10); scene.overlay.showText(60) @@ -166,7 +166,7 @@ public class BearingScenes { scene.world.showSection(util.select.position(bearingPos), Direction.DOWN); scene.idle(10); ElementLink contraption = - scene.world.showIndependentSection(util.select.position(bearingPos.up()), Direction.DOWN); + scene.world.showIndependentSection(util.select.position(bearingPos.above()), Direction.DOWN); scene.idle(10); scene.world.showSectionAndMerge(util.select.fromTo(3, 2, 2, 3, 3, 1), Direction.SOUTH, contraption); scene.world.showSectionAndMerge(util.select.fromTo(3, 2, 4, 3, 3, 5), Direction.NORTH, contraption); @@ -177,8 +177,8 @@ public class BearingScenes { scene.world.showSectionAndMerge(util.select.position(2, 1, 5), Direction.EAST, contraption); scene.world.showSectionAndMerge(util.select.position(3, 3, 3), Direction.DOWN, contraption); scene.idle(5); - scene.effects.superGlue(bearingPos.up(), Direction.SOUTH, true); - scene.effects.superGlue(bearingPos.up(), Direction.NORTH, true); + scene.effects.superGlue(bearingPos.above(), Direction.SOUTH, true); + scene.effects.superGlue(bearingPos.above(), Direction.NORTH, true); scene.idle(5); scene.effects.superGlue(util.grid.at(3, 1, 5), Direction.UP, true); scene.idle(5); @@ -226,7 +226,7 @@ public class BearingScenes { .add(cog4); BlockPos bearingPos = util.grid.at(3, 2, 3); - scene.overlay.showSelectionWithText(util.select.position(bearingPos.up()), 60) + scene.overlay.showSelectionWithText(util.select.position(bearingPos.above()), 60) .colored(PonderPalette.GREEN) .pointAt(util.vector.blockSurface(bearingPos, Direction.WEST)) .placeNearTarget() @@ -234,7 +234,7 @@ public class BearingScenes { .text("Mechanical Bearings attach to the block in front of them"); scene.idle(50); - ElementLink plank = scene.world.showIndependentSection(util.select.position(bearingPos.up() + ElementLink plank = scene.world.showIndependentSection(util.select.position(bearingPos.above() .east() .north()), Direction.DOWN); scene.world.moveSection(plank, util.vector.of(-1, 0, 1), 0); @@ -244,12 +244,12 @@ public class BearingScenes { scene.world.setKineticSpeed(cog2, 8); scene.world.setKineticSpeed(cog3, -16); scene.world.setKineticSpeed(cog4, 16); - scene.effects.rotationSpeedIndicator(bearingPos.down()); + scene.effects.rotationSpeedIndicator(bearingPos.below()); scene.world.rotateBearing(bearingPos, 360, 37 * 2); scene.world.rotateSection(plank, 0, 360, 0, 37 * 2); scene.overlay.showText(80) - .pointAt(util.vector.topOf(bearingPos.up())) + .pointAt(util.vector.topOf(bearingPos.above())) .placeNearTarget() .attachKeyFrame() .text("Upon receiving Rotational Force, it will assemble it into a Rotating Contraption"); @@ -273,12 +273,12 @@ public class BearingScenes { scene.world.setKineticSpeed(cog2, 8); scene.world.setKineticSpeed(cog3, -16); scene.world.setKineticSpeed(cog4, 16); - scene.effects.rotationSpeedIndicator(bearingPos.down()); + scene.effects.rotationSpeedIndicator(bearingPos.below()); scene.world.rotateBearing(bearingPos, 360 * 2, 37 * 4); scene.world.rotateSection(contraption, 0, 360 * 2, 0, 37 * 4); scene.overlay.showText(120) - .pointAt(util.vector.topOf(bearingPos.up())) + .pointAt(util.vector.topOf(bearingPos.above())) .placeNearTarget() .attachKeyFrame() .sharedText("movement_anchors"); @@ -329,7 +329,7 @@ public class BearingScenes { scene.world.rotateSection(contraption, 0, 35, 0, 0); scene.world.rotateBearing(bearingPos, 35, 0); - Vector3d target = util.vector.topOf(bearingPos.down()); + Vector3d target = util.vector.topOf(bearingPos.below()); scene.overlay.showLine(PonderPalette.RED, target.add(-2.5, 0, 3.5), target, 50); scene.overlay.showLine(PonderPalette.GREEN, target.add(0, 0, 4.5), target, 50); @@ -606,16 +606,16 @@ public class BearingScenes { scene.world.showSection(util.select.position(bearingPos), Direction.DOWN); scene.idle(5); ElementLink plank = - scene.world.showIndependentSection(util.select.position(bearingPos.up()), Direction.DOWN); + scene.world.showIndependentSection(util.select.position(bearingPos.above()), Direction.DOWN); scene.idle(10); for (int i = 0; i < 3; i++) { for (Direction d : Iterate.horizontalDirections) { - BlockPos location = bearingPos.up(i + 1) - .offset(d); + BlockPos location = bearingPos.above(i + 1) + .relative(d); if (frame) scene.world.modifyBlock(location, s -> AllBlocks.SAIL_FRAME.getDefaultState() - .with(SailBlock.FACING, s.get(SailBlock.FACING)), false); + .setValue(SailBlock.FACING, s.getValue(SailBlock.FACING)), false); scene.world.showSectionAndMerge(util.select.position(location), d.getOpposite(), plank); scene.idle(2); } @@ -628,7 +628,7 @@ public class BearingScenes { .attachKeyFrame(); scene.idle(80); - scene.overlay.showSelectionWithText(util.select.position(bearingPos.up()), 80) + scene.overlay.showSelectionWithText(util.select.position(bearingPos.above()), 80) .colored(PonderPalette.GREEN) .text("They will attach to blocks and each other without the need of Super Glue or Chassis Blocks") .attachKeyFrame() @@ -650,7 +650,7 @@ public class BearingScenes { scene.overlay.showControls(input, 30); scene.idle(7); scene.world.setBlock(util.grid.at(2, 3, 1), AllBlocks.DYED_SAILS.get(DyeColor.BLUE).getDefaultState() - .with(SailBlock.FACING, Direction.WEST), false); + .setValue(SailBlock.FACING, Direction.WEST), false); scene.idle(10); scene.overlay.showText(40) .colored(PonderPalette.BLUE) @@ -663,7 +663,7 @@ public class BearingScenes { scene.idle(7); scene.world.replaceBlocks(util.select.fromTo(2, 2, 1, 2, 4, 1), AllBlocks.DYED_SAILS.get(DyeColor.BLUE).getDefaultState() - .with(SailBlock.FACING, Direction.WEST), + .setValue(SailBlock.FACING, Direction.WEST), false); scene.idle(20); @@ -678,7 +678,7 @@ public class BearingScenes { scene.overlay.showControls(input, 30); scene.idle(7); scene.world.setBlock(util.grid.at(3, 3, 2), AllBlocks.SAIL_FRAME.getDefaultState() - .with(SailBlock.FACING, Direction.NORTH), false); + .setValue(SailBlock.FACING, Direction.NORTH), false); scene.idle(10); scene.overlay.showText(40) .text("Right-Click with Shears to turn them back into frames") @@ -689,7 +689,7 @@ public class BearingScenes { scene.overlay.showControls(input, 30); scene.idle(7); scene.world.replaceBlocks(util.select.fromTo(3, 2, 2, 3, 4, 2), AllBlocks.SAIL_FRAME.getDefaultState() - .with(SailBlock.FACING, Direction.NORTH), false); + .setValue(SailBlock.FACING, Direction.NORTH), false); scene.idle(20); } diff --git a/src/main/java/com/simibubi/create/foundation/ponder/content/BeltScenes.java b/src/main/java/com/simibubi/create/foundation/ponder/content/BeltScenes.java index a2d45e769..aabb1480d 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/content/BeltScenes.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/content/BeltScenes.java @@ -61,15 +61,15 @@ public class BeltScenes { Vector3d backEndCenter = util.vector.centerOf(backEnd); AxisAlignedBB connectBB = new AxisAlignedBB(backEndCenter, backEndCenter); AxisAlignedBB shaftBB = AllBlocks.SHAFT.getDefaultState() - .with(ShaftBlock.AXIS, Axis.Z) + .setValue(ShaftBlock.AXIS, Axis.Z) .getShape(null, null) - .getBoundingBox(); + .bounds(); scene.overlay.showControls(new InputWindowElement(util.vector.topOf(backEnd), Pointing.DOWN).rightClick() .withItem(beltItem), 57); scene.idle(7); - scene.overlay.chaseBoundingBoxOutline(PonderPalette.GREEN, backEnd, shaftBB.offset(backEnd), 42); + scene.overlay.chaseBoundingBoxOutline(PonderPalette.GREEN, backEnd, shaftBB.move(backEnd), 42); scene.overlay.chaseBoundingBoxOutline(PonderPalette.BLACK, backEndCenter, connectBB, 50); scene.idle(20); @@ -77,8 +77,8 @@ public class BeltScenes { .withItem(beltItem), 37); scene.idle(7); - scene.overlay.chaseBoundingBoxOutline(PonderPalette.GREEN, frontEnd, shaftBB.offset(frontEnd), 17); - scene.overlay.chaseBoundingBoxOutline(PonderPalette.BLACK, backEndCenter, connectBB.expand(-4, 0, 0), 20); + scene.overlay.chaseBoundingBoxOutline(PonderPalette.GREEN, frontEnd, shaftBB.move(frontEnd), 17); + scene.overlay.chaseBoundingBoxOutline(PonderPalette.BLACK, backEndCenter, connectBB.expandTowards(-4, 0, 0), 20); scene.idle(20); scene.world.moveSection(shafts, util.vector.of(0, -2, 0), 0); @@ -96,7 +96,7 @@ public class BeltScenes { scene.overlay.showControls(new InputWindowElement(falseSelection, Pointing.DOWN).rightClick() .withItem(beltItem), 37); scene.idle(7); - scene.overlay.chaseBoundingBoxOutline(PonderPalette.RED, backEnd, shaftBB.offset(backEnd.south(1)), 50); + scene.overlay.chaseBoundingBoxOutline(PonderPalette.RED, backEnd, shaftBB.move(backEnd.south(1)), 50); scene.overlay.showText(80) .colored(PonderPalette.RED) @@ -115,7 +115,7 @@ public class BeltScenes { scene.overlay.showControls(new InputWindowElement(util.vector.topOf(shaftLocation), Pointing.DOWN).rightClick() .withItem(AllBlocks.SHAFT.asStack()), 50); scene.idle(7); - scene.world.modifyBlock(shaftLocation, s -> s.with(BeltBlock.PART, BeltPart.PULLEY), true); + scene.world.modifyBlock(shaftLocation, s -> s.setValue(BeltBlock.PART, BeltPart.PULLEY), true); scene.idle(10); scene.overlay.showText(43) @@ -145,7 +145,7 @@ public class BeltScenes { scene.overlay.showControls(new InputWindowElement(util.vector.topOf(shaftLocation), Pointing.DOWN).rightClick() .withWrench(), 50); scene.idle(7); - scene.world.modifyBlock(shaftLocation, s -> s.with(BeltBlock.PART, BeltPart.MIDDLE), true); + scene.world.modifyBlock(shaftLocation, s -> s.setValue(BeltBlock.PART, BeltPart.MIDDLE), true); scene.idle(10); scene.overlay.showText(50) .text("Added shafts can be removed using the wrench") @@ -412,13 +412,13 @@ public class BeltScenes { scene.overlay.showControls(new InputWindowElement(util.vector.topOf(beltPos), Pointing.DOWN).rightClick() .withItem(brassCasingItem), 20); scene.idle(7); - scene.world.modifyBlock(beltPos, s -> s.with(BeltBlock.CASING, true), true); + scene.world.modifyBlock(beltPos, s -> s.setValue(BeltBlock.CASING, true), true); scene.idle(20); scene.overlay.showControls(new InputWindowElement(util.vector.topOf(beltPos2), Pointing.DOWN).rightClick() .withItem(andesiteCasingItem), 20); scene.idle(7); - scene.world.modifyBlock(beltPos2, s -> s.with(BeltBlock.CASING, true), true); + scene.world.modifyBlock(beltPos2, s -> s.setValue(BeltBlock.CASING, true), true); scene.world.modifyTileNBT(util.select.position(beltPos2), BeltTileEntity.class, nbt -> { NBTHelper.writeEnum(nbt, "Casing", BeltTileEntity.CasingType.ANDESITE); }); @@ -429,7 +429,7 @@ public class BeltScenes { .withItem(brassCasingItem), 20); scene.idle(7); - scene.world.modifyBlock(beltPos3, s -> s.with(BeltBlock.CASING, true), true); + scene.world.modifyBlock(beltPos3, s -> s.setValue(BeltBlock.CASING, true), true); scene.idle(20); scene.overlay.showText(80) @@ -446,7 +446,7 @@ public class BeltScenes { brassBelts.add(beltPos.south(z)); for (int x = 1; x <= 3; x++) brassBelts.add(beltPos3.east(x) - .down(x)); + .below(x)); for (int x = 1; x <= 3; x++) andesiteBelts.add(beltPos2.east(x)); @@ -455,14 +455,14 @@ public class BeltScenes { for (BlockPos pos : andesiteBelts) { scene.idle(4); - scene.world.modifyBlock(pos, s -> s.with(BeltBlock.CASING, true), true); + scene.world.modifyBlock(pos, s -> s.setValue(BeltBlock.CASING, true), true); scene.world.modifyTileNBT(util.select.position(pos), BeltTileEntity.class, nbt -> { NBTHelper.writeEnum(nbt, "Casing", BeltTileEntity.CasingType.ANDESITE); }); } for (BlockPos pos : brassBelts) { scene.idle(4); - scene.world.modifyBlock(pos, s -> s.with(BeltBlock.CASING, true), true); + scene.world.modifyBlock(pos, s -> s.setValue(BeltBlock.CASING, true), true); } scene.idle(30); scene.addKeyframe(); @@ -471,7 +471,7 @@ public class BeltScenes { .showControls(new InputWindowElement(util.vector.topOf(beltPos.south()), Pointing.DOWN).rightClick() .withWrench(), 40); scene.idle(7); - scene.world.modifyBlock(beltPos.south(), s -> s.with(BeltBlock.CASING, false), true); + scene.world.modifyBlock(beltPos.south(), s -> s.setValue(BeltBlock.CASING, false), true); scene.overlay.showText(80) .text("A wrench can be used to remove the casing") .placeNearTarget() @@ -483,7 +483,7 @@ public class BeltScenes { scene.configureBasePlate(0, 0, 5); scene.showBasePlate(); scene.idle(5); - scene.world.setBlock(util.grid.at(3, 2, 2), Blocks.WATER.getDefaultState(), false); + scene.world.setBlock(util.grid.at(3, 2, 2), Blocks.WATER.defaultBlockState(), false); BlockPos depotPos = util.grid.at(2, 1, 2); scene.world.showSection(util.select.position(2, 1, 2), Direction.DOWN); @@ -513,31 +513,31 @@ public class BeltScenes { scene.effects.indicateSuccess(depotPos); scene.idle(20); - scene.world.showSection(util.select.position(depotPos.up(2)), Direction.SOUTH); + scene.world.showSection(util.select.position(depotPos.above(2)), Direction.SOUTH); scene.overlay.showText(70) .attachKeyFrame() .text("Just like Mechanical Belts, it can provide items to processing") .placeNearTarget() - .pointAt(util.vector.blockSurface(depotPos.up(2), Direction.WEST)); + .pointAt(util.vector.blockSurface(depotPos.above(2), Direction.WEST)); ItemStack bottle = new ItemStack(Items.BUCKET); scene.world.createItemOnBeltLike(depotPos, Direction.NORTH, bottle); scene.idle(20); - scene.world.modifyTileNBT(util.select.position(depotPos.up(2)), SpoutTileEntity.class, + scene.world.modifyTileNBT(util.select.position(depotPos.above(2)), SpoutTileEntity.class, nbt -> nbt.putInt("ProcessingTicks", 20)); scene.idle(20); scene.world.removeItemsFromBelt(depotPos); scene.world.createItemOnBeltLike(depotPos, Direction.UP, new ItemStack(Items.WATER_BUCKET)); - scene.world.modifyTileNBT(util.select.position(depotPos.up(2)), SpoutTileEntity.class, + scene.world.modifyTileNBT(util.select.position(depotPos.above(2)), SpoutTileEntity.class, nbt -> nbt.putBoolean("Splash", true)); scene.idle(30); scene.world.removeItemsFromBelt(depotPos); - scene.world.hideSection(util.select.position(depotPos.up(2)), Direction.SOUTH); + scene.world.hideSection(util.select.position(depotPos.above(2)), Direction.SOUTH); scene.idle(20); - ElementLink spout = scene.world.showIndependentSection(util.select.position(depotPos.up(2) + ElementLink spout = scene.world.showIndependentSection(util.select.position(depotPos.above(2) .west()), Direction.SOUTH); scene.world.moveSection(spout, util.vector.of(1, 0, 0), 0); - BlockPos pressPos = depotPos.up(2) + BlockPos pressPos = depotPos.above(2) .west(); ItemStack copper = AllItems.COPPER_INGOT.asStack(); scene.world.createItemOnBeltLike(depotPos, Direction.NORTH, copper); diff --git a/src/main/java/com/simibubi/create/foundation/ponder/content/CartAssemblerScenes.java b/src/main/java/com/simibubi/create/foundation/ponder/content/CartAssemblerScenes.java index 4da325070..046cde559 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/content/CartAssemblerScenes.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/content/CartAssemblerScenes.java @@ -38,7 +38,7 @@ public class CartAssemblerScenes { scene.idle(5); BlockPos assemblerPos = util.grid.at(2, 1, 2); - scene.world.setBlock(assemblerPos, Blocks.RAIL.getDefaultState(), false); + scene.world.setBlock(assemblerPos, Blocks.RAIL.defaultBlockState(), false); for (int z = 0; z < 5; z++) { scene.world.showSection(util.select.position(2, 1, z), Direction.DOWN); scene.idle(2); @@ -54,8 +54,8 @@ public class CartAssemblerScenes { .withItem(AllBlocks.CART_ASSEMBLER.asStack()), 30); scene.idle(7); scene.world.setBlock(assemblerPos, AllBlocks.CART_ASSEMBLER.getDefaultState() - .with(CartAssemblerBlock.RAIL_SHAPE, RailShape.NORTH_SOUTH) - .with(CartAssemblerBlock.RAIL_TYPE, CartAssembleRailType.REGULAR), true); + .setValue(CartAssemblerBlock.RAIL_SHAPE, RailShape.NORTH_SOUTH) + .setValue(CartAssemblerBlock.RAIL_TYPE, CartAssembleRailType.REGULAR), true); scene.idle(20); scene.world.showSection(util.select.fromTo(0, 1, 2, 1, 1, 2), Direction.EAST); scene.idle(20); @@ -72,12 +72,12 @@ public class CartAssemblerScenes { ElementLink cart = scene.special.createCart(util.vector.topOf(2, 0, 4), 90, MinecartEntity::new); - scene.world.showSection(util.select.position(assemblerPos.up()), Direction.DOWN); + scene.world.showSection(util.select.position(assemblerPos.above()), Direction.DOWN); scene.idle(10); scene.special.moveCart(cart, util.vector.of(0, 0, -2), 20); scene.idle(20); ElementLink plank = - scene.world.makeSectionIndependent(util.select.position(assemblerPos.up())); + scene.world.makeSectionIndependent(util.select.position(assemblerPos.above())); ElementLink anchor = scene.world.showIndependentSectionImmediately(util.select.position(assemblerPos.east())); scene.world.moveSection(anchor, util.vector.of(-1, 0, 0), 0); @@ -111,7 +111,7 @@ public class CartAssemblerScenes { scene.special.moveCart(cart, util.vector.of(0, 0, 2), 20); scene.idle(30); - scene.world.destroyBlock(assemblerPos.up()); + scene.world.destroyBlock(assemblerPos.above()); scene.idle(5); ElementLink contraption = scene.world.showIndependentSection(util.select.fromTo(1, 4, 2, 3, 3, 2), Direction.DOWN); @@ -187,8 +187,8 @@ public class CartAssemblerScenes { BlockPos assemblerPos = util.grid.at(3, 1, 3); scene.idle(5); scene.world.setBlock(assemblerPos, AllBlocks.CART_ASSEMBLER.getDefaultState() - .with(CartAssemblerBlock.RAIL_SHAPE, RailShape.EAST_WEST) - .with(CartAssemblerBlock.RAIL_TYPE, CartAssembleRailType.REGULAR), true); + .setValue(CartAssemblerBlock.RAIL_SHAPE, RailShape.EAST_WEST) + .setValue(CartAssemblerBlock.RAIL_TYPE, CartAssembleRailType.REGULAR), true); scene.idle(5); scene.world.showSection(util.select.fromTo(3, 1, 1, 3, 1, 2), Direction.SOUTH); ElementLink contraption = @@ -317,17 +317,17 @@ public class CartAssemblerScenes { scene.world.showSection(util.select.fromTo(2, 1, 3, 2, 1, 2), Direction.SOUTH); scene.idle(5); ElementLink cart = - scene.special.createCart(util.vector.topOf(assembler1.down()), 0, MinecartEntity::new); + scene.special.createCart(util.vector.topOf(assembler1.below()), 0, MinecartEntity::new); ElementLink cart2 = - scene.special.createCart(util.vector.topOf(assembler2.down()), 0, ChestMinecartEntity::new); + scene.special.createCart(util.vector.topOf(assembler2.below()), 0, ChestMinecartEntity::new); scene.idle(15); scene.world.setBlock(assembler1, AllBlocks.CART_ASSEMBLER.getDefaultState() - .with(CartAssemblerBlock.RAIL_SHAPE, RailShape.EAST_WEST) - .with(CartAssemblerBlock.RAIL_TYPE, CartAssembleRailType.CONTROLLER_RAIL), true); + .setValue(CartAssemblerBlock.RAIL_SHAPE, RailShape.EAST_WEST) + .setValue(CartAssemblerBlock.RAIL_TYPE, CartAssembleRailType.CONTROLLER_RAIL), true); scene.idle(5); scene.world.setBlock(assembler2, AllBlocks.CART_ASSEMBLER.getDefaultState() - .with(CartAssemblerBlock.RAIL_SHAPE, RailShape.EAST_WEST) - .with(CartAssemblerBlock.RAIL_TYPE, CartAssembleRailType.REGULAR), true); + .setValue(CartAssemblerBlock.RAIL_SHAPE, RailShape.EAST_WEST) + .setValue(CartAssemblerBlock.RAIL_TYPE, CartAssembleRailType.REGULAR), true); scene.idle(5); ElementLink contraption = scene.world.showIndependentSection(chassis, Direction.DOWN); @@ -429,17 +429,17 @@ public class CartAssemblerScenes { .text("Cart Assemblers on Regular Tracks will not affect the passing carts' motion"); scene.idle(10); scene.world.setBlock(assembler, AllBlocks.CART_ASSEMBLER.getDefaultState() - .with(CartAssemblerBlock.RAIL_SHAPE, RailShape.EAST_WEST) - .with(CartAssemblerBlock.RAIL_TYPE, CartAssembleRailType.REGULAR), true); + .setValue(CartAssemblerBlock.RAIL_SHAPE, RailShape.EAST_WEST) + .setValue(CartAssemblerBlock.RAIL_TYPE, CartAssembleRailType.REGULAR), true); scene.idle(70); ElementLink cart = scene.special.createCart(util.vector.topOf(assembler.east(2) - .down()), 0, MinecartEntity::new); + .below()), 0, MinecartEntity::new); ElementLink anchor = scene.world.showIndependentSection(util.select.position(assembler.south()), Direction.DOWN); ElementLink contraption = scene.world.showIndependentSection(util.select.position(assembler.south() - .up()), Direction.DOWN); + .above()), Direction.DOWN); scene.world.moveSection(contraption, util.vector.of(2, 0, -1), 0); scene.world.moveSection(anchor, util.vector.of(2, 0, -1), 0); scene.idle(10); @@ -456,8 +456,8 @@ public class CartAssemblerScenes { .withItem(new ItemStack(Items.POWERED_RAIL)), 50); scene.idle(7); scene.world.setBlock(assembler, AllBlocks.CART_ASSEMBLER.getDefaultState() - .with(CartAssemblerBlock.RAIL_SHAPE, RailShape.EAST_WEST) - .with(CartAssemblerBlock.RAIL_TYPE, CartAssembleRailType.POWERED_RAIL), true); + .setValue(CartAssemblerBlock.RAIL_SHAPE, RailShape.EAST_WEST) + .setValue(CartAssemblerBlock.RAIL_TYPE, CartAssembleRailType.POWERED_RAIL), true); scene.overlay.showText(100) .attachKeyFrame() .pointAt(util.vector.topOf(assembler)) @@ -467,10 +467,10 @@ public class CartAssemblerScenes { scene.world.hideIndependentSection(anchor, Direction.DOWN); cart = scene.special.createCart(util.vector.topOf(assembler.east(2) - .down()), 0, MinecartEntity::new); + .below()), 0, MinecartEntity::new); anchor = scene.world.showIndependentSection(util.select.position(assembler.south()), Direction.DOWN); contraption = scene.world.showIndependentSection(util.select.position(assembler.south() - .up()), Direction.DOWN); + .above()), Direction.DOWN); scene.world.moveSection(contraption, util.vector.of(2, 0, -1), 0); scene.world.moveSection(anchor, util.vector.of(2, 0, -1), 0); scene.idle(10); @@ -495,7 +495,7 @@ public class CartAssemblerScenes { scene.idle(20); cart = scene.special.createCart(util.vector.topOf(assembler.east(2) - .down()), 0, FurnaceMinecartEntity::new); + .below()), 0, FurnaceMinecartEntity::new); scene.idle(10); scene.overlay.showText(50) .attachKeyFrame() @@ -505,14 +505,14 @@ public class CartAssemblerScenes { scene.idle(50); contraption = scene.world.showIndependentSection(chassis, Direction.DOWN); scene.idle(5); - scene.world.glueBlockOnto(assembler.up(2), Direction.DOWN, contraption); + scene.world.glueBlockOnto(assembler.above(2), Direction.DOWN, contraption); scene.idle(15); - scene.overlay.showControls(new InputWindowElement(util.vector.topOf(assembler.up()), Pointing.UP) + scene.overlay.showControls(new InputWindowElement(util.vector.topOf(assembler.above()), Pointing.UP) .withItem(new ItemStack(Items.CHARCOAL)), 40); scene.idle(7); scene.overlay.showText(80) - .pointAt(util.vector.blockSurface(assembler.up(2), Direction.WEST)) + .pointAt(util.vector.blockSurface(assembler.above(2), Direction.WEST)) .placeNearTarget() .text("Furnace Carts will keep themselves powered, pulling fuel from any attached inventories"); scene.idle(85); diff --git a/src/main/java/com/simibubi/create/foundation/ponder/content/ChainDriveScenes.java b/src/main/java/com/simibubi/create/foundation/ponder/content/ChainDriveScenes.java index b20d88216..8ece78aac 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/content/ChainDriveScenes.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/content/ChainDriveScenes.java @@ -57,7 +57,7 @@ public class ChainDriveScenes { Selection shafts = util.select.fromTo(2, 1, 0, 2, 1, 1); BlockPos rotatedECD = util.grid.at(3, 1, 0); - Selection verticalShaft = util.select.fromTo(rotatedECD.up(), rotatedECD.up(2)); + Selection verticalShaft = util.select.fromTo(rotatedECD.above(), rotatedECD.above(2)); scene.world.showSection(shafts, Direction.EAST); scene.idle(10); @@ -77,7 +77,7 @@ public class ChainDriveScenes { scene.overlay.showControls(new InputWindowElement(util.vector.topOf(rotatedECD), Pointing.DOWN).rightClick() .withWrench(), 30); scene.idle(7); - scene.world.modifyBlock(rotatedECD, s -> s.with(EncasedBeltBlock.AXIS, Axis.Y), true); + scene.world.modifyBlock(rotatedECD, s -> s.setValue(EncasedBeltBlock.AXIS, Axis.Y), true); scene.idle(40); scene.world.showSection(verticalShaft, Direction.DOWN); @@ -102,11 +102,11 @@ public class ChainDriveScenes { BlockPos leverPos = util.grid.at(3, 1, 0); BlockPos eastDrive = util.grid.at(3, 1, 2); - BlockPos eastGauge = eastDrive.up(3); + BlockPos eastGauge = eastDrive.above(3); BlockPos middleGauge = eastGauge.west() - .down(); + .below(); BlockPos westGauge = eastGauge.west(2) - .down(2); + .below(2); ElementLink lever = scene.world.showIndependentSection(util.select.fromTo(leverPos, leverPos.south()), Direction.UP); @@ -115,7 +115,7 @@ public class ChainDriveScenes { scene.world.showSection(util.select.fromTo(4, 1, 3, 4, 2, 3), Direction.DOWN); scene.idle(10); scene.world.showSection(util.select.fromTo(eastDrive, eastDrive.west(2)) - .add(util.select.position(eastDrive.up())), Direction.DOWN); + .add(util.select.position(eastDrive.above())), Direction.DOWN); scene.idle(10); scene.overlay.showText(60) @@ -125,9 +125,9 @@ public class ChainDriveScenes { .pointAt(util.vector.blockSurface(eastDrive, Direction.NORTH)); scene.idle(60); - scene.world.showSection(util.select.fromTo(eastGauge, eastGauge.down()), Direction.DOWN); + scene.world.showSection(util.select.fromTo(eastGauge, eastGauge.below()), Direction.DOWN); scene.idle(5); - scene.world.showSection(util.select.fromTo(middleGauge, middleGauge.down()), Direction.DOWN); + scene.world.showSection(util.select.fromTo(middleGauge, middleGauge.below()), Direction.DOWN); scene.idle(5); scene.world.showSection(util.select.position(westGauge), Direction.DOWN); scene.idle(5); @@ -145,14 +145,14 @@ public class ChainDriveScenes { scene.world.toggleRedstonePower(util.select.fromTo(leverPos, leverPos.south(2))); scene.effects.indicateRedstone(leverPos); - scene.world.modifyKineticSpeed(util.select.fromTo(westGauge.down(), middleGauge), f -> 2 * f); + scene.world.modifyKineticSpeed(util.select.fromTo(westGauge.below(), middleGauge), f -> 2 * f); scene.idle(10); AxisAlignedBB bb = new AxisAlignedBB(eastDrive); scene.overlay.chaseBoundingBoxOutline(PonderPalette.MEDIUM, eastDrive, bb, 160); - scene.overlay.chaseBoundingBoxOutline(PonderPalette.FAST, eastDrive.west(), bb.offset(-2, 0, 0) - .expand(15 / 16f, 0, 0), 160); + scene.overlay.chaseBoundingBoxOutline(PonderPalette.FAST, eastDrive.west(), bb.move(-2, 0, 0) + .expandTowards(15 / 16f, 0, 0), 160); scene.idle(20); scene.overlay.showText(80) @@ -180,7 +180,7 @@ public class ChainDriveScenes { Selection newDriveSelect = util.select.fromTo(eastDrive.south(2), eastDrive.south(2) .west(2)); ElementLink drives = scene.world.showIndependentSection(newDriveSelect, Direction.NORTH); - scene.world.modifyKineticSpeed(util.select.fromTo(westGauge.down(), middleGauge), f -> .5f * f); + scene.world.modifyKineticSpeed(util.select.fromTo(westGauge.below(), middleGauge), f -> .5f * f); scene.world.setKineticSpeed(newDriveSelect, -32); scene.world.moveSection(drives, util.vector.of(0, 0, -2), 0); scene.world.moveSection(lever, util.vector.of(-2, 0, 0), 10); @@ -196,8 +196,8 @@ public class ChainDriveScenes { scene.idle(10); bb = new AxisAlignedBB(eastDrive); - scene.overlay.chaseBoundingBoxOutline(PonderPalette.MEDIUM, eastDrive, bb.expand(-15 / 16f, 0, 0), 160); - scene.overlay.chaseBoundingBoxOutline(PonderPalette.SLOW, eastDrive.west(), bb.offset(-2, 0, 0), 160); + scene.overlay.chaseBoundingBoxOutline(PonderPalette.MEDIUM, eastDrive, bb.expandTowards(-15 / 16f, 0, 0), 160); + scene.overlay.chaseBoundingBoxOutline(PonderPalette.SLOW, eastDrive.west(), bb.move(-2, 0, 0), 160); scene.idle(20); scene.overlay.showText(80) @@ -238,7 +238,7 @@ public class ChainDriveScenes { scene.world.modifyTileNBT(util.select.position(analogPos), AnalogLeverTileEntity.class, nbt -> { nbt.putInt("State", 8); }); - scene.world.modifyBlock(analogPos.south(), s -> s.with(RedstoneWireBlock.POWER, 8), false); + scene.world.modifyBlock(analogPos.south(), s -> s.setValue(RedstoneWireBlock.POWER, 8), false); scene.world.toggleRedstonePower(util.select.position(1, 1, 4)); scene.world.modifyKineticSpeed(util.select.position(westGauge), f -> .75f * f); scene.effects.indicateRedstone(analogPos); diff --git a/src/main/java/com/simibubi/create/foundation/ponder/content/ChassisScenes.java b/src/main/java/com/simibubi/create/foundation/ponder/content/ChassisScenes.java index 24c7a768f..831e857a8 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/content/ChassisScenes.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/content/ChassisScenes.java @@ -43,9 +43,9 @@ public class ChassisScenes { scene.world.showSectionAndMerge(util.select.position(centralChassis.east() .north()), Direction.SOUTH, chassis); scene.idle(3); - scene.world.showSectionAndMerge(util.select.position(centralChassis.up()), Direction.DOWN, chassis); + scene.world.showSectionAndMerge(util.select.position(centralChassis.above()), Direction.DOWN, chassis); scene.idle(2); - scene.world.showSectionAndMerge(util.select.position(centralChassis.up() + scene.world.showSectionAndMerge(util.select.position(centralChassis.above() .east()), Direction.DOWN, chassis); scene.idle(10); @@ -107,7 +107,7 @@ public class ChassisScenes { .withItem(new ItemStack(Items.SLIME_BALL)); scene.overlay.showControls(input, 30); scene.idle(7); - scene.world.modifyBlock(chassisPos, s -> s.with(LinearChassisBlock.STICKY_BOTTOM, true), false); + scene.world.modifyBlock(chassisPos, s -> s.setValue(LinearChassisBlock.STICKY_BOTTOM, true), false); scene.effects.superGlue(chassisPos, Direction.WEST, false); scene.idle(30); @@ -119,7 +119,7 @@ public class ChassisScenes { scene.overlay.showControls(input, 15); scene.idle(7); - scene.world.modifyBlock(chassisPos, s -> s.with(LinearChassisBlock.STICKY_TOP, true), false); + scene.world.modifyBlock(chassisPos, s -> s.setValue(LinearChassisBlock.STICKY_TOP, true), false); scene.effects.superGlue(chassisPos, Direction.EAST, false); scene.idle(15); @@ -138,7 +138,7 @@ public class ChassisScenes { .whileSneaking(), 30); scene.idle(7); - scene.world.modifyBlock(chassisPos, s -> s.with(LinearChassisBlock.STICKY_BOTTOM, false), false); + scene.world.modifyBlock(chassisPos, s -> s.setValue(LinearChassisBlock.STICKY_BOTTOM, false), false); scene.effects.superGlue(chassisPos, Direction.WEST, false); scene.idle(30); @@ -152,7 +152,7 @@ public class ChassisScenes { scene.idle(20); ElementLink glassSection = - scene.world.showIndependentSection(util.select.position(chassisPos.up()), Direction.DOWN); + scene.world.showIndependentSection(util.select.position(chassisPos.above()), Direction.DOWN); scene.world.moveSection(glassSection, util.vector.of(0, -1, 0), 0); scene.idle(25); scene.addKeyframe(); @@ -281,7 +281,7 @@ public class ChassisScenes { scene.idle(20); scene.overlay.showText(80) - .pointAt(util.vector.topOf(chassisPos.up(2))) + .pointAt(util.vector.topOf(chassisPos.above(2))) .text("Using these mechanics, structures of any shape can move as a Contraption") .placeNearTarget(); scene.idle(30); @@ -307,14 +307,14 @@ public class ChassisScenes { ElementLink contraption = scene.world.showIndependentSection(chassis, Direction.DOWN); scene.idle(5); ElementLink top = - scene.world.showIndependentSection(util.select.position(chassisPos.up()), Direction.DOWN); + scene.world.showIndependentSection(util.select.position(chassisPos.above()), Direction.DOWN); scene.idle(10); scene.overlay.showText(50) .attachKeyFrame() .placeNearTarget() .text("Radial Chassis connect to identical Chassis blocks in a row") - .pointAt(util.vector.topOf(chassisPos.up())); + .pointAt(util.vector.topOf(chassisPos.above())); scene.idle(60); BlockPos bearingPos = util.grid.at(2, 1, 2); @@ -340,7 +340,7 @@ public class ChassisScenes { .withItem(new ItemStack(Items.SLIME_BALL)); scene.overlay.showControls(input, 30); scene.idle(7); - scene.world.modifyBlock(chassisPos, s -> s.with(RadialChassisBlock.STICKY_WEST, true), false); + scene.world.modifyBlock(chassisPos, s -> s.setValue(RadialChassisBlock.STICKY_WEST, true), false); scene.effects.superGlue(chassisPos, Direction.WEST, false); scene.idle(30); @@ -352,9 +352,9 @@ public class ChassisScenes { scene.overlay.showControls(input, 15); scene.idle(7); - scene.world.modifyBlock(chassisPos, s -> s.with(RadialChassisBlock.STICKY_EAST, true) - .with(RadialChassisBlock.STICKY_NORTH, true) - .with(RadialChassisBlock.STICKY_SOUTH, true), false); + scene.world.modifyBlock(chassisPos, s -> s.setValue(RadialChassisBlock.STICKY_EAST, true) + .setValue(RadialChassisBlock.STICKY_NORTH, true) + .setValue(RadialChassisBlock.STICKY_SOUTH, true), false); scene.effects.superGlue(chassisPos, Direction.EAST, false); scene.effects.superGlue(chassisPos, Direction.SOUTH, false); scene.effects.superGlue(chassisPos, Direction.NORTH, false); @@ -375,7 +375,7 @@ public class ChassisScenes { .whileSneaking(), 30); scene.idle(7); - scene.world.modifyBlock(chassisPos, s -> s.with(RadialChassisBlock.STICKY_WEST, false), false); + scene.world.modifyBlock(chassisPos, s -> s.setValue(RadialChassisBlock.STICKY_WEST, false), false); scene.effects.superGlue(chassisPos, Direction.WEST, false); scene.idle(30); @@ -407,7 +407,7 @@ public class ChassisScenes { scene.world.showSection(util.select.fromTo(0, 3, 3, 1, 3, 4), Direction.DOWN); scene.idle(10); Vector3d blockSurface = util.vector.blockSurface(chassisPos, Direction.NORTH); - AxisAlignedBB bb = new AxisAlignedBB(blockSurface, blockSurface).grow(.501, .501, 0); + AxisAlignedBB bb = new AxisAlignedBB(blockSurface, blockSurface).inflate(.501, .501, 0); scene.overlay.chaseBoundingBoxOutline(PonderPalette.GREEN, bb, bb, 60); scene.overlay.showOutline(PonderPalette.WHITE, s, s, 80); scene.overlay.showText(40) @@ -535,7 +535,7 @@ public class ChassisScenes { scene.world.glueBlockOnto(central.north() .east(), Direction.WEST, plank); scene.idle(5); - scene.world.glueBlockOnto(central.up(), Direction.DOWN, plank); + scene.world.glueBlockOnto(central.above(), Direction.DOWN, plank); scene.idle(5); scene.world.glueBlockOnto(central.south() .west(), Direction.EAST, plank); @@ -553,7 +553,7 @@ public class ChassisScenes { scene.idle(90); glueEntity = scene.world.createGlueEntity(central, Direction.UP); - scene.world.destroyBlock(central.up()); + scene.world.destroyBlock(central.above()); scene.idle(20); scene.addKeyframe(); scene.overlay.showControls(new InputWindowElement(util.vector.topOf(central), Pointing.DOWN).leftClick(), 40); diff --git a/src/main/java/com/simibubi/create/foundation/ponder/content/ChuteScenes.java b/src/main/java/com/simibubi/create/foundation/ponder/content/ChuteScenes.java index 0c168ee13..766f6beb5 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/content/ChuteScenes.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/content/ChuteScenes.java @@ -65,7 +65,7 @@ public class ChuteScenes { .withWrench(), 40); scene.idle(7); - scene.world.modifyBlock(util.grid.at(3, 3, 3), s -> s.with(ChuteBlock.SHAPE, ChuteBlock.Shape.WINDOW), false); + scene.world.modifyBlock(util.grid.at(3, 3, 3), s -> s.setValue(ChuteBlock.SHAPE, ChuteBlock.Shape.WINDOW), false); scene.overlay.showText(50) .attachKeyFrame() .pointAt(util.vector.blockSurface(util.grid.at(2, 3, 2), Direction.WEST)) @@ -73,7 +73,7 @@ public class ChuteScenes { .text("Using the Wrench, a window can be created"); scene.idle(10); - scene.world.modifyBlock(util.grid.at(3, 2, 3), s -> s.with(SHAPE, Shape.WINDOW), false); + scene.world.modifyBlock(util.grid.at(3, 2, 3), s -> s.setValue(SHAPE, Shape.WINDOW), false); for (int i = 0; i < 8; i++) { scene.idle(10); @@ -85,7 +85,7 @@ public class ChuteScenes { scene.idle(15); scene.rotateCameraY(-90); - scene.world.modifyBlock(util.grid.at(2, 2, 1), s -> s.with(SHAPE, Shape.NORMAL), false); + scene.world.modifyBlock(util.grid.at(2, 2, 1), s -> s.setValue(SHAPE, Shape.NORMAL), false); scene.world.showSection(util.select.fromTo(2, 1, 1, 2, 2, 1), Direction.DOWN); scene.idle(30); ItemStack chuteItem = AllBlocks.CHUTE.asStack(); @@ -120,14 +120,14 @@ public class ChuteScenes { Direction offset = Direction.NORTH; for (int i = 0; i < 3; i++) { remove = scene.world.createItemEntity(util.vector.centerOf(util.grid.at(2, 6, 3) - .offset(offset)), util.vector.of(0, 0.1, 0) - .add(Vector3d.of(offset.getDirectionVec()).scale(-.1)), + .relative(offset)), util.vector.of(0, 0.1, 0) + .add(Vector3d.atLowerCornerOf(offset.getNormal()).scale(-.1)), stack); scene.idle(12); scene.world.createItemOnBeltLike(util.grid.at(2, 4, 3), Direction.UP, stack); scene.world.modifyEntity(remove, Entity::remove); scene.idle(3); - offset = offset.rotateY(); + offset = offset.getClockWise(); } scene.idle(10); @@ -143,7 +143,7 @@ public class ChuteScenes { scene.scaleSceneView(.9f); scene.showBasePlate(); Selection chute = util.select.fromTo(1, 2, 2, 1, 4, 2); - scene.world.setBlocks(chute, Blocks.AIR.getDefaultState(), false); + scene.world.setBlocks(chute, Blocks.AIR.defaultBlockState(), false); scene.world.showSection(util.select.position(1, 1, 2), Direction.UP); scene.idle(20); diff --git a/src/main/java/com/simibubi/create/foundation/ponder/content/CrafterScenes.java b/src/main/java/com/simibubi/create/foundation/ponder/content/CrafterScenes.java index a4da5da9f..14a0e2cf9 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/content/CrafterScenes.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/content/CrafterScenes.java @@ -39,7 +39,7 @@ public class CrafterScenes { BlockPos depotPos = util.grid.at(0, 1, 2); Selection crafters = util.select.fromTo(1, 1, 2, 3, 3, 2); - scene.world.modifyBlocks(crafters, s -> s.with(MechanicalCrafterBlock.POINTING, Pointing.DOWN), false); + scene.world.modifyBlocks(crafters, s -> s.setValue(MechanicalCrafterBlock.POINTING, Pointing.DOWN), false); scene.world.setKineticSpeed(crafters, 0); for (int y = 0; y < 3; y++) { @@ -280,7 +280,7 @@ public class CrafterScenes { scene.idle(40); Vector3d v = util.vector.blockSurface(util.grid.at(2, 2, 2), Direction.WEST); - AxisAlignedBB bb = new AxisAlignedBB(v, v).grow(.125f, .5, .5); + AxisAlignedBB bb = new AxisAlignedBB(v, v).inflate(.125f, .5, .5); v = v.add(0, 0, .5); scene.overlay.chaseBoundingBoxOutline(PonderPalette.WHITE, new Object(), bb, 45); @@ -348,7 +348,7 @@ public class CrafterScenes { scene.configureBasePlate(0, 0, 5); scene.world.showSection(util.select.layer(0), Direction.UP); - scene.world.setBlock(util.grid.at(2, 2, 2), Blocks.AIR.getDefaultState(), false); + scene.world.setBlock(util.grid.at(2, 2, 2), Blocks.AIR.defaultBlockState(), false); Selection kinetics = util.select.fromTo(3, 1, 2, 3, 1, 5); scene.world.setKineticSpeed(util.select.fromTo(1, 2, 2, 3, 1, 2), 0); diff --git a/src/main/java/com/simibubi/create/foundation/ponder/content/DebugScenes.java b/src/main/java/com/simibubi/create/foundation/ponder/content/DebugScenes.java index 5261f9437..b2ed9efe7 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/content/DebugScenes.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/content/DebugScenes.java @@ -100,7 +100,7 @@ public class DebugScenes { scene.world.replaceBlocks(util.select.fromTo(1, 1, 3, 2, 2, 4), AllBlocks.REFINED_RADIANCE_CASING.getDefaultState(), true); scene.idle(10); - scene.world.replaceBlocks(util.select.position(3, 1, 1), Blocks.GOLD_BLOCK.getDefaultState(), true); + scene.world.replaceBlocks(util.select.position(3, 1, 1), Blocks.GOLD_BLOCK.defaultBlockState(), true); scene.rotateCameraY(180); scene.markAsFinished(); } @@ -121,10 +121,10 @@ public class DebugScenes { Vector3d vec1 = util.vector.topOf(1, 0, 0); Vector3d vec2 = util.vector.topOf(0, 0, 1); - AxisAlignedBB boundingBox1 = new AxisAlignedBB(vec1, vec1).expand(0, 2.5, 0) - .grow(.15, 0, .15); - AxisAlignedBB boundingBox2 = new AxisAlignedBB(vec2, vec2).expand(0, .125, 0) - .grow(.45, 0, .45); + AxisAlignedBB boundingBox1 = new AxisAlignedBB(vec1, vec1).expandTowards(0, 2.5, 0) + .inflate(.15, 0, .15); + AxisAlignedBB boundingBox2 = new AxisAlignedBB(vec2, vec2).expandTowards(0, .125, 0) + .inflate(.45, 0, .45); Vector3d poi1 = boundingBox1.getCenter(); Vector3d poi2 = boundingBox2.getCenter(); @@ -229,7 +229,7 @@ public class DebugScenes { Object chassisEffectHighlight = new Object(); AxisAlignedBB point = new AxisAlignedBB(chassisSurface, chassisSurface); - AxisAlignedBB expanded = point.grow(1 / 4f, 1 / 4f, 1 / 16f); + AxisAlignedBB expanded = point.inflate(1 / 4f, 1 / 4f, 1 / 16f); Selection singleBlock = util.select.position(1, 2, 3); Selection twoBlocks = util.select.fromTo(1, 2, 3, 1, 3, 3); @@ -302,11 +302,11 @@ public class DebugScenes { BlockPos poi1 = util.grid.at(4, 1, 0); BlockPos poi2 = util.grid.at(0, 1, 4); - scene.world.setBlock(poi1, Blocks.GOLD_BLOCK.getDefaultState(), true); + scene.world.setBlock(poi1, Blocks.GOLD_BLOCK.defaultBlockState(), true); scene.special.movePointOfInterest(poi1); scene.idle(20); - scene.world.setBlock(poi2, Blocks.GOLD_BLOCK.getDefaultState(), true); + scene.world.setBlock(poi2, Blocks.GOLD_BLOCK.defaultBlockState(), true); scene.special.movePointOfInterest(poi2); scene.overlay.showText(20) .text("Point of Interest") @@ -419,15 +419,15 @@ public class DebugScenes { scene.idle(20); scene.world.modifyEntities(ItemEntity.class, entity -> { - if (copperItem.isItemEqual(entity.getItem())) + if (copperItem.sameItem(entity.getItem())) entity.setNoGravity(true); }); scene.idle(20); scene.world.modifyEntities(ItemEntity.class, entity -> { - if (brassItem.isItemEqual(entity.getItem())) - entity.setMotion(util.vector.of(-.15f, .5f, 0)); + if (brassItem.sameItem(entity.getItem())) + entity.setDeltaMovement(util.vector.of(-.15f, .5f, 0)); }); scene.idle(27); diff --git a/src/main/java/com/simibubi/create/foundation/ponder/content/DeployerScenes.java b/src/main/java/com/simibubi/create/foundation/ponder/content/DeployerScenes.java index 89d1a3f96..543cef424 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/content/DeployerScenes.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/content/DeployerScenes.java @@ -37,7 +37,7 @@ public class DeployerScenes { BlockPos deployerPos = util.grid.at(3, 1, 2); Selection deployerSelection = util.select.position(deployerPos); - scene.world.setBlock(potPosition, Blocks.AIR.getDefaultState(), false); + scene.world.setBlock(potPosition, Blocks.AIR.defaultBlockState(), false); scene.world.showSection(util.select.layer(0) .add(util.select.position(1, 1, 2)), Direction.UP); scene.idle(5); @@ -126,10 +126,10 @@ public class DeployerScenes { scene.world.moveDeployer(deployerPos, -1, 25); scene.idle(20); - scene.world.showSection(util.select.position(deployerPos.up()), Direction.DOWN); + scene.world.showSection(util.select.position(deployerPos.above()), Direction.DOWN); ItemStack tulip = new ItemStack(Items.RED_TULIP); - Vector3d entitySpawn = util.vector.topOf(deployerPos.up(3)); + Vector3d entitySpawn = util.vector.topOf(deployerPos.above(3)); ElementLink entity1 = scene.world.createItemEntity(entitySpawn, util.vector.of(0, 0.2, 0), tulip); @@ -144,13 +144,13 @@ public class DeployerScenes { scene.idle(30); scene.world.moveDeployer(deployerPos, 1, 25); scene.idle(26); - scene.world.setBlock(potPosition, Blocks.POTTED_RED_TULIP.getDefaultState(), false); + scene.world.setBlock(potPosition, Blocks.POTTED_RED_TULIP.defaultBlockState(), false); scene.world.modifyTileNBT(deployerSelection, teType, nbt -> nbt.put("HeldItem", ItemStack.EMPTY.serializeNBT())); scene.world.moveDeployer(deployerPos, -1, 25); scene.idle(25); scene.world.hideSection(util.select.position(potPosition), Direction.UP); - scene.world.hideSection(util.select.position(deployerPos.up()), Direction.EAST); + scene.world.hideSection(util.select.position(deployerPos.above()), Direction.EAST); scene.idle(20); Vector3d filterSlot = frontVec.add(0.375, 0.25, 0); @@ -176,21 +176,21 @@ public class DeployerScenes { ElementLink sheep = scene.world.createEntity(w -> { SheepEntity entity = EntityType.SHEEP.create(w); - entity.setFleeceColor(DyeColor.PINK); + entity.setColor(DyeColor.PINK); Vector3d p = util.vector.topOf(util.grid.at(1, 0, 2)); - entity.setPosition(p.x, p.y, p.z); - entity.prevPosX = p.x; - entity.prevPosY = p.y; - entity.prevPosZ = p.z; - entity.limbSwing = 0; - entity.prevRotationYaw = 210; - entity.rotationYaw = 210; - entity.prevRotationYawHead = 210; - entity.rotationYawHead = 210; + entity.setPos(p.x, p.y, p.z); + entity.xo = p.x; + entity.yo = p.y; + entity.zo = p.z; + entity.animationPosition = 0; + entity.yRotO = 210; + entity.yRot = 210; + entity.yHeadRotO = 210; + entity.yHeadRot = 210; return entity; }); scene.idle(20); - scene.world.showSection(util.select.position(deployerPos.up()), Direction.WEST); + scene.world.showSection(util.select.position(deployerPos.above()), Direction.WEST); entity1 = scene.world.createItemEntity(entitySpawn, util.vector.of(0, 0.2, 0), shears); scene.idle(17); scene.world.modifyEntity(entity1, Entity::remove); @@ -208,7 +208,7 @@ public class DeployerScenes { scene.world.modifyEntity(sheep, e -> ((SheepEntity) e).setSheared(true)); scene.effects.emitParticles(util.vector.topOf(deployerPos.west(2)) .add(0, -.25, 0), - Emitter.withinBlockSpace(new BlockParticleData(ParticleTypes.BLOCK, Blocks.PINK_WOOL.getDefaultState()), + Emitter.withinBlockSpace(new BlockParticleData(ParticleTypes.BLOCK, Blocks.PINK_WOOL.defaultBlockState()), util.vector.of(0, 0, 0)), 25, 1); scene.world.moveDeployer(deployerPos, -1, 25); @@ -271,7 +271,7 @@ public class DeployerScenes { .text("By default, a Deployer imitates a Right-click interaction"); scene.idle(26); - scene.world.replaceBlocks(grassBlock, Blocks.FARMLAND.getDefaultState(), false); + scene.world.replaceBlocks(grassBlock, Blocks.FARMLAND.defaultBlockState(), false); scene.world.moveDeployer(deployerPos, -1, 25); scene.idle(46); @@ -334,7 +334,7 @@ public class DeployerScenes { scene.idle(10); ItemStack tool = AllItems.SAND_PAPER.asStack(); - scene.overlay.showControls(new InputWindowElement(util.vector.blockSurface(pressPos.down(), Direction.EAST) + scene.overlay.showControls(new InputWindowElement(util.vector.blockSurface(pressPos.below(), Direction.EAST) .add(0, 0.15, 0), Pointing.RIGHT).withItem(tool), 30); scene.idle(7); scene.world.modifyTileNBT(pressS, DeployerTileEntity.class, nbt -> nbt.put("HeldItem", tool.serializeNBT())); @@ -404,8 +404,8 @@ public class DeployerScenes { scene.idle(30); scene.world.moveDeployer(pressPos, -1, 30); scene.debug.enqueueCallback(s -> SandPaperItem.spawnParticles(targetV, quartz, s.getWorld())); - scene.world.removeItemsFromBelt(pressPos.down(2)); - ingot = scene.world.createItemOnBelt(pressPos.down(2), Direction.UP, polished); + scene.world.removeItemsFromBelt(pressPos.below(2)); + ingot = scene.world.createItemOnBelt(pressPos.below(2), Direction.UP, polished); scene.world.stallBeltItem(ingot, true); scene.idle(15); scene.world.stallBeltItem(ingot, false); @@ -415,8 +415,8 @@ public class DeployerScenes { scene.idle(30); scene.world.moveDeployer(pressPos, -1, 30); scene.debug.enqueueCallback(s -> SandPaperItem.spawnParticles(targetV, quartz, s.getWorld())); - scene.world.removeItemsFromBelt(pressPos.down(2)); - ingot2 = scene.world.createItemOnBelt(pressPos.down(2), Direction.UP, polished); + scene.world.removeItemsFromBelt(pressPos.below(2)); + ingot2 = scene.world.createItemOnBelt(pressPos.below(2), Direction.UP, polished); scene.world.stallBeltItem(ingot2, true); scene.idle(15); scene.world.stallBeltItem(ingot2, false); @@ -492,7 +492,7 @@ public class DeployerScenes { scene.configureBasePlate(0, 0, 6); scene.scaleSceneView(.9f); Selection flowers = util.select.fromTo(4, 1, 1, 1, 1, 1); - scene.world.replaceBlocks(flowers, Blocks.AIR.getDefaultState(), false); + scene.world.replaceBlocks(flowers, Blocks.AIR.defaultBlockState(), false); Selection kinetics = util.select.fromTo(5, 1, 6, 5, 1, 3); BlockPos deployerPos = util.grid.at(4, 1, 3); @@ -541,7 +541,7 @@ public class DeployerScenes { scene.world.hideSection(flowers, Direction.UP); scene.idle(15); - scene.world.replaceBlocks(flowers, Blocks.AIR.getDefaultState(), false); + scene.world.replaceBlocks(flowers, Blocks.AIR.defaultBlockState(), false); scene.world.showSection(flowers, Direction.UP); Vector3d frontVec = util.vector.blockSurface(deployerPos.west(3), Direction.NORTH) @@ -570,7 +570,7 @@ public class DeployerScenes { scene.world.moveDeployer(deployerPos, 1, 9); scene.idle(10); scene.world.moveDeployer(deployerPos, -1, 9); - scene.world.setBlock(util.grid.at(1 + x, 1, 1), Blocks.POPPY.getDefaultState(), false); + scene.world.setBlock(util.grid.at(1 + x, 1, 1), Blocks.POPPY.defaultBlockState(), false); scene.idle(18); } diff --git a/src/main/java/com/simibubi/create/foundation/ponder/content/EjectorScenes.java b/src/main/java/com/simibubi/create/foundation/ponder/content/EjectorScenes.java index 4b31f95fb..2ae78d4a9 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/content/EjectorScenes.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/content/EjectorScenes.java @@ -77,7 +77,7 @@ public class EjectorScenes { AxisAlignedBB bb = new AxisAlignedBB(ejectorPos.west()); scene.overlay.chaseBoundingBoxOutline(PonderPalette.OUTPUT, slot, bb, 20); scene.idle(10); - scene.overlay.chaseBoundingBoxOutline(PonderPalette.GREEN, slot, bb.expand(-15, 15, 0), 100); + scene.overlay.chaseBoundingBoxOutline(PonderPalette.GREEN, slot, bb.expandTowards(-15, 15, 0), 100); scene.idle(10); scene.overlay.showText(60) @@ -87,7 +87,7 @@ public class EjectorScenes { .pointAt(util.vector.blockSurface(targetPos, Direction.WEST)) .placeNearTarget(); scene.idle(70); - scene.overlay.chaseBoundingBoxOutline(PonderPalette.RED, new Object(), bb.offset(-2, 0, -1), 60); + scene.overlay.chaseBoundingBoxOutline(PonderPalette.RED, new Object(), bb.move(-2, 0, -1), 60); scene.idle(10); scene.overlay.showText(50) .colored(PonderPalette.RED) @@ -303,7 +303,7 @@ public class EjectorScenes { scene.world.showSection(redstone, Direction.EAST); BlockPos ejectorPos = util.grid.at(4, 1, 2); - Vector3d topOf = util.vector.topOf(ejectorPos.up(2)); + Vector3d topOf = util.vector.topOf(ejectorPos.above(2)); ItemStack copper = AllItems.COPPER_INGOT.asStack(); for (int i = 0; i < 3; i++) { diff --git a/src/main/java/com/simibubi/create/foundation/ponder/content/FanScenes.java b/src/main/java/com/simibubi/create/foundation/ponder/content/FanScenes.java index 04ac6a0fe..cbdf38ea6 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/content/FanScenes.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/content/FanScenes.java @@ -60,7 +60,7 @@ public class FanScenes { BlockPos leverPos = util.grid.at(3, 2, 4); Selection reverse = util.select.fromTo(3, 1, 5, 1, 1, 4); - scene.world.toggleRedstonePower(util.select.fromTo(leverPos, leverPos.down())); + scene.world.toggleRedstonePower(util.select.fromTo(leverPos, leverPos.below())); scene.effects.indicateRedstone(leverPos); scene.addKeyframe(); scene.world.modifyKineticSpeed(reverse, f -> -f); @@ -76,7 +76,7 @@ public class FanScenes { scene.markAsFinished(); scene.idle(70); - scene.world.toggleRedstonePower(util.select.fromTo(leverPos, leverPos.down())); + scene.world.toggleRedstonePower(util.select.fromTo(leverPos, leverPos.below())); scene.effects.indicateRedstone(leverPos); scene.world.modifyKineticSpeed(reverse, f -> -f); scene.world.modifyKineticSpeed(util.select.everywhere(), f -> 4 * f); @@ -103,7 +103,7 @@ public class FanScenes { ElementLink blockInFront = scene.world.showIndependentSection(util.select.position(3, 1, 0), Direction.SOUTH); scene.world.moveSection(blockInFront, util.vector.of(1, 0, 2), 0); - scene.world.setBlock(blockPos, Blocks.LAVA.getDefaultState(), false); + scene.world.setBlock(blockPos, Blocks.LAVA.defaultBlockState(), false); scene.idle(10); scene.overlay.showSelectionWithText(util.select.fromTo(blockPos, blockPos.west(2)), 80) @@ -115,9 +115,9 @@ public class FanScenes { ItemStack smelted = new ItemStack(Items.GOLD_INGOT); ElementLink entityLink = scene.world.createItemEntity(util.vector.centerOf(blockPos.west(2) - .up(2)), util.vector.of(0, 0.1, 0), stack); + .above(2)), util.vector.of(0, 0.1, 0), stack); scene.idle(15); - scene.world.modifyEntity(entityLink, e -> e.setMotion(-0.2f, 0, 0)); + scene.world.modifyEntity(entityLink, e -> e.setDeltaMovement(-0.2f, 0, 0)); Vector3d itemVec = util.vector.blockSurface(util.grid.at(1, 1, 2), Direction.EAST) .add(0.1, 0, 0); scene.overlay.showControls(new InputWindowElement(itemVec, Pointing.DOWN).withItem(stack), 20); @@ -149,7 +149,7 @@ public class FanScenes { // smoking start - BlockState campfire = Blocks.FIRE.getDefaultState(); + BlockState campfire = Blocks.FIRE.defaultBlockState(); scene.world.hideIndependentSection(blockInFront, Direction.NORTH); scene.idle(15); scene.world.setBlock(util.grid.at(3, 1, 0), campfire, false); @@ -166,7 +166,7 @@ public class FanScenes { // washing start - BlockState water = Blocks.WATER.getDefaultState(); + BlockState water = Blocks.WATER.defaultBlockState(); scene.world.hideIndependentSection(blockInFront, Direction.NORTH); scene.idle(15); scene.world.setBlock(util.grid.at(3, 1, 0), water, false); @@ -185,9 +185,9 @@ public class FanScenes { ItemStack washed = new ItemStack(Items.GOLD_NUGGET, 16); entityLink = scene.world.createItemEntity(util.vector.centerOf(blockPos.west(2) - .up(2)), util.vector.of(0, 0.1, 0), stack); + .above(2)), util.vector.of(0, 0.1, 0), stack); scene.idle(15); - scene.world.modifyEntity(entityLink, e -> e.setMotion(-0.2f, 0, 0)); + scene.world.modifyEntity(entityLink, e -> e.setDeltaMovement(-0.2f, 0, 0)); scene.overlay.showControls(new InputWindowElement(itemVec, Pointing.DOWN).withItem(stack), 20); scene.idle(20); scene.effects.emitParticles(itemVec.add(0, 0.2f, 0), Emitter.simple(ParticleTypes.SPIT, Vector3d.ZERO), 1, 60); @@ -221,8 +221,8 @@ public class FanScenes { scene.world.moveSection(blockInFront, util.vector.of(0, 1, 0), 15); scene.world.destroyBlock(blockPos.east()); scene.world.showSection(util.select.position(blockPos.east() - .up()), Direction.DOWN); - scene.world.setBlock(blockPos.up(), Blocks.WATER.getDefaultState(), false); + .above()), Direction.DOWN); + scene.world.setBlock(blockPos.above(), Blocks.WATER.defaultBlockState(), false); ItemStack sand = new ItemStack(Items.SAND); ItemStack clay = new ItemStack(Items.CLAY_BALL); @@ -290,8 +290,8 @@ public class FanScenes { scene.idle(10); scene.world.toggleRedstonePower(util.select.position(pos.north())); scene.effects.indicateRedstone(pos.north()); - scene.world.setKineticSpeed(util.select.fromTo(pos, pos.up()), 4); - scene.effects.rotationSpeedIndicator(pos.up()); + scene.world.setKineticSpeed(util.select.fromTo(pos, pos.above()), 4); + scene.effects.rotationSpeedIndicator(pos.above()); } scene.overlay.showText(90) diff --git a/src/main/java/com/simibubi/create/foundation/ponder/content/FunnelScenes.java b/src/main/java/com/simibubi/create/foundation/ponder/content/FunnelScenes.java index 366547173..069484e61 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/content/FunnelScenes.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/content/FunnelScenes.java @@ -56,7 +56,7 @@ public class FunnelScenes { for (int i = 0; i < 8; i++) { scene.idle(8); scene.world.removeItemsFromBelt(exitBeltPos); - scene.world.flapFunnel(exitBeltPos.up(), false); + scene.world.flapFunnel(exitBeltPos.above(), false); if (i == 2) scene.rotateCameraY(70); if (i < 6) @@ -67,7 +67,7 @@ public class FunnelScenes { scene.idle(10); Selection outputFunnel = util.select.position(1, 2, 4); - scene.world.setBlocks(outputFunnel, Blocks.AIR.getDefaultState(), false); + scene.world.setBlocks(outputFunnel, Blocks.AIR.defaultBlockState(), false); scene.world.setBlocks(util.select.fromTo(2, -1, 4, 2, 0, 4), AllBlocks.ANDESITE_CASING.getDefaultState(), true); ElementLink independentSection = scene.world.showIndependentSection(verticalFunnel, Direction.UP); @@ -88,8 +88,8 @@ public class FunnelScenes { scene.world.moveSection(independentSection, util.vector.of(0, 1, 0), 15); scene.idle(10); scene.world.setBlocks(outputFunnel, AllBlocks.ANDESITE_FUNNEL.getDefaultState() - .with(FunnelBlock.FACING, Direction.WEST) - .with(FunnelBlock.EXTRACTING, true), false); + .setValue(FunnelBlock.FACING, Direction.WEST) + .setValue(FunnelBlock.EXTRACTING, true), false); for (int i = 0; i < 3; i++) { scene.idle(8); @@ -144,7 +144,7 @@ public class FunnelScenes { scene.idle(20); // Placing funnels with sneak - scene.world.modifyBlock(topFunnel, s -> s.with(FunnelBlock.EXTRACTING, false), false); + scene.world.modifyBlock(topFunnel, s -> s.setValue(FunnelBlock.EXTRACTING, false), false); scene.idle(5); scene.world.showSection(topFunnelSelection, Direction.DOWN); @@ -188,7 +188,7 @@ public class FunnelScenes { // Side funnel BlockPos sideFunnel = util.grid.at(3, 2, 1); - Selection sideFunnelSelection = util.select.fromTo(sideFunnel.down(), sideFunnel); + Selection sideFunnelSelection = util.select.fromTo(sideFunnel.below(), sideFunnel); Vector3d sideCenter = util.vector.centerOf(sideFunnel); scene.world.modifyBlock(sideFunnel, s -> s.cycle(FunnelBlock.EXTRACTING), false); @@ -276,9 +276,9 @@ public class FunnelScenes { .text("Vertical Saws") .colored(PonderPalette.BLUE) .placeNearTarget() - .pointAt(util.vector.centerOf(sawFunnel.down())); + .pointAt(util.vector.centerOf(sawFunnel.below())); scene.idle(8); - scene.world.createItemOnBeltLike(sawFunnel.down(), Direction.SOUTH, new ItemStack(Blocks.OAK_LOG)); + scene.world.createItemOnBeltLike(sawFunnel.below(), Direction.SOUTH, new ItemStack(Blocks.OAK_LOG)); scene.idle(40); scene.world.showSection(util.select.position(depotFunnel), Direction.DOWN); @@ -286,9 +286,9 @@ public class FunnelScenes { .text("Depots") .colored(PonderPalette.BLUE) .placeNearTarget() - .pointAt(util.vector.centerOf(depotFunnel.down())); + .pointAt(util.vector.centerOf(depotFunnel.below())); scene.idle(8); - scene.world.createItemOnBeltLike(depotFunnel.down(), Direction.SOUTH, new ItemStack(Items.GOLDEN_PICKAXE)); + scene.world.createItemOnBeltLike(depotFunnel.below(), Direction.SOUTH, new ItemStack(Items.GOLDEN_PICKAXE)); scene.idle(40); scene.world.showSection(util.select.position(drainFunnel), Direction.DOWN); @@ -296,9 +296,9 @@ public class FunnelScenes { .text("Item Drains") .colored(PonderPalette.BLUE) .placeNearTarget() - .pointAt(util.vector.centerOf(drainFunnel.down())); + .pointAt(util.vector.centerOf(drainFunnel.below())); scene.idle(8); - scene.world.createItemOnBeltLike(drainFunnel.down(), Direction.SOUTH, new ItemStack(Items.WATER_BUCKET)); + scene.world.createItemOnBeltLike(drainFunnel.below(), Direction.SOUTH, new ItemStack(Items.WATER_BUCKET)); scene.idle(40); scene.markAsFinished(); @@ -319,8 +319,8 @@ public class FunnelScenes { BlockPos redstone = util.grid.at(2, 2, 2); BlockPos funnel = util.grid.at(3, 2, 2); - AxisAlignedBB redstoneBB = new AxisAlignedBB(funnel).grow(-1 / 16f, -6 / 16f, -1 / 16f) - .offset(0, -5 / 16f, 0); + AxisAlignedBB redstoneBB = new AxisAlignedBB(funnel).inflate(-1 / 16f, -6 / 16f, -1 / 16f) + .move(0, -5 / 16f, 0); for (int i = 0; i < 4; i++) { if (lastItemEntity != null) @@ -330,7 +330,7 @@ public class FunnelScenes { if (i == 3) { scene.world.modifyBlock(lever, s -> s.cycle(LeverBlock.POWERED), false); - scene.world.modifyBlock(redstone, s -> s.with(RedstoneWireBlock.POWER, 15), false); + scene.world.modifyBlock(redstone, s -> s.setValue(RedstoneWireBlock.POWER, 15), false); scene.world.modifyBlock(funnel, s -> s.cycle(FunnelBlock.POWERED), false); scene.effects.indicateRedstone(lever); scene.idle(4); @@ -377,7 +377,7 @@ public class FunnelScenes { .pointAt(util.vector.topOf(andesiteFunnel)) .placeNearTarget(); scene.idle(10); - scene.world.createItemOnBeltLike(andesiteFunnel.down() + scene.world.createItemOnBeltLike(andesiteFunnel.below() .north(), Direction.SOUTH, itemStack); scene.world.flapFunnel(andesiteFunnel, true); scene.idle(60); @@ -388,13 +388,13 @@ public class FunnelScenes { .pointAt(util.vector.topOf(brassFunnel)) .placeNearTarget(); scene.idle(10); - scene.world.createItemOnBeltLike(brassFunnel.down() + scene.world.createItemOnBeltLike(brassFunnel.below() .north(), Direction.SOUTH, ItemHandlerHelper.copyStackWithSize(itemStack, 64)); scene.world.flapFunnel(brassFunnel, true); scene.idle(60); - AxisAlignedBB filterSlot = new AxisAlignedBB(brassFunnel).grow(-.35, -.35, -.35) - .offset(0, 0.2, 0); + AxisAlignedBB filterSlot = new AxisAlignedBB(brassFunnel).inflate(-.35, -.35, -.35) + .move(0, 0.2, 0); scene.overlay.chaseBoundingBoxOutline(PonderPalette.WHITE, filterSlot, filterSlot, 80); scene.overlay.showControls(new InputWindowElement(util.vector.topOf(brassFunnel), Pointing.DOWN).scroll(), 60); scene.idle(10); @@ -422,12 +422,12 @@ public class FunnelScenes { for (int i = 0; i < 14; i++) { if (i < 12) - scene.world.createItemOnBelt(andesiteFunnel.down(), Direction.SOUTH, + scene.world.createItemOnBelt(andesiteFunnel.below(), Direction.SOUTH, i % 3 == 0 ? dirt : i % 3 == 1 ? gravel : emerald); scene.idle(10); if (i > 0 && (i < 3 || i % 3 == 0)) { - scene.world.removeItemsFromBelt(brassFunnel.down()); + scene.world.removeItemsFromBelt(brassFunnel.below()); scene.world.flapFunnel(brassFunnel, false); } @@ -504,7 +504,7 @@ public class FunnelScenes { scene.idle(20); Selection belt = util.select.layer(1); - scene.world.setBlocks(funnelSelect, Blocks.AIR.getDefaultState(), false); + scene.world.setBlocks(funnelSelect, Blocks.AIR.defaultBlockState(), false); scene.world.showSection(belt, Direction.DOWN); scene.world.showSection(util.select.fromTo(0, 2, 2, 4, 2, 2), Direction.DOWN); scene.overlay.showText(120) diff --git a/src/main/java/com/simibubi/create/foundation/ponder/content/GantryScenes.java b/src/main/java/com/simibubi/create/foundation/ponder/content/GantryScenes.java index d1642ccfd..64e0bd06f 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/content/GantryScenes.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/content/GantryScenes.java @@ -122,7 +122,7 @@ public class GantryScenes { scene.overlay.showText(60) .attachKeyFrame() .colored(PonderPalette.RED) - .pointAt(util.vector.centerOf(cogPos.down() + .pointAt(util.vector.centerOf(cogPos.below() .south())) .text("Redstone-powered gantry shafts stop moving their carriages") .placeNearTarget(); @@ -210,7 +210,7 @@ public class GantryScenes { BlockPos leverPos = util.grid.at(4, 1, 0); scene.world.modifyBlocks(util.select.fromTo(1, 1, 0, 3, 1, 1), - s -> s.contains(RedstoneWireBlock.POWER) ? s.with(RedstoneWireBlock.POWER, 15) : s, false); + s -> s.hasProperty(RedstoneWireBlock.POWER) ? s.setValue(RedstoneWireBlock.POWER, 15) : s, false); scene.world.toggleRedstonePower(util.select.position(leverPos)); scene.world.toggleRedstonePower(shafts); scene.effects.indicateRedstone(leverPos); diff --git a/src/main/java/com/simibubi/create/foundation/ponder/content/KineticsScenes.java b/src/main/java/com/simibubi/create/foundation/ponder/content/KineticsScenes.java index e98d3cc05..427b31083 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/content/KineticsScenes.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/content/KineticsScenes.java @@ -90,7 +90,7 @@ public class KineticsScenes { .withItem(andesiteCasingItem), 60); scene.idle(7); scene.world.setBlocks(andesite, andesiteEncased.getDefaultState() - .with(EncasedShaftBlock.AXIS, Axis.X), true); + .setValue(EncasedShaftBlock.AXIS, Axis.X), true); scene.world.setKineticSpeed(shaft, 32); scene.idle(10); @@ -101,7 +101,7 @@ public class KineticsScenes { .withItem(brassCasingItem), 60); scene.idle(7); scene.world.setBlocks(brass, brassEncased.getDefaultState() - .with(EncasedShaftBlock.AXIS, Axis.X), true); + .setValue(EncasedShaftBlock.AXIS, Axis.X), true); scene.world.setKineticSpeed(shaft, 32); scene.idle(10); @@ -154,7 +154,7 @@ public class KineticsScenes { scene.title("large_cogwheel", "Relaying rotational force using Large Cogwheels"); scene.configureBasePlate(1, 1, 5); scene.world.setBlock(util.grid.at(4, 2, 3), AllBlocks.LARGE_COGWHEEL.getDefaultState() - .with(CogWheelBlock.AXIS, Axis.X), false); + .setValue(CogWheelBlock.AXIS, Axis.X), false); scene.showBasePlate(); scene.idle(5); @@ -177,7 +177,7 @@ public class KineticsScenes { scene.world.hideSection(util.select.fromTo(3, 2, 1, 3, 2, 5), Direction.SOUTH); scene.idle(15); - scene.world.modifyBlock(util.grid.at(3, 2, 3), s -> s.with(ShaftBlock.AXIS, Axis.X), false); + scene.world.modifyBlock(util.grid.at(3, 2, 3), s -> s.setValue(ShaftBlock.AXIS, Axis.X), false); scene.world.setKineticSpeed(util.select.fromTo(1, 2, 3, 5, 2, 3), 16); scene.world.showSection(util.select.position(4, 2, 3), Direction.WEST); @@ -209,9 +209,9 @@ public class KineticsScenes { BlockPos lowerCog = util.grid.at(3, 1, 2); BlockPos upperCog = util.grid.at(3, 2, 3); BlockState largeCogState = AllBlocks.LARGE_COGWHEEL.getDefaultState() - .with(CogWheelBlock.AXIS, Axis.X); + .setValue(CogWheelBlock.AXIS, Axis.X); BlockState smallCogState = AllBlocks.COGWHEEL.getDefaultState() - .with(CogWheelBlock.AXIS, Axis.X); + .setValue(CogWheelBlock.AXIS, Axis.X); scene.world.setBlock(lowerCog, largeCogState, false); scene.world.setBlock(upperCog, smallCogState, false); @@ -330,10 +330,10 @@ public class KineticsScenes { BlockState defaultState = AllBlocks.SHAFT.getDefaultState(); BlockState cogState = AllBlocks.COGWHEEL.getDefaultState(); - scene.world.setBlock(largeCogBack, defaultState.with(CogWheelBlock.AXIS, Axis.Z), false); - scene.world.setBlock(largeCogFront, defaultState.with(CogWheelBlock.AXIS, Axis.Z), false); - scene.world.setBlock(largeCogRight, defaultState.with(CogWheelBlock.AXIS, Axis.X), false); - scene.world.setBlock(largeCogLeft, defaultState.with(CogWheelBlock.AXIS, Axis.X), false); + scene.world.setBlock(largeCogBack, defaultState.setValue(CogWheelBlock.AXIS, Axis.Z), false); + scene.world.setBlock(largeCogFront, defaultState.setValue(CogWheelBlock.AXIS, Axis.Z), false); + scene.world.setBlock(largeCogRight, defaultState.setValue(CogWheelBlock.AXIS, Axis.X), false); + scene.world.setBlock(largeCogLeft, defaultState.setValue(CogWheelBlock.AXIS, Axis.X), false); scene.world.showSection(util.select.fromTo(4, 2, 2, 2, 2, 4), Direction.DOWN); scene.idle(20); @@ -345,8 +345,8 @@ public class KineticsScenes { .text("A gearbox is the more compact equivalent of this setup"); scene.idle(90); - scene.world.setBlock(largeCogFront.north(), cogState.with(CogWheelBlock.AXIS, Axis.Z), true); - scene.world.setBlock(largeCogRight.west(), cogState.with(CogWheelBlock.AXIS, Axis.X), true); + scene.world.setBlock(largeCogFront.north(), cogState.setValue(CogWheelBlock.AXIS, Axis.Z), true); + scene.world.setBlock(largeCogRight.west(), cogState.setValue(CogWheelBlock.AXIS, Axis.X), true); scene.idle(10); scene.effects.rotationDirectionIndicator(largeCogFront.north()); scene.effects.rotationDirectionIndicator(largeCogRight.west()); @@ -360,7 +360,7 @@ public class KineticsScenes { scene.world.hideSection(util.select.fromTo(1, 2, 3, 2, 2, 3), Direction.WEST); scene.world.hideSection(util.select.fromTo(4, 2, 3, 5, 2, 3), Direction.EAST); - scene.world.setBlock(largeCogBack.south(), cogState.with(CogWheelBlock.AXIS, Axis.Z), true); + scene.world.setBlock(largeCogBack.south(), cogState.setValue(CogWheelBlock.AXIS, Axis.Z), true); scene.idle(10); scene.effects.rotationDirectionIndicator(largeCogFront.north()); @@ -498,7 +498,7 @@ public class KineticsScenes { Vector3d blockSurface = util.vector.blockSurface(motor, Direction.EAST); AxisAlignedBB point = new AxisAlignedBB(blockSurface, blockSurface); - AxisAlignedBB expanded = point.grow(1 / 16f, 1 / 5f, 1 / 5f); + AxisAlignedBB expanded = point.inflate(1 / 16f, 1 / 5f, 1 / 5f); scene.overlay.chaseBoundingBoxOutline(PonderPalette.WHITE, blockSurface, point, 1); scene.idle(1); @@ -533,7 +533,7 @@ public class KineticsScenes { for (int i = 0; i < 4; i++) { scene.idle(5); scene.world.showSection(util.select.fromTo(gaugePos.east(i) - .down(), gaugePos.east(i)), Direction.DOWN); + .below(), gaugePos.east(i)), Direction.DOWN); } scene.idle(10); @@ -557,17 +557,17 @@ public class KineticsScenes { .pointAt(util.vector.topOf(wheel)); scene.idle(50); - AxisAlignedBB bb = new AxisAlignedBB(wheel).grow(.125f, 0, 0); - scene.overlay.chaseBoundingBoxOutline(PonderPalette.MEDIUM, new Object(), bb.offset(0, 1.2, 0) + AxisAlignedBB bb = new AxisAlignedBB(wheel).inflate(.125f, 0, 0); + scene.overlay.chaseBoundingBoxOutline(PonderPalette.MEDIUM, new Object(), bb.move(0, 1.2, 0) .contract(0, .75, 0), 80); scene.idle(5); - scene.overlay.chaseBoundingBoxOutline(PonderPalette.MEDIUM, new Object(), bb.offset(0, 0, 1.2) + scene.overlay.chaseBoundingBoxOutline(PonderPalette.MEDIUM, new Object(), bb.move(0, 0, 1.2) .contract(0, 0, .75), 80); scene.idle(5); - scene.overlay.chaseBoundingBoxOutline(PonderPalette.MEDIUM, new Object(), bb.offset(0, -1.2, 0) + scene.overlay.chaseBoundingBoxOutline(PonderPalette.MEDIUM, new Object(), bb.move(0, -1.2, 0) .contract(0, -.75, 0), 80); scene.idle(5); - scene.overlay.chaseBoundingBoxOutline(PonderPalette.MEDIUM, new Object(), bb.offset(0, 0, -1.2) + scene.overlay.chaseBoundingBoxOutline(PonderPalette.MEDIUM, new Object(), bb.move(0, 0, -1.2) .contract(0, 0, -.75), 80); scene.idle(5); scene.overlay.showText(50) @@ -595,7 +595,7 @@ public class KineticsScenes { scene.idle(10); scene.world.rotateSection(wheelElement, 0, 180, 0, 5); scene.idle(10); - scene.world.modifyBlock(wheel, s -> s.with(WaterWheelBlock.FACING, Direction.WEST), false); + scene.world.modifyBlock(wheel, s -> s.setValue(WaterWheelBlock.FACING, Direction.WEST), false); scene.world.rotateSection(wheelElement, 0, -180, 0, 0); scene.idle(1); scene.world.moveSection(water, util.vector.of(0, -2, 2), 10); @@ -618,7 +618,7 @@ public class KineticsScenes { scene.rotateCameraY(30); scene.world.rotateSection(wheelElement, 0, 180, 0, 5); scene.idle(10); - scene.world.modifyBlock(wheel, s -> s.with(WaterWheelBlock.FACING, Direction.EAST), false); + scene.world.modifyBlock(wheel, s -> s.setValue(WaterWheelBlock.FACING, Direction.EAST), false); scene.world.rotateSection(wheelElement, 0, -180, 0, 0); scene.idle(1); scene.world.moveSection(water, util.vector.of(0, -2, 2), 10); @@ -641,7 +641,7 @@ public class KineticsScenes { .withItem(new ItemStack(Items.BLUE_DYE)), 40); scene.idle(7); scene.world.modifyBlock(util.grid.at(2, 2, 2), s -> AllBlocks.DYED_VALVE_HANDLES.get(DyeColor.BLUE).getDefaultState() - .with(ValveHandleBlock.FACING, Direction.UP), true); + .setValue(ValveHandleBlock.FACING, Direction.UP), true); scene.idle(10); scene.overlay.showText(70) .text("Valve handles can be dyed for aesthetic purposes") @@ -861,7 +861,7 @@ public class KineticsScenes { scene.world.cycleBlockProperty(gearshiftPos, SequencedGearshiftBlock.STATE); scene.world.cycleBlockProperty(gearshiftPos, SequencedGearshiftBlock.STATE); - scene.world.modifyBlock(wire, s -> s.with(RedstoneWireBlock.POWER, 0), false); + scene.world.modifyBlock(wire, s -> s.setValue(RedstoneWireBlock.POWER, 0), false); scene.world.toggleRedstonePower(util.select.position(5, 1, 1)); scene.world.modifyTileNBT(nixie, NixieTubeTileEntity.class, nbt -> nbt.putInt("RedstoneStrength", 0)); scene.world.setKineticSpeed(outputKinetics, 0); @@ -937,9 +937,9 @@ public class KineticsScenes { scene.idle(10); scene.world.hideSection(furnaceSelect, Direction.NORTH); scene.idle(15); - scene.world.setBlock(furnacePos, Blocks.BLAST_FURNACE.getDefaultState() - .with(FurnaceBlock.FACING, Direction.NORTH) - .with(FurnaceBlock.LIT, true), false); + scene.world.setBlock(furnacePos, Blocks.BLAST_FURNACE.defaultBlockState() + .setValue(FurnaceBlock.FACING, Direction.NORTH) + .setValue(FurnaceBlock.LIT, true), false); scene.world.showSection(furnaceSelect, Direction.NORTH); scene.idle(10); scene.world.moveSection(engine, util.vector.of(0, -1, 0), 15); @@ -1052,7 +1052,7 @@ public class KineticsScenes { scene.idle(10); scene.world.setBlock(gaugePos, (speed ? AllBlocks.SPEEDOMETER : AllBlocks.STRESSOMETER).getDefaultState() - .with(GaugeBlock.FACING, Direction.UP), true); + .setValue(GaugeBlock.FACING, Direction.UP), true); scene.world.setKineticSpeed(util.select.position(gaugePos), 32); scene.idle(10); @@ -1072,7 +1072,7 @@ public class KineticsScenes { } else { BlockState state = AllBlocks.CRUSHING_WHEEL.getDefaultState() - .with(CrushingWheelBlock.AXIS, Axis.X); + .setValue(CrushingWheelBlock.AXIS, Axis.X); scene.world.setBlock(util.grid.at(5, 1, 3), state, true); scene.world.setKineticSpeed(util.select.position(5, 1, 3), 32); scene.world.modifyTileNBT(util.select.position(gaugePos), StressGaugeTileEntity.class, diff --git a/src/main/java/com/simibubi/create/foundation/ponder/content/MechanicalDrillScenes.java b/src/main/java/com/simibubi/create/foundation/ponder/content/MechanicalDrillScenes.java index ea3e48654..6d17ab6cb 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/content/MechanicalDrillScenes.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/content/MechanicalDrillScenes.java @@ -60,7 +60,7 @@ public class MechanicalDrillScenes { scene.world.modifyKineticSpeed(util.select.everywhere(), f -> 4 * f); scene.effects.rotationSpeedIndicator(breakingPos.east(3)); scene.idle(5); - scene.world.setBlock(breakingPos, Blocks.OAK_PLANKS.getDefaultState(), false); + scene.world.setBlock(breakingPos, Blocks.OAK_PLANKS.defaultBlockState(), false); scene.world.showSection(util.select.position(breakingPos), Direction.DOWN); scene.idle(5); @@ -161,7 +161,7 @@ public class MechanicalDrillScenes { scene.world.hideSection(planks, Direction.UP); scene.idle(40); - scene.world.setBlocks(planks, Blocks.OAK_PLANKS.getDefaultState(), false); + scene.world.setBlocks(planks, Blocks.OAK_PLANKS.defaultBlockState(), false); scene.world.modifyEntities(ItemEntity.class, Entity::remove); scene.world.glueBlockOnto(util.grid.at(4, 3, 2), Direction.DOWN, contraption); diff --git a/src/main/java/com/simibubi/create/foundation/ponder/content/MechanicalSawScenes.java b/src/main/java/com/simibubi/create/foundation/ponder/content/MechanicalSawScenes.java index a916b39e4..6c254844e 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/content/MechanicalSawScenes.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/content/MechanicalSawScenes.java @@ -31,7 +31,7 @@ public class MechanicalSawScenes { BlockPos shaftPos = util.grid.at(2, 1, 3); scene.world.setBlock(shaftPos, AllBlocks.SHAFT.getDefaultState() - .with(ShaftBlock.AXIS, Axis.Z), false); + .setValue(ShaftBlock.AXIS, Axis.Z), false); BlockPos sawPos = util.grid.at(2, 1, 2); Selection sawSelect = util.select.position(sawPos); @@ -54,7 +54,7 @@ public class MechanicalSawScenes { ItemStack strippedLog = new ItemStack(Items.STRIPPED_OAK_LOG); ItemStack planks = new ItemStack(Items.OAK_PLANKS); - Vector3d itemSpawn = util.vector.centerOf(sawPos.up() + Vector3d itemSpawn = util.vector.centerOf(sawPos.above() .west()); ElementLink logItem = scene.world.createItemEntity(itemSpawn, util.vector.of(0, 0, 0), log); scene.idle(12); @@ -62,7 +62,7 @@ public class MechanicalSawScenes { scene.overlay.showControls(new InputWindowElement(itemSpawn, Pointing.DOWN).withItem(log), 20); scene.idle(10); - scene.world.modifyEntity(logItem, e -> e.setMotion(util.vector.of(0.05, 0.2, 0))); + scene.world.modifyEntity(logItem, e -> e.setDeltaMovement(util.vector.of(0.05, 0.2, 0))); scene.idle(12); scene.world.modifyEntity(logItem, Entity::remove); @@ -85,7 +85,7 @@ public class MechanicalSawScenes { scene.world.modifyKineticSpeed(util.select.everywhere(), f -> -2 * f); scene.effects.rotationDirectionIndicator(shaftPos); - scene.world.modifyEntity(logItem, e -> e.setMotion(util.vector.of(-0.05, 0.2, 0))); + scene.world.modifyEntity(logItem, e -> e.setDeltaMovement(util.vector.of(-0.05, 0.2, 0))); scene.idle(12); scene.world.modifyEntity(logItem, Entity::remove); @@ -104,7 +104,7 @@ public class MechanicalSawScenes { scene.world.modifyKineticSpeed(util.select.everywhere(), f -> -f); scene.world.modifyEntity(logItem, Entity::remove); scene.world.setBlock(shaftPos, AllBlocks.COGWHEEL.getDefaultState() - .with(ShaftBlock.AXIS, Axis.Z), true); + .setValue(ShaftBlock.AXIS, Axis.Z), true); scene.idle(3); scene.addKeyframe(); @@ -174,7 +174,7 @@ public class MechanicalSawScenes { scene.title("mechanical_saw_breaker", "Cutting Trees with the Mechanical Saw"); scene.configureBasePlate(0, 0, 5); scene.scaleSceneView(.9f); - scene.world.setBlock(util.grid.at(2, 0, 2), Blocks.GRASS_BLOCK.getDefaultState(), false); + scene.world.setBlock(util.grid.at(2, 0, 2), Blocks.GRASS_BLOCK.defaultBlockState(), false); scene.world.showSection(util.select.layer(0) .add(util.select.position(3, 1, 1)) .add(util.select.position(1, 1, 2)), Direction.UP); @@ -205,7 +205,7 @@ public class MechanicalSawScenes { } } - scene.world.replaceBlocks(util.select.fromTo(2, 2, 2, 2, 6, 2), Blocks.AIR.getDefaultState(), true); + scene.world.replaceBlocks(util.select.fromTo(2, 2, 2, 2, 6, 2), Blocks.AIR.defaultBlockState(), true); scene.world.destroyBlock(util.grid.at(3, 5, 0)); scene.world.destroyBlock(util.grid.at(0, 4, 1)); @@ -215,10 +215,10 @@ public class MechanicalSawScenes { scene.world.destroyBlock(util.grid.at(1, 5, 3)); scene.world.destroyBlock(util.grid.at(0, 4, 3)); - scene.world.replaceBlocks(util.select.layersFrom(4), Blocks.AIR.getDefaultState(), false); + scene.world.replaceBlocks(util.select.layersFrom(4), Blocks.AIR.defaultBlockState(), false); for (int i = 0; i < 5; i++) { - Vector3d dropPos = util.vector.centerOf(breakingPos.up(i)); + Vector3d dropPos = util.vector.centerOf(breakingPos.above(i)); float distance = (float) dropPos.distanceTo(util.vector.centerOf(breakingPos)); scene.world.createItemEntity(dropPos, util.vector.of(-distance / 20, 0, 0), new ItemStack(Items.OAK_LOG)); } @@ -229,7 +229,7 @@ public class MechanicalSawScenes { .add(util.select.fromTo(2, 1, 2, 1, 1, 3)), Direction.UP); scene.world.modifyEntities(ItemEntity.class, Entity::remove); scene.idle(15); - scene.world.setBlocks(util.select.fromTo(2, 1, 2, 1, 20, 3), Blocks.JUNGLE_LOG.getDefaultState(), false); + scene.world.setBlocks(util.select.fromTo(2, 1, 2, 1, 20, 3), Blocks.JUNGLE_LOG.defaultBlockState(), false); scene.world.showSection(util.select.layersFrom(2) .add(util.select.fromTo(2, 1, 2, 1, 1, 3)), Direction.UP); scene.idle(15); @@ -250,7 +250,7 @@ public class MechanicalSawScenes { } for (int i = 0; i < 30; i++) { - scene.world.replaceBlocks(util.select.fromTo(2, i + 1, 2, 1, i + 1, 3), Blocks.AIR.getDefaultState(), true); + scene.world.replaceBlocks(util.select.fromTo(2, i + 1, 2, 1, i + 1, 3), Blocks.AIR.defaultBlockState(), true); for (int x = 1; x <= 2; x++) { for (int z = 2; z <= 3; z++) { Vector3d dropPos = util.vector.centerOf(x, i + 1, z); @@ -267,7 +267,7 @@ public class MechanicalSawScenes { scene.title("mechanical_saw_contraption", "Using Mechanical Saws on Contraptions"); scene.configureBasePlate(1, 0, 6); scene.scaleSceneView(.9f); - scene.world.setBlock(util.grid.at(2, 0, 3), Blocks.GRASS_BLOCK.getDefaultState(), false); + scene.world.setBlock(util.grid.at(2, 0, 3), Blocks.GRASS_BLOCK.defaultBlockState(), false); scene.world.showSection(util.select.layer(0) .add(util.select.position(3, 1, 1)) .add(util.select.position(1, 1, 2)) @@ -321,7 +321,7 @@ public class MechanicalSawScenes { } } - scene.world.replaceBlocks(util.select.fromTo(2, 2, 3, 2, 6, 3), Blocks.AIR.getDefaultState(), true); + scene.world.replaceBlocks(util.select.fromTo(2, 2, 3, 2, 6, 3), Blocks.AIR.defaultBlockState(), true); scene.world.destroyBlock(util.grid.at(4, 5, 1)); scene.world.destroyBlock(util.grid.at(1, 4, 2)); scene.world.destroyBlock(util.grid.at(3, 6, 2)); @@ -329,10 +329,10 @@ public class MechanicalSawScenes { scene.world.destroyBlock(util.grid.at(2, 6, 3)); scene.world.destroyBlock(util.grid.at(2, 5, 2)); scene.world.destroyBlock(util.grid.at(1, 4, 2)); - scene.world.replaceBlocks(util.select.layersFrom(4), Blocks.AIR.getDefaultState(), false); + scene.world.replaceBlocks(util.select.layersFrom(4), Blocks.AIR.defaultBlockState(), false); for (int i = 0; i < 5; i++) { - Vector3d dropPos = util.vector.centerOf(breakingPos.up(i)); + Vector3d dropPos = util.vector.centerOf(breakingPos.above(i)); float distance = (float) dropPos.distanceTo(util.vector.centerOf(breakingPos)); scene.world.createItemEntity(dropPos, util.vector.of(-distance / 20, 0, 0), new ItemStack(Items.OAK_LOG)); } @@ -372,7 +372,7 @@ public class MechanicalSawScenes { scene.world.incrementBlockBreakingProgress(breakingPos); } - scene.world.replaceBlocks(util.select.fromTo(2, 2, 3, 2, 6, 3), Blocks.AIR.getDefaultState(), true); + scene.world.replaceBlocks(util.select.fromTo(2, 2, 3, 2, 6, 3), Blocks.AIR.defaultBlockState(), true); scene.world.destroyBlock(util.grid.at(4, 5, 1)); scene.world.destroyBlock(util.grid.at(1, 4, 2)); scene.world.destroyBlock(util.grid.at(3, 6, 2)); @@ -380,7 +380,7 @@ public class MechanicalSawScenes { scene.world.destroyBlock(util.grid.at(2, 6, 3)); scene.world.destroyBlock(util.grid.at(2, 5, 2)); scene.world.destroyBlock(util.grid.at(1, 4, 2)); - scene.world.replaceBlocks(util.select.layersFrom(4), Blocks.AIR.getDefaultState(), false); + scene.world.replaceBlocks(util.select.layersFrom(4), Blocks.AIR.defaultBlockState(), false); scene.world.moveSection(pistonHead, util.vector.of(-1, 0, 0), 20); scene.world.moveSection(contraption, util.vector.of(-1, 0, 0), 20); diff --git a/src/main/java/com/simibubi/create/foundation/ponder/content/MovementActorScenes.java b/src/main/java/com/simibubi/create/foundation/ponder/content/MovementActorScenes.java index b34014ada..db1125dbe 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/content/MovementActorScenes.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/content/MovementActorScenes.java @@ -47,7 +47,7 @@ public class MovementActorScenes { scene.world.rotateBearing(bearing, 360, 70); scene.world.rotateSection(contraption, 0, 360, 0, 70); scene.overlay.showText(60) - .pointAt(util.vector.topOf(bearing.up(2))) + .pointAt(util.vector.topOf(bearing.above(2))) .colored(PonderPalette.RED) .placeNearTarget() .attachKeyFrame() @@ -115,7 +115,7 @@ public class MovementActorScenes { .text("Items can now be inserted..."); ItemStack itemStack = AllItems.COPPER_INGOT.asStack(); - Vector3d entitySpawn = util.vector.topOf(hopper.up(3)); + Vector3d entitySpawn = util.vector.topOf(hopper.above(3)); ElementLink entity1 = scene.world.createItemEntity(entitySpawn, util.vector.of(0, 0.2, 0), itemStack); @@ -140,7 +140,7 @@ public class MovementActorScenes { scene.world.createItemOnBelt(beltPos, Direction.EAST, itemStack.copy()); scene.overlay.showText(40) .placeNearTarget() - .pointAt(util.vector.topOf(beltPos.up())) + .pointAt(util.vector.topOf(beltPos.above())) .text("...or extracted from the contraption"); scene.idle(15); scene.world.createItemOnBelt(beltPos, Direction.EAST, itemStack); @@ -213,8 +213,8 @@ public class MovementActorScenes { .add(util.select.position(2, 1, 3)) .add(util.select.position(1, 1, 2))); - scene.world.setBlocks(crops, Blocks.WHEAT.getDefaultState() - .with(CropsBlock.AGE, 7), false); + scene.world.setBlocks(crops, Blocks.WHEAT.defaultBlockState() + .setValue(CropsBlock.AGE, 7), false); scene.world.showSection(util.select.layer(0), Direction.UP); BlockPos bearingPos = util.grid.at(4, 1, 4); @@ -247,7 +247,7 @@ public class MovementActorScenes { scene.world.rotateBearing(bearingPos, -360, 140); scene.world.rotateSection(contraption, 0, -360, 0, 140); - BlockState harvested = Blocks.WHEAT.getDefaultState(); + BlockState harvested = Blocks.WHEAT.defaultBlockState(); ItemStack wheatItem = new ItemStack(Items.WHEAT); scene.idle(5); @@ -283,8 +283,8 @@ public class MovementActorScenes { scene.world.hideSection(crops, Direction.DOWN); scene.idle(15); scene.world.modifyEntities(ItemEntity.class, Entity::remove); - scene.world.setBlocks(crops, Blocks.WHEAT.getDefaultState() - .with(CropsBlock.AGE, 7), false); + scene.world.setBlocks(crops, Blocks.WHEAT.defaultBlockState() + .setValue(CropsBlock.AGE, 7), false); scene.world.showSection(crops, Direction.UP); for (int i = 0; i < 3; i++) @@ -399,7 +399,7 @@ public class MovementActorScenes { scene.world.moveSection(contraption, util.vector.of(2, 0, 0), 40); scene.world.hideSection(garbage, Direction.UP); scene.idle(40); - scene.world.setBlocks(garbage, Blocks.SNOW.getDefaultState(), false); + scene.world.setBlocks(garbage, Blocks.SNOW.defaultBlockState(), false); scene.world.modifyEntities(ItemEntity.class, Entity::remove); ElementLink chest = scene.world.showIndependentSection(util.select.position(4, 2, 2), Direction.DOWN); @@ -440,7 +440,7 @@ public class MovementActorScenes { Selection dirt = util.select.fromTo(2, 0, 3, 1, 0, 2); scene.world.hideSection(dirt, Direction.DOWN); scene.idle(15); - scene.world.setBlocks(dirt, Blocks.GRASS_BLOCK.getDefaultState(), false); + scene.world.setBlocks(dirt, Blocks.GRASS_BLOCK.defaultBlockState(), false); scene.world.showSection(dirt, Direction.UP); scene.overlay.showText(60) .placeNearTarget() @@ -454,9 +454,9 @@ public class MovementActorScenes { scene.world.moveSection(contraption, util.vector.of(-2, 0, 0), 60); scene.world.moveSection(chest, util.vector.of(-2, 0, 0), 60); scene.idle(15); - scene.world.setBlocks(util.select.fromTo(2, 0, 2, 2, 0, 3), Blocks.FARMLAND.getDefaultState(), true); + scene.world.setBlocks(util.select.fromTo(2, 0, 2, 2, 0, 3), Blocks.FARMLAND.defaultBlockState(), true); scene.idle(30); - scene.world.setBlocks(util.select.fromTo(1, 0, 2, 1, 0, 3), Blocks.FARMLAND.getDefaultState(), true); + scene.world.setBlocks(util.select.fromTo(1, 0, 2, 1, 0, 3), Blocks.FARMLAND.defaultBlockState(), true); scene.idle(20); scene.world.modifyKineticSpeed(util.select.everywhere(), f -> -f); diff --git a/src/main/java/com/simibubi/create/foundation/ponder/content/PistonScenes.java b/src/main/java/com/simibubi/create/foundation/ponder/content/PistonScenes.java index 65e73a6cf..8994e1667 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/content/PistonScenes.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/content/PistonScenes.java @@ -51,7 +51,7 @@ public class PistonScenes { scene.idle(15); scene.effects.indicateRedstone(leverPos); - scene.world.toggleRedstonePower(util.select.fromTo(leverPos, leverPos.down())); + scene.world.toggleRedstonePower(util.select.fromTo(leverPos, leverPos.below())); scene.world.modifyKineticSpeed(kinetics, f -> -f); scene.effects.rotationDirectionIndicator(shaft); scene.world.moveSection(contraption, util.vector.of(-2, 0, 0), 40); @@ -66,10 +66,10 @@ public class PistonScenes { .pointAt(util.vector.blockSurface(shaft, Direction.SOUTH)) .placeNearTarget() .text("Speed and direction of movement depend on the Rotational Input"); - scene.world.setBlock(util.grid.at(2, 1, 1), Blocks.AIR.getDefaultState(), false); - scene.world.setBlock(util.grid.at(0, 1, 2), Blocks.OAK_PLANKS.getDefaultState(), false); + scene.world.setBlock(util.grid.at(2, 1, 1), Blocks.AIR.defaultBlockState(), false); + scene.world.setBlock(util.grid.at(0, 1, 2), Blocks.OAK_PLANKS.defaultBlockState(), false); scene.effects.indicateRedstone(leverPos); - scene.world.toggleRedstonePower(util.select.fromTo(leverPos, leverPos.down())); + scene.world.toggleRedstonePower(util.select.fromTo(leverPos, leverPos.below())); scene.world.modifyKineticSpeed(kinetics, f -> -f); scene.effects.rotationDirectionIndicator(shaft); scene.world.moveSection(contraption, util.vector.of(2, 0, 0), 40); @@ -80,12 +80,12 @@ public class PistonScenes { .withItem(new ItemStack(Items.SLIME_BALL)), 30); scene.idle(7); - scene.world.modifyBlock(piston.north(), s -> s.with(MechanicalPistonHeadBlock.TYPE, PistonType.STICKY), false); + scene.world.modifyBlock(piston.north(), s -> s.setValue(MechanicalPistonHeadBlock.TYPE, PistonType.STICKY), false); scene.effects.superGlue(piston, Direction.WEST, true); scene.idle(33); scene.effects.indicateRedstone(leverPos); - scene.world.toggleRedstonePower(util.select.fromTo(leverPos, leverPos.down())); + scene.world.toggleRedstonePower(util.select.fromTo(leverPos, leverPos.below())); scene.world.modifyKineticSpeed(kinetics, f -> -f); scene.effects.rotationDirectionIndicator(shaft); scene.world.moveSection(contraption, util.vector.of(-2, 0, 0), 40); @@ -97,16 +97,16 @@ public class PistonScenes { .attachKeyFrame() .text("Sticky Mechanical Pistons can pull the attached blocks back"); scene.idle(20); - scene.world.setBlock(util.grid.at(2, 1, 1), Blocks.OAK_PLANKS.getDefaultState(), false); - scene.world.setBlock(util.grid.at(0, 1, 2), Blocks.AIR.getDefaultState(), false); + scene.world.setBlock(util.grid.at(2, 1, 1), Blocks.OAK_PLANKS.defaultBlockState(), false); + scene.world.setBlock(util.grid.at(0, 1, 2), Blocks.AIR.defaultBlockState(), false); scene.effects.indicateRedstone(leverPos); - scene.world.toggleRedstonePower(util.select.fromTo(leverPos, leverPos.down())); + scene.world.toggleRedstonePower(util.select.fromTo(leverPos, leverPos.below())); scene.world.modifyKineticSpeed(kinetics, f -> -f); scene.effects.rotationDirectionIndicator(shaft); scene.world.moveSection(contraption, util.vector.of(2, 0, 0), 40); scene.idle(50); - scene.world.setBlock(util.grid.at(2, 1, 1), Blocks.AIR.getDefaultState(), false); + scene.world.setBlock(util.grid.at(2, 1, 1), Blocks.AIR.defaultBlockState(), false); ElementLink chassis = scene.world.showIndependentSection(util.select.fromTo(2, 2, 0, 2, 3, 2), Direction.DOWN); scene.world.moveSection(chassis, util.vector.of(0, -1, 1), 0); @@ -123,7 +123,7 @@ public class PistonScenes { scene.idle(90); scene.effects.indicateRedstone(leverPos); - scene.world.toggleRedstonePower(util.select.fromTo(leverPos, leverPos.down())); + scene.world.toggleRedstonePower(util.select.fromTo(leverPos, leverPos.below())); scene.world.modifyKineticSpeed(kinetics, f -> -f); scene.effects.rotationDirectionIndicator(shaft); scene.world.moveSection(contraption, util.vector.of(-2, 0, 0), 40); @@ -150,7 +150,7 @@ public class PistonScenes { BlockPos leverPos = util.grid.at(3, 2, 4); scene.effects.indicateRedstone(leverPos); - scene.world.toggleRedstonePower(util.select.fromTo(leverPos, leverPos.down())); + scene.world.toggleRedstonePower(util.select.fromTo(leverPos, leverPos.below())); scene.world.setKineticSpeed(kinetics, 16); scene.idle(10); @@ -162,7 +162,7 @@ public class PistonScenes { scene.idle(60); scene.effects.indicateRedstone(leverPos); - scene.world.toggleRedstonePower(util.select.fromTo(leverPos, leverPos.down())); + scene.world.toggleRedstonePower(util.select.fromTo(leverPos, leverPos.below())); scene.world.setKineticSpeed(kinetics, 0); scene.idle(5); scene.world.showSectionAndMerge(util.select.position(piston.north() @@ -189,7 +189,7 @@ public class PistonScenes { scene.idle(15); scene.effects.indicateRedstone(leverPos); - scene.world.toggleRedstonePower(util.select.fromTo(leverPos, leverPos.down())); + scene.world.toggleRedstonePower(util.select.fromTo(leverPos, leverPos.below())); scene.world.setKineticSpeed(kinetics, 16); scene.world.moveSection(contraption, util.vector.of(-2, 0, 0), 40); scene.special.moveParrot(birb, util.vector.of(-2, 0, 0), 40); @@ -226,13 +226,13 @@ public class PistonScenes { scene.idle(5); scene.world.showSectionAndMerge(util.select.position(piston.north() .west() - .up()), Direction.DOWN, contraption); + .above()), Direction.DOWN, contraption); scene.idle(15); scene.effects.superGlue(piston.west(), Direction.UP, true); scene.idle(10); scene.effects.indicateRedstone(leverPos); - scene.world.toggleRedstonePower(util.select.fromTo(leverPos, leverPos.down())); + scene.world.toggleRedstonePower(util.select.fromTo(leverPos, leverPos.below())); scene.world.modifyKineticSpeed(kinetics, f -> -f); scene.effects.rotationDirectionIndicator(shaft); scene.world.moveSection(contraption, util.vector.of(-2, 0, 0), 40); @@ -248,16 +248,16 @@ public class PistonScenes { scene.idle(80); scene.effects.indicateRedstone(leverPos); - scene.world.toggleRedstonePower(util.select.fromTo(leverPos, leverPos.down())); + scene.world.toggleRedstonePower(util.select.fromTo(leverPos, leverPos.below())); scene.world.modifyKineticSpeed(kinetics, f -> -f); scene.effects.rotationDirectionIndicator(shaft); scene.world.moveSection(contraption, util.vector.of(2, 0, 0), 40); scene.world.hideSection(rose, Direction.UP); scene.idle(50); - scene.world.setBlock(util.grid.at(0, 1, 2), Blocks.ROSE_BUSH.getDefaultState(), false); - scene.world.setBlock(util.grid.at(0, 2, 2), Blocks.ROSE_BUSH.getDefaultState() - .with(DoublePlantBlock.HALF, DoubleBlockHalf.UPPER), false); + scene.world.setBlock(util.grid.at(0, 1, 2), Blocks.ROSE_BUSH.defaultBlockState(), false); + scene.world.setBlock(util.grid.at(0, 2, 2), Blocks.ROSE_BUSH.defaultBlockState() + .setValue(DoublePlantBlock.HALF, DoubleBlockHalf.UPPER), false); scene.world.showIndependentSection(rose, Direction.DOWN); scene.overlay.showCenteredScrollInput(piston, Direction.UP, 60); scene.overlay.showControls(new InputWindowElement(util.vector.topOf(piston), Pointing.DOWN).scroll() @@ -270,7 +270,7 @@ public class PistonScenes { scene.idle(80); scene.effects.indicateRedstone(leverPos); - scene.world.toggleRedstonePower(util.select.fromTo(leverPos, leverPos.down())); + scene.world.toggleRedstonePower(util.select.fromTo(leverPos, leverPos.below())); scene.world.modifyKineticSpeed(kinetics, f -> -f); scene.effects.rotationDirectionIndicator(shaft); scene.world.moveSection(contraption, util.vector.of(-2, 0, 0), 40); diff --git a/src/main/java/com/simibubi/create/foundation/ponder/content/PonderChapter.java b/src/main/java/com/simibubi/create/foundation/ponder/content/PonderChapter.java index 616708342..7508bd85a 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/content/PonderChapter.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/content/PonderChapter.java @@ -23,12 +23,12 @@ public class PonderChapter implements IScreenRenderable { @Override public void draw(MatrixStack ms, AbstractGui screen, int x, int y) { - ms.push(); - Minecraft.getInstance().getTextureManager().bindTexture(icon); + ms.pushPose(); + Minecraft.getInstance().getTextureManager().bind(icon); ms.scale(0.25f, 0.25f, 1); //x and y offset, blit z offset, tex x and y, tex width and height, entire tex sheet width and height - AbstractGui.drawTexture(ms, x, y, 0, 0, 0, 64, 64, 64, 64); - ms.pop(); + AbstractGui.blit(ms, x, y, 0, 0, 0, 64, 64, 64, 64); + ms.popPose(); } @Nonnull diff --git a/src/main/java/com/simibubi/create/foundation/ponder/content/PonderIndexScreen.java b/src/main/java/com/simibubi/create/foundation/ponder/content/PonderIndexScreen.java index 3e7936354..ee2141bb4 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/content/PonderIndexScreen.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/content/PonderIndexScreen.java @@ -137,9 +137,9 @@ public class PonderIndexScreen extends NavigatableSimiScreen { PonderUI.ponderTicks++; hoveredItem = ItemStack.EMPTY; - MainWindow w = client.getWindow(); - double mouseX = client.mouseHelper.getMouseX() * w.getScaledWidth() / w.getWidth(); - double mouseY = client.mouseHelper.getMouseY() * w.getScaledHeight() / w.getHeight(); + MainWindow w = minecraft.getWindow(); + double mouseX = minecraft.mouseHandler.xpos() * w.getGuiScaledWidth() / w.getScreenWidth(); + double mouseY = minecraft.mouseHandler.ypos() * w.getGuiScaledHeight() / w.getScreenHeight(); for (Widget widget : widgets) { if (widget instanceof PonderButton) if (widget.isMouseOver(mouseX, mouseY)) { @@ -154,25 +154,25 @@ public class PonderIndexScreen extends NavigatableSimiScreen { int y = (int) (height * chapterYmult); if (!chapters.isEmpty()) { - ms.push(); + ms.pushPose(); ms.translate(x, y, 0); UIRenderHelper.streak(ms, 0, chapterArea.getX() - 10, chapterArea.getY() - 20, 20, 220); - textRenderer.draw(ms, "Topics to Ponder about", chapterArea.getX() - 5, chapterArea.getY() - 25, Theme.i(Theme.Key.TEXT)); + font.draw(ms, "Topics to Ponder about", chapterArea.getX() - 5, chapterArea.getY() - 25, Theme.i(Theme.Key.TEXT)); - ms.pop(); + ms.popPose(); } x = (int) (width * itemXmult); y = (int) (height * itemYmult); - ms.push(); + ms.pushPose(); ms.translate(x, y, 0); UIRenderHelper.streak(ms, 0, itemArea.getX() - 10, itemArea.getY() - 20, 20, 220); - textRenderer.draw(ms, "Items to inspect", itemArea.getX() - 5, itemArea.getY() - 25, Theme.i(Theme.Key.TEXT)); + font.draw(ms, "Items to inspect", itemArea.getX() - 5, itemArea.getY() - 25, Theme.i(Theme.Key.TEXT)); - ms.pop(); + ms.popPose(); } @Override @@ -180,12 +180,12 @@ public class PonderIndexScreen extends NavigatableSimiScreen { if (hoveredItem.isEmpty()) return; - ms.push(); + ms.pushPose(); ms.translate(0, 0, 200); renderTooltip(ms, hoveredItem, mouseX, mouseY); - ms.pop(); + ms.popPose(); } /*@Override diff --git a/src/main/java/com/simibubi/create/foundation/ponder/content/PonderTag.java b/src/main/java/com/simibubi/create/foundation/ponder/content/PonderTag.java index db8f3385f..2eef66adf 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/content/PonderTag.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/content/PonderTag.java @@ -145,23 +145,23 @@ public class PonderTag implements IScreenRenderable { @Override @OnlyIn(Dist.CLIENT) public void draw(MatrixStack ms, AbstractGui screen, int x, int y) { - ms.push(); + ms.pushPose(); ms.translate(x, y, 0); if (icon != null) { Minecraft.getInstance() .getTextureManager() - .bindTexture(icon); + .bind(icon); ms.scale(0.25f, 0.25f, 1); // x and y offset, blit z offset, tex x and y, tex width and height, entire tex // sheet width and height - AbstractGui.drawTexture(ms, 0, 0, 0, 0, 0, 64, 64, 64, 64); + AbstractGui.blit(ms, 0, 0, 0, 0, 0, 64, 64, 64, 64); } else if (!itemIcon.isEmpty()) { ms.translate(-4, -4, 0); ms.scale(1.5f, 1.5f, 1.5f); GuiGameElement.of(itemIcon) .render(ms); } - ms.pop(); + ms.popPose(); } // Load class diff --git a/src/main/java/com/simibubi/create/foundation/ponder/content/PonderTagIndexScreen.java b/src/main/java/com/simibubi/create/foundation/ponder/content/PonderTagIndexScreen.java index ff6ae2a10..24b4dc107 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/content/PonderTagIndexScreen.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/content/PonderTagIndexScreen.java @@ -83,9 +83,9 @@ public class PonderTagIndexScreen extends NavigatableSimiScreen { PonderUI.ponderTicks++; hoveredItem = null; - MainWindow w = client.getWindow(); - double mouseX = client.mouseHelper.getMouseX() * w.getScaledWidth() / w.getWidth(); - double mouseY = client.mouseHelper.getMouseY() * w.getScaledHeight() / w.getHeight(); + MainWindow w = minecraft.getWindow(); + double mouseX = minecraft.mouseHandler.xpos() * w.getGuiScaledWidth() / w.getScreenWidth(); + double mouseY = minecraft.mouseHandler.ypos() * w.getGuiScaledHeight() / w.getScreenHeight(); for (Widget widget : widgets) { if (widget == backTrack) continue; @@ -104,10 +104,10 @@ public class PonderTagIndexScreen extends NavigatableSimiScreen { protected void renderWindow(MatrixStack ms, int mouseX, int mouseY, float partialTicks) { renderItems(ms, mouseX, mouseY, partialTicks); - ms.push(); + ms.pushPose(); ms.translate(width / 2 - 120, height * mainYmult - 40, 0); - ms.push(); + ms.pushPose(); // ms.translate(0, 0, 800); int x = 31 + 20 + 8; int y = 31; @@ -124,32 +124,32 @@ public class PonderTagIndexScreen extends NavigatableSimiScreen { .withBounds(30, 30) .render(ms); - textRenderer.draw(ms, title, x + 8, y + 1, Theme.i(Theme.Key.TEXT)); + font.draw(ms, title, x + 8, y + 1, Theme.i(Theme.Key.TEXT)); // y += 8; // x += 0; // ms.translate(x, y, 0); // ms.translate(0, 0, 5); // textRenderer.draw(ms, title, 0, 0, Theme.i(Theme.Key.TEXT)); - ms.pop(); + ms.popPose(); - ms.push(); + ms.pushPose(); ms.translate(23, 23, 10); ms.scale(1.66f, 1.66f, 1.66f); ms.translate(-4, -4, 0); ms.scale(1.5f, 1.5f, 1.5f); GuiGameElement.of(AllItems.WRENCH.asStack()) .render(ms); - ms.pop(); - ms.pop(); + ms.popPose(); + ms.popPose(); - ms.push(); + ms.pushPose(); int w = (int) (width * .45); x = (width - w) / 2; y = getItemsY() - 10 + Math.max(itemArea.getHeight(), 48); String desc = Lang.translate(DESCRIPTION) .getString(); - int h = textRenderer.getWordWrappedHeight(desc, w); + int h = font.wordWrapHeight(desc, w); // PonderUI.renderBox(ms, x - 3, y - 3, w + 6, h + 6, false); new BoxElement().withBackground(Theme.c(Theme.Key.PONDER_BACKGROUND_FLAT)) @@ -159,8 +159,8 @@ public class PonderTagIndexScreen extends NavigatableSimiScreen { .render(ms); ms.translate(0, 0, 100); - FontHelper.drawSplitString(ms, textRenderer, desc, x, y, w, Theme.i(Theme.Key.TEXT)); - ms.pop(); + FontHelper.drawSplitString(ms, font, desc, x, y, w, Theme.i(Theme.Key.TEXT)); + ms.popPose(); } protected void renderItems(MatrixStack ms, int mouseX, int mouseY, float partialTicks) { @@ -173,9 +173,9 @@ public class PonderTagIndexScreen extends NavigatableSimiScreen { String relatedTitle = Lang.translate(CATEGORIES) .getString(); - int stringWidth = textRenderer.getStringWidth(relatedTitle); + int stringWidth = font.width(relatedTitle); - ms.push(); + ms.pushPose(); ms.translate(x, y, 0); // PonderUI.renderBox(ms, (sWidth - stringWidth) / 2 - 5, itemArea.getY() - 21, // stringWidth + 10, 10, false); @@ -188,14 +188,14 @@ public class PonderTagIndexScreen extends NavigatableSimiScreen { ms.translate(0, 0, 200); // UIRenderHelper.streak(0, itemArea.getX() - 10, itemArea.getY() - 20, 20, 180, 0x101010); - drawCenteredString(ms, textRenderer, relatedTitle, windowWidth / 2, itemArea.getY() - 20, Theme.i(Theme.Key.TEXT)); + drawCenteredString(ms, font, relatedTitle, windowWidth / 2, itemArea.getY() - 20, Theme.i(Theme.Key.TEXT)); ms.translate(0, 0, -200); UIRenderHelper.streak(ms, 0, 0, 0, itemArea.getHeight() + 10, itemArea.getWidth() / 2 + 75); UIRenderHelper.streak(ms, 180, 0, 0, itemArea.getHeight() + 10, itemArea.getWidth() / 2 + 75); - ms.pop(); + ms.popPose(); } @@ -205,7 +205,7 @@ public class PonderTagIndexScreen extends NavigatableSimiScreen { @Override protected void renderWindowForeground(MatrixStack ms, int mouseX, int mouseY, float partialTicks) { - ms.push(); + ms.pushPose(); RenderSystem.disableRescaleNormal(); RenderSystem.disableDepthTest(); @@ -214,11 +214,11 @@ public class PonderTagIndexScreen extends NavigatableSimiScreen { List list = TooltipHelper.cutStringTextComponent(hoveredItem.getDescription(), TextFormatting.GRAY, TextFormatting.GRAY); list.add(0, new StringTextComponent(hoveredItem.getTitle())); - renderTooltip(ms, list, mouseX, mouseY); + renderComponentTooltip(ms, list, mouseX, mouseY); } RenderSystem.enableDepthTest(); RenderSystem.enableRescaleNormal(); - ms.pop(); + ms.popPose(); } @Override diff --git a/src/main/java/com/simibubi/create/foundation/ponder/content/PonderTagScreen.java b/src/main/java/com/simibubi/create/foundation/ponder/content/PonderTagScreen.java index c861360e2..5b85fa1e0 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/content/PonderTagScreen.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/content/PonderTagScreen.java @@ -162,9 +162,9 @@ public class PonderTagScreen extends NavigatableSimiScreen { PonderUI.ponderTicks++; hoveredItem = ItemStack.EMPTY; - MainWindow w = client.getWindow(); - double mouseX = client.mouseHelper.getMouseX() * w.getScaledWidth() / w.getWidth(); - double mouseY = client.mouseHelper.getMouseY() * w.getScaledHeight() / w.getHeight(); + MainWindow w = minecraft.getWindow(); + double mouseX = minecraft.mouseHandler.xpos() * w.getGuiScaledWidth() / w.getScreenWidth(); + double mouseY = minecraft.mouseHandler.ypos() * w.getGuiScaledHeight() / w.getScreenHeight(); for (Widget widget : widgets) { if (widget == backTrack) continue; @@ -181,10 +181,10 @@ public class PonderTagScreen extends NavigatableSimiScreen { renderChapters(ms, mouseX, mouseY, partialTicks); - ms.push(); + ms.pushPose(); ms.translate(width / 2 - 120, height * mainYmult - 40, 0); - ms.push(); + ms.pushPose(); //ms.translate(0, 0, 800); int x = 31 + 20 + 8; int y = 31; @@ -201,28 +201,28 @@ public class PonderTagScreen extends NavigatableSimiScreen { .withBounds(30, 30) .render(ms); - textRenderer.draw(ms, Lang.translate(PonderUI.PONDERING), x, y - 6, Theme.i(Theme.Key.TEXT_DARKER)); + font.draw(ms, Lang.translate(PonderUI.PONDERING), x, y - 6, Theme.i(Theme.Key.TEXT_DARKER)); y += 8; x += 0; ms.translate(x, y, 0); ms.translate(0, 0, 5); - textRenderer.draw(ms, title, 0, 0, Theme.i(Theme.Key.TEXT)); - ms.pop(); + font.draw(ms, title, 0, 0, Theme.i(Theme.Key.TEXT)); + ms.popPose(); - ms.push(); + ms.pushPose(); ms.translate(23, 23, 10); ms.scale(1.66f, 1.66f, 1.66f); tag.draw(ms, this, 0, 0); - ms.pop(); - ms.pop(); + ms.popPose(); + ms.popPose(); - ms.push(); + ms.pushPose(); int w = (int) (width * .45); x = (width - w) / 2; y = getItemsY() - 10 + Math.max(itemArea.getHeight(), 48); String desc = tag.getDescription(); - int h = textRenderer.getWordWrappedHeight(desc, w); + int h = font.wordWrapHeight(desc, w); //PonderUI.renderBox(ms, x - 3, y - 3, w + 6, h + 6, false); @@ -234,8 +234,8 @@ public class PonderTagScreen extends NavigatableSimiScreen { .render(ms); ms.translate(0, 0, 100); - FontHelper.drawSplitString(ms, textRenderer, desc, x, y, w, Theme.i(Theme.Key.TEXT)); - ms.pop(); + FontHelper.drawSplitString(ms, font, desc, x, y, w, Theme.i(Theme.Key.TEXT)); + ms.popPose(); } protected void renderItems(MatrixStack ms, int mouseX, int mouseY, float partialTicks) { @@ -246,9 +246,9 @@ public class PonderTagScreen extends NavigatableSimiScreen { int y = getItemsY(); String relatedTitle = Lang.translate(ASSOCIATED).getString(); - int stringWidth = textRenderer.getStringWidth(relatedTitle); + int stringWidth = font.width(relatedTitle); - ms.push(); + ms.pushPose(); ms.translate(x, y, 0); //PonderUI.renderBox(ms, (sWidth - stringWidth) / 2 - 5, itemArea.getY() - 21, stringWidth + 10, 10, false); new BoxElement() @@ -261,14 +261,14 @@ public class PonderTagScreen extends NavigatableSimiScreen { ms.translate(0, 0, 200); // UIRenderHelper.streak(0, itemArea.getX() - 10, itemArea.getY() - 20, 20, 180, 0x101010); - drawCenteredString(ms, textRenderer, relatedTitle, windowWidth / 2, itemArea.getY() - 20, Theme.i(Theme.Key.TEXT)); + drawCenteredString(ms, font, relatedTitle, windowWidth / 2, itemArea.getY() - 20, Theme.i(Theme.Key.TEXT)); ms.translate(0,0, -200); UIRenderHelper.streak(ms, 0, 0, 0, itemArea.getHeight() + 10, itemArea.getWidth() / 2 + 75); UIRenderHelper.streak(ms, 180, 0, 0, itemArea.getHeight() + 10, itemArea.getWidth() / 2 + 75); - ms.pop(); + ms.popPose(); } @@ -283,18 +283,18 @@ public class PonderTagScreen extends NavigatableSimiScreen { int chapterX = (int) (width * chapterXmult); int chapterY = (int) (height * chapterYmult); - ms.push(); + ms.pushPose(); ms.translate(chapterX, chapterY, 0); UIRenderHelper.streak(ms, 0, chapterArea.getX() - 10, chapterArea.getY() - 20, 20, 220); - textRenderer.draw(ms, "More Topics to Ponder about", chapterArea.getX() - 5, chapterArea.getY() - 25, Theme.i(Theme.Key.TEXT_ACCENT_SLIGHT)); + font.draw(ms, "More Topics to Ponder about", chapterArea.getX() - 5, chapterArea.getY() - 25, Theme.i(Theme.Key.TEXT_ACCENT_SLIGHT)); - ms.pop(); + ms.popPose(); } @Override protected void renderWindowForeground(MatrixStack ms, int mouseX, int mouseY, float partialTicks) { - ms.push(); + ms.pushPose(); RenderSystem.disableRescaleNormal(); RenderSystem.disableDepthTest(); @@ -304,7 +304,7 @@ public class PonderTagScreen extends NavigatableSimiScreen { } RenderSystem.enableDepthTest(); RenderSystem.enableRescaleNormal(); - ms.pop(); + ms.popPose(); } @Override diff --git a/src/main/java/com/simibubi/create/foundation/ponder/content/ProcessingScenes.java b/src/main/java/com/simibubi/create/foundation/ponder/content/ProcessingScenes.java index 64a4bc8d0..342b530f8 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/content/ProcessingScenes.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/content/ProcessingScenes.java @@ -87,7 +87,7 @@ public class ProcessingScenes { scene.idle(70); ItemStack itemStack = new ItemStack(Items.WHEAT); - Vector3d entitySpawn = util.vector.topOf(millstone.up(3)); + Vector3d entitySpawn = util.vector.topOf(millstone.above(3)); ElementLink entity1 = scene.world.createItemEntity(entitySpawn, util.vector.of(0, 0.2, 0), itemStack); @@ -151,7 +151,7 @@ public class ProcessingScenes { Selection kinetics2 = util.select.fromTo(0, 2, 5, 4, 2, 3); Selection beltCog = util.select.position(5, 0, 1); scene.world.setKineticSpeed(wheels, 0); - scene.world.setBlock(util.grid.at(2, 3, 2), Blocks.AIR.getDefaultState(), false); + scene.world.setBlock(util.grid.at(2, 3, 2), Blocks.AIR.defaultBlockState(), false); scene.world.showSection(util.select.layer(0) .substract(beltCog), Direction.UP); @@ -203,7 +203,7 @@ public class ProcessingScenes { ItemStack input = new ItemStack(Items.GOLD_ORE); ItemStack output = AllItems.CRUSHED_GOLD.asStack(); - Vector3d entitySpawn = util.vector.topOf(center.up(2)); + Vector3d entitySpawn = util.vector.topOf(center.above(2)); ElementLink entity1 = scene.world.createItemEntity(entitySpawn, util.vector.of(0, 0.2, 0), input); @@ -254,9 +254,9 @@ public class ProcessingScenes { scene.world.createItemOnBelt(util.grid.at(4, 4, 2), Direction.EAST, input); scene.idle(15); if (i > 0) { - scene.world.createItemOnBelt(center.down(), Direction.UP, output); + scene.world.createItemOnBelt(center.below(), Direction.UP, output); scene.idle(15); - scene.world.createItemOnBelt(center.down(), Direction.UP, output); + scene.world.createItemOnBelt(center.below(), Direction.UP, output); } scene.world.removeItemsFromBelt(util.grid.at(3, 3, 2)); if (i < 4) @@ -354,8 +354,8 @@ public class ProcessingScenes { scene.idle(30); scene.world.modifyTileEntity(pressPos, type, pte -> pte.makePressingParticleEffect(depotCenter.add(0, 8 / 16f, 0), copper)); - scene.world.removeItemsFromBelt(pressPos.down(2)); - ingot = scene.world.createItemOnBelt(pressPos.down(2), Direction.UP, sheet); + scene.world.removeItemsFromBelt(pressPos.below(2)); + ingot = scene.world.createItemOnBelt(pressPos.below(2), Direction.UP, sheet); scene.world.stallBeltItem(ingot, true); scene.idle(15); scene.world.stallBeltItem(ingot, false); @@ -365,8 +365,8 @@ public class ProcessingScenes { scene.idle(30); scene.world.modifyTileEntity(pressPos, type, pte -> pte.makePressingParticleEffect(depotCenter.add(0, 8 / 16f, 0), copper)); - scene.world.removeItemsFromBelt(pressPos.down(2)); - ingot2 = scene.world.createItemOnBelt(pressPos.down(2), Direction.UP, sheet); + scene.world.removeItemsFromBelt(pressPos.below(2)); + ingot2 = scene.world.createItemOnBelt(pressPos.below(2), Direction.UP, sheet); scene.world.stallBeltItem(ingot2, true); scene.idle(15); scene.world.stallBeltItem(ingot2, false); @@ -433,7 +433,7 @@ public class ProcessingScenes { scene.rotateCameraY(-30); scene.idle(10); scene.world.setBlock(util.grid.at(1, 1, 2), AllBlocks.BLAZE_BURNER.getDefaultState() - .with(BlazeBurnerBlock.HEAT_LEVEL, HeatLevel.KINDLED), true); + .setValue(BlazeBurnerBlock.HEAT_LEVEL, HeatLevel.KINDLED), true); scene.idle(10); scene.overlay.showText(80) @@ -532,7 +532,7 @@ public class ProcessingScenes { scene.rotateCameraY(-30); scene.idle(10); scene.world.setBlock(util.grid.at(1, 1, 2), AllBlocks.BLAZE_BURNER.getDefaultState() - .with(BlazeBurnerBlock.HEAT_LEVEL, HeatLevel.KINDLED), true); + .setValue(BlazeBurnerBlock.HEAT_LEVEL, HeatLevel.KINDLED), true); scene.idle(10); scene.overlay.showText(80) @@ -564,20 +564,20 @@ public class ProcessingScenes { scene.world.createEntity(w -> { BlazeEntity blazeEntity = EntityType.BLAZE.create(w); Vector3d v = util.vector.topOf(center); - blazeEntity.setPos(v.x, v.y, v.z); - blazeEntity.prevRotationYaw = blazeEntity.rotationYaw = 180; + blazeEntity.setPosRaw(v.x, v.y, v.z); + blazeEntity.yRotO = blazeEntity.yRot = 180; return blazeEntity; }); scene.idle(20); scene.overlay - .showControls(new InputWindowElement(util.vector.centerOf(center.up(2)), Pointing.DOWN).rightClick() + .showControls(new InputWindowElement(util.vector.centerOf(center.above(2)), Pointing.DOWN).rightClick() .withItem(AllItems.EMPTY_BLAZE_BURNER.asStack()), 40); scene.idle(10); scene.overlay.showText(60) .text("Right-click a Blaze with the empty burner to capture it") .attachKeyFrame() - .pointAt(util.vector.blockSurface(center.up(2), Direction.WEST)) + .pointAt(util.vector.blockSurface(center.above(2), Direction.WEST)) .placeNearTarget(); scene.idle(50); @@ -586,13 +586,13 @@ public class ProcessingScenes { scene.world.showSection(util.select.position(2, 1, 2), Direction.DOWN); scene.idle(20); - scene.overlay.showControls(new InputWindowElement(util.vector.topOf(center.up()), Pointing.DOWN).rightClick() + scene.overlay.showControls(new InputWindowElement(util.vector.topOf(center.above()), Pointing.DOWN).rightClick() .withItem(AllItems.EMPTY_BLAZE_BURNER.asStack()), 40); scene.idle(10); scene.overlay.showText(60) .text("Alternatively, Blazes can be collected from their Spawners directly") .attachKeyFrame() - .pointAt(util.vector.blockSurface(center.up(), Direction.WEST)) + .pointAt(util.vector.blockSurface(center.above(), Direction.WEST)) .placeNearTarget(); scene.idle(50); scene.world.hideSection(util.select.position(2, 1, 2), Direction.UP); @@ -600,20 +600,20 @@ public class ProcessingScenes { scene.world.showSection(util.select.position(1, 1, 2), Direction.DOWN); scene.idle(20); - scene.world.modifyBlock(util.grid.at(1, 1, 2), s -> s.with(BlazeBurnerBlock.HEAT_LEVEL, HeatLevel.KINDLED), + scene.world.modifyBlock(util.grid.at(1, 1, 2), s -> s.setValue(BlazeBurnerBlock.HEAT_LEVEL, HeatLevel.KINDLED), false); scene.overlay.showText(70) .text("You now have an ideal heat source for various machines") .attachKeyFrame() .pointAt(util.vector.blockSurface(center.west() - .up(), Direction.WEST)) + .above(), Direction.WEST)) .placeNearTarget(); scene.idle(80); scene.world.showSection(util.select.position(3, 1, 2), Direction.DOWN); scene.idle(20); scene.overlay.showControls(new InputWindowElement(util.vector.topOf(center.east() - .up()), Pointing.DOWN).rightClick() + .above()), Pointing.DOWN).rightClick() .withItem(new ItemStack(Items.FLINT_AND_STEEL)), 40); scene.idle(7); @@ -623,27 +623,27 @@ public class ProcessingScenes { .text("For Aesthetic purposes, Empty Blaze Burners can also be lit using Flint and Steel") .attachKeyFrame() .pointAt(util.vector.blockSurface(center.east() - .up(), Direction.UP)) + .above(), Direction.UP)) .placeNearTarget(); scene.idle(80); scene.overlay.showControls(new InputWindowElement(util.vector.topOf(center.east() - .up()), Pointing.DOWN).rightClick() + .above()), Pointing.DOWN).rightClick() .withItem(new ItemStack(Items.SOUL_SAND)), 40); scene.idle(7); - scene.world.modifyBlock(util.grid.at(3, 1, 2), s -> s.with(LitBlazeBurnerBlock.FLAME_TYPE, LitBlazeBurnerBlock.FlameType.SOUL), + scene.world.modifyBlock(util.grid.at(3, 1, 2), s -> s.setValue(LitBlazeBurnerBlock.FLAME_TYPE, LitBlazeBurnerBlock.FlameType.SOUL), false); scene.overlay.showText(60) .text("The flame can be transformed using a soul-infused item") .pointAt(util.vector.blockSurface(center.east() - .up(), Direction.UP)) + .above(), Direction.UP)) .placeNearTarget(); scene.idle(80); scene.overlay.showText(90) .colored(PonderPalette.RED) .text("However, without a blaze they are not suitable for industrial heating") .pointAt(util.vector.blockSurface(center.east() - .up(), Direction.UP)) + .above(), Direction.UP)) .placeNearTarget(); scene.idle(70); } @@ -657,7 +657,7 @@ public class ProcessingScenes { BlockPos burner = util.grid.at(2, 1, 2); scene.world.showSection(util.select.position(burner), Direction.DOWN); scene.idle(10); - scene.world.showSection(util.select.position(burner.up()), Direction.DOWN); + scene.world.showSection(util.select.position(burner.above()), Direction.DOWN); scene.idle(10); scene.overlay.showText(70) @@ -667,18 +667,18 @@ public class ProcessingScenes { .placeNearTarget(); scene.idle(80); - scene.world.hideSection(util.select.position(burner.up()), Direction.UP); + scene.world.hideSection(util.select.position(burner.above()), Direction.UP); scene.idle(20); - scene.world.setBlock(burner.up(), Blocks.AIR.getDefaultState(), false); + scene.world.setBlock(burner.above(), Blocks.AIR.defaultBlockState(), false); scene.overlay.showControls(new InputWindowElement(util.vector.topOf(burner), Pointing.DOWN).rightClick() .withItem(new ItemStack(Items.OAK_PLANKS)), 15); scene.idle(7); - scene.world.modifyBlock(burner, s -> s.with(BlazeBurnerBlock.HEAT_LEVEL, HeatLevel.FADING), false); + scene.world.modifyBlock(burner, s -> s.setValue(BlazeBurnerBlock.HEAT_LEVEL, HeatLevel.FADING), false); scene.idle(15); scene.overlay.showControls(new InputWindowElement(util.vector.topOf(burner), Pointing.DOWN).rightClick() .withItem(new ItemStack(Items.OAK_PLANKS)), 15); scene.idle(7); - scene.world.modifyBlock(burner, s -> s.with(BlazeBurnerBlock.HEAT_LEVEL, HeatLevel.KINDLED), false); + scene.world.modifyBlock(burner, s -> s.setValue(BlazeBurnerBlock.HEAT_LEVEL, HeatLevel.KINDLED), false); scene.idle(20); scene.overlay.showText(70) @@ -692,7 +692,7 @@ public class ProcessingScenes { scene.overlay.showControls(new InputWindowElement(util.vector.topOf(burner), Pointing.DOWN).rightClick() .withItem(AllItems.BLAZE_CAKE.asStack()), 30); scene.idle(7); - scene.world.modifyBlock(burner, s -> s.with(BlazeBurnerBlock.HEAT_LEVEL, HeatLevel.SEETHING), false); + scene.world.modifyBlock(burner, s -> s.setValue(BlazeBurnerBlock.HEAT_LEVEL, HeatLevel.SEETHING), false); scene.idle(20); scene.overlay.showText(80) @@ -731,7 +731,7 @@ public class ProcessingScenes { scene.world.showSection(util.select.position(1, 1, 2), Direction.DOWN); scene.idle(10); BlockPos basinPos = util.grid.at(1, 2, 2); - scene.world.modifyBlock(basinPos, s -> s.with(BasinBlock.FACING, Direction.DOWN), false); + scene.world.modifyBlock(basinPos, s -> s.setValue(BasinBlock.FACING, Direction.DOWN), false); scene.world.showSection(util.select.position(basinPos), Direction.DOWN); scene.idle(10); Vector3d basinSide = util.vector.blockSurface(basinPos, Direction.WEST); @@ -744,7 +744,7 @@ public class ProcessingScenes { ItemStack stack = new ItemStack(Items.BRICK); for (int i = 0; i < 4; i++) { - scene.world.createItemEntity(util.vector.centerOf(basinPos.up(3)), util.vector.of(0, 0, 0), stack); + scene.world.createItemEntity(util.vector.centerOf(basinPos.above(3)), util.vector.of(0, 0, 0), stack); scene.idle(10); } scene.idle(10); @@ -753,8 +753,8 @@ public class ProcessingScenes { scene.idle(30); for (Direction d : Iterate.horizontalDirections) { - scene.overlay.showOutline(PonderPalette.GREEN, new Object(), util.select.position(basinPos.down() - .offset(d)), 60); + scene.overlay.showOutline(PonderPalette.GREEN, new Object(), util.select.position(basinPos.below() + .relative(d)), 60); scene.idle(4); } @@ -770,7 +770,7 @@ public class ProcessingScenes { scene.world.showIndependentSection(util.select.position(3, 1, 1), Direction.EAST); scene.world.moveSection(depot, util.vector.of(-2, 0, 0), 0); scene.idle(10); - scene.world.modifyBlock(basinPos, s -> s.with(BasinBlock.FACING, Direction.NORTH), false); + scene.world.modifyBlock(basinPos, s -> s.setValue(BasinBlock.FACING, Direction.NORTH), false); scene.idle(10); scene.overlay.showText(80) @@ -831,7 +831,7 @@ public class ProcessingScenes { .serializeNBT())); }); scene.idle(4); - scene.overlay.showControls(new InputWindowElement(util.vector.topOf(basinPos.down() + scene.overlay.showControls(new InputWindowElement(util.vector.topOf(basinPos.below() .north()), Pointing.RIGHT).withItem(new ItemStack(Items.BRICKS)), 30); scene.overlay.showText(60) @@ -844,7 +844,7 @@ public class ProcessingScenes { scene.world.hideIndependentSection(depot, Direction.NORTH); scene.idle(10); - scene.world.modifyBlock(basinPos, s -> s.with(BasinBlock.FACING, Direction.DOWN), false); + scene.world.modifyBlock(basinPos, s -> s.setValue(BasinBlock.FACING, Direction.DOWN), false); scene.idle(20); scene.overlay.showText(80) diff --git a/src/main/java/com/simibubi/create/foundation/ponder/content/PulleyScenes.java b/src/main/java/com/simibubi/create/foundation/ponder/content/PulleyScenes.java index b228d4f60..8cc9fff31 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/content/PulleyScenes.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/content/PulleyScenes.java @@ -123,7 +123,7 @@ public class PulleyScenes { scene.world.showSection(util.select.position(pulleyPos), Direction.SOUTH); ElementLink glass = - scene.world.showIndependentSection(util.select.position(pulleyPos.down()), Direction.UP); + scene.world.showIndependentSection(util.select.position(pulleyPos.below()), Direction.UP); scene.idle(20); scene.world.toggleRedstonePower(redstoneStuff); @@ -152,7 +152,7 @@ public class PulleyScenes { scene.world.hideSection(util.select.position(flowerPos), Direction.DOWN); scene.idle(40); - scene.world.setBlock(flowerPos, Blocks.BLUE_ORCHID.getDefaultState(), false); + scene.world.setBlock(flowerPos, Blocks.BLUE_ORCHID.defaultBlockState(), false); scene.world.showSection(util.select.position(flowerPos), Direction.DOWN); scene.overlay.showCenteredScrollInput(pulleyPos, Direction.UP, 60); scene.overlay.showControls(new InputWindowElement(util.vector.topOf(pulleyPos), Pointing.DOWN).scroll() diff --git a/src/main/java/com/simibubi/create/foundation/ponder/content/RedstoneScenes.java b/src/main/java/com/simibubi/create/foundation/ponder/content/RedstoneScenes.java index 617124dca..b77a3fc5b 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/content/RedstoneScenes.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/content/RedstoneScenes.java @@ -67,7 +67,7 @@ public class RedstoneScenes { scene.idle(70); scene.world.toggleRedstonePower(redstone); - scene.world.modifyBlock(stickerPos, s -> s.with(StickerBlock.EXTENDED, true), false); + scene.world.modifyBlock(stickerPos, s -> s.setValue(StickerBlock.EXTENDED, true), false); scene.effects.indicateRedstone(buttonPos); scene.world.modifyTileNBT(stickerSelect, StickerTileEntity.class, nbt -> { }); @@ -93,7 +93,7 @@ public class RedstoneScenes { scene.addKeyframe(); scene.world.toggleRedstonePower(redstone); - scene.world.modifyBlock(stickerPos, s -> s.with(StickerBlock.EXTENDED, false), false); + scene.world.modifyBlock(stickerPos, s -> s.setValue(StickerBlock.EXTENDED, false), false); scene.effects.indicateRedstone(buttonPos); scene.world.modifyTileNBT(stickerSelect, StickerTileEntity.class, nbt -> { }); @@ -402,8 +402,8 @@ public class RedstoneScenes { scene.idle(30); scene.world.toggleRedstonePower(util.select.fromTo(4, 1, 2, 3, 1, 2)); - AxisAlignedBB bb = new AxisAlignedBB(circuitPos).grow(-.48f, -.45f, -.05f) - .offset(.575, -.45, 0); + AxisAlignedBB bb = new AxisAlignedBB(circuitPos).inflate(-.48f, -.45f, -.05f) + .move(.575, -.45, 0); scene.overlay.chaseBoundingBoxOutline(PonderPalette.GREEN, bb, bb, 40); scene.overlay.showText(40) .colored(PonderPalette.GREEN) @@ -419,10 +419,10 @@ public class RedstoneScenes { scene.idle(30); scene.world.toggleRedstonePower(util.select.fromTo(2, 1, 0, 2, 1, 1)); - bb = new AxisAlignedBB(circuitPos).grow(-.05f, -.45f, -.48f) - .offset(0, -.45, .575); - AxisAlignedBB bb2 = new AxisAlignedBB(circuitPos).grow(-.05f, -.45f, -.48f) - .offset(0, -.45, -.575); + bb = new AxisAlignedBB(circuitPos).inflate(-.05f, -.45f, -.48f) + .move(0, -.45, .575); + AxisAlignedBB bb2 = new AxisAlignedBB(circuitPos).inflate(-.05f, -.45f, -.48f) + .move(0, -.45, -.575); scene.overlay.chaseBoundingBoxOutline(PonderPalette.RED, bb, bb, 40); scene.overlay.chaseBoundingBoxOutline(PonderPalette.RED, bb2, bb2, 40); scene.overlay.showText(40) @@ -482,8 +482,8 @@ public class RedstoneScenes { scene.idle(30); scene.world.toggleRedstonePower(util.select.fromTo(4, 1, 2, 3, 1, 2)); - AxisAlignedBB bb = new AxisAlignedBB(circuitPos).grow(-.48f, -.45f, -.05f) - .offset(.575, -.45, 0); + AxisAlignedBB bb = new AxisAlignedBB(circuitPos).inflate(-.48f, -.45f, -.05f) + .move(.575, -.45, 0); scene.overlay.chaseBoundingBoxOutline(PonderPalette.GREEN, bb, bb, 40); scene.overlay.showText(40) .colored(PonderPalette.GREEN) @@ -565,7 +565,7 @@ public class RedstoneScenes { scene.idle(2); final int state = i + 1; scene.world.modifyTileNBT(leverSelection, AnalogLeverTileEntity.class, nbt -> nbt.putInt("State", state)); - scene.world.modifyBlock(wireLocations[i], s -> s.with(power, 7 - state), false); + scene.world.modifyBlock(wireLocations[i], s -> s.setValue(power, 7 - state), false); scene.effects.indicateRedstone(wireLocations[i]); } scene.idle(20); @@ -588,9 +588,9 @@ public class RedstoneScenes { nbt -> nbt.putInt("State", state)); scene.effects.indicateRedstone(wireLocations[i]); } - scene.world.modifyBlock(wireLocations[i], s -> s.with(power, state > 2 ? 0 : 3 - state), false); + scene.world.modifyBlock(wireLocations[i], s -> s.setValue(power, state > 2 ? 0 : 3 - state), false); } - scene.world.modifyBlock(wireLocations[0], s -> s.with(power, 3), false); + scene.world.modifyBlock(wireLocations[0], s -> s.setValue(power, 3), false); scene.idle(20); scene.overlay.showText(60) @@ -610,7 +610,7 @@ public class RedstoneScenes { nbt -> nbt.putInt("State", state)); scene.effects.indicateRedstone(wireLocations[i]); } - scene.world.modifyBlock(wireLocations[i], s -> s.with(power, 15 - state), false); + scene.world.modifyBlock(wireLocations[i], s -> s.setValue(power, 15 - state), false); } scene.world.toggleRedstonePower(lamp); @@ -633,7 +633,7 @@ public class RedstoneScenes { scene.effects.indicateRedstone(util.grid.at(2, 1, 1)); scene.world.modifyTileNBT(util.select.position(2, 1, 1), AnalogLeverTileEntity.class, nbt -> nbt.putInt("State", 11)); - scene.world.modifyBlock(util.grid.at(2, 1, 2), s -> s.with(RedstoneWireBlock.POWER, 11), false); + scene.world.modifyBlock(util.grid.at(2, 1, 2), s -> s.setValue(RedstoneWireBlock.POWER, 11), false); scene.world.modifyTileNBT(tubes, NixieTubeTileEntity.class, nbt -> nbt.putInt("RedstoneStrength", 11)); scene.idle(20); @@ -689,7 +689,7 @@ public class RedstoneScenes { scene.idle(7); scene.world.setBlocks(util.select.fromTo(1, 1, 3, 3, 1, 3), AllBlocks.NIXIE_TUBES.get(DyeColor.BLUE) .getDefaultState() - .with(NixieTubeBlock.HORIZONTAL_FACING, Direction.NORTH), false); + .setValue(NixieTubeBlock.FACING, Direction.NORTH), false); scene.idle(10); scene.overlay.showText(80) .colored(PonderPalette.BLUE) @@ -809,30 +809,30 @@ public class RedstoneScenes { scene.idle(7); scene.overlay.showControls(new InputWindowElement(frontSlot, Pointing.UP).withItem(sapling), 40); scene.world.modifyTileNBT(link1Select, RedstoneLinkTileEntity.class, - nbt -> nbt.put("FrequencyLast", iron.write(new CompoundNBT()))); + nbt -> nbt.put("FrequencyLast", iron.save(new CompoundNBT()))); scene.idle(7); scene.world.modifyTileNBT(link1Select, RedstoneLinkTileEntity.class, - nbt -> nbt.put("FrequencyFirst", sapling.write(new CompoundNBT()))); + nbt -> nbt.put("FrequencyFirst", sapling.save(new CompoundNBT()))); scene.idle(20); scene.overlay.showControls(new InputWindowElement(top2Slot, Pointing.DOWN).withItem(iron), 40); scene.idle(7); scene.overlay.showControls(new InputWindowElement(bottom2Slot, Pointing.UP).withItem(sapling), 40); scene.world.modifyTileNBT(link2Select, RedstoneLinkTileEntity.class, - nbt -> nbt.put("FrequencyLast", iron.write(new CompoundNBT()))); + nbt -> nbt.put("FrequencyLast", iron.save(new CompoundNBT()))); scene.idle(7); scene.world.modifyTileNBT(link2Select, RedstoneLinkTileEntity.class, - nbt -> nbt.put("FrequencyFirst", sapling.write(new CompoundNBT()))); + nbt -> nbt.put("FrequencyFirst", sapling.save(new CompoundNBT()))); scene.idle(20); scene.overlay.showControls(new InputWindowElement(top3Slot, Pointing.DOWN).withItem(gold), 40); scene.idle(7); scene.overlay.showControls(new InputWindowElement(bottom3Slot, Pointing.UP).withItem(sapling), 40); scene.world.modifyTileNBT(link3Select, RedstoneLinkTileEntity.class, - nbt -> nbt.put("FrequencyLast", gold.write(new CompoundNBT()))); + nbt -> nbt.put("FrequencyLast", gold.save(new CompoundNBT()))); scene.idle(7); scene.world.modifyTileNBT(link3Select, RedstoneLinkTileEntity.class, - nbt -> nbt.put("FrequencyFirst", sapling.write(new CompoundNBT()))); + nbt -> nbt.put("FrequencyFirst", sapling.save(new CompoundNBT()))); scene.idle(20); scene.world.toggleRedstonePower(redstone); diff --git a/src/main/java/com/simibubi/create/foundation/ponder/content/TunnelScenes.java b/src/main/java/com/simibubi/create/foundation/ponder/content/TunnelScenes.java index 6c80f52b5..28874b1b0 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/content/TunnelScenes.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/content/TunnelScenes.java @@ -268,7 +268,7 @@ public class TunnelScenes { ItemStack item3 = new ItemStack(Items.SWEET_BERRIES); tunnelFilterVec = getTunnelFilterVec(tunnelPos, Direction.WEST); - BlockPos newTunnelPos = tunnelPos.up(2) + BlockPos newTunnelPos = tunnelPos.above(2) .south(); scene.overlay .showControls(new InputWindowElement(tunnelFilterVec.add(0, 0, -1), Pointing.RIGHT).withItem(item1), 20); @@ -313,7 +313,7 @@ public class TunnelScenes { scene.world.showSectionAndMerge(util.select.position(3, 5, 2), Direction.DOWN, newBelt); scene.overlay.showText(80) - .pointAt(util.vector.blockSurface(tunnelPos.up() + .pointAt(util.vector.blockSurface(tunnelPos.above() .north(), Direction.WEST)) .placeNearTarget() .text("For this, items can also be inserted into the Tunnel block directly"); @@ -339,14 +339,14 @@ public class TunnelScenes { protected static Vector3d getTunnelFilterVec(BlockPos pos, Direction d) { return VecHelper.getCenterOf(pos) - .add(Vector3d.of(d.getDirectionVec()).scale(.5)) + .add(Vector3d.atLowerCornerOf(d.getNormal()).scale(.5)) .add(0, 0.3, 0); } public static void brassModes(SceneBuilder scene, SceneBuildingUtil util) { scene.title("brass_tunnel_modes", "Distribution Modes of the Brass Tunnel"); scene.configureBasePlate(0, 1, 5); - BlockState barrier = Blocks.BARRIER.getDefaultState(); + BlockState barrier = Blocks.BARRIER.defaultBlockState(); scene.world.setBlock(util.grid.at(1, 1, 0), barrier, false); scene.world.showSection(util.select.layer(0), Direction.UP); scene.idle(5); @@ -419,7 +419,7 @@ public class TunnelScenes { .colored(PonderPalette.RED); scene.idle(60); scene.world.moveSection(blockage, util.vector.of(-1, 0, 0), 10); - scene.world.setBlock(util.grid.at(1, 1, 0), Blocks.AIR.getDefaultState(), false); + scene.world.setBlock(util.grid.at(1, 1, 0), Blocks.AIR.defaultBlockState(), false); scene.world.multiplyKineticSpeed(util.select.everywhere(), 1.5f); } @@ -466,7 +466,7 @@ public class TunnelScenes { .colored(PonderPalette.RED); scene.idle(30); scene.world.moveSection(blockage, util.vector.of(-1, 0, 0), 10); - scene.world.setBlock(util.grid.at(1, 1, 0), Blocks.AIR.getDefaultState(), false); + scene.world.setBlock(util.grid.at(1, 1, 0), Blocks.AIR.defaultBlockState(), false); } if (i == 19) { @@ -486,16 +486,16 @@ public class TunnelScenes { } if (i == 21) { - scene.world.setBlock(util.grid.at(2, 1, 0), Blocks.BARRIER.getDefaultState(), false); + scene.world.setBlock(util.grid.at(2, 1, 0), Blocks.BARRIER.defaultBlockState(), false); blockage2 = scene.world.showIndependentSection(util.select.position(4, 1, 0), Direction.UP); scene.world.moveSection(blockage2, util.vector.of(-2, 0, 0), 0); } if (i == 25) { scene.world.hideIndependentSection(blockage, Direction.DOWN); - scene.world.setBlock(util.grid.at(1, 1, 0), Blocks.AIR.getDefaultState(), false); + scene.world.setBlock(util.grid.at(1, 1, 0), Blocks.AIR.defaultBlockState(), false); scene.world.hideIndependentSection(blockage2, Direction.DOWN); - scene.world.setBlock(util.grid.at(2, 1, 0), Blocks.AIR.getDefaultState(), false); + scene.world.setBlock(util.grid.at(2, 1, 0), Blocks.AIR.defaultBlockState(), false); } if (i == 26) { diff --git a/src/main/java/com/simibubi/create/foundation/ponder/content/fluid/FluidMovementActorScenes.java b/src/main/java/com/simibubi/create/foundation/ponder/content/fluid/FluidMovementActorScenes.java index 05f81806a..a98b6e93c 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/content/fluid/FluidMovementActorScenes.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/content/fluid/FluidMovementActorScenes.java @@ -61,7 +61,7 @@ public class FluidMovementActorScenes { scene.world.rotateBearing(bearing, 360, 70); scene.world.rotateSection(contraption, 0, 360, 0, 70); scene.overlay.showText(60) - .pointAt(util.vector.topOf(bearing.up(2))) + .pointAt(util.vector.topOf(bearing.above(2))) .colored(PonderPalette.RED) .placeNearTarget() .attachKeyFrame() diff --git a/src/main/java/com/simibubi/create/foundation/ponder/content/fluid/FluidTankScenes.java b/src/main/java/com/simibubi/create/foundation/ponder/content/fluid/FluidTankScenes.java index 68605765d..10a6f4b9b 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/content/fluid/FluidTankScenes.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/content/fluid/FluidTankScenes.java @@ -82,7 +82,7 @@ public class FluidTankScenes { scene.world.hideIndependentSection(chocLink, Direction.DOWN); scene.idle(5); FluidStack content = new FluidStack(AllFluids.CHOCOLATE.get() - .getStillFluid(), 16000); + .getSource(), 16000); scene.world.modifyTileEntity(tankPos, FluidTankTileEntity.class, te -> te.getTankInventory() .fill(content, FluidAction.EXECUTE)); scene.idle(25); @@ -337,7 +337,7 @@ public class FluidTankScenes { .withWrench(), 60); scene.idle(7); - scene.world.modifyBlocks(full2, s -> s.with(FluidTankBlock.SHAPE, FluidTankBlock.Shape.PLAIN), false); + scene.world.modifyBlocks(full2, s -> s.setValue(FluidTankBlock.SHAPE, FluidTankBlock.Shape.PLAIN), false); scene.idle(30); scene.overlay.showText(60) diff --git a/src/main/java/com/simibubi/create/foundation/ponder/content/fluid/HosePulleyScenes.java b/src/main/java/com/simibubi/create/foundation/ponder/content/fluid/HosePulleyScenes.java index dc09e0e45..a8cacb2f6 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/content/fluid/HosePulleyScenes.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/content/fluid/HosePulleyScenes.java @@ -44,12 +44,12 @@ public class HosePulleyScenes { scene.world.moveSection(hoselink, util.vector.of(0, -1, 0), 0); scene.idle(10); - Vector3d shaftInput = util.vector.blockSurface(hosePos.down(), Direction.WEST); + Vector3d shaftInput = util.vector.blockSurface(hosePos.below(), Direction.WEST); scene.overlay.showText(70) .text("Hose Pulleys can be used to fill or drain large bodies of Fluid") .attachKeyFrame() .placeNearTarget() - .pointAt(util.vector.topOf(hosePos.down())); + .pointAt(util.vector.topOf(hosePos.below())); scene.idle(80); scene.overlay.showText(80) @@ -71,7 +71,7 @@ public class HosePulleyScenes { .text("The Pulley retracts while the input rotation is inverted") .attachKeyFrame() .placeNearTarget() - .pointAt(util.vector.centerOf(hosePos.down(3))); + .pointAt(util.vector.centerOf(hosePos.below(3))); scene.idle(30); scene.world.setKineticSpeed(kinetics, -32); @@ -85,7 +85,7 @@ public class HosePulleyScenes { .text("On the opposite side, pipes can be connected") .attachKeyFrame() .placeNearTarget() - .pointAt(util.vector.blockSurface(hosePos.down(), Direction.EAST)); + .pointAt(util.vector.blockSurface(hosePos.below(), Direction.EAST)); scene.idle(70); scene.rotateCameraY(-70); @@ -116,7 +116,7 @@ public class HosePulleyScenes { } for (BlockPos blockPos : blocks) { - scene.world.setBlock(blockPos, Blocks.WATER.getDefaultState(), false); + scene.world.setBlock(blockPos, Blocks.WATER.defaultBlockState(), false); scene.idle(3); } @@ -176,7 +176,7 @@ public class HosePulleyScenes { } for (BlockPos blockPos : blocks) - scene.world.setBlock(blockPos, Blocks.WATER.getDefaultState(), false); + scene.world.setBlock(blockPos, Blocks.WATER.defaultBlockState(), false); scene.idle(5); Selection water = util.select.fromTo(2, 1, 0, 0, 4, 2); @@ -197,12 +197,12 @@ public class HosePulleyScenes { scene.world.showSectionAndMerge(crank, Direction.EAST, hoselink); scene.idle(20); - scene.overlay.showSelectionWithText(util.select.position(hosePos.down()), 50) + scene.overlay.showSelectionWithText(util.select.position(hosePos.below()), 50) .text("While fully retracted, the Hose Pulley cannot operate") .placeNearTarget() .colored(PonderPalette.RED) .attachKeyFrame() - .pointAt(util.vector.blockSurface(hosePos.down(), Direction.UP)); + .pointAt(util.vector.blockSurface(hosePos.below(), Direction.UP)); scene.idle(55); Selection kinetics = util.select.fromTo(1, 6, 1, 0, 6, 1); @@ -214,7 +214,7 @@ public class HosePulleyScenes { .text("Draining runs from top to bottom") .attachKeyFrame() .placeNearTarget() - .pointAt(util.vector.centerOf(hosePos.down(3))); + .pointAt(util.vector.centerOf(hosePos.below(3))); scene.idle(10); scene.world.showSectionAndMerge(cogs, Direction.NORTH, hoselink); @@ -228,10 +228,10 @@ public class HosePulleyScenes { Vector3d surface = util.vector.topOf(1, 3, 1) .subtract(0, 2 / 8f, 0); - AxisAlignedBB bb = new AxisAlignedBB(surface, surface).grow(1.5, 0, 1.5); + AxisAlignedBB bb = new AxisAlignedBB(surface, surface).inflate(1.5, 0, 1.5); scene.overlay.chaseBoundingBoxOutline(PonderPalette.MEDIUM, bb, bb, 3); scene.idle(3); - scene.overlay.chaseBoundingBoxOutline(PonderPalette.MEDIUM, bb, bb.expand(0, -2, 0), 70); + scene.overlay.chaseBoundingBoxOutline(PonderPalette.MEDIUM, bb, bb.expandTowards(0, -2, 0), 70); scene.idle(20); Collections.reverse(blocks); @@ -243,7 +243,7 @@ public class HosePulleyScenes { scene.idle(3); } - scene.overlay.chaseBoundingBoxOutline(PonderPalette.WHITE, bb, bb.offset(0, -2, 0), 60); + scene.overlay.chaseBoundingBoxOutline(PonderPalette.WHITE, bb, bb.move(0, -2, 0), 60); scene.overlay.showText(60) .text("The surface level will end up just below where the hose ends") .attachKeyFrame() @@ -269,22 +269,22 @@ public class HosePulleyScenes { .text("Filling runs from bottom to top") .attachKeyFrame() .placeNearTarget() - .pointAt(util.vector.centerOf(hosePos.down(3))); + .pointAt(util.vector.centerOf(hosePos.below(3))); scene.idle(10); - scene.overlay.chaseBoundingBoxOutline(PonderPalette.MEDIUM, bb, bb.offset(0, -3 + 2 / 8f, 0), 3); + scene.overlay.chaseBoundingBoxOutline(PonderPalette.MEDIUM, bb, bb.move(0, -3 + 2 / 8f, 0), 3); scene.idle(3); - scene.overlay.chaseBoundingBoxOutline(PonderPalette.MEDIUM, bb, bb.expand(0, -3 + 2 / 8f, 0), 120); + scene.overlay.chaseBoundingBoxOutline(PonderPalette.MEDIUM, bb, bb.expandTowards(0, -3 + 2 / 8f, 0), 120); scene.idle(20); - scene.world.setBlock(util.grid.at(1, 3, 1), Blocks.WATER.getDefaultState(), false); + scene.world.setBlock(util.grid.at(1, 3, 1), Blocks.WATER.defaultBlockState(), false); scene.idle(3); - scene.world.setBlock(util.grid.at(1, 2, 1), Blocks.WATER.getDefaultState(), false); + scene.world.setBlock(util.grid.at(1, 2, 1), Blocks.WATER.defaultBlockState(), false); scene.idle(3); Collections.reverse(blocks); for (BlockPos blockPos : blocks) { - scene.world.setBlock(blockPos, Blocks.WATER.getDefaultState(), false); + scene.world.setBlock(blockPos, Blocks.WATER.defaultBlockState(), false); scene.idle(3); } diff --git a/src/main/java/com/simibubi/create/foundation/ponder/content/fluid/PipeScenes.java b/src/main/java/com/simibubi/create/foundation/ponder/content/fluid/PipeScenes.java index 3dbbcca81..adc80a419 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/content/fluid/PipeScenes.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/content/fluid/PipeScenes.java @@ -48,13 +48,13 @@ public class PipeScenes { scene.idle(5); BlockState pipeState = AllBlocks.FLUID_PIPE.getDefaultState() - .with(FluidPipeBlock.UP, false) - .with(FluidPipeBlock.DOWN, false); + .setValue(FluidPipeBlock.UP, false) + .setValue(FluidPipeBlock.DOWN, false); - scene.world.setBlock(util.grid.at(2, 1, 1), pipeState.with(FluidPipeBlock.NORTH, false) - .with(FluidPipeBlock.SOUTH, false), false); - scene.world.setBlock(util.grid.at(1, 1, 2), pipeState.with(FluidPipeBlock.WEST, false) - .with(FluidPipeBlock.EAST, false), false); + scene.world.setBlock(util.grid.at(2, 1, 1), pipeState.setValue(FluidPipeBlock.NORTH, false) + .setValue(FluidPipeBlock.SOUTH, false), false); + scene.world.setBlock(util.grid.at(1, 1, 2), pipeState.setValue(FluidPipeBlock.WEST, false) + .setValue(FluidPipeBlock.EAST, false), false); Selection largeCog = util.select.position(5, 0, 1); Selection kinetics = util.select.fromTo(5, 1, 0, 3, 1, 0); @@ -108,9 +108,9 @@ public class PipeScenes { scene.idle(40); Vector3d center = util.vector.centerOf(2, 1, 2); - AxisAlignedBB bb = new AxisAlignedBB(center, center).grow(1 / 6f); - AxisAlignedBB bb1 = bb.offset(-0.5, 0, 0); - AxisAlignedBB bb2 = bb.offset(0, 0, -0.5); + AxisAlignedBB bb = new AxisAlignedBB(center, center).inflate(1 / 6f); + AxisAlignedBB bb1 = bb.move(-0.5, 0, 0); + AxisAlignedBB bb2 = bb.move(0, 0, -0.5); scene.world.showSection(strayPipes, Direction.DOWN); scene.idle(10); @@ -132,7 +132,7 @@ public class PipeScenes { BlockPos pumpPos = util.grid.at(3, 1, 1); scene.world.setBlock(pumpPos, AllBlocks.MECHANICAL_PUMP.getDefaultState() - .with(PumpBlock.FACING, Direction.WEST), true); + .setValue(PumpBlock.FACING, Direction.WEST), true); scene.idle(10); scene.world.showSection(largeCog, Direction.UP); scene.world.showSection(kinetics, Direction.SOUTH); @@ -243,21 +243,21 @@ public class PipeScenes { scene.idle(5); scene.world.hideSection(tank, Direction.EAST); scene.idle(5); - scene.world.setBlock(drainPos, Blocks.AIR.getDefaultState(), false); + scene.world.setBlock(drainPos, Blocks.AIR.defaultBlockState(), false); scene.world.propagatePipeChange(pumpPos); scene.world.hideSection(basin, Direction.NORTH); scene.idle(5); - scene.world.setBlock(util.grid.at(3, 1, 1), Blocks.AIR.getDefaultState(), false); + scene.world.setBlock(util.grid.at(3, 1, 1), Blocks.AIR.defaultBlockState(), false); scene.idle(5); scene.world.setBlock(util.grid.at(3, 1, 3), AllBlocks.GLASS_FLUID_PIPE.getDefaultState() - .with(AxisPipeBlock.AXIS, Axis.Z), false); + .setValue(AxisPipeBlock.AXIS, Axis.Z), false); scene.idle(10); scene.world.multiplyKineticSpeed(util.select.everywhere(), 2); scene.world.propagatePipeChange(pumpPos); ElementLink water = scene.world.showIndependentSection(waterSourceS, Direction.DOWN); scene.world.moveSection(water, util.vector.of(0, 0, 1), 0); scene.idle(10); - scene.world.setBlock(drainPos, Blocks.WATER.getDefaultState(), false); + scene.world.setBlock(drainPos, Blocks.WATER.defaultBlockState(), false); scene.idle(20); scene.overlay.showText(60) @@ -267,7 +267,7 @@ public class PipeScenes { .pointAt(util.vector.blockSurface(drainPos, Direction.SOUTH)); scene.idle(40); - scene.world.setBlock(drainPos.north(), Blocks.AIR.getDefaultState(), false); + scene.world.setBlock(drainPos.north(), Blocks.AIR.defaultBlockState(), false); scene.idle(40); ElementLink target = scene.world.showIndependentSection(waterTargetS, Direction.UP); scene.world.moveSection(target, util.vector.of(-1, 0, 0), 0); @@ -283,8 +283,8 @@ public class PipeScenes { scene.idle(80); scene.world.hideIndependentSection(target, Direction.DOWN); scene.idle(5); - scene.world.setBlock(drainPos, Blocks.BEE_NEST.getDefaultState() - .with(BeehiveBlock.HONEY_LEVEL, 5), false); + scene.world.setBlock(drainPos, Blocks.BEE_NEST.defaultBlockState() + .setValue(BeehiveBlock.HONEY_LEVEL, 5), false); scene.world.showSection(drain, Direction.DOWN); scene.world.setBlock(util.grid.at(3, 1, 2), AllBlocks.FLUID_TANK.getDefaultState(), false); scene.world.propagatePipeChange(pumpPos); @@ -297,8 +297,8 @@ public class PipeScenes { .pointAt(util.vector.topOf(drainPos)); scene.idle(60); - scene.world.setBlock(drainPos, Blocks.BEE_NEST.getDefaultState() - .with(BeehiveBlock.HONEY_LEVEL, 0), false); + scene.world.setBlock(drainPos, Blocks.BEE_NEST.defaultBlockState() + .setValue(BeehiveBlock.HONEY_LEVEL, 0), false); } public static void encasing(SceneBuilder scene, SceneBuildingUtil util) { @@ -312,8 +312,8 @@ public class PipeScenes { scene.idle(15); BlockState copperEncased = AllBlocks.ENCASED_FLUID_PIPE.getDefaultState() - .with(FluidPipeBlock.SOUTH, true) - .with(FluidPipeBlock.WEST, true); + .setValue(FluidPipeBlock.SOUTH, true) + .setValue(FluidPipeBlock.WEST, true); ItemStack casingItem = AllBlocks.COPPER_CASING.asStack(); scene.overlay.showControls(new InputWindowElement(util.vector.topOf(3, 1, 1), Pointing.DOWN).rightClick() @@ -330,8 +330,8 @@ public class PipeScenes { scene.idle(70); scene.world.destroyBlock(util.grid.at(2, 1, 1)); - scene.world.modifyBlock(util.grid.at(1, 1, 1), s -> s.with(FluidPipeBlock.EAST, false) - .with(FluidPipeBlock.NORTH, true), false); + scene.world.modifyBlock(util.grid.at(1, 1, 1), s -> s.setValue(FluidPipeBlock.EAST, false) + .setValue(FluidPipeBlock.NORTH, true), false); scene.idle(5); scene.overlay.showLine(PonderPalette.RED, util.vector.of(1.5, 1.75, 1), util.vector.of(1.5, 1.75, 2), 80); @@ -348,17 +348,17 @@ public class PipeScenes { scene.idle(70); BlockState defaultState = AllBlocks.FLUID_PIPE.getDefaultState(); - for (BooleanProperty booleanProperty : FluidPipeBlock.FACING_TO_PROPERTY_MAP.values()) - defaultState = defaultState.with(booleanProperty, false); + for (BooleanProperty booleanProperty : FluidPipeBlock.PROPERTY_BY_DIRECTION.values()) + defaultState = defaultState.setValue(booleanProperty, false); - scene.world.setBlock(util.grid.at(3, 2, 1), defaultState.with(FluidPipeBlock.EAST, true) - .with(FluidPipeBlock.WEST, true), false); - scene.world.setBlock(util.grid.at(1, 2, 1), defaultState.with(FluidPipeBlock.UP, true) - .with(FluidPipeBlock.DOWN, true), false); + scene.world.setBlock(util.grid.at(3, 2, 1), defaultState.setValue(FluidPipeBlock.EAST, true) + .setValue(FluidPipeBlock.WEST, true), false); + scene.world.setBlock(util.grid.at(1, 2, 1), defaultState.setValue(FluidPipeBlock.UP, true) + .setValue(FluidPipeBlock.DOWN, true), false); scene.world.showSection(util.select.layer(2), Direction.DOWN); scene.idle(10); - scene.world.modifyBlock(util.grid.at(1, 1, 1), s -> s.with(FluidPipeBlock.UP, true) - .with(FluidPipeBlock.NORTH, false), false); + scene.world.modifyBlock(util.grid.at(1, 1, 1), s -> s.setValue(FluidPipeBlock.UP, true) + .setValue(FluidPipeBlock.NORTH, false), false); scene.idle(20); scene.overlay.showText(60) @@ -389,9 +389,9 @@ public class PipeScenes { scene.world.propagatePipeChange(pumpPos); scene.world.setBlock(valvePos, AllBlocks.FLUID_PIPE.get() .getAxisState(Axis.X), false); - scene.world.setBlock(util.grid.at(3, 1, 1), Blocks.AIR.getDefaultState(), false); + scene.world.setBlock(util.grid.at(3, 1, 1), Blocks.AIR.defaultBlockState(), false); scene.world.setBlock(util.grid.at(3, 1, 1), AllBlocks.GLASS_FLUID_PIPE.getDefaultState() - .with(GlassFluidPipeBlock.AXIS, Axis.X), false); + .setValue(GlassFluidPipeBlock.AXIS, Axis.X), false); scene.idle(5); scene.world.showSection(tank1, Direction.NORTH); @@ -434,7 +434,7 @@ public class PipeScenes { scene.effects.rotationSpeedIndicator(handlePos); scene.world.modifyTileEntity(valvePos, FluidValveTileEntity.class, te -> te.onSpeedChanged(0)); scene.idle(22); - scene.world.modifyBlock(valvePos, s -> s.with(FluidValveBlock.ENABLED, true), false); + scene.world.modifyBlock(valvePos, s -> s.setValue(FluidValveBlock.ENABLED, true), false); scene.effects.indicateSuccess(valvePos); scene.idle(5); scene.world.setKineticSpeed(valveKinetics, 0); @@ -457,7 +457,7 @@ public class PipeScenes { scene.effects.rotationSpeedIndicator(handlePos); scene.world.modifyTileEntity(valvePos, FluidValveTileEntity.class, te -> te.onSpeedChanged(0)); scene.idle(22); - scene.world.modifyBlock(valvePos, s -> s.with(FluidValveBlock.ENABLED, false), false); + scene.world.modifyBlock(valvePos, s -> s.setValue(FluidValveBlock.ENABLED, false), false); scene.effects.indicateRedstone(valvePos); scene.world.propagatePipeChange(pumpPos); scene.idle(5); @@ -487,11 +487,11 @@ public class PipeScenes { scene.world.setBlock(smartPos, AllBlocks.FLUID_PIPE.get() .getAxisState(Axis.X), false); scene.world.setBlock(util.grid.at(2, 1, 3), AllBlocks.GLASS_FLUID_PIPE.getDefaultState() - .with(GlassFluidPipeBlock.AXIS, Axis.X), false); + .setValue(GlassFluidPipeBlock.AXIS, Axis.X), false); scene.world.setBlock(util.grid.at(1, 1, 3), AllBlocks.FLUID_PIPE.get() .getAxisState(Axis.X) - .with(FluidPipeBlock.NORTH, true) - .with(FluidPipeBlock.WEST, false), false); + .setValue(FluidPipeBlock.NORTH, true) + .setValue(FluidPipeBlock.WEST, false), false); scene.world.showSection(basin, Direction.DOWN); scene.idle(5); diff --git a/src/main/java/com/simibubi/create/foundation/ponder/content/fluid/PumpScenes.java b/src/main/java/com/simibubi/create/foundation/ponder/content/fluid/PumpScenes.java index bc1c1bca0..6c1a89f4f 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/content/fluid/PumpScenes.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/content/fluid/PumpScenes.java @@ -82,17 +82,17 @@ public class PumpScenes { .pointAt(util.vector.topOf(pumpPos) .subtract(0.5f, 0.125f, 0)); - AxisAlignedBB bb1 = new AxisAlignedBB(Vector3d.ZERO, Vector3d.ZERO).grow(.25, .25, 0) - .offset(0, 0, .25); - AxisAlignedBB bb2 = new AxisAlignedBB(Vector3d.ZERO, Vector3d.ZERO).grow(.25, .25, 1.25); + AxisAlignedBB bb1 = new AxisAlignedBB(Vector3d.ZERO, Vector3d.ZERO).inflate(.25, .25, 0) + .move(0, 0, .25); + AxisAlignedBB bb2 = new AxisAlignedBB(Vector3d.ZERO, Vector3d.ZERO).inflate(.25, .25, 1.25); scene.idle(65); Object in = new Object(); Object out = new Object(); - scene.overlay.chaseBoundingBoxOutline(PonderPalette.INPUT, in, bb1.offset(util.vector.centerOf(3, 1, 3)), 3); + scene.overlay.chaseBoundingBoxOutline(PonderPalette.INPUT, in, bb1.move(util.vector.centerOf(3, 1, 3)), 3); scene.idle(2); - scene.overlay.chaseBoundingBoxOutline(PonderPalette.INPUT, in, bb2.offset(util.vector.centerOf(3, 1, 2)), 50); + scene.overlay.chaseBoundingBoxOutline(PonderPalette.INPUT, in, bb2.move(util.vector.centerOf(3, 1, 2)), 50); scene.idle(10); scene.overlay.showText(50) @@ -104,10 +104,10 @@ public class PumpScenes { scene.idle(60); - scene.overlay.chaseBoundingBoxOutline(PonderPalette.OUTPUT, out, bb1.offset(util.vector.centerOf(1, 1, 1) + scene.overlay.chaseBoundingBoxOutline(PonderPalette.OUTPUT, out, bb1.move(util.vector.centerOf(1, 1, 1) .add(0, 0, -.5)), 3); scene.idle(2); - scene.overlay.chaseBoundingBoxOutline(PonderPalette.OUTPUT, out, bb2.offset(util.vector.centerOf(1, 1, 2)), 50); + scene.overlay.chaseBoundingBoxOutline(PonderPalette.OUTPUT, out, bb2.move(util.vector.centerOf(1, 1, 2)), 50); scene.idle(10); scene.overlay.showText(50) @@ -132,20 +132,20 @@ public class PumpScenes { .subtract(0.5f, 0.125f, 0)); scene.idle(25); - scene.overlay.chaseBoundingBoxOutline(PonderPalette.INPUT, in, bb1.offset(util.vector.centerOf(1, 1, 3)), 3); + scene.overlay.chaseBoundingBoxOutline(PonderPalette.INPUT, in, bb1.move(util.vector.centerOf(1, 1, 3)), 3); scene.idle(2); - scene.overlay.chaseBoundingBoxOutline(PonderPalette.INPUT, in, bb2.offset(util.vector.centerOf(1, 1, 2)), 30); + scene.overlay.chaseBoundingBoxOutline(PonderPalette.INPUT, in, bb2.move(util.vector.centerOf(1, 1, 2)), 30); scene.idle(15); - scene.overlay.chaseBoundingBoxOutline(PonderPalette.OUTPUT, out, bb1.offset(util.vector.centerOf(3, 1, 1) + scene.overlay.chaseBoundingBoxOutline(PonderPalette.OUTPUT, out, bb1.move(util.vector.centerOf(3, 1, 1) .add(0, 0, -.5)), 3); scene.idle(2); - scene.overlay.chaseBoundingBoxOutline(PonderPalette.OUTPUT, out, bb2.offset(util.vector.centerOf(3, 1, 2)), 30); + scene.overlay.chaseBoundingBoxOutline(PonderPalette.OUTPUT, out, bb2.move(util.vector.centerOf(3, 1, 2)), 30); scene.idle(55); scene.overlay.showControls(new InputWindowElement(util.vector.topOf(pumpPos), Pointing.DOWN).rightClick() .withWrench(), 40); scene.idle(7); - scene.world.modifyBlock(pumpPos, s -> s.with(PumpBlock.FACING, Direction.EAST), true); + scene.world.modifyBlock(pumpPos, s -> s.setValue(PumpBlock.FACING, Direction.EAST), true); scene.overlay.showText(70) .attachKeyFrame() .pointAt(util.vector.centerOf(2, 1, 1)) @@ -154,14 +154,14 @@ public class PumpScenes { scene.world.propagatePipeChange(pumpPos); scene.idle(40); - scene.overlay.chaseBoundingBoxOutline(PonderPalette.INPUT, in, bb1.offset(util.vector.centerOf(3, 1, 3)), 3); + scene.overlay.chaseBoundingBoxOutline(PonderPalette.INPUT, in, bb1.move(util.vector.centerOf(3, 1, 3)), 3); scene.idle(2); - scene.overlay.chaseBoundingBoxOutline(PonderPalette.INPUT, in, bb2.offset(util.vector.centerOf(3, 1, 2)), 30); + scene.overlay.chaseBoundingBoxOutline(PonderPalette.INPUT, in, bb2.move(util.vector.centerOf(3, 1, 2)), 30); scene.idle(15); - scene.overlay.chaseBoundingBoxOutline(PonderPalette.OUTPUT, out, bb1.offset(util.vector.centerOf(1, 1, 1) + scene.overlay.chaseBoundingBoxOutline(PonderPalette.OUTPUT, out, bb1.move(util.vector.centerOf(1, 1, 1) .add(0, 0, -.5)), 3); scene.idle(2); - scene.overlay.chaseBoundingBoxOutline(PonderPalette.OUTPUT, out, bb2.offset(util.vector.centerOf(1, 1, 2)), 30); + scene.overlay.chaseBoundingBoxOutline(PonderPalette.OUTPUT, out, bb2.move(util.vector.centerOf(1, 1, 2)), 30); scene.idle(25); } @@ -187,12 +187,12 @@ public class PumpScenes { .drain(3000, FluidAction.EXECUTE)); BlockPos east = pumpPos.east(); - scene.world.setBlock(east, Blocks.AIR.getDefaultState(), false); + scene.world.setBlock(east, Blocks.AIR.defaultBlockState(), false); scene.world.setBlock(east, AllBlocks.GLASS_FLUID_PIPE.getDefaultState() - .with(GlassFluidPipeBlock.AXIS, Axis.X), false); + .setValue(GlassFluidPipeBlock.AXIS, Axis.X), false); scene.world.setBlock(pumpPos.south(), AllBlocks.COGWHEEL.getDefaultState() - .with(CogWheelBlock.AXIS, Axis.X), false); + .setValue(CogWheelBlock.AXIS, Axis.X), false); Selection southPump = util.select.position(pumpPos.south()); scene.world.setKineticSpeed(southPump, 32); @@ -255,34 +255,34 @@ public class PumpScenes { scene.idle(60); BlockState pipeState = AllBlocks.FLUID_PIPE.getDefaultState() - .with(FluidPipeBlock.DOWN, false) - .with(FluidPipeBlock.UP, false); + .setValue(FluidPipeBlock.DOWN, false) + .setValue(FluidPipeBlock.UP, false); scene.world.setKineticSpeed(util.select.everywhere(), 0); scene.idle(10); scene.world.setBlock(east, pipeState, true); scene.world.setBlock(west, pipeState, true); - scene.world.setBlock(east.north(), pipeState.with(FluidPipeBlock.NORTH, false) - .with(FluidPipeBlock.EAST, false), false); - scene.world.setBlock(east.south(), pipeState.with(FluidPipeBlock.SOUTH, false) - .with(FluidPipeBlock.EAST, false), false); + scene.world.setBlock(east.north(), pipeState.setValue(FluidPipeBlock.NORTH, false) + .setValue(FluidPipeBlock.EAST, false), false); + scene.world.setBlock(east.south(), pipeState.setValue(FluidPipeBlock.SOUTH, false) + .setValue(FluidPipeBlock.EAST, false), false); scene.world.showSection(util.select.position(east.north()), Direction.DOWN); scene.world.showSection(util.select.position(east.south()), Direction.DOWN); Selection northPump = util.select.position(pumpPos.north()); - scene.world.setBlock(west.north(), pipeState.with(FluidPipeBlock.NORTH, false) - .with(FluidPipeBlock.WEST, false), false); - scene.world.setBlock(west.south(), pipeState.with(FluidPipeBlock.SOUTH, false) - .with(FluidPipeBlock.WEST, false), false); + scene.world.setBlock(west.north(), pipeState.setValue(FluidPipeBlock.NORTH, false) + .setValue(FluidPipeBlock.WEST, false), false); + scene.world.setBlock(west.south(), pipeState.setValue(FluidPipeBlock.SOUTH, false) + .setValue(FluidPipeBlock.WEST, false), false); scene.world.showSection(util.select.position(west.north()), Direction.DOWN); scene.world.showSection(util.select.position(west.south()), Direction.DOWN); scene.world.restoreBlocks(southPump); - scene.world.modifyBlock(pumpPos.south(), s -> s.with(PumpBlock.FACING, Direction.EAST), false); + scene.world.modifyBlock(pumpPos.south(), s -> s.setValue(PumpBlock.FACING, Direction.EAST), false); scene.world.setKineticSpeed(util.select.everywhere(), 0); scene.world.showSection(northPump, Direction.DOWN); - scene.world.modifyBlock(pumpPos.north(), s -> s.with(PumpBlock.FACING, Direction.EAST), false); + scene.world.modifyBlock(pumpPos.north(), s -> s.setValue(PumpBlock.FACING, Direction.EAST), false); scene.idle(4); scene.world.setKineticSpeed(util.select.everywhere(), -16); @@ -303,13 +303,13 @@ public class PumpScenes { .showControls(new InputWindowElement(util.vector.topOf(pumpPos.south()), Pointing.DOWN).rightClick() .withWrench(), 30); scene.idle(7); - scene.world.modifyBlock(pumpPos.south(), s -> s.with(PumpBlock.FACING, Direction.WEST), true); + scene.world.modifyBlock(pumpPos.south(), s -> s.setValue(PumpBlock.FACING, Direction.WEST), true); scene.idle(30); scene.overlay .showControls(new InputWindowElement(util.vector.topOf(pumpPos.north()), Pointing.DOWN).rightClick() .withWrench(), 30); scene.idle(7); - scene.world.modifyBlock(pumpPos.north(), s -> s.with(PumpBlock.FACING, Direction.WEST), true); + scene.world.modifyBlock(pumpPos.north(), s -> s.setValue(PumpBlock.FACING, Direction.WEST), true); scene.idle(30); scene.overlay.showText(70) diff --git a/src/main/java/com/simibubi/create/foundation/ponder/content/fluid/SpoutScenes.java b/src/main/java/com/simibubi/create/foundation/ponder/content/fluid/SpoutScenes.java index 6a7f9cd1e..e28dbe06d 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/content/fluid/SpoutScenes.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/content/fluid/SpoutScenes.java @@ -151,8 +151,8 @@ public class SpoutScenes { .add(0, 1 / 16f, 0), Emitter.simple(fluidParticle, VecHelper.offsetRandomly(Vector3d.ZERO, Create.RANDOM, .1f)), 1, 1); } - scene.world.removeItemsFromBelt(spoutPos.down(2)); - ingot = scene.world.createItemOnBelt(spoutPos.down(2), Direction.UP, potion); + scene.world.removeItemsFromBelt(spoutPos.below(2)); + ingot = scene.world.createItemOnBelt(spoutPos.below(2), Direction.UP, potion); scene.world.stallBeltItem(ingot, true); scene.idle(5); scene.world.stallBeltItem(ingot, false); @@ -165,8 +165,8 @@ public class SpoutScenes { .add(0, 1 / 16f, 0), Emitter.simple(fluidParticle, VecHelper.offsetRandomly(Vector3d.ZERO, Create.RANDOM, .1f)), 1, 1); } - scene.world.removeItemsFromBelt(spoutPos.down(2)); - ingot2 = scene.world.createItemOnBelt(spoutPos.down(2), Direction.UP, potion); + scene.world.removeItemsFromBelt(spoutPos.below(2)); + ingot2 = scene.world.createItemOnBelt(spoutPos.below(2), Direction.UP, potion); scene.world.stallBeltItem(ingot2, true); scene.idle(5); scene.world.stallBeltItem(ingot2, false); diff --git a/src/main/java/com/simibubi/create/foundation/ponder/elements/AnimatedSceneElement.java b/src/main/java/com/simibubi/create/foundation/ponder/elements/AnimatedSceneElement.java index d4c619e61..985685916 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/elements/AnimatedSceneElement.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/elements/AnimatedSceneElement.java @@ -34,27 +34,27 @@ public abstract class AnimatedSceneElement extends PonderSceneElement { @Override public final void renderFirst(PonderWorld world, IRenderTypeBuffer buffer, MatrixStack ms, float pt) { - ms.push(); + ms.pushPose(); float currentFade = applyFade(ms, pt); renderFirst(world, buffer, ms, currentFade, pt); - ms.pop(); + ms.popPose(); } @Override public final void renderLayer(PonderWorld world, IRenderTypeBuffer buffer, RenderType type, MatrixStack ms, float pt) { - ms.push(); + ms.pushPose(); float currentFade = applyFade(ms, pt); renderLayer(world, buffer, type, ms, currentFade, pt); - ms.pop(); + ms.popPose(); } @Override public final void renderLast(PonderWorld world, IRenderTypeBuffer buffer, MatrixStack ms, float pt) { - ms.push(); + ms.pushPose(); float currentFade = applyFade(ms, pt); renderLast(world, buffer, ms, currentFade, pt); - ms.pop(); + ms.popPose(); } protected float applyFade(MatrixStack ms, float pt) { diff --git a/src/main/java/com/simibubi/create/foundation/ponder/elements/InputWindowElement.java b/src/main/java/com/simibubi/create/foundation/ponder/elements/InputWindowElement.java index f87c70c28..b7e2b9e10 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/elements/InputWindowElement.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/elements/InputWindowElement.java @@ -106,7 +106,7 @@ public class InputWindowElement extends AnimatedOverlayElement { } if (hasText) { - keyWidth = font.getStringWidth(text); + keyWidth = font.width(text); width += keyWidth; } @@ -115,7 +115,7 @@ public class InputWindowElement extends AnimatedOverlayElement { height = 24; } - ms.push(); + ms.pushPose(); ms.translate(sceneToScreen.x + xFade, sceneToScreen.y + yFade, 400); PonderUI.renderSpeechBox(ms, 0, 0, width, height, false, direction, true); @@ -123,15 +123,15 @@ public class InputWindowElement extends AnimatedOverlayElement { ms.translate(0, 0, 100); if (hasText) - font.draw(ms, text, 2, (height - font.FONT_HEIGHT) / 2f + 2, + font.draw(ms, text, 2, (height - font.lineHeight) / 2f + 2, ColorHelper.applyAlpha(PonderPalette.WHITE.getColor(), fade)); if (hasIcon) { - ms.push(); + ms.pushPose(); ms.translate(keyWidth, 0, 0); ms.scale(1.5f, 1.5f, 1.5f); icon.draw(ms, screen, 0, 0); - ms.pop(); + ms.popPose(); } if (hasItem) { @@ -142,7 +142,7 @@ public class InputWindowElement extends AnimatedOverlayElement { RenderSystem.disableDepthTest(); } - ms.pop(); + ms.popPose(); } } diff --git a/src/main/java/com/simibubi/create/foundation/ponder/elements/MinecartElement.java b/src/main/java/com/simibubi/create/foundation/ponder/elements/MinecartElement.java index 93c0be467..462686f94 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/elements/MinecartElement.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/elements/MinecartElement.java @@ -37,13 +37,13 @@ public class MinecartElement extends AnimatedSceneElement { @Override public void reset(PonderScene scene) { super.reset(scene); - entity.setPos(0, 0, 0); - entity.prevPosX = 0; - entity.prevPosY = 0; - entity.prevPosZ = 0; - entity.lastTickPosX = 0; - entity.lastTickPosY = 0; - entity.lastTickPosZ = 0; + entity.setPosRaw(0, 0, 0); + entity.xo = 0; + entity.yo = 0; + entity.zo = 0; + entity.xOld = 0; + entity.yOld = 0; + entity.zOld = 0; rotation.startWithValue(initialRotation); } @@ -53,25 +53,25 @@ public class MinecartElement extends AnimatedSceneElement { if (entity == null) entity = constructor.create(scene.getWorld(), 0, 0, 0); - entity.ticksExisted++; + entity.tickCount++; entity.onGround = true; - entity.prevPosX = entity.getX(); - entity.prevPosY = entity.getY(); - entity.prevPosZ = entity.getZ(); - entity.lastTickPosX = entity.getX(); - entity.lastTickPosY = entity.getY(); - entity.lastTickPosZ = entity.getZ(); + entity.xo = entity.getX(); + entity.yo = entity.getY(); + entity.zo = entity.getZ(); + entity.xOld = entity.getX(); + entity.yOld = entity.getY(); + entity.zOld = entity.getZ(); } public void setPositionOffset(Vector3d position, boolean immediate) { if (entity == null) return; - entity.setPosition(position.x, position.y, position.z); + entity.setPos(position.x, position.y, position.z); if (!immediate) return; - entity.prevPosX = position.x; - entity.prevPosY = position.y; - entity.prevPosZ = position.z; + entity.xo = position.x; + entity.yo = position.y; + entity.zo = position.z; } public void setRotation(float angle, boolean immediate) { @@ -84,7 +84,7 @@ public class MinecartElement extends AnimatedSceneElement { } public Vector3d getPositionOffset() { - return entity != null ? entity.getPositionVec() : Vector3d.ZERO; + return entity != null ? entity.position() : Vector3d.ZERO; } public Vector3d getRotation() { @@ -94,20 +94,20 @@ public class MinecartElement extends AnimatedSceneElement { @Override protected void renderLast(PonderWorld world, IRenderTypeBuffer buffer, MatrixStack ms, float fade, float pt) { EntityRendererManager entityrenderermanager = Minecraft.getInstance() - .getRenderManager(); + .getEntityRenderDispatcher(); if (entity == null) entity = constructor.create(world, 0, 0, 0); - ms.push(); + ms.pushPose(); ms.translate(location.x, location.y, location.z); - ms.translate(MathHelper.lerp(pt, entity.prevPosX, entity.getX()), - MathHelper.lerp(pt, entity.prevPosY, entity.getY()), MathHelper.lerp(pt, entity.prevPosZ, entity.getZ())); + ms.translate(MathHelper.lerp(pt, entity.xo, entity.getX()), + MathHelper.lerp(pt, entity.yo, entity.getY()), MathHelper.lerp(pt, entity.zo, entity.getZ())); MatrixStacker.of(ms) .rotateY(rotation.getValue(pt)); entityrenderermanager.render(entity, 0, 0, 0, 0, pt, ms, buffer, lightCoordsFromFade(fade)); - ms.pop(); + ms.popPose(); } } diff --git a/src/main/java/com/simibubi/create/foundation/ponder/elements/ParrotElement.java b/src/main/java/com/simibubi/create/foundation/ponder/elements/ParrotElement.java index b43efb782..8c9d88aa4 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/elements/ParrotElement.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/elements/ParrotElement.java @@ -43,15 +43,15 @@ public class ParrotElement extends AnimatedSceneElement { public void reset(PonderScene scene) { super.reset(scene); setPose(initialPose.get()); - entity.setPos(0, 0, 0); - entity.prevPosX = 0; - entity.prevPosY = 0; - entity.prevPosZ = 0; - entity.lastTickPosX = 0; - entity.lastTickPosY = 0; - entity.lastTickPosZ = 0; - entity.prevRotationPitch = entity.rotationPitch = 0; - entity.prevRotationYaw = entity.rotationYaw = 180; + entity.setPosRaw(0, 0, 0); + entity.xo = 0; + entity.yo = 0; + entity.zo = 0; + entity.xOld = 0; + entity.yOld = 0; + entity.zOld = 0; + entity.xRotO = entity.xRot = 0; + entity.yRotO = entity.yRot = 180; } @Override @@ -59,78 +59,78 @@ public class ParrotElement extends AnimatedSceneElement { super.tick(scene); if (entity == null) { entity = pose.create(scene.getWorld()); - entity.prevRotationYaw = entity.rotationYaw = 180; + entity.yRotO = entity.yRot = 180; } - entity.ticksExisted++; - entity.prevRotationYawHead = entity.rotationYawHead; + entity.tickCount++; + entity.yHeadRotO = entity.yHeadRot; entity.oFlapSpeed = entity.flapSpeed; entity.oFlap = entity.flap; entity.onGround = true; - entity.prevPosX = entity.getX(); - entity.prevPosY = entity.getY(); - entity.prevPosZ = entity.getZ(); - entity.prevRotationYaw = entity.rotationYaw; - entity.prevRotationPitch = entity.rotationPitch; + entity.xo = entity.getX(); + entity.yo = entity.getY(); + entity.zo = entity.getZ(); + entity.yRotO = entity.yRot; + entity.xRotO = entity.xRot; pose.tick(scene, entity, location); - entity.lastTickPosX = entity.getX(); - entity.lastTickPosY = entity.getY(); - entity.lastTickPosZ = entity.getZ(); + entity.xOld = entity.getX(); + entity.yOld = entity.getY(); + entity.zOld = entity.getZ(); } public void setPositionOffset(Vector3d position, boolean immediate) { if (entity == null) return; - entity.setPosition(position.x, position.y, position.z); + entity.setPos(position.x, position.y, position.z); if (!immediate) return; - entity.prevPosX = position.x; - entity.prevPosY = position.y; - entity.prevPosZ = position.z; + entity.xo = position.x; + entity.yo = position.y; + entity.zo = position.z; } public void setRotation(Vector3d eulers, boolean immediate) { if (entity == null) return; - entity.rotationPitch = (float) eulers.x; - entity.rotationYaw = (float) eulers.y; + entity.xRot = (float) eulers.x; + entity.yRot = (float) eulers.y; if (!immediate) return; - entity.prevRotationPitch = entity.rotationPitch; - entity.prevRotationYaw = entity.rotationYaw; + entity.xRotO = entity.xRot; + entity.yRotO = entity.yRot; } public Vector3d getPositionOffset() { - return entity != null ? entity.getPositionVec() : Vector3d.ZERO; + return entity != null ? entity.position() : Vector3d.ZERO; } public Vector3d getRotation() { - return entity != null ? new Vector3d(entity.rotationPitch, entity.rotationYaw, 0) : Vector3d.ZERO; + return entity != null ? new Vector3d(entity.xRot, entity.yRot, 0) : Vector3d.ZERO; } @Override protected void renderLast(PonderWorld world, IRenderTypeBuffer buffer, MatrixStack ms, float fade, float pt) { EntityRendererManager entityrenderermanager = Minecraft.getInstance() - .getRenderManager(); + .getEntityRenderDispatcher(); if (entity == null) { entity = pose.create(world); - entity.prevRotationYaw = entity.rotationYaw = 180; + entity.yRotO = entity.yRot = 180; } - ms.push(); + ms.pushPose(); ms.translate(location.x, location.y, location.z); - ms.translate(MathHelper.lerp(pt, entity.prevPosX, entity.getX()), - MathHelper.lerp(pt, entity.prevPosY, entity.getY()), MathHelper.lerp(pt, entity.prevPosZ, entity.getZ())); + ms.translate(MathHelper.lerp(pt, entity.xo, entity.getX()), + MathHelper.lerp(pt, entity.yo, entity.getY()), MathHelper.lerp(pt, entity.zo, entity.getZ())); MatrixStacker.of(ms) - .rotateY(AngleHelper.angleLerp(pt, entity.prevRotationYaw, entity.rotationYaw)); + .rotateY(AngleHelper.angleLerp(pt, entity.yRotO, entity.yRot)); entityrenderermanager.render(entity, 0, 0, 0, 0, pt, ms, buffer, lightCoordsFromFade(fade)); - ms.pop(); + ms.popPose(); } public void setPose(ParrotPose pose) { @@ -155,14 +155,14 @@ public class ParrotElement extends AnimatedSceneElement { @Override ParrotEntity create(PonderWorld world) { ParrotEntity entity = super.create(world); - entity.setPartying(BlockPos.ZERO, true); + entity.setRecordPlayingNearby(BlockPos.ZERO, true); return entity; } @Override void tick(PonderScene scene, ParrotEntity entity, Vector3d location) { - entity.prevRotationYaw = entity.rotationYaw; - entity.rotationYaw -= 2; + entity.yRotO = entity.yRot; + entity.yRot -= 2; } } @@ -171,8 +171,8 @@ public class ParrotElement extends AnimatedSceneElement { @Override void tick(PonderScene scene, ParrotEntity entity, Vector3d location) { - double length = entity.getPositionVec() - .subtract(entity.lastTickPosX, entity.lastTickPosY, entity.lastTickPosZ) + double length = entity.position() + .subtract(entity.xOld, entity.yOld, entity.zOld) .length(); entity.onGround = false; double phase = Math.min(length * 15, 8); @@ -195,12 +195,12 @@ public class ParrotElement extends AnimatedSceneElement { @Override void tick(PonderScene scene, ParrotEntity entity, Vector3d location) { TileEntity tileEntity = scene.getWorld() - .getTileEntity(componentPos); + .getBlockEntity(componentPos); if (!(tileEntity instanceof KineticTileEntity)) return; float rpm = ((KineticTileEntity) tileEntity).getSpeed(); - entity.prevRotationYaw = entity.rotationYaw; - entity.rotationYaw += (rpm * .3f); + entity.yRotO = entity.yRot; + entity.yRot += (rpm * .3f); } } @@ -220,8 +220,8 @@ public class ParrotElement extends AnimatedSceneElement { float targetYaw = MathHelper.wrapDegrees((float) -(MathHelper.atan2(d2, d0) * (double) (180F / (float) Math.PI)) + 90); - entity.rotationPitch = AngleHelper.angleLerp(.4f, entity.rotationPitch, targetPitch); - entity.rotationYaw = AngleHelper.angleLerp(.4f, entity.rotationYaw, targetYaw); + entity.xRot = AngleHelper.angleLerp(.4f, entity.xRot, targetPitch); + entity.yRot = AngleHelper.angleLerp(.4f, entity.yRot, targetYaw); } protected abstract Vector3d getFacedVec(PonderScene scene); @@ -243,8 +243,8 @@ public class ParrotElement extends AnimatedSceneElement { protected Vector3d getFacedVec(PonderScene scene) { Minecraft minecraft = Minecraft.getInstance(); MainWindow w = minecraft.getWindow(); - double mouseX = minecraft.mouseHelper.getMouseX() * w.getScaledWidth() / w.getWidth(); - double mouseY = minecraft.mouseHelper.getMouseY() * w.getScaledHeight() / w.getHeight(); + double mouseX = minecraft.mouseHandler.xpos() * w.getGuiScaledWidth() / w.getScreenWidth(); + double mouseY = minecraft.mouseHandler.ypos() * w.getGuiScaledHeight() / w.getScreenHeight(); return scene.getTransform() .screenToScene(mouseX, mouseY, 300, 0); } diff --git a/src/main/java/com/simibubi/create/foundation/ponder/elements/TextWindowElement.java b/src/main/java/com/simibubi/create/foundation/ponder/elements/TextWindowElement.java index 31da2fb41..34c20efdc 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/elements/TextWindowElement.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/elements/TextWindowElement.java @@ -100,16 +100,16 @@ public class TextWindowElement extends AnimatedOverlayElement { int textWidth = Math.min(screen.width - targetX, 180); - List lines = screen.getFontRenderer().getTextHandler().wrapLines(bakedText, textWidth, Style.EMPTY); + List lines = screen.getFontRenderer().getSplitter().splitLines(bakedText, textWidth, Style.EMPTY); int boxWidth = 0; for (ITextProperties line : lines) - boxWidth = Math.max(boxWidth, screen.getFontRenderer().getWidth(line)); + boxWidth = Math.max(boxWidth, screen.getFontRenderer().width(line)); int boxHeight = screen.getFontRenderer() - .getWordWrappedHeight(bakedText, boxWidth); + .wordWrapHeight(bakedText, boxWidth); - ms.push(); + ms.pushPose(); ms.translate(0, sceneToScreen.y, 400); new BoxElement() @@ -123,14 +123,14 @@ public class TextWindowElement extends AnimatedOverlayElement { int brighterColor = ColorHelper.mixAlphaColors(color, 0xFFffffdd, 1 / 2f); if (vec != null) { - ms.push(); + ms.pushPose(); ms.translate(sceneToScreen.x, 0, 0); double lineTarget = (targetX - sceneToScreen.x) * fade; ms.scale((float) lineTarget, 1, 1); - Matrix4f model = ms.peek().getModel(); + Matrix4f model = ms.last().pose(); GuiUtils.drawGradientRect(model, -100, 0, 0, 1, 1, brighterColor, brighterColor); GuiUtils.drawGradientRect(model, -100, 0, 1, 1, 2, 0xFF494949, 0xFF393939); - ms.pop(); + ms.popPose(); } ms.translate(0, 0, 400); @@ -139,7 +139,7 @@ public class TextWindowElement extends AnimatedOverlayElement { .draw(ms, lines.get(i) .getString(), targetX - 10, 3 + 9 * i, ColorHelper.applyAlpha(brighterColor, fade)); } - ms.pop(); + ms.popPose(); } public int getColor() { diff --git a/src/main/java/com/simibubi/create/foundation/ponder/elements/WorldSectionElement.java b/src/main/java/com/simibubi/create/foundation/ponder/elements/WorldSectionElement.java index 9646753ee..f9d0c02e7 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/elements/WorldSectionElement.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/elements/WorldSectionElement.java @@ -180,22 +180,22 @@ public class WorldSectionElement extends AnimatedSceneElement { public Pair rayTrace(PonderWorld world, Vector3d source, Vector3d target) { world.setMask(this.section); Vector3d transformedTarget = reverseTransformVec(target); - BlockRayTraceResult rayTraceBlocks = world.rayTraceBlocks(new RayTraceContext(reverseTransformVec(source), + BlockRayTraceResult rayTraceBlocks = world.clip(new RayTraceContext(reverseTransformVec(source), transformedTarget, BlockMode.OUTLINE, FluidMode.NONE, null)); world.clearMask(); if (rayTraceBlocks == null) return null; - if (rayTraceBlocks.getHitVec() == null) + if (rayTraceBlocks.getLocation() == null) return null; - double t = rayTraceBlocks.getHitVec() + double t = rayTraceBlocks.getLocation() .subtract(transformedTarget) - .lengthSquared() + .lengthSqr() / source.subtract(target) - .lengthSquared(); + .lengthSqr(); Vector3d actualHit = VecHelper.lerp((float) t, target, source); - return Pair.of(actualHit, rayTraceBlocks.getPos()); + return Pair.of(actualHit, rayTraceBlocks.getBlockPos()); } private Vector3d reverseTransformVec(Vector3d in) { @@ -256,9 +256,9 @@ public class WorldSectionElement extends AnimatedSceneElement { return; loadTEsIfMissing(scene.getWorld()); renderedTileEntities.removeIf(te -> scene.getWorld() - .getTileEntity(te.getPos()) != te); + .getBlockEntity(te.getBlockPos()) != te); tickableTileEntities.removeIf(te -> scene.getWorld() - .getTileEntity(te.getPos()) != te); + .getBlockEntity(te.getBlockPos()) != te); tickableTileEntities.forEach(te -> { if (te instanceof ITickableTileEntity) ((ITickableTileEntity) te).tick(); @@ -280,12 +280,12 @@ public class WorldSectionElement extends AnimatedSceneElement { tickableTileEntities = new ArrayList<>(); renderedTileEntities = new ArrayList<>(); section.forEach(pos -> { - TileEntity tileEntity = world.getTileEntity(pos); + TileEntity tileEntity = world.getBlockEntity(pos); if (tileEntity == null) return; tickableTileEntities.add(tileEntity); renderedTileEntities.add(tileEntity); - tileEntity.updateContainingBlockInfo(); + tileEntity.clearCache(); }); } @@ -323,16 +323,16 @@ public class WorldSectionElement extends AnimatedSceneElement { .apply(overlayMS, pt, true); transformMS(overlayMS, pt); } - ms.push(); + ms.pushPose(); ms.translate(pos.getX(), pos.getY(), pos.getZ()); IVertexBuilder builder = new MatrixApplyingVertexBuilder( - buffer.getBuffer(ModelBakery.BLOCK_DESTRUCTION_RENDER_LAYERS.get(entry.getValue())), - overlayMS.peek().getModel(), - overlayMS.peek().getNormal()); + buffer.getBuffer(ModelBakery.DESTROY_TYPES.get(entry.getValue())), + overlayMS.last().pose(), + overlayMS.last().normal()); Minecraft.getInstance() - .getBlockRendererDispatcher() - .renderModel(world.getBlockState(pos), pos, world, ms, builder, true, world.rand, EmptyModelData.INSTANCE); - ms.pop(); + .getBlockRenderer() + .renderModel(world.getBlockState(pos), pos, world, ms, builder, true, world.random, EmptyModelData.INSTANCE); + ms.popPose(); } } @@ -341,7 +341,7 @@ public class WorldSectionElement extends AnimatedSceneElement { SuperByteBufferCache bufferCache = CreateClient.BUFFER_CACHE; int code = hashCode() ^ world.hashCode(); - Pair key = Pair.of(code, RenderType.getBlockLayers() + Pair key = Pair.of(code, RenderType.chunkBufferLayers() .indexOf(type)); if (redraw) bufferCache.invalidate(DOC_WORLD_SECTION, key); @@ -364,16 +364,16 @@ public class WorldSectionElement extends AnimatedSceneElement { if (blockState.isAir()) return; VoxelShape shape = - blockState.getShape(world, selectedBlock, ISelectionContext.forEntity(Minecraft.getInstance().player)); + blockState.getShape(world, selectedBlock, ISelectionContext.of(Minecraft.getInstance().player)); if (shape.isEmpty()) return; - ms.push(); + ms.pushPose(); transformMS(ms, pt); RenderSystem.disableTexture(); - WorldRenderer.drawBox(ms, buffer.getBuffer(RenderType.getLines()), shape.getBoundingBox() - .offset(selectedBlock), 1, 1, 1, 0.6f); - ms.pop(); + WorldRenderer.renderLineBox(ms, buffer.getBuffer(RenderType.lines()), shape.bounds() + .move(selectedBlock), 1, 1, 1, 0.6f); + ms.popPose(); } private void renderTileEntities(PonderWorld world, MatrixStack ms, IRenderTypeBuffer buffer, float pt) { @@ -385,8 +385,8 @@ public class WorldSectionElement extends AnimatedSceneElement { ForgeHooksClient.setRenderLayer(layer); MatrixStack ms = new MatrixStack(); BlockRendererDispatcher dispatcher = Minecraft.getInstance() - .getBlockRendererDispatcher(); - BlockModelRenderer blockRenderer = dispatcher.getBlockModelRenderer(); + .getBlockRenderer(); + BlockModelRenderer blockRenderer = dispatcher.getModelRenderer(); Random random = new Random(); BufferBuilder builder = new BufferBuilder(DefaultVertexFormats.BLOCK.getIntegerSize()); builder.begin(GL11.GL_QUADS, DefaultVertexFormats.BLOCK); @@ -396,25 +396,25 @@ public class WorldSectionElement extends AnimatedSceneElement { BlockState state = world.getBlockState(pos); FluidState ifluidstate = world.getFluidState(pos); - ms.push(); + ms.pushPose(); ms.translate(pos.getX(), pos.getY(), pos.getZ()); - if (state.getRenderType() != BlockRenderType.ENTITYBLOCK_ANIMATED && state.getBlock() != Blocks.AIR + if (state.getRenderShape() != BlockRenderType.ENTITYBLOCK_ANIMATED && state.getBlock() != Blocks.AIR && RenderTypeLookup.canRenderInLayer(state, layer)) { - TileEntity tileEntity = world.getTileEntity(pos); - blockRenderer.renderModel(world, dispatcher.getModelForState(state), state, pos, ms, builder, true, - random, 42, OverlayTexture.DEFAULT_UV, + TileEntity tileEntity = world.getBlockEntity(pos); + blockRenderer.renderModel(world, dispatcher.getBlockModel(state), state, pos, ms, builder, true, + random, 42, OverlayTexture.NO_OVERLAY, tileEntity != null ? tileEntity.getModelData() : EmptyModelData.INSTANCE); } if (!ifluidstate.isEmpty() && RenderTypeLookup.canRenderInLayer(ifluidstate, layer)) - dispatcher.renderFluid(pos, world, builder, ifluidstate); + dispatcher.renderLiquid(pos, world, builder, ifluidstate); - ms.pop(); + ms.popPose(); }); world.clearMask(); - builder.finishDrawing(); + builder.end(); return new SuperByteBuffer(builder); } diff --git a/src/main/java/com/simibubi/create/foundation/ponder/instructions/AnimateTileEntityInstruction.java b/src/main/java/com/simibubi/create/foundation/ponder/instructions/AnimateTileEntityInstruction.java index 273d520b2..74d943fd0 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/instructions/AnimateTileEntityInstruction.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/instructions/AnimateTileEntityInstruction.java @@ -74,7 +74,7 @@ public class AnimateTileEntityInstruction extends TickingInstruction { } private static Optional castIfPresent(PonderWorld world, BlockPos pos, Class teType) { - TileEntity tileEntity = world.getTileEntity(pos); + TileEntity tileEntity = world.getBlockEntity(pos); if (teType.isInstance(tileEntity)) return Optional.of(teType.cast(tileEntity)); return Optional.empty(); diff --git a/src/main/java/com/simibubi/create/foundation/ponder/instructions/EmitParticlesInstruction.java b/src/main/java/com/simibubi/create/foundation/ponder/instructions/EmitParticlesInstruction.java index ff4fa77b9..d66a4c2a9 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/instructions/EmitParticlesInstruction.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/instructions/EmitParticlesInstruction.java @@ -29,7 +29,7 @@ public class EmitParticlesInstruction extends TickingInstruction { } static ParticleManager paticleManager() { - return Minecraft.getInstance().particles; + return Minecraft.getInstance().particleEngine; } public void create(PonderWorld world, double x, double y, double z); diff --git a/src/main/java/com/simibubi/create/foundation/ponder/instructions/FadeIntoSceneInstruction.java b/src/main/java/com/simibubi/create/foundation/ponder/instructions/FadeIntoSceneInstruction.java index 10a1bbaa9..be5faf3e2 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/instructions/FadeIntoSceneInstruction.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/instructions/FadeIntoSceneInstruction.java @@ -25,7 +25,7 @@ public abstract class FadeIntoSceneInstruction e scene.addElement(element); element.setVisible(true); element.setFade(0); - element.setFadeVec(Vector3d.of(fadeInFrom.getDirectionVec()).scale(.5f)); + element.setFadeVec(Vector3d.atLowerCornerOf(fadeInFrom.getNormal()).scale(.5f)); if (elementLink != null) scene.linkElement(element, elementLink); } diff --git a/src/main/java/com/simibubi/create/foundation/ponder/instructions/FadeOutOfSceneInstruction.java b/src/main/java/com/simibubi/create/foundation/ponder/instructions/FadeOutOfSceneInstruction.java index 269ca682a..83680d1a2 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/instructions/FadeOutOfSceneInstruction.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/instructions/FadeOutOfSceneInstruction.java @@ -27,7 +27,7 @@ public class FadeOutOfSceneInstruction extends T return; element.setVisible(true); element.setFade(1); - element.setFadeVec(Vector3d.of(fadeOutTo.getDirectionVec()).scale(.5f)); + element.setFadeVec(Vector3d.atLowerCornerOf(fadeOutTo.getNormal()).scale(.5f)); } @Override diff --git a/src/main/java/com/simibubi/create/foundation/ponder/instructions/HideAllInstruction.java b/src/main/java/com/simibubi/create/foundation/ponder/instructions/HideAllInstruction.java index 227893e68..63e0f91ef 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/instructions/HideAllInstruction.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/instructions/HideAllInstruction.java @@ -25,7 +25,7 @@ public class HideAllInstruction extends TickingInstruction { AnimatedSceneElement animatedSceneElement = (AnimatedSceneElement) element; animatedSceneElement.setFade(1); animatedSceneElement - .setFadeVec(fadeOutTo == null ? null : Vector3d.of(fadeOutTo.getDirectionVec()).scale(.5f)); + .setFadeVec(fadeOutTo == null ? null : Vector3d.atLowerCornerOf(fadeOutTo.getNormal()).scale(.5f)); } else if (element instanceof AnimatedOverlayElement) { AnimatedOverlayElement animatedSceneElement = (AnimatedOverlayElement) element; animatedSceneElement.setFade(1); diff --git a/src/main/java/com/simibubi/create/foundation/ponder/instructions/HighlightValueBoxInstruction.java b/src/main/java/com/simibubi/create/foundation/ponder/instructions/HighlightValueBoxInstruction.java index b00f89dd2..95207ad96 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/instructions/HighlightValueBoxInstruction.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/instructions/HighlightValueBoxInstruction.java @@ -21,7 +21,7 @@ public class HighlightValueBoxInstruction extends TickingInstruction { public void tick(PonderScene scene) { super.tick(scene); AxisAlignedBB point = new AxisAlignedBB(vec, vec); - AxisAlignedBB expanded = point.grow(expands.x, expands.y, expands.z); + AxisAlignedBB expanded = point.inflate(expands.x, expands.y, expands.z); scene.getOutliner() .chaseAABB(vec, remainingTicks == totalTicks ? point : expanded) .lineWidth(1 / 32f) diff --git a/src/main/java/com/simibubi/create/foundation/ponder/instructions/ReplaceBlocksInstruction.java b/src/main/java/com/simibubi/create/foundation/ponder/instructions/ReplaceBlocksInstruction.java index d71ad0919..e2e9d016b 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/instructions/ReplaceBlocksInstruction.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/instructions/ReplaceBlocksInstruction.java @@ -28,14 +28,14 @@ public class ReplaceBlocksInstruction extends WorldModifyInstruction { PonderWorld world = scene.getWorld(); selection.forEach(pos -> { if (!world.getBounds() - .isVecInside(pos)) + .isInside(pos)) return; BlockState prevState = world.getBlockState(pos); - if (!replaceAir && prevState == Blocks.AIR.getDefaultState()) + if (!replaceAir && prevState == Blocks.AIR.defaultBlockState()) return; if (spawnParticles) world.addBlockDestroyEffects(pos, prevState); - world.setBlockState(pos, stateToUse.apply(prevState)); + world.setBlockAndUpdate(pos, stateToUse.apply(prevState)); }); } diff --git a/src/main/java/com/simibubi/create/foundation/ponder/instructions/TileEntityDataInstruction.java b/src/main/java/com/simibubi/create/foundation/ponder/instructions/TileEntityDataInstruction.java index 391b73063..2a8a46b3d 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/instructions/TileEntityDataInstruction.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/instructions/TileEntityDataInstruction.java @@ -30,16 +30,16 @@ public class TileEntityDataInstruction extends WorldModifyInstruction { PonderWorld world = scene.getWorld(); selection.forEach(pos -> { if (!world.getBounds() - .isVecInside(pos)) + .isInside(pos)) return; - TileEntity tileEntity = world.getTileEntity(pos); + TileEntity tileEntity = world.getBlockEntity(pos); if (!type.isInstance(tileEntity)) return; - CompoundNBT apply = data.apply(tileEntity.write(new CompoundNBT())); + CompoundNBT apply = data.apply(tileEntity.save(new CompoundNBT())); BlockState state = world.getBlockState(pos); if (tileEntity instanceof SyncedTileEntity) ((SyncedTileEntity) tileEntity).readClientUpdate(state, apply); - tileEntity.fromTag(state, apply); + tileEntity.load(state, apply); }); } diff --git a/src/main/java/com/simibubi/create/foundation/ponder/ui/ChapterLabel.java b/src/main/java/com/simibubi/create/foundation/ponder/ui/ChapterLabel.java index c77273bab..7390a2457 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/ui/ChapterLabel.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/ui/ChapterLabel.java @@ -31,7 +31,7 @@ public class ChapterLabel extends AbstractSimiWidget { @Override public void render(@Nonnull MatrixStack ms, int mouseX, int mouseY, float partialTicks) { UIRenderHelper.streak(ms, 0, x, y + height / 2, height - 2, width); - Minecraft.getInstance().fontRenderer.draw(ms, Lang.translate("ponder.chapter." + chapter.getId()), x + 50, + Minecraft.getInstance().font.draw(ms, Lang.translate("ponder.chapter." + chapter.getId()), x + 50, y + 20, Theme.i(Theme.Key.TEXT_ACCENT_SLIGHT)); button.renderButton(ms, mouseX, mouseY, partialTicks); diff --git a/src/main/java/com/simibubi/create/foundation/ponder/ui/PonderButton.java b/src/main/java/com/simibubi/create/foundation/ponder/ui/PonderButton.java index 66d348cfe..b26c91ba6 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/ui/PonderButton.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/ui/PonderButton.java @@ -102,7 +102,7 @@ public class PonderButton extends BoxWidget { if (shortcut != null) { ms.translate(0, 0, z + 50); - drawCenteredText(ms, Minecraft.getInstance().fontRenderer, shortcut.getBoundKeyLocalizedText(), x + width / 2 + 8, y + height - 6, ColorHelper.applyAlpha(Theme.i(Theme.Key.TEXT_DARKER), fadeValue)); + drawCenteredString(ms, Minecraft.getInstance().font, shortcut.getTranslatedKeyMessage(), x + width / 2 + 8, y + height - 6, ColorHelper.applyAlpha(Theme.i(Theme.Key.TEXT_DARKER), fadeValue)); } } diff --git a/src/main/java/com/simibubi/create/foundation/render/PartialBufferer.java b/src/main/java/com/simibubi/create/foundation/render/PartialBufferer.java index 7a8af4c23..6e724722c 100644 --- a/src/main/java/com/simibubi/create/foundation/render/PartialBufferer.java +++ b/src/main/java/com/simibubi/create/foundation/render/PartialBufferer.java @@ -20,7 +20,7 @@ public class PartialBufferer { } public static SuperByteBuffer getFacing(PartialModel partial, BlockState referenceState) { - Direction facing = referenceState.get(FACING); + Direction facing = referenceState.getValue(FACING); return getFacing(partial, referenceState, facing); } diff --git a/src/main/java/com/simibubi/create/foundation/render/ShadowRenderHelper.java b/src/main/java/com/simibubi/create/foundation/render/ShadowRenderHelper.java index e5d31c07f..57296b74b 100644 --- a/src/main/java/com/simibubi/create/foundation/render/ShadowRenderHelper.java +++ b/src/main/java/com/simibubi/create/foundation/render/ShadowRenderHelper.java @@ -23,26 +23,26 @@ import net.minecraft.world.IWorldReader; public class ShadowRenderHelper { private static final RenderType SHADOW_LAYER = - RenderType.getEntityNoOutline(new ResourceLocation("textures/misc/shadow.png")); + RenderType.entityNoOutline(new ResourceLocation("textures/misc/shadow.png")); public static void renderShadow(MatrixStack p_229096_0_, IRenderTypeBuffer p_229096_1_, Vector3d pos, float p_229096_3_, float p_229096_6_) { float f = p_229096_6_; - double d2 = pos.getX(); - double d0 = pos.getY(); - double d1 = pos.getZ(); + double d2 = pos.x(); + double d0 = pos.y(); + double d1 = pos.z(); int i = MathHelper.floor(d2 - (double) f); int j = MathHelper.floor(d2 + (double) f); int k = MathHelper.floor(d0 - (double) f); int l = MathHelper.floor(d0); int i1 = MathHelper.floor(d1 - (double) f); int j1 = MathHelper.floor(d1 + (double) f); - MatrixStack.Entry matrixstack$entry = p_229096_0_.peek(); + MatrixStack.Entry matrixstack$entry = p_229096_0_.last(); IVertexBuilder ivertexbuilder = p_229096_1_.getBuffer(SHADOW_LAYER); - for (BlockPos blockpos : BlockPos.getAllInBoxMutable(new BlockPos(i, k, i1), new BlockPos(j, l, j1))) { - renderShadowPart(matrixstack$entry, ivertexbuilder, Minecraft.getInstance().world, blockpos, d2, d0, d1, f, + for (BlockPos blockpos : BlockPos.betweenClosed(new BlockPos(i, k, i1), new BlockPos(j, l, j1))) { + renderShadowPart(matrixstack$entry, ivertexbuilder, Minecraft.getInstance().level, blockpos, d2, d0, d1, f, p_229096_3_); } @@ -51,11 +51,11 @@ public class ShadowRenderHelper { private static void renderShadowPart(MatrixStack.Entry p_229092_0_, IVertexBuilder p_229092_1_, IWorldReader p_229092_2_, BlockPos p_229092_3_, double p_229092_4_, double p_229092_6_, double p_229092_8_, float p_229092_10_, float p_229092_11_) { - BlockPos blockpos = p_229092_3_.down(); + BlockPos blockpos = p_229092_3_.below(); BlockState blockstate = p_229092_2_.getBlockState(blockpos); - if (blockstate.getRenderType() != BlockRenderType.INVISIBLE && p_229092_2_.getLight(p_229092_3_) > 3) { - if (blockstate.isFullCube(p_229092_2_, blockpos)) { - VoxelShape voxelshape = blockstate.getShape(p_229092_2_, p_229092_3_.down()); + if (blockstate.getRenderShape() != BlockRenderType.INVISIBLE && p_229092_2_.getMaxLocalRawBrightness(p_229092_3_) > 3) { + if (blockstate.isCollisionShapeFullBlock(p_229092_2_, blockpos)) { + VoxelShape voxelshape = blockstate.getShape(p_229092_2_, p_229092_3_.below()); if (!voxelshape.isEmpty()) { @SuppressWarnings("deprecation") float f = (float) (((double) p_229092_11_ - (p_229092_6_ - (double) p_229092_3_.getY()) / 2.0D) @@ -65,7 +65,7 @@ public class ShadowRenderHelper { f = 1.0F; } - AxisAlignedBB axisalignedbb = voxelshape.getBoundingBox(); + AxisAlignedBB axisalignedbb = voxelshape.bounds(); double d0 = (double) p_229092_3_.getX() + axisalignedbb.minX; double d1 = (double) p_229092_3_.getX() + axisalignedbb.maxX; double d2 = (double) p_229092_3_.getY() + axisalignedbb.minY; @@ -93,12 +93,12 @@ public class ShadowRenderHelper { private static void shadowVertex(MatrixStack.Entry p_229091_0_, IVertexBuilder p_229091_1_, float p_229091_2_, float p_229091_3_, float p_229091_4_, float p_229091_5_, float p_229091_6_, float p_229091_7_) { - p_229091_1_.vertex(p_229091_0_.getModel(), p_229091_3_, p_229091_4_, p_229091_5_) + p_229091_1_.vertex(p_229091_0_.pose(), p_229091_3_, p_229091_4_, p_229091_5_) .color(1.0F, 1.0F, 1.0F, p_229091_2_) - .texture(p_229091_6_, p_229091_7_) - .overlay(OverlayTexture.DEFAULT_UV) - .light(15728880) - .normal(p_229091_0_.getNormal(), 0.0F, 1.0F, 0.0F) + .uv(p_229091_6_, p_229091_7_) + .overlayCoords(OverlayTexture.NO_OVERLAY) + .uv2(15728880) + .normal(p_229091_0_.normal(), 0.0F, 1.0F, 0.0F) .endVertex(); } } diff --git a/src/main/java/com/simibubi/create/foundation/render/SuperByteBuffer.java b/src/main/java/com/simibubi/create/foundation/render/SuperByteBuffer.java index b2da5f4bf..2e0b21da8 100644 --- a/src/main/java/com/simibubi/create/foundation/render/SuperByteBuffer.java +++ b/src/main/java/com/simibubi/create/foundation/render/SuperByteBuffer.java @@ -44,7 +44,7 @@ public class SuperByteBuffer { // Vertex Overlay Color private boolean hasOverlay; - private int overlay = OverlayTexture.DEFAULT_UV;; + private int overlay = OverlayTexture.NO_OVERLAY;; // Vertex Lighting private boolean useWorldLight; @@ -68,33 +68,33 @@ public class SuperByteBuffer { } public static float getUnInterpolatedU(TextureAtlasSprite sprite, float u) { - float f = sprite.getMaxU() - sprite.getMinU(); - return (u - sprite.getMinU()) / f * 16.0F; + float f = sprite.getU1() - sprite.getU0(); + return (u - sprite.getU0()) / f * 16.0F; } public static float getUnInterpolatedV(TextureAtlasSprite sprite, float v) { - float f = sprite.getMaxV() - sprite.getMinV(); - return (v - sprite.getMinV()) / f * 16.0F; + float f = sprite.getV1() - sprite.getV0(); + return (v - sprite.getV0()) / f * 16.0F; } public void renderInto(MatrixStack input, IVertexBuilder builder) { if (isEmpty()) return; - Matrix4f modelMat = input.peek() - .getModel() + Matrix4f modelMat = input.last() + .pose() .copy(); - Matrix4f localTransforms = transforms.peek() - .getModel(); + Matrix4f localTransforms = transforms.last() + .pose(); modelMat.multiply(localTransforms); Matrix3f normalMat; if (fullNormalTransform) { - normalMat = input.peek().getNormal().copy(); - Matrix3f localNormalTransforms = transforms.peek().getNormal(); - normalMat.multiply(localNormalTransforms); + normalMat = input.last().normal().copy(); + Matrix3f localNormalTransforms = transforms.last().normal(); + normalMat.mul(localNormalTransforms); } else { - normalMat = transforms.peek().getNormal().copy(); + normalMat = transforms.last().normal().copy(); } if (useWorldLight) { @@ -117,16 +117,16 @@ public class SuperByteBuffer { normal.set(normalX, normalY, normalZ); normal.transform(normalMat); - float nx = normal.getX(); - float ny = normal.getY(); - float nz = normal.getZ(); + float nx = normal.x(); + float ny = normal.y(); + float nz = normal.z(); float staticDiffuse = LightUtil.diffuseLight(normalX, normalY, normalZ); float instanceDiffuse = LightUtil.diffuseLight(nx, ny, nz); pos.set(x, y, z, 1F); pos.transform(modelMat); - builder.vertex(pos.getX(), pos.getY(), pos.getZ()); + builder.vertex(pos.x(), pos.y(), pos.z()); if (shouldColor) { if (disableDiffuseMult) { @@ -161,11 +161,11 @@ public class SuperByteBuffer { if (spriteShiftFunc != null) { spriteShiftFunc.shift(builder, u, v); } else { - builder.texture(u, v); + builder.uv(u, v); } if (hasOverlay) { - builder.overlay(overlay); + builder.overlayCoords(overlay); } int light; @@ -176,7 +176,7 @@ public class SuperByteBuffer { lightPos.transform(lightTransform); } - light = getLight(Minecraft.getInstance().world, lightPos); + light = getLight(Minecraft.getInstance().level, lightPos); if (hasCustomLight) { light = maxLight(light, packedLightCoords); } @@ -187,9 +187,9 @@ public class SuperByteBuffer { } if (hybridLight) { - builder.light(maxLight(light, template.getLight(i))); + builder.uv2(maxLight(light, template.getLight(i))); } else { - builder.light(light); + builder.uv2(light); } builder.normal(nx, ny, nz); @@ -211,7 +211,7 @@ public class SuperByteBuffer { disableDiffuseMult = false; spriteShiftFunc = null; hasOverlay = false; - overlay = OverlayTexture.DEFAULT_UV; + overlay = OverlayTexture.NO_OVERLAY; useWorldLight = false; lightTransform = null; hasCustomLight = false; @@ -239,27 +239,27 @@ public class SuperByteBuffer { } public SuperByteBuffer transform(MatrixStack stack) { - transforms.peek() - .getModel() - .multiply(stack.peek() - .getModel()); - transforms.peek() - .getNormal() - .multiply(stack.peek() - .getNormal()); + transforms.last() + .pose() + .multiply(stack.last() + .pose()); + transforms.last() + .normal() + .mul(stack.last() + .normal()); return this; } public SuperByteBuffer rotate(Direction axis, float radians) { if (radians == 0) return this; - transforms.multiply(axis.getUnitVector() - .getRadialQuaternion(radians)); + transforms.mulPose(axis.step() + .rotation(radians)); return this; } public SuperByteBuffer rotate(Quaternion q) { - transforms.multiply(q); + transforms.mulPose(q); return this; } @@ -313,10 +313,10 @@ public class SuperByteBuffer { public SuperByteBuffer shiftUV(SpriteShiftEntry entry) { this.spriteShiftFunc = (builder, u, v) -> { float targetU = entry.getTarget() - .getInterpolatedU((getUnInterpolatedU(entry.getOriginal(), u))); + .getU((getUnInterpolatedU(entry.getOriginal(), u))); float targetV = entry.getTarget() - .getInterpolatedV((getUnInterpolatedV(entry.getOriginal(), v))); - builder.texture(targetU, targetV); + .getV((getUnInterpolatedV(entry.getOriginal(), v))); + builder.uv(targetU, targetV); }; return this; } @@ -324,13 +324,13 @@ public class SuperByteBuffer { public SuperByteBuffer shiftUVScrolling(SpriteShiftEntry entry, float scrollV) { this.spriteShiftFunc = (builder, u, v) -> { float targetU = u - entry.getOriginal() - .getMinU() + entry.getTarget() - .getMinU(); + .getU0() + entry.getTarget() + .getU0(); float targetV = v - entry.getOriginal() - .getMinV() + entry.getTarget() - .getMinV() + .getV0() + entry.getTarget() + .getV0() + scrollV; - builder.texture(targetU, targetV); + builder.uv(targetU, targetV); }; return this; } @@ -338,10 +338,10 @@ public class SuperByteBuffer { public SuperByteBuffer shiftUVtoSheet(SpriteShiftEntry entry, float uTarget, float vTarget, int sheetSize) { this.spriteShiftFunc = (builder, u, v) -> { float targetU = entry.getTarget() - .getInterpolatedU((getUnInterpolatedU(entry.getOriginal(), u) / sheetSize) + uTarget * 16); + .getU((getUnInterpolatedU(entry.getOriginal(), u) / sheetSize) + uTarget * 16); float targetV = entry.getTarget() - .getInterpolatedV((getUnInterpolatedV(entry.getOriginal(), v) / sheetSize) + vTarget * 16); - builder.texture(targetU, targetV); + .getV((getUnInterpolatedV(entry.getOriginal(), v) / sheetSize) + vTarget * 16); + builder.uv(targetU, targetV); }; return this; } @@ -417,16 +417,16 @@ public class SuperByteBuffer { } public static int maxLight(int packedLight1, int packedLight2) { - int blockLight1 = LightTexture.getBlockLightCoordinates(packedLight1); - int skyLight1 = LightTexture.getSkyLightCoordinates(packedLight1); - int blockLight2 = LightTexture.getBlockLightCoordinates(packedLight2); - int skyLight2 = LightTexture.getSkyLightCoordinates(packedLight2); + int blockLight1 = LightTexture.block(packedLight1); + int skyLight1 = LightTexture.sky(packedLight1); + int blockLight2 = LightTexture.block(packedLight2); + int skyLight2 = LightTexture.sky(packedLight2); return LightTexture.pack(Math.max(blockLight1, blockLight2), Math.max(skyLight1, skyLight2)); } private static int getLight(World world, Vector4f lightPos) { - BlockPos pos = new BlockPos(lightPos.getX(), lightPos.getY(), lightPos.getZ()); - return WORLD_LIGHT_CACHE.computeIfAbsent(pos.toLong(), $ -> WorldRenderer.getLightmapCoordinates(world, pos)); + BlockPos pos = new BlockPos(lightPos.x(), lightPos.y(), lightPos.z()); + return WORLD_LIGHT_CACHE.computeIfAbsent(pos.asLong(), $ -> WorldRenderer.getLightColor(world, pos)); } @FunctionalInterface diff --git a/src/main/java/com/simibubi/create/foundation/render/SuperByteBufferCache.java b/src/main/java/com/simibubi/create/foundation/render/SuperByteBufferCache.java index d11742f51..6b7131c3f 100644 --- a/src/main/java/com/simibubi/create/foundation/render/SuperByteBufferCache.java +++ b/src/main/java/com/simibubi/create/foundation/render/SuperByteBufferCache.java @@ -99,8 +99,8 @@ public class SuperByteBufferCache { private SuperByteBuffer standardBlockRender(BlockState renderedState) { BlockRendererDispatcher dispatcher = Minecraft.getInstance() - .getBlockRendererDispatcher(); - return standardModelRender(dispatcher.getModelForState(renderedState), renderedState); + .getBlockRenderer(); + return standardModelRender(dispatcher.getBlockModel(renderedState), renderedState); } private SuperByteBuffer standardModelRender(IBakedModel model, BlockState referenceState) { @@ -115,14 +115,14 @@ public class SuperByteBufferCache { public static BufferBuilder getBufferBuilder(IBakedModel model, BlockState referenceState, MatrixStack ms) { Minecraft mc = Minecraft.getInstance(); - BlockRendererDispatcher dispatcher = mc.getBlockRendererDispatcher(); - BlockModelRenderer blockRenderer = dispatcher.getBlockModelRenderer(); + BlockRendererDispatcher dispatcher = mc.getBlockRenderer(); + BlockModelRenderer blockRenderer = dispatcher.getModelRenderer(); BufferBuilder builder = new BufferBuilder(512); builder.begin(GL11.GL_QUADS, DefaultVertexFormats.BLOCK); - blockRenderer.renderModel(mc.world, model, referenceState, BlockPos.ZERO.up(255), ms, builder, true, - mc.world.rand, 42, OverlayTexture.DEFAULT_UV, VirtualEmptyModelData.INSTANCE); - builder.finishDrawing(); + blockRenderer.renderModel(mc.level, model, referenceState, BlockPos.ZERO.above(255), ms, builder, true, + mc.level.random, 42, OverlayTexture.NO_OVERLAY, VirtualEmptyModelData.INSTANCE); + builder.end(); return builder; } diff --git a/src/main/java/com/simibubi/create/foundation/render/TileEntityRenderHelper.java b/src/main/java/com/simibubi/create/foundation/render/TileEntityRenderHelper.java index cf33b7f0e..bbafddf47 100644 --- a/src/main/java/com/simibubi/create/foundation/render/TileEntityRenderHelper.java +++ b/src/main/java/com/simibubi/create/foundation/render/TileEntityRenderHelper.java @@ -54,8 +54,8 @@ public class TileEntityRenderHelper { continue; } - BlockPos pos = tileEntity.getPos(); - ms.push(); + BlockPos pos = tileEntity.getBlockPos(); + ms.pushPose(); MatrixStacker.of(ms) .translate(pos); @@ -64,12 +64,12 @@ public class TileEntityRenderHelper { if (lightTransform != null) { Vector4f lightVec = new Vector4f(pos.getX() + .5f, pos.getY() + .5f, pos.getZ() + .5f, 1); lightVec.transform(lightTransform); - lightPos = new BlockPos(lightVec.getX(), lightVec.getY(), lightVec.getZ()); + lightPos = new BlockPos(lightVec.x(), lightVec.y(), lightVec.z()); } else { lightPos = pos; } int worldLight = getCombinedLight(world, lightPos, renderWorld, pos); - renderer.render(tileEntity, pt, ms, buffer, worldLight, OverlayTexture.DEFAULT_UV); + renderer.render(tileEntity, pt, ms, buffer, worldLight, OverlayTexture.NO_OVERLAY); } catch (Exception e) { iterator.remove(); @@ -83,16 +83,16 @@ public class TileEntityRenderHelper { Create.LOGGER.error(message); } - ms.pop(); + ms.popPose(); } } public static int getCombinedLight(World world, BlockPos worldPos, @Nullable PlacementSimulationWorld renderWorld, BlockPos renderWorldPos) { - int worldLight = WorldRenderer.getLightmapCoordinates(world, worldPos); + int worldLight = WorldRenderer.getLightColor(world, worldPos); if (renderWorld != null) { - int renderWorldLight = WorldRenderer.getLightmapCoordinates(renderWorld, renderWorldPos); + int renderWorldLight = WorldRenderer.getLightColor(renderWorld, renderWorldPos); return SuperByteBuffer.maxLight(worldLight, renderWorldLight); } diff --git a/src/main/java/com/simibubi/create/foundation/renderState/RenderTypes.java b/src/main/java/com/simibubi/create/foundation/renderState/RenderTypes.java index 4250dd03c..761271ddb 100644 --- a/src/main/java/com/simibubi/create/foundation/renderState/RenderTypes.java +++ b/src/main/java/com/simibubi/create/foundation/renderState/RenderTypes.java @@ -15,82 +15,82 @@ public class RenderTypes extends RenderState { public static RenderType getOutlineTranslucent(ResourceLocation texture, boolean cull) { RenderType.State rendertype$state = RenderType.State.builder() - .texture(new RenderState.TextureState(texture, false, false)) - .transparency(TRANSLUCENT_TRANSPARENCY) - .diffuseLighting(ENABLE_DIFFUSE_LIGHTING) - .alpha(ONE_TENTH_ALPHA) - .cull(cull ? ENABLE_CULLING : DISABLE_CULLING) - .lightmap(ENABLE_LIGHTMAP) - .overlay(ENABLE_OVERLAY_COLOR) - .build(true); - return RenderType.of(createLayerName("outline_translucent" + (cull ? "_cull" : "")), - DefaultVertexFormats.POSITION_COLOR_TEXTURE_OVERLAY_LIGHT_NORMAL, GL11.GL_QUADS, 256, true, true, rendertype$state); + .setTextureState(new RenderState.TextureState(texture, false, false)) + .setTransparencyState(TRANSLUCENT_TRANSPARENCY) + .setDiffuseLightingState(DIFFUSE_LIGHTING) + .setAlphaState(DEFAULT_ALPHA) + .setCullState(cull ? CULL : NO_CULL) + .setLightmapState(LIGHTMAP) + .setOverlayState(OVERLAY) + .createCompositeState(true); + return RenderType.create(createLayerName("outline_translucent" + (cull ? "_cull" : "")), + DefaultVertexFormats.NEW_ENTITY, GL11.GL_QUADS, 256, true, true, rendertype$state); } private static final RenderType OUTLINE_SOLID = - RenderType.of(createLayerName("outline_solid"), DefaultVertexFormats.POSITION_COLOR_TEXTURE_OVERLAY_LIGHT_NORMAL, GL11.GL_QUADS, 256, true, + RenderType.create(createLayerName("outline_solid"), DefaultVertexFormats.NEW_ENTITY, GL11.GL_QUADS, 256, true, false, RenderType.State.builder() - .texture(new RenderState.TextureState(AllSpecialTextures.BLANK.getLocation(), false, false)) - .diffuseLighting(ENABLE_DIFFUSE_LIGHTING) - .lightmap(ENABLE_LIGHTMAP) - .overlay(ENABLE_OVERLAY_COLOR) - .build(true)); + .setTextureState(new RenderState.TextureState(AllSpecialTextures.BLANK.getLocation(), false, false)) + .setDiffuseLightingState(DIFFUSE_LIGHTING) + .setLightmapState(LIGHTMAP) + .setOverlayState(OVERLAY) + .createCompositeState(true)); public static RenderType getGlowingSolid(ResourceLocation texture) { RenderType.State rendertype$state = RenderType.State.builder() - .texture(new RenderState.TextureState(texture, false, false)) - .lightmap(ENABLE_LIGHTMAP) - .overlay(ENABLE_OVERLAY_COLOR) - .build(true); - return RenderType.of(createLayerName("glowing_solid"), DefaultVertexFormats.POSITION_COLOR_TEXTURE_OVERLAY_LIGHT_NORMAL, GL11.GL_QUADS, 256, + .setTextureState(new RenderState.TextureState(texture, false, false)) + .setLightmapState(LIGHTMAP) + .setOverlayState(OVERLAY) + .createCompositeState(true); + return RenderType.create(createLayerName("glowing_solid"), DefaultVertexFormats.NEW_ENTITY, GL11.GL_QUADS, 256, true, false, rendertype$state); } public static RenderType getGlowingTranslucent(ResourceLocation texture) { RenderType.State rendertype$state = RenderType.State.builder() - .texture(new RenderState.TextureState(texture, false, false)) - .transparency(TRANSLUCENT_TRANSPARENCY) - .alpha(ONE_TENTH_ALPHA) - .cull(DISABLE_CULLING) - .lightmap(ENABLE_LIGHTMAP) - .overlay(ENABLE_OVERLAY_COLOR) - .build(true); - return RenderType.of(createLayerName("glowing_translucent"), DefaultVertexFormats.POSITION_COLOR_TEXTURE_OVERLAY_LIGHT_NORMAL, GL11.GL_QUADS, + .setTextureState(new RenderState.TextureState(texture, false, false)) + .setTransparencyState(TRANSLUCENT_TRANSPARENCY) + .setAlphaState(DEFAULT_ALPHA) + .setCullState(NO_CULL) + .setLightmapState(LIGHTMAP) + .setOverlayState(OVERLAY) + .createCompositeState(true); + return RenderType.create(createLayerName("glowing_translucent"), DefaultVertexFormats.NEW_ENTITY, GL11.GL_QUADS, 256, true, true, rendertype$state); } - private static final RenderType GLOWING_SOLID = getGlowingSolid(PlayerContainer.BLOCK_ATLAS_TEXTURE); - private static final RenderType GLOWING_TRANSLUCENT = getGlowingTranslucent(PlayerContainer.BLOCK_ATLAS_TEXTURE); + private static final RenderType GLOWING_SOLID = getGlowingSolid(PlayerContainer.BLOCK_ATLAS); + private static final RenderType GLOWING_TRANSLUCENT = getGlowingTranslucent(PlayerContainer.BLOCK_ATLAS); private static final RenderType ITEM_PARTIAL_SOLID = - RenderType.of(createLayerName("item_solid"), DefaultVertexFormats.POSITION_COLOR_TEXTURE_OVERLAY_LIGHT_NORMAL, GL11.GL_QUADS, 256, true, + RenderType.create(createLayerName("item_solid"), DefaultVertexFormats.NEW_ENTITY, GL11.GL_QUADS, 256, true, false, RenderType.State.builder() - .texture(BLOCK_ATLAS_TEXTURE) - .transparency(NO_TRANSPARENCY) - .diffuseLighting(ENABLE_DIFFUSE_LIGHTING) - .lightmap(ENABLE_LIGHTMAP) - .overlay(ENABLE_OVERLAY_COLOR) - .build(true)); + .setTextureState(BLOCK_SHEET) + .setTransparencyState(NO_TRANSPARENCY) + .setDiffuseLightingState(DIFFUSE_LIGHTING) + .setLightmapState(LIGHTMAP) + .setOverlayState(OVERLAY) + .createCompositeState(true)); - private static final RenderType ITEM_PARTIAL_TRANSLUCENT = RenderType.of(createLayerName("item_translucent"), - DefaultVertexFormats.POSITION_COLOR_TEXTURE_OVERLAY_LIGHT_NORMAL, GL11.GL_QUADS, 256, true, true, RenderType.State.builder() - .texture(BLOCK_ATLAS_TEXTURE) - .transparency(TRANSLUCENT_TRANSPARENCY) - .diffuseLighting(ENABLE_DIFFUSE_LIGHTING) - .alpha(ONE_TENTH_ALPHA) - .lightmap(ENABLE_LIGHTMAP) - .overlay(ENABLE_OVERLAY_COLOR) - .build(true)); + private static final RenderType ITEM_PARTIAL_TRANSLUCENT = RenderType.create(createLayerName("item_translucent"), + DefaultVertexFormats.NEW_ENTITY, GL11.GL_QUADS, 256, true, true, RenderType.State.builder() + .setTextureState(BLOCK_SHEET) + .setTransparencyState(TRANSLUCENT_TRANSPARENCY) + .setDiffuseLightingState(DIFFUSE_LIGHTING) + .setAlphaState(DEFAULT_ALPHA) + .setLightmapState(LIGHTMAP) + .setOverlayState(OVERLAY) + .createCompositeState(true)); - private static final RenderType FLUID = RenderType.of(createLayerName("fluid"), - DefaultVertexFormats.POSITION_COLOR_TEXTURE_OVERLAY_LIGHT_NORMAL, GL11.GL_QUADS, 256, true, true, RenderType.State.builder() - .texture(MIPMAP_BLOCK_ATLAS_TEXTURE) - .transparency(TRANSLUCENT_TRANSPARENCY) - .shadeModel(SMOOTH_SHADE_MODEL) - .alpha(ONE_TENTH_ALPHA) - .lightmap(ENABLE_LIGHTMAP) - .overlay(ENABLE_OVERLAY_COLOR) - .build(true)); + private static final RenderType FLUID = RenderType.create(createLayerName("fluid"), + DefaultVertexFormats.NEW_ENTITY, GL11.GL_QUADS, 256, true, true, RenderType.State.builder() + .setTextureState(BLOCK_SHEET_MIPPED) + .setTransparencyState(TRANSLUCENT_TRANSPARENCY) + .setShadeModelState(SMOOTH_SHADE) + .setAlphaState(DEFAULT_ALPHA) + .setLightmapState(LIGHTMAP) + .setOverlayState(OVERLAY) + .createCompositeState(true)); private static String createLayerName(String name) { return Create.ID + ":" + name; diff --git a/src/main/java/com/simibubi/create/foundation/renderState/SuperRenderTypeBuffer.java b/src/main/java/com/simibubi/create/foundation/renderState/SuperRenderTypeBuffer.java index 286dc4423..7a9224afc 100644 --- a/src/main/java/com/simibubi/create/foundation/renderState/SuperRenderTypeBuffer.java +++ b/src/main/java/com/simibubi/create/foundation/renderState/SuperRenderTypeBuffer.java @@ -47,15 +47,15 @@ public class SuperRenderTypeBuffer implements IRenderTypeBuffer { } public void draw() { - earlyBuffer.draw(); - defaultBuffer.draw(); - lateBuffer.draw(); + earlyBuffer.endBatch(); + defaultBuffer.endBatch(); + lateBuffer.endBatch(); } public void draw(RenderType type) { - earlyBuffer.draw(type); - defaultBuffer.draw(type); - lateBuffer.draw(type); + earlyBuffer.endBatch(type); + defaultBuffer.endBatch(type); + lateBuffer.endBatch(type); } private static class SuperRenderTypeBufferPhase extends IRenderTypeBuffer.Impl { @@ -65,28 +65,28 @@ public class SuperRenderTypeBuffer implements IRenderTypeBuffer { static final SortedMap createEntityBuilders() { return Util.make(new Object2ObjectLinkedOpenHashMap<>(), (map) -> { - map.put(Atlases.getEntitySolid(), blockBuilders.get(RenderType.getSolid())); + map.put(Atlases.solidBlockSheet(), blockBuilders.builder(RenderType.solid())); assign(map, RenderTypes.getOutlineSolid()); - map.put(Atlases.getEntityCutout(), blockBuilders.get(RenderType.getCutout())); - map.put(Atlases.getBannerPatterns(), blockBuilders.get(RenderType.getCutoutMipped())); - map.put(Atlases.getEntityTranslucentCull(), blockBuilders.get(RenderType.getTranslucent())); // FIXME new equivalent of getEntityTranslucent() ? - assign(map, Atlases.getShieldPatterns()); - assign(map, Atlases.getBeds()); - assign(map, Atlases.getShulkerBoxes()); - assign(map, Atlases.getSign()); - assign(map, Atlases.getChest()); - assign(map, RenderType.getTranslucentNoCrumbling()); - assign(map, RenderType.getGlint()); - assign(map, RenderType.getEntityGlint()); - assign(map, RenderType.getWaterMask()); - ModelBakery.BLOCK_DESTRUCTION_RENDER_LAYERS.forEach((p_228488_1_) -> { + map.put(Atlases.cutoutBlockSheet(), blockBuilders.builder(RenderType.cutout())); + map.put(Atlases.bannerSheet(), blockBuilders.builder(RenderType.cutoutMipped())); + map.put(Atlases.translucentCullBlockSheet(), blockBuilders.builder(RenderType.translucent())); // FIXME new equivalent of getEntityTranslucent() ? + assign(map, Atlases.shieldSheet()); + assign(map, Atlases.bedSheet()); + assign(map, Atlases.shulkerBoxSheet()); + assign(map, Atlases.signSheet()); + assign(map, Atlases.chestSheet()); + assign(map, RenderType.translucentNoCrumbling()); + assign(map, RenderType.glint()); + assign(map, RenderType.entityGlint()); + assign(map, RenderType.waterMask()); + ModelBakery.DESTROY_TYPES.forEach((p_228488_1_) -> { assign(map, p_228488_1_); }); }); } private static void assign(Object2ObjectLinkedOpenHashMap map, RenderType type) { - map.put(type, new BufferBuilder(type.getExpectedBufferSize())); + map.put(type, new BufferBuilder(type.bufferSize())); } protected SuperRenderTypeBufferPhase() { diff --git a/src/main/java/com/simibubi/create/foundation/sound/ContinuousSound.java b/src/main/java/com/simibubi/create/foundation/sound/ContinuousSound.java index 6055b26db..9f2dceeb1 100644 --- a/src/main/java/com/simibubi/create/foundation/sound/ContinuousSound.java +++ b/src/main/java/com/simibubi/create/foundation/sound/ContinuousSound.java @@ -15,13 +15,13 @@ public class ContinuousSound extends TickableSound { this.scape = scape; this.sharedPitch = sharedPitch; this.relativeVolume = relativeVolume; - this.repeat = true; - this.repeatDelay = 0; - this.global = false; + this.looping = true; + this.delay = 0; + this.relative = false; } public void remove() { - setDone(); + stop(); } @Override diff --git a/src/main/java/com/simibubi/create/foundation/sound/RepeatingSound.java b/src/main/java/com/simibubi/create/foundation/sound/RepeatingSound.java index 0c8d4c97e..61d460214 100644 --- a/src/main/java/com/simibubi/create/foundation/sound/RepeatingSound.java +++ b/src/main/java/com/simibubi/create/foundation/sound/RepeatingSound.java @@ -29,10 +29,10 @@ public class RepeatingSound { if (AnimationTickHolder.getTicks() % repeatDelay != 0) return; - ClientWorld world = Minecraft.getInstance().world; + ClientWorld world = Minecraft.getInstance().level; Vector3d meanPos = scape.getMeanPos(); - world.playSound(meanPos.x, meanPos.y, meanPos.z, event, SoundCategory.AMBIENT, + world.playLocalSound(meanPos.x, meanPos.y, meanPos.z, event, SoundCategory.AMBIENT, scape.getVolume() * relativeVolume, sharedPitch, true); } diff --git a/src/main/java/com/simibubi/create/foundation/sound/SoundScape.java b/src/main/java/com/simibubi/create/foundation/sound/SoundScape.java index 3b68a728b..cdd7c4794 100644 --- a/src/main/java/com/simibubi/create/foundation/sound/SoundScape.java +++ b/src/main/java/com/simibubi/create/foundation/sound/SoundScape.java @@ -52,7 +52,7 @@ class SoundScape { public void play() { continuous.forEach(Minecraft.getInstance() - .getSoundHandler()::play); + .getSoundManager()::play); } public void tick() { @@ -82,10 +82,10 @@ class SoundScape { } public float getVolume() { - Entity renderViewEntity = Minecraft.getInstance().renderViewEntity; + Entity renderViewEntity = Minecraft.getInstance().cameraEntity; float distanceMultiplier = 0; if (renderViewEntity != null) { - double distanceTo = renderViewEntity.getPositionVec() + double distanceTo = renderViewEntity.position() .distanceTo(getMeanPos()); distanceMultiplier = (float) MathHelper.lerp(distanceTo / SoundScapes.MAX_AMBIENT_SOURCE_DISTANCE, 2, 0); } diff --git a/src/main/java/com/simibubi/create/foundation/sound/SoundScapes.java b/src/main/java/com/simibubi/create/foundation/sound/SoundScapes.java index c1065251f..d62449315 100644 --- a/src/main/java/com/simibubi/create/foundation/sound/SoundScapes.java +++ b/src/main/java/com/simibubi/create/foundation/sound/SoundScapes.java @@ -48,7 +48,7 @@ public class SoundScapes { } private static SoundScape kinetic(float pitch, AmbienceGroup group) { - return new SoundScape(pitch, group).continuous(SoundEvents.ENTITY_MINECART_INSIDE, .25f, 1); + return new SoundScape(pitch, group).continuous(SoundEvents.MINECART_INSIDE, .25f, 1); } private static SoundScape cogwheel(float pitch, AmbienceGroup group) { @@ -127,14 +127,14 @@ public class SoundScapes { } protected static boolean outOfRange(BlockPos pos) { - return !getCameraPos().withinDistance(pos, MAX_AMBIENT_SOURCE_DISTANCE); + return !getCameraPos().closerThan(pos, MAX_AMBIENT_SOURCE_DISTANCE); } protected static BlockPos getCameraPos() { - Entity renderViewEntity = Minecraft.getInstance().renderViewEntity; + Entity renderViewEntity = Minecraft.getInstance().cameraEntity; if (renderViewEntity == null) return BlockPos.ZERO; - BlockPos playerLocation = renderViewEntity.getBlockPos(); + BlockPos playerLocation = renderViewEntity.blockPosition(); return playerLocation; } diff --git a/src/main/java/com/simibubi/create/foundation/tileEntity/SmartTileEntity.java b/src/main/java/com/simibubi/create/foundation/tileEntity/SmartTileEntity.java index b25a42e2a..b4ec0bc2c 100644 --- a/src/main/java/com/simibubi/create/foundation/tileEntity/SmartTileEntity.java +++ b/src/main/java/com/simibubi/create/foundation/tileEntity/SmartTileEntity.java @@ -16,6 +16,7 @@ import net.minecraft.entity.player.PlayerEntity; import net.minecraft.nbt.CompoundNBT; import net.minecraft.tileentity.ITickableTileEntity; import net.minecraft.tileentity.TileEntityType; +import net.minecraft.world.World; import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.fluids.capability.CapabilityFluidHandler; import net.minecraftforge.items.CapabilityItemHandler; @@ -58,7 +59,7 @@ public abstract class SmartTileEntity extends SyncedTileEntity implements ITicka @Override public void tick() { - if (!initialized && hasWorld()) { + if (!initialized && hasLevel()) { initialize(); initialized = true; } @@ -77,7 +78,7 @@ public abstract class SmartTileEntity extends SyncedTileEntity implements ITicka } @Override - public final CompoundNBT write(CompoundNBT compound) { + public final CompoundNBT save(CompoundNBT compound) { write(compound, false); return compound; } @@ -94,7 +95,7 @@ public abstract class SmartTileEntity extends SyncedTileEntity implements ITicka } @Override - public final void fromTag(BlockState state, CompoundNBT tag) { + public final void load(BlockState state, CompoundNBT tag) { fromTag(state, tag, false); } @@ -110,7 +111,7 @@ public abstract class SmartTileEntity extends SyncedTileEntity implements ITicka updateBehaviorList(); } - super.fromTag(state, compound); + super.load(state, compound); behaviourList.forEach(tb -> tb.read(compound, clientPacket)); } @@ -118,13 +119,13 @@ public abstract class SmartTileEntity extends SyncedTileEntity implements ITicka * Hook only these in future subclasses of STE */ protected void write(CompoundNBT compound, boolean clientPacket) { - super.write(compound); + super.save(compound); behaviourList.forEach(tb -> tb.write(compound, clientPacket)); } @Override public void writeSafe(CompoundNBT compound, boolean clientPacket) { - super.write(compound); + super.save(compound); behaviourList.forEach(tb -> { if (tb.isSafeNBT()) tb.write(compound, clientPacket); @@ -140,9 +141,9 @@ public abstract class SmartTileEntity extends SyncedTileEntity implements ITicka } @Override - public void remove() { + public void setRemoved() { forEachBehaviour(TileEntityBehaviour::remove); - super.remove(); + super.setRemoved(); } public void setLazyTickRate(int slowTickRate) { @@ -205,10 +206,13 @@ public abstract class SmartTileEntity extends SyncedTileEntity implements ITicka @Override public boolean canPlayerUse(PlayerEntity player) { - if (world == null || world.getTileEntity(pos) != this) { + if (level == null || level.getBlockEntity(worldPosition) != this) { return false; } - return player.getDistanceSq(pos.getX() + 0.5D, pos.getY() + 0.5D, pos.getZ() + 0.5D) <= 64.0D; + return player.distanceToSqr(worldPosition.getX() + 0.5D, worldPosition.getY() + 0.5D, worldPosition.getZ() + 0.5D) <= 64.0D; } + public World getWorld() { + return getLevel(); + } } diff --git a/src/main/java/com/simibubi/create/foundation/tileEntity/SyncedTileEntity.java b/src/main/java/com/simibubi/create/foundation/tileEntity/SyncedTileEntity.java index 2c8929358..c4f234d4f 100644 --- a/src/main/java/com/simibubi/create/foundation/tileEntity/SyncedTileEntity.java +++ b/src/main/java/com/simibubi/create/foundation/tileEntity/SyncedTileEntity.java @@ -28,46 +28,46 @@ public abstract class SyncedTileEntity extends TileEntity { @Override public CompoundNBT getUpdateTag() { - return write(new CompoundNBT()); + return save(new CompoundNBT()); } @Override public void handleUpdateTag(BlockState state, CompoundNBT tag) { - fromTag(state, tag); + load(state, tag); } public void sendData() { - if (world != null) - world.notifyBlockUpdate(getPos(), getBlockState(), getBlockState(), 2 | 4 | 16); + if (level != null) + level.sendBlockUpdated(getBlockPos(), getBlockState(), getBlockState(), 2 | 4 | 16); } public void causeBlockUpdate() { - if (world != null) - world.notifyBlockUpdate(getPos(), getBlockState(), getBlockState(), 1); + if (level != null) + level.sendBlockUpdated(getBlockPos(), getBlockState(), getBlockState(), 1); } @Override public SUpdateTileEntityPacket getUpdatePacket() { - return new SUpdateTileEntityPacket(getPos(), 1, writeToClient(new CompoundNBT())); + return new SUpdateTileEntityPacket(getBlockPos(), 1, writeToClient(new CompoundNBT())); } @Override public void onDataPacket(NetworkManager net, SUpdateTileEntityPacket pkt) { - readClientUpdate(getBlockState(), pkt.getNbtCompound()); + readClientUpdate(getBlockState(), pkt.getTag()); } // Special handling for client update packets public void readClientUpdate(BlockState state, CompoundNBT tag) { - fromTag(state, tag); + load(state, tag); } // Special handling for client update packets public CompoundNBT writeToClient(CompoundNBT tag) { - return write(tag); + return save(tag); } public void notifyUpdate() { - markDirty(); + setChanged(); sendData(); } @@ -76,7 +76,7 @@ public abstract class SyncedTileEntity extends TileEntity { } public Chunk containedChunk() { - SectionPos sectionPos = SectionPos.from(pos); - return world.getChunk(sectionPos.getSectionX(), sectionPos.getSectionZ()); + SectionPos sectionPos = SectionPos.of(worldPosition); + return level.getChunk(sectionPos.x(), sectionPos.z()); } } diff --git a/src/main/java/com/simibubi/create/foundation/tileEntity/TileEntityBehaviour.java b/src/main/java/com/simibubi/create/foundation/tileEntity/TileEntityBehaviour.java index 4f0588e55..5cd951b31 100644 --- a/src/main/java/com/simibubi/create/foundation/tileEntity/TileEntityBehaviour.java +++ b/src/main/java/com/simibubi/create/foundation/tileEntity/TileEntityBehaviour.java @@ -77,20 +77,20 @@ public abstract class TileEntityBehaviour { } public BlockPos getPos() { - return tileEntity.getPos(); + return tileEntity.getBlockPos(); } public World getWorld() { - return tileEntity.getWorld(); + return tileEntity.getLevel(); } public static T get(IBlockReader reader, BlockPos pos, BehaviourType type) { - return get(reader.getTileEntity(pos), type); + return get(reader.getBlockEntity(pos), type); } public static void destroy(IBlockReader reader, BlockPos pos, BehaviourType type) { - T behaviour = get(reader.getTileEntity(pos), type); + T behaviour = get(reader.getBlockEntity(pos), type); if (behaviour != null) behaviour.destroy(); } diff --git a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/ValueBox.java b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/ValueBox.java index a81df38bb..92f7300f2 100644 --- a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/ValueBox.java +++ b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/ValueBox.java @@ -40,7 +40,7 @@ public class ValueBox extends ChasingAABBOutline { super(bb); this.label = label; this.pos = pos; - this.blockState = Minecraft.getInstance().world.getBlockState(pos); + this.blockState = Minecraft.getInstance().level.getBlockState(pos); } public ValueBox transform(ValueBoxTransform transform) { @@ -82,12 +82,12 @@ public class ValueBox extends ChasingAABBOutline { if (hasTransform && !transform.shouldRender(blockState)) return; - ms.push(); + ms.pushPose(); ms.translate(pos.getX(), pos.getY(), pos.getZ()); if (hasTransform) transform.transform(blockState, ms); - transformNormals = ms.peek() - .getNormal() + transformNormals = ms.last() + .normal() .copy(); params.colored(isPassive ? passiveColor : highlightColor); super.render(ms, buffer, pt); @@ -95,12 +95,12 @@ public class ValueBox extends ChasingAABBOutline { float fontScale = hasTransform ? -transform.getFontScale() : -1 / 64f; ms.scale(fontScale, fontScale, fontScale); - ms.push(); + ms.pushPose(); renderContents(ms, buffer); - ms.pop(); + ms.popPose(); if (!isPassive) { - ms.push(); + ms.pushPose(); ms.translate(17.5, -.5, 7); ms.translate(labelOffset.x, labelOffset.y, labelOffset.z); @@ -109,15 +109,15 @@ public class ValueBox extends ChasingAABBOutline { ms.translate(0, 10, 0); renderHoveringText(ms, buffer, sublabel); } - if (!scrollTooltip.getUnformattedComponentText().isEmpty()) { + if (!scrollTooltip.getContents().isEmpty()) { ms.translate(0, 10, 0); renderHoveringText(ms, buffer, scrollTooltip, 0x998899, 0x111111); } - ms.pop(); + ms.popPose(); } - ms.pop(); + ms.popPose(); } public void renderContents(MatrixStack ms, IRenderTypeBuffer buffer) {} @@ -135,14 +135,14 @@ public class ValueBox extends ChasingAABBOutline { @Override public void renderContents(MatrixStack ms, IRenderTypeBuffer buffer) { super.renderContents(ms, buffer); - FontRenderer font = Minecraft.getInstance().fontRenderer; + FontRenderer font = Minecraft.getInstance().font; ITextComponent countString = new StringTextComponent(count == 0 ? "*" : count + ""); ms.translate(17.5f, -5f, 7f); boolean isFilter = stack.getItem() instanceof FilterItem; boolean isEmpty = stack.isEmpty(); float scale = 1.5f; - ms.translate(-font.getWidth(countString), 0, 0); + ms.translate(-font.width(countString), 0, 0); if (isFilter) ms.translate(3, 8, 7.25f); @@ -172,17 +172,17 @@ public class ValueBox extends ChasingAABBOutline { @Override public void renderContents(MatrixStack ms, IRenderTypeBuffer buffer) { super.renderContents(ms, buffer); - FontRenderer font = Minecraft.getInstance().fontRenderer; + FontRenderer font = Minecraft.getInstance().font; float scale = 4; ms.scale(scale, scale, 1); ms.translate(-4, -4, 5); - int stringWidth = font.getWidth(text); - float numberScale = (float) font.FONT_HEIGHT / stringWidth; + int stringWidth = font.width(text); + float numberScale = (float) font.lineHeight / stringWidth; boolean singleDigit = stringWidth < 10; if (singleDigit) numberScale = numberScale / 2; - float verticalMargin = (stringWidth - font.FONT_HEIGHT) / 2f; + float verticalMargin = (stringWidth - font.lineHeight) / 2f; ms.scale(numberScale, numberScale, numberScale); ms.translate(singleDigit ? stringWidth / 2 : 0, singleDigit ? -verticalMargin : verticalMargin, 0); @@ -220,16 +220,16 @@ public class ValueBox extends ChasingAABBOutline { protected void renderHoveringText(MatrixStack ms, IRenderTypeBuffer buffer, ITextComponent text, int color, int shadowColor) { - ms.push(); + ms.pushPose(); drawString(ms, buffer, text, 0, 0, color); ms.translate(0, 0, -.25); drawString(ms, buffer, text, 1, 1, shadowColor); - ms.pop(); + ms.popPose(); } private static void drawString(MatrixStack ms, IRenderTypeBuffer buffer, ITextComponent text, float x, float y, int color) { - Minecraft.getInstance().fontRenderer.draw(text, x, y, color, false, ms.peek() - .getModel(), buffer, false, 0, 15728880); + Minecraft.getInstance().font.drawInBatch(text, x, y, color, false, ms.last() + .pose(), buffer, false, 0, 15728880); } } diff --git a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/ValueBoxRenderer.java b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/ValueBoxRenderer.java index fd37abb2a..bac64bc8a 100644 --- a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/ValueBoxRenderer.java +++ b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/ValueBoxRenderer.java @@ -21,13 +21,13 @@ public class ValueBoxRenderer { public static void renderItemIntoValueBox(ItemStack filter, MatrixStack ms, IRenderTypeBuffer buffer, int light, int overlay) { ItemRenderer itemRenderer = Minecraft.getInstance().getItemRenderer(); - IBakedModel modelWithOverrides = itemRenderer.getItemModelWithOverrides(filter, Minecraft.getInstance().world, null); + IBakedModel modelWithOverrides = itemRenderer.getModel(filter, Minecraft.getInstance().level, null); boolean blockItem = modelWithOverrides.isGui3d(); float scale = (!blockItem ? .5f : 1f) - 1 / 64f; float zOffset = (!blockItem ? -.225f : 0) + customZOffset(filter.getItem()); ms.scale(scale, scale, scale); ms.translate(0, 0, zOffset); - itemRenderer.renderItem(filter, TransformType.FIXED, light, overlay, ms, buffer); + itemRenderer.renderStatic(filter, TransformType.FIXED, light, overlay, ms, buffer); } private static float customZOffset(Item item) { @@ -40,7 +40,7 @@ public class ValueBoxRenderer { return NUDGE; if (block instanceof FenceBlock) return NUDGE; - if (block.isIn(BlockTags.BUTTONS)) + if (block.is(BlockTags.BUTTONS)) return NUDGE; if (block == Blocks.END_ROD) return NUDGE; diff --git a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/ValueBoxTransform.java b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/ValueBoxTransform.java index 0d74f4e52..2ffaea5d6 100644 --- a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/ValueBoxTransform.java +++ b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/ValueBoxTransform.java @@ -46,10 +46,10 @@ public abstract class ValueBoxTransform { protected Vector3d rotateHorizontally(BlockState state, Vector3d vec) { float yRot = 0; - if (state.contains(BlockStateProperties.FACING)) - yRot = AngleHelper.horizontalAngle(state.get(BlockStateProperties.FACING)); - if (state.contains(BlockStateProperties.HORIZONTAL_FACING)) - yRot = AngleHelper.horizontalAngle(state.get(BlockStateProperties.HORIZONTAL_FACING)); + if (state.hasProperty(BlockStateProperties.FACING)) + yRot = AngleHelper.horizontalAngle(state.getValue(BlockStateProperties.FACING)); + if (state.hasProperty(BlockStateProperties.HORIZONTAL_FACING)) + yRot = AngleHelper.horizontalAngle(state.getValue(BlockStateProperties.HORIZONTAL_FACING)); return VecHelper.rotateCentered(vec, yRot, Axis.Y); } diff --git a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/belt/BeltProcessingBehaviour.java b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/belt/BeltProcessingBehaviour.java index 8725bce5d..3d9af3d78 100644 --- a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/belt/BeltProcessingBehaviour.java +++ b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/belt/BeltProcessingBehaviour.java @@ -43,10 +43,10 @@ public class BeltProcessingBehaviour extends TileEntityBehaviour { } public static boolean isBlocked(IBlockReader world, BlockPos processingSpace) { - BlockState blockState = world.getBlockState(processingSpace.up()); + BlockState blockState = world.getBlockState(processingSpace.above()); if (AbstractFunnelBlock.isFunnel(blockState)) return false; - return !blockState.getCollisionShape(world, processingSpace.up()) + return !blockState.getCollisionShape(world, processingSpace.above()) .isEmpty(); } diff --git a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/belt/DirectBeltInputBehaviour.java b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/belt/DirectBeltInputBehaviour.java index 823568969..a11f4f4a0 100644 --- a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/belt/DirectBeltInputBehaviour.java +++ b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/belt/DirectBeltInputBehaviour.java @@ -99,20 +99,20 @@ public class DirectBeltInputBehaviour extends TileEntityBehaviour { @Nullable public ItemStack tryExportingToBeltFunnel(ItemStack stack, @Nullable Direction side, boolean simulate) { - BlockPos funnelPos = tileEntity.getPos() - .up(); + BlockPos funnelPos = tileEntity.getBlockPos() + .above(); World world = getWorld(); BlockState funnelState = world.getBlockState(funnelPos); if (!(funnelState.getBlock() instanceof BeltFunnelBlock)) return null; - if (funnelState.get(BeltFunnelBlock.SHAPE) != Shape.PULLING) + if (funnelState.getValue(BeltFunnelBlock.SHAPE) != Shape.PULLING) return null; if (side != null && FunnelBlock.getFunnelFacing(funnelState) != side) return null; - TileEntity te = world.getTileEntity(funnelPos); + TileEntity te = world.getBlockEntity(funnelPos); if (!(te instanceof FunnelTileEntity)) return null; - if (funnelState.get(BeltFunnelBlock.POWERED)) + if (funnelState.getValue(BeltFunnelBlock.POWERED)) return stack; ItemStack insert = FunnelBlock.tryInsert(world, funnelPos, stack, simulate); if (insert.getCount() != stack.getCount() && !simulate) 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 56fcc5c91..9e43eca67 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 @@ -86,7 +86,7 @@ public class TransportedItemStackHandlerBehaviour extends TileEntityBehaviour { public TransportedItemStackHandlerBehaviour(SmartTileEntity te, ProcessingCallback processingCallback) { super(te); this.processingCallback = processingCallback; - positionGetter = t -> VecHelper.getCenterOf(te.getPos()); + positionGetter = t -> VecHelper.getCenterOf(te.getBlockPos()); } public TransportedItemStackHandlerBehaviour withStackPlacement(PositionGetter function) { diff --git a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/edgeInteraction/EdgeInteractionHandler.java b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/edgeInteraction/EdgeInteractionHandler.java index 82ca086b9..47bb85727 100644 --- a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/edgeInteraction/EdgeInteractionHandler.java +++ b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/edgeInteraction/EdgeInteractionHandler.java @@ -35,9 +35,9 @@ public class EdgeInteractionHandler { BlockPos pos = event.getPos(); PlayerEntity player = event.getPlayer(); Hand hand = event.getHand(); - ItemStack heldItem = player.getHeldItem(hand); + ItemStack heldItem = player.getItemInHand(hand); - if (player.isSneaking() || player.isSpectator()) + if (player.isShiftKeyDown() || player.isSpectator()) return; EdgeInteractionBehaviour behaviour = TileEntityBehaviour.get(world, pos, EdgeInteractionBehaviour.TYPE); if (behaviour == null) @@ -48,28 +48,28 @@ public class EdgeInteractionHandler { if (behaviour.requiredItem.orElse(heldItem.getItem()) != heldItem.getItem()) return; - Direction activatedDirection = getActivatedDirection(world, pos, ray.getFace(), ray.getHitVec(), behaviour); + Direction activatedDirection = getActivatedDirection(world, pos, ray.getDirection(), ray.getLocation(), behaviour); if (activatedDirection == null) return; if (event.getSide() != LogicalSide.CLIENT) - behaviour.connectionCallback.apply(world, pos, pos.offset(activatedDirection)); + behaviour.connectionCallback.apply(world, pos, pos.relative(activatedDirection)); event.setCanceled(true); event.setCancellationResult(ActionResultType.SUCCESS); - world.playSound(null, pos, SoundEvents.ENTITY_ITEM_FRAME_ADD_ITEM, SoundCategory.BLOCKS, .25f, .1f); + world.playSound(null, pos, SoundEvents.ITEM_FRAME_ADD_ITEM, SoundCategory.BLOCKS, .25f, .1f); } public static List getConnectiveSides(World world, BlockPos pos, Direction face, EdgeInteractionBehaviour behaviour) { List sides = new ArrayList<>(6); - if (BlockHelper.hasBlockSolidSide(world.getBlockState(pos.offset(face)), world, pos.offset(face), face.getOpposite())) + if (BlockHelper.hasBlockSolidSide(world.getBlockState(pos.relative(face)), world, pos.relative(face), face.getOpposite())) return sides; for (Direction direction : Iterate.directions) { if (direction.getAxis() == face.getAxis()) continue; - BlockPos neighbourPos = pos.offset(direction); - if (BlockHelper.hasBlockSolidSide(world.getBlockState(neighbourPos.offset(face)), world, neighbourPos.offset(face), + BlockPos neighbourPos = pos.relative(direction); + if (BlockHelper.hasBlockSolidSide(world.getBlockState(neighbourPos.relative(face)), world, neighbourPos.relative(face), face.getOpposite())) continue; if (!behaviour.connectivityPredicate.test(world, pos, face, direction)) @@ -92,7 +92,7 @@ public class EdgeInteractionHandler { static AxisAlignedBB getBB(BlockPos pos, Direction direction) { AxisAlignedBB bb = new AxisAlignedBB(pos); - Vector3i vec = direction.getDirectionVec(); + Vector3i vec = direction.getNormal(); int x = vec.getX(); int y = vec.getY(); int z = vec.getZ(); @@ -102,9 +102,9 @@ public class EdgeInteractionHandler { double absZ = Math.abs(z) * margin; bb = bb.contract(absX, absY, absZ); - bb = bb.offset(absX / 2d, absY / 2d, absZ / 2d); - bb = bb.offset(x / 2d, y / 2d, z / 2d); - bb = bb.grow(1 / 256f); + bb = bb.move(absX / 2d, absY / 2d, absZ / 2d); + bb = bb.move(x / 2d, y / 2d, z / 2d); + bb = bb.inflate(1 / 256f); return bb; } diff --git a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/edgeInteraction/EdgeInteractionRenderer.java b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/edgeInteraction/EdgeInteractionRenderer.java index 6cfcd227b..1c6d512ad 100644 --- a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/edgeInteraction/EdgeInteractionRenderer.java +++ b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/edgeInteraction/EdgeInteractionRenderer.java @@ -25,17 +25,17 @@ public class EdgeInteractionRenderer { public static void tick() { Minecraft mc = Minecraft.getInstance(); - RayTraceResult target = mc.objectMouseOver; + RayTraceResult target = mc.hitResult; if (target == null || !(target instanceof BlockRayTraceResult)) return; BlockRayTraceResult result = (BlockRayTraceResult) target; - ClientWorld world = mc.world; - BlockPos pos = result.getPos(); + ClientWorld world = mc.level; + BlockPos pos = result.getBlockPos(); PlayerEntity player = mc.player; - ItemStack heldItem = player.getHeldItemMainhand(); + ItemStack heldItem = player.getMainHandItem(); - if (player.isSneaking()) + if (player.isShiftKeyDown()) return; EdgeInteractionBehaviour behaviour = TileEntityBehaviour.get(world, pos, EdgeInteractionBehaviour.TYPE); if (behaviour == null) @@ -43,7 +43,7 @@ public class EdgeInteractionRenderer { if (behaviour.requiredItem.orElse(heldItem.getItem()) != heldItem.getItem()) return; - Direction face = result.getFace(); + Direction face = result.getDirection(); List connectiveSides = EdgeInteractionHandler.getConnectiveSides(world, pos, face, behaviour); if (connectiveSides.isEmpty()) return; @@ -52,7 +52,7 @@ public class EdgeInteractionRenderer { double bestDistance = Double.MAX_VALUE; Vector3d center = VecHelper.getCenterOf(pos); for (Direction direction : connectiveSides) { - double distance = Vector3d.of(direction.getDirectionVec()).subtract(target.getHitVec() + double distance = Vector3d.atLowerCornerOf(direction.getNormal()).subtract(target.getLocation() .subtract(center)) .length(); if (distance > bestDistance) @@ -62,9 +62,9 @@ public class EdgeInteractionRenderer { } AxisAlignedBB bb = EdgeInteractionHandler.getBB(pos, closestEdge); - boolean hit = bb.contains(target.getHitVec()); + boolean hit = bb.contains(target.getLocation()); - ValueBox box = new ValueBox(StringTextComponent.EMPTY, bb.offset(-pos.getX(), -pos.getY(), -pos.getZ()), pos); + ValueBox box = new ValueBox(StringTextComponent.EMPTY, bb.move(-pos.getX(), -pos.getY(), -pos.getZ()), pos); Vector3d textOffset = Vector3d.ZERO; boolean positive = closestEdge.getAxisDirection() == AxisDirection.POSITIVE; 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 1768fd0cd..b7098e455 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 @@ -76,7 +76,7 @@ public class FilteringBehaviour extends TileEntityBehaviour { @Override public void read(CompoundNBT nbt, boolean clientPacket) { - filter = ItemStack.read(nbt.getCompound("Filter")); + filter = ItemStack.of(nbt.getCompound("Filter")); count = nbt.getInt("FilterAmount"); if (nbt.contains("ForceScrollable")) { scrollableValue = count; @@ -89,7 +89,7 @@ public class FilteringBehaviour extends TileEntityBehaviour { public void tick() { super.tick(); - if (!getWorld().isRemote) + if (!getWorld().isClientSide) return; if (ticksUntilScrollPacket == -1) return; @@ -155,7 +155,7 @@ public class FilteringBehaviour extends TileEntityBehaviour { : (filter.getItem() instanceof FilterItem) ? 0 : Math.min(stack.getCount(), stack.getMaxStackSize()); forceClientState = true; - tileEntity.markDirty(); + tileEntity.setChanged(); tileEntity.sendData(); } @@ -164,7 +164,7 @@ public class FilteringBehaviour extends TileEntityBehaviour { if (filter.getItem() instanceof FilterItem) { Vector3d pos = VecHelper.getCenterOf(getPos()); World world = getWorld(); - world.addEntity(new ItemEntity(world, pos.x, pos.y, pos.z, filter.copy())); + world.addFreshEntity(new ItemEntity(world, pos.x, pos.y, pos.z, filter.copy())); } super.destroy(); @@ -192,11 +192,11 @@ public class FilteringBehaviour extends TileEntityBehaviour { } public boolean test(ItemStack stack) { - return !isActive() || filter.isEmpty() || FilterItem.test(tileEntity.getWorld(), stack, filter); + return !isActive() || filter.isEmpty() || FilterItem.test(tileEntity.getLevel(), stack, filter); } public boolean test(FluidStack stack) { - return !isActive() || filter.isEmpty() || FilterItem.test(tileEntity.getWorld(), stack, filter); + return !isActive() || filter.isEmpty() || FilterItem.test(tileEntity.getLevel(), stack, filter); } @Override @@ -206,7 +206,7 @@ public class FilteringBehaviour extends TileEntityBehaviour { public boolean testHit(Vector3d hit) { BlockState state = tileEntity.getBlockState(); - Vector3d localHit = hit.subtract(Vector3d.of(tileEntity.getPos())); + Vector3d localHit = hit.subtract(Vector3d.atLowerCornerOf(tileEntity.getBlockPos())); return slotPositioning.testHit(state, localHit); } diff --git a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/filtering/FilteringCountUpdatePacket.java b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/filtering/FilteringCountUpdatePacket.java index d6548d1e8..562ba13ab 100644 --- a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/filtering/FilteringCountUpdatePacket.java +++ b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/filtering/FilteringCountUpdatePacket.java @@ -36,7 +36,7 @@ public class FilteringCountUpdatePacket extends TileEntityConfigurationPacket { CompoundNBT compound = new CompoundNBT(); compound.putInt("Side", entry.getKey() - .getIndex()); + .get3DDataValue()); entry.getValue() .write(compound, clientPacket); return compound; @@ -75,7 +75,7 @@ public class SidedFilteringBehaviour extends FilteringBehaviour { @Override public void read(CompoundNBT nbt, boolean clientPacket) { NBTHelper.iterateCompoundList(nbt.getList("Filters", NBT.TAG_COMPOUND), compound -> { - Direction face = Direction.byIndex(compound.getInt("Side")); + Direction face = Direction.from3DDataValue(compound.getInt("Side")); if (sidedFilters.containsKey(face)) sidedFilters.get(face) .read(compound, clientPacket); @@ -139,7 +139,7 @@ public class SidedFilteringBehaviour extends FilteringBehaviour { public boolean testHit(Direction direction, Vector3d hit) { ValueBoxTransform.Sided sidedPositioning = (Sided) slotPositioning; BlockState state = tileEntity.getBlockState(); - Vector3d localHit = hit.subtract(Vector3d.of(tileEntity.getPos())); + Vector3d localHit = hit.subtract(Vector3d.atLowerCornerOf(tileEntity.getBlockPos())); return sidedPositioning.fromSide(direction) .testHit(state, localHit); } 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 9841bbb8d..a78883b78 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 @@ -20,6 +20,8 @@ import net.minecraftforge.common.util.LazyOptional; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.capability.IFluidHandler; +import net.minecraftforge.fluids.capability.IFluidHandler.FluidAction; + public class SmartFluidTankBehaviour extends TileEntityBehaviour { public static BehaviourType @@ -88,7 +90,7 @@ public class SmartFluidTankBehaviour extends TileEntityBehaviour { @Override public void initialize() { super.initialize(); - if (getWorld().isRemote) + if (getWorld().isClientSide) return; foreach(ts -> { ts.fluidLevel.forceNextSync(); @@ -132,7 +134,7 @@ public class SmartFluidTankBehaviour extends TileEntityBehaviour { protected void updateFluids() { fluidUpdateCallback.run(); tileEntity.sendData(); - tileEntity.markDirty(); + tileEntity.setChanged(); } @Override @@ -239,10 +241,10 @@ public class SmartFluidTankBehaviour extends TileEntityBehaviour { } public void onFluidStackChanged() { - if (!tileEntity.hasWorld()) + if (!tileEntity.hasLevel()) return; fluidLevel.chase(tank.getFluidAmount() / (float) tank.getCapacity(), .25, Chaser.EXP); - if (!getWorld().isRemote) + if (!getWorld().isClientSide) sendDataLazily(); if (tileEntity.isVirtual() && !tank.getFluid() .isEmpty()) diff --git a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/inventory/InvManipulationBehaviour.java b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/inventory/InvManipulationBehaviour.java index 80fcbf014..fa9ae5f95 100644 --- a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/inventory/InvManipulationBehaviour.java +++ b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/inventory/InvManipulationBehaviour.java @@ -100,7 +100,7 @@ public class InvManipulationBehaviour extends TileEntityBehaviour { boolean shouldSimulate = simulateNext; simulateNext = false; - if (getWorld().isRemote) + if (getWorld().isClientSide) return ItemStack.EMPTY; IItemHandler inventory = targetCapability.orElse(null); if (inventory == null) @@ -147,7 +147,7 @@ public class InvManipulationBehaviour extends TileEntityBehaviour { @Override public void onNeighborChanged(BlockPos neighborPos) { - BlockFace targetBlockFace = target.getTarget(getWorld(), tileEntity.getPos(), tileEntity.getBlockState()); + BlockFace targetBlockFace = target.getTarget(getWorld(), tileEntity.getBlockPos(), tileEntity.getBlockState()); if (targetBlockFace.getConnectedPos().equals(neighborPos)) onHandlerInvalidated(targetCapability); } @@ -182,16 +182,16 @@ public class InvManipulationBehaviour extends TileEntityBehaviour { } public void findNewCapability() { - BlockFace targetBlockFace = target.getTarget(getWorld(), tileEntity.getPos(), tileEntity.getBlockState()) + BlockFace targetBlockFace = target.getTarget(getWorld(), tileEntity.getBlockPos(), tileEntity.getBlockState()) .getOpposite(); BlockPos pos = targetBlockFace.getPos(); World world = getWorld(); targetCapability = LazyOptional.empty(); - if (!world.isBlockPresent(pos)) + if (!world.isLoaded(pos)) return; - TileEntity invTE = world.getTileEntity(pos); + TileEntity invTE = world.getBlockEntity(pos); if (invTE == null) return; targetCapability = bypassSided ? invTE.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) @@ -209,14 +209,14 @@ public class InvManipulationBehaviour extends TileEntityBehaviour { public interface InterfaceProvider { public static InterfaceProvider towardBlockFacing() { - return (w, p, s) -> new BlockFace(p, s.contains(BlockStateProperties.FACING) ? s.get(BlockStateProperties.FACING) - : s.get(BlockStateProperties.HORIZONTAL_FACING)); + return (w, p, s) -> new BlockFace(p, s.hasProperty(BlockStateProperties.FACING) ? s.getValue(BlockStateProperties.FACING) + : s.getValue(BlockStateProperties.HORIZONTAL_FACING)); } public static InterfaceProvider oppositeOfBlockFacing() { return (w, p, s) -> new BlockFace(p, - (s.contains(BlockStateProperties.FACING) ? s.get(BlockStateProperties.FACING) - : s.get(BlockStateProperties.HORIZONTAL_FACING)).getOpposite()); + (s.hasProperty(BlockStateProperties.FACING) ? s.getValue(BlockStateProperties.FACING) + : s.getValue(BlockStateProperties.HORIZONTAL_FACING)).getOpposite()); } public BlockFace getTarget(World world, BlockPos pos, BlockState blockState); 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 75aa226e0..e10bc096e 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 @@ -102,7 +102,7 @@ public class LinkBehaviour extends TileEntityBehaviour implements IRedstoneLinka @Override public void initialize() { super.initialize(); - if (getWorld().isRemote) + if (getWorld().isClientSide) return; getHandler().addToNetwork(getWorld(), this); newPosition = true; @@ -116,7 +116,7 @@ public class LinkBehaviour extends TileEntityBehaviour implements IRedstoneLinka @Override public void remove() { super.remove(); - if (getWorld().isRemote) + if (getWorld().isClientSide) return; getHandler().removeFromNetwork(getWorld(), this); } @@ -130,23 +130,23 @@ public class LinkBehaviour extends TileEntityBehaviour implements IRedstoneLinka public void write(CompoundNBT nbt, boolean clientPacket) { super.write(nbt, clientPacket); nbt.put("FrequencyFirst", frequencyFirst.getStack() - .write(new CompoundNBT())); + .save(new CompoundNBT())); nbt.put("FrequencyLast", frequencyLast.getStack() - .write(new CompoundNBT())); - nbt.putLong("LastKnownPosition", tileEntity.getPos() - .toLong()); + .save(new CompoundNBT())); + nbt.putLong("LastKnownPosition", tileEntity.getBlockPos() + .asLong()); } @Override public void read(CompoundNBT nbt, boolean clientPacket) { - long positionInTag = tileEntity.getPos() - .toLong(); + long positionInTag = tileEntity.getBlockPos() + .asLong(); long positionKey = nbt.getLong("LastKnownPosition"); newPosition = positionInTag != positionKey; super.read(nbt, clientPacket); - frequencyFirst = Frequency.of(ItemStack.read(nbt.getCompound("FrequencyFirst"))); - frequencyLast = Frequency.of(ItemStack.read(nbt.getCompound("FrequencyLast"))); + frequencyFirst = Frequency.of(ItemStack.of(nbt.getCompound("FrequencyFirst"))); + frequencyLast = Frequency.of(ItemStack.of(nbt.getCompound("FrequencyLast"))); } public void setFrequency(boolean first, ItemStack stack) { @@ -154,7 +154,7 @@ public class LinkBehaviour extends TileEntityBehaviour implements IRedstoneLinka stack.setCount(1); ItemStack toCompare = first ? frequencyFirst.getStack() : frequencyLast.getStack(); boolean changed = - !ItemStack.areItemsEqual(stack, toCompare) || !ItemStack.areItemStackTagsEqual(stack, toCompare); + !ItemStack.isSame(stack, toCompare) || !ItemStack.tagMatches(stack, toCompare); if (changed) getHandler().removeFromNetwork(getWorld(), this); @@ -201,13 +201,13 @@ public class LinkBehaviour extends TileEntityBehaviour implements IRedstoneLinka public boolean testHit(Boolean first, Vector3d hit) { BlockState state = tileEntity.getBlockState(); - Vector3d localHit = hit.subtract(Vector3d.of(tileEntity.getPos())); + Vector3d localHit = hit.subtract(Vector3d.atLowerCornerOf(tileEntity.getBlockPos())); return (first ? firstSlot : secondSlot).testHit(state, localHit); } @Override public boolean isAlive() { - return !tileEntity.isRemoved() && getWorld().getTileEntity(getPos()) == tileEntity; + return !tileEntity.isRemoved() && getWorld().getBlockEntity(getPos()) == tileEntity; } @Override diff --git a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/linked/LinkHandler.java b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/linked/LinkHandler.java index 1c5e6319f..1c428e62d 100644 --- a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/linked/LinkHandler.java +++ b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/linked/LinkHandler.java @@ -30,14 +30,14 @@ public class LinkHandler { PlayerEntity player = event.getPlayer(); Hand hand = event.getHand(); - if (player.isSneaking() || player.isSpectator()) + if (player.isShiftKeyDown() || player.isSpectator()) return; LinkBehaviour behaviour = TileEntityBehaviour.get(world, pos, LinkBehaviour.TYPE); if (behaviour == null) return; - ItemStack heldItem = player.getHeldItem(hand); + ItemStack heldItem = player.getItemInHand(hand); BlockRayTraceResult ray = RaycastHelper.rayTraceRange(world, player, 10); if (ray == null) return; @@ -47,12 +47,12 @@ public class LinkHandler { return; for (boolean first : Arrays.asList(false, true)) { - if (behaviour.testHit(first, ray.getHitVec())) { + if (behaviour.testHit(first, ray.getLocation())) { if (event.getSide() != LogicalSide.CLIENT) behaviour.setFrequency(first, heldItem); event.setCanceled(true); event.setCancellationResult(ActionResultType.SUCCESS); - world.playSound(null, pos, SoundEvents.ENTITY_ITEM_FRAME_ADD_ITEM, SoundCategory.BLOCKS, .25f, .1f); + world.playSound(null, pos, SoundEvents.ITEM_FRAME_ADD_ITEM, SoundCategory.BLOCKS, .25f, .1f); } } } diff --git a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/linked/LinkRenderer.java b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/linked/LinkRenderer.java index 6386ff9fe..1c51f5861 100644 --- a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/linked/LinkRenderer.java +++ b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/linked/LinkRenderer.java @@ -27,13 +27,13 @@ public class LinkRenderer { public static void tick() { Minecraft mc = Minecraft.getInstance(); - RayTraceResult target = mc.objectMouseOver; + RayTraceResult target = mc.hitResult; if (target == null || !(target instanceof BlockRayTraceResult)) return; BlockRayTraceResult result = (BlockRayTraceResult) target; - ClientWorld world = mc.world; - BlockPos pos = result.getPos(); + ClientWorld world = mc.level; + BlockPos pos = result.getBlockPos(); LinkBehaviour behaviour = TileEntityBehaviour.get(world, pos, LinkBehaviour.TYPE); if (behaviour == null) @@ -43,9 +43,9 @@ public class LinkRenderer { ITextComponent freq2 = Lang.translate("logistics.secondFrequency"); for (boolean first : Iterate.trueAndFalse) { - AxisAlignedBB bb = new AxisAlignedBB(Vector3d.ZERO, Vector3d.ZERO).grow(.25f); + AxisAlignedBB bb = new AxisAlignedBB(Vector3d.ZERO, Vector3d.ZERO).inflate(.25f); ITextComponent label = first ? freq1 : freq2; - boolean hit = behaviour.testHit(first, target.getHitVec()); + boolean hit = behaviour.testHit(first, target.getLocation()); ValueBoxTransform transform = first ? behaviour.firstSlot : behaviour.secondSlot; ValueBox box = new ValueBox(label, bb, pos).withColors(0x601F18, 0xB73C2D) @@ -54,7 +54,7 @@ public class LinkRenderer { CreateClient.OUTLINER.showValueBox(Pair.of(Boolean.valueOf(first), pos), box.transform(transform)) .lineWidth(1 / 64f) .withFaceTexture(hit ? AllSpecialTextures.THIN_CHECKERED : null) - .highlightFace(result.getFace()); + .highlightFace(result.getDirection()); } } @@ -71,10 +71,10 @@ public class LinkRenderer { ValueBoxTransform transform = first ? behaviour.firstSlot : behaviour.secondSlot; ItemStack stack = first ? behaviour.frequencyFirst.getStack() : behaviour.frequencyLast.getStack(); - ms.push(); + ms.pushPose(); transform.transform(te.getBlockState(), ms); ValueBoxRenderer.renderItemIntoValueBox(stack, ms, buffer, light, overlay); - ms.pop(); + ms.popPose(); } } 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 d189a689d..090c32a21 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 @@ -81,7 +81,7 @@ public class ScrollValueBehaviour extends TileEntityBehaviour { public void tick() { super.tick(); - if (!getWorld().isRemote) + if (!getWorld().isClientSide) return; if (ticksUntilScrollPacket == -1) return; @@ -154,7 +154,7 @@ public class ScrollValueBehaviour extends TileEntityBehaviour { this.value = value; forceClientState = true; callback.accept(value); - tileEntity.markDirty(); + tileEntity.setChanged(); tileEntity.sendData(); scrollableValue = value; } @@ -178,7 +178,7 @@ public class ScrollValueBehaviour extends TileEntityBehaviour { public boolean testHit(Vector3d hit) { BlockState state = tileEntity.getBlockState(); - Vector3d localHit = hit.subtract(Vector3d.of(tileEntity.getPos())); + Vector3d localHit = hit.subtract(Vector3d.atLowerCornerOf(tileEntity.getBlockPos())); return slotPositioning.testHit(state, localHit); } diff --git a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/scrollvalue/ScrollValueHandler.java b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/scrollvalue/ScrollValueHandler.java index 1ae96c132..9ccd62138 100644 --- a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/scrollvalue/ScrollValueHandler.java +++ b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/scrollvalue/ScrollValueHandler.java @@ -30,32 +30,32 @@ public class ScrollValueHandler { @OnlyIn(Dist.CLIENT) public static boolean onScroll(double delta) { - RayTraceResult objectMouseOver = Minecraft.getInstance().objectMouseOver; + RayTraceResult objectMouseOver = Minecraft.getInstance().hitResult; if (!(objectMouseOver instanceof BlockRayTraceResult)) return false; BlockRayTraceResult result = (BlockRayTraceResult) objectMouseOver; Minecraft mc = Minecraft.getInstance(); - ClientWorld world = mc.world; - BlockPos blockPos = result.getPos(); + ClientWorld world = mc.level; + BlockPos blockPos = result.getBlockPos(); ScrollValueBehaviour scrolling = TileEntityBehaviour.get(world, blockPos, ScrollValueBehaviour.TYPE); if (scrolling == null) return false; if (!scrolling.isActive()) return false; - if (!mc.player.isAllowEdit()) + if (!mc.player.mayBuild()) return false; passiveScrollDirection = (float) -delta; wrenchCog.bump(3, -delta * 10); int prev = scrolling.scrollableValue; - if (scrolling.needsWrench && !AllItems.WRENCH.isIn(mc.player.getHeldItemMainhand())) + if (scrolling.needsWrench && !AllItems.WRENCH.isIn(mc.player.getMainHandItem())) return false; if (scrolling.slotPositioning instanceof Sided) - ((Sided) scrolling.slotPositioning).fromSide(result.getFace()); - if (!scrolling.testHit(objectMouseOver.getHitVec())) + ((Sided) scrolling.slotPositioning).fromSide(result.getDirection()); + if (!scrolling.testHit(objectMouseOver.getLocation())) return false; if (scrolling instanceof BulkScrollValueBehaviour && AllKeys.ctrlDown()) { diff --git a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/scrollvalue/ScrollValueRenderer.java b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/scrollvalue/ScrollValueRenderer.java index ab5521204..f157c98fc 100644 --- a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/scrollvalue/ScrollValueRenderer.java +++ b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/scrollvalue/ScrollValueRenderer.java @@ -25,30 +25,30 @@ public class ScrollValueRenderer { public static void tick() { Minecraft mc = Minecraft.getInstance(); - RayTraceResult target = mc.objectMouseOver; + RayTraceResult target = mc.hitResult; if (target == null || !(target instanceof BlockRayTraceResult)) return; BlockRayTraceResult result = (BlockRayTraceResult) target; - ClientWorld world = mc.world; - BlockPos pos = result.getPos(); - Direction face = result.getFace(); + ClientWorld world = mc.level; + BlockPos pos = result.getBlockPos(); + Direction face = result.getDirection(); ScrollValueBehaviour behaviour = TileEntityBehaviour.get(world, pos, ScrollValueBehaviour.TYPE); if (behaviour == null) return; if (!behaviour.isActive()) return; - if (behaviour.needsWrench && !AllItems.WRENCH.isIn(mc.player.getHeldItemMainhand())) + if (behaviour.needsWrench && !AllItems.WRENCH.isIn(mc.player.getMainHandItem())) return; - boolean highlight = behaviour.testHit(target.getHitVec()); + boolean highlight = behaviour.testHit(target.getLocation()); if (behaviour instanceof BulkScrollValueBehaviour && AllKeys.ctrlDown()) { BulkScrollValueBehaviour bulkScrolling = (BulkScrollValueBehaviour) behaviour; for (SmartTileEntity smartTileEntity : bulkScrolling.getBulk()) { ScrollValueBehaviour other = smartTileEntity.getBehaviour(ScrollValueBehaviour.TYPE); if (other != null) - addBox(world, smartTileEntity.getPos(), face, other, highlight); + addBox(world, smartTileEntity.getBlockPos(), face, other, highlight); } } else addBox(world, pos, face, behaviour, highlight); @@ -56,9 +56,9 @@ public class ScrollValueRenderer { protected static void addBox(ClientWorld world, BlockPos pos, Direction face, ScrollValueBehaviour behaviour, boolean highlight) { - AxisAlignedBB bb = new AxisAlignedBB(Vector3d.ZERO, Vector3d.ZERO).grow(.5f) + AxisAlignedBB bb = new AxisAlignedBB(Vector3d.ZERO, Vector3d.ZERO).inflate(.5f) .contract(0, 0, -.5f) - .offset(0, 0, -.125f); + .move(0, 0, -.125f); ITextComponent label = behaviour.label; ValueBox box; diff --git a/src/main/java/com/simibubi/create/foundation/tileEntity/renderer/ColoredOverlayTileEntityRenderer.java b/src/main/java/com/simibubi/create/foundation/tileEntity/renderer/ColoredOverlayTileEntityRenderer.java index 2b47c21fb..c6366b8da 100644 --- a/src/main/java/com/simibubi/create/foundation/tileEntity/renderer/ColoredOverlayTileEntityRenderer.java +++ b/src/main/java/com/simibubi/create/foundation/tileEntity/renderer/ColoredOverlayTileEntityRenderer.java @@ -19,10 +19,10 @@ public abstract class ColoredOverlayTileEntityRenderer ext protected void renderSafe(T te, float partialTicks, MatrixStack ms, IRenderTypeBuffer buffer, int light, int overlay) { - if (Backend.getInstance().canUseInstancing(te.getWorld())) return; + if (Backend.getInstance().canUseInstancing(te.getLevel())) return; SuperByteBuffer render = render(getOverlayBuffer(te), getColor(te, partialTicks), light); - render.renderInto(ms, buffer.getBuffer(RenderType.getSolid())); + render.renderInto(ms, buffer.getBuffer(RenderType.solid())); } protected abstract int getColor(T te, float partialTicks); diff --git a/src/main/java/com/simibubi/create/foundation/tileEntity/renderer/SafeTileEntityRenderer.java b/src/main/java/com/simibubi/create/foundation/tileEntity/renderer/SafeTileEntityRenderer.java index 6c02f67f9..d69e54731 100644 --- a/src/main/java/com/simibubi/create/foundation/tileEntity/renderer/SafeTileEntityRenderer.java +++ b/src/main/java/com/simibubi/create/foundation/tileEntity/renderer/SafeTileEntityRenderer.java @@ -26,7 +26,7 @@ public abstract class SafeTileEntityRenderer extends TileE int overlay); public boolean isInvalid(T te) { - return !te.hasWorld() || te.getBlockState() + return !te.hasLevel() || te.getBlockState() .getBlock() == Blocks.AIR; } } diff --git a/src/main/java/com/simibubi/create/foundation/utility/AbstractBlockBreakQueue.java b/src/main/java/com/simibubi/create/foundation/utility/AbstractBlockBreakQueue.java index cc4989e8d..4bef24374 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/AbstractBlockBreakQueue.java +++ b/src/main/java/com/simibubi/create/foundation/utility/AbstractBlockBreakQueue.java @@ -28,7 +28,7 @@ public abstract class AbstractBlockBreakQueue { public void destroyBlocks(World world, @Nullable LivingEntity entity, BiConsumer drop) { PlayerEntity playerEntity = entity instanceof PlayerEntity ? ((PlayerEntity) entity) : null; ItemStack toDamage = - playerEntity != null && !playerEntity.isCreative() ? playerEntity.getHeldItemMainhand() : ItemStack.EMPTY; + playerEntity != null && !playerEntity.isCreative() ? playerEntity.getMainHandItem() : ItemStack.EMPTY; destroyBlocks(world, toDamage, playerEntity, drop); } diff --git a/src/main/java/com/simibubi/create/foundation/utility/AngleHelper.java b/src/main/java/com/simibubi/create/foundation/utility/AngleHelper.java index 3f8723672..4ed984af0 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/AngleHelper.java +++ b/src/main/java/com/simibubi/create/foundation/utility/AngleHelper.java @@ -9,7 +9,7 @@ public class AngleHelper { * Legacy method. See {@link #horizontalAngleNew(Direction)} for new method. */ public static float horizontalAngle(Direction facing) { - float angle = facing.getHorizontalAngle(); + float angle = facing.toYRot(); if (facing.getAxis() == Axis.X) angle = -angle; return angle; @@ -22,7 +22,7 @@ public class AngleHelper { if (facing.getAxis().isVertical()) { return 0; } - float angle = facing.getHorizontalAngle(); + float angle = facing.toYRot(); if (facing.getAxis() == Axis.X) angle = -angle; return angle; diff --git a/src/main/java/com/simibubi/create/foundation/utility/AnimationTickHolder.java b/src/main/java/com/simibubi/create/foundation/utility/AnimationTickHolder.java index efc5f90f8..2564c2cc6 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/AnimationTickHolder.java +++ b/src/main/java/com/simibubi/create/foundation/utility/AnimationTickHolder.java @@ -19,7 +19,7 @@ public class AnimationTickHolder { public static void tick() { if (!Minecraft.getInstance() - .isGamePaused()) { + .isPaused()) { ticks = (ticks + 1) % 1_728_000; // wrap around every 24 hours so we maintain enough floating point precision } else { paused_ticks = (paused_ticks + 1) % 1_728_000; @@ -40,7 +40,7 @@ public class AnimationTickHolder { public static float getPartialTicks() { Minecraft mc = Minecraft.getInstance(); - return (mc.isGamePaused() ? mc.renderPartialTicksPaused : mc.getRenderPartialTicks()); + return (mc.isPaused() ? mc.pausePartialTick : mc.getFrameTime()); } public static int getTicks(IWorld world) { diff --git a/src/main/java/com/simibubi/create/foundation/utility/BlockFace.java b/src/main/java/com/simibubi/create/foundation/utility/BlockFace.java index b26edb76c..a995e5fae 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/BlockFace.java +++ b/src/main/java/com/simibubi/create/foundation/utility/BlockFace.java @@ -34,7 +34,7 @@ public class BlockFace extends Pair { } public BlockPos getConnectedPos() { - return getPos().offset(getFace()); + return getPos().relative(getFace()); } public CompoundNBT serializeNBT() { diff --git a/src/main/java/com/simibubi/create/foundation/utility/BlockHelper.java b/src/main/java/com/simibubi/create/foundation/utility/BlockHelper.java index 929a73904..b8f0102dc 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/BlockHelper.java +++ b/src/main/java/com/simibubi/create/foundation/utility/BlockHelper.java @@ -60,10 +60,10 @@ public class BlockHelper { ClientWorld world = (ClientWorld) worldIn; VoxelShape voxelshape = state.getShape(world, pos); MutableInt amtBoxes = new MutableInt(0); - voxelshape.forEachBox((x1, y1, z1, x2, y2, z2) -> amtBoxes.increment()); + voxelshape.forAllBoxes((x1, y1, z1, x2, y2, z2) -> amtBoxes.increment()); double chance = 1d / amtBoxes.getValue(); - voxelshape.forEachBox((x1, y1, z1, x2, y2, z2) -> { + voxelshape.forAllBoxes((x1, y1, z1, x2, y2, z2) -> { double d1 = Math.min(1.0D, x2 - x1); double d2 = Math.min(1.0D, y2 - y1); double d3 = Math.min(1.0D, z2 - z1); @@ -74,7 +74,7 @@ public class BlockHelper { for (int l = 0; l < i; ++l) { for (int i1 = 0; i1 < j; ++i1) { for (int j1 = 0; j1 < k; ++j1) { - if (world.rand.nextDouble() > chance) + if (world.random.nextDouble() > chance) continue; double d4 = ((double) l + 0.5D) / (double) i; @@ -84,8 +84,8 @@ public class BlockHelper { double d8 = d5 * d2 + y1; double d9 = d6 * d3 + z1; manager - .addEffect((new DiggingParticle(world, (double) pos.getX() + d7, (double) pos.getY() + d8, - (double) pos.getZ() + d9, d4 - 0.5D, d5 - 0.5D, d6 - 0.5D, state)).setBlockPos(pos)); + .add((new DiggingParticle(world, (double) pos.getX() + d7, (double) pos.getY() + d8, + (double) pos.getZ() + d9, d4 - 0.5D, d5 - 0.5D, d6 - 0.5D, state)).init(pos)); } } } @@ -94,32 +94,32 @@ public class BlockHelper { } public static BlockState setZeroAge(BlockState blockState) { - if (blockState.contains(BlockStateProperties.AGE_0_1)) - return blockState.with(BlockStateProperties.AGE_0_1, 0); - if (blockState.contains(BlockStateProperties.AGE_0_2)) - return blockState.with(BlockStateProperties.AGE_0_2, 0); - if (blockState.contains(BlockStateProperties.AGE_0_3)) - return blockState.with(BlockStateProperties.AGE_0_3, 0); - if (blockState.contains(BlockStateProperties.AGE_0_5)) - return blockState.with(BlockStateProperties.AGE_0_5, 0); - if (blockState.contains(BlockStateProperties.AGE_0_7)) - return blockState.with(BlockStateProperties.AGE_0_7, 0); - if (blockState.contains(BlockStateProperties.AGE_0_15)) - return blockState.with(BlockStateProperties.AGE_0_15, 0); - if (blockState.contains(BlockStateProperties.AGE_0_25)) - return blockState.with(BlockStateProperties.AGE_0_25, 0); - if (blockState.contains(BlockStateProperties.HONEY_LEVEL)) - return blockState.with(BlockStateProperties.HONEY_LEVEL, 0); - if (blockState.contains(BlockStateProperties.HATCH_0_2)) - return blockState.with(BlockStateProperties.HATCH_0_2, 0); - if (blockState.contains(BlockStateProperties.STAGE_0_1)) - return blockState.with(BlockStateProperties.STAGE_0_1, 0); - if (blockState.contains(BlockStateProperties.LEVEL_0_3)) - return blockState.with(BlockStateProperties.LEVEL_0_3, 0); - if (blockState.contains(BlockStateProperties.LEVEL_0_8)) - return blockState.with(BlockStateProperties.LEVEL_0_8, 0); - if (blockState.contains(BlockStateProperties.EXTENDED)) - return blockState.with(BlockStateProperties.EXTENDED, false); + if (blockState.hasProperty(BlockStateProperties.AGE_1)) + return blockState.setValue(BlockStateProperties.AGE_1, 0); + if (blockState.hasProperty(BlockStateProperties.AGE_2)) + return blockState.setValue(BlockStateProperties.AGE_2, 0); + if (blockState.hasProperty(BlockStateProperties.AGE_3)) + return blockState.setValue(BlockStateProperties.AGE_3, 0); + if (blockState.hasProperty(BlockStateProperties.AGE_5)) + return blockState.setValue(BlockStateProperties.AGE_5, 0); + if (blockState.hasProperty(BlockStateProperties.AGE_7)) + return blockState.setValue(BlockStateProperties.AGE_7, 0); + if (blockState.hasProperty(BlockStateProperties.AGE_15)) + return blockState.setValue(BlockStateProperties.AGE_15, 0); + if (blockState.hasProperty(BlockStateProperties.AGE_25)) + return blockState.setValue(BlockStateProperties.AGE_25, 0); + if (blockState.hasProperty(BlockStateProperties.LEVEL_HONEY)) + return blockState.setValue(BlockStateProperties.LEVEL_HONEY, 0); + if (blockState.hasProperty(BlockStateProperties.HATCH)) + return blockState.setValue(BlockStateProperties.HATCH, 0); + if (blockState.hasProperty(BlockStateProperties.STAGE)) + return blockState.setValue(BlockStateProperties.STAGE, 0); + if (blockState.hasProperty(BlockStateProperties.LEVEL_CAULDRON)) + return blockState.setValue(BlockStateProperties.LEVEL_CAULDRON, 0); + if (blockState.hasProperty(BlockStateProperties.LEVEL_COMPOSTER)) + return blockState.setValue(BlockStateProperties.LEVEL_COMPOSTER, 0); + if (blockState.hasProperty(BlockStateProperties.EXTENDED)) + return blockState.setValue(BlockStateProperties.EXTENDED, false); return blockState; } @@ -127,41 +127,41 @@ public class BlockHelper { int amountFound = 0; Item required = getRequiredItem(block).getItem(); - boolean needsTwo = block.contains(BlockStateProperties.SLAB_TYPE) - && block.get(BlockStateProperties.SLAB_TYPE) == SlabType.DOUBLE; + boolean needsTwo = block.hasProperty(BlockStateProperties.SLAB_TYPE) + && block.getValue(BlockStateProperties.SLAB_TYPE) == SlabType.DOUBLE; if (needsTwo) amount *= 2; - if (block.contains(BlockStateProperties.EGGS_1_4)) - amount *= block.get(BlockStateProperties.EGGS_1_4); + if (block.hasProperty(BlockStateProperties.EGGS)) + amount *= block.getValue(BlockStateProperties.EGGS); - if (block.contains(BlockStateProperties.PICKLES_1_4)) - amount *= block.get(BlockStateProperties.PICKLES_1_4); + if (block.hasProperty(BlockStateProperties.PICKLES)) + amount *= block.getValue(BlockStateProperties.PICKLES); { // Try held Item first - int preferredSlot = player.inventory.currentItem; - ItemStack itemstack = player.inventory.getStackInSlot(preferredSlot); + int preferredSlot = player.inventory.selected; + ItemStack itemstack = player.inventory.getItem(preferredSlot); int count = itemstack.getCount(); if (itemstack.getItem() == required && count > 0) { int taken = Math.min(count, amount - amountFound); - player.inventory.setInventorySlotContents(preferredSlot, + player.inventory.setItem(preferredSlot, new ItemStack(itemstack.getItem(), count - taken)); amountFound += taken; } } // Search inventory - for (int i = 0; i < player.inventory.getSizeInventory(); ++i) { + for (int i = 0; i < player.inventory.getContainerSize(); ++i) { if (amountFound == amount) break; - ItemStack itemstack = player.inventory.getStackInSlot(i); + ItemStack itemstack = player.inventory.getItem(i); int count = itemstack.getCount(); if (itemstack.getItem() == required && count > 0) { int taken = Math.min(count, amount - amountFound); - player.inventory.setInventorySlotContents(i, new ItemStack(itemstack.getItem(), count - taken)); + player.inventory.setItem(i, new ItemStack(itemstack.getItem(), count - taken)); amountFound += taken; } } @@ -169,7 +169,7 @@ public class BlockHelper { if (needsTwo) { // Give back 1 if uneven amount was removed if (amountFound % 2 != 0) - player.inventory.addItemStackToInventory(new ItemStack(required)); + player.inventory.add(new ItemStack(required)); amountFound /= 2; } @@ -186,7 +186,7 @@ public class BlockHelper { } public static void destroyBlock(World world, BlockPos pos, float effectChance) { - destroyBlock(world, pos, effectChance, stack -> Block.spawnAsEntity(world, pos, stack)); + destroyBlock(world, pos, effectChance, stack -> Block.popResource(world, pos, stack)); } public static void destroyBlock(World world, BlockPos pos, float effectChance, @@ -198,9 +198,9 @@ public class BlockHelper { float effectChance, Consumer droppedItemCallback) { FluidState fluidState = world.getFluidState(pos); BlockState state = world.getBlockState(pos); - if (world.rand.nextFloat() < effectChance) - world.playEvent(2001, pos, Block.getStateId(state)); - TileEntity tileentity = state.hasTileEntity() ? world.getTileEntity(pos) : null; + if (world.random.nextFloat() < effectChance) + world.levelEvent(2001, pos, Block.getId(state)); + TileEntity tileentity = state.hasTileEntity() ? world.getBlockEntity(pos) : null; if (player != null) { BlockEvent.BreakEvent event = new BlockEvent.BreakEvent(world, pos, state, player); MinecraftForge.EVENT_BUS.post(event); @@ -209,25 +209,25 @@ public class BlockHelper { if (event.getExpToDrop() > 0 && world instanceof ServerWorld) state.getBlock() - .dropXpOnBlockBreak((ServerWorld) world, pos, event.getExpToDrop()); + .popExperience((ServerWorld) world, pos, event.getExpToDrop()); - usedTool.onBlockDestroyed(world, state, pos, player); - player.addStat(Stats.BLOCK_MINED.get(state.getBlock())); + usedTool.mineBlock(world, state, pos, player); + player.awardStat(Stats.BLOCK_MINED.get(state.getBlock())); } if (world instanceof ServerWorld && world.getGameRules() - .getBoolean(GameRules.DO_TILE_DROPS) && !world.restoringBlockSnapshots + .getBoolean(GameRules.RULE_DOBLOCKDROPS) && !world.restoringBlockSnapshots && (player == null || !player.isCreative())) { for (ItemStack itemStack : Block.getDrops(state, (ServerWorld) world, pos, tileentity, player, usedTool)) droppedItemCallback.accept(itemStack); - state.spawnAdditionalDrops((ServerWorld) world, pos, ItemStack.EMPTY); + state.spawnAfterBreak((ServerWorld) world, pos, ItemStack.EMPTY); } - world.setBlockState(pos, fluidState.getBlockState()); + world.setBlockAndUpdate(pos, fluidState.createLegacyBlock()); } public static boolean isSolidWall(IBlockReader reader, BlockPos fromPos, Direction toDirection) { - return hasBlockSolidSide(reader.getBlockState(fromPos.offset(toDirection)), reader, fromPos.offset(toDirection), + return hasBlockSolidSide(reader.getBlockState(fromPos.relative(toDirection)), reader, fromPos.relative(toDirection), toDirection.getOpposite()); } @@ -248,69 +248,69 @@ public class BlockHelper { chunk.getSections()[j >> 4] = chunksection; } BlockState old = chunksection.setBlockState(i, j & 15, k, state); - chunk.markDirty(); + chunk.markUnsaved(); world.markAndNotifyBlock(target, chunk, old, state, 82, 512); - world.setBlockState(target, state, 82); - world.neighborChanged(target, world.getBlockState(target.down()).getBlock(), target.down()); + world.setBlock(target, state, 82); + world.neighborChanged(target, world.getBlockState(target.below()).getBlock(), target.below()); } public static void placeSchematicBlock(World world, BlockState state, BlockPos target, ItemStack stack, @Nullable CompoundNBT data) { // Piston - if (state.contains(BlockStateProperties.EXTENDED)) - state = state.with(BlockStateProperties.EXTENDED, Boolean.FALSE); - if (state.contains(BlockStateProperties.WATERLOGGED)) - state = state.with(BlockStateProperties.WATERLOGGED, Boolean.FALSE); + if (state.hasProperty(BlockStateProperties.EXTENDED)) + state = state.setValue(BlockStateProperties.EXTENDED, Boolean.FALSE); + if (state.hasProperty(BlockStateProperties.WATERLOGGED)) + state = state.setValue(BlockStateProperties.WATERLOGGED, Boolean.FALSE); if (AllBlocks.BELT.has(state)) { - world.setBlockState(target, state, 2); + world.setBlock(target, state, 2); return; } else if (state.getBlock() == Blocks.COMPOSTER) - state = Blocks.COMPOSTER.getDefaultState(); + state = Blocks.COMPOSTER.defaultBlockState(); else if (state.getBlock() != Blocks.SEA_PICKLE && state.getBlock() instanceof IPlantable) state = ((IPlantable) state.getBlock()).getPlant(world, target); - if (world.getDimension() - .isUltrawarm() + if (world.dimensionType() + .ultraWarm() && state.getFluidState() - .getFluid() - .isIn(FluidTags.WATER)) { + .getType() + .is(FluidTags.WATER)) { int i = target.getX(); int j = target.getY(); int k = target.getZ(); - world.playSound(null, target, SoundEvents.BLOCK_FIRE_EXTINGUISH, SoundCategory.BLOCKS, 0.5F, - 2.6F + (world.rand.nextFloat() - world.rand.nextFloat()) * 0.8F); + world.playSound(null, target, SoundEvents.FIRE_EXTINGUISH, SoundCategory.BLOCKS, 0.5F, + 2.6F + (world.random.nextFloat() - world.random.nextFloat()) * 0.8F); for (int l = 0; l < 8; ++l) { world.addParticle(ParticleTypes.LARGE_SMOKE, i + Math.random(), j + Math.random(), k + Math.random(), 0.0D, 0.0D, 0.0D); } - Block.spawnDrops(state, world, target); + Block.dropResources(state, world, target); return; } if (state.getBlock() instanceof AbstractRailBlock) { placeRailWithoutUpdate(world, state, target); } else { - world.setBlockState(target, state, 18); + world.setBlock(target, state, 18); } if (data != null) { - TileEntity tile = world.getTileEntity(target); + TileEntity tile = world.getBlockEntity(target); if (tile != null) { data.putInt("x", target.getX()); data.putInt("y", target.getY()); data.putInt("z", target.getZ()); if (tile instanceof KineticTileEntity) ((KineticTileEntity) tile).warnOfMovement(); - tile.fromTag(tile.getBlockState(), data); + tile.load(tile.getBlockState(), data); } } try { state.getBlock() - .onBlockPlacedBy(world, target, state, null, stack); + .setPlacedBy(world, target, state, null, stack); } catch (Exception e) { } } @@ -325,16 +325,16 @@ public class BlockHelper { public static boolean hasBlockSolidSide(BlockState p_220056_0_, IBlockReader p_220056_1_, BlockPos p_220056_2_, Direction p_220056_3_) { - return !p_220056_0_.isIn(BlockTags.LEAVES) - && Block.doesSideFillSquare(p_220056_0_.getCollisionShape(p_220056_1_, p_220056_2_), p_220056_3_); + return !p_220056_0_.is(BlockTags.LEAVES) + && Block.isFaceFull(p_220056_0_.getCollisionShape(p_220056_1_, p_220056_2_), p_220056_3_); } public static boolean extinguishFire(World world, @Nullable PlayerEntity p_175719_1_, BlockPos p_175719_2_, Direction p_175719_3_) { - p_175719_2_ = p_175719_2_.offset(p_175719_3_); + p_175719_2_ = p_175719_2_.relative(p_175719_3_); if (world.getBlockState(p_175719_2_) .getBlock() == Blocks.FIRE) { - world.playEvent(p_175719_1_, 1009, p_175719_2_, 0); + world.levelEvent(p_175719_1_, 1009, p_175719_2_, 0); world.removeBlock(p_175719_2_, false); return true; } else { diff --git a/src/main/java/com/simibubi/create/foundation/utility/ColorHandlers.java b/src/main/java/com/simibubi/create/foundation/utility/ColorHandlers.java index 75e429dd1..4022dba98 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/ColorHandlers.java +++ b/src/main/java/com/simibubi/create/foundation/utility/ColorHandlers.java @@ -10,7 +10,7 @@ import net.minecraft.world.biome.BiomeColors; public class ColorHandlers { public static IBlockColor getGrassyBlock() { - return (state, world, pos, layer) -> pos != null && world != null ? BiomeColors.getGrassColor(world, pos) + return (state, world, pos, layer) -> pos != null && world != null ? BiomeColors.getAverageGrassColor(world, pos) : GrassColors.get(0.5D, 1.0D); } @@ -20,7 +20,7 @@ public class ColorHandlers { public static IBlockColor getRedstonePower() { return (state, world, pos, layer) -> RedstoneWireBlock - .getWireColor(pos != null && world != null ? state.get(BlockStateProperties.POWER_0_15) : 0); + .getColorForPower(pos != null && world != null ? state.getValue(BlockStateProperties.POWER) : 0); } } diff --git a/src/main/java/com/simibubi/create/foundation/utility/Debug.java b/src/main/java/com/simibubi/create/foundation/utility/Debug.java index e6445ae11..f59840d5b 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/Debug.java +++ b/src/main/java/com/simibubi/create/foundation/utility/Debug.java @@ -18,20 +18,20 @@ public class Debug { @Deprecated public static void debugChat(String message) { if (Minecraft.getInstance().player != null) - Minecraft.getInstance().player.sendStatusMessage(new StringTextComponent(message), false); + Minecraft.getInstance().player.displayClientMessage(new StringTextComponent(message), false); } @Deprecated public static void debugChatAndShowStack(String message, int depth) { if (Minecraft.getInstance().player != null) - Minecraft.getInstance().player.sendStatusMessage(new StringTextComponent(message).append("@") + Minecraft.getInstance().player.displayClientMessage(new StringTextComponent(message).append("@") .append(debugStack(depth)), false); } @Deprecated public static void debugMessage(String message) { if (Minecraft.getInstance().player != null) - Minecraft.getInstance().player.sendStatusMessage(new StringTextComponent(message), true); + Minecraft.getInstance().player.displayClientMessage(new StringTextComponent(message), true); } @Deprecated @@ -50,17 +50,17 @@ public class Debug { StackTraceElement[] stackTraceElements = Thread.currentThread() .getStackTrace(); IFormattableTextComponent text = new StringTextComponent("[") - .append(new StringTextComponent(getLogicalSide()).formatted(TextFormatting.GOLD)) + .append(new StringTextComponent(getLogicalSide()).withStyle(TextFormatting.GOLD)) .append("] "); for (int i = 1; i < depth + 2 && i < stackTraceElements.length; i++) { StackTraceElement e = stackTraceElements[i]; if (e.getClassName() .equals(Debug.class.getName())) continue; - text.append(new StringTextComponent(e.getMethodName()).formatted(TextFormatting.YELLOW)) + text.append(new StringTextComponent(e.getMethodName()).withStyle(TextFormatting.YELLOW)) .append(", "); } - return text.append(new StringTextComponent(" ...").formatted(TextFormatting.GRAY)); + return text.append(new StringTextComponent(" ...").withStyle(TextFormatting.GRAY)); } @Deprecated diff --git a/src/main/java/com/simibubi/create/foundation/utility/DirectionHelper.java b/src/main/java/com/simibubi/create/foundation/utility/DirectionHelper.java index 88ce27061..14996e0ea 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/DirectionHelper.java +++ b/src/main/java/com/simibubi/create/foundation/utility/DirectionHelper.java @@ -27,7 +27,7 @@ public class DirectionHelper { return dir; case Y: if (dir != UP && dir != DOWN) { - return dir.rotateY(); + return dir.getClockWise(); } return dir; diff --git a/src/main/java/com/simibubi/create/foundation/utility/EmptyNamedTag.java b/src/main/java/com/simibubi/create/foundation/utility/EmptyNamedTag.java index 6e33ff6d1..8e6814ad8 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/EmptyNamedTag.java +++ b/src/main/java/com/simibubi/create/foundation/utility/EmptyNamedTag.java @@ -24,7 +24,7 @@ public class EmptyNamedTag implements Tags.IOptionalNamedTag { } @Override - public ResourceLocation getId() { + public ResourceLocation getName() { return id; } @@ -34,7 +34,7 @@ public class EmptyNamedTag implements Tags.IOptionalNamedTag { } @Override - public List values() { + public List getValues() { return Collections.emptyList(); } } diff --git a/src/main/java/com/simibubi/create/foundation/utility/FontHelper.java b/src/main/java/com/simibubi/create/foundation/utility/FontHelper.java index c81ffef70..ce5f20f32 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/FontHelper.java +++ b/src/main/java/com/simibubi/create/foundation/utility/FontHelper.java @@ -31,7 +31,7 @@ public final class FontHelper { StringBuilder currentLine = new StringBuilder(); int width = 0; for (String word : words) { - int newWidth = font.getStringWidth(word); + int newWidth = font.width(word); if (width + newWidth > maxWidthPerLine) { if (width > 0) { String line = currentLine.toString(); @@ -55,13 +55,13 @@ public final class FontHelper { public static void drawSplitString(MatrixStack ms, FontRenderer font, String text, int x, int y, int width, int color) { List list = cutString(font, text, width); - Matrix4f matrix4f = ms.peek() - .getModel(); + Matrix4f matrix4f = ms.last() + .pose(); for (String s : list) { float f = (float) x; - if (font.getBidiFlag()) { - int i = font.getStringWidth(font.bidiReorder(s)); + if (font.isBidirectional()) { + int i = font.width(font.bidirectionalShaping(s)); f += (float) (width - i); } @@ -76,10 +76,10 @@ public final class FontHelper { return 0; } else { IRenderTypeBuffer.Impl irendertypebuffer$impl = IRenderTypeBuffer.immediate(Tessellator.getInstance() - .getBuffer()); - int i = font.draw(p_228078_1_, p_228078_2_, p_228078_3_, p_228078_4_, p_228078_6_, p_228078_5_, + .getBuilder()); + int i = font.drawInBatch(p_228078_1_, p_228078_2_, p_228078_3_, p_228078_4_, p_228078_6_, p_228078_5_, irendertypebuffer$impl, false, 0, 15728880); - irendertypebuffer$impl.draw(); + irendertypebuffer$impl.endBatch(); return i; } } diff --git a/src/main/java/com/simibubi/create/foundation/utility/ISimpleReloadListener.java b/src/main/java/com/simibubi/create/foundation/utility/ISimpleReloadListener.java index 1b361b789..fb923c13a 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/ISimpleReloadListener.java +++ b/src/main/java/com/simibubi/create/foundation/utility/ISimpleReloadListener.java @@ -13,7 +13,7 @@ public interface ISimpleReloadListener extends IFutureReloadListener { @Override default CompletableFuture reload(IFutureReloadListener.IStage stage, IResourceManager resourceManager, IProfiler prepareProfiler, IProfiler applyProfiler, Executor prepareExecutor, Executor applyExecutor) { - return stage.markCompleteAwaitingOthers(Unit.INSTANCE).thenRunAsync(() -> { + return stage.wait(Unit.INSTANCE).thenRunAsync(() -> { onReload(resourceManager, applyProfiler); }, applyExecutor); } diff --git a/src/main/java/com/simibubi/create/foundation/utility/Iterate.java b/src/main/java/com/simibubi/create/foundation/utility/Iterate.java index 71b621cd2..138d2642c 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/Iterate.java +++ b/src/main/java/com/simibubi/create/foundation/utility/Iterate.java @@ -21,7 +21,7 @@ public class Iterate { private static Direction[] getHorizontals() { Direction[] directions = new Direction[4]; for (int i = 0; i < 4; i++) - directions[i] = Direction.byHorizontalIndex(i); + directions[i] = Direction.from2DDataValue(i); return directions; } @@ -38,10 +38,10 @@ public class Iterate { } public static List hereAndBelow(BlockPos pos) { - return Arrays.asList(pos, pos.down()); + return Arrays.asList(pos, pos.below()); } public static List hereBelowAndAbove(BlockPos pos) { - return Arrays.asList(pos, pos.down(), pos.up()); + return Arrays.asList(pos, pos.below(), pos.above()); } } diff --git a/src/main/java/com/simibubi/create/foundation/utility/Lang.java b/src/main/java/com/simibubi/create/foundation/utility/Lang.java index 62384d800..4572424b2 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/Lang.java +++ b/src/main/java/com/simibubi/create/foundation/utility/Lang.java @@ -21,7 +21,7 @@ public class Lang { } public static void sendStatus(PlayerEntity player, String key, Object... args) { - player.sendStatusMessage(createTranslationTextComponent(key, args), true); + player.displayClientMessage(createTranslationTextComponent(key, args), true); } public static List translatedOptions(String prefix, String... keys) { diff --git a/src/main/java/com/simibubi/create/foundation/utility/MatrixStacker.java b/src/main/java/com/simibubi/create/foundation/utility/MatrixStacker.java index 11ff390c7..009e20420 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/MatrixStacker.java +++ b/src/main/java/com/simibubi/create/foundation/utility/MatrixStacker.java @@ -25,12 +25,12 @@ public class MatrixStacker { } public MatrixStacker restoreIdentity() { - MatrixStack.Entry entry = ms.peek(); + MatrixStack.Entry entry = ms.last(); - entry.getModel() - .loadIdentity(); - entry.getNormal() - .loadIdentity(); + entry.pose() + .setIdentity(); + entry.normal() + .setIdentity(); return this; } @@ -38,27 +38,27 @@ public class MatrixStacker { public MatrixStacker rotate(Direction axis, float radians) { if (radians == 0) return this; - ms.multiply(axis.getUnitVector() - .getRadialQuaternion(radians)); + ms.mulPose(axis.step() + .rotation(radians)); return this; } public MatrixStacker rotate(double angle, Axis axis) { Vector3f vec = - axis == Axis.X ? Vector3f.POSITIVE_X : axis == Axis.Y ? Vector3f.POSITIVE_Y : Vector3f.POSITIVE_Z; + axis == Axis.X ? Vector3f.XP : axis == Axis.Y ? Vector3f.YP : Vector3f.ZP; return multiply(vec, angle); } public MatrixStacker rotateX(double angle) { - return multiply(Vector3f.POSITIVE_X, angle); + return multiply(Vector3f.XP, angle); } public MatrixStacker rotateY(double angle) { - return multiply(Vector3f.POSITIVE_Y, angle); + return multiply(Vector3f.YP, angle); } public MatrixStacker rotateZ(double angle) { - return multiply(Vector3f.POSITIVE_Z, angle); + return multiply(Vector3f.ZP, angle); } public MatrixStacker centre() { @@ -90,7 +90,7 @@ public class MatrixStacker { } public MatrixStacker multiply(Quaternion quaternion) { - ms.multiply(quaternion); + ms.mulPose(quaternion); return this; } @@ -107,17 +107,17 @@ public class MatrixStacker { public MatrixStacker multiply(Vector3f axis, double angle) { if (angle == 0) return this; - ms.multiply(axis.getDegreesQuaternion((float) angle)); + ms.mulPose(axis.rotationDegrees((float) angle)); return this; } public MatrixStacker push() { - ms.push(); + ms.pushPose(); return this; } public MatrixStacker pop() { - ms.pop(); + ms.popPose(); return this; } diff --git a/src/main/java/com/simibubi/create/foundation/utility/NBTHelper.java b/src/main/java/com/simibubi/create/foundation/utility/NBTHelper.java index abb7f39c5..34d32c713 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/NBTHelper.java +++ b/src/main/java/com/simibubi/create/foundation/utility/NBTHelper.java @@ -58,17 +58,17 @@ public class NBTHelper { } public static List readItemList(ListNBT stacks) { - return readCompoundList(stacks, ItemStack::read); + return readCompoundList(stacks, ItemStack::of); } public static ListNBT writeAABB(AxisAlignedBB bb) { ListNBT bbtag = new ListNBT(); - bbtag.add(FloatNBT.of((float) bb.minX)); - bbtag.add(FloatNBT.of((float) bb.minY)); - bbtag.add(FloatNBT.of((float) bb.minZ)); - bbtag.add(FloatNBT.of((float) bb.maxX)); - bbtag.add(FloatNBT.of((float) bb.maxY)); - bbtag.add(FloatNBT.of((float) bb.maxZ)); + bbtag.add(FloatNBT.valueOf((float) bb.minX)); + bbtag.add(FloatNBT.valueOf((float) bb.minY)); + bbtag.add(FloatNBT.valueOf((float) bb.minZ)); + bbtag.add(FloatNBT.valueOf((float) bb.maxX)); + bbtag.add(FloatNBT.valueOf((float) bb.maxY)); + bbtag.add(FloatNBT.valueOf((float) bb.maxZ)); return bbtag; } diff --git a/src/main/java/com/simibubi/create/foundation/utility/NBTProcessors.java b/src/main/java/com/simibubi/create/foundation/utility/NBTProcessors.java index cf919904a..8c1cc871a 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/NBTProcessors.java +++ b/src/main/java/com/simibubi/create/foundation/utility/NBTProcessors.java @@ -54,14 +54,14 @@ public final class NBTProcessors { ListNBT pages = tag.getList("pages", Constants.NBT.TAG_STRING); for (INBT inbt : pages) { - if (textComponentHasClickEvent(inbt.getString())) + if (textComponentHasClickEvent(inbt.getAsString())) return null; } return data; }); addSurvivalProcessor(AllTileEntities.FUNNEL.get(), data -> { if (data.contains("Filter")) { - ItemStack filter = ItemStack.read(data.getCompound("Filter")); + ItemStack filter = ItemStack.of(data.getCompound("Filter")); if (filter.getItem() instanceof FilterItem) data.remove("Filter"); } @@ -90,7 +90,7 @@ public final class NBTProcessors { .apply(compound); if (tileEntity instanceof MobSpawnerTileEntity) return compound; - if (tileEntity.onlyOpsCanSetNbt()) + if (tileEntity.onlyOpCanSetNbt()) return null; return compound; } diff --git a/src/main/java/com/simibubi/create/foundation/utility/Pointing.java b/src/main/java/com/simibubi/create/foundation/utility/Pointing.java index c9eac4486..c734ab4e5 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/Pointing.java +++ b/src/main/java/com/simibubi/create/foundation/utility/Pointing.java @@ -15,7 +15,7 @@ public enum Pointing implements IStringSerializable { } @Override - public String getString() { + public String getSerializedName() { return Lang.asId(name()); } diff --git a/src/main/java/com/simibubi/create/foundation/utility/RaycastHelper.java b/src/main/java/com/simibubi/create/foundation/utility/RaycastHelper.java index 057c2b378..2b8b6af84 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/RaycastHelper.java +++ b/src/main/java/com/simibubi/create/foundation/utility/RaycastHelper.java @@ -19,7 +19,7 @@ public class RaycastHelper { Vector3d origin = getTraceOrigin(playerIn); Vector3d target = getTraceTarget(playerIn, range, origin); RayTraceContext context = new RayTraceContext(origin, target, BlockMode.COLLIDER, FluidMode.NONE, playerIn); - return worldIn.rayTraceBlocks(context); + return worldIn.clip(context); } public static PredicateTraceResult rayTraceUntil(PlayerEntity playerIn, double range, @@ -30,8 +30,8 @@ public class RaycastHelper { } public static Vector3d getTraceTarget(PlayerEntity playerIn, double range, Vector3d origin) { - float f = playerIn.rotationPitch; - float f1 = playerIn.rotationYaw; + float f = playerIn.xRot; + float f1 = playerIn.yRot; float f2 = MathHelper.cos(-f1 * 0.017453292F - (float) Math.PI); float f3 = MathHelper.sin(-f1 * 0.017453292F - (float) Math.PI); float f4 = -MathHelper.cos(-f * 0.017453292F); @@ -67,7 +67,7 @@ public class RaycastHelper { BlockPos currentPos = new BlockPos(x, y, z); if (predicate.test(currentPos)) - return new PredicateTraceResult(currentPos, Direction.getFacingFromVector(dx - x, dy - y, dz - z)); + return new PredicateTraceResult(currentPos, Direction.getNearest(dx - x, dy - y, dz - z)); int remainingDistance = 200; diff --git a/src/main/java/com/simibubi/create/foundation/utility/ServerSpeedProvider.java b/src/main/java/com/simibubi/create/foundation/utility/ServerSpeedProvider.java index 45e7e224b..28038851a 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/ServerSpeedProvider.java +++ b/src/main/java/com/simibubi/create/foundation/utility/ServerSpeedProvider.java @@ -32,9 +32,9 @@ public class ServerSpeedProvider { @OnlyIn(Dist.CLIENT) public static void clientTick() { if (Minecraft.getInstance() - .isSingleplayer() + .hasSingleplayerServer() && Minecraft.getInstance() - .isGamePaused()) + .isPaused()) return; modifier.tick(); clientTimer++; diff --git a/src/main/java/com/simibubi/create/foundation/utility/TreeCutter.java b/src/main/java/com/simibubi/create/foundation/utility/TreeCutter.java index 3b7f6e5ea..1fb499a09 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/TreeCutter.java +++ b/src/main/java/com/simibubi/create/foundation/utility/TreeCutter.java @@ -69,11 +69,11 @@ public class TreeCutter { List frontier = new LinkedList<>(); // Bamboo, Sugar Cane, Cactus - BlockState stateAbove = reader.getBlockState(pos.up()); + BlockState stateAbove = reader.getBlockState(pos.above()); if (isVerticalPlant(stateAbove)) { - logs.add(pos.up()); + logs.add(pos.above()); for (int i = 1; i < 256; i++) { - BlockPos current = pos.up(i); + BlockPos current = pos.above(i); if (!isVerticalPlant(reader.getBlockState(current))) break; logs.add(current); @@ -84,13 +84,13 @@ public class TreeCutter { // Chorus if (isChorus(stateAbove)) { - frontier.add(pos.up()); + frontier.add(pos.above()); while (!frontier.isEmpty()) { BlockPos current = frontier.remove(0); visited.add(current); logs.add(current); for (Direction direction : Iterate.directions) { - BlockPos offset = current.offset(direction); + BlockPos offset = current.relative(direction); if (visited.contains(offset)) continue; if (!isChorus(reader.getBlockState(offset))) @@ -107,7 +107,7 @@ public class TreeCutter { return NO_TREE; visited.add(pos); - BlockPos.getAllInBox(pos.add(-1, 0, -1), pos.add(1, 1, 1)) + BlockPos.betweenClosedStream(pos.offset(-1, 0, -1), pos.offset(1, 1, 1)) .forEach(p -> frontier.add(new BlockPos(p))); // Find all logs @@ -143,15 +143,15 @@ public class TreeCutter { if (isGenericLeaf) leaves.add(currentPos); - int distance = !isLeaf ? 0 : blockState.get(LeavesBlock.DISTANCE); + int distance = !isLeaf ? 0 : blockState.getValue(LeavesBlock.DISTANCE); for (Direction direction : Iterate.directions) { - BlockPos offset = currentPos.offset(direction); + BlockPos offset = currentPos.relative(direction); if (visited.contains(offset)) continue; BlockState state = reader.getBlockState(offset); BlockPos subtract = offset.subtract(pos); int horizontalDistance = Math.max(Math.abs(subtract.getX()), Math.abs(subtract.getZ())); - if (isLeaf(state) && state.get(LeavesBlock.DISTANCE) > distance + if (isLeaf(state) && state.getValue(LeavesBlock.DISTANCE) > distance || isNonDecayingLeaf(state) && horizontalDistance < 4) frontier.add(offset); } @@ -190,7 +190,7 @@ public class TreeCutter { Set visited = new HashSet<>(); List frontier = new LinkedList<>(); frontier.add(pos); - frontier.add(pos.up()); + frontier.add(pos.above()); int posY = pos.getY(); while (!frontier.isEmpty()) { @@ -200,7 +200,7 @@ public class TreeCutter { if (!isLog(reader.getBlockState(currentPos))) continue; - if (!lowerLayer && !pos.equals(currentPos.down()) && isLog(reader.getBlockState(currentPos.down()))) + if (!lowerLayer && !pos.equals(currentPos.below()) && isLog(reader.getBlockState(currentPos.below()))) return false; for (Direction direction : Iterate.directions) { @@ -208,7 +208,7 @@ public class TreeCutter { continue; if (direction == Direction.UP && !lowerLayer) continue; - BlockPos offset = currentPos.offset(direction); + BlockPos offset = currentPos.relative(direction); if (visited.contains(offset)) continue; frontier.add(offset); @@ -220,21 +220,21 @@ public class TreeCutter { } private static void addNeighbours(BlockPos pos, List frontier, Set visited) { - BlockPos.getAllInBox(pos.add(-1, -1, -1), pos.add(1, 1, 1)) + BlockPos.betweenClosedStream(pos.offset(-1, -1, -1), pos.offset(1, 1, 1)) .filter(((Predicate) visited::contains).negate()) .forEach(p -> frontier.add(new BlockPos(p))); } private static boolean isLog(BlockState state) { - return state.isIn(BlockTags.LOGS) || AllTags.AllBlockTags.SLIMY_LOGS.matches(state); + return state.is(BlockTags.LOGS) || AllTags.AllBlockTags.SLIMY_LOGS.matches(state); } private static boolean isNonDecayingLeaf(BlockState state) { - return state.isIn(BlockTags.WART_BLOCKS) || state.getBlock() == Blocks.SHROOMLIGHT; + return state.is(BlockTags.WART_BLOCKS) || state.getBlock() == Blocks.SHROOMLIGHT; } private static boolean isLeaf(BlockState state) { - return state.contains(LeavesBlock.DISTANCE); + return state.hasProperty(LeavesBlock.DISTANCE); } public static class Tree extends AbstractBlockBreakQueue { diff --git a/src/main/java/com/simibubi/create/foundation/utility/VecHelper.java b/src/main/java/com/simibubi/create/foundation/utility/VecHelper.java index 676e3f7fb..7d273f44e 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/VecHelper.java +++ b/src/main/java/com/simibubi/create/foundation/utility/VecHelper.java @@ -85,11 +85,11 @@ public class VecHelper { public static Vector3d lookAt(Vector3d vec, Vector3d fwd) { fwd = fwd.normalize(); Vector3d up = new Vector3d(0,1,0); - double dot = fwd.dotProduct(up); + double dot = fwd.dot(up); if (Math.abs(dot) > 1 - 1.0E-3) up = new Vector3d(0, 0, dot > 0 ? 1 : -1); - Vector3d right = fwd.crossProduct(up).normalize(); - up = right.crossProduct(fwd).normalize(); + Vector3d right = fwd.cross(up).normalize(); + up = right.cross(fwd).normalize(); double x = vec.x * right.x + vec.y * up.x + vec.z * fwd.x; double y = vec.x * right.y + vec.y * up.y + vec.z * fwd.y; double z = vec.x * right.z + vec.y * up.z + vec.z * fwd.z; @@ -97,14 +97,14 @@ public class VecHelper { } public static boolean isVecPointingTowards(Vector3d vec, Direction direction) { - return Vector3d.of(direction.getDirectionVec()) - .dotProduct(vec.normalize()) > 0.125; // slight tolerance to activate perpendicular movement actors + return Vector3d.atLowerCornerOf(direction.getNormal()) + .dot(vec.normalize()) > 0.125; // slight tolerance to activate perpendicular movement actors } public static Vector3d getCenterOf(Vector3i pos) { - if (pos.equals(Vector3i.NULL_VECTOR)) + if (pos.equals(Vector3i.ZERO)) return CENTER_OF_ORIGIN; - return Vector3d.of(pos) + return Vector3d.atLowerCornerOf(pos) .add(.5f, .5f, .5f); } @@ -119,14 +119,14 @@ public class VecHelper { } public static Vector3d axisAlingedPlaneOf(Direction face) { - return axisAlingedPlaneOf(Vector3d.of(face.getDirectionVec())); + return axisAlingedPlaneOf(Vector3d.atLowerCornerOf(face.getNormal())); } public static ListNBT writeNBT(Vector3d vec) { ListNBT listnbt = new ListNBT(); - listnbt.add(DoubleNBT.of(vec.x)); - listnbt.add(DoubleNBT.of(vec.y)); - listnbt.add(DoubleNBT.of(vec.z)); + listnbt.add(DoubleNBT.valueOf(vec.x)); + listnbt.add(DoubleNBT.valueOf(vec.y)); + listnbt.add(DoubleNBT.valueOf(vec.z)); return listnbt; } @@ -141,11 +141,11 @@ public class VecHelper { } public static int getCoordinate(Vector3i pos, Axis axis) { - return axis.getCoordinate(pos.getX(), pos.getY(), pos.getZ()); + return axis.choose(pos.getX(), pos.getY(), pos.getZ()); } public static float getCoordinate(Vector3d vec, Axis axis) { - return (float) axis.getCoordinate(vec.x, vec.y, vec.z); + return (float) axis.choose(vec.x, vec.y, vec.z); } public static boolean onSameAxis(BlockPos pos1, BlockPos pos2, Axis axis) { @@ -176,7 +176,7 @@ public class VecHelper { public static Vector3d project(Vector3d vec, Vector3d ontoVec) { if (ontoVec.equals(Vector3d.ZERO)) return Vector3d.ZERO; - return ontoVec.scale(vec.dotProduct(ontoVec) / ontoVec.lengthSquared()); + return ontoVec.scale(vec.dot(ontoVec) / ontoVec.lengthSqr()); } @Nullable @@ -188,8 +188,8 @@ public class VecHelper { lineDirection = lineDirection.normalize(); Vector3d diff = origin.subtract(sphereCenter); - double lineDotDiff = lineDirection.dotProduct(diff); - double delta = lineDotDiff * lineDotDiff - (diff.lengthSquared() - radius * radius); + double lineDotDiff = lineDirection.dot(diff); + double delta = lineDotDiff * lineDotDiff - (diff.lengthSqr() - radius * radius); if (delta < 0) return null; double t = -lineDotDiff + MathHelper.sqrt(delta); @@ -202,52 +202,52 @@ public class VecHelper { * The (centered) location on the screen of the given 3d point in the world. * Result is (dist right of center screen, dist up from center screen, if < 0, then in front of view plane) */ - ActiveRenderInfo ari = Minecraft.getInstance().gameRenderer.getActiveRenderInfo(); - Vector3d camera_pos = ari.getProjectedView(); - Quaternion camera_rotation_conj = ari.getRotation() + ActiveRenderInfo ari = Minecraft.getInstance().gameRenderer.getMainCamera(); + Vector3d camera_pos = ari.getPosition(); + Quaternion camera_rotation_conj = ari.rotation() .copy(); - camera_rotation_conj.conjugate(); + camera_rotation_conj.conj(); Vector3f result3f = new Vector3f((float) (camera_pos.x - target.x), (float) (camera_pos.y - target.y), (float) (camera_pos.z - target.z)); - result3f.func_214905_a(camera_rotation_conj); + result3f.transform(camera_rotation_conj); // ----- compensate for view bobbing (if active) ----- // the following code adapted from GameRenderer::applyBobbing (to invert it) Minecraft mc = Minecraft.getInstance(); - if (mc.gameSettings.viewBobbing) { - Entity renderViewEntity = mc.getRenderViewEntity(); + if (mc.options.bobView) { + Entity renderViewEntity = mc.getCameraEntity(); if (renderViewEntity instanceof PlayerEntity) { PlayerEntity playerentity = (PlayerEntity) renderViewEntity; - float distwalked_modified = playerentity.distanceWalkedModified; + float distwalked_modified = playerentity.walkDist; - float f = distwalked_modified - playerentity.prevDistanceWalkedModified; + float f = distwalked_modified - playerentity.walkDistO; float f1 = -(distwalked_modified + f * partialTicks); - float f2 = MathHelper.lerp(partialTicks, playerentity.prevCameraYaw, playerentity.cameraYaw); - Quaternion q2 = new Quaternion(Vector3f.POSITIVE_X, + float f2 = MathHelper.lerp(partialTicks, playerentity.oBob, playerentity.bob); + Quaternion q2 = new Quaternion(Vector3f.XP, Math.abs(MathHelper.cos(f1 * (float) Math.PI - 0.2F) * f2) * 5.0F, true); - q2.conjugate(); - result3f.func_214905_a(q2); + q2.conj(); + result3f.transform(q2); Quaternion q1 = - new Quaternion(Vector3f.POSITIVE_Z, MathHelper.sin(f1 * (float) Math.PI) * f2 * 3.0F, true); - q1.conjugate(); - result3f.func_214905_a(q1); + new Quaternion(Vector3f.ZP, MathHelper.sin(f1 * (float) Math.PI) * f2 * 3.0F, true); + q1.conj(); + result3f.transform(q1); Vector3f bob_translation = new Vector3f((MathHelper.sin(f1 * (float) Math.PI) * f2 * 0.5F), (-Math.abs(MathHelper.cos(f1 * (float) Math.PI) * f2)), 0.0f); - bob_translation.setY(-bob_translation.getY()); // this is weird but hey, if it works + bob_translation.setY(-bob_translation.y()); // this is weird but hey, if it works result3f.add(bob_translation); } } // ----- adjust for fov ----- - float fov = (float) mc.gameRenderer.getFOVModifier(ari, partialTicks, true); + float fov = (float) mc.gameRenderer.getFov(ari, partialTicks, true); float half_height = (float) mc.getWindow() - .getScaledHeight() / 2; - float scale_factor = half_height / (result3f.getZ() * (float) Math.tan(Math.toRadians(fov / 2))); - return new Vector3d(-result3f.getX() * scale_factor, result3f.getY() * scale_factor, result3f.getZ()); + .getGuiScaledHeight() / 2; + float scale_factor = half_height / (result3f.z() * (float) Math.tan(Math.toRadians(fov / 2))); + return new Vector3d(-result3f.x() * scale_factor, result3f.y() * scale_factor, result3f.z()); } } diff --git a/src/main/java/com/simibubi/create/foundation/utility/VoxelShaper.java b/src/main/java/com/simibubi/create/foundation/utility/VoxelShaper.java index 31e9645ac..7b9b35e71 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/VoxelShaper.java +++ b/src/main/java/com/simibubi/create/foundation/utility/VoxelShaper.java @@ -57,11 +57,11 @@ public class VoxelShaper { } public static Direction axisAsFace(Axis axis) { - return Direction.getFacingFromAxis(AxisDirection.POSITIVE, axis); + return Direction.get(AxisDirection.POSITIVE, axis); } protected static float horizontalAngleFromDirection(Direction direction) { - return (float) ((Math.max(direction.getHorizontalIndex(), 0) & 3) * 90); + return (float) ((Math.max(direction.get2DDataValue(), 0) & 3) * 90); } protected static VoxelShaper forDirectionsWithRotation(VoxelShape shape, Direction facing, @@ -79,7 +79,7 @@ public class VoxelShaper { return shape; return rotatedCopy(shape, usingValues.apply(from) - .inverse() + .reverse() .add(usingValues.apply(to))); } @@ -90,7 +90,7 @@ public class VoxelShaper { MutableObject result = new MutableObject<>(VoxelShapes.empty()); Vector3d center = new Vector3d(8, 8, 8); - shape.forEachBox((x1, y1, z1, x2, y2, z2) -> { + shape.forAllBoxes((x1, y1, z1, x2, y2, z2) -> { Vector3d v1 = new Vector3d(x1, y1, z1).scale(16) .subtract(center); Vector3d v2 = new Vector3d(x2, y2, z2).scale(16) @@ -106,7 +106,7 @@ public class VoxelShaper { v2 = VecHelper.rotate(v2, (float) rotation.z, Axis.Z) .add(center); - VoxelShape rotated = Block.makeCuboidShape(v1.x, v1.y, v1.z, v2.x, v2.y, v2.z); + VoxelShape rotated = Block.box(v1.x, v1.y, v1.z, v2.x, v2.y, v2.z); result.setValue(VoxelShapes.or(result.getValue(), rotated)); }); diff --git a/src/main/java/com/simibubi/create/foundation/utility/WorldHelper.java b/src/main/java/com/simibubi/create/foundation/utility/WorldHelper.java index 3cd375ea9..2f256a42b 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/WorldHelper.java +++ b/src/main/java/com/simibubi/create/foundation/utility/WorldHelper.java @@ -6,8 +6,8 @@ import net.minecraft.world.IWorld; public class WorldHelper { public static ResourceLocation getDimensionID(IWorld world) { - return world.getRegistryManager() - .get(Registry.DIMENSION_TYPE_KEY) - .getKey(world.getDimension()); + return world.registryAccess() + .registryOrThrow(Registry.DIMENSION_TYPE_REGISTRY) + .getKey(world.dimensionType()); } } diff --git a/src/main/java/com/simibubi/create/foundation/utility/animation/LerpedFloat.java b/src/main/java/com/simibubi/create/foundation/utility/animation/LerpedFloat.java index 087929bb0..bd15f8dcc 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/animation/LerpedFloat.java +++ b/src/main/java/com/simibubi/create/foundation/utility/animation/LerpedFloat.java @@ -55,14 +55,14 @@ public class LerpedFloat { public boolean updateChaseSpeed(double speed) { float prevSpeed = this.chaseSpeed; this.chaseSpeed = (float) speed; - return !MathHelper.epsilonEquals(prevSpeed, speed); + return !MathHelper.equal(prevSpeed, speed); } public void tickChaser() { previousValue = value; if (chaseFunction == null) return; - if (MathHelper.epsilonEquals((double) value, chaseTarget)) { + if (MathHelper.equal((double) value, chaseTarget)) { value = chaseTarget; return; } @@ -83,7 +83,7 @@ public class LerpedFloat { } public boolean settled() { - return MathHelper.epsilonEquals((double) previousValue, value); + return MathHelper.equal((double) previousValue, value); } public float getChaseTarget() { diff --git a/src/main/java/com/simibubi/create/foundation/utility/ghost/GhostBlockParams.java b/src/main/java/com/simibubi/create/foundation/utility/ghost/GhostBlockParams.java index b83e7f13d..01c6ddc6c 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/ghost/GhostBlockParams.java +++ b/src/main/java/com/simibubi/create/foundation/utility/ghost/GhostBlockParams.java @@ -23,7 +23,7 @@ public class GhostBlockParams { } public static GhostBlockParams of(Block block) { - return of(block.getDefaultState()); + return of(block.defaultBlockState()); } public GhostBlockParams at(BlockPos pos) { diff --git a/src/main/java/com/simibubi/create/foundation/utility/ghost/GhostBlockRenderer.java b/src/main/java/com/simibubi/create/foundation/utility/ghost/GhostBlockRenderer.java index 6878acf40..96e2b4ab3 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/ghost/GhostBlockRenderer.java +++ b/src/main/java/com/simibubi/create/foundation/utility/ghost/GhostBlockRenderer.java @@ -53,24 +53,24 @@ public abstract class GhostBlockRenderer { private static class DefaultGhostBlockRenderer extends GhostBlockRenderer { public void render(MatrixStack ms, SuperRenderTypeBuffer buffer, GhostBlockParams params) { - ms.push(); + ms.pushPose(); BlockRendererDispatcher dispatcher = Minecraft.getInstance() - .getBlockRendererDispatcher(); + .getBlockRenderer(); - IBakedModel model = dispatcher.getModelForState(params.state); + IBakedModel model = dispatcher.getBlockModel(params.state); - RenderType layer = RenderTypeLookup.getEntityBlockLayer(params.state, false); + RenderType layer = RenderTypeLookup.getRenderType(params.state, false); IVertexBuilder vb = buffer.getEarlyBuffer(layer); BlockPos pos = params.pos; ms.translate(pos.getX(), pos.getY(), pos.getZ()); - dispatcher.getBlockModelRenderer() - .renderModel(ms.peek(), vb, params.state, model, 1f, 1f, 1f, 0xF000F0, OverlayTexture.DEFAULT_UV, + dispatcher.getModelRenderer() + .renderModel(ms.last(), vb, params.state, model, 1f, 1f, 1f, 0xF000F0, OverlayTexture.NO_OVERLAY, VirtualEmptyModelData.INSTANCE); - ms.pop(); + ms.popPose(); } } @@ -80,17 +80,17 @@ public abstract class GhostBlockRenderer { public void render(MatrixStack ms, SuperRenderTypeBuffer buffer, GhostBlockParams params) { // prepare - ms.push(); + ms.pushPose(); // RenderSystem.pushMatrix(); Minecraft mc = Minecraft.getInstance(); - BlockRendererDispatcher dispatcher = mc.getBlockRendererDispatcher(); + BlockRendererDispatcher dispatcher = mc.getBlockRenderer(); - IBakedModel model = dispatcher.getModelForState(params.state); + IBakedModel model = dispatcher.getBlockModel(params.state); // RenderType layer = RenderTypeLookup.getEntityBlockLayer(params.state); - RenderType layer = RenderType.getTranslucent(); + RenderType layer = RenderType.translucent(); IVertexBuilder vb = buffer.getEarlyBuffer(layer); BlockPos pos = params.pos; @@ -101,14 +101,14 @@ public abstract class GhostBlockRenderer { ms.translate(-.5, -.5, -.5); // dispatcher.getBlockModelRenderer().renderModel(ms.peek(), vb, params.state, model, 1f, 1f, 1f, 0xF000F0, OverlayTexture.DEFAULT_UV, VirtualEmptyModelData.INSTANCE); - renderModel(params, ms.peek(), vb, params.state, model, 1f, 1f, 1f, - WorldRenderer.getLightmapCoordinates(mc.world, pos), OverlayTexture.DEFAULT_UV, + renderModel(params, ms.last(), vb, params.state, model, 1f, 1f, 1f, + WorldRenderer.getLightColor(mc.level, pos), OverlayTexture.NO_OVERLAY, VirtualEmptyModelData.INSTANCE); // buffer.draw(); // clean // RenderSystem.popMatrix(); - ms.pop(); + ms.popPose(); } @@ -139,7 +139,7 @@ public abstract class GhostBlockRenderer { float f; float f1; float f2; - if (bakedquad.hasTintIndex()) { + if (bakedquad.isTinted()) { f = MathHelper.clamp(p_228803_2_, 0.0F, 1.0F); f1 = MathHelper.clamp(p_228803_3_, 0.0F, 1.0F); f2 = MathHelper.clamp(p_228803_4_, 0.0F, 1.0F); @@ -159,17 +159,17 @@ public abstract class GhostBlockRenderer { static void quad(float alpha, IVertexBuilder vb, MatrixStack.Entry p_227890_1_, BakedQuad p_227890_2_, float[] p_227890_3_, float p_227890_4_, float p_227890_5_, float p_227890_6_, int[] p_227890_7_, int p_227890_8_) { - int[] aint = p_227890_2_.getVertexData(); - Vector3i Vector3i = p_227890_2_.getFace() - .getDirectionVec(); + int[] aint = p_227890_2_.getVertices(); + Vector3i Vector3i = p_227890_2_.getDirection() + .getNormal(); Vector3f vector3f = new Vector3f((float) Vector3i.getX(), (float) Vector3i.getY(), (float) Vector3i.getZ()); - Matrix4f matrix4f = p_227890_1_.getModel(); - vector3f.transform(p_227890_1_.getNormal()); + Matrix4f matrix4f = p_227890_1_.pose(); + vector3f.transform(p_227890_1_.normal()); int vertexSize = DefaultVertexFormats.BLOCK.getIntegerSize(); int j = aint.length / vertexSize; try (MemoryStack memorystack = MemoryStack.stackPush()) { - ByteBuffer bytebuffer = memorystack.malloc(DefaultVertexFormats.BLOCK.getSize()); + ByteBuffer bytebuffer = memorystack.malloc(DefaultVertexFormats.BLOCK.getVertexSize()); IntBuffer intbuffer = bytebuffer.asIntBuffer(); for (int k = 0; k < j; ++k) { @@ -191,9 +191,9 @@ public abstract class GhostBlockRenderer { float f10 = bytebuffer.getFloat(20); Vector4f vector4f = new Vector4f(f, f1, f2, 1.0F); vector4f.transform(matrix4f); - vb.applyBakedNormals(vector3f, bytebuffer, p_227890_1_.getNormal()); - vb.vertex(vector4f.getX(), vector4f.getY(), vector4f.getZ(), r, g, b, alpha, f9, f10, p_227890_8_, - l, vector3f.getX(), vector3f.getY(), vector3f.getZ()); + vb.applyBakedNormals(vector3f, bytebuffer, p_227890_1_.normal()); + vb.vertex(vector4f.x(), vector4f.y(), vector4f.z(), r, g, b, alpha, f9, f10, p_227890_8_, + l, vector3f.x(), vector3f.y(), vector3f.z()); } } } diff --git a/src/main/java/com/simibubi/create/foundation/utility/outliner/AABBOutline.java b/src/main/java/com/simibubi/create/foundation/utility/outliner/AABBOutline.java index 9839b890d..6d7998c7b 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/outliner/AABBOutline.java +++ b/src/main/java/com/simibubi/create/foundation/utility/outliner/AABBOutline.java @@ -27,10 +27,10 @@ public class AABBOutline extends Outline { } public void renderBB(MatrixStack ms, SuperRenderTypeBuffer buffer, AxisAlignedBB bb) { - Vector3d projectedView = Minecraft.getInstance().gameRenderer.getActiveRenderInfo() - .getProjectedView(); + Vector3d projectedView = Minecraft.getInstance().gameRenderer.getMainCamera() + .getPosition(); boolean noCull = bb.contains(projectedView); - bb = bb.grow(noCull ? -1 / 128d : 1 / 128d); + bb = bb.inflate(noCull ? -1 / 128d : 1 / 128d); noCull |= params.disableCull; Vector3d xyz = new Vector3d(bb.minX, bb.minY, bb.minZ); diff --git a/src/main/java/com/simibubi/create/foundation/utility/outliner/BlockClusterOutline.java b/src/main/java/com/simibubi/create/foundation/utility/outliner/BlockClusterOutline.java index 1f91f886f..d1ceb3b23 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/outliner/BlockClusterOutline.java +++ b/src/main/java/com/simibubi/create/foundation/utility/outliner/BlockClusterOutline.java @@ -32,17 +32,17 @@ public class BlockClusterOutline extends Outline { @Override public void render(MatrixStack ms, SuperRenderTypeBuffer buffer, float pt) { for (MergeEntry edge : cluster.visibleEdges) { - Vector3d start = Vector3d.of(edge.pos); - Direction direction = Direction.getFacingFromAxis(AxisDirection.POSITIVE, edge.axis); - renderAACuboidLine(ms, buffer, start, Vector3d.of(edge.pos.offset(direction))); + Vector3d start = Vector3d.atLowerCornerOf(edge.pos); + Direction direction = Direction.get(AxisDirection.POSITIVE, edge.axis); + renderAACuboidLine(ms, buffer, start, Vector3d.atLowerCornerOf(edge.pos.relative(direction))); } for (MergeEntry face : cluster.visibleFaces.keySet()) { AxisDirection axisDirection = cluster.visibleFaces.get(face); - Direction direction = Direction.getFacingFromAxis(axisDirection, face.axis); + Direction direction = Direction.get(axisDirection, face.axis); BlockPos pos = face.pos; if (axisDirection == AxisDirection.POSITIVE) - pos = pos.offset(direction.getOpposite()); + pos = pos.relative(direction.getOpposite()); renderBlockFace(ms, buffer, pos, direction); } } @@ -57,7 +57,7 @@ public class BlockClusterOutline extends Outline { IVertexBuilder builder = buffer.getLateBuffer(translucentType); Vector3d center = VecHelper.getCenterOf(pos); - Vector3d offset = Vector3d.of(face.getDirectionVec()); + Vector3d offset = Vector3d.atLowerCornerOf(face.getNormal()); Vector3d plane = VecHelper.axisAlingedPlaneOf(offset); Axis axis = face.getAxis(); @@ -66,7 +66,7 @@ public class BlockClusterOutline extends Outline { .add(offset); int deg = face.getAxisDirection() - .getOffset() * 90; + .getStep() * 90; Vector3d a1 = plane.add(center); plane = VecHelper.rotate(plane, deg, axis); Vector3d a2 = plane.add(center); @@ -92,9 +92,9 @@ public class BlockClusterOutline extends Outline { // 6 FACES for (Axis axis : Axis.values()) { - Direction direction = Direction.getFacingFromAxis(AxisDirection.POSITIVE, axis); + Direction direction = Direction.get(AxisDirection.POSITIVE, axis); for (int offset : new int[] { 0, 1 }) { - MergeEntry entry = new MergeEntry(axis, pos.offset(direction, offset)); + MergeEntry entry = new MergeEntry(axis, pos.relative(direction, offset)); if (visibleFaces.remove(entry) == null) visibleFaces.put(entry, offset == 0 ? AxisDirection.NEGATIVE : AxisDirection.POSITIVE); } @@ -111,13 +111,13 @@ public class BlockClusterOutline extends Outline { if (axis2 == axis3) continue; - Direction direction = Direction.getFacingFromAxis(AxisDirection.POSITIVE, axis2); - Direction direction2 = Direction.getFacingFromAxis(AxisDirection.POSITIVE, axis3); + Direction direction = Direction.get(AxisDirection.POSITIVE, axis2); + Direction direction2 = Direction.get(AxisDirection.POSITIVE, axis3); for (int offset : new int[] { 0, 1 }) { - BlockPos entryPos = pos.offset(direction, offset); + BlockPos entryPos = pos.relative(direction, offset); for (int offset2 : new int[] { 0, 1 }) { - entryPos = entryPos.offset(direction2, offset2); + entryPos = entryPos.relative(direction2, offset2); MergeEntry entry = new MergeEntry(axis, entryPos); if (!visibleEdges.remove(entry)) visibleEdges.add(entry); diff --git a/src/main/java/com/simibubi/create/foundation/utility/outliner/ChasingAABBOutline.java b/src/main/java/com/simibubi/create/foundation/utility/outliner/ChasingAABBOutline.java index d70ef3189..c3d2204e2 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/outliner/ChasingAABBOutline.java +++ b/src/main/java/com/simibubi/create/foundation/utility/outliner/ChasingAABBOutline.java @@ -13,8 +13,8 @@ public class ChasingAABBOutline extends AABBOutline { public ChasingAABBOutline(AxisAlignedBB bb) { super(bb); - prevBB = bb.grow(0); - targetBB = bb.grow(0); + prevBB = bb.inflate(0); + targetBB = bb.inflate(0); } public void target(AxisAlignedBB target) { diff --git a/src/main/java/com/simibubi/create/foundation/utility/outliner/Outline.java b/src/main/java/com/simibubi/create/foundation/utility/outliner/Outline.java index e23c179fc..009f1b7e3 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/outliner/Outline.java +++ b/src/main/java/com/simibubi/create/foundation/utility/outliner/Outline.java @@ -36,15 +36,15 @@ public abstract class Outline { public void renderCuboidLine(MatrixStack ms, SuperRenderTypeBuffer buffer, Vector3d start, Vector3d end) { Vector3d diff = end.subtract(start); float hAngle = AngleHelper.deg(MathHelper.atan2(diff.x, diff.z)); - float hDistance = (float) diff.mul(1, 0, 1) + float hDistance = (float) diff.multiply(1, 0, 1) .length(); float vAngle = AngleHelper.deg(MathHelper.atan2(hDistance, diff.y)) - 90; - ms.push(); + ms.pushPose(); MatrixStacker.of(ms) .translate(start) .rotateY(hAngle).rotateX(vAngle); renderAACuboidLine(ms, buffer, Vector3d.ZERO, new Vector3d(0, 0, diff.length())); - ms.pop(); + ms.popPose(); } public void renderAACuboidLine(MatrixStack ms, SuperRenderTypeBuffer buffer, Vector3d start, Vector3d end) { @@ -65,7 +65,7 @@ public abstract class Outline { Vector3d extension = diff.normalize() .scale(lineWidth / 2); Vector3d plane = VecHelper.axisAlingedPlaneOf(diff); - Direction face = Direction.getFacingFromVector(diff.x, diff.y, diff.z); + Direction face = Direction.getNearest(diff.x, diff.y, diff.z); Axis axis = face.getAxis(); start = start.subtract(extension); @@ -98,16 +98,16 @@ public abstract class Outline { putQuad(ms, builder, b4, b3, b2, b1, face); putQuad(ms, builder, a1, a2, a3, a4, face.getOpposite()); Vector3d vec = a1.subtract(a4); - face = Direction.getFacingFromVector(vec.x, vec.y, vec.z); + face = Direction.getNearest(vec.x, vec.y, vec.z); putQuad(ms, builder, a1, b1, b2, a2, face); vec = VecHelper.rotate(vec, -90, axis); - face = Direction.getFacingFromVector(vec.x, vec.y, vec.z); + face = Direction.getNearest(vec.x, vec.y, vec.z); putQuad(ms, builder, a2, b2, b3, a3, face); vec = VecHelper.rotate(vec, -90, axis); - face = Direction.getFacingFromVector(vec.x, vec.y, vec.z); + face = Direction.getNearest(vec.x, vec.y, vec.z); putQuad(ms, builder, a3, b3, b4, a4, face); vec = VecHelper.rotate(vec, -90, axis); - face = Direction.getFacingFromVector(vec.x, vec.y, vec.z); + face = Direction.getNearest(vec.x, vec.y, vec.z); putQuad(ms, builder, a4, b4, b1, a1, face); } @@ -128,27 +128,27 @@ public abstract class Outline { int i = 15 << 20 | 15 << 4; int j = i >> 16 & '\uffff'; int k = i & '\uffff'; - Entry peek = ms.peek(); + Entry peek = ms.last(); Vector3d rgb = params.rgb; if (transformNormals == null) - transformNormals = peek.getNormal(); + transformNormals = peek.normal(); int xOffset = 0; int yOffset = 0; int zOffset = 0; if (normal != null) { - xOffset = normal.getXOffset(); - yOffset = normal.getYOffset(); - zOffset = normal.getZOffset(); + xOffset = normal.getStepX(); + yOffset = normal.getStepY(); + zOffset = normal.getStepZ(); } - builder.vertex(peek.getModel(), (float) pos.x, (float) pos.y, (float) pos.z) + builder.vertex(peek.pose(), (float) pos.x, (float) pos.y, (float) pos.z) .color((float) rgb.x, (float) rgb.y, (float) rgb.z, params.alpha) - .texture(u, v) - .overlay(OverlayTexture.DEFAULT_UV) - .light(j, k) - .normal(peek.getNormal(), xOffset, yOffset, zOffset) + .uv(u, v) + .overlayCoords(OverlayTexture.NO_OVERLAY) + .uv2(j, k) + .normal(peek.normal(), xOffset, yOffset, zOffset) .endVertex(); transformNormals = null; diff --git a/src/main/java/com/simibubi/create/foundation/utility/placement/IPlacementHelper.java b/src/main/java/com/simibubi/create/foundation/utility/placement/IPlacementHelper.java index 2b3403f0f..63ec2aace 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/placement/IPlacementHelper.java +++ b/src/main/java/com/simibubi/create/foundation/utility/placement/IPlacementHelper.java @@ -65,7 +65,7 @@ public interface IPlacementHelper { PlacementOffset offset = getOffset(player, world, state, pos, ray); if (heldItem.getItem() instanceof BlockItem) { BlockItem blockItem = (BlockItem) heldItem.getItem(); - offset = offset.withGhostState(blockItem.getBlock().getDefaultState()); + offset = offset.withGhostState(blockItem.getBlock().defaultBlockState()); } return offset; } @@ -89,11 +89,11 @@ public interface IPlacementHelper { } static void renderArrow(Vector3d center, Vector3d target, Direction arrowPlane, double distanceFromCenter) { Vector3d direction = target.subtract(center).normalize(); - Vector3d facing = Vector3d.of(arrowPlane.getDirectionVec()); + Vector3d facing = Vector3d.atLowerCornerOf(arrowPlane.getNormal()); Vector3d start = center.add(direction); Vector3d offset = direction.scale(distanceFromCenter - 1); - Vector3d offsetA = direction.crossProduct(facing).normalize().scale(.25); - Vector3d offsetB = facing.crossProduct(direction).normalize().scale(.25); + Vector3d offsetA = direction.cross(facing).normalize().scale(.25); + Vector3d offsetB = facing.cross(direction).normalize().scale(.25); Vector3d endA = center.add(direction.scale(.75)).add(offsetA); Vector3d endB = center.add(direction.scale(.75)).add(offsetB); CreateClient.OUTLINER.showLine("placementArrowA" + center + target, start.add(offset), endA.add(offset)).lineWidth(1 / 16f); @@ -141,7 +141,7 @@ public interface IPlacementHelper { Vector3d centerToHit = hit.subtract(VecHelper.getCenterOf(pos)); return Arrays.stream(Iterate.directions) .filter(includeDirection) - .map(dir -> Pair.of(dir, Vector3d.of(dir.getDirectionVec()).distanceTo(centerToHit))) + .map(dir -> Pair.of(dir, Vector3d.atLowerCornerOf(dir.getNormal()).distanceTo(centerToHit))) .sorted(Comparator.comparingDouble(Pair::getSecond)) .map(Pair::getFirst) .collect(Collectors.toList()); diff --git a/src/main/java/com/simibubi/create/foundation/utility/placement/PlacementHelpers.java b/src/main/java/com/simibubi/create/foundation/utility/placement/PlacementHelpers.java index 09f98b72f..1bb88d18d 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/placement/PlacementHelpers.java +++ b/src/main/java/com/simibubi/create/foundation/utility/placement/PlacementHelpers.java @@ -78,30 +78,30 @@ public class PlacementHelpers { @OnlyIn(Dist.CLIENT) private static void checkHelpers() { Minecraft mc = Minecraft.getInstance(); - ClientWorld world = mc.world; + ClientWorld world = mc.level; if (world == null) return; - if (!(mc.objectMouseOver instanceof BlockRayTraceResult)) + if (!(mc.hitResult instanceof BlockRayTraceResult)) return; - BlockRayTraceResult ray = (BlockRayTraceResult) mc.objectMouseOver; + BlockRayTraceResult ray = (BlockRayTraceResult) mc.hitResult; if (mc.player == null) return; - if (mc.player.isSneaking())//for now, disable all helpers when sneaking TODO add helpers that respect sneaking but still show position + if (mc.player.isShiftKeyDown())//for now, disable all helpers when sneaking TODO add helpers that respect sneaking but still show position return; for (Hand hand : Hand.values()) { - ItemStack heldItem = mc.player.getHeldItem(hand); + ItemStack heldItem = mc.player.getItemInHand(hand); List filteredForHeldItem = helpers.stream().filter(helper -> helper.matchesItem(heldItem)).collect(Collectors.toList()); if (filteredForHeldItem.isEmpty()) continue; - BlockPos pos = ray.getPos(); + BlockPos pos = ray.getBlockPos(); BlockState state = world.getBlockState(pos); List filteredForState = filteredForHeldItem.stream().filter(helper -> helper.matchesState(state)).collect(Collectors.toList()); @@ -155,8 +155,8 @@ public class PlacementHelpers { if (player != null && animationTick > 0) { MainWindow res = event.getWindow(); - float screenY = res.getScaledHeight() / 2f; - float screenX = res.getScaledWidth() / 2f; + float screenY = res.getGuiScaledHeight() / 2f; + float screenX = res.getGuiScaledWidth() / 2f; float progress = getCurrentAlpha(); drawDirectionIndicator(event.getMatrixStack(), event.getPartialTicks(), screenX, screenY, progress); @@ -178,12 +178,12 @@ public class PlacementHelpers { Vector3d target = new Vector3d(projTarget.x, projTarget.y, 0); if (projTarget.z > 0) { - target = target.inverse(); + target = target.reverse(); } Vector3d norm = target.normalize(); Vector3d ref = new Vector3d(0, 1, 0); - float targetAngle = AngleHelper.deg(Math.acos(norm.dotProduct(ref))); + float targetAngle = AngleHelper.deg(Math.acos(norm.dot(ref))); angle.withSpeed(0.25f); @@ -210,7 +210,7 @@ public class PlacementHelpers { } private static void fadedArrow(MatrixStack ms, float centerX, float centerY, float r, float g, float b, float a, float length, float snappedAngle) { - ms.push(); + ms.pushPose(); RenderSystem.disableTexture(); RenderSystem.enableBlend(); RenderSystem.disableAlphaTest(); @@ -218,16 +218,16 @@ public class PlacementHelpers { RenderSystem.shadeModel(GL11.GL_SMOOTH); ms.translate(centerX, centerY, 0); - ms.multiply(Vector3f.POSITIVE_Z.getDegreesQuaternion(angle.get(0))); + ms.mulPose(Vector3f.ZP.rotationDegrees(angle.get(0))); //RenderSystem.rotatef(snappedAngle, 0, 0, 1); double scale = AllConfigs.CLIENT.indicatorScale.get(); RenderSystem.scaled(scale, scale, 1); Tessellator tessellator = Tessellator.getInstance(); - BufferBuilder bufferbuilder = tessellator.getBuffer(); + BufferBuilder bufferbuilder = tessellator.getBuilder(); bufferbuilder.begin(GL11.GL_POLYGON, DefaultVertexFormats.POSITION_COLOR); - Matrix4f mat = ms.peek().getModel(); + Matrix4f mat = ms.last().pose(); bufferbuilder.vertex(mat, 0, - (10 + length), 0).color(r, g, b, a).endVertex(); @@ -239,16 +239,16 @@ public class PlacementHelpers { bufferbuilder.vertex(mat, 6, -6, 0).color(r, g, b, 0f).endVertex(); bufferbuilder.vertex(mat, 9, -3, 0).color(r, g, b, 0f).endVertex(); - tessellator.draw(); + tessellator.end(); RenderSystem.shadeModel(GL11.GL_FLAT); RenderSystem.disableBlend(); RenderSystem.enableAlphaTest(); RenderSystem.enableTexture(); - ms.pop(); + ms.popPose(); } private static void textured(MatrixStack ms, float centerX, float centerY, float alpha, float snappedAngle) { - ms.push(); + ms.pushPose(); RenderSystem.enableTexture(); AllGuiTextures.PLACEMENT_INDICATOR_SHEET.bind(); RenderSystem.enableBlend(); @@ -270,20 +270,20 @@ public class PlacementHelpers { float th = tex_size; Tessellator tessellator = Tessellator.getInstance(); - BufferBuilder buffer = tessellator.getBuffer(); - buffer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_COLOR_TEXTURE); + BufferBuilder buffer = tessellator.getBuilder(); + buffer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_COLOR_TEX); - Matrix4f mat = ms.peek().getModel(); - buffer.vertex(mat, -1, -1, 0).color(1f, 1f, 1f, alpha).texture(tx, ty).endVertex(); - buffer.vertex(mat, -1, 1, 0).color(1f, 1f, 1f, alpha).texture(tx, ty + th).endVertex(); - buffer.vertex(mat, 1, 1, 0).color(1f, 1f, 1f, alpha).texture(tx + tw, ty + th).endVertex(); - buffer.vertex(mat, 1, -1, 0).color(1f, 1f, 1f, alpha).texture(tx + tw, ty).endVertex(); + Matrix4f mat = ms.last().pose(); + buffer.vertex(mat, -1, -1, 0).color(1f, 1f, 1f, alpha).uv(tx, ty).endVertex(); + buffer.vertex(mat, -1, 1, 0).color(1f, 1f, 1f, alpha).uv(tx, ty + th).endVertex(); + buffer.vertex(mat, 1, 1, 0).color(1f, 1f, 1f, alpha).uv(tx + tw, ty + th).endVertex(); + buffer.vertex(mat, 1, -1, 0).color(1f, 1f, 1f, alpha).uv(tx + tw, ty).endVertex(); - tessellator.draw(); + tessellator.end(); RenderSystem.shadeModel(GL11.GL_FLAT); RenderSystem.disableBlend(); - ms.pop(); + ms.popPose(); } } diff --git a/src/main/java/com/simibubi/create/foundation/utility/placement/PlacementOffset.java b/src/main/java/com/simibubi/create/foundation/utility/placement/PlacementOffset.java index aebe09f8c..4ab7ef08f 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/placement/PlacementOffset.java +++ b/src/main/java/com/simibubi/create/foundation/utility/placement/PlacementOffset.java @@ -108,23 +108,23 @@ public class PlacementOffset { if (!isReplaceable(world)) return ActionResultType.PASS; - if (world.isRemote) + if (world.isClientSide) return ActionResultType.SUCCESS; ItemUseContext context = new ItemUseContext(player, hand, ray); BlockPos newPos = new BlockPos(pos); - if (!world.isBlockModifiable(player, newPos)) + if (!world.mayInteract(player, newPos)) return ActionResultType.PASS; - BlockState state = stateTransform.apply(blockItem.getBlock().getDefaultState()); - if (state.contains(BlockStateProperties.WATERLOGGED)) { + BlockState state = stateTransform.apply(blockItem.getBlock().defaultBlockState()); + if (state.hasProperty(BlockStateProperties.WATERLOGGED)) { FluidState fluidState = world.getFluidState(newPos); - state = state.with(BlockStateProperties.WATERLOGGED, fluidState.getFluid() == Fluids.WATER); + state = state.setValue(BlockStateProperties.WATERLOGGED, fluidState.getType() == Fluids.WATER); } - BlockSnapshot snapshot = BlockSnapshot.create(world.getRegistryKey(), world, newPos); - world.setBlockState(newPos, state); + BlockSnapshot snapshot = BlockSnapshot.create(world.dimension(), world, newPos); + world.setBlockAndUpdate(newPos, state); BlockEvent.EntityPlaceEvent event = new BlockEvent.EntityPlaceEvent(snapshot, IPlacementHelper.ID, player); if (MinecraftForge.EVENT_BUS.post(event)) { @@ -136,13 +136,13 @@ public class PlacementOffset { SoundType soundtype = newState.getSoundType(world, newPos, player); world.playSound(null, newPos, soundtype.getPlaceSound(), SoundCategory.BLOCKS, (soundtype.getVolume() + 1.0F) / 2.0F, soundtype.getPitch() * 0.8F); - player.addStat(Stats.ITEM_USED.get(blockItem)); + player.awardStat(Stats.ITEM_USED.get(blockItem)); if (player instanceof ServerPlayerEntity) - CriteriaTriggers.PLACED_BLOCK.trigger((ServerPlayerEntity) player, newPos, context.getItem()); + CriteriaTriggers.PLACED_BLOCK.trigger((ServerPlayerEntity) player, newPos, context.getItemInHand()); if (!player.isCreative()) - context.getItem().shrink(1); + context.getItemInHand().shrink(1); return ActionResultType.SUCCESS; } diff --git a/src/main/java/com/simibubi/create/foundation/utility/placement/util/PoleHelper.java b/src/main/java/com/simibubi/create/foundation/utility/placement/util/PoleHelper.java index f362531d3..8488daf3a 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/placement/util/PoleHelper.java +++ b/src/main/java/com/simibubi/create/foundation/utility/placement/util/PoleHelper.java @@ -41,12 +41,12 @@ public abstract class PoleHelper> implements IPlacementH } public int attachedPoles(World world, BlockPos pos, Direction direction) { - BlockPos checkPos = pos.offset(direction); + BlockPos checkPos = pos.relative(direction); BlockState state = world.getBlockState(checkPos); int count = 0; while (matchesAxis(state, direction.getAxis())) { count++; - checkPos = checkPos.offset(direction); + checkPos = checkPos.relative(direction); state = world.getBlockState(checkPos); } return count; @@ -59,7 +59,7 @@ public abstract class PoleHelper> implements IPlacementH @Override public PlacementOffset getOffset(PlayerEntity player, World world, BlockState state, BlockPos pos, BlockRayTraceResult ray) { - List directions = IPlacementHelper.orderedByDistance(pos, ray.getHitVec(), dir -> dir.getAxis() == axisFunction.apply(state)); + List directions = IPlacementHelper.orderedByDistance(pos, ray.getLocation(), dir -> dir.getAxis() == axisFunction.apply(state)); for (Direction dir : directions) { int range = AllConfigs.SERVER.curiosities.placementAssistRange.get(); if (player != null) { @@ -71,11 +71,11 @@ public abstract class PoleHelper> implements IPlacementH if (poles >= range) continue; - BlockPos newPos = pos.offset(dir, poles + 1); + BlockPos newPos = pos.relative(dir, poles + 1); BlockState newState = world.getBlockState(newPos); if (newState.getMaterial().isReplaceable()) - return PlacementOffset.success(newPos, bState -> bState.with(property, state.get(property))); + return PlacementOffset.success(newPos, bState -> bState.setValue(property, state.getValue(property))); } diff --git a/src/main/java/com/simibubi/create/foundation/utility/recipe/RecipeConditions.java b/src/main/java/com/simibubi/create/foundation/utility/recipe/RecipeConditions.java index 901ca5dc6..95123ff19 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/recipe/RecipeConditions.java +++ b/src/main/java/com/simibubi/create/foundation/utility/recipe/RecipeConditions.java @@ -31,7 +31,7 @@ public class RecipeConditions { } public static Predicate> outputMatchesFilter(FilteringBehaviour filtering) { - return r -> filtering.test(r.getRecipeOutput()); + return r -> filtering.test(r.getResultItem()); } diff --git a/src/main/java/com/simibubi/create/foundation/utility/worldWrappers/PlacementSimulationServerWorld.java b/src/main/java/com/simibubi/create/foundation/utility/worldWrappers/PlacementSimulationServerWorld.java index 60b82a4e5..18ce49c0c 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/worldWrappers/PlacementSimulationServerWorld.java +++ b/src/main/java/com/simibubi/create/foundation/utility/worldWrappers/PlacementSimulationServerWorld.java @@ -21,23 +21,23 @@ public class PlacementSimulationServerWorld extends WrappedServerWorld { } @Override - public boolean setBlockState(BlockPos pos, BlockState newState, int flags) { - blocksAdded.put(pos.toImmutable(), newState); + public boolean setBlock(BlockPos pos, BlockState newState, int flags) { + blocksAdded.put(pos.immutable(), newState); return true; } @Override - public boolean setBlockState(BlockPos pos, BlockState state) { - return setBlockState(pos, state, 0); + public boolean setBlockAndUpdate(BlockPos pos, BlockState state) { + return setBlock(pos, state, 0); } @Override - public boolean hasBlockState(BlockPos pos, Predicate condition) { + public boolean isStateAtPosition(BlockPos pos, Predicate condition) { return condition.test(getBlockState(pos)); } @Override - public boolean isBlockPresent(BlockPos pos) { + public boolean isLoaded(BlockPos pos) { return true; } @@ -50,7 +50,7 @@ public class PlacementSimulationServerWorld extends WrappedServerWorld { public BlockState getBlockState(BlockPos pos) { if (blocksAdded.containsKey(pos)) return blocksAdded.get(pos); - return Blocks.AIR.getDefaultState(); + return Blocks.AIR.defaultBlockState(); } } diff --git a/src/main/java/com/simibubi/create/foundation/utility/worldWrappers/PlacementSimulationWorld.java b/src/main/java/com/simibubi/create/foundation/utility/worldWrappers/PlacementSimulationWorld.java index e0f1c9806..57a1462b6 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/worldWrappers/PlacementSimulationWorld.java +++ b/src/main/java/com/simibubi/create/foundation/utility/worldWrappers/PlacementSimulationWorld.java @@ -40,7 +40,7 @@ public class PlacementSimulationWorld extends WrappedWorld implements IFlywheelW } @Override - public WorldLightManager getLightingProvider() { + public WorldLightManager getLightEngine() { return lighter; } @@ -50,14 +50,14 @@ public class PlacementSimulationWorld extends WrappedWorld implements IFlywheelW BlockState state = entry.getValue(); int light = state.getLightValue(this, pos); if (light > 0) { - lighter.func_215573_a(pos, light); + lighter.onBlockEmissionIncrease(pos, light); } } } public void setTileEntities(Collection tileEntities) { tesAdded.clear(); - tileEntities.forEach(te -> tesAdded.put(te.getPos(), te)); + tileEntities.forEach(te -> tesAdded.put(te.getBlockPos(), te)); } public void clear() { @@ -65,10 +65,10 @@ public class PlacementSimulationWorld extends WrappedWorld implements IFlywheelW } @Override - public boolean setBlockState(BlockPos pos, BlockState newState, int flags) { + public boolean setBlock(BlockPos pos, BlockState newState, int flags) { blocksAdded.put(pos, newState); - SectionPos sectionPos = SectionPos.from(pos); + SectionPos sectionPos = SectionPos.of(pos); if (spannedSections.add(sectionPos)) { lighter.updateSectionStatus(sectionPos, false); } @@ -81,22 +81,22 @@ public class PlacementSimulationWorld extends WrappedWorld implements IFlywheelW } @Override - public boolean setBlockState(BlockPos pos, BlockState state) { - return setBlockState(pos, state, 0); + public boolean setBlockAndUpdate(BlockPos pos, BlockState state) { + return setBlock(pos, state, 0); } @Override - public TileEntity getTileEntity(BlockPos pos) { + public TileEntity getBlockEntity(BlockPos pos) { return tesAdded.get(pos); } @Override - public boolean hasBlockState(BlockPos pos, Predicate condition) { + public boolean isStateAtPosition(BlockPos pos, Predicate condition) { return condition.test(getBlockState(pos)); } @Override - public boolean isBlockPresent(BlockPos pos) { + public boolean isLoaded(BlockPos pos) { return true; } @@ -106,7 +106,7 @@ public class PlacementSimulationWorld extends WrappedWorld implements IFlywheelW } public BlockState getBlockState(int x, int y, int z) { - return getBlockState(scratch.setPos(x, y, z)); + return getBlockState(scratch.set(x, y, z)); } @Override @@ -114,6 +114,6 @@ public class PlacementSimulationWorld extends WrappedWorld implements IFlywheelW BlockState state = blocksAdded.get(pos); if (state != null) return state; - return Blocks.AIR.getDefaultState(); + return Blocks.AIR.defaultBlockState(); } } diff --git a/src/main/java/com/simibubi/create/foundation/utility/worldWrappers/RayTraceWorld.java b/src/main/java/com/simibubi/create/foundation/utility/worldWrappers/RayTraceWorld.java index 3a15cc1e7..eb608d262 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/worldWrappers/RayTraceWorld.java +++ b/src/main/java/com/simibubi/create/foundation/utility/worldWrappers/RayTraceWorld.java @@ -20,8 +20,8 @@ public class RayTraceWorld implements IBlockReader { } @Override - public TileEntity getTileEntity(BlockPos pos) { - return template.getTileEntity(pos); + public TileEntity getBlockEntity(BlockPos pos) { + return template.getBlockEntity(pos); } @Override diff --git a/src/main/java/com/simibubi/create/foundation/utility/worldWrappers/WrappedChunkProvider.java b/src/main/java/com/simibubi/create/foundation/utility/worldWrappers/WrappedChunkProvider.java index dbc75fcfd..7d68691b1 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/worldWrappers/WrappedChunkProvider.java +++ b/src/main/java/com/simibubi/create/foundation/utility/worldWrappers/WrappedChunkProvider.java @@ -38,12 +38,12 @@ public class WrappedChunkProvider extends AbstractChunkProvider { @Nullable @Override - public IBlockReader getChunkForLight(int x, int z) { + public IBlockReader getChunkForLighting(int x, int z) { return getChunk(x, z); } @Override - public IBlockReader getWorld() { + public IBlockReader getLevel() { return world; } @@ -63,12 +63,12 @@ public class WrappedChunkProvider extends AbstractChunkProvider { } @Override - public String makeString() { + public String gatherStats() { return "WrappedChunkProvider"; } @Override - public WorldLightManager getLightManager() { - return world.getLightingProvider(); + public WorldLightManager getLightEngine() { + return world.getLightEngine(); } } diff --git a/src/main/java/com/simibubi/create/foundation/utility/worldWrappers/WrappedClientWorld.java b/src/main/java/com/simibubi/create/foundation/utility/worldWrappers/WrappedClientWorld.java index f72f2b771..4e497fdc7 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/worldWrappers/WrappedClientWorld.java +++ b/src/main/java/com/simibubi/create/foundation/utility/worldWrappers/WrappedClientWorld.java @@ -38,7 +38,7 @@ public class WrappedClientWorld extends ClientWorld { protected World world; private WrappedClientWorld(World world) { - super(mc.getConnection(), mc.world.getWorldInfo(), world.getRegistryKey(), world.getDimension(), mc.getConnection().viewDistance, world.getProfilerSupplier(), mc.worldRenderer, world.isDebugWorld(), world.getBiomeAccess().seed); + super(mc.getConnection(), mc.level.getLevelData(), world.dimension(), world.dimensionType(), mc.getConnection().serverChunkRadius, world.getProfilerSupplier(), mc.levelRenderer, world.isDebug(), world.getBiomeManager().biomeZoomSeed); this.world = world; } @@ -47,13 +47,13 @@ public class WrappedClientWorld extends ClientWorld { } @Override - public boolean isBlockLoaded(BlockPos pos) { - return world.isBlockLoaded(pos); + public boolean hasChunkAt(BlockPos pos) { + return world.hasChunkAt(pos); } @Override - public boolean isBlockPresent(BlockPos pos) { - return world.isBlockPresent(pos); + public boolean isLoaded(BlockPos pos) { + return world.isLoaded(pos); } @Override @@ -75,13 +75,13 @@ public class WrappedClientWorld extends ClientWorld { @Override - public int getLightLevel(LightType type, BlockPos pos) { - return world.getLightLevel(type, pos); + public int getBrightness(LightType type, BlockPos pos) { + return world.getBrightness(type, pos); } @Override - public int getLightValue(BlockPos pos) { - return world.getLightValue(pos); + public int getLightEmission(BlockPos pos) { + return world.getLightEmission(pos); } @Override @@ -91,13 +91,13 @@ public class WrappedClientWorld extends ClientWorld { @Nullable @Override - public T getClosestEntity(List p_217361_1_, EntityPredicate p_217361_2_, @Nullable LivingEntity p_217361_3_, double p_217361_4_, double p_217361_6_, double p_217361_8_) { - return world.getClosestEntity(p_217361_1_, p_217361_2_, p_217361_3_, p_217361_4_, p_217361_6_, p_217361_8_); + public T getNearestEntity(List p_217361_1_, EntityPredicate p_217361_2_, @Nullable LivingEntity p_217361_3_, double p_217361_4_, double p_217361_6_, double p_217361_8_) { + return world.getNearestEntity(p_217361_1_, p_217361_2_, p_217361_3_, p_217361_4_, p_217361_6_, p_217361_8_); } @Override - public int getColor(BlockPos p_225525_1_, ColorResolver p_225525_2_) { - return world.getColor(p_225525_1_, p_225525_2_); + public int getBlockTint(BlockPos p_225525_1_, ColorResolver p_225525_2_) { + return world.getBlockTint(p_225525_1_, p_225525_2_); } // FIXME: Emissive Lighting might not light stuff properly @@ -114,18 +114,18 @@ public class WrappedClientWorld extends ClientWorld { } @Override - public void addOptionalParticle(IParticleData p_195589_1_, double p_195589_2_, double p_195589_4_, double p_195589_6_, double p_195589_8_, double p_195589_10_, double p_195589_12_) { - world.addOptionalParticle(p_195589_1_, p_195589_2_, p_195589_4_, p_195589_6_, p_195589_8_, p_195589_10_, p_195589_12_); + public void addAlwaysVisibleParticle(IParticleData p_195589_1_, double p_195589_2_, double p_195589_4_, double p_195589_6_, double p_195589_8_, double p_195589_10_, double p_195589_12_) { + world.addAlwaysVisibleParticle(p_195589_1_, p_195589_2_, p_195589_4_, p_195589_6_, p_195589_8_, p_195589_10_, p_195589_12_); } @Override - public void addOptionalParticle(IParticleData p_217404_1_, boolean p_217404_2_, double p_217404_3_, double p_217404_5_, double p_217404_7_, double p_217404_9_, double p_217404_11_, double p_217404_13_) { - world.addOptionalParticle(p_217404_1_, p_217404_2_, p_217404_3_, p_217404_5_, p_217404_7_, p_217404_9_, p_217404_11_, p_217404_13_); + public void addAlwaysVisibleParticle(IParticleData p_217404_1_, boolean p_217404_2_, double p_217404_3_, double p_217404_5_, double p_217404_7_, double p_217404_9_, double p_217404_11_, double p_217404_13_) { + world.addAlwaysVisibleParticle(p_217404_1_, p_217404_2_, p_217404_3_, p_217404_5_, p_217404_7_, p_217404_9_, p_217404_11_, p_217404_13_); } @Override - public void playSound(double p_184134_1_, double p_184134_3_, double p_184134_5_, SoundEvent p_184134_7_, SoundCategory p_184134_8_, float p_184134_9_, float p_184134_10_, boolean p_184134_11_) { - world.playSound(p_184134_1_, p_184134_3_, p_184134_5_, p_184134_7_,p_184134_8_, p_184134_9_, p_184134_10_, p_184134_11_); + public void playLocalSound(double p_184134_1_, double p_184134_3_, double p_184134_5_, SoundEvent p_184134_7_, SoundCategory p_184134_8_, float p_184134_9_, float p_184134_10_, boolean p_184134_11_) { + world.playLocalSound(p_184134_1_, p_184134_3_, p_184134_5_, p_184134_7_,p_184134_8_, p_184134_9_, p_184134_10_, p_184134_11_); } @Override @@ -135,8 +135,8 @@ public class WrappedClientWorld extends ClientWorld { @Nullable @Override - public TileEntity getTileEntity(BlockPos p_175625_1_) { - return world.getTileEntity(p_175625_1_); + public TileEntity getBlockEntity(BlockPos p_175625_1_) { + return world.getBlockEntity(p_175625_1_); } public World getWrappedWorld() { return world; diff --git a/src/main/java/com/simibubi/create/foundation/utility/worldWrappers/WrappedServerWorld.java b/src/main/java/com/simibubi/create/foundation/utility/worldWrappers/WrappedServerWorld.java index ec967e3d7..1ee80a641 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/worldWrappers/WrappedServerWorld.java +++ b/src/main/java/com/simibubi/create/foundation/utility/worldWrappers/WrappedServerWorld.java @@ -37,48 +37,48 @@ public class WrappedServerWorld extends ServerWorld { protected World world; public WrappedServerWorld(World world) { - // Replace null with world.getChunkProvider().chunkManager.field_219266_t ? We had null in 1.15 - super(world.getServer(), Util.getServerExecutor(), getLevelSaveFromWorld(world), (IServerWorldInfo) world.getWorldInfo(), world.getRegistryKey(), world.getDimension(), null, ((ServerChunkProvider) world.getChunkProvider()).getChunkGenerator(), world.isDebugWorld(), world.getBiomeAccess().seed, Collections.EMPTY_LIST, false); //, world.field_25143); + // Replace null with world.getChunkProvider().chunkManager.progressListener ? We had null in 1.15 + super(world.getServer(), Util.backgroundExecutor(), getLevelSaveFromWorld(world), (IServerWorldInfo) world.getLevelData(), world.dimension(), world.dimensionType(), null, ((ServerChunkProvider) world.getChunkSource()).getGenerator(), world.isDebug(), world.getBiomeManager().biomeZoomSeed, Collections.EMPTY_LIST, false); //, world.field_25143); this.world = world; } @Override - public float getCelestialAngleRadians(float p_72826_1_) { + public float getSunAngle(float p_72826_1_) { return 0; } - + @Override - public int getLight(BlockPos pos) { + public int getMaxLocalRawBrightness(BlockPos pos) { return 15; } @Override - public void notifyBlockUpdate(BlockPos pos, BlockState oldState, BlockState newState, int flags) { - world.notifyBlockUpdate(pos, oldState, newState, flags); + public void sendBlockUpdated(BlockPos pos, BlockState oldState, BlockState newState, int flags) { + world.sendBlockUpdated(pos, oldState, newState, flags); } @Override - public ServerTickList getPendingBlockTicks() { - ITickList tl = world.getPendingBlockTicks(); + public ServerTickList getBlockTicks() { + ITickList tl = world.getBlockTicks(); if (tl instanceof ServerTickList) return (ServerTickList) tl; - return super.getPendingBlockTicks(); + return super.getBlockTicks(); } @Override - public ServerTickList getPendingFluidTicks() { - ITickList tl = world.getPendingFluidTicks(); + public ServerTickList getLiquidTicks() { + ITickList tl = world.getLiquidTicks(); if (tl instanceof ServerTickList) return (ServerTickList) tl; - return super.getPendingFluidTicks(); + return super.getLiquidTicks(); } @Override - public void playEvent(PlayerEntity player, int type, BlockPos pos, int data) { + public void levelEvent(PlayerEntity player, int type, BlockPos pos, int data) { } @Override - public List getPlayers() { + public List players() { return Collections.emptyList(); } @@ -88,12 +88,12 @@ public class WrappedServerWorld extends ServerWorld { } @Override - public void playMovingSound(PlayerEntity p_217384_1_, Entity p_217384_2_, SoundEvent p_217384_3_, + public void playSound(PlayerEntity p_217384_1_, Entity p_217384_2_, SoundEvent p_217384_3_, SoundCategory p_217384_4_, float p_217384_5_, float p_217384_6_) { } @Override - public Entity getEntityByID(int id) { + public Entity getEntity(int id) { return null; } @@ -103,22 +103,22 @@ public class WrappedServerWorld extends ServerWorld { } @Override - public boolean addEntity(Entity entityIn) { - entityIn.setWorld(world); - return world.addEntity(entityIn); + public boolean addFreshEntity(Entity entityIn) { + entityIn.setLevel(world); + return world.addFreshEntity(entityIn); } @Override - public void registerMapData(MapData mapDataIn) { + public void setMapData(MapData mapDataIn) { } @Override - public int getNextMapId() { + public int getFreeMapId() { return 0; } @Override - public void sendBlockBreakProgress(int breakerId, BlockPos pos, int progress) { + public void destroyBlockProgress(int breakerId, BlockPos pos, int progress) { } @Override @@ -127,16 +127,16 @@ public class WrappedServerWorld extends ServerWorld { } @Override - public ITagCollectionSupplier getTags() { - return world.getTags(); + public ITagCollectionSupplier getTagManager() { + return world.getTagManager(); } @Override - public Biome getGeneratorStoredBiome(int p_225604_1_, int p_225604_2_, int p_225604_3_) { - return world.getGeneratorStoredBiome(p_225604_1_, p_225604_2_, p_225604_3_); + public Biome getUncachedNoiseBiome(int p_225604_1_, int p_225604_2_, int p_225604_3_) { + return world.getUncachedNoiseBiome(p_225604_1_, p_225604_2_, p_225604_3_); } private static SaveFormat.LevelSave getLevelSaveFromWorld(World world) { - return ObfuscationReflectionHelper.getPrivateValue(MinecraftServer.class, world.getServer(), "field_71310_m"); + return ObfuscationReflectionHelper.getPrivateValue(MinecraftServer.class, world.getServer(), "storageSource"); // storageSource } } diff --git a/src/main/java/com/simibubi/create/foundation/utility/worldWrappers/WrappedWorld.java b/src/main/java/com/simibubi/create/foundation/utility/worldWrappers/WrappedWorld.java index 634da56bd..46b8cdcf6 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/worldWrappers/WrappedWorld.java +++ b/src/main/java/com/simibubi/create/foundation/utility/worldWrappers/WrappedWorld.java @@ -38,8 +38,8 @@ public class WrappedWorld extends World { protected AbstractChunkProvider provider; public WrappedWorld(World world, AbstractChunkProvider provider) { - super((ISpawnWorldInfo) world.getWorldInfo(), world.getRegistryKey(), world.getDimension(), world::getProfiler, - world.isRemote, world.isDebugWorld(), 0); + super((ISpawnWorldInfo) world.getLevelData(), world.dimension(), world.dimensionType(), world::getProfiler, + world.isClientSide, world.isDebug(), 0); this.world = world; this.provider = provider; } @@ -48,13 +48,13 @@ public class WrappedWorld extends World { this(world, null); } - public World getWorld() { + public World getLevel() { return world; } @Override - public WorldLightManager getLightingProvider() { - return world.getLightingProvider(); + public WorldLightManager getLightEngine() { + return world.getLightEngine(); } @Override @@ -63,50 +63,50 @@ public class WrappedWorld extends World { } @Override - public boolean hasBlockState(@Nullable BlockPos p_217375_1_, @Nullable Predicate p_217375_2_) { - return world.hasBlockState(p_217375_1_, p_217375_2_); + public boolean isStateAtPosition(@Nullable BlockPos p_217375_1_, @Nullable Predicate p_217375_2_) { + return world.isStateAtPosition(p_217375_1_, p_217375_2_); } @Override - public TileEntity getTileEntity(@Nullable BlockPos pos) { - return world.getTileEntity(pos); + public TileEntity getBlockEntity(@Nullable BlockPos pos) { + return world.getBlockEntity(pos); } @Override - public boolean setBlockState(@Nullable BlockPos pos, @Nullable BlockState newState, int flags) { - return world.setBlockState(pos, newState, flags); + public boolean setBlock(@Nullable BlockPos pos, @Nullable BlockState newState, int flags) { + return world.setBlock(pos, newState, flags); } @Override - public int getLight(BlockPos pos) { + public int getMaxLocalRawBrightness(BlockPos pos) { return 15; } @Override - public void notifyBlockUpdate(BlockPos pos, BlockState oldState, BlockState newState, int flags) { - world.notifyBlockUpdate(pos, oldState, newState, flags); + public void sendBlockUpdated(BlockPos pos, BlockState oldState, BlockState newState, int flags) { + world.sendBlockUpdated(pos, oldState, newState, flags); } @Override - public ITickList getPendingBlockTicks() { - return world.getPendingBlockTicks(); + public ITickList getBlockTicks() { + return world.getBlockTicks(); } @Override - public ITickList getPendingFluidTicks() { - return world.getPendingFluidTicks(); + public ITickList getLiquidTicks() { + return world.getLiquidTicks(); } @Override - public AbstractChunkProvider getChunkProvider() { + public AbstractChunkProvider getChunkSource() { return provider; } @Override - public void playEvent(@Nullable PlayerEntity player, int type, BlockPos pos, int data) {} + public void levelEvent(@Nullable PlayerEntity player, int type, BlockPos pos, int data) {} @Override - public List getPlayers() { + public List players() { return Collections.emptyList(); } @@ -115,11 +115,11 @@ public class WrappedWorld extends World { SoundCategory category, float volume, float pitch) {} @Override - public void playMovingSound(@Nullable PlayerEntity p_217384_1_, Entity p_217384_2_, SoundEvent p_217384_3_, + public void playSound(@Nullable PlayerEntity p_217384_1_, Entity p_217384_2_, SoundEvent p_217384_3_, SoundCategory p_217384_4_, float p_217384_5_, float p_217384_6_) {} @Override - public Entity getEntityByID(int id) { + public Entity getEntity(int id) { return null; } @@ -129,23 +129,23 @@ public class WrappedWorld extends World { } @Override - public boolean addEntity(@Nullable Entity entityIn) { + public boolean addFreshEntity(@Nullable Entity entityIn) { if (entityIn == null) return false; - entityIn.setWorld(world); - return world.addEntity(entityIn); + entityIn.setLevel(world); + return world.addFreshEntity(entityIn); } @Override - public void registerMapData(MapData mapDataIn) {} + public void setMapData(MapData mapDataIn) {} @Override - public int getNextMapId() { - return world.getNextMapId(); + public int getFreeMapId() { + return world.getFreeMapId(); } @Override - public void sendBlockBreakProgress(int breakerId, BlockPos pos, int progress) {} + public void destroyBlockProgress(int breakerId, BlockPos pos, int progress) {} @Override public Scoreboard getScoreboard() { @@ -158,36 +158,36 @@ public class WrappedWorld extends World { } @Override - public ITagCollectionSupplier getTags() { - return world.getTags(); + public ITagCollectionSupplier getTagManager() { + return world.getTagManager(); } @Override - public Biome getGeneratorStoredBiome(int p_225604_1_, int p_225604_2_, int p_225604_3_) { - return world.getGeneratorStoredBiome(p_225604_1_, p_225604_2_, p_225604_3_); + public Biome getUncachedNoiseBiome(int p_225604_1_, int p_225604_2_, int p_225604_3_) { + return world.getUncachedNoiseBiome(p_225604_1_, p_225604_2_, p_225604_3_); } @Override - public DynamicRegistries getRegistryManager() { - return world.getRegistryManager(); + public DynamicRegistries registryAccess() { + return world.registryAccess(); } @Override - public float getBrightness(Direction p_230487_1_, boolean p_230487_2_) { - return world.getBrightness(p_230487_1_, p_230487_2_); + public float getShade(Direction p_230487_1_, boolean p_230487_2_) { + return world.getShade(p_230487_1_, p_230487_2_); } @Override - public void markChunkDirty(BlockPos p_175646_1_, TileEntity p_175646_2_) { + public void blockEntityChanged(BlockPos p_175646_1_, TileEntity p_175646_2_) { } @Override - public boolean isBlockLoaded(BlockPos p_175667_1_) { + public boolean hasChunkAt(BlockPos p_175667_1_) { return true; } @Override - public void updateComparatorOutputLevel(BlockPos p_175666_1_, Block p_175666_2_) { + public void updateNeighbourForOutputSignal(BlockPos p_175666_1_, Block p_175666_2_) { return; } } diff --git a/src/main/java/com/simibubi/create/foundation/utility/worldWrappers/chunk/EmptierChunk.java b/src/main/java/com/simibubi/create/foundation/utility/worldWrappers/chunk/EmptierChunk.java index 7543375f2..e5a963e2b 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/worldWrappers/chunk/EmptierChunk.java +++ b/src/main/java/com/simibubi/create/foundation/utility/worldWrappers/chunk/EmptierChunk.java @@ -24,7 +24,7 @@ public class EmptierChunk extends Chunk { } public BlockState getBlockState(BlockPos p_180495_1_) { - return Blocks.VOID_AIR.getDefaultState(); + return Blocks.VOID_AIR.defaultBlockState(); } @Nullable @@ -33,15 +33,15 @@ public class EmptierChunk extends Chunk { } public FluidState getFluidState(BlockPos p_204610_1_) { - return Fluids.EMPTY.getDefaultState(); + return Fluids.EMPTY.defaultFluidState(); } @Nullable - public WorldLightManager getWorldLightManager() { + public WorldLightManager getLightEngine() { return null; } - public int getLightValue(BlockPos p_217298_1_) { + public int getLightEmission(BlockPos p_217298_1_) { return 0; } @@ -49,34 +49,34 @@ public class EmptierChunk extends Chunk { public void removeEntity(Entity p_76622_1_) { } - public void removeEntityAtIndex(Entity p_76608_1_, int p_76608_2_) { } + public void removeEntity(Entity p_76608_1_, int p_76608_2_) { } @Nullable - public TileEntity getTileEntity(BlockPos p_177424_1_, Chunk.CreateEntityType p_177424_2_) { + public TileEntity getBlockEntity(BlockPos p_177424_1_, Chunk.CreateEntityType p_177424_2_) { return null; } - public void addTileEntity(TileEntity p_150813_1_) { } + public void addBlockEntity(TileEntity p_150813_1_) { } - public void addTileEntity(BlockPos p_177426_1_, TileEntity p_177426_2_) { } + public void setBlockEntity(BlockPos p_177426_1_, TileEntity p_177426_2_) { } - public void removeTileEntity(BlockPos p_177425_1_) { } + public void removeBlockEntity(BlockPos p_177425_1_) { } - public void markDirty() { } + public void markUnsaved() { } - public void getEntitiesWithinAABBForEntity(@Nullable Entity p_177414_1_, AxisAlignedBB p_177414_2_, List p_177414_3_, Predicate p_177414_4_) { } + public void getEntities(@Nullable Entity p_177414_1_, AxisAlignedBB p_177414_2_, List p_177414_3_, Predicate p_177414_4_) { } - public void getEntitiesOfTypeWithinAABB(Class p_177430_1_, AxisAlignedBB p_177430_2_, List p_177430_3_, Predicate p_177430_4_) { } + public void getEntitiesOfClass(Class p_177430_1_, AxisAlignedBB p_177430_2_, List p_177430_3_, Predicate p_177430_4_) { } public boolean isEmpty() { return true; } - public boolean isEmptyBetween(int p_76606_1_, int p_76606_2_) { + public boolean isYSpaceEmpty(int p_76606_1_, int p_76606_2_) { return true; } - public ChunkHolder.LocationType getLocationType() { + public ChunkHolder.LocationType getFullStatus() { return ChunkHolder.LocationType.BORDER; } } diff --git a/src/main/java/com/simibubi/create/foundation/utility/worldWrappers/chunk/WrappedChunk.java b/src/main/java/com/simibubi/create/foundation/utility/worldWrappers/chunk/WrappedChunk.java index c7bd8101d..6eaa14f87 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/worldWrappers/chunk/WrappedChunk.java +++ b/src/main/java/com/simibubi/create/foundation/utility/worldWrappers/chunk/WrappedChunk.java @@ -55,7 +55,7 @@ public class WrappedChunk implements IChunk { } @Override - public Stream getLightSources() { + public Stream getLights() { return world.blocksAdded .entrySet() .stream() @@ -84,7 +84,7 @@ public class WrappedChunk implements IChunk { } @Override - public void addTileEntity(BlockPos p_177426_1_, TileEntity p_177426_2_) { + public void setBlockEntity(BlockPos p_177426_1_, TileEntity p_177426_2_) { } @@ -94,12 +94,12 @@ public class WrappedChunk implements IChunk { } @Override - public Set getTileEntitiesPos() { + public Set getBlockEntitiesPos() { return null; } @Override - public Collection> func_217311_f() { + public Collection> getHeightmaps() { return null; } @@ -109,12 +109,12 @@ public class WrappedChunk implements IChunk { } @Override - public Heightmap getHeightmap(Heightmap.Type p_217303_1_) { + public Heightmap getOrCreateHeightmapUnprimed(Heightmap.Type p_217303_1_) { return null; } @Override - public int getTopBlockY(Heightmap.Type p_201576_1_, int p_201576_2_, int p_201576_3_) { + public int getHeight(Heightmap.Type p_201576_1_, int p_201576_2_, int p_201576_3_) { return 0; } @@ -130,49 +130,49 @@ public class WrappedChunk implements IChunk { @Nullable @Override - public BiomeContainer getBiomeArray() { + public BiomeContainer getBiomes() { return null; } @Override - public void setModified(boolean p_177427_1_) { + public void setUnsaved(boolean p_177427_1_) { } @Override - public boolean isModified() { + public boolean isUnsaved() { return false; } @Override - public void removeTileEntity(BlockPos p_177425_1_) { + public void removeBlockEntity(BlockPos p_177425_1_) { } @Override - public ShortList[] getPackedPositions() { + public ShortList[] getPostProcessing() { return new ShortList[0]; } @Nullable @Override - public CompoundNBT getDeferredTileEntity(BlockPos p_201579_1_) { + public CompoundNBT getBlockEntityNbt(BlockPos p_201579_1_) { return null; } @Nullable @Override - public CompoundNBT func_223134_j(BlockPos p_223134_1_) { + public CompoundNBT getBlockEntityNbtForSaving(BlockPos p_223134_1_) { return null; } @Override - public ITickList getBlocksToBeTicked() { + public ITickList getBlockTicks() { return null; } @Override - public ITickList getFluidsToBeTicked() { + public ITickList getLiquidTicks() { return null; } @@ -192,18 +192,18 @@ public class WrappedChunk implements IChunk { } @Override - public boolean hasLight() { + public boolean isLightCorrect() { return needsLight; } @Override - public void setLight(boolean needsLight) { + public void setLightCorrect(boolean needsLight) { this.needsLight = needsLight; } @Nullable @Override - public TileEntity getTileEntity(BlockPos pos) { + public TileEntity getBlockEntity(BlockPos pos) { return null; } @@ -218,42 +218,42 @@ public class WrappedChunk implements IChunk { } @Override - public void addStructureReference(Structure arg0, long arg1) { + public void addReferenceForFeature(Structure arg0, long arg1) { } @Override - public Map, LongSet> getStructureReferences() { + public Map, LongSet> getAllReferences() { return null; } @Override - public LongSet getStructureReferences(Structure arg0) { + public LongSet getReferencesForFeature(Structure arg0) { return null; } @Override - public StructureStart getStructureStart(Structure arg0) { + public StructureStart getStartForFeature(Structure arg0) { return null; } @Override - public void setStructureReferences(Map, LongSet> arg0) { + public void setAllReferences(Map, LongSet> arg0) { } @Override - public void setStructureStart(Structure arg0, StructureStart arg1) { + public void setStartForFeature(Structure arg0, StructureStart arg1) { } @Override - public void setStructureStarts(Map, StructureStart> p_201612_1_) { + public void setAllStarts(Map, StructureStart> p_201612_1_) { } @Override - public Map, StructureStart> getStructureStarts() { + public Map, StructureStart> getAllStarts() { return null; } diff --git a/src/main/java/com/simibubi/create/foundation/utility/worldWrappers/chunk/WrappedChunkSection.java b/src/main/java/com/simibubi/create/foundation/utility/worldWrappers/chunk/WrappedChunkSection.java index e5e90594d..26282a22b 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/worldWrappers/chunk/WrappedChunkSection.java +++ b/src/main/java/com/simibubi/create/foundation/utility/worldWrappers/chunk/WrappedChunkSection.java @@ -14,9 +14,9 @@ public class WrappedChunkSection extends ChunkSection { public WrappedChunkSection(WrappedChunk owner, int yBase) { super(yBase); this.owner = owner; - this.xStart = owner.pos.getXStart(); + this.xStart = owner.pos.getMinBlockX(); this.yStart = yBase; - this.zStart = owner.pos.getZStart(); + this.zStart = owner.pos.getMinBlockZ(); } @Override diff --git a/src/main/java/com/simibubi/create/foundation/worldgen/AllWorldFeatures.java b/src/main/java/com/simibubi/create/foundation/worldgen/AllWorldFeatures.java index 3eab6cd93..9113dd70a 100644 --- a/src/main/java/com/simibubi/create/foundation/worldgen/AllWorldFeatures.java +++ b/src/main/java/com/simibubi/create/foundation/worldgen/AllWorldFeatures.java @@ -77,7 +77,7 @@ public class AllWorldFeatures { if (event.getCategory() == Category.NETHER) return; event.getGeneration() - .feature(GenerationStage.Decoration.UNDERGROUND_ORES, entry.getFeature()); + .addFeature(GenerationStage.Decoration.UNDERGROUND_ORES, entry.getFeature()); }); } diff --git a/src/main/java/com/simibubi/create/foundation/worldgen/ConfigDrivenDecorator.java b/src/main/java/com/simibubi/create/foundation/worldgen/ConfigDrivenDecorator.java index b9c6509ad..86cfb3fe9 100644 --- a/src/main/java/com/simibubi/create/foundation/worldgen/ConfigDrivenDecorator.java +++ b/src/main/java/com/simibubi/create/foundation/worldgen/ConfigDrivenDecorator.java @@ -18,7 +18,7 @@ public class ConfigDrivenDecorator extends SimplePlacement getPositions(Random r, ConfigDrivenOreFeatureConfig config, BlockPos pos) { + protected Stream place(Random r, ConfigDrivenOreFeatureConfig config, BlockPos pos) { float frequency = config.getFrequency(); int floored = MathHelper.floor(frequency); diff --git a/src/main/java/com/simibubi/create/foundation/worldgen/ConfigDrivenFeatureEntry.java b/src/main/java/com/simibubi/create/foundation/worldgen/ConfigDrivenFeatureEntry.java index e89ff388e..78c8edd04 100644 --- a/src/main/java/com/simibubi/create/foundation/worldgen/ConfigDrivenFeatureEntry.java +++ b/src/main/java/com/simibubi/create/foundation/worldgen/ConfigDrivenFeatureEntry.java @@ -10,6 +10,9 @@ import net.minecraft.world.gen.feature.ConfiguredFeature; import net.minecraft.world.gen.feature.OreFeatureConfig.FillerBlockType; import net.minecraftforge.common.ForgeConfigSpec; +import com.simibubi.create.foundation.config.ConfigBase.ConfigFloat; +import com.simibubi.create.foundation.config.ConfigBase.ConfigInt; + public class ConfigDrivenFeatureEntry extends ConfigBase { public final String id; @@ -49,11 +52,11 @@ public class ConfigDrivenFeatureEntry extends ConfigBase { private ConfiguredFeature createFeature() { ConfigDrivenOreFeatureConfig config = - new ConfigDrivenOreFeatureConfig(FillerBlockType.BASE_STONE_OVERWORLD, block.get() - .getDefaultState(), id); + new ConfigDrivenOreFeatureConfig(FillerBlockType.NATURAL_STONE, block.get() + .defaultBlockState(), id); - return ConfigDrivenOreFeature.INSTANCE.configure(config) - .decorate(ConfigDrivenDecorator.INSTANCE.configure(config)); + return ConfigDrivenOreFeature.INSTANCE.configured(config) + .decorated(ConfigDrivenDecorator.INSTANCE.configured(config)); } public void addToConfig(ForgeConfigSpec.Builder builder) { diff --git a/src/main/java/com/simibubi/create/foundation/worldgen/ConfigDrivenOreFeature.java b/src/main/java/com/simibubi/create/foundation/worldgen/ConfigDrivenOreFeature.java index 959452655..b93026dc8 100644 --- a/src/main/java/com/simibubi/create/foundation/worldgen/ConfigDrivenOreFeature.java +++ b/src/main/java/com/simibubi/create/foundation/worldgen/ConfigDrivenOreFeature.java @@ -22,7 +22,7 @@ public class ConfigDrivenOreFeature extends Feature CODEC = RecordCodecBuilder.create((p_236568_0_) -> { - return p_236568_0_.group(RuleTest.field_25012.fieldOf("target") + return p_236568_0_.group(RuleTest.CODEC.fieldOf("target") .forGetter((p_236570_0_) -> { return p_236570_0_.target; }), BlockState.CODEC.fieldOf("state") diff --git a/src/main/java/com/simibubi/create/foundation/worldgen/OxidizingBlock.java b/src/main/java/com/simibubi/create/foundation/worldgen/OxidizingBlock.java index 74345a8a3..6793a7bf9 100644 --- a/src/main/java/com/simibubi/create/foundation/worldgen/OxidizingBlock.java +++ b/src/main/java/com/simibubi/create/foundation/worldgen/OxidizingBlock.java @@ -21,6 +21,8 @@ import net.minecraft.util.math.BlockRayTraceResult; import net.minecraft.world.World; import net.minecraft.world.server.ServerWorld; +import net.minecraft.block.AbstractBlock.Properties; + public class OxidizingBlock extends Block { public static final IntegerProperty OXIDIZATION = IntegerProperty.create("oxidization", 0, 7); @@ -29,35 +31,35 @@ public class OxidizingBlock extends Block { public OxidizingBlock(Properties properties, float chance) { super(properties); this.chance = chance; - setDefaultState(getDefaultState().with(OXIDIZATION, 0)); + registerDefaultState(defaultBlockState().setValue(OXIDIZATION, 0)); } @Override - protected void fillStateContainer(Builder builder) { - super.fillStateContainer(builder.add(OXIDIZATION)); + protected void createBlockStateDefinition(Builder builder) { + super.createBlockStateDefinition(builder.add(OXIDIZATION)); } @Override - public boolean ticksRandomly(BlockState state) { - return super.ticksRandomly(state) || state.get(OXIDIZATION) < 7; + public boolean isRandomlyTicking(BlockState state) { + return super.isRandomlyTicking(state) || state.getValue(OXIDIZATION) < 7; } @Override public void randomTick(BlockState state, ServerWorld worldIn, BlockPos pos, Random random) { if (worldIn.getRandom() .nextFloat() <= chance) { - int currentState = state.get(OXIDIZATION); + int currentState = state.getValue(OXIDIZATION); boolean canIncrease = false; LinkedList neighbors = new LinkedList<>(); for (Direction facing : Iterate.directions) { - BlockPos neighbourPos = pos.offset(facing); + BlockPos neighbourPos = pos.relative(facing); if (!worldIn.isAreaLoaded(neighbourPos, 0)) continue; - if (!worldIn.isBlockPresent(neighbourPos)) + if (!worldIn.isLoaded(neighbourPos)) continue; BlockState neighborState = worldIn.getBlockState(neighbourPos); - if (neighborState.contains(OXIDIZATION) && neighborState.get(OXIDIZATION) != 0) { - neighbors.add(neighborState.get(OXIDIZATION)); + if (neighborState.hasProperty(OXIDIZATION) && neighborState.getValue(OXIDIZATION) != 0) { + neighbors.add(neighborState.getValue(OXIDIZATION)); } if (BlockHelper.hasBlockSolidSide(neighborState, worldIn, neighbourPos, facing.getOpposite())) { continue; @@ -69,20 +71,20 @@ public class OxidizingBlock extends Block { .mapToInt(v -> v) .average(); if (average.orElse(7d) >= currentState) - worldIn.setBlockState(pos, state.with(OXIDIZATION, Math.min(currentState + 1, 7))); + worldIn.setBlockAndUpdate(pos, state.setValue(OXIDIZATION, Math.min(currentState + 1, 7))); } } } @Override - public ActionResultType onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, + public ActionResultType use(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockRayTraceResult blockRayTraceResult) { - if (state.get(OXIDIZATION) > 0 && player.getHeldItem(hand) + if (state.getValue(OXIDIZATION) > 0 && player.getItemInHand(hand) .getItem() instanceof SandPaperItem) { if (!player.isCreative()) - player.getHeldItem(hand) - .damageItem(1, player, p -> p.sendBreakAnimation(p.getActiveHand())); - world.setBlockState(pos, state.with(OXIDIZATION, 0)); + player.getItemInHand(hand) + .hurtAndBreak(1, player, p -> p.broadcastBreakEvent(p.getUsedItemHand())); + world.setBlockAndUpdate(pos, state.setValue(OXIDIZATION, 0)); return ActionResultType.SUCCESS; } return ActionResultType.PASS; From 9e4198fa797810acf28cfa9e6df8084de9deb3e4 Mon Sep 17 00:00:00 2001 From: grimmauld Date: Thu, 15 Jul 2021 11:39:37 +0200 Subject: [PATCH 085/118] fix mixins --- .../foundation/mixin/BreakProgressMixin.java | 6 +++--- .../EntityContraptionInteractionMixin.java | 20 +++++++++---------- .../mixin/FixNormalScalingMixin.java | 6 ++---- .../mixin/HeavyBootsOnPlayerMixin.java | 2 +- .../foundation/mixin/WindowResizeMixin.java | 6 +++--- 5 files changed, 19 insertions(+), 21 deletions(-) diff --git a/src/main/java/com/simibubi/create/foundation/mixin/BreakProgressMixin.java b/src/main/java/com/simibubi/create/foundation/mixin/BreakProgressMixin.java index 477e8f081..1ff9b0efe 100644 --- a/src/main/java/com/simibubi/create/foundation/mixin/BreakProgressMixin.java +++ b/src/main/java/com/simibubi/create/foundation/mixin/BreakProgressMixin.java @@ -17,11 +17,11 @@ import net.minecraft.util.math.BlockPos; public class BreakProgressMixin { @Shadow @Final - private WorldRenderer worldRenderer; // levelRenderer + private WorldRenderer levelRenderer; // levelRenderer private final ClientWorld self = (ClientWorld) (Object) this; - @Inject(at = @At("HEAD"), method = "sendBlockBreakProgress") // levelRenderer + @Inject(at = @At("HEAD"), method = "destroyBlockProgress") private void onBreakProgress(int playerEntityId, BlockPos pos, int progress, CallbackInfo ci) { - BreakProgressHook.whenBreaking(self, this.worldRenderer, playerEntityId, pos, progress); + BreakProgressHook.whenBreaking(self, this.levelRenderer, playerEntityId, pos, progress); } } diff --git a/src/main/java/com/simibubi/create/foundation/mixin/EntityContraptionInteractionMixin.java b/src/main/java/com/simibubi/create/foundation/mixin/EntityContraptionInteractionMixin.java index 6f4e0f089..ee082eac3 100644 --- a/src/main/java/com/simibubi/create/foundation/mixin/EntityContraptionInteractionMixin.java +++ b/src/main/java/com/simibubi/create/foundation/mixin/EntityContraptionInteractionMixin.java @@ -44,16 +44,16 @@ public abstract class EntityContraptionInteractionMixin extends CapabilityProvid @Final @Shadow - protected Random rand; // levelRenderer + protected Random random; @Shadow - private float nextStepDistance; // levelRenderer + private float nextStep; @Shadow - protected abstract float determineNextStepDistance(); // nextStep()F + protected abstract float nextStep(); @Shadow - protected abstract void playStepSound(BlockPos p_180429_1_, BlockState p_180429_2_); // nextStep()F + protected abstract void playStepSound(BlockPos p_180429_1_, BlockState p_180429_2_); private Set getIntersectingContraptions() { Set contraptions = ContraptionHandler.loadedContraptions.get(self.level) @@ -87,7 +87,7 @@ public abstract class EntityContraptionInteractionMixin extends CapabilityProvid } @Inject(at = @At(value = "JUMP", opcode = 154, // IFNE line 587 injecting before `!blockstate.isAir(this.world, blockpos)` - ordinal = 4), method = "move") // nextStep()F + ordinal = 4), method = "move") private void movementMixin(MoverType mover, Vector3d movement, CallbackInfo ci) { Vector3d worldPos = self.position() .add(0, -0.2, 0); @@ -101,10 +101,10 @@ public abstract class EntityContraptionInteractionMixin extends CapabilityProvid }); if (stepped.get()) - this.nextStepDistance = this.determineNextStepDistance(); + this.nextStep = this.nextStep(); } - @Inject(method = { "spawnSprintingParticles" }, at = @At(value = "TAIL")) // spawnSprintParticle()V + @Inject(method = { "spawnSprintParticle" }, at = @At(value = "TAIL")) private void createRunningParticlesMixin(CallbackInfo ci) { Vector3d worldPos = self.position() .add(0, -0.2, 0); @@ -115,14 +115,14 @@ public abstract class EntityContraptionInteractionMixin extends CapabilityProvid && blockstate.getRenderShape() != BlockRenderType.INVISIBLE) { Vector3d vec3d = self.getDeltaMovement(); self.level.addParticle(new BlockParticleData(ParticleTypes.BLOCK, blockstate).setPos(pos), - self.getX() + ((double) rand.nextFloat() - 0.5D) * (double) self.getBbWidth(), self.getY() + 0.1D, - self.getZ() + ((double) rand.nextFloat() - 0.5D) * (double) self.getBbWidth(), vec3d.x * -4.0D, 1.5D, + self.getX() + ((double) random.nextFloat() - 0.5D) * (double) self.getBbWidth(), self.getY() + 0.1D, + self.getZ() + ((double) random.nextFloat() - 0.5D) * (double) self.getBbWidth(), vec3d.x * -4.0D, 1.5D, vec3d.z * -4.0D); } }); } - @Inject(method = "playSound", at = @At("HEAD"), cancellable = true) // playSound(Lnet/minecraft/util/SoundEvent;FF)V + @Inject(method = "playSound", at = @At("HEAD"), cancellable = true) private void playSoundShifted(SoundEvent event, float pitch, float volume, CallbackInfo ci) { if (this.contraption != null && (!self.isSilent() || self instanceof PlayerEntity)) { double x = self.getX(); diff --git a/src/main/java/com/simibubi/create/foundation/mixin/FixNormalScalingMixin.java b/src/main/java/com/simibubi/create/foundation/mixin/FixNormalScalingMixin.java index 12bb65618..b76f2ab3e 100644 --- a/src/main/java/com/simibubi/create/foundation/mixin/FixNormalScalingMixin.java +++ b/src/main/java/com/simibubi/create/foundation/mixin/FixNormalScalingMixin.java @@ -17,8 +17,7 @@ public class FixNormalScalingMixin { * applied, which negates the matrix again, resulting in the matrix being the * same as in the beginning. */ - @Inject(at = @At(value = "INVOKE", target = "Lnet/minecraft/util/math/vector/Matrix3f;multiply(F)V", shift = Shift.AFTER), method = "scale(FFF)V", cancellable = true) - // At mul(F)V, method: scale(FFF)V + @Inject(at = @At(value = "INVOKE", target = "Lnet/minecraft/util/math/vector/Matrix3f;mul(F)V", shift = Shift.AFTER), method = "scale(FFF)V", cancellable = true) private void returnAfterNegate(float x, float y, float z, CallbackInfo ci) { ci.cancel(); } @@ -30,8 +29,7 @@ public class FixNormalScalingMixin { * that would invert all normals. Additionally, Minecraft's fastInverseCbrt method * does not work for negative numbers. */ - @ModifyArg(at = @At(value = "INVOKE", target = "Lnet/minecraft/util/math/MathHelper;fastInverseCbrt(F)F"), method = "scale(FFF)V") - // at fastInvCubeRoot(F)F, method: fastInvCubeRoot(F)F + @ModifyArg(at = @At(value = "INVOKE", target = "Lnet/minecraft/util/math/MathHelper;fastInvCubeRoot(F)F"), method = "scale(FFF)V") private float absInvCbrtInput(float input) { return Math.abs(input); } diff --git a/src/main/java/com/simibubi/create/foundation/mixin/HeavyBootsOnPlayerMixin.java b/src/main/java/com/simibubi/create/foundation/mixin/HeavyBootsOnPlayerMixin.java index 985b74d01..8561b404a 100644 --- a/src/main/java/com/simibubi/create/foundation/mixin/HeavyBootsOnPlayerMixin.java +++ b/src/main/java/com/simibubi/create/foundation/mixin/HeavyBootsOnPlayerMixin.java @@ -22,7 +22,7 @@ public abstract class HeavyBootsOnPlayerMixin extends AbstractClientPlayerEntity super(p_i50991_1_, p_i50991_2_); } - @Inject(at = @At("HEAD"), method = "canSwim", cancellable = true) // isUnderWater()Z + @Inject(at = @At("HEAD"), method = "isUnderWater", cancellable = true) public void noSwimmingWithHeavyBootsOn(CallbackInfoReturnable cir) { CompoundNBT persistentData = getPersistentData(); if (persistentData.contains("HeavyBoots")) diff --git a/src/main/java/com/simibubi/create/foundation/mixin/WindowResizeMixin.java b/src/main/java/com/simibubi/create/foundation/mixin/WindowResizeMixin.java index 5d0a60b8c..4af9f1243 100644 --- a/src/main/java/com/simibubi/create/foundation/mixin/WindowResizeMixin.java +++ b/src/main/java/com/simibubi/create/foundation/mixin/WindowResizeMixin.java @@ -18,11 +18,11 @@ import net.minecraftforge.api.distmarker.OnlyIn; @Mixin(Minecraft.class) public class WindowResizeMixin { - @Shadow @Final private MainWindow mainWindow; + @Shadow @Final private MainWindow window; - @Inject(at = @At("TAIL"), method = "updateWindowSize") // resizeDisplay()V + @Inject(at = @At("TAIL"), method = "resizeDisplay") private void updateWindowSize(CallbackInfo ci) { - UIRenderHelper.updateWindowSize(mainWindow); + UIRenderHelper.updateWindowSize(window); } } From d53e89887adfe12ad9d3ee0d11c7ec9f02d372f6 Mon Sep 17 00:00:00 2001 From: grimmauld Date: Thu, 15 Jul 2021 11:45:45 +0200 Subject: [PATCH 086/118] fix obfuscation reflection helper calls --- .../actors/dispenser/MovedProjectileDispenserBehaviour.java | 6 +++--- .../processing/burner/BlazeBurnerBlockItem.java | 4 ++-- .../create/content/curiosities/armor/DivingBootsItem.java | 2 +- .../create/content/curiosities/tools/BlueprintItem.java | 2 +- .../simibubi/create/foundation/command/FlySpeedCommand.java | 2 +- .../utility/worldWrappers/WrappedServerWorld.java | 2 +- 6 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/MovedProjectileDispenserBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/MovedProjectileDispenserBehaviour.java index d717dfa63..313253630 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/MovedProjectileDispenserBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/MovedProjectileDispenserBehaviour.java @@ -81,19 +81,19 @@ public abstract class MovedProjectileDispenserBehaviour extends MovedDefaultDisp } private static Method getProjectileEntityLookup() { - Method getProjectileEntity = ObfuscationReflectionHelper.findMethod(ProjectileDispenseBehavior.class, "getProjectile", World.class, IPosition.class, ItemStack.class); // getProjectile + Method getProjectileEntity = ObfuscationReflectionHelper.findMethod(ProjectileDispenseBehavior.class, "func_82499_a", World.class, IPosition.class, ItemStack.class); // getProjectile getProjectileEntity.setAccessible(true); return getProjectileEntity; } private static Method getProjectileInaccuracyLookup() { - Method getProjectileInaccuracy = ObfuscationReflectionHelper.findMethod(ProjectileDispenseBehavior.class, "getUncertainty"); // getUncertainty + Method getProjectileInaccuracy = ObfuscationReflectionHelper.findMethod(ProjectileDispenseBehavior.class, "func_82498_a"); // getUncertainty getProjectileInaccuracy.setAccessible(true); return getProjectileInaccuracy; } private static Method getProjectileVelocityLookup() { - Method getProjectileVelocity = ObfuscationReflectionHelper.findMethod(ProjectileDispenseBehavior.class, "getPower"); // getPower + Method getProjectileVelocity = ObfuscationReflectionHelper.findMethod(ProjectileDispenseBehavior.class, "func_82500_b"); // getPower getProjectileVelocity.setAccessible(true); return getProjectileVelocity; } diff --git a/src/main/java/com/simibubi/create/content/contraptions/processing/burner/BlazeBurnerBlockItem.java b/src/main/java/com/simibubi/create/content/contraptions/processing/burner/BlazeBurnerBlockItem.java index 6aad6c4be..f09197d66 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/processing/burner/BlazeBurnerBlockItem.java +++ b/src/main/java/com/simibubi/create/content/contraptions/processing/burner/BlazeBurnerBlockItem.java @@ -91,11 +91,11 @@ public class BlazeBurnerBlockItem extends BlockItem { AbstractSpawner spawner = ((MobSpawnerTileEntity) te).getSpawner(); List possibleSpawns = - ObfuscationReflectionHelper.getPrivateValue(AbstractSpawner.class, spawner, "spawnPotentials"); // spawnPotentials + ObfuscationReflectionHelper.getPrivateValue(AbstractSpawner.class, spawner, "field_98285_e"); if (possibleSpawns.isEmpty()) { possibleSpawns = new ArrayList<>(); possibleSpawns - .add(ObfuscationReflectionHelper.getPrivateValue(AbstractSpawner.class, spawner, "nextSpawnData")); // nextSpawnData + .add(ObfuscationReflectionHelper.getPrivateValue(AbstractSpawner.class, spawner, "field_98282_f")); } ResourceLocation blazeId = EntityType.BLAZE.getRegistryName(); diff --git a/src/main/java/com/simibubi/create/content/curiosities/armor/DivingBootsItem.java b/src/main/java/com/simibubi/create/content/curiosities/armor/DivingBootsItem.java index 2b69e2950..fa47be38b 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/armor/DivingBootsItem.java +++ b/src/main/java/com/simibubi/create/content/curiosities/armor/DivingBootsItem.java @@ -29,7 +29,7 @@ public class DivingBootsItem extends CopperArmorItem { return; Vector3d motion = entity.getDeltaMovement(); - Boolean isJumping = ObfuscationReflectionHelper.getPrivateValue(LivingEntity.class, entity, "jumping"); // jumping + Boolean isJumping = ObfuscationReflectionHelper.getPrivateValue(LivingEntity.class, entity, "field_70703_bu"); // jumping entity.onGround |= entity.verticalCollision; if (isJumping && entity.onGround) { diff --git a/src/main/java/com/simibubi/create/content/curiosities/tools/BlueprintItem.java b/src/main/java/com/simibubi/create/content/curiosities/tools/BlueprintItem.java index 9846c36b9..c1638fee7 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/tools/BlueprintItem.java +++ b/src/main/java/com/simibubi/create/content/curiosities/tools/BlueprintItem.java @@ -95,7 +95,7 @@ public class BlueprintItem extends Item { private static ItemStack convertIngredientToFilter(Ingredient ingredient) { Ingredient.IItemList[] acceptedItems = - ObfuscationReflectionHelper.getPrivateValue(Ingredient.class, ingredient, "values"); // values + ObfuscationReflectionHelper.getPrivateValue(Ingredient.class, ingredient, "field_199807_b"); // values if (acceptedItems == null || acceptedItems.length > 18) return ItemStack.EMPTY; if (acceptedItems.length == 0) diff --git a/src/main/java/com/simibubi/create/foundation/command/FlySpeedCommand.java b/src/main/java/com/simibubi/create/foundation/command/FlySpeedCommand.java index a005f379f..a67b5bc19 100644 --- a/src/main/java/com/simibubi/create/foundation/command/FlySpeedCommand.java +++ b/src/main/java/com/simibubi/create/foundation/command/FlySpeedCommand.java @@ -36,7 +36,7 @@ public class FlySpeedCommand { private static int sendFlySpeedUpdate(CommandContext ctx, ServerPlayerEntity player, float speed) { SPlayerAbilitiesPacket packet = new SPlayerAbilitiesPacket(player.abilities); // packet.setFlySpeed(speed); - ObfuscationReflectionHelper.setPrivateValue(SPlayerAbilitiesPacket.class, packet, speed, "flyingSpeed"); // flyingSpeed + ObfuscationReflectionHelper.setPrivateValue(SPlayerAbilitiesPacket.class, packet, speed, "field_149116_e"); // flyingSpeed player.connection.send(packet); ctx.getSource() diff --git a/src/main/java/com/simibubi/create/foundation/utility/worldWrappers/WrappedServerWorld.java b/src/main/java/com/simibubi/create/foundation/utility/worldWrappers/WrappedServerWorld.java index 1ee80a641..6161cbfc4 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/worldWrappers/WrappedServerWorld.java +++ b/src/main/java/com/simibubi/create/foundation/utility/worldWrappers/WrappedServerWorld.java @@ -137,6 +137,6 @@ public class WrappedServerWorld extends ServerWorld { } private static SaveFormat.LevelSave getLevelSaveFromWorld(World world) { - return ObfuscationReflectionHelper.getPrivateValue(MinecraftServer.class, world.getServer(), "storageSource"); // storageSource + return ObfuscationReflectionHelper.getPrivateValue(MinecraftServer.class, world.getServer(), "field_71310_m"); // storageSource } } From 5610f6337504deeb2c39440e355376255ca259d3 Mon Sep 17 00:00:00 2001 From: grimmauld Date: Thu, 15 Jul 2021 11:53:08 +0200 Subject: [PATCH 087/118] no more outdated gradle --- build.gradle | 9 +++++++-- gradle.properties | 2 +- gradle/wrapper/gradle-wrapper.properties | 2 +- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/build.gradle b/build.gradle index c2d1456ad..9a5dfeab0 100644 --- a/build.gradle +++ b/build.gradle @@ -29,7 +29,7 @@ version = "mc${minecraft_version}_v${mod_version}" + (dev ? "+${buildnumber}" : group = 'com.simibubi.create' archivesBaseName = 'create' -sourceCompatibility = targetCompatibility = compileJava.sourceCompatibility = compileJava.targetCompatibility = '1.8' +java.toolchain.languageVersion = JavaLanguageVersion.of(8) minecraft { mappings channel: 'official', version: "${minecraft_version}" @@ -42,7 +42,8 @@ minecraft { //jvmArgs '-XX:+UnlockCommercialFeatures' // uncomment for profiling property 'forge.logging.console.level', 'info' property 'fml.earlyprogresswindow', 'false' - property 'mixin.env.disableRefMap', 'true' + property 'mixin.env.remapRefMap', 'true' + property 'mixin.env.refMapRemappingFile', "${projectDir}/build/createSrgToMcp/output.srg" mods { create { source sourceSets.main @@ -54,6 +55,8 @@ minecraft { workingDirectory project.file('run/server') arg '-mixin.config=create.mixins.json' property 'forge.logging.console.level', 'info' + property 'mixin.env.remapRefMap', 'true' + property 'mixin.env.refMapRemappingFile', "${projectDir}/build/createSrgToMcp/output.srg" mods { create { source sourceSets.main @@ -66,6 +69,8 @@ minecraft { property 'forge.logging.markers', 'REGISTRIES,REGISTRYDUMP' property 'forge.logging.console.level', 'debug' property 'fml.earlyprogresswindow', 'false' + property 'mixin.env.remapRefMap', 'true' + property 'mixin.env.refMapRemappingFile', "${projectDir}/build/createSrgToMcp/output.srg" args '--mod', 'create', '--all', '--output', file('src/generated/resources/'), '--existing', file('src/main/resources') mods { create { diff --git a/gradle.properties b/gradle.properties index f6faa393e..a7c03ba82 100644 --- a/gradle.properties +++ b/gradle.properties @@ -9,7 +9,7 @@ minecraft_version = 1.16.5 forge_version = 36.1.32 # build dependency versions -forgegradle_version = 3.+ +forgegradle_version = 4.1.+ mixingradle_version = 0.7-SNAPSHOT shadow_version = 5.2.0 cursegradle_version = 1.4.0 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 5028f28f8..549d84424 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.4-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-6.9-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists From 681791a329a15b71dd8680d1a2cddfafa5f4d63c Mon Sep 17 00:00:00 2001 From: PepperBell <44146161+PepperCode1@users.noreply.github.com> Date: Thu, 15 Jul 2021 11:52:19 -0700 Subject: [PATCH 088/118] Update Gradle wrapper files --- gradle/wrapper/gradle-wrapper.jar | Bin 55616 -> 59203 bytes gradlew | 31 ++++++++++++++---------------- gradlew.bat | 25 +++++++----------------- 3 files changed, 21 insertions(+), 35 deletions(-) diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 5c2d1cf016b3885f6930543d57b744ea8c220a1a..e708b1c023ec8b20f512888fe07c5bd3ff77bb8f 100644 GIT binary patch delta 23334 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 WDWbsF$p{Gi@ZUasP|4|kdH)CXgbPdn delta 19998 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 diff --git a/gradlew b/gradlew index 83f2acfdc..4f906e0c8 100755 --- a/gradlew +++ b/gradlew @@ -82,6 +82,7 @@ esac CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + # Determine the Java command to use to start the JVM. if [ -n "$JAVA_HOME" ] ; then if [ -x "$JAVA_HOME/jre/sh/java" ] ; then @@ -129,6 +130,7 @@ fi if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then APP_HOME=`cygpath --path --mixed "$APP_HOME"` CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + JAVACMD=`cygpath --unix "$JAVACMD"` # We build the pattern for arguments to be converted via cygpath @@ -154,19 +156,19 @@ if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then else eval `echo args$i`="\"$arg\"" fi - i=$((i+1)) + i=`expr $i + 1` done case $i in - (0) set -- ;; - (1) set -- "$args0" ;; - (2) set -- "$args0" "$args1" ;; - (3) set -- "$args0" "$args1" "$args2" ;; - (4) set -- "$args0" "$args1" "$args2" "$args3" ;; - (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + 0) set -- ;; + 1) set -- "$args0" ;; + 2) set -- "$args0" "$args1" ;; + 3) set -- "$args0" "$args1" "$args2" ;; + 4) set -- "$args0" "$args1" "$args2" "$args3" ;; + 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; esac fi @@ -175,14 +177,9 @@ save () { for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done echo " " } -APP_ARGS=$(save "$@") +APP_ARGS=`save "$@"` # Collect all arguments for the java command, following the shell quoting and substitution rules eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" -# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong -if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then - cd "$(dirname "$0")" -fi - exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat index 9618d8d96..107acd32c 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -29,6 +29,9 @@ if "%DIRNAME%" == "" set DIRNAME=. set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" @@ -37,7 +40,7 @@ if defined JAVA_HOME goto findJavaFromJavaHome set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto init +if "%ERRORLEVEL%" == "0" goto execute echo. echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. @@ -51,7 +54,7 @@ goto fail set JAVA_HOME=%JAVA_HOME:"=% set JAVA_EXE=%JAVA_HOME%/bin/java.exe -if exist "%JAVA_EXE%" goto init +if exist "%JAVA_EXE%" goto execute echo. echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% @@ -61,28 +64,14 @@ echo location of your Java installation. goto fail -:init -@rem Get command-line arguments, handling Windows variants - -if not "%OS%" == "Windows_NT" goto win9xME_args - -:win9xME_args -@rem Slurp the command line arguments. -set CMD_LINE_ARGS= -set _SKIP=2 - -:win9xME_args_slurp -if "x%~1" == "x" goto execute - -set CMD_LINE_ARGS=%* - :execute @rem Setup the command line set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + @rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* :end @rem End local scope for the variables with windows NT shell From 1dd7c4bc1e2a2861e864074502ae4fc3dae8977e Mon Sep 17 00:00:00 2001 From: PepperBell <44146161+PepperCode1@users.noreply.github.com> Date: Fri, 16 Jul 2021 15:11:28 -0700 Subject: [PATCH 089/118] Minor cleanup changes - Change AllRecipeTypes to have less repetition and force getter usage --- .../com/simibubi/create/AllRecipeTypes.java | 107 +++++++++++------- .../java/com/simibubi/create/AllShapes.java | 3 +- .../simibubi/create/compat/jei/CreateJEI.java | 4 +- .../crafter/MechanicalCraftingRecipe.java | 10 +- .../mixer/MechanicalMixerTileEntity.java | 2 +- .../press/MechanicalPressTileEntity.java | 2 +- .../SequencedAssemblyRecipeBuilder.java | 2 +- .../processing/ProcessingRecipe.java | 4 +- .../processing/ProcessingRecipeBuilder.java | 18 +-- .../weapons/PotatoProjectileRenderMode.java | 10 +- .../create/foundation/config/CKinetics.java | 2 +- .../MechanicalCraftingRecipeBuilder.java | 2 +- .../data/recipe/ProcessingRecipeGen.java | 5 +- 13 files changed, 94 insertions(+), 77 deletions(-) diff --git a/src/main/java/com/simibubi/create/AllRecipeTypes.java b/src/main/java/com/simibubi/create/AllRecipeTypes.java index d88471657..a15eda1e4 100644 --- a/src/main/java/com/simibubi/create/AllRecipeTypes.java +++ b/src/main/java/com/simibubi/create/AllRecipeTypes.java @@ -17,7 +17,6 @@ import com.simibubi.create.content.contraptions.fluids.actors.FillingRecipe; import com.simibubi.create.content.contraptions.itemAssembly.SequencedAssemblyRecipeSerializer; import com.simibubi.create.content.contraptions.processing.BasinRecipe; import com.simibubi.create.content.contraptions.processing.EmptyingRecipe; -import com.simibubi.create.content.contraptions.processing.ProcessingRecipe; import com.simibubi.create.content.contraptions.processing.ProcessingRecipeBuilder.ProcessingRecipeFactory; import com.simibubi.create.content.contraptions.processing.ProcessingRecipeSerializer; import com.simibubi.create.content.curiosities.tools.SandPaperPolishingRecipe; @@ -36,62 +35,56 @@ import net.minecraftforge.event.RegistryEvent; public enum AllRecipeTypes { MECHANICAL_CRAFTING(MechanicalCraftingRecipe.Serializer::new), - CONVERSION(processingSerializer(ConversionRecipe::new)), - CRUSHING(processingSerializer(CrushingRecipe::new)), - CUTTING(processingSerializer(CuttingRecipe::new)), - MILLING(processingSerializer(MillingRecipe::new)), - BASIN(processingSerializer(BasinRecipe::new)), - MIXING(processingSerializer(MixingRecipe::new)), - COMPACTING(processingSerializer(CompactingRecipe::new)), - PRESSING(processingSerializer(PressingRecipe::new)), - SANDPAPER_POLISHING(processingSerializer(SandPaperPolishingRecipe::new)), - SPLASHING(processingSerializer(SplashingRecipe::new)), - DEPLOYING(processingSerializer(DeployerApplicationRecipe::new)), - FILLING(processingSerializer(FillingRecipe::new)), - EMPTYING(processingSerializer(EmptyingRecipe::new)), + CONVERSION(ConversionRecipe::new), + CRUSHING(CrushingRecipe::new), + CUTTING(CuttingRecipe::new), + MILLING(MillingRecipe::new), + BASIN(BasinRecipe::new), + MIXING(MixingRecipe::new), + COMPACTING(CompactingRecipe::new), + PRESSING(PressingRecipe::new), + SANDPAPER_POLISHING(SandPaperPolishingRecipe::new), + SPLASHING(SplashingRecipe::new), + DEPLOYING(DeployerApplicationRecipe::new), + FILLING(FillingRecipe::new), + EMPTYING(EmptyingRecipe::new), SEQUENCED_ASSEMBLY(SequencedAssemblyRecipeSerializer::new), ; - public IRecipeSerializer serializer; - public Supplier> supplier; - public IRecipeType> type; + private ResourceLocation id; + private Supplier> serializerSupplier; + private Supplier> typeSupplier; + private IRecipeSerializer serializer; + private IRecipeType type; - AllRecipeTypes(Supplier> supplier) { - this(supplier, null); + AllRecipeTypes(Supplier> serializerSupplier, Supplier> typeSupplier) { + this.id = Create.asResource(Lang.asId(name())); + this.serializerSupplier = serializerSupplier; + this.typeSupplier = typeSupplier; } - AllRecipeTypes(Supplier> supplier, - IRecipeType> existingType) { - this.supplier = supplier; - this.type = existingType; + AllRecipeTypes(Supplier> serializerSupplier, IRecipeType existingType) { + this(serializerSupplier, () -> existingType); } - public static void register(RegistryEvent.Register> event) { - ShapedRecipe.setCraftingSize(9, 9); - - for (AllRecipeTypes r : AllRecipeTypes.values()) { - if (r.type == null) - r.type = customType(Lang.asId(r.name())); - - r.serializer = r.supplier.get(); - ResourceLocation location = new ResourceLocation(Create.ID, Lang.asId(r.name())); - event.getRegistry() - .register(r.serializer.setRegistryName(location)); - } + AllRecipeTypes(Supplier> serializerSupplier) { + this.id = Create.asResource(Lang.asId(name())); + this.serializerSupplier = serializerSupplier; + this.typeSupplier = () -> simpleType(id); } - private static > IRecipeType customType(String id) { - return Registry.register(Registry.RECIPE_TYPE, new ResourceLocation(Create.ID, id), new IRecipeType() { - public String toString() { - return Create.ID + ":" + id; - } - }); + AllRecipeTypes(ProcessingRecipeFactory processingFactory) { + this(processingSerializer(processingFactory)); } - private static Supplier> processingSerializer( - ProcessingRecipeFactory> factory) { - return () -> new ProcessingRecipeSerializer<>(factory); + public ResourceLocation getId() { + return id; + } + + @SuppressWarnings("unchecked") + public > T getSerializer() { + return (T) serializer; } @SuppressWarnings("unchecked") @@ -103,4 +96,30 @@ public enum AllRecipeTypes { return world.getRecipeManager() .getRecipeFor(getType(), inv, world); } + + public static void register(RegistryEvent.Register> event) { + ShapedRecipe.setCraftingSize(9, 9); + + for (AllRecipeTypes r : AllRecipeTypes.values()) { + r.serializer = r.serializerSupplier.get(); + r.type = r.typeSupplier.get(); + r.serializer.setRegistryName(r.id); + event.getRegistry() + .register(r.serializer); + } + } + + private static Supplier> processingSerializer(ProcessingRecipeFactory factory) { + return () -> new ProcessingRecipeSerializer<>(factory); + } + + public static > IRecipeType simpleType(ResourceLocation id) { + String stringId = id.toString(); + return Registry.register(Registry.RECIPE_TYPE, id, new IRecipeType() { + public String toString() { + return stringId; + } + }); + } + } diff --git a/src/main/java/com/simibubi/create/AllShapes.java b/src/main/java/com/simibubi/create/AllShapes.java index 234676ad0..9ba3acccd 100644 --- a/src/main/java/com/simibubi/create/AllShapes.java +++ b/src/main/java/com/simibubi/create/AllShapes.java @@ -241,7 +241,8 @@ public class AllShapes { } public static class Builder { - VoxelShape shape; + + private VoxelShape shape; public Builder(VoxelShape shape) { this.shape = shape; diff --git a/src/main/java/com/simibubi/create/compat/jei/CreateJEI.java b/src/main/java/com/simibubi/create/compat/jei/CreateJEI.java index 76b994322..4f7649478 100644 --- a/src/main/java/com/simibubi/create/compat/jei/CreateJEI.java +++ b/src/main/java/com/simibubi/create/compat/jei/CreateJEI.java @@ -179,7 +179,7 @@ public class CreateJEI implements IModPlugin { deploying = register("deploying", DeployingCategory::new) .recipeList( - () -> DeployerApplicationRecipe.convert(findRecipesByType(AllRecipeTypes.SANDPAPER_POLISHING.type))) + () -> DeployerApplicationRecipe.convert(findRecipesByType(AllRecipeTypes.SANDPAPER_POLISHING.getType()))) .recipes(AllRecipeTypes.DEPLOYING) .catalyst(AllBlocks.DEPLOYER::get) .catalyst(AllBlocks.DEPOT::get) @@ -205,7 +205,7 @@ public class CreateJEI implements IModPlugin { .recipes(r -> r.getSerializer() == IRecipeSerializer.SHAPELESS_RECIPE && r.getIngredients() .size() == 1) .recipes( - r -> (r.getType() == IRecipeType.CRAFTING && r.getType() != AllRecipeTypes.MECHANICAL_CRAFTING.type) + r -> (r.getType() == IRecipeType.CRAFTING && r.getType() != AllRecipeTypes.MECHANICAL_CRAFTING.getType()) && (r instanceof ShapedRecipe)) .catalyst(AllBlocks.MECHANICAL_CRAFTER::get) .enableWhen(c -> c.allowRegularCraftingInCrafter) diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/crafter/MechanicalCraftingRecipe.java b/src/main/java/com/simibubi/create/content/contraptions/components/crafter/MechanicalCraftingRecipe.java index 6ee3fb525..2022cccf2 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/crafter/MechanicalCraftingRecipe.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/crafter/MechanicalCraftingRecipe.java @@ -33,17 +33,17 @@ public class MechanicalCraftingRecipe extends ShapedRecipe { @Override public IRecipeType getType() { - return AllRecipeTypes.MECHANICAL_CRAFTING.type; + return AllRecipeTypes.MECHANICAL_CRAFTING.getType(); } - + @Override public boolean isSpecial() { return true; } - + @Override public IRecipeSerializer getSerializer() { - return AllRecipeTypes.MECHANICAL_CRAFTING.serializer; + return AllRecipeTypes.MECHANICAL_CRAFTING.getSerializer(); } public static class Serializer extends ShapedRecipe.Serializer { @@ -52,7 +52,7 @@ public class MechanicalCraftingRecipe extends ShapedRecipe { public ShapedRecipe fromJson(ResourceLocation recipeId, JsonObject json) { return fromShaped(super.fromJson(recipeId, json)); } - + @Override public ShapedRecipe fromNetwork(ResourceLocation recipeId, PacketBuffer buffer) { return fromShaped(super.fromNetwork(recipeId, buffer)); diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/mixer/MechanicalMixerTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/mixer/MechanicalMixerTileEntity.java index 89324dcf5..51c803a0a 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/mixer/MechanicalMixerTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/mixer/MechanicalMixerTileEntity.java @@ -229,7 +229,7 @@ public class MechanicalMixerTileEntity extends BasinOperatingTileEntity { return ((r.getSerializer() == IRecipeSerializer.SHAPELESS_RECIPE && AllConfigs.SERVER.recipes.allowShapelessInMixer.get() && r.getIngredients() .size() > 1) - || r.getType() == AllRecipeTypes.MIXING.type); + || r.getType() == AllRecipeTypes.MIXING.getType()); } @Override diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/press/MechanicalPressTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/press/MechanicalPressTileEntity.java index 38b639cc7..2d428cc6c 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/press/MechanicalPressTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/press/MechanicalPressTileEntity.java @@ -346,7 +346,7 @@ public class MechanicalPressTileEntity extends BasinOperatingTileEntity { @Override protected boolean matchStaticFilters(IRecipe recipe) { return (recipe instanceof ICraftingRecipe && canCompress(recipe.getIngredients())) - || recipe.getType() == AllRecipeTypes.COMPACTING.type; + || recipe.getType() == AllRecipeTypes.COMPACTING.getType(); } @Override diff --git a/src/main/java/com/simibubi/create/content/contraptions/itemAssembly/SequencedAssemblyRecipeBuilder.java b/src/main/java/com/simibubi/create/content/contraptions/itemAssembly/SequencedAssemblyRecipeBuilder.java index 9453108aa..f65cbdfc0 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/itemAssembly/SequencedAssemblyRecipeBuilder.java +++ b/src/main/java/com/simibubi/create/content/contraptions/itemAssembly/SequencedAssemblyRecipeBuilder.java @@ -34,7 +34,7 @@ public class SequencedAssemblyRecipeBuilder { public SequencedAssemblyRecipeBuilder(ResourceLocation id) { recipeConditions = new ArrayList<>(); this.recipe = new SequencedAssemblyRecipe(id, - (SequencedAssemblyRecipeSerializer) AllRecipeTypes.SEQUENCED_ASSEMBLY.serializer); + AllRecipeTypes.SEQUENCED_ASSEMBLY.getSerializer()); } public > SequencedAssemblyRecipeBuilder addStep(ProcessingRecipeFactory factory, diff --git a/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingRecipe.java b/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingRecipe.java index 4f4dff700..d92235e4c 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingRecipe.java +++ b/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingRecipe.java @@ -52,10 +52,10 @@ public abstract class ProcessingRecipe implements IRecipe< this.processingDuration = params.processingDuration; this.fluidIngredients = params.fluidIngredients; this.fluidResults = params.fluidResults; - this.serializer = recipeType.serializer; + this.serializer = recipeType.getSerializer(); this.requiredHeat = params.requiredHeat; this.ingredients = params.ingredients; - this.type = recipeType.type; + this.type = recipeType.getType(); this.results = params.results; this.id = params.id; diff --git a/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingRecipeBuilder.java b/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingRecipeBuilder.java index 5099023e8..e81f6e0f7 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingRecipeBuilder.java +++ b/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingRecipeBuilder.java @@ -192,15 +192,15 @@ public class ProcessingRecipeBuilder> { public static class ProcessingRecipeParams { - ResourceLocation id; - NonNullList ingredients; - NonNullList results; - NonNullList fluidIngredients; - NonNullList fluidResults; - int processingDuration; - HeatCondition requiredHeat; + protected ResourceLocation id; + protected NonNullList ingredients; + protected NonNullList results; + protected NonNullList fluidIngredients; + protected NonNullList fluidResults; + protected int processingDuration; + protected HeatCondition requiredHeat; - ProcessingRecipeParams(ResourceLocation id) { + protected ProcessingRecipeParams(ResourceLocation id) { this.id = id; ingredients = NonNullList.create(); results = NonNullList.create(); @@ -226,7 +226,7 @@ public class ProcessingRecipeBuilder> { String typeName = Lang.asId(recipeType.name()); this.recipe = recipe; - if (!(recipeType.serializer instanceof ProcessingRecipeSerializer)) + if (!(recipeType.getSerializer() instanceof ProcessingRecipeSerializer)) throw new IllegalStateException("Cannot datagen ProcessingRecipe of type: " + typeName); this.id = new ResourceLocation(recipe.getId().getNamespace(), diff --git a/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoProjectileRenderMode.java b/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoProjectileRenderMode.java index 40888f2d1..9bbfdbad0 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoProjectileRenderMode.java +++ b/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoProjectileRenderMode.java @@ -11,12 +11,12 @@ import net.minecraft.util.math.vector.Vector3d; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; -public abstract class PotatoProjectileRenderMode { +public interface PotatoProjectileRenderMode { @OnlyIn(Dist.CLIENT) - public abstract void transform(MatrixStack ms, PotatoProjectileEntity entity, float pt); + void transform(MatrixStack ms, PotatoProjectileEntity entity, float pt); - public static class Billboard extends PotatoProjectileRenderMode { + public static class Billboard implements PotatoProjectileRenderMode { @Override @OnlyIn(Dist.CLIENT) @@ -47,7 +47,7 @@ public abstract class PotatoProjectileRenderMode { } } - public static class TowardMotion extends PotatoProjectileRenderMode { + public static class TowardMotion implements PotatoProjectileRenderMode { private int spriteAngleOffset; private float spin; @@ -72,7 +72,7 @@ public abstract class PotatoProjectileRenderMode { } - public static class StuckToEntity extends PotatoProjectileRenderMode { + public static class StuckToEntity implements PotatoProjectileRenderMode { private Vector3d offset; diff --git a/src/main/java/com/simibubi/create/foundation/config/CKinetics.java b/src/main/java/com/simibubi/create/foundation/config/CKinetics.java index d4cf51867..e5b05f92c 100644 --- a/src/main/java/com/simibubi/create/foundation/config/CKinetics.java +++ b/src/main/java/com/simibubi/create/foundation/config/CKinetics.java @@ -1,11 +1,11 @@ package com.simibubi.create.foundation.config; + import com.simibubi.create.foundation.config.ConfigBase.ConfigBool; import com.simibubi.create.foundation.config.ConfigBase.ConfigEnum; import com.simibubi.create.foundation.config.ConfigBase.ConfigFloat; import com.simibubi.create.foundation.config.ConfigBase.ConfigGroup; import com.simibubi.create.foundation.config.ConfigBase.ConfigInt; - public class CKinetics extends ConfigBase { public ConfigBool disableStress = b(false, "disableStress", Comments.disableStress); diff --git a/src/main/java/com/simibubi/create/foundation/data/recipe/MechanicalCraftingRecipeBuilder.java b/src/main/java/com/simibubi/create/foundation/data/recipe/MechanicalCraftingRecipeBuilder.java index 8bff65111..3f806faf7 100644 --- a/src/main/java/com/simibubi/create/foundation/data/recipe/MechanicalCraftingRecipeBuilder.java +++ b/src/main/java/com/simibubi/create/foundation/data/recipe/MechanicalCraftingRecipeBuilder.java @@ -183,7 +183,7 @@ public class MechanicalCraftingRecipeBuilder { } public IRecipeSerializer getType() { - return AllRecipeTypes.MECHANICAL_CRAFTING.serializer; + return AllRecipeTypes.MECHANICAL_CRAFTING.getSerializer(); } public ResourceLocation getId() { diff --git a/src/main/java/com/simibubi/create/foundation/data/recipe/ProcessingRecipeGen.java b/src/main/java/com/simibubi/create/foundation/data/recipe/ProcessingRecipeGen.java index 90ae53c38..07734300d 100644 --- a/src/main/java/com/simibubi/create/foundation/data/recipe/ProcessingRecipeGen.java +++ b/src/main/java/com/simibubi/create/foundation/data/recipe/ProcessingRecipeGen.java @@ -20,8 +20,6 @@ import net.minecraft.util.IItemProvider; import net.minecraft.util.ResourceLocation; import net.minecraftforge.fluids.FluidAttributes; -import com.simibubi.create.foundation.data.recipe.CreateRecipeProvider.GeneratedRecipe; - public abstract class ProcessingRecipeGen extends CreateRecipeProvider { protected static List generators = new ArrayList<>(); @@ -116,9 +114,8 @@ public abstract class ProcessingRecipeGen extends CreateRecipeProvider { return create(Create.asResource(name), transform); } - @SuppressWarnings("unchecked") protected > ProcessingRecipeSerializer getSerializer() { - ProcessingRecipeSerializer serializer = (ProcessingRecipeSerializer) getRecipeType().serializer; + ProcessingRecipeSerializer serializer = getRecipeType().getSerializer(); return serializer; } From ca94873148bb889ee2a539f17e0a1987ac6935da Mon Sep 17 00:00:00 2001 From: PepperBell <44146161+PepperCode1@users.noreply.github.com> Date: Sat, 17 Jul 2021 00:39:05 -0700 Subject: [PATCH 090/118] Ponder namespace refactor - Add full support for custom namespaces in ponder - Make ponder files use Minecraft's resource system - Allow easily registering and generating ponder lang for any namespace --- src/generated/resources/.cache/cache | 30 +- .../resources/assets/create/lang/en_us.json | 54 +- .../assets/create/lang/unfinished/de_de.json | 54 +- .../assets/create/lang/unfinished/es_es.json | 54 +- .../assets/create/lang/unfinished/es_mx.json | 54 +- .../assets/create/lang/unfinished/fr_fr.json | 54 +- .../assets/create/lang/unfinished/it_it.json | 54 +- .../assets/create/lang/unfinished/ja_jp.json | 54 +- .../assets/create/lang/unfinished/ko_kr.json | 54 +- .../assets/create/lang/unfinished/nl_nl.json | 54 +- .../assets/create/lang/unfinished/pl_pl.json | 54 +- .../assets/create/lang/unfinished/pt_br.json | 54 +- .../assets/create/lang/unfinished/ru_ru.json | 54 +- .../assets/create/lang/unfinished/zh_cn.json | 54 +- .../assets/create/lang/unfinished/zh_tw.json | 610 +++++++++--------- .../data/create/advancements/aesthetics.json | 4 +- .../com/simibubi/create/AllSoundEvents.java | 3 +- .../foundation/command/PonderCommand.java | 2 +- .../command/SConfigureConfigPacket.java | 2 +- .../foundation/data/AllLangPartials.java | 4 +- .../foundation/ponder/PonderLocalization.java | 162 +++-- .../foundation/ponder/PonderRegistry.java | 113 ++-- .../create/foundation/ponder/PonderScene.java | 38 +- .../ponder/PonderStoryBoardEntry.java | 41 +- .../ponder/PonderTooltipHandler.java | 2 +- .../create/foundation/ponder/PonderUI.java | 9 +- .../foundation/ponder/SceneBuilder.java | 5 +- .../ponder/content/PonderChapter.java | 6 +- .../ponder/content/PonderIndex.java | 32 +- .../ponder/content/PonderIndexScreen.java | 4 +- .../foundation/ponder/content/PonderTag.java | 46 +- .../ponder/content/PonderTagRegistry.java | 4 +- .../ponder/content/PonderTagScreen.java | 8 +- .../foundation/ponder/content/SharedText.java | 12 +- .../ponder/elements/InputWindowElement.java | 8 +- .../ponder/elements/TextWindowElement.java | 7 +- .../ponder/adjustable_pulse_repeater.nbt | Bin .../create}/ponder/adjustable_repeater.nbt | Bin .../create}/ponder/analog_lever.nbt | Bin .../{ => assets/create}/ponder/basin.nbt | Bin .../create}/ponder/belt/connect.nbt | Bin .../create}/ponder/belt/directions.nbt | Bin .../create}/ponder/belt/encasing.nbt | Bin .../create}/ponder/belt/transport.nbt | Bin .../create}/ponder/blaze_burner.nbt | Bin .../create}/ponder/cart_assembler/anchor.nbt | Bin .../create}/ponder/cart_assembler/dual.nbt | Bin .../create}/ponder/cart_assembler/modes.nbt | Bin .../create}/ponder/cart_assembler/rails.nbt | Bin .../create}/ponder/chain_drive/gearshift.nbt | Bin .../create}/ponder/chain_drive/relay.nbt | Bin .../ponder/chassis/linear_attachment.nbt | Bin .../create}/ponder/chassis/linear_group.nbt | Bin .../create}/ponder/chassis/radial.nbt | Bin .../create}/ponder/chute/downward.nbt | Bin .../create}/ponder/chute/smart.nbt | Bin .../create}/ponder/chute/upward.nbt | Bin .../create}/ponder/clockwork_bearing.nbt | Bin .../{ => assets/create}/ponder/clutch.nbt | Bin .../{ => assets/create}/ponder/cog/large.nbt | Bin .../{ => assets/create}/ponder/cog/small.nbt | Bin .../create}/ponder/cog/speedup.nbt | Bin .../create}/ponder/creative_motor.nbt | Bin .../create}/ponder/crushing_wheel.nbt | Bin .../create}/ponder/debug/scene_1.nbt | Bin .../create}/ponder/debug/scene_10.nbt | Bin .../create}/ponder/debug/scene_2.nbt | Bin .../create}/ponder/debug/scene_3.nbt | Bin .../create}/ponder/debug/scene_4.nbt | Bin .../create}/ponder/debug/scene_5.nbt | Bin .../create}/ponder/debug/scene_6.nbt | Bin .../create}/ponder/debug/scene_7.nbt | Bin .../create}/ponder/debug/scene_8.nbt | Bin .../create}/ponder/debug/scene_9.nbt | Bin .../create}/ponder/deployer/contraption.nbt | Bin .../create}/ponder/deployer/filter.nbt | Bin .../create}/ponder/deployer/modes.nbt | Bin .../create}/ponder/deployer/processing.nbt | Bin .../create}/ponder/deployer/redstone.nbt | Bin .../{ => assets/create}/ponder/depot.nbt | Bin .../create}/ponder/empty_blaze_burner.nbt | Bin .../create}/ponder/fan/direction.nbt | Bin .../create}/ponder/fan/processing.nbt | Bin .../{ => assets/create}/ponder/fan/source.nbt | Bin .../create}/ponder/fluid_pipe/encasing.nbt | Bin .../create}/ponder/fluid_pipe/flow.nbt | Bin .../create}/ponder/fluid_pipe/interaction.nbt | Bin .../create}/ponder/fluid_tank/sizes.nbt | Bin .../ponder/fluid_tank/sizes_creative.nbt | Bin .../create}/ponder/fluid_tank/storage.nbt | Bin .../ponder/fluid_tank/storage_creative.nbt | Bin .../create}/ponder/fluid_valve.nbt | Bin .../create}/ponder/funnels/brass.nbt | Bin .../create}/ponder/funnels/compat.nbt | Bin .../create}/ponder/funnels/direction.nbt | Bin .../create}/ponder/funnels/intro.nbt | Bin .../create}/ponder/funnels/redstone.nbt | Bin .../create}/ponder/funnels/transposer.nbt | Bin .../create}/ponder/furnace_engine.nbt | Bin .../create}/ponder/gantry/direction.nbt | Bin .../create}/ponder/gantry/intro.nbt | Bin .../create}/ponder/gantry/redstone.nbt | Bin .../create}/ponder/gantry/subgantry.nbt | Bin .../{ => assets/create}/ponder/gauges.nbt | Bin .../{ => assets/create}/ponder/gearbox.nbt | Bin .../{ => assets/create}/ponder/gearshift.nbt | Bin .../{ => assets/create}/ponder/hand_crank.nbt | Bin .../{ => assets/create}/ponder/harvester.nbt | Bin .../create}/ponder/hose_pulley/infinite.nbt | Bin .../create}/ponder/hose_pulley/intro.nbt | Bin .../create}/ponder/hose_pulley/level.nbt | Bin .../{ => assets/create}/ponder/item_drain.nbt | Bin .../create}/ponder/mechanical_arm/filter.nbt | Bin .../create}/ponder/mechanical_arm/modes.nbt | Bin .../ponder/mechanical_arm/redstone.nbt | Bin .../create}/ponder/mechanical_arm/setup.nbt | Bin .../ponder/mechanical_bearing/anchor.nbt | Bin .../ponder/mechanical_bearing/modes.nbt | Bin .../ponder/mechanical_bearing/stabilized.nbt | Bin .../ponder/mechanical_crafter/connect.nbt | Bin .../ponder/mechanical_crafter/covers.nbt | Bin .../ponder/mechanical_crafter/setup.nbt | Bin .../ponder/mechanical_drill/breaker.nbt | Bin .../ponder/mechanical_drill/contraption.nbt | Bin .../ponder/mechanical_mixer/mixing.nbt | Bin .../ponder/mechanical_piston/anchor.nbt | Bin .../ponder/mechanical_piston/modes.nbt | Bin .../ponder/mechanical_piston/piston_pole.nbt | Bin .../ponder/mechanical_press/compacting.nbt | Bin .../ponder/mechanical_press/pressing.nbt | Bin .../create}/ponder/mechanical_pump/flow.nbt | Bin .../create}/ponder/mechanical_pump/speed.nbt | Bin .../create}/ponder/mechanical_saw/breaker.nbt | Bin .../ponder/mechanical_saw/contraption.nbt | Bin .../ponder/mechanical_saw/processing.nbt | Bin .../{ => assets/create}/ponder/millstone.nbt | Bin .../{ => assets/create}/ponder/nixie_tube.nbt | Bin .../{ => assets/create}/ponder/plough.nbt | Bin .../ponder/portable_interface/redstone.nbt | Bin .../portable_interface/redstone_fluid.nbt | Bin .../ponder/portable_interface/transfer.nbt | Bin .../portable_interface/transfer_fluid.nbt | Bin .../create}/ponder/powered_latch.nbt | Bin .../create}/ponder/powered_toggle_latch.nbt | Bin .../create}/ponder/pulse_repeater.nbt | Bin .../create}/ponder/redstone_contact.nbt | Bin .../create}/ponder/redstone_link.nbt | Bin .../create}/ponder/rope_pulley/anchor.nbt | Bin .../create}/ponder/rope_pulley/attachment.nbt | Bin .../create}/ponder/rope_pulley/modes.nbt | Bin .../{ => assets/create}/ponder/sail.nbt | Bin .../create}/ponder/sequenced_gearshift.nbt | Bin .../create}/ponder/shaft/encasing.nbt | Bin .../create}/ponder/shaft/relay.nbt | Bin .../{ => assets/create}/ponder/smart_pipe.nbt | Bin .../create}/ponder/speed_controller.nbt | Bin .../{ => assets/create}/ponder/spout.nbt | Bin .../{ => assets/create}/ponder/sticker.nbt | Bin .../{ => assets/create}/ponder/super_glue.nbt | Bin .../create}/ponder/tunnels/andesite.nbt | Bin .../create}/ponder/tunnels/brass.nbt | Bin .../create}/ponder/tunnels/brass_modes.nbt | Bin .../create}/ponder/valve_handle.nbt | Bin .../create}/ponder/water_wheel.nbt | Bin .../create}/ponder/weighted_ejector/eject.nbt | Bin .../ponder/weighted_ejector/redstone.nbt | Bin .../create}/ponder/weighted_ejector/split.nbt | Bin .../ponder/windmill_bearing/source.nbt | Bin .../ponder/windmill_bearing/structure.nbt | Bin 169 files changed, 986 insertions(+), 868 deletions(-) rename src/main/resources/{ => assets/create}/ponder/adjustable_pulse_repeater.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/adjustable_repeater.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/analog_lever.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/basin.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/belt/connect.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/belt/directions.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/belt/encasing.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/belt/transport.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/blaze_burner.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/cart_assembler/anchor.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/cart_assembler/dual.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/cart_assembler/modes.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/cart_assembler/rails.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/chain_drive/gearshift.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/chain_drive/relay.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/chassis/linear_attachment.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/chassis/linear_group.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/chassis/radial.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/chute/downward.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/chute/smart.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/chute/upward.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/clockwork_bearing.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/clutch.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/cog/large.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/cog/small.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/cog/speedup.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/creative_motor.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/crushing_wheel.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/debug/scene_1.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/debug/scene_10.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/debug/scene_2.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/debug/scene_3.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/debug/scene_4.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/debug/scene_5.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/debug/scene_6.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/debug/scene_7.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/debug/scene_8.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/debug/scene_9.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/deployer/contraption.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/deployer/filter.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/deployer/modes.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/deployer/processing.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/deployer/redstone.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/depot.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/empty_blaze_burner.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/fan/direction.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/fan/processing.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/fan/source.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/fluid_pipe/encasing.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/fluid_pipe/flow.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/fluid_pipe/interaction.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/fluid_tank/sizes.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/fluid_tank/sizes_creative.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/fluid_tank/storage.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/fluid_tank/storage_creative.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/fluid_valve.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/funnels/brass.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/funnels/compat.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/funnels/direction.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/funnels/intro.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/funnels/redstone.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/funnels/transposer.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/furnace_engine.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/gantry/direction.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/gantry/intro.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/gantry/redstone.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/gantry/subgantry.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/gauges.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/gearbox.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/gearshift.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/hand_crank.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/harvester.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/hose_pulley/infinite.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/hose_pulley/intro.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/hose_pulley/level.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/item_drain.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/mechanical_arm/filter.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/mechanical_arm/modes.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/mechanical_arm/redstone.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/mechanical_arm/setup.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/mechanical_bearing/anchor.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/mechanical_bearing/modes.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/mechanical_bearing/stabilized.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/mechanical_crafter/connect.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/mechanical_crafter/covers.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/mechanical_crafter/setup.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/mechanical_drill/breaker.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/mechanical_drill/contraption.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/mechanical_mixer/mixing.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/mechanical_piston/anchor.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/mechanical_piston/modes.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/mechanical_piston/piston_pole.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/mechanical_press/compacting.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/mechanical_press/pressing.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/mechanical_pump/flow.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/mechanical_pump/speed.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/mechanical_saw/breaker.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/mechanical_saw/contraption.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/mechanical_saw/processing.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/millstone.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/nixie_tube.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/plough.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/portable_interface/redstone.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/portable_interface/redstone_fluid.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/portable_interface/transfer.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/portable_interface/transfer_fluid.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/powered_latch.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/powered_toggle_latch.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/pulse_repeater.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/redstone_contact.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/redstone_link.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/rope_pulley/anchor.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/rope_pulley/attachment.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/rope_pulley/modes.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/sail.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/sequenced_gearshift.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/shaft/encasing.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/shaft/relay.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/smart_pipe.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/speed_controller.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/spout.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/sticker.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/super_glue.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/tunnels/andesite.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/tunnels/brass.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/tunnels/brass_modes.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/valve_handle.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/water_wheel.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/weighted_ejector/eject.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/weighted_ejector/redstone.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/weighted_ejector/split.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/windmill_bearing/source.nbt (100%) rename src/main/resources/{ => assets/create}/ponder/windmill_bearing/structure.nbt (100%) diff --git a/src/generated/resources/.cache/cache b/src/generated/resources/.cache/cache index 817561684..c130e37cb 100644 --- a/src/generated/resources/.cache/cache +++ b/src/generated/resources/.cache/cache @@ -426,20 +426,20 @@ a3a11524cd3515fc01d905767b4b7ea782adaf03 assets/create/blockstates/yellow_seat.j 7f39521b211441f5c3e06d60c5978cebe16cacfb assets/create/blockstates/zinc_block.json b7181bcd8182b2f17088e5aa881f374c9c65470c assets/create/blockstates/zinc_ore.json e1d3c02695cbd2ee7bbede97f72941835634a3a5 assets/create/lang/en_ud.json -dda27625581783c310eaddce4fbd1aa4c983c15c assets/create/lang/en_us.json -52509bf5d478b5deff21180c19632ec6467aee35 assets/create/lang/unfinished/de_de.json -8e90f32c39e3a4d7e85b2db53100ffc90cc8eb67 assets/create/lang/unfinished/es_es.json -3a3fd8c21798552e1358ad44f9f7e525d91b2741 assets/create/lang/unfinished/es_mx.json -7c30cbe707f3002a070289a98291bfd7119da3b6 assets/create/lang/unfinished/fr_fr.json -e266432ad97663dfdf76dfd35a6188f5550689d7 assets/create/lang/unfinished/it_it.json -5422e990c8075d4132d58287fa9ca858f9a0bc1f assets/create/lang/unfinished/ja_jp.json -a1cfa4e628a915c25dc406918028ef6aa99c5c3d assets/create/lang/unfinished/ko_kr.json -c26d8d9b04ce47d1ab9ff83925b173e50b2c8776 assets/create/lang/unfinished/nl_nl.json -4527d31d932661341bf92f49af8d599166b57985 assets/create/lang/unfinished/pl_pl.json -3034e1d6f167365a3c399ddabe68b05831bbcb73 assets/create/lang/unfinished/pt_br.json -a2e2cfcacca1e707d5cbb43a3fb15107a3dd59f7 assets/create/lang/unfinished/ru_ru.json -e1b094a37a11896f835e6dd11c91a61704bb8069 assets/create/lang/unfinished/zh_cn.json -dce3b0ec1fa06b020c43a3040aab044510595972 assets/create/lang/unfinished/zh_tw.json +1c0f01963b426cc119425e5201ec2415e3236383 assets/create/lang/en_us.json +13e9636b1b78008efdf354fe8535f2f19fa5d639 assets/create/lang/unfinished/de_de.json +9f9cdf45f255ac09090f9bc2d21419979c5c585c assets/create/lang/unfinished/es_es.json +d45414b7f28ac2cc821021d3e0b010a8b9904e6b assets/create/lang/unfinished/es_mx.json +ffcb0ea206af4555e8f6e5d391766ed721a6a637 assets/create/lang/unfinished/fr_fr.json +e6c7bc95ef9f798c00ff8bca6c3a2f7db1bdea97 assets/create/lang/unfinished/it_it.json +0211e888290ccf157673719396b59c1600f9a038 assets/create/lang/unfinished/ja_jp.json +7c7c3fbc64f98504b5ec99c36ce2ce2526b1d2ac assets/create/lang/unfinished/ko_kr.json +2b219b17dd8f21c444a100a88813a918416f42e3 assets/create/lang/unfinished/nl_nl.json +cb27026452c7117c271c80d792a589aa7f6b624f assets/create/lang/unfinished/pl_pl.json +03662aadb7d569baafcaf4cd12eb9cd50dbcb8b4 assets/create/lang/unfinished/pt_br.json +d40ac7c8deeef6b96fdd012117d1f3f67c60e4e0 assets/create/lang/unfinished/ru_ru.json +f43c968e694489ab3c9419b9522b1f2543551bdc assets/create/lang/unfinished/zh_cn.json +521428d50af44282bae3e0fa50c150fe6a7e9c1a assets/create/lang/unfinished/zh_tw.json 487a511a01b2a4531fb672f917922312db78f958 assets/create/models/block/acacia_window.json b48060cba1a382f373a05bf0039054053eccf076 assets/create/models/block/acacia_window_pane_noside.json 3066db1bf03cffa1a9c7fbacf47ae586632f4eb3 assets/create/models/block/acacia_window_pane_noside_alt.json @@ -1699,7 +1699,7 @@ d080b1b25e5bc8baf5aee68691b08c7f12ece3b0 assets/create/models/item/windmill_bear a80fb25a0b655e76be986b5b49fcb0f03461a1ab assets/create/models/item/zinc_nugget.json b1689617190c05ef34bd18456b0c7ae09bb3210f assets/create/models/item/zinc_ore.json 58880e397902f8ca5b3b59ed4423e626109ddc4c assets/create/sounds.json -0f1b4b980afba9bf2caf583b88e261bba8b10313 data/create/advancements/aesthetics.json +5d0cc4c0255dc241e61c173b31ddca70c88d08e4 data/create/advancements/aesthetics.json 187921fa131b06721bfaf63f2623a28c141aae9a data/create/advancements/andesite_alloy.json 0ea2db7173b5be28b289ea7c9a6a0cf5805c60c7 data/create/advancements/andesite_casing.json 83c046bd200623933545c9e4326f782fb02c87fa data/create/advancements/arm_blaze_burner.json diff --git a/src/generated/resources/assets/create/lang/en_us.json b/src/generated/resources/assets/create/lang/en_us.json index b3803cd55..c18792000 100644 --- a/src/generated/resources/assets/create/lang/en_us.json +++ b/src/generated/resources/assets/create/lang/en_us.json @@ -1502,41 +1502,41 @@ "create.ponder.categories": "Available Categories in Create", "create.ponder.index_description": "Click one of the icons to learn about its associated Items and Blocks", "create.ponder.index_title": "Ponder Index", - "create.ponder.shared.movement_anchors": "With the help of Chassis or Super Glue, larger structures can be moved.", - "create.ponder.shared.rpm32": "32 RPM", - "create.ponder.shared.sneak_and": "Sneak +", - "create.ponder.shared.storage_on_contraption": "Inventories attached to the Contraption will pick up their drops automatically", + "create.ponder.shared.rpm16": "16 RPM", "create.ponder.shared.behaviour_modify_wrench": "This behaviour can be modified using a Wrench", + "create.ponder.shared.storage_on_contraption": "Inventories attached to the Contraption will pick up their drops automatically", + "create.ponder.shared.sneak_and": "Sneak +", "create.ponder.shared.rpm8": "8 RPM", "create.ponder.shared.ctrl_and": "Ctrl +", + "create.ponder.shared.rpm32": "32 RPM", "create.ponder.shared.rpm16_source": "Source: 16 RPM", - "create.ponder.shared.rpm16": "16 RPM", - "create.ponder.tag.kinetic_sources": "Kinetic Sources", - "create.ponder.tag.kinetic_sources.description": "Components which generate Rotational Force", - "create.ponder.tag.contraption_actor": "Contraption Actors", - "create.ponder.tag.contraption_actor.description": "Components which expose special behaviour when attached to a moving contraption", - "create.ponder.tag.arm_targets": "Targets for Mechanical Arms", - "create.ponder.tag.arm_targets.description": "Components which can be selected as inputs or outputs to the Mechanical Arm", - "create.ponder.tag.logistics": "Item Transportation", - "create.ponder.tag.logistics.description": "Components which help moving items around", - "create.ponder.tag.movement_anchor": "Movement Anchors", - "create.ponder.tag.movement_anchor.description": "Components which allow the creation of moving contraptions, animating an attached structure in a variety of ways", - "create.ponder.tag.creative": "Creative Mode", - "create.ponder.tag.creative.description": "Components not usually available for Survival Mode", - "create.ponder.tag.kinetic_relays": "Kinetic Blocks", - "create.ponder.tag.kinetic_relays.description": "Components which help relaying Rotational Force elsewhere", - "create.ponder.tag.windmill_sails": "Sails for Windmill Bearings", - "create.ponder.tag.windmill_sails.description": "Blocks that count towards the strength of a Windmill Contraption when assembled. Each of these have equal efficiency in doing so.", - "create.ponder.tag.contraption_assembly": "Block Attachment Utility", - "create.ponder.tag.contraption_assembly.description": "Tools and Components used to assemble structures moved as an animated Contraption", - "create.ponder.tag.decoration": "Aesthetics", - "create.ponder.tag.decoration.description": "Components used mostly for decorative purposes", - "create.ponder.tag.kinetic_appliances": "Kinetic Appliances", - "create.ponder.tag.kinetic_appliances.description": "Components which make use of Rotational Force", + "create.ponder.shared.movement_anchors": "With the help of Chassis or Super Glue, larger structures can be moved.", "create.ponder.tag.redstone": "Logic Components", "create.ponder.tag.redstone.description": "Components which help with redstone engineering", + "create.ponder.tag.contraption_assembly": "Block Attachment Utility", + "create.ponder.tag.contraption_assembly.description": "Tools and Components used to assemble structures moved as an animated Contraption", "create.ponder.tag.fluids": "Fluid Manipulators", "create.ponder.tag.fluids.description": "Components which help relaying and making use of Fluids", + "create.ponder.tag.decoration": "Aesthetics", + "create.ponder.tag.decoration.description": "Components used mostly for decorative purposes", + "create.ponder.tag.windmill_sails": "Sails for Windmill Bearings", + "create.ponder.tag.windmill_sails.description": "Blocks that count towards the strength of a Windmill Contraption when assembled. Each of these have equal efficiency in doing so.", + "create.ponder.tag.arm_targets": "Targets for Mechanical Arms", + "create.ponder.tag.arm_targets.description": "Components which can be selected as inputs or outputs to the Mechanical Arm", + "create.ponder.tag.kinetic_appliances": "Kinetic Appliances", + "create.ponder.tag.kinetic_appliances.description": "Components which make use of Rotational Force", + "create.ponder.tag.kinetic_sources": "Kinetic Sources", + "create.ponder.tag.kinetic_sources.description": "Components which generate Rotational Force", + "create.ponder.tag.movement_anchor": "Movement Anchors", + "create.ponder.tag.movement_anchor.description": "Components which allow the creation of moving contraptions, animating an attached structure in a variety of ways", + "create.ponder.tag.kinetic_relays": "Kinetic Blocks", + "create.ponder.tag.kinetic_relays.description": "Components which help relaying Rotational Force elsewhere", + "create.ponder.tag.contraption_actor": "Contraption Actors", + "create.ponder.tag.contraption_actor.description": "Components which expose special behaviour when attached to a moving contraption", + "create.ponder.tag.creative": "Creative Mode", + "create.ponder.tag.creative.description": "Components not usually available for Survival Mode", + "create.ponder.tag.logistics": "Item Transportation", + "create.ponder.tag.logistics.description": "Components which help moving items around", "create.ponder.adjustable_pulse_repeater.header": "Controlling signals using Adjustable Pulse Repeaters", "create.ponder.adjustable_pulse_repeater.text_1": "Adjustable Pulse Repeaters emit a short pulse at a delay", 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 d80593cfd..e060dbcbf 100644 --- a/src/generated/resources/assets/create/lang/unfinished/de_de.json +++ b/src/generated/resources/assets/create/lang/unfinished/de_de.json @@ -1503,41 +1503,41 @@ "create.ponder.categories": "UNLOCALIZED: Available Categories in Create", "create.ponder.index_description": "UNLOCALIZED: Click one of the icons to learn about its associated Items and Blocks", "create.ponder.index_title": "UNLOCALIZED: Ponder Index", - "create.ponder.shared.movement_anchors": "UNLOCALIZED: With the help of Chassis or Super Glue, larger structures can be moved.", - "create.ponder.shared.rpm32": "UNLOCALIZED: 32 RPM", - "create.ponder.shared.sneak_and": "UNLOCALIZED: Sneak +", - "create.ponder.shared.storage_on_contraption": "UNLOCALIZED: Inventories attached to the Contraption will pick up their drops automatically", + "create.ponder.shared.rpm16": "UNLOCALIZED: 16 RPM", "create.ponder.shared.behaviour_modify_wrench": "UNLOCALIZED: This behaviour can be modified using a Wrench", + "create.ponder.shared.storage_on_contraption": "UNLOCALIZED: Inventories attached to the Contraption will pick up their drops automatically", + "create.ponder.shared.sneak_and": "UNLOCALIZED: Sneak +", "create.ponder.shared.rpm8": "UNLOCALIZED: 8 RPM", "create.ponder.shared.ctrl_and": "UNLOCALIZED: Ctrl +", + "create.ponder.shared.rpm32": "UNLOCALIZED: 32 RPM", "create.ponder.shared.rpm16_source": "UNLOCALIZED: Source: 16 RPM", - "create.ponder.shared.rpm16": "UNLOCALIZED: 16 RPM", - "create.ponder.tag.kinetic_sources": "UNLOCALIZED: Kinetic Sources", - "create.ponder.tag.kinetic_sources.description": "UNLOCALIZED: Components which generate Rotational Force", - "create.ponder.tag.contraption_actor": "UNLOCALIZED: Contraption Actors", - "create.ponder.tag.contraption_actor.description": "UNLOCALIZED: Components which expose special behaviour when attached to a moving contraption", - "create.ponder.tag.arm_targets": "UNLOCALIZED: Targets for Mechanical Arms", - "create.ponder.tag.arm_targets.description": "UNLOCALIZED: Components which can be selected as inputs or outputs to the Mechanical Arm", - "create.ponder.tag.logistics": "UNLOCALIZED: Item Transportation", - "create.ponder.tag.logistics.description": "UNLOCALIZED: Components which help moving items around", - "create.ponder.tag.movement_anchor": "UNLOCALIZED: Movement Anchors", - "create.ponder.tag.movement_anchor.description": "UNLOCALIZED: Components which allow the creation of moving contraptions, animating an attached structure in a variety of ways", - "create.ponder.tag.creative": "UNLOCALIZED: Creative Mode", - "create.ponder.tag.creative.description": "UNLOCALIZED: Components not usually available for Survival Mode", - "create.ponder.tag.kinetic_relays": "UNLOCALIZED: Kinetic Blocks", - "create.ponder.tag.kinetic_relays.description": "UNLOCALIZED: Components which help relaying Rotational Force elsewhere", - "create.ponder.tag.windmill_sails": "UNLOCALIZED: Sails for Windmill Bearings", - "create.ponder.tag.windmill_sails.description": "UNLOCALIZED: Blocks that count towards the strength of a Windmill Contraption when assembled. Each of these have equal efficiency in doing so.", - "create.ponder.tag.contraption_assembly": "UNLOCALIZED: Block Attachment Utility", - "create.ponder.tag.contraption_assembly.description": "UNLOCALIZED: Tools and Components used to assemble structures moved as an animated Contraption", - "create.ponder.tag.decoration": "UNLOCALIZED: Aesthetics", - "create.ponder.tag.decoration.description": "UNLOCALIZED: Components used mostly for decorative purposes", - "create.ponder.tag.kinetic_appliances": "UNLOCALIZED: Kinetic Appliances", - "create.ponder.tag.kinetic_appliances.description": "UNLOCALIZED: Components which make use of Rotational Force", + "create.ponder.shared.movement_anchors": "UNLOCALIZED: With the help of Chassis or Super Glue, larger structures can be moved.", "create.ponder.tag.redstone": "UNLOCALIZED: Logic Components", "create.ponder.tag.redstone.description": "UNLOCALIZED: Components which help with redstone engineering", + "create.ponder.tag.contraption_assembly": "UNLOCALIZED: Block Attachment Utility", + "create.ponder.tag.contraption_assembly.description": "UNLOCALIZED: Tools and Components used to assemble structures moved as an animated Contraption", "create.ponder.tag.fluids": "UNLOCALIZED: Fluid Manipulators", "create.ponder.tag.fluids.description": "UNLOCALIZED: Components which help relaying and making use of Fluids", + "create.ponder.tag.decoration": "UNLOCALIZED: Aesthetics", + "create.ponder.tag.decoration.description": "UNLOCALIZED: Components used mostly for decorative purposes", + "create.ponder.tag.windmill_sails": "UNLOCALIZED: Sails for Windmill Bearings", + "create.ponder.tag.windmill_sails.description": "UNLOCALIZED: Blocks that count towards the strength of a Windmill Contraption when assembled. Each of these have equal efficiency in doing so.", + "create.ponder.tag.arm_targets": "UNLOCALIZED: Targets for Mechanical Arms", + "create.ponder.tag.arm_targets.description": "UNLOCALIZED: Components which can be selected as inputs or outputs to the Mechanical Arm", + "create.ponder.tag.kinetic_appliances": "UNLOCALIZED: Kinetic Appliances", + "create.ponder.tag.kinetic_appliances.description": "UNLOCALIZED: Components which make use of Rotational Force", + "create.ponder.tag.kinetic_sources": "UNLOCALIZED: Kinetic Sources", + "create.ponder.tag.kinetic_sources.description": "UNLOCALIZED: Components which generate Rotational Force", + "create.ponder.tag.movement_anchor": "UNLOCALIZED: Movement Anchors", + "create.ponder.tag.movement_anchor.description": "UNLOCALIZED: Components which allow the creation of moving contraptions, animating an attached structure in a variety of ways", + "create.ponder.tag.kinetic_relays": "UNLOCALIZED: Kinetic Blocks", + "create.ponder.tag.kinetic_relays.description": "UNLOCALIZED: Components which help relaying Rotational Force elsewhere", + "create.ponder.tag.contraption_actor": "UNLOCALIZED: Contraption Actors", + "create.ponder.tag.contraption_actor.description": "UNLOCALIZED: Components which expose special behaviour when attached to a moving contraption", + "create.ponder.tag.creative": "UNLOCALIZED: Creative Mode", + "create.ponder.tag.creative.description": "UNLOCALIZED: Components not usually available for Survival Mode", + "create.ponder.tag.logistics": "UNLOCALIZED: Item Transportation", + "create.ponder.tag.logistics.description": "UNLOCALIZED: Components which help moving items around", "create.ponder.adjustable_pulse_repeater.header": "UNLOCALIZED: Controlling signals using Adjustable Pulse Repeaters", "create.ponder.adjustable_pulse_repeater.text_1": "UNLOCALIZED: Adjustable Pulse Repeaters emit a short pulse at a delay", 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 825c63f65..7e008a83d 100644 --- a/src/generated/resources/assets/create/lang/unfinished/es_es.json +++ b/src/generated/resources/assets/create/lang/unfinished/es_es.json @@ -1503,41 +1503,41 @@ "create.ponder.categories": "Available Categories in Create", "create.ponder.index_description": "Click one of the icons to learn about its associated Items and Blocks", "create.ponder.index_title": "Ponder Index", - "create.ponder.shared.movement_anchors": "Con la ayuda de un chasis o pegamento, se pueden mover estructuras más grandes.", - "create.ponder.shared.rpm32": "32 RPM", - "create.ponder.shared.sneak_and": "Mayús izdo. +", - "create.ponder.shared.storage_on_contraption": "Los inventarios unidos al artilugio recogerán sus producciones automáticamente", + "create.ponder.shared.rpm16": "16 RPM", "create.ponder.shared.behaviour_modify_wrench": "Este comportamiento puede modificarse mediante una llave inglesa", + "create.ponder.shared.storage_on_contraption": "Los inventarios unidos al artilugio recogerán sus producciones automáticamente", + "create.ponder.shared.sneak_and": "Mayús izdo. +", "create.ponder.shared.rpm8": "8 RPM", "create.ponder.shared.ctrl_and": "Ctrl +", + "create.ponder.shared.rpm32": "32 RPM", "create.ponder.shared.rpm16_source": "Fuente: 16 RPM", - "create.ponder.shared.rpm16": "16 RPM", - "create.ponder.tag.kinetic_sources": "Fuentes cinéticas", - "create.ponder.tag.kinetic_sources.description": "Componentes que generan fuerza rotacional", - "create.ponder.tag.contraption_actor": "Actores del artilugio", - "create.ponder.tag.contraption_actor.description": "Componentes que exponen un comportamiento especial cuando están unidos a un artilugio en movimiento", - "create.ponder.tag.arm_targets": "Objetivos para los brazos mecánicos", - "create.ponder.tag.arm_targets.description": "Componentes que pueden seleccionarse como entradas o salidas del brazo mecánico", - "create.ponder.tag.logistics": "Transporte de objetos", - "create.ponder.tag.logistics.description": "Componentes que ayudan a desplazar los objetos", - "create.ponder.tag.movement_anchor": "Anclas de movimiento", - "create.ponder.tag.movement_anchor.description": "Componentes que permiten crear artilugios en movimiento, animando una estructura anexa de diversas maneras", - "create.ponder.tag.creative": "Modo creativo", - "create.ponder.tag.creative.description": "Componentes que no suelen estar disponibles para el Modo Supervivencia", - "create.ponder.tag.kinetic_relays": "Transmisores cinéticos", - "create.ponder.tag.kinetic_relays.description": "Componentes que ayudan a transmitir la fuerza rotacional en otro lugar", - "create.ponder.tag.windmill_sails": "Velas para los rodamientos de los molinos de viento", - "create.ponder.tag.windmill_sails.description": "Bloques que cuentan para la fuerza de un artefacto de molino de viento cuando se ensamblan. Cada uno de ellos tiene la misma eficacia al hacerlo.", - "create.ponder.tag.contraption_assembly": "Utilidades para adjuntar bloques", - "create.ponder.tag.contraption_assembly.description": "Herramientas y componentes utilizados para montar estructuras con movimiento, como un artilugio animado", - "create.ponder.tag.decoration": "Estética", - "create.ponder.tag.decoration.description": "Componentes utilizados principalmente con fines decorativos", - "create.ponder.tag.kinetic_appliances": "Dispositivos cinéticos", - "create.ponder.tag.kinetic_appliances.description": "Componentes que utilizan la fuerza rotacional", + "create.ponder.shared.movement_anchors": "Con la ayuda de un chasis o pegamento, se pueden mover estructuras más grandes.", "create.ponder.tag.redstone": "Componentes lógicos", "create.ponder.tag.redstone.description": "Componentes que ayudan a la ingeniería de redstone", + "create.ponder.tag.contraption_assembly": "Utilidades para adjuntar bloques", + "create.ponder.tag.contraption_assembly.description": "Herramientas y componentes utilizados para montar estructuras con movimiento, como un artilugio animado", "create.ponder.tag.fluids": "Manipuladores de fluidos", "create.ponder.tag.fluids.description": "Componentes que ayudan a transportar y utilizar fluidos", + "create.ponder.tag.decoration": "Estética", + "create.ponder.tag.decoration.description": "Componentes utilizados principalmente con fines decorativos", + "create.ponder.tag.windmill_sails": "Velas para los rodamientos de los molinos de viento", + "create.ponder.tag.windmill_sails.description": "Bloques que cuentan para la fuerza de un artefacto de molino de viento cuando se ensamblan. Cada uno de ellos tiene la misma eficacia al hacerlo.", + "create.ponder.tag.arm_targets": "Objetivos para los brazos mecánicos", + "create.ponder.tag.arm_targets.description": "Componentes que pueden seleccionarse como entradas o salidas del brazo mecánico", + "create.ponder.tag.kinetic_appliances": "Dispositivos cinéticos", + "create.ponder.tag.kinetic_appliances.description": "Componentes que utilizan la fuerza rotacional", + "create.ponder.tag.kinetic_sources": "Fuentes cinéticas", + "create.ponder.tag.kinetic_sources.description": "Componentes que generan fuerza rotacional", + "create.ponder.tag.movement_anchor": "Anclas de movimiento", + "create.ponder.tag.movement_anchor.description": "Componentes que permiten crear artilugios en movimiento, animando una estructura anexa de diversas maneras", + "create.ponder.tag.kinetic_relays": "Transmisores cinéticos", + "create.ponder.tag.kinetic_relays.description": "Componentes que ayudan a transmitir la fuerza rotacional en otro lugar", + "create.ponder.tag.contraption_actor": "Actores del artilugio", + "create.ponder.tag.contraption_actor.description": "Componentes que exponen un comportamiento especial cuando están unidos a un artilugio en movimiento", + "create.ponder.tag.creative": "Modo creativo", + "create.ponder.tag.creative.description": "Componentes que no suelen estar disponibles para el Modo Supervivencia", + "create.ponder.tag.logistics": "Transporte de objetos", + "create.ponder.tag.logistics.description": "Componentes que ayudan a desplazar los objetos", "create.ponder.adjustable_pulse_repeater.header": "Controlar señales mediante repetidores de pulsos ajustables", "create.ponder.adjustable_pulse_repeater.text_1": "Los repetidores de pulsos ajustables emiten un pulso corto con un retardo", diff --git a/src/generated/resources/assets/create/lang/unfinished/es_mx.json b/src/generated/resources/assets/create/lang/unfinished/es_mx.json index 8c0efb9a1..9ad43c446 100644 --- a/src/generated/resources/assets/create/lang/unfinished/es_mx.json +++ b/src/generated/resources/assets/create/lang/unfinished/es_mx.json @@ -1503,41 +1503,41 @@ "create.ponder.categories": "UNLOCALIZED: Available Categories in Create", "create.ponder.index_description": "UNLOCALIZED: Click one of the icons to learn about its associated Items and Blocks", "create.ponder.index_title": "UNLOCALIZED: Ponder Index", - "create.ponder.shared.movement_anchors": "UNLOCALIZED: With the help of Chassis or Super Glue, larger structures can be moved.", - "create.ponder.shared.rpm32": "UNLOCALIZED: 32 RPM", - "create.ponder.shared.sneak_and": "UNLOCALIZED: Sneak +", - "create.ponder.shared.storage_on_contraption": "UNLOCALIZED: Inventories attached to the Contraption will pick up their drops automatically", + "create.ponder.shared.rpm16": "UNLOCALIZED: 16 RPM", "create.ponder.shared.behaviour_modify_wrench": "UNLOCALIZED: This behaviour can be modified using a Wrench", + "create.ponder.shared.storage_on_contraption": "UNLOCALIZED: Inventories attached to the Contraption will pick up their drops automatically", + "create.ponder.shared.sneak_and": "UNLOCALIZED: Sneak +", "create.ponder.shared.rpm8": "UNLOCALIZED: 8 RPM", "create.ponder.shared.ctrl_and": "UNLOCALIZED: Ctrl +", + "create.ponder.shared.rpm32": "UNLOCALIZED: 32 RPM", "create.ponder.shared.rpm16_source": "UNLOCALIZED: Source: 16 RPM", - "create.ponder.shared.rpm16": "UNLOCALIZED: 16 RPM", - "create.ponder.tag.kinetic_sources": "UNLOCALIZED: Kinetic Sources", - "create.ponder.tag.kinetic_sources.description": "UNLOCALIZED: Components which generate Rotational Force", - "create.ponder.tag.contraption_actor": "UNLOCALIZED: Contraption Actors", - "create.ponder.tag.contraption_actor.description": "UNLOCALIZED: Components which expose special behaviour when attached to a moving contraption", - "create.ponder.tag.arm_targets": "UNLOCALIZED: Targets for Mechanical Arms", - "create.ponder.tag.arm_targets.description": "UNLOCALIZED: Components which can be selected as inputs or outputs to the Mechanical Arm", - "create.ponder.tag.logistics": "UNLOCALIZED: Item Transportation", - "create.ponder.tag.logistics.description": "UNLOCALIZED: Components which help moving items around", - "create.ponder.tag.movement_anchor": "UNLOCALIZED: Movement Anchors", - "create.ponder.tag.movement_anchor.description": "UNLOCALIZED: Components which allow the creation of moving contraptions, animating an attached structure in a variety of ways", - "create.ponder.tag.creative": "UNLOCALIZED: Creative Mode", - "create.ponder.tag.creative.description": "UNLOCALIZED: Components not usually available for Survival Mode", - "create.ponder.tag.kinetic_relays": "UNLOCALIZED: Kinetic Blocks", - "create.ponder.tag.kinetic_relays.description": "UNLOCALIZED: Components which help relaying Rotational Force elsewhere", - "create.ponder.tag.windmill_sails": "UNLOCALIZED: Sails for Windmill Bearings", - "create.ponder.tag.windmill_sails.description": "UNLOCALIZED: Blocks that count towards the strength of a Windmill Contraption when assembled. Each of these have equal efficiency in doing so.", - "create.ponder.tag.contraption_assembly": "UNLOCALIZED: Block Attachment Utility", - "create.ponder.tag.contraption_assembly.description": "UNLOCALIZED: Tools and Components used to assemble structures moved as an animated Contraption", - "create.ponder.tag.decoration": "UNLOCALIZED: Aesthetics", - "create.ponder.tag.decoration.description": "UNLOCALIZED: Components used mostly for decorative purposes", - "create.ponder.tag.kinetic_appliances": "UNLOCALIZED: Kinetic Appliances", - "create.ponder.tag.kinetic_appliances.description": "UNLOCALIZED: Components which make use of Rotational Force", + "create.ponder.shared.movement_anchors": "UNLOCALIZED: With the help of Chassis or Super Glue, larger structures can be moved.", "create.ponder.tag.redstone": "UNLOCALIZED: Logic Components", "create.ponder.tag.redstone.description": "UNLOCALIZED: Components which help with redstone engineering", + "create.ponder.tag.contraption_assembly": "UNLOCALIZED: Block Attachment Utility", + "create.ponder.tag.contraption_assembly.description": "UNLOCALIZED: Tools and Components used to assemble structures moved as an animated Contraption", "create.ponder.tag.fluids": "UNLOCALIZED: Fluid Manipulators", "create.ponder.tag.fluids.description": "UNLOCALIZED: Components which help relaying and making use of Fluids", + "create.ponder.tag.decoration": "UNLOCALIZED: Aesthetics", + "create.ponder.tag.decoration.description": "UNLOCALIZED: Components used mostly for decorative purposes", + "create.ponder.tag.windmill_sails": "UNLOCALIZED: Sails for Windmill Bearings", + "create.ponder.tag.windmill_sails.description": "UNLOCALIZED: Blocks that count towards the strength of a Windmill Contraption when assembled. Each of these have equal efficiency in doing so.", + "create.ponder.tag.arm_targets": "UNLOCALIZED: Targets for Mechanical Arms", + "create.ponder.tag.arm_targets.description": "UNLOCALIZED: Components which can be selected as inputs or outputs to the Mechanical Arm", + "create.ponder.tag.kinetic_appliances": "UNLOCALIZED: Kinetic Appliances", + "create.ponder.tag.kinetic_appliances.description": "UNLOCALIZED: Components which make use of Rotational Force", + "create.ponder.tag.kinetic_sources": "UNLOCALIZED: Kinetic Sources", + "create.ponder.tag.kinetic_sources.description": "UNLOCALIZED: Components which generate Rotational Force", + "create.ponder.tag.movement_anchor": "UNLOCALIZED: Movement Anchors", + "create.ponder.tag.movement_anchor.description": "UNLOCALIZED: Components which allow the creation of moving contraptions, animating an attached structure in a variety of ways", + "create.ponder.tag.kinetic_relays": "UNLOCALIZED: Kinetic Blocks", + "create.ponder.tag.kinetic_relays.description": "UNLOCALIZED: Components which help relaying Rotational Force elsewhere", + "create.ponder.tag.contraption_actor": "UNLOCALIZED: Contraption Actors", + "create.ponder.tag.contraption_actor.description": "UNLOCALIZED: Components which expose special behaviour when attached to a moving contraption", + "create.ponder.tag.creative": "UNLOCALIZED: Creative Mode", + "create.ponder.tag.creative.description": "UNLOCALIZED: Components not usually available for Survival Mode", + "create.ponder.tag.logistics": "UNLOCALIZED: Item Transportation", + "create.ponder.tag.logistics.description": "UNLOCALIZED: Components which help moving items around", "create.ponder.adjustable_pulse_repeater.header": "UNLOCALIZED: Controlling signals using Adjustable Pulse Repeaters", "create.ponder.adjustable_pulse_repeater.text_1": "UNLOCALIZED: Adjustable Pulse Repeaters emit a short pulse at a delay", diff --git a/src/generated/resources/assets/create/lang/unfinished/fr_fr.json b/src/generated/resources/assets/create/lang/unfinished/fr_fr.json index e3d87f4cb..90d23cd24 100644 --- a/src/generated/resources/assets/create/lang/unfinished/fr_fr.json +++ b/src/generated/resources/assets/create/lang/unfinished/fr_fr.json @@ -1503,41 +1503,41 @@ "create.ponder.categories": "UNLOCALIZED: Available Categories in Create", "create.ponder.index_description": "UNLOCALIZED: Click one of the icons to learn about its associated Items and Blocks", "create.ponder.index_title": "UNLOCALIZED: Ponder Index", - "create.ponder.shared.movement_anchors": "UNLOCALIZED: With the help of Chassis or Super Glue, larger structures can be moved.", - "create.ponder.shared.rpm32": "UNLOCALIZED: 32 RPM", - "create.ponder.shared.sneak_and": "UNLOCALIZED: Sneak +", - "create.ponder.shared.storage_on_contraption": "UNLOCALIZED: Inventories attached to the Contraption will pick up their drops automatically", + "create.ponder.shared.rpm16": "UNLOCALIZED: 16 RPM", "create.ponder.shared.behaviour_modify_wrench": "UNLOCALIZED: This behaviour can be modified using a Wrench", + "create.ponder.shared.storage_on_contraption": "UNLOCALIZED: Inventories attached to the Contraption will pick up their drops automatically", + "create.ponder.shared.sneak_and": "UNLOCALIZED: Sneak +", "create.ponder.shared.rpm8": "UNLOCALIZED: 8 RPM", "create.ponder.shared.ctrl_and": "UNLOCALIZED: Ctrl +", + "create.ponder.shared.rpm32": "UNLOCALIZED: 32 RPM", "create.ponder.shared.rpm16_source": "UNLOCALIZED: Source: 16 RPM", - "create.ponder.shared.rpm16": "UNLOCALIZED: 16 RPM", - "create.ponder.tag.kinetic_sources": "UNLOCALIZED: Kinetic Sources", - "create.ponder.tag.kinetic_sources.description": "UNLOCALIZED: Components which generate Rotational Force", - "create.ponder.tag.contraption_actor": "UNLOCALIZED: Contraption Actors", - "create.ponder.tag.contraption_actor.description": "UNLOCALIZED: Components which expose special behaviour when attached to a moving contraption", - "create.ponder.tag.arm_targets": "UNLOCALIZED: Targets for Mechanical Arms", - "create.ponder.tag.arm_targets.description": "UNLOCALIZED: Components which can be selected as inputs or outputs to the Mechanical Arm", - "create.ponder.tag.logistics": "UNLOCALIZED: Item Transportation", - "create.ponder.tag.logistics.description": "UNLOCALIZED: Components which help moving items around", - "create.ponder.tag.movement_anchor": "UNLOCALIZED: Movement Anchors", - "create.ponder.tag.movement_anchor.description": "UNLOCALIZED: Components which allow the creation of moving contraptions, animating an attached structure in a variety of ways", - "create.ponder.tag.creative": "UNLOCALIZED: Creative Mode", - "create.ponder.tag.creative.description": "UNLOCALIZED: Components not usually available for Survival Mode", - "create.ponder.tag.kinetic_relays": "UNLOCALIZED: Kinetic Blocks", - "create.ponder.tag.kinetic_relays.description": "UNLOCALIZED: Components which help relaying Rotational Force elsewhere", - "create.ponder.tag.windmill_sails": "UNLOCALIZED: Sails for Windmill Bearings", - "create.ponder.tag.windmill_sails.description": "UNLOCALIZED: Blocks that count towards the strength of a Windmill Contraption when assembled. Each of these have equal efficiency in doing so.", - "create.ponder.tag.contraption_assembly": "UNLOCALIZED: Block Attachment Utility", - "create.ponder.tag.contraption_assembly.description": "UNLOCALIZED: Tools and Components used to assemble structures moved as an animated Contraption", - "create.ponder.tag.decoration": "UNLOCALIZED: Aesthetics", - "create.ponder.tag.decoration.description": "UNLOCALIZED: Components used mostly for decorative purposes", - "create.ponder.tag.kinetic_appliances": "UNLOCALIZED: Kinetic Appliances", - "create.ponder.tag.kinetic_appliances.description": "UNLOCALIZED: Components which make use of Rotational Force", + "create.ponder.shared.movement_anchors": "UNLOCALIZED: With the help of Chassis or Super Glue, larger structures can be moved.", "create.ponder.tag.redstone": "UNLOCALIZED: Logic Components", "create.ponder.tag.redstone.description": "UNLOCALIZED: Components which help with redstone engineering", + "create.ponder.tag.contraption_assembly": "UNLOCALIZED: Block Attachment Utility", + "create.ponder.tag.contraption_assembly.description": "UNLOCALIZED: Tools and Components used to assemble structures moved as an animated Contraption", "create.ponder.tag.fluids": "UNLOCALIZED: Fluid Manipulators", "create.ponder.tag.fluids.description": "UNLOCALIZED: Components which help relaying and making use of Fluids", + "create.ponder.tag.decoration": "UNLOCALIZED: Aesthetics", + "create.ponder.tag.decoration.description": "UNLOCALIZED: Components used mostly for decorative purposes", + "create.ponder.tag.windmill_sails": "UNLOCALIZED: Sails for Windmill Bearings", + "create.ponder.tag.windmill_sails.description": "UNLOCALIZED: Blocks that count towards the strength of a Windmill Contraption when assembled. Each of these have equal efficiency in doing so.", + "create.ponder.tag.arm_targets": "UNLOCALIZED: Targets for Mechanical Arms", + "create.ponder.tag.arm_targets.description": "UNLOCALIZED: Components which can be selected as inputs or outputs to the Mechanical Arm", + "create.ponder.tag.kinetic_appliances": "UNLOCALIZED: Kinetic Appliances", + "create.ponder.tag.kinetic_appliances.description": "UNLOCALIZED: Components which make use of Rotational Force", + "create.ponder.tag.kinetic_sources": "UNLOCALIZED: Kinetic Sources", + "create.ponder.tag.kinetic_sources.description": "UNLOCALIZED: Components which generate Rotational Force", + "create.ponder.tag.movement_anchor": "UNLOCALIZED: Movement Anchors", + "create.ponder.tag.movement_anchor.description": "UNLOCALIZED: Components which allow the creation of moving contraptions, animating an attached structure in a variety of ways", + "create.ponder.tag.kinetic_relays": "UNLOCALIZED: Kinetic Blocks", + "create.ponder.tag.kinetic_relays.description": "UNLOCALIZED: Components which help relaying Rotational Force elsewhere", + "create.ponder.tag.contraption_actor": "UNLOCALIZED: Contraption Actors", + "create.ponder.tag.contraption_actor.description": "UNLOCALIZED: Components which expose special behaviour when attached to a moving contraption", + "create.ponder.tag.creative": "UNLOCALIZED: Creative Mode", + "create.ponder.tag.creative.description": "UNLOCALIZED: Components not usually available for Survival Mode", + "create.ponder.tag.logistics": "UNLOCALIZED: Item Transportation", + "create.ponder.tag.logistics.description": "UNLOCALIZED: Components which help moving items around", "create.ponder.adjustable_pulse_repeater.header": "UNLOCALIZED: Controlling signals using Adjustable Pulse Repeaters", "create.ponder.adjustable_pulse_repeater.text_1": "UNLOCALIZED: Adjustable Pulse Repeaters emit a short pulse at a delay", diff --git a/src/generated/resources/assets/create/lang/unfinished/it_it.json b/src/generated/resources/assets/create/lang/unfinished/it_it.json index da615360f..30e9831f5 100644 --- a/src/generated/resources/assets/create/lang/unfinished/it_it.json +++ b/src/generated/resources/assets/create/lang/unfinished/it_it.json @@ -1503,41 +1503,41 @@ "create.ponder.categories": "UNLOCALIZED: Available Categories in Create", "create.ponder.index_description": "UNLOCALIZED: Click one of the icons to learn about its associated Items and Blocks", "create.ponder.index_title": "UNLOCALIZED: Ponder Index", - "create.ponder.shared.movement_anchors": "UNLOCALIZED: With the help of Chassis or Super Glue, larger structures can be moved.", - "create.ponder.shared.rpm32": "UNLOCALIZED: 32 RPM", - "create.ponder.shared.sneak_and": "UNLOCALIZED: Sneak +", - "create.ponder.shared.storage_on_contraption": "UNLOCALIZED: Inventories attached to the Contraption will pick up their drops automatically", + "create.ponder.shared.rpm16": "UNLOCALIZED: 16 RPM", "create.ponder.shared.behaviour_modify_wrench": "UNLOCALIZED: This behaviour can be modified using a Wrench", + "create.ponder.shared.storage_on_contraption": "UNLOCALIZED: Inventories attached to the Contraption will pick up their drops automatically", + "create.ponder.shared.sneak_and": "UNLOCALIZED: Sneak +", "create.ponder.shared.rpm8": "UNLOCALIZED: 8 RPM", "create.ponder.shared.ctrl_and": "UNLOCALIZED: Ctrl +", + "create.ponder.shared.rpm32": "UNLOCALIZED: 32 RPM", "create.ponder.shared.rpm16_source": "UNLOCALIZED: Source: 16 RPM", - "create.ponder.shared.rpm16": "UNLOCALIZED: 16 RPM", - "create.ponder.tag.kinetic_sources": "UNLOCALIZED: Kinetic Sources", - "create.ponder.tag.kinetic_sources.description": "UNLOCALIZED: Components which generate Rotational Force", - "create.ponder.tag.contraption_actor": "UNLOCALIZED: Contraption Actors", - "create.ponder.tag.contraption_actor.description": "UNLOCALIZED: Components which expose special behaviour when attached to a moving contraption", - "create.ponder.tag.arm_targets": "UNLOCALIZED: Targets for Mechanical Arms", - "create.ponder.tag.arm_targets.description": "UNLOCALIZED: Components which can be selected as inputs or outputs to the Mechanical Arm", - "create.ponder.tag.logistics": "UNLOCALIZED: Item Transportation", - "create.ponder.tag.logistics.description": "UNLOCALIZED: Components which help moving items around", - "create.ponder.tag.movement_anchor": "UNLOCALIZED: Movement Anchors", - "create.ponder.tag.movement_anchor.description": "UNLOCALIZED: Components which allow the creation of moving contraptions, animating an attached structure in a variety of ways", - "create.ponder.tag.creative": "UNLOCALIZED: Creative Mode", - "create.ponder.tag.creative.description": "UNLOCALIZED: Components not usually available for Survival Mode", - "create.ponder.tag.kinetic_relays": "UNLOCALIZED: Kinetic Blocks", - "create.ponder.tag.kinetic_relays.description": "UNLOCALIZED: Components which help relaying Rotational Force elsewhere", - "create.ponder.tag.windmill_sails": "UNLOCALIZED: Sails for Windmill Bearings", - "create.ponder.tag.windmill_sails.description": "UNLOCALIZED: Blocks that count towards the strength of a Windmill Contraption when assembled. Each of these have equal efficiency in doing so.", - "create.ponder.tag.contraption_assembly": "UNLOCALIZED: Block Attachment Utility", - "create.ponder.tag.contraption_assembly.description": "UNLOCALIZED: Tools and Components used to assemble structures moved as an animated Contraption", - "create.ponder.tag.decoration": "UNLOCALIZED: Aesthetics", - "create.ponder.tag.decoration.description": "UNLOCALIZED: Components used mostly for decorative purposes", - "create.ponder.tag.kinetic_appliances": "UNLOCALIZED: Kinetic Appliances", - "create.ponder.tag.kinetic_appliances.description": "UNLOCALIZED: Components which make use of Rotational Force", + "create.ponder.shared.movement_anchors": "UNLOCALIZED: With the help of Chassis or Super Glue, larger structures can be moved.", "create.ponder.tag.redstone": "UNLOCALIZED: Logic Components", "create.ponder.tag.redstone.description": "UNLOCALIZED: Components which help with redstone engineering", + "create.ponder.tag.contraption_assembly": "UNLOCALIZED: Block Attachment Utility", + "create.ponder.tag.contraption_assembly.description": "UNLOCALIZED: Tools and Components used to assemble structures moved as an animated Contraption", "create.ponder.tag.fluids": "UNLOCALIZED: Fluid Manipulators", "create.ponder.tag.fluids.description": "UNLOCALIZED: Components which help relaying and making use of Fluids", + "create.ponder.tag.decoration": "UNLOCALIZED: Aesthetics", + "create.ponder.tag.decoration.description": "UNLOCALIZED: Components used mostly for decorative purposes", + "create.ponder.tag.windmill_sails": "UNLOCALIZED: Sails for Windmill Bearings", + "create.ponder.tag.windmill_sails.description": "UNLOCALIZED: Blocks that count towards the strength of a Windmill Contraption when assembled. Each of these have equal efficiency in doing so.", + "create.ponder.tag.arm_targets": "UNLOCALIZED: Targets for Mechanical Arms", + "create.ponder.tag.arm_targets.description": "UNLOCALIZED: Components which can be selected as inputs or outputs to the Mechanical Arm", + "create.ponder.tag.kinetic_appliances": "UNLOCALIZED: Kinetic Appliances", + "create.ponder.tag.kinetic_appliances.description": "UNLOCALIZED: Components which make use of Rotational Force", + "create.ponder.tag.kinetic_sources": "UNLOCALIZED: Kinetic Sources", + "create.ponder.tag.kinetic_sources.description": "UNLOCALIZED: Components which generate Rotational Force", + "create.ponder.tag.movement_anchor": "UNLOCALIZED: Movement Anchors", + "create.ponder.tag.movement_anchor.description": "UNLOCALIZED: Components which allow the creation of moving contraptions, animating an attached structure in a variety of ways", + "create.ponder.tag.kinetic_relays": "UNLOCALIZED: Kinetic Blocks", + "create.ponder.tag.kinetic_relays.description": "UNLOCALIZED: Components which help relaying Rotational Force elsewhere", + "create.ponder.tag.contraption_actor": "UNLOCALIZED: Contraption Actors", + "create.ponder.tag.contraption_actor.description": "UNLOCALIZED: Components which expose special behaviour when attached to a moving contraption", + "create.ponder.tag.creative": "UNLOCALIZED: Creative Mode", + "create.ponder.tag.creative.description": "UNLOCALIZED: Components not usually available for Survival Mode", + "create.ponder.tag.logistics": "UNLOCALIZED: Item Transportation", + "create.ponder.tag.logistics.description": "UNLOCALIZED: Components which help moving items around", "create.ponder.adjustable_pulse_repeater.header": "UNLOCALIZED: Controlling signals using Adjustable Pulse Repeaters", "create.ponder.adjustable_pulse_repeater.text_1": "UNLOCALIZED: Adjustable Pulse Repeaters emit a short pulse at a delay", diff --git a/src/generated/resources/assets/create/lang/unfinished/ja_jp.json b/src/generated/resources/assets/create/lang/unfinished/ja_jp.json index a53bab0a1..97891f45a 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ja_jp.json +++ b/src/generated/resources/assets/create/lang/unfinished/ja_jp.json @@ -1503,41 +1503,41 @@ "create.ponder.categories": "Createで利用可能なカゴテリ", "create.ponder.index_description": "アイテムをクリックすると、関連するアイテムやブロックの情報が表示されます。", "create.ponder.index_title": "思案索引", - "create.ponder.shared.movement_anchors": "シャーシや超粘着剤を使えば大きな構造物も動かせます", - "create.ponder.shared.rpm32": "32 RPM", - "create.ponder.shared.sneak_and": "スニーク +", - "create.ponder.shared.storage_on_contraption": "構造物中の収納ブロックは自動的にドロップを拾います", + "create.ponder.shared.rpm16": "16 RPM", "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.rpm16": "16 RPM", - "create.ponder.tag.kinetic_sources": "原動機", - "create.ponder.tag.kinetic_sources.description": "回転力を生み出す機械です", - "create.ponder.tag.contraption_actor": "からくり構造部品", - "create.ponder.tag.contraption_actor.description": "ブロックを動かす機械に取り付けたときに特別な動作をする機械です", - "create.ponder.tag.arm_targets": "メカニカルアームのターゲット", - "create.ponder.tag.arm_targets.description": "メカニカルアームの搬入元または搬出先にできる機械/ブロックです", - "create.ponder.tag.logistics": "輸送機械", - "create.ponder.tag.logistics.description": "アイテムの運搬を補助する機械です", - "create.ponder.tag.movement_anchor": "からくり機械", - "create.ponder.tag.movement_anchor.description": "取り付けたブロック構造物を様々な方法で動かすことができるからくりを作ることができる機械です", - "create.ponder.tag.creative": "クリエイティブ限定", - "create.ponder.tag.creative.description": "サバイバルモードでは通常入手できない機械です", - "create.ponder.tag.kinetic_relays": "伝達機械", - "create.ponder.tag.kinetic_relays.description": "回転力の伝達に役立つ機械です", - "create.ponder.tag.windmill_sails": "風車ベアリング用の帆", - "create.ponder.tag.windmill_sails.description": "風車につける構造物を組み立てたときに帆にカウントされるブロック。どのブロックを使っても同じ効率です", - "create.ponder.tag.contraption_assembly": "ブロック組み立て用品", - "create.ponder.tag.contraption_assembly.description": "アニメーションして動く構造物を組み立てるための道具や機械です", - "create.ponder.tag.decoration": "装飾", - "create.ponder.tag.decoration.description": "主に装飾に使うブロックです", - "create.ponder.tag.kinetic_appliances": "作業機械", - "create.ponder.tag.kinetic_appliances.description": "回転力を利用する機械です", + "create.ponder.shared.movement_anchors": "シャーシや超粘着剤を使えば大きな構造物も動かせます", "create.ponder.tag.redstone": "制御機械", "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.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.kinetic_appliances": "作業機械", + "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_relays": "伝達機械", + "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.logistics": "輸送機械", + "create.ponder.tag.logistics.description": "アイテムの運搬を補助する機械です", "create.ponder.adjustable_pulse_repeater.header": "可変パルスリピーターによる信号制御", "create.ponder.adjustable_pulse_repeater.text_1": "可変パルスリピーターは信号を遅延し、短いパルスにして出力します", diff --git a/src/generated/resources/assets/create/lang/unfinished/ko_kr.json b/src/generated/resources/assets/create/lang/unfinished/ko_kr.json index accb593d5..4d1f47c8b 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ko_kr.json +++ b/src/generated/resources/assets/create/lang/unfinished/ko_kr.json @@ -1503,41 +1503,41 @@ "create.ponder.categories": "Create에서 둘러볼 수 있는 목록들", "create.ponder.index_description": "아이콘을 클릭해 관련 아이템과 블록에 대해 알아볼 수 있습니다.", "create.ponder.index_title": "분석 메뉴 제목", - "create.ponder.shared.movement_anchors": "섀시나 강력 접착제로 큰 구조물도 옮길 수 있습니다.", - "create.ponder.shared.rpm32": "32 RPM", - "create.ponder.shared.sneak_and": "웅크리기 +", - "create.ponder.shared.storage_on_contraption": "구조물에 부착된 보관함은 구조물이 떨어뜨린 아이템을 자동으로 줍습니다.", + "create.ponder.shared.rpm16": "16 RPM", "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.rpm16": "16 RPM", - "create.ponder.tag.kinetic_sources": "동력 생산", - "create.ponder.tag.kinetic_sources.description": "동력을 생산하는 장치입니다.", - "create.ponder.tag.contraption_actor": "구조물 장치", - "create.ponder.tag.contraption_actor.description": "움직이는 구조물에 부착되어 특정 기능을 수행하는 장치입니다.", - "create.ponder.tag.arm_targets": "기계 팔의 목표 대상", - "create.ponder.tag.arm_targets.description": "기계 팔이 가져가거나 놓을 곳으로 선택할 수 있는 부품입니다.", - "create.ponder.tag.logistics": "아이템 수송", - "create.ponder.tag.logistics.description": "아이템을 옮기는데 도움을 줄 부품입니다.", - "create.ponder.tag.movement_anchor": "이동 고정장치", - "create.ponder.tag.movement_anchor.description": "부착된 구조물을 다양한 방법으로 움직이게하는 장치입니다.", - "create.ponder.tag.creative": "크리에이티브 모드", - "create.ponder.tag.creative.description": "서바이벌 모드에서는 얻을 수 없는 부품입니다.", - "create.ponder.tag.kinetic_relays": "동력 부품", - "create.ponder.tag.kinetic_relays.description": "동력을 다른 곳으로 연결할 때 도움을 주는 부품입니다.", - "create.ponder.tag.windmill_sails": "풍차 베어링의 날개", - "create.ponder.tag.windmill_sails.description": "조립되었을 때 풍차 구조물의 동력에 영향을 주는 블록들입니다. 이 블록들은 동일한 효율을 가집니다.", - "create.ponder.tag.contraption_assembly": "블록 부착 도구", - "create.ponder.tag.contraption_assembly.description": "블록들을 이어 구조물로 만들게해주는 도구와 부품입니다.", - "create.ponder.tag.decoration": "장식", - "create.ponder.tag.decoration.description": "주로 장식 용도로 쓰이는 부품입니다.", - "create.ponder.tag.kinetic_appliances": "동력 장치", - "create.ponder.tag.kinetic_appliances.description": "동력을 사용하는 장치입니다.", + "create.ponder.shared.movement_anchors": "섀시나 강력 접착제로 큰 구조물도 옮길 수 있습니다.", "create.ponder.tag.redstone": "레드스톤 부품", "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.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.kinetic_appliances": "동력 장치", + "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_relays": "동력 부품", + "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.logistics": "아이템 수송", + "create.ponder.tag.logistics.description": "아이템을 옮기는데 도움을 줄 부품입니다.", "create.ponder.adjustable_pulse_repeater.header": "가변 펄스 리피터를 이용해 신호 조절하기", "create.ponder.adjustable_pulse_repeater.text_1": "가변 펄스 리피터는 딜레이 이후 짧은 신호를 보냅니다.", diff --git a/src/generated/resources/assets/create/lang/unfinished/nl_nl.json b/src/generated/resources/assets/create/lang/unfinished/nl_nl.json index 28abd156a..50be0187a 100644 --- a/src/generated/resources/assets/create/lang/unfinished/nl_nl.json +++ b/src/generated/resources/assets/create/lang/unfinished/nl_nl.json @@ -1503,41 +1503,41 @@ "create.ponder.categories": "UNLOCALIZED: Available Categories in Create", "create.ponder.index_description": "UNLOCALIZED: Click one of the icons to learn about its associated Items and Blocks", "create.ponder.index_title": "UNLOCALIZED: Ponder Index", - "create.ponder.shared.movement_anchors": "UNLOCALIZED: With the help of Chassis or Super Glue, larger structures can be moved.", - "create.ponder.shared.rpm32": "UNLOCALIZED: 32 RPM", - "create.ponder.shared.sneak_and": "UNLOCALIZED: Sneak +", - "create.ponder.shared.storage_on_contraption": "UNLOCALIZED: Inventories attached to the Contraption will pick up their drops automatically", + "create.ponder.shared.rpm16": "UNLOCALIZED: 16 RPM", "create.ponder.shared.behaviour_modify_wrench": "UNLOCALIZED: This behaviour can be modified using a Wrench", + "create.ponder.shared.storage_on_contraption": "UNLOCALIZED: Inventories attached to the Contraption will pick up their drops automatically", + "create.ponder.shared.sneak_and": "UNLOCALIZED: Sneak +", "create.ponder.shared.rpm8": "UNLOCALIZED: 8 RPM", "create.ponder.shared.ctrl_and": "UNLOCALIZED: Ctrl +", + "create.ponder.shared.rpm32": "UNLOCALIZED: 32 RPM", "create.ponder.shared.rpm16_source": "UNLOCALIZED: Source: 16 RPM", - "create.ponder.shared.rpm16": "UNLOCALIZED: 16 RPM", - "create.ponder.tag.kinetic_sources": "UNLOCALIZED: Kinetic Sources", - "create.ponder.tag.kinetic_sources.description": "UNLOCALIZED: Components which generate Rotational Force", - "create.ponder.tag.contraption_actor": "UNLOCALIZED: Contraption Actors", - "create.ponder.tag.contraption_actor.description": "UNLOCALIZED: Components which expose special behaviour when attached to a moving contraption", - "create.ponder.tag.arm_targets": "UNLOCALIZED: Targets for Mechanical Arms", - "create.ponder.tag.arm_targets.description": "UNLOCALIZED: Components which can be selected as inputs or outputs to the Mechanical Arm", - "create.ponder.tag.logistics": "UNLOCALIZED: Item Transportation", - "create.ponder.tag.logistics.description": "UNLOCALIZED: Components which help moving items around", - "create.ponder.tag.movement_anchor": "UNLOCALIZED: Movement Anchors", - "create.ponder.tag.movement_anchor.description": "UNLOCALIZED: Components which allow the creation of moving contraptions, animating an attached structure in a variety of ways", - "create.ponder.tag.creative": "UNLOCALIZED: Creative Mode", - "create.ponder.tag.creative.description": "UNLOCALIZED: Components not usually available for Survival Mode", - "create.ponder.tag.kinetic_relays": "UNLOCALIZED: Kinetic Blocks", - "create.ponder.tag.kinetic_relays.description": "UNLOCALIZED: Components which help relaying Rotational Force elsewhere", - "create.ponder.tag.windmill_sails": "UNLOCALIZED: Sails for Windmill Bearings", - "create.ponder.tag.windmill_sails.description": "UNLOCALIZED: Blocks that count towards the strength of a Windmill Contraption when assembled. Each of these have equal efficiency in doing so.", - "create.ponder.tag.contraption_assembly": "UNLOCALIZED: Block Attachment Utility", - "create.ponder.tag.contraption_assembly.description": "UNLOCALIZED: Tools and Components used to assemble structures moved as an animated Contraption", - "create.ponder.tag.decoration": "UNLOCALIZED: Aesthetics", - "create.ponder.tag.decoration.description": "UNLOCALIZED: Components used mostly for decorative purposes", - "create.ponder.tag.kinetic_appliances": "UNLOCALIZED: Kinetic Appliances", - "create.ponder.tag.kinetic_appliances.description": "UNLOCALIZED: Components which make use of Rotational Force", + "create.ponder.shared.movement_anchors": "UNLOCALIZED: With the help of Chassis or Super Glue, larger structures can be moved.", "create.ponder.tag.redstone": "UNLOCALIZED: Logic Components", "create.ponder.tag.redstone.description": "UNLOCALIZED: Components which help with redstone engineering", + "create.ponder.tag.contraption_assembly": "UNLOCALIZED: Block Attachment Utility", + "create.ponder.tag.contraption_assembly.description": "UNLOCALIZED: Tools and Components used to assemble structures moved as an animated Contraption", "create.ponder.tag.fluids": "UNLOCALIZED: Fluid Manipulators", "create.ponder.tag.fluids.description": "UNLOCALIZED: Components which help relaying and making use of Fluids", + "create.ponder.tag.decoration": "UNLOCALIZED: Aesthetics", + "create.ponder.tag.decoration.description": "UNLOCALIZED: Components used mostly for decorative purposes", + "create.ponder.tag.windmill_sails": "UNLOCALIZED: Sails for Windmill Bearings", + "create.ponder.tag.windmill_sails.description": "UNLOCALIZED: Blocks that count towards the strength of a Windmill Contraption when assembled. Each of these have equal efficiency in doing so.", + "create.ponder.tag.arm_targets": "UNLOCALIZED: Targets for Mechanical Arms", + "create.ponder.tag.arm_targets.description": "UNLOCALIZED: Components which can be selected as inputs or outputs to the Mechanical Arm", + "create.ponder.tag.kinetic_appliances": "UNLOCALIZED: Kinetic Appliances", + "create.ponder.tag.kinetic_appliances.description": "UNLOCALIZED: Components which make use of Rotational Force", + "create.ponder.tag.kinetic_sources": "UNLOCALIZED: Kinetic Sources", + "create.ponder.tag.kinetic_sources.description": "UNLOCALIZED: Components which generate Rotational Force", + "create.ponder.tag.movement_anchor": "UNLOCALIZED: Movement Anchors", + "create.ponder.tag.movement_anchor.description": "UNLOCALIZED: Components which allow the creation of moving contraptions, animating an attached structure in a variety of ways", + "create.ponder.tag.kinetic_relays": "UNLOCALIZED: Kinetic Blocks", + "create.ponder.tag.kinetic_relays.description": "UNLOCALIZED: Components which help relaying Rotational Force elsewhere", + "create.ponder.tag.contraption_actor": "UNLOCALIZED: Contraption Actors", + "create.ponder.tag.contraption_actor.description": "UNLOCALIZED: Components which expose special behaviour when attached to a moving contraption", + "create.ponder.tag.creative": "UNLOCALIZED: Creative Mode", + "create.ponder.tag.creative.description": "UNLOCALIZED: Components not usually available for Survival Mode", + "create.ponder.tag.logistics": "UNLOCALIZED: Item Transportation", + "create.ponder.tag.logistics.description": "UNLOCALIZED: Components which help moving items around", "create.ponder.adjustable_pulse_repeater.header": "UNLOCALIZED: Controlling signals using Adjustable Pulse Repeaters", "create.ponder.adjustable_pulse_repeater.text_1": "UNLOCALIZED: Adjustable Pulse Repeaters emit a short pulse at a delay", diff --git a/src/generated/resources/assets/create/lang/unfinished/pl_pl.json b/src/generated/resources/assets/create/lang/unfinished/pl_pl.json index d479a10d3..2520ff9ed 100644 --- a/src/generated/resources/assets/create/lang/unfinished/pl_pl.json +++ b/src/generated/resources/assets/create/lang/unfinished/pl_pl.json @@ -1503,41 +1503,41 @@ "create.ponder.categories": "UNLOCALIZED: Available Categories in Create", "create.ponder.index_description": "UNLOCALIZED: Click one of the icons to learn about its associated Items and Blocks", "create.ponder.index_title": "UNLOCALIZED: Ponder Index", - "create.ponder.shared.movement_anchors": "Z pomocą stelaży lub Super Glue, większe struktury mogą być przesuwane.", - "create.ponder.shared.rpm32": "32 Ob/min", - "create.ponder.shared.sneak_and": "Skradanie +", - "create.ponder.shared.storage_on_contraption": "Pojemniki przyłączone do maszyny będą podnosiły przedmioty automatycznie", + "create.ponder.shared.rpm16": "16 Ob/min", "create.ponder.shared.behaviour_modify_wrench": "To zachowanie może być zmodyfikowane przy pomocy klucza", + "create.ponder.shared.storage_on_contraption": "Pojemniki przyłączone do maszyny będą podnosiły przedmioty automatycznie", + "create.ponder.shared.sneak_and": "Skradanie +", "create.ponder.shared.rpm8": "8 Ob/min", "create.ponder.shared.ctrl_and": "Ctrl +", + "create.ponder.shared.rpm32": "32 Ob/min", "create.ponder.shared.rpm16_source": "Źródło: 16 Ob/min", - "create.ponder.shared.rpm16": "16 Ob/min", - "create.ponder.tag.kinetic_sources": "Źródła siły obrotowej", - "create.ponder.tag.kinetic_sources.description": "Komponenty, które generują siłę obrotu", - "create.ponder.tag.contraption_actor": "Komponenty aktywne maszyn", - "create.ponder.tag.contraption_actor.description": "Komponenty, które posiadają specjalne zachowanie będąc podłączonymi do maszyny", - "create.ponder.tag.arm_targets": "Cele dla mechanicznego ramienia", - "create.ponder.tag.arm_targets.description": "Komponenty, które mogą być wybrane, jako wejście lub wyjście dla mechanicznego ramienia", - "create.ponder.tag.logistics": "Transport przedmiotów", - "create.ponder.tag.logistics.description": "Komponenty, które pomagają w transporcie przedmiotów", - "create.ponder.tag.movement_anchor": "Komponenty ruchome", - "create.ponder.tag.movement_anchor.description": "Komponenty, które pozwalają na tworzenie ruchomych maszyn, poruszając ją na wiele różnych sposobów.", - "create.ponder.tag.creative": "Tryb kreatywny", - "create.ponder.tag.creative.description": "Komponenty niedostępne na trybie przetrwania", - "create.ponder.tag.kinetic_relays": "Bloki obrotowe", - "create.ponder.tag.kinetic_relays.description": "Komponenty, które pomagają w przekazywaniu siły obrotowej w inne miejsca", - "create.ponder.tag.windmill_sails": "Bloki żaglo-podobne", - "create.ponder.tag.windmill_sails.description": "Bloki, które dokładają się do siły, z jaką obracają się łopaty maszyny wiatrakowej.", - "create.ponder.tag.contraption_assembly": "Bloki do tworzenia maszyn", - "create.ponder.tag.contraption_assembly.description": "Narzędzia i komponenty używane do konstrukcji ruchomych maszyn", - "create.ponder.tag.decoration": "Dekoracje", - "create.ponder.tag.decoration.description": "Komponenty używane głównie do celów estetycznych", - "create.ponder.tag.kinetic_appliances": "Urządzenia obrotowe", - "create.ponder.tag.kinetic_appliances.description": "Komponenty używające siły obrotowej", + "create.ponder.shared.movement_anchors": "Z pomocą stelaży lub Super Glue, większe struktury mogą być przesuwane.", "create.ponder.tag.redstone": "Komponenty logiczne", "create.ponder.tag.redstone.description": "Komponenty przydatne w Redstonie", + "create.ponder.tag.contraption_assembly": "Bloki do tworzenia maszyn", + "create.ponder.tag.contraption_assembly.description": "Narzędzia i komponenty używane do konstrukcji ruchomych maszyn", "create.ponder.tag.fluids": "Manipulator płynów", "create.ponder.tag.fluids.description": "Komponenty przydatne przy pracy z płynami", + "create.ponder.tag.decoration": "Dekoracje", + "create.ponder.tag.decoration.description": "Komponenty używane głównie do celów estetycznych", + "create.ponder.tag.windmill_sails": "Bloki żaglo-podobne", + "create.ponder.tag.windmill_sails.description": "Bloki, które dokładają się do siły, z jaką obracają się łopaty maszyny wiatrakowej.", + "create.ponder.tag.arm_targets": "Cele dla mechanicznego ramienia", + "create.ponder.tag.arm_targets.description": "Komponenty, które mogą być wybrane, jako wejście lub wyjście dla mechanicznego ramienia", + "create.ponder.tag.kinetic_appliances": "Urządzenia obrotowe", + "create.ponder.tag.kinetic_appliances.description": "Komponenty używające siły obrotowej", + "create.ponder.tag.kinetic_sources": "Źródła siły obrotowej", + "create.ponder.tag.kinetic_sources.description": "Komponenty, które generują siłę obrotu", + "create.ponder.tag.movement_anchor": "Komponenty ruchome", + "create.ponder.tag.movement_anchor.description": "Komponenty, które pozwalają na tworzenie ruchomych maszyn, poruszając ją na wiele różnych sposobów.", + "create.ponder.tag.kinetic_relays": "Bloki obrotowe", + "create.ponder.tag.kinetic_relays.description": "Komponenty, które pomagają w przekazywaniu siły obrotowej w inne miejsca", + "create.ponder.tag.contraption_actor": "Komponenty aktywne maszyn", + "create.ponder.tag.contraption_actor.description": "Komponenty, które posiadają specjalne zachowanie będąc podłączonymi do maszyny", + "create.ponder.tag.creative": "Tryb kreatywny", + "create.ponder.tag.creative.description": "Komponenty niedostępne na trybie przetrwania", + "create.ponder.tag.logistics": "Transport przedmiotów", + "create.ponder.tag.logistics.description": "Komponenty, które pomagają w transporcie przedmiotów", "create.ponder.adjustable_pulse_repeater.header": "Kontrola sygnałów z wykorzystaniem regulowanych przekaźników pulsu", "create.ponder.adjustable_pulse_repeater.text_1": "Regulowane przekaźniki pulsu emitują krótki puls po opóźnieniu", 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 9210563b0..4c7bb4056 100644 --- a/src/generated/resources/assets/create/lang/unfinished/pt_br.json +++ b/src/generated/resources/assets/create/lang/unfinished/pt_br.json @@ -1503,41 +1503,41 @@ "create.ponder.categories": "UNLOCALIZED: Available Categories in Create", "create.ponder.index_description": "UNLOCALIZED: Click one of the icons to learn about its associated Items and Blocks", "create.ponder.index_title": "UNLOCALIZED: Ponder Index", - "create.ponder.shared.movement_anchors": "UNLOCALIZED: With the help of Chassis or Super Glue, larger structures can be moved.", - "create.ponder.shared.rpm32": "UNLOCALIZED: 32 RPM", - "create.ponder.shared.sneak_and": "UNLOCALIZED: Sneak +", - "create.ponder.shared.storage_on_contraption": "UNLOCALIZED: Inventories attached to the Contraption will pick up their drops automatically", + "create.ponder.shared.rpm16": "UNLOCALIZED: 16 RPM", "create.ponder.shared.behaviour_modify_wrench": "UNLOCALIZED: This behaviour can be modified using a Wrench", + "create.ponder.shared.storage_on_contraption": "UNLOCALIZED: Inventories attached to the Contraption will pick up their drops automatically", + "create.ponder.shared.sneak_and": "UNLOCALIZED: Sneak +", "create.ponder.shared.rpm8": "UNLOCALIZED: 8 RPM", "create.ponder.shared.ctrl_and": "UNLOCALIZED: Ctrl +", + "create.ponder.shared.rpm32": "UNLOCALIZED: 32 RPM", "create.ponder.shared.rpm16_source": "UNLOCALIZED: Source: 16 RPM", - "create.ponder.shared.rpm16": "UNLOCALIZED: 16 RPM", - "create.ponder.tag.kinetic_sources": "UNLOCALIZED: Kinetic Sources", - "create.ponder.tag.kinetic_sources.description": "UNLOCALIZED: Components which generate Rotational Force", - "create.ponder.tag.contraption_actor": "UNLOCALIZED: Contraption Actors", - "create.ponder.tag.contraption_actor.description": "UNLOCALIZED: Components which expose special behaviour when attached to a moving contraption", - "create.ponder.tag.arm_targets": "UNLOCALIZED: Targets for Mechanical Arms", - "create.ponder.tag.arm_targets.description": "UNLOCALIZED: Components which can be selected as inputs or outputs to the Mechanical Arm", - "create.ponder.tag.logistics": "UNLOCALIZED: Item Transportation", - "create.ponder.tag.logistics.description": "UNLOCALIZED: Components which help moving items around", - "create.ponder.tag.movement_anchor": "UNLOCALIZED: Movement Anchors", - "create.ponder.tag.movement_anchor.description": "UNLOCALIZED: Components which allow the creation of moving contraptions, animating an attached structure in a variety of ways", - "create.ponder.tag.creative": "UNLOCALIZED: Creative Mode", - "create.ponder.tag.creative.description": "UNLOCALIZED: Components not usually available for Survival Mode", - "create.ponder.tag.kinetic_relays": "UNLOCALIZED: Kinetic Blocks", - "create.ponder.tag.kinetic_relays.description": "UNLOCALIZED: Components which help relaying Rotational Force elsewhere", - "create.ponder.tag.windmill_sails": "UNLOCALIZED: Sails for Windmill Bearings", - "create.ponder.tag.windmill_sails.description": "UNLOCALIZED: Blocks that count towards the strength of a Windmill Contraption when assembled. Each of these have equal efficiency in doing so.", - "create.ponder.tag.contraption_assembly": "UNLOCALIZED: Block Attachment Utility", - "create.ponder.tag.contraption_assembly.description": "UNLOCALIZED: Tools and Components used to assemble structures moved as an animated Contraption", - "create.ponder.tag.decoration": "UNLOCALIZED: Aesthetics", - "create.ponder.tag.decoration.description": "UNLOCALIZED: Components used mostly for decorative purposes", - "create.ponder.tag.kinetic_appliances": "UNLOCALIZED: Kinetic Appliances", - "create.ponder.tag.kinetic_appliances.description": "UNLOCALIZED: Components which make use of Rotational Force", + "create.ponder.shared.movement_anchors": "UNLOCALIZED: With the help of Chassis or Super Glue, larger structures can be moved.", "create.ponder.tag.redstone": "UNLOCALIZED: Logic Components", "create.ponder.tag.redstone.description": "UNLOCALIZED: Components which help with redstone engineering", + "create.ponder.tag.contraption_assembly": "UNLOCALIZED: Block Attachment Utility", + "create.ponder.tag.contraption_assembly.description": "UNLOCALIZED: Tools and Components used to assemble structures moved as an animated Contraption", "create.ponder.tag.fluids": "UNLOCALIZED: Fluid Manipulators", "create.ponder.tag.fluids.description": "UNLOCALIZED: Components which help relaying and making use of Fluids", + "create.ponder.tag.decoration": "UNLOCALIZED: Aesthetics", + "create.ponder.tag.decoration.description": "UNLOCALIZED: Components used mostly for decorative purposes", + "create.ponder.tag.windmill_sails": "UNLOCALIZED: Sails for Windmill Bearings", + "create.ponder.tag.windmill_sails.description": "UNLOCALIZED: Blocks that count towards the strength of a Windmill Contraption when assembled. Each of these have equal efficiency in doing so.", + "create.ponder.tag.arm_targets": "UNLOCALIZED: Targets for Mechanical Arms", + "create.ponder.tag.arm_targets.description": "UNLOCALIZED: Components which can be selected as inputs or outputs to the Mechanical Arm", + "create.ponder.tag.kinetic_appliances": "UNLOCALIZED: Kinetic Appliances", + "create.ponder.tag.kinetic_appliances.description": "UNLOCALIZED: Components which make use of Rotational Force", + "create.ponder.tag.kinetic_sources": "UNLOCALIZED: Kinetic Sources", + "create.ponder.tag.kinetic_sources.description": "UNLOCALIZED: Components which generate Rotational Force", + "create.ponder.tag.movement_anchor": "UNLOCALIZED: Movement Anchors", + "create.ponder.tag.movement_anchor.description": "UNLOCALIZED: Components which allow the creation of moving contraptions, animating an attached structure in a variety of ways", + "create.ponder.tag.kinetic_relays": "UNLOCALIZED: Kinetic Blocks", + "create.ponder.tag.kinetic_relays.description": "UNLOCALIZED: Components which help relaying Rotational Force elsewhere", + "create.ponder.tag.contraption_actor": "UNLOCALIZED: Contraption Actors", + "create.ponder.tag.contraption_actor.description": "UNLOCALIZED: Components which expose special behaviour when attached to a moving contraption", + "create.ponder.tag.creative": "UNLOCALIZED: Creative Mode", + "create.ponder.tag.creative.description": "UNLOCALIZED: Components not usually available for Survival Mode", + "create.ponder.tag.logistics": "UNLOCALIZED: Item Transportation", + "create.ponder.tag.logistics.description": "UNLOCALIZED: Components which help moving items around", "create.ponder.adjustable_pulse_repeater.header": "UNLOCALIZED: Controlling signals using Adjustable Pulse Repeaters", "create.ponder.adjustable_pulse_repeater.text_1": "UNLOCALIZED: Adjustable Pulse Repeaters emit a short pulse at a delay", diff --git a/src/generated/resources/assets/create/lang/unfinished/ru_ru.json b/src/generated/resources/assets/create/lang/unfinished/ru_ru.json index 291b78f3e..ea4d7c7d7 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ru_ru.json +++ b/src/generated/resources/assets/create/lang/unfinished/ru_ru.json @@ -1503,41 +1503,41 @@ "create.ponder.categories": "UNLOCALIZED: Available Categories in Create", "create.ponder.index_description": "UNLOCALIZED: Click one of the icons to learn about its associated Items and Blocks", "create.ponder.index_title": "UNLOCALIZED: Ponder Index", - "create.ponder.shared.movement_anchors": "С помощью Суперклея или Шасси, более крупные структуры могут быть сдивинуты.", - "create.ponder.shared.rpm32": "32 об./мин.", - "create.ponder.shared.sneak_and": "Красться +", - "create.ponder.shared.storage_on_contraption": "Присоединённые к Штуковине инвентари будут подбирать вещи автоматически", + "create.ponder.shared.rpm16": "16 об./мин.", "create.ponder.shared.behaviour_modify_wrench": "Это поведение может быть изменено Ключом", + "create.ponder.shared.storage_on_contraption": "Присоединённые к Штуковине инвентари будут подбирать вещи автоматически", + "create.ponder.shared.sneak_and": "Красться +", "create.ponder.shared.rpm8": "8 об./мин.", "create.ponder.shared.ctrl_and": "Ctrl +", + "create.ponder.shared.rpm32": "32 об./мин.", "create.ponder.shared.rpm16_source": "Источник: 16 об./мин.", - "create.ponder.shared.rpm16": "16 об./мин.", - "create.ponder.tag.kinetic_sources": "Кинетические источники", - "create.ponder.tag.kinetic_sources.description": "Компоненты, генерирующие Силу Вращения", - "create.ponder.tag.contraption_actor": "Компоненты Штуковин", - "create.ponder.tag.contraption_actor.description": "Компоненты, проявляющие особое поведение когда прикреплены к двигающейся штуковине", - "create.ponder.tag.arm_targets": "Цели для Механической Руки", - "create.ponder.tag.arm_targets.description": "Компоненты, которые могут быть выбраны входами или выходами для Механической Руки", - "create.ponder.tag.logistics": "Транспортировка Предметов", - "create.ponder.tag.logistics.description": "Компоненты, помогающие перемещать предметы", - "create.ponder.tag.movement_anchor": "Опоры Движения", - "create.ponder.tag.movement_anchor.description": "Компоненты, позволяющие создавать двигающиеся штуковины, оживляя прикрепленную структуру разными способами", - "create.ponder.tag.creative": "Творческий режим", - "create.ponder.tag.creative.description": "Компоненты обычычно недоступные в Режиме Выживания", - "create.ponder.tag.kinetic_relays": "Кинетические блоки", - "create.ponder.tag.kinetic_relays.description": "Компоненты, помогающие передавать Силу Вращения куда-нибудь", - "create.ponder.tag.windmill_sails": "Паруса для Мельничных Подшипников", - "create.ponder.tag.windmill_sails.description": "Блоки, число которых увеличивает силу Мельницы. Каждый из этих блоков имеет одинаковую эффективность в деле.", - "create.ponder.tag.contraption_assembly": "Приспособления для присоединения блоков", - "create.ponder.tag.contraption_assembly.description": "Инструменты и Компоненты используемые для сборки структур передвигаемых как движущиеся Штуковины", - "create.ponder.tag.decoration": "Эстетика", - "create.ponder.tag.decoration.description": "Компоненты, чаще всего используемые для декоративных целей", - "create.ponder.tag.kinetic_appliances": "Кинетические Приборы", - "create.ponder.tag.kinetic_appliances.description": "Компоненты, использующие Силу Вращения", + "create.ponder.shared.movement_anchors": "С помощью Суперклея или Шасси, более крупные структуры могут быть сдивинуты.", "create.ponder.tag.redstone": "Логические Компоненты", "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.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.kinetic_appliances": "Кинетические Приборы", + "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_relays": "Кинетические блоки", + "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.logistics": "Транспортировка Предметов", + "create.ponder.tag.logistics.description": "Компоненты, помогающие перемещать предметы", "create.ponder.adjustable_pulse_repeater.header": "Управлении сигналами с помощью Регулируемого импульсного повторителя", "create.ponder.adjustable_pulse_repeater.text_1": "Регулируемые импульсные повторители испускают короткий импульс с задержкой", 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 c7d719c9c..c42a9481a 100644 --- a/src/generated/resources/assets/create/lang/unfinished/zh_cn.json +++ b/src/generated/resources/assets/create/lang/unfinished/zh_cn.json @@ -1503,41 +1503,41 @@ "create.ponder.categories": "UNLOCALIZED: Available Categories in Create", "create.ponder.index_description": "UNLOCALIZED: Click one of the icons to learn about its associated Items and Blocks", "create.ponder.index_title": "UNLOCALIZED: Ponder Index", - "create.ponder.shared.movement_anchors": "有了底盘和强力胶,移动起大型结构轻轻松松。", - "create.ponder.shared.rpm32": "32 RPM", - "create.ponder.shared.sneak_and": "潜行 +", - "create.ponder.shared.storage_on_contraption": "与装置相接的存储空间,会自动将装置遇到的掉落物拾取到空间内。", + "create.ponder.shared.rpm16": "16 RPM", "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 R", - "create.ponder.shared.rpm16": "16 RPM", - "create.ponder.tag.kinetic_sources": "动力源", - "create.ponder.tag.kinetic_sources.description": "能够发生动力的组件。", - "create.ponder.tag.contraption_actor": "装置执行组件", - "create.ponder.tag.contraption_actor.description": "能在移动的装置上执行特殊功能的组件", - "create.ponder.tag.arm_targets": "机械臂的工作目标", - "create.ponder.tag.arm_targets.description": "该组件可做为机械臂的输入或者输出点。", - "create.ponder.tag.logistics": "物品运输", - "create.ponder.tag.logistics.description": "该组件可以协助物品运输", - "create.ponder.tag.movement_anchor": "运动源泉", - "create.ponder.tag.movement_anchor.description": "有了它,运动装置才得以可能,它可以以数种方式使相接的结构运动起来。", - "create.ponder.tag.creative": "创造模式", - "create.ponder.tag.creative.description": "总有些东西是生存模式得不到的。", - "create.ponder.tag.kinetic_relays": "动力方块", - "create.ponder.tag.kinetic_relays.description": "用于传递旋转力的组件。", - "create.ponder.tag.windmill_sails": "风车轴承的帆", - "create.ponder.tag.windmill_sails.description": "在进行风车组装时会被算入风车旋转力的方块,这些方块的效能都是一样的。", - "create.ponder.tag.contraption_assembly": "方块连接物件", - "create.ponder.tag.contraption_assembly.description": "将各个组件连接以便同时运动的物件", - "create.ponder.tag.decoration": "装饰", - "create.ponder.tag.decoration.description": "装饰是这些组件的常见用法。", - "create.ponder.tag.kinetic_appliances": "动力设备", - "create.ponder.tag.kinetic_appliances.description": "这些组件可以利用旋转力进行工作。", + "create.ponder.shared.movement_anchors": "有了底盘和强力胶,移动起大型结构轻轻松松。", "create.ponder.tag.redstone": "逻辑组件", "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.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.kinetic_appliances": "动力设备", + "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_relays": "动力方块", + "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.logistics": "物品运输", + "create.ponder.tag.logistics.description": "该组件可以协助物品运输", "create.ponder.adjustable_pulse_repeater.header": "使用可调节脉冲中继器控制信号发送", "create.ponder.adjustable_pulse_repeater.text_1": "可调节脉冲中继器在一段延时之后会发出一道短时脉冲", diff --git a/src/generated/resources/assets/create/lang/unfinished/zh_tw.json b/src/generated/resources/assets/create/lang/unfinished/zh_tw.json index 84fd62ea1..d23e03509 100644 --- a/src/generated/resources/assets/create/lang/unfinished/zh_tw.json +++ b/src/generated/resources/assets/create/lang/unfinished/zh_tw.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 287", + "_": "Missing Localizations: 14", "_": "->------------------------] Game Elements [------------------------<-", @@ -28,12 +28,12 @@ "block.create.belt": "輸送帶", "block.create.birch_window": "白樺木窗戶", "block.create.birch_window_pane": "白樺木窗戶片", - "block.create.black_nixie_tube": "UNLOCALIZED: Black Nixie Tube", + "block.create.black_nixie_tube": "黑色真空管", "block.create.black_sail": "黑色風帆", "block.create.black_seat": "黑色坐墊", "block.create.black_valve_handle": "黑色閥門開關", "block.create.blaze_burner": "烈焰使者動力爐", - "block.create.blue_nixie_tube": "UNLOCALIZED: Blue Nixie Tube", + "block.create.blue_nixie_tube": "藍色真空管", "block.create.blue_sail": "藍色風帆", "block.create.blue_seat": "藍色坐墊", "block.create.blue_valve_handle": "藍色閥門開關", @@ -43,7 +43,7 @@ "block.create.brass_encased_shaft": "黃銅傳動軸箱", "block.create.brass_funnel": "黃銅漏斗", "block.create.brass_tunnel": "黃銅物品隧道", - "block.create.brown_nixie_tube": "UNLOCALIZED: Brown Nixie Tube", + "block.create.brown_nixie_tube": "棕色真空管", "block.create.brown_sail": "棕色風帆", "block.create.brown_seat": "棕色坐墊", "block.create.brown_valve_handle": "棕色閥門開關", @@ -61,7 +61,7 @@ "block.create.cogwheel": "齒輪", "block.create.content_observer": "物品偵測器", "block.create.controller_rail": "控制鐵軌", - "block.create.copper_backtank": "UNLOCALIZED: Copper Backtank", + "block.create.copper_backtank": "銅製後背包", "block.create.copper_block": "銅磚", "block.create.copper_casing": "銅機殼", "block.create.copper_ore": "銅礦石", @@ -76,7 +76,7 @@ "block.create.crushing_wheel": "粉碎輪", "block.create.crushing_wheel_controller": "粉碎輪控制器", "block.create.cuckoo_clock": "布穀鳥鐘", - "block.create.cyan_nixie_tube": "UNLOCALIZED: Cyan Nixie Tube", + "block.create.cyan_nixie_tube": "青色真空管", "block.create.cyan_sail": "藍綠色風帆", "block.create.cyan_seat": "藍綠色坐墊", "block.create.cyan_valve_handle": "藍綠色閥門開關", @@ -183,16 +183,16 @@ "block.create.granite_cobblestone_stairs": "碎花崗岩樓梯", "block.create.granite_cobblestone_wall": "碎花崗岩牆", "block.create.granite_pillar": "豎紋花崗岩", - "block.create.gray_nixie_tube": "UNLOCALIZED: Gray Nixie Tube", + "block.create.gray_nixie_tube": "灰色真空管", "block.create.gray_sail": "灰色風帆", "block.create.gray_seat": "灰色坐墊", "block.create.gray_valve_handle": "灰色閥門開關", - "block.create.green_nixie_tube": "UNLOCALIZED: Green Nixie Tube", + "block.create.green_nixie_tube": "綠色真空管", "block.create.green_sail": "綠色風帆", "block.create.green_seat": "綠色坐墊", "block.create.green_valve_handle": "綠色閥門開關", "block.create.hand_crank": "手搖把手", - "block.create.haunted_bell": "UNLOCALIZED: Haunted Bell", + "block.create.haunted_bell": "靈魂鐘", "block.create.honey": "蜂蜜", "block.create.horizontal_framed_glass": "豎直邊框玻璃", "block.create.horizontal_framed_glass_pane": "豎直邊框玻璃片", @@ -210,16 +210,16 @@ "block.create.layered_limestone": "疊層石灰岩", "block.create.layered_scoria": "疊層火成岩", "block.create.layered_weathered_limestone": "疊層風化石灰岩", - "block.create.lectern_controller": "UNLOCALIZED: Lectern Controller", - "block.create.light_blue_nixie_tube": "UNLOCALIZED: Light Blue Nixie Tube", + "block.create.lectern_controller": "講台遙控器", + "block.create.light_blue_nixie_tube": "亮藍色真空管", "block.create.light_blue_sail": "淡藍色風帆", "block.create.light_blue_seat": "淡藍色坐墊", "block.create.light_blue_valve_handle": "淡藍色閥門開關", - "block.create.light_gray_nixie_tube": "UNLOCALIZED: Light Gray Nixie Tube", + "block.create.light_gray_nixie_tube": "亮灰色真空管", "block.create.light_gray_sail": "淡灰色風帆", "block.create.light_gray_seat": "淡灰色坐墊", "block.create.light_gray_valve_handle": "淡灰色閥門開關", - "block.create.lime_nixie_tube": "UNLOCALIZED: Lime Nixie Tube", + "block.create.lime_nixie_tube": "淺綠色真空管", "block.create.lime_sail": "黃綠色風帆", "block.create.lime_seat": "黃綠色坐墊", "block.create.lime_valve_handle": "黃綠色閥門開關", @@ -236,7 +236,7 @@ "block.create.limestone_pillar": "豎紋石灰岩", "block.create.linear_chassis": "機殼底盤", "block.create.lit_blaze_burner": "烈焰使者動力爐(已啟動)", - "block.create.magenta_nixie_tube": "UNLOCALIZED: Magenta Nixie Tube", + "block.create.magenta_nixie_tube": "洋紅色真空管", "block.create.magenta_sail": "洋紅色風帆", "block.create.magenta_seat": "洋紅色坐墊", "block.create.magenta_valve_handle": "洋紅色閥門開關", @@ -320,8 +320,8 @@ "block.create.paved_weathered_limestone_slab": "風化石灰岩鋪路石半磚", "block.create.paved_weathered_limestone_stairs": "風化石灰岩鋪路石樓梯", "block.create.paved_weathered_limestone_wall": "風化石灰岩鋪路石牆", - "block.create.peculiar_bell": "UNLOCALIZED: Peculiar Bell", - "block.create.pink_nixie_tube": "UNLOCALIZED: Pink Nixie Tube", + "block.create.peculiar_bell": "黃銅鐘", + "block.create.pink_nixie_tube": "粉紅色真空管", "block.create.pink_sail": "粉紅色風帆", "block.create.pink_seat": "粉紅色坐墊", "block.create.pink_valve_handle": "粉紅色閥門開關", @@ -356,12 +356,12 @@ "block.create.powered_toggle_latch": "T型正反器", "block.create.pulley_magnet": "滑輪磁鐵", "block.create.pulse_repeater": "脈衝中繼器", - "block.create.purple_nixie_tube": "UNLOCALIZED: Purple Nixie Tube", + "block.create.purple_nixie_tube": "紫色真空管", "block.create.purple_sail": "紫色風帆", "block.create.purple_seat": "紫色坐墊", "block.create.purple_valve_handle": "紫色閥門開關", "block.create.radial_chassis": "旋轉底盤", - "block.create.red_nixie_tube": "UNLOCALIZED: Red Nixie Tube", + "block.create.red_nixie_tube": "紅色真空管", "block.create.red_sail": "紅色風帆", "block.create.red_seat": "紅色坐墊", "block.create.red_valve_handle": "紅色閥門開關", @@ -418,26 +418,26 @@ "block.create.weathered_limestone_cobblestone_wall": "碎風化石灰岩牆", "block.create.weathered_limestone_pillar": "豎紋風化石灰岩", "block.create.weighted_ejector": "物品彈射器", - "block.create.white_nixie_tube": "UNLOCALIZED: White Nixie Tube", + "block.create.white_nixie_tube": "白色真空管", "block.create.white_sail": "白色風帆", "block.create.white_seat": "白色坐墊", "block.create.white_valve_handle": "白色閥門開關", "block.create.windmill_bearing": "風車軸承", "block.create.wooden_bracket": "木製支架", - "block.create.yellow_nixie_tube": "UNLOCALIZED: Yellow Nixie Tube", + "block.create.yellow_nixie_tube": "黃色真空管", "block.create.yellow_sail": "黃色風帆", "block.create.yellow_seat": "黃色坐墊", "block.create.yellow_valve_handle": "黃色閥門開關", "block.create.zinc_block": "鋅磚", "block.create.zinc_ore": "鋅礦石", - "enchantment.create.capacity": "UNLOCALIZED: Capacity", - "enchantment.create.potato_recovery": "UNLOCALIZED: Potato Recovery", + "enchantment.create.capacity": "容量", + "enchantment.create.potato_recovery": "馬鈴薯恢復", "entity.create.contraption": "結構", - "entity.create.crafting_blueprint": "UNLOCALIZED: Crafting Blueprint", + "entity.create.crafting_blueprint": "合成藍圖", "entity.create.gantry_contraption": "門式結構", - "entity.create.potato_projectile": "UNLOCALIZED: Potato Projectile", + "entity.create.potato_projectile": "馬鈴薯彈藥", "entity.create.seat": "坐墊", "entity.create.stationary_contraption": "固定結構", "entity.create.super_glue": "強力膠", @@ -462,12 +462,12 @@ "item.create.chocolate_glazed_berries": "巧克力甜莓", "item.create.chromatic_compound": "異彩化合物", "item.create.cinder_flour": "地獄麵粉", - "item.create.copper_backtank": "UNLOCALIZED: Copper Backtank", + "item.create.copper_backtank": "銅製後背包", "item.create.copper_ingot": "銅錠", "item.create.copper_nugget": "銅粒", "item.create.copper_sheet": "銅板", "item.create.crafter_slot_cover": "合成器蓋板", - "item.create.crafting_blueprint": "UNLOCALIZED: Crafting Blueprint", + "item.create.crafting_blueprint": "合成藍圖", "item.create.crushed_aluminum_ore": "碎狀鋁礦石", "item.create.crushed_brass": "碎狀黃銅", "item.create.crushed_copper_ore": "碎狀銅礦石", @@ -482,8 +482,8 @@ "item.create.crushed_tin_ore": "碎狀錫礦石", "item.create.crushed_uranium_ore": "碎狀鈾礦石", "item.create.crushed_zinc_ore": "碎狀鋅礦石", - "item.create.diving_boots": "UNLOCALIZED: Diving Boots", - "item.create.diving_helmet": "UNLOCALIZED: Diving Helmet", + "item.create.diving_boots": "潛水鞋", + "item.create.diving_helmet": "潛水頭盔", "item.create.dough": "麵團", "item.create.electron_tube": "真空管", "item.create.empty_blaze_burner": "空的烈焰使者動力爐", @@ -496,17 +496,17 @@ "item.create.handheld_worldshaper": "地形雕塑器", "item.create.honey_bucket": "蜂蜜桶", "item.create.honeyed_apple": "蜂蜜蘋果", - "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": "未完成的小齒輪", + "item.create.incomplete_large_cogwheel": "未完成的大齒輪", + "item.create.incomplete_precision_mechanism": "未完成的精確控制器", "item.create.iron_sheet": "鐵板", - "item.create.linked_controller": "UNLOCALIZED: Linked Controller", + "item.create.linked_controller": "遙控器", "item.create.minecart_contraption": "裝修過的礦車", "item.create.minecart_coupling": "礦車連結器", "item.create.polished_rose_quartz": "磨製玫瑰石英", - "item.create.potato_cannon": "UNLOCALIZED: Potato Cannon", + "item.create.potato_cannon": "馬鈴薯大砲", "item.create.powdered_obsidian": "黑曜石粉末", - "item.create.precision_mechanism": "UNLOCALIZED: Precision Mechanism", + "item.create.precision_mechanism": " 精確控制器", "item.create.propeller": "扇葉", "item.create.red_sand_paper": "紅砂紙", "item.create.refined_radiance": "光輝石", @@ -651,8 +651,8 @@ "advancement.create.flywheel.desc": "將引擎成功連接到飛輪。", "advancement.create.overstress_flywheel": "壓力過大", "advancement.create.overstress_flywheel.desc": "超載熔爐引擎。", - "advancement.create.precision_mechanism": "UNLOCALIZED: Complex Curiosities", - "advancement.create.precision_mechanism.desc": "UNLOCALIZED: Assemble a Precision Mechanism.", + "advancement.create.precision_mechanism": "複雜的好奇心", + "advancement.create.precision_mechanism.desc": "組裝一個精確控制器", "advancement.create.mechanical_arm": "忙碌的手!", "advancement.create.mechanical_arm.desc": "製作機械手臂,選擇輸入和輸出,放置並給它動能; 然後看著它完成所有你交代的工作。", "advancement.create.musical_arm": "沒人能在我的BGM裡打敗我!", @@ -679,8 +679,8 @@ "advancement.create.wand_of_symmetry.desc": "製作一個對稱杖", "advancement.create.extendo_grip": "piu piu piu!", "advancement.create.extendo_grip.desc": "拿到一個伸縮機械手", - "advancement.create.potato_cannon": "UNLOCALIZED: Fwoomp!", - "advancement.create.potato_cannon.desc": "UNLOCALIZED: Defeat an enemy with your Potato Cannon.", + "advancement.create.potato_cannon": "噗~碰", + "advancement.create.potato_cannon.desc": "用馬鈴薯大砲擊殺一隻怪物", "advancement.create.dual_extendo_grip": "piu——piu——piu——", "advancement.create.dual_extendo_grip.desc": "雙持伸縮機械手進一步加長觸碰距離", "advancement.create.eob": "Beta版結束", @@ -693,30 +693,30 @@ "itemGroup.create.palettes": "動力機械建築與裝飾方塊", "death.attack.create.crush": "%1$s被壓扁了", - "death.attack.create.crush.player": "UNLOCALIZED: %1$s was thrown into Crushing Wheels by %2$s", + "death.attack.create.crush.player": "%1$s 被 %2$s 打包丟進粉碎輪", "death.attack.create.fan_fire": "%1$s想接受熱風的洗禮", - "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 被 %2$s 推入火坑", "death.attack.create.fan_lava": "%1$s想接受熱風的洗禮但走火入魔", - "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 被 %2$s 推進岩漿", "death.attack.create.mechanical_drill": "%1$s被鑽頭鑽爆腦袋", - "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 被 %2$s 當成礦物放在鑽頭前面而死", "death.attack.create.mechanical_saw": "%1$s被鋸切成了兩半", - "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 被 %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": "UNLOCALIZED: %1$s was blown up by tampered cuckoo clock", + "death.attack.create.cuckoo_clock_explosion.player": "%1$s 被布穀鳥鐘炸得粉身碎骨", "create.block.deployer.damage_source_name": "機械手", "create.block.cart_assembler.invalid": "將您的礦車裝修站放在鐵軌上", - "create.menu.return": "UNLOCALIZED: Return to Menu", - "create.menu.configure": "UNLOCALIZED: Configure...", - "create.menu.ponder_index": "UNLOCALIZED: Ponder Index", + "create.menu.return": "回到選單", + "create.menu.configure": "設定", + "create.menu.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.project_page": "專案頁面", + "create.menu.report_bugs": "回報問題", + "create.menu.support": "支持我們", "create.recipe.crushing": "粉碎", "create.recipe.milling": "研磨", @@ -742,16 +742,16 @@ "create.recipe.mystery_conversion": "神秘轉化", "create.recipe.spout_filling": "注液", "create.recipe.draining": "分液", - "create.recipe.sequenced_assembly": "UNLOCALIZED: Sequenced Assembly", - "create.recipe.assembly.next": "UNLOCALIZED: Next: %1$s", - "create.recipe.assembly.step": "UNLOCALIZED: Step %1$s:", - "create.recipe.assembly.progress": "UNLOCALIZED: Progress: %1$s/%2$s", + "create.recipe.sequenced_assembly": "排序中的步驟", + "create.recipe.assembly.next": "下一步:%1$s", + "create.recipe.assembly.step": "步驟 %1$s:", + "create.recipe.assembly.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.assembly.spout_filling_fluid": "注入:%1$s", + "create.recipe.assembly.deploying_item": "使用:%1$s", + "create.recipe.assembly.cutting": "用鋸子切", + "create.recipe.assembly.repeat": "重複 %1$s 次", + "create.recipe.assembly.junk": "有機率得到垃圾", "create.recipe.processing.chance": "%1$s%%概率", "create.recipe.heat_requirement.none": "不需要加熱", "create.recipe.heat_requirement.heated": "普通加熱", @@ -805,15 +805,15 @@ "create.orientation.alongX": "以x軸對齊", "create.gui.terrainzapper.title": "地形雕塑器", - "create.gui.terrainzapper.searchDiagonal": "UNLOCALIZED: Follow Diagonals", - "create.gui.terrainzapper.searchFuzzy": "UNLOCALIZED: Ignore Material Borders", + "create.gui.terrainzapper.searchDiagonal": "跟隨對角線", + "create.gui.terrainzapper.searchFuzzy": "忽略材質邊界", "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.pattern.solid": "填滿", + "create.gui.terrainzapper.pattern.checkered": "棋盤狀", + "create.gui.terrainzapper.pattern.inversecheckered": "反轉棋盤狀", + "create.gui.terrainzapper.pattern.chance25": "隨機填滿 25% 的面積", + "create.gui.terrainzapper.pattern.chance50": "隨機填滿 50% 的面積", + "create.gui.terrainzapper.pattern.chance75": "隨機填滿 75% 的面積", "create.gui.terrainzapper.placement": "放置模式", "create.gui.terrainzapper.placement.merged": "結合", "create.gui.terrainzapper.placement.attached": "依附", @@ -822,8 +822,8 @@ "create.gui.terrainzapper.brush.cuboid": "矩形體", "create.gui.terrainzapper.brush.sphere": "球體", "create.gui.terrainzapper.brush.cylinder": "圓柱體", - "create.gui.terrainzapper.brush.surface": "UNLOCALIZED: Surface", - "create.gui.terrainzapper.brush.cluster": "UNLOCALIZED: Cluster", + "create.gui.terrainzapper.brush.surface": "表面", + "create.gui.terrainzapper.brush.cluster": "群組", "create.gui.terrainzapper.tool": "填充類型", "create.gui.terrainzapper.tool.fill": "填充", "create.gui.terrainzapper.tool.place": "覆寫", @@ -833,8 +833,8 @@ "create.gui.terrainzapper.tool.flatten": "平整", "create.terrainzapper.shiftRightClickToSet": "Shift+滑鼠右鍵 以設定雕塑類型", - "create.terrainzapper.usingBlock": "UNLOCALIZED: Using: %1$s", - "create.terrainzapper.leftClickToSet": "UNLOCALIZED: Left-Click a Block to set Material", + "create.terrainzapper.usingBlock": "使用:%1$s", + "create.terrainzapper.leftClickToSet": "左鍵點擊方塊可以設定材質", "create.minecart_coupling.two_couplings_max": "礦車無法被連接兩個以上的礦車連結器", "create.minecart_coupling.unloaded": "有一部份礦車存在於未讀取區塊中", @@ -1065,11 +1065,11 @@ "create.item_attributes.in_item_group.inverted": "不屬於%1$s", "create.item_attributes.added_by": "由%1$s添加", "create.item_attributes.added_by.inverted": "不是由%1$s添加", - "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": "界伏盒是 %1$s", + "create.item_attributes.shulker_level.inverted": "界伏盒不是 %1$s", + "create.item_attributes.shulker_level.full": "滿的", + "create.item_attributes.shulker_level.empty": "空的", + "create.item_attributes.shulker_level.partial": "有裝東西但沒滿", "create.item_attributes.has_enchant": "有附魔效果%1$s", "create.item_attributes.has_enchant.inverted": "沒有附魔效果%1$s", "create.item_attributes.color": "已被染色成 %1$s", @@ -1165,27 +1165,27 @@ "create.tooltip.chute.fans_pull_up": "鼓風機從下方進行吸引", "create.tooltip.chute.fans_pull_down": "鼓風機從上方進行吸引", "create.tooltip.chute.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.brass_tunnel.contains": "正在處理", + "create.tooltip.brass_tunnel.contains_entry": "> %1$s x%2$s", + "create.tooltip.brass_tunnel.retrieve": "右鍵取回", - "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": "綁定模式", + "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", - "create.crafting_blueprint.crafting_slot": "UNLOCALIZED: Ingredient Slot", + "create.crafting_blueprint.crafting_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.display_slot": "顯示格", + "create.crafting_blueprint.inferred": "根據配方推論", + "create.crafting_blueprint.manually_assigned": "手動設定", + "create.crafting_blueprint.secondary_display_slot": "次要顯示格", + "create.crafting_blueprint.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 攻擊傷害", + "create.potato_cannon.ammo.reload_ticks": "%1$s 攻擊速度", + "create.potato_cannon.ammo.knockback": "%1$s 擊退", "create.hint.hose_pulley.title": "無限供應", "create.hint.hose_pulley": "目標液體為無限供應", @@ -1214,44 +1214,44 @@ "create.command.killTPSCommand.argument.tickTime": "tickTime", "create.contraption.minecart_contraption_too_big": "這個礦車結構太大了而無法撿取", - "create.contraption.minecart_contraption_illegal_pickup": "UNLOCALIZED: A mystical force is binding this Cart Contraption to the world", + "create.contraption.minecart_contraption_illegal_pickup": "一股神秘的力量將這個礦車結構與世界綁在一起", "_": "->------------------------] 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.contraption_disassemble": "結構停止", + "create.subtitle.peculiar_bell_use": "黃銅鐘聲", + "create.subtitle.mixing": "攪拌機噪音", "create.subtitle.mechanical_press_activation_belt": "液壓機工作", - "create.subtitle.fwoomp": "UNLOCALIZED: Potato Launcher fwoomps", - "create.subtitle.worldshaper_place": "UNLOCALIZED: Worldshaper zaps", - "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.fwoomp": "馬鈴薯大砲發射", + "create.subtitle.worldshaper_place": "地形塑造器發射聲", + "create.subtitle.crushing_1": "粉碎機咀嚼聲", + "create.subtitle.depot_slide": "物品滑動聲", + "create.subtitle.saw_activate_stone": "機械鋸子聲", "create.subtitle.blaze_munch": "烈焰使者開心地吃著", "create.subtitle.funnel_flap": "UNLOCALIZED: Funnel Flaps", "create.subtitle.schematicannon_finish": "藍圖大炮完成任務", - "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.cogs": "UNLOCALIZED: Cogwheels rumble", + "create.subtitle.haunted_bell_use": "靈魂鐘敲響", + "create.subtitle.scroll_value": "滾動輸入聲", + "create.subtitle.crafter_craft": "機械合成器合成聲", + "create.subtitle.controller_put": "遙控器放置聲", + "create.subtitle.cranking": "手搖把手轉動聲", + "create.subtitle.wrench_remove": "零件移除聲", + "create.subtitle.cogs": "齒輪隆隆聲", "create.subtitle.slime_added": "黏液擠壓", "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.deployer_polish": "UNLOCALIZED: Deployer applies polish", + "create.subtitle.potato_hit": "食物撞擊聲", + "create.subtitle.saw_activate_wood": "機械鋸子運作聲", + "create.subtitle.haunted_bell_convert": "靈魂鐘轉化聲", + "create.subtitle.deployer_polish": "機械手拋光聲", "create.subtitle.deny": "UNLOCALIZED: Declining boop", - "create.subtitle.controller_click": "UNLOCALIZED: Controller clicks", + "create.subtitle.controller_click": "遙控器按鍵聲", "create.subtitle.schematicannon_launch_block": "藍圖大炮發射", - "create.subtitle.copper_armor_equip": "UNLOCALIZED: Diving equipment clinks", - "create.subtitle.controller_take": "UNLOCALIZED: Lectern empties", + "create.subtitle.copper_armor_equip": "潛水裝裝備聲", + "create.subtitle.controller_take": "拿下遙控器", "create.subtitle.mechanical_press_activation": "液壓機工作", - "create.subtitle.contraption_assemble": "UNLOCALIZED: Contraption moves", - "create.subtitle.crafter_click": "UNLOCALIZED: Crafter clicks", + "create.subtitle.contraption_assemble": "結構移動", + "create.subtitle.crafter_click": "機械合成器工作聲", "create.subtitle.depot_plop": "UNLOCALIZED: Item lands", "create.subtitle.confirm": "UNLOCALIZED: Affirmative ding", @@ -1310,15 +1310,15 @@ "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": "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.condition2": "當裝備銅製後背包時", + "item.create.extendo_grip.tooltip.behaviour2": "_不會消耗耐久_ 但是會抽取銅製後背包裡的_壓縮空氣_", - "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": "馬鈴薯大砲", + "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": "將物品更精確地進行_篩選分類_,可以同時_篩選_多個物品或者將已標記的_過濾器_放在另一個_過濾器_里_嵌套_使用。", @@ -1427,117 +1427,117 @@ "item.create.refined_radiance.tooltip": "光輝石", "item.create.refined_radiance.tooltip.summary": "一種用_光輝_鍛造的化合物材料。", - "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.condition1": "工作進度", + "item.create.refined_radiance.tooltip.behaviour1": "在未來的更新中會更新更多用途", "item.create.shadow_steel.tooltip": "暗影鋼", "item.create.shadow_steel.tooltip.summary": "一種用_虛空_鍛造的化合物材料。", - "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.condition1": "工作進度", + "item.create.shadow_steel.tooltip.behaviour1": "在未來的更新中會更新更多用途", - "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": "遙控器", + "item.create.linked_controller.tooltip.summary": "提供_六個_連接到相對應_按鍵_的_無線紅石訊號機_ _手持的控制_", + "item.create.linked_controller.tooltip.condition1": "點擊右鍵時", + "item.create.linked_controller.tooltip.behaviour1": "_切換_遙控器,當遙控器啟動時你會失去_移動控制_", + "item.create.linked_controller.tooltip.condition2": "當右鍵時", + "item.create.linked_controller.tooltip.behaviour2": "打開_設定面板_", + "item.create.linked_controller.tooltip.condition3": "當對無線紅石訊號機點右鍵時", + "item.create.linked_controller.tooltip.behaviour3": "開啟_綁定模式_。按_六個控制鍵_的其中一個來綁定_頻率_到遙控器上", + "item.create.linked_controller.tooltip.condition4": "當對講台按右鍵時", + "item.create.linked_controller.tooltip.behaviour4": "把遙控器放到講台上,可以更方便的控制它。(蹲下右鍵取回)", - "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": "潛水頭盔", + "item.create.diving_helmet.tooltip.summary": "和_銅製後背包_一起裝備時可以延長在_水下呼吸_的時間", + "item.create.diving_helmet.tooltip.condition1": "當裝備時", + "item.create.diving_helmet.tooltip.behaviour1": "提昇_水下呼吸效果_,會緩慢的抽取銅製後背包中的_壓縮空氣_", - "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": "銅製後背包", + "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.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": "潛水鞋", + "item.create.diving_boots.tooltip.summary": "一雙_沈重的鞋子_,提供更好的水下移動", + "item.create.diving_boots.tooltip.condition1": "當裝備時", + "item.create.diving_boots.tooltip.behaviour1": "你可以在水下走得更快而且可以跳躍,但是不能游泳。穿著者不會被輸送帶移動。", - "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": "合成藍圖", + "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": "將兩個礦車耦合在一起,在移動時將它們保持_恒定的距離_。", - "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": "黃銅鐘", + "block.create.peculiar_bell.tooltip.summary": "一個裝飾性的_鐘_,放在_靈魂火_正上方會有意想不到的副作用", - "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": "靈魂鐘", + "block.create.haunted_bell.tooltip.summary": "一個受到地獄亡魂_詛咒的鐘_", + "block.create.haunted_bell.tooltip.condition1": "當拿者或是被敲響時", + "block.create.haunted_bell.tooltip.behaviour1": "標示附近_不夠亮_、會生成_敵對生物_的地方", "_": "->------------------------] Ponder Content [------------------------<-", - "create.ponder.hold_to_ponder": "按住 [%1$s] 來思考此物品", + "create.ponder.hold_to_ponder": "按住 [%1$s] 來查看此物品的教學", "create.ponder.subject": "本場景的主題", - "create.ponder.pondering": "思考有關於...", + "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.replay": "重放", + "create.ponder.replay": "重播", "create.ponder.think_back": "返回", - "create.ponder.slow_text": "降低文字顯示速度", - "create.ponder.exit": "UNLOCALIZED: Exit", - "create.ponder.welcome": "UNLOCALIZED: Welcome to Ponder", - "create.ponder.categories": "UNLOCALIZED: Available Categories in Create", - "create.ponder.index_description": "UNLOCALIZED: Click one of the icons to learn about its associated Items and Blocks", - "create.ponder.index_title": "UNLOCALIZED: Ponder Index", - "create.ponder.shared.movement_anchors": "有了機殼底盤和強力膠就可以移動大型結構", - "create.ponder.shared.rpm32": "32 RPM", - "create.ponder.shared.sneak_and": "潛行 +", - "create.ponder.shared.storage_on_contraption": "與結構相連的儲物空間會自動撿取物品", + "create.ponder.slow_text": "放慢文字顯示速度", + "create.ponder.exit": "離開", + "create.ponder.welcome": "歡迎來到教學", + "create.ponder.categories": "Create 中的分類", + "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.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.rpm16": "16 RPM", - "create.ponder.tag.kinetic_sources": "動能產生裝置", - "create.ponder.tag.kinetic_sources.description": "該裝置能夠產生動能", - "create.ponder.tag.contraption_actor": "Contraption Actors", - "create.ponder.tag.contraption_actor.description": "Components which expose special behaviour when attached to a moving contraption", - "create.ponder.tag.arm_targets": "機械手臂的目標物", - "create.ponder.tag.arm_targets.description": "該裝置可作為機械手臂的工作目標", - "create.ponder.tag.logistics": "傳輸物品", - "create.ponder.tag.logistics.description": "該裝置用於物品的傳輸", - "create.ponder.tag.movement_anchor": "Movement Anchors", - "create.ponder.tag.movement_anchor.description": "Components which allow the creation of moving contraptions, animating an attached structure in a variety of ways", - "create.ponder.tag.creative": "創造模式", - "create.ponder.tag.creative.description": "該裝置無法在生存模式中獲得", - "create.ponder.tag.kinetic_relays": "動能傳遞方塊", - "create.ponder.tag.kinetic_relays.description": "該裝置用於傳遞動能", - "create.ponder.tag.windmill_sails": "風車軸承的帆", - "create.ponder.tag.windmill_sails.description": "建造風車時用於產生動能的帆,每個帆對風車產生的效果都是同等的", - "create.ponder.tag.contraption_assembly": "方塊連接物件", - "create.ponder.tag.contraption_assembly.description": "此物件用於連接各個零件以便組成一個成品", - "create.ponder.tag.decoration": "裝飾", - "create.ponder.tag.decoration.description": "這些零件通常用於裝飾", - "create.ponder.tag.kinetic_appliances": "動能利用裝置", - "create.ponder.tag.kinetic_appliances.description": "這些裝置利用動能運作", + "create.ponder.shared.movement_anchors": "有了機殼底盤和強力膠就可以移動大型結構", "create.ponder.tag.redstone": "邏輯控制裝置", "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.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.kinetic_appliances": "動能利用裝置", + "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_relays": "動能傳遞方塊", + "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.logistics": "傳輸物品", + "create.ponder.tag.logistics.description": "該裝置用於物品的傳輸", "create.ponder.adjustable_pulse_repeater.header": "使用可調式脈衝中繼器來控制訊號", "create.ponder.adjustable_pulse_repeater.text_1": "可調式脈衝中繼器每次運作時會產生一個短脈衝", @@ -1650,7 +1650,7 @@ "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_3": "UNLOCALIZED: If the Assembler is set to Lock Rotation, the contraptions' orientation will never change", + "create.ponder.cart_assembler_modes.text_3": "如果在裝修站鎖定其方向,則結構方向不會隨礦車方向改變", "create.ponder.cart_assembler_rails.header": "其他種類的礦車和鐵軌", "create.ponder.cart_assembler_rails.text_1": "放在普通鐵軌上的礦車裝修站不會影響礦車的動作", @@ -1704,11 +1704,11 @@ "create.ponder.cogwheel.text_1": "齒輪會將動力傳遞至臨近的齒輪", "create.ponder.cogwheel.text_2": "以此方式連接的齒輪,旋轉方向相反", - "create.ponder.creative_fluid_tank.header": "UNLOCALIZED: Creative Fluid Tanks", - "create.ponder.creative_fluid_tank.text_1": "UNLOCALIZED: Creative Fluid Tanks can be used to provide a bottomless supply of fluid", - "create.ponder.creative_fluid_tank.text_2": "UNLOCALIZED: Right-Click with a fluid containing item to configure it", - "create.ponder.creative_fluid_tank.text_3": "UNLOCALIZED: Pipe Networks can now endlessly draw the assigned fluid from the tank", - "create.ponder.creative_fluid_tank.text_4": "UNLOCALIZED: Any Fluids pushed back into a Creative Fluid Tank will be voided", + "create.ponder.creative_fluid_tank.header": "創造液體除存罐", + "create.ponder.creative_fluid_tank.text_1": "創造液體除存罐可以提供無限的液體", + "create.ponder.creative_fluid_tank.text_2": "拿著一個液體物品點擊可以設定它", + "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": "創造馬達不僅能夠手動設定輸出動能,而且體積相當小巧", @@ -1746,11 +1746,11 @@ "create.ponder.deployer_modes.text_1": "在設設情況下,機械手模仿玩家的右鍵", "create.ponder.deployer_modes.text_2": "使用扳手可以將模式調整為模仿玩家的左鍵", - "create.ponder.deployer_processing.header": "UNLOCALIZED: Processing Items using Deployers", - "create.ponder.deployer_processing.text_1": "UNLOCALIZED: With a fitting held item, Deployers can process items provided beneath them", - "create.ponder.deployer_processing.text_2": "UNLOCALIZED: The Input items can be dropped or placed on a Depot under the Deployer", - "create.ponder.deployer_processing.text_3": "UNLOCALIZED: When items are provided on a belt...", - "create.ponder.deployer_processing.text_4": "UNLOCALIZED: The Deployer will hold and process them automatically", + "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_redstone.header": "使用紅石控制機械手", "create.ponder.deployer_redstone.text_1": "當機械手收到紅時訊號時會停止工作", @@ -1768,7 +1768,7 @@ "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": "UNLOCALIZED: The flame can be transformed using a soul-infused item", + "create.ponder.empty_blaze_burner.text_5": "可以放入靈魂物品將火焰轉化成靈魂火", "create.ponder.empty_blaze_burner.text_6": "但是,這樣的熱源不足以給機器提加工供足夠的熱量", "create.ponder.encased_fluid_pipe.header": "UNLOCALIZED: Encasing Fluid Pipes", @@ -1794,34 +1794,34 @@ "create.ponder.fan_source.text_1": "如鼓風機的扇葉向下朝著熱源放置,鼓風機可以藉此產生動能", "create.ponder.fan_source.text_2": "當鼓風機接受紅石訊號後,它便會向外供給動能", - "create.ponder.fluid_pipe_flow.header": "UNLOCALIZED: Moving Fluids using Copper Pipes", - "create.ponder.fluid_pipe_flow.text_1": "UNLOCALIZED: Fluid Pipes can connect two or more fluid sources and targets", - "create.ponder.fluid_pipe_flow.text_2": "UNLOCALIZED: Using a wrench, a straight pipe segment can be given a window", - "create.ponder.fluid_pipe_flow.text_3": "UNLOCALIZED: Windowed pipes will not connect to any other adjacent pipe segments", - "create.ponder.fluid_pipe_flow.text_4": "UNLOCALIZED: Powered by Mechanical Pumps, the Pipes can transport Fluids", - "create.ponder.fluid_pipe_flow.text_5": "UNLOCALIZED: No fluid is being extracted at first", - "create.ponder.fluid_pipe_flow.text_6": "UNLOCALIZED: Once the flow connects them, the endpoints gradually transfer their contents", - "create.ponder.fluid_pipe_flow.text_7": "UNLOCALIZED: Thus, the Pipe blocks themselves never 'physically' contain any fluid", + "create.ponder.fluid_pipe_flow.header": "始用銅製管道來移動液體", + "create.ponder.fluid_pipe_flow.text_1": "液體管可以連接兩個或更多的液體來源與目標", + "create.ponder.fluid_pipe_flow.text_2": "使用扳手可以在一段直管線上開窗戶", + "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_7": "因此,管線裡不會『物理上的』含有液體", - "create.ponder.fluid_pipe_interaction.header": "UNLOCALIZED: Draining and Filling fluid containers", - "create.ponder.fluid_pipe_interaction.text_1": "UNLOCALIZED: Endpoints of a pipe network can interact with a variety of blocks", - "create.ponder.fluid_pipe_interaction.text_2": "UNLOCALIZED: Any block with fluid storage capabilities can be filled or drained", - "create.ponder.fluid_pipe_interaction.text_3": "UNLOCALIZED: Source blocks right in front of an open end can be picked up...", - "create.ponder.fluid_pipe_interaction.text_4": "UNLOCALIZED: ...while spilling into empty spaces can create fluid sources", - "create.ponder.fluid_pipe_interaction.text_5": "UNLOCALIZED: Pipes can also extract fluids from a handful of other blocks directly", + "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_5": "管線也可以直接從其他方塊中抽取流體", - "create.ponder.fluid_tank_sizes.header": "UNLOCALIZED: Dimensions of a Fluid tank", - "create.ponder.fluid_tank_sizes.text_1": "UNLOCALIZED: Fluid Tanks can be combined to increase the total capacity", - "create.ponder.fluid_tank_sizes.text_2": "UNLOCALIZED: Their base square can be up to 3 blocks wide...", - "create.ponder.fluid_tank_sizes.text_3": "UNLOCALIZED: ...and grow in height by more than 30 additional layers", - "create.ponder.fluid_tank_sizes.text_4": "UNLOCALIZED: Using a Wrench, a tanks' window can be toggled", + "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_4": "扳手可以用來開關窗戶", - "create.ponder.fluid_tank_storage.header": "UNLOCALIZED: Storing Fluids in Fluid Tanks", - "create.ponder.fluid_tank_storage.text_1": "UNLOCALIZED: Fluid Tanks can be used to store large amounts of fluid", - "create.ponder.fluid_tank_storage.text_2": "UNLOCALIZED: Pipe networks can push and pull fluids from any side", - "create.ponder.fluid_tank_storage.text_3": "UNLOCALIZED: The contained fluid can be measured by a Comparator", - "create.ponder.fluid_tank_storage.text_4": "UNLOCALIZED: However, in Survival Mode Fluids cannot be added or taken manually", - "create.ponder.fluid_tank_storage.text_5": "UNLOCALIZED: You can use Basins, Item Drains and Spouts to drain or fill fluid containing items", + "create.ponder.fluid_tank_storage.header": "在液體罐中儲存液體", + "create.ponder.fluid_tank_storage.text_1": "液體罐中可儲存大量的液體", + "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.flywheel.header": "使用飛輪來產生動能", "create.ponder.flywheel.text_1": "飛輪和熔爐引擎必須配套使用,方可產生動能", @@ -1896,33 +1896,33 @@ "create.ponder.hand_crank.text_3": "它產生的轉速相對較高", "create.ponder.hand_crank.text_4": "潛行長按右鍵可以順時針旋轉它", - "create.ponder.hose_pulley.header": "UNLOCALIZED: Source Filling and Draining using Hose Pulleys", - "create.ponder.hose_pulley.text_1": "UNLOCALIZED: Hose Pulleys can be used to fill or drain large bodies of Fluid", - "create.ponder.hose_pulley.text_2": "UNLOCALIZED: With the Kinetic Input, the height of the pulleys' hose can be controlled", - "create.ponder.hose_pulley.text_3": "UNLOCALIZED: The Pulley retracts while the input rotation is inverted", - "create.ponder.hose_pulley.text_4": "UNLOCALIZED: On the opposite side, pipes can be connected", - "create.ponder.hose_pulley.text_5": "UNLOCALIZED: Attached pipe networks can either provide fluid to the hose...", - "create.ponder.hose_pulley.text_6": "UNLOCALIZED: ...or pull from it, draining the pool instead", - "create.ponder.hose_pulley.text_7": "UNLOCALIZED: Fill and Drain speed of the pulley depends entirely on the fluid networks' throughput", + "create.ponder.hose_pulley.header": "使用軟管滑輪抽取、填滿液體", + "create.ponder.hose_pulley.text_1": "軟管滑輪可以用來抽取、填滿大量的液體", + "create.ponder.hose_pulley.text_2": "你可以透過輸入轉動來控制軟管的高度", + "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_7": "抽取或填滿的速度取決於管線系統的吞吐量", - "create.ponder.hose_pulley_infinite.header": "UNLOCALIZED: Passively Filling and Draining large bodies of Fluid", - "create.ponder.hose_pulley_infinite.text_1": "UNLOCALIZED: When deploying the Hose Pulley into a large enough ocean...", - "create.ponder.hose_pulley_infinite.text_2": "UNLOCALIZED: It will provide/dispose fluids without affecting the source", - "create.ponder.hose_pulley_infinite.text_3": "UNLOCALIZED: Pipe networks can limitlessly take fluids from/to such pulleys", + "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": "UNLOCALIZED: Fill and Drain level of Hose Pulleys", - "create.ponder.hose_pulley_level.text_1": "UNLOCALIZED: While fully retracted, the Hose Pulley cannot operate", - "create.ponder.hose_pulley_level.text_2": "UNLOCALIZED: Draining runs from top to bottom", - "create.ponder.hose_pulley_level.text_3": "UNLOCALIZED: The surface level will end up just below where the hose ends", - "create.ponder.hose_pulley_level.text_4": "UNLOCALIZED: Filling runs from bottom to top", - "create.ponder.hose_pulley_level.text_5": "UNLOCALIZED: The filled pool will not grow beyond the layer above the hose end", + "create.ponder.hose_pulley_level.header": "軟管滑輪抽取、填滿水平面", + "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": "而填充工作將由下而上進行將由上而下進行", + "create.ponder.hose_pulley_level.text_5": "水平面不會超過軟管末端", - "create.ponder.item_drain.header": "UNLOCALIZED: Emptying Fluid Containers using Item Drains", - "create.ponder.item_drain.text_1": "UNLOCALIZED: Item Drains can extract fluids from items", - "create.ponder.item_drain.text_2": "UNLOCALIZED: Right-click it to pour fluids from your held item into it", - "create.ponder.item_drain.text_3": "UNLOCALIZED: When items are inserted from the side...", - "create.ponder.item_drain.text_4": "UNLOCALIZED: ...they roll across, emptying out their contained fluid", - "create.ponder.item_drain.text_5": "UNLOCALIZED: Pipe Networks can now pull the fluid from the drains' internal buffer", + "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.large_cogwheel.header": "使用大齒輪傳遞動能", "create.ponder.large_cogwheel.text_1": "大齒輪可以以特定的角度相互連接", @@ -2046,20 +2046,20 @@ "create.ponder.mechanical_press_compacting.text_3": "一些配方可能需要烈焰人燃燒室提供熱量", "create.ponder.mechanical_press_compacting.text_4": "過濾槽可用於解決兩個配方相互衝突的情況", - "create.ponder.mechanical_pump_flow.header": "UNLOCALIZED: Fluid Transportation using Mechanical Pumps", - "create.ponder.mechanical_pump_flow.text_1": "UNLOCALIZED: Mechanical Pumps govern the flow of their attached pipe networks", - "create.ponder.mechanical_pump_flow.text_2": "UNLOCALIZED: When powered, their arrow indicates the direction of flow", - "create.ponder.mechanical_pump_flow.text_3": "UNLOCALIZED: The network behind is now pulling fluids...", - "create.ponder.mechanical_pump_flow.text_4": "UNLOCALIZED: ...while the network in front is transferring it outward", - "create.ponder.mechanical_pump_flow.text_5": "UNLOCALIZED: Reversing the input rotation reverses the direction of flow", - "create.ponder.mechanical_pump_flow.text_6": "UNLOCALIZED: Use a Wrench to reverse the orientation of pumps manually", + "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_5": "反轉輸入的動力可以反轉液體的方向", + "create.ponder.mechanical_pump_flow.text_6": "扳手可以手動調整方向", - "create.ponder.mechanical_pump_speed.header": "UNLOCALIZED: Throughput of Mechanical Pumps", - "create.ponder.mechanical_pump_speed.text_1": "UNLOCALIZED: Regardless of speed, Mechanical Pumps affect pipes connected up to 16 blocks away", - "create.ponder.mechanical_pump_speed.text_2": "UNLOCALIZED: Speeding up the input rotation changes the speed of flow propagation...", - "create.ponder.mechanical_pump_speed.text_3": "UNLOCALIZED: ...aswell as how quickly fluids are transferred", - "create.ponder.mechanical_pump_speed.text_4": "UNLOCALIZED: Pumps can combine their throughputs within shared pipe networks", - "create.ponder.mechanical_pump_speed.text_5": "UNLOCALIZED: Alternating their orientation can help align their flow directions", + "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_4": "在同一個管線網路中機械幫浦可以結合他們的吞吐量", + "create.ponder.mechanical_pump_speed.text_5": "改變它們的方向可以對齊它們的流動方向", "create.ponder.mechanical_saw_breaker.header": "使用動力鋸伐木", "create.ponder.mechanical_saw_breaker.text_1": "向其通入動能後,動力鋸可以直接砍伐掉它面前的樹木", @@ -2086,21 +2086,21 @@ "create.ponder.nixie_tube.header": "使用真空管顯示器", "create.ponder.nixie_tube.text_1": "通入紅石訊號後,真空管顯示器會顯示出紅石訊號的強度", "create.ponder.nixie_tube.text_2": "使用命名牌在鐵砧上為其命名,可以自訂它的顯示文本", - "create.ponder.nixie_tube.text_3": "UNLOCALIZED: Right-Click with Dye to change their display colour", + "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.portable_fluid_interface.header": "UNLOCALIZED: Contraption Fluid Exchange", - "create.ponder.portable_fluid_interface.text_1": "UNLOCALIZED: Fluid Tanks on moving contraptions cannot be accessed by any pipes", - "create.ponder.portable_fluid_interface.text_2": "UNLOCALIZED: This component can interact with fluid tanks without the need to stop the contraption", - "create.ponder.portable_fluid_interface.text_3": "UNLOCALIZED: Place a second one with a gap of 1 or 2 blocks inbetween", - "create.ponder.portable_fluid_interface.text_4": "UNLOCALIZED: Whenever they pass by each other, they will engage in a connection", - "create.ponder.portable_fluid_interface.text_5": "UNLOCALIZED: While engaged, the stationary interface will represent ALL Tanks on the contraption", - "create.ponder.portable_fluid_interface.text_6": "UNLOCALIZED: Fluid can now be inserted...", - "create.ponder.portable_fluid_interface.text_7": "UNLOCALIZED: ...or extracted from the contraption", - "create.ponder.portable_fluid_interface.text_8": "UNLOCALIZED: After no contents have been exchanged for a while, the contraption will continue on its way", + "create.ponder.portable_fluid_interface.header": "移動式液體口", + "create.ponder.portable_fluid_interface.text_1": "任何管道線都無法與移動裝置上的液體罐連接", + "create.ponder.portable_fluid_interface.text_2": "該元件可以與液體罐相互作用,而無需停止裝置", + "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_8": "一段時間沒有液體交換後,裝置將繼續前進", "create.ponder.portable_storage_interface.header": "裝置存儲交換", "create.ponder.portable_storage_interface.text_1": "玩家無法與運動裝置內的存儲空間進行互動", @@ -2199,24 +2199,24 @@ "create.ponder.smart_chute.text_3": "使用滑鼠滾輪可以指定被過濾的物品數量", "create.ponder.smart_chute.text_4": "通入紅石訊號,智慧溜槽將會完全暫停工作", - "create.ponder.smart_pipe.header": "UNLOCALIZED: Controlling Fluid flow using Smart Pipes", - "create.ponder.smart_pipe.text_1": "UNLOCALIZED: Smart pipes can help control flows by fluid type", - "create.ponder.smart_pipe.text_2": "UNLOCALIZED: When placed directly at the source, they can specify the type of fluid to extract", - "create.ponder.smart_pipe.text_3": "UNLOCALIZED: Simply Right-Click their filter slot with any item containing the desired fluid", - "create.ponder.smart_pipe.text_4": "UNLOCALIZED: When placed further down a pipe network, smart pipes will only let matching fluids continue", + "create.ponder.smart_pipe.header": "使用智慧液體管道控制液體", + "create.ponder.smart_pipe.text_1": "智慧液體管道可以按照液體類型控制液體流", + "create.ponder.smart_pipe.text_2": "當直接放置在源頭時,他們可以指定要提取的液體類型", + "create.ponder.smart_pipe.text_3": "只需用包含所需液體的任何項目右鍵點擊其過濾槽", + "create.ponder.smart_pipe.text_4": "在管網裡時,智慧液體管道只會讓匹配的液體經過", "create.ponder.speedometer.header": "使用速度計來監測轉速", "create.ponder.speedometer.text_1": "速度計能顯示相接組件的轉速", "create.ponder.speedometer.text_2": "當佩戴MR護目鏡時,可以看到儀表所顯示的更詳細的數據", "create.ponder.speedometer.text_3": "紅石比較器可以根據速度計的數值輸出不同強弱的紅石訊號", - "create.ponder.spout_filling.header": "UNLOCALIZED: Filling Items using a Spout", - "create.ponder.spout_filling.text_1": "UNLOCALIZED: The Spout can fill fluid holding items provided beneath it", - "create.ponder.spout_filling.text_2": "UNLOCALIZED: The content of a Spout cannot be accessed manually", - "create.ponder.spout_filling.text_3": "UNLOCALIZED: Instead, Pipes can be used to supply it with fluids", - "create.ponder.spout_filling.text_4": "UNLOCALIZED: The Input items can be placed on a Depot under the Spout", - "create.ponder.spout_filling.text_5": "UNLOCALIZED: When items are provided on a belt...", - "create.ponder.spout_filling.text_6": "UNLOCALIZED: The Spout will hold and process them automatically", + "create.ponder.spout_filling.header": "使用液體灌注器填充物品", + "create.ponder.spout_filling.text_1": "液體灌注器可以填充下方的液體容器", + "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_6": "液體灌注器會停下他並且自動填滿", "create.ponder.stabilized_bearings.header": "裝置固定朝向", "create.ponder.stabilized_bearings.text_1": "當動力軸承在結構被帶動時...", @@ -2249,11 +2249,11 @@ "create.ponder.valve_handle.text_4": "潛行右擊可使它順時針旋轉", "create.ponder.valve_handle.text_5": "可以透過染色來美化閥門手輪", - "create.ponder.valve_pipe.header": "UNLOCALIZED: Controlling Fluid flow using Valves", - "create.ponder.valve_pipe.text_1": "UNLOCALIZED: Valve pipes help control fluids propagating through pipe networks", - "create.ponder.valve_pipe.text_2": "UNLOCALIZED: Their shaft input controls whether fluid is currently allowed through", - "create.ponder.valve_pipe.text_3": "UNLOCALIZED: Given Rotational Force in the opening direction, the valve will open up", - "create.ponder.valve_pipe.text_4": "UNLOCALIZED: It can be closed again by reversing the input rotation", + "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": "水車利用臨近的水流來進行應力發生", diff --git a/src/generated/resources/data/create/advancements/aesthetics.json b/src/generated/resources/data/create/advancements/aesthetics.json index d723cbe38..59a86f429 100644 --- a/src/generated/resources/data/create/advancements/aesthetics.json +++ b/src/generated/resources/data/create/advancements/aesthetics.json @@ -28,8 +28,8 @@ "trigger": "create:bracket_apply", "conditions": { "accepted_entries": [ - "create:cogwheel", - "create:large_cogwheel" + "create:large_cogwheel", + "create:cogwheel" ] } }, diff --git a/src/main/java/com/simibubi/create/AllSoundEvents.java b/src/main/java/com/simibubi/create/AllSoundEvents.java index 062ceb94a..77a60bbe4 100644 --- a/src/main/java/com/simibubi/create/AllSoundEvents.java +++ b/src/main/java/com/simibubi/create/AllSoundEvents.java @@ -10,7 +10,6 @@ import com.google.common.collect.Maps; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.JsonArray; -import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.simibubi.create.foundation.utility.Couple; import com.simibubi.create.foundation.utility.Pair; @@ -242,7 +241,7 @@ public class AllSoundEvents { entry.prepare(); } - public static JsonElement provideLangEntries() { + public static JsonObject provideLangEntries() { JsonObject object = new JsonObject(); for (SoundEntry entry : entries.values()) if (entry.hasSubtitle()) diff --git a/src/main/java/com/simibubi/create/foundation/command/PonderCommand.java b/src/main/java/com/simibubi/create/foundation/command/PonderCommand.java index ea174394b..853de1525 100644 --- a/src/main/java/com/simibubi/create/foundation/command/PonderCommand.java +++ b/src/main/java/com/simibubi/create/foundation/command/PonderCommand.java @@ -21,7 +21,7 @@ import net.minecraftforge.common.util.FakePlayer; import net.minecraftforge.fml.network.PacketDistributor; public class PonderCommand { - public static final SuggestionProvider ITEM_PONDERS = SuggestionProviders.register(new ResourceLocation("all_ponders"), (iSuggestionProviderCommandContext, builder) -> ISuggestionProvider.suggestResource(PonderRegistry.all.keySet().stream(), builder)); + public static final SuggestionProvider ITEM_PONDERS = SuggestionProviders.register(new ResourceLocation("all_ponders"), (iSuggestionProviderCommandContext, builder) -> ISuggestionProvider.suggestResource(PonderRegistry.ALL.keySet().stream(), builder)); static ArgumentBuilder register() { return Commands.literal("ponder") diff --git a/src/main/java/com/simibubi/create/foundation/command/SConfigureConfigPacket.java b/src/main/java/com/simibubi/create/foundation/command/SConfigureConfigPacket.java index 192321c33..489ace535 100644 --- a/src/main/java/com/simibubi/create/foundation/command/SConfigureConfigPacket.java +++ b/src/main/java/com/simibubi/create/foundation/command/SConfigureConfigPacket.java @@ -195,7 +195,7 @@ public class SConfigureConfigPacket extends SimplePacketBase { } ResourceLocation id = new ResourceLocation(value); - if (!PonderRegistry.all.containsKey(id)) { + if (!PonderRegistry.ALL.containsKey(id)) { Create.LOGGER.error("Could not find ponder scenes for item: " + id); return; } diff --git a/src/main/java/com/simibubi/create/foundation/data/AllLangPartials.java b/src/main/java/com/simibubi/create/foundation/data/AllLangPartials.java index 9904c53b4..6392055b6 100644 --- a/src/main/java/com/simibubi/create/foundation/data/AllLangPartials.java +++ b/src/main/java/com/simibubi/create/foundation/data/AllLangPartials.java @@ -4,7 +4,7 @@ import com.google.common.base.Supplier; import com.google.gson.JsonElement; import com.simibubi.create.AllSoundEvents; import com.simibubi.create.Create; -import com.simibubi.create.foundation.ponder.PonderRegistry; +import com.simibubi.create.foundation.ponder.PonderLocalization; import com.simibubi.create.foundation.utility.FilesHelper; import com.simibubi.create.foundation.utility.Lang; @@ -14,7 +14,7 @@ public enum AllLangPartials { MESSAGES("UI & Messages"), SUBTITLES("Subtitles", AllSoundEvents::provideLangEntries), TOOLTIPS("Item Descriptions"), - PONDER("Ponder Content", PonderRegistry::provideLangEntries), + PONDER("Ponder Content", PonderLocalization::provideLangEntries), ; diff --git a/src/main/java/com/simibubi/create/foundation/ponder/PonderLocalization.java b/src/main/java/com/simibubi/create/foundation/ponder/PonderLocalization.java index d5b6a52cc..53b25a053 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/PonderLocalization.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/PonderLocalization.java @@ -7,72 +7,99 @@ import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.simibubi.create.Create; import com.simibubi.create.foundation.ponder.content.PonderIndex; +import com.simibubi.create.foundation.ponder.content.PonderTag; import com.simibubi.create.foundation.ponder.content.PonderTagIndexScreen; import com.simibubi.create.foundation.ponder.content.PonderTagScreen; +import com.simibubi.create.foundation.ponder.content.SharedText; import com.simibubi.create.foundation.utility.Couple; -import com.simibubi.create.foundation.utility.Lang; +import com.tterrag.registrate.AbstractRegistrate; + +import net.minecraft.client.resources.I18n; +import net.minecraft.util.ResourceLocation; public class PonderLocalization { - static Map shared = new HashMap<>(); - static Map> tag = new HashMap<>(); - static Map> specific = new HashMap<>(); + static final Map SHARED = new HashMap<>(); + static final Map> TAG = new HashMap<>(); + static final Map> SPECIFIC = new HashMap<>(); // - public static void registerTag(String key, String enUS, String description) { - tag.put(key, Couple.create(enUS, description)); + public static void registerShared(ResourceLocation key, String enUS) { + SHARED.put(key, enUS); } - public static void registerShared(String key, String enUS) { - shared.put(key, enUS); + public static void registerTag(ResourceLocation key, String enUS, String description) { + TAG.put(key, Couple.create(enUS, description)); } - public static void registerSpecific(String sceneId, String key, String enUS) { - specific.computeIfAbsent(sceneId, $ -> new HashMap<>()) + public static void registerSpecific(ResourceLocation sceneId, String key, String enUS) { + SPECIFIC.computeIfAbsent(sceneId, $ -> new HashMap<>()) .put(key, enUS); } // - public static String getShared(String key) { + public static String getShared(ResourceLocation key) { if (PonderIndex.EDITOR_MODE) - return shared.containsKey(key) ? shared.get(key) : ("unregistered shared entry:" + key); - return Lang.translate(langKeyForShared(key)) - .getString(); + return SHARED.containsKey(key) ? SHARED.get(key) : ("unregistered shared entry:" + key); + return I18n.get(langKeyForShared(key)); } - public static String getSpecific(String sceneId, String k) { + public static String getTag(ResourceLocation key) { if (PonderIndex.EDITOR_MODE) - return specific.get(sceneId) - .get(k); - return Lang.translate(langKeyForSpecific(sceneId, k)) - .getString(); - } - - public static String getTag(String key) { - if (PonderIndex.EDITOR_MODE) - return tag.containsKey(key) ? tag.get(key) + return TAG.containsKey(key) ? TAG.get(key) .getFirst() : ("unregistered tag entry:" + key); - return Lang.translate(langKeyForTag(key)) - .getString(); + return I18n.get(langKeyForTag(key)); } - public static String getTagDescription(String key) { + public static String getTagDescription(ResourceLocation key) { if (PonderIndex.EDITOR_MODE) - return tag.containsKey(key) ? tag.get(key) + return TAG.containsKey(key) ? TAG.get(key) .getSecond() : ("unregistered tag entry:" + key); - return Lang.translate(langKeyForTagDescription(key)) - .getString(); + return I18n.get(langKeyForTagDescription(key)); + } + + public static String getSpecific(ResourceLocation sceneId, String k) { + if (PonderIndex.EDITOR_MODE) + return SPECIFIC.get(sceneId) + .get(k); + return I18n.get(langKeyForSpecific(sceneId, k)); } // public static final String LANG_PREFIX = "ponder."; - public static JsonElement record() { - JsonObject object = new JsonObject(); + public static void record(String namespace, JsonObject object) { + SHARED.forEach((k, v) -> { + if (k.getNamespace().equals(namespace)) { + object.addProperty(langKeyForShared(k), v); + } + }); + TAG.forEach((k, v) -> { + if (k.getNamespace().equals(namespace)) { + object.addProperty(langKeyForTag(k), v.getFirst()); + object.addProperty(langKeyForTagDescription(k), v.getSecond()); + } + }); + + SPECIFIC.entrySet() + .stream() + .filter(entry -> entry.getKey().getNamespace().equals(namespace)) + .sorted(Map.Entry.comparingByKey()) + .forEach(entry -> { + entry.getValue() + .entrySet() + .stream() + .sorted(Map.Entry.comparingByKey()) + .forEach(subEntry -> object.addProperty( + langKeyForSpecific(entry.getKey(), subEntry.getKey()), subEntry.getValue())); + }); + } + + private static void recordGeneral(JsonObject object) { addGeneral(object, PonderTooltipHandler.HOLD_TO_PONDER, "Hold [%1$s] to Ponder"); addGeneral(object, PonderTooltipHandler.SUBJECT, "Subject of this scene"); addGeneral(object, PonderUI.PONDERING, "Pondering about..."); @@ -93,45 +120,62 @@ public class PonderLocalization { addGeneral(object, PonderTagIndexScreen.DESCRIPTION, "Click one of the icons to learn about its associated Items and Blocks"); addGeneral(object, PonderTagIndexScreen.TITLE, "Ponder Index"); - - shared.forEach((k, v) -> object.addProperty(Create.ID + "." + langKeyForShared(k), v)); - tag.forEach((k, v) -> { - object.addProperty(Create.ID + "." + langKeyForTag(k), v.getFirst()); - object.addProperty(Create.ID + "." + langKeyForTagDescription(k), v.getSecond()); - }); - - specific.entrySet() - .stream() - .sorted(Map.Entry.comparingByKey()) - .forEach(entry -> { - entry.getValue() - .entrySet() - .stream() - .sorted(Map.Entry.comparingByKey()) - .forEach(subEntry -> object.addProperty( - Create.ID + "." + langKeyForSpecific(entry.getKey(), subEntry.getKey()), subEntry.getValue())); - }); - return object; } private static void addGeneral(JsonObject json, String key, String enUS) { json.addProperty(Create.ID + "." + key, enUS); } - protected static String langKeyForSpecific(String sceneId, String k) { - return LANG_PREFIX + sceneId + "." + k; + public static void generateSceneLang() { + PonderRegistry.ALL.forEach((id, list) -> { + for (int i = 0; i < list.size(); i++) + PonderRegistry.compileScene(i, list.get(i), null); + }); } - protected static String langKeyForShared(String k) { - return LANG_PREFIX + "shared." + k; + /** + * Internal use only. + */ + public static JsonObject provideLangEntries() { + SharedText.gatherText(); + PonderTag.register(); + PonderIndex.register(); + + generateSceneLang(); + + JsonObject object = new JsonObject(); + recordGeneral(object); + record(Create.ID, object); + return object; } - protected static String langKeyForTag(String k) { - return LANG_PREFIX + "tag." + k; + public static void provideRegistrateLang(AbstractRegistrate registrate) { + generateSceneLang(); + + JsonObject object = new JsonObject(); + record(registrate.getModid(), object); + + for (Map.Entry entry : object.entrySet()) { + registrate.addRawLang(entry.getKey(), entry.getValue().getAsString()); + } } - protected static String langKeyForTagDescription(String k) { - return LANG_PREFIX + "tag." + k + ".description"; + // + + protected static String langKeyForShared(ResourceLocation k) { + return k.getNamespace() + "." + LANG_PREFIX + "shared." + k.getPath(); + } + + protected static String langKeyForTag(ResourceLocation k) { + return k.getNamespace() + "." + LANG_PREFIX + "tag." + k.getPath(); + } + + protected static String langKeyForTagDescription(ResourceLocation k) { + return k.getNamespace() + "." + LANG_PREFIX + "tag." + k.getPath() + ".description"; + } + + protected static String langKeyForSpecific(ResourceLocation sceneId, String k) { + return sceneId.getNamespace() + "." + LANG_PREFIX + sceneId.getPath() + "." + k; } } diff --git a/src/main/java/com/simibubi/create/foundation/ponder/PonderRegistry.java b/src/main/java/com/simibubi/create/foundation/ponder/PonderRegistry.java index dac81b346..ffe9fc99e 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/PonderRegistry.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/PonderRegistry.java @@ -12,7 +12,6 @@ import java.util.Map; import java.util.function.Consumer; import java.util.zip.GZIPInputStream; -import com.google.gson.JsonElement; import com.simibubi.create.Create; import com.simibubi.create.foundation.ponder.PonderStoryBoardEntry.PonderStoryBoard; import com.simibubi.create.foundation.ponder.content.PonderChapter; @@ -27,6 +26,8 @@ import net.minecraft.client.Minecraft; import net.minecraft.nbt.CompoundNBT; import net.minecraft.nbt.CompressedStreamTools; import net.minecraft.nbt.NBTSizeTracker; +import net.minecraft.resources.IResource; +import net.minecraft.resources.IResourceManager; import net.minecraft.util.ResourceLocation; import net.minecraft.util.math.BlockPos; import net.minecraft.world.gen.feature.template.PlacementSettings; @@ -34,52 +35,75 @@ import net.minecraft.world.gen.feature.template.Template; public class PonderRegistry { - public static final PonderTagRegistry tags = new PonderTagRegistry(); - public static final PonderChapterRegistry chapters = new PonderChapterRegistry(); - public static Map> all = new HashMap<>(); + public static final PonderTagRegistry TAGS = new PonderTagRegistry(); + public static final PonderChapterRegistry CHAPTERS = new PonderChapterRegistry(); + // Map from item ids to all storyboards + public static final Map> ALL = new HashMap<>(); - public static PonderSceneBuilder addStoryBoard(ItemProviderEntry component, String schematic, + private static String currentNamespace; + + public static void startRegistration(String namespace) { + if (currentNamespace != null) { + throw new IllegalStateException("Cannot start registration when already started!"); + } + currentNamespace = namespace; + } + + public static void endRegistration() { + if (currentNamespace == null) { + throw new IllegalStateException("Cannot end registration when not started!"); + } + currentNamespace = null; + } + + private static String getNamespaceOrThrow() { + if (currentNamespace == null) { + throw new IllegalStateException("Cannot register storyboard without starting registration!"); + } + return currentNamespace; + } + + public static PonderSceneBuilder addStoryBoard(ItemProviderEntry component, String schematicPath, PonderStoryBoard storyBoard, PonderTag... tags) { ResourceLocation id = component.getId(); - PonderStoryBoardEntry entry = new PonderStoryBoardEntry(storyBoard, schematic, id); + PonderStoryBoardEntry entry = new PonderStoryBoardEntry(storyBoard, getNamespaceOrThrow(), schematicPath, id); PonderSceneBuilder builder = new PonderSceneBuilder(entry); if (tags.length > 0) builder.highlightTags(tags); - all.computeIfAbsent(id, _$ -> new ArrayList<>()) + ALL.computeIfAbsent(id, _$ -> new ArrayList<>()) .add(entry); return builder; } - public static PonderSceneBuilder addStoryBoard(PonderChapter chapter, ResourceLocation component, String schematic, - PonderStoryBoard storyBoard) { + public static PonderSceneBuilder addStoryBoard(PonderChapter chapter, ResourceLocation component, String schematicPath, PonderStoryBoard storyBoard) { if (component == null) component = new ResourceLocation("minecraft", "stick"); - PonderStoryBoardEntry entry = new PonderStoryBoardEntry(storyBoard, schematic, component); + PonderStoryBoardEntry entry = new PonderStoryBoardEntry(storyBoard, getNamespaceOrThrow(), schematicPath, component); PonderSceneBuilder builder = new PonderSceneBuilder(entry); - chapters.addStoriesToChapter(chapter, entry); + CHAPTERS.addStoriesToChapter(chapter, entry); return builder; } public static MultiSceneBuilder forComponents(ItemProviderEntry... components) { return new MultiSceneBuilder(Arrays.asList(components)); } - + public static MultiSceneBuilder forComponents(Iterable> components) { return new MultiSceneBuilder(components); } public static List compile(ResourceLocation id) { - return compile(all.get(id)); + return compile(ALL.get(id)); } public static List compile(PonderChapter chapter) { - return compile(chapters.getStories(chapter)); + return compile(CHAPTERS.getStories(chapter)); } public static List compile(List entries) { if (PonderIndex.EDITOR_MODE) { - PonderLocalization.shared.clear(); + PonderLocalization.SHARED.clear(); SharedText.gatherText(); } @@ -87,7 +111,7 @@ public class PonderRegistry { for (int i = 0; i < entries.size(); i++) { PonderStoryBoardEntry sb = entries.get(i); - Template activeTemplate = loadSchematic(sb.getSchematicName()); + Template activeTemplate = loadSchematic(sb.getSchematicLocation()); PonderWorld world = new PonderWorld(BlockPos.ZERO, Minecraft.getInstance().level); activeTemplate.placeInWorld(world, BlockPos.ZERO, new PlacementSettings(), world.random); world.createBackup(); @@ -100,41 +124,42 @@ public class PonderRegistry { } public static PonderScene compileScene(int i, PonderStoryBoardEntry sb, PonderWorld world) { - PonderScene scene = new PonderScene(world, sb.getComponent(), sb.getTags()); + PonderScene scene = new PonderScene(world, sb.getNamespace(), sb.getComponent(), sb.getTags()); SceneBuilder builder = scene.builder(); sb.getBoard() .program(builder, scene.getSceneBuildingUtil()); return scene; } - public static Template loadSchematic(String path) { - Template t = new Template(); - String filepath = "ponder/" + path + ".nbt"; - InputStream resourceAsStream = Create.class.getClassLoader() - .getResourceAsStream(filepath); - if (resourceAsStream == null) { - Create.LOGGER.error("Ponder schematic missing: " + path); - return t; - } - try (DataInputStream stream = - new DataInputStream(new BufferedInputStream(new GZIPInputStream(resourceAsStream)))) { - CompoundNBT nbt = CompressedStreamTools.read(stream, new NBTSizeTracker(0x20000000L)); - t.load(nbt); - } catch (IOException e) { - Create.LOGGER.warn("Failed to read ponder schematic", e); - } - return t; + public static Template loadSchematic(ResourceLocation location) { + return loadSchematic(Minecraft.getInstance().getResourceManager(), location); } - public static JsonElement provideLangEntries() { - PonderIndex.register(); - PonderTag.register(); - SharedText.gatherText(); - all.forEach((id, list) -> { - for (int i = 0; i < list.size(); i++) - compileScene(i, list.get(i), null); - }); - return PonderLocalization.record(); + public static Template loadSchematic(IResourceManager resourceManager, ResourceLocation location) { + String namespace = location.getNamespace(); + String path = "ponder/" + location.getPath() + ".nbt"; + ResourceLocation location1 = new ResourceLocation(namespace, path); + + if (!resourceManager.hasResource(location1)) { + Create.LOGGER.error("Ponder schematic missing: " + location1); + return new Template(); + } + try { + IResource resource = resourceManager.getResource(location1); + return loadSchematic(resource.getInputStream()); + } catch (IOException e) { + Create.LOGGER.error("Failed to read ponder schematic: " + path, e); + } + return new Template(); + } + + public static Template loadSchematic(InputStream resourceStream) throws IOException { + Template t = new Template(); + DataInputStream stream = + new DataInputStream(new BufferedInputStream(new GZIPInputStream(resourceStream))); + CompoundNBT nbt = CompressedStreamTools.read(stream, new NBTSizeTracker(0x20000000L)); + t.load(nbt); + return t; } public static class MultiSceneBuilder { @@ -183,7 +208,7 @@ public class PonderRegistry { } public PonderSceneBuilder chapter(PonderChapter chapter) { - PonderRegistry.chapters.addStoriesToChapter(chapter, entry); + PonderRegistry.CHAPTERS.addStoriesToChapter(chapter, entry); return this; } diff --git a/src/main/java/com/simibubi/create/foundation/ponder/PonderScene.java b/src/main/java/com/simibubi/create/foundation/ponder/PonderScene.java index f1942fba6..c5bbdacef 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/PonderScene.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/PonderScene.java @@ -59,7 +59,7 @@ public class PonderScene { boolean finished; int sceneIndex; int textIndex; - String sceneId; + ResourceLocation sceneId; IntList keyframeTimes; @@ -69,6 +69,7 @@ public class PonderScene { List tags; PonderWorld world; + String namespace; ResourceLocation component; SceneTransform transform; SceneRenderInfo info; @@ -90,7 +91,7 @@ public class PonderScene { int totalTime; int currentTime; - public PonderScene(PonderWorld world, ResourceLocation component, Collection tags) { + public PonderScene(PonderWorld world, String namespace, ResourceLocation component, Collection tags) { if (world != null) world.scene = this; @@ -98,6 +99,7 @@ public class PonderScene { textIndex = 1; this.world = world; + this.namespace = namespace; this.component = component; outliner = new Outliner(); @@ -392,10 +394,30 @@ public class PonderScene { return new SceneBuildingUtil(getBounds()); } + public String getNamespace() { + return namespace; + } + + public ResourceLocation getId() { + return sceneId; + } + public SceneTransform getTransform() { return transform; } + public Outliner getOutliner() { + return outliner; + } + + public boolean isFinished() { + return finished; + } + + public void setFinished(boolean finished) { + this.finished = finished; + } + public class SceneTransform { public LerpedFloat xRotation, yRotation; @@ -513,16 +535,4 @@ public class PonderScene { } - public Outliner getOutliner() { - return outliner; - } - - public boolean isFinished() { - return finished; - } - - public void setFinished(boolean finished) { - this.finished = finished; - } - } diff --git a/src/main/java/com/simibubi/create/foundation/ponder/PonderStoryBoardEntry.java b/src/main/java/com/simibubi/create/foundation/ponder/PonderStoryBoardEntry.java index 6d6ab1c98..5938d38e8 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/PonderStoryBoardEntry.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/PonderStoryBoardEntry.java @@ -9,36 +9,47 @@ import net.minecraft.util.ResourceLocation; public class PonderStoryBoardEntry { - private final String schematicName; private final PonderStoryBoard board; - private final List tags; + private final String namespace; + private final String schematicPath; private final ResourceLocation component; + private final List tags; - public PonderStoryBoardEntry(PonderStoryBoard board, String schematicName, ResourceLocation component) { + public PonderStoryBoardEntry(PonderStoryBoard board, String namespace, String schematicPath, ResourceLocation component) { this.board = board; - this.schematicName = schematicName; - this.tags = new ArrayList<>(); + this.namespace = namespace; + this.schematicPath = schematicPath; this.component = component; - } - - public interface PonderStoryBoard { - void program(SceneBuilder scene, SceneBuildingUtil util); - } - - public String getSchematicName() { - return schematicName; + this.tags = new ArrayList<>(); } public PonderStoryBoard getBoard() { return board; } - public List getTags() { - return tags; + public String getNamespace() { + return namespace; + } + + public String getSchematicPath() { + return schematicPath; } public ResourceLocation getComponent() { return component; } + public List getTags() { + return tags; + } + + public ResourceLocation getSchematicLocation() { + return new ResourceLocation(namespace, schematicPath); + } + + @FunctionalInterface + public interface PonderStoryBoard { + void program(SceneBuilder scene, SceneBuildingUtil util); + } + } diff --git a/src/main/java/com/simibubi/create/foundation/ponder/PonderTooltipHandler.java b/src/main/java/com/simibubi/create/foundation/ponder/PonderTooltipHandler.java index a47304a31..a04832908 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/PonderTooltipHandler.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/PonderTooltipHandler.java @@ -102,7 +102,7 @@ public class PonderTooltipHandler { if (stack.isEmpty()) return; - if (!PonderRegistry.all.containsKey(stack.getItem() + if (!PonderRegistry.ALL.containsKey(stack.getItem() .getRegistryName())) return; diff --git a/src/main/java/com/simibubi/create/foundation/ponder/PonderUI.java b/src/main/java/com/simibubi/create/foundation/ponder/PonderUI.java index ddf6de0f7..ae5eb3bee 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/PonderUI.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/PonderUI.java @@ -13,6 +13,7 @@ import org.lwjgl.opengl.GL11; import com.mojang.blaze3d.matrix.MatrixStack; import com.mojang.blaze3d.systems.RenderSystem; +import com.simibubi.create.Create; import com.simibubi.create.foundation.config.AllConfigs; import com.simibubi.create.foundation.gui.AllGuiTextures; import com.simibubi.create.foundation.gui.AllIcons; @@ -137,11 +138,11 @@ public class PonderUI extends NavigatableSimiScreen { else stack = new ItemStack(ForgeRegistries.BLOCKS.getValue(component)); - tags = new ArrayList<>(PonderRegistry.tags.getTags(component)); + tags = new ArrayList<>(PonderRegistry.TAGS.getTags(component)); this.scenes = scenes; if (scenes.isEmpty()) { List l = Collections.singletonList(new PonderStoryBoardEntry(DebugScenes::empty, - "debug/scene_1", new ResourceLocation("minecraft", "stick"))); + Create.ID, "debug/scene_1", new ResourceLocation("minecraft", "stick"))); scenes.addAll(PonderRegistry.compile(l)); } lazyIndex = LerpedFloat.linear() @@ -365,9 +366,9 @@ public class PonderUI extends NavigatableSimiScreen { PonderScene scene = scenes.get(index); if (hasShiftDown()) { - List list = PonderRegistry.all.get(scene.component); + List list = PonderRegistry.ALL.get(scene.component); PonderStoryBoardEntry sb = list.get(index); - Template activeTemplate = PonderRegistry.loadSchematic(sb.getSchematicName()); + Template activeTemplate = PonderRegistry.loadSchematic(sb.getSchematicLocation()); PonderWorld world = new PonderWorld(BlockPos.ZERO, Minecraft.getInstance().level); activeTemplate.placeInWorld(world, BlockPos.ZERO, new PlacementSettings(), new Random()); world.createBackup(); diff --git a/src/main/java/com/simibubi/create/foundation/ponder/SceneBuilder.java b/src/main/java/com/simibubi/create/foundation/ponder/SceneBuilder.java index dbecedced..ead2f0ec0 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/SceneBuilder.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/SceneBuilder.java @@ -75,6 +75,7 @@ import net.minecraft.state.Property; import net.minecraft.state.properties.BlockStateProperties; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.Direction; +import net.minecraft.util.ResourceLocation; import net.minecraft.util.Direction.Axis; import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.BlockPos; @@ -138,8 +139,8 @@ public class SceneBuilder { * @param title */ public void title(String sceneId, String title) { - scene.sceneId = sceneId; - PonderLocalization.registerSpecific(sceneId, PonderScene.TITLE_KEY, title); + scene.sceneId = new ResourceLocation(scene.namespace, sceneId); + PonderLocalization.registerSpecific(scene.sceneId, PonderScene.TITLE_KEY, title); } /** diff --git a/src/main/java/com/simibubi/create/foundation/ponder/content/PonderChapter.java b/src/main/java/com/simibubi/create/foundation/ponder/content/PonderChapter.java index 7508bd85a..9bedf775d 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/content/PonderChapter.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/content/PonderChapter.java @@ -33,9 +33,9 @@ public class PonderChapter implements IScreenRenderable { @Nonnull public static PonderChapter of(String id) { - PonderChapter chapter = PonderRegistry.chapters.getChapter(id); + PonderChapter chapter = PonderRegistry.CHAPTERS.getChapter(id); if (chapter == null) { - chapter = PonderRegistry.chapters.addChapter(new PonderChapter(id)); + chapter = PonderRegistry.CHAPTERS.addChapter(new PonderChapter(id)); } return chapter; @@ -43,7 +43,7 @@ public class PonderChapter implements IScreenRenderable { public PonderChapter addTagsToChapter(PonderTag... tags) { for (PonderTag t : tags) - PonderRegistry.tags.add(t, this); + PonderRegistry.TAGS.add(t, this); return this; } diff --git a/src/main/java/com/simibubi/create/foundation/ponder/content/PonderIndex.java b/src/main/java/com/simibubi/create/foundation/ponder/content/PonderIndex.java index a61068eb9..62241e7fc 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/content/PonderIndex.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/content/PonderIndex.java @@ -2,6 +2,7 @@ package com.simibubi.create.foundation.ponder.content; import com.simibubi.create.AllBlocks; import com.simibubi.create.AllItems; +import com.simibubi.create.Create; import com.simibubi.create.foundation.ponder.PonderRegistry; import com.simibubi.create.foundation.ponder.content.fluid.DrainScenes; import com.simibubi.create.foundation.ponder.content.fluid.FluidMovementActorScenes; @@ -19,6 +20,8 @@ public class PonderIndex { public static final boolean EDITOR_MODE = false; public static void register() { + PonderRegistry.startRegistration(Create.ID); + // Register storyboards here // (!) Added entries require re-launch // (!) Modifications inside storyboard methods only require re-opening the ui @@ -293,12 +296,14 @@ public class PonderIndex { // Debug scenes, can be found in game via the Brass Hand if (EDITOR_MODE) DebugScenes.registerAll(); + + PonderRegistry.endRegistration(); } public static void registerTags() { // Add items to tags here - PonderRegistry.tags.forTag(PonderTag.KINETIC_RELAYS) + PonderRegistry.TAGS.forTag(PonderTag.KINETIC_RELAYS) .add(AllBlocks.SHAFT) .add(AllBlocks.COGWHEEL) .add(AllBlocks.LARGE_COGWHEEL) @@ -311,7 +316,7 @@ public class PonderIndex { .add(AllBlocks.SEQUENCED_GEARSHIFT) .add(AllBlocks.ROTATION_SPEED_CONTROLLER); - PonderRegistry.tags.forTag(PonderTag.KINETIC_SOURCES) + PonderRegistry.TAGS.forTag(PonderTag.KINETIC_SOURCES) .add(AllBlocks.HAND_CRANK) .add(AllBlocks.COPPER_VALVE_HANDLE) .add(AllBlocks.WATER_WHEEL) @@ -321,7 +326,7 @@ public class PonderIndex { .add(AllBlocks.FLYWHEEL) .add(AllBlocks.CREATIVE_MOTOR); - PonderRegistry.tags.forTag(PonderTag.KINETIC_APPLIANCES) + PonderRegistry.TAGS.forTag(PonderTag.KINETIC_APPLIANCES) .add(AllBlocks.MILLSTONE) .add(AllBlocks.TURNTABLE) .add(AllBlocks.ENCASED_FAN) @@ -342,7 +347,7 @@ public class PonderIndex { .add(AllBlocks.CLOCKWORK_BEARING) .add(AllBlocks.CRUSHING_WHEEL); - PonderRegistry.tags.forTag(PonderTag.FLUIDS) + PonderRegistry.TAGS.forTag(PonderTag.FLUIDS) .add(AllBlocks.FLUID_PIPE) .add(AllBlocks.MECHANICAL_PUMP) .add(AllBlocks.FLUID_VALVE) @@ -354,7 +359,7 @@ public class PonderIndex { .add(AllBlocks.FLUID_TANK) .add(AllBlocks.CREATIVE_FLUID_TANK); - PonderRegistry.tags.forTag(PonderTag.ARM_TARGETS) + PonderRegistry.TAGS.forTag(PonderTag.ARM_TARGETS) .add(AllBlocks.MECHANICAL_ARM) .add(AllItems.BELT_CONNECTOR) .add(AllBlocks.CHUTE) @@ -372,7 +377,7 @@ public class PonderIndex { .add(Blocks.COMPOSTER) .add(Blocks.JUKEBOX); - PonderRegistry.tags.forTag(PonderTag.LOGISTICS) + PonderRegistry.TAGS.forTag(PonderTag.LOGISTICS) .add(AllItems.BELT_CONNECTOR) .add(AllItems.FILTER) .add(AllItems.ATTRIBUTE_FILTER) @@ -391,7 +396,7 @@ public class PonderIndex { .add(AllBlocks.CREATIVE_CRATE) .add(AllBlocks.PORTABLE_STORAGE_INTERFACE); - PonderRegistry.tags.forTag(PonderTag.DECORATION) + PonderRegistry.TAGS.forTag(PonderTag.DECORATION) .add(AllBlocks.ORANGE_NIXIE_TUBE) .add(AllBlocks.CUCKOO_CLOCK) .add(AllBlocks.WOODEN_BRACKET) @@ -400,17 +405,17 @@ public class PonderIndex { .add(AllBlocks.BRASS_CASING) .add(AllBlocks.COPPER_CASING); - PonderRegistry.tags.forTag(PonderTag.CREATIVE) + PonderRegistry.TAGS.forTag(PonderTag.CREATIVE) .add(AllBlocks.CREATIVE_CRATE) .add(AllBlocks.CREATIVE_FLUID_TANK) .add(AllBlocks.CREATIVE_MOTOR); - PonderRegistry.tags.forTag(PonderTag.SAILS) + PonderRegistry.TAGS.forTag(PonderTag.SAILS) .add(AllBlocks.SAIL) .add(AllBlocks.SAIL_FRAME) .add(Blocks.WHITE_WOOL); - PonderRegistry.tags.forTag(PonderTag.REDSTONE) + PonderRegistry.TAGS.forTag(PonderTag.REDSTONE) .add(AllBlocks.ORANGE_NIXIE_TUBE) .add(AllBlocks.REDSTONE_CONTACT) .add(AllBlocks.ANALOG_LEVER) @@ -421,7 +426,7 @@ public class PonderIndex { .add(AllBlocks.POWERED_LATCH) .add(AllBlocks.POWERED_TOGGLE_LATCH); - PonderRegistry.tags.forTag(PonderTag.MOVEMENT_ANCHOR) + PonderRegistry.TAGS.forTag(PonderTag.MOVEMENT_ANCHOR) .add(AllBlocks.MECHANICAL_PISTON) .add(AllBlocks.WINDMILL_BEARING) .add(AllBlocks.MECHANICAL_BEARING) @@ -430,7 +435,7 @@ public class PonderIndex { .add(AllBlocks.GANTRY_CARRIAGE) .add(AllBlocks.CART_ASSEMBLER); - PonderRegistry.tags.forTag(PonderTag.CONTRAPTION_ASSEMBLY) + PonderRegistry.TAGS.forTag(PonderTag.CONTRAPTION_ASSEMBLY) .add(AllBlocks.LINEAR_CHASSIS) .add(AllBlocks.SECONDARY_LINEAR_CHASSIS) .add(AllBlocks.RADIAL_CHASSIS) @@ -439,7 +444,7 @@ public class PonderIndex { .add(Blocks.SLIME_BLOCK) .add(Blocks.HONEY_BLOCK); - PonderRegistry.tags.forTag(PonderTag.CONTRAPTION_ACTOR) + PonderRegistry.TAGS.forTag(PonderTag.CONTRAPTION_ACTOR) .add(AllBlocks.MECHANICAL_HARVESTER) .add(AllBlocks.MECHANICAL_PLOUGH) .add(AllBlocks.MECHANICAL_DRILL) @@ -455,7 +460,6 @@ public class PonderIndex { .add(Blocks.BELL) .add(Blocks.DISPENSER) .add(Blocks.DROPPER); - } } diff --git a/src/main/java/com/simibubi/create/foundation/ponder/content/PonderIndexScreen.java b/src/main/java/com/simibubi/create/foundation/ponder/content/PonderIndexScreen.java index ee2141bb4..5a140bf69 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/content/PonderIndexScreen.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/content/PonderIndexScreen.java @@ -55,7 +55,7 @@ public class PonderIndexScreen extends NavigatableSimiScreen { // chapters.addAll(PonderRegistry.chapters.getAllChapters()); items.clear(); - PonderRegistry.all.keySet() + PonderRegistry.ALL.keySet() .stream() .map(key -> { Item item = ForgeRegistries.ITEMS.getValue(key); @@ -108,7 +108,7 @@ public class PonderIndexScreen extends NavigatableSimiScreen { PonderButton b = new PonderButton(itemCenterX + layout.getX() + 4, itemCenterY + layout.getY() + 4) .showing(new ItemStack(item)) .withCallback((x, y) -> { - if (!PonderRegistry.all.containsKey(item.getRegistryName())) + if (!PonderRegistry.ALL.containsKey(item.getRegistryName())) return; centerScalingOn(x, y); diff --git a/src/main/java/com/simibubi/create/foundation/ponder/content/PonderTag.java b/src/main/java/com/simibubi/create/foundation/ponder/content/PonderTag.java index 2eef66adf..f96f8e5eb 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/content/PonderTag.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/content/PonderTag.java @@ -6,6 +6,7 @@ import java.util.List; import com.mojang.blaze3d.matrix.MatrixStack; import com.simibubi.create.AllBlocks; import com.simibubi.create.AllItems; +import com.simibubi.create.Create; import com.simibubi.create.foundation.gui.GuiGameElement; import com.simibubi.create.foundation.gui.IScreenRenderable; import com.simibubi.create.foundation.ponder.PonderLocalization; @@ -26,65 +27,65 @@ public class PonderTag implements IScreenRenderable { public static final PonderTag - KINETIC_RELAYS = new PonderTag("kinetic_relays").item(AllBlocks.COGWHEEL.get(), true, false) + KINETIC_RELAYS = create("kinetic_relays").item(AllBlocks.COGWHEEL.get(), true, false) .defaultLang("Kinetic Blocks", "Components which help relaying Rotational Force elsewhere") .addToIndex(), - KINETIC_SOURCES = new PonderTag("kinetic_sources").item(AllBlocks.WATER_WHEEL.get(), true, false) + KINETIC_SOURCES = create("kinetic_sources").item(AllBlocks.WATER_WHEEL.get(), true, false) .defaultLang("Kinetic Sources", "Components which generate Rotational Force") .addToIndex(), - KINETIC_APPLIANCES = new PonderTag("kinetic_appliances").item(AllBlocks.MECHANICAL_PRESS.get(), true, false) + KINETIC_APPLIANCES = create("kinetic_appliances").item(AllBlocks.MECHANICAL_PRESS.get(), true, false) .defaultLang("Kinetic Appliances", "Components which make use of Rotational Force") .addToIndex(), - FLUIDS = new PonderTag("fluids").item(AllBlocks.FLUID_PIPE.get(), true, false) + FLUIDS = create("fluids").item(AllBlocks.FLUID_PIPE.get(), true, false) .defaultLang("Fluid Manipulators", "Components which help relaying and making use of Fluids") .addToIndex(), - LOGISTICS = new PonderTag("logistics").item(Blocks.CHEST, true, false) + LOGISTICS = create("logistics").item(Blocks.CHEST, true, false) .defaultLang("Item Transportation", "Components which help moving items around") .addToIndex(), - REDSTONE = new PonderTag("redstone").item(Items.REDSTONE, true, false) + REDSTONE = create("redstone").item(Items.REDSTONE, true, false) .defaultLang("Logic Components", "Components which help with redstone engineering") .addToIndex(), - DECORATION = new PonderTag("decoration").item(Items.ROSE_BUSH, true, false) + DECORATION = create("decoration").item(Items.ROSE_BUSH, true, false) .defaultLang("Aesthetics", "Components used mostly for decorative purposes"), - CREATIVE = new PonderTag("creative").item(AllBlocks.CREATIVE_CRATE.get(), true, false) + CREATIVE = create("creative").item(AllBlocks.CREATIVE_CRATE.get(), true, false) .defaultLang("Creative Mode", "Components not usually available for Survival Mode") .addToIndex(), - MOVEMENT_ANCHOR = new PonderTag("movement_anchor").item(AllBlocks.MECHANICAL_PISTON.get(), true, false) + MOVEMENT_ANCHOR = create("movement_anchor").item(AllBlocks.MECHANICAL_PISTON.get(), true, false) .defaultLang("Movement Anchors", "Components which allow the creation of moving contraptions, animating an attached structure in a variety of ways") .addToIndex(), - CONTRAPTION_ACTOR = new PonderTag("contraption_actor").item(AllBlocks.MECHANICAL_HARVESTER.get(), true, false) + CONTRAPTION_ACTOR = create("contraption_actor").item(AllBlocks.MECHANICAL_HARVESTER.get(), true, false) .defaultLang("Contraption Actors", "Components which expose special behaviour when attached to a moving contraption") .addToIndex(), - CONTRAPTION_ASSEMBLY = new PonderTag("contraption_assembly").item(AllItems.SUPER_GLUE.get(), true, false) + CONTRAPTION_ASSEMBLY = create("contraption_assembly").item(AllItems.SUPER_GLUE.get(), true, false) .defaultLang("Block Attachment Utility", "Tools and Components used to assemble structures moved as an animated Contraption") .addToIndex(), - SAILS = new PonderTag("windmill_sails").item(AllBlocks.WINDMILL_BEARING.get(), true, true) + SAILS = create("windmill_sails").item(AllBlocks.WINDMILL_BEARING.get(), true, true) .defaultLang("Sails for Windmill Bearings", "Blocks that count towards the strength of a Windmill Contraption when assembled. Each of these have equal efficiency in doing so."), - ARM_TARGETS = new PonderTag("arm_targets").item(AllBlocks.MECHANICAL_ARM.get()) + ARM_TARGETS = create("arm_targets").item(AllBlocks.MECHANICAL_ARM.get()) .defaultLang("Targets for Mechanical Arms", "Components which can be selected as inputs or outputs to the Mechanical Arm"); public static class Highlight { - public static final PonderTag ALL = new PonderTag("_all"); + public static final PonderTag ALL = create("_all"); } - private final String id; + private final ResourceLocation id; private ResourceLocation icon; private ItemStack itemIcon = ItemStack.EMPTY; private ItemStack mainItem = ItemStack.EMPTY; @@ -99,11 +100,11 @@ public class PonderTag implements IScreenRenderable { // Builder - public PonderTag(String id) { + public PonderTag(ResourceLocation id) { this.id = id; } - public String getId() { + public ResourceLocation getId() { return id; } @@ -126,7 +127,12 @@ public class PonderTag implements IScreenRenderable { } public PonderTag icon(String location) { - this.icon = new ResourceLocation(com.simibubi.create.Create.ID, "textures/ponder/tag/" + location + ".png"); + this.icon = new ResourceLocation(id.getNamespace(), "textures/ponder/tag/" + location + ".png"); + return this; + } + + public PonderTag icon(ResourceLocation location) { + this.icon = new ResourceLocation(location.getNamespace(), "textures/ponder/tag/" + location.getPath() + ".png"); return this; } @@ -164,6 +170,10 @@ public class PonderTag implements IScreenRenderable { ms.popPose(); } + private static PonderTag create(String id) { + return new PonderTag(Create.asResource(id)); + } + // Load class public static void register() {} diff --git a/src/main/java/com/simibubi/create/foundation/ponder/content/PonderTagRegistry.java b/src/main/java/com/simibubi/create/foundation/ponder/content/PonderTagRegistry.java index 9ff0a6763..f13fc6cdc 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/content/PonderTagRegistry.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/content/PonderTagRegistry.java @@ -73,7 +73,7 @@ public class PonderTagRegistry { } public ItemBuilder add(PonderTag tag) { - items.forEach(i -> PonderRegistry.tags.add(tag, i)); + items.forEach(i -> PonderRegistry.TAGS.add(tag, i)); return this; } @@ -88,7 +88,7 @@ public class PonderTagRegistry { } public TagBuilder add(ResourceLocation item) { - PonderRegistry.tags.add(tag, item); + PonderRegistry.TAGS.add(tag, item); return this; } diff --git a/src/main/java/com/simibubi/create/foundation/ponder/content/PonderTagScreen.java b/src/main/java/com/simibubi/create/foundation/ponder/content/PonderTagScreen.java index 5b85fa1e0..203c4890f 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/content/PonderTagScreen.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/content/PonderTagScreen.java @@ -60,7 +60,7 @@ public class PonderTagScreen extends NavigatableSimiScreen { // items items.clear(); - PonderRegistry.tags.getItems(tag) + PonderRegistry.TAGS.getItems(tag) .stream() .map(key -> { Item item = ForgeRegistries.ITEMS.getValue(key); @@ -87,7 +87,7 @@ public class PonderTagScreen extends NavigatableSimiScreen { PonderButton b = new PonderButton(itemCenterX + layout.getX() + 4, itemCenterY + layout.getY() + 4) .showing(new ItemStack(i)); - if (PonderRegistry.all.containsKey(i.getRegistryName())) { + if (PonderRegistry.ALL.containsKey(i.getRegistryName())) { b.withCallback((mouseX, mouseY) -> { centerScalingOn(mouseX, mouseY); ScreenOpener.transitionTo(PonderUI.of(new ItemStack(i), tag)); @@ -115,7 +115,7 @@ public class PonderTagScreen extends NavigatableSimiScreen { PonderButton b = new PonderButton(itemCenterX - layout.getTotalWidth() / 2 - 42, itemCenterY - 10) .showing(tag.getMainItem()); - if (PonderRegistry.all.containsKey(registryName)) { + if (PonderRegistry.ALL.containsKey(registryName)) { b.withCallback((mouseX, mouseY) -> { centerScalingOn(mouseX, mouseY); ScreenOpener.transitionTo(PonderUI.of(tag.getMainItem(), tag)); @@ -135,7 +135,7 @@ public class PonderTagScreen extends NavigatableSimiScreen { // chapters chapters.clear(); - chapters.addAll(PonderRegistry.tags.getChapters(tag)); + chapters.addAll(PonderRegistry.TAGS.getChapters(tag)); rowCount = MathHelper.clamp((int) Math.ceil(chapters.size() / 3f), 1, 3); layout = LayoutHelper.centeredHorizontal(chapters.size(), rowCount, 200, 38, 16); diff --git a/src/main/java/com/simibubi/create/foundation/ponder/content/SharedText.java b/src/main/java/com/simibubi/create/foundation/ponder/content/SharedText.java index bd83c5bd6..7875705ac 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/content/SharedText.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/content/SharedText.java @@ -1,7 +1,10 @@ package com.simibubi.create.foundation.ponder.content; +import com.simibubi.create.Create; import com.simibubi.create.foundation.ponder.PonderLocalization; +import net.minecraft.util.ResourceLocation; + public class SharedText { public static void gatherText() { @@ -18,15 +21,18 @@ public class SharedText { add("movement_anchors", "With the help of Chassis or Super Glue, larger structures can be moved."); add("behaviour_modify_wrench", "This behaviour can be modified using a Wrench"); add("storage_on_contraption", "Inventories attached to the Contraption will pick up their drops automatically"); - } - public static String get(String key) { + public static String get(ResourceLocation key) { return PonderLocalization.getShared(key); } - private static void add(String k, String v) { + public static void add(ResourceLocation k, String v) { PonderLocalization.registerShared(k, v); } + private static void add(String k, String v) { + add(Create.asResource(k), v); + } + } diff --git a/src/main/java/com/simibubi/create/foundation/ponder/elements/InputWindowElement.java b/src/main/java/com/simibubi/create/foundation/ponder/elements/InputWindowElement.java index b7e2b9e10..b99fb8b1b 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/elements/InputWindowElement.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/elements/InputWindowElement.java @@ -3,6 +3,7 @@ package com.simibubi.create.foundation.ponder.elements; import com.mojang.blaze3d.matrix.MatrixStack; import com.mojang.blaze3d.systems.RenderSystem; import com.simibubi.create.AllItems; +import com.simibubi.create.Create; import com.simibubi.create.foundation.gui.AllIcons; import com.simibubi.create.foundation.gui.GuiGameElement; import com.simibubi.create.foundation.ponder.PonderLocalization; @@ -14,13 +15,14 @@ import com.simibubi.create.foundation.utility.Pointing; import net.minecraft.client.gui.FontRenderer; import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; import net.minecraft.util.math.vector.Vector2f; import net.minecraft.util.math.vector.Vector3d; public class InputWindowElement extends AnimatedOverlayElement { private Pointing direction; - String key; + ResourceLocation key; AllIcons icon; ItemStack item = ItemStack.EMPTY; private Vector3d sceneSpace; @@ -69,12 +71,12 @@ public class InputWindowElement extends AnimatedOverlayElement { } public InputWindowElement whileSneaking() { - key = "sneak_and"; + key = Create.asResource("sneak_and"); return this; } public InputWindowElement whileCTRL() { - key = "ctrl_and"; + key = Create.asResource("ctrl_and"); return this; } diff --git a/src/main/java/com/simibubi/create/foundation/ponder/elements/TextWindowElement.java b/src/main/java/com/simibubi/create/foundation/ponder/elements/TextWindowElement.java index 34c20efdc..aef8a7a25 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/elements/TextWindowElement.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/elements/TextWindowElement.java @@ -12,6 +12,7 @@ import com.simibubi.create.foundation.ponder.PonderUI; import com.simibubi.create.foundation.ponder.content.PonderPalette; import com.simibubi.create.foundation.utility.ColorHelper; +import net.minecraft.util.ResourceLocation; import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.vector.Matrix4f; import net.minecraft.util.math.vector.Vector2f; @@ -65,11 +66,15 @@ public class TextWindowElement extends AnimatedOverlayElement { return this; } - public Builder sharedText(String key) { + public Builder sharedText(ResourceLocation key) { textGetter = () -> PonderLocalization.getShared(key); return this; } + public Builder sharedText(String key) { + return sharedText(new ResourceLocation(scene.getNamespace(), key)); + } + public Builder placeNearTarget() { TextWindowElement.this.nearScene = true; return this; diff --git a/src/main/resources/ponder/adjustable_pulse_repeater.nbt b/src/main/resources/assets/create/ponder/adjustable_pulse_repeater.nbt similarity index 100% rename from src/main/resources/ponder/adjustable_pulse_repeater.nbt rename to src/main/resources/assets/create/ponder/adjustable_pulse_repeater.nbt diff --git a/src/main/resources/ponder/adjustable_repeater.nbt b/src/main/resources/assets/create/ponder/adjustable_repeater.nbt similarity index 100% rename from src/main/resources/ponder/adjustable_repeater.nbt rename to src/main/resources/assets/create/ponder/adjustable_repeater.nbt diff --git a/src/main/resources/ponder/analog_lever.nbt b/src/main/resources/assets/create/ponder/analog_lever.nbt similarity index 100% rename from src/main/resources/ponder/analog_lever.nbt rename to src/main/resources/assets/create/ponder/analog_lever.nbt diff --git a/src/main/resources/ponder/basin.nbt b/src/main/resources/assets/create/ponder/basin.nbt similarity index 100% rename from src/main/resources/ponder/basin.nbt rename to src/main/resources/assets/create/ponder/basin.nbt diff --git a/src/main/resources/ponder/belt/connect.nbt b/src/main/resources/assets/create/ponder/belt/connect.nbt similarity index 100% rename from src/main/resources/ponder/belt/connect.nbt rename to src/main/resources/assets/create/ponder/belt/connect.nbt diff --git a/src/main/resources/ponder/belt/directions.nbt b/src/main/resources/assets/create/ponder/belt/directions.nbt similarity index 100% rename from src/main/resources/ponder/belt/directions.nbt rename to src/main/resources/assets/create/ponder/belt/directions.nbt diff --git a/src/main/resources/ponder/belt/encasing.nbt b/src/main/resources/assets/create/ponder/belt/encasing.nbt similarity index 100% rename from src/main/resources/ponder/belt/encasing.nbt rename to src/main/resources/assets/create/ponder/belt/encasing.nbt diff --git a/src/main/resources/ponder/belt/transport.nbt b/src/main/resources/assets/create/ponder/belt/transport.nbt similarity index 100% rename from src/main/resources/ponder/belt/transport.nbt rename to src/main/resources/assets/create/ponder/belt/transport.nbt diff --git a/src/main/resources/ponder/blaze_burner.nbt b/src/main/resources/assets/create/ponder/blaze_burner.nbt similarity index 100% rename from src/main/resources/ponder/blaze_burner.nbt rename to src/main/resources/assets/create/ponder/blaze_burner.nbt diff --git a/src/main/resources/ponder/cart_assembler/anchor.nbt b/src/main/resources/assets/create/ponder/cart_assembler/anchor.nbt similarity index 100% rename from src/main/resources/ponder/cart_assembler/anchor.nbt rename to src/main/resources/assets/create/ponder/cart_assembler/anchor.nbt diff --git a/src/main/resources/ponder/cart_assembler/dual.nbt b/src/main/resources/assets/create/ponder/cart_assembler/dual.nbt similarity index 100% rename from src/main/resources/ponder/cart_assembler/dual.nbt rename to src/main/resources/assets/create/ponder/cart_assembler/dual.nbt diff --git a/src/main/resources/ponder/cart_assembler/modes.nbt b/src/main/resources/assets/create/ponder/cart_assembler/modes.nbt similarity index 100% rename from src/main/resources/ponder/cart_assembler/modes.nbt rename to src/main/resources/assets/create/ponder/cart_assembler/modes.nbt diff --git a/src/main/resources/ponder/cart_assembler/rails.nbt b/src/main/resources/assets/create/ponder/cart_assembler/rails.nbt similarity index 100% rename from src/main/resources/ponder/cart_assembler/rails.nbt rename to src/main/resources/assets/create/ponder/cart_assembler/rails.nbt diff --git a/src/main/resources/ponder/chain_drive/gearshift.nbt b/src/main/resources/assets/create/ponder/chain_drive/gearshift.nbt similarity index 100% rename from src/main/resources/ponder/chain_drive/gearshift.nbt rename to src/main/resources/assets/create/ponder/chain_drive/gearshift.nbt diff --git a/src/main/resources/ponder/chain_drive/relay.nbt b/src/main/resources/assets/create/ponder/chain_drive/relay.nbt similarity index 100% rename from src/main/resources/ponder/chain_drive/relay.nbt rename to src/main/resources/assets/create/ponder/chain_drive/relay.nbt diff --git a/src/main/resources/ponder/chassis/linear_attachment.nbt b/src/main/resources/assets/create/ponder/chassis/linear_attachment.nbt similarity index 100% rename from src/main/resources/ponder/chassis/linear_attachment.nbt rename to src/main/resources/assets/create/ponder/chassis/linear_attachment.nbt diff --git a/src/main/resources/ponder/chassis/linear_group.nbt b/src/main/resources/assets/create/ponder/chassis/linear_group.nbt similarity index 100% rename from src/main/resources/ponder/chassis/linear_group.nbt rename to src/main/resources/assets/create/ponder/chassis/linear_group.nbt diff --git a/src/main/resources/ponder/chassis/radial.nbt b/src/main/resources/assets/create/ponder/chassis/radial.nbt similarity index 100% rename from src/main/resources/ponder/chassis/radial.nbt rename to src/main/resources/assets/create/ponder/chassis/radial.nbt diff --git a/src/main/resources/ponder/chute/downward.nbt b/src/main/resources/assets/create/ponder/chute/downward.nbt similarity index 100% rename from src/main/resources/ponder/chute/downward.nbt rename to src/main/resources/assets/create/ponder/chute/downward.nbt diff --git a/src/main/resources/ponder/chute/smart.nbt b/src/main/resources/assets/create/ponder/chute/smart.nbt similarity index 100% rename from src/main/resources/ponder/chute/smart.nbt rename to src/main/resources/assets/create/ponder/chute/smart.nbt diff --git a/src/main/resources/ponder/chute/upward.nbt b/src/main/resources/assets/create/ponder/chute/upward.nbt similarity index 100% rename from src/main/resources/ponder/chute/upward.nbt rename to src/main/resources/assets/create/ponder/chute/upward.nbt diff --git a/src/main/resources/ponder/clockwork_bearing.nbt b/src/main/resources/assets/create/ponder/clockwork_bearing.nbt similarity index 100% rename from src/main/resources/ponder/clockwork_bearing.nbt rename to src/main/resources/assets/create/ponder/clockwork_bearing.nbt diff --git a/src/main/resources/ponder/clutch.nbt b/src/main/resources/assets/create/ponder/clutch.nbt similarity index 100% rename from src/main/resources/ponder/clutch.nbt rename to src/main/resources/assets/create/ponder/clutch.nbt diff --git a/src/main/resources/ponder/cog/large.nbt b/src/main/resources/assets/create/ponder/cog/large.nbt similarity index 100% rename from src/main/resources/ponder/cog/large.nbt rename to src/main/resources/assets/create/ponder/cog/large.nbt diff --git a/src/main/resources/ponder/cog/small.nbt b/src/main/resources/assets/create/ponder/cog/small.nbt similarity index 100% rename from src/main/resources/ponder/cog/small.nbt rename to src/main/resources/assets/create/ponder/cog/small.nbt diff --git a/src/main/resources/ponder/cog/speedup.nbt b/src/main/resources/assets/create/ponder/cog/speedup.nbt similarity index 100% rename from src/main/resources/ponder/cog/speedup.nbt rename to src/main/resources/assets/create/ponder/cog/speedup.nbt diff --git a/src/main/resources/ponder/creative_motor.nbt b/src/main/resources/assets/create/ponder/creative_motor.nbt similarity index 100% rename from src/main/resources/ponder/creative_motor.nbt rename to src/main/resources/assets/create/ponder/creative_motor.nbt diff --git a/src/main/resources/ponder/crushing_wheel.nbt b/src/main/resources/assets/create/ponder/crushing_wheel.nbt similarity index 100% rename from src/main/resources/ponder/crushing_wheel.nbt rename to src/main/resources/assets/create/ponder/crushing_wheel.nbt diff --git a/src/main/resources/ponder/debug/scene_1.nbt b/src/main/resources/assets/create/ponder/debug/scene_1.nbt similarity index 100% rename from src/main/resources/ponder/debug/scene_1.nbt rename to src/main/resources/assets/create/ponder/debug/scene_1.nbt diff --git a/src/main/resources/ponder/debug/scene_10.nbt b/src/main/resources/assets/create/ponder/debug/scene_10.nbt similarity index 100% rename from src/main/resources/ponder/debug/scene_10.nbt rename to src/main/resources/assets/create/ponder/debug/scene_10.nbt diff --git a/src/main/resources/ponder/debug/scene_2.nbt b/src/main/resources/assets/create/ponder/debug/scene_2.nbt similarity index 100% rename from src/main/resources/ponder/debug/scene_2.nbt rename to src/main/resources/assets/create/ponder/debug/scene_2.nbt diff --git a/src/main/resources/ponder/debug/scene_3.nbt b/src/main/resources/assets/create/ponder/debug/scene_3.nbt similarity index 100% rename from src/main/resources/ponder/debug/scene_3.nbt rename to src/main/resources/assets/create/ponder/debug/scene_3.nbt diff --git a/src/main/resources/ponder/debug/scene_4.nbt b/src/main/resources/assets/create/ponder/debug/scene_4.nbt similarity index 100% rename from src/main/resources/ponder/debug/scene_4.nbt rename to src/main/resources/assets/create/ponder/debug/scene_4.nbt diff --git a/src/main/resources/ponder/debug/scene_5.nbt b/src/main/resources/assets/create/ponder/debug/scene_5.nbt similarity index 100% rename from src/main/resources/ponder/debug/scene_5.nbt rename to src/main/resources/assets/create/ponder/debug/scene_5.nbt diff --git a/src/main/resources/ponder/debug/scene_6.nbt b/src/main/resources/assets/create/ponder/debug/scene_6.nbt similarity index 100% rename from src/main/resources/ponder/debug/scene_6.nbt rename to src/main/resources/assets/create/ponder/debug/scene_6.nbt diff --git a/src/main/resources/ponder/debug/scene_7.nbt b/src/main/resources/assets/create/ponder/debug/scene_7.nbt similarity index 100% rename from src/main/resources/ponder/debug/scene_7.nbt rename to src/main/resources/assets/create/ponder/debug/scene_7.nbt diff --git a/src/main/resources/ponder/debug/scene_8.nbt b/src/main/resources/assets/create/ponder/debug/scene_8.nbt similarity index 100% rename from src/main/resources/ponder/debug/scene_8.nbt rename to src/main/resources/assets/create/ponder/debug/scene_8.nbt diff --git a/src/main/resources/ponder/debug/scene_9.nbt b/src/main/resources/assets/create/ponder/debug/scene_9.nbt similarity index 100% rename from src/main/resources/ponder/debug/scene_9.nbt rename to src/main/resources/assets/create/ponder/debug/scene_9.nbt diff --git a/src/main/resources/ponder/deployer/contraption.nbt b/src/main/resources/assets/create/ponder/deployer/contraption.nbt similarity index 100% rename from src/main/resources/ponder/deployer/contraption.nbt rename to src/main/resources/assets/create/ponder/deployer/contraption.nbt diff --git a/src/main/resources/ponder/deployer/filter.nbt b/src/main/resources/assets/create/ponder/deployer/filter.nbt similarity index 100% rename from src/main/resources/ponder/deployer/filter.nbt rename to src/main/resources/assets/create/ponder/deployer/filter.nbt diff --git a/src/main/resources/ponder/deployer/modes.nbt b/src/main/resources/assets/create/ponder/deployer/modes.nbt similarity index 100% rename from src/main/resources/ponder/deployer/modes.nbt rename to src/main/resources/assets/create/ponder/deployer/modes.nbt diff --git a/src/main/resources/ponder/deployer/processing.nbt b/src/main/resources/assets/create/ponder/deployer/processing.nbt similarity index 100% rename from src/main/resources/ponder/deployer/processing.nbt rename to src/main/resources/assets/create/ponder/deployer/processing.nbt diff --git a/src/main/resources/ponder/deployer/redstone.nbt b/src/main/resources/assets/create/ponder/deployer/redstone.nbt similarity index 100% rename from src/main/resources/ponder/deployer/redstone.nbt rename to src/main/resources/assets/create/ponder/deployer/redstone.nbt diff --git a/src/main/resources/ponder/depot.nbt b/src/main/resources/assets/create/ponder/depot.nbt similarity index 100% rename from src/main/resources/ponder/depot.nbt rename to src/main/resources/assets/create/ponder/depot.nbt diff --git a/src/main/resources/ponder/empty_blaze_burner.nbt b/src/main/resources/assets/create/ponder/empty_blaze_burner.nbt similarity index 100% rename from src/main/resources/ponder/empty_blaze_burner.nbt rename to src/main/resources/assets/create/ponder/empty_blaze_burner.nbt diff --git a/src/main/resources/ponder/fan/direction.nbt b/src/main/resources/assets/create/ponder/fan/direction.nbt similarity index 100% rename from src/main/resources/ponder/fan/direction.nbt rename to src/main/resources/assets/create/ponder/fan/direction.nbt diff --git a/src/main/resources/ponder/fan/processing.nbt b/src/main/resources/assets/create/ponder/fan/processing.nbt similarity index 100% rename from src/main/resources/ponder/fan/processing.nbt rename to src/main/resources/assets/create/ponder/fan/processing.nbt diff --git a/src/main/resources/ponder/fan/source.nbt b/src/main/resources/assets/create/ponder/fan/source.nbt similarity index 100% rename from src/main/resources/ponder/fan/source.nbt rename to src/main/resources/assets/create/ponder/fan/source.nbt diff --git a/src/main/resources/ponder/fluid_pipe/encasing.nbt b/src/main/resources/assets/create/ponder/fluid_pipe/encasing.nbt similarity index 100% rename from src/main/resources/ponder/fluid_pipe/encasing.nbt rename to src/main/resources/assets/create/ponder/fluid_pipe/encasing.nbt diff --git a/src/main/resources/ponder/fluid_pipe/flow.nbt b/src/main/resources/assets/create/ponder/fluid_pipe/flow.nbt similarity index 100% rename from src/main/resources/ponder/fluid_pipe/flow.nbt rename to src/main/resources/assets/create/ponder/fluid_pipe/flow.nbt diff --git a/src/main/resources/ponder/fluid_pipe/interaction.nbt b/src/main/resources/assets/create/ponder/fluid_pipe/interaction.nbt similarity index 100% rename from src/main/resources/ponder/fluid_pipe/interaction.nbt rename to src/main/resources/assets/create/ponder/fluid_pipe/interaction.nbt diff --git a/src/main/resources/ponder/fluid_tank/sizes.nbt b/src/main/resources/assets/create/ponder/fluid_tank/sizes.nbt similarity index 100% rename from src/main/resources/ponder/fluid_tank/sizes.nbt rename to src/main/resources/assets/create/ponder/fluid_tank/sizes.nbt diff --git a/src/main/resources/ponder/fluid_tank/sizes_creative.nbt b/src/main/resources/assets/create/ponder/fluid_tank/sizes_creative.nbt similarity index 100% rename from src/main/resources/ponder/fluid_tank/sizes_creative.nbt rename to src/main/resources/assets/create/ponder/fluid_tank/sizes_creative.nbt diff --git a/src/main/resources/ponder/fluid_tank/storage.nbt b/src/main/resources/assets/create/ponder/fluid_tank/storage.nbt similarity index 100% rename from src/main/resources/ponder/fluid_tank/storage.nbt rename to src/main/resources/assets/create/ponder/fluid_tank/storage.nbt diff --git a/src/main/resources/ponder/fluid_tank/storage_creative.nbt b/src/main/resources/assets/create/ponder/fluid_tank/storage_creative.nbt similarity index 100% rename from src/main/resources/ponder/fluid_tank/storage_creative.nbt rename to src/main/resources/assets/create/ponder/fluid_tank/storage_creative.nbt diff --git a/src/main/resources/ponder/fluid_valve.nbt b/src/main/resources/assets/create/ponder/fluid_valve.nbt similarity index 100% rename from src/main/resources/ponder/fluid_valve.nbt rename to src/main/resources/assets/create/ponder/fluid_valve.nbt diff --git a/src/main/resources/ponder/funnels/brass.nbt b/src/main/resources/assets/create/ponder/funnels/brass.nbt similarity index 100% rename from src/main/resources/ponder/funnels/brass.nbt rename to src/main/resources/assets/create/ponder/funnels/brass.nbt diff --git a/src/main/resources/ponder/funnels/compat.nbt b/src/main/resources/assets/create/ponder/funnels/compat.nbt similarity index 100% rename from src/main/resources/ponder/funnels/compat.nbt rename to src/main/resources/assets/create/ponder/funnels/compat.nbt diff --git a/src/main/resources/ponder/funnels/direction.nbt b/src/main/resources/assets/create/ponder/funnels/direction.nbt similarity index 100% rename from src/main/resources/ponder/funnels/direction.nbt rename to src/main/resources/assets/create/ponder/funnels/direction.nbt diff --git a/src/main/resources/ponder/funnels/intro.nbt b/src/main/resources/assets/create/ponder/funnels/intro.nbt similarity index 100% rename from src/main/resources/ponder/funnels/intro.nbt rename to src/main/resources/assets/create/ponder/funnels/intro.nbt diff --git a/src/main/resources/ponder/funnels/redstone.nbt b/src/main/resources/assets/create/ponder/funnels/redstone.nbt similarity index 100% rename from src/main/resources/ponder/funnels/redstone.nbt rename to src/main/resources/assets/create/ponder/funnels/redstone.nbt diff --git a/src/main/resources/ponder/funnels/transposer.nbt b/src/main/resources/assets/create/ponder/funnels/transposer.nbt similarity index 100% rename from src/main/resources/ponder/funnels/transposer.nbt rename to src/main/resources/assets/create/ponder/funnels/transposer.nbt diff --git a/src/main/resources/ponder/furnace_engine.nbt b/src/main/resources/assets/create/ponder/furnace_engine.nbt similarity index 100% rename from src/main/resources/ponder/furnace_engine.nbt rename to src/main/resources/assets/create/ponder/furnace_engine.nbt diff --git a/src/main/resources/ponder/gantry/direction.nbt b/src/main/resources/assets/create/ponder/gantry/direction.nbt similarity index 100% rename from src/main/resources/ponder/gantry/direction.nbt rename to src/main/resources/assets/create/ponder/gantry/direction.nbt diff --git a/src/main/resources/ponder/gantry/intro.nbt b/src/main/resources/assets/create/ponder/gantry/intro.nbt similarity index 100% rename from src/main/resources/ponder/gantry/intro.nbt rename to src/main/resources/assets/create/ponder/gantry/intro.nbt diff --git a/src/main/resources/ponder/gantry/redstone.nbt b/src/main/resources/assets/create/ponder/gantry/redstone.nbt similarity index 100% rename from src/main/resources/ponder/gantry/redstone.nbt rename to src/main/resources/assets/create/ponder/gantry/redstone.nbt diff --git a/src/main/resources/ponder/gantry/subgantry.nbt b/src/main/resources/assets/create/ponder/gantry/subgantry.nbt similarity index 100% rename from src/main/resources/ponder/gantry/subgantry.nbt rename to src/main/resources/assets/create/ponder/gantry/subgantry.nbt diff --git a/src/main/resources/ponder/gauges.nbt b/src/main/resources/assets/create/ponder/gauges.nbt similarity index 100% rename from src/main/resources/ponder/gauges.nbt rename to src/main/resources/assets/create/ponder/gauges.nbt diff --git a/src/main/resources/ponder/gearbox.nbt b/src/main/resources/assets/create/ponder/gearbox.nbt similarity index 100% rename from src/main/resources/ponder/gearbox.nbt rename to src/main/resources/assets/create/ponder/gearbox.nbt diff --git a/src/main/resources/ponder/gearshift.nbt b/src/main/resources/assets/create/ponder/gearshift.nbt similarity index 100% rename from src/main/resources/ponder/gearshift.nbt rename to src/main/resources/assets/create/ponder/gearshift.nbt diff --git a/src/main/resources/ponder/hand_crank.nbt b/src/main/resources/assets/create/ponder/hand_crank.nbt similarity index 100% rename from src/main/resources/ponder/hand_crank.nbt rename to src/main/resources/assets/create/ponder/hand_crank.nbt diff --git a/src/main/resources/ponder/harvester.nbt b/src/main/resources/assets/create/ponder/harvester.nbt similarity index 100% rename from src/main/resources/ponder/harvester.nbt rename to src/main/resources/assets/create/ponder/harvester.nbt diff --git a/src/main/resources/ponder/hose_pulley/infinite.nbt b/src/main/resources/assets/create/ponder/hose_pulley/infinite.nbt similarity index 100% rename from src/main/resources/ponder/hose_pulley/infinite.nbt rename to src/main/resources/assets/create/ponder/hose_pulley/infinite.nbt diff --git a/src/main/resources/ponder/hose_pulley/intro.nbt b/src/main/resources/assets/create/ponder/hose_pulley/intro.nbt similarity index 100% rename from src/main/resources/ponder/hose_pulley/intro.nbt rename to src/main/resources/assets/create/ponder/hose_pulley/intro.nbt diff --git a/src/main/resources/ponder/hose_pulley/level.nbt b/src/main/resources/assets/create/ponder/hose_pulley/level.nbt similarity index 100% rename from src/main/resources/ponder/hose_pulley/level.nbt rename to src/main/resources/assets/create/ponder/hose_pulley/level.nbt diff --git a/src/main/resources/ponder/item_drain.nbt b/src/main/resources/assets/create/ponder/item_drain.nbt similarity index 100% rename from src/main/resources/ponder/item_drain.nbt rename to src/main/resources/assets/create/ponder/item_drain.nbt diff --git a/src/main/resources/ponder/mechanical_arm/filter.nbt b/src/main/resources/assets/create/ponder/mechanical_arm/filter.nbt similarity index 100% rename from src/main/resources/ponder/mechanical_arm/filter.nbt rename to src/main/resources/assets/create/ponder/mechanical_arm/filter.nbt diff --git a/src/main/resources/ponder/mechanical_arm/modes.nbt b/src/main/resources/assets/create/ponder/mechanical_arm/modes.nbt similarity index 100% rename from src/main/resources/ponder/mechanical_arm/modes.nbt rename to src/main/resources/assets/create/ponder/mechanical_arm/modes.nbt diff --git a/src/main/resources/ponder/mechanical_arm/redstone.nbt b/src/main/resources/assets/create/ponder/mechanical_arm/redstone.nbt similarity index 100% rename from src/main/resources/ponder/mechanical_arm/redstone.nbt rename to src/main/resources/assets/create/ponder/mechanical_arm/redstone.nbt diff --git a/src/main/resources/ponder/mechanical_arm/setup.nbt b/src/main/resources/assets/create/ponder/mechanical_arm/setup.nbt similarity index 100% rename from src/main/resources/ponder/mechanical_arm/setup.nbt rename to src/main/resources/assets/create/ponder/mechanical_arm/setup.nbt diff --git a/src/main/resources/ponder/mechanical_bearing/anchor.nbt b/src/main/resources/assets/create/ponder/mechanical_bearing/anchor.nbt similarity index 100% rename from src/main/resources/ponder/mechanical_bearing/anchor.nbt rename to src/main/resources/assets/create/ponder/mechanical_bearing/anchor.nbt diff --git a/src/main/resources/ponder/mechanical_bearing/modes.nbt b/src/main/resources/assets/create/ponder/mechanical_bearing/modes.nbt similarity index 100% rename from src/main/resources/ponder/mechanical_bearing/modes.nbt rename to src/main/resources/assets/create/ponder/mechanical_bearing/modes.nbt diff --git a/src/main/resources/ponder/mechanical_bearing/stabilized.nbt b/src/main/resources/assets/create/ponder/mechanical_bearing/stabilized.nbt similarity index 100% rename from src/main/resources/ponder/mechanical_bearing/stabilized.nbt rename to src/main/resources/assets/create/ponder/mechanical_bearing/stabilized.nbt diff --git a/src/main/resources/ponder/mechanical_crafter/connect.nbt b/src/main/resources/assets/create/ponder/mechanical_crafter/connect.nbt similarity index 100% rename from src/main/resources/ponder/mechanical_crafter/connect.nbt rename to src/main/resources/assets/create/ponder/mechanical_crafter/connect.nbt diff --git a/src/main/resources/ponder/mechanical_crafter/covers.nbt b/src/main/resources/assets/create/ponder/mechanical_crafter/covers.nbt similarity index 100% rename from src/main/resources/ponder/mechanical_crafter/covers.nbt rename to src/main/resources/assets/create/ponder/mechanical_crafter/covers.nbt diff --git a/src/main/resources/ponder/mechanical_crafter/setup.nbt b/src/main/resources/assets/create/ponder/mechanical_crafter/setup.nbt similarity index 100% rename from src/main/resources/ponder/mechanical_crafter/setup.nbt rename to src/main/resources/assets/create/ponder/mechanical_crafter/setup.nbt diff --git a/src/main/resources/ponder/mechanical_drill/breaker.nbt b/src/main/resources/assets/create/ponder/mechanical_drill/breaker.nbt similarity index 100% rename from src/main/resources/ponder/mechanical_drill/breaker.nbt rename to src/main/resources/assets/create/ponder/mechanical_drill/breaker.nbt diff --git a/src/main/resources/ponder/mechanical_drill/contraption.nbt b/src/main/resources/assets/create/ponder/mechanical_drill/contraption.nbt similarity index 100% rename from src/main/resources/ponder/mechanical_drill/contraption.nbt rename to src/main/resources/assets/create/ponder/mechanical_drill/contraption.nbt diff --git a/src/main/resources/ponder/mechanical_mixer/mixing.nbt b/src/main/resources/assets/create/ponder/mechanical_mixer/mixing.nbt similarity index 100% rename from src/main/resources/ponder/mechanical_mixer/mixing.nbt rename to src/main/resources/assets/create/ponder/mechanical_mixer/mixing.nbt diff --git a/src/main/resources/ponder/mechanical_piston/anchor.nbt b/src/main/resources/assets/create/ponder/mechanical_piston/anchor.nbt similarity index 100% rename from src/main/resources/ponder/mechanical_piston/anchor.nbt rename to src/main/resources/assets/create/ponder/mechanical_piston/anchor.nbt diff --git a/src/main/resources/ponder/mechanical_piston/modes.nbt b/src/main/resources/assets/create/ponder/mechanical_piston/modes.nbt similarity index 100% rename from src/main/resources/ponder/mechanical_piston/modes.nbt rename to src/main/resources/assets/create/ponder/mechanical_piston/modes.nbt diff --git a/src/main/resources/ponder/mechanical_piston/piston_pole.nbt b/src/main/resources/assets/create/ponder/mechanical_piston/piston_pole.nbt similarity index 100% rename from src/main/resources/ponder/mechanical_piston/piston_pole.nbt rename to src/main/resources/assets/create/ponder/mechanical_piston/piston_pole.nbt diff --git a/src/main/resources/ponder/mechanical_press/compacting.nbt b/src/main/resources/assets/create/ponder/mechanical_press/compacting.nbt similarity index 100% rename from src/main/resources/ponder/mechanical_press/compacting.nbt rename to src/main/resources/assets/create/ponder/mechanical_press/compacting.nbt diff --git a/src/main/resources/ponder/mechanical_press/pressing.nbt b/src/main/resources/assets/create/ponder/mechanical_press/pressing.nbt similarity index 100% rename from src/main/resources/ponder/mechanical_press/pressing.nbt rename to src/main/resources/assets/create/ponder/mechanical_press/pressing.nbt diff --git a/src/main/resources/ponder/mechanical_pump/flow.nbt b/src/main/resources/assets/create/ponder/mechanical_pump/flow.nbt similarity index 100% rename from src/main/resources/ponder/mechanical_pump/flow.nbt rename to src/main/resources/assets/create/ponder/mechanical_pump/flow.nbt diff --git a/src/main/resources/ponder/mechanical_pump/speed.nbt b/src/main/resources/assets/create/ponder/mechanical_pump/speed.nbt similarity index 100% rename from src/main/resources/ponder/mechanical_pump/speed.nbt rename to src/main/resources/assets/create/ponder/mechanical_pump/speed.nbt diff --git a/src/main/resources/ponder/mechanical_saw/breaker.nbt b/src/main/resources/assets/create/ponder/mechanical_saw/breaker.nbt similarity index 100% rename from src/main/resources/ponder/mechanical_saw/breaker.nbt rename to src/main/resources/assets/create/ponder/mechanical_saw/breaker.nbt diff --git a/src/main/resources/ponder/mechanical_saw/contraption.nbt b/src/main/resources/assets/create/ponder/mechanical_saw/contraption.nbt similarity index 100% rename from src/main/resources/ponder/mechanical_saw/contraption.nbt rename to src/main/resources/assets/create/ponder/mechanical_saw/contraption.nbt diff --git a/src/main/resources/ponder/mechanical_saw/processing.nbt b/src/main/resources/assets/create/ponder/mechanical_saw/processing.nbt similarity index 100% rename from src/main/resources/ponder/mechanical_saw/processing.nbt rename to src/main/resources/assets/create/ponder/mechanical_saw/processing.nbt diff --git a/src/main/resources/ponder/millstone.nbt b/src/main/resources/assets/create/ponder/millstone.nbt similarity index 100% rename from src/main/resources/ponder/millstone.nbt rename to src/main/resources/assets/create/ponder/millstone.nbt diff --git a/src/main/resources/ponder/nixie_tube.nbt b/src/main/resources/assets/create/ponder/nixie_tube.nbt similarity index 100% rename from src/main/resources/ponder/nixie_tube.nbt rename to src/main/resources/assets/create/ponder/nixie_tube.nbt diff --git a/src/main/resources/ponder/plough.nbt b/src/main/resources/assets/create/ponder/plough.nbt similarity index 100% rename from src/main/resources/ponder/plough.nbt rename to src/main/resources/assets/create/ponder/plough.nbt diff --git a/src/main/resources/ponder/portable_interface/redstone.nbt b/src/main/resources/assets/create/ponder/portable_interface/redstone.nbt similarity index 100% rename from src/main/resources/ponder/portable_interface/redstone.nbt rename to src/main/resources/assets/create/ponder/portable_interface/redstone.nbt diff --git a/src/main/resources/ponder/portable_interface/redstone_fluid.nbt b/src/main/resources/assets/create/ponder/portable_interface/redstone_fluid.nbt similarity index 100% rename from src/main/resources/ponder/portable_interface/redstone_fluid.nbt rename to src/main/resources/assets/create/ponder/portable_interface/redstone_fluid.nbt diff --git a/src/main/resources/ponder/portable_interface/transfer.nbt b/src/main/resources/assets/create/ponder/portable_interface/transfer.nbt similarity index 100% rename from src/main/resources/ponder/portable_interface/transfer.nbt rename to src/main/resources/assets/create/ponder/portable_interface/transfer.nbt diff --git a/src/main/resources/ponder/portable_interface/transfer_fluid.nbt b/src/main/resources/assets/create/ponder/portable_interface/transfer_fluid.nbt similarity index 100% rename from src/main/resources/ponder/portable_interface/transfer_fluid.nbt rename to src/main/resources/assets/create/ponder/portable_interface/transfer_fluid.nbt diff --git a/src/main/resources/ponder/powered_latch.nbt b/src/main/resources/assets/create/ponder/powered_latch.nbt similarity index 100% rename from src/main/resources/ponder/powered_latch.nbt rename to src/main/resources/assets/create/ponder/powered_latch.nbt diff --git a/src/main/resources/ponder/powered_toggle_latch.nbt b/src/main/resources/assets/create/ponder/powered_toggle_latch.nbt similarity index 100% rename from src/main/resources/ponder/powered_toggle_latch.nbt rename to src/main/resources/assets/create/ponder/powered_toggle_latch.nbt diff --git a/src/main/resources/ponder/pulse_repeater.nbt b/src/main/resources/assets/create/ponder/pulse_repeater.nbt similarity index 100% rename from src/main/resources/ponder/pulse_repeater.nbt rename to src/main/resources/assets/create/ponder/pulse_repeater.nbt diff --git a/src/main/resources/ponder/redstone_contact.nbt b/src/main/resources/assets/create/ponder/redstone_contact.nbt similarity index 100% rename from src/main/resources/ponder/redstone_contact.nbt rename to src/main/resources/assets/create/ponder/redstone_contact.nbt diff --git a/src/main/resources/ponder/redstone_link.nbt b/src/main/resources/assets/create/ponder/redstone_link.nbt similarity index 100% rename from src/main/resources/ponder/redstone_link.nbt rename to src/main/resources/assets/create/ponder/redstone_link.nbt diff --git a/src/main/resources/ponder/rope_pulley/anchor.nbt b/src/main/resources/assets/create/ponder/rope_pulley/anchor.nbt similarity index 100% rename from src/main/resources/ponder/rope_pulley/anchor.nbt rename to src/main/resources/assets/create/ponder/rope_pulley/anchor.nbt diff --git a/src/main/resources/ponder/rope_pulley/attachment.nbt b/src/main/resources/assets/create/ponder/rope_pulley/attachment.nbt similarity index 100% rename from src/main/resources/ponder/rope_pulley/attachment.nbt rename to src/main/resources/assets/create/ponder/rope_pulley/attachment.nbt diff --git a/src/main/resources/ponder/rope_pulley/modes.nbt b/src/main/resources/assets/create/ponder/rope_pulley/modes.nbt similarity index 100% rename from src/main/resources/ponder/rope_pulley/modes.nbt rename to src/main/resources/assets/create/ponder/rope_pulley/modes.nbt diff --git a/src/main/resources/ponder/sail.nbt b/src/main/resources/assets/create/ponder/sail.nbt similarity index 100% rename from src/main/resources/ponder/sail.nbt rename to src/main/resources/assets/create/ponder/sail.nbt diff --git a/src/main/resources/ponder/sequenced_gearshift.nbt b/src/main/resources/assets/create/ponder/sequenced_gearshift.nbt similarity index 100% rename from src/main/resources/ponder/sequenced_gearshift.nbt rename to src/main/resources/assets/create/ponder/sequenced_gearshift.nbt diff --git a/src/main/resources/ponder/shaft/encasing.nbt b/src/main/resources/assets/create/ponder/shaft/encasing.nbt similarity index 100% rename from src/main/resources/ponder/shaft/encasing.nbt rename to src/main/resources/assets/create/ponder/shaft/encasing.nbt diff --git a/src/main/resources/ponder/shaft/relay.nbt b/src/main/resources/assets/create/ponder/shaft/relay.nbt similarity index 100% rename from src/main/resources/ponder/shaft/relay.nbt rename to src/main/resources/assets/create/ponder/shaft/relay.nbt diff --git a/src/main/resources/ponder/smart_pipe.nbt b/src/main/resources/assets/create/ponder/smart_pipe.nbt similarity index 100% rename from src/main/resources/ponder/smart_pipe.nbt rename to src/main/resources/assets/create/ponder/smart_pipe.nbt diff --git a/src/main/resources/ponder/speed_controller.nbt b/src/main/resources/assets/create/ponder/speed_controller.nbt similarity index 100% rename from src/main/resources/ponder/speed_controller.nbt rename to src/main/resources/assets/create/ponder/speed_controller.nbt diff --git a/src/main/resources/ponder/spout.nbt b/src/main/resources/assets/create/ponder/spout.nbt similarity index 100% rename from src/main/resources/ponder/spout.nbt rename to src/main/resources/assets/create/ponder/spout.nbt diff --git a/src/main/resources/ponder/sticker.nbt b/src/main/resources/assets/create/ponder/sticker.nbt similarity index 100% rename from src/main/resources/ponder/sticker.nbt rename to src/main/resources/assets/create/ponder/sticker.nbt diff --git a/src/main/resources/ponder/super_glue.nbt b/src/main/resources/assets/create/ponder/super_glue.nbt similarity index 100% rename from src/main/resources/ponder/super_glue.nbt rename to src/main/resources/assets/create/ponder/super_glue.nbt diff --git a/src/main/resources/ponder/tunnels/andesite.nbt b/src/main/resources/assets/create/ponder/tunnels/andesite.nbt similarity index 100% rename from src/main/resources/ponder/tunnels/andesite.nbt rename to src/main/resources/assets/create/ponder/tunnels/andesite.nbt diff --git a/src/main/resources/ponder/tunnels/brass.nbt b/src/main/resources/assets/create/ponder/tunnels/brass.nbt similarity index 100% rename from src/main/resources/ponder/tunnels/brass.nbt rename to src/main/resources/assets/create/ponder/tunnels/brass.nbt diff --git a/src/main/resources/ponder/tunnels/brass_modes.nbt b/src/main/resources/assets/create/ponder/tunnels/brass_modes.nbt similarity index 100% rename from src/main/resources/ponder/tunnels/brass_modes.nbt rename to src/main/resources/assets/create/ponder/tunnels/brass_modes.nbt diff --git a/src/main/resources/ponder/valve_handle.nbt b/src/main/resources/assets/create/ponder/valve_handle.nbt similarity index 100% rename from src/main/resources/ponder/valve_handle.nbt rename to src/main/resources/assets/create/ponder/valve_handle.nbt diff --git a/src/main/resources/ponder/water_wheel.nbt b/src/main/resources/assets/create/ponder/water_wheel.nbt similarity index 100% rename from src/main/resources/ponder/water_wheel.nbt rename to src/main/resources/assets/create/ponder/water_wheel.nbt diff --git a/src/main/resources/ponder/weighted_ejector/eject.nbt b/src/main/resources/assets/create/ponder/weighted_ejector/eject.nbt similarity index 100% rename from src/main/resources/ponder/weighted_ejector/eject.nbt rename to src/main/resources/assets/create/ponder/weighted_ejector/eject.nbt diff --git a/src/main/resources/ponder/weighted_ejector/redstone.nbt b/src/main/resources/assets/create/ponder/weighted_ejector/redstone.nbt similarity index 100% rename from src/main/resources/ponder/weighted_ejector/redstone.nbt rename to src/main/resources/assets/create/ponder/weighted_ejector/redstone.nbt diff --git a/src/main/resources/ponder/weighted_ejector/split.nbt b/src/main/resources/assets/create/ponder/weighted_ejector/split.nbt similarity index 100% rename from src/main/resources/ponder/weighted_ejector/split.nbt rename to src/main/resources/assets/create/ponder/weighted_ejector/split.nbt diff --git a/src/main/resources/ponder/windmill_bearing/source.nbt b/src/main/resources/assets/create/ponder/windmill_bearing/source.nbt similarity index 100% rename from src/main/resources/ponder/windmill_bearing/source.nbt rename to src/main/resources/assets/create/ponder/windmill_bearing/source.nbt diff --git a/src/main/resources/ponder/windmill_bearing/structure.nbt b/src/main/resources/assets/create/ponder/windmill_bearing/structure.nbt similarity index 100% rename from src/main/resources/ponder/windmill_bearing/structure.nbt rename to src/main/resources/assets/create/ponder/windmill_bearing/structure.nbt From 4bdd80217077dedbdb2098d3c615f852b9293d1e Mon Sep 17 00:00:00 2001 From: PepperBell <44146161+PepperCode1@users.noreply.github.com> Date: Sat, 17 Jul 2021 00:46:35 -0700 Subject: [PATCH 091/118] Organize imports --- src/main/java/com/simibubi/create/AllFluids.java | 2 -- src/main/java/com/simibubi/create/CreateClient.java | 1 - .../simibubi/create/compat/jei/GhostIngredientHandler.java | 2 -- .../create/content/contraptions/base/CasingBlock.java | 2 -- .../contraptions/base/DirectionalAxisKineticBlock.java | 2 -- .../content/contraptions/base/DirectionalKineticBlock.java | 2 -- .../contraptions/base/HorizontalAxisKineticBlock.java | 2 -- .../content/contraptions/base/HorizontalKineticBlock.java | 2 -- .../create/content/contraptions/base/KineticBlock.java | 2 -- .../contraptions/base/RotatedPillarKineticBlock.java | 2 -- .../contraptions/components/AssemblyOperatorBlockItem.java | 2 -- .../contraptions/components/actors/AttachedActorBlock.java | 2 -- .../content/contraptions/components/actors/DrillBlock.java | 2 -- .../contraptions/components/actors/HarvesterBlock.java | 2 -- .../content/contraptions/components/actors/PloughBlock.java | 2 -- .../components/actors/PortableFluidInterfaceTileEntity.java | 2 -- .../components/actors/PortableStorageInterfaceBlock.java | 2 -- .../content/contraptions/components/actors/SeatBlock.java | 2 -- .../actors/dispenser/DispenserMovementBehaviour.java | 4 +--- .../contraptions/components/clock/CuckooClockBlock.java | 2 -- .../components/crafter/MechanicalCrafterBlock.java | 2 -- .../contraptions/components/crank/HandCrankBlock.java | 2 -- .../contraptions/components/crank/ValveHandleBlock.java | 2 -- .../contraptions/components/crusher/CrushingWheelBlock.java | 2 -- .../components/crusher/CrushingWheelControllerBlock.java | 2 -- .../contraptions/components/deployer/DeployerBlock.java | 2 -- .../contraptions/components/fan/EncasedFanBlock.java | 2 -- .../content/contraptions/components/fan/NozzleBlock.java | 2 -- .../contraptions/components/flywheel/FlywheelBlock.java | 2 -- .../components/flywheel/engine/EngineBlock.java | 2 -- .../components/flywheel/engine/EngineTileEntity.java | 1 - .../components/flywheel/engine/FurnaceEngineBlock.java | 2 -- .../contraptions/components/millstone/MillstoneBlock.java | 2 -- .../contraptions/components/mixer/MechanicalMixerBlock.java | 3 --- .../contraptions/components/motor/CreativeMotorBlock.java | 2 -- .../contraptions/components/press/MechanicalPressBlock.java | 2 -- .../content/contraptions/components/saw/SawBlock.java | 2 -- .../structureMovement/AbstractContraptionEntity.java | 2 -- .../structureMovement/ControlledContraptionEntity.java | 2 -- .../structureMovement/OrientedContraptionEntity.java | 2 -- .../components/structureMovement/bearing/BearingBlock.java | 2 -- .../structureMovement/bearing/ClockworkBearingBlock.java | 2 -- .../structureMovement/bearing/MechanicalBearingBlock.java | 2 -- .../bearing/MechanicalBearingTileEntity.java | 2 -- .../components/structureMovement/bearing/SailBlock.java | 2 -- .../structureMovement/bearing/WindmillBearingBlock.java | 2 -- .../structureMovement/chassis/AbstractChassisBlock.java | 2 -- .../structureMovement/chassis/LinearChassisBlock.java | 2 -- .../structureMovement/chassis/RadialChassisBlock.java | 2 -- .../components/structureMovement/chassis/StickerBlock.java | 2 -- .../structureMovement/chassis/StickerTileEntity.java | 1 - .../structureMovement/gantry/GantryCarriageBlock.java | 2 -- .../structureMovement/gantry/GantryContraptionEntity.java | 2 -- .../components/structureMovement/glue/SuperGlueItem.java | 2 -- .../structureMovement/mounted/CartAssemblerBlock.java | 2 -- .../structureMovement/mounted/CartAssemblerBlockItem.java | 2 -- .../structureMovement/mounted/MinecartContraptionItem.java | 2 -- .../structureMovement/mounted/MountedContraption.java | 2 -- .../structureMovement/piston/LinearActuatorTileEntity.java | 2 -- .../structureMovement/piston/MechanicalPistonBlock.java | 2 -- .../structureMovement/piston/MechanicalPistonHeadBlock.java | 2 -- .../structureMovement/piston/PistonExtensionPoleBlock.java | 2 -- .../components/structureMovement/pulley/PulleyBlock.java | 2 -- .../render/ContraptionRenderDispatcher.java | 5 ++--- .../structureMovement/train/MinecartCouplingItem.java | 2 -- .../contraptions/components/tracks/ControllerRailBlock.java | 2 -- .../contraptions/components/tracks/ReinforcedRailBlock.java | 2 -- .../contraptions/components/turntable/TurntableBlock.java | 2 -- .../contraptions/components/waterwheel/WaterWheelBlock.java | 2 -- .../content/contraptions/fluids/FluidBottleItemHook.java | 2 -- .../create/content/contraptions/fluids/OpenEndedPipe.java | 2 -- .../create/content/contraptions/fluids/PumpBlock.java | 2 -- .../create/content/contraptions/fluids/PumpTileEntity.java | 2 -- .../create/content/contraptions/fluids/VirtualFluid.java | 2 -- .../contraptions/fluids/actors/FluidDrainingBehaviour.java | 2 -- .../contraptions/fluids/actors/FluidFillingBehaviour.java | 2 -- .../content/contraptions/fluids/actors/HosePulleyBlock.java | 2 -- .../contraptions/fluids/actors/HosePulleyFluidHandler.java | 2 -- .../content/contraptions/fluids/actors/ItemDrainBlock.java | 2 -- .../content/contraptions/fluids/actors/SpoutBlock.java | 2 -- .../contraptions/fluids/particle/FluidParticleData.java | 2 -- .../content/contraptions/fluids/pipes/AxisPipeBlock.java | 2 -- .../content/contraptions/fluids/pipes/BracketBlock.java | 2 -- .../content/contraptions/fluids/pipes/BracketBlockItem.java | 2 -- .../content/contraptions/fluids/pipes/EncasedPipeBlock.java | 2 -- .../content/contraptions/fluids/pipes/FluidPipeBlock.java | 2 -- .../contraptions/fluids/pipes/FluidPipeTileEntity.java | 2 -- .../content/contraptions/fluids/pipes/FluidValveBlock.java | 2 -- .../contraptions/fluids/pipes/GlassFluidPipeBlock.java | 3 --- .../contraptions/fluids/pipes/SmartFluidPipeBlock.java | 2 -- .../contraptions/fluids/pipes/StraightPipeTileEntity.java | 2 -- .../content/contraptions/fluids/potion/PotionFluid.java | 3 --- .../fluids/tank/CreativeFluidTankTileEntity.java | 2 -- .../content/contraptions/fluids/tank/FluidTankBlock.java | 2 -- .../content/contraptions/fluids/tank/FluidTankItem.java | 2 -- .../create/content/contraptions/goggles/GogglesItem.java | 2 -- .../contraptions/itemAssembly/SequencedAssemblyItem.java | 2 -- .../content/contraptions/particle/AirFlowParticleData.java | 2 -- .../content/contraptions/particle/AirParticleData.java | 2 -- .../content/contraptions/particle/CubeParticleData.java | 2 -- .../content/contraptions/particle/HeaterParticleData.java | 2 -- .../particle/RotationIndicatorParticleData.java | 2 -- .../create/content/contraptions/processing/BasinBlock.java | 2 -- .../contraptions/processing/burner/BlazeBurnerBlock.java | 2 -- .../processing/burner/BlazeBurnerBlockItem.java | 2 -- .../contraptions/processing/burner/LitBlazeBurnerBlock.java | 2 -- .../contraptions/relays/advanced/GantryShaftBlock.java | 2 -- .../contraptions/relays/advanced/SpeedControllerBlock.java | 2 -- .../relays/advanced/sequencer/SequencedGearshiftBlock.java | 2 -- .../create/content/contraptions/relays/belt/BeltBlock.java | 2 -- .../contraptions/relays/belt/item/BeltConnectorItem.java | 2 -- .../contraptions/relays/elementary/AbstractShaftBlock.java | 2 -- .../contraptions/relays/elementary/CogWheelBlock.java | 2 -- .../contraptions/relays/elementary/CogwheelBlockItem.java | 2 -- .../content/contraptions/relays/elementary/ShaftBlock.java | 2 -- .../relays/encased/AbstractEncasedShaftBlock.java | 2 -- .../contraptions/relays/encased/AdjustablePulleyBlock.java | 2 -- .../content/contraptions/relays/encased/ClutchBlock.java | 2 -- .../contraptions/relays/encased/EncasedBeltBlock.java | 2 -- .../contraptions/relays/encased/EncasedShaftBlock.java | 2 -- .../content/contraptions/relays/encased/GearshiftBlock.java | 2 -- .../content/contraptions/relays/gauge/GaugeBlock.java | 2 -- .../content/contraptions/relays/gearbox/GearboxBlock.java | 2 -- .../contraptions/relays/gearbox/VerticalGearboxItem.java | 2 -- .../create/content/contraptions/wrench/WrenchItem.java | 2 -- .../create/content/curiosities/BuildersTeaItem.java | 2 -- .../create/content/curiosities/ChromaticCompoundItem.java | 2 -- .../create/content/curiosities/CombustibleItem.java | 2 -- .../content/curiosities/NoGravMagicalDohickyItem.java | 2 -- .../create/content/curiosities/RefinedRadianceItem.java | 2 -- .../create/content/curiosities/ShadowSteelItem.java | 2 -- .../create/content/curiosities/TreeFertilizerItem.java | 2 -- .../content/curiosities/armor/CapacityEnchantment.java | 2 -- .../create/content/curiosities/armor/CopperArmorItem.java | 2 -- .../content/curiosities/armor/CopperBacktankBlock.java | 2 -- .../content/curiosities/armor/CopperBacktankItem.java | 2 -- .../create/content/curiosities/armor/DivingBootsItem.java | 2 -- .../create/content/curiosities/armor/DivingHelmetItem.java | 2 -- .../create/content/curiosities/bell/AbstractBellBlock.java | 2 -- .../create/content/curiosities/bell/BasicParticleData.java | 2 -- .../create/content/curiosities/bell/HauntedBellBlock.java | 2 -- .../create/content/curiosities/bell/PeculiarBellBlock.java | 2 -- .../create/content/curiosities/bell/SoulBaseParticle.java | 2 -- .../create/content/curiosities/bell/SoulParticle.java | 2 -- .../content/curiosities/symmetry/SymmetryWandItem.java | 2 -- .../create/content/curiosities/tools/BlueprintItem.java | 2 -- .../create/content/curiosities/tools/ExtendoGripItem.java | 2 -- .../create/content/curiosities/tools/SandPaperItem.java | 2 -- .../content/curiosities/weapons/PotatoCannonItem.java | 2 -- .../curiosities/weapons/PotatoProjectileRenderMode.java | 2 ++ .../curiosities/weapons/PotatoRecoveryEnchantment.java | 2 -- .../create/content/curiosities/zapper/ZapperItem.java | 2 -- .../curiosities/zapper/terrainzapper/WorldshaperItem.java | 2 -- .../logistics/block/belts/tunnel/BeltTunnelBlock.java | 2 -- .../logistics/block/belts/tunnel/BeltTunnelItem.java | 2 -- .../logistics/block/belts/tunnel/BeltTunnelShapes.java | 4 ++-- .../block/belts/tunnel/BrassTunnelCTBehaviour.java | 2 -- .../content/logistics/block/chute/AbstractChuteBlock.java | 2 -- .../create/content/logistics/block/chute/ChuteBlock.java | 2 -- .../create/content/logistics/block/chute/ChuteItem.java | 2 -- .../content/logistics/block/chute/SmartChuteBlock.java | 2 -- .../create/content/logistics/block/depot/DepotBlock.java | 2 -- .../create/content/logistics/block/depot/EjectorBlock.java | 2 -- .../create/content/logistics/block/depot/EjectorItem.java | 2 -- .../content/logistics/block/diodes/AbstractDiodeBlock.java | 2 -- .../logistics/block/diodes/AdjustableRepeaterBlock.java | 2 -- .../content/logistics/block/diodes/PoweredLatchBlock.java | 2 -- .../content/logistics/block/diodes/PulseRepeaterBlock.java | 2 -- .../content/logistics/block/diodes/ToggleLatchBlock.java | 2 -- .../block/funnel/AbstractDirectionalFunnelBlock.java | 2 -- .../content/logistics/block/funnel/AbstractFunnelBlock.java | 2 -- .../block/funnel/AbstractHorizontalFunnelBlock.java | 2 -- .../content/logistics/block/funnel/AndesiteFunnelBlock.java | 2 -- .../content/logistics/block/funnel/BeltFunnelBlock.java | 2 -- .../content/logistics/block/funnel/BrassFunnelBlock.java | 2 -- .../create/content/logistics/block/funnel/FunnelBlock.java | 2 -- .../create/content/logistics/block/funnel/FunnelItem.java | 2 -- .../logistics/block/inventories/AdjustableCrateBlock.java | 2 -- .../content/logistics/block/inventories/CrateBlock.java | 2 -- .../logistics/block/inventories/CreativeCrateBlock.java | 2 -- .../content/logistics/block/mechanicalArm/ArmBlock.java | 2 -- .../content/logistics/block/mechanicalArm/ArmItem.java | 2 -- .../content/logistics/block/redstone/AnalogLeverBlock.java | 2 -- .../logistics/block/redstone/ContentObserverBlock.java | 2 -- .../content/logistics/block/redstone/NixieTubeBlock.java | 2 -- .../logistics/block/redstone/RedstoneContactBlock.java | 2 -- .../content/logistics/block/redstone/RedstoneLinkBlock.java | 2 -- .../logistics/block/redstone/StockpileSwitchBlock.java | 2 -- .../create/content/logistics/item/CardboardBoxItem.java | 2 -- .../content/logistics/item/LecternControllerBlock.java | 2 -- .../create/content/logistics/item/LinkedControllerItem.java | 2 -- .../create/content/logistics/item/filter/FilterItem.java | 2 -- .../create/content/palettes/ConnectedGlassBlock.java | 2 -- .../create/content/palettes/ConnectedGlassPaneBlock.java | 2 -- .../simibubi/create/content/palettes/GlassPaneBlock.java | 2 -- .../com/simibubi/create/content/palettes/PavedBlock.java | 2 -- .../com/simibubi/create/content/palettes/WindowBlock.java | 2 -- .../content/schematics/block/SchematicTableBlock.java | 2 -- .../content/schematics/block/SchematicannonBlock.java | 2 -- .../content/schematics/block/SchematicannonTileEntity.java | 1 - .../content/schematics/item/SchematicAndQuillItem.java | 2 -- .../create/content/schematics/item/SchematicItem.java | 2 -- .../create/foundation/advancement/CriterionTriggerBase.java | 2 -- .../create/foundation/block/ProperDirectionalBlock.java | 2 -- .../create/foundation/collision/ContinuousOBBCollider.java | 2 -- .../java/com/simibubi/create/foundation/config/CClient.java | 6 ------ .../com/simibubi/create/foundation/config/CCuriosities.java | 2 -- .../java/com/simibubi/create/foundation/config/CFluids.java | 2 -- .../com/simibubi/create/foundation/config/CKinetics.java | 6 ------ .../com/simibubi/create/foundation/config/CLogistics.java | 2 -- .../com/simibubi/create/foundation/config/CRecipes.java | 3 --- .../com/simibubi/create/foundation/config/CSchematics.java | 4 ---- .../java/com/simibubi/create/foundation/config/CServer.java | 3 --- .../com/simibubi/create/foundation/config/CWorldGen.java | 2 -- .../create/foundation/data/BuilderTransformers.java | 3 +-- .../create/foundation/data/recipe/CompactingRecipeGen.java | 2 -- .../create/foundation/data/recipe/CrushingRecipeGen.java | 3 --- .../create/foundation/data/recipe/CuttingRecipeGen.java | 3 --- .../create/foundation/data/recipe/EmptyingRecipeGen.java | 2 -- .../create/foundation/data/recipe/FillingRecipeGen.java | 2 -- .../foundation/data/recipe/MechanicalCraftingRecipeGen.java | 3 --- .../create/foundation/data/recipe/MillingRecipeGen.java | 2 -- .../create/foundation/data/recipe/MixingRecipeGen.java | 3 --- .../create/foundation/data/recipe/PolishingRecipeGen.java | 2 -- .../create/foundation/data/recipe/PressingRecipeGen.java | 3 --- .../foundation/data/recipe/SequencedAssemblyRecipeGen.java | 3 --- .../create/foundation/data/recipe/StandardRecipeGen.java | 4 ---- .../create/foundation/data/recipe/WashingRecipeGen.java | 2 -- .../create/foundation/fluid/CombinedTankWrapper.java | 2 -- .../create/foundation/item/HiddenIngredientItem.java | 2 -- .../create/foundation/item/TagDependentIngredientItem.java | 2 -- .../com/simibubi/create/foundation/ponder/SceneBuilder.java | 4 +--- .../tileEntity/behaviour/fluid/SmartFluidTankBehaviour.java | 2 -- .../foundation/worldgen/ConfigDrivenFeatureEntry.java | 3 --- .../simibubi/create/foundation/worldgen/OxidizingBlock.java | 2 -- 235 files changed, 9 insertions(+), 491 deletions(-) diff --git a/src/main/java/com/simibubi/create/AllFluids.java b/src/main/java/com/simibubi/create/AllFluids.java index d2b208839..25f5dacb0 100644 --- a/src/main/java/com/simibubi/create/AllFluids.java +++ b/src/main/java/com/simibubi/create/AllFluids.java @@ -23,8 +23,6 @@ import net.minecraftforge.common.Tags; import net.minecraftforge.fluids.FluidAttributes; import net.minecraftforge.fluids.ForgeFlowingFluid; -import net.minecraftforge.fluids.FluidAttributes.Builder; - public class AllFluids { private static final CreateRegistrate REGISTRATE = Create.registrate(); diff --git a/src/main/java/com/simibubi/create/CreateClient.java b/src/main/java/com/simibubi/create/CreateClient.java index f4aa5f356..fecb6d893 100644 --- a/src/main/java/com/simibubi/create/CreateClient.java +++ b/src/main/java/com/simibubi/create/CreateClient.java @@ -5,7 +5,6 @@ import java.util.List; import java.util.Map; import java.util.function.Function; -import com.jozufozu.flywheel.core.PartialModel; import com.simibubi.create.content.contraptions.base.KineticTileEntityRenderer; import com.simibubi.create.content.contraptions.components.structureMovement.render.ContraptionRenderDispatcher; import com.simibubi.create.content.contraptions.relays.encased.CasingConnectivity; diff --git a/src/main/java/com/simibubi/create/compat/jei/GhostIngredientHandler.java b/src/main/java/com/simibubi/create/compat/jei/GhostIngredientHandler.java index 90646791f..5732d4bff 100644 --- a/src/main/java/com/simibubi/create/compat/jei/GhostIngredientHandler.java +++ b/src/main/java/com/simibubi/create/compat/jei/GhostIngredientHandler.java @@ -17,8 +17,6 @@ import net.minecraft.client.renderer.Rectangle2d; import net.minecraft.inventory.container.Slot; import net.minecraft.item.ItemStack; -import mezz.jei.api.gui.handlers.IGhostIngredientHandler.Target; - @MethodsReturnNonnullByDefault @ParametersAreNonnullByDefault public class GhostIngredientHandler> diff --git a/src/main/java/com/simibubi/create/content/contraptions/base/CasingBlock.java b/src/main/java/com/simibubi/create/content/contraptions/base/CasingBlock.java index b58a1fffd..e3e1e4a0a 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/base/CasingBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/base/CasingBlock.java @@ -11,8 +11,6 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.world.IBlockReader; import net.minecraftforge.common.ToolType; -import net.minecraft.block.AbstractBlock.Properties; - public class CasingBlock extends Block implements IWrenchable { public CasingBlock(Properties p_i48440_1_) { diff --git a/src/main/java/com/simibubi/create/content/contraptions/base/DirectionalAxisKineticBlock.java b/src/main/java/com/simibubi/create/content/contraptions/base/DirectionalAxisKineticBlock.java index 5795ff7b2..b51c78b95 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/base/DirectionalAxisKineticBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/base/DirectionalAxisKineticBlock.java @@ -15,8 +15,6 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.world.IWorldReader; import net.minecraft.world.World; -import net.minecraft.block.AbstractBlock.Properties; - public abstract class DirectionalAxisKineticBlock extends DirectionalKineticBlock { public static final BooleanProperty AXIS_ALONG_FIRST_COORDINATE = BooleanProperty.create("axis_along_first"); diff --git a/src/main/java/com/simibubi/create/content/contraptions/base/DirectionalKineticBlock.java b/src/main/java/com/simibubi/create/content/contraptions/base/DirectionalKineticBlock.java index 745948fa6..a95b29bda 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/base/DirectionalKineticBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/base/DirectionalKineticBlock.java @@ -12,8 +12,6 @@ import net.minecraft.util.Direction; import net.minecraft.util.Mirror; import net.minecraft.util.Rotation; -import net.minecraft.block.AbstractBlock.Properties; - public abstract class DirectionalKineticBlock extends KineticBlock { public static final DirectionProperty FACING = BlockStateProperties.FACING; diff --git a/src/main/java/com/simibubi/create/content/contraptions/base/HorizontalAxisKineticBlock.java b/src/main/java/com/simibubi/create/content/contraptions/base/HorizontalAxisKineticBlock.java index c627f5e15..1aceb4799 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/base/HorizontalAxisKineticBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/base/HorizontalAxisKineticBlock.java @@ -16,8 +16,6 @@ import net.minecraft.util.Rotation; import net.minecraft.util.math.BlockPos; import net.minecraft.world.IWorldReader; -import net.minecraft.block.AbstractBlock.Properties; - public abstract class HorizontalAxisKineticBlock extends KineticBlock { public static final Property HORIZONTAL_AXIS = BlockStateProperties.HORIZONTAL_AXIS; diff --git a/src/main/java/com/simibubi/create/content/contraptions/base/HorizontalKineticBlock.java b/src/main/java/com/simibubi/create/content/contraptions/base/HorizontalKineticBlock.java index c4b47d01a..fb844a7f9 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/base/HorizontalKineticBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/base/HorizontalKineticBlock.java @@ -12,8 +12,6 @@ import net.minecraft.util.Direction; import net.minecraft.util.Mirror; import net.minecraft.util.Rotation; -import net.minecraft.block.AbstractBlock.Properties; - public abstract class HorizontalKineticBlock extends KineticBlock { public static final Property HORIZONTAL_FACING = BlockStateProperties.HORIZONTAL_FACING; diff --git a/src/main/java/com/simibubi/create/content/contraptions/base/KineticBlock.java b/src/main/java/com/simibubi/create/content/contraptions/base/KineticBlock.java index 351ece5f8..c2dc5f863 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/base/KineticBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/base/KineticBlock.java @@ -16,8 +16,6 @@ import net.minecraft.world.IWorldReader; import net.minecraft.world.World; import net.minecraftforge.common.ToolType; -import net.minecraft.block.AbstractBlock.Properties; - public abstract class KineticBlock extends Block implements IRotate { protected static final Palette color = Palette.Red; diff --git a/src/main/java/com/simibubi/create/content/contraptions/base/RotatedPillarKineticBlock.java b/src/main/java/com/simibubi/create/content/contraptions/base/RotatedPillarKineticBlock.java index beb855895..16dbd32a3 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/base/RotatedPillarKineticBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/base/RotatedPillarKineticBlock.java @@ -12,8 +12,6 @@ import net.minecraft.util.Direction; import net.minecraft.util.Direction.Axis; import net.minecraft.util.Rotation; -import net.minecraft.block.AbstractBlock.Properties; - public abstract class RotatedPillarKineticBlock extends KineticBlock { public static final EnumProperty AXIS = BlockStateProperties.AXIS; diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/AssemblyOperatorBlockItem.java b/src/main/java/com/simibubi/create/content/contraptions/components/AssemblyOperatorBlockItem.java index ea2eedcec..1a4e5d1b8 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/AssemblyOperatorBlockItem.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/AssemblyOperatorBlockItem.java @@ -12,8 +12,6 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockRayTraceResult; import net.minecraft.util.math.vector.Vector3d; -import net.minecraft.item.Item.Properties; - public class AssemblyOperatorBlockItem extends BlockItem { public AssemblyOperatorBlockItem(Block block, Properties builder) { diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/AttachedActorBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/AttachedActorBlock.java index 3ad9dfa6d..827540eac 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/AttachedActorBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/AttachedActorBlock.java @@ -22,8 +22,6 @@ import net.minecraft.util.math.shapes.VoxelShape; import net.minecraft.world.IBlockReader; import net.minecraft.world.IWorldReader; -import net.minecraft.block.AbstractBlock.Properties; - @ParametersAreNonnullByDefault @MethodsReturnNonnullByDefault public abstract class AttachedActorBlock extends HorizontalBlock implements IWrenchable { diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/DrillBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/DrillBlock.java index 65efab837..0e0a95fba 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/DrillBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/DrillBlock.java @@ -27,8 +27,6 @@ import net.minecraft.world.IBlockReader; import net.minecraft.world.IWorldReader; import net.minecraft.world.World; -import net.minecraft.block.AbstractBlock.Properties; - @ParametersAreNonnullByDefault @MethodsReturnNonnullByDefault public class DrillBlock extends DirectionalKineticBlock implements ITE { diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/HarvesterBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/HarvesterBlock.java index 978928e91..8f6182917 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/HarvesterBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/HarvesterBlock.java @@ -6,8 +6,6 @@ import net.minecraft.block.BlockState; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.IBlockReader; -import net.minecraft.block.AbstractBlock.Properties; - public class HarvesterBlock extends AttachedActorBlock { public HarvesterBlock(Properties p_i48377_1_) { diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/PloughBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/PloughBlock.java index ce6d344d9..31a5ffad3 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/PloughBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/PloughBlock.java @@ -7,8 +7,6 @@ import com.mojang.authlib.GameProfile; import net.minecraft.world.server.ServerWorld; import net.minecraftforge.common.util.FakePlayer; -import net.minecraft.block.AbstractBlock.Properties; - public class PloughBlock extends AttachedActorBlock { public PloughBlock(Properties p_i48377_1_) { diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/PortableFluidInterfaceTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/PortableFluidInterfaceTileEntity.java index 51de4cc00..1559bd22d 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/PortableFluidInterfaceTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/PortableFluidInterfaceTileEntity.java @@ -10,8 +10,6 @@ import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.capability.IFluidHandler; import net.minecraftforge.fluids.capability.templates.FluidTank; -import net.minecraftforge.fluids.capability.IFluidHandler.FluidAction; - public class PortableFluidInterfaceTileEntity extends PortableStorageInterfaceTileEntity { protected LazyOptional capability; diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/PortableStorageInterfaceBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/PortableStorageInterfaceBlock.java index 41263760d..6d93e5c95 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/PortableStorageInterfaceBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/PortableStorageInterfaceBlock.java @@ -18,8 +18,6 @@ import net.minecraft.util.math.shapes.VoxelShape; import net.minecraft.world.IBlockReader; import net.minecraft.world.World; -import net.minecraft.block.AbstractBlock.Properties; - @ParametersAreNonnullByDefault @MethodsReturnNonnullByDefault public class PortableStorageInterfaceBlock extends ProperDirectionalBlock diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/SeatBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/SeatBlock.java index 048ee7125..87ef62be5 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/SeatBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/SeatBlock.java @@ -33,8 +33,6 @@ import net.minecraft.util.math.shapes.VoxelShape; import net.minecraft.world.IBlockReader; import net.minecraft.world.World; -import net.minecraft.block.AbstractBlock.Properties; - @ParametersAreNonnullByDefault @MethodsReturnNonnullByDefault public class SeatBlock extends Block { diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/DispenserMovementBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/DispenserMovementBehaviour.java index 70b70d49c..a423fb7e7 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/DispenserMovementBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/dispenser/DispenserMovementBehaviour.java @@ -7,7 +7,7 @@ import javax.annotation.ParametersAreNonnullByDefault; import com.simibubi.create.content.contraptions.components.structureMovement.MovementContext; import mcp.MethodsReturnNonnullByDefault; -import net.minecraft.block.Block; +import net.minecraft.block.AbstractBlock; import net.minecraft.block.Blocks; import net.minecraft.block.DispenserBlock; import net.minecraft.dispenser.DefaultDispenseItemBehavior; @@ -19,8 +19,6 @@ import net.minecraft.util.Direction; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.vector.Vector3d; -import net.minecraft.block.AbstractBlock; - public class DispenserMovementBehaviour extends DropperMovementBehaviour { private static final HashMap MOVED_DISPENSE_ITEM_BEHAVIOURS = new HashMap<>(); private static final HashMap MOVED_PROJECTILE_DISPENSE_BEHAVIOURS = new HashMap<>(); diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/clock/CuckooClockBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/clock/CuckooClockBlock.java index 97d823099..9782accaf 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/clock/CuckooClockBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/clock/CuckooClockBlock.java @@ -20,8 +20,6 @@ import net.minecraft.util.math.shapes.VoxelShape; import net.minecraft.world.IBlockReader; import net.minecraft.world.IWorldReader; -import net.minecraft.block.AbstractBlock.Properties; - public class CuckooClockBlock extends HorizontalKineticBlock { private boolean mysterious; diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/crafter/MechanicalCrafterBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/crafter/MechanicalCrafterBlock.java index b4ef94055..d732ea2e2 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/crafter/MechanicalCrafterBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/crafter/MechanicalCrafterBlock.java @@ -41,8 +41,6 @@ import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.ItemHandlerHelper; import net.minecraftforge.items.ItemStackHandler; -import net.minecraft.block.AbstractBlock.Properties; - public class MechanicalCrafterBlock extends HorizontalKineticBlock implements ITE, ICogWheel { public static final EnumProperty POINTING = EnumProperty.create("pointing", Pointing.class); diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/crank/HandCrankBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/crank/HandCrankBlock.java index 601de50ad..916e384b0 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/crank/HandCrankBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/crank/HandCrankBlock.java @@ -29,8 +29,6 @@ import net.minecraft.world.World; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; -import net.minecraft.block.AbstractBlock.Properties; - public class HandCrankBlock extends DirectionalKineticBlock implements ITE { public HandCrankBlock(Properties properties) { diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/crank/ValveHandleBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/crank/ValveHandleBlock.java index 7698e17af..7d0b97fe8 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/crank/ValveHandleBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/crank/ValveHandleBlock.java @@ -20,8 +20,6 @@ import net.minecraft.world.World; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; -import net.minecraft.block.AbstractBlock.Properties; - @ParametersAreNonnullByDefault public class ValveHandleBlock extends HandCrankBlock { private final boolean inCreativeTab; diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/crusher/CrushingWheelBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/crusher/CrushingWheelBlock.java index de5526d9e..c0afc346b 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/crusher/CrushingWheelBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/crusher/CrushingWheelBlock.java @@ -25,8 +25,6 @@ import net.minecraft.world.IBlockReader; import net.minecraft.world.IWorldReader; import net.minecraft.world.World; -import net.minecraft.block.AbstractBlock.Properties; - public class CrushingWheelBlock extends RotatedPillarKineticBlock implements ITE { public CrushingWheelBlock(Properties properties) { diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/crusher/CrushingWheelControllerBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/crusher/CrushingWheelControllerBlock.java index 686d13d2b..3184f7f3b 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/crusher/CrushingWheelControllerBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/crusher/CrushingWheelControllerBlock.java @@ -37,8 +37,6 @@ import net.minecraft.world.IBlockReader; import net.minecraft.world.IWorld; import net.minecraft.world.World; -import net.minecraft.block.AbstractBlock.Properties; - public class CrushingWheelControllerBlock extends DirectionalBlock implements ITE { diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerBlock.java index 5485dd542..d6bc343a6 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerBlock.java @@ -31,8 +31,6 @@ import net.minecraft.util.math.shapes.VoxelShape; import net.minecraft.world.IBlockReader; import net.minecraft.world.World; -import net.minecraft.block.AbstractBlock.Properties; - @ParametersAreNonnullByDefault @MethodsReturnNonnullByDefault public class DeployerBlock extends DirectionalAxisKineticBlock implements ITE { diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/fan/EncasedFanBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/fan/EncasedFanBlock.java index 79f244a1d..6cd3cc491 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/fan/EncasedFanBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/fan/EncasedFanBlock.java @@ -19,8 +19,6 @@ import net.minecraft.world.IWorld; import net.minecraft.world.IWorldReader; import net.minecraft.world.World; -import net.minecraft.block.AbstractBlock.Properties; - public class EncasedFanBlock extends DirectionalKineticBlock implements ITE { public EncasedFanBlock(Properties properties) { diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/fan/NozzleBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/fan/NozzleBlock.java index ed9b2fb73..dc943711a 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/fan/NozzleBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/fan/NozzleBlock.java @@ -22,8 +22,6 @@ import net.minecraft.world.IBlockReader; import net.minecraft.world.IWorldReader; import net.minecraft.world.World; -import net.minecraft.block.AbstractBlock.Properties; - @MethodsReturnNonnullByDefault @ParametersAreNonnullByDefault public class NozzleBlock extends ProperDirectionalBlock { diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/flywheel/FlywheelBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/flywheel/FlywheelBlock.java index 453b74a35..71762f6fa 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/flywheel/FlywheelBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/flywheel/FlywheelBlock.java @@ -23,8 +23,6 @@ import net.minecraft.world.IBlockReader; import net.minecraft.world.IWorldReader; import net.minecraft.world.World; -import net.minecraft.block.AbstractBlock.Properties; - public class FlywheelBlock extends HorizontalKineticBlock { public static EnumProperty CONNECTION = EnumProperty.create("connection", ConnectionState.class); 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 a817af1aa..483c3f0da 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 @@ -22,8 +22,6 @@ import net.minecraft.world.World; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; -import net.minecraft.block.AbstractBlock.Properties; - public abstract class EngineBlock extends HorizontalBlock implements IWrenchable { protected EngineBlock(Properties builder) { diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/flywheel/engine/EngineTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/flywheel/engine/EngineTileEntity.java index 9ae752b75..43eb4ee7c 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/flywheel/engine/EngineTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/flywheel/engine/EngineTileEntity.java @@ -15,7 +15,6 @@ import net.minecraft.tileentity.TileEntityType; import net.minecraft.util.Direction; import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/flywheel/engine/FurnaceEngineBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/flywheel/engine/FurnaceEngineBlock.java index fe251a7ba..6c034f883 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/flywheel/engine/FurnaceEngineBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/flywheel/engine/FurnaceEngineBlock.java @@ -24,8 +24,6 @@ import net.minecraftforge.eventbus.api.Event.Result; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod.EventBusSubscriber; -import net.minecraft.block.AbstractBlock.Properties; - @EventBusSubscriber public class FurnaceEngineBlock extends EngineBlock implements ITE { diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/millstone/MillstoneBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/millstone/MillstoneBlock.java index b2d2cf56d..e880796ce 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/millstone/MillstoneBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/millstone/MillstoneBlock.java @@ -32,8 +32,6 @@ import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.IItemHandlerModifiable; import net.minecraftforge.items.ItemStackHandler; -import net.minecraft.block.AbstractBlock.Properties; - public class MillstoneBlock extends KineticBlock implements ITE, ICogWheel { public MillstoneBlock(Properties properties) { diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/mixer/MechanicalMixerBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/mixer/MechanicalMixerBlock.java index 0e80f176c..5e618fef9 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/mixer/MechanicalMixerBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/mixer/MechanicalMixerBlock.java @@ -19,9 +19,6 @@ import net.minecraft.util.math.shapes.VoxelShape; import net.minecraft.world.IBlockReader; import net.minecraft.world.IWorldReader; -import com.simibubi.create.content.contraptions.base.IRotate.SpeedLevel; -import net.minecraft.block.AbstractBlock.Properties; - public class MechanicalMixerBlock extends KineticBlock implements ITE, ICogWheel { public MechanicalMixerBlock(Properties properties) { diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/motor/CreativeMotorBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/motor/CreativeMotorBlock.java index 037947564..0d137fe2e 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/motor/CreativeMotorBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/motor/CreativeMotorBlock.java @@ -16,8 +16,6 @@ import net.minecraft.util.math.shapes.VoxelShape; import net.minecraft.world.IBlockReader; import net.minecraft.world.IWorldReader; -import net.minecraft.block.AbstractBlock.Properties; - public class CreativeMotorBlock extends DirectionalKineticBlock { public CreativeMotorBlock(Properties properties) { diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/press/MechanicalPressBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/press/MechanicalPressBlock.java index d4ca80567..e05d44501 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/press/MechanicalPressBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/press/MechanicalPressBlock.java @@ -19,8 +19,6 @@ import net.minecraft.util.math.shapes.VoxelShape; import net.minecraft.world.IBlockReader; import net.minecraft.world.IWorldReader; -import net.minecraft.block.AbstractBlock.Properties; - public class MechanicalPressBlock extends HorizontalKineticBlock implements ITE { public MechanicalPressBlock(Properties properties) { diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/saw/SawBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/saw/SawBlock.java index 30aa20e8f..cebba49a6 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/saw/SawBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/saw/SawBlock.java @@ -30,8 +30,6 @@ import net.minecraft.world.IBlockReader; import net.minecraft.world.IWorldReader; import net.minecraft.world.World; -import net.minecraft.block.AbstractBlock.Properties; - @ParametersAreNonnullByDefault @MethodsReturnNonnullByDefault public class SawBlock extends DirectionalAxisKineticBlock implements ITE { diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/AbstractContraptionEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/AbstractContraptionEntity.java index 3c2dcc97a..f49dea4c7 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/AbstractContraptionEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/AbstractContraptionEntity.java @@ -55,8 +55,6 @@ import net.minecraftforge.fml.common.registry.IEntityAdditionalSpawnData; import net.minecraftforge.fml.network.NetworkHooks; import net.minecraftforge.fml.network.PacketDistributor; -import net.minecraft.entity.Entity.IMoveCallback; - public abstract class AbstractContraptionEntity extends Entity implements IEntityAdditionalSpawnData { private static final DataParameter STALLED = diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ControlledContraptionEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ControlledContraptionEntity.java index be07bba20..d2060e248 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ControlledContraptionEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ControlledContraptionEntity.java @@ -22,8 +22,6 @@ import net.minecraft.world.gen.feature.template.Template.BlockInfo; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; -import com.simibubi.create.content.contraptions.components.structureMovement.AbstractContraptionEntity.ContraptionRotationState; - /** * Ex: Pistons, bearings
    * Controlled Contraption Entities can rotate around one axis and translate. diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/OrientedContraptionEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/OrientedContraptionEntity.java index d78fe1f53..9210605e5 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/OrientedContraptionEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/OrientedContraptionEntity.java @@ -48,8 +48,6 @@ import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.common.util.LazyOptional; -import com.simibubi.create.content.contraptions.components.structureMovement.AbstractContraptionEntity.ContraptionRotationState; - /** * Ex: Minecarts, Couplings
    * Oriented Contraption Entities can rotate freely around two axes diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/BearingBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/BearingBlock.java index bfd702852..daa19daa7 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/BearingBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/BearingBlock.java @@ -11,8 +11,6 @@ import net.minecraft.util.Direction.Axis; import net.minecraft.util.math.BlockPos; import net.minecraft.world.IWorldReader; -import net.minecraft.block.AbstractBlock.Properties; - public abstract class BearingBlock extends DirectionalKineticBlock { public BearingBlock(Properties properties) { diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/ClockworkBearingBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/ClockworkBearingBlock.java index eb84c4af1..240e1a23f 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/ClockworkBearingBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/ClockworkBearingBlock.java @@ -14,8 +14,6 @@ import net.minecraft.util.math.BlockRayTraceResult; import net.minecraft.world.IBlockReader; import net.minecraft.world.World; -import net.minecraft.block.AbstractBlock.Properties; - public class ClockworkBearingBlock extends BearingBlock implements ITE { public ClockworkBearingBlock(Properties properties) { diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/MechanicalBearingBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/MechanicalBearingBlock.java index 6114db22d..005f57692 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/MechanicalBearingBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/MechanicalBearingBlock.java @@ -13,8 +13,6 @@ import net.minecraft.util.math.BlockRayTraceResult; import net.minecraft.world.IBlockReader; import net.minecraft.world.World; -import net.minecraft.block.AbstractBlock.Properties; - public class MechanicalBearingBlock extends BearingBlock implements ITE { public MechanicalBearingBlock(Properties properties) { diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/MechanicalBearingTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/MechanicalBearingTileEntity.java index 7c90fcc94..650fda752 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/MechanicalBearingTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/MechanicalBearingTileEntity.java @@ -27,8 +27,6 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.MathHelper; import net.minecraft.util.text.ITextComponent; -import com.simibubi.create.content.contraptions.components.structureMovement.IControlContraption.RotationMode; - public class MechanicalBearingTileEntity extends GeneratingKineticTileEntity implements IBearingTileEntity, IDisplayAssemblyExceptions { diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/SailBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/SailBlock.java index bdee280ce..73fd3b67e 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/SailBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/SailBlock.java @@ -41,8 +41,6 @@ import net.minecraft.util.math.vector.Vector3d; import net.minecraft.world.IBlockReader; import net.minecraft.world.World; -import net.minecraft.block.AbstractBlock.Properties; - public class SailBlock extends ProperDirectionalBlock { public static SailBlock frame(Properties properties) { diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/WindmillBearingBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/WindmillBearingBlock.java index f6a82f784..0c6e037f9 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/WindmillBearingBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/WindmillBearingBlock.java @@ -13,8 +13,6 @@ import net.minecraft.util.math.BlockRayTraceResult; import net.minecraft.world.IBlockReader; import net.minecraft.world.World; -import net.minecraft.block.AbstractBlock.Properties; - public class WindmillBearingBlock extends BearingBlock implements ITE { public WindmillBearingBlock(Properties properties) { diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/chassis/AbstractChassisBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/chassis/AbstractChassisBlock.java index 4fc5cdaee..7ba1ceba3 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/chassis/AbstractChassisBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/chassis/AbstractChassisBlock.java @@ -25,8 +25,6 @@ import net.minecraft.world.IBlockReader; import net.minecraft.world.World; import net.minecraftforge.common.Tags; -import net.minecraft.block.AbstractBlock.Properties; - public abstract class AbstractChassisBlock extends RotatedPillarBlock implements IWrenchable { public AbstractChassisBlock(Properties properties) { diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/chassis/LinearChassisBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/chassis/LinearChassisBlock.java index cc648fd20..3c35b4573 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/chassis/LinearChassisBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/chassis/LinearChassisBlock.java @@ -18,8 +18,6 @@ import net.minecraft.world.IBlockDisplayReader; import net.minecraft.world.IBlockReader; import net.minecraft.world.IWorld; -import net.minecraft.block.AbstractBlock.Properties; - public class LinearChassisBlock extends AbstractChassisBlock { public static final BooleanProperty STICKY_TOP = BooleanProperty.create("sticky_top"); diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/chassis/RadialChassisBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/chassis/RadialChassisBlock.java index 9231de81b..a54bc4c65 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/chassis/RadialChassisBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/chassis/RadialChassisBlock.java @@ -7,8 +7,6 @@ import net.minecraft.state.StateContainer.Builder; import net.minecraft.util.Direction; import net.minecraft.util.Direction.Axis; -import net.minecraft.block.AbstractBlock.Properties; - public class RadialChassisBlock extends AbstractChassisBlock { public static final BooleanProperty STICKY_NORTH = BooleanProperty.create("sticky_north"); diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/chassis/StickerBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/chassis/StickerBlock.java index 126f1722a..ba22c9f79 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/chassis/StickerBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/chassis/StickerBlock.java @@ -25,8 +25,6 @@ import net.minecraft.world.IWorldReader; import net.minecraft.world.World; import net.minecraft.world.server.ServerWorld; -import net.minecraft.block.AbstractBlock.Properties; - public class StickerBlock extends ProperDirectionalBlock implements ITE { public static final BooleanProperty POWERED = BlockStateProperties.POWERED; diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/chassis/StickerTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/chassis/StickerTileEntity.java index 8b2a039c6..6e85209da 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/chassis/StickerTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/chassis/StickerTileEntity.java @@ -18,7 +18,6 @@ import net.minecraft.client.Minecraft; import net.minecraft.nbt.CompoundNBT; import net.minecraft.tileentity.TileEntityType; import net.minecraft.util.Direction; -import net.minecraft.world.World; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.fml.DistExecutor; diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/gantry/GantryCarriageBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/gantry/GantryCarriageBlock.java index f969f3840..1c818a8ca 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/gantry/GantryCarriageBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/gantry/GantryCarriageBlock.java @@ -24,8 +24,6 @@ import net.minecraft.world.IWorld; import net.minecraft.world.IWorldReader; import net.minecraft.world.World; -import net.minecraft.block.AbstractBlock.Properties; - public class GantryCarriageBlock extends DirectionalAxisKineticBlock implements ITE { public GantryCarriageBlock(Properties properties) { diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/gantry/GantryContraptionEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/gantry/GantryContraptionEntity.java index bcf52fedb..c49b3bbe1 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/gantry/GantryContraptionEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/gantry/GantryContraptionEntity.java @@ -28,8 +28,6 @@ import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.fml.network.PacketDistributor; -import com.simibubi.create.content.contraptions.components.structureMovement.AbstractContraptionEntity.ContraptionRotationState; - public class GantryContraptionEntity extends AbstractContraptionEntity { Direction movementAxis; diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/glue/SuperGlueItem.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/glue/SuperGlueItem.java index 7cbd56b8f..99811ca53 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/glue/SuperGlueItem.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/glue/SuperGlueItem.java @@ -20,8 +20,6 @@ import net.minecraft.world.World; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; -import net.minecraft.item.Item.Properties; - public class SuperGlueItem extends Item { public SuperGlueItem(Properties properties) { diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/mounted/CartAssemblerBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/mounted/CartAssemblerBlock.java index 18ffa2a3d..230c858a2 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/mounted/CartAssemblerBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/mounted/CartAssemblerBlock.java @@ -57,8 +57,6 @@ import net.minecraft.world.IWorldReader; import net.minecraft.world.World; import net.minecraft.world.server.ServerWorld; -import net.minecraft.block.AbstractBlock.Properties; - public class CartAssemblerBlock extends AbstractRailBlock implements ITE, IWrenchable, ISpecialBlockItemRequirement { diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/mounted/CartAssemblerBlockItem.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/mounted/CartAssemblerBlockItem.java index cb597bab5..e8678801f 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/mounted/CartAssemblerBlockItem.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/mounted/CartAssemblerBlockItem.java @@ -21,8 +21,6 @@ import net.minecraft.util.SoundEvents; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; -import net.minecraft.item.Item.Properties; - public class CartAssemblerBlockItem extends BlockItem { public CartAssemblerBlockItem(Block block, Properties properties) { diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/mounted/MinecartContraptionItem.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/mounted/MinecartContraptionItem.java index 8e88ff2a5..1f40b822f 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/mounted/MinecartContraptionItem.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/mounted/MinecartContraptionItem.java @@ -46,8 +46,6 @@ import net.minecraftforge.event.entity.player.PlayerInteractEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod.EventBusSubscriber; -import net.minecraft.item.Item.Properties; - @EventBusSubscriber public class MinecartContraptionItem extends Item { diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/mounted/MountedContraption.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/mounted/MountedContraption.java index 959dcc4cf..faec44b37 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/mounted/MountedContraption.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/mounted/MountedContraption.java @@ -35,8 +35,6 @@ import net.minecraft.world.gen.feature.template.Template.BlockInfo; import net.minecraftforge.items.IItemHandlerModifiable; import net.minecraftforge.items.wrapper.InvWrapper; -import com.simibubi.create.content.contraptions.components.structureMovement.Contraption.ContraptionInvWrapper; - public class MountedContraption extends Contraption { public CartMovementMode rotationMode; diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/piston/LinearActuatorTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/piston/LinearActuatorTileEntity.java index bb4962679..a4f3b1671 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/piston/LinearActuatorTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/piston/LinearActuatorTileEntity.java @@ -21,8 +21,6 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.vector.Vector3d; -import com.simibubi.create.content.contraptions.components.structureMovement.IControlContraption.MovementMode; - public abstract class LinearActuatorTileEntity extends KineticTileEntity implements IControlContraption, IDisplayAssemblyExceptions { diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/piston/MechanicalPistonBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/piston/MechanicalPistonBlock.java index 04d12e65b..b936f8814 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/piston/MechanicalPistonBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/piston/MechanicalPistonBlock.java @@ -35,8 +35,6 @@ import net.minecraft.world.World; import net.minecraft.world.server.ServerWorld; import net.minecraftforge.common.Tags; -import net.minecraft.block.AbstractBlock.Properties; - public class MechanicalPistonBlock extends DirectionalAxisKineticBlock implements ITE { public static final EnumProperty STATE = EnumProperty.create("state", PistonState.class); diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/piston/MechanicalPistonHeadBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/piston/MechanicalPistonHeadBlock.java index 0b8e4553c..ac665c58f 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/piston/MechanicalPistonHeadBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/piston/MechanicalPistonHeadBlock.java @@ -30,8 +30,6 @@ import net.minecraft.world.IBlockReader; import net.minecraft.world.IWorld; import net.minecraft.world.World; -import net.minecraft.block.AbstractBlock.Properties; - public class MechanicalPistonHeadBlock extends ProperDirectionalBlock implements IWaterLoggable { public static final EnumProperty TYPE = BlockStateProperties.PISTON_TYPE; diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/piston/PistonExtensionPoleBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/piston/PistonExtensionPoleBlock.java index 658c60781..79f82e7f4 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/piston/PistonExtensionPoleBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/piston/PistonExtensionPoleBlock.java @@ -44,8 +44,6 @@ import net.minecraft.world.IWorld; import net.minecraft.world.World; import net.minecraftforge.common.ToolType; -import net.minecraft.block.AbstractBlock.Properties; - public class PistonExtensionPoleBlock extends ProperDirectionalBlock implements IWrenchable, IWaterLoggable { private static final int placementHelperId = PlacementHelpers.register(PlacementHelper.get()); diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/pulley/PulleyBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/pulley/PulleyBlock.java index aafc9c3e2..c482ac605 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/pulley/PulleyBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/pulley/PulleyBlock.java @@ -33,8 +33,6 @@ import net.minecraft.world.IBlockReader; import net.minecraft.world.IWorld; import net.minecraft.world.World; -import net.minecraft.block.AbstractBlock.Properties; - public class PulleyBlock extends HorizontalAxisKineticBlock implements ITE { public static EnumProperty HORIZONTAL_AXIS = BlockStateProperties.HORIZONTAL_AXIS; diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/render/ContraptionRenderDispatcher.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/render/ContraptionRenderDispatcher.java index aaff598e0..d41c688ef 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/render/ContraptionRenderDispatcher.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/render/ContraptionRenderDispatcher.java @@ -13,9 +13,6 @@ import static org.lwjgl.opengl.GL20.glUseProgram; import java.util.List; import java.util.Random; -import com.simibubi.create.content.contraptions.components.structureMovement.ContraptionLighter; -import com.simibubi.create.foundation.config.AllConfigs; - import org.apache.commons.lang3.tuple.Pair; import com.jozufozu.flywheel.backend.Backend; @@ -28,8 +25,10 @@ import com.simibubi.create.AllMovementBehaviours; import com.simibubi.create.CreateClient; import com.simibubi.create.content.contraptions.components.structureMovement.AbstractContraptionEntity; import com.simibubi.create.content.contraptions.components.structureMovement.Contraption; +import com.simibubi.create.content.contraptions.components.structureMovement.ContraptionLighter; import com.simibubi.create.content.contraptions.components.structureMovement.MovementBehaviour; import com.simibubi.create.content.contraptions.components.structureMovement.MovementContext; +import com.simibubi.create.foundation.config.AllConfigs; import com.simibubi.create.foundation.render.AllProgramSpecs; import com.simibubi.create.foundation.render.Compartment; import com.simibubi.create.foundation.render.CreateContexts; diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/MinecartCouplingItem.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/MinecartCouplingItem.java index 9b839a131..737f4a828 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/MinecartCouplingItem.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/MinecartCouplingItem.java @@ -22,8 +22,6 @@ import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.DistExecutor; import net.minecraftforge.fml.common.Mod.EventBusSubscriber; -import net.minecraft.item.Item.Properties; - @EventBusSubscriber public class MinecartCouplingItem extends Item { diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/tracks/ControllerRailBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/tracks/ControllerRailBlock.java index acb0c8c20..2b744df9c 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/tracks/ControllerRailBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/tracks/ControllerRailBlock.java @@ -39,8 +39,6 @@ import net.minecraft.util.math.vector.Vector3i; import net.minecraft.world.IBlockReader; import net.minecraft.world.World; -import net.minecraft.block.AbstractBlock.Properties; - @ParametersAreNonnullByDefault @MethodsReturnNonnullByDefault public class ControllerRailBlock extends AbstractRailBlock implements IWrenchable { diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/tracks/ReinforcedRailBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/tracks/ReinforcedRailBlock.java index e6b0e662f..22eb42a2d 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/tracks/ReinforcedRailBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/tracks/ReinforcedRailBlock.java @@ -25,8 +25,6 @@ import net.minecraft.world.IBlockReader; import net.minecraft.world.IWorldReader; import net.minecraft.world.World; -import net.minecraft.block.AbstractBlock.Properties; - public class ReinforcedRailBlock extends AbstractRailBlock { public static Property RAIL_SHAPE = diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/turntable/TurntableBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/turntable/TurntableBlock.java index 9db909491..f4cbc379f 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/turntable/TurntableBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/turntable/TurntableBlock.java @@ -25,8 +25,6 @@ import net.minecraft.world.IBlockReader; import net.minecraft.world.IWorldReader; import net.minecraft.world.World; -import net.minecraft.block.AbstractBlock.Properties; - public class TurntableBlock extends KineticBlock implements ITE { public TurntableBlock(Properties properties) { diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/waterwheel/WaterWheelBlock.java b/src/main/java/com/simibubi/create/content/contraptions/components/waterwheel/WaterWheelBlock.java index 30f644fef..8d62bc67c 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/waterwheel/WaterWheelBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/waterwheel/WaterWheelBlock.java @@ -32,8 +32,6 @@ import net.minecraft.world.IWorld; import net.minecraft.world.IWorldReader; import net.minecraft.world.World; -import net.minecraft.block.AbstractBlock.Properties; - @ParametersAreNonnullByDefault @MethodsReturnNonnullByDefault public class WaterWheelBlock extends DirectionalKineticBlock implements ITE { diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidBottleItemHook.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidBottleItemHook.java index 16df63210..211e5964a 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidBottleItemHook.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidBottleItemHook.java @@ -18,8 +18,6 @@ import net.minecraftforge.event.entity.player.PlayerInteractEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod.EventBusSubscriber; -import net.minecraft.item.Item.Properties; - @EventBusSubscriber public class FluidBottleItemHook extends Item { diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/OpenEndedPipe.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/OpenEndedPipe.java index f412b03d9..4476c585c 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/OpenEndedPipe.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/OpenEndedPipe.java @@ -38,8 +38,6 @@ import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.capability.IFluidHandler; import net.minecraftforge.fluids.capability.templates.FluidTank; -import net.minecraftforge.fluids.capability.IFluidHandler.FluidAction; - public class OpenEndedPipe extends FlowSource { World world; diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/PumpBlock.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/PumpBlock.java index 9c40cd741..d660caedc 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/PumpBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/PumpBlock.java @@ -32,8 +32,6 @@ import net.minecraft.world.TickPriority; import net.minecraft.world.World; import net.minecraft.world.server.ServerWorld; -import net.minecraft.block.AbstractBlock.Properties; - public class PumpBlock extends DirectionalKineticBlock implements IWaterLoggable, ICogWheel { public PumpBlock(Properties p_i48415_1_) { diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/PumpTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/PumpTileEntity.java index a1143ffc5..ff46cfa22 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/PumpTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/PumpTileEntity.java @@ -35,8 +35,6 @@ import net.minecraftforge.common.util.LazyOptional; import net.minecraftforge.fluids.capability.CapabilityFluidHandler; import net.minecraftforge.fluids.capability.IFluidHandler; -import com.simibubi.create.content.contraptions.fluids.FluidTransportBehaviour.AttachmentTypes; - public class PumpTileEntity extends KineticTileEntity { LerpedFloat arrowDirection; diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/VirtualFluid.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/VirtualFluid.java index 6affc6d7b..c7b5c930c 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/VirtualFluid.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/VirtualFluid.java @@ -8,8 +8,6 @@ import net.minecraft.item.Item; import net.minecraft.item.Items; import net.minecraftforge.fluids.ForgeFlowingFluid; -import net.minecraftforge.fluids.ForgeFlowingFluid.Properties; - public class VirtualFluid extends ForgeFlowingFluid { public VirtualFluid(Properties properties) { 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 3ebbd9e83..73d864880 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 @@ -28,8 +28,6 @@ import net.minecraft.util.math.shapes.ISelectionContext; import net.minecraft.world.World; import net.minecraftforge.fluids.FluidStack; -import com.simibubi.create.content.contraptions.fluids.actors.FluidManipulationBehaviour.BlockPosEntry; - public class FluidDrainingBehaviour extends FluidManipulationBehaviour { Fluid fluid; 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 0ad365d4c..7ac14a5e9 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 @@ -39,8 +39,6 @@ import net.minecraft.world.NextTickListEntry; import net.minecraft.world.World; import net.minecraft.world.server.ServerTickList; -import com.simibubi.create.content.contraptions.fluids.actors.FluidManipulationBehaviour.BlockPosEntry; - public class FluidFillingBehaviour extends FluidManipulationBehaviour { PriorityQueue queue; diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/HosePulleyBlock.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/HosePulleyBlock.java index 19635c8d8..b79cfc316 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/HosePulleyBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/HosePulleyBlock.java @@ -20,8 +20,6 @@ import net.minecraft.world.IBlockReader; import net.minecraft.world.IWorldReader; import net.minecraft.world.World; -import net.minecraft.block.AbstractBlock.Properties; - public class HosePulleyBlock extends HorizontalKineticBlock implements ITE { public HosePulleyBlock(Properties properties) { diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/HosePulleyFluidHandler.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/HosePulleyFluidHandler.java index 3ec633eac..86837a340 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/HosePulleyFluidHandler.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/HosePulleyFluidHandler.java @@ -11,8 +11,6 @@ import net.minecraft.util.math.BlockPos; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.capability.IFluidHandler; -import net.minecraftforge.fluids.capability.IFluidHandler.FluidAction; - public class HosePulleyFluidHandler implements IFluidHandler { // The dynamic interface diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/ItemDrainBlock.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/ItemDrainBlock.java index 0a7a13fdd..b8ce936c3 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/ItemDrainBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/ItemDrainBlock.java @@ -25,8 +25,6 @@ import net.minecraft.util.math.shapes.VoxelShape; import net.minecraft.world.IBlockReader; import net.minecraft.world.World; -import net.minecraft.block.AbstractBlock.Properties; - public class ItemDrainBlock extends Block implements IWrenchable, ITE { public ItemDrainBlock(Properties p_i48440_1_) { diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/SpoutBlock.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/SpoutBlock.java index 2d5634321..30ea3345e 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/SpoutBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/SpoutBlock.java @@ -15,8 +15,6 @@ import net.minecraft.util.math.shapes.VoxelShape; import net.minecraft.world.IBlockReader; import net.minecraft.world.World; -import net.minecraft.block.AbstractBlock.Properties; - public class SpoutBlock extends Block implements IWrenchable { public SpoutBlock(Properties p_i48440_1_) { diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/particle/FluidParticleData.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/particle/FluidParticleData.java index 1e2b7a503..b1ee8f926 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/particle/FluidParticleData.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/particle/FluidParticleData.java @@ -21,8 +21,6 @@ import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.registries.ForgeRegistries; -import net.minecraft.particles.IParticleData.IDeserializer; - public class FluidParticleData implements IParticleData, ICustomParticleData { private ParticleType type; diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/AxisPipeBlock.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/AxisPipeBlock.java index 1ea8c401f..76ec1811d 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/AxisPipeBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/AxisPipeBlock.java @@ -38,8 +38,6 @@ import net.minecraft.world.TickPriority; import net.minecraft.world.World; import net.minecraft.world.server.ServerWorld; -import net.minecraft.block.AbstractBlock.Properties; - public class AxisPipeBlock extends RotatedPillarBlock implements IWrenchableWithBracket, IAxisPipe { public AxisPipeBlock(Properties p_i48339_1_) { diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/BracketBlock.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/BracketBlock.java index df522f4dc..9a096c2f9 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/BracketBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/BracketBlock.java @@ -19,8 +19,6 @@ import net.minecraft.util.Direction; import net.minecraft.util.Direction.Axis; import net.minecraft.util.IStringSerializable; -import net.minecraft.block.AbstractBlock.Properties; - public class BracketBlock extends ProperDirectionalBlock { public static final BooleanProperty AXIS_ALONG_FIRST_COORDINATE = diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/BracketBlockItem.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/BracketBlockItem.java index 243f3a31b..b636ce1f6 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/BracketBlockItem.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/BracketBlockItem.java @@ -17,8 +17,6 @@ import net.minecraft.util.Direction; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; -import net.minecraft.item.Item.Properties; - public class BracketBlockItem extends BlockItem { public BracketBlockItem(Block p_i48527_1_, Properties p_i48527_2_) { diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/EncasedPipeBlock.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/EncasedPipeBlock.java index be375a2dc..e668ab22c 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/EncasedPipeBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/EncasedPipeBlock.java @@ -38,8 +38,6 @@ import net.minecraft.world.TickPriority; import net.minecraft.world.World; import net.minecraft.world.server.ServerWorld; -import net.minecraft.block.AbstractBlock.Properties; - public class EncasedPipeBlock extends Block implements IWrenchable, ISpecialBlockItemRequirement { public static final Map FACING_TO_PROPERTY_MAP = SixWayBlock.PROPERTY_BY_DIRECTION; diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/FluidPipeBlock.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/FluidPipeBlock.java index a42ef87b3..8f4c9b6b7 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/FluidPipeBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/FluidPipeBlock.java @@ -46,8 +46,6 @@ import net.minecraft.world.TickPriority; import net.minecraft.world.World; import net.minecraft.world.server.ServerWorld; -import net.minecraft.block.AbstractBlock.Properties; - public class FluidPipeBlock extends SixWayBlock implements IWaterLoggable, IWrenchableWithBracket { public FluidPipeBlock(Properties properties) { diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/FluidPipeTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/FluidPipeTileEntity.java index bc630c4aa..0b34ef02e 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/FluidPipeTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/FluidPipeTileEntity.java @@ -15,8 +15,6 @@ import net.minecraft.util.Direction; import net.minecraft.util.math.BlockPos; import net.minecraft.world.IBlockDisplayReader; -import com.simibubi.create.content.contraptions.fluids.FluidTransportBehaviour.AttachmentTypes; - public class FluidPipeTileEntity extends SmartTileEntity { public FluidPipeTileEntity(TileEntityType tileEntityTypeIn) { diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/FluidValveBlock.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/FluidValveBlock.java index 16faae839..d2395c2c6 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/FluidValveBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/FluidValveBlock.java @@ -28,8 +28,6 @@ import net.minecraft.world.TickPriority; import net.minecraft.world.World; import net.minecraft.world.server.ServerWorld; -import net.minecraft.block.AbstractBlock.Properties; - public class FluidValveBlock extends DirectionalAxisKineticBlock implements IAxisPipe { public static final BooleanProperty ENABLED = BooleanProperty.create("enabled"); diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/GlassFluidPipeBlock.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/GlassFluidPipeBlock.java index 7680aa163..b1a4729f2 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/GlassFluidPipeBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/GlassFluidPipeBlock.java @@ -26,9 +26,6 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.world.IBlockReader; import net.minecraft.world.World; - -import net.minecraft.block.AbstractBlock.Properties; - @MethodsReturnNonnullByDefault @ParametersAreNonnullByDefault public class GlassFluidPipeBlock extends AxisPipeBlock implements IWaterLoggable, ISpecialBlockItemRequirement { diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/SmartFluidPipeBlock.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/SmartFluidPipeBlock.java index 17058c21b..86b64da1c 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/SmartFluidPipeBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/SmartFluidPipeBlock.java @@ -28,8 +28,6 @@ import net.minecraft.world.TickPriority; import net.minecraft.world.World; import net.minecraft.world.server.ServerWorld; -import net.minecraft.block.AbstractBlock.Properties; - public class SmartFluidPipeBlock extends HorizontalFaceBlock implements IAxisPipe { public SmartFluidPipeBlock(Properties p_i48339_1_) { diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/StraightPipeTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/StraightPipeTileEntity.java index 56c9ba2b0..c8d365642 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/StraightPipeTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/StraightPipeTileEntity.java @@ -15,8 +15,6 @@ import net.minecraft.util.Direction.AxisDirection; import net.minecraft.util.math.BlockPos; import net.minecraft.world.IBlockDisplayReader; -import com.simibubi.create.content.contraptions.fluids.FluidTransportBehaviour.AttachmentTypes; - public class StraightPipeTileEntity extends SmartTileEntity { public StraightPipeTileEntity(TileEntityType tileEntityTypeIn) { diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/potion/PotionFluid.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/potion/PotionFluid.java index 8f45f10d1..d65ffb09a 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/potion/PotionFluid.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/potion/PotionFluid.java @@ -20,9 +20,6 @@ import net.minecraftforge.fluids.FluidAttributes; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.registries.ForgeRegistries; -import net.minecraftforge.fluids.FluidAttributes.Builder; -import net.minecraftforge.fluids.ForgeFlowingFluid.Properties; - public class PotionFluid extends VirtualFluid { public enum BottleType { diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/CreativeFluidTankTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/CreativeFluidTankTileEntity.java index 2dcff2dc9..e5bf6f58a 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/CreativeFluidTankTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/CreativeFluidTankTileEntity.java @@ -9,8 +9,6 @@ import net.minecraft.tileentity.TileEntityType; import net.minecraft.util.text.ITextComponent; import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fluids.capability.IFluidHandler.FluidAction; - public class CreativeFluidTankTileEntity extends FluidTankTileEntity { public CreativeFluidTankTileEntity(TileEntityType tileEntityTypeIn) { 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 3b4068981..0ad417194 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 @@ -47,8 +47,6 @@ import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.capability.CapabilityFluidHandler; import net.minecraftforge.fluids.capability.IFluidHandler; -import net.minecraft.block.AbstractBlock.Properties; - public class FluidTankBlock extends Block implements IWrenchable, ITE { public static final BooleanProperty TOP = BooleanProperty.create("top"); 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 3687fcf89..348fbcb45 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 @@ -14,8 +14,6 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import net.minecraftforge.fluids.FluidStack; -import net.minecraft.item.Item.Properties; - public class FluidTankItem extends BlockItem { public FluidTankItem(Block p_i48527_1_, Properties p_i48527_2_) { diff --git a/src/main/java/com/simibubi/create/content/contraptions/goggles/GogglesItem.java b/src/main/java/com/simibubi/create/content/contraptions/goggles/GogglesItem.java index 09c31ad95..f85c88d8a 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/goggles/GogglesItem.java +++ b/src/main/java/com/simibubi/create/content/contraptions/goggles/GogglesItem.java @@ -14,8 +14,6 @@ import net.minecraft.util.ActionResultType; import net.minecraft.util.Hand; import net.minecraft.world.World; -import net.minecraft.item.Item.Properties; - public class GogglesItem extends Item { public GogglesItem(Properties properties) { diff --git a/src/main/java/com/simibubi/create/content/contraptions/itemAssembly/SequencedAssemblyItem.java b/src/main/java/com/simibubi/create/content/contraptions/itemAssembly/SequencedAssemblyItem.java index f3cb49835..fa37002d0 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/itemAssembly/SequencedAssemblyItem.java +++ b/src/main/java/com/simibubi/create/content/contraptions/itemAssembly/SequencedAssemblyItem.java @@ -9,8 +9,6 @@ import net.minecraft.nbt.CompoundNBT; import net.minecraft.util.NonNullList; import net.minecraft.util.math.MathHelper; -import net.minecraft.item.Item.Properties; - public class SequencedAssemblyItem extends Item { public SequencedAssemblyItem(Properties p_i48487_1_) { diff --git a/src/main/java/com/simibubi/create/content/contraptions/particle/AirFlowParticleData.java b/src/main/java/com/simibubi/create/content/contraptions/particle/AirFlowParticleData.java index af874fb00..bff77492d 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/particle/AirFlowParticleData.java +++ b/src/main/java/com/simibubi/create/content/contraptions/particle/AirFlowParticleData.java @@ -16,8 +16,6 @@ import net.minecraft.util.math.vector.Vector3i; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; -import net.minecraft.particles.IParticleData.IDeserializer; - public class AirFlowParticleData implements IParticleData, ICustomParticleDataWithSprite { public static final Codec CODEC = RecordCodecBuilder.create(i -> diff --git a/src/main/java/com/simibubi/create/content/contraptions/particle/AirParticleData.java b/src/main/java/com/simibubi/create/content/contraptions/particle/AirParticleData.java index 9f214547d..133dc3180 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/particle/AirParticleData.java +++ b/src/main/java/com/simibubi/create/content/contraptions/particle/AirParticleData.java @@ -15,8 +15,6 @@ import net.minecraft.particles.ParticleType; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; -import net.minecraft.particles.IParticleData.IDeserializer; - public class AirParticleData implements IParticleData, ICustomParticleDataWithSprite { public static final Codec CODEC = RecordCodecBuilder.create(i -> diff --git a/src/main/java/com/simibubi/create/content/contraptions/particle/CubeParticleData.java b/src/main/java/com/simibubi/create/content/contraptions/particle/CubeParticleData.java index 39c21b7b9..7bf66ce3c 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/particle/CubeParticleData.java +++ b/src/main/java/com/simibubi/create/content/contraptions/particle/CubeParticleData.java @@ -15,8 +15,6 @@ import net.minecraft.particles.ParticleType; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; -import net.minecraft.particles.IParticleData.IDeserializer; - public class CubeParticleData implements IParticleData, ICustomParticleData { public static final Codec CODEC = RecordCodecBuilder.create(i -> diff --git a/src/main/java/com/simibubi/create/content/contraptions/particle/HeaterParticleData.java b/src/main/java/com/simibubi/create/content/contraptions/particle/HeaterParticleData.java index a9a08dfba..c2cf4c37e 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/particle/HeaterParticleData.java +++ b/src/main/java/com/simibubi/create/content/contraptions/particle/HeaterParticleData.java @@ -18,8 +18,6 @@ import net.minecraft.particles.ParticleType; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; -import net.minecraft.particles.IParticleData.IDeserializer; - @ParametersAreNonnullByDefault @MethodsReturnNonnullByDefault public class HeaterParticleData implements IParticleData, ICustomParticleDataWithSprite { diff --git a/src/main/java/com/simibubi/create/content/contraptions/particle/RotationIndicatorParticleData.java b/src/main/java/com/simibubi/create/content/contraptions/particle/RotationIndicatorParticleData.java index f69c5f031..2827b49a8 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/particle/RotationIndicatorParticleData.java +++ b/src/main/java/com/simibubi/create/content/contraptions/particle/RotationIndicatorParticleData.java @@ -19,8 +19,6 @@ import net.minecraft.util.Direction.Axis; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; -import net.minecraft.particles.IParticleData.IDeserializer; - public class RotationIndicatorParticleData implements IParticleData, ICustomParticleDataWithSprite { diff --git a/src/main/java/com/simibubi/create/content/contraptions/processing/BasinBlock.java b/src/main/java/com/simibubi/create/content/contraptions/processing/BasinBlock.java index 61ada67e1..673115935 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/processing/BasinBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/processing/BasinBlock.java @@ -48,8 +48,6 @@ import net.minecraftforge.items.IItemHandlerModifiable; import net.minecraftforge.items.ItemHandlerHelper; import net.minecraftforge.items.ItemStackHandler; -import net.minecraft.block.AbstractBlock.Properties; - public class BasinBlock extends Block implements ITE, IWrenchable { public static final DirectionProperty FACING = BlockStateProperties.FACING_HOPPER; diff --git a/src/main/java/com/simibubi/create/content/contraptions/processing/burner/BlazeBurnerBlock.java b/src/main/java/com/simibubi/create/content/contraptions/processing/burner/BlazeBurnerBlock.java index c03d496d2..84f581674 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/processing/burner/BlazeBurnerBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/processing/burner/BlazeBurnerBlock.java @@ -54,8 +54,6 @@ import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.common.util.FakePlayer; -import net.minecraft.block.AbstractBlock.Properties; - @MethodsReturnNonnullByDefault @ParametersAreNonnullByDefault public class BlazeBurnerBlock extends Block implements ITE { diff --git a/src/main/java/com/simibubi/create/content/contraptions/processing/burner/BlazeBurnerBlockItem.java b/src/main/java/com/simibubi/create/content/contraptions/processing/burner/BlazeBurnerBlockItem.java index f09197d66..8e033b5b5 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/processing/burner/BlazeBurnerBlockItem.java +++ b/src/main/java/com/simibubi/create/content/contraptions/processing/burner/BlazeBurnerBlockItem.java @@ -36,8 +36,6 @@ import net.minecraft.world.World; import net.minecraft.world.spawner.AbstractSpawner; import net.minecraftforge.fml.common.ObfuscationReflectionHelper; -import net.minecraft.item.Item.Properties; - @MethodsReturnNonnullByDefault @ParametersAreNonnullByDefault public class BlazeBurnerBlockItem extends BlockItem { diff --git a/src/main/java/com/simibubi/create/content/contraptions/processing/burner/LitBlazeBurnerBlock.java b/src/main/java/com/simibubi/create/content/contraptions/processing/burner/LitBlazeBurnerBlock.java index c0d9fa4fa..f81829625 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/processing/burner/LitBlazeBurnerBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/processing/burner/LitBlazeBurnerBlock.java @@ -31,8 +31,6 @@ import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.common.ToolType; -import net.minecraft.block.AbstractBlock.Properties; - public class LitBlazeBurnerBlock extends Block { public static final EnumProperty FLAME_TYPE = EnumProperty.create("flame_type", FlameType.class); diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/advanced/GantryShaftBlock.java b/src/main/java/com/simibubi/create/content/contraptions/relays/advanced/GantryShaftBlock.java index 3219d900b..a05ec6708 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/advanced/GantryShaftBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/advanced/GantryShaftBlock.java @@ -45,8 +45,6 @@ import net.minecraft.world.IWorld; import net.minecraft.world.IWorldReader; import net.minecraft.world.World; -import net.minecraft.block.AbstractBlock.Properties; - public class GantryShaftBlock extends DirectionalKineticBlock { public static final Property PART = EnumProperty.create("part", Part.class); diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/advanced/SpeedControllerBlock.java b/src/main/java/com/simibubi/create/content/contraptions/relays/advanced/SpeedControllerBlock.java index 2c2be6f0e..c0838a5c9 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/advanced/SpeedControllerBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/advanced/SpeedControllerBlock.java @@ -33,8 +33,6 @@ import net.minecraft.util.math.shapes.VoxelShape; import net.minecraft.world.IBlockReader; import net.minecraft.world.World; -import net.minecraft.block.AbstractBlock.Properties; - @ParametersAreNonnullByDefault @MethodsReturnNonnullByDefault public class SpeedControllerBlock extends HorizontalAxisKineticBlock implements ITE { diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/advanced/sequencer/SequencedGearshiftBlock.java b/src/main/java/com/simibubi/create/content/contraptions/relays/advanced/sequencer/SequencedGearshiftBlock.java index 3389e3b56..f66821680 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/advanced/sequencer/SequencedGearshiftBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/advanced/sequencer/SequencedGearshiftBlock.java @@ -36,8 +36,6 @@ import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.fml.DistExecutor; -import net.minecraft.block.AbstractBlock.Properties; - public class SequencedGearshiftBlock extends HorizontalAxisKineticBlock implements ITE { public static final BooleanProperty VERTICAL = BooleanProperty.create("vertical"); diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltBlock.java b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltBlock.java index a10935923..d72e079f6 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltBlock.java @@ -76,8 +76,6 @@ import net.minecraftforge.common.Tags; import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.IItemHandler; -import net.minecraft.block.AbstractBlock.Properties; - public class BeltBlock extends HorizontalKineticBlock implements ITE, ISpecialBlockItemRequirement { public static final Property SLOPE = EnumProperty.create("slope", BeltSlope.class); diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/item/BeltConnectorItem.java b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/item/BeltConnectorItem.java index 733031c90..e9f63918c 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/item/BeltConnectorItem.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/item/BeltConnectorItem.java @@ -34,8 +34,6 @@ import net.minecraft.util.NonNullList; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; -import net.minecraft.item.Item.Properties; - public class BeltConnectorItem extends BlockItem { public BeltConnectorItem(Properties properties) { diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/elementary/AbstractShaftBlock.java b/src/main/java/com/simibubi/create/content/contraptions/relays/elementary/AbstractShaftBlock.java index 6e74032a9..992bb5a84 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/elementary/AbstractShaftBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/elementary/AbstractShaftBlock.java @@ -30,8 +30,6 @@ import net.minecraft.world.IWorld; import net.minecraft.world.IWorldReader; import net.minecraft.world.World; -import net.minecraft.block.AbstractBlock.Properties; - public abstract class AbstractShaftBlock extends RotatedPillarKineticBlock implements IWaterLoggable, IWrenchableWithBracket { diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/elementary/CogWheelBlock.java b/src/main/java/com/simibubi/create/content/contraptions/relays/elementary/CogWheelBlock.java index 7df1faa2f..b22bb9457 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/elementary/CogWheelBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/elementary/CogWheelBlock.java @@ -23,8 +23,6 @@ import net.minecraft.world.IBlockReader; import net.minecraft.world.IWorldReader; import net.minecraft.world.World; -import net.minecraft.block.AbstractBlock.Properties; - @ParametersAreNonnullByDefault @MethodsReturnNonnullByDefault @SuppressWarnings("deprecation") diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/elementary/CogwheelBlockItem.java b/src/main/java/com/simibubi/create/content/contraptions/relays/elementary/CogwheelBlockItem.java index 60b44226c..23b34992a 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/elementary/CogwheelBlockItem.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/elementary/CogwheelBlockItem.java @@ -29,8 +29,6 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockRayTraceResult; import net.minecraft.world.World; -import net.minecraft.item.Item.Properties; - public class CogwheelBlockItem extends BlockItem { boolean large; diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/elementary/ShaftBlock.java b/src/main/java/com/simibubi/create/content/contraptions/relays/elementary/ShaftBlock.java index e169a93e8..c00d1a77f 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/elementary/ShaftBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/elementary/ShaftBlock.java @@ -26,8 +26,6 @@ import net.minecraft.util.math.shapes.VoxelShape; import net.minecraft.world.IBlockReader; import net.minecraft.world.World; -import net.minecraft.block.AbstractBlock.Properties; - public class ShaftBlock extends AbstractShaftBlock { private static final int placementHelperId = PlacementHelpers.register(new PlacementHelper()); diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/encased/AbstractEncasedShaftBlock.java b/src/main/java/com/simibubi/create/content/contraptions/relays/encased/AbstractEncasedShaftBlock.java index 7c7c7ea29..2dcbf534f 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/encased/AbstractEncasedShaftBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/encased/AbstractEncasedShaftBlock.java @@ -14,8 +14,6 @@ import net.minecraft.util.Direction; import net.minecraft.util.math.BlockPos; import net.minecraft.world.IWorldReader; -import net.minecraft.block.AbstractBlock.Properties; - @MethodsReturnNonnullByDefault public abstract class AbstractEncasedShaftBlock extends RotatedPillarKineticBlock { public AbstractEncasedShaftBlock(Properties properties) { diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/encased/AdjustablePulleyBlock.java b/src/main/java/com/simibubi/create/content/contraptions/relays/encased/AdjustablePulleyBlock.java index e2f5b841f..54b44f711 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/encased/AdjustablePulleyBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/encased/AdjustablePulleyBlock.java @@ -14,8 +14,6 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.world.IBlockReader; import net.minecraft.world.World; -import net.minecraft.block.AbstractBlock.Properties; - public class AdjustablePulleyBlock extends EncasedBeltBlock implements ITE { public static BooleanProperty POWERED = BlockStateProperties.POWERED; diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/encased/ClutchBlock.java b/src/main/java/com/simibubi/create/content/contraptions/relays/encased/ClutchBlock.java index e9dc87580..f0beb78ac 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/encased/ClutchBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/encased/ClutchBlock.java @@ -9,8 +9,6 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.world.IBlockReader; import net.minecraft.world.World; -import net.minecraft.block.AbstractBlock.Properties; - public class ClutchBlock extends GearshiftBlock { public ClutchBlock(Properties properties) { diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/encased/EncasedBeltBlock.java b/src/main/java/com/simibubi/create/content/contraptions/relays/encased/EncasedBeltBlock.java index 4f01db3ee..eb7a15205 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/encased/EncasedBeltBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/encased/EncasedBeltBlock.java @@ -27,8 +27,6 @@ import net.minecraft.world.IBlockReader; import net.minecraft.world.IWorld; import net.minecraft.world.IWorldReader; -import net.minecraft.block.AbstractBlock.Properties; - public class EncasedBeltBlock extends RotatedPillarKineticBlock { public static final Property PART = EnumProperty.create("part", Part.class); diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/encased/EncasedShaftBlock.java b/src/main/java/com/simibubi/create/content/contraptions/relays/encased/EncasedShaftBlock.java index f4a3ed011..7ff8a064f 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/encased/EncasedShaftBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/encased/EncasedShaftBlock.java @@ -15,8 +15,6 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.util.ActionResultType; import net.minecraft.world.IBlockReader; -import net.minecraft.block.AbstractBlock.Properties; - public class EncasedShaftBlock extends AbstractEncasedShaftBlock implements ISpecialBlockItemRequirement { private BlockEntry casing; diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/encased/GearshiftBlock.java b/src/main/java/com/simibubi/create/content/contraptions/relays/encased/GearshiftBlock.java index c907cbbd0..c96a2cb6d 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/encased/GearshiftBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/encased/GearshiftBlock.java @@ -21,8 +21,6 @@ import net.minecraft.world.TickPriority; import net.minecraft.world.World; import net.minecraft.world.server.ServerWorld; -import net.minecraft.block.AbstractBlock.Properties; - public class GearshiftBlock extends AbstractEncasedShaftBlock implements ITE { public static final BooleanProperty POWERED = BlockStateProperties.POWERED; diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/gauge/GaugeBlock.java b/src/main/java/com/simibubi/create/content/contraptions/relays/gauge/GaugeBlock.java index 71bb136d7..57c489955 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/gauge/GaugeBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/gauge/GaugeBlock.java @@ -29,8 +29,6 @@ import net.minecraft.util.math.vector.Vector3d; import net.minecraft.world.IBlockReader; import net.minecraft.world.World; -import net.minecraft.block.AbstractBlock.Properties; - public class GaugeBlock extends DirectionalAxisKineticBlock { public static final GaugeShaper GAUGE = GaugeShaper.make(); diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/gearbox/GearboxBlock.java b/src/main/java/com/simibubi/create/content/contraptions/relays/gearbox/GearboxBlock.java index bf75f70ed..83a2a74a9 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/gearbox/GearboxBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/gearbox/GearboxBlock.java @@ -23,8 +23,6 @@ import net.minecraft.util.math.RayTraceResult; import net.minecraft.world.IBlockReader; import net.minecraft.world.IWorldReader; -import net.minecraft.block.AbstractBlock.Properties; - public class GearboxBlock extends RotatedPillarKineticBlock { public GearboxBlock(Properties properties) { diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/gearbox/VerticalGearboxItem.java b/src/main/java/com/simibubi/create/content/contraptions/relays/gearbox/VerticalGearboxItem.java index 5fea417ea..23832729b 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/gearbox/VerticalGearboxItem.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/gearbox/VerticalGearboxItem.java @@ -20,8 +20,6 @@ import net.minecraft.util.NonNullList; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; -import net.minecraft.item.Item.Properties; - public class VerticalGearboxItem extends BlockItem { public VerticalGearboxItem(Properties builder) { diff --git a/src/main/java/com/simibubi/create/content/contraptions/wrench/WrenchItem.java b/src/main/java/com/simibubi/create/content/contraptions/wrench/WrenchItem.java index 057738739..79131ad98 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/wrench/WrenchItem.java +++ b/src/main/java/com/simibubi/create/content/contraptions/wrench/WrenchItem.java @@ -22,8 +22,6 @@ import net.minecraft.world.World; import net.minecraft.world.server.ServerWorld; import net.minecraftforge.event.entity.player.AttackEntityEvent; -import net.minecraft.item.Item.Properties; - public class WrenchItem extends Item { public WrenchItem(Properties properties) { diff --git a/src/main/java/com/simibubi/create/content/curiosities/BuildersTeaItem.java b/src/main/java/com/simibubi/create/content/curiosities/BuildersTeaItem.java index da273627e..46791ab15 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/BuildersTeaItem.java +++ b/src/main/java/com/simibubi/create/content/curiosities/BuildersTeaItem.java @@ -15,8 +15,6 @@ import net.minecraft.util.ActionResult; import net.minecraft.util.Hand; import net.minecraft.world.World; -import net.minecraft.item.Item.Properties; - public class BuildersTeaItem extends Item { public BuildersTeaItem(Properties p_i48487_1_) { diff --git a/src/main/java/com/simibubi/create/content/curiosities/ChromaticCompoundItem.java b/src/main/java/com/simibubi/create/content/curiosities/ChromaticCompoundItem.java index 0c32dbb7a..9e0cb506f 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/ChromaticCompoundItem.java +++ b/src/main/java/com/simibubi/create/content/curiosities/ChromaticCompoundItem.java @@ -27,8 +27,6 @@ import net.minecraft.util.math.vector.Vector3d; import net.minecraft.world.World; import net.minecraft.world.gen.Heightmap; -import net.minecraft.item.Item.Properties; - public class ChromaticCompoundItem extends Item { public ChromaticCompoundItem(Properties properties) { diff --git a/src/main/java/com/simibubi/create/content/curiosities/CombustibleItem.java b/src/main/java/com/simibubi/create/content/curiosities/CombustibleItem.java index caaed78ae..a92cb727d 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/CombustibleItem.java +++ b/src/main/java/com/simibubi/create/content/curiosities/CombustibleItem.java @@ -3,8 +3,6 @@ package com.simibubi.create.content.curiosities; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; -import net.minecraft.item.Item.Properties; - public class CombustibleItem extends Item { private int burnTime = -1; diff --git a/src/main/java/com/simibubi/create/content/curiosities/NoGravMagicalDohickyItem.java b/src/main/java/com/simibubi/create/content/curiosities/NoGravMagicalDohickyItem.java index 0a41070cf..328164c20 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/NoGravMagicalDohickyItem.java +++ b/src/main/java/com/simibubi/create/content/curiosities/NoGravMagicalDohickyItem.java @@ -11,8 +11,6 @@ import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.vector.Vector3d; import net.minecraft.world.World; -import net.minecraft.item.Item.Properties; - public class NoGravMagicalDohickyItem extends Item { public NoGravMagicalDohickyItem(Properties p_i48487_1_) { diff --git a/src/main/java/com/simibubi/create/content/curiosities/RefinedRadianceItem.java b/src/main/java/com/simibubi/create/content/curiosities/RefinedRadianceItem.java index 1712ae8d0..3cb9584e7 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/RefinedRadianceItem.java +++ b/src/main/java/com/simibubi/create/content/curiosities/RefinedRadianceItem.java @@ -4,8 +4,6 @@ import net.minecraft.entity.item.ItemEntity; import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompoundNBT; -import net.minecraft.item.Item.Properties; - public class RefinedRadianceItem extends NoGravMagicalDohickyItem { public RefinedRadianceItem(Properties properties) { diff --git a/src/main/java/com/simibubi/create/content/curiosities/ShadowSteelItem.java b/src/main/java/com/simibubi/create/content/curiosities/ShadowSteelItem.java index 96b1c5548..9f59e52c8 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/ShadowSteelItem.java +++ b/src/main/java/com/simibubi/create/content/curiosities/ShadowSteelItem.java @@ -4,8 +4,6 @@ import net.minecraft.entity.item.ItemEntity; import net.minecraft.nbt.CompoundNBT; import net.minecraft.util.math.MathHelper; -import net.minecraft.item.Item.Properties; - public class ShadowSteelItem extends NoGravMagicalDohickyItem { public ShadowSteelItem(Properties properties) { 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 f9bdccf0f..dc4725be6 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/TreeFertilizerItem.java +++ b/src/main/java/com/simibubi/create/content/curiosities/TreeFertilizerItem.java @@ -13,8 +13,6 @@ import net.minecraft.util.ActionResultType; import net.minecraft.util.math.BlockPos; import net.minecraft.world.server.ServerWorld; -import net.minecraft.item.Item.Properties; - public class TreeFertilizerItem extends Item { public TreeFertilizerItem(Properties properties) { diff --git a/src/main/java/com/simibubi/create/content/curiosities/armor/CapacityEnchantment.java b/src/main/java/com/simibubi/create/content/curiosities/armor/CapacityEnchantment.java index da5c2dc37..49b31df0d 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/armor/CapacityEnchantment.java +++ b/src/main/java/com/simibubi/create/content/curiosities/armor/CapacityEnchantment.java @@ -5,8 +5,6 @@ import net.minecraft.enchantment.EnchantmentType; import net.minecraft.inventory.EquipmentSlotType; import net.minecraft.item.ItemStack; -import net.minecraft.enchantment.Enchantment.Rarity; - public class CapacityEnchantment extends Enchantment { public CapacityEnchantment(Rarity p_i46731_1_, EnchantmentType p_i46731_2_, EquipmentSlotType[] p_i46731_3_) { diff --git a/src/main/java/com/simibubi/create/content/curiosities/armor/CopperArmorItem.java b/src/main/java/com/simibubi/create/content/curiosities/armor/CopperArmorItem.java index df735ef18..3b8274e37 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/armor/CopperArmorItem.java +++ b/src/main/java/com/simibubi/create/content/curiosities/armor/CopperArmorItem.java @@ -7,8 +7,6 @@ import net.minecraft.inventory.EquipmentSlotType; import net.minecraft.item.ArmorItem; import net.minecraft.item.ItemStack; -import net.minecraft.item.Item.Properties; - public class CopperArmorItem extends ArmorItem { public CopperArmorItem(EquipmentSlotType p_i48534_2_, Properties p_i48534_3_) { diff --git a/src/main/java/com/simibubi/create/content/curiosities/armor/CopperBacktankBlock.java b/src/main/java/com/simibubi/create/content/curiosities/armor/CopperBacktankBlock.java index a483f7560..40ae701ba 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/armor/CopperBacktankBlock.java +++ b/src/main/java/com/simibubi/create/content/curiosities/armor/CopperBacktankBlock.java @@ -44,8 +44,6 @@ import net.minecraft.world.IWorldReader; import net.minecraft.world.World; import net.minecraftforge.common.util.FakePlayer; -import net.minecraft.block.AbstractBlock.Properties; - public class CopperBacktankBlock extends HorizontalKineticBlock implements ITE, IWaterLoggable { diff --git a/src/main/java/com/simibubi/create/content/curiosities/armor/CopperBacktankItem.java b/src/main/java/com/simibubi/create/content/curiosities/armor/CopperBacktankItem.java index 3fa0f3065..81df65440 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/armor/CopperBacktankItem.java +++ b/src/main/java/com/simibubi/create/content/curiosities/armor/CopperBacktankItem.java @@ -12,8 +12,6 @@ import net.minecraft.util.ActionResultType; import net.minecraft.util.NonNullList; import net.minecraft.util.math.MathHelper; -import net.minecraft.item.Item.Properties; - public class CopperBacktankItem extends CopperArmorItem implements ICapacityEnchantable { public static final int DURABILITY_BAR = 0xefefef; diff --git a/src/main/java/com/simibubi/create/content/curiosities/armor/DivingBootsItem.java b/src/main/java/com/simibubi/create/content/curiosities/armor/DivingBootsItem.java index fa47be38b..bde20ed32 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/armor/DivingBootsItem.java +++ b/src/main/java/com/simibubi/create/content/curiosities/armor/DivingBootsItem.java @@ -13,8 +13,6 @@ import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod.EventBusSubscriber; import net.minecraftforge.fml.common.ObfuscationReflectionHelper; -import net.minecraft.item.Item.Properties; - @EventBusSubscriber public class DivingBootsItem extends CopperArmorItem { diff --git a/src/main/java/com/simibubi/create/content/curiosities/armor/DivingHelmetItem.java b/src/main/java/com/simibubi/create/content/curiosities/armor/DivingHelmetItem.java index e0d14b13c..18d5f81ed 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/armor/DivingHelmetItem.java +++ b/src/main/java/com/simibubi/create/content/curiosities/armor/DivingHelmetItem.java @@ -14,8 +14,6 @@ import net.minecraftforge.event.entity.living.LivingEvent.LivingUpdateEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod.EventBusSubscriber; -import net.minecraft.item.Item.Properties; - @EventBusSubscriber public class DivingHelmetItem extends CopperArmorItem { diff --git a/src/main/java/com/simibubi/create/content/curiosities/bell/AbstractBellBlock.java b/src/main/java/com/simibubi/create/content/curiosities/bell/AbstractBellBlock.java index e8a446804..c3f4e7bc5 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/bell/AbstractBellBlock.java +++ b/src/main/java/com/simibubi/create/content/curiosities/bell/AbstractBellBlock.java @@ -20,8 +20,6 @@ import net.minecraft.util.math.shapes.VoxelShapes; import net.minecraft.world.IBlockReader; import net.minecraft.world.World; -import net.minecraft.block.AbstractBlock.Properties; - public abstract class AbstractBellBlock extends BellBlock implements ITE { public AbstractBellBlock(Properties properties) { diff --git a/src/main/java/com/simibubi/create/content/curiosities/bell/BasicParticleData.java b/src/main/java/com/simibubi/create/content/curiosities/bell/BasicParticleData.java index 2eecfd4d7..4ff8f8328 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/bell/BasicParticleData.java +++ b/src/main/java/com/simibubi/create/content/curiosities/bell/BasicParticleData.java @@ -18,8 +18,6 @@ import net.minecraft.util.registry.Registry; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; -import net.minecraft.particles.IParticleData.IDeserializer; - @ParametersAreNonnullByDefault @MethodsReturnNonnullByDefault public abstract class BasicParticleData implements IParticleData, ICustomParticleDataWithSprite> { diff --git a/src/main/java/com/simibubi/create/content/curiosities/bell/HauntedBellBlock.java b/src/main/java/com/simibubi/create/content/curiosities/bell/HauntedBellBlock.java index bb4df62fd..7b02626a5 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/bell/HauntedBellBlock.java +++ b/src/main/java/com/simibubi/create/content/curiosities/bell/HauntedBellBlock.java @@ -9,8 +9,6 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.world.IBlockReader; import net.minecraft.world.World; -import net.minecraft.block.AbstractBlock.Properties; - public class HauntedBellBlock extends AbstractBellBlock { public HauntedBellBlock(Properties properties) { diff --git a/src/main/java/com/simibubi/create/content/curiosities/bell/PeculiarBellBlock.java b/src/main/java/com/simibubi/create/content/curiosities/bell/PeculiarBellBlock.java index 32bf92fd6..054b37668 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/bell/PeculiarBellBlock.java +++ b/src/main/java/com/simibubi/create/content/curiosities/bell/PeculiarBellBlock.java @@ -19,8 +19,6 @@ import net.minecraft.world.IBlockReader; import net.minecraft.world.IWorld; import net.minecraft.world.World; -import net.minecraft.block.AbstractBlock.Properties; - public class PeculiarBellBlock extends AbstractBellBlock { public PeculiarBellBlock(Properties properties) { diff --git a/src/main/java/com/simibubi/create/content/curiosities/bell/SoulBaseParticle.java b/src/main/java/com/simibubi/create/content/curiosities/bell/SoulBaseParticle.java index b55cf3908..d65e73073 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/bell/SoulBaseParticle.java +++ b/src/main/java/com/simibubi/create/content/curiosities/bell/SoulBaseParticle.java @@ -10,8 +10,6 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.vector.Quaternion; import net.minecraft.util.math.vector.Vector3f; -import com.simibubi.create.content.curiosities.bell.BasicParticleData.IBasicParticleFactory; - public class SoulBaseParticle extends CustomRotationParticle { private final IAnimatedSprite animatedSprite; diff --git a/src/main/java/com/simibubi/create/content/curiosities/bell/SoulParticle.java b/src/main/java/com/simibubi/create/content/curiosities/bell/SoulParticle.java index 2fb9d4c76..32eb92bdf 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/bell/SoulParticle.java +++ b/src/main/java/com/simibubi/create/content/curiosities/bell/SoulParticle.java @@ -12,8 +12,6 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.vector.Quaternion; import net.minecraft.util.math.vector.Vector3f; -import com.simibubi.create.content.curiosities.bell.BasicParticleData.IBasicParticleFactory; - public class SoulParticle extends CustomRotationParticle { private final IAnimatedSprite animatedSprite; diff --git a/src/main/java/com/simibubi/create/content/curiosities/symmetry/SymmetryWandItem.java b/src/main/java/com/simibubi/create/content/curiosities/symmetry/SymmetryWandItem.java index b127efcb4..f912de98b 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/symmetry/SymmetryWandItem.java +++ b/src/main/java/com/simibubi/create/content/curiosities/symmetry/SymmetryWandItem.java @@ -48,8 +48,6 @@ import net.minecraftforge.event.ForgeEventFactory; import net.minecraftforge.fml.DistExecutor; import net.minecraftforge.fml.network.PacketDistributor; -import net.minecraft.item.Item.Properties; - public class SymmetryWandItem extends Item { public static final String SYMMETRY = "symmetry"; diff --git a/src/main/java/com/simibubi/create/content/curiosities/tools/BlueprintItem.java b/src/main/java/com/simibubi/create/content/curiosities/tools/BlueprintItem.java index c1638fee7..7e3b069e1 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/tools/BlueprintItem.java +++ b/src/main/java/com/simibubi/create/content/curiosities/tools/BlueprintItem.java @@ -32,8 +32,6 @@ import net.minecraftforge.common.crafting.StackList; import net.minecraftforge.fml.common.ObfuscationReflectionHelper; import net.minecraftforge.items.ItemStackHandler; -import net.minecraft.item.Item.Properties; - public class BlueprintItem extends Item { public BlueprintItem(Properties p_i48487_1_) { diff --git a/src/main/java/com/simibubi/create/content/curiosities/tools/ExtendoGripItem.java b/src/main/java/com/simibubi/create/content/curiosities/tools/ExtendoGripItem.java index c833042b6..4947f3636 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/tools/ExtendoGripItem.java +++ b/src/main/java/com/simibubi/create/content/curiosities/tools/ExtendoGripItem.java @@ -49,8 +49,6 @@ import net.minecraftforge.eventbus.api.EventPriority; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod.EventBusSubscriber; -import net.minecraft.item.Item.Properties; - @EventBusSubscriber public class ExtendoGripItem extends Item { private static DamageSource lastActiveDamageSource; diff --git a/src/main/java/com/simibubi/create/content/curiosities/tools/SandPaperItem.java b/src/main/java/com/simibubi/create/content/curiosities/tools/SandPaperItem.java index b35d16750..5ee736091 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/tools/SandPaperItem.java +++ b/src/main/java/com/simibubi/create/content/curiosities/tools/SandPaperItem.java @@ -27,8 +27,6 @@ import net.minecraft.util.math.vector.Vector3d; import net.minecraft.world.World; import net.minecraftforge.common.util.FakePlayer; -import net.minecraft.item.Item.Properties; - @MethodsReturnNonnullByDefault @ParametersAreNonnullByDefault public class SandPaperItem extends Item { diff --git a/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoCannonItem.java b/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoCannonItem.java index 7ccfc3b00..6e2b6c9e8 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoCannonItem.java +++ b/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoCannonItem.java @@ -44,8 +44,6 @@ import net.minecraft.world.World; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; -import net.minecraft.item.Item.Properties; - public class PotatoCannonItem extends ShootableItem { public static ItemStack CLIENT_CURRENT_AMMO = ItemStack.EMPTY; diff --git a/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoProjectileRenderMode.java b/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoProjectileRenderMode.java index 9bbfdbad0..3b427f143 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoProjectileRenderMode.java +++ b/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoProjectileRenderMode.java @@ -1,5 +1,7 @@ package com.simibubi.create.content.curiosities.weapons; +import static com.simibubi.create.content.curiosities.weapons.PotatoProjectileRenderMode.entityRandom; + import com.mojang.blaze3d.matrix.MatrixStack; import com.simibubi.create.foundation.utility.AngleHelper; import com.simibubi.create.foundation.utility.MatrixStacker; diff --git a/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoRecoveryEnchantment.java b/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoRecoveryEnchantment.java index 77b017564..d6f770279 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoRecoveryEnchantment.java +++ b/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoRecoveryEnchantment.java @@ -5,8 +5,6 @@ import net.minecraft.enchantment.EnchantmentType; import net.minecraft.inventory.EquipmentSlotType; import net.minecraft.item.ItemStack; -import net.minecraft.enchantment.Enchantment.Rarity; - public class PotatoRecoveryEnchantment extends Enchantment { public PotatoRecoveryEnchantment(Rarity p_i46731_1_, EnchantmentType p_i46731_2_, EquipmentSlotType[] p_i46731_3_) { diff --git a/src/main/java/com/simibubi/create/content/curiosities/zapper/ZapperItem.java b/src/main/java/com/simibubi/create/content/curiosities/zapper/ZapperItem.java index 54f954931..c8f895948 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/zapper/ZapperItem.java +++ b/src/main/java/com/simibubi/create/content/curiosities/zapper/ZapperItem.java @@ -42,8 +42,6 @@ import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.common.util.Constants.NBT; import net.minecraftforge.fml.DistExecutor; -import net.minecraft.item.Item.Properties; - public abstract class ZapperItem extends Item { public ZapperItem(Properties properties) { diff --git a/src/main/java/com/simibubi/create/content/curiosities/zapper/terrainzapper/WorldshaperItem.java b/src/main/java/com/simibubi/create/content/curiosities/zapper/terrainzapper/WorldshaperItem.java index 9b7a1ce2a..107aa9a8b 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/zapper/terrainzapper/WorldshaperItem.java +++ b/src/main/java/com/simibubi/create/content/curiosities/zapper/terrainzapper/WorldshaperItem.java @@ -21,8 +21,6 @@ import net.minecraft.world.World; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; -import net.minecraft.item.Item.Properties; - public class WorldshaperItem extends ZapperItem { public WorldshaperItem(Properties properties) { diff --git a/src/main/java/com/simibubi/create/content/logistics/block/belts/tunnel/BeltTunnelBlock.java b/src/main/java/com/simibubi/create/content/logistics/block/belts/tunnel/BeltTunnelBlock.java index 3fc108e7b..561ed4619 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/belts/tunnel/BeltTunnelBlock.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/belts/tunnel/BeltTunnelBlock.java @@ -35,8 +35,6 @@ import net.minecraft.world.IWorld; import net.minecraft.world.IWorldReader; import net.minecraft.world.World; -import net.minecraft.block.AbstractBlock.Properties; - public class BeltTunnelBlock extends Block implements ITE, IWrenchable { public static final Property SHAPE = EnumProperty.create("shape", Shape.class); diff --git a/src/main/java/com/simibubi/create/content/logistics/block/belts/tunnel/BeltTunnelItem.java b/src/main/java/com/simibubi/create/content/logistics/block/belts/tunnel/BeltTunnelItem.java index ea38d5455..5bcb5aac3 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/belts/tunnel/BeltTunnelItem.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/belts/tunnel/BeltTunnelItem.java @@ -16,8 +16,6 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.shapes.ISelectionContext; import net.minecraft.world.World; -import net.minecraft.item.Item.Properties; - public class BeltTunnelItem extends BlockItem { public BeltTunnelItem(Block p_i48527_1_, Properties p_i48527_2_) { diff --git a/src/main/java/com/simibubi/create/content/logistics/block/belts/tunnel/BeltTunnelShapes.java b/src/main/java/com/simibubi/create/content/logistics/block/belts/tunnel/BeltTunnelShapes.java index 85dd51eff..563cfaebe 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/belts/tunnel/BeltTunnelShapes.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/belts/tunnel/BeltTunnelShapes.java @@ -1,6 +1,8 @@ package com.simibubi.create.content.logistics.block.belts.tunnel; +import static net.minecraft.block.Block.box; + import com.simibubi.create.foundation.utility.VoxelShaper; import net.minecraft.block.BlockState; @@ -10,8 +12,6 @@ import net.minecraft.util.math.shapes.IBooleanFunction; import net.minecraft.util.math.shapes.VoxelShape; import net.minecraft.util.math.shapes.VoxelShapes; -import static net.minecraft.block.Block.box; - public class BeltTunnelShapes { private static VoxelShape block = box(0, -5, 0, 16, 16, 16); diff --git a/src/main/java/com/simibubi/create/content/logistics/block/belts/tunnel/BrassTunnelCTBehaviour.java b/src/main/java/com/simibubi/create/content/logistics/block/belts/tunnel/BrassTunnelCTBehaviour.java index 2f5f70a03..2c8196db3 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/belts/tunnel/BrassTunnelCTBehaviour.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/belts/tunnel/BrassTunnelCTBehaviour.java @@ -10,8 +10,6 @@ import net.minecraft.util.Direction; import net.minecraft.util.math.BlockPos; import net.minecraft.world.IBlockDisplayReader; -import com.simibubi.create.foundation.block.connected.ConnectedTextureBehaviour.CTContext; - public class BrassTunnelCTBehaviour extends ConnectedTextureBehaviour { @Override diff --git a/src/main/java/com/simibubi/create/content/logistics/block/chute/AbstractChuteBlock.java b/src/main/java/com/simibubi/create/content/logistics/block/chute/AbstractChuteBlock.java index 72960cebf..5e142fc13 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/chute/AbstractChuteBlock.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/chute/AbstractChuteBlock.java @@ -32,8 +32,6 @@ import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.common.util.LazyOptional; -import net.minecraft.block.AbstractBlock.Properties; - public abstract class AbstractChuteBlock extends Block implements IWrenchable, ITE { public AbstractChuteBlock(Properties p_i48440_1_) { diff --git a/src/main/java/com/simibubi/create/content/logistics/block/chute/ChuteBlock.java b/src/main/java/com/simibubi/create/content/logistics/block/chute/ChuteBlock.java index bc3f6e87a..fb885f469 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/chute/ChuteBlock.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/chute/ChuteBlock.java @@ -27,8 +27,6 @@ import net.minecraft.world.IBlockReader; import net.minecraft.world.IWorldReader; import net.minecraft.world.World; -import net.minecraft.block.AbstractBlock.Properties; - public class ChuteBlock extends AbstractChuteBlock { public static final Property SHAPE = EnumProperty.create("shape", Shape.class); diff --git a/src/main/java/com/simibubi/create/content/logistics/block/chute/ChuteItem.java b/src/main/java/com/simibubi/create/content/logistics/block/chute/ChuteItem.java index a9686aeea..6a279ae18 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/chute/ChuteItem.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/chute/ChuteItem.java @@ -9,8 +9,6 @@ import net.minecraft.util.Direction; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; -import net.minecraft.item.Item.Properties; - public class ChuteItem extends BlockItem { public ChuteItem(Block p_i48527_1_, Properties p_i48527_2_) { diff --git a/src/main/java/com/simibubi/create/content/logistics/block/chute/SmartChuteBlock.java b/src/main/java/com/simibubi/create/content/logistics/block/chute/SmartChuteBlock.java index 1ab93b740..14e6f209f 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/chute/SmartChuteBlock.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/chute/SmartChuteBlock.java @@ -17,8 +17,6 @@ import net.minecraft.world.IWorldReader; import net.minecraft.world.World; import net.minecraft.world.server.ServerWorld; -import net.minecraft.block.AbstractBlock.Properties; - public class SmartChuteBlock extends AbstractChuteBlock { public SmartChuteBlock(Properties p_i48440_1_) { diff --git a/src/main/java/com/simibubi/create/content/logistics/block/depot/DepotBlock.java b/src/main/java/com/simibubi/create/content/logistics/block/depot/DepotBlock.java index ca14a75fe..eaaf0b0e9 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/depot/DepotBlock.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/depot/DepotBlock.java @@ -23,8 +23,6 @@ import net.minecraft.util.math.shapes.VoxelShape; import net.minecraft.world.IBlockReader; import net.minecraft.world.World; -import net.minecraft.block.AbstractBlock.Properties; - @ParametersAreNonnullByDefault @MethodsReturnNonnullByDefault public class DepotBlock extends Block implements ITE, IWrenchable { diff --git a/src/main/java/com/simibubi/create/content/logistics/block/depot/EjectorBlock.java b/src/main/java/com/simibubi/create/content/logistics/block/depot/EjectorBlock.java index 551d843ad..ad96c1481 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/depot/EjectorBlock.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/depot/EjectorBlock.java @@ -32,8 +32,6 @@ import net.minecraft.world.IBlockReader; import net.minecraft.world.IWorldReader; import net.minecraft.world.World; -import net.minecraft.block.AbstractBlock.Properties; - public class EjectorBlock extends HorizontalKineticBlock implements ITE { public EjectorBlock(Properties properties) { diff --git a/src/main/java/com/simibubi/create/content/logistics/block/depot/EjectorItem.java b/src/main/java/com/simibubi/create/content/logistics/block/depot/EjectorItem.java index 2423d9a01..26bc2d526 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/depot/EjectorItem.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/depot/EjectorItem.java @@ -14,8 +14,6 @@ import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.fml.DistExecutor; import net.minecraftforge.fml.common.Mod.EventBusSubscriber; -import net.minecraft.item.Item.Properties; - @EventBusSubscriber public class EjectorItem extends BlockItem { diff --git a/src/main/java/com/simibubi/create/content/logistics/block/diodes/AbstractDiodeBlock.java b/src/main/java/com/simibubi/create/content/logistics/block/diodes/AbstractDiodeBlock.java index 82c434796..433b637d6 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/diodes/AbstractDiodeBlock.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/diodes/AbstractDiodeBlock.java @@ -5,8 +5,6 @@ import com.simibubi.create.content.contraptions.wrench.IWrenchable; import net.minecraft.block.BlockState; import net.minecraft.block.RedstoneDiodeBlock; -import net.minecraft.block.AbstractBlock.Properties; - public abstract class AbstractDiodeBlock extends RedstoneDiodeBlock implements IWrenchable { public AbstractDiodeBlock(Properties builder) { diff --git a/src/main/java/com/simibubi/create/content/logistics/block/diodes/AdjustableRepeaterBlock.java b/src/main/java/com/simibubi/create/content/logistics/block/diodes/AdjustableRepeaterBlock.java index 9a49c184a..f17b34785 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/diodes/AdjustableRepeaterBlock.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/diodes/AdjustableRepeaterBlock.java @@ -12,8 +12,6 @@ import net.minecraft.util.Direction; import net.minecraft.util.math.BlockPos; import net.minecraft.world.IBlockReader; -import net.minecraft.block.AbstractBlock.Properties; - public class AdjustableRepeaterBlock extends AbstractDiodeBlock { public static BooleanProperty POWERING = BooleanProperty.create("powering"); diff --git a/src/main/java/com/simibubi/create/content/logistics/block/diodes/PoweredLatchBlock.java b/src/main/java/com/simibubi/create/content/logistics/block/diodes/PoweredLatchBlock.java index 667f9cbce..f5a27b6a5 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/diodes/PoweredLatchBlock.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/diodes/PoweredLatchBlock.java @@ -16,8 +16,6 @@ import net.minecraft.world.TickPriority; import net.minecraft.world.World; import net.minecraft.world.server.ServerWorld; -import net.minecraft.block.AbstractBlock.Properties; - public class PoweredLatchBlock extends ToggleLatchBlock { public static BooleanProperty POWERED_SIDE = BooleanProperty.create("powered_side"); diff --git a/src/main/java/com/simibubi/create/content/logistics/block/diodes/PulseRepeaterBlock.java b/src/main/java/com/simibubi/create/content/logistics/block/diodes/PulseRepeaterBlock.java index 2e1253f4a..51a04bb4a 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/diodes/PulseRepeaterBlock.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/diodes/PulseRepeaterBlock.java @@ -12,8 +12,6 @@ import net.minecraft.world.IBlockReader; import net.minecraft.world.TickPriority; import net.minecraft.world.server.ServerWorld; -import net.minecraft.block.AbstractBlock.Properties; - public class PulseRepeaterBlock extends AbstractDiodeBlock { public static BooleanProperty PULSING = BooleanProperty.create("pulsing"); diff --git a/src/main/java/com/simibubi/create/content/logistics/block/diodes/ToggleLatchBlock.java b/src/main/java/com/simibubi/create/content/logistics/block/diodes/ToggleLatchBlock.java index 553c704cd..fc07e4a61 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/diodes/ToggleLatchBlock.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/diodes/ToggleLatchBlock.java @@ -18,8 +18,6 @@ import net.minecraft.world.IBlockReader; import net.minecraft.world.World; import net.minecraft.world.server.ServerWorld; -import net.minecraft.block.AbstractBlock.Properties; - public class ToggleLatchBlock extends AbstractDiodeBlock { public static BooleanProperty POWERING = BooleanProperty.create("powering"); diff --git a/src/main/java/com/simibubi/create/content/logistics/block/funnel/AbstractDirectionalFunnelBlock.java b/src/main/java/com/simibubi/create/content/logistics/block/funnel/AbstractDirectionalFunnelBlock.java index 50bedef64..58b376395 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/funnel/AbstractDirectionalFunnelBlock.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/funnel/AbstractDirectionalFunnelBlock.java @@ -9,8 +9,6 @@ import net.minecraft.util.Direction; import net.minecraft.util.Mirror; import net.minecraft.util.Rotation; -import net.minecraft.block.AbstractBlock.Properties; - public class AbstractDirectionalFunnelBlock extends AbstractFunnelBlock { public static final DirectionProperty FACING = BlockStateProperties.FACING; diff --git a/src/main/java/com/simibubi/create/content/logistics/block/funnel/AbstractFunnelBlock.java b/src/main/java/com/simibubi/create/content/logistics/block/funnel/AbstractFunnelBlock.java index 17beebbdb..4084b5b24 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/funnel/AbstractFunnelBlock.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/funnel/AbstractFunnelBlock.java @@ -31,8 +31,6 @@ import net.minecraft.world.server.ServerWorld; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; -import net.minecraft.block.AbstractBlock.Properties; - public abstract class AbstractFunnelBlock extends Block implements ITE, IWrenchable { public static final BooleanProperty POWERED = BlockStateProperties.POWERED; diff --git a/src/main/java/com/simibubi/create/content/logistics/block/funnel/AbstractHorizontalFunnelBlock.java b/src/main/java/com/simibubi/create/content/logistics/block/funnel/AbstractHorizontalFunnelBlock.java index 744220291..b0d1daa3c 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/funnel/AbstractHorizontalFunnelBlock.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/funnel/AbstractHorizontalFunnelBlock.java @@ -9,8 +9,6 @@ import net.minecraft.util.Direction; import net.minecraft.util.Mirror; import net.minecraft.util.Rotation; -import net.minecraft.block.AbstractBlock.Properties; - public abstract class AbstractHorizontalFunnelBlock extends AbstractFunnelBlock { public static final DirectionProperty HORIZONTAL_FACING = BlockStateProperties.HORIZONTAL_FACING; diff --git a/src/main/java/com/simibubi/create/content/logistics/block/funnel/AndesiteFunnelBlock.java b/src/main/java/com/simibubi/create/content/logistics/block/funnel/AndesiteFunnelBlock.java index 2191748a3..af1104706 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/funnel/AndesiteFunnelBlock.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/funnel/AndesiteFunnelBlock.java @@ -7,8 +7,6 @@ import net.minecraft.util.Direction; import net.minecraft.util.math.BlockPos; import net.minecraft.world.IBlockReader; -import net.minecraft.block.AbstractBlock.Properties; - public class AndesiteFunnelBlock extends FunnelBlock { public AndesiteFunnelBlock(Properties p_i48415_1_) { diff --git a/src/main/java/com/simibubi/create/content/logistics/block/funnel/BeltFunnelBlock.java b/src/main/java/com/simibubi/create/content/logistics/block/funnel/BeltFunnelBlock.java index e7e95f618..46a5d6412 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/funnel/BeltFunnelBlock.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/funnel/BeltFunnelBlock.java @@ -35,8 +35,6 @@ import net.minecraft.world.IWorld; import net.minecraft.world.IWorldReader; import net.minecraft.world.World; -import net.minecraft.block.AbstractBlock.Properties; - public class BeltFunnelBlock extends AbstractHorizontalFunnelBlock implements ISpecialBlockItemRequirement { private BlockEntry parent; diff --git a/src/main/java/com/simibubi/create/content/logistics/block/funnel/BrassFunnelBlock.java b/src/main/java/com/simibubi/create/content/logistics/block/funnel/BrassFunnelBlock.java index d5a1f8426..df3f1a297 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/funnel/BrassFunnelBlock.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/funnel/BrassFunnelBlock.java @@ -7,8 +7,6 @@ import net.minecraft.util.Direction; import net.minecraft.util.math.BlockPos; import net.minecraft.world.IBlockReader; -import net.minecraft.block.AbstractBlock.Properties; - public class BrassFunnelBlock extends FunnelBlock { public BrassFunnelBlock(Properties p_i48415_1_) { diff --git a/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelBlock.java b/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelBlock.java index 51a9b06bd..dae2ff98e 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelBlock.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelBlock.java @@ -28,8 +28,6 @@ import net.minecraft.world.IBlockReader; import net.minecraft.world.IWorld; import net.minecraft.world.World; -import net.minecraft.block.AbstractBlock.Properties; - public abstract class FunnelBlock extends AbstractDirectionalFunnelBlock { public static final BooleanProperty EXTRACTING = BooleanProperty.create("extracting"); diff --git a/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelItem.java b/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelItem.java index df9cad383..3aa9d83b3 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelItem.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelItem.java @@ -14,8 +14,6 @@ import net.minecraftforge.eventbus.api.Event.Result; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod.EventBusSubscriber; -import net.minecraft.item.Item.Properties; - @EventBusSubscriber public class FunnelItem extends BlockItem { diff --git a/src/main/java/com/simibubi/create/content/logistics/block/inventories/AdjustableCrateBlock.java b/src/main/java/com/simibubi/create/content/logistics/block/inventories/AdjustableCrateBlock.java index 5402bebc7..fc50c07f1 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/inventories/AdjustableCrateBlock.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/inventories/AdjustableCrateBlock.java @@ -18,8 +18,6 @@ import net.minecraft.world.IBlockReader; import net.minecraft.world.World; import net.minecraftforge.fml.network.NetworkHooks; -import net.minecraft.block.AbstractBlock.Properties; - public class AdjustableCrateBlock extends CrateBlock { public AdjustableCrateBlock(Properties p_i48415_1_) { diff --git a/src/main/java/com/simibubi/create/content/logistics/block/inventories/CrateBlock.java b/src/main/java/com/simibubi/create/content/logistics/block/inventories/CrateBlock.java index 5b3e88f97..659a49aff 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/inventories/CrateBlock.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/inventories/CrateBlock.java @@ -19,8 +19,6 @@ import net.minecraft.world.IBlockReader; import net.minecraft.world.IWorld; import net.minecraft.world.World; -import net.minecraft.block.AbstractBlock.Properties; - public class CrateBlock extends ProperDirectionalBlock implements IWrenchable { public static final BooleanProperty DOUBLE = BooleanProperty.create("double"); diff --git a/src/main/java/com/simibubi/create/content/logistics/block/inventories/CreativeCrateBlock.java b/src/main/java/com/simibubi/create/content/logistics/block/inventories/CreativeCrateBlock.java index 16f35efac..b7831cfe9 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/inventories/CreativeCrateBlock.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/inventories/CreativeCrateBlock.java @@ -9,8 +9,6 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.world.IBlockReader; import net.minecraft.world.World; -import net.minecraft.block.AbstractBlock.Properties; - public class CreativeCrateBlock extends CrateBlock implements ITE { public CreativeCrateBlock(Properties p_i48415_1_) { diff --git a/src/main/java/com/simibubi/create/content/logistics/block/mechanicalArm/ArmBlock.java b/src/main/java/com/simibubi/create/content/logistics/block/mechanicalArm/ArmBlock.java index 328ebf0a8..1279f6a11 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/mechanicalArm/ArmBlock.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/mechanicalArm/ArmBlock.java @@ -29,8 +29,6 @@ import net.minecraft.util.math.shapes.VoxelShape; import net.minecraft.world.IBlockReader; import net.minecraft.world.World; -import net.minecraft.block.AbstractBlock.Properties; - public class ArmBlock extends KineticBlock implements ITE, ICogWheel { public static final BooleanProperty CEILING = BooleanProperty.create("ceiling"); diff --git a/src/main/java/com/simibubi/create/content/logistics/block/mechanicalArm/ArmItem.java b/src/main/java/com/simibubi/create/content/logistics/block/mechanicalArm/ArmItem.java index ed0f82dc0..5b49ef8ab 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/mechanicalArm/ArmItem.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/mechanicalArm/ArmItem.java @@ -13,8 +13,6 @@ import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.fml.DistExecutor; import net.minecraftforge.fml.common.Mod.EventBusSubscriber; -import net.minecraft.item.Item.Properties; - @EventBusSubscriber public class ArmItem extends BlockItem { diff --git a/src/main/java/com/simibubi/create/content/logistics/block/redstone/AnalogLeverBlock.java b/src/main/java/com/simibubi/create/content/logistics/block/redstone/AnalogLeverBlock.java index 1f2484371..00f805719 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/redstone/AnalogLeverBlock.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/redstone/AnalogLeverBlock.java @@ -29,8 +29,6 @@ import net.minecraft.world.World; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; -import net.minecraft.block.AbstractBlock.Properties; - public class AnalogLeverBlock extends HorizontalFaceBlock implements ITE { public AnalogLeverBlock(Properties p_i48402_1_) { diff --git a/src/main/java/com/simibubi/create/content/logistics/block/redstone/ContentObserverBlock.java b/src/main/java/com/simibubi/create/content/logistics/block/redstone/ContentObserverBlock.java index 0eabc9284..ce0b60d57 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/redstone/ContentObserverBlock.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/redstone/ContentObserverBlock.java @@ -32,8 +32,6 @@ import net.minecraft.world.World; import net.minecraft.world.server.ServerWorld; import net.minecraftforge.items.CapabilityItemHandler; -import net.minecraft.block.AbstractBlock.Properties; - public class ContentObserverBlock extends HorizontalBlock implements ITE, IWrenchable { public static final BooleanProperty POWERED = BlockStateProperties.POWERED; diff --git a/src/main/java/com/simibubi/create/content/logistics/block/redstone/NixieTubeBlock.java b/src/main/java/com/simibubi/create/content/logistics/block/redstone/NixieTubeBlock.java index a85d24e45..1897b46d6 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/redstone/NixieTubeBlock.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/redstone/NixieTubeBlock.java @@ -38,8 +38,6 @@ import net.minecraft.world.IBlockReader; import net.minecraft.world.World; import net.minecraft.world.server.ServerWorld; -import net.minecraft.block.AbstractBlock.Properties; - public class NixieTubeBlock extends HorizontalBlock implements ITE, IWrenchable, ISpecialBlockItemRequirement { diff --git a/src/main/java/com/simibubi/create/content/logistics/block/redstone/RedstoneContactBlock.java b/src/main/java/com/simibubi/create/content/logistics/block/redstone/RedstoneContactBlock.java index 4b5859442..f43297a83 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/redstone/RedstoneContactBlock.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/redstone/RedstoneContactBlock.java @@ -22,8 +22,6 @@ import net.minecraft.world.IWorld; import net.minecraft.world.World; import net.minecraft.world.server.ServerWorld; -import net.minecraft.block.AbstractBlock.Properties; - @ParametersAreNonnullByDefault @MethodsReturnNonnullByDefault public class RedstoneContactBlock extends ProperDirectionalBlock { diff --git a/src/main/java/com/simibubi/create/content/logistics/block/redstone/RedstoneLinkBlock.java b/src/main/java/com/simibubi/create/content/logistics/block/redstone/RedstoneLinkBlock.java index c7505e3dc..ea4140d4e 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/redstone/RedstoneLinkBlock.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/redstone/RedstoneLinkBlock.java @@ -30,8 +30,6 @@ import net.minecraft.world.IWorldReader; import net.minecraft.world.World; import net.minecraft.world.server.ServerWorld; -import net.minecraft.block.AbstractBlock.Properties; - public class RedstoneLinkBlock extends ProperDirectionalBlock implements ITE { public static final BooleanProperty POWERED = BlockStateProperties.POWERED; diff --git a/src/main/java/com/simibubi/create/content/logistics/block/redstone/StockpileSwitchBlock.java b/src/main/java/com/simibubi/create/content/logistics/block/redstone/StockpileSwitchBlock.java index b2887a7a2..c1a1398b5 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/redstone/StockpileSwitchBlock.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/redstone/StockpileSwitchBlock.java @@ -35,8 +35,6 @@ import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.fml.DistExecutor; import net.minecraftforge.items.CapabilityItemHandler; -import net.minecraft.block.AbstractBlock.Properties; - public class StockpileSwitchBlock extends HorizontalBlock implements ITE, IWrenchable { public static final IntegerProperty INDICATOR = IntegerProperty.create("indicator", 0, 6); diff --git a/src/main/java/com/simibubi/create/content/logistics/item/CardboardBoxItem.java b/src/main/java/com/simibubi/create/content/logistics/item/CardboardBoxItem.java index 4e6573fa6..085727e15 100644 --- a/src/main/java/com/simibubi/create/content/logistics/item/CardboardBoxItem.java +++ b/src/main/java/com/simibubi/create/content/logistics/item/CardboardBoxItem.java @@ -24,8 +24,6 @@ import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.common.util.Constants; -import net.minecraft.item.Item.Properties; - public class CardboardBoxItem extends Item { static final int SLOTS = 9; diff --git a/src/main/java/com/simibubi/create/content/logistics/item/LecternControllerBlock.java b/src/main/java/com/simibubi/create/content/logistics/item/LecternControllerBlock.java index eadb09685..1e8f87a77 100644 --- a/src/main/java/com/simibubi/create/content/logistics/item/LecternControllerBlock.java +++ b/src/main/java/com/simibubi/create/content/logistics/item/LecternControllerBlock.java @@ -25,8 +25,6 @@ import net.minecraft.util.math.RayTraceResult; import net.minecraft.world.IBlockReader; import net.minecraft.world.World; -import net.minecraft.block.AbstractBlock.Properties; - public class LecternControllerBlock extends LecternBlock implements ITE, ISpecialBlockItemRequirement { public LecternControllerBlock(Properties properties) { diff --git a/src/main/java/com/simibubi/create/content/logistics/item/LinkedControllerItem.java b/src/main/java/com/simibubi/create/content/logistics/item/LinkedControllerItem.java index 21cdf552a..bbc3d7eff 100644 --- a/src/main/java/com/simibubi/create/content/logistics/item/LinkedControllerItem.java +++ b/src/main/java/com/simibubi/create/content/logistics/item/LinkedControllerItem.java @@ -31,8 +31,6 @@ import net.minecraftforge.fml.DistExecutor; import net.minecraftforge.fml.network.NetworkHooks; import net.minecraftforge.items.ItemStackHandler; -import net.minecraft.item.Item.Properties; - public class LinkedControllerItem extends Item implements INamedContainerProvider { public LinkedControllerItem(Properties properties) { diff --git a/src/main/java/com/simibubi/create/content/logistics/item/filter/FilterItem.java b/src/main/java/com/simibubi/create/content/logistics/item/filter/FilterItem.java index 52906a1ad..b6685de89 100644 --- a/src/main/java/com/simibubi/create/content/logistics/item/filter/FilterItem.java +++ b/src/main/java/com/simibubi/create/content/logistics/item/filter/FilterItem.java @@ -41,8 +41,6 @@ import net.minecraftforge.fml.network.NetworkHooks; import net.minecraftforge.items.ItemHandlerHelper; import net.minecraftforge.items.ItemStackHandler; -import net.minecraft.item.Item.Properties; - public class FilterItem extends Item implements INamedContainerProvider { private FilterType type; diff --git a/src/main/java/com/simibubi/create/content/palettes/ConnectedGlassBlock.java b/src/main/java/com/simibubi/create/content/palettes/ConnectedGlassBlock.java index 14bb132ba..b843de134 100644 --- a/src/main/java/com/simibubi/create/content/palettes/ConnectedGlassBlock.java +++ b/src/main/java/com/simibubi/create/content/palettes/ConnectedGlassBlock.java @@ -9,8 +9,6 @@ import net.minecraft.world.IBlockDisplayReader; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; -import net.minecraft.block.AbstractBlock.Properties; - public class ConnectedGlassBlock extends GlassBlock { public ConnectedGlassBlock(Properties p_i48392_1_) { diff --git a/src/main/java/com/simibubi/create/content/palettes/ConnectedGlassPaneBlock.java b/src/main/java/com/simibubi/create/content/palettes/ConnectedGlassPaneBlock.java index add90e71a..a09a2cb6e 100644 --- a/src/main/java/com/simibubi/create/content/palettes/ConnectedGlassPaneBlock.java +++ b/src/main/java/com/simibubi/create/content/palettes/ConnectedGlassPaneBlock.java @@ -5,8 +5,6 @@ import net.minecraft.util.Direction; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; -import net.minecraft.block.AbstractBlock.Properties; - public class ConnectedGlassPaneBlock extends GlassPaneBlock { public ConnectedGlassPaneBlock(Properties builder) { diff --git a/src/main/java/com/simibubi/create/content/palettes/GlassPaneBlock.java b/src/main/java/com/simibubi/create/content/palettes/GlassPaneBlock.java index 85a875828..afd74e0d8 100644 --- a/src/main/java/com/simibubi/create/content/palettes/GlassPaneBlock.java +++ b/src/main/java/com/simibubi/create/content/palettes/GlassPaneBlock.java @@ -2,8 +2,6 @@ package com.simibubi.create.content.palettes; import net.minecraft.block.PaneBlock; -import net.minecraft.block.AbstractBlock.Properties; - public class GlassPaneBlock extends PaneBlock { public GlassPaneBlock(Properties builder) { diff --git a/src/main/java/com/simibubi/create/content/palettes/PavedBlock.java b/src/main/java/com/simibubi/create/content/palettes/PavedBlock.java index 5604a46ba..8c29e223b 100644 --- a/src/main/java/com/simibubi/create/content/palettes/PavedBlock.java +++ b/src/main/java/com/simibubi/create/content/palettes/PavedBlock.java @@ -9,8 +9,6 @@ import net.minecraft.util.Direction; import net.minecraft.util.math.BlockPos; import net.minecraft.world.IWorld; -import net.minecraft.block.AbstractBlock.Properties; - public class PavedBlock extends Block { public static final BooleanProperty COVERED = BooleanProperty.create("covered"); diff --git a/src/main/java/com/simibubi/create/content/palettes/WindowBlock.java b/src/main/java/com/simibubi/create/content/palettes/WindowBlock.java index 827c1f852..30764cedd 100644 --- a/src/main/java/com/simibubi/create/content/palettes/WindowBlock.java +++ b/src/main/java/com/simibubi/create/content/palettes/WindowBlock.java @@ -7,8 +7,6 @@ import net.minecraft.util.Direction; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; -import net.minecraft.block.AbstractBlock.Properties; - public class WindowBlock extends ConnectedGlassBlock { public WindowBlock(Properties p_i48392_1_) { diff --git a/src/main/java/com/simibubi/create/content/schematics/block/SchematicTableBlock.java b/src/main/java/com/simibubi/create/content/schematics/block/SchematicTableBlock.java index 3b20bce84..9ec819e8a 100644 --- a/src/main/java/com/simibubi/create/content/schematics/block/SchematicTableBlock.java +++ b/src/main/java/com/simibubi/create/content/schematics/block/SchematicTableBlock.java @@ -25,8 +25,6 @@ import net.minecraft.world.IBlockReader; import net.minecraft.world.World; import net.minecraftforge.fml.network.NetworkHooks; -import net.minecraft.block.AbstractBlock.Properties; - public class SchematicTableBlock extends HorizontalBlock implements ITE { public SchematicTableBlock(Properties properties) { diff --git a/src/main/java/com/simibubi/create/content/schematics/block/SchematicannonBlock.java b/src/main/java/com/simibubi/create/content/schematics/block/SchematicannonBlock.java index 1fcbf8d55..706b29bb5 100644 --- a/src/main/java/com/simibubi/create/content/schematics/block/SchematicannonBlock.java +++ b/src/main/java/com/simibubi/create/content/schematics/block/SchematicannonBlock.java @@ -21,8 +21,6 @@ import net.minecraft.world.IBlockReader; import net.minecraft.world.World; import net.minecraftforge.fml.network.NetworkHooks; -import net.minecraft.block.AbstractBlock.Properties; - public class SchematicannonBlock extends Block implements ITE { public SchematicannonBlock(Properties properties) { diff --git a/src/main/java/com/simibubi/create/content/schematics/block/SchematicannonTileEntity.java b/src/main/java/com/simibubi/create/content/schematics/block/SchematicannonTileEntity.java index ffc833c84..5521a1475 100644 --- a/src/main/java/com/simibubi/create/content/schematics/block/SchematicannonTileEntity.java +++ b/src/main/java/com/simibubi/create/content/schematics/block/SchematicannonTileEntity.java @@ -56,7 +56,6 @@ import net.minecraft.util.Direction.AxisDirection; import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.BlockPos; import net.minecraft.util.text.ITextComponent; -import net.minecraft.world.World; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.common.util.LazyOptional; diff --git a/src/main/java/com/simibubi/create/content/schematics/item/SchematicAndQuillItem.java b/src/main/java/com/simibubi/create/content/schematics/item/SchematicAndQuillItem.java index 63b5e67ee..30e330076 100644 --- a/src/main/java/com/simibubi/create/content/schematics/item/SchematicAndQuillItem.java +++ b/src/main/java/com/simibubi/create/content/schematics/item/SchematicAndQuillItem.java @@ -2,8 +2,6 @@ package com.simibubi.create.content.schematics.item; import net.minecraft.item.Item; -import net.minecraft.item.Item.Properties; - public class SchematicAndQuillItem extends Item { public SchematicAndQuillItem(Properties properties) { diff --git a/src/main/java/com/simibubi/create/content/schematics/item/SchematicItem.java b/src/main/java/com/simibubi/create/content/schematics/item/SchematicItem.java index ffdede407..9c78c265c 100644 --- a/src/main/java/com/simibubi/create/content/schematics/item/SchematicItem.java +++ b/src/main/java/com/simibubi/create/content/schematics/item/SchematicItem.java @@ -50,8 +50,6 @@ import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.fml.DistExecutor; import net.minecraftforge.fml.common.thread.SidedThreadGroups; -import net.minecraft.item.Item.Properties; - public class SchematicItem extends Item { private static final Logger LOGGER = LogManager.getLogger(); diff --git a/src/main/java/com/simibubi/create/foundation/advancement/CriterionTriggerBase.java b/src/main/java/com/simibubi/create/foundation/advancement/CriterionTriggerBase.java index 7ebc2a596..c6389a6cb 100644 --- a/src/main/java/com/simibubi/create/foundation/advancement/CriterionTriggerBase.java +++ b/src/main/java/com/simibubi/create/foundation/advancement/CriterionTriggerBase.java @@ -21,8 +21,6 @@ import net.minecraft.advancements.criterion.EntityPredicate; import net.minecraft.entity.player.ServerPlayerEntity; import net.minecraft.util.ResourceLocation; -import net.minecraft.advancements.ICriterionTrigger.Listener; - @ParametersAreNonnullByDefault @MethodsReturnNonnullByDefault public abstract class CriterionTriggerBase implements ICriterionTrigger { diff --git a/src/main/java/com/simibubi/create/foundation/block/ProperDirectionalBlock.java b/src/main/java/com/simibubi/create/foundation/block/ProperDirectionalBlock.java index 17416492a..1d294eb84 100644 --- a/src/main/java/com/simibubi/create/foundation/block/ProperDirectionalBlock.java +++ b/src/main/java/com/simibubi/create/foundation/block/ProperDirectionalBlock.java @@ -12,8 +12,6 @@ import net.minecraft.util.Direction; import net.minecraft.util.Mirror; import net.minecraft.util.Rotation; -import net.minecraft.block.AbstractBlock.Properties; - public class ProperDirectionalBlock extends DirectionalBlock implements IWrenchable { public ProperDirectionalBlock(Properties p_i48415_1_) { diff --git a/src/main/java/com/simibubi/create/foundation/collision/ContinuousOBBCollider.java b/src/main/java/com/simibubi/create/foundation/collision/ContinuousOBBCollider.java index 8b56c8ba6..39ff0d745 100644 --- a/src/main/java/com/simibubi/create/foundation/collision/ContinuousOBBCollider.java +++ b/src/main/java/com/simibubi/create/foundation/collision/ContinuousOBBCollider.java @@ -5,8 +5,6 @@ import static java.lang.Math.signum; import net.minecraft.util.math.vector.Vector3d; -import com.simibubi.create.foundation.collision.OBBCollider.SeparationManifold; - public class ContinuousOBBCollider extends OBBCollider { public static ContinuousSeparationManifold separateBBs(Vector3d cA, Vector3d cB, Vector3d eA, Vector3d eB, diff --git a/src/main/java/com/simibubi/create/foundation/config/CClient.java b/src/main/java/com/simibubi/create/foundation/config/CClient.java index c54d8ad82..bea229d1e 100644 --- a/src/main/java/com/simibubi/create/foundation/config/CClient.java +++ b/src/main/java/com/simibubi/create/foundation/config/CClient.java @@ -1,10 +1,4 @@ package com.simibubi.create.foundation.config; -import com.simibubi.create.foundation.config.ConfigBase.ConfigBool; -import com.simibubi.create.foundation.config.ConfigBase.ConfigEnum; -import com.simibubi.create.foundation.config.ConfigBase.ConfigFloat; -import com.simibubi.create.foundation.config.ConfigBase.ConfigGroup; -import com.simibubi.create.foundation.config.ConfigBase.ConfigInt; - public class CClient extends ConfigBase { diff --git a/src/main/java/com/simibubi/create/foundation/config/CCuriosities.java b/src/main/java/com/simibubi/create/foundation/config/CCuriosities.java index e1e5840c5..2ba15eaea 100644 --- a/src/main/java/com/simibubi/create/foundation/config/CCuriosities.java +++ b/src/main/java/com/simibubi/create/foundation/config/CCuriosities.java @@ -1,6 +1,4 @@ package com.simibubi.create.foundation.config; -import com.simibubi.create.foundation.config.ConfigBase.ConfigInt; - public class CCuriosities extends ConfigBase { diff --git a/src/main/java/com/simibubi/create/foundation/config/CFluids.java b/src/main/java/com/simibubi/create/foundation/config/CFluids.java index 1c546399e..ad8684da1 100644 --- a/src/main/java/com/simibubi/create/foundation/config/CFluids.java +++ b/src/main/java/com/simibubi/create/foundation/config/CFluids.java @@ -1,6 +1,4 @@ package com.simibubi.create.foundation.config; -import com.simibubi.create.foundation.config.ConfigBase.ConfigInt; - public class CFluids extends ConfigBase { diff --git a/src/main/java/com/simibubi/create/foundation/config/CKinetics.java b/src/main/java/com/simibubi/create/foundation/config/CKinetics.java index e5b05f92c..b5fe5002d 100644 --- a/src/main/java/com/simibubi/create/foundation/config/CKinetics.java +++ b/src/main/java/com/simibubi/create/foundation/config/CKinetics.java @@ -1,11 +1,5 @@ package com.simibubi.create.foundation.config; -import com.simibubi.create.foundation.config.ConfigBase.ConfigBool; -import com.simibubi.create.foundation.config.ConfigBase.ConfigEnum; -import com.simibubi.create.foundation.config.ConfigBase.ConfigFloat; -import com.simibubi.create.foundation.config.ConfigBase.ConfigGroup; -import com.simibubi.create.foundation.config.ConfigBase.ConfigInt; - public class CKinetics extends ConfigBase { public ConfigBool disableStress = b(false, "disableStress", Comments.disableStress); diff --git a/src/main/java/com/simibubi/create/foundation/config/CLogistics.java b/src/main/java/com/simibubi/create/foundation/config/CLogistics.java index 76fbeced0..33e4333cb 100644 --- a/src/main/java/com/simibubi/create/foundation/config/CLogistics.java +++ b/src/main/java/com/simibubi/create/foundation/config/CLogistics.java @@ -1,6 +1,4 @@ package com.simibubi.create.foundation.config; -import com.simibubi.create.foundation.config.ConfigBase.ConfigInt; - public class CLogistics extends ConfigBase { diff --git a/src/main/java/com/simibubi/create/foundation/config/CRecipes.java b/src/main/java/com/simibubi/create/foundation/config/CRecipes.java index fabba448b..86531dcb6 100644 --- a/src/main/java/com/simibubi/create/foundation/config/CRecipes.java +++ b/src/main/java/com/simibubi/create/foundation/config/CRecipes.java @@ -1,7 +1,4 @@ package com.simibubi.create.foundation.config; -import com.simibubi.create.foundation.config.ConfigBase.ConfigBool; -import com.simibubi.create.foundation.config.ConfigBase.ConfigInt; - public class CRecipes extends ConfigBase { diff --git a/src/main/java/com/simibubi/create/foundation/config/CSchematics.java b/src/main/java/com/simibubi/create/foundation/config/CSchematics.java index 445ca9a2d..21a38ef34 100644 --- a/src/main/java/com/simibubi/create/foundation/config/CSchematics.java +++ b/src/main/java/com/simibubi/create/foundation/config/CSchematics.java @@ -1,8 +1,4 @@ package com.simibubi.create.foundation.config; -import com.simibubi.create.foundation.config.ConfigBase.ConfigFloat; -import com.simibubi.create.foundation.config.ConfigBase.ConfigGroup; -import com.simibubi.create.foundation.config.ConfigBase.ConfigInt; - public class CSchematics extends ConfigBase { diff --git a/src/main/java/com/simibubi/create/foundation/config/CServer.java b/src/main/java/com/simibubi/create/foundation/config/CServer.java index ddac01277..e5cf81cfd 100644 --- a/src/main/java/com/simibubi/create/foundation/config/CServer.java +++ b/src/main/java/com/simibubi/create/foundation/config/CServer.java @@ -1,7 +1,4 @@ package com.simibubi.create.foundation.config; -import com.simibubi.create.foundation.config.ConfigBase.ConfigGroup; -import com.simibubi.create.foundation.config.ConfigBase.ConfigInt; - public class CServer extends ConfigBase { diff --git a/src/main/java/com/simibubi/create/foundation/config/CWorldGen.java b/src/main/java/com/simibubi/create/foundation/config/CWorldGen.java index f1aa768c3..f90afb0a0 100644 --- a/src/main/java/com/simibubi/create/foundation/config/CWorldGen.java +++ b/src/main/java/com/simibubi/create/foundation/config/CWorldGen.java @@ -4,8 +4,6 @@ import com.simibubi.create.foundation.worldgen.AllWorldFeatures; import net.minecraftforge.common.ForgeConfigSpec.Builder; -import com.simibubi.create.foundation.config.ConfigBase.ConfigBool; - public class CWorldGen extends ConfigBase { public ConfigBool disable = b(false, "disableWorldGen", Comments.disable); diff --git a/src/main/java/com/simibubi/create/foundation/data/BuilderTransformers.java b/src/main/java/com/simibubi/create/foundation/data/BuilderTransformers.java index f4830ec00..a3d1840cc 100644 --- a/src/main/java/com/simibubi/create/foundation/data/BuilderTransformers.java +++ b/src/main/java/com/simibubi/create/foundation/data/BuilderTransformers.java @@ -28,6 +28,7 @@ import com.simibubi.create.foundation.config.StressConfigDefaults; import com.tterrag.registrate.builders.BlockBuilder; import com.tterrag.registrate.util.nullness.NonNullUnaryOperator; +import net.minecraft.block.AbstractBlock; import net.minecraft.block.Block; import net.minecraft.block.SoundType; import net.minecraft.client.renderer.RenderType; @@ -41,8 +42,6 @@ import net.minecraft.util.ResourceLocation; import net.minecraftforge.client.model.generators.ConfiguredModel; import net.minecraftforge.client.model.generators.ModelFile; -import net.minecraft.block.AbstractBlock; - public class BuilderTransformers { public static NonNullUnaryOperator> cuckooClock() { diff --git a/src/main/java/com/simibubi/create/foundation/data/recipe/CompactingRecipeGen.java b/src/main/java/com/simibubi/create/foundation/data/recipe/CompactingRecipeGen.java index 2ae48e5c3..ccf3125c5 100644 --- a/src/main/java/com/simibubi/create/foundation/data/recipe/CompactingRecipeGen.java +++ b/src/main/java/com/simibubi/create/foundation/data/recipe/CompactingRecipeGen.java @@ -12,8 +12,6 @@ import net.minecraft.fluid.Fluids; import net.minecraft.item.Items; import net.minecraftforge.common.Tags; -import com.simibubi.create.foundation.data.recipe.CreateRecipeProvider.GeneratedRecipe; - public class CompactingRecipeGen extends ProcessingRecipeGen { GeneratedRecipe 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 288ef4b12..4262c8bcc 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 @@ -14,9 +14,6 @@ import net.minecraft.tags.ItemTags; import net.minecraftforge.common.crafting.conditions.NotCondition; import net.minecraftforge.common.crafting.conditions.TagEmptyCondition; -import com.simibubi.create.foundation.data.recipe.CreateRecipeProvider.GeneratedRecipe; -import com.simibubi.create.foundation.data.recipe.CreateRecipeProvider.I; - public class CrushingRecipeGen extends ProcessingRecipeGen { GeneratedRecipe diff --git a/src/main/java/com/simibubi/create/foundation/data/recipe/CuttingRecipeGen.java b/src/main/java/com/simibubi/create/foundation/data/recipe/CuttingRecipeGen.java index 9251f0b74..eac7c4424 100644 --- a/src/main/java/com/simibubi/create/foundation/data/recipe/CuttingRecipeGen.java +++ b/src/main/java/com/simibubi/create/foundation/data/recipe/CuttingRecipeGen.java @@ -7,9 +7,6 @@ import net.minecraft.block.Block; import net.minecraft.block.Blocks; import net.minecraft.data.DataGenerator; -import com.simibubi.create.foundation.data.recipe.CreateRecipeProvider.GeneratedRecipe; -import com.simibubi.create.foundation.data.recipe.CreateRecipeProvider.I; - public class CuttingRecipeGen extends ProcessingRecipeGen { GeneratedRecipe diff --git a/src/main/java/com/simibubi/create/foundation/data/recipe/EmptyingRecipeGen.java b/src/main/java/com/simibubi/create/foundation/data/recipe/EmptyingRecipeGen.java index 42d9b9bb3..9df7864d4 100644 --- a/src/main/java/com/simibubi/create/foundation/data/recipe/EmptyingRecipeGen.java +++ b/src/main/java/com/simibubi/create/foundation/data/recipe/EmptyingRecipeGen.java @@ -7,8 +7,6 @@ import com.simibubi.create.AllRecipeTypes; import net.minecraft.data.DataGenerator; import net.minecraft.item.Items; -import com.simibubi.create.foundation.data.recipe.CreateRecipeProvider.GeneratedRecipe; - public class EmptyingRecipeGen extends ProcessingRecipeGen { /* diff --git a/src/main/java/com/simibubi/create/foundation/data/recipe/FillingRecipeGen.java b/src/main/java/com/simibubi/create/foundation/data/recipe/FillingRecipeGen.java index 6799d7cdd..62ed6d8b2 100644 --- a/src/main/java/com/simibubi/create/foundation/data/recipe/FillingRecipeGen.java +++ b/src/main/java/com/simibubi/create/foundation/data/recipe/FillingRecipeGen.java @@ -12,8 +12,6 @@ import net.minecraft.item.Items; import net.minecraft.potion.Potions; import net.minecraftforge.common.Tags; -import com.simibubi.create.foundation.data.recipe.CreateRecipeProvider.GeneratedRecipe; - public class FillingRecipeGen extends ProcessingRecipeGen { GeneratedRecipe diff --git a/src/main/java/com/simibubi/create/foundation/data/recipe/MechanicalCraftingRecipeGen.java b/src/main/java/com/simibubi/create/foundation/data/recipe/MechanicalCraftingRecipeGen.java index 2d8585af5..d4e5c5eb5 100644 --- a/src/main/java/com/simibubi/create/foundation/data/recipe/MechanicalCraftingRecipeGen.java +++ b/src/main/java/com/simibubi/create/foundation/data/recipe/MechanicalCraftingRecipeGen.java @@ -15,9 +15,6 @@ import net.minecraft.util.IItemProvider; import net.minecraft.util.ResourceLocation; import net.minecraftforge.common.Tags; -import com.simibubi.create.foundation.data.recipe.CreateRecipeProvider.GeneratedRecipe; -import com.simibubi.create.foundation.data.recipe.CreateRecipeProvider.I; - public class MechanicalCraftingRecipeGen extends CreateRecipeProvider { GeneratedRecipe diff --git a/src/main/java/com/simibubi/create/foundation/data/recipe/MillingRecipeGen.java b/src/main/java/com/simibubi/create/foundation/data/recipe/MillingRecipeGen.java index c6e339586..92480a848 100644 --- a/src/main/java/com/simibubi/create/foundation/data/recipe/MillingRecipeGen.java +++ b/src/main/java/com/simibubi/create/foundation/data/recipe/MillingRecipeGen.java @@ -14,8 +14,6 @@ import net.minecraft.tags.ItemTags; import net.minecraftforge.common.crafting.conditions.NotCondition; import net.minecraftforge.common.crafting.conditions.TagEmptyCondition; -import com.simibubi.create.foundation.data.recipe.CreateRecipeProvider.GeneratedRecipe; - public class MillingRecipeGen extends ProcessingRecipeGen { GeneratedRecipe diff --git a/src/main/java/com/simibubi/create/foundation/data/recipe/MixingRecipeGen.java b/src/main/java/com/simibubi/create/foundation/data/recipe/MixingRecipeGen.java index e3c346298..6e26a2e26 100644 --- a/src/main/java/com/simibubi/create/foundation/data/recipe/MixingRecipeGen.java +++ b/src/main/java/com/simibubi/create/foundation/data/recipe/MixingRecipeGen.java @@ -13,9 +13,6 @@ import net.minecraft.item.Items; import net.minecraft.tags.ItemTags; import net.minecraftforge.common.Tags; -import com.simibubi.create.foundation.data.recipe.CreateRecipeProvider.GeneratedRecipe; -import com.simibubi.create.foundation.data.recipe.CreateRecipeProvider.I; - public class MixingRecipeGen extends ProcessingRecipeGen { GeneratedRecipe diff --git a/src/main/java/com/simibubi/create/foundation/data/recipe/PolishingRecipeGen.java b/src/main/java/com/simibubi/create/foundation/data/recipe/PolishingRecipeGen.java index 67526b1d0..8f1ea96aa 100644 --- a/src/main/java/com/simibubi/create/foundation/data/recipe/PolishingRecipeGen.java +++ b/src/main/java/com/simibubi/create/foundation/data/recipe/PolishingRecipeGen.java @@ -5,8 +5,6 @@ import com.simibubi.create.AllRecipeTypes; import net.minecraft.data.DataGenerator; -import com.simibubi.create.foundation.data.recipe.CreateRecipeProvider.GeneratedRecipe; - public class PolishingRecipeGen extends ProcessingRecipeGen { GeneratedRecipe diff --git a/src/main/java/com/simibubi/create/foundation/data/recipe/PressingRecipeGen.java b/src/main/java/com/simibubi/create/foundation/data/recipe/PressingRecipeGen.java index 34fa2f987..847efae00 100644 --- a/src/main/java/com/simibubi/create/foundation/data/recipe/PressingRecipeGen.java +++ b/src/main/java/com/simibubi/create/foundation/data/recipe/PressingRecipeGen.java @@ -7,9 +7,6 @@ import net.minecraft.data.DataGenerator; import net.minecraft.item.Items; import net.minecraft.item.crafting.Ingredient; -import com.simibubi.create.foundation.data.recipe.CreateRecipeProvider.GeneratedRecipe; -import com.simibubi.create.foundation.data.recipe.CreateRecipeProvider.I; - public class PressingRecipeGen extends ProcessingRecipeGen { GeneratedRecipe diff --git a/src/main/java/com/simibubi/create/foundation/data/recipe/SequencedAssemblyRecipeGen.java b/src/main/java/com/simibubi/create/foundation/data/recipe/SequencedAssemblyRecipeGen.java index 6e8497008..42b653da0 100644 --- a/src/main/java/com/simibubi/create/foundation/data/recipe/SequencedAssemblyRecipeGen.java +++ b/src/main/java/com/simibubi/create/foundation/data/recipe/SequencedAssemblyRecipeGen.java @@ -15,9 +15,6 @@ import net.minecraft.item.ItemStack; import net.minecraft.item.Items; import net.minecraft.tags.ItemTags; -import com.simibubi.create.foundation.data.recipe.CreateRecipeProvider.GeneratedRecipe; -import com.simibubi.create.foundation.data.recipe.CreateRecipeProvider.I; - public class SequencedAssemblyRecipeGen extends CreateRecipeProvider { GeneratedRecipe diff --git a/src/main/java/com/simibubi/create/foundation/data/recipe/StandardRecipeGen.java b/src/main/java/com/simibubi/create/foundation/data/recipe/StandardRecipeGen.java index 440a573bd..738ae440d 100644 --- a/src/main/java/com/simibubi/create/foundation/data/recipe/StandardRecipeGen.java +++ b/src/main/java/com/simibubi/create/foundation/data/recipe/StandardRecipeGen.java @@ -51,10 +51,6 @@ import net.minecraftforge.common.crafting.conditions.ICondition; import net.minecraftforge.common.crafting.conditions.ModLoadedCondition; import net.minecraftforge.common.crafting.conditions.NotCondition; -import com.simibubi.create.foundation.data.recipe.CreateRecipeProvider.GeneratedRecipe; -import com.simibubi.create.foundation.data.recipe.CreateRecipeProvider.I; -import com.simibubi.create.foundation.data.recipe.CreateRecipeProvider.Marker; - @SuppressWarnings("unused") public class StandardRecipeGen extends CreateRecipeProvider { diff --git a/src/main/java/com/simibubi/create/foundation/data/recipe/WashingRecipeGen.java b/src/main/java/com/simibubi/create/foundation/data/recipe/WashingRecipeGen.java index 1ae416478..54acfecce 100644 --- a/src/main/java/com/simibubi/create/foundation/data/recipe/WashingRecipeGen.java +++ b/src/main/java/com/simibubi/create/foundation/data/recipe/WashingRecipeGen.java @@ -26,8 +26,6 @@ import net.minecraft.util.IItemProvider; import net.minecraft.util.ResourceLocation; import net.minecraftforge.common.Tags; -import com.simibubi.create.foundation.data.recipe.CreateRecipeProvider.GeneratedRecipe; - public class WashingRecipeGen extends ProcessingRecipeGen { GeneratedRecipe diff --git a/src/main/java/com/simibubi/create/foundation/fluid/CombinedTankWrapper.java b/src/main/java/com/simibubi/create/foundation/fluid/CombinedTankWrapper.java index 6639e9722..8a25aa0fe 100644 --- a/src/main/java/com/simibubi/create/foundation/fluid/CombinedTankWrapper.java +++ b/src/main/java/com/simibubi/create/foundation/fluid/CombinedTankWrapper.java @@ -6,8 +6,6 @@ import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.capability.IFluidHandler; import net.minecraftforge.items.wrapper.EmptyHandler; -import net.minecraftforge.fluids.capability.IFluidHandler.FluidAction; - /** * Combines multiple IFluidHandlers into one interface (See CombinedInvWrapper * for items) diff --git a/src/main/java/com/simibubi/create/foundation/item/HiddenIngredientItem.java b/src/main/java/com/simibubi/create/foundation/item/HiddenIngredientItem.java index 3671935ad..899dcce8e 100644 --- a/src/main/java/com/simibubi/create/foundation/item/HiddenIngredientItem.java +++ b/src/main/java/com/simibubi/create/foundation/item/HiddenIngredientItem.java @@ -5,8 +5,6 @@ import net.minecraft.item.ItemGroup; import net.minecraft.item.ItemStack; import net.minecraft.util.NonNullList; -import net.minecraft.item.Item.Properties; - public class HiddenIngredientItem extends Item { public HiddenIngredientItem(Properties p_i48487_1_) { diff --git a/src/main/java/com/simibubi/create/foundation/item/TagDependentIngredientItem.java b/src/main/java/com/simibubi/create/foundation/item/TagDependentIngredientItem.java index 777e174c9..0b10e3196 100644 --- a/src/main/java/com/simibubi/create/foundation/item/TagDependentIngredientItem.java +++ b/src/main/java/com/simibubi/create/foundation/item/TagDependentIngredientItem.java @@ -8,8 +8,6 @@ import net.minecraft.tags.ItemTags; import net.minecraft.util.NonNullList; import net.minecraft.util.ResourceLocation; -import net.minecraft.item.Item.Properties; - public class TagDependentIngredientItem extends Item { private ResourceLocation tag; diff --git a/src/main/java/com/simibubi/create/foundation/ponder/SceneBuilder.java b/src/main/java/com/simibubi/create/foundation/ponder/SceneBuilder.java index ead2f0ec0..108351609 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/SceneBuilder.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/SceneBuilder.java @@ -75,16 +75,14 @@ import net.minecraft.state.Property; import net.minecraft.state.properties.BlockStateProperties; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.Direction; -import net.minecraft.util.ResourceLocation; import net.minecraft.util.Direction.Axis; +import net.minecraft.util.ResourceLocation; import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.vector.Vector3d; import net.minecraft.util.math.vector.Vector3i; import net.minecraft.world.World; -import com.simibubi.create.foundation.ponder.elements.TextWindowElement.Builder; - /** * Enqueue instructions to the schedule via this object's methods. */ 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 a78883b78..96be1251a 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 @@ -20,8 +20,6 @@ import net.minecraftforge.common.util.LazyOptional; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.capability.IFluidHandler; -import net.minecraftforge.fluids.capability.IFluidHandler.FluidAction; - public class SmartFluidTankBehaviour extends TileEntityBehaviour { public static BehaviourType diff --git a/src/main/java/com/simibubi/create/foundation/worldgen/ConfigDrivenFeatureEntry.java b/src/main/java/com/simibubi/create/foundation/worldgen/ConfigDrivenFeatureEntry.java index 78c8edd04..0d6eeb8ce 100644 --- a/src/main/java/com/simibubi/create/foundation/worldgen/ConfigDrivenFeatureEntry.java +++ b/src/main/java/com/simibubi/create/foundation/worldgen/ConfigDrivenFeatureEntry.java @@ -10,9 +10,6 @@ import net.minecraft.world.gen.feature.ConfiguredFeature; import net.minecraft.world.gen.feature.OreFeatureConfig.FillerBlockType; import net.minecraftforge.common.ForgeConfigSpec; -import com.simibubi.create.foundation.config.ConfigBase.ConfigFloat; -import com.simibubi.create.foundation.config.ConfigBase.ConfigInt; - public class ConfigDrivenFeatureEntry extends ConfigBase { public final String id; diff --git a/src/main/java/com/simibubi/create/foundation/worldgen/OxidizingBlock.java b/src/main/java/com/simibubi/create/foundation/worldgen/OxidizingBlock.java index 6793a7bf9..d58fa40a6 100644 --- a/src/main/java/com/simibubi/create/foundation/worldgen/OxidizingBlock.java +++ b/src/main/java/com/simibubi/create/foundation/worldgen/OxidizingBlock.java @@ -21,8 +21,6 @@ import net.minecraft.util.math.BlockRayTraceResult; import net.minecraft.world.World; import net.minecraft.world.server.ServerWorld; -import net.minecraft.block.AbstractBlock.Properties; - public class OxidizingBlock extends Block { public static final IntegerProperty OXIDIZATION = IntegerProperty.create("oxidization", 0, 7); From f4eaf6fff4f0c61689df97ccb9de911f7dbaa9b8 Mon Sep 17 00:00:00 2001 From: PepperBell <44146161+PepperCode1@users.noreply.github.com> Date: Sat, 17 Jul 2021 18:01:54 -0700 Subject: [PATCH 092/118] Tweak creative particle colors to match palette --- .../contraptions/processing/burner/BlazeBurnerTileEntity.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/simibubi/create/content/contraptions/processing/burner/BlazeBurnerTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/processing/burner/BlazeBurnerTileEntity.java index 8fb02e621..03b1dbced 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/processing/burner/BlazeBurnerTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/processing/burner/BlazeBurnerTileEntity.java @@ -41,7 +41,7 @@ public class BlazeBurnerTileEntity extends SmartTileEntity { { 0x1C6378, 0x4798B5, 0x4DA6C0, 0xBAC8CE } }; - int[] creativeColors = { 0xFF1FF9, 0xF799FF }; + int[] creativeColors = { 0x54295D, 0x6E3C76, 0xA5479F, 0x85157C }; PARTICLE_COLORS = new Vector3d[colors.length][]; for (int i = 0; i < colors.length; i++) { From 9923f04ff5badb211e614f2e24af3ae0041c6f15 Mon Sep 17 00:00:00 2001 From: PepperBell <44146161+PepperCode1@users.noreply.github.com> Date: Sat, 17 Jul 2021 20:53:39 -0700 Subject: [PATCH 093/118] Allow building sequenced assembly recipe directly - Resolves #1991 --- .../itemAssembly/SequencedAssemblyRecipeBuilder.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/simibubi/create/content/contraptions/itemAssembly/SequencedAssemblyRecipeBuilder.java b/src/main/java/com/simibubi/create/content/contraptions/itemAssembly/SequencedAssemblyRecipeBuilder.java index f65cbdfc0..abea8424e 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/itemAssembly/SequencedAssemblyRecipeBuilder.java +++ b/src/main/java/com/simibubi/create/content/contraptions/itemAssembly/SequencedAssemblyRecipeBuilder.java @@ -82,8 +82,12 @@ public class SequencedAssemblyRecipeBuilder { return this; } + public SequencedAssemblyRecipe build() { + return recipe; + } + public void build(Consumer consumer) { - consumer.accept(new DataGenResult(recipe, recipeConditions)); + consumer.accept(new DataGenResult(build(), recipeConditions)); } public static class DataGenResult implements IFinishedRecipe { From d4d18a5bd457115365d4dbfdee18e26216b5d297 Mon Sep 17 00:00:00 2001 From: qkrehf2 <64183602+qkrehf2@users.noreply.github.com> Date: Sun, 18 Jul 2021 22:21:11 +0900 Subject: [PATCH 094/118] Updates to ko_kr.json by qkrehf2 & Red1854th (#1958) --- .../resources/assets/create/lang/ko_kr.json | 293 +++++++++--------- 1 file changed, 146 insertions(+), 147 deletions(-) diff --git a/src/main/resources/assets/create/lang/ko_kr.json b/src/main/resources/assets/create/lang/ko_kr.json index 3b17fe2cf..0f02f0855 100644 --- a/src/main/resources/assets/create/lang/ko_kr.json +++ b/src/main/resources/assets/create/lang/ko_kr.json @@ -1,7 +1,7 @@ { "_": "->------------------------] Game Elements [------------------------<-", - "block.create.andesite_bricks": "안산안 벽돌", + "block.create.andesite_bricks": "안산암 벽돌", "block.create.layered_andesite": "이어지는 안산암", "block.create.andesite_bricks": "안산암 벽돌", "block.create.andesite_bricks_slab": "안산암 벽돌 반 블록", @@ -102,7 +102,7 @@ "block.create.polished_dolomite_stairs": "윤나는 백운암 계단", "block.create.polished_dolomite_wall": "윤나는 백운암 담장", "block.create.chiseled_dolomite": "조각된 백운암", - "block.create.mossy_dolomite": "이끼낀 백운암", + "block.create.mossy_dolomite": "이끼 낀 백운암", "block.create.overgrown_dolomite": "이끼로 뒤덮힌 백운암", "block.create.dolomite_pillar": "백운암 기둥", @@ -130,7 +130,7 @@ "block.create.gabbro_cobblestone_stairs": "반려암 조약돌 계단", "block.create.gabbro_cobblestone_wall": "반려암 조약돌 담장", "block.create.layered_gabbro": "이어지는 반려암", - "block.create.mossy_gabbro": "이끼낀 반려암", + "block.create.mossy_gabbro": "이끼 낀 반려암", "block.create.overgrown_gabbro": "이끼로 뒤덮힌 반려암", "block.create.paved_gabbro": "포장된 반려암", "block.create.paved_gabbro_slab": "포장된 반려암 반 블록", @@ -149,9 +149,9 @@ "block.create.fancy_granite_bricks_slab": "장식된 화강암 벽돌 반 블록", "block.create.fancy_granite_bricks_stairs": "장식된 화강암 벽돌 계단", "block.create.fancy_granite_bricks_wall": "장식된 화강암 벽돌 담장", - "block.create.granite_bricks_slab": "화강함 벽돌 반 블록", - "block.create.granite_bricks_stairs": "화강함 벽돌 계단", - "block.create.granite_bricks_wall": "화강함 벽돌 담장", + "block.create.granite_bricks_slab": "화강암 벽돌 반 블록", + "block.create.granite_bricks_stairs": "화강암 벽돌 계단", + "block.create.granite_bricks_wall": "화강암 벽돌 담장", "block.create.granite_cobblestone": "화강암 조약돌", "block.create.granite_cobblestone_slab": "화강암 조약돌 반 블록", "block.create.granite_cobblestone_stairs": "화강암 조약돌 계단", @@ -371,7 +371,7 @@ "block.create.encased_fan": "선풍기", "block.create.flywheel": "플라이휠", "block.create.furnace_engine": "화로 엔진", - "block.create.water_wheel": "물레방아", + "block.create.water_wheel": "물레바퀴", "block.create.windmill_bearing": "풍차 베어링", "block.create.hand_crank": "핸드 크랭크", @@ -465,11 +465,11 @@ "block.create.powered_latch": "레드스톤 걸쇠", "block.create.powered_toggle_latch": "레드스톤 토글 걸쇠", - "block.create.pulse_repeater": "펄스 리피터", + "block.create.pulse_repeater": "펄스 중계기", "block.create.redstone_contact": "동형 감지기", "block.create.redstone_link": "레드스톤 링크", - "block.create.adjustable_pulse_repeater": "가변 펄스 리피터", - "block.create.adjustable_repeater": "가변 리피터", + "block.create.adjustable_pulse_repeater": "가변 펄스 중계기", + "block.create.adjustable_repeater": "가변 중계기", "block.create.analog_lever": "아날로그 레버", "block.create.stockpile_switch": "수량 스위치", "block.create.controller_rail": "방향 레일", @@ -584,10 +584,10 @@ "advancement.create.its_alive.desc": "당신의 첫 장치가 움직입니다!", "advancement.create.shifting_gears": "톱니바퀴 돌리고!", "advancement.create.shifting_gears.desc": "크기가 다른 톱니바퀴를 연결하여 장치의 속도를 바꿀 수 있습니다.", - "advancement.create.overstressed": "과부화", + "advancement.create.overstressed": "과부하", "advancement.create.overstressed.desc": "피로도의 한계를 경험해보세요.", "advancement.create.belt": "켈프 벨트", - "advancement.create.belt.desc": "두 축에 컨베이어 벨트를 이으세요.", + "advancement.create.belt.desc": "두 축에 벨트를 이으세요.", "advancement.create.tunnel": "벨트 꾸미기", "advancement.create.tunnel.desc": "터널을 이용해 벨트를 꾸며보세요.", "advancement.create.splitter_tunnel": "분할 정복 알고리즘", @@ -595,7 +595,7 @@ "advancement.create.chute": "쏟아져 내려와", "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_kiss": "퍼널는 어떻게 태어나?", @@ -621,10 +621,10 @@ "advancement.create.reinforced": "튼튼 보강!", "advancement.create.reinforced.desc": "축, 파이프, 벨트에 적절한 케이스를 씌우세요.", "advancement.create.water_wheel": "수력 동력화", - "advancement.create.water_wheel.desc": "물레방아를 설치하고 회전하게 만드세요!", - "advancement.create.chocolate_wheel": "초콜릿방아", - "advancement.create.chocolate_wheel.desc": "녹은 초콜릿으로 물레방아를 돌리세요.", - "advancement.create.lava_wheel": "불레방아", + "advancement.create.water_wheel.desc": "물레바퀴를 설치하고 회전하게 만드세요!", + "advancement.create.chocolate_wheel": "초콜릿바퀴", + "advancement.create.chocolate_wheel.desc": "녹은 초콜릿으로 물레바퀴를 돌리세요.", + "advancement.create.lava_wheel": "불레바퀴", "advancement.create.lava_wheel.desc": "용암으로 물레바퀴를 회전하게 만드세ㅇ... 어?", "advancement.create.cuckoo": "벌써 이렇게나 시간이 지났어?", "advancement.create.cuckoo.desc": "뻐꾸기 시계가 잘 시간을 알립니다. 잘 자...", @@ -672,7 +672,7 @@ "advancement.create.chained_item_drain": "구른다!", "advancement.create.chained_item_drain.desc": "아이템이 여러 배수구 위를 굴러가는 것을 보세요.", "advancement.create.glass_pipe": "액체 엿보기", - "advancement.create.glass_pipe.desc": "액체가 창이 달린 파이프를 지나는 것을 보세요. 직선 파이프에 렌치로 우클릭하면 창문이 생깁니다.", + "advancement.create.glass_pipe.desc": "액체가 창이 달린 파이프를 지나는 것을 보세요. 직선 파이프를 렌치로 우클릭하면 창문이 생깁니다.", "advancement.create.pipe_collision": "그 액체를 섞지 마오", "advancement.create.pipe_collision.desc": "액체관에서 두 가지 액체가 만나는 것을 관찰하세요.", "advancement.create.pipe_spill": "누출 사고", @@ -766,7 +766,7 @@ "death.attack.create.cuckoo_clock_explosion.player": "%1$s이(가) 조작된 뻐꾸기 시계에 의해 폭파당했습니다", "create.block.deployer.damage_source_name": "배포기", - "create.block.cart_assembler.invalid": "카트조립기를 레일 위에 설치하세요", + "create.block.cart_assembler.invalid": "카트 조립기를 레일 위에 설치하세요", "create.menu.return": "메뉴로 돌아가기", "create.menu.configure": "설정...", @@ -901,12 +901,12 @@ "create.minecart_coupling.too_far": "광산 수레들이 너무 멀리 떨어져 있습니다", "create.contraptions.movement_mode": "이동 설정", - "create.contraptions.movement_mode.move_place": "멈췄을때 항상 블록이 설치됨", - "create.contraptions.movement_mode.move_place_returned": "멈췄을때 시작 위치에서만 블록이 설치됨", - "create.contraptions.movement_mode.move_never_place": "멈춰도 블록을 설치하지 않음", - "create.contraptions.movement_mode.rotate_place": "멈췄을때 항상 블록이 설치됨", - "create.contraptions.movement_mode.rotate_place_returned": "멈췄을때 시작 위치에서만 블록이 설치됨", - "create.contraptions.movement_mode.rotate_never_place": "멈춰도 블록을 설치하지 않음", + "create.contraptions.movement_mode.move_place": "멈췄을 때 항상 구조물을 설치함", + "create.contraptions.movement_mode.move_place_returned": "멈췄을 때 시작 위치에서만 구조물을 설치함", + "create.contraptions.movement_mode.move_never_place": "멈춰도 구조물을 설치하지 않음", + "create.contraptions.movement_mode.rotate_place": "멈췄을 때 항상 구조물을 설치함", + "create.contraptions.movement_mode.rotate_place_returned": "멈췄을 때 시작 위치에서만 구조물을 설치함", + "create.contraptions.movement_mode.rotate_never_place": "멈춰도 구조물을 설치하지 않음", "create.contraptions.cart_movement_mode": "수레 장치 이동 설정", "create.contraptions.cart_movement_mode.rotate": "구조물이 항상 전방을 향함", "create.contraptions.cart_movement_mode.rotate_paused": "수레가 회전할때 구조물이 행동을 멈춤", @@ -920,8 +920,8 @@ "create.logistics.filter": "필터", "create.logistics.recipe_filter": "조합법 필터", "create.logistics.fluid_filter": "액체 필터", - "create.logistics.firstFrequency": "주파수. #1", - "create.logistics.secondFrequency": "주파수. #2", + "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": "필터에 수량을 적용했습니다.", @@ -1019,7 +1019,7 @@ "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.1": "[우클릭]으로 현재 지점에 설치합니다.", "create.schematic.tool.print.description.2": "이 도구는 크리에이티브 모드 전용입니다.", "create.schematic.tool.print.description.3": "", "create.schematic.tool.flip.description.0": "당신이 보는 면으로 청사진을 뒤집습니다.", @@ -1149,14 +1149,14 @@ "create.item_attributes.book_copy_second.inverted": "복사본의 복사본이 아님", "create.item_attributes.book_copy_tattered": "낡고 헐었음", "create.item_attributes.book_copy_tattered.inverted": "낡고 헐지 않음", - "create.item_attributes.astralsorcery_crystal": "%1$s 수정 속성을 가진", - "create.item_attributes.astralsorcery_crystal.inverted": "%1$s 수정 속성을 가지고 있지 않은", - "create.item_attributes.astralsorcery_constellation": "%1$s에 조율된", - "create.item_attributes.astralsorcery_constellation.inverted": "%1$s에 조율되지 않은", - "create.item_attributes.astralsorcery_perk_gem": "%1$s 퍽 속성을 가진", - "create.item_attributes.astralsorcery_perk_gem.inverted": "%1$s 퍽 속성을 가지고 있지 않은", - "create.item_attributes.astralsorcery_amulet": "%1$s이(가) 향상된", - "create.item_attributes.astralsorcery_amulet.inverted": "%1$s이(가) 향상되지 않은", + "create.item_attributes.astralsorcery_crystal": "%1$s 수정 속성을 가짐", + "create.item_attributes.astralsorcery_crystal.inverted": "%1$s 수정 속성을 가지고 있지 않음", + "create.item_attributes.astralsorcery_constellation": "%1$s에 조율됨", + "create.item_attributes.astralsorcery_constellation.inverted": "%1$s에 조율되지 않음", + "create.item_attributes.astralsorcery_perk_gem": "%1$s 퍽 속성을 가짐", + "create.item_attributes.astralsorcery_perk_gem.inverted": "%1$s 퍽 속성을 가지고 있지 않음", + "create.item_attributes.astralsorcery_amulet": "%1$s이(가) 향상됨", + "create.item_attributes.astralsorcery_amulet.inverted": "%1$s이(가) 향상되지 않음", "create.gui.attribute_filter.no_selected_attributes": "속성이 선택되지 않음", "create.gui.attribute_filter.selected_attributes": "선택된 속성:", @@ -1247,7 +1247,7 @@ "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.empty_bearing.title": "베어링 업데이트", @@ -1398,7 +1398,7 @@ "item.create.schematic.tooltip": "SCHEMATIC", "item.create.schematic.tooltip.summary": "세계에 구조물을 _홀로그램으로_ 불러와 지정하고 설치합니다. 지정된 홀로그램은 _청사진_ _대포_의 _작업_ _영역_이 됩니다.", - "item.create.schematic.tooltip.condition1": "들고 있을 떄", + "item.create.schematic.tooltip.condition1": "들고 있을 때", "item.create.schematic.tooltip.behaviour1": "UI의 도구로 _변경/설치_ 할 수 있습니다.", "item.create.schematic.tooltip.control1": "웅크린 상태에서 우클릭", "item.create.schematic.tooltip.action1": "정확한 _좌표_ 입력을 위한 창을 엽니다.", @@ -1419,7 +1419,7 @@ "block.create.schematicannon.tooltip": "SCHEMATICANNON", "block.create.schematicannon.tooltip.summary": "장착된 청사진을 바탕으로 블록들을 _발포_합니다. _화약_을 연료로 사용하고 주변 보관함에서 아이템을 사용합니다.", "block.create.schematicannon.tooltip.condition1": "우클릭", - "block.create.schematicannon.tooltip.behaviour1": "을 엽니다.", + "block.create.schematicannon.tooltip.behaviour1": "설정 창을 엽니다.", "block.create.schematic_table.tooltip": "SCHEMATIC TABLE", "block.create.schematic_table.tooltip.summary": "_빈_ _청사진_에 저장된 청사진을 불러옵니다.", @@ -1443,7 +1443,7 @@ "item.create.wrench.tooltip.action2": "_장치_를 _해체_하고 _즉시_ _보관함_으로 넣습니다.", "block.create.nozzle.tooltip": "NOZZLE", - "block.create.nozzle.tooltip.summary": "덮힌 환풍기 _앞_에 붙여 환풍기의 효과를 _전방_으로 _확대_합니다.", + "block.create.nozzle.tooltip.summary": "선풍기 _앞_에 붙여 선풍기의 효과를 _전방향_으로 _확대_합니다.", "block.create.cuckoo_clock.tooltip": "CUCKOO CLOCK", "block.create.cuckoo_clock.tooltip.summary": "_시간의_ _흐름_을 알고 공간을 _꾸미는_ 데 좋은 공예품입니다.", @@ -1482,7 +1482,7 @@ "item.create.sand_paper.tooltip.behaviour1": "_다른 손_에있는 아이템과 _바닥에 있는 아이템_을 윤냅니다.", "item.create.builders_tea.tooltip": "BUILDERS TEA", - "item.create.builders_tea.tooltip.summary": "하루를 시작하기에 좋은 음료입니다. _ 새로운 영감_을 줍니다.", + "item.create.builders_tea.tooltip.summary": "하루를 시작하기에 좋은 음료입니다. _새로운 영감_을 줍니다.", "item.create.refined_radiance.tooltip": "REFINED RADIANCE", "item.create.refined_radiance.tooltip.summary": "_흡수된_ _빛_으로 제련된 색채 혼합물입니다.", @@ -1555,8 +1555,8 @@ "create.ponder.hold_to_ponder": "[%1$s]키를 눌러 분석하기", "create.ponder.subject": "분석의 주제", "create.ponder.pondering": "분석 중입니다...", - "create.ponder.identify_mode": "탐색모드가 활성화되어 있습니다. [%1$s]를 눌러 중지합니다.", - "create.ponder.associated": "연관된 항록들", + "create.ponder.identify_mode": "탐색모드가 활성화되어 있습니다. \n[%1$s]를 눌러 중지합니다.", + "create.ponder.associated": "연관된 항목들", "create.ponder.close": "닫기", "create.ponder.identify": "탐색", "create.ponder.next": "다음 장면", @@ -1569,7 +1569,7 @@ "create.ponder.categories": "Create에서 둘러볼 수 있는 목록들", "create.ponder.index_description": "아이콘을 클릭해 관련 아이템과 블록에 대해 알아볼 수 있습니다.", "create.ponder.index_title": "분석 메뉴 제목", - "create.ponder.shared.movement_anchors": "섀시나 강력 접착제로 큰 구조물도 옮길 수 있습니다.", + "create.ponder.shared.movement_anchors": "섀시나 강력 접착제를 이용해 큰 구조물도 옮길 수 있습니다.", "create.ponder.shared.rpm32": "32 RPM", "create.ponder.shared.sneak_and": "웅크리기 +", "create.ponder.shared.storage_on_contraption": "구조물에 부착된 보관함은 구조물이 떨어뜨린 아이템을 자동으로 줍습니다.", @@ -1605,13 +1605,13 @@ "create.ponder.tag.fluids": "액체 조정", "create.ponder.tag.fluids.description": "액체를 나르고 사용하는 장치입니다.", - "create.ponder.adjustable_pulse_repeater.header": "가변 펄스 리피터를 이용해 신호 조절하기", - "create.ponder.adjustable_pulse_repeater.text_1": "가변 펄스 리피터는 딜레이 이후 짧은 신호를 보냅니다.", + "create.ponder.adjustable_pulse_repeater.header": "가변 펄스 중계기를 이용해 신호 조절하기", + "create.ponder.adjustable_pulse_repeater.text_1": "가변 펄스 중계기는 딜레이 이후 짧은 신호를 보냅니다.", "create.ponder.adjustable_pulse_repeater.text_2": "마우스 휠을 이용하여 딜레이를 조절합니다.", "create.ponder.adjustable_pulse_repeater.text_3": "딜레이는 최대 30분까지 조절할 수 있습니다.", - "create.ponder.adjustable_repeater.header": "가변 리피터를 이용해 신호 조절하기", - "create.ponder.adjustable_repeater.text_1": "가변 리피터는 기존 리피터와 비슷합니다.", + "create.ponder.adjustable_repeater.header": "가변 중계기를 이용해 신호 조절하기", + "create.ponder.adjustable_repeater.text_1": "가변 중계기는 기존 중계기와 비슷합니다.", "create.ponder.adjustable_repeater.text_2": "정해진 딜레이만큼 신호를 주고...", "create.ponder.adjustable_repeater.text_3": "...정해진 딜레이만큼 쉽니다.", "create.ponder.adjustable_repeater.text_4": "마우스 휠을 이용해 딜레이를 조절합니다.", @@ -1637,7 +1637,7 @@ "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": "멈췄을 때, 베어링은 구조물을 가까운 수직 각도로 설치합니다.", @@ -1649,7 +1649,7 @@ "create.ponder.belt_connector.header": "벨트 사용하기", "create.ponder.belt_connector.text_1": "두 축을 벨트로 우클릭하여 연결합니다.", - "create.ponder.belt_connector.text_2": "실수로 선택했다면, 웅크리면서 우클릭하여 취소할 수 있습니다.", + "create.ponder.belt_connector.text_2": "실수로 선택했다면, 웅크리면서 우클릭하여 취소합니다.", "create.ponder.belt_connector.text_3": "벨트에 축을 추가로 넣을 수 있습니다.", "create.ponder.belt_connector.text_4": "벨트로 연결된 축들은 같은 속도, 방향으로 회전합니다.", "create.ponder.belt_connector.text_5": "추가된 축은 렌치로 없앨 수 있습니다.", @@ -1661,7 +1661,7 @@ "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": "움직이는 벨트는 아이템과 엔티티를 옮깁니다.", @@ -1676,8 +1676,8 @@ "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_3": "핕터 슬롯을 스크롤하여 추출 갯수를 조절합니다.", + "create.ponder.brass_funnel.text_4": "필터 슬롯에 아이템을 사용하여 추출할 아이템 종류를 정합니다.", "create.ponder.brass_tunnel.header": "황동 터널 사용하기", "create.ponder.brass_tunnel.text_1": "황동 터널은 벨트를 덮는데 사용할 수 있습니다.", @@ -1690,7 +1690,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_1": "렌치를 이용해, 황동 터널이 어떻게 분배할지 설정합니다.", "create.ponder.brass_tunnel_modes.text_10": "[입력 동기화] 설정은 황동 터널만의 고유 설정입니다.", "create.ponder.brass_tunnel_modes.text_11": "모든 입구에 아이템이 있어야만 통과할 수 있습니다.", "create.ponder.brass_tunnel_modes.text_12": "이 설정은 연결된 모든 벨트에 아이템을 동시에 공급할 수 있습니다.", @@ -1722,7 +1722,7 @@ "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_4": "화로 수레는 부착된 보관함에서 연료를 가져와 스스로 움직입니다.", "create.ponder.chain_drive.header": "체인 드라이브로 회전 전달하기", "create.ponder.chain_drive.text_1": "체인 드라이브는 한 줄로 회전을 전달합니다.", @@ -1738,12 +1738,12 @@ "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_upward.header": "슈트를 이용해 아이템을 위로 옮기기", - "create.ponder.chute_upward.text_1": "선풍기를 위/아래에 설치하면, 슈트는 아이템을 위로 보낼 수 있습니다.", + "create.ponder.chute_upward.text_1": "선풍기를 위/아래에 설치하면, 슈트는 아이템을 위로 보냅니다.", "create.ponder.chute_upward.text_2": "엔지니어의 고글로 슈트를 관찰하여 이동 방향을 확인하세요.", "create.ponder.chute_upward.text_3": "막힌 끝 부분에서 아이템은 옆에서 넣거나 빼내야합니다.", @@ -1774,11 +1774,11 @@ "create.ponder.creative_fluid_tank.text_1": "크리에이티브 탱크는 무한히 액체를 공급합니다.", "create.ponder.creative_fluid_tank.text_2": "액체가 든 용기로 우클릭하여 액체를 채울 수 있습니다.", "create.ponder.creative_fluid_tank.text_3": "파이프로 탱크에서 액체를 무한히 뽑아낼 수 있습니다.", - "create.ponder.creative_fluid_tank.text_4": "크리에이티브 탱크로 들어가는 모든 액체는 삭제됩니다.", + "create.ponder.creative_fluid_tank.text_4": "크리에이티브 탱크로 들어가는 모든 액체는 사라집니다.", "create.ponder.creative_motor.header": "크리에이티브 모터를 이용해 동력 생산하기", "create.ponder.creative_motor.text_1": "크리에이티브 모터는 동력을 쉽게 생산, 조절합니다.", - "create.ponder.creative_motor.text_2": "모터 후면을 스크롤해서 모터의 RPM을 조절할 수 있습니다.", + "create.ponder.creative_motor.text_2": "모터 후면을 스크롤해서 모터의 RPM을 조절합니다.", "create.ponder.crushing_wheels.header": "분쇄 휠을 이용해 아이템 가공하기", "create.ponder.crushing_wheels.text_1": "한 쌍의 분쇄 휠은 아이템을 매우 효과적으로 갈아버립니다.", @@ -1792,8 +1792,8 @@ "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_14": "필터에 맞는 아이템만 들어가며...", + "create.ponder.deployer.text_15": "...그 외의 아이템은 배출됩니다.", "create.ponder.deployer.text_2": "배포기는 한 칸 떨어진 블록에 상호작용합니다.", "create.ponder.deployer.text_3": "바로 앞에 블록이 있어도 상괸없습니다.", "create.ponder.deployer.text_4": "배포기가 할 수 있는 것:", @@ -1804,8 +1804,8 @@ "create.ponder.deployer.text_9": "몹 공격하기", "create.ponder.deployer_contraption.header": "구조물에서의 배포기", - "create.ponder.deployer_contraption.text_1": "배포기가 움직이는 구조물의 일부일 때,", - "create.ponder.deployer_contraption.text_2": "배포기는 움직일 때마다 작동하며, 구조물에 붙어있는 아무 보관함의 아이템을 사용합니다.", + "create.ponder.deployer_contraption.text_1": "배포기가 움직이는 구조물의 일부면...", + "create.ponder.deployer_contraption.text_2": "...배포기는 움직일 때마다 작동하며, 구조물에 붙어있는 아무 보관함의 아이템을 사용합니다.", "create.ponder.deployer_contraption.text_3": "필터를 이용해 어떤 아이템을 사용할 지 정할 수 있습니다.", "create.ponder.deployer_modes.header": "배포기의 작동 방식", @@ -1813,10 +1813,10 @@ "create.ponder.deployer_modes.text_2": "렌치를 이용해, 좌클릭을 흉내내도록 설정할 수 있습니다.", "create.ponder.deployer_processing.header": "배포기로 아이템 가공하기", - "create.ponder.deployer_processing.text_1": "배포기가 맞는 아이템을 가지고 있으면, 아래 있는 아이템을 가공할 수 있습니다.", + "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": "레드스톤 신호를 받으면, 배포기는 작동하지 않습니다.", @@ -1825,12 +1825,12 @@ "create.ponder.depot.header": "아이템 거치대 사용하기", "create.ponder.depot.text_1": "아이템 거치대는 고정된 벨트 역할입니다.", - "create.ponder.depot.text_2": "우클릭해서 아이템을 놓거나 가져갈 수 있습니다.", + "create.ponder.depot.text_2": "우클릭해서 아이템을 놓거나 가져갑니다.", "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_1": "블레이즈를 우클릭하여 버너에 가둡니다.", "create.ponder.empty_blaze_burner.text_2": "또는 스포너에서도 블레이즈를 가둘 수 있습니다.", "create.ponder.empty_blaze_burner.text_3": "이제 당신은 다양한 장치에 쓰일 이상적인 열원을 얻었습니다.", "create.ponder.empty_blaze_burner.text_4": "장식적인 요소로는 라이터로 불을 붙일 수 있습니다.", @@ -1850,30 +1850,30 @@ "create.ponder.fan_processing.text_1": "바람이 용암을 통과하면, 공기가 뜨거워집니다.", "create.ponder.fan_processing.text_2": "바람이 지나가는 자리의 아이템은 구워집니다.", "create.ponder.fan_processing.text_3": "음식은 불타 없어집니다.", - "create.ponder.fan_processing.text_4": "대신, 불을 이용하면 음식을 구울 수 있습니다.", + "create.ponder.fan_processing.text_4": "대신, 불을 이용하면 음식을 굽습니다.", "create.ponder.fan_processing.text_5": "물을 통과하는 바람을 통해 세척할 수 있습니다.", "create.ponder.fan_processing.text_6": "이를 통해 새로운 가공을 할 수 있습니다.", "create.ponder.fan_processing.text_7": "선풍기의 속도는 가공 속도와 관련이 없습니다!", "create.ponder.fan_processing.text_8": "선풍기 가공은 벨트나 아이템 거치대의 아이템에도 적용됩니다.", "create.ponder.fan_source.header": "선풍기를 이용해 동력 생산하기", - "create.ponder.fan_source.text_1": "열원을 향한 선풍기는 동력을 제공할 수 있습니다.", + "create.ponder.fan_source.text_1": "열원을 향한 선풍기는 동력을 제공합니다.", "create.ponder.fan_source.text_2": "레드스톤 신호를 받으면, 동력을 제공하기 시작합니다.", "create.ponder.fluid_pipe_flow.header": "파이프로 액체 옮기기", - "create.ponder.fluid_pipe_flow.text_1": "파이프는 한 종류의 액체만 옮길 수 있습니다.", + "create.ponder.fluid_pipe_flow.text_1": "파이프는 한 종류의 액체만 옮깁니다.", "create.ponder.fluid_pipe_flow.text_2": "렌치를 이용하여 직선 파이프에 창문을 달 수 있습니다.", "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_7": "이렇기 때문에, 파이프는 실질적으로 아무런 액체도 담을 수 없습니다.", + "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": "액체 탱크의 크기", @@ -1895,7 +1895,7 @@ "create.ponder.flywheel.text_3": "용광로를 사용하면 동력 속도가 2배가 됩니다.", "create.ponder.funnel_compat.header": "퍼널 호환성", - "create.ponder.funnel_compat.text_1": "퍼널는 다른 장치들 위에 설치할 수도 있습니다.", + "create.ponder.funnel_compat.text_1": "퍼널은 다른 장치들 위에 설치할 수 있습니다.", "create.ponder.funnel_compat.text_2": "세로 톱", "create.ponder.funnel_compat.text_3": "아이템 거치대", "create.ponder.funnel_compat.text_4": "아이템 배수구", @@ -1914,7 +1914,7 @@ "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": "수평 방향으로는 벨트가 적합합니다.", @@ -1924,8 +1924,8 @@ "create.ponder.furnace_engine.text_3": "용광로를 사용하면 동력 속도가 2배가 됩니다.", "create.ponder.gantry_carriage.header": "갠트리 운반대 사용하기", - "create.ponder.gantry_carriage.text_1": "갠트리 운반대는 갠트리 축 위에서 움직일 수 있습니다.", - "create.ponder.gantry_carriage.text_2": "갠트리 장치는 부착된 블록들을 움직일 수 있습니다.", + "create.ponder.gantry_carriage.text_1": "갠트리 운반대는 갠트리 축 위에서 움직입니다.", + "create.ponder.gantry_carriage.text_2": "갠트리 장치는 부착된 블록들을 움직입니다.", "create.ponder.gantry_cascaded.header": "계단식 갠트리", "create.ponder.gantry_cascaded.text_1": "갠트리 운반대에 접착제 없이 갠트리 축을 붙일 수 있습니다.", @@ -1944,7 +1944,7 @@ "create.ponder.gantry_shaft.header": "갠트리 축 사용하기", "create.ponder.gantry_shaft.text_1": "갠트리 축은 갠트리 장치에 필요합니다. 갠트리 운반대가 축을 따라 움직입니다.", - "create.ponder.gantry_shaft.text_2": "갠트리 장치는 부착된 블록들을 움직일 수 있습니다.", + "create.ponder.gantry_shaft.text_2": "갠트리 장치는 부착된 블록들을 움직입니다.", "create.ponder.gearbox.header": "기어박스를 이용해 동력 전달하기", "create.ponder.gearbox.text_1": "회전축을 변경하는 일은 쉽게 귀찮아집니다.", @@ -1967,13 +1967,13 @@ "create.ponder.hose_pulley.text_2": "동력을 전달하여 호스의 높이를 정합니다.", "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.text_1": "넓은 바다에서 호스 도르래를 작동시키면...", + "create.ponder.hose_pulley_infinite.text_2": "...물 블록을 없애거나 추가하지 않고 액체를 얻거나 버릴 수 있습니다.", "create.ponder.hose_pulley_infinite.text_3": "파이프로 이런 도르래에서 무한한 액체를 얻을 수 있습니다.", "create.ponder.hose_pulley_level.header": "호스 도르래의 채우고 비우는 기준", @@ -1984,14 +1984,14 @@ "create.ponder.hose_pulley_level.text_5": "호스 끝부분 위는 채우지 않습니다.", "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_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.large_cogwheel.header": "큰 톱니바퀴로 동력 전달하기", - "create.ponder.large_cogwheel.text_1": "큰 톱니바퀴는 수직으로 서로 맞물릴 수 있습니다.", + "create.ponder.large_cogwheel.text_1": "큰 톱니바퀴는 수직으로 서로 맞물립니다.", "create.ponder.large_cogwheel.text_2": "이는 다른 축으로 동력을 전달하는데 도움이 됩니다.", "create.ponder.linear_chassis_attachment.header": "직선 섀시를 이용해 블록 붙이기", @@ -2013,7 +2013,7 @@ "create.ponder.mechanical_arm.text_1": "기계 팔은 설치되기 전, 입력부와 출력부를 지정해야 합니다.", "create.ponder.mechanical_arm.text_2": "우클릭으로 보관함을 가진 블록을 대상으로 지정합니다.", "create.ponder.mechanical_arm.text_3": "다시 우클릭하여 입력부(파랑) 출력부(주황)을 설정합니다.", - "create.ponder.mechanical_arm.text_4": "좌클릭하여 대상 선택을 해제할 수 있습니다.", + "create.ponder.mechanical_arm.text_4": "좌클릭하여 대상 선택을 해제합니다.", "create.ponder.mechanical_arm.text_5": "설치된 기계 팔은 이전에 선택된 블록들을 대상으로 정합니다.", "create.ponder.mechanical_arm.text_6": "거리안에 있다면 여러 블록을 지정할 수 있습니다.", "create.ponder.mechanical_arm.text_7": "하지만 모든 보관함을 지닌 블록이 지정되지는 않습니다.", @@ -2030,8 +2030,8 @@ "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_7": "어느 한 곳이 더 전달받을 수 없다면, 그 곳은 넘어갑니다.", @@ -2047,20 +2047,20 @@ "create.ponder.mechanical_bearing.text_1": "베어링은 앞에 있는 블록을 부착시킵니다.", "create.ponder.mechanical_bearing.text_2": "동력을 받으면, 블록들은 회전하는 구조물로 변합니다.", - "create.ponder.mechanical_crafter.header": "기계식 조합기 설치하기", - "create.ponder.mechanical_crafter.text_1": "다수의 기계식 조합기로 모든 조합을 자동화할 수 있습니다.", + "create.ponder.mechanical_crafter.header": "조합기 설치하기", + "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_5": "기계식 조합기는 동력이 요구됩니다.", - "create.ponder.mechanical_crafter.text_6": "앞면을 우클릭해서 직접 아이템을 넣을 수 있습니다.", + "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.text_1": "조합기에 아이템을 자동으로 넣을 수 있습니다.", "create.ponder.mechanical_crafter_connect.text_2": "후면에 렌치를 이용해 조합기 보관함을 연결할 수 있습니다.", - "create.ponder.mechanical_crafter_connect.text_3": "이제 모든 조합기가 한 곳에서 아이템을 받을 수 있습니다.", + "create.ponder.mechanical_crafter_connect.text_3": "이제 모든 조합기가 한 곳에서 아이템을 받습니다.", "create.ponder.mechanical_crafter_covers.header": "조합기 슬롯 덮기", "create.ponder.mechanical_crafter_covers.text_1": "몇몇 조합은 빈 공간을 채워줄 조합기가 필요합니다.", @@ -2072,58 +2072,58 @@ "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_2": "지나가는 길에 있는 작물을 수확하고, 성장 수치를 초기화합니다.", + "create.ponder.mechanical_harvester.text_1": "수확기가 움직이는 구조물의 일부면...", + "create.ponder.mechanical_harvester.text_2": "...지나가는 길에 있는 작물을 수확하고, 성장 수치를 초기화합니다.", "create.ponder.mechanical_mixer.header": "믹서로 아이템 가공하기", "create.ponder.mechanical_mixer.text_1": "믹서와 대야를 이용해 몇몇 조합을 자동화할 수 있습니다.", "create.ponder.mechanical_mixer.text_2": "가능한 조합법은 어느 무형 조합법이나 가능하며, 모드에서 추가된 조합법도 있습니다.", "create.ponder.mechanical_mixer.text_3": "몇몇 조합법은 블레이즈 버너의 열을 요구합니다.", - "create.ponder.mechanical_mixer.text_4": "필터 슬롯을 이용해 조합법이 겹치는 것을 방지할 수 있습니다.", + "create.ponder.mechanical_mixer.text_4": "필터 슬롯을 이용해 조합법이 겹치는 것을 방지합니다.", "create.ponder.mechanical_piston.header": "기계식 피스톤으로 구조물 옮기기", - "create.ponder.mechanical_piston.text_1": "기계식 피스톤은 블록들을 앞으로 움직일 수 있습니다.", + "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_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_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_4": "압착기가 알아서 아이템 이동을 멈추고 가공합니다.", + "create.ponder.mechanical_press.text_3": "아이템이 벨트에 있으면...", + "create.ponder.mechanical_press.text_4": "...압착기가 알아서 아이템 이동을 멈추고 가공합니다.", "create.ponder.mechanical_press_compacting.header": "압착기로 아이템 압축하기", "create.ponder.mechanical_press_compacting.text_1": "대야와 함께 사용해서 아이템을 압축할 수 있습니다.", "create.ponder.mechanical_press_compacting.text_2": "가능한 조합법은 2x2 / 3x3 조합법을 포함하고, 모드에서 추가된 조합법도 있습니다.", "create.ponder.mechanical_press_compacting.text_3": "몇몇 조합법은 블레이즈 버너의 열을 요구합니다.", - "create.ponder.mechanical_press_compacting.text_4": "필터 슬롯을 이용해 조합법이 겹치는 것을 방지할 수 있습니다.", + "create.ponder.mechanical_press_compacting.text_4": "필터 슬롯을 이용해 조합법이 겹치는 것을 방지합니다.", "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": "펌프 방향을 바꾸어 흐름의 뱡향을 통일할 수 있습니다.", @@ -2132,11 +2132,11 @@ "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": "재료가 여러 결과물로 가공될 수 있을 때, 필터로 제한할 수 있습니다.", @@ -2164,8 +2164,8 @@ "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_fluid_interface.header": "구조물 장치의 액체 교환", @@ -2173,8 +2173,8 @@ "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_redstone.header": "레드스톤 설정", @@ -2182,8 +2182,8 @@ "create.ponder.powered_latch.header": "레드스톤 걸쇠 사용하기", "create.ponder.powered_latch.text_1": "레드스톤 걸쇠는 설정 가능한 레버입니다.", - "create.ponder.powered_latch.text_2": "뒤에서 오는 신호는 걸쇠 신호를 키고,", - "create.ponder.powered_latch.text_3": "옆에서 오는 신호는 걸쇠 신호를 끕니다.", + "create.ponder.powered_latch.text_2": "뒤에서 오는 신호는 걸쇠 신호를 키고...", + "create.ponder.powered_latch.text_3": "...옆에서 오는 신호는 걸쇠 신호를 끕니다.", "create.ponder.powered_latch.text_4": "레드스톤 걸쇠는 직접 끄고 킬 수도 있습니다.", "create.ponder.powered_toggle_latch.header": "레드스톤 토글 걸쇠 사용하기", @@ -2192,8 +2192,8 @@ "create.ponder.powered_toggle_latch.text_3": "혹은 끕니다.", "create.ponder.powered_toggle_latch.text_4": "레드스톤 토글 걸쇠는 직접 끄고 킬 수도 있습니다.", - "create.ponder.pulse_repeater.header": "펄스 리피터 사용하기", - "create.ponder.pulse_repeater.text_1": "펄스 리피터는 어느 레드스톤 신호라도 1틱 신호로 바꿉니다.", + "create.ponder.pulse_repeater.header": "펄스 중계기 사용하기", + "create.ponder.pulse_repeater.text_1": "펄스 중계기는 어느 레드스톤 신호라도 1틱 신호로 바꿉니다.", "create.ponder.radial_chassis.header": "원형 섀시를 이용해 블록 붙이기", "create.ponder.radial_chassis.text_1": "원형 섀시는 다른 원형 섀시와 이어집니다.", @@ -2201,8 +2201,8 @@ "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_6": "접착면에 블록이 있으면...", + "create.ponder.radial_chassis.text_7": "...해당 층 반지름 안에 있는 모든 블록을 연결합니다.", "create.ponder.radial_chassis.text_8": "렌치룰 이용하여, 섀시의 부착 반지름을 조절할 수 있습니다.", "create.ponder.radial_chassis.text_9": "접착면 반지름 밖의 블록은 붙지 않습니다.", @@ -2219,13 +2219,13 @@ "create.ponder.redstone_link.text_6": "맞는 주파수끼리만 레드스톤 링크가 작동합니다.", "create.ponder.rope_pulley.header": "밧줄 도르래로 구조물 옮기기", - "create.ponder.rope_pulley.text_1": "밧줄 도르래는 동력을 받으면 블록을 수직으로 옮길 수 있습니다.", + "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_3": "다만 도르래는 멈춰있을 떄만 작동할 수 있습니다.", + "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": "도르래가 움직임을 멈추면, 움직인 구조물은 블록으로 바뀝니다.", @@ -2276,18 +2276,18 @@ "create.ponder.speedometer.text_3": "속도 계측기의 측정값에 따라 비교기가 레드스톤 신호를 내보냅니다.", "create.ponder.spout_filling.header": "주입기로 아이템에 액체 채우기", - "create.ponder.spout_filling.text_1": "주입기는 아래있는 아이템을 액체를 채울 수 있습니다.", + "create.ponder.spout_filling.text_1": "주입기는 아래있는 아이템을 액체를 채웁니다.", "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_6": "주입기가 알아서 아이템 이동을 멈추고 가공합니다.", + "create.ponder.spout_filling.text_4": "주입기 아래 아이템 거치대에 아이템을 놓아, 액체를 채울 수 있습니다.", + "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_3": "베어링에 블록이 부착되어도,", - "create.ponder.stabilized_bearings.text_4": "부착된 구조물의 방향이 유지됩니다.", + "create.ponder.stabilized_bearings.text_1": "베어링이 움직이는 구조물의 일부분이어도...", + "create.ponder.stabilized_bearings.text_2": "...방향이 유지됩니다.", + "create.ponder.stabilized_bearings.text_3": "베어링에 블록이 부착되어도...", + "create.ponder.stabilized_bearings.text_4": "...부착된 구조물의 방향이 유지됩니다.", "create.ponder.sticker.header": "부착기를 통한 블록 부착", "create.ponder.sticker.text_1": "부착기는 레드스톤으로 제어할 수 있습니다.", @@ -2301,10 +2301,10 @@ "create.ponder.stressometer.text_3": "피로도 계측기의 측정값에 따라 비교기가 레드스톤 신호를 내보냅니다.", "create.ponder.super_glue.header": "강력 접착제로 블록 붙이기", - "create.ponder.super_glue.text_1": "강력 접착제는 두 블록 사이에 사용해 블록을 붙일 수 있습니다.", + "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": "밸브 손잡이로 동력 생산하기", @@ -2321,10 +2321,10 @@ "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.water_wheel.text_3": "바퀴의 날이 물이 흐르는 방향으로 향하게 된다면...", + "create.ponder.water_wheel.text_4": "...회전 속도가 감소하게 됩니다.", "create.ponder.weighted_ejector.header": "투척기 사용하기", "create.ponder.weighted_ejector.text_1": "투척기를 들고 웅크리고 우클릭하면, 발사 지점을 정할 수 있습니다.", @@ -2347,12 +2347,12 @@ "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_2": "날개 블록이 충분히 부착되어야 풍차의 역할을 합니다.", "create.ponder.windmill_source.text_3": "우클릭하면 풍차 베어링이 동력을 생성합니다.", "create.ponder.windmill_source.text_4": "날개 수에 따라 회전 속도가 바뀝니다.", "create.ponder.windmill_source.text_5": "렌치를 들고 스크롤하면 회전 방향을 바꿀 수 있습니다.", @@ -2360,7 +2360,6 @@ "create.ponder.windmill_structure.header": "풍차 구조물", "create.ponder.windmill_structure.text_1": "최소 8개 이상의 날개 블록이 있는 구조물만 풍차로 사용할 수 있습니다.", - "_": "Thank you for translating Create!" } From d6fedab1ae7b88d42b1b4184a210e0bd059c61df Mon Sep 17 00:00:00 2001 From: pgkrol <61147081+pgkrol@users.noreply.github.com> Date: Sun, 18 Jul 2021 16:32:43 +0300 Subject: [PATCH 095/118] Updates to ru_ru.json by pgkrol & Hanqnero (#1966) --- .../resources/assets/create/lang/ru_ru.json | 1409 +++++++++-------- 1 file changed, 792 insertions(+), 617 deletions(-) diff --git a/src/main/resources/assets/create/lang/ru_ru.json b/src/main/resources/assets/create/lang/ru_ru.json index c50ff7aaa..3031f418d 100644 --- a/src/main/resources/assets/create/lang/ru_ru.json +++ b/src/main/resources/assets/create/lang/ru_ru.json @@ -1,6 +1,6 @@ { - "_": "Missing Localizations: 519", - + "_": "Missing Localizations: -", + "_": "->------------------------] Game Elements [------------------------<-", "block.create.acacia_window": "Акациевое окно", @@ -28,10 +28,12 @@ "block.create.belt": "Конвейер", "block.create.birch_window": "Берёзовое окно", "block.create.birch_window_pane": "Панель из берёзового окна", + "block.create.black_nixie_tube": "Чёрный газоразрядный индикатор", "block.create.black_sail": "Чёрный парус", "block.create.black_seat": "Чёрное сиденье", "block.create.black_valve_handle": "Чёрный ручной вентиль", "block.create.blaze_burner": "Горелка Всполоха", + "block.create.blue_nixie_tube": "Синий газоразрядный индикатор", "block.create.blue_sail": "Синий парус", "block.create.blue_seat": "Синее сиденье", "block.create.blue_valve_handle": "Синий ручной вентиль", @@ -41,6 +43,7 @@ "block.create.brass_encased_shaft": "Вал в латунном корпусе", "block.create.brass_funnel": "Латунная воронка", "block.create.brass_tunnel": "Латунный туннель", + "block.create.brown_nixie_tube": "Коричневый газоразрядный индикатор", "block.create.brown_sail": "Коричневый парус", "block.create.brown_seat": "Коричневое сиденье", "block.create.brown_valve_handle": "Коричневый ручной вентиль", @@ -58,6 +61,7 @@ "block.create.cogwheel": "Шестерня", "block.create.content_observer": "Наблюдатель за содержимым", "block.create.controller_rail": "Контролирующая рельса", + "block.create.copper_backtank": "Медный баллон", "block.create.copper_block": "Медный блок", "block.create.copper_casing": "Медный корпус", "block.create.copper_ore": "Медная руда", @@ -72,8 +76,9 @@ "block.create.crushing_wheel": "Колесо дробления", "block.create.crushing_wheel_controller": "Контроллер колеса дробления", "block.create.cuckoo_clock": "Часы с кукушкой", + "block.create.cyan_nixie_tube": "Бирюзовый газоразрядный индикатор", "block.create.cyan_sail": "Бирюзовый парус", - "block.create.cyan_seat": "Бирюзовое сииденье", + "block.create.cyan_seat": "Бирюзовое сиденье", "block.create.cyan_valve_handle": "Бирюзовый ручной вентиль", "block.create.dark_oak_window": "Окно из тёмного дуба", "block.create.dark_oak_window_pane": "Панель из окна из тёмного дуб", @@ -82,11 +87,11 @@ "block.create.dark_scoria_bricks_slab": "Плита из тёмного пепельного кирпича", "block.create.dark_scoria_bricks_stairs": "Ступени из тёмного пепельного кирпича", "block.create.dark_scoria_bricks_wall": "Стена из тёмного пепельного кирпича", - "block.create.dark_scoria_cobblestone": "Ступени из тёмного пепел-булыжника", - "block.create.dark_scoria_cobblestone_slab": "Плита из тёмного пепел-булыжника", - "block.create.dark_scoria_cobblestone_stairs": "Ступени из тёмного пепел-булыжника", - "block.create.dark_scoria_cobblestone_wall": "Стена из тёмного пепел-булыжника", - "block.create.dark_scoria_pillar": "Колонна из тёмного пепел-булыжника", + "block.create.dark_scoria_cobblestone": "Ступени из тёмного пепельного булыжника", + "block.create.dark_scoria_cobblestone_slab": "Плита из тёмного пепельного булыжника", + "block.create.dark_scoria_cobblestone_stairs": "Ступени из тёмного пепельного булыжника", + "block.create.dark_scoria_cobblestone_wall": "Стена из тёмного пепельного булыжника", + "block.create.dark_scoria_pillar": "Колонна из тёмного пепельного булыжника", "block.create.deployer": "Автономный активатор", "block.create.depot": "Депо", "block.create.diorite_bricks": "Диоритовый кирпич", @@ -164,8 +169,8 @@ "block.create.gabbro_cobblestone_stairs": "Ступени из габбро-булыжника", "block.create.gabbro_cobblestone_wall": "Стена из габбро-булыжника", "block.create.gabbro_pillar": "Габбро колонна", - "block.create.gantry_carriage": "Портальное шасси", - "block.create.gantry_shaft": "Портальный вал", + "block.create.gantry_carriage": "Шасси портального крана", + "block.create.gantry_shaft": "Вал портального крана", "block.create.gearbox": "Коробка передач", "block.create.gearshift": "Реверсивный механизм", "block.create.glass_fluid_pipe": "Стеклянная жидкостная труба", @@ -178,13 +183,16 @@ "block.create.granite_cobblestone_stairs": "Ступени из гранит-булыжника", "block.create.granite_cobblestone_wall": "Стена из гранит-булыжника", "block.create.granite_pillar": "Гранитная колонна", + "block.create.gray_nixie_tube": "Серый газоразрядный индикатор", "block.create.gray_sail": "Серый парус", "block.create.gray_seat": "Серое сиденье", "block.create.gray_valve_handle": "Серый ручной вентиль", + "block.create.green_nixie_tube": "Зелёный газоразрядный индикатор", "block.create.green_sail": "Зелёный парус", "block.create.green_seat": "Зелёное сиденье", "block.create.green_valve_handle": "Зелёный ручной вентиль", "block.create.hand_crank": "Рукоятка", + "block.create.haunted_bell": "Призрачный колокол", "block.create.honey": "Мёд", "block.create.horizontal_framed_glass": "Горизонтальное обрамлённое стекло", "block.create.horizontal_framed_glass_pane": "Горизонтальная обрамлённая стеклянная панель", @@ -202,12 +210,16 @@ "block.create.layered_limestone": "Слоистый известняк", "block.create.layered_scoria": "Слоистый пепел", "block.create.layered_weathered_limestone": "Слоистый выветренный известняк", + "block.create.lectern_controller": "Контроллер кафедры", + "block.create.light_blue_nixie_tube": "Голубой газоразрядный индикатор", "block.create.light_blue_sail": "Голубой парус", "block.create.light_blue_seat": "Голубое сиденье", "block.create.light_blue_valve_handle": "Голубой ручной вентиль", + "block.create.light_gray_nixie_tube": "Светло-серый газоразрядный индикатор", "block.create.light_gray_sail": "Светло-серый парус", "block.create.light_gray_seat": "Светло-серое сиденье", "block.create.light_gray_valve_handle": "Светло-серый ручной вентиль", + "block.create.lime_nixie_tube": "Лаймовый газоразрядный индикатор", "block.create.lime_sail": "Лаймовый парус", "block.create.lime_seat": "Лаймовое сиденье", "block.create.lime_valve_handle": "Лаймовый ручной вентиль", @@ -224,12 +236,13 @@ "block.create.limestone_pillar": "Известковая колонна", "block.create.linear_chassis": "Линейное шасси", "block.create.lit_blaze_burner": "Зажжённая горелка Всполоха", + "block.create.magenta_nixie_tube": "Пурпурный газоразрядный индикатор", "block.create.magenta_sail": "Пурпурный парус", "block.create.magenta_seat": "Пурпурное сиденье", "block.create.magenta_valve_handle": "Пурпурный ручной вентиль", "block.create.mechanical_arm": "Механическая рука", "block.create.mechanical_bearing": "Механический вращатель", - "block.create.mechanical_crafter": "Механический создатель", + "block.create.mechanical_crafter": "Механический крафтер", "block.create.mechanical_drill": "Механическая дрель", "block.create.mechanical_harvester": "Механический комбайн", "block.create.mechanical_mixer": "Механический смешиватель", @@ -307,6 +320,8 @@ "block.create.paved_weathered_limestone_slab": "Плита из мощёного выветренного известняка", "block.create.paved_weathered_limestone_stairs": "Ступени из мощёного выветренного известняка", "block.create.paved_weathered_limestone_wall": "Стена из мощёного выветренного известняка", + "block.create.peculiar_bell": "Особенный колокол", + "block.create.pink_nixie_tube": "Розовый газоразрядный индикатор", "block.create.pink_sail": "Розовый парус", "block.create.pink_seat": "Розовое сиденье", "block.create.pink_valve_handle": "Розовый ручной вентиль", @@ -320,9 +335,9 @@ "block.create.polished_dolomite_stairs": "Ступени из полированного доломита", "block.create.polished_dolomite_wall": "Стена из полированного доломита", "block.create.polished_gabbro": "Полированный габбро", - "block.create.polished_gabbro_slab": "Плита из полированного габро", - "block.create.polished_gabbro_stairs": "Ступени из полированного габро", - "block.create.polished_gabbro_wall": "Стена из полированного габро", + "block.create.polished_gabbro_slab": "Плита из полированного габбро", + "block.create.polished_gabbro_stairs": "Ступени из полированного габбро", + "block.create.polished_gabbro_wall": "Стена из полированного габбро", "block.create.polished_limestone": "Полированный известняк", "block.create.polished_limestone_slab": "Плита из полированного известняка", "block.create.polished_limestone_stairs": "Ступени из полированного известняка", @@ -337,19 +352,21 @@ "block.create.polished_weathered_limestone_wall": "Стена из полированного выветренного известняка", "block.create.portable_fluid_interface": "Портативный жидкостный интерфейс", "block.create.portable_storage_interface": "Портативный интерфейс хранения", - "block.create.powered_latch": "Механизированная защёлка", - "block.create.powered_toggle_latch": "Механизированный рычаг-защёлка", + "block.create.powered_latch": "Питаемый рычаг", + "block.create.powered_toggle_latch": "Питаемый рычаг-переключатель", "block.create.pulley_magnet": "Магнитный шкив", "block.create.pulse_repeater": "Импульсный повторитель", + "block.create.purple_nixie_tube": "Фиолетовый газоразрядный индикатор", "block.create.purple_sail": "Фиолетовый парус", "block.create.purple_seat": "Фиолетовое сиденье", "block.create.purple_valve_handle": "Фиолетовый ручной вентиль", "block.create.radial_chassis": "Радиальное шасси", + "block.create.red_nixie_tube": "Красный газоразрядный индикатор", "block.create.red_sail": "Красный парус", "block.create.red_seat": "Красное сиденье", "block.create.red_valve_handle": "Красный ручной вентиль", - "block.create.redstone_contact": "Редстоун Контакт", - "block.create.redstone_link": "Редстоун Передатчик", + "block.create.redstone_contact": "Контакт редстоун сигнала", + "block.create.redstone_link": "Беспроводной передатчик редстоун сигнала", "block.create.refined_radiance_casing": "Сияющий корпус", "block.create.reinforced_rail": "Усиленные рельсы", "block.create.rope": "Канат", @@ -363,10 +380,10 @@ "block.create.scoria_bricks_slab": "Плита из пепельного кирпича", "block.create.scoria_bricks_stairs": "Ступени из пепельного кирпича", "block.create.scoria_bricks_wall": "Стена из пепельного кирпича", - "block.create.scoria_cobblestone": "Пепел-булыжник", - "block.create.scoria_cobblestone_slab": "Плита из пепел-булыжника", - "block.create.scoria_cobblestone_stairs": "Ступени из пепел-булыжника", - "block.create.scoria_cobblestone_wall": "Стена из пепел-булыжника", + "block.create.scoria_cobblestone": "Пепельный булыжник", + "block.create.scoria_cobblestone_slab": "Плита из пепельного булыжника", + "block.create.scoria_cobblestone_stairs": "Ступени из пепельного булыжника", + "block.create.scoria_cobblestone_wall": "Стена из пепельного булыжника", "block.create.scoria_pillar": "Колонна из пепла", "block.create.secondary_linear_chassis": "Вторичное линейное шасси", "block.create.sequenced_gearshift": "Последовательный переключатель передач", @@ -401,25 +418,30 @@ "block.create.weathered_limestone_cobblestone_wall": "Стена из известняк-булыжника", "block.create.weathered_limestone_pillar": "Колонна из выветренного известняка", "block.create.weighted_ejector": "Взвешенная катапульта", + "block.create.white_nixie_tube": "Белый газоразрядный индикатор", "block.create.white_sail": "Белый парус", "block.create.white_seat": "Белое сиденье", "block.create.white_valve_handle": "Белый ручной вентиль", "block.create.windmill_bearing": "Подшипник ветряной мельницы", "block.create.wooden_bracket": "Деревянная скоба", + "block.create.yellow_nixie_tube": "Жёлтый газоразрядный индикатор", "block.create.yellow_sail": "Жёлтый парус", "block.create.yellow_seat": "Жёлтое сиденье", "block.create.yellow_valve_handle": "Жёлтый ручной вентиль", "block.create.zinc_block": "Цинковый блок", "block.create.zinc_ore": "Цинковая руда", + "enchantment.create.capacity": "Вместимость", + "enchantment.create.potato_recovery": "Возобновление картофеля", + "entity.create.contraption": "Штуковина", + "entity.create.crafting_blueprint": "Создание чертежа", "entity.create.gantry_contraption": "Крановая штуковина", + "entity.create.potato_projectile": "Картофельный снаряд", "entity.create.seat": "Сиденье", "entity.create.stationary_contraption": "Стационарная штуковина", "entity.create.super_glue": "Супер-клей", - "fluid.create.chocolate": "Шоколад", - "fluid.create.honey": "Мёд", "fluid.create.milk": "Молоко", "fluid.create.potion": "Зелье", "fluid.create.tea": "Чай Строителя", @@ -435,16 +457,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_ingot": "Медный слиток", "item.create.copper_nugget": "Кусочек меди", "item.create.copper_sheet": "Медный лист", "item.create.crafter_slot_cover": "Крышка на слот крафтера", - "item.create.crushed_aluminum_ore": "Измельчённая алюминиевая руда", + "item.create.crafting_blueprint": "Создание чертежа", + "item.create.crushed_aluminum_ore": "Дроблёная алюминиевая руда", "item.create.crushed_brass": "Дроблёная латунь", "item.create.crushed_copper_ore": "Дроблёная медная руда", "item.create.crushed_gold_ore": "Дроблёная золотая руда", @@ -454,34 +478,35 @@ "item.create.crushed_osmium_ore": "Дроблёная осмиевая руда", "item.create.crushed_platinum_ore": "Дроблёная платиновая руда", "item.create.crushed_quicksilver_ore": "Дроблёная ртутная руда", - "item.create.crushed_silver_ore": "Дроблёная серебрянная руда", + "item.create.crushed_silver_ore": "Дроблёная серебряная руда", "item.create.crushed_tin_ore": "Дроблёная оловянная руда", "item.create.crushed_uranium_ore": "Дроблёная урановая руда", "item.create.crushed_zinc_ore": "Дроблёная цинковая руда", "item.create.diving_boots": "Ботинки для дайвинга", "item.create.diving_helmet": "Шлем для дайвинга", - "item.create.deforester": "Уничтожитель леса", "item.create.dough": "Тесто", "item.create.electron_tube": "Электронная лампа", - "item.create.empty_blaze_burner": "Пустая горелека Всполоха", + "item.create.empty_blaze_burner": "Пустая горелка Всполоха", "item.create.empty_schematic": "Пустая схематика", "item.create.extendo_grip": "Удлинённая рука", "item.create.filter": "Фильтр", - "item.create.furnace_minecart_contraption": "Печно-вагонеточная штуковина", + "item.create.furnace_minecart_contraption": "Штуковина самоходной вагонетки", "item.create.goggles": "Инженерные очки", "item.create.golden_sheet": "Золотой лист", - "item.create.handheld_blockzapper": "Ручная блоковая пушка", "item.create.handheld_worldshaper": "Ручной редактор мира", "item.create.honey_bucket": "Ведро мёда", "item.create.honeyed_apple": "Яблоко в меду", - "item.create.integrated_circuit": "Интегральная схема", + "item.create.incomplete_cogwheel": "Незаконченная шестерня", + "item.create.incomplete_large_cogwheel": "Незаконченная большая шестерня", + "item.create.incomplete_precision_mechanism": "Незаконченный механизм точности", "item.create.iron_sheet": "Железный лист", - "item.create.lapis_sheet": "Лазуритовый лист", - "item.create.linked_controller": "Связанный контроллер", + "item.create.linked_controller": "Контроллер связей", "item.create.minecart_contraption": "Вагонеточная штуковина", - "item.create.minecart_coupling": "Связыватель вагонеток", + "item.create.minecart_coupling": "Соединитель вагонеток", "item.create.polished_rose_quartz": "Полированный розовый кварц", + "item.create.potato_cannon": "Картофельная пушка", "item.create.powdered_obsidian": "Порошкообразный обсидиан", + "item.create.precision_mechanism": "Механизм точности", "item.create.propeller": "Пропеллер", "item.create.red_sand_paper": "Красная наждачная бумага", "item.create.refined_radiance": "Изысканное сияние", @@ -509,9 +534,9 @@ "advancement.create.andesite_alloy": "Повторение - мать учения", "advancement.create.andesite_alloy.desc": "Материалы Create имеют странные названия, одно из них - Андезитовый сплав", "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.belt": "Передайте за проезд!", @@ -527,9 +552,9 @@ "advancement.create.belt_funnel": "Болтающиеся воронки", "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.desc": "Оседлайте поток воздуха от Вентилятора.", "advancement.create.fan_lava": "Геотермальный пространственный нагреватель", "advancement.create.fan_lava.desc": "Попадите в поток воздуха, плавящего вещи.", "advancement.create.fan_water": "Сумасшедшая мойка", @@ -539,19 +564,19 @@ "advancement.create.wrench": "Конфигурировать удобно", "advancement.create.wrench.desc": "Создайте гаечный ключ, чтобы помочь себе в создании изобретений.", "advancement.create.goggles": "Стресс-о-зрение", - "advancement.create.goggles.desc": "Создайте инженерные очки, чтобы получить больше кинетической информации о компонентах.", + "advancement.create.goggles.desc": "Создайте инженерные очки, чтобы получить больше информации о кинетике компонентов.", "advancement.create.speedometer": "Так быстро?", "advancement.create.speedometer.desc": "Поставьте и подключите спидометр. Посмотрите на спидометр через очки, чтобы прочитать точное значение.", "advancement.create.stressometer": "Так сильно?", "advancement.create.stressometer.desc": "Поставьте и подключите стрессометр. Посмотрите на стрессометр через очки, чтобы прочитать точное значение.", "advancement.create.aesthetics": "Бах! Эстетично!", - "advancement.create.aesthetics.desc": "Разместите скобы на валу, трубе или шестерне.", + "advancement.create.aesthetics.desc": "Разместите скобы на вал, трубу или шестерню.", "advancement.create.reinforced": "Бах! Усилено!", "advancement.create.reinforced.desc": "Разместите подходящий блок корпуса на вал, трубу и конвейер.", - "advancement.create.water_wheel": "Гидравлика", + "advancement.create.water_wheel": "Обузданная гидравлика", "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.cuckoo": "Уже?", @@ -564,12 +589,12 @@ "advancement.create.maxed_windmill.desc": "Соберите ветряную мельницу максимальной силы.", "advancement.create.andesite_casing": "Андезитовый век", "advancement.create.andesite_casing.desc": "Используйте немного андезитового сплава и дерева для создания корпуса.", - "advancement.create.mechanical_drill": "Стационарные выключатели", + "advancement.create.mechanical_drill": "Стационарные разрушители", "advancement.create.mechanical_drill.desc": "Установите и приведите в действие механическую дрель", "advancement.create.press": "Пресс делает «Бонк!»", "advancement.create.press.desc": "Приведите механический пресс в действие и используйте его для создания пластин.", "advancement.create.polished_rose_quartz": "Розовый алмаз", - "advancement.create.polished_rose_quartz.desc": "Используйте кусок наждачной бумаги, чтобы отполировать розовый кварц, пока он не станет прозрачным.", + "advancement.create.polished_rose_quartz.desc": "Используйте кусок наждачной бумаги, чтобы отполировать розовый кварц, пока он не станет глянцевым.", "advancement.create.electron_tube": "Бип бип", "advancement.create.electron_tube.desc": "Сделайте несколько электронных ламп, пригодных для изготовления менее примитивных машин.", "advancement.create.mechanical_saw": "Стационарная рубка", @@ -582,7 +607,7 @@ "advancement.create.blaze_burner.desc": "Получить Горелку Всполоха", "advancement.create.compact": "Автоматическое уплотнение", "advancement.create.compact.desc": "Используйте пресс и чашу для уплотнения некоторых предметов.", - "advancement.create.brass": "Действительный сплав", + "advancement.create.brass": "Реальный сплав", "advancement.create.brass.desc": "Используйте дроблёную медь и дроблёный цинк, чтобы создать немного латуни.", "advancement.create.brass_casing": "Бронзовый век", "advancement.create.brass_casing.desc": "Используйте только что полученную латунь и немного дерева, чтобы создать более продвинутый корпус.", @@ -598,7 +623,7 @@ "advancement.create.item_drain.desc": "Посмотрите как жидкость выкачивается из предмета, в Предметном осушителе.", "advancement.create.chained_item_drain": "Поехали!", "advancement.create.chained_item_drain.desc": "Наблюдайте за тем как предмет едет через несколько соединённых предметных осушителей.", - "advancement.create.glass_pipe": "Поточный шпион", + "advancement.create.glass_pipe": "Шпион за потоками", "advancement.create.glass_pipe.desc": "Наблюдайте через окно в трубе за тем как распространяется жидкость. Окно появится на трубе при использовании гаечного ключа.", "advancement.create.pipe_collision": "Никогда не скрещивайте потоки!", "advancement.create.pipe_collision.desc": "Наблюдайте за тем как две жидкости встречаются в вашей сети труб.", @@ -611,7 +636,7 @@ "advancement.create.infinite_lava": "Уничтожение ядра", "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.clockwork_bearing": "Хитрые часы", @@ -626,18 +651,18 @@ "advancement.create.flywheel.desc": "Успешно соедините двигатель с маховиком.", "advancement.create.overstress_flywheel": "Перенапряжение", "advancement.create.overstress_flywheel.desc": "Подайте слишком большую нагрузку на печной двигатель.", - "advancement.create.integrated_circuit": "Сложные вычисления", - "advancement.create.integrated_circuit.desc": "Создайте Интегральную схему.", + "advancement.create.precision_mechanism": "Сложные любопытства.", + "advancement.create.precision_mechanism.desc": "Создайте механизм точности.", "advancement.create.mechanical_arm": "Золотые руки!", - "advancement.create.mechanical_arm.desc": "Создайте Механическую руку, выбирете входы и выходы, установите в мире и запитайте. Затем смотрите как она делает за вас всю работу.", + "advancement.create.mechanical_arm.desc": "Создайте Механическую руку, выберите входы и выходы, установите в мире и запитайте. Затем смотрите как она делает за вас всю работу.", "advancement.create.musical_arm": "Сбацай что-нибудь!", "advancement.create.musical_arm.desc": "Посмотрите как механическая рука меняет пластинки.", - "advancement.create.arm_many_targets": "Организатор", + "advancement.create.arm_many_targets": "Организа-трон", "advancement.create.arm_many_targets.desc": "Запрограммируйте механическую руку на 10 и больше выходов.", - "advancement.create.arm_blaze_burner": "Поджигатель", + "advancement.create.arm_blaze_burner": "Поджигателе-трон", "advancement.create.arm_blaze_burner.desc": "Запрограммируйте механическую руку на кормление Горелки Всполоха.", "advancement.create.fist_bump": "Брось это, братан!", - "advancement.create.fist_bump.desc": "Сделайте два удара кулаком.", + "advancement.create.fist_bump.desc": "Сделайте два удара кулаками Автономных активаторов.", "advancement.create.crushing_wheel": "Пара гигантов", "advancement.create.crushing_wheel.desc": "Создайте несколько дробящих колес, чтобы более эффективно разрушать больше материалов.", "advancement.create.blaze_cake": "Сахарная лихорадка", @@ -650,17 +675,13 @@ "advancement.create.refined_radiance.desc": "Создайте изысканное сияние, мощное хроматическое вещество.", "advancement.create.chromatic_age": "Хроматический век", "advancement.create.chromatic_age.desc": "Создайте блоки корпуса из света и тьмы.", - "advancement.create.zapper": "Строительство со стилем", - "advancement.create.zapper.desc": "Создайте ручную блоковую пушку, которая поможет вам строить.", - "advancement.create.upgraded_zapper": "Сияющий овердрайв", - "advancement.create.upgraded_zapper.desc": "Создайте и активируйте полностью модернизированную ручную блоковую пушку.", "advancement.create.wand_of_symmetry": "Сияющие зеркала", "advancement.create.wand_of_symmetry.desc": "Создайте жезл симметрии.", - "advancement.create.deforester": "Лучистая рубка", - "advancement.create.deforester.desc": "Создайте уничтожитель леса и попрощайтесь с местным лесом.", - "advancement.create.extendo_grip": "Кипение!", + "advancement.create.extendo_grip": "Бойоиоинг!", "advancement.create.extendo_grip.desc": "Возьмите в руки удлинённую руку", - "advancement.create.dual_extendo_grip": "Окончательное выкипание", + "advancement.create.potato_cannon": "Свомп!", + "advancement.create.potato_cannon.desc": "Победите врага с помощью своей картофельной пушки!", + "advancement.create.dual_extendo_grip": "Время ультимативных пружин", "advancement.create.dual_extendo_grip.desc": "Две удлинённых руки для сверхчеловеческого охвата.", "advancement.create.eob": "Конец бета-версии", "advancement.create.eob.desc": "Ожидайте больше контента здесь в будущем. <3", @@ -672,15 +693,31 @@ "itemGroup.create.palettes": "Create: Декор", "death.attack.create.crush": "%1$s был передроблен", + "death.attack.create.crush.player": "%2$s столкнул %1$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.mechanical_drill": "%1$s был пронзен с помощью механической дрели", + "death.attack.create.fan_lava.player": "%2$s столкнул %1$s в плавильню", + "death.attack.create.mechanical_drill": "%1$s был пронзён механической дрелью", + "death.attack.create.mechanical_drill.player": "%2$s толкнул %1$s под механическую дрель", "death.attack.create.mechanical_saw": "%1$s был разрезан пополам механической пилой", + "death.attack.create.mechanical_saw.player": "%2$s толкнул %1$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 был взорван подделанными часами с кукушкой", "create.block.deployer.damage_source_name": "автономным активатором", "create.block.cart_assembler.invalid": "Поместите сборщик вагонеток на блок рельс", + "create.menu.return": "Вернуться в меню", + "create.menu.configure": "Настроить...", + "create.menu.ponder_index": "Содержание размышлений", + "create.menu.only_ingame": "Доступно в меню Паузы", + "create.menu.project_page": "Страница проекта", + "create.menu.report_bugs": "Сообщите об ошибке", + "create.menu.support": "Поддержите нас", + "create.recipe.crushing": "Измельчение", "create.recipe.milling": "Помол", "create.recipe.fan_washing": "Массовая промывка", @@ -691,6 +728,7 @@ "create.recipe.fan_blasting.fan": "Вентилятор за текущей лавой", "create.recipe.pressing": "Прессование", "create.recipe.mixing": "Смешивание", + "create.recipe.deploying": "Автономная активация", "create.recipe.automatic_shapeless": "Автоматическая бесформенная сборка", "create.recipe.automatic_brewing": "Автоматическое смешивание", "create.recipe.packing": "Прессование", @@ -700,11 +738,20 @@ "create.recipe.automatic_shaped": "Автоматическая форменная сборка", "create.recipe.block_cutting": "Резка блока", "create.recipe.wood_cutting": "Резка древесины", - "create.recipe.blockzapper_upgrade": "Ручная блоковая пушка", "create.recipe.sandpaper_polishing": "Полировка наждачной бумагой", "create.recipe.mystery_conversion": "Хроматический метаморфоз", "create.recipe.spout_filling": "Заполнение дозатором", "create.recipe.draining": "Осушение предметов", + "create.recipe.sequenced_assembly": "Последовательная сборка", + "create.recipe.assembly.next": "Следующее: %1$s", + "create.recipe.assembly.step": "Шаг %1$s:", + "create.recipe.assembly.progress": "Прогресс: %1$s/%2$s", + "create.recipe.assembly.pressing": "Обработайте в Прессе", + "create.recipe.assembly.spout_filling_fluid": "Долейте %1$s", + "create.recipe.assembly.deploying_item": "Добавьте %1$s", + "create.recipe.assembly.cutting": "Разрежьте пилой", + "create.recipe.assembly.repeat": "Повторите последовательность %1$s раз", + "create.recipe.assembly.junk": "Случайный мусор", "create.recipe.processing.chance": "%1$s%% шанса", "create.recipe.heat_requirement.none": "Не требует нагрева", "create.recipe.heat_requirement.heated": "Нагрето", @@ -721,7 +768,7 @@ "create.generic.unit.seconds": "секунд", "create.generic.unit.minutes": "минут", "create.generic.unit.rpm": "об./мин.", - "create.generic.unit.stress": "ен", + "create.generic.unit.stress": "ен", "create.generic.unit.degrees": "°", "create.generic.unit.millibuckets": "%1$smB", "create.generic.clockwise": "По часовой стрелке", @@ -757,20 +804,16 @@ "create.orientation.alongZ": "Вдоль Z", "create.orientation.alongX": "Вдоль X", - "create.gui.blockzapper.title": "Ручная блоковая пушка", - "create.gui.blockzapper.replaceMode": "Режим замены", - "create.gui.blockzapper.searchDiagonal": "Следовать Диагоналям", - "create.gui.blockzapper.searchFuzzy": "Игнорировать Границы Материала", - "create.gui.blockzapper.range": "Диапазон распространения", - "create.gui.blockzapper.needsUpgradedAmplifier": "Требуется модернизированный усилитель", - "create.gui.blockzapper.patternSection": "Шаблон", - "create.gui.blockzapper.pattern.solid": "Всё", - "create.gui.blockzapper.pattern.checkered": "Шахматная доска", - "create.gui.blockzapper.pattern.inversecheckered": "Обратный Шахматный", - "create.gui.blockzapper.pattern.chance25": "25% Шанс", - "create.gui.blockzapper.pattern.chance50": "50% Шанс", - "create.gui.blockzapper.pattern.chance75": "75% Шанс", "create.gui.terrainzapper.title": "Ручной редактор мира", + "create.gui.terrainzapper.searchDiagonal": "Следование диагоналям", + "create.gui.terrainzapper.searchFuzzy": "Игнорировать границы материала", + "create.gui.terrainzapper.patternSection": "Шаблон", + "create.gui.terrainzapper.pattern.solid": "Сплошной", + "create.gui.terrainzapper.pattern.checkered": "Шахматный порядок", + "create.gui.terrainzapper.pattern.inversecheckered": "Обратный шахматный порядок", + "create.gui.terrainzapper.pattern.chance25": "25% заполнение", + "create.gui.terrainzapper.pattern.chance50": "50% заполнение", + "create.gui.terrainzapper.pattern.chance75": "75% заполнение", "create.gui.terrainzapper.placement": "Размещение", "create.gui.terrainzapper.placement.merged": "Слитый", "create.gui.terrainzapper.placement.attached": "Прикреплённый", @@ -793,22 +836,9 @@ "create.terrainzapper.usingBlock": "Используется: %1$s", "create.terrainzapper.leftClickToSet": "Левый клик по блоку, что бы использовать материал", - "create.blockzapper.usingBlock": "С помощью: %1$s", - "create.blockzapper.componentUpgrades": "Обновления компонентов:", - "create.blockzapper.component.body": "Корпус", - "create.blockzapper.component.amplifier": "Усилитель", - "create.blockzapper.component.accelerator": "Ускоритель", - "create.blockzapper.component.retriever": "Поисковик", - "create.blockzapper.component.scope": "Объем", - "create.blockzapper.componentTier.none": "Нет", - "create.blockzapper.componentTier.brass": "Латунный", - "create.blockzapper.componentTier.chromatic": "Хроматический", - "create.blockzapper.leftClickToSet": "Щелкните ЛКМ по блоку, чтобы выбрать материал", - "create.blockzapper.empty": "Вне блоков!", - "create.minecart_coupling.two_couplings_max": "Вагонетки могут иметь только две связи", "create.minecart_coupling.unloaded": "Кажется, часть вашего поезда в незагруженных чанках", - "create.minecart_coupling.no_loops": "Связыватели не могут образовывать петлю", + "create.minecart_coupling.no_loops": "Соединители не могут образовывать петлю", "create.minecart_coupling.removed": "Убраны все связи между вагонетками", "create.minecart_coupling.too_far": "Вагонетки слишком далеко друг от друга", @@ -835,7 +865,7 @@ "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_click_again": "Фильтр применён к %1$s, кликните еще раз, чтобы скопировать количество.", "create.logistics.filter.apply_count": "Применено извлекаемое количество к фильтру.", "create.gui.goggles.generator_stats": "Статистика генератора:", @@ -848,7 +878,7 @@ "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": "Слишком много Удлинителей прикреплено к этому Поршню.\nThe configured maximum is: %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.gauge.info_header": "Калибровочная информация:", @@ -857,7 +887,7 @@ "create.gui.stressometer.capacity": "Оставшаяся ёмкость", "create.gui.stressometer.overstressed": "Перегрузка", "create.gui.stressometer.no_rotation": "Нет вращения", - "create.gui.contraptions.not_fast_enough": "Похоже, что этот %1$s _не_ вращается с_достаточной_ _скоростью_.", + "create.gui.contraptions.not_fast_enough": "Похоже, что этот %1$s _не_ вращается с _достаточной_ _скоростью_.", "create.gui.contraptions.network_overstressed": "Похоже, что эта штуковина _перегружена_. Добавьте больше источников или _понизьте_ _скорость_ компонентов, _создающих_ высокую _нагрузку_.", "create.gui.adjustable_crate.title": "Регулируемый ящик", "create.gui.adjustable_crate.storageSpace": "Ёмкость", @@ -878,7 +908,7 @@ "create.gui.sequenced_gearshift.instruction.delay.duration": "Длительность", "create.gui.sequenced_gearshift.instruction.end.descriptive": "Конец", "create.gui.sequenced_gearshift.instruction.end": "Конец", - "create.gui.sequenced_gearshift.instruction.await.descriptive": "Ожидать нового Импульса Редстоун Сигнала", + "create.gui.sequenced_gearshift.instruction.await.descriptive": "Ожидать нового Импульса редстоун Сигнала", "create.gui.sequenced_gearshift.instruction.await": "Ожидать", "create.gui.sequenced_gearshift.speed": "Скорость, Направление", "create.gui.sequenced_gearshift.speed.forward": "Скорость ввода, вперед", @@ -903,7 +933,7 @@ "create.schematic.rotation.cw90": "По час. стрелке 90", "create.schematic.rotation.cw180": "По час. стрелке 180", "create.schematic.rotation.cw270": "По час. стрелке 270", - "create.schematic.mirror": "Зеркало", + "create.schematic.mirror": "Отразить", "create.schematic.mirror.none": "Нет", "create.schematic.mirror.frontBack": "Спереди-сзади", "create.schematic.mirror.leftRight": "Влево-вправо", @@ -933,7 +963,7 @@ "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.0": "Переверните схему вдоль выбранной стороны.", "create.schematic.tool.flip.description.1": "Наведите курсор на схему и [CTRL] + прокрутка, чтобы перевернуть ее.", "create.schematic.tool.flip.description.2": "", "create.schematic.tool.flip.description.3": "", @@ -964,10 +994,10 @@ "create.gui.schematicannon.option.skipMissing": "Пропускать отсутствующие блоки", "create.gui.schematicannon.option.skipTileEntities": "Защитить имущество", "create.gui.schematicannon.slot.gunpowder": "Добавьте порох чтобы запитать пушку", - "create.gui.schematicannon.slot.listPrinter": "Положите книгу чтобы создать список предметов для схематики", + "create.gui.schematicannon.slot.listPrinter": "Положите книгу, чтобы создать список предметов для схематики", "create.gui.schematicannon.slot.schematic": "Положите свою схематику здесь. Убедитесь что она размещена в правильном месте", "create.gui.schematicannon.option.skipMissing.description": "Если пушка не может найти требуемый блок, она будет строить в следующем месте.", - "create.gui.schematicannon.option.skipTileEntities.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": "Пушка будет заменять целые блоки, если в схеме в этом месте есть что-либо.", @@ -1035,6 +1065,11 @@ "create.item_attributes.in_item_group.inverted": "не принадлежит '%1$s'", "create.item_attributes.added_by": "был добавлен %1$s", "create.item_attributes.added_by.inverted": "не был добавлен %1$s", + "create.item_attributes.shulker_level": "шалкер %1$s", + "create.item_attributes.shulker_level.inverted": "шалкер не %1$s", + "create.item_attributes.shulker_level.full": "полный", + "create.item_attributes.shulker_level.empty": "пустой", + "create.item_attributes.shulker_level.partial": "частично заполнен", "create.item_attributes.has_enchant": "зачарован на %1$s", "create.item_attributes.has_enchant.inverted": "не зачарован на %1$s", "create.item_attributes.color": "Покрашено в %1$s", @@ -1046,7 +1081,7 @@ "create.item_attributes.has_name": "имеет нестандартное имя %1$s", "create.item_attributes.has_name.inverted": "не имеет нестандартное имя%1$s", "create.item_attributes.book_author": "подписана %1$s", - "create.item_attributes.book_author.inverted": "неподписана %1$s", + "create.item_attributes.book_author.inverted": "не подписана %1$s", "create.item_attributes.book_copy_original": "оригинал", "create.item_attributes.book_copy_original.inverted": "не оригинал", "create.item_attributes.book_copy_first": "копия первого порядка", @@ -1102,34 +1137,55 @@ "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.target_not_valid": "Бросает до ближайшего блока (Неподходящая Цель)", + "create.weighted_ejector.no_target": "Бросает до ближайшего блока (Цель не была Выбрана)", "create.weighted_ejector.targeting": "Бросает до [%1$s,%2$s,%3$s]", - "create.weighted_ejector.stack_size": "Размер Бросаемого Стака", + "create.weighted_ejector.stack_size": "Размер бросаемого стака", "create.logistics.when_multiple_outputs_available": "Когда доступно несколько выходов", "create.mechanical_arm.selection_mode.round_robin": "По кругу", "create.mechanical_arm.selection_mode.forced_round_robin": "Принудительно по кругу", - "create.mechanical_arm.selection_mode.prefer_first": "Предпочтитать первичную цель", + "create.mechanical_arm.selection_mode.prefer_first": "Предпочитать первичную цель", "create.tunnel.selection_mode.split": "Разделить", "create.tunnel.selection_mode.forced_split": "Принудительно разделить", "create.tunnel.selection_mode.round_robin": "По кругу", "create.tunnel.selection_mode.forced_round_robin": "Принудительно по кругу", - "create.tunnel.selection_mode.prefer_nearest": "Придпочтительно ближайшее", + "create.tunnel.selection_mode.prefer_nearest": "Предпочтительно ближайшее", "create.tunnel.selection_mode.randomize": "Случайно", "create.tunnel.selection_mode.synchronize": "Синхронизировать входы", - "create.tooltip.chute.header": "Инвормация о желобе", + "create.tooltip.chute.header": "Информация о желобе", "create.tooltip.chute.items_move_down": "Предметы двигаются вниз", "create.tooltip.chute.items_move_up": "Предметы двигаются вверх", - "create.tooltip.chute.no_fans_attached": "Нет подключеных вентиляторов", + "create.tooltip.chute.no_fans_attached": "Нет подключенных вентиляторов", "create.tooltip.chute.fans_push_up": "Вентилятор толкает снизу", "create.tooltip.chute.fans_push_down": "Вентилятор толкает сверху", "create.tooltip.chute.fans_pull_up": "Вентилятор тянет сверху", "create.tooltip.chute.fans_pull_down": "Вентилятор тянет снизу", "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.linked_controller.bind_mode": "Режим привязки активирован", + "create.linked_controller.press_keybind": "Нажмите %1$s, %2$s, %3$s, %4$s, %5$s or %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", + + "create.crafting_blueprint.crafting_slot": "Слот для ингредиентов", + "create.crafting_blueprint.filter_items_viable": "Продвинутые фильтры предметов применимы", + "create.crafting_blueprint.display_slot": "Отображаемая ячейка", + "create.crafting_blueprint.inferred": "Производные от рецепта", + "create.crafting_blueprint.manually_assigned": "Назначен вручную", + "create.crafting_blueprint.secondary_display_slot": "Дополнительная отображаемая ячейка", + "create.crafting_blueprint.optional": "Опциональна", + + "create.potato_cannon.ammo.attack_damage": "%1$s урона от атаки", + "create.potato_cannon.ammo.reload_ticks": "%1$s тиков перезагрузки", + "create.potato_cannon.ammo.knockback": "%1$s отбрасывания", "create.hint.hose_pulley.title": "Безграничное снабжение", "create.hint.hose_pulley": "Целевой водный резервуар считается бесконечным.", @@ -1157,16 +1213,47 @@ "create.command.killTPSCommand.status.usage.1": "[Create]: используйте /killtps start <Время тика>, чтобы искусственно замедлить тик сервера", "create.command.killTPSCommand.argument.tickTime": "Время тика", - "create.subtitle.schematicannon_launch_block": "Выстрелы схематичной пушки", - "create.subtitle.schematicannon_finish": "Схематичная пушка закончила работу", - "create.subtitle.slime_added": "Намазывание слизи", - "create.subtitle.mechanical_press_activation": "Механический пресс активирован", - "create.subtitle.mechanical_press_item_break": "Лязг металла", - "create.subtitle.blockzapper_place": "Блок запрыгивает на место", - "create.subtitle.blockzapper_confirm": "Утвердительный динь", - "create.subtitle.blockzapper_deny": "Тихий буп", - "create.subtitle.block_funnel_eat": "Воронкообразный чмопс", + "create.contraption.minecart_contraption_too_big": "Эта вагонеточная штуковина кажется слишком большой, чтобы ее можно было поднять", + "create.contraption.minecart_contraption_illegal_pickup": "Мистическая сила связывает эту вагонеточную штуковину с миром", + + + "_": "->------------------------] Subtitles [------------------------<-", + + "create.subtitle.contraption_disassemble": "Штуковина останавливается", + "create.subtitle.peculiar_bell_use": "Особенный колокол звонит", + "create.subtitle.mixing": "Шум смешивания", + "create.subtitle.mechanical_press_activation_belt": "Механический пресс делает «бонк»", + "create.subtitle.fwoomp": "Картофельная пушка делает «Свомп»", + "create.subtitle.worldshaper_place": "Ручной редактор мира делает «Зап»", + "create.subtitle.crushing_1": "Шум разрушения", + "create.subtitle.depot_slide": "Шелест предметов", + "create.subtitle.saw_activate_stone": "Активируется механическая пила", "create.subtitle.blaze_munch": "Всполох радостно жуёт", + "create.subtitle.funnel_flap": "Занавески воронок хлопают", + "create.subtitle.schematicannon_finish": "Схематичная пушка закончила работу", + "create.subtitle.haunted_bell_use": "Призрачный колокол звонит", + "create.subtitle.scroll_value": "Щелчки колеса прокрутки", + "create.subtitle.crafter_craft": "Крафтер создаёт", + "create.subtitle.controller_put": "Контроллер стучит", + "create.subtitle.cranking": "Вращается рукоятка", + "create.subtitle.wrench_remove": "Компонент ломается", + "create.subtitle.cogs": "Шестерни грохочут", + "create.subtitle.slime_added": "Намазывание слизи", + "create.subtitle.wrench_rotate": "Использован гаечный ключ", + "create.subtitle.potato_hit": "Овощ врезается", + "create.subtitle.saw_activate_wood": "Активируется механическая пила", + "create.subtitle.haunted_bell_convert": "Призрачный колокол пробуждается", + "create.subtitle.deployer_polish": "Автономный активатор полирует", + "create.subtitle.deny": "Отрицательный «Буп»", + "create.subtitle.controller_click": "Клики контроллера", + "create.subtitle.schematicannon_launch_block": "Выстрелы схематичной пушки", + "create.subtitle.copper_armor_equip": "Позвякивание снаряжения для дайвинга", + "create.subtitle.controller_take": "Кафедра опустошается", + "create.subtitle.mechanical_press_activation": "Механический пресс активирован", + "create.subtitle.contraption_assemble": "Штуковина движется", + "create.subtitle.crafter_click": "Крафтер кликает", + "create.subtitle.depot_plop": "Предмет падает", + "create.subtitle.confirm": "Утвердительный «Динь»", "_": "->------------------------] Item Descriptions [------------------------<-", @@ -1180,88 +1267,21 @@ "item.create.example_item.tooltip.control1": "When Ctrl pressed", "item.create.example_item.tooltip.action1": "These controls are displayed.", - "block.create.wooden_bracket.tooltip": "WOODEN BRACKET", + "block.create.wooden_bracket.tooltip": "ДЕРЕВЯННАЯ СКОБА", "block.create.wooden_bracket.tooltip.summary": "_Украсьте_ ваши _валы, шестерни_ и _трубы_, используя уютное деревянное укрепление.", - "block.create.metal_bracket.tooltip": "METAL BRACKET", + "block.create.metal_bracket.tooltip": "МЕТАЛЛИЧЕСКАЯ СКОБА", "block.create.metal_bracket.tooltip.summary": "_Украсьте_ ваши _валы, шестерни_ и _трубы_, используя прочное индустриальное укрепление.", - "block.create.copper_casing.tooltip": "COPPER CASING", - "block.create.copper_casing.tooltip.summary": "Прочный машинный корпус для разнообразного использования. Безопасно для украшения.", - "block.create.copper_casing.tooltip.condition1": "При использовании на жидкостной трубе", - "block.create.copper_casing.tooltip.behaviour1": "Покрывает _жидкостную трубу_ _корпусом_. Трубы в корпусе _закрепят свои соединения_ и не будут соединятся с другими трубами, расположенными по соседству.", - - "block.create.encased_fluid_pipe.tooltip": "ENCASED FLUID PIPE", - "block.create.encased_fluid_pipe.tooltip.summary": "_Труба_ в _Медном корпусе_.", - - "block.create.seat.tooltip": "SEAT", + "block.create.seat.tooltip": "СИДЕНЬЕ", "block.create.seat.tooltip.summary": "Присядьте и насладитесь поездкой! Привязывает игроков к собранным _устройствам_. Отлично выглядит как простая мебель! Можно окрасить в разные цвета.", "block.create.seat.tooltip.condition1": "ПКМ по сиденью", - "block.create.seat.tooltip.behaviour1": "Сажает игрока на _Сиденье_. Нажмите _кнопку_ _приседания_ чтобы слезть.", + "block.create.seat.tooltip.behaviour1": "Сажает игрока на _Сиденье_. Нажмите _кнопку_ _приседания_ чтобы слезть (Shift по умолчанию).", - "item.create.blaze_cake.tooltip": "BLAZE CAKE", + "item.create.blaze_cake.tooltip": "ТОРТ ВСПОЛОХА", "item.create.blaze_cake.tooltip.summary": "Вкусное угощения для вашей трудяги _Горелки Всполоха_. Зажигает их всех!", - "block.create.fluid_pipe.tooltip": "FLUID PIPE", - "block.create.fluid_pipe.tooltip.summary": "Используется для транспортировки _жидкостей_. Требует _Механическую помпу_ для движения _жидкости_.", - "block.create.fluid_pipe.tooltip.condition1": "Транспортировка жидкости", - "block.create.fluid_pipe.tooltip.behaviour1": "Может соединяться с _жидкостными контейнерами_, такими как _бак_ или _чаша_. Открытые части _трубы_ могут собирать или размещать блоки жидкости в мире. Опасайтесь протечек!", - "block.create.fluid_pipe.tooltip.condition2": "ПКМ _Ключом_", - "block.create.fluid_pipe.tooltip.behaviour2": "Устанавливает окно на трубе если возможно", - - "block.create.hose_pulley.tooltip": "HOSE PULLEY", - "block.create.hose_pulley.tooltip.summary": "Используется для _размещения_ или _удаления_ больших _жидкостных резервуаров_ в мире.", - "block.create.hose_pulley.tooltip.condition1": "Когда управляется кинетически", - "block.create.hose_pulley.tooltip.behaviour1": "_Поднимает_ или _опускает_ шланг, расположение которого определяет максимальную высоту _сбора_ или _размещения_ жидкости.", - "block.create.hose_pulley.tooltip.condition2": "Когда жидкости вытягиваются из шланга", - "block.create.hose_pulley.tooltip.behaviour2": "Начинает _собирать_ блоки жидкости из резервуара, в который опущен шланг. Очень _большие резервуары_ жидкости будут считаться _бесконечными_.", - "block.create.hose_pulley.tooltip.condition3": "Когда жидкости закачиваются в шланг", - "block.create.hose_pulley.tooltip.behaviour3": "Начинает _заполнять_ жидкостью мир, до уровня расположения конца шланга.", - - "block.create.fluid_tank.tooltip": "FLUID TANK", - "block.create.fluid_tank.tooltip.summary": "_Хранит_ ваши любимые _жидкости_. Скалируется в высоту и ширину.", - "block.create.fluid_tank.tooltip.condition1": "Правый клик с гаечным ключом", - "block.create.fluid_tank.tooltip.behaviour1": "Переключает опциональное отображение окна", - - "block.create.creative_fluid_tank.tooltip": "CREATIVE FLUID TANK", - "block.create.creative_fluid_tank.tooltip.summary": "Этот _Жидкостный бак_ позволяет иметь бесконечную репликацию любой жидкости. Скалируется в высоту и ширину.", - "block.create.creative_fluid_tank.tooltip.condition1": "Когда жидкость в баке", - "block.create.creative_fluid_tank.tooltip.behaviour1": "Всё что _извлекает_ из бака, будет снабжаться _бесконечным запасом_ жидкости. Жидкости _закачивающиеся_ в бак будут _удаляться_.", - "block.create.creative_fluid_tank.tooltip.condition2": "Правый клик с гаечным ключом", - "block.create.creative_fluid_tank.tooltip.behaviour2": "Переключает опциональное отображение окна.", - - "block.create.fluid_valve.tooltip": "FLUID VALVE", - "block.create.fluid_valve.tooltip.summary": "Останавливает поток жидкости по трубе.", - "block.create.fluid_valve.tooltip.condition1": "Контролируемый поток", - "block.create.fluid_valve.tooltip.behaviour1": "Приложенная _Вращательная сила_ заставит _клапан_ закрыться, останавливая поток _жидкости_. Измените направление _вращательной силы_, чтобы снова открыть клапан.", - - "block.create.mechanical_pump.tooltip": "MECHANICAL PUMP", - "block.create.mechanical_pump.tooltip.summary": "Принимает _Вращательную силу_ и использует ее для перемещения _жидкости_ вдоль _труб_. Имеет максимальный диапазон действия в обоих направлениях. (По умолчанию 16 блоков)", - "block.create.mechanical_pump.tooltip.condition1": "Поток жидкости", - "block.create.mechanical_pump.tooltip.behaviour1": "Приложенная _вращательная сила_ создает давление, которое заставляет _жидкость_ проходить через сеть _труб_. Измените направление _вращательной силы_, чтобы изменить направление потока _жидкости_.", - "block.create.mechanical_pump.tooltip.control1": "Правый клик с гаечным ключом", - "block.create.mechanical_pump.tooltip.action1": "Изменяет направление _помпы_, меняя направление потока жидкости", - - "block.create.smart_fluid_pipe.tooltip": "SMART FLUID PIPE", - "block.create.smart_fluid_pipe.tooltip.summary": "_Жидкостная труба_ с фильтром. Можно настроить какие _жидкости_ могу пройти.", - "block.create.smart_fluid_pipe.tooltip.condition1": "При закачивании жидкостей внутрь", - "block.create.smart_fluid_pipe.tooltip.behaviour1": "Умные трубы заблокируют поток жидкости, если она не соответствует фильтру.", - "block.create.smart_fluid_pipe.tooltip.condition2": "Когда подключена к жидкостному контейнеру", - "block.create.smart_fluid_pipe.tooltip.behaviour2": "Умные трубы _будут_ создавать _поток_ только той жидкости, что _соответствует_ _фильтру_.", - - "block.create.spout.tooltip": "SPOUT", - "block.create.spout.tooltip.summary": "Форсунка для пополнения предметов, имеющих возможность хранить жидкость.", - "block.create.spout.tooltip.condition1": "Транспортировка жидкости", - "block.create.spout.tooltip.behaviour1": "Когда предмет, _с возможностью содержать жидкость_, такой как _ведро_ или _бутылочка_, размещён под дозатором, дозатор будет пытаться заполнить предмет содержащейся в нём _жидкостью_.", - "block.create.spout.tooltip.condition2": "Автоматизация жидкости", - "block.create.spout.tooltip.behaviour2": "Дозатор расположеный над _конвейером_ или _депо_ будет автоматически взаимодействовать с _предметами, которые могут содержать жидкость_, которые проходят под ним.", - - "block.create.item_drain.tooltip": "ITEM DRAIN", - "block.create.item_drain.tooltip.summary": "Депо с решёткой, которое может выкачивать _жидкость_ из ваших _предметов_", - "block.create.item_drain.tooltip.condition1": "Транспортировка жидкости", - "block.create.item_drain.tooltip.behaviour1": "Когда _предмет с жидкостью_, такой как _ведро_ или _бутылочка_ вставлены с боку, предметный осушитель будет автоматически извлекать жидкость, в свой собственный _бак_. Предмет будет выброшен с противоположной стороны.", - - "item.create.wand_of_symmetry.tooltip": "SYMMETRY WAND", + "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": "Остаётся активным", @@ -1272,16 +1292,7 @@ "item.create.wand_of_symmetry.tooltip.control3": "ПКМ крадучись", "item.create.wand_of_symmetry.tooltip.action3": "Открывает _интерфейс_ _конфигурации_", - "item.create.handheld_blockzapper.tooltip": "BLOCKZAPPER", - "item.create.handheld_blockzapper.tooltip.summary": "Новейшее устройство для размещения или замены блоков на расстоянии.", - "item.create.handheld_blockzapper.tooltip.control1": "ЛКМ на блок", - "item.create.handheld_blockzapper.tooltip.action1": "Устанавливает выбранный блок как материал.", - "item.create.handheld_blockzapper.tooltip.control2": "ПКМ на блок", - "item.create.handheld_blockzapper.tooltip.action2": "_Размещает_ или _Замещает_ блок.", - "item.create.handheld_blockzapper.tooltip.control3": "ПКМ крадучись", - "item.create.handheld_blockzapper.tooltip.action3": "Открывает _интерфейс_ _конфигурации_", - - "item.create.handheld_worldshaper.tooltip": "HANDHELD WORLDSHAPER", + "item.create.handheld_worldshaper.tooltip": "РУЧНОЙ РЕДАКТОР МИРА", "item.create.handheld_worldshaper.tooltip.summary": "Удобный инструмент для создания _ландшафтов_ и _рельефа_ _местности_.", "item.create.handheld_worldshaper.tooltip.control1": "ЛКМ на блок", "item.create.handheld_worldshaper.tooltip.action1": "Устанавливает блоки, помещенные инструментом, в целевой блок.", @@ -1290,44 +1301,50 @@ "item.create.handheld_worldshaper.tooltip.control3": "ПКМ крадучись", "item.create.handheld_worldshaper.tooltip.action3": "Открывает _интерфейс_ _конфигурации_", - "item.create.tree_fertilizer.tooltip": "TREE FERTILIZER", + "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.deforester.tooltip": "DEFORESTER", - "item.create.deforester.tooltip.summary": "_Уничтожитель_ _леса_, способен рубить деревья за доли секунды.", - - "item.create.extendo_grip.tooltip": "EXTENDO GRIP", + "item.create.extendo_grip.tooltip": "УДЛИНЕННАЯ РУКА", "item.create.extendo_grip.tooltip.summary": "Бойоиоинг! Значительно _увеличивает_ _досягаемость_ владельца.", "item.create.extendo_grip.tooltip.condition1": "Находясь в другой руке", - "item.create.extendo_grip.tooltip.behaviour1": "Увеличьте _расстояние_ _досягаемости_ предметов, используемых в _главной_ _руке_.", + "item.create.extendo_grip.tooltip.behaviour1": "Увеличивает _расстояние_ _досягаемости_ предметов, используемых в _главной_ _руке_.", + "item.create.extendo_grip.tooltip.condition2": "Когда надет Медный баллон", + "item.create.extendo_grip.tooltip.behaviour2": " _НЕ_ тратится _прочность_. Вместо этого будет тратиться _воздух_ из баллона.", - "item.create.filter.tooltip": "FILTER", + "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.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.attribute_filter.tooltip": "ATTRIBUTE FILTER", + "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.empty_schematic.tooltip": "EMPTY SCHEMATIC", + "item.create.empty_schematic.tooltip": "ПУСТАЯ СХЕМАТИКА", "item.create.empty_schematic.tooltip.summary": "Используется в качестве ингредиента рецепта и для записи в _Схематичный столе_", - "item.create.schematic.tooltip": "SCHEMATIC", + "item.create.schematic.tooltip": "СХЕМАТИКА", "item.create.schematic.tooltip.summary": "Содержит структуру, которая будет позиционироваться и помещаться в мир. Расположите голограмму по своему усмотрению и используйте _схематичную пушку_ для ее построения.", "item.create.schematic.tooltip.condition1": "При удерживании", "item.create.schematic.tooltip.behaviour1": "Может быть позиционирован с помощью инструментов на экране.", "item.create.schematic.tooltip.control1": "ПКМ крадучись", "item.create.schematic.tooltip.action1": "Открывает _интерфейс_ для ввода _точных_ _координат_.", - "item.create.schematic_and_quill.tooltip": "SCHEMATIC AND QUILL", + "item.create.schematic_and_quill.tooltip": "СХЕМАТИКА И ПЕРО", "item.create.schematic_and_quill.tooltip.summary": "Используется для сохранения структуры в вашем мире в файл .nbt.", "item.create.schematic_and_quill.tooltip.condition1": "Шаг 1", "item.create.schematic_and_quill.tooltip.behaviour1": "Выберите две угловые точки, используя ПКМ.", @@ -1340,17 +1357,17 @@ "item.create.schematic_and_quill.tooltip.control3": "ПКМ крадучись", "item.create.schematic_and_quill.tooltip.action3": "_Сбрасывает_ и _удаляет_ выделение.", - "block.create.schematicannon.tooltip": "SCHEMATICANNON", + "block.create.schematicannon.tooltip": "СХЕМАТИЧНАЯ ПУШКА", "block.create.schematicannon.tooltip.summary": "_Ставит блоки_ для воссоздания _схематики_ в мире. Использует предметы из _соседнего_ _инвентаря_ и _порох_ в качестве _топлива_.", "block.create.schematicannon.tooltip.condition1": "ПКМ", "block.create.schematicannon.tooltip.behaviour1": "Открывает _Интерфейс_", - "block.create.schematic_table.tooltip": "SCHEMATIC TABLE", + "block.create.schematic_table.tooltip": "СХЕМАТИЧНЫЙ СТОЛ", "block.create.schematic_table.tooltip.summary": "Записывает сохраненные схематики в _пустые_ _схематики_.", "block.create.schematic_table.tooltip.condition1": "Когда дана пустая схема", "block.create.schematic_table.tooltip.behaviour1": "Загружает выбранный файл из вашей папки Schematics.", - "item.create.goggles.tooltip": "GOGGLES", + "item.create.goggles.tooltip": "ИНЖЕНЕРНЫЕ ОЧКИ", "item.create.goggles.tooltip.summary": "Очки для улучшения зрения с помощью полезной кинетической информации.", "item.create.goggles.tooltip.condition1": "При ношении", "item.create.goggles.tooltip.behaviour1": "Показывает _цветные_ _индикаторы_, соответствующие _уровню_ _скорости_ размещённого кинетического компонента, а также _создаваемой нагрузке_ и _мощности_ отдельных компонентов.", @@ -1359,91 +1376,119 @@ "item.create.goggles.tooltip.condition3": "При взгляде на жидкостные контейнеры", "item.create.goggles.tooltip.behaviour3": "Показывает детализированную информацию о _Ёмкости_ блока и о хранящейся в нём хранится _Жидкости_.", - "item.create.wrench.tooltip": "WRENCH", + "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": "Разбирает кинетические компоненты и помещает их обратно в ваш инвентарь.", - "block.create.nozzle.tooltip": "NOZZLE", + "block.create.nozzle.tooltip": "ФОРСУНКА", "block.create.nozzle.tooltip.summary": "Прикрепите к передней части _вентилятора_, чтобы распределить его влияние на сущностей _во_ _всех_ _направлениях_.", - "block.create.cuckoo_clock.tooltip": "CUCKOO CLOCK", + "block.create.cuckoo_clock.tooltip": "ЧАСЫ С КУКУШКОЙ", "block.create.cuckoo_clock.tooltip.summary": "_Прекрасное_ _мастерство_ для _украшения_ пространства и _отслеживания_ _времени_.", "block.create.cuckoo_clock.tooltip.condition1": "При вращении", "block.create.cuckoo_clock.tooltip.behaviour1": "Показывает текущее время и напевает мелодию два раза в день. _Активируется_ _один_ _раз_ в _полдень_ и в _сумерках_, как только _игроки_ _могут_ _спать_.", - "block.create.turntable.tooltip": "TURNTABLE", + "block.create.turntable.tooltip": "ПОВОРОТНЫЙ СТОЛ", "block.create.turntable.tooltip.summary": "Преобразует _силу_ _вращения_ прямиком в морскую болезнь.", - "block.create.portable_fluid_interface.tooltip": "PORTABLE FLUID INTERFACE", - "block.create.portable_fluid_interface.tooltip.summary": "Переносная точка обмена для _перемещения жидкостей_ из или в конструкцию, перемещаемую _поршнем_, _подшипником_, _вагонеткой_ или _лебёдкой_. Два смежных интерфейса должны располагаться _лицом друг_ _к другу_, на расстоянии _1-2 блока друг от друга_.", - "block.create.portable_fluid_interface.tooltip.condition1": "При движении", - "block.create.portable_fluid_interface.tooltip.behaviour1": "Взаимодействует со стационарными _переносными интерфейсами хранения_ для передачи жидкостей в устройство или из него. Трубы, вставленые в _Стационарный интерфейс_, будут напрямую взаимодействовать с резервуарами на устройстве. Конструкция на короткое время остановится для обмена жидкостями.", - "block.create.portable_fluid_interface.tooltip.condition2": "При получении сигнала редстоуна", - "block.create.portable_fluid_interface.tooltip.behaviour2": "Немедленно _разрывает_ текущие соединения.", - - "block.create.stockpile_switch.tooltip": "stockpile_switch", - "block.create.stockpile_switch.tooltip.summary": "Подаёт сигнал красного камня в зависимости от _заполниности_ _прикреплённого_ _ящика_.", + "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": "CONTENT OBSERVER", + "block.create.content_observer.tooltip": "НАБЛЮДАТЕЛЬ ЗА СОДЕРЖИМЫМ", "block.create.content_observer.tooltip.summary": "_Обнаруживает элементы_ внутри _контейнеров_ и _конвейеров_, соответствующие настроенному _фильтру_. Если наблюдаемый инвентарь, ремень или шланг содержит совпадающий элемент, этот компонент излучает сигнал красного камня. Когда наблюдаемая _ воронка передает_ соответствующий предмет, этот компонент испускает _импульс_.", - "block.create.adjustable_crate.tooltip": "ADJUSTABLE CRATE", - "block.create.adjustable_crate.tooltip.summary": "Этот контейнер для хранения позволяет вручную контролировать его емкость. Он может вместить до 16 стэков любого предмета. Поддерживает компараторы.", + "block.create.adjustable_crate.tooltip": "РЕГУЛИРУЕМЫЙ ЯЩИК", + "block.create.adjustable_crate.tooltip.summary": "Этот контейнер для хранения позволяет вручную контролировать его емкость. Он может вместить до 16 стаков любого предмета. Поддерживает компараторы.", "block.create.adjustable_crate.tooltip.condition1": "ПКМ", "block.create.adjustable_crate.tooltip.behaviour1": "Открывает _Интерфейс_.", - "block.create.creative_crate.tooltip": "THE ENDLESS CRATE", + "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.controller_rail.tooltip": "CONTROLLER RAIL", + "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.behaviour1": "_Ускоряет_ или _замедляет_ _прошедшие вагонетки_, на величину зависящую от _силы сигнала_. Распространяя сигнал красного камня на соседние контролирующие рельсы. Питание двух контролирующих рельс с разной мощностью приведет к тому, что дорожки между ними будут интерполировать свой сигнал.", - "item.create.sand_paper.tooltip": "SAND PAPER", + "item.create.sand_paper.tooltip": "НАЖДАЧНАЯ БУМАГА", "item.create.sand_paper.tooltip.summary": "Грубая бумага, которую можно использовать для _полировки материалов_. Может применяться автоматически с помощью автономного активатора.", "item.create.sand_paper.tooltip.condition1": "Когда используется", "item.create.sand_paper.tooltip.behaviour1": "Полирует предметы во _второй руке_, или лежащие _на полу_, если _смотреть на них_", - "item.create.builders_tea.tooltip": "BUILDERS TEA", + "item.create.builders_tea.tooltip": "ЧАЙ СТРОИТЕЛЯ", "item.create.builders_tea.tooltip.summary": "Идеальный напиток для начала дня. _Мотивирует и насыщает_.", - "item.create.refined_radiance.tooltip": "REFINED RADIANCE", + "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.shadow_steel.tooltip": "SHADOW STEEL", + "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.minecart_coupling.tooltip": "MINECART COUPLING", + "item.create.linked_controller.tooltip": "ПОДКЛЮЧАЕМЫЙ КОНТРОЛЛЕР", + "item.create.linked_controller.tooltip.summary": "Предоставляет _ручной_ _контроль_ над частотами _Беспроводного передатчика редстоун сигнала_, присвоенные его _шести_ кнопкам.", + "item.create.linked_controller.tooltip.condition1": "ПКМ", + "item.create.linked_controller.tooltip.behaviour1": "Включает контроллер. _Управление_ _движением_ перехвачено, пока он активен.", + "item.create.linked_controller.tooltip.condition2": "ПКМ крадучись", + "item.create.linked_controller.tooltip.behaviour2": "Открывает _интерфейс_ _конфигурации_.", + "item.create.linked_controller.tooltip.condition3": "ПКМ по приемнику сигнала редстоуна", + "item.create.linked_controller.tooltip.behaviour3": "Включает _режим привязки_, нажмите одну из _шести кнопок_, чтобы привязать его к _частоте передатчика_.", + "item.create.linked_controller.tooltip.condition4": "ПКМ по кафедре", + "item.create.linked_controller.tooltip.behaviour4": "Помещает контроллер на кафедру для удобства использования. (ПКМ крадучись, чтобы забрать его)", + + "item.create.diving_helmet.tooltip": "ШЛЕМ ДЛЯ ДАЙВИНГА", + "item.create.diving_helmet.tooltip.summary": "Вместе с _медным_ _баллоном_, позволяет владельцу _дышать _ _под водой_ в течение длительного времени.", + "item.create.diving_helmet.tooltip.condition1": "При ношении", + "item.create.diving_helmet.tooltip.behaviour1": "Даёт эффект _Водного Дыхания_, медленно тратя _воздух_ из баллона.", + + "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.diving_boots.tooltip": "БОТИНКИ ДЛЯ ДАЙВИНГА", + "item.create.diving_boots.tooltip.summary": "Пара _тяжелых_ _ботинок_, позволяющая лучше передвигаться по океанскому дну.", + "item.create.diving_boots.tooltip.condition1": "При ношении", + "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": "_Применяет_ _заданный_ _рецепт_ с подходящими ингредиентами, из вашего _инвентаря_. _Shift_, чтобы создать целого до _стака_ предметов..", + + "item.create.minecart_coupling.tooltip": "СОЕДЕНИТЕЛЬ ВАГОНЕТОК", "item.create.minecart_coupling.tooltip.summary": "_Соединяет_ ваши _вагонетки_ или _Перевозочные устройства_ вместе, чтобы создать великолепный поезд.", "item.create.minecart_coupling.tooltip.condition1": "При использовании на вагонетке", "item.create.minecart_coupling.tooltip.behaviour1": "_Соединяет_ две вагонетки вместе, пытаясь держать их на _определенной дистанции_ при движении.", - "create.tooltip.wip": "WIP", - "create.tooltip.workInProgress": "Работа продолжается!", - "create.tooltip.randomWipDescription0": "Пожалуйста держите этот предмет подальше от детей!", - "create.tooltip.randomWipDescription1": "Маленькая панда умирает каждый раз, когда вы используете этот предмет. Каждый. Раз.", - "create.tooltip.randomWipDescription2": "Используйте на свой страх и риск.", - "create.tooltip.randomWipDescription3": "Это не тот предмет, который вы ищете, *шевелит пальцами* пожалуйста, ускорьтесь.", - "create.tooltip.randomWipDescription4": "Этот предмет самоуничтожится через 10 секунд. 10, 9, 8...", - "create.tooltip.randomWipDescription5": "Поверьте мне, это бесполезно.", - "create.tooltip.randomWipDescription6": "Используя этот пункт, вы тем самым соглашаетесь с нашим отказом от ответственности и соглашаетесь с его условиями.", - "create.tooltip.randomWipDescription7": "Этот, возможно, но не для тебя. Как насчет этого?", - "create.tooltip.randomWipDescription8": "Используя его, вы немедленно пожалеете о своем решении.", + "block.create.peculiar_bell.tooltip": "СТРАННЫЙ КОЛОКОЛ", + "block.create.peculiar_bell.tooltip.summary": "Декоративный _латунный колокол_. Установка его прямо над горящем _Огнем душ_ может вызвать побочные эффекты...с", + + "block.create.haunted_bell.tooltip": "ПРИЗРАЧНЫЙ КОЛОКОЛ", + "block.create.haunted_bell.tooltip.summary": "_Проклятый колокол_ населенный потерянными душами Нижнего мира.", + "block.create.haunted_bell.tooltip.condition1": "При ношении или при звоне", + "block.create.haunted_bell.tooltip.behaviour1": "Подсвечивает ближайшие _места без света_ на которых могут появляться _враждебные мобы_..", "_": "->------------------------] Ponder Content [------------------------<-", - "create.ponder.hold_to_ponder": "Удерживайте [%1$s] для Размышления", + "create.ponder.hold_to_ponder": "Удерживайте [%1$s] для размышления", "create.ponder.subject": "Субъект этой сцены", - "create.ponder.pondering": "Размышляем о...", + "create.ponder.pondering": "Размышляем о/об...", "create.ponder.identify_mode": "Режим Идентификации включён.\nУбрать паузу: [%1$s]", "create.ponder.associated": "Связанные статьи", "create.ponder.close": "Закрыть", @@ -1453,41 +1498,46 @@ "create.ponder.replay": "Воспроизвести снова", "create.ponder.think_back": "Подумать о предыдущем", "create.ponder.slow_text": "Удобное чтение", - "create.ponder.shared.movement_anchors": "С помощью Суперклея или Шасси, более крупные структуры могут быть сдивинуты.", + "create.ponder.exit": "Выйти", + "create.ponder.welcome": "Добро пожаловать в размышления", + "create.ponder.categories": "Категории, доступные в Create", + "create.ponder.index_description": "Кликните по одной из иконок, чтобы узнать о связанных с ней предметах и блоках.", + "create.ponder.index_title": "Содержание размышлений", + "create.ponder.shared.movement_anchors": "С помощью суперклея или шасси, более крупные структуры могут быть сдвинуты.", "create.ponder.shared.rpm32": "32 об./мин.", "create.ponder.shared.sneak_and": "Красться +", - "create.ponder.shared.storage_on_contraption": "Присоединённые к Штуковине инвентари будут подбирать вещи автоматически", + "create.ponder.shared.storage_on_contraption": "Присоединённые к штуковине инвентари будут подбирать вещи автоматически", "create.ponder.shared.behaviour_modify_wrench": "Это поведение может быть изменено Ключом", "create.ponder.shared.rpm8": "8 об./мин.", "create.ponder.shared.ctrl_and": "Ctrl +", "create.ponder.shared.rpm16_source": "Источник: 16 об./мин.", "create.ponder.shared.rpm16": "16 об./мин.", "create.ponder.tag.kinetic_sources": "Кинетические источники", - "create.ponder.tag.kinetic_sources.description": "Компоненты, генерирующие Силу Вращения", - "create.ponder.tag.contraption_actor": "Компоненты Штуковин", + "create.ponder.tag.kinetic_sources.description": "Компоненты, генерирующие силу вращения", + "create.ponder.tag.contraption_actor": "Компоненты штуковин", "create.ponder.tag.contraption_actor.description": "Компоненты, проявляющие особое поведение когда прикреплены к двигающейся штуковине", - "create.ponder.tag.arm_targets": "Цели для Механической Руки", - "create.ponder.tag.arm_targets.description": "Компоненты, которые могут быть выбраны входами или выходами для Механической Руки", - "create.ponder.tag.logistics": "Транспортировка Предметов", + "create.ponder.tag.arm_targets": "Цели для Механической руки", + "create.ponder.tag.arm_targets.description": "Компоненты, которые могут быть выбраны входами или выходами для Механической руки", + "create.ponder.tag.logistics": "Транспортировка предметов", "create.ponder.tag.logistics.description": "Компоненты, помогающие перемещать предметы", - "create.ponder.tag.movement_anchor": "Опоры Движения", + "create.ponder.tag.movement_anchor": "Опоры движения", "create.ponder.tag.movement_anchor.description": "Компоненты, позволяющие создавать двигающиеся штуковины, оживляя прикрепленную структуру разными способами", "create.ponder.tag.creative": "Творческий режим", - "create.ponder.tag.creative.description": "Компоненты обычычно недоступные в Режиме Выживания", + "create.ponder.tag.creative.description": "Компоненты обычно недоступные в Режиме Выживания", "create.ponder.tag.kinetic_relays": "Кинетические блоки", - "create.ponder.tag.kinetic_relays.description": "Компоненты, помогающие передавать Силу Вращения куда-нибудь", - "create.ponder.tag.windmill_sails": "Паруса для Мельничных Подшипников", - "create.ponder.tag.windmill_sails.description": "Блоки, число которых увеличивает силу Мельницы. Каждый из этих блоков имеет одинаковую эффективность в деле.", + "create.ponder.tag.kinetic_relays.description": "Компоненты, помогающие передавать силу вращения куда-нибудь", + "create.ponder.tag.windmill_sails": "Паруса для Подшипников ветряной мельницы", + "create.ponder.tag.windmill_sails.description": "Блоки, число которых увеличивает силу Ветряной мельницы. Каждый из этих блоков имеет одинаковую эффективность в деле.", "create.ponder.tag.contraption_assembly": "Приспособления для присоединения блоков", "create.ponder.tag.contraption_assembly.description": "Инструменты и Компоненты используемые для сборки структур передвигаемых как движущиеся Штуковины", "create.ponder.tag.decoration": "Эстетика", "create.ponder.tag.decoration.description": "Компоненты, чаще всего используемые для декоративных целей", - "create.ponder.tag.kinetic_appliances": "Кинетические Приборы", - "create.ponder.tag.kinetic_appliances.description": "Компоненты, использующие Силу Вращения", - "create.ponder.tag.redstone": "Логические Компоненты", - "create.ponder.tag.redstone.description": "Компоненты, помогающие с конструироваением Редстоун Схем", - "create.ponder.tag.fluids": "Жидкостные Манипуляторы", - "create.ponder.tag.fluids.description": "Компоненты, помогающие перемещать и использовать Жидкости", + "create.ponder.tag.kinetic_appliances": "Кинетические приборы", + "create.ponder.tag.kinetic_appliances.description": "Компоненты, использующие силу вращения", + "create.ponder.tag.redstone": "Логические компоненты", + "create.ponder.tag.redstone.description": "Компоненты, помогающие с конструированием редстоун схем", + "create.ponder.tag.fluids": "Жидкостные манипуляторы", + "create.ponder.tag.fluids.description": "Компоненты, помогающие перемещать и использовать жидкости", "create.ponder.adjustable_pulse_repeater.header": "Управлении сигналами с помощью Регулируемого импульсного повторителя", "create.ponder.adjustable_pulse_repeater.text_1": "Регулируемые импульсные повторители испускают короткий импульс с задержкой", @@ -1501,45 +1551,45 @@ "create.ponder.adjustable_repeater.text_4": "Используя колесо мыши, время зарядки может быть настроено", "create.ponder.adjustable_repeater.text_5": "Настраиваемая задержка может достигать 30 минут", - "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.header": "Использовании Андезитовых туннелей", + "create.ponder.andesite_tunnel.text_1": "Андезитовые туннели могут быть использованы, чтобы накрывать Конвейеры", + "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_1": "Чаша может хранить предметы и жидкости для обработки", "create.ponder.basin.text_2": "После обработки, чаши пытаются вывести результат под любой из их сторон", "create.ponder.basin.text_3": "Когда предоставлен подходящий компонент, у Чаши появится выходящий кран", "create.ponder.basin.text_4": "Несколько вариантов применимы здесь", "create.ponder.basin.text_5": "Вывод чаши будет пойман инвентарём ниже", "create.ponder.basin.text_6": "Без выходящего крана, Чаша будет оставлять предметы, полученные в результате обработки", "create.ponder.basin.text_7": "Это может быть полезно, если продукт должен быть использован повторно как ингредиент", - "create.ponder.basin.text_8": "Желаемые продукты дожлны быть в таком случае извлечены из чаши", + "create.ponder.basin.text_8": "Желаемые продукты должны быть в таком случае извлечены из чаши", "create.ponder.basin.text_9": "Фильтр может быть необходим для избежания извлечения необработанных предметов", - "create.ponder.bearing_modes.header": "Режимах Движения Механического Подшипника", - "create.ponder.bearing_modes.text_1": "Когда остановлен, Подшипник установит структуру на ближайшем выровненным по сетке блоков углу", + "create.ponder.bearing_modes.header": "Режимах движения Механического подшипника", + "create.ponder.bearing_modes.text_1": "Когда остановлен, подшипник установит структуру на ближайшем выровненным по сетке блоков углу", "create.ponder.bearing_modes.text_2": "Он может быть настроен никогда не возвращать структуру в твёрдое состояние, или только возле начального угла", - "create.ponder.belt_casing.header": "Обрамлении Ремней", - "create.ponder.belt_casing.text_1": "Латунный или Андезитовый Корпус может быть использован для декорации Механических ремней", + "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.header": "Использовании Механических ремней", + "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_3": "Дополнительные валы могут быть добавлены по всей длине конвейера", + "create.ponder.belt_connector.text_4": "Валы, соединённые через ремни, будут вращаться с той же скоростью и направлением", "create.ponder.belt_connector.text_5": "Добавленные Валы могут быть убраны Ключом", - "create.ponder.belt_connector.text_6": "Механические Ремни могут быть окрашены в эстетических целях", + "create.ponder.belt_connector.text_6": "Механические ремни могут быть окрашены в эстетических целях", - "create.ponder.belt_directions.header": "Возможных Расположениях Механических Ремней", + "create.ponder.belt_directions.header": "Возможных расположениях Механических ремней", "create.ponder.belt_directions.text_1": "Ремни не могут соединяться в произвольных направлениях", "create.ponder.belt_directions.text_2": "1. Они могут соединяться горизонтально", "create.ponder.belt_directions.text_3": "2. Они могут соединяться по диагонали", @@ -1547,196 +1597,244 @@ "create.ponder.belt_directions.text_5": "4. И они могут соединять вертикальные валы горизонтально", "create.ponder.belt_directions.text_6": "Это все возможные направления. Ремни могут достигать Длины от 2 до 20 блоков", - "create.ponder.belt_transport.header": "Использовании Механических Ремней для Логистики", + "create.ponder.belt_transport.header": "Использовании Механических ремней для логистики", "create.ponder.belt_transport.text_1": "Двигающиеся ремни будут перемещать Предметы и другие Сущности", "create.ponder.belt_transport.text_2": "ПКМ пустой рукой, чтобы забрать предметы с ремня", - "create.ponder.blaze_burner.header": "Кормлении Горелок Всполохов", - "create.ponder.blaze_burner.text_1": "Горелки Всполохов предоставляют Тепло Предметам, обрабатывающимся в Чаше", + "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_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_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.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_6": "Латунные Туннели на параллельных конвейерах формируют группы", + "create.ponder.brass_tunnel.text_6": "Латунные туннели на параллельных конвейерах формируют группы", "create.ponder.brass_tunnel.text_7": "Входящие предметы будут распределены между всеми соединёнными выходами", - "create.ponder.brass_tunnel.text_8": "Для этого предметы также могут быть вложены в блок Туннеля напрямую", + "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.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_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_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_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.header": "Движении структур при помощи Сборщика вагонеток", + "create.ponder.cart_assembler.text_1": "Активированные Сборщики вагонеток устанавливают прикреплённые структуры к проходящим мимо вагонеткам", "create.ponder.cart_assembler.text_2": "Без редстоун сигнала они разбирают вагонеточные штуковины обратно в блоки", - "create.ponder.cart_assembler.text_3": "Использование Ключа на Вагонетке позволит вам унести Штуковину куда-то ещё", + "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.header": "Настройках ориентации Вагонеточных штуковин", + "create.ponder.cart_assembler_modes.text_1": "Вагонеточные штуковины будут поворачиваться в сторону движения их вагонеток", + "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.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.chain_drive.header": "Передаче силы вращения Цепными Приводами", - "create.ponder.chain_drive.text_1": "Цепные Приводы передают силу вращения друг другу", + "create.ponder.chain_drive.header": "Передаче силы вращения Цепными приводами", + "create.ponder.chain_drive.text_1": "Цепные приводы передают силу вращения друг другу", "create.ponder.chain_drive.text_2": "Все валы соединённые таким образом будут вращаться в одном направлении", "create.ponder.chain_drive.text_3": "Любая часть в ряду может быть повёрнута на 90 градусов", - "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_4": "В обоих случаях Цепные Приводы в ряду всегда вращаются с 2x скорость Активного Цепного Механизма", - "create.ponder.chain_gearshift.text_5": "Используя аналоговые сигналы, это отношение может быть настроено более точно между 1 и 2", + "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_4": "В обоих случаях Цепные приводы в ряду всегда вращаются с 2x скоростью активированного Цепного механизма", + "create.ponder.chain_gearshift.text_5": "Используя аналоговые сигналы, это умножение может быть настроено более точно между 1 и 2", "create.ponder.chain_gearshift.text_6": "12 об./мин.", "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_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_1": "Используя Вентилятор в корпусе внизу или наверху, Желоб может перемещать предметы вверх", + "create.ponder.chute_upward.text_2": "Осмотр желобов в Инженерных очках открывает информацию о направлении движения", + "create.ponder.chute_upward.text_3": "На «заблокированном» конце предметы должны быть введены/выведены сбоку", - "create.ponder.clockwork_bearing.header": "Оживлении структур Часовым Механизмом", - "create.ponder.clockwork_bearing.text_1": "Часовые Механизмы прикрепляются к блокам спереди", - "create.ponder.clockwork_bearing.text_2": "При получении Силы Вращения структура повернётся в зависимости от текущего часа", + "create.ponder.clockwork_bearing.header": "Оживлении структур Часовым механизмом", + "create.ponder.clockwork_bearing.text_1": "Часовые механизмы прикрепляются к блокам спереди", + "create.ponder.clockwork_bearing.text_2": "При получении силы вращения структура повернётся в зависимости от текущего часа", "create.ponder.clockwork_bearing.text_3": "3:00", "create.ponder.clockwork_bearing.text_4": "4:00", - "create.ponder.clockwork_bearing.text_5": "ПКМ по механизму чтобы остановить или вновь оживить структуру", - "create.ponder.clockwork_bearing.text_6": "Спереди Часовой стрелки вторая структура может быть добавлена", - "create.ponder.clockwork_bearing.text_7": "Убедитесь, что две Структуры не соединены между собой супер-клеем или чем-то схожим", - "create.ponder.clockwork_bearing.text_8": "Вторая Структура станет вращаться как Минутная Стрелка", + "create.ponder.clockwork_bearing.text_5": "ПКМ по механизму, чтобы остановить или вновь запустить структуру", + "create.ponder.clockwork_bearing.text_6": "Вторая структура может быть добавлена спереди Часовой стрелки", + "create.ponder.clockwork_bearing.text_7": "Убедитесь, что две структуры не соединены между собой супер-клеем или чем-то схожим", + "create.ponder.clockwork_bearing.text_8": "Вторая структура станет вращаться как Минутная стрелка", - "create.ponder.clutch.header": "Управлении силой вращения использованием Сцепления", + "create.ponder.clutch.header": "Управлении силой вращения с помощью Сцепления", "create.ponder.clutch.text_1": "Сцепление передаёт вращение по прямой", "create.ponder.clutch.text_2": "При активации Редстоуном оно разрывает соединение", - "create.ponder.cog_speedup.header": "Переключении Передач Шестернями", + "create.ponder.cog_speedup.header": "Переключении передач Шестернями", "create.ponder.cog_speedup.text_1": "Большие и Маленькие шестерни могут соединяться по диагонали", - "create.ponder.cog_speedup.text_2": "Переходя с больших на маленькие шестерни, переданная скорось удвоится", + "create.ponder.cog_speedup.text_2": "Переходя с больших на маленькие шестерни, переданная скорость удвоится", "create.ponder.cog_speedup.text_3": "Переходя в обратном направлении, переданная скорость сократится вдвое", "create.ponder.cogwheel.header": "Передаче силы вращения Шестернями", "create.ponder.cogwheel.text_1": "Шестерни передают вращение другим соседним шестерням", - "create.ponder.cogwheel.text_2": "Соседние валы соединённые таким оразом будут вращаться в противоположных направлениях", + "create.ponder.cogwheel.text_2": "Соседние валы соединённые таким образом будут вращаться в противоположных направлениях", - "create.ponder.creative_motor.header": "Генерации Силы Вращения Творческими Моторами", + "create.ponder.creative_fluid_tank.header": "Творческом жидкостном баке", + "create.ponder.creative_fluid_tank.text_1": "Творческий жидкостный бак может использоваться для обеспечения бесконечного запаса жидкости", + "create.ponder.creative_fluid_tank.text_2": "Щелкните ПКМ предметом, содержащим жидкость, чтобы настроить его", + "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.crushing_wheels.header": "Обработке предметов Колёсами Дробления", - "create.ponder.crushing_wheels.text_1": "Пара Колёс Дробления может молоть предметы очень эффективно", - "create.ponder.crushing_wheels.text_2": "Сила Вращения должна вращать их друг в друга", + "create.ponder.crushing_wheels.header": "Обработке предметов Колёсами дробления", + "create.ponder.crushing_wheels.text_1": "Пара Колёс дробления может молоть предметы очень эффективно", + "create.ponder.crushing_wheels.text_2": "Сила вращения должна вращать их друг в друга", "create.ponder.crushing_wheels.text_3": "Предметы брошенные или введённые в них сверху будут обработаны", - "create.ponder.crushing_wheels.text_4": "Предметы также могут быть введены и подобраны автомтическим способом", + "create.ponder.crushing_wheels.text_4": "Предметы также могут быть введены и подобраны автоматическим способом", - "create.ponder.deployer.header": "Использовании Автономного Активатора", - "create.ponder.deployer.text_1": "При наличии Силы Вращения Автономный Активатор может имитировать взаимодействия игрока", - "create.ponder.deployer.text_10": "ПКМ спереди чтобы дать ему предмет для использования", + "create.ponder.deployer.header": "Использовании автономного активатора", + "create.ponder.deployer.text_1": "При наличии силы вращения автономный активатор может имитировать действия игрока", + "create.ponder.deployer.text_10": "ПКМ спереди, чтобы дать ему предмет для использования", "create.ponder.deployer.text_11": "Предметы также могут быть введены автоматически", - "create.ponder.deployer.text_12": "Автономные Активаторы имеют слот для фильтра", + "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_2": "Он всегда будет взаимодействовать с местом на два блока перед ним", "create.ponder.deployer.text_3": "Блоки прямо перед ним не будут мешать ему", - "create.ponder.deployer.text_4": "Автономные Активаторы Умеют:", - "create.ponder.deployer.text_5": "Ставить Блоки,", - "create.ponder.deployer.text_6": "Использовать Предметы,", - "create.ponder.deployer.text_7": "Активировать Блоки,", - "create.ponder.deployer.text_8": "Собирать Блоки", - "create.ponder.deployer.text_9": "и Атаковать Мобов", + "create.ponder.deployer.text_4": "Автономные активаторы умеют:", + "create.ponder.deployer.text_5": "Ставить блоки,", + "create.ponder.deployer.text_6": "Использовать предметы,", + "create.ponder.deployer.text_7": "Активировать блоки,", + "create.ponder.deployer.text_8": "Собирать блоки", + "create.ponder.deployer.text_9": "и Атаковать мобов", - "create.ponder.deployer_contraption.header": "Использовании Автономных Активаторов на Штуковинах", - "create.ponder.deployer_contraption.text_1": "Всегда, когда Автономные Активаторы дивижутся как часть оживлённой Штуковины...", - "create.ponder.deployer_contraption.text_2": "Они активируются на каждом посещённом месте, используя предметы из любых инвентарей на Штуковине", - "create.ponder.deployer_contraption.text_3": "Слот для Фильтра может быть использован, чтобы уточнить, какие предеметы им брать", + "create.ponder.deployer_contraption.header": "Использовании автономных активаторов на штуковинах", + "create.ponder.deployer_contraption.text_1": "Всегда, когда автономные активаторы движутся как часть движимой штуковины...", + "create.ponder.deployer_contraption.text_2": "Они активируются на каждом посещённом месте, используя предметы из любых инвентарей на штуковине", + "create.ponder.deployer_contraption.text_3": "Слот для Фильтра может быть использован, чтобы уточнить, какие предметы ему брать", - "create.ponder.deployer_modes.header": "Режимах Автономного Активатора", - "create.ponder.deployer_modes.text_1": "По умолчанию, Ативатор имитирует ПКМ-взаимодейстие", + "create.ponder.deployer_modes.header": "Режимах автономного активатора", + "create.ponder.deployer_modes.text_1": "По умолчанию, активатор имитирует ПКМ-взаимодейстие", "create.ponder.deployer_modes.text_2": "Используя Ключ, вы можете установить его на имитацию ЛКМ", - "create.ponder.deployer_redstone.header": "Управлении Автономными Активаторами Редстоуном", - "create.ponder.deployer_redstone.text_1": "При активации Редстоуном Активатор перестанет работать", + "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_redstone.header": "Управлении автономными активаторами редстоуном", + "create.ponder.deployer_redstone.text_1": "При активации Редстоуном активатор перестанет работать", "create.ponder.deployer_redstone.text_2": "Перед остановкой, Активатор завершит все начатые действия", "create.ponder.deployer_redstone.text_3": "Таким образом, инвертированный импульс может быть использован для вызова ровно одного срабатывания", "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_1": "Депо могут служить как «стационарный» элемент конвейера", + "create.ponder.depot.text_2": "ПКМ, что бы самостоятельно положить или забрать предметы с них", + "create.ponder.depot.text_3": "Так же, как Механические ремни, оно может предоставлять предметы для обработки", + "create.ponder.depot.text_4": "...а также поставлять предметы Механическим рукам", - "create.ponder.empty_blaze_burner.header": "Использовании Пустых Горелок Всполохов", + "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_4": "В эстетических целях, Пустые горелки могут быть зажжены огнивом", + "create.ponder.empty_blaze_burner.text_5": "Пламя можно трансформировать, используя наполненный душой предмет.", "create.ponder.empty_blaze_burner.text_6": "Однако они не будут подходить для промышленного нагрева", - "create.ponder.fan_direction.header": "Воздушном потоке Вентиляторов в Корпусе", - "create.ponder.fan_direction.text_1": "Вентиляторы в Корпусе используют Силу Вращения для создания Воздушного Потока", - "create.ponder.fan_direction.text_2": "Однако они не будут подходить для промышленного нагрева", + "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_3": "Они больше не будут реагировать на добавление или удаление каких-либо соседних блоков", - "create.ponder.fan_processing.header": "Обработке предметов используя Вентиляторы в Корпусе", - "create.ponder.fan_processing.text_1": "Проходя через лаву, Воздушный Поток становится Горячим", + "create.ponder.fan_direction.header": "Воздушном потоке Вентиляторов в корпусе", + "create.ponder.fan_direction.text_1": "Вентиляторы в корпусе используют силу вращения для создания Воздушного потока", + "create.ponder.fan_direction.text_2": "Сила и направление потока зависят от подаваемого вращения", + + "create.ponder.fan_processing.header": "Обработке предметов используя Вентиляторы в корпусе", + "create.ponder.fan_processing.text_1": "Проходя через лаву, Воздушный поток становится Горячим", "create.ponder.fan_processing.text_2": "Предметы в этой области будут переплавлены", - "create.ponder.fan_processing.text_3": "Съедобные Предметы брошенные сюда будут сожжены", - "create.ponder.fan_processing.text_4": "Вместо этого, для них должна быть использована установка для Копчения с Огнём", - "create.ponder.fan_processing.text_5": "Поток, проходящий через Воду, создаёт Промывающую Установку", + "create.ponder.fan_processing.text_3": "Съедобные предметы брошенные сюда будут сожжены", + "create.ponder.fan_processing.text_4": "Вместо этого, для них должна быть использована установка для Копчения с огнём", + "create.ponder.fan_processing.text_5": "Поток, проходящий через Воду, создаёт Промывающую установку", "create.ponder.fan_processing.text_6": "Несколько новых вариантов обработки делаются с её помощью", - "create.ponder.fan_processing.text_7": "Скорость Вентилятора НЕ влияет на скорость обработки, а только на дальность", - "create.ponder.fan_processing.text_8": "Обработка Вентиляторов может быть применена к Предметам на Конвейерах или Депо", + "create.ponder.fan_processing.text_7": "Скорость вентилятора НЕ влияет на скорость обработки, а только на дальность", + "create.ponder.fan_processing.text_8": "Обработка Вентиляторами может быть применена к предметам на конвейерах или депо", - "create.ponder.fan_source.header": "Генерации Силы Вращения Вентиляторами в Корпусе", - "create.ponder.fan_source.text_1": "Вентиляторы направленные вниз на источник тепла могут создавать Силу Вращения", - "create.ponder.fan_source.text_2": "При Редстоун Сигнале Вентилятор начнёт отдавать энергию", + "create.ponder.fan_source.header": "Генерации силы вращения Вентиляторами в корпусе", + "create.ponder.fan_source.text_1": "Вентиляторы направленные вниз на источник тепла могут создавать силу вращения", + "create.ponder.fan_source.text_2": "При сигнале редстоуна Вентилятор начнёт отдавать энергию", - "create.ponder.flywheel.header": "Генерации Силы Вращения Маховиком", - "create.ponder.flywheel.text_1": "Маховики необходимы для генерации силы вращения при помощи Печных Двигателей", - "create.ponder.flywheel.text_2": "Отдаваемая Сила Вращения имеет очень значительную устойчивость к нагрузкам", - "create.ponder.flywheel.text_3": "Использование Плавильной Печи удвоит эффективность Двигателя", + "create.ponder.fluid_pipe_flow.header": "Перемещении жидкостей при помощи медных труб.", + "create.ponder.fluid_pipe_flow.text_1": "Жидкостные трубы могут соединять два или более источников и потребителей жидкости", + "create.ponder.fluid_pipe_flow.text_2": "При помощи гаечного ключа можно создать окно прямому отрезку трубы", + "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_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_5": "Трубы также могут извлекать жидкости непосредственно из нескольких других блоков", + + "create.ponder.fluid_tank_sizes.header": "Размерах жидкостного бака", + "create.ponder.fluid_tank_sizes.text_1": "Жидкостные баки можно объединить для увеличения общей вместимости", + "create.ponder.fluid_tank_sizes.text_2": "Их площадь основания может составлять до 3 блоков в ширину...", + "create.ponder.fluid_tank_sizes.text_3": "...и увеличиваются в высоту более чем на 30 дополнительных уровней", + "create.ponder.fluid_tank_sizes.text_4": "При помощи гаечного ключа можно создать окно на резервуаре", + + "create.ponder.fluid_tank_storage.header": "Хранении жидкостей в жидкостных баках", + "create.ponder.fluid_tank_storage.text_1": "Жидкостные баки можно использовать для хранения большого количества жидкости", + "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.flywheel.header": "Генерации силы вращения Маховиком", + "create.ponder.flywheel.text_1": "Маховики необходимы для генерации силы вращения при помощи Печных двигателей", + "create.ponder.flywheel.text_2": "Отдаваемая сила вращения имеет очень значительную устойчивость к нагрузкам", + "create.ponder.flywheel.text_3": "Использование Плавильной печи удвоит эффективность двигателя", "create.ponder.funnel_compat.header": "Совместимости Воронок", - "create.ponder.funnel_compat.text_1": "Воронки должны хорошо взаимодействовать с многими компонентов", - "create.ponder.funnel_compat.text_2": "Вертикальные Пилы", + "create.ponder.funnel_compat.text_1": "Воронки должны хорошо взаимодействовать с многими компонентами:", + "create.ponder.funnel_compat.text_2": "Вертикальные пилы", "create.ponder.funnel_compat.text_3": "Депо", - "create.ponder.funnel_compat.text_4": "Предметными осушителями", + "create.ponder.funnel_compat.text_4": "Предметные осушители", - "create.ponder.funnel_direction.header": "Направлении Передачи", + "create.ponder.funnel_direction.header": "Направлении передачи", "create.ponder.funnel_direction.text_1": "Поставленная обычным образом, она забирает предметы из инвентаря", "create.ponder.funnel_direction.text_2": "Поставленная крадучись, она кладёт предметы в инвентарь", "create.ponder.funnel_direction.text_3": "Используя Ключ, вы можете изменить направление воронки", @@ -1749,208 +1847,262 @@ "create.ponder.funnel_redstone.header": "Редстоун управлении", "create.ponder.funnel_redstone.text_1": "Редстоун сигнал не даст любой воронке работать", - "create.ponder.funnel_transfer.header": "Передаче Напрямую", + "create.ponder.funnel_transfer.header": "Передаче напрямую", "create.ponder.funnel_transfer.text_1": "Воронки не могут перемещать предметы напрямую между закрытыми инвентарями", - "create.ponder.funnel_transfer.text_2": "Желоба или Умные желоба могут лучше подходить для жтих целей", - "create.ponder.funnel_transfer.text_3": "То же касается и горизонтального премещения. Механический ремень дожлен здесь помочь", + "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.text_2": "Создаваемая Сила Вращения имеет очень высокую усточивость к нагрузкам", - "create.ponder.furnace_engine.text_3": "Использование Плавильной Печи удвоит эффективность Двигателя", + "create.ponder.furnace_engine.header": "Генерации силы вращения Печными двигателями", + "create.ponder.furnace_engine.text_1": "Печные двигатели создают силу вращения пока присоединённая к ним печь работает", + "create.ponder.furnace_engine.text_2": "Создаваемая сила вращения имеет очень высокую устойчивость к нагрузкам", + "create.ponder.furnace_engine.text_3": "Использование Плавильной печи удвоит эффективность Двигателя", - "create.ponder.gantry_carriage.header": "Использовании Крановых Шасси", - "create.ponder.gantry_carriage.text_1": "Крановые Шасси могут прикрепляться и двигаться вдоль Портального Вала", - "create.ponder.gantry_carriage.text_2": "Крановые Установки могут двигать присоединённые Блоки", + "create.ponder.gantry_carriage.header": "Использовании шасси портального крана", + "create.ponder.gantry_carriage.text_1": "Шасси портального крана могут прикрепляться и двигаться вдоль Вала портального крана", + "create.ponder.gantry_carriage.text_2": "Крановые установки могут двигать присоединённые Блоки", - "create.ponder.gantry_cascaded.header": "Каскадных Порталах", - "create.ponder.gantry_cascaded.text_1": "Крановые Валы Прикрепляются к шасси без нужды в супер-клее", - "create.ponder.gantry_cascaded.text_2": "То же относится и к шасси на движущихся Крановые Валах", + "create.ponder.gantry_cascaded.header": "Многоступенчатом портальном кране", + "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.header": "Направлении движения крана", + "create.ponder.gantry_direction.text_1": "Валы портального крана могут иметь два противоположных направления", + "create.ponder.gantry_direction.text_2": "Направление движения шасси зависит от ориентации их валов", "create.ponder.gantry_direction.text_3": "...а также от направления вращения вала", - "create.ponder.gantry_direction.text_4": "Те же правила относятся передаваемому вращению", + "create.ponder.gantry_direction.text_4": "Те же правила относятся к передаваемому вращению", - "create.ponder.gantry_redstone.header": "Передаче Энергии Порталами", - "create.ponder.gantry_redstone.text_1": "Активированные Редстоуном крановые валы перестают двигать шасси", - "create.ponder.gantry_redstone.text_2": "Вместо этого их сила вращения передаётся выходящему валу шасси", + "create.ponder.gantry_redstone.header": "Подаче энергии на кран", + "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.header": "Использовании валов портального крана", + "create.ponder.gantry_shaft.text_1": "Валы портального крана составляют основу крановой установки. По ним будут двигаться присоединённые шасси", "create.ponder.gantry_shaft.text_2": "Крановые установки могут двигать присоединённые Блоки", - "create.ponder.gearbox.header": "Передаче Силы Вращения с Помощью Коробок Передач", + "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.gearshift.header": "Управлении Силой Вращения при помощи Реверсивного Механизма", - "create.ponder.gearshift.text_1": "Реверсивные Механизмы передают вращение по прямой", - "create.ponder.gearshift.text_2": "При активации Редстоуном, они реверсируют передачу", + "create.ponder.gearshift.header": "Управлении силой вращения при помощи Реверсивного механизма", + "create.ponder.gearshift.text_1": "Реверсивные механизмы передают вращение по прямой", + "create.ponder.gearshift.text_2": "При активации редстоуном, они реверсируют передачу", - "create.ponder.hand_crank.header": "Генерации Силы Вращения при помощи Рукояток", + "create.ponder.hand_crank.header": "Генерации силы вращения при помощи Рукояток", "create.ponder.hand_crank.text_1": "Рукоятки могут быть использованы игроками для приложения силы вращения вручную", - "create.ponder.hand_crank.text_2": "Держите ПКМ, чтобы повернуть их Против Часовой Стрелки", + "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.large_cogwheel.header": "Передаче Силы Вращения при помощи Больших Шестерней", - "create.ponder.large_cogwheel.text_1": "Большие Шестерни могут соединяться между собой под прямым углом", + "create.ponder.hose_pulley.header": "Наполнении и осушении источников с помощью Шкива со шлангом", + "create.ponder.hose_pulley.text_1": "Шкивы со шлангом можно использовать для заполнения или осушения больших объёмов жидкости.", + "create.ponder.hose_pulley.text_2": "С помощью кинетической энергии можно регулировать длину шланга", + "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_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.text_3": "Сети труб могут неограниченно передавать жидкости из/в такие шкивы", + + "create.ponder.hose_pulley_level.header": "Уровне заполнения и осушения Шкива со шлангом", + "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": "Наполнение происходит снизу вверх", + "create.ponder.hose_pulley_level.text_5": "Заполняемый бассейн не будет наполняться выше уровня конца шланга", + + "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.large_cogwheel.header": "Передаче силы вращения при помощи Больших шестерней", + "create.ponder.large_cogwheel.text_1": "Большие шестерни могут соединяться между собой под прямым углом", "create.ponder.large_cogwheel.text_2": "Это поможет передавать скорость на другие оси вращения", - "create.ponder.linear_chassis_attachment.header": "Прикреплении блоков при помощи Линейных Шасси", - "create.ponder.linear_chassis_attachment.text_1": "Открытые грани Линейных Шасси можно сделать Липкими", + "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_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_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_group.header": "Движении Линейных Шасси в Группах", - "create.ponder.linear_chassis_group.text_1": "Линейные Шасси соединяются с такими же блоками Шасси рядом с ними", - "create.ponder.linear_chassis_group.text_2": "Когда один блок перемещается Штуковиной, другие двигаются c ним", + "create.ponder.linear_chassis_group.header": "Движении Линейных шасси группами", + "create.ponder.linear_chassis_group.text_1": "Линейные шасси соединяются с такими же блоками Шасси рядом с ними", + "create.ponder.linear_chassis_group.text_2": "Когда один блок перемещается Штуковиной, другие двигаются с ним", "create.ponder.linear_chassis_group.text_3": "Шасси других типов или направленные в другом направлении не будут прикрепляться", - "create.ponder.mechanical_arm.header": "Настройке Механических Рук", - "create.ponder.mechanical_arm.text_1": "Входы и Выходы для Механических Рук должны быть назначены перед их установкой", - "create.ponder.mechanical_arm.text_2": "ПКМ по инвентарям, держа Руку, чтобы назначить их Целями", + "create.ponder.mechanical_arm.header": "Настройке Механических рук", + "create.ponder.mechanical_arm.text_1": "Входы и выходы для Механических рук должны быть назначены перед их установкой", + "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_4": "ЛКМ по компонентам, чтобы убрать выделение с них", + "create.ponder.mechanical_arm.text_5": "После установки, Механические руки будут нацелены на ранее выбранные блоки", "create.ponder.mechanical_arm.text_6": "У них может быть неограниченное кол-во входов и выходов в зоне их досягаемости", "create.ponder.mechanical_arm.text_7": "Однако, не каждый вид Инвентаря может взаимодействовать с ними напрямую", "create.ponder.mechanical_arm.text_8": "Воронки и Депо могут помочь заполнить этот пробел", - "create.ponder.mechanical_arm_filtering.header": "Фильтрации Выходов Механической Руки", + "create.ponder.mechanical_arm_filtering.header": "Фильтрации выходов Механической руки", "create.ponder.mechanical_arm_filtering.text_1": "Входы", "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_3": "Иногда желательно ограничить цели руки фильтром", + "create.ponder.mechanical_arm_filtering.text_4": "Сами Механические руки не имеют возможности фильтрации", + "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.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_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_5": "Прокрутка с Ключом позволит вам настроить это", + "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": "При активации Редстоуном, Механические Руки перестают работать", + "create.ponder.mechanical_arm_redstone.header": "Управлении Механическими руками редстоуном", + "create.ponder.mechanical_arm_redstone.text_1": "При активации редстоуном, Механические руки перестают работать", "create.ponder.mechanical_arm_redstone.text_2": "Перед остановкой, они завершат все начатые действия", - "create.ponder.mechanical_arm_redstone.text_3": "Таким образом, инвертированный импульс для вызова ровно одного срабатывания", + "create.ponder.mechanical_arm_redstone.text_3": "Таким образом, инвертированный импульс может использоваться для вызова ровно одного срабатывания", - "create.ponder.mechanical_bearing.header": "Передвижении Структур при помощи Механического Подшипника", - "create.ponder.mechanical_bearing.text_1": "Механические Подшипники прикрепляют блоки перед ними", - "create.ponder.mechanical_bearing.text_2": "при получении Силы Вращения, они соберутся во Вращяющуюся Штуковину", + "create.ponder.mechanical_bearing.header": "Передвижении структур при помощи Механического подшипника", + "create.ponder.mechanical_bearing.text_1": "Механические подшипники прикрепляют блоки перед ними", + "create.ponder.mechanical_bearing.text_2": "При получении силы вращения, они соберутся во Вращающуюся штуковину", - "create.ponder.mechanical_crafter.header": "Настройке Механических Крафтеров", - "create.ponder.mechanical_crafter.text_1": "Массив из Механических Крафтеров можно использовать для автоматизации Создания любого Рецепта", - "create.ponder.mechanical_crafter.text_2": "Можно настроить пути Крафтеров при помощи Ключа", + "create.ponder.mechanical_crafter.header": "Настройке Механических крафтеров", + "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_5": "Механическим Крафтерам нужна Сила Вращения Для Работы", - "create.ponder.mechanical_crafter.text_6": "ПКМ спереди, чтобы вставить Предметы вручную", - "create.ponder.mechanical_crafter.text_7": "Когда каждый слот на пути содержит Предмет, процесс создания начнётся", - "create.ponder.mechanical_crafter.text_8": "Для Рецептов, не полность занимающих крафтер-установку, старт можно спровоцировать Редстоун Имульсом", + "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.text_1": "Предметы можно поместить в Крафтеры автоматически", - "create.ponder.mechanical_crafter_connect.text_2": "При помощи Ключа сзади Крафтеров, их инвентари можно объединить", - "create.ponder.mechanical_crafter_connect.text_3": "Все соединённые Крафтеры теперь будут доступны из одного места ввода", + "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.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.header": "Ломании блоков Механической Дрелью", + "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.header": "Использовании Механических дрелей на штуковинах", + "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.header": "Использование Механических комбайнов на штуковинах", + "create.ponder.mechanical_harvester.text_1": "Когда комбайны движутся как часть движимой штуковины...", "create.ponder.mechanical_harvester.text_2": "Они будут убирать зрелый урожай на своём пути и высаживать его снова", - "create.ponder.mechanical_mixer.header": "Обратобтке Предметов Механическим Миксером", - "create.ponder.mechanical_mixer.text_1": "При помощи Миксера и Чаши можно автоматизировать некоторые Рецепты Крафта", - "create.ponder.mechanical_mixer.text_2": "Доступные рецепты включают любые Бесформенные Рецепты Крафта плюс немного ещё", - "create.ponder.mechanical_mixer.text_3": "Некоторые из них требуют тепло от Горелки Всполоха", + "create.ponder.mechanical_mixer.header": "Обработке предметов Механическим миксером", + "create.ponder.mechanical_mixer.text_1": "При помощи Миксера и Чаши можно автоматизировать некоторые рецепты крафта", + "create.ponder.mechanical_mixer.text_2": "Доступные рецепты включают любые бесформенные рецепты крафта плюс ещё немного", + "create.ponder.mechanical_mixer.text_3": "Некоторые из них требуют тепло от Горелки всполоха", "create.ponder.mechanical_mixer.text_4": "Слот для фильтра можно использовать в случае конфликта двух рецептов", - "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.header": "Перемещении структур при помощи Механических поршней", + "create.ponder.mechanical_piston.text_1": "Механические поршни могут двигать блоки перед ними", + "create.ponder.mechanical_piston.text_2": "Скорость и Направление движения зависят от исходного вращения", + "create.ponder.mechanical_piston.text_3": "Липкие Механические поршни могут тянуть назад присоединённые блоки", - "create.ponder.mechanical_piston_modes.header": "Режимах Движения Механического Поршня", - "create.ponder.mechanical_piston_modes.text_1": "Когда Поршень останавливается, сдвинутая структура обратно становится блоками", + "create.ponder.mechanical_piston_modes.header": "Режимах движения Механического поршня", + "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.header": "Использование Механических плугов на штуковинах", + "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_press.header": "Обработке Предметов Механическим Прессом", - "create.ponder.mechanical_press.text_1": "Механический Пресс может обрататывать предметы под собой", - "create.ponder.mechanical_press.text_2": "Входящие Предметы должны быть брошены или помещены на Депо под Прессом", + "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_4": "Пресс будет задерживать и обрабатывать их автоматически", - "create.ponder.mechanical_press_compacting.header": "Упаковке предметов Механическим Прессом", - "create.ponder.mechanical_press_compacting.text_1": "Спрессовываение предметов в Чаше Упакует их", - "create.ponder.mechanical_press_compacting.text_2": "Упаковка включает любые заполенные 2x2 или 3x3 Рецепты Крафта плюс немного ещё", - "create.ponder.mechanical_press_compacting.text_3": "Некоторым рецептам может потребоваться тепло от Горелки Всполоха", + "create.ponder.mechanical_press_compacting.header": "Упаковке предметов Механическим прессом", + "create.ponder.mechanical_press_compacting.text_1": "Спрессовывание предметов в Чаше упакует их", + "create.ponder.mechanical_press_compacting.text_2": "Упаковка включает любые заполненные 2x2 или 3x3 рецепты крафта плюс ещё немного", + "create.ponder.mechanical_press_compacting.text_3": "Некоторым рецептам может потребоваться тепло от Горелки всполоха", "create.ponder.mechanical_press_compacting.text_4": "Слот для фильтра можно использовать в случае конфликта двух рецептов", - "create.ponder.mechanical_saw_breaker.header": "Резке Деревьев Механической Пилой", - "create.ponder.mechanical_saw_breaker.text_1": "При подаче Вращения, Механическая Пила будет пилить деревья прямо перед ней", + "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_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_4": "Помпы могут объединять свою производительность в общих сетях труб", + "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.header": "Использовании Механических пил на штуковинах", + "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_2": "Обработанный предметы всегда движется против входящего для пилы вращения", - "create.ponder.mechanical_saw_processing.text_3": "Пилы могут работать с Механическими Ремнями", - "create.ponder.mechanical_saw_processing.text_4": "Когда из ингридиента можно получить несколько результатов, фильтр может уточнить его", - "create.ponder.mechanical_saw_processing.text_5": "Без фильтра Пила будет выбирать все возможные результаты по-очереди", + "create.ponder.mechanical_saw_processing.header": "Обработке предметов на Механической пиле", + "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_2": "Их можно запустить при помощи Шестерней с любой стороны", - "create.ponder.millstone.text_3": "Бросьте или Внесите предметы сверху", + "create.ponder.millstone.text_2": "Их можно запустить при помощи шестерней с любой стороны", + "create.ponder.millstone.text_3": "Бросьте или внесите предметы сверху", "create.ponder.millstone.text_4": "После некоторого времени результат можно забрать при помощи ПКМ", "create.ponder.millstone.text_5": "Продукты также можно вывести автоматически", "create.ponder.nixie_tube.header": "Использовании Газоразрядных индикаторов", - "create.ponder.nixie_tube.text_1": "При подаче Редстоун сигнала, Газоразрядные индикаторы отобразят его силу.", + "create.ponder.nixie_tube.text_1": "При подаче редстоун сигнала, Газоразрядные индикаторы отобразят его силу.", "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.header": "Удлинителях Поршня", + "create.ponder.piston_pole.text_1": "Без присоединённых Удлинителей, Механический поршень не может двигаться", + "create.ponder.piston_pole.text_2": "Длина стержня, добавленного к его задней части, определяет Диапазон выдвижения.", - "create.ponder.portable_storage_interface.header": "Обмене Хранилища Штуковин", + "create.ponder.portable_fluid_interface.header": "Портативном жидкостном интерфейсе на штуковинах", + "create.ponder.portable_fluid_interface.text_1": "Жидкостные баки на движущихся штуковинах не могут быть доступны ни каким трубам", + "create.ponder.portable_fluid_interface.text_2": "Этот интерфейс может взаимодействовать с жидкостными баками без необходимости останавливать штуковину", + "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_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_3": "Установите второй с промежутком в 1 или 2 блока между ними", @@ -1958,169 +2110,192 @@ "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_8": "Если на какое-то время прекратится обмен предметами, штуковина продолжит свой путь", + "create.ponder.portable_storage_interface.text_8": "Если на какое-то время прекратится обмен предметами - штуковина продолжит свой путь", - "create.ponder.portable_storage_interface_redstone.header": "Редстоун Управлении", + "create.ponder.portable_storage_interface_redstone.header": "Управлении редстоуном", "create.ponder.portable_storage_interface_redstone.text_1": "Редстоун сигнал предотвратит включение стационарного интерфейса", - "create.ponder.powered_latch.header": "Управлении сигналами при помощи Силового Триггера", - "create.ponder.powered_latch.text_1": "Силовые Триггеры - управляемые редстоуном рычаги", - "create.ponder.powered_latch.text_2": "Сигнал сзади включаен его", + "create.ponder.powered_latch.header": "Управлении сигналами при помощи Питаемого рычага", + "create.ponder.powered_latch.text_1": "Питаемый рычаг - управляемый редстоуном рычаг", + "create.ponder.powered_latch.text_2": "Сигнал сзади включает его", "create.ponder.powered_latch.text_3": "Сигналы сбоку обратно выключают его", - "create.ponder.powered_latch.text_4": "Силовые Триггеры можно переключать и вручную", + "create.ponder.powered_latch.text_4": "Питаемые рычаги можно переключать и вручную", - "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.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_4": "Силовые переключаемые триггеры также можно переключать вручную", + "create.ponder.powered_toggle_latch.text_4": "Питаемые рычаги-переключатели также можно переключать вручную", - "create.ponder.pulse_repeater.header": "Управлении Сигналами при помощи Импульсных Повторителей", - "create.ponder.pulse_repeater.text_1": "Импульсные Повторители укоротят любой редстуон сигнал до одного импульса.", + "create.ponder.pulse_repeater.header": "Управлении сигналами при помощи Импульсных повторителей", + "create.ponder.pulse_repeater.text_1": "Импульсные повторители укоротят любой редстуон сигнал до одного импульса.", - "create.ponder.radial_chassis.header": "Присоединении Блоков при помощи Радиальных Шасси", - "create.ponder.radial_chassis.text_1": "Радиальное Шасси соединяются с идентинтичными блоками Шасси в ряд", - "create.ponder.radial_chassis.text_2": "Когда один блок перемещается Штуковиной, остальные двигаются с ним", - "create.ponder.radial_chassis.text_3": "боковые грани Радиального Шасси можно сделать Липкими", + "create.ponder.radial_chassis.header": "Присоединении блоков при помощи Радиальных шасси", + "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_5": "ПКМ пустой рукой крадучись, чтобы убрать слизь", "create.ponder.radial_chassis.text_6": "Когда блок находится рядом с липкой гранью...", "create.ponder.radial_chassis.text_7": "он присоединит все достижимые блоки в пределах радиуса на этом слое", - "create.ponder.radial_chassis.text_8": "При помощи Ключа можно указать точный радиус для этого шасси", + "create.ponder.radial_chassis.text_8": "При помощи ключа можно указать точный радиус для этого шасси", "create.ponder.radial_chassis.text_9": "Блоки не достижимые ни одной липкой гранью не прикрепятся", - "create.ponder.redstone_contact.header": "Редстоун Контактах", - "create.ponder.redstone_contact.text_1": "Редстоун Контакты направленные друг на друга будут излучать редстоун сигнал", - "create.ponder.redstone_contact.text_2": "Также применимо, когда один из них - часть двигающейся Штуковины", + "create.ponder.redstone_contact.header": "Контактах редстоун сигнала", + "create.ponder.redstone_contact.text_1": "Контакты редстоун сигнала направленные друг на друга будут излучать редстоун сигнал", + "create.ponder.redstone_contact.text_2": "Также применимо, когда один из них - часть двигающейся штуковины", - "create.ponder.redstone_link.header": "Использовании Редстоун Передатчиков", - "create.ponder.redstone_link.text_1": "Редстоун Передатчики могут передавать редстоун сигнал без проводов", + "create.ponder.redstone_link.header": "Использовании Беспроводного передатчика редстоун сигнала", + "create.ponder.redstone_link.text_1": "Беспроводные передатчики редстоун сигнала могут передавать редстоун сигнал без проводов", "create.ponder.redstone_link.text_2": "ПКМ крадучись, чтобы переключить режим приёмника", - "create.ponder.redstone_link.text_3": "ПКМ Ключом сделает то же самое", + "create.ponder.redstone_link.text_3": "ПКМ ключом сделает то же самое", "create.ponder.redstone_link.text_4": "Приёмники испускают редстоун сигнал передатчиков в 128 блоках", - "create.ponder.redstone_link.text_5": "Положите предметы в два слота, чтобы указать Частоту", + "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.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.header": "Перемещении Лебёдок как частей штуковины", + "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.header": "Режимах движения Лебёдки", + "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": "Регуляторы Ск. Вращения передают вращение от своих осей на Большую Шестерню выше них", + "create.ponder.rotation_speed_controller.header": "Использовании Регулятора скорости вращения", + "create.ponder.rotation_speed_controller.text_1": "Регуляторы ск. вращения передают вращение от своих осей на Большую шестерню выше них", "create.ponder.rotation_speed_controller.text_2": "Можно настроить передаваемую скорость при помощи прокрутки по соответствующему месту сбоку", - "create.ponder.sail.header": "Сборки Мельниц при помощи Парусов", - "create.ponder.sail.text_1": "Паруса - удобные блоки для создания Мельниц", - "create.ponder.sail.text_2": "Они будут прикрепляться к блокам и друг к другу без использования Суперклея или Блоков Шасси", - "create.ponder.sail.text_3": "ПКМ Красителем, чтобы покрасить их", - "create.ponder.sail.text_4": "ПКМ Ножницами, чтобы превратить их снова в раму", + "create.ponder.sail.header": "Сборке Мельниц при помощи Парусов", + "create.ponder.sail.text_1": "Паруса - удобные блоки для создания мельниц", + "create.ponder.sail.text_2": "Они будут прикрепляться к блокам и друг к другу без использования суперклея или блоков шасси", + "create.ponder.sail.text_3": "ПКМ красителем, чтобы покрасить их", + "create.ponder.sail.text_4": "ПКМ ножницами, чтобы превратить их снова в раму", - "create.ponder.sail_frame.header": "Сборки Мельниц при помощи Рам Парусов", - "create.ponder.sail_frame.text_1": "Рамы Парусов - удобные блоки для создания Мельниц", - "create.ponder.sail_frame.text_2": "Они будут прикрепляться к блокам и друг к другу без использования Суперклея или Блоков Шасси", + "create.ponder.sail_frame.header": "Сборке Мельниц при помощи Рам парусов", + "create.ponder.sail_frame.text_1": "Рамы парусов - удобные блоки для создания мельниц", + "create.ponder.sail_frame.text_2": "Они будут прикрепляться к блокам и друг к другу без использования суперклея или блоков шасси", - "create.ponder.sequenced_gearshift.header": "Управлении Скоростью Вращения при помощи Последовательных Переключатель Передач", - "create.ponder.sequenced_gearshift.text_1": "Посл. Перекл. Передач передают вращение следуя временному списку инструкций", - "create.ponder.sequenced_gearshift.text_2": "ПКМ, чтобы отрыть Интерфейс настройки", - "create.ponder.sequenced_gearshift.text_3": "При получении Редстоун Сигнала, он начнёт выполнять заданные инструкции", - "create.ponder.sequenced_gearshift.text_4": "По завершению он будет дождётся следующего Редстоун Сигнала и начнёт сначала", + "create.ponder.sequenced_gearshift.header": "Управлении скоростью вращения при помощи Последовательного переключателя передач", + "create.ponder.sequenced_gearshift.text_1": "Посл. перекл. передач передают вращение следуя временному списку инструкций", + "create.ponder.sequenced_gearshift.text_2": "ПКМ, чтобы отрыть интерфейс настройки", + "create.ponder.sequenced_gearshift.text_3": "При получении Редстоун сигнала, он начнёт выполнять заданные инструкции", + "create.ponder.sequenced_gearshift.text_4": "По завершению он будет дожидаться следующего Редстоун сигнала и начнёт сначала", "create.ponder.sequenced_gearshift.text_5": "Редстоун компаратор можно использовать для считывания текущего прогресса", - "create.ponder.shaft.header": "Передаче Вращения при помощи Валов", + "create.ponder.shaft.header": "Передаче вращения при помощи Валов", "create.ponder.shaft.text_1": "Валы передают вращение по прямой", "create.ponder.shaft_casing.header": "Обрамлении Валов", - "create.ponder.shaft_casing.text_1": "Латунный или Андезитовый Корпус можно использовать для декорации Валов", + "create.ponder.shaft_casing.text_1": "Латунный или андезитовый корпус можно использовать для декорации Валов", - "create.ponder.smart_chute.header": "Фильтрации Предметов при помощи Умных Желобов", - "create.ponder.smart_chute.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": "Умные трубы могут помочь управлять потоками по типам жидкостей", + "create.ponder.smart_pipe.text_2": "Размещенные непосредственно у источника, они могут указывать тип извлекаемой жидкости", + "create.ponder.smart_pipe.text_3": "Просто щелкните ПКМ на слоте фильтра с любым предметом, содержащим нужную жидкость", + "create.ponder.smart_pipe.text_4": "И при размещении глубже по сети труб умные трубы будут пропускать только подходящие жидкости.", "create.ponder.speedometer.header": "Мониторинге Кинетической информации при помощи Спидометра", - "create.ponder.speedometer.text_1": "Спидометры отображают текущую Скорость присоединённых компонентов", - "create.ponder.speedometer.text_2": "При ношении Инженерных Очков игрок может получить более полную информацию от Прибора", - "create.ponder.speedometer.text_3": "Компараторы могут испускать аналоговый Редстоун Сигнал относительно измерений Спидометра", + "create.ponder.speedometer.text_1": "Спидометры отображают текущую скорость присоединённых компонентов", + "create.ponder.speedometer.text_2": "При ношении Инженерных очков игрок может получить более полную информацию от прибора", + "create.ponder.speedometer.text_3": "Компараторы могут испускать аналоговый Редстоун сигнал относительно измерений спидометра", + + "create.ponder.spout_filling.header": "Наполнении предметов при помощи дозатора", + "create.ponder.spout_filling.text_1": "Дозатор может заполнять подходящие предметы, расположенные под ним", + "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_6": "Дозатор будет удерживать и обрабатывать их автоматически", "create.ponder.stabilized_bearings.header": "Стабилизации Штуковин", - "create.ponder.stabilized_bearings.text_1": "Когда Межанические Подшипники являются частью двигающейся Структуры...", + "create.ponder.stabilized_bearings.text_1": "Когда Механические подшипники являются частью двигающейся структуры...", "create.ponder.stabilized_bearings.text_2": "...они будут пытаться держаться ровно", "create.ponder.stabilized_bearings.text_3": "Опять же, подшипники присоединяют блоки перед ними", - "create.ponder.stabilized_bearings.text_4": "И в результате целая под-Структура будет держаться ровно", + "create.ponder.stabilized_bearings.text_4": "И в результате целая под-структура будет держаться ровно", "create.ponder.sticker.header": "Прикреплении блоков при помощи Липучки", "create.ponder.sticker.text_1": "Липучки идеально подходят для Редстоун-управляемого присоединения блоков", "create.ponder.sticker.text_2": "При получении сигнала они переключают своё состояние", "create.ponder.sticker.text_3": "Если он теперь движется в штуковине, то блок будет двигаться с ним", - "create.ponder.sticker.text_4": "При повторном переключании блок больше не будет прикреплён", + "create.ponder.sticker.text_4": "При повторном переключении блок больше не будет прикреплён", - "create.ponder.stressometer.header": "Мониторинге Кинетической Информации при помощи Стрессометра", - "create.ponder.stressometer.text_1": "Стрессометр отображает текущую Допустимую Нагрузку присоединённой кинетической сети", - "create.ponder.stressometer.text_2": "При ношении Инженерных очков игрок может получить более полную информацию от Прибора", - "create.ponder.stressometer.text_3": "Компараторы могут испускать аналоговый Редстоун Сигнал относительно измерений Стрессометра", + "create.ponder.stressometer.header": "Мониторинге кинетической информации при помощи Стрессометра", + "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.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_5": "Суперклей можно удалить Левым Кликом", + "create.ponder.super_glue.text_5": "Супер-клей можно удалить левым кликом", - "create.ponder.valve_handle.header": "Генерации Силы Вращения при помощи Вентилей", - "create.ponder.valve_handle.text_1": "Игроки могут использовать Вентили для применения силы вращения вручную", - "create.ponder.valve_handle.text_2": "Держите ПКМ для вращения его Против Часовой Стрелки", + "create.ponder.valve_handle.header": "Генерации силы вращения при помощи Вентилей", + "create.ponder.valve_handle.text_1": "Игроки могут использовать вентили для применения силы вращения вручную", + "create.ponder.valve_handle.text_2": "Держите ПКМ для вращения его против Часовой стрелки", "create.ponder.valve_handle.text_3": "Передаваемая ими скорость медленная и точная", - "create.ponder.valve_handle.text_4": "Держите ПКМ Крадучись для вращения его По Часовой Стрелке", + "create.ponder.valve_handle.text_4": "Держите ПКМ крадучись для вращения его по Часовой стрелке", "create.ponder.valve_handle.text_5": "Вентили можно окрашивать в эстетических целях", - "create.ponder.water_wheel.header": "Генерации Силы Вращения при помощи Водяных Колёс", - "create.ponder.water_wheel.text_1": "Водяные Колёса берут силу соседних Потоков Воды", - "create.ponder.water_wheel.text_2": "Чем больше сторон запитано, тем быстрее будет вращяться Водяное Колесо", - "create.ponder.water_wheel.text_3": "Лопасти Колеса должны быть направлены против течения", + "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_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.header": "Использовании Взвешенных катапульт", + "create.ponder.weighted_ejector.text_1": "ПКМ крадучись и держа катапульту, чтобы выбрать место цели", "create.ponder.weighted_ejector.text_10": "Теперь она ограниченна этим размера стака и будет активироваться только тогда, когда удерживаемый стак достигнет этого количества", - "create.ponder.weighted_ejector.text_11": "Другие Сущности, встав на Катапульту, будут всегда активировать её", - "create.ponder.weighted_ejector.text_2": "Установленная Катапульта будет запускать объекты до отмеченного места", + "create.ponder.weighted_ejector.text_11": "Другие сущности, встав на катапульту, будут всегда активировать её", + "create.ponder.weighted_ejector.text_2": "Установленная катапульта будет запускать объекты до отмеченного места", "create.ponder.weighted_ejector.text_3": "Подходящая цель может быть на любой дистанции и высоте в радиусе", "create.ponder.weighted_ejector.text_4": "Однако они не могут быть сбоку", - "create.ponder.weighted_ejector.text_5": "Если не было выбрано подходящей Цели, она будет целиться в блок перед ней", - "create.ponder.weighted_ejector.text_6": "Предоставьте Силу Вращения, чтобы зарядить её", - "create.ponder.weighted_ejector.text_7": "Установка предметов на Катапульту вызывают её срабатывание", - "create.ponder.weighted_ejector.text_8": "Если Инвентарь выбран целью, то Катапульта будет ждать, пока в нём не появится место.", - "create.ponder.weighted_ejector.text_9": "При помощи Ключа можно настроить необходимый размер стака", + "create.ponder.weighted_ejector.text_5": "Если не было выбрано подходящей цели, она будет целиться в блок перед ней", + "create.ponder.weighted_ejector.text_6": "Предоставьте силу вращения, чтобы зарядить её", + "create.ponder.weighted_ejector.text_7": "Установка предметов на катапульту вызывают её срабатывание", + "create.ponder.weighted_ejector.text_8": "Если инвентарь выбран целью, то катапульта будет ждать, пока в нём не появится место.", + "create.ponder.weighted_ejector.text_9": "При помощи ключа можно настроить необходимый размер стака", - "create.ponder.weighted_ejector_redstone.header": "Управлении Взвешенными Катапультами Редстоуном", - "create.ponder.weighted_ejector_redstone.text_1": "При подаче Редстоун Сигнала Катапульты не будут активироваться", - "create.ponder.weighted_ejector_redstone.text_2": "Кроме того, Наблюдатели могут определить, когда Катапульты срабатывают", + "create.ponder.weighted_ejector_redstone.header": "Управлении Взвешенными катапультами редстоуном", + "create.ponder.weighted_ejector_redstone.text_1": "При подаче редстоун сигнала катапульты не будут активироваться", + "create.ponder.weighted_ejector_redstone.text_2": "Кроме того, наблюдатели могут определить, когда катапульты срабатывают", - "create.ponder.weighted_ejector_tunnel.header": "Разделении Стаков Предметов при помощи Взвешенных Катапульт", - "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.header": "Разделении стаков предметов при помощи Взвешенных катапульт", + "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.windmill_source.header": "Генерации Силы Вращения при помощи Подшипников Ветряной Мельницы", - "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_5": "Используйте Ключ, чтобы настроить направление Вращения", - "create.ponder.windmill_source.text_6": "Правый Клик по Подшипнику в любое время, чтобы остановить его и отредактировать Структуру", + "create.ponder.windmill_source.header": "Генерации силы вращения при помощи Подшипников ветряной мельницы", + "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_5": "Используйте ключ, чтобы настроить направление вращения", + "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 1928b1e98c8e3861e115208134e8511308c36e03 Mon Sep 17 00:00:00 2001 From: CKenJa <41111170+CKenJa@users.noreply.github.com> Date: Sun, 18 Jul 2021 22:34:04 +0900 Subject: [PATCH 096/118] Updates to ja_jp.json by CKenJa (#1996) --- .../resources/assets/create/lang/ja_jp.json | 53 ++++++++++++++++--- 1 file changed, 46 insertions(+), 7 deletions(-) diff --git a/src/main/resources/assets/create/lang/ja_jp.json b/src/main/resources/assets/create/lang/ja_jp.json index 2dec8b67b..967b1a5d5 100644 --- a/src/main/resources/assets/create/lang/ja_jp.json +++ b/src/main/resources/assets/create/lang/ja_jp.json @@ -27,10 +27,12 @@ "block.create.belt": "メカニカルベルト", "block.create.birch_window": "シラカバの窓", "block.create.birch_window_pane": "シラカバの窓板", + "block.create.black_nixie_tube": "黒色のニキシー管", "block.create.black_sail": "黒色の帆", "block.create.black_seat": "黒色のシート", "block.create.black_valve_handle": "黒色のバルブハンドル", "block.create.blaze_burner": "ブレイズバーナー", + "block.create.blue_nixie_tube": "青色のニキシー管", "block.create.blue_sail": "青色の帆", "block.create.blue_seat": "青色のシート", "block.create.blue_valve_handle": "青色のバルブハンドル", @@ -40,6 +42,7 @@ "block.create.brass_encased_shaft": "真鍮のケース入りシャフト", "block.create.brass_funnel": "真鍮ファンネル", "block.create.brass_tunnel": "真鍮トンネル", + "block.create.brown_nixie_tube": "茶色のニキシー管", "block.create.brown_sail": "茶色の帆", "block.create.brown_seat": "茶色のシート", "block.create.brown_valve_handle": "茶色のバルブハンドル", @@ -72,6 +75,7 @@ "block.create.crushing_wheel": "破砕ホイール", "block.create.crushing_wheel_controller": "破砕ホイールコントローラー", "block.create.cuckoo_clock": "鳩時計", + "block.create.cyan_nixie_tube": "水色のニキシー管", "block.create.cyan_sail": "水色の帆", "block.create.cyan_seat": "水色のシート", "block.create.cyan_valve_handle": "水色のバルブハンドル", @@ -178,9 +182,11 @@ "block.create.granite_cobblestone_stairs": "花崗岩の丸石の階段", "block.create.granite_cobblestone_wall": "花崗岩の丸石の塀", "block.create.granite_pillar": "花崗岩の柱", + "block.create.gray_nixie_tube": "灰色のニキシー管", "block.create.gray_sail": "灰色の帆", "block.create.gray_seat": "灰色のシート", "block.create.gray_valve_handle": "灰色のバルブハンドル", + "block.create.green_nixie_tube": "緑色のニキシー管", "block.create.green_sail": "緑色の帆", "block.create.green_seat": "緑色のシート", "block.create.green_valve_handle": "緑色のバルブハンドル", @@ -204,12 +210,15 @@ "block.create.layered_scoria": "スコリアの組石", "block.create.layered_weathered_limestone": "風化した石灰岩の組石", "block.create.lectern_controller": "書見台コントローラー", + "block.create.light_blue_nixie_tube": "空色のニキシー菅", "block.create.light_blue_sail": "空色の帆", "block.create.light_blue_seat": "空色のシート", "block.create.light_blue_valve_handle": "空色のバルブハンドル", + "block.create.light_gray_nixie_tube": "薄灰色のニキシー管", "block.create.light_gray_sail": "薄灰色の帆", "block.create.light_gray_seat": "薄灰色のシート", "block.create.light_gray_valve_handle": "薄灰色のバルブハンドル", + "block.create.lime_nixie_tube": "黄緑色のニキシー管", "block.create.lime_sail": "黄緑色の帆", "block.create.lime_seat": "黄緑色のシート", "block.create.lime_valve_handle": "黄緑色のバルブハンドル", @@ -226,6 +235,7 @@ "block.create.limestone_pillar": "石灰岩の柱", "block.create.linear_chassis": "リニアシャーシ", "block.create.lit_blaze_burner": "燃焼中のブレイズバーナー", + "block.create.magenta_nixie_tube": "赤紫色のニキシー管", "block.create.magenta_sail": "赤紫色の帆", "block.create.magenta_seat": "赤紫色のシート", "block.create.magenta_valve_handle": "赤紫色のバルブハンドル", @@ -310,6 +320,7 @@ "block.create.paved_weathered_limestone_stairs": "舗装された風化した石灰岩の階段", "block.create.paved_weathered_limestone_wall": "舗装された風化した石灰岩の塀", "block.create.peculiar_bell": "風変わりな鐘", + "block.create.pink_nixie_tube": "桃色のニキシー管", "block.create.pink_sail": "桃色の帆", "block.create.pink_seat": "桃色のシート", "block.create.pink_valve_handle": "桃色のバルブハンドル", @@ -344,10 +355,12 @@ "block.create.powered_toggle_latch": "パワードトグルラッチ", "block.create.pulley_magnet": "プーリーマグネット", "block.create.pulse_repeater": "パルスリピーター", + "block.create.purple_nixie_tube": "紫色のニキシー管", "block.create.purple_sail": "紫色の帆", "block.create.purple_seat": "紫色のシート", "block.create.purple_valve_handle": "紫色のバルブハンドル", "block.create.radial_chassis": "ラジアルシャーシ", + "block.create.red_nixie_tube": "赤色のニキシー管", "block.create.red_sail": "赤色の帆", "block.create.red_seat": "赤色のシート", "block.create.red_valve_handle": "赤色のバルブハンドル", @@ -404,17 +417,22 @@ "block.create.weathered_limestone_cobblestone_wall": "風化した石灰岩の丸石の塀", "block.create.weathered_limestone_pillar": "風化した石灰岩の柱", "block.create.weighted_ejector": "重量射出機", + "block.create.white_nixie_tube": "白色のニキシー管", "block.create.white_sail": "白色の帆", "block.create.white_seat": "白色のシート", "block.create.white_valve_handle": "白色のバルブハンドル", "block.create.windmill_bearing": "風車ベアリング", "block.create.wooden_bracket": "木製ブラケット", + "block.create.yellow_nixie_tube": "黄色のニキシー管", "block.create.yellow_sail": "黄色の帆", "block.create.yellow_seat": "黄色のシート", "block.create.yellow_valve_handle": "黄色のバルブハンドル", "block.create.zinc_block": "亜鉛ブロック", "block.create.zinc_ore": "亜鉛鉱石", + "enchantment.create.capacity": "容量増加", + "enchantment.create.potato_recovery": "ポテト回収", + "entity.create.contraption": "からくり", "entity.create.crafting_blueprint": "クラフトブループリント", "entity.create.gantry_contraption": "ガントリーからくり", @@ -673,14 +691,20 @@ "itemGroup.create.base": "Create", "itemGroup.create.palettes": "Create Palettes", - "death.attack.create.crush": "%1$s は破砕ホイールによって処理されました", - "death.attack.create.fan_fire": "%1$s は熱風で焼死した", - "death.attack.create.fan_lava": "%1$s は溶岩ファンによって焼死した", - "death.attack.create.mechanical_drill": "%1$s はメカニカルドリルに突き刺さった", - "death.attack.create.mechanical_saw": "%1$s はメカニカルソーで半分にカットされた", + "death.attack.create.crush": "%1$sは破砕ホイールによって処理された", + "death.attack.create.crush.player": "%1$sは%2$sに破砕ホイールに投入された", + "death.attack.create.fan_fire": "%1$sはケース入りファンによって燻製にされた", + "death.attack.create.fan_fire.player": "%1$sは%2$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.potato_cannon": "%1$sは%2$sのポテトキャノンに撃ち抜かれた", "death.attack.create.potato_cannon.item": "%1$sは%3$sで%2$sに撃た抜かれた", - "death.attack.create.cuckoo_clock_explosion": "%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": "トロッコアセンブラはレールの上にのみ設置できます", @@ -1040,6 +1064,11 @@ "create.item_attributes.in_item_group.inverted": "%1$sに属していないか", "create.item_attributes.added_by": "%1$sによって追加されたか", "create.item_attributes.added_by.inverted": "%1$sによって追加されていないか", + "create.item_attributes.shulker_level": "%1$sシュルカーか", + "create.item_attributes.shulker_level.inverted": "%1$sシュルカーでないか", + "create.item_attributes.shulker_level.full": "満杯の", + "create.item_attributes.shulker_level.empty": "空の", + "create.item_attributes.shulker_level.partial": "一部埋まっている", "create.item_attributes.has_enchant": "エンチャントされているか%1$s", "create.item_attributes.has_enchant.inverted": "エンチャントがされていないか", "create.item_attributes.color": "%1$sで染められているか", @@ -1135,6 +1164,9 @@ "create.tooltip.chute.fans_pull_up": "ファンが上から吸い込んでいます", "create.tooltip.chute.fans_pull_down": "ファンが下から吸い込んでいます", "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.linked_controller.bind_mode": "割り当てモード", "create.linked_controller.press_keybind": "%1$s、%2$s、%3$s、%4$s、%5$sまたは%6$sを押すとこの周波数がそのキーに割り当てられます", @@ -1150,6 +1182,10 @@ "create.crafting_blueprint.secondary_display_slot": "第2表示スロット", "create.crafting_blueprint.optional": "オプション", + "create.potato_cannon.ammo.attack_damage": "攻撃力: %1$s", + "create.potato_cannon.ammo.reload_ticks": "リロード時間(tick): %1$s", + "create.potato_cannon.ammo.knockback": "ノックバック: %1$s", + "create.hint.hose_pulley.title": "底なし搬出", "create.hint.hose_pulley": "対象となる液体は無限とみなされています。", "create.hint.mechanical_arm_no_targets.title": "ターゲットが見つかりません", @@ -1188,6 +1224,7 @@ "create.subtitle.mechanical_press_activation_belt": "メカニカルプレスがボンと鳴る", "create.subtitle.fwoomp": "ポテトランチャーがバキューンと鳴る", "create.subtitle.worldshaper_place": "ワールドシェーパーが設置する", + "create.subtitle.crushing_1": "粉砕音", "create.subtitle.depot_slide": "アイテムが滑る", "create.subtitle.saw_activate_stone": "メカニカルソーが動作する", "create.subtitle.blaze_munch": "ブレイズの咀嚼音", @@ -1730,6 +1767,7 @@ "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": "ケース入り液体パイプ", @@ -2047,6 +2085,7 @@ "create.ponder.nixie_tube.header": "ニキシー管の使い方", "create.ponder.nixie_tube.text_1": "ニキシー管は受けたレッドストーン信号の強度を表示します", "create.ponder.nixie_tube.text_2": "金床で名付けた名札を使って、好きな文字を表示することもできます", + "create.ponder.nixie_tube.text_3": "染料で右クリックすることで表示の色を変えられます", "create.ponder.piston_pole.header": "ピストン延長ポール", "create.ponder.piston_pole.text_1": "ポールが無いとメカニカルピストンは動きません", @@ -2258,4 +2297,4 @@ "_": "Thank you for translating Create!" -} \ No newline at end of file +} From 909bf8a03f62a66ff5ab39c29e139542e049e876 Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Sun, 18 Jul 2021 15:38:00 +0200 Subject: [PATCH 097/118] Post-PR datagen --- src/generated/resources/.cache/cache | 8 +- .../assets/create/lang/unfinished/ja_jp.json | 88 +- .../assets/create/lang/unfinished/ko_kr.json | 290 ++-- .../assets/create/lang/unfinished/ru_ru.json | 1500 ++++++++--------- .../data/create/advancements/aesthetics.json | 4 +- 5 files changed, 945 insertions(+), 945 deletions(-) diff --git a/src/generated/resources/.cache/cache b/src/generated/resources/.cache/cache index c130e37cb..050e045c4 100644 --- a/src/generated/resources/.cache/cache +++ b/src/generated/resources/.cache/cache @@ -432,12 +432,12 @@ e1d3c02695cbd2ee7bbede97f72941835634a3a5 assets/create/lang/en_ud.json d45414b7f28ac2cc821021d3e0b010a8b9904e6b assets/create/lang/unfinished/es_mx.json ffcb0ea206af4555e8f6e5d391766ed721a6a637 assets/create/lang/unfinished/fr_fr.json e6c7bc95ef9f798c00ff8bca6c3a2f7db1bdea97 assets/create/lang/unfinished/it_it.json -0211e888290ccf157673719396b59c1600f9a038 assets/create/lang/unfinished/ja_jp.json -7c7c3fbc64f98504b5ec99c36ce2ce2526b1d2ac assets/create/lang/unfinished/ko_kr.json +ad7e007cc707e01459fe580aa2818c608aa36ec1 assets/create/lang/unfinished/ja_jp.json +4678fe95f324507c537e5035ec976baa8208a371 assets/create/lang/unfinished/ko_kr.json 2b219b17dd8f21c444a100a88813a918416f42e3 assets/create/lang/unfinished/nl_nl.json cb27026452c7117c271c80d792a589aa7f6b624f assets/create/lang/unfinished/pl_pl.json 03662aadb7d569baafcaf4cd12eb9cd50dbcb8b4 assets/create/lang/unfinished/pt_br.json -d40ac7c8deeef6b96fdd012117d1f3f67c60e4e0 assets/create/lang/unfinished/ru_ru.json +f40b3d27e81445b5cfdbca0ecb0bb84a84e55951 assets/create/lang/unfinished/ru_ru.json f43c968e694489ab3c9419b9522b1f2543551bdc assets/create/lang/unfinished/zh_cn.json 521428d50af44282bae3e0fa50c150fe6a7e9c1a assets/create/lang/unfinished/zh_tw.json 487a511a01b2a4531fb672f917922312db78f958 assets/create/models/block/acacia_window.json @@ -1699,7 +1699,7 @@ d080b1b25e5bc8baf5aee68691b08c7f12ece3b0 assets/create/models/item/windmill_bear a80fb25a0b655e76be986b5b49fcb0f03461a1ab assets/create/models/item/zinc_nugget.json b1689617190c05ef34bd18456b0c7ae09bb3210f assets/create/models/item/zinc_ore.json 58880e397902f8ca5b3b59ed4423e626109ddc4c assets/create/sounds.json -5d0cc4c0255dc241e61c173b31ddca70c88d08e4 data/create/advancements/aesthetics.json +0f1b4b980afba9bf2caf583b88e261bba8b10313 data/create/advancements/aesthetics.json 187921fa131b06721bfaf63f2623a28c141aae9a data/create/advancements/andesite_alloy.json 0ea2db7173b5be28b289ea7c9a6a0cf5805c60c7 data/create/advancements/andesite_casing.json 83c046bd200623933545c9e4326f782fb02c87fa data/create/advancements/arm_blaze_burner.json diff --git a/src/generated/resources/assets/create/lang/unfinished/ja_jp.json b/src/generated/resources/assets/create/lang/unfinished/ja_jp.json index 97891f45a..2d4d204e3 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ja_jp.json +++ b/src/generated/resources/assets/create/lang/unfinished/ja_jp.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 41", + "_": "Missing Localizations: 4", "_": "->------------------------] Game Elements [------------------------<-", @@ -28,12 +28,12 @@ "block.create.belt": "メカニカルベルト", "block.create.birch_window": "シラカバの窓", "block.create.birch_window_pane": "シラカバの窓板", - "block.create.black_nixie_tube": "UNLOCALIZED: Black Nixie Tube", + "block.create.black_nixie_tube": "黒色のニキシー管", "block.create.black_sail": "黒色の帆", "block.create.black_seat": "黒色のシート", "block.create.black_valve_handle": "黒色のバルブハンドル", "block.create.blaze_burner": "ブレイズバーナー", - "block.create.blue_nixie_tube": "UNLOCALIZED: Blue Nixie Tube", + "block.create.blue_nixie_tube": "青色のニキシー管", "block.create.blue_sail": "青色の帆", "block.create.blue_seat": "青色のシート", "block.create.blue_valve_handle": "青色のバルブハンドル", @@ -43,7 +43,7 @@ "block.create.brass_encased_shaft": "真鍮のケース入りシャフト", "block.create.brass_funnel": "真鍮ファンネル", "block.create.brass_tunnel": "真鍮トンネル", - "block.create.brown_nixie_tube": "UNLOCALIZED: Brown Nixie Tube", + "block.create.brown_nixie_tube": "茶色のニキシー管", "block.create.brown_sail": "茶色の帆", "block.create.brown_seat": "茶色のシート", "block.create.brown_valve_handle": "茶色のバルブハンドル", @@ -76,7 +76,7 @@ "block.create.crushing_wheel": "破砕ホイール", "block.create.crushing_wheel_controller": "破砕ホイールコントローラー", "block.create.cuckoo_clock": "鳩時計", - "block.create.cyan_nixie_tube": "UNLOCALIZED: Cyan Nixie Tube", + "block.create.cyan_nixie_tube": "水色のニキシー管", "block.create.cyan_sail": "水色の帆", "block.create.cyan_seat": "水色のシート", "block.create.cyan_valve_handle": "水色のバルブハンドル", @@ -183,11 +183,11 @@ "block.create.granite_cobblestone_stairs": "花崗岩の丸石の階段", "block.create.granite_cobblestone_wall": "花崗岩の丸石の塀", "block.create.granite_pillar": "花崗岩の柱", - "block.create.gray_nixie_tube": "UNLOCALIZED: Gray Nixie Tube", + "block.create.gray_nixie_tube": "灰色のニキシー管", "block.create.gray_sail": "灰色の帆", "block.create.gray_seat": "灰色のシート", "block.create.gray_valve_handle": "灰色のバルブハンドル", - "block.create.green_nixie_tube": "UNLOCALIZED: Green Nixie Tube", + "block.create.green_nixie_tube": "緑色のニキシー管", "block.create.green_sail": "緑色の帆", "block.create.green_seat": "緑色のシート", "block.create.green_valve_handle": "緑色のバルブハンドル", @@ -211,15 +211,15 @@ "block.create.layered_scoria": "スコリアの組石", "block.create.layered_weathered_limestone": "風化した石灰岩の組石", "block.create.lectern_controller": "書見台コントローラー", - "block.create.light_blue_nixie_tube": "UNLOCALIZED: Light Blue Nixie Tube", + "block.create.light_blue_nixie_tube": "空色のニキシー菅", "block.create.light_blue_sail": "空色の帆", "block.create.light_blue_seat": "空色のシート", "block.create.light_blue_valve_handle": "空色のバルブハンドル", - "block.create.light_gray_nixie_tube": "UNLOCALIZED: Light Gray Nixie Tube", + "block.create.light_gray_nixie_tube": "薄灰色のニキシー管", "block.create.light_gray_sail": "薄灰色の帆", "block.create.light_gray_seat": "薄灰色のシート", "block.create.light_gray_valve_handle": "薄灰色のバルブハンドル", - "block.create.lime_nixie_tube": "UNLOCALIZED: Lime Nixie Tube", + "block.create.lime_nixie_tube": "黄緑色のニキシー管", "block.create.lime_sail": "黄緑色の帆", "block.create.lime_seat": "黄緑色のシート", "block.create.lime_valve_handle": "黄緑色のバルブハンドル", @@ -236,7 +236,7 @@ "block.create.limestone_pillar": "石灰岩の柱", "block.create.linear_chassis": "リニアシャーシ", "block.create.lit_blaze_burner": "燃焼中のブレイズバーナー", - "block.create.magenta_nixie_tube": "UNLOCALIZED: Magenta Nixie Tube", + "block.create.magenta_nixie_tube": "赤紫色のニキシー管", "block.create.magenta_sail": "赤紫色の帆", "block.create.magenta_seat": "赤紫色のシート", "block.create.magenta_valve_handle": "赤紫色のバルブハンドル", @@ -321,7 +321,7 @@ "block.create.paved_weathered_limestone_stairs": "舗装された風化した石灰岩の階段", "block.create.paved_weathered_limestone_wall": "舗装された風化した石灰岩の塀", "block.create.peculiar_bell": "風変わりな鐘", - "block.create.pink_nixie_tube": "UNLOCALIZED: Pink Nixie Tube", + "block.create.pink_nixie_tube": "桃色のニキシー管", "block.create.pink_sail": "桃色の帆", "block.create.pink_seat": "桃色のシート", "block.create.pink_valve_handle": "桃色のバルブハンドル", @@ -356,12 +356,12 @@ "block.create.powered_toggle_latch": "パワードトグルラッチ", "block.create.pulley_magnet": "プーリーマグネット", "block.create.pulse_repeater": "パルスリピーター", - "block.create.purple_nixie_tube": "UNLOCALIZED: Purple Nixie Tube", + "block.create.purple_nixie_tube": "紫色のニキシー管", "block.create.purple_sail": "紫色の帆", "block.create.purple_seat": "紫色のシート", "block.create.purple_valve_handle": "紫色のバルブハンドル", "block.create.radial_chassis": "ラジアルシャーシ", - "block.create.red_nixie_tube": "UNLOCALIZED: Red Nixie Tube", + "block.create.red_nixie_tube": "赤色のニキシー管", "block.create.red_sail": "赤色の帆", "block.create.red_seat": "赤色のシート", "block.create.red_valve_handle": "赤色のバルブハンドル", @@ -418,21 +418,21 @@ "block.create.weathered_limestone_cobblestone_wall": "風化した石灰岩の丸石の塀", "block.create.weathered_limestone_pillar": "風化した石灰岩の柱", "block.create.weighted_ejector": "重量射出機", - "block.create.white_nixie_tube": "UNLOCALIZED: White Nixie Tube", + "block.create.white_nixie_tube": "白色のニキシー管", "block.create.white_sail": "白色の帆", "block.create.white_seat": "白色のシート", "block.create.white_valve_handle": "白色のバルブハンドル", "block.create.windmill_bearing": "風車ベアリング", "block.create.wooden_bracket": "木製ブラケット", - "block.create.yellow_nixie_tube": "UNLOCALIZED: Yellow Nixie Tube", + "block.create.yellow_nixie_tube": "黄色のニキシー管", "block.create.yellow_sail": "黄色の帆", "block.create.yellow_seat": "黄色のシート", "block.create.yellow_valve_handle": "黄色のバルブハンドル", "block.create.zinc_block": "亜鉛ブロック", "block.create.zinc_ore": "亜鉛鉱石", - "enchantment.create.capacity": "UNLOCALIZED: Capacity", - "enchantment.create.potato_recovery": "UNLOCALIZED: Potato Recovery", + "enchantment.create.capacity": "容量増加", + "enchantment.create.potato_recovery": "ポテト回収", "entity.create.contraption": "からくり", "entity.create.crafting_blueprint": "クラフトブループリント", @@ -692,20 +692,20 @@ "itemGroup.create.base": "Create", "itemGroup.create.palettes": "Create Palettes", - "death.attack.create.crush": "%1$s は破砕ホイールによって処理されました", - "death.attack.create.crush.player": "UNLOCALIZED: %1$s was thrown into Crushing Wheels by %2$s", - "death.attack.create.fan_fire": "%1$s は熱風で焼死した", - "death.attack.create.fan_fire.player": "UNLOCALIZED: %1$s was thrown into a smoker by %2$s", - "death.attack.create.fan_lava": "%1$s は溶岩ファンによって焼死した", - "death.attack.create.fan_lava.player": "UNLOCALIZED: %1$s was thrown into a smelter by %2$s", - "death.attack.create.mechanical_drill": "%1$s はメカニカルドリルに突き刺さった", - "death.attack.create.mechanical_drill.player": "UNLOCALIZED: %1$s was thrown in front of a Drill by %2$s", - "death.attack.create.mechanical_saw": "%1$s はメカニカルソーで半分にカットされた", - "death.attack.create.mechanical_saw.player": "UNLOCALIZED: %1$s was thrown into a Saw by %2$s", + "death.attack.create.crush": "%1$sは破砕ホイールによって処理された", + "death.attack.create.crush.player": "%1$sは%2$sに破砕ホイールに投入された", + "death.attack.create.fan_fire": "%1$sはケース入りファンによって燻製にされた", + "death.attack.create.fan_fire.player": "%1$sは%2$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.potato_cannon": "%1$sは%2$sのポテトキャノンに撃ち抜かれた", "death.attack.create.potato_cannon.item": "%1$sは%3$sで%2$sに撃た抜かれた", - "death.attack.create.cuckoo_clock_explosion": "%1$s は改ざんされた鳩時計に爆破された", - "death.attack.create.cuckoo_clock_explosion.player": "UNLOCALIZED: %1$s was blown up by tampered cuckoo clock", + "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": "トロッコアセンブラはレールの上にのみ設置できます", @@ -1065,11 +1065,11 @@ "create.item_attributes.in_item_group.inverted": "%1$sに属していないか", "create.item_attributes.added_by": "%1$sによって追加されたか", "create.item_attributes.added_by.inverted": "%1$sによって追加されていないか", - "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": "%1$sシュルカーか", + "create.item_attributes.shulker_level.inverted": "%1$sシュルカーでないか", + "create.item_attributes.shulker_level.full": "満杯の", + "create.item_attributes.shulker_level.empty": "空の", + "create.item_attributes.shulker_level.partial": "一部埋まっている", "create.item_attributes.has_enchant": "エンチャントされているか%1$s", "create.item_attributes.has_enchant.inverted": "エンチャントがされていないか", "create.item_attributes.color": "%1$sで染められているか", @@ -1165,9 +1165,9 @@ "create.tooltip.chute.fans_pull_up": "ファンが上から吸い込んでいます", "create.tooltip.chute.fans_pull_down": "ファンが下から吸い込んでいます", "create.tooltip.chute.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.brass_tunnel.contains": "配布中", + "create.tooltip.brass_tunnel.contains_entry": "> %1$s x%2$s", + "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を押すとこの周波数がそのキーに割り当てられます", @@ -1183,9 +1183,9 @@ "create.crafting_blueprint.secondary_display_slot": "第2表示スロット", "create.crafting_blueprint.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", + "create.potato_cannon.ammo.reload_ticks": "リロード時間(tick): %1$s", + "create.potato_cannon.ammo.knockback": "ノックバック: %1$s", "create.hint.hose_pulley.title": "底なし搬出", "create.hint.hose_pulley": "対象となる液体は無限とみなされています。", @@ -1225,7 +1225,7 @@ "create.subtitle.mechanical_press_activation_belt": "メカニカルプレスがボンと鳴る", "create.subtitle.fwoomp": "ポテトランチャーがバキューンと鳴る", "create.subtitle.worldshaper_place": "ワールドシェーパーが設置する", - "create.subtitle.crushing_1": "UNLOCALIZED: Crushing noises", + "create.subtitle.crushing_1": "粉砕音", "create.subtitle.depot_slide": "アイテムが滑る", "create.subtitle.saw_activate_stone": "メカニカルソーが動作する", "create.subtitle.blaze_munch": "ブレイズの咀嚼音", @@ -1768,7 +1768,7 @@ "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": "UNLOCALIZED: The flame can be transformed using a soul-infused item", + "create.ponder.empty_blaze_burner.text_5": "さらに、魂の宿ったアイテムを使うことで炎を変化させられます", "create.ponder.empty_blaze_burner.text_6": "しかし、これは加工用の熱源には適していません", "create.ponder.encased_fluid_pipe.header": "ケース入り液体パイプ", @@ -2086,7 +2086,7 @@ "create.ponder.nixie_tube.header": "ニキシー管の使い方", "create.ponder.nixie_tube.text_1": "ニキシー管は受けたレッドストーン信号の強度を表示します", "create.ponder.nixie_tube.text_2": "金床で名付けた名札を使って、好きな文字を表示することもできます", - "create.ponder.nixie_tube.text_3": "UNLOCALIZED: Right-Click with Dye to change their display colour", + "create.ponder.nixie_tube.text_3": "染料で右クリックすることで表示の色を変えられます", "create.ponder.piston_pole.header": "ピストン延長ポール", "create.ponder.piston_pole.text_1": "ポールが無いとメカニカルピストンは動きません", diff --git a/src/generated/resources/assets/create/lang/unfinished/ko_kr.json b/src/generated/resources/assets/create/lang/unfinished/ko_kr.json index 4d1f47c8b..2a163cc65 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ko_kr.json +++ b/src/generated/resources/assets/create/lang/unfinished/ko_kr.json @@ -7,8 +7,8 @@ "block.create.acacia_window_pane": "아카시아나무 유리판 ", "block.create.adjustable_chain_gearshift": "벨트 변속기", "block.create.adjustable_crate": "가변 창고", - "block.create.adjustable_pulse_repeater": "가변 펄스 리피터", - "block.create.adjustable_repeater": "가변 리피터", + "block.create.adjustable_pulse_repeater": "가변 펄스 중계기", + "block.create.adjustable_repeater": "가변 중계기", "block.create.analog_lever": "아날로그 레버", "block.create.andesite_belt_funnel": "안산암 퍼널", "block.create.andesite_bricks": "안산암 벽돌", @@ -175,9 +175,9 @@ "block.create.gearshift": "기어쉬프트", "block.create.glass_fluid_pipe": "액체 파이프", "block.create.granite_bricks": "화강암 벽돌", - "block.create.granite_bricks_slab": "화강함 벽돌 반 블록", - "block.create.granite_bricks_stairs": "화강함 벽돌 계단", - "block.create.granite_bricks_wall": "화강함 벽돌 담장", + "block.create.granite_bricks_slab": "화강암 벽돌 반 블록", + "block.create.granite_bricks_stairs": "화강암 벽돌 계단", + "block.create.granite_bricks_wall": "화강암 벽돌 담장", "block.create.granite_cobblestone": "화강암 조약돌", "block.create.granite_cobblestone_slab": "화강암 조약돌 반 블록", "block.create.granite_cobblestone_stairs": "화강암 조약돌 계단", @@ -258,8 +258,8 @@ "block.create.mossy_andesite": "이끼 낀 안산암", "block.create.mossy_dark_scoria": "이끼 낀 짙은 스코리아", "block.create.mossy_diorite": "이끼 낀 섬록암", - "block.create.mossy_dolomite": "이끼낀 백운암", - "block.create.mossy_gabbro": "이끼낀 반려암", + "block.create.mossy_dolomite": "이끼 낀 백운암", + "block.create.mossy_gabbro": "이끼 낀 반려암", "block.create.mossy_granite": "이끼 낀 화강암 벽돌", "block.create.mossy_limestone": "이끼 낀 석회암", "block.create.mossy_scoria": "이끼 낀 스코리아", @@ -355,7 +355,7 @@ "block.create.powered_latch": "레드스톤 걸쇠", "block.create.powered_toggle_latch": "레드스톤 토글 걸쇠", "block.create.pulley_magnet": "도르래 자석", - "block.create.pulse_repeater": "펄스 리피터", + "block.create.pulse_repeater": "펄스 중계기", "block.create.purple_nixie_tube": "보라샥 닉시관", "block.create.purple_sail": "보라색 날개", "block.create.purple_seat": "보라색 좌석", @@ -406,7 +406,7 @@ "block.create.vertical_framed_glass_pane": "수직 유리판", "block.create.warped_window": "뒤틀린 유리창", "block.create.warped_window_pane": "뒤틀린 유리판", - "block.create.water_wheel": "물레방아", + "block.create.water_wheel": "물레바퀴", "block.create.weathered_limestone": "풍화된 석회암", "block.create.weathered_limestone_bricks": "풍화된 석회암 벽돌", "block.create.weathered_limestone_bricks_slab": "풍화된 석회암 벽돌 반 블록", @@ -537,10 +537,10 @@ "advancement.create.its_alive.desc": "당신의 첫 장치가 움직입니다!", "advancement.create.shifting_gears": "톱니바퀴 돌리고!", "advancement.create.shifting_gears.desc": "크기가 다른 톱니바퀴를 연결하여 장치의 속도를 바꿀 수 있습니다.", - "advancement.create.overstressed": "과부화", + "advancement.create.overstressed": "과부하", "advancement.create.overstressed.desc": "피로도의 한계를 경험해보세요.", "advancement.create.belt": "켈프 벨트", - "advancement.create.belt.desc": "두 축에 컨베이어 벨트를 이으세요.", + "advancement.create.belt.desc": "두 축에 벨트를 이으세요.", "advancement.create.tunnel": "벨트 꾸미기", "advancement.create.tunnel.desc": "터널을 이용해 벨트를 꾸며보세요.", "advancement.create.splitter_tunnel": "분할 정복 알고리즘", @@ -548,7 +548,7 @@ "advancement.create.chute": "쏟아져 내려와", "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_kiss": "퍼널는 어떻게 태어나?", @@ -574,10 +574,10 @@ "advancement.create.reinforced": "튼튼 보강!", "advancement.create.reinforced.desc": "축, 파이프, 벨트에 적절한 케이스를 씌우세요.", "advancement.create.water_wheel": "수력 동력화", - "advancement.create.water_wheel.desc": "물레방아를 설치하고 회전하게 만드세요!", - "advancement.create.chocolate_wheel": "초콜릿방아", - "advancement.create.chocolate_wheel.desc": "녹은 초콜릿으로 물레방아를 돌리세요.", - "advancement.create.lava_wheel": "불레방아", + "advancement.create.water_wheel.desc": "물레바퀴를 설치하고 회전하게 만드세요!", + "advancement.create.chocolate_wheel": "초콜릿바퀴", + "advancement.create.chocolate_wheel.desc": "녹은 초콜릿으로 물레바퀴를 돌리세요.", + "advancement.create.lava_wheel": "불레바퀴", "advancement.create.lava_wheel.desc": "용암으로 물레바퀴를 회전하게 만드세ㅇ... 어?", "advancement.create.cuckoo": "벌써 이렇게나 시간이 지났어?", "advancement.create.cuckoo.desc": "뻐꾸기 시계가 잘 시간을 알립니다. 잘 자...", @@ -624,7 +624,7 @@ "advancement.create.chained_item_drain": "구른다!", "advancement.create.chained_item_drain.desc": "아이템이 여러 배수구 위를 굴러가는 것을 보세요.", "advancement.create.glass_pipe": "액체 엿보기", - "advancement.create.glass_pipe.desc": "액체가 창이 달린 파이프를 지나는 것을 보세요. 직선 파이프에 렌치로 우클릭하면 창문이 생깁니다.", + "advancement.create.glass_pipe.desc": "액체가 창이 달린 파이프를 지나는 것을 보세요. 직선 파이프를 렌치로 우클릭하면 창문이 생깁니다.", "advancement.create.pipe_collision": "그 액체를 섞지 마오", "advancement.create.pipe_collision.desc": "액체관에서 두 가지 액체가 만나는 것을 관찰하세요.", "advancement.create.pipe_spill": "누출 사고", @@ -708,7 +708,7 @@ "death.attack.create.cuckoo_clock_explosion.player": "%1$s이(가) 조작된 뻐꾸기 시계에 의해 폭파당했습니다", "create.block.deployer.damage_source_name": "배포기", - "create.block.cart_assembler.invalid": "카트조립기를 레일 위에 설치하세요", + "create.block.cart_assembler.invalid": "카트 조립기를 레일 위에 설치하세요", "create.menu.return": "메뉴로 돌아가기", "create.menu.configure": "설정...", @@ -843,12 +843,12 @@ "create.minecart_coupling.too_far": "광산 수레들이 너무 멀리 떨어져 있습니다", "create.contraptions.movement_mode": "이동 설정", - "create.contraptions.movement_mode.move_place": "멈췄을때 항상 블록이 설치됨", - "create.contraptions.movement_mode.move_place_returned": "멈췄을때 시작 위치에서만 블록이 설치됨", - "create.contraptions.movement_mode.move_never_place": "멈춰도 블록을 설치하지 않음", - "create.contraptions.movement_mode.rotate_place": "멈췄을때 항상 블록이 설치됨", - "create.contraptions.movement_mode.rotate_place_returned": "멈췄을때 시작 위치에서만 블록이 설치됨", - "create.contraptions.movement_mode.rotate_never_place": "멈춰도 블록을 설치하지 않음", + "create.contraptions.movement_mode.move_place": "멈췄을 때 항상 구조물을 설치함", + "create.contraptions.movement_mode.move_place_returned": "멈췄을 때 시작 위치에서만 구조물을 설치함", + "create.contraptions.movement_mode.move_never_place": "멈춰도 구조물을 설치하지 않음", + "create.contraptions.movement_mode.rotate_place": "멈췄을 때 항상 구조물을 설치함", + "create.contraptions.movement_mode.rotate_place_returned": "멈췄을 때 시작 위치에서만 구조물을 설치함", + "create.contraptions.movement_mode.rotate_never_place": "멈춰도 구조물을 설치하지 않음", "create.contraptions.cart_movement_mode": "수레 장치 이동 설정", "create.contraptions.cart_movement_mode.rotate": "구조물이 항상 전방을 향함", "create.contraptions.cart_movement_mode.rotate_paused": "수레가 회전할때 구조물이 행동을 멈춤", @@ -862,8 +862,8 @@ "create.logistics.filter": "필터", "create.logistics.recipe_filter": "조합법 필터", "create.logistics.fluid_filter": "액체 필터", - "create.logistics.firstFrequency": "주파수. #1", - "create.logistics.secondFrequency": "주파수. #2", + "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": "필터에 수량을 적용했습니다.", @@ -960,7 +960,7 @@ "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.1": "[우클릭]으로 현재 지점에 설치합니다.", "create.schematic.tool.print.description.2": "이 도구는 크리에이티브 모드 전용입니다.", "create.schematic.tool.print.description.3": "", "create.schematic.tool.flip.description.0": "당신이 보는 면으로 청사진을 뒤집습니다.", @@ -1090,14 +1090,14 @@ "create.item_attributes.book_copy_second.inverted": "복사본의 복사본이 아님", "create.item_attributes.book_copy_tattered": "낡고 헐었음", "create.item_attributes.book_copy_tattered.inverted": "낡고 헐지 않음", - "create.item_attributes.astralsorcery_crystal": "%1$s 수정 속성을 가진", - "create.item_attributes.astralsorcery_crystal.inverted": "%1$s 수정 속성을 가지고 있지 않은", - "create.item_attributes.astralsorcery_constellation": "%1$s에 조율된", - "create.item_attributes.astralsorcery_constellation.inverted": "%1$s에 조율되지 않은", - "create.item_attributes.astralsorcery_perk_gem": "%1$s 퍽 속성을 가진", - "create.item_attributes.astralsorcery_perk_gem.inverted": "%1$s 퍽 속성을 가지고 있지 않은", - "create.item_attributes.astralsorcery_amulet": "%1$s이(가) 향상된", - "create.item_attributes.astralsorcery_amulet.inverted": "%1$s이(가) 향상되지 않은", + "create.item_attributes.astralsorcery_crystal": "%1$s 수정 속성을 가짐", + "create.item_attributes.astralsorcery_crystal.inverted": "%1$s 수정 속성을 가지고 있지 않음", + "create.item_attributes.astralsorcery_constellation": "%1$s에 조율됨", + "create.item_attributes.astralsorcery_constellation.inverted": "%1$s에 조율되지 않음", + "create.item_attributes.astralsorcery_perk_gem": "%1$s 퍽 속성을 가짐", + "create.item_attributes.astralsorcery_perk_gem.inverted": "%1$s 퍽 속성을 가지고 있지 않음", + "create.item_attributes.astralsorcery_amulet": "%1$s이(가) 향상됨", + "create.item_attributes.astralsorcery_amulet.inverted": "%1$s이(가) 향상되지 않음", "create.gui.attribute_filter.no_selected_attributes": "속성이 선택되지 않음", "create.gui.attribute_filter.selected_attributes": "선택된 속성:", @@ -1188,7 +1188,7 @@ "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.empty_bearing.title": "베어링 업데이트", @@ -1339,7 +1339,7 @@ "item.create.schematic.tooltip": "SCHEMATIC", "item.create.schematic.tooltip.summary": "세계에 구조물을 _홀로그램으로_ 불러와 지정하고 설치합니다. 지정된 홀로그램은 _청사진_ _대포_의 _작업_ _영역_이 됩니다.", - "item.create.schematic.tooltip.condition1": "들고 있을 떄", + "item.create.schematic.tooltip.condition1": "들고 있을 때", "item.create.schematic.tooltip.behaviour1": "UI의 도구로 _변경/설치_ 할 수 있습니다.", "item.create.schematic.tooltip.control1": "웅크린 상태에서 우클릭", "item.create.schematic.tooltip.action1": "정확한 _좌표_ 입력을 위한 창을 엽니다.", @@ -1360,7 +1360,7 @@ "block.create.schematicannon.tooltip": "SCHEMATICANNON", "block.create.schematicannon.tooltip.summary": "장착된 청사진을 바탕으로 블록들을 _발포_합니다. _화약_을 연료로 사용하고 주변 보관함에서 아이템을 사용합니다.", "block.create.schematicannon.tooltip.condition1": "우클릭", - "block.create.schematicannon.tooltip.behaviour1": "을 엽니다.", + "block.create.schematicannon.tooltip.behaviour1": "설정 창을 엽니다.", "block.create.schematic_table.tooltip": "SCHEMATIC TABLE", "block.create.schematic_table.tooltip.summary": "_빈_ _청사진_에 저장된 청사진을 불러옵니다.", @@ -1384,7 +1384,7 @@ "item.create.wrench.tooltip.action2": "_장치_를 _해체_하고 _즉시_ _보관함_으로 넣습니다.", "block.create.nozzle.tooltip": "NOZZLE", - "block.create.nozzle.tooltip.summary": "덮힌 환풍기 _앞_에 붙여 환풍기의 효과를 _전방_으로 _확대_합니다.", + "block.create.nozzle.tooltip.summary": "선풍기 _앞_에 붙여 선풍기의 효과를 _전방향_으로 _확대_합니다.", "block.create.cuckoo_clock.tooltip": "CUCKOO CLOCK", "block.create.cuckoo_clock.tooltip.summary": "_시간의_ _흐름_을 알고 공간을 _꾸미는_ 데 좋은 공예품입니다.", @@ -1423,7 +1423,7 @@ "item.create.sand_paper.tooltip.behaviour1": "_다른 손_에있는 아이템과 _바닥에 있는 아이템_을 윤냅니다.", "item.create.builders_tea.tooltip": "BUILDERS TEA", - "item.create.builders_tea.tooltip.summary": "하루를 시작하기에 좋은 음료입니다. _ 새로운 영감_을 줍니다.", + "item.create.builders_tea.tooltip.summary": "하루를 시작하기에 좋은 음료입니다. _새로운 영감_을 줍니다.", "item.create.refined_radiance.tooltip": "REFINED RADIANCE", "item.create.refined_radiance.tooltip.summary": "_흡수된_ _빛_으로 제련된 색채 혼합물입니다.", @@ -1489,8 +1489,8 @@ "create.ponder.hold_to_ponder": "[%1$s]키를 눌러 분석하기", "create.ponder.subject": "분석의 주제", "create.ponder.pondering": "분석 중입니다...", - "create.ponder.identify_mode": "탐색모드가 활성화되어 있습니다. [%1$s]를 눌러 중지합니다.", - "create.ponder.associated": "연관된 항록들", + "create.ponder.identify_mode": "탐색모드가 활성화되어 있습니다. \n[%1$s]를 눌러 중지합니다.", + "create.ponder.associated": "연관된 항목들", "create.ponder.close": "닫기", "create.ponder.identify": "탐색", "create.ponder.next": "다음 장면", @@ -1511,7 +1511,7 @@ "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.contraption_assembly": "블록 부착 도구", @@ -1539,13 +1539,13 @@ "create.ponder.tag.logistics": "아이템 수송", "create.ponder.tag.logistics.description": "아이템을 옮기는데 도움을 줄 부품입니다.", - "create.ponder.adjustable_pulse_repeater.header": "가변 펄스 리피터를 이용해 신호 조절하기", - "create.ponder.adjustable_pulse_repeater.text_1": "가변 펄스 리피터는 딜레이 이후 짧은 신호를 보냅니다.", + "create.ponder.adjustable_pulse_repeater.header": "가변 펄스 중계기를 이용해 신호 조절하기", + "create.ponder.adjustable_pulse_repeater.text_1": "가변 펄스 중계기는 딜레이 이후 짧은 신호를 보냅니다.", "create.ponder.adjustable_pulse_repeater.text_2": "마우스 휠을 이용하여 딜레이를 조절합니다.", "create.ponder.adjustable_pulse_repeater.text_3": "딜레이는 최대 30분까지 조절할 수 있습니다.", - "create.ponder.adjustable_repeater.header": "가변 리피터를 이용해 신호 조절하기", - "create.ponder.adjustable_repeater.text_1": "가변 리피터는 기존 리피터와 비슷합니다.", + "create.ponder.adjustable_repeater.header": "가변 중계기를 이용해 신호 조절하기", + "create.ponder.adjustable_repeater.text_1": "가변 중계기는 기존 중계기와 비슷합니다.", "create.ponder.adjustable_repeater.text_2": "정해진 딜레이만큼 신호를 주고...", "create.ponder.adjustable_repeater.text_3": "...정해진 딜레이만큼 쉽니다.", "create.ponder.adjustable_repeater.text_4": "마우스 휠을 이용해 딜레이를 조절합니다.", @@ -1571,7 +1571,7 @@ "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": "멈췄을 때, 베어링은 구조물을 가까운 수직 각도로 설치합니다.", @@ -1583,7 +1583,7 @@ "create.ponder.belt_connector.header": "벨트 사용하기", "create.ponder.belt_connector.text_1": "두 축을 벨트로 우클릭하여 연결합니다.", - "create.ponder.belt_connector.text_2": "실수로 선택했다면, 웅크리면서 우클릭하여 취소할 수 있습니다.", + "create.ponder.belt_connector.text_2": "실수로 선택했다면, 웅크리면서 우클릭하여 취소합니다.", "create.ponder.belt_connector.text_3": "벨트에 축을 추가로 넣을 수 있습니다.", "create.ponder.belt_connector.text_4": "벨트로 연결된 축들은 같은 속도, 방향으로 회전합니다.", "create.ponder.belt_connector.text_5": "추가된 축은 렌치로 없앨 수 있습니다.", @@ -1595,7 +1595,7 @@ "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": "움직이는 벨트는 아이템과 엔티티를 옮깁니다.", @@ -1610,8 +1610,8 @@ "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_3": "핕터 슬롯을 스크롤하여 추출 갯수를 조절합니다.", + "create.ponder.brass_funnel.text_4": "필터 슬롯에 아이템을 사용하여 추출할 아이템 종류를 정합니다.", "create.ponder.brass_tunnel.header": "황동 터널 사용하기", "create.ponder.brass_tunnel.text_1": "황동 터널은 벨트를 덮는데 사용할 수 있습니다.", @@ -1624,7 +1624,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_1": "렌치를 이용해, 황동 터널이 어떻게 분배할지 설정합니다.", "create.ponder.brass_tunnel_modes.text_10": "[입력 동기화] 설정은 황동 터널만의 고유 설정입니다.", "create.ponder.brass_tunnel_modes.text_11": "모든 입구에 아이템이 있어야만 통과할 수 있습니다.", "create.ponder.brass_tunnel_modes.text_12": "이 설정은 연결된 모든 벨트에 아이템을 동시에 공급할 수 있습니다.", @@ -1656,7 +1656,7 @@ "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_4": "화로 수레는 부착된 보관함에서 연료를 가져와 스스로 움직입니다.", "create.ponder.chain_drive.header": "체인 드라이브로 회전 전달하기", "create.ponder.chain_drive.text_1": "체인 드라이브는 한 줄로 회전을 전달합니다.", @@ -1672,12 +1672,12 @@ "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_upward.header": "슈트를 이용해 아이템을 위로 옮기기", - "create.ponder.chute_upward.text_1": "선풍기를 위/아래에 설치하면, 슈트는 아이템을 위로 보낼 수 있습니다.", + "create.ponder.chute_upward.text_1": "선풍기를 위/아래에 설치하면, 슈트는 아이템을 위로 보냅니다.", "create.ponder.chute_upward.text_2": "엔지니어의 고글로 슈트를 관찰하여 이동 방향을 확인하세요.", "create.ponder.chute_upward.text_3": "막힌 끝 부분에서 아이템은 옆에서 넣거나 빼내야합니다.", @@ -1708,11 +1708,11 @@ "create.ponder.creative_fluid_tank.text_1": "크리에이티브 탱크는 무한히 액체를 공급합니다.", "create.ponder.creative_fluid_tank.text_2": "액체가 든 용기로 우클릭하여 액체를 채울 수 있습니다.", "create.ponder.creative_fluid_tank.text_3": "파이프로 탱크에서 액체를 무한히 뽑아낼 수 있습니다.", - "create.ponder.creative_fluid_tank.text_4": "크리에이티브 탱크로 들어가는 모든 액체는 삭제됩니다.", + "create.ponder.creative_fluid_tank.text_4": "크리에이티브 탱크로 들어가는 모든 액체는 사라집니다.", "create.ponder.creative_motor.header": "크리에이티브 모터를 이용해 동력 생산하기", "create.ponder.creative_motor.text_1": "크리에이티브 모터는 동력을 쉽게 생산, 조절합니다.", - "create.ponder.creative_motor.text_2": "모터 후면을 스크롤해서 모터의 RPM을 조절할 수 있습니다.", + "create.ponder.creative_motor.text_2": "모터 후면을 스크롤해서 모터의 RPM을 조절합니다.", "create.ponder.crushing_wheels.header": "분쇄 휠을 이용해 아이템 가공하기", "create.ponder.crushing_wheels.text_1": "한 쌍의 분쇄 휠은 아이템을 매우 효과적으로 갈아버립니다.", @@ -1726,8 +1726,8 @@ "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_14": "필터에 맞는 아이템만 들어가며...", + "create.ponder.deployer.text_15": "...그 외의 아이템은 배출됩니다.", "create.ponder.deployer.text_2": "배포기는 한 칸 떨어진 블록에 상호작용합니다.", "create.ponder.deployer.text_3": "바로 앞에 블록이 있어도 상괸없습니다.", "create.ponder.deployer.text_4": "배포기가 할 수 있는 것:", @@ -1738,8 +1738,8 @@ "create.ponder.deployer.text_9": "몹 공격하기", "create.ponder.deployer_contraption.header": "구조물에서의 배포기", - "create.ponder.deployer_contraption.text_1": "배포기가 움직이는 구조물의 일부일 때,", - "create.ponder.deployer_contraption.text_2": "배포기는 움직일 때마다 작동하며, 구조물에 붙어있는 아무 보관함의 아이템을 사용합니다.", + "create.ponder.deployer_contraption.text_1": "배포기가 움직이는 구조물의 일부면...", + "create.ponder.deployer_contraption.text_2": "...배포기는 움직일 때마다 작동하며, 구조물에 붙어있는 아무 보관함의 아이템을 사용합니다.", "create.ponder.deployer_contraption.text_3": "필터를 이용해 어떤 아이템을 사용할 지 정할 수 있습니다.", "create.ponder.deployer_modes.header": "배포기의 작동 방식", @@ -1747,10 +1747,10 @@ "create.ponder.deployer_modes.text_2": "렌치를 이용해, 좌클릭을 흉내내도록 설정할 수 있습니다.", "create.ponder.deployer_processing.header": "배포기로 아이템 가공하기", - "create.ponder.deployer_processing.text_1": "배포기가 맞는 아이템을 가지고 있으면, 아래 있는 아이템을 가공할 수 있습니다.", + "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": "레드스톤 신호를 받으면, 배포기는 작동하지 않습니다.", @@ -1759,12 +1759,12 @@ "create.ponder.depot.header": "아이템 거치대 사용하기", "create.ponder.depot.text_1": "아이템 거치대는 고정된 벨트 역할입니다.", - "create.ponder.depot.text_2": "우클릭해서 아이템을 놓거나 가져갈 수 있습니다.", + "create.ponder.depot.text_2": "우클릭해서 아이템을 놓거나 가져갑니다.", "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_1": "블레이즈를 우클릭하여 버너에 가둡니다.", "create.ponder.empty_blaze_burner.text_2": "또는 스포너에서도 블레이즈를 가둘 수 있습니다.", "create.ponder.empty_blaze_burner.text_3": "이제 당신은 다양한 장치에 쓰일 이상적인 열원을 얻었습니다.", "create.ponder.empty_blaze_burner.text_4": "장식적인 요소로는 라이터로 불을 붙일 수 있습니다.", @@ -1784,30 +1784,30 @@ "create.ponder.fan_processing.text_1": "바람이 용암을 통과하면, 공기가 뜨거워집니다.", "create.ponder.fan_processing.text_2": "바람이 지나가는 자리의 아이템은 구워집니다.", "create.ponder.fan_processing.text_3": "음식은 불타 없어집니다.", - "create.ponder.fan_processing.text_4": "대신, 불을 이용하면 음식을 구울 수 있습니다.", + "create.ponder.fan_processing.text_4": "대신, 불을 이용하면 음식을 굽습니다.", "create.ponder.fan_processing.text_5": "물을 통과하는 바람을 통해 세척할 수 있습니다.", "create.ponder.fan_processing.text_6": "이를 통해 새로운 가공을 할 수 있습니다.", "create.ponder.fan_processing.text_7": "선풍기의 속도는 가공 속도와 관련이 없습니다!", "create.ponder.fan_processing.text_8": "선풍기 가공은 벨트나 아이템 거치대의 아이템에도 적용됩니다.", "create.ponder.fan_source.header": "선풍기를 이용해 동력 생산하기", - "create.ponder.fan_source.text_1": "열원을 향한 선풍기는 동력을 제공할 수 있습니다.", + "create.ponder.fan_source.text_1": "열원을 향한 선풍기는 동력을 제공합니다.", "create.ponder.fan_source.text_2": "레드스톤 신호를 받으면, 동력을 제공하기 시작합니다.", "create.ponder.fluid_pipe_flow.header": "파이프로 액체 옮기기", - "create.ponder.fluid_pipe_flow.text_1": "파이프는 한 종류의 액체만 옮길 수 있습니다.", + "create.ponder.fluid_pipe_flow.text_1": "파이프는 한 종류의 액체만 옮깁니다.", "create.ponder.fluid_pipe_flow.text_2": "렌치를 이용하여 직선 파이프에 창문을 달 수 있습니다.", "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_7": "이렇기 때문에, 파이프는 실질적으로 아무런 액체도 담을 수 없습니다.", + "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": "액체 탱크의 크기", @@ -1829,7 +1829,7 @@ "create.ponder.flywheel.text_3": "용광로를 사용하면 동력 속도가 2배가 됩니다.", "create.ponder.funnel_compat.header": "퍼널 호환성", - "create.ponder.funnel_compat.text_1": "퍼널는 다른 장치들 위에 설치할 수도 있습니다.", + "create.ponder.funnel_compat.text_1": "퍼널은 다른 장치들 위에 설치할 수 있습니다.", "create.ponder.funnel_compat.text_2": "세로 톱", "create.ponder.funnel_compat.text_3": "아이템 거치대", "create.ponder.funnel_compat.text_4": "아이템 배수구", @@ -1848,7 +1848,7 @@ "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": "수평 방향으로는 벨트가 적합합니다.", @@ -1858,8 +1858,8 @@ "create.ponder.furnace_engine.text_3": "용광로를 사용하면 동력 속도가 2배가 됩니다.", "create.ponder.gantry_carriage.header": "갠트리 운반대 사용하기", - "create.ponder.gantry_carriage.text_1": "갠트리 운반대는 갠트리 축 위에서 움직일 수 있습니다.", - "create.ponder.gantry_carriage.text_2": "갠트리 장치는 부착된 블록들을 움직일 수 있습니다.", + "create.ponder.gantry_carriage.text_1": "갠트리 운반대는 갠트리 축 위에서 움직입니다.", + "create.ponder.gantry_carriage.text_2": "갠트리 장치는 부착된 블록들을 움직입니다.", "create.ponder.gantry_cascaded.header": "계단식 갠트리", "create.ponder.gantry_cascaded.text_1": "갠트리 운반대에 접착제 없이 갠트리 축을 붙일 수 있습니다.", @@ -1878,7 +1878,7 @@ "create.ponder.gantry_shaft.header": "갠트리 축 사용하기", "create.ponder.gantry_shaft.text_1": "갠트리 축은 갠트리 장치에 필요합니다. 갠트리 운반대가 축을 따라 움직입니다.", - "create.ponder.gantry_shaft.text_2": "갠트리 장치는 부착된 블록들을 움직일 수 있습니다.", + "create.ponder.gantry_shaft.text_2": "갠트리 장치는 부착된 블록들을 움직입니다.", "create.ponder.gearbox.header": "기어박스를 이용해 동력 전달하기", "create.ponder.gearbox.text_1": "회전축을 변경하는 일은 쉽게 귀찮아집니다.", @@ -1901,13 +1901,13 @@ "create.ponder.hose_pulley.text_2": "동력을 전달하여 호스의 높이를 정합니다.", "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.text_1": "넓은 바다에서 호스 도르래를 작동시키면...", + "create.ponder.hose_pulley_infinite.text_2": "...물 블록을 없애거나 추가하지 않고 액체를 얻거나 버릴 수 있습니다.", "create.ponder.hose_pulley_infinite.text_3": "파이프로 이런 도르래에서 무한한 액체를 얻을 수 있습니다.", "create.ponder.hose_pulley_level.header": "호스 도르래의 채우고 비우는 기준", @@ -1918,14 +1918,14 @@ "create.ponder.hose_pulley_level.text_5": "호스 끝부분 위는 채우지 않습니다.", "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_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.large_cogwheel.header": "큰 톱니바퀴로 동력 전달하기", - "create.ponder.large_cogwheel.text_1": "큰 톱니바퀴는 수직으로 서로 맞물릴 수 있습니다.", + "create.ponder.large_cogwheel.text_1": "큰 톱니바퀴는 수직으로 서로 맞물립니다.", "create.ponder.large_cogwheel.text_2": "이는 다른 축으로 동력을 전달하는데 도움이 됩니다.", "create.ponder.linear_chassis_attachment.header": "직선 섀시를 이용해 블록 붙이기", @@ -1947,7 +1947,7 @@ "create.ponder.mechanical_arm.text_1": "기계 팔은 설치되기 전, 입력부와 출력부를 지정해야 합니다.", "create.ponder.mechanical_arm.text_2": "우클릭으로 보관함을 가진 블록을 대상으로 지정합니다.", "create.ponder.mechanical_arm.text_3": "다시 우클릭하여 입력부(파랑) 출력부(주황)을 설정합니다.", - "create.ponder.mechanical_arm.text_4": "좌클릭하여 대상 선택을 해제할 수 있습니다.", + "create.ponder.mechanical_arm.text_4": "좌클릭하여 대상 선택을 해제합니다.", "create.ponder.mechanical_arm.text_5": "설치된 기계 팔은 이전에 선택된 블록들을 대상으로 정합니다.", "create.ponder.mechanical_arm.text_6": "거리안에 있다면 여러 블록을 지정할 수 있습니다.", "create.ponder.mechanical_arm.text_7": "하지만 모든 보관함을 지닌 블록이 지정되지는 않습니다.", @@ -1964,8 +1964,8 @@ "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_7": "어느 한 곳이 더 전달받을 수 없다면, 그 곳은 넘어갑니다.", @@ -1981,20 +1981,20 @@ "create.ponder.mechanical_bearing.text_1": "베어링은 앞에 있는 블록을 부착시킵니다.", "create.ponder.mechanical_bearing.text_2": "동력을 받으면, 블록들은 회전하는 구조물로 변합니다.", - "create.ponder.mechanical_crafter.header": "기계식 조합기 설치하기", - "create.ponder.mechanical_crafter.text_1": "다수의 기계식 조합기로 모든 조합을 자동화할 수 있습니다.", + "create.ponder.mechanical_crafter.header": "조합기 설치하기", + "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_5": "기계식 조합기는 동력이 요구됩니다.", - "create.ponder.mechanical_crafter.text_6": "앞면을 우클릭해서 직접 아이템을 넣을 수 있습니다.", + "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.text_1": "조합기에 아이템을 자동으로 넣을 수 있습니다.", "create.ponder.mechanical_crafter_connect.text_2": "후면에 렌치를 이용해 조합기 보관함을 연결할 수 있습니다.", - "create.ponder.mechanical_crafter_connect.text_3": "이제 모든 조합기가 한 곳에서 아이템을 받을 수 있습니다.", + "create.ponder.mechanical_crafter_connect.text_3": "이제 모든 조합기가 한 곳에서 아이템을 받습니다.", "create.ponder.mechanical_crafter_covers.header": "조합기 슬롯 덮기", "create.ponder.mechanical_crafter_covers.text_1": "몇몇 조합은 빈 공간을 채워줄 조합기가 필요합니다.", @@ -2006,58 +2006,58 @@ "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_2": "지나가는 길에 있는 작물을 수확하고, 성장 수치를 초기화합니다.", + "create.ponder.mechanical_harvester.text_1": "수확기가 움직이는 구조물의 일부면...", + "create.ponder.mechanical_harvester.text_2": "...지나가는 길에 있는 작물을 수확하고, 성장 수치를 초기화합니다.", "create.ponder.mechanical_mixer.header": "믹서로 아이템 가공하기", "create.ponder.mechanical_mixer.text_1": "믹서와 대야를 이용해 몇몇 조합을 자동화할 수 있습니다.", "create.ponder.mechanical_mixer.text_2": "가능한 조합법은 어느 무형 조합법이나 가능하며, 모드에서 추가된 조합법도 있습니다.", "create.ponder.mechanical_mixer.text_3": "몇몇 조합법은 블레이즈 버너의 열을 요구합니다.", - "create.ponder.mechanical_mixer.text_4": "필터 슬롯을 이용해 조합법이 겹치는 것을 방지할 수 있습니다.", + "create.ponder.mechanical_mixer.text_4": "필터 슬롯을 이용해 조합법이 겹치는 것을 방지합니다.", "create.ponder.mechanical_piston.header": "기계식 피스톤으로 구조물 옮기기", - "create.ponder.mechanical_piston.text_1": "기계식 피스톤은 블록들을 앞으로 움직일 수 있습니다.", + "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_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_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_4": "압착기가 알아서 아이템 이동을 멈추고 가공합니다.", + "create.ponder.mechanical_press.text_3": "아이템이 벨트에 있으면...", + "create.ponder.mechanical_press.text_4": "...압착기가 알아서 아이템 이동을 멈추고 가공합니다.", "create.ponder.mechanical_press_compacting.header": "압착기로 아이템 압축하기", "create.ponder.mechanical_press_compacting.text_1": "대야와 함께 사용해서 아이템을 압축할 수 있습니다.", "create.ponder.mechanical_press_compacting.text_2": "가능한 조합법은 2x2 / 3x3 조합법을 포함하고, 모드에서 추가된 조합법도 있습니다.", "create.ponder.mechanical_press_compacting.text_3": "몇몇 조합법은 블레이즈 버너의 열을 요구합니다.", - "create.ponder.mechanical_press_compacting.text_4": "필터 슬롯을 이용해 조합법이 겹치는 것을 방지할 수 있습니다.", + "create.ponder.mechanical_press_compacting.text_4": "필터 슬롯을 이용해 조합법이 겹치는 것을 방지합니다.", "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": "펌프 방향을 바꾸어 흐름의 뱡향을 통일할 수 있습니다.", @@ -2066,11 +2066,11 @@ "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": "재료가 여러 결과물로 가공될 수 있을 때, 필터로 제한할 수 있습니다.", @@ -2098,8 +2098,8 @@ "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": "구조물 장치의 아이템 교환", @@ -2108,8 +2108,8 @@ "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": "레드스톤 설정", @@ -2117,8 +2117,8 @@ "create.ponder.powered_latch.header": "레드스톤 걸쇠 사용하기", "create.ponder.powered_latch.text_1": "레드스톤 걸쇠는 설정 가능한 레버입니다.", - "create.ponder.powered_latch.text_2": "뒤에서 오는 신호는 걸쇠 신호를 키고,", - "create.ponder.powered_latch.text_3": "옆에서 오는 신호는 걸쇠 신호를 끕니다.", + "create.ponder.powered_latch.text_2": "뒤에서 오는 신호는 걸쇠 신호를 키고...", + "create.ponder.powered_latch.text_3": "...옆에서 오는 신호는 걸쇠 신호를 끕니다.", "create.ponder.powered_latch.text_4": "레드스톤 걸쇠는 직접 끄고 킬 수도 있습니다.", "create.ponder.powered_toggle_latch.header": "레드스톤 토글 걸쇠 사용하기", @@ -2127,8 +2127,8 @@ "create.ponder.powered_toggle_latch.text_3": "혹은 끕니다.", "create.ponder.powered_toggle_latch.text_4": "레드스톤 토글 걸쇠는 직접 끄고 킬 수도 있습니다.", - "create.ponder.pulse_repeater.header": "펄스 리피터 사용하기", - "create.ponder.pulse_repeater.text_1": "펄스 리피터는 어느 레드스톤 신호라도 1틱 신호로 바꿉니다.", + "create.ponder.pulse_repeater.header": "펄스 중계기 사용하기", + "create.ponder.pulse_repeater.text_1": "펄스 중계기는 어느 레드스톤 신호라도 1틱 신호로 바꿉니다.", "create.ponder.radial_chassis.header": "원형 섀시를 이용해 블록 붙이기", "create.ponder.radial_chassis.text_1": "원형 섀시는 다른 원형 섀시와 이어집니다.", @@ -2136,8 +2136,8 @@ "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_6": "접착면에 블록이 있으면...", + "create.ponder.radial_chassis.text_7": "...해당 층 반지름 안에 있는 모든 블록을 연결합니다.", "create.ponder.radial_chassis.text_8": "렌치룰 이용하여, 섀시의 부착 반지름을 조절할 수 있습니다.", "create.ponder.radial_chassis.text_9": "접착면 반지름 밖의 블록은 붙지 않습니다.", @@ -2154,13 +2154,13 @@ "create.ponder.redstone_link.text_6": "맞는 주파수끼리만 레드스톤 링크가 작동합니다.", "create.ponder.rope_pulley.header": "밧줄 도르래로 구조물 옮기기", - "create.ponder.rope_pulley.text_1": "밧줄 도르래는 동력을 받으면 블록을 수직으로 옮길 수 있습니다.", + "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_3": "다만 도르래는 멈춰있을 떄만 작동할 수 있습니다.", + "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": "도르래가 움직임을 멈추면, 움직인 구조물은 블록으로 바뀝니다.", @@ -2211,18 +2211,18 @@ "create.ponder.speedometer.text_3": "속도 계측기의 측정값에 따라 비교기가 레드스톤 신호를 내보냅니다.", "create.ponder.spout_filling.header": "주입기로 아이템에 액체 채우기", - "create.ponder.spout_filling.text_1": "주입기는 아래있는 아이템을 액체를 채울 수 있습니다.", + "create.ponder.spout_filling.text_1": "주입기는 아래있는 아이템을 액체를 채웁니다.", "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_6": "주입기가 알아서 아이템 이동을 멈추고 가공합니다.", + "create.ponder.spout_filling.text_4": "주입기 아래 아이템 거치대에 아이템을 놓아, 액체를 채울 수 있습니다.", + "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_3": "베어링에 블록이 부착되어도,", - "create.ponder.stabilized_bearings.text_4": "부착된 구조물의 방향이 유지됩니다.", + "create.ponder.stabilized_bearings.text_1": "베어링이 움직이는 구조물의 일부분이어도...", + "create.ponder.stabilized_bearings.text_2": "...방향이 유지됩니다.", + "create.ponder.stabilized_bearings.text_3": "베어링에 블록이 부착되어도...", + "create.ponder.stabilized_bearings.text_4": "...부착된 구조물의 방향이 유지됩니다.", "create.ponder.sticker.header": "부착기를 통한 블록 부착", "create.ponder.sticker.text_1": "부착기는 레드스톤으로 제어할 수 있습니다.", @@ -2236,10 +2236,10 @@ "create.ponder.stressometer.text_3": "피로도 계측기의 측정값에 따라 비교기가 레드스톤 신호를 내보냅니다.", "create.ponder.super_glue.header": "강력 접착제로 블록 붙이기", - "create.ponder.super_glue.text_1": "강력 접착제는 두 블록 사이에 사용해 블록을 붙일 수 있습니다.", + "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": "밸브 손잡이로 동력 생산하기", @@ -2256,10 +2256,10 @@ "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.water_wheel.text_3": "바퀴의 날이 물이 흐르는 방향으로 향하게 된다면...", + "create.ponder.water_wheel.text_4": "...회전 속도가 감소하게 됩니다.", "create.ponder.weighted_ejector.header": "투척기 사용하기", "create.ponder.weighted_ejector.text_1": "투척기를 들고 웅크리고 우클릭하면, 발사 지점을 정할 수 있습니다.", @@ -2282,12 +2282,12 @@ "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_2": "날개 블록이 충분히 부착되어야 풍차의 역할을 합니다.", "create.ponder.windmill_source.text_3": "우클릭하면 풍차 베어링이 동력을 생성합니다.", "create.ponder.windmill_source.text_4": "날개 수에 따라 회전 속도가 바뀝니다.", "create.ponder.windmill_source.text_5": "렌치를 들고 스크롤하면 회전 방향을 바꿀 수 있습니다.", diff --git a/src/generated/resources/assets/create/lang/unfinished/ru_ru.json b/src/generated/resources/assets/create/lang/unfinished/ru_ru.json index ea4d7c7d7..9fd00a501 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ru_ru.json +++ b/src/generated/resources/assets/create/lang/unfinished/ru_ru.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 282", + "_": "Missing Localizations: 0", "_": "->------------------------] Game Elements [------------------------<-", @@ -28,12 +28,12 @@ "block.create.belt": "Конвейер", "block.create.birch_window": "Берёзовое окно", "block.create.birch_window_pane": "Панель из берёзового окна", - "block.create.black_nixie_tube": "UNLOCALIZED: Black Nixie Tube", + "block.create.black_nixie_tube": "Чёрный газоразрядный индикатор", "block.create.black_sail": "Чёрный парус", "block.create.black_seat": "Чёрное сиденье", "block.create.black_valve_handle": "Чёрный ручной вентиль", "block.create.blaze_burner": "Горелка Всполоха", - "block.create.blue_nixie_tube": "UNLOCALIZED: Blue Nixie Tube", + "block.create.blue_nixie_tube": "Синий газоразрядный индикатор", "block.create.blue_sail": "Синий парус", "block.create.blue_seat": "Синее сиденье", "block.create.blue_valve_handle": "Синий ручной вентиль", @@ -43,7 +43,7 @@ "block.create.brass_encased_shaft": "Вал в латунном корпусе", "block.create.brass_funnel": "Латунная воронка", "block.create.brass_tunnel": "Латунный туннель", - "block.create.brown_nixie_tube": "UNLOCALIZED: Brown Nixie Tube", + "block.create.brown_nixie_tube": "Коричневый газоразрядный индикатор", "block.create.brown_sail": "Коричневый парус", "block.create.brown_seat": "Коричневое сиденье", "block.create.brown_valve_handle": "Коричневый ручной вентиль", @@ -61,7 +61,7 @@ "block.create.cogwheel": "Шестерня", "block.create.content_observer": "Наблюдатель за содержимым", "block.create.controller_rail": "Контролирующая рельса", - "block.create.copper_backtank": "UNLOCALIZED: Copper Backtank", + "block.create.copper_backtank": "Медный баллон", "block.create.copper_block": "Медный блок", "block.create.copper_casing": "Медный корпус", "block.create.copper_ore": "Медная руда", @@ -76,9 +76,9 @@ "block.create.crushing_wheel": "Колесо дробления", "block.create.crushing_wheel_controller": "Контроллер колеса дробления", "block.create.cuckoo_clock": "Часы с кукушкой", - "block.create.cyan_nixie_tube": "UNLOCALIZED: Cyan Nixie Tube", + "block.create.cyan_nixie_tube": "Бирюзовый газоразрядный индикатор", "block.create.cyan_sail": "Бирюзовый парус", - "block.create.cyan_seat": "Бирюзовое сииденье", + "block.create.cyan_seat": "Бирюзовое сиденье", "block.create.cyan_valve_handle": "Бирюзовый ручной вентиль", "block.create.dark_oak_window": "Окно из тёмного дуба", "block.create.dark_oak_window_pane": "Панель из окна из тёмного дуб", @@ -87,11 +87,11 @@ "block.create.dark_scoria_bricks_slab": "Плита из тёмного пепельного кирпича", "block.create.dark_scoria_bricks_stairs": "Ступени из тёмного пепельного кирпича", "block.create.dark_scoria_bricks_wall": "Стена из тёмного пепельного кирпича", - "block.create.dark_scoria_cobblestone": "Ступени из тёмного пепел-булыжника", - "block.create.dark_scoria_cobblestone_slab": "Плита из тёмного пепел-булыжника", - "block.create.dark_scoria_cobblestone_stairs": "Ступени из тёмного пепел-булыжника", - "block.create.dark_scoria_cobblestone_wall": "Стена из тёмного пепел-булыжника", - "block.create.dark_scoria_pillar": "Колонна из тёмного пепел-булыжника", + "block.create.dark_scoria_cobblestone": "Ступени из тёмного пепельного булыжника", + "block.create.dark_scoria_cobblestone_slab": "Плита из тёмного пепельного булыжника", + "block.create.dark_scoria_cobblestone_stairs": "Ступени из тёмного пепельного булыжника", + "block.create.dark_scoria_cobblestone_wall": "Стена из тёмного пепельного булыжника", + "block.create.dark_scoria_pillar": "Колонна из тёмного пепельного булыжника", "block.create.deployer": "Автономный активатор", "block.create.depot": "Депо", "block.create.diorite_bricks": "Диоритовый кирпич", @@ -169,8 +169,8 @@ "block.create.gabbro_cobblestone_stairs": "Ступени из габбро-булыжника", "block.create.gabbro_cobblestone_wall": "Стена из габбро-булыжника", "block.create.gabbro_pillar": "Габбро колонна", - "block.create.gantry_carriage": "Портальное шасси", - "block.create.gantry_shaft": "Портальный вал", + "block.create.gantry_carriage": "Шасси портального крана", + "block.create.gantry_shaft": "Вал портального крана", "block.create.gearbox": "Коробка передач", "block.create.gearshift": "Реверсивный механизм", "block.create.glass_fluid_pipe": "Стеклянная жидкостная труба", @@ -183,16 +183,16 @@ "block.create.granite_cobblestone_stairs": "Ступени из гранит-булыжника", "block.create.granite_cobblestone_wall": "Стена из гранит-булыжника", "block.create.granite_pillar": "Гранитная колонна", - "block.create.gray_nixie_tube": "UNLOCALIZED: Gray Nixie Tube", + "block.create.gray_nixie_tube": "Серый газоразрядный индикатор", "block.create.gray_sail": "Серый парус", "block.create.gray_seat": "Серое сиденье", "block.create.gray_valve_handle": "Серый ручной вентиль", - "block.create.green_nixie_tube": "UNLOCALIZED: Green Nixie Tube", + "block.create.green_nixie_tube": "Зелёный газоразрядный индикатор", "block.create.green_sail": "Зелёный парус", "block.create.green_seat": "Зелёное сиденье", "block.create.green_valve_handle": "Зелёный ручной вентиль", "block.create.hand_crank": "Рукоятка", - "block.create.haunted_bell": "UNLOCALIZED: Haunted Bell", + "block.create.haunted_bell": "Призрачный колокол", "block.create.honey": "Мёд", "block.create.horizontal_framed_glass": "Горизонтальное обрамлённое стекло", "block.create.horizontal_framed_glass_pane": "Горизонтальная обрамлённая стеклянная панель", @@ -210,16 +210,16 @@ "block.create.layered_limestone": "Слоистый известняк", "block.create.layered_scoria": "Слоистый пепел", "block.create.layered_weathered_limestone": "Слоистый выветренный известняк", - "block.create.lectern_controller": "UNLOCALIZED: Lectern Controller", - "block.create.light_blue_nixie_tube": "UNLOCALIZED: Light Blue Nixie Tube", + "block.create.lectern_controller": "Контроллер кафедры", + "block.create.light_blue_nixie_tube": "Голубой газоразрядный индикатор", "block.create.light_blue_sail": "Голубой парус", "block.create.light_blue_seat": "Голубое сиденье", "block.create.light_blue_valve_handle": "Голубой ручной вентиль", - "block.create.light_gray_nixie_tube": "UNLOCALIZED: Light Gray Nixie Tube", + "block.create.light_gray_nixie_tube": "Светло-серый газоразрядный индикатор", "block.create.light_gray_sail": "Светло-серый парус", "block.create.light_gray_seat": "Светло-серое сиденье", "block.create.light_gray_valve_handle": "Светло-серый ручной вентиль", - "block.create.lime_nixie_tube": "UNLOCALIZED: Lime Nixie Tube", + "block.create.lime_nixie_tube": "Лаймовый газоразрядный индикатор", "block.create.lime_sail": "Лаймовый парус", "block.create.lime_seat": "Лаймовое сиденье", "block.create.lime_valve_handle": "Лаймовый ручной вентиль", @@ -236,13 +236,13 @@ "block.create.limestone_pillar": "Известковая колонна", "block.create.linear_chassis": "Линейное шасси", "block.create.lit_blaze_burner": "Зажжённая горелка Всполоха", - "block.create.magenta_nixie_tube": "UNLOCALIZED: Magenta Nixie Tube", + "block.create.magenta_nixie_tube": "Пурпурный газоразрядный индикатор", "block.create.magenta_sail": "Пурпурный парус", "block.create.magenta_seat": "Пурпурное сиденье", "block.create.magenta_valve_handle": "Пурпурный ручной вентиль", "block.create.mechanical_arm": "Механическая рука", "block.create.mechanical_bearing": "Механический вращатель", - "block.create.mechanical_crafter": "Механический создатель", + "block.create.mechanical_crafter": "Механический крафтер", "block.create.mechanical_drill": "Механическая дрель", "block.create.mechanical_harvester": "Механический комбайн", "block.create.mechanical_mixer": "Механический смешиватель", @@ -320,8 +320,8 @@ "block.create.paved_weathered_limestone_slab": "Плита из мощёного выветренного известняка", "block.create.paved_weathered_limestone_stairs": "Ступени из мощёного выветренного известняка", "block.create.paved_weathered_limestone_wall": "Стена из мощёного выветренного известняка", - "block.create.peculiar_bell": "UNLOCALIZED: Peculiar Bell", - "block.create.pink_nixie_tube": "UNLOCALIZED: Pink Nixie Tube", + "block.create.peculiar_bell": "Особенный колокол", + "block.create.pink_nixie_tube": "Розовый газоразрядный индикатор", "block.create.pink_sail": "Розовый парус", "block.create.pink_seat": "Розовое сиденье", "block.create.pink_valve_handle": "Розовый ручной вентиль", @@ -335,9 +335,9 @@ "block.create.polished_dolomite_stairs": "Ступени из полированного доломита", "block.create.polished_dolomite_wall": "Стена из полированного доломита", "block.create.polished_gabbro": "Полированный габбро", - "block.create.polished_gabbro_slab": "Плита из полированного габро", - "block.create.polished_gabbro_stairs": "Ступени из полированного габро", - "block.create.polished_gabbro_wall": "Стена из полированного габро", + "block.create.polished_gabbro_slab": "Плита из полированного габбро", + "block.create.polished_gabbro_stairs": "Ступени из полированного габбро", + "block.create.polished_gabbro_wall": "Стена из полированного габбро", "block.create.polished_limestone": "Полированный известняк", "block.create.polished_limestone_slab": "Плита из полированного известняка", "block.create.polished_limestone_stairs": "Ступени из полированного известняка", @@ -352,21 +352,21 @@ "block.create.polished_weathered_limestone_wall": "Стена из полированного выветренного известняка", "block.create.portable_fluid_interface": "Портативный жидкостный интерфейс", "block.create.portable_storage_interface": "Портативный интерфейс хранения", - "block.create.powered_latch": "Механизированная защёлка", - "block.create.powered_toggle_latch": "Механизированный рычаг-защёлка", + "block.create.powered_latch": "Питаемый рычаг", + "block.create.powered_toggle_latch": "Питаемый рычаг-переключатель", "block.create.pulley_magnet": "Магнитный шкив", "block.create.pulse_repeater": "Импульсный повторитель", - "block.create.purple_nixie_tube": "UNLOCALIZED: Purple Nixie Tube", + "block.create.purple_nixie_tube": "Фиолетовый газоразрядный индикатор", "block.create.purple_sail": "Фиолетовый парус", "block.create.purple_seat": "Фиолетовое сиденье", "block.create.purple_valve_handle": "Фиолетовый ручной вентиль", "block.create.radial_chassis": "Радиальное шасси", - "block.create.red_nixie_tube": "UNLOCALIZED: Red Nixie Tube", + "block.create.red_nixie_tube": "Красный газоразрядный индикатор", "block.create.red_sail": "Красный парус", "block.create.red_seat": "Красное сиденье", "block.create.red_valve_handle": "Красный ручной вентиль", - "block.create.redstone_contact": "Редстоун Контакт", - "block.create.redstone_link": "Редстоун Передатчик", + "block.create.redstone_contact": "Контакт редстоун сигнала", + "block.create.redstone_link": "Беспроводной передатчик редстоун сигнала", "block.create.refined_radiance_casing": "Сияющий корпус", "block.create.reinforced_rail": "Усиленные рельсы", "block.create.rope": "Канат", @@ -380,10 +380,10 @@ "block.create.scoria_bricks_slab": "Плита из пепельного кирпича", "block.create.scoria_bricks_stairs": "Ступени из пепельного кирпича", "block.create.scoria_bricks_wall": "Стена из пепельного кирпича", - "block.create.scoria_cobblestone": "Пепел-булыжник", - "block.create.scoria_cobblestone_slab": "Плита из пепел-булыжника", - "block.create.scoria_cobblestone_stairs": "Ступени из пепел-булыжника", - "block.create.scoria_cobblestone_wall": "Стена из пепел-булыжника", + "block.create.scoria_cobblestone": "Пепельный булыжник", + "block.create.scoria_cobblestone_slab": "Плита из пепельного булыжника", + "block.create.scoria_cobblestone_stairs": "Ступени из пепельного булыжника", + "block.create.scoria_cobblestone_wall": "Стена из пепельного булыжника", "block.create.scoria_pillar": "Колонна из пепла", "block.create.secondary_linear_chassis": "Вторичное линейное шасси", "block.create.sequenced_gearshift": "Последовательный переключатель передач", @@ -418,26 +418,26 @@ "block.create.weathered_limestone_cobblestone_wall": "Стена из известняк-булыжника", "block.create.weathered_limestone_pillar": "Колонна из выветренного известняка", "block.create.weighted_ejector": "Взвешенная катапульта", - "block.create.white_nixie_tube": "UNLOCALIZED: White Nixie Tube", + "block.create.white_nixie_tube": "Белый газоразрядный индикатор", "block.create.white_sail": "Белый парус", "block.create.white_seat": "Белое сиденье", "block.create.white_valve_handle": "Белый ручной вентиль", "block.create.windmill_bearing": "Подшипник ветряной мельницы", "block.create.wooden_bracket": "Деревянная скоба", - "block.create.yellow_nixie_tube": "UNLOCALIZED: Yellow Nixie Tube", + "block.create.yellow_nixie_tube": "Жёлтый газоразрядный индикатор", "block.create.yellow_sail": "Жёлтый парус", "block.create.yellow_seat": "Жёлтое сиденье", "block.create.yellow_valve_handle": "Жёлтый ручной вентиль", "block.create.zinc_block": "Цинковый блок", "block.create.zinc_ore": "Цинковая руда", - "enchantment.create.capacity": "UNLOCALIZED: Capacity", - "enchantment.create.potato_recovery": "UNLOCALIZED: Potato Recovery", + "enchantment.create.capacity": "Вместимость", + "enchantment.create.potato_recovery": "Возобновление картофеля", "entity.create.contraption": "Штуковина", - "entity.create.crafting_blueprint": "UNLOCALIZED: Crafting Blueprint", + "entity.create.crafting_blueprint": "Создание чертежа", "entity.create.gantry_contraption": "Крановая штуковина", - "entity.create.potato_projectile": "UNLOCALIZED: Potato Projectile", + "entity.create.potato_projectile": "Картофельный снаряд", "entity.create.seat": "Сиденье", "entity.create.stationary_contraption": "Стационарная штуковина", "entity.create.super_glue": "Супер-клей", @@ -457,18 +457,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": "UNLOCALIZED: Copper Backtank", + "item.create.copper_backtank": "Медный баллон", "item.create.copper_ingot": "Медный слиток", "item.create.copper_nugget": "Кусочек меди", "item.create.copper_sheet": "Медный лист", "item.create.crafter_slot_cover": "Крышка на слот крафтера", - "item.create.crafting_blueprint": "UNLOCALIZED: Crafting Blueprint", - "item.create.crushed_aluminum_ore": "Измельчённая алюминиевая руда", + "item.create.crafting_blueprint": "Создание чертежа", + "item.create.crushed_aluminum_ore": "Дроблёная алюминиевая руда", "item.create.crushed_brass": "Дроблёная латунь", "item.create.crushed_copper_ore": "Дроблёная медная руда", "item.create.crushed_gold_ore": "Дроблёная золотая руда", @@ -478,7 +478,7 @@ "item.create.crushed_osmium_ore": "Дроблёная осмиевая руда", "item.create.crushed_platinum_ore": "Дроблёная платиновая руда", "item.create.crushed_quicksilver_ore": "Дроблёная ртутная руда", - "item.create.crushed_silver_ore": "Дроблёная серебрянная руда", + "item.create.crushed_silver_ore": "Дроблёная серебряная руда", "item.create.crushed_tin_ore": "Дроблёная оловянная руда", "item.create.crushed_uranium_ore": "Дроблёная урановая руда", "item.create.crushed_zinc_ore": "Дроблёная цинковая руда", @@ -486,27 +486,27 @@ "item.create.diving_helmet": "Шлем для дайвинга", "item.create.dough": "Тесто", "item.create.electron_tube": "Электронная лампа", - "item.create.empty_blaze_burner": "Пустая горелека Всполоха", + "item.create.empty_blaze_burner": "Пустая горелка Всполоха", "item.create.empty_schematic": "Пустая схематика", "item.create.extendo_grip": "Удлинённая рука", "item.create.filter": "Фильтр", - "item.create.furnace_minecart_contraption": "Печно-вагонеточная штуковина", + "item.create.furnace_minecart_contraption": "Штуковина самоходной вагонетки", "item.create.goggles": "Инженерные очки", "item.create.golden_sheet": "Золотой лист", "item.create.handheld_worldshaper": "Ручной редактор мира", "item.create.honey_bucket": "Ведро мёда", "item.create.honeyed_apple": "Яблоко в меду", - "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": "Незаконченная шестерня", + "item.create.incomplete_large_cogwheel": "Незаконченная большая шестерня", + "item.create.incomplete_precision_mechanism": "Незаконченный механизм точности", "item.create.iron_sheet": "Железный лист", - "item.create.linked_controller": "Связанный контроллер", + "item.create.linked_controller": "Контроллер связей", "item.create.minecart_contraption": "Вагонеточная штуковина", - "item.create.minecart_coupling": "Связыватель вагонеток", + "item.create.minecart_coupling": "Соединитель вагонеток", "item.create.polished_rose_quartz": "Полированный розовый кварц", - "item.create.potato_cannon": "UNLOCALIZED: Potato Cannon", + "item.create.potato_cannon": "Картофельная пушка", "item.create.powdered_obsidian": "Порошкообразный обсидиан", - "item.create.precision_mechanism": "UNLOCALIZED: Precision Mechanism", + "item.create.precision_mechanism": "Механизм точности", "item.create.propeller": "Пропеллер", "item.create.red_sand_paper": "Красная наждачная бумага", "item.create.refined_radiance": "Изысканное сияние", @@ -534,9 +534,9 @@ "advancement.create.andesite_alloy": "Повторение - мать учения", "advancement.create.andesite_alloy.desc": "Материалы Create имеют странные названия, одно из них - Андезитовый сплав", "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.belt": "Передайте за проезд!", @@ -552,9 +552,9 @@ "advancement.create.belt_funnel": "Болтающиеся воронки", "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.desc": "Оседлайте поток воздуха от Вентилятора.", "advancement.create.fan_lava": "Геотермальный пространственный нагреватель", "advancement.create.fan_lava.desc": "Попадите в поток воздуха, плавящего вещи.", "advancement.create.fan_water": "Сумасшедшая мойка", @@ -564,19 +564,19 @@ "advancement.create.wrench": "Конфигурировать удобно", "advancement.create.wrench.desc": "Создайте гаечный ключ, чтобы помочь себе в создании изобретений.", "advancement.create.goggles": "Стресс-о-зрение", - "advancement.create.goggles.desc": "Создайте инженерные очки, чтобы получить больше кинетической информации о компонентах.", + "advancement.create.goggles.desc": "Создайте инженерные очки, чтобы получить больше информации о кинетике компонентов.", "advancement.create.speedometer": "Так быстро?", "advancement.create.speedometer.desc": "Поставьте и подключите спидометр. Посмотрите на спидометр через очки, чтобы прочитать точное значение.", "advancement.create.stressometer": "Так сильно?", "advancement.create.stressometer.desc": "Поставьте и подключите стрессометр. Посмотрите на стрессометр через очки, чтобы прочитать точное значение.", "advancement.create.aesthetics": "Бах! Эстетично!", - "advancement.create.aesthetics.desc": "Разместите скобы на валу, трубе или шестерне.", + "advancement.create.aesthetics.desc": "Разместите скобы на вал, трубу или шестерню.", "advancement.create.reinforced": "Бах! Усилено!", "advancement.create.reinforced.desc": "Разместите подходящий блок корпуса на вал, трубу и конвейер.", - "advancement.create.water_wheel": "Гидравлика", + "advancement.create.water_wheel": "Обузданная гидравлика", "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.cuckoo": "Уже?", @@ -589,12 +589,12 @@ "advancement.create.maxed_windmill.desc": "Соберите ветряную мельницу максимальной силы.", "advancement.create.andesite_casing": "Андезитовый век", "advancement.create.andesite_casing.desc": "Используйте немного андезитового сплава и дерева для создания корпуса.", - "advancement.create.mechanical_drill": "Стационарные выключатели", + "advancement.create.mechanical_drill": "Стационарные разрушители", "advancement.create.mechanical_drill.desc": "Установите и приведите в действие механическую дрель", "advancement.create.press": "Пресс делает «Бонк!»", "advancement.create.press.desc": "Приведите механический пресс в действие и используйте его для создания пластин.", "advancement.create.polished_rose_quartz": "Розовый алмаз", - "advancement.create.polished_rose_quartz.desc": "Используйте кусок наждачной бумаги, чтобы отполировать розовый кварц, пока он не станет прозрачным.", + "advancement.create.polished_rose_quartz.desc": "Используйте кусок наждачной бумаги, чтобы отполировать розовый кварц, пока он не станет глянцевым.", "advancement.create.electron_tube": "Бип бип", "advancement.create.electron_tube.desc": "Сделайте несколько электронных ламп, пригодных для изготовления менее примитивных машин.", "advancement.create.mechanical_saw": "Стационарная рубка", @@ -607,7 +607,7 @@ "advancement.create.blaze_burner.desc": "Получить Горелку Всполоха", "advancement.create.compact": "Автоматическое уплотнение", "advancement.create.compact.desc": "Используйте пресс и чашу для уплотнения некоторых предметов.", - "advancement.create.brass": "Действительный сплав", + "advancement.create.brass": "Реальный сплав", "advancement.create.brass.desc": "Используйте дроблёную медь и дроблёный цинк, чтобы создать немного латуни.", "advancement.create.brass_casing": "Бронзовый век", "advancement.create.brass_casing.desc": "Используйте только что полученную латунь и немного дерева, чтобы создать более продвинутый корпус.", @@ -623,7 +623,7 @@ "advancement.create.item_drain.desc": "Посмотрите как жидкость выкачивается из предмета, в Предметном осушителе.", "advancement.create.chained_item_drain": "Поехали!", "advancement.create.chained_item_drain.desc": "Наблюдайте за тем как предмет едет через несколько соединённых предметных осушителей.", - "advancement.create.glass_pipe": "Поточный шпион", + "advancement.create.glass_pipe": "Шпион за потоками", "advancement.create.glass_pipe.desc": "Наблюдайте через окно в трубе за тем как распространяется жидкость. Окно появится на трубе при использовании гаечного ключа.", "advancement.create.pipe_collision": "Никогда не скрещивайте потоки!", "advancement.create.pipe_collision.desc": "Наблюдайте за тем как две жидкости встречаются в вашей сети труб.", @@ -636,7 +636,7 @@ "advancement.create.infinite_lava": "Уничтожение ядра", "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.clockwork_bearing": "Хитрые часы", @@ -651,18 +651,18 @@ "advancement.create.flywheel.desc": "Успешно соедините двигатель с маховиком.", "advancement.create.overstress_flywheel": "Перенапряжение", "advancement.create.overstress_flywheel.desc": "Подайте слишком большую нагрузку на печной двигатель.", - "advancement.create.precision_mechanism": "UNLOCALIZED: Complex Curiosities", - "advancement.create.precision_mechanism.desc": "UNLOCALIZED: Assemble a Precision Mechanism.", + "advancement.create.precision_mechanism": "Сложные любопытства.", + "advancement.create.precision_mechanism.desc": "Создайте механизм точности.", "advancement.create.mechanical_arm": "Золотые руки!", - "advancement.create.mechanical_arm.desc": "Создайте Механическую руку, выбирете входы и выходы, установите в мире и запитайте. Затем смотрите как она делает за вас всю работу.", + "advancement.create.mechanical_arm.desc": "Создайте Механическую руку, выберите входы и выходы, установите в мире и запитайте. Затем смотрите как она делает за вас всю работу.", "advancement.create.musical_arm": "Сбацай что-нибудь!", "advancement.create.musical_arm.desc": "Посмотрите как механическая рука меняет пластинки.", - "advancement.create.arm_many_targets": "Организатор", + "advancement.create.arm_many_targets": "Организа-трон", "advancement.create.arm_many_targets.desc": "Запрограммируйте механическую руку на 10 и больше выходов.", - "advancement.create.arm_blaze_burner": "Поджигатель", + "advancement.create.arm_blaze_burner": "Поджигателе-трон", "advancement.create.arm_blaze_burner.desc": "Запрограммируйте механическую руку на кормление Горелки Всполоха.", "advancement.create.fist_bump": "Брось это, братан!", - "advancement.create.fist_bump.desc": "Сделайте два удара кулаком.", + "advancement.create.fist_bump.desc": "Сделайте два удара кулаками Автономных активаторов.", "advancement.create.crushing_wheel": "Пара гигантов", "advancement.create.crushing_wheel.desc": "Создайте несколько дробящих колес, чтобы более эффективно разрушать больше материалов.", "advancement.create.blaze_cake": "Сахарная лихорадка", @@ -677,11 +677,11 @@ "advancement.create.chromatic_age.desc": "Создайте блоки корпуса из света и тьмы.", "advancement.create.wand_of_symmetry": "Сияющие зеркала", "advancement.create.wand_of_symmetry.desc": "Создайте жезл симметрии.", - "advancement.create.extendo_grip": "Кипение!", + "advancement.create.extendo_grip": "Бойоиоинг!", "advancement.create.extendo_grip.desc": "Возьмите в руки удлинённую руку", - "advancement.create.potato_cannon": "UNLOCALIZED: Fwoomp!", - "advancement.create.potato_cannon.desc": "UNLOCALIZED: Defeat an enemy with your Potato Cannon.", - "advancement.create.dual_extendo_grip": "Окончательное выкипание", + "advancement.create.potato_cannon": "Свомп!", + "advancement.create.potato_cannon.desc": "Победите врага с помощью своей картофельной пушки!", + "advancement.create.dual_extendo_grip": "Время ультимативных пружин", "advancement.create.dual_extendo_grip.desc": "Две удлинённых руки для сверхчеловеческого охвата.", "advancement.create.eob": "Конец бета-версии", "advancement.create.eob.desc": "Ожидайте больше контента здесь в будущем. <3", @@ -693,30 +693,30 @@ "itemGroup.create.palettes": "Create: Декор", "death.attack.create.crush": "%1$s был передроблен", - "death.attack.create.crush.player": "UNLOCALIZED: %1$s was thrown into Crushing Wheels by %2$s", + "death.attack.create.crush.player": "%2$s столкнул %1$s в дробящие колёса", "death.attack.create.fan_fire": "%1$s был сожжен до смерти горячим воздухом", - "death.attack.create.fan_fire.player": "UNLOCALIZED: %1$s was thrown into a smoker by %2$s", + "death.attack.create.fan_fire.player": "%2$s столкнул %1$s в коптильню", "death.attack.create.fan_lava": "%1$s был сожжен до смерти поклонником лавы", - "death.attack.create.fan_lava.player": "UNLOCALIZED: %1$s was thrown into a smelter by %2$s", - "death.attack.create.mechanical_drill": "%1$s был пронзен с помощью механической дрели", - "death.attack.create.mechanical_drill.player": "UNLOCALIZED: %1$s was thrown in front of a Drill by %2$s", + "death.attack.create.fan_lava.player": "%2$s столкнул %1$s в плавильню", + "death.attack.create.mechanical_drill": "%1$s был пронзён механической дрелью", + "death.attack.create.mechanical_drill.player": "%2$s толкнул %1$s под механическую дрель", "death.attack.create.mechanical_saw": "%1$s был разрезан пополам механической пилой", - "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": "%2$s толкнул %1$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": "UNLOCALIZED: %1$s was blown up by tampered cuckoo clock", + "death.attack.create.cuckoo_clock_explosion.player": "%1$s был взорван подделанными часами с кукушкой", "create.block.deployer.damage_source_name": "автономным активатором", "create.block.cart_assembler.invalid": "Поместите сборщик вагонеток на блок рельс", - "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": "Вернуться в меню", + "create.menu.configure": "Настроить...", + "create.menu.ponder_index": "Содержание размышлений", + "create.menu.only_ingame": "Доступно в меню Паузы", + "create.menu.project_page": "Страница проекта", + "create.menu.report_bugs": "Сообщите об ошибке", + "create.menu.support": "Поддержите нас", "create.recipe.crushing": "Измельчение", "create.recipe.milling": "Помол", @@ -728,7 +728,7 @@ "create.recipe.fan_blasting.fan": "Вентилятор за текущей лавой", "create.recipe.pressing": "Прессование", "create.recipe.mixing": "Смешивание", - "create.recipe.deploying": "UNLOCALIZED: Deploying", + "create.recipe.deploying": "Автономная активация", "create.recipe.automatic_shapeless": "Автоматическая бесформенная сборка", "create.recipe.automatic_brewing": "Автоматическое смешивание", "create.recipe.packing": "Прессование", @@ -742,16 +742,16 @@ "create.recipe.mystery_conversion": "Хроматический метаморфоз", "create.recipe.spout_filling": "Заполнение дозатором", "create.recipe.draining": "Осушение предметов", - "create.recipe.sequenced_assembly": "UNLOCALIZED: Sequenced Assembly", - "create.recipe.assembly.next": "UNLOCALIZED: Next: %1$s", - "create.recipe.assembly.step": "UNLOCALIZED: Step %1$s:", - "create.recipe.assembly.progress": "UNLOCALIZED: Progress: %1$s/%2$s", - "create.recipe.assembly.pressing": "UNLOCALIZED: Process in Press", - "create.recipe.assembly.spout_filling_fluid": "UNLOCALIZED: Spout %1$s", - "create.recipe.assembly.deploying_item": "UNLOCALIZED: Deploy %1$s", - "create.recipe.assembly.cutting": "UNLOCALIZED: Cut with Saw", - "create.recipe.assembly.repeat": "UNLOCALIZED: Repeat Sequence %1$s Times", - "create.recipe.assembly.junk": "UNLOCALIZED: Random salvage", + "create.recipe.sequenced_assembly": "Последовательная сборка", + "create.recipe.assembly.next": "Следующее: %1$s", + "create.recipe.assembly.step": "Шаг %1$s:", + "create.recipe.assembly.progress": "Прогресс: %1$s/%2$s", + "create.recipe.assembly.pressing": "Обработайте в Прессе", + "create.recipe.assembly.spout_filling_fluid": "Долейте %1$s", + "create.recipe.assembly.deploying_item": "Добавьте %1$s", + "create.recipe.assembly.cutting": "Разрежьте пилой", + "create.recipe.assembly.repeat": "Повторите последовательность %1$s раз", + "create.recipe.assembly.junk": "Случайный мусор", "create.recipe.processing.chance": "%1$s%% шанса", "create.recipe.heat_requirement.none": "Не требует нагрева", "create.recipe.heat_requirement.heated": "Нагрето", @@ -805,15 +805,15 @@ "create.orientation.alongX": "Вдоль X", "create.gui.terrainzapper.title": "Ручной редактор мира", - "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": "Следование диагоналям", + "create.gui.terrainzapper.searchFuzzy": "Игнорировать границы материала", + "create.gui.terrainzapper.patternSection": "Шаблон", + "create.gui.terrainzapper.pattern.solid": "Сплошной", + "create.gui.terrainzapper.pattern.checkered": "Шахматный порядок", + "create.gui.terrainzapper.pattern.inversecheckered": "Обратный шахматный порядок", + "create.gui.terrainzapper.pattern.chance25": "25% заполнение", + "create.gui.terrainzapper.pattern.chance50": "50% заполнение", + "create.gui.terrainzapper.pattern.chance75": "75% заполнение", "create.gui.terrainzapper.placement": "Размещение", "create.gui.terrainzapper.placement.merged": "Слитый", "create.gui.terrainzapper.placement.attached": "Прикреплённый", @@ -838,7 +838,7 @@ "create.minecart_coupling.two_couplings_max": "Вагонетки могут иметь только две связи", "create.minecart_coupling.unloaded": "Кажется, часть вашего поезда в незагруженных чанках", - "create.minecart_coupling.no_loops": "Связыватели не могут образовывать петлю", + "create.minecart_coupling.no_loops": "Соединители не могут образовывать петлю", "create.minecart_coupling.removed": "Убраны все связи между вагонетками", "create.minecart_coupling.too_far": "Вагонетки слишком далеко друг от друга", @@ -865,7 +865,7 @@ "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_click_again": "Фильтр применён к %1$s, кликните еще раз, чтобы скопировать количество.", "create.logistics.filter.apply_count": "Применено извлекаемое количество к фильтру.", "create.gui.goggles.generator_stats": "Статистика генератора:", @@ -878,7 +878,7 @@ "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": "Слишком много Удлинителей прикреплено к этому Поршню.\nThe configured maximum is: %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.gauge.info_header": "Калибровочная информация:", @@ -887,7 +887,7 @@ "create.gui.stressometer.capacity": "Оставшаяся ёмкость", "create.gui.stressometer.overstressed": "Перегрузка", "create.gui.stressometer.no_rotation": "Нет вращения", - "create.gui.contraptions.not_fast_enough": "Похоже, что этот %1$s _не_ вращается с_достаточной_ _скоростью_.", + "create.gui.contraptions.not_fast_enough": "Похоже, что этот %1$s _не_ вращается с _достаточной_ _скоростью_.", "create.gui.contraptions.network_overstressed": "Похоже, что эта штуковина _перегружена_. Добавьте больше источников или _понизьте_ _скорость_ компонентов, _создающих_ высокую _нагрузку_.", "create.gui.adjustable_crate.title": "Регулируемый ящик", "create.gui.adjustable_crate.storageSpace": "Ёмкость", @@ -908,7 +908,7 @@ "create.gui.sequenced_gearshift.instruction.delay.duration": "Длительность", "create.gui.sequenced_gearshift.instruction.end.descriptive": "Конец", "create.gui.sequenced_gearshift.instruction.end": "Конец", - "create.gui.sequenced_gearshift.instruction.await.descriptive": "Ожидать нового Импульса Редстоун Сигнала", + "create.gui.sequenced_gearshift.instruction.await.descriptive": "Ожидать нового Импульса редстоун Сигнала", "create.gui.sequenced_gearshift.instruction.await": "Ожидать", "create.gui.sequenced_gearshift.speed": "Скорость, Направление", "create.gui.sequenced_gearshift.speed.forward": "Скорость ввода, вперед", @@ -933,7 +933,7 @@ "create.schematic.rotation.cw90": "По час. стрелке 90", "create.schematic.rotation.cw180": "По час. стрелке 180", "create.schematic.rotation.cw270": "По час. стрелке 270", - "create.schematic.mirror": "Зеркало", + "create.schematic.mirror": "Отразить", "create.schematic.mirror.none": "Нет", "create.schematic.mirror.frontBack": "Спереди-сзади", "create.schematic.mirror.leftRight": "Влево-вправо", @@ -963,7 +963,7 @@ "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.0": "Переверните схему вдоль выбранной стороны.", "create.schematic.tool.flip.description.1": "Наведите курсор на схему и [CTRL] + прокрутка, чтобы перевернуть ее.", "create.schematic.tool.flip.description.2": "", "create.schematic.tool.flip.description.3": "", @@ -994,10 +994,10 @@ "create.gui.schematicannon.option.skipMissing": "Пропускать отсутствующие блоки", "create.gui.schematicannon.option.skipTileEntities": "Защитить имущество", "create.gui.schematicannon.slot.gunpowder": "Добавьте порох чтобы запитать пушку", - "create.gui.schematicannon.slot.listPrinter": "Положите книгу чтобы создать список предметов для схематики", + "create.gui.schematicannon.slot.listPrinter": "Положите книгу, чтобы создать список предметов для схематики", "create.gui.schematicannon.slot.schematic": "Положите свою схематику здесь. Убедитесь что она размещена в правильном месте", "create.gui.schematicannon.option.skipMissing.description": "Если пушка не может найти требуемый блок, она будет строить в следующем месте.", - "create.gui.schematicannon.option.skipTileEntities.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": "Пушка будет заменять целые блоки, если в схеме в этом месте есть что-либо.", @@ -1065,11 +1065,11 @@ "create.item_attributes.in_item_group.inverted": "не принадлежит '%1$s'", "create.item_attributes.added_by": "был добавлен %1$s", "create.item_attributes.added_by.inverted": "не был добавлен %1$s", - "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": "шалкер %1$s", + "create.item_attributes.shulker_level.inverted": "шалкер не %1$s", + "create.item_attributes.shulker_level.full": "полный", + "create.item_attributes.shulker_level.empty": "пустой", + "create.item_attributes.shulker_level.partial": "частично заполнен", "create.item_attributes.has_enchant": "зачарован на %1$s", "create.item_attributes.has_enchant.inverted": "не зачарован на %1$s", "create.item_attributes.color": "Покрашено в %1$s", @@ -1081,7 +1081,7 @@ "create.item_attributes.has_name": "имеет нестандартное имя %1$s", "create.item_attributes.has_name.inverted": "не имеет нестандартное имя%1$s", "create.item_attributes.book_author": "подписана %1$s", - "create.item_attributes.book_author.inverted": "неподписана %1$s", + "create.item_attributes.book_author.inverted": "не подписана %1$s", "create.item_attributes.book_copy_original": "оригинал", "create.item_attributes.book_copy_original.inverted": "не оригинал", "create.item_attributes.book_copy_first": "копия первого порядка", @@ -1137,55 +1137,55 @@ "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.target_not_valid": "Бросает до ближайшего блока (Неподходящая Цель)", + "create.weighted_ejector.no_target": "Бросает до ближайшего блока (Цель не была Выбрана)", "create.weighted_ejector.targeting": "Бросает до [%1$s,%2$s,%3$s]", - "create.weighted_ejector.stack_size": "Размер Бросаемого Стака", + "create.weighted_ejector.stack_size": "Размер бросаемого стака", "create.logistics.when_multiple_outputs_available": "Когда доступно несколько выходов", "create.mechanical_arm.selection_mode.round_robin": "По кругу", "create.mechanical_arm.selection_mode.forced_round_robin": "Принудительно по кругу", - "create.mechanical_arm.selection_mode.prefer_first": "Предпочтитать первичную цель", + "create.mechanical_arm.selection_mode.prefer_first": "Предпочитать первичную цель", "create.tunnel.selection_mode.split": "Разделить", "create.tunnel.selection_mode.forced_split": "Принудительно разделить", "create.tunnel.selection_mode.round_robin": "По кругу", "create.tunnel.selection_mode.forced_round_robin": "Принудительно по кругу", - "create.tunnel.selection_mode.prefer_nearest": "Придпочтительно ближайшее", + "create.tunnel.selection_mode.prefer_nearest": "Предпочтительно ближайшее", "create.tunnel.selection_mode.randomize": "Случайно", "create.tunnel.selection_mode.synchronize": "Синхронизировать входы", - "create.tooltip.chute.header": "Инвормация о желобе", + "create.tooltip.chute.header": "Информация о желобе", "create.tooltip.chute.items_move_down": "Предметы двигаются вниз", "create.tooltip.chute.items_move_up": "Предметы двигаются вверх", - "create.tooltip.chute.no_fans_attached": "Нет подключеных вентиляторов", + "create.tooltip.chute.no_fans_attached": "Нет подключенных вентиляторов", "create.tooltip.chute.fans_push_up": "Вентилятор толкает снизу", "create.tooltip.chute.fans_push_down": "Вентилятор толкает сверху", "create.tooltip.chute.fans_pull_up": "Вентилятор тянет сверху", "create.tooltip.chute.fans_pull_down": "Вентилятор тянет снизу", "create.tooltip.chute.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.brass_tunnel.contains": "В данный момент раздает(выдает):", + "create.tooltip.brass_tunnel.contains_entry": "> %1$s x%2$s", + "create.tooltip.brass_tunnel.retrieve": "ПКМ, чтобы получить", - "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": "Режим привязки активирован", + "create.linked_controller.press_keybind": "Нажмите %1$s, %2$s, %3$s, %4$s, %5$s or %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", - "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": "Слот для ингредиентов", + "create.crafting_blueprint.filter_items_viable": "Продвинутые фильтры предметов применимы", + "create.crafting_blueprint.display_slot": "Отображаемая ячейка", + "create.crafting_blueprint.inferred": "Производные от рецепта", + "create.crafting_blueprint.manually_assigned": "Назначен вручную", + "create.crafting_blueprint.secondary_display_slot": "Дополнительная отображаемая ячейка", + "create.crafting_blueprint.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 урона от атаки", + "create.potato_cannon.ammo.reload_ticks": "%1$s тиков перезагрузки", + "create.potato_cannon.ammo.knockback": "%1$s отбрасывания", "create.hint.hose_pulley.title": "Безграничное снабжение", "create.hint.hose_pulley": "Целевой водный резервуар считается бесконечным.", @@ -1213,47 +1213,47 @@ "create.command.killTPSCommand.status.usage.1": "[Create]: используйте /killtps start <Время тика>, чтобы искусственно замедлить тик сервера", "create.command.killTPSCommand.argument.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": "Эта вагонеточная штуковина кажется слишком большой, чтобы ее можно было поднять", + "create.contraption.minecart_contraption_illegal_pickup": "Мистическая сила связывает эту вагонеточную штуковину с миром", "_": "->------------------------] 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.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": "Штуковина останавливается", + "create.subtitle.peculiar_bell_use": "Особенный колокол звонит", + "create.subtitle.mixing": "Шум смешивания", + "create.subtitle.mechanical_press_activation_belt": "Механический пресс делает «бонк»", + "create.subtitle.fwoomp": "Картофельная пушка делает «Свомп»", + "create.subtitle.worldshaper_place": "Ручной редактор мира делает «Зап»", + "create.subtitle.crushing_1": "Шум разрушения", + "create.subtitle.depot_slide": "Шелест предметов", + "create.subtitle.saw_activate_stone": "Активируется механическая пила", "create.subtitle.blaze_munch": "Всполох радостно жуёт", - "create.subtitle.funnel_flap": "UNLOCALIZED: Funnel Flaps", + "create.subtitle.funnel_flap": "Занавески воронок хлопают", "create.subtitle.schematicannon_finish": "Схематичная пушка закончила работу", - "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.cogs": "UNLOCALIZED: Cogwheels rumble", + "create.subtitle.haunted_bell_use": "Призрачный колокол звонит", + "create.subtitle.scroll_value": "Щелчки колеса прокрутки", + "create.subtitle.crafter_craft": "Крафтер создаёт", + "create.subtitle.controller_put": "Контроллер стучит", + "create.subtitle.cranking": "Вращается рукоятка", + "create.subtitle.wrench_remove": "Компонент ломается", + "create.subtitle.cogs": "Шестерни грохочут", "create.subtitle.slime_added": "Намазывание слизи", - "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.deployer_polish": "UNLOCALIZED: Deployer applies polish", - "create.subtitle.deny": "UNLOCALIZED: Declining boop", - "create.subtitle.controller_click": "UNLOCALIZED: Controller clicks", + "create.subtitle.wrench_rotate": "Использован гаечный ключ", + "create.subtitle.potato_hit": "Овощ врезается", + "create.subtitle.saw_activate_wood": "Активируется механическая пила", + "create.subtitle.haunted_bell_convert": "Призрачный колокол пробуждается", + "create.subtitle.deployer_polish": "Автономный активатор полирует", + "create.subtitle.deny": "Отрицательный «Буп»", + "create.subtitle.controller_click": "Клики контроллера", "create.subtitle.schematicannon_launch_block": "Выстрелы схематичной пушки", - "create.subtitle.copper_armor_equip": "UNLOCALIZED: Diving equipment clinks", - "create.subtitle.controller_take": "UNLOCALIZED: Lectern empties", + "create.subtitle.copper_armor_equip": "Позвякивание снаряжения для дайвинга", + "create.subtitle.controller_take": "Кафедра опустошается", "create.subtitle.mechanical_press_activation": "Механический пресс активирован", - "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": "Штуковина движется", + "create.subtitle.crafter_click": "Крафтер кликает", + "create.subtitle.depot_plop": "Предмет падает", + "create.subtitle.confirm": "Утвердительный «Динь»", "_": "->------------------------] Item Descriptions [------------------------<-", @@ -1267,21 +1267,21 @@ "item.create.example_item.tooltip.control1": "When Ctrl pressed", "item.create.example_item.tooltip.action1": "These controls are displayed.", - "block.create.wooden_bracket.tooltip": "WOODEN BRACKET", + "block.create.wooden_bracket.tooltip": "ДЕРЕВЯННАЯ СКОБА", "block.create.wooden_bracket.tooltip.summary": "_Украсьте_ ваши _валы, шестерни_ и _трубы_, используя уютное деревянное укрепление.", - "block.create.metal_bracket.tooltip": "METAL BRACKET", + "block.create.metal_bracket.tooltip": "МЕТАЛЛИЧЕСКАЯ СКОБА", "block.create.metal_bracket.tooltip.summary": "_Украсьте_ ваши _валы, шестерни_ и _трубы_, используя прочное индустриальное укрепление.", - "block.create.seat.tooltip": "SEAT", + "block.create.seat.tooltip": "СИДЕНЬЕ", "block.create.seat.tooltip.summary": "Присядьте и насладитесь поездкой! Привязывает игроков к собранным _устройствам_. Отлично выглядит как простая мебель! Можно окрасить в разные цвета.", "block.create.seat.tooltip.condition1": "ПКМ по сиденью", - "block.create.seat.tooltip.behaviour1": "Сажает игрока на _Сиденье_. Нажмите _кнопку_ _приседания_ чтобы слезть.", + "block.create.seat.tooltip.behaviour1": "Сажает игрока на _Сиденье_. Нажмите _кнопку_ _приседания_ чтобы слезть (Shift по умолчанию).", - "item.create.blaze_cake.tooltip": "BLAZE CAKE", + "item.create.blaze_cake.tooltip": "ТОРТ ВСПОЛОХА", "item.create.blaze_cake.tooltip.summary": "Вкусное угощения для вашей трудяги _Горелки Всполоха_. Зажигает их всех!", - "item.create.wand_of_symmetry.tooltip": "SYMMETRY WAND", + "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": "Остаётся активным", @@ -1292,7 +1292,7 @@ "item.create.wand_of_symmetry.tooltip.control3": "ПКМ крадучись", "item.create.wand_of_symmetry.tooltip.action3": "Открывает _интерфейс_ _конфигурации_", - "item.create.handheld_worldshaper.tooltip": "HANDHELD WORLDSHAPER", + "item.create.handheld_worldshaper.tooltip": "РУЧНОЙ РЕДАКТОР МИРА", "item.create.handheld_worldshaper.tooltip.summary": "Удобный инструмент для создания _ландшафтов_ и _рельефа_ _местности_.", "item.create.handheld_worldshaper.tooltip.control1": "ЛКМ на блок", "item.create.handheld_worldshaper.tooltip.action1": "Устанавливает блоки, помещенные инструментом, в целевой блок.", @@ -1301,50 +1301,50 @@ "item.create.handheld_worldshaper.tooltip.control3": "ПКМ крадучись", "item.create.handheld_worldshaper.tooltip.action3": "Открывает _интерфейс_ _конфигурации_", - "item.create.tree_fertilizer.tooltip": "TREE FERTILIZER", + "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.extendo_grip.tooltip": "EXTENDO GRIP", + "item.create.extendo_grip.tooltip": "УДЛИНЕННАЯ РУКА", "item.create.extendo_grip.tooltip.summary": "Бойоиоинг! Значительно _увеличивает_ _досягаемость_ владельца.", "item.create.extendo_grip.tooltip.condition1": "Находясь в другой руке", - "item.create.extendo_grip.tooltip.behaviour1": "Увеличьте _расстояние_ _досягаемости_ предметов, используемых в _главной_ _руке_.", - "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.behaviour1": "Увеличивает _расстояние_ _досягаемости_ предметов, используемых в _главной_ _руке_.", + "item.create.extendo_grip.tooltip.condition2": "Когда надет Медный баллон", + "item.create.extendo_grip.tooltip.behaviour2": " _НЕ_ тратится _прочность_. Вместо этого будет тратиться _воздух_ из баллона.", - "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": "КАРТОФЕЛЬНАЯ ПУШКА", + "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": "FILTER", + "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.attribute_filter.tooltip": "ATTRIBUTE FILTER", + "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.empty_schematic.tooltip": "EMPTY SCHEMATIC", + "item.create.empty_schematic.tooltip": "ПУСТАЯ СХЕМАТИКА", "item.create.empty_schematic.tooltip.summary": "Используется в качестве ингредиента рецепта и для записи в _Схематичный столе_", - "item.create.schematic.tooltip": "SCHEMATIC", + "item.create.schematic.tooltip": "СХЕМАТИКА", "item.create.schematic.tooltip.summary": "Содержит структуру, которая будет позиционироваться и помещаться в мир. Расположите голограмму по своему усмотрению и используйте _схематичную пушку_ для ее построения.", "item.create.schematic.tooltip.condition1": "При удерживании", "item.create.schematic.tooltip.behaviour1": "Может быть позиционирован с помощью инструментов на экране.", "item.create.schematic.tooltip.control1": "ПКМ крадучись", "item.create.schematic.tooltip.action1": "Открывает _интерфейс_ для ввода _точных_ _координат_.", - "item.create.schematic_and_quill.tooltip": "SCHEMATIC AND QUILL", + "item.create.schematic_and_quill.tooltip": "СХЕМАТИКА И ПЕРО", "item.create.schematic_and_quill.tooltip.summary": "Используется для сохранения структуры в вашем мире в файл .nbt.", "item.create.schematic_and_quill.tooltip.condition1": "Шаг 1", "item.create.schematic_and_quill.tooltip.behaviour1": "Выберите две угловые точки, используя ПКМ.", @@ -1357,17 +1357,17 @@ "item.create.schematic_and_quill.tooltip.control3": "ПКМ крадучись", "item.create.schematic_and_quill.tooltip.action3": "_Сбрасывает_ и _удаляет_ выделение.", - "block.create.schematicannon.tooltip": "SCHEMATICANNON", + "block.create.schematicannon.tooltip": "СХЕМАТИЧНАЯ ПУШКА", "block.create.schematicannon.tooltip.summary": "_Ставит блоки_ для воссоздания _схематики_ в мире. Использует предметы из _соседнего_ _инвентаря_ и _порох_ в качестве _топлива_.", "block.create.schematicannon.tooltip.condition1": "ПКМ", "block.create.schematicannon.tooltip.behaviour1": "Открывает _Интерфейс_", - "block.create.schematic_table.tooltip": "SCHEMATIC TABLE", + "block.create.schematic_table.tooltip": "СХЕМАТИЧНЫЙ СТОЛ", "block.create.schematic_table.tooltip.summary": "Записывает сохраненные схематики в _пустые_ _схематики_.", "block.create.schematic_table.tooltip.condition1": "Когда дана пустая схема", "block.create.schematic_table.tooltip.behaviour1": "Загружает выбранный файл из вашей папки Schematics.", - "item.create.goggles.tooltip": "GOGGLES", + "item.create.goggles.tooltip": "ИНЖЕНЕРНЫЕ ОЧКИ", "item.create.goggles.tooltip.summary": "Очки для улучшения зрения с помощью полезной кинетической информации.", "item.create.goggles.tooltip.condition1": "При ношении", "item.create.goggles.tooltip.behaviour1": "Показывает _цветные_ _индикаторы_, соответствующие _уровню_ _скорости_ размещённого кинетического компонента, а также _создаваемой нагрузке_ и _мощности_ отдельных компонентов.", @@ -1376,119 +1376,119 @@ "item.create.goggles.tooltip.condition3": "При взгляде на жидкостные контейнеры", "item.create.goggles.tooltip.behaviour3": "Показывает детализированную информацию о _Ёмкости_ блока и о хранящейся в нём хранится _Жидкости_.", - "item.create.wrench.tooltip": "WRENCH", + "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": "Разбирает кинетические компоненты и помещает их обратно в ваш инвентарь.", - "block.create.nozzle.tooltip": "NOZZLE", + "block.create.nozzle.tooltip": "ФОРСУНКА", "block.create.nozzle.tooltip.summary": "Прикрепите к передней части _вентилятора_, чтобы распределить его влияние на сущностей _во_ _всех_ _направлениях_.", - "block.create.cuckoo_clock.tooltip": "CUCKOO CLOCK", + "block.create.cuckoo_clock.tooltip": "ЧАСЫ С КУКУШКОЙ", "block.create.cuckoo_clock.tooltip.summary": "_Прекрасное_ _мастерство_ для _украшения_ пространства и _отслеживания_ _времени_.", "block.create.cuckoo_clock.tooltip.condition1": "При вращении", "block.create.cuckoo_clock.tooltip.behaviour1": "Показывает текущее время и напевает мелодию два раза в день. _Активируется_ _один_ _раз_ в _полдень_ и в _сумерках_, как только _игроки_ _могут_ _спать_.", - "block.create.turntable.tooltip": "TURNTABLE", + "block.create.turntable.tooltip": "ПОВОРОТНЫЙ СТОЛ", "block.create.turntable.tooltip.summary": "Преобразует _силу_ _вращения_ прямиком в морскую болезнь.", - "block.create.stockpile_switch.tooltip": "stockpile_switch", - "block.create.stockpile_switch.tooltip.summary": "Подаёт сигнал красного камня в зависимости от _заполниности_ _прикреплённого_ _ящика_.", + "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": "CONTENT OBSERVER", + "block.create.content_observer.tooltip": "НАБЛЮДАТЕЛЬ ЗА СОДЕРЖИМЫМ", "block.create.content_observer.tooltip.summary": "_Обнаруживает элементы_ внутри _контейнеров_ и _конвейеров_, соответствующие настроенному _фильтру_. Если наблюдаемый инвентарь, ремень или шланг содержит совпадающий элемент, этот компонент излучает сигнал красного камня. Когда наблюдаемая _ воронка передает_ соответствующий предмет, этот компонент испускает _импульс_.", - "block.create.adjustable_crate.tooltip": "ADJUSTABLE CRATE", - "block.create.adjustable_crate.tooltip.summary": "Этот контейнер для хранения позволяет вручную контролировать его емкость. Он может вместить до 16 стэков любого предмета. Поддерживает компараторы.", + "block.create.adjustable_crate.tooltip": "РЕГУЛИРУЕМЫЙ ЯЩИК", + "block.create.adjustable_crate.tooltip.summary": "Этот контейнер для хранения позволяет вручную контролировать его емкость. Он может вместить до 16 стаков любого предмета. Поддерживает компараторы.", "block.create.adjustable_crate.tooltip.condition1": "ПКМ", "block.create.adjustable_crate.tooltip.behaviour1": "Открывает _Интерфейс_.", - "block.create.creative_crate.tooltip": "THE ENDLESS CRATE", + "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.controller_rail.tooltip": "CONTROLLER RAIL", + "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.behaviour1": "_Ускоряет_ или _замедляет_ _прошедшие вагонетки_, на величину зависящую от _силы сигнала_. Распространяя сигнал красного камня на соседние контролирующие рельсы. Питание двух контролирующих рельс с разной мощностью приведет к тому, что дорожки между ними будут интерполировать свой сигнал.", - "item.create.sand_paper.tooltip": "SAND PAPER", + "item.create.sand_paper.tooltip": "НАЖДАЧНАЯ БУМАГА", "item.create.sand_paper.tooltip.summary": "Грубая бумага, которую можно использовать для _полировки материалов_. Может применяться автоматически с помощью автономного активатора.", "item.create.sand_paper.tooltip.condition1": "Когда используется", "item.create.sand_paper.tooltip.behaviour1": "Полирует предметы во _второй руке_, или лежащие _на полу_, если _смотреть на них_", - "item.create.builders_tea.tooltip": "BUILDERS TEA", + "item.create.builders_tea.tooltip": "ЧАЙ СТРОИТЕЛЯ", "item.create.builders_tea.tooltip.summary": "Идеальный напиток для начала дня. _Мотивирует и насыщает_.", - "item.create.refined_radiance.tooltip": "REFINED RADIANCE", + "item.create.refined_radiance.tooltip": "ИЗЫСКАННОЕ СИЯНИЕ", "item.create.refined_radiance.tooltip.summary": "Хроматический материал, _добытый_ _из_ _поглощенного_ _света_.", - "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.condition1": "Работа в процессе", + "item.create.refined_radiance.tooltip.behaviour1": "Использование этого материала будет доступно в следующем обновлении.", - "item.create.shadow_steel.tooltip": "SHADOW STEEL", + "item.create.shadow_steel.tooltip": "ВОЗВРАЩЕНИЕ ПУСТОТЫ", "item.create.shadow_steel.tooltip.summary": "Хроматический материал, _добытый_ _в_ _пустоте_.", - "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.condition1": "Работа в процессе", + "item.create.shadow_steel.tooltip.behaviour1": "Использование этого материала будет доступно в следующем обновлении.", - "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": "ПОДКЛЮЧАЕМЫЙ КОНТРОЛЛЕР", + "item.create.linked_controller.tooltip.summary": "Предоставляет _ручной_ _контроль_ над частотами _Беспроводного передатчика редстоун сигнала_, присвоенные его _шести_ кнопкам.", + "item.create.linked_controller.tooltip.condition1": "ПКМ", + "item.create.linked_controller.tooltip.behaviour1": "Включает контроллер. _Управление_ _движением_ перехвачено, пока он активен.", + "item.create.linked_controller.tooltip.condition2": "ПКМ крадучись", + "item.create.linked_controller.tooltip.behaviour2": "Открывает _интерфейс_ _конфигурации_.", + "item.create.linked_controller.tooltip.condition3": "ПКМ по приемнику сигнала редстоуна", + "item.create.linked_controller.tooltip.behaviour3": "Включает _режим привязки_, нажмите одну из _шести кнопок_, чтобы привязать его к _частоте передатчика_.", + "item.create.linked_controller.tooltip.condition4": "ПКМ по кафедре", + "item.create.linked_controller.tooltip.behaviour4": "Помещает контроллер на кафедру для удобства использования. (ПКМ крадучись, чтобы забрать его)", - "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": "ШЛЕМ ДЛЯ ДАЙВИНГА", + "item.create.diving_helmet.tooltip.summary": "Вместе с _медным_ _баллоном_, позволяет владельцу _дышать _ _под водой_ в течение длительного времени.", + "item.create.diving_helmet.tooltip.condition1": "При ношении", + "item.create.diving_helmet.tooltip.behaviour1": "Даёт эффект _Водного Дыхания_, медленно тратя _воздух_ из баллона.", - "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": "МЕДНЫЙ БАЛЛОН", + "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.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": "БОТИНКИ ДЛЯ ДАЙВИНГА", + "item.create.diving_boots.tooltip.summary": "Пара _тяжелых_ _ботинок_, позволяющая лучше передвигаться по океанскому дну.", + "item.create.diving_boots.tooltip.condition1": "При ношении", + "item.create.diving_boots.tooltip.behaviour1": "Владелец _тонет_ _быстрее_ и _не_ может _плавать_. Ботинки дают возможность _ходить_ и _прыгать_ под водой. На владельца также больше не влияют механические ремни (передвижение по конвейеру).", - "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": "СОЗДАНИЕ ЧЕРТЕЖА", + "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": "_Применяет_ _заданный_ _рецепт_ с подходящими ингредиентами, из вашего _инвентаря_. _Shift_, чтобы создать целого до _стака_ предметов..", - "item.create.minecart_coupling.tooltip": "MINECART COUPLING", + "item.create.minecart_coupling.tooltip": "СОЕДЕНИТЕЛЬ ВАГОНЕТОК", "item.create.minecart_coupling.tooltip.summary": "_Соединяет_ ваши _вагонетки_ или _Перевозочные устройства_ вместе, чтобы создать великолепный поезд.", "item.create.minecart_coupling.tooltip.condition1": "При использовании на вагонетке", "item.create.minecart_coupling.tooltip.behaviour1": "_Соединяет_ две вагонетки вместе, пытаясь держать их на _определенной дистанции_ при движении.", - "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": "СТРАННЫЙ КОЛОКОЛ", + "block.create.peculiar_bell.tooltip.summary": "Декоративный _латунный колокол_. Установка его прямо над горящем _Огнем душ_ может вызвать побочные эффекты...с", - "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": "ПРИЗРАЧНЫЙ КОЛОКОЛ", + "block.create.haunted_bell.tooltip.summary": "_Проклятый колокол_ населенный потерянными душами Нижнего мира.", + "block.create.haunted_bell.tooltip.condition1": "При ношении или при звоне", + "block.create.haunted_bell.tooltip.behaviour1": "Подсвечивает ближайшие _места без света_ на которых могут появляться _враждебные мобы_..", "_": "->------------------------] Ponder Content [------------------------<-", - "create.ponder.hold_to_ponder": "Удерживайте [%1$s] для Размышления", + "create.ponder.hold_to_ponder": "Удерживайте [%1$s] для размышления", "create.ponder.subject": "Субъект этой сцены", - "create.ponder.pondering": "Размышляем о...", + "create.ponder.pondering": "Размышляем о/об...", "create.ponder.identify_mode": "Режим Идентификации включён.\nУбрать паузу: [%1$s]", "create.ponder.associated": "Связанные статьи", "create.ponder.close": "Закрыть", @@ -1498,45 +1498,45 @@ "create.ponder.replay": "Воспроизвести снова", "create.ponder.think_back": "Подумать о предыдущем", "create.ponder.slow_text": "Удобное чтение", - "create.ponder.exit": "UNLOCALIZED: Exit", - "create.ponder.welcome": "UNLOCALIZED: Welcome to Ponder", - "create.ponder.categories": "UNLOCALIZED: Available Categories in Create", - "create.ponder.index_description": "UNLOCALIZED: Click one of the icons to learn about its associated Items and Blocks", - "create.ponder.index_title": "UNLOCALIZED: Ponder Index", + "create.ponder.exit": "Выйти", + "create.ponder.welcome": "Добро пожаловать в размышления", + "create.ponder.categories": "Категории, доступные в Create", + "create.ponder.index_description": "Кликните по одной из иконок, чтобы узнать о связанных с ней предметах и блоках.", + "create.ponder.index_title": "Содержание размышлений", "create.ponder.shared.rpm16": "16 об./мин.", "create.ponder.shared.behaviour_modify_wrench": "Это поведение может быть изменено Ключом", - "create.ponder.shared.storage_on_contraption": "Присоединённые к Штуковине инвентари будут подбирать вещи автоматически", + "create.ponder.shared.storage_on_contraption": "Присоединённые к штуковине инвентари будут подбирать вещи автоматически", "create.ponder.shared.sneak_and": "Красться +", "create.ponder.shared.rpm8": "8 об./мин.", "create.ponder.shared.ctrl_and": "Ctrl +", "create.ponder.shared.rpm32": "32 об./мин.", "create.ponder.shared.rpm16_source": "Источник: 16 об./мин.", - "create.ponder.shared.movement_anchors": "С помощью Суперклея или Шасси, более крупные структуры могут быть сдивинуты.", - "create.ponder.tag.redstone": "Логические Компоненты", - "create.ponder.tag.redstone.description": "Компоненты, помогающие с конструироваением Редстоун Схем", + "create.ponder.shared.movement_anchors": "С помощью суперклея или шасси, более крупные структуры могут быть сдвинуты.", + "create.ponder.tag.redstone": "Логические компоненты", + "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": "Жидкостные манипуляторы", + "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.kinetic_appliances": "Кинетические Приборы", - "create.ponder.tag.kinetic_appliances.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_sources": "Кинетические источники", - "create.ponder.tag.kinetic_sources.description": "Компоненты, генерирующие Силу Вращения", - "create.ponder.tag.movement_anchor": "Опоры Движения", + "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.contraption_actor": "Компоненты Штуковин", + "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.logistics": "Транспортировка Предметов", + "create.ponder.tag.creative.description": "Компоненты обычно недоступные в Режиме Выживания", + "create.ponder.tag.logistics": "Транспортировка предметов", "create.ponder.tag.logistics.description": "Компоненты, помогающие перемещать предметы", "create.ponder.adjustable_pulse_repeater.header": "Управлении сигналами с помощью Регулируемого импульсного повторителя", @@ -1551,45 +1551,45 @@ "create.ponder.adjustable_repeater.text_4": "Используя колесо мыши, время зарядки может быть настроено", "create.ponder.adjustable_repeater.text_5": "Настраиваемая задержка может достигать 30 минут", - "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.header": "Использовании Андезитовых туннелей", + "create.ponder.andesite_tunnel.text_1": "Андезитовые туннели могут быть использованы, чтобы накрывать Конвейеры", + "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_1": "Чаша может хранить предметы и жидкости для обработки", "create.ponder.basin.text_2": "После обработки, чаши пытаются вывести результат под любой из их сторон", "create.ponder.basin.text_3": "Когда предоставлен подходящий компонент, у Чаши появится выходящий кран", "create.ponder.basin.text_4": "Несколько вариантов применимы здесь", "create.ponder.basin.text_5": "Вывод чаши будет пойман инвентарём ниже", "create.ponder.basin.text_6": "Без выходящего крана, Чаша будет оставлять предметы, полученные в результате обработки", "create.ponder.basin.text_7": "Это может быть полезно, если продукт должен быть использован повторно как ингредиент", - "create.ponder.basin.text_8": "Желаемые продукты дожлны быть в таком случае извлечены из чаши", + "create.ponder.basin.text_8": "Желаемые продукты должны быть в таком случае извлечены из чаши", "create.ponder.basin.text_9": "Фильтр может быть необходим для избежания извлечения необработанных предметов", - "create.ponder.bearing_modes.header": "Режимах Движения Механического Подшипника", - "create.ponder.bearing_modes.text_1": "Когда остановлен, Подшипник установит структуру на ближайшем выровненным по сетке блоков углу", + "create.ponder.bearing_modes.header": "Режимах движения Механического подшипника", + "create.ponder.bearing_modes.text_1": "Когда остановлен, подшипник установит структуру на ближайшем выровненным по сетке блоков углу", "create.ponder.bearing_modes.text_2": "Он может быть настроен никогда не возвращать структуру в твёрдое состояние, или только возле начального угла", - "create.ponder.belt_casing.header": "Обрамлении Ремней", - "create.ponder.belt_casing.text_1": "Латунный или Андезитовый Корпус может быть использован для декорации Механических ремней", + "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.header": "Использовании Механических ремней", + "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_3": "Дополнительные валы могут быть добавлены по всей длине конвейера", + "create.ponder.belt_connector.text_4": "Валы, соединённые через ремни, будут вращаться с той же скоростью и направлением", "create.ponder.belt_connector.text_5": "Добавленные Валы могут быть убраны Ключом", - "create.ponder.belt_connector.text_6": "Механические Ремни могут быть окрашены в эстетических целях", + "create.ponder.belt_connector.text_6": "Механические ремни могут быть окрашены в эстетических целях", - "create.ponder.belt_directions.header": "Возможных Расположениях Механических Ремней", + "create.ponder.belt_directions.header": "Возможных расположениях Механических ремней", "create.ponder.belt_directions.text_1": "Ремни не могут соединяться в произвольных направлениях", "create.ponder.belt_directions.text_2": "1. Они могут соединяться горизонтально", "create.ponder.belt_directions.text_3": "2. Они могут соединяться по диагонали", @@ -1597,244 +1597,244 @@ "create.ponder.belt_directions.text_5": "4. И они могут соединять вертикальные валы горизонтально", "create.ponder.belt_directions.text_6": "Это все возможные направления. Ремни могут достигать Длины от 2 до 20 блоков", - "create.ponder.belt_transport.header": "Использовании Механических Ремней для Логистики", + "create.ponder.belt_transport.header": "Использовании Механических ремней для логистики", "create.ponder.belt_transport.text_1": "Двигающиеся ремни будут перемещать Предметы и другие Сущности", "create.ponder.belt_transport.text_2": "ПКМ пустой рукой, чтобы забрать предметы с ремня", - "create.ponder.blaze_burner.header": "Кормлении Горелок Всполохов", - "create.ponder.blaze_burner.text_1": "Горелки Всполохов предоставляют Тепло Предметам, обрабатывающимся в Чаше", + "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_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_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.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_6": "Латунные Туннели на параллельных конвейерах формируют группы", + "create.ponder.brass_tunnel.text_6": "Латунные туннели на параллельных конвейерах формируют группы", "create.ponder.brass_tunnel.text_7": "Входящие предметы будут распределены между всеми соединёнными выходами", - "create.ponder.brass_tunnel.text_8": "Для этого предметы также могут быть вложены в блок Туннеля напрямую", + "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.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_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_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_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.header": "Движении структур при помощи Сборщика вагонеток", + "create.ponder.cart_assembler.text_1": "Активированные Сборщики вагонеток устанавливают прикреплённые структуры к проходящим мимо вагонеткам", "create.ponder.cart_assembler.text_2": "Без редстоун сигнала они разбирают вагонеточные штуковины обратно в блоки", - "create.ponder.cart_assembler.text_3": "Использование Ключа на Вагонетке позволит вам унести Штуковину куда-то ещё", + "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_3": "UNLOCALIZED: If the Assembler is set to Lock Rotation, the contraptions' orientation will never change", + "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_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.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.chain_drive.header": "Передаче силы вращения Цепными Приводами", - "create.ponder.chain_drive.text_1": "Цепные Приводы передают силу вращения друг другу", + "create.ponder.chain_drive.header": "Передаче силы вращения Цепными приводами", + "create.ponder.chain_drive.text_1": "Цепные приводы передают силу вращения друг другу", "create.ponder.chain_drive.text_2": "Все валы соединённые таким образом будут вращаться в одном направлении", "create.ponder.chain_drive.text_3": "Любая часть в ряду может быть повёрнута на 90 градусов", - "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_4": "В обоих случаях Цепные Приводы в ряду всегда вращаются с 2x скорость Активного Цепного Механизма", - "create.ponder.chain_gearshift.text_5": "Используя аналоговые сигналы, это отношение может быть настроено более точно между 1 и 2", + "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_4": "В обоих случаях Цепные приводы в ряду всегда вращаются с 2x скоростью активированного Цепного механизма", + "create.ponder.chain_gearshift.text_5": "Используя аналоговые сигналы, это умножение может быть настроено более точно между 1 и 2", "create.ponder.chain_gearshift.text_6": "12 об./мин.", "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_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_1": "Используя Вентилятор в корпусе внизу или наверху, Желоб может перемещать предметы вверх", + "create.ponder.chute_upward.text_2": "Осмотр желобов в Инженерных очках открывает информацию о направлении движения", + "create.ponder.chute_upward.text_3": "На «заблокированном» конце предметы должны быть введены/выведены сбоку", - "create.ponder.clockwork_bearing.header": "Оживлении структур Часовым Механизмом", - "create.ponder.clockwork_bearing.text_1": "Часовые Механизмы прикрепляются к блокам спереди", - "create.ponder.clockwork_bearing.text_2": "При получении Силы Вращения структура повернётся в зависимости от текущего часа", + "create.ponder.clockwork_bearing.header": "Оживлении структур Часовым механизмом", + "create.ponder.clockwork_bearing.text_1": "Часовые механизмы прикрепляются к блокам спереди", + "create.ponder.clockwork_bearing.text_2": "При получении силы вращения структура повернётся в зависимости от текущего часа", "create.ponder.clockwork_bearing.text_3": "3:00", "create.ponder.clockwork_bearing.text_4": "4:00", - "create.ponder.clockwork_bearing.text_5": "ПКМ по механизму чтобы остановить или вновь оживить структуру", - "create.ponder.clockwork_bearing.text_6": "Спереди Часовой стрелки вторая структура может быть добавлена", - "create.ponder.clockwork_bearing.text_7": "Убедитесь, что две Структуры не соединены между собой супер-клеем или чем-то схожим", - "create.ponder.clockwork_bearing.text_8": "Вторая Структура станет вращаться как Минутная Стрелка", + "create.ponder.clockwork_bearing.text_5": "ПКМ по механизму, чтобы остановить или вновь запустить структуру", + "create.ponder.clockwork_bearing.text_6": "Вторая структура может быть добавлена спереди Часовой стрелки", + "create.ponder.clockwork_bearing.text_7": "Убедитесь, что две структуры не соединены между собой супер-клеем или чем-то схожим", + "create.ponder.clockwork_bearing.text_8": "Вторая структура станет вращаться как Минутная стрелка", - "create.ponder.clutch.header": "Управлении силой вращения использованием Сцепления", + "create.ponder.clutch.header": "Управлении силой вращения с помощью Сцепления", "create.ponder.clutch.text_1": "Сцепление передаёт вращение по прямой", "create.ponder.clutch.text_2": "При активации Редстоуном оно разрывает соединение", - "create.ponder.cog_speedup.header": "Переключении Передач Шестернями", + "create.ponder.cog_speedup.header": "Переключении передач Шестернями", "create.ponder.cog_speedup.text_1": "Большие и Маленькие шестерни могут соединяться по диагонали", - "create.ponder.cog_speedup.text_2": "Переходя с больших на маленькие шестерни, переданная скорось удвоится", + "create.ponder.cog_speedup.text_2": "Переходя с больших на маленькие шестерни, переданная скорость удвоится", "create.ponder.cog_speedup.text_3": "Переходя в обратном направлении, переданная скорость сократится вдвое", "create.ponder.cogwheel.header": "Передаче силы вращения Шестернями", "create.ponder.cogwheel.text_1": "Шестерни передают вращение другим соседним шестерням", - "create.ponder.cogwheel.text_2": "Соседние валы соединённые таким оразом будут вращаться в противоположных направлениях", + "create.ponder.cogwheel.text_2": "Соседние валы соединённые таким образом будут вращаться в противоположных направлениях", - "create.ponder.creative_fluid_tank.header": "UNLOCALIZED: Creative Fluid Tanks", - "create.ponder.creative_fluid_tank.text_1": "UNLOCALIZED: Creative Fluid Tanks can be used to provide a bottomless supply of fluid", - "create.ponder.creative_fluid_tank.text_2": "UNLOCALIZED: Right-Click with a fluid containing item to configure it", - "create.ponder.creative_fluid_tank.text_3": "UNLOCALIZED: Pipe Networks can now endlessly draw the assigned fluid from the tank", - "create.ponder.creative_fluid_tank.text_4": "UNLOCALIZED: Any Fluids pushed back into a Creative Fluid Tank will be voided", + "create.ponder.creative_fluid_tank.header": "Творческом жидкостном баке", + "create.ponder.creative_fluid_tank.text_1": "Творческий жидкостный бак может использоваться для обеспечения бесконечного запаса жидкости", + "create.ponder.creative_fluid_tank.text_2": "Щелкните ПКМ предметом, содержащим жидкость, чтобы настроить его", + "create.ponder.creative_fluid_tank.text_3": "Сети труб могут бесконечно вытягивать заданную жидкость из резервуара", + "create.ponder.creative_fluid_tank.text_4": "Любые жидкости, закачанные обратно в творческий жидкостный бак, будут уничтожены", - "create.ponder.creative_motor.header": "Генерации Силы Вращения Творческими Моторами", + "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": "Пара Колёс Дробления может молоть предметы очень эффективно", - "create.ponder.crushing_wheels.text_2": "Сила Вращения должна вращать их друг в друга", + "create.ponder.crushing_wheels.header": "Обработке предметов Колёсами дробления", + "create.ponder.crushing_wheels.text_1": "Пара Колёс дробления может молоть предметы очень эффективно", + "create.ponder.crushing_wheels.text_2": "Сила вращения должна вращать их друг в друга", "create.ponder.crushing_wheels.text_3": "Предметы брошенные или введённые в них сверху будут обработаны", - "create.ponder.crushing_wheels.text_4": "Предметы также могут быть введены и подобраны автомтическим способом", + "create.ponder.crushing_wheels.text_4": "Предметы также могут быть введены и подобраны автоматическим способом", - "create.ponder.deployer.header": "Использовании Автономного Активатора", - "create.ponder.deployer.text_1": "При наличии Силы Вращения Автономный Активатор может имитировать взаимодействия игрока", - "create.ponder.deployer.text_10": "ПКМ спереди чтобы дать ему предмет для использования", + "create.ponder.deployer.header": "Использовании автономного активатора", + "create.ponder.deployer.text_1": "При наличии силы вращения автономный активатор может имитировать действия игрока", + "create.ponder.deployer.text_10": "ПКМ спереди, чтобы дать ему предмет для использования", "create.ponder.deployer.text_11": "Предметы также могут быть введены автоматически", - "create.ponder.deployer.text_12": "Автономные Активаторы имеют слот для фильтра", + "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_2": "Он всегда будет взаимодействовать с местом на два блока перед ним", "create.ponder.deployer.text_3": "Блоки прямо перед ним не будут мешать ему", - "create.ponder.deployer.text_4": "Автономные Активаторы Умеют:", - "create.ponder.deployer.text_5": "Ставить Блоки,", - "create.ponder.deployer.text_6": "Использовать Предметы,", - "create.ponder.deployer.text_7": "Активировать Блоки,", - "create.ponder.deployer.text_8": "Собирать Блоки", - "create.ponder.deployer.text_9": "и Атаковать Мобов", + "create.ponder.deployer.text_4": "Автономные активаторы умеют:", + "create.ponder.deployer.text_5": "Ставить блоки,", + "create.ponder.deployer.text_6": "Использовать предметы,", + "create.ponder.deployer.text_7": "Активировать блоки,", + "create.ponder.deployer.text_8": "Собирать блоки", + "create.ponder.deployer.text_9": "и Атаковать мобов", - "create.ponder.deployer_contraption.header": "Использовании Автономных Активаторов на Штуковинах", - "create.ponder.deployer_contraption.text_1": "Всегда, когда Автономные Активаторы дивижутся как часть оживлённой Штуковины...", - "create.ponder.deployer_contraption.text_2": "Они активируются на каждом посещённом месте, используя предметы из любых инвентарей на Штуковине", - "create.ponder.deployer_contraption.text_3": "Слот для Фильтра может быть использован, чтобы уточнить, какие предеметы им брать", + "create.ponder.deployer_contraption.header": "Использовании автономных активаторов на штуковинах", + "create.ponder.deployer_contraption.text_1": "Всегда, когда автономные активаторы движутся как часть движимой штуковины...", + "create.ponder.deployer_contraption.text_2": "Они активируются на каждом посещённом месте, используя предметы из любых инвентарей на штуковине", + "create.ponder.deployer_contraption.text_3": "Слот для Фильтра может быть использован, чтобы уточнить, какие предметы ему брать", - "create.ponder.deployer_modes.header": "Режимах Автономного Активатора", - "create.ponder.deployer_modes.text_1": "По умолчанию, Ативатор имитирует ПКМ-взаимодейстие", + "create.ponder.deployer_modes.header": "Режимах автономного активатора", + "create.ponder.deployer_modes.text_1": "По умолчанию, активатор имитирует ПКМ-взаимодейстие", "create.ponder.deployer_modes.text_2": "Используя Ключ, вы можете установить его на имитацию ЛКМ", - "create.ponder.deployer_processing.header": "UNLOCALIZED: Processing Items using Deployers", - "create.ponder.deployer_processing.text_1": "UNLOCALIZED: With a fitting held item, Deployers can process items provided beneath them", - "create.ponder.deployer_processing.text_2": "UNLOCALIZED: The Input items can be dropped or placed on a Depot under the Deployer", - "create.ponder.deployer_processing.text_3": "UNLOCALIZED: When items are provided on a belt...", - "create.ponder.deployer_processing.text_4": "UNLOCALIZED: The Deployer will hold and process them automatically", + "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_redstone.header": "Управлении Автономными Активаторами Редстоуном", - "create.ponder.deployer_redstone.text_1": "При активации Редстоуном Активатор перестанет работать", + "create.ponder.deployer_redstone.header": "Управлении автономными активаторами редстоуном", + "create.ponder.deployer_redstone.text_1": "При активации Редстоуном активатор перестанет работать", "create.ponder.deployer_redstone.text_2": "Перед остановкой, Активатор завершит все начатые действия", "create.ponder.deployer_redstone.text_3": "Таким образом, инвертированный импульс может быть использован для вызова ровно одного срабатывания", "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_1": "Депо могут служить как «стационарный» элемент конвейера", + "create.ponder.depot.text_2": "ПКМ, что бы самостоятельно положить или забрать предметы с них", + "create.ponder.depot.text_3": "Так же, как Механические ремни, оно может предоставлять предметы для обработки", + "create.ponder.depot.text_4": "...а также поставлять предметы Механическим рукам", - "create.ponder.empty_blaze_burner.header": "Использовании Пустых Горелок Всполохов", + "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": "UNLOCALIZED: The flame can be transformed using a soul-infused item", + "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": "UNLOCALIZED: Encasing Fluid Pipes", - "create.ponder.encased_fluid_pipe.text_1": "UNLOCALIZED: Copper Casing can be used to decorate Fluid Pipes", - "create.ponder.encased_fluid_pipe.text_2": "UNLOCALIZED: Aside from being conceiled, Encased Pipes are locked into their connectivity state", - "create.ponder.encased_fluid_pipe.text_3": "UNLOCALIZED: It will no longer react to any neighbouring blocks being added or removed", + "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_3": "Они больше не будут реагировать на добавление или удаление каких-либо соседних блоков", - "create.ponder.fan_direction.header": "Воздушном потоке Вентиляторов в Корпусе", - "create.ponder.fan_direction.text_1": "Вентиляторы в Корпусе используют Силу Вращения для создания Воздушного Потока", - "create.ponder.fan_direction.text_2": "Однако они не будут подходить для промышленного нагрева", + "create.ponder.fan_direction.header": "Воздушном потоке Вентиляторов в корпусе", + "create.ponder.fan_direction.text_1": "Вентиляторы в корпусе используют силу вращения для создания Воздушного потока", + "create.ponder.fan_direction.text_2": "Сила и направление потока зависят от подаваемого вращения", - "create.ponder.fan_processing.header": "Обработке предметов используя Вентиляторы в Корпусе", - "create.ponder.fan_processing.text_1": "Проходя через лаву, Воздушный Поток становится Горячим", + "create.ponder.fan_processing.header": "Обработке предметов используя Вентиляторы в корпусе", + "create.ponder.fan_processing.text_1": "Проходя через лаву, Воздушный поток становится Горячим", "create.ponder.fan_processing.text_2": "Предметы в этой области будут переплавлены", - "create.ponder.fan_processing.text_3": "Съедобные Предметы брошенные сюда будут сожжены", - "create.ponder.fan_processing.text_4": "Вместо этого, для них должна быть использована установка для Копчения с Огнём", - "create.ponder.fan_processing.text_5": "Поток, проходящий через Воду, создаёт Промывающую Установку", + "create.ponder.fan_processing.text_3": "Съедобные предметы брошенные сюда будут сожжены", + "create.ponder.fan_processing.text_4": "Вместо этого, для них должна быть использована установка для Копчения с огнём", + "create.ponder.fan_processing.text_5": "Поток, проходящий через Воду, создаёт Промывающую установку", "create.ponder.fan_processing.text_6": "Несколько новых вариантов обработки делаются с её помощью", - "create.ponder.fan_processing.text_7": "Скорость Вентилятора НЕ влияет на скорость обработки, а только на дальность", - "create.ponder.fan_processing.text_8": "Обработка Вентиляторов может быть применена к Предметам на Конвейерах или Депо", + "create.ponder.fan_processing.text_7": "Скорость вентилятора НЕ влияет на скорость обработки, а только на дальность", + "create.ponder.fan_processing.text_8": "Обработка Вентиляторами может быть применена к предметам на конвейерах или депо", - "create.ponder.fan_source.header": "Генерации Силы Вращения Вентиляторами в Корпусе", - "create.ponder.fan_source.text_1": "Вентиляторы направленные вниз на источник тепла могут создавать Силу Вращения", - "create.ponder.fan_source.text_2": "При Редстоун Сигнале Вентилятор начнёт отдавать энергию", + "create.ponder.fan_source.header": "Генерации силы вращения Вентиляторами в корпусе", + "create.ponder.fan_source.text_1": "Вентиляторы направленные вниз на источник тепла могут создавать силу вращения", + "create.ponder.fan_source.text_2": "При сигнале редстоуна Вентилятор начнёт отдавать энергию", - "create.ponder.fluid_pipe_flow.header": "UNLOCALIZED: Moving Fluids using Copper Pipes", - "create.ponder.fluid_pipe_flow.text_1": "UNLOCALIZED: Fluid Pipes can connect two or more fluid sources and targets", - "create.ponder.fluid_pipe_flow.text_2": "UNLOCALIZED: Using a wrench, a straight pipe segment can be given a window", - "create.ponder.fluid_pipe_flow.text_3": "UNLOCALIZED: Windowed pipes will not connect to any other adjacent pipe segments", - "create.ponder.fluid_pipe_flow.text_4": "UNLOCALIZED: Powered by Mechanical Pumps, the Pipes can transport Fluids", - "create.ponder.fluid_pipe_flow.text_5": "UNLOCALIZED: No fluid is being extracted at first", - "create.ponder.fluid_pipe_flow.text_6": "UNLOCALIZED: Once the flow connects them, the endpoints gradually transfer their contents", - "create.ponder.fluid_pipe_flow.text_7": "UNLOCALIZED: Thus, the Pipe blocks themselves never 'physically' contain any fluid", + "create.ponder.fluid_pipe_flow.header": "Перемещении жидкостей при помощи медных труб.", + "create.ponder.fluid_pipe_flow.text_1": "Жидкостные трубы могут соединять два или более источников и потребителей жидкости", + "create.ponder.fluid_pipe_flow.text_2": "При помощи гаечного ключа можно создать окно прямому отрезку трубы", + "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_7": "Таким образом, сами блоки труб никогда «физически» не содержат никакой жидкости", - "create.ponder.fluid_pipe_interaction.header": "UNLOCALIZED: Draining and Filling fluid containers", - "create.ponder.fluid_pipe_interaction.text_1": "UNLOCALIZED: Endpoints of a pipe network can interact with a variety of blocks", - "create.ponder.fluid_pipe_interaction.text_2": "UNLOCALIZED: Any block with fluid storage capabilities can be filled or drained", - "create.ponder.fluid_pipe_interaction.text_3": "UNLOCALIZED: Source blocks right in front of an open end can be picked up...", - "create.ponder.fluid_pipe_interaction.text_4": "UNLOCALIZED: ...while spilling into empty spaces can create fluid sources", - "create.ponder.fluid_pipe_interaction.text_5": "UNLOCALIZED: Pipes can also extract fluids from a handful of other blocks directly", + "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_5": "Трубы также могут извлекать жидкости непосредственно из нескольких других блоков", - "create.ponder.fluid_tank_sizes.header": "UNLOCALIZED: Dimensions of a Fluid tank", - "create.ponder.fluid_tank_sizes.text_1": "UNLOCALIZED: Fluid Tanks can be combined to increase the total capacity", - "create.ponder.fluid_tank_sizes.text_2": "UNLOCALIZED: Their base square can be up to 3 blocks wide...", - "create.ponder.fluid_tank_sizes.text_3": "UNLOCALIZED: ...and grow in height by more than 30 additional layers", - "create.ponder.fluid_tank_sizes.text_4": "UNLOCALIZED: Using a Wrench, a tanks' window can be toggled", + "create.ponder.fluid_tank_sizes.header": "Размерах жидкостного бака", + "create.ponder.fluid_tank_sizes.text_1": "Жидкостные баки можно объединить для увеличения общей вместимости", + "create.ponder.fluid_tank_sizes.text_2": "Их площадь основания может составлять до 3 блоков в ширину...", + "create.ponder.fluid_tank_sizes.text_3": "...и увеличиваются в высоту более чем на 30 дополнительных уровней", + "create.ponder.fluid_tank_sizes.text_4": "При помощи гаечного ключа можно создать окно на резервуаре", - "create.ponder.fluid_tank_storage.header": "UNLOCALIZED: Storing Fluids in Fluid Tanks", - "create.ponder.fluid_tank_storage.text_1": "UNLOCALIZED: Fluid Tanks can be used to store large amounts of fluid", - "create.ponder.fluid_tank_storage.text_2": "UNLOCALIZED: Pipe networks can push and pull fluids from any side", - "create.ponder.fluid_tank_storage.text_3": "UNLOCALIZED: The contained fluid can be measured by a Comparator", - "create.ponder.fluid_tank_storage.text_4": "UNLOCALIZED: However, in Survival Mode Fluids cannot be added or taken manually", - "create.ponder.fluid_tank_storage.text_5": "UNLOCALIZED: You can use Basins, Item Drains and Spouts to drain or fill fluid containing items", + "create.ponder.fluid_tank_storage.header": "Хранении жидкостей в жидкостных баках", + "create.ponder.fluid_tank_storage.text_1": "Жидкостные баки можно использовать для хранения большого количества жидкости", + "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.flywheel.header": "Генерации Силы Вращения Маховиком", - "create.ponder.flywheel.text_1": "Маховики необходимы для генерации силы вращения при помощи Печных Двигателей", - "create.ponder.flywheel.text_2": "Отдаваемая Сила Вращения имеет очень значительную устойчивость к нагрузкам", - "create.ponder.flywheel.text_3": "Использование Плавильной Печи удвоит эффективность Двигателя", + "create.ponder.flywheel.header": "Генерации силы вращения Маховиком", + "create.ponder.flywheel.text_1": "Маховики необходимы для генерации силы вращения при помощи Печных двигателей", + "create.ponder.flywheel.text_2": "Отдаваемая сила вращения имеет очень значительную устойчивость к нагрузкам", + "create.ponder.flywheel.text_3": "Использование Плавильной печи удвоит эффективность двигателя", "create.ponder.funnel_compat.header": "Совместимости Воронок", - "create.ponder.funnel_compat.text_1": "Воронки должны хорошо взаимодействовать с многими компонентов", - "create.ponder.funnel_compat.text_2": "Вертикальные Пилы", + "create.ponder.funnel_compat.text_1": "Воронки должны хорошо взаимодействовать с многими компонентами:", + "create.ponder.funnel_compat.text_2": "Вертикальные пилы", "create.ponder.funnel_compat.text_3": "Депо", - "create.ponder.funnel_compat.text_4": "Предметными осушителями", + "create.ponder.funnel_compat.text_4": "Предметные осушители", - "create.ponder.funnel_direction.header": "Направлении Передачи", + "create.ponder.funnel_direction.header": "Направлении передачи", "create.ponder.funnel_direction.text_1": "Поставленная обычным образом, она забирает предметы из инвентаря", "create.ponder.funnel_direction.text_2": "Поставленная крадучись, она кладёт предметы в инвентарь", "create.ponder.funnel_direction.text_3": "Используя Ключ, вы можете изменить направление воронки", @@ -1847,262 +1847,262 @@ "create.ponder.funnel_redstone.header": "Редстоун управлении", "create.ponder.funnel_redstone.text_1": "Редстоун сигнал не даст любой воронке работать", - "create.ponder.funnel_transfer.header": "Передаче Напрямую", + "create.ponder.funnel_transfer.header": "Передаче напрямую", "create.ponder.funnel_transfer.text_1": "Воронки не могут перемещать предметы напрямую между закрытыми инвентарями", - "create.ponder.funnel_transfer.text_2": "Желоба или Умные желоба могут лучше подходить для жтих целей", - "create.ponder.funnel_transfer.text_3": "То же касается и горизонтального премещения. Механический ремень дожлен здесь помочь", + "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.text_2": "Создаваемая Сила Вращения имеет очень высокую усточивость к нагрузкам", - "create.ponder.furnace_engine.text_3": "Использование Плавильной Печи удвоит эффективность Двигателя", + "create.ponder.furnace_engine.header": "Генерации силы вращения Печными двигателями", + "create.ponder.furnace_engine.text_1": "Печные двигатели создают силу вращения пока присоединённая к ним печь работает", + "create.ponder.furnace_engine.text_2": "Создаваемая сила вращения имеет очень высокую устойчивость к нагрузкам", + "create.ponder.furnace_engine.text_3": "Использование Плавильной печи удвоит эффективность Двигателя", - "create.ponder.gantry_carriage.header": "Использовании Крановых Шасси", - "create.ponder.gantry_carriage.text_1": "Крановые Шасси могут прикрепляться и двигаться вдоль Портального Вала", - "create.ponder.gantry_carriage.text_2": "Крановые Установки могут двигать присоединённые Блоки", + "create.ponder.gantry_carriage.header": "Использовании шасси портального крана", + "create.ponder.gantry_carriage.text_1": "Шасси портального крана могут прикрепляться и двигаться вдоль Вала портального крана", + "create.ponder.gantry_carriage.text_2": "Крановые установки могут двигать присоединённые Блоки", - "create.ponder.gantry_cascaded.header": "Каскадных Порталах", - "create.ponder.gantry_cascaded.text_1": "Крановые Валы Прикрепляются к шасси без нужды в супер-клее", - "create.ponder.gantry_cascaded.text_2": "То же относится и к шасси на движущихся Крановые Валах", + "create.ponder.gantry_cascaded.header": "Многоступенчатом портальном кране", + "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.header": "Направлении движения крана", + "create.ponder.gantry_direction.text_1": "Валы портального крана могут иметь два противоположных направления", + "create.ponder.gantry_direction.text_2": "Направление движения шасси зависит от ориентации их валов", "create.ponder.gantry_direction.text_3": "...а также от направления вращения вала", - "create.ponder.gantry_direction.text_4": "Те же правила относятся передаваемому вращению", + "create.ponder.gantry_direction.text_4": "Те же правила относятся к передаваемому вращению", - "create.ponder.gantry_redstone.header": "Передаче Энергии Порталами", - "create.ponder.gantry_redstone.text_1": "Активированные Редстоуном крановые валы перестают двигать шасси", - "create.ponder.gantry_redstone.text_2": "Вместо этого их сила вращения передаётся выходящему валу шасси", + "create.ponder.gantry_redstone.header": "Подаче энергии на кран", + "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.header": "Использовании валов портального крана", + "create.ponder.gantry_shaft.text_1": "Валы портального крана составляют основу крановой установки. По ним будут двигаться присоединённые шасси", "create.ponder.gantry_shaft.text_2": "Крановые установки могут двигать присоединённые Блоки", - "create.ponder.gearbox.header": "Передаче Силы Вращения с Помощью Коробок Передач", + "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.gearshift.header": "Управлении Силой Вращения при помощи Реверсивного Механизма", - "create.ponder.gearshift.text_1": "Реверсивные Механизмы передают вращение по прямой", - "create.ponder.gearshift.text_2": "При активации Редстоуном, они реверсируют передачу", + "create.ponder.gearshift.header": "Управлении силой вращения при помощи Реверсивного механизма", + "create.ponder.gearshift.text_1": "Реверсивные механизмы передают вращение по прямой", + "create.ponder.gearshift.text_2": "При активации редстоуном, они реверсируют передачу", - "create.ponder.hand_crank.header": "Генерации Силы Вращения при помощи Рукояток", + "create.ponder.hand_crank.header": "Генерации силы вращения при помощи Рукояток", "create.ponder.hand_crank.text_1": "Рукоятки могут быть использованы игроками для приложения силы вращения вручную", - "create.ponder.hand_crank.text_2": "Держите ПКМ, чтобы повернуть их Против Часовой Стрелки", + "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": "UNLOCALIZED: Source Filling and Draining using Hose Pulleys", - "create.ponder.hose_pulley.text_1": "UNLOCALIZED: Hose Pulleys can be used to fill or drain large bodies of Fluid", - "create.ponder.hose_pulley.text_2": "UNLOCALIZED: With the Kinetic Input, the height of the pulleys' hose can be controlled", - "create.ponder.hose_pulley.text_3": "UNLOCALIZED: The Pulley retracts while the input rotation is inverted", - "create.ponder.hose_pulley.text_4": "UNLOCALIZED: On the opposite side, pipes can be connected", - "create.ponder.hose_pulley.text_5": "UNLOCALIZED: Attached pipe networks can either provide fluid to the hose...", - "create.ponder.hose_pulley.text_6": "UNLOCALIZED: ...or pull from it, draining the pool instead", - "create.ponder.hose_pulley.text_7": "UNLOCALIZED: Fill and Drain speed of the pulley depends entirely on the fluid networks' throughput", + "create.ponder.hose_pulley.header": "Наполнении и осушении источников с помощью Шкива со шлангом", + "create.ponder.hose_pulley.text_1": "Шкивы со шлангом можно использовать для заполнения или осушения больших объёмов жидкости.", + "create.ponder.hose_pulley.text_2": "С помощью кинетической энергии можно регулировать длину шланга", + "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_7": "Скорость заполнения и осушения шкивом полностью зависит от пропускной способности жидкостной сети", - "create.ponder.hose_pulley_infinite.header": "UNLOCALIZED: Passively Filling and Draining large bodies of Fluid", - "create.ponder.hose_pulley_infinite.text_1": "UNLOCALIZED: When deploying the Hose Pulley into a large enough ocean...", - "create.ponder.hose_pulley_infinite.text_2": "UNLOCALIZED: It will provide/dispose fluids without affecting the source", - "create.ponder.hose_pulley_infinite.text_3": "UNLOCALIZED: Pipe networks can limitlessly take fluids from/to such pulleys", + "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": "UNLOCALIZED: Fill and Drain level of Hose Pulleys", - "create.ponder.hose_pulley_level.text_1": "UNLOCALIZED: While fully retracted, the Hose Pulley cannot operate", - "create.ponder.hose_pulley_level.text_2": "UNLOCALIZED: Draining runs from top to bottom", - "create.ponder.hose_pulley_level.text_3": "UNLOCALIZED: The surface level will end up just below where the hose ends", - "create.ponder.hose_pulley_level.text_4": "UNLOCALIZED: Filling runs from bottom to top", - "create.ponder.hose_pulley_level.text_5": "UNLOCALIZED: The filled pool will not grow beyond the layer above the hose end", + "create.ponder.hose_pulley_level.header": "Уровне заполнения и осушения Шкива со шлангом", + "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": "Наполнение происходит снизу вверх", + "create.ponder.hose_pulley_level.text_5": "Заполняемый бассейн не будет наполняться выше уровня конца шланга", - "create.ponder.item_drain.header": "UNLOCALIZED: Emptying Fluid Containers using Item Drains", - "create.ponder.item_drain.text_1": "UNLOCALIZED: Item Drains can extract fluids from items", - "create.ponder.item_drain.text_2": "UNLOCALIZED: Right-click it to pour fluids from your held item into it", - "create.ponder.item_drain.text_3": "UNLOCALIZED: When items are inserted from the side...", - "create.ponder.item_drain.text_4": "UNLOCALIZED: ...they roll across, emptying out their contained fluid", - "create.ponder.item_drain.text_5": "UNLOCALIZED: Pipe Networks can now pull the fluid from the drains' internal buffer", + "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.large_cogwheel.header": "Передаче Силы Вращения при помощи Больших Шестерней", - "create.ponder.large_cogwheel.text_1": "Большие Шестерни могут соединяться между собой под прямым углом", + "create.ponder.large_cogwheel.header": "Передаче силы вращения при помощи Больших шестерней", + "create.ponder.large_cogwheel.text_1": "Большие шестерни могут соединяться между собой под прямым углом", "create.ponder.large_cogwheel.text_2": "Это поможет передавать скорость на другие оси вращения", - "create.ponder.linear_chassis_attachment.header": "Прикреплении блоков при помощи Линейных Шасси", - "create.ponder.linear_chassis_attachment.text_1": "Открытые грани Линейных Шасси можно сделать Липкими", + "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_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_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_group.header": "Движении Линейных Шасси в Группах", - "create.ponder.linear_chassis_group.text_1": "Линейные Шасси соединяются с такими же блоками Шасси рядом с ними", - "create.ponder.linear_chassis_group.text_2": "Когда один блок перемещается Штуковиной, другие двигаются c ним", + "create.ponder.linear_chassis_group.header": "Движении Линейных шасси группами", + "create.ponder.linear_chassis_group.text_1": "Линейные шасси соединяются с такими же блоками Шасси рядом с ними", + "create.ponder.linear_chassis_group.text_2": "Когда один блок перемещается Штуковиной, другие двигаются с ним", "create.ponder.linear_chassis_group.text_3": "Шасси других типов или направленные в другом направлении не будут прикрепляться", - "create.ponder.mechanical_arm.header": "Настройке Механических Рук", - "create.ponder.mechanical_arm.text_1": "Входы и Выходы для Механических Рук должны быть назначены перед их установкой", - "create.ponder.mechanical_arm.text_2": "ПКМ по инвентарям, держа Руку, чтобы назначить их Целями", + "create.ponder.mechanical_arm.header": "Настройке Механических рук", + "create.ponder.mechanical_arm.text_1": "Входы и выходы для Механических рук должны быть назначены перед их установкой", + "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_4": "ЛКМ по компонентам, чтобы убрать выделение с них", + "create.ponder.mechanical_arm.text_5": "После установки, Механические руки будут нацелены на ранее выбранные блоки", "create.ponder.mechanical_arm.text_6": "У них может быть неограниченное кол-во входов и выходов в зоне их досягаемости", "create.ponder.mechanical_arm.text_7": "Однако, не каждый вид Инвентаря может взаимодействовать с ними напрямую", "create.ponder.mechanical_arm.text_8": "Воронки и Депо могут помочь заполнить этот пробел", - "create.ponder.mechanical_arm_filtering.header": "Фильтрации Выходов Механической Руки", + "create.ponder.mechanical_arm_filtering.header": "Фильтрации выходов Механической руки", "create.ponder.mechanical_arm_filtering.text_1": "Входы", "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_3": "Иногда желательно ограничить цели руки фильтром", + "create.ponder.mechanical_arm_filtering.text_4": "Сами Механические руки не имеют возможности фильтрации", + "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.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_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_5": "Прокрутка с Ключом позволит вам настроить это", + "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": "При активации Редстоуном, Механические Руки перестают работать", + "create.ponder.mechanical_arm_redstone.header": "Управлении Механическими руками редстоуном", + "create.ponder.mechanical_arm_redstone.text_1": "При активации редстоуном, Механические руки перестают работать", "create.ponder.mechanical_arm_redstone.text_2": "Перед остановкой, они завершат все начатые действия", - "create.ponder.mechanical_arm_redstone.text_3": "Таким образом, инвертированный импульс для вызова ровно одного срабатывания", + "create.ponder.mechanical_arm_redstone.text_3": "Таким образом, инвертированный импульс может использоваться для вызова ровно одного срабатывания", - "create.ponder.mechanical_bearing.header": "Передвижении Структур при помощи Механического Подшипника", - "create.ponder.mechanical_bearing.text_1": "Механические Подшипники прикрепляют блоки перед ними", - "create.ponder.mechanical_bearing.text_2": "при получении Силы Вращения, они соберутся во Вращяющуюся Штуковину", + "create.ponder.mechanical_bearing.header": "Передвижении структур при помощи Механического подшипника", + "create.ponder.mechanical_bearing.text_1": "Механические подшипники прикрепляют блоки перед ними", + "create.ponder.mechanical_bearing.text_2": "При получении силы вращения, они соберутся во Вращающуюся штуковину", - "create.ponder.mechanical_crafter.header": "Настройке Механических Крафтеров", - "create.ponder.mechanical_crafter.text_1": "Массив из Механических Крафтеров можно использовать для автоматизации Создания любого Рецепта", - "create.ponder.mechanical_crafter.text_2": "Можно настроить пути Крафтеров при помощи Ключа", + "create.ponder.mechanical_crafter.header": "Настройке Механических крафтеров", + "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_5": "Механическим Крафтерам нужна Сила Вращения Для Работы", - "create.ponder.mechanical_crafter.text_6": "ПКМ спереди, чтобы вставить Предметы вручную", - "create.ponder.mechanical_crafter.text_7": "Когда каждый слот на пути содержит Предмет, процесс создания начнётся", - "create.ponder.mechanical_crafter.text_8": "Для Рецептов, не полность занимающих крафтер-установку, старт можно спровоцировать Редстоун Имульсом", + "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.text_1": "Предметы можно поместить в Крафтеры автоматически", - "create.ponder.mechanical_crafter_connect.text_2": "При помощи Ключа сзади Крафтеров, их инвентари можно объединить", - "create.ponder.mechanical_crafter_connect.text_3": "Все соединённые Крафтеры теперь будут доступны из одного места ввода", + "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.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.header": "Ломании блоков Механической Дрелью", + "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.header": "Использовании Механических дрелей на штуковинах", + "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.header": "Использование Механических комбайнов на штуковинах", + "create.ponder.mechanical_harvester.text_1": "Когда комбайны движутся как часть движимой штуковины...", "create.ponder.mechanical_harvester.text_2": "Они будут убирать зрелый урожай на своём пути и высаживать его снова", - "create.ponder.mechanical_mixer.header": "Обратобтке Предметов Механическим Миксером", - "create.ponder.mechanical_mixer.text_1": "При помощи Миксера и Чаши можно автоматизировать некоторые Рецепты Крафта", - "create.ponder.mechanical_mixer.text_2": "Доступные рецепты включают любые Бесформенные Рецепты Крафта плюс немного ещё", - "create.ponder.mechanical_mixer.text_3": "Некоторые из них требуют тепло от Горелки Всполоха", + "create.ponder.mechanical_mixer.header": "Обработке предметов Механическим миксером", + "create.ponder.mechanical_mixer.text_1": "При помощи Миксера и Чаши можно автоматизировать некоторые рецепты крафта", + "create.ponder.mechanical_mixer.text_2": "Доступные рецепты включают любые бесформенные рецепты крафта плюс ещё немного", + "create.ponder.mechanical_mixer.text_3": "Некоторые из них требуют тепло от Горелки всполоха", "create.ponder.mechanical_mixer.text_4": "Слот для фильтра можно использовать в случае конфликта двух рецептов", - "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.header": "Перемещении структур при помощи Механических поршней", + "create.ponder.mechanical_piston.text_1": "Механические поршни могут двигать блоки перед ними", + "create.ponder.mechanical_piston.text_2": "Скорость и Направление движения зависят от исходного вращения", + "create.ponder.mechanical_piston.text_3": "Липкие Механические поршни могут тянуть назад присоединённые блоки", - "create.ponder.mechanical_piston_modes.header": "Режимах Движения Механического Поршня", - "create.ponder.mechanical_piston_modes.text_1": "Когда Поршень останавливается, сдвинутая структура обратно становится блоками", + "create.ponder.mechanical_piston_modes.header": "Режимах движения Механического поршня", + "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.header": "Использование Механических плугов на штуковинах", + "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_press.header": "Обработке Предметов Механическим Прессом", - "create.ponder.mechanical_press.text_1": "Механический Пресс может обрататывать предметы под собой", - "create.ponder.mechanical_press.text_2": "Входящие Предметы должны быть брошены или помещены на Депо под Прессом", + "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_4": "Пресс будет задерживать и обрабатывать их автоматически", - "create.ponder.mechanical_press_compacting.header": "Упаковке предметов Механическим Прессом", - "create.ponder.mechanical_press_compacting.text_1": "Спрессовываение предметов в Чаше Упакует их", - "create.ponder.mechanical_press_compacting.text_2": "Упаковка включает любые заполенные 2x2 или 3x3 Рецепты Крафта плюс немного ещё", - "create.ponder.mechanical_press_compacting.text_3": "Некоторым рецептам может потребоваться тепло от Горелки Всполоха", + "create.ponder.mechanical_press_compacting.header": "Упаковке предметов Механическим прессом", + "create.ponder.mechanical_press_compacting.text_1": "Спрессовывание предметов в Чаше упакует их", + "create.ponder.mechanical_press_compacting.text_2": "Упаковка включает любые заполненные 2x2 или 3x3 рецепты крафта плюс ещё немного", + "create.ponder.mechanical_press_compacting.text_3": "Некоторым рецептам может потребоваться тепло от Горелки всполоха", "create.ponder.mechanical_press_compacting.text_4": "Слот для фильтра можно использовать в случае конфликта двух рецептов", - "create.ponder.mechanical_pump_flow.header": "UNLOCALIZED: Fluid Transportation using Mechanical Pumps", - "create.ponder.mechanical_pump_flow.text_1": "UNLOCALIZED: Mechanical Pumps govern the flow of their attached pipe networks", - "create.ponder.mechanical_pump_flow.text_2": "UNLOCALIZED: When powered, their arrow indicates the direction of flow", - "create.ponder.mechanical_pump_flow.text_3": "UNLOCALIZED: The network behind is now pulling fluids...", - "create.ponder.mechanical_pump_flow.text_4": "UNLOCALIZED: ...while the network in front is transferring it outward", - "create.ponder.mechanical_pump_flow.text_5": "UNLOCALIZED: Reversing the input rotation reverses the direction of flow", - "create.ponder.mechanical_pump_flow.text_6": "UNLOCALIZED: Use a Wrench to reverse the orientation of pumps manually", + "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_5": "Смена направления вращения изменяет направление потока", + "create.ponder.mechanical_pump_flow.text_6": "Используйте гаечный ключ, чтобы изменить направление помпы вручную", - "create.ponder.mechanical_pump_speed.header": "UNLOCALIZED: Throughput of Mechanical Pumps", - "create.ponder.mechanical_pump_speed.text_1": "UNLOCALIZED: Regardless of speed, Mechanical Pumps affect pipes connected up to 16 blocks away", - "create.ponder.mechanical_pump_speed.text_2": "UNLOCALIZED: Speeding up the input rotation changes the speed of flow propagation...", - "create.ponder.mechanical_pump_speed.text_3": "UNLOCALIZED: ...aswell as how quickly fluids are transferred", - "create.ponder.mechanical_pump_speed.text_4": "UNLOCALIZED: Pumps can combine their throughputs within shared pipe networks", - "create.ponder.mechanical_pump_speed.text_5": "UNLOCALIZED: Alternating their orientation can help align their flow directions", + "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_4": "Помпы могут объединять свою производительность в общих сетях труб", + "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.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.header": "Использовании Механических пил на штуковинах", + "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_2": "Обработанный предметы всегда движется против входящего для пилы вращения", - "create.ponder.mechanical_saw_processing.text_3": "Пилы могут работать с Механическими Ремнями", - "create.ponder.mechanical_saw_processing.text_4": "Когда из ингридиента можно получить несколько результатов, фильтр может уточнить его", - "create.ponder.mechanical_saw_processing.text_5": "Без фильтра Пила будет выбирать все возможные результаты по-очереди", + "create.ponder.mechanical_saw_processing.header": "Обработке предметов на Механической пиле", + "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_2": "Их можно запустить при помощи Шестерней с любой стороны", - "create.ponder.millstone.text_3": "Бросьте или Внесите предметы сверху", + "create.ponder.millstone.text_2": "Их можно запустить при помощи шестерней с любой стороны", + "create.ponder.millstone.text_3": "Бросьте или внесите предметы сверху", "create.ponder.millstone.text_4": "После некоторого времени результат можно забрать при помощи ПКМ", "create.ponder.millstone.text_5": "Продукты также можно вывести автоматически", "create.ponder.nixie_tube.header": "Использовании Газоразрядных индикаторов", - "create.ponder.nixie_tube.text_1": "При подаче Редстоун сигнала, Газоразрядные индикаторы отобразят его силу.", + "create.ponder.nixie_tube.text_1": "При подаче редстоун сигнала, Газоразрядные индикаторы отобразят его силу.", "create.ponder.nixie_tube.text_2": "С помощью бирок, отредактированных на наковальне, вы можете отобразить любой текст.", - "create.ponder.nixie_tube.text_3": "UNLOCALIZED: Right-Click with Dye to change their display colour", + "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.header": "Удлинителях Поршня", + "create.ponder.piston_pole.text_1": "Без присоединённых Удлинителей, Механический поршень не может двигаться", + "create.ponder.piston_pole.text_2": "Длина стержня, добавленного к его задней части, определяет Диапазон выдвижения.", - "create.ponder.portable_fluid_interface.header": "UNLOCALIZED: Contraption Fluid Exchange", - "create.ponder.portable_fluid_interface.text_1": "UNLOCALIZED: Fluid Tanks on moving contraptions cannot be accessed by any pipes", - "create.ponder.portable_fluid_interface.text_2": "UNLOCALIZED: This component can interact with fluid tanks without the need to stop the contraption", - "create.ponder.portable_fluid_interface.text_3": "UNLOCALIZED: Place a second one with a gap of 1 or 2 blocks inbetween", - "create.ponder.portable_fluid_interface.text_4": "UNLOCALIZED: Whenever they pass by each other, they will engage in a connection", - "create.ponder.portable_fluid_interface.text_5": "UNLOCALIZED: While engaged, the stationary interface will represent ALL Tanks on the contraption", - "create.ponder.portable_fluid_interface.text_6": "UNLOCALIZED: Fluid can now be inserted...", - "create.ponder.portable_fluid_interface.text_7": "UNLOCALIZED: ...or extracted from the contraption", - "create.ponder.portable_fluid_interface.text_8": "UNLOCALIZED: After no contents have been exchanged for a while, the contraption will continue on its way", + "create.ponder.portable_fluid_interface.header": "Портативном жидкостном интерфейсе на штуковинах", + "create.ponder.portable_fluid_interface.text_1": "Жидкостные баки на движущихся штуковинах не могут быть доступны ни каким трубам", + "create.ponder.portable_fluid_interface.text_2": "Этот интерфейс может взаимодействовать с жидкостными баками без необходимости останавливать штуковину", + "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_8": "Если на какое-то время прекратится обмен содержимым - штуковина продолжит свой путь", - "create.ponder.portable_storage_interface.header": "Обмене Хранилища Штуковин", + "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_3": "Установите второй с промежутком в 1 или 2 блока между ними", @@ -2110,191 +2110,191 @@ "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_8": "Если на какое-то время прекратится обмен предметами, штуковина продолжит свой путь", + "create.ponder.portable_storage_interface.text_8": "Если на какое-то время прекратится обмен предметами - штуковина продолжит свой путь", - "create.ponder.portable_storage_interface_redstone.header": "Редстоун Управлении", + "create.ponder.portable_storage_interface_redstone.header": "Управлении редстоуном", "create.ponder.portable_storage_interface_redstone.text_1": "Редстоун сигнал предотвратит включение стационарного интерфейса", - "create.ponder.powered_latch.header": "Управлении сигналами при помощи Силового Триггера", - "create.ponder.powered_latch.text_1": "Силовые Триггеры - управляемые редстоуном рычаги", - "create.ponder.powered_latch.text_2": "Сигнал сзади включаен его", + "create.ponder.powered_latch.header": "Управлении сигналами при помощи Питаемого рычага", + "create.ponder.powered_latch.text_1": "Питаемый рычаг - управляемый редстоуном рычаг", + "create.ponder.powered_latch.text_2": "Сигнал сзади включает его", "create.ponder.powered_latch.text_3": "Сигналы сбоку обратно выключают его", - "create.ponder.powered_latch.text_4": "Силовые Триггеры можно переключать и вручную", + "create.ponder.powered_latch.text_4": "Питаемые рычаги можно переключать и вручную", - "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.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_4": "Силовые переключаемые триггеры также можно переключать вручную", + "create.ponder.powered_toggle_latch.text_4": "Питаемые рычаги-переключатели также можно переключать вручную", - "create.ponder.pulse_repeater.header": "Управлении Сигналами при помощи Импульсных Повторителей", - "create.ponder.pulse_repeater.text_1": "Импульсные Повторители укоротят любой редстуон сигнал до одного импульса.", + "create.ponder.pulse_repeater.header": "Управлении сигналами при помощи Импульсных повторителей", + "create.ponder.pulse_repeater.text_1": "Импульсные повторители укоротят любой редстуон сигнал до одного импульса.", - "create.ponder.radial_chassis.header": "Присоединении Блоков при помощи Радиальных Шасси", - "create.ponder.radial_chassis.text_1": "Радиальное Шасси соединяются с идентинтичными блоками Шасси в ряд", - "create.ponder.radial_chassis.text_2": "Когда один блок перемещается Штуковиной, остальные двигаются с ним", - "create.ponder.radial_chassis.text_3": "боковые грани Радиального Шасси можно сделать Липкими", + "create.ponder.radial_chassis.header": "Присоединении блоков при помощи Радиальных шасси", + "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_5": "ПКМ пустой рукой крадучись, чтобы убрать слизь", "create.ponder.radial_chassis.text_6": "Когда блок находится рядом с липкой гранью...", "create.ponder.radial_chassis.text_7": "он присоединит все достижимые блоки в пределах радиуса на этом слое", - "create.ponder.radial_chassis.text_8": "При помощи Ключа можно указать точный радиус для этого шасси", + "create.ponder.radial_chassis.text_8": "При помощи ключа можно указать точный радиус для этого шасси", "create.ponder.radial_chassis.text_9": "Блоки не достижимые ни одной липкой гранью не прикрепятся", - "create.ponder.redstone_contact.header": "Редстоун Контактах", - "create.ponder.redstone_contact.text_1": "Редстоун Контакты направленные друг на друга будут излучать редстоун сигнал", - "create.ponder.redstone_contact.text_2": "Также применимо, когда один из них - часть двигающейся Штуковины", + "create.ponder.redstone_contact.header": "Контактах редстоун сигнала", + "create.ponder.redstone_contact.text_1": "Контакты редстоун сигнала направленные друг на друга будут излучать редстоун сигнал", + "create.ponder.redstone_contact.text_2": "Также применимо, когда один из них - часть двигающейся штуковины", - "create.ponder.redstone_link.header": "Использовании Редстоун Передатчиков", - "create.ponder.redstone_link.text_1": "Редстоун Передатчики могут передавать редстоун сигнал без проводов", + "create.ponder.redstone_link.header": "Использовании Беспроводного передатчика редстоун сигнала", + "create.ponder.redstone_link.text_1": "Беспроводные передатчики редстоун сигнала могут передавать редстоун сигнал без проводов", "create.ponder.redstone_link.text_2": "ПКМ крадучись, чтобы переключить режим приёмника", - "create.ponder.redstone_link.text_3": "ПКМ Ключом сделает то же самое", + "create.ponder.redstone_link.text_3": "ПКМ ключом сделает то же самое", "create.ponder.redstone_link.text_4": "Приёмники испускают редстоун сигнал передатчиков в 128 блоках", - "create.ponder.redstone_link.text_5": "Положите предметы в два слота, чтобы указать Частоту", + "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.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.header": "Перемещении Лебёдок как частей штуковины", + "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.header": "Режимах движения Лебёдки", + "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": "Регуляторы Ск. Вращения передают вращение от своих осей на Большую Шестерню выше них", + "create.ponder.rotation_speed_controller.header": "Использовании Регулятора скорости вращения", + "create.ponder.rotation_speed_controller.text_1": "Регуляторы ск. вращения передают вращение от своих осей на Большую шестерню выше них", "create.ponder.rotation_speed_controller.text_2": "Можно настроить передаваемую скорость при помощи прокрутки по соответствующему месту сбоку", - "create.ponder.sail.header": "Сборки Мельниц при помощи Парусов", - "create.ponder.sail.text_1": "Паруса - удобные блоки для создания Мельниц", - "create.ponder.sail.text_2": "Они будут прикрепляться к блокам и друг к другу без использования Суперклея или Блоков Шасси", - "create.ponder.sail.text_3": "ПКМ Красителем, чтобы покрасить их", - "create.ponder.sail.text_4": "ПКМ Ножницами, чтобы превратить их снова в раму", + "create.ponder.sail.header": "Сборке Мельниц при помощи Парусов", + "create.ponder.sail.text_1": "Паруса - удобные блоки для создания мельниц", + "create.ponder.sail.text_2": "Они будут прикрепляться к блокам и друг к другу без использования суперклея или блоков шасси", + "create.ponder.sail.text_3": "ПКМ красителем, чтобы покрасить их", + "create.ponder.sail.text_4": "ПКМ ножницами, чтобы превратить их снова в раму", - "create.ponder.sail_frame.header": "Сборки Мельниц при помощи Рам Парусов", - "create.ponder.sail_frame.text_1": "Рамы Парусов - удобные блоки для создания Мельниц", - "create.ponder.sail_frame.text_2": "Они будут прикрепляться к блокам и друг к другу без использования Суперклея или Блоков Шасси", + "create.ponder.sail_frame.header": "Сборке Мельниц при помощи Рам парусов", + "create.ponder.sail_frame.text_1": "Рамы парусов - удобные блоки для создания мельниц", + "create.ponder.sail_frame.text_2": "Они будут прикрепляться к блокам и друг к другу без использования суперклея или блоков шасси", - "create.ponder.sequenced_gearshift.header": "Управлении Скоростью Вращения при помощи Последовательных Переключатель Передач", - "create.ponder.sequenced_gearshift.text_1": "Посл. Перекл. Передач передают вращение следуя временному списку инструкций", - "create.ponder.sequenced_gearshift.text_2": "ПКМ, чтобы отрыть Интерфейс настройки", - "create.ponder.sequenced_gearshift.text_3": "При получении Редстоун Сигнала, он начнёт выполнять заданные инструкции", - "create.ponder.sequenced_gearshift.text_4": "По завершению он будет дождётся следующего Редстоун Сигнала и начнёт сначала", + "create.ponder.sequenced_gearshift.header": "Управлении скоростью вращения при помощи Последовательного переключателя передач", + "create.ponder.sequenced_gearshift.text_1": "Посл. перекл. передач передают вращение следуя временному списку инструкций", + "create.ponder.sequenced_gearshift.text_2": "ПКМ, чтобы отрыть интерфейс настройки", + "create.ponder.sequenced_gearshift.text_3": "При получении Редстоун сигнала, он начнёт выполнять заданные инструкции", + "create.ponder.sequenced_gearshift.text_4": "По завершению он будет дожидаться следующего Редстоун сигнала и начнёт сначала", "create.ponder.sequenced_gearshift.text_5": "Редстоун компаратор можно использовать для считывания текущего прогресса", - "create.ponder.shaft.header": "Передаче Вращения при помощи Валов", + "create.ponder.shaft.header": "Передаче вращения при помощи Валов", "create.ponder.shaft.text_1": "Валы передают вращение по прямой", "create.ponder.shaft_casing.header": "Обрамлении Валов", - "create.ponder.shaft_casing.text_1": "Латунный или Андезитовый Корпус можно использовать для декорации Валов", + "create.ponder.shaft_casing.text_1": "Латунный или андезитовый корпус можно использовать для декорации Валов", - "create.ponder.smart_chute.header": "Фильтрации Предметов при помощи Умных Желобов", - "create.ponder.smart_chute.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": "UNLOCALIZED: Controlling Fluid flow using Smart Pipes", - "create.ponder.smart_pipe.text_1": "UNLOCALIZED: Smart pipes can help control flows by fluid type", - "create.ponder.smart_pipe.text_2": "UNLOCALIZED: When placed directly at the source, they can specify the type of fluid to extract", - "create.ponder.smart_pipe.text_3": "UNLOCALIZED: Simply Right-Click their filter slot with any item containing the desired fluid", - "create.ponder.smart_pipe.text_4": "UNLOCALIZED: When placed further down a pipe network, smart pipes will only let matching fluids continue", + "create.ponder.smart_pipe.header": "Управлении жидкостным потоком с помощью Умных труб", + "create.ponder.smart_pipe.text_1": "Умные трубы могут помочь управлять потоками по типам жидкостей", + "create.ponder.smart_pipe.text_2": "Размещенные непосредственно у источника, они могут указывать тип извлекаемой жидкости", + "create.ponder.smart_pipe.text_3": "Просто щелкните ПКМ на слоте фильтра с любым предметом, содержащим нужную жидкость", + "create.ponder.smart_pipe.text_4": "И при размещении глубже по сети труб умные трубы будут пропускать только подходящие жидкости.", "create.ponder.speedometer.header": "Мониторинге Кинетической информации при помощи Спидометра", - "create.ponder.speedometer.text_1": "Спидометры отображают текущую Скорость присоединённых компонентов", - "create.ponder.speedometer.text_2": "При ношении Инженерных Очков игрок может получить более полную информацию от Прибора", - "create.ponder.speedometer.text_3": "Компараторы могут испускать аналоговый Редстоун Сигнал относительно измерений Спидометра", + "create.ponder.speedometer.text_1": "Спидометры отображают текущую скорость присоединённых компонентов", + "create.ponder.speedometer.text_2": "При ношении Инженерных очков игрок может получить более полную информацию от прибора", + "create.ponder.speedometer.text_3": "Компараторы могут испускать аналоговый Редстоун сигнал относительно измерений спидометра", - "create.ponder.spout_filling.header": "UNLOCALIZED: Filling Items using a Spout", - "create.ponder.spout_filling.text_1": "UNLOCALIZED: The Spout can fill fluid holding items provided beneath it", - "create.ponder.spout_filling.text_2": "UNLOCALIZED: The content of a Spout cannot be accessed manually", - "create.ponder.spout_filling.text_3": "UNLOCALIZED: Instead, Pipes can be used to supply it with fluids", - "create.ponder.spout_filling.text_4": "UNLOCALIZED: The Input items can be placed on a Depot under the Spout", - "create.ponder.spout_filling.text_5": "UNLOCALIZED: When items are provided on a belt...", - "create.ponder.spout_filling.text_6": "UNLOCALIZED: The Spout will hold and process them automatically", + "create.ponder.spout_filling.header": "Наполнении предметов при помощи дозатора", + "create.ponder.spout_filling.text_1": "Дозатор может заполнять подходящие предметы, расположенные под ним", + "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_6": "Дозатор будет удерживать и обрабатывать их автоматически", "create.ponder.stabilized_bearings.header": "Стабилизации Штуковин", - "create.ponder.stabilized_bearings.text_1": "Когда Межанические Подшипники являются частью двигающейся Структуры...", + "create.ponder.stabilized_bearings.text_1": "Когда Механические подшипники являются частью двигающейся структуры...", "create.ponder.stabilized_bearings.text_2": "...они будут пытаться держаться ровно", "create.ponder.stabilized_bearings.text_3": "Опять же, подшипники присоединяют блоки перед ними", - "create.ponder.stabilized_bearings.text_4": "И в результате целая под-Структура будет держаться ровно", + "create.ponder.stabilized_bearings.text_4": "И в результате целая под-структура будет держаться ровно", "create.ponder.sticker.header": "Прикреплении блоков при помощи Липучки", "create.ponder.sticker.text_1": "Липучки идеально подходят для Редстоун-управляемого присоединения блоков", "create.ponder.sticker.text_2": "При получении сигнала они переключают своё состояние", "create.ponder.sticker.text_3": "Если он теперь движется в штуковине, то блок будет двигаться с ним", - "create.ponder.sticker.text_4": "При повторном переключании блок больше не будет прикреплён", + "create.ponder.sticker.text_4": "При повторном переключении блок больше не будет прикреплён", - "create.ponder.stressometer.header": "Мониторинге Кинетической Информации при помощи Стрессометра", - "create.ponder.stressometer.text_1": "Стрессометр отображает текущую Допустимую Нагрузку присоединённой кинетической сети", - "create.ponder.stressometer.text_2": "При ношении Инженерных очков игрок может получить более полную информацию от Прибора", - "create.ponder.stressometer.text_3": "Компараторы могут испускать аналоговый Редстоун Сигнал относительно измерений Стрессометра", + "create.ponder.stressometer.header": "Мониторинге кинетической информации при помощи Стрессометра", + "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.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_5": "Суперклей можно удалить Левым Кликом", + "create.ponder.super_glue.text_5": "Супер-клей можно удалить левым кликом", - "create.ponder.valve_handle.header": "Генерации Силы Вращения при помощи Вентилей", - "create.ponder.valve_handle.text_1": "Игроки могут использовать Вентили для применения силы вращения вручную", - "create.ponder.valve_handle.text_2": "Держите ПКМ для вращения его Против Часовой Стрелки", + "create.ponder.valve_handle.header": "Генерации силы вращения при помощи Вентилей", + "create.ponder.valve_handle.text_1": "Игроки могут использовать вентили для применения силы вращения вручную", + "create.ponder.valve_handle.text_2": "Держите ПКМ для вращения его против Часовой стрелки", "create.ponder.valve_handle.text_3": "Передаваемая ими скорость медленная и точная", - "create.ponder.valve_handle.text_4": "Держите ПКМ Крадучись для вращения его По Часовой Стрелке", + "create.ponder.valve_handle.text_4": "Держите ПКМ крадучись для вращения его по Часовой стрелке", "create.ponder.valve_handle.text_5": "Вентили можно окрашивать в эстетических целях", - "create.ponder.valve_pipe.header": "UNLOCALIZED: Controlling Fluid flow using Valves", - "create.ponder.valve_pipe.text_1": "UNLOCALIZED: Valve pipes help control fluids propagating through pipe networks", - "create.ponder.valve_pipe.text_2": "UNLOCALIZED: Their shaft input controls whether fluid is currently allowed through", - "create.ponder.valve_pipe.text_3": "UNLOCALIZED: Given Rotational Force in the opening direction, the valve will open up", - "create.ponder.valve_pipe.text_4": "UNLOCALIZED: It can be closed again by reversing the input rotation", + "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_2": "Чем больше сторон запитано, тем быстрее будет вращяться Водяное Колесо", - "create.ponder.water_wheel.text_3": "Лопасти Колеса должны быть направлены против течения", + "create.ponder.water_wheel.header": "Генерации силы вращения при помощи Водяных колёс", + "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.header": "Использовании Взвешенных катапульт", + "create.ponder.weighted_ejector.text_1": "ПКМ крадучись и держа катапульту, чтобы выбрать место цели", "create.ponder.weighted_ejector.text_10": "Теперь она ограниченна этим размера стака и будет активироваться только тогда, когда удерживаемый стак достигнет этого количества", - "create.ponder.weighted_ejector.text_11": "Другие Сущности, встав на Катапульту, будут всегда активировать её", - "create.ponder.weighted_ejector.text_2": "Установленная Катапульта будет запускать объекты до отмеченного места", + "create.ponder.weighted_ejector.text_11": "Другие сущности, встав на катапульту, будут всегда активировать её", + "create.ponder.weighted_ejector.text_2": "Установленная катапульта будет запускать объекты до отмеченного места", "create.ponder.weighted_ejector.text_3": "Подходящая цель может быть на любой дистанции и высоте в радиусе", "create.ponder.weighted_ejector.text_4": "Однако они не могут быть сбоку", - "create.ponder.weighted_ejector.text_5": "Если не было выбрано подходящей Цели, она будет целиться в блок перед ней", - "create.ponder.weighted_ejector.text_6": "Предоставьте Силу Вращения, чтобы зарядить её", - "create.ponder.weighted_ejector.text_7": "Установка предметов на Катапульту вызывают её срабатывание", - "create.ponder.weighted_ejector.text_8": "Если Инвентарь выбран целью, то Катапульта будет ждать, пока в нём не появится место.", - "create.ponder.weighted_ejector.text_9": "При помощи Ключа можно настроить необходимый размер стака", + "create.ponder.weighted_ejector.text_5": "Если не было выбрано подходящей цели, она будет целиться в блок перед ней", + "create.ponder.weighted_ejector.text_6": "Предоставьте силу вращения, чтобы зарядить её", + "create.ponder.weighted_ejector.text_7": "Установка предметов на катапульту вызывают её срабатывание", + "create.ponder.weighted_ejector.text_8": "Если инвентарь выбран целью, то катапульта будет ждать, пока в нём не появится место.", + "create.ponder.weighted_ejector.text_9": "При помощи ключа можно настроить необходимый размер стака", - "create.ponder.weighted_ejector_redstone.header": "Управлении Взвешенными Катапультами Редстоуном", - "create.ponder.weighted_ejector_redstone.text_1": "При подаче Редстоун Сигнала Катапульты не будут активироваться", - "create.ponder.weighted_ejector_redstone.text_2": "Кроме того, Наблюдатели могут определить, когда Катапульты срабатывают", + "create.ponder.weighted_ejector_redstone.header": "Управлении Взвешенными катапультами редстоуном", + "create.ponder.weighted_ejector_redstone.text_1": "При подаче редстоун сигнала катапульты не будут активироваться", + "create.ponder.weighted_ejector_redstone.text_2": "Кроме того, наблюдатели могут определить, когда катапульты срабатывают", - "create.ponder.weighted_ejector_tunnel.header": "Разделении Стаков Предметов при помощи Взвешенных Катапульт", - "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.header": "Разделении стаков предметов при помощи Взвешенных катапульт", + "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.windmill_source.header": "Генерации Силы Вращения при помощи Подшипников Ветряной Мельницы", - "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_5": "Используйте Ключ, чтобы настроить направление Вращения", - "create.ponder.windmill_source.text_6": "Правый Клик по Подшипнику в любое время, чтобы остановить его и отредактировать Структуру", + "create.ponder.windmill_source.header": "Генерации силы вращения при помощи Подшипников ветряной мельницы", + "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_5": "Используйте ключ, чтобы настроить направление вращения", + "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/generated/resources/data/create/advancements/aesthetics.json b/src/generated/resources/data/create/advancements/aesthetics.json index 59a86f429..d723cbe38 100644 --- a/src/generated/resources/data/create/advancements/aesthetics.json +++ b/src/generated/resources/data/create/advancements/aesthetics.json @@ -28,8 +28,8 @@ "trigger": "create:bracket_apply", "conditions": { "accepted_entries": [ - "create:large_cogwheel", - "create:cogwheel" + "create:cogwheel", + "create:large_cogwheel" ] } }, From 1e7078fe5680297e62eca1cd8da7167b2398adfa Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Sun, 18 Jul 2021 17:37:14 +0200 Subject: [PATCH 098/118] One-liner marathon - Version bump - Implement #1969 - Guard emptying JEI integration from empty item outputs, addresses #1994 - Goggles icon no longer renders when menu button is set invisible, addresses #1979 - Fixed missing blaze burner in JEI's display of heated compacting recipes, addresses #1970 --- gradle.properties | 2 +- src/main/java/com/simibubi/create/Create.java | 2 +- .../jei/category/CreateRecipeCategory.java | 18 ++++++++++++------ .../compat/jei/category/DeployingCategory.java | 2 ++ .../compat/jei/category/ItemDrainCategory.java | 2 ++ .../compat/jei/category/PackingCategory.java | 9 ++++++++- .../jei/category/animations/AnimatedPress.java | 4 ++-- .../config/ui/OpenCreateMenuButton.java | 2 ++ src/main/resources/META-INF/mods.toml | 2 +- 9 files changed, 31 insertions(+), 12 deletions(-) diff --git a/gradle.properties b/gradle.properties index a7c03ba82..73f5b705b 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,7 +4,7 @@ org.gradle.jvmargs = -Xmx3G org.gradle.daemon = false # mod version info -mod_version = 0.3.2b +mod_version = 0.3.2c minecraft_version = 1.16.5 forge_version = 36.1.32 diff --git a/src/main/java/com/simibubi/create/Create.java b/src/main/java/com/simibubi/create/Create.java index 952135f5b..22a229a9f 100644 --- a/src/main/java/com/simibubi/create/Create.java +++ b/src/main/java/com/simibubi/create/Create.java @@ -56,7 +56,7 @@ public class Create { public static final String ID = "create"; public static final String NAME = "Create"; - public static final String VERSION = "0.3.2b"; + public static final String VERSION = "0.3.2c"; public static final Logger LOGGER = LogManager.getLogger(); diff --git a/src/main/java/com/simibubi/create/compat/jei/category/CreateRecipeCategory.java b/src/main/java/com/simibubi/create/compat/jei/category/CreateRecipeCategory.java index 6bd5e69f8..359c4ee06 100644 --- a/src/main/java/com/simibubi/create/compat/jei/category/CreateRecipeCategory.java +++ b/src/main/java/com/simibubi/create/compat/jei/category/CreateRecipeCategory.java @@ -70,7 +70,7 @@ public abstract class CreateRecipeCategory> implements IRec return icon; } - protected static AllGuiTextures getRenderedSlot(IRecipe recipe, int index) { + public static AllGuiTextures getRenderedSlot(IRecipe recipe, int index) { AllGuiTextures jeiSlot = AllGuiTextures.JEI_SLOT; if (!(recipe instanceof ProcessingRecipe)) return jeiSlot; @@ -85,23 +85,29 @@ public abstract class CreateRecipeCategory> implements IRec return AllGuiTextures.JEI_CHANCE_SLOT; } - protected static IDrawable emptyBackground(int width, int height) { + public static IDrawable emptyBackground(int width, int height) { return new EmptyBackground(width, height); } - protected static IDrawable doubleItemIcon(IItemProvider item1, IItemProvider item2) { + public static IDrawable doubleItemIcon(IItemProvider item1, IItemProvider item2) { return new DoubleItemIcon(() -> new ItemStack(item1), () -> new ItemStack(item2)); } - protected static IDrawable itemIcon(IItemProvider item) { + public static IDrawable itemIcon(IItemProvider item) { return new DoubleItemIcon(() -> new ItemStack(item), () -> ItemStack.EMPTY); } - protected static void addStochasticTooltip(IGuiItemStackGroup itemStacks, List results) { + public static void addStochasticTooltip(IGuiItemStackGroup itemStacks, List results) { + addStochasticTooltip(itemStacks, results, 1); + } + + public static void addStochasticTooltip(IGuiItemStackGroup itemStacks, List results, int startIndex) { itemStacks.addTooltipCallback((slotIndex, input, ingredient, tooltip) -> { if (input) return; - ProcessingOutput output = results.get(slotIndex - 1); + if (slotIndex < startIndex) + return; + ProcessingOutput output = results.get(slotIndex - startIndex); float chance = output.getChance(); if (chance != 1) tooltip.add(1, Lang.translate("recipe.processing.chance", chance < 0.01 ? "<1" : (int) (chance * 100)) diff --git a/src/main/java/com/simibubi/create/compat/jei/category/DeployingCategory.java b/src/main/java/com/simibubi/create/compat/jei/category/DeployingCategory.java index ce0a0748b..f3fc6ee9e 100644 --- a/src/main/java/com/simibubi/create/compat/jei/category/DeployingCategory.java +++ b/src/main/java/com/simibubi/create/compat/jei/category/DeployingCategory.java @@ -53,6 +53,8 @@ public class DeployingCategory extends CreateRecipeCategory { ItemStack result = handler.getContainer(); if (extracted.isEmpty()) return; + if (result.isEmpty()) + return; Ingredient ingredient = Ingredient.of(stack); ResourceLocation itemName = stack.getItem() diff --git a/src/main/java/com/simibubi/create/compat/jei/category/PackingCategory.java b/src/main/java/com/simibubi/create/compat/jei/category/PackingCategory.java index 1e44ef274..dac7c0e38 100644 --- a/src/main/java/com/simibubi/create/compat/jei/category/PackingCategory.java +++ b/src/main/java/com/simibubi/create/compat/jei/category/PackingCategory.java @@ -4,8 +4,10 @@ import java.util.Arrays; import com.mojang.blaze3d.matrix.MatrixStack; import com.simibubi.create.AllBlocks; +import com.simibubi.create.compat.jei.category.animations.AnimatedBlazeBurner; import com.simibubi.create.compat.jei.category.animations.AnimatedPress; import com.simibubi.create.content.contraptions.processing.BasinRecipe; +import com.simibubi.create.content.contraptions.processing.HeatCondition; import com.simibubi.create.foundation.gui.AllGuiTextures; import mezz.jei.api.gui.IRecipeLayout; @@ -19,6 +21,7 @@ import net.minecraft.util.NonNullList; public class PackingCategory extends BasinCategory { private AnimatedPress press = new AnimatedPress(true); + private final AnimatedBlazeBurner heater = new AnimatedBlazeBurner(); private PackingType type; enum PackingType { @@ -80,7 +83,11 @@ public class PackingCategory extends BasinCategory { AllGuiTextures.JEI_SHADOW.draw(matrixStack, 81, 68); } - press.draw(matrixStack, getBackground().getWidth() / 2 + 6, 40); + HeatCondition requiredHeat = recipe.getRequiredHeat(); + if (requiredHeat != HeatCondition.NONE) + heater.withHeat(requiredHeat.visualizeAsBlazeBurner()) + .draw(matrixStack, getBackground().getWidth() / 2 + 3, 55); + press.draw(matrixStack, getBackground().getWidth() / 2 + 3, 34); } } diff --git a/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedPress.java b/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedPress.java index 98414e0da..ebfe6b88e 100644 --- a/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedPress.java +++ b/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedPress.java @@ -19,10 +19,10 @@ public class AnimatedPress extends AnimatedKinetics { @Override public void draw(MatrixStack matrixStack, int xOffset, int yOffset) { matrixStack.pushPose(); - matrixStack.translate(xOffset, yOffset, 100); + matrixStack.translate(xOffset, yOffset, 200); matrixStack.mulPose(Vector3f.XP.rotationDegrees(-15.5f)); matrixStack.mulPose(Vector3f.YP.rotationDegrees(22.5f)); - int scale = basin ? 20 : 24; + int scale = basin ? 23 : 24; defaultBlockElement(shaft(Axis.Z)) .rotateBlock(0, 0, getCurrentAngle()) diff --git a/src/main/java/com/simibubi/create/foundation/config/ui/OpenCreateMenuButton.java b/src/main/java/com/simibubi/create/foundation/config/ui/OpenCreateMenuButton.java index a1f5ed7b2..bf5593471 100644 --- a/src/main/java/com/simibubi/create/foundation/config/ui/OpenCreateMenuButton.java +++ b/src/main/java/com/simibubi/create/foundation/config/ui/OpenCreateMenuButton.java @@ -34,6 +34,8 @@ public class OpenCreateMenuButton extends Button { @Override public void render(MatrixStack mstack, int mouseX, int mouseY, float pticks) { super.render(mstack, mouseX, mouseY, pticks); + if (!visible) + return; Minecraft.getInstance().getItemRenderer().renderGuiItem(icon, x + 2, y + 2); } diff --git a/src/main/resources/META-INF/mods.toml b/src/main/resources/META-INF/mods.toml index ac2e2c277..123163fb6 100644 --- a/src/main/resources/META-INF/mods.toml +++ b/src/main/resources/META-INF/mods.toml @@ -5,7 +5,7 @@ license="MIT" [[mods]] modId="create" -version="v0.3.2b for 1.16.5" +version="v0.3.2c for 1.16.5" displayName="Create" #updateJSONURL="" displayURL="https://www.curseforge.com/minecraft/mc-mods/create" From b8107557bf7c2b3080d70b9a2aed38fa769d4fad Mon Sep 17 00:00:00 2001 From: PepperBell <44146161+PepperCode1@users.noreply.github.com> Date: Sun, 18 Jul 2021 18:32:29 -0700 Subject: [PATCH 099/118] Creative cake touch-ups - Redo texture - Add tooltip summary and actions --- src/generated/resources/.cache/cache | 28 +++++++++--------- .../resources/assets/create/lang/en_us.json | 5 ++++ .../assets/create/lang/unfinished/de_de.json | 7 ++++- .../assets/create/lang/unfinished/es_es.json | 7 ++++- .../assets/create/lang/unfinished/es_mx.json | 7 ++++- .../assets/create/lang/unfinished/fr_fr.json | 7 ++++- .../assets/create/lang/unfinished/it_it.json | 7 ++++- .../assets/create/lang/unfinished/ja_jp.json | 7 ++++- .../assets/create/lang/unfinished/ko_kr.json | 7 ++++- .../assets/create/lang/unfinished/nl_nl.json | 7 ++++- .../assets/create/lang/unfinished/pl_pl.json | 7 ++++- .../assets/create/lang/unfinished/pt_br.json | 7 ++++- .../assets/create/lang/unfinished/ru_ru.json | 7 ++++- .../assets/create/lang/unfinished/zh_cn.json | 7 ++++- .../assets/create/lang/unfinished/zh_tw.json | 7 ++++- .../assets/create/lang/default/tooltips.json | 5 ++++ .../create/textures/item/creative_cake.png | Bin 1996 -> 476 bytes 17 files changed, 102 insertions(+), 27 deletions(-) diff --git a/src/generated/resources/.cache/cache b/src/generated/resources/.cache/cache index c99728601..824279b58 100644 --- a/src/generated/resources/.cache/cache +++ b/src/generated/resources/.cache/cache @@ -426,20 +426,20 @@ a3a11524cd3515fc01d905767b4b7ea782adaf03 assets/create/blockstates/yellow_seat.j 7f39521b211441f5c3e06d60c5978cebe16cacfb assets/create/blockstates/zinc_block.json b7181bcd8182b2f17088e5aa881f374c9c65470c assets/create/blockstates/zinc_ore.json 58e72b5fe2423b661e4892a817e08985c3944318 assets/create/lang/en_ud.json -4a4194ce5449e1583ee36c29341cc4877d79a373 assets/create/lang/en_us.json -de9193132de02a00cd23ebedae8d83821de9dfba assets/create/lang/unfinished/de_de.json -590fe29c7bd39daa2da5070e03fb7593c2120e3b assets/create/lang/unfinished/es_es.json -ef8f10561db8afc3623f8d1bbdc237f3c96ebd1c assets/create/lang/unfinished/es_mx.json -6183b79886c714c1f9030fc8d48935084091ac83 assets/create/lang/unfinished/fr_fr.json -116769f08147a9ddfdc1fde4b6cfe6ca4566fefc assets/create/lang/unfinished/it_it.json -39f4fa7d0a9e2c13711794e07175f76f67a8e30a assets/create/lang/unfinished/ja_jp.json -341e5944e9eab4161e9a7cfb38886bba761e8fff assets/create/lang/unfinished/ko_kr.json -de023ad859d0b30b5ddf012289ad172fc082a17d assets/create/lang/unfinished/nl_nl.json -2afd2b149e8536e02f97d8e07983937b967c42ea assets/create/lang/unfinished/pl_pl.json -48fb802167656527ca637056abc4268eb43846bf assets/create/lang/unfinished/pt_br.json -af04157f33a93029ac6e8104adbbbdcb1ba8c3de assets/create/lang/unfinished/ru_ru.json -80716de50f45dcdaaf6972ae5953f3bf0acfd458 assets/create/lang/unfinished/zh_cn.json -b83ba2b55581bda2dc6ba3cc3e2896d068ba51a2 assets/create/lang/unfinished/zh_tw.json +8c90f6d0aa769179f04fc60661eae4e0dfe94b6a assets/create/lang/en_us.json +20fa2ba09ce9795d647ad7fbb396b9be84ced647 assets/create/lang/unfinished/de_de.json +83079afe226e306ea0c144afdb62cd54385ade16 assets/create/lang/unfinished/es_es.json +1345b3b77de398483064dc7c5eee8f1101975a28 assets/create/lang/unfinished/es_mx.json +c051da9b2e862118c35bab440f0f304e888af85d assets/create/lang/unfinished/fr_fr.json +49722cadb7009efb4625498f33fe0d26015a7d02 assets/create/lang/unfinished/it_it.json +f4f9593711d077604ed5dd34d3335a22bebc512f assets/create/lang/unfinished/ja_jp.json +8eacf297da31d631757823a48dde80262f5a8e11 assets/create/lang/unfinished/ko_kr.json +74188a61256009d9e1530d887d1cb5e98290e778 assets/create/lang/unfinished/nl_nl.json +7f9feb8db7cc5f42050e5f927ea764e2940c9a7d assets/create/lang/unfinished/pl_pl.json +984d338f8b86cc5dfa5909882d3a0182fcd172ad assets/create/lang/unfinished/pt_br.json +34055a83bba83541ecf9216da83ad9895853a2ea assets/create/lang/unfinished/ru_ru.json +cdffe3e7cda940dc47e3f027c79dcfd8c25ecd90 assets/create/lang/unfinished/zh_cn.json +836deffb36e015e5588ee127df69d7cd4a43371b assets/create/lang/unfinished/zh_tw.json 487a511a01b2a4531fb672f917922312db78f958 assets/create/models/block/acacia_window.json b48060cba1a382f373a05bf0039054053eccf076 assets/create/models/block/acacia_window_pane_noside.json 3066db1bf03cffa1a9c7fbacf47ae586632f4eb3 assets/create/models/block/acacia_window_pane_noside_alt.json diff --git a/src/generated/resources/assets/create/lang/en_us.json b/src/generated/resources/assets/create/lang/en_us.json index ccafe4889..19495dc20 100644 --- a/src/generated/resources/assets/create/lang/en_us.json +++ b/src/generated/resources/assets/create/lang/en_us.json @@ -1412,6 +1412,11 @@ "block.create.creative_crate.tooltip.condition1": "When Item in Filter Slot", "block.create.creative_crate.tooltip.behaviour1": "Anything _extracting_ from this container will provide an _endless supply_ of the item specified. Items _inserted_ into this crate will be _voided._", + "item.create.creative_cake.tooltip": "CREATIVE CAKE", + "item.create.creative_cake.tooltip.summary": "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_cake.tooltip.condition1": "R-Click on Blaze Burner", + "item.create.creative_cake.tooltip.behaviour1": "_Locks_ the Blaze Burner's heat level. If used again, _cycles_ the Blaze Burner's heat level.", + "block.create.controller_rail.tooltip": "CONTROLLER RAIL", "block.create.controller_rail.tooltip.summary": "A _uni-directional powered rail_ capable of _fine control_ over a minecarts' _movement speed_.", "block.create.controller_rail.tooltip.condition1": "When Powered by Redstone", 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 cb3af9cfe..7e1d62cbd 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: 1130", + "_": "Missing Localizations: 1134", "_": "->------------------------] Game Elements [------------------------<-", @@ -1413,6 +1413,11 @@ "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_cake.tooltip": "UNLOCALIZED: CREATIVE CAKE", + "item.create.creative_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_cake.tooltip.condition1": "UNLOCALIZED: R-Click on Blaze Burner", + "item.create.creative_cake.tooltip.behaviour1": "UNLOCALIZED: _Locks_ the Blaze Burner's heat level. If used again, _cycles_ the Blaze Burner's heat level.", + "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", 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 c06b1ffa0..bbe001287 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: 53", + "_": "Missing Localizations: 57", "_": "->------------------------] Game Elements [------------------------<-", @@ -1413,6 +1413,11 @@ "block.create.creative_crate.tooltip.condition1": "Cuando el elemento está en la ranura para filtros", "block.create.creative_crate.tooltip.behaviour1": "Todo lo que se _extraiga_ de este contenedor proporcionará un suministro _ilimitado_ del elemento especificado. Los objetos _insertados_ en esta caja serán _evitados_.", + "item.create.creative_cake.tooltip": "UNLOCALIZED: CREATIVE CAKE", + "item.create.creative_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_cake.tooltip.condition1": "UNLOCALIZED: R-Click on Blaze Burner", + "item.create.creative_cake.tooltip.behaviour1": "UNLOCALIZED: _Locks_ the Blaze Burner's heat level. If used again, _cycles_ the Blaze Burner's heat level.", + "block.create.controller_rail.tooltip": "RAÍL DE CONTROL", "block.create.controller_rail.tooltip.summary": "Un raíl energizado _unidireccional_ capaz de _controlar con precisión_ la _velocidad de movimiento_ de una vagoneta.", "block.create.controller_rail.tooltip.condition1": "Cuando es alimentado con redstone", diff --git a/src/generated/resources/assets/create/lang/unfinished/es_mx.json b/src/generated/resources/assets/create/lang/unfinished/es_mx.json index b265816c2..feb723e3c 100644 --- a/src/generated/resources/assets/create/lang/unfinished/es_mx.json +++ b/src/generated/resources/assets/create/lang/unfinished/es_mx.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 1497", + "_": "Missing Localizations: 1501", "_": "->------------------------] Game Elements [------------------------<-", @@ -1413,6 +1413,11 @@ "block.create.creative_crate.tooltip.condition1": "UNLOCALIZED: When Item in Filter Slot", "block.create.creative_crate.tooltip.behaviour1": "UNLOCALIZED: Anything _extracting_ from this container will provide an _endless supply_ of the item specified. Items _inserted_ into this crate will be _voided._", + "item.create.creative_cake.tooltip": "UNLOCALIZED: CREATIVE CAKE", + "item.create.creative_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_cake.tooltip.condition1": "UNLOCALIZED: R-Click on Blaze Burner", + "item.create.creative_cake.tooltip.behaviour1": "UNLOCALIZED: _Locks_ the Blaze Burner's heat level. If used again, _cycles_ the Blaze Burner's heat level.", + "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", diff --git a/src/generated/resources/assets/create/lang/unfinished/fr_fr.json b/src/generated/resources/assets/create/lang/unfinished/fr_fr.json index da4e0eb8e..8ef392f77 100644 --- a/src/generated/resources/assets/create/lang/unfinished/fr_fr.json +++ b/src/generated/resources/assets/create/lang/unfinished/fr_fr.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 1382", + "_": "Missing Localizations: 1386", "_": "->------------------------] Game Elements [------------------------<-", @@ -1413,6 +1413,11 @@ "block.create.creative_crate.tooltip.condition1": "Quand un objet se trouve dans l'emplacement de filtrage", "block.create.creative_crate.tooltip.behaviour1": "Tout ce qui _extrait_ de ce conteneur aura une _alimentation illimitée_ de l'objet spécifié. Les objets _insérés_ dans cette caisse seront _éliminés_.", + "item.create.creative_cake.tooltip": "UNLOCALIZED: CREATIVE CAKE", + "item.create.creative_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_cake.tooltip.condition1": "UNLOCALIZED: R-Click on Blaze Burner", + "item.create.creative_cake.tooltip.behaviour1": "UNLOCALIZED: _Locks_ the Blaze Burner's heat level. If used again, _cycles_ the Blaze Burner's heat level.", + "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", diff --git a/src/generated/resources/assets/create/lang/unfinished/it_it.json b/src/generated/resources/assets/create/lang/unfinished/it_it.json index 7f9cdea78..2db032897 100644 --- a/src/generated/resources/assets/create/lang/unfinished/it_it.json +++ b/src/generated/resources/assets/create/lang/unfinished/it_it.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 910", + "_": "Missing Localizations: 914", "_": "->------------------------] Game Elements [------------------------<-", @@ -1413,6 +1413,11 @@ "block.create.creative_crate.tooltip.condition1": "Quando un oggetto è nel filtro", "block.create.creative_crate.tooltip.behaviour1": "Qualsiasi _estrazione_ da questo contenitore fornisce _provviste infinite_ dell'oggetto in questione. Gli oggetti _inseriti_ in questo baule verranno _svuotati_.", + "item.create.creative_cake.tooltip": "UNLOCALIZED: CREATIVE CAKE", + "item.create.creative_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_cake.tooltip.condition1": "UNLOCALIZED: R-Click on Blaze Burner", + "item.create.creative_cake.tooltip.behaviour1": "UNLOCALIZED: _Locks_ the Blaze Burner's heat level. If used again, _cycles_ the Blaze Burner's heat level.", + "block.create.controller_rail.tooltip": "BINARIO DI CONTROLLO", "block.create.controller_rail.tooltip.summary": "Un _binario alimentato unidirezionale_ capace di _controllare precisamente_ la _velocità di movimento_ di un carrello da miniera.", "block.create.controller_rail.tooltip.condition1": "Quando alimentato da redstone", diff --git a/src/generated/resources/assets/create/lang/unfinished/ja_jp.json b/src/generated/resources/assets/create/lang/unfinished/ja_jp.json index 74f647924..685bb4356 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ja_jp.json +++ b/src/generated/resources/assets/create/lang/unfinished/ja_jp.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 42", + "_": "Missing Localizations: 46", "_": "->------------------------] Game Elements [------------------------<-", @@ -1413,6 +1413,11 @@ "block.create.creative_crate.tooltip.condition1": "フィルタースロットにアイテムが入っているとき", "block.create.creative_crate.tooltip.behaviour1": "このクレートから何かを_搬出_すると、指定されたアイテムが_無限_に_搬出_されます。このクレートに_搬入_されたアイテムは_消滅_します。", + "item.create.creative_cake.tooltip": "UNLOCALIZED: CREATIVE CAKE", + "item.create.creative_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_cake.tooltip.condition1": "UNLOCALIZED: R-Click on Blaze Burner", + "item.create.creative_cake.tooltip.behaviour1": "UNLOCALIZED: _Locks_ the Blaze Burner's heat level. If used again, _cycles_ the Blaze Burner's heat level.", + "block.create.controller_rail.tooltip": "コントローラーレール", "block.create.controller_rail.tooltip.summary": "トロッコの_移動速度_を_細かく制御_できる_一方通行_の_パワード_レール", "block.create.controller_rail.tooltip.condition1": "レッドストーン信号を受けたとき", diff --git a/src/generated/resources/assets/create/lang/unfinished/ko_kr.json b/src/generated/resources/assets/create/lang/unfinished/ko_kr.json index 36354049d..b81885df1 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ko_kr.json +++ b/src/generated/resources/assets/create/lang/unfinished/ko_kr.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 20", + "_": "Missing Localizations: 24", "_": "->------------------------] Game Elements [------------------------<-", @@ -1413,6 +1413,11 @@ "block.create.creative_crate.tooltip.condition1": "필터에 아이템을 설정할 시", "block.create.creative_crate.tooltip.behaviour1": "선택된 아이템을 _무한정_으로 _빼낼_ 수 있습니다. 대신 _들어간_ 아이템은 _삭제_됩니다.", + "item.create.creative_cake.tooltip": "UNLOCALIZED: CREATIVE CAKE", + "item.create.creative_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_cake.tooltip.condition1": "UNLOCALIZED: R-Click on Blaze Burner", + "item.create.creative_cake.tooltip.behaviour1": "UNLOCALIZED: _Locks_ the Blaze Burner's heat level. If used again, _cycles_ the Blaze Burner's heat level.", + "block.create.controller_rail.tooltip": "CONTROLLER RAIL", "block.create.controller_rail.tooltip.summary": "_광산 수레_의 _이동속도_를 _세밀하게_ _조정_할 수 있는 _양방향_ _전동 레일_입니다.", "block.create.controller_rail.tooltip.condition1": "레드스톤 신호를 받을 때", diff --git a/src/generated/resources/assets/create/lang/unfinished/nl_nl.json b/src/generated/resources/assets/create/lang/unfinished/nl_nl.json index 4df5bbe32..ae6d84e70 100644 --- a/src/generated/resources/assets/create/lang/unfinished/nl_nl.json +++ b/src/generated/resources/assets/create/lang/unfinished/nl_nl.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 1763", + "_": "Missing Localizations: 1767", "_": "->------------------------] Game Elements [------------------------<-", @@ -1413,6 +1413,11 @@ "block.create.creative_crate.tooltip.condition1": "UNLOCALIZED: When Item in Filter Slot", "block.create.creative_crate.tooltip.behaviour1": "UNLOCALIZED: Anything _extracting_ from this container will provide an _endless supply_ of the item specified. Items _inserted_ into this crate will be _voided._", + "item.create.creative_cake.tooltip": "UNLOCALIZED: CREATIVE CAKE", + "item.create.creative_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_cake.tooltip.condition1": "UNLOCALIZED: R-Click on Blaze Burner", + "item.create.creative_cake.tooltip.behaviour1": "UNLOCALIZED: _Locks_ the Blaze Burner's heat level. If used again, _cycles_ the Blaze Burner's heat level.", + "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", diff --git a/src/generated/resources/assets/create/lang/unfinished/pl_pl.json b/src/generated/resources/assets/create/lang/unfinished/pl_pl.json index 6ac659905..5e587fc6a 100644 --- a/src/generated/resources/assets/create/lang/unfinished/pl_pl.json +++ b/src/generated/resources/assets/create/lang/unfinished/pl_pl.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 252", + "_": "Missing Localizations: 256", "_": "->------------------------] Game Elements [------------------------<-", @@ -1413,6 +1413,11 @@ "block.create.creative_crate.tooltip.condition1": "Kiedy przedmiot jest w slocie na filtr", "block.create.creative_crate.tooltip.behaviour1": "Bloki _wyciągające_ przedmioty z tego bloku będą miały _nieskończony zapas_ wybranego przedmiotu. Przedmioty włożone do tej skrzynki będą _usuwane_.", + "item.create.creative_cake.tooltip": "UNLOCALIZED: CREATIVE CAKE", + "item.create.creative_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_cake.tooltip.condition1": "UNLOCALIZED: R-Click on Blaze Burner", + "item.create.creative_cake.tooltip.behaviour1": "UNLOCALIZED: _Locks_ the Blaze Burner's heat level. If used again, _cycles_ the Blaze Burner's heat level.", + "block.create.controller_rail.tooltip": "TORY STERUJĄCE", "block.create.controller_rail.tooltip.summary": "_Wielokierunkowy_ zasilany tor pozwalający na _dokładną kontrolę_ nad _prędkością wagonika_.", "block.create.controller_rail.tooltip.condition1": "Kiedy zasilone przez Redstone", 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 cb5b10584..431980db9 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: 1804", + "_": "Missing Localizations: 1808", "_": "->------------------------] Game Elements [------------------------<-", @@ -1413,6 +1413,11 @@ "block.create.creative_crate.tooltip.condition1": "UNLOCALIZED: When Item in Filter Slot", "block.create.creative_crate.tooltip.behaviour1": "UNLOCALIZED: Anything _extracting_ from this container will provide an _endless supply_ of the item specified. Items _inserted_ into this crate will be _voided._", + "item.create.creative_cake.tooltip": "UNLOCALIZED: CREATIVE CAKE", + "item.create.creative_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_cake.tooltip.condition1": "UNLOCALIZED: R-Click on Blaze Burner", + "item.create.creative_cake.tooltip.behaviour1": "UNLOCALIZED: _Locks_ the Blaze Burner's heat level. If used again, _cycles_ the Blaze Burner's heat level.", + "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", diff --git a/src/generated/resources/assets/create/lang/unfinished/ru_ru.json b/src/generated/resources/assets/create/lang/unfinished/ru_ru.json index 2c5b83ea7..f33d292b3 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ru_ru.json +++ b/src/generated/resources/assets/create/lang/unfinished/ru_ru.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 283", + "_": "Missing Localizations: 287", "_": "->------------------------] Game Elements [------------------------<-", @@ -1413,6 +1413,11 @@ "block.create.creative_crate.tooltip.condition1": "Когда предмет в слоте фильтра", "block.create.creative_crate.tooltip.behaviour1": "Все, что извлечено из этого контейнера, обеспечит бесконечную поставку указанного предмета. Предметы, _вставленные_ в этот ящик, будут _аннулированы_.", + "item.create.creative_cake.tooltip": "UNLOCALIZED: CREATIVE CAKE", + "item.create.creative_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_cake.tooltip.condition1": "UNLOCALIZED: R-Click on Blaze Burner", + "item.create.creative_cake.tooltip.behaviour1": "UNLOCALIZED: _Locks_ the Blaze Burner's heat level. If used again, _cycles_ the Blaze Burner's heat level.", + "block.create.controller_rail.tooltip": "CONTROLLER RAIL", "block.create.controller_rail.tooltip.summary": "_Все-направленные запитанные рельсы_, позволяющие _точную настройку_ _скорости_ вагонеток.", "block.create.controller_rail.tooltip.condition1": "Когда запитано редстоун-сигналом", 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 c46fc000a..0135a1c11 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: 293", + "_": "Missing Localizations: 297", "_": "->------------------------] Game Elements [------------------------<-", @@ -1413,6 +1413,11 @@ "block.create.creative_crate.tooltip.condition1": "当标记了物品时", "block.create.creative_crate.tooltip.behaviour1": "任何从容器中_提取_的物品都是_无限量的_,而任何_放置_到容器中的物品都会被_送入虚空_", + "item.create.creative_cake.tooltip": "UNLOCALIZED: CREATIVE CAKE", + "item.create.creative_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_cake.tooltip.condition1": "UNLOCALIZED: R-Click on Blaze Burner", + "item.create.creative_cake.tooltip.behaviour1": "UNLOCALIZED: _Locks_ the Blaze Burner's heat level. If used again, _cycles_ the Blaze Burner's heat level.", + "block.create.controller_rail.tooltip": "控制铁轨", "block.create.controller_rail.tooltip.summary": "一种_汇流的,受红石信号影响的_铁轨,可以_较好地控制_经过矿车的_移动速度_。", "block.create.controller_rail.tooltip.condition1": "通入红石信号时时", diff --git a/src/generated/resources/assets/create/lang/unfinished/zh_tw.json b/src/generated/resources/assets/create/lang/unfinished/zh_tw.json index 03574a0a8..124149eaf 100644 --- a/src/generated/resources/assets/create/lang/unfinished/zh_tw.json +++ b/src/generated/resources/assets/create/lang/unfinished/zh_tw.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 15", + "_": "Missing Localizations: 19", "_": "->------------------------] Game Elements [------------------------<-", @@ -1413,6 +1413,11 @@ "block.create.creative_crate.tooltip.condition1": "當標記了物品時", "block.create.creative_crate.tooltip.behaviour1": "容器將會從虛空中提供_無限量_的標記物品,並且任何放置到容器中的物品都會被_送入虛空_", + "item.create.creative_cake.tooltip": "UNLOCALIZED: CREATIVE CAKE", + "item.create.creative_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_cake.tooltip.condition1": "UNLOCALIZED: R-Click on Blaze Burner", + "item.create.creative_cake.tooltip.behaviour1": "UNLOCALIZED: _Locks_ the Blaze Burner's heat level. If used again, _cycles_ the Blaze Burner's heat level.", + "block.create.controller_rail.tooltip": "控制鐵軌", "block.create.controller_rail.tooltip.summary": "單向電動導軌,能夠精細控制礦車的移動速度。", "block.create.controller_rail.tooltip.condition1": "被紅石激活時", diff --git a/src/main/resources/assets/create/lang/default/tooltips.json b/src/main/resources/assets/create/lang/default/tooltips.json index 412cc7a7d..058848936 100644 --- a/src/main/resources/assets/create/lang/default/tooltips.json +++ b/src/main/resources/assets/create/lang/default/tooltips.json @@ -154,6 +154,11 @@ "block.create.creative_crate.tooltip.condition1": "When Item in Filter Slot", "block.create.creative_crate.tooltip.behaviour1": "Anything _extracting_ from this container will provide an _endless supply_ of the item specified. Items _inserted_ into this crate will be _voided._", + "item.create.creative_cake.tooltip": "CREATIVE CAKE", + "item.create.creative_cake.tooltip.summary": "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_cake.tooltip.condition1": "R-Click on Blaze Burner", + "item.create.creative_cake.tooltip.behaviour1": "_Locks_ the Blaze Burner's heat level. If used again, _cycles_ the Blaze Burner's heat level.", + "block.create.controller_rail.tooltip": "CONTROLLER RAIL", "block.create.controller_rail.tooltip.summary": "A _uni-directional powered rail_ capable of _fine control_ over a minecarts' _movement speed_.", "block.create.controller_rail.tooltip.condition1": "When Powered by Redstone", diff --git a/src/main/resources/assets/create/textures/item/creative_cake.png b/src/main/resources/assets/create/textures/item/creative_cake.png index 4eba9b120f656a71e6fb3bfafc377c5c5d333150..900ef50dbae5c926082afefe806264c33c093434 100644 GIT binary patch delta 462 zcmV;<0Wto}58MNg7=H)`0000V^Z#K00004VQb$4nuFf3k0004&NklCXlRH)dIRmzE70l{L_=HD3utL*kmG1bX$z$w8?NXM zjWGXoN`*+*aCq0Hdp+ZGe4cxr-xvN`LOV0LDjV(m$oZ0BoPRzTLUh97T3j%*Rvn1-L4k0mqL3$Qg+nPmaa+S&lx=>@#kq<9HM=5^)YsWL`gu z4EJ~)TbtgtxXg}n(0az;c*HoE+eOYuECrVFjg2@0)JJ>)IU{k|cSosO<3V8JZ`zk`13C-{H#4a{EYtau|WLkFZX^U z^~lj9$X$Zh!&CFDw`1fH#I*a}X`6HwLe(MDma*Z%0h`MZwm0bL1Mr|V+9`-%rUy@vc)aEY3hSA zh34iklN^MB)XLlXe6EBIph<#xWSM5u4dXXN5?d1C9!QGAt+d zRKS1>CQyTw^!pnxpzgO7+e#TLpYaPT377$j&& zAxDlrhJP5N#F?kEuy_d)MMNb@R#vY;ql&5~&505tjRliplB6l6oS`)P3|SfTGdc27 zP0nm0Hq3!wWtikNHyHzizB>xTUEF;z_m(#UbbpmM`ieO-srx6GGn2X}=05ZG1#2y@ zbjypN8HKRR|6-}4X_J2Lw!+A?C@SSSg7-2{|0`CY&Txvf8MyNyT zSDxKez#;P!kKTC#NA6( z-j%dkekSp-2RK!Yv8@%R*_o=>5^G<|+Y0eVu5~@6avHdL;kX(;n5EK6bC|njw|^+v zN}}CDC`e78RJ6K>VRr8>6>sJUP8)Ve*?TCt-aZz{_7xVTzO9&lBc6;q?%q z@-Ya9Xv6U)YapbY>Q)juu8!Q}*sW%8T&2oqEI_M%@}fPwNWG^zcB@9181}9zI5rIz zKBd!m2i%T+PDS+DrQPgPJh#ZB{ZE-+s(BkFX|uuzLt+%GcRDx_`RP8I7GfV z2?P7F4yL_xtL=gP-s}yB=GRu5E1~4-k)Ohr)N0TC2!X;4xv`wAWwC*U4i`A)?SnP@ zZa1E2#WmfxlY+DMeh2kRp15bf1@t3l-?3%8RlsBQxh%w@iSaF%KP#WX_J1dhG>M;KEQGxcOitwOXs{#9ARZiAwDM_HRyuGk6f2se&bwnSm2ovBb%Nhj(-q~r4E)mn3WBc zc#=4(s2b%9IhPgATb$KOjkWH{Ul=NA%NefI96|z%NFoIhGHTdB1r}noYNVJ*(|+8; zKj`>V2-{@DB)VV(2<0004WQh!cU06^y0W&i*H0b)x> zL;#2d9Y_EG010qNS#tmYE+YT{E+YYWr9XB6000McNliruX=c$z~0%hdS&N|0tTjv86BOg zrwcH!x>wFxy+flofPpdDy}Z1{On`w=JtZ{Mtw?}@LCC$MqeKyC4x^B Date: Tue, 20 Jul 2021 19:44:20 -0400 Subject: [PATCH 100/118] Fix capitalization in English subtitles --- src/main/java/com/simibubi/create/AllSoundEvents.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/simibubi/create/AllSoundEvents.java b/src/main/java/com/simibubi/create/AllSoundEvents.java index 77a60bbe4..0dbe9ba98 100644 --- a/src/main/java/com/simibubi/create/AllSoundEvents.java +++ b/src/main/java/com/simibubi/create/AllSoundEvents.java @@ -55,7 +55,7 @@ public class AllSoundEvents { .category(SoundCategory.BLOCKS) .build(), - FUNNEL_FLAP = create("funnel_flap").subtitle("Funnel Flaps") + FUNNEL_FLAP = create("funnel_flap").subtitle("Funnel flaps") .playExisting(SoundEvents.ITEM_FRAME_ROTATE_ITEM, .125f, 1.5f) .playExisting(SoundEvents.WOOL_BREAK, .0425f, .75f) .category(SoundCategory.BLOCKS) @@ -79,7 +79,7 @@ public class AllSoundEvents { .category(SoundCategory.BLOCKS) .build(), - MIXING = create("mixing").subtitle("Mixing Noises") + MIXING = create("mixing").subtitle("Mixing noises") .playExisting(SoundEvents.GILDED_BLACKSTONE_BREAK, .125f, .5f) .playExisting(SoundEvents.NETHERRACK_BREAK, .125f, .5f) .category(SoundCategory.BLOCKS) From 28d9df16f27eef8292a6d7c520069fed34f9d527 Mon Sep 17 00:00:00 2001 From: PepperBell <44146161+PepperCode1@users.noreply.github.com> Date: Tue, 20 Jul 2021 17:45:41 -0700 Subject: [PATCH 101/118] Post-PR datagen --- src/generated/resources/.cache/cache | 18 +++++++++--------- .../resources/assets/create/lang/en_us.json | 4 ++-- .../assets/create/lang/unfinished/de_de.json | 4 ++-- .../assets/create/lang/unfinished/es_mx.json | 4 ++-- .../assets/create/lang/unfinished/fr_fr.json | 4 ++-- .../assets/create/lang/unfinished/it_it.json | 4 ++-- .../assets/create/lang/unfinished/nl_nl.json | 4 ++-- .../assets/create/lang/unfinished/pt_br.json | 4 ++-- .../assets/create/lang/unfinished/zh_cn.json | 4 ++-- .../assets/create/lang/unfinished/zh_tw.json | 2 +- 10 files changed, 26 insertions(+), 26 deletions(-) diff --git a/src/generated/resources/.cache/cache b/src/generated/resources/.cache/cache index 81c97809c..4e8a3c809 100644 --- a/src/generated/resources/.cache/cache +++ b/src/generated/resources/.cache/cache @@ -426,20 +426,20 @@ a3a11524cd3515fc01d905767b4b7ea782adaf03 assets/create/blockstates/yellow_seat.j 7f39521b211441f5c3e06d60c5978cebe16cacfb assets/create/blockstates/zinc_block.json b7181bcd8182b2f17088e5aa881f374c9c65470c assets/create/blockstates/zinc_ore.json 58e72b5fe2423b661e4892a817e08985c3944318 assets/create/lang/en_ud.json -8c90f6d0aa769179f04fc60661eae4e0dfe94b6a assets/create/lang/en_us.json -20fa2ba09ce9795d647ad7fbb396b9be84ced647 assets/create/lang/unfinished/de_de.json +6d3a0bf566fc8de302cd48ae4686582cb78110b5 assets/create/lang/en_us.json +67dce8f635842cd12a9ae98fedd492b4cfb9eb28 assets/create/lang/unfinished/de_de.json 83079afe226e306ea0c144afdb62cd54385ade16 assets/create/lang/unfinished/es_es.json -1345b3b77de398483064dc7c5eee8f1101975a28 assets/create/lang/unfinished/es_mx.json -c051da9b2e862118c35bab440f0f304e888af85d assets/create/lang/unfinished/fr_fr.json -49722cadb7009efb4625498f33fe0d26015a7d02 assets/create/lang/unfinished/it_it.json +e357c238bb1b704d997434beebace6424f5a6abf assets/create/lang/unfinished/es_mx.json +67d49ab1b8a6d253a0b402021e40b3ead6ad4407 assets/create/lang/unfinished/fr_fr.json +991986bd6fffc6c9ac170451c2bc9897f451ce3f assets/create/lang/unfinished/it_it.json 4ff92f6333ec6a831a30a1c0e01f6cb40035b531 assets/create/lang/unfinished/ja_jp.json eeadeb375d666a118a106ff413b5b3befefaaae5 assets/create/lang/unfinished/ko_kr.json -74188a61256009d9e1530d887d1cb5e98290e778 assets/create/lang/unfinished/nl_nl.json +1a5f20e1c0dd6fdaa872d7cfa29c40f5223de3ae assets/create/lang/unfinished/nl_nl.json 7f9feb8db7cc5f42050e5f927ea764e2940c9a7d assets/create/lang/unfinished/pl_pl.json -984d338f8b86cc5dfa5909882d3a0182fcd172ad assets/create/lang/unfinished/pt_br.json +8ea9e0639ac1a143baa7f82885ebd413bffefd01 assets/create/lang/unfinished/pt_br.json 0b42660049fbf141e9cc9501454dfdf7a3e71816 assets/create/lang/unfinished/ru_ru.json -cdffe3e7cda940dc47e3f027c79dcfd8c25ecd90 assets/create/lang/unfinished/zh_cn.json -836deffb36e015e5588ee127df69d7cd4a43371b assets/create/lang/unfinished/zh_tw.json +52f37952e0167f97d5cf1e4d5b2ed5eccd379ea6 assets/create/lang/unfinished/zh_cn.json +355e85057e3d39d51f7aaee908884db96e4bfdd9 assets/create/lang/unfinished/zh_tw.json 487a511a01b2a4531fb672f917922312db78f958 assets/create/models/block/acacia_window.json b48060cba1a382f373a05bf0039054053eccf076 assets/create/models/block/acacia_window_pane_noside.json 3066db1bf03cffa1a9c7fbacf47ae586632f4eb3 assets/create/models/block/acacia_window_pane_noside_alt.json diff --git a/src/generated/resources/assets/create/lang/en_us.json b/src/generated/resources/assets/create/lang/en_us.json index 19495dc20..43bb9fe31 100644 --- a/src/generated/resources/assets/create/lang/en_us.json +++ b/src/generated/resources/assets/create/lang/en_us.json @@ -1221,7 +1221,7 @@ "create.subtitle.contraption_disassemble": "Contraption stops", "create.subtitle.peculiar_bell_use": "Peculiar Bell tolls", - "create.subtitle.mixing": "Mixing Noises", + "create.subtitle.mixing": "Mixing noises", "create.subtitle.mechanical_press_activation_belt": "Mechanical Press bonks", "create.subtitle.fwoomp": "Potato Launcher fwoomps", "create.subtitle.worldshaper_place": "Worldshaper zaps", @@ -1229,7 +1229,7 @@ "create.subtitle.depot_slide": "Item slides", "create.subtitle.saw_activate_stone": "Mechanical Saw activates", "create.subtitle.blaze_munch": "Blaze Burner munches", - "create.subtitle.funnel_flap": "Funnel Flaps", + "create.subtitle.funnel_flap": "Funnel flaps", "create.subtitle.schematicannon_finish": "Schematicannon dings", "create.subtitle.haunted_bell_use": "Haunted Bell tolls", "create.subtitle.scroll_value": "Scroll-input clicks", 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 7e1d62cbd..08ce90fbc 100644 --- a/src/generated/resources/assets/create/lang/unfinished/de_de.json +++ b/src/generated/resources/assets/create/lang/unfinished/de_de.json @@ -1222,7 +1222,7 @@ "create.subtitle.contraption_disassemble": "UNLOCALIZED: Contraption stops", "create.subtitle.peculiar_bell_use": "UNLOCALIZED: Peculiar Bell tolls", - "create.subtitle.mixing": "UNLOCALIZED: Mixing Noises", + "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", @@ -1230,7 +1230,7 @@ "create.subtitle.depot_slide": "UNLOCALIZED: Item slides", "create.subtitle.saw_activate_stone": "UNLOCALIZED: Mechanical Saw activates", "create.subtitle.blaze_munch": "Lohe kaut glücklich", - "create.subtitle.funnel_flap": "UNLOCALIZED: Funnel Flaps", + "create.subtitle.funnel_flap": "UNLOCALIZED: Funnel flaps", "create.subtitle.schematicannon_finish": "Bauplankanone endet", "create.subtitle.haunted_bell_use": "UNLOCALIZED: Haunted Bell tolls", "create.subtitle.scroll_value": "UNLOCALIZED: Scroll-input clicks", diff --git a/src/generated/resources/assets/create/lang/unfinished/es_mx.json b/src/generated/resources/assets/create/lang/unfinished/es_mx.json index feb723e3c..7a48a3269 100644 --- a/src/generated/resources/assets/create/lang/unfinished/es_mx.json +++ b/src/generated/resources/assets/create/lang/unfinished/es_mx.json @@ -1222,7 +1222,7 @@ "create.subtitle.contraption_disassemble": "UNLOCALIZED: Contraption stops", "create.subtitle.peculiar_bell_use": "UNLOCALIZED: Peculiar Bell tolls", - "create.subtitle.mixing": "UNLOCALIZED: Mixing Noises", + "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", @@ -1230,7 +1230,7 @@ "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.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", diff --git a/src/generated/resources/assets/create/lang/unfinished/fr_fr.json b/src/generated/resources/assets/create/lang/unfinished/fr_fr.json index 8ef392f77..db653649b 100644 --- a/src/generated/resources/assets/create/lang/unfinished/fr_fr.json +++ b/src/generated/resources/assets/create/lang/unfinished/fr_fr.json @@ -1222,7 +1222,7 @@ "create.subtitle.contraption_disassemble": "UNLOCALIZED: Contraption stops", "create.subtitle.peculiar_bell_use": "UNLOCALIZED: Peculiar Bell tolls", - "create.subtitle.mixing": "UNLOCALIZED: Mixing Noises", + "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", @@ -1230,7 +1230,7 @@ "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.funnel_flap": "UNLOCALIZED: Funnel flaps", "create.subtitle.schematicannon_finish": "Fin de schémacanon", "create.subtitle.haunted_bell_use": "UNLOCALIZED: Haunted Bell tolls", "create.subtitle.scroll_value": "UNLOCALIZED: Scroll-input clicks", diff --git a/src/generated/resources/assets/create/lang/unfinished/it_it.json b/src/generated/resources/assets/create/lang/unfinished/it_it.json index 2db032897..ab0b5cbfa 100644 --- a/src/generated/resources/assets/create/lang/unfinished/it_it.json +++ b/src/generated/resources/assets/create/lang/unfinished/it_it.json @@ -1222,7 +1222,7 @@ "create.subtitle.contraption_disassemble": "UNLOCALIZED: Contraption stops", "create.subtitle.peculiar_bell_use": "UNLOCALIZED: Peculiar Bell tolls", - "create.subtitle.mixing": "UNLOCALIZED: Mixing Noises", + "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", @@ -1230,7 +1230,7 @@ "create.subtitle.depot_slide": "UNLOCALIZED: Item slides", "create.subtitle.saw_activate_stone": "UNLOCALIZED: Mechanical Saw activates", "create.subtitle.blaze_munch": "Il blaze lo gusta felicemente", - "create.subtitle.funnel_flap": "UNLOCALIZED: Funnel Flaps", + "create.subtitle.funnel_flap": "UNLOCALIZED: Funnel flaps", "create.subtitle.schematicannon_finish": "Finiture cannoneschematico", "create.subtitle.haunted_bell_use": "UNLOCALIZED: Haunted Bell tolls", "create.subtitle.scroll_value": "UNLOCALIZED: Scroll-input clicks", diff --git a/src/generated/resources/assets/create/lang/unfinished/nl_nl.json b/src/generated/resources/assets/create/lang/unfinished/nl_nl.json index ae6d84e70..62176963d 100644 --- a/src/generated/resources/assets/create/lang/unfinished/nl_nl.json +++ b/src/generated/resources/assets/create/lang/unfinished/nl_nl.json @@ -1222,7 +1222,7 @@ "create.subtitle.contraption_disassemble": "UNLOCALIZED: Contraption stops", "create.subtitle.peculiar_bell_use": "UNLOCALIZED: Peculiar Bell tolls", - "create.subtitle.mixing": "UNLOCALIZED: Mixing Noises", + "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", @@ -1230,7 +1230,7 @@ "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.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", 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 431980db9..a825c33f1 100644 --- a/src/generated/resources/assets/create/lang/unfinished/pt_br.json +++ b/src/generated/resources/assets/create/lang/unfinished/pt_br.json @@ -1222,7 +1222,7 @@ "create.subtitle.contraption_disassemble": "UNLOCALIZED: Contraption stops", "create.subtitle.peculiar_bell_use": "UNLOCALIZED: Peculiar Bell tolls", - "create.subtitle.mixing": "UNLOCALIZED: Mixing Noises", + "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", @@ -1230,7 +1230,7 @@ "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.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", 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 0135a1c11..8c4c4fd65 100644 --- a/src/generated/resources/assets/create/lang/unfinished/zh_cn.json +++ b/src/generated/resources/assets/create/lang/unfinished/zh_cn.json @@ -1222,7 +1222,7 @@ "create.subtitle.contraption_disassemble": "UNLOCALIZED: Contraption stops", "create.subtitle.peculiar_bell_use": "UNLOCALIZED: Peculiar Bell tolls", - "create.subtitle.mixing": "UNLOCALIZED: Mixing Noises", + "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", @@ -1230,7 +1230,7 @@ "create.subtitle.depot_slide": "UNLOCALIZED: Item slides", "create.subtitle.saw_activate_stone": "UNLOCALIZED: Mechanical Saw activates", "create.subtitle.blaze_munch": "烈焰人:咀嚼", - "create.subtitle.funnel_flap": "UNLOCALIZED: Funnel Flaps", + "create.subtitle.funnel_flap": "UNLOCALIZED: Funnel flaps", "create.subtitle.schematicannon_finish": "蓝图加农炮:叮", "create.subtitle.haunted_bell_use": "UNLOCALIZED: Haunted Bell tolls", "create.subtitle.scroll_value": "UNLOCALIZED: Scroll-input clicks", diff --git a/src/generated/resources/assets/create/lang/unfinished/zh_tw.json b/src/generated/resources/assets/create/lang/unfinished/zh_tw.json index 124149eaf..447ccccbb 100644 --- a/src/generated/resources/assets/create/lang/unfinished/zh_tw.json +++ b/src/generated/resources/assets/create/lang/unfinished/zh_tw.json @@ -1230,7 +1230,7 @@ "create.subtitle.depot_slide": "物品滑動聲", "create.subtitle.saw_activate_stone": "機械鋸子聲", "create.subtitle.blaze_munch": "烈焰使者開心地吃著", - "create.subtitle.funnel_flap": "UNLOCALIZED: Funnel Flaps", + "create.subtitle.funnel_flap": "UNLOCALIZED: Funnel flaps", "create.subtitle.schematicannon_finish": "藍圖大炮完成任務", "create.subtitle.haunted_bell_use": "靈魂鐘敲響", "create.subtitle.scroll_value": "滾動輸入聲", From 0c3696dd21c818bf25d1137c34b7836128745d88 Mon Sep 17 00:00:00 2001 From: PepperBell <44146161+PepperCode1@users.noreply.github.com> Date: Wed, 21 Jul 2021 12:49:55 -0700 Subject: [PATCH 102/118] Extra alternative - Rename AnimatedKinetics#defaultBlockElement to AnimatedKinetics#blockElement - Add static alternative to AnimatedKinetics#blockElement meant to be used outside of subclasses --- .../category/ProcessingViaFanCategory.java | 7 ++--- .../animations/AnimatedBlazeBurner.java | 4 +-- .../category/animations/AnimatedCrafter.java | 4 +-- .../animations/AnimatedCrushingWheels.java | 4 +-- .../category/animations/AnimatedDeployer.java | 10 +++---- .../animations/AnimatedItemDrain.java | 2 +- .../category/animations/AnimatedKinetics.java | 28 +++++++++++++++---- .../animations/AnimatedMillstone.java | 4 +-- .../category/animations/AnimatedMixer.java | 10 +++---- .../category/animations/AnimatedPress.java | 8 +++--- .../jei/category/animations/AnimatedSaw.java | 6 ++-- .../category/animations/AnimatedSpout.java | 10 +++---- 12 files changed, 55 insertions(+), 42 deletions(-) diff --git a/src/main/java/com/simibubi/create/compat/jei/category/ProcessingViaFanCategory.java b/src/main/java/com/simibubi/create/compat/jei/category/ProcessingViaFanCategory.java index b8c27e694..4d0467a57 100644 --- a/src/main/java/com/simibubi/create/compat/jei/category/ProcessingViaFanCategory.java +++ b/src/main/java/com/simibubi/create/compat/jei/category/ProcessingViaFanCategory.java @@ -10,7 +10,6 @@ import com.simibubi.create.AllBlockPartials; import com.simibubi.create.AllBlocks; import com.simibubi.create.compat.jei.category.animations.AnimatedKinetics; import com.simibubi.create.foundation.gui.AllGuiTextures; -import com.simibubi.create.foundation.gui.GuiGameElement; import com.simibubi.create.foundation.utility.Lang; import mezz.jei.api.constants.VanillaTypes; @@ -75,17 +74,15 @@ public abstract class ProcessingViaFanCategory> extends Cre matrixStack.mulPose(Vector3f.YP.rotationDegrees(22.5f)); int scale = 24; - GuiGameElement.of(AllBlockPartials.ENCASED_FAN_INNER) + AnimatedKinetics.defaultBlockElement(AllBlockPartials.ENCASED_FAN_INNER) .rotateBlock(180, 0, AnimatedKinetics.getCurrentAngle() * 16) .scale(scale) - .lighting(AnimatedKinetics.DEFAULT_LIGHTING) .render(matrixStack); - GuiGameElement.of(AllBlocks.ENCASED_FAN.getDefaultState()) + AnimatedKinetics.defaultBlockElement(AllBlocks.ENCASED_FAN.getDefaultState()) .rotateBlock(0, 180, 0) .atLocal(0, 0, 0) .scale(scale) - .lighting(AnimatedKinetics.DEFAULT_LIGHTING) .render(matrixStack); renderAttachedBlock(matrixStack); diff --git a/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedBlazeBurner.java b/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedBlazeBurner.java index 7a0bcd91d..84302d924 100644 --- a/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedBlazeBurner.java +++ b/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedBlazeBurner.java @@ -26,14 +26,14 @@ public class AnimatedBlazeBurner extends AnimatedKinetics { matrixStack.mulPose(Vector3f.YP.rotationDegrees(22.5f)); int scale = 23; - defaultBlockElement(AllBlocks.BLAZE_BURNER.getDefaultState()) + blockElement(AllBlocks.BLAZE_BURNER.getDefaultState()) .atLocal(0, 1.65, 0) .scale(scale) .render(matrixStack); float offset = (MathHelper.sin(AnimationTickHolder.getRenderTime() / 16f) + 0.5f) / 16f; PartialModel blaze = AllBlockPartials.BLAZES.get(heatLevel); - defaultBlockElement(blaze) + blockElement(blaze) .atLocal(1, 1.65 + offset, 1) .rotate(0, 180, 0) .scale(scale) diff --git a/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedCrafter.java b/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedCrafter.java index 2fc1b195d..38fdb4ab6 100644 --- a/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedCrafter.java +++ b/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedCrafter.java @@ -19,12 +19,12 @@ public class AnimatedCrafter extends AnimatedKinetics { .rotateY(-22.5f); int scale = 22; - defaultBlockElement(cogwheel()) + blockElement(cogwheel()) .rotateBlock(90, 0, getCurrentAngle()) .scale(scale) .render(matrixStack); - defaultBlockElement(AllBlocks.MECHANICAL_CRAFTER.getDefaultState()) + blockElement(AllBlocks.MECHANICAL_CRAFTER.getDefaultState()) .rotateBlock(0, 180, 0) .scale(scale) .render(matrixStack); diff --git a/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedCrushingWheels.java b/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedCrushingWheels.java index d4f0f7e7f..29ef44198 100644 --- a/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedCrushingWheels.java +++ b/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedCrushingWheels.java @@ -20,12 +20,12 @@ public class AnimatedCrushingWheels extends AnimatedKinetics { matrixStack.mulPose(Vector3f.YP.rotationDegrees(-22.5f)); int scale = 22; - defaultBlockElement(wheel) + blockElement(wheel) .rotateBlock(0, 90, -getCurrentAngle()) .scale(scale) .render(matrixStack); - defaultBlockElement(wheel) + blockElement(wheel) .rotateBlock(0, 90, getCurrentAngle()) .atLocal(2, 0, 0) .scale(scale) diff --git a/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedDeployer.java b/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedDeployer.java index a1fe3e741..e5236ee95 100644 --- a/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedDeployer.java +++ b/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedDeployer.java @@ -20,12 +20,12 @@ public class AnimatedDeployer extends AnimatedKinetics { matrixStack.mulPose(Vector3f.YP.rotationDegrees(22.5f)); int scale = 20; - defaultBlockElement(shaft(Axis.Z)) + blockElement(shaft(Axis.Z)) .rotateBlock(0, 0, getCurrentAngle()) .scale(scale) .render(matrixStack); - defaultBlockElement(AllBlocks.DEPLOYER.getDefaultState() + blockElement(AllBlocks.DEPLOYER.getDefaultState() .setValue(DeployerBlock.FACING, Direction.DOWN) .setValue(DeployerBlock.AXIS_ALONG_FIRST_COORDINATE, false)) .scale(scale) @@ -37,18 +37,18 @@ public class AnimatedDeployer extends AnimatedKinetics { matrixStack.pushPose(); matrixStack.translate(0, offset * 17, 0); - defaultBlockElement(AllBlockPartials.DEPLOYER_POLE) + blockElement(AllBlockPartials.DEPLOYER_POLE) .rotateBlock(90, 0, 0) .scale(scale) .render(matrixStack); - defaultBlockElement(AllBlockPartials.DEPLOYER_HAND_HOLDING) + blockElement(AllBlockPartials.DEPLOYER_HAND_HOLDING) .rotateBlock(90, 0, 0) .scale(scale) .render(matrixStack); matrixStack.popPose(); - defaultBlockElement(AllBlocks.DEPOT.getDefaultState()) + blockElement(AllBlocks.DEPOT.getDefaultState()) .atLocal(0, 2, 0) .scale(scale) .render(matrixStack); diff --git a/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedItemDrain.java b/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedItemDrain.java index 1b792cdbb..3186ad0c7 100644 --- a/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedItemDrain.java +++ b/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedItemDrain.java @@ -27,7 +27,7 @@ public class AnimatedItemDrain extends AnimatedKinetics { matrixStack.mulPose(Vector3f.YP.rotationDegrees(22.5f)); int scale = 20; - defaultBlockElement(AllBlocks.ITEM_DRAIN.getDefaultState()) + blockElement(AllBlocks.ITEM_DRAIN.getDefaultState()) .scale(scale) .render(matrixStack); diff --git a/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedKinetics.java b/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedKinetics.java index d41bdccec..069a397e2 100644 --- a/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedKinetics.java +++ b/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedKinetics.java @@ -22,6 +22,24 @@ public abstract class AnimatedKinetics implements IDrawable { .secondLightRotation(-20.0f, 50.0f) .build(); + /** + * Only use this method outside of subclasses. + * Use {@link #blockElement(BlockState)} if calling from inside a subclass. + */ + public static GuiGameElement.GuiRenderBuilder defaultBlockElement(BlockState state) { + return GuiGameElement.of(state) + .lighting(DEFAULT_LIGHTING); + } + + /** + * Only use this method outside of subclasses. + * Use {@link #blockElement(PartialModel)} if calling from inside a subclass. + */ + public static GuiGameElement.GuiRenderBuilder defaultBlockElement(PartialModel partial) { + return GuiGameElement.of(partial) + .lighting(DEFAULT_LIGHTING); + } + public static float getCurrentAngle() { return (AnimationTickHolder.getRenderTime() * 4f) % 360; } @@ -34,14 +52,12 @@ public abstract class AnimatedKinetics implements IDrawable { return AllBlockPartials.SHAFTLESS_COGWHEEL; } - protected GuiGameElement.GuiRenderBuilder defaultBlockElement(BlockState state) { - return GuiGameElement.of(state) - .lighting(DEFAULT_LIGHTING); + protected GuiGameElement.GuiRenderBuilder blockElement(BlockState state) { + return defaultBlockElement(state); } - protected GuiGameElement.GuiRenderBuilder defaultBlockElement(PartialModel partial) { - return GuiGameElement.of(partial) - .lighting(DEFAULT_LIGHTING); + protected GuiGameElement.GuiRenderBuilder blockElement(PartialModel partial) { + return defaultBlockElement(partial); } @Override diff --git a/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedMillstone.java b/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedMillstone.java index 8bd4827bf..4c9b87063 100644 --- a/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedMillstone.java +++ b/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedMillstone.java @@ -15,12 +15,12 @@ public class AnimatedMillstone extends AnimatedKinetics { matrixStack.translate(-2, 18, 0); int scale = 22; - defaultBlockElement(AllBlockPartials.MILLSTONE_COG) + blockElement(AllBlockPartials.MILLSTONE_COG) .rotateBlock(22.5, getCurrentAngle() * 2, 0) .scale(scale) .render(matrixStack); - defaultBlockElement(AllBlocks.MILLSTONE.getDefaultState()) + blockElement(AllBlocks.MILLSTONE.getDefaultState()) .rotateBlock(22.5, 22.5, 0) .scale(scale) .render(matrixStack); diff --git a/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedMixer.java b/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedMixer.java index ec24775ef..1b95917a9 100644 --- a/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedMixer.java +++ b/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedMixer.java @@ -18,31 +18,31 @@ public class AnimatedMixer extends AnimatedKinetics { matrixStack.mulPose(Vector3f.YP.rotationDegrees(22.5f)); int scale = 23; - defaultBlockElement(cogwheel()) + blockElement(cogwheel()) .rotateBlock(0, getCurrentAngle() * 2, 0) .atLocal(0, 0, 0) .scale(scale) .render(matrixStack); - defaultBlockElement(AllBlocks.MECHANICAL_MIXER.getDefaultState()) + blockElement(AllBlocks.MECHANICAL_MIXER.getDefaultState()) .atLocal(0, 0, 0) .scale(scale) .render(matrixStack); float animation = ((MathHelper.sin(AnimationTickHolder.getRenderTime() / 32f) + 1) / 5) + .5f; - defaultBlockElement(AllBlockPartials.MECHANICAL_MIXER_POLE) + blockElement(AllBlockPartials.MECHANICAL_MIXER_POLE) .atLocal(0, animation, 0) .scale(scale) .render(matrixStack); - defaultBlockElement(AllBlockPartials.MECHANICAL_MIXER_HEAD) + blockElement(AllBlockPartials.MECHANICAL_MIXER_HEAD) .rotateBlock(0, getCurrentAngle() * 4, 0) .atLocal(0, animation, 0) .scale(scale) .render(matrixStack); - defaultBlockElement(AllBlocks.BASIN.getDefaultState()) + blockElement(AllBlocks.BASIN.getDefaultState()) .atLocal(0, 1.65, 0) .scale(scale) .render(matrixStack); diff --git a/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedPress.java b/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedPress.java index ebfe6b88e..a812afaa8 100644 --- a/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedPress.java +++ b/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedPress.java @@ -24,22 +24,22 @@ public class AnimatedPress extends AnimatedKinetics { matrixStack.mulPose(Vector3f.YP.rotationDegrees(22.5f)); int scale = basin ? 23 : 24; - defaultBlockElement(shaft(Axis.Z)) + blockElement(shaft(Axis.Z)) .rotateBlock(0, 0, getCurrentAngle()) .scale(scale) .render(matrixStack); - defaultBlockElement(AllBlocks.MECHANICAL_PRESS.getDefaultState()) + blockElement(AllBlocks.MECHANICAL_PRESS.getDefaultState()) .scale(scale) .render(matrixStack); - defaultBlockElement(AllBlockPartials.MECHANICAL_PRESS_HEAD) + blockElement(AllBlockPartials.MECHANICAL_PRESS_HEAD) .atLocal(0, -getAnimatedHeadOffset(), 0) .scale(scale) .render(matrixStack); if (basin) - defaultBlockElement(AllBlocks.BASIN.getDefaultState()) + blockElement(AllBlocks.BASIN.getDefaultState()) .atLocal(0, 1.65, 0) .scale(scale) .render(matrixStack); diff --git a/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedSaw.java b/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedSaw.java index a2f17a740..de5e9dd97 100644 --- a/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedSaw.java +++ b/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedSaw.java @@ -21,18 +21,18 @@ public class AnimatedSaw extends AnimatedKinetics { matrixStack.mulPose(Vector3f.YP.rotationDegrees(22.5f + 90)); int scale = 25; - defaultBlockElement(shaft(Axis.X)) + blockElement(shaft(Axis.X)) .rotateBlock(-getCurrentAngle(), 0, 0) .scale(scale) .render(matrixStack); - defaultBlockElement(AllBlocks.MECHANICAL_SAW.getDefaultState() + blockElement(AllBlocks.MECHANICAL_SAW.getDefaultState() .setValue(SawBlock.FACING, Direction.UP)) .rotateBlock(0, 0, 0) .scale(scale) .render(matrixStack); - defaultBlockElement(AllBlockPartials.SAW_BLADE_VERTICAL_ACTIVE) + blockElement(AllBlockPartials.SAW_BLADE_VERTICAL_ACTIVE) .rotateBlock(0, -90, -90) .scale(scale) .render(matrixStack); diff --git a/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedSpout.java b/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedSpout.java index 94ee2df86..0e09a4c51 100644 --- a/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedSpout.java +++ b/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedSpout.java @@ -32,7 +32,7 @@ public class AnimatedSpout extends AnimatedKinetics { matrixStack.mulPose(Vector3f.YP.rotationDegrees(22.5f)); int scale = 20; - defaultBlockElement(AllBlocks.SPOUT.getDefaultState()) + blockElement(AllBlocks.SPOUT.getDefaultState()) .scale(scale) .render(matrixStack); @@ -42,22 +42,22 @@ public class AnimatedSpout extends AnimatedKinetics { matrixStack.pushPose(); - defaultBlockElement(AllBlockPartials.SPOUT_TOP) + blockElement(AllBlockPartials.SPOUT_TOP) .scale(scale) .render(matrixStack); matrixStack.translate(0, -3 * squeeze / 32f, 0); - defaultBlockElement(AllBlockPartials.SPOUT_MIDDLE) + blockElement(AllBlockPartials.SPOUT_MIDDLE) .scale(scale) .render(matrixStack); matrixStack.translate(0, -3 * squeeze / 32f, 0); - defaultBlockElement(AllBlockPartials.SPOUT_BOTTOM) + blockElement(AllBlockPartials.SPOUT_BOTTOM) .scale(scale) .render(matrixStack); matrixStack.translate(0, -3 * squeeze / 32f, 0); matrixStack.popPose(); - defaultBlockElement(AllBlocks.DEPOT.getDefaultState()) + blockElement(AllBlocks.DEPOT.getDefaultState()) .atLocal(0, 2, 0) .scale(scale) .render(matrixStack); From 2cea2e1c0f854366276ea19df16e80f596a3fa8d Mon Sep 17 00:00:00 2001 From: PepperBell <44146161+PepperCode1@users.noreply.github.com> Date: Wed, 21 Jul 2021 14:48:39 -0700 Subject: [PATCH 103/118] OpenEndedPipe effect API - Allow registering custom effect handlers for open ended pipes - Add some getter methods to OpenEndedPipe --- .../contraptions/fluids/OpenEndedPipe.java | 199 +++++++++++------- 1 file changed, 125 insertions(+), 74 deletions(-) diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/OpenEndedPipe.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/OpenEndedPipe.java index 4476c585c..f0b119fa7 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/OpenEndedPipe.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/OpenEndedPipe.java @@ -3,6 +3,7 @@ package com.simibubi.create.content.contraptions.fluids; import static net.minecraft.state.properties.BlockStateProperties.LEVEL_HONEY; import static net.minecraft.state.properties.BlockStateProperties.WATERLOGGED; +import java.util.ArrayList; import java.util.List; import javax.annotation.Nullable; @@ -16,7 +17,6 @@ import com.simibubi.create.foundation.utility.BlockFace; import net.minecraft.block.BlockState; import net.minecraft.block.FlowingFluidBlock; import net.minecraft.entity.LivingEntity; -import net.minecraft.fluid.Fluid; import net.minecraft.fluid.FluidState; import net.minecraft.fluid.Fluids; import net.minecraft.item.ItemStack; @@ -40,9 +40,16 @@ import net.minecraftforge.fluids.capability.templates.FluidTank; public class OpenEndedPipe extends FlowSource { - World world; - BlockPos pos; - AxisAlignedBB aoe; + private static final List EFFECT_HANDLERS = new ArrayList<>(); + + static { + registerEffectHandler(new PotionEffectHandler()); + registerEffectHandler(new MilkEffectHandler()); + } + + private World world; + private BlockPos pos; + private AxisAlignedBB aoe; private OpenEndFluidHandler fluidHandler; private BlockPos outputPos; @@ -61,11 +68,57 @@ public class OpenEndedPipe extends FlowSource { aoe = aoe.expandTowards(0, -1, 0); } + public static void registerEffectHandler(IEffectHandler handler) { + EFFECT_HANDLERS.add(handler); + } + + public World getWorld() { + return world; + } + + public BlockPos getPos() { + return pos; + } + + public BlockPos getOutputPos() { + return outputPos; + } + + public AxisAlignedBB getAOE() { + return aoe; + } + @Override public void manageSource(World world) { this.world = world; } + @Override + public LazyOptional provideHandler() { + return LazyOptional.of(() -> fluidHandler); + } + + @Override + public boolean isEndpoint() { + return true; + } + + public CompoundNBT serializeNBT() { + CompoundNBT compound = new CompoundNBT(); + fluidHandler.writeToNBT(compound); + compound.putBoolean("Pulling", wasPulling); + compound.put("Location", location.serializeNBT()); + return compound; + } + + public static OpenEndedPipe fromNBT(CompoundNBT compound, BlockPos tilePos) { + BlockFace fromNBT = BlockFace.fromNBT(compound.getCompound("Location")); + OpenEndedPipe oep = new OpenEndedPipe(new BlockFace(tilePos, fromNBT.getFace())); + oep.fluidHandler.readFromNBT(compound); + oep.wasPulling = compound.getBoolean("Pulling"); + return oep; + } + private FluidStack removeFluidFromSpace(boolean simulate) { FluidStack empty = FluidStack.EMPTY; if (world == null) @@ -125,7 +178,7 @@ public class OpenEndedPipe extends FlowSource { return false; if (!FluidHelper.hasBlockState(fluid.getFluid())) { if (!simulate) - applyEffects(world, fluid); + applyEffects(fluid); return true; } @@ -167,78 +220,23 @@ public class OpenEndedPipe extends FlowSource { return true; } - private boolean canApplyEffects(World world, FluidStack fluid) { - Fluid fluidType = fluid.getFluid(); - if (fluidType.isSame(AllFluids.POTION.get())) - return true; - if (Tags.Fluids.MILK.contains(fluidType)) - return true; + private boolean canApplyEffects(FluidStack fluid) { + for (IEffectHandler handler : EFFECT_HANDLERS) { + if (handler.canApplyEffects(this, fluid)) { + return true; + } + } return false; } - private void applyEffects(World world, FluidStack fluid) { - Fluid fluidType = fluid.getFluid(); - - if (fluidType.isSame(AllFluids.POTION.get())) - applyPotionEffects(world, fluid); - - if (Tags.Fluids.MILK.contains(fluidType)) { - if (world.getGameTime() % 5 != 0) - return; - List list = - world.getEntitiesOfClass(LivingEntity.class, aoe, LivingEntity::isAffectedByPotions); - ItemStack curativeItem = new ItemStack(Items.MILK_BUCKET); - for (LivingEntity livingentity : list) - livingentity.curePotionEffects(curativeItem); - } - } - - private void applyPotionEffects(World world, FluidStack fluid) { - if (cachedFluid == null || cachedEffects == null || !fluid.isFluidEqual(cachedFluid)) { - FluidStack copy = fluid.copy(); - copy.setAmount(250); - ItemStack bottle = PotionFluidHandler.fillBottle(new ItemStack(Items.GLASS_BOTTLE), fluid); - cachedEffects = PotionUtils.getMobEffects(bottle); - } - - if (cachedEffects.isEmpty()) - return; - - List list = - world.getEntitiesOfClass(LivingEntity.class, aoe, LivingEntity::isAffectedByPotions); - for (LivingEntity livingentity : list) { - for (EffectInstance effectinstance : cachedEffects) { - Effect effect = effectinstance.getEffect(); - if (effect.isInstantenous()) { - effect.applyInstantenousEffect(null, null, livingentity, effectinstance.getAmplifier(), 0.5D); - continue; - } - livingentity.addEffect(new EffectInstance(effectinstance)); + private void applyEffects(FluidStack fluid) { + for (IEffectHandler handler : EFFECT_HANDLERS) { + if (handler.canApplyEffects(this, fluid)) { + handler.applyEffects(this, fluid); } } } - @Override - public LazyOptional provideHandler() { - return LazyOptional.of(() -> fluidHandler); - } - - public CompoundNBT serializeNBT() { - CompoundNBT compound = new CompoundNBT(); - fluidHandler.writeToNBT(compound); - compound.putBoolean("Pulling", wasPulling); - compound.put("Location", location.serializeNBT()); - return compound; - } - - public static OpenEndedPipe fromNBT(CompoundNBT compound, BlockPos tilePos) { - BlockFace fromNBT = BlockFace.fromNBT(compound.getCompound("Location")); - OpenEndedPipe oep = new OpenEndedPipe(new BlockFace(tilePos, fromNBT.getFace())); - oep.fluidHandler.readFromNBT(compound); - oep.wasPulling = compound.getBoolean("Pulling"); - return oep; - } - private class OpenEndFluidHandler extends FluidTank { public OpenEndFluidHandler() { @@ -262,7 +260,7 @@ public class OpenEndedPipe extends FlowSource { setFluid(FluidStack.EMPTY); if (wasPulling) wasPulling = false; - if (canApplyEffects(world, resource)) + if (canApplyEffects(resource)) resource = FluidHelper.copyStackWithAmount(resource, 1); int fill = super.fill(resource, action); @@ -326,9 +324,62 @@ public class OpenEndedPipe extends FlowSource { } - @Override - public boolean isEndpoint() { - return true; + public interface IEffectHandler { + boolean canApplyEffects(OpenEndedPipe pipe, FluidStack fluid); + + void applyEffects(OpenEndedPipe pipe, FluidStack fluid); + } + + public static class PotionEffectHandler implements IEffectHandler { + @Override + public boolean canApplyEffects(OpenEndedPipe pipe, FluidStack fluid) { + return fluid.getFluid().isSame(AllFluids.POTION.get()); + } + + @Override + public void applyEffects(OpenEndedPipe pipe, FluidStack fluid) { + if (pipe.cachedFluid == null || pipe.cachedEffects == null || !fluid.isFluidEqual(pipe.cachedFluid)) { + FluidStack copy = fluid.copy(); + copy.setAmount(250); + ItemStack bottle = PotionFluidHandler.fillBottle(new ItemStack(Items.GLASS_BOTTLE), fluid); + pipe.cachedEffects = PotionUtils.getMobEffects(bottle); + } + + if (pipe.cachedEffects.isEmpty()) + return; + + List list = + pipe.getWorld().getEntitiesOfClass(LivingEntity.class, pipe.getAOE(), LivingEntity::isAffectedByPotions); + for (LivingEntity livingentity : list) { + for (EffectInstance effectinstance : pipe.cachedEffects) { + Effect effect = effectinstance.getEffect(); + if (effect.isInstantenous()) { + effect.applyInstantenousEffect(null, null, livingentity, effectinstance.getAmplifier(), 0.5D); + } else { + livingentity.addEffect(new EffectInstance(effectinstance)); + } + } + } + } + } + + public static class MilkEffectHandler implements IEffectHandler { + @Override + public boolean canApplyEffects(OpenEndedPipe pipe, FluidStack fluid) { + return Tags.Fluids.MILK.contains(fluid.getFluid()); + } + + @Override + public void applyEffects(OpenEndedPipe pipe, FluidStack fluid) { + World world = pipe.getWorld(); + if (world.getGameTime() % 5 != 0) + return; + List list = + world.getEntitiesOfClass(LivingEntity.class, pipe.getAOE(), LivingEntity::isAffectedByPotions); + ItemStack curativeItem = new ItemStack(Items.MILK_BUCKET); + for (LivingEntity livingentity : list) + livingentity.curePotionEffects(curativeItem); + } } } From a52b6d766fce2367b555ba3ac19245ca8716f4de Mon Sep 17 00:00:00 2001 From: Jozufozu Date: Wed, 21 Jul 2021 20:30:35 -0700 Subject: [PATCH 104/118] MaterialGroups and massive refactors - Move material stuff to its own package - The various render functions in the material tree now bind to specific render layers - Instancers can choose which layer to use - The layers are SOLID, CUTOUT, and TRANSPARENT - More layers are likely unnecessary, but we'll see - Deprecate functions in MaterialManager in favor of more builderesque ones using MaterialGroups - Catching up with Flywheel - Remove MatrixStacker in favor of Flywheel's TransformStack (thread safety too) --- .../com/simibubi/create/AllTileEntities.java | 5 +- .../category/animations/AnimatedCrafter.java | 4 +- .../base/BackHalfShaftInstance.java | 2 +- .../base/CutoutRotatingInstance.java | 17 +++ .../contraptions/base/HalfShaftInstance.java | 2 +- .../base/HorizontalHalfShaftInstance.java | 2 +- .../base/KineticTileInstance.java | 9 +- .../base/ShaftlessCogInstance.java | 6 +- .../base/SingleRotatingInstance.java | 2 +- .../components/actors/DrillActorInstance.java | 7 +- .../components/actors/DrillInstance.java | 2 +- .../actors/DrillMovementBehaviour.java | 2 +- .../components/actors/DrillRenderer.java | 4 +- .../actors/HarvesterActorInstance.java | 12 +- .../actors/HarvesterMovementBehaviour.java | 2 +- .../crafter/MechanicalCrafterInstance.java | 33 +++-- .../crafter/MechanicalCrafterRenderer.java | 4 +- .../components/crank/HandCrankInstance.java | 6 +- .../deployer/DeployerActorInstance.java | 17 ++- .../deployer/DeployerFilterSlot.java | 4 +- .../components/deployer/DeployerInstance.java | 2 +- .../deployer/DeployerMovementBehaviour.java | 2 +- .../components/fan/FanInstance.java | 8 +- .../components/flywheel/FlyWheelInstance.java | 12 +- .../flywheel/engine/EngineInstance.java | 6 +- .../millstone/MillStoneCogInstance.java | 2 +- .../components/mixer/MixerInstance.java | 2 +- .../components/press/PressInstance.java | 6 +- .../components/saw/SawFilterSlot.java | 4 +- .../components/saw/SawInstance.java | 2 +- .../components/saw/SawRenderer.java | 8 +- .../ControlledContraptionEntity.java | 4 +- .../DirectionalExtenderScrollOptionSlot.java | 4 +- .../structureMovement/MovementBehaviour.java | 2 +- .../OrientedContraptionEntity.java | 4 +- .../bearing/BearingInstance.java | 2 +- .../bearing/StabilizedBearingInstance.java | 7 +- .../StabilizedBearingMovementBehaviour.java | 2 +- .../chassis/StickerInstance.java | 6 +- .../gantry/GantryCarriageInstance.java | 6 +- .../structureMovement/glue/GlueInstance.java | 14 +- .../glue/SuperGlueRenderer.java | 4 +- .../pulley/AbstractPulleyInstance.java | 2 +- .../pulley/HosePulleyInstance.java | 11 +- .../pulley/RopePulleyInstance.java | 2 +- .../render/ActorInstance.java | 2 +- .../render/ContraptionInstanceManager.java | 2 +- .../render/ContraptionMaterialManager.java | 22 --- .../render/ContraptionRenderDispatcher.java | 12 +- .../render/RenderedContraption.java | 4 +- .../train/CouplingRenderer.java | 4 +- .../contraptions/fluids/PumpCogInstance.java | 2 +- .../contraptions/fluids/PumpRenderer.java | 4 +- .../fluids/actors/ItemDrainRenderer.java | 4 +- .../fluids/pipes/FluidValveInstance.java | 11 +- .../fluids/pipes/FluidValveRenderer.java | 4 +- .../pipes/SmartFluidPipeTileEntity.java | 4 +- .../processing/BasinRenderer.java | 8 +- .../relays/belt/BeltInstance.java | 10 +- .../relays/belt/BeltRenderer.java | 8 +- .../relays/encased/ShaftInstance.java | 2 +- .../relays/encased/SplitShaftInstance.java | 4 +- .../relays/gauge/GaugeInstance.java | 15 +- .../relays/gearbox/GearboxInstance.java | 4 +- .../armor/CopperBacktankInstance.java | 2 +- .../symmetry/mirror/CrossPlaneMirror.java | 4 +- .../symmetry/mirror/PlaneMirror.java | 4 +- .../curiosities/tools/BlueprintRenderer.java | 6 +- .../tools/ExtendoGripItemRenderer.java | 4 +- .../tools/ExtendoGripRenderHandler.java | 4 +- .../weapons/PotatoCannonItemRenderer.java | 4 +- .../weapons/PotatoCannonRenderHandler.java | 6 +- .../weapons/PotatoProjectileRenderMode.java | 12 +- .../belts/tunnel/BeltTunnelInstance.java | 5 +- .../belts/tunnel/BeltTunnelRenderer.java | 4 +- .../logistics/block/chute/ChuteRenderer.java | 4 +- .../logistics/block/depot/DepotRenderer.java | 6 +- .../block/depot/EjectorInstance.java | 6 +- .../block/depot/EjectorRenderer.java | 9 +- .../block/depot/EjectorTileEntity.java | 4 +- .../diodes/AdjustableRepeaterInstance.java | 11 +- .../diodes/AdjustableRepeaterScrollSlot.java | 4 +- .../funnel/FunnelFilterSlotPositioning.java | 8 +- .../block/funnel/FunnelInstance.java | 5 +- .../block/funnel/FunnelRenderer.java | 4 +- .../inventories/CreativeCrateTileEntity.java | 4 +- .../block/mechanicalArm/ArmInstance.java | 8 +- .../block/mechanicalArm/ArmRenderer.java | 20 +-- .../block/redstone/AnalogLeverInstance.java | 10 +- .../redstone/FilteredDetectorFilterSlot.java | 4 +- .../block/redstone/NixieTubeRenderer.java | 4 +- .../redstone/RedstoneLinkFrequencySlot.java | 4 +- .../item/LecternControllerRenderer.java | 4 +- .../item/LinkedControllerItemRenderer.java | 4 +- .../block/SchematicannonInstance.java | 8 +- .../schematics/client/SchematicRenderer.java | 4 +- .../client/SchematicTransformation.java | 4 +- .../schematics/client/tools/DeployTool.java | 4 +- .../foundation/fluid/FluidRenderer.java | 8 +- .../gui/mainMenu/CreateMainMenuScreen.java | 4 +- .../create/foundation/ponder/PonderScene.java | 10 +- .../ponder/elements/AnimatedSceneElement.java | 4 +- .../ponder/elements/MinecartElement.java | 4 +- .../ponder/elements/ParrotElement.java | 4 +- .../ponder/elements/WorldSectionElement.java | 8 +- .../foundation/render/AllMaterialSpecs.java | 2 +- .../foundation/render/PartialBufferer.java | 4 +- .../foundation/render/SuperByteBuffer.java | 8 +- .../render/TileEntityRenderHelper.java | 4 +- .../behaviour/ValueBoxTransform.java | 4 +- .../foundation/utility/MatrixStacker.java | 128 ------------------ .../foundation/utility/outliner/Outline.java | 4 +- 112 files changed, 347 insertions(+), 439 deletions(-) create mode 100644 src/main/java/com/simibubi/create/content/contraptions/base/CutoutRotatingInstance.java delete mode 100644 src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/render/ContraptionMaterialManager.java delete mode 100644 src/main/java/com/simibubi/create/foundation/utility/MatrixStacker.java diff --git a/src/main/java/com/simibubi/create/AllTileEntities.java b/src/main/java/com/simibubi/create/AllTileEntities.java index 46cb389b6..b426c3421 100644 --- a/src/main/java/com/simibubi/create/AllTileEntities.java +++ b/src/main/java/com/simibubi/create/AllTileEntities.java @@ -1,5 +1,6 @@ package com.simibubi.create; +import com.simibubi.create.content.contraptions.base.CutoutRotatingInstance; import com.simibubi.create.content.contraptions.base.HalfShaftInstance; import com.simibubi.create.content.contraptions.base.HorizontalHalfShaftInstance; import com.simibubi.create.content.contraptions.base.KineticTileEntityRenderer; @@ -489,7 +490,7 @@ public class AllTileEntities { public static final TileEntityEntry CRUSHING_WHEEL = Create.registrate() .tileEntity("crushing_wheel", CrushingWheelTileEntity::new) - .instance(() -> SingleRotatingInstance::new) + .instance(() -> CutoutRotatingInstance::new) .validBlocks(AllBlocks.CRUSHING_WHEEL) .renderer(() -> KineticTileEntityRenderer::new) .register(); @@ -503,7 +504,7 @@ public class AllTileEntities { public static final TileEntityEntry WATER_WHEEL = Create.registrate() .tileEntity("water_wheel", WaterWheelTileEntity::new) - .instance(() -> SingleRotatingInstance::new) + .instance(() -> CutoutRotatingInstance::new) .validBlocks(AllBlocks.WATER_WHEEL) .renderer(() -> KineticTileEntityRenderer::new) .register(); diff --git a/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedCrafter.java b/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedCrafter.java index 2fc1b195d..7c6b17551 100644 --- a/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedCrafter.java +++ b/src/main/java/com/simibubi/create/compat/jei/category/animations/AnimatedCrafter.java @@ -1,9 +1,9 @@ package com.simibubi.create.compat.jei.category.animations; +import com.jozufozu.flywheel.util.transform.MatrixTransformStack; import com.mojang.blaze3d.matrix.MatrixStack; import com.simibubi.create.AllBlocks; import com.simibubi.create.foundation.gui.AllGuiTextures; -import com.simibubi.create.foundation.utility.MatrixStacker; public class AnimatedCrafter extends AnimatedKinetics { @@ -14,7 +14,7 @@ public class AnimatedCrafter extends AnimatedKinetics { AllGuiTextures.JEI_SHADOW.draw(matrixStack, -16, 13); matrixStack.translate(3, 16, 0); - MatrixStacker.of(matrixStack) + MatrixTransformStack.of(matrixStack) .rotateX(-12.5f) .rotateY(-22.5f); int scale = 22; diff --git a/src/main/java/com/simibubi/create/content/contraptions/base/BackHalfShaftInstance.java b/src/main/java/com/simibubi/create/content/contraptions/base/BackHalfShaftInstance.java index 02570c895..3133c09ab 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/base/BackHalfShaftInstance.java +++ b/src/main/java/com/simibubi/create/content/contraptions/base/BackHalfShaftInstance.java @@ -1,6 +1,6 @@ package com.simibubi.create.content.contraptions.base; -import com.jozufozu.flywheel.backend.instancing.MaterialManager; +import com.jozufozu.flywheel.backend.material.MaterialManager; import net.minecraft.state.properties.BlockStateProperties; import net.minecraft.util.Direction; diff --git a/src/main/java/com/simibubi/create/content/contraptions/base/CutoutRotatingInstance.java b/src/main/java/com/simibubi/create/content/contraptions/base/CutoutRotatingInstance.java new file mode 100644 index 000000000..c8f3d4335 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/base/CutoutRotatingInstance.java @@ -0,0 +1,17 @@ +package com.simibubi.create.content.contraptions.base; + +import com.jozufozu.flywheel.backend.instancing.Instancer; +import com.jozufozu.flywheel.backend.material.InstanceMaterial; +import com.jozufozu.flywheel.backend.material.MaterialManager; +import com.simibubi.create.foundation.render.AllMaterialSpecs; + +public class CutoutRotatingInstance extends SingleRotatingInstance { + public CutoutRotatingInstance(MaterialManager modelManager, KineticTileEntity tile) { + super(modelManager, tile); + } + + protected InstanceMaterial getRotatingMaterial() { + return materialManager.defaultCutout() + .material(AllMaterialSpecs.ROTATING); + } +} 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 65b8920ba..c5fa91df2 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 @@ -1,7 +1,7 @@ package com.simibubi.create.content.contraptions.base; import com.jozufozu.flywheel.backend.instancing.Instancer; -import com.jozufozu.flywheel.backend.instancing.MaterialManager; +import com.jozufozu.flywheel.backend.material.MaterialManager; import com.simibubi.create.AllBlockPartials; import net.minecraft.state.properties.BlockStateProperties; diff --git a/src/main/java/com/simibubi/create/content/contraptions/base/HorizontalHalfShaftInstance.java b/src/main/java/com/simibubi/create/content/contraptions/base/HorizontalHalfShaftInstance.java index eafd86c5d..2ccdd215a 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/base/HorizontalHalfShaftInstance.java +++ b/src/main/java/com/simibubi/create/content/contraptions/base/HorizontalHalfShaftInstance.java @@ -1,6 +1,6 @@ package com.simibubi.create.content.contraptions.base; -import com.jozufozu.flywheel.backend.instancing.MaterialManager; +import com.jozufozu.flywheel.backend.material.MaterialManager; import net.minecraft.state.properties.BlockStateProperties; import net.minecraft.util.Direction; diff --git a/src/main/java/com/simibubi/create/content/contraptions/base/KineticTileInstance.java b/src/main/java/com/simibubi/create/content/contraptions/base/KineticTileInstance.java index 4ff93254c..c845b8a48 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/base/KineticTileInstance.java +++ b/src/main/java/com/simibubi/create/content/contraptions/base/KineticTileInstance.java @@ -1,7 +1,7 @@ package com.simibubi.create.content.contraptions.base; -import com.jozufozu.flywheel.backend.instancing.InstanceMaterial; -import com.jozufozu.flywheel.backend.instancing.MaterialManager; +import com.jozufozu.flywheel.backend.material.InstanceMaterial; +import com.jozufozu.flywheel.backend.material.MaterialManager; import com.jozufozu.flywheel.backend.instancing.tile.TileEntityInstance; import com.simibubi.create.AllBlocks; import com.simibubi.create.content.contraptions.relays.elementary.ICogWheel; @@ -84,8 +84,9 @@ public abstract class KineticTileInstance extends T return shaft(getRotationAxis()); } - protected final InstanceMaterial getRotatingMaterial() { - return materialManager.getMaterial(AllMaterialSpecs.ROTATING); + protected InstanceMaterial getRotatingMaterial() { + return materialManager.defaultSolid() + .material(AllMaterialSpecs.ROTATING); } public static BlockState shaft(Direction.Axis axis) { diff --git a/src/main/java/com/simibubi/create/content/contraptions/base/ShaftlessCogInstance.java b/src/main/java/com/simibubi/create/content/contraptions/base/ShaftlessCogInstance.java index 415882390..e7b747d02 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/base/ShaftlessCogInstance.java +++ b/src/main/java/com/simibubi/create/content/contraptions/base/ShaftlessCogInstance.java @@ -1,7 +1,7 @@ package com.simibubi.create.content.contraptions.base; import com.jozufozu.flywheel.backend.instancing.Instancer; -import com.jozufozu.flywheel.backend.instancing.MaterialManager; +import com.jozufozu.flywheel.backend.material.MaterialManager; import com.simibubi.create.AllBlockPartials; import com.simibubi.create.foundation.render.AllMaterialSpecs; @@ -13,6 +13,8 @@ public class ShaftlessCogInstance extends SingleRotatingInstance { @Override protected Instancer getModel() { - return materialManager.getMaterial(AllMaterialSpecs.ROTATING).getModel(AllBlockPartials.SHAFTLESS_COGWHEEL, tile.getBlockState()); + return materialManager.defaultSolid() + .material(AllMaterialSpecs.ROTATING) + .getModel(AllBlockPartials.SHAFTLESS_COGWHEEL, tile.getBlockState()); } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/base/SingleRotatingInstance.java b/src/main/java/com/simibubi/create/content/contraptions/base/SingleRotatingInstance.java index 17ba2884d..90a5efdb6 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/base/SingleRotatingInstance.java +++ b/src/main/java/com/simibubi/create/content/contraptions/base/SingleRotatingInstance.java @@ -1,7 +1,7 @@ package com.simibubi.create.content.contraptions.base; import com.jozufozu.flywheel.backend.instancing.Instancer; -import com.jozufozu.flywheel.backend.instancing.MaterialManager; +import com.jozufozu.flywheel.backend.material.MaterialManager; import net.minecraft.block.BlockState; 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 c1458d1e4..c142cd2cf 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 @@ -1,7 +1,7 @@ package com.simibubi.create.content.contraptions.components.actors; -import com.jozufozu.flywheel.backend.instancing.InstanceMaterial; -import com.jozufozu.flywheel.backend.instancing.MaterialManager; +import com.jozufozu.flywheel.backend.material.InstanceMaterial; +import com.jozufozu.flywheel.backend.material.MaterialManager; import com.simibubi.create.AllBlockPartials; import com.simibubi.create.content.contraptions.components.structureMovement.MovementContext; import com.simibubi.create.content.contraptions.components.structureMovement.render.ActorInstance; @@ -22,7 +22,8 @@ public class DrillActorInstance extends ActorInstance { public DrillActorInstance(MaterialManager materialManager, PlacementSimulationWorld contraption, MovementContext context) { super(materialManager, contraption, context); - InstanceMaterial instanceMaterial = materialManager.getMaterial(AllMaterialSpecs.ACTORS); + InstanceMaterial instanceMaterial = materialManager.defaultSolid() + .material(AllMaterialSpecs.ACTORS); BlockState state = context.state; 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 4a0fca942..b43916d7b 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 @@ -3,7 +3,7 @@ package com.simibubi.create.content.contraptions.components.actors; import static net.minecraft.state.properties.BlockStateProperties.FACING; import com.jozufozu.flywheel.backend.instancing.Instancer; -import com.jozufozu.flywheel.backend.instancing.MaterialManager; +import com.jozufozu.flywheel.backend.material.MaterialManager; import com.simibubi.create.AllBlockPartials; import com.simibubi.create.content.contraptions.base.KineticTileEntity; import com.simibubi.create.content.contraptions.base.RotatingData; diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/DrillMovementBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/DrillMovementBehaviour.java index ad88f0c32..8942b48c5 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/DrillMovementBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/DrillMovementBehaviour.java @@ -3,7 +3,7 @@ package com.simibubi.create.content.contraptions.components.actors; import javax.annotation.Nullable; import com.jozufozu.flywheel.backend.Backend; -import com.jozufozu.flywheel.backend.instancing.MaterialManager; +import com.jozufozu.flywheel.backend.material.MaterialManager; import com.simibubi.create.content.contraptions.components.structureMovement.MovementContext; import com.simibubi.create.content.contraptions.components.structureMovement.render.ActorInstance; import com.simibubi.create.content.contraptions.components.structureMovement.render.ContraptionMatrices; diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/DrillRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/DrillRenderer.java index af8bd9be0..3a81d4509 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/DrillRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/DrillRenderer.java @@ -1,5 +1,6 @@ package com.simibubi.create.content.contraptions.components.actors; +import com.jozufozu.flywheel.util.transform.MatrixTransformStack; import com.mojang.blaze3d.matrix.MatrixStack; import com.simibubi.create.AllBlockPartials; import com.simibubi.create.content.contraptions.base.KineticTileEntity; @@ -11,7 +12,6 @@ import com.simibubi.create.foundation.render.PartialBufferer; import com.simibubi.create.foundation.render.SuperByteBuffer; import com.simibubi.create.foundation.utility.AngleHelper; import com.simibubi.create.foundation.utility.AnimationTickHolder; -import com.simibubi.create.foundation.utility.MatrixStacker; import com.simibubi.create.foundation.utility.VecHelper; import com.simibubi.create.foundation.utility.worldWrappers.PlacementSimulationWorld; @@ -46,7 +46,7 @@ public class DrillRenderer extends KineticTileEntityRenderer { MatrixStack m = matrices.contraptionStack; m.pushPose(); - MatrixStacker.of(m) + MatrixTransformStack.of(m) .centre() .rotateY(AngleHelper.horizontalAngle(facing)) .rotateX(AngleHelper.verticalAngle(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 e3b7235ea..936a88bb5 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 @@ -2,16 +2,17 @@ package com.simibubi.create.content.contraptions.components.actors; import static net.minecraft.state.properties.BlockStateProperties.HORIZONTAL_FACING; -import com.jozufozu.flywheel.backend.instancing.InstanceMaterial; -import com.jozufozu.flywheel.backend.instancing.MaterialManager; +import com.jozufozu.flywheel.backend.material.InstanceMaterial; +import com.jozufozu.flywheel.backend.material.MaterialManager; +import com.jozufozu.flywheel.core.Materials; import com.jozufozu.flywheel.core.materials.ModelData; +import com.jozufozu.flywheel.util.transform.MatrixTransformStack; import com.mojang.blaze3d.matrix.MatrixStack; import com.simibubi.create.AllBlockPartials; import com.simibubi.create.content.contraptions.components.structureMovement.MovementContext; import com.simibubi.create.content.contraptions.components.structureMovement.render.ActorInstance; import com.simibubi.create.foundation.utility.AngleHelper; import com.simibubi.create.foundation.utility.AnimationTickHolder; -import com.simibubi.create.foundation.utility.MatrixStacker; import com.simibubi.create.foundation.utility.VecHelper; import com.simibubi.create.foundation.utility.worldWrappers.PlacementSimulationWorld; @@ -36,7 +37,8 @@ public class HarvesterActorInstance extends ActorInstance { public HarvesterActorInstance(MaterialManager materialManager, PlacementSimulationWorld simulationWorld, MovementContext context) { super(materialManager, simulationWorld, context); - InstanceMaterial instanceMaterial = materialManager.getTransformMaterial(); + InstanceMaterial instanceMaterial = materialManager.defaultCutout() + .material(Materials.TRANSFORMED); BlockState state = context.state; @@ -74,7 +76,7 @@ public class HarvesterActorInstance extends ActorInstance { @Override public void beginFrame() { MatrixStack ms = new MatrixStack(); - MatrixStacker msr = MatrixStacker.of(ms); + MatrixTransformStack msr = MatrixTransformStack.of(ms); msr.translate(context.localPos) .centre() diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/actors/HarvesterMovementBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/components/actors/HarvesterMovementBehaviour.java index fdb268f4e..87eee9790 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/actors/HarvesterMovementBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/actors/HarvesterMovementBehaviour.java @@ -7,7 +7,7 @@ import javax.annotation.Nullable; import org.apache.commons.lang3.mutable.MutableBoolean; import com.jozufozu.flywheel.backend.Backend; -import com.jozufozu.flywheel.backend.instancing.MaterialManager; +import com.jozufozu.flywheel.backend.material.MaterialManager; import com.simibubi.create.content.contraptions.components.structureMovement.MovementBehaviour; import com.simibubi.create.content.contraptions.components.structureMovement.MovementContext; import com.simibubi.create.content.contraptions.components.structureMovement.render.ActorInstance; 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 009dc3abe..cfacf3990 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 @@ -3,13 +3,14 @@ package com.simibubi.create.content.contraptions.components.crafter; import java.util.function.Supplier; import com.jozufozu.flywheel.backend.instancing.Instancer; -import com.jozufozu.flywheel.backend.instancing.MaterialManager; +import com.jozufozu.flywheel.backend.material.MaterialManager; +import com.jozufozu.flywheel.util.transform.MatrixTransformStack; +import com.jozufozu.flywheel.util.transform.TransformStack; import com.mojang.blaze3d.matrix.MatrixStack; import com.simibubi.create.AllBlockPartials; import com.simibubi.create.content.contraptions.base.KineticTileEntity; import com.simibubi.create.content.contraptions.base.RotatingData; import com.simibubi.create.content.contraptions.base.SingleRotatingInstance; -import com.simibubi.create.foundation.utility.MatrixStacker; import net.minecraft.util.Direction; @@ -23,18 +24,20 @@ public class MechanicalCrafterInstance extends SingleRotatingInstance { protected Instancer getModel() { Direction facing = blockState.getValue(MechanicalCrafterBlock.HORIZONTAL_FACING); - Supplier ms = () -> { - MatrixStack stack = new MatrixStack(); - MatrixStacker stacker = MatrixStacker.of(stack).centre(); - - if (facing.getAxis() == Direction.Axis.X) - stacker.rotateZ(90); - else if (facing.getAxis() == Direction.Axis.Z) - stacker.rotateX(90); - - stacker.unCentre(); - return stack; - }; - return getRotatingMaterial().getModel(AllBlockPartials.SHAFTLESS_COGWHEEL, blockState, facing, ms); + return getRotatingMaterial().getModel(AllBlockPartials.SHAFTLESS_COGWHEEL, blockState, facing, rotateToFace(facing)); } + + private Supplier rotateToFace(Direction facing) { + return () -> { + MatrixStack stack = new MatrixStack(); + TransformStack stacker = MatrixTransformStack.of(stack) + .centre(); + + if (facing.getAxis() == Direction.Axis.X) stacker.rotateZ(90); + else if (facing.getAxis() == Direction.Axis.Z) stacker.rotateX(90); + + stacker.unCentre(); + return stack; + }; + } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/crafter/MechanicalCrafterRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/components/crafter/MechanicalCrafterRenderer.java index e77faa354..82858218e 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/crafter/MechanicalCrafterRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/crafter/MechanicalCrafterRenderer.java @@ -5,6 +5,7 @@ import static com.simibubi.create.content.contraptions.base.KineticTileEntityRen import com.jozufozu.flywheel.backend.Backend; import com.jozufozu.flywheel.core.PartialModel; +import com.jozufozu.flywheel.util.transform.MatrixTransformStack; import com.mojang.blaze3d.matrix.MatrixStack; import com.mojang.blaze3d.vertex.IVertexBuilder; import com.simibubi.create.AllBlockPartials; @@ -16,7 +17,6 @@ import com.simibubi.create.foundation.render.SuperByteBuffer; import com.simibubi.create.foundation.tileEntity.renderer.SafeTileEntityRenderer; import com.simibubi.create.foundation.utility.AngleHelper; import com.simibubi.create.foundation.utility.AnimationTickHolder; -import com.simibubi.create.foundation.utility.MatrixStacker; import net.minecraft.block.BlockState; import net.minecraft.client.Minecraft; @@ -112,7 +112,7 @@ public class MechanicalCrafterRenderer extends SafeTileEntityRenderer materialManager, PlacementSimulationWorld simulationWorld, MovementContext context) { super(materialManager, simulationWorld, context); - InstanceMaterial mat = materialManager.getTransformMaterial(); + InstanceMaterial mat = materialManager.defaultSolid() + .material(Materials.TRANSFORMED); BlockState state = context.state; DeployerTileEntity.Mode mode = NBTHelper.readEnum(context.tileData, "Mode", DeployerTileEntity.Mode.class); @@ -62,7 +64,8 @@ public class DeployerActorInstance extends ActorInstance { hand = mat.getModel(handPose, state).createInstance(); Direction.Axis axis = ((IRotate) state.getBlock()).getRotationAxis(state); - shaft = materialManager.getMaterial(AllMaterialSpecs.ROTATING) + shaft = materialManager.defaultSolid() + .material(AllMaterialSpecs.ROTATING) .getModel(KineticTileInstance.shaft(axis)) .createInstance(); @@ -92,7 +95,7 @@ public class DeployerActorInstance extends ActorInstance { Vector3d offset = Vector3d.atLowerCornerOf(facing.getNormal()).scale(factor); MatrixStack ms = new MatrixStack(); - MatrixStacker msr = MatrixStacker.of(ms); + MatrixTransformStack msr = MatrixTransformStack.of(ms); msr.translate(context.localPos) .translate(offset); @@ -100,7 +103,7 @@ public class DeployerActorInstance extends ActorInstance { transformModel(msr, pole, hand, yRot, zRot, zRotPole); } - static void transformModel(MatrixStacker msr, ModelData pole, ModelData hand, float yRot, float zRot, float zRotPole) { + static void transformModel(MatrixTransformStack msr, ModelData pole, ModelData hand, float yRot, float zRot, float zRotPole) { msr.centre(); msr.rotate(Direction.SOUTH, (float) ((zRot) / 180 * Math.PI)); diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerFilterSlot.java b/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerFilterSlot.java index 5267ac546..b65aaff17 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerFilterSlot.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerFilterSlot.java @@ -1,9 +1,9 @@ package com.simibubi.create.content.contraptions.components.deployer; +import com.jozufozu.flywheel.util.transform.MatrixTransformStack; import com.mojang.blaze3d.matrix.MatrixStack; import com.simibubi.create.foundation.tileEntity.behaviour.ValueBoxTransform; import com.simibubi.create.foundation.utility.AngleHelper; -import com.simibubi.create.foundation.utility.MatrixStacker; import com.simibubi.create.foundation.utility.VecHelper; import net.minecraft.block.BlockState; @@ -31,7 +31,7 @@ public class DeployerFilterSlot extends ValueBoxTransform { Direction facing = state.getValue(DeployerBlock.FACING); float xRot = facing == Direction.UP ? 90 : facing == Direction.DOWN ? 270 : 0; float yRot = AngleHelper.horizontalAngle(facing) + 180; - MatrixStacker.of(ms) + MatrixTransformStack.of(ms) .rotateY(yRot) .rotateX(xRot); } 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 dfff538bd..d2c7b1c2d 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 @@ -5,7 +5,7 @@ import static com.simibubi.create.content.contraptions.base.DirectionalKineticBl import com.jozufozu.flywheel.backend.instancing.IDynamicInstance; import com.jozufozu.flywheel.backend.instancing.ITickableInstance; -import com.jozufozu.flywheel.backend.instancing.MaterialManager; +import com.jozufozu.flywheel.backend.material.MaterialManager; import com.jozufozu.flywheel.core.PartialModel; import com.jozufozu.flywheel.core.materials.OrientedData; import com.simibubi.create.AllBlockPartials; diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerMovementBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerMovementBehaviour.java index 6b0a5601d..8db2c3089 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerMovementBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/deployer/DeployerMovementBehaviour.java @@ -8,7 +8,7 @@ import javax.annotation.Nullable; import org.apache.commons.lang3.tuple.Pair; import com.jozufozu.flywheel.backend.Backend; -import com.jozufozu.flywheel.backend.instancing.MaterialManager; +import com.jozufozu.flywheel.backend.material.MaterialManager; import com.simibubi.create.AllBlocks; import com.simibubi.create.AllItems; import com.simibubi.create.AllTags.AllBlockTags; 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 91f4edce5..9b6956c4d 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 @@ -2,10 +2,11 @@ package com.simibubi.create.content.contraptions.components.fan; import static net.minecraft.state.properties.BlockStateProperties.FACING; -import com.jozufozu.flywheel.backend.instancing.MaterialManager; +import com.jozufozu.flywheel.backend.material.MaterialManager; import com.simibubi.create.AllBlockPartials; import com.simibubi.create.content.contraptions.base.KineticTileInstance; import com.simibubi.create.content.contraptions.base.RotatingData; +import com.simibubi.create.foundation.render.AllMaterialSpecs; import net.minecraft.util.Direction; import net.minecraft.util.math.BlockPos; @@ -25,7 +26,10 @@ public class FanInstance extends KineticTileInstance { opposite = direction.getOpposite(); shaft = getRotatingMaterial().getModel(AllBlockPartials.SHAFT_HALF, blockState, opposite).createInstance(); - fan = getRotatingMaterial().getModel(AllBlockPartials.ENCASED_FAN_INNER, blockState, opposite).createInstance(); + fan = modelManager.defaultCutout() + .material(AllMaterialSpecs.ROTATING) + .getModel(AllBlockPartials.ENCASED_FAN_INNER, blockState, opposite) + .createInstance(); setup(shaft); setup(fan, getFanSpeed()); 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 3ffbf4168..ea35ee0e3 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 @@ -8,17 +8,17 @@ import java.util.List; import com.google.common.collect.Lists; import com.jozufozu.flywheel.backend.instancing.IDynamicInstance; import com.jozufozu.flywheel.backend.instancing.InstanceData; -import com.jozufozu.flywheel.backend.instancing.InstanceMaterial; +import com.jozufozu.flywheel.backend.material.InstanceMaterial; import com.jozufozu.flywheel.backend.instancing.Instancer; -import com.jozufozu.flywheel.backend.instancing.MaterialManager; +import com.jozufozu.flywheel.backend.material.MaterialManager; import com.jozufozu.flywheel.core.materials.ModelData; +import com.jozufozu.flywheel.util.transform.MatrixTransformStack; import com.mojang.blaze3d.matrix.MatrixStack; import com.simibubi.create.AllBlockPartials; import com.simibubi.create.content.contraptions.base.KineticTileInstance; import com.simibubi.create.content.contraptions.base.RotatingData; import com.simibubi.create.foundation.utility.AngleHelper; import com.simibubi.create.foundation.utility.AnimationTickHolder; -import com.simibubi.create.foundation.utility.MatrixStacker; import net.minecraft.block.BlockState; import net.minecraft.util.Direction; @@ -95,7 +95,7 @@ public class FlyWheelInstance extends KineticTileInstance im private void animate(float angle) { MatrixStack ms = new MatrixStack(); - MatrixStacker msr = MatrixStacker.of(ms); + MatrixTransformStack msr = MatrixTransformStack.of(ms); msr.translate(getInstancePosition()); @@ -163,7 +163,7 @@ public class FlyWheelInstance extends KineticTileInstance im return getRotatingMaterial().getModel(AllBlockPartials.SHAFT_HALF, blockState, opposite); } - protected void transformConnector(MatrixStacker ms, boolean upper, boolean rotating, float angle, boolean flip) { + protected void transformConnector(MatrixTransformStack ms, boolean upper, boolean rotating, float angle, boolean flip) { float shift = upper ? 1 / 4f : -1 / 8f; float offset = upper ? 1 / 4f : 1 / 4f; float radians = (float) (angle / 180 * Math.PI); @@ -189,7 +189,7 @@ public class FlyWheelInstance extends KineticTileInstance im ms.translate(9 / 16f, 0, 0); } - protected void rotateToFacing(MatrixStacker buffer, Direction facing) { + protected void rotateToFacing(MatrixTransformStack buffer, Direction facing) { buffer.centre() .rotate(Direction.UP, AngleHelper.rad(AngleHelper.horizontalAngle(facing))) .unCentre(); 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 94092ad1e..230960d90 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 @@ -1,12 +1,12 @@ package com.simibubi.create.content.contraptions.components.flywheel.engine; -import com.jozufozu.flywheel.backend.instancing.MaterialManager; +import com.jozufozu.flywheel.backend.material.MaterialManager; import com.jozufozu.flywheel.backend.instancing.tile.TileEntityInstance; import com.jozufozu.flywheel.core.PartialModel; import com.jozufozu.flywheel.core.materials.ModelData; +import com.jozufozu.flywheel.util.transform.MatrixTransformStack; import com.mojang.blaze3d.matrix.MatrixStack; import com.simibubi.create.foundation.utility.AngleHelper; -import com.simibubi.create.foundation.utility.MatrixStacker; import net.minecraft.block.Block; import net.minecraft.state.properties.BlockStateProperties; @@ -34,7 +34,7 @@ public class EngineInstance extends TileEntityInstance { float angle = AngleHelper.rad(AngleHelper.horizontalAngle(facing)); MatrixStack ms = new MatrixStack(); - MatrixStacker msr = MatrixStacker.of(ms); + MatrixTransformStack msr = MatrixTransformStack.of(ms); msr.translate(getInstancePosition()) .nudge(tile.hashCode()) 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 3cf4316e4..afd79ba80 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 @@ -1,7 +1,7 @@ package com.simibubi.create.content.contraptions.components.millstone; import com.jozufozu.flywheel.backend.instancing.Instancer; -import com.jozufozu.flywheel.backend.instancing.MaterialManager; +import com.jozufozu.flywheel.backend.material.MaterialManager; import com.simibubi.create.AllBlockPartials; import com.simibubi.create.content.contraptions.base.KineticTileEntity; import com.simibubi.create.content.contraptions.base.RotatingData; 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 19d81bdc9..b2fe1b653 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 @@ -1,7 +1,7 @@ package com.simibubi.create.content.contraptions.components.mixer; import com.jozufozu.flywheel.backend.instancing.IDynamicInstance; -import com.jozufozu.flywheel.backend.instancing.MaterialManager; +import com.jozufozu.flywheel.backend.material.MaterialManager; import com.jozufozu.flywheel.core.materials.OrientedData; import com.simibubi.create.AllBlockPartials; import com.simibubi.create.content.contraptions.base.RotatingData; 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 418fa0fea..500295183 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 @@ -1,7 +1,8 @@ package com.simibubi.create.content.contraptions.components.press; import com.jozufozu.flywheel.backend.instancing.IDynamicInstance; -import com.jozufozu.flywheel.backend.instancing.MaterialManager; +import com.jozufozu.flywheel.backend.material.MaterialManager; +import com.jozufozu.flywheel.core.Materials; import com.jozufozu.flywheel.core.materials.OrientedData; import com.simibubi.create.AllBlockPartials; import com.simibubi.create.content.contraptions.relays.encased.ShaftInstance; @@ -20,7 +21,8 @@ public class PressInstance extends ShaftInstance implements IDynamicInstance { super(dispatcher, tile); press = tile; - pressHead = dispatcher.getOrientedMaterial() + pressHead = dispatcher.defaultSolid() + .material(Materials.ORIENTED) .getModel(AllBlockPartials.MECHANICAL_PRESS_HEAD, blockState) .createInstance(); diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/saw/SawFilterSlot.java b/src/main/java/com/simibubi/create/content/contraptions/components/saw/SawFilterSlot.java index 1979c1e5a..27a13bc3a 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/saw/SawFilterSlot.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/saw/SawFilterSlot.java @@ -1,8 +1,8 @@ package com.simibubi.create.content.contraptions.components.saw; +import com.jozufozu.flywheel.util.transform.MatrixTransformStack; import com.mojang.blaze3d.matrix.MatrixStack; import com.simibubi.create.foundation.tileEntity.behaviour.ValueBoxTransform; -import com.simibubi.create.foundation.utility.MatrixStacker; import com.simibubi.create.foundation.utility.VecHelper; import net.minecraft.block.BlockState; @@ -23,7 +23,7 @@ public class SawFilterSlot extends ValueBoxTransform { @Override protected void rotate(BlockState state, MatrixStack ms) { int yRot = state.getValue(SawBlock.AXIS_ALONG_FIRST_COORDINATE) ? 270 : 180; - MatrixStacker.of(ms) + MatrixTransformStack.of(ms) .rotateY(yRot) .rotateX(90); } 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 73fac169c..59fcc7589 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 @@ -3,7 +3,7 @@ package com.simibubi.create.content.contraptions.components.saw; import static net.minecraft.state.properties.BlockStateProperties.FACING; import com.jozufozu.flywheel.backend.instancing.Instancer; -import com.jozufozu.flywheel.backend.instancing.MaterialManager; +import com.jozufozu.flywheel.backend.material.MaterialManager; import com.simibubi.create.AllBlockPartials; import com.simibubi.create.content.contraptions.base.KineticTileEntity; import com.simibubi.create.content.contraptions.base.RotatingData; diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/saw/SawRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/components/saw/SawRenderer.java index 76831398a..91e468f99 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/saw/SawRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/saw/SawRenderer.java @@ -4,6 +4,7 @@ import static net.minecraft.state.properties.BlockStateProperties.FACING; import com.jozufozu.flywheel.backend.Backend; import com.jozufozu.flywheel.core.PartialModel; +import com.jozufozu.flywheel.util.transform.MatrixTransformStack; import com.mojang.blaze3d.matrix.MatrixStack; import com.simibubi.create.AllBlockPartials; import com.simibubi.create.CreateClient; @@ -17,7 +18,6 @@ import com.simibubi.create.foundation.render.SuperByteBuffer; import com.simibubi.create.foundation.tileEntity.behaviour.filtering.FilteringRenderer; import com.simibubi.create.foundation.tileEntity.renderer.SafeTileEntityRenderer; import com.simibubi.create.foundation.utility.AngleHelper; -import com.simibubi.create.foundation.utility.MatrixStacker; import com.simibubi.create.foundation.utility.VecHelper; import com.simibubi.create.foundation.utility.worldWrappers.PlacementSimulationWorld; @@ -194,14 +194,14 @@ public class SawRenderer extends SafeTileEntityRenderer { MatrixStack m = matrices.contraptionStack; m.pushPose(); - MatrixStacker.of(m) + MatrixTransformStack.of(m) .centre() .rotateY(AngleHelper.horizontalAngle(facing)) .rotateX(AngleHelper.verticalAngle(facing)); if (!SawBlock.isHorizontal(state)) - MatrixStacker.of(m) + MatrixTransformStack.of(m) .rotateZ(state.getValue(SawBlock.AXIS_ALONG_FIRST_COORDINATE) ? 0 : 90); - MatrixStacker.of(m) + MatrixTransformStack.of(m) .unCentre(); superBuffer.transform(m) diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ControlledContraptionEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ControlledContraptionEntity.java index d2060e248..c27d87133 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ControlledContraptionEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ControlledContraptionEntity.java @@ -2,10 +2,10 @@ package com.simibubi.create.content.contraptions.components.structureMovement; import static com.simibubi.create.foundation.utility.AngleHelper.angleLerp; +import com.jozufozu.flywheel.util.transform.MatrixTransformStack; import com.mojang.blaze3d.matrix.MatrixStack; import com.simibubi.create.AllEntityTypes; import com.simibubi.create.content.contraptions.components.structureMovement.bearing.BearingContraption; -import com.simibubi.create.foundation.utility.MatrixStacker; import com.simibubi.create.foundation.utility.NBTHelper; import com.simibubi.create.foundation.utility.VecHelper; @@ -231,7 +231,7 @@ public class ControlledContraptionEntity extends AbstractContraptionEntity { Axis axis = getRotationAxis(); for (MatrixStack stack : matrixStacks) - MatrixStacker.of(stack) + MatrixTransformStack.of(stack) .nudge(getId()) .centre() .rotate(angle, axis) diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/DirectionalExtenderScrollOptionSlot.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/DirectionalExtenderScrollOptionSlot.java index defea334f..02d7e94cc 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/DirectionalExtenderScrollOptionSlot.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/DirectionalExtenderScrollOptionSlot.java @@ -2,10 +2,10 @@ package com.simibubi.create.content.contraptions.components.structureMovement; import java.util.function.BiPredicate; +import com.jozufozu.flywheel.util.transform.MatrixTransformStack; import com.mojang.blaze3d.matrix.MatrixStack; import com.simibubi.create.foundation.tileEntity.behaviour.CenteredSideValueBoxTransform; import com.simibubi.create.foundation.utility.AngleHelper; -import com.simibubi.create.foundation.utility.MatrixStacker; import net.minecraft.block.BlockState; import net.minecraft.state.properties.BlockStateProperties; @@ -27,7 +27,7 @@ public class DirectionalExtenderScrollOptionSlot extends CenteredSideValueBoxTra @Override protected void rotate(BlockState state, MatrixStack ms) { if (!getSide().getAxis().isHorizontal()) - MatrixStacker.of(ms).rotateY(AngleHelper.horizontalAngle(state.getValue(BlockStateProperties.FACING)) - 90); + MatrixTransformStack.of(ms).rotateY(AngleHelper.horizontalAngle(state.getValue(BlockStateProperties.FACING)) - 90); super.rotate(state, ms); } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/MovementBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/MovementBehaviour.java index a94aa49c8..b7b3400eb 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/MovementBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/MovementBehaviour.java @@ -2,7 +2,7 @@ package com.simibubi.create.content.contraptions.components.structureMovement; import javax.annotation.Nullable; -import com.jozufozu.flywheel.backend.instancing.MaterialManager; +import com.jozufozu.flywheel.backend.material.MaterialManager; import com.simibubi.create.content.contraptions.components.structureMovement.render.ActorInstance; import com.simibubi.create.content.contraptions.components.structureMovement.render.ContraptionMatrices; import com.simibubi.create.foundation.utility.worldWrappers.PlacementSimulationWorld; diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/OrientedContraptionEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/OrientedContraptionEntity.java index 9210605e5..47c10d668 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/OrientedContraptionEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/OrientedContraptionEntity.java @@ -7,6 +7,7 @@ import java.util.UUID; import javax.annotation.Nullable; +import com.jozufozu.flywheel.util.transform.MatrixTransformStack; import com.mojang.blaze3d.matrix.MatrixStack; import com.simibubi.create.AllEntityTypes; import com.simibubi.create.content.contraptions.components.structureMovement.bearing.StabilizedContraption; @@ -18,7 +19,6 @@ import com.simibubi.create.content.contraptions.components.structureMovement.tra import com.simibubi.create.foundation.item.ItemHelper; import com.simibubi.create.foundation.utility.AngleHelper; import com.simibubi.create.foundation.utility.Couple; -import com.simibubi.create.foundation.utility.MatrixStacker; import com.simibubi.create.foundation.utility.NBTHelper; import com.simibubi.create.foundation.utility.VecHelper; @@ -536,7 +536,7 @@ public class OrientedContraptionEntity extends AbstractContraptionEntity { } for (MatrixStack stack : matrixStacks) - MatrixStacker.of(stack) + MatrixTransformStack.of(stack) .nudge(getId()) .centre() .rotateY(angleYaw) 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 67f2cb537..f9ce8806d 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 @@ -1,7 +1,7 @@ package com.simibubi.create.content.contraptions.components.structureMovement.bearing; import com.jozufozu.flywheel.backend.instancing.IDynamicInstance; -import com.jozufozu.flywheel.backend.instancing.MaterialManager; +import com.jozufozu.flywheel.backend.material.MaterialManager; import com.jozufozu.flywheel.core.PartialModel; import com.jozufozu.flywheel.core.materials.OrientedData; import com.simibubi.create.AllBlockPartials; 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 13c7b8836..67de1bc5f 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 @@ -1,6 +1,7 @@ package com.simibubi.create.content.contraptions.components.structureMovement.bearing; -import com.jozufozu.flywheel.backend.instancing.MaterialManager; +import com.jozufozu.flywheel.backend.material.MaterialManager; +import com.jozufozu.flywheel.core.Materials; import com.jozufozu.flywheel.core.materials.OrientedData; import com.simibubi.create.AllBlockPartials; import com.simibubi.create.content.contraptions.components.structureMovement.MovementContext; @@ -32,7 +33,9 @@ public class StabilizedBearingInstance extends ActorInstance { blockOrientation = BearingInstance.getBlockStateOrientation(facing); - topInstance = materialManager.getOrientedMaterial().getModel(AllBlockPartials.BEARING_TOP, blockState).createInstance(); + topInstance = materialManager.defaultSolid() + .material(Materials.ORIENTED) + .getModel(AllBlockPartials.BEARING_TOP, blockState).createInstance(); topInstance.setPosition(context.localPos) .setRotation(blockOrientation) diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/StabilizedBearingMovementBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/StabilizedBearingMovementBehaviour.java index d45c48db0..82ae9b925 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/StabilizedBearingMovementBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/bearing/StabilizedBearingMovementBehaviour.java @@ -3,7 +3,7 @@ package com.simibubi.create.content.contraptions.components.structureMovement.be import javax.annotation.Nullable; import com.jozufozu.flywheel.backend.Backend; -import com.jozufozu.flywheel.backend.instancing.MaterialManager; +import com.jozufozu.flywheel.backend.material.MaterialManager; import com.jozufozu.flywheel.core.PartialModel; import com.simibubi.create.AllBlockPartials; import com.simibubi.create.content.contraptions.components.structureMovement.AbstractContraptionEntity; 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 81a8121e1..050fbc56d 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 @@ -1,14 +1,14 @@ package com.simibubi.create.content.contraptions.components.structureMovement.chassis; import com.jozufozu.flywheel.backend.instancing.IDynamicInstance; -import com.jozufozu.flywheel.backend.instancing.MaterialManager; +import com.jozufozu.flywheel.backend.material.MaterialManager; import com.jozufozu.flywheel.backend.instancing.tile.TileEntityInstance; import com.jozufozu.flywheel.core.materials.ModelData; +import com.jozufozu.flywheel.util.transform.MatrixTransformStack; import com.mojang.blaze3d.matrix.MatrixStack; import com.simibubi.create.AllBlockPartials; import com.simibubi.create.foundation.utility.AngleHelper; import com.simibubi.create.foundation.utility.AnimationTickHolder; -import com.simibubi.create.foundation.utility.MatrixStacker; import net.minecraft.client.Minecraft; import net.minecraft.util.Direction; @@ -52,7 +52,7 @@ public class StickerInstance extends TileEntityInstance imple private void animateHead(float offset) { MatrixStack stack = new MatrixStack(); - MatrixStacker.of(stack) + MatrixTransformStack.of(stack) .translate(getInstancePosition()) .nudge(tile.hashCode()) .centre() 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 e60fee02c..5a4d957f5 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 @@ -1,8 +1,9 @@ package com.simibubi.create.content.contraptions.components.structureMovement.gantry; import com.jozufozu.flywheel.backend.instancing.IDynamicInstance; -import com.jozufozu.flywheel.backend.instancing.MaterialManager; +import com.jozufozu.flywheel.backend.material.MaterialManager; import com.jozufozu.flywheel.core.materials.ModelData; +import com.jozufozu.flywheel.util.transform.MatrixTransformStack; import com.mojang.blaze3d.matrix.MatrixStack; import com.simibubi.create.AllBlockPartials; import com.simibubi.create.content.contraptions.base.KineticTileEntity; @@ -10,7 +11,6 @@ import com.simibubi.create.content.contraptions.base.KineticTileEntityRenderer; import com.simibubi.create.content.contraptions.relays.encased.ShaftInstance; import com.simibubi.create.foundation.utility.AngleHelper; import com.simibubi.create.foundation.utility.Iterate; -import com.simibubi.create.foundation.utility.MatrixStacker; import net.minecraft.util.Direction; import net.minecraft.util.math.BlockPos; @@ -64,7 +64,7 @@ public class GantryCarriageInstance extends ShaftInstance implements IDynamicIns private void animateCogs(float cogAngle) { MatrixStack ms = new MatrixStack(); - MatrixStacker.of(ms) + MatrixTransformStack.of(ms) .translate(getInstancePosition()) .centre() .rotateY(AngleHelper.horizontalAngle(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 38fc81deb..da3306641 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 @@ -2,12 +2,13 @@ package com.simibubi.create.content.contraptions.components.structureMovement.gl import com.jozufozu.flywheel.backend.gl.buffer.VecBuffer; import com.jozufozu.flywheel.backend.instancing.ITickableInstance; -import com.jozufozu.flywheel.backend.instancing.InstanceMaterial; import com.jozufozu.flywheel.backend.instancing.Instancer; -import com.jozufozu.flywheel.backend.instancing.MaterialManager; +import com.jozufozu.flywheel.backend.material.MaterialManager; import com.jozufozu.flywheel.backend.instancing.entity.EntityInstance; +import com.jozufozu.flywheel.backend.material.MaterialGroup; import com.jozufozu.flywheel.backend.model.BufferedModel; import com.jozufozu.flywheel.backend.model.IndexedModel; +import com.jozufozu.flywheel.backend.state.TextureRenderState; import com.jozufozu.flywheel.core.Formats; import com.jozufozu.flywheel.core.Materials; import com.jozufozu.flywheel.core.instancing.ConditionalInstance; @@ -51,14 +52,9 @@ public class GlueInstance extends EntityInstance implements ITi } private Instancer getInstancer(MaterialManager materialManager, SuperGlueEntity entity) { - InstanceMaterial material; + MaterialGroup group = USE_ATLAS ? materialManager.defaultSolid() : materialManager.solid(TextureRenderState.get(TEXTURE)); - if (USE_ATLAS) - material = materialManager.getMaterial(Materials.ORIENTED); - else - material = materialManager.getMaterial(Materials.ORIENTED, TEXTURE); - - return material.get(entity.getType(), GlueInstance::supplyModel); + return group.material(Materials.ORIENTED).model(entity.getType(), GlueInstance::supplyModel); } @Override diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/glue/SuperGlueRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/glue/SuperGlueRenderer.java index 78e6f7868..10b91afec 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/glue/SuperGlueRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/glue/SuperGlueRenderer.java @@ -1,12 +1,12 @@ package com.simibubi.create.content.contraptions.components.structureMovement.glue; +import com.jozufozu.flywheel.util.transform.MatrixTransformStack; import com.mojang.blaze3d.matrix.MatrixStack; import com.mojang.blaze3d.matrix.MatrixStack.Entry; import com.mojang.blaze3d.vertex.IVertexBuilder; import com.simibubi.create.AllItems; import com.simibubi.create.Create; import com.simibubi.create.foundation.utility.AngleHelper; -import com.simibubi.create.foundation.utility.MatrixStacker; import com.simibubi.create.foundation.utility.VecHelper; import net.minecraft.client.Minecraft; @@ -69,7 +69,7 @@ public class SuperGlueRenderer extends EntityRenderer { Direction face = entity.getFacingDirection(); ms.pushPose(); - MatrixStacker.of(ms) + MatrixTransformStack.of(ms) .rotateY(AngleHelper.horizontalAngleNew(face)) .rotateX(AngleHelper.verticalAngle(face)); Entry peek = ms.last(); diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/pulley/AbstractPulleyInstance.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/pulley/AbstractPulleyInstance.java index 9e88c809c..fae4a7b18 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/pulley/AbstractPulleyInstance.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/pulley/AbstractPulleyInstance.java @@ -4,7 +4,7 @@ import java.util.Arrays; import com.jozufozu.flywheel.backend.instancing.IDynamicInstance; import com.jozufozu.flywheel.backend.instancing.Instancer; -import com.jozufozu.flywheel.backend.instancing.MaterialManager; +import com.jozufozu.flywheel.backend.material.MaterialManager; import com.jozufozu.flywheel.core.instancing.ConditionalInstance; import com.jozufozu.flywheel.core.instancing.GroupInstance; import com.jozufozu.flywheel.core.instancing.SelectInstance; 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 b6fb4679c..c748a0568 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 @@ -1,7 +1,8 @@ package com.simibubi.create.content.contraptions.components.structureMovement.pulley; import com.jozufozu.flywheel.backend.instancing.Instancer; -import com.jozufozu.flywheel.backend.instancing.MaterialManager; +import com.jozufozu.flywheel.backend.material.MaterialManager; +import com.jozufozu.flywheel.core.Materials; import com.jozufozu.flywheel.core.materials.OrientedData; import com.simibubi.create.AllBlockPartials; import com.simibubi.create.content.contraptions.fluids.actors.HosePulleyTileEntity; @@ -20,11 +21,15 @@ public class HosePulleyInstance extends AbstractPulleyInstance { } protected Instancer getMagnetModel() { - return getOrientedMaterial().getModel(AllBlockPartials.HOSE_MAGNET, blockState); + return materialManager.defaultCutout() + .material(Materials.ORIENTED) + .getModel(AllBlockPartials.HOSE_MAGNET, blockState); } protected Instancer getHalfMagnetModel() { - return getOrientedMaterial().getModel(AllBlockPartials.HOSE_HALF_MAGNET, blockState); + return materialManager.defaultCutout() + .material(Materials.ORIENTED) + .getModel(AllBlockPartials.HOSE_HALF_MAGNET, blockState); } protected Instancer getCoilModel() { 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 1fc46cab0..a832532d2 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 @@ -2,7 +2,7 @@ package com.simibubi.create.content.contraptions.components.structureMovement.pu import com.jozufozu.flywheel.backend.instancing.Instancer; -import com.jozufozu.flywheel.backend.instancing.MaterialManager; +import com.jozufozu.flywheel.backend.material.MaterialManager; import com.jozufozu.flywheel.core.materials.OrientedData; import com.simibubi.create.AllBlockPartials; import com.simibubi.create.AllBlocks; diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/render/ActorInstance.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/render/ActorInstance.java index 77ffe3c9f..ab49754c5 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/render/ActorInstance.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/render/ActorInstance.java @@ -1,6 +1,6 @@ package com.simibubi.create.content.contraptions.components.structureMovement.render; -import com.jozufozu.flywheel.backend.instancing.MaterialManager; +import com.jozufozu.flywheel.backend.material.MaterialManager; import com.simibubi.create.content.contraptions.components.structureMovement.MovementContext; import com.simibubi.create.foundation.utility.worldWrappers.PlacementSimulationWorld; diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/render/ContraptionInstanceManager.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/render/ContraptionInstanceManager.java index 1cf73852d..47cd9258a 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/render/ContraptionInstanceManager.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/render/ContraptionInstanceManager.java @@ -7,7 +7,7 @@ import javax.annotation.Nullable; import org.apache.commons.lang3.tuple.Pair; -import com.jozufozu.flywheel.backend.instancing.MaterialManager; +import com.jozufozu.flywheel.backend.material.MaterialManager; import com.jozufozu.flywheel.backend.instancing.tile.TileInstanceManager; import com.simibubi.create.AllMovementBehaviours; import com.simibubi.create.content.contraptions.components.structureMovement.MovementBehaviour; diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/render/ContraptionMaterialManager.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/render/ContraptionMaterialManager.java deleted file mode 100644 index fc66294b9..000000000 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/render/ContraptionMaterialManager.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.simibubi.create.content.contraptions.components.structureMovement.render; - -import com.jozufozu.flywheel.backend.instancing.MaterialManager; -import com.jozufozu.flywheel.backend.instancing.MaterialRenderer; -import com.jozufozu.flywheel.core.WorldContext; -import com.jozufozu.flywheel.core.shader.IProgramCallback; - -import net.minecraft.client.renderer.RenderType; -import net.minecraft.util.math.vector.Matrix4f; - -public class ContraptionMaterialManager extends MaterialManager { - public ContraptionMaterialManager(WorldContext context) { - super(context); - } - - @Override - public void render(RenderType layer, Matrix4f viewProjection, double camX, double camY, double camZ, IProgramCallback callback) { - for (MaterialRenderer material : atlasRenderers) { - material.render(layer, viewProjection, camX, camY, camZ, callback); - } - } -} diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/render/ContraptionRenderDispatcher.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/render/ContraptionRenderDispatcher.java index d41c688ef..06420bf13 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/render/ContraptionRenderDispatcher.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/render/ContraptionRenderDispatcher.java @@ -16,10 +16,12 @@ import java.util.Random; import org.apache.commons.lang3.tuple.Pair; import com.jozufozu.flywheel.backend.Backend; +import com.jozufozu.flywheel.backend.state.RenderLayer; import com.jozufozu.flywheel.event.BeginFrameEvent; import com.jozufozu.flywheel.event.GatherContextEvent; import com.jozufozu.flywheel.event.ReloadRenderersEvent; import com.jozufozu.flywheel.event.RenderLayerEvent; +import com.jozufozu.flywheel.util.transform.MatrixTransformStack; import com.mojang.blaze3d.matrix.MatrixStack; import com.simibubi.create.AllMovementBehaviours; import com.simibubi.create.CreateClient; @@ -35,7 +37,6 @@ import com.simibubi.create.foundation.render.CreateContexts; import com.simibubi.create.foundation.render.SuperByteBuffer; import com.simibubi.create.foundation.render.SuperByteBufferCache; import com.simibubi.create.foundation.render.TileEntityRenderHelper; -import com.simibubi.create.foundation.utility.MatrixStacker; import com.simibubi.create.foundation.utility.worldWrappers.PlacementSimulationWorld; import it.unimi.dsi.fastutil.ints.Int2ObjectMap; @@ -130,8 +131,11 @@ public class ContraptionRenderDispatcher { } if (Backend.getInstance().canUseInstancing()) { - for (RenderedContraption renderer : RENDERERS.values()) { - renderer.materialManager.render(layer, event.viewProjection, event.camX, event.camY, event.camZ, renderer::setup); + RenderLayer renderLayer = RenderLayer.fromRenderType(layer); + if (renderLayer != null) { + for (RenderedContraption renderer : RENDERERS.values()) { + renderer.materialManager.render(renderLayer, event.viewProjection, event.camX, event.camY, event.camZ, renderer::setup); + } } } @@ -236,7 +240,7 @@ public class ContraptionRenderDispatcher { MatrixStack m = matrices.contraptionStack; m.pushPose(); - MatrixStacker.of(m) + MatrixTransformStack.of(m) .translate(blockInfo.pos); MovementBehaviour movementBehaviour = AllMovementBehaviours.of(blockInfo.state); diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/render/RenderedContraption.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/render/RenderedContraption.java index 3b6c4eece..bb528524e 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/render/RenderedContraption.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/render/RenderedContraption.java @@ -13,7 +13,7 @@ import com.jozufozu.flywheel.backend.Backend; import com.jozufozu.flywheel.backend.gl.attrib.CommonAttributes; import com.jozufozu.flywheel.backend.gl.attrib.VertexFormat; import com.jozufozu.flywheel.backend.instancing.IInstanceRendered; -import com.jozufozu.flywheel.backend.instancing.MaterialManager; +import com.jozufozu.flywheel.backend.material.MaterialManager; import com.jozufozu.flywheel.backend.model.ArrayModelRenderer; import com.jozufozu.flywheel.backend.model.BufferedModel; import com.jozufozu.flywheel.backend.model.IndexedModel; @@ -60,7 +60,7 @@ public class RenderedContraption extends ContraptionWorldHolder { public RenderedContraption(Contraption contraption, PlacementSimulationWorld renderWorld) { super(contraption, renderWorld); this.lighter = contraption.makeLighter(); - this.materialManager = new ContraptionMaterialManager(CreateContexts.CWORLD); + this.materialManager = new MaterialManager<>(CreateContexts.CWORLD).setIgnoreOriginCoordinate(true); this.kinetics = new ContraptionInstanceManager(this, materialManager); buildLayers(); diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/CouplingRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/CouplingRenderer.java index 577ed99c1..5183b2959 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/CouplingRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/train/CouplingRenderer.java @@ -2,6 +2,7 @@ package com.simibubi.create.content.contraptions.components.structureMovement.tr import static net.minecraft.util.math.MathHelper.lerp; +import com.jozufozu.flywheel.util.transform.MatrixTransformStack; import com.mojang.blaze3d.matrix.MatrixStack; import com.mojang.blaze3d.vertex.IVertexBuilder; import com.simibubi.create.AllBlockPartials; @@ -13,7 +14,6 @@ import com.simibubi.create.foundation.render.SuperByteBuffer; import com.simibubi.create.foundation.utility.AnimationTickHolder; import com.simibubi.create.foundation.utility.ColorHelper; import com.simibubi.create.foundation.utility.Couple; -import com.simibubi.create.foundation.utility.MatrixStacker; import com.simibubi.create.foundation.utility.VecHelper; import net.minecraft.block.BlockState; @@ -80,7 +80,7 @@ public class CouplingRenderer { double connectorPitch = Math.atan2(endPointDiff.y, endPointDiff.multiply(1, 0, 1) .length()) * 180 / Math.PI; - MatrixStacker msr = MatrixStacker.of(ms); + MatrixTransformStack msr = MatrixTransformStack.of(ms); carts.forEachWithContext((cart, isFirst) -> { CartEndpoint cartTransform = transforms.get(isFirst); diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/PumpCogInstance.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/PumpCogInstance.java index 2cb223bb9..5c6886304 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/PumpCogInstance.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/PumpCogInstance.java @@ -3,7 +3,7 @@ package com.simibubi.create.content.contraptions.fluids; import static net.minecraft.state.properties.BlockStateProperties.FACING; import com.jozufozu.flywheel.backend.instancing.Instancer; -import com.jozufozu.flywheel.backend.instancing.MaterialManager; +import com.jozufozu.flywheel.backend.material.MaterialManager; import com.simibubi.create.AllBlockPartials; import com.simibubi.create.content.contraptions.base.KineticTileEntity; import com.simibubi.create.content.contraptions.base.RotatingData; diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/PumpRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/PumpRenderer.java index 8d9726dba..9c92d47d9 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/PumpRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/PumpRenderer.java @@ -1,5 +1,6 @@ package com.simibubi.create.content.contraptions.fluids; +import com.jozufozu.flywheel.util.transform.MatrixTransformStack; import com.mojang.blaze3d.matrix.MatrixStack; import com.simibubi.create.AllBlockPartials; import com.simibubi.create.content.contraptions.base.KineticTileEntity; @@ -7,7 +8,6 @@ import com.simibubi.create.content.contraptions.base.KineticTileEntityRenderer; import com.simibubi.create.foundation.render.PartialBufferer; import com.simibubi.create.foundation.render.SuperByteBuffer; import com.simibubi.create.foundation.utility.AngleHelper; -import com.simibubi.create.foundation.utility.MatrixStacker; import net.minecraft.block.BlockState; import net.minecraft.client.renderer.IRenderTypeBuffer; @@ -37,7 +37,7 @@ public class PumpRenderer extends KineticTileEntityRenderer { ms.pushPose(); SuperByteBuffer arrow = PartialBufferer.get(AllBlockPartials.MECHANICAL_PUMP_ARROW, blockState); Direction direction = blockState.getValue(PumpBlock.FACING); - MatrixStacker.of(ms) + MatrixTransformStack.of(ms) .centre() .rotateY(AngleHelper.horizontalAngle(direction) + 180) .rotateX(-AngleHelper.verticalAngle(direction) - 90) diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/ItemDrainRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/ItemDrainRenderer.java index 597289981..83953bdc1 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/ItemDrainRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/ItemDrainRenderer.java @@ -2,6 +2,7 @@ package com.simibubi.create.content.contraptions.fluids.actors; import java.util.Random; +import com.jozufozu.flywheel.util.transform.MatrixTransformStack; import com.mojang.blaze3d.matrix.MatrixStack; import com.simibubi.create.content.contraptions.processing.EmptyingByBasin; import com.simibubi.create.content.contraptions.relays.belt.BeltHelper; @@ -10,7 +11,6 @@ import com.simibubi.create.foundation.fluid.FluidRenderer; import com.simibubi.create.foundation.tileEntity.behaviour.fluid.SmartFluidTankBehaviour; import com.simibubi.create.foundation.tileEntity.behaviour.fluid.SmartFluidTankBehaviour.TankSegment; import com.simibubi.create.foundation.tileEntity.renderer.SmartTileEntityRenderer; -import com.simibubi.create.foundation.utility.MatrixStacker; import com.simibubi.create.foundation.utility.VecHelper; import net.minecraft.client.Minecraft; @@ -48,7 +48,7 @@ public class ItemDrainRenderer extends SmartTileEntityRenderer { BlockPos pos = basin.getBlockPos(); ms.translate(.5, .2f, .5); - MatrixStacker.of(ms) + MatrixTransformStack.of(ms) .rotateY(basin.ingredientRotation.getValue(partialTicks)); Random r = new Random(pos.hashCode()); @@ -80,7 +80,7 @@ public class BasinRenderer extends SmartTileEntityRenderer { Vector3d itemPosition = VecHelper.rotate(baseVector, anglePartition * itemCount, Axis.Y); ms.translate(itemPosition.x, itemPosition.y, itemPosition.z); - MatrixStacker.of(ms) + MatrixTransformStack.of(ms) .rotateY(anglePartition * itemCount + 35) .rotateX(65); @@ -122,7 +122,7 @@ public class BasinRenderer extends SmartTileEntityRenderer { continue; ms.pushPose(); - MatrixStacker.of(ms) + MatrixTransformStack.of(ms) .translate(outVec) .translate(new Vector3d(0, Math.max(-.55f, -(progress * progress * 2)), 0)) .translate(directionVec.scale(progress * .5f)) 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 f30d42e08..749cc33c7 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 @@ -5,8 +5,9 @@ import java.util.function.Supplier; import com.jozufozu.flywheel.backend.instancing.InstanceData; import com.jozufozu.flywheel.backend.instancing.Instancer; -import com.jozufozu.flywheel.backend.instancing.MaterialManager; +import com.jozufozu.flywheel.backend.material.MaterialManager; import com.jozufozu.flywheel.core.PartialModel; +import com.jozufozu.flywheel.util.transform.MatrixTransformStack; import com.mojang.blaze3d.matrix.MatrixStack; import com.simibubi.create.AllBlockPartials; import com.simibubi.create.AllBlocks; @@ -15,7 +16,6 @@ import com.simibubi.create.content.contraptions.base.RotatingData; import com.simibubi.create.foundation.block.render.SpriteShiftEntry; import com.simibubi.create.foundation.render.AllMaterialSpecs; import com.simibubi.create.foundation.utility.Iterate; -import com.simibubi.create.foundation.utility.MatrixStacker; import net.minecraft.item.DyeColor; import net.minecraft.util.Direction; @@ -61,7 +61,9 @@ public class BeltInstance extends KineticTileInstance { PartialModel beltPartial = BeltRenderer.getBeltPartial(diagonal, start, end, bottom); SpriteShiftEntry spriteShift = BeltRenderer.getSpriteShiftEntry(color, diagonal, bottom); - Instancer beltModel = materialManager.getMaterial(AllMaterialSpecs.BELTS).getModel(beltPartial, blockState); + Instancer beltModel = materialManager.defaultSolid() + .material(AllMaterialSpecs.BELTS) + .getModel(beltPartial, blockState); keys.add(setup(beltModel.createInstance(), bottom, spriteShift)); @@ -128,7 +130,7 @@ public class BeltInstance extends KineticTileInstance { Supplier ms = () -> { MatrixStack modelTransform = new MatrixStack(); - MatrixStacker msr = MatrixStacker.of(modelTransform); + MatrixTransformStack msr = MatrixTransformStack.of(modelTransform); msr.centre(); if (axis == Direction.Axis.X) msr.rotateY(90); diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltRenderer.java index 1700ae9bc..c9fd274bd 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltRenderer.java @@ -5,6 +5,7 @@ import java.util.function.Supplier; import com.jozufozu.flywheel.backend.Backend; import com.jozufozu.flywheel.core.PartialModel; +import com.jozufozu.flywheel.util.transform.MatrixTransformStack; import com.mojang.blaze3d.matrix.MatrixStack; import com.mojang.blaze3d.vertex.IVertexBuilder; import com.simibubi.create.AllBlockPartials; @@ -21,7 +22,6 @@ import com.simibubi.create.foundation.tileEntity.renderer.SafeTileEntityRenderer import com.simibubi.create.foundation.utility.AngleHelper; import com.simibubi.create.foundation.utility.AnimationTickHolder; import com.simibubi.create.foundation.utility.Iterate; -import com.simibubi.create.foundation.utility.MatrixStacker; import com.simibubi.create.foundation.utility.worldWrappers.WrappedWorld; import net.minecraft.block.BlockState; @@ -76,7 +76,7 @@ public class BeltRenderer extends SafeTileEntityRenderer { boolean alongX = facing.getAxis() == Axis.X; MatrixStack localTransforms = new MatrixStack(); - MatrixStacker msr = MatrixStacker.of(localTransforms); + MatrixTransformStack msr = MatrixTransformStack.of(localTransforms); IVertexBuilder vb = buffer.getBuffer(RenderType.solid()); float renderTick = AnimationTickHolder.getRenderTime(te.getLevel()); @@ -134,7 +134,7 @@ public class BeltRenderer extends SafeTileEntityRenderer { Supplier matrixStackSupplier = () -> { MatrixStack stack = new MatrixStack(); - MatrixStacker stacker = MatrixStacker.of(stack); + MatrixTransformStack stacker = MatrixTransformStack.of(stack); stacker.centre(); if (dir.getAxis() == Axis.X) stacker.rotateY(90); if (dir.getAxis() == Axis.Y) stacker.rotateX(90); @@ -202,7 +202,7 @@ public class BeltRenderer extends SafeTileEntityRenderer { for (TransportedItemStack transported : te.getInventory() .getTransportedItems()) { ms.pushPose(); - MatrixStacker.of(ms) + MatrixTransformStack.of(ms) .nudge(transported.angle); float offset = MathHelper.lerp(partialTicks, transported.prevBeltPosition, transported.beltPosition); float sideOffset = MathHelper.lerp(partialTicks, transported.prevSideOffset, transported.sideOffset); diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/encased/ShaftInstance.java b/src/main/java/com/simibubi/create/content/contraptions/relays/encased/ShaftInstance.java index 0761c6e43..abf7af134 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/encased/ShaftInstance.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/encased/ShaftInstance.java @@ -1,6 +1,6 @@ package com.simibubi.create.content.contraptions.relays.encased; -import com.jozufozu.flywheel.backend.instancing.MaterialManager; +import com.jozufozu.flywheel.backend.material.MaterialManager; import com.simibubi.create.content.contraptions.base.KineticTileEntity; import com.simibubi.create.content.contraptions.base.SingleRotatingInstance; 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 9dfd819d0..73ed999ca 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 @@ -3,9 +3,9 @@ package com.simibubi.create.content.contraptions.relays.encased; import java.util.ArrayList; import com.jozufozu.flywheel.backend.instancing.InstanceData; -import com.jozufozu.flywheel.backend.instancing.InstanceMaterial; +import com.jozufozu.flywheel.backend.material.InstanceMaterial; import com.jozufozu.flywheel.backend.instancing.Instancer; -import com.jozufozu.flywheel.backend.instancing.MaterialManager; +import com.jozufozu.flywheel.backend.material.MaterialManager; import com.simibubi.create.AllBlockPartials; import com.simibubi.create.content.contraptions.base.IRotate; import com.simibubi.create.content.contraptions.base.KineticTileInstance; 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 b19d48f37..f38497777 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 @@ -4,8 +4,10 @@ import java.util.ArrayList; import com.jozufozu.flywheel.backend.instancing.IDynamicInstance; import com.jozufozu.flywheel.backend.instancing.Instancer; -import com.jozufozu.flywheel.backend.instancing.MaterialManager; +import com.jozufozu.flywheel.backend.material.MaterialManager; import com.jozufozu.flywheel.core.materials.ModelData; +import com.jozufozu.flywheel.util.transform.MatrixTransformStack; +import com.jozufozu.flywheel.util.transform.TransformStack; import com.mojang.blaze3d.matrix.MatrixStack; import com.simibubi.create.AllBlockPartials; import com.simibubi.create.content.contraptions.base.KineticTileEntity; @@ -13,7 +15,6 @@ import com.simibubi.create.content.contraptions.relays.encased.ShaftInstance; import com.simibubi.create.foundation.utility.AnimationTickHolder; import com.simibubi.create.foundation.utility.Couple; import com.simibubi.create.foundation.utility.Iterate; -import com.simibubi.create.foundation.utility.MatrixStacker; import net.minecraft.util.Direction; import net.minecraft.util.math.MathHelper; @@ -36,7 +37,7 @@ public abstract class GaugeInstance extends ShaftInstance implements IDynamicIns Instancer headModel = getHeadModel(); ms = new MatrixStack(); - MatrixStacker msr = MatrixStacker.of(ms); + MatrixTransformStack msr = MatrixTransformStack.of(ms); msr.translate(getInstancePosition()); float progress = MathHelper.lerp(AnimationTickHolder.getPartialTicks(), gaugeTile.prevDialState, gaugeTile.dialState); @@ -66,7 +67,7 @@ public abstract class GaugeInstance extends ShaftInstance implements IDynamicIns float progress = MathHelper.lerp(AnimationTickHolder.getPartialTicks(), gaugeTile.prevDialState, gaugeTile.dialState); - MatrixStacker msr = MatrixStacker.of(ms); + MatrixTransformStack msr = MatrixTransformStack.of(ms); for (DialFace faceEntry : faces) { faceEntry.updateTransform(msr, progress); @@ -99,7 +100,7 @@ public abstract class GaugeInstance extends ShaftInstance implements IDynamicIns this.face = face; } - private void setupTransform(MatrixStacker msr, float progress) { + private void setupTransform(MatrixTransformStack msr, float progress) { float dialPivot = 5.75f / 16; ms.pushPose(); @@ -116,7 +117,7 @@ public abstract class GaugeInstance extends ShaftInstance implements IDynamicIns ms.popPose(); } - private void updateTransform(MatrixStacker msr, float progress) { + private void updateTransform(MatrixTransformStack msr, float progress) { float dialPivot = 5.75f / 16; ms.pushPose(); @@ -131,7 +132,7 @@ public abstract class GaugeInstance extends ShaftInstance implements IDynamicIns ms.popPose(); } - protected MatrixStacker rotateToFace(MatrixStacker msr) { + protected TransformStack rotateToFace(TransformStack msr) { return msr.centre() .rotate(Direction.UP, (float) ((-face.toYRot() - 90) / 180 * Math.PI)) .unCentre(); 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 35e266927..0b86084aa 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 @@ -4,9 +4,9 @@ import java.util.EnumMap; import java.util.Map; import com.jozufozu.flywheel.backend.instancing.InstanceData; -import com.jozufozu.flywheel.backend.instancing.InstanceMaterial; +import com.jozufozu.flywheel.backend.material.InstanceMaterial; import com.jozufozu.flywheel.backend.instancing.Instancer; -import com.jozufozu.flywheel.backend.instancing.MaterialManager; +import com.jozufozu.flywheel.backend.material.MaterialManager; import com.simibubi.create.AllBlockPartials; import com.simibubi.create.content.contraptions.base.KineticTileInstance; import com.simibubi.create.content.contraptions.base.RotatingData; 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 dda0ab339..ad251f267 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 @@ -1,7 +1,7 @@ package com.simibubi.create.content.curiosities.armor; import com.jozufozu.flywheel.backend.instancing.Instancer; -import com.jozufozu.flywheel.backend.instancing.MaterialManager; +import com.jozufozu.flywheel.backend.material.MaterialManager; import com.simibubi.create.AllBlockPartials; import com.simibubi.create.content.contraptions.base.KineticTileEntity; import com.simibubi.create.content.contraptions.base.RotatingData; diff --git a/src/main/java/com/simibubi/create/content/curiosities/symmetry/mirror/CrossPlaneMirror.java b/src/main/java/com/simibubi/create/content/curiosities/symmetry/mirror/CrossPlaneMirror.java index 22049d6af..d0f058996 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/symmetry/mirror/CrossPlaneMirror.java +++ b/src/main/java/com/simibubi/create/content/curiosities/symmetry/mirror/CrossPlaneMirror.java @@ -6,10 +6,10 @@ import java.util.Map; import com.google.common.collect.ImmutableList; import com.jozufozu.flywheel.core.PartialModel; +import com.jozufozu.flywheel.util.transform.MatrixTransformStack; import com.mojang.blaze3d.matrix.MatrixStack; import com.simibubi.create.AllBlockPartials; import com.simibubi.create.foundation.utility.Lang; -import com.simibubi.create.foundation.utility.MatrixStacker; import net.minecraft.block.BlockState; import net.minecraft.util.IStringSerializable; @@ -94,7 +94,7 @@ public class CrossPlaneMirror extends SymmetryMirror { @Override public void applyModelTransform(MatrixStack ms) { super.applyModelTransform(ms); - MatrixStacker.of(ms) + MatrixTransformStack.of(ms) .centre() .rotateY(((Align) orientation) == Align.Y ? 0 : 45) .unCentre(); diff --git a/src/main/java/com/simibubi/create/content/curiosities/symmetry/mirror/PlaneMirror.java b/src/main/java/com/simibubi/create/content/curiosities/symmetry/mirror/PlaneMirror.java index f87c8ac1a..3c4b476d0 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/symmetry/mirror/PlaneMirror.java +++ b/src/main/java/com/simibubi/create/content/curiosities/symmetry/mirror/PlaneMirror.java @@ -6,10 +6,10 @@ import java.util.Map; import com.google.common.collect.ImmutableList; import com.jozufozu.flywheel.core.PartialModel; +import com.jozufozu.flywheel.util.transform.MatrixTransformStack; import com.mojang.blaze3d.matrix.MatrixStack; import com.simibubi.create.AllBlockPartials; import com.simibubi.create.foundation.utility.Lang; -import com.simibubi.create.foundation.utility.MatrixStacker; import net.minecraft.block.BlockState; import net.minecraft.util.IStringSerializable; @@ -90,7 +90,7 @@ public class PlaneMirror extends SymmetryMirror { @Override public void applyModelTransform(MatrixStack ms) { super.applyModelTransform(ms); - MatrixStacker.of(ms) + MatrixTransformStack.of(ms) .centre() .rotateY(((Align) orientation) == Align.XY ? 0 : 90) .unCentre(); diff --git a/src/main/java/com/simibubi/create/content/curiosities/tools/BlueprintRenderer.java b/src/main/java/com/simibubi/create/content/curiosities/tools/BlueprintRenderer.java index 3055488db..02474015d 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/tools/BlueprintRenderer.java +++ b/src/main/java/com/simibubi/create/content/curiosities/tools/BlueprintRenderer.java @@ -1,13 +1,13 @@ package com.simibubi.create.content.curiosities.tools; import com.jozufozu.flywheel.core.PartialModel; +import com.jozufozu.flywheel.util.transform.MatrixTransformStack; import com.mojang.blaze3d.matrix.MatrixStack; import com.simibubi.create.AllBlockPartials; import com.simibubi.create.content.curiosities.tools.BlueprintEntity.BlueprintSection; import com.simibubi.create.foundation.render.PartialBufferer; import com.simibubi.create.foundation.render.SuperByteBuffer; import com.simibubi.create.foundation.utility.Couple; -import com.simibubi.create.foundation.utility.MatrixStacker; import net.minecraft.block.Blocks; import net.minecraft.client.Minecraft; @@ -60,7 +60,7 @@ public class BlueprintRenderer extends EntityRenderer { } int itemLight = MathHelper.floor(sl + .5) << 20 | (MathHelper.floor(bl + .5) & 0xf) << 4; - MatrixStacker.of(ms) + MatrixTransformStack.of(ms) .rotateY(vertical ? 0 : -yaw) .rotateX(fakeNormalXRotation); Matrix3f copy = ms.last() @@ -70,7 +70,7 @@ public class BlueprintRenderer extends EntityRenderer { ms.popPose(); ms.pushPose(); - MatrixStacker.of(ms) + MatrixTransformStack.of(ms) .rotateY(-yaw) .rotateX(entity.xRot) .translate(0, 0, 1 / 32f + .001); diff --git a/src/main/java/com/simibubi/create/content/curiosities/tools/ExtendoGripItemRenderer.java b/src/main/java/com/simibubi/create/content/curiosities/tools/ExtendoGripItemRenderer.java index 522afa1cf..7c2078bda 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/tools/ExtendoGripItemRenderer.java +++ b/src/main/java/com/simibubi/create/content/curiosities/tools/ExtendoGripItemRenderer.java @@ -1,11 +1,11 @@ package com.simibubi.create.content.curiosities.tools; +import com.jozufozu.flywheel.util.transform.MatrixTransformStack; import com.mojang.blaze3d.matrix.MatrixStack; import com.simibubi.create.AllBlockPartials; import com.simibubi.create.foundation.item.render.CustomRenderedItemModelRenderer; import com.simibubi.create.foundation.item.render.PartialItemModelRenderer; import com.simibubi.create.foundation.utility.AnimationTickHolder; -import com.simibubi.create.foundation.utility.MatrixStacker; import net.minecraft.client.renderer.IRenderTypeBuffer; import net.minecraft.client.renderer.model.ItemCameraTransforms.TransformType; @@ -21,7 +21,7 @@ public class ExtendoGripItemRenderer extends CustomRenderedItemModelRenderer tunnelFlaps = new EnumMap<>(Direction.class); - Instancer model = modelManager.getMaterial(AllMaterialSpecs.FLAPS) + Instancer model = modelManager.defaultSolid() + .material(AllMaterialSpecs.FLAPS) .getModel(AllBlockPartials.BELT_TUNNEL_FLAP, blockState); int blockLight = world.getBrightness(LightType.BLOCK, pos); diff --git a/src/main/java/com/simibubi/create/content/logistics/block/belts/tunnel/BeltTunnelRenderer.java b/src/main/java/com/simibubi/create/content/logistics/block/belts/tunnel/BeltTunnelRenderer.java index a94e15361..bd9f4348b 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/belts/tunnel/BeltTunnelRenderer.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/belts/tunnel/BeltTunnelRenderer.java @@ -1,6 +1,7 @@ package com.simibubi.create.content.logistics.block.belts.tunnel; import com.jozufozu.flywheel.backend.Backend; +import com.jozufozu.flywheel.util.transform.MatrixTransformStack; import com.mojang.blaze3d.matrix.MatrixStack; import com.mojang.blaze3d.vertex.IVertexBuilder; import com.simibubi.create.AllBlockPartials; @@ -9,7 +10,6 @@ import com.simibubi.create.foundation.render.SuperByteBuffer; import com.simibubi.create.foundation.tileEntity.renderer.SmartTileEntityRenderer; import com.simibubi.create.foundation.utility.AngleHelper; import com.simibubi.create.foundation.utility.Iterate; -import com.simibubi.create.foundation.utility.MatrixStacker; import com.simibubi.create.foundation.utility.VecHelper; import net.minecraft.client.renderer.IRenderTypeBuffer; @@ -36,7 +36,7 @@ public class BeltTunnelRenderer extends SmartTileEntityRenderer { int light, int overlay) { ItemRenderer itemRenderer = Minecraft.getInstance() .getItemRenderer(); - MatrixStacker msr = MatrixStacker.of(ms); + MatrixTransformStack msr = MatrixTransformStack.of(ms); ms.pushPose(); msr.centre(); float itemScale = .5f; diff --git a/src/main/java/com/simibubi/create/content/logistics/block/depot/DepotRenderer.java b/src/main/java/com/simibubi/create/content/logistics/block/depot/DepotRenderer.java index c60f2db6f..f22a1f0cb 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/depot/DepotRenderer.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/depot/DepotRenderer.java @@ -2,12 +2,12 @@ package com.simibubi.create.content.logistics.block.depot; import java.util.Random; +import com.jozufozu.flywheel.util.transform.MatrixTransformStack; import com.mojang.blaze3d.matrix.MatrixStack; import com.simibubi.create.content.contraptions.relays.belt.BeltHelper; import com.simibubi.create.content.contraptions.relays.belt.transport.TransportedItemStack; import com.simibubi.create.foundation.tileEntity.SmartTileEntity; import com.simibubi.create.foundation.tileEntity.renderer.SafeTileEntityRenderer; -import com.simibubi.create.foundation.utility.MatrixStacker; import com.simibubi.create.foundation.utility.VecHelper; import net.minecraft.client.Minecraft; @@ -38,7 +38,7 @@ public class DepotRenderer extends SafeTileEntityRenderer { int light, int overlay, DepotBehaviour depotBehaviour) { TransportedItemStack transported = depotBehaviour.heldItem; - MatrixStacker msr = MatrixStacker.of(ms); + MatrixTransformStack msr = MatrixTransformStack.of(ms); Vector3d itemPosition = VecHelper.getCenterOf(te.getBlockPos()); ms.pushPose(); @@ -102,7 +102,7 @@ public class DepotRenderer extends SafeTileEntityRenderer { int angle, Random r, Vector3d itemPosition) { ItemRenderer itemRenderer = Minecraft.getInstance() .getItemRenderer(); - MatrixStacker msr = MatrixStacker.of(ms); + MatrixTransformStack msr = MatrixTransformStack.of(ms); int count = (int) (MathHelper.log2((int) (itemStack.getCount()))) / 2; boolean renderUpright = BeltHelper.isItemUpright(itemStack); boolean blockItem = itemRenderer.getModel(itemStack, null, null) 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 acb51b780..646ed5616 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 @@ -1,13 +1,13 @@ package com.simibubi.create.content.logistics.block.depot; import com.jozufozu.flywheel.backend.instancing.IDynamicInstance; -import com.jozufozu.flywheel.backend.instancing.MaterialManager; +import com.jozufozu.flywheel.backend.material.MaterialManager; import com.jozufozu.flywheel.core.materials.ModelData; +import com.jozufozu.flywheel.util.transform.MatrixTransformStack; import com.mojang.blaze3d.matrix.MatrixStack; import com.simibubi.create.AllBlockPartials; import com.simibubi.create.content.contraptions.relays.encased.ShaftInstance; import com.simibubi.create.foundation.utility.AnimationTickHolder; -import com.simibubi.create.foundation.utility.MatrixStacker; import net.minecraft.util.math.MathHelper; @@ -63,7 +63,7 @@ public class EjectorInstance extends ShaftInstance implements IDynamicInstance { MatrixStack ms = new MatrixStack(); - EjectorRenderer.applyLidAngle(tile, angle, MatrixStacker.of(ms).translate(getInstancePosition())); + EjectorRenderer.applyLidAngle(tile, angle, MatrixTransformStack.of(ms).translate(getInstancePosition())); plate.setTransform(ms); } diff --git a/src/main/java/com/simibubi/create/content/logistics/block/depot/EjectorRenderer.java b/src/main/java/com/simibubi/create/content/logistics/block/depot/EjectorRenderer.java index 79f8e2333..1f3d6a402 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/depot/EjectorRenderer.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/depot/EjectorRenderer.java @@ -1,6 +1,8 @@ package com.simibubi.create.content.logistics.block.depot; import com.jozufozu.flywheel.backend.Backend; +import com.jozufozu.flywheel.util.transform.MatrixTransformStack; +import com.jozufozu.flywheel.util.transform.TransformStack; import com.mojang.blaze3d.matrix.MatrixStack; import com.mojang.blaze3d.vertex.IVertexBuilder; import com.simibubi.create.AllBlockPartials; @@ -10,7 +12,6 @@ import com.simibubi.create.foundation.render.PartialBufferer; import com.simibubi.create.foundation.render.SuperByteBuffer; import com.simibubi.create.foundation.utility.AngleHelper; import com.simibubi.create.foundation.utility.IntAttached; -import com.simibubi.create.foundation.utility.MatrixStacker; import com.simibubi.create.foundation.utility.VecHelper; import net.minecraft.block.BlockState; @@ -52,7 +53,7 @@ public class EjectorRenderer extends KineticTileEntityRenderer { .renderInto(ms, vertexBuilder); } - MatrixStacker msr = MatrixStacker.of(ms); + MatrixTransformStack msr = MatrixTransformStack.of(ms); float maxTime = (float) (ejector.earlyTarget != null ? ejector.earlyTargetTime : ejector.launcher.getTotalFlyingTicks()); @@ -89,11 +90,11 @@ public class EjectorRenderer extends KineticTileEntityRenderer { ms.popPose(); } - static void applyLidAngle(KineticTileEntity te, float angle, MatrixStacker matrixStacker) { + static void applyLidAngle(KineticTileEntity te, float angle, TransformStack matrixStacker) { applyLidAngle(te, pivot, angle, matrixStacker); } - static void applyLidAngle(KineticTileEntity te, Vector3d rotationOffset, float angle, MatrixStacker matrixStacker) { + static void applyLidAngle(KineticTileEntity te, Vector3d rotationOffset, float angle, TransformStack matrixStacker) { matrixStacker.centre() .rotateY(180 + AngleHelper.horizontalAngle(te.getBlockState() .getValue(EjectorBlock.HORIZONTAL_FACING))) diff --git a/src/main/java/com/simibubi/create/content/logistics/block/depot/EjectorTileEntity.java b/src/main/java/com/simibubi/create/content/logistics/block/depot/EjectorTileEntity.java index fc08ef89d..bec57a369 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/depot/EjectorTileEntity.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/depot/EjectorTileEntity.java @@ -6,6 +6,7 @@ import java.util.List; import javax.annotation.Nullable; +import com.jozufozu.flywheel.util.transform.MatrixTransformStack; import com.mojang.blaze3d.matrix.MatrixStack; import com.simibubi.create.AllBlocks; import com.simibubi.create.content.contraptions.base.KineticTileEntity; @@ -21,7 +22,6 @@ import com.simibubi.create.foundation.utility.AngleHelper; import com.simibubi.create.foundation.utility.IntAttached; import com.simibubi.create.foundation.utility.Iterate; import com.simibubi.create.foundation.utility.Lang; -import com.simibubi.create.foundation.utility.MatrixStacker; import com.simibubi.create.foundation.utility.NBTHelper; import com.simibubi.create.foundation.utility.Pair; import com.simibubi.create.foundation.utility.VecHelper; @@ -604,7 +604,7 @@ public class EjectorTileEntity extends KineticTileEntity { @Override protected void rotate(BlockState state, MatrixStack ms) { - MatrixStacker.of(ms) + MatrixTransformStack.of(ms) .rotateY(angle(state)) .rotateX(90); } diff --git a/src/main/java/com/simibubi/create/content/logistics/block/diodes/AdjustableRepeaterInstance.java b/src/main/java/com/simibubi/create/content/logistics/block/diodes/AdjustableRepeaterInstance.java index 4d278d0b5..4bdb50b04 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/diodes/AdjustableRepeaterInstance.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/diodes/AdjustableRepeaterInstance.java @@ -1,13 +1,14 @@ package com.simibubi.create.content.logistics.block.diodes; import com.jozufozu.flywheel.backend.instancing.ITickableInstance; -import com.jozufozu.flywheel.backend.instancing.MaterialManager; +import com.jozufozu.flywheel.backend.material.MaterialManager; import com.jozufozu.flywheel.backend.instancing.tile.TileEntityInstance; +import com.jozufozu.flywheel.core.Materials; import com.jozufozu.flywheel.core.materials.ModelData; +import com.jozufozu.flywheel.util.transform.MatrixTransformStack; import com.mojang.blaze3d.matrix.MatrixStack; import com.simibubi.create.AllBlockPartials; import com.simibubi.create.foundation.utility.ColorHelper; -import com.simibubi.create.foundation.utility.MatrixStacker; public class AdjustableRepeaterInstance extends TileEntityInstance implements ITickableInstance { @@ -18,10 +19,12 @@ public class AdjustableRepeaterInstance extends TileEntityInstance modelManager, AdjustableRepeaterTileEntity tile) { super(modelManager, tile); - indicator = modelManager.getTransformMaterial().getModel(AllBlockPartials.FLEXPEATER_INDICATOR, blockState).createInstance(); + indicator = modelManager.defaultSolid() + .material(Materials.TRANSFORMED) + .getModel(AllBlockPartials.FLEXPEATER_INDICATOR, blockState).createInstance(); MatrixStack ms = new MatrixStack(); - MatrixStacker.of(ms).translate(getInstancePosition()); + MatrixTransformStack.of(ms).translate(getInstancePosition()); indicator .setTransform(ms) diff --git a/src/main/java/com/simibubi/create/content/logistics/block/diodes/AdjustableRepeaterScrollSlot.java b/src/main/java/com/simibubi/create/content/logistics/block/diodes/AdjustableRepeaterScrollSlot.java index 328a7dfe2..5684ab080 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/diodes/AdjustableRepeaterScrollSlot.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/diodes/AdjustableRepeaterScrollSlot.java @@ -1,9 +1,9 @@ package com.simibubi.create.content.logistics.block.diodes; +import com.jozufozu.flywheel.util.transform.MatrixTransformStack; import com.mojang.blaze3d.matrix.MatrixStack; import com.simibubi.create.foundation.tileEntity.behaviour.ValueBoxTransform; import com.simibubi.create.foundation.utility.AngleHelper; -import com.simibubi.create.foundation.utility.MatrixStacker; import com.simibubi.create.foundation.utility.VecHelper; import net.minecraft.block.BlockState; @@ -20,7 +20,7 @@ public class AdjustableRepeaterScrollSlot extends ValueBoxTransform { @Override protected void rotate(BlockState state, MatrixStack ms) { float yRot = AngleHelper.horizontalAngle(state.getValue(BlockStateProperties.HORIZONTAL_FACING)) + 180; - MatrixStacker.of(ms) + MatrixTransformStack.of(ms) .rotateY(yRot) .rotateX(90); } diff --git a/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelFilterSlotPositioning.java b/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelFilterSlotPositioning.java index 39aa90062..f05f96b68 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelFilterSlotPositioning.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelFilterSlotPositioning.java @@ -1,10 +1,10 @@ package com.simibubi.create.content.logistics.block.funnel; +import com.jozufozu.flywheel.util.transform.MatrixTransformStack; import com.mojang.blaze3d.matrix.MatrixStack; import com.simibubi.create.content.logistics.block.funnel.BeltFunnelBlock.Shape; import com.simibubi.create.foundation.tileEntity.behaviour.ValueBoxTransform; import com.simibubi.create.foundation.utility.AngleHelper; -import com.simibubi.create.foundation.utility.MatrixStacker; import com.simibubi.create.foundation.utility.VecHelper; import net.minecraft.block.BlockState; @@ -59,21 +59,21 @@ public class FunnelFilterSlotPositioning extends ValueBoxTransform.Sided { Shape shape = state.getValue(BeltFunnelBlock.SHAPE); super.rotate(state, ms); if (shape == Shape.PULLING || shape == Shape.PUSHING) - MatrixStacker.of(ms) + MatrixTransformStack.of(ms) .rotateX(-22.5f); return; } if (state.getBlock() instanceof FunnelBlock) { super.rotate(state, ms); - MatrixStacker.of(ms) + MatrixTransformStack.of(ms) .rotateX(-22.5f); return; } float yRot = AngleHelper.horizontalAngle(AbstractFunnelBlock.getFunnelFacing(state)) + (facing == Direction.DOWN ? 180 : 0); - MatrixStacker.of(ms) + MatrixTransformStack.of(ms) .rotateY(yRot) .rotateX(facing == Direction.DOWN ? -90 : 90); } diff --git a/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelInstance.java b/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelInstance.java index 170d8e578..fa5f9f03c 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelInstance.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelInstance.java @@ -5,7 +5,7 @@ import java.util.ArrayList; import com.jozufozu.flywheel.backend.instancing.IDynamicInstance; import com.jozufozu.flywheel.backend.instancing.InstanceData; import com.jozufozu.flywheel.backend.instancing.Instancer; -import com.jozufozu.flywheel.backend.instancing.MaterialManager; +import com.jozufozu.flywheel.backend.material.MaterialManager; import com.jozufozu.flywheel.backend.instancing.tile.TileEntityInstance; import com.jozufozu.flywheel.core.PartialModel; import com.simibubi.create.AllBlockPartials; @@ -29,7 +29,8 @@ public class FunnelInstance extends TileEntityInstance impleme PartialModel flapPartial = (blockState.getBlock() instanceof FunnelBlock ? AllBlockPartials.FUNNEL_FLAP : AllBlockPartials.BELT_FUNNEL_FLAP); - Instancer model = modelManager.getMaterial(AllMaterialSpecs.FLAPS) + Instancer model = modelManager.defaultSolid() + .material(AllMaterialSpecs.FLAPS) .getModel(flapPartial, blockState); int blockLight = world.getBrightness(LightType.BLOCK, pos); diff --git a/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelRenderer.java b/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelRenderer.java index a5b1914c6..5a920e52d 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelRenderer.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelRenderer.java @@ -2,6 +2,7 @@ package com.simibubi.create.content.logistics.block.funnel; import com.jozufozu.flywheel.backend.Backend; import com.jozufozu.flywheel.core.PartialModel; +import com.jozufozu.flywheel.util.transform.MatrixTransformStack; import com.mojang.blaze3d.matrix.MatrixStack; import com.mojang.blaze3d.vertex.IVertexBuilder; import com.simibubi.create.AllBlockPartials; @@ -9,7 +10,6 @@ import com.simibubi.create.foundation.render.PartialBufferer; import com.simibubi.create.foundation.render.SuperByteBuffer; import com.simibubi.create.foundation.tileEntity.renderer.SmartTileEntityRenderer; import com.simibubi.create.foundation.utility.AngleHelper; -import com.simibubi.create.foundation.utility.MatrixStacker; import com.simibubi.create.foundation.utility.VecHelper; import net.minecraft.block.BlockState; @@ -39,7 +39,7 @@ public class FunnelRenderer extends SmartTileEntityRenderer { : AllBlockPartials.BELT_FUNNEL_FLAP); SuperByteBuffer flapBuffer = PartialBufferer.get(partialModel, blockState); Vector3d pivot = VecHelper.voxelSpace(0, 10, 9.5f); - MatrixStacker msr = MatrixStacker.of(ms); + MatrixTransformStack msr = MatrixTransformStack.of(ms); float horizontalAngle = AngleHelper.horizontalAngle(FunnelBlock.getFunnelFacing(blockState) .getOpposite()); diff --git a/src/main/java/com/simibubi/create/content/logistics/block/inventories/CreativeCrateTileEntity.java b/src/main/java/com/simibubi/create/content/logistics/block/inventories/CreativeCrateTileEntity.java index 6c4050bc6..472f2815a 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/inventories/CreativeCrateTileEntity.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/inventories/CreativeCrateTileEntity.java @@ -2,12 +2,12 @@ package com.simibubi.create.content.logistics.block.inventories; import java.util.List; +import com.jozufozu.flywheel.util.transform.MatrixTransformStack; import com.mojang.blaze3d.matrix.MatrixStack; import com.simibubi.create.AllBlocks; import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; import com.simibubi.create.foundation.tileEntity.behaviour.ValueBoxTransform; import com.simibubi.create.foundation.tileEntity.behaviour.filtering.FilteringBehaviour; -import com.simibubi.create.foundation.utility.MatrixStacker; import net.minecraft.block.BlockState; import net.minecraft.item.ItemStack; @@ -96,7 +96,7 @@ public class CreativeCrateTileEntity extends CrateTileEntity { @Override protected void rotate(BlockState state, MatrixStack ms) { - MatrixStacker.of(ms) + MatrixTransformStack.of(ms) .rotateX(90); } 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 9bc1d69bd..0c7a15933 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 @@ -5,10 +5,11 @@ import java.util.ArrayList; import com.google.common.collect.Lists; import com.jozufozu.flywheel.backend.instancing.IDynamicInstance; import com.jozufozu.flywheel.backend.instancing.InstanceData; -import com.jozufozu.flywheel.backend.instancing.InstanceMaterial; +import com.jozufozu.flywheel.backend.material.InstanceMaterial; import com.jozufozu.flywheel.backend.instancing.Instancer; -import com.jozufozu.flywheel.backend.instancing.MaterialManager; +import com.jozufozu.flywheel.backend.material.MaterialManager; import com.jozufozu.flywheel.core.materials.ModelData; +import com.jozufozu.flywheel.util.transform.MatrixTransformStack; import com.mojang.blaze3d.matrix.MatrixStack; import com.simibubi.create.AllBlockPartials; import com.simibubi.create.content.contraptions.base.RotatingData; @@ -16,7 +17,6 @@ import com.simibubi.create.content.contraptions.base.SingleRotatingInstance; import com.simibubi.create.foundation.utility.AnimationTickHolder; import com.simibubi.create.foundation.utility.ColorHelper; import com.simibubi.create.foundation.utility.Iterate; -import com.simibubi.create.foundation.utility.MatrixStacker; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.ItemRenderer; @@ -122,7 +122,7 @@ public class ArmInstance extends SingleRotatingInstance implements IDynamicInsta } MatrixStack msLocal = new MatrixStack(); - MatrixStacker msr = MatrixStacker.of(msLocal); + MatrixTransformStack msr = MatrixTransformStack.of(msLocal); msr.translate(getInstancePosition()); msr.centre(); diff --git a/src/main/java/com/simibubi/create/content/logistics/block/mechanicalArm/ArmRenderer.java b/src/main/java/com/simibubi/create/content/logistics/block/mechanicalArm/ArmRenderer.java index 0b3fc6077..9b0f4499a 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/mechanicalArm/ArmRenderer.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/mechanicalArm/ArmRenderer.java @@ -1,6 +1,7 @@ package com.simibubi.create.content.logistics.block.mechanicalArm; import com.jozufozu.flywheel.backend.Backend; +import com.jozufozu.flywheel.util.transform.MatrixTransformStack; import com.mojang.blaze3d.matrix.MatrixStack; import com.mojang.blaze3d.vertex.IVertexBuilder; import com.simibubi.create.AllBlockPartials; @@ -12,7 +13,6 @@ import com.simibubi.create.foundation.render.SuperByteBuffer; import com.simibubi.create.foundation.utility.AnimationTickHolder; import com.simibubi.create.foundation.utility.ColorHelper; import com.simibubi.create.foundation.utility.Iterate; -import com.simibubi.create.foundation.utility.MatrixStacker; import net.minecraft.block.BlockState; import net.minecraft.client.Minecraft; @@ -59,7 +59,7 @@ public class ArmRenderer extends KineticTileEntityRenderer { BlockState blockState = te.getBlockState(); MatrixStack msLocal = new MatrixStack(); - MatrixStacker msr = MatrixStacker.of(msLocal); + MatrixTransformStack msr = MatrixTransformStack.of(msLocal); float baseAngle; float lowerArmAngle; @@ -109,7 +109,7 @@ public class ArmRenderer extends KineticTileEntityRenderer { } - private void renderArm(IVertexBuilder builder, MatrixStack ms, MatrixStack msLocal, MatrixStacker msr, BlockState blockState, int color, float baseAngle, float lowerArmAngle, float upperArmAngle, float headAngle, boolean hasItem, boolean isBlockItem, int light) { + private void renderArm(IVertexBuilder builder, MatrixStack ms, MatrixStack msLocal, MatrixTransformStack msr, BlockState blockState, int color, float baseAngle, float lowerArmAngle, float upperArmAngle, float headAngle, boolean hasItem, boolean isBlockItem, int light) { SuperByteBuffer base = PartialBufferer.get(AllBlockPartials.ARM_BASE, blockState).light(light); SuperByteBuffer lowerBody = PartialBufferer.get(AllBlockPartials.ARM_LOWER_BODY, blockState).light(light); SuperByteBuffer upperBody = PartialBufferer.get(AllBlockPartials.ARM_UPPER_BODY, blockState).light(light); @@ -147,7 +147,7 @@ public class ArmRenderer extends KineticTileEntityRenderer { } } - private void doItemTransforms(MatrixStacker msr, float baseAngle, float lowerArmAngle, float upperArmAngle, float headAngle) { + private void doItemTransforms(MatrixTransformStack msr, float baseAngle, float lowerArmAngle, float upperArmAngle, float headAngle) { transformBase(msr, baseAngle); transformLowerArm(msr, lowerArmAngle); @@ -156,32 +156,32 @@ public class ArmRenderer extends KineticTileEntityRenderer { transformClaw(msr); } - public static void transformClawHalf(MatrixStacker msr, boolean hasItem, boolean isBlockItem, int flip) { + public static void transformClawHalf(MatrixTransformStack msr, boolean hasItem, boolean isBlockItem, int flip) { msr.translate(0, flip * 3 / 16d, -1 / 16d); msr.rotateX(flip * (hasItem ? isBlockItem ? 0 : -35 : 0)); } - public static void transformClaw(MatrixStacker msr) { + public static void transformClaw(MatrixTransformStack msr) { msr.translate(0, 0, -4 / 16d); } - public static void transformHead(MatrixStacker msr, float headAngle) { + public static void transformHead(MatrixTransformStack msr, float headAngle) { msr.translate(0, 11 / 16d, -11 / 16d); msr.rotateX(headAngle); } - public static void transformUpperArm(MatrixStacker msr, float upperArmAngle) { + public static void transformUpperArm(MatrixTransformStack msr, float upperArmAngle) { msr.translate(0, 12 / 16d, 12 / 16d); msr.rotateX(upperArmAngle); } - public static void transformLowerArm(MatrixStacker msr, float lowerArmAngle) { + public static void transformLowerArm(MatrixTransformStack msr, float lowerArmAngle) { msr.translate(0, 1 / 16d, -2 / 16d); msr.rotateX(lowerArmAngle); msr.translate(0, -1 / 16d, 0); } - public static void transformBase(MatrixStacker msr, float baseAngle) { + public static void transformBase(MatrixTransformStack msr, float baseAngle) { msr.translate(0, 4 / 16d, 0); msr.rotateY(baseAngle); } 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 de1f07271..be55ba627 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 @@ -1,16 +1,16 @@ package com.simibubi.create.content.logistics.block.redstone; import com.jozufozu.flywheel.backend.instancing.IDynamicInstance; -import com.jozufozu.flywheel.backend.instancing.InstanceMaterial; -import com.jozufozu.flywheel.backend.instancing.MaterialManager; +import com.jozufozu.flywheel.backend.material.InstanceMaterial; +import com.jozufozu.flywheel.backend.material.MaterialManager; import com.jozufozu.flywheel.backend.instancing.tile.TileEntityInstance; import com.jozufozu.flywheel.core.materials.ModelData; +import com.jozufozu.flywheel.util.transform.MatrixTransformStack; import com.mojang.blaze3d.matrix.MatrixStack; import com.simibubi.create.AllBlockPartials; import com.simibubi.create.foundation.utility.AngleHelper; import com.simibubi.create.foundation.utility.AnimationTickHolder; import com.simibubi.create.foundation.utility.ColorHelper; -import com.simibubi.create.foundation.utility.MatrixStacker; import net.minecraft.state.properties.AttachFace; import net.minecraft.util.Direction; @@ -46,7 +46,7 @@ public class AnalogLeverInstance extends TileEntityInstance { ms.pushPose(); - MatrixStacker.of(ms) + MatrixTransformStack.of(ms) .translate(localPos); BlockPos pos = localPos.offset(anchor); BlockState state = blockAccess.getBlockState(pos); diff --git a/src/main/java/com/simibubi/create/content/schematics/client/SchematicTransformation.java b/src/main/java/com/simibubi/create/content/schematics/client/SchematicTransformation.java index 97f496ecd..2b6db0cf1 100644 --- a/src/main/java/com/simibubi/create/content/schematics/client/SchematicTransformation.java +++ b/src/main/java/com/simibubi/create/content/schematics/client/SchematicTransformation.java @@ -2,11 +2,11 @@ package com.simibubi.create.content.schematics.client; import static java.lang.Math.abs; +import com.jozufozu.flywheel.util.transform.MatrixTransformStack; import com.mojang.blaze3d.matrix.MatrixStack; import com.simibubi.create.foundation.gui.widgets.InterpolatedChasingAngle; import com.simibubi.create.foundation.gui.widgets.InterpolatedChasingValue; import com.simibubi.create.foundation.utility.AnimationTickHolder; -import com.simibubi.create.foundation.utility.MatrixStacker; import com.simibubi.create.foundation.utility.VecHelper; import net.minecraft.util.Direction.Axis; @@ -63,7 +63,7 @@ public class SchematicTransformation { float lr = getScaleLR().get(pt); float rot = rotation.get(pt) + ((fb < 0 && lr < 0) ? 180 : 0); ms.translate(xOrigin, 0, zOrigin); - MatrixStacker.of(ms) + MatrixTransformStack.of(ms) .translate(rotationOffset) .rotateY(rot) .translateBack(rotationOffset); diff --git a/src/main/java/com/simibubi/create/content/schematics/client/tools/DeployTool.java b/src/main/java/com/simibubi/create/content/schematics/client/tools/DeployTool.java index ab108da12..b04dba764 100644 --- a/src/main/java/com/simibubi/create/content/schematics/client/tools/DeployTool.java +++ b/src/main/java/com/simibubi/create/content/schematics/client/tools/DeployTool.java @@ -1,11 +1,11 @@ package com.simibubi.create.content.schematics.client.tools; +import com.jozufozu.flywheel.util.transform.MatrixTransformStack; import com.mojang.blaze3d.matrix.MatrixStack; import com.simibubi.create.AllKeys; import com.simibubi.create.content.schematics.client.SchematicTransformation; import com.simibubi.create.foundation.renderState.SuperRenderTypeBuffer; import com.simibubi.create.foundation.utility.AnimationTickHolder; -import com.simibubi.create.foundation.utility.MatrixStacker; import com.simibubi.create.foundation.utility.outliner.AABBOutline; import net.minecraft.item.ItemStack; @@ -59,7 +59,7 @@ public class DeployTool extends PlacementToolBase { Vector3d origin = new Vector3d(xOrigin, 0, zOrigin); ms.translate(x - centerX, y, z - centerZ); - MatrixStacker.of(ms) + MatrixTransformStack.of(ms) .translate(origin) .translate(rotationOffset) .rotateY(transformation.getCurrentRotation()) diff --git a/src/main/java/com/simibubi/create/foundation/fluid/FluidRenderer.java b/src/main/java/com/simibubi/create/foundation/fluid/FluidRenderer.java index 3415ddf52..ec7bdbe82 100644 --- a/src/main/java/com/simibubi/create/foundation/fluid/FluidRenderer.java +++ b/src/main/java/com/simibubi/create/foundation/fluid/FluidRenderer.java @@ -2,6 +2,7 @@ package com.simibubi.create.foundation.fluid; import java.util.function.Function; +import com.jozufozu.flywheel.util.transform.MatrixTransformStack; import com.mojang.blaze3d.matrix.MatrixStack; import com.mojang.blaze3d.matrix.MatrixStack.Entry; import com.mojang.blaze3d.vertex.IVertexBuilder; @@ -9,7 +10,6 @@ import com.simibubi.create.foundation.renderState.RenderTypes; import com.simibubi.create.foundation.utility.AngleHelper; import com.simibubi.create.foundation.utility.ColorHelper; import com.simibubi.create.foundation.utility.Iterate; -import com.simibubi.create.foundation.utility.MatrixStacker; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.IRenderTypeBuffer; @@ -58,7 +58,7 @@ public class FluidRenderer { if (inbound) direction = direction.getOpposite(); - MatrixStacker msr = MatrixStacker.of(ms); + MatrixTransformStack msr = MatrixTransformStack.of(ms); ms.pushPose(); msr.centre() .rotateY(AngleHelper.horizontalAngle(direction)) @@ -107,12 +107,12 @@ public class FluidRenderer { light = (light & 0xF00000) | luminosity << 4; Vector3d center = new Vector3d(xMin + (xMax - xMin) / 2, yMin + (yMax - yMin) / 2, zMin + (zMax - zMin) / 2); - MatrixStacker msr = MatrixStacker.of(ms); + MatrixTransformStack msr = MatrixTransformStack.of(ms); ms.pushPose(); if (fluidStack.getFluid() .getAttributes() .isLighterThanAir()) - MatrixStacker.of(ms) + MatrixTransformStack.of(ms) .translate(center) .rotateX(180) .translateBack(center); diff --git a/src/main/java/com/simibubi/create/foundation/gui/mainMenu/CreateMainMenuScreen.java b/src/main/java/com/simibubi/create/foundation/gui/mainMenu/CreateMainMenuScreen.java index 912409cd9..3eed04d2d 100644 --- a/src/main/java/com/simibubi/create/foundation/gui/mainMenu/CreateMainMenuScreen.java +++ b/src/main/java/com/simibubi/create/foundation/gui/mainMenu/CreateMainMenuScreen.java @@ -2,6 +2,7 @@ package com.simibubi.create.foundation.gui.mainMenu; import java.awt.Color; +import com.jozufozu.flywheel.util.transform.MatrixTransformStack; import com.mojang.blaze3d.matrix.MatrixStack; import com.mojang.blaze3d.platform.GlStateManager; import com.mojang.blaze3d.systems.RenderSystem; @@ -17,7 +18,6 @@ import com.simibubi.create.foundation.item.TooltipHelper; import com.simibubi.create.foundation.ponder.content.PonderTagIndexScreen; import com.simibubi.create.foundation.utility.Iterate; import com.simibubi.create.foundation.utility.Lang; -import com.simibubi.create.foundation.utility.MatrixStacker; import net.minecraft.client.gui.screen.ConfirmOpenLinkScreen; import net.minecraft.client.gui.screen.MainMenuScreen; @@ -87,7 +87,7 @@ public class CreateMainMenuScreen extends AbstractSimiScreen { ms.translate(width / 2, 60, 200); ms.scale(24 * side, 24 * side, 32); ms.translate(-1.75 * ((alpha * alpha) / 2f + .5f), .25f, 0); - MatrixStacker.of(ms) + MatrixTransformStack.of(ms) .rotateX(45); GuiGameElement.of(AllBlocks.LARGE_COGWHEEL.getDefaultState()) .rotateBlock(0, Util.getMillis() / 32f * side, 0) diff --git a/src/main/java/com/simibubi/create/foundation/ponder/PonderScene.java b/src/main/java/com/simibubi/create/foundation/ponder/PonderScene.java index c5bbdacef..0befcd501 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/PonderScene.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/PonderScene.java @@ -16,6 +16,7 @@ import java.util.function.Supplier; import org.apache.commons.lang3.mutable.MutableDouble; import org.apache.commons.lang3.mutable.MutableObject; +import com.jozufozu.flywheel.util.transform.MatrixTransformStack; import com.mojang.blaze3d.matrix.MatrixStack; import com.simibubi.create.foundation.ponder.content.PonderIndex; import com.simibubi.create.foundation.ponder.content.PonderTag; @@ -25,7 +26,6 @@ import com.simibubi.create.foundation.ponder.elements.WorldSectionElement; import com.simibubi.create.foundation.ponder.instructions.HideAllInstruction; import com.simibubi.create.foundation.renderState.SuperRenderTypeBuffer; import com.simibubi.create.foundation.utility.AnimationTickHolder; -import com.simibubi.create.foundation.utility.MatrixStacker; import com.simibubi.create.foundation.utility.Pair; import com.simibubi.create.foundation.utility.VecHelper; import com.simibubi.create.foundation.utility.animation.LerpedFloat; @@ -235,7 +235,7 @@ public class PonderScene { for (RenderType type : RenderType.chunkBufferLayers()) forEachVisible(PonderSceneElement.class, e -> e.renderLayer(world, buffer, type, ms, pt)); - + forEachVisible(PonderSceneElement.class, e -> e.renderLast(world, buffer, ms, pt)); info.set(transform.xRotation.getValue(pt) + 90, transform.yRotation.getValue(pt) + 180); world.renderEntities(ms, buffer, info, pt); @@ -453,14 +453,14 @@ public class PonderScene { public MatrixStack apply(MatrixStack ms, float pt, boolean overlayCompatible) { ms.translate(width / 2, height / 2, 200 + offset); - MatrixStacker.of(ms) + MatrixTransformStack.of(ms) .rotateX(-35) .rotateY(55); ms.translate(offset, 0, 0); - MatrixStacker.of(ms) + MatrixTransformStack.of(ms) .rotateY(-55) .rotateX(35); - MatrixStacker.of(ms) + MatrixTransformStack.of(ms) .rotateX(xRotation.getValue(pt)) .rotateY(yRotation.getValue(pt)); diff --git a/src/main/java/com/simibubi/create/foundation/ponder/elements/AnimatedSceneElement.java b/src/main/java/com/simibubi/create/foundation/ponder/elements/AnimatedSceneElement.java index 985685916..3adc64113 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/elements/AnimatedSceneElement.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/elements/AnimatedSceneElement.java @@ -1,8 +1,8 @@ package com.simibubi.create.foundation.ponder.elements; +import com.jozufozu.flywheel.util.transform.MatrixTransformStack; import com.mojang.blaze3d.matrix.MatrixStack; import com.simibubi.create.foundation.ponder.PonderWorld; -import com.simibubi.create.foundation.utility.MatrixStacker; import com.simibubi.create.foundation.utility.animation.LerpedFloat; import net.minecraft.client.renderer.IRenderTypeBuffer; @@ -60,7 +60,7 @@ public abstract class AnimatedSceneElement extends PonderSceneElement { protected float applyFade(MatrixStack ms, float pt) { float currentFade = fade.getValue(pt); if (fadeVec != null) - MatrixStacker.of(ms) + MatrixTransformStack.of(ms) .translate(fadeVec.scale(-1 + currentFade)); return currentFade; } diff --git a/src/main/java/com/simibubi/create/foundation/ponder/elements/MinecartElement.java b/src/main/java/com/simibubi/create/foundation/ponder/elements/MinecartElement.java index 462686f94..d088ba165 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/elements/MinecartElement.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/elements/MinecartElement.java @@ -1,9 +1,9 @@ package com.simibubi.create.foundation.ponder.elements; +import com.jozufozu.flywheel.util.transform.MatrixTransformStack; import com.mojang.blaze3d.matrix.MatrixStack; import com.simibubi.create.foundation.ponder.PonderScene; import com.simibubi.create.foundation.ponder.PonderWorld; -import com.simibubi.create.foundation.utility.MatrixStacker; import com.simibubi.create.foundation.utility.animation.LerpedFloat; import net.minecraft.client.Minecraft; @@ -103,7 +103,7 @@ public class MinecartElement extends AnimatedSceneElement { ms.translate(MathHelper.lerp(pt, entity.xo, entity.getX()), MathHelper.lerp(pt, entity.yo, entity.getY()), MathHelper.lerp(pt, entity.zo, entity.getZ())); - MatrixStacker.of(ms) + MatrixTransformStack.of(ms) .rotateY(rotation.getValue(pt)); entityrenderermanager.render(entity, 0, 0, 0, 0, pt, ms, buffer, lightCoordsFromFade(fade)); diff --git a/src/main/java/com/simibubi/create/foundation/ponder/elements/ParrotElement.java b/src/main/java/com/simibubi/create/foundation/ponder/elements/ParrotElement.java index 8c9d88aa4..9b07cc2ec 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/elements/ParrotElement.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/elements/ParrotElement.java @@ -2,6 +2,7 @@ package com.simibubi.create.foundation.ponder.elements; import java.util.function.Supplier; +import com.jozufozu.flywheel.util.transform.MatrixTransformStack; import com.mojang.blaze3d.matrix.MatrixStack; import com.simibubi.create.Create; import com.simibubi.create.content.contraptions.base.KineticTileEntity; @@ -9,7 +10,6 @@ import com.simibubi.create.foundation.ponder.PonderScene; import com.simibubi.create.foundation.ponder.PonderUI; import com.simibubi.create.foundation.ponder.PonderWorld; import com.simibubi.create.foundation.utility.AngleHelper; -import com.simibubi.create.foundation.utility.MatrixStacker; import net.minecraft.client.MainWindow; import net.minecraft.client.Minecraft; @@ -126,7 +126,7 @@ public class ParrotElement extends AnimatedSceneElement { ms.translate(MathHelper.lerp(pt, entity.xo, entity.getX()), MathHelper.lerp(pt, entity.yo, entity.getY()), MathHelper.lerp(pt, entity.zo, entity.getZ())); - MatrixStacker.of(ms) + MatrixTransformStack.of(ms) .rotateY(AngleHelper.angleLerp(pt, entity.yRotO, entity.yRot)); entityrenderermanager.render(entity, 0, 0, 0, 0, pt, ms, buffer, lightCoordsFromFade(fade)); diff --git a/src/main/java/com/simibubi/create/foundation/ponder/elements/WorldSectionElement.java b/src/main/java/com/simibubi/create/foundation/ponder/elements/WorldSectionElement.java index f9d0c02e7..d8c05fbdf 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/elements/WorldSectionElement.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/elements/WorldSectionElement.java @@ -8,6 +8,7 @@ import java.util.Random; import org.lwjgl.opengl.GL11; +import com.jozufozu.flywheel.util.transform.MatrixTransformStack; import com.mojang.blaze3d.matrix.MatrixStack; import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.IVertexBuilder; @@ -21,7 +22,6 @@ import com.simibubi.create.foundation.render.SuperByteBuffer; import com.simibubi.create.foundation.render.SuperByteBufferCache; import com.simibubi.create.foundation.render.TileEntityRenderHelper; import com.simibubi.create.foundation.utility.AnimationTickHolder; -import com.simibubi.create.foundation.utility.MatrixStacker; import com.simibubi.create.foundation.utility.Pair; import com.simibubi.create.foundation.utility.VecHelper; @@ -224,7 +224,7 @@ public class WorldSectionElement extends AnimatedSceneElement { } public void transformMS(MatrixStack ms, float pt) { - MatrixStacker.of(ms) + MatrixTransformStack.of(ms) .translate(VecHelper.lerp(pt, prevAnimatedOffset, animatedOffset)); if (!animatedRotation.equals(Vector3d.ZERO) || !prevAnimatedRotation.equals(Vector3d.ZERO)) { if (centerOfRotation == null) @@ -232,14 +232,14 @@ public class WorldSectionElement extends AnimatedSceneElement { double rotX = MathHelper.lerp(pt, prevAnimatedRotation.x, animatedRotation.x); double rotZ = MathHelper.lerp(pt, prevAnimatedRotation.z, animatedRotation.z); double rotY = MathHelper.lerp(pt, prevAnimatedRotation.y, animatedRotation.y); - MatrixStacker.of(ms) + MatrixTransformStack.of(ms) .translate(centerOfRotation) .rotateX(rotX) .rotateZ(rotZ) .rotateY(rotY) .translateBack(centerOfRotation); if (stabilizationAnchor != null) { - MatrixStacker.of(ms) + MatrixTransformStack.of(ms) .translate(stabilizationAnchor) .rotateX(-rotX) .rotateZ(-rotZ) diff --git a/src/main/java/com/simibubi/create/foundation/render/AllMaterialSpecs.java b/src/main/java/com/simibubi/create/foundation/render/AllMaterialSpecs.java index 0bf3868a0..82e1a5928 100644 --- a/src/main/java/com/simibubi/create/foundation/render/AllMaterialSpecs.java +++ b/src/main/java/com/simibubi/create/foundation/render/AllMaterialSpecs.java @@ -1,6 +1,6 @@ package com.simibubi.create.foundation.render; -import com.jozufozu.flywheel.backend.instancing.MaterialSpec; +import com.jozufozu.flywheel.backend.material.MaterialSpec; import com.jozufozu.flywheel.core.Formats; import com.jozufozu.flywheel.event.GatherContextEvent; import com.simibubi.create.Create; diff --git a/src/main/java/com/simibubi/create/foundation/render/PartialBufferer.java b/src/main/java/com/simibubi/create/foundation/render/PartialBufferer.java index 6e724722c..9c5c4d59d 100644 --- a/src/main/java/com/simibubi/create/foundation/render/PartialBufferer.java +++ b/src/main/java/com/simibubi/create/foundation/render/PartialBufferer.java @@ -5,10 +5,10 @@ import static net.minecraft.state.properties.BlockStateProperties.FACING; import java.util.function.Supplier; import com.jozufozu.flywheel.core.PartialModel; +import com.jozufozu.flywheel.util.transform.MatrixTransformStack; import com.mojang.blaze3d.matrix.MatrixStack; import com.simibubi.create.CreateClient; import com.simibubi.create.foundation.utility.AngleHelper; -import com.simibubi.create.foundation.utility.MatrixStacker; import net.minecraft.block.BlockState; import net.minecraft.util.Direction; @@ -31,7 +31,7 @@ public class PartialBufferer { public static Supplier rotateToFace(Direction facing) { return () -> { MatrixStack stack = new MatrixStack(); - MatrixStacker.of(stack) + MatrixTransformStack.of(stack) .centre() .rotateY(AngleHelper.horizontalAngle(facing)) .rotateX(AngleHelper.verticalAngle(facing)) diff --git a/src/main/java/com/simibubi/create/foundation/render/SuperByteBuffer.java b/src/main/java/com/simibubi/create/foundation/render/SuperByteBuffer.java index 2e0b21da8..dd19089b4 100644 --- a/src/main/java/com/simibubi/create/foundation/render/SuperByteBuffer.java +++ b/src/main/java/com/simibubi/create/foundation/render/SuperByteBuffer.java @@ -1,10 +1,10 @@ package com.simibubi.create.foundation.render; import com.jozufozu.flywheel.util.BufferBuilderReader; +import com.jozufozu.flywheel.util.transform.MatrixTransformStack; import com.mojang.blaze3d.matrix.MatrixStack; import com.mojang.blaze3d.vertex.IVertexBuilder; import com.simibubi.create.foundation.block.render.SpriteShiftEntry; -import com.simibubi.create.foundation.utility.MatrixStacker; import it.unimi.dsi.fastutil.longs.Long2IntMap; import it.unimi.dsi.fastutil.longs.Long2IntOpenHashMap; @@ -61,10 +61,12 @@ public class SuperByteBuffer { private final Vector4f pos = new Vector4f(); private final Vector3f normal = new Vector3f(); private final Vector4f lightPos = new Vector4f(); + private final MatrixTransformStack stacker; public SuperByteBuffer(BufferBuilder buf) { template = new BufferBuilderReader(buf); transforms = new MatrixStack(); + stacker = MatrixTransformStack.of(transforms); } public static float getUnInterpolatedU(TextureAtlasSprite sprite, float u) { @@ -221,8 +223,8 @@ public class SuperByteBuffer { return this; } - public MatrixStacker matrixStacker() { - return MatrixStacker.of(transforms); + public MatrixTransformStack matrixStacker() { + return stacker; } public SuperByteBuffer translate(Vector3d vec) { diff --git a/src/main/java/com/simibubi/create/foundation/render/TileEntityRenderHelper.java b/src/main/java/com/simibubi/create/foundation/render/TileEntityRenderHelper.java index bbafddf47..f0d640691 100644 --- a/src/main/java/com/simibubi/create/foundation/render/TileEntityRenderHelper.java +++ b/src/main/java/com/simibubi/create/foundation/render/TileEntityRenderHelper.java @@ -4,11 +4,11 @@ import java.util.Iterator; import javax.annotation.Nullable; +import com.jozufozu.flywheel.util.transform.MatrixTransformStack; import com.mojang.blaze3d.matrix.MatrixStack; import com.simibubi.create.Create; import com.simibubi.create.foundation.config.AllConfigs; import com.simibubi.create.foundation.utility.AnimationTickHolder; -import com.simibubi.create.foundation.utility.MatrixStacker; import com.simibubi.create.foundation.utility.worldWrappers.PlacementSimulationWorld; import net.minecraft.client.renderer.IRenderTypeBuffer; @@ -56,7 +56,7 @@ public class TileEntityRenderHelper { BlockPos pos = tileEntity.getBlockPos(); ms.pushPose(); - MatrixStacker.of(ms) + MatrixTransformStack.of(ms) .translate(pos); try { diff --git a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/ValueBoxTransform.java b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/ValueBoxTransform.java index 2ffaea5d6..d701a8ae7 100644 --- a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/ValueBoxTransform.java +++ b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/ValueBoxTransform.java @@ -4,9 +4,9 @@ import java.util.function.Function; import org.apache.commons.lang3.tuple.Pair; +import com.jozufozu.flywheel.util.transform.MatrixTransformStack; import com.mojang.blaze3d.matrix.MatrixStack; import com.simibubi.create.foundation.utility.AngleHelper; -import com.simibubi.create.foundation.utility.MatrixStacker; import com.simibubi.create.foundation.utility.VecHelper; import net.minecraft.block.BlockState; @@ -109,7 +109,7 @@ public abstract class ValueBoxTransform { protected void rotate(BlockState state, MatrixStack ms) { float yRot = AngleHelper.horizontalAngle(getSide()) + 180; float xRot = getSide() == Direction.UP ? 90 : getSide() == Direction.DOWN ? 270 : 0; - MatrixStacker.of(ms) + MatrixTransformStack.of(ms) .rotateY(yRot) .rotateX(xRot); } diff --git a/src/main/java/com/simibubi/create/foundation/utility/MatrixStacker.java b/src/main/java/com/simibubi/create/foundation/utility/MatrixStacker.java deleted file mode 100644 index 009e20420..000000000 --- a/src/main/java/com/simibubi/create/foundation/utility/MatrixStacker.java +++ /dev/null @@ -1,128 +0,0 @@ -package com.simibubi.create.foundation.utility; - -import com.mojang.blaze3d.matrix.MatrixStack; - -import net.minecraft.util.Direction; -import net.minecraft.util.Direction.Axis; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.vector.Quaternion; -import net.minecraft.util.math.vector.Vector3d; -import net.minecraft.util.math.vector.Vector3f; -import net.minecraft.util.math.vector.Vector3i; - -public class MatrixStacker { - - public static final Vector3d center = VecHelper.getCenterOf(BlockPos.ZERO); - static MatrixStacker instance; - - MatrixStack ms; - - public static MatrixStacker of(MatrixStack ms) { - if (instance == null) - instance = new MatrixStacker(); - instance.ms = ms; - return instance; - } - - public MatrixStacker restoreIdentity() { - MatrixStack.Entry entry = ms.last(); - - entry.pose() - .setIdentity(); - entry.normal() - .setIdentity(); - - return this; - } - - public MatrixStacker rotate(Direction axis, float radians) { - if (radians == 0) - return this; - ms.mulPose(axis.step() - .rotation(radians)); - return this; - } - - public MatrixStacker rotate(double angle, Axis axis) { - Vector3f vec = - axis == Axis.X ? Vector3f.XP : axis == Axis.Y ? Vector3f.YP : Vector3f.ZP; - return multiply(vec, angle); - } - - public MatrixStacker rotateX(double angle) { - return multiply(Vector3f.XP, angle); - } - - public MatrixStacker rotateY(double angle) { - return multiply(Vector3f.YP, angle); - } - - public MatrixStacker rotateZ(double angle) { - return multiply(Vector3f.ZP, angle); - } - - public MatrixStacker centre() { - return translate(center); - } - - public MatrixStacker unCentre() { - return translateBack(center); - } - - public MatrixStacker translate(Vector3i vec) { - ms.translate(vec.getX(), vec.getY(), vec.getZ()); - return this; - } - - public MatrixStacker translate(Vector3d vec) { - ms.translate(vec.x, vec.y, vec.z); - return this; - } - - public MatrixStacker translateBack(Vector3d vec) { - ms.translate(-vec.x, -vec.y, -vec.z); - return this; - } - - public MatrixStacker translate(double x, double y, double z) { - ms.translate(x, y, z); - return this; - } - - public MatrixStacker multiply(Quaternion quaternion) { - ms.mulPose(quaternion); - return this; - } - - public MatrixStacker nudge(int id) { - long randomBits = (long) id * 31L * 493286711L; - randomBits = randomBits * randomBits * 4392167121L + randomBits * 98761L; - float xNudge = (((float) (randomBits >> 16 & 7L) + 0.5F) / 8.0F - 0.5F) * 0.004F; - float yNudge = (((float) (randomBits >> 20 & 7L) + 0.5F) / 8.0F - 0.5F) * 0.004F; - float zNudge = (((float) (randomBits >> 24 & 7L) + 0.5F) / 8.0F - 0.5F) * 0.004F; - ms.translate(xNudge, yNudge, zNudge); - return this; - } - - public MatrixStacker multiply(Vector3f axis, double angle) { - if (angle == 0) - return this; - ms.mulPose(axis.rotationDegrees((float) angle)); - return this; - } - - public MatrixStacker push() { - ms.pushPose(); - return this; - } - - public MatrixStacker pop() { - ms.popPose(); - return this; - } - - public MatrixStack unwrap() { - return ms; - } - -} diff --git a/src/main/java/com/simibubi/create/foundation/utility/outliner/Outline.java b/src/main/java/com/simibubi/create/foundation/utility/outliner/Outline.java index 009f1b7e3..08cff21bb 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/outliner/Outline.java +++ b/src/main/java/com/simibubi/create/foundation/utility/outliner/Outline.java @@ -4,6 +4,7 @@ import java.util.Optional; import javax.annotation.Nullable; +import com.jozufozu.flywheel.util.transform.MatrixTransformStack; import com.mojang.blaze3d.matrix.MatrixStack; import com.mojang.blaze3d.matrix.MatrixStack.Entry; import com.mojang.blaze3d.vertex.IVertexBuilder; @@ -12,7 +13,6 @@ import com.simibubi.create.foundation.renderState.RenderTypes; import com.simibubi.create.foundation.renderState.SuperRenderTypeBuffer; import com.simibubi.create.foundation.utility.AngleHelper; import com.simibubi.create.foundation.utility.ColorHelper; -import com.simibubi.create.foundation.utility.MatrixStacker; import com.simibubi.create.foundation.utility.VecHelper; import net.minecraft.client.renderer.texture.OverlayTexture; @@ -40,7 +40,7 @@ public abstract class Outline { .length(); float vAngle = AngleHelper.deg(MathHelper.atan2(hDistance, diff.y)) - 90; ms.pushPose(); - MatrixStacker.of(ms) + MatrixTransformStack.of(ms) .translate(start) .rotateY(hAngle).rotateX(vAngle); renderAACuboidLine(ms, buffer, Vector3d.ZERO, new Vector3d(0, 0, diff.length())); From 64e822626e26175f359721799b4335307c5aee17 Mon Sep 17 00:00:00 2001 From: garyantonyo Date: Thu, 22 Jul 2021 11:12:21 -0400 Subject: [PATCH 105/118] update PotatoCannonItem damage description to reflect changes to PotatoProjectileEntity --- .../content/curiosities/weapons/PotatoCannonItem.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoCannonItem.java b/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoCannonItem.java index 6e2b6c9e8..7c7db65a1 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoCannonItem.java +++ b/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoCannonItem.java @@ -161,7 +161,7 @@ public class PotatoCannonItem extends ShootableItem { Vector3d sprayOffset = VecHelper.rotate(sprayBase, i * sprayChange + imperfection, Axis.Z); splitMotion = splitMotion.add(VecHelper.lookAt(sprayOffset, motion)); } - + if (i != 0) projectile.recoveryChance = 0; @@ -226,9 +226,9 @@ public class PotatoCannonItem extends ShootableItem { public void appendHoverText(ItemStack stack, World world, List tooltip, ITooltipFlag flag) { int power = EnchantmentHelper.getItemEnchantmentLevel(Enchantments.POWER_ARROWS, stack); int punch = EnchantmentHelper.getItemEnchantmentLevel(Enchantments.PUNCH_ARROWS, stack); - final float additionalDamage = power * 2; + final float additionalDamageMult = 1 + power * .2f; final float additionalKnockback = punch * .5f; - + getAmmoforPreview(stack).ifPresent(ammo -> { String _attack = "potato_cannon.ammo.attack_damage"; String _reload = "potato_cannon.ammo.reload_ticks"; @@ -243,14 +243,14 @@ public class PotatoCannonItem extends ShootableItem { TextFormatting green = TextFormatting.GREEN; TextFormatting darkGreen = TextFormatting.DARK_GREEN; - float damageF = type.getDamage() + additionalDamage; + float damageF = type.getDamage() * additionalDamageMult; IFormattableTextComponent damage = new StringTextComponent( damageF == MathHelper.floor(damageF) ? "" + MathHelper.floor(damageF) : "" + damageF); IFormattableTextComponent reloadTicks = new StringTextComponent("" + type.getReloadTicks()); IFormattableTextComponent knockback = new StringTextComponent("" + (type.getKnockback() + additionalKnockback)); - damage = damage.withStyle(additionalDamage > 0 ? green : darkGreen); + damage = damage.withStyle(additionalDamageMult > 1 ? green : darkGreen); knockback = knockback.withStyle(additionalKnockback > 0 ? green : darkGreen); reloadTicks = reloadTicks.withStyle(darkGreen); From 35778640ba2c99808db3dcdcd201f6edf5f305cb Mon Sep 17 00:00:00 2001 From: garyantonyo Date: Thu, 22 Jul 2021 11:16:44 -0400 Subject: [PATCH 106/118] Flooring is always done on damage calculation, so add it to the description tooltip too? --- .../create/content/curiosities/weapons/PotatoCannonItem.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoCannonItem.java b/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoCannonItem.java index 7c7db65a1..85e2fd6a6 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoCannonItem.java +++ b/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoCannonItem.java @@ -244,8 +244,7 @@ public class PotatoCannonItem extends ShootableItem { TextFormatting darkGreen = TextFormatting.DARK_GREEN; float damageF = type.getDamage() * additionalDamageMult; - IFormattableTextComponent damage = new StringTextComponent( - damageF == MathHelper.floor(damageF) ? "" + MathHelper.floor(damageF) : "" + damageF); + IFormattableTextComponent damage = new StringTextComponent("" + MathHelper.floor(damageF)); IFormattableTextComponent reloadTicks = new StringTextComponent("" + type.getReloadTicks()); IFormattableTextComponent knockback = new StringTextComponent("" + (type.getKnockback() + additionalKnockback)); From 2ded6bd2fac14909a1f914a584581b7f660606bf Mon Sep 17 00:00:00 2001 From: garyantonyo Date: Thu, 22 Jul 2021 11:20:49 -0400 Subject: [PATCH 107/118] Remove flooring of damage as it no longer is useful with the new damage calculation --- .../create/content/curiosities/weapons/PotatoCannonItem.java | 3 ++- .../content/curiosities/weapons/PotatoProjectileEntity.java | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoCannonItem.java b/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoCannonItem.java index 85e2fd6a6..7c7db65a1 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoCannonItem.java +++ b/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoCannonItem.java @@ -244,7 +244,8 @@ public class PotatoCannonItem extends ShootableItem { TextFormatting darkGreen = TextFormatting.DARK_GREEN; float damageF = type.getDamage() * additionalDamageMult; - IFormattableTextComponent damage = new StringTextComponent("" + MathHelper.floor(damageF)); + IFormattableTextComponent damage = new StringTextComponent( + damageF == MathHelper.floor(damageF) ? "" + MathHelper.floor(damageF) : "" + damageF); IFormattableTextComponent reloadTicks = new StringTextComponent("" + type.getReloadTicks()); IFormattableTextComponent knockback = new StringTextComponent("" + (type.getKnockback() + additionalKnockback)); diff --git a/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoProjectileEntity.java b/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoProjectileEntity.java index 7de9a3a00..982773df5 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoProjectileEntity.java +++ b/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoProjectileEntity.java @@ -176,7 +176,7 @@ public class PotatoProjectileEntity extends DamagingProjectileEntity implements Vector3d hit = ray.getLocation(); Entity target = ray.getEntity(); PotatoCannonProjectileTypes projectileType = getProjectileType(); - float damage = MathHelper.floor(projectileType.getDamage() * additionalDamageMult); + float damage = projectileType.getDamage() * additionalDamageMult; float knockback = projectileType.getKnockback() + additionalKnockback; Entity owner = this.getOwner(); From c3f87ec347180de979cb2fde6fd0cb90486a2ae5 Mon Sep 17 00:00:00 2001 From: PepperBell <44146161+PepperCode1@users.noreply.github.com> Date: Thu, 22 Jul 2021 13:40:40 -0700 Subject: [PATCH 108/118] Recipe interface - Add IRecipeTypeInfo to replace AllRecipeTypes method calls in most cases to allow for better addon support - Tweak some visibility modifiers --- .../com/simibubi/create/AllRecipeTypes.java | 6 ++- .../simibubi/create/compat/jei/CreateJEI.java | 15 +++--- .../crusher/AbstractCrushingRecipe.java | 4 +- .../components/crusher/CrushingRecipe.java | 2 +- .../itemAssembly/SequencedAssemblyRecipe.java | 14 +++--- .../SequencedAssemblyRecipeBuilder.java | 13 +++-- .../processing/ProcessingRecipe.java | 48 +++++++++--------- .../processing/ProcessingRecipeBuilder.java | 13 +++-- .../data/recipe/CreateRecipeProvider.java | 16 +++--- .../data/recipe/ProcessingRecipeGen.java | 49 +++++++++---------- .../utility/recipe/IRecipeTypeInfo.java | 15 ++++++ 11 files changed, 105 insertions(+), 90 deletions(-) create mode 100644 src/main/java/com/simibubi/create/foundation/utility/recipe/IRecipeTypeInfo.java diff --git a/src/main/java/com/simibubi/create/AllRecipeTypes.java b/src/main/java/com/simibubi/create/AllRecipeTypes.java index a15eda1e4..ee9ccfb2d 100644 --- a/src/main/java/com/simibubi/create/AllRecipeTypes.java +++ b/src/main/java/com/simibubi/create/AllRecipeTypes.java @@ -21,6 +21,7 @@ import com.simibubi.create.content.contraptions.processing.ProcessingRecipeBuild import com.simibubi.create.content.contraptions.processing.ProcessingRecipeSerializer; import com.simibubi.create.content.curiosities.tools.SandPaperPolishingRecipe; import com.simibubi.create.foundation.utility.Lang; +import com.simibubi.create.foundation.utility.recipe.IRecipeTypeInfo; import net.minecraft.inventory.IInventory; import net.minecraft.item.crafting.IRecipe; @@ -32,7 +33,7 @@ import net.minecraft.util.registry.Registry; import net.minecraft.world.World; import net.minecraftforge.event.RegistryEvent; -public enum AllRecipeTypes { +public enum AllRecipeTypes implements IRecipeTypeInfo { MECHANICAL_CRAFTING(MechanicalCraftingRecipe.Serializer::new), CONVERSION(ConversionRecipe::new), @@ -78,16 +79,19 @@ public enum AllRecipeTypes { this(processingSerializer(processingFactory)); } + @Override public ResourceLocation getId() { return id; } @SuppressWarnings("unchecked") + @Override public > T getSerializer() { return (T) serializer; } @SuppressWarnings("unchecked") + @Override public > T getType() { return (T) type; } diff --git a/src/main/java/com/simibubi/create/compat/jei/CreateJEI.java b/src/main/java/com/simibubi/create/compat/jei/CreateJEI.java index 4f7649478..da8730eaa 100644 --- a/src/main/java/com/simibubi/create/compat/jei/CreateJEI.java +++ b/src/main/java/com/simibubi/create/compat/jei/CreateJEI.java @@ -51,6 +51,7 @@ import com.simibubi.create.content.schematics.block.SchematicannonScreen; import com.simibubi.create.foundation.config.AllConfigs; import com.simibubi.create.foundation.config.CRecipes; import com.simibubi.create.foundation.config.ConfigBase.ConfigBool; +import com.simibubi.create.foundation.utility.recipe.IRecipeTypeInfo; import mezz.jei.api.IModPlugin; import mezz.jei.api.JeiPlugin; @@ -79,12 +80,6 @@ public class CreateJEI implements IModPlugin { private static final ResourceLocation ID = new ResourceLocation(Create.ID, "jei_plugin"); - @Override - @Nonnull - public ResourceLocation getPluginUid() { - return ID; - } - public IIngredientManager ingredientManager; private final List> allCategories = new ArrayList<>(); private final CreateRecipeCategory @@ -221,6 +216,12 @@ public class CreateJEI implements IModPlugin { return new CategoryBuilder(name, supplier); } + @Override + @Nonnull + public ResourceLocation getPluginUid() { + return ID; + } + @Override public void registerRecipeTransferHandlers(IRecipeTransferRegistration registration) { registration.addRecipeTransferHandler(new BlueprintTransferHandler(), VanillaRecipeCategoryUid.CRAFTING); @@ -269,7 +270,7 @@ public class CreateJEI implements IModPlugin { pred = Predicates.alwaysTrue(); } - public CategoryBuilder recipes(AllRecipeTypes recipeTypeEntry) { + public CategoryBuilder recipes(IRecipeTypeInfo recipeTypeEntry) { return recipes(recipeTypeEntry::getType); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/crusher/AbstractCrushingRecipe.java b/src/main/java/com/simibubi/create/content/contraptions/components/crusher/AbstractCrushingRecipe.java index 350a5269a..ec8c290d4 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/crusher/AbstractCrushingRecipe.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/crusher/AbstractCrushingRecipe.java @@ -1,14 +1,14 @@ package com.simibubi.create.content.contraptions.components.crusher; -import com.simibubi.create.AllRecipeTypes; import com.simibubi.create.content.contraptions.processing.ProcessingRecipe; import com.simibubi.create.content.contraptions.processing.ProcessingRecipeBuilder.ProcessingRecipeParams; +import com.simibubi.create.foundation.utility.recipe.IRecipeTypeInfo; import net.minecraftforge.items.wrapper.RecipeWrapper; public abstract class AbstractCrushingRecipe extends ProcessingRecipe { - public AbstractCrushingRecipe(AllRecipeTypes recipeType, ProcessingRecipeParams params) { + public AbstractCrushingRecipe(IRecipeTypeInfo recipeType, ProcessingRecipeParams params) { super(recipeType, params); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/crusher/CrushingRecipe.java b/src/main/java/com/simibubi/create/content/contraptions/components/crusher/CrushingRecipe.java index 1260470e8..e4bfa6be3 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/crusher/CrushingRecipe.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/crusher/CrushingRecipe.java @@ -22,7 +22,7 @@ public class CrushingRecipe extends AbstractCrushingRecipe { return ingredients.get(0) .test(inv.getItem(0)); } - + @Override protected int getMaxOutputCount() { return 7; diff --git a/src/main/java/com/simibubi/create/content/contraptions/itemAssembly/SequencedAssemblyRecipe.java b/src/main/java/com/simibubi/create/content/contraptions/itemAssembly/SequencedAssemblyRecipe.java index a09fef111..92f4f70a7 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/itemAssembly/SequencedAssemblyRecipe.java +++ b/src/main/java/com/simibubi/create/content/contraptions/itemAssembly/SequencedAssemblyRecipe.java @@ -36,14 +36,14 @@ import net.minecraftforge.items.wrapper.RecipeWrapper; public class SequencedAssemblyRecipe implements IRecipe { - ResourceLocation id; - SequencedAssemblyRecipeSerializer serializer; + protected ResourceLocation id; + protected SequencedAssemblyRecipeSerializer serializer; - Ingredient ingredient; - List> sequence; - int loops; - ProcessingOutput transitionalItem; - List resultPool; + protected Ingredient ingredient; + protected List> sequence; + protected int loops; + protected ProcessingOutput transitionalItem; + protected List resultPool; public SequencedAssemblyRecipe(ResourceLocation recipeId, SequencedAssemblyRecipeSerializer serializer) { this.id = recipeId; diff --git a/src/main/java/com/simibubi/create/content/contraptions/itemAssembly/SequencedAssemblyRecipeBuilder.java b/src/main/java/com/simibubi/create/content/contraptions/itemAssembly/SequencedAssemblyRecipeBuilder.java index abea8424e..df49e6eb6 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/itemAssembly/SequencedAssemblyRecipeBuilder.java +++ b/src/main/java/com/simibubi/create/content/contraptions/itemAssembly/SequencedAssemblyRecipeBuilder.java @@ -8,12 +8,10 @@ import java.util.function.UnaryOperator; import com.google.gson.JsonArray; import com.google.gson.JsonObject; import com.simibubi.create.AllRecipeTypes; -import com.simibubi.create.Create; import com.simibubi.create.content.contraptions.processing.ProcessingOutput; import com.simibubi.create.content.contraptions.processing.ProcessingRecipe; import com.simibubi.create.content.contraptions.processing.ProcessingRecipeBuilder; import com.simibubi.create.content.contraptions.processing.ProcessingRecipeBuilder.ProcessingRecipeFactory; -import com.simibubi.create.foundation.utility.Lang; import net.minecraft.data.IFinishedRecipe; import net.minecraft.item.Item; @@ -92,16 +90,17 @@ public class SequencedAssemblyRecipeBuilder { public static class DataGenResult implements IFinishedRecipe { - private List recipeConditions; - private SequencedAssemblyRecipeSerializer serializer; - private ResourceLocation id; private SequencedAssemblyRecipe recipe; + private List recipeConditions; + private ResourceLocation id; + private SequencedAssemblyRecipeSerializer serializer; public DataGenResult(SequencedAssemblyRecipe recipe, List recipeConditions) { this.recipeConditions = recipeConditions; this.recipe = recipe; - this.id = Create.asResource(Lang.asId(AllRecipeTypes.SEQUENCED_ASSEMBLY.name()) + "/" + recipe.getId() - .getPath()); + recipe.getId(); + this.id = new ResourceLocation(recipe.getId().getNamespace(), + AllRecipeTypes.SEQUENCED_ASSEMBLY.getId().getPath() + "/" + recipe.getId().getPath()); this.serializer = (SequencedAssemblyRecipeSerializer) recipe.getSerializer(); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingRecipe.java b/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingRecipe.java index d92235e4c..b5eb01f6f 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingRecipe.java +++ b/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingRecipe.java @@ -10,11 +10,10 @@ import javax.annotation.ParametersAreNonnullByDefault; import org.apache.logging.log4j.Logger; import com.google.gson.JsonObject; -import com.simibubi.create.AllRecipeTypes; import com.simibubi.create.Create; import com.simibubi.create.content.contraptions.processing.ProcessingRecipeBuilder.ProcessingRecipeParams; import com.simibubi.create.foundation.fluid.FluidIngredient; -import com.simibubi.create.foundation.utility.Lang; +import com.simibubi.create.foundation.utility.recipe.IRecipeTypeInfo; import mcp.MethodsReturnNonnullByDefault; import net.minecraft.inventory.IInventory; @@ -42,24 +41,23 @@ public abstract class ProcessingRecipe implements IRecipe< private IRecipeType type; private IRecipeSerializer serializer; - private AllRecipeTypes enumType; + private IRecipeTypeInfo typeInfo; private Supplier forcedResult; - public ProcessingRecipe(AllRecipeTypes recipeType, ProcessingRecipeParams params) { - + public ProcessingRecipe(IRecipeTypeInfo typeInfo, ProcessingRecipeParams params) { this.forcedResult = null; - this.enumType = recipeType; + this.typeInfo = typeInfo; this.processingDuration = params.processingDuration; this.fluidIngredients = params.fluidIngredients; this.fluidResults = params.fluidResults; - this.serializer = recipeType.getSerializer(); + this.serializer = typeInfo.getSerializer(); this.requiredHeat = params.requiredHeat; this.ingredients = params.ingredients; - this.type = recipeType.getType(); + this.type = typeInfo.getType(); this.results = params.results; this.id = params.id; - validate(Lang.asId(recipeType.name())); + validate(typeInfo.getId()); } // Recipe type options: @@ -86,8 +84,8 @@ public abstract class ProcessingRecipe implements IRecipe< // - private void validate(String recipeTypeName) { - String messageHeader = "Your custom " + recipeTypeName + " recipe (" + id.toString() + ")"; + private void validate(ResourceLocation recipeTypeId) { + String messageHeader = "Your custom " + recipeTypeId + " recipe (" + id.toString() + ")"; Logger logger = Create.LOGGER; int ingredientCount = ingredients.size(); int outputCount = results.size(); @@ -185,32 +183,36 @@ public abstract class ProcessingRecipe implements IRecipe< .getStack(); } - @Override - public ResourceLocation getId() { - return id; - } - @Override public boolean isSpecial() { return true; } - @Override - public IRecipeSerializer getSerializer() { - return serializer; - } - // Processing recipes do not show up in the recipe book @Override public String getGroup() { return "processing"; } + @Override + public ResourceLocation getId() { + return id; + } + + @Override + public IRecipeSerializer getSerializer() { + return serializer; + } + @Override public IRecipeType getType() { return type; } + public IRecipeTypeInfo getTypeInfo() { + return typeInfo; + } + // Additional Data added by subtypes public void readAdditional(JsonObject json) {} @@ -221,8 +223,4 @@ public abstract class ProcessingRecipe implements IRecipe< public void writeAdditional(PacketBuffer buffer) {} - public AllRecipeTypes getEnumType() { - return enumType; - } - } diff --git a/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingRecipeBuilder.java b/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingRecipeBuilder.java index e81f6e0f7..19c839295 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingRecipeBuilder.java +++ b/src/main/java/com/simibubi/create/content/contraptions/processing/ProcessingRecipeBuilder.java @@ -6,11 +6,10 @@ import java.util.function.Consumer; import com.google.gson.JsonArray; import com.google.gson.JsonObject; -import com.simibubi.create.AllRecipeTypes; import com.simibubi.create.foundation.fluid.FluidHelper; import com.simibubi.create.foundation.fluid.FluidIngredient; -import com.simibubi.create.foundation.utility.Lang; import com.simibubi.create.foundation.utility.Pair; +import com.simibubi.create.foundation.utility.recipe.IRecipeTypeInfo; import net.minecraft.data.IFinishedRecipe; import net.minecraft.fluid.Fluid; @@ -221,16 +220,16 @@ public class ProcessingRecipeBuilder> { @SuppressWarnings("unchecked") public DataGenResult(S recipe, List recipeConditions) { - this.recipeConditions = recipeConditions; - AllRecipeTypes recipeType = recipe.getEnumType(); - String typeName = Lang.asId(recipeType.name()); this.recipe = recipe; + this.recipeConditions = recipeConditions; + IRecipeTypeInfo recipeType = this.recipe.getTypeInfo(); + ResourceLocation typeId = recipeType.getId(); if (!(recipeType.getSerializer() instanceof ProcessingRecipeSerializer)) - throw new IllegalStateException("Cannot datagen ProcessingRecipe of type: " + typeName); + throw new IllegalStateException("Cannot datagen ProcessingRecipe of type: " + typeId); this.id = new ResourceLocation(recipe.getId().getNamespace(), - typeName + "/" + recipe.getId().getPath()); + typeId.getPath() + "/" + recipe.getId().getPath()); this.serializer = (ProcessingRecipeSerializer) recipe.getSerializer(); } diff --git a/src/main/java/com/simibubi/create/foundation/data/recipe/CreateRecipeProvider.java b/src/main/java/com/simibubi/create/foundation/data/recipe/CreateRecipeProvider.java index baae5baa3..2e4138cec 100644 --- a/src/main/java/com/simibubi/create/foundation/data/recipe/CreateRecipeProvider.java +++ b/src/main/java/com/simibubi/create/foundation/data/recipe/CreateRecipeProvider.java @@ -20,10 +20,10 @@ import net.minecraftforge.common.Tags; public abstract class CreateRecipeProvider extends RecipeProvider { - final List all = new ArrayList<>(); + protected final List all = new ArrayList<>(); - public CreateRecipeProvider(DataGenerator p_i48262_1_) { - super(p_i48262_1_); + public CreateRecipeProvider(DataGenerator generator) { + super(generator); } @Override @@ -32,16 +32,16 @@ public abstract class CreateRecipeProvider extends RecipeProvider { Create.LOGGER.info(getName() + " registered " + all.size() + " recipe" + (all.size() == 1 ? "" : "s")); } - @FunctionalInterface - public interface GeneratedRecipe { - void register(Consumer consumer); - } - protected GeneratedRecipe register(GeneratedRecipe recipe) { all.add(recipe); return recipe; } + @FunctionalInterface + public interface GeneratedRecipe { + void register(Consumer consumer); + } + protected static class Marker { } diff --git a/src/main/java/com/simibubi/create/foundation/data/recipe/ProcessingRecipeGen.java b/src/main/java/com/simibubi/create/foundation/data/recipe/ProcessingRecipeGen.java index 07734300d..d9b9f2026 100644 --- a/src/main/java/com/simibubi/create/foundation/data/recipe/ProcessingRecipeGen.java +++ b/src/main/java/com/simibubi/create/foundation/data/recipe/ProcessingRecipeGen.java @@ -6,11 +6,11 @@ import java.util.List; import java.util.function.Supplier; import java.util.function.UnaryOperator; -import com.simibubi.create.AllRecipeTypes; import com.simibubi.create.Create; import com.simibubi.create.content.contraptions.processing.ProcessingRecipe; import com.simibubi.create.content.contraptions.processing.ProcessingRecipeBuilder; import com.simibubi.create.content.contraptions.processing.ProcessingRecipeSerializer; +import com.simibubi.create.foundation.utility.recipe.IRecipeTypeInfo; import net.minecraft.data.DataGenerator; import net.minecraft.data.DirectoryCache; @@ -22,22 +22,22 @@ import net.minecraftforge.fluids.FluidAttributes; public abstract class ProcessingRecipeGen extends CreateRecipeProvider { - protected static List generators = new ArrayList<>(); + protected static final List GENERATORS = new ArrayList<>(); protected static final int BUCKET = FluidAttributes.BUCKET_VOLUME; protected static final int BOTTLE = 250; public static void registerAll(DataGenerator gen) { - generators.add(new CrushingRecipeGen(gen)); - generators.add(new MillingRecipeGen(gen)); - generators.add(new CuttingRecipeGen(gen)); - generators.add(new WashingRecipeGen(gen)); - generators.add(new PolishingRecipeGen(gen)); - generators.add(new DeployingRecipeGen(gen)); - generators.add(new MixingRecipeGen(gen)); - generators.add(new CompactingRecipeGen(gen)); - generators.add(new PressingRecipeGen(gen)); - generators.add(new FillingRecipeGen(gen)); - generators.add(new EmptyingRecipeGen(gen)); + GENERATORS.add(new CrushingRecipeGen(gen)); + GENERATORS.add(new MillingRecipeGen(gen)); + GENERATORS.add(new CuttingRecipeGen(gen)); + GENERATORS.add(new WashingRecipeGen(gen)); + GENERATORS.add(new PolishingRecipeGen(gen)); + GENERATORS.add(new DeployingRecipeGen(gen)); + GENERATORS.add(new MixingRecipeGen(gen)); + GENERATORS.add(new CompactingRecipeGen(gen)); + GENERATORS.add(new PressingRecipeGen(gen)); + GENERATORS.add(new FillingRecipeGen(gen)); + GENERATORS.add(new EmptyingRecipeGen(gen)); gen.addProvider(new IDataProvider() { @@ -48,7 +48,7 @@ public abstract class ProcessingRecipeGen extends CreateRecipeProvider { @Override public void run(DirectoryCache dc) throws IOException { - generators.forEach(g -> { + GENERATORS.forEach(g -> { try { g.run(dc); } catch (IOException e) { @@ -59,8 +59,8 @@ public abstract class ProcessingRecipeGen extends CreateRecipeProvider { }); } - public ProcessingRecipeGen(DataGenerator p_i48262_1_) { - super(p_i48262_1_); + public ProcessingRecipeGen(DataGenerator generator) { + super(generator); } /** @@ -86,7 +86,7 @@ public abstract class ProcessingRecipeGen extends CreateRecipeProvider { * Create a processing recipe with a single itemstack ingredient, using its id * as the name of the recipe */ - protected > GeneratedRecipe create(Supplier singleIngredient, + > GeneratedRecipe create(Supplier singleIngredient, UnaryOperator> transform) { return create(Create.ID, singleIngredient, transform); } @@ -109,21 +109,20 @@ public abstract class ProcessingRecipeGen extends CreateRecipeProvider { * Create a new processing recipe, with recipe definitions provided by the * function */ - protected > GeneratedRecipe create(String name, + > GeneratedRecipe create(String name, UnaryOperator> transform) { return create(Create.asResource(name), transform); } - protected > ProcessingRecipeSerializer getSerializer() { - ProcessingRecipeSerializer serializer = getRecipeType().getSerializer(); - return serializer; + protected abstract IRecipeTypeInfo getRecipeType(); + + protected > ProcessingRecipeSerializer getSerializer() { + return getRecipeType().getSerializer(); } @Override - public final String getName() { - return "Create's Processing Recipes: " + getRecipeType(); + public String getName() { + return "Create's Processing Recipes: " + getRecipeType().getId().getPath(); } - protected abstract AllRecipeTypes getRecipeType(); - } diff --git a/src/main/java/com/simibubi/create/foundation/utility/recipe/IRecipeTypeInfo.java b/src/main/java/com/simibubi/create/foundation/utility/recipe/IRecipeTypeInfo.java new file mode 100644 index 000000000..bf347471f --- /dev/null +++ b/src/main/java/com/simibubi/create/foundation/utility/recipe/IRecipeTypeInfo.java @@ -0,0 +1,15 @@ +package com.simibubi.create.foundation.utility.recipe; + +import net.minecraft.item.crafting.IRecipeSerializer; +import net.minecraft.item.crafting.IRecipeType; +import net.minecraft.util.ResourceLocation; + +public interface IRecipeTypeInfo { + + ResourceLocation getId(); + + > T getSerializer(); + + > T getType(); + +} From 89c34262d0a8bcbc3165e58499cc4fb2df5bccc1 Mon Sep 17 00:00:00 2001 From: Jozufozu Date: Thu, 22 Jul 2021 14:06:48 -0700 Subject: [PATCH 109/118] Flaps no longer use old origin pos behavior --- .../simibubi/create/content/logistics/block/FlapData.java | 8 -------- .../logistics/block/belts/tunnel/BeltTunnelInstance.java | 2 +- .../content/logistics/block/funnel/FunnelInstance.java | 2 +- 3 files changed, 2 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/simibubi/create/content/logistics/block/FlapData.java b/src/main/java/com/simibubi/create/content/logistics/block/FlapData.java index 660b61b42..5dfe87e95 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/FlapData.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/FlapData.java @@ -43,14 +43,6 @@ public class FlapData extends InstanceData implements IFlatLight { return setPosition(pos.x(), pos.y(), pos.z()); } - public FlapData setPosition(int x, int y, int z) { - Vector3i origin = owner.originCoordinate.get(); - - return setPosition((float) (x - origin.getX()), - (float) (y - origin.getY()), - (float) (z - origin.getZ())); - } - public FlapData setPosition(float x, float y, float z) { this.x = x; this.y = y; 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 beeb853fd..2d0e363d2 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 @@ -50,7 +50,7 @@ public class BeltTunnelInstance extends TileEntityInstance FlapData key = model.createInstance(); - key.setPosition(pos) + key.setPosition(getInstancePosition()) .setSegmentOffset(segmentOffset, 0, 0) .setBlockLight(blockLight) .setSkyLight(skyLight) diff --git a/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelInstance.java b/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelInstance.java index 170d8e578..fb8fc8545 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelInstance.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelInstance.java @@ -46,7 +46,7 @@ public class FunnelInstance extends TileEntityInstance impleme FlapData key = model.createInstance(); - key.setPosition(pos) + key.setPosition(getInstancePosition()) .setSegmentOffset(segmentOffset, 0, -tile.getFlapOffset()) .setBlockLight(blockLight) .setSkyLight(skyLight) From 37261ee8e6f0dfa0a866eff39fd225b87bace534 Mon Sep 17 00:00:00 2001 From: PepperBell <44146161+PepperCode1@users.noreply.github.com> Date: Thu, 22 Jul 2021 14:16:00 -0700 Subject: [PATCH 110/118] Update Forge - Bump minimum required Forge version to 36.2.0 - Re-add chorus teleport event compatibility - Update Flywheel, JEI, and Shade plugin --- gradle.properties | 8 ++++---- .../weapons/PotatoCannonProjectileTypes.java | 14 ++++++-------- src/main/resources/META-INF/mods.toml | 2 +- 3 files changed, 11 insertions(+), 13 deletions(-) diff --git a/gradle.properties b/gradle.properties index 73f5b705b..c0804abfe 100644 --- a/gradle.properties +++ b/gradle.properties @@ -6,18 +6,18 @@ org.gradle.daemon = false # mod version info mod_version = 0.3.2c minecraft_version = 1.16.5 -forge_version = 36.1.32 +forge_version = 36.2.0 # build dependency versions forgegradle_version = 4.1.+ mixingradle_version = 0.7-SNAPSHOT -shadow_version = 5.2.0 +shadow_version = 6.1.0 cursegradle_version = 1.4.0 # dependency versions registrate_version = 1.0.4 -flywheel_version = 1.16-0.1.1.24 -jei_version = 7.7.0.106 +flywheel_version = 1.16-0.1.1.26 +jei_version = 7.7.1.110 # curseforge information projectId = 328085 diff --git a/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoCannonProjectileTypes.java b/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoCannonProjectileTypes.java index 1d8fb49a5..52c847bd7 100644 --- a/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoCannonProjectileTypes.java +++ b/src/main/java/com/simibubi/create/content/curiosities/weapons/PotatoCannonProjectileTypes.java @@ -46,6 +46,8 @@ import net.minecraft.world.World; import net.minecraft.world.server.ServerWorld; import net.minecraftforge.common.IPlantable; import net.minecraftforge.common.util.FakePlayer; +import net.minecraftforge.event.ForgeEventFactory; +import net.minecraftforge.event.entity.living.EntityTeleportEvent; import net.minecraftforge.registries.IRegistryDelegate; public class PotatoCannonProjectileTypes { @@ -447,14 +449,10 @@ public class PotatoCannonProjectileTypes { double teleportY = MathHelper.clamp(entityY + (livingEntity.getRandom().nextInt((int) teleportDiameter) - (int) (teleportDiameter / 2)), 0.0D, world.getHeight() - 1); double teleportZ = entityZ + (livingEntity.getRandom().nextDouble() - 0.5D) * teleportDiameter; - /* Usable as soon as lowest supported forge > 36.1.3 */ - -// EntityTeleportEvent.ChorusFruit event = ForgeEventFactory.onChorusFruitTeleport(livingEntity, teleportX, teleportY, teleportZ); -// if (event.isCanceled()) -// return; -// if (livingEntity.attemptTeleport(event.getTargetX(), event.getTargetY(), event.getTargetZ(), true)) { - - if (livingEntity.randomTeleport(teleportX, teleportY, teleportZ, true)) { + EntityTeleportEvent.ChorusFruit event = ForgeEventFactory.onChorusFruitTeleport(livingEntity, teleportX, teleportY, teleportZ); + if (event.isCanceled()) + return false; + if (livingEntity.randomTeleport(event.getTargetX(), event.getTargetY(), event.getTargetZ(), true)) { if (livingEntity.isPassenger()) livingEntity.stopRiding(); diff --git a/src/main/resources/META-INF/mods.toml b/src/main/resources/META-INF/mods.toml index 123163fb6..7339a8d9c 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="[36.1.0,)" + versionRange="[36.2.0,)" ordering="NONE" side="BOTH" From 8f6dcb8ba6aaca9a78a0ac6dfa4a5b5e73af0aaf Mon Sep 17 00:00:00 2001 From: PepperBell <44146161+PepperCode1@users.noreply.github.com> Date: Thu, 22 Jul 2021 16:13:03 -0700 Subject: [PATCH 111/118] Fix resource leak - Fix ponder resources not being closed properly --- .../create/foundation/ponder/PonderRegistry.java | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/simibubi/create/foundation/ponder/PonderRegistry.java b/src/main/java/com/simibubi/create/foundation/ponder/PonderRegistry.java index ffe9fc99e..ee420a6f4 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/PonderRegistry.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/PonderRegistry.java @@ -2,6 +2,7 @@ package com.simibubi.create.foundation.ponder; import java.io.BufferedInputStream; import java.io.DataInputStream; +import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; @@ -140,15 +141,12 @@ public class PonderRegistry { String path = "ponder/" + location.getPath() + ".nbt"; ResourceLocation location1 = new ResourceLocation(namespace, path); - if (!resourceManager.hasResource(location1)) { - Create.LOGGER.error("Ponder schematic missing: " + location1); - return new Template(); - } - try { - IResource resource = resourceManager.getResource(location1); + try (IResource resource = resourceManager.getResource(location1)) { return loadSchematic(resource.getInputStream()); + } catch (FileNotFoundException e) { + Create.LOGGER.error("Ponder schematic missing: " + location1, e); } catch (IOException e) { - Create.LOGGER.error("Failed to read ponder schematic: " + path, e); + Create.LOGGER.error("Failed to read ponder schematic: " + location1, e); } return new Template(); } From c4236ad884e7ffe1e99799c8fa9882b26f4ea5ff Mon Sep 17 00:00:00 2001 From: PepperBell <44146161+PepperCode1@users.noreply.github.com> Date: Fri, 23 Jul 2021 10:53:09 -0700 Subject: [PATCH 112/118] Forgotten call --- .../itemAssembly/SequencedAssemblyRecipeBuilder.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/com/simibubi/create/content/contraptions/itemAssembly/SequencedAssemblyRecipeBuilder.java b/src/main/java/com/simibubi/create/content/contraptions/itemAssembly/SequencedAssemblyRecipeBuilder.java index df49e6eb6..c1095a0b4 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/itemAssembly/SequencedAssemblyRecipeBuilder.java +++ b/src/main/java/com/simibubi/create/content/contraptions/itemAssembly/SequencedAssemblyRecipeBuilder.java @@ -98,7 +98,6 @@ public class SequencedAssemblyRecipeBuilder { public DataGenResult(SequencedAssemblyRecipe recipe, List recipeConditions) { this.recipeConditions = recipeConditions; this.recipe = recipe; - recipe.getId(); this.id = new ResourceLocation(recipe.getId().getNamespace(), AllRecipeTypes.SEQUENCED_ASSEMBLY.getId().getPath() + "/" + recipe.getId().getPath()); this.serializer = (SequencedAssemblyRecipeSerializer) recipe.getSerializer(); From f06983c3396a002cc2d12a6d1208f8c02e6507ec Mon Sep 17 00:00:00 2001 From: Jozufozu Date: Fri, 23 Jul 2021 12:26:33 -0700 Subject: [PATCH 113/118] Basic model abstraction - Stop providing a buffered model supplier - Instead, provide an IModel supplier - IModel exposes basic properties of models - IModel exposes a method to copy the model to a VecBuffer --- .../structureMovement/glue/GlueInstance.java | 116 ++++++++++-------- 1 file changed, 66 insertions(+), 50 deletions(-) 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 da3306641..b8f333dc6 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 @@ -1,5 +1,6 @@ package com.simibubi.create.content.contraptions.components.structureMovement.glue; +import com.jozufozu.flywheel.backend.gl.attrib.VertexFormat; import com.jozufozu.flywheel.backend.gl.buffer.VecBuffer; import com.jozufozu.flywheel.backend.instancing.ITickableInstance; import com.jozufozu.flywheel.backend.instancing.Instancer; @@ -7,12 +8,15 @@ import com.jozufozu.flywheel.backend.material.MaterialManager; import com.jozufozu.flywheel.backend.instancing.entity.EntityInstance; import com.jozufozu.flywheel.backend.material.MaterialGroup; import com.jozufozu.flywheel.backend.model.BufferedModel; +import com.jozufozu.flywheel.backend.model.ElementBuffer; import com.jozufozu.flywheel.backend.model.IndexedModel; import com.jozufozu.flywheel.backend.state.TextureRenderState; import com.jozufozu.flywheel.core.Formats; import com.jozufozu.flywheel.core.Materials; +import com.jozufozu.flywheel.core.QuadConverter; import com.jozufozu.flywheel.core.instancing.ConditionalInstance; import com.jozufozu.flywheel.core.materials.OrientedData; +import com.jozufozu.flywheel.core.model.IModel; import com.simibubi.create.AllItems; import com.simibubi.create.AllStitchedTextures; import com.simibubi.create.Create; @@ -54,7 +58,7 @@ public class GlueInstance extends EntityInstance implements ITi private Instancer getInstancer(MaterialManager materialManager, SuperGlueEntity entity) { MaterialGroup group = USE_ATLAS ? materialManager.defaultSolid() : materialManager.solid(TextureRenderState.get(TEXTURE)); - return group.material(Materials.ORIENTED).model(entity.getType(), GlueInstance::supplyModel); + return group.material(Materials.ORIENTED).model(entity.getType(), GlueModel::new); } @Override @@ -95,64 +99,76 @@ public class GlueInstance extends EntityInstance implements ITi || AllItems.SUPER_GLUE.isIn(player.getOffhandItem()); } - public static BufferedModel supplyModel() { - Vector3d diff = Vector3d.atLowerCornerOf(Direction.SOUTH.getNormal()); - Vector3d extension = diff.normalize() - .scale(1 / 32f - 1 / 128f); + public static class GlueModel implements IModel { + @Override + public void buffer(VecBuffer buffer) { + Vector3d diff = Vector3d.atLowerCornerOf(Direction.SOUTH.getNormal()); + Vector3d extension = diff.normalize() + .scale(1 / 32f - 1 / 128f); - Vector3d plane = VecHelper.axisAlingedPlaneOf(diff); - Direction.Axis axis = Direction.getNearest(diff.x, diff.y, diff.z) - .getAxis(); + Vector3d plane = VecHelper.axisAlingedPlaneOf(diff); + Direction.Axis axis = Direction.getNearest(diff.x, diff.y, diff.z) + .getAxis(); - Vector3d start = Vector3d.ZERO.subtract(extension); - Vector3d end = Vector3d.ZERO.add(extension); + Vector3d start = Vector3d.ZERO.subtract(extension); + Vector3d end = Vector3d.ZERO.add(extension); - plane = plane.scale(1 / 2f); - Vector3d a1 = plane.add(start); - Vector3d b1 = plane.add(end); - plane = VecHelper.rotate(plane, -90, axis); - Vector3d a2 = plane.add(start); - Vector3d b2 = plane.add(end); - plane = VecHelper.rotate(plane, -90, axis); - Vector3d a3 = plane.add(start); - Vector3d b3 = plane.add(end); - plane = VecHelper.rotate(plane, -90, axis); - Vector3d a4 = plane.add(start); - Vector3d b4 = plane.add(end); + plane = plane.scale(1 / 2f); + Vector3d a1 = plane.add(start); + Vector3d b1 = plane.add(end); + plane = VecHelper.rotate(plane, -90, axis); + Vector3d a2 = plane.add(start); + Vector3d b2 = plane.add(end); + plane = VecHelper.rotate(plane, -90, axis); + Vector3d a3 = plane.add(start); + Vector3d b3 = plane.add(end); + plane = VecHelper.rotate(plane, -90, axis); + Vector3d a4 = plane.add(start); + Vector3d b4 = plane.add(end); - VecBuffer buffer = VecBuffer.allocate(Formats.UNLIT_MODEL.getStride() * 8); + float minU; + float maxU; + float minV; + float maxV; - float minU; - float maxU; - float minV; - float maxV; + if (USE_ATLAS) { + TextureAtlasSprite sprite = AllStitchedTextures.SUPER_GLUE.getSprite(); + minU = sprite.getU0(); + maxU = sprite.getU1(); + minV = sprite.getV0(); + maxV = sprite.getV1(); + } else { + minU = minV = 0; + maxU = maxV = 1; + } - if (USE_ATLAS) { - TextureAtlasSprite sprite = AllStitchedTextures.SUPER_GLUE.getSprite(); - minU = sprite.getU0(); - maxU = sprite.getU1(); - minV = sprite.getV0(); - maxV = sprite.getV1(); - } else { - minU = minV = 0; - maxU = maxV = 1; + // pos normal uv + // inside quad + buffer.putVec3((float) a1.x, (float) a1.y, (float) a1.z).putVec3((byte) 0, (byte) 0, (byte) -127).putVec2(maxU, minV); + buffer.putVec3((float) a2.x, (float) a2.y, (float) a2.z).putVec3((byte) 0, (byte) 0, (byte) -127).putVec2(maxU, maxV); + buffer.putVec3((float) a3.x, (float) a3.y, (float) a3.z).putVec3((byte) 0, (byte) 0, (byte) -127).putVec2(minU, maxV); + buffer.putVec3((float) a4.x, (float) a4.y, (float) a4.z).putVec3((byte) 0, (byte) 0, (byte) -127).putVec2(minU, minV); + // outside quad + buffer.putVec3((float) b4.x, (float) b4.y, (float) b4.z).putVec3((byte) 0, (byte) 0, (byte) 127).putVec2(minU, minV); + buffer.putVec3((float) b3.x, (float) b3.y, (float) b3.z).putVec3((byte) 0, (byte) 0, (byte) 127).putVec2(minU, maxV); + buffer.putVec3((float) b2.x, (float) b2.y, (float) b2.z).putVec3((byte) 0, (byte) 0, (byte) 127).putVec2(maxU, maxV); + buffer.putVec3((float) b1.x, (float) b1.y, (float) b1.z).putVec3((byte) 0, (byte) 0, (byte) 127).putVec2(maxU, minV); } - // pos normal uv - // inside quad - buffer.putVec3((float) a1.x, (float) a1.y, (float) a1.z).putVec3((byte) 0, (byte) 0, (byte) -127).putVec2(maxU, minV); - buffer.putVec3((float) a2.x, (float) a2.y, (float) a2.z).putVec3((byte) 0, (byte) 0, (byte) -127).putVec2(maxU, maxV); - buffer.putVec3((float) a3.x, (float) a3.y, (float) a3.z).putVec3((byte) 0, (byte) 0, (byte) -127).putVec2(minU, maxV); - buffer.putVec3((float) a4.x, (float) a4.y, (float) a4.z).putVec3((byte) 0, (byte) 0, (byte) -127).putVec2(minU, minV); - // outside quad - buffer.putVec3((float) b4.x, (float) b4.y, (float) b4.z).putVec3((byte) 0, (byte) 0, (byte) 127).putVec2(minU, minV); - buffer.putVec3((float) b3.x, (float) b3.y, (float) b3.z).putVec3((byte) 0, (byte) 0, (byte) 127).putVec2(minU, maxV); - buffer.putVec3((float) b2.x, (float) b2.y, (float) b2.z).putVec3((byte) 0, (byte) 0, (byte) 127).putVec2(maxU, maxV); - buffer.putVec3((float) b1.x, (float) b1.y, (float) b1.z).putVec3((byte) 0, (byte) 0, (byte) 127).putVec2(maxU, minV); + @Override + public int vertexCount() { + return 8; + } - buffer.rewind(); + @Override + public VertexFormat format() { + return Formats.UNLIT_MODEL; + } - - return IndexedModel.fromSequentialQuads(Formats.UNLIT_MODEL, buffer.unwrap(), 8); + @Override + public ElementBuffer createEBO() { + return QuadConverter.getInstance() + .quads2Tris(2); + } } } From 53086718821c27970f8e17ca13d0dcab3c65f9a8 Mon Sep 17 00:00:00 2001 From: Jozufozu Date: Fri, 23 Jul 2021 23:45:31 -0700 Subject: [PATCH 114/118] MaterialManager and MaterialGroup refactor - Material manager builder - No more overload render method/IProgramCallback - MaterialRenderers accept a Program consumer instead --- .../render/ContraptionGroup.java | 25 +++++++++++++++++++ .../render/ContraptionRenderDispatcher.java | 10 +++----- .../render/RenderedContraption.java | 6 ++++- 3 files changed, 34 insertions(+), 7 deletions(-) create mode 100644 src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/render/ContraptionGroup.java diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/render/ContraptionGroup.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/render/ContraptionGroup.java new file mode 100644 index 000000000..582694840 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/render/ContraptionGroup.java @@ -0,0 +1,25 @@ +package com.simibubi.create.content.contraptions.components.structureMovement.render; + +import com.jozufozu.flywheel.backend.material.MaterialGroup; +import com.jozufozu.flywheel.backend.material.MaterialManager; +import com.jozufozu.flywheel.backend.state.IRenderState; + +public class ContraptionGroup

    extends MaterialGroup

    { + + private final RenderedContraption contraption; + + public ContraptionGroup(RenderedContraption contraption, MaterialManager

    owner, IRenderState state) { + super(owner, state); + + this.contraption = contraption; + } + + @Override + public void setup(P program) { + contraption.setup(program); + } + + public static

    MaterialManager.GroupFactory

    forContraption(RenderedContraption c) { + return (materialManager, state) -> new ContraptionGroup<>(c, materialManager, state); + } +} diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/render/ContraptionRenderDispatcher.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/render/ContraptionRenderDispatcher.java index 06420bf13..ebd61a4a4 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/render/ContraptionRenderDispatcher.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/render/ContraptionRenderDispatcher.java @@ -5,9 +5,6 @@ import static org.lwjgl.opengl.GL11.glBindTexture; import static org.lwjgl.opengl.GL11.glDisable; import static org.lwjgl.opengl.GL11.glEnable; import static org.lwjgl.opengl.GL12.GL_TEXTURE_3D; -import static org.lwjgl.opengl.GL13.GL_TEXTURE0; -import static org.lwjgl.opengl.GL13.GL_TEXTURE4; -import static org.lwjgl.opengl.GL13.glActiveTexture; import static org.lwjgl.opengl.GL20.glUseProgram; import java.util.List; @@ -16,6 +13,7 @@ import java.util.Random; import org.apache.commons.lang3.tuple.Pair; import com.jozufozu.flywheel.backend.Backend; +import com.jozufozu.flywheel.backend.gl.GlTextureUnit; import com.jozufozu.flywheel.backend.state.RenderLayer; import com.jozufozu.flywheel.event.BeginFrameEvent; import com.jozufozu.flywheel.event.GatherContextEvent; @@ -116,7 +114,7 @@ public class ContraptionRenderDispatcher { layer.setupRenderState(); glEnable(GL_TEXTURE_3D); - glActiveTexture(GL_TEXTURE4); // the shaders expect light volumes to be in texture 4 + GlTextureUnit.T4.makeActive(); // the shaders expect light volumes to be in texture 4 if (Backend.getInstance().canUseVBOs()) { ContraptionProgram structureShader = CreateContexts.STRUCTURE.getProgram(AllProgramSpecs.STRUCTURE); @@ -134,7 +132,7 @@ public class ContraptionRenderDispatcher { RenderLayer renderLayer = RenderLayer.fromRenderType(layer); if (renderLayer != null) { for (RenderedContraption renderer : RENDERERS.values()) { - renderer.materialManager.render(renderLayer, event.viewProjection, event.camX, event.camY, event.camZ, renderer::setup); + renderer.materialManager.render(renderLayer, event.viewProjection, event.camX, event.camY, event.camZ); } } } @@ -142,7 +140,7 @@ public class ContraptionRenderDispatcher { glBindTexture(GL_TEXTURE_3D, 0); layer.clearRenderState(); glDisable(GL_TEXTURE_3D); - glActiveTexture(GL_TEXTURE0); + GlTextureUnit.T0.makeActive(); glUseProgram(0); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/render/RenderedContraption.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/render/RenderedContraption.java index bb528524e..d195c3066 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/render/RenderedContraption.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/render/RenderedContraption.java @@ -13,6 +13,7 @@ import com.jozufozu.flywheel.backend.Backend; import com.jozufozu.flywheel.backend.gl.attrib.CommonAttributes; import com.jozufozu.flywheel.backend.gl.attrib.VertexFormat; import com.jozufozu.flywheel.backend.instancing.IInstanceRendered; +import com.jozufozu.flywheel.backend.material.MaterialGroup; import com.jozufozu.flywheel.backend.material.MaterialManager; import com.jozufozu.flywheel.backend.model.ArrayModelRenderer; import com.jozufozu.flywheel.backend.model.BufferedModel; @@ -60,7 +61,10 @@ public class RenderedContraption extends ContraptionWorldHolder { public RenderedContraption(Contraption contraption, PlacementSimulationWorld renderWorld) { super(contraption, renderWorld); this.lighter = contraption.makeLighter(); - this.materialManager = new MaterialManager<>(CreateContexts.CWORLD).setIgnoreOriginCoordinate(true); + this.materialManager = MaterialManager.builder(CreateContexts.CWORLD) + .setGroupFactory(ContraptionGroup.forContraption(this)) + .setIgnoreOriginCoordinate(true) + .build(); this.kinetics = new ContraptionInstanceManager(this, materialManager); buildLayers(); From 6a97a312971b86c97043477bd1198ce5dbbec2dc Mon Sep 17 00:00:00 2001 From: Jozufozu Date: Fri, 23 Jul 2021 23:54:42 -0700 Subject: [PATCH 115/118] Bump flywheel version --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index c0804abfe..6191927f8 100644 --- a/gradle.properties +++ b/gradle.properties @@ -16,7 +16,7 @@ cursegradle_version = 1.4.0 # dependency versions registrate_version = 1.0.4 -flywheel_version = 1.16-0.1.1.26 +flywheel_version = 1.16-0.2.0.28 jei_version = 7.7.1.110 # curseforge information From a7a2af7b08d23612c4d536a0717854c4176e05ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=BB=A2=E6=9C=88=E5=87=9B=E9=9C=9C?= <43123946+Water-Moon@users.noreply.github.com> Date: Sat, 24 Jul 2021 14:15:39 -0400 Subject: [PATCH 116/118] Updates to zh_cn.json by Water-Moon (#2022) --- .../resources/assets/create/lang/zh_cn.json | 998 +++++++----------- 1 file changed, 390 insertions(+), 608 deletions(-) diff --git a/src/main/resources/assets/create/lang/zh_cn.json b/src/main/resources/assets/create/lang/zh_cn.json index 669ec2d1e..ce3ae9214 100644 --- a/src/main/resources/assets/create/lang/zh_cn.json +++ b/src/main/resources/assets/create/lang/zh_cn.json @@ -28,10 +28,12 @@ "block.create.belt": "传送带", "block.create.birch_window": "白桦窗户", "block.create.birch_window_pane": "白桦窗户板", + "block.create.black_nixie_tube": "黑色辉光管", "block.create.black_sail": "黑色风帆", "block.create.black_seat": "黑色坐垫", "block.create.black_valve_handle": "黑色阀门手轮", "block.create.blaze_burner": "烈焰人燃烧室", + "block.create.blue_nixie_tube": "蓝色辉光管", "block.create.blue_sail": "蓝色风帆", "block.create.blue_seat": "蓝色坐垫", "block.create.blue_valve_handle": "蓝色阀门手轮", @@ -41,6 +43,7 @@ "block.create.brass_encased_shaft": "黄铜传动杆箱", "block.create.brass_funnel": "黄铜漏斗", "block.create.brass_tunnel": "黄铜隧道", + "block.create.brown_nixie_tube": "棕色辉光管", "block.create.brown_sail": "棕色风帆", "block.create.brown_seat": "棕色坐垫", "block.create.brown_valve_handle": "棕色阀门手轮", @@ -58,6 +61,7 @@ "block.create.cogwheel": "齿轮", "block.create.content_observer": "物品侦测器", "block.create.controller_rail": "控制铁轨", + "block.create.copper_backtank": "铜制背罐", "block.create.copper_block": "铜块", "block.create.copper_casing": "铜机壳", "block.create.copper_ore": "铜矿石", @@ -72,6 +76,7 @@ "block.create.crushing_wheel": "粉碎轮", "block.create.crushing_wheel_controller": "粉碎轮控制器", "block.create.cuckoo_clock": "布谷鸟闹钟", + "block.create.cyan_nixie_tube": "青色辉光管", "block.create.cyan_sail": "青色风帆", "block.create.cyan_seat": "青色坐垫", "block.create.cyan_valve_handle": "青色阀门手轮", @@ -178,13 +183,16 @@ "block.create.granite_cobblestone_stairs": "花岗岩圆石楼梯", "block.create.granite_cobblestone_wall": "花岗岩圆石墙", "block.create.granite_pillar": "竖纹花岗岩", + "block.create.gray_nixie_tube": "灰色辉光管", "block.create.gray_sail": "灰色风帆", "block.create.gray_seat": "灰色坐垫", "block.create.gray_valve_handle": "灰色阀门手轮", + "block.create.green_nixie_tube": "绿色辉光管", "block.create.green_sail": "绿色风帆", "block.create.green_seat": "绿色坐垫", "block.create.green_valve_handle": "绿色阀门手轮", "block.create.hand_crank": "手摇曲柄", + "block.create.haunted_bell": "怪异钟", "block.create.honey": "蜂蜜", "block.create.horizontal_framed_glass": "竖直边框玻璃", "block.create.horizontal_framed_glass_pane": "竖直边框玻璃板", @@ -202,12 +210,16 @@ "block.create.layered_limestone": "层叠石灰岩", "block.create.layered_scoria": "层叠熔渣", "block.create.layered_weathered_limestone": "层叠风化石灰岩", + "block.create.lectern_controller": "遥控器讲台", + "block.create.light_blue_nixie_tube": "淡蓝色辉光管", "block.create.light_blue_sail": "淡蓝色风帆", "block.create.light_blue_seat": "淡蓝色坐垫", "block.create.light_blue_valve_handle": "淡蓝色阀门手轮", + "block.create.light_gray_nixie_tube": "淡灰色辉光管", "block.create.light_gray_sail": "淡灰色风帆", "block.create.light_gray_seat": "淡灰色坐垫", "block.create.light_gray_valve_handle": "淡灰色阀门手轮", + "block.create.lime_nixie_tube": "黄绿色辉光管", "block.create.lime_sail": "黄绿色风帆", "block.create.lime_seat": "黄绿色坐垫", "block.create.lime_valve_handle": "黄绿色阀门手轮", @@ -224,6 +236,7 @@ "block.create.limestone_pillar": "竖纹石灰岩", "block.create.linear_chassis": "机壳底盘", "block.create.lit_blaze_burner": "烈焰人燃烧室(已点燃)", + "block.create.magenta_nixie_tube": "品红色辉光管", "block.create.magenta_sail": "品红色风帆", "block.create.magenta_seat": "品红色坐垫", "block.create.magenta_valve_handle": "品红色阀门手轮", @@ -307,6 +320,8 @@ "block.create.paved_weathered_limestone_slab": "风化石灰岩铺路石台阶", "block.create.paved_weathered_limestone_stairs": "风化石灰岩铺路石楼梯", "block.create.paved_weathered_limestone_wall": "风化石灰岩铺路石墙", + "block.create.peculiar_bell": "奇异钟", + "block.create.pink_nixie_tube": "粉色辉光管", "block.create.pink_sail": "粉红色风帆", "block.create.pink_seat": "粉红色坐垫", "block.create.pink_valve_handle": "粉红色阀门手轮", @@ -341,10 +356,12 @@ "block.create.powered_toggle_latch": "转换锁存器", "block.create.pulley_magnet": "滑轮磁铁", "block.create.pulse_repeater": "脉冲中继器", + "block.create.purple_nixie_tube": "紫色辉光管", "block.create.purple_sail": "紫色风帆", "block.create.purple_seat": "紫色坐垫", "block.create.purple_valve_handle": "紫色阀门手轮", "block.create.radial_chassis": "旋转底盘", + "block.create.red_nixie_tube": "红色辉光管", "block.create.red_sail": "红色风帆", "block.create.red_seat": "红色坐垫", "block.create.red_valve_handle": "红色阀门手轮", @@ -401,25 +418,30 @@ "block.create.weathered_limestone_cobblestone_wall": "风化石灰岩圆石墙", "block.create.weathered_limestone_pillar": "竖纹风化石灰岩", "block.create.weighted_ejector": "弹射置物台", + "block.create.white_nixie_tube": "白色辉光管", "block.create.white_sail": "白色风帆", "block.create.white_seat": "白色坐垫", "block.create.white_valve_handle": "白色阀门手轮", "block.create.windmill_bearing": "风车轴承", "block.create.wooden_bracket": "木质支架", + "block.create.yellow_nixie_tube": "黄色辉光管", "block.create.yellow_sail": "黄色风帆", "block.create.yellow_seat": "黄色坐垫", "block.create.yellow_valve_handle": "黄色阀门手轮", "block.create.zinc_block": "锌块", "block.create.zinc_ore": "锌矿石", + "enchantment.create.capacity": "扩容", + "enchantment.create.potato_recovery": "土豆回收", + "entity.create.contraption": "装置", + "entity.create.crafting_blueprint": "合成蓝图", "entity.create.gantry_contraption": "起重机装置", + "entity.create.potato_projectile": "被发射的土豆", "entity.create.seat": "坐垫", "entity.create.stationary_contraption": "固定装置", "entity.create.super_glue": "强力胶", - "fluid.create.chocolate": "巧克力", - "fluid.create.honey": "蜂蜜", "fluid.create.milk": "牛奶", "fluid.create.potion": "药水", "fluid.create.tea": "茶", @@ -440,10 +462,13 @@ "item.create.chocolate_glazed_berries": "巧克力包层浆果", "item.create.chromatic_compound": "异彩化合物", "item.create.cinder_flour": "下界面粉", + "item.create.copper_backtank": "铜制背罐", "item.create.copper_ingot": "铜锭", "item.create.copper_nugget": "铜粒", "item.create.copper_sheet": "铜板", "item.create.crafter_slot_cover": "合成器盖板", + "item.create.crafting_blueprint": "合成蓝图", + "item.create.creative_cake": "创造烈焰蛋糕", "item.create.crushed_aluminum_ore": "粉碎铝矿石", "item.create.crushed_brass": "粉碎黄铜", "item.create.crushed_copper_ore": "粉碎铜矿石", @@ -458,7 +483,8 @@ "item.create.crushed_tin_ore": "粉碎锡矿石", "item.create.crushed_uranium_ore": "粉碎铀矿石", "item.create.crushed_zinc_ore": "粉碎锌矿石", - "item.create.deforester": "树林毁灭者", + "item.create.diving_boots": "潜水靴", + "item.create.diving_helmet": "潜水头盔", "item.create.dough": "面团", "item.create.electron_tube": "电子管", "item.create.empty_blaze_burner": "空的烈焰人燃烧室", @@ -468,17 +494,20 @@ "item.create.furnace_minecart_contraption": "装配过的动力矿车", "item.create.goggles": "工程师护目镜", "item.create.golden_sheet": "金板", - "item.create.handheld_blockzapper": "手持式方块放置器", "item.create.handheld_worldshaper": "手持式环境塑形器", "item.create.honey_bucket": "蜂蜜桶", "item.create.honeyed_apple": "蜜渍苹果", - "item.create.integrated_circuit": "集成电路板", + "item.create.incomplete_cogwheel": "齿轮(半成品)", + "item.create.incomplete_large_cogwheel": "大齿轮(半成品)", + "item.create.incomplete_precision_mechanism": "精密机构(半成品)", "item.create.iron_sheet": "铁板", - "item.create.lapis_sheet": "青金石板", + "item.create.linked_controller": "无线红石遥控器", "item.create.minecart_contraption": "装配过的矿车", "item.create.minecart_coupling": "矿车连轴器", "item.create.polished_rose_quartz": "磨制玫瑰石英", + "item.create.potato_cannon": "土豆加农炮", "item.create.powdered_obsidian": "黑曜石粉末", + "item.create.precision_mechanism": "精密机构", "item.create.propeller": "扇叶", "item.create.red_sand_paper": "红沙砂纸", "item.create.refined_radiance": "光辉石", @@ -623,8 +652,8 @@ "advancement.create.flywheel.desc": "将引擎成功连接到飞轮。", "advancement.create.overstress_flywheel": "高压", "advancement.create.overstress_flywheel.desc": "过载熔炉引擎。", - "advancement.create.integrated_circuit": "复杂运算", - "advancement.create.integrated_circuit.desc": "组装集成电路。", + "advancement.create.precision_mechanism": "高新技术", + "advancement.create.precision_mechanism.desc": "装配一个精密机构。", "advancement.create.mechanical_arm": "忙碌的手!", "advancement.create.mechanical_arm.desc": "制作机械臂,选择输入和输出,放置并给予它动力,然后看着它为你完成所有工作。", "advancement.create.musical_arm": "没人能在我的 BGM 里打败我!", @@ -647,16 +676,12 @@ "advancement.create.refined_radiance.desc": "制作一个光辉石", "advancement.create.chromatic_age": "异彩纪元", "advancement.create.chromatic_age.desc": "创造出光与影的机壳。", - "advancement.create.zapper": "讲究的建筑师", - "advancement.create.zapper.desc": "制作一个非常方便的手持方块放置器", - "advancement.create.upgraded_zapper": "来自异世界的超频", - "advancement.create.upgraded_zapper.desc": "制作一个完全升级的手持方块放置器", "advancement.create.wand_of_symmetry": "简单的镜面几何学", "advancement.create.wand_of_symmetry.desc": "制作一个对称之杖", - "advancement.create.deforester": "超时空砍伐", - "advancement.create.deforester.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.dual_extendo_grip": "biu——biu——biu——", "advancement.create.dual_extendo_grip.desc": "双持伸缩机械手,超人般的触碰距离。", "advancement.create.eob": "Beta 版结束", @@ -669,15 +694,31 @@ "itemGroup.create.palettes": "机械动力建筑方块", "death.attack.create.crush": "%1$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.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被布谷鸟钟炸得粉身碎骨", "create.block.deployer.damage_source_name": "二五仔机械手", "create.block.cart_assembler.invalid": "请将矿车装配器放置在铁轨上", + "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.support": "支持我们", + "create.recipe.crushing": "粉碎", "create.recipe.milling": "研磨", "create.recipe.fan_washing": "批量洗涤", @@ -688,6 +729,7 @@ "create.recipe.fan_blasting.fan": "在熔岩后放置鼓风机", "create.recipe.pressing": "金属压片", "create.recipe.mixing": "混合搅拌", + "create.recipe.deploying": "自动使用", "create.recipe.automatic_shapeless": "自动搅拌", "create.recipe.automatic_brewing": "自动酿造", "create.recipe.packing": "压块塑形", @@ -697,12 +739,21 @@ "create.recipe.automatic_shaped": "自动合成", "create.recipe.block_cutting": "方块切割", "create.recipe.wood_cutting": "木材切割", - "create.recipe.blockzapper_upgrade": "手持式方块放置器", "create.recipe.sandpaper_polishing": "砂纸打磨", "create.recipe.mystery_conversion": "神秘转化", "create.recipe.spout_filling": "注液", "create.recipe.draining": "分液", - "create.recipe.processing.chance":"%1$s%%概率", + "create.recipe.sequenced_assembly": "流水线装配", + "create.recipe.assembly.next": "下一步:%1$s", + "create.recipe.assembly.step": "第%1$s步:", + "create.recipe.assembly.progress": "组装进度:%1$s/%2$s", + "create.recipe.assembly.pressing": "用辊压机辊压", + "create.recipe.assembly.spout_filling_fluid": "注入%1$s", + "create.recipe.assembly.deploying_item": "安装%1$s", + "create.recipe.assembly.cutting": "用动力锯切割", + "create.recipe.assembly.repeat": "该序列需要重复%1$s次", + "create.recipe.assembly.junk": "随机废料", + "create.recipe.processing.chance": "%1$s%%概率", "create.recipe.heat_requirement.none": "无需加热", "create.recipe.heat_requirement.heated": "加热", "create.recipe.heat_requirement.superheated": "超级加热", @@ -720,7 +771,7 @@ "create.generic.unit.rpm": "RPM", "create.generic.unit.stress": "su", "create.generic.unit.degrees": "°", - "create.generic.unit.millibuckets":"%1$smB", + "create.generic.unit.millibuckets": "%1$smB", "create.generic.clockwise": "顺时针方向", "create.generic.counter_clockwise": "逆时针方向", @@ -754,20 +805,16 @@ "create.orientation.alongZ": "以z轴对齐", "create.orientation.alongX": "以x轴对齐", - "create.gui.blockzapper.title": "手持式方块放置机", - "create.gui.blockzapper.replaceMode": "替换模式", - "create.gui.blockzapper.searchDiagonal": "对角线延伸", - "create.gui.blockzapper.searchFuzzy": "忽视种类分界", - "create.gui.blockzapper.range": "延伸范围", - "create.gui.blockzapper.needsUpgradedAmplifier": "需要升级范围扩大器", - "create.gui.blockzapper.patternSection": "模式", - "create.gui.blockzapper.pattern.solid": "实心", - "create.gui.blockzapper.pattern.checkered": "棋盘", - "create.gui.blockzapper.pattern.inversecheckered": "反转棋盘", - "create.gui.blockzapper.pattern.chance25": "25% ", - "create.gui.blockzapper.pattern.chance50": "50% ", - "create.gui.blockzapper.pattern.chance75": "75% ", "create.gui.terrainzapper.title": "手持式环境塑形器", + "create.gui.terrainzapper.searchDiagonal": "对角线延伸", + "create.gui.terrainzapper.searchFuzzy": "模糊模式(忽略材料分界)", + "create.gui.terrainzapper.patternSection": "样式", + "create.gui.terrainzapper.pattern.solid": "填满", + "create.gui.terrainzapper.pattern.checkered": "棋盘格", + "create.gui.terrainzapper.pattern.inversecheckered": "反转棋盘格", + "create.gui.terrainzapper.pattern.chance25": "随机填充25%", + "create.gui.terrainzapper.pattern.chance50": "随机填充50%", + "create.gui.terrainzapper.pattern.chance75": "随机填充75%", "create.gui.terrainzapper.placement": "放置模式", "create.gui.terrainzapper.placement.merged": "结合", "create.gui.terrainzapper.placement.attached": "依附", @@ -776,6 +823,8 @@ "create.gui.terrainzapper.brush.cuboid": "矩形体", "create.gui.terrainzapper.brush.sphere": "球体", "create.gui.terrainzapper.brush.cylinder": "圆柱体", + "create.gui.terrainzapper.brush.surface": "连接的面", + "create.gui.terrainzapper.brush.cluster": "连接的立体区域", "create.gui.terrainzapper.tool": "填充类型", "create.gui.terrainzapper.tool.fill": "填充", "create.gui.terrainzapper.tool.place": "复写", @@ -785,19 +834,8 @@ "create.gui.terrainzapper.tool.flatten": "平整", "create.terrainzapper.shiftRightClickToSet": "Shift+鼠标右击以设置塑形类型", - - "create.blockzapper.usingBlock": "使用:%1$s", - "create.blockzapper.componentUpgrades": "组件升级:", - "create.blockzapper.component.body": "放置器机体", - "create.blockzapper.component.amplifier": "范围扩大器", - "create.blockzapper.component.accelerator": "射击加速器", - "create.blockzapper.component.retriever": "物品回捡器", - "create.blockzapper.component.scope": "距离观察镜", - "create.blockzapper.componentTier.none": "无", - "create.blockzapper.componentTier.brass": "黄铜", - "create.blockzapper.componentTier.chromatic": "异彩化合物", - "create.blockzapper.leftClickToSet": "左击方块将其设定为放置方块", - "create.blockzapper.empty": "方块不足!", + "create.terrainzapper.usingBlock": "填充材料:%1$s", + "create.terrainzapper.leftClickToSet": "鼠标左击一个方块以设置填充材料", "create.minecart_coupling.two_couplings_max": "矿车无法被连接两个以上的矿车连轴器", "create.minecart_coupling.unloaded": "有一部分火车存在于未加载区块中", @@ -844,7 +882,6 @@ "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.goggles.base_value": "应力基础值", "create.gui.gauge.info_header": "仪表信息:", "create.gui.speedometer.title": "旋转速度", "create.gui.stressometer.title": "网络应力", @@ -871,8 +908,6 @@ "create.gui.sequenced_gearshift.instruction.delay": "延迟", "create.gui.sequenced_gearshift.instruction.delay.duration": "时长", "create.gui.sequenced_gearshift.instruction.end.descriptive": "结束", - "create.gui.sequenced_gearshift.instruction.wait": "等待", - "create.gui.sequenced_gearshift.instruction.wait.duration": "间隔", "create.gui.sequenced_gearshift.instruction.end": "停止", "create.gui.sequenced_gearshift.instruction.await.descriptive": "等待新的红石脉冲", "create.gui.sequenced_gearshift.instruction.await": "等待", @@ -892,7 +927,7 @@ "create.schematicAndQuill.fallbackName": "我的蓝图", "create.schematicAndQuill.saved": "另存为%1$s", - "create.schematic.invalid":"[!] 无效的项目", + "create.schematic.invalid": "[!] 无效的项目", "create.schematic.position": "位置", "create.schematic.rotation": "旋转", "create.schematic.rotation.none": "无", @@ -915,24 +950,24 @@ "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.2":"", - "create.schematic.tool.move.description.3":"", + "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.2":"", - "create.schematic.tool.movey.description.3":"", + "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.2":"", - "create.schematic.tool.rotate.description.3":"", + "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.3":"", + "create.schematic.tool.print.description.3": "", "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.schematic.tool.flip.description.2": "", + "create.schematic.tool.flip.description.3": "", "create.schematics.synchronizing": "正在同步..", "create.schematics.uploadTooLarge": "你的蓝图太大", @@ -1031,6 +1066,11 @@ "create.item_attributes.in_item_group.inverted": "不属于%1$s", "create.item_attributes.added_by": "由%1$s添加", "create.item_attributes.added_by.inverted": "不是由%1$s添加", + "create.item_attributes.shulker_level": "潜影盒是%1$s的", + "create.item_attributes.shulker_level.inverted": "潜影盒不是%1$s的", + "create.item_attributes.shulker_level.full": "满", + "create.item_attributes.shulker_level.empty": "空", + "create.item_attributes.shulker_level.partial": "半满", "create.item_attributes.has_enchant": "有附魔效果%1$s", "create.item_attributes.has_enchant.inverted": "没有附魔效果%1$s", "create.item_attributes.color": "染色为%1$s", @@ -1074,8 +1114,6 @@ "create.tooltip.holdForDescription": "按住 [%1$s] 可查看概要", "create.tooltip.holdForControls": "按住 [%1$s] 可查看控制方法", - "create.tooltip.holdKey": "按住 [%1$s]", - "create.tooltip.holdKeyOrKey": "按住 [%1$s] 或 [%2$s]", "create.tooltip.keyShift": "Shift", "create.tooltip.keyCtrl": "Ctrl", "create.tooltip.speedRequirement": "需求转速:%1$s", @@ -1091,14 +1129,13 @@ "create.tooltip.capacityProvided.low": "小", "create.tooltip.capacityProvided.medium": "中", "create.tooltip.capacityProvided.high": "大", - "create.tooltip.capacityProvided.asGenerator":"(作为应力发生器)", "create.tooltip.generationSpeed": "产生于%1$s %2$s", "create.tooltip.analogStrength": "模拟信号强度:%1$s/15", "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.points_outside_range": "由于距离限制,选定的交互点%1$s已被移除。", "create.weighted_ejector.target_set": "目标已选取", "create.weighted_ejector.target_not_valid": "弹射至临近方块(目标无效)", @@ -1121,23 +1158,40 @@ "create.tunnel.selection_mode.synchronize": "同步输入", "create.tooltip.chute.header": "溜槽信息", - "create.tooltip.chute.items_move_down": "物品下行", - "create.tooltip.chute.items_move_up": "物品上行", - "create.tooltip.chute.no_fans_attached": "未安装鼓风机", - "create.tooltip.chute.fans_push_up": "鼓风机从下方进行推动", - "create.tooltip.chute.fans_push_down": "鼓风机从上方进行推动", - "create.tooltip.chute.fans_pull_up": "鼓风机从上方进行吸引", + "create.tooltip.chute.items_move_down": "物品下行", + "create.tooltip.chute.items_move_up": "物品上行", + "create.tooltip.chute.no_fans_attached": "未安装鼓风机", + "create.tooltip.chute.fans_push_up": "鼓风机从下方进行推动", + "create.tooltip.chute.fans_push_down": "鼓风机从上方进行推动", + "create.tooltip.chute.fans_pull_up": "鼓风机从上方进行吸引", "create.tooltip.chute.fans_pull_down": "鼓风机从下方进行吸引", "create.tooltip.chute.contains": "内含物品:%1$s x%2$s", - + "create.tooltip.brass_tunnel.contains": "等待分配的物品:", + "create.tooltip.brass_tunnel.contains_entry": "> %2$s个%1$s", + "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.key_bound": "该频率已绑定到%1$s", + "create.linked_controller.frequency_slot_1": "按键:%1$s,频道 #1", + "create.linked_controller.frequency_slot_2": "按键:%1$s,频道 #2", + + "create.crafting_blueprint.crafting_slot": "合成材料格", + "create.crafting_blueprint.filter_items_viable": "可以使用过滤器", + "create.crafting_blueprint.display_slot": "展示的图标", + "create.crafting_blueprint.inferred": "已根据合成配方自动设定", + "create.crafting_blueprint.manually_assigned": "手动设定", + "create.crafting_blueprint.secondary_display_slot": "展示的图标角标", + "create.crafting_blueprint.optional": "可选", + + "create.potato_cannon.ammo.attack_damage": "%1$s 攻击伤害", + "create.potato_cannon.ammo.reload_ticks": "%1$s 装弹时间(Ticks)", + "create.potato_cannon.ammo.knockback": "%1$s 击退", + "create.hint.hose_pulley.title": "无限供应", "create.hint.hose_pulley": "目标液体对象被视为无限量的。", "create.hint.mechanical_arm_no_targets.title": "没有目标", "create.hint.mechanical_arm_no_targets": "看起来这个_动力臂_没有被分配给任何_目标_。在手持机械臂的同时,右击选取传送带、置物台、漏斗或其他设备来设置目标。", - "create.hint.horizontal_funnel.title": "水平漏斗", - "create.hint.horizontal_funnel": "无法_直接_在两个物品栏间移动物品。请使用传送带或者置物台来从物品栏中提取物品。", - "create.hint.upward_funnel.title": "漏斗向上", - "create.hint.upward_funnel": "只可以传送由_动力臂_,鼓风机驱动的_溜槽_或者被投掷的物品。请试着做一些溜槽来垂直运输物品。", "create.hint.empty_bearing.title": "更新轴承", "create.hint.empty_bearing": "_空手右击_轴承来_激活_你新建造的结构。", "create.hint.full_deployer.title": "机械手物品溢出", @@ -1161,17 +1215,46 @@ "create.command.killTPSCommand.argument.tickTime": "tickTime", "create.contraption.minecart_contraption_too_big": "这一矿车装置似乎太大了,无法变为拾捡状态", + "create.contraption.minecart_contraption_illegal_pickup": "神秘的力量阻止你拾取这个矿车装置。", - "create.subtitle.schematicannon_launch_block": "蓝图加农炮:发射", - "create.subtitle.schematicannon_finish": "蓝图加农炮:叮", - "create.subtitle.slime_added": "粘液:挤碎声", - "create.subtitle.mechanical_press_activation": "辊压机:工作中", - "create.subtitle.mechanical_press_item_break": "金属碰撞", - "create.subtitle.blockzapper_place": "放置方块", - "create.subtitle.blockzapper_confirm": "选择方块", - "create.subtitle.blockzapper_deny": "放置失败", - "create.subtitle.block_funnel_eat": "漏斗:吞食", + + "_": "->------------------------] Subtitles [------------------------<-", + + "create.subtitle.contraption_disassemble": "结构:停止移动", + "create.subtitle.peculiar_bell_use": "奇异钟:鸣响", + "create.subtitle.mixing": "搅拌器:搅拌声", + "create.subtitle.mechanical_press_activation_belt": "辊压机:撞击传送带", + "create.subtitle.fwoomp": "土豆加农炮:发射", + "create.subtitle.worldshaper_place": "环境塑型器:放置方块", + "create.subtitle.crushing_1": "磨碎声", + "create.subtitle.depot_slide": "物品:滑入", + "create.subtitle.saw_activate_stone": "动力锯:切割", "create.subtitle.blaze_munch": "烈焰人:咀嚼", + "create.subtitle.funnel_flap": "漏斗:垂帘碰撞", + "create.subtitle.schematicannon_finish": "蓝图加农炮:叮", + "create.subtitle.haunted_bell_use": "怪异钟:鸣响", + "create.subtitle.scroll_value": "拨码输入:咔哒", + "create.subtitle.crafter_craft": "动力合成器:合成中", + "create.subtitle.controller_put": "遥控器:放进讲台", + "create.subtitle.cranking": "手摇曲柄:转动", + "create.subtitle.wrench_remove": "部件:被破坏", + "create.subtitle.cogs": "齿轮:嘎吱作响", + "create.subtitle.slime_added": "粘液:挤碎声", + "create.subtitle.wrench_rotate": "扳手:拧动", + "create.subtitle.potato_hit": "土豆:击中", + "create.subtitle.saw_activate_wood": "动力锯:切割", + "create.subtitle.haunted_bell_convert": "奇异钟:转化", + "create.subtitle.deployer_polish": "机械手:打磨物品", + "create.subtitle.deny": "提示声:出错", + "create.subtitle.controller_click": "遥控器:按下按钮", + "create.subtitle.schematicannon_launch_block": "蓝图加农炮:发射", + "create.subtitle.copper_armor_equip": "潜水装备:铿锵", + "create.subtitle.controller_take": "讲台:取走物品", + "create.subtitle.mechanical_press_activation": "辊压机:工作中", + "create.subtitle.contraption_assemble": "结构:开始移动", + "create.subtitle.crafter_click": "动力合成器:咔哒声", + "create.subtitle.depot_plop": "物品:着地", + "create.subtitle.confirm": "提示声:接受", "_": "->------------------------] Item Descriptions [------------------------<-", @@ -1185,161 +1268,20 @@ "item.create.example_item.tooltip.control1": "When Ctrl pressed", "item.create.example_item.tooltip.action1": "These controls are displayed.", - "block.create.andesite_encased_shaft.tooltip": "安山传动杆箱", - "block.create.andesite_encased_shaft.tooltip.summary": "_创造模式_才可获得这一物品。用_安山机壳_包裹放置在_世界中_的传动杆即可获得,机壳不会被消耗。", - - "block.create.brass_encased_shaft.tooltip": "黄铜传动杆箱", - "block.create.brass_encased_shaft.tooltip.summary": "_创造模式_才可获得这一物品。用_黄铜机壳_包裹放置在_世界中_的传动杆即可获得,机壳不会被消耗。", - "block.create.wooden_bracket.tooltip": "木质支架", "block.create.wooden_bracket.tooltip.summary": "用这种给人温馨感的木质支架_装饰_你的_传动杆_,_齿轮_和_管道_吧。", "block.create.metal_bracket.tooltip": "金属支架", "block.create.metal_bracket.tooltip.summary": "用这种工业风格的金属支架_装饰_你的_传动杆_,_齿轮_和_管道_吧。", - "block.create.andesite_casing.tooltip": "安山机壳", - "block.create.andesite_casing.tooltip.summary": "具有多种用途的简单机壳,可用于加固并装饰_传动杆_,_传送带_", - - "block.create.andesite_funnel.tooltip": "安山漏斗", - "block.create.andesite_funnel.tooltip.summary": "一种常用的传输设备,配合各种物流结构传输物品,可由_红石信号_控制。", - "block.create.andesite_funnel.tooltip.condition1": "一般行为", - "block.create.andesite_funnel.tooltip.behaviour1": "开口的面会吸收面前一格内的_掉落物_,并_传输_到它与吸收位置的方向相反的_容器_里。", - "block.create.andesite_funnel.tooltip.condition2": "当装配在传送带、置物台等类似的组件上时", - "block.create.andesite_funnel.tooltip.behaviour2": "会在此组件上_收集_或_放置_物品,并将其背后的物品栏视为缓存,向其中_放入_或从其中_抽出_物品,无论何时,只要该漏斗面朝特定的方向,你都可以通过扳手来翻转它的面朝方向。", - "block.create.andesite_funnel.tooltip.condition3": "当被垂直放置于两个容器之间时", - "block.create.andesite_funnel.tooltip.behaviour3": "仅向下垂直传输物品,类似一个没有缓冲槽的漏斗。", - - "block.create.andesite_tunnel.tooltip": "安山隧道", - "block.create.andesite_tunnel.tooltip.summary": "这种美观大方且兼具保护能力的遮掩物专为_传送带_而设计。_安山隧道_可以从主传送带上的一堆物品中抽取出一个物品,并将该物品放置到侧面的传送带或者置物台上。", - "block.create.andesite_tunnel.tooltip.control1": "扳手右击侧面时", - "block.create.andesite_tunnel.tooltip.action1": "如果传送带隧道串联的数量达到三个或以上,可在位于中间的隧道侧面上开启关闭百叶窗。", - - "block.create.brass_funnel.tooltip": "黄铜漏斗", - "block.create.brass_funnel.tooltip.summary": "一种常用的传输设备,配合各种物流结构传输物品,可由_红石信号_控制,并附带_过滤槽_。", - "block.create.brass_funnel.tooltip.condition1": "一般行为", - "block.create.brass_funnel.tooltip.behaviour1": "开口的面会吸收面前一格内的_掉落物_,并_传输_到它与吸收位置的方向相反的_容器_里。", - "block.create.brass_funnel.tooltip.condition2": "当装配在传送带、置物台等类似的组件上时", - "block.create.brass_funnel.tooltip.behaviour2": "会在此组件上_收集_或_放置_物品,并将其背后的物品栏视为缓存,向其中_放入_或从其中_抽出_物品,无论何时,只要该漏斗面朝特定的方向,你都可以通过扳手来翻转它的面朝方向。", - "block.create.brass_funnel.tooltip.condition3": "垂直放置于两个容器之间时", - "block.create.brass_funnel.tooltip.behaviour3": "向下垂直传输物品,类似一个没有缓冲槽的漏斗。", - - "block.create.brass_tunnel.tooltip": "黄铜隧道", - "block.create.brass_tunnel.tooltip.summary": "这种美观大方且兼具保护能力的遮掩物专为_传送带_而设计。不仅如此,_黄铜隧道_还带有物品_过滤_以及_分流_的配置选项。", - "block.create.brass_tunnel.tooltip.condition1": "当它们并排放置时", - "block.create.brass_tunnel.tooltip.behaviour1": "紧挨着的_黄铜隧道_可以让传送带路线上穿过的物品_重定向_到与其并排的传送带路线上。", - "block.create.brass_tunnel.tooltip.condition2": "过滤", - "block.create.brass_tunnel.tooltip.behaviour2": "_黄铜隧道_的_输入_方向和_输出_方向都带有过滤插槽。如果进入的物品不满足隧道输出端的过滤条件,则该物品会从并排的其他隧道出口传出。", - "block.create.brass_tunnel.tooltip.condition3": "分配", - "block.create.brass_tunnel.tooltip.behaviour3": "_黄铜隧道_可以为并排的传送带路线提供多个物品分配的方案。", - "block.create.brass_tunnel.tooltip.control1": "扳手右击侧面时", - "block.create.brass_tunnel.tooltip.action1": "如果传送带隧道串联的数量达到三个或以上,可在位于中间的隧道侧面上开启关闭百叶窗。", - "block.create.brass_tunnel.tooltip.control2": "手持扳手在隧道顶部滚动鼠标滚轮", - "block.create.brass_tunnel.tooltip.action2": "更改_隧道_的分配模式。", - - "block.create.copper_casing.tooltip": "铜机壳", - "block.create.copper_casing.tooltip.summary": "具有多种用途的坚固机壳,可用于装饰。", - "block.create.copper_casing.tooltip.condition1": "在流体管道上使用时", - "block.create.copper_casing.tooltip.behaviour1": "将管道包裹进机壳,加壳的管道会与临近的管道区分开来,防止它们自动连接到一起。", - - "block.create.encased_fluid_pipe.tooltip": "流体管道箱", - "block.create.encased_fluid_pipe.tooltip.summary": "用铜机壳加固后的流体管道。", - - "block.create.copper_valve_handle.tooltip": "铜阀门手轮", - "block.create.copper_valve_handle.tooltip.summary": "精确的动力来源,需要玩家手动操作。注意不要让自己太累!", - "block.create.copper_valve_handle.tooltip.condition1": "右击使用时", - "block.create.copper_valve_handle.tooltip.behaviour1": "为连接的设备提供动力。潜行状态下反向旋转。", - "block.create.seat.tooltip": "坐垫", "block.create.seat.tooltip.summary": "坐下来享受旅程吧!坐垫将会把玩家固定在一个移动装置上。也可以用来作为居家装饰,毕竟他有许多颜色。", "block.create.seat.tooltip.condition1": "右击坐垫", "block.create.seat.tooltip.behaviour1": "会使得玩家坐在_坐垫_上,L-Shift可离开_坐垫_。", - "block.create.chute.tooltip": "溜槽", - "block.create.chute.tooltip.summary": "用于_收集_并_垂直_或_对角_进行物品_传输_。可以从_容器_中抽取也可向_容器_输入。它的侧面可以被_漏斗_、_侧装漏斗_等传输设备交互", - "block.create.chute.tooltip.condition1": "当被上方的鼓风机通风时", - "block.create.chute.tooltip.behaviour1": "由_鼓风机_驱动的_溜槽_可由下向上传输_物品_,可以从_置物台_或者_传送带_上吸取物品。", - - "block.create.depot.tooltip": "置物台", - "block.create.depot.tooltip.summary": "一个方便的放置物品的地方。它为多台机器提供了一个交互点", - "block.create.depot.tooltip.condition1": "右击置物台", - "block.create.depot.tooltip.behaviour1": "可以在_置物台_放置或取出物品。可以与_传送带_交互的方块或装置也可以与_置物台_交互。", - "item.create.blaze_cake.tooltip": "烈焰蛋糕", "item.create.blaze_cake.tooltip.summary": "为辛勤劳作的_烈焰人_精心准备的美味。让他们兴奋起来吧!", - "item.create.empty_blaze_burner.tooltip": "空的烈焰人燃烧室", - "item.create.empty_blaze_burner.tooltip.summary": "你火热的朋友的一个小小的铁质的家。我相信你会好好利用他们的!", - "item.create.empty_blaze_burner.tooltip.condition1": "当对着烈焰人或烈焰人刷怪笼使用时", - "item.create.empty_blaze_burner.tooltip.behaviour1": "将烈焰人_捕获_至物品中", - - "block.create.fluid_pipe.tooltip": "流体管道", - "block.create.fluid_pipe.tooltip.summary": "用于传输_流体_。需要一个_动力泵_来提供压强。", - "block.create.fluid_pipe.tooltip.condition1": "转移流体", - "block.create.fluid_pipe.tooltip.behaviour1": "可以与_流体容器_如_储罐_或_工作盆_相连_。裸露的_管道_末端也可以排放或抽取流体。注意别漏水了!", - "block.create.fluid_pipe.tooltip.control1": "使用扳手右击", - "block.create.fluid_pipe.tooltip.action1": "如果可能的话,在管道侧面开启/关闭窗口。", - - "block.create.hose_pulley.tooltip": "软管滑轮", - "block.create.hose_pulley.tooltip.summary": "用于在_世界_中放置或排放大量的液体。", - "block.create.hose_pulley.tooltip.condition1": "接入动力时", - "block.create.hose_pulley.tooltip.behaviour1": "升高或降低软管,软管的位置决定了抽取或填充液体的高度。", - "block.create.hose_pulley.tooltip.condition2": "当软管滑轮抽取流体时", - "block.create.hose_pulley.tooltip.behaviour2": "开始从软管末端将其从中取出_流体方块_。巨大的流体湖将被认定是_无限_的", - "block.create.hose_pulley.tooltip.condition3": "当流体从软管滑轮中排出时", - "block.create.hose_pulley.tooltip.behaviour3": "开始向世界填充流体,直到达到_软管末端_的高度。", - - "block.create.fluid_tank.tooltip": "流体储罐", - "block.create.fluid_tank.tooltip.summary": "_存储_任意_流体_,根据整体结构的宽和高决定其储存容量", - "block.create.fluid_tank.tooltip.condition1": "使用扳手右击", - "block.create.fluid_tank.tooltip.behaviour1": "打开或关闭窗户", - - "block.create.creative_fluid_tank.tooltip": "创造流体储罐", - "block.create.creative_fluid_tank.tooltip.summary": "此流体储罐能够_无限的复制_任何流体,根据整体结构的宽和高决定其储存容量", - "block.create.creative_fluid_tank.tooltip.condition1": "罐中装有流体时", - "block.create.creative_fluid_tank.tooltip.behaviour1": "任意的_流体提取设备_能够从中提取无穷无尽的指定流体,流体的导入功能同时也会无效。", - "block.create.creative_fluid_tank.tooltip.condition2": "使用扳手右击", - "block.create.creative_fluid_tank.tooltip.behaviour2": "打开或关闭窗户", - - "block.create.fluid_valve.tooltip": "流体阀门", - "block.create.fluid_valve.tooltip.summary": "阻止流体沿管道向前流动。", - "block.create.fluid_valve.tooltip.condition1": "控制流量", - "block.create.fluid_valve.tooltip.behaviour1": "施加的_旋转力_将迫使阀门关闭,从而阻止流体流动。_逆转旋转方向_以重新打开阀门。", - - "block.create.mechanical_pump.tooltip": "动力泵", - "block.create.mechanical_pump.tooltip.summary": "_接入动力_,能迫使流体_沿管道指定方向移动_。在两个方向上都有_最大的作用范围_。(默认为16个方块距离)", - "block.create.mechanical_pump.tooltip.condition1": "流体流向", - "block.create.mechanical_pump.tooltip.behaviour1": "_接入动力_后会产生压力,迫使流体通过管道。_反转动力_的方向以切换流体_流向_。", - "block.create.mechanical_pump.tooltip.control1": "扳手右击时", - "block.create.mechanical_pump.tooltip.action1": "反转泵的方向,从而改变默认的流体流向", - - "block.create.smart_fluid_pipe.tooltip": "智能流体管道", - "block.create.smart_fluid_pipe.tooltip.summary": "带有过滤器的_流体管道_。可以指定其只流通特定的_流体_。", - "block.create.smart_fluid_pipe.tooltip.condition1": "当流体进入时", - "block.create.smart_fluid_pipe.tooltip.behaviour1": "进入的流体与_过滤器_不匹配时,智能管道将_阻止_其通过。", - "block.create.smart_fluid_pipe.tooltip.condition2": "与流体容器相邻时", - "block.create.smart_fluid_pipe.tooltip.behaviour2": "_智能管道_会开始从_相邻的任何容器_中抽取与其过滤器匹配的流体。", - - "block.create.spout.tooltip": "注液器", - "block.create.spout.tooltip.summary": "一种用于_装罐_的机器。", - "block.create.spout.tooltip.condition1": "流体传输", - "block.create.spout.tooltip.behaviour1": "当下方放置类似_玻璃瓶_,_桶_这样的流体容器物品时,注液器会试图将自身存储的液体注入到下方的_流体容器物品_中。", - "block.create.spout.tooltip.condition2": "流体自动化", - "block.create.spout.tooltip.behaviour2": "注液器位于_传送带_或者_置物台_上方时,将自动为流水线上的_流体容器物品_进行_注液_。", - - "block.create.item_drain.tooltip": "分液池", - "block.create.item_drain.tooltip.summary": "一种用于_抽空流体容器物品_的置物台", - "block.create.item_drain.tooltip.condition1": "流体传输", - "block.create.item_drain.tooltip.behaviour1": "当从侧面导入诸如_桶_或_瓶子_之类的_流体容器物品_时,_分液池_将尝试将物品内的液体倒入其_自身的液体物品栏_中。空的_流体容器物品_将被弹出至_另一侧_。", - - "block.create.mechanical_arm.tooltip": "动力臂", - "block.create.mechanical_arm.tooltip.summary": "移动_物品_的高级装置", - "block.create.mechanical_arm.tooltip.condition1": "转移物品", - "block.create.mechanical_arm.tooltip.behaviour1": "可以从任意_可够到的设备_中拿取或放置物品,比如说_传送带_,_置物台_,_漏斗_以及_动力合成器_。", - "block.create.mechanical_arm.tooltip.control1": "手持时", - "block.create.mechanical_arm.tooltip.action1": "右击一个_可使用的容器_来将其设置为_动力臂_的_输入端_。右键双击将其设置为_动力臂_的_输出端_。", - "block.create.mechanical_arm.tooltip.control2": "手持扳手滚动滚轮", - "block.create.mechanical_arm.tooltip.action2": "调整_动力臂_输出物品时的调度模式。", - "item.create.wand_of_symmetry.tooltip": "对称之杖", "item.create.wand_of_symmetry.tooltip.summary": "完美地镜面复制工作区域内的方块到另一边", "item.create.wand_of_symmetry.tooltip.condition1": "当在快捷栏时", @@ -1351,15 +1293,6 @@ "item.create.wand_of_symmetry.tooltip.control3": "当潜行右击时", "item.create.wand_of_symmetry.tooltip.action3": "打开_配置界面_。", - "item.create.handheld_blockzapper.tooltip": "手持式方块放置器", - "item.create.handheld_blockzapper.tooltip.summary": "新颖的小工具,可以远距离放置或更换方块。", - "item.create.handheld_blockzapper.tooltip.control1": "当左击方块时", - "item.create.handheld_blockzapper.tooltip.action1": "将工具放置的方块设置为该方块。", - "item.create.handheld_blockzapper.tooltip.control2": "当右击方块时", - "item.create.handheld_blockzapper.tooltip.action2": "_放置_或_替换_目标方块。", - "item.create.handheld_blockzapper.tooltip.control3": "当潜行右击时", - "item.create.handheld_blockzapper.tooltip.action3": "打开_配置界面_。", - "item.create.handheld_worldshaper.tooltip": "手持式环境塑形器", "item.create.handheld_worldshaper.tooltip.summary": "_创造_大陆和山脉的手持工具", "item.create.handheld_worldshaper.tooltip.control1": "当左击方块时", @@ -1374,13 +1307,19 @@ "item.create.tree_fertilizer.tooltip.condition1": "在树苗上使用时", "item.create.tree_fertilizer.tooltip.behaviour1": "使得该树_无视_它的_生长空间条件_,立刻长大。", - "item.create.deforester.tooltip": "树林毁灭者", - "item.create.deforester.tooltip.summary": "一把_光辉四溢的斧子_,能够瞬间砍倒一棵树", - "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.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.filter.tooltip": "过滤器", "item.create.filter.tooltip.summary": "可用于_精确_控制物流设备的_输出_以及_输入_,使得通过的物品流与_一组_物品或者数个_相嵌套的过滤器_相匹配。", @@ -1421,56 +1360,14 @@ "block.create.schematicannon.tooltip": "蓝图加农炮", "block.create.schematicannon.tooltip.summary": "发射方块,重新构建已在世界中部署的_蓝图_,会使用相邻箱子中的物品进行填充,_火药_作为燃料。", - "block.create.schematicannon.tooltip.control1": "当右击时", - "block.create.schematicannon.tooltip.action1": "打开_界面_", + "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.condition1": "放入空白蓝图时", "block.create.schematic_table.tooltip.behaviour1": "可从 Schematics 文件夹中上传所选文件。", - "block.create.shaft.tooltip": "传动杆", - "block.create.shaft.tooltip.summary": "将_旋转_进行直线传递。", - - "block.create.cogwheel.tooltip": "齿轮", - "block.create.cogwheel.tooltip.summary": "将_旋转_进行直线传递,或者传递旋转到临近的_齿轮_上", - - "block.create.large_cogwheel.tooltip": "大齿轮", - "block.create.large_cogwheel.tooltip.summary": "大号齿轮传动结构,连接到_齿轮_时改变其_转速_。", - - "block.create.encased_shaft.tooltip": "传动杆箱", - "block.create.encased_shaft.tooltip.summary": "将_旋转_进行直线传递,适合用于需要穿墙传递旋转的情景。", - - "block.create.gearbox.tooltip": "十字齿轮箱", - "block.create.gearbox.tooltip.summary": "将_旋转转送_到_四个方向上_,同时反转直线方向上的旋转方向。", - - "block.create.gearshift.tooltip": "反转齿轮箱", - "block.create.gearshift.tooltip.summary": "用于反转传动杆_旋转方向_的开关。", - "block.create.gearshift.tooltip.condition1": "当提供红石信号时", - "block.create.gearshift.tooltip.behaviour1": "_更改_旋转方向。", - - "block.create.clutch.tooltip": "离合器", - "block.create.clutch.tooltip.summary": "可用于控制与其相连的传动杆的转动/停转。", - "block.create.clutch.tooltip.condition1": "当提供红石信号时", - "block.create.clutch.tooltip.behaviour1": "_停止_另一侧的旋转。", - - "block.create.encased_chain_drive.tooltip": "链式传动箱", - "block.create.encased_chain_drive.tooltip.summary": "将动能_传递_给直线上或侧面相贴的_链式传动箱_,相邻的链式传动箱会结合在一起,前提是接触面没有传动杆. 它们的朝向不必一致。", - "block.create.encased_chain_drive.tooltip.condition1": "互相连接时", - "block.create.encased_chain_drive.tooltip.behaviour1": "_链式传动箱组_中的_链式传动箱_将以相同的速度旋转。", - - "block.create.adjustable_chain_gearshift.tooltip": "可调节链式传动箱", - "block.create.adjustable_chain_gearshift.tooltip.summary": "将动能_传递_给直线上或侧面相贴的_链式传动箱_,向其通入_红石信号_,可以控制它与其它链式传动箱相接的是何种大小的齿轮。", - "block.create.adjustable_chain_gearshift.tooltip.condition1": "红石控制", - "block.create.adjustable_chain_gearshift.tooltip.behaviour1": "没有红石信号时,_链式传动箱组_中的_链式传动箱_将以相同的速度旋转。通入满值红石信号时,_链式传动箱组_中除自身以外的_链式传动箱_将以两倍的速度旋转。介于两者之间的任何结果都将使其速度提高1-2倍。", - - "item.create.belt_connector.tooltip": "传送带", - "item.create.belt_connector.tooltip.summary": "用_传送带_连接两个或多个_传动杆_,连接的传动杆将具有完全相同的转速和方向。传送带可以_传输实体_和_物品_。", - "item.create.belt_connector.tooltip.control1": "当右击传动杆时", - "item.create.belt_connector.tooltip.action1": "选择传动杆作为传送带的传输点,选定的两个传动杆都必须相互_垂直_,_水平_或_对角平齐_。", - "item.create.belt_connector.tooltip.control2": "当潜行右击时", - "item.create.belt_connector.tooltip.action2": "_重置_传送带的第一个选定位置", - "item.create.goggles.tooltip": "工程师护目镜", "item.create.goggles.tooltip.summary": "一副可以扩增显示_动力学信息_的实用眼镜。", "item.create.goggles.tooltip.condition1": "当装备时", @@ -1487,29 +1384,9 @@ "item.create.wrench.tooltip.control2": "当潜行右击时", "item.create.wrench.tooltip.action2": "会_拆除动力组件_并将其移动到你的背包中。", - "block.create.creative_motor.tooltip": "创造马达", - "block.create.creative_motor.tooltip.summary": "可以配置的_动力_来源", - - "block.create.water_wheel.tooltip": "水车", - "block.create.water_wheel.tooltip.summary": "从相邻的_流动水_中获得_动力_。", - - "block.create.encased_fan.tooltip": "鼓风机", - "block.create.encased_fan.tooltip.summary": "有多种用途,主要可以将_动力_和_风力_进行互相转换。", - "block.create.encased_fan.tooltip.condition1": "当被红石信号激活后", - "block.create.encased_fan.tooltip.behaviour1": "可将鼓风机下方的_热能_(火、熔岩等)转化成_动能_,需要将鼓风机面朝下方摆放。", - "block.create.encased_fan.tooltip.condition2": "接入动力时", - "block.create.encased_fan.tooltip.behaviour2": "根据旋转方向_推动_或者_吸引_实体,强度和速度取决于给予的动力。", - "block.create.encased_fan.tooltip.condition3": "当对着特定方块吹风时", - "block.create.encased_fan.tooltip.behaviour3": "微量的_液体_以及_火焰_会被吹入气流中,这种气流可以用于_处理物品_。", - "block.create.nozzle.tooltip": "分散网", "block.create.nozzle.tooltip.summary": "依附在鼓风机上,能够将鼓风机的效果分散到_各个方向_。", - "block.create.hand_crank.tooltip": "手摇曲柄", - "block.create.hand_crank.tooltip.summary": "一种简单的动力源,需要_人工转动_,注意不要让自己太累!", - "block.create.hand_crank.tooltip.condition1": "当使用时", - "block.create.hand_crank.tooltip.behaviour1": "向依附的结构提供_动力_,_潜行_时将会提供_反向_的旋转力", - "block.create.cuckoo_clock.tooltip": "布谷鸟闹钟", "block.create.cuckoo_clock.tooltip.summary": "精致的工艺品,能够记录时间", "block.create.cuckoo_clock.tooltip.condition1": "接入动力时", @@ -1518,194 +1395,6 @@ "block.create.turntable.tooltip": "转盘", "block.create.turntable.tooltip.summary": "让旋转力给你带来一场刺激的旋转风车体验。", - "block.create.millstone.tooltip": "石磨", - "block.create.millstone.tooltip.summary": "一个能_研磨物品_的动能装置,可以被临近的_齿轮_供能,或者可以在底部用传动杆供能,成品必须被提取出石磨", - "block.create.millstone.tooltip.condition1": "当接入动力时", - "block.create.millstone.tooltip.behaviour1": "开始根据_研磨配方_来处理被放入的物品,物品可以从侧面和上面放入。", - "block.create.millstone.tooltip.condition2": "当右击时", - "block.create.millstone.tooltip.behaviour2": "手动取出研磨后的产物。", - - "block.create.crushing_wheel.tooltip": "粉碎轮", - "block.create.crushing_wheel.tooltip.summary": "一对能够_粉碎一切_的粉碎轮。向两个粉碎轮提供_向内_且_相反的转速_后开始工作", - "block.create.crushing_wheel.tooltip.condition1": "当两个粉碎轮一起运作时", - "block.create.crushing_wheel.tooltip.behaviour1": "_粉碎物品_并获得相应产物(建议配合jei查看)", - - "block.create.mechanical_press.tooltip": "动力辊压机", - "block.create.mechanical_press.tooltip.summary": "一个强力的活塞式机器,用于压制其下方的物品。", - "block.create.mechanical_press.tooltip.condition1": "当提供红石信号时", - "block.create.mechanical_press.tooltip.behaviour1": "_压制_其下方的物品。", - "block.create.mechanical_press.tooltip.condition2": "在传送带上方时", - "block.create.mechanical_press.tooltip.behaviour2": "_自动压缩_经过传送带的物品。", - "block.create.mechanical_press.tooltip.condition3": "在工作盆上方时", - "block.create.mechanical_press.tooltip.behaviour3": "开始_压缩_配方中允许压缩的物品。", - - "block.create.basin.tooltip": "工作盆", - "block.create.basin.tooltip.summary": "一种方便的_物品容器_,常常与_辊压机_和_搅拌机_配合使用,可以被_红石比较器_检测。其上自带有一个过滤槽,你可以指定该工作盆用于制作何种产物。", - "block.create.basin.tooltip.condition1": "自动输出", - "block.create.basin.tooltip.behaviour1": "当有开放式物品栏(例如传送带,其他的工作盆,置物台等)位于工作盆的一侧下方时,它们将自动接收在工作盆中产出的任何物品/流体并输出。这对自动化很有帮助。", - - "block.create.blaze_burner.tooltip": "烈焰人燃烧室", - "block.create.blaze_burner.tooltip.summary": "一个用于加热_工作盆_的设备,由烈焰人来驱动。", - "block.create.blaze_burner.tooltip.condition1": "放置于工作盆下方时", - "block.create.blaze_burner.tooltip.behaviour1": "为工作盆配方_提供热量_。", - "block.create.blaze_burner.tooltip.condition2": "对烈焰人燃烧室使用可燃物时", - "block.create.blaze_burner.tooltip.behaviour2": "_消耗_可燃物,并根据该物品在_熔炉中的燃烧时间_来延长_烈焰加热器的燃烧时间_,使用_烈焰蛋糕_投喂将提供_更高的温度_。", - - "block.create.reinforced_rail.tooltip": "强化铁轨", - "block.create.reinforced_rail.tooltip.summary": "牢固稳定的铁轨,下方不需要_方块支撑_。", - - "block.create.mechanical_mixer.tooltip": "动力搅拌器", - "block.create.mechanical_mixer.tooltip.summary": "这种动力搅拌器提供了一些可自动合成的,多原料无序合成的配方。它需要稳定且足够快的转速,并且下方需要放置_工作盆_(中间需要一格高)。", - "block.create.mechanical_mixer.tooltip.condition1": "当位于工作盆上方", - "block.create.mechanical_mixer.tooltip.behaviour1": "一旦盆内含有了所有必要的原料,搅拌器就会开始搅拌。若想要屏蔽掉那些不需要的配方,你可以在盆上添加过滤,或者在必要原料齐全之前停止向搅拌器供应动力。", - - "block.create.mechanical_crafter.tooltip": "动力合成器", - "block.create.mechanical_crafter.tooltip.summary": "这种动力组装装置可以_自动化_任何_有序合成_配方。根据想要合成的物品的_合成表尺寸_来摆放_相应数量_的动力合成器,并且用扳手调整物品在合成器里的_传动方向_以让他们收束在一起合成并输出", - "block.create.mechanical_crafter.tooltip.condition1": "接入动力时", - "block.create.mechanical_crafter.tooltip.behaviour1": "当机器中_所有_的物品槽都有物品时,将会启动所有的合成器进行工作。", - "block.create.mechanical_crafter.tooltip.condition2": "通入红石脉冲", - "block.create.mechanical_crafter.tooltip.behaviour2": "强制启动当前网格中所有给定的_材料_的_合成_", - "block.create.mechanical_crafter.tooltip.control1": "当在机器前方使用扳手时", - "block.create.mechanical_crafter.tooltip.action1": "将会改变物品移动的方向。要合成一个物品,所有原料必须被_移动到一起_,并且在阵列的_外缘_被弹出机器", - "block.create.mechanical_crafter.tooltip.control2": "当侧方或者后方使用扳手时", - "block.create.mechanical_crafter.tooltip.action2": "连接相邻的合成器的物品栏,这样_相同_的物品就会自动进入所有相互连接的合成器", - - "block.create.furnace_engine.tooltip": "熔炉引擎", - "block.create.furnace_engine.tooltip.summary": "一种强力的_旋转动能_的来源,但是需要_正在工作_的_熔炉_才能正常运作。", - "block.create.furnace_engine.tooltip.condition1": "当连接到正在燃烧的熔炉", - "block.create.furnace_engine.tooltip.behaviour1": "将会带动_相连_的_飞轮_(需要间隔一格),用高炉速度更快。", - - "block.create.flywheel.tooltip": "飞轮", - "block.create.flywheel.tooltip.summary": "一种大型的金属轮,能将_熔炉引擎_提供的动能稳定化输出,需要与_熔炉引擎_间隔一个方块。", - "block.create.flywheel.tooltip.condition1": "当连接正在输出的熔炉引擎", - "block.create.flywheel.tooltip.behaviour1": "将会提供相应的_旋转动能_。", - - "block.create.portable_storage_interface.tooltip": "移动存储接口", - "block.create.portable_storage_interface.tooltip.summary": "为动力活塞、装配矿车、旋转轴承、滑轮_等运动结构_设计的_物流接口_,_运动结构_和_固定结构_之间的物品交换站,两个接口会面时将_自动对接_,且必须彼此隔开 1-2 个方块。", - "block.create.portable_storage_interface.tooltip.condition1": "装配在运动结构上时", - "block.create.portable_storage_interface.tooltip.behaviour1": "移动到能够满足与_固定结构_上的_移动式存储接口_对接的条件后,运动结构会_短暂地停下_,开始对接,并直接与_运动结构上的_存储容器_交互,进行物品的_输入输出_。", - "block.create.portable_storage_interface.tooltip.condition2": "通入红石信号时时", - "block.create.portable_storage_interface.tooltip.behaviour2": "立即断开任何处于激活状态的连接。", - - "block.create.portable_fluid_interface.tooltip": "移动流体接口", - "block.create.portable_fluid_interface.tooltip.summary": "为动力活塞、装配矿车、旋转轴承、滑轮_等运动结构_设计的_流体接口_,_运动结构_和_固定结构_之间的流体交换站,两个接口会面时将_自动对接_,且必须彼此隔开 1-2 个方块。", - "block.create.portable_fluid_interface.tooltip.condition1": "装配在运动结构上时", - "block.create.portable_fluid_interface.tooltip.behaviour1": "移动到能够满足与_固定结构_上的_移动式流体接口_对接的条件后,运动结构会_短暂地停下_,开始对接,并直接与_运动结构_上的_流体储罐_交互,进行流体的_导入导出_。", - "block.create.portable_fluid_interface.tooltip.condition2": "通入红石信号时时", - "block.create.portable_fluid_interface.tooltip.behaviour2": "立即断开任何处于激活状态的连接。", - - "block.create.rotation_speed_controller.tooltip": "转速控制器", - "block.create.rotation_speed_controller.tooltip.summary": "一个可以变换所连接齿轮旋转速度的元件", - "block.create.rotation_speed_controller.tooltip.condition1": "接入大齿轮时", - "block.create.rotation_speed_controller.tooltip.behaviour1": "通过_鼠标滚轮_调整接入动力的_转速_,传递给连接的_大齿轮_,连接的大齿轮需要放置在其上方。", - - "block.create.mechanical_piston.tooltip": "动力活塞", - "block.create.mechanical_piston.tooltip.summary": "活塞的高级版本,使用_旋转动能_精确地移动其前方的方块,背面可放置活塞杆延长活塞范围,没有活塞杆将不会工作,使用_底盘_或者_粘液块_可以移动多行方块。", - "block.create.mechanical_piston.tooltip.condition1": "推拉活塞时", - "block.create.mechanical_piston.tooltip.behaviour1": "活塞的_速度_和_方向_与所接受_转速_的_大小_以及_方向_相关。", - - "block.create.piston_extension_pole.tooltip": "活塞杆", - "block.create.piston_extension_pole.tooltip.summary": "用于增加_动力活塞_的移动范围", - "block.create.piston_extension_pole.tooltip.condition1": "当连接到动力活塞时", - "block.create.piston_extension_pole.tooltip.behaviour1": "活塞的移动范围将扩大", - - "block.create.mechanical_bearing.tooltip": "动力轴承", - "block.create.mechanical_bearing.tooltip.summary": "使用旋转力旋转_大型结构_。", - "block.create.mechanical_bearing.tooltip.condition1": "接入动力时", - "block.create.mechanical_bearing.tooltip.behaviour1": "开始使相接的方块旋转。使用_机壳底盘_,_粘液球_或者_强力胶_将方块连接在一起,可以使得动力轴承带动更多的方块。", - - "block.create.windmill_bearing.tooltip": "风车轴承", - "block.create.windmill_bearing.tooltip.summary": "借助_风的力量_创造_动力_。设计你的独特风车,让其肆意旋转吧!", - "block.create.windmill_bearing.tooltip.condition1": "右击时", - "block.create.windmill_bearing.tooltip.behaviour1": "启动轴承,提供由其_附加结构_的旋转产生的动力。结构必须包括合适的_风帆_或_羊毛_。使用_机壳底盘_,_粘液块_或_强力胶_可以带动更多方块旋转。", - - "block.create.sail_frame.tooltip": "风帆框架", - "block.create.sail_frame.tooltip.summary": "实用的建筑方块,而将其安装于_风车轴承_上并组成特定结构时,它又能产出动力学能量。", - - "block.create.white_sail.tooltip": "风帆", - "block.create.white_sail.tooltip.summary": "可用于_组装风车_的结构方块,不俗的动力来源,有多种颜色。", - "block.create.white_sail.tooltip.condition1": "使用染料右击时", - "block.create.white_sail.tooltip.behaviour1": "改变颜色。", - - "block.create.clockwork_bearing.tooltip": "时钟轴承", - "block.create.clockwork_bearing.tooltip.summary": "一种高级的机械轴承,可以根据当前游戏内时间旋转两个不同的指针", - "block.create.clockwork_bearing.tooltip.condition1": "接入动力时", - "block.create.clockwork_bearing.tooltip.behaviour1": "旋转第一个连接的结构作为时针,第二个连接的结构作为分针", - - "block.create.sequenced_gearshift.tooltip": "可编程齿轮箱", - "block.create.sequenced_gearshift.tooltip.summary": "一种可编程的组件,可以根据内部的指令设计旋转的_方向_,_速度_,以及_距离_。此组件可以有效配合活塞和轴承等使用。最高可让其按_顺序_执行_ 5 条指令_。在高转速时工作精度可能会下降。", - "block.create.sequenced_gearshift.tooltip.condition1": "当通入红石信号时", - "block.create.sequenced_gearshift.tooltip.behaviour1": "在接入动能的情况下,执行指令。", - "block.create.sequenced_gearshift.tooltip.condition2": "当右击时", - "block.create.sequenced_gearshift.tooltip.behaviour2": "将打开_配置界面_", - - "block.create.cart_assembler.tooltip": "矿车装配站", - "block.create.cart_assembler.tooltip.summary": "当放置于铁轨上时,将会_装配_或者_卸载_穿越它的矿车运动结构。按下 [Ctrl] 可以查阅它在不同轨道上的行为。", - "block.create.cart_assembler.tooltip.condition1": "单个矿车结构", - "block.create.cart_assembler.tooltip.behaviour1": "只有_单个_矿车装置,整个结构在旋转时会以这_单个_矿车为基点。使用_扳手_可以指定结构的_旋转行为_。", - "block.create.cart_assembler.tooltip.condition2": "连接矿车结构", - "block.create.cart_assembler.tooltip.behaviour2": "由_一整个结构所相连_的两个矿车装置,这_两个矿车_会被这_架设于它们之间的结构连接起来。这一结构的行为类似于_矿车联轴器_。", - "block.create.cart_assembler.tooltip.control1": "放置于轨道上时", - "block.create.cart_assembler.tooltip.action1": "通入红石信号时_装配_经过的矿车,未激活时_卸载_经过的矿车。", - "block.create.cart_assembler.tooltip.control2": "放置于充能铁轨上时", - "block.create.cart_assembler.tooltip.action2": "通入红石信号时_装配_并加速矿车,未激活时_卸载_并停住经过的矿车。", - "block.create.cart_assembler.tooltip.control3": "放置在探测铁轨上时", - "block.create.cart_assembler.tooltip.action3": "_装配未装配_过的矿车,_卸载装配_过的矿车。", - "block.create.cart_assembler.tooltip.control4": "放置在激活铁轨上时", - "block.create.cart_assembler.tooltip.action4": "通入红石信号时_卸载_矿车。", - - "block.create.rope_pulley.tooltip": "绳索滑轮", - "block.create.rope_pulley.tooltip.summary": "带动与其相接的_方块_以及_垂直方向上的结构_。你可以利用使用_底盘_、_粘液球_或_强力胶_来移动更多的方块。", - "block.create.rope_pulley.tooltip.condition1": "接入动力时", - "block.create.rope_pulley.tooltip.behaviour1": "根据输入的转速的大小以及方向,移动链接的结构。", - - "block.create.linear_chassis.tooltip": "机壳底盘", - "block.create.linear_chassis.tooltip.summary": "一种可配置的基础方块,用于连接运动结构。", - "block.create.linear_chassis.tooltip.condition1": "被移动时", - "block.create.linear_chassis.tooltip.behaviour1": "_带动_所有_相接的底盘_,以及上方一定范围内的柱形方块进行同方向移动。上方的方块想要被_带动_,底盘上面的面必须是_有黏性的_。(详参 Ctrl)", - "block.create.linear_chassis.tooltip.condition2": "手持扳手查看时", - "block.create.linear_chassis.tooltip.behaviour2": "配置可连接方块的_范围_。按住 _Ctrl_ 可以同时配置相连的其他底盘。", - "block.create.linear_chassis.tooltip.control1": "当用粘液球右击时", - "block.create.linear_chassis.tooltip.action1": "使得被使用面具有_黏性_。当移动时,无论具体的移动方向如何,底盘都会_带动_与该面相接的方块。", - - "block.create.secondary_linear_chassis.tooltip": "机壳底盘2号", - "block.create.secondary_linear_chassis.tooltip.summary": "第二种_机壳底盘_,不会与第一种机壳底盘互相连接。", - - "block.create.radial_chassis.tooltip": "旋转底盘", - "block.create.radial_chassis.tooltip.summary": "一种可配置的基础方块,用于连接运动结构。", - "block.create.radial_chassis.tooltip.condition1": "当被旋转时", - "block.create.radial_chassis.tooltip.behaviour1": "_带动_所有_附着于它_的,位于_其上方成柱形_的方块。侧面所附着的方块必需在一定的范围内且附着的面必须是有黏性的,方可被带动。(详参 Ctrl)", - "block.create.radial_chassis.tooltip.condition2": "手持扳手查看时", - "block.create.radial_chassis.tooltip.behaviour2": "配置可连接方块的_范围_。按住_Ctrl_可以同时配置相连的其他底盘。", - "block.create.radial_chassis.tooltip.control1": "当用粘液球右击时", - "block.create.radial_chassis.tooltip.action1": "使旋转底盘的这一面_具有黏性_。所有该方向上与其相连的方块会与其_一同移动_。", - - "block.create.mechanical_drill.tooltip": "动力钻头", - "block.create.mechanical_drill.tooltip.summary": "用于_破坏方块_的装置,可以被_动力活塞_和_动力轴承_等移动设备带动", - "block.create.mechanical_drill.tooltip.condition1": "当接入动力时", - "block.create.mechanical_drill.tooltip.behaviour1": "_原地_破坏正前方的方块,且_伤害_在一定范围内生物及玩家。", - "block.create.mechanical_drill.tooltip.condition2": "当移动时", - "block.create.mechanical_drill.tooltip.behaviour2": "横向或纵向沿路破坏其所_碰到_的方块。", - - "block.create.mechanical_harvester.tooltip": "动力收割机", - "block.create.mechanical_harvester.tooltip.summary": "适用于中型作物自动化的收割机,可以被_动力活塞_和_动力轴承_等带动。", - "block.create.mechanical_harvester.tooltip.condition1": "当移动时", - "block.create.mechanical_harvester.tooltip.behaviour1": "当收割机移动至_成熟作物_时,_收割_作物并将作物变为初始生长状态。", - - "block.create.mechanical_plough.tooltip": "动力犁", - "block.create.mechanical_plough.tooltip.summary": "犁是一个非常有用的多功能方块,它可以被_动力活塞_和_动力轴承_等带动", - "block.create.mechanical_plough.tooltip.condition1": "当移动时", - "block.create.mechanical_plough.tooltip.behaviour1": "可以打掉无碰撞体积的一些_附着方块_,比如火把和雪等。可以在不伤害实体的情况下移动它们。能像_锄头_一样翻土耕田。", - - "block.create.mechanical_saw.tooltip": "动力锯", - "block.create.mechanical_saw.tooltip.summary": "可以用于_砍树_,也可以用于_切割方块_,可以被_动力活塞_和_动力轴承_等带动", - "block.create.mechanical_saw.tooltip.condition1": "当向上放置时", - "block.create.mechanical_saw.tooltip.behaviour1": "对掉落或放置在其上方的方块应用_板材切割_以及_石材切割配方_。当可能出现多种产物时,它会进行循环输出,除非使用_过滤器_指定其输出产物。", - "block.create.mechanical_saw.tooltip.condition2": "当水平放置时", - "block.create.mechanical_saw.tooltip.behaviour2": "可以破坏其面前的_原木_。如果这些原木支撑着_一整颗树_,这棵_树_会被锯子_砍倒_。", - "block.create.mechanical_saw.tooltip.condition3": "当移动时", - "block.create.mechanical_saw.tooltip.behaviour3": "将会_砍倒_碰撞到的树。", - "block.create.stockpile_switch.tooltip": "存量转换器", "block.create.stockpile_switch.tooltip.summary": "根据连接的容器中_储存物品_的数量切换红石信号强度。自带有过滤槽,与_比较器_不同的是,你可以配置_存量转换器_信号反转的_阈值_。", "block.create.stockpile_switch.tooltip.condition1": "当右击时", @@ -1714,126 +1403,93 @@ "block.create.content_observer.tooltip": "物品侦测器", "block.create.content_observer.tooltip.summary": "检测_容器_和_传送带_中过滤器匹配的物品。当在_物品栏_,_传送带_或者_溜槽所容物_中侦测到匹配的物品时,此组件将发出_红石信号_。当观察到的漏斗_转移匹配的物品_时,此组件将发出_红石脉冲_。", - "block.create.redstone_link.tooltip": "无线红石信号终端", - "block.create.redstone_link.tooltip.summary": "无线红石信号终端,可以使用_任何物品_编辑终端_频道_。虽然距离挺远,但是终归是有限的。", - "block.create.redstone_link.tooltip.condition1": "当启用时", - "block.create.redstone_link.tooltip.behaviour1": "接收相同_频道_提供的_红石信号_。", - "block.create.redstone_link.tooltip.control1": "当手持方块右击方块时", - "block.create.redstone_link.tooltip.action1": "手持_任意物品_为其设置_频道_,可以使用两种物品组合设置_频道_。", - "block.create.redstone_link.tooltip.control2": "当潜行右击时", - "block.create.redstone_link.tooltip.action2": "在_发射模式_和_接收模式_之间切换。", - - "block.create.nixie_tube.tooltip": "辉光管", - "block.create.nixie_tube.tooltip.summary": "一个精致,且有红石能量激活的_数值_和_文本_显示器。", - "block.create.nixie_tube.tooltip.condition1": "通入红石信号时时", - "block.create.nixie_tube.tooltip.behaviour1": "直观的显示当前_红石信号_的强度", - "block.create.nixie_tube.tooltip.condition2": "被命名牌命名时", - "block.create.nixie_tube.tooltip.behaviour2": "在_沿直线排列_多个辉光管上显示_命名牌内容_。", - - "block.create.redstone_contact.tooltip": "接触式红石信号发生器", - "block.create.redstone_contact.tooltip.summary": "一种用于高级红石装置的设备。只能两两工作。可以被_动力活塞_和_动力轴承_等控制类机器带动。", - "block.create.redstone_contact.tooltip.condition1": "当正对面放置也放置相互朝向的接触信号发生器时", - "block.create.redstone_contact.tooltip.behaviour1": "发出_红石信号_。", - "block.create.redstone_contact.tooltip.condition2": "当移动时", - "block.create.redstone_contact.tooltip.behaviour2": "会使所有与其接触的发生器发出红石信号。", - "block.create.adjustable_crate.tooltip": "可调节板条箱", "block.create.adjustable_crate.tooltip.summary": "该箱子支持玩家对其容量进行调整,最大可以容纳_16组_物品。支持_红石比较器_。", - "block.create.adjustable_crate.tooltip.control1": "当右击时", - "block.create.adjustable_crate.tooltip.action1": "打开箱子", + "block.create.adjustable_crate.tooltip.condition1": "当右击时", + "block.create.adjustable_crate.tooltip.behaviour1": "打开_配置面板_。", "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.deployer.tooltip": "机械手", - "block.create.deployer.tooltip.summary": "_攻击_,_使用_,以及_激活_。这个机器会竭尽所能地_模仿_一个_玩家_的行为。它可以将物品从其自身的_物品栏_中_拿取_出来,或者将物品_存入_其中。", - "block.create.deployer.tooltip.condition1": "接入动能时", - "block.create.deployer.tooltip.behaviour1": "机械手可伸长_两个方块_的距离,取出_缓存区_的物品并使用。", - "block.create.deployer.tooltip.condition2": "当使用扳手右击时", - "block.create.deployer.tooltip.behaviour2": "启用拳头模式,在拳头模式之下,机械手将会试图使用手中的物品_破坏方块_,或者_攻击实体_。", - "block.create.deployer.tooltip.condition3": "配有过滤器时", - "block.create.deployer.tooltip.behaviour3": "只有在机械手手持的物品与_过滤器_物品相_匹配_时才会激活。不匹配的物品无法被其持有;匹配且持有在机械手上的物品无法被提取。", - - "block.create.brass_casing.tooltip": "黄铜机壳", - "block.create.brass_casing.tooltip.summary": "一种坚固的机壳,有多种用途。可以用来包装_传动杆_以及_传送带_。", - - "block.create.pulse_repeater.tooltip": "脉冲中继器", - "block.create.pulse_repeater.tooltip.summary": "一个简单的电路元件,将通过的红石信号变为 1 tick。", - - "block.create.adjustable_repeater.tooltip": "可调节中继器", - "block.create.adjustable_repeater.tooltip.summary": "高级中继器,最大可设置 30 分钟延迟。", - - "block.create.adjustable_pulse_repeater.tooltip": "可调节脉冲中继器", - "block.create.adjustable_pulse_repeater.tooltip.summary": "一种单次 1 tick 的红石脉冲器,可以调节延时至30 min。", - - "block.create.analog_lever.tooltip": "模拟拉杆", - "block.create.analog_lever.tooltip.summary": "一种可以调节任意信号强度的推杆。", - - "block.create.powered_toggle_latch.tooltip": "转换锁存器", - "block.create.powered_toggle_latch.tooltip.summary": "一种拉杆,在红石电路中可以用作转换锁存器。", - - "block.create.powered_latch.tooltip": "锁存器", - "block.create.powered_latch.tooltip.summary": "一种拉杆,在红石电路中用作锁存器,从后方输入将会启用这个拉杆,从侧边输入将会重置这个拉杆。", + "item.create.creative_cake.tooltip": "创造烈焰蛋糕", + "item.create.creative_cake.tooltip.summary": "为辛勤劳作的_烈焰人_精心准备的特别的美味。烈焰人吃了这个以后将_再也不需要燃料_。", + "item.create.creative_cake.tooltip.condition1": "对烈焰人燃烧室右击使用时", + "item.create.creative_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.speedometer.tooltip": "速度表", - "block.create.speedometer.tooltip.summary": "测量并展示连接网络的_旋转速度_,支持使用_红石比较器_。", - "block.create.speedometer.tooltip.condition1": "接入动力时", - "block.create.speedometer.tooltip.behaviour1": "将会用颜色展示速度的大小,_绿色_为慢速、_蓝色_为中速、_紫色_为快速。一些动力组件需要足够的速度等级方能正常工作。", - - "block.create.stressometer.tooltip": "应力表", - "block.create.stressometer.tooltip.summary": "测量并展示连接网络的_应力值_,支持使用_红石比较器_。", - "block.create.stressometer.tooltip.condition1": "接入动力时", - "block.create.stressometer.tooltip.behaviour1": "将会用颜色展示承受的应力。如果_网络过载_则会瘫痪,必须_减少使用机器_或者_增加动力源_。", - "item.create.sand_paper.tooltip": "砂纸", "item.create.sand_paper.tooltip.summary": "用来_打磨_物品的砂纸,可以用_机械手_来实现自动化。", "item.create.sand_paper.tooltip.condition1": "使用时", "item.create.sand_paper.tooltip.behaviour1": "打磨_副手_上或者_准心所指_的物品。", - "item.create.super_glue.tooltip": "强力胶", - "item.create.super_glue.tooltip.summary": "让两个方块互相_粘在一起_,他们将再也无法分开了。", - "item.create.super_glue.tooltip.condition1": "右击使用时", - "item.create.super_glue.tooltip.behaviour1": "有强力胶的方块的_那一面_会变得有黏性。和此面相邻的方块在被_动力活塞_或者_动力轴承_等方块驱动的时候会被一同带动", - "item.create.super_glue.tooltip.condition2": "在副手上时", - "item.create.super_glue.tooltip.behaviour2": "主手放置的方块会被_直接_粘在所放置的方块上", - "item.create.builders_tea.tooltip": "建造工茶饮", "item.create.builders_tea.tooltip.summary": "饮下这杯完美茶饮,开启神清气爽的一天。可以回复_饥饿值_并获得_急迫_效果。", "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.shadow_steel.tooltip": "暗影钢", "item.create.shadow_steel.tooltip.summary": "一种用_虚空_锻造的化合物材料。", + "item.create.shadow_steel.tooltip.condition1": "尚未完工", + "item.create.shadow_steel.tooltip.behaviour1": "该材料在未来可能会有更多的用途。", + + "item.create.linked_controller.tooltip": "无线红石遥控器", + "item.create.linked_controller.tooltip.summary": "提供_六个_可以绑定_无线红石_频道的按钮,用于_遥控_附近的_无线红石信号终端_。", + "item.create.linked_controller.tooltip.condition1": "右击时", + "item.create.linked_controller.tooltip.behaviour1": "_拿起_或_放下_遥控器。拿起遥控器时,_移动_按键将被用来_操作遥控器_而不是移动玩家。", + "item.create.linked_controller.tooltip.condition2": "潜行右击时", + "item.create.linked_controller.tooltip.behaviour2": "打开手动_配置界面_。", + "item.create.linked_controller.tooltip.condition3": "右击无线红石信号终端时", + "item.create.linked_controller.tooltip.behaviour3": "启用_配对模式_,按_六个按键_中的一个来配对_无线红石信号终端_的_频率_。", + "item.create.linked_controller.tooltip.condition4": "右击讲台时", + "item.create.linked_controller.tooltip.behaviour4": "将遥控器放在讲台上以便使用。(潜行右击来取回遥控器。)", + + "item.create.diving_helmet.tooltip": "潜水头盔", + "item.create.diving_helmet.tooltip.summary": "与_铜制背罐_配合使用,为穿戴者提供在_水下_行动一段时间所需的_空气_。", + "item.create.diving_helmet.tooltip.condition1": "戴在头上时", + "item.create.diving_helmet.tooltip.behaviour1": "提供_水下呼吸_效果。缓慢消耗背罐中的_压缩空气_。", + + "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.diving_boots.tooltip": "潜水靴", + "item.create.diving_boots.tooltip.summary": "一双_沉重的靴子_,让穿戴者可以更方便的探索海底。", + "item.create.diving_boots.tooltip.condition1": "穿在脚上时", + "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.minecart_coupling.tooltip": "矿车连轴器", "item.create.minecart_coupling.tooltip.summary": "将多个_矿车_或运输结构链接在一起,构成雄伟的火车。", "item.create.minecart_coupling.tooltip.condition1": "作用与矿车时", "item.create.minecart_coupling.tooltip.behaviour1": "将两个矿车耦合在一起,在移动时将它们保持_恒定的距离_。", - "item.create.crafter_slot_cover.tooltip": "合成器盖板", - "item.create.crafter_slot_cover.tooltip.summary": "用来标记_动力合成器_以不放入物品。在制造与桶类似的斜向合成表时非常有用。", + "block.create.peculiar_bell.tooltip": "奇异钟", + "block.create.peculiar_bell.tooltip.summary": "装饰用的_黄铜质钟_。放在_灵魂火_的正上方可能会产生意料之外的后果……", + + "block.create.haunted_bell.tooltip": "怪异钟", + "block.create.haunted_bell.tooltip.summary": "_被诅咒_的钟,其中充满了来自下界的迷失的灵魂。", + "block.create.haunted_bell.tooltip.condition1": "当手持或鸣响时", + "block.create.haunted_bell.tooltip.behaviour1": "标识出附近可能生成_敌对生物_的_黑暗_的地方。", - "create.tooltip.wip": "WIP", - "create.tooltip.workInProgress": "这东西还没有做完!", - "create.tooltip.randomWipDescription0": "别把这玩意给熊孩子", - "create.tooltip.randomWipDescription1": "每次你使用这个东西,都会让一只无辜的熊猫丢掉性命,每!一!次!", - "create.tooltip.randomWipDescription2": "使用后果自负", - "create.tooltip.randomWipDescription3": "(摇手指)这可不是你在找的物品,走开吧", - "create.tooltip.randomWipDescription4": "自爆模式已启动,10,9,8..。", - "create.tooltip.randomWipDescription5": "相信我,你现在已经没有回头路了。", - "create.tooltip.randomWipDescription6": "如果你使用这个东西,那么本作者与它造成的任何后果没有责任。", - "create.tooltip.randomWipDescription7": "这玩意不是给你用的,换个吧", - "create.tooltip.randomWipDescription8": "试试就逝世。", - "_": "->------------------------] Ponder Content [------------------------<-", "create.ponder.hold_to_ponder": "按住 [%1$s] 开始思索", @@ -1848,41 +1504,46 @@ "create.ponder.replay": "重放", "create.ponder.think_back": "回想", "create.ponder.slow_text": "舒适阅读", - "create.ponder.shared.movement_anchors": "有了底盘和强力胶,移动起大型结构轻轻松松。", - "create.ponder.shared.rpm32": "32 RPM", - "create.ponder.shared.sneak_and": "潜行 +", - "create.ponder.shared.storage_on_contraption": "与装置相接的存储空间,会自动将装置遇到的掉落物拾取到空间内。", + "create.ponder.exit": "退出", + "create.ponder.welcome": "欢迎来到思索项目列表", + "create.ponder.categories": "机械动力中包含的条目", + "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.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 R", - "create.ponder.shared.rpm16": "16 RPM", - "create.ponder.tag.kinetic_sources": "动力源", - "create.ponder.tag.kinetic_sources.description": "能够发生动力的组件。", - "create.ponder.tag.contraption_actor": "装置执行组件", - "create.ponder.tag.contraption_actor.description": "能在移动的装置上执行特殊功能的组件", - "create.ponder.tag.arm_targets": "机械臂的工作目标", - "create.ponder.tag.arm_targets.description": "该组件可做为机械臂的输入或者输出点。", - "create.ponder.tag.logistics": "物品运输", - "create.ponder.tag.logistics.description": "该组件可以协助物品运输", - "create.ponder.tag.movement_anchor": "运动源泉", - "create.ponder.tag.movement_anchor.description": "有了它,运动装置才得以可能,它可以以数种方式使相接的结构运动起来。", - "create.ponder.tag.creative": "创造模式", - "create.ponder.tag.creative.description": "总有些东西是生存模式得不到的。", - "create.ponder.tag.kinetic_relays": "动力方块", - "create.ponder.tag.kinetic_relays.description": "用于传递旋转力的组件。", - "create.ponder.tag.windmill_sails": "风车轴承的帆", - "create.ponder.tag.windmill_sails.description": "在进行风车组装时会被算入风车旋转力的方块,这些方块的效能都是一样的。", - "create.ponder.tag.contraption_assembly": "方块连接物件", - "create.ponder.tag.contraption_assembly.description": "将各个组件连接以便同时运动的物件", - "create.ponder.tag.decoration": "装饰", - "create.ponder.tag.decoration.description": "装饰是这些组件的常见用法。", - "create.ponder.tag.kinetic_appliances": "动力设备", - "create.ponder.tag.kinetic_appliances.description": "这些组件可以利用旋转力进行工作。", + "create.ponder.shared.movement_anchors": "有了底盘和强力胶,移动起大型结构轻轻松松。", "create.ponder.tag.redstone": "逻辑组件", "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.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.kinetic_appliances": "动力设备", + "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_relays": "动力方块", + "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.logistics": "物品运输", + "create.ponder.tag.logistics.description": "该组件可以协助物品运输", "create.ponder.adjustable_pulse_repeater.header": "使用可调节脉冲中继器控制信号发送", "create.ponder.adjustable_pulse_repeater.text_1": "可调节脉冲中继器在一段延时之后会发出一道短时脉冲", @@ -1994,7 +1655,8 @@ "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": "放置在普通轨道上的矿车装配站并不会影响路过矿车装置的运动", @@ -2048,6 +1710,12 @@ "create.ponder.cogwheel.text_1": "齿轮会将动力传递至临近的齿轮", "create.ponder.cogwheel.text_2": "以此方式连接的齿轮,旋转方向相反", + "create.ponder.creative_fluid_tank.header": "创造流体储罐", + "create.ponder.creative_fluid_tank.text_1": "创造流体储罐可以提供无限数量的流体", + "create.ponder.creative_fluid_tank.text_2": "使用一个含有流体的容器右击它来设置它提供的流体", + "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": "对其背侧面板滚动滑轮,可以改变马达的输出旋转转速", @@ -2084,6 +1752,12 @@ "create.ponder.deployer_modes.text_1": "在默认情况下,机械手模仿玩家的右击交互", "create.ponder.deployer_modes.text_2": "使用扳手可以将模式调整为模仿玩家的左击交互", + "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_redstone.header": "使用红石控制机械手", "create.ponder.deployer_redstone.text_1": "当被红石充能时,机械手会停止工作", "create.ponder.deployer_redstone.text_2": "在停止工作前,机械手会完成当前正在进行的工作周期", @@ -2100,8 +1774,14 @@ "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.text_1": "铜机壳可以用于装饰流体管道", + "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": "流速以及方向由所接收旋转力的强弱以及方向而定", @@ -2120,6 +1800,35 @@ "create.ponder.fan_source.text_1": "如鼓风机的扇叶向下朝着热源放置,鼓风机可以借此产生旋转力", "create.ponder.fan_source.text_2": "当鼓风机接受红石信号后,它便会向外供给旋转力", + "create.ponder.fluid_pipe_flow.header": "使用管道运输流体", + "create.ponder.fluid_pipe_flow.text_1": "流体管道可以用于连接两个或多个流体容器", + "create.ponder.fluid_pipe_flow.text_2": "使用扳手为直的管道增加观察窗", + "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_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_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_4": "使用扳手可以打开或关闭观察窗", + + "create.ponder.fluid_tank_storage.header": "使用流体储罐存储流体", + "create.ponder.fluid_tank_storage.text_1": "流体储罐可以存储大量的流体", + "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.flywheel.header": "使用飞轮来产生旋转力", "create.ponder.flywheel.text_1": "飞轮和熔炉引擎必须配套使用,方可产生旋转力", "create.ponder.flywheel.text_2": "如此产生的旋转力具有非常大的应力值", @@ -2193,6 +1902,34 @@ "create.ponder.hand_crank.text_3": "它产生的转速相对较高", "create.ponder.hand_crank.text_4": "潜行长按右键可以顺时针旋转它", + "create.ponder.hose_pulley.header": "使用软管滑轮抽取或排放流体", + "create.ponder.hose_pulley.text_1": "软管滑轮可以用于方便的抽取或填满一个较大区域中的流体", + "create.ponder.hose_pulley.text_2": "通过输入动力可以调节软管末端的高度", + "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_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.text_3": "可以从这些软管滑轮中无限的抽取或向其排放流体", + + "create.ponder.hose_pulley_level.header": "软管滑轮的排水/抽水机制", + "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": "流体将会由下至上被填充", + "create.ponder.hose_pulley_level.text_5": "流体最多只能被填充至软管开口所在的高度", + + "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.large_cogwheel.header": "使用大齿轮传递旋转力", "create.ponder.large_cogwheel.text_1": "大齿轮可以以特定的角度相互连接", "create.ponder.large_cogwheel.text_2": "可以利用大齿轮变更旋转轴向", @@ -2303,18 +2040,33 @@ "create.ponder.mechanical_plough.text_3": "此外,动力犁可以耕地", "create.ponder.mechanical_plough.text_4": "...它也可以在不伤害实体的情况下推动它们", - "create.ponder.mechanical_press.header": "使用动力辊轧机处理物品", - "create.ponder.mechanical_press.text_1": "动力辊轧机可以处理位于其下方的物品", + "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_4": "辊轧机会使物品停下,然后自动处理这一物品", + "create.ponder.mechanical_press.text_3": "当传送带上的物品经过辊压机下方时....", + "create.ponder.mechanical_press.text_4": "辊压机会使物品停下,然后自动处理这一物品", - "create.ponder.mechanical_press_compacting.header": "使用动力辊轧机压缩物品", + "create.ponder.mechanical_press_compacting.header": "使用动力辊压机压缩物品", "create.ponder.mechanical_press_compacting.text_1": "对放置于工作盆内的物品进行辊轧,可以将这些物品压缩在一起", "create.ponder.mechanical_press_compacting.text_2": "压缩意指任何同种物品填满了 2x2 或者 3x3 网格的配方,以及一些额外的配方", "create.ponder.mechanical_press_compacting.text_3": "一些配方可能需要烈焰人燃烧室提供热量", "create.ponder.mechanical_press_compacting.text_4": "过滤槽可用于解决两个配方相互冲突的情况", + "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_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_4": "多个并联动力泵的传输量可以叠加", + "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": "想要一次性砍掉整棵树,锯子必须破坏掉树与地面连接的最后一个方块", @@ -2326,7 +2078,7 @@ "create.ponder.mechanical_saw_processing.header": "使用动力锯处理物品", "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_3": "锯子可以配合其两侧的传送带输入输出", "create.ponder.mechanical_saw_processing.text_4": "若输入原料有多种可能产物,你可以用动力锯上的过滤槽指定只产出某种产物", "create.ponder.mechanical_saw_processing.text_5": "若没有使用过滤槽,动力锯会在各产物中按顺序循环输出", @@ -2339,21 +2091,32 @@ "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.portable_fluid_interface.header": "装置流体交换", + "create.ponder.portable_fluid_interface.text_1": "管道无法与运动装置内的流体储罐直接交互", + "create.ponder.portable_fluid_interface.text_2": "这一组件可以在不停止装置的情况下与装置内的流体存储进行交互", + "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_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_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_6": "物品可被输入到装置内...", "create.ponder.portable_storage_interface.text_7": "...或是从装置中提取出来", - "create.ponder.portable_storage_interface.text_8": "物品交换完毕后,装置仍然会停留在原地一小会,然后才会继续前行", + "create.ponder.portable_storage_interface.text_8": "如果一小段时间内没有物品交换,接口将会断开连接,然后装置重新开始运动", "create.ponder.portable_storage_interface_redstone.header": "红石控制", "create.ponder.portable_storage_interface_redstone.text_1": "通入红石信号可以阻止固定侧接口的连接行为", @@ -2442,11 +2205,25 @@ "create.ponder.smart_chute.text_3": "使用鼠标滚轮可以指定被过滤的物品数量", "create.ponder.smart_chute.text_4": "通入红石信号,智能溜槽将会完全暂停工作", + "create.ponder.smart_pipe.header": "使用智能流体管道控制液体流动", + "create.ponder.smart_pipe.text_1": "智能流体管道可以限制通过它的流体种类", + "create.ponder.smart_pipe.text_2": "当紧邻流体源放置时,管道只会抽取设置的流体种类", + "create.ponder.smart_pipe.text_3": "使用任何包含流体的容器右键过滤槽来标记过滤的流体", + "create.ponder.smart_pipe.text_4": "当放在管线中时,只有匹配过滤器的流体才能流入它后方的管道", + "create.ponder.speedometer.header": "使用速度表来监测转速", "create.ponder.speedometer.text_1": "速度表能显示相接组件的转速", "create.ponder.speedometer.text_2": "当佩戴工程师护目镜时,可以看到仪表所显示的更详细的数据", "create.ponder.speedometer.text_3": "红石比较器可以根据速度表的数值输出不同强弱的红石信号", + "create.ponder.spout_filling.header": "使用注液器填充物品", + "create.ponder.spout_filling.text_1": "注液器可以将流体装入下方经过的,可以接受该流体的物品", + "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_6": "注液器会使物品停下,然后自动处理这一物品", + "create.ponder.stabilized_bearings.header": "装置固定朝向", "create.ponder.stabilized_bearings.text_1": "当动力轴承在结构被带动时...", "create.ponder.stabilized_bearings.text_2": "...它会确保它转盘的垂直朝向不变", @@ -2478,6 +2255,12 @@ "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.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_2": "水车接触水流的面越多,它的转速越高", @@ -2519,7 +2302,6 @@ "create.ponder.windmill_structure.header": "风车装置", "create.ponder.windmill_structure.text_1": "任何有至少 8 个风帆方块的结构,都被视为一个有效的风车", - "_": "Thank you for translating Create!" } From 4876335de9f31ff724920a3a83701ba069a92b96 Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Sat, 24 Jul 2021 20:25:50 +0200 Subject: [PATCH 117/118] Permit the new Flywheel flywheel version in toml --- src/main/resources/META-INF/mods.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/META-INF/mods.toml b/src/main/resources/META-INF/mods.toml index 7339a8d9c..b3457e6a6 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.16-0.1,1.16-0.2)" + versionRange="[1.16-0.2,1.16-0.3)" ordering="AFTER" side="CLIENT" From 3e9257413068c1064a94a0149adf39994b400bd8 Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Sat, 24 Jul 2021 20:41:23 +0200 Subject: [PATCH 118/118] Mixing 24/7 - Fixed mixer and press not checking for recipes once more after completing - Creative Cake -> Creative Blaze Cake - Post-PR data --- src/generated/resources/.cache/cache | 34 +- .../resources/assets/create/lang/en_ud.json | 2 +- .../resources/assets/create/lang/en_us.json | 10 +- .../assets/create/lang/unfinished/de_de.json | 10 +- .../assets/create/lang/unfinished/es_es.json | 10 +- .../assets/create/lang/unfinished/es_mx.json | 10 +- .../assets/create/lang/unfinished/fr_fr.json | 10 +- .../assets/create/lang/unfinished/it_it.json | 10 +- .../assets/create/lang/unfinished/ja_jp.json | 10 +- .../assets/create/lang/unfinished/ko_kr.json | 10 +- .../assets/create/lang/unfinished/nl_nl.json | 10 +- .../assets/create/lang/unfinished/pl_pl.json | 10 +- .../assets/create/lang/unfinished/pt_br.json | 10 +- .../assets/create/lang/unfinished/ru_ru.json | 10 +- .../assets/create/lang/unfinished/zh_cn.json | 616 +++++++++--------- .../assets/create/lang/unfinished/zh_tw.json | 10 +- ...ive_cake.json => creative_blaze_cake.json} | 2 +- .../create/tags/items/upright_on_belt.json | 2 +- .../java/com/simibubi/create/AllItems.java | 2 +- .../mixer/MechanicalMixerTileEntity.java | 1 + .../press/MechanicalPressTileEntity.java | 2 + .../burner/BlazeBurnerTileEntity.java | 2 +- .../assets/create/lang/default/tooltips.json | 29 +- ...ative_cake.png => creative_blaze_cake.png} | Bin 24 files changed, 403 insertions(+), 419 deletions(-) rename src/generated/resources/assets/create/models/item/{creative_cake.json => creative_blaze_cake.json} (56%) rename src/main/resources/assets/create/textures/item/{creative_cake.png => creative_blaze_cake.png} (100%) diff --git a/src/generated/resources/.cache/cache b/src/generated/resources/.cache/cache index 4e8a3c809..d47c0e738 100644 --- a/src/generated/resources/.cache/cache +++ b/src/generated/resources/.cache/cache @@ -425,21 +425,21 @@ a3a11524cd3515fc01d905767b4b7ea782adaf03 assets/create/blockstates/yellow_seat.j 6801fa1f466f172700e573e5b8ee8ee5f9ca4583 assets/create/blockstates/yellow_valve_handle.json 7f39521b211441f5c3e06d60c5978cebe16cacfb assets/create/blockstates/zinc_block.json b7181bcd8182b2f17088e5aa881f374c9c65470c assets/create/blockstates/zinc_ore.json -58e72b5fe2423b661e4892a817e08985c3944318 assets/create/lang/en_ud.json -6d3a0bf566fc8de302cd48ae4686582cb78110b5 assets/create/lang/en_us.json -67dce8f635842cd12a9ae98fedd492b4cfb9eb28 assets/create/lang/unfinished/de_de.json -83079afe226e306ea0c144afdb62cd54385ade16 assets/create/lang/unfinished/es_es.json -e357c238bb1b704d997434beebace6424f5a6abf assets/create/lang/unfinished/es_mx.json -67d49ab1b8a6d253a0b402021e40b3ead6ad4407 assets/create/lang/unfinished/fr_fr.json -991986bd6fffc6c9ac170451c2bc9897f451ce3f assets/create/lang/unfinished/it_it.json -4ff92f6333ec6a831a30a1c0e01f6cb40035b531 assets/create/lang/unfinished/ja_jp.json -eeadeb375d666a118a106ff413b5b3befefaaae5 assets/create/lang/unfinished/ko_kr.json -1a5f20e1c0dd6fdaa872d7cfa29c40f5223de3ae assets/create/lang/unfinished/nl_nl.json -7f9feb8db7cc5f42050e5f927ea764e2940c9a7d assets/create/lang/unfinished/pl_pl.json -8ea9e0639ac1a143baa7f82885ebd413bffefd01 assets/create/lang/unfinished/pt_br.json -0b42660049fbf141e9cc9501454dfdf7a3e71816 assets/create/lang/unfinished/ru_ru.json -52f37952e0167f97d5cf1e4d5b2ed5eccd379ea6 assets/create/lang/unfinished/zh_cn.json -355e85057e3d39d51f7aaee908884db96e4bfdd9 assets/create/lang/unfinished/zh_tw.json +93fa3a5a99cdd3267534d4702b2346177be29885 assets/create/lang/en_ud.json +71d94e21f0c64725829f1c029592f2316fa1358e assets/create/lang/en_us.json +35439696e4d85eebce260874de685aedb5076a6a assets/create/lang/unfinished/de_de.json +36c5b894c038f2ff1c0ecef0391253bcd944ac22 assets/create/lang/unfinished/es_es.json +8d451362ebecd7552739a8212ca5534ee2b32421 assets/create/lang/unfinished/es_mx.json +b39592c64dd5d1ae29c8cf556e35b8bec0c10c63 assets/create/lang/unfinished/fr_fr.json +e7b5d73d5f53d1a7a288103e9198c40888b3a603 assets/create/lang/unfinished/it_it.json +68cdd7c617498c0dca12b9ec397b82904783f88b assets/create/lang/unfinished/ja_jp.json +d1dd7683a20814625cade0688ae0cd95e6d2ba50 assets/create/lang/unfinished/ko_kr.json +b56ea82f736da4cd067093e95e26597bf1d88b6b assets/create/lang/unfinished/nl_nl.json +9e3e5d6eb799fae27f03a3e47782134a85657f22 assets/create/lang/unfinished/pl_pl.json +8068aeedd8c8e5f041372512e9bd57ccef29f38c assets/create/lang/unfinished/pt_br.json +724c38f4375687907d1f416674d2122117fb34a6 assets/create/lang/unfinished/ru_ru.json +5522e68e3d3c14c17d6b038fc2a03acb73b76513 assets/create/lang/unfinished/zh_cn.json +4e464bc9052209b7e6a809519c2b816dbc956bbf assets/create/lang/unfinished/zh_tw.json 487a511a01b2a4531fb672f917922312db78f958 assets/create/models/block/acacia_window.json b48060cba1a382f373a05bf0039054053eccf076 assets/create/models/block/acacia_window_pane_noside.json 3066db1bf03cffa1a9c7fbacf47ae586632f4eb3 assets/create/models/block/acacia_window_pane_noside_alt.json @@ -1316,7 +1316,7 @@ f56bf22324faf8958eaef4d94b958f1108d52e5a assets/create/models/item/copper_tiles. 5583368909c319acfcf0f7a419bedf23272fe613 assets/create/models/item/copper_valve_handle.json 4e253e7c0626dfd76e2d39786ce1a34e0baaa62d assets/create/models/item/crafter_slot_cover.json 1f947dafff30da701b7675f5b026ccab3129b079 assets/create/models/item/crafting_blueprint.json -6fa0ffd887f51034d7ac923b1cabb6ab44d33fe9 assets/create/models/item/creative_cake.json +db68f1fcc5b91f3ee0cc023538d965d76dd13506 assets/create/models/item/creative_blaze_cake.json 7b333dea353afaa27b182aedc647c9e9e34e92ef assets/create/models/item/creative_crate.json f7d06c52c3ca8c22ad67f5741471f06ac22e7fcb assets/create/models/item/creative_fluid_tank.json 5b39403f6c81f05e566b621b62e267267de47c41 assets/create/models/item/creative_motor.json @@ -3755,7 +3755,7 @@ eac71740fb12bdb38b5dfaa2268613d7ba82b809 data/create/tags/blocks/windmill_sails. 081f5aa35602fc27af2ca01ea9f2fd5e7eb284dc data/create/tags/items/create_ingots.json 94c62bf22678ef55b2b8a5398a7960e5b00682dc data/create/tags/items/crushed_ores.json 6cdeeac1689f7b5bfd9bc40b462143d8eaf3ad0b data/create/tags/items/seats.json -94826d9ceac981342c753460b7f7ea9d23dd13a0 data/create/tags/items/upright_on_belt.json +f1092005b5d01e1f29457e90f75e5750f7f0226b data/create/tags/items/upright_on_belt.json 50936b211d94167a35ec78c89954082a336b6269 data/create/tags/items/valve_handles.json 16bcb8fcbe9170c2c11f1ca8d99d8b36cd812bbd data/forge/tags/blocks/glass/colorless.json 81d3eb40b048160fcc2d6bb7ff12b49276297efd data/forge/tags/blocks/glass_panes.json diff --git a/src/generated/resources/assets/create/lang/en_ud.json b/src/generated/resources/assets/create/lang/en_ud.json index d27982c36..1d0e41a93 100644 --- a/src/generated/resources/assets/create/lang/en_ud.json +++ b/src/generated/resources/assets/create/lang/en_ud.json @@ -460,7 +460,7 @@ "item.create.copper_sheet": "\u0287\u01DD\u01DD\u0265S \u0279\u01DDddo\u0186", "item.create.crafter_slot_cover": "\u0279\u01DD\u028Co\u0186 \u0287o\u05DFS \u0279\u01DD\u0287\u025F\u0250\u0279\u0186", "item.create.crafting_blueprint": "\u0287u\u0131\u0279d\u01DDn\u05DF\u15FA bu\u0131\u0287\u025F\u0250\u0279\u0186", - "item.create.creative_cake": "\u01DD\u029E\u0250\u0186 \u01DD\u028C\u0131\u0287\u0250\u01DD\u0279\u0186", + "item.create.creative_blaze_cake": "\u01DD\u029E\u0250\u0186 \u01DDz\u0250\u05DF\u15FA \u01DD\u028C\u0131\u0287\u0250\u01DD\u0279\u0186", "item.create.crushed_aluminum_ore": "\u01DD\u0279O \u026Fnu\u0131\u026Fn\u05DF\u2C6F p\u01DD\u0265sn\u0279\u0186", "item.create.crushed_brass": "ss\u0250\u0279\u15FA p\u01DD\u0265sn\u0279\u0186", "item.create.crushed_copper_ore": "\u01DD\u0279O \u0279\u01DDddo\u0186 p\u01DD\u0265sn\u0279\u0186", diff --git a/src/generated/resources/assets/create/lang/en_us.json b/src/generated/resources/assets/create/lang/en_us.json index 43bb9fe31..3dfa1aa83 100644 --- a/src/generated/resources/assets/create/lang/en_us.json +++ b/src/generated/resources/assets/create/lang/en_us.json @@ -467,7 +467,7 @@ "item.create.copper_sheet": "Copper Sheet", "item.create.crafter_slot_cover": "Crafter Slot Cover", "item.create.crafting_blueprint": "Crafting Blueprint", - "item.create.creative_cake": "Creative Cake", + "item.create.creative_blaze_cake": "Creative Blaze Cake", "item.create.crushed_aluminum_ore": "Crushed Aluminum Ore", "item.create.crushed_brass": "Crushed Brass", "item.create.crushed_copper_ore": "Crushed Copper Ore", @@ -1412,10 +1412,10 @@ "block.create.creative_crate.tooltip.condition1": "When Item in Filter Slot", "block.create.creative_crate.tooltip.behaviour1": "Anything _extracting_ from this container will provide an _endless supply_ of the item specified. Items _inserted_ into this crate will be _voided._", - "item.create.creative_cake.tooltip": "CREATIVE CAKE", - "item.create.creative_cake.tooltip.summary": "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_cake.tooltip.condition1": "R-Click on Blaze Burner", - "item.create.creative_cake.tooltip.behaviour1": "_Locks_ the Blaze Burner's heat level. If used again, _cycles_ the Blaze Burner's heat level.", + "item.create.creative_blaze_cake.tooltip": "CREATIVE CAKE", + "item.create.creative_blaze_cake.tooltip.summary": "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": "R-Click on Blaze Burner", + "item.create.creative_blaze_cake.tooltip.behaviour1": "_Locks_ the Blaze Burner's heat level. If used again, _cycles_ the Blaze Burner's heat level.", "block.create.controller_rail.tooltip": "CONTROLLER RAIL", "block.create.controller_rail.tooltip.summary": "A _uni-directional powered rail_ capable of _fine control_ over a minecarts' _movement speed_.", 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 08ce90fbc..3647fa4a8 100644 --- a/src/generated/resources/assets/create/lang/unfinished/de_de.json +++ b/src/generated/resources/assets/create/lang/unfinished/de_de.json @@ -468,7 +468,7 @@ "item.create.copper_sheet": "Kupferblech", "item.create.crafter_slot_cover": "Handwerkseinheit Slot Abdeckung", "item.create.crafting_blueprint": "UNLOCALIZED: Crafting Blueprint", - "item.create.creative_cake": "UNLOCALIZED: Creative Cake", + "item.create.creative_blaze_cake": "UNLOCALIZED: Creative Blaze Cake", "item.create.crushed_aluminum_ore": "Zerkleinertes Aluminiumerz", "item.create.crushed_brass": "Zerkleinertes Messing", "item.create.crushed_copper_ore": "Zerkleinertes Kupfererz", @@ -1413,10 +1413,10 @@ "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_cake.tooltip": "UNLOCALIZED: CREATIVE CAKE", - "item.create.creative_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_cake.tooltip.condition1": "UNLOCALIZED: R-Click on Blaze Burner", - "item.create.creative_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": "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.", "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_.", 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 bbe001287..f307397c2 100644 --- a/src/generated/resources/assets/create/lang/unfinished/es_es.json +++ b/src/generated/resources/assets/create/lang/unfinished/es_es.json @@ -468,7 +468,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_cake": "UNLOCALIZED: Creative Cake", + "item.create.creative_blaze_cake": "UNLOCALIZED: Creative Blaze Cake", "item.create.crushed_aluminum_ore": "Mineral de aluminio molido", "item.create.crushed_brass": "Latón molido", "item.create.crushed_copper_ore": "Mineral de cobre molido", @@ -1413,10 +1413,10 @@ "block.create.creative_crate.tooltip.condition1": "Cuando el elemento está en la ranura para filtros", "block.create.creative_crate.tooltip.behaviour1": "Todo lo que se _extraiga_ de este contenedor proporcionará un suministro _ilimitado_ del elemento especificado. Los objetos _insertados_ en esta caja serán _evitados_.", - "item.create.creative_cake.tooltip": "UNLOCALIZED: CREATIVE CAKE", - "item.create.creative_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_cake.tooltip.condition1": "UNLOCALIZED: R-Click on Blaze Burner", - "item.create.creative_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": "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.", "block.create.controller_rail.tooltip": "RAÍL DE CONTROL", "block.create.controller_rail.tooltip.summary": "Un raíl energizado _unidireccional_ capaz de _controlar con precisión_ la _velocidad de movimiento_ de una vagoneta.", diff --git a/src/generated/resources/assets/create/lang/unfinished/es_mx.json b/src/generated/resources/assets/create/lang/unfinished/es_mx.json index 7a48a3269..4f1034e38 100644 --- a/src/generated/resources/assets/create/lang/unfinished/es_mx.json +++ b/src/generated/resources/assets/create/lang/unfinished/es_mx.json @@ -468,7 +468,7 @@ "item.create.copper_sheet": "Lámina de Cobre", "item.create.crafter_slot_cover": "Cubierta de Ranura del Crafter", "item.create.crafting_blueprint": "UNLOCALIZED: Crafting Blueprint", - "item.create.creative_cake": "UNLOCALIZED: Creative Cake", + "item.create.creative_blaze_cake": "UNLOCALIZED: Creative Blaze Cake", "item.create.crushed_aluminum_ore": "Mineral de Aluminio Molido", "item.create.crushed_brass": "Latón Molido", "item.create.crushed_copper_ore": "Mineral de Cobre Molido", @@ -1413,10 +1413,10 @@ "block.create.creative_crate.tooltip.condition1": "UNLOCALIZED: When Item in Filter Slot", "block.create.creative_crate.tooltip.behaviour1": "UNLOCALIZED: Anything _extracting_ from this container will provide an _endless supply_ of the item specified. Items _inserted_ into this crate will be _voided._", - "item.create.creative_cake.tooltip": "UNLOCALIZED: CREATIVE CAKE", - "item.create.creative_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_cake.tooltip.condition1": "UNLOCALIZED: R-Click on Blaze Burner", - "item.create.creative_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": "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.", "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_.", diff --git a/src/generated/resources/assets/create/lang/unfinished/fr_fr.json b/src/generated/resources/assets/create/lang/unfinished/fr_fr.json index db653649b..545004277 100644 --- a/src/generated/resources/assets/create/lang/unfinished/fr_fr.json +++ b/src/generated/resources/assets/create/lang/unfinished/fr_fr.json @@ -468,7 +468,7 @@ "item.create.copper_sheet": "Plaques de cuivre", "item.create.crafter_slot_cover": "Couvercle", "item.create.crafting_blueprint": "UNLOCALIZED: Crafting Blueprint", - "item.create.creative_cake": "UNLOCALIZED: Creative Cake", + "item.create.creative_blaze_cake": "UNLOCALIZED: Creative Blaze Cake", "item.create.crushed_aluminum_ore": "Aluminium concassé", "item.create.crushed_brass": "Laiton concassé", "item.create.crushed_copper_ore": "Cuivre concassé", @@ -1413,10 +1413,10 @@ "block.create.creative_crate.tooltip.condition1": "Quand un objet se trouve dans l'emplacement de filtrage", "block.create.creative_crate.tooltip.behaviour1": "Tout ce qui _extrait_ de ce conteneur aura une _alimentation illimitée_ de l'objet spécifié. Les objets _insérés_ dans cette caisse seront _éliminés_.", - "item.create.creative_cake.tooltip": "UNLOCALIZED: CREATIVE CAKE", - "item.create.creative_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_cake.tooltip.condition1": "UNLOCALIZED: R-Click on Blaze Burner", - "item.create.creative_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": "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.", "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_.", diff --git a/src/generated/resources/assets/create/lang/unfinished/it_it.json b/src/generated/resources/assets/create/lang/unfinished/it_it.json index ab0b5cbfa..29147fd8a 100644 --- a/src/generated/resources/assets/create/lang/unfinished/it_it.json +++ b/src/generated/resources/assets/create/lang/unfinished/it_it.json @@ -468,7 +468,7 @@ "item.create.copper_sheet": "Lamiera di rame", "item.create.crafter_slot_cover": "Rivestimento per slot da costruzione", "item.create.crafting_blueprint": "UNLOCALIZED: Crafting Blueprint", - "item.create.creative_cake": "UNLOCALIZED: Creative Cake", + "item.create.creative_blaze_cake": "UNLOCALIZED: Creative Blaze Cake", "item.create.crushed_aluminum_ore": "Alluminio grezzo frantumato", "item.create.crushed_brass": "Ottone frantumato", "item.create.crushed_copper_ore": "Rame grezzo frantumato", @@ -1413,10 +1413,10 @@ "block.create.creative_crate.tooltip.condition1": "Quando un oggetto è nel filtro", "block.create.creative_crate.tooltip.behaviour1": "Qualsiasi _estrazione_ da questo contenitore fornisce _provviste infinite_ dell'oggetto in questione. Gli oggetti _inseriti_ in questo baule verranno _svuotati_.", - "item.create.creative_cake.tooltip": "UNLOCALIZED: CREATIVE CAKE", - "item.create.creative_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_cake.tooltip.condition1": "UNLOCALIZED: R-Click on Blaze Burner", - "item.create.creative_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": "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.", "block.create.controller_rail.tooltip": "BINARIO DI CONTROLLO", "block.create.controller_rail.tooltip.summary": "Un _binario alimentato unidirezionale_ capace di _controllare precisamente_ la _velocità di movimento_ di un carrello da miniera.", diff --git a/src/generated/resources/assets/create/lang/unfinished/ja_jp.json b/src/generated/resources/assets/create/lang/unfinished/ja_jp.json index 16ef1765d..84f7c6799 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ja_jp.json +++ b/src/generated/resources/assets/create/lang/unfinished/ja_jp.json @@ -468,7 +468,7 @@ "item.create.copper_sheet": "銅板", "item.create.crafter_slot_cover": "クラフタースロットカバー", "item.create.crafting_blueprint": "クラフトブループリント", - "item.create.creative_cake": "UNLOCALIZED: Creative Cake", + "item.create.creative_blaze_cake": "UNLOCALIZED: Creative Blaze Cake", "item.create.crushed_aluminum_ore": "砕いたアルミニウム鉱石", "item.create.crushed_brass": "砕いた真鍮", "item.create.crushed_copper_ore": "砕いた銅鉱石", @@ -1413,10 +1413,10 @@ "block.create.creative_crate.tooltip.condition1": "フィルタースロットにアイテムが入っているとき", "block.create.creative_crate.tooltip.behaviour1": "このクレートから何かを_搬出_すると、指定されたアイテムが_無限_に_搬出_されます。このクレートに_搬入_されたアイテムは_消滅_します。", - "item.create.creative_cake.tooltip": "UNLOCALIZED: CREATIVE CAKE", - "item.create.creative_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_cake.tooltip.condition1": "UNLOCALIZED: R-Click on Blaze Burner", - "item.create.creative_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": "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.", "block.create.controller_rail.tooltip": "コントローラーレール", "block.create.controller_rail.tooltip.summary": "トロッコの_移動速度_を_細かく制御_できる_一方通行_の_パワード_レール", diff --git a/src/generated/resources/assets/create/lang/unfinished/ko_kr.json b/src/generated/resources/assets/create/lang/unfinished/ko_kr.json index f23372478..fee16d39d 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ko_kr.json +++ b/src/generated/resources/assets/create/lang/unfinished/ko_kr.json @@ -468,7 +468,7 @@ "item.create.copper_sheet": "구리 판", "item.create.crafter_slot_cover": "조합기 슬롯 덮개", "item.create.crafting_blueprint": "조합 청사진", - "item.create.creative_cake": "UNLOCALIZED: Creative Cake", + "item.create.creative_blaze_cake": "UNLOCALIZED: Creative Blaze Cake", "item.create.crushed_aluminum_ore": "UNLOCALIZED: Crushed Aluminum Ore", "item.create.crushed_brass": "분쇄된 황동", "item.create.crushed_copper_ore": "분쇄된 구리 광석", @@ -1413,10 +1413,10 @@ "block.create.creative_crate.tooltip.condition1": "필터에 아이템을 설정할 시", "block.create.creative_crate.tooltip.behaviour1": "선택된 아이템을 _무한정_으로 _빼낼_ 수 있습니다. 대신 _들어간_ 아이템은 _삭제_됩니다.", - "item.create.creative_cake.tooltip": "UNLOCALIZED: CREATIVE CAKE", - "item.create.creative_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_cake.tooltip.condition1": "UNLOCALIZED: R-Click on Blaze Burner", - "item.create.creative_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": "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.", "block.create.controller_rail.tooltip": "CONTROLLER RAIL", "block.create.controller_rail.tooltip.summary": "_광산 수레_의 _이동속도_를 _세밀하게_ _조정_할 수 있는 _양방향_ _전동 레일_입니다.", diff --git a/src/generated/resources/assets/create/lang/unfinished/nl_nl.json b/src/generated/resources/assets/create/lang/unfinished/nl_nl.json index 62176963d..76094fd59 100644 --- a/src/generated/resources/assets/create/lang/unfinished/nl_nl.json +++ b/src/generated/resources/assets/create/lang/unfinished/nl_nl.json @@ -468,7 +468,7 @@ "item.create.copper_sheet": "UNLOCALIZED: Copper Sheet", "item.create.crafter_slot_cover": "UNLOCALIZED: Crafter Slot Cover", "item.create.crafting_blueprint": "UNLOCALIZED: Crafting Blueprint", - "item.create.creative_cake": "UNLOCALIZED: Creative Cake", + "item.create.creative_blaze_cake": "UNLOCALIZED: Creative Blaze Cake", "item.create.crushed_aluminum_ore": "UNLOCALIZED: Crushed Aluminum Ore", "item.create.crushed_brass": "Gemalen Brons", "item.create.crushed_copper_ore": "UNLOCALIZED: Crushed Copper Ore", @@ -1413,10 +1413,10 @@ "block.create.creative_crate.tooltip.condition1": "UNLOCALIZED: When Item in Filter Slot", "block.create.creative_crate.tooltip.behaviour1": "UNLOCALIZED: Anything _extracting_ from this container will provide an _endless supply_ of the item specified. Items _inserted_ into this crate will be _voided._", - "item.create.creative_cake.tooltip": "UNLOCALIZED: CREATIVE CAKE", - "item.create.creative_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_cake.tooltip.condition1": "UNLOCALIZED: R-Click on Blaze Burner", - "item.create.creative_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": "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.", "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_.", diff --git a/src/generated/resources/assets/create/lang/unfinished/pl_pl.json b/src/generated/resources/assets/create/lang/unfinished/pl_pl.json index 5e587fc6a..da08aed47 100644 --- a/src/generated/resources/assets/create/lang/unfinished/pl_pl.json +++ b/src/generated/resources/assets/create/lang/unfinished/pl_pl.json @@ -468,7 +468,7 @@ "item.create.copper_sheet": "Arkusz miedzi", "item.create.crafter_slot_cover": "Przykrywka na slot stołu rzemieślniczego", "item.create.crafting_blueprint": "UNLOCALIZED: Crafting Blueprint", - "item.create.creative_cake": "UNLOCALIZED: Creative Cake", + "item.create.creative_blaze_cake": "UNLOCALIZED: Creative Blaze Cake", "item.create.crushed_aluminum_ore": "Rozkruszona ruda żelaza", "item.create.crushed_brass": "Rozkruszony mosiądz", "item.create.crushed_copper_ore": "Rozkruszona ruda miedzi", @@ -1413,10 +1413,10 @@ "block.create.creative_crate.tooltip.condition1": "Kiedy przedmiot jest w slocie na filtr", "block.create.creative_crate.tooltip.behaviour1": "Bloki _wyciągające_ przedmioty z tego bloku będą miały _nieskończony zapas_ wybranego przedmiotu. Przedmioty włożone do tej skrzynki będą _usuwane_.", - "item.create.creative_cake.tooltip": "UNLOCALIZED: CREATIVE CAKE", - "item.create.creative_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_cake.tooltip.condition1": "UNLOCALIZED: R-Click on Blaze Burner", - "item.create.creative_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": "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.", "block.create.controller_rail.tooltip": "TORY STERUJĄCE", "block.create.controller_rail.tooltip.summary": "_Wielokierunkowy_ zasilany tor pozwalający na _dokładną kontrolę_ nad _prędkością wagonika_.", 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 a825c33f1..084267626 100644 --- a/src/generated/resources/assets/create/lang/unfinished/pt_br.json +++ b/src/generated/resources/assets/create/lang/unfinished/pt_br.json @@ -468,7 +468,7 @@ "item.create.copper_sheet": "UNLOCALIZED: Copper Sheet", "item.create.crafter_slot_cover": "UNLOCALIZED: Crafter Slot Cover", "item.create.crafting_blueprint": "UNLOCALIZED: Crafting Blueprint", - "item.create.creative_cake": "UNLOCALIZED: Creative Cake", + "item.create.creative_blaze_cake": "UNLOCALIZED: Creative Blaze Cake", "item.create.crushed_aluminum_ore": "UNLOCALIZED: Crushed Aluminum Ore", "item.create.crushed_brass": "UNLOCALIZED: Crushed Brass", "item.create.crushed_copper_ore": "UNLOCALIZED: Crushed Copper Ore", @@ -1413,10 +1413,10 @@ "block.create.creative_crate.tooltip.condition1": "UNLOCALIZED: When Item in Filter Slot", "block.create.creative_crate.tooltip.behaviour1": "UNLOCALIZED: Anything _extracting_ from this container will provide an _endless supply_ of the item specified. Items _inserted_ into this crate will be _voided._", - "item.create.creative_cake.tooltip": "UNLOCALIZED: CREATIVE CAKE", - "item.create.creative_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_cake.tooltip.condition1": "UNLOCALIZED: R-Click on Blaze Burner", - "item.create.creative_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": "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.", "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_.", diff --git a/src/generated/resources/assets/create/lang/unfinished/ru_ru.json b/src/generated/resources/assets/create/lang/unfinished/ru_ru.json index f7b92f04a..df9b7a838 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ru_ru.json +++ b/src/generated/resources/assets/create/lang/unfinished/ru_ru.json @@ -468,7 +468,7 @@ "item.create.copper_sheet": "Медный лист", "item.create.crafter_slot_cover": "Крышка на слот крафтера", "item.create.crafting_blueprint": "Создание чертежа", - "item.create.creative_cake": "UNLOCALIZED: Creative Cake", + "item.create.creative_blaze_cake": "UNLOCALIZED: Creative Blaze Cake", "item.create.crushed_aluminum_ore": "Дроблёная алюминиевая руда", "item.create.crushed_brass": "Дроблёная латунь", "item.create.crushed_copper_ore": "Дроблёная медная руда", @@ -1413,10 +1413,10 @@ "block.create.creative_crate.tooltip.condition1": "Когда предмет в слоте фильтра", "block.create.creative_crate.tooltip.behaviour1": "Все, что извлечено из этого контейнера, обеспечит бесконечную поставку указанного предмета. Предметы, _вставленные_ в этот ящик, будут _аннулированы_.", - "item.create.creative_cake.tooltip": "UNLOCALIZED: CREATIVE CAKE", - "item.create.creative_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_cake.tooltip.condition1": "UNLOCALIZED: R-Click on Blaze Burner", - "item.create.creative_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": "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.", "block.create.controller_rail.tooltip": "КОНТРОЛИРУЮЩАЯ РЕЛЬСА", "block.create.controller_rail.tooltip.summary": "_Все-направленные запитанные рельсы_, позволяющие _точную настройку_ _скорости_ вагонеток.", 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 8c4c4fd65..eeaab51f2 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: 297", + "_": "Missing Localizations: 5", "_": "->------------------------] Game Elements [------------------------<-", @@ -28,12 +28,12 @@ "block.create.belt": "传送带", "block.create.birch_window": "白桦窗户", "block.create.birch_window_pane": "白桦窗户板", - "block.create.black_nixie_tube": "UNLOCALIZED: Black Nixie Tube", + "block.create.black_nixie_tube": "黑色辉光管", "block.create.black_sail": "黑色风帆", "block.create.black_seat": "黑色坐垫", "block.create.black_valve_handle": "黑色阀门手轮", "block.create.blaze_burner": "烈焰人燃烧室", - "block.create.blue_nixie_tube": "UNLOCALIZED: Blue Nixie Tube", + "block.create.blue_nixie_tube": "蓝色辉光管", "block.create.blue_sail": "蓝色风帆", "block.create.blue_seat": "蓝色坐垫", "block.create.blue_valve_handle": "蓝色阀门手轮", @@ -43,7 +43,7 @@ "block.create.brass_encased_shaft": "黄铜传动杆箱", "block.create.brass_funnel": "黄铜漏斗", "block.create.brass_tunnel": "黄铜隧道", - "block.create.brown_nixie_tube": "UNLOCALIZED: Brown Nixie Tube", + "block.create.brown_nixie_tube": "棕色辉光管", "block.create.brown_sail": "棕色风帆", "block.create.brown_seat": "棕色坐垫", "block.create.brown_valve_handle": "棕色阀门手轮", @@ -61,7 +61,7 @@ "block.create.cogwheel": "齿轮", "block.create.content_observer": "物品侦测器", "block.create.controller_rail": "控制铁轨", - "block.create.copper_backtank": "UNLOCALIZED: Copper Backtank", + "block.create.copper_backtank": "铜制背罐", "block.create.copper_block": "铜块", "block.create.copper_casing": "铜机壳", "block.create.copper_ore": "铜矿石", @@ -76,7 +76,7 @@ "block.create.crushing_wheel": "粉碎轮", "block.create.crushing_wheel_controller": "粉碎轮控制器", "block.create.cuckoo_clock": "布谷鸟闹钟", - "block.create.cyan_nixie_tube": "UNLOCALIZED: Cyan Nixie Tube", + "block.create.cyan_nixie_tube": "青色辉光管", "block.create.cyan_sail": "青色风帆", "block.create.cyan_seat": "青色坐垫", "block.create.cyan_valve_handle": "青色阀门手轮", @@ -183,16 +183,16 @@ "block.create.granite_cobblestone_stairs": "花岗岩圆石楼梯", "block.create.granite_cobblestone_wall": "花岗岩圆石墙", "block.create.granite_pillar": "竖纹花岗岩", - "block.create.gray_nixie_tube": "UNLOCALIZED: Gray Nixie Tube", + "block.create.gray_nixie_tube": "灰色辉光管", "block.create.gray_sail": "灰色风帆", "block.create.gray_seat": "灰色坐垫", "block.create.gray_valve_handle": "灰色阀门手轮", - "block.create.green_nixie_tube": "UNLOCALIZED: Green Nixie Tube", + "block.create.green_nixie_tube": "绿色辉光管", "block.create.green_sail": "绿色风帆", "block.create.green_seat": "绿色坐垫", "block.create.green_valve_handle": "绿色阀门手轮", "block.create.hand_crank": "手摇曲柄", - "block.create.haunted_bell": "UNLOCALIZED: Haunted Bell", + "block.create.haunted_bell": "怪异钟", "block.create.honey": "蜂蜜", "block.create.horizontal_framed_glass": "竖直边框玻璃", "block.create.horizontal_framed_glass_pane": "竖直边框玻璃板", @@ -210,16 +210,16 @@ "block.create.layered_limestone": "层叠石灰岩", "block.create.layered_scoria": "层叠熔渣", "block.create.layered_weathered_limestone": "层叠风化石灰岩", - "block.create.lectern_controller": "UNLOCALIZED: Lectern Controller", - "block.create.light_blue_nixie_tube": "UNLOCALIZED: Light Blue Nixie Tube", + "block.create.lectern_controller": "遥控器讲台", + "block.create.light_blue_nixie_tube": "淡蓝色辉光管", "block.create.light_blue_sail": "淡蓝色风帆", "block.create.light_blue_seat": "淡蓝色坐垫", "block.create.light_blue_valve_handle": "淡蓝色阀门手轮", - "block.create.light_gray_nixie_tube": "UNLOCALIZED: Light Gray Nixie Tube", + "block.create.light_gray_nixie_tube": "淡灰色辉光管", "block.create.light_gray_sail": "淡灰色风帆", "block.create.light_gray_seat": "淡灰色坐垫", "block.create.light_gray_valve_handle": "淡灰色阀门手轮", - "block.create.lime_nixie_tube": "UNLOCALIZED: Lime Nixie Tube", + "block.create.lime_nixie_tube": "黄绿色辉光管", "block.create.lime_sail": "黄绿色风帆", "block.create.lime_seat": "黄绿色坐垫", "block.create.lime_valve_handle": "黄绿色阀门手轮", @@ -236,7 +236,7 @@ "block.create.limestone_pillar": "竖纹石灰岩", "block.create.linear_chassis": "机壳底盘", "block.create.lit_blaze_burner": "烈焰人燃烧室(已点燃)", - "block.create.magenta_nixie_tube": "UNLOCALIZED: Magenta Nixie Tube", + "block.create.magenta_nixie_tube": "品红色辉光管", "block.create.magenta_sail": "品红色风帆", "block.create.magenta_seat": "品红色坐垫", "block.create.magenta_valve_handle": "品红色阀门手轮", @@ -320,8 +320,8 @@ "block.create.paved_weathered_limestone_slab": "风化石灰岩铺路石台阶", "block.create.paved_weathered_limestone_stairs": "风化石灰岩铺路石楼梯", "block.create.paved_weathered_limestone_wall": "风化石灰岩铺路石墙", - "block.create.peculiar_bell": "UNLOCALIZED: Peculiar Bell", - "block.create.pink_nixie_tube": "UNLOCALIZED: Pink Nixie Tube", + "block.create.peculiar_bell": "奇异钟", + "block.create.pink_nixie_tube": "粉色辉光管", "block.create.pink_sail": "粉红色风帆", "block.create.pink_seat": "粉红色坐垫", "block.create.pink_valve_handle": "粉红色阀门手轮", @@ -356,12 +356,12 @@ "block.create.powered_toggle_latch": "转换锁存器", "block.create.pulley_magnet": "滑轮磁铁", "block.create.pulse_repeater": "脉冲中继器", - "block.create.purple_nixie_tube": "UNLOCALIZED: Purple Nixie Tube", + "block.create.purple_nixie_tube": "紫色辉光管", "block.create.purple_sail": "紫色风帆", "block.create.purple_seat": "紫色坐垫", "block.create.purple_valve_handle": "紫色阀门手轮", "block.create.radial_chassis": "旋转底盘", - "block.create.red_nixie_tube": "UNLOCALIZED: Red Nixie Tube", + "block.create.red_nixie_tube": "红色辉光管", "block.create.red_sail": "红色风帆", "block.create.red_seat": "红色坐垫", "block.create.red_valve_handle": "红色阀门手轮", @@ -418,26 +418,26 @@ "block.create.weathered_limestone_cobblestone_wall": "风化石灰岩圆石墙", "block.create.weathered_limestone_pillar": "竖纹风化石灰岩", "block.create.weighted_ejector": "弹射置物台", - "block.create.white_nixie_tube": "UNLOCALIZED: White Nixie Tube", + "block.create.white_nixie_tube": "白色辉光管", "block.create.white_sail": "白色风帆", "block.create.white_seat": "白色坐垫", "block.create.white_valve_handle": "白色阀门手轮", "block.create.windmill_bearing": "风车轴承", "block.create.wooden_bracket": "木质支架", - "block.create.yellow_nixie_tube": "UNLOCALIZED: Yellow Nixie Tube", + "block.create.yellow_nixie_tube": "黄色辉光管", "block.create.yellow_sail": "黄色风帆", "block.create.yellow_seat": "黄色坐垫", "block.create.yellow_valve_handle": "黄色阀门手轮", "block.create.zinc_block": "锌块", "block.create.zinc_ore": "锌矿石", - "enchantment.create.capacity": "UNLOCALIZED: Capacity", - "enchantment.create.potato_recovery": "UNLOCALIZED: Potato Recovery", + "enchantment.create.capacity": "扩容", + "enchantment.create.potato_recovery": "土豆回收", "entity.create.contraption": "装置", - "entity.create.crafting_blueprint": "UNLOCALIZED: Crafting Blueprint", + "entity.create.crafting_blueprint": "合成蓝图", "entity.create.gantry_contraption": "起重机装置", - "entity.create.potato_projectile": "UNLOCALIZED: Potato Projectile", + "entity.create.potato_projectile": "被发射的土豆", "entity.create.seat": "坐垫", "entity.create.stationary_contraption": "固定装置", "entity.create.super_glue": "强力胶", @@ -462,13 +462,13 @@ "item.create.chocolate_glazed_berries": "巧克力包层浆果", "item.create.chromatic_compound": "异彩化合物", "item.create.cinder_flour": "下界面粉", - "item.create.copper_backtank": "UNLOCALIZED: Copper Backtank", + "item.create.copper_backtank": "铜制背罐", "item.create.copper_ingot": "铜锭", "item.create.copper_nugget": "铜粒", "item.create.copper_sheet": "铜板", "item.create.crafter_slot_cover": "合成器盖板", - "item.create.crafting_blueprint": "UNLOCALIZED: Crafting Blueprint", - "item.create.creative_cake": "UNLOCALIZED: Creative Cake", + "item.create.crafting_blueprint": "合成蓝图", + "item.create.creative_blaze_cake": "UNLOCALIZED: Creative Blaze Cake", "item.create.crushed_aluminum_ore": "粉碎铝矿石", "item.create.crushed_brass": "粉碎黄铜", "item.create.crushed_copper_ore": "粉碎铜矿石", @@ -483,8 +483,8 @@ "item.create.crushed_tin_ore": "粉碎锡矿石", "item.create.crushed_uranium_ore": "粉碎铀矿石", "item.create.crushed_zinc_ore": "粉碎锌矿石", - "item.create.diving_boots": "UNLOCALIZED: Diving Boots", - "item.create.diving_helmet": "UNLOCALIZED: Diving Helmet", + "item.create.diving_boots": "潜水靴", + "item.create.diving_helmet": "潜水头盔", "item.create.dough": "面团", "item.create.electron_tube": "电子管", "item.create.empty_blaze_burner": "空的烈焰人燃烧室", @@ -497,17 +497,17 @@ "item.create.handheld_worldshaper": "手持式环境塑形器", "item.create.honey_bucket": "蜂蜜桶", "item.create.honeyed_apple": "蜜渍苹果", - "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": "齿轮(半成品)", + "item.create.incomplete_large_cogwheel": "大齿轮(半成品)", + "item.create.incomplete_precision_mechanism": "精密机构(半成品)", "item.create.iron_sheet": "铁板", - "item.create.linked_controller": "UNLOCALIZED: Linked Controller", + "item.create.linked_controller": "无线红石遥控器", "item.create.minecart_contraption": "装配过的矿车", "item.create.minecart_coupling": "矿车连轴器", "item.create.polished_rose_quartz": "磨制玫瑰石英", - "item.create.potato_cannon": "UNLOCALIZED: Potato Cannon", + "item.create.potato_cannon": "土豆加农炮", "item.create.powdered_obsidian": "黑曜石粉末", - "item.create.precision_mechanism": "UNLOCALIZED: Precision Mechanism", + "item.create.precision_mechanism": "精密机构", "item.create.propeller": "扇叶", "item.create.red_sand_paper": "红沙砂纸", "item.create.refined_radiance": "光辉石", @@ -652,8 +652,8 @@ "advancement.create.flywheel.desc": "将引擎成功连接到飞轮。", "advancement.create.overstress_flywheel": "高压", "advancement.create.overstress_flywheel.desc": "过载熔炉引擎。", - "advancement.create.precision_mechanism": "UNLOCALIZED: Complex Curiosities", - "advancement.create.precision_mechanism.desc": "UNLOCALIZED: Assemble a Precision Mechanism.", + "advancement.create.precision_mechanism": "高新技术", + "advancement.create.precision_mechanism.desc": "装配一个精密机构。", "advancement.create.mechanical_arm": "忙碌的手!", "advancement.create.mechanical_arm.desc": "制作机械臂,选择输入和输出,放置并给予它动力,然后看着它为你完成所有工作。", "advancement.create.musical_arm": "没人能在我的 BGM 里打败我!", @@ -680,8 +680,8 @@ "advancement.create.wand_of_symmetry.desc": "制作一个对称之杖", "advancement.create.extendo_grip": "biu biu biu!", "advancement.create.extendo_grip.desc": "获得一个伸缩机械手", - "advancement.create.potato_cannon": "UNLOCALIZED: Fwoomp!", - "advancement.create.potato_cannon.desc": "UNLOCALIZED: Defeat an enemy with your Potato Cannon.", + "advancement.create.potato_cannon": "Fwoomp!", + "advancement.create.potato_cannon.desc": "用土豆加农炮击杀一个生物。", "advancement.create.dual_extendo_grip": "biu——biu——biu——", "advancement.create.dual_extendo_grip.desc": "双持伸缩机械手,超人般的触碰距离。", "advancement.create.eob": "Beta 版结束", @@ -694,30 +694,30 @@ "itemGroup.create.palettes": "机械动力建筑方块", "death.attack.create.crush": "%1$s被压扁了", - "death.attack.create.crush.player": "UNLOCALIZED: %1$s was thrown into Crushing Wheels by %2$s", + "death.attack.create.crush.player": "%1$s被%2$s推进了粉碎机", "death.attack.create.fan_fire": "%1$s试图接受热风的洗礼", - "death.attack.create.fan_fire.player": "UNLOCALIZED: %1$s was thrown into a smoker by %2$s", + "death.attack.create.fan_fire.player": "%2$s给了%1$s一次热风的洗礼", "death.attack.create.fan_lava": "%1$s在接受热风的洗礼中浴火焚身", - "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被%2$s火化了", "death.attack.create.mechanical_drill": "%1$s被钻头钻的坏掉了", - "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因为%2$s和钻头来了一次亲密接触", "death.attack.create.mechanical_saw": "%1$s被圆锯切成了两截", - "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被%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": "UNLOCALIZED: %1$s was blown up by tampered cuckoo clock", + "death.attack.create.cuckoo_clock_explosion.player": "%1$s被布谷鸟钟炸得粉身碎骨", "create.block.deployer.damage_source_name": "二五仔机械手", "create.block.cart_assembler.invalid": "请将矿车装配器放置在铁轨上", - "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": "返回上一级菜单", + "create.menu.configure": "配置...", + "create.menu.ponder_index": "思索内容清单", + "create.menu.only_ingame": "仅在游戏内暂停菜单中可用", + "create.menu.project_page": "在CurseForge上查看", + "create.menu.report_bugs": "报告Create的漏洞", + "create.menu.support": "支持我们", "create.recipe.crushing": "粉碎", "create.recipe.milling": "研磨", @@ -729,7 +729,7 @@ "create.recipe.fan_blasting.fan": "在熔岩后放置鼓风机", "create.recipe.pressing": "金属压片", "create.recipe.mixing": "混合搅拌", - "create.recipe.deploying": "UNLOCALIZED: Deploying", + "create.recipe.deploying": "自动使用", "create.recipe.automatic_shapeless": "自动搅拌", "create.recipe.automatic_brewing": "自动酿造", "create.recipe.packing": "压块塑形", @@ -743,16 +743,16 @@ "create.recipe.mystery_conversion": "神秘转化", "create.recipe.spout_filling": "注液", "create.recipe.draining": "分液", - "create.recipe.sequenced_assembly": "UNLOCALIZED: Sequenced Assembly", - "create.recipe.assembly.next": "UNLOCALIZED: Next: %1$s", - "create.recipe.assembly.step": "UNLOCALIZED: Step %1$s:", - "create.recipe.assembly.progress": "UNLOCALIZED: Progress: %1$s/%2$s", - "create.recipe.assembly.pressing": "UNLOCALIZED: Process in Press", - "create.recipe.assembly.spout_filling_fluid": "UNLOCALIZED: Spout %1$s", - "create.recipe.assembly.deploying_item": "UNLOCALIZED: Deploy %1$s", - "create.recipe.assembly.cutting": "UNLOCALIZED: Cut with Saw", - "create.recipe.assembly.repeat": "UNLOCALIZED: Repeat Sequence %1$s Times", - "create.recipe.assembly.junk": "UNLOCALIZED: Random salvage", + "create.recipe.sequenced_assembly": "流水线装配", + "create.recipe.assembly.next": "下一步:%1$s", + "create.recipe.assembly.step": "第%1$s步:", + "create.recipe.assembly.progress": "组装进度:%1$s/%2$s", + "create.recipe.assembly.pressing": "用辊压机辊压", + "create.recipe.assembly.spout_filling_fluid": "注入%1$s", + "create.recipe.assembly.deploying_item": "安装%1$s", + "create.recipe.assembly.cutting": "用动力锯切割", + "create.recipe.assembly.repeat": "该序列需要重复%1$s次", + "create.recipe.assembly.junk": "随机废料", "create.recipe.processing.chance": "%1$s%%概率", "create.recipe.heat_requirement.none": "无需加热", "create.recipe.heat_requirement.heated": "加热", @@ -806,15 +806,15 @@ "create.orientation.alongX": "以x轴对齐", "create.gui.terrainzapper.title": "手持式环境塑形器", - "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": "对角线延伸", + "create.gui.terrainzapper.searchFuzzy": "模糊模式(忽略材料分界)", + "create.gui.terrainzapper.patternSection": "样式", + "create.gui.terrainzapper.pattern.solid": "填满", + "create.gui.terrainzapper.pattern.checkered": "棋盘格", + "create.gui.terrainzapper.pattern.inversecheckered": "反转棋盘格", + "create.gui.terrainzapper.pattern.chance25": "随机填充25%", + "create.gui.terrainzapper.pattern.chance50": "随机填充50%", + "create.gui.terrainzapper.pattern.chance75": "随机填充75%", "create.gui.terrainzapper.placement": "放置模式", "create.gui.terrainzapper.placement.merged": "结合", "create.gui.terrainzapper.placement.attached": "依附", @@ -823,8 +823,8 @@ "create.gui.terrainzapper.brush.cuboid": "矩形体", "create.gui.terrainzapper.brush.sphere": "球体", "create.gui.terrainzapper.brush.cylinder": "圆柱体", - "create.gui.terrainzapper.brush.surface": "UNLOCALIZED: Surface", - "create.gui.terrainzapper.brush.cluster": "UNLOCALIZED: Cluster", + "create.gui.terrainzapper.brush.surface": "连接的面", + "create.gui.terrainzapper.brush.cluster": "连接的立体区域", "create.gui.terrainzapper.tool": "填充类型", "create.gui.terrainzapper.tool.fill": "填充", "create.gui.terrainzapper.tool.place": "复写", @@ -834,8 +834,8 @@ "create.gui.terrainzapper.tool.flatten": "平整", "create.terrainzapper.shiftRightClickToSet": "Shift+鼠标右击以设置塑形类型", - "create.terrainzapper.usingBlock": "UNLOCALIZED: Using: %1$s", - "create.terrainzapper.leftClickToSet": "UNLOCALIZED: Left-Click a Block to set Material", + "create.terrainzapper.usingBlock": "填充材料:%1$s", + "create.terrainzapper.leftClickToSet": "鼠标左击一个方块以设置填充材料", "create.minecart_coupling.two_couplings_max": "矿车无法被连接两个以上的矿车连轴器", "create.minecart_coupling.unloaded": "有一部分火车存在于未加载区块中", @@ -1066,11 +1066,11 @@ "create.item_attributes.in_item_group.inverted": "不属于%1$s", "create.item_attributes.added_by": "由%1$s添加", "create.item_attributes.added_by.inverted": "不是由%1$s添加", - "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": "潜影盒是%1$s的", + "create.item_attributes.shulker_level.inverted": "潜影盒不是%1$s的", + "create.item_attributes.shulker_level.full": "满", + "create.item_attributes.shulker_level.empty": "空", + "create.item_attributes.shulker_level.partial": "半满", "create.item_attributes.has_enchant": "有附魔效果%1$s", "create.item_attributes.has_enchant.inverted": "没有附魔效果%1$s", "create.item_attributes.color": "染色为%1$s", @@ -1166,27 +1166,27 @@ "create.tooltip.chute.fans_pull_up": "鼓风机从上方进行吸引", "create.tooltip.chute.fans_pull_down": "鼓风机从下方进行吸引", "create.tooltip.chute.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.brass_tunnel.contains": "等待分配的物品:", + "create.tooltip.brass_tunnel.contains_entry": "> %2$s个%1$s", + "create.tooltip.brass_tunnel.retrieve": "鼠标右击取出", - "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": "绑定模式激活", + "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", - "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": "合成材料格", + "create.crafting_blueprint.filter_items_viable": "可以使用过滤器", + "create.crafting_blueprint.display_slot": "展示的图标", + "create.crafting_blueprint.inferred": "已根据合成配方自动设定", + "create.crafting_blueprint.manually_assigned": "手动设定", + "create.crafting_blueprint.secondary_display_slot": "展示的图标角标", + "create.crafting_blueprint.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 攻击伤害", + "create.potato_cannon.ammo.reload_ticks": "%1$s 装弹时间(Ticks)", + "create.potato_cannon.ammo.knockback": "%1$s 击退", "create.hint.hose_pulley.title": "无限供应", "create.hint.hose_pulley": "目标液体对象被视为无限量的。", @@ -1215,46 +1215,46 @@ "create.command.killTPSCommand.argument.tickTime": "tickTime", "create.contraption.minecart_contraption_too_big": "这一矿车装置似乎太大了,无法变为拾捡状态", - "create.contraption.minecart_contraption_illegal_pickup": "UNLOCALIZED: A mystical force is binding this Cart Contraption to the world", + "create.contraption.minecart_contraption_illegal_pickup": "神秘的力量阻止你拾取这个矿车装置。", "_": "->------------------------] 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.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": "结构:停止移动", + "create.subtitle.peculiar_bell_use": "奇异钟:鸣响", + "create.subtitle.mixing": "搅拌器:搅拌声", + "create.subtitle.mechanical_press_activation_belt": "辊压机:撞击传送带", + "create.subtitle.fwoomp": "土豆加农炮:发射", + "create.subtitle.worldshaper_place": "环境塑型器:放置方块", + "create.subtitle.crushing_1": "磨碎声", + "create.subtitle.depot_slide": "物品:滑入", + "create.subtitle.saw_activate_stone": "动力锯:切割", "create.subtitle.blaze_munch": "烈焰人:咀嚼", - "create.subtitle.funnel_flap": "UNLOCALIZED: Funnel flaps", + "create.subtitle.funnel_flap": "漏斗:垂帘碰撞", "create.subtitle.schematicannon_finish": "蓝图加农炮:叮", - "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.cogs": "UNLOCALIZED: Cogwheels rumble", + "create.subtitle.haunted_bell_use": "怪异钟:鸣响", + "create.subtitle.scroll_value": "拨码输入:咔哒", + "create.subtitle.crafter_craft": "动力合成器:合成中", + "create.subtitle.controller_put": "遥控器:放进讲台", + "create.subtitle.cranking": "手摇曲柄:转动", + "create.subtitle.wrench_remove": "部件:被破坏", + "create.subtitle.cogs": "齿轮:嘎吱作响", "create.subtitle.slime_added": "粘液:挤碎声", - "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.deployer_polish": "UNLOCALIZED: Deployer applies polish", - "create.subtitle.deny": "UNLOCALIZED: Declining boop", - "create.subtitle.controller_click": "UNLOCALIZED: Controller clicks", + "create.subtitle.wrench_rotate": "扳手:拧动", + "create.subtitle.potato_hit": "土豆:击中", + "create.subtitle.saw_activate_wood": "动力锯:切割", + "create.subtitle.haunted_bell_convert": "奇异钟:转化", + "create.subtitle.deployer_polish": "机械手:打磨物品", + "create.subtitle.deny": "提示声:出错", + "create.subtitle.controller_click": "遥控器:按下按钮", "create.subtitle.schematicannon_launch_block": "蓝图加农炮:发射", - "create.subtitle.copper_armor_equip": "UNLOCALIZED: Diving equipment clinks", - "create.subtitle.controller_take": "UNLOCALIZED: Lectern empties", + "create.subtitle.copper_armor_equip": "潜水装备:铿锵", + "create.subtitle.controller_take": "讲台:取走物品", "create.subtitle.mechanical_press_activation": "辊压机:工作中", - "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": "结构:开始移动", + "create.subtitle.crafter_click": "动力合成器:咔哒声", + "create.subtitle.depot_plop": "物品:着地", + "create.subtitle.confirm": "提示声:接受", "_": "->------------------------] Item Descriptions [------------------------<-", @@ -1311,15 +1311,15 @@ "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": "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.condition2": "当装备铜制背罐时", + "item.create.extendo_grip.tooltip.behaviour2": "使用罐中_气压_来_抵消_伸缩机械手的_耐久_损耗。", - "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": "土豆加农炮", + "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": "可用于_精确_控制物流设备的_输出_以及_输入_,使得通过的物品流与_一组_物品或者数个_相嵌套的过滤器_相匹配。", @@ -1360,8 +1360,8 @@ "block.create.schematicannon.tooltip": "蓝图加农炮", "block.create.schematicannon.tooltip.summary": "发射方块,重新构建已在世界中部署的_蓝图_,会使用相邻箱子中的物品进行填充,_火药_作为燃料。", - "block.create.schematicannon.tooltip.condition1": "UNLOCALIZED: When R-Clicked", - "block.create.schematicannon.tooltip.behaviour1": "UNLOCALIZED: Opens the _Interface_", + "block.create.schematicannon.tooltip.condition1": "当右击时", + "block.create.schematicannon.tooltip.behaviour1": "打开_配置面板_。", "block.create.schematic_table.tooltip": "蓝图桌", "block.create.schematic_table.tooltip.summary": "将保存的蓝图图写入_空白蓝图_", @@ -1405,18 +1405,18 @@ "block.create.adjustable_crate.tooltip": "可调节板条箱", "block.create.adjustable_crate.tooltip.summary": "该箱子支持玩家对其容量进行调整,最大可以容纳_16组_物品。支持_红石比较器_。", - "block.create.adjustable_crate.tooltip.condition1": "UNLOCALIZED: When R-Clicked", - "block.create.adjustable_crate.tooltip.behaviour1": "UNLOCALIZED: Opens the _Interface_.", + "block.create.adjustable_crate.tooltip.condition1": "当右击时", + "block.create.adjustable_crate.tooltip.behaviour1": "打开_配置面板_。", "block.create.creative_crate.tooltip": "创造板条箱", "block.create.creative_crate.tooltip.summary": "这种_储存容器_可以无限地复制任何物品。它还可以移除附近的_蓝图加农炮_的材料需求。", "block.create.creative_crate.tooltip.condition1": "当标记了物品时", "block.create.creative_crate.tooltip.behaviour1": "任何从容器中_提取_的物品都是_无限量的_,而任何_放置_到容器中的物品都会被_送入虚空_", - "item.create.creative_cake.tooltip": "UNLOCALIZED: CREATIVE CAKE", - "item.create.creative_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_cake.tooltip.condition1": "UNLOCALIZED: R-Click on Blaze Burner", - "item.create.creative_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": "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.", "block.create.controller_rail.tooltip": "控制铁轨", "block.create.controller_rail.tooltip.summary": "一种_汇流的,受红石信号影响的_铁轨,可以_较好地控制_经过矿车的_移动速度_。", @@ -1433,61 +1433,61 @@ "item.create.refined_radiance.tooltip": "光辉石", "item.create.refined_radiance.tooltip.summary": "一种用_光辉_锻造的化合物材料。", - "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.condition1": "尚未完工", + "item.create.refined_radiance.tooltip.behaviour1": "该材料在未来可能会有更多的用途。", "item.create.shadow_steel.tooltip": "暗影钢", "item.create.shadow_steel.tooltip.summary": "一种用_虚空_锻造的化合物材料。", - "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.condition1": "尚未完工", + "item.create.shadow_steel.tooltip.behaviour1": "该材料在未来可能会有更多的用途。", - "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": "无线红石遥控器", + "item.create.linked_controller.tooltip.summary": "提供_六个_可以绑定_无线红石_频道的按钮,用于_遥控_附近的_无线红石信号终端_。", + "item.create.linked_controller.tooltip.condition1": "右击时", + "item.create.linked_controller.tooltip.behaviour1": "_拿起_或_放下_遥控器。拿起遥控器时,_移动_按键将被用来_操作遥控器_而不是移动玩家。", + "item.create.linked_controller.tooltip.condition2": "潜行右击时", + "item.create.linked_controller.tooltip.behaviour2": "打开手动_配置界面_。", + "item.create.linked_controller.tooltip.condition3": "右击无线红石信号终端时", + "item.create.linked_controller.tooltip.behaviour3": "启用_配对模式_,按_六个按键_中的一个来配对_无线红石信号终端_的_频率_。", + "item.create.linked_controller.tooltip.condition4": "右击讲台时", + "item.create.linked_controller.tooltip.behaviour4": "将遥控器放在讲台上以便使用。(潜行右击来取回遥控器。)", - "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": "潜水头盔", + "item.create.diving_helmet.tooltip.summary": "与_铜制背罐_配合使用,为穿戴者提供在_水下_行动一段时间所需的_空气_。", + "item.create.diving_helmet.tooltip.condition1": "戴在头上时", + "item.create.diving_helmet.tooltip.behaviour1": "提供_水下呼吸_效果。缓慢消耗背罐中的_压缩空气_。", - "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": "铜制背罐", + "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.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": "潜水靴", + "item.create.diving_boots.tooltip.summary": "一双_沉重的靴子_,让穿戴者可以更方便的探索海底。", + "item.create.diving_boots.tooltip.condition1": "穿在脚上时", + "item.create.diving_boots.tooltip.behaviour1": "穿戴者_下沉更快_并_无法游泳_。穿戴者可以在水下_行走_和_跳跃_。穿戴者不会被_传送带_移走。", - "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": "合成蓝图", + "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": "将两个矿车耦合在一起,在移动时将它们保持_恒定的距离_。", - "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": "奇异钟", + "block.create.peculiar_bell.tooltip.summary": "装饰用的_黄铜质钟_。放在_灵魂火_的正上方可能会产生意料之外的后果……", - "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": "怪异钟", + "block.create.haunted_bell.tooltip.summary": "_被诅咒_的钟,其中充满了来自下界的迷失的灵魂。", + "block.create.haunted_bell.tooltip.condition1": "当手持或鸣响时", + "block.create.haunted_bell.tooltip.behaviour1": "标识出附近可能生成_敌对生物_的_黑暗_的地方。", "_": "->------------------------] Ponder Content [------------------------<-", @@ -1504,11 +1504,11 @@ "create.ponder.replay": "重放", "create.ponder.think_back": "回想", "create.ponder.slow_text": "舒适阅读", - "create.ponder.exit": "UNLOCALIZED: Exit", - "create.ponder.welcome": "UNLOCALIZED: Welcome to Ponder", - "create.ponder.categories": "UNLOCALIZED: Available Categories in Create", - "create.ponder.index_description": "UNLOCALIZED: Click one of the icons to learn about its associated Items and Blocks", - "create.ponder.index_title": "UNLOCALIZED: Ponder Index", + "create.ponder.exit": "退出", + "create.ponder.welcome": "欢迎来到思索项目列表", + "create.ponder.categories": "机械动力中包含的条目", + "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": "与装置相接的存储空间,会自动将装置遇到的掉落物拾取到空间内。", @@ -1655,8 +1655,8 @@ "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_3": "UNLOCALIZED: If the Assembler is set to Lock Rotation, the contraptions' orientation will never change", + "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": "放置在普通轨道上的矿车装配站并不会影响路过矿车装置的运动", @@ -1710,11 +1710,11 @@ "create.ponder.cogwheel.text_1": "齿轮会将动力传递至临近的齿轮", "create.ponder.cogwheel.text_2": "以此方式连接的齿轮,旋转方向相反", - "create.ponder.creative_fluid_tank.header": "UNLOCALIZED: Creative Fluid Tanks", - "create.ponder.creative_fluid_tank.text_1": "UNLOCALIZED: Creative Fluid Tanks can be used to provide a bottomless supply of fluid", - "create.ponder.creative_fluid_tank.text_2": "UNLOCALIZED: Right-Click with a fluid containing item to configure it", - "create.ponder.creative_fluid_tank.text_3": "UNLOCALIZED: Pipe Networks can now endlessly draw the assigned fluid from the tank", - "create.ponder.creative_fluid_tank.text_4": "UNLOCALIZED: Any Fluids pushed back into a Creative Fluid Tank will be voided", + "create.ponder.creative_fluid_tank.header": "创造流体储罐", + "create.ponder.creative_fluid_tank.text_1": "创造流体储罐可以提供无限数量的流体", + "create.ponder.creative_fluid_tank.text_2": "使用一个含有流体的容器右击它来设置它提供的流体", + "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": "创造马达不仅能够手动调配输出旋转力,而且体积相当小巧", @@ -1752,11 +1752,11 @@ "create.ponder.deployer_modes.text_1": "在默认情况下,机械手模仿玩家的右击交互", "create.ponder.deployer_modes.text_2": "使用扳手可以将模式调整为模仿玩家的左击交互", - "create.ponder.deployer_processing.header": "UNLOCALIZED: Processing Items using Deployers", - "create.ponder.deployer_processing.text_1": "UNLOCALIZED: With a fitting held item, Deployers can process items provided beneath them", - "create.ponder.deployer_processing.text_2": "UNLOCALIZED: The Input items can be dropped or placed on a Depot under the Deployer", - "create.ponder.deployer_processing.text_3": "UNLOCALIZED: When items are provided on a belt...", - "create.ponder.deployer_processing.text_4": "UNLOCALIZED: The Deployer will hold and process them automatically", + "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_redstone.header": "使用红石控制机械手", "create.ponder.deployer_redstone.text_1": "当被红石充能时,机械手会停止工作", @@ -1774,13 +1774,13 @@ "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": "UNLOCALIZED: The flame can be transformed using a soul-infused item", + "create.ponder.empty_blaze_burner.text_5": "使用包含灵魂的物品可以将火焰变为灵魂火", "create.ponder.empty_blaze_burner.text_6": "但是,这样的热源不足以给机器提加工供足够的热量", - "create.ponder.encased_fluid_pipe.header": "UNLOCALIZED: Encasing Fluid Pipes", - "create.ponder.encased_fluid_pipe.text_1": "UNLOCALIZED: Copper Casing can be used to decorate Fluid Pipes", - "create.ponder.encased_fluid_pipe.text_2": "UNLOCALIZED: Aside from being conceiled, Encased Pipes are locked into their connectivity state", - "create.ponder.encased_fluid_pipe.text_3": "UNLOCALIZED: It will no longer react to any neighbouring blocks being added or removed", + "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_3": "它将不会对旁边新增加或移除的管道做出反应", "create.ponder.fan_direction.header": "鼓风机的气流", "create.ponder.fan_direction.text_1": "鼓风机使用旋转力来制造气流", @@ -1800,34 +1800,34 @@ "create.ponder.fan_source.text_1": "如鼓风机的扇叶向下朝着热源放置,鼓风机可以借此产生旋转力", "create.ponder.fan_source.text_2": "当鼓风机接受红石信号后,它便会向外供给旋转力", - "create.ponder.fluid_pipe_flow.header": "UNLOCALIZED: Moving Fluids using Copper Pipes", - "create.ponder.fluid_pipe_flow.text_1": "UNLOCALIZED: Fluid Pipes can connect two or more fluid sources and targets", - "create.ponder.fluid_pipe_flow.text_2": "UNLOCALIZED: Using a wrench, a straight pipe segment can be given a window", - "create.ponder.fluid_pipe_flow.text_3": "UNLOCALIZED: Windowed pipes will not connect to any other adjacent pipe segments", - "create.ponder.fluid_pipe_flow.text_4": "UNLOCALIZED: Powered by Mechanical Pumps, the Pipes can transport Fluids", - "create.ponder.fluid_pipe_flow.text_5": "UNLOCALIZED: No fluid is being extracted at first", - "create.ponder.fluid_pipe_flow.text_6": "UNLOCALIZED: Once the flow connects them, the endpoints gradually transfer their contents", - "create.ponder.fluid_pipe_flow.text_7": "UNLOCALIZED: Thus, the Pipe blocks themselves never 'physically' contain any fluid", + "create.ponder.fluid_pipe_flow.header": "使用管道运输流体", + "create.ponder.fluid_pipe_flow.text_1": "流体管道可以用于连接两个或多个流体容器", + "create.ponder.fluid_pipe_flow.text_2": "使用扳手为直的管道增加观察窗", + "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_7": "这意味着流体管道本身并不真正存储任何流体", - "create.ponder.fluid_pipe_interaction.header": "UNLOCALIZED: Draining and Filling fluid containers", - "create.ponder.fluid_pipe_interaction.text_1": "UNLOCALIZED: Endpoints of a pipe network can interact with a variety of blocks", - "create.ponder.fluid_pipe_interaction.text_2": "UNLOCALIZED: Any block with fluid storage capabilities can be filled or drained", - "create.ponder.fluid_pipe_interaction.text_3": "UNLOCALIZED: Source blocks right in front of an open end can be picked up...", - "create.ponder.fluid_pipe_interaction.text_4": "UNLOCALIZED: ...while spilling into empty spaces can create fluid sources", - "create.ponder.fluid_pipe_interaction.text_5": "UNLOCALIZED: Pipes can also extract fluids from a handful of other blocks directly", + "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_5": "管道也可以从许多其他方块中直接抽取流体", - "create.ponder.fluid_tank_sizes.header": "UNLOCALIZED: Dimensions of a Fluid tank", - "create.ponder.fluid_tank_sizes.text_1": "UNLOCALIZED: Fluid Tanks can be combined to increase the total capacity", - "create.ponder.fluid_tank_sizes.text_2": "UNLOCALIZED: Their base square can be up to 3 blocks wide...", - "create.ponder.fluid_tank_sizes.text_3": "UNLOCALIZED: ...and grow in height by more than 30 additional layers", - "create.ponder.fluid_tank_sizes.text_4": "UNLOCALIZED: Using a Wrench, a tanks' window can be toggled", + "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_4": "使用扳手可以打开或关闭观察窗", - "create.ponder.fluid_tank_storage.header": "UNLOCALIZED: Storing Fluids in Fluid Tanks", - "create.ponder.fluid_tank_storage.text_1": "UNLOCALIZED: Fluid Tanks can be used to store large amounts of fluid", - "create.ponder.fluid_tank_storage.text_2": "UNLOCALIZED: Pipe networks can push and pull fluids from any side", - "create.ponder.fluid_tank_storage.text_3": "UNLOCALIZED: The contained fluid can be measured by a Comparator", - "create.ponder.fluid_tank_storage.text_4": "UNLOCALIZED: However, in Survival Mode Fluids cannot be added or taken manually", - "create.ponder.fluid_tank_storage.text_5": "UNLOCALIZED: You can use Basins, Item Drains and Spouts to drain or fill fluid containing items", + "create.ponder.fluid_tank_storage.header": "使用流体储罐存储流体", + "create.ponder.fluid_tank_storage.text_1": "流体储罐可以存储大量的流体", + "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.flywheel.header": "使用飞轮来产生旋转力", "create.ponder.flywheel.text_1": "飞轮和熔炉引擎必须配套使用,方可产生旋转力", @@ -1902,33 +1902,33 @@ "create.ponder.hand_crank.text_3": "它产生的转速相对较高", "create.ponder.hand_crank.text_4": "潜行长按右键可以顺时针旋转它", - "create.ponder.hose_pulley.header": "UNLOCALIZED: Source Filling and Draining using Hose Pulleys", - "create.ponder.hose_pulley.text_1": "UNLOCALIZED: Hose Pulleys can be used to fill or drain large bodies of Fluid", - "create.ponder.hose_pulley.text_2": "UNLOCALIZED: With the Kinetic Input, the height of the pulleys' hose can be controlled", - "create.ponder.hose_pulley.text_3": "UNLOCALIZED: The Pulley retracts while the input rotation is inverted", - "create.ponder.hose_pulley.text_4": "UNLOCALIZED: On the opposite side, pipes can be connected", - "create.ponder.hose_pulley.text_5": "UNLOCALIZED: Attached pipe networks can either provide fluid to the hose...", - "create.ponder.hose_pulley.text_6": "UNLOCALIZED: ...or pull from it, draining the pool instead", - "create.ponder.hose_pulley.text_7": "UNLOCALIZED: Fill and Drain speed of the pulley depends entirely on the fluid networks' throughput", + "create.ponder.hose_pulley.header": "使用软管滑轮抽取或排放流体", + "create.ponder.hose_pulley.text_1": "软管滑轮可以用于方便的抽取或填满一个较大区域中的流体", + "create.ponder.hose_pulley.text_2": "通过输入动力可以调节软管末端的高度", + "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_7": "软管滑轮的抽取/排放速度取决于连接管道中流体的流速", - "create.ponder.hose_pulley_infinite.header": "UNLOCALIZED: Passively Filling and Draining large bodies of Fluid", - "create.ponder.hose_pulley_infinite.text_1": "UNLOCALIZED: When deploying the Hose Pulley into a large enough ocean...", - "create.ponder.hose_pulley_infinite.text_2": "UNLOCALIZED: It will provide/dispose fluids without affecting the source", - "create.ponder.hose_pulley_infinite.text_3": "UNLOCALIZED: Pipe networks can limitlessly take fluids from/to such pulleys", + "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": "UNLOCALIZED: Fill and Drain level of Hose Pulleys", - "create.ponder.hose_pulley_level.text_1": "UNLOCALIZED: While fully retracted, the Hose Pulley cannot operate", - "create.ponder.hose_pulley_level.text_2": "UNLOCALIZED: Draining runs from top to bottom", - "create.ponder.hose_pulley_level.text_3": "UNLOCALIZED: The surface level will end up just below where the hose ends", - "create.ponder.hose_pulley_level.text_4": "UNLOCALIZED: Filling runs from bottom to top", - "create.ponder.hose_pulley_level.text_5": "UNLOCALIZED: The filled pool will not grow beyond the layer above the hose end", + "create.ponder.hose_pulley_level.header": "软管滑轮的排水/抽水机制", + "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": "流体将会由下至上被填充", + "create.ponder.hose_pulley_level.text_5": "流体最多只能被填充至软管开口所在的高度", - "create.ponder.item_drain.header": "UNLOCALIZED: Emptying Fluid Containers using Item Drains", - "create.ponder.item_drain.text_1": "UNLOCALIZED: Item Drains can extract fluids from items", - "create.ponder.item_drain.text_2": "UNLOCALIZED: Right-click it to pour fluids from your held item into it", - "create.ponder.item_drain.text_3": "UNLOCALIZED: When items are inserted from the side...", - "create.ponder.item_drain.text_4": "UNLOCALIZED: ...they roll across, emptying out their contained fluid", - "create.ponder.item_drain.text_5": "UNLOCALIZED: Pipe Networks can now pull the fluid from the drains' internal buffer", + "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.large_cogwheel.header": "使用大齿轮传递旋转力", "create.ponder.large_cogwheel.text_1": "大齿轮可以以特定的角度相互连接", @@ -2040,32 +2040,32 @@ "create.ponder.mechanical_plough.text_3": "此外,动力犁可以耕地", "create.ponder.mechanical_plough.text_4": "...它也可以在不伤害实体的情况下推动它们", - "create.ponder.mechanical_press.header": "使用动力辊轧机处理物品", - "create.ponder.mechanical_press.text_1": "动力辊轧机可以处理位于其下方的物品", + "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_4": "辊轧机会使物品停下,然后自动处理这一物品", + "create.ponder.mechanical_press.text_3": "当传送带上的物品经过辊压机下方时....", + "create.ponder.mechanical_press.text_4": "辊压机会使物品停下,然后自动处理这一物品", - "create.ponder.mechanical_press_compacting.header": "使用动力辊轧机压缩物品", + "create.ponder.mechanical_press_compacting.header": "使用动力辊压机压缩物品", "create.ponder.mechanical_press_compacting.text_1": "对放置于工作盆内的物品进行辊轧,可以将这些物品压缩在一起", "create.ponder.mechanical_press_compacting.text_2": "压缩意指任何同种物品填满了 2x2 或者 3x3 网格的配方,以及一些额外的配方", "create.ponder.mechanical_press_compacting.text_3": "一些配方可能需要烈焰人燃烧室提供热量", "create.ponder.mechanical_press_compacting.text_4": "过滤槽可用于解决两个配方相互冲突的情况", - "create.ponder.mechanical_pump_flow.header": "UNLOCALIZED: Fluid Transportation using Mechanical Pumps", - "create.ponder.mechanical_pump_flow.text_1": "UNLOCALIZED: Mechanical Pumps govern the flow of their attached pipe networks", - "create.ponder.mechanical_pump_flow.text_2": "UNLOCALIZED: When powered, their arrow indicates the direction of flow", - "create.ponder.mechanical_pump_flow.text_3": "UNLOCALIZED: The network behind is now pulling fluids...", - "create.ponder.mechanical_pump_flow.text_4": "UNLOCALIZED: ...while the network in front is transferring it outward", - "create.ponder.mechanical_pump_flow.text_5": "UNLOCALIZED: Reversing the input rotation reverses the direction of flow", - "create.ponder.mechanical_pump_flow.text_6": "UNLOCALIZED: Use a Wrench to reverse the orientation of pumps manually", + "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_5": "反转动力方向将会改变液体流向", + "create.ponder.mechanical_pump_flow.text_6": "使用扳手可以手动改变动力泵的朝向", - "create.ponder.mechanical_pump_speed.header": "UNLOCALIZED: Throughput of Mechanical Pumps", - "create.ponder.mechanical_pump_speed.text_1": "UNLOCALIZED: Regardless of speed, Mechanical Pumps affect pipes connected up to 16 blocks away", - "create.ponder.mechanical_pump_speed.text_2": "UNLOCALIZED: Speeding up the input rotation changes the speed of flow propagation...", - "create.ponder.mechanical_pump_speed.text_3": "UNLOCALIZED: ...aswell as how quickly fluids are transferred", - "create.ponder.mechanical_pump_speed.text_4": "UNLOCALIZED: Pumps can combine their throughputs within shared pipe networks", - "create.ponder.mechanical_pump_speed.text_5": "UNLOCALIZED: Alternating their orientation can help align their flow directions", + "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_4": "多个并联动力泵的传输量可以叠加", + "create.ponder.mechanical_pump_speed.text_5": "交替摆放动力泵可以方便的控制液体流动", "create.ponder.mechanical_saw_breaker.header": "使用动力锯伐木", "create.ponder.mechanical_saw_breaker.text_1": "向其通入旋转力后,动力锯可以直接砍伐掉它面前的树木", @@ -2078,7 +2078,7 @@ "create.ponder.mechanical_saw_processing.header": "使用动力锯处理物品", "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_3": "锯子可以配合其两侧的传送带输入输出", "create.ponder.mechanical_saw_processing.text_4": "若输入原料有多种可能产物,你可以用动力锯上的过滤槽指定只产出某种产物", "create.ponder.mechanical_saw_processing.text_5": "若没有使用过滤槽,动力锯会在各产物中按顺序循环输出", @@ -2091,22 +2091,22 @@ "create.ponder.nixie_tube.header": "使用辉光管", "create.ponder.nixie_tube.text_1": "通入红石信号后,辉光管会显示出红石信号的强度", - "create.ponder.nixie_tube.text_2": "使用命名牌在铁砧上为其命名,可以自定义它的显示文本", - "create.ponder.nixie_tube.text_3": "UNLOCALIZED: Right-Click with Dye to change their display colour", + "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.portable_fluid_interface.header": "UNLOCALIZED: Contraption Fluid Exchange", - "create.ponder.portable_fluid_interface.text_1": "UNLOCALIZED: Fluid Tanks on moving contraptions cannot be accessed by any pipes", - "create.ponder.portable_fluid_interface.text_2": "UNLOCALIZED: This component can interact with fluid tanks without the need to stop the contraption", - "create.ponder.portable_fluid_interface.text_3": "UNLOCALIZED: Place a second one with a gap of 1 or 2 blocks inbetween", - "create.ponder.portable_fluid_interface.text_4": "UNLOCALIZED: Whenever they pass by each other, they will engage in a connection", - "create.ponder.portable_fluid_interface.text_5": "UNLOCALIZED: While engaged, the stationary interface will represent ALL Tanks on the contraption", - "create.ponder.portable_fluid_interface.text_6": "UNLOCALIZED: Fluid can now be inserted...", - "create.ponder.portable_fluid_interface.text_7": "UNLOCALIZED: ...or extracted from the contraption", - "create.ponder.portable_fluid_interface.text_8": "UNLOCALIZED: After no contents have been exchanged for a while, the contraption will continue on its way", + "create.ponder.portable_fluid_interface.header": "装置流体交换", + "create.ponder.portable_fluid_interface.text_1": "管道无法与运动装置内的流体储罐直接交互", + "create.ponder.portable_fluid_interface.text_2": "这一组件可以在不停止装置的情况下与装置内的流体存储进行交互", + "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_8": "如果一小段时间内没有流体交换,接口将会断开连接,然后装置重新开始运动", "create.ponder.portable_storage_interface.header": "装置存储交换", "create.ponder.portable_storage_interface.text_1": "玩家无法与运动装置内的存储空间进行交互", @@ -2114,9 +2114,9 @@ "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_6": "物品可被输入到装置内...", "create.ponder.portable_storage_interface.text_7": "...或是从装置中提取出来", - "create.ponder.portable_storage_interface.text_8": "物品交换完毕后,装置仍然会停留在原地一小会,然后才会继续前行", + "create.ponder.portable_storage_interface.text_8": "如果一小段时间内没有物品交换,接口将会断开连接,然后装置重新开始运动", "create.ponder.portable_storage_interface_redstone.header": "红石控制", "create.ponder.portable_storage_interface_redstone.text_1": "通入红石信号可以阻止固定侧接口的连接行为", @@ -2205,24 +2205,24 @@ "create.ponder.smart_chute.text_3": "使用鼠标滚轮可以指定被过滤的物品数量", "create.ponder.smart_chute.text_4": "通入红石信号,智能溜槽将会完全暂停工作", - "create.ponder.smart_pipe.header": "UNLOCALIZED: Controlling Fluid flow using Smart Pipes", - "create.ponder.smart_pipe.text_1": "UNLOCALIZED: Smart pipes can help control flows by fluid type", - "create.ponder.smart_pipe.text_2": "UNLOCALIZED: When placed directly at the source, they can specify the type of fluid to extract", - "create.ponder.smart_pipe.text_3": "UNLOCALIZED: Simply Right-Click their filter slot with any item containing the desired fluid", - "create.ponder.smart_pipe.text_4": "UNLOCALIZED: When placed further down a pipe network, smart pipes will only let matching fluids continue", + "create.ponder.smart_pipe.header": "使用智能流体管道控制液体流动", + "create.ponder.smart_pipe.text_1": "智能流体管道可以限制通过它的流体种类", + "create.ponder.smart_pipe.text_2": "当紧邻流体源放置时,管道只会抽取设置的流体种类", + "create.ponder.smart_pipe.text_3": "使用任何包含流体的容器右键过滤槽来标记过滤的流体", + "create.ponder.smart_pipe.text_4": "当放在管线中时,只有匹配过滤器的流体才能流入它后方的管道", "create.ponder.speedometer.header": "使用速度表来监测转速", "create.ponder.speedometer.text_1": "速度表能显示相接组件的转速", "create.ponder.speedometer.text_2": "当佩戴工程师护目镜时,可以看到仪表所显示的更详细的数据", "create.ponder.speedometer.text_3": "红石比较器可以根据速度表的数值输出不同强弱的红石信号", - "create.ponder.spout_filling.header": "UNLOCALIZED: Filling Items using a Spout", - "create.ponder.spout_filling.text_1": "UNLOCALIZED: The Spout can fill fluid holding items provided beneath it", - "create.ponder.spout_filling.text_2": "UNLOCALIZED: The content of a Spout cannot be accessed manually", - "create.ponder.spout_filling.text_3": "UNLOCALIZED: Instead, Pipes can be used to supply it with fluids", - "create.ponder.spout_filling.text_4": "UNLOCALIZED: The Input items can be placed on a Depot under the Spout", - "create.ponder.spout_filling.text_5": "UNLOCALIZED: When items are provided on a belt...", - "create.ponder.spout_filling.text_6": "UNLOCALIZED: The Spout will hold and process them automatically", + "create.ponder.spout_filling.header": "使用注液器填充物品", + "create.ponder.spout_filling.text_1": "注液器可以将流体装入下方经过的,可以接受该流体的物品", + "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_6": "注液器会使物品停下,然后自动处理这一物品", "create.ponder.stabilized_bearings.header": "装置固定朝向", "create.ponder.stabilized_bearings.text_1": "当动力轴承在结构被带动时...", @@ -2255,11 +2255,11 @@ "create.ponder.valve_handle.text_4": "潜行右击可使它顺时针旋转", "create.ponder.valve_handle.text_5": "可以通过染色来美化阀门手轮", - "create.ponder.valve_pipe.header": "UNLOCALIZED: Controlling Fluid flow using Valves", - "create.ponder.valve_pipe.text_1": "UNLOCALIZED: Valve pipes help control fluids propagating through pipe networks", - "create.ponder.valve_pipe.text_2": "UNLOCALIZED: Their shaft input controls whether fluid is currently allowed through", - "create.ponder.valve_pipe.text_3": "UNLOCALIZED: Given Rotational Force in the opening direction, the valve will open up", - "create.ponder.valve_pipe.text_4": "UNLOCALIZED: It can be closed again by reversing the input rotation", + "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": "水车利用临近的水流来进行应力发生", diff --git a/src/generated/resources/assets/create/lang/unfinished/zh_tw.json b/src/generated/resources/assets/create/lang/unfinished/zh_tw.json index 447ccccbb..06cf61e51 100644 --- a/src/generated/resources/assets/create/lang/unfinished/zh_tw.json +++ b/src/generated/resources/assets/create/lang/unfinished/zh_tw.json @@ -468,7 +468,7 @@ "item.create.copper_sheet": "銅板", "item.create.crafter_slot_cover": "合成器蓋板", "item.create.crafting_blueprint": "合成藍圖", - "item.create.creative_cake": "UNLOCALIZED: Creative Cake", + "item.create.creative_blaze_cake": "UNLOCALIZED: Creative Blaze Cake", "item.create.crushed_aluminum_ore": "碎狀鋁礦石", "item.create.crushed_brass": "碎狀黃銅", "item.create.crushed_copper_ore": "碎狀銅礦石", @@ -1413,10 +1413,10 @@ "block.create.creative_crate.tooltip.condition1": "當標記了物品時", "block.create.creative_crate.tooltip.behaviour1": "容器將會從虛空中提供_無限量_的標記物品,並且任何放置到容器中的物品都會被_送入虛空_", - "item.create.creative_cake.tooltip": "UNLOCALIZED: CREATIVE CAKE", - "item.create.creative_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_cake.tooltip.condition1": "UNLOCALIZED: R-Click on Blaze Burner", - "item.create.creative_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": "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.", "block.create.controller_rail.tooltip": "控制鐵軌", "block.create.controller_rail.tooltip.summary": "單向電動導軌,能夠精細控制礦車的移動速度。", diff --git a/src/generated/resources/assets/create/models/item/creative_cake.json b/src/generated/resources/assets/create/models/item/creative_blaze_cake.json similarity index 56% rename from src/generated/resources/assets/create/models/item/creative_cake.json rename to src/generated/resources/assets/create/models/item/creative_blaze_cake.json index 099efc773..810fb81b9 100644 --- a/src/generated/resources/assets/create/models/item/creative_cake.json +++ b/src/generated/resources/assets/create/models/item/creative_blaze_cake.json @@ -1,6 +1,6 @@ { "parent": "minecraft:item/generated", "textures": { - "layer0": "create:item/creative_cake" + "layer0": "create:item/creative_blaze_cake" } } \ No newline at end of file diff --git a/src/generated/resources/data/create/tags/items/upright_on_belt.json b/src/generated/resources/data/create/tags/items/upright_on_belt.json index 7c95b9dc3..1f236d151 100644 --- a/src/generated/resources/data/create/tags/items/upright_on_belt.json +++ b/src/generated/resources/data/create/tags/items/upright_on_belt.json @@ -3,7 +3,7 @@ "values": [ "create:blaze_cake_base", "create:blaze_cake", - "create:creative_cake", + "create:creative_blaze_cake", "create:builders_tea", "minecraft:glass_bottle", "minecraft:potion", diff --git a/src/main/java/com/simibubi/create/AllItems.java b/src/main/java/com/simibubi/create/AllItems.java index a470ea2c6..5103e0aa6 100644 --- a/src/main/java/com/simibubi/create/AllItems.java +++ b/src/main/java/com/simibubi/create/AllItems.java @@ -108,7 +108,7 @@ public class AllItems { .onRegister(i -> i.setBurnTime(6400)) .register(); - public static final ItemEntry CREATIVE_CAKE = REGISTRATE.item("creative_cake", CombustibleItem::new) + public static final ItemEntry CREATIVE_BLAZE_CAKE = REGISTRATE.item("creative_blaze_cake", CombustibleItem::new) .properties(p -> p.rarity(Rarity.EPIC)) .tag(AllItemTags.UPRIGHT_ON_BELT.tag) .onRegister(i -> i.setBurnTime(Integer.MAX_VALUE)) diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/mixer/MechanicalMixerTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/mixer/MechanicalMixerTileEntity.java index 51c803a0a..67808f292 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/mixer/MechanicalMixerTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/mixer/MechanicalMixerTileEntity.java @@ -116,6 +116,7 @@ public class MechanicalMixerTileEntity extends BasinOperatingTileEntity { if (runningTicks >= 40) { running = false; runningTicks = 0; + basinChecker.scheduleUpdate(); return; } diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/press/MechanicalPressTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/press/MechanicalPressTileEntity.java index 2d428cc6c..27ac4f416 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/press/MechanicalPressTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/press/MechanicalPressTileEntity.java @@ -201,6 +201,8 @@ public class MechanicalPressTileEntity extends BasinOperatingTileEntity { && getBasin().filter(BasinTileEntity::canContinueProcessing) .isPresent()) startProcessingBasin(); + else + basinChecker.scheduleUpdate(); pressedItems.clear(); sendData(); diff --git a/src/main/java/com/simibubi/create/content/contraptions/processing/burner/BlazeBurnerTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/processing/burner/BlazeBurnerTileEntity.java index 03b1dbced..ceedacaf4 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/processing/burner/BlazeBurnerTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/processing/burner/BlazeBurnerTileEntity.java @@ -238,7 +238,7 @@ public class BlazeBurnerTileEntity extends SmartTileEntity { } public boolean isCreativeFuel(ItemStack stack) { - return AllItems.CREATIVE_CAKE.isIn(stack); + return AllItems.CREATIVE_BLAZE_CAKE.isIn(stack); } protected void playSound() { diff --git a/src/main/resources/assets/create/lang/default/tooltips.json b/src/main/resources/assets/create/lang/default/tooltips.json index 058848936..3c57d3fc5 100644 --- a/src/main/resources/assets/create/lang/default/tooltips.json +++ b/src/main/resources/assets/create/lang/default/tooltips.json @@ -154,10 +154,10 @@ "block.create.creative_crate.tooltip.condition1": "When Item in Filter Slot", "block.create.creative_crate.tooltip.behaviour1": "Anything _extracting_ from this container will provide an _endless supply_ of the item specified. Items _inserted_ into this crate will be _voided._", - "item.create.creative_cake.tooltip": "CREATIVE CAKE", - "item.create.creative_cake.tooltip.summary": "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_cake.tooltip.condition1": "R-Click on Blaze Burner", - "item.create.creative_cake.tooltip.behaviour1": "_Locks_ the Blaze Burner's heat level. If used again, _cycles_ the Blaze Burner's heat level.", + "item.create.creative_blaze_cake.tooltip": "CREATIVE CAKE", + "item.create.creative_blaze_cake.tooltip.summary": "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": "R-Click on Blaze Burner", + "item.create.creative_blaze_cake.tooltip.behaviour1": "_Locks_ the Blaze Burner's heat level. If used again, _cycles_ the Blaze Burner's heat level.", "block.create.controller_rail.tooltip": "CONTROLLER RAIL", "block.create.controller_rail.tooltip.summary": "A _uni-directional powered rail_ capable of _fine control_ over a minecarts' _movement speed_.", @@ -228,25 +228,6 @@ "block.create.haunted_bell.tooltip": "HAUNTED BELL", "block.create.haunted_bell.tooltip.summary": "A _Cursed Bell_ haunted by lost souls of the Nether.", "block.create.haunted_bell.tooltip.condition1": "When Held or Rang", - "block.create.haunted_bell.tooltip.behaviour1": "Highlights nearby _Lightless Spots_ on which _Hostile Mobs_ can spawn.", - - "create.gui.chromatic_projector.title": "Chromatic Projector", - "create.gui.chromatic_projector.filter.invert": "Invert", - "create.gui.chromatic_projector.filter.sepia": "Sepia", - "create.gui.chromatic_projector.filter.grayscale": "Grayscale", - "create.gui.chromatic_projector.filter.saturate": "Saturate", - "create.gui.chromatic_projector.filter.hue_shift": "Hue shift", - "create.gui.chromatic_projector.filter.darken": "Darken", - "create.gui.chromatic_projector.filter.contrast": "Contrast", - "create.gui.chromatic_projector.filter.end": "End", - "create.gui.chromatic_projector.filter": "Filter", - "create.gui.chromatic_projector.surface": "Surface", - "create.gui.chromatic_projector.field": "Field", - "create.gui.chromatic_projector.strength": "Strength", - "create.gui.chromatic_projector.radius": "Radius", - "create.gui.chromatic_projector.feather": "Feather", - "create.gui.chromatic_projector.density": "Density", - "create.gui.chromatic_projector.fade": "Fade", - "create.gui.chromatic_projector.blend": "Blend" + "block.create.haunted_bell.tooltip.behaviour1": "Highlights nearby _Lightless Spots_ on which _Hostile Mobs_ can spawn." } diff --git a/src/main/resources/assets/create/textures/item/creative_cake.png b/src/main/resources/assets/create/textures/item/creative_blaze_cake.png similarity index 100% rename from src/main/resources/assets/create/textures/item/creative_cake.png rename to src/main/resources/assets/create/textures/item/creative_blaze_cake.png

    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

    lf=I_^I$+oB^KxG*hIyDr) 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 knBUB$;j;C%UqbBebZBgqHt7Zkw`!N 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 z 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

    P97c$k{B!}9DHpoz+xe9t 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�Pb|AEc&~i!=I`hC(6tM}BOrS(d!1Z;%SJc!k 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%0AiZ70`)^AoaEN`#(60pPsYipzqI4c zs>At2hNLlw$P9?l)6h)sDvjdf0a>Hc(-W`f*&&niG~NPkA(0`igjL^vHYM^MPQ^M; z#NxHRSak+Nq~#PmUkMFZy83{^J3-g|{xhGS^Vc7?Ab_g;-tz^6f83q%U*Z>KLPH)7 zC!81BhLMoqFZ0*{>Q=-J{)6_s-}-23B^Ao(DV08WFSWKZ!TF0ejYU$bAq3XQHWk9z zO#8tVmk5NF_KDZCQP!a{7zXK}@CYnW;C(m_aj8>!zxRcT4HggAEM8Cpxk!ru#rOiP!j04uawpwTzwk zV>oe^zCl;zG+|qo!Vuh|H$-MIz)o?cm9rNd2S>6x3sdb=P>i;k);=XbTyx(H$4SfF z?o8}W082o$zbp*affX6aN=+y1psgacrB-1(z4g@PDj-G|aSabZ$R{M;QvW8NhLfn7 zbp~Ih-4H7rQge6%>BM@`9EvvE=*>w4`2&Uf{b}ni#VUaqG0tF}-n1-5A}AwE%Ik?W zyU0Qj$Hr)bTR}uMOs1S^@@gSKTpftbq_~E3m;<#)hh_leEXN&(fpIDkhR9hdimdLF zffyi2!yYv+dc^T8HSql4A5}c%Cw$JkFe?kWuARWDL?nc36L_&)-efS>Twc!RKhYm= zlIXNE5`XeyJQ1EB)Nq9`l+Nq(1%gFJiTEj(!~p@vLpz2FF)$5@xXqiB9RKz(tPc&2 zss4n>aC9I>(TFX0`tC?{1cC<;xc2NyC-=Yt6n64*)eMQ@@l-tM-spw0szV7FR7!kP zEpQiS6KbE3toW%0cuJiM8gDI*T3Zfm_Z%9>@K; z1*|s&!jJM;wiY7`^GtoG9QWzo{R`@&s{iHMa0A2>F;UUctim0f&w4RN_rKXl8u@G- zX`dIFXPp7xAk_O6ZCk~{VL-;B-sr}a4QVr<1keRFI>qc=l{J%RrsJt zcSlgqX&(z$+OUpqUU;_@a2^BboJGv^w+_dtxzrl=VzDYHO>I{pG5|Z+vT+Y>j+tzE zHA1dBEvOUdh%WG^L1Tg9(=ucRyl}&Y%8hS1okR;kD`x0WANhua5vPY0X#&ikg!bn= zAB;(-cmgpGD8a}}jbk{`UqJ&90rsq8S(_}0_1i#onu3Mi5Hv}wCDAC+)%!fBHIN>MUrUT=W%9usT#D(Q) zZr|&?dL&a&T^xebG0F&AfMteGQlAh4lI!E;Zs!ui-~cbfbEmoDNde+8KtQw9)5*x$ z5kTS02msB{Bb%YcP5~1G_QFPf(v_kTDS^7L;UGXmV4NR=3}X-caGC`q@xaKEV_q?U zSiXr3Z+5hUFtjsmSI?(*@&0l(U9}BTe(*-Eq(p^}ogz5n-RRh0vU$Sl$vIv#EFfZ{ zFa=Ewvmcb7gh;bUuc6 z<|@%6BUmnJy5oWYRU;B*f$OvMpAAb0K>ps$97hjH9X~H1jDb4iIe^0KvgTGJe5R0IK`6mNG}xOB(C- zB%ENFVR}Pe4Cy<^yuM1*w@Q4o%578l7$ z;hWK0g~BP2t@bCE;gUfS$0a*#QW8Wfcq#0LPmFWDKdBG^D9hYg2kZRhR5!!HIgpfKc?4;sx{Q1^9Zl+bb97fokg&@z zw%%O9LpS`@TiOpj(pS>}sN%{u8VrmSU%rzR$$CAgO>~{%Z+@gb-x4=eGDb}HW^eQr z_Ptm&UdAoE-O+s}kimENfA>Fmy1bb;IBRqW0pKXX1ATbAMrln1B6PPS#Tq%Tum=60 zB`K;hLd`8^F~sM~@$=aT(ok5CA`iKv#_h}X;dEqFqX;M=g52Fs(V&mAyS(%byiuu4 zA@bGWA&)0mrWPiv6BXc_M5DMl?>c49(km;429#9S_*NT7s~BAfIKc%8Ro~~HSsB@U zcWa1qacAJ=dl0Osrfc{q4M1Zpu6z$3vKP9mPVi?T>@@Qtfc8>9Zk z^W_v(L4VbRzTai_K7V)n6SgG>Rku(VWAWfxmy_SZl zYQY$_O3vFrEzo5|tBWTt`tg;j8K07s9$m2+CU%{Q=XgP-pz(PtEJyj2A`Uq18VMwl zdWzvVqRpk5PH&*wkH?*z;CccWtca7ho>APQDGc9i7C++woCFoy*e6?I@(k$t!Q;qJ z(tLgi;olIPi<)Y|Hz6^B=1IvWY7>UH#EBzc>J`VIG6c0ct5I?zU(HsnWy-%vy7o_Hy z0kW&j-5=N|>C?t?sw#f`bk0a<7p^p!}VbqMiB{xSctn{A>RO0Pf{q= z?(hZMs|h@UJ(u$Sgg6{JjlA6n#lz5142Egj$J-&F6+-wSiXHwhdH9}0w2Q# z;6YEFpSMkx<@M;^;93&*Rf;xfADto+KW8WUYI8hUT#=)Rk#utso5bS|Mgqj_5vEm?;}PLiNCTJg#9;(2+BePM+b7YT`>bUA%bP3pk`29wE(@ zbR{K<(&2Zyz+@`0;hqCdc*q-B&Pdd}Tpk2%bi5)Y<6!v>Kf_&-wWfqv&DuQ$;y0w; zkVTi7yY$qwKIS=BUZ@iQdJ_N)_c(&=L*<~1AeZndb3k*C;HVLlygOZ^>PT?#j2=ij}!6 z$~Wh~`9^w9N1($k*m9j`Mqo?)gLlq>dY!QR{f_Zqk#tYIPs=GiYn0CH^4qJkuyLU2p&$*M__)FPNjjez>7eA zls5Lm89|$+rM<&tNk)b*o-AD9N2YMMj??vVj3;V+s@j!L&#ax~*GaimAYK zIGr!Q!4WD8We9iNN2sH8IFrtU0pqBBxtX3}PZxLi5zpWZE;A?g#LDgph^Pr8inFfI zxondpF_v!rxe_h>@yfhR^SUwJoyw3Ym5bkTf@#l-<`^4XQfJ^`(YqeYWfjsw8+Ywd z8fiqHuFN!-msf5-C!df9jwV-J0r5cT!pL|JGK-==9q~?1Zd?GiX=T6c!+awtHiiO`HWUy4UwAH7Swv(%6`*BNb)lB+M&ctfs)f z+j^@Qqv#7H5MP!+=(QHS(U3ivF|>^ZI5{_kozWzD6g2qYKxe%lRmmIc;^V=Y1LKCo z$ZH^IJ17GmJm^M}c(WMu?G9nfC{W_0l~W|**6RvbMdhXM8!{5)OZA|9Y$e(_pfDf} zq0~t&CCi7r$2605(gSR1MV=?U;Wh$wt)HwkXxV@m0E!B?%#h7qU|?7}?;Q%%zOKRA|FZ_0WlNxd0oT9gqzi1>!GB%O{ZVAVJO}!Wt@`7Yn?< zj>jgUhi@Rqfck*Sk_b!FhKquNTb9xW>}l*}(fI%5@p6+>+EPGqg5eQvz@Uo7HtGSE<%3;h;Rg0Omm> z%CMKME}&8ait0&ArYeXe3H@5IdJS?JWDTFEBo0Nl^ZBa|cRn$^>TTQ)WV6YrFfyZy z8we{dvEl>t5CbT!kM0TyEl(B{Gg6HeL6$z;hL+p#hOrR?+;}9}*&e>-6;U*0O{O-i zl$H~f69qU9PVyV#$XdXde`-xY;E7;#CXqGao0&J;(^}8_*evEyx|W|$LJJt{&V^?p zC4JF?9B}S}Uj&R4d0s-(O=MM-P@J_x>#+e@0EhGk^3~sZJT(Z2$(;NWbU6hp<&j@) zkE)vz(nMzj&y$6Lgse#qO9up?wLlpEL65g&do&oRqanz+)x4@Bs+u5Y$TK52=R*x? zd{q{P3&bzFxF18tqOEV-?b5+xy80--f{0h2Q!DU?JimT8PUVevcVj9d5f4)1VbW4b z@b3N|s)|m=RvHn5Iqe~%hJ{~30BzW)0wo@x49Ez;(@{0``4R$)zJ+wr_Xv3*03Jw} zuxCS+C$YZSxL$xU@<=YDYg1mZSU()245VCqLc?gU0N}8LfF0P!mBm!|Ckt8f71HRs z@m46u4n6!gZvbt{;hyVYqRw@o-D1HKBMANMFb1~yz7L4;0#AGL^vZi?JAL~gCC)i7V^OfZLK6c;YeupTiS94^mV4D zvyjZ0_(Zd54mgzf*dFo$VYB_QUvIHG4Z=+;a5upVO+yJ`g>tCfz7$7H8HD!WT&`!$ zq^WLqXL3U{WNVe+QeXaoikHfzMLxh4R6;C#P&MA)RVPk6YEg395HlohY82RM_Ng*+ z+5jX4K`MlM<9ql3ba^KuVo{u-iK?h8Q|ju3-U#|NM;R1NAR`dENsTHdWC#_fqCgqM z&N~X-$c=z>(9L<%hLuUt&s(omLIP!a5JXlsfKulhOT2At&-}5XV8V%yKNhyec4S&W$n#k;13mZx0u$smrCyb>s9y!tS3ctN2N;^_D`@ zhtL9Od$CoIrPvuQ0)PQqcMAflXe>JI>dH6?T5o{eiaxH*6V8&YlkIKysvM4+mQ9f2zXqYX%QZ+Kc+i*( z??AytMN350*yWRHqUn+R!c3@*yb%^3iY+C&d%_Qm8G#u8Jp^c@m@I{<9H9E(gysz* znM)EV?2z~UV9T(o9o6l3*J9`i2+)8$;&kK0ou#P61t??C{cv$A^L+9>R@(U_1o!yv z9}ZBi^w1qL7jVF3{Z?@Mjg^FU7Dz9osZplT~DFjpD-EQ08U&fz`U-Aj9jTwTK3|L z2~;3>Kui!qT+s%+p&Iz{6{6Y@&ql6F%9R4r`F=k*9yvg7s_f#kWo6Y|mhQD`8i7~` zroma|m3S^uP=u86^~tGqAlMjRQ4lFPV-w*3 z)d&m1kZEnh+x1W zS~<5O(~KX-Q@1%@a1l@m#!jqDv)te1IzEuFZ!~s&w6S_s_@F&x2WuFD4+v2ktt+e% z)ZLNx0m(2Z zew}I?&L9RPhFYU=I|6lFGlSzhsGlaSV0V`b;`gv_#Y#fgtpDw1t&dipwj*42OizWN zFWK46qJcMxr1$P|5M>OU3%&!s;L|x9_ni%ebo!W`9iLNfceSy053@qfuG>PPmzRWc#t;_kPdvfs_G*f=wkHE>8uUI zHe{N0(9_X~h`8BbP(WAg03?i3al?P0q31ecmvr#d11)Lfz(7tS)1@b$A5aU8*6qU!UjGmC-ayWp8E$z-(Mu{xh9r}i^S{FD9}>(SL~8qf*CYOC~y;JCRo2eRqmkT$_s zL+RtTS1LK}fCX+z?~HKMMoVJ|BQD9Dmj_W$J&(>Dg!Ojl7_JQQiIw;y$vsDK!NIIYEpVC0^0#Zj>VDN_vk^f>+Kgx(&A{I)Gn@JnjDU2eSRm=&Nn8K(w_k0?0T1YZ~mu#A$iERfSPGQlcce~j}b zmm;#f+YGyKUbeWyW%0;^dC_4m^64!PKqi_=8w?8K`^0~1vqSdw9rV06xyqF z&XFd%4^Og$%qUMd4@FJ}5*Wyj9m7IKdPosXBPmR95z$2zJ##S933$Og0&+;N@aPfX zEoiC8P=})rbt;_785fMV*qkodIVuRXF@_%hrJqxU^=w13ph_^FwvQ6?PPRDu!OaXU zKn!I498odSH2eI>M1zlcLH#>7bBH-#F85eo5}Xe^cZ5cXjZ8)HbUuc0FvXn`y8e5v zv7_&xmykmn>6K?dgxQ!T$5KHum|h4A^nmf%Qw*bI@Q(Uzr2!COAvDg3r-!7=A^fDf zgQ$oOQ&t~$r?m?-Z6$!%S-2}FR1R&-kx;dtK3i}CtG+vkx3jmpX&=Q5bZ7-nI0v6U zzg{rl?s!6df%b8W?*fPo_@mT&wVFZ=>CXGL8yZ`MNf|PR6S)d3_WX{(hO7E;buiAT zuf8LAqHy_y1H&hpEeq-D!fpHq2F@3dRSo4dUd*Ao9`a!p!5D*ql9!8m5+%AHmK4AO z=Z)>6ih)1O?hu78A4bA}Cu7cv(8Dp(mJTgyCe8x6nX0W2@|D{y0w+jt!j^paEsX4E zqw;#}*}r^!+FcyotWOVH@o2e()PN$;4IPB0PkRW6t?P!vPt&CsO{K?q!FND*M+2H(^K zzhf~etn<}Fs)KFlp61?b!C`G4A7?8UH4?0CG&o+U5q#N^p{MNEw6!0d7w{rtk*cnI zex!t$PLuk8ykPhbSV(oi;qtH93ORuzItrwPeFIkq@kXRk8yp~!MlVQc$w=~DkTk=C zm8esGN?@Sd6WD_bfI*wH^*U(c7I9N>nB((tvzlo!LbS&~z2Jdsus?P8G)_{;LGl$o zm($TypKeq7B$~sUESyPiJl)4l76QncYCfi3ae5%Klm}80XNKYINo&rRMO!}Xqm>{L zZS{`JvRo35W|U!%2j#Uc7Q0D$4i|HKbeQ5*EW;i7iQyrQtzFF%k+CF&=Oun0IS3CD z=%7+6B8Vck0TxmRHYC>Y3088FM!0gv&}X^9o{5qN5w{KGg4H#hOERS)k%9eCL4piJ zy;LS-8j3w{Aq3(Wg0uQlgrqINT8^vY3Wi>JV;p;VF+J$ z`tKk_8}u6d^teeQ`6-y?rdD*xkZfhU;U=_Ab}8J?}0A9 zi>@H8IlwN4n&F536k%p7j*2G0S~;b#WyN4=z_D(la}sBM`&2AMVhPAtqRfBB#NwSE z;t&8hN(dRmmb3Zq34q`nb|nmI6Og!)(lDd z!_dGd1`*9lAG_grUO+bQqQ{`s9D;wjf}wr~J?JCjQle3RWd~rOxyFfqx!|N8(_J9) zB5GR=cYyKoIss>O$KWAQe~TP{z@w1mXbuP_I_0l$EO~?Mh8@ERb>7(_V9;vz`1oIM zGLl%Z#wz*kC~Dx@g49ey1q9tNhW7ygFFwWGQH+8^ilXc_2Q-0$Sfc8JMqsB>5M#70 z0AmDMGs*!(=0#z=hC0Am|7k2@4p+d#x?dUNi0uN#n3zT^E`S6}fWbOU39Tb3=BwLc zbIPHp?}zRFQ##0CC%dLD=4D{GBT3{)m5wWFyG7OdI&6x!HLSQ{6Yo#}eijTUQj&K_CPxDp>L%WEBDa<;b!5b%Fxg$)8 zr^WDuOE3UY9U1`hW&p^j`iZT(j`R~Z{E-kav6AqtVHX>*E$nc;Wq7Y!vYO28A!2VC zD}N&m@S7N%2kAKBMb{MWGGm|30t7bv*-MH0sR&$>O!OUo$mg_*6GW2+p};a3&X{fV zTVV~r%~qjLQisN-=REr`?jRW9#|A;wnQ1V$V1#AB zRSE!~wxbruRJvyiP(elpW@aoqmsD*@8_0AqKJRLbGX@MIX@HVFiE!}n#bScxI0ZSN zf!{%9P~at_3rfG5j%ai0EZ5 zE7*)tXvhoIQ3OueDb0)}dh{F+rptgET_KZEoc4_@d`VIG=1C6#7Yb!=-wl^NKv(DO z5g6_!O1hu8Cgehj7vV6NB6B`LIK$QprXPApzQJ={Kj_+-Hc=;W9$p;q=@fFvd>$^q zREi1C0AD*aB7m*`A193Ek(kp63)kQ@mh|bnw#qsfSE>v;8Gla~>$UWaaA|=+Kxr6O zJOUPd#*UhF}YT4BIS6QAoaLq6 z2@U)NFKT6R7foSd?tH3${v0sTFVMLya%a>aHby{2Wf(3w_#qcShDC}cECDI7QeA^t z`tc!jdx8+$Uy#ITsN_pA_Y;7 zBhi=#q`^cyJp_T`K>+ap=K&j)$=IUbxV*sp24+r1rPYavuS|pKa7HvJ%smm)jD3vgM2THC@XhF`(F$&%9_pp&uF0t{Mz$g$rfJb1g@`;#4nQVvO z$c*6TnJ|WziU>$qDpkna(o8c;PDcCh@MA!vGPn%?YedB-=Uex# z(kC+l!>Pr*zyx55GzIG*>w?9ixkBeWk9dvc6*;9&EWD%y!1Ffd9g$^{CN9t9N6IOM`l`XNhfffr8isQ zybhg<#5uP#r=UyqjxrUnE{Gm1+S#5U(!+UaPolv$kfhC{Nic90Z{(VoBy#{J3~EmQ ztwF^v3W<}j2F;5P0zb65At1s48bL`+)hiv!LJk0wqtlVA&gnDp3rA2PUUE8D?839y z&zuBYr2-hdQ76!8T40_J&dCbcIRv}J$qaZhJa#2NRc|^+gm^&BgUjZ0Qglr}@NZsL#ooOIdVgkhs0<47g z)YwiAc-}o+QpG;P{&7Pq2v09kQHL1dJ4g}>pd6-;zNILHp}K(dr(9c`eJcZXjz zQo>?2a7Aqw2|9TFCY|ISU(5kqpx|YHNhTo^XZ~v${8n8h)8=CJ_)lkLTj`gO}BGtX};Buzj6Z zE?oC$w(S@qsq%r5w+M&}Bi-&UYa+lL}thazzPdjJtM% zz-wb5fxY8)h$3PJ{>ptFyxBn*n^V;YC?48kr(vz!g0i?$4W4O zeGm-JF0a=xOpqBFm2ro`$}6Z|oi=f!t$N-V9OU~@d2!f@E%^^!5H65r40=i$Dj=S7 z90fyV$xj`ScTNFBpJZ|kTU70Cc;Y^Gp(KJghH*Lz2W`L|M%u;2f&jEf!!4eQS5I_- z;Q$;okN2!p5e@&@FTJC$)Brjl#e#!{zi6lvf6*BTq$L5v^}pDOxAK@H9Z`10>waej zdLszN`;NJW#aG7bWC(-!%sac8XD2A9Dd- zV=5O=%Pk`S(U_G6ZE_T)yd-ASuBue)?3Lb>hGayJ-BYge zLgT1Uu|J}<>VkX@We5mh^mUrWk>x)x578om-9>Z2lJXilQoT861Gk%GeBPyHQ;ZXh z#fR2=Z~cNr906@H8apQin*7u4ac)ao(blAn-jIYgfo+{kPDVuiqHtZQ%6W%2c+n@z zu4GzX2BQU((#gQ@35LWn@!p8iiC`w4R#fqf)ko|+Z6%n;mO_yO% zVH*-KFI3>8g%kusHt0ZZXd(uLSHo18B*obAs_@9+Y^kPU3>dn)Ld#TM(jo+PO)d&q zyaG?Zg13xXaO!%|h`_)GJr6(9LkI(*_9ooKM-R-2Yvz=waxm2Aao@D|xKztM6(Wa3 zPIy`jKL~`RIXHxx59eesMuQ5#F8yUWu9})~kxr^Ah$|l@1I|^yIbKe#H$htkKX6ZM zU`0&CYiTL3kq~MbGT@a;da~k1650n6MQ2((Qrsd!&yq~>M$JF~YgO@|O&ai%bXnBz zQCztSZX5=M&IhjAts|Kvu7C_0AnNF4;RMI=a^B}zrsxEj5y`=fG&a%(RU!vpIW;5* znIaIwakK;Ub;v^HyBB~U2@1tGxn~&b0wPdEzaA4vz`Ooa=BQytLda3eX~0{)1pATOmrAI z<1^jPbGXVdsJP5ye332BIKd<%pI`gjQ~KTRk*U`6?ZZ|OW%0wO3!0NVZ;cETTm84& zqcq3wN0B2MU7@}L!qo>(V9B);sql#8!a)^+UXN2c2-#BZH67<=Kq;>%oEE47B;&!s z;hd0%n??ZuQr#@m@7C-Pr=}_-Q=5=l98M=37zmSs=v^qHTSTq}POLRWVo(kK$Ain6 z$7i|>r(}}TlHklMC6x1bgHyLmwy8_y&|Va1?~cxPT5u*b;<6Sz!jd4QvB3gqbg#eKTN|L8Q1fa`$U_2tnCOGd!^uU7( zwb<@xK^%$W`k%rj{z{`ppX)YgfbSV1H4HI;7Z@3y6U%IBs*kMbS6}@Pq7;v~B`jon z9PU7}sG%p2+s1SfZ|1~AY6xU+6vsR(+3(VO9QX~6|*2^Y=PpXHYcyp8;U0K zR7@cHMQYXbw`a!RuDyuh+@@%fmA2%Hni+}%JfeVrbRecT9@pqXHOA>BlQc!x8cys5 zLIV5|&VYv@nwR&8ViSXFwpCCjR!9yO>Yx!oc%&A~yJ7j37XuRoZ6GYP9Z_@8v3kug z)~1-`rPeJnd{<|%quhuC96&4b;nJd=Wi#IaOD}>GjB?(LxF-uBIqkwTM5yTzI~gnz z46{v;5kQoNLty1mzoRZC`K1KPOito>AJ2lCpudw8?+^pBd4XRd8N;>|aU$ShfeL9r zSM+jX=wz#*~^$+7y-u~jFL8TT(If`{)%?MRZ5-}pdCa#fQRV95k-$QNx(Lz z%i+|Q3-ft17gUndbfC3+)P2RPCDC05pI@p2xpP1&*9D9Oz`OE;5rux073y$3#Pj9zmyPYd*BSzwdx>G2jhvS8B z^HKF`If0CK+rv)zlaq#TP>*Ph8L8%EzqErSX8L%(@1M-ai*Z9FdA}d33uki&UGeG* z?Tp`{5SQZ6p-!(a<+#y=Kj*uIn#~ntX)fj~HR?7~4fDHk8=Z5fQd3v7Vz0ZG@&kz^ zClpYIu!{1EFaT1M^6l{pq&P*WUYg!2EN5>9@gfdMqjm1u@xBmg07_hK$dDDhAs#&o z$k+X(cF(p0)t^&j-VLvgsy224EFPHXN4HE&dm_puENBe9BrcCi=2d}=q@Yz0k}omv zizOomb!s%_D=&{YLpWgW0{~P{_vAR(rs%T`j6^&-W3T=hLjY;vrUHBSU(_|%!GZ@R z8ayC@iHRses{z}3RhC0kR6{`=B~~|p<-j%}=^5d)N99P1upmwq3Ps+X0}grxSi(8e zT6?I(;f^=x#T7;d8YM}npc%qPpoXZ-gwXgCsCIM=+gJPX>G>P`4xNA&n{rW#%jbwNW%pW;-}-&5=2(nkU9+ z8X<)NI7nKEm5_;{7j{ugR9djdrR(fC%m+tdxC>>HFqNh(iC5YM|7a(cj_FpFbXULC z&fp^xMcodDXGiBCKRv2gXeQrK127Q{PB^Uq_SQ@ouJcs(5?(ZuKgN@LsXIBP#?lc? z0E2mY4Zt*CSBFH!2XN6D{&OfZCm<{1MM0tr=AdLCmu7EWkzhR0P{NBuG>uUoLz%45 zo7yIAfuOcYnsf&7!E*He!=l#+OtuWN6)Hb9ce@Op2E?T-L&$FI7HK)f$jK~Ah)mU4 zzSVL1z4@|6XTb0gvH9d%b76itwlk4{5?vjf`+Y+Jhz-+T^p&9C z4FJB%Y4LU|U|na3(DC;Dk8fsI(=lK-ZgZ{0?oOAjPs?#%yhWY_g!X5L`tIS>t&c9T z9XK2WEF~BL-g+g*1jaT(aDCeh(gH=haRFos3k&24ZV@d+%&cW5LgSb zAk9ef$JSB?n1FLcM|T3pQ?Ojw2u#c8kG|<7bc(7NyefoL7$fzc_dJ6sC*g@ME-Dxu zCR66C!pE7KsOSXYrhjyz{eVGKj4xm$PC!L}_(C)DSdYpF8W7;=2ZC0*A|?KM>e5@p z2aoFo9vmyeO-$tw?vZnlh(H;OK2)Js&#Uk zV@FpXfJrob=x$FP19?wW#RYPna5j}@>1G$-s9zIIadVC7hEzn`+!IE>qhqEaaS&4) zknjc?G3N*TPFtWye)>~WAYjwi){kF&Ilnx7k)@tBdkZQKq2Qh4^0!tX9Z+jJ7(k?9 zI%j=HaMu+kF>>8Y;sj15@WLTp>IN!DuSnP|mjx(eaM~?$9F(xQMa6WlcBvb=2)Bxh2f&{GvDnkM5 zphzkOG+*iHm^3|Q=7?|mZ1c_uNe=r2qK1o2LI~r?I?0ujJ~9lhfthoFp*;u<0HVXm z3q!fc1I>4*&lPTR7f2C2jj^oU16ngbAsB%QFIf*P%XNXCl+l!d0jPcq0E)kL z^8uV0nx->HDb<*+cg98S10ZHkkp(~GHNU}{d|rB_j`8879r*>f5;DB_v1r?q&oeBy zt|{{2WqHg?IjO7b=@?LmU_(+N>%3h+R6{CEU|@_$3Ns}ItI@YP)d{eDKBBAzKfPU4 zLDUpNE;UC;pewR=%@^l`5r#Vj)5+)4QVuqG|UX? zCa-K+5iO+M-nuG)=Fd0baL`i@L>vD}rZpLd^hR2jhz;eEaE0oiL{7)D#2hHI{2WXI z9S#JWM*I$wtC9ic2@ub!ztF{d24OS-(bq^OM;>v-|5`ku7Agi!oHOx*cT7$jXFNva zU3_GQA#=!o6jR9LtW}Oei`xPtJc!C5pdph^yATWNU_uuM&a{cnPvP<|Z#V=fhjVEX z-BBhWOIAJvCx4P+XtT1cNn}^?gE7Ra%JhSK2k%6Rhp~y2SyU+zfF*tBpDGaSLOnFo zUIwDu`5t^hG)_LN#=}8z3G-BSf`^RpO%ZEya@!sZ>ivOenzm`j;o=;iIIp7uQmmK8 z4h&|3wxh#3lK(P4C61t+N?LL~P{Ht%kjv>M7(@ zyqbda{o(TM#s}ij<@-+;w(Yvx?FrMOaY%IPCbtmFr{rH8ciUJ_!QKgEWI8yC$*cO{ za!>scjiW(~!++r!8Wf=X@wnWJ@FHs&0z`g7woId&!Uh-Py4Q8n*88lao8et~FV)h9 zcaF>=#9(e&;sKc;vb8H)a!zn`xfnHQm_~9f|5X;PEmH?}KtO6x^phj-a@J;LTwf;k zNyO=#9imYNSOmP%r?7^vkr8eCVjO}E-W+rk8q(M{AUeEJ^Xn<3Nalrnd`g6tvPzAn zi|$4rA?S=k$q2jjZc;5NM@wVj!!7B^6=s~31>L}+3X}#9ppr8Pz>R6p9PjEtMl!vg zW6DW7>BED=Bl~DR_+mN0k%%ERAtcF4QyRXm@CpC`|MW>jK~yh(K!vz5lEb-o8-jNS z2|qI*g<;k{#SVrKR7W_XkwN(HA?JeVj%kMZ62lL^^UD$~6hMk3V$K}l+Ys7KHAgPf zQGZoPMI&s7p^+s=4j=`?NM%fNOd1H)(c!3^1_$MYdK(lYk8s6q!=zfcZh7CeEvc7L z-zitHhz_6=5D+2CdKuIA)9iqf$0=tDD5N;L93b@434#(I6f>EzUO6oCtTii)(3>ks ziqE0Ig$OHvm_H!xDqjaKDNb zw73WYDE3M>L7MQD<(1E~fH=dSOpG0XxTR?f%Lh?M^QKK!tvUDYvlU_9o-TAic%?x^ z>k9euJ_GQEi^@^lkmAWvFyn+`BAv`JnZP^P9!|NEM;j!;cyf*da#q`kV3nJwxtLFl z@Jj`S(2mEpVV;?ww#Z!HAm(x5N09Qb>f3Bc;7Te#uXc8zU)Pd)S zSQolI%-qry(CR~1K3yQXSRmxtF6%ioGA)E01W@Y(5he2h{He84iMv6DNZ_;O1XkfG zoIMx3Eae43E&~NpQ7-c&A-;P{f0S=eVVHqelacsW{d(_4mG)Ew!fCv%K>~8I+(Y;Q z{q~?~N>Z=!-Si2nL&fSvpsbRjLo_QoIxs%X><24|Op!?pO7bJ+WT9$FI0$bQQtml& zBEsEFGvSu0d^iF|2i|xI*oy&lQ$YOBU>rpYsM7~&W)RV3WbaxRXNMMpzS!b-8BW!X zQ=ql{7Y>dApiy;Wu*zxnDRl4|Q{I!TobfIi5669yd|FFh+EGJ?Eb@bF+vNS&j2?7Q z9T{0oolp?MV1yX?#>X?zs<&_kPGlf146lCUt+W_UFzUp+^koN5+n~}r*J?r?Tfm6} z62$d8NX`j+?LyjVLH~=+EBJ;hRZUCpp;cx4;|%||hogd}5$X-{913?rd3M~(7IGjf z4|P-y*SL0EMgW@fHD(@mi9^QI!ssO^@kwtGkKjC*BjDM)QioqsogSHGdc3lu961EJ zN;Vk7X(Z+vTUY{5GQUkHadC}rG?4DLbuAVchl$CY`7fsmIMZ4(XW^D20X#% zLecz2Vr zL|i7xeTGD`g**I+L5n1Im3%Ot#Wr~(vx z5r@zy+xXLL6D5~Gsa4(X5X;M& zIUxWH-iUXiJ!2S+2iCxE>vv9J67UlYG(chNiAeNm0PV*|qwp{IDs;XheZqL)8+)LZ zAwOTup3EDL>kVm&$h0NfbA-?hkC5z;H6PtmOv}wJEdws1I_w z`VzJRjU(Ylnvx2rW%40`m`^2fay_TgG&!|--~=281maB(aV9!$8hhquLfWAaDrKj6 zY~WZ7_2{)-Vf#iS^qU4SIG4taq8xoh+LojvwoZG-;3S!&@^@2JZ@1=T_V36^KnXXi z*HsoqPj&2#8p0L@?Z*+#w4lW1?)@iSew9QTMQJc7G>f4)DB)?7Nq>$xwC_UnlC_Pp zC?HHprX1r59@6r-CIUJee#?w%NjMiI2l?ZhI{@-t7nfZoWF%UN=n0StjWhtoC+2cV zG{xIRqI|^IjXqhg!6%Ful!#sf+PvvNLaO_3@hz9-IL7xDfIt$XXorBox>R^=K>byQPdKRD1SPi5uu_y&>SS{#Wk{XoFRi|AdsY7Nw+97qhI1F#H znNcu6H#Ojdbh|4px-g#-Y9!c=Kq5t-0whZDAKn!|~u(sSkh; z6y?Racr7Pp>3SRkC#xwf08~J$zwd|us3C`<1dRE9 zbHG_kV>~@Cpt=zdxFFcD8W{L_bc(|-maYQ^pLgp60TLU@NK`kf>_DTDt^x8HMa^+60fH&*~NfsaUYY9t`3(obfM7VMN4rz+SX)JpT{EH%4T<#H4}EX&?_75+c-w z*t=(NTOc~cL}&nl!g1jXCw62dz>@!RHQ8ARg9)*IzI$O+nuQKxKqL>94CLL&+1WO#}-#z9}o!18{uk0n|s7KvB^S1AL^>R0@I}*zuC2rL+Dk z(^d+I@4&>oh}yv6Amag<{O9tWWCqfd7`otXe}f3s2D!vHNeG3#_XK#U`w>rLG^|UN zBR6;rxC>XbjmrFBbhsks0c8VI{v;@27RSK==ZQ{*vov!If9w1OEC0x1oyiqN7&D9% zsA&vMKsPy%V}LUH{_Sv%CF=(6*d>z28Su;D!pFR2@O(hW z@f4rthA_ieBIsG-jPr&WHt!Hl#GxHtA+bbq#C&LzfgvjKJJYA0;6LFc>{z(*OF)MN zI(X?IB+;0*7jGcu(?+U}@3ydkPTsj~8UhTA=?0E8?S>0$^ z)AE+lZQ)6ZFLMQP;gA&2f+!p|X)QEmEXY=iASCPe_-;}s5i()8M2VM_H>54C&kj?# z$XypBVl*}b3o-ztDXs(kz09&9HMOG(I@FaJN;nLp^9M_F62x51M%5pEx}*(9 zUa$9==PkBW`|4qjGe4kjp*p(ijt<^6ZXVDLTT9pw4CU|OhLt;TKp9k5?daKTOuI9A zw=W~`R&u2B{%}@es)FiFdpw#4a^s~oZ;+7JykM*R6IV*TFeZ0wKq(EpHB{j;P-LT2 zl@73I6H`T$ZtIQ1MFpk}jrhvT0b!68bR4SE6$P|HK7z$`NU*gqH+%*@SgB&+@}MBJ zGcos=ZPg6zmyG87q(yu&HP>f1Cs)lc*QEpUfKJ2WC$Dk{M*C9WjW zIKI~YHsH6hh;H)IQEV^T;|Z3f1fzDjS|d`PkHt7AXg?HGC#z)+3)H_ug@*9c$2NeX z2SuAvFauwU$*?R&lzsdhL&J$+$cv*K(3`3m#ri<;iebVmafJ4XiMU3Q00T8rcTBFM zXwVZC1)dM+2U<8Fl^npJR6Nzpp$BV)`K~0(X>Ecpz@WVb2OJ+7r9^b+ys0|*<5(PX z+9-TK2$s%!MHZ5kf$TQG(tWx#g)bsZ?u?2)uJM;5kYQXr+7P9@(H}H$6(g9f;j1VP z8c%&3@@CuXjv?z2hHD2k2PlC;nosI_F&z#2M4E-u4le^5ZmsMQ1g05zdtPj!bmyit zR(i@qI}D@4BoXBwRu|-f)174+T|T{1jp!jGj(AoQ3NIuRtO3k;X7H8ryt8g7z#_D*uhy+zU0XlXzMA{b!;K@af%e*ho?^biAdq1dJ8Wai$% z@jjn<5A zf7-Sta}Drp=6ajB5V|oTO;caPWq~mo?&D%o(9$DCBda6S9}5ab*&v_+cyQ@ScsXK2 zxg{Uxx++>zLdUHA8OCNMxM`FI8T6>8fA=*tPPE*K{t8=F!=DVwoOtg0t3S33RR%bvgixa*H=fj zJ=D*GiOd-$D>l8_aI;?h!tYt_2QV6n7CB;?!izZBZ!%NSogTISo5zRn=8&a3b1OT3 zPkcFFP%ZNvAjXZclBU)dnY;g@$05cxpIrLKbWUXMkk{1Y;hOk$V^tp>gT5*kxi7MJ z5|_-!yE{D>rpig_tBJ}^X58+I4*V^nVgTes7_@k{XiLaXd!SM}{ph#V5dZzR=FK&! zzE4WU&NU9DxtnG{u@9|9=ybex#?>N+7X)TwlIJnipdpAe)3OG zP}Y{7J1>;ylHDsiXkA%}Cg|owSHCzLNRe6*=D|J*-aw>`bNejOY-lh5Yrkh~sPhl- z{Cn!+&?Ha-NXZ}k7OYo|GGF2l}sF$^zq!S=81;e|df}0gBW5_X2c=h_8bZ zTGwckB&vQlnV;tC%58qRlh5+f#Z@)P9NE3?L}(P9dC3LJve-p=%VD=$Hc~R+PPP|~ zO%b)scS~S zU*9>-`|QE+>k@^R#|l*N;E)w8)&A8&K4=Ig8@tkF)z&c9k?}DXbgjw9^)I{Tkm^U& z9#{|{ECh#ei$uV=4Eo#+kw>ZnB)jFS`}|bCMW{SQGSs|O zyQZb-9c_PFRO(0i>LEl?Ep2x6pO_>t20Fc-D?Qn5ybWD^9I$nXe8C)7S1uNCF+%hu zOp%cOfV&XU*=Y*apt6wlQcZ@fp@>y{TU2ROYv)``pN{Hh*X;47&zk&rcdO4iki$Y? z%r$dR&5Tv|H+P@I8l7jm?06*3#Z&dk0X2mDJF?!pDGv0O2eOB=$JQye{od%Qd+u>Q z5_4O{hv-5)=4M-28batyngY!Q-?c%g^ zO{@ZH7$===s|!=Ssm=n-@Yns;$Dj~c&HcR@POo z05|Xd`o}LneYp?Z^UKHI{r1dUGbCwOSAM=((bX@P#e(8uG?Lk0S%b0ZM-pLVr#2t& zYFN90ULf^y00cXagb~O)6caH0Vwe%{5oUbDfNR!bHbiZ1h-$2f=C|j|d0o0|d|A;a zzLrktao6sa+WD|D2HEw?-DxtNtYJlnV{z@#!7qlkzljA|+diE)M1D|iil$uJXYO57 zRn}ezJBaD$HcRN>JM__4&>|YVt&?U8^5=`2Y|@w;li20`lQ-Hpi6C6Eyy3if8JvK{ za)xRbw=dzrM=KuK3NfIvUW4+1fHP;E8ozl=TEye0DS62>6UO>T9gY<0lhh9zsuP)%x48cBq z42U>f{qj~%hiR)TMlT4$8IDA-S6m7)zAK;II8m%EC2hzrh{0eV+gYwJ-7hS^kCxOW z;kN8Wr_(Al8U4NSZ&Ru%A%|;rJX`BEMJ%P5t$s4AB@5V2(wUrYm}3TUfP0Z|)}JmC zYd#N+i6%i2>Pgkac8Lx3=2N*Qn(JTRzu8Z+w z14@?xns?UnjOq%DlSU!-s=h*GvA=a-DFf>~q3W;Bb9s^aSnxTaI~%c!j0%^Jv^Ur0YfoBj=`p?3rmdYuQ*sZW+)tx#9FSW#sYV z{;}-8-lVN=E4csmtC^+$qd_pv^A@ge{IG*Q zlVuVV8WD0i&%LY2i3Rlq9BF(fjU(;KyP-Eh@7piPX)u|ap7<&dH(ZQRkm z2(A%u`ick1)%re2JC+!mCLf`zmG#W@$_26$Sq=}HQ0-Z}hlAsgZM6KH3nE)K4+2QC z7=xH|oaz#Gi+h7MMIvE&=OL1<_alm315>(JmQopHW-!H@-4LR5|1FBPXnA<1i>X&~ z&6!qZo<3{zYIaA=Op2@)#)<9j6rjVE$BcW)8iR^`Wtl~8T)S%Q=@D(h*j(pM{kZi9^Bjd=!h|4)$sBX4pkdQMQANfXtA}H2Ml0f z)~hOHsKWuxzeq`yGI-H|ll?i!=A!x%Bz@I)myyt`u}d&|>9ozb*sMW#q;cxN#{xH3 z4~@^oxg%b{lh0X~05)bp#fT2a1H@{eOh+1rg9>ecWn3Q`>hr{AG2)MZVwfQ!P<}B? zwYh5cGE<~)RsCU8@vc@pPjm@X^`-d9rAYgTJR7o+Z0lS{^JgRXMfucasTMt=ZJTF)eEeaDOEa**ij4jq%Emw+4LL6azhC{~ z;r^#x#+T@Zv_LVzqO+yKUmeTms-O2m%1N+D$%;rme*NBnN~+;;mMiId=BErRouR-AUXsXoXT$0vB25skSVz!TBNb#A8 z>_62{bXSc9>p6(XQrfe#_c^fOjXmh^S6>=avE4j$0wU5uZ$665#XVXl(!r4{2w2cf zQPrLUx@kH6YVq#&bVvcV{&onY29AMntnI!B;mA zP6KNkwiq z>J+WCP1z9E2%)8Bd&#`GFU$`0^VV$I#~h);d<<*SuJI{_2Je`8Sk~FcDm7ye zO-*4q+^RNL06^xlGi8&93A}3&uc^BEI^cu34QOE=9*0;fjW+t}6V-T5 z@^+|k!k~hDx^ELNWE7lQqZ}XOT;Z0569P5TQiq_b%? z(n!(IpW8sp_ax!Df{%SBQu$a%SQUVpYu&HF}eHOgx&2G#=)GJ4^1vBtp&t z^w#0y@=+aIr16laAWUWnj<#)hNG81H5ZsNyPRY{pec=_-1$Oj(GMp$-#Ppw97X@ZX zf8L#hsJS~%+|X>A#hjrv4bL`>RqoNHq8VRSNu^z);{1w5MpYkIKf5AQB{ZDQeO>e2$?fpgL+-mJxE3yrF&vA;=QR z$FvHBjLuA#xrwXUBLyr|(#WFc(2sgI`IIA!#D>j3CJ@E{^KkVkN+^9BoLhL)qWa_X`G6LGh}9S`{Bg zCj>srVOy203(b5Tm^vYZtZzjYbMNd@VNt@~ljSRL`pXH8I*7y>KS-t=N$qI>rQH;h zC?=U~0S4%F8p*H>EAvmz=yK@4xZd3iJIw$q6^2sdT3YCAozq?)hec7kt|Fqc#(E@- zans}k#+nymt8%!eT?MKJc-<121DhJgklZEXbjz)?Wa@yF$cW;sDe&*V%C}gZPZruN59EW-}=we+xDc;ycAm< z5eO#{#W;Hzqt>>M%9>^sbBhG_fr}^yrg3vrD^d++74p8lUIv&1Fk63El{lhTUVcsB z`9GMp1dhaM7Q*cGQOjvM*96(Gv&?FInc>!F)9cXvt8;J0s*cpu3!VZ23r0JCeR+L; z)`RYEZ~o8!>L*3lSO4pO`D>nmx@a|_b(+fq-#Ny~bC|5M7dajkSxL_K^O=v%Y1=!G zZgMDRZcN_O%iAxz1gJ*5rmaQHUKgNjpGhNcmExM28RF6nE>0at1Ip2Yw-Pf**{>!8 zkaxibm_G060Ln7E~nHGNv&|{+TucIkrj8 zv6XBA3C3VH7j{a?M*ofpOnz&3-ww&ciRj>WATYVCNErDt3*Lbp#7wVI@}2j2$2^4B7M z8qn#0^AM3#(C@ZZm{|r|Etd)c&2;uenatKF7=*SGMx1Ci^W_2$%q7;$vbyQOV1vW- z4dPMUWnC;BYr0J5TgJPz7&57K6Pm4P=E@&(tIYjiGc$NlrDNs!%BHA@p-B4xP(iS8qRR35Y?ER?N82wRt+te z&9DykoW}h#I-9%qyEeKPYteJ<$JB>HAB#UBV^O=cQSI~|vG+Mi`|}TZ;QH42qDrYy z@#IKq3=*x>hMFACp^U>)%ddK11adB2gM2}g^i(V)+Rz|SvsVIlY`2{i9%(10mSqH) zf{)g@;i`inL%aXQRJQO$r@q#^rsje|Q<>Uiq9&E*1Yv>yF4Cf;bD|L+UV9&q99W>7 zsp;a1!HS;6&7u3l9ed3F(>Y2fk_qQqEOnUQUfy5oOt*eRVj^~YjSrXvDAoFFShzDr1a1p8MXYhHx9=QV~(5sWaUv^ z?4u#SqW&jGAAt}Zehp72B}qJmk;(YU`Bi$!Wm!RUJPPXt?AT47oj%(`IkLrV!N;{r zPls6_flO+fg z%n4c^85`E4KG7-sYOE(k(57S7>JR1#8Sz8_%4n!b>>ViKQdOTPC=?&sz3Y*VIB$gJ zRbp9lGtfxtO&beWTsb~a@2zlot&Xytn2S~tf=8veOF8-!l~+|RE}GJ${pGb|fRGM1 z@tNtSkd~UyV7~-NK~u4mve`QsaA;Mt*vX_7C!JgX2(JEO_JQbil-lk^elegyz%;Hv zlsL9`6g}2zhmMr9H|~r1vjYfQ@7e^!wV4ZR#TV_B)W}I85ZaPU`J_rK22!XwEb*w$ z*W4{Wqk}%%=ve%Vp@R@aAfFY`sj?}f#2 zz-dB~ct1wjt_%1s7f%!g#nF-`IxO10Zt8k;PF05MVoaz?k5A$%Z z@4F!m2>SF(Ie*V&6 zkd(hZy?kd@=c!8E9C3C1Km6(I?C|lI@2}rn;wgGv&#?IWw?94Z5+j#IDPtz9p99q; zp4DBuW5a>k>G}B#vU3qwW^ZY>^ck9)U5Yo8WnJ9{Wq+DhoP(y&z7%;`VC-epHM=cE ztgXXSLto%ZuL9KlDH(`BFc{T9WZ1cy*h{Fo?0fz_>z;V*^=zFmgo1fMne5ULZsR>J z8-@-Xv#y|3=yaD-6Wt`&N;D8vg#k~B+QJbtZQYBb(L4pJ$_+@Rz9KQq>r+WO_D}KM ze%haQeVp#m&I}?IbBWm@{*{HH@3wakrBF$~B0nM~sSWOP_pyOC(@mpuAy7?pEJE+B z>UN`@NY-Ia-Vn#-GR#c{VE4h&q_nf?5yn}ksMD4`5QQw;<&Hw|iwAx=YfBmH3@Cp2 z?v|Zc`z`868!S|@#LNfxh(-_;Zt0HaTyAe=n+usEgA4`mRhalQ9R$y57gr_hpfdV;sE*@yjtB?PuN=)2`5vU8{S) z{`P7hXlLwMJLi3QD9`o({>QeQnRx&9@_w>^k~}TK+~($|{S15>hN(*C+FXLww?v5B z_qRQl;_d1MvLtbFl1j6gqG7N=+O=_UwsHc?cGfc|XwD=pR>D)%sw$WZtT0dQ`SxPV zbkHriw({0Y)t^85^$A*)BH7RPvyC8`De*K;FzTYY&=}eVo-8apx4sE#KCdeGRxi7v zMtN|wR50x87w>tAcOe5->w!PU%K@|Q5N2f&OKp|d=mp%+ja+V|BDYqvIoVV!>JPG{hZvu| zb%Yz|gsBw&TFwK7bm~R&zJh)n;A;| zc8FhFABd+^W2#|y01A|uy#8-LVV0y4R+J2${`jy2j9dxfS zSLFgwoiXL6(DaohE6ovmwiJ~33N4qexX6R93c_&-6FQ{5xe=7*u^4WwYI_n)u=s{t zQgrf>jyqLsfq6Et%~nPA>b6VOc)03mG_Ile9ePb9z)eT=O{MWoLsf|kN@+;M#BS>z ze38t)oB5@90+yoPmvF?KkXpPghASnH$`fy(Q7}EN#$7)dmqm(7D^VqU#0<_tAn~ssqIv;MIPC)7J?c>|?vyt)YV~?#DnCrW!=a#DmOhfRAu1I%qUk4P}8Ae1>-M{fquXG z_RW)o+uZ$tYaKtf%@)=cfX;xVtT19uYU5;=&Ex*3KmS0v55M%Ued#-zfBO3Hhc6GO=%2s&iQ1Gbz5nIum6DBT2mbr@pMQ9G+`YTcZ|{Hq>(hL+CsKGp zES@fSD&6=nP5Uw}1R%2aSAJL?gG8*9)6bdt)QJndSZTV3(<4_KBx`bYzXw0So~)Ke z#|nv-#QE*}ImKN@I>EcNy(e&d+`OtE($&G0Rnu}T(S0XJK=;h3eUjG`4u)G-a!ZY+#yo}=8= z+ZJufOJ?&q@UO2Q%OZ`qSb5mA%!(x*hk#1KF~M7O8UHG^89Ny^k)SeU{N1@Xu#528 zXc%BhdcVscG4Pyq2a8!sS2#vDd5n25el=T@+c~*H*7HRZodq~Oz0gmEW97g^!i*S> ztrfW@mtqhZjc&qUVjS%1YOhwDINELF%%eX|Ud#S+!H`~kYqHzuwwJZO)~xSsWlGpO zf#~Fz^~y{Y!&0C5BVCP zB_0=fHA?)h8p=>E!I7xUq9XAgRVw)BSyWk~i_vCApPJ#>CLxNQL0oejdW2))=u0TV8+fSVhbQdQyN ziL-c^^Y>Y=XlFf)h-zv&g=!3FQe_*EW}x`reAzlW!p)YTESDWG-1)uo%DD4p*+$%% zOc~?`cqWQfZk(9YySZi2fTFf)D$W@#YqXF@biQL4ocs2sPWcBripFB=09B`?OA40r)d$PhKLxfFj>9Q z1$q1?0>kR}y#QFS!&b;#lTR6#>p+r1F=)F^q$iPM(t8d8a0Mawv;@7x;rh6vDK6(= zrT+N3N|ChQ3^|VshVidLIiiYb7hAu-m{4NN27Uv}0Z4sIlQCeUl%f$Fm1mBNonxhP zU51Jh%gqm5JoR^cBFaJ2wKLqddPS~tr%j}#RSG(rP%RPtyK0(;D)BcInU9Vd4g;=EXeQ&palvDB_T@74%~#{22;-7HF< zK+sy{;+Ua7nu)Jqck7%qxM?8LNY)1Pt1AzN9O@>jvj6q1e3^`FCJ$*lAT#_L>1=J7 zvh9pVo52bq)s?5F?KbLdHYMY=MD$_v%TFZjO&k5`wv6!gNv~s)*+# zozZh*WO+>5Qz#1*LfX{@_j$q4rpV|$hAEbqb1LmPgYe^CFYx5LK1E519F)Od<|X5IXO18Sz^$gkoemPOjHe5Zb8vj{}v&CL`LQt?Rj zN>j#V@&3SfTyMf>T}Lhwkb~D*-W^u6U2kkG6iCFR81akupsg%*4R%Rx%Bf%|#~RE& zmSt_t+&N*QB%Nk){M=rAB_(r}_DcGU%>oxDp7}AK#Vk1|1+l1cQeSo=p~~JB3I#wu zr|1c@f|(!0{WgwEkpme=uBDuhUW5%hGitU@096fozw7~@Q74{phrEHdu`BY4s8Z-P zlCA~QZu)%8b15;79Dz06E+@b?m;;Of4^)Hocsc0l;FaBw%p9rI zt^*QzuKqj$u`WIr3I5zQ2Ius>m5#X`g2VV{b}^DiMDM|?d}!rF&jC9Hgny4w1i^WmY{{)f-`0r zMCgGPw`z|XlUUWnLDj;@c35h7;+t5P$&R}-a8=9`n-2#2)^l>{98{0EIQ(~rA4&$t zJ~PP@ZILT51z0pGd%*K>{5M|y;5oMlU!89`E#7sIbeSEJ75i0?y}kw&^_ZAap>sR* zIRE%?e;xwg>!~pE(2SixL=Iy&A(MhdB>*xucK8_@&`lPWLCJJ%;x$*zZ+Opl7Bg&6waXo@#wh6ujVSX(-DHU=ZQ$LVK#-SSa zh%z+c)?Z`j(NWhf33;RG;3y%XM)Mlt_&v%rN zg+eGXYP``K*&F?I)Qxj}hQK(16^(pG;4kSTV*cyXP>7iXeF-tF*rr*+OcbtBhiD?y zwgqG8w&8(goOgZa+y_7K%YvkaC5n0$o(|p6rzVf?iNvj4!iTu8Wreo<#DdLj*YWxG zYCjYqxm2bt)t$rCM16b*nSeF!<+&Vvi4X^x5MFs0)P3M$nnkyQXsa+L2nR`aS?v1j zLslz3FIVw00(RxIReQ|F@J$gdTt6%_ZX5I?wA z7()>)nEJbZ*(Gzq*MSva_^?aX22YgKJgzM)z+k}lP|n%w02wHCw#3B&$;@x(-F+$m zDxQ^H_fdDQu6=i6+F;-3`bp;5s8;w~T-UaiL9QTm5J+3ilXe&V(fxR`!!(!I;bS!9-uP|>+`J%%D?-=|6;|a3Ox8~?-t-q65VNvi+G4y^VnxZYA5U+tWtek4U?&XPzz$q6JQa_a z>BT+z^vjExf`owlSkF_`=dMJ6#cVX>PT>+-DF?IjgoVX=TzS~s#e<$)iqjI(d0?oW zU6|52(-8-x%{#XgishS(EdKJ~u5?TaIb@9X)s;Xon4zXr6>bv-&JL)EDY&Rz@Ua<1 zUtaUH;Hzlsfc}z)c`fRO5BJEb$Q`+)lox_s6UCy>=lNc{fF~-x)D0Bp9fxEPN%502pDqG%GQb8NA_dY=sS@C+#idLQ0=hDJ}dAz>Fl*+c3 zRD>Mm9IaZg;yMFQ=?~BOnc$Oj#>s=EppI-8i(y$H4raT8hP(Or`nj5D9rQR&IV!gU zb#?W4yf{}l&56DFV^a~7=U%*vOe!LMzxwJI$HJH06X`Gh&t;#Z(9vNL_~qQJ=hx~} z51w)BFQwLx1a#DXZ$O_*@sE#^!Hj}5E@Xr1GK;64A}Bm)u9yi$+;Wp2XF&B?2}|!}|s+zZo9- zLLqO8-DEWV+S3wiR17<-X$o=s?d1jQU6!p5dZ$U_KK3=(4QrbK(PyE}#Vmda!OgaTUg6jYHuYdS|{pY`K zhP06K8e%4G{ym5HdcS_yr55cplEw09unVjiFxD(MgAeB^+ye?t1%BqG1F7GeH|Q3;rT;u52RUu+OxSe~zyOO!Y3p{jsTL-Zq^Ne}96YRS%4} z*DaGJf9&>rSpon4)q{(-v^nZ8t9^U%*lhvJ!o$?0(gPvl6gVehV|3Q+=7p41(vCj$ zxu)yY%xvKl`(s-oq^j8QMFW+M6lpe>$lA5<#F6&3TwICm5?mi`SP#&mS>V-8qg0yU zt1JQN8-!`YhO-a=YLY+A&{(SfSu2F;!QQw6-B7D zQ7Gw}A0lM&oN+2e(OLp=;tLKI!Gp?`$$fpxqkZih6;e#tBcIYMy5*!p*PX{bGXE>5tQ6-!B&iiK~qbR@9A=t(4Czeq{(t=sfBe@!Km7AINAJuaw7CAa z_xEsbSczwCf4;f>^X=^)%g7%e-|5S)v%d&^xVict|Mc}g{?ikI6UI#afrw|LOC#Bx zAJlT(+XyV1*7im^uXDC?&FBZTepX9eti<5xD2w$kdFGAcQ4)q=ohld{Q$LctkB--W z)4G~DbQ#Wt2)k{0>)Q)(U2*!9>XVfVa)Rspuu1^F86od}dwI4-j$5m8hp_8f??2q% zEvJZs3&z5$nH1wdC-X0v1$-lKZzpYv#v*nVXK>zQ+7yr=57Q2Si5b=n zR=O=qu9@nTT{7aDinCk_HTo}&DGlRgw@bSW8Ve>EAKoa3)bhGbJkN&?ERYa3;v1+^A+N-@- z0ZnReAqnMdQCQ4~TkTcoR+_dNO!8R66ITl}{yVnTN0osyM+NBo^y?9JPOo|`6-&*1 zj)Si9`E+77ykmTuCAgPYKQ@sJzkgeO^WwXZ&IP>_L{1xvascT|za6Fks$FNc2dX6+ zPLY{@c|0)UYd@}6JLfhW3sSgqPv;eV4x;LKg!GsQ{uJQD^*>&4XQ-Tf_3`uL-H&xr zp>p%o++UJn0zBA#ix=NiFGBb-u~GItH6fcO^6Y63c9Kve@!p|z%4ELs-T(5x|5F6z zkf+!8fByFN|M{oi(&7Jb_b{+zPl1?#Ph0m()_05PB|OxjE~S22q%s$l=|TjO6_ZJ#V1xGRV8IXkZ_xtOvHLrrty z=~tA@Tvbwa{UV#*{;=myn`~q)zc_K#e{6EpIb_yO^JY()mEx~{c(~7@wJn(L<-F=| zA8#BXFUX!=UVeLeA-`=8Gtkp(TlOzdqs}UDf${NjS++S5+6seOtxrANHm2CM5ROy& z{5~y@U|r8&-6^}K^_m`2@mEONjH1!fq)g1Z*2sqbb}mG;_x$}C_vW6V$`kxO%5kD( zSQ*SYIJlKNVh|D(oAOUo0~N8lZCcbfv@zb!A$S>G7EtN1&9*(%rG2e-M^&Aqf@4$f zyC$klK_IM^;}aN5@@wu0k`qm42sukv4mtB?wEmA}_+rF$PR8(&gx*BhtyaW+Uc}N6 zj?-|b+rCDmnFbCYwUbd|A$&2=T@GQp4sr8A`{f7jlp?&-;#MdJbz7HNR%(zIUDT^lu>(<)u$C#Kx!D-LZryBCax5 zv>U!@w1Gzq*QBz*&rq7i){yxh{`^%3s~=ro|L}P8AO85|&p+PZKYe%T=uL7waSrVC zC=2x2`^(ME-`+j^>=FEqwcOv|{I_50${X2|HS=cYU1n(5>#O;H@~g;z>t@!=M7i_ht!en%)7#tA>x-k4Tza{Sha(H?!h6TmzQ0L{)iyub!7Of#LkuG; zj9up?1YK0Sr8i*J;)QaDL2H(1dzTf^f^Z(&+%^DN_c2y8!h(T{f+${@yH}Hu%aa&Z zu@n;379X~=@Fh2;x{-|3$Xl?0m1*3_gL5L5VlJ&j@cdWrkos^ zQ5{?$sOb1KC2g zOk#h%0}_0Ab3wy_W>WBJZQjl@e43diIPdRh8Y?cVw#jUpgo=h{zHov_ezo)cQOWPs zIKw22#Id7Pbb&VE?7|9uaXJ^Vu5!5sPwnNhtfVu>5e0NL)3z=8VbWLnltEzdqAk*K zNVIXGQn94L@X(VX{2vZ7X4%}PnG{Ch0o990`223Iae7C5YsWH1^5|0}(hCLBiV!d<1 zAn!Jpj?-;?ZtJ#gL9aT=|KU%Mu^pyKaku}+-Ro~(@87;Yyew;F{J6n?jNwI}_RLDZ z-rRnFegFQ=A*`%pwt>&!WfqI7-6uzy&OoVIjCt3$Vz+A!s6p#6UTD<4e7rdaP978C zT*cyI z9Q%eYRhJ5j*9~YlE+#SQq3pfO4=7?CTGUhi=55R7dIX!sBVMNcglXe4jO~Vf)BRbV z`DP7a@OcJ>jomE?4o~dM*S%r(=imDsz023Ti)5A8B3$f!d#AdMd+Dm^ZIo>g6^@YCo)KlpO<6HG9017pwdOr`-c&tK5H(*I0Xal3 z-tRp)DfFZi44PTUyQN5b2c|EP&`y&JXR6az!MN=vyXvyj&Z^a-z3YOZ64qz3l0fNt zaVT^(b7VQ=u(+SzrrPy&9ucp#OSu5Z5}O$&SFzuL=rjGIZ~lP&o(eEIg4uj;>L!{+ zjuXk;Omh6%2^>XP1F-6O=e=}-!~4yvD7^Z= z|IdFGeT;Ap)YjzY;~)QSuoo(hn_WFU-95eCFXz^X^>r}rwfBodL3-NkaP$4+?H^pS zxVjiFeJ!yB*yEZ-HC1lEy*@MJy91sYb8Y(q!D-e0VmE<#FXNUJB7Ak9`U$b)yM{DD zpG_mJ4?Wyp-#$7Ty2^x63iX%!oBfJ((-haJMP7(R`-7!2`J-s>(o`Gvw{IKY3 zAg|1^*}^DP@w=yJt@lT^b4u76$?ZG!y5%+=*rdjBTwO>QMCClB zR(kUEDF+Lio>)4}r>_lE8B))>E>+<^r~`r^OU#$b7Z+qzX}-_t=KCB?smA9Dw29`y zPyo`_@8f3-k6Mq(kcKKO8#Jg?g2np8O>N{qeilG`k_hk>nd;l2_G}#SZ5g?uu@)D7 z*Xd*m$*$c^o)`_)vObfs1StypE**>spB%HTl7vL8r>ACIc2o;*YmFh_=dg}bj6eCa z0Og@rPwdmAK2aeWHuFV=iJeM^YnzEuM^l6hOnlL0PO;4@v$rRi%P_Xcu;?~%WV?+{YLG8v)=nTX;UAlS%4i84 zU^9rgX4W&;p+m}fe&?w#;%A{L?ySgUuVqQFt@n@bO$NUwse(YxEyaJ6|Ry7Pgp*CB{<&*_%Kn#_sl{Qi?FzZPzgYLB zQHv5MmuM1L3#5??a5@XZJ!?SQ%5NP5IodIETh%;;Rliw23_zPFdC?x33tsc=!0E0u zk|?>&3jRFvF2PA$7d5_+cl4|Lw25P^r(OSf`kz;og;fondMYyfYGI+A8Vd4Ik zg}|hoBiyPd;ro;6euWhm5tAZC4S64)pkP#Y&!?mU(lt4mf0+Y>!8Izz`b8TI^6hioKw|*o{&Vx$|fm^byLHe>nPqjE>h2 zk9XNpS80jk2ixa_u^B6$=5*^37i06ZxBy>3pubFEQfh+I65~AUwCx`sZ+~cXLHY69 z^BWkWg*BeOcE|-r(+l2T=+*?`VVQ6^tx%slW0eg|kA?L0|MJJIJ?(>VbNBJ(2QK-` zKQiq=PD2cyUvK~V^Z=qOEwkJ2T73NVCF5sG7jC4DsL;``e*XFHZ~yjd2Kn~<_8IrkXDvLb6A{0ui|0Ol7`*wqYZ0YmtPO))EYr=QD}(*oak}^ud?@y&Br%T1ZxoyfkzCDcW=|ZEqOfLU&6%asl>8&sYy!W4iFH%b!dkVpAn^v+ReeC!`yPNNGuYo>p=KSNvqL)`aXYH|buws8k zl+!)gXVDc_NR9{}bK;Q3`LlM}9~k(2_{>lk2$1bMv@S%NO*BfZd=(n*na^}ertVJS zc9ChDLsOznQdpN*;Kjjky)Cc72RAZ2ez&uV9a4*!y}d4)EGpW`TJA~VShY&0K-7~r zmJ@sUZP7UfeeUYBiG>#BWy-6XzVg+j0zU05cGqTEAFF9Ss^Esc$^Jy91ZC)eJ_QU6 zR9(s&KeEnbrDNLwb@7u7EgX=-E? zu}%OVtEKPC%)xF9W9>ZDsXbcwws1>d)dG%pxd5NfzyfiKz<+#8T+DDqY+5sfV{rZP z@4vQt>>kRkQs!^2}!eGh}X z{Wm{9{_pTD+;)f5yPdgI^z1dh+Qi`Uw6Q~WYMhuEsD+Ue3jglw z-PD#8d|9V3>rtz3M?M!7U-n>tg0tR$Z+ylyznrw`9KG7EM{q{?H1%jhxY z<^qXOtE#fviq*@`LIqnbn22#VmM%up&?TX~g4=#AwlZWMs3T(hf_WCL-1?a1SR!=3})F-fr2c<*}l_$oc>o7$uhk>NPcpTg{BTZO3!k z-)lqV(HrM|;&4p# zK|Ms%F7D=IP*gLtnm0P^Fz(T(@|G~w^V(40a()$qfW}DZ753iA3V1EIee+uoM&thfZ-3UAgOXnL*|DI*VH1=y0jhNj|LNB+{2P}k zKfYT2;(oIspHdKNbN%N(KmPplIq9HXWt#edkhlN$fBMS^3j%%g^9hh;aCh^dD0oitAKD_-s85}=j}CmuBD z#jKaJD07T+A`D-FCz{Ox2~TF9X9VJF%J%6-kX{Kfri@{)0-euCaakJ8yd<_$2bS97 zfVtGrSFp?7yD4Pd;M(oLTKQQ5mGlj>)Ru_Yyu6KaJefqPb6vuh73bZ`D7#M*xD*}P z2z0vbRqT}9>a-uu?Zv8QTDMzq0L@Hi*oYiMIL*$ylI9Rs$h%`gkr4~P6PXq2OtG!9 zb_DgoVPtIgAUQ0Ey|{Ch9-O@z;F2RowIw&e)P=et)91dEO_=hJ%X$o+>m>!uust@b zD$22IQ&+px2>1TRrb2(?*NfuNq#jb9DBJ7tV<|zMFMWy#ysFO_)4D42H+Ef+PoXu1 z?RWRZt?wwE61uRKFR^CqN91G`pYNXV2ny~b9q?S#o>Ho;^#O5o2zg5lf?!C!2+CiL zd5Pazq=}tNq;T3us+U0Eb!h@g@ZxuYCu1kEk!gFJ=;DhK)YFSQ;j<&HZg0q0v@SDf z13~RrnaBrM?TE_O4-pXD|1>L|HG)NYk=|crce^8R1^U$WpBkpAx}y+$c9b%jIJUC%Iw`Ic+MvRyU(Y27-cEvL z{gTE@(VXi8^4^S~k%FnyFBiM*2_{#+ph?WoV4=I|OQPm{?v)Yl&()^l^nhZbqUpEq zPDm(;2mpBf+?;xICQ`SA;`$)JZI~AP&a}g=E6+U{ zh3pwo`K}j~>irpsCl=GB+?s`qYRbexNKOPG$J|XAJUI)ui6ClOs7xxRDi>93SIgde z-~@Fu!6se-eZTQkNQ(8M8(qp=?o-Y3hMSM;S(>Kz9*{^{d|gq~9uqhv>sQuV$}s0A zy!H=%>olE{j9qKLLTr>GUb$N)S47jqc*oeoe3H4J=&0GkY8R(ooTo*^kUO9&PAhAQ zecLiue-}2bF7p2trSTPmS=7;n@&cnW!4ftDudiS?d%{yy9N4Rt^qUHfB8LBjdf`+3 zEMC^wJ+9bnMy6B{a49P|7+WJt!m49Zf~#qQ&$Z#TbtW$~_`iRDT}NHobWL_;BAi92 zu1}TYAe$(5vlo-kVJBD9ZP6X4J+`55Rny53`Q(Ops>WbvSk@Nz@xUbnyoR5eVZQ$O z>C1z5U|c=#fqFnp9+V$`dU6NWk9XJq;pc+r3?p@exlbCQ z@xfZfKm77lVK#BVxEJFG_Se@JI``6p=>h-y$B%z_`17A0Yaa{~fe5NBYrVbyKmX%j zXYrd~ThmOXxV<(cubX9s3*-gV>-+5oOk^x~syuf~%y>6H6w(T>Uz)p?lN+JG+&cLt zvZmHkX zD&paMtdj_VXtwa|!Yu6St2z3_VFftX^^HsNaG8prS$cNgXR-f;dj`o2xG!)8A=*_COby9O97IYz!81(PoD~DwSalXQ}~k2C+SAZ5qat(Sfjs zR5`sjR8%K?kC51*8aUWbSE-p}7gY~9{WdbwCC{>7qsAQbXns`I-=?|%vLQU5R=vqBFpB5O#8B0Lq*Q zS>Z~F%Fo6v{^FC>i3WCQcZRbwXwK8VS@4ffo;D`Ns~sRCnw)h}HBWfWszdj9tI@ld6QO)UG`pyr^8ZzOm<&u>Vn)N6=uuAiRX{_@wCr|+*X&mUjDp6nW>`~Lp!7Y~aH$z!UP zqpWLYUB|j@T#U>nab9nlc?#MM0k`f1-qF7#y);YP*|NK9_s2Ak_9WQa97b)$Id(6# z@0(pbk5D(8=YG7aV@RrzxeZE`d^~-;KRJYnPnphiW8FHgi`=0QqwTk=GZJX;T#~#9 zzmdE9TX~%%*#U4h-mXn(`h5N3+H4#Ei;Wng`3abIW4pI=%2zyYlz!F&uf^w73b zN7>r=Y@al%(WRd{hD(Lzf~JeYYOi<&P8duCJD(xn?*3=`I>2r#(IB5|I1921y~oR$ zs0u5o;3yVx{P!*NYp}ju5oOxla9J(#DMVZ)wTe;m-RcYax@jw7U=la=MF&ZdQ<=%} zotasO6Li~60)+ZXsWpUcrzQql=Fa#?@(JFMA-(8WyV6=rW~Ay)X)i=7Rx}$+7PE0Y z`}0z@roLc1m<>^LXAw0?V>rifq(x_>6N)R`6H%d$Xo~I-u&lp2NW^FvQzO{2gQ+d@ zjW8}3tE9ci@QjY)y&bU4hY`!d*5i{lnHMF44UaDisid?WjKu~X4bxvfCpEMsz-IIW z0CYkf#NGo>ivMblyzK=eJ|WMHg-v2Z)I)mF0+CmYct zSMCVF>+72p_m$gJOQIPs6GVKXy@tgNL~~-S7A|;hys1=|eSEliNS)#WHR;HmfD-;< z$4|O{b`5yet*3(HY)Vx$gr-J@GQ0>o`pXw}PU1zmC~f1z&=RLcfIJBl4^lb{Oa3~E zSdDk|(J;^c96s8dzn#a&nS%%TsI6tT@~&2a(v~0m&A2tJtnX!0a@k-ZfXDPZpAM1^ z4-%YaL@CHYkJO=!7lF0Fag;S?>jj#t%{X3}Y2!iFyHz2V7XSpuTyYE|$P5@{kFkzu zEiN*$FPXid+aAY7jz+#Wy2zUm@fkB~x(CE7bw;qQ9ml{bTO12v8&mnM2Ih0|EV!(R zi0Pe49IvVo>Fcb5*@pJ`QsH8m+RP+$3VE^@2l3OaIE8x{;rDBQa|zSXzE=!)HKa^B z<`vPhZEK3fH_YJ}-=&^y8m~;i9F4=Kj!nTTXE*WCtb&A7ypX9Ki{mS;gT|^A)u>%p zC4F`%wuzudACB=RaN!eBWf7EO>YL3a6w?o*5_&?^z~obl&^1HK8s*kKxEs(74{t3&Oz}VY z=_TwcIx^^oDB`#9?u~VF-d;bxe|!7OU!GsTz3the;xxZJzj4}# z2HasME5D<}#R7n^aINZdlZAV&+APNl!|B~C)VE)DcLc6i*H7=w+O2E;=70~mJj$U1HV)Tgt?*)Rs#t%q0BbZ^5^yt<%@VGK>MJY}s z=(hzB?yJPDaKx{onUHFb*XmWIWlm=~TE3}jaDLp62~Ue%0g;K?e0zS@Zl=3>a&hi( zweRrKh@$uJ*U<$SBe_2(b zv3d)vQ&lVYV9S25b)ck59R?WH6E@D-3-b09Wd7{8d7RL|6|-LMqFB%|-O%<*h97X2 zy%?;xtMP=L5&nc~k(d;mS}TAhVKgzp&m=;o!*;;rs;l>bKJwJ%w&Ag0mRTrsRTfXZcA6S2mD2n~6m_eFB(~~e8wV*&wqVr{Gk`Bh zhvDk#>($jC@9+L*bJ$?`t>`h({@U4>>C*JP+4}WAeZTqs)?~j0hnzM;4fyr-Pd|SA z_H^@j|5pC};o<$~$M-)xygk)5B$EKaXM7s(>Pd2A zx%SRXMA&=86&Iu?^KBYPT#nk3!X)V9>dTiP4RjJVCLiM<Bi7I; z`rZjS*H~8QXjL-Dq*45Bk8P>ST^9`7h6J+5MAVoswR8C=n-2+2XU+?jK6pl;%AXPQ zQ3Y=tdl|XioxAkjUm12B@G~yM7uEY0M`UWU*1h;M07Ghc_;6-Dt4Df!^|rN(8fVUN z9zXK{r}OOP+MF=RGA)C%Re?AHxad(eI9bG1ZA;AtfD6Ewv?Pds5={0J+E$HT3!*4A z^s8I-ak9dEoUMUo5Y7%YB)tH9*T<>HL89GHcMY+O6u6>jhRfuD=jI=8 z?>Y7Q`sZ~jJJC{$)in>HwHMWh5*9J_78Z=C?Jwl^B zm$iHmJ(X)MGBNK}Q=PxhBFU>wzkOeXPP>n*hsQOe;N`H-xYvpphB4tk<;;;LWF7?Y z?mLsO2Pav>-U|$YiH{b=oAn7-VXhsjR@Z%zNI(ID*$KbkkKexgJYxB5#yMzk82CW} zyryzOWYG{diPFy2op+ zYf&*{`&eFTqt|&vtB^wzZ90tECKW9z+GJmN$1`2ApF`;8qwLm3%=Q;K)_ZF<1ZVMc znsUhO15Mp>mp2`|vM?N);k3<>%Q1BK$Uk+kZmr3ftQ!RklQ$^J?6C#jTo;i^kw^1z zYAuZ&3P;8)h~XZ}1w_3->d;@-m*|sKM8d_dm3VxPJTX`}LPQL)VFk0mnNzKmBz7)1SY7`EvK{FnV0|i^4ut z7CvACN#@7H)%72*Zyv9&e>Fxspzk>!Gdg?J=$Q91u+@Y}g=g~9)=YhY{BOQGGf&U0 zw~yiG>t2!HWI;w*O;zh?^wnbBe5vKb%xon0Za=G9ct741&*Zf0R(?*LGDfl#TGZ@> zb*i-y0P6;6ZObb!h@YMzjI`aj2xDtIb9VZa?GK8v_eoRfusXjJi}~7vxO&bfB`+>Ew~5f)g#=Grd-RWpzgrKa==OG zm+YhY3D#wZ@A7b>k>&p6uSgkRJ`p1PwD1-#O`fLNhi6BP zZLf5~@)CPtilvzCYYM^^cpU0=Zkd#`?0F!>T90Qke1;+gbe{J1Q8}Joj~qclfps3u za3Tj;9MfjErVqzPiLnsvVsZVYNhK7T_E9x2A2W~?ZHckfQ$Qf9#S#dN(Lbcg2_Z_l zjZwqFP>rh@F*X`q#yLi6?d69wCTI_jX-3Fr?axM|anPSai-U`Jh;F}pURzk&)MqF1 zsCg2mI|jrVR%a$3W1xT;7IC-OUUzGdBX4=|$H%)bj~-`O`I8^0)Xc%(_$LPAg;(3@ z4(s*TX0A=5E&{H8+@WMoAZ@Oy$5r9?$;)caF5nOug(5Bv(+T>i@wb2T<&SsIfBz5n zKYe++yK8z06j>^#{g=n9uRmy+v?lm}ef{?R_4~KC;wa{9Fz)?L?9uS*Keu+!6)X5~ z+`C%6(4`qW#413y6gprVCo1m-u|)mYMHzHGZx^tD-8`QkI!W*7mJHY% zqcrckFaBTC-hxR>+wPu?h{=X3`o6M7!~99I+W2DRzE7)#-$f>@3s`1u>+|nO7~fPA zf93q5IDUoAos8And7vF5;nbjHOU@DtSPU3Szx}`>j$LK^xW;>zgHqZb*|;Ful87Tf2yaEYJ27z8?(ASYB;K4TCFkP|SP0<4uZfmJLx+SYb-u>frf zEeLcCKV=$b-M7WTmIix&Zv?2u!9sB`yc*`7GMoaHmONUyMtLD)g4FEZVXIU@IPU$_~rer70=z> zZ63S#2!wgHXsg#RGRYclsQCEm`ReMotB-GPf^!MX{canLhJi-Qx>wgtpTFFAbY>hQ zh*^L}6I7$j^f4=+{@WK1_(T7BF-G9rz8-9CP~{qe{9KmO_Ax9{)I zudh@kZf;|*8RFym*El&dEAHCf{O^~oGKd$V)Rrc9q; z*9_Uso|PsTD|yh5#6uz6Lj_+!rzb_&tidA!7U*wxJO>pYR$foTBL^seU8ge2m0^;DWh($8uM5AF8`=Ae(D&Fmj{Dk)bog88XWT$48_?Jp*$DGQmm!D@{0 z03}gCcFlM$>zG#&k%D>_zyHB8FXYEe?uze9W2Gwk)#83Xi9mt<@RcrP7(+~2u$bo0Ms zym^u@B2CWs>-S&Y-%7;I2d-+Rb0@THM^0d3PC-*2y&*U4Q)et6@x9=p(2NdRH7u zF4x~q7vJrqY&LVRJJ)$I&%`yq_9S@}HLNSmF{F65>XFtU@7`}Sx>U79iOY>kmA{>< z%Ig)$JdU4tTTn8+>V`n+tRgQD<4AMMAHyo^~t)L#s77Xs}7vz#K-509}^3teIHILsI1~ z7M+=rOS(?9Yr?AXNJljwfikL!44U8*7H*pmnK5yAw(vM|rc!E>1!SF`y!^>uUcWsZ zl1iIn#$>*%zga7Ul90IZR@+VwUF5c#`*t#4`(l29+=~{bNjBW*Zn7MQS@kkQXxSm5 zFxQ+$Z!L=tPw);Sn(*pN^M?T-Gp043nkKdXr`LB+iY2Rk^ED9WnjJq>qqIay6tX>wqj@~83m z-y8{0=~#nRkbiqAj1|_#&uT^>|M<1F%2Vz}2XlInhCE;uejNUr2bx;PwQmZoVPADU z_;=XC<>Qy&YZB%Tt`m+Qh39nBZNsnb@sPd$$3MFE;D7t;&Ac^j(dY3jJB?sE)=lB2b zfBLIFfu1~Z$i#BSfAg3o8VDP2ZjC0PChpU#F!oCiV!xvIUF955nW8Sx)aSNDHn&kT zrY)Ksv}DbR17yx~RH20zqKcZZ&rAJXJ8DwiT@FuU!j_$Xb%iqrR9-(xPbBy_Kt!rh zq_}CvUtRI2SIKYX&S20E2P4)PB`I06#C3yY!pB{cEDC+acLRM*ZM4%*_9EdOFI?Oc&uXH zBt`LHBb~OXq20R5N^y*!uR4ONW$>JN+|;ndPh4C$?dr1eOU83iwDQ{SX!}$M(wPU7 zda#5m!+9FyTxohhCtnOq}a`*zXblGLd;VVSPh2o3L8d_gW zwF-P!=SbDbA_k8=*|*w0$Q3n%Z78bk#fuB_MboA4RaAo7!y?)P@k~2N*j1`T2)yMS za4mZ3r^D=s(97@-OMFuUAXZz)9ZTL;EW#t?4dx=JT5<$RDz>HkzrMVF_gr`u@SvtIl(&y8Y*WdQLYgYDh%?G`hO_bpwxqw_;jz z*s_{17;08<>bvng+stxowX7yv)svlnXCr;Zb1Ru{s?`I{Ptq@-geA#QXCT9ZWyql zyR`yOlGh)TLcw=2W4*y;6#TC~9{sQ-ka2y`Q!juD!iPiY*q2l4ByZXNy)l1bka_NH zFnbN}hnm4LtnHeFN%U=}2*{MoU90-)fhW+`Z)=I>EbvcPp(;_3eX@%E5;@*p#!yjp z3`6ex$a(8}WUsC6ub=_O??&fXSY#W5u$oPeTyhkxVqrA00)2xM&{0g?{e8+=(-60{ zXsY1gtis&W{?U4c{>FSz@sMlUl8;oLF|x8gx2|)hvd<^y!7oNuyXKYekXze$y5fr< zb&eby5(nCg^6UeRv@``zWd>NPSo)Zbg&r2iN|k3^iL_6Q4{@|1*cdjI<0;PCwBS4U zNglE@M;j|A(q;(OEq0E3qIZK8>Qv~fZ9PMKx`2G!OlGGs=5d9`RnUUU7;QwVn?@9A zMLv41!|#KTG44}Ox19AFuT5-LRp0URmI@EDc=u8NyDSA@{mVWGu#pD1Fu)DwMYmO!SQbzr1>wK*j)gnxJaw+{*LN zg7xv^eN)Nn-(Ii&__e`eaZ&B@R&sFb{k9vxzVERZt&N<}dwP2L<=5wVdm3nW}nVH@9Bk51Js(zeo#ppTSky+pzhsgrkBaId6 znp^zUs0MZ563iM_F7pmTAJw%{1x1Wo;-p4dGA;}2)s4P)lyUL}u=Qo+6L{v5ZP9oK z9g`<`%wfQ;b+4_@jR9zs4Fm(*ph%`Ds7Ed{ifUB#nbFQvf!@t+{x9`o*2}4=HY>RD z%#SvJ+V1Lm9jLQM&N4I5IsgkqHpS~a-EaQWxuyc(wc7#rNol5hcn-uFtn7)b#BT4S zWgo2(xuIvptYh^!y`zsa2=m607wTHo6HQAFuV@4Xni-5EhF#~KqL}S~3OJwe7Fe4E zEMQoJyU|KGEW8H24$jq?Mq?=wEY>|wceZa4YdIBVcCgM$959yn2LYf<>oBmG=LZu* z@ELqltVnT1)*`TiADY$Th3~nEH5rM&FXTcnonloXv)$hOaM5k8`#x;?AR#U{f4IMU zaBv#)UtXKeU%Gh||N4j5U!JahdA)&YP^~KF5(F4sgk1fnks5M--tZ7G`BlXxU68-uarYujyF6g=h zPNiqqGf$^vGHSVN@q`s%J5j%dpixJ3tfE<3wQWS1ah;gD<;yI}8o(x_u|{oIv7*Eb6#Wt5Js;Vfiy-n{O?U}9qW@T~$smx&HMPcA0m(kj7iB+7snOSxoY0&!ZL4gTDOE>ajd5k< z$41(Ze}qez5X5&8?-*3uy^5dS1>ibujl@EezqYX2xoi9=!PYppJM@#G(xx3Rk|)a- zVpg3yPc2?5PP0ofDh*{Lf+7(Gb@oNwiwEo=3=j+sZdYk+%14VTe>42ywYhxsbvi}6 zX}+3OCEB+o+MW3*#!m0~F$rqk)UTI?5+2UVE{jf)a?Yo`U%eKQ`oWA7?{S>Kigz0&#P^}qa9 zP1?09@0=ru+;M&7=O~9rJ4wGS>|(Ts-NDiO)^B_sI5T#vg1D15ecgWDqagA_{m=o5 zMKARhuG@cqXbC|?Z%OlPMk3<~Hw9Uz#B!Wd`&UQLamdD}F>f_;9F!w!OqC-u>#7vT z(R?s}ly^+4ZO7cAOZu5L+txoqSUHt9Ne7(tnDP?k&RXa6rfHW0BEt8eLvM4D zGz&mz^xT7Q9g2#8Zcy*5_I*P>AzpIpx~}XnOKk)slkA~NU%(e9Gx_V5Nw!N}giO%6?ggK3cE3f{3W||&T zer|RwGrCp45oaoW}H;3=Tt(zQ11o)6?}oK7Bmgc&ze5U>=Gc8oj83zyD_3b85Df^}e5|jDWMQ zzTvc2R(INhA(>?6K!G4t>~aACGsxaa(e}@etwv_$EgV>8VIqch?oFDm%)1D_D7s!S zQ8n2$u=YlEe|cO6-;^p{M!c$-H*)-|@Q^n_0LhLpQo=s17x-eTkJ}(8{3M zc8nF7DDwd0j`%du)Ypcorzz#S#iB4K(v-69Q6^(Hf*ZN+6>G(3Hww9e7#`mE54|L~L@w!biC zT0;9$d_)QyM*VV$^hEGc!Q(-)xLQ@ec~PBmVewXXoScAa>d`0dGY6YC2XO)upQ3Q`{_ z5%6umtU=o&qxMGzOP^M~_o5*mAhQ4)hQ4-y6UH@cb3n54cPABb5s;E<%ByS++2@!= zxz@<=Yp#;&GnaWNeJ8i2=E(uU$p=7evb9!d67v4`u?HP%!MlVRIaUu3`jWx2hwju@ z3MfV)Ebulb>uaFj@^Gx0bYq*fuv{}Nojjgr;*d=@UkcTZuP(ozA$JFV4)lgvfRf-$ z=)BAjRT2z1s>VL3rl!EiX_p=q20o8(Uq3x2euaK+_KioFWa#i!LHvT?SpEnbQ0cy1 zS|D^a%!1+l+w<#=`&?gG{q?_peE;LFvSL3Gfy@8;57oDO z67P(s%5?U>1eg61p6qk<1!YSmS-198_}z$A4-eNc$@Zqg?bmZkbe_Pyy}p>z0l~r| z$^s?k)=L^j2zhGNqSs)>oN(zI4xAckOS-(gTBgcC6<92P8bEhEaCp@5s7l*hQGA!# z#W8?!>EBQXh0Xq*0aP)D13I$~Gptp;xP)s&f~*!cfjV*^9=^GnHh%tsomOdi7=(6N z+Hx%`9#e4DB&@I1ejJnT8kH!=i}L=1m9_AiAfdr}6V7W={e^b0)YeKkUxYaAK$4xP z5AO7w=%h{M-)G{d@gztAeL7)6E!JV)jKbJ6J~t5GR}ibuSCOR1F|W9mDB5Dh+;TFo zee^cOLJhYCNFaG!6^LaeqP0jR{Uj=}7P!9IcIG^6Irze;t>r8Y=K}3X8NsZ9&kCwW zR`pzj0!HfQwm8K5xC?bfoO{AwD5^jWy&9EP#F4E@g61OG#35lSt zw~%UIK4RN;E>ddBy?qCNCIE{nZEH+vqDsfiB}h$p({h#wQQM0)$ks+6Y-7|~tKP2H zQ7hPcy8|De#8PBndaacXS<7X~(?av5J`9gm$9h_LSAO(cjhMNh!Xk-b`)I1CrH*r2 z`J?s)fkOH1^R6+M?HOj~)^SO9wwMjmg*ov5)ZthRKMfQfT#-NQCOfL#x>L{3@uooa zQzW}(@W!?E-_x4eS*03$D<$E@@VKoS1%>#?_nJNp2hryHFIMfISQRsVCMx}EYrDoz zZ&!c!dh=huyYMN?d^PX8d3wG2$LHw4&?H$z1NQuO_1&gb6wP-mbz zmq%B**gH0lrUAfNwswuxD+#owZoo1L!pFuGiob%s^#R1k5U0ka+_Dn{Zh%TxO-=TP zn?GlcRAbfCr=^Acn9+kfLDMM0+lCI3w5o|#Y+Ea+X_X{7HboO(sg%5s-~yNmi~u&C zuPquAmTmM|VI)-1rq7uWW5&KrNH=rNR7Q6LdwMBR3BZQd(`33Z2Y}bt?jOf_@#Awr zBQ{c92xAc4h7FCj-dnDu1O8(K+cYACm|6E^!rJxD7~GW%hsTfc0Bn*kzNeY#Q8rT`z{wZdTsC1yU9&TU0D`Hk<71py1okP;(a2NTU za6;;Dp0MY0PFz{9wlk3u^;e$c9lgvltE?~t*&qqpF|A zMMJuetvM=KtKZ!qd1dGe%|QeoX)MXbqtrz4X@*6cVm}`1vTLO~0IVTJrc@=onJWk# zS^uY3_s%~&EgfXy;N7j-Ee-{kVt})edfjGDhA_4%e^i+>vnQnj%gX#`H1&bw> zK-82j6VmRk${ryzAalNZj>Q-{!P`b3OkFPBDmi8O2@qefP%AOJ9@6Df!;Ey3$Eq$a zk9ifE%;qxzb-kE_2-_e=X>qH7UVVH@jV-(Ii(+xM&g-_y-wY(K7k zd7hlrlAx`2ZGQK4xU|>j(MF1|FqUo4exL`l$cmzZHMxZK^`9RDdE+qg=Ic}M>Z{+( zo}I3*zqef41i{=+b@iONXO_4kdgG*)F^J;*%d$+szYc5l@e9XZ`CvGV$s4E#?lQyd`*n*X~n2btz zg>l&mfsI{INN<+RNfQOi3{k78;~5VJ0+3WupQyLigR>d_M@-w==%?*LT3>aN#+nJ7 zbae*(!=uq^75BwqmUaV662zomS!yc=aa-6(gii7bN5Te%cRAbmg1 zT~zHQMMd)-zq_(Dc@D@neb&F2`S!X6v7-=)cR-wDxF(vK&{ofr_}r|hn>1Y1}7%;pRAZIrYeqNS`bSZikqw7zQ2Z$1I=%mqVfp6>p_qP#gAf8)W_U60qI02KV2m%g>P5`WZjNZ5 zy6=y7w_n^t3}h|O?=Q9!wrJ&m5a%{c2@Z4-@1V-^Omd%JcPx9V)z2JYV}D2L8$!## z@p!x|nF;8s3IK=dX2F_#bKhj#or>9t<_Pyw;P*K)_$=>?3Nuz=5yuEv-0s=bi->%( zM@sNIBNsZ(0%W11?9`||Sqj@O;6JN0)8%K~9gftg09mq~$yLxxkKZn%_qDctU0>-! z?0tEKK89!paT=Q?O=^{-Cj4+y8`8GL@Dbq>N49A5B!3OJ+eb!VxVD!x^zV@BpNHXO z_R_wY1(tF&D$T{Kj!K4-%)w~2853AeM;hD7++US?QqGh>r^KPpYC+hnRYiy*%wkr! zkYE+BIMm>xgZL%m#6t!3LjaKXmYG+-uc2eP`6C($N2T1kqTyH(;^l+cuW{!LqH0Qo zZ7$gop-f*J>m)#exdL13rTTpe);fG74e$0>yjDpRqp2uAtXjGMT2#T{t8%NuF$0|Ta0{j5*fBviZzC$&t62^+Pm-32iil?`0H;o zU@T$~jdf}yRMaNU?S8*S_8j*Um$993`^tZSjc!J^U&$tB^&$<{;sGb?@Gm2wla04iO!A(2sF=7@+w*j6_~o)6~kRVrt83f4rgud)rGsHO zmrbkeF;xQp;-{V4BlhdvozOzoA48-qMOb=aS9Az+agd1GWY$9xvBl<^#h}mUsdLbw zU;!!{PTN5@U8f{vhVil!*GQ>FZev$;!-X)d8UhUU;*XL6jNo~?>@S^bGU`KCWBWM6E+`W(Q-W=_LlFn|iY?01)lJ)^TZ0`&s2s@|sNp2fRkT zX}2t?XDT}uZ=>>W&&giem}hs8T*rVatGIg4b&!H~P8b4_sDAVAYGz`+`sBo17$5zP zUZB+hwlvYPHaBI931FRVO{KY>ZJc&u!im&=08k}=XC2mk$6eISXss9DUk5Kf?hDme z!aO2;EzD-5JSK`sOVE6adf+N7@i7@J$#sp~;ZRlIwdCM|i#c6jhRnn>pDPMt4fqJTTiVj(hETZVst37MVFN?S*CwXh6cD+hSGIk6&Bc zi8>r>^-yc&xZk%yE3>kU#6K>2m=&0j7izT;F;4Xc2k`*rc;8+uM{qPmvxJ`+pZdxl zJQToiS*^2}F-XM0FiR4p@U1EAeJd>z`V-)IQ1)i4pF}cbF$tiO3}SgKOT6f}!CSQxcDHs8;70mEYH z^fO&Wd@dxKiA8d&?3roGv%Vhqzx zU#x$f1h!xKz|#Bn`c_w%8bIJ`BfAx9IDkR{i4`$GzbJc(%+)^PneO7h| z<9S%rL_ZkvJ)>k1z$|4Gpm0DrBjC1UbsIJdxC&FMVh!h7JHy@>M#Z_bx#6%3;38(Y zSwe}8K3Oc5nvb}KD@Q+d&_sG)=iz%Tqp{Aehp$@{(Pwl^T)k3{(7KoMV_XbDi9~3u z6NG~a%{KiVxxvwoqNz>t=|VH8hxQ=A75Q}Xn;G^pBF&^9WS2geLNP1~UC9X!yVrB# zutWiA(z(la-o`(u54X3kAEh5jDIWZYK`f`tfE;ionUHc^=%ZTD!njFFY-dIH?p!LJ zFGP79fzFmI&}wEh1wl9S$e2Kyo-jH2mqvYsmZ=u4SFhI}PjQl$8B>)vyCta4pl13% zKRlKyzrDY`au+GoDIDz_wtXy$D(^+Q9s9te%(m^Qy}o|Ay=qPLhnuV45;0y%*IUyf zAPzO?hGLdW+T#wRF&((LM)jTBTW4SAlN^}Ui{LZ!nxIQK9>|76d7cR`awn|*!vRpR z!lP$IsY<$s+%fccIn{BT!+_@u>Ou0??{DAV!pQ0I|KVPbj7*mezSg*l@~FjXcs3D5 zLzI|cHL)4QMZmOAqncHNx1&|s^0h-_2br&-A)VDDj{$?zZa%|bPs00PODI2aQo9az z&-ml^?rzNAC1qte(sYN$a7qN`Ys-|juo)iBQqrMe1+(}?*ya^;=B&T~V}hwpd|?96 zIISDCgCnu2BR!Cz_lbbC!fv%m!j+I3D$B|?&b$^nzpy`9tW7Mmhr2(GmDg%Y$DHj~ zh;oSd>BOlCOIBT_-LV2Wcl?eTyM^u`DinN-vb;>A2}sYK>pkt-pJ;$cxb!x!k0-x+ z&68SSRC?NN@;c{yq_nbjBVE}Lmje@4N01Gfeul0_{s&EjSkhMu6wjE(1zp<=Bn-Fs3W{RA?D9Cey*ON*!<% zk&I{UYQy(7nHGyGyw~iggn35J%Y8=UI9rw2nJL)RP+cO-%e{UW3fowK$pqJW!duPtyP7t4$Z4cOIy0) zEQuuIIe9?aaCAm0jFg-aXq6S5 z;eAU4a7Uk+1(BnIpNG||Uq`P`tFKY5IXM`MaS->3X$|_my)1_>_Mg^CIk;IbY4NOf zan2yR@!`g(B`?ynW`>IpX1@Bu2&!tcIo*uFYPoocd~~so#U|_$)nSZZZaa}Up473? z?!KY+w=JD$ymtkG@_~b$%5Y`ebq?(MN^K`yShV5|mIuD)6)sw|$5TyAoHu^B%iU5_ zj2_%OGrMLc%hJiQH!XJTuBNX$&?v~~hpGZ6pmR`P7=Lm={$sVa75)#v%3LK#UdmoG2{NwAZJ1U2@$v8PJ|5O49tr-3 zkL$mC{YV5L(`2e=1OiJoey(EPjk9M8C!t>ZL&3KxUa_$e2F7PyQ)n@dzcco@d-#Vv zKD1Zf`tslrYqz&Iaj%t5M*MNLkji91*hW11il33DZ(-@`9chN4Q{)Wov?nbON=sT? zKMo|d*z6SAHmK_!NuI8Qo93&(esNL41^PMBy-a0HJPfLA`H}{p&7-&XTUbl^(z1AE z&(&&9yGaOdF2tjP$Z&@iMVmt7NaH)Td4ZFU;5Ikp9G0=zHh+1oNpfcrBzfX8aP&D= zwRwMIFxh%$JDfGt?GFhsZeTI)WTQwn0HR{5iTp?GKa5;e@bN zV8k_0o#jof^{GTEo&)F56Lt)cuHO+!CoUToM-pK`WV?!tMx&|3NQ(sSOR%g zhc6)%UtXA_b)pmOUZyH7*OCMe8?R)QJ{j}8*8Jp}^-jqN@WD)BfKmqE(G7i23h$GT z>>Qh-|J2du{IH3w!ovXP*{G6veqYEHwV{e-GstF+BOOQ|F40<3{Afi=uL|!rEsRh9 zh#2OG9S`N7n`^Da*ZdUqDuhWJ5wtZ(19cdwdHHBwC^J-0axo}VASPujnpHrw?Ew7dh#-1hPOBwrp7d!h$TBr(rE{0rs{r>i?Je% zXZAQeBK*WS)6Romdu$q00XkK@ZLhZxxkl1- z+bOi3l(4Yu!U-x>CLVpjG%V!_DGtn6OY@Hr6$upsQt}L+RkI3XG-5=MZ(D@ zQA7zGWzM)aaeYLUDMEz})b?it**M%|j0t4p>_b|a){#pN)~MQ%fNgJ_E^-mBwO@Pa z8!{t76g8SrQeZzJuQMjec%;eU*2Hyvg`VTHnmK;gDIFO{%pfrI(Dk_>*hPdj0lwD- zU?r1tshEMlmK0`F7M`SWuW8haQHxlyEc+jzZ{ma8DW_~pNQAY4hJF{Vp}ux6I>COL5iotKHQr+qmX1V#dfO!*vY!s)@LkS z#zq^mnt@Dn>b7NpJCiD8w`E<%Y_BrQG#QjMJ-d&9O(vdIVpmvJeJlyTiuf-Oh&gI9 z-m>V~!T)d*up2mufNeQy`Q#T3mf&@Q1_yuC8fgiK+g zK((J4j|(%_oy)BClBwWHz#jcFxh;KKP6hO65J9}zW#>6-vm+P!tiCYbkx&B1TF8k8 z_pz`)J_m8wQYaIFHVH94)~r4Qp*$``fL}t`feEvWzdyLiE1d7&kVU+Xj~`Lmnrn~$ zLZdP`z=_w#mM;AB@P2h~Zs9t#K;)gTd!7pVOZ;D$d`+7-KfLiW>k)ap@ZqOzAw$`E zt4@D?{Rj4&=gY_^QPP)u7Q>S^1?LH_{*ork%+R&^=ED0So+VKvc&hD~QoC*65V*=( zZg{V7M27dz5w`yo7Zq3^q7b1gWTxjPJMHfQMJj?G{b^H$?B6O4jh<<}rV-U7c*8@V z3PB@5gk)ud_S{;%XF5%C%?y_#w>;eLTD93WjB{LXid|r6cerVJ@dMW2O?+Q9ndMLG z1Z?Ksjs(N-=b`L#D zLn6<+?(NyQM+wY-*W&^W8y`eOUF~V+wOK~nZii=$5hV;#hHDbQH_KFONhou`mnER;;}~TX?k*sjdQ)R{k^? zO@`kY!P8*(t6!W{^M!@&O3uaX*!sH`(rL5Bis|H$gw-~ zFXyy9oghCNE82iHRYL^DMX5a6R**An3uvUX)XVGZ35h73)ms1vsrBm`tr913XL_?< zQuC^#zq$2zM7^4X+S8d0@c5e_9)X%AGJ`H3r{iFs3vTJEEse%Gx1$HhUczfZ+A)Wk z!TJ97!hYH9?c>YiT8CNhk$$kcQ;M{U(3bccHmlP(m&K6 z@i8z^c*ShTn5$@K8hvG{BY)jt4QmtC-`sxuplhk8gE#Co{x8p;{q5@G7tLIj`Z$Ow z(fBl;^t*j*0GOLHjfLY5z%`QpbmwPzADks`f+D*FQe)imIJsrXM5r zrhRhl9eYF~_EO5JzC8_;AjA`jsEDv+8*eP)(25oVeRuI)MFCNv)*M7+GB@U;KD^n>=1fe~Ui5@>o@uTy zFgK=rSWt_a!~r1+31ybVU3h%Cw}eh^C5a$*jr$YEzKItgm)*6eSNIZ4ueSA3@K(4s z$!ZOOC*~Jq8?NNxAyb2fY=^37FgP{Kn%JgMvyl2;_iiog6CN4f&Ll@rp zp|DXS-gUbB+uOG$l&6{VRa!;C>G%k?mE=i^5^6}r+{^p>86Kg`2{CK%}D$Q89k|=n0&Dp{@RgHcc zH#OQ`-BmD8h4Im;Y$u9icJ<}qv}NVYK!uo$??lu8ghub^Zr|^dCnx<2bHJ|Nv+}py zWmLPnd4tiJ8rEMo0j{9k$D5D)kDH%sl=}{Bx>S>ho6N+l)&iNs1-uj zYeNT!oJ-2Jgrz_MD;>;s*VjKdAxytS?wncTu<7+I`{!{PXqMGP?6JMQ=13VMALwmB(ts)~wP*DV1dNM>qc&D!aIwr9wU;8SOzP5HFL^kD z+a6Uc*1ViC>vZmxfO{rI^lrtY?(>-Ng+(x^VZ+~0hEjhz-`YsbK2uYg2lN7FG} zc;8V7&5a*E-vqyEZTc>m34w?M6r2aKP<7lqWx#d1#`pD&CJwL}b(Yvq*l@_^x;KO^ zG9h|D4{au_{pF=2xtP)KT3CF4E8Sl|d3fqzIZNEUd@3Ck^%dns!(Houx2va5?}y_2 zI5wxeU%!35yLG^wjJ-3pfLRtS)fjW33CC|Q1=SIOH>b5FTHepkptm(XrzXWE#>a;y ztd%FQ0VA}R^=0oC2=UE~m9_*H(NPZN`kH~OEO-~fAXmplZf81?G|KY;qRHhLBruNg zeG}1kXv8A;*A!L%LUt;)=6KD{Ge}@mMHHhrM0>nKpW0Ss(AU{Eb0RKA*Fz579A$Lt%lbJA(@=8yDxWmFD4^^J-iz6K zABO1EjIB$MD(OWHDBxLYX6G^T@x!RiWAy~Dk-V|;uz4XYeT>G4qiK8 z;j#J?<$QO2KWx1(G9$RyfX&wi&-NZ3A8zmN-d|tx$a4n&_;^mU#5>YA==u2WPBf%W zToRJ{!4Kd}jAb9?v`93P>~v7oB4+;y)UMCqecMP-05{6~W&`o4`WSJhiO0>=_Y=u; z?e*V&&G@7>)GU$l*`jEX2^h^7kc(7&&+r;USkC2AqS$EkMUv6%;riy`VYBu?eR#;k z+EcVB*)kW8K>YfAuA^n>vWDWy$L!w2WfWb8<+%H#(evxuInKA&;0)^f^}B0hH|ZO+ ztPS?UC%Q9~Pq?w8=(-4VjT|O;^?l4d{S`_J;-{Uhf~%Zp=3jGq_sKY36}`8u#rRZ2 z*GPyjTNrkxa&=Rq3ZRUIvOe*X@M+dFOQ4JXS3}OsUKgq;X58q|9~8br=V&{XNz!zZ zITdePtkwv9cQFMmbxX0fX{3X}7l`1Q*qJw(W>MwgovaE>xuhUB%InYBmQS3Oz0R__?s0XNU>#Wm4eLc;?F^J*A-OV4roC_2g(36+UiPp8N zk2fvGO(-921Pe?C&0Jo6dm8y*Y-TZw2?&RsP%v`*@kcp&>iFeF4v67ImIF?mvRMwQ z9PobPd6XB_haXa-$coe?bLR}IY4@HL@Xj4gvQNZqx7PdE#t(Oo3Cn=5-@hg0;qB^~ z=da)HT`4^gTLCQZ=YiLk_b*w6sgFfCsrEB_a(mgV@Zp5Tp&TJY40&iI2yCx^{rLD{ z08VT9MEhi=(Dgq%ES4ECzx|=9@zuwpOT|%+q*q>^J1}OA8H@X!%E+_>kt0^FHmVcN z$*kcI_jmW3`@wqS#^8b06-!3$Cq8voSF(RqagefCOlh8K96gdN-l_nc{W;J-6UA1O zOxjnl3X#du_eB#;#sN!tf{w=${cAW?GI(_n>75G3{1gb)MM0m{T{{4b`yanZUa3Mw>~5b>VYjHJdNfgwJp^H6h(x;UcRJ{^*+Xfv>q`@##W|$ScR7 zi)30HQ)sHT&{?Q!+86hSs$GP&>9c03HhAZh;;w2Biy`p(`KXN)b#W{ZuoHZ>g?gg< zI%)~mVSr1Uwtq+D1x~_hx@#Jk3Ju0AQag=~ewDWddeEXB7szb9V}LqsVo5%pnJn)h zf8SHv>Vcc-C%@t-mxtT|WxtQNo0}Kl+#gU;6Un~y*~usjvwvGpS69zh*U#ka3_+aO zpeBs}jcr3g!P_72-3g2*fSYc`iSdCROO&bpT%6=&!19yraf$H^G?lVOtiC?7Qq|SB zb-!GN%&#n%wy%oSerYDTrd6(VzQXDHi_y}YA@2Au($cMt`#jn0t%;2}Sz^3(rR!?? z(>vE<2;&TRma2Z$1=QddJZ&7qYrG^d=K9Qq7_90FfW<}I>V^4Ql`B3ErVySv&)JAe z5FPSi38-6{HvcE1(&I(nW=k|h8J|x{-p!GLJ1yEmc5$pA1V4^k7pIe}+LY)Nc-81= zDFC#)K#i`dI~T7t%v}&0P&owv*x4 zSf$-quK_XZNMp&a;K~7&9ag>CzSN#L;QwY+NX^xbKgVs7i{V@6O2*q;vQ#e=isWdf zQ)1LhCd*Iu7;2(+++&*b*DFXf_Bz!r!w0etMQfAf{-=wA`D+c7A0ub%153*VL3#DG zb*KZ`QDOkJzo-DQYF!GNPnfaQ8Ysn;+7joxYA!->0B|_ECgYZ~cvU1H@sJ(yuczwG^Xh1ahF}B;sIdJe+23X5ecfjt;`{d;` zDsW$KZ@vX!SGg{+p>(-6(6U!3CsSErg+0c-Y9NTBY1I%w>9+a6k?nQTkBX?H3 z-HVglB>?Twhh@E_jdu)p#RsN2r>Tr%RfnSH>3tf+yQ%8on2@)Rx0g&^&`2vnkVl96 z#?w!C>aJ2qs4;zF{OSS1;h^|N9%K?jacNohcBWdHv!S#GmzMm}*6bI(Y>{bM(#dnG z%#Z98b(=@g-6gOcsySWTtMV+gYl>M+lG3$Jif6HpkEdo7(@AQj!g#Oom;Hv(C@qN* zvB9Ox;Vk@7p1W1SS{G_c4iJrZQT*~LaA7`aFb-Q&^@^4O3uQUyR0WMedZDQtUwC6a5BkK(UiHUSYjOI1IetCO)-6_IAS0t4~M94$&1ktG!&aHe>3J(WAH*HS3 zr^dV0IIhQY4)jyu?9~O1{C08DBF6^p>Lck@<^HyHx0qLpnxRiLF<0@3$BM7sAFSFb z6m@@Pn|Q^%g54X$OZxiN$M@%#f`M^AuD?8pAj(ap=RLS?=al1CS$j+w-&kxLvRdnZ z8qKyJPS!YuH8#6~L@r1QW9|T2)V+UvxNQ!%@s$^z5>%zmg>5fFlE&?%G^aK6IFVc` z(L;J!Yi8Mm%_RXFEFV?4vH66`^~cxyGVFc_D+}Ddf6WEF#70k&&IuVEByGjS3|%%~ zs80W~`JVKhfOcEwGZ)^h`^3HpK7H$IhcK+M5Y&M=bgD7j#}5x*K)$|u`RkK7PvYbK z+speGan6-bvgFEUb^Y-;9{*6DU03fdt&?!vl+cV(Ix8`WFaW+h zN+X8#LE2=W8;Mrjhd}S+FTa)_QT1*yVG&BPDzCn{;*@&<^{`@5BSJQafZrQ7EA&kv z;;5;|4q=Gr-R5;iRUZ>12F6u|HuehqY3ff{SG3*}SZ(?~-M*3yM`9;&^n$RZ;6KS-WH7*l~+z2&cs6V%>XhSlvG4Bz0as~>*#z7dYS?VJM5as9J zS{%1yn=Yzr7?N`ab(@uZ9u-j+&9UV8MR2hNepT*}F;*27nVL;%y3_55=Cs)#0TN5S zsd-BJSSa{ksjM{X&xTXIDt(_3mDFrWL+bF#^nxQ?HPO)} znyP-d^P{PE^ZgiGLZrMJ`+DmPUmCK?#}4&ef?uv| zl|B3WyK}Et@Rmrfum1Awd;Xo7KVJ6VCU{pLKNKak0us-nZ9$A@!1|_O;`8EyISzfL z_wB=G%*Bd_xH_+aXjry^AraxW6}IsN;i!i3ETmHgv_@&c+d?RfRz`ESvxqVloYw7K z4%W5z`t;paP_VR`n}vdHQNrnX`>aF4ad@J|s+!#TyQ7G1JexD8h=VZ(NT5H9wlM~u zXQpuywc_aXB_TOG5CVSP$-bLh-siG49CL(hi$MVM3C9A%^ zX}V@MVVjKHb>T7#2-mS``<&+0)%pi))1+!87mUY!FTCcVHrS2x5qU(Kx}(r|rs ze{>%(_3KaunEsCElE54@;>=|QK&V2sM24}E30mzvfGgxw&RJL z8_y-Yv_w~)J;=_@x+l*E00oBInS!+*960+DxYI(-av?5@oSV9!LaRDmlI54vKCZX= z!MB#~iGz=T1^mPfO&c(8E6t)zeZnwnWqEQ80`Jkc*Uaj2bbysC7u<>iq4QpMbx?Ac z&r)#R5ivIvYPA{+R5DFp3akT*Tz-&3)C6t$SWw z9#DAb!{vhGibNkM4v-Yj=1#hc!uXugrK-AfmTcEyoM@ijKeDG#-9JX;3to^uBJ;$E z*BEV3W#{Q7)Dw!zZiCX9O2P0aKf4Udcw9S+K66w!No;`O`^Oj8)~Lbo+A%(w49fF< zqlaojG7Dyn4Qs=<^S5o%t6bs-dg+=Uq#@4pa#CR$CBmS?A`Cw@xJ^;)3yFyJhlmF} zRi{|HUOSIhGr(h{)b=I!LYMwyc+naZhj_~%5g(Oek0lCfHE`AhC+slCa+MWjOK8Rn zCWXT=7E?*94OcjvwpNjce5Dm(icrik7KW;}bWhJDDTrM6+m6ujjmfOH28+i2jq~lV z=1y8l3fEM*0S3uwxue*NyWTng4PBQR?JPB)RE{aYHa^`aZDZxoP`uRX-wT};9A})W z6+C3?39sE!{VEQe1;$1Bn=MS+!^B@+q^s%5e4y+gI!CwERM_iYjywj*)YbHj3n8gS zHYO+rqyM%~Um6km`t9_#zri(V_S!9bGMN64M}~mIPu?B3R^JGLK~Z@%|!DpRo9Ft6ksA6g5c6#ini7 zIqeo$=4k}Ymv53}0JNBHdy&3R;&aH|=2a2V%C&;AySN%zRJI9f7Fv&p>5o@m4y#|j zr}6vOFZYcBO@SZfX3Zuled(4i-{0PzJhA|s5yU%Tx?f!7PvZi0Ufw?*o2Kqq%j@M? z>gPkN*)Qi^|7PN3-SEhM=B|qj?`WUgGzx!X&uyy`>V>1Gv6+9`s`uE~E1ItlOG@jk z4|jK89~}A5Zt?#9+z48EX^>vuzPIsSL>gfT-E3hh7hhrAouQS?C61leTK3P@L+M~> z_%~gkT4iNJV0g)d;BxSqc$Vo^3nC2Ki;b)$bQqX};!>Oo*Gbmm61dv*)oPzbFzRJ= z+5aK_czdnxcUSMWtOV|C_H3#my74=l`>X9nzM%Ay{2f*s`Se0cx@@J{ka%}?Qxb#(Gw9RANk6}UE8k=17&+koard$BuCB8lj`xBf~i6443<&Uax zIGlDpK72XS^F^jwf7&}?aDf(Q2SQ0hUVkGSs}pAGC?tI~kko+bN-vc)4G`?LsGLrf zU%o6uY#vDFk-R`tvz&X6v8smcUd}Bri;eiXMot$3ZlSaD0Abychd@!taS|70Ozer& zh)zT%NQa3zrc+C>ALS3Y+3bX-6;8YRWt@aLkbck@V_g5OD-w@82Lx#_lB8*&pvBnc zl9g4>L5NSpgFfAqZ%-c8gub4#m{S%E>G**!sjGBokq0 zDB}nlrxk9Bdq=VW85t4in7D5y&TPz@rL32hi2zT`+UImGnz^L53+6^m>$y*kun}DC zx@sM|Xj4DAbnnF0 zc2k^Ux~&oteDpiq`Y5JZI21-mwJaCy?d{#p@h3xfcH^gv0B)0nU9{02VPzs{4nKcO z6Bh`E|5IH-gW7;>pBa&_Wt8LM*pDJzzF{f}2OU?iN-~c}G+(C_Q4>|`sxpP+rISa` zHcnG;&px3s+!W&M=}$WFC#2ZLnHd>sCISky>htIEU<{vM-XGjMI$mQ3USDFHz@!6O z=f0EHXQMt_NwjLb__X@rUtpLaI7>YgERKMDLL$Ik-vyww_Lz27JbG^}DtxdcWGX*{ z?s6BaH~0hq;mr)qhOy~Yg>O0#Vn-w_6w+|nkX@RVIwBe+Dd8LaLgqQrb_O92zh)Mr zS}bvTEgXg?P3ltIj5UQOe8JLgV%&LqXMmmRA3r=ixc(=LQ2qM1mnW#h{_bh}Zs$_0 zlQpQMIeyTg>Sf2KjBlSon@_i6w>QizGfmc8>c%<}QzEHb!8%uPrtlkS5JW*VBxTr{ zxVYRXf^k~afb)7SPqh^Znw({@w|~`CnN?@IjP&;E;Y^Iq9**wgoWCRBl$A=~26j8c z(4h0kkn?-t!AfH??_h#ry2Y*icFC#3XnbT`ltWui*+hpn zi3_Iqjk?YYBa0!YUj$GQIpwoIZ_Igk0m1kH_StU5Z=?P#roc2)Wi4n7YxSi*KenTkKAQ@@z%2zWHf}j zcPnr1I-9*d{OSlxDrvLv4O5>$iHLUi(m5nOYjF~sZ|9+x^G3Mo!%$OZ$Eq<|f4_M! z

    wkA!93G8>d&rOt>f= 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%0APhJU_iBtT=Uw-MBZAqBgi|+%OOYS*q9Hh#Fo1nx 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´WPD}0<@=l-FqS`}O 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 LNkvXXu0mjf`9Tou literal 408437 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

  3. Lx4*j5+dLWyv*lOg~7XWy)XbtM8yK5DB3 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ðLRp{@sr~CL6Z* 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�}K#r6Mg!HZ{cG zT*FN$qRNMmnpL;bb5!1+4=x-3#qktvj(XyDL9!Lt&0QWb0c%5u=cV@36jO$Io8d7FUqfbaQYs-_g^l`BfqAx{-7@X~15ISRN*bUa$O zUiXyk+62$9#tx^9Lrie4*ZB5ng_HYQOI_=xHma6sJk?qiF8pk%cT6xQ6`$u{YwHM7 z-MF5fo-QKsFi%N1sn;86wZ{s*bbeCBBJSU=D#WJohm-_t)?|R?)}jjU1d_pNb~XqI zqY}@>M(HDaYBJ|mP(J}hk?+1d`Phoc7{O$-ioF{qNVHdQGF#;q?c}Z)4N1LJsMX#t zZO*BJmqG&ThS`OTVG#`mtY6NZ<5w~87;g^)mLI!HU7B04{ZfpE)pyKNjm(giq1#w$ zV6{8-L^c&`Z?4PO5t6u8B?6CeD;rYS6ymtD+t0+1Skp0iAyUo+p7p(8hYg7w&*uA$ z_z=z??TK2H9OpcEUcIXc6GUOjO)03Ivhj|YF1u+`{NTmi`!AkZv{LIh49Lg@rWQRz zH;RaQr4^wGnl@;HkJG7KuCRSV%GNwo_lwlPdS>HXIAL`m0S2-rh?o0e7R4bKu6UD} zI>8HJJ|wEDN%M0PvC-519w+*nIV93J+*Q;#A~YQ`O$sc!a6SjX-Z|tsQCz63Op-iL zsK!V}zeFuewOjv0^Vx*?*~{yyB05h)qwtK+Vf8c9wDn%NwUm?44J~#&!Aw&NQwtaR z&O?bWr*<4}_g7bm z8B+pW>5{yv0Rt`qw?D8~i%UEexHnVob{we{CuzV%7I!#cMWZfs;jYW7!MWtvraq8B zXu^ftJzV1-nK-f3l4UCqePa=hk41#k(pR5t3aNrk;$W_?9{Oes^EAbj%-RUjUaif{ zN~uN5>2QcKy?J|ies>tAqit0HUtFx6yX>GX+hcIP*))&u7#?AshvR%ex~KI0?saV} z_Yaqp^6@Zh&>wyN_8T9*n8rMhT?IDh{QPeE@=ceqQ0t|&c7!7z4!OSza_J<)I}hn}m`!UyPFdH+Vc?WxKvDDmAcI&1G+JsK zQ9ZAv;pPZtF@3OU=&Lvh=jH|FH|^OFW~mu*I?Uc+YhJvnyDjwl76uG$n)iH*t6Roz ze{?rw48D{?RkN0csvVC1@fVMYV+4}L!-7y_u&Rso40CRnNK+*pr)_GCYa!SmVw7~2 ze&MkR@=K$La@q8FkN_qG@`V8KCu#3Y^(#o30%38QPs`;Y#N--3aIAe=6*~I}K2Z`* z#4%??7mof%)V~TPq?*${N+t>Wxv3@C1jdXmvymcHHD^CN<}u?|OGo@f0MuyzUxTi? zt1)oaB>5;6t1~}Z4P_(=q|9y+)y+udDUkH>^qxL)!koh=Bn5AfQ)fhqNy@=^;OrQ` zpm;ITkce2Ku3=#I={EWkfT|!JTrntk@=0zk+E;k!MZ-af8F)^B|y|G{7WZnLh}{fj^I@>hTHr%LIp z%E#+cRSCEp@-$ERc#NNX{_tP?@BKhcDw<@9zT&q(e(%0#`0eI&3L)G-l@{Cm<146Y zPiwiVR{9j*oL&rR!pZS;Sy@zo@jF4NDv9B!(U_8G&=3WGE!Fq$CLo(GuYS~ip z-i$phnu0L>NYbix-UhlIf!e)wQ^Q4nta! zFbzP-fsc^mK1s|8+gI&(kCD21h=|mlIQN*ucB=D3@c*ygoHwyTbq7I%6t>PgUvuJp+onZhs%q*J3gG;@eAYE>s##JRu$P-~tHrO>i*{KLOa59+HeH(Z`iA5sT+U)lDA3 zZTF`|7Mdubk=iG(o|+Ny2;dTU^RrTX6o5LQz@4H;GH&8A6V%Kbs3=x2#SVI9!MBM{ z#lC}q)7v62Qv-WaDTUfeToZq6Ys$H7XT+UCzkvV-$#dVtWJD5tx7trlb)&nx1TTHA87d zIFv1UXK6N`aI|y>(lhpM9;G07Q0N9@pxl6CsP&!SZ;#Z}?hdgU5-}`PNqf^bN<~gI z4`dNlj@y);Mj@NV#=Zb?NG0JFM1NuhB9=A4ReYBG&L?TJuK*tu?C^dh>$SpV?a` z%Be;d*iNEvF5BmERgnT~|1aZFdV4I7S92Og4FB+-|Mj<*>p$U-{;H~q9M4^0r%LZ( z)L24V#;?Es{J-)a`&a*u{vlR$YWENdo?6^j;u% zO$Buf119pa97>npEvpiM`=^3A!SkZy06u?cRLQOyUR}yNaYo_TM)V%Q=gUTwM~bMw zcQaGGp>L3}rv++VN~c21s;stb%ZquWHFu7&gobQAHR;J2l@8Z_Y{ymGr;po|!|gOu z$7ZcPCEn2QMQBpEg**TF8FKlhHr}!!3eE*!M_?RnK!IM&6AKZ=Q_Ewb6x}Yp?A=bE z;B_wXPGux2y%xP}rA2SUrX&S)ah`xVfj;AxfKCp7;2U!kc?mnC_LLD6+!FFfRb6lLO?7S3)jKhTM-6v`X>UQyccQt3f z-y#kTu>0Te$ya4 z3#F6T8^p)9USn)W3HQ~UGc3~7j)yLjpQ3OG!kZ-=mubAAE#Wa*Z~%>4(kEb@AIvr@ zsRYanf*TY0mL|GLpr5IJtNa}L662Ll4*>(0O&SeGR%P2e$pGAdjq|(gmSe&LJ-N>t zrKBQ$3C#FB@TQm=4L}5aXyr$ezoPEn?o=Z23A>$9*4goL0j)D2uwDvqy4tU6NW$t0 zc1b-gSP#r~CvNG%Y z;Fwp(i`~?7v74Ji-Om5yf7H+YvF-8ACl5ba^nd(U-@JLUW!=>D zFwPpKtczM5(IUCL8fX!EKC2w!*HjSXvmOK+Db20 zhGFdS($=4OIsf+SYtdGNSxwL8;eIK*PQ9Voyc?j%&KUzVPr=RGJgByFwYQh;cFZ}) zqF>F`&N;2Mt6>HdoUblrNImEeBKtUcREdh8nS&LAY7R z10V*~O#>tJVBcKJILIM&*bN)9%`s28oyM?fhtomS44*t*4}%0Uz$lQC9jw$Ewjbhx$1zU;8LF=62jS}iA5A&d!X6|Adwql8^?4jl^bYpfV`gI!5zO6Y z$4s1@(E=eVqZbgoW9VS*5UrtI>%s%pJR_I;%bKL~j&A3i#G{6jL-JQ*`Tmvnc?t*6 zc>;(>Qo4tzwadCjk<1=Ozoki>oYcQ9{lqRyInEPCr-;Y9GXe3dB+_Gm=cEm5BIa={ zD-?iPq&V*0Zxk{TW7)_j$A%A81A}$qqj(#5*KB&%wdK974sLUVJ7<10TAj=`Jn&P+ zqW@A=(A6qeqvFBRo115kG>$=0=muwyh`}RMv z_-`&d$`!$>4BP_#G&*!N2I9F*o(#TJ$9E$ao<;U};jGl?>{ZH!uLlY^rH?^P6 z%bPckMbUtLeZP>ZZ+4pU+xv%Mu)7d%e)?uUL+hr6 z)Ls$PCGL}Ejpb+02)KM=y;5AD5kMr_LtCu0J8nj@)F44it2I~(IZBOo!d^S%baR)! zIB!ca=s7E=&pXWF%x)JAaNSNYNNyw*wWp$o9QUbGr^^hITJF8TF}5kmR_$@E9l_>> zG(}3*BSx{7aA@^oKFE~Xb<<5-!}3gUHcf-5_9lT0DNfeRg}C=jmq7eK_!XO_K7EH*1G!{QUL9 z=daI^ftcYx*?@OtV-Q1L9J_bpC37)TII93Xsi=D-WjNMByfIQj8AI~Or`0?>*RowM7wDiHg*>Zc>|u=Q_V$SWq$@r;2b-FnY@4=lcO1$5 zH}h(lL=R@T{=UIs=}gb=7;oq4<=xHkIB3!9b)lKj>E)bx4%D)3Ir-sK z=_v$Uek+R8qVZHL9G<}mHRbSBdSIKTbaR;1dXeV}Ogu8hiArF6S;~CYxFLii_~ngr zfROjasIQ;aE*P=1A|ugAShCdSaQ!=|h;w4hnlX|-WNMFkm`x)6J0N0CILH~_m#Q-W zao`*1=(y{)UxqdyV-TDelK`o2Ep=9Y#XQAU+0j5kfr2_m3bgN}wj2!EMX6|R;|)ay zurF-GRK;oRKt9zEtuJnOV^pJVX$#Q9#Jb&DX9V?GKG=V??Yz;(+i-H$Qe302X&y#X zTXkh~oY%Il3;IuME8d`pyOLmp8q)h?2-9J+jypeIFEntzEN8k`N^0{o)lU66Bc~D^ z61A2m>%)VOb&Uq1w3GO-6~Nf-i2nx%3F}p+c%7zewI|zdM-kOox7^zIKYi6C-e1e@ zL9R<(w{~5&rPRh_4=3V7Z)nH&Umo7}kKe`*htsz{(l3_(+0VWApZObq<4^tI{(5~f z%6Rm`z%+tp=Z>FcMzP)w^*Zo?CC|P0y1cW*+_2d*N#=7Y^Mu4n|Ddiwh zJ6hFNQ2rAXC$`%ECPQ><%4sQeHQV!ukW$}8CA6^#kn=_gzvhOfzVPgkZs|3SIWGO^ z(oxb9P0jV3OS5d6Q3rG=3Ez)HxTQG`^)p#&TOq|nSjw2)xi=QGc|ro9A`z>C911s?+h${5 zN=&c5c=ff9KkSJnQ(k0yq@8Rr@ic&-ndohZQ|r4Hp&+|Korw71e&Eh zK0UsC{>)mas)MV+c_`Sn4KfLeNmn=)EtmCr=6a3R&r2eJ!!Rye?SEIBqd)H8<)bvx z!<^eYs(AuIu}$;vjU$;Chl};{Ng1Hn_~5y;!$JGoywk}DTrdFB$8i9htDrtbaCSlh ztvjVSj=dZ^+t$~$i19haNRE+j)RK2)(P%!B462*XP?8OyO%NJ zAoF=REG7;^fo9B^1!WC@iqa2v7X)ptIU?`+BwzJKT;S&2h&4A2utpQ}30Lz30Ds2i ziSM$;DSTI7;eayE|H+nr+1K8WvHf_lA6?qtef6oj1_P3~yH06y*i5w}a4cRF!=_xF zyG@`AXJQv>7WpU5%kTgFUrXIUrvA77(wEPyeg5YB_Od=ZPA_lgAOG;v@pOzq&a#P& zYPuP4tG4qW6ijv~8=Bc?fA0SMpLwCFvwNbf|NdY5+W+G(jsJ%~^Et9E12@E~?e>Y3 z^arqOey4XMseRNl?K*J(jIYmkIedEQ6TB~m@V9@y{N<+--TO73dMYez^(@s6AzA9V z^Uat$>|x>B>IsVXoR7a~v9NnBn6)jAIq^AMYVChf4TcA?X(~}SrM5LPd2^l11a;4d zB&JpkDO8P*+XjzUhy@`#R3=o3R^Scqj%XqMMm(EFZ19FR4^OpTw{;IHu@8#@EZ9ud zJ)L$J%8p04K_b&o=Hu)a#^6g8!7AK`b#zs#^JG<>7&T&aRIZ(_=Aqqk-MK zamOyo$=m55T@e2hwd|=YzHRC`)H|}Gw=R0nGBmJLq<|yNUo5>E1A4U5jq${VnM=ja zW(R?N-ITaln^`p$T^wSfn2js2@oEGKynDtdqYAIVF%*gDL*%h%KGxnoJUoB?j3emU zBuP(GYQ@9HmrQWYrR~Ogz7S7XYTL9KfC_Vo1fs|9IZ}akaB_rMB2K_9NBZ`-Y})M>)#{m_x(p~9+cF-bvEs@qnr zrKCi$h%QxK1+@{zgSm1ewU06o`qUHFl=V7D{G=>D|K9QIF?=u_UgZ3@y;`>r9^O90 z93;1~rE~vm*n4b`+R>IUNRtt_9M=n#)DA1>;id(9IKK(4eEH@l-@bVnLjIl4-~P-u zUVd^dpM3c!QRXp!JSH|;zW)4}M1J(NrW}{8zInQu_Hb>AzH=aYW+L(P$8xgzG@1R* z+pqoX%j5HTdAn{)`{(@Z2QLTtul(J=6@l5=>gI5zoJ%v?`XMk(j6!aHmk+Vmg69hU zM6c98|KijC$=f_i=Wb3ZeRf@2pLF5jE~(iSJK+bHGw1oA0{B5xzvz!!Cy8ydBxyoA zF<>s>qDGO)UX~e%%pi5IyT6~BXs8hjZ^WP>!{53$`G&^6ydXt^pi zz`3~@L>l(0MkhNX4Iybj&0B!@A8tl-vs{WYvWxK!>0n54(_U(=E9oG})UI1OOrwPM zv|Kx>nMovfGD6GK{bSv(+g90xm}7XX&ET;v-nCcCeazE{o&@{do;&ZXl}MfL9C22d zpU$?MYAS*c{wKPHJpsr>E@p#-8IIp-y8pQHc{SCYHNYl0Vk}M22-8ONe7~VdNV-sZJ1t5=ZBZlE&7_>KRq3%u@OAL7YCV29^bs$)bR<_2!2h(^vkU zja|<^B-G8=Aj#R4JH7Mj!-Y+VTXM>seH5y&FfsH~t1)wB!`b&iaFtV18Fv*YKB|zC z|AdJ5@AqRD$P#Y|DP985b9c>aF2%m%_|(4HyrUmI3E~smo760av`S7~qwZmg)%INM zbQ%*V!$%1@rYdm@mVkRn=zlMmI=t;{mPW&{CnU)-CevB9Cz5hIe(inv;`8mhA^u~l z-cGr_KMmf20;3Sga_(UY#`ie#r`$__ww(lXrdvyDA%Fb!x25CV-?^I&GZyDuZ=WA~ z{!5X5Xlz|KJ&xIuJx}rVdFkP<&OlDEPwBHB<2?4y*w$?c@h4Wl9^#kZzkl}Pc=MfG zyVPLupY;2`_Q!wj<=^;s{~$D?a@;GEv^F3CTTKmh+#2ixJo%&8{(HaqC6faVm28`C zu|1%4V_`{s;G)W)E4x`3DSO8#89Q$XVU~QwByDNR#Eg!;Q%7Co)KU;g?E|ZU6(mGf zA|wMPR>Zn7wj;{)650_hD)S0Vu4-)Ath)^@IfPRb136{t)k0ijRe+{S4KedY1R_&z z6rW}0Ph=_m+WyGTey|T22Xf(<@jdSovL*$59irMVGT-&QClvVzv#-<2_!O=rjZ^!@kW!wDCU2YesccwevU z<$QiRpOL8=Td13bmAwUmiwHy1UY-W<&)wdN-C}M+{?)0+i;y7Qo*6LSGnMQ2cddaV z?+#FS2gLy+zMh(<+g3Q_cA5{*pFgKM+wJj?6QKh;pU>T*_3^RauGWFF;+Dwrj_%$S z|L2_Y7|B`Wy<)K5XF6DIZpGNl7EmDfP{vBsyZ2kETmw@Kd72Jjb4!e;!$hJ%b5A}& z1CJVB`u6pkV3cH#b5ZtFZ%<>R=+zFZJT1y$_?zQ&nmXm>&EvYPTWdzMflF->dct!O z&Luc&a2EnGbqllGL#7`$&w6?^_7)RO<^_)(MUe`n>b)-*h0Z(NOGgNM zvF1np<7_9QWAm6BH27RrH8i?WD-5o+_Pz15cZUz>@sPs|+C`R-`wDF$E;IsOxtKo< ze-gkI+NJa_``DG`TSRZ@TRH#%-0V+ianRF4afJM9lq51w|xKn zcl`OE#K>&a$p3z@G!1zi(;xfg@6Pj>5_%dnR)sipC#vVC%l0$Zr||6NyLo$k`|J;l zm*Y2Xk~%{yZSnv05B%u*`~Ofp%#yQp!lsna9@p(A<(vQ>Z0lKTUF$=w|GWS4{{obj zU7xiV%Q$MWUsz@mc~&G;vKPBt{GBPEIPl)`?q7OV9}v+%YB;dM7H6SkrMbj6Q$X-2 zs8dA=FT5;(QY|R94P&Pdq=J%{qi8dx><(Yk z#E1naLM>^&Zk_f|{Jr0xZb8BHBVD8ifrzMu4HGUyj$_2{JZ3sTNkaQpVXKre25q{t zA((3Qg{X?c1$^>#>yv3)4Y2C1?Da8xFyulECXy|xHRkz{gc23f2LeL7fBW?M{(*`q z0xUo+7AP5zBS=&=4>^Y>Q0^I+cE`qZfY1&1%I@MKjKY+97)UuJW(5AAMawaxob+H^ z3}}eNNh~7!J+G~zkQ!5(voaufu-b(h4URnA4=FPGFr@7#4NnhO((D6GZ&wAHD{d&{ zH9)X;ItS1_p;qV9byKzOz;yGRv>uYRYN@Z^KD6y>fJ%#zvBT;&ihW| zL85DbI6ZYAlzO<<3eb?n2>*fifhO@(Hs7jp+oVqJ8f2J7!T`v=C|1jE$lN&84)uq! zo@tQ^E#JN}b83faVC?lrEaCOzhB1@wO?ET)8PV5I*WND$ZLIZ{SKpaA+HpuNa8yiI z!#=rr)lc|47B+w^od zzg;z-=1Xk#hmZe{AH7a}ujwH2YHf#!^C{t%zx(lVPQUP-udRi){$NR>D7rmNS!C`7 zzdn1oeEZGoX-a^xjW(!1dGG6g`Imp6us%mk|H=1%tVO4kt;6?ve*3gMK3%uvZ~wpk zEkJK##U}L8q7cnF1_W}b*M;pqt!sZF~2iH`_3QZ_E zfgV9H0Ge6M%ne0+jxp^7WuesAPH$ZI`H!$0{EGD8J$QK;WFM?uIfCQ}H~-QZN30(Z zHiN#)DCv!{Bd#1z%g=8POGhwl8slLe$0W6dPhOq3+Hb}4<9K`G@EKeWuuSGb3}6l& zppH`*bH?m|Bfo6$?A-W%uv6Iiui=9&q@j=X;-cHA#AS)a?3~!4KS z18iSDT-K_mn|U1a?VNY<+sJ4;WJgGsbu|RloPa8Iw0VX9WWUQ@K?Xo=$I30T0#TdW0 zuw9!MfjXzu2SH0E6cj@}Oaty|d3?C`fU520IAtOw!3iewp*x>YtmnFHjG9AEL0A^k zkKJC~Z|0rSeTK?c5_cuLmhLg@FLLnCX-Gs`QG);)>v7oCtijDjG*6;?HpbWSM?I9Y zCx{dMANAgIa+JpG|C)BQ)wKj^4%AI!LP>zuSKwfc`2uu|)AdH{+7FmdwsjgiB7Yik zs2!;|90rJaD#ZKxmOS2e9_!ZXa7@nP0kYYaR%R(xuc}|%Z^yeFQn(eF53+6T?oa$9 z*Kd8iK3@Lp|L5>8e5J3*!NHW%x|9l!++rmi0bR@&HVQ1+}c5s98;Avp~LDTgU8Rt2G|j~t_P4(RX>h}1b+2{JYx8Nm?2 zaH*<5%WGh^*Z-N5JhUd)6nr9br;TjD$ObIVO#{4tNeKu+hSrqBaU^2rKk=JiaNqH4 z*{qk(*R6`AafqM3iOn^~J$#Z>zo}Mp2x^2NDWybtB&pGkDP|DAkuSHqBjji(h}GCm z4TejqMU6NwVkcGGQ;x`UZ5-&pP{t_Nq8%4YS;O|~-t#E;)5E4$d^UyCl4MW6Js@L* zTf0Ob87M>(vP4&>^U{4E5d<8e1eL+H-^X3KO*z2%5K)Dk7bTML$*T)Na{p)^f&i!2 zVn}jZ9)^KU=sgqE+Dfa;Z-OgUpo6=>rbUZ6>`X{9p4D8f^nw&UX<#o(u% zdg5=K`5vT;PIFeA&y(j9S>e?uU9yBkJt&^#tWS9lVjEJTD18UYfbck;O>&KLez?CI zXXjGN)*WB(kVdyEtbs^RH^dV4lSMUFW0SRk<;80-0N0}YibLI1$3LkMdD9BSx!TEb~7Ju z)7wvVHog9z|3CMC==XyOD%;ivJWZ`v>027ciJVX7e8bSsfOU(@ICcWtvNpOXZCyG) z#dh6FA8MNqBB5xlwX#3-_Wt$%<&Bo@<-hsc&;R>BeBfL`A5T3mNW$gm{8ZtC2f#DN zE@*KHQGWXCrx?PY{fB@2b017H2vk+yw9wb%@adaB^!eZR55N3q{8N9SmMuT~_*V7t zdbJvst@gU@dbwT#NgqQ+kM?-U{^o0&nASCIhm@_br3fF!QN+{f!u{?Prx83E)f+ATvj8d#U zw2FyZn?yAD8V^{O5EE&{068Ja6sPz`2%B*pz&7piaYzx`nr6^a%!s{+hs?xH-=YoC z3MLXF5NaWiyKgWH6kNsEO`$0p4dgb#bwr6_AEQr6nCh$hij&M!em5M!Pj0o6lujdd zhRwP*7ByE}dC5;?u11g4_AYt?9M}Gklm|eJ{X30=(m9{g-vOr&RhD`~hAzP(nn1H* zcNekS`zIuLpvs#7SRv5(geu^|os#6VT+{$HBcTSL}R9o@?~w|Z~2GcXzdu?xzU<+OQE za4@{K=|*ZWgplgRBsH1b{yYab8^d5m$6y@={(0J2^u?j&?_UFDpLe!`*AQ99zqQ4ffV8$ke#;i3g1g&tyd zw5gXDfYx`?K?@Hx41L8R%dFv)(qWia(*-ZfAzqu2DU+iQ=5PqWn4pDD{hTan)VlL` zEV!b>rY6SA?2#-7&;9psw(DK+SWu_%IdZul0|cG;j_-8LSXX26hUhN25ezi;uDJaw zaK0l!*v^yOnM~gCWHTl>MU&q&@GIHQhGRO&FXQ|bzfyCpPKn&b*dn_$W$-HjJ3Qlh ze3-RGCo(x6>>X+Mx#g9hVj!JJ#Qhxi;bOM`Jp%DuKV4F1sr1$Gfo^gHK*2umiozf5_xBB#i1lP5jH%pF+l@y&{Gm^?Xvd%Y_=w)%P8hyh!(EvDiThI zp`%#6b)eNGSZDQ?K)y$$>*pjsfJ-mTJB${%B4ZNVg0}j; zVCPKe@0z(|L`<61xWFOdvc!DVJf|tzvn094BB0IaQ>)u&23_>t#}q=+o?l3omU@N# z_S*T2=W`eTxG&+M>X!P^GL0i>>;v1aZ`Vt$Eu~O5ZC-_HvTUJgFG064ANt%|oFVt=J5l9G0ECXw8#>YwugcA<7&Fk}Olon;I5r@IhZD zW`OzGO}aK601$D<<|w3W40s$I8ce;S3*r(_p126}_PtEjNb&HPLcCXBrh{SN!ERcT>&?9TIK?s*pAyPjP833%OcNCvFJn%o{TZIqQ3 zGQoo;_L3Wt=i`7c1|vD*^o)L<4*SCkf|~lxZc#zFJiu36fX0wdLiCVg1+`|Bfx7U1 z*ZiAt(c9g8DyoX7m___p^;W;7B$$b!U}3bV^Dyi!P-|X33e6UZ+9~xgVM>N%Yfj+6 z-2eoVJJ=E{WK<+&Hog-D9w3~s^PqbX*Wd}tG$$gq^K#YfG!D4BzJ%7bAS0^@HHlEbgwZ>XB=PapdML{zNz}M1;F42hY&Bgh& zZC6P)rQuILmLar1a*TifWjl_!RQWT1<%i?gBkee3C@y3Mwe46_jNkvs!==`L@_WZ` z{`8AH$@b-A7nOeh_WbIszx7JZwxU}|pWiRF+SBDJgz@g?bQs%p+l$(eOJHuv)0XCL z)&;?^gSK}GXE0-?wsVvKVL+b0D@xTIBqO>4?CZxeNDNiH43Md}*ju_i`bDn1h76BIV29{@~PF7xrNr@@d`fpJ>);A3QtmzysUNVVVY# z{La@!8@*Eq^!MwUr;%d<=VfCuH;;n_2xD!Kp(NLEH)PHdnU!DH!is&&O!GW6v8*3* z4>#*tA1*7vo%Z~864_xG&rLDYAHo9GDm}Ev>;?$aI54ZdZl(Vd)K=z{t%Y%jr!g}D zm*`xbX-MRPU6(>z`Dsi{+89_{Xf(fM7W&ES3!-QE;MpvcD+afhSo@R{ao>l|os|eM zorX`qnwyyvE$do1elQIurYR3kg%hni-M)p7~B}vOvcK^q?=-vQ)1wZcd{c;M0!$bUyRBVYd;@+i*G4y4_pSgBb zkQJOXR#Tox4H-YQX-lr%_^!h2y6~l^6r&9N{m~~}t3hhf-uAvENZhfF(3+VhnSzvR zLkAD!yt!@Mjly^q!|Jm#u^_!=3iG3_ ze)l+ptzQk0wl+Z!n*avKR((#u=~GRF|DEEl#l&vN5Sn9o(K*J%!Ba}44^AkgE*jSL zig*aPz=GDk*HR2OLmK8er&u&x*BZ#_(9tmSQEP2M*Zw3on8wt$wlQ~&;nQ(Qa(ukh zKm_$PU)QUmX8MO7^`}ZuNtbO+B0v1>-hjqo%!nNLhUvGQVuuHR&$eB^@$BjCa=005 zX-RB(?4McG9!lM+t~n}!sVG|w-Hv8T^N<%TZ{8EZ4kR~BaXS*>6u?d3oP`p?VK0!Q zqoV?_MzUX#Sf+k_@{&##eG2&y7(J*LEw&+(y1r}6A*%<5LXN{YCz(|+QQPT zASm}B9z(K_SQ3zP7~+`vWJZaq8p`gr9i?fr8**Jj+t9?$&`V}^^2j6|0YYQ%Tudo) zR+fE;tZI}Q(p`{D-KZDYF*8P?c~(o690=1!>pq&ARCX~`+3LgfH%?YU)mZw!)yA%= z;%6ee3rLJmO!)+W?K+vpy$WW4lO0(T83xbXkcQYkv>U4!^=_4kjhMQm4({2`Gz33A z^7YO7&vLBXL9Eu-N3tDqvOv8G^g){g=RV%r>x{i0qrAz@g2u|59ix)@QX1+&vIX$A ziA$`9S2EF5jeT?ImqSsSb&WQlj6q2~t|;;;v!RqfV&xRPQBS5DrManN*0hoT)c;p` zQYe9=B&>J6snA;EZ6f`tv z@1@40%(?W@VA?2QA5p}9?4huPXzYp+jH8OU6boAof8uHVycn!b+LRJ=ru0tv$X(g@ zQ@w@rvcju!XkuIp|G?YruRPU%!f6VioIY-_RsdFeXz?(|2|lhFqOMRSe z!by<31VQ|I1$B5Bx{`tUfNS-s^k&#eTTD6kyYqPIf;P*tS!@S5$DfxzR47rVX_ClE z3A@(K8N1LE4KW_%CYWKI%C5^rI?$Y_acse^>)KfxWB*du%Tw#{^x^wUmO-}^-`3^X z-LaX9#MG(w9H5EfC~x}JYdMDS`0Db5hc(A|b0p08RuyorhD)!X^!Z@tTEG6$dvE%n zi>_`FLGNuAS?rW#Xb^Xigy`sSkrR0wpP&M zIwTnyHmZ1AO+hs0Et}Iy4K+8`_IKxU0*`?I#eWW}I4TO!Bu)GiK*&;IssAecyK6gVOj5+g@7R8H8S4 zTN47wtubtI?%38R)$1!ll zoYNy!+(n&vOzo}H4!;t|)u-_gzPN0KY7`H|*-ObH*&c z7`IP&!roMNx-*F@Nnn6FN)+^Lxno4Q=o>zcQiDFA+zeU;{nT`>ZPhqG>z}(l0Uw;g zi|OXNR^&&PQlj(g-Az|lcv`m3UAFq-+0CZ1^#1#I!|}3I zHDz(4wZ47&GKMsbr*&PH?LrLlx;<4`QLOX$@`F31n<5g;qHFzxWH7Hu(84Yf45YC% z2BpOu@{s=BC!VZ6D!`Pt*qLL9n1WZ%D(eMyZ2Q^~#H*=yZpv{tOX0}k`M(1ERU z3k6QzGbRBAkr#smrnqJVT^o`3*49zDC_B=C*R#UrTt5%}5e+P6&MeUjP)sqY{adks z<6dK2w~Uq9eHX0fsl9+eRwa%s@Cf614`W0DiAZ&T8Xa>RfQrpmyql494QjIhOAKS- zn1ADkZ+aF0w3N7d7E~)Kee&7c=n}k5*pGx`PHliSFxyX9mO!_MPpXwk>bt3VN7KcnY~FcAs#%-o7)k&c|=(iRkiloX;mZLKOX{pi!Trzs)ghjXbe?_-Tq zAtP@k?+qf`RXtP;iE8?iItJZ_6rPQ{DL>Jurf*ixSflcADTsXl*IOXo@MaXFWX%SG zV@~nMU$S{Yl$~*c-FuJr9=6*%^&@55hBI@(`Kag=1fd$oBogpyR#BgI^sImDL{TF% z4)M|Tq7TibcJXi+a)^D9OS@Zg3TzzvAoso&A;QgpJU=ViR@hPQ8{6+c#L3f$8^|AX zaS3r>3;xdaN%jfq2s}a~h+^<$230OPw~PmJWTN7l^)UXZV1_5AOXMH{4O-!$wn@k# z4%VuB zhd4;<^wYVIoNu+KhR3l_pI>Y3n~S?43xE;$-GyznmYNPd!urXMS{;;Yqho$Y5k9y( zT#KQ-(kmD!`*!$r$Q|roO3i7Qr}5@^I4_SmPc7K%xA%wncF&YdwbrUbo>jHf%a~7N zK5X?WDLp^EZ`Qti`|9oaJk7%g&pOw0sYbF@?_irIlC!maS@ml-*#imk{-3>sN8l&(#!MB(IlyVZ8^_sa7vd7X!@qek|UtA*YCDsXtShqEA)lwd^;rmECjKeTIKVPrSeH5&e&CIrXRkhRy ziH2#MIS;2TWGF#wwGPAZ;d>vxe)H<#{`~Ol`26m+Z>O(}A>cuaLtdK}OI5>WZU#~| z925Pf+lEt0Ga_>ntzosAr9)z$zPXQ1XzV$DF<3l0)6mHObB0`M0-7%MU`2ZFpLbeT zfx%fu&R&sraZ*e|zrbVbz?!lt=%NyA#rbB+Sc}Z|Qtz`3E6PSMNg~XLdZv%Q0=Ab$ zCBrbH_?sjvq}Q1r*Jjj=OlFLZDfCB3gY?^+w$NyZq^(L!r88P>K)_t9jyaNNktN

    kDMRk1^Kg`bREI2caD9k4A@MrOnK)V8ZmH$x3V>Bk?}$YMFD&EoC{tXQPB0 zZdQFSHwX$ucbFh%?vOA1C9$@asx9sXMAmJT1cPW7z)h8!OO{%q`iQwO`uYX;foSb& z?KW8|ZRPJ&?>ha+fxXOUvNfu^ZhZ0$?#xHy&v@P75LS93U}^eIu-h@Qhp9<`Y08s2Jm++;JQ~W(1x(F zlJ9z98CQ}@{Q!#|`PZ};^>U&KE^&4`7nxnUqV>3_4D)j*Gu*KO!fQKl&fl>ae~Ef* z8j7h+iu0F}6@=+-6w&1{uqpnNI61dY6}n((j9eBhnJ98|*4+}$d8}US{ zICx%P50^DZq!6RFbSJ+WPU zy;EyxqNFilEfpC~E_|pZ*jPV)C7fP*XHxZ1c)5`@2&p?Vwd+!~?}$qxgcnQ&1e0fA zJqB!y9;b-A0`##0BgM?k01$cMO836iOhWEu?7y%n+amjAZ-K0nes33daks0HdxXXA zPR3uP*jz+Ag9v?GV2K9@t&U5cU^9&GI| z>GBmrjzb+gOtp@g4;*X4p)0dNJ^V5*(P{~D0SeEB7UAaRP)nQOBUP#c@2Ti#CpX$X z3jn7l#m0$=pap&Hor=J4R_ zhzZw8^V)#6G*xvvTz0ZM8m_0UM)@M?JBw>2<;+7|(IR4s+MyQIkD~ve`!d);WbBF>ElNM1gNEx~bL8^Q=0(4{2bg34F4I`Oua>^s}tA z%vRIxFbTt$Wm-BHnZbs`@3Q- zVkPdMiU6sC86jmqjDP% zJer`>x6F+ek-8y)Y&G$vlFXipxlM&rmUar{+f=8OZ6;;&d}DT&c$|?PAQL#(9>s3> zfjNoklk$RgsGBWiQN7rg+>|f^O z<->xzypo`lb*yTtlJ-o2wf=`s zOabIoEbX(oc!rZf-DsL?VRHU%BEe4wN&_{eZhfloa(?M`(Z+F(l`>OryE#TTfsJ=+ zpEpc=-!?wS>lGVWL6>|lFgm{-l7K|ZB(0ZqCb4<|Pdn-dr=N=o>SRgZ?Z!CNYjdG1 z`TG5HP5C%K{VmZKm+BYe4Ei#Y7xGb%4_Z|x3x{I(eq|fghg$iD=KNBkC`$!W6zJEx z5I9Zy=M7N5NW)&vGH)7YUJHYSm)BsI`g=a*kUiFuL;SXV3n3B=- z!b1fol+JAd3kA@!Xr)zuf&2wD^`dQ08s_*K%=A5&o@lwJS$()3LGYt+-pL+NXti2# z+q&ih(OoQWPc3}Qk>8wn3o2|`T*W7l1z#L3{)N(V3J@4Ak|=<^A#;(Po>r|XdhEwF z`~Uj4-%N$$C7lr$yoVfTD+=+V%EKEX(TXX#C)-Kx&@LuBGS+1~;yj-|FSX+U4v)L$ihvRAW5u-#ldyQ~frsAr` zIe|TaZ!1;)hu4&vV}_b-Y$mwZ&De#NJ=o2Dox*kZtEK|oxq$4fM|`a|`q9{llr`eY;Y;3zuT z$#X|QLj!H!6QTWm)mKIOB*U2s?tUxjxY^R(CjKKhu`;Qiz2)3RccHa1(fkw=K8I8P zdF%mn4h&TpHa!9fjJa{@Am+~l%+-@6Q&S!VxY31f!@UxOjYbF7ww82xH<8L#)$9kc zgEgk;^&KzV<%rr9P#FQbqN9{$-4Sd;h$A%Fi>IrQ<=b)>QRBXH>eChYkVTE8V~nC= zK`R3sWvB9FX(clsC-3YPbiimcy>b<|xA$&VO-&m?2#t7n{w{0&Q}*{QL-qCA{*K{)e60AGJ$W>8Flde2yKlXD%E zta$AJ!0Q%kd7}J%COu>T#|n^=8TcSuGWQwhA&R z7Yp190{rw2V;alz{=(<^=mksuGov2*tFKCgJp@n9P<7ELYwIH01sz8~Ur|vLxoL1n zho3h-Mq3d`)GS7bU~CBR3^QyG0TvSscNS7cv;3l;Phj&V;4KhK+ezvwA7dO}sd(+& zA!XHI?qQR5H352IjlRdan$X3DOTtp#FZkiCZdB^ASm7$H? z!xQQ{F`Ii@!Q_Ac#;Nq}rWY17qnJ^H1ySjC33?$hkZmASALpvtSdl##s}I`O3z0i6 zZdi7e%NV}X={EE+M%j|uA3*|Q6d-9~NuzZR$H^y9y8|zWRG(*f%gMHN zq+}4jz)0st8~5=$YRI1Kh~jD5lQRQ%L^^yn2~}?V>Uz~|Qs5QWgENr}Wtii8%#GGT zwL7uo01#rWJ%o7{pQb2w?qqP^Xq>C95-lc5qDVeR^|P^X-7gK$+SY)E zJ4*~N@LL)TJF#9wdTgl!vVvPS$I>i_pC$X{!G^v|*18KWQR*I-x|bBI&61}eFokU{%I_dnVpwyAaBcJwVgFN-|o6*+>4`B%9 z=%6P->=gMPkNi3jv5yE?K@?h$&R*625_7mqkEkHtabGly# z7w~35rFYAfvnVhRLfGHXo@&-vQMRpRm9pDOgeWk-0>mBFHApYM)KSB3w<1$|;U$ zksja4*ywNMi#_amf-K1i8Mqf8n@MLLaFeO?)@bRTB=zMA1+fme+H4&HnE?&`1<}Rn zC-V7uI69gwoKeabZh7LT82tsI^WnOcQ#U>kXHk%DJygbRwSWt%45vFd@e+TF&ci}tAGXmk# zhIl0mY5&?H9ns(qbQ<2Vk80W4VCyB5{0(#B^#;m1vHF0}+d{l%lvAx6eE|LS$}mIi zFo`F`spixC%!o(H23Nfj?8*9|sxLd;frntiS1FoRsPO20ftwnVuYu<-ZM zqgK-CF7L@F;Z`Y|e+i5SoUxf-WZsW>qYSdICcsVQ=-~Pea zyxt{O;A5Pw(Z$?{?xi>(E$3L4>oWCs6Z{k*%TN{gck^(&D3UPc?yDt9Kgm=4L`8mI zRci_I=%V3~nK{#aGM6y-O=9UcKER#j>K8%OaFd8WfV8cl`aup=X6n&>T&izOn?=i*98sk_bQBc4W%;W4G;LgBie>O_PnLrxfmq;De%iZi%aY!A{__xX0E- z<7%X-6GVSbVh~t*GT|HDgmW5T34CHwJiaSkrdo%U6+v`w$+n+F_HREKQ}t}_W!0Qk zcCvGXtmrexrU7aGW;UBWN0^WGgiX^bx-WHuKSza{oF(azKW2jfz*A)#SoxLxs&6fv z{#sAN)PM!Cqd`f{=A@)K9nBWO0NZ;EXDkhNb%R*a`MILqxYS5VxN2s+QicAteFEHc zhZ+p&0m%mF18_kevelsFg-*wzvsh&}e#JGC z!`(Wk+Q}weV`e%>BB9*(>sWfgfi1Q$J_0u$m3)7u)=*wxs>jTB&Dl7st}h*Xo!I`j zB8uJh8)$fID{*om{WRyvS_jEZgNrrJQ9Nh5jpV$3xO;F>$_q6 z2P1nmA9l^u>{qgH{IKjH$&2m{aTaY-?24D2w~o6XAiCiD6$K8{wJyMhO8g*I-LzOM znSf`qM1Oe;CkV?vqeDgio}!Yr3yT9pmzfH$MdG1|JPKuTM|<#)-m!jkm_b_%st>bD zG~ta73rso;15m_?rll*Xrdi&)JlbVO97f&a;BZ&RC%xGqc|&;qh4Vx!g%~l4eup71 zm!V{tX@K+@stF<-zK9G%_Y{x3T!D)Jo%}n=W(JyVSDC`2#RK#e3l!rvQ-^A4^|i{! zMd$%iEFs(1wdoi1*?uxe=b!vZr6R9>@Ls;o4v(>ONzpo?U}Gmdn_+ z3^Zi&GfWzCpI@+iip6IS-3^HGkLvS10byvADyf7IFO&M4xNi#NlhjXrxwjPi!fNQS z#||T#jNS)U1{d7IdBXQH2`fP4O-Vzxv$%sWvaSN{W^4@YP018<)uDb=`9FKFS;l@O$b^k>TEDM&CCS@1&8cU*#4TIUiRZF03uj71C!5waY;@J3J_ z37w(*FVs!G54BaIqFm#J?cxOD9%uFYH1rNfyvH6SI+nGX`1or3*vpY)jHC;#(BQfN z(V-Z1+#`KRD;3EK3(6AywB)^m54h`3TEIES4`F&zJG@*?E;32A(2FG=h-@eHCB>U= zSXQ&}qdx(MPx74h_#DpGpv@cVzAMn3Mg62>w5*$o$#aEC@TEq>(=6zbdyNk?g0Jhc z9Y~X0rJeO1?hIz@OUCm??m>=A;Ddsfh8_D0Oj!GUa?zk0vQm44uzV-sK1=`Tq4K{q zQUm5$cmrv{N2JcPq4Ca;OUDcIPe$Ake?{neZ6NkpfJJ|zD($)G_E&2(dA0_{FGM!; zYi9AFkgudtUWu!SxJqBtULfBwVv#F+$mmN>)rOI-ZHFJn;W*j2slFBZ^;@Egef4~- z!@uY#^~q(huI~*ntxd^C!n%~XPtZ@lhIzk47r)e)yFFGZ9oJ}o ziwX{Ag{$bcql{fOX3On{`*3uhU_qbNEdWz&>(?&%N<6xed(0c;2eJLB$zzSs;0Av^ zc34o$$7~@;iv&&Uwe$9>X?0uReN5rM^jr?x)$NP24YD28A8oNn+|Xvk&ZTny1BALd z6moZv%;~21JybGCiV$+xI+8`U{2p#f6xy~aI?A2soh|yVB!rhs-AS%Ne{zWd`qnW9 zWgP)9TP~kcF$dC&bfnupixH1#xgLc`eJ*M}G!@#(D;C-4D^az{Qbb!1}Sw@=iV4$`$xTAfR zoz6+N&^qwtSV@s>;QfgJ(VWRV8r!(lS3fI5g9OsNeiI%`mbhD-sTGajmn>I%(M`!D z!NfRzSxt;-7ul*R29?4m(>s<%BWFlGf(|dbqzyM{#ck)Cc4*(n2%W7=3X<%6SdEJK z8gH4Vq*aRcGk}+c>(2o6tdKE{F13n^h&RBZn3t(+TjFM_t|Bw zTkkGA60!0#TN);DQ*K`!wRtg7sr5FnT&1Ww4V|8JU(~qX%2eALa?r-Rx=?INb|H+15TM z{Dt#lz#c&1JB4`I7tNt=^b7hc;t^~VX-Am{i299Kumm3`KQF*<2K8%O@8Yt4)u||x z#1VKrqke+e*@mk)skB+B8Ny6M!hCu}p8)3ZylCq#W)`PbmR^`ZtTH@b#l0z%$2T-j zkvPKH8@wAJNuoMVtxw-?9w(lfGn59$ANdWl?}h%Iqr(eyCrRE3XP8uXz4c1m6pG=r zhPm&BSu{Oj*Fxhw4ngjEkh!nNaID9S&TyzrDL(jG8^Ypq4W#oNR8R3E?i5LH!CqljWe{!h(RJsf$wMcY2@An_{QjNwouW;X59LxO2%W%rAFz+BV6l=#^(9rTt&z{Z6KVWgq~$LG+1QZ zQvEiy^fnqsIrCDwKG=k_klp&mka`eqoIj2^?$izUBm8n^m>zoeXyiSouith^0>f@e zil6aS>!ZZa?I+zOhs?H*uP_|Cpei|~oWO82!;HuOtRdLPfUkUpLs!`9!ouK=M1s+< zLpuQz1L`i`!<~M$RY{v{5(%`{a?z+zog}@2N#AZb6&v|n&b?^(aS{F&Nm#++;=Sv? z7x%7_CjhG*FEpT68f_}HuB}nJN6L>_v>TL7wECm!%Zpho^md5sl6!!?<6^j;rC53h zjUXP?u+XAOU`rOkr?zU$a`KRYTQDKQl47$&eEjdG)hX!f)#|vvNneCMlTF3TOhH!S zPlD3$p#huPSbX$-0VW^49h^wLr8stsQ^0FUHn>Jmhk8gsYYYa+!e}<(X!phX>o2)y zF|tV|GyYM&-5v34znKZDnc&BfT7)oycbbeiRs<>T{%lCw!ZIx0P8CD(p3v6JE+=Zt zQ6I!K!Z@Bte2^tvW7Q=a{ygr{xaWjfyA71^v2?dY8PrPGWVZEDv>brD3^{%gA0pLt z6(Uy`%i9{=Gm9m|ev|m_nbnlvohuVXMMS?U(X`pcfjH4}Op0@koRQ{GFNKyR#Ka8M z!-r3qqC-6&8qSDh?dgD>Rp(R8N&cX(Ccr6m0Cn?;;`kiC zdW8Asu%LGy2Jz(*k3o%$4jEzL7c+5L8@05#f|;ij)N^qT*lY`9+O*BaZTa$C|A^l$ zjz+V!t~naC3!37maI1d^uCKvg{Zyg%bk=T$WQ+To5Yss21YXr^-I2tNuJO=UF{TFP zc5+*cY%^~kvvh&{~!@8QM50icy;B@xH4M2m42)y9z}=IcY(G z#{#%l$sMbq2jKz2M8e-Em`)~b^=*r5;HT8%FHfee-#Zqa@EN-hVE;NdAj>rxi7yC7 z5NZu=B=(%51KpO>rM6OU(2W%&0UbmsLtRbKUukF({xDc423G$r753pBCO&dfimj~{ zAa_CnL)CK+1)F}ATFK1hdNy%KYLe_0UQ>AJt@(fCSYd;8riYjlWXAk=uYttAYTom>wB*i=VVzz4HL2pz3kl5q z`NMGfAjahdngg$u`3s4OY(rq~A$DwwFgoAxJwWlu-7TM6mW9xU{ZhwR>ZMyiO6ZlYBgtZP+;a(RY9zVxlsdd?Y3%kzCGGW6*V6;lxjd^U`!^x^zPA zxH1ME!!G|1>wkh7uE$g`Q*eii&{(I{?ruB%_zmwv;>nB;fl9uUbrVN=c)a8!R>sD) z#8c5q$Jh@*=)nOX75-1oQ2q*nxE?r>S!f219}1udc}5EwSOl%ygx(;`l_Mt+?bsda zM(-eJ<@*BhBq$Y=`_{2?nvhJp!QaWO?9pd@6u>o~2-i6F?I{YvWD{9CYYj3+o8ron zD)ur%v|l-K6~ZsU)mX*BSFI)j&$CnCMf?TOSmeHuSeGTyiZl*4z`~TxsEjLT@9lB0 zilu57A2NI!6cCKZ=OK7)g|zSU5;@Fi->!Q6hxRMxFJK^=e_M2$kSo++_6>nZ49mE7 zsGEn>(%1vUw=>1@ir*Zg`<_qPZzli>X$^W(QNNV@G)I zam>@r=xjF1o*te1C-y}7eQepBsBi$C4X&{X-1TD*=7~RU(+m;3c4#xDgVk4c3S@GR z6{tU^OfatEF@5J(0W$uS$6w8wp{CEAxTk)?{)nL&0rETlFB|L>S|}PC@Pm8TTF0Lu zq!*-tucR;}=%=BbVO>2y*o*F-TAf>hn-oN?+KK6k8>VEm3xAtVh&HM`3GztmzV+}UeL^bp$B0CQ)K0ttimdp zVSnKguG5kv3@4Wxn1$W7fm>%hPC2EzKK5nYVfFPvu&v9_DEcUoqmPGNcMP60uF z`!2PNHME?McF}Wu1Nv;1PL{7um8xttmS%+o2{3Blc$X%^;7--4+h)sOMdzSB=NeSq zFG0eOkn|n;4wO?hCQ;|lS6EGT4aDf%os4M`4|-QJ@KGi?sYCW9#`vJ!B1xvufos-Y z{F6)J%^noUy2junCLpB5K8&#Q5*_M-(nooJOaSnLjS&o`gg``3`fZs!7&EWL%zd|; zS((q`om%S;zbZROPHOiPIKiP@>~HUyG^J*f=MJ}$D!-_h0MzB!Ug!3|B|UGL%Ud# ze9R~(=c%3SRgh;Vs2WtYepfZXf%Cr-+g*|s1IMJ$b-c}8bVm+g#_)}Q=-mI%ex`>t zQqFc&9XzCH_*GkOJXWs0>v;-r$ec60LVAY-)Tm+u_DCv?0q1m}SKErFHI6p6#?!qhpX{%BBfTb`nYE{TI) zZkh$Pb&5U28>K4>7NnZrjRLmUAV;X9G zP3aye`)1cy7XeIWZwPd9D_9J6duPs6vB~Gryoo?mXb{91Dg}UMWg&|^O7~4sFV=mbo&*Gi#<oDT0mw=g(yEh2h_n^aZsVq5sUlM_Lb+y5?}2i+ z;Z8B-&cwub4Wx>z@K5Kw2kwZOF|e*?o%XeLeXGi6f2t}KTk}Oon`uhQmruicw3*S= z;o6u2mhkBjMJNgVjv2~IlfJh~ z&2+7M4ifmF)Kg<93PnJQidZuUSnFPh_$gpTsyxVibG91ps7EL zF5R1mh$~ixbol7D9UxmxM!wL%qIg@hS%1+JsRT+cVd_o1?JN`!#{a6|s?(76A|>X@ z#^kg@ogpsb3(2!heV7?>Bp7j>#xiUPP<`wKwIGs8f-M#mrHQW+y$(x%Y=&>VVk0QJ>Ui5-PnzD;+cpX^($HYfLU}l9DPcjk_I73)geam#s{=!Pk z<9}3-H)t<>6Fh#2$RT1lES}j?V6=K-Hsw+7*-}k2IMs^@FVxMX{mKJ_=-?bJ7SB3u zc^27iSxT!AjxgvfNkWSHSba0}?yGVDyK2uJP0g>o^plEaTeS10c+gGqigVzfd@NNq(jTKZ*9y@_K?Co8P+h0x4@~?TAA)~<;-#MKV$2MJn>Oj| zn(=j{z`NKN;dhO=w&&Ul#TDI-eGVddAoRr}@I(Y*y(k}^D{OX=1h-0Ra0%MtH?(gN299HZ~A_)VIzFo!V( zyqzvN1@58tp|H1Xv&GRuZdr8scHtYfm7lC);K3?H9mb_W;vT{tPd|~xbjfC%yUlQ| zSCj%1qqJBNEn80d5s>1hblxVjsQ(qaUZEJHze|}Yi8Ezq(C2$1snL z+=bX{q=nyp)fa{Ko(quwOZ;T%dSfC*QSBvG1Gu>Ao~V(O!Znp?T9H%>Gm94tuE#b~ zM!f13c&Ptdbuh>=FiZGqqxLcUE(Oc@oLoph%mS%4!n~j@# zo+Ul5nyxb7%>|`5rB~D|PHT`(vdo>-c?C!23>iE%$gE(5fOC5&j85!M1qp>;G33bT z$+AdHS1x>fA9Y#|_aauCN6BL8+dW{{4i0!(Ea_5NL=4?Fn7LWlkE?Je)1`Nywsw)1 z3G`N4c9i;uQYb+?BBD9TTMuKpbZ`--W1&W}ksxy!Wz6+89kuxHC-%Qb@Gn~cdcLG> zMgSlw9ep$rImzXjSW%}otA9($-IfA+mj6*+AQ=a>CfHVwMB8TCFjrHJOOd586^*9l zt|HaR71hfLxs%3-Q*yy}WN{brm43ng@!vlgZTn-;da3IEe$0=wfXL=Vden9z;R8_r25{{pKtw1r87obnS ztiNF9y>@e~KS=+DY8HLhJH(pyZk7a-T`E!v53HAl*Zd7leK`>sQX&ngU~zx`m7K=+ zbZPu+plRrTj^Zg>C$3=0NGI&p$>OC1C`KE<}8z=gv;aE|D+0b|u-MeLS zR3~;LY~)IayD>Kolj>BY$DX+93d39b@t=%ej+ndEUMQXKnxa+0iPDI4lPKDsug|6r z=LbuyaIZJXV^b6&fl`WUd zAXQ&kZOANTnxel6#HTQa?sC1s=5C}NFIAs%HlAV07gsR%?cuhR zgZSrqa1jWz00G<@3HrE;u@S%672Tcgo}1SiAWu7K2JS;M`vCFIa?o#Ykx|-#XwhHCEZ@#lI5pzV?Jt*(i)D8~Ys3>Ikg?&0pS~UI+8b_1 z7}DwiYymp%Uo!d|rr%kfkEy&z@;;^ANWK3W9adDfk){9)>8~9JLrj$vAIu7WA`o3( z!#j!5vLxKwg|g@Hl8@LGZB(uGGm-aBgm|-@Yda(8PV)RLk^4iz&>4}qSN|C!^9D+U zUqp)oSW5K8xVzS?p_UEWT+C_p;Px@b)L`LfbT{7GHR!yMaF6#qI9~CG8?YyNV?`C% z$NiY~$5dVJBaHS5+@&H#GG#NdPLYf|6)f2S%IP)}puk1yr2y+D*+iJP4&@W#b}6Hy zxt+LyEfR_H8SBLbnX=ZU4iZ`)LsskwcOrfy7>i(f~Q4^{s5pa*mSrjI5UE9_zk&S?Omn?zEOh9l zek0{TVc9N#ifq-oQF?Vcp+!PgRvcln{1WWOW*a~I_ zVEkNJpsQG zrfY*>!cU*}3zz)AHR{)pO)@BA!OYaC{>;c8=<-sO(PSn2M-kX3EF%~vr^s$Mkg7y~ zoQ^R)`C1^4@{8yf^i8>rG*Dxi>TM}#MGQfV0Y1iIKVd^5rqWJ`$JKy5UJ?;%F6GWh zsk2x;Wq6wFJ7AhqZz5gg$LVL9?~DP)~)~n!ZyVSS*#At(>M;}(9qwtPa<|nqf4DYp|awYZQgn!01-JiK)Y5L6~uafEInOzNl)5BuUq_+V|81H zbx8>aS?Ii-LA7pa&=rDyZSwpZLf#$HR9BX^o6zzDy#wMJm8v>A5L*~S^Y$|@P~l8m z9TWcnXrXslHAYoyOOekbBs=tGbhMNSzUigQwXF>F{mqz*>DGp|oW054ORf8O_1Wos8~q zMsK2-X-$4N=!SqWL2nv^o`Xq1tECLj3}pW3>2D}xKhO~ z!4-+qqAB6rrLR?QDC?A4*1oR8<4QhX?UN z)(zDE(rGs7sz5toaPQMq#v3kqogD>HBc%VM=uG^QO4~4e4u@R?cfkz^b6-#?Elohn zsLU8EGsg;dT8C`2$zpYB#tO|$O${e2+sT}=vH~?zvtk^ltgJz^&8#t7TvGYo?=PsI zKh8Pt`#kr3UF-kvfS8BHW-Ua=u8R!fvT6!Y!6UjfkjY6+>i~BMcSQVV2=Lo{1hW$sLb*b@XeVro$$WRdDW`;K@r6dy z+*;kXn=tJ9nI3x)uo{b~49iyN=~~oc7sj2)Cc;3dn!B1=W}kSUKNzBR6S}e$Q<$43 z$KL#mWSQRu?8anSi%zOt9#VSq%5LqMl78Y3N(@hq*lc?8f(TOUiwd(U#BBGV&fgqmr&3>Z=X%o>&pu*%YUKi zmjFhbeHOcb5T14qTKyXLGzM-TR8Lq}41p5n3k(g7TY#&*1l?Ft<=kVPp)&sty>jWU zGJ!lQJE9{JympDp@_#TkGldBgP+|b#M&5CxVV$*231cHKBRC&LnbD6_ZT#~7$2!Rm z#A>rzA0`p-{-%1A@-t@2(j$}dwDJnn;D5YN#I#h%JTMabFXQz;>!R9tHVytwc+XtE zvryQToTRGxSyE+TOod;kXM)Z!{7y2 zGL2hbugvN+n4bgM>9PifJ#yY2G@S;_*5?H7owx^GOdB7gPJ{29^-HdZGV%7(ae!ie zI?erBb99}~bNrC*rZ4lfPt$K)VJq5BW5Q5HtbGvNU=qh9#{AOB( zjdwh3S?_~TxA~msQjOEH8;3qqypbUWQ|(k+)CWBjDV9a%xJBohhHd`?O+G+0czv1+ z+|m}{0lSO`8#u7}|6yBq2iJddo#EypD)X`qnmf~C=QD>t3WXmrm0q=5}%OQn33-fF#M;nRYa^q7;aXre!(EOr;Y&-a}%)o&E=kgz<;g~tBZeOnG=u%b@6KM-08%Iw@zUyoQxTat95%Fpg#24;DpZp>xF}|*R z+fHd|3QZq0gFQNx7gwaws>Y}`x7A@3|9|v5kttM6Gh>v^$Nk25PufYF-C&FQMsM5K zM!0TJXQ)*38Wy0pGsU~j&v!v*WDi_qVuO``RypbhWoWi$6%P~GkPN%ejH>-YwRFMW zosj15)zm@dA8EX!?B@3kgoDE&pGAkR(pk7D(a)` zWHf9-AD@Xh7*bSYm^T^1)(PB_9wQdB!ry~Dt^BUxjTR|Yde#dPNiBDAlPt6bhUVjn zNz`DtqUg<+LtKs0#>Cjz%v*2gFsWH-qb0f&&SxI*l2ion(*1OcCh7C7LpEbQXTS)zvjx}i)OKT?1&A? z5{TCYdHkjis?_;H>a@#-rw)=M_>Yr{S9Y7I^_MZ_f2ndj+K3Vl#TBcuiQ^`9ptTPa z^Ea>u&+?auY_hRd2$HQK%)UaoF--3kWhhPsNLI*30>)y}+_3R`aaDiG<0^~?=OM^; zT2QyMx`wdRClz*JHOAzYj?=r=j!`xg^FK(nmo#69CgwMbHaTOpn|8cFgadM^)sneM ziq`kicY_5cb(Bj@B~<4U+ZyrxgdF>m?hLkKxjyM3`s1YRnTN>~G#R-etWI`_nlmeg z*7uG3Zg{rjmE(E4x=va*K6`vTG)saXiqkHq>BCVwI{Ek8fv)3&)}%%fM4NpDYw#Uk zG!N<4Na`$H?NH7saC;X!DBZmzk7aAd$o`@F9G0t35{@PR!u-m1CC8<|W02~Vqx8Tw zBw+#aaG~J_y#0Z5?Fw0?CG@ExNS0nE|91C35HLJhrmM#-jWNlsjFv%c(ZxA_o#hWdW@gXN=e42K~Xi^%|@(hN|I#XF$`xbtat)Nc@z26=t?Ge zrW<)74SNYdZ~rU`{MlAcA@=A0-~2nH)a{t!3VM_;+Mu%$(~&_mK@h7)uMWf(KjvM= zdj1E3XzK~tMpr|GFcS`*&|6u2(fg9J)t36I5t}5gStdQ ztwV5^mQyX--*a1}>KP8jJF7qDn%GAp-Eziy;``jMvxcS~4Nv_?SFIKjgbCwc=$RQ| z2&YQFtx|YX*8%zlH92j{AcBw59pG-TUl z3tfSbNlMH$^=&B2!m;=zzg+&CXvd86{?L|}?1%_T{oR~ngiJiujPsHosJRUVN!DyZ zeB?@Hfn|b6L?-wpb{vCyYtaYD3bRyD;MBhQra$3r(!YQNnIhGS4aO5n=1+vBk-BDC zi0&l7sgJ1&0#P4dL4Jj=`_jiKH$y3B`zd1vxi^TUa-B}40YL1`pV(yH;%zR(Ti z7Q337gE;X7k6~W*7fRqCkG}pF%uxeN@|t*Qledi^2}=lz8n%3;pYbPf@*f%VroDqQnk|-+P7yU{(iH~M*tM4018P#ZW2Vo~_>K@*4O2t{nbm#HG zk>bQG&0iElc;Ow;SEPxSB=X+KqY`ws?NUKqUN=@vf(Ltonye6(j|EMiguOVdsk9O* zN!up_t&y#U`Kdu8^(v$TS4pP zyG~S-RXZGXYn3bC0D#x~D!BZUrn(iPnNoNyxY`3K_YIml&t9pl#W1dN=<)kWZ z>?aJmNeG11Zf(%gcvE${&cOh{@+z!v$SlQ)-v|j?10o&(UDMECP+ll&;OoYQGUGE# zpe~V*N)_4g7O8S5MYci!#?#eiF1BbZZ5oGUsKJimK?*hYUGt1%Fj@1!OcI-+y8e5iWnz?UVFyj~E49@487W_ccE&uy2OYFba;YsE zC(ey<&hDPW8grn;e?eE!OEo8Zq=Grnd z--`;KU;R3`%@nPvz@I~SZ}d_3lg_;5BAYA_o8890sr+vvQZXL<9dlX(JYE2VW3(}w z^7}fWhwPb?)D-b5-*V6&TkEbN{?uUs$Yn{2vzWBdwp$k%^R!*KIBs(jrJoW1p0M+U zRPc6?%ek!&a+2(d{M(rmPOIMSTr#Z(1DTaAvP2u+Mm9D|ycZpqLvXlf%mntGns*tp z1BclWO-eZ363NnG_O)RV&R*c3lBOx0tUIBn*e0mz+l0B34bFKIrh6!BEWmedjLk11 zss1nckP!*%w9jc&%|03V6Tk}3mn<|}aZ%X`kN0usQ(8_M8c_pm{#||&(E%-Yi^RT* zCnI9oZ0}75y4|kmXd^8l{s;2-JtmLNYS9B`Rqh2m?0*261EME@u5c>_p=GQv@Z?TFL{vCXW;qOxED%-5FWpH|oO)`? zUtwPLI!$)OStECEV}!N6R|n$$u&V>D&IaBD<-&YkA1d2%ol^3UWRZ?KDS+S@|5PF(@+>B`RNhVMY)AKU}?qIY{!+) zM894tq>+B33rpqXF!YXa{*P3XNm>7y{}ML0Q#`=_V-0du7R9an%|8jJNKZ4-?XR_s z)An%}<;`|oRp3~85!X!#yJyp-Kw7!t-4__cI))+hIaf;4c;XX&Y3}j~X`)g^$Z=EO zYoD4#)KZ1MV?(?(s(!m&_e#_Ybn`cAQ3)W@n7G>PgOpIW`RAPjMpjmC3iNI0wd*CKvRY z+Oja`ccYfhyuRJ6F2kmFm>$%SjQaOFFvF3IUy-v; z{L7>b4WNs+D%&)TOSlyfz-V2>pjjlk21W$AsIislm^rXnLO>)6xGahi^cS3jW4xGM zDXGwo@4O?v=Y=`5Y;83M+H#7P5L9O%wn?cQug>42t~wMa65X zel>!P*wozNGDo>e6LwMiV# zB4nPz%A?^j@j^8?1z9sl$iM2yu-6W8>A9 zkpgQg&>xgr#(IL~DJrXm7#AW>K4j@|-B>?NFZUCf(`)|&_Ihw#`w3hb=6t3HE}^_J zDLv9v4HRHVWvop?yZg z9-FDSFVOZGY$yko<=5{MR%N1e#0r^gJ60_MubBmXLl7t4T%v`P*Nb@`f!c!8^|nEtXZg=SyC7WqP0d#BH|6;G zr^!x53Sv@{A^+#Nj3_}zPW=mNpSPFjwOvRJ?@i?IyVM)TNJQ2Q>5LAmwlj}3``z-_ z0-#(u_=ysBNgU)Qux2}f_CYkih6NgY2kf;89*z~kI-1%N)WhdbDd+o%=`-F9kbPi5)VoEM zYU>gG4%hhvgcat#H`Qggxl>8M%RY78Zl&6{|yxozDh5LD%MTWc1fhvO`w3`VCK2Iiki&`eC& zfmU>L+Cje`^E#WxHX+=vJy*U zz1fCq5l4x#CTbT>Q5-}9q7FmH-zL&==`@lz$LE0}PNAYu6NW2`F3zQ}95H)>Chi3QC~&h_5%`m7p+hPA?-BNKHHx3Lu(msEO+*afjYVJpQ8G zc)?`sz=jpw!#}9dsFl}|;$yl^#`1kvkE`7ry8R?9bP1T5@T?pSB;z-K;U4{ha3u9Q zdV3ier24N6zk2>l%d-s0DHCPA5l(qe=QPUz1SJr8AI}cd4W+8=MA6#9&@4SVg{@e) zi8{@+-N*axFUAoPXUZqd3g~tQrVGQNXdRVzB7~8mU*f3Wiakp(DIYnF<2H+Bo8jxn z2oBR4C^a4J?k2KI8#CF*ex6iL;JWuu9onwJy&G5s?lGao)BKBiC=F;(y&Ehb`w5b^ zpWHi~toTQu;e4SNiI^vHj1^$_ku^n6EYt=?dWj_=0Se-6lTn^~Ny@mnil4@5u=+u{ z@g)z_Y+(MESSwm!@2q~f_?{AFJ*|D>`+rLZ=h^KH%ndjfCu>#v~sQnYa#vy zwYUkAC@wou*WrpR(VOWMnNKrr0W)>nnFZX)LXh#zbGHUF4CvT6eFiz^v&Q&?viha@ zev|-%@d{!77-D=TeGf+vP-B#@#}0QKG#N6X6>s$2Y=!qCL8E-sCPL|wXsNWCD1>GTu&QhBH&%3|-Xm?SdliuV)-1-0(MZ>Nm=! zD1P^JxP3AfKClOnPN_yOms)aNGOnv_K};lIjZBpp{bqHq6)OLubF%oeO(|ozC8Z?B zE$sx#Db1KoJ|nB%Z`%))jK+Tg)!WX>pOsEW-v3!Jg*EzmvYfQ}=)jk}QyDj=!#_C``lB>~?SpG`7B$3NrfWAzr#5j7ignI^)kfpaJn;nES8xPNLzm zX7daZz?hkB;RVRzmN18~Ikb?S0A+#@rNdS`#pT#Cr2GKJ{}y)60DXJDz3U^0wjFg6 zXQ&ejKw83oYhEW5Btzc%OSD!t_tYQ6|F6f+uDkMol%|7fY#b*kksU+oV&8DjUnX&) zs97FHM`IC3Ql24eu?^a8fdsxnmi(Vz5UZBU3FT{B_EzghOP z)KdNCo;wDZBfc?Cd2r5%omqPUiaBR-P4@Tf^Q$1gbG$uPrsn$#B~HNA^+I%dQhAlH zD|2|W3fohPX;>@!%4fL1Z)aiS3t>lUtUrPr4wC z5*TF9FKccd(Z6@DS2+*-YcgDgh1Ru|MB03)9DVUL<8vFTvUiN)$z$Yr38z7^;x?v? z;(4W%k@u08f(krlcF~r`+q^7(>QNi|43768h^(F>3Af3**9jlt#72r}i9>e)_U$}u z+sn1WA|r_-R1*KtcDw)f{{<&HMdP>YrRRHDY}*RoMj`( zqYC)Nu?M6j=XehFu1@u@abfMqjUz}S3X=&j>BDCiubrJf{GwB{eCM6X$!5vui{RW* zV>?)+YY6gDU1KY1ySG{G7R0v_li`IGdzxP;)}Jv?sGiFEhp5R15l=LaW~|`{-BzAjs+Zq~To$3)0~BTs!CK3COKoGByv<4;|HbPLbI5}iGag~^5E?Ta@zw$I{?5$fg-ZoM{LWxJMSXtEpPsD9|ow}4SD^a1(U2d{i*(wtru7~zc{ z?t-!L&BcZA)vfgU0!(Z(-v{jaRc4bAOB^}G<CR zkyS>6bJl#kQv8%FCP*8Q8kWSekvstTd zP+UJGhu5nye^`KmeenU%qjTd;L$mIOJYAi%ZK-jmf7`xcJy*Bbx#Fo_Pu#yu?R5Sx zvrp=&Je8d_hg`kV6G`RT*7Rh^IszgWV{4s_-H_iHjb>bAKI0z#vRMVDlyP8zBm;8r zFA$EhdALwvdV4khkxnL>%qu~(twGkcU9va+68$~&Rx|N37(vc2!tSu?E|m(unKZ9S zjk(AM%z;z z+Y}X;s-5@6BQ8Z(d6!4+2Qx}HNRS-Mghk4~oqQ5$G|_r=FB_)!Hp_}2krz*ntmZ&} z!RtQZ&X&r3Lx&eb+I7|Yl=0-4NV*i%aGI1&AG!6`s5%ah^CdZG%SFO;S$nm~4f5U!D zWQy}X7ONCrERp&ZspwU+NdNMmFl7A>PI<;Si-sVR{j=Zlj@-3aqYaxp4qsmOyJcp7 zfWW)HQ(oZ9R^XoMete-ZBG;<*3&aSRIHptnv=9H(0(o6x+`r5iFaE!UDIa$5A{pmm zyXRonRO=z%V|rv}w7M6UNfdJ&hSo*7Ne*M;8kG*)G@ob3??aanm)y}j4N`}B^y(hW zuF0mX4`#D@n`GTt#&YbLElH|enqZP!Baq#5Ouf`69V_r}gw1vYaptgP8$5a(tRyKG z6$_|+uf0On>myK)Mbnh6_O%7dZa__^)H=!jk!zdH`od)^Kawo0^|%AFk+)L8t?!f# zuC;xbn1yO63EJVo`{v;BLUv4{3Biq?7oGEFIPjAouZ#R01Hfd)9RI@Youwh>$}PKZ zq{vjS???d&cE}bhC{I^>UCbJwqR2(>&>PzJ{$RZB6KGUflAHs(X8?c*K4a$iXY&Q`)}_XPmKC^uF2iq0X6#&h5y z_xYh1juHFwmNEKV6hh93caXKt3GtVG@Q)Jjsj>tQY9fKn)^~VHR*%tNGL>GE5M|P6Orb`Vxg$6Sk=iuK2DW$5`b>8-_7Q9HQCF{_~aZPO92xhEXWDuEghIm!7 zfo+20Z~o=hO4UOcx&b)@4(aca*te6@lv^iU5zQ+c)mtWLShhxby-=`dW1toIiOAVp&M~I<_-Q1oMUE#+dJS# z#=br7lqs!7a*xE7%F_y0kqjZQ144oCP3$W#hrajZatk z)21iK0Bgt>73%mbbb{CmT=0)UY@`2^NfV(quaHoyPk5>A+|U2r4h2+LTJ>~B|I4IR zz(ugBd7+ssFNqBpEI+X$97j#nTc#=gUvDEXunsTKv*zgw$w6=FHEd*6fdwJoMWRrp z28}JsDq#E)Im04uI7sJ>6DEObWSPQ>IOZ{MM{R@ONL40c*SbGKms^kBg9x#bt7(vL zC=!h29r16B0MD8I3}@w%8QSG#)j19!SLDPv0n2%4S(F$?ywJRMCvkvywQoZTI+jwW zgp)n8+zu1U-KY$jP1uGu^ipdQNpQ8qj`lxtw8&QHx2 z_Q*dKqgF*o4l_UD4m{%z&W;iThS$Ry(=@Zc7>+Ztd7)*-#lOSlXR8NGHPa&A3XbuV zmvu{oU`1pX&UvImN*TdWxx|58xy-v41)x z@_>A+yfIq6_%LnmTr>Jp)u|m4msHgNUAr@W5#baFN#woB5WI46ZEJx>&5+aqst?gz zDmVdK&Gymc;lc8Kb1I@wH;)WU^QZFl z48d5$h)s=;s#1U(32r-X+zqM0+R}lqo%x4x0yDHMelDD`S`tLIiZh^F+wd-6t^N=k z=t)Bx)VmAR!`NLC&6`MfFI^wx@*MJlch&0o#LYm0B^cZ5AX{5F?$SRfxVn{DIC6sP`(noUOx2C56ZGVorW>gU6xp5R(y%~jUzrz_HdMa%0?cg z2Iw4KS=^k~FLu!0Qjb7^M&h%Z-|4ac@*Ec!jwGr_$_oi=cPU;SwESb#|GbN$^?_87 zFMj~PSa=`5RH}v-30&l)WE1Z6M#*yYin;vzYg%4xQD;&UQ>OFA;K#xoG%D2%-=z|v z-(HcLlE!UX@*baKn5OfF`59mJ_p`9r{5!nYUSq@I*x>?XlRvFC0ej@I_M8+DrFbd$ zA^#}BUh-Lh=JAaNGe!KFV5;t6vMN<$GBf~q;^uAai1Z!0cE@t=bdchaovdJ%V#!tk zpyQO_syTpdlY{ek`BdW`5ztgan^rDcWFp>3aj@ysP8^5d*nv^JE--7iUq}JfVw{{{ zGJ!iP+#rUJo&(M?M={yDj(iew}Ka4;83zA;`$8??y3 zhwkIoH}g{LhtkC+!g*qiOL1_irVq)4+tSo&pN#mNw^FTDtz+MAN;*~OSre}8F4Ro8 zIK45^fWc)H2(;!-SV(1E_O3cj^F9$*R#K=aiEX~`pgtL0U_5zOmvTb4)to$2yc!|8 z56iG2jf``2Q4(qYwkWZn>Dhh5*Ae=g;I0nAGz>zFZI=4AMloNC{; zN%+<-TQ(CR@rIxyw?MQU4n&=Di9OA`A1@3GbRe{wFoX>rI|@+s7G(UB~mBvj-_xLz%qRh$8x3s#(_)|MlxSvoIoV1xI33YkL5LQBij37M`7bU11H7k|rPd6!> zt1Po;K5;jCUOO%eDiz%VTT^J{nhh5>rrKukY*1@)&t`VsMa6h)pTa_Ivz7n((FgdY zB9cLcoL!<{ewC!2S;GjHJL(PCCmF^9$E@`oTmg(M?$Pl2vEPUI8_GmS=6diUO#Ga2 z`C}w>zvlN9|K3U&GrbMY>M=Tc#4)dfIK8XF=F_F!a_8m4MPY7&YH+-2@gYqztU-;b z9Xhj4HySdXx2jETjpd(iyp>mKDqMVhW zt4;P45S^UVPzF?)(2gC{M{ZarNkJ#N$$QN{G|Hx6?`%`#LHBf71Er!wbHrlop+{8y z+@8N$8TJawdD+#6I%k^D%Y>t?QB*pSHlh_Tu;gW;#z`Oq^F2-LOf9a!A|8Sll~?{dl2hdtiNkr z&sMns6UIHbNWn{H>=9LFNj_s1oh)En3*dVxOop>)D~Y-u_pv~(VqBR7UL`w8tm5Wd zoMfj<)kUyL-hWt*?0n(|j`rY$8?vT};*L6b*rah9qoiGO?D;^_G*RlmIz1ax;Um(Q z^K$P0duJGS8ZO*rs-}^P9ZRW9RwW1w+lI9*jW(KHVPcr`y&E#qWwJZks(=PbTC$A% zLeWe}Wb?lekdRachLJr$s*)saNrV2QBu`S>pBhq$A9-vxs4IZ{p`|csg5Jf19uzAV zPVo0Zr}wD1x+TXoGa)42-(VhX()VEpc|rWwU?v&hmIc&Ft1f~VL>>p?DQBqHdS<;* z!e_ccCGrkflDt4h9b0ZOZt~wdWMAgg&rodE;8wX9X0BF8nlt(+G$-U4ZfS!t7xI}m zsVwG_42yHhXum!lk_ys@A9{5}nM2?UMY|Tr}A37#Vb)ms#u9qW*K{c=g=Q5$tlos zK7(atU%L*y_E)nl7E>9rqX(p-t>}x@jMu2tjcw9~OG)j(Q{SNM5P;nCdh}wnT8IDv z?Ceqc+AD0`Eqp8-zSm~O_vS$}wYgehlYKPMx@msxZQvm0fv!aTb>fAi@uiIEoR6MZ z_ft~MybZc};W}4hSz!wFXiPuiBu+={W?PK1-qL{eRIXHqfGypUp#Lur+CvMBYLxF` zGYgZk#U&TTqR zFP!fp)c^%Mwy06_!Ce1sh#SB99`wmV{>;u;LJOhsC&_+(G);3yw8aj9zTE|>2iFNp zbzj^)DDbz*ab(Snhr{%jpHZv!7pQl#&hLeZ7=t#f_Hc6xwB%cXv2B9#V3USV87BF& zYW68esZ$F%a#LgnAm4<0RLb2SPyrvpChoi@?THRj6@w9CEA*K39XXHS+s`mIYiKj$ zr;x?B*|WiBHs(6mO6f*swS^lN`?qa?Yfm!XDxFbDvL;gRAj(ReJw}-uk6C1|(aOxp zifv{dOZijer$P8R=>2fXo9W1lzfC;CJ5ptDmTGSQXS_Av1YQC4=BO^*&!2$CvVhl% z-SS-KO^Cuq)!yN4kyUJjcAC4^YJ&D@ANO$McLN7>xP&}x_V&1=sGO!(t(%_8tG{Nc1lTW6t5Q4O6Qbga4U1JXifr{m zYGQJG%rjPAs&XZ(tUxvZ1b}rvb>M%EAj`ass)|g+W#~#Zi7fR zdt`cI%6?`%5A$tZZGzYkFp0Z#LdkhXODaQB9a+{Kr|QB^{0ALdv7}ZivFDE&b7$6C zq^U0cgj*@FVCn8HzET&cT$;DC*WwybXMe#W4FTp)znUCxxRM5>+H0kZE6$p~;w0%g z#UmumV^)LJ7-hYyJdE^^rLknYbqtw4b| zTG3>~K@rNvbH|WGPi4t^w;e-i zSzVw$;syHc{kIS4{;ucWmz0Wpga5yfIr&`LBlf9(rH2R$1$Id){~al+le414Y~-7~ z%R?MDXyUf@(Tt(9O?W=3XZw2aW};+{{)YTyQu>0bEoNMu{v*>@32tQ2x^Cy9ep0*35Wn= z_P$#YL2exQ${k?4^!#R4y1T$IrtJPj{nTFVG8~?OeYd`h)V2sJddr;kTso}JHnOpy zHsxI2`nTNFOVpv^5FzkG?c(h^%a1zFv}{2?DE>eF;KLHJGbYo)^%z_KVL=;%j)ZKM zg=QExp+KZ@Q7~BS1)_@l81IQiZ^|@VDQkB_#6i#sN(S~Y3;tSYR-0(ah<<5klwe;D z>8or7ulWaedmN_t6#qg5)@^KLzN8ELcGP5i=+MxJ+@pKwBaWRnF}EmwRl(su<1TL0 z%Tb$;vztEPvVcPJ~nCS zqwAyg))vU26Z0ruIrtM+d>MRRe=%y&M|_QA%Hp5Y2Ypzs2PX682fhOBUCgo*kxfoc zdl+|3)o197 z1mQxnwZF&_O4lM8sh2m|3cejN@*?igh9JpX>cGr4w}|1Lj-|hg(n8wa8=uBSMaBOO zpGOZY9gcQxtc1>F0AMZNkT~o+m+`?Ac~Lcn`?yB2>H_bBm!UdH%6w{@xK7@S_Ikui zb2H1bd&R96DXYG=LvJHez^mozS+!-t&gOItqmT6TM<;%ZuX1o%)bNokV zkXM>ULe;#yw4D+IoY5@*VbAxL=#XEGS23JvQ)DliXc1NGqBb!zJb2awa6R6Pc;4ZE zGEu@K(TTsY6$0TNi=xAf3Ffc-$~nXOg&aX&G8(5D7F zP4P@LMFzPPOi(sY%3gue4L%3FYxm<4vVvsWxFE(@cjIs&Tz*k6CnvaI%Aca_Z8Zjw z0&vQL;$KSBpk3^044G3FI0=k7OI7)pvv*|hq?yffqg9#ZDVrfbH>|P1b<_UVb%wg< zTw}jgTvoG{eGO_16O-TTvxziRaGo?=c)^tam%k(igB@8W`u%OFc<;A$*sPQ2Olp<{ zTCqN0Mxc4y0>+sJ%no^^Q9bGZQP|lS^=`G6B#CVD-G1_jduIt(`as z8gi8=pkOWIfX<}us)9Lxnp0Ma`Q*X*(5Vyfe)L}j`wTV(LfoH2~gcQadFdw%8#bi>& ziE?;QlD|;5nAc~b^rvQ3qkrEgsQ??tAaKHGf>}_$EQmCaDN@gsFwH@+sox=s1*Xw{ z+P^1tCpIx=i9k+vhf~7|GlvTbECJ~~!~4_tx(=+hL1sOvMK|o+&}-3!m)|AT^g++W zWPtb`Y&99!Du3I&8pvd&C%yHx=eSi$H z4U8o255kJGf~N9py0x$GX;bQHeHZM-eVB7Ab>?}d;fJK2V9l7yH54nk4gRKY%<~`d zUpqJODZW%{VK*4Wo?O+|Nox3%H#C?^CabKHIhv9yIELM>A5ITSoJS8o<$NMf7xF3b>PFtKa zns4dZTP(U#D*BY9DtV;qvgXWc%FkaQFevi&Qp5M**5JO;6IaR{(=?fOb9HcqliX)X z8afA4-<9V;Ii#YY<=r;O zH-*Lk`5I@W{-Gkv+Qm-Oig^W2jCXZ1j}yH2=9#O!qseQdf${Q-ZB{jzRnON$@7Z!I z_hWKAEJRz^%xY-^U2ke$WGz=)q}udN=<)v8KfG*HTQ#%E`PQoI@%q&#dJP zDZgTbeq$D)Xqm2gvx)f$n1p`E2zq4y^&{oxgQdI`%wvi}IH zfih${n0H=&hTnW84T_JlnmG-7m>bRX?&lPvr-CAea5s+=VyAi7N@nHmsQ7-kOVjEP zSZ-VAHDrV4_VW2_*_7GtMM?ZJMd=MyF={R+jj8Tvo{h-L;eV5_kN3$5(n|wq?aB*;f3V zc&jcq*+5AC3Ee}?>TmRtzeS%>W(ZbNiORGd(ZC^NRH}Zn5KOOYLWgB;$o8w&CD<~a zbDEJuVWmbW;i@eRIr{l+RG@Xq)iPaWe9h`zwbDND>zvd5i1CGSBH1{sd}7V}p*w8| zl3kn+tdCI`BufK7+p79=nMk?Icoq=IUnaT#tr!UnWxtxnhT01tTRFunSwVWJ*cQ&> z+~NN!H?A-r9Ef=6DsQmv4$bX;q5c)$<(F6C^5dib_E{`eYL2bP-Vx+zmx64BUwmkX zmTuEzqrJj;-p=t1$36O;@=5rtl7G5I5qDUzYAWK30`HGQ-W^;g{MowZAm;XhLimrP zaFJNQ`JhQ%M;h2EDN2^996gQ$PUC!i2|;<7gw*^8uieoCJ#C(#mzVIa=-2I2#QZsB zR+W~fDmku=B~)DN+c8H>@f35^mVqeZ#b;FJexwl;Op>RS+i0oVam8wWnM*f-CBDBK z7?CWq9N6F{kmI+s{g0w^k864V zyLRCelcZ8CXO7%=(jkt^R$)|{PKV^STyrniP&x*kxRY90fKnEFp9u-p|Y$Z}V9k zH&kq`UWU5);nflPUmmQ6_h7XrJX&^um7i}3wr0PfIL7~cY~J5&PBq+SZ}(Z=o-fPaT?YyB26*f zwlNl-CzeoH=6%q~zYHU6$0cQ^j0p2CN8cR*vgI-A>kJB<5A>oP{Q8<`5fRIntmg(gN0x!SAu%(FzhqXkM3XVyN$-JS%t$xc;r zLs5wDEIGx|Scc6%77qJT#!Ax9OTlm7-;i^&IX_cHPmvwAewwc++np@OXhP=3V;#((V&z`qm6i3`V+KkJ$2 zq}X?Mf~lCDUPF+TNw4(1R=f|d_VMLh_+1W7-Hv>acRE5V=(8>jnN`PDseZ7uU!%p> zE6I_^Epj}4Pdk_gD3f04U(>VQ+}9xhKW!~43hyiQh||WDL#_-owHWvwlX#+%AYRPz z--OBfDvG>grLd64#XAe46WS>6A|?H@khPo{oM4J_70s#-49n>ua7#>P8ir9Az)=}! z_Kk9>Tif53kELRh{L%PsDAb2A3)V|U7>hBx)(9pNmMu1r?w_UX$`XeXBj9uKb`@2e zA2#m-C0t@2Z;Caj(PhbwxDjmhq;hxlJV{$Av!X<_y<`$$;%1{)nDLDHPj3EZa3Tma zx0T;8oU>`>949Y`P7q)eT1MvpYJ7$=((J+lUzmv==9h`%w~ z4}q;`?X{xLONtTH4Bs|;Wnw+OhP=Y_$vorSGPPwY=ByiSyJYw_Y4vn|xYkrhI=)v^ zpCY^kZJMY5fD+f0$y@g_EB@5@5lFy?F20ZZ|N91i&-8`%R5psgn1t&c1U>?8zTTnd zn5r^psQjsB%a3SybV!eu=@O_Fgz?x|$J`-ey41nFJmxNyUo}6bHr#Swz`fXSX}}{_ zby*=cK|4NPK^0&J_lbT%; z^p%)UrKoy+8S8)Z7m;S|A+9ZXzr1+L={-9`05Rdq6Lwtw7yiy_)Ks&5$a^Bd@lAV2 z1)S9$L-7dyWHoCM8psd-1^hPjQ=i<nDl4gZH77a|$Nk?`N8rkc$nj`HIpe4Z8Zy@}U)D^0wW*>sgz z@vR!Hl&Fq{_)WWzbrC|NjIsL{NIUqbziM`&QsFNd`Gc?emmvc5qMoYrrokJu`;^sPD`0b-$+~Cw)hV{tvc~D_;&@RVP{496A}VZ=egV;isiKK71;|T=?pl zpT|hx1jIaeWPaC8`iq@+D6DZIso!px!mOt1b_F+%Djsd5bQm;Y*cJ9hvWo!TKSwi! zyGRME$0a*j3^Tm0Aio^=E>hvepWlcJ;-L8hX=d!f->^}`2M4C)CqRx1sk)Ol$aU9M zzCh}9SpGc={<_p$tr3uV z7qeLi6yU*|`5i&|UxA4!o)cm*qM9T@c>I~0Ip3RfO^AgH-JCnw$tO3LR(X>TQIESf z6xo0Vdt4&&$NH;smriM?X^o6oA=-|~x>e1ICrCDZV)twW0$_KAPcWg;!RuBH@KoP8 zq1>f^+(doK8YGKHr*vZ-Ri?L)NBK-u~xK_FJ3(e zJ?4o-Dt0AqwUhj8u={78>>+&Nkaa>Pa@@}(iSQhnx4Z%tNcD|u@S8x0E1l`kCtEv}xqn40r9iVn*OAF5Gn4-cL>@9~ca;QdG<21nzu7Vs z>(`O4n*1Nuc1iL{{g1RvQ_phK@N4xKoVRo8ce^H;g%d&GNT`8aXJuk-uc-YexchR> zTAC&4svj=ek{wWUp=ISfu$Qa3hIK7a=B8CQ;8`uP8YtBwrR0VXZ-N3soskq5d zZXtd_wo}kk^mF3H4zUN)%(Dq~whsJpc}C3iElL*z^HC@3nbY@RZb!rw;nepwX-} z#Q)&9k}^YefHQZN;EHVJM+0d%bVP)eMDj~IO*M_H|*V_yVGFoqrHK|8$g1vF?W>((32tyFU*ZkymXsW_{K zncOIIdJu2g<;3;fDECunp~S@4&lq6oF9r#P|*JCJX+a%yp&zk{1A zbiv+cM*NVmsJ4x?+FkaLLEjc9u3aT7jlE!QvZ^9FaHa(ljL1W&xULnu2Rdn&FdcEq zHmkld5_ao9cSsYpvGf~hGKpbgP~!~zELW=L-vqakVkBlXx^G39`QU^WDq-tBrt?uy zWRDZDC_CSwLLbo!TVsg2m>!&6tyy2R$j+48ieoj8?(T&$Wx1ga99t;tIR6TMb3f=` z7%}UVviRbnVX3$Yd(^SfnxCfm*OLDl8>**7B&x`7T!$<$nQ?)~*?1rGVnvCllRQ?9)GtA}O;DL08KoW|xGS7L6#xg8YF}oiEp*vS{nJ~|bDw;3< z_Pd;*H7tz_;P-HYNe-MBkmEolE1)!1jJC` z?7uNNRm1~~W=!vVkdW(>5Cr222kgZl`%Ag?WUC>~7Sh3^Af{zecb&yi&M~Efsop(P zI(7E#c(vR?$L0@!RBv4<@&P(l^xR9*h4F8z5gmQXLq0{G%$Danr*RvPt9*+xz!HPi zieU}OsMP_;l0=zxm~~&EnMcfi9jz5dv`gay7 zH657lN;7|k5eKzT)?6AUhL3z@)RtJn3RAdatsP5Wpdw%LwYSMaQ&&TEZ#YV#$!Zsr z@EGaO0~)Bq=7eJAon6HLcIjT2(1s&MfJ2%$E$r=R$&Zm}crep?iR2;lh~^Ro7aXDq z5V|!;J1wO5T%%^Ujmv3&$~%j}G)U+~%PZ#wHTzL5W{UP!Lb)?N@|R;^z%Ps-Nhod- zHKzF@Gr5X~%nmZ8+llX57QPA(`xkktWcJ;}KgP6TE_OQ<`dfhQ*EhF&b@F+6Mb5WK zH+K)Qz}9INNAk-)`EG2#|2uOiPg2F|3rr=Ro66rBfS0-4-Jp-Bz0Qv5nQ9D{96%>) zx8Y}{X{;2?y3_oxRxK{S*tfD|Ekql-=Jw=9QBlY&(Iyi3eaLX^T&LNxTy?;<@M2Kd zK+Md?q8i6g5kzNz$Qo9r3Mcxw??p>8mrFhov$g>I!Ha8UWdQ{O13rO~RAnH)OIJ8; zrmB_85&Xc%^G{?%4F80c*n?o3&2D&Q!*|@NUlyUZmgNiV>nrFh zmCeaAbtlZaj9-G+JPtKQMSYV}%?pZAjZ!eKd>cO0=weiYg4~pM82FWs?iIrooMmj+ z`y6zvq-w2bGCI?Hf+5J#lrSD0+^R2f=DHV*m4qa-^e!oJ;=?6hSe8tB&0<;ZZQ!K% zWS(tr=OL8JDbopkaVsPokSNF6dh0uJwR=+26jcVmY3-60A2RRpR9|)5>d3!_Z}|-< z`x;!Vg*J)@JgSKqtzOQj;nn77quAzT#W=$s9CHx~`oDjg;8LW4ar&ZzTlxHF`Qhm57lErmJC)xzI_Ska6>g7H^ zQ1yZ(l7o=#Q{?F7U*D9_IcJOP>(PQ2w;*;h^vX`KZj_Oe!^vMc+5NQ)TMmUH9T-2c z0q7%aO4T)yf-F{#Lx~m=FmcBs`Qu~ow1)4|TBArd`F(1d3>-raZa+xL)iIr!Me)Q~ z?`?637-RzDQUrJ~G^b?%d2xz-)M9EMNHm#7x-oD69#t-xPAvn2hMYmEu>#PoZsBJ> zkrE^~Xf~(K<>Mx-YYhJjTAXae=fS?0Wnn{>B2^_>ErE}^g20BYy09owG0Kh_g#C^? zaLW5oQS@lZMM`17UFq~T%a^aCO-BNNK$@9J@S<=sujpODBkZ{RD^{;0YTW7J6Jcji z>tQyYELmS5lD)H5!i8F~d3sE=P=FlaX`Qg|bR?SA} z0`w3mx=S&SC|+Dc)eg!Rt{(Z}B2{;x;=3>~=BZ^uwOfy6qnx^CP&UJ%K{-SCWV|FZ zS#V$v)43|%bcu4@flu_;pPM2-P+z9YIVgvE|Jwe`wpq#^JdB#AhQY$Yyuoft)&V_b`{E3=h{G(a6 zR`^cY;g@(E`Y%ElZRiQ`isG*)bXn*E`9zHQ2dtGd3rW=Hs_6nQvtkrgQs~0AFVVeH zjeN1>3bbxks)F`30D;Z>hw~F0PMb1njFW9!^i;c_eZF1fZ*$kX_Ettb&$IR90|%FYDU! zIj^n5h4`H>QT4?AXev;dd;piqbrKftxV76l58zS0&xqP)T}^kWX*iokRa?Qy(|LTy z=ekR@<$+lLIVk_%N6~^v9^!+O>;)wp_~bg=XD6d;eiy?c_&Pd7=ebA7|6d(YOw(hc zy1qqgX#mV--_OCUMCrhNd2K4J9am&$@hi`ocUZ^84Sk~xDJoI5JH4h(9{kYIk$dNj z)a3F+y_ivENfZ8fVv3`QZQG^d1F%h7JV=^%q^P%&G#k4~uLt!Hx=^?JR3k!gFGF5f z04o2b4yX+7Gt;yeu8~4ZnMocoKPmsupWsy=l=8VLvaX^(S?aUnh8|4wpO~%>{5K%P zEZ7PvmFF%wR~W|IoE$lubUp(bu9rHL#LfN63Z6DzV#}gxf|hcW-J1O30}Sd6*S>FR zRQ;1(cTTn*e&112DOI1F=qnxni8}S)#T2kBDv+=A$&uXwNFDBr`{277L%6o9sAQTh zoRPbZ)b1}lT-?jn^tRr-g?sc3UK7FpG;y$UjG;fZMWZC7zGm8ZXm0vOnZ1QWug_3R ze*(J$pxpO>u^1!AuQA_@r9BMbFS##kB`#VyioLCm8v9fa6=H0;?&|_$I%b;WeD#{a zXzezOQ%6(Zdz5bF6u`ZIVpcrDZtMorKtFO1m7e20rBCAjsDIdmC9zsvB}J?0EeV z6lJCZI^`sV%zj_1#S}tmaLaA@YAAjr{oIY+1st-6RM|LK0)TqQw4KC zo2BVtF&t?{o@)}Fj~OL9&XtE$ir&u^W(|B_DY#FbZRXg^gWOE0deslNfes8UOT9Nt z))pt)Wcq?zo34yoVaV2<=llnv;p2$Ad6rWGsV!UC&T8~hbe;xw1^OCHR-DGg9N$4Y zao8dCn8Qmk!C2uf4q`cfL-pMKAFraA$rp;_+hQy{)gF>(RjdjnGLa&njHsf7a$*xB z6ZYb09+zY#tAFDUTWoZOt#i5IBhL+}Iv!=$Zboj6^C`4^17Y@3Q;b7hD>9CKqwEX@ zMvh4*+zMT-2YxEr#^ndKJJdrwy+LY}49N-v7h_m$XiT@m6hEJe- zyEp(vtk3!eHv?vOERYNQa4y`>ZltPyzK#x#tkDd&V*bPXKV$9baqW~4rjKLpQ>_Rk zkEC&gmK1`R1AlGnfw;X=s_6@K);`h)=e>43_9=c1SU~J0)!fH9QRmGR-ca;nX}BlW z7Uyh|EEOj+RKc$LI~I$HtIdcvU$+%(J7>oUqU0^E)g?6|s1~>$i{0)pMa8X>WS3~T?zp5BZq2^Jdrfgq#;ZfU_EgYJHgHywG-K^6P+m06Vz zhQ(9Tkps*3Bf@-BAtQ#SjYc z&VTBM@b3$-_x=#hP^VHn2u9cWgWlA*xcpe#rlf)B!{I217q0?8O>=|=9k_K%!0+r` zbH?F#H4g9(`ln^8dheP?Z2Cnss^$tXl*vpzPwER(r;mw zIbq))=0d`3f7IKYFf7X`B!Zu0={?sW`#VQGj)VU_ch#P#h&4RaVne}lc24~9!D+ljy%KRjfEFcp3Nvg)U~5b*Xim3d z5(4E}I}E7?T=MlHVuC>iTPM_j$FHSXj01`eH56h-Hp1^h6}xhZ{T5>PNi;1ek>(@3 zh|7rb5U>oGH(p5bbi`k^*dLW|cISWCR_Q!?IE3#Bl=Zrcx_u7r>EseQgAal+L3gX z&8WH<_y0EP+8A(_*M9+uaq9X@oC!d_nA_}{U>!S3dE5rC#h_WLB@U?D?D5zhY9m6N z{978b#uqaUmy*=pPGXKS$P!6jy5c^{KK?A)y?zvBY#5a#?J;R@~P?~rI#gA`7SK-n+P$)qa}+D zaTc3n106Utf78hb>)_ong}9p-b1@a>wz$z#CbW}2hjJHr!myUlSe8Qfm$MpHlWe5% zx*VrPe0|AHP84RT&hopW4RY?(N$^hHnB^Yd*>~F&0L0gqr~3iyN#wga_}ZOlAg)kS z@9JZnOBfZZ7IHd4TSFQ4X&DBYqsi%Z_Lq*Eqtip_4}svSgKaWSx1h)M ze?889x}RKoOsb^J*33uw;jm^DwqEEC?vkO0UH?d{^Yp!^cP4Hz|jB9g0A=epC z@%iGOCMux&e*kd^```dVc$kINRZUnL_T%24uumKRSUI_eg;{y?6FZ?h*6}oTXxm2h ziCE5h;*(Q9?VoNJw8+BQ`UKLTr>Tai;n_DYE_DGz(YSHq`b7#w6(fJ5i@1u=yIg)s zEZJ16?gBOdHa|XNLKK%R8?M;-VJ5M;1cr|jKF&D#8N zc?r`2nF=@i;d4nggQhvc`qBWzyXS9VVmR6_KUO3~|jj{e$pOwwG4ugk-cwGTJ!++qBh^vLaXi+Si@JBZ=v$n)jb**gYNt#xh zq(S*txleNG0f&YG?DBi`*BZI^5)a8LVv~)Wxji^k%fp6{khFMnqpaPM>$?~#*GcAdVk*p1*}Zj9ndo zgol_5$w4JhkG|w#5V?o;Mkjlhi8~*vAMPgYfORa(Hhl*KQWw;r%k`Y|v90wG@1(`8 z?V_Xn4-KlaL$M2OyvpU?bn&x&4{K-$x7M=^LmQ9)Qk` zM7h+{Y~^f~r};v7iy%O#wkRuIqzW}7*A4egak$=pO~sSpOTltll)O;xY%jVRv;3@R zEAn~=_zt~nlIlw37hUq+OcuEIP9@$5=LYW^D+x~1?_-2r(oeE|Od{@s)YwX>HcIv> zzO)sf)<#peF4tclSB`v-_8sLLI*p`LmTv2C9*tYwHU+iQ)I-FAL(J^x^hMSQ+hU$# zE6(r>9Fk)c)3Em!8rw;$N98LRJ7a}YZw;}NAM0eFr}cspZqF>q)DFzt4P~aW)Og`k z(H!gM??3(zqd9mAdxPCx?<)-Al-vVDzIk@45!Um0cEIdT%<)frFC`EfOWX|fhfhAe zVz*$^WEq?|v0a+14;1kXvbzPVWVw#a`U#@M@sjfXm~a>K;W|0UQcp&-hN$7wkq}`pt+^+9ytMr=I4mmdERa8LHeK z7PEkqd?kP%v7f3=V?Uqok-uH8by5eS4L>>XGP5JAUymme;NAkuwgzWOVeI#-V z*%`an56=EEIsX_aRoTHG`9Hh$nDdUwvp~}3P1umkG5Ex2$#K}zR((N}=hb+H@YT9n z6OO!37f-uID*qidl`)QQ)~`p2vr2RZFQdj97#7dIL=EeUsFE1MasEb}V+-L-9p>mv z!H5hbubY!AYM@?Ox&q7*Z#l-5g4?zqCRr&yS-goQ_%O z5uAbsA_rz_njwq4OaT$!UX&gZC&0))`S}Kn#}b>Xfk-2aYLXF)SlPng!L9H&#lLLe zaLaa})~Tv3Uj&A2lG_9#ZyX7U;TfuY6*Edt^@bY`f{)iC5!?xWD~HGw$##@6Y!5U9 zV}M0b(_4OD@r-%I=5aU77|FExo ztl8w&cOc&M;+{!M@rmURW8Pks?+s~*FK!R=`Y;~*d0OAKvQpV7quT*B_*CnCCWHU& zRtHgqI+(h1Uf&u!fNfG_z2^s&nt2o(I;R74FH=m@4r_jexGBk0Q!TU7l~Xi@8(iP| zDMZ`>rC05R`nN+D?3$17Vilr3gQECBMYN=zcHt8xcrWes21Aa0<7aw*D}4G!Dt=C);XbfM z!TF1avgM6tgs{KOS7P*{%RWxdv4LhaF4|2$X=}19p$}i$`cHN@D;JS*(#@~ zRVs-=8E^T4oOdI%S|{SfQB*e@|B@(x^q4bUZjy6qjOrVCL5!KErBtQ3>eTp3dXn=LXM>6_KclQI>w%NaL9yI+Gh1!PH6t~I&!}V zUqeh+-u+wYOs+{SzG$EB(0Dji)g@5!g3?#p4t`p1+=HTSvHysG%DRm{utX@3r{Rxi zh$RHDe}0WiND;{vb2M|#*SHl0w0Ox?Os{FOT}op87Q(DRwM{GL6qUc3CZBQ%DPF}% zy-j*#jU(fVQQZjc$X_U``BNEbakEi_MH#tgLn9;QRAIhyCd^8;Wy3beXeX)MGcIu! zaW)tEhkw>lbDf!e4qN#x_3hefeQdmXL7;9NG`VAyjB_@F(ZLA~FZ>$qiY8CQPPv7Y zhl(3Y1gq6CBhh`<`bg633QMJV0GsC>&=vC`7Z^q{*K88DfEOWeZx_a|Q~!d}{y<}J zHP!Br>JE=bPj_DAA>aR5={QegDh_vC6c`Zu*{ww^l9lDfR%sCLg#rgm2*My@-iKr< z_U$P%^~qia4(-?$Z~haIVjqypT;hN>%6km{ty?N^!vs1d6dOL+WT<{p(s?HfU_1C# zh}xaoJZ+f$7{aa_E&2E{9T&pmWca+5mQFHnODl^P1QqC-DP*?9b(JcZ$I^coWjK{) z<$tzq>Vci3P~?X3|9SD&{mgcdU|lgvr{M{S2TMF?ggz`j@djbQlk_{3bUO&~@$A#M z2<$E>$JvpOAaZ0P@Y8*!irL)YO~{&c1o1&=O19n~6pl{d(b!R=fv{}kwvp8J7f3mh z6KMVCvEieGY&bh}9~2ncN%C<@UCl^%srWrc(>BiCH%IM5Jo=fZkFA0Vc7sulO1^hoYN|-_kSL3wPE+CaV}7GFa&La;D*nubM7%%1q4!dW=VDG_nq(yKD-^ciEaD@{qYdT0jPG zj(N7GOCfit@KJzj)S@mYeat7A|*HG6ApMeFdfQpGH0TCi~V8Z zrD)KBPRa|6iEu76=XKxM5X}ox#OGKNV2#-yA%Fj*L-xNEPGD2SfimJVos7O)_TXxk+9xAn5HIBd>cyf&pMbRz%7 zZE5Kt2x%D$k&X6YA<^mQ3tCZ}kLhel<7k6j}Q(Wyd;6K_^fMbVY+ZMCxAOc>VpkiObc@ zo+bEtAL#GW-fn0a}SmrLy0-x49>>=Q`G73jO#aJoR*XA!=&2xsG_>&)^Q=XTOS9^UTD6A=hmqw=qfIz!?qVe@FK@<=;4sjrN3zrVX05eaK@>{oPS= zm>~y!HXn5H4lRfBoN}v+nF&jj9S*7M#lPVmPExw33*Cs}br@bOJnJvb5tVv@ji3Qv zI~%`yJ+w}>NT=y>s6g~V*#V50-|)uRR-{C6T8p_hWzg#bYHHm-93m}a|?^HJ3>M}A5 zk0V4`yBh*yC`V9J1zY>Ze$Y7$NR)B+@jDCE5y<*9g`I`2$1=TBnm7#YWP2DJ*+ObF zO0sd)b@iD8fOOAVR-UH#$iSZ8<)APBFItMW-YNu9BR3N7nddvbb?I5deQM?T@tA)t zo*%a}_ArDF%6V%uWSQ$roj5hW!?{L!n6!=hlX3gN6X}>T7;9ivk*ij^E%nnsf-LG$ zQ%{u~3VnE;bPiKdpg$7sl`WcW*a2IexeChNFQleo3b(~^tfYD_4nMU;jX%O_baF_Y z5gq2KY$N2Vfx?m&I)TxI1u?0bc#{{C8+=yb)MaiTV)yBkpwS#W!r6}L?h8VCLfRSX zmLk7Rzzvf1Q(x{XP})^74E$g0id~#?uF-qj^b}d89hzF+j9PwI?)B>BCH7;M?lKKw zU#%746!)G6AryBBsD$fVpQqy8U^wBK0>GF6!0e^@euDU*?E4bUYV6Z_jRyc^y#+OI zqe8ukHO^@Ho9g#*JP0%Z=E#3{0e`TmDkHHBWv<@)y9=-9CT2%+ zBb(#mB(zZY6(~aDgzd-=L`dFbK7#9y8MzJ)4RASC{fXNDO#WiUkb!FABkCsrAKA8WoKJ83`Q;g-uN>8sGoMdG z%(Ja45?KiMySb^7$&=uA#;SeXZoZ2y-0kVLBQQ{JS0-0hL;ZC{wb18lQi8E(bDZQN z{!F&)s6cZ>6FwAu>3!D_(SZ;TLN>ePF_1%08E6 z30egjs|A)iSc8e%^^OLcMNDI}U%*5n0 z{iBLz*{y7kL5y$MLAP~beYZ}dI<3Vlky(Sg4@HbQExD~Y8`3;JGm)`+Xu|Ax&~H5d zpUf5eHkGjNv$_t;$`xVk7ipF`$0equDhAXz}G9cSd=+7}7=qYUSzntvA?g07XBa_puu0%Ce52T#}6+X;0bM5r#it|v`C z$p3W{ZQbv$O#aEvrg@z~SIM$w3UDCg@O^)b=T6Q|*JK-c)&tSrqyQ)6M>VslmdKM4 zk9o2h=p*Cbr)YEWGn~WxV#3Qc^Q;re@dMJt@t=&hPk6Go=^&oEfrr^IEgfat1-ycs z*;9kOu2*Xc9D2HcjDMf}Jd&O-K$bcN#&}#qe)3quN7h~K z*0)I!A3Kz572dLL^clnbP%DL?E|FE2GjEAx&3p7Ef#bvrl%5{^{zql%jBd?%35MvC zK9ONu6PNhD&8Y9Xh5Zm@cuKk}!gd{x`iY6u+V-AS7PAHRjem69fL3@@%f%9uFi4Lw zWBk3Y%IJS#yIQfk#Tl6T8`vaoYD)Mo_CXA%h@DrECrpY*?0E9sGgaqc zwUtF9VFd0N06qmqShD;eHr%qg_nEz9T@ZH>BkUIjW+jkfTG{6+UwQ_l7`Dzvc2t3$ zaXW7`tGL_-NeCCSY{kp`efr9E*C)WeKvMt7#rTU{H*Ji5+1`55@3L=y@p%k5xA_qB zp&qu^nL_61;v%@dzXkG;sta;!fUAuBZ17$oPE_m#j7M`|YcD_Upy3X+tJl2u8sZWz zI9}X`ofB&+rk{K&PtOs|pjl)k;<47mE}rt4l`}nFO{E9h7fziDKth1!vSXF0hhSQ8 zOMUsEsU6gB=Lx@z{rt5XdYMJgEq9CTtH27|p0eTgcuR6L`7KD1UD`ux-cwJ@Q#_PP z0xb^KVVbU>s`VLJs&==NOzOdFst43#dINW(Xt%*TNVh>obtK1aI5F5fFnb2!qUaWfj5L+4 zy=mGkwFH{cC2es^&0ug7~tEdfJJfY9{a(0iHcRz z^R06au}|J1S`lWjvrXi?Ubr8GgxvuXKHWu8^V;d=0+!vuvLQtE_uni_>hvhgHGA<7 zZ{M+in25!eQ#h?V$j;QVA*@qoq;+t8V9fq=tvvz8BF(a&Y|}uhu7Ij5cHri(ri(9F zwkQp_xzB`MqWxgy?5W?V81iemL)p37l0clS{jXh*^P8hTf@=)JmIwUtsz5Shrx7++ z-Z08~^+oMO_uqN^8`}Sm!|Ot;k&YHoy+k}J-^mec(i&vVSGge z84QHvpFe{5?fsvCKy3%cXX~-AajQJyS~Ap8{-q4Rjy;{&8AO3=#deOB`P;uz!9zpb zCpUPBItRSf-XV6Q$|F)qBL5_A|EhR3+$}1fD}B@8Kl1# z20%ZIIMX|KSldc)`pizo82$|m;-173Zot_Saq08zwUMIfzXLtWbO(8`^3hLr#dp4e zczOe}Ku@~4S9m7o7B)_`%{b77^W&nik4P3%5=WHZAM#I)GR{0fV~Km*Tv7pML8jeM zy^V9C+WZCpH-ipP%|$-uUmuVUN_ShGw{RPL+-JP?5q+*L64f|B=r~~JQ^5}(e1#ft zmNmdS$a<3^#41%G+~$Av7?u}t5_!D2a3$T+(vbN0 zfM1*{zTqpP?i~e9H(HYY^(W*0Guqm>GOi3{aH{UP z#U`NotrHCIZ=j_UAF9`=naNk=9cjYlgJ^VOS%98cp`YlY8>4N4wdx`p#?^+GfqINr zvL>iVy(1EoFl8e|Ej4*erX*EdL0(KYE-|`oFB=NRJ33?EU(JNN`wed}1l?E7`}m=S zs~c9k*j(rQEk$F;zOWPGV*gM6D;%Ba9!fCEEXCK@`Q4rgQSc@l-{Bl%?;cjg2mL*B zpd$P}3c&cT$#y8H7KPDyBSc5)k6-MjH<)G{+uZ*wvWuNUCFJl(QV#v5ln^()qY?@x z;jg5rp(Hy{>;0DH;2kRe9$UJXl~?5AE>(mp zuF708O=CyZz6R1RuKKcO?7n8+)9AkKt2F;0^{FQLbd7oy{``La2Zid{d{d}E6OET| zU35YAe!Iza)Aqbff?Hl5VbFDM>45qAxU>{DcYx458M9u|>`9YVS?D-e z`$iCr?-1!<@0Z)=C;1KVUgFVUjMO z&&NdPn*1~w-MT&T1P2g9yNIGJb38!+(KP15iOXciMB zuc%sA=X>!Yd!>byY0!e(ySt2P+J$McENNkT5Kadp>*1x10PUK?4raz!bMtE^G^?TR z4?KOV!(k_@AYlcwb_X~IXen_L0l2)@_^NjT$lj$t=(8CBxL(Cy+Yjc)Jja$mBWVGA z@$Fuyw#tp>oW5T05TBnD#EWoT@ge>9( z>T_s=oQaY@4wBOt#%OaKuJI1J8MEku+?yvHm0Qp<#Yb?T*y1>Puva_oRG}O9395hn z5iC^|*dPbwKUb~tRy$^GCGu@~%qM*Farh`+l6sxAgVHzYV3~S}yZZ}8+rb^sc8ehH z^eHU>G>{z+Zk6o5r`Y;JT28ceFgm83cosE%q0c=Dz7j6KiCdIhqQgDTZfsEZNImLncrEPd!yP&tEV_ z3v9~!SD+2AT`vXOYD<`b9H`>gh)eUwYAAUap}6W+8ag`Ur=jwwpcrK>RJYP?J#Ohm zfJU}_R*o7ne8T{iE4X5upY;@3fcp>(UL$scBd+izIim@4cOXku&6qDWjSyzohb;|K zTZ~ z`{_VAFbQ*?SRN!y!+b=EKWd;H$FP>+FN_|&th1m0uTM)|Mkc1qsQms`@rl_IFUyT` zD_I?&nE#k?jVX4pw}~@fpB&t2E-?r20+3gLhZ$678S#JbK~E`uhHL(`zG%rSN=}ze z?pIKPuUA?TeJfCYCR6_!e%L|q`?wuXLF<%YLE6jW0No@4c#XO zcroQLO}mE&+QiBIqSjPpawv$kY>}=&n>eQXoTciPwbqB8RNKpU;uDS?b8-KU)s7Tf z+Awz~6>C#>LJKeRL)C_9->F7{>@A-;hZsg zf5?EQ(LG^}@ratKfDY!`?0WMdkL{Kk(jz1Aq@Ot??$?~VgE^g>7^!Lr(LT!+|67cb zJrWZ`)Qz~9x?$G}FP6A9A6UuB{`^r1*-84D;WogzE{7}iXQ5pb*|^>Lq;Rm_5XyGi zcmAHL&iCa-9uc$Pj>))_B!wYN;^19<1KJOd^HDs{z&>HDeyy4?T6kZn?sGevGs2j4 z7*L(xG_963)1UT^*x21d%;I$1wMp2Td{X^Rs@rGIbz@-<+DP-bV7cs}=p)S!Zd?d% z!Vfju;AqZAw&1KSb{%u@+#FNiJVd#jF#8thx&EViGPR7m+%=6}?S;FyP>twP#;F_o zsDZ~Do{Un9^^+$KTH?)%D?Vsne_=5zbNa zY5F51e~RTa9Q$B$Tjw7FTDLXEz^RZU5m~>UU0;LIvvr?4pnRpQaqtoQIWS-axLwjBjg%F{b|RTL}>cB zwx_GwX!1gpM-wg-mwW~F57fqvHmd3S=Q6n$psRH3hhGzC6!=Wx;Jepj&opsU@a@r} zwdU1!y-SwkBpWN}O$Yb-ky#rl#K z%yI)d&zt8xK}D9EsXjd|4v3Ue425^&-j7pVBpd+*6n`lmw}UT@4^itXjs|As|4d z(wie1Jlnh7(5r^FW!w42f(IUeKuFg%V`Bc^Njh6-Uupy?yJkDzU=HmBXkE`;qrFvE zc{IW58!*OCyn+~4l$4kbuZWbmU8gEaj|ld!1ou0aHGK3C?z@X&74Kw$bmDB@=Ch&41@2UY2;Dr$=qve0(I8 zRoVNWu&N7qY^!7c-N2GxV66U(W?t2`7o?4mf83Q=KnysW;yErm1YL}sHEO;CY$UZn z7CNC2y7|JT_FvaWYvIh5aSEm8wQCaagZ$tSz^~JK-<(CK=SYiVJEF9-@zZoGI4XF~ zR;m(H@dbPDcTp;?iX95kR`uvbVUu~h{fo`jm?wCF>ynf(;|XGz6%P81W!TMB02s8u z7~4VfzGUb>D1O6nCRX?5zg=21z~tT;8DcC!uzf&1KlqhUlSLM!5|hr+SNNh)?YdXg z`pq_>qI@*h`doj@^5HAHqX*d)J4~m~lQ$!^Q#{Y^g|dDMswL1Xo7P@ty%cB@wU%)< z*#NSq9Kt`MP_++wMcWW7NvUgK&#zSb``aP+;s6k3fkgL^qPsiYyl$cF@mJUSPFCHE z5q4UdQwd%C2^Vy42zDOor);xC!?nj7FkS^Id2iO6+sM&_)-iENVuyNzRrFr0an%{g zG8S&dFuKrF6SZ7-2UY~o2jydYdY1Ub`B-0u>gvhYE0CJNKA~VQhV?VgdU!0(dX}Bh~@<5&&HsEI(jV+z09<(@mv22n<3;5`qc>ID>x_KDD zG3oimCvk+ZK0xu99eGg%-bmokmW1C#1<1F&Dj&1M1mzBzXW9=2s~SE@&>c4pX$(8O z5{~hWVZq+6e3Wq@^(SL|ra?0qoSgW|!B9!m*Lc}?PBZ|;hWm>9Ce;mt9ew0TCT8h> z4NV42z+Uao%@zb3xinPN;-EZ;3uOXD;M(|N>lRE!0MqiPA5*lMk@S2-)0SZ??55Bu zK8n#)Fp6{8WfoI_8Uo|S@7$(j5jTvh14Ye#eBDbTeT?EcA%Nh@h%b^6uCkIINnUB8 zBWt+)!*ZXx{dxb~qiXx{XDcbIr;2u_#3?e#PTs|K5$KT__cmBB+K50Sp6*ggR`i(lELF?@d$mjZP}GtIj^ zY)t78KSV;Asx%2(!itI{zCotlOVz z`;^-ep6Mg)RIO}w@Q|HSbw<}X&t%&W$l zVo*cWKVB?bg3gcTM2MdJX5)Sj3Y>0iOHp6n39b9|I9D2pek7cpmH33xF$bO|I7`=@ zN>Sdxk`^MeWRTSSM|T_BHB%=l2;7l>c|DW+Fr+Hy|EGDHQlWZ4u0BloR2T|Kt}B(B zF*_-8BeLWjx!=*Z2DGu2an|a;bCn(<IU5Y&di2jBjPHBSbm?4H=tzmVF zk3s{lEA-=gXEC{+%D6b`B532-$S$dNz5zT)Oqrz8LBdNC!lMnyb)@(Z+kUOYIcU`x{Q zsip}5w#wBDiZU0WJ1E=A-sQ$svsuOp4m{JwIl2kS>jI8NqmSYyJoHki(C&ij$KvX* zk*?7RX|Q6Uv(pRh^l$``{-EB4_2EHvPe&Njt-8nWKb!l*y|44t2YeHSj#ZNhln}{& zM@1T?b2FTx2Sm*;!s_dW@BXm&GtE4#ua~h~yxH!^3YLN2DEh90TSNo>{08vfQSw5! zXt~TwMH`eHAXiPgk6SS`swrjLea%6;zuUy{Je@TaI~MqYZc%z7WJ52<=~KRWW+%eG z6P0^?Od-lwAhaYiTwG2yPjb>V;oP_9J+w1;81G>HF3S%u=N|sRZ676l+SgbU?mbTx zck8O^;$Eu7n&*UA8W5+hI=33B%JIx(O}*WrH=SX=D&%M7iq=+W>gvDgwVrqG#DEGf>)(W(=QFGTqQid#V^^ zl>e2E^SlGGNci-oT=_*b2RcZ%amuL)l#ozSTnx(~c+;>|dLjeOheN*ERF4h=G?+VA z2CB;Ao2HU8ty@;ly?8|I=caxD2c1i6E+aR7kvuLSqhhz1jLYm;|ZQ}8}Dte>nE}n!Ri+wtO%9Q`dE2FHXRsE= zpkG1Gn>xmyOG^hAa~B`ZrCaC&r~fC3>tmq~RhRXX z9n*-N-eP0QFg))#nN|x zCcILtNwbA=*16VMQ&CEYp@B5NM}usV6GW)Lw=9!X6X<#3r7-5X?u=uJx9)9-G)Qrm zR`oaH$4hAqPQky+trLn4Vp1o@_)azkh;?7Eez$C~Cki2lf7v<1SofcdcUIJFVFuD_6kF@6|ZXx_#Otor0BH41`R25OxX-(EsJ71I8_I*Yv7U0yhF7*!!oQpNUR-0PqR5uhMAR| z0@aFCB#~!V(`5gFg-COL5Y~qJt_E_uG;u%bwoBLN`F<6W9hHH3J1+xSLN|H-rtMO< zg{U((GP%FMwY*J<*S7~Wjp)GXQm*2IO87p?Wv{ND!2$L*yC4%q8(YWW7wGz&>Ti7) zc7k(lT=bh2G$iqnCU^w9;Rttkl=Xy%_P)VOj{BU89k?}WL{5T}(`;C0w2R9Iiz8%= zND{9tWabJA1E1VZe+zugogzASszVW`CQY8Pi$FXy(S>7~sOa7Oe`wdw$<^3|&d zze1Sh86$^VCvBe%wgz zWpaEV!?-2<(L!o%h@l%yEu0b4ULAe1H;FH4L~2g&Ke&&z?gOMa$@W$o`Ttq6Fak!& z9C0wR$-#gZdhZ7DiATGD3XkAMPYT6_QJ+q?5#Hk@h-9K6o#zOD*us`wBV3vXXzuLV zvp*R@zjJ2ZR}E=YymI}Gm+|uHQjcLx_W;`gkeOp}GYIC9U$p6eX!}E?G=-nP?@i-o zOv$Rz#;94kJyd?(huBVncG${@{1bmJ!WP?&wQ-Fm%+0Vo`|jC;jISWqsKzxmnZ$Lb!nM+Zr=Q!K zh{28q$0*B~K4Dqj>fbazYxSNwqnnvj^EA-X8)p5(qs#CjTKB7P+fbvGmNkJ^U5|f^ z6_9K1JJou-bY38A>Sx)fM`dGa^T%Tdl{Pi#0REyn-HSc+K!84=C5C!$*3_!_HjsRv zh1FpFVwjvY8R&;f?1DZm26McKd@wKhIsKzYh-6v;YHw(7!Fip;JEInGGy8jpQYPch zdlGMvxE^s4l^^OArl#2mlAt3E>F~yd+y{Sa$@a-bv8^O!I-K=xoQ1Sph^la26V#8Q zbY#jS8E#yf_PSxZ>;CM-%ENOF&+KK1q5$&7@NmSs&M!`?P-n7K$T03X;|Jr&0j6$) zGf%)n{Yyagd69ijHQCYIQS`_HzO4<1p(9;jwKWdxY^RAWYoX3YtY>egJTD*ibrna& z>+GH46qVG=tfUlmz}%ib9tg)E@7Ji}T;#3)F;hy13j<@Z%>)qHZb}1d{*{i&UFadX zah=e&4PBFwUU2(kZryQloa8CaFU`PP2&%DR(O#A97&JRKn$Ke1q|H^FX~ukEXNNmS?WFqu z^>Qj=2L9NJ6g1qfl7y6u7>~B)+TAiBOi>PWFGqc3guOo=xQC8m0!Hp*@Mb|1hO!AM zdcnQq=sgf3*?R#weal7#UsE!fooKv=`E!b)n@hl=6o5O(p43d7)o7~>7m*cl)qes2 z4fVa;2k9&bF=Z=bk3h)-#!QD%(Iohun|7zhzTy^(bI>jFxDl&{yr}Z2ddH{0*hX5^ zj5*T=Z1MOjr_j=ie6hQ)^zSESE3G-zC>AW$9cR8|ZJm%*7#f7vSC!L+K-N zgHy#V!@&sehvN5Z_0u@~m-<0DdRNoDmKBN8#%9!cG(ESO1$6q2Tx|&9{%}ZxBLVi_ z#^Un-kqt;PUUI#VC)7_b#jVb9(iNJq4%)ev*eRmX!t$ZL`=D@`>K|Eo+p!~TeqszC zowh%by94LYTCA z0+&UPk!7O!v$cJcgb!%cCaWG?`TtzQY5fQE#h25QKB0p)(I-?8lj6xz_NV71f?98! zNd)n#3Y!h&NqT&;y{!yQKS4(K7 z@V-@vGcu%uDh=YWOe;_qxk`TnD(lZ`f`X|Vs8#bldD-vE>{pDFj$id7@a$83bDPa( zjlF5`TxtC|5kcazS4mzWXG`rn2JsilQ=lK8g=fi_asH;WuxXBV>@mv`1Fl!s@ZUJu z&0$7RpzbZj_peZK>pJOXXk%pkvOAbrns`}+A=5=%iF-&`XUa`{KyWMLXL&_HG^MBX< zMYTj%+caPo9TrENHHT`}7vwwFZD=FTdMKI$Nz{uj?*UlH zFYFG_yiSUZRkp8#EhU(!vT2OVe?Sfic9b&RCv_G;!-+dH&GNiGZ$l-A$7;8=;oK%@ zHoVg%=)%WTZ^O}?)DN6w9<^s(IxoZbpJV6jPtU{q@zO$e=I{!Raex7wQQ&uNAX9q=8>VB`W+;xnTdf^U=wML?%d)Xkv(++;Sz$B;g zK+?FafO<0|)WCNPxnYcY>tPt#p}Ps2p6N(-Yb=#zF(PVr6ta9hKh!|?fqy_z@q}}Y z;*G;LLa$Zx&6a;~wQkHF$e~$2Nrx`Wt0RWjQD=tTkj?qGDe6dpXl;fXiI^i=hYHyoU$T^Y|bEO+kw1zvpt-Vph6X0a`{Bc^&OaVN=o zdA5)A2s(zmj%iobpNY232Eh_L$u?+qnFU(_rIG?wv7bUU&P*z`=wz|(@40cnV(jXB z0bR$e3c-1nL0%hD)n)i7)u-_x5O5|v{7E>6vuO@Z6}g?y74Hr($2%##3q9)=ma)2x zDnKA>2c9eyJq4vKdpN zFVp$G71pgC9AQ+cT8J~3{a<#GCBlM6rxBqG6+eNr><+j;?3-S6QM|htoGn#?2GK-% zs;^?BXUuc_I!E|y6f_Yo+aT6Bn>(mst=J7b-$vB~ZqXov?F&EKOj=VKCg}+0bw=nG z-5xMR|02G_H?CYKP3%L*;N9%>cR*lba)DD0RXc+cqc#yeIjW5K#AP_AL|q8h`MsGV zM^EptX&=wGKAR7cN}fD{7oZh`)XeYKsOG_Cs1(HI8bDnar#=;{Y#7;Fv<$}`V8fU&JN&?8>#28o7>`iv- z4W%JsBu0J|lJ0VKpoH8)kI*(ugiQ&`wRec1s;G`dRraUKp#3@AdjX28!0dKf8-rz` zsi|mMM$b+NF(ph;YU~{Bsk%FMRVw0icMCa>^(Ya1_7mP|-c)KlEm&OA@=$RybXbh} zYZ$E^S7y1`q5PWi*ey9!L|!W`iS6(QD9hb+<<7!|ZL-z6F2eXCIa)yQ9t7~v7ag5h$)8&MnM0vDsq^d-f~hY zgT?*5QJa26uZK=fQh4Qg3#5SdGTqU#strS0iYUq{>)a9v_0$aXKiqYaLXhp}(Y4p^ z3R;>rq6t2pQjoSTyAePCc&PX_IUzz!CfT_s4}s5+3oMA2Av3`t92ppG%!uMnq&oHK z-yX6g%5evOi)VsM-y!oIy0cYu7U?6!XjxUWkXcJ*j@0eK5n01A-*(XDKZCT#^U9lbCmMS*mj%`lOE1gD-*B(&XFH{ju zi*kk--8`aKUZ#50Rbb2U)2)`>LZ>ZnEG0|A9LKx}(R@^ujMdiO!#pDH-dug0lR`VT zIlZ7dpGp$n7U%P_{t7+ot(w27n5qpaIOwm{W9}Ne7w8>Os3L-?`%bR2Z^QUKF@6tJ zOu*I7yKll!7}6#937y>ZKtUjjd$HXTbCp?U*`8ATWym!Pv2K&|zs@*?I0}sP_9F{L|NJr|CCuhn=jPO$*WX9LrQE|o};;kv-b(~-L z#@7H3I)kZmu-tV}t_R2VNbkicode&~sh`r<5cuK*cA5^;eJ%xkL$zACW}>vv!GC}q z#`^YUoWd5sd-Kg=v$LUpH~>e9_PV?fqw>Ja_;;y_Kvgw~hGvLU@QbZ?FkWiHm9gR! z9Lpok>0QPTumY{YXJ*GC*&E@5>n)cN(@X33bS?QX?a}l>hF>;Q4&gd!S>s`E;wY~s z*qoXZys;=OPTS1n@OFu2j&A>P594nh)wGV$GPp-~<{Io>H(GA%bVaDkBuhJiUu*w^ z5eIvcl6)vpiXLHY1sb$F4Q`JNF@|;LPN}4?n{f6(Gx5?P(*CW?QPt^w?oQ)7mE$-^ zWr>Z^gaN2%Ri~YOc3vD#QmF6yYO#bosdIP^jNcFc+RV zW}_u^NPA}tPw)ezEdCRIQ&QuyPhcZfit@+s`Eb?TcH#iVw8LWWB*Up4{k_{obFF*r zlkA2y9k$8^cG4i8_gUi_)FoN>h(MqS(!~^>l{=TJecZh1MUH5;gT|Yv>_OG++F`Bz ziU{zs*)f!x%b}%rwc(^rPl+j*dx??+k2Ddcq8)XrlMn5!_BVJ|+o%BC`;ckeg>v{8 z4nU(S883aKrb&lHH zfKQ7`yBg|U%w2#B{3seBp7Yk7@tki&HRKv6r|=3??s>d$x1S|hM z`~7E_pmaN-z7m(^*rRkd`Tmz{?SZmW{A*8W7CZ;ja?#GjxUN)4xkUAO?+9bjs`ZK(wINkYsHvE~mGdiF$^sFZ*-GDL^#cFesvTd1k=sP`j_b=+xmsPOTpey1mAuX` zhup$#+_jYF71)-IRBb(BMY7Q?M_Zn(8?j(vhsm5@(Egd41|(t4FySAbrGW1H0(c?E zpEkZE1TjPx1NAEdwC;~N1LBQ1F--5C4xhAB?xs2vTsvsLa0_~rJmVM9b=?<(0dser z&e4lIVPYg++!CvEe-8bUtU}7=Eyi=hjK}BOu*u(Ve`D;QY`Cbl^p!zT9q_Cw&g;sf z43m!Jox^E8WZX}+9E`DE+CbGO5Mz3<&;PuGsd0XP&8A)FvG5qW`2HY!i5J=t72Puf zMojYXx>3SoMqA=?ced^2J$f`S1cBvG~P?%uc2 z%y#2)$L<~AwKL7`JG){d2O_O~!R~PhMHCfs%#icC0yukN38}=RoHKNs#mP|h{gbPB zOl3XAm%3UOP4>y&OjxMxudEvjR^KX`^OXpCvVDEda)+OcueJ7YMxcy{IEFn0I0~6TI_&1|Vf#S_fs?04i zhM7CIoAysv9M}UT-IQPpp)d$fr-EwitF*jRSj7$Gu&?@P48zYAgvc&Hef+9+6`opq zyA2aH);W1w2$-d1-c`M%RCxR(+{fEZlwE_4voR|Vg*3d!#_69VCUU+|XHNvlsSsB^ z-?&}~cdgbb3r-#UEjNchTu?v|Fj=C_^R<*Z0EzFuiS5Onr0HPMz#>V1pX76|jSzLA zRQ1x+`f0Ij8vXJLhXk#-ASD|GfXvfR`Qm4UKMK)RlYtxY<6K!YBW-{oUyNMq?|FL~ z{C?+)RFkClC|;3;46CSRqq)VsYe|CEl&k1Q4$U>3rM!5BKgvb!2lG*S0Ql2hI|@16 z3b|gk+ER z32fv`u=pt||0ob*#I5#0ABsFF?LEa>EUt>#6KAf-kxB3oGsMTBUf5MF+R&!mH&r`l zv~i^fsm@XCNzWTR3Y}$yIT(o~Zq*8W&2rb03kLk8$Y{|Rw$q+K{o-$yBb3!L=qT0g z3(`D}=gm_GA`@x#tFUKX_Rj`ba_@nWfu+^G<~zQoa!Xv0_df9}+6lOX__%zLarZ_a zr5#^AAXa6*MsqNp?Z%=Hzv++a_OJq)n9@EtB2jetg6Py?4%A3oK>hCMYacS^0!#OW zvHS#I;yyLr;!j8$J2>i-ZPzGqS{MI)tL3JfH2n_dT$y3=vb?7};>-xkzIh4{o5m%| z^2#y!&tbwLIcK>~SIsgcu57i%fpw&XJHamSjOM$cqSD&n;(^$V<@@)MDrWC<&*88` z#cp2K$D!uOV*f|xi&(`xNLsd5~n(|eGyXaiaNrxCpve{vAsNp3P4QPj#u4~_m&~c!C&=Uq6-NTWdgBrjkmp#Hpl**-O#)`$B|qRB`1kUW%%6+_Ow)+n6fuM%M0x%Pli9Gg^7j%94ZYB zY%O%2X$5U?q$f}i(_*12t2NQ}RO`0AN_X$=nwsG1BbW*2$^i=Nq)30gQcNr_&nvmg z;oDT1^`pjCNg2ZqtBoU{pg^QWG6K%&ily(Uy~8B^io?*Fh%9+A)IrS8^9Ll7jR#4| zr$mbZuz!+;PKoT5fDg)=5J?{-#R;C=F%@+dWvc6#rO3;--j1EKo#xR4a5SSDS`Je*h5BIpBl;-rp>0`%Q7* z%Vku5Z7=EA_;TIM-?=~VS=0QhKdHNbt==La*Bf?2+qBHi^V)t4{LSEP!i@EuBx!gp zOk`BYl2+t4wv3n6X^@{B4X_so0Q9SJB&h%}w=}I274@1_R_#;vhvr;s0^vx7=p}q? zLs}|&eg?Ygs-~pUVn;aSsoh2*uQziiS>`=Y`C(rY&0-k}$*P}$MViApKoy`5rbvo0 zq89f!)BCADUF$X~+TmU-`{@9?W{yKbFo1<&bT-lIgszvl+DKK&T_L&$dpw>I#7Oxs z(U|!==H5H(vFS#-$8FrDSn<{vyozv?tkj2WLzXrZgElca%c*Y&=BqwuwJZS=rx>CO z)>A4Lya6I)FUpdMStw5#8Y@(W3~H~ zh*jZM7eqXN6fJk|d_qX)B#t8;A#s3*enTm=%B7CmV8YBU3k=luu2$S_$K2gwXd@rP z;?tAlY6S5LU_`@?N*rzeba7n6XsBW4M&+*K_S<9zS4+a3rIs6IR7(P>=B8H{gh7HS z*$jJcim1bb7YV5{CZ%k;r#e9BdRA;%6hD{~sm#zgt9jVgpD(ghd$d31|P|l@OwNMVx<45)YqAM?4#;GyE(| zXmI2)ag9N>RN82t%o9h?)!AV;g^z}cQW@U#quY^YKVG76Rook)K=GLS?;u~ac=3VV`aU7SJHb{9ZNS4Ilo zUa}Q^!z{OozOo|Ehzo<6te2ii(scz@H1LvW#rh}`(L-k?5g2tW>Bvb?DSQ&4yGnAv z$%UeKR(mYxI_D*=Wu>LO&1R0jO+2%UDc`1BD*xv&`hl=PSq5|m#ycjAUl?aO ztPFZpQo9A8{7&*K zKVj2x%OshN>j{cN$O*?+8M6r^3z54|^w(S$eg!GfB;|Hu(0BkcOS*igiTY6> z>Y&97(^#K!6MwZk`;P7H#uB0SF1dgzGn>&ge^8QMy=o6m$rnyiz%%H?-_f2Zkb^% z&C$kaok6v`AEs`dE4$i?Z6Ba&!^a39^cA*t0wL*bh)Cl3^q?FQ6q|`TKSjO8A;~37 z^3^ZqMu_CqccI{%cr!k!29&o+tWnLC?hup^Wq*_|+f8Kg2?u$_^6TPWr};x6qOac7 zO=$&(CTO?Odh12e=d9W3d3Pe}u<581%Uo03D;(3Rx|e?^n#Zf>+1M^Zi!vQ|<&69Z zEGh_H*T*ZIw=C_8Ny^#UWo2NPXH)m}eu{PKmJ6rsAOd76h=@f%R@Ph!zxpEs})_ENrSG`RWSeYrhrg7W#hbQiuj^L3$OxpmbNf`zN&7;@ zWF?~fW0>*lQM{kMF`W{5my>jyYBr?c{tYsp4dyp~zNIf^ROjIFOkQ0h>3vt2_!%~g zvW@UISK*9Zb9#6gdeDo*Gt5jV7p={oe>_CgZP1S$qJ{{uBe>@+w{g*Pa7h~IFT#dz zqOI-|6S)B^b*EIXp{&(*?)n()(p-Gfb%eUjykL$L>@{&vI3py~tn zakJ~SV3B6kf#!HAe7wXm#YUG;=*#FOwldd@b1LfSO(T&|H;s}l|u{CuM}Mh zg6mW!;?>vr_ILN1y@5Lq=lWDHSK%UiI{As2?jAlI9*axri8zbR1XkEkDZUZ&R|1op zp?XazQ;2?N6)ii>%^^%UBEr+sKKoV4mZ1ydEvZ&v6IJ; zM-h~4_kVikR9##%=+fF7h+`RuM!a=Em)w-QEymd*lG_9=&9-}&kVH5K4lwy5bI);vkAmqud`mAvjI?;kY#tV z!5j(y@m8Lm_eXl(LMOY{l)@m@cfRO>gYQKE!JRw6Uf$&Lv(fN>KApN15f(6KGtA6_*!tVfrnM^#4zd`Rgs&)Q$gNEMmfhrv@E zN=prA^6V4b&|+x9d&^7~YaeBC98xr)*b;*Y1=PZ@!%)zh|MUMh_XuIZ5-|N7TQpdB zuTz!LW>~HwC2SVgqK=M@K+02lpE&D)w*75x+F0;(+Q%8IN2rlk(Fa0r5Jl+X4ly|a zECVeV*n9KCW0~@)zNgQJDe#;NYLE5KZHSeLs0D1J-#1h|USin;gNGUgi_K9LI;mLLB#_K^h7 z#XmWJ<7e|M*(#~(K@UKFj2S13C4^((nXW}|sH6a8FBrrVm#s8QQiV&^Bf^CPOn! zmh@4J1-goV^Aivf(yqG8j_f0KnC0m0n4*F_TJ{-d!M;#+Gyo0Up{Au{9oxdHSR1<@ zI$B(KSq4HvmAC_!?LnCztbXsPJ5VM*N|UZ_!0gJ^22}oAD(awAbzsH?o1BGIYZfjz z9fabSDtFM=WQsa)+rYIV>Q8(-3^M%TyujlCE)f-?twEj|Gg8qdq}v#9SyE0hrea*i z78h%ya1Djtak6FZS>!+|y>z2^AMJg-dLU+`uxf*Jy;t>d(z+3P^^uW*y`)#+K1DVI z|4zsp5kSH|otz@iYl~5>W7Osl4($LZIb5d&dmZ@@BK;RBIX`OrIvMU1RNKlpIfbk7 zD$gFQTNdGxv*95vGMF2nk5nDK``Pf3uiX=r774wXrv0KTAEWH0hdCTO!-3aY=xo^g z2(xmt>xVT8H_VkWqr9<*e6M}Us7)L_&MsPhbdvNGq;`2BoE@-Jybsy7Cw8TK<@yc<*-EKqb=# zo>&iI?Lo-Kh3G-Qy$skadN;aEE-yIvf(l-LcNsFXDmupMJl8JTU~Dd`qr*uz#F@X3 zHV%wPYN+P#qC59C+hu0s@NB{GXb*VD}67iR5 z=u=!4CDI=i45FZjvUz~L3Tn#HPPP^YW|92i`k(@BVXe@Bs9RmkmzL=s$64hLus{X9 z#$?Hu)s3Xb9d|Ha{b06!DbCFs=h*@umgAvr7}H7YsaF3*uYiPH_k%k2#= z(?$#5jrEa+rwzihURgB9Ma!o%vu}_ZbEklzrSC|gcWJJf3eWDaaYv%0-s-5VHaTQn z=dF~r)+Hl zcE1bvC6zQ)nvFJBlyiE?9?x~(=vfi2JtaZf{9?NemXp&(;l4NOhkiQNtcOhe5|~GFhBfdr-{}#atW`)|C;| zoJx<2esXj21ZGys>liKVi)A6LX|IL+uP}}6?5^Yst0obq-=|vZ$)1~m7KR5F;^xsp zubB+etgcaSB^H{>fY1I)*+=laM_-;EE7=MCwJrZ15mo2yus;T|b^je(*@> z>puS!+V4N2DRtIwgZ9K)&)9?YgEee`4ZqPwSSF?GW==N(@L`;MECdSz&_)<+3}fGj zZ{m)R$IMnziA!yTC$~#~BKgkl*@AMCeXwl3C=`=0>RET~oogKj?c8C3W6C%i*!<3$ zx#kU6GGbR^nST#*Qgmrw_@4Wa^N?v$L zN-uo53=ta6k#Yd`ln18Zsn?Ap7{!F!myVm6p-i8$A8pl1;AQKGp&e*v8Z#Jd{-lGk~ zuNxLhkKV`hGDSPD*tGq@pu;-tjXPp;NG^N90!=PS3m6{l;#|^g!+N3V>ari~q?@V+ z4?sNdy!OFsVU9{o6Koy$`GkRVC5^E@3oJHwyLVLNA0%rV+&Tww`HkRP;ma2-oE@rO zu3TVcm;O=7A|}ml$e6=QX#fE7C8tPqFt}Vq^a~LY995cq(A=dV5^|Pw1UY9bH~iUc z35XG8XukS)UNzLo)pu^cuxUeLtJX-b{TLx695N8jr_sw`AfCV*B7blcByP|rl- zq#sF-2ms(5s@(FE@deKQJXx?=-9gJn$@|+<7VshkhTd0f@8gp9OA)J=I8MQ$_BKiy z2~w30W>n0F6h-;=-SlDF<7`U%XUoYF`5d(L#b`R_>#T9^@{pKF(k&cYqKWH(VC6>`A-2nZ*&`kE?* zoJyNHgI_g@Kdz-Fz~_advGeGrAfS0Tm}}MpkW*7cwv65*vKm|+y*)L*W0T|1sLT2W zY_)v_xYR!tU+l1aoUMz3(%6oI5%g6a$-xEy2$-Eqxt2iQU^1i_3==gvBs8l!@J;FZ z{z*OkMOO?5k65;U28FPb3CjCF0eMjhLUPZL390pI zpr}+zjkhF_v*HkU^9|iMXkyR5?8Z6r3e3l#+%LU^Mz(@=he(T%Ey7eRev7+I6ZK1y z7K#R-hpNjj(M&-~p>eqI;57?Yz2l`YVJiLbV^zAF$u!x!$?(xhW`t-Wa}N@by}2V- z@v1N|0}Z-?rfrdag<@#;?_h(OoOxa5CivbI8;gton<0lS|Bg3(@=Tl}ZrLJ#ecU+; z--5ZT2j1F%?DIXjW$pm0?G|ELb|=NT!Dh3>(E%gQ(TykIY7TVeD(c7kqjmkc1XA6eZZZqe#5hp%&d6im}WHs5tO`|VzIscpj z&DPIY(Z@VwlJ`|f^lV*I3v})HF8hjMaJkixQUSgGDxNg~UYUY+F|IxJJmHk;pJo{l zZfo-LSZ{Vh)|^(Y&R<9_))&ws-*a21R)&Wf{JjwAJ58P=FYVh=2w}3A7H1FdSlbZc zo>P1XC>IC(Vy$tD>*<;BI=3nCQEpL8Rcc<|ggTH%T`}H#$XNmhFZf z)u=t9nu^SfFZ47QTCEqmq+Xm;I6uo)xt31eRK1it#w=x3uJXaRt2L90Y@{TR&|BY7P)NhpIWi4MsmQ?^Z9wIHt%?ItWJ zMHFh(vl|w6hVpleHUWA*=$OO_Kz@yb=N00U|D=X$t>YmidZBRkdO=UmfBBkyw%UkP zEp3LeXf#+$~dy7a}AAa5Mk^iT^C zWw|4ufsZD6Uly(-+v10Yrt~iJlcdR`BP>Ff8(Io^aNL)C4Z}@bVwF897Yoy2IEyz7 zwu23J}aPB{4Lw_#CiJmuN_9$8`_{TPZ(SvadG<#DP zMii5$#?aqNMN3GJ@ZbE;8kehn!&eIMTseNp{#L8oi8xyeYj(tIO+8c$ zZ6$V5hVjJp;4RW;Ve&a;)6mKz)P0?aakB zgolnKV<@G3&6u!(kvhfW4p(>t6I?=z`w~!Z?J5d_;xmz03-!Wx?PXt%R~`#KWx9xR z+OExZ=+E~Qxg)N{n2H$ulXtDvEnU*__pKP0C-M_fPzT{ z@8Q4XgVdW>ox28SGzO-5j_`B-wT3(Y*50}*d1>Ndcm>4vx$r_y*3x`briXAsT@d?f zrjzzd(Wz}UWEo$P;UT>LBn9pz8E>MO)>E$e)63Qfz_!jxxHLubmr`GKpAcxj=#=u` zw*ajQ?(Bk(D{(j@ivhw|6vJ|Sv|SDCP3q$R?s=9h3;V(6gqJ8Y1BFLc%O)J5T?s!} z0o~j|xH$70vtyN-q$`H8m_ZdduIu0OJ=n@g^P`)3*}PrsUjnWm9OoS*-1VDE{G;YE z`=0VtF0BZHthpj;A#~A4OM^^3)W)EC~W-wwAK4(;o(&k{8%EXAkE2b+~cjH{8OX>Vt3lun?> zQxLzU*u}vnQJRAEG^k$bV5c!FG{nR~6n;13Aegdzy9rYh9gwj6-Dq{!+bNfOerimN-KNnWD}7hd4Y09 zJxBmI(4(|eh6hmY*kx(FspShQ0Cen+;twg$?b1A}2^r|jNLdmW)a~Z=s>Rf?q8#t4 zA8_vK2$6s1Hm%|--{Yr#n(Cf^NQ9zR$pxnwxL{5#?&gcsikZ*r43|D=9;E~RcG4&_ zeCH2`kiEoRc$sI>qFI6&XSFt&s;}%LzOtZwH0~tA#>pJ7PS$Pg>q++s8#u9tX)nym z_vB)CjRl~#N}D3vQM?3(jXhO_tp?I6bjUFUWyuhpj5mgE6@_6Q1*EG^VRg%FT;B3z z8pS8y+&7expw1?+qa?9YsDJp?qgDpUuM3SQH)yjV=Pw#w119Dmh+zYU(l{r{pUV}t z)3O+$KGy}=CQx}jn9p7~r3sWVib^17v?dE4V5B{wdSRpL$&aq74me99%z1qOE1-_(iooc0V@ z)s>~9r~}FaOeNjBNe!&9C+C|2FgQ|J&I-G6+Xd-lPF~44dYZ2loD~D&uyYO3^>68E z%sMCdcfW<->*JedETms~xC4qSi5ehzePM0T&ou4Fm{0#3YoioKD;Buc{(vj{B!y>B zq#$h$fq^XVdFGPirfv{#=uHrC8D7isqo&x&^QcziM42e(qZZ-t!KxY55VC?!=aCV| z4*`NJ>0mmv+oIML&`r6>NkMe9YO@A6few32Lg9BFOxavU+uzGtN9>9G`2)bu+6^T* zhi7VFjL;6EpJ8=8FpAlG57Rb5ZM6H&to*a;qoilNkB8(DZpDb8A9d|3zm|d;pP)+= zgA}PM9VJ_bef190_AiU*nXo+_Ijm_Te24-Ds&L$_MVh^D8Ekm7Y2-fP{9ZuLW0paE zm$?Gi`fxD2s9ccLrdLT@6=#vjE&3ixM~UV-Hu0e#(~)6#M3{Jhg~veWkRLqcSxG?T zW9tyRgW9J-kuT^#Fxd-DBIzRWv@4QLK?3Jrro0xyk`1Vd&nj%5IB{T}V`P{&NY7il zZj2SJpj2M62w!5R_1UfT%mVdSdNu6_b)|n(nrM4L9b7g6R1{-S{dSAY6Gt@yMaL4s zYenWg2IID6s7RzVY75K5z@|AG^jfp-qkZNeqraJz!3L~NQ@Amf!tuEqh~Vli4JRnh z&y2C?l~UyhVV0wLE)x#_Xjp^mNj7iWrPU!Gb9G^c;mK7!P$O41hvI&C5UQ-Q?3Vd+ ze10iTP!cyGyg=chFGj^KVj@cMuQzLx;J!!~<-|HNA)0qbzy;KAoW~~RHyH5Ji##By zhamJ1@L}OcuW&N;IXa}7LNZYww#jZPM-7-}j)lFekbGTf>ySIHumoD>h|CrnQPy=u zt(d93HXo_eIm}Z>X^B6haEByYgDg=eT$4_X;jacbNjAV9UxcTNh~bC@fBhrzCf54! z6xN!e{r%=941+i@$?F30fB?bZ>}BXd!PgxmB+C;Hk7QGX+FtHsrUta zM2=2$7-Ks86c;HE(3NG*yf^ZlDCuUBb1cU9WQJ;nx0gu%Tkx+jp@Mb3u&$UGgQbUW zPXR(oKTg#vB|z*1M>kD%(o#Mo*H~CTz>1s%z;fhC$tj<~r@(Kd1Ul+&YJS5{i{ZMY zRXcK5fs51v1LgltNvgp+Me2t7cmSc!0)Fs^&rH`TQart;uSrkXhZ_3HZnClfQd;?v`2kyS=)lka}?Qn#Liy5jvNQ_Td~Qjg^gd@ur_Spl#8?CqinxbU}k8wrfIG-SF{Q;L>` z#&xP;P2mwYXxZ_4Li1tM*$0@CVDlKo)XMP^3+~S|F#hA$RNW;U2}B&qEKYBN2+8vM zX~Ihf)kZ>8E&##XFI7;;n0Nwz$aT97w%T; z`^Q=Nk#>q8SNd5o`dTT`RcM-DY-u86qCw6bonE)kl+}a^wy$;on1NhC&U#{Deam*zkjtHfWc}m>M={952c&-UBUrg}4-gPewdT z;2kC^#7#cBeN>)v5X{d|xs4x~)o(E~*-b~(I?%JS`f5!N*&8`RwUw)D0_4l_Niso$ z>v8AaWY3zZ#c@{UtqeWU)j3%cLDzr{qI(j0u1Zp6F_B0N(I7S16Vu$P2CO+&BrBd zFBoFl{?v4iQO^aiHbz}HX`B?KQvs0;L=WmA-+}^ue+xrNdG5Q(WbJ)OHLRvgrn%SiU7qs zRQ7HUkI%?nY^OiT=3n6~K?>>*1tFW33-;F$NXumNQ8wrnuVSz^g()M@e*q5VNmgU2 zi6#^Gv=J(Pz>7DSa)+qy0jj&>^M2d|4Q_d?Y*C8pq(HPE9(Hs7sW#rk9B04WUd%M4 z;6Pyp|DDf^WeeNP%*tzq-{4dHv3Ks1`}tyyTii2*dK#gq>$9m|RHRe$Daz?hIxufc z9}_0-AnBITtCLZTM5NRD!3@>`C7#E6&jq~K7K?s%gn^BZ(VGVBmt8^VPVt}=XQY6@ zPpX-;Xp_)cDY*eG5))Bn-z>t#-XldjxWaF?HEU4*D@Gp@+L$Eql*pDX34b!WQcwlV zn(Jwi9TxM=pU33TMuL5sg9^Zs9a#_XlOzJhbY*Szvuw*jpcQ27r!)9op;%+jcijn zH=|}xh!ro1E?#v|`*}Wq)TAIzq+QX{-}nOzwVCU-=w8$%MyH_jNtk4*VTDWkcJwn( z(}VZmCtN}L7r2I&l;Rs;gF@sv?-ikeXM9IvEpSxC;HVH&|wHl zyX=}Kwwh)_uLSXcG~~g0WR%d?4alj7NhI-0l6m|W@H0xHM&XvTGS}!ot`UI_LZQDj z+BSzU?(9p#aYoe!`0PbhYwB3h{u3G=K2$saE&lp#&iuuC}1bsfB5b+(WM2envyO=C_gXD@z>Syp`CX)-(^IDoLs}3}_!t zyI^BJI?Sl8n6KHUMjvi94rpku14hqqSQ_qZr`IB?+Bk-u6A){RM!DpzCUz&R0XaI+ zI7y0%cS=I$Yi~s6hgw#VMLy+9EV<$RnHQ!O${H)PwO+Ml=5i8f8leJ z$!;nJD4euBH`~*i5wza{xwG(n{m;OF$X_n33^VI!R5jU#>A;RX$&Z zcEJIT@_y`Hbk>y*{MyZwSr<%8URaEbwCLhl;)(&6E00jFTP^H2O@tK$`Tk_YDzT|A zPphzx^Rf(4uT>JNvGELKPQl5*+!K3g?jS2?H25?Toa@?$eo^DtLR=QBbYo{+j`$q6pjsBm>1XLI`qT%7N(Y`a5^)Hce6u( z@GZXjW|AE;p;Gy4J*Zv>%Z5|>XxzWZe=Pw0Bc zU`>ja!uB4NvnY%3EwxAmhnXEPkK>-UY?2MZ9HA zw;x-~7k}}26o$6w3^L%1*HO?P+{Hr%)EO0f2p25)J~To0e1sp}^zt%T@m^qkLYB!( zH_Hz^RCKjsvOnd^W|MNHXs=si1s-#8xr0Hh9Z6C@36j$&m~g;SaD{9j;^P{T<)9WY z7H~@!?UL}FUq@1ISYq%)p03b>?bs^9mmDR|3VftRX+tXx93kK2Vv@p?^@SiiyYX4q zT5}&+BJ90&5on^@HHtx68n!84+l~#_4m0O}QS7Q1yifSl7=X-dcoTG=q>;O6UJHAe zUjIhzkoF$YnnoTHj%>!`$WmPeEoY^t$3p~{pKvf`Qj%6V-PDVJd3X2#6t{?rxFq|S zCWii>boUXLP=pC@q0Y+DSh**4D&r&1w-wgr0h>}^AHRAJaq1nLvO7*G&-?k^XNp0b zy&*fe+R#LZXvI2*sWm+7SuUt+kZByRNXG(A#~U(tZg?KUxBz;rA2?lRk~TxpDc~3N6pp(~9)ST!VzM$wTa$r0+Fw&9F6+o(osM7pS?S$MJnC~|3q8o)! z++x9}fKF(TH4~^)^Toe$pJ(6-;JOWFW}KyA|8K>EyJ;#gY~AAamS()hW=+eLI3|7w zkas}eCUSV&g7j}k`HiaT&q~3jRx&f%8Ee5dkh8fNj_ z`k&tf`JQyhumhFTx3Livu$pT%m@txbhy zezY`TwCL9gLy*0R)IzWy#>YralweMl{xEbN+zi|F%O(?o&LZfi?W(7 zu0z`0>lTb0gRYG%NBPbk#9y{8#~sw}bC*tc%>f94C5TIhO_*RVc6Dlz&*ow3936Z$Bk$4_@psvA|lC(26DrJ*taE&zIzecV{rxLo;x>;@~b)~=3&o_or|5Uij) zjlmphC2X*UyB|z8is-oyU4Y)%V}lU<^k)NB5xN-**xSCa$1b59j!8C#1JEu(_-255 z^ffz$K$#^wz8pmj77p;@3`4u2xN4*yK6x%*ZESHqj$6qKStDFw*ZxRx!^(%eVrtaO zVJ6oLHL)DXl+m)^n9pv5)HNLzAl3xeem@(xO*jpQP5#5P1~^o)^mtNI;I>u7YQHz@K`&SD0O$et3DpHx1 zYlQ1aiL-EjY(vMK&gjF56FM!BKzS-?jRjJqzA!`OCL3Zcxnmq&M66x)E5$8#K=8j zryo@~Kqg$s*~NO)ioBr6Z@&P@WQ1frexrE_&d4KJ?akMip$)SHrPX{^KKgUP%5-G% zQ`X5zO~*99QF*^6a5y>sQ{fyMwvn%~C8zqex|$C*=NAvNW=}H^ZMZUWwtrm|>9ayP z`jg4MGRj;T^nVFKVheKN5PIJqCPPw2Q`W0|kppg1hXFr?3>m{g|9h=wu2&7f!L|;L zDmyH(+7V)$g}KKB2v`NAny4_E=C%WTHhvU)Zk}L?TlqBhqejA-eB>SE`bO}Cwce1< z=`LR{8i~3OUirUmaux^Gu}7KvcQZ@~`9(AC&?<}yOTx+59eDQ60x}$g))lRZd{jM`oHgG|A4)4g)2>C{jL2?=$PLP?+Oiyy6=jUKEh;=uX#7}{?l4>BLQ>;qs2X_ z?EO5ZBOI1QheIwYTHz-v{P`Be_j5?00ml;b{Ec#Sf$@1P>PMz@DX!y<%Jp_5VeLHS z$N9oF88|=l6D7zBtdBza-ni)eH~wl{Y%&P*SzBLKeT9-j?{}b%LYS>!P|>bWMZRo< z@Z(_)KyQP98W3DvmMF}7CJDO-B`RKv@bM`CerZjCk1fJ|CGZ~T-vBqk;cd{*n}$P~ zjFbwL)0DmZTk}cvmdZ=4>0>O;kDZf2H}f-Oj~aah31jOFq9BHC>Pa4DYaLd z8ZEnAm?W-T65R-I%}p>)6wgKYR(p(_0Lpos+C;Y&DuK+9pqDUxJb>7%AQ>OkV1jQodJQP@Oi*R`p{dl_s zSX_vT{T!5{Uj(Ap3D=;;Z!@3DlPz~D^Ap^w&xoOYZ9`!Nj@-zMEBfbd-FVLcD0rCP zQ5vh($VRCPFr|16TeHwgZN82THbLuMV$m17`uVB;?2vUr=Y^)0N+{LK=L^eVz_`D} z?%S(5c`IOdLyM~kq2xu7I@gg*@zl@ZT-L%)lL-D(D9u$4*qoh@jd3;wK#okK4Ey1d zMf0wQ@qgr$E5{=_a{oovT_y~NKU79y@}`G|q#(}rny-3`Mc?L+6Gthrd5OMsfbJ>{ zRs0v2hIV@o_;^zzUCW{k_+J4*fNo<>iR}M7O;JuWi6LJ+_D>hlQDy0xhE!*VY*S~t zs?|aMrB6{Dm09E@*}{G^?B3aoc@>A6IIQn;;|5umdgF}k3=Pw;b(KYqJIpF7GR#dG zA(N7gwmzD0X}M#^W~lAF{0GvFY|-Q4fXJU+@|HxgwEhbjv#&1}>@ks(LY*~()y zn+&II=5Ty=3#>$DgeIca9G3H<*={s5AsF`H2MRfFnc;sTL5{pzk&ET1&6<1EY5)s+ zdeU?g^!DE9FRdeq7&gv-Yr2~W%MuChfgtl0r1C;No2XVBPZp_7A2ETQ_{z;A_|vD5 zm4ZxbLG&ntg{ASB!bLdw4xFgr6aQ>0m<8iIs)wnicZ94>GWC`+lOq8ps+f7EI^5zg zwJx6eWrN;%KS(O+Lv7UN-^}=Fi1P^z6pzEz{cRC$pq>3nnfOik1wJ`yG2%iwvuXn) zGr&_i(ea`!6u(7qW`=q4(%0Lg@-VY^TC`6*LVT6D(~K0zD$psOsSI7Fu_a#2D}zGu zjRb2Di!8Nr7A#ksN07;$hJtY+CnGa@oeVn+FBgc10fB5H>k@1B+^W;g!3VK(?wAH# zyW$EP(M|ibW?Y*mm;n^}aMDcJ^XTiT@SgWofrHFNwa+4Tu#PTLzPMuZPH)f?R!1rDLwdQ@_aF{E zZ^>k7KXY0ysnkW>i*%tAhpM?R{x1YG*`a zu)8LiJ;ccQIL#&ZBAoa$Ncb2Vvg@F}=p%c_B9UukyIbQQ+9b*@aN)>-Ud+KQISn_z zQ)|vp+fSuWC%Fo2!FyGBBq&2Pz7@42qAnlV5SqIXN3XqQz4kkRNg}X+CXN9yQkJ7G z&k#(SCHVaDj_yI&%~5#bRRf*@G*0J0KSVftp3p7AQz}G%8Bw-evRDio0(&tDvLtyo zgZ*sEcHDUk)~y4+?c%=ZRpbie#f?U8!r&7>P}2-WdHi&_UVDs~xE-$Y$>;0`qNh2TS-;wF0igqm2}w;3rYw<|+^VOeKv54y`gtz!QbTvh68&PC-Pkv~?T^)6)5zke6ebgT#t~G-R?OH{^NMeDuVFLI>Zh_qkufi<`%F<*>+e}~k#2EY5NonD6lr}LAecZLQ~qf(aC%s< zkfQRNEm2*E4+||(-oc*H3EA@aZcVzohKKD_2}iI?+6m_*V^L_A95cD4)%|8!hRR`7 zlVr8@9=`c+&HWzslPPfZ++ph9a7Xfx`3D}(t#GN$wEF9?@X|Ea&pVd?w}~)^U#9@H z`yNMDb0IBnz&WH_yP|;hacy_KJ@-2?mS%huZ_c8`M>PGTTb0k6U>Jobe6(mVRu7b{ zVCfxCuhYnWss*(xThXdg*>>zE>1?grK`kB@0r!=Q+BoYM9}b^4?n$@N+p6Xm&Gt5H zs)j$-Q0D6q#?^lVVS_o5LH2Z?JUu+u;w0HO&5Mjo@~$CkYq9+C<+Qj6c_=+gm;O}y z-Ri+IwJEwkSyF-iBi#Crc1rWsnv>w43tpnZ<|7n+)mPu_04{;i-vw)y%b%0yVl*fa zvZHkenVTXw)r?=%l@1|(3|0@N&L&+|y~J#9ZEF3^d^(2Pm3R@c9(NCDjoQf<1FGOR7T{U^=j;_e7Ui;9Jazg&3OX}DbXcE?>+ZFfaGt#^Rsg(W zmQ5i##rLoW0CX#Yq(a8Er4nuGYFck!Be{U#%--8t^Cv~orTTV4|VkpQ=9Q>k)H}P zo&)1$j@fB?!Rby;15@SBR^jTz6M@DMXe&pKlzKo zky?2ve&1AWi}PWkw$I-75lItah&9%dh#1icTz%o$$|3wUywgX}1}N|huL14TgoLXO zT$Z)p0tU#v=wE%^*pZ3B4 z%3zzcf<7Wo*M$CbaI~lf!cGx6R!4kgh8HVqr3jS8rF*p+i59(O$`M1^C|T6j?aZK;zb++v1F}!s_X= zODf_E_Hx7>L#$>`7>j(1314*=v)e)DPs^dbJa8;uAM~1}6^-(LNe&##lkM}Onnd_Z{TI4Q0{8TKkx7j=x4j;(WR#KcU|WYg39 zJdy;J!ZVU1b9A4yKd?=X+FbPOMbH&Y`#s!jII8zovUDacbZIMrI94NUm@jf-Pf32in1X zr(=6J`rNcs73nB)Wgjvt-c0qD3}5F5G6+YSA-D(s|>1JI2X868aTSJfa*TM`7IDnBScG(LBQ-x|PXoc) zUj*C4;}l%G8i6uxj;GA1IF6|;C&d{@iY~8WlbK?hQKds6i?4J8ER!aSmK#d_&xw3}mp@;izd(6JUFc+PI?tMEMl&->_$=>X#gW zA|t!3`tBh+Cy5fFt4A4(I$_bgK*1q{<;@aYxb-Nl&XF9<09hPXGlRGFD;}KSqZv4n zt2`FJmYSyW`-B@N$JHqm?n$+vDD4|Ep#M_TeaK?mKe;wRiSf*ne&W{&QH;++RLX44 zM2i8mwL?neGn*OuE67GS5kz$$XX_%ixUZ(t^&(w;Qa!4#R$x0RB;3jH z?t>{nZvPat5U6q3U56|hmeTiH!CmV{pW=Td_D)_*!~Ssj@^^gRg+MOghOgwxe`$r4 ze_IUj_*n5|)-bE+KV)?V>IT(yycmyk2&=)Y2HrtjC4YfM~ zry?|N%O7JqFVYl7RC6d+i)9Urt{u3Zb-h_mP1~czTT)S*Ht5~lq?|pF^9u9AG?Fe4 zbpKqk(3^5W#K(HgXH@1!hV~6~UHU)~^poo!uzd+{1@GmQ_gHLU1*&K~g91 zrch7tod_fl=*ldHU@|#mgdq;QXWG)uhx0;+&RZo7?B|DQsX$&R-J(#@o5IEE*0WA% z{+g%<8$Edz{3l0uqUuSg$IHm*S5-$A<3to3mLuKmm(^^`a}3fiP6d4NV~=K>i8E~` z^}n~&yn))Vl5HfDK!SW&Dm#ZOwJr`#IGT$1?@UL)qO!iyB%B8i_j;JO<|Fc*mz)i&KL zwV#bNZ`n%45VbeOQ#=Fj1{HRkw9wLBJI`1oGnM#k!yYUt#Q`U~2VKyhW<`BGW+9=I zd`K5=j}$E14UUhC5!g5k@)0%zhH;4e1 zpuq22!TTlAqFdmy?)=HWW3}X8!O~RC$NWwK%_~ANFyt>CRNf??@e*8f;YqBg&8K&4 z{EeTpRd7{-tI9_mIH9x(5QT%??2GjpLt(z=@e;O6Is+JQortDpD{2?sVcsc74YEq?sh`IliZ~{1`#KlWYX4p*)A5JL@ zu`W9R6c^^!AIY+vsOE6dRCs9_VHZ`ij%3lpD(wSyt`4DltS9(l$D&#YQdxjtRS3tzF`ZMFrSJ%kE(Yq*s!`~HyU+nEd_lKV zz11z5c`Dzyb)}(aJp4VH*r}z8AM%Tbh3km7kJ0R2Oa2U!Tf?$7(5#C(eRddJU5cMQ ztQTaaEABFQ+qekF`8fI&9x0Y%EPy_k_aZb6XI&PJys`R-j6oS2Mf-6DgM8T|+>#}z zu1vz&#{zh-W);1vXR>ikCxd7j|Hw3;hLY}}sN!_V^1^Dz=;|?o^t7M!vR~S@$sVJM ze?MB-NBqR0=*wg_yhUS6>3F|9Rpt0M$=rVzmFV_^nZ)68qaKVKdPtbM9sl(C7?DQ` z*L-D`of2%6dyWc*)D=+Wkl+<|e4@lt<@0O|{}mH*9T;)HfBv-=*U1WK2Odj690zHb$@MlkC}%;j@7;L*4#*2&!+Ka53ALuk&9ECT+JKoV>QvJ5UVP=Rf|r0QmQtY z3*t!{1zbC#CiZWSmNp7H0`zw!w-x6aiY6yiq}+JOFq|%dTq6Z{^O1-g*?8>VsHdt_ zl&}2=bZyR2C~1zR$b(RP8H|6AcvZ(@2k5;5hB-SufrMDuNtNWTW)KP*1aF)00Ku&> zW@J$0f}mpb^*(+GJu0kUtrnFMalNl-(n#zF$7o%JskGI?o)aevmQPqzoG5kN1sz`M zWSE1(iLvOTJt@dNypKd^z|NXyVZ2#^wY|r>ikg%!gD`%cAPV{H0Fb8!zxao+3JK)0 zcCb597%x9|fqPbZMA}p5%9Z-}LT}GCk`icX2A+~E9Z|-0g&E}&SkHjPj^y2?{gR3P z2k!U`Ze@>04(jFDUCYIaOjT_oL$YaDK66-@=*0e#rV5@8f``QL6R2e$N0@OjAU>EK zEh>)mo)j&O4`iKOt6A*CV3QYUml@N)NnD&NOhfkB3#qNQG@1+~dR#}0u^~e871~Xf zG8zg0H3kSTE2G>$y4RHiT#cHvUE`^{BlMH+y2-5%#}NH+O(Yw*bEc*0H1yU=rdGP_ zXMHxEbT#H+`%VNX!a6kJa5j^}>k~S!)7g=BI3#phEO<8!vVXhUl&v66d@OiO_u4jE z)U|*>WP;q>h9=38WZl)VDDQc}z57_Y2krwUIi^ClfC%K*ko*WS=CVm1rekYpGt9+d zA$;`gg<|(iRX2o_>H`eN@u`7uo-_6Eeq;rq3W4J02%}Youke)vL}1aWjdY;_Qp2ow z`hkP=Ezbf%ZVGnc@Z?64=GYzd{mJH+Nk&3ZdZrkHmc|&+FN+D*lgwwR;@jyeUMKr4 z;hFrF^)E*_WUk>AcHd;R$ktSgo4A-2L-5AW&J$m@SfWBf>{L~lg`-!~cZOh{M7fNao;I}%l{*no%A#MGU&emXz`6xr2D6b=PoyjpBAUWe^ zcR*v%SxBacvqoDrWE-UIl%SsYYu5=nmxU#OC1+)(Fk+qfEBeMSs>5f~l`yZDtQT~W zc7U8@3u?TJKA8xa$bacTo{~HT<-K0NsXovU`c!SY?qV0hTF?6Ps0EMr^=f351_0Fx z_8K$sXhSMF=>mKg7=j(S(t5(01IWO*LCj2X1>^_Rpy{NL=g^SpfoolCy6S0z-lpi@ zcsg&5VZ{eN$77cho4ntmX@r7zGFJL^T1>Yj;4kaYh~F1>))c<8=^M$Yu5U!g{KaC( z{?X8EH)>>s?%gnXj%bMBdUKrR}Vq+16GS#MC=(MGTYIQ;RYU8e_`68F!Ox}4mtp&B( z90YJw3-ol0aK(2fuiuIN2IW6dTk?^A7D-o4ErYlR8&Jfpo%(Tg=bC{`&_D8tqQ0A% zD`6f4-qk**>~_x@t3hhXcCjQf$j&RzfcKOS(5f0^gd+Umc_~Eti}xwW z6VPs?Ossiqm3SK8wt}Q#;eNtnijN7RI^`b^3G4itLS#eel?@|B2^Qx2MSvLjh;q4{ znCdNZ&wK4<9qC@y2C{}TaOYBo@Sg{RBCUA3saoOY!Kqxcm%MsuMsBSz)nU<}qtNgt zX4+Qk&Iof?1L|W|J%x&$!8xu@#msre)pl8rG27S3@7i-Z*0LV!`wl>fvdG85b$<}E z=^W0WKG-Oqt{q=z^Gw)I^LfCkYG_2Qt&@)e!!Y49N-^P}AWIY}L1M>ox%$uw62Jl2 z-O=6{5~h#OGvX@8>Azym+&d_t{bKqlodg-cemg_drFgI#`rI=n51C`L?0vv`UBDD1 zqM6WULjw5eSq`81KB*QC2|XiRdiwRR zWKCauwA2?HI=O_#JN}>%Gtr$9-#yM)L#@#kP38eD<2z=^ zc9wlm>S3G3dVGsu`Y(B;>D-;aq(9KAVH*1rt)`(JKT&z1jui**}Q9 z=~ZtqZ{>$xf^+L0nO8aj-b`)BV$BLS=N6kgf%3UC(~ukohRt28x|_>Y@k>l-v~8b; z2T;Hu-7>4NU2-gFTsu01I$Gp26}no=sKQceWax#bEW&?sq9!erVNo$25|D>@3zhHJ z7ZA=Km#E^$G)vN=WsyjobB+69oD(Z(g3$zlybzF(6c>U)+qg{Rl)bDoa9oDa@aO?% zXOw8UqiZWEz!GU|3;ag`MV}wRQ)!L(o{8pLsgiVK#0yjQ7kB#n$=fXfyE)!vn|JRMn1GZY5(WE0}c~a7Br2A2|`SgxpRsSW$F1sj>TQD*} z{rI0nm(zsWxfmzA`<1$XdrFUO91UJ|RX)J#ZJeDUxs4R~dX4Cp*oB{~*PEdnf-xUA zeX!m+P5doHi)SIfjtL)6&8{J+Fi?F^tHFQ5YZTq2Jy?Qn|Y3qp@-2BCd- zO@< zcxzy;qcy$OhLWBR0wjH@Ml!Hj4v5BVMX_cZ}BF ztiptVm8I~dbt3v6Fkys>$QOtCaM~5?#CyWWPW?wkO>vvG*Dc~HNIQl@&#iDw(=y`R z0|VF(98hg)`CiJnGElrFc?fbuo?fv`kV_pGZFZpZh&;tCUGKqEfM%5_8-xH z$0sgCzyv`#tk(QScL$nHc#g-YpdX$=p3bZu!|%JR33krih%Xyu2;L*#d~5pAj-e!t z8NEqu3DVC(ncXur+f3IppzS|>TbTv46g#Nfmh7o%oUdB+05 z2lz|MoK)5~OH|liQ&I~7uve}CL%fall~v6&CC}AK(1*3#u7TokvI@Xif6QR5o&!?d z?2ogfYiwmN;QL_GMkj%Ngr({S7tXqJjMk4g-xhn;Er0WwB-*N`b(J7IIeP;sbq2G# zRY8gtzQdH?5iUzrwCg7HRfV8|>d@D^}|RT)V21l<(n|{ReYe7|AbaerSkICbEA^!-Kh~YpD2F7VNz7 zfOnj)IhU)}bz|0)%Rj*&{NN4AvgJnwlv$~ks;#B$R|O6&k_+IC-KY%P*F;W^ZVFcB z>lxuqPd#gromgLqEjM%z*m(nl7mLu2DvrRlk<-F8gWN9>-a zeVy`GtKfWLYiIp$aKF0w^_RcLOhuQO`cb^m>@(5am~6I+Db8mMO-%r(-r@WN+Z3c5 z?9j6QpXSd%8c+L}I)R&Lng7^-{3LSqMx`hCEO5sR;e#(?gYA;6IXg&VHs<-& zyQq049hcBCJ0nHWNt`7zMbayyoD37jj}}c{!Qye!p2G3z`cLb1Fsq<-ttp$3yBmzL zB|_(7t#YAuZU(Z!D7m%sjwX?rR3;eba2y{e1^8#(CPvkpU(~!1a?=J=EjZRUFgexo zK?`#nn{^H5wG)#=Aucr@5&m=1qM$m+Jys_CW8dwQa8#8@B1ehdK+L;Hp=}Ng)45bL z=Zo4@|CQNF)-+}QkD_yrYkB|U__pu%-B!D_)@AFqO;;jahIP@l=41$ykc4$F!Z1YOWg~lB#XpKx#?HE7n}5`jdtyUbN773jn|yo;{>XEs2CtTs^>v7wuzP)kG%gG znV*BLWs*W)J>r;$9GMRWbrm4tk8wn{3VFlboOBgj2HI3V7KjcuG``x-c**OaFza)N zi8HcfV-J#E{aAj-t-VotQX{c3!O>Y}sHQp^JF!vOL0zl@v4gorxv?-GM!_D#xO{6(1; zC63gfyz6rOO10j&!WI_H?Q@lCov&YIJXukcJgLE;@|dn4p#|ZAQ>63n0#Dsd(v0N_ zWthnQZ_)G%VHRnOnf;q4cs;|DlU`m|5<4xzrClq-b1*DLJ!jo7sWpWSSO8o%r{<;+vA`Wxp- zEAH<#fZUWGuBY21X=#Ni1JQVF6tJ1h>QL4D$LYY~R6;Q?WJBrcjt7qN za_H5hy03)F$*ijDDnE?AMg0*=wOe;l?E(W9+4MU$$t)c58QC>5F?w5;>L#PSXfWRR zSgQs?k36k3=D#s7T{T)!#2+G_eHmYhw7%9xh&J$xDs^U{jvN>=OuJVlVC=TJ+xXFOP%u@ z?r0hLY-_ooo+Vl$+GZQNg&~iX3RDLb>OW(*YhZ4LA%zCaC12ArQna@sr*Uc?6nLDb zzvZd}S0}a+2JMFJ@E0I2JJD~Ub-ary z)})q;mZIB?@7U6vDY#E(u*4prjOej2Nc1ijmfA9lXyb!LEejmla97Awr+d~!?fxEp zr;+sh^p7vMH|criwSn1Q>H^5r0w9j&ex>3vaU9367NRob8sLw3N?bPvsu?M$X2_DD zQ$+KB;Pm?;3|Ze|H#Ukb>l0-s;f^`}i z&ye9#mz!E}cVn2UZ&hp_@Jz9=y9bnL%G+UKZ4RC>L}v&5AV1p%wL|@!^oUP`z^knT$%PfCk>}taN`H8zNO9Oj$#KCahV@i_C9n#`uO_(d$gx6DaS-h?m z(pq}Ku5-;k$%mfv8h#Nj>NtQyO)I&sW)^R3Me z0FYxBdZ=(0!_gJx*;Lf+s%ggGuA#bqJIDAqivl1qTTNhXki-%n0Xsu^Fp)0 z0lKfu{#XPPAijfWzjt04`GEUgr&ez&69UU;V6(5~+HSQ+b)UmKx&PElvCf zlRWchL&S<~c<{6R7pDm39@p9fjWrJ6*$cbQF`sqpNQ0g6mMxekDhxqbt;6`{D&CUA zJ8+$S!}L`NF%dH?=lx_=*w${#y~*;vkAwzog$g8HSRT%+yJiQT#4}xsVo>NbPXsG%{HRu?RYlf~f>s(Z8{``Nvb>I(+9cY+I*>`CX`(4FfU!&st;H758V2@$dgY zw#%>RK7byAZAa-FM~~HU=5qW=a*bDS(aIWpp38fV54+JGnC>N!6_gUiCdq;B5$(f| zCAyw^q(QZpadsy*>QLhly>mdW!Z#`vyX5;IEtgRtSaWpEq7^1&u)6eO6Z z0RDQ7b238`2X;3mSeG$=*8PO=^n^0TAt+@a%x9@K28sf&-tUH85q{ZKFl`~o5C;{M z-!hThONQtZmLNL@g%6UE8{w)=8EQ8kGRGlrMwEAYw^tbq@`2^H#&))ku(2IZzeI2v zl>e(*6aj*RU+@rEQ77de!~f@%vSDVMWJjw)mXzDu^uBz3=5 z>MpsDnWRefaI^!898Du@a{C~sG=XLL(_J4OJ1wmk8!rtLeetYcg53z2CL&^2U6W9{ z<@>*+xqFbr6fo%DM1VS0cUSSUAK%2Bu~d<%r4QK^2LDWnqjz;7rs8B;!NE%1KlcE& zDR)R&&(J%4=PdgyYIjXEDhmK=5IhheAX)QtWLegME?iv*{ydnWV+I^dEhW0w01DZw zX=y?!iqk6KOcrY!F_p8*xe#KNV-G=3?_y_!1A*3DRUcjdMGVJ0BhTtJ_j!0-vaE1F zw5_7*PY1=Xm~IcCmnn|&9^V7hV71dyaQ}F{+~ng5#5Yd$y9xVyEX{?Cms521RiMmZ zg}x)Ms28;sSlP&?+Zqj_b1`AyfoS#cAm@?}TJ4oxOHaNOCi;d8iFvnDQ40AFDs@LG z0Sry!sIZy>xT#GHDb=h}qTD0PtTRhd{kkKJ(i>a?8OpQAnC6NGRhcGn*G>Ep9+40L z6up-*6MMkwey?tHI@e#~rqSQEuNlD;h%+9Q@B{QfB=x|KV*=kOH(Y3ZW3LZ9Bku2B^E+KvMxa~!F< zQm$$m1-#X8BWccbOEs1jW>QS?9zRy&jr9nyd?VGQW);z1s@uTcO_AOQH?v>ApV(>v zbaby&?O&z1Vyq8A`(H>*gO=RqWqk-KPSSSg!MY#f1(9LiP0x^Yd{B6W=rfR_R2cCa za21AJJqYHmPeg|8*WKWzE7(m%az86C8Bhg2a}IrxZ}mYN8ypg{Mv4o3hqz;EwshZbFM3dt12Pj7gY|7LRW$phzT73rm8PG3^weO2glwP&$HruuN6G$t>r+ zSGnfdLymyR8ET)fDLAGjRJVt_!7Ue0O8%(&pl!ONRCGu@?_dI%EW?H#q2f07EGMB) z^E48~v@ZTi0ix^=xWqFJ_+3jt@wf#n(mz5a?_j^0QL|r=&xDv3cPkgLe2*45KcnbN zZs9kMhidy$R1xk;j;a={?1+If!CSr>H+zQ0ZySI+4N!fqvyHbjCAJafmPV|%&uq;# z^6Dw0#EFrFM~x*V);huk*N3}{o3KzdJVd|qFS0es2#rIL!4I03#P@GdbKnxuW3OzG z*u5^c;ZLv8Yr#@xL`m>Iw(-#zb;}sVDD6D-`i)RG`>FhY;%{L%&(EB?0+$OKs4oLdZ~T*i1;Ken;cbJf+2d3|Db((ADR4C2}{r5gPd4~M_66t zTMCDII9DAoPewTFQzqB{W5E2;VVr~U_4v6-{d$>fHg0ihBj#KuZ)+}#EpJ)M`_El3 zPc2H=h#I>v6>oukEF;!6om~GA^zn2C9CmUVX4L_emY(3Ob!27lUO|uv#b#HL zE}+6%13X+oc3Wdnq!dhp1mgif!p?wib40(*%*Rp|HjG0R*NxDm3A9gP`wW8 zYcHQ$>Mr17p6DnmSA>W^z^(w&7i6QEgWd2|nxTdXvLzH>@!4N>$uCf0>#8>N3pSG7Zt?y0|q`*_COrvwC9KHJ@) zTdGZ%9V->Xl;4T5QkBMis^JM{V>T6{U``ra*04dS5qB8#u{TCTs60^4y|zdS7Kj{g z#mVTZgU`c4L%E+eKo$5T4ejV`&=TRtR_B}UG&E!G(^ogBTSw?*cbS%&{uQ_i3*X-W zd8jL@MjfMXR*g~g+Y6QdH%(xUF4h`18S3~Gam1$6yQdjYxj50^%OxMJIwb~EAK!p% zwq1*_!!@vdOTJr&c6pn*VJWk=ayJwEVs*Z8;NaThtJp`(^tgRHr_pA zCkUR@Utw(VO_}8-UNXk8HNOH`+l*o3@e{gm;Eb*Xa_7|V^rL=1>^DRzK5_&tU5GK0{Uks9f+OQjch+ctnD1h39C)fF}Qo)?aKDKxC1AH+~= ztA;pkw=E60?wo9#_6=2b9k)qtI2zlVR?t0H=b~Ubdu>Cz288K5#?|Fx_lKD~F^4~3 z+1R^JDb^AySWT(L-MN8apueZfH(>G#on_wL&8wxX#_p6Jd?M`t24uL(p6P1|bJS*) z_Km;UhsbPtq{ET`_M~vq^_25P^+UidK+`shVADev-8rR2FV{SRYBB`diTxAPgYix~ zEmp0cD*%O`ugYMVuA;hDS`P69#ZmO~^TfJ8ajOGu+5-379>_avJO&B8#M*l$sYEtW z(@AfB7^hQc*1zJenrStr>6&RtgAES@4b7y)GI7!*iwxv3{{5nAf4scoD>DF8YwbR{ zr#v2ziES+HBBsXQ4yhunckgz}H2=3ymrrWhidZopz7*$PRMoS)1=8f0<~5m_i30Dx z9~mm#CjWHSwv|}Sgg?3J_Xo3pXDc-3$qA6ic;cWm9u8(3j}iz^l>yjg_pskwy^oJ# z+cFVd(S~+5Drq2Blgf^kR}CP1G+qXf|QqOfp+2 zHCD~P{o*i}jvewfF`z5IcbdWxRwQ0jO3)4kUOS64NBUxIjl6AMmRPZ(L1S(G65(DL;aYM*{VOpIOEdx7b7eGd)SIo-2ob!U@ld{50(j zW=w2$jpRNHsw>4V+HS@XT|Sz}=&%>gyLYCiV3yz~#V6@_mO2hLdvcp1pT#lT&8JiF~woI(e4?l)8nb_qGqCL8ZB=d)FFUB%(l_JRuvW) zmA$6Gny5^TAJ(d7n=AO!K$oX-p(O<$6p3n=9J74mnlQ3XV{?M;A`s`5dI_F|fhJ4k zI>QbE>o%g-9Jq{DrOGd|Sh@=y>3EOOLE?-}NM4F&qs~Ze2S#WWw$D%MYqyeRBmU!_ z8^ymXT1&Ot^8%Uw5d<}P5OlRaLp8pts7<8`3rr|wxP@@P7=Fwazon+*_|FX&o4JAF zoPJ?-EqwYf)O>*w&r${AW%-)>ZqS&~MtFcb0ay=Cq1zG6O?&m3X^PO*bj@(wK_p_+Zp-c76Zf-rtnh>B*FYu-O4?jEltijWNNJcqABQ07uE zglZX%1Z4dny>Iy~)I6gA)osTY-Be2ZQ!s0m$W>*3>3|nyOQO5EM-EJB1F8p-PS8A_ zY6}B!=An=2+2xJ!T(SSYP;h`r*SR>o@nq4gT*o%K_r6ttjm-0J{-#N$2;9)nY1$Iutt#Jn5d@KnHM z8b4HnjdD)kP?Bqw9S>#)j(|T2$#stD|MCd zZl+=}{hNRNH}!&v6!SS+2NA9Esh*aBc}nhw0`k$usM{E?WvMEcxt3s%oB!hl7osCL zyJ{O}JPqjr3FdkWRIPigNIa@3>*xLuT`acD&?-@OIkKf|2jxA@bYZ=9^f1cXFtIu| zEnRi61n`>Xj)zZjtm|e1;Y;@;l(Kz<@aG_l`$1g(!f<3vq6TYc8zHV*)6is-M4UsM z#rl<7SU?_dQkb{l<#fx^-MYv!HuA?qQ4hgqIr^P?W#<yN`_~t8AKjtPC70TA@WLs4`d#>(OQYo`)JnB9aq z8#7@mu)^>LD9i^QG9fWvIk`S+g!r~B3=CQS4iT?XN}s1{C^e#e?lrHdiy4?B;0*p? z04h? zL$}A+1I?cL3%#9@UXUvQ*0RzR)t|hql*|m3U5F^M(K3zL?;|*`DyEA+4%@FKnx5RC zP*BUwn@a12nF>gYjo3FtZx`c!lrWNT!K!f+q>!hFD@A7@JciEdL?=$@+#|Tel96I( z55zz`>5_<(57Bp*DfKbz%2MzGHA5xG+#A5L!RrXOT7KJR4#fdY zH*dc~%@^8>+YOjIDclSsopN}CHbG@cffUWelVVfJm|AXTx~kHNL{7Hu^mmbVk!j1# zwc$)Cf2?~=4A!-$1m(4~8QfSF@01dA9o{PeyWbT=^>#WOa!rAJEq2uIa;0u%3JBYN zJWZHV#o~ov+5d^?6mKiKjELv zZ*5P7!%e@yF#d$F7?{NMXT-QQ=>?eOkAd2+M|9FN;FfXI#F+T8J_#V#9}WqwNqppg zc*v!wHB;11UUFvzOtPf^2yu^zK}V^fRJPeM5!uTQp^Fbj|qE!z`ng0n#h$grShn zHV|$Z6$<`oJk(|`WhZafe&dEo^5MWVo5TaM1F5W7Da5JNg0A9fi@E45@n01Xokr+h z7(N6mI?>|Cv~z{vJHk|x?Z<8fXCSbYze%^AHghFdxEY}x+OK*r7civvSyXC*w|CPX z-Jg@pQLUu5MkMMBz|V+xK19v^K((?_9IG0&a@rkmuC4O_iCW-1H?>cy{yS>EN~U@F znYw%d_|RY6?lk^4O)mVmGj}veW=qE%T*>{_&}AU4w1$XUZlj>*{c9)~<5QfzaYwBe zJSy{13GsZ@+OM3Xi7G0=*-N+4DNm;&KllvjD(1y0HQQtjBJw8K1eQ1|S-i~$*=1vq z4?b1{HQQq4)I7uA$+5uWy;~pFo$t-5wI`fPSgq9RYeYFjY5S3ag%gkK6q76#e8JK!4ptbzkAt_%K5Q z!SOkY6nb=AE78>#{mF+as576MSFkIO8fTrZI+|X9pSu2()1d$)1-oL2dT=DPp$|nZ zb(ob(^-ETMXrKV3Gnr1;Eel?o`4qc(dUw&0FG^hji9EL#V^U^E0-$?+Yf<%PzwQ2p z*qA=5B9h2A-^AN*^@H>7S71YX;W=1tPOLe1VzsS^0;?tN4FyHc0o#p>E`rnX+n%TN2t4{E>IK=2@sAhg6wv3?V+g zPibDHME>wG%-X%Tm2er8AKaxP>;QGOl8$v!$vqbv|qN}Hhkx_Z^p0s{YU@1DfLI1+h|MQ;?{aWHLo!r z3W@Ym^{bb{^$RN*$;H}s_q-e9Yu*phbDjcUii=>Yrr81Uu&<5DP%Vr`TH$!ooibgf zFSGtsQ36NT3_?#YROzwFN}K~DS& z2KG#-yS@*#Bsn|?fTzF)-|^P^_d=zG;AU#0m|qf|E^McsL93pFQf<=v#VQvRy-f<7 zUiI1T%rwynzWMC$V5b)E3MQV`lV?hFIDC9>@R+M8CrJuE6pu{@8$%~mZ~SH2xV%V*fK|cT3qDLis=zQfU*kBonp^yA3F%4N zkn4lBDE-g$s-N4u823Tl{UTIiA0<19J9oT7)RMv5!oAt2v>vdNWl=jrhKb~r9owBu z;cuv^XOE_--uq`1IDNO&88AEM#+u;uiCF9%S0MMWulWowfoVZYSd3Z8qP5Vn zhq#^KFqWt~LQC!&B_0QFnD{qug#o)XndL^;x)4>wcw~OqPY-f$^VT@j5z6Q;ip z*HnBvhCO=8xR~h_34)+k2`dvc??;Kztt#vl&H+a0F1D?)!Lf323W!pG2#k%2D z>12f_LluWZi+Aq^6yYHhm8ZSc?X)}P`rZT1+e&^S9wGiKboiaOt$2@AU90vC!nR%D zI_vwboH)v~Fk3O*qWZWLkUL8ciCspu5w0F#;3NGGJH0T(>~XHY>XeL*q+*DErU285 zDRN+UIjSGy9v>}%nKtz(rGIR?#=|X3)`s|yS6pqF(?aNJdr=~^Y+!ivpW7PRgM4~f zqL13TeDNIhq$g|;YjFCc8v#mBru?*fnAm+j5{%E7A-zuQskov0YWGd(qZb8bz>g+~ zz94Tw*zs*BTD(82M0%1Y$TXaB=LbOj%&d#W(j(I;9o z;Kje8c7H;#4iWd?vp~@-xi(5SCnEcn%L5bcahr+sff6cqbj&+to0tey+lmuF2;;Xn z7%_dSj@FkY71ey?-e%{k}Z;ajk z8(4&<39GNdGt~WI=~k$8dDqw-j6(`ke1YfvAYYN?R7n8#JscDI>VcO%9-u$5Xgi4O zBHruVO^GCL!MPOQZ~!S-v^f|g(Np&^o(vJ*@OlG;f^5||8+NpnG$%^e^^4Uu36|vn zK+ewVsQKMRmM-GE{sJe$WWemzZfND@u+Q9Y#FO3i)DqB6f2;v{l|aJ`ht313s%}@= zV&cpjNQ8=fuWE!iVVrJfIGp$$^H(bdUHjDPO57)38-2$rS+b}vL@NCadicNO@s_FU zEspg3KVUOujzu0WeYUArTx{;7d|WKBBZ4IrI2~_ZuKXgu1 zd}-7MEqi_o12S%PPzR7lB+L96$-7nk_mnd72&b0Tz0QgmBRHXLcdAEHhiF&h%9!hS zdwP$rV;gq3dZZhsjnaEJcAT9ht5LT&$Hpp_L+xGDx|hRJ9PyvS6}t-0V56A$ncYYe z?Gp3A5;m{Gsc#CbNFmr;Fbekld`=%zEef$Nrra-cH(#A5O0PjiUo^Df|~M;aEf zLPTe!ieFkVvpZ4L_%zqzJI~TY4WVBx+XupK%fN$jwV!F-4xr5I1~|#yk>Vk2z7)q- z8^b(0ZWt;+pX}Oi6urhPp;8hUl}Dgn*t3`MJP%jskXk(;>;zn^ZAH$@&sup&>4 zW9CPN`pk~83s9tv5JNZ%dE&Dm?ZaWZ4Os5l31Yyp_k>V~Zz7k3>F((@sPL*I(J#_W z0jF!NG+lG|4NzUM+~z-3_WePdqACxy0yviMpY}CU*50;`tPRyHF8G zAGhMq4RZyZ7eorF zZlV=Sr4@v6bmQ&6FN*pdYZzaNc~{;kYmVq)*LsNFqN0FhvQ6d2oH9mxQmX1yh-@jK zb^a9+ll8Ttib|5!j1uWvR2{&HdK>>Yb78w^;Z{+z&?=2IdBsYjL6>aJ1<@S)tb!rC zLllt>8>?LH5=z4RCmQ+8uAl4b~*=e!Hlps z7>ao+)j#-R?e11R2>pedA*Zn*SOPERQaz<4100wVX0;SWcvtUh!c&F1!^R`kV5?7J z5beq_r@AL@hCir-MVZGz&+NyTt~tbmZ_QEmD}94waNWYX5mf>KHJ*H?%&v~<3zc2m zxdS`)2`_AxB_9Qm?vHa}>pGF*jk8;{UX3$V33Q=fz(hMaOAajOk?;Ad%sa`_Z3Q*h zgMT1`qJV;WkJ814x2)rKeD^!}RSm#(Jr3mY^`gwVXc!k1O8{B&n$!BZMCU{cvVoCO zRs)O8eS3^i8j4Do14^l&p&qHjub`{@f=un1aFNp7@01=T_3SNJF9SG%;&2E$z6#s+ zw?j+SWw6=dLX%HG!M_Jqx78}5YX#Q^kc`CLd6U|cMtzf zAOJOahPz;;)|>8lMHl+}UhK9ff!;oyh9k3KDagbIHaSVlZCRo<{v+B`ll-JSN_YYD zz;44rF*AhuRW(f!Brlk}PxRL1c=_HPShArnZ`u_Vkq9+42n{OCkzjhov$TSDgtz$1 zgpF3#w3kAG&ES6=2Qi}@no0XoR7K8AX#8yBx2ra7k*nZMsCWXv!ih^9q60<}x$~bn zKx|&d6o`MsR($#z_<(b%JLj51=UKlwWN)^gF|4})1j6ZU%=*u*B(go=z;4)WJlz)- zKbrFlQ|JpeV>A|*_Kf}EFDV=uinY1oMHrytfsLyP_+1ek%kZKnx))V;(;)G za}{@z+*Q>wAzOg^Pkh%}U^VtQ%8u?O_if7FioYN{jE%ZPIwVjRI17A3RZluBp*rlk zCsS%lVkxg<#t`|jcW}#6KyvaNw-EM*stx!f&D1?isl+KN)V?iGf8R+w2lwG3^v4i= zEk*E3J8rI7KehI600W%3J!RK8vx$=K!-$CeLVp=NSwUyUBaKg%SrD7O`_?p-3y|a$ zr@NV}qDzzrVNxQglq))F1I~Dv)^CE9M6Pv^7fn8H3*%zyO9>H$)GbNls>`(<LPvEI*)%z1NS-7IdaUVKAX|b zK^_AZS4cqp#?SB(F|W zVZuWBrjcU3@x&)2cC2^(@GZ=e)wrZBbgwSlKO9FdOGO5fWUZn5IDor}!Z?nm^zkk; zIs*zT$iIgHGAZymN}mAD!Wrfu{m|HQ(V3T=p?JCC1Qg#WW-_d+|5KXx`V^s73gOaG z@-#i$P7Az)B)v(syMZF}OiByRlmCOVGBG$fwBZE3`>z+efqyA_cuZ|w z2H+KJ7mreQ??Wl_FI|gDgJXynkQw$)Ld#B0DjTXjW7kfYF<%#4xI0ZU{SB(M7j2YR z!9o7uRs|>Oj}L4=_ONO*3MMz(BnMm6_x(++N?ojAd#b8nm~P?X1;3%i_z%j&PFxNx zQ<~+vQAU8qzfeb!muzey&0YjtH_V!lR=l%zy`95Sy!E=X>^XD?onA0efS{6CZOT3J zN9%~BEa#`tG_}a{5GI8>ujY@g-z27!9p+d_5DHpGVdr&G^mw|L2d>9C`$@6?l5Fa2 zlIN46Q~9vsy|}TM;gzVzj+dP(mTG25r?z4$sH!JqJ0;xP?xIK*W&W}a)$Tv6Qx$$N zYJC>RcGu#9p7K0#*}^`KcYT1SwoTOJnRh3=Cio{P%`L+M{l$G~Y$y9XH>@SB_&TaB z8z`X!PtiuyAX7_q?-+)8v=zCbF%b+)&v9htK0x~SB2pYC`;_Qj0v!KFoA&kploo3t z-pRY}KV0}Fn^4doUj5zv+!Mx;$$ojmGzK)02VHSrSL0UgL2&leMS&fmt|20)SM9Sh zQ?U$pu#PK~ymIo0MN^K<7yDvqmzBC(QS~pgR1cSO-$`Yf}afr7IR<9f*BeFWz4?_nsCjoNlxeFfx_r8zgGxy&i^uhL#Nk6^yFDfR!d zxQ`j#8v&t!d+~Qek$2sB`>`{)+X|beK=q7PN?W7;!$+&LlvrTjGuQ1Weo#fKV2I5Y2 zyUQ!(kRhtKmZEr!Y5NONvt>sMIzNBsc-fEzVXYM1X1*-`2X)SRip7gp{{u5F3+Q64 z5sr!Ot`S2wNfTZew(c^13sV!lxQpqIw~&>45MDFJYlv{!gMSCdXY$E}#~CKfT?(KH zE`X5?V9cr`o;$(aY~RfXq8^Dkl$JbG^Rk#xch=5h9!0-3S8P*PhBaVj8_ieT9^Azi zd7GlFM;eei+)i+BRzM#UL~Y=zapi7J6n8a|$nJ_|qx76tBidNs`cL2YV6PILJoqL0 z17LFMj$OYg+TUuH4o#AvRUa0_n#mX9blO`sai`rMU^~7{OD)?YE^HO{hRR|UHt3`{ z6S|e~R2C~A?pXKbL!i|u#aa<=-smXUU6t!%A-z~Gw`l(- zQgx1U;)}#{zGP)$Jo`xDwSXaoz@I|3MHALPr#5Nx947A|<(O?+C%UC*thZpk+WX*J z;rfDMVctT}3YnpP2lAzP>g!Cf+d`jcWM~=NYPB6f=Z6q zf#msV(CF$Bzj9C5sdDQ=b#@rprJ~En_7h&po5+iUCA|Ht+7i5T7)24LUi4XY!m&Hr zPrAc?XOu#G7jukmr0oF?$116?SVSXXG z&Y>W|rG!GlWJv4_mU9UuI-1bLkqgn{p%HrBK61N#v!i~m+}xh&;^*fxS2T_ydjj7k z)x>}i=>PhKbwwjz==0PeF)OBL$D|gx^y+pC*Ke=HhMuKYjuH>lgUY*AyYQpz;|o+5 zigD8DKou+CX|sYwDQ%>2tvrIC&vwyp7pEIPx5m93aTc0T@i5OUOVg%R5R~0ec3X#dkuH1k(P-Wn<-Djd-5=6dUYMvNEu zy4$3`ma{;raIy-MBaP{_U&BI+FN11j*~75lV1u_qwpVtzlaIZj!KrK$_awC@nefb~ z0SLQKpvY!?d?`w#CtVErHCUBK;r~ITO|~$G5Z`$QeQM0vAEF$hOSIe{kexz?mMzxL zRp+4pf*NQNkD{-mCQZORoks-rB-Kr+9i1Z2K?wT$$LU)L|{sZLKRZ4v*^GSV%sxF+{)q+|4 zk=`=DgnJEH-6m9=U~YW#3`O;PZ0oT&a;`H+RyZC zm5$tAUNGbuK_>y&FOcJ&wg;7Jy6R^DX|r>#@PRurg6YfGzWS;D0bbXryx@1j>Q2ps z7W_?b!B&949w~JHN`D_AeF$bAk6gjKBh|jwPi_d~0TAvOW+iZzM+u$<$He_= z>^j7|X{vsmdv}^*Ny%PDC|DVGgmoYnv1@L&SBhLkYY&cD=U~1TXJ*XP|1fqL@v9TG zwJnQEkUq2=@#{dv!btiUg$2ktk0%)tdrit__NFgY{1f( zOQj(yZ`S*0x$Xk)9V(=lFL4A%L|+^Op0KNY-DITXTa90CDvSOy%pVbpgLOIm z1&wFt-l79oin$){8>K#fL3lEqJk#DR_Ej9xd@U3isnO2{h1H`Nb^<==JYkb&F|?ZRScXSKJW?6+YxuUhZ6lDv?Vf&~bYk9C61 zjbi`Wt^u)jbJH+AzkO=<-Y0+E&~5X!=fBeiMkc0Wr&DW62}Hk|_EF;Oxn>P~AQzQ* zHj~!k^IreXc-Tl>(7N3~WMjr9i)K;9;e^l=q#1Y%Oc(qTGcMmR&zZDtO49;M0eNRs zY&HQHyL947Fa%YbwN8^PxIti3OibgnUo6i2j_TTpp(m+3xN!9}cxU?yxo}kb)f4!@ zV;qRx$M%tTGp-g zlgbNe9YL|#AcYif2owEaaNmT9?elcD8|E+9(8gET@Z42&!} zSo{z#nWHcK0eY>MoUrjC(Mw`kIJafLI0b&o(u4)oASnG%+Xy|V!*J8Pc2^rI=e6n% zDw{6357%qy<9e$q@Ru@Ot2v?Wm{8W0T>A(6zN7TcJlw>sBBu&uOxe%<`2*Bom3KfsAXr(GNrkHCOovD}&{o$kXR+{-B ziuqvi(Cu0&11lx)?;%wSon3I9J zdx&p2)=<9m(8$fJQ5xoA_mOspwiR4Kf_H+cTl#s+t(H`wuzjW z)e0aQk5G?ut`QpF7OAm^j`BX^{|&Xo5oYqtUt0~BRi42yEE!k=aZ(M-yy|O5=wn+9 zfBSaCNEg#e&Mmk60btML=EKq?dBLqQH7TUk&6@imO}S<{qn?M|z-*G5+BfM>7(B__ zpCP0FAx_xUk)a|tFqKo^a`h>5C<0g$YJDd_FNJfz3;BCA$&jaDgub##9EGC7lA_50 zY$VBWw`k#W(UcMRmhaGNfi#{_+$hXW!oFD~{ll%#S$9p(r`n$Y>$}g%P(9R$d23Qf zzTy5AtZujOzCJnISWq*C&E4QwpAT$lG5TZdu1rmRoFx?7yC!><*UK>OFgOn!KzSUJM00CWNslZ2J zNFg8IoQ0qAkj?M}g^Z>g@+#N(P~q(VL8VdRZ=S6A%+DM*S6v-t#l#p|R*K3c zu|#);@gQ=TxMOb37vo!IJ45pj6?q#@6T`&&f&ej_c2{E2Ys$Xp#SBHc`Yc#VRnO(# zP!l;Umf_+7%NHjWZxW{?1X=h_DEmR++ zlZw+Lzae@@DPJW1X4Bpz2ds)|z&mZyZ7u`f>TAaF-1LHs`DT%?Nr`fM@X$2erQ{)D z-EP?PQWJi{pkWfJDMi<9BvId?4s>;YP}ur}Lh_Tzm^V}fwgq$dpnkz(ia8YWV8)p~ zBuSroRGvW?w@I@%DQ%MZ#QNjI^hnp=u?t;{a69;cusV!|o7)&^i(=y00asaI@%`$Qd_`kpPyiJqtM1Tgl0pU>cpPq3s)?uTqW_ zXF4eIgGE@ua&T`;#W{ANfz6~Kuq5HFI8W-QGwZ1Iey8zbaFZ_4Rm_F+&SDlVFEL*; zimnN5G4xru{XFhqu=s!z_+4Tebeo+j!gk&Q*Dz5bdC3ussuENmw-vu{L+KMDdE3-~ z698bcYBQ_*veIFSx*fcTF=dP8^XHpy;R4QyrmRqX;Z?V%tA3%@R}$83!#*Q5ztJU8 z+8qmz1lU}+j7$;O89(1qNnN@Bh`wp!y&edKRfna<%@v;~HU(u@kop~Jya*Ha!kf(E zoi<~i;Qthzi(kw8AIJCIcl++XwXR#YZI&*&ucRB>iVSfkAqnfg5OWW)TURHUkjiZl za@>XvaU8Y^>mrkoT+R^6CAn9s{XV}xAdft@zTeO1{eHckPq8)RcL>{un!g~{M5P~< zC1V~_&9Ug&G&7pD(#9q?4M`*0_$ZaI>&kIWF;S{<| zne37+?xVHh$&v`Lut6qFWipwPt$h6xXv_V{@b?`QuoC>82L?x40St$-YRgUx&|(5#khy;z}bc6w$=R}I>vA@wHZ#CXn&3`t(PtN8YB(xIzEw5*X) z__Wft*F5`&CJ!67;ZG>eRXJTO#QJg9H`BROoy%q_cDfCW9k*C*)&FfDkMvUQWoMgF zpj4hkX@6mg{pIvRtFWsj4}`G?;xzJsw|)R9<>MmU|619Ad1O{4;Ld@p=!4)IMWL;` z?mD#i8fwu$R37cwNI~aREt+7v$h-sF>nf{(pHr+0L!GZVqS74CB&MO>ImotW<~4Ea zUL+3!*kqS4C?0NQI&UZIKcpuZ^22fq=+4W?BK3M*jBVU7T=jzzdJ(_zi(H&DR=BVN zl)7ElVE5OPt<(bhF?E_i)*I!Nsj;WnVl&P`SeC>&k z=lMWvknI^DAPT@T=sq@BabO?wMRNfX5#Y;J02LZTv=$C*ddzj4@s?Du{YydA~8c?piL z2GEsU+bp-51;|vZ#mf~R|AYPUDTCiwbz9Kk^ANSOe~Y6dk-pX zVnm6^z1Qjvi`;nFQ#RC&_rA#vu4iBt>Os6?E5@RJjw>aIQ*qDcB3JuaK0ggR!$pDE z=2^Ny^c%YDR4cxDlBNLVwj@Z(R>f zpXepphpZB@T>ZdV+SE^juZKeWapvXDk*W9azGC1xwK85@B^xz1q56{qeonYsu0GC6 zYyEd4zAr3LfD-q!Y9=?JD2)~q8ySM87zaP|-QwBJrO>m`ltCQeZyaNv#w%Qa_II=f zEUah#))?FY7>#fSXX~Lu!bPaH0i>c^_$*Y=NTDA$Z=+OEiv4wPL)T4;*wpk>+0JlFjm*eU;p=4i*KIwe=!4gI}>?UG^q=#f(yS$~J*yKJlx0FF)*YzaD> z=gC{cIjMUzk*9?6*sqF}L_=h`~_s*@n@ypK`6Tu?AlSVd?Dfy^JgoOGP$)={7-drAcIRNBmF z?e`&CRgrKJ6o(HIba$E-Esv2757P+#;yKWjSxkY=RPE)^GymRdLNU+4eqmz(Xc@UN z53n6K3RD>DD_V8_c0do&Xt*s8(wY z`Vjq9vaAx6gqqo0nbkKv!3;DL2FFuopRcU4A^lQA-pgVqik2GNPBPNp;p|VXGwUQ6(U!C?>uIa!!01BD?_k z)(iVwdM6FMge-@NcmcsevC1#1zr*MqsTUXsz1f}@2 zWjl)srzDOb3TQ)4vd8T}!7fX4(xD$Iih{|o@vOzr+A9ddcQBM8OSOyad)A6P0D>%T9r)N{YS}{C1#Iv?1GIzx zu(?OcqD72HMl8z~n)ywq$82?s3uN2f)s#BbuWLlLt~JZ@d;@VS)K#<{gaM-m81A0Z z0f4~!C8GMM)=7vc?-J0#K?zYkX@mG3unUmEgeaZK;U z%W_iz@BkB`$B+r3`LF^7PBHAT!5fQWinbViLCpIN${Qx7^>KnPC|9B;UDLvcG;5*S zpZ+yBhDedUB;F)+mX`ff9sPlUh+LZ56rSr0LJZm8B-}&>s`#kU!k*WB?Kzw$RoI`7 zek{;OwjoKo;ZH{3d|u;jDkm7*9|P1$0k602?SD7rieGVxB`}pH$z*gbhbFxp6SgcL zC>yj`g?N4*fpMrJ+G&fHPMy#wELj;MePxqd$<61@mnXiK4?GlUwF;mAMre0$X)a=H zEr3x1do5xzwOB9EJWj^Bg2AEJiVFR)&-i~hYN>^(iFjeY%`nZ59Vid2p<{OVyVriw zhEP3AElOZ}&sl?=<2n#r5^pa|ER$@|l!w(_N8Smgjl1ZHQ-tHJ5B3T@R6#*e?_Ij^ zjuc!D%+L zuPE}tVaP$}QlgpS4|lFYJO^p>@nOXd^_^o*+W{Q<)bU`d{NWdvNG{g72J)I(}ZRSx!%~ z2%e&~b;KzzUCY|ccM1jFv&ot#u`vlx&3w06ya1lQJ4$Pf>t0=$zHmV6B7K8MB@AbK z^LnT<9of$UD?vez80dmtSST~sorx9S9K-E*l$;iPN_}gw=#$YdJk&pst*dt5WS=u2 zTu+^71g#Euy|%r3b;3VG7O-v*I2q*tU3zY*VS{aO27~j7BHNyKd9I$z0s*Q-s)aLZ zYYgGW$Xuw|eIHYn5!a?p9%FClv3O`1?HMcDScmDWK~c2+rHUFIxrpa1o(51EaY1H7->rw7YTCq=YT#8R{N>_`;il@^o)z}YUB>sw=#;c2N#_YjFSjX)eE&Mo7*|SQT$BW{**WV|9 zb>`MxOj8s%1UL(3c^F)l$ld^^4D(cSo{u5_#9GlCWf4Yvkf$#EA-Mm8Wxa7Ak96n| za))ozWn+elEmo6+)D`H>Klt@;G2=73YNyoiA%qmtKT<@uZsGlPlGX%vU<>Ll%VPMo zLA5_zI7+IVt8z<`nHn7Z%)|=%Gb6gva2x%X8)qLIK4S$of82USK@CR)8nN{HXQ9hw!?Iy#!4Ks(7vOhW&sgrc-t?9qPYacUP#T(B;{zz- z4B3Dp#L^hEj+1o=Onw1f3Y7NSgKOsEcLv26Ul0;JK$p;RjWv=OIicKSerKzg?dq6k8 zs6uXvgeKTjun(bRrSMtMb9V~_ZN)1`IZER4L1oM4oGod2_KVG-g$r(!Xgcx}h z0im&mQ&mv;W&P`~+R%|*oe+F{T8u8)T!+q3k>W%>g79V97;H^0JdwBEGPJ9A9^i=P zJGhMrx1;RtnvYkJOEeFvlD|M%$ z7h_v6|E8df7MK|Ef3A&h7(?8^vfW!^LMFA{B%9VkRrX_z8NGt^J949^_w_dLgvg#A z-H=CrHCuKV_Rku|Ii1b#RU|+&cbU`^1pV0K`4-E|bjr$G6t@EQ8p_(>!MrFP1PI;E zHa$I)W26hfm)FlcWvjVvvgji#mN;TGX*()(Q5Vr(P{x4|iA z7D{AY<)v70H3VKYdX&0kG6k$p&EWyws7?ATha|znzU+f~{&rvxt7?Z5=5LPK6Y{afT^jG0JCHtK!BUL{= zLQTeaq{JXo4ehAJTQKtzZW6>UCZze+8vu+^0XP@8n4HNnqtrUV+PU7WOH+VUelK$5 z;xMbqWUwPn#YvgIgJlcdHKegOwR23 zT58cX5E;wm+X1ui<0qK;omRC$&uQ1Avmu33a7nDDV1m(Ka8vcP*uq(b{C;JT=e&08 zD2B(o$@c6AYa+4GfF#-*k?aqOAbT57P5OPc!aNPrInS)Bq$e#>$BZNg<$-G)c@7XM zG?wb~L%B^828@2(8sQMGZpbldOSDaR@E0{quGL_zpPKBRXg?asetVNoDwVBP0~#CS zfP5hRgeDDF%Fu1m1jd>R*xY&<_QP))X^!YVF7X)E)fw7sX4NPu&F(tpT%hQ1vWqPt zoBn-f8iWeQ$u67y>&?G$tK5{Y=oc+EWs3~042clnq@azMu$(M%y;Y_vV^)lLywOCl zF|Rl1QNEcB_OT+6tO9C>j=@yb@D~;=y*s5>wjZ>HabK9yWlz9ao~DUI?{xwE17D$J z!WbpHPCbI0o@59spj%sXHXIOAIG3#eiAz()2HEu>waV_|7rVVDx1%z{Bz9n*9cUoN zO4G5#%>&SQ3+MGY-QXbUe5hnM+#IgCpKDhBq5q&{2Z4$JkKxP|oFB>e>A~DfiheNJ z&9Qplcy3VWbqn{Fcj!+;GZJS8nWwK2U8gL3t{|U)!CWQVG)t{`MYHQpAaR0aL;Ooh4_z>5Q-6FPK&joh{~%nVGC6cyShd~3FpkT%`o+TGN(RR} zP0;*jAGi&zOqVE}i$Fqs)};TZzusbH2LpsV4$A@4*~K(A(P$kjQiCJijl_3+aDJPE zdj2nA##Squ>KIg3XIO-ZAFuwHrlRn`4f&p?arO|6*#oU!oua6xcb~^RR!dfo7Ixh; z7Ku(v0C^((H~WWqK7*`nAJ=LOdHtjTjbJ2dG5H}BAoQL!hp2liJ?#N}Su8yzF`VrF7J42wP z>kHoZ-$HwWmzw~(!%kDkU0a@(e8ARH{@R2D&zmk8&2 znfh6#Mf#V`s5xdczcfmk8lfG^PFA?b^oE5EpqXX1%H2O$b!!+GYY1tydQa^9 znI)PO_&R-v&+W8D2EW3!-V8={DekxJ0xMM3KrhLM6TRFENm%oXw9(1C_8M-!tC=xO z>zCsZj# z0vD&+xri5svj)p7O3RyQEuc)2j>i$_i9Kw}2btAlK%%rD4or>fh%=U0EI|QLTzXt( zpz0PUKiqi8YO}q2Z^a#;naJxyy98i5&~s!(1t3k9k&0%0Cg07maMY9lx$;mO-nWfW zee8otmX7(yp-iV=srlE0Oc+@|JEr!eK<#f@kLtHljWikc3SRA3)`BE~<9?m0hZQ_W zzn>n&6HK4VDRy|q082ZP^LLA(?*q%{xnc#ySg@`umd$OOOxAoST)kr(zb4AtMH3p& z7h%($*w)0U4Z5~#DL6CD^8D*?j)bDs17?!a6DoD zS1dUWtYG$&oV?dxcB*>IV4BUNSC)aMR(^%{);qpYkJPTot3PS?YMBggDLlb64S0oq z7OV@3J2-;=udx|FyU4|^B=KUtQ50z=OuDa0xBchRk1Xe-yn)H_uxsTa!$&T(Y9 z-s9nD<{-{@zyKPhO;cn`ka!XkKqfajyKPh2IKXE(m}WO|AR=8f#41bBFU@nKOWTvd zi|;CcJi{q0kJ{=YX{(kpsb&;!h81|5BE49BTSG$n9IDGkbIqoz( zaVZD1!;gzK$2u93(YXVifzrN7X=41rEM@D$MS3E84fP8xNLFBHdrXV;@pGQHpk4%F zpB_OboF5w*!cHJ_TmT?<=xz%!327rU$Ka>5U`8FFoAqv&CTtm|&27cJXhENz#6C1# z3_D)u5qeSL&1B*q#?gZoreNpduKBZd4|0V4uir@073)6&_#vrgDtf5z-D&`azMhnq zHc>{+$WZQ`Wp1D3*(Thczj2j;vKA3-!#gFwk_ZR)(*X9o6R^Y)22)9LhB9NzezzUw#&^p_Sb@4B!_m3?AZuE#MQPr(xI|_D= z$~A%hG46=*a9jnFQ2C9uu>&Gm78h% zlmsX8#pQ)icqrC)mUeP-#V4{3ZJ!vTd<93cDPE-H`pq$&z%o)p2XP;jTa z%u|P>OdEr9Yau{d*9kpidZ#piK(isrq}*)=!JI(K-K~I}hVuM3s9^-WuO1n&6N3#4 zH-k-ZESqxeC_Kdp>ZFAaV(Vg$5Z?D&OxBJS51E2iF=q{p!jcYSHd8vLK%2qPbfwJd zdPxPe_TmI%q->}~k!U&g3`fa6t$z9{R`=7crZfd}(or-D?by1&SmrESgtgBPUTS!V zs^Jo|W+`^e?{T9fUMBH&5E92!571n`&-jmS_sR81cIT zWJ}>y>`cYq(GQ^dQ3GlNu#kDC=G9CT-?2)f8J-d~>Wd7?8-&}G)CJ6xYlq>$11#x=>euR3PJw~zUf zHE3dm#xfY&qaXjRYV{ZI9%dyD1qG<4=QH(}mGj`x&4%usa!#0Cck?hUD?stUMV3KK zEK)U6eUKR%?ZH-Z;tTNEKMTMzm63lCsWv%ibRv%QOs;z~T~mT_%12J)?mF|LqEO{a zEsfVnU%9Z`vt%qK4|zP~l;Ys@H6nAzGMa~Y4I!fYIG~xYN`dL#LR%7s0mmajP!(w$)IP)m@!%IJEwK{4- z{Hl%MdVVF3U=8ciNUL&33)}KkB~YP3E)B;n#u4P2EhZu~a0XB$uPeXV0sd@Ht-R>! zM=gDewECVN-%0>|0kVyldzilT*eGtR?W2lhMfr@PhRWSgna3D+A4#(wu~+UZ1kXd~ zz&~k`b6j%lNB-!E83)^r6!y##Uo~J~z$7NIAYNyAIX}X!N~xY~VXuJ>7pDl8j|sV? zT)so-)WLD+}l z&7>~Qgl3LtLQ_!(pe);aRrhX|FNmbL_cY4ECiUE!ySa6eU<8ypRu(F5WBz;ARW}1Z)j*Ac=vgd3?|j3+191o#;=Ncy49*s^-PayzM#EL_gtoWWs}<+A?8RGXplL% zp^XPX^j)SiG~el*mw4tymHjxfahhAOm9UTDNCnbO22VvQO_04UAiFB&1;U~3+I_t1 z&Tt^O;M&W+kp9M%`GPNF%SnKW9JaQ01Y?UQ<7EY@dF9*58X;LG5`1MhZ7wM~!Ca5R zc3g#U_PJ;f&b3}G+Z4cyTK9l2dfA3w;}N>PlHIqLP_@Rq^PNQ;J;tF1!}-qj{V93* zFXb{vTo^I;WO!&OC;gs0;Q=Y$9c)VN66QmPvy?F*Ilj)up%SZ`qlJjo%7NGXNS6TB z15$mj1h9dbHL5(WP2Kjw)e&&m5&E?zyQDsWGi4^p9KD*suEu}?!bVhNOC_lN;;iwO zmqYvMyp6cCP5LnED}hX*_!mQsuaz6poq{Q&(_7B#0pNIiylhagpjvS65A_LpPjDl? zw8SE*20%*SvIk?4m4+-#A~l-&cbY23_RI@qp3|8@tVc-2mZ`*iXDZU~BjA1E>nvdE za%fXRhh%D-N!8(4`xDnkgK2u?*cY7n_flqCm_nSaZ=~Wn{e``;Xm5Hnm2ZciYP}0#=%8FU<{dKUVJF!#7w1pZVMX&7oah|vU*(gJy&e){`Az*Dvy zI)(esK=upJA1Bv6L-N1yMI+-J6oO4rmj|FvSg&N&7Tbe(!P6}a!<&v>M>O`#m0|qB z7Ph!!jCN|58OEBg(L!h3AYWu9?LPq#6S0n{vMFTKoDP$eHtSGYX` zq2J|up|_NpTpA%YMykZLjMJzk+AU+zZP-l;Efd#aF6`u5s>d+nGmRY3yIg~Nh|8MB zQydVR@<^mOQ|(8K-293a*JoJnEk&SHsri&XRRfarATWyO9GMInaH21ADXgHcSNYUj zR17&=KV)0yv^ccQF429*uHn_P(X=S_==UQKZ#mg3R?zsUO)FGcH22*G)-I9VQ9{qy z=uK_HKIeEZwNy5PJbRG63Bcgz>vV9wtI^ST;T8G+y_>I&HA?J`fPpxgOcuq}&>hzT zdnnoyQXay+3KEWUaNNi~Z}@pu2=9k3e}7B+-cl(yC8Bcuxo|K`sLFfEg5y9qIc)6# zLiuhcr`3+Bc}3v8!u~MgY=(@B65;Zk264PMn2<<1Sck1c^I~(!MK;a%w5!3U%xjz}4G-WuruBU_$R~+3b z_=r0`Nt6&EeBkL;!mQ3vtt_a(&3LLE%*@C;o?Nkv$&hR>40h7KVcOJvL`}pq=%;8& z8t^}i2=&yjoVv%MXNveT@~6U1@Xadtpy7$*qYH4pzYP}z0QI@hMM|&&>S!kW&f_fC z7t^jEBwt1sK(5=h1L-M>CGxK<=YC7|G)(Zn08%4#G-;^s`Lag^`=ZV3sn^%pluO*eIy?Yq3eECFjZ+3IhNBN%ytI(&r?@fBvnq9LTehbMS6EJ$?J4Jc30Vv2sV zVGqm8H*~kfK~X$F<5>VzQd&03ndbZVQ2$u0KL$#-;Sy7*r#%c;sgdGV%&Gq@jXU!; z)iAV`_!?aJ2~wCd;aQ~wv;VcW2Wl1qn8|FS=oQG~0jqN34^~%_h^$!W2A7Q7!>ou< z9z?rDCFceAN+^i#pK6z>UF?uF8L_*fAch!P!$zWUixvH7|745@1~IK&a9gg?jp15Z z+AWxHD|GwQSj~0vMDX^rKgU+eH6^h3J^d~FG)LNBAUvVnCU4nXdO|Gd& zPVTX2iXnI17mHz*)Bu`#*X&|PaTB}Q@IN5mU}r)F2eTTsxN7IMyo4XIZ;ljZGtrAc zzCYwDcGWWF*B|oU9e{-4B>VyZr||V6_$kHrKf&7A68yb@sAo;6QYX#HO0A2l2&KSH zXBr^fsXGkL212a@r0^Zgi`iq`@EBdV%f=L+6533hc>%($S&BL7QE#cv8UzdQCqYs0 z5qccx2E2vE2ZhLivFJ-UZm@+Lo}iPW4-FH&{*xrbfi}+yP`{)VZ0~YC9XI)=qL_ZM z+o}RB{N*u*TsaRW$Jh4|He$F<)#io)e&{`YkHO<^kPunMkZgv4sYtsh-t@{%w)8hB zEv;j@6_4N?_$GJj(BJygerh%^d!641QDZa0HkVC@9d zv|I9`#e!rck&Zq$U9f!!HvzZ`HjFpg#&mu63O=Q5V*l`Pqv$^n5oDl;L&|BweRLNI z8Z$1j_mrDG(-h-LO()!@-h!LAn$Nk^$D!`+gqGYvw<^SUb!eh9CRQ6u@KPjy@mI1nx6&%tCtwp4J9h?zU;x~S z2&`{+TQtv_G0l-?n8J)O7wIpBS|m(Lw-j=sxhW=wd$x^1i&wQ-%<7XM z!Z4+pxwoQ{bD5_gV#Oz|_WEg`k_=zI9D({5imOSE;0N9(&n~fOM$kU`3J#nMn9Wgw zg?0+3S%OW9^38&uTSwI8tr{y3a)F;w0C@pN0 z%DSvryB)-se+b54yJ0OmU148m;kcszBa!aTBa7GRXB}q%gxS^`f)JiCV^+_gi!8r!&kvA_mlZwW^pScd+V{Rd ziS@jwPs-qN%1gkn(^s&YzBEpSQ!|pe2Q;_Qp=SdcI-FtHKd0HJ?m`o4F8B_VkXbh^ zDT;|~Kn})KD>hydCa$ugH8_7^B}#ZvM82r;D?f<_hlWKjKotAO1qxd^F(N>dSS=NP z^Mz}oaO1;uKLYrwaee$)f1_B;{mud_5>-1fP}s1K{ywDk8z&zQ?FMyempZcQwjK8j zw#A6r>CmL7)?ZY4QJURhZ6v6$bao=w0J z^^*^eJImA0qrgf2368cI=9x|@xHHa3YhaWkTXK^Z)#@*8GBoK6IRVOfVKqvU?*aB@ zc8gg0NU{De$!1*qpmHzj@93Y-fJgdi8yx1)c^SLf7iHh3+3L+n{>|#&Z_y0kK4dCN zs{?rKpBJJV9Lpa``mD;MB@TJ&Dx>*Hw3JCGUMw9$KX$MfhU|HsAc6gDT+>EvmiCR# zeEcU_hKhr4+$`;5#ZS)h+zqX__Rb{$8gi5C;dj-PZ6Y0nC5$C;bd``-iW5I7l*Qsx|Efg7bXP?j`s4UrhSCnD+C3NEw3%6wJIp- zu^@$Do2gM!5Tn*E)PF=hZ9E)#LvJ_9?aoM{ZHx(;EPJasv-~#=_+%>gfj{(5BwZcA z`{%ygYR}mkU%dukG5jUo>^^2^dxq*nr068AY+UuNP_U+aNS4mWHTj9IrRO2m^&*Mt z;5*W(6t)KC!{Fq{$srKwh~qosHrhEBh+lXVqI{3lIpL_VVYkE=hA?# z4z64S%{D69pj&jCP9NEe%)En*(1dA11A11WIgBnQ{>Ggmv9~bvLp0k3+FqEFHiFF% z-kr2`%QRGp$(iik?C13$wj0G z$Yo2k*(9Knq*JqPfEPUokzH~QIZaqf!1&!`>RXQ+aQmWK7t5}~J0rvuYTO8bk44u1 zhbn{TZvzpV(qbijfmD44x#hvFYsY;No-Whgis-4@XAwID>R&T#7i#8HWAQ@WUlwx_ zj&@e?!BuA0fSR$DEeAr_F7pUEOi zdf*^*EgW0rE68HT7etNdQ7;m~r|nHP*@?9qJ6Hq7wPbRM=m*P~ebdrFeE@2X^R-I{ zD#)H>VHTjYzA&`IeaPPcy|P=6Ic%#8#dMxi)Jzh&AG@wI|}wt_L3{Wta0ld z-Nl!D_@j877_4V7Yn^f?LOIJIonLan`WF^MOM*1hKFvSp07dM&cGRgxjy;>g6l~g{ za_*g*%L%huuKi|kJa8%#k*5##7A%%(F4Hszw_Ls(WFNcUrAK< zIb;nPyEp?{i^`dApA&+cTgMaFaC7=dK>*?Qp^z|T4;((*`k>yx9j85O1hLV-OqGnT z3N}PuJ)k1z-Ft@S(yg}+e8m1K6AP(fKE&>Q`TJBR^tWH&$q4s!$jQ1=O3hzylc6Pa zpro1g+Z-~njzehg(X%BG&ZmhyFw;ld^!esZL!zGRu0@l(@#^uB;vV6IalP2?5=|cJ zTAf{o<1jAFq=XU&R0V0(VZ@|dVCwFYi=rXmoTHPj9mVdA;RK~?+HGpCpr3qfHx~8A zt8(%04+`AnOvAs+jZ+p%)lBJ6mdpU1nmiU=(77AmRliU1Fas0oL#g_xK>zQSsEoTfsXkrP4SZlSdJ06ez`QP z749nW3C`Nx#h-2w@#-)@H;I z*U6%(&q`1yJS6VeT@#{GDxjooK~di#Lw5xRDl#>~op@Om{_cMB>|drh!bdAfPLMF> zFX4S?d7HAue_#Slh9zWI1PL-8a_ktLcT9sY4h~+b|1v;}dn7~-G4zL3!B{Z2DnqV2 zPA$n(!OoAS!nek`&Cx&JGonU9JT2&;$e#G05jeX=D&j-&$vpu4zJT40lTc zf=2d`QyhRuJ_TK}wp10k-$l3B$H)@VyS@Y|vX#sRlov?oHCh8c3m#BNS?Y!ltXeFJ znV{@T&npj;c#lQjna1Q~(Nlb%IcTVOo4S?2e~T5Qzu`;sQA@f3WQxSJ+WeLkx-)7{ z$tdppHm!ON*qD-*#!)B>b>GZy2*Kx=3~j%<-p1Jys}UD;p4P1WY>|tcm7jp}3t$uH ziMufyCmM(h!%vh>U0&4Q9f;)t3GEevZH&fQRRp#gxHsxnr(T~PxyVtO{TQN|csx~Ws^}DwbyIO~ zEp(h9bB=mNbiS>p&<7d8EEq!zbMy4Qv5$u zr;jtP7X?C08EQWwfMiaf>*_A(!|h!q%r?nQx!|92N2G(JnW)Eq=+rQC3`80(ixsma zd7WNtzG4IFU&`4zFTaVj1CoM*@hey0Ylgv<`Oi4<0{BHis~%~_m<$3*>?rn14MT7j zGHw?nj5gw5gkTqCp~9Erq~q$BrYZ(M^0|XzHxbid)Kg!y0Fd2zVIQUkZEQkI?{Ph8 zsukT9O+2c(Ngr|864fF`fPToqQxgFFn8;qja39c8-1Z5-t3SWXf8(vQa@(hF>EZ|c z5j{%eS=Z(7V%F~*d&~lEmCfV{5$r5NFxTP`S%gZ=Ae|d;iEh1Mv9hQ-zn~UwHY~WO zJVdCozMi%Z;ys}Hc?kOOJ=0}lioFy0f)7iXl??W;pFs_dv1Dzf@razMJ^7QT$Sh+@ zF4gKWr0`4Vw9cD+_N0+?#gAM1-NUrF1r3Nn4|-0n+J9I2=$vWZ``H^J-9Qx^TXO@c z0)@mW4CvZA+qx=3?w@uE0IXmvnXFs#i&mH9oM=*BvNKUPYEz#WaNcZUIwDI(bq+cN zKL9Xz<1o<5@q5-^vuNgGHQ>pV^N<|!jh|Md1YS_OWQpL;MdALB4b)O_HzCX7)mxf0 z^vK$)WQ`HFi{p=}s078^5JZX^Roiy}d=K0dC2FLWg$b3!_lhsj=U=HRDRc+wnr&Kc zYulxr1Eo#fLARc6Hl?F}4J7A7#+e!xo4Ze+XTdqXG-Hrok@W`5`?RQ-?&MeER)c{6 zkSBK;x&glKkQU9l?o5fV4~inCA-bKKm8ieg3!d0me`C)#U$aSb>;3L2=3o!c9>Gy$ zQigIzE1#?>Ab4IFEwmreTA}T_Zwd&z>E%OX(Id3CK|BR@1%$P+IRi#7HOZQ#vVyd< zyiFQ`yM6+|TxU%ejVJi}j71YA;;NA^4r?nyVISPs^cs%o?b?L zC{uec)g94NsKAn0O1F0?(Z$l1mH>&?zPvE3qn%loqWCx)CK%@QkI+`F9DyTfA0JsX zGi}_c#B#ZKogm+;?p_1x+=u}?!ELsldQpNZoOnizojxUJ20rb!&C89tHon+nPciiG z$5h2IGctncIBSgNCF9s(0AaOYFU|C<0p%NFiSAxt{{EF_Eg+k2b81Z}CaV1kV58to zR=D}rU}1YPYX6Stbxw_P-Ke%JGtCV3=jZwCPfHW@klX`)zuv_+&7s$vQS?eM4tSr~ zShCI&VrbCNTn(Ef@u1aj{R`|L_jv+T z+foEUy0RJoE2O_Zh!>#$5&fMPHO}=>7OL<8UwU}>4(hC{xsR~&ksQ%Qg4ZiZHeGgD zFh%HeLo8SAq1TP%^+7lSd}gn*9=e!Ga6DpGp{ll5f3#Q_<}8OaYR*rj-$_*H^z4En z2Ah^otnpDbdB9EQ%^J|^B}g}ue>#M27IgSE-DUsKJaHChAfNVO9PVn@!1 zlVGEt_zS#aie^hjMu=`ZkOisV$cvD!zp>`^%^0s=hAowBZvsR6R@Eci`WJ{ zidk;%()Ism#NE9y?))_rEjCE7W0AXV`j{G&-Up}oDaN8ds$+0n<1|}j*C4E!pBEuK z43q>hh-gPuw>Q%gh;B`d* z41WXy)BI_GgZ~2L|LN{#Ekf7TgD6uSg<-WB-!Xj!^dbgR{Q~+1t9lz`gH!#;^a+4? z5>aNJ`kmIXdC0=bpuv%Ws#NPF+-RXcD(}o*^)RVFG~w!Z)=F-@3$)-XE4%^-*RziX zj;OB@LOh8_m=+5w&RzA@)~0S%rULc9se{>P!FdGJ0IRL@yYA-#E};Pk+4>8Pjpoq)9Nkn4oImXiz? zEHeLyZr2QvE#HBxZjIo%h;J3F6lv`^9vj5Xn0*S{=!|I$q~-_|=VcTA(OJPvWN^0Q z-mjN0R<|GfWVq*p%k~SZKbtDepKy~Q_^FKRE?98EJcf{D)AVYC4coHWuJPcY85U2e z-`zs;JEm*NVi-2N$?%iC>}rxU&u`-QOp{#iLVu#1#E=H! zbRW5wdKcz3SNxFHp12}K8TLUqd=LB;%A*9A+`_%3yMxSul+{~U?x9+4I)t(J73f0E z0EiOHRf%3!u(!4dR;qT3w1a)KyHqKgq)EqO<)CuxDrgRyR)C5} zoi}mL;jsfR5fS!7pj}O*>Ky@_cmnWfqu2&l>+>?X5>1XDd)1K?} zDXNo`v9c|x1GZyuLjI@~m+28b0LY!J)!6%)mDCA9VWO6kN8 zy*ODODCS2?4@TRGKKRpe(?IScB3ZCgKSckqN%*{moyTn2TaMwMc}meft7`9i?E5JB zT<4Yiz{UH9s^8ezUpJ6H8dPrLt3_ca4J(#Q6sq!{Dt|w4tBJv0&gkZMtSiwz)4~bU zc+vg|K-7zE=h|@hFX$u%@8}}&3J*t|O}D!EA=CI4@WZZ*Z70d=jcs%+c5y7B;eeCn1PGS?0oHjXbG6q0wC<@_?P_vkKJBNTO+1rBZckw(>PSNu_Qr z^hU|58lq|L1MIn~hopLY>?w@6_J7o~q&QW>4thdd^c%ON^MW>{e(eDDw0k9!oe8$p z!$6(mCEK&ZOaGIE)V@WIJ^}#o-tlr{ivjInhBm#n#U#PayDSH4b&@pHIdQVuvjRSS zU+@-vmP6fxk>)DrQZWT~wLTZEB_Ne? z#76w?@@c+E?B(hnRYDTCd}H_6%|Ab)N`Tm#Vwyw2_>l#|ws~^dRwu{#W;Ikk*U-|- zFg!r{7`pHP%Q>EvoDKCf&f$oZfW3cpBOz#rO z<|h2^0Il_v`JX|Sw5sWYOk6O;4`{iuc`TbUP&Mm_{e4yMg?xKc>lMmBNZySY3mP6fcyz3`;qq|{& zyH_d~pYsM0yLox9kEt?&3s&7;Zx&(08#U9}MwnSLOv$#x0W)+~KOafuz2}Fkl$YsN zlnb+XKzU^s8K8;ePwo7|*{|8#N=VBUn)7vFJvyVH0Iqp~?xz5RMPy?aD{PKt;Y(%z zc|tlMlqT#n-$d(HJDxY#P)cf#o>w#K{Yf-$E1Y`$JSIT1AV zhqcMOp+sI`n@)oHJ5xD}54TKSE02mE+GZ&ul{ltPOn-;Xu~_ZQSu^C-@OV7f;eF6< zMbhiYep&n z4_C4Yn6{^bxV1TBj!}sIz;S+3w=Ec$h}QlQ6EG2*tI_O$bM_k*;?vCr{E<75Q&MN3 z#mz%_8dEisbAs!w6%r_pA?*J&*HFv$d}Xy+2ES3uUND)o;UG2>t_yUjZp? z1GyeiOVz(_L64AcKHsJOvRqBTHnA7nIj=|*>QLv78Mj#^YMNzVf5go5?B@B1tAtzk zS>h?YGb60dYSjb=TjQwBZoreV&L3L6^7b;r{VNScZF0ffCcs;o<7h^c{kgBUVa89u z1+7v4b(~Fb{uF5zPO;Eb3mald=6L$WYrElcYc+x~TddS?cCv&5I9{dvl&+peLk84UAyg7HQnV?bnf#2ik~Y&~BQj zChLEsoXpSsrC%wtE|lmTn3c&hsqRmula#NKj@Ls7C0f=2YEf4VJ+wpLq&I1S=$+C|#Qmg9(#&oRwkZCydJ;>9>>maV7*`pT)fL`rCZKwVF{ zV%jVh-CF9%YC@myRIk^xTEJQ82bl4bf@UXC@nL55>7D!NkrnVA#Nw|ebZy7#=@JDm zx_6#P++~0!ssLRn9hCKp>7Ra+J43rY1U?W0l((2}j`uCMBD@bPKO>tz@&nIWHEw6w zZ}nVwQ;D|SFhZ?PUW>Rvr)^C3m!d>sz-((wIT_6Qv%uN%4!~La7;J0~_mSmm`X{cw z6Vx5wwhM5koCd*9w^x}|M;C&8QQlU+- zQ#FDP!xr|dQDjq6btWn)$BLUfq8#2Cs}sgn3^RR84Vots#JohR3>jBj(r1q<1^SSWy5=Z*f|h- z71B-!epw5WW@9{^pmBNP2>ff!hygW=WaIP@9Jku4f8f2Bhj0al*X#YsQQ6pKYe^9* z-0NxJkPzpEWHSR~2F#&}f=pu4jFAlJQHXAc*(NHeS(7-3T!iLRjctBSQhhqslo(K} zKxQrn-*zLzcd5F0oyh=zGU%z_z>7>3ORxubM|EZ*fCBlJ7;i;)l05S@2mJJl572pd z^vdI!aTYKaPPUoj0n^R{w1R?`SFk6|#NV%16v)eAu5 ze-^4=J9qA~QLnCrvb;llJESg8HT&V())o2n?}L3$!H=w%arPz|0Q}%~%OsHC39LF< zA$)QOD6Xc_PEs%ZbL`k6`ssCr=a>w z-VR88brTfyU5X1<{{ETo{hISvutWHMrTWvyVDSR-m*=VtfhI5Z6IG5sS2IDicM5Kh zz+h@Cy|Gwxt&dwkgS&k5Ei`i`+DWbx7V~Y=tqDxy5hv{>gB56!BHO;PqSUy|%c_RA z{JIz-(YyGmrQz5<*mZlXxhqBP%@a^igVeZdXAR_ApCrGOGmaQ$N7zCPk5Ac#Y(-s@ zM$TWgS=1gW6TNZ;w7f&E+$iJU_t*=fv{N$7^+jcg7D*9F#ua4DFx(79kh1_&=Ql<$ zh`Id0%J=d8;U{oiO zVh^4vws)x-U&;1J=$rRga1eMvOD!TA6808(<50y_KJxUc>$!#YlL}9UsP}$Gz6yu^ zbqk!rrwIKwNb+LJ3weUbwUP+)cD!s5y&n9r&fp5}JilNFpjn0YpA`P{mLGmZN&Ps8 zTZImdZe*0sl4jx$(F|XTHued!EdQiblf(P0dXUoMy1DYVq}Z(`W+J-IRzW{a?_<5} z8@>zB@ zT7yYuSwZU_V}Cf(87ogC@4<GXxP}!Lp=xEe&Ph(&^A{_x1I( z#=OQQEmr>fgT*_CKLf0f4eo#DGtV5RZyEAA`xZ0FDgLp#6TfQ6TJ-pxF1wYqW=iy# zOz~CBUO}Umh2P{|>sbF_m~~lE2zTXRWk-R)Pnv&Vmw61GxzSD<(3zRW5L62{wB@BRX{J`rh!jwFw3c_F67jc z=rV6BG$Tv6d#+>%rZ%feAulld>eBpV=^jb901~s+o*Ui32-`pmz}YmTxABVx8=;7Q zJ*TpvQgi{oeTtUHTzOjowuS8~oUOve-})+9xw9Rgg`wUr#pX6TR&5oe$DBbID)iUL z{;LGdf*#PJNLN1e_wv3goFx_KDLbjl-rX`l*Na(~gB`kK#O{J$b5y$y*(_O=1lK=o z)n5Tpk0P$z-EKcZy{9p6QPN8xfyY)kj>b5qeKbe1i7V*M>U+@`tNo4;IX<#2qtrQ1 zO0*j>(tp5UMsY8-aY75&e+v&Cv?Sp&DVl4eELXz+h!ClRZ~52(onOrn{OS9~yXO@o zizJ_9wc(!FEPd(ukM5b7B9VAN-AV9F0af@&%WXUWwSvPuPs0GUr!&O(dgC^rHFJ5& zQ2@dBL<;O&WPRElJK%`3%<9knCW~ubAABl6ybR5XBh9N?hC@ zB_vz2Gf(i^rTrcD7zTXWrtT+tGB77xv|9}xX~ik}762{v(lQ+CDab#&_ra0eK~`rn z?$KB&Kc;0uN4Y=}3FK^8+=RpQ*NND~1sH!PVTwh#KqRw6yRRc@A8io);%>MUGD&&1 zs6-N?3hiP^iGyFM7jH4^78cXX31Efv^c42zP^>8yMmiusVoDDYj(e(Z36-(cf5Aak za#aNM#s}&rQiufc0>iR z4uuMT?*23S-oNQeNL&d07*Zfh-de`~8LMlhj<+`)@b%8*hUDR{66QxJ$G9fVGi7!xPM_g3l*D1TJY6KS$Kn`@2v!46xkQH_UwuJI-a4^TjhvbPoGq|Df_QVn?2?{~}odu;9c zuT-$|qX%($;Z&y0%b$o%EP(dL)Sj@^wcz(qCBIiPqYe*Kd#C9OB*Us1o4CfvBPFy! zo4)flK1zbGKS(H30L<{CU##PMkZjek!h0@nOebd5HC6l=UnQeDE*X$amI0W=3>;Fr z%c#~FoxxI7FYRRRkN-l?Otj zW592OA~;`=G>rT~GPrVb)Pbm51euMy`iMi_X2SUjW*33(xL12G0?A$!)bt1x{==1Z zo9Q_*i8_?02{m>LR@6rd%1!;n@4gP#BGR$7QucFLMOWS+>mHowpEiU zd5U&T!jPL)&2!Agcu+Y(;;1Fss1|4q4bGHQC<7wo;X*gQx!<+Cls#H&GdJCaX6KXi zg``|=FRO-%>BpJ2n~vTC2a9bUpLW^$Jnd4IK&yTWtjO%rUnI7%(*$B*S;#0M(Kgzo zJC4Aw*J+<>w*`~*3GOwQa66aQ+L+Zn=x3)e2Oad+kgR}Q)*A(gE?;lgVJ%0a!Sq+z zV6*VbfiHQFz%_*(TB)nFE4$7Pph=G~#8XlCMIjBd$IAyalSvk&h5ZMGVX&&(ak^QQ z#eeY(ZI2bjsN!W<6XXwU=CLa8DSgT}$ClqPoW^Dy1sCPB^l9O=)tX&X z{9Z~0Sko+gc&koB({WK3vXq5Lc!0HtVpHO%jIOs~xdw+$IqnGY4*F;TdJtaiVp?la zI^-(%!mbHYYIG;O>@s%tF_0DcIW?h{Keir&UtY+c&?KCihOFBM-FHz<-bXS|B>3*O z7E(L~Md5~fb=hOHYxbu>gfa| zY8|_mO0$c~1rf>)KT+=JJ;?4iEFQqKaU!uyQ&L#AS^xbGK8ISrSafEu@rVK|X0{eP zp0+qblyM^YaqOf}Mm2}BHVMe3gEkl&153=`sW~Vw__VQQ-*^&U9v4IxVYm0!1w8s}T0_r3*vv2j(D z05qjwbViw*xv3el3zon4Ou8JxGelmpRbQb$j#K7OL=po&lr1#>`%8D(#jA6U_9|ok zb>*`N{hDPK;p*B;#!Kz7y3k~+&_`~K`GYS?tP*|;M9z)?DqikC74YJ8jXM%#PS*6Y z9i$tPj&r)p?ppZJ8tmIO&OYKy;@n??2uTDo>!bEtDs7PNtYlwW#Qq&3neVwHjg!n* zKijl_Vk9E;*p>1K(kz<(9xANP@BrT&CRm>!UEz>QPc8kAe@$61A$PkCcXuV^;M37% z({aABI=KTs+_o@C4q-Y*^@`m##ymS&?WlfRB*|R4P?Xq+boPznSW~bYXGvRv0NCTu z7=aL;dUprG{M&h&l330ZV z4WX&4aq*1CcePTcN5Y7@UC-kQ-@N5})4<-I*K`mM7QbLK<-cQBhu26_@^^3H3Pgv1 z+@11zmUibl5FV$;_LbqE2B1oD&zf5ehJ4dq>BLq=(pjx~7yRywP3+XA5SdD)`oqHC zt+9POsq;6Fpl^=@Qxyss=OJ!TW;ZhpCujpx!UQoR<~7CsPi+lm z$K0AGAfHZf{V+p2Y%@Ac?O<6RE(Af;F1m9(32+D(FQmq;)zwhW-{1^43sPPwgp(^t zVzQI0i}=z&4p?uCdC_RX2RR74Ah%TMw32M$LJvV)bHRdWEs8Pmu-#O--Jv?m)^c0S zLt5D9km!e~_Jbs?+VOY~e|~U1j7`%-mm%$6ixS3jCumdlsJa^eW?8a-u?~rZLQLgX zXk!Cd#z2!-%X?9qBuoyB_a`MgQ4sGSmH$}zc-2BM19hREvhX`09a(p)1+XKhn5O8= zLj>mHH08n^P&&*|w^`B->V#aZ$b^r~&HlyrJ^&xEB9yDf%eT3z3qVXvc9l0Ztf1Gu zCx4onSa1`6r>n%gXA;t$SG&%VhC9wdLR}Vj2!0CynSNj4{2D_N<_F6m@a|~Q{4bXH zZ#G3=D;oXZLlZMN}Jt`MfkE|6a8E%psfk zskgjF(7e(V$n?sM!et+O^Xi6qAS3_9?bb9z$(1A(<*4YezmHf@zZ`VCmvORz4UF=$oaM&t2F4U=fym6+L@7-aT zlcm3+{oah9lc6<=#7h{LcapNijO?6B_)rRyIjLv)v)8kM`vj12rTE81MY)X5 zX+w5*f_1Cyc5X6lkE><=@9pU=SAx%8=?^}!KiKT$!d>IB^3SMQ18hFeHluD^1sfQ5 z#^NT+$9#AX`XfZl`w99P6@s_jz)QnMdDVqwD5t@VlPooMlkK{7t{wg!;{H)wRM#Q; zr|M%0t5@?Hk*os-7u{h--Fw%l?U-G;;29JrwpG7%_MH-a9;MniivyC^&Bd_$ZvBow zf(dh?8IPmF2k9p z+4btTA>KDZB;x{p_2wwjV}vkOi^KF{**~$6M!cy3)WA7`~8o#*ozIz}!<*iA? z+cE~=y1hudxB9>?k~y*fzD)8g8&qQRhDY7p@fI=sqtj?rJAzY~61<;;gB>aQ^236f zI8g{3B#oY~vr5bYoCm7kEia1daBU2{+|3BhtTG!D#c4z$PSOkylFBw$=TfG6i5ua^hHx z1HpTppm}}mRK0_Mj&7#MlKRq|ER|pf#a(Sj_o-cFZ6s1mqYK#q#szm3BH1^nv?sAb zkla{oa@Wppg#6P4c3Mu616TP+g!mSKN<-ID_cQGul;{l^`QEd%AD%4Nj@`vwC=gXu zk0m)wW7Vv02BpGGXybX|a0mx8-XYxC2t1c1?=<#Z!F@U-csu(5?nL$xwfhG@PU<$e zgFz+ZA(JF@6=^Hi$pok%2#|`t$OLc5Nm}9Y{asHK zAH)uNxw>^rNVGkL+q8WIy+Fi%0&wc>J<=ug^BO;Z{_9oc-&e@;qI=V|V`Lc)i~G2t z;CRp}TsxLpqF1I#HTNO~y_;*jj2E?|DDyikvU(yNM24Y2*S#uKiJPje8!d_?^ZLO8 zh#%XlQSaked#R7Q))ScTv{NPF!t(hV*HzjEO!=hbUN#x7U1Z}pO+6ceeR>f1mvJ^a zf)Q-gZL5qm7Z+C1aegI&1Lk!WrPDyOt50ICdZbX#th*2DjGPB|@XUWP!z`Y-j|H4p zB-$G$$7wtw>!$OLW0_M50I50BI8oW(sYp!X3fu}w;LyI=B`T6IO9MtL{Qdo4X|z!x z!X_?5J=w^1;fAOuFEQ6IiQ9|PJ@hGNd~j{4raRnR93rb^%O0Uu|71BfYhR<= z)+5w+|Gx}4Um5+8U-u0c;amt%EP%+nC+M|40So*!i*P*JG|76ZFlk~J+{TT8ZEO=+F}BN#dGYIkEdp~ ztNS_ibwG#r+Tu+i&(QzFpnnC)TEMW%gD&$-%MS!9wpJ13nGO!U5>Dg>QyryI{2Gpq0)g<_w_3^{)=XEk~RfSGOOION!q$be9-Ug zm#X$-Hr;`V;S-Zz<}W6>ai!|=7qk=XVP&R=yH!GFp9)d+6TQ5L1nWmwmuKvzf1)Jb z#^yCoGEFf*=7wK2W>&)XRseb3iOA2Ym^4rCih18?zIq!xw+u5(PIU@DpBys*=sKQa zMcCR#2Ag9y^B-+YdWB*4d@-N+phx-nFlyaC_yk5$F`^j&XQcMC`N;tb1n^C~-)+HK zbR}hcjJ2_OoEGm(VV{ONH|3LcT(0sXhzOHH*-vZ$2gC9$VH<%sWq?urPW=|(_YAJ3 zmRWGySzzh$I^GM!rHuN{f*&Oug7dS-;MwNkdlO9_um4Ruf*Jo^nFHQyo57;5XGndM zT4X1t=Hf8k&y0(R-OEL}+tZb=a-cXskVaEzxsJk%Xy4r<8S47o^fq>WP}hpW^6QqN z9fa3g<%2f?uIXga=JzrbI4jCFLe^r0|Q z9a8;#YCq*)C_#E~PvNtsisXj?`|lAak{z;A3Da_?DKAFW?*@J#g+iC5Klt`h4leR3{D{cx=5s6slKeJ>gPH_p)G z;l8}Y>}_LxnIWpJ1{-hRTsvG7E0MU_+WwE!@Dgjx$7I=c)kqEG9}M)bh>VF-^TSMvx+DC7jtKZjZ>6otRkJeB>nOZeI$!|Cy-egb%&XP^DL2>!Y$STXDz!K@+5W~kwYz;Z*5zE25S&*eSZca#$RO0-8F?5i7 zqxm~-)okG^4{;v!8Ctp&w`gax0s08W3mX7GC15QcZ*CZmfZXd2!EdjX7d`)?=I_6h z&o0;uJ#J-lqz=((mij%?M9+d9Oer)bal^B`9*0)GBPLQ)p|9_@#UA z;Ag%d>F43(QK3TK7%%VX(ZnSEzrYZ52OI;u=>wjl-Qh@XCZ`^h4kz@fz6=#rnQSqo zW5cgiT6Pe+pI+c|G+4G%tQiF*?6YbTLO}YP4vu7_4IgIyxAjGvwCn7cTfS@+J zd>?&rqLE0|jxp13E4mi_#}5Mn*Nh@|!4z+qfK2g`-^BZ`GTb>(2|`olGvRKMoIuL# zP`xfI+ReP$fC3I`=m2i)AImL=4dBm0bBvST=P4cT|5~n)?!d<@02ptbkN!D8ajGY1 z4Somdi|thpDc&2bMSrYF0j0@nt>)clwAq9I^OXyJS_Qlb-op+4pKa2ARG0wSI`mn# z@&rzvo{|FXUZz?~@tlf2I8RHtXR}%U8nFn}buuPc;7;`s2b-=bXu}NMJXF@C`qE_7 zf^xI}XMV>D+P{E{KOkjFd;wr-X-6#AM7219@YtuX!xsTp)j0JCX=Nc-b;-m}^n_gA zY46>gYk1om`cofUvTaLWTX;oDkx5-5x%}r z$WAoiAKZgJPZJP*WZP4qNyUbrp={S#ByBfL#z{6e;=j6iwJUV9TuKuG>F&wjJma-J zju|E91vK_-Ms=nJK0{5Cg^uY&kKb!JBF$B&K*O}EZbtQP4{W2JemG?MDT`N{mp;%dEohs$ZTwVBN&C$@oMgJoSWA)!GX7 z9@R;Lq{)a~0T#rfh*nnocx6lpJwyvVBD`FMoRQgtKdY6a*tOXjC#5^?GCt{O%ub3} zq?tD1thEr$4!h+MqceL|W%8Zf^ehQoLYnVm z9VjR(1m{~5KPu$gQ7;xl7oD#KkMO#5 zUHtGfR!yiw*lA%j_MYk_MZSUdda*nYFoXS_B(BIQp?Ev`fQx1L1+!B387;uu3fkI^0jL8Iyq<|1lXpM80~0*)~4^z!}3mrvNYSOT1_Y zzLx_6goU7w66hA9JoHlAj49Il zV*`HX8B1tpC8OFcn{$MtZF@!1jv==BsrKB8wsVpH&SU__(>?pMnfPa3ji?|2XSyrE z)x;L2uP{4Kt>?7hzlAmh>&u@lmx%_cluQ{a1$yz85VsSYXxJMF11#ih3_0$%k`j`s zC5sJKh?!~WV!u1ke?LM6{uz>3O#{NSfQ((ffEp*(&6IY;M*^GGu)wQNk9ET7e_>w6 z5PzU*g!q{{-H9#Q)tH?Mk=(zqiRx7^#r%C;>J-?tilm=19Y`ad6xoU#Us`yqv)FL^ z@9+5o78X{#ixA@fgId>Fu@A1Ra!Zn;evDb(1N(Ov0o{ujCy7!o`N-ZR6usy=m<#Sj z?t;f5F{@UY*)$Vb*Wg^YoLB{-bkS5HMVg^b=#$!8<75-2Fg4D1i1KB}a$-cog&XGcQw`knLfN=)$ z>e!(zobZMv9!q*^1H;L>&QN9f-_d`c(b%y+v`rC-VUzI|DQ8@2`5@oBK>ctGf`B>p zAUv8Xu@CMBx~fC!PxA(;9zQ{)M`=tK+|>*@B#l@5Go@A=*)>WT`ykpi(N-Nn zsd`uaZN9D_mFoTwxJFRtR_2#aBhmIV*-%rm`l>_HOMwF`SB?%-<4=bfotpW@1TC)| zc=CLB1{~MWMGf^>?Oab(=F^cHzy{5EZD=zecl$&WnLbPi4^lPT*DhgnU9COgR$f4U~_k8T$6pAA5tJ_W(F%yQkd~h=e~|xrq_BzLjREsQl`SM1`&O_qVnD!`q-xq&UN!E@?C%V~dvwr$ zDhgI%i{2~rc7oaWI9~>-J-NJ*qQFM$Z766r!$6)b63OU<@}e@FUgRpPrDbnKy2E}c zq`!bNvVk~%gQ|D6k9;2bJJ@}QP02sGUNWM*P&Z%$j)c}wq1*K05{&%L`zk8=#7t9k>qeA;1>k7pHx0_{+O)!#(`b z&+v;4xPB*xx=RFC1CF{+4Vvk*Mq@3j@+>!T5BY_PzBc<(lW{HXrpH4*)+h0Z9oY}u zT5)#ut$+@HAXr#H|XYUAMhwCI-ceVOgL ze!KZNkl!AfW8@O;D4e6*T)<4A#9S@0EJ~1e3W6obsox}( zDCWb$R%cbhO=Vli!{y?wPTeHaZk$eNH|=R7w00#g8oQBMeU1q*{iC?$1(-Mw=?!6T zu$)YsSW0O7i6u8EXAszL-F+Xb{tky5o!kG0mXD&^Y^>4?$`tKj&*HOJkukFx6@HvVtm)n0>Vjkg&2rVns^ zXFBQ>ASfNpK+hek$~ei?Z6-PvlFa>|o-8+W1R$o{CkL_a5V{GSfHB0>3yN+Fo}JOw z!Q;CPgGgQ|6xL$I-ex3kR)dw9Lkp_myC!JWujqCw?i2^hRpv8gCu#1tV`)=k`SoeY zPZ#;jh!1f9F35AJTFPKDEII1t6p?riVR9<5ZJo+dtUcnU?MGkpC!KY9R+s|(LHEF$ z-7fC1@o+f%CJ}M?PH~o$5B;FFoqUVUSgGG+WNHaj(+!v@sZ#<>LkctHokB*0oI3R- z#G{p{v1JO$ZJTCVSomtoZcJ^Aii1AngdU6UJ1wRmMvRBa(|mmb#r)u_&R0D#Nl*~w zTdj_ju9zN{#jwTL<4rSd>`Y>5mH>mFPidQ}NlocUm&uFlsu(IO<}~Ky>ve|TW^RwB zo`)-Ojk@DI4$u!(TK189NSb)GuY=}48{!g3i{Y%gz^Qc2tKpi~h_|a2-!-5-P?&{V z^d#gDlPV|Lhr+>x*Gtk>DbdC%NWZ#TZkLR^Xf3AE7T=4|YzQ4aH^%E^C;37CXe>W_D9IzXy-m*z*p*A(Pu4QPUDzaK~|gy|GvCaMf((hEFm zo)(DTTZT|=E1^@fwd+^MO5R7$;>q6uQ|{mQZ*aUWS?co(sNtVSahr;Tk;Y5MbkW4c zx0H2ioXGHiu&53C>3|%6U~}0r0at%ym|8mB@Rblo>xA;>o&)wvp2Nfz;&VRvpHkfA zI;7h<$5}Sr1O-Hahp|?bXPz40fw`-@8e4M-zdj(m38*KA-I<0LQ)H1~tjH07eK@L5E($rf4Eo_< zZRm$h6Gbw@9TP;Ii%nz*#$Zb4FgZu$lINa}8JPE(wXW&DxOhs;%JrsCq`InPC0QV7 z^GE7DQIp)ky7quz68DlGtg@i$@#?E~^NWPf|FRhJ1CvE7W1}C2c{xnuhc6NyWEuK> zWIAH!4s1rI3@LyU5aB2&T|73Jpye;&<_y5B+qVx+SREqxa-g6osMZ5}v}bg$?-yf4 zF`@K2=j{)L9QVcLlO+Nx-lDFDYUz<5V83Hvxe9pI@H}~A3gv+40!K#_vO`A7FJ#@cP*F|#c zgo{2XYM&bxkq+?%J?=FFtfp7GSmNVh*6Zj#onw1!?lRO>TBk8tn!jn5@dxZxle9wl z&O?4ZKZhs$YGwITnfdCg2jS8^M$L1}Pn1`xAfKMjN5Yag$yB@9;$dJ`Fp$?z4tF zg_kc#ok*#A`_f~8xw~_0?jqD_FKH$^Z!5ZklDK6Mmx)t$_OtA#TCU+{v$>O?j9r4Q zp~f|jY}!M1@lN0s&DAzi(4B00>|#;|Be{N&sng-``^sBfdUF%^?)$pO}^SY>2$45#X2i;j!ZD>UR^Q1KS4ezBVbuwLC*7l7(qeNS>NN zy(A#kxSQf5F%sxV@N{VR7ma9#@OO8edJo~y7zP*!7l&(jU+*7N&?aD!8aej92o-~F z|AzZfXgIRiN0h6=KQj>{=ND9B<}r=_jDh~y6*fVRYJ=UhAX%z&7HX{TMVrb^q!*15 z2g}eOChPa3nHZ#iJdNzlRUXYy-(MQSRfdL}#`wtZz>$xLya@Ey;F?a_Vs+*^o8dWsxL<_71gXS&_FwM+{U z>Rx>dwA6`G4s!J}+I||T@3A{KTF^tttEVDffd@1Xr@rCKZdzHqK7&D71+oRZrIIb! zy*t4=XS99>2NU3Xjl%@>hBJrYi?~X9?`s?Q;rcXz!lLpmCEBzTpDfL!8ppQNn4lo^ z-n)q1IP*=TrNQ-`4<7f@SDo#{ewmy<#C!~5Vd{?M5=JyOpJ7}NE!u+Ybn_8M4&BEy zrx(7PEIEOkIcvCdpJWchhq^Cja0TBSa(_bZR;?~wGvT}7%IjAOc_j9IqRv(FhLN@9 zGrxE;L-);2FuoSrZX@S5e^LP2`s_vGLo3uz3410Mk0^4#5`UtaJhhW6q&=j?e`@N@ zkBJ@2CEMgD1PbNk6*i{svcN90I7L1p{HY!-5=E5_QNIQwWrcwcRIOWtNo2o9sZ)5p zHCq|8nCk$K1PWnPuM=4lV5CJ`o=I$|`474?=;Y)R@S}B+I<%11}vU zyPU4}qduV}X@GTkw_LkVtiJ%bAGnUWeSJW?^o13+$JnzQUi{Rc2D*t9Yy=_U82B;* zXqAp8C0ceFjwcIe;l*o{m1BSVV8EV@p)jYd$fr(JAO4`vRb7405419LyWK_gzw3UW zy$$TU@zTwhGrPde2=K&PmdmdWQCV`$2{Kl;*#wPW!VW!YsQ{()PWFoYXP9NyTj(G= zU8vOb)G0|MEG37}2YVM1v56;0qWFz4+2om^^nVo~qfVC@cQ{m`q)%y8HPt`-14qEN zzeOS2g1XQI+WDnZ8SI~-(J1$*=XdaSCa}l}T~siS?}4l07@PvT@aLQ?5AUUoDTnFy z^8tMT1WXykHXkW^64$alEx!WZ;p8Je(02@8MiCNc)llexXDg&@)qpxWJv{LcA;l-x z;`n#~$(Z0HKGMgsza_n4bnrFZ)%H_shF>YfBN`N*_lEd6Y7}UZn)O+@c8anFgOy!{ zPo;=tL=B}^85Uyf2Lhj`Bz-CT+VlS?I`_Di_dkwr`|jQ@t##SDZEH!AbdyqQE3!y- z(jla??n7k~LPxuG;TOIVDq+zf#MzitsL3(7Fr8)X*0E<)Sy0XfqIu26Jm zl=CSDk8c^ktEt(mCNc!Oz>$;=a;)`Y#S?IS@J^Lq84H6TX6!?Gn+sB0Ya`1I&&MD2 z0reyuAHS#sZB>cX93>R8`Jhc1H>i3P;2u)*#!s-jaNN#%c{DuCY}`xA&IqSMvnDFR zc{(F73_w|LMjPirF<+wL9+z8)_Sz8Vg4kl^QE%PH;x>_Ll>3L~$}V)S$$Ft)%hUJ=q$&}LFpXaefOO|x z3DQ1?0knjFrHONZj|U>b8-G6jOU=fhwy~lzQF|Kxqvw2N^Dr0E`iRQlGSejL98zX)9pL#P-_pk zC4%;)ipPruK_-Q%KzRGJpKi?A@~YqgdfEx@G^+JQ_{?E&O9JgzR?VpMg~f#41>$NI zEuuFy19OTE(oXnIEVd-gU;4)Rv@%uxIA0^qC>-ug`iO>iL`vDzm6wT$$q2`Hg!*iJ zf@7`H8 z6#x_k9-0;O#Mj}zq&n_6i6S!c=9n^3trUboa_n2NOuQE=f2aTQjkES;fvmZ#(56bD zah|+yAkG}nG01Bz!91!!B+-8*L(<M8^R89155y)=sOpMgN;+l(Z z%?XSW+(Q)uZ}+w9^z#J3&Rirj;6aQEbY`Ck=Yx6_jjAnBo*ZCnHjs9?xy5$~JbaB0 zzG}&q`Tqc>js`vJ!ZV3qrQ`z(%#@~YFi?Uz&LK%}e0+5F`PxW+pWq}y5iR|jqG|Z< zlrzr-jkR(WXeg!8;PKy$^bASsJ}_UJ{X(DC$CAhAw1F*V&JXHS+wlbajb`De_<6MT4daHoIN*$g%!1DJIeMmD!tN zD2t06F|~k01EGK8NF_?f!=30u16)$w+)`Mqc#~yt^sJ3SZvcGr6&6R6RBtTc6v?Rz zzTV#9cNfLSdkc;;R-RXsSvEdsL!I3t{90-nrjJxjm;DY7j!T)u2k{Z}>;p;q3GBkz zlCvOA#D<}mFr?-*I^nt8$_471fMfy5@&myz7Dt-iX-l3*viRsZQC$8BE&_YNA%80# zG5t9TKM(%*Av@q|Dr1C{p-6x<&s+oeU4y6rlvV9(dRF{@YdQXXyiIhVMf&m z1G0r5@pymx1fC9m?aT-;S<|f2$OTl6f8_(p(St#m-A7ml-oEW;E{*Z?yjCIV!<^%#<; z_^efe{ae$q!F{$7)H2@WZsB&UXcddRlD? zHgl;DHBlMLtU%^~_u0_sjFzh;;&8s22%K|yW zCrc5tzIEAv2FI_hM`y$t1$V;?Ll|bmQOv4)*lEYO`$J)0v}-#t*HRkHdR@@CRM$VJ z#3JULgsy6Jh@2OzNEPBM0N51W4d%F&nJ65pE<0(0{#mD6!YMrXjN<)B@Wa`V<0iVM zTK;gNnEF!CwNbmrt-%#4p4#A+JTlJddXuE?cx3Xm>)MKYnuM4mz^gs!Q-=C!q-I6X z(56hu{ib}%re~nPfZvlMKANmnzY2@DN6*Lj^O`sLhClMs&iKi>Hi3#gslNmX7CM@? zdSt?8T%!}-V~K7Pn;*zgoL5hPLaS0;$f)HLzWVT+XPT-~3>t9b@Lwk!TTU@MJmO>I4#L;8v@>2vo0Akp;D3k}HHw0lZabxivJ}!bs6&>YNAF zM{s4oCH>9oSSC6`qCW>Q4=cOAnJ`tuY}TvL6ohRSJ{ESZ1k{plJA)MsA0LVtRpH|9 zD!syr{Y8RE%v>|w{KL(Y}JBQ^HKsEIZBCT=6yea~Gs$Pbzlyn-#(j zdjwNJY&aGo1l9BJ5}z#~L`A|_@=IA85i|rmH#D^_GQ6{eOVZWtB`)bqu-`s_9lG;Z zDU8Cr%RntZ11oLv=X(sm#R$-9ghYx?5U(slhm4>WcWc31<1d8Ej{z%qh^CO^%1xqf zD>=rl*(pamT3guWxKH1@$@p@$2m{@;XQmGCCe<9Z z>0CELcd!E3OB_rPTvFlbU`suHwj1#takG8LM@_9o9LiyzvY|xty08>(Ae?5gSX}Cs zNEvC;V%uVzpZN1{Zu4rW=X}_@pMNNuoH{OJSKTDu&(nm<(FY@vsEcKRC~EQ;{qQNw zso%iHYWq(_GoQk&ebgeiF4pv-%M&wsgShYB(;JN$s0H?!4J^l7-0h~__V85=Zf1QCZWE_tI~USGC*TL` zq%t2t@jkX>`*t1!;apo_)9sGkKEbIS1fkNYP-+LwHWGII#<_wJ%Vz5z+wunmz|UdG zaRCp4v-NG`9#qo~QJ!!3H*8?24j_jbK+|N}D;7Ix_jVbY#7LDWsbflq34orOLh+mm zvL(G?wey>aE7&O7IvJZlUSaT@Et=Yx12W+%!HNOEA4Abgbl)(IVnupvWZh*M*{T#k zC%%FD_uwvFzlZCbo)lpzF+-R@TeuOa(0qkk9R?LZ*tA{7M(-|&EV0lmiU)>r{9162 zIniJ;LGvYH!n09g-!%2IYHb7UTpW+;EZ#a!zxLdDGZkCc2_5<(!Sfsc!gZY*{qU5o zT_>1gRokANDv@7d=Fgi8Nxks{mkLTPzsdhiOD+nq=j|khaPPFVVBVDqT^uq)`4)Ya zGvaO4x$%NkE;|(e%|EskKgrO2m}lmFsnnQLASbdO2&N7m67~amy z(S`|naFriZ(&ZzBL6NMxY0g1J)9+LF3o2@p?z+H4EbLg}y+uK|W;UZf6ng$*CPbYr zMS6bNH7f9}K-wE|7eIFMEk4Ch7Pr`qSYALZw~DtCH_wLpjFz%d)WYZ78({X|G!m9N z>SUOyx!b^!eA!+8FPrxgvz(xn;VeMmwwg?e=4i%?*frVsU<;{b?%t`5bnHS4qz13| z@Bz$a^xHTY2xrM_9q^*9O+)k$i#7vl(M|0HdGT$_-9y(b&SvYkCxLS?+qla@JQwY? z42k$K4z?1G?PMec1a`AQo#JxBSMcpkfvCH=i^KiJuncR^g#_A}i?4hR>w|+zLLjWb zg_A&2+~vdvp=lY?xpbEZo4` z-|OeFxtpLm4*=*~+$X+hdLGH*`5o5!#DOdyF=T|0eL;>vS@mkCZxDnG{kn_-hYZt? zW9|RcHm0c8Gf`LHa9pVfq1d5e2kI|2@8fDC#Ywuv&Gp4Z@j(!1l-Ss~-wUUuC96OG zhfg>O+-gpZG>LqS^xy#@%OP1J=yTB0x%rWz9fYS@#+<#3D!Tq1N9rThcXK+Af*6q8 zE4k00f2Kfe);=Yc=Keb`{SKn=!}F!v?WM=D3IC{Ky)uo=Mwfjy4GXNQ z6axJay==K~2j*B3X7IG~lC8cMyX?H8=>uK65q)Jgb7g(_``7`+RLwPX5OtJO>x}xL zuMlkbL9f21@1L1#R5O-we8a!8g0&E3tpk##?qj=2gRstyqZVtfdPk6Fi+-oIUx2@( zF7N-&@&6ON!JZ#MlCqp6UFk*hTpB~w2X|`n6l$l2mnm{@0HX)#B5B$q5ggz0wx4u>OmFu^d!ZVT7VkYbvgAt87R zF$d5O2T-5KZ2I}PeW#T}&eVHaNU9G+oX586? z@OGm_lSJ~mfz^vlf$7*&zC*%LQ^eb*p6UF`OOs6+!D$`|IH&MZ@Jq3LE!09?rwv6Y=Geb7by{>0x+LS7CreKc1~eWA5NejY?)N3ZIv2 zZJnpVeCISkgzR{f!*Y!pAAG)=@o*Dr>sVNW0vp5N7RbwjM`|4mHD=S4$x?XFs{(Oi zhTL(!p7JqQ*y~Uh$=$uNR#66amYpafKD60?j8Cy7V>;_C``v;@QRO7ps@bCW!CMj?$DFh&gWax7vKj}{fl;u7Y z<1V88e$)3h)TeSqYt+0dU_%JA+|D~-A2`iNfU2jGohyJDZyBteyp6g`H+7EC*F_5) zwgW5W@h>-t=V}ETh2C;Z=2Dl}$^`ptIneROrKkn}N(3FTWmCS(e~S{Y_& zMkXyvmjnL3$1i|^AF2+BliwD&V)MAP5gy?t{Kp} zcVi_Ypg?#4^4{kaPxnzITgb^_V;brz zJx{>)>oYO6+x0Po`#-?iT$rd8{|`Os2q{vwhCV#ob&248u&mgj>WSpBWrHnlzJ01- zCnI6E;wsH_fjwsm`dM2OHVaZrknW8myk9ZyBB8CX5+eGR(Dtm8Izw+~i67{R@6JpX zKWQ#Wz}%^f*3L5!r#;fOgKjMOFiWBg@aow>I}fJ5Q}>w*pG272g91a%DwRzpUCgQV zqeX2rZN3XI;(_Xpa$|rcG|#ati?@|k_76+fW9A&R6z~Y=Ac5*{1T=Z3e=|LLY4XQ6 zpd0Aa!T%b{&5rMZ2F;j%o4B~n*wQk@sh(Y-%lbuR(*3*yO}90AlSfXP5N!j=gQ7!I zE4QK}$zUo2+vU_*xqmYA0jQU|iDNkCsevWxk-g}HZlKHLFj+d(?gGSi!ZV(-bChXq zaBI9JGr%;$Nq2RBDL8T&DJ}6Pocs~SSZgW$Hx+<5R%3iDQs>k)W9F>tp)&z%4)vl7Rd1)?YF8eL z2=Vi|t8P?CX!2B1WZgR97m&7E?L^G+9Jn$YKh)#P{U?0YEy~d2Mcmn#*H-!WY#T42 z?Jb-(;K%JdP9|ZT$fPsh!FA;q@!anm`~5nICyYXszce@T=?QTY=u^K+o}tR2tL$=` zVh4)OmG_Q+{ta&s*r)C}%m~o5VWX-wnYS?i23L|o*_iAgZ{^qVu%Rp~Q!LB+P&Axl zcg@D4k765HH?G;nuCzRji@zoRR6{7FF&lgCV?WMDO^y({-a&u&vw3EPZ4yOu2WOPL zEtr?0KyQ9y0r{UtgoiBUO|%^+!E);^&Ek35tGcLNjIvU_9@BCAPAg>--~GM-zY8?% zW+8+u(ggjly^ISk)chHIzWMq-WqWa7X5aNVcp=Gp42I>NX}IM#DKH+y z4MaVtJ2UG&VbmDmp4b#gU^f1*9pL8iPMBuQS&jZL?7Bc`a*U8nZ>+;F_lMtOJH+NO z2YWBgEq`}NxvmZ|$tI|!js_x$Ut3XZBSLsdI`q+n&}ECV(}GXjhH5UYF`5@Q*GD+@v3=>R>s{lyi0}QKI+#B)+ zm2~LkKR4h&Ghx-?p<|4r({u;;{00nax~dbG9pk5r?5NOexJPuVlGj3FSNYFJ%GXC3 zD@74!m?b^YrYWglY0#!`2b^ZyHT>b&4Fk}szQKq~g%iXqd++dv0iBMK^Qy3Hi^{pG zQqRfa04{eCGij7owGXJ0Fi_i5uAhF*PW1cP@y&K+mvmI8y6fI)2w1OJ0;3?iqnbF% zaC?DqjSOzGOtwm0!3?Az5%^ji6#%TmOBnXQnf^8lw(HjX0O8tHH?owLHwOH?msy(8 z*I~63%$6dyCRV}|*%!xM)P8SAZ32<|_1-!ZAN0M)Qt)(wpD*{!YS8OW?Jp4Z6P&ju z0ci2e)IYE-nM3sffs2)Gs%7QesS&&IhLW&+9oY(P3c<(xsp(8tmJTVu4i~tC)JQcT zMo;M0oo4Bjn%}3JG=$|+L?46aU{D?OU6A217G`7&oqnln#Q*A8P_u?+Z8pUOH|)1q zICE&q9ts>85-0=#fO*0m99UPXIY15c=k@#Y{eSp2eRV9Mr~8F3EJomGQ#*MJO(CS# z0?oBy&T)t8`!ySgyAz8L(FSsWRaGUg*N6g)^?Kf4xYDhfV}c{|@p)y64xTmy{WZA3 zqA)O*Xr-o@YG~SH!ZqK*@|H2SZYG9^#yDk5xYRYG%3;o@Y!OJZph6a*$^1ysYJ%4> z!BL5_g8C41Ud!ffa)$hu=wI9;Mos1ZZo*^SyV<;cROUf)ZqQuF{~iz*#6lA)&zlqU zoo5mFrFA0;b(_fVYshtztt@hli!@HFH_8cbpCfQd5j9YF?H-YHFI{=_M?pz}Zi6@pu?T{s+$I*A>2;5F> zELT0b&AqQUr+g!n9UTL}sxR2vOsM`MB}=4i0->LJK@xyTYlA3&%;;KIuNXWBHW#Qd zlf}6Sf??nAHtcQR!0Up1%)LO0HkRdbvn2LUd6SA%R<2)uO8yX&8cDIbO%Z?7{Dt2c zquFUXyUX+uCsm>=n~6~iOt~YRUlv68hcBN3Dv9OW6ill?rXc-aK}0(DC&;Hyfyc>-gfYVJ%Sa>NY~R_KG&<({^&; zFu}z;rAB=KOaOM(QRnwV2)vEhH@i~}byH24LPqx`)xAARf?UH4DmCS$qxL!pE_l>G zNtZ7{3EH=h+?Tt5WV0n7!%M!vBSi-gZk5fpY z&h8WR+tywsuUbY88Q|pX4Tk((HEVDygP>+&8A|t*=^O6r891y^5VIlq?<4fsNM9e_ zEx=mDP_^db`A+U87LibQN2DJa>_n?-4iS0@$%0`;33 zoO|PoCX^51Np^7>S$aS}b_CsA654yEla)vB9O)$C;DL9pXoqL`yZzh60Y zWi4Ln?j7!MLqf+KGMN>QgOtVpgE7#`MxXEnqm`1K*p*y)hy{7NY>AWOosvx41*`m~ z7X{LO?43U-+GO;>llpyBE8I9#rcOGtc*a=T=Xx+k;3}xaU z6Pzwt`ngfO>)KrO4?_J#bhZ-pLq)LE6jB-$h8E)DE_lkna1oOqxK#K%Zd!}3heQgU z*Cnq*;hunVfb8fy2Arxyd+f-4?2K-fKB<)$vuNlf9;z#Z-iv&jnw-j=_3x~^hEo2+ zrJ0miDW}e)=og8t&8h&RHZC@dqp$WFb2139oXy&37WXrAaSU9$GFyjNp*0~ zl4lIFcxQ!d&As2nid)3HzgceQuAo(HDF60|D4)@T`;4Ib(fE=m_&X(v58y`Vqj!KG z+e5PvBe}>upCagE%Dzt!u0sFut*`vE7i~2|BNQ42=uoQbVbXEia?2V9X&=orI3lVTjejS{=_ipjdKE}lq4X`1?eBpAvNWL3Zh?k(oiy0$}X>YiX%KVCL? z^WL1B^KX)R6cv|lR^_s|rwbX5$F<(-J^@~|VuDk(P`}NrYPPy?RZXh;#NuXUOLw4x z3Q4W_r!|7%FzLTgaR9%Tfl7QyUdYkTVU=gIfeGC_N+&G@r)Pgq<06_ryx2lWdIxVl(#-k5*y=gH?gms$jYef=an~qGT?{D5vLgUBKadF~&$j~ksU|jv zd|Vp-d;|V)AgUGH$l2cv#R5W=?-6FZ-%1R z!Q-vGi&so*ad9r;8I?6mPYOJx84ds(W6x81rd^{Ss8j~I_O^#i)4$7iq$w|{z_6NM z>zR)I?Q*lcL!@}pqnnkVNr5+0-8l;Sr4;oLBLBRpSgOeV#O-$v1m?y-eq+0`{}>`E z)cBLDQstX6H7l$WnA|xo#+-8WlS?CnYX{^2dAyS2r+V03Aa%Mk#`z^gIhVR-sr=Ak z-=>Y2Yt6)}WrUeolZ213z=Gr^y@Ef2x{qCQQ2-&{`l{D(&Ves8J3^(;a4UtV>U&Vu zDG)v^YpP%;ePl(NTF8FTKsrfw*m@;R*9(Q5{$iKRW&)DJFIY$#gWak{`_|zrN0sHi za3djc-5nkI&Uc_IwRPR-CvRrvp6Hrsys#fJUShj1M*R&GMbo_x$lWq@oA^*|Na5oL zH_X5z=oMeV8?}i074S2Rf8*giuuv0<@IDp)5h43UkJ{}3Ul-g%bo(Ya)keV@r-WfY z#&o*AiFYjE zfH0RyRTJ93Zqli4AJduvjs_J4b%?3+Hlq{tg!fGS`ETKr3e0kmvO~3mfH~zM_DWNN z^+OGRFT%qs*LPr_;TJc6wSr-kJ6Cv-U@E1>(sq>;40TYQ|4zj$ux+$PPt6pqB@}zP z_9$KKZJmw42J98jTVZG2jj*@}P_Fv~RK0IS#)PPjK)lB1J@2aksA&_JH95sG8kVlo!~NN;H_qZMT8?R(h!0DW1iA8>cRP<9z$JvJ_VdI((!IFaJh|tenE$CBE0?07 z{8Vg3m#}!g{-i}xdy3qRE)znVy;}Y;ne7{RxP^xhvstxvlJ4YPSO=Y2HQ>o^^ds75 znCWX%^&aaC20v*zq1&BccaZx(K<}*9q}_&Lg?b9qIHYXhx#vIA9hxuP-(DbM=?~vS zSenz7q?ZG#P1AI%4zj@ov1_Y|(uO)6q8pvyH2gw}d2I|=qu*~SdCNQT9H14}STkvS7^K36oNi;0>qn@!Lm|{(c^$Z0p&zHhWw^a6C4QkZqrXs0{^I=9M?#lQ!<_< zubnCOE%wi6CDq`(29nbB1r=;#Eq$$EqWBGUXl{vd2>+HXhJ~vN5MC6fH&k4yBd$u* zp(=Nz%FBZ+7uBe+#_y!f9}7zENw$i@v3rM9hnULisMFT^CrEKyhr*-chRNBttx)^b z;^ArKZ2*z1_-N^;XMYOwyrla=@8!`N6}5AWz8u)DrX76SD_KF~r|0t)5 zmbBXmFHXV6rh{{q*&Bw>b5@^>7ZH)-QlkniFxn&FdfR!Q0=@|!lInQyuvM*fin@yK z45z65eT7a(5Rg=WV~>%}{8x%!OHiH*M?WJRZp6qs8n5wvYUgW8NZS#|v=b_X}=|&IG>|DgK94 zQNewxi%7@G-I|&Yp{qW#OoXP1am1k$CVb+hrK+zm^R%|&Qj*jw&`bCUx2H@sCs7k= z6Q~bw#+8=~cV7+zH?ZIROpl3xG(2Y7^p;}mAl{D`Z`a{4?y2mG${?2I)cN5L+5DEf zlD|!RT>Y0!5(09~!f$h#eAj>VKm6RQb#_m~*G-cNcgMZa`!;?4O|lpeGjK=(HESz>AV#H4;x(V}=ZlOObQ}`VJ~2X{Zf|WDyUs{{^AUtQS3lQh z%DTqryBCS$RUhoc!Ni8aBaEC*I`qAj3_ml4lgr(?UvP=CCgMA3#D1TVF+bx%rud+; z?=Qq8QB%7nRr45~rw|Q}TEAm{EmtHEG`$JC<~c(5;%F}RncS5f6YzEqUK+1{5Hov7 zpItOUf7n;l-r^hXh)&D`#n^_V188RKGh{ErmJbJ}reZh`n<-ukBtN(v8QhKXgQ_Mq zHU7Nflb!iKah65(9Y0hWF^Vj&NLe>wB5q{wN%P4D7=E_zHeWcjyQqsD;pV64Re!6sBvh<_po}cOT>_ zyU-0*ggB=QO8RLDYP}Bq7(sM*cPcJkMiAAZYA~_2$rCfG0HqekGc37Lpx9`gtF!5I z2Yh`weMXwHevkZ*DR4njkc~g<`{$X*LosL3+h~2x>Czx5XJ+6rZ@C2>pZ69fH7#)J zP?sNiB~J^J9HbC7#fEiBay6;;C1C|&%SGRBqs*uk9L3Jut;`J*JR@I9pk6DWJhV_}&MSHn{mLxp z2!9QuZQWsCQ&{uNp%QMxYy3u#bvJej|7ykVoM(LLDTAoi*|0$oFo(^uJoGl4j20)+ zoKF!BktJZf!Hakf*MqI_{H$4g*Ae}0s(5}A@uO7k=iFegDD;88KTLO%-o(eulq?WB z(Pp6jMez3*D4Idgf1fIXoN4bm&8%A9hxF_y>ib$yz_YOq{3fh!N3AoumdC!H?C z9Ew4B5K610U7=$D^>*$&tC{&4uZS=>z(x|G?2p+e|S)(;5M28X*%IYPC(^YfLk_VUM%b_0pmKJK9qE zZ^^fa4=kQJw4vB(xaT@zJ3-TEo{SFGY9xTY@OE|o5L-qPy*kZRg=(Pta`g>0eDINMS7zmPZjZL58Y9tqzi)<0UGQl zl;Z1HSY#s=?jTL03;y7^A7$0dplC00XXMCes382{62OpGO!t&k5~Aj7FE5J+eR&&j zdUG3daVvfxVb@BOc8-Wy_2_1SRHDa!gS+UIXk+{Pu=oj}X_#HW)zh;2yn&qsB3W&L zi`oFyagK^A5ZY_uDt2|D=10?SVlwo{R5+;ASW4--g&MYOi80vBGn#|_LjdlmY|N~9 z@r`aD3g7aOVn=2I1$;lB$@fnHlNPs3xxaL)8`ED|b0XKY8D(5*s>~LrSapl!aSRDl z^8;##Pm){PQ%n@>o;4b5AMMVKp?q5F49(a#j{hJR7zS*tL*eo}07%zUm>b9a3WN!4 z(;CdflZAae@iz60V$2p#mgI;``V5~N+_v2m36@43eZZz+y(i{Llnzo>$j57i*_gL$ zB@fdT2R29u5%vI^P=^|f)Xp)rvHXtj{LWcfIt()1Zxo${*9nW)t)XXI`z9O!*Vb|#CNa? zHtI426_7_T;7}b!;7roTVuWy&VeK|_fY1G?Y0zP_8S;zl#%qNqm&S+6r=-XjwENpj zhlWv^0$PU6S(|iOFNrDL!QvmH+H*O~sgw*WLkX^wpuP-%S|7K!8EP$_|%dEH; zvpl1X!DraK#ctxQ_(jvTzwa>pelprv-$XgRRL}!u*EJo-S`*f&x9SUE|KC9m& z!4!$ul4`8kVFIYitYBrY_5180%2=3zORLK-bi6`fgIjBatXE;3u2pR|3mq)A`K0zm zAQp;R97)mU*e1MJJ)dV(;AB?jyQmd2Fz-AS7}m?-G&S|0x8iv`B6&uXhSu(YGJwnZ z8Rp#dq<*a79K!p-iho`ZnRljWaCc!*P~$aB;Y|LuN}R_bv+%TS3s6l0f$``6Vu)J-;KV|9=N9%|Uvv8kiTsV7ID^`UH!7+# zL7EAh0q)vab4-IQ?Zr_G|3`%L?h+^h_P^bVozvVOmM0-!^HnjroWULvWVBknY+!X6 zXfF3p=YyJW4(gD#iRP3y1rIV9(CD|Y+E>ugcTgp1g#b8s1a}MA`b|@6zu{<^vXz+I z{`@|5iueWE1JYgWhfAq3GvUo|3kEJM6F(G`f6&OFBkR9>uuFZ+^4y`HMKV+s7@<#s zwAq1^e!3;a_#j4ZcK2@vOt1kp5QcA&_|#D*ZWHHDj)tWM*xI`p)BGvg$K~2N^llR> z2LQqA4SkXn>{CnF#tYFOk-_%H13NTPcv%1rkFf~608Zjh1|J{687NXVg|^GTGjS1I zsExFM8obd{@*8inc|UwI{l{iE>@XvCRs-A>@jawzUUI+OHaOOzOd-GvJgQ$w=4vRo zBTo?eJut_95GsPOWh;cS@Q=@MG-Udv~x?-)h?%6JTrb#Md@T)XOt9se~#U{E@C!e5enp zY>(hnkJ7%u1Q>c<4^jo7*HD=76JwQuC9w1Mf^$MMS=@5r^PyIBHrk`Rm75ia|Lb{Ug1ET{O&LUA zS{wqY%1MI(wceMg3U@Ofo)iU9|%JasVh|`*>?8Rk7xXM;Pc@9q!b2Lp`%2 z!jy-(9Rj%?@RrXdUtq*WHB*w*gA2f<;of@Vg|A_m(Ia8CC&oBcv&|7r6C8i8ZiT%o zVa)??UAkFt@f3W?q9s9WEsq5yr-hXagfVk=qu<+!uhXV)GB@`^)pfj2g`P>OgC{6r zREz|+x9W!FCpn@3(0p<$LbQ$P@;@9TZ49hLG>+4$K0}E!(?u`vR!||T@yXav zj{Qo?kam(l1%ZgfqJF9N5nJRROv@?)s5T@ zRPq9Re3dG&61@yol>6u=@O|>VGgbcyUzVLxr8q4s^bQ}kZ0@y*U8XO(#kKVlK5}x; z7OvP&a(s^Hl8E-v5;c|%HGYR?oWM^5IMP=LPjyx6N?w=`o1Ge#g1bGh)FcADqVgjM zkMI=TjOu=tp)UUm_Ewz9kk@_#EAxA96*NB8>zfVOH6OggGx7iI(?nTxUpDWpyQ%|8 zfJ-}SfYGXI1c{i$lfEIQYt1dhohWfA=Fe8e^rEy1@ClXcWbe=c7QF=7bqg0sKgIu; zt`!$Q7aFG2)nn&7K>ioFj5gHTrISf==aD<8J51BaIN{5qKM{D?iSPeees{Zc+~(*I zJ86cWv`z3RBz4(Hm}|B$T{TE>Ba5$6Qy(qSupHbus{MG^hk{}6@JH;r1Zb05A5-}F zv1GP#*zD_ai>e>1QBa)cCM5&%Qqz4G#UEMH5Fgz`({G|mde*GwySO1qkoyc3{=H%+ zz9R^KYJrSRyyK#I9-#XcZrVeJpqwgfv5j9tCU(JKLCJja4YPTYe)NZ68ZIFefksI= zB5r1KF~j~TT-{8JslCy2_Y_;R>0`mj1jKLfMBg3)LthdpmcXtD3x~bjQO1+aih0vp ze)nuc7zen1^`CGtd(aE&FUzwMJ71ipm?kh+s_3~QX00FCLu)C*CDhA3@l(NQ7{w?xsO5Gs4cGF6V<2jhxz`Y^#bLWRpeUujLp;^{kKgGY8KP^+_woS%tAAW;3_Hm>3 zff+Gkzki_nf0H|)VItZl!Q|^)m8h#B-&2EJ-p&DfU_*r_5!c^cK+*1R7cBZKp2aP0 zlP@S1CgP?Sj#zb^E}D-w1Z$#cE4Co?1ciK##?A#G<{UDCEgIr$u@r;gn=`$6Dj@Dn`Oo6~RZa2kX(3nt}e1g836Aw^oDpu6_P2 z_eOVB+{Dn(2t7?mNMwOeImMCv3*Lp)En<)uJ8i?}S-X!l3a0)#S!~_GErc)bHmkl( z4)J61CDAw&9*Uo4l|4FP%^3O6+lNAu*k} z+Zq#kcQtyA>^Uo8k2lEDA;mZO%>{Kk22fl_gEBV9XT(D;U1}$%j*L&#C`yXGEY=XVy-jaCp9dn6imWEBz)YL66x`XmxMZ>#bVX;V=I1w)$1*q1Cs?(sp2b(U;i3^ zfgJ}V0gr54pVr*(6>j9k9#!{mh}T49ya4o)BOQn_=2n55=xDKeRxOZm=b4N}sezrI zcf&+rWaGX9gi^9WsyR0ogu5Nw=OPLmztPX4+ZLVhC-%%D&10L+C2%sBmG%uyF%I4b zss)kZm%nvsmSMU`W%vh9rkwP_MtG^)C!E%d_K;u_(=a)_JT7`* z&y8ry8}j3{fN%7(_PRrVs0hzlx|c=NOeJAAoBJ)%RQrWfK2r!XSk*gN`|NL)mSzGC z(cHmkjJVUc$$l5Y8+Ga!7#aUb_g@XHs$1lVDM?Af@3YJi!-o~Ymvo(|U}^$_5Z?Ya zvQij%3bu_D`l>ZW05jBq`P8 zy33HmMUXG%P+-a!Ct=S7;jl$m3wbTRB?~sn52R?silIfZ>r@@Zp zBe6XQ_YpVE32N9eO5Z@K1>}y?>jgjfxeR+K(~W3-J6iGzfa4EdQnq5;WMI6zj8Hn{ zt0W~`yKX}w_D^T#{$K>2o=^?j2*ICY(M(sfV57tnti0xQhE;4H$elIdF|}kAo0%wbL3Niae%D5vMiA(~ z(pMs?u^HTryr)#|wUVb%W7m9Bd~<+N=PYqAE|YexjDMg< z&DgJBLrQmR3`vupJcLNbg?@jB6$oQpn!_UNHcJyH=!-%q#)-Qi*0@OMpBGB3!~0$( z&p4}pXVI5#D4j83njx;j7CLkk{i!LXW-i^JIR8O)o(s6-U?w_Sf)Kj0u}73d_MNww zfRfA4R&Z@B+!b;r9SZDG9RWSPYdNUpVohr)Bh#;uiR#Ly9L+8)BsUn*8H=Uo(f4-< zEi8uS*~gC;6ajdO6C`U;uG=Qn0e*j&!9(U_aef}}0foHxl?G2@x~hD2F6jIW+gdnT zQOm?f#>*p`=+#lrDk?OOS^?K#l{g8a&+;LN!NTBy)sG=LXL`qi#+Ol(DovfT`&9+3mH(d0C1!1<=vdok}0cDQ6$O| z^Vm=N(Rkr}hrAuAm7~Ig$smNZFf7s#H^=ZR!egLTI#Xz&py+8q-Ct_Do)&G~Wz)y% z6b%=MYA9ar!Zlwxja{hcU+7f>!XsWop~?7?8*KgRscv}D!6N@q-Nnbo+}p$%cu5cb z*+tTwo2Fgts+ox5#QU)3pEuwpTJ;Vc|5r^LaqXOmV%KQt1OTs1sr4g%G;LH6vUIfh zsXI#kN%~>k=nh3Gmj>6SVrD0r!;7l8X>NQMFa1kE)H+4c`eM7qMdOsl80T$L>->dZ z!)hhTD5^<*HbA7J^<`sTRF4&&@)}mz|&(o4`wxi$3JKqwu9+cuHZV{ zQ`6;FRE&pp%8F(KYK?J%uprbB47cuObftrdos3|e%mr^#{{&!XUO2#t9gzDFYU@SmN2vD@{L*Op^s!X=#4@)RBisU*~ z>9GnAV76vDKrd>8;C)N*(iJ3Xg%>6)##*ciBVD3%Hdk zblGwi+^hl%idVS(bNHzVjPjgH-5Qj&8R31Q=Y;SFlgZ+RsGt9*=v@3--v2oM-M+iG zw(f1+wkcf{U6!n*zT1)^Ovj}Xwp13$Bu=iobwe1EqF96wcIfBia@ZyC*-ett?B%eVL}N1=ip1 z%4lr%_5+x{p#JTy;_>v*Kx}W8_^`5**euohGTCWPE(%i(%?5KUxD}dsz2bw)`b@a8 z=%V(LZLG@(G5<-VC?iE_=cwJ>7nv2Hu|B++q0_w8Yb*C`(TgAozcC(EYq5r5MY50B+{_!a6Cq4vADGkE5{Fvz@MnEon5ly5QLO|TP^6F{c2MpH&e zGYFe~#gMSqi6E+5sjjg!TqP{<$NmrC-*l2dF%OV;r-?voKs$U4^Ym+8Dy82hi4eER zV&+uv{l#1>whU7eC+$G%+or&k5i4>^@N+G6a$t6>R{aqS<3`|f@S#WS={o*b1$d+V zDXaJtCHrv~x));d1JsZ!j@C!7j@7%{-%v33uP_v=e~f546y_3T2iH9OE3&$SxFH+t z;`YoCc?cg(D1kSIG@W6u3>&aF{(aH#O(1y1}>d)F3_W50&dZ(nOT;(se=HHvF#% zaIhbPvyMC$EEp$%Q8+E0N|F6ridS?xf5y;)>B-( zbyX?K?%$S6##zjoq8p&wD0GG~`kEuaL@uB#+NPPzRbCuaev#&M!tn?3J_tj17DX)Hcr=M$6hFFT(a~%*9EV=EE%!7mU ziPgY~LeRNPb@y0U@3c!BbsI`EV{Jhf^?M~oJWiUFle|?N4G$mz zXn3AL=DZF{_u_#wZ% ziZpf8N8*jkzvzAcqWZ3lBI_myM)$?*?s%GP=E~xPNB*K}?HWjvlzbNxbs{g-n1MDz zGs%VK6%SDLm%meT{N~}Cl@pS*6uDXW+NNEA^M_M$Qvg2l_gbc8YZbU3bOB-ge&PfV zo#puKI8@Vf2sJ%D#tgBb&H7lV&9G0eu?RkaebGbPII$`b$r2+I_$M;;HNagLh48254&gy-nNy0SgtY~R(dhmn=qI99N*3+$o|6j z5>#yyvv5u>4^ioKr_QC?oA$g+hJ;HuQ(VjJ*ssjBE0UqTwVF1M!DP97MA#P5`583@ zz~e#DjHiw=EMe+~EK_MRW<=FX19hp5h0k}s%5tVcVK~^NAT$l)z&BXg;F!L_qG~Is z^jmG}Y{rY0_e6S>t1Q-Z9-S)QpWp6^zP!t7mM9nfiAoPn<7HMz0d~hiG#x*8omrfh zM}HkzWm3p1g_j7mF}TI^sOD`Na}Cwi8~a!Yk~?HV!8HB&XF5@8YBFYqw|na|s=k_1 zb`M9XbDC^6wxa>pIcY?jn<#tB%Q4|VKy4{;S9FOpQ?dz6(rk`WwW>1I6pICtmi{d4 z9w=@&McH~v{bdQ>@vuHy3LToG-(t^{a`3%!Vr)bd_wrhkKcjYoP z)?7i}JW&*s>vvT$_$RIaM!eBU z?3H63LjB5eIjwt-{W2}z6OpY}t1wsB)In*Tqbnp5q`3+VCpxsj_{@)yvduZc_n9x@ zD5`kWd~~WUXq@a&Jv*(-&J6)Tv_Ga)f1^&g$mHaP^c3P`00W2ZoV6QJD6slWu$+zz zFy02aiZsWz9m*%`W3&#Gs=2u}8vro%b!2puD|uFqE(mxHly%nK0eNq4qcK+N!4{R? zIZSlxQP)}|5CP$i!u3dIavqPb0SU6VE8@cNXH)X_Y^nRMdNeJ{Ej;f&ZZf@$R-zl` zv@Df=3InjNLbP9HBQ8@3T!Xo^Ym1#PP3~i5wJpvz`5=e)$w+YLWI)TE>qwUC z#bLy2mRnC@A1U6y2#?NQ;v zW}qRsgh}|Neugt#!e*`F^0sinf*>^n)vR|*r%!V4{H6sh!33l71XOZ&Om*r2|F%OM z)GVGyTYK5@NGxPZJRVv*$6<*%9D?+HGB{F6g^L*>Vu%1U4ln8TR4@O^35N$ZnRh5C7|&;fEVR(%}f?111KIHq3X0?5fo80$xWOh3>XxCjRqX*63 z_?=N<8DHSY)NOMT<1N;-bCI1-SqgUfEmZFSw@xa!#XhiHXGl>`eq7OID{EcbADCe^ z1#tmnQT$3}_8#VmHod<=HUM*N;s@oVZL4hk~rYXehq?nJm(zQQ;TBivBF>q>%5SVVRzHa)c{ zHXDzEfR(Sw&)1Y_8pv6$Tl%z6Ys1+8FDi5vff{bT)3E;BEI_oGiHSr7P9uf-X1J`8 z!P(+5CZv!=R(xB3z$+S}&JDlCA8+Y>(~#>~DbGJY74|2?Cl4tAF6K*Q!F=}VAmz`L zy0=dx_E?Y0${9H*zYpV2$DDSSbVAOb6cqHkUS{;MDjJV4wHT+hF;>3>b+F9^ zbM%yek;CgC4BJ*bEWZc?W+|Jq{e#X4A8o zDhq8SRdCMxYyVXpWO%RR)*W|j3(fzENCCN^nyT4MSim=2d^H4wxLiI6@B9r^u=vLJ zinucV&-0pJj8Swi$<|Xgo|24Tp)W^cK5!YQRjiFw+&0`M!lgoK^+xXr4! z6Qc``87@Bq61qTdiy*;%OjGSGGZnsfOJ~lzP9H~@Ib3K0WZV;`Qn!AItw*_%aMAD? zdb3+$s>Quwim&2#`)e)OXWm9u8XF*HxYBPEexX;4WQ)OTo#v5K@^UASNPg;D;|AEa z@`XhGc8mN8-L4Zn@?W0Y%noHG-WL=P2@im}iI=*~D|o^f-y%bFf?|ghnreu58`-XA zGto1tv-~2UzCzdcTJJCBZ&xk&YVdVaTGLl;4N^NRP5? z7TJlfA|=l$2@a$#Pb03J`J4XFWqLw!fZ#hH{0(CBgOJ{&J7_<_r!ww0eN8Kvgj`se z|7J2l{+qDBj00qQWg9@^l^HF+ik&&7|0pf1-!?oBWyK!VJPPI2vftRj9?yadbN$C2 z;N~0waqKeN681U^$~m-9dx;#SURj~sozcH=oe3hGzo!I@;ym4XYI7;P;F|hTqe8TlzAW!9v;<4_ z`NsC0iOeKs?)9iHBGAur)!mTK0nRJ^PpUh-bsopt1r-8*0>P$-=P647pd2bRs%ecfKl9`*pRpkzej$;`m#AW9m{S z^G-3OwrOCJt6B|yYyWevcxka?wtf`b=8H@5;h`Xsiv%Y=xexbup+4LqoC@R zVVNptT0H>P;o7myd$nD&tETGG;2U3T-z&schC5GBs}kO0I>Vz7S^DH_H;dq7&)2(3Pcj1p$fq25BCFtCsHsw+0CXS?;^ z?~pDch6}j-z+g+klG$uqev6d<4g&d*S8yiD7Ytd;a=`wJmy&Z0+P@e8rWSorJ+M+w zz%F?J%?+10>wI!C`<F(Q0spyb3|?cG`?(b3e{YEXCA}{CwsBf!v~0X(uw(3@K*7#@1#0{}^ot(bq=q%t zi%tQ?epQ_G#Gyh{D%D%6nlMqU6|S5LoN~5! z9JKrW$gsup74V!Yu)lDJzh9Uoz9dOXRyqc0J8*y{#CM*pS7RKlueRCOUvu1=c||%lkY3UpEZSSE>b*M!v*ZjROk-9N=$ULLMEE$f`=`ExONl5|>w5ixzl6VKq0xx<-CgmOvXd@) zZJ+FIn_X*PR>9yfX~9jSpIAK?0z6CH;=+=YiA?x~FXnzKT4A)D>8L9#xVGGO{}~Rk z7n(8^p0_1wWLFhVdYV+1P_Fg0R_-pig}%gt|6-c*6?st-p@OqN-Zq0&>!a~zli`D5| z#CNrBnqR9n*m9Pqf`Mv$L0sct&Z z6#Zcpd zb(Cd~{5wLo(o=r842FB;{;uIcnn9Dz`^ z)Z9!=aMP?PwT{hIej~aEKNKeT$Zw70dkL%1F~HLG#Vwv%sL!)m;NKoDVv=U9H4S2j zpsdhTUR7xBSGv}~t38BUV6e4WsqER-)Cbl6g&m+Ugl(bTKFY@iwRI0pI|};zuOe%> zggH-u;NVUZ^o3^}fzo1>;~aZ8MZeEX)6S1!|IjjV;>~#0S=fzC49zQ50f!aJKEDz$ zI!ZB#57oOkVkhiLYn_#?t#9QC+^5Z&Yc$=K`x5s)_7P^q!l5tdE%tO5kF!j6s%q}_ zyk)B`e*piWMeq}T^LVkD|1%^oP_K5Lq+8I6o5MjF+cotR23^7V;20c7xW+n^yW4dY z7p~;ct~lEKU8u)&E3|WeFPFrV<6l|M{99K;KO6}8UrEhrzl`cyuEoW(g~zoFP{eqp z{NX4YPk$e`P3*xHhSP%cc4Ip3tF!t59%Gq19DkIM&{c@I*SawK1r7nmydsV@W$s=5X3DagfreNcUW^fl$#$R|AKS83{54uMhN^$l zV-72}K5iMMnpF;7c1C+K4t$5m^R(T|_0zQc_5C`Fbn!=4WlvPmpp}Dn$JkhYmS?Gs z?Akq3{pJ@6x>0j8w0RT#E&>Wb058C>6eHhG*hG!J0Q4o68wEd)@Lv%wojwY3$)Nl3 z>w$5|zPlNFaJ~NEOkEH;p-}@W2)WCYMDq&5B~-Boh0rp@U|3lwS)OMugbUBzl@r4HrKEN zO7;j?7^EiX*sBcFpD5y%U}7EAQ?qoJToT&?l*EOIbeMSfo$=ibWiQ9GYBRXl_NL30 zupHdXoBJc*vm0+w(+wN_l1qW5VrOpR8NA0&e=r+!{bgjb z10&tRy|O4t=^3hxzs3J;XDltmw29&I?-U>ww`*>6({{G#nOpK51)x{0;;P!lrMn%% zI2}TDOxvPEsM5xt*NXC2?gH|NJO40^QuxJLXkc9M#kyB^i8Sz(>`fMx5*Ly(Cur|B zP<>ahKau5v)SRLMvmNR41i<7pJ!SPw&0A~UXbbb^2O2vZg+cBf6{>EFUdg2Z;fy!N zO*o&w;Ax~@E0uExRVyI8V8Hfzlt0^#lk48o6Dx8jbX%>+>Hc&ZH`%!-Q54!jTG|0_ z>U-%sJ({Y*tH0iZHn>zBxQn}D=K;@>>zeQf_v*~hhDQeXvu2zT>?^yCzpZo!!DBB! z<~bLc!WNDipu64x8fwN*fq4}{%HK3?-4LsKg3@wHpkdEO>|_~W-}}Oy)VOiPl@gO5 z&}*`Fr;Y9nh58~=X!5Iftb*lCWBK-`D%Ymx>|4gL1n{ERXXz`J?8cf({dL(Ot#h-` z6h)d#*EL|5UWO(?AlKlA4UFgK`yuYwkj%T#r)=d2e6(wjK6fg$kSeAJ35E)_*Vjuv z-ZwTICI|2ybCphEW~<-yG&_C}%e}S&KZ~xl{Hm8rpwj@SmPq@F;chJ+bD1aq;IKk8fW3}OybCT}y9b1cL|QPx zL?u=|A98ehSg0++b^!gnGIdf$NYnn+q6?~1LUH$KesHGo>mc1Gk1Fv(^K;0sO!=1H zxz9Y`FIto>EdDBRp(ps^Y1^x=S1hE~Cgo;zun+oG9Umj^AjqZgtZ(M^xeU&9hpOX) z-ws*dm}eQh-Xg)qg0@zEl9*P29N%wUc9h?X)(yb0-wlQlAL<=rc;nF|HB;|EL|riH zr-dxXqT6aEbUIRW!scnMGMjX*&(djzJ{fc2Jz78f#hiz&oCvLR^v*JtD;4^E8v*ES zJm%`KndR|3s4fXEYh_q5nRUd{A-a=9@=lo*D0nRRfSO7$tMg7x?eFDA%T73Z{M-w^ z??8h-IeRX-{XkCEt1;odWaWYb<{Q*GhqNP@`OwCR?r`@leKQ8Esmo;S9S&s#W`*@V z+&L=4P+VU;RoG_Zo_*CWTS+gw&VJbneYFEFl9m0865Sie+O&HH+(O8$UB$EVyF)rC zRW@s01*y{kx_LO<+y?$1Bon=Q0@be{P%6d-`nc~(b zRZ`Qz+ZWO1f~y;Du0MDZ+J}&U{pUxALN)>@BAES3cDzNxIk96iw_M87u znUHPf9tCYF0mi91G^s)|GUB?}nfeYpRgXTAovNyhtgh#5j zh^q|Eo5d@w%5E{F^?0jW$O+5C5uCTkqS656feE%*CdVSCVfW^^d`gd}r?~O3_5R%@ z?A<`VEWw=y_UA5A#?1i1tawoXnqNFc8<$%&53ElqQ#uXoPK?L2N$x7nCBz>Bw z9{tWLJ8P8E=W5LS8F65s9_m3%I1HN0ahjgU8?-^`sa99$oYg+2<^9%LG*3 zfS+*7)CVnl11;P5o1U;3sdr5D;&09}SGG1luw*uv=3ms2^8C{9CzYrPd(67qA?LPF z=X2dpgW|mz#{)Ku7nnEo;NH_lDf2O=eTb|&ftyeAd4g&h``DlC2yue^!x-OM@PJJL z!1rD-Q!S*OZ#I60{f9<~U3*!s?8D?^3 z;(HKt#m+(?VBh2#>!4gD8;A%xjE~H?**wLb$_=`U^#RskYK@;Z3M8j4IlX&5l z;d5@$pP-~$zExH8k!hU0!>F+bD>*`?&c>TSHX+&oN4xTV2b+I1LG^ycgN6&p3l#@jBowP{d#{%CHo zvpH4?{*13CiJgn_wSJ}eTB@TBT^nY<{}%^8p6gqAk4W1Xck5MTdg(-yM}P0U=*ss0 z7_G<5{W)_%*YV0j_9rhq^4>^~eHz~gS*79gFMxDzYgRfqv6rHTP|7Q783A(`v&v6M;fuENe>w{; zS-AU20}-wlT)Ce(g=WZ|Ty=oFgXsA_Gt^{dQK?j?=j1xPF%y{Xl^vQ8Gao<2!)z>v zqD449Z0$nx(~X~wN?%ex88kEYAzK{5%Y5bQilHx&H4Vz1Wu12~Q?*V|AKYZNbLY*_ z2L%djyRSB`mT!aL!Yjia=56^j2?7;w3?f=nw;V{+aK>&aPX86FD&S@Z_5s|68b zjmj?qfF&05cdwBFzZ7QPEnzg4!JgwQBB{@BqF5V?ouO`Lr2ts@l^z$kn(leea=_Se@ zFQA6w8p37+0Ot=JhyVvtcV51z+rZGrG(xjqYir@qy{^0?)k@e?-g1sqCHrjxs~{hR9ngY!1mo3p|P0X@iPrf~+kSnjAMKd`@)yO(zTE zX5!|aG7P4u3k!fPl(g#KNLf!1a%o)c-Lbvo{mbA=BfKAIM!`>-knLRGUS6h2~##v=i!2-U>L4<{#W9zlHRv03P})-0;b)0=M@XtWA=-Dn-34 z3M^kUDpt?3+MO=fa_jzJ`i)4-=V!kdqW`ev?dA$HImut}wOezm^OTjGCO`k+X@LS) zJZ)u@i@k`n;H2oO-!vmSGY(^ zqIi(sng^IXCgc&p9ay^Oz>Da`$-q1h=Apz37EJaJ$C`pv<&dSr9<5PYP--4jU$}+@ z?*^PLxDTy(wwSZY^5{GMTg@{VWq%^*pQG%#AU|XFjRWFLI;b%GEaw1gX(S@BaN3JZ zLs56oapu5seN}F9JXnjowY-$`bQ)Wgh=n=WBs|x$ACNB zSD+$^-dPu)-j@K*^Tp$9Ccy_Ak?Dn~*h`j+XJ1KkAF*+bxcRMlaf z7MQ!Xrk1Q23p6b9RhAF2R?%w4RDDl!YTvRJShxq%kgKjYI=)6GZDhK5nu6htERR0| z5#KCAC;6@JJ0)R9Blc*DW&^3>1%3%J%~nZ=SB~tha$<78`;aq6zefZ-)H_@Q;i{oL z3}~(~dopFW0rZ| zE>0s)jkEEfr%mM=W(oAq%>nqu4@~O`x=&awQ#X@jmA8h4JrpQu3{+wUl~X)LuB3>Z z&ym45bUWZ~7tAxP2QqtGoWyyAe?j#&xW6e->@M?v^zSY0_){@*FLke*r`&VQGTpL{ zCYDN+j!VH+uz5kNmSSx)Q=i9h=XGhq63lNxwEOLk&Nt+a3ur@BQ0P;q_I}JJQY{TgqgS!Kj}5U#uj*ur`=KXTVBw{TZ6;K zK)mQVDbTT7GDvrQ2`Y`=V!;>~ub<Q1EhM^7EMkUKJBN%rnfcjjGIUwWx%dNG|~ z>ht$Af+)%DN8p4yr>^l_5JTn4}^a(&EjOZk2bVngwMja(YRiksCA^v>`4P zXfopQmQEx2sW#$ks*aOdzhA7(SCeAxN%O4PfrI2sRA=whWNB`#hb|=Y`Oxg0G5Q$l zE;u^+{r3MUs0GyfP0$e|lnZ%t>)$Rh;2AJ@A;w#Pi^@&o!pZJUyR7~(pCX&m7m4#J zi&h98LEiU}r=PVC`Et=%{;B!mfKhO3Stou&>TMs%pBxR?hB=i|@n6J<5uzPSJWV^v z7cje&%l1OEzM>os@j?+mFJ*@>xkyb{T~xs>Q4%?b#9x2FS@=ENr8uRdO&b zDOBLmbBKKxAlM}mC&74HzyiZQkjf1^-xpb}gicQvC8)ACt3LifM}uH3_x&jwRNc$TarRq<);lGj9D6*thVg%} zuIccJ@9TOPx^ioR$XhkdKyoWm_qfaEjy-_pZIhrQn)mQ&YX7OT3auVD8{AGBSvNSX zq`P1^T0!^}Ej;e*;;EBI=aBkheC050fm{6m)M-XddS+yV=!BwxN7HKf?^HjW8*C5T#7nEf|VZUB3HXtob#=e+lj6OY4xjNI`a)3i*H zi!~>HM)H=bS~2uiRZAyIRY*U$6c?lJec0cuRR0^^BPfd7V;=IQ~B5Wi(mi1Qb zIHJPT{7ZSY!86JWldydxzv}_CYcDv}2OYpT?b6)=E%(+Zg;k}5{hdt1>1o*46gxUP zrk>PJEG6~|0#wd@z<2P-t&^i2W_?Z(cdI}8SH?+m{MO{yo!5gwapmM_kz@ouO%@$h zgF%qZ;8}2T2N;)FMUWu>8-K&Z+DY&|*+@RM7a`a&3>mqO4@|?X8?CgbwfUAf)ir;1 zns_A0xc`fS1YfFgh`pt%KSXYuk2&@Onk_QR#)vIelKJu}M?r@nNDId&45BQ*X+eSm zUldJenhoE{AIku0r(IzRq9;B8E*`^@FVsSjx=$(aEJ)Aa$jRZrg?5;2dm-l>N4g-Bai3BH3hF znYROz@GlZH5zfwIy8LU3m{L^;Z)S9dz)z-I{YE|zI`-sH3jzZSlu6>bUZ{# ztCL~>Ok}*Axes%*?1;)bvo3%aX?#)}VCZ!gcM#8jKnj^IEvYRP6m2>3F@bUCnJ6ov* zVLLFdqD51koM@&?7G(mIU!?Y0g8Z*dAyVKwh&cak`NfEzK5zUWE>v_l|6=(V{X7mi z(RgbN#Sr~O(`0w($)VmWjGmwPe|*qhqxSiM!<}HKb+=BcZa1NvITZ@=76jHbB>(ScTLL(H%fHHM&5{ZA(^NcUkPUqNHi}( z^J^``r?uexo8k;!hxpEgW*rE7hZagKko;h9TBJ+_f|w5nO|6vg=-U1_d$j@iSvsaM zgOIXC9Cukgd$Qy$_H+gS&}M7u-ucT$J;hMb2i;?r@XrXP)JTRGF}TPhn^qQZxNfCP z%0^zO910}<8X#gkJd070hh(xkw|1JbwHGjruNB!B)Dwxr#K-gt3yhPe)fk59cZ;+H zm#9LF-yPiS4^-XMa|n^DTn|-Urk$qmoz(j>aR$Td&)_#iIbsFWVZiUAp5Bm zYQ38zuK)e$!E)_)oF$7OYf{ziASbR1P(8AIt%w>=S)r;?wj+dUBqKk#LL#Lt+W~Fx z4X#lBuda@NGKUSg%&@-BY<|_SZMqUoLDO}!S z5tRLd6-L4Snoxxh@*4qAd)^^TSqG;@!!Tyx4`~WXw=_w1eX~WGxY^2X>?B7fvx13T zP#Pep-)(LE!RobfYtvB|nJ!3u9)HNwoQ%K!TfD8XP(EdJWmMHl<#e9kO;otZ6RC5H zy&#xXgi1gTX0~!SWWk?^pTTnnmdvWZMp;*~EnlrG$>({wWSZnK$2QrTK#mVA6Mv z0WVu8Nn*shy~9|ZQe&ZRp0YJPXiRg*cF^iMYTg#0o&B|xz2)W@_9A1YI^;0tF%iyY zQ|&-xJOFnUV>idoueyIUS=R<Bra}<)R2VYJJb|1|@IFD*NFpd8+K$Z7G_a?->Y6WG&$uZThB2AmOcLBe}I5zgX z1)8~++Mm@x>acK?jqH{GdrNVPvj>2KnMD^6B3H1-U6S*_LDjJDn}6+yM0uEgVGHtE zO?|JPy*_S4-I67`N~UGXYK5s}aC6)wJM;=9u!l$K_fxe&J28m_Vd~s5F49JFuPl_P z!^$zo-$vHFB3`vEnuOe@ffS$w0N48^7`S?)s<_eo_?9`mnUr?gIPESp?IZMb<}lr7 ziDBp^u*5YQdl-iD?ef!@vH^B|g_h>*4tr#b)xXAt2mD~Q$HPNfvd=t?YaQf_x~y6t1kd?qSKdSpIK}c<>H8;G*-t*<;9zT>fcg{cx2AqpH4tr*RFV_&kI$;tl%`-Z>Jh1+8nL5TAqFw3BW@!Ek;teQV|#Er+!^wq)h z`5l2={zq4We1EFavYQLL+qd5#9ttTmM;W1rZBQ^sKHk&ml*B_vk%;%Qr6w7pC)~}m zAnm`E5xLn4d4?R?6~vz*V1QG;E!_S{*F$zn!4qGA<2H8dPG4RHS1rUmyqj~);cyq{ zGcYp8PzKG)Pr{UA}( z^019TwQR7wN?9+CAELX=Mvb8siAKQMX7=bAT3*efyePMtf2ggA3Y71(k?jbkuOsF? zBdDT3f)YHQ(+lnzc(g{sGQf+)aX-&2An`b40Tf8Vn7mt-AY^O%5 zj$#>fmP*Ok7$W17oz7#u7RZuPbL>dk`a|qouE+BLQ#sSK;1AsZYNV8! z`FmtH1ieWjgK9R-GtTQ*WOq8j?h%k5M7TG=1xchfkh$CCt34P~Xv%}Yz5RvCbGF<~ znzPxmtbu9Gy^mG^Nl$PFc(zu?%LU0umO-i-WL>HT2dTgHe0~of0aPwqWU<1 z>H{>D-XhkwNZy(tcuA0XkEeU^bId4(jz#J_>dB_+D!G@t-SHRlJ(f7>_L3Rw%wD7$8^i)MaxlXb(`T z)@Y$W23`gEWGIn&5PI>>NeneY(_GxzMEEHqKnXQu-!=*Qdy{ky_|``xsgo(< zt-#wuHW?iWaTxNR^>G=)^oX@^;uXwuLfB&L6&4U56c{hh)g@udB%F2l5Q^OeWU_g6 z5aNSP5UU2lvZsUUF+k%CIkrC|{5_+z;&W17sEZvbMjKAqImyIyQ6Rn}x=ofK1Dbx# z(ysw>@*bwQL~Fxxtq<=5&Ml%hTk}Hu8DLb9^)PDiUCSO|&oNKifo$RbvKu4P5EU_9 z>7Xi76~dO=QO(<#(b?;6lU|&~erz=~7`rI%r=}7_*9m<**{KzPw_+-QZ(G61*YHId zsEWP`ORo+b0fwTeP1uCc#wMtFmnk9$Oo!%j?&hnk58srkFh{IcucX#7A-=)O=(Iu-`i{sb8P?co8IE9yMeoB zWwx(Gt{cxUif%IaB|XOJpJNk2RM(Rl5kM=;11F1#>1=G|-@0LXM2bX^mgy2i|IOkN)X!?&2*HIIY%33jH3 z8wh$9r<8m+n;|_o4z?S~t4bNBFMmY)Y*2?SGE+!lLTXzh>3joIVks99_t|I9d#-R0 zRjZuupt^M3W#f~_|A~rIC?$^k?fCJZSqjeLsfLh3&7+7K17XO??K2=5QFd;LE_lL3 z>^-W!pi&ve^rr%{b-8f>X9NB3rnzM;lTpjRI?R&U z4YMj!@xLuDwU%MRDa7(2oY!I0+@JrWgfB3__D0tU*%cP9Qer->+6X{25K6UQBZ+`}nzm{g*#{zQEBEJBsj{k=DA({q z`RIW{Je=cUqyHk20@QRg)9{iMuf|WBhq&QRGqrBoXDV=-o|7z@!bM&ct1w|7Z$l4! zP5W)bE?M6FB~jF??Th|44!QQOh!&*{vpTwR7LQ}E6ZNi4idryNTN)Q#@+T*S$MYY7 zrz9fwyyUz$k#KsEP4zKM-|VQHu;Vn{&UbWpYmaN+->5l?kak2+XPX$P`G%<+0Z^t& zp_q+)uGO@Hs5|WVDoj*w*^t){Dz(F`&0>6Y1##CIRJ^cIo9B{!(89fSoT#eKHEe^|T%9#f{YNp=9VJFPhNc=fhiMD78!`3>KxyZYuo-Fn5M-feGQZ z0}>xuHxg|s1%bAnpr%3`47Xl2$9|2>($W?T2_J=d-{IUfM{b>N&Fd@G4LP~&)dn55 z-gnn*xlv9E6s#H-XR|UX=P)UpU;Z`HH<*oB5ADSS+R)ZHH;J^7(#auNQ(bstoK2uy zFh-o5#6;^|ZbSFqn7&((iP7?f)Pbp0q@3=fccCA)H5cHkxK#vRqRw@E|0a7=zp{bl zvB!7~>E&C_i55{-5T5@Ua?F%DrQ5MC4U^u(rgS$GtUxqZbw4S!W5h!vRP(tc*IODtU>Ig_IIwZ8yjQuIS$3-8D|8NP9OV&2gX&q4@-DDN4fMVXF~4KWt>`Zzu=iJ40W#QR ze#&@vo-Y@1vL+AV$+lLNfXrP=|T*NXnaDOK*o3j!m~J$T<3@ey00 zp6x8lx4rV69@Ke{REmR6JAxQxZj+)ii?XDb)V2B!G*@SyJ-`ICR*O|1R8!}o(sg&C zznmRFt&5v)&IqdMGC+9qKZWMZ_mMXyNpep8S>QY-q&-)ETmi5|t{{l|F8;j%kSV?> zN1AbWmzafPl9|6yh1``kwc7?jXf#D%bT47Cmx>%K;szL=y{BsLKLKe#loh7KE}KaR zcI>7@_)y#6KtYgC)?25tbqvD+S`2D^=1pYf=iDqC<3387uVC~ZA)ToFyodN@Ic~M) z%68+Ygr0%__DLo163gJ<4_HlIf#z)D8(?QQwyU1b)9wh=)A}Wl`?%|Xko-t0$)O(= zCXUh1%p)%4KxbDVAY}CEqH_NvG0V3_@!rR%{Z5os;ktQ9+z4lED6ju1|%UZC3O84fyQ%-{(L77vl z%Ah+u+sZoV5WdiAN&xa4xo?E6nGyAe z)_Uu$3EtC<&6`CpNjv>L`y-Z_N~f8tpv8MoPM!+Jy+=%~4m{gHf!Z?m1mDS0muYb$ zm6_n9++`~&)SSq5?c66>nF3%s`GBz_A)Jw_6MZn(SCEThE7HKQ{O}GVk*LIC614$> z6Hfad@>56E%N#LtE}F57pn8Ij2OsZco0Ub*?Ea}}dYTa}f{DRFIPzA>WODf?+!?r( zm=M-rBwTH@2v;{kcdbkb4mTolt&35H^aJ5=+L$oxFDmJ@AWQR4Kj>uZ?oUdtbcwa+ zst*7m*(+Rh#QRQJw5(!)^=gAWH80xEBgXgwH?)JC9?@hknb_K&MfLg58D>|-hZ}Tr zJv}smf(cjxPQnwkFSI)veO#t=0CN>N@iz}2H)MJ_x1eaiTr=!28LfoN_ z75Jz3@U1a1rb5zBJlHYWE^v$8js(Gj27KHI*arSN!r6U5p`~asF0-^XxQYH_eBafg zccqwX)ZLhfs$qIUT;0=ra}X4}O8AJ?Z}NVoRf=OU zTK{x|{)WYbH~<6i=#NO%AK^#y2SPicxP!1ItKf}kPh_G$3?Gjm9<0>n(Sld=V<1;5 zE`+szF7mi*`Fkq4b^yBl`xYvGU6Der=}rZ=u7v(#qW&9$Q$9o9g%6}J+OBy-{BQVB zPt5qKsMNz(;mZGWbS{1^_WvKhu3bB}t!*8*PFqSkpH(Wh6&Z!yNfLKfIxLbQq2Ru^Sb$veX_v`h1;`cV9z+e}6 z$wGU#HyB9dvfPze(_ZY(RS5uLu+hv06co-Kp*Y@}5vB$p;=3m)rl>3|;S*N^urhxV z^4JLpVwX@|SYQ-OHW84w|?o8 z$>PnxQg)Xnyso%|-#-TW2t_WS>oWsF&inyA3PL#+CDx~20&2F=6r*JH7PM;xSm=)s zLg7j`fR|H<4)MQ^?tVd-twy|6+ zNfqVI)ZZ5h{=~Q(^^9N9$+dX_UYPgTQ>j*iVV(0t(XudXotYh&R* zh1xe58=(fI=A90C>E+#$ z9VTR0JHp;;r&||V--$emLEZIw;_N+16wUg`u$nt1S`{s%7Vh4a{zhu319~ra ze8#7nZD3;aOZ*>Ho12<8!jY%=#pKI&2ajZ~B$r=BHJ2JhTp8l>a;v0R9^Ufg3<$1G z{YO3MRX2q8QSdmTM%T(5>@^OOiZII{N<63uZ znT#@5?>jL;;*|w57I&gF%|AyY>kjLPze|Os_~TQAzYfyYTqYW}8td>6qylHmA60Pk zq`il6>7)ET4oKq}-0H{ji`z{{U@^%zJdmZkJyTcW>(R*qp#vGXgoW6j?kVNv$9o1 zi*!G+<7I}Baiv|H`IVZ_I><=p$8UE7*rr-RxvPe$nmCW?oYF3L!Nfiubo6xRKYSa1 zL%-YlR4?atIPU_seYxom8<%`_H9`QnJViFN&{{pNPG~d@;58<4FOwB#{nSi*apCE&##Z| ztGj?wwAS_>Q8(gleUdNdk3ymkBdpqdo6Tyg9)@uMImp%@`=StFj@md}@QUl34j^?vahYI-T_>*qAbDP`;%XYKef<#Ms4WT_twG)4+ zhvfU%>ezv!@cnWbWpFGMXgp3obhE2h=f3 zWqRkEsf^%!ZkoA&Qf&U&=$1X#hnMmh{eWjK?w8b=BdTS{-T{m69<+2GAQ2R=2T zv!`SSSR>^-(hjr`?=4gBevF!$ARMEQ?u-}wHclIeHf#m+DmU!2g`>2CWxRKGeRrgE zRPlErc(aO)^iU1%St=Y#O(_kH8=x8@QpLRr!UTS12X@va(??7o08E|?4MlGIn%6AA z3r-Bv0w(D%3Q_mOR^IxtvTTXqsSe{aUq9s=w=GDM`sBHktG__@k%DmFESt)cOwo>+ zctP36NgjTP{~Tp!u407R7)#q*qPLG}G%G&6EnR8?je&HpFgX<&B~`m+ZfXYd1USDl zZp}YZym7Wyj~>WE+s*7|RmFh=_D@b(XodB%(*jZ21;C~YeI3zDr6s0otU*U|aK$!N7^L1#~3tD3{?#?rL z3)^Ob@v3ubuJZOOyf|=-aDbH~t5!C>-3|9X<}aCwyX#3Y88LrdmJdkXb1-MVkt24K zl6NV;Y|2#?-V;sl?BL~2bq|OUTp_k!G|yHsk~3rj!5-a@H3LK!f|MVo15at|f25K{ z(2)=j{{Ka?5$s=rzyK&LLHpj$?xuRpPC5MW9scA3b-Dy!df5(`i=2?y8Ty#*K+C>N zwm;u=Af^;G`8@)kx3y5?AmmK)dBFPtH(kfvIYy~auW<|AgPdL~8ezSdGb_O>Z4Ndm zp7YHTe~_T{0x{&yA;PDM5dH&f)A$Xn4_ma6*bwd%Dg#%WGgL|_68nnW;N~DgIfe30 z0ly>BP!Mp&785`K$=ZK?nC^SLlGGCHya>M1X75j3q$}?>yGJxZKpk@HK#ft@5-K40 ziDaWl=->GCCseoQaRQ4D(QaA@Pd|;b8<|#1=7o$Y`ywShyjH7-6@G?es4CMpCx5 z=dU1A^Y1y%DC+SN9}cxr(sPDs4Ub$me~I;`=$7+dW6tcrb|cM2%*)AyJ}=2stL+Ceu+(^%ho_qnLtgJn*fSTPW9ohAyyl< zy@g`@#X%ym5NOO0Sze=tVKvBVl38fy>iP3ufxruHf2{g{`_-72+$P|KwL_Kj#3iLu zkul;pY7%2^AU&>X3}uO;B@X`RE`;K4FTo4G;(tLtr@~ZRz&>0akmo8ey<_8qQ!3s5 zcgl~Mss)EA6yu0nsLf5{)!*sqv&PH3VsE0Ro34g&pm)D_9d?HPJwbCrMA$hY7lU;_ z39<>U{cgf#PD_4~|F_C$gfXtG%e+#D>Y2rhUUBg~M5K6;i@_CT>Gvc^d54qKo0urS zg;YR5ns~XYn=wcuzk^7U;EPYI84X9+U9}<%!PUEfvob@7&&m=J0-bR|i{TH7+>Khk zDftN8O)3E+be3sfH{e5Cd19hNm@bVbBIW|!m2AGbOn6Y9kGtU(Zbs#ZV^;xY;g+ty=DbPtS1`Z@cZSB5zR2Xa zK`||E*^~Up*;6Ke?Bff5H*q~{G{9Xr92(5`i^WS`QDeQV5<5+ugY4)AKpQ*sa)ey? zB4h%_sy}(?T6ThPqV=4&ra0AZI5*M|)s~!w7o6ca=b-LOBp2zMA){2Bj<qT=9tT$NvA(kPWLx=o(J!w$E%I`8`OLf z9xr&X1J3#?B?8nQXJ2GWDR4-d$Ct@i)C;tS2IR(+raSO?y3Pk<^M)76t6Bh(jLsZZ z+Ur4fy0Eos4u9@>e3^}BuO?6xejg+a5+X7WM@gRG{K~?Gx>@#pc?k*iTgx}O4-@Y9 z%e744t*?2>a$j#LD>FzXe9Z4bc(FUx=M(cqJ}#Dg2mA)E1UoOE);(Ndwj-PpSmM7? z(_FI0q^c5I|ulMD?%P#Snls*U@uT z;nw`Gcd&_B9Ii5qh}2!f?fbxse{qp4{7e480Dv3#dca4+RAZV}&_uqNMc@V_FQha8s~_ z@MR)$gIet8(v+dvyHI050^XJte37@^SStA+F#>2rjfze!eQKWko2&PA z*~>~&@}Rt`S&^sYzq9fr>}1o+NU2+bdDbhJsp=RB<-eNXvnc%=Ka&8AsoH`IZ_>Yx@%|JNH{j8~o-CO|utM+vOo$Y%cW!>msQjCEpbP-nLV1A8Aby5B zX^%I|YNM!=T^oM9VI%c-aKCN=CXplZZw!yR2;96SGE5aInX6d%=eSZ8orDyB@e@pC z#(%EFm69ljR%8>Ux1Cu-vup#)=YJBw;Ma1QMirXpO%WsDV* zlZ)FC9Uo@re~2GlVZ7jW#ZIm9eltGSbC^rmWSzkUm< z%fy`eQmygO8n;twdMxoV{UCiaGYln^Ve2?!$nq$;l4^I()ZGHeOUNludrSACz64nCct>X;XaS=CG(E+TF4Ik)&LxdFEqf1ozsEm=5L=5SMe(>VI& zI@7f06u_eBi9ivDvvM?k(Zs?#e@Kl{CApQT(dHl{)hSeGm6TwBs6yA`%Qk(}>QP=M zQutmrKo+8GyCRMT!}x=$;`sO zU7?+943<&DWr_XZ&Z6&x@{7WFXR>9TW4xD+v1gU;dyMb&9z zHau^Y+S=Qn7XN)rd7SDcaA}#HFP15%Qtp3cH{7CU%;e1$s1KO#XW_+J@Z=M`FehUJ zbxDA%3n)x}6JEp8vc{D)_lF!0&g1RRZngH!k{!g&1#WNb_vcb^O>o?1e0~PMh5crs zI!}Mw8BpogXx`HfPRcwTphMg$=u5$|qbLxh#~s2KhK!AVBOKhtWUPD1t0#p_ zZ+C?f-i`C2x&N4e6y=b`vs|K%D{u3}pbS&RHobh$E}%fmeX~ob;l+Atu-X5Obov3z zT+p6w5-B>HloUC|pc}BR%Ru($nIxs%vo(!)R(EN|E!lTj49^%!e8^Jt(6+7U??H;! zJ?Ex@$W@_a2Cid;deLUV6v8@g_)XqqyRf2-ucZAvpQafDY@0Ra@3=;K^E~harjD0Y zZPLV8_-F3nR8(kftdj|fpLZ0RIJQxDLU@EjoX;gmB3`siJ35y?%cc8;{O5fp z=f~70RhDAm|0tSR1BIF>Nro4O8iU7a0S~};b|J!hxt(-yp$_>yiK1Qu?4KDxS^S4n z><}&y1}m*fH;uh@E4$y`OMP`WTPZP;BrACe!!<4A`FG9#x_IJu}q3H=uJLn6)d%!N_Xl4L53B_kObR#T?Ys zP7mc#cWhEGw8*{2HOGgff<=@8r>GrcdC-^J*f~008)w^5++Klh&n}8Fj_hKsHb5bK z*XhRg1tyGw0ZJ__YGE-vTwpx*FmsbN=LXZGZV#A~!~(pr+Yq<071O?u^UeJ>LuygE zq`;&Ls4)|OiC8HDXn_WMjwiNiVd&Y(Im z1P+NzUPe}F<2V}cv_N~;S3JF{gtfO(e|$nznXJaDL&Lf9zUxrg5<6ORlw(t`L+q;|TKJQ(U2vCi zgf@4+dSaJu`zYJ6PJ28~sy{HoZ3`W`|HF8dlB|`rIwjNPRqnC}fx5-+VSl!q5u;u9lHTMqC@MjN8R zhT&yMvZ)sVPV^#Xwcg1h4;Uw`4nzuk+?xt>um|APcAg8sE2bk&xP#(9!aH0hH7Y1# zhyL$jlGit&26E_IOnxzccCvr~-KRpYXO$NUK(_Ab>>@JrP+Mj2tb$$fhw(s1=Soq|`1pH7}wD1{B8{>7*1R1K7P*DK*1`@%vWi?^D zM0fx@`?~JC^}kEWYrT4&Yjl~QbaY&g8qK)LcR=G77u%&cCkzxcL7 zt5rj;xkxNm;R-usi?H{a#*`C1>wI^~;nX#}#(1mwl2a|j3-(K<%Jc43>k?n{ zK4W%G)zyr#8A|PM4n^x63`>Mhk=chep}1}n?j(?0#J_UrmJJiW655V~W70ZeHi?G# z?}?l6k=ydWB;it>(>3k=WfB5`S(aq-yhoh%lOi0gX1<^<*UC-B^3qTPoTRpnjq2yk zS!VWS)MFdB!tL^LS{MF;3bw&$-}v?aMz;oAC>!v&`z=ZE75-cTwyh^)Bs+&_3n=qy zG~WsNOx*y-;Ok|Yw$VJbz*uAzn8v%`K?xx*nf_loC;XcGBAm^_3S+bi?t%e}!VRet z0{`iu_M4O`Da6?M#JfkpGd$lG5pENY7pSX4>HLT&#^~e zj#7ZX#asBd9ImP2-Ht{T?{n0XEB?cQuMtsf+g76bb_W|C$0IY*8g1=pMb&Gt7luD` zi|93s%FDHxi6Ss+a(q2o&;ri&^qI^juw9X)>E)cqa89mDO-o@{THBK(n z%nhzD(NXR?YnNl|SbG<`AC5L~h=#d>q2QK_l(r8q5j z%+#Hsaj}H$F2M5z#rpsTYf~(joj+OI3c_$Y?$y=PYO!X&WCav)fcIC;j zvIr|CaI^*a4~O!){F)vNqTD7vZRZVCGgMl&6ri3&3;dd5K?Rp{t_8Td2I;%(BE29&ucG{l0g&>Zsv6(7XAvi;hjtaxwe2r~`aaz49rV z`S=|>{HbCfK+^J(>z~e_Xw_)Rg8(oWEJJ=sztLd-*yWHMh%}4I}o1R$P6|2*&dwb;JBH3>1 z@ox<1r<*5{KWZq*(cJn6Pu#bE&(VGDjq74vw=8 z30`nPHjcmah3&m1gzr2L)xT)(#Jq?v3f85j2J^OajhCjVhp@NaNCh~mUpb#aJV3}* z-3k(SSCP^M7vMX&s?}I0_#;Vu^QcC7u#; zEkk!8YYVD=iLbE+k}tpCSgaoTjzyB+N>BKew6Hr0vA)FWQC4jxH1`DX zm*N)+(ad+&Pc$GjDNZYaI#6{TFmtQ5qxYb-IRAT!pIV;MX853E`IZVWfjaYn+rkZY zi1Oxr2Bt~d0x31SJ)mt1*zz-aixqV<1wTvRQ*RWW1o0Hixo~jb3lKQvscumb&v~sa z4tD!NZF2(BxE*^kUt)^uwf-91NU_iYlXw%!+4CsnEjv45Si&mVsio9mtGsTJ3+PPvH zW{E=aAQl`XT05`_l3|Nu^FE|t2clYJ(Idum$Yp>Nrk{C3*}=FeHJas=-Uj&g zM#H;WRG&#?HDUr@t0)$pQ#YLuS3^8YmKSyC4Xji4)JjdDmFv3S2T9 zgiI+*2&gjh4vXh1H2eGwTxMZ1&Mh==4EJtbC_ly;3`uXh3Yf}Qpr5V7HrN&&^=f*I zoIPL7LW5iZQ3^hOq^LEe6N?iB)8#u#M{ExU@-_`gEo1ObRBBAU z!!`biAA;8!&C6ufKhU5$7u@oqt|7q?&@OdXF5*oZS4KSKmvt)fRcPD?j5vbu_fFFL)C4hI@zT0s;ZEH9Rp#O6 z>Kn^-D$+G4;`<u=K{ zpzn2?Ek0$yzWW%$`}c&V0yq1aNj_h5Kw3*6#tlA-f1e<@^^N=Svip$8I*kon*}^cs zJBIuKHIBRovP@S($9%x4hU`9=&Jd^Nl(N#hEoJ+gq^QSiutCBdz*+MQYgP&tR0wJ3 zKC$>4z$l}$KP*JPzg>BIBWMg5PMuMY5Smr4$rBV0JfcjxEo?!t{5&O7ws(VO{4J`x zLG)Gz^pcHz5}k+X9ilZp%Lb81ysDI$w8XhcT8A zh#cVj!-|?)n}Z9#-cov=GiM5T&7`==JCcma>4wfJ*>TY2M|$Ki7o$hrs? zlfE)ovVi=jT%KwDBz+JGzW_#2wzU^vHYFPqaT&#o&erG`nRT{+lRHeeu>~Gaa!oSt z9r({qZH0ai>Vy`W+t@Ny2{r00w2ad2fE>g6gW}IPrZ5!jbY*xF&+nCPHmkM-Lh9WCufWW6Fj=Hh>F6q-02b6CoX7-z*c3D~ ztQHmNEo>K^Y4riAx`L2#8Bba%eodKGt$92_cn@EP*d=I$h>x-nwuDF;v~pWQ0S)JE z)DNO%c23-_%5&^Y#m=OV&|uytXrDq8OO2lDklf54yAAm*)&;8Uuob2jC8M`>gyu)# zSAot#MQ1S224svWy5U_6n{vRGF$;*Y2FIgJSakLpq)h*1ZYicR^9tn6*2? z)SCcPrgE9;M1iJf*K_*c2biM6{*u+!`E-e5Pt0X6q6?5e@9V^z~-l?lI0~W~<35__*W_Zt;^+{~uYDub!tu@xWeSovIcJkqvNNtm-t^f#zg_(&WGF_gXQQT;^I zxoqqea*J}}RPky`p+Dbu3m%YWHXdb!im;(ONKcNJ)IsW{K;0H9TUfzs432ZkKsmLy zh%41C9f1krGyscId9YZb&%oUJItb)sz;d?)lcIu%`Hfltp&&I*2FZ7njD6RG$RUOdM0-SnTb?_2>I|LP6be+`e~ zRlEh`J1cXYbJGRN&PZ_|fZRRgy$%TPt)1x8c%J6-7r%5I7g$zOu{SJK_XiPt2gZ<7 z`!$DWC6sgBUr;-inL<{Vq7?d`|D1tuf@Q6g&4aDiQL`tFC0&M%?BQ?P2ZsIgO`F@w z4Nj)O;HG8P|5(jFRzY8^-$?E~h@6`sKf4@MgxKNfI>cHdgkEnD9)uoLsHYw_b%WFS z2J?G@xJS{8cjDn`PVyL6it+9Xso81|3i7NByJFK_U*jXG`|W8!);xueXXt*$$K6}? z--oQg;?ZSW&&L<;m)YLriqDl65%t%G2&_%GE3ep%M=a!PiZ|@0c=)r{qAZHmtvrR& zH?+{!V@jOsf3Yq?ia~R&?K!F+Lq))#+Q7d^((H>wHQVgEry!4UF&swKQ8fN3ZT3ae z;616>2|50&1hDmXfPvn`*e$$o_@*e_=^?^ON13PQuuX#aNa@4t+W1b8JbLX@C&69z zv&4r5Bc9{3hS<7a+jKH-IiQUEXOv%`DLcNXM`T}rSAKkLIajA-g8}i5pQs7r*k>)d zgUnr_wzJS`%G_UvoB;=8s;Bnoe;gghs0zX61o1fS&@b4(6qfj2YoOU&7hRu$YEf2dChGxd`5`?rg)=3sPo{M1Ezg2hogShMMn}2mRx%~ScZqIEWtSH5cB&fl`Ian2 z%5hD?H!j}W*``O!$(#QB%(VYm-<=_vgn2s1t|T1b=&9RQsuu%ZYmQZ$oBEJ$lOxOh zolDBI3m0_hed?B7jC6c_?=bs~w|EM2>R-Nc4JSuCbr*#~5y)vp0J^w?a&?*#c3Q;w z8F%?KFWIrF4L8EteA1`qB3io*`_d8LbdK@D^Tqa{3l9?Ugyv|Y@y9rXjI)H zk_MIH?OkD^IJsmyhleeJQ+8kkK!7I}(woslKWi4YfCQ~|Sa+rr|u&oFD?@IVd~7I&g$p25Z>mPh!v)~e;aE~py; z8zN}i1>Sifyyzz_LfHYGb&z*F2Bm+J_y72Zwitgy`l_T9%_a|hj)TV^r*05`OfyVz z`DpCe10Ni8-_GBre!=yBq3E@;@)RyBV>~eq{bcvn<9DRR`PzsFF`KY0_}BANbJO@^ zv;x?3bL{{{jR67=KtPno{4jR7EU$$`T1c1&!qXbXu zMAZXG*9BEwyxNZkVlJ8JQTWAesp$g0-$byD4N^X!M*-$h$}^Kd4xXj6s^E^&%hjC2 zxE{l>RFZ(-aD=zI1F|pkq83Mw5w?5OPpPOV-#trMJH$>0Sf#((G4#?!FeHzK z{+>$&T>+z+u-_Ksn4|Z=-2$2GP0Wgea^TviOx2`@=*9@|#zGXWxUSk#M}H6t|HIW~ zsoHv~VM*FaMwZ)jnn#;Zct#!rtLHj&dwJpO_+;TgHumH?^FTPhI*7L%?r)uoTECK zEdCX@a?ApH{QVp2DRf}>a-2Z3c9t9`x0BWHw=yCPbp+ynOPnwUpvrYs{-9$v|F$6EKJ!I_d)T7(Rq`-tPCVOx|x zFY;O(W4&*xw07A+1^H8&wm|zZIRCn@K$tY2=TvK2Fi)Fh=GMO=JhnhrCSYFLNn)YA zKz=Bi`5C)$@VV5`m6;%}u_*UVQjd`j{7)I4%O6pH;bWik+jY>=QtMe(N$Pz7gbv0M z{u{Ct_+Uc?YD_DMsI7fl7NU6I7Cyy&?%5pdou&(Mt$P?Qh&o=S8K$S4RNe-(=4DKq zK}|g&)96q4J{+u%qdeKE>@)*rV8L17R9d{l>RmIK#uM@Qp+2H#fUFa6=uSHVf4%!N z`QAGfM&c-84ngD?ziA_9kX!#YbETj50my+=GoHAO&@SM!BEuWNOolrKa zEABfI9xvOmY>alE$pi}mwgd865FgVH=GBcpItz#={zd=fr9G~FuYxO!HB$iXzYa%h zzW{D`)SBna+MIh_@gmAs?;dY6ClCQGg)G$xLYiv_)^$wjT{^3!qbRLKaXbjP5!hFq z@P9aDaXr`RyIegyCRA}Qe&TE~ZYxFUmrTD=`U4}pA|%U)X*&{ovKdIY3x8#vd3YjP z8*-Dl@-M_*HV8x`p}+(@N?W`RJNqdwQg(h?rp&sE|6qdWENEQ_KiQ}M$Q<+XgQ)iE z&fRcyF2J5Wt=%H@62!2pPB3+|jxwhGOPz}`1!ALqDCYZlQ^!h{n5`pRDnIZukyC&1 z2d-}&mk*)b@TI|WD*n+FjaIZw*{?V>!giQR5p6l6$x$WIBU@8<$R2PE0jN8u*w5LZ z38gNH2;qGQS1-`$qXE7*pyWS82)=ry?kq!hBS6E4B_BiLx;)OL;%>YMG7~$b;xea~ z5oTee;Uii>Q8%|igS7Au`fo9|P2D4ed|iWVzLn?cxLkypIoS>=o*L9U$M_Kn%m>n# zU8JkeSSi|;0+6WAM&n(^$qzr2Igxkb#UuC&07mF(1dNCwS|S8I~szf8q$mwyCV)P)(E1A)d0+H|OrsN0#RD5iu)Tdnr%aY^&aRTRzTmG~8V z($CnZ^v2mxkZ`^%)GBJ0Y`DA*|E>={zcq6i$ly4nXdjzU^U&Bm^Z3tI<;&3cXlqmH z&d_^(_YE+?55`8tRJmXjRT_GF`A?f0N?cLf=%ohn>7rc?ntk&RF*j{zDCLP4;u zGE}05yN%0aJ*2g^O@Eo$$xX5^W_jOlX~BxqbVIvTw`Gs!K$^sZSXrjKI03D_JxA`# zC)o0T)m!w8gOn+7ZJDK~1yTsqU%Rz<}+=0SR#Sg}Y#dZ1B-zR*6 zW#n`rB#Ze8-XHJ5^mjJW{D|=}0$;vKp9?bD57(+cthcl}c>jr`O1~Lic`6J+rMk)X*sH+~e9$R(N3|eaWiexL(p_ z(%vr?e%x;0Dcx#5Fjdm0=oDqi-b6@VS)ZY}Jg+bUDUlmk8_qoq76l)0iiMkG%MOwJ zvCnqlGuGhJf5KKV;=?*9;F~7XYTj0~_G_ySJI7J@*H~Fak>b#H&Lm6OzDb~62DH_0 zqSa0b^}%U&>4VB&sR27R03Y0Yo9Na9AK#SFUan2)2n&^G34zMh!IR{5#8Sm(T4G|My5VO5l3!zg1U?0 zi4$*1O+|O1#I>CBGIBkt&c+Y4aHn4_+j~m*B~)<{Lj3w4uEVFLE9&N{_o1R$_Ir=; z9O7>?CB0#aUt45$`@nuIOkN(%-25vwsLYthoz+lbG{YmW*ma|%&pf$Pv2au$f-5}68>g+mDeeC_%>yYAvX>0XpPJeJ z_z%L?kFYag`)#SQ2)AaKJDr7CvD&5qGQzLz*sq~&ph7rY(cjF+ck}l788&Kq2uE*H zt-b)+qJh})pws;NNQIEg-xFPwgAeZIul^75WhrX|%0z~@i!Q8=?kXCmm;^bpvvlQI zi;PMARDlxwvSc*kSXsB;?Dmvi{^ zT-mw8Az&Ir$Ub?Tm87(FB}>rwm!sTpU-wglm-yU-YL4dsUsX zp$sH5={u$BeOlX$bI9? zHYt*uGOsTroNc}Jp>p!nw7Jkkx@1v1G+m4`WJSJAAf#KO{>N%(Bw7$r>qKQ_gF(CWsr5S)!QcTcq zxS+%Gs;i<6@(H$f)|?H{_<-}(w1bT0x1{3Nm^mxdtzzBT1qt|`cM_AYb1Gl0ME(z)yKH8PJ%;e6#S!Na=nS_A@j1=mhM`RXM1PSnSzO z&bv303|oaOcEC@J=&qDBMENoDqs6rp6a2G1n=H@)5*M@dxK#S4OCiR$McRuiDMj&54neit?7p+lIMm@8#J^ zS}WmktJz{BhT5%%Ls&1UeDz{W{2-&%iU8z9B@>(MWZBW`Eyi$YXP)E{+{aT}q{dQ? z_l&qTksjgK^sB$K-vidayw^Z%kK%;!^Pv=@jO>v%6n|Vl5hFQ|2!|%sea-_9n2fu~ z-Sg@OyS=w8t>EC0JVOup*yw*=<$v?*i5GHPTKXSJ>lD8;D$97(s01Tq>(M_OThHk( z5Fpl-NBFY{m(Me+uIa%3t8lsO75-&m`E&lcWdMcrySj$Js#k0a3FhEuYjWJY&yJUk zxYbcoezBBw$Zvb9XQJ`vmWyOXBF-$gmxYp6dit%n?XVzLKFy=e^Vblm1f< zALZO7zN5qq{u2sXF_)P9|IsA-E4MLh&a00bQ1{a*I=?thVF}(o%3W{0LuR+w$jZRi zX|cn&l+Uu(Z`|gu-;a_)&3b6=bu}a3oXO$*0K=nS#0Q}5^LxfubB?*MrpyIYOXP(` z`N7*u+^S@_K^3M_tEdkX_L0@=9Xyci-Gu2sj$Y^el+A6ypC49*Pvex?@js_xSIv@L zwcmTteVd{Dg#ZAOFry$g zu{uh0km5I8Ht<;1S?LTyshYn9y)Lw!B1-1 zkNI;ZZ}n~1&x*-Z-+m5M-Wwf~pT*a49u<#e%KDtuC;2zrd!B;GN%*(@+u$ds#%Md& zs%J|)2z`Zk?FuGuQw;wZVYHl4>7_fp*n*aPo`szhD3O!4)4WXM8qHnTVhG>2P-K$* z+yLI&R$;sbn*xnQ7?OtmD-|1L(Lowts>@oFC%)ZQ9gZ0Q-Be)ZSt5(i zlk;xtEb@-UVk+iaP%+&t`HkXqxzs2hmzu83D3xl8$ScESpD*EPv8~aEb-|E*jwXJe zE}&TLVUc%*1vksf76qfgb+`0A`RsoFXoCLl{h*l@{+|F1p1Yw_6N_=$t0)TRyao&# zPm24yifyFiKxOHlydBGgmC%pBGpTukiBzk}Ud3-2DUPy^0&|tGq|Ku2y#eUAZk!vA zNYp}E2Y4BqMKVZWTgIp))aGynlf3N}FIksUs^EjUnSSm}O*O~do)o@A z@nm+Vx*0R2mv9jDUALA#+@{vY3Af4&=qSy(ev~$KN;RBLjJ)w@~tkjr_h zSz~Q?Q7wmso?~U5o*{AR_7%qO)}i#&OQ7Z&XW-%LreYgNmsb)}=LLf$?zA$vuPALQ z=^Ub)NUhsLdKP~hOYH@T{vgjG&PoqqJ7MvkRv821U_hyV9ag`?fF1BKfL|cwzJp|( zL%z<5U!jhLtX3r?3>CzX$-yhp997@ig#Le~0jL=5y`QXs=qB=()v-pe)#RZr4sLp^3ON0e_iL0oNKb>>HLKuimtoQkE$ieqd-oK zCBCE3{PdIV@jSz&5^Xzax+}JUe9-g7Zh~7;S)YqwDclz&VPnL%xPqQAoekZ%TN_`) zDOB|N2)4?#Quv3$%Z>BNMLk)q!dM4+89Z+TaE#I`FD**rIHxs~jU+3rT$*^(nq;!c zbu2K-6RVR3$lWCbN32?qt@_8Bq86aT1e^OB3T?K@bko}~(?lG*1s$A$`xOkz6J&Qv zU(XOEz(KFa2%q}m$V5p$-%ps@<5dKf6R}FaQ=l_vQ*XvTy@LE%q<6lRS*s{&nc&x_ z2oz@$@=5Z2n+=*wVp>=qx6Xxd z8kfPx_~)Rl3E|bXEM|%v*v^+5c}VpQ>^47P3v}Qf(RDY#V)fYw?_=i1pd4Iqy(hG7 z9Pj#wwlW;ZldYB-IGDN#n8PBgyP;@pCX$RajIuq?@eeOCRxU}~(n9qA`X3n7o!=wy zM*Jy267x1ySF3}3Z!FT=hxV+;8=CwL2?@o>w^6n@5aXxD$C+xS7oWTz_w$W0&bU1LheF7+NLb0aCGCPW!=EtKDxDT`FOAF$mUBswP4 z&IW)4AD+$Rup-ebHd4^&oLn8uPYBU7+K6*n0b4NwUQ#c!id%1v4z70bXq<&lEUcig zrDH1p1K5S$YKdx}t!8(c5f*6fk3C0g-yMW)Hh|VxMX75i)V>uknq~Vh#yurCoz2Gj zi7=4`fLY_{5mxtq6rGDhi~AqPpJ&hRTU+;9w{4b`qIIFE*d?-DG9i_)(q#xkh~sD1 zE-0pxh_DDbLML%T*eZ<3q(c%GA%vA%skYzu`~faq_B`M3=ktEQUV5AJrHX#U9goRv z#{N!GCST`kbW zFx|h@I{OrLG?^9pzbLnsLQOE(t=-_QN0-gV9@s(FZe%fVI^7t%U?FPNQLE}2Jscs1 z*I?qG$s5q*EI_ko?zi3t!I$!7ytf$N4?%)HdC372`o268u(5q6FLL%2(mBVYXlGnEOHw%riZq3(gdg0T7 zVpJ+BQzjheT-++(IuMv$dd#j(h%LK?4*UiX_$^g@ANc?+Cyku^tFaF`?J9ahaHDE> zxrFb)CB8H0&|cX{SS=8<5G69(z8#u%jL)yErc$4(Q1q`?7XEAZ?Z;WZ^LW8woV^UJ z2Z-9o)A(@{S#_t7Det&BpVx39VOCe&TMq{$^d(3|XLwe06EB1NM(8NJ@v6{B z>5@rdJmslO%TZCh*vb|AySa5<;EKMaP}kbY72_O}u}YvwFb$x)O5tZXVD39b^M0j& zo&aj;l(;$`B_C)RL$vRJBm%mtYNVEo)qBQBmZ(2)tGipF_5aF5QMiT9kbAXN`|Gyi z#VEb}f8E{SEcS+`f9B|MM$-!R+jWndp~N51JqPV}+~)?ld#Ndwf;6nTeZP?yiLr!n zyciezOvlk1sNmC71Xe0Vgw&wwR`lurMN4KX;iRX$Y!O_gw^l3@ORt;?bqab!jCQP#6j$X=u9%j^{ zLNGNkNbEfEa(EO)6VDjjXO~28d>n~*f7XRx)9j&n$Lgkx0%lCYH0&^?9acTL$T&T! zDt)1iW%yEgUwkni6i1yYAIo_Wt7{@rUPnOQiX?52cNS|CRw%vMntly442$habzSyK zHQEY&F@RA(-2n!%;;mUGL@Pexgq>FESuirwPT2(n7<8-R@grGpTa(r7gl23t#@sRe z%@oy+;?6yE{clu(zXs~3YsF{JfTZ4CnN$f~m23 z*WNq|AHun&Y^NT9nP3W3*cpUb+HZ@InqoJ|!gZu0m2pq5tZESbvO5Mwo0 zO90#h*goF05V!Uz@&J8L^*c<sn6up06;v5?xsEJvzG`y6(%z}+ z5oTJk+oAa>EjJPrtV>o)Q}CcH!F>-L_b)Op9JK{y<&PIgo8WzHUaniO$fcvt(_33X zD}jqSH;@HH78rS63Q-0-)rnAUx3B~!u${-YPB&eP(4SzF$>q9}=S^#w9c0Ptlr(kb zPp)=KM%7YNCAv6O9se6>XtbJ@60q$<{=zDLHa5DXwa*i;wDH=nNC&!8HS8Y+7_AGz zv|fPwd;3oKDh?@~!SDZ0O`aC@XCzXUa+h+b2|gcreZ!u0cJ3ZeH8rTk+pWwG zZk3oP96|PLopX@92#s|djAfXs-C6ZbxY##jO>C%drv-#Q>j^eXo$o`tdD{7!`@}st z!bQ*oU){MZKtNVImlVX30|w^ts2BIib7yJhKav@Vp2hbWJ61q0wkEsDab z+j81zG{(0hnnqk3U!F%4dbJJag@c{r7ru(r#>`Ngbt*4F8`R4r-8L&l%8OHw$`om<8rkl;gHJwik7!K>|0#bn!1* zneJk0%>bc`nJ!mP;c)nChj2St(Zb29fH$MKmC&dPJ1$3k%&v4IgUGzBOLcc!UZ^z< z;_e7-4KFjZtK_ zvd@awY`}K#H;Wf52mG1 zC)tl`$hZkAliwk`INWHyw@-o9RiCG9@s>`-$Ib(9{%%=LB8CX0s^4V>6SnHUyl0E# zFU)&?&;%PsE}tHzN^8pZm)W#gps`rdsFfP7dH}Wf8incVlU$$5B)s<>H06X<+tgv< zcVU;E(?cSw3KW|W8_@#(vx9_>$7I^ayo#sCgM#J1&I&d^;r%?Xbbm2N6HcjgUzjh*h~kAD z*W9y7c4YJK%{1RV&cm3tlEmB4o1_W)(?pP2CT9c-?887HSl;IEP~C^ibI)<28Amn# z|GIV`*`|4@11QgQ{c@>Lh0E0J3dM@TQ!!FvuJm?R9b&2nhSLh{D~yVoN0uGR6;34hRwEzH?JnU8G3 z7m~}5)5;h~Z=vlZZ5+Alyp=jZMoUR=l1al+`BPcFc_`sXR2;>(P?sB)b_(uVH%j&U zU9k+6nNh>CM(uI5V2&;mqj4q~R>jz#rX@>riy-R!7TjMe_m5_va!X+GOZo%#sI415Ut|0j{nSLC(;aA zX&|8AgkP920Kz{}zFGPg3soh!)4=!ku!`WiSZ1P6hzVer^CWh%w#^i_HOfWR~|1{xVgi0?gxA z*>v$h+i|wZ6g5M9L?~TN`410ppR9>7Iixb5<$-pTm3o2AYcxGB0=AqDy1yq#2t?vI z(YCbQJsco<$p=>8&*L=LZdfeHr82mU4W*MsIFPVBUqc40ydm2P@|lIY(~8l2M|Pp; zm?b|K=a9x$?Ca+?VD8{Q^?<)R*C~hV!MV@x)}f0UKwH0`9y)F$-_f3|nROU0_0UEu z>*P2tHspg>I36j2Y=?Usv3ZO=FPTNRG?*xp`F8?8id9chIz($iFX zyyjVGL82AZCBiLHO^$uu3HPw>{q&?CON_EK z4zn`1x`E=62X11UC29;|y5j4|2yQ)Hh?&C;sMbweq3(e@;5ph}DJ=ZJZC)TOx+pW|px+a)l}%Jv zz#NgJ+iVG}s>X!XGZB_{>Mmo3D-zJhXWHy$X@;~LJlkr-XqP@sv7N`L={M@pJ#}-7 ztg_C03{W+hh)~mVf%y{Jzr3dW+g|vPS?@%zV&Y>CXljx8RDQGe1Jvu7Vf?$_>RR#7 zd*vEscANGGyZ#k+;(LBB!{K;CdYU?)Rs9CJOV`|XEwH(A51T}{&*$T2~ovPjD}c zfh&1cW{HZOmoC3V;aM;khWGU#{si<+`3!w&5MzMl;C-Dfzlio;9<@45N-v>x-H_)p z3oO)Fe~n^Q6+n9n9NSPS$SW0LpXy(H%{EMrpK%tuX4b)D0Ex5&rw!pVo_>OE@l>^J?;0ljCUDF2Y%@dFCG*C4H&ggcpNW*B6WX?eMU zkwx(H55}o8#eR~ZUv&HVWX4m$Kp=?IR;*PwdpR_py>E1e0}LiicvW92pa6jb7)yE- zTq!jPc|A@U8A5}ii~Q5YU}I$vph!F1u4Mpq)Et3CQe5?)nZ`;#$*Zwx5gx~@^Lv&` zmJNTSAI(U4JE;RqYnMW_hGA-KqOlUU@-(k$H{noR#or)MHu)OXe*xq1b=z~=d!E@J z{VE$W)bFMX$08A8RQnM0^)CAK(r9dgyNBa5t-!W!zGGdolcTdZQ%_`zN_YrVo8p>g z;bPUWCIL$KarW_%j<(?Mfbjk41{KAI4?KDg~7eCxhUa=^72yU5;3>qtx# zKUh@d&(Kr7IRE{#55My_a1d6`6RiDv_7*TJamukWJ-0+lPPliqL3`|(lcrmu974U_ z|11;w+Z+wI@RR0>w+e4$q{%~rX}T}Cu-iO6DuxYyihshTNeA^& z%~~=?)D_v0xm%gzy6=w1lS~Rxl=-ENQ6`Z2( zz^v>6$Ylp9hhL6+hK$lZ&YP04q)dt51AGwK{3Yyxfk0miIOkA{75tTi+HF1DMyj>q5-#+!ybTjDPrfF1k)Y;#KfUBRFW0M1 zG)SH7w3g~UkCEsa2W|Zo*bV@Ke30u*iW*mYnG^H{uR$;h7v{WgjJzO8F`B51k)I} z$44{{^;(b+W#d7&GJkOEdc^Yf3P7;z83nMW+xX7`%A7e`eo*Be+bmn^lS|l$!*)sT zDi!b|07h3iYF-nA&d1K=4IQ>imdel074E0B1Z%#NOR&o)p(v>Zbmm*P_M7ImU3SZS z1Z`bl3Feg*X4nJdCLif_$w=VN3=qN!7*$VPnhBkoGfbjok5Z?ksbMz}pxghpD`^mK zLUCw8fb}O`ieE^2wh=%6c!KV2J2wXphP8B8Fw||EQn^aeo8RtEHtFGxfiUno?8^nx zCiE7!il+;M<@2`TuF#Xw{LZvOW9?2t=^jhebJ!$Rwx2d{w((66gLU2XJ$B_I6&DX! znO^zs)HozyfmP{=Id@pU)v1yc?2eChu`=G`SPMO~9qFCjGqN7TF-;jO8ClZTE96IN zNfX^&D-uc1{s++VYuAlrisc@oihCNGjYcc%DN5L@uc*&y{7720*~ zfcF2RrLbAvROM@24PyxeqRGR@M|hHL&L9_=$ej^}T6O2g)m5SI5N-T=2*EZSzptqu(0wFOp1 z!(Ss+jvUj;kBon{d{2XzCb2Wiq#;ztFl)sQHQANd=A3rP(fd3YnLpOc5_*G_&zYK? zAqMSu!#q<|ttDy{zi@aMX9T-#RwN+6di|rRMz!iqBlu+>P~%l%0;#fu5aZ?X!T5w^ z5Q+~5T|~9uoke1c>fKCCd18_41TKZx|s_YD~t9iy19bD0?acU zuwk?mns&KAQlqapB+m&BYK&;oG-ADpWQOQ1`um41riGClJ3ZpyxZ8HIyiW`}Jpri6 zBUIrS=(l_OLFkZPPf5N+_ViRtU@Eh3FmG`NwXnuVIx*LKv-GN1jqd%*)u2%u+!Jst z@A2ZD7El}xtbR9&djOEjrkC96<0FXssT6eBdYTSgF#WdiJX1AXkWAo8PN0e(rR>~^ zOltu;C>pFz8zZV$eOH9_2g?zB+*)4#g)&pwFK)I&DAHg;hcUD}y^@)#SS4doE|H z{4uH0D?dA!rl+9u*{smLszUhp=izmRG43E1?cBFR(x4v?*TjGU=nOj2Cw7!p%m4HV zaOZo1t#T_Z1v53Y2^e2oz}4{rT8_8{Xy3fyuSZY9rMXlsAU^nhzpzG)zgtpsdkU-C zEPqE8J^{U;3D;c36UwZjYmD{ZsBzEOf`zJ$x4@-&kk>^eMI9WH$-h`ExNYCDaeCwn zgJB9L_aAnL|5yG z1Vf#qBO;Y!UZDtN&%z^2-|y-0YkK+3Aj;12KFWiC(%s5T>oXE^g7uB|og7g52*UMX zd=d_Uli_vE{I6EqtpJx*HVx})rEjw zoc(eo0QqRJ`#*`fDi3_&BP)B9y?iu3o34L^vQu4wJ&uw!onCF%b3+?=lRSH{o|664 zi}dn%9&Yl8s^kJAO#a3pb)rOyY3o;JkGOXCqu2BWjcKG8d+}4qem8YP?ng_3!`aGX zITr)?&%G6*U@&}m50toXr{-A;rd}?rX{YXtFxW>*euD#QMB3JNSxNK*ndAat%)Msl zF3H+m6l~N)3h5z|XKqHlX7xjDH)&!%(+m5S<|F)e1a3>rZzq|wsq&X^@HQT1zqeY} z8=6%g^(nAA6+85X?tMY2=6Mo*#6N~`?d9roUzK^Z}nm`RD92=2pI zhPagzm2Vx)$rGhz9yvbFl3!eN+-&jhkzrCo*hMC`N4ph_2DOy(Jr=>eEa6Y&d~|9G z=4lLmBlD;HQ=s%Z>aPm;77vuNT?e{GHx_`!p=W_TIPi-LtO^ zHgdIbo|PVL3J_aCjJ$tkRb{4;7Be+~GOf}xc}fWH_F2VI_>=V^^jWTG8zW?iMlT$z z`3RL;^tYTG0*>*?xM!rF6i%b7E2!18unCdM@K{X;@PgMkrE21x8wx={|3fwE4HOx# zN5{-(ykR(u)ixj>)RtUIs665T12gA7+4!1RABR5llHX$Go%U9=J(EdRiPgzhsYk(@ zV!E$`L+D;q5pF5+lWL!$*@ijzrA*P1FSDX1g<1LMGgX_N#hxxer`k@*DpO@1`tOA( z{H|!Tm)xCFKLIYgjvjKW`%dYapRQKJ0Y`a<#HW*j`3olXIwsVBfnK{{00UTO$)4B; zRK{}MV=s`L>l_}YuB7r;XG{C|pS(pVvEbe~EgpJ01MIm6xDp6DI8pbu4eSD;`NpfB z3nfAP7MFtn7o6@E8Wt>AT@L0rb?8qM1@{EP2;9QUQH|u}+X~OS_$eVuxb&2ErPsU3 z;G^0||2R{UiaML7?0Q5TpDrG2!wKMLfSk%Et(yU!Z)}Fv&f&$clP?B@iD6RUJozaL zQbwj#iIpe)u)X(4Iitk>!0K}p|0Vj9J{_NJw;KKe|FX6$#4z7UqjwXHL=7({XX%=p zWgvucrbT~LUb#ZJBd^&mXOlOQ7EkNhF1P)Lh}F@%kVVDa=((BE-Zt_}p! zyMI3Eoq69TICyh|l%Hh6|LyMj8#A}OhTU{8yx_X2&P*?_r|m#8Cnt84>GnNDf8Hy9 ze+|IMYz!AH#7pJiY6HVmiD2vyDH_6_5jRZnz)3sc-pc1%>4wOBic>v4ek2 z7lr3G+h@zZ$czkUK-=7M#L6%I8vsNS!NDZWM|$O#L&D3NAi)N2?+}H9Z`y|l<1rck z*P7rE{_SQ+`D4%hx?)Z zd_YyIZAa`afGtZmVN+`I0TSeI>}Bee73kP4pygMzSUO$RE&vMq+ud@?gQz#IUACAl zD8^O=-0-p-w&#j7dFN8qPmVK)aWWu9zeP5zag%lqBVJcgGrn+h+~L}k!*JJ_A;Psh zj9XI8E^xYhWqPw$kMZu$tj!GKC&i#jd9FAxGn|xxJd}39)y_e#)y(q)sAa5jhHkq z?=0OJYPDS|j&lyE$d-wZtyexhpjzSB_t0w9rkLq{tMcY)$AX6E5XP;)=ALcZ7)dm( z?TJ$D*Vj%HR@j6h!Ih+#6Sm{nyzvtNprPKEm2IDA7iZ!*m}L@FZnl7Tk52(50O~Zw z=mV&1Ql8^XGnNrBHL7&y2+j#_T8K(Kj*27ywTQW%^tD~_hR~@~y`?9t&CA2(Y;{le zuM=3QI~PlLDJLiK_CuV5{OzJCNcL~8gxyq3uKyoumYX>9Kfu+g6&=Bwgws{t70*b; zF!MAkgh5t4xER7~a;a@69e+=+^T?$hXS4ZKvsnGqP9qYdE?kB3*`a{HjO$9kh8<*h zDLwirwe?8Y{SP#axa1grY*Rs)ncjkq(aW`pRUuJJHf%H5wR8J{j+dICP9(SmRW zcFe(4^l8N08xmku;cKh->wyR zkAQAPTd(3bDLb;CYhd8gPTrRp3L=r$a?ct&(N|T=7-<{A?(d+C5ifjm4357fN50bo z5_!8Fq~WRR(7%{t9hxJ}aUd_zp(qJ7e#f5u&iKi*$A%L40svAMCF zYi{x^qonUHIYXY+3Ft>U6q3dT27tLxk*`nXcYH9u_%h?Oi}cqpm-Cd(d%ef5vtW?= z1VcXuk8=T_Ea*des=N=3HA#hJvUT4jUVx$lgeqQ)YXzryJZ2`febm}*kvAi(ny_J) zu7mQo>DbDJfbBV-67!HOy(ZpD@NFHW?mMQ(j6=4s#l+oFe1xZuQaiWoasAH{@SvQn z8(`Gi+%-V{8~Lv_0l(;86vku5;+rFgzp7;I9MJ?#Lks>#s|-86IY@x9>RTrHR4u3J zk7B9!lmj6wgRgK<-Wn^9ZxJok?8HP%Jn@@<$qFWDM(``QSo5EQnOA(EvY5b%3rEpA z@Zsl&b5-xi!nT@EALg z3%@|J<|*R@Z-|ifUY3)f%$TpcTV$8bv+?bbzje$mhWpSGj+}Zyb!v9PY5Ob(&fF2) ztH<~O?gpTd9|S4Y=O+t|8_?xG+HRcRH&^|OG_wcUu+sRO;&q83gD#G7sIyqD^fMOR zoldS)q|D&*FHOn1>G_X4CpF|Ylh#te_cViP(pj$j@h z<=c;wxRSD8kISjE%@)v&`%Ncn#Z(nhCOVadK1?J^%vCSA34#^SxBwAP9$}cH5!jU2 zJbQK!RJ{p+IvWxpv5BZ+;b+~ny(#bE?YoO_U8prp@O3|=@v@|aUEvQqCd$l3)H0srg;?1*eiRs0-*Po|pYzcS6Dr@dM(oP`++ zF!&M1IlCig--a;Sv2$eF!*`h%bJ#Q?Icj`Fhhc(>n0i*qbeh20z(+k_iBvz* zjmsCXoVrZtnV7oQ@L`x%mZHp?n(YR;1!)=`ijOkaBkmGhuDj%db3M!E@i4vkZ_|ls z+Cp6D2bb?^VYER*>M6()ML{K%yh~q}3l-3w3B3hu&Q#Tcu`IKEY=#g)P<&W=ZP|$Xy=xVSs4{hPM5xoyF_K!1$I%5lfX1jfS!Y67& zGp59kzy2Y5EkpI#t7^W%O!bNl(0w<%bnZhRhD)r}EL+`qH2`=x+nX8)evZ0$Ha~6* z=b{C6>N4hm?+jMGP)#eAPU|-I9Ij813Vbw)Yl_i!>t3Z0lfB@qoX&j-( zsiBpH&UoKTL#0p3-(#z4voR1g$9U&QsH+m7Q8V@GZ`d){bdMnMZ7`*&OM?Px2DN_tdiTuAn7*6+t6X+N+zjt*T(V&!3ERf7D&{1ka7Vb(>!zIP~p zZ&j48L|*(lMtCR1Cgh_Y9n6sDJ&+{?+V^3lIivY~Or`g-nz3ZtupnL*JnsRoLvx#0 zcN}|qsxXl>U|0Po?t@N#Z)&tT1=NQuO~Ws3H<6`KEj>vn2kGefBCy&eHd&1)x0qkz zyertCgi%R*;tyZRwM(K{@-IJPKHCRB8OS?umW<~L?kv!)P?~(zjuB+jsXzzsbxJp- zcs1{cJ4j1y2umTR!^q%WP92HIiI_h75L$ozZ zQ+LOJf2xC4D4q+f49_JR2CMG896c(Nwkxtyl&4~9+_aFy?3TR;;#Bb~z-nMgpU!{T zj#0}!h&Gs_emRBcS-wJDmA8DZ9v`!ju|#(yG+LMt^(PcsCthP$a9V!_m3*1k1{GN8 zhhlXrsa2oob$Y@;VEv4K>OQgf2iGBB4N!m8${#x;X^_gU^oDpS&#r4RbP|?s4_1`^ z(Ha5ZrCju|@_ukakZjP= zwM)9G>e8W#s0P9_O{`srv}QD{_r^x?6|`GP-u`taPKNvtA)8h80^f=H;og-8`oI7I zajysW{yn|{Z36)7d;9A z&u`lZ!0!YE-NW-;wdwXqz;?a@{nvpq#@dWD_4${m(5WYzsi3_Ug64jG|TaBeD04U4-)vyd6N0w%S$K4bcknZIT45W)@6Lu=(ZU zwu8)mKbncYM(A3m^x^sV7$Ti=Wb{gt7&?-V_WQ;A!SxPQws`@Y4Q9ieW1#q&pt$AM zF0A>)Ta0bIXA4$+3HSK}R95wbX8eZ{c2MIdo-|sq74mQ{H2y>k@xo`QWejMduP#(Q_-^= z*;_>kQt0$P{*gJtdij`9`t%_1lfWI0#;yh(U0Ql>^c0r&#s686FKvR(FjE8c;J3+E z9>0fds0iR%WQxDZX)Gg5>5uivNhy$c!2fGO$B49c6NSa2)QLKAKfK;1fG=nq z8qwg{VzU(wegSPL{Tx=u);XqhgT_&J z7yHp0oXHn`)YRJc#7-ZRTheB{=X|xxHY>b}Ni4j(TsQV_V7AH+*o)etbY(hu`tCYN zW1jfO_5eQ)28(N}mA#R9(oX2H%%J?0XhG=qw+bT1+{4qBj#Afb>p}%EK6B%>kr(4wxWGwSyVTtN99GdhjYVQye=eqWU1-3(_7$h{N}>grD}qwb{=0 zm#y9D7+)KJ#0v*k{K{+%re-3c^07f@wmc6MDl@=2&lbrbnwvADh2faJUCP&o?R*|K zL#wlS_QdHP)52SzMYv5YBy_EA8I(&1E$3S@lr!w>YctV*IQO7LgNkCetPHGIwAEF+ zpMxNA^P!_mWKp*!I;?q#W)>Ko*)>9Ith`$E^bo_5nk0v$nx^mp=>=t%g<3j`kq+0_ zkM6~flj=#WQqa~2H&8^tyD;Hkcg20+A5y5v(?S2+?Qcz96Uc4ng7=ufozJ^&s->4; z_1BNcG-cbQW#Cx8ceyY+RenDdV9%<<6ph!7G3a$2TBPU(tE0s zNZ=U$P4!!%k5V)4fZxZ@R$0|DX*ljoy0QnB7(uQ^KrYY$&4MNsy=4q@MJ>>=j?6J}aMV5p zF2}YA7VWjS|E-1cOJ1N#*pu>iv%>y&dJLW`J z{da93Z=%)(VGch+yEtjeDVrU<=S97Sk~iz_jRj5=4m4>yf4vS!vb9&`w0eNBezziT z7x?61!)g3K_%#0MHA(^PiEo;c>cbX1$UB#(*fR-83s1lkxVUlawTl^Hl^~DhyAH%x z_sKxG+^JrTdHd&0O&9c0!;WggZy)gO-7!y^Y1byj1U^nvkB8n*5iY^EF%|7r@k-5* zj)w}&%|AKLM;MMhy-Y$w&)R0%jyZQyw}vF8p@K-0TTotund-{vXfbC%e%Ds92D_3nBTfgf7}SgFB0%WXw5-?<_BfB9pM?1bYfA%fCL!MeOByzym> zjgV3Lv$V-QZWV;gb%cXSiKlbIc`> zrp5&uaQ*J}UxsjN0M&GW&Z-t=${neuli)!gIZ7?=)<<@v^~kDrI7^-L>((-_cvgWD z2M@O=Wh{iW-_-uO|5;h0>BrQxV}aEHV8Q8GN7($rYBiqo*WgE~mpnWW(`KZ4Pkt%D zOs+wMK?=@N*XmNZw#cPttq2T6`qGrc?tMJz3v?|maxO%fC^gl%G$~=nw=Na$AS9;HmZ0QU91{TY^ke6}?-9Ns5FG!6Sn#xfVnA*>= z*xp^i(b3XF$o@r|yOF}L=rr&8LgchdG@fwoSBmPQcFi`Ee*jHeqd^*C1t8sl)+tos9=!o zJEPo3xDuH%NQvx%rV;N!>zibf#{7lhR_$e$J*ZVq4OTdidKr$=6JR7`;Ei)|yQ-cKmgU1W4s+MeF^ynSv!{6Xpm1~!^(95xxyTg)qKSU7;XHz-?jc5WP zP-sV;)n79mw@0E`Q>b;A!k-wOJ;u}z$2Ksg_+TeXW*)SA2UiV=w}c2naMc4D^4zf; zhE|nsP4O#+Ya0f*jc&$**RlkTvYmNrlJDbSzS|^}O$U_~H#D{{va2@JGh%uy^+xp?J+zQqfQy+4sQoq$UDM7{B zyAyu0GgUo<*8ZNcTbCZnYF=J52Y+{_m3C0Po;*RsUyI(mP(?}+-oi|LPSZNQkO{Gv zd>78NiVseX%SAJzd?l``<3H$W)^UjUN_kumQh5cChn6eAX!N^Fnordj3vTxoNp=)* zRdkLXp2aogIk75L*j+f`No?5}Md+85beL0G@o$R^Yxv(LEtH8~jMwV-TTR>h>Gq+8 z#+v^ySk8Yk92lM_t;S%xN;n~iE&nMR$sDAvmdLxl0e;YU#s^x~WX?lNK4vOMsSo+X zxGy1RRXWfXEM1|4Y%--QsIJ<8IdjN0kLKpQ&b<|+u^?XF0y4mxjcBv)fYfFx>56^6 zT^oIf>K8(@u$(4nUaR4_8zH*cq0*!9qHQ1#s>cT*ZT)#C=>>dkHfq{+H;+Y{0^GQW zDtBGFpUCuexsN0fcj;I^JzGu<{|0+($v`d{Dkx|SeXw_HbjKVI_7|RwZM4wy7M`?G zL~F*k9JcBgZ{kHZLzImM&y$RQ8aG$48&87Hu=)UEO0!w%Dk$}j0-qXSGEpkc6#0Hn z({aS{-5gCpegep14=U@a#g$Bp0=yr=IyD+ATuM2~w+w$HHT<%RV+HdY9bBEO=M?Pc z)WFj;5xn69zFtS(vl=Vi+Jats7g@HT{^`bXsZjI-yMg!50Ua{q_ zatzY0&4iDzbWq}F)S0o0mE|@$zzOhheAP1C?GT4-^bj|6uDl$kd7~bb3Z7>%xK`Ck zB-)G~Z=jofNL3!F_uS|z8Dj_h{wrvyQ^~5EH5}CVAyN=2$kdE~d6P6Nz_@dr)Pmjr z%=9OpuP1M!3#tAgY5HGWNgEOvgsCm7SUt|F!g}yF!4BR={(1P^6J^P;wc@0SD?P5N z{;2FyQ9e4VPQWENAZf~)V?6HgC>Fic1=%oF^2DVaMFRuH>xD+&wA6I)KCc<(ZK9;D zX*u>v^P7~sfETgInEVjBan{yxeWB*(1XleXdC9n&73nTjM+h`)3#suqH zY((pI_wg|RAhfwtCK-id^FhgpsD8sh7qjvjo#eIB3kS%zwXGxA>P{QmH%A8U1G_~$cPbCZ|i z%ge=J{`_{HvCp##NV+z&q{}}BY9o8RW&pSD9$4rJpHEcekBki45FA8p&@VJlIV`mi zPfNw+eV8ZA!~Qa8`{DU!st3=spJK|w+~qPhGVZ$VyTcgXNYfQ%N`Ywg%zIu6aaM%s zk3O0!&N!km?t3Lbr=&ORwX5w$(=$1UI7P&e9rrco{EWPTXiTV5=yDxFV05jm&TU zng{K+U*#Jo3n{&>Mt(4ZyympPk+;#8^Eia(wt_L$gdU{>uE`=_V0|_3JgFs9YTYYc zlBxV)yzr<^_VHesFop79xv7xqCB_}1dKJk%GH=P_464z)&`}z8>AV4YTsp4{pOk?+ zClx=%@`z)_RYCk+Bx#P4*lg823z5E79D*mg9bzy)J}cAaPOhKvgFfvL#xF=)wl;`$!i)$^Ya4hMT2|sv!jKRFtZMU0pJ4Db+m?;F5h&DAHKt)aH4>a%<21lhsn*J zni9Mp-nC+Moah}kGYl)ur#pho)szCe&c89hAU~p*SyU$8xE8b??Bmn<;Z*G~$EtV( zm&faOz#r6`SAvpOt|FK&e09@mtQ!VO3XQwoGb^F{E`H6QfC~KGc5$#E6;3khu~=Tn zRnvgi%4k$qfpV;yG;}nd63xq4z^ninYxDg(__n(hxt_trgj z!GDnkIK7>YqCw@ae*mRx%Xt0MGjdOSE!1%(H7%9*@(%7pXw>aG-VN-n9}j`eVN#Q< z;2877exnAHL`mE>Lce+d!0sCEppti5Rh6VPZiryTM{Zh=a~d%RnQGvgIJwOZoHcC0 zw-2%od??HNdDP=Tko4z$K|g!}&e;HVo5#C%P&>(|;~(R88{!*q*8hO>rnI=5bD&Pt zu8Gr^0TctGL5YXH)BoCOx9XJ)Fl!sIUl@R?0kZ;RY(b-~{S7i%Q-|w!se}o|naa)E z_|E*-`S24$Ci-L_5Qm2-7Z8v+7|G4Y+^S>xHBSJ%#xa3h`PC|$4m6}tX@3QaT`+cY zp|JtPjnXmeY0OkxD!(uPv`oqf3f47J+jN*oa*M)!0oinWO29&^epeP&dZ`(-Y3C@C zaZ8lML?Uhut58!ydHevnTS7K}r`n`|@99_0DD_O=L2Wv#-VVKXf3V>E#$oCji9E}C z2Rc_~7ex6K8YH-m5XYFarWv9ot5IFxO!LNSWCN7tB;g%g!*_D>JO)<8OJ@MIBoi&jWw*35-RQP2sK0KS0Jr&Ce zou@Iwz>M2@NRk3TQGOr zy)_IQ=Y)^>gQVg~)~JoWGRe|GdfZI?8^_LG=!#474Zgd(mHCkwYo)GqS2XU1fkp&0 zgsAQT_!tu77sMiE4@6c*!7)r@7Or(_VWBZGRP+M>V4gNnWL%VBN}L0%A#$ADwPHQI z!P%icOHFQIt6uN6t81W^%q*kv-i{}+279BWN%eAW_`5iXujX^pZn(wWtE zWr(V9)#)xqLuWF6fjA z$AgYvc(ftFKOj+@y_Cb*5U*dVd zsj(i~8HN3CgFj&he+TaAT%J|VLd69u{zv|>T;AjyTu<>I+kJ^tXLA>#zQ3uN1q#Vb z`Rl!eM(jy0R+>Vbct^hkpsY&!q7JV#{ie6SK{mNsmDIkWhtTR3{8ZOA3+nW^nlNzV zg)LE^WTIiagM$_U`cDJ3!e!3GQi7G<=M4I-8J6)-X)ZxFFQ==`z8abZn}gW;$Nk*(CxvU zw!!Lh=;uM*fR3FC#~^Po$-aU%V*Q>KN;RgTi9ENcDo z=c3yFoo6ObXinBR)`Ml`P1}DIZ-(jFw&*0fG7=Rx?2_e-H0)9SnsrdeB>F9|M9pGI z$9?*>PJ}||hgULS9NGILKNfYNe1uv=&a-ODzyMg%rp!5rbX>DiKPOvo5C3bv`kCUC z3OI=xBzJ#UBNxjZBN@5cM1OPmN2`XXsHYw`bG;|(Xnpk16;aW#G@2NOcTuEcF&muz z^VO258do+pfyW{j)|lj>8r{Ve4DM)tfL-pSSzzi-qaUi#y|p)DURg(S!(v>STVeY# z0Q^|JL9O;=b=g>%LDV^ET4aq5Gl3PlS|2{uC`6x0TcJqKA+P0tsi|K=hn%$JU_8LQ z;_;l*x~0JDy%R24jK#~ZQtrb=8FK#>qFcDDS-*kbOs{G*g{3)QIrsJHzICkI_@ZmF z8a(QjOMP5^sE+?d-ZkSkdZGto_C9TqO>||Mqc9k~1dtU|eGg`+D?>C>xVon$JP+{a zsM5k<0l4DMT_KthEwLd~Fm^(Y>rDUW=*+{CO8+*_;lKd|L|nlQNOMVZK{H$m&@wD5 zGcz+wT*I=4%E~s`+?uhX#!MZnV_DhGl$DiJpjKvTj9H_tWV>xjK%4qUb7;6s8PzQB+Xqxa3l)_q?P>1rI6z#8ZGXN zXgVugz7x1?aJ946i=3n7qpG~Cuzyw2PbD)xUrfhs#@~-2mVj+&@we^VELQNpfq=4d z3czwYvz2A~87RI2~Mt!q&LO;RQjT)+m~1dFqbraTL0gK>_tTkD5GjW7C{ z_WQz+MA>urB%%8jF*Tx#d`ipa6*;?aHiYF_ec=*8AnnKqY3`sl1*Wb_N`u?Mr6Gq{ zFl-4z%{xa+E;0Hyw9xlb(C$}Yhf`>u95$p_Hc=DsGP}P{2i2r#RmH9*IbU~_n0@Cc=%*Ip@iWzC4kRuW!2)j zi`l#!;_g30Zz=9LgEWX$o6h~Aj2sZw-9s#=YlXG&5>ug>^K3!B8_^xI^zU6x(jDTx z9ToN@dPp8c0kE0j5-3!528ep}&Ws_y`i{b$jhNxw64M%TW~-ufF{U{Lp11x%k!SgU z--25n;8xDy@1s=9^xriDi|Rv7R`A}cG81HN)KfEK9AG#z+pa%#P_<4=fWJGyy~`zG z#la7mX1I@Zd9JN}s`NJiJ2hp!zQ*Qys~`*RTVmcC?|Li3&aL9RQ@x7DMt(TeY|+1U z&Lq0I?^9aZt6Rg}dYmOmy1)MpQvP_S8R9gpB7_X+k8abFi15ViKD zQa(Ej?_a2Mm4sRhS?9<2`8c&k%A9a7R)Pa^n7X8&?p;zFS_DPp=m`T~mB=n8{NKrw z?@dPtLGIm#@ytvk9FK{9&yJR@)i6^|1BDX!Pd%c|SsNR$m^%l5PouS`yFU#OkI{|+ zRVWwUYD~CJKDL*)F7(AoI9fLHnREXYP?I?!l3xs4#8gh3y|^rPP+#&sgYb4)db;vx zaA`WyJ0#04J<8I5gs!-R$*7hZg>kVBnyrp}A$0S-sTpHb$H24GmEljzP;rJNUp-2h zaE|vYjF)B6IAZC?WuclIG?REs5|c7CZd{Ru>QN7@8r)IFS@3~?#z_9}kpFIIeOqx; zr?@QVp0pv?^7fJ1(rS!D9LH?k_))Gz36*lN-*xNMpWTs_z|Po93z4;Gae8lLf8>I(xwvwVyhOR>!!4BHlBrF z6-Xc8kg0V~@h23#mGgBLGM6q~=NH{iQp&5*8HJ1&xLNg20XFEjIF@o0=6{>4Tl?AR zDp0}JbOE~T3!(2f-t6VdyIvC4L`?H;p-0>I*dy4Wy-(Y$Sktcg(mkJTE?;$ZE(b{7 z4#ah3=Cr)-N>*)=Z7@&st^kej(dmdwa_<-{{$L{cFs0@*FhOslHjLUd3CWKtMj1;H zir){_@&dL0D)lgJP5mu}taprbu}lOU_S{n7(-|erux*gSePrKhdWZK>&WIm@g%&}L zim#l8uiL6X(#ASvktV}JX5A1y0xwR+uN+gpR|Y$?4eRu&ruR>Nq+SDqsOcs}{bufA zI+&HO4U_oG`Y2um_OnTp7x>MRAX?&^s4+@=gMN?@TJ$F+F;$;Y4V_)F4~lOLiqsSX zkaBV2U7BtUY2KkAWq1~MbXYg%!h%{^V1bwnY#O|RWJDs1RhXHAtwV78h42N2&f=p{K{gr z&CFmo`kXLY+)lMcl|u4L^q6wui++z?@Nt%O5&$8+gZ&?86_*_}?DfNDGz91ih8ef0 zCgU(^wu8xf8>L?nXP};b%VwLd^MdK>L&eOzPo6;$D+5G#Ns=J9o>M5ElNT0L_Yd8> zjLo*f^%x0frb`PKP-s?H^s7OS`08(z#08q&r25D-_2G=lyDS65m~c-2($6MXo;GWv zAti2_@_1@#mI;WSVscE6yU^efMuoj9xXo3TFk13zQCm%?LUPl>_PcQpi<^^ZEF-oG zWVFa&tYp1XpGH2rlVTkicfvqFjtzR1O!E>bqQ-uL&~JQlaj|PXT9gc^erZBtSAEfqVUgVy&cMXlr{sC5eWQ%eshl}*h*B2~6BPcA0ySdf$-6mT$@ zQ2Rt(Nb>46Y@}IV&~-&j8v^%}C2rFpxZ|~UDdC_2p{GR;`c6DJzYAwW3TI}9*S#f# zesrzg3#hHoM;|L{SOu{&!Z?WJV5HfV78}AE`vu3kQX}}CBP~T2XN)cJ# zP{_WD9qZ6>&;YBqKCmh0CeH5+H^UlxMh8JeR{&PXEhdfS%|&F6g!2)ikrL*s`5uUD zANklq?nmNv2b+V6RvgikkAEpF6dHJx;J+x30@IZV7RG$2B-p0zoQ0D%GacL_lS_Z` zu7?W5U_NETr6x9MUSgV_=7EK!F0oeIwE@H6QzZuinXWr1FrK&B#WVR*T@yK=K! z;NYzg9rxcwtI4WxM>P00A?&cLb*Qd52=?WQH`Xwh`zKAT6T|FS>9o3-(hP9(4%(vS zTeK1nIN{nCp?R<+K2F3B6rJ_zp(RoOVD?*1Tjo-6RKLH(`82$a(fFA3aGhROW=z3-_&QqjYFV_*RV`23 zILyiX3z$ZiTqj?C$B4&T!ZxArDYw8gi^ztTB9>i=#(ZK)5U8OcomHrdXB-pfy~-R_ zvRMVgroqf<%g;qNL$>a^6B+s(7FaY%SGSY@<^<0A#;Nf$TxRnMN=_;@FXm|#;xzJ0 zgHJ|pT#!vq#Gu|okTzOknJykBbW@u#H0KXya+$t*DoRd6NR!5$idsBhdIh~sZhRw! z)^&*ARxvkuAaR^F^EHeMF&>_yZ4;U9Go%H`-V^8$sUHW1NS3lU7Y`UASo;{gjIRMC znj#3i8^UFYnsNpAId3|nZY61^4`?`OnSA%}oCmwcsOtuW!?wQeTMVliT{pG;>_>Id z!u3kgOWV5nxTz_mrClH&exI-U5*+M?^EN&cmiokS1K|TQu`X_`gCV4&t`XCJzuML&TfQPFNq=L$t34}z37G_S?# zQO1fvWxw^BH6Mh-dEs7O0GZ^rN!wn%3#voj=f?TLliVx0hX7KO$1b5<{mAM67c;4y z{&u&Hm#F*`f%M*1GJ!aGIq)R4lfSyX`JE|${Zr_E!LW7?8vB)G{T6MuUEl8&EaO3) zgj4n4`4sR;x$LEAeSmoRZ27Y`vg&hJGy5DDbEFfp<&qEGSfc=XyYj38+Tj+n|C{x z2ljd83-t4-e(vIZK;-^Zb?z`1tV*_tA1=pu+sX3B_#W!iDr$KHi{~TI?;*nO&&A&@ z1A|2UUxdA#XvZBI-81ew_CqL`p`y<2m4pjcnl*)t{M(34>%B7LZqAEO3S+yaZM&~2 zo^6e3&;H4*4(6U#9UEiNHxK^qEH7%ueYcg^33iTV6g!tfUCYoEeJieN7ip!k#CNhP zxRRy+o7x_3Y68*eBuna9$C~|YJy9SS)t|S1^K}l&Myp`SECcqf6IS{n8@J#Z?s}C^jQl4sQgjfM?LrwI4%2R@BMowz}~!ZFE1O>k*wf~Pxyrs*pnmrX=8pT^+H+W`S0 zyPoI5)e1%CjKZ&v0h5;NkrWCzEUQ#G$h5=2x`7}PzN!>{O!LcNp?!sv{?xe3(lq4B zJj$bGq&0UyT*fGgkR5P=b@M5qtE~o@h~yG(XwtB4Vw^zjhEHBNHsb}SbgaxYekE#f zADn3`QIXaYWH_Wptornga2;}U-@;0gZe(8fE_`(;q3RZ48==?PuCWe; zKu8`kH{0@gRnjcH;Bi3nV~c;mXX;w&ZfG27{|N5zBx!;A(IL{U40Ov^hT~VXFHZ8O zT|;^aJ0(&52wGmIZgvbl0fz>D}8L)vKfbfi+71842 zH9db{)i!#6mqNS7=8=JP{x15TOzdgR7Ja_i+T1nxZBiCMd$W;KH615nU&v zm+9pbt!PEV=@c?}?sW)oKW%vO#TK)(8=oNG( zH$&Yp(eN*IO?dthPI3WO(o0_zgg;eO1JWb!guPp2f0MdgV|5{(`N3d()gRJ!9~zu; zMXwvZOJr`z%zh zS2cfhl1KmH^yq+8Z5aZBcOU4)m)kh#=0SE^OgSYUgP#{s^5m8cYpLK{1SCxY=ZJEA zdv>hV2EOP^VA~L8loHM$!_*TD?SKMw@n^KEo{>I&4B(4?qT0NhxP3-kk)4m+?%tVe zm2VC_c{0jQtFNd%=8sM^WHUVtf(U@fctZ@Df|K(y>8v}kN#A@ zNe3@Wy`dPq+NF?%LZ`b$-j+2&7I)(qr!{tP3L2}8z)$$iaC@va%S!-)K@V_cgH;95 zva_1t)hq*vuljK~NZbv#;o~+F_{H>@=P-SRc?>@9R8zq{jX%6h5(*vj7j3Zzvq(Jg zzfNN;zCBj2e4a_X*P<2Q?=%0Gt`F`-=CpMI?U3wghg7*B8EdhCA6_VhR1?RFBi& za}_AT(GauLs6N14j&w{$`$QqpNg2#}m&9Q+x5?G6Q=I7+kLB2 zA4((vlS?y zX3!_cT~-#_2fJ|lh}I+2oX4UMnK*}B6Pl5!Tt8EM*d_>Wc)v_(H__BUnmq#@-&Lj) z6z^E6rsEe=zW6shr+&i}NsgJyI#Qys=mAXynipM?k4 z3^Psvci%aM_P&K%kH1llTk!tKT%e&y*btvtxByi8oT(GeXotw|OT^UhxIFw9dmF0zQZDaz$xSN|&r27%7Kh}s zw2pt$0`}3gRwFyTV#O{ty&Z(!wc1#MOHo!KtytCkg)_~+(OC4;=6)r35R>WaLEmH% zC$6vUD~HJ{{YpO1sW@X6HzW5CLY}a0E5>`JK8DeB<8!!vy(w``f$H{r$#{&>!~I2~ zY?8lreg6+ccF>%S&oCbGR3y zBH8cb;ToA?}Y6Kqy8uW zaHYNDL>tV|zH5xGKhUqA8Sx9$?QNLWlG@k@(f#GU=CNCYoG?LA+aDb?6f{K$V~p7< zZR0X1#90yLwAXZFV!%YDlOA1!kB*l4rK@R;h7W|QQAR}?_cO^?!Gkj~-WK^0LZ=eC zcuV>5Lh*I)#)*VSue;i>4>EeyYI^J#wliR76{P`#s!K#!F2*n;6m(7H!k4?zQ?yZ! z7^})v%SO;FsAmJJiivY`*?ojvJ7Qb?ko|1-Vu=QH4>K$KL^&mtrcPW<2zNTEMfm2} zC~65r7-cGGz!%B)MmjsVAO-4|21X82Qz7m6rYf`AabGMAlYa9JzNQLKMW28~oj{W} zT5^GH_yz#68hmmmfz8tN@Jx2i#xPs#YUPcXyr*eOcMbSLeq(spZ;w2TO z!gbg8y&$+tF-^GxV4far7fsTV^3%q6*RzGpgkt4gKhRzUChV^9v@)ZBv_WbpKn|Z! z7&qDQ%W-r3V!@GSN72F?xF6FqMaSo}YqKT`a(Ov8`!C$zu#)?j$#QZx%55yhzbmQ; z{9i365r~NPh(OIe?2!UZz_+_~&<4ZE-KxSNadto?$+ME1^BzzzSYsuvc3$9O_f^rF z&lF?@7+_lBE9G?kH?sR;I6%j_hjYwN^NG8 znFP4Qi{iGd(VYtz9VLe9$rYbKdU9T@?%oDKJjp053~WlmNCURw_JYCtzsVfcOP;n6 zRvu8{Eg}Z#;NQlq|3(a$BeGcqUX!?ZJ(zof)k+uX{7ch^cxj&IhahSkyE}|S?CUhwgLYU)hxI8Umh?lVFz@160O>dxwU)9ZJcX_U~xIVMq<5Rm8}ErKu8`7;e5 zMet4SNC2~G_g&&h(u;yO-82a~az(17o-aP~w;sG|X8B?$+sXPq&4fhsc9za0*7Pce z(D~gW5~iF#sSZ)wP5>y3qdv+*G%Ri5Kcgi_W|QfDNh~ai8VQa*nH}wWpf6qYcyP?~ zMcFz@i^Xm&@917}zirdP&%)q9aX38|OM6>NNqMKT)G2Lu(6n1|+;5@}Xb0WWN4vR} zVjbTFE<*0_FjE;^y&zj@X9l)-!!M5bDn1$d{Yol&?uvm;b!O_uIg~%vzuiUL?`PIH z*_FwEi;A%DIm;tLbttmoGt1z;4N9<8ejid#z6->yD_^9$)@h2iv6Ej!fgkmp?80LI zroTIJokEPaARGo5s!`fhvAvg`F!2R%oqzB|zG%X4y)IEEWP-qx4?@!!EZd76CTGje zf68=&z~dDD(fI{KzM3+}(l~QSXmhfLuyf8BKE#4K>jz7}Jwg5#IUyeoe6u4FI6i-$ zti7VIqQ=`RC(M`g2rC6jFL@fgj@nRk3pZgOiw)2KAlR~{a<2Yg!t65`&~iJD*Oq1# z4in2~81}H>%se|8tHDoI-3}aVp|%fiGEM; zkUxX>UrH-XIEfjK{mzV4uk~;*mPKwT{5-lDpu?sUbK{H3W43J@0=%#~RrI|FD z4;Hk*$lMY6mqnR&hx7XZ3ptUzIz+H9DtafoHtp8|sBhBXSJGP8t<_Q100<+i;zc*Z4 z>??={1Fgc7&dNr5O>}LRZzBvU^*KlhL8D)pACdqktU911zK&Fc#bjmOY?B-stevoq**i1QkZH)892+JsY< z2bzi}xYd1TfEVAc4xCFU#@Gd4XAAy_eD2_UP;?C&{pPatH}&H$oPI(`h$Uj|VDtt9 zT5}9Xk=8P%3nORIN4u-Zzu_Tr*9-bvz>5i1YJD&qblbCDqhz{<5X;VsZ>)@E+4N z^cN*>m)F4o+)E$rTJg7k6-lFFAdJm13tMeWI(*4vMdMN=>E)d^+{(X21NoBklw+Ra z%VIMi)>uj&|1YgF-YS?HqOr)k%eKcwdYgNx zgp&9KjM`e6rh8VgAegugpxqXMATfJJ+*?YOJ1CHk&=U7+!ofRCyaJIu`Gs*FogQJ( zeR^Z<>y{!v@xgKM#G9f5{FBiZ+{Yxbz6TR2G%Kx8(V4_@4sqx@tQBInd;m*XW zQ)(gVLM!@}2aNT}g1RZKxH<1kxp>-9fBjYH{pInpfd8qtI-T{=!d9xW!d`Gk)LcU8 zehB?HVp`8^3q(B_jfT&FQ#LPCooy-KMLzY~ta+HGorWKHZ}>E>sH3d@l+03XHFuz#Y5jXOaD`c ztu_r7Uf6(A2sJkhPc#(@uZvTZ-7gg&Dld>uFIKlGKLwS}f&W05Va1YTgEsArtRLG7-&ZH~#& z@)UywAzEev9Rk3+4{bXeB)@0CIo(2Tk7?`$G%KNM?=%rLAPyq?5%ja%YRA7))Q17* z0--N}VLd{c-C(-l<~D7jz#X*t!r0QAAgi}_NFm`PeV?iCi!qZs(P@0K%M9?zzx7Xm z<0EC^WyszGHNiVsnh#?n#%!(1bZ8$Iq@26C(6>)n2-x}K!N10eO{!)nI1HKngZnyg ztmHqgF2O*ae}}x?H4dMqEXfs%IvaFAoYp}&KP;@6A@{h{Sf@2S$_E1`m&j&+TyLU+)*vGa!OoS~A*aAW)!Y2`o4D0;nf z(?Z0)hC9nF9-?Xt<#`5DxTr`$1a9Erek#dyIod*cF|-K?)p zbm?yR$)M2WW=&mM+(&p)jVMM-bmr)emxJ!O+{~a$+f1(%`H!LFQZdj{?+la`j*+g1 z+qC?~CG5?hX@}Iz#PvY-3rjd&4XB+b{H7^EvR_ly92NaaJl(qPchclo;A%-Duj3dy zu9+O|t$&k-0~56#fxl1= ztj+RL!$N!g-jE>mjUwK7vR6u#^qajT)IEl;Pb8>zKTI7Q;Fc~%z3rW6X zs348_bL7W?-)Pd*0KWdjq-fKz>R8j}Mv&EU@y13;UDZKiH+F)(Vdm_@Ke;NT>#phi z-&$*Y!x$2=`4-N5rzl!&`2o5&9;-#v1EG=w_~1Vb1edxIM&F9jolvr+vK@|Nlln@A ze{kNc%1YF6^s`dMzEYQVd`jf6*ZwaaIQAM;U=A_|)~;bC{H9sIK)H9nrk#RJbIex$ zWJe6&Bsgu67M9q_LiUVs8n(in)kZJq(*gMP4otg-+~jPV;s=F4jWsq{#vG@iD?_y7 zuYj)YT@e!?SiAql+vQ+-c#lb!O}IBB)(Ec!EIq0qyhR;uxy_zJSiN8Iz40k?Ad|PIyr7yZbdg~b=8rYl^rlcEznFKHR4Yq-X zH-SM~jk4Mg9Ry06R;`D73*Z}+S;VyH)(6xrhAlR~5jlFz6m7zy2DZv?T_^V)Cp<|+ zwnxd2QjSEu6u?L ze@v6~mF-@x%Bf-}Rj3lJnzL_Kp(`CELb&n{ck_JFBK0mP_*e4{{N+bD87&}Cee@^5 zWo=`|SBayOFb&b*=1^wD;U^EUSp~Sg??e^T)fPe1#K>w_xRHqqYqPE1&qC)Ja6YJb zyR9*AqK`3RP!{Uuo2GFL!gwn`U`87LU==qvX)QSRNGZJ5|~GLn(OLcIP;fP19~9m)(G-DKlqE`qg=l*y#Q- z5+xC7Gdm&j=^aqmlPacl8|q!4`_~j{6>p^){q|ZI{8LQl#;v|Vj!EGjh)S{C#_)(v z%A(KNK^ttK#}+sh(Kn}sI_H5bUD>(-6)kR8l8h!%4aE$p;>z!+j=zf&Nk z_c7zM7EF606h!toaf#|gfz`S)0DsV@{qMLcj12o-cf$#8@t4<*?S$fY1*&1Yc)!RA za9lC|u@i|;yHMklIkmBtK4*d!kBe`LOm}X0Z(}{qDk#Ztw^r-n1O#k>+^oE~G|Jl~ zvCnsqKZmEgyScYwYHDD#b3zM zfoMCfuZ7^p(whmBEcN@9e&3|(MoRfYZqP2P6SXlmxrkS;c(V=@?VShUDU&71>T24@ z+|>b5{kHsBlxKm0MEna5wzK=AJ^+TFLK5xtg|Uqq~*AV@W~d}u9=!O%>7~Dvr6d)S>HL=6_T)`VW$05 z-C663aR!P@H!EG)_3vm&xp;8SYenfsw282W-`J!c->$Gak6Jj5v!rj5o0OxZ37+Pb z&XTfhzW5O^M>@Vk2i1E#!Gm$1Wm3MnA6KyxK=&+OT#d;$Al@M&cq?~9$W=D1Oo8?+1i=g13S}hk|&a8dxGyl<6k+c7>^fHr1=2F6VO)DVPGHRxRJ1>&Cp2S~4p-d^QGG=?j z`8Nm+KjgBaD?VRLz9a zzFxplwyG;j$M0Q)j_UD%qI$WzU)WFvuUr8ghT6Wv5--*N9w$wt(@xwEUb=^D-bxOl zGk_W1cSe1L<{qXU0=G3w=x|Q7Y-=-)vJ8=r;A2Q!p_zDpABGagfw!>I%To-|7SAO4 z36&qyv(ib684pW3$O{;&JVgteM2H<%jC<=J7|9UeKXz&?tu!7kBCz3DEBmPt&{Iyg zBzFN_LbSGtuwySKoeM-Agxz-NDNqnv#`d~HxP72Zs~cu48TiGBKN+AOSTDZ`eoGDn zjyq2>6x~zESy)D45ydUtSi!75hGy{_*EZu^>IvQ@72~zRxNo-b$&M@n#|-a}DLVd( zF;Qa}v1>DvmbwC9b7Ivf>2;LsLWxDxmFF~F7@YFTtSP@}+O!)=bP(HkNqE6=hFMFn z7JH+3zM#Pd4t3teoO+Dvvyy8sUW*7gN^8E?7G4^ZN+%5Y`MP3JNEA=A+?Y&Gz7KX` z15)bM0%#$6qU-1giH_6$X^xsN zbaQJmV?Q|i^YrPavo*|dwBCx6%W$}*D8~$}DpDaCB zXEhmMB&MNi2NqXh+US}riaI4#dL+G=b)L;TU08NCP;U+AO`|#XX_vEWELi$QR^_0d zCLi>g*jSLQ?%1S!X$~6wNm*&7dLeT094rlWdx6^Lk4sm6FH&xL_HH`5&N{$NwG)UN z%2eD50g_0id%X1KK6auu0LYmC7nina%}O^(qYFJ{-rjXlgi|s$kL|R6xBbZ|WJQRY zx+HE`AO1j#E8PAOJOo;~4qJ;hd}QfYLvK+4%TD5cIvWuAJzHc!K*uny-6S~py=eP{ zI8U1yJ4yv*jJu%mC=rmdb&87|pz-;_^YR!B7 z+wUCrLt-i}ZYG|-26WD#Mg!GymPFiEI>%Mv6JZ4VMOm0n}gZJvYFY>h3zqxu)OlDWCr1 z02I${>3|(Bml?rop4bXxzJ|WPp#G_Y250X1*tkhFZ7lU|&sfRi8_($Y=%hZ}vHj+j z3A?b;Xm+ooTpH=as{cpog0d~;PcqY$UaGnogZm$WIiA6TtYNMSX-G4W{r^YX`9U*1 zzh}5Pta;AqCaY7fLsjpWD{! z;*v+G+vN3oL8GUI8Ztm$4$QEf(Dfg}{Fh($Lavb@0qY!BG+YApD|#skt)-)6JZNE! z{^0a`BC=3q=?>Bkyobb^a1K1Lo9>WTnZ}Up@>B(nZreCnw2_|pXMoyL1{YHWJ4NyK znTy=r1Pk<*AC>Prf0F31^g(7}-b5e^lo$Qr#6JmaZr(=W>q)Mn^vuH9`Jzos`9*$Y zd#r~nKWevgtE=4AOj^$)1*y-hQ#T5>$^`=O$L(ucj#iG=od@;tOMyFDNLbOd@X6V z+|-ENa1fm0i?Zn|GxPx_Oez=A@sdphyXpG7msKBe8=2j^(g^=Wq5r-=fUekYj(W9R zpF^!)x~NaUj++@H`9t$eD7UxBn<;1vvN-;SD9F;3iL-ctne-6xolx?Q;k-ZgBsjBQ z`nApW?a(4qPJY$wRT%MVV%|SD6_RQ^!!IDx36!+ti<)tNEkq_|D$~Bb4u_l8OGg<` zeHh6@NEn&ooL;7Fu;|8qd1lVF7?P4D^fwO}Z5^TRTa`zxR1eH!#HCm85pk5nh9Lbw zzNw5IrJn<{)^l$(y3G32ZK~1(}P>?SRn-0QbLdHJ5mB zBm#9d(TYB^^fU-+SldqSK%?rkL!tF$I6G2VM~d`}0a&$Tt$zJDld3Jn@0kL!iTgt3 zV~p6;4t>@|)GifuXIwqNszl7tvRuX3a2M_bM|92`y}Mcb(xLGX;e)gK(b#MMuQYQ0 zWzq$IQE^an?lRnem$av8bt}Fy24>1u!!eV%7X!r);sRFZ@4)B4+nJ)xiB=aup4-Co z=V!ypkZ6g#IXEbCz!JEEj&A&)Uu`KrKy(E_$D@?e@9O2U=(-CN;JTC3JGgt^o zZKi{VB%GR;hsf5Eyq<_(sfIwaO}r{snXhDmcp?phkFGO*9&b9A#6n-PVfR%cOK9Su zmuW>$p3o<_)%rM#iYAB0jo$err0Go1Z<15u8r7qO zoWB6K>FeWKmuYcJh!(T7wOS+e4!V?+>)*gKAx0z z^r7lol%R~mJ zESk0lvPQ1ZbG_Ue0}x=dll9^{vs8~u$QOrzYP%({^`Z6;6caml;9{g@x&o4*EEK)H z5^HfJ>UG6s4dP&x#S;a#EBU0cfz&q_KU)-Q3;+>tHxmL>(;dwmnTDBn)~EN3bf=i6 z3hv_NW=mvZNi4MrIp%sRLtGjdD*=MWz6Z@olme|AA7RK)`Cj^F*fU2ZA$zm~1bQ;qm{;n z)!FNLZmA~3zdjQ8k|)oB*q`CIgc%Ikcc{9ScTR>qJGayX3O(-o4JC}xl8`(4NX)R0 zIG8H{Y(jE^DJXE0)eldw^5sk>6S>C#XIujga zIEQ9aw`+W(NNpKk6~J$9X7m5VubJF?571+28N&=8EAdx_3{h==6sd7`K8IE6Us8iN zg3Kpv7s=qTMH6m=)o#CnnO+*T|B4XVW_k}rDpl@m2Bnns+vhmx@?l{fNx?zOz=r~kXF(P1k;s|rT@V#_SQ|>{E|+o;m|K(a4Mg#cS_gF zHNzC^IhbLOdtITjmFjN$uj2%+kDk6cdhjIs{YQyp`gg|e1K^ zGPE(f(Dz}w60FU`U_I`;S%F9%Ap4HcFF9J2pAl=OnChCz+ZRR4ny?Z!zAuB^_ZKZ9 z)HNYhGZZ42Yu5PLWZ)(@hzc~XGqf8)N2_8#H@MCQTq{KKOJF=StZpIfPOW62pRbcC zRPC?I+QTmtr3+|f0d0iiHmZHm#*=!$yXUgNTeKXafeQ{P@dsZ-og}{s6phYX%5?X~!MS%h({Rr@{d^Lp0}+U$h^OE8}1kbdh9pb)g(P-ZgFv<3FY1+&VySX58c?@>vbkHR`y zT4CO0-ah}fLAUyq_%lmcwIh)IQPXfq$1ip4{{nW-uC&sF&{>8Ss@W?F+7B*tFLnCO zGsQ$+U7Pt1Zqg1Y_%A>;QuVW}Z&+Om5`Wq?%IGYM)vDqU$yK3DB0aUUmlgzwdATWJTh z#JL}ojvvZQt@uSAX3qWBxOYY4sm5xeoDUE-=6D_0MR*N=ovU$m1gE&tb;4B}tA*6=7-s;@FBdP;*FNbg>f6yxofXTf^)J zfy2wtzSRcWocr4KpMiaXYw0Cy{wDfj?*>$K>e~{T=R09Tf$CJ5G8;m&vt^5mnN5f7 z`D8eOy5B}xSeGVe1EGs+usU~18h*omvpCwCtv|+o$2S7z(OiX*qLqtX3QW{y1sxG@wAD)?8)tMx2~O zXh7uP>|JIwVH!8|2u6z= zUuJb@tfc23o!Oxcz%q4(bh-eE?j3f9Gk4?o9>hShU<*RSQjHK#W*z3ggS4 zMgh`y9ba9g@vXwW^hGtbS4sYV5x3`!X?8ecCGJ*o9zM|JJvlB>cdh4RRLV4oSl@=rc^Tza3{|g|ZnL*N zVf=HHy9!7ADAc*e)xygYqWoT!bd)RMVc`~E`lEc3e_xgeC%?Ia@@j+ZnZ@#a{y3s9 zEKjfe%&9XHuG=-vBON~`>U52RiURDoSwt^;Tt)HO}#ry4pZnZ(k1}1)R4< zSpfm`JO>&2_Rh6yMku57u@>=mPZ576Um5_ATRyzO(ZF_0+!fjXh6D74&ovU=wJI*< z0Q7=nEOQ-19ik<#mMM#Q0+5TbSY$NJ6B-V=YfnPqAO4^?XJgMY;xTSD@2~^h_!m5T zc^R!HSI6d;{$+AoBl<(HNkpSPha0nH)x(TS`|%0AEfv11kVzVTXxjnp-}q>x?R}t5 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

    }UY} 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%0D(8()$@DT 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