1
0
mirror of https://github.com/SquidDev-CC/CC-Tweaked synced 2025-07-04 11:02:54 +00:00

Merge branch 'mc-1.19.x' into mc-1.20.x

This commit is contained in:
Jonathan Coates 2023-08-05 10:36:37 +01:00
commit e6bc1e4e27
No known key found for this signature in database
GPG Key ID: B9E431FF07C98D06
102 changed files with 2272 additions and 1195 deletions

View File

@ -48,6 +48,7 @@ License: MPL-2.0
Files: Files:
doc/logo.png doc/logo.png
doc/logo-darkmode.png
projects/common/src/main/resources/assets/computercraft/models/* projects/common/src/main/resources/assets/computercraft/models/*
projects/common/src/main/resources/assets/computercraft/textures/* projects/common/src/main/resources/assets/computercraft/textures/*
projects/common/src/main/resources/pack.mcmeta projects/common/src/main/resources/pack.mcmeta

View File

@ -4,7 +4,12 @@ SPDX-FileCopyrightText: 2017 The CC: Tweaked Developers
SPDX-License-Identifier: MPL-2.0 SPDX-License-Identifier: MPL-2.0
--> -->
# ![CC: Tweaked](doc/logo.png) <picture>
<source media="(prefers-color-scheme: dark)" srcset="./doc/logo-darkmode.png">
<source media="(prefers-color-scheme: light)" srcset="./doc/logo.png">
<img alt="CC: Tweaked" src="./doc/logo.png">
</picture>
[![Current build status](https://github.com/cc-tweaked/CC-Tweaked/workflows/Build/badge.svg)](https://github.com/cc-tweaked/CC-Tweaked/actions "Current build status") [![Current build status](https://github.com/cc-tweaked/CC-Tweaked/workflows/Build/badge.svg)](https://github.com/cc-tweaked/CC-Tweaked/actions "Current build status")
[![Download CC: Tweaked on CurseForge](https://img.shields.io/static/v1?label=Download&message=CC:%20Tweaked&color=E04E14&logoColor=E04E14&logo=CurseForge)][CurseForge] [![Download CC: Tweaked on CurseForge](https://img.shields.io/static/v1?label=Download&message=CC:%20Tweaked&color=E04E14&logoColor=E04E14&logo=CurseForge)][CurseForge]
[![Download CC: Tweaked on Modrinth](https://img.shields.io/static/v1?label=Download&color=00AF5C&logoColor=00AF5C&logo=Modrinth&message=CC:%20Tweaked)][Modrinth] [![Download CC: Tweaked on Modrinth](https://img.shields.io/static/v1?label=Download&color=00AF5C&logoColor=00AF5C&logo=Modrinth&message=CC:%20Tweaked)][Modrinth]
@ -44,7 +49,7 @@ repositories {
dependencies { dependencies {
// Vanilla (i.e. for multi-loader systems) // Vanilla (i.e. for multi-loader systems)
compileOnly("cc.tweaked:cc-tweaked-$mcVersion-common-api") compileOnly("cc.tweaked:cc-tweaked-$mcVersion-common-api:$cctVersion")
// Forge Gradle // Forge Gradle
compileOnly("cc.tweaked:cc-tweaked-$mcVersion-core-api:$cctVersion") compileOnly("cc.tweaked:cc-tweaked-$mcVersion-core-api:$cctVersion")
@ -57,6 +62,19 @@ dependencies {
} }
``` ```
When using ForgeGradle, you may also need to add the following:
```groovy
minecraft {
runs {
configureEach {
property 'mixin.env.remapRefMap', 'true'
property 'mixin.env.refMapRemappingFile', "${buildDir}/createSrgToMcp/output.srg"
}
}
}
```
You should also be careful to only use classes within the `dan200.computercraft.api` package. Non-API classes are You should also be careful to only use classes within the `dan200.computercraft.api` package. Non-API classes are
subject to change at any point. If you depend on functionality outside the API, file an issue, and we can look into subject to change at any point. If you depend on functionality outside the API, file an issue, and we can look into
exposing more features. exposing more features.

View File

@ -4,6 +4,7 @@
package cc.tweaked.gradle package cc.tweaked.gradle
import net.minecraftforge.gradle.common.util.RunConfig
import org.gradle.api.GradleException import org.gradle.api.GradleException
import org.gradle.api.file.FileSystemOperations import org.gradle.api.file.FileSystemOperations
import org.gradle.api.invocation.Gradle import org.gradle.api.invocation.Gradle
@ -53,6 +54,25 @@ abstract class ClientJavaExec : JavaExec() {
@get:OutputFile @get:OutputFile
val testResults = project.layout.buildDirectory.file("test-results/$name.xml") val testResults = project.layout.buildDirectory.file("test-results/$name.xml")
private fun setTestProperties() {
if (!clientDebug) systemProperty("cctest.client", "")
if (renderdoc) environment("LD_PRELOAD", "/usr/lib/librenderdoc.so")
systemProperty("cctest.gametest-report", testResults.get().asFile.absoluteFile)
workingDir(project.buildDir.resolve("gametest").resolve(name))
}
init {
setTestProperties()
}
/**
* Set this task to run a given [RunConfig].
*/
fun setRunConfig(config: RunConfig) {
(this as JavaExec).setRunConfig(config)
setTestProperties() // setRunConfig may clobber some properties, ensure everything is set.
}
/** /**
* Copy configuration from a task with the given name. * Copy configuration from a task with the given name.
*/ */
@ -64,11 +84,7 @@ abstract class ClientJavaExec : JavaExec() {
fun copyFrom(task: JavaExec) { fun copyFrom(task: JavaExec) {
for (dep in task.dependsOn) dependsOn(dep) for (dep in task.dependsOn) dependsOn(dep)
task.copyToFull(this) task.copyToFull(this)
setTestProperties() // copyToFull may clobber some properties, ensure everything is set.
if (!clientDebug) systemProperty("cctest.client", "")
if (renderdoc) environment("LD_PRELOAD", "/usr/lib/librenderdoc.so")
systemProperty("cctest.gametest-report", testResults.get().asFile.absoluteFile)
workingDir(project.buildDir.resolve("gametest").resolve(name))
} }
/** /**

BIN
doc/logo-darkmode.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@ -7,13 +7,13 @@
# Minecraft # Minecraft
# MC version is specified in gradle.properties, as we need that in settings.gradle. # MC version is specified in gradle.properties, as we need that in settings.gradle.
# Remember to update corresponding versions in fabric.mod.json/mods.toml # Remember to update corresponding versions in fabric.mod.json/mods.toml
fabric-api = "0.83.1+1.20.1" fabric-api = "0.86.1+1.20.1"
fabric-loader = "0.14.21" fabric-loader = "0.14.21"
forge = "47.1.0" forge = "47.1.0"
forgeSpi = "6.0.0" forgeSpi = "6.0.0"
mixin = "0.8.5" mixin = "0.8.5"
parchment = "2023.03.12" parchment = "2023.06.26"
parchmentMc = "1.19.3" parchmentMc = "1.19.4"
# Normal dependencies # Normal dependencies
asm = "9.3" asm = "9.3"

View File

@ -11,10 +11,13 @@ import dan200.computercraft.api.turtle.ITurtleUpgrade;
import dan200.computercraft.api.turtle.TurtleSide; import dan200.computercraft.api.turtle.TurtleSide;
import dan200.computercraft.api.turtle.TurtleUpgradeSerialiser; import dan200.computercraft.api.turtle.TurtleUpgradeSerialiser;
import net.minecraft.client.resources.model.ModelResourceLocation; import net.minecraft.client.resources.model.ModelResourceLocation;
import net.minecraft.client.resources.model.UnbakedModel;
import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.CompoundTag;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import java.util.Collection;
import java.util.List;
/** /**
* Provides models for a {@link ITurtleUpgrade}. * Provides models for a {@link ITurtleUpgrade}.
@ -50,9 +53,24 @@ public interface TurtleUpgradeModeller<T extends ITurtleUpgrade> {
return getModel(upgrade, (ITurtleAccess) null, side); return getModel(upgrade, (ITurtleAccess) null, side);
} }
/** /**
* A basic {@link TurtleUpgradeModeller} which renders using the upgrade's {@linkplain ITurtleUpgrade#getCraftingItem() * Get a list of models that this turtle modeller depends on.
* crafting item}. * <p>
* Models included in this list will be loaded and baked alongside item and block models, and so may be referenced
* by {@link TransformedModel#of(ResourceLocation)}. You do not need to override this method if you will load models
* by other means.
*
* @return A list of models that this modeller depends on.
* @see UnbakedModel#getDependencies()
*/
default Collection<ResourceLocation> getDependencies() {
return List.of();
}
/**
* A basic {@link TurtleUpgradeModeller} which renders using the upgrade's {@linkplain ITurtleUpgrade#getUpgradeItem(CompoundTag)}
* upgrade item}.
* <p> * <p>
* This uses appropriate transformations for "flat" items, namely those extending the {@literal minecraft:item/generated} * This uses appropriate transformations for "flat" items, namely those extending the {@literal minecraft:item/generated}
* model type. It will not appear correct for 3D models with additional depth, such as blocks. * model type. It will not appear correct for 3D models with additional depth, such as blocks.
@ -62,7 +80,7 @@ public interface TurtleUpgradeModeller<T extends ITurtleUpgrade> {
*/ */
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
static <T extends ITurtleUpgrade> TurtleUpgradeModeller<T> flatItem() { static <T extends ITurtleUpgrade> TurtleUpgradeModeller<T> flatItem() {
return (TurtleUpgradeModeller<T>) TurtleUpgradeModellers.FLAT_ITEM; return (TurtleUpgradeModeller<T>) TurtleUpgradeModellers.UPGRADE_ITEM;
} }
/** /**
@ -74,7 +92,8 @@ public interface TurtleUpgradeModeller<T extends ITurtleUpgrade> {
* @return The constructed modeller. * @return The constructed modeller.
*/ */
static <T extends ITurtleUpgrade> TurtleUpgradeModeller<T> sided(ModelResourceLocation left, ModelResourceLocation right) { static <T extends ITurtleUpgrade> TurtleUpgradeModeller<T> sided(ModelResourceLocation left, ModelResourceLocation right) {
return (upgrade, turtle, side) -> TransformedModel.of(side == TurtleSide.LEFT ? left : right); // TODO(1.21.0): Remove this.
return sided((ResourceLocation) left, right);
} }
/** /**
@ -86,6 +105,16 @@ public interface TurtleUpgradeModeller<T extends ITurtleUpgrade> {
* @return The constructed modeller. * @return The constructed modeller.
*/ */
static <T extends ITurtleUpgrade> TurtleUpgradeModeller<T> sided(ResourceLocation left, ResourceLocation right) { static <T extends ITurtleUpgrade> TurtleUpgradeModeller<T> sided(ResourceLocation left, ResourceLocation right) {
return (upgrade, turtle, side) -> TransformedModel.of(side == TurtleSide.LEFT ? left : right); return new TurtleUpgradeModeller<>() {
@Override
public TransformedModel getModel(T upgrade, @Nullable ITurtleAccess turtle, TurtleSide side) {
return TransformedModel.of(side == TurtleSide.LEFT ? left : right);
}
@Override
public Collection<ResourceLocation> getDependencies() {
return List.of(left, right);
}
};
} }
} }

View File

@ -6,13 +6,20 @@ package dan200.computercraft.api.client.turtle;
import com.mojang.math.Transformation; import com.mojang.math.Transformation;
import dan200.computercraft.api.client.TransformedModel; import dan200.computercraft.api.client.TransformedModel;
import dan200.computercraft.api.turtle.ITurtleAccess;
import dan200.computercraft.api.turtle.ITurtleUpgrade; import dan200.computercraft.api.turtle.ITurtleUpgrade;
import dan200.computercraft.api.turtle.TurtleSide; import dan200.computercraft.api.turtle.TurtleSide;
import dan200.computercraft.impl.client.ClientPlatformHelper;
import net.minecraft.client.Minecraft;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.world.item.ItemStack;
import org.joml.Matrix4f; import org.joml.Matrix4f;
import javax.annotation.Nullable;
class TurtleUpgradeModellers { class TurtleUpgradeModellers {
private static final Transformation leftTransform = getMatrixFor(-0.40625f); private static final Transformation leftTransform = getMatrixFor(-0.4065f);
private static final Transformation rightTransform = getMatrixFor(0.40625f); private static final Transformation rightTransform = getMatrixFor(0.4065f);
private static Transformation getMatrixFor(float offset) { private static Transformation getMatrixFor(float offset) {
var matrix = new Matrix4f(); var matrix = new Matrix4f();
@ -26,6 +33,23 @@ class TurtleUpgradeModellers {
return new Transformation(matrix); return new Transformation(matrix);
} }
static final TurtleUpgradeModeller<ITurtleUpgrade> FLAT_ITEM = (upgrade, turtle, side) -> static final TurtleUpgradeModeller<ITurtleUpgrade> UPGRADE_ITEM = new UpgradeItemModeller();
TransformedModel.of(upgrade.getCraftingItem(), side == TurtleSide.LEFT ? leftTransform : rightTransform);
private static class UpgradeItemModeller implements TurtleUpgradeModeller<ITurtleUpgrade> {
@Override
public TransformedModel getModel(ITurtleUpgrade upgrade, @Nullable ITurtleAccess turtle, TurtleSide side) {
return getModel(turtle == null ? upgrade.getCraftingItem() : upgrade.getUpgradeItem(turtle.getUpgradeNBTData(side)), side);
}
@Override
public TransformedModel getModel(ITurtleUpgrade upgrade, CompoundTag data, TurtleSide side) {
return getModel(upgrade.getUpgradeItem(data), side);
}
private TransformedModel getModel(ItemStack stack, TurtleSide side) {
var model = Minecraft.getInstance().getItemRenderer().getItemModelShaper().getItemModel(stack);
if (stack.hasFoil()) model = ClientPlatformHelper.get().createdFoiledModel(model);
return new TransformedModel(model, side == TurtleSide.LEFT ? leftTransform : rightTransform);
}
}
} }

View File

@ -5,6 +5,7 @@
package dan200.computercraft.impl.client; package dan200.computercraft.impl.client;
import dan200.computercraft.impl.Services; import dan200.computercraft.impl.Services;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.client.resources.model.BakedModel; import net.minecraft.client.resources.model.BakedModel;
import net.minecraft.client.resources.model.ModelManager; import net.minecraft.client.resources.model.ModelManager;
import net.minecraft.client.resources.model.ModelResourceLocation; import net.minecraft.client.resources.model.ModelResourceLocation;
@ -24,6 +25,15 @@ public interface ClientPlatformHelper {
*/ */
BakedModel getModel(ModelManager manager, ResourceLocation location); BakedModel getModel(ModelManager manager, ResourceLocation location);
/**
* Wrap this model in a version which renders a foil/enchantment glint.
*
* @param model The model to wrap.
* @return The wrapped model.
* @see RenderType#glint()
*/
BakedModel createdFoiledModel(BakedModel model);
static ClientPlatformHelper get() { static ClientPlatformHelper get() {
var instance = Instance.INSTANCE; var instance = Instance.INSTANCE;
return instance == null ? Services.raise(ClientPlatformHelper.class, Instance.ERROR) : instance; return instance == null ? Services.raise(ClientPlatformHelper.class, Instance.ERROR) : instance;

View File

@ -35,6 +35,7 @@ public enum TurtleToolDurability implements StringRepresentable {
/** /**
* The codec which may be used for serialising/deserialising {@link TurtleToolDurability}s. * The codec which may be used for serialising/deserialising {@link TurtleToolDurability}s.
*/ */
@SuppressWarnings("deprecation")
public static final StringRepresentable.EnumCodec<TurtleToolDurability> CODEC = StringRepresentable.fromEnum(TurtleToolDurability::values); public static final StringRepresentable.EnumCodec<TurtleToolDurability> CODEC = StringRepresentable.fromEnum(TurtleToolDurability::values);
TurtleToolDurability(String serialisedName) { TurtleToolDurability(String serialisedName) {

View File

@ -13,6 +13,7 @@ import dan200.computercraft.client.render.RenderTypes;
import dan200.computercraft.client.render.TurtleBlockEntityRenderer; import dan200.computercraft.client.render.TurtleBlockEntityRenderer;
import dan200.computercraft.client.render.monitor.MonitorBlockEntityRenderer; import dan200.computercraft.client.render.monitor.MonitorBlockEntityRenderer;
import dan200.computercraft.client.turtle.TurtleModemModeller; import dan200.computercraft.client.turtle.TurtleModemModeller;
import dan200.computercraft.client.turtle.TurtleUpgradeModellers;
import dan200.computercraft.core.util.Colour; import dan200.computercraft.core.util.Colour;
import dan200.computercraft.shared.ModRegistry; import dan200.computercraft.shared.ModRegistry;
import dan200.computercraft.shared.common.IColouredItem; import dan200.computercraft.shared.common.IColouredItem;
@ -107,24 +108,6 @@ public final class ClientRegistry {
} }
private static final String[] EXTRA_MODELS = new String[]{ private static final String[] EXTRA_MODELS = new String[]{
// Turtle upgrades
"block/turtle_modem_normal_off_left",
"block/turtle_modem_normal_on_left",
"block/turtle_modem_normal_off_right",
"block/turtle_modem_normal_on_right",
"block/turtle_modem_advanced_off_left",
"block/turtle_modem_advanced_on_left",
"block/turtle_modem_advanced_off_right",
"block/turtle_modem_advanced_on_right",
"block/turtle_crafting_table_left",
"block/turtle_crafting_table_right",
"block/turtle_speaker_left",
"block/turtle_speaker_right",
// Turtle block renderer
"block/turtle_colour", "block/turtle_colour",
"block/turtle_elf_overlay", "block/turtle_elf_overlay",
"block/turtle_rainbow_overlay", "block/turtle_rainbow_overlay",
@ -133,6 +116,7 @@ public final class ClientRegistry {
public static void registerExtraModels(Consumer<ResourceLocation> register) { public static void registerExtraModels(Consumer<ResourceLocation> register) {
for (var model : EXTRA_MODELS) register.accept(new ResourceLocation(ComputerCraftAPI.MOD_ID, model)); for (var model : EXTRA_MODELS) register.accept(new ResourceLocation(ComputerCraftAPI.MOD_ID, model));
TurtleUpgradeModellers.getDependencies().forEach(register);
} }
public static void registerItemColours(BiConsumer<ItemColor, ItemLike> register) { public static void registerItemColours(BiConsumer<ItemColor, ItemLike> register) {

View File

@ -67,14 +67,11 @@ public class DynamicImageButton extends Button {
graphics.blit(texture, getX(), getY(), xTexStart.getAsInt(), yTex, width, height, textureWidth, textureHeight); graphics.blit(texture, getX(), getY(), xTexStart.getAsInt(), yTex, width, height, textureWidth, textureHeight);
} }
@Override
public Component getMessage() {
return message.get().message;
}
@Override @Override
public void render(GuiGraphics graphics, int mouseX, int mouseY, float partialTicks) { public void render(GuiGraphics graphics, int mouseX, int mouseY, float partialTicks) {
setTooltip(message.get().tooltip()); var message = this.message.get();
setMessage(message.message());
setTooltip(message.tooltip());
super.render(graphics, mouseX, mouseY, partialTicks); super.render(graphics, mouseX, mouseY, partialTicks);
} }

View File

@ -12,7 +12,6 @@ import dev.emi.emi.api.EmiEntrypoint;
import dev.emi.emi.api.EmiPlugin; import dev.emi.emi.api.EmiPlugin;
import dev.emi.emi.api.EmiRegistry; import dev.emi.emi.api.EmiRegistry;
import dev.emi.emi.api.stack.Comparison; import dev.emi.emi.api.stack.Comparison;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ItemStack;
import java.util.function.BiPredicate; import java.util.function.BiPredicate;
@ -36,7 +35,7 @@ public class EMIComputerCraft implements EmiPlugin {
private static final Comparison pocketComparison = compareStacks((left, right) -> private static final Comparison pocketComparison = compareStacks((left, right) ->
left.getItem() instanceof PocketComputerItem && PocketComputerItem.getUpgrade(left) == PocketComputerItem.getUpgrade(right)); left.getItem() instanceof PocketComputerItem && PocketComputerItem.getUpgrade(left) == PocketComputerItem.getUpgrade(right));
private static <T extends Item> Comparison compareStacks(BiPredicate<ItemStack, ItemStack> test) { private static Comparison compareStacks(BiPredicate<ItemStack, ItemStack> test) {
return Comparison.of((left, right) -> { return Comparison.of((left, right) -> {
ItemStack leftStack = left.getItemStack(), rightStack = right.getItemStack(); ItemStack leftStack = left.getItemStack(), rightStack = right.getItemStack();
return leftStack.getItem() == rightStack.getItem() && test.test(leftStack, rightStack); return leftStack.getItem() == rightStack.getItem() && test.test(leftStack, rightStack);

View File

@ -26,13 +26,14 @@ import java.util.List;
* <p> * <p>
* This is typically used with a {@link BakedModel} subclass - see the loader-specific projects. * This is typically used with a {@link BakedModel} subclass - see the loader-specific projects.
*/ */
public final class ModelTransformer { public class ModelTransformer {
public static final int[] ORDER = new int[]{ 3, 2, 1, 0 }; private static final int[] INVERSE_ORDER = new int[]{ 3, 2, 1, 0 };
public static final int STRIDE = DefaultVertexFormat.BLOCK.getIntegerSize();
private static final int STRIDE = DefaultVertexFormat.BLOCK.getIntegerSize();
private static final int POS_OFFSET = findOffset(DefaultVertexFormat.BLOCK, DefaultVertexFormat.ELEMENT_POSITION); private static final int POS_OFFSET = findOffset(DefaultVertexFormat.BLOCK, DefaultVertexFormat.ELEMENT_POSITION);
private final Matrix4f transformation; protected final Matrix4f transformation;
private final boolean invert; protected final boolean invert;
private @Nullable TransformedQuads cache; private @Nullable TransformedQuads cache;
public ModelTransformer(Transformation transformation) { public ModelTransformer(Transformation transformation) {
@ -60,7 +61,7 @@ public final class ModelTransformer {
for (var i = 0; i < 4; i++) { for (var i = 0; i < 4; i++) {
var inStart = STRIDE * i; var inStart = STRIDE * i;
// Reverse the order of the quads if we're inverting // Reverse the order of the quads if we're inverting
var outStart = STRIDE * (invert ? ORDER[i] : i); var outStart = getVertexOffset(i, invert);
System.arraycopy(inputData, inStart, outputData, outStart, STRIDE); System.arraycopy(inputData, inStart, outputData, outStart, STRIDE);
// Apply the matrix to our position // Apply the matrix to our position
@ -84,6 +85,10 @@ public final class ModelTransformer {
return new BakedQuad(outputData, quad.getTintIndex(), direction, quad.getSprite(), quad.isShade()); return new BakedQuad(outputData, quad.getTintIndex(), direction, quad.getSprite(), quad.isShade());
} }
public static int getVertexOffset(int vertex, boolean invert) {
return (invert ? ModelTransformer.INVERSE_ORDER[vertex] : vertex) * ModelTransformer.STRIDE;
}
private record TransformedQuads(List<BakedQuad> original, List<BakedQuad> transformed) { private record TransformedQuads(List<BakedQuad> original, List<BakedQuad> transformed) {
} }

View File

@ -4,8 +4,13 @@
package dan200.computercraft.client.platform; package dan200.computercraft.client.platform;
import com.mojang.blaze3d.vertex.PoseStack;
import dan200.computercraft.shared.network.NetworkMessage; import dan200.computercraft.shared.network.NetworkMessage;
import dan200.computercraft.shared.network.server.ServerNetworkContext; import dan200.computercraft.shared.network.server.ServerNetworkContext;
import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.resources.model.BakedModel;
import javax.annotation.Nullable;
public interface ClientPlatformHelper extends dan200.computercraft.impl.client.ClientPlatformHelper { public interface ClientPlatformHelper extends dan200.computercraft.impl.client.ClientPlatformHelper {
static ClientPlatformHelper get() { static ClientPlatformHelper get() {
@ -18,4 +23,16 @@ public interface ClientPlatformHelper extends dan200.computercraft.impl.client.C
* @param message The message to send. * @param message The message to send.
*/ */
void sendToServer(NetworkMessage<ServerNetworkContext> message); void sendToServer(NetworkMessage<ServerNetworkContext> message);
/**
* Render a {@link BakedModel}, using any loader-specific hooks.
*
* @param transform The current matrix transformation to apply.
* @param buffers The current pool of render buffers.
* @param model The model to draw.
* @param lightmapCoord The current packed lightmap coordinate.
* @param overlayLight The current overlay light.
* @param tints Block colour tints to apply to the model.
*/
void renderBakedModel(PoseStack transform, MultiBufferSource buffers, BakedModel model, int lightmapCoord, int overlayLight, @Nullable int[] tints);
} }

View File

@ -0,0 +1,103 @@
// SPDX-FileCopyrightText: 2023 The CC: Tweaked Developers
//
// SPDX-License-Identifier: MPL-2.0
package dan200.computercraft.client.render;
import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.VertexConsumer;
import dan200.computercraft.client.model.turtle.ModelTransformer;
import dan200.computercraft.client.platform.ClientPlatformHelper;
import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.block.model.BakedQuad;
import net.minecraft.client.renderer.entity.ItemRenderer;
import net.minecraft.client.resources.model.BakedModel;
import net.minecraft.world.item.ItemStack;
import org.joml.Vector4f;
import javax.annotation.Nullable;
import java.util.List;
/**
* Utilities for rendering {@link BakedModel}s and {@link BakedQuad}s.
*/
public final class ModelRenderer {
private ModelRenderer() {
}
/**
* Render a list of {@linkplain BakedQuad quads} to a buffer.
* <p>
* This is not intended to be used directly, but instead by {@link ClientPlatformHelper#renderBakedModel(PoseStack, MultiBufferSource, BakedModel, int, int, int[])}. The
* implementation here is pretty similar to {@link ItemRenderer#renderQuadList(PoseStack, VertexConsumer, List, ItemStack, int, int)},
* but supports inverted quads (i.e. those with a negative scale).
*
* @param transform The current matrix transformation to apply.
* @param buffer The buffer to draw to.
* @param quads The quads to draw.
* @param lightmapCoord The current packed lightmap coordinate.
* @param overlayLight The current overlay light.
* @param tints Block colour tints to apply to the model.
*/
public static void renderQuads(PoseStack transform, VertexConsumer buffer, List<BakedQuad> quads, int lightmapCoord, int overlayLight, @Nullable int[] tints) {
var matrix = transform.last();
var inverted = matrix.pose().determinant() < 0;
for (var bakedquad : quads) {
var tint = -1;
if (tints != null && bakedquad.isTinted()) {
var idx = bakedquad.getTintIndex();
if (idx >= 0 && idx < tints.length) tint = tints[bakedquad.getTintIndex()];
}
var r = (float) (tint >> 16 & 255) / 255.0F;
var g = (float) (tint >> 8 & 255) / 255.0F;
var b = (float) (tint & 255) / 255.0F;
putBulkQuad(buffer, matrix, bakedquad, r, g, b, lightmapCoord, overlayLight, inverted);
}
}
/**
* A version of {@link VertexConsumer#putBulkData(PoseStack.Pose, BakedQuad, float, float, float, int, int)} which
* will reverse vertex order when the matrix is inverted.
*
* @param buffer The buffer to draw to.
* @param pose The current matrix stack.
* @param quad The quad to draw.
* @param red The red tint of this quad.
* @param green The green tint of this quad.
* @param blue The blue tint of this quad.
* @param lightmapCoord The lightmap coordinate
* @param overlayLight The overlay light.
* @param invert Whether to reverse the order of this quad.
*/
private static void putBulkQuad(VertexConsumer buffer, PoseStack.Pose pose, BakedQuad quad, float red, float green, float blue, int lightmapCoord, int overlayLight, boolean invert) {
var matrix = pose.pose();
// It's a little dubious to transform using this matrix rather than the normal matrix. This mirrors the logic in
// Direction.rotate (so not out of nowhere!), but is a little suspicious.
var dirNormal = quad.getDirection().getNormal();
var vector = new Vector4f();
matrix.transform(dirNormal.getX(), dirNormal.getY(), dirNormal.getZ(), 0.0f, vector).normalize();
float normalX = vector.x(), normalY = vector.y(), normalZ = vector.z();
var vertices = quad.getVertices();
for (var vertex = 0; vertex < 4; vertex++) {
var i = ModelTransformer.getVertexOffset(vertex, invert);
var x = Float.intBitsToFloat(vertices[i]);
var y = Float.intBitsToFloat(vertices[i + 1]);
var z = Float.intBitsToFloat(vertices[i + 2]);
matrix.transform(x, y, z, 1, vector);
var u = Float.intBitsToFloat(vertices[i + 4]);
var v = Float.intBitsToFloat(vertices[i + 5]);
buffer.vertex(
vector.x(), vector.y(), vector.z(),
red, green, blue, 1.0F, u, v, overlayLight, lightmapCoord,
normalX, normalY, normalZ
);
}
}
}

View File

@ -5,36 +5,28 @@
package dan200.computercraft.client.render; package dan200.computercraft.client.render;
import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.VertexConsumer;
import com.mojang.math.Axis; import com.mojang.math.Axis;
import com.mojang.math.Transformation; import com.mojang.math.Transformation;
import dan200.computercraft.api.ComputerCraftAPI; import dan200.computercraft.api.ComputerCraftAPI;
import dan200.computercraft.api.turtle.TurtleSide; import dan200.computercraft.api.turtle.TurtleSide;
import dan200.computercraft.client.model.turtle.ModelTransformer;
import dan200.computercraft.client.platform.ClientPlatformHelper; import dan200.computercraft.client.platform.ClientPlatformHelper;
import dan200.computercraft.client.turtle.TurtleUpgradeModellers; import dan200.computercraft.client.turtle.TurtleUpgradeModellers;
import dan200.computercraft.shared.computer.core.ComputerFamily; import dan200.computercraft.shared.computer.core.ComputerFamily;
import dan200.computercraft.shared.turtle.blocks.TurtleBlockEntity; import dan200.computercraft.shared.turtle.blocks.TurtleBlockEntity;
import dan200.computercraft.shared.util.DirectionUtil;
import dan200.computercraft.shared.util.Holiday; import dan200.computercraft.shared.util.Holiday;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.Font; import net.minecraft.client.gui.Font;
import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.Sheets;
import net.minecraft.client.renderer.block.model.BakedQuad;
import net.minecraft.client.renderer.blockentity.BlockEntityRenderDispatcher; import net.minecraft.client.renderer.blockentity.BlockEntityRenderDispatcher;
import net.minecraft.client.renderer.blockentity.BlockEntityRenderer; import net.minecraft.client.renderer.blockentity.BlockEntityRenderer;
import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider; import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider;
import net.minecraft.client.resources.model.BakedModel; import net.minecraft.client.resources.model.BakedModel;
import net.minecraft.client.resources.model.ModelResourceLocation; import net.minecraft.client.resources.model.ModelResourceLocation;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import net.minecraft.util.RandomSource;
import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.BlockHitResult;
import net.minecraft.world.phys.HitResult; import net.minecraft.world.phys.HitResult;
import org.joml.Vector4f;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import java.util.List;
public class TurtleBlockEntityRenderer implements BlockEntityRenderer<TurtleBlockEntity> { public class TurtleBlockEntityRenderer implements BlockEntityRenderer<TurtleBlockEntity> {
private static final ModelResourceLocation NORMAL_TURTLE_MODEL = new ModelResourceLocation(ComputerCraftAPI.MOD_ID, "turtle_normal", "inventory"); private static final ModelResourceLocation NORMAL_TURTLE_MODEL = new ModelResourceLocation(ComputerCraftAPI.MOD_ID, "turtle_normal", "inventory");
@ -42,8 +34,6 @@ public class TurtleBlockEntityRenderer implements BlockEntityRenderer<TurtleBloc
private static final ResourceLocation COLOUR_TURTLE_MODEL = new ResourceLocation(ComputerCraftAPI.MOD_ID, "block/turtle_colour"); private static final ResourceLocation COLOUR_TURTLE_MODEL = new ResourceLocation(ComputerCraftAPI.MOD_ID, "block/turtle_colour");
private static final ResourceLocation ELF_OVERLAY_MODEL = new ResourceLocation(ComputerCraftAPI.MOD_ID, "block/turtle_elf_overlay"); private static final ResourceLocation ELF_OVERLAY_MODEL = new ResourceLocation(ComputerCraftAPI.MOD_ID, "block/turtle_elf_overlay");
private final RandomSource random = RandomSource.create(0);
private final BlockEntityRenderDispatcher renderer; private final BlockEntityRenderDispatcher renderer;
private final Font font; private final Font font;
@ -109,23 +99,22 @@ public class TurtleBlockEntityRenderer implements BlockEntityRenderer<TurtleBloc
var family = turtle.getFamily(); var family = turtle.getFamily();
var overlay = turtle.getOverlay(); var overlay = turtle.getOverlay();
var buffer = buffers.getBuffer(Sheets.translucentCullBlockSheet()); renderModel(transform, buffers, lightmapCoord, overlayLight, getTurtleModel(family, colour != -1), colour == -1 ? null : new int[]{ colour });
renderModel(transform, buffer, lightmapCoord, overlayLight, getTurtleModel(family, colour != -1), colour == -1 ? null : new int[]{ colour });
// Render the overlay // Render the overlay
var overlayModel = getTurtleOverlayModel(overlay, Holiday.getCurrent() == Holiday.CHRISTMAS); var overlayModel = getTurtleOverlayModel(overlay, Holiday.getCurrent() == Holiday.CHRISTMAS);
if (overlayModel != null) { if (overlayModel != null) {
renderModel(transform, buffer, lightmapCoord, overlayLight, overlayModel, null); renderModel(transform, buffers, lightmapCoord, overlayLight, overlayModel, null);
} }
// Render the upgrades // Render the upgrades
renderUpgrade(transform, buffer, lightmapCoord, overlayLight, turtle, TurtleSide.LEFT, partialTicks); renderUpgrade(transform, buffers, lightmapCoord, overlayLight, turtle, TurtleSide.LEFT, partialTicks);
renderUpgrade(transform, buffer, lightmapCoord, overlayLight, turtle, TurtleSide.RIGHT, partialTicks); renderUpgrade(transform, buffers, lightmapCoord, overlayLight, turtle, TurtleSide.RIGHT, partialTicks);
transform.popPose(); transform.popPose();
} }
private void renderUpgrade(PoseStack transform, VertexConsumer renderer, int lightmapCoord, int overlayLight, TurtleBlockEntity turtle, TurtleSide side, float f) { private void renderUpgrade(PoseStack transform, MultiBufferSource buffers, int lightmapCoord, int overlayLight, TurtleBlockEntity turtle, TurtleSide side, float f) {
var upgrade = turtle.getUpgrade(side); var upgrade = turtle.getUpgrade(side);
if (upgrade == null) return; if (upgrade == null) return;
transform.pushPose(); transform.pushPose();
@ -136,16 +125,15 @@ public class TurtleBlockEntityRenderer implements BlockEntityRenderer<TurtleBloc
transform.translate(0.0f, -0.5f, -0.5f); transform.translate(0.0f, -0.5f, -0.5f);
var model = TurtleUpgradeModellers.getModel(upgrade, turtle.getAccess(), side); var model = TurtleUpgradeModellers.getModel(upgrade, turtle.getAccess(), side);
pushPoseFromTransformation(transform, model.getMatrix()); applyTransformation(transform, model.getMatrix());
renderModel(transform, renderer, lightmapCoord, overlayLight, model.getModel(), null); renderModel(transform, buffers, lightmapCoord, overlayLight, model.getModel(), null);
transform.popPose();
transform.popPose(); transform.popPose();
} }
private void renderModel(PoseStack transform, VertexConsumer renderer, int lightmapCoord, int overlayLight, ResourceLocation modelLocation, @Nullable int[] tints) { private void renderModel(PoseStack transform, MultiBufferSource buffers, int lightmapCoord, int overlayLight, ResourceLocation modelLocation, @Nullable int[] tints) {
var modelManager = Minecraft.getInstance().getItemRenderer().getItemModelShaper().getModelManager(); var modelManager = Minecraft.getInstance().getItemRenderer().getItemModelShaper().getModelManager();
renderModel(transform, renderer, lightmapCoord, overlayLight, ClientPlatformHelper.get().getModel(modelManager, modelLocation), tints); renderModel(transform, buffers, lightmapCoord, overlayLight, ClientPlatformHelper.get().getModel(modelManager, modelLocation), tints);
} }
/** /**
@ -159,80 +147,11 @@ public class TurtleBlockEntityRenderer implements BlockEntityRenderer<TurtleBloc
* @param tints Tints for the quads, as an array of RGB values. * @param tints Tints for the quads, as an array of RGB values.
* @see net.minecraft.client.renderer.block.ModelBlockRenderer#renderModel * @see net.minecraft.client.renderer.block.ModelBlockRenderer#renderModel
*/ */
private void renderModel(PoseStack transform, VertexConsumer renderer, int lightmapCoord, int overlayLight, BakedModel model, @Nullable int[] tints) { private void renderModel(PoseStack transform, MultiBufferSource renderer, int lightmapCoord, int overlayLight, BakedModel model, @Nullable int[] tints) {
for (var facing : DirectionUtil.FACINGS) { ClientPlatformHelper.get().renderBakedModel(transform, renderer, model, lightmapCoord, overlayLight, tints);
random.setSeed(42);
renderQuads(transform, renderer, lightmapCoord, overlayLight, model.getQuads(null, facing, random), tints);
} }
random.setSeed(42); private static void applyTransformation(PoseStack stack, Transformation transformation) {
renderQuads(transform, renderer, lightmapCoord, overlayLight, model.getQuads(null, null, random), tints);
}
private static void renderQuads(PoseStack transform, VertexConsumer buffer, int lightmapCoord, int overlayLight, List<BakedQuad> quads, @Nullable int[] tints) {
var matrix = transform.last();
var inverted = matrix.pose().determinant() < 0;
for (var bakedquad : quads) {
var tint = -1;
if (tints != null && bakedquad.isTinted()) {
var idx = bakedquad.getTintIndex();
if (idx >= 0 && idx < tints.length) tint = tints[bakedquad.getTintIndex()];
}
var r = (float) (tint >> 16 & 255) / 255.0F;
var g = (float) (tint >> 8 & 255) / 255.0F;
var b = (float) (tint & 255) / 255.0F;
if (inverted) {
putBulkQuadInvert(buffer, matrix, bakedquad, r, g, b, lightmapCoord, overlayLight);
} else {
buffer.putBulkData(matrix, bakedquad, r, g, b, lightmapCoord, overlayLight);
}
}
}
/**
* A version of {@link VertexConsumer#putBulkData(PoseStack.Pose, BakedQuad, float, float, float, int, int)} for
* when the matrix is inverted.
*
* @param buffer The buffer to draw to.
* @param pose The current matrix stack.
* @param quad The quad to draw.
* @param red The red tint of this quad.
* @param green The green tint of this quad.
* @param blue The blue tint of this quad.
* @param lightmapCoord The lightmap coordinate
* @param overlayLight The overlay light.
*/
private static void putBulkQuadInvert(VertexConsumer buffer, PoseStack.Pose pose, BakedQuad quad, float red, float green, float blue, int lightmapCoord, int overlayLight) {
var matrix = pose.pose();
// It's a little dubious to transform using this matrix rather than the normal matrix. This mirrors the logic in
// Direction.rotate (so not out of nowhere!), but is a little suspicious.
var dirNormal = quad.getDirection().getNormal();
var normal = matrix.transform(new Vector4f(dirNormal.getX(), dirNormal.getY(), dirNormal.getZ(), 0.0f)).normalize();
var vertices = quad.getVertices();
for (var vertex : ModelTransformer.ORDER) {
var i = vertex * ModelTransformer.STRIDE;
var x = Float.intBitsToFloat(vertices[i]);
var y = Float.intBitsToFloat(vertices[i + 1]);
var z = Float.intBitsToFloat(vertices[i + 2]);
var transformed = matrix.transform(new Vector4f(x, y, z, 1));
var u = Float.intBitsToFloat(vertices[i + 4]);
var v = Float.intBitsToFloat(vertices[i + 5]);
buffer.vertex(
transformed.x(), transformed.y(), transformed.z(),
red, green, blue, 1.0F, u, v, overlayLight, lightmapCoord,
normal.x(), normal.y(), normal.z()
);
}
}
private static void pushPoseFromTransformation(PoseStack stack, Transformation transformation) {
stack.pushPose();
var trans = transformation.getTranslation(); var trans = transformation.getTranslation();
stack.translate(trans.x(), trans.y(), trans.z()); stack.translate(trans.x(), trans.y(), trans.z());

View File

@ -13,6 +13,9 @@ import dan200.computercraft.shared.turtle.upgrades.TurtleModem;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import java.util.Collection;
import java.util.List;
/** /**
* A {@link TurtleUpgradeModeller} for modems, providing different models depending on if the modem is on/off. * A {@link TurtleUpgradeModeller} for modems, providing different models depending on if the modem is on/off.
*/ */
@ -48,4 +51,9 @@ public class TurtleModemModeller implements TurtleUpgradeModeller<TurtleModem> {
? TransformedModel.of(active ? leftOnModel : leftOffModel) ? TransformedModel.of(active ? leftOnModel : leftOffModel)
: TransformedModel.of(active ? rightOnModel : rightOffModel); : TransformedModel.of(active ? rightOnModel : rightOffModel);
} }
@Override
public Collection<ResourceLocation> getDependencies() {
return List.of(leftOffModel, rightOffModel, leftOnModel, rightOnModel);
}
} }

View File

@ -15,10 +15,12 @@ import dan200.computercraft.impl.TurtleUpgrades;
import dan200.computercraft.impl.UpgradeManager; import dan200.computercraft.impl.UpgradeManager;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.CompoundTag;
import net.minecraft.resources.ResourceLocation;
import java.util.Map; import java.util.Map;
import java.util.WeakHashMap; import java.util.WeakHashMap;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import java.util.stream.Stream;
/** /**
* A registry of {@link TurtleUpgradeModeller}s. * A registry of {@link TurtleUpgradeModeller}s.
@ -71,4 +73,8 @@ public final class TurtleUpgradeModellers {
var modeller = turtleModels.get(wrapper.serialiser()); var modeller = turtleModels.get(wrapper.serialiser());
return modeller == null ? NULL_TURTLE_MODELLER : modeller; return modeller == null ? NULL_TURTLE_MODELLER : modeller;
} }
public static Stream<ResourceLocation> getDependencies() {
return turtleModels.values().stream().flatMap(x -> x.getDependencies().stream());
}
} }

View File

@ -158,9 +158,6 @@ public final class LanguageProvider implements DataProvider {
add("commands.computercraft.track.dump.desc", "Dump the latest results of computer tracking."); add("commands.computercraft.track.dump.desc", "Dump the latest results of computer tracking.");
add("commands.computercraft.track.dump.no_timings", "No timings available"); add("commands.computercraft.track.dump.no_timings", "No timings available");
add("commands.computercraft.track.dump.computer", "Computer"); add("commands.computercraft.track.dump.computer", "Computer");
add("commands.computercraft.reload.synopsis", "Reload the ComputerCraft config file");
add("commands.computercraft.reload.desc", "Reload the ComputerCraft config file");
add("commands.computercraft.reload.done", "Reloaded config");
add("commands.computercraft.queue.synopsis", "Send a computer_command event to a command computer"); add("commands.computercraft.queue.synopsis", "Send a computer_command event to a command computer");
add("commands.computercraft.queue.desc", "Send a computer_command event to a command computer, passing through the additional arguments. This is mostly designed for map makers, acting as a more computer-friendly version of /trigger. Any player can run the command, which would most likely be done through a text component's click event."); add("commands.computercraft.queue.desc", "Send a computer_command event to a command computer, passing through the additional arguments. This is mostly designed for map makers, acting as a more computer-friendly version of /trigger. Any player can run the command, which would most likely be done through a text component's click event.");
@ -286,8 +283,8 @@ public final class LanguageProvider implements DataProvider {
turtleUpgrades.getGeneratedUpgrades().stream().map(UpgradeBase::getUnlocalisedAdjective), turtleUpgrades.getGeneratedUpgrades().stream().map(UpgradeBase::getUnlocalisedAdjective),
pocketUpgrades.getGeneratedUpgrades().stream().map(UpgradeBase::getUnlocalisedAdjective), pocketUpgrades.getGeneratedUpgrades().stream().map(UpgradeBase::getUnlocalisedAdjective),
Metric.metrics().values().stream().map(x -> AggregatedMetric.TRANSLATION_PREFIX + x.name() + ".name"), Metric.metrics().values().stream().map(x -> AggregatedMetric.TRANSLATION_PREFIX + x.name() + ".name"),
getConfigEntries(ConfigSpec.serverSpec).map(ConfigFile.Entry::translationKey), ConfigSpec.serverSpec.entries().map(ConfigFile.Entry::translationKey),
getConfigEntries(ConfigSpec.clientSpec).map(ConfigFile.Entry::translationKey) ConfigSpec.clientSpec.entries().map(ConfigFile.Entry::translationKey)
).flatMap(x -> x); ).flatMap(x -> x);
} }
@ -321,16 +318,4 @@ public final class LanguageProvider implements DataProvider {
add(value.translationKey(), text); add(value.translationKey(), text);
add(value.translationKey() + ".tooltip", value.comment()); add(value.translationKey() + ".tooltip", value.comment());
} }
private static Stream<ConfigFile.Entry> getConfigEntries(ConfigFile spec) {
return spec.entries().flatMap(LanguageProvider::getConfigEntries);
}
private static Stream<ConfigFile.Entry> getConfigEntries(ConfigFile.Entry entry) {
if (entry instanceof ConfigFile.Value<?>) return Stream.of(entry);
if (entry instanceof ConfigFile.Group group) {
return Stream.concat(Stream.of(entry), group.children().flatMap(LanguageProvider::getConfigEntries));
}
throw new IllegalStateException("Invalid config entry " + entry);
}
} }

View File

@ -44,12 +44,12 @@ public class ArgumentUtils {
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
private static <A extends ArgumentType<?>, T extends ArgumentTypeInfo.Template<A>> void serializeToNetwork(FriendlyByteBuf buffer, ArgumentTypeInfo<A, T> type, ArgumentTypeInfo.Template<A> template) { private static <A extends ArgumentType<?>, T extends ArgumentTypeInfo.Template<A>> void serializeToNetwork(FriendlyByteBuf buffer, ArgumentTypeInfo<A, T> type, ArgumentTypeInfo.Template<A> template) {
RegistryWrappers.writeId(buffer, RegistryWrappers.COMMAND_ARGUMENT_TYPES, type); buffer.writeId(RegistryWrappers.COMMAND_ARGUMENT_TYPES, type);
type.serializeToNetwork((T) template, buffer); type.serializeToNetwork((T) template, buffer);
} }
public static ArgumentTypeInfo.Template<?> deserialize(FriendlyByteBuf buffer) { public static ArgumentTypeInfo.Template<?> deserialize(FriendlyByteBuf buffer) {
var type = RegistryWrappers.readId(buffer, RegistryWrappers.COMMAND_ARGUMENT_TYPES); var type = buffer.readById(RegistryWrappers.COMMAND_ARGUMENT_TYPES);
Objects.requireNonNull(type, "Unknown argument type"); Objects.requireNonNull(type, "Unknown argument type");
return type.deserializeFromNetwork(buffer); return type.deserializeFromNetwork(buffer);
} }

View File

@ -199,6 +199,11 @@ public abstract class AbstractComputerBlockEntity extends BlockEntity implements
return localSide; return localSide;
} }
private void updateRedstoneInputs(ServerComputer computer) {
var pos = getBlockPos();
for (var dir : DirectionUtil.FACINGS) updateRedstoneInput(computer, dir, pos.relative(dir));
}
private void updateRedstoneInput(ServerComputer computer, Direction dir, BlockPos targetPos) { private void updateRedstoneInput(ServerComputer computer, Direction dir, BlockPos targetPos) {
var offsetSide = dir.getOpposite(); var offsetSide = dir.getOpposite();
var localDir = remapToLocalSide(dir); var localDir = remapToLocalSide(dir);
@ -254,8 +259,7 @@ public abstract class AbstractComputerBlockEntity extends BlockEntity implements
// If the position is not any adjacent one, update all inputs. This is pretty terrible, but some redstone mods // If the position is not any adjacent one, update all inputs. This is pretty terrible, but some redstone mods
// handle this incorrectly. // handle this incorrectly.
var pos = getBlockPos(); updateRedstoneInputs(computer);
for (var dir : DirectionUtil.FACINGS) updateRedstoneInput(computer, dir, pos.relative(dir));
invalidSides = (1 << 6) - 1; // Mark all peripherals as dirty. invalidSides = (1 << 6) - 1; // Mark all peripherals as dirty.
} }
@ -264,9 +268,10 @@ public abstract class AbstractComputerBlockEntity extends BlockEntity implements
*/ */
public void updateOutput() { public void updateOutput() {
BlockEntityHelpers.updateBlock(this); BlockEntityHelpers.updateBlock(this);
for (var dir : DirectionUtil.FACINGS) { for (var dir : DirectionUtil.FACINGS) RedstoneUtil.propagateRedstoneOutput(getLevel(), getBlockPos(), dir);
RedstoneUtil.propagateRedstoneOutput(getLevel(), getBlockPos(), dir);
} var computer = getServerComputer();
if (computer != null) updateRedstoneInputs(computer);
} }
protected abstract ServerComputer createComputer(int id); protected abstract ServerComputer createComputer(int id);

View File

@ -54,12 +54,6 @@ public interface ConfigFile {
* A group of config entries. * A group of config entries.
*/ */
non-sealed interface Group extends Entry { non-sealed interface Group extends Entry {
/**
* Get all entries in this group.
*
* @return All child entries.
*/
Stream<Entry> children();
} }
/** /**

View File

@ -5,6 +5,7 @@
package dan200.computercraft.shared.platform; package dan200.computercraft.shared.platform;
import net.minecraft.commands.synchronization.ArgumentTypeInfo; import net.minecraft.commands.synchronization.ArgumentTypeInfo;
import net.minecraft.core.IdMap;
import net.minecraft.core.Registry; import net.minecraft.core.Registry;
import net.minecraft.core.registries.Registries; import net.minecraft.core.registries.Registries;
import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.FriendlyByteBuf;
@ -36,9 +37,7 @@ public final class RegistryWrappers {
public static final RegistryWrapper<RecipeSerializer<?>> RECIPE_SERIALIZERS = PlatformHelper.get().wrap(Registries.RECIPE_SERIALIZER); public static final RegistryWrapper<RecipeSerializer<?>> RECIPE_SERIALIZERS = PlatformHelper.get().wrap(Registries.RECIPE_SERIALIZER);
public static final RegistryWrapper<MenuType<?>> MENU = PlatformHelper.get().wrap(Registries.MENU); public static final RegistryWrapper<MenuType<?>> MENU = PlatformHelper.get().wrap(Registries.MENU);
public interface RegistryWrapper<T> extends Iterable<T> { public interface RegistryWrapper<T> extends IdMap<T> {
int getId(T object);
ResourceLocation getKey(T object); ResourceLocation getKey(T object);
T get(ResourceLocation location); T get(ResourceLocation location);
@ -46,8 +45,6 @@ public final class RegistryWrappers {
@Nullable @Nullable
T tryGet(ResourceLocation location); T tryGet(ResourceLocation location);
T get(int id);
default Stream<T> stream() { default Stream<T> stream() {
return StreamSupport.stream(spliterator(), false); return StreamSupport.stream(spliterator(), false);
} }
@ -56,15 +53,6 @@ public final class RegistryWrappers {
private RegistryWrappers() { private RegistryWrappers() {
} }
public static <K> void writeId(FriendlyByteBuf buf, RegistryWrapper<K> registry, K object) {
buf.writeVarInt(registry.getId(object));
}
public static <K> K readId(FriendlyByteBuf buf, RegistryWrapper<K> registry) {
var id = buf.readVarInt();
return registry.get(id);
}
public static <K> void writeKey(FriendlyByteBuf buf, RegistryWrapper<K> registry, K object) { public static <K> void writeKey(FriendlyByteBuf buf, RegistryWrapper<K> registry, K object) {
buf.writeResourceLocation(registry.getKey(object)); buf.writeResourceLocation(registry.getKey(object));
} }

View File

@ -75,7 +75,7 @@ public class TurtlePlaceCommand implements TurtleCommand {
} }
} }
public static boolean deploy( private static boolean deploy(
ItemStack stack, ITurtleAccess turtle, TurtlePlayer turtlePlayer, Direction direction, ItemStack stack, ITurtleAccess turtle, TurtlePlayer turtlePlayer, Direction direction,
@Nullable Object[] extraArguments, @Nullable ErrorMessage outErrorMessage @Nullable Object[] extraArguments, @Nullable ErrorMessage outErrorMessage
) { ) {
@ -141,6 +141,22 @@ public class TurtlePlaceCommand implements TurtleCommand {
return true; return true;
} }
/**
* Calculate where a turtle would interact with a block.
*
* @param position The position of the block.
* @param side The side the turtle is clicking on.
* @return The hit result.
*/
public static BlockHitResult getHitResult(BlockPos position, Direction side) {
var hitX = 0.5 + side.getStepX() * 0.5;
var hitY = 0.5 + side.getStepY() * 0.5;
var hitZ = 0.5 + side.getStepZ() * 0.5;
if (Math.abs(hitY - 0.5) < 0.01) hitY = 0.45;
return new BlockHitResult(new Vec3(position.getX() + hitX, position.getY() + hitY, position.getZ() + hitZ), side, position, false);
}
private static boolean deployOnBlock( private static boolean deployOnBlock(
ItemStack stack, ITurtleAccess turtle, TurtlePlayer turtlePlayer, BlockPos position, Direction side, ItemStack stack, ITurtleAccess turtle, TurtlePlayer turtlePlayer, BlockPos position, Direction side,
@Nullable Object[] extraArguments, boolean adjacent, @Nullable ErrorMessage outErrorMessage @Nullable Object[] extraArguments, boolean adjacent, @Nullable ErrorMessage outErrorMessage
@ -150,14 +166,8 @@ public class TurtlePlaceCommand implements TurtleCommand {
var playerPosition = position.relative(side); var playerPosition = position.relative(side);
turtlePlayer.setPosition(turtle, playerPosition, playerDir); turtlePlayer.setPosition(turtle, playerPosition, playerDir);
// Calculate where the turtle would hit the block
var hitX = 0.5f + side.getStepX() * 0.5f;
var hitY = 0.5f + side.getStepY() * 0.5f;
var hitZ = 0.5f + side.getStepZ() * 0.5f;
if (Math.abs(hitY - 0.5f) < 0.01f) hitY = 0.45f;
// Check if there's something suitable to place onto // Check if there's something suitable to place onto
var hit = new BlockHitResult(new Vec3(position.getX() + hitX, position.getY() + hitY, position.getZ() + hitZ), side, position, false); var hit = getHitResult(position, side);
var context = new UseOnContext(turtlePlayer.player(), InteractionHand.MAIN_HAND, hit); var context = new UseOnContext(turtlePlayer.player(), InteractionHand.MAIN_HAND, hit);
if (!canDeployOnBlock(new BlockPlaceContext(context), turtle, turtlePlayer, position, side, adjacent, outErrorMessage)) { if (!canDeployOnBlock(new BlockPlaceContext(context), turtle, turtlePlayer, position, side, adjacent, outErrorMessage)) {
return false; return false;

View File

@ -100,12 +100,12 @@ public class TurtleTool extends AbstractTurtleUpgrade {
public ItemStack getUpgradeItem(CompoundTag upgradeData) { public ItemStack getUpgradeItem(CompoundTag upgradeData) {
// Copy upgrade data back to the item. // Copy upgrade data back to the item.
var item = super.getUpgradeItem(upgradeData).copy(); var item = super.getUpgradeItem(upgradeData).copy();
item.setTag(upgradeData.contains(TAG_ITEM_TAG, TAG_COMPOUND) ? upgradeData.getCompound(TAG_ITEM_TAG).copy() : null); item.setTag(upgradeData.contains(TAG_ITEM_TAG, TAG_COMPOUND) ? upgradeData.getCompound(TAG_ITEM_TAG) : null);
return item; return item;
} }
private ItemStack getToolStack(ITurtleAccess turtle, TurtleSide side) { private ItemStack getToolStack(ITurtleAccess turtle, TurtleSide side) {
return getUpgradeItem(turtle.getUpgradeNBTData(side)); return getUpgradeItem(turtle.getUpgradeNBTData(side)).copy();
} }
private void setToolStack(ITurtleAccess turtle, TurtleSide side, ItemStack stack) { private void setToolStack(ITurtleAccess turtle, TurtleSide side, ItemStack stack) {
@ -294,19 +294,20 @@ public class TurtleTool extends AbstractTurtleUpgrade {
private TurtleCommandResult dig(ITurtleAccess turtle, TurtleSide side, Direction direction) { private TurtleCommandResult dig(ITurtleAccess turtle, TurtleSide side, Direction direction) {
var level = (ServerLevel) turtle.getLevel(); var level = (ServerLevel) turtle.getLevel();
var blockPosition = turtle.getPosition().relative(direction);
if (level.isEmptyBlock(blockPosition) || WorldUtil.isLiquidBlock(level, blockPosition)) {
return TurtleCommandResult.failure("Nothing to dig here");
}
return withEquippedItem(turtle, side, direction, turtlePlayer -> { return withEquippedItem(turtle, side, direction, turtlePlayer -> {
var stack = turtlePlayer.player().getItemInHand(InteractionHand.MAIN_HAND); var stack = turtlePlayer.player().getItemInHand(InteractionHand.MAIN_HAND);
// Right-click the block when using a shovel/hoe. // Right-click the block when using a shovel/hoe. Important that we do this before checking the block is
if (PlatformHelper.get().hasToolUsage(item) && TurtlePlaceCommand.deploy(stack, turtle, turtlePlayer, direction, null, null)) { // present, as we allow doing these actions from slightly further away.
if (PlatformHelper.get().hasToolUsage(stack) && useTool(level, turtle, turtlePlayer, stack, direction)) {
return TurtleCommandResult.success(); return TurtleCommandResult.success();
} }
var blockPosition = turtle.getPosition().relative(direction);
if (level.isEmptyBlock(blockPosition) || WorldUtil.isLiquidBlock(level, blockPosition)) {
return TurtleCommandResult.failure("Nothing to dig here");
}
// Check if we can break the block // Check if we can break the block
var breakable = checkBlockBreakable(level, blockPosition, turtlePlayer); var breakable = checkBlockBreakable(level, blockPosition, turtlePlayer);
if (!breakable.isSuccess()) return breakable; if (!breakable.isSuccess()) return breakable;
@ -320,6 +321,32 @@ public class TurtleTool extends AbstractTurtleUpgrade {
}); });
} }
/**
* Attempt to use a tool against a block instead.
*
* @param level The current level.
* @param turtle The current turtle.
* @param turtlePlayer The turtle player, already positioned and with a stack equipped.
* @param stack The current tool's stack.
* @param direction The direction this action occurs in.
* @return Whether the tool was successfully used.
* @see PlatformHelper#hasToolUsage(ItemStack)
*/
private boolean useTool(ServerLevel level, ITurtleAccess turtle, TurtlePlayer turtlePlayer, ItemStack stack, Direction direction) {
var position = turtle.getPosition().relative(direction);
// Allow digging one extra block below the turtle, as you can't till dirt/flatten grass if there's a block
// above.
if (direction == Direction.DOWN && level.isEmptyBlock(position)) position = position.relative(direction);
if (!level.isInWorldBounds(position) || level.isEmptyBlock(position) || turtlePlayer.isBlockProtected(level, position)) {
return false;
}
var hit = TurtlePlaceCommand.getHitResult(position, direction.getOpposite());
var result = PlatformHelper.get().useOn(turtlePlayer.player(), stack, hit, x -> false);
return result.consumesAction();
}
private static boolean isTriviallyBreakable(BlockGetter reader, BlockPos pos, BlockState state) { private static boolean isTriviallyBreakable(BlockGetter reader, BlockPos pos, BlockState state) {
return state.is(ComputerCraftTags.Blocks.TURTLE_ALWAYS_BREAKABLE) return state.is(ComputerCraftTags.Blocks.TURTLE_ALWAYS_BREAKABLE)
// Allow breaking any "instabreak" block. // Allow breaking any "instabreak" block.

View File

@ -17,6 +17,8 @@ import net.minecraft.util.GsonHelper;
import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Block;
import java.util.Objects;
public final class TurtleToolSerialiser implements TurtleUpgradeSerialiser<TurtleTool> { public final class TurtleToolSerialiser implements TurtleUpgradeSerialiser<TurtleTool> {
public static final TurtleToolSerialiser INSTANCE = new TurtleToolSerialiser(); public static final TurtleToolSerialiser INSTANCE = new TurtleToolSerialiser();
@ -44,7 +46,8 @@ public final class TurtleToolSerialiser implements TurtleUpgradeSerialiser<Turtl
@Override @Override
public TurtleTool fromNetwork(ResourceLocation id, FriendlyByteBuf buffer) { public TurtleTool fromNetwork(ResourceLocation id, FriendlyByteBuf buffer) {
var adjective = buffer.readUtf(); var adjective = buffer.readUtf();
var craftingItem = RegistryWrappers.readId(buffer, RegistryWrappers.ITEMS); var craftingItem = buffer.readById(RegistryWrappers.ITEMS);
Objects.requireNonNull(craftingItem, "Unknown crafting item");
var toolItem = buffer.readItem(); var toolItem = buffer.readItem();
// damageMultiplier and breakable aren't used by the client, but we need to construct the upgrade exactly // damageMultiplier and breakable aren't used by the client, but we need to construct the upgrade exactly
// as otherwise syncing on an SP world will overwrite the (shared) upgrade registry with an invalid upgrade! // as otherwise syncing on an SP world will overwrite the (shared) upgrade registry with an invalid upgrade!
@ -59,7 +62,7 @@ public final class TurtleToolSerialiser implements TurtleUpgradeSerialiser<Turtl
@Override @Override
public void toNetwork(FriendlyByteBuf buffer, TurtleTool upgrade) { public void toNetwork(FriendlyByteBuf buffer, TurtleTool upgrade) {
buffer.writeUtf(upgrade.getUnlocalisedAdjective()); buffer.writeUtf(upgrade.getUnlocalisedAdjective());
RegistryWrappers.writeId(buffer, RegistryWrappers.ITEMS, upgrade.getCraftingItem().getItem()); buffer.writeId(RegistryWrappers.ITEMS, upgrade.getCraftingItem().getItem());
buffer.writeItem(upgrade.item); buffer.writeItem(upgrade.item);
buffer.writeFloat(upgrade.damageMulitiplier); buffer.writeFloat(upgrade.damageMulitiplier);
buffer.writeBoolean(upgrade.allowEnchantments); buffer.writeBoolean(upgrade.allowEnchantments);

View File

@ -0,0 +1,56 @@
// SPDX-FileCopyrightText: 2023 The CC: Tweaked Developers
//
// SPDX-License-Identifier: MPL-2.0
package dan200.computercraft.shared.util;
import org.jetbrains.annotations.Nullable;
import java.util.AbstractList;
import java.util.Iterator;
import java.util.List;
/**
* A list which prepends a single value to another list.
*
* @param <T> The type of item in the list.
*/
public final class ConsList<T> extends AbstractList<T> {
private final T head;
private final List<T> tail;
public ConsList(T head, List<T> tail) {
this.head = head;
this.tail = tail;
}
@Override
public T get(int index) {
return index == 0 ? head : tail.get(index - 1);
}
@Override
public int size() {
return 1 + tail.size();
}
@Override
public Iterator<T> iterator() {
return new Iterator<>() {
private @Nullable Iterator<T> tailIterator;
@Override
public boolean hasNext() {
return tailIterator == null || tailIterator.hasNext();
}
@Override
public T next() {
if (tailIterator != null) return tailIterator.next();
tailIterator = tail.iterator();
return head;
}
};
}
}

View File

@ -50,6 +50,8 @@ public final class RedstoneUtil {
var neighbourPos = pos.relative(side); var neighbourPos = pos.relative(side);
world.neighborChanged(neighbourPos, block.getBlock(), pos); world.neighborChanged(neighbourPos, block.getBlock(), pos);
world.updateNeighborsAtExceptFromFacing(neighbourPos, block.getBlock(), side.getOpposite()); // We intentionally use updateNeighborsAt here instead of updateNeighborsAtExceptFromFacing, as computers can
// both send and receive redstone, and so also need to be updated.
world.updateNeighborsAt(neighbourPos, block.getBlock());
} }
} }

View File

@ -7,7 +7,6 @@ package dan200.computercraft.shared.util;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.Objects;
import java.util.stream.Stream; import java.util.stream.Stream;
/** /**
@ -38,12 +37,6 @@ public class Trie<K, V> {
getChild(key).current = value; getChild(key).current = value;
} }
public Stream<V> children() {
return children == null
? Stream.empty()
: children.values().stream().map(x -> x.current).filter(Objects::nonNull);
}
public Stream<V> stream() { public Stream<V> stream() {
return Stream.concat( return Stream.concat(
current == null ? Stream.empty() : Stream.of(current), current == null ? Stream.empty() : Stream.of(current),

View File

@ -1,6 +1,8 @@
{ {
"argument.computercraft.argument_expected": "Očekáván argument",
"argument.computercraft.computer.many_matching": "Pro '%s' se shoduje více počítačů (instance %s)", "argument.computercraft.computer.many_matching": "Pro '%s' se shoduje více počítačů (instance %s)",
"argument.computercraft.computer.no_matching": "Pro '%s' se neshodují žádné počítače", "argument.computercraft.computer.no_matching": "Pro '%s' se neshodují žádné počítače",
"argument.computercraft.tracking_field.no_field": "Neznámé pole '%s'",
"block.computercraft.cable": "Síťový kabel", "block.computercraft.cable": "Síťový kabel",
"block.computercraft.computer_advanced": "Pokročilý počítač", "block.computercraft.computer_advanced": "Pokročilý počítač",
"block.computercraft.computer_command": "Příkazový počítač", "block.computercraft.computer_command": "Příkazový počítač",
@ -12,6 +14,7 @@
"block.computercraft.speaker": "Reproduktor", "block.computercraft.speaker": "Reproduktor",
"block.computercraft.turtle_advanced": "Pokročilý robot", "block.computercraft.turtle_advanced": "Pokročilý robot",
"block.computercraft.turtle_advanced.upgraded": "Pokročilý %s robot", "block.computercraft.turtle_advanced.upgraded": "Pokročilý %s robot",
"block.computercraft.turtle_advanced.upgraded_twice": "Pokročilý %s %s robot",
"block.computercraft.turtle_normal": "Robot", "block.computercraft.turtle_normal": "Robot",
"block.computercraft.turtle_normal.upgraded": "%s robot", "block.computercraft.turtle_normal.upgraded": "%s robot",
"block.computercraft.turtle_normal.upgraded_twice": "%s %s robot", "block.computercraft.turtle_normal.upgraded_twice": "%s %s robot",
@ -21,117 +24,103 @@
"block.computercraft.wireless_modem_normal": "Bezdrátový modem", "block.computercraft.wireless_modem_normal": "Bezdrátový modem",
"chat.computercraft.wired_modem.peripheral_connected": "Periferie \"%s\" připojena k sítí", "chat.computercraft.wired_modem.peripheral_connected": "Periferie \"%s\" připojena k sítí",
"chat.computercraft.wired_modem.peripheral_disconnected": "Periferie \"%s\" odpojena od sítě", "chat.computercraft.wired_modem.peripheral_disconnected": "Periferie \"%s\" odpojena od sítě",
"commands.computercraft.desc": "Příkaz /computercraft dává různé ladící a správcovské nástroje pro ovládání a interakci s počítači.",
"commands.computercraft.dump.action": "Ukázat více informací o tomto počítači", "commands.computercraft.dump.action": "Ukázat více informací o tomto počítači",
"commands.computercraft.dump.desc": "Ukáže stav všech počítačů nebo specifické informace o jednom počítači. Můžeš specifikovat ID počítačové instance (tř. 123), ID počítače (tř #123) nebo štítek (tř. \"@Můj počítač\").",
"commands.computercraft.dump.open_path": "Ukázat soubory tohoto počítače", "commands.computercraft.dump.open_path": "Ukázat soubory tohoto počítače",
"commands.computercraft.dump.synopsis": "Ukázat stav počítačů.", "commands.computercraft.dump.synopsis": "Ukázat stav počítačů.",
"commands.computercraft.generic.additional_rows": "%d řádků navíc…", "commands.computercraft.generic.additional_rows": "%d řádků navíc…",
"commands.computercraft.generic.exception": "Neočekávaná chyba (%s)", "commands.computercraft.generic.exception": "Neočekávaná chyba (%s)",
"commands.computercraft.generic.no": "N", "commands.computercraft.generic.no": "N",
"commands.computercraft.generic.no_position": "<žádná pozice>",
"commands.computercraft.generic.position": "%s, %s, %s", "commands.computercraft.generic.position": "%s, %s, %s",
"commands.computercraft.generic.yes": "A", "commands.computercraft.generic.yes": "A",
"commands.computercraft.help.desc": "Ukáže tuto pomocnou zprávu", "commands.computercraft.help.desc": "Ukáže tuto pomocnou zprávu",
"commands.computercraft.help.no_children": "%s nemá žádné podpříkazy",
"commands.computercraft.help.no_command": "Neznámý příkaz '%s'", "commands.computercraft.help.no_command": "Neznámý příkaz '%s'",
"commands.computercraft.help.synopsis": "Zaslat pomoc pro specifický příkaz", "commands.computercraft.help.synopsis": "Zaslat pomoc pro specifický příkaz",
"commands.computercraft.queue.desc": "Poslat událost computer_command příkazovému počítači, procházející přes ostatní argumenty. Toto je většinou určeno pro tvůrce map, chovající se jako pro počítač více přátelská verze příkazu /trigger. Jakýkoliv hráč může spustit příkaz, což by ale bylo většinou uděláno přes událost kliknutím na textový komponent.",
"commands.computercraft.queue.synopsis": "Poslat událost computer_command příkazovému počítači", "commands.computercraft.queue.synopsis": "Poslat událost computer_command příkazovému počítači",
"commands.computercraft.reload.desc": "Znovu načíst konfigurační soubor ComputerCraftu",
"commands.computercraft.reload.done": "Konfigurace znovu načtena",
"commands.computercraft.reload.synopsis": "Znovu načíst konfigurační soubor ComputerCraftu",
"commands.computercraft.shutdown.desc": "Vypnout zapsané počítače nebo všechny pokud nejsou specifikovány. Můžeš specifikovat ID počítačové instance (tř. 123) ID počítače (tř. #123) nebo štítek (tř. \"@Můj počítač\").", "commands.computercraft.shutdown.desc": "Vypnout zapsané počítače nebo všechny pokud nejsou specifikovány. Můžeš specifikovat ID počítačové instance (tř. 123) ID počítače (tř. #123) nebo štítek (tř. \"@Můj počítač\").",
"commands.computercraft.shutdown.done": "Vypnuto %s/%s počítačů", "commands.computercraft.shutdown.done": "Vypnuto %s/%s počítačů",
"commands.computercraft.shutdown.synopsis": "Vypne počítače na dálku.", "commands.computercraft.shutdown.synopsis": "Vypne počítače na dálku.",
"commands.computercraft.tp.not_player": "Nelze otevřít terminál pro nehráče",
"commands.computercraft.tp.not_there": "Nelze najít počítač ve světě",
"commands.computercraft.track.dump.no_timings": "Nejsou k dispozici žádná časování",
"commands.computercraft.track.dump.synopsis": "Stáhnout nejnovější výsledky sledování",
"commands.computercraft.track.start.synopsis": "Začít sledovat všechny počítače",
"commands.computercraft.track.stop.action": "Klikni pro přestání sledování",
"commands.computercraft.track.synopsis": "Sledovat časy spuštení počítačů.",
"commands.computercraft.turn_on.done": "Zapnuto %s/%s počítačů",
"commands.computercraft.view.action": "Ukázat tento počítač",
"commands.computercraft.view.not_player": "Nelze otevřít terminál pro nehráče",
"commands.computercraft.view.synopsis": "Ukázat terminál počítače.",
"gui.computercraft.config.command_require_creative": "Příkazové počítače vyžadují tvořivý režim",
"upgrade.computercraft.wireless_modem_advanced.adjective": "Endový",
"upgrade.computercraft.wireless_modem_normal.adjective": "Bezdrátový",
"upgrade.minecraft.crafting_table.adjective": "Tvořivý",
"upgrade.minecraft.diamond_axe.adjective": "Kácející",
"upgrade.minecraft.diamond_hoe.adjective": "Farmářský",
"upgrade.minecraft.diamond_pickaxe.adjective": "Těžební",
"tracking_field.computercraft.avg": "%s (průměr)",
"tracking_field.computercraft.computer_tasks.name": "Úlohy",
"tracking_field.computercraft.coroutines_dead.name": "Vyhozené koprogramy",
"tracking_field.computercraft.count": "%s (počet)",
"tracking_field.computercraft.fs.name": "Operace souborového systému",
"tracking_field.computercraft.http_download.name": "Stahování HTTP",
"tracking_field.computercraft.http_requests.name": "Požadavky HTTP",
"tracking_field.computercraft.http_upload.name": "Nahrávání HTTP",
"tracking_field.computercraft.max": "%s (max)",
"tracking_field.computercraft.peripheral.name": "Periferní volání",
"tracking_field.computercraft.server_tasks.name": "Serverové úlohy",
"tracking_field.computercraft.turtle_ops.name": "Operace robotů",
"tracking_field.computercraft.websocket_outgoing.name": "Odchozí websocket",
"upgrade.minecraft.diamond_shovel.adjective": "Kopací",
"upgrade.minecraft.diamond_sword.adjective": "Bojový",
"argument.computercraft.argument_expected": "Očekáván argument",
"argument.computercraft.tracking_field.no_field": "Neznámé pole '%s'",
"block.computercraft.turtle_advanced.upgraded_twice": "Pokročilý %s %s robot",
"commands.computercraft.desc": "Příkaz /computercraft dává různé ladící a správcovské nástroje pro ovládání a interakci s počítači.",
"commands.computercraft.dump.desc": "Ukáže stav všech počítačů nebo specifické informace o jednom počítači. Můžeš specifikovat ID počítačové instance (tř. 123), ID počítače (tř #123) nebo štítek (tř. \"@Můj počítač\").",
"commands.computercraft.generic.no_position": "<žádná pozice>",
"commands.computercraft.help.no_children": "%s nemá žádné podpříkazy",
"commands.computercraft.queue.desc": "Poslat událost computer_command příkazovému počítači, procházející přes ostatní argumenty. Toto je většinou určeno pro tvůrce map, chovající se jako pro počítač více přátelská verze příkazu /trigger. Jakýkoliv hráč může spustit příkaz, což by ale bylo většinou uděláno přes událost kliknutím na textový komponent.",
"commands.computercraft.synopsis": "Různé příkazy pro ovládání počítačů.", "commands.computercraft.synopsis": "Různé příkazy pro ovládání počítačů.",
"commands.computercraft.tp.action": "Teleportovat se k počítači", "commands.computercraft.tp.action": "Teleportovat se k počítači",
"commands.computercraft.tp.desc": "Teleportovat se na místo počítače. Můžeš specifikovat ID počítačové instance (tř. 123) nebo ID počítače (tř. #123).", "commands.computercraft.tp.desc": "Teleportovat se na místo počítače. Můžeš specifikovat ID počítačové instance (tř. 123) nebo ID počítače (tř. #123).",
"commands.computercraft.tp.not_player": "Nelze otevřít terminál pro nehráče",
"commands.computercraft.tp.not_there": "Nelze najít počítač ve světě",
"commands.computercraft.tp.synopsis": "Teleportovat se ke specifickému počítači.", "commands.computercraft.tp.synopsis": "Teleportovat se ke specifickému počítači.",
"commands.computercraft.track.desc": "Sledovat jak dlouho se počítače spustí, a také kolik událostí zpracují. Toto uvádí informace v podobné cestě jako /forge track a může být dobré pro diagnostiku lagu.", "commands.computercraft.track.desc": "Sledovat jak dlouho se počítače spustí, a také kolik událostí zpracují. Toto uvádí informace v podobné cestě jako /forge track a může být dobré pro diagnostiku lagu.",
"commands.computercraft.track.dump.computer": "Počítač", "commands.computercraft.track.dump.computer": "Počítač",
"commands.computercraft.track.dump.desc": "Stáhnout nejnovější výsledky sledování počítačů.", "commands.computercraft.track.dump.desc": "Stáhnout nejnovější výsledky sledování počítačů.",
"upgrade.computercraft.speaker.adjective": "Hlučný", "commands.computercraft.track.dump.no_timings": "Nejsou k dispozici žádná časování",
"tracking_field.computercraft.coroutines_created.name": "Vytvořené koprogramy", "commands.computercraft.track.dump.synopsis": "Stáhnout nejnovější výsledky sledování",
"tracking_field.computercraft.websocket_incoming.name": "Přichozí websocket",
"commands.computercraft.track.start.desc": "Začne sledovat spouštěcí časy všech počítačů a počty událostí. Toto vyhodí výsledky předchozích spuštení.", "commands.computercraft.track.start.desc": "Začne sledovat spouštěcí časy všech počítačů a počty událostí. Toto vyhodí výsledky předchozích spuštení.",
"commands.computercraft.track.start.stop": "Spusť %s pro zastavení sledování a ukázání výsledků", "commands.computercraft.track.start.stop": "Spusť %s pro zastavení sledování a ukázání výsledků",
"commands.computercraft.track.start.synopsis": "Začít sledovat všechny počítače",
"commands.computercraft.track.stop.action": "Klikni pro přestání sledování",
"commands.computercraft.track.stop.desc": "Přestane sledovat všechny události a časy spuštení počítačů", "commands.computercraft.track.stop.desc": "Přestane sledovat všechny události a časy spuštení počítačů",
"commands.computercraft.track.stop.not_enabled": "Nyní se nesledují žádné počítače", "commands.computercraft.track.stop.not_enabled": "Nyní se nesledují žádné počítače",
"commands.computercraft.track.stop.synopsis": "Přestat sledovat všechny počítače", "commands.computercraft.track.stop.synopsis": "Přestat sledovat všechny počítače",
"commands.computercraft.track.synopsis": "Sledovat časy spuštení počítačů.",
"commands.computercraft.turn_on.desc": "Zapne počítače na seznamu. Můžeš specifikovat ID počítačové instance (tř. 123), ID počítače (tř. 123) nebo štítek (tř. \"@Můj počítač\").", "commands.computercraft.turn_on.desc": "Zapne počítače na seznamu. Můžeš specifikovat ID počítačové instance (tř. 123), ID počítače (tř. 123) nebo štítek (tř. \"@Můj počítač\").",
"commands.computercraft.turn_on.done": "Zapnuto %s/%s počítačů",
"commands.computercraft.turn_on.synopsis": "Zapnout počítače na dálku.", "commands.computercraft.turn_on.synopsis": "Zapnout počítače na dálku.",
"commands.computercraft.view.action": "Ukázat tento počítač",
"commands.computercraft.view.desc": "Otevře terminál počítače, umožnující dálkové ovládání počítače. Toto nedává přístup k inventářům robotů. Můžeš specifikovat ID počítačové instance (tř. 123) nebo ID počítače (tř. #123).", "commands.computercraft.view.desc": "Otevře terminál počítače, umožnující dálkové ovládání počítače. Toto nedává přístup k inventářům robotů. Můžeš specifikovat ID počítačové instance (tř. 123) nebo ID počítače (tř. #123).",
"commands.computercraft.view.not_player": "Nelze otevřít terminál pro nehráče",
"commands.computercraft.view.synopsis": "Ukázat terminál počítače.",
"gui.computercraft.config.command_require_creative": "Příkazové počítače vyžadují tvořivý režim",
"gui.computercraft.config.command_require_creative.tooltip": "Vyžadovat, aby hráči byli v tvořivém režimu a měli operátorská prává pro interakci\ns příkazovýmí počítači. Toto je základní chování pro vanilla Příkazové bloky.", "gui.computercraft.config.command_require_creative.tooltip": "Vyžadovat, aby hráči byli v tvořivém režimu a měli operátorská prává pro interakci\ns příkazovýmí počítači. Toto je základní chování pro vanilla Příkazové bloky.",
"gui.computercraft.config.computer_space_limit": "Limit počítačového místa (v bytech)", "gui.computercraft.config.computer_space_limit": "Limit počítačového místa (v bytech)",
"gui.computercraft.config.disable_lua51_features": "Vypnout Lua 5.1 funkce",
"gui.computercraft.config.execution": "Spuštení",
"gui.computercraft.config.execution.computer_threads": "Počítačová vlákna",
"gui.computercraft.config.execution.max_main_computer_time": "Serverový časový limit počítačových ticků",
"gui.computercraft.config.http": "HTTP",
"gui.computercraft.config.http.bandwidth.global_download": "Globální limit stahování",
"gui.computercraft.config.http.bandwidth.global_upload": "Globální nahrávací limit",
"gui.computercraft.config.computer_space_limit.tooltip": "Limit diskového místa pro počítače a roboty, v bytech.", "gui.computercraft.config.computer_space_limit.tooltip": "Limit diskového místa pro počítače a roboty, v bytech.",
"gui.computercraft.config.default_computer_settings": "Vychozí nastavení počítače", "gui.computercraft.config.default_computer_settings": "Vychozí nastavení počítače",
"gui.computercraft.config.default_computer_settings.tooltip": "Čárkami oddělený seznam základních systémových nastavení pro nastavení na nových počítačích.\nPříklad: \"shell.autocomplete=false,lua.autocomplete=false,edit.autocomplete=false\"\nvypne všechno automatické vyplňování.", "gui.computercraft.config.default_computer_settings.tooltip": "Čárkami oddělený seznam základních systémových nastavení pro nastavení na nových počítačích.\nPříklad: \"shell.autocomplete=false,lua.autocomplete=false,edit.autocomplete=false\"\nvypne všechno automatické vyplňování.",
"gui.computercraft.config.disable_lua51_features": "Vypnout Lua 5.1 funkce",
"gui.computercraft.config.disable_lua51_features.tooltip": "Nastav toto na pravdivou hodnotu pro vypnutí Lua 5.1 funkcí které budou odstraněny v budoucí\naktualizaci. Dobré pro ověření kompatibilty tvých programů nyní a předem.", "gui.computercraft.config.disable_lua51_features.tooltip": "Nastav toto na pravdivou hodnotu pro vypnutí Lua 5.1 funkcí které budou odstraněny v budoucí\naktualizaci. Dobré pro ověření kompatibilty tvých programů nyní a předem.",
"gui.computercraft.config.disabled_generic_methods": "Vypnuté obecné metody",
"gui.computercraft.config.execution": "Spuštení",
"gui.computercraft.config.execution.computer_threads": "Počítačová vlákna",
"gui.computercraft.config.execution.computer_threads.tooltip": "Nastavit číslo vláken, na kterých můžou běžet počítače. Vyšší číslo znamená že\nvíce počítačů může běžet najednou, ale to může způsobit lag. Prosím měj na paměti že nejaké módy nemusí\nfungovat s počtem vláken vyšší než 1. Používej opatrně.\nHodnota: > 1", "gui.computercraft.config.execution.computer_threads.tooltip": "Nastavit číslo vláken, na kterých můžou běžet počítače. Vyšší číslo znamená že\nvíce počítačů může běžet najednou, ale to může způsobit lag. Prosím měj na paměti že nejaké módy nemusí\nfungovat s počtem vláken vyšší než 1. Používej opatrně.\nHodnota: > 1",
"gui.computercraft.config.execution.max_main_computer_time": "Serverový časový limit počítačových ticků",
"gui.computercraft.config.execution.max_main_computer_time.tooltip": "Ideální maximální v kterém počítač se může spustit na tick, v milisekundách.\nPoznámka, možná přejdeme přes tento limit protože tu nelze rozhodnout jak\ndlouho to bude trvat - toto se zaměřuje jako vrchní hranice průměrného času.\nRozsah: > 1",
"gui.computercraft.config.execution.max_main_global_time": "Globální časový limit serverových ticků", "gui.computercraft.config.execution.max_main_global_time": "Globální časový limit serverových ticků",
"gui.computercraft.config.http.bandwidth": "Šířka pásma",
"gui.computercraft.config.http.bandwidth.global_download.tooltip": "Počet bytů které můžou být staženy za sekundu. Toto je sdíleno mezi všemi počítači. (byty/s)\nHodnota: > 1",
"gui.computercraft.config.http.enabled": "Zapnout HTTP API",
"gui.computercraft.config.execution.max_main_global_time.tooltip": "Maximální čas který může být využit pro spouštení úloh v jednom ticku,\nv milisekundách.\nPoznámka, možná přejdeme přes tento limit protože nelze rozhodnout jak\ndlouho to bude trvat - toto se zaměřuje jako horní hranice průměrného času.\nRozsah: > 1", "gui.computercraft.config.execution.max_main_global_time.tooltip": "Maximální čas který může být využit pro spouštení úloh v jednom ticku,\nv milisekundách.\nPoznámka, možná přejdeme přes tento limit protože nelze rozhodnout jak\ndlouho to bude trvat - toto se zaměřuje jako horní hranice průměrného času.\nRozsah: > 1",
"gui.computercraft.config.execution.tooltip": "Ovládá chování počítačového spuštení. Toto je většně určeno pro\nfine-tuning serverů, a obecně by nemělo být dotčeno.", "gui.computercraft.config.execution.tooltip": "Ovládá chování počítačového spuštení. Toto je většně určeno pro\nfine-tuning serverů, a obecně by nemělo být dotčeno.",
"gui.computercraft.config.floppy_space_limit": "Limit místa disket (v bajtech)", "gui.computercraft.config.floppy_space_limit": "Limit místa disket (v bajtech)",
"gui.computercraft.config.floppy_space_limit.tooltip": "Limit místa pro diskety, v bajtech.", "gui.computercraft.config.floppy_space_limit.tooltip": "Limit místa pro diskety, v bajtech.",
"gui.computercraft.config.http": "HTTP",
"gui.computercraft.config.http.bandwidth": "Šířka pásma",
"gui.computercraft.config.http.bandwidth.global_download": "Globální limit stahování",
"gui.computercraft.config.http.bandwidth.global_download.tooltip": "Počet bytů které můžou být staženy za sekundu. Toto je sdíleno mezi všemi počítači. (byty/s)\nHodnota: > 1",
"gui.computercraft.config.http.bandwidth.global_upload": "Globální nahrávací limit",
"gui.computercraft.config.http.bandwidth.global_upload.tooltip": "Počet bytů které můžou být nahrány za sekundu. Toto je sdíleno mezi všemi počítači (bajty/s).\nRozsah: > 1",
"gui.computercraft.config.http.bandwidth.tooltip": "Omezuje šířku pásma použitou počítači.", "gui.computercraft.config.http.bandwidth.tooltip": "Omezuje šířku pásma použitou počítači.",
"gui.computercraft.config.http.enabled": "Zapnout HTTP API",
"gui.computercraft.config.http.enabled.tooltip": "Zapnout \"http\" API na počítačích. Vypnutí tohoto také vypne programy \"pastebin\" a \"wget\"\nna kterých záleží hodně uživatelům. Je doporučeno nechat toto zapnuté a použít\nmožnost konfigurace \"rules\" pro určení více jemné kontroly.",
"gui.computercraft.config.http.max_requests": "Maximální souběžné požadavky", "gui.computercraft.config.http.max_requests": "Maximální souběžné požadavky",
"gui.computercraft.config.http.max_requests.tooltip": "Počet HTTP požadavků které počítač může udělat v jedné chvíli. Požadavky navíc\nbudou zaslány do fronty, a poslány když běžící požadavky byly dokončeny. Nastav\nna 0 pro neomezeno.\nRozsah: > 0", "gui.computercraft.config.http.max_requests.tooltip": "Počet HTTP požadavků které počítač může udělat v jedné chvíli. Požadavky navíc\nbudou zaslány do fronty, a poslány když běžící požadavky byly dokončeny. Nastav\nna 0 pro neomezeno.\nRozsah: > 0",
"gui.computercraft.config.http.max_websockets": "Maximální souběžné websockety", "gui.computercraft.config.http.max_websockets": "Maximální souběžné websockety",
"gui.computercraft.config.http.max_websockets.tooltip": "Počet websocketů které může mít počítač otevřené najednou: Nastav na 0 pro neomezeno.\nRozsah: > 1", "gui.computercraft.config.http.max_websockets.tooltip": "Počet websocketů které může mít počítač otevřené najednou: Nastav na 0 pro neomezeno.\nRozsah: > 1",
"gui.computercraft.config.http.proxy.host": "Název hostitele",
"gui.computercraft.config.http.proxy.host.tooltip": "Název hostitele nebo IP adresa proxy serveru.",
"gui.computercraft.config.http.proxy.port": "Port",
"gui.computercraft.config.http.proxy.port.tooltip": "Port proxy serveru.\nRozsah: 1 ~ 65536",
"gui.computercraft.config.http.proxy.type": "Typ proxy",
"gui.computercraft.config.http.proxy.type.tooltip": "Typ proxy k použití.\nPovolené hodnoty: HTTP, HTTPS, SOCKS4, SOCKS5",
"gui.computercraft.config.http.rules": "Pravidla povolení/zakázání", "gui.computercraft.config.http.rules": "Pravidla povolení/zakázání",
"gui.computercraft.config.http.rules.tooltip": "Seznam pravidel které ovládají chování \"http\" API pro specifické domény nebo\nIP adresy. Každé pravidlo je položka s 'hostem' pro shodování, a také série\nvlastností. Pravidla jsou hodnocena v řádech, což znamená že dřívejší pravidla přepíšou\npozdější.\nHost může být jméno domény (\"pastebin.com\") shoda (\"*.pastebin.com\") nebo\nnotace CIDR (\"127.0.0.0/8\").\nPokud nejsou pravidla, doména je blokována.",
"gui.computercraft.config.http.tooltip": "Ovládá HTTP API", "gui.computercraft.config.http.tooltip": "Ovládá HTTP API",
"gui.computercraft.config.http.websocket_enabled": "Zapnout websockety", "gui.computercraft.config.http.websocket_enabled": "Zapnout websockety",
"gui.computercraft.config.http.websocket_enabled.tooltip": "Zapnout použití HTTP websocketů. Toto vyžaduje možnost \"http_enable\" aby byla zapnuta.",
"gui.computercraft.config.log_computer_errors": "Zapisovat počítačové chyby", "gui.computercraft.config.log_computer_errors": "Zapisovat počítačové chyby",
"gui.computercraft.config.log_computer_errors.tooltip": "Zapisovat chyby hozené periferiemi a ostatními Lua objekty. Toto usnadňuje\nautorům módů ladění problémů, ale může způsobit spam zápisů když hráči\npoužívají problematické metody.",
"gui.computercraft.config.maximum_open_files": "Maximální počet souborů otevřených na počítačích", "gui.computercraft.config.maximum_open_files": "Maximální počet souborů otevřených na počítačích",
"gui.computercraft.config.maximum_open_files.tooltip": "Nastavit kolik soborů může mít jeden počítač otevřených najednou. Nastav na 0 pro neomezeno.\nRozsah: > 0", "gui.computercraft.config.maximum_open_files.tooltip": "Nastavit kolik soborů může mít jeden počítač otevřených najednou. Nastav na 0 pro neomezeno.\nRozsah: > 0",
"gui.computercraft.config.monitor_distance": "Dálka monitoru",
"gui.computercraft.config.monitor_distance.tooltip": "Maximální dálka kde se budou monitory načítač. Toto je vychozí na standartní limit\ntile entit, ale může být prodloužen pokud chceš stavět větší monitory.\nRozsah: 16 ~ 1024",
"gui.computercraft.config.monitor_renderer": "Monitorový renderer", "gui.computercraft.config.monitor_renderer": "Monitorový renderer",
"gui.computercraft.config.monitor_renderer.tooltip": "Renderer, který bude použit pro monitory. Obecně by toto mělo být nastaveno na \"nejlepší\" - pokud\nmonitory mají problémy s výkonem, možná budeš chtít experimentovat s alternativními\nrenderery.\nPovolené hodnoty: BEST, TBO, VBO",
"gui.computercraft.config.peripheral": "Periferie", "gui.computercraft.config.peripheral": "Periferie",
"gui.computercraft.config.peripheral.command_block_enabled": "Zapnout periferii příkazových bloků", "gui.computercraft.config.peripheral.command_block_enabled": "Zapnout periferii příkazových bloků",
"gui.computercraft.config.peripheral.command_block_enabled.tooltip": "Zapnout podporu periferie příkazových bloků", "gui.computercraft.config.peripheral.command_block_enabled.tooltip": "Zapnout podporu periferie příkazových bloků",
@ -142,80 +131,94 @@
"gui.computercraft.config.peripheral.modem_high_altitude_range_during_storm": "Dosah modemu (vysoká výška, špatné počasí)", "gui.computercraft.config.peripheral.modem_high_altitude_range_during_storm": "Dosah modemu (vysoká výška, špatné počasí)",
"gui.computercraft.config.peripheral.modem_high_altitude_range_during_storm.tooltip": "Dosah bezdrátových modemů v maximální výšce v bouřlivém počasí, v metrech.\nRozsah: 0 ~ 100000", "gui.computercraft.config.peripheral.modem_high_altitude_range_during_storm.tooltip": "Dosah bezdrátových modemů v maximální výšce v bouřlivém počasí, v metrech.\nRozsah: 0 ~ 100000",
"gui.computercraft.config.peripheral.modem_range": "Dosah modemu (vychozí)", "gui.computercraft.config.peripheral.modem_range": "Dosah modemu (vychozí)",
"gui.computercraft.config.peripheral.modem_range.tooltip": "Dosah bezdrátových modemů v nízké výšce v jasném počasí, v metrech.\nRozsah: 0 ~ 100000",
"gui.computercraft.config.peripheral.modem_range_during_storm": "Dosah modemu (špatné počasí)", "gui.computercraft.config.peripheral.modem_range_during_storm": "Dosah modemu (špatné počasí)",
"gui.computercraft.config.peripheral.modem_range_during_storm.tooltip": "Dosah bezdrátových modemů v nízké výšce v špatném počasí, v metrech.\nRozsah: 0 ~ 100000", "gui.computercraft.config.peripheral.modem_range_during_storm.tooltip": "Dosah bezdrátových modemů v nízké výšce v špatném počasí, v metrech.\nRozsah: 0 ~ 100000",
"gui.computercraft.config.peripheral.monitor_bandwidth": "šířka pásma monitorů", "gui.computercraft.config.peripheral.monitor_bandwidth": "šířka pásma monitorů",
"gui.computercraft.config.peripheral.monitor_bandwidth.tooltip": "Limit kolik monitorových dat může být posláno *za tick*. Poznámka:\n - Šířka pásma je měřena před kompresí, takže data zaslaná klientovi jsou\nmenší.\n - Toto ignoruje počet hráčů kterým je poslán packet. Aktualizování monitoru pro\njednoho hráče spotřebuje stejný limit šířky pásma jako posíláním 20.\n - Plně velký monitor posílá ~25 kb dat. Takže vychozí hodnota (1MB) dovoluje ~40\nmonitorům aby byly aktualizovány v jednom ticku.\nNastav na 0 pro vypnutí.\nRozsah: > 0",
"gui.computercraft.config.peripheral.tooltip": "Různé možnosti o periferiích.", "gui.computercraft.config.peripheral.tooltip": "Různé možnosti o periferiích.",
"gui.computercraft.config.term_sizes": "Velikosti terminálu",
"gui.computercraft.config.term_sizes.computer": "Počítač", "gui.computercraft.config.term_sizes.computer": "Počítač",
"gui.computercraft.config.term_sizes.computer.height": "Výška terminálu", "gui.computercraft.config.term_sizes.computer.height": "Výška terminálu",
"gui.computercraft.config.term_sizes.computer.height.tooltip": "Rozsash: 1 ~ 255", "gui.computercraft.config.term_sizes.computer.height.tooltip": "Rozsash: 1 ~ 255",
"gui.computercraft.config.term_sizes.computer.tooltip": "Velikost počítačového terminálu.", "gui.computercraft.config.term_sizes.computer.tooltip": "Velikost počítačového terminálu.",
"gui.computercraft.config.term_sizes.computer.width": "Šířka terminálu",
"gui.computercraft.config.term_sizes.computer.width.tooltip": "Rozsah: 1 ~ 255", "gui.computercraft.config.term_sizes.computer.width.tooltip": "Rozsah: 1 ~ 255",
"gui.computercraft.config.term_sizes.monitor": "Monitor", "gui.computercraft.config.term_sizes.monitor": "Monitor",
"gui.computercraft.config.term_sizes.monitor.height": "Maximální výška monitoru", "gui.computercraft.config.term_sizes.monitor.height": "Maximální výška monitoru",
"gui.computercraft.config.term_sizes.monitor.height.tooltip": "Rozsah: 1 ~ 32", "gui.computercraft.config.term_sizes.monitor.height.tooltip": "Rozsah: 1 ~ 32",
"gui.computercraft.config.term_sizes.monitor.tooltip": "Maximální velikost monitorů (v blocích).",
"gui.computercraft.config.term_sizes.monitor.width": "Maximální šířka monitoru", "gui.computercraft.config.term_sizes.monitor.width": "Maximální šířka monitoru",
"gui.computercraft.config.term_sizes.monitor.width.tooltip": "Rozsah: 1 ~ 32", "gui.computercraft.config.term_sizes.monitor.width.tooltip": "Rozsah: 1 ~ 32",
"gui.computercraft.config.term_sizes.pocket_computer": "Kapesní počítač", "gui.computercraft.config.term_sizes.pocket_computer": "Kapesní počítač",
"gui.computercraft.config.term_sizes.pocket_computer.height": "Výška terminálu", "gui.computercraft.config.term_sizes.pocket_computer.height": "Výška terminálu",
"gui.computercraft.config.term_sizes.pocket_computer.height.tooltip": "Rozsah: 1 ~ 255",
"gui.computercraft.config.term_sizes.pocket_computer.tooltip": "Velikost terminálu kapesního počítače.", "gui.computercraft.config.term_sizes.pocket_computer.tooltip": "Velikost terminálu kapesního počítače.",
"gui.computercraft.config.term_sizes.pocket_computer.width": "Šířka terminálu", "gui.computercraft.config.term_sizes.pocket_computer.width": "Šířka terminálu",
"gui.computercraft.config.term_sizes.pocket_computer.width.tooltip": "Rozsah: 1 ~ 255", "gui.computercraft.config.term_sizes.pocket_computer.width.tooltip": "Rozsah: 1 ~ 255",
"gui.computercraft.config.term_sizes.tooltip": "Nastav velikost terminálu různých počítačů.\nVětší terminály vyžadují větší šířku pásma, takže používej opatrně.",
"gui.computercraft.config.turtle": "Roboti", "gui.computercraft.config.turtle": "Roboti",
"gui.computercraft.config.turtle.advanced_fuel_limit": "Limit paliva pokročilého robota", "gui.computercraft.config.turtle.advanced_fuel_limit": "Limit paliva pokročilého robota",
"gui.computercraft.config.turtle.advanced_fuel_limit.tooltip": "Limit paliva pro pokročilé roboty.\nRozsah: > 0", "gui.computercraft.config.turtle.advanced_fuel_limit.tooltip": "Limit paliva pro pokročilé roboty.\nRozsah: > 0",
"gui.computercraft.config.turtle.can_push": "Roboti můžou strkat stvoření",
"gui.computercraft.config.turtle.can_push.tooltip": "Jestli nastaveno na pravdivou hodnotu, Roboti budou odstrkávat stvoření z cesty místo zastavení pokud\nje tu místo.",
"gui.computercraft.config.turtle.need_fuel": "Zapnout palivo", "gui.computercraft.config.turtle.need_fuel": "Zapnout palivo",
"gui.computercraft.config.turtle.need_fuel.tooltip": "Nastaví jestli roboti potřebují palivo pro pohyb.", "gui.computercraft.config.turtle.need_fuel.tooltip": "Nastaví jestli roboti potřebují palivo pro pohyb.",
"gui.computercraft.config.turtle.normal_fuel_limit": "Limit paliva robotů", "gui.computercraft.config.turtle.normal_fuel_limit": "Limit paliva robotů",
"gui.computercraft.config.turtle.normal_fuel_limit.tooltip": "Limit paliva pro roboty.\nRozsah: > 0", "gui.computercraft.config.turtle.normal_fuel_limit.tooltip": "Limit paliva pro roboty.\nRozsah: > 0",
"gui.computercraft.config.turtle.tooltip": "Různé možnosti o robotech.", "gui.computercraft.config.turtle.tooltip": "Různé možnosti o robotech.",
"gui.computercraft.config.upload_max_size": "Limit velikosti nahrávaného souboru (v bajtech)",
"gui.computercraft.config.upload_nag_delay": "Nahrání zpoždění nag", "gui.computercraft.config.upload_nag_delay": "Nahrání zpoždění nag",
"gui.computercraft.config.upload_nag_delay.tooltip": "Zpoždění v sekundách po kterém oznámíme o nezpracovaných importech. Nastav na 0 pro vypnutí.\nRozsah: 0 ~ 60",
"gui.computercraft.pocket_computer_overlay": "Kapesní počítač otevřen. Zmáčkni ESC pro uzavření.", "gui.computercraft.pocket_computer_overlay": "Kapesní počítač otevřen. Zmáčkni ESC pro uzavření.",
"gui.computercraft.terminal": "Počítačový terminál",
"gui.computercraft.tooltip.computer_id": "ID počítače: %s", "gui.computercraft.tooltip.computer_id": "ID počítače: %s",
"gui.computercraft.tooltip.copy": "Kopírovat do schránky", "gui.computercraft.tooltip.copy": "Kopírovat do schránky",
"gui.computercraft.tooltip.disk_id": "ID disku: %s", "gui.computercraft.tooltip.disk_id": "ID disku: %s",
"gui.computercraft.tooltip.terminate": "Zastavit nyní běžící kód", "gui.computercraft.tooltip.terminate": "Zastavit nyní běžící kód",
"gui.computercraft.tooltip.terminate.key": "Podrž Ctrl+T", "gui.computercraft.tooltip.terminate.key": "Podrž Ctrl+T",
"gui.computercraft.tooltip.turn_off": "Vypnout tento počítač",
"gui.computercraft.tooltip.turn_off.key": "Zmáčkni Ctrl+S", "gui.computercraft.tooltip.turn_off.key": "Zmáčkni Ctrl+S",
"gui.computercraft.tooltip.turn_on": "Zapnout teno počítač", "gui.computercraft.tooltip.turn_on": "Zapnout teno počítač",
"gui.computercraft.upload.failed": "Nahrávání se nezdařilo", "gui.computercraft.upload.failed": "Nahrávání se nezdařilo",
"gui.computercraft.upload.failed.computer_off": "Před nahráním souborů musíš vypnout počítač.",
"gui.computercraft.upload.failed.corrupted": "Soubory byly porušeny při nahrávání. Prosím zkus to znovu.", "gui.computercraft.upload.failed.corrupted": "Soubory byly porušeny při nahrávání. Prosím zkus to znovu.",
"gui.computercraft.upload.failed.generic": "Nahrávání souborů se nezdařilo (%s)", "gui.computercraft.upload.failed.generic": "Nahrávání souborů se nezdařilo (%s)",
"gui.computercraft.upload.failed.name_too_long": "Jména souborů pro nahrání jsou příliš dlouhá.", "gui.computercraft.upload.failed.name_too_long": "Jména souborů pro nahrání jsou příliš dlouhá.",
"gui.computercraft.upload.failed.too_many_files": "Nelze nahrát tolik souborů.", "gui.computercraft.upload.failed.too_many_files": "Nelze nahrát tolik souborů.",
"gui.computercraft.upload.failed.too_much": "Tvoje soubory jsou příliš velké pro nahrání.",
"gui.computercraft.upload.no_response": "Přenos souborů", "gui.computercraft.upload.no_response": "Přenos souborů",
"gui.computercraft.upload.no_response.msg": "Tvůj počítač nepoužil tvé přenesené soubory. Budeš muset spustit program %s a zkusit to znovu.", "gui.computercraft.upload.no_response.msg": "Tvůj počítač nepoužil tvé přenesené soubory. Budeš muset spustit program %s a zkusit to znovu.",
"item.computercraft.disk": "Disketa", "item.computercraft.disk": "Disketa",
"item.computercraft.pocket_computer_advanced": "Pokročilý kapesní počítač", "item.computercraft.pocket_computer_advanced": "Pokročilý kapesní počítač",
"item.computercraft.pocket_computer_advanced.upgraded": "Pokročilý %s kapesní počítač",
"item.computercraft.pocket_computer_normal": "Kapesní počítač", "item.computercraft.pocket_computer_normal": "Kapesní počítač",
"item.computercraft.pocket_computer_normal.upgraded": "%s kapesní počítač", "item.computercraft.pocket_computer_normal.upgraded": "%s kapesní počítač",
"item.computercraft.printed_pages": "Tisknuté stránky",
"item.computercraft.treasure_disk": "Disketa",
"gui.computercraft.config.log_computer_errors.tooltip": "Zapisovat chyby hozené periferiemi a ostatními Lua objekty. Toto usnadňuje\nautorům módů ladění problémů, ale může způsobit spam zápisů když hráči\npoužívají problematické metody.",
"gui.computercraft.config.monitor_distance": "Dálka monitoru",
"gui.computercraft.config.monitor_distance.tooltip": "Maximální dálka kde se budou monitory načítač. Toto je vychozí na standartní limit\ntile entit, ale může být prodloužen pokud chceš stavět větší monitory.\nRozsah: 16 ~ 1024",
"gui.computercraft.config.http.rules.tooltip": "Seznam pravidel které ovládají chování \"http\" API pro specifické domény nebo\nIP adresy. Každé pravidlo je položka s 'hostem' pro shodování, a také série\nvlastností. Pravidla jsou hodnocena v řádech, což znamená že dřívejší pravidla přepíšou\npozdější.\nHost může být jméno domény (\"pastebin.com\") shoda (\"*.pastebin.com\") nebo\nnotace CIDR (\"127.0.0.0/8\").\nPokud nejsou pravidla, doména je blokována.",
"gui.computercraft.config.monitor_renderer.tooltip": "Renderer, který bude použit pro monitory. Obecně by toto mělo být nastaveno na \"nejlepší\" - pokud\nmonitory mají problémy s výkonem, možná budeš chtít experimentovat s alternativními\nrenderery.\nPovolené hodnoty: BEST, TBO, VBO",
"gui.computercraft.config.term_sizes": "Velikosti terminálu",
"gui.computercraft.config.term_sizes.computer.width": "Šířka terminálu",
"gui.computercraft.config.term_sizes.monitor.tooltip": "Maximální velikost monitorů (v blocích).",
"gui.computercraft.config.term_sizes.pocket_computer.height.tooltip": "Rozsah: 1 ~ 255",
"gui.computercraft.config.term_sizes.tooltip": "Nastav velikost terminálu různých počítačů.\nVětší terminály vyžadují větší šířku pásma, takže používej opatrně.",
"gui.computercraft.config.turtle.can_push": "Roboti můžou strkat stvoření",
"gui.computercraft.config.turtle.can_push.tooltip": "Jestli nastaveno na pravdivou hodnotu, Roboti budou odstrkávat stvoření z cesty místo zastavení pokud\nje tu místo.",
"gui.computercraft.config.peripheral.modem_range.tooltip": "Dosah bezdrátových modemů v nízké výšce v jasném počasí, v metrech.\nRozsah: 0 ~ 100000",
"gui.computercraft.config.peripheral.monitor_bandwidth.tooltip": "Limit kolik monitorových dat může být posláno *za tick*. Poznámka:\n - Šířka pásma je měřena před kompresí, takže data zaslaná klientovi jsou\nmenší.\n - Toto ignoruje počet hráčů kterým je poslán packet. Aktualizování monitoru pro\njednoho hráče spotřebuje stejný limit šířky pásma jako posíláním 20.\n - Plně velký monitor posílá ~25 kb dat. Takže vychozí hodnota (1MB) dovoluje ~40\nmonitorům aby byly aktualizovány v jednom ticku.\nNastav na 0 pro vypnutí.\nRozsah: > 0",
"gui.computercraft.config.upload_nag_delay.tooltip": "Zpoždění v sekundách po kterém oznámíme o nezpracovaných importech. Nastav na 0 pro vypnutí.\nRozsah: 0 ~ 60",
"gui.computercraft.terminal": "Počítačový terminál",
"gui.computercraft.tooltip.turn_off": "Vypnout tento počítač",
"gui.computercraft.upload.failed.computer_off": "Před nahráním souborů musíš vypnout počítač.",
"gui.computercraft.upload.failed.too_much": "Tvoje soubory jsou příliš velké pro nahrání.",
"item.computercraft.pocket_computer_advanced.upgraded": "Pokročilý %s kapesní počítač",
"item.computercraft.printed_book": "Tisknutá kniha", "item.computercraft.printed_book": "Tisknutá kniha",
"item.computercraft.printed_page": "Tisknutá stránka", "item.computercraft.printed_page": "Tisknutá stránka",
"item.computercraft.printed_pages": "Tisknuté stránky",
"item.computercraft.treasure_disk": "Disketa",
"itemGroup.computercraft": "ComputerCraft", "itemGroup.computercraft": "ComputerCraft",
"gui.computercraft.config.execution.max_main_computer_time.tooltip": "Ideální maximální v kterém počítač se může spustit na tick, v milisekundách.\nPoznámka, možná přejdeme přes tento limit protože tu nelze rozhodnout jak\ndlouho to bude trvat - toto se zaměřuje jako vrchní hranice průměrného času.\nRozsah: > 1", "tracking_field.computercraft.avg": "%s (průměr)",
"gui.computercraft.config.http.bandwidth.global_upload.tooltip": "Počet bytů které můžou být nahrány za sekundu. Toto je sdíleno mezi všemi počítači (bajty/s).\nRozsah: > 1", "tracking_field.computercraft.computer_tasks.name": "Úlohy",
"gui.computercraft.config.http.enabled.tooltip": "Zapnout \"http\" API na počítačích. Toto také vypne programy \"pastebin\" a \"wget\"\nna kterých záleží hodně uživatelům. Je doporučeno nechat toto zapnuté a použít\nmožnost konfigurace \"rules\" pro určení více jemné kontroly.", "tracking_field.computercraft.count": "%s (počet)",
"gui.computercraft.config.http.websocket_enabled.tooltip": "Zapnout použití HTTP websocketů. Toto vyžaduje možnost \"http_enable\" aby byla zapnuta." "tracking_field.computercraft.fs.name": "Operace souborového systému",
"tracking_field.computercraft.http_download.name": "Stahování HTTP",
"tracking_field.computercraft.http_requests.name": "Požadavky HTTP",
"tracking_field.computercraft.http_upload.name": "Nahrávání HTTP",
"tracking_field.computercraft.max": "%s (max)",
"tracking_field.computercraft.peripheral.name": "Periferní volání",
"tracking_field.computercraft.server_tasks.name": "Serverové úlohy",
"tracking_field.computercraft.turtle_ops.name": "Operace robotů",
"tracking_field.computercraft.websocket_incoming.name": "Přichozí websocket",
"tracking_field.computercraft.websocket_outgoing.name": "Odchozí websocket",
"upgrade.computercraft.speaker.adjective": "Hlučný",
"upgrade.computercraft.wireless_modem_advanced.adjective": "Endový",
"upgrade.computercraft.wireless_modem_normal.adjective": "Bezdrátový",
"upgrade.minecraft.crafting_table.adjective": "Tvořivý",
"upgrade.minecraft.diamond_axe.adjective": "Kácející",
"upgrade.minecraft.diamond_hoe.adjective": "Farmářský",
"upgrade.minecraft.diamond_pickaxe.adjective": "Těžební",
"upgrade.minecraft.diamond_shovel.adjective": "Kopací",
"upgrade.minecraft.diamond_sword.adjective": "Bojový"
} }

View File

@ -40,9 +40,6 @@
"commands.computercraft.help.synopsis": "Zeigt die Hilfe für den angegebenen Befehl", "commands.computercraft.help.synopsis": "Zeigt die Hilfe für den angegebenen Befehl",
"commands.computercraft.queue.desc": "Sendet ein computer_command Event zusammen mit optionalen Argumenten an einen Befehlscomputer. Dieser Befehl wurde als eine Computerfreundliche Version von /trigger für Mapdesigner designed. Jeder Spieler kann diesen Befehl ausführen, weshalb er sich perfekt für ein Klickevent von z.B. Schildern oder Büchern eignet.", "commands.computercraft.queue.desc": "Sendet ein computer_command Event zusammen mit optionalen Argumenten an einen Befehlscomputer. Dieser Befehl wurde als eine Computerfreundliche Version von /trigger für Mapdesigner designed. Jeder Spieler kann diesen Befehl ausführen, weshalb er sich perfekt für ein Klickevent von z.B. Schildern oder Büchern eignet.",
"commands.computercraft.queue.synopsis": "Sendet ein computer_command Event an einen Befehlscomputer", "commands.computercraft.queue.synopsis": "Sendet ein computer_command Event an einen Befehlscomputer",
"commands.computercraft.reload.desc": "Liest die Konfigurationsdatei von ComputerCraft neu ein",
"commands.computercraft.reload.done": "Die Konfigurationsdatei wurde erfolgreich neu eingelesen",
"commands.computercraft.reload.synopsis": "Liest die Konfigurationsdatei von ComputerCraft neu ein",
"commands.computercraft.shutdown.desc": "Fährt die angegebenen Computer herunter. Falls keine Computer angegeben sind, werden alle heruntergefahren. Der Computer kann entweder über seine Instanz ID (z.B. 123), seine Computer ID (z.B. #123) oder seinen Namen (z.B. \"@Mein Computer\") angegeben werden.", "commands.computercraft.shutdown.desc": "Fährt die angegebenen Computer herunter. Falls keine Computer angegeben sind, werden alle heruntergefahren. Der Computer kann entweder über seine Instanz ID (z.B. 123), seine Computer ID (z.B. #123) oder seinen Namen (z.B. \"@Mein Computer\") angegeben werden.",
"commands.computercraft.shutdown.done": "Fährt die Computer %s/%s herunter", "commands.computercraft.shutdown.done": "Fährt die Computer %s/%s herunter",
"commands.computercraft.shutdown.synopsis": "Fährt den Computer aus der Ferne herunter.", "commands.computercraft.shutdown.synopsis": "Fährt den Computer aus der Ferne herunter.",
@ -72,12 +69,20 @@
"commands.computercraft.view.desc": "Zeigt das Terminal eines Computers. Dies ermöglicht, den Computer aus der Ferne zu steuern. Ein Zugriff auf das Inventar eines Turtles ist dadurch allerdings nicht möglich. Der Computer kann entweder über seine Instanz ID (z.B. 123), seine Computer ID (z.B. #123) oder seinen Namen (z.B. \"@Mein Computer\") angegeben werden.", "commands.computercraft.view.desc": "Zeigt das Terminal eines Computers. Dies ermöglicht, den Computer aus der Ferne zu steuern. Ein Zugriff auf das Inventar eines Turtles ist dadurch allerdings nicht möglich. Der Computer kann entweder über seine Instanz ID (z.B. 123), seine Computer ID (z.B. #123) oder seinen Namen (z.B. \"@Mein Computer\") angegeben werden.",
"commands.computercraft.view.not_player": "Konnte Terminal für Nicht-Spieler nicht öffnen", "commands.computercraft.view.not_player": "Konnte Terminal für Nicht-Spieler nicht öffnen",
"commands.computercraft.view.synopsis": "Zeigt das Terminal eines Computers.", "commands.computercraft.view.synopsis": "Zeigt das Terminal eines Computers.",
"gui.computercraft.config.command_require_creative": "Kommando-Computer benötigen den Kreativ-Modus",
"gui.computercraft.config.computer_space_limit": "Speicherplatz von Computern (Bytes)", "gui.computercraft.config.computer_space_limit": "Speicherplatz von Computern (Bytes)",
"gui.computercraft.config.computer_space_limit.tooltip": "Das Speicherplatzlimit für Computer und Turtles in Bytes.",
"gui.computercraft.config.default_computer_settings": "Computer-Standardeinstellungen", "gui.computercraft.config.default_computer_settings": "Computer-Standardeinstellungen",
"gui.computercraft.config.default_computer_settings.tooltip": "eine mit Komma separierte Liste an standardmäßige Systemeinstellungen für neuen Computern.\nBeispiel: \"shell.autocomplete=false,lua.autocomplete=false,edit.autocomplete=false\"\nwürde jegliche Autovervollständigung deaktivieren.",
"gui.computercraft.config.disable_lua51_features": "Lua 5.1-Funktionen deaktivieren", "gui.computercraft.config.disable_lua51_features": "Lua 5.1-Funktionen deaktivieren",
"gui.computercraft.config.disable_lua51_features.tooltip": "Beim aktivieren werden die Lua 5.1 Funktionieren deaktiviert, die in zukünftigen\nUpdates sowieso entfernt werden. Auf dieser Weise kann vorwärts Kompatibilität für Programme sichergestellt werden.",
"gui.computercraft.config.disabled_generic_methods": "Generische Methoden deaktiviert.",
"gui.computercraft.config.disabled_generic_methods.tooltip": "Eine Liste an generischen Methoden oder Methodenquellen zum deaktivieren.\nGenerische Methoden sind Methoden die zu einem block/block entity hinzugefügt werden, insofern kein expliziter Peripheral Provider\ngefunden wurde. Mitbetroffen sind Inventarmethoden (d.h. inventory.getItemDetail,\ninventory.pushItems) und, wenn in Forge gespielt wird, die fluid_storage und energy_storage\nMethoden.\nMethoden in dieser Liste können entweder Gruppen von Methoden (wie computercraft:inventory)\noder einzelne Methoden (wie computercraft:inventory#pushItems) sein.\n",
"gui.computercraft.config.execution": "Ausführung", "gui.computercraft.config.execution": "Ausführung",
"gui.computercraft.config.execution.computer_threads": "Computer Threads", "gui.computercraft.config.execution.computer_threads": "Computer Threads",
"gui.computercraft.config.execution.computer_threads.tooltip": "Setzt die Anzahl an Hintergrundprozessen fest, auf denen Computer laufen können. Eine hohe Nummer heißt,\ndass mehrere Computer zur selben Zeit laufen können, jedoch aber auch ggf. mehr Verzögerungen verursachen. Bitte beachte, dass manche mods\nnicht mit einer Anzahl an Hintergrundprozessen laufen, die höher als 1 ist. Benutze also mit bedacht.\nBereich: > 1",
"gui.computercraft.config.execution.max_main_computer_time": "Computer Servertick Zeitlimit", "gui.computercraft.config.execution.max_main_computer_time": "Computer Servertick Zeitlimit",
"gui.computercraft.config.execution.max_main_computer_time.tooltip": "Die ideale maximale Zeit, in der ein Computer laufen kann im innerhalb von einem tick in Millisekunden.\nBeachte, dass wir wahrscheinlich über diesen Limit gehen werden, da es unmöglich ist zu bestimmen,\nwie lange ein Computer brauchen wird. Dies wird also die höhere Grenze der durchschnittlichen Zeit darstellen.\nBereich: > 1",
"gui.computercraft.config.execution.max_main_global_time": "Globales Servertick Zeitlimit", "gui.computercraft.config.execution.max_main_global_time": "Globales Servertick Zeitlimit",
"gui.computercraft.config.floppy_space_limit": "Speicherplatz von Disketten (Bytes)", "gui.computercraft.config.floppy_space_limit": "Speicherplatz von Disketten (Bytes)",
"gui.computercraft.config.http": "HTTP", "gui.computercraft.config.http": "HTTP",
@ -112,8 +117,6 @@
"item.computercraft.printed_pages": "Gedruckte Seiten", "item.computercraft.printed_pages": "Gedruckte Seiten",
"item.computercraft.treasure_disk": "Diskette", "item.computercraft.treasure_disk": "Diskette",
"itemGroup.computercraft": "ComputerCraft", "itemGroup.computercraft": "ComputerCraft",
"tracking_field.computercraft.coroutines_created.name": "Koroutinen erstellt",
"tracking_field.computercraft.coroutines_dead.name": "Koroutinen gelöscht",
"tracking_field.computercraft.fs.name": "Dateisystem Operationen", "tracking_field.computercraft.fs.name": "Dateisystem Operationen",
"tracking_field.computercraft.http_download.name": "HTTP Download", "tracking_field.computercraft.http_download.name": "HTTP Download",
"tracking_field.computercraft.http_upload.name": "HTTP Upload", "tracking_field.computercraft.http_upload.name": "HTTP Upload",

View File

@ -1,4 +1,6 @@
{ {
"argument.computercraft.argument_expected": "Argumento esperado",
"argument.computercraft.computer.many_matching": "Varias computadoras que coinciden con ' %s' (instancias %s)",
"block.computercraft.cable": "Cable de red", "block.computercraft.cable": "Cable de red",
"block.computercraft.computer_advanced": "Ordenador avanzado", "block.computercraft.computer_advanced": "Ordenador avanzado",
"block.computercraft.computer_command": "Ordenador de Comandos", "block.computercraft.computer_command": "Ordenador de Comandos",
@ -15,10 +17,20 @@
"block.computercraft.turtle_normal.upgraded": "Tortuga %s", "block.computercraft.turtle_normal.upgraded": "Tortuga %s",
"block.computercraft.turtle_normal.upgraded_twice": "Tortuga %s %s", "block.computercraft.turtle_normal.upgraded_twice": "Tortuga %s %s",
"block.computercraft.wired_modem": "Módem cableado", "block.computercraft.wired_modem": "Módem cableado",
"block.computercraft.wired_modem_full": "Módem con cable",
"block.computercraft.wireless_modem_advanced": "Módem de Ender", "block.computercraft.wireless_modem_advanced": "Módem de Ender",
"block.computercraft.wireless_modem_normal": "Módem sin cables", "block.computercraft.wireless_modem_normal": "Módem sin cables",
"chat.computercraft.wired_modem.peripheral_connected": "El periférico \"%s\" se conectó a la red", "chat.computercraft.wired_modem.peripheral_connected": "El periférico \"%s\" se conectó a la red",
"chat.computercraft.wired_modem.peripheral_disconnected": "El periférico \"%s\" se desconectó de la red", "chat.computercraft.wired_modem.peripheral_disconnected": "El periférico \"%s\" se desconectó de la red",
"commands.computercraft.generic.additional_rows": "%d filas adicionales…",
"commands.computercraft.generic.no": "N",
"commands.computercraft.generic.no_position": "<sin pos>",
"commands.computercraft.generic.position": "%s, %s, %s",
"commands.computercraft.generic.yes": "Y",
"commands.computercraft.help.desc": "Muestra este mensaje de ayuda",
"commands.computercraft.help.no_command": "Sin comando '%s'",
"commands.computercraft.shutdown.done": "Apague %s/%s computadoras",
"commands.computercraft.shutdown.synopsis": "Apague las computadoras de forma remota.",
"gui.computercraft.config.computer_space_limit": "Límite de memoria de ordenadores (en bytes)", "gui.computercraft.config.computer_space_limit": "Límite de memoria de ordenadores (en bytes)",
"gui.computercraft.config.default_computer_settings": "Configuración de Ordenador por defecto", "gui.computercraft.config.default_computer_settings": "Configuración de Ordenador por defecto",
"gui.computercraft.config.disable_lua51_features": "Deshabilitar funciones de Lua 5.1", "gui.computercraft.config.disable_lua51_features": "Deshabilitar funciones de Lua 5.1",

View File

@ -41,9 +41,6 @@
"commands.computercraft.help.synopsis": "Fournit de l'aide pour une commande spécifique", "commands.computercraft.help.synopsis": "Fournit de l'aide pour une commande spécifique",
"commands.computercraft.queue.desc": "Envoie un événement computer_command à un ordinateur de commande, en passant les éventuels arguments additionnels. Ceci est principalement conçu pour les map makers, imitant la commande /trigger, pour une utilisation avec les ordinateurs. N'importe quel joueur peut exécuter cette commande, qui sera exécutée le plus souvent avec un événement de clic sur du texte.", "commands.computercraft.queue.desc": "Envoie un événement computer_command à un ordinateur de commande, en passant les éventuels arguments additionnels. Ceci est principalement conçu pour les map makers, imitant la commande /trigger, pour une utilisation avec les ordinateurs. N'importe quel joueur peut exécuter cette commande, qui sera exécutée le plus souvent avec un événement de clic sur du texte.",
"commands.computercraft.queue.synopsis": "Envoyer un événement computer_command à un ordinateur de commande", "commands.computercraft.queue.synopsis": "Envoyer un événement computer_command à un ordinateur de commande",
"commands.computercraft.reload.desc": "Actualise le fichier de configuration de ComputerCraft",
"commands.computercraft.reload.done": "Configuration actualisée",
"commands.computercraft.reload.synopsis": "Actualiser le fichier de configuration de ComputerCraft",
"commands.computercraft.shutdown.desc": "Éteint les ordinateurs dans la liste ou tous, si aucun n'est spécifié dans cette liste. Vous pouvez spécifier l'identifiant d'instance (ex. 123), l'identifiant d'ordinateur (ex. #123) ou son nom (ex. \"@Mon Ordinateur\").", "commands.computercraft.shutdown.desc": "Éteint les ordinateurs dans la liste ou tous, si aucun n'est spécifié dans cette liste. Vous pouvez spécifier l'identifiant d'instance (ex. 123), l'identifiant d'ordinateur (ex. #123) ou son nom (ex. \"@Mon Ordinateur\").",
"commands.computercraft.shutdown.done": "%s/%s ordinateurs arrêté", "commands.computercraft.shutdown.done": "%s/%s ordinateurs arrêté",
"commands.computercraft.shutdown.synopsis": "Éteindre des ordinateurs à distance.", "commands.computercraft.shutdown.synopsis": "Éteindre des ordinateurs à distance.",
@ -73,23 +70,111 @@
"commands.computercraft.view.desc": "Ouvre le terminal d'un ordinateur, autorisant le contrôle à distance. Ceci ne permet pas d'accéder à l'inventaire des tortues. Vous pouvez spécifier l'identifiant d'instance (ex. 123) ou l'identifiant d'ordinateur (ex. #123).", "commands.computercraft.view.desc": "Ouvre le terminal d'un ordinateur, autorisant le contrôle à distance. Ceci ne permet pas d'accéder à l'inventaire des tortues. Vous pouvez spécifier l'identifiant d'instance (ex. 123) ou l'identifiant d'ordinateur (ex. #123).",
"commands.computercraft.view.not_player": "Impossible d'ouvrir un terminal pour un non-joueur", "commands.computercraft.view.not_player": "Impossible d'ouvrir un terminal pour un non-joueur",
"commands.computercraft.view.synopsis": "Visualiser le terminal de cet ordinateur.", "commands.computercraft.view.synopsis": "Visualiser le terminal de cet ordinateur.",
"gui.computercraft.config.command_require_creative": "Les ordinateurs de commande requiert d'être en mode créatif",
"gui.computercraft.config.command_require_creative.tooltip": "Exiger que les joueurs soient en mode créatif et soient opés pour interagir avec des\nordinateurs de commande. C'est le comportement par défaut des blocs de commande vanilla.",
"gui.computercraft.config.computer_space_limit": "Espace disque d'un Ordinateur (octets)", "gui.computercraft.config.computer_space_limit": "Espace disque d'un Ordinateur (octets)",
"gui.computercraft.config.computer_space_limit.tooltip": "La limite d'espace du disque pour les ordinateurs et les tortues, en octets.",
"gui.computercraft.config.default_computer_settings": "Configuration d'Ordinateur par défaut", "gui.computercraft.config.default_computer_settings": "Configuration d'Ordinateur par défaut",
"gui.computercraft.config.default_computer_settings.tooltip": "Une liste séparée par des virgules des paramètres système par défaut à définir sur les nouveaux ordinateurs.\nExemple : \"shell.autocomplete=false,lua.autocomplete=false,edit.autocomplete=false\"\ndésactivera toute saisie semi-automatique.",
"gui.computercraft.config.disable_lua51_features": "Désactiver les particularités de Lua 5.1", "gui.computercraft.config.disable_lua51_features": "Désactiver les particularités de Lua 5.1",
"gui.computercraft.config.disable_lua51_features.tooltip": "Définir sur true pour désactiver les fonctions Lua 5.1 qui seront supprimées dans une future mise à jour.\nUtile pour assurer la compatibilité ascendante de vos programmes actuels.",
"gui.computercraft.config.disabled_generic_methods": "Méthodes génériques désactivées",
"gui.computercraft.config.execution": "Exécution",
"gui.computercraft.config.execution.computer_threads": "Threads d'ordinateur",
"gui.computercraft.config.execution.computer_threads.tooltip": "Définissez le nombre de threads sur lesquels les ordinateurs peuvent s'exécuter. Un nombre plus élevé signifie\nque plus d'ordinateurs peuvent fonctionner à la fois, mais peut induire un décalage. Veuillez noter que\ncertains mods peuvent ne pas fonctionner avec un nombre de threads supérieur à 1. À utiliser avec prudence.\nPlage : > 1",
"gui.computercraft.config.execution.max_main_computer_time": "Tick serveur, limite de temps d'ordinateur",
"gui.computercraft.config.execution.max_main_computer_time.tooltip": "La durée maximale idéale pendant laquelle un ordinateur peut s'exécuter en un tick, en millisecondes.\nNotez que nous dépasserons très probablement cette limite, car il n'y a aucun moyen de savoir \ncombien de temps cela prendra - cela vise à être la limite supérieure du temps moyen.\nPlage : > 1",
"gui.computercraft.config.execution.max_main_global_time": "Tick serveur, limite de temps globale",
"gui.computercraft.config.execution.max_main_global_time.tooltip": "Le temps maximum pouvant être consacré à l'exécution de tâches en un seul tick, en\nmillisecondes.\nNotez que nous dépasserons très probablement cette limite, car il n'y a aucun moyen de savoir\ncombien de temps cela prendra - cela vise à être la limite supérieure du temps moyen.\nPlage : > 1",
"gui.computercraft.config.execution.tooltip": "Contrôle le comportement d'exécution des ordinateurs. Ceci est en grande partie\ndestiné à peaufiner les serveurs et ne devrait généralement pas avoir besoin d'être touché.",
"gui.computercraft.config.floppy_space_limit": "Espace disque d'une Disquette (octets)", "gui.computercraft.config.floppy_space_limit": "Espace disque d'une Disquette (octets)",
"gui.computercraft.config.floppy_space_limit.tooltip": "La limite d'espace disque pour les disquettes, en octets.",
"gui.computercraft.config.http": "HTTP",
"gui.computercraft.config.http.bandwidth": "Bande passante",
"gui.computercraft.config.http.bandwidth.global_download": "Limite de téléchargement globale",
"gui.computercraft.config.http.bandwidth.global_download.tooltip": "Le nombre d'octets qui peuvent être téléchargés en une seconde. Ceci est partagé sur tous les ordinateurs. (octets/s).\nPlage : > 1",
"gui.computercraft.config.http.bandwidth.global_upload": "Limite de téléversement globale",
"gui.computercraft.config.http.bandwidth.global_upload.tooltip": "Le nombre d'octets qui peuvent être téléversé en une seconde. Ceci est partagé sur tous les ordinateurs. (octets/s).\nPlage : > 1",
"gui.computercraft.config.http.bandwidth.tooltip": "Limite la bande passante utilisée par les ordinateurs.",
"gui.computercraft.config.http.enabled": "Permettre l'API HTTP", "gui.computercraft.config.http.enabled": "Permettre l'API HTTP",
"gui.computercraft.config.http.enabled.tooltip": "Active l'API \"http\" sur les ordinateurs. Cela désactive également les programmes \"pastebin\" et \"wget\",\nsur lesquels de nombreux utilisateurs comptent. Il est recommandé de laisser cette option activée et\nd'utiliser l'option de configuration \"rules\" pour imposer un contrôle plus précis.",
"gui.computercraft.config.http.max_requests": "Maximum de requêtes simultanées",
"gui.computercraft.config.http.max_requests.tooltip": "Le nombre de requêtes http qu'un ordinateur peut effectuer en même temps.\nLes demandes supplémentaires seront mises en file d'attente et envoyées lorsque\nles demandes en cours seront terminées. Mettre à 0 pour illimité.\nPlage : > 0",
"gui.computercraft.config.http.max_websockets": "Maximum de websockets en simultané",
"gui.computercraft.config.http.max_websockets.tooltip": "Le nombre de websockets qu'un ordinateur peut avoir d'ouverts en même temps. Mettre à 0 pour illimité.\nPlage : > 1",
"gui.computercraft.config.http.proxy": "Proxy",
"gui.computercraft.config.http.proxy.host": "Nom d'hôte",
"gui.computercraft.config.http.proxy.host.tooltip": "Le nom d'hôte ou l'adresse IP du serveur proxy.",
"gui.computercraft.config.http.proxy.port": "Port",
"gui.computercraft.config.http.proxy.port.tooltip": "Le port du serveur proxy.\nPlage : 1 ~ 65536",
"gui.computercraft.config.http.proxy.tooltip": "Tunnelise les requêtes HTTP et websocket via un serveur proxy. Affecte uniquement\nles règles HTTP avec \"use_proxy\" défini sur true (désactivé par défaut).\nSi l'authentification est requise pour le proxy, créez un fichier \"computercraft-proxy.pw\"\ndans le même dossier que \"computercraft-server.toml\", contenant le\nnom d'utilisateur et mot de passe séparés par deux-points, par ex. \"monutilisateur:monmotdepasse\". Pour\nProxy SOCKS4, seul le nom d'utilisateur est requis.",
"gui.computercraft.config.http.proxy.type": "Type de proxy",
"gui.computercraft.config.http.proxy.type.tooltip": "Le type de proxy à utiliser.\nValeurs autorisées : HTTP, HTTPS, SOCKS4, SOCKS5",
"gui.computercraft.config.http.rules": "Règles d'autorisation/refus",
"gui.computercraft.config.http.rules.tooltip": "Une liste de règles qui contrôlent le comportement de l'API \"http\" pour des domaines\nou des IP spécifiques. Chaque règle est un élément avec un 'hôte' à comparer et une série\nde propriétés. Les règles sont évaluées dans l'ordre, ce qui signifie que les règles antérieures\nremplacent les suivantes.\nL'hôte peut être un nom de domaine (\"pastebin.com\"), un astérisque (\"*.pastebin.com\") ou\nune notation CIDR (\"127.0.0.0/8\").\nS'il n'y a pas de règles, le domaine est bloqué.",
"gui.computercraft.config.http.tooltip": "Contrôle l'API HTTP",
"gui.computercraft.config.http.websocket_enabled": "Active les websockets",
"gui.computercraft.config.http.websocket_enabled.tooltip": "Active l'utilisation des websockets http. Cela nécessite que l'option \"http_enable\" soit également activée.",
"gui.computercraft.config.log_computer_errors": "Journal d'erreur périphériques", "gui.computercraft.config.log_computer_errors": "Journal d'erreur périphériques",
"gui.computercraft.config.log_computer_errors.tooltip": "Enregistre les exceptions levées par les périphériques et autres objets Lua. Cela permet\naux créateurs de mods de débugger plus facilement les problèmes, mais peut entraîner\nun spam de logs si les joueurs utilisent des fonctions buggées.",
"gui.computercraft.config.maximum_open_files": "Maximum de fichier ouvert par Ordinateur", "gui.computercraft.config.maximum_open_files": "Maximum de fichier ouvert par Ordinateur",
"gui.computercraft.config.maximum_open_files.tooltip": "Défini le nombre de fichiers qu'un ordinateur peut ouvrir en même temps. Mettre à 0 pour illimité.\nPlage : > 0",
"gui.computercraft.config.monitor_distance": "Distance du moniteur",
"gui.computercraft.config.monitor_distance.tooltip": "La distance maximale à laquelle les écrans de moniteurs seront rendus. On utilise par défaut la\n'tile entity limit' de base, mais elle peut être augmentée si vous souhaitez créer des moniteurs plus grands.\nPlage : 16 ~ 1024",
"gui.computercraft.config.monitor_renderer": "Moteur de rendu du Moniteur",
"gui.computercraft.config.monitor_renderer.tooltip": "Le moteur de rendu à utiliser pour les moniteurs. Généralement, cela devrait être maintenu au \"meilleur\" - si\nles moniteurs ont des problèmes de performances, vous souhaiterez peut-être expérimenter avec des\nmoteurs de rendu alternatifs.\nValeurs autorisées : BEST, TBO, VBO",
"gui.computercraft.config.peripheral": "Périphériques",
"gui.computercraft.config.peripheral.command_block_enabled": "Permettre l'accès d'un Bloc de Commande par périphérique", "gui.computercraft.config.peripheral.command_block_enabled": "Permettre l'accès d'un Bloc de Commande par périphérique",
"gui.computercraft.config.peripheral.command_block_enabled.tooltip": "Active la prise en charge des périphériques pour le bloc de commande",
"gui.computercraft.config.peripheral.max_notes_per_tick": "Maximum de notes simultanées jouées par Ordinateur", "gui.computercraft.config.peripheral.max_notes_per_tick": "Maximum de notes simultanées jouées par Ordinateur",
"gui.computercraft.config.peripheral.max_notes_per_tick.tooltip": "Nombre maximum de notes qu'un haut-parleur peut jouer à la fois.\nPlage : > 1",
"gui.computercraft.config.peripheral.modem_high_altitude_range": "Portée d'un Modem (en haute altitude)", "gui.computercraft.config.peripheral.modem_high_altitude_range": "Portée d'un Modem (en haute altitude)",
"gui.computercraft.config.peripheral.modem_high_altitude_range.tooltip": "La portée des modems sans fil à l'altitude maximale par temps dégagé, en mètres.\nPlage : 0 ~ 100000",
"gui.computercraft.config.peripheral.modem_high_altitude_range_during_storm": "Portée d'un Modem (en haute altitude, par mauvais temps)", "gui.computercraft.config.peripheral.modem_high_altitude_range_during_storm": "Portée d'un Modem (en haute altitude, par mauvais temps)",
"gui.computercraft.config.peripheral.modem_high_altitude_range_during_storm.tooltip": "La portée des modems sans fil à l'altitude maximale par temps orageux, en mètres.\nPlage : 0 ~ 100000",
"gui.computercraft.config.peripheral.modem_range": "Portée d'un Modem (par défaut)", "gui.computercraft.config.peripheral.modem_range": "Portée d'un Modem (par défaut)",
"gui.computercraft.config.peripheral.modem_range.tooltip": "La portée des modems sans fil à basse altitude par temps dégagé, en mètres.\nPlage : 0 ~ 100000",
"gui.computercraft.config.peripheral.modem_range_during_storm": "Portée d'un Modem (par mauvais temps)", "gui.computercraft.config.peripheral.modem_range_during_storm": "Portée d'un Modem (par mauvais temps)",
"gui.computercraft.config.peripheral.modem_range_during_storm.tooltip": "La portée des modems sans fil à basse altitude par temps orageux, en mètres.\nPlage : 0 ~ 100000",
"gui.computercraft.config.peripheral.monitor_bandwidth": "Bande-passante du moniteur",
"gui.computercraft.config.peripheral.monitor_bandwidth.tooltip": "La limite de la quantité de données du moniteur pouvant être envoyées *par tick*. Note:\n - La bande passante est mesurée avant la compression, donc les données envoyées\n au client sont plus petites.\n - Cela ignore le nombre de joueurs auxquels un paquet est envoyé. La mise à jour d'un\n moniteur pour un joueur consomme la même limite de bande passante que l'envoi à 20.\n - Un moniteur de taille normale envoie ~25ko de données. Ainsi, la valeur par défaut (1Mo) permet \n à environ 40 moniteurs d'être mis à jour en un seul tick.\nMettre à 0 pour désactiver.\nPlage: > 0",
"gui.computercraft.config.peripheral.tooltip": "Diverses options relatives aux périphériques.",
"gui.computercraft.config.term_sizes": "Tailles de terminal",
"gui.computercraft.config.term_sizes.computer": "Ordinateur",
"gui.computercraft.config.term_sizes.computer.height": "Hauteur du terminal",
"gui.computercraft.config.term_sizes.computer.height.tooltip": "Plage : 1 ~ 255",
"gui.computercraft.config.term_sizes.computer.tooltip": "Taille du terminal des ordinateurs.",
"gui.computercraft.config.term_sizes.computer.width": "Largeur du terminal",
"gui.computercraft.config.term_sizes.computer.width.tooltip": "Plage : 1 ~ 255",
"gui.computercraft.config.term_sizes.monitor": "Moniteur",
"gui.computercraft.config.term_sizes.monitor.height": "Hauteur maximale du moniteur",
"gui.computercraft.config.term_sizes.monitor.height.tooltip": "Plage : 1 ~ 32",
"gui.computercraft.config.term_sizes.monitor.tooltip": "Taille maximale des moniteurs (en blocs).",
"gui.computercraft.config.term_sizes.monitor.width": "Largeur maximale du moniteur",
"gui.computercraft.config.term_sizes.monitor.width.tooltip": "Plage : 1 ~ 32",
"gui.computercraft.config.term_sizes.pocket_computer": "Ordinateur de poche",
"gui.computercraft.config.term_sizes.pocket_computer.height": "Hauteur du terminal",
"gui.computercraft.config.term_sizes.pocket_computer.height.tooltip": "Plage : 1 ~ 255",
"gui.computercraft.config.term_sizes.pocket_computer.tooltip": "Taille du terminal des ordinateurs de poche.",
"gui.computercraft.config.term_sizes.pocket_computer.width": "Largeur du terminal",
"gui.computercraft.config.term_sizes.pocket_computer.width.tooltip": "Plage : 1 ~ 255",
"gui.computercraft.config.term_sizes.tooltip": "Configure la taille des différents terminaux de l'ordinateur.\nLes terminaux plus grands nécessitent plus de bande passante, réglez donc avec précaution.",
"gui.computercraft.config.turtle": "Tortues",
"gui.computercraft.config.turtle.advanced_fuel_limit": "Limite de carburant par Tortue Avancée", "gui.computercraft.config.turtle.advanced_fuel_limit": "Limite de carburant par Tortue Avancée",
"gui.computercraft.config.turtle.advanced_fuel_limit.tooltip": "La limite de carburant pour les Tortues Avancées.\nPlage : > 0",
"gui.computercraft.config.turtle.can_push": "Les Tortues peuvent pousser les entitées", "gui.computercraft.config.turtle.can_push": "Les Tortues peuvent pousser les entitées",
"gui.computercraft.config.turtle.can_push.tooltip": "Si défini sur true, au lieu de s'arrêter, les tortues pousseront les entités hors du chemin si\nil y a de la place pour le faire.",
"gui.computercraft.config.turtle.need_fuel": "Activer la nécessité de carburant au mouvement des Tortues", "gui.computercraft.config.turtle.need_fuel": "Activer la nécessité de carburant au mouvement des Tortues",
"gui.computercraft.config.turtle.need_fuel.tooltip": "Défini si les tortues ont besoin de carburant pour se déplacer.",
"gui.computercraft.config.turtle.normal_fuel_limit": "Limite de carburant par Tortue", "gui.computercraft.config.turtle.normal_fuel_limit": "Limite de carburant par Tortue",
"gui.computercraft.config.turtle.normal_fuel_limit.tooltip": "La limite de carburant pour les Tortues.\nPlage : > 0",
"gui.computercraft.config.turtle.tooltip": "Diverses options relatives aux tortues.",
"gui.computercraft.config.upload_max_size": "Taille limite de téléversement de fichiers (octets)",
"gui.computercraft.config.upload_max_size.tooltip": "La taille limite de téléversement de fichier, en octets. Doit être compris entre 1 Kio et 16 Mio.\nGardez à l'esprit que les téléversements sont traités en un seul clic - les fichiers volumineux ou\nde mauvaises performances réseau peuvent bloquer le thread du réseau. Et attention à l'espace disque !\nPlage : 1024 ~ 16777216",
"gui.computercraft.config.upload_nag_delay": "Délai de téléversement",
"gui.computercraft.config.upload_nag_delay.tooltip": "Le délai en secondes après lequel les importations non traitées seront notifiées. Mettre à 0 pour désactiver.\nPlage : 0 ~ 60",
"gui.computercraft.pocket_computer_overlay": "Ordinateur de poche ouvert. Appuyez sur ESC pour le fermer.",
"gui.computercraft.terminal": "Terminal d'ordinateur",
"gui.computercraft.tooltip.computer_id": "ID d'ordinateur : %s", "gui.computercraft.tooltip.computer_id": "ID d'ordinateur : %s",
"gui.computercraft.tooltip.copy": "Copier dans le Presse-Papiers", "gui.computercraft.tooltip.copy": "Copier dans le Presse-Papiers",
"gui.computercraft.tooltip.disk_id": "ID de disque : %s", "gui.computercraft.tooltip.disk_id": "ID de disque : %s",
@ -100,8 +185,13 @@
"gui.computercraft.tooltip.turn_on": "Allumer cet ordinateur", "gui.computercraft.tooltip.turn_on": "Allumer cet ordinateur",
"gui.computercraft.upload.failed": "Echec de l'envoie", "gui.computercraft.upload.failed": "Echec de l'envoie",
"gui.computercraft.upload.failed.computer_off": "Vous devez allumer cet ordinateur avant d'envoyer ce fichier.", "gui.computercraft.upload.failed.computer_off": "Vous devez allumer cet ordinateur avant d'envoyer ce fichier.",
"gui.computercraft.upload.failed.corrupted": "Fichiers corrompus lors du téléversement. Veuillez réessayer.",
"gui.computercraft.upload.failed.generic": "Echec de l'envoie des fichiers (%s)", "gui.computercraft.upload.failed.generic": "Echec de l'envoie des fichiers (%s)",
"gui.computercraft.upload.failed.name_too_long": "Les noms de fichiers sont trop longs pour être téléversé.",
"gui.computercraft.upload.failed.too_many_files": "Impossible de téléverser autant de fichiers.",
"gui.computercraft.upload.failed.too_much": "Votre fichier est trop lourd pour être envoyé.", "gui.computercraft.upload.failed.too_much": "Votre fichier est trop lourd pour être envoyé.",
"gui.computercraft.upload.no_response": "Transfert de fichiers",
"gui.computercraft.upload.no_response.msg": "Votre ordinateur n'a pas utilisé les fichiers transférés. Vous devrez peut-être exécuter le programme %s et réessayer.",
"item.computercraft.disk": "Disquette", "item.computercraft.disk": "Disquette",
"item.computercraft.pocket_computer_advanced": "Ordinateur de Poche Avancé", "item.computercraft.pocket_computer_advanced": "Ordinateur de Poche Avancé",
"item.computercraft.pocket_computer_advanced.upgraded": "Ordinateur de Poche Avancé %s", "item.computercraft.pocket_computer_advanced.upgraded": "Ordinateur de Poche Avancé %s",
@ -112,12 +202,17 @@
"item.computercraft.printed_pages": "Pages imprimées", "item.computercraft.printed_pages": "Pages imprimées",
"item.computercraft.treasure_disk": "Disquette", "item.computercraft.treasure_disk": "Disquette",
"itemGroup.computercraft": "ComputerCraft", "itemGroup.computercraft": "ComputerCraft",
"tracking_field.computercraft.coroutines_created.name": "Coroutines créées", "tracking_field.computercraft.avg": "%s (moyenne)",
"tracking_field.computercraft.coroutines_dead.name": "Coroutines mortes", "tracking_field.computercraft.computer_tasks.name": "Tâches",
"tracking_field.computercraft.count": "%s (compte)",
"tracking_field.computercraft.fs.name": "Opérations sur le système de fichiers", "tracking_field.computercraft.fs.name": "Opérations sur le système de fichiers",
"tracking_field.computercraft.http_download.name": "Téléchargement HTTP", "tracking_field.computercraft.http_download.name": "Téléchargement HTTP",
"tracking_field.computercraft.http_requests.name": "Requêtes HTTP",
"tracking_field.computercraft.http_upload.name": "Publication HTTP", "tracking_field.computercraft.http_upload.name": "Publication HTTP",
"tracking_field.computercraft.max": "%s (max)",
"tracking_field.computercraft.peripheral.name": "Appels aux périphériques", "tracking_field.computercraft.peripheral.name": "Appels aux périphériques",
"tracking_field.computercraft.server_tasks.name": "Tâches du serveur",
"tracking_field.computercraft.turtle_ops.name": "Opérations des tortues",
"tracking_field.computercraft.websocket_incoming.name": "Websocket entrant", "tracking_field.computercraft.websocket_incoming.name": "Websocket entrant",
"tracking_field.computercraft.websocket_outgoing.name": "Websocket sortant", "tracking_field.computercraft.websocket_outgoing.name": "Websocket sortant",
"upgrade.computercraft.speaker.adjective": "Bruyante", "upgrade.computercraft.speaker.adjective": "Bruyante",
@ -128,104 +223,5 @@
"upgrade.minecraft.diamond_hoe.adjective": "Fermière", "upgrade.minecraft.diamond_hoe.adjective": "Fermière",
"upgrade.minecraft.diamond_pickaxe.adjective": "Mineuse", "upgrade.minecraft.diamond_pickaxe.adjective": "Mineuse",
"upgrade.minecraft.diamond_shovel.adjective": "Excavatrice", "upgrade.minecraft.diamond_shovel.adjective": "Excavatrice",
"upgrade.minecraft.diamond_sword.adjective": "De Combat", "upgrade.minecraft.diamond_sword.adjective": "De Combat"
"gui.computercraft.terminal": "Terminal d'ordinateur",
"tracking_field.computercraft.count": "%s (compte)",
"tracking_field.computercraft.max": "%s (max)",
"tracking_field.computercraft.server_tasks.name": "Tâches du serveur",
"tracking_field.computercraft.turtle_ops.name": "Opérations des tortues",
"tracking_field.computercraft.avg": "%s (moyenne)",
"tracking_field.computercraft.computer_tasks.name": "Tâches",
"gui.computercraft.upload.no_response": "Transfert de fichiers",
"gui.computercraft.upload.failed.name_too_long": "Les noms de fichiers sont trop longs pour être téléversé.",
"gui.computercraft.upload.failed.too_many_files": "Impossible de téléverser autant de fichiers.",
"gui.computercraft.pocket_computer_overlay": "Ordinateur de poche ouvert. Appuyez sur ESC pour le fermer.",
"gui.computercraft.config.command_require_creative": "Les ordinateurs de commande requiert d'être en mode créatif",
"gui.computercraft.config.command_require_creative.tooltip": "Exiger que les joueurs soient en mode créatif et soient opés pour interagir avec des\nordinateurs de commande. C'est le comportement par défaut des blocs de commande vanilla.",
"gui.computercraft.config.computer_space_limit.tooltip": "La limite d'espace du disque pour les ordinateurs et les tortues, en octets.",
"gui.computercraft.config.default_computer_settings.tooltip": "Une liste séparée par des virgules des paramètres système par défaut à définir sur les nouveaux ordinateurs.\nExemple : \"shell.autocomplete=false,lua.autocomplete=false,edit.autocomplete=false\"\ndésactivera toute saisie semi-automatique.",
"gui.computercraft.config.disable_lua51_features.tooltip": "Définir sur true pour désactiver les fonctions Lua 5.1 qui seront supprimées dans une future mise à jour.\nUtile pour assurer la compatibilité ascendante de vos programmes actuels.",
"gui.computercraft.config.execution": "Exécution",
"gui.computercraft.config.execution.computer_threads": "Threads d'ordinateur",
"gui.computercraft.config.execution.max_main_global_time": "Tick serveur, limite de temps globale",
"gui.computercraft.config.execution.tooltip": "Contrôle le comportement d'exécution des ordinateurs. Ceci est en grande partie\ndestiné à peaufiner les serveurs et ne devrait généralement pas avoir besoin d'être touché.",
"gui.computercraft.config.floppy_space_limit.tooltip": "La limite d'espace disque pour les disquettes, en octets.",
"gui.computercraft.config.http": "HTTP",
"gui.computercraft.config.http.bandwidth": "Bande passante",
"gui.computercraft.config.http.bandwidth.global_download": "Limite de téléchargement globale",
"gui.computercraft.config.execution.max_main_computer_time": "Tick serveur, limite de temps d'ordinateur",
"gui.computercraft.config.http.bandwidth.global_download.tooltip": "Le nombre d'octets qui peuvent être téléchargés en une seconde. Ceci est partagé sur tous les ordinateurs. (octets/s).\nPlage : > 1",
"gui.computercraft.config.http.bandwidth.global_upload": "Limite de téléversement globale",
"gui.computercraft.config.http.bandwidth.global_upload.tooltip": "Le nombre d'octets qui peuvent être téléversé en une seconde. Ceci est partagé sur tous les ordinateurs. (octets/s).\nPlage : > 1",
"gui.computercraft.config.http.bandwidth.tooltip": "Limite la bande passante utilisée par les ordinateurs.",
"gui.computercraft.config.http.max_requests": "Maximum de requêtes simultanées",
"gui.computercraft.config.http.max_requests.tooltip": "Le nombre de requêtes http qu'un ordinateur peut effectuer en même temps.\nLes demandes supplémentaires seront mises en file d'attente et envoyées lorsque\nles demandes en cours seront terminées. Mettre à 0 pour illimité.\nPlage : > 0",
"gui.computercraft.config.http.max_websockets": "Maximum de websockets en simultané",
"gui.computercraft.config.http.max_websockets.tooltip": "Le nombre de websockets qu'un ordinateur peut avoir d'ouverts en même temps. Mettre à 0 pour illimité.\nPlage : > 1",
"gui.computercraft.config.http.rules": "Règles d'autorisation/refus",
"gui.computercraft.config.http.tooltip": "Contrôle l'API HTTP",
"gui.computercraft.config.http.websocket_enabled": "Active les websockets",
"gui.computercraft.config.http.websocket_enabled.tooltip": "Active l'utilisation des websockets http. Cela nécessite que l'option \"http_enable\" soit également activée.",
"gui.computercraft.config.log_computer_errors.tooltip": "Enregistre les exceptions levées par les périphériques et autres objets Lua. Cela permet\naux créateurs de mods de débugger plus facilement les problèmes, mais peut entraîner\nun spam de logs si les joueurs utilisent des fonctions buggées.",
"gui.computercraft.config.maximum_open_files.tooltip": "Défini le nombre de fichiers qu'un ordinateur peut ouvrir en même temps. Mettre à 0 pour illimité.\nPlage : > 0",
"gui.computercraft.config.monitor_distance": "Distance du moniteur",
"gui.computercraft.config.peripheral.modem_high_altitude_range_during_storm.tooltip": "La portée des modems sans fil à l'altitude maximale par temps orageux, en mètres.\nPlage : 0 ~ 100000",
"gui.computercraft.config.peripheral.modem_range_during_storm.tooltip": "La portée des modems sans fil à basse altitude par temps orageux, en mètres.\nPlage : 0 ~ 100000",
"gui.computercraft.config.term_sizes.computer.height.tooltip": "Plage : 1 ~ 255",
"gui.computercraft.config.term_sizes.computer.width.tooltip": "Plage : 1 ~ 255",
"gui.computercraft.config.term_sizes.monitor.height.tooltip": "Plage : 1 ~ 32",
"gui.computercraft.config.monitor_distance.tooltip": "La distance maximale à laquelle les écrans de moniteurs seront rendus. On utilise par défaut la\n'tile entity limit' de base, mais elle peut être augmentée si vous souhaitez créer des moniteurs plus grands.\nPlage : 16 ~ 1024",
"gui.computercraft.config.monitor_renderer": "Moteur de rendu du Moniteur",
"gui.computercraft.config.monitor_renderer.tooltip": "Le moteur de rendu à utiliser pour les moniteurs. Généralement, cela devrait être maintenu au \"meilleur\" - si\nles moniteurs ont des problèmes de performances, vous souhaiterez peut-être expérimenter avec des\nmoteurs de rendu alternatifs.\nValeurs autorisées : BEST, TBO, VBO",
"gui.computercraft.config.peripheral": "Périphériques",
"gui.computercraft.config.peripheral.command_block_enabled.tooltip": "Active la prise en charge des périphériques pour le bloc de commande",
"gui.computercraft.config.peripheral.max_notes_per_tick.tooltip": "Nombre maximum de notes qu'un haut-parleur peut jouer à la fois.\nPlage : > 1",
"gui.computercraft.config.peripheral.monitor_bandwidth": "Bande-passante du moniteur",
"gui.computercraft.config.peripheral.tooltip": "Diverses options relatives aux périphériques.",
"gui.computercraft.config.term_sizes": "Tailles de terminal",
"gui.computercraft.config.term_sizes.computer": "Ordinateur",
"gui.computercraft.config.term_sizes.computer.height": "Hauteur du terminal",
"gui.computercraft.config.term_sizes.computer.tooltip": "Taille du terminal des ordinateurs.",
"gui.computercraft.config.term_sizes.computer.width": "Largeur du terminal",
"gui.computercraft.config.term_sizes.monitor": "Moniteur",
"gui.computercraft.config.term_sizes.monitor.height": "Hauteur maximale du moniteur",
"gui.computercraft.config.term_sizes.monitor.tooltip": "Taille maximale des moniteurs (en blocs).",
"gui.computercraft.config.term_sizes.monitor.width": "Largeur maximale du moniteur",
"gui.computercraft.config.term_sizes.monitor.width.tooltip": "Plage : 1 ~ 32",
"gui.computercraft.config.term_sizes.pocket_computer.height.tooltip": "Plage : 1 ~ 255",
"gui.computercraft.config.term_sizes.pocket_computer.width.tooltip": "Plage : 1 ~ 255",
"gui.computercraft.config.turtle.advanced_fuel_limit.tooltip": "La limite de carburant pour les Tortues Avancées.\nPlage : > 0",
"gui.computercraft.config.turtle.normal_fuel_limit.tooltip": "La limite de carburant pour les Tortues.\nPlage : > 0",
"gui.computercraft.config.upload_nag_delay.tooltip": "Le délai en secondes après lequel les importations non traitées seront notifiées. Mettre à 0 pour désactiver.\nPlage : 0 ~ 60",
"gui.computercraft.config.term_sizes.pocket_computer": "Ordinateur de poche",
"gui.computercraft.config.term_sizes.pocket_computer.height": "Hauteur du terminal",
"gui.computercraft.config.term_sizes.pocket_computer.tooltip": "Taille du terminal des ordinateurs de poche.",
"gui.computercraft.config.term_sizes.pocket_computer.width": "Largeur du terminal",
"gui.computercraft.config.term_sizes.tooltip": "Configure la taille des différents terminaux de l'ordinateur.\nLes terminaux plus grands nécessitent plus de bande passante, réglez donc avec précaution.",
"gui.computercraft.config.turtle": "Tortues",
"gui.computercraft.config.turtle.can_push.tooltip": "Si défini sur true, au lieu de s'arrêter, les tortues pousseront les entités hors du chemin si\nil y a de la place pour le faire.",
"gui.computercraft.config.turtle.need_fuel.tooltip": "Défini si les tortues ont besoin de carburant pour se déplacer.",
"gui.computercraft.config.turtle.tooltip": "Diverses options relatives aux tortues.",
"gui.computercraft.config.upload_nag_delay": "Délai de téléversement",
"gui.computercraft.config.peripheral.modem_high_altitude_range.tooltip": "La portée des modems sans fil à l'altitude maximale par temps dégagé, en mètres.\nPlage : 0 ~ 100000",
"gui.computercraft.upload.failed.corrupted": "Fichiers corrompus lors du téléversement. Veuillez réessayer.",
"gui.computercraft.upload.no_response.msg": "Votre ordinateur n'a pas utilisé les fichiers transférés. Vous devrez peut-être exécuter le programme %s et réessayer.",
"tracking_field.computercraft.http_requests.name": "Requêtes HTTP",
"gui.computercraft.config.execution.max_main_computer_time.tooltip": "La durée maximale idéale pendant laquelle un ordinateur peut s'exécuter en un tick, en millisecondes.\nNotez que nous dépasserons très probablement cette limite, car il n'y a aucun moyen de savoir \ncombien de temps cela prendra - cela vise à être la limite supérieure du temps moyen.\nPlage : > 1",
"gui.computercraft.config.execution.max_main_global_time.tooltip": "Le temps maximum pouvant être consacré à l'exécution de tâches en un seul tick, en\nmillisecondes.\nNotez que nous dépasserons très probablement cette limite, car il n'y a aucun moyen de savoir\ncombien de temps cela prendra - cela vise à être la limite supérieure du temps moyen.\nPlage : > 1",
"gui.computercraft.config.execution.computer_threads.tooltip": "Définissez le nombre de threads sur lesquels les ordinateurs peuvent s'exécuter. Un nombre plus élevé signifie\nque plus d'ordinateurs peuvent fonctionner à la fois, mais peut induire un décalage. Veuillez noter que\ncertains mods peuvent ne pas fonctionner avec un nombre de threads supérieur à 1. À utiliser avec prudence.\nPlage : > 1",
"gui.computercraft.config.http.enabled.tooltip": "Active l'API \"http\" sur les ordinateurs. Cela désactive également les programmes \"pastebin\" et \"wget\",\nsur lesquels de nombreux utilisateurs comptent. Il est recommandé de laisser cette option activée et\nd'utiliser l'option de configuration \"rules\" pour imposer un contrôle plus précis.",
"gui.computercraft.config.peripheral.modem_range.tooltip": "La portée des modems sans fil à basse altitude par temps dégagé, en mètres.\nPlage : 0 ~ 100000",
"gui.computercraft.config.peripheral.monitor_bandwidth.tooltip": "La limite de la quantité de données du moniteur pouvant être envoyées *par tick*. Note:\n - La bande passante est mesurée avant la compression, donc les données envoyées\n au client sont plus petites.\n - Cela ignore le nombre de joueurs auxquels un paquet est envoyé. La mise à jour d'un\n moniteur pour un joueur consomme la même limite de bande passante que l'envoi à 20.\n - Un moniteur de taille normale envoie ~25ko de données. Ainsi, la valeur par défaut (1Mo) permet \n à environ 40 moniteurs d'être mis à jour en un seul tick.\nMettre à 0 pour désactiver.\nPlage: > 0",
"gui.computercraft.config.http.rules.tooltip": "Une liste de règles qui contrôlent le comportement de l'API \"http\" pour des domaines\nou des IP spécifiques. Chaque règle est un élément avec un 'hôte' à comparer et une série\nde propriétés. Les règles sont évaluées dans l'ordre, ce qui signifie que les règles antérieures\nremplacent les suivantes.\nL'hôte peut être un nom de domaine (\"pastebin.com\"), un astérisque (\"*.pastebin.com\") ou\nune notation CIDR (\"127.0.0.0/8\").\nS'il n'y a pas de règles, le domaine est bloqué.",
"gui.computercraft.config.http.proxy.host.tooltip": "Le nom d'hôte ou l'adresse IP du serveur proxy.",
"gui.computercraft.config.http.proxy.tooltip": "Tunnelise les requêtes HTTP et websocket via un serveur proxy. Affecte uniquement\nles règles HTTP avec \"use_proxy\" défini sur true (désactivé par défaut).\nSi l'authentification est requise pour le proxy, créez un fichier \"computercraft-proxy.pw\"\ndans le même dossier que \"computercraft-server.toml\", contenant le\nnom d'utilisateur et mot de passe séparés par deux-points, par ex. \"monutilisateur:monmotdepasse\". Pour\nProxy SOCKS4, seul le nom d'utilisateur est requis.",
"gui.computercraft.config.upload_max_size.tooltip": "La taille limite de téléversement de fichier, en octets. Doit être compris entre 1 Kio et 16 Mio.\nGardez à l'esprit que les téléversements sont traités en un seul clic - les fichiers volumineux ou\nde mauvaises performances réseau peuvent bloquer le thread du réseau. Et attention à l'espace disque !\nPlage : 1024 ~ 16777216",
"gui.computercraft.config.http.proxy": "Proxy",
"gui.computercraft.config.http.proxy.host": "Nom d'hôte",
"gui.computercraft.config.http.proxy.port": "Port",
"gui.computercraft.config.http.proxy.port.tooltip": "Le port du serveur proxy.\nPlage : 1 ~ 65536",
"gui.computercraft.config.http.proxy.type": "Type de proxy",
"gui.computercraft.config.http.proxy.type.tooltip": "Le type de proxy à utiliser.\nValeurs autorisées : HTTP, HTTPS, SOCKS4, SOCKS5",
"gui.computercraft.config.upload_max_size": "Taille limite de téléversement de fichiers (octets)"
} }

View File

@ -41,9 +41,6 @@
"commands.computercraft.help.synopsis": "Dà aiuto su un determinato comando", "commands.computercraft.help.synopsis": "Dà aiuto su un determinato comando",
"commands.computercraft.queue.desc": "Invia un evento computer_command ad un computer comando, passando gli argomenti aggiuntivi. Questo comando è pensato per i map makers, è un versione più amichevole verso i computer di /trigger. Qualsiasi giocatore può eseguire il comando, è più probabile che venga fatto attraverso un evento click di un componente di testo.", "commands.computercraft.queue.desc": "Invia un evento computer_command ad un computer comando, passando gli argomenti aggiuntivi. Questo comando è pensato per i map makers, è un versione più amichevole verso i computer di /trigger. Qualsiasi giocatore può eseguire il comando, è più probabile che venga fatto attraverso un evento click di un componente di testo.",
"commands.computercraft.queue.synopsis": "Invia un evento computer_command ad un computer comando", "commands.computercraft.queue.synopsis": "Invia un evento computer_command ad un computer comando",
"commands.computercraft.reload.desc": "Ricarica il file di configurazione della ComputerCraft",
"commands.computercraft.reload.done": "File di configurazione ricaricato",
"commands.computercraft.reload.synopsis": "Ricarica il file di configurazione della ComputerCraft",
"commands.computercraft.shutdown.desc": "Spegne i computer specificati o tutti se non specificati. Puoi specificare l'instance id del computer (e.g. 123), l'id del computer (e.g. #123) o l'etichetta (e.g. \"@Il mio Computer\").", "commands.computercraft.shutdown.desc": "Spegne i computer specificati o tutti se non specificati. Puoi specificare l'instance id del computer (e.g. 123), l'id del computer (e.g. #123) o l'etichetta (e.g. \"@Il mio Computer\").",
"commands.computercraft.shutdown.done": "Spenti %s/%s computer", "commands.computercraft.shutdown.done": "Spenti %s/%s computer",
"commands.computercraft.shutdown.synopsis": "Spegne i computer da remoto.", "commands.computercraft.shutdown.synopsis": "Spegne i computer da remoto.",
@ -73,31 +70,110 @@
"commands.computercraft.view.desc": "Apre il terminale di un computer, in modo da poterlo controllare da remoto. Non permette l'accesso all'inventario di una tartaruga. Puoi specificare l'instance id del computer (e.g. 123) o l'id (e.g. #123).", "commands.computercraft.view.desc": "Apre il terminale di un computer, in modo da poterlo controllare da remoto. Non permette l'accesso all'inventario di una tartaruga. Puoi specificare l'instance id del computer (e.g. 123) o l'id (e.g. #123).",
"commands.computercraft.view.not_player": "Non è possibile aprire un terminale per un non giocatore", "commands.computercraft.view.not_player": "Non è possibile aprire un terminale per un non giocatore",
"commands.computercraft.view.synopsis": "Mostra il terminale di un computer.", "commands.computercraft.view.synopsis": "Mostra il terminale di un computer.",
"gui.computercraft.config.command_require_creative": "Il computer Comando richiede la modalità creativa",
"gui.computercraft.config.command_require_creative.tooltip": "Richiede che i giocatori siano in modalità creativa e che siano operatori in ordine per interagire con\ni computer di commando. Questo è il comportamento predefinito dei blocchi di comando.",
"gui.computercraft.config.computer_space_limit": "Limite spazio Computer (bytes)", "gui.computercraft.config.computer_space_limit": "Limite spazio Computer (bytes)",
"gui.computercraft.config.computer_space_limit.tooltip": "Limite di spazio di archiviazione per i computer e le tartarughe, in byte.",
"gui.computercraft.config.default_computer_settings": "Impostazioni Computer predefinite", "gui.computercraft.config.default_computer_settings": "Impostazioni Computer predefinite",
"gui.computercraft.config.default_computer_settings.tooltip": "Una lista di impostazioni predefinite per i nuovi computer, separate da virgola.\nEsempio: \"shell.autocomplete=false,lua.autocomplete=false,edit.autocomplete=false\"\ndisattiverà tutti gli autocompletamenti.",
"gui.computercraft.config.disable_lua51_features": "Disattiva features Lua 5.1", "gui.computercraft.config.disable_lua51_features": "Disattiva features Lua 5.1",
"gui.computercraft.config.disable_lua51_features.tooltip": "Imposta a \"true\" per disattivare le funzionalità di Lua 5.1 che saranno rimosse in un\naggiornamento futuro. Utile per assicurare futura compatibilità con i tuoi programmi.",
"gui.computercraft.config.execution": "Esecuzione",
"gui.computercraft.config.execution.computer_threads": "Threads computer", "gui.computercraft.config.execution.computer_threads": "Threads computer",
"gui.computercraft.config.execution.computer_threads.tooltip": "Imposta la quantità di thread che possono eseguire i computer. Un numero più alto significa\nche più computer possono essere eseguiti alla volta, ma può indurre a lag. Alcune mod potrebbero\nnon funzionare con numeri di thread maggiore a 1. Usare con cautela.\nRange: > 1",
"gui.computercraft.config.execution.max_main_computer_time": "Limite di tempo del computer nel server",
"gui.computercraft.config.execution.max_main_computer_time.tooltip": "Il tempo massimo ideale che un computer può eseguire in un tick, in millisecondi.\nNota, potremmo andare ben sopra questo limite, perché non c'è modo di sapere\nquanto impiega, questa configurazione mira ad essere il limite maggiore del tempo medio.\nRange: > 1",
"gui.computercraft.config.execution.max_main_global_time": "Limite tempo globale dei tick del server",
"gui.computercraft.config.execution.max_main_global_time.tooltip": "Il limite massimo di tempo che può essere usato per eseguire task in un singolo tick,\nin millisecondi.\nNota, potremmo andare ben sopra questo limite, perché non c'è modo di sapere\nquanto impiega, questa configurazione mira ad essere il limite maggiore del tempo medio.\nRange: > 1",
"gui.computercraft.config.execution.tooltip": "Controlla comportamento esecuzione dei computer. Questo è largamente utilizzato\nper ritoccare la performance dei server, e generale non dovrebbe essere toccato.",
"gui.computercraft.config.floppy_space_limit": "Limite spazio Disco Floppy (bytes)", "gui.computercraft.config.floppy_space_limit": "Limite spazio Disco Floppy (bytes)",
"gui.computercraft.config.floppy_space_limit.tooltip": "Limite di spazio di archiviazione per i dischi floppy, in byte.",
"gui.computercraft.config.http": "HTTP", "gui.computercraft.config.http": "HTTP",
"gui.computercraft.config.http.bandwidth": "Banda larga",
"gui.computercraft.config.http.bandwidth.global_download": "Limite download globale",
"gui.computercraft.config.http.bandwidth.global_download.tooltip": "Numero di byte che possono essere scaricati in un secondo. Questo è condiviso tra tutti i computer. (bytes/s).\nRange: > 1",
"gui.computercraft.config.http.bandwidth.global_upload": "Limite upload globale",
"gui.computercraft.config.http.bandwidth.global_upload.tooltip": "Numero di byte che possono essere caricati in un secondo. Questo è condiviso tra tutti i computer. (bytes/s).\nRange: > 1",
"gui.computercraft.config.http.bandwidth.tooltip": "Limita la banda larga usato dai computer.",
"gui.computercraft.config.http.enabled": "Attiva l'API HTTP", "gui.computercraft.config.http.enabled": "Attiva l'API HTTP",
"gui.computercraft.config.http.enabled.tooltip": "Attiva l'API \"http\" sui computer. Disattivandolo, vengono disattivati anche i programmi \"pastebin\" e \"wget\", \ndi cui molti utenti dipendono. È raccomandato lasciarlo attivo ed utilizzare l'opzione \n\"rules\" per imporre controlli più adeguati.",
"gui.computercraft.config.http.max_requests": "Richieste correnti massime", "gui.computercraft.config.http.max_requests": "Richieste correnti massime",
"gui.computercraft.config.http.max_requests.tooltip": "Il numero di richieste http che un computer può fare alla volta. Ulteriori richieste\nverranno messe in coda, ed inviate quando le richieste correnti sono terminate.\nImposta a 0 per illimitato.\nRange: > 0",
"gui.computercraft.config.http.max_websockets": "Connessioni websocket massime", "gui.computercraft.config.http.max_websockets": "Connessioni websocket massime",
"gui.computercraft.config.http.max_websockets.tooltip": "Il numero di websocket che un computer può avere aperte allo stesso momento.\nImposta a 0 per illimitato.\nRange: > 1",
"gui.computercraft.config.http.proxy": "Proxy",
"gui.computercraft.config.http.proxy.host": "Nome host",
"gui.computercraft.config.http.proxy.host.tooltip": "Il nome dell'host o l'indirizzo IP del server proxy.",
"gui.computercraft.config.http.proxy.port": "Porta",
"gui.computercraft.config.http.proxy.port.tooltip": "La porta del server proxy.\nRange: 1 ~ 65536",
"gui.computercraft.config.http.proxy.tooltip": "Transmetti richieste HTTP e websocket attraverso un server proxy. Ha effetto solo\nsu regole HTTP con \"use_proxy\" attivo (disattivato di default).\nSe l'autenticazione è richiesta per il proxy, creare un file \"computercraft-proxy.pw\"\nnella stessa cartella di \"computercraft-server.toml\", contenendo il nome utente e\npassword separati dal carattere due punti, per esempio: \"myuser:mypassword\".\nI proxy SOCKS4 necessitano solo il nome utente.",
"gui.computercraft.config.http.proxy.type": "Tipo proxy",
"gui.computercraft.config.http.proxy.type.tooltip": "Il tipo di proxy da usare.\nValori consentiti: HTTP, HTTPS, SOCKS4, SOCKS5",
"gui.computercraft.config.http.rules": "Concedi/nega regole",
"gui.computercraft.config.http.rules.tooltip": "Una lista di regole che controllano il comportamento dell'API \"http\" per specifici domini\no indirizzi IP. Ogni regola corrisponde ad un nome host ed una porta opzionale, e poi imposta varie\nproprietà per la richiesta. Le regole sono valutate in ordine, cioè le prime regole sovvrascrivono le successive.\n\nProprietà valide:\n - \"host\" (richiesto): Il dominio o l'indirizzo IP della regola. Può essere un nome di dominio\n (\"pastebin.com\"), jolly (\"*.pastebin.com\") o notazione CIDR (\"127.0.0.0/8\").\n - \"port\" (opzionale): Corrisponde solo a richieste con una specifica porta, come 80 o 443.\n\n - \"action\" (opzionale): Se consentire o negare la richiesta.\n - \"max_download\" (opzionale): Quantità massima (in byte) che un computer può scaricare in\n questa richiesta.\n - \"max_upload\" (opzionale): Quantità massima (in byte) che un computer può caricare in\n questa richiesta.\n - \"max_websocket_message\" (opzionale): Quantità massima (in byte) che un computer può inviare o\n ricevere in un pacchetto websocket.\n - \"use_proxy\" (opzionale): Attiva l'uso di un proxy HTTP/SOCKS se configurato.",
"gui.computercraft.config.http.tooltip": "Controlla l'API HTTP",
"gui.computercraft.config.http.websocket_enabled": "Attiva websocket", "gui.computercraft.config.http.websocket_enabled": "Attiva websocket",
"gui.computercraft.config.http.websocket_enabled.tooltip": "Attiva l'uso di websocket http. Questo richiede che l'opzione \"http_enable\" sia attiva.",
"gui.computercraft.config.log_computer_errors": "Salva errori computer", "gui.computercraft.config.log_computer_errors": "Salva errori computer",
"gui.computercraft.config.log_computer_errors.tooltip": "Registra le eccezioni lanciate dalle periferiche e altri oggetti di Lua. Questo rende più facile\nper gli autori di mod per il debug di problemi, ma potrebbe risultare in spam di log durante\nl'uso di metodi buggati.",
"gui.computercraft.config.maximum_open_files": "Massimo file aperti per computer", "gui.computercraft.config.maximum_open_files": "Massimo file aperti per computer",
"gui.computercraft.config.maximum_open_files.tooltip": "Imposta quanti file possono essere aperti allo stesso momento su un computer. Imposta a 0 per illimitato.\nRange: > 0",
"gui.computercraft.config.monitor_distance": "Distanza monitor",
"gui.computercraft.config.monitor_distance.tooltip": "Distanza massima che i monitor vengono renderizzati. Questo è predefinito al limite\nstandard dei tile entity, ma può essere esteso se desideri construire monitor più grandi.\nRange: 16 ~ 1024",
"gui.computercraft.config.monitor_renderer": "Renderizzatore monitor",
"gui.computercraft.config.monitor_renderer.tooltip": "Il renderizzatore da usare per i monitor. Generalmente si dovrebbe lasciare su \"best\", se\ni monitor hanno problemi di performance, puoi sperimentare con renderizzatori alternativi.\nValori concessi: BEST, TBO, VBO",
"gui.computercraft.config.peripheral": "Periferiche", "gui.computercraft.config.peripheral": "Periferiche",
"gui.computercraft.config.peripheral.command_block_enabled": "Attiva periferica blocco comandi", "gui.computercraft.config.peripheral.command_block_enabled": "Attiva periferica blocco comandi",
"gui.computercraft.config.peripheral.command_block_enabled.tooltip": "Attiva il supporto ai blocchi di comando come periferiche",
"gui.computercraft.config.peripheral.max_notes_per_tick": "Note massime alla volta", "gui.computercraft.config.peripheral.max_notes_per_tick": "Note massime alla volta",
"gui.computercraft.config.peripheral.max_notes_per_tick.tooltip": "Quantità massima di note che un altoparlante può riprodurre allo stesso momento.\nRange: > 1",
"gui.computercraft.config.peripheral.modem_high_altitude_range": "Raggio Modem (alta quota)", "gui.computercraft.config.peripheral.modem_high_altitude_range": "Raggio Modem (alta quota)",
"gui.computercraft.config.peripheral.modem_high_altitude_range.tooltip": "La distanza massima dei modem wireless all'altitudine massima durante il meteo soleggiato. in metri.\nRange: 0 ~ 100000",
"gui.computercraft.config.peripheral.modem_high_altitude_range_during_storm": "Raggio Modem (alta quota, brutto tempo)", "gui.computercraft.config.peripheral.modem_high_altitude_range_during_storm": "Raggio Modem (alta quota, brutto tempo)",
"gui.computercraft.config.peripheral.modem_high_altitude_range_during_storm.tooltip": "La distanza massima dei modem wireless all'altitudine massima durante una tempesta. in metri.\nRange: 0 ~ 100000",
"gui.computercraft.config.peripheral.modem_range": "Raggio Modem (default)", "gui.computercraft.config.peripheral.modem_range": "Raggio Modem (default)",
"gui.computercraft.config.peripheral.modem_range.tooltip": "La distanza massima dei modem wireless ad altitudini basse durante il meteo soleggiato. in metri.\nRange: 0 ~ 100000",
"gui.computercraft.config.peripheral.modem_range_during_storm": "Raggio Modem (brutto tempo)", "gui.computercraft.config.peripheral.modem_range_during_storm": "Raggio Modem (brutto tempo)",
"gui.computercraft.config.peripheral.modem_range_during_storm.tooltip": "La distanza massima dei modem wireless ad altitudini basse durante una tempesta. in metri.\nRange: 0 ~ 100000",
"gui.computercraft.config.peripheral.monitor_bandwidth": "Banda larga monitor",
"gui.computercraft.config.peripheral.monitor_bandwidth.tooltip": "Il limite di quanti dati dei monitor possono essere inviati *al tick*. Nota:\n - La banda larga è misurata prima della compressione, così che il dato inviato al client è\n più piccolo.\n - Questo ignora il numero di giocatori a cui viene inviato il pacchetto. Aggiornare un monitor\n per un giocatore consuma lo stesso limite di banda larga dell'invio a 20 giocatori.\n - Un monitor alla massima grandezza invia ~25kb di dati. Quindi il valore predefinito (1MB) concede\n ~40 monitor di essere aggiornati in un singolo tick.\nImposta a 0 per disattivare.\nRange: > 0",
"gui.computercraft.config.peripheral.tooltip": "Opzioni varie riguardo le periferiche.",
"gui.computercraft.config.term_sizes": "Dimensioni terminale",
"gui.computercraft.config.term_sizes.computer": "Computer",
"gui.computercraft.config.term_sizes.computer.height": "Altezza terminale",
"gui.computercraft.config.term_sizes.computer.height.tooltip": "Range: 1 ~ 255",
"gui.computercraft.config.term_sizes.computer.tooltip": "Dimensioni del terminale dei computer.",
"gui.computercraft.config.term_sizes.computer.width": "Larghezza terminale",
"gui.computercraft.config.term_sizes.computer.width.tooltip": "Intervallo: 1 ~ 255",
"gui.computercraft.config.term_sizes.monitor": "Monitor",
"gui.computercraft.config.term_sizes.monitor.height": "Massima altezza del monitor",
"gui.computercraft.config.term_sizes.monitor.height.tooltip": "Range: 1 ~ 32",
"gui.computercraft.config.term_sizes.monitor.tooltip": "Massima grandezza dei monitor (in blocchi).",
"gui.computercraft.config.term_sizes.monitor.width": "Larghezza massima del monitor",
"gui.computercraft.config.term_sizes.monitor.width.tooltip": "Range: 1 ~ 32",
"gui.computercraft.config.term_sizes.pocket_computer": "Computer Tascabile",
"gui.computercraft.config.term_sizes.pocket_computer.height": "Altezza terminale",
"gui.computercraft.config.term_sizes.pocket_computer.height.tooltip": "Range: 1 ~ 255",
"gui.computercraft.config.term_sizes.pocket_computer.tooltip": "Dimensioni del terminale dei computer tascabili.",
"gui.computercraft.config.term_sizes.pocket_computer.width": "Larghezza terminale",
"gui.computercraft.config.term_sizes.pocket_computer.width.tooltip": "Range: 1 ~ 255",
"gui.computercraft.config.term_sizes.tooltip": "Configura le dimensioni dei terminali di vari computer.\nTerminali più grandi richiedono più banda larga, usa con cautela.",
"gui.computercraft.config.turtle": "Tartarughe", "gui.computercraft.config.turtle": "Tartarughe",
"gui.computercraft.config.turtle.advanced_fuel_limit": "Limite carburante tartarughe avanzate", "gui.computercraft.config.turtle.advanced_fuel_limit": "Limite carburante tartarughe avanzate",
"gui.computercraft.config.turtle.advanced_fuel_limit.tooltip": "Limite carburante delle Tartarughe Avanzate.\nRange: > 0",
"gui.computercraft.config.turtle.can_push": "Le tartarughe possono spingere le entità", "gui.computercraft.config.turtle.can_push": "Le tartarughe possono spingere le entità",
"gui.computercraft.config.turtle.can_push.tooltip": "Se impostato a true, le Tartarughe spingeranno le entità fuori dai piedi invece\ndi fermarsi se c'è spazio.",
"gui.computercraft.config.turtle.need_fuel": "Attiva carburante", "gui.computercraft.config.turtle.need_fuel": "Attiva carburante",
"gui.computercraft.config.turtle.need_fuel.tooltip": "Imposta se la Tartaruga richiede del carburante per muoversi.",
"gui.computercraft.config.turtle.normal_fuel_limit": "Limite carburante tartarughe", "gui.computercraft.config.turtle.normal_fuel_limit": "Limite carburante tartarughe",
"gui.computercraft.config.turtle.normal_fuel_limit.tooltip": "Limite carburante delle Tartarughe.\nRange: > 0",
"gui.computercraft.config.turtle.tooltip": "Opzioni varie riguardo le tartarughe.",
"gui.computercraft.config.upload_max_size": "Limite delle dimensioni dei file da caricare (byte)",
"gui.computercraft.config.upload_max_size.tooltip": "Il limite delle dimensioni dei file da caricare, in byte. Deve essere in range di 1KiB e 16 MiB.\nRicorda che i caricamenti sono processati in un singolo tick - i file grandi o\nuna rete di bassa qualità può bloccare il thread di rete. E ricorda anche lo spazio di archiviazione dei dischi!\nRange: 1024 ~ 16777216",
"gui.computercraft.config.upload_nag_delay": "Ritardo nel caricamento",
"gui.computercraft.config.upload_nag_delay.tooltip": "Ritardo in secondi dopo il quale verranno notificate le importazioni non gestite. Imposta a 0 per disattivare.\nRange: 0 ~ 60",
"gui.computercraft.pocket_computer_overlay": "Computer tascabile aperto. Premi ESC per chiudere.", "gui.computercraft.pocket_computer_overlay": "Computer tascabile aperto. Premi ESC per chiudere.",
"gui.computercraft.terminal": "Terminale computer",
"gui.computercraft.tooltip.computer_id": "ID Computer: %s", "gui.computercraft.tooltip.computer_id": "ID Computer: %s",
"gui.computercraft.tooltip.copy": "Copia negli appunti", "gui.computercraft.tooltip.copy": "Copia negli appunti",
"gui.computercraft.tooltip.disk_id": "ID Disco: %s", "gui.computercraft.tooltip.disk_id": "ID Disco: %s",
@ -113,6 +189,8 @@
"gui.computercraft.upload.failed.name_too_long": "I nomi dei file sono troppo lunghi per essere caricati.", "gui.computercraft.upload.failed.name_too_long": "I nomi dei file sono troppo lunghi per essere caricati.",
"gui.computercraft.upload.failed.too_many_files": "Non puoi caricare troppi file.", "gui.computercraft.upload.failed.too_many_files": "Non puoi caricare troppi file.",
"gui.computercraft.upload.failed.too_much": "I tuoi file sono troppo grandi per essere caricati.", "gui.computercraft.upload.failed.too_much": "I tuoi file sono troppo grandi per essere caricati.",
"gui.computercraft.upload.no_response": "Trasferimento File",
"gui.computercraft.upload.no_response.msg": "Il tuo computer non ha usato i tuoi file trasferiti. Potresti aver bisogno di eseguire il programma %s e riprovare di nuovo.",
"item.computercraft.disk": "Disco Floppy", "item.computercraft.disk": "Disco Floppy",
"item.computercraft.pocket_computer_advanced": "Computer Tascabile Avanzato", "item.computercraft.pocket_computer_advanced": "Computer Tascabile Avanzato",
"item.computercraft.pocket_computer_advanced.upgraded": "Computer Tascabile %s Avanzato", "item.computercraft.pocket_computer_advanced.upgraded": "Computer Tascabile %s Avanzato",
@ -123,12 +201,17 @@
"item.computercraft.printed_pages": "Pagine Stampate", "item.computercraft.printed_pages": "Pagine Stampate",
"item.computercraft.treasure_disk": "Disco Floppy", "item.computercraft.treasure_disk": "Disco Floppy",
"itemGroup.computercraft": "ComputerCraft", "itemGroup.computercraft": "ComputerCraft",
"tracking_field.computercraft.coroutines_created.name": "Coroutine create", "tracking_field.computercraft.avg": "%s (media)",
"tracking_field.computercraft.coroutines_dead.name": "Coroutine cancellate", "tracking_field.computercraft.computer_tasks.name": "Attività",
"tracking_field.computercraft.count": "%s (conta)",
"tracking_field.computercraft.fs.name": "Operazioni filesystem", "tracking_field.computercraft.fs.name": "Operazioni filesystem",
"tracking_field.computercraft.http_download.name": "Download HTTP", "tracking_field.computercraft.http_download.name": "Download HTTP",
"tracking_field.computercraft.http_requests.name": "Richieste HTTP",
"tracking_field.computercraft.http_upload.name": "Upload HTTP", "tracking_field.computercraft.http_upload.name": "Upload HTTP",
"tracking_field.computercraft.max": "%s (massimo)",
"tracking_field.computercraft.peripheral.name": "Chiamate alle periferiche", "tracking_field.computercraft.peripheral.name": "Chiamate alle periferiche",
"tracking_field.computercraft.server_tasks.name": "Attività server",
"tracking_field.computercraft.turtle_ops.name": "Operazioni tartarughe",
"tracking_field.computercraft.websocket_incoming.name": "Websocket in arrivo", "tracking_field.computercraft.websocket_incoming.name": "Websocket in arrivo",
"tracking_field.computercraft.websocket_outgoing.name": "Websocket in uscita", "tracking_field.computercraft.websocket_outgoing.name": "Websocket in uscita",
"upgrade.computercraft.speaker.adjective": "Rumoroso", "upgrade.computercraft.speaker.adjective": "Rumoroso",
@ -139,93 +222,5 @@
"upgrade.minecraft.diamond_hoe.adjective": "Contadina", "upgrade.minecraft.diamond_hoe.adjective": "Contadina",
"upgrade.minecraft.diamond_pickaxe.adjective": "Minatrice", "upgrade.minecraft.diamond_pickaxe.adjective": "Minatrice",
"upgrade.minecraft.diamond_shovel.adjective": "Scavatrice", "upgrade.minecraft.diamond_shovel.adjective": "Scavatrice",
"upgrade.minecraft.diamond_sword.adjective": "Da Combattimento", "upgrade.minecraft.diamond_sword.adjective": "Da Combattimento"
"gui.computercraft.config.term_sizes.computer.width.tooltip": "Intervallo: 1 ~ 255",
"gui.computercraft.config.turtle.need_fuel.tooltip": "Imposta se la Tartaruga richiede del carburante per muoversi.",
"gui.computercraft.config.command_require_creative": "Il computer Comando richiede la modalità creativa",
"tracking_field.computercraft.http_requests.name": "Richieste HTTP",
"gui.computercraft.config.command_require_creative.tooltip": "Richiede che i giocatori siano in modalità creativa e che siano operatori in ordine per interagire con\ni computer di commando. Questo è il comportamento predefinito dei blocchi di comando.",
"gui.computercraft.config.disable_lua51_features.tooltip": "Imposta a \"true\" per disattivare le funzionalità di Lua 5.1 che saranno rimosse in un\naggiornamento futuro. Utile per assicurare futura compatibilità con i tuoi programmi.",
"gui.computercraft.config.execution": "Esecuzione",
"gui.computercraft.config.execution.max_main_computer_time": "Limite di tempo del computer nel server",
"gui.computercraft.config.execution.max_main_computer_time.tooltip": "Il tempo massimo ideale che un computer può eseguire in un tick, in millisecondi.\nNota, potremmo andare ben sopra questo limite, perché non c'è modo di sapere\nquanto impiega, questa configurazione mira ad essere il limite maggiore del tempo medio.\nRange: > 1",
"gui.computercraft.config.execution.max_main_global_time": "Limite tempo globale dei tick del server",
"gui.computercraft.config.execution.tooltip": "Controlla comportamento esecuzione dei computer. Questo è largamente utilizzato\nper ritoccare la performance dei server, e generale non dovrebbe essere toccato.",
"gui.computercraft.config.floppy_space_limit.tooltip": "Limite di spazio di archiviazione per i dischi floppy, in byte.",
"gui.computercraft.config.http.bandwidth": "Banda larga",
"gui.computercraft.config.http.bandwidth.global_download": "Limite download globale",
"gui.computercraft.config.http.bandwidth.global_download.tooltip": "Numero di byte che possono essere scaricati in un secondo. Questo è condiviso tra tutti i computer. (bytes/s).\nRange: > 1",
"gui.computercraft.config.http.bandwidth.global_upload": "Limite upload globale",
"gui.computercraft.config.http.bandwidth.global_upload.tooltip": "Numero di byte che possono essere caricati in un secondo. Questo è condiviso tra tutti i computer. (bytes/s).\nRange: > 1",
"gui.computercraft.config.http.bandwidth.tooltip": "Limita la banda larga usato dai computer.",
"gui.computercraft.config.http.max_requests.tooltip": "Il numero di richieste http che un computer può fare alla volta. Ulteriori richieste\nverranno messe in coda, ed inviate quando le richieste correnti sono terminate.\nImposta a 0 per illimitato.\nRange: > 0",
"gui.computercraft.config.http.max_websockets.tooltip": "Il numero di websocket che un computer può avere aperte allo stesso momento.\nImposta a 0 per illimitato.\nRange: > 1",
"gui.computercraft.config.http.rules": "Concedi/nega regole",
"gui.computercraft.config.maximum_open_files.tooltip": "Imposta quanti file possono essere aperti allo stesso momento su un computer. Imposta a 0 per illimitato.\nRange: > 0",
"gui.computercraft.config.monitor_distance": "Distanza monitor",
"gui.computercraft.config.monitor_distance.tooltip": "Distanza massima che i monitor vengono renderizzati. Questo è predefinito al limite\nstandard dei tile entity, ma può essere esteso se desideri construire monitor più grandi.\nRange: 16 ~ 1024",
"gui.computercraft.config.monitor_renderer": "Renderizzatore monitor",
"gui.computercraft.config.peripheral.command_block_enabled.tooltip": "Attiva il supporto ai blocchi di comando come periferiche",
"gui.computercraft.config.peripheral.max_notes_per_tick.tooltip": "Quantità massima di note che un altoparlante può riprodurre allo stesso momento.\nRange: > 1",
"gui.computercraft.config.peripheral.modem_high_altitude_range.tooltip": "La distanza massima dei modem wireless all'altitudine massima durante il meteo soleggiato. in metri.\nRange: 0 ~ 100000",
"gui.computercraft.config.peripheral.modem_high_altitude_range_during_storm.tooltip": "La distanza massima dei modem wireless all'altitudine massima durante una tempesta. in metri.\nRange: 0 ~ 100000",
"gui.computercraft.config.peripheral.modem_range.tooltip": "La distanza massima dei modem wireless ad altitudini basse durante il meteo soleggiato. in metri.\nRange: 0 ~ 100000",
"gui.computercraft.config.peripheral.modem_range_during_storm.tooltip": "La distanza massima dei modem wireless ad altitudini basse durante una tempesta. in metri.\nRange: 0 ~ 100000",
"gui.computercraft.config.peripheral.monitor_bandwidth": "Banda larga monitor",
"gui.computercraft.config.computer_space_limit.tooltip": "Limite di spazio di archiviazione per i computer e le tartarughe, in byte.",
"gui.computercraft.config.default_computer_settings.tooltip": "Una lista di impostazioni predefinite per i nuovi computer, separate da virgola.\nEsempio: \"shell.autocomplete=false,lua.autocomplete=false,edit.autocomplete=false\"\ndisattiverà tutti gli autocompletamenti.",
"gui.computercraft.config.execution.computer_threads.tooltip": "Imposta la quantità di thread che possono eseguire i computer. Un numero più alto significa\nche più computer possono essere eseguiti alla volta, ma può indurre a lag. Alcune mod potrebbero\nnon funzionare con numeri di thread maggiore a 1. Usare con cautela.\nRange: > 1",
"gui.computercraft.config.execution.max_main_global_time.tooltip": "Il limite massimo di tempo che può essere usato per eseguire task in un singolo tick,\nin millisecondi.\nNota, potremmo andare ben sopra questo limite, perché non c'è modo di sapere\nquanto impiega, questa configurazione mira ad essere il limite maggiore del tempo medio.\nRange: > 1",
"gui.computercraft.config.http.enabled.tooltip": "Attiva l'API \"http\" sui computer. Disattivandolo, vengono disattivati anche i programmi \"pastebin\" e \"wget\", \ndi cui molti utenti dipendono. È raccomandato lasciarlo attivo ed utilizzare l'opzione \n\"rules\" per imporre controlli più adeguati.",
"gui.computercraft.config.http.rules.tooltip": "Una lista di regole che controllano il comportamento dell'API \"http\" per specifici domini\no indirizzi IP. Ogni regola corrisponde ad un nome host ed una porta opzionale, e poi imposta varie\nproprietà per la richiesta. Le regole sono valutate in ordine, cioè le prime regole sovvrascrivono le successive.\n\nProprietà valide:\n - \"host\" (richiesto): Il dominio o l'indirizzo IP della regola. Può essere un nome di dominio\n (\"pastebin.com\"), jolly (\"*.pastebin.com\") o notazione CIDR (\"127.0.0.0/8\").\n - \"port\" (opzionale): Corrisponde solo a richieste con una specifica porta, come 80 o 443.\n\n - \"action\" (opzionale): Se consentire o negare la richiesta.\n - \"max_download\" (opzionale): Quantità massima (in byte) che un computer può scaricare in\n questa richiesta.\n - \"max_upload\" (opzionale): Quantità massima (in byte) che un computer può caricare in\n questa richiesta.\n - \"max_websocket_message\" (opzionale): Quantità massima (in byte) che un computer può inviare o\n ricevere in un pacchetto websocket.\n - \"use_proxy\" (opzionale): Attiva l'uso di un proxy HTTP/SOCKS se configurato.",
"gui.computercraft.config.http.tooltip": "Controlla l'API HTTP",
"gui.computercraft.config.http.websocket_enabled.tooltip": "Attiva l'uso di websocket http. Questo richiede che l'opzione \"http_enable\" sia attiva.",
"gui.computercraft.config.log_computer_errors.tooltip": "Registra le eccezioni lanciate dalle periferiche e altri oggetti di Lua. Questo rende più facile\nper gli autori di mod per il debug di problemi, ma potrebbe risultare in spam di log durante\nl'uso di metodi buggati.",
"gui.computercraft.config.monitor_renderer.tooltip": "Il renderizzatore da usare per i monitor. Generalmente si dovrebbe lasciare su \"best\", se\ni monitor hanno problemi di performance, puoi sperimentare con renderizzatori alternativi.\nValori concessi: BEST, TBO, VBO",
"gui.computercraft.config.peripheral.monitor_bandwidth.tooltip": "Il limite di quanti dati dei monitor possono essere inviati *al tick*. Nota:\n - La banda larga è misurata prima della compressione, così che il dato inviato al client è\n più piccolo.\n - Questo ignora il numero di giocatori a cui viene inviato il pacchetto. Aggiornare un monitor\n per un giocatore consuma lo stesso limite di banda larga dell'invio a 20 giocatori.\n - Un monitor alla massima grandezza invia ~25kb di dati. Quindi il valore predefinito (1MB) concede\n ~40 monitor di essere aggiornati in un singolo tick.\nImposta a 0 per disattivare.\nRange: > 0",
"gui.computercraft.terminal": "Terminale computer",
"tracking_field.computercraft.turtle_ops.name": "Operazioni tartarughe",
"tracking_field.computercraft.avg": "%s (media)",
"tracking_field.computercraft.computer_tasks.name": "Attività",
"tracking_field.computercraft.count": "%s (conta)",
"tracking_field.computercraft.max": "%s (massimo)",
"tracking_field.computercraft.server_tasks.name": "Attività server",
"gui.computercraft.upload.no_response": "Trasferimento File",
"gui.computercraft.config.peripheral.tooltip": "Opzioni varie riguardo le periferiche.",
"gui.computercraft.config.term_sizes.computer": "Computer",
"gui.computercraft.config.term_sizes.computer.height": "Altezza terminale",
"gui.computercraft.config.term_sizes.computer.height.tooltip": "Range: 1 ~ 255",
"gui.computercraft.config.term_sizes": "Dimensioni terminale",
"gui.computercraft.config.term_sizes.computer.tooltip": "Dimensioni del terminale dei computer.",
"gui.computercraft.config.term_sizes.computer.width": "Larghezza terminale",
"gui.computercraft.config.term_sizes.monitor": "Monitor",
"gui.computercraft.config.term_sizes.monitor.height": "Massima altezza del monitor",
"gui.computercraft.config.term_sizes.monitor.height.tooltip": "Range: 1 ~ 32",
"gui.computercraft.config.term_sizes.monitor.tooltip": "Massima grandezza dei monitor (in blocchi).",
"gui.computercraft.config.term_sizes.monitor.width": "Larghezza massima del monitor",
"gui.computercraft.config.term_sizes.monitor.width.tooltip": "Range: 1 ~ 32",
"gui.computercraft.config.term_sizes.pocket_computer": "Computer Tascabile",
"gui.computercraft.config.term_sizes.pocket_computer.height": "Altezza terminale",
"gui.computercraft.config.term_sizes.pocket_computer.height.tooltip": "Range: 1 ~ 255",
"gui.computercraft.config.term_sizes.pocket_computer.tooltip": "Dimensioni del terminale dei computer tascabili.",
"gui.computercraft.config.term_sizes.pocket_computer.width": "Larghezza terminale",
"gui.computercraft.config.term_sizes.pocket_computer.width.tooltip": "Range: 1 ~ 255",
"gui.computercraft.config.turtle.advanced_fuel_limit.tooltip": "Limite carburante delle Tartarughe Avanzate.\nRange: > 0",
"gui.computercraft.config.turtle.can_push.tooltip": "Se impostato a true, le Tartarughe spingeranno le entità fuori dai piedi invece\ndi fermarsi se c'è spazio.",
"gui.computercraft.config.turtle.normal_fuel_limit.tooltip": "Limite carburante delle Tartarughe.\nRange: > 0",
"gui.computercraft.config.turtle.tooltip": "Opzioni varie riguardo le tartarughe.",
"gui.computercraft.config.upload_nag_delay": "Ritardo nel caricamento",
"gui.computercraft.config.term_sizes.tooltip": "Configura le dimensioni dei terminali di vari computer.\nTerminali più grandi richiedono più banda larga, usa con cautela.",
"gui.computercraft.config.upload_nag_delay.tooltip": "Ritardo in secondi dopo il quale verranno notificate le importazioni non gestite. Imposta a 0 per disattivare.\nRange: 0 ~ 60",
"gui.computercraft.upload.no_response.msg": "Il tuo computer non ha usato i tuoi file trasferiti. Potresti aver bisogno di eseguire il programma %s e riprovare di nuovo.",
"gui.computercraft.config.upload_max_size.tooltip": "Il limite delle dimensioni dei file da caricare, in byte. Deve essere in range di 1KiB e 16 MiB.\nRicorda che i caricamenti sono processati in un singolo tick - i file grandi o\nuna rete di bassa qualità può bloccare il thread di rete. E ricorda anche lo spazio di archiviazione dei dischi!\nRange: 1024 ~ 16777216",
"gui.computercraft.config.http.proxy": "Proxy",
"gui.computercraft.config.http.proxy.host": "Nome host",
"gui.computercraft.config.http.proxy.host.tooltip": "Il nome dell'host o l'indirizzo IP del server proxy.",
"gui.computercraft.config.http.proxy.port": "Porta",
"gui.computercraft.config.http.proxy.port.tooltip": "La porta del server proxy.\nRange: 1 ~ 65536",
"gui.computercraft.config.http.proxy.tooltip": "Transmetti richieste HTTP e websocket attraverso un server proxy. Ha effetto solo\nsu regole HTTP con \"use_proxy\" attivo (disattivato di default).\nSe l'autenticazione è richiesta per il proxy, creare un file \"computercraft-proxy.pw\"\nnella stessa cartella di \"computercraft-server.toml\", contenendo il nome utente e\npassword separati dal carattere due punti, per esempio: \"myuser:mypassword\".\nI proxy SOCKS4 necessitano solo il nome utente.",
"gui.computercraft.config.http.proxy.type": "Tipo proxy",
"gui.computercraft.config.http.proxy.type.tooltip": "Il tipo di proxy da usare.\nValori consentiti: HTTP, HTTPS, SOCKS4, SOCKS5",
"gui.computercraft.config.upload_max_size": "Limite delle dimensioni dei file da caricare (byte)"
} }

View File

@ -41,9 +41,6 @@
"commands.computercraft.help.synopsis": "特定のコマンドのヘルプを提供します", "commands.computercraft.help.synopsis": "特定のコマンドのヘルプを提供します",
"commands.computercraft.queue.desc": "追加の引数を通過する computer_command インベントをコマンドコンピューターに送信します。これは主にマップメーカーのために設計されており、よりコンピュータフレンドリーバージョンの /trigger として機能します。 どのプレイヤーでもコマンドを実行できます。これは、テキストコンポーネントのクリックイベントを介して行われる可能性があります。", "commands.computercraft.queue.desc": "追加の引数を通過する computer_command インベントをコマンドコンピューターに送信します。これは主にマップメーカーのために設計されており、よりコンピュータフレンドリーバージョンの /trigger として機能します。 どのプレイヤーでもコマンドを実行できます。これは、テキストコンポーネントのクリックイベントを介して行われる可能性があります。",
"commands.computercraft.queue.synopsis": "computer_command インベントをコマンドコンピューターに送信します", "commands.computercraft.queue.synopsis": "computer_command インベントをコマンドコンピューターに送信します",
"commands.computercraft.reload.desc": "コンピュータークラフトのコンフィグファイルを再読み込みします",
"commands.computercraft.reload.done": "コンフィグを再読み込みしました",
"commands.computercraft.reload.synopsis": "コンピュータークラフトのコンフィグファイルを再読み込みします",
"commands.computercraft.shutdown.desc": "指定されたコンピュータ、指定されていない場合はすべてのコンピュータをシャットダウンします。 コンピュータのインスタンスID (例えば 123), コンピュータID (例えば #123) またはラベル (例えば \\\"@My Computer\\\") を指定することができます。", "commands.computercraft.shutdown.desc": "指定されたコンピュータ、指定されていない場合はすべてのコンピュータをシャットダウンします。 コンピュータのインスタンスID (例えば 123), コンピュータID (例えば #123) またはラベル (例えば \\\"@My Computer\\\") を指定することができます。",
"commands.computercraft.shutdown.done": "%s/%s コンピューターをシャットダウンしました", "commands.computercraft.shutdown.done": "%s/%s コンピューターをシャットダウンしました",
"commands.computercraft.shutdown.synopsis": "コンピュータをリモートでシャットダウンする。", "commands.computercraft.shutdown.synopsis": "コンピュータをリモートでシャットダウンする。",
@ -99,8 +96,6 @@
"item.computercraft.printed_pages": "印刷された紙束", "item.computercraft.printed_pages": "印刷された紙束",
"item.computercraft.treasure_disk": "フロッピーディスク", "item.computercraft.treasure_disk": "フロッピーディスク",
"itemGroup.computercraft": "ComputerCraft", "itemGroup.computercraft": "ComputerCraft",
"tracking_field.computercraft.coroutines_created.name": "コルーチン作成",
"tracking_field.computercraft.coroutines_dead.name": "コルーチン削除",
"tracking_field.computercraft.fs.name": "ファイルシステム演算", "tracking_field.computercraft.fs.name": "ファイルシステム演算",
"tracking_field.computercraft.http_download.name": "HTTPダウンロード", "tracking_field.computercraft.http_download.name": "HTTPダウンロード",
"tracking_field.computercraft.http_upload.name": "HTTPアップロード", "tracking_field.computercraft.http_upload.name": "HTTPアップロード",

View File

@ -41,9 +41,6 @@
"commands.computercraft.help.synopsis": "특정 명령어에 대한 도움말을 제공하기", "commands.computercraft.help.synopsis": "특정 명령어에 대한 도움말을 제공하기",
"commands.computercraft.queue.desc": "computer_command 이벤트를 명령 컴퓨터로 전송하여 추가 인수를 전달합니다. 이는 대부분 지도 제작자를 위해 설계되었으며, 보다 컴퓨터 친화적인 버전의 /trigger 역할을 합니다. 어떤 플레이어든 명령을 실행할 수 있으며, 이는 텍스트 구성 요소의 클릭 이벤트를 통해 수행될 가능성이 가장 높습니다.", "commands.computercraft.queue.desc": "computer_command 이벤트를 명령 컴퓨터로 전송하여 추가 인수를 전달합니다. 이는 대부분 지도 제작자를 위해 설계되었으며, 보다 컴퓨터 친화적인 버전의 /trigger 역할을 합니다. 어떤 플레이어든 명령을 실행할 수 있으며, 이는 텍스트 구성 요소의 클릭 이벤트를 통해 수행될 가능성이 가장 높습니다.",
"commands.computercraft.queue.synopsis": "computer_command 이벤트를 명령 컴퓨터에 보내기", "commands.computercraft.queue.synopsis": "computer_command 이벤트를 명령 컴퓨터에 보내기",
"commands.computercraft.reload.desc": "컴퓨터크래프트 구성파일을 리로드합니다.",
"commands.computercraft.reload.done": "리로드된 구성",
"commands.computercraft.reload.synopsis": "컴퓨터크래프트 구성파일을 리로드하기",
"commands.computercraft.shutdown.desc": "나열된 시스템 또는 지정된 시스템이 없는 경우 모두 종료합니다. 컴퓨터의 인스턴스 ID(예: 123)나 컴퓨터 ID(예: #123) 또는 라벨(예: \"@My Computer\")을 지정할 수 있습니다.", "commands.computercraft.shutdown.desc": "나열된 시스템 또는 지정된 시스템이 없는 경우 모두 종료합니다. 컴퓨터의 인스턴스 ID(예: 123)나 컴퓨터 ID(예: #123) 또는 라벨(예: \"@My Computer\")을 지정할 수 있습니다.",
"commands.computercraft.shutdown.done": "%s/%s 컴퓨터 시스템 종료", "commands.computercraft.shutdown.done": "%s/%s 컴퓨터 시스템 종료",
"commands.computercraft.shutdown.synopsis": "시스템을 원격으로 종료하기", "commands.computercraft.shutdown.synopsis": "시스템을 원격으로 종료하기",
@ -126,8 +123,6 @@
"item.computercraft.printed_pages": "인쇄된 페이지 모음", "item.computercraft.printed_pages": "인쇄된 페이지 모음",
"item.computercraft.treasure_disk": "플로피 디스크", "item.computercraft.treasure_disk": "플로피 디스크",
"itemGroup.computercraft": "컴퓨터크래프트", "itemGroup.computercraft": "컴퓨터크래프트",
"tracking_field.computercraft.coroutines_created.name": "코루틴 생성됨",
"tracking_field.computercraft.coroutines_dead.name": "코루틴 처리됨",
"tracking_field.computercraft.fs.name": "파일시스템 작업", "tracking_field.computercraft.fs.name": "파일시스템 작업",
"tracking_field.computercraft.http_download.name": "HTTP 다운로드", "tracking_field.computercraft.http_download.name": "HTTP 다운로드",
"tracking_field.computercraft.http_upload.name": "HTTP 업로드", "tracking_field.computercraft.http_upload.name": "HTTP 업로드",

View File

@ -41,9 +41,6 @@
"commands.computercraft.help.synopsis": "Gi hjelp til en spesifikk kommando", "commands.computercraft.help.synopsis": "Gi hjelp til en spesifikk kommando",
"commands.computercraft.queue.desc": "Send en computer_command hendelse til en kommando datamaskin, sender også tilleggs-argumentene Dette er hovedsakelig designet for kartskapere, og fungerer som en mer datamaskin vennlig versjon av /trigger. Enhver spiller kan kjøre kommandoen, som mest sannsynlig vil bli gjort gjennom en tekst komponent sin klikk hendelse.", "commands.computercraft.queue.desc": "Send en computer_command hendelse til en kommando datamaskin, sender også tilleggs-argumentene Dette er hovedsakelig designet for kartskapere, og fungerer som en mer datamaskin vennlig versjon av /trigger. Enhver spiller kan kjøre kommandoen, som mest sannsynlig vil bli gjort gjennom en tekst komponent sin klikk hendelse.",
"commands.computercraft.queue.synopsis": "Send en computer_command hendelse til en kommando datamaskin", "commands.computercraft.queue.synopsis": "Send en computer_command hendelse til en kommando datamaskin",
"commands.computercraft.reload.desc": "Last inn ComputerCraft sin konfigurasjonsfil på nytt",
"commands.computercraft.reload.done": "Lastet konfigurasjon på nytt",
"commands.computercraft.reload.synopsis": "Last inn ComputerCraft sin konfigurasjonsfil på nytt",
"commands.computercraft.shutdown.desc": "Slå av de oppførte datamaskinene eller alle hvis ingen er spesifisert. Du kan spesifisere datamaskinens forekomst (f. eks 123), datamaskinens id (f. eks #123) eller merkelapp (f.eks \"@Min datamaskin\").", "commands.computercraft.shutdown.desc": "Slå av de oppførte datamaskinene eller alle hvis ingen er spesifisert. Du kan spesifisere datamaskinens forekomst (f. eks 123), datamaskinens id (f. eks #123) eller merkelapp (f.eks \"@Min datamaskin\").",
"commands.computercraft.shutdown.done": "Skrudde av %s/%s datamaskiner", "commands.computercraft.shutdown.done": "Skrudde av %s/%s datamaskiner",
"commands.computercraft.shutdown.synopsis": "Slå av datamaskiner eksternt.", "commands.computercraft.shutdown.synopsis": "Slå av datamaskiner eksternt.",
@ -73,7 +70,24 @@
"commands.computercraft.view.desc": "Åpner terminalen til en datamaskin, lar deg fjernstyre den. Dette gir deg ikke tilgang til skilpadders inventar. Du kan enten spesifisere datamaskinens forekomst id (f. eks 123) eller datamaskinens id (f. eks #123).", "commands.computercraft.view.desc": "Åpner terminalen til en datamaskin, lar deg fjernstyre den. Dette gir deg ikke tilgang til skilpadders inventar. Du kan enten spesifisere datamaskinens forekomst id (f. eks 123) eller datamaskinens id (f. eks #123).",
"commands.computercraft.view.not_player": "Kan kun åpne terminal for spillere", "commands.computercraft.view.not_player": "Kan kun åpne terminal for spillere",
"commands.computercraft.view.synopsis": "Vis terminal til en datamaskin.", "commands.computercraft.view.synopsis": "Vis terminal til en datamaskin.",
"gui.computercraft.config.command_require_creative": "Kommando datamaskiner trenger kreativ",
"gui.computercraft.config.http": "HTTP",
"gui.computercraft.config.http.enabled": "Slå på HTTP APIen",
"gui.computercraft.config.http.rules": "Godta/Avslå regler",
"gui.computercraft.config.monitor_distance": "Skjerm distanse",
"gui.computercraft.config.term_sizes": "Terminal størrelser",
"gui.computercraft.config.term_sizes.computer": "Datamaskin",
"gui.computercraft.config.term_sizes.computer.height": "Terminal høyde",
"gui.computercraft.config.term_sizes.computer.width": "Terminal bredde",
"gui.computercraft.config.term_sizes.monitor": "Skjerm",
"gui.computercraft.config.term_sizes.monitor.height": "Maksimum skjerm høyde",
"gui.computercraft.config.term_sizes.monitor.width": "Maksimum skjerm bredde",
"gui.computercraft.config.term_sizes.pocket_computer.height": "Terminal høyde",
"gui.computercraft.config.term_sizes.pocket_computer.width": "Terminal bredde",
"gui.computercraft.config.turtle": "Skilpadde",
"gui.computercraft.config.turtle.need_fuel": "Aktiver drivstoff",
"gui.computercraft.pocket_computer_overlay": "Lommedatamaskin åpen. Trykk ESC for å lukke.", "gui.computercraft.pocket_computer_overlay": "Lommedatamaskin åpen. Trykk ESC for å lukke.",
"gui.computercraft.terminal": "Datamaskin terminal",
"gui.computercraft.tooltip.computer_id": "Datamaskin ID: %s", "gui.computercraft.tooltip.computer_id": "Datamaskin ID: %s",
"gui.computercraft.tooltip.copy": "Kopier til utklippstavle", "gui.computercraft.tooltip.copy": "Kopier til utklippstavle",
"gui.computercraft.tooltip.disk_id": "Disk ID: %s", "gui.computercraft.tooltip.disk_id": "Disk ID: %s",
@ -89,6 +103,7 @@
"gui.computercraft.upload.failed.name_too_long": "Fil navnene er for lange til å bli lastet opp.", "gui.computercraft.upload.failed.name_too_long": "Fil navnene er for lange til å bli lastet opp.",
"gui.computercraft.upload.failed.too_many_files": "Kan ikke laste opp så mange filer.", "gui.computercraft.upload.failed.too_many_files": "Kan ikke laste opp så mange filer.",
"gui.computercraft.upload.failed.too_much": "Filene dine er for store for å kunne bli lastet opp.", "gui.computercraft.upload.failed.too_much": "Filene dine er for store for å kunne bli lastet opp.",
"gui.computercraft.upload.no_response": "Overfører Filer",
"item.computercraft.disk": "Floppy Disk", "item.computercraft.disk": "Floppy Disk",
"item.computercraft.pocket_computer_advanced": "Avansert Lomme Datamaskin", "item.computercraft.pocket_computer_advanced": "Avansert Lomme Datamaskin",
"item.computercraft.pocket_computer_advanced.upgraded": "Avansert %s Lomme Datamaskin", "item.computercraft.pocket_computer_advanced.upgraded": "Avansert %s Lomme Datamaskin",
@ -99,12 +114,14 @@
"item.computercraft.printed_pages": "Printet Sider", "item.computercraft.printed_pages": "Printet Sider",
"item.computercraft.treasure_disk": "Floppy Disk", "item.computercraft.treasure_disk": "Floppy Disk",
"itemGroup.computercraft": "ComputerCraft", "itemGroup.computercraft": "ComputerCraft",
"tracking_field.computercraft.coroutines_created.name": "Skapte coroutines", "tracking_field.computercraft.computer_tasks.name": "Oppgaver",
"tracking_field.computercraft.coroutines_dead.name": "Kastede coroutiner", "tracking_field.computercraft.count": "%s (antall)",
"tracking_field.computercraft.fs.name": "Filsystem operasjoner", "tracking_field.computercraft.fs.name": "Filsystem operasjoner",
"tracking_field.computercraft.http_download.name": "HTTP-nedlasting", "tracking_field.computercraft.http_download.name": "HTTP-nedlasting",
"tracking_field.computercraft.http_upload.name": "HTTP-opplasting", "tracking_field.computercraft.http_upload.name": "HTTP-opplasting",
"tracking_field.computercraft.max": "%s (maks)",
"tracking_field.computercraft.peripheral.name": "Perifere kjøringer", "tracking_field.computercraft.peripheral.name": "Perifere kjøringer",
"tracking_field.computercraft.server_tasks.name": "Server oppgaver",
"tracking_field.computercraft.websocket_incoming.name": "Innkommende Websocket", "tracking_field.computercraft.websocket_incoming.name": "Innkommende Websocket",
"tracking_field.computercraft.websocket_outgoing.name": "Utgående Websocket", "tracking_field.computercraft.websocket_outgoing.name": "Utgående Websocket",
"upgrade.computercraft.speaker.adjective": "Høylydt", "upgrade.computercraft.speaker.adjective": "Høylydt",
@ -115,27 +132,5 @@
"upgrade.minecraft.diamond_hoe.adjective": "Dyrkende", "upgrade.minecraft.diamond_hoe.adjective": "Dyrkende",
"upgrade.minecraft.diamond_pickaxe.adjective": "Brytende", "upgrade.minecraft.diamond_pickaxe.adjective": "Brytende",
"upgrade.minecraft.diamond_shovel.adjective": "Gravende", "upgrade.minecraft.diamond_shovel.adjective": "Gravende",
"upgrade.minecraft.diamond_sword.adjective": "Kjempende", "upgrade.minecraft.diamond_sword.adjective": "Kjempende"
"gui.computercraft.terminal": "Datamaskin terminal",
"gui.computercraft.upload.no_response": "Overfører Filer",
"tracking_field.computercraft.max": "%s (maks)",
"tracking_field.computercraft.count": "%s (antall)",
"tracking_field.computercraft.computer_tasks.name": "Oppgaver",
"tracking_field.computercraft.server_tasks.name": "Server oppgaver",
"gui.computercraft.config.command_require_creative": "Kommando datamaskiner trenger kreativ",
"gui.computercraft.config.http.enabled": "Slå på HTTP APIen",
"gui.computercraft.config.monitor_distance": "Skjerm distanse",
"gui.computercraft.config.term_sizes.computer": "Datamaskin",
"gui.computercraft.config.term_sizes.computer.height": "Terminal høyde",
"gui.computercraft.config.term_sizes.monitor": "Skjerm",
"gui.computercraft.config.term_sizes.monitor.width": "Maksimum skjerm bredde",
"gui.computercraft.config.term_sizes.pocket_computer.height": "Terminal høyde",
"gui.computercraft.config.term_sizes.pocket_computer.width": "Terminal bredde",
"gui.computercraft.config.turtle": "Skilpadde",
"gui.computercraft.config.term_sizes.computer.width": "Terminal bredde",
"gui.computercraft.config.turtle.need_fuel": "Aktiver drivstoff",
"gui.computercraft.config.http": "HTTP",
"gui.computercraft.config.http.rules": "Godta/Avslå regler",
"gui.computercraft.config.term_sizes": "Terminal størrelser",
"gui.computercraft.config.term_sizes.monitor.height": "Maksimum skjerm høyde"
} }

View File

@ -41,9 +41,6 @@
"commands.computercraft.help.synopsis": "Biedt hulp voor een specifiek commando", "commands.computercraft.help.synopsis": "Biedt hulp voor een specifiek commando",
"commands.computercraft.queue.desc": "Verzend een computer_commando event naar een commandocomputer. Additionele argumenten worden doorgegeven. Dit is vooral bedoeld voor mapmakers. Het doet dienst als een computer-vriendelijke versie van /trigger. Elke speler kan het commando uitvoeren, wat meestal gedaan zal worden door een text-component klik-event.", "commands.computercraft.queue.desc": "Verzend een computer_commando event naar een commandocomputer. Additionele argumenten worden doorgegeven. Dit is vooral bedoeld voor mapmakers. Het doet dienst als een computer-vriendelijke versie van /trigger. Elke speler kan het commando uitvoeren, wat meestal gedaan zal worden door een text-component klik-event.",
"commands.computercraft.queue.synopsis": "Verzend een computer_command event naar een commandocomputer", "commands.computercraft.queue.synopsis": "Verzend een computer_command event naar een commandocomputer",
"commands.computercraft.reload.desc": "Herlaad het ComputerCraft configuratiebestand",
"commands.computercraft.reload.done": "Configuratie herladen",
"commands.computercraft.reload.synopsis": "Herlaad het ComputerCraft configuratiebestand",
"commands.computercraft.shutdown.desc": "Sluit alle genoemde computers af, of geen enkele wanneer niet gespecificeerd. Je kunt een instance-id (bijv. 123), computer-id (bijv. #123) of computer-label (bijv. \\\"@Mijn Computer\\\") opgeven.", "commands.computercraft.shutdown.desc": "Sluit alle genoemde computers af, of geen enkele wanneer niet gespecificeerd. Je kunt een instance-id (bijv. 123), computer-id (bijv. #123) of computer-label (bijv. \\\"@Mijn Computer\\\") opgeven.",
"commands.computercraft.shutdown.done": "%s/%s computers afgesloten", "commands.computercraft.shutdown.done": "%s/%s computers afgesloten",
"commands.computercraft.shutdown.synopsis": "Sluit computers af op afstand.", "commands.computercraft.shutdown.synopsis": "Sluit computers af op afstand.",
@ -97,8 +94,6 @@
"item.computercraft.printed_pages": "Geprinte Pagina's", "item.computercraft.printed_pages": "Geprinte Pagina's",
"item.computercraft.treasure_disk": "Diskette", "item.computercraft.treasure_disk": "Diskette",
"itemGroup.computercraft": "ComputerCraft", "itemGroup.computercraft": "ComputerCraft",
"tracking_field.computercraft.coroutines_created.name": "Coroutines gecreëerd",
"tracking_field.computercraft.coroutines_dead.name": "Coroutines verwijderd",
"tracking_field.computercraft.fs.name": "Restandssysteem operaties", "tracking_field.computercraft.fs.name": "Restandssysteem operaties",
"tracking_field.computercraft.http_download.name": "HTTP download", "tracking_field.computercraft.http_download.name": "HTTP download",
"tracking_field.computercraft.http_upload.name": "HTTP upload", "tracking_field.computercraft.http_upload.name": "HTTP upload",

View File

@ -1,4 +1,5 @@
{ {
"argument.computercraft.argument_expected": "Argument oczekiwany",
"block.computercraft.cable": "Kabel Sieciowy", "block.computercraft.cable": "Kabel Sieciowy",
"block.computercraft.computer_advanced": "Zaawansowany Komputer", "block.computercraft.computer_advanced": "Zaawansowany Komputer",
"block.computercraft.computer_command": "Komputer Komendowy", "block.computercraft.computer_command": "Komputer Komendowy",
@ -16,7 +17,11 @@
"commands.computercraft.desc": "Komenda /computercraft dostarcza wiele narzędzi do zarządzania, kontrolowania i administrowania komputerami.", "commands.computercraft.desc": "Komenda /computercraft dostarcza wiele narzędzi do zarządzania, kontrolowania i administrowania komputerami.",
"commands.computercraft.dump.action": "Wyświetl więcej informacji o tym komputerze", "commands.computercraft.dump.action": "Wyświetl więcej informacji o tym komputerze",
"commands.computercraft.dump.desc": "Wyświetla status wszystkich komputerów lub informacje o jednym komputerze. Możesz wybrać numer sesji komputera (np. 123), ID komputera (np. #123) lub jego etykietę (np. \"@Mój Komputer\").", "commands.computercraft.dump.desc": "Wyświetla status wszystkich komputerów lub informacje o jednym komputerze. Możesz wybrać numer sesji komputera (np. 123), ID komputera (np. #123) lub jego etykietę (np. \"@Mój Komputer\").",
"commands.computercraft.dump.open_path": "Przeglądaj pliki tego komputera",
"commands.computercraft.dump.synopsis": "Wyświetl stan komputerów.", "commands.computercraft.dump.synopsis": "Wyświetl stan komputerów.",
"commands.computercraft.generic.no_position": "<brak pozycji>",
"commands.computercraft.generic.position": "%s, %s, %s",
"commands.computercraft.generic.yes": "T",
"commands.computercraft.help.no_children": "%s nie ma pod-komend", "commands.computercraft.help.no_children": "%s nie ma pod-komend",
"commands.computercraft.help.no_command": "Nie odnaleziono komendy '%s'", "commands.computercraft.help.no_command": "Nie odnaleziono komendy '%s'",
"commands.computercraft.help.synopsis": "Uzyskaj pomoc do konkretnej komendy", "commands.computercraft.help.synopsis": "Uzyskaj pomoc do konkretnej komendy",
@ -26,7 +31,9 @@
"commands.computercraft.synopsis": "Różne komendy do kontrolowania komputerami.", "commands.computercraft.synopsis": "Różne komendy do kontrolowania komputerami.",
"commands.computercraft.tp.action": "Przeteleportuj się do podanego komputera", "commands.computercraft.tp.action": "Przeteleportuj się do podanego komputera",
"commands.computercraft.tp.desc": "Przeteleportuj się do lokalizacji komputera. Możesz wybrać numer sesji komputera (np. 123) lub ID komputera (np. #123).", "commands.computercraft.tp.desc": "Przeteleportuj się do lokalizacji komputera. Możesz wybrać numer sesji komputera (np. 123) lub ID komputera (np. #123).",
"commands.computercraft.tp.not_there": "Nie można zlokalizować komputera w świecie",
"commands.computercraft.tp.synopsis": "Przeteleportuj się do podanego komputera.", "commands.computercraft.tp.synopsis": "Przeteleportuj się do podanego komputera.",
"commands.computercraft.track.dump.computer": "Komputer",
"commands.computercraft.turn_on.desc": "Włącz podane komputery. Możesz wybrać numer sesji komputera (np. 123), ID komputera (np. #123) lub jego etykietę (np. \"@Mój Komputer\").", "commands.computercraft.turn_on.desc": "Włącz podane komputery. Możesz wybrać numer sesji komputera (np. 123), ID komputera (np. #123) lub jego etykietę (np. \"@Mój Komputer\").",
"commands.computercraft.turn_on.done": "Włączono %s z %s komputerów", "commands.computercraft.turn_on.done": "Włączono %s z %s komputerów",
"commands.computercraft.turn_on.synopsis": "Zdalnie włącz komputery.", "commands.computercraft.turn_on.synopsis": "Zdalnie włącz komputery.",

View File

@ -41,9 +41,6 @@
"commands.computercraft.help.synopsis": "Предоставляет помощь для конкретных команд", "commands.computercraft.help.synopsis": "Предоставляет помощь для конкретных команд",
"commands.computercraft.queue.desc": "Отправить событие computer_command к Командному компьютеру, проходящий через дополнительные аргументы. В основном это предназначено для Картоделов, действует как более удобная для пользователя компьютерная версия /trigger. Любой игрок сможет запустить команду, которая, по всей вероятности, будет сделана через события щелчка текстового компонента.", "commands.computercraft.queue.desc": "Отправить событие computer_command к Командному компьютеру, проходящий через дополнительные аргументы. В основном это предназначено для Картоделов, действует как более удобная для пользователя компьютерная версия /trigger. Любой игрок сможет запустить команду, которая, по всей вероятности, будет сделана через события щелчка текстового компонента.",
"commands.computercraft.queue.synopsis": "Отправить событие computer_command к Командному компьютеру", "commands.computercraft.queue.synopsis": "Отправить событие computer_command к Командному компьютеру",
"commands.computercraft.reload.desc": "Перезагружает файл конфигурации ComputerCraft'a",
"commands.computercraft.reload.done": "Конфигурация перезагружена",
"commands.computercraft.reload.synopsis": "Перезагрузить файл конфигурации ComputerCraft'a",
"commands.computercraft.shutdown.desc": "Завершить работу перечисленных компьютеров или все, если ни один не указан. Ты можешь указать идентификатор экземпляра компьютера (например 123), идентификатор компьютера (например #123) или метку (например \"@Мой компьютер\").", "commands.computercraft.shutdown.desc": "Завершить работу перечисленных компьютеров или все, если ни один не указан. Ты можешь указать идентификатор экземпляра компьютера (например 123), идентификатор компьютера (например #123) или метку (например \"@Мой компьютер\").",
"commands.computercraft.shutdown.done": "У %s/%s компьютеров завершена работа", "commands.computercraft.shutdown.done": "У %s/%s компьютеров завершена работа",
"commands.computercraft.shutdown.synopsis": "Удалённо завершить работу компьютеров.", "commands.computercraft.shutdown.synopsis": "Удалённо завершить работу компьютеров.",
@ -73,6 +70,78 @@
"commands.computercraft.view.desc": "Открыть терминал компьютера, позволяющий удалённо управлять компьютером. Это не предоставляет доступ к инвентарям черепашек. Ты можешь указать либо идентификатор экземпляра компьютера (например 123) либо идентификатор компьютера (например #123).", "commands.computercraft.view.desc": "Открыть терминал компьютера, позволяющий удалённо управлять компьютером. Это не предоставляет доступ к инвентарям черепашек. Ты можешь указать либо идентификатор экземпляра компьютера (например 123) либо идентификатор компьютера (например #123).",
"commands.computercraft.view.not_player": "Нельзя открыть терминал для не-игрока", "commands.computercraft.view.not_player": "Нельзя открыть терминал для не-игрока",
"commands.computercraft.view.synopsis": "Просмотреть терминал компьютера.", "commands.computercraft.view.synopsis": "Просмотреть терминал компьютера.",
"gui.computercraft.config.command_require_creative": "Для использования командных компьютеров нужен творческий режим",
"gui.computercraft.config.command_require_creative.tooltip": "Требовать творческий режим и права оператора для взаимодействия с\nкомандными компьютерами. Это поведение по умолчанию для Командных блоков ванильной игры.",
"gui.computercraft.config.computer_space_limit": "Лимит места на компьютерах (в байтах)",
"gui.computercraft.config.computer_space_limit.tooltip": "Лимит места на дисках компьютеров и черепашек, в байтах.",
"gui.computercraft.config.default_computer_settings": "Настройки Компьютера по умолчанию",
"gui.computercraft.config.default_computer_settings.tooltip": "Разделенный запятыми список системных настроек по умолчанию на новых компьютерах.\nНапример: \"shell.autocomplete=false,lua.autocomplete=false,edit.autocomplete=false\"\nотключит всё автодополнение.",
"gui.computercraft.config.disable_lua51_features": "Отключить функции Lua 5.1",
"gui.computercraft.config.disable_lua51_features.tooltip": "Поставьте, чтобы отключить функции из Lua 5.1, которые будут убраны в будущих\nобновлениях. Полезно для того, чтобы улучшить совместимость вперед ваших программ.",
"gui.computercraft.config.execution": "Выполнение",
"gui.computercraft.config.execution.computer_threads": "Потоки компьютера",
"gui.computercraft.config.execution.computer_threads.tooltip": "Устанавливает количество потоков, на которых работают компьютеры. Большее число\nозначает, что больше компьютеров сможет работать одновременно, но может привести к лагу.\nОбратите внимание, что некоторые моды могут не работать с более чем одним потоком. Используйте с осторожностью.\nОграничение: > 1",
"gui.computercraft.config.execution.max_main_computer_time.tooltip": "Идеальный максимум времени, которое отведено компьютеру на выполнение задач, в миллисекундах.\nМы вполне возможно выйдем за этот лимит, так как невозможно предсказать сколько\nвремени будет затрачено на выполнение задач, это лишь верхний лимит среднего значения времени.\nОграничение: > 1",
"gui.computercraft.config.execution.max_main_global_time": "Глобальный лимит времени на тик сервера",
"gui.computercraft.config.execution.max_main_global_time.tooltip": "Максимум времени, которое может быть потрачено на выполнение задач за один тик, в \nмиллисекундах. \nМы вполне возможно выйдем за этот лимит, так как невозможно предсказать сколько\nвремени будет затрачено на выполнение задач, это лишь верхний лимит среднего значения времени.\nОграничение: > 1",
"gui.computercraft.config.execution.tooltip": "Контролирует поведение выполнения задач компьютеров. Эта настройка преднезначается для \nтонкой настройки серверов, и в основном не должна быть изменена.",
"gui.computercraft.config.floppy_space_limit": "Лимит места на дискетах (байты)",
"gui.computercraft.config.floppy_space_limit.tooltip": "Лимит места для хранения информации на дискетах, в байтах.",
"gui.computercraft.config.http": "HTTP",
"gui.computercraft.config.http.bandwidth": "Пропускная способность",
"gui.computercraft.config.http.bandwidth.global_download": "Глобальный лимит на скачивание",
"gui.computercraft.config.http.bandwidth.global_download.tooltip": "Количество байтов, которое можно скачать за секунду. Все компьютеры делят эту пропускную способность. (байты в секунду)\nОграничение: > 1",
"gui.computercraft.config.http.bandwidth.global_upload": "Глобальный лимит загрузки",
"gui.computercraft.config.http.bandwidth.global_upload.tooltip": "Количество байтов, которое можно загрузить за секунду. Все компьютеры делят эту пропускную способность. (байты в секунду)\nОграничение: > 1",
"gui.computercraft.config.http.bandwidth.tooltip": "Ограничивает пропускную способность, используемую компьютерами.",
"gui.computercraft.config.http.enabled": "Включить HTTP API",
"gui.computercraft.config.http.enabled.tooltip": "Включить API \"http\" на Компьютерах. Это также отключает программы \"pastebin\" и \"wget\", \nкоторые нужны многим пользователям. Рекомендуется оставить это включенным и использовать \nконфиг \"rules\" для более тонкой настройки.",
"gui.computercraft.config.http.max_requests": "Максимум одновременных запросов",
"gui.computercraft.config.http.max_requests.tooltip": "Количество http-запросов, которые компьютер может сделать одновременно. Дополнительные запросы \nбудут поставлены в очередь, и отправлены когда существующие запросы будут выполнены. Установите на 0 для \nнеограниченных запросов.\nОграничение: > 0",
"gui.computercraft.config.http.max_websockets": "Максимум одновременных веб-сокетов",
"gui.computercraft.config.http.max_websockets.tooltip": "Количество одновременно открытых веб-сокетов, которые может иметь компьютер. Установите на 0 для неограниченных веб-сокетов.\nОграничение: > 1",
"gui.computercraft.config.http.proxy": "Proxy",
"gui.computercraft.config.http.proxy.host": "Имя хоста",
"gui.computercraft.config.http.proxy.host.tooltip": "Имя хоста или IP-адрес прокси-сервера.",
"gui.computercraft.config.http.proxy.port": "Порт",
"gui.computercraft.config.http.proxy.port.tooltip": "Порт прокси-сервера.\nДиапазон: 1 ~ 65536",
"gui.computercraft.config.http.proxy.tooltip": "Туннелирует HTTP-запросы и запросы websocket через прокси-сервер. Влияет только на HTTP\nправила с параметром \"use_proxy\" в значении true (отключено по умолчанию).\nЕсли для прокси-сервера требуется аутентификация, создайте \"computercraft-proxy.pw\"\nфайл в том же каталоге, что и \"computercraft-server.toml\", содержащий имя\nпользователя и пароль, разделенные двоеточием, например \"myuser:mypassword\". Для\nпрокси-серверов SOCKS4 требуется только имя пользователя.",
"gui.computercraft.config.http.proxy.type": "Тип прокси-сервера",
"gui.computercraft.config.http.proxy.type.tooltip": "Тип используемого прокси-сервера.\nДопустимые значения: HTTP, HTTPS, SOCKS4, SOCKS5",
"gui.computercraft.config.http.rules": "Разрешающие/запрещающие правила",
"gui.computercraft.config.http.rules.tooltip": "Список правил, которые контролируют поведение «http» API для определенных доменов или\nIP-адресов. Каждое правило представляет собой элемент с «узлом» для сопоставления и набором\nсвойств. Правила оцениваются по порядку, то есть более ранние правила перевешивают\nболее поздние.\nХост может быть доменным именем (\"pastebin.com\"), wildcard-сертификатом (\"*.pastebin.com\") или\nнотацией CIDR (\"127.0.0.0/8\").\nЕсли правил нет, домен блокируется.",
"gui.computercraft.config.http.websocket_enabled": "Включить веб-сокеты",
"gui.computercraft.config.http.websocket_enabled.tooltip": "Включить использование http веб-сокетов. Для этого необходимо, чтобы параметр «http_enable» был true.",
"gui.computercraft.config.log_computer_errors": "Регистрировать ошибки компьютера",
"gui.computercraft.config.log_computer_errors.tooltip": "Регистрировать исключения, вызванные периферийными устройствами и другими объектами Lua. Это облегчает\nдля авторам модов устранение проблем, но может привести к спаму в логах, если люди будут использовать\nглючные методы.",
"gui.computercraft.config.maximum_open_files": "Максимальное количество файлов, открытых на одном компьютере",
"gui.computercraft.config.term_sizes": "Размер терминала",
"gui.computercraft.config.term_sizes.computer": "Компьютер",
"gui.computercraft.config.term_sizes.computer.height": "Высота терминала",
"gui.computercraft.config.term_sizes.computer.height.tooltip": "Ограничение: 1 ~ 255",
"gui.computercraft.config.term_sizes.computer.tooltip": "Размер терминала на компьютерах.",
"gui.computercraft.config.term_sizes.computer.width": "Ширина терминала",
"gui.computercraft.config.term_sizes.computer.width.tooltip": "Ограничение: 1 ~ 255",
"gui.computercraft.config.term_sizes.monitor": "Монитор",
"gui.computercraft.config.term_sizes.monitor.height": "Максимальная высота монитора",
"gui.computercraft.config.term_sizes.monitor.height.tooltip": "Ограничение: 1 ~ 32",
"gui.computercraft.config.term_sizes.monitor.tooltip": "Максимальный размер мониторов (в блоках).",
"gui.computercraft.config.term_sizes.monitor.width": "Максимальная ширина мониторов",
"gui.computercraft.config.term_sizes.monitor.width.tooltip": "Ограничение: 1 ~ 32",
"gui.computercraft.config.term_sizes.pocket_computer.height": "Высота терминала",
"gui.computercraft.config.term_sizes.pocket_computer.height.tooltip": "Ограничение: 1 ~ 255",
"gui.computercraft.config.term_sizes.pocket_computer.width": "Ширина терминала",
"gui.computercraft.config.term_sizes.pocket_computer.width.tooltip": "Ограничение: 1 ~ 255",
"gui.computercraft.config.turtle": "Черепашки",
"gui.computercraft.config.turtle.advanced_fuel_limit": "Лимит топлива Продвинутых Черепашек",
"gui.computercraft.config.turtle.advanced_fuel_limit.tooltip": "Лимит топлива для Продвинутых Черепашек.\nОграничение: > 0",
"gui.computercraft.config.turtle.need_fuel": "Включить механику топлива",
"gui.computercraft.config.turtle.need_fuel.tooltip": "Устанавливает, нуждаются ли Черепашки в топливе для передвижения.",
"gui.computercraft.config.turtle.normal_fuel_limit": "Лимит топлива Черепашек",
"gui.computercraft.config.turtle.normal_fuel_limit.tooltip": "Лимит топлива для Черепашек.\nОграничение: > 0",
"gui.computercraft.config.turtle.tooltip": "Разные настройки, связанные с черепашками.",
"gui.computercraft.pocket_computer_overlay": "Карманный компьютер открыт. Чтобы закрыть, нажми ESC.",
"gui.computercraft.terminal": "Компьютерный терминал",
"gui.computercraft.tooltip.computer_id": "Идентификатор компьютера: %s", "gui.computercraft.tooltip.computer_id": "Идентификатор компьютера: %s",
"gui.computercraft.tooltip.copy": "Скопировано в Буфер обмена", "gui.computercraft.tooltip.copy": "Скопировано в Буфер обмена",
"gui.computercraft.tooltip.disk_id": "Идентификатор диска: %s", "gui.computercraft.tooltip.disk_id": "Идентификатор диска: %s",
@ -88,6 +157,8 @@
"gui.computercraft.upload.failed.name_too_long": "Названия файлов слишком длинны для загрузки.", "gui.computercraft.upload.failed.name_too_long": "Названия файлов слишком длинны для загрузки.",
"gui.computercraft.upload.failed.too_many_files": "Нельзя загрузить столько файлов.", "gui.computercraft.upload.failed.too_many_files": "Нельзя загрузить столько файлов.",
"gui.computercraft.upload.failed.too_much": "Твои файлы слишком большие для загрузки.", "gui.computercraft.upload.failed.too_much": "Твои файлы слишком большие для загрузки.",
"gui.computercraft.upload.no_response": "Перенос файлов",
"gui.computercraft.upload.no_response.msg": "Ваш компьютер не использовал переданные вами файлы. Возможно, вам потребуется запустить программу %s и повторить попытку.",
"item.computercraft.disk": "Дискета", "item.computercraft.disk": "Дискета",
"item.computercraft.pocket_computer_advanced": "Продвинутый карманный компьютер", "item.computercraft.pocket_computer_advanced": "Продвинутый карманный компьютер",
"item.computercraft.pocket_computer_advanced.upgraded": "Продвинутый %s карманный компьютер", "item.computercraft.pocket_computer_advanced.upgraded": "Продвинутый %s карманный компьютер",
@ -98,12 +169,17 @@
"item.computercraft.printed_pages": "Напечатанные страницы", "item.computercraft.printed_pages": "Напечатанные страницы",
"item.computercraft.treasure_disk": "Дискета", "item.computercraft.treasure_disk": "Дискета",
"itemGroup.computercraft": "ComputerCraft", "itemGroup.computercraft": "ComputerCraft",
"tracking_field.computercraft.coroutines_created.name": "Сопрограмма создана", "tracking_field.computercraft.avg": "%s (среднее)",
"tracking_field.computercraft.coroutines_dead.name": "Сопрограмма удалена", "tracking_field.computercraft.computer_tasks.name": "Задачи",
"tracking_field.computercraft.count": "%s (количество)",
"tracking_field.computercraft.fs.name": "Операции с файловой системой", "tracking_field.computercraft.fs.name": "Операции с файловой системой",
"tracking_field.computercraft.http_download.name": "HTTP скачивания", "tracking_field.computercraft.http_download.name": "HTTP скачивания",
"tracking_field.computercraft.http_requests.name": "HTTP запросы",
"tracking_field.computercraft.http_upload.name": "HTTP загрузки", "tracking_field.computercraft.http_upload.name": "HTTP загрузки",
"tracking_field.computercraft.max": "%s (максимальное)",
"tracking_field.computercraft.peripheral.name": "Вызовы периферийных устройств", "tracking_field.computercraft.peripheral.name": "Вызовы периферийных устройств",
"tracking_field.computercraft.server_tasks.name": "Серверные задачи",
"tracking_field.computercraft.turtle_ops.name": "Операции Черепашек",
"tracking_field.computercraft.websocket_incoming.name": "Входящий Websocket", "tracking_field.computercraft.websocket_incoming.name": "Входящий Websocket",
"tracking_field.computercraft.websocket_outgoing.name": "Исходящий Websocket", "tracking_field.computercraft.websocket_outgoing.name": "Исходящий Websocket",
"upgrade.computercraft.speaker.adjective": "Шумящий", "upgrade.computercraft.speaker.adjective": "Шумящий",
@ -114,86 +190,5 @@
"upgrade.minecraft.diamond_hoe.adjective": "Возделывающая", "upgrade.minecraft.diamond_hoe.adjective": "Возделывающая",
"upgrade.minecraft.diamond_pickaxe.adjective": "Добывающая", "upgrade.minecraft.diamond_pickaxe.adjective": "Добывающая",
"upgrade.minecraft.diamond_shovel.adjective": "Копающая", "upgrade.minecraft.diamond_shovel.adjective": "Копающая",
"upgrade.minecraft.diamond_sword.adjective": "Боевая", "upgrade.minecraft.diamond_sword.adjective": "Боевая"
"gui.computercraft.pocket_computer_overlay": "Карманный компьютер открыт. Чтобы закрыть, нажми ESC.",
"gui.computercraft.config.command_require_creative.tooltip": "Требовать творческий режим и права оператора для взаимодействия с\nкомандными компьютерами. Это поведение по умолчанию для Командных блоков ванильной игры.",
"gui.computercraft.config.default_computer_settings.tooltip": "Разделенный запятыми список системных настроек по умолчанию на новых компьютерах.\nНапример: \"shell.autocomplete=false,lua.autocomplete=false,edit.autocomplete=false\"\nотключит всё автодополнение.",
"gui.computercraft.config.execution.computer_threads.tooltip": "Устанавливает количество потоков, на которых работают компьютеры. Большее число\nозначает, что больше компьютеров сможет работать одновременно, но может привести к лагу.\nОбратите внимание, что некоторые моды могут не работать с более чем одним потоком. Используйте с осторожностью.\nОграничение: > 1",
"gui.computercraft.config.execution.max_main_computer_time.tooltip": "Идеальный максимум времени, которое отведено компьютеру на выполнение задач, в миллисекундах.\nМы вполне возможно выйдем за этот лимит, так как невозможно предсказать сколько\nвремени будет затрачено на выполнение задач, это лишь верхний лимит среднего значения времени.\nОграничение: > 1",
"gui.computercraft.config.execution.max_main_global_time.tooltip": "Максимум времени, которое может быть потрачено на выполнение задач за один тик, в \nмиллисекундах. \nМы вполне возможно выйдем за этот лимит, так как невозможно предсказать сколько\nвремени будет затрачено на выполнение задач, это лишь верхний лимит среднего значения времени.\nОграничение: > 1",
"gui.computercraft.config.http.bandwidth.global_download": "Глобальный лимит на скачивание",
"gui.computercraft.config.http.bandwidth.global_download.tooltip": "Количество байтов, которое можно скачать за секунду. Все компьютеры делят эту пропускную способность. (байты в секунду)\nОграничение: > 1",
"gui.computercraft.config.http.bandwidth.global_upload.tooltip": "Количество байтов, которое можно загрузить за секунду. Все компьютеры делят эту пропускную способность. (байты в секунду)\nОграничение: > 1",
"tracking_field.computercraft.http_requests.name": "HTTP запросы",
"tracking_field.computercraft.turtle_ops.name": "Операции Черепашек",
"gui.computercraft.config.http.enabled.tooltip": "Включить API \"http\" на Компьютерах. Это также отключает программы \"pastebin\" и \"wget\", \nкоторые нужны многим пользователям. Рекомендуется оставить это включенным и использовать \nконфиг \"rules\" для более тонкой настройки.",
"gui.computercraft.config.http.max_websockets.tooltip": "Количество одновременно открытых веб-сокетов, которые может иметь компьютер. Установите на 0 для неограниченных веб-сокетов.\nОграничение: > 1",
"gui.computercraft.config.term_sizes": "Размер терминала",
"gui.computercraft.config.term_sizes.computer.height": "Высота терминала",
"gui.computercraft.config.term_sizes.monitor.height": "Максимальная высота монитора",
"gui.computercraft.config.term_sizes.monitor.width.tooltip": "Ограничение: 1 ~ 32",
"gui.computercraft.config.turtle.advanced_fuel_limit": "Лимит топлива Продвинутых Черепашек",
"gui.computercraft.config.turtle.need_fuel.tooltip": "Устанавливает, нуждаются ли Черепашки в топливе для передвижения.",
"gui.computercraft.terminal": "Компьютерный терминал",
"tracking_field.computercraft.computer_tasks.name": "Задачи",
"tracking_field.computercraft.server_tasks.name": "Серверные задачи",
"gui.computercraft.upload.no_response": "Перенос файлов",
"tracking_field.computercraft.avg": "%s (среднее)",
"gui.computercraft.config.command_require_creative": "Для использования командных компьютеров нужен творческий режим",
"gui.computercraft.config.computer_space_limit": "Лимит места на компьютерах (в байтах)",
"gui.computercraft.config.computer_space_limit.tooltip": "Лимит места на дисках компьютеров и черепашек, в байтах.",
"gui.computercraft.config.default_computer_settings": "Настройки Компьютера по умолчанию",
"gui.computercraft.config.disable_lua51_features": "Отключить функции Lua 5.1",
"gui.computercraft.config.disable_lua51_features.tooltip": "Поставьте, чтобы отключить функции из Lua 5.1, которые будут убраны в будущих\nобновлениях. Полезно для того, чтобы улучшить совместимость вперед ваших программ.",
"gui.computercraft.config.execution": "Выполнение",
"gui.computercraft.config.execution.computer_threads": "Потоки компьютера",
"gui.computercraft.config.execution.max_main_global_time": "Глобальный лимит времени на тик сервера",
"gui.computercraft.config.execution.tooltip": "Контролирует поведение выполнения задач компьютеров. Эта настройка преднезначается для \nтонкой настройки серверов, и в основном не должна быть изменена.",
"gui.computercraft.config.floppy_space_limit": "Лимит места на дискетах (байты)",
"gui.computercraft.config.floppy_space_limit.tooltip": "Лимит места для хранения информации на дискетах, в байтах.",
"gui.computercraft.config.http": "HTTP",
"gui.computercraft.config.http.bandwidth": "Пропускная способность",
"gui.computercraft.config.http.bandwidth.global_upload": "Глобальный лимит загрузки",
"gui.computercraft.config.http.bandwidth.tooltip": "Ограничивает пропускную способность, используемую компьютерами.",
"gui.computercraft.config.http.enabled": "Включить HTTP API",
"gui.computercraft.config.http.max_requests": "Максимум одновременных запросов",
"gui.computercraft.config.http.max_requests.tooltip": "Количество http-запросов, которые компьютер может сделать одновременно. Дополнительные запросы \nбудут поставлены в очередь, и отправлены когда существующие запросы будут выполнены. Установите на 0 для \nнеограниченных запросов.\nОграничение: > 0",
"gui.computercraft.config.http.max_websockets": "Максимум одновременных веб-сокетов",
"gui.computercraft.config.term_sizes.computer": "Компьютер",
"gui.computercraft.config.term_sizes.computer.height.tooltip": "Ограничение: 1 ~ 255",
"gui.computercraft.config.term_sizes.computer.tooltip": "Размер терминала на компьютерах.",
"gui.computercraft.config.term_sizes.computer.width": "Ширина терминала",
"gui.computercraft.config.term_sizes.computer.width.tooltip": "Ограничение: 1 ~ 255",
"gui.computercraft.config.term_sizes.monitor": "Монитор",
"gui.computercraft.config.term_sizes.monitor.height.tooltip": "Ограничение: 1 ~ 32",
"gui.computercraft.config.term_sizes.monitor.tooltip": "Максимальный размер мониторов (в блоках).",
"gui.computercraft.config.term_sizes.monitor.width": "Максимальная ширина мониторов",
"gui.computercraft.config.term_sizes.pocket_computer.height": "Высота терминала",
"gui.computercraft.config.term_sizes.pocket_computer.height.tooltip": "Ограничение: 1 ~ 255",
"gui.computercraft.config.term_sizes.pocket_computer.width": "Ширина терминала",
"gui.computercraft.config.term_sizes.pocket_computer.width.tooltip": "Ограничение: 1 ~ 255",
"gui.computercraft.config.turtle": "Черепашки",
"gui.computercraft.config.turtle.advanced_fuel_limit.tooltip": "Лимит топлива для Продвинутых Черепашек.\nОграничение: > 0",
"gui.computercraft.config.turtle.need_fuel": "Включить механику топлива",
"gui.computercraft.config.turtle.normal_fuel_limit": "Лимит топлива Черепашек",
"gui.computercraft.config.turtle.normal_fuel_limit.tooltip": "Лимит топлива для Черепашек.\nОграничение: > 0",
"gui.computercraft.config.turtle.tooltip": "Разные настройки, связанные с черепашками.",
"gui.computercraft.config.http.proxy.port": "Порт",
"gui.computercraft.config.http.proxy.port.tooltip": "Порт прокси-сервера.\nДиапазон: 1 ~ 65536",
"gui.computercraft.config.http.proxy.host": "Имя хоста",
"gui.computercraft.config.http.proxy": "Proxy",
"gui.computercraft.config.http.proxy.host.tooltip": "Имя хоста или IP-адрес прокси-сервера.",
"gui.computercraft.config.http.proxy.tooltip": "Туннелирует HTTP-запросы и запросы websocket через прокси-сервер. Влияет только на HTTP\nправила с параметром \"use_proxy\" в значении true (отключено по умолчанию).\nЕсли для прокси-сервера требуется аутентификация, создайте \"computercraft-proxy.pw\"\nфайл в том же каталоге, что и \"computercraft-server.toml\", содержащий имя\nпользователя и пароль, разделенные двоеточием, например \"myuser:mypassword\". Для\nпрокси-серверов SOCKS4 требуется только имя пользователя.",
"gui.computercraft.config.http.proxy.type": "Тип прокси-сервера",
"gui.computercraft.config.http.proxy.type.tooltip": "Тип используемого прокси-сервера.\nДопустимые значения: HTTP, HTTPS, SOCKS4, SOCKS5",
"gui.computercraft.upload.no_response.msg": "Ваш компьютер не использовал переданные вами файлы. Возможно, вам потребуется запустить программу %s и повторить попытку.",
"tracking_field.computercraft.max": "%s (максимальное)",
"tracking_field.computercraft.count": "%s (количество)",
"gui.computercraft.config.http.rules": "Разрешающие/запрещающие правила",
"gui.computercraft.config.http.websocket_enabled": "Включить веб-сокеты",
"gui.computercraft.config.http.websocket_enabled.tooltip": "Включить использование http веб-сокетов. Для этого необходимо, чтобы параметр «http_enable» был true.",
"gui.computercraft.config.log_computer_errors": "Регистрировать ошибки компьютера",
"gui.computercraft.config.log_computer_errors.tooltip": "Регистрировать исключения, вызванные периферийными устройствами и другими объектами Lua. Это облегчает\nдля авторам модов устранение проблем, но может привести к спаму в логах, если люди будут использовать\nглючные методы.",
"gui.computercraft.config.maximum_open_files": "Максимальное количество файлов, открытых на одном компьютере",
"gui.computercraft.config.http.rules.tooltip": "Список правил, которые контролируют поведение «http» API для определенных доменов или\nIP-адресов. Каждое правило представляет собой элемент с «узлом» для сопоставления и набором\nсвойств. Правила оцениваются по порядку, то есть более ранние правила перевешивают\nболее поздние.\nХост может быть доменным именем (\"pastebin.com\"), wildcard-сертификатом (\"*.pastebin.com\") или\nнотацией CIDR (\"127.0.0.0/8\").\nЕсли правил нет, домен блокируется."
} }

View File

@ -27,6 +27,7 @@
"commands.computercraft.desc": "/computercraft kommandot tillhandahåller olika felsöknings- och administrationsverktyg för att kontrollera och interagera med datorer.", "commands.computercraft.desc": "/computercraft kommandot tillhandahåller olika felsöknings- och administrationsverktyg för att kontrollera och interagera med datorer.",
"commands.computercraft.dump.action": "Visa mer information om den här datorn", "commands.computercraft.dump.action": "Visa mer information om den här datorn",
"commands.computercraft.dump.desc": "Visa status för alla datorer eller specifik information för en dator. Du kan ange en dators instans-id (t.ex. 123), dator-id (t.ex. #123) eller etikett (t.ex. \"@Min dator\").", "commands.computercraft.dump.desc": "Visa status för alla datorer eller specifik information för en dator. Du kan ange en dators instans-id (t.ex. 123), dator-id (t.ex. #123) eller etikett (t.ex. \"@Min dator\").",
"commands.computercraft.dump.open_path": "Visa den här datorns filer",
"commands.computercraft.dump.synopsis": "Visa status för datorer.", "commands.computercraft.dump.synopsis": "Visa status för datorer.",
"commands.computercraft.generic.additional_rows": "%d ytterligare rader…", "commands.computercraft.generic.additional_rows": "%d ytterligare rader…",
"commands.computercraft.generic.exception": "Ohanterat felfall (%s)", "commands.computercraft.generic.exception": "Ohanterat felfall (%s)",
@ -40,9 +41,6 @@
"commands.computercraft.help.synopsis": "Tillhandahåll hjälp för ett specifikt kommando", "commands.computercraft.help.synopsis": "Tillhandahåll hjälp för ett specifikt kommando",
"commands.computercraft.queue.desc": "Skicka ett computer_command event till en kommandodator, skicka vidare ytterligare argument. Detta är mestadels utformat för kartmarkörer som fungerar som en mer datorvänlig version av /trigger. Alla spelare kan köra kommandot, vilket sannolikt skulle göras genom en textkomponents klick-event.", "commands.computercraft.queue.desc": "Skicka ett computer_command event till en kommandodator, skicka vidare ytterligare argument. Detta är mestadels utformat för kartmarkörer som fungerar som en mer datorvänlig version av /trigger. Alla spelare kan köra kommandot, vilket sannolikt skulle göras genom en textkomponents klick-event.",
"commands.computercraft.queue.synopsis": "Skicka ett computer_command event till en kommandodator", "commands.computercraft.queue.synopsis": "Skicka ett computer_command event till en kommandodator",
"commands.computercraft.reload.desc": "Ladda om ComputerCrafts konfigurationsfil",
"commands.computercraft.reload.done": "Konfiguration omladdad",
"commands.computercraft.reload.synopsis": "Ladda om ComputerCrafts konfigurationsfil",
"commands.computercraft.shutdown.desc": "Stäng av de listade datorerna eller alla om ingen anges. Du kan ange en dators instans-id (t.ex. 123), dator-id (t.ex. #123) eller etikett (t.ex. \"@Min dator\").", "commands.computercraft.shutdown.desc": "Stäng av de listade datorerna eller alla om ingen anges. Du kan ange en dators instans-id (t.ex. 123), dator-id (t.ex. #123) eller etikett (t.ex. \"@Min dator\").",
"commands.computercraft.shutdown.done": "Stängde av %s/%s datorer", "commands.computercraft.shutdown.done": "Stängde av %s/%s datorer",
"commands.computercraft.shutdown.synopsis": "Stäng av datorer på distans.", "commands.computercraft.shutdown.synopsis": "Stäng av datorer på distans.",
@ -96,9 +94,22 @@
"gui.computercraft.config.turtle.can_push": "Turtles kan putta entiteter", "gui.computercraft.config.turtle.can_push": "Turtles kan putta entiteter",
"gui.computercraft.config.turtle.need_fuel": "Aktivera bränsle", "gui.computercraft.config.turtle.need_fuel": "Aktivera bränsle",
"gui.computercraft.config.turtle.normal_fuel_limit": "Turtle bränslegräns", "gui.computercraft.config.turtle.normal_fuel_limit": "Turtle bränslegräns",
"gui.computercraft.pocket_computer_overlay": "Fickdator öppen. Tryck ESC för att stänga.",
"gui.computercraft.tooltip.computer_id": "Dator-ID: %s", "gui.computercraft.tooltip.computer_id": "Dator-ID: %s",
"gui.computercraft.tooltip.copy": "Kopiera till urklipp", "gui.computercraft.tooltip.copy": "Kopiera till urklipp",
"gui.computercraft.tooltip.disk_id": "Diskett-ID: %s", "gui.computercraft.tooltip.disk_id": "Diskett-ID: %s",
"gui.computercraft.tooltip.terminate": "Stoppa aktuellt körande kod",
"gui.computercraft.tooltip.terminate.key": "Håll ned Ctrl+T",
"gui.computercraft.tooltip.turn_off": "Stäng av den här datorn",
"gui.computercraft.tooltip.turn_off.key": "Håll ned Ctrl+S",
"gui.computercraft.tooltip.turn_on": "Slå på den här datorn",
"gui.computercraft.upload.failed": "Uppladdning misslyckad",
"gui.computercraft.upload.failed.computer_off": "Du måste slå på datorn innan du kan ladda upp filer.",
"gui.computercraft.upload.failed.corrupted": "Några filer skadades vid uppladdningen. Vänligen försök igen.",
"gui.computercraft.upload.failed.generic": "Filuppladdningen misslyckades (%s)",
"gui.computercraft.upload.failed.name_too_long": "Filnamnen är för långa för att laddas upp.",
"gui.computercraft.upload.failed.too_many_files": "Det går inte ladda upp så här många filer.",
"gui.computercraft.upload.failed.too_much": "Dina filer är för stora för att laddas upp.",
"item.computercraft.disk": "Diskett", "item.computercraft.disk": "Diskett",
"item.computercraft.pocket_computer_advanced": "Avancerad Fickdator", "item.computercraft.pocket_computer_advanced": "Avancerad Fickdator",
"item.computercraft.pocket_computer_advanced.upgraded": "Avancerad %s Fickdator", "item.computercraft.pocket_computer_advanced.upgraded": "Avancerad %s Fickdator",
@ -109,8 +120,6 @@
"item.computercraft.printed_pages": "Utskrivna Sidor", "item.computercraft.printed_pages": "Utskrivna Sidor",
"item.computercraft.treasure_disk": "Diskett", "item.computercraft.treasure_disk": "Diskett",
"itemGroup.computercraft": "ComputerCraft", "itemGroup.computercraft": "ComputerCraft",
"tracking_field.computercraft.coroutines_created.name": "Coroutines skapade",
"tracking_field.computercraft.coroutines_dead.name": "Coroutines borttagna",
"tracking_field.computercraft.fs.name": "Filsystemoperationer", "tracking_field.computercraft.fs.name": "Filsystemoperationer",
"tracking_field.computercraft.http_download.name": "HTTP-nedladdning", "tracking_field.computercraft.http_download.name": "HTTP-nedladdning",
"tracking_field.computercraft.http_upload.name": "HTTP-uppladdning", "tracking_field.computercraft.http_upload.name": "HTTP-uppladdning",
@ -125,19 +134,5 @@
"upgrade.minecraft.diamond_hoe.adjective": "Odlande", "upgrade.minecraft.diamond_hoe.adjective": "Odlande",
"upgrade.minecraft.diamond_pickaxe.adjective": "Brytande", "upgrade.minecraft.diamond_pickaxe.adjective": "Brytande",
"upgrade.minecraft.diamond_shovel.adjective": "Grävande", "upgrade.minecraft.diamond_shovel.adjective": "Grävande",
"upgrade.minecraft.diamond_sword.adjective": "Närstridande", "upgrade.minecraft.diamond_sword.adjective": "Närstridande"
"gui.computercraft.tooltip.turn_on": "Slå på den här datorn",
"commands.computercraft.dump.open_path": "Visa den här datorns filer",
"gui.computercraft.tooltip.terminate": "Stoppa aktuellt körande kod",
"gui.computercraft.tooltip.terminate.key": "Håll ned Ctrl+T",
"gui.computercraft.tooltip.turn_off": "Stäng av den här datorn",
"gui.computercraft.tooltip.turn_off.key": "Håll ned Ctrl+S",
"gui.computercraft.upload.failed": "Uppladdning misslyckad",
"gui.computercraft.upload.failed.computer_off": "Du måste slå på datorn innan du kan ladda upp filer.",
"gui.computercraft.upload.failed.too_much": "Dina filer är för stora för att laddas upp.",
"gui.computercraft.upload.failed.corrupted": "Några filer skadades vid uppladdningen. Vänligen försök igen.",
"gui.computercraft.upload.failed.generic": "Filuppladdningen misslyckades (%s)",
"gui.computercraft.upload.failed.name_too_long": "Filnamnen är för långa för att laddas upp.",
"gui.computercraft.upload.failed.too_many_files": "Det går inte ladda upp så här många filer.",
"gui.computercraft.pocket_computer_overlay": "Fickdator öppen. Tryck ESC för att stänga."
} }

View File

@ -1,128 +1,123 @@
{ {
"block.computercraft.disk_drive": "tomo pi lipu sona",
"block.computercraft.printer": "ilo sitelen",
"block.computercraft.monitor_normal": "ilo lukin",
"block.computercraft.monitor_advanced": "ilo lukin wawa",
"block.computercraft.speaker": "ilo kalama",
"commands.computercraft.generic.exception": "pakala awen ala (%s)",
"block.computercraft.computer_command": "ilo sona pi toki wawa",
"block.computercraft.turtle_advanced": "ilo sona pali wawa",
"block.computercraft.turtle_normal": "ilo sona pali",
"block.computercraft.computer_advanced": "ilo sona wawa",
"block.computercraft.computer_normal": "ilo sona",
"argument.computercraft.argument_expected": "mi wile e ijo", "argument.computercraft.argument_expected": "mi wile e ijo",
"argument.computercraft.computer.many_matching": "mi alasa e ilo sona mute pi nimi '%s' (ijo %s)",
"argument.computercraft.computer.no_matching": "mi ken ala alasa e ilo sona pi nimi '%s'",
"argument.computercraft.tracking_field.no_field": "mi sona ala e nimi '%s'",
"block.computercraft.cable": "linja toki",
"block.computercraft.computer_advanced": "ilo sona wawa",
"block.computercraft.computer_command": "ilo sona pi toki wawa",
"block.computercraft.computer_normal": "ilo sona",
"block.computercraft.disk_drive": "tomo pi lipu sona",
"block.computercraft.monitor_advanced": "ilo lukin wawa",
"block.computercraft.monitor_normal": "ilo lukin",
"block.computercraft.printer": "ilo sitelen",
"block.computercraft.speaker": "ilo kalama",
"block.computercraft.turtle_advanced": "ilo sona pali wawa",
"block.computercraft.turtle_advanced.upgraded": "ilo sona pali wawa (%s)", "block.computercraft.turtle_advanced.upgraded": "ilo sona pali wawa (%s)",
"block.computercraft.turtle_advanced.upgraded_twice": "ilo sona pali wawa (%s, %s)",
"block.computercraft.turtle_normal": "ilo sona pali",
"block.computercraft.turtle_normal.upgraded": "ilo sona pali (%s)", "block.computercraft.turtle_normal.upgraded": "ilo sona pali (%s)",
"commands.computercraft.dump.action": "o lukin e sona mute pi ilo sona ni", "block.computercraft.turtle_normal.upgraded_twice": "ilo sona pali (%s, %s)",
"commands.computercraft.generic.no_position": "<lon ala>",
"chat.computercraft.wired_modem.peripheral_connected": "ijo sona \"%s\" li linja tawa kulupu",
"chat.computercraft.wired_modem.peripheral_disconnected": "ijo sona \"%s\" li linja ala tawa kulupu",
"block.computercraft.wired_modem": "ilo toki linja", "block.computercraft.wired_modem": "ilo toki linja",
"block.computercraft.wired_modem_full": "ilo toki linja", "block.computercraft.wired_modem_full": "ilo toki linja",
"block.computercraft.wireless_modem_advanced": "ilo toki pi ma End",
"block.computercraft.wireless_modem_normal": "ilo toki linja ala", "block.computercraft.wireless_modem_normal": "ilo toki linja ala",
"commands.computercraft.generic.additional_rows": "mute %d…", "chat.computercraft.wired_modem.peripheral_connected": "ijo sona \"%s\" li linja tawa kulupu",
"argument.computercraft.computer.no_matching": "mi ken ala alasa e ilo sona pi nimi '%s'", "chat.computercraft.wired_modem.peripheral_disconnected": "ijo sona \"%s\" li linja ala tawa kulupu",
"commands.computercraft.desc": "ilo sona la, toki wawa /computercraft li lawa li luka li pakala ala.",
"commands.computercraft.dump.action": "o lukin e sona mute pi ilo sona ni",
"commands.computercraft.dump.desc": "sona pi ilo sona la, mi pana e ale anu wan. ilo sona la, sina ken pana e nanpa pi ijo (sama 123) anu nanpa (sama #123) anu nimi (sama \"@ilo sona mi\").",
"commands.computercraft.dump.open_path": "o lukin e lipu pi ilo sona ni", "commands.computercraft.dump.open_path": "o lukin e lipu pi ilo sona ni",
"commands.computercraft.dump.synopsis": "mi pana e sona pi ilo sona.", "commands.computercraft.dump.synopsis": "mi pana e sona pi ilo sona.",
"block.computercraft.cable": "linja toki", "commands.computercraft.generic.additional_rows": "mute %d…",
"block.computercraft.wireless_modem_advanced": "ilo toki pi ma End", "commands.computercraft.generic.exception": "pakala awen ala (%s)",
"commands.computercraft.generic.no_position": "<lon ala>",
"commands.computercraft.generic.position": "%s, %s, %s", "commands.computercraft.generic.position": "%s, %s, %s",
"commands.computercraft.help.desc": "mi pana e toki ni",
"commands.computercraft.help.no_children": "toki wawa '%s' li jo ala e toki wawa insa", "commands.computercraft.help.no_children": "toki wawa '%s' li jo ala e toki wawa insa",
"commands.computercraft.help.no_command": "toki wawa '%s' li lon ala", "commands.computercraft.help.no_command": "toki wawa '%s' li lon ala",
"commands.computercraft.help.desc": "mi pana e toki ni",
"commands.computercraft.help.synopsis": "mi pana e sona pi toki wawa ale", "commands.computercraft.help.synopsis": "mi pana e sona pi toki wawa ale",
"commands.computercraft.reload.done": "mi kama open sin e ante nasin", "commands.computercraft.queue.synopsis": "mi pana e toki computer_command tawa ilo sona pi toki wawa",
"commands.computercraft.shutdown.desc": "mi pini e ilo sona pi pana sina anu ale. ilo sona la, sina ken pana e nanpa pi ijo (sama 123) anu nanpa (sama #123) anu nimi (sama \"@ilo sona mi\").",
"commands.computercraft.shutdown.done": "mi kama pini e ilo sona %s/%s", "commands.computercraft.shutdown.done": "mi kama pini e ilo sona %s/%s",
"commands.computercraft.shutdown.synopsis": "mi pini weka e ilo sona.", "commands.computercraft.shutdown.synopsis": "mi pini weka e ilo sona.",
"commands.computercraft.queue.synopsis": "mi pana e toki computer_command tawa ilo sona pi toki wawa",
"commands.computercraft.tp.desc": "o tawa ilo sona. ilo sona la, sina ken pana e nanpa pi ijo (sama 123) anu nanpa (sama #123).",
"commands.computercraft.synopsis": "mi jo e toki wawa ante tawa ni: sina lawa e ilo sona.", "commands.computercraft.synopsis": "mi jo e toki wawa ante tawa ni: sina lawa e ilo sona.",
"commands.computercraft.tp.action": "o tawa pi ilo sona", "commands.computercraft.tp.action": "o tawa pi ilo sona",
"commands.computercraft.tp.desc": "o tawa ilo sona. ilo sona la, sina ken pana e nanpa pi ijo (sama 123) anu nanpa (sama #123).",
"commands.computercraft.tp.not_player": "jan ala la, mi ken ala open e sitelen pi ilo sona", "commands.computercraft.tp.not_player": "jan ala la, mi ken ala open e sitelen pi ilo sona",
"commands.computercraft.track.dump.computer": "ilo sona",
"commands.computercraft.tp.synopsis": "mi tawa pi ilo sona e sina.",
"commands.computercraft.tp.not_there": "mi ken ala alasa e ilo sona pi lon ma", "commands.computercraft.tp.not_there": "mi ken ala alasa e ilo sona pi lon ma",
"commands.computercraft.tp.synopsis": "mi tawa pi ilo sona e sina.",
"commands.computercraft.track.desc": "ilo sona la, mi sitelen e tenpo pali e mute toki. toki wawa /forge track la, mi pana pi nasin sama e sona. mi pona tawa alasa pi tenpo ike.", "commands.computercraft.track.desc": "ilo sona la, mi sitelen e tenpo pali e mute toki. toki wawa /forge track la, mi pana pi nasin sama e sona. mi pona tawa alasa pi tenpo ike.",
"commands.computercraft.track.dump.computer": "ilo sona",
"commands.computercraft.track.dump.desc": "mi pana e sona tan sitelen sona pi sin mute.",
"commands.computercraft.track.dump.no_timings": "mi ken ala alasa e tenpo", "commands.computercraft.track.dump.no_timings": "mi ken ala alasa e tenpo",
"commands.computercraft.track.stop.synopsis": "mi pini e sitelen sona ale", "commands.computercraft.track.dump.synopsis": "mi pana e sona tan sitelen sona pi sin mute",
"commands.computercraft.track.start.desc": "ilo sona la, mi open sitelen sona e tenpo pali e mute toki. mi weka e sitelen sona pini.",
"commands.computercraft.track.start.stop": "o toki wawa %s tawa ni: sina pini sitelen sona. sina lukin e sona ni",
"commands.computercraft.track.start.synopsis": "mi open sitelen sona e ilo sona ale", "commands.computercraft.track.start.synopsis": "mi open sitelen sona e ilo sona ale",
"commands.computercraft.track.stop.action": "o luka tawa ni: mi pini sitelen sona", "commands.computercraft.track.stop.action": "o luka tawa ni: mi pini sitelen sona",
"commands.computercraft.track.stop.not_enabled": "tenpo ni la, mi sitelen ala sona e ilo sona",
"commands.computercraft.track.dump.synopsis": "mi pana e sona tan sitelen sona pi sin mute",
"commands.computercraft.track.stop.desc": "ilo sona la, mi pini sitelen sona e tenpo pali e mute toki", "commands.computercraft.track.stop.desc": "ilo sona la, mi pini sitelen sona e tenpo pali e mute toki",
"commands.computercraft.track.stop.not_enabled": "tenpo ni la, mi sitelen ala sona e ilo sona",
"commands.computercraft.track.stop.synopsis": "mi pini e sitelen sona ale",
"commands.computercraft.track.synopsis": "mi sitelen tenpo pali e ilo sona.", "commands.computercraft.track.synopsis": "mi sitelen tenpo pali e ilo sona.",
"commands.computercraft.track.dump.desc": "mi pana e sona tan sitelen sona pi sin mute.", "commands.computercraft.turn_on.desc": "mi open e ilo sona pi pana sina. ilo sona la, sina ken pana e nanpa pi ijo (sama 123) anu nanpa (sama #123) anu nimi (sama \"@ilo sona mi\").",
"commands.computercraft.view.action": "o lukin e ilo sona ni",
"commands.computercraft.view.synopsis": "o lukin e sitelen pi ilo sona.",
"commands.computercraft.turn_on.done": "mi kama open e ilo sona %s/%s", "commands.computercraft.turn_on.done": "mi kama open e ilo sona %s/%s",
"commands.computercraft.turn_on.synopsis": "mi open weka e ilo sona.", "commands.computercraft.turn_on.synopsis": "mi open weka e ilo sona.",
"commands.computercraft.view.action": "o lukin e ilo sona ni",
"commands.computercraft.view.desc": "mi open e sitelen pi ilo sona tawa ni: sina lawa weka e ilo sona. taso, sina ken ala open e jo pi ilo sona pali. ilo sona la, sina ken pana e nanpa pi ijo (sama 123) anu nanpa (sama #123).",
"commands.computercraft.view.not_player": "jan ala la, mi ken ala open e sitelen pi ilo sona", "commands.computercraft.view.not_player": "jan ala la, mi ken ala open e sitelen pi ilo sona",
"commands.computercraft.view.synopsis": "o lukin e sitelen pi ilo sona.",
"gui.computercraft.config.command_require_creative": "ilo sona pi toki wawa li wile e jan sewi", "gui.computercraft.config.command_require_creative": "ilo sona pi toki wawa li wile e jan sewi",
"gui.computercraft.config.execution.computer_threads": "linja pi ilo sona", "gui.computercraft.config.disable_lua51_features": "ijo pona pi ilo Lua 5.1 li weka",
"gui.computercraft.config.http.bandwidth": "mute sona",
"gui.computercraft.config.http": "ijo HTTP",
"gui.computercraft.config.execution": "pali", "gui.computercraft.config.execution": "pali",
"gui.computercraft.config.execution.computer_threads": "linja pi ilo sona",
"gui.computercraft.config.http": "ijo HTTP",
"gui.computercraft.config.http.bandwidth": "mute sona",
"gui.computercraft.config.monitor_renderer": "nasin sitelen pi ilo lukin", "gui.computercraft.config.monitor_renderer": "nasin sitelen pi ilo lukin",
"gui.computercraft.config.term_sizes.pocket_computer.width": "suli poka pi ilo sitelen", "gui.computercraft.config.peripheral": "ijo sona",
"gui.computercraft.config.peripheral.modem_high_altitude_range": "suli ken ilo pi ilo toki (sewi mute)",
"gui.computercraft.config.peripheral.modem_high_altitude_range_during_storm": "suli ken ilo pi ilo toki (sewi mute, sewi ike)",
"gui.computercraft.config.peripheral.modem_range": "suli ken ilo pi ilo toki (pona)",
"gui.computercraft.config.peripheral.modem_range_during_storm": "suli ken ilo pi ilo toki (sewi ike)",
"gui.computercraft.config.peripheral.monitor_bandwidth": "mute sona pi ilo lukin",
"gui.computercraft.config.term_sizes": "suli pi ilo sitelen", "gui.computercraft.config.term_sizes": "suli pi ilo sitelen",
"gui.computercraft.config.term_sizes.computer": "ilo sona", "gui.computercraft.config.term_sizes.computer": "ilo sona",
"gui.computercraft.config.term_sizes.computer.height": "suli sewi pi ilo sitelen",
"gui.computercraft.config.term_sizes.computer.tooltip": "suli pi ilo sitelen pi ilo sona.",
"gui.computercraft.config.term_sizes.computer.width": "suli poka pi ito sitelen",
"gui.computercraft.config.term_sizes.monitor": "ilo lukin", "gui.computercraft.config.term_sizes.monitor": "ilo lukin",
"gui.computercraft.config.term_sizes.pocket_computer": "ilo sona lili", "gui.computercraft.config.term_sizes.pocket_computer": "ilo sona lili",
"gui.computercraft.config.term_sizes.pocket_computer.height": "suli sewi pi ilo sitelen", "gui.computercraft.config.term_sizes.pocket_computer.height": "suli sewi pi ilo sitelen",
"gui.computercraft.config.term_sizes.computer.height": "suli sewi pi ilo sitelen", "gui.computercraft.config.term_sizes.pocket_computer.tooltip": "suli pi ilo sitelen pi ilo sona lili.",
"gui.computercraft.config.term_sizes.computer.width": "suli poka pi ito sitelen", "gui.computercraft.config.term_sizes.pocket_computer.width": "suli poka pi ilo sitelen",
"gui.computercraft.config.term_sizes.computer.tooltip": "suli pi ilo sitelen pi ilo sona.", "gui.computercraft.config.turtle": "ilo sona pali",
"gui.computercraft.config.peripheral.monitor_bandwidth": "mute sona pi ilo lukin", "gui.computercraft.pocket_computer_overlay": "sina open e ilo sona lili. o luka e nena ESC tawa pini.",
"gui.computercraft.config.peripheral.modem_range": "suli ken ilo pi ilo toki (pona)", "gui.computercraft.terminal": "ilo sitelen pi ilo sona",
"gui.computercraft.config.peripheral.modem_high_altitude_range": "suli ken ilo pi ilo toki (sewi mute)",
"item.computercraft.printed_page": "lipu pi ilo sitelen",
"item.computercraft.printed_pages": "lipu mute pi ilo sitelen",
"item.computercraft.treasure_disk": "lipu sona",
"gui.computercraft.tooltip.turn_on": "o open e ilo sona ni",
"gui.computercraft.tooltip.computer_id": "nanpa pi ilo sona: %s", "gui.computercraft.tooltip.computer_id": "nanpa pi ilo sona: %s",
"gui.computercraft.tooltip.disk_id": "nanpa pi lipu sona: %s",
"gui.computercraft.tooltip.turn_off": "o pini e ilo sona ni", "gui.computercraft.tooltip.turn_off": "o pini e ilo sona ni",
"gui.computercraft.tooltip.turn_on": "o open e ilo sona ni",
"item.computercraft.disk": "lipu sona",
"item.computercraft.pocket_computer_advanced": "ilo sona lili wawa", "item.computercraft.pocket_computer_advanced": "ilo sona lili wawa",
"item.computercraft.pocket_computer_advanced.upgraded": "ilo sona lili wawa (%s)", "item.computercraft.pocket_computer_advanced.upgraded": "ilo sona lili wawa (%s)",
"item.computercraft.pocket_computer_normal": "ilo sona lili", "item.computercraft.pocket_computer_normal": "ilo sona lili",
"item.computercraft.pocket_computer_normal.upgraded": "ilo sona lili (%s)", "item.computercraft.pocket_computer_normal.upgraded": "ilo sona lili (%s)",
"gui.computercraft.terminal": "ilo sitelen pi ilo sona", "item.computercraft.printed_book": "lipu suli pi ilo sitelen",
"item.computercraft.printed_page": "lipu pi ilo sitelen",
"item.computercraft.printed_pages": "lipu mute pi ilo sitelen",
"item.computercraft.treasure_disk": "lipu sona",
"itemGroup.computercraft": "ComputerCraft", "itemGroup.computercraft": "ComputerCraft",
"tracking_field.computercraft.computer_tasks.name": "pali", "tracking_field.computercraft.computer_tasks.name": "pali",
"tracking_field.computercraft.count": "%s (mute)",
"tracking_field.computercraft.max": "%s (sewi)",
"tracking_field.computercraft.turtle_ops.name": "pali pi ilo sona pali", "tracking_field.computercraft.turtle_ops.name": "pali pi ilo sona pali",
"upgrade.computercraft.speaker.adjective": "kalama", "upgrade.computercraft.speaker.adjective": "kalama",
"tracking_field.computercraft.count": "%s (mute)", "upgrade.computercraft.wireless_modem_advanced.adjective": "toki pi ma End",
"tracking_field.computercraft.coroutines_created.name": "open linja", "upgrade.computercraft.wireless_modem_normal.adjective": "toki linja ala",
"tracking_field.computercraft.coroutines_dead.name": "pini linja",
"tracking_field.computercraft.max": "%s (sewi)",
"upgrade.minecraft.crafting_table.adjective": "pali", "upgrade.minecraft.crafting_table.adjective": "pali",
"upgrade.minecraft.diamond_axe.adjective": "ilo kipisi", "upgrade.minecraft.diamond_axe.adjective": "ilo kipisi",
"upgrade.minecraft.diamond_hoe.adjective": "ilo kasi", "upgrade.minecraft.diamond_hoe.adjective": "ilo kasi",
"upgrade.computercraft.wireless_modem_normal.adjective": "toki linja ala",
"upgrade.minecraft.diamond_pickaxe.adjective": "ilo pakala", "upgrade.minecraft.diamond_pickaxe.adjective": "ilo pakala",
"upgrade.minecraft.diamond_shovel.adjective": "ilo ma", "upgrade.minecraft.diamond_shovel.adjective": "ilo ma",
"upgrade.minecraft.diamond_sword.adjective": "utala", "upgrade.minecraft.diamond_sword.adjective": "utala"
"block.computercraft.turtle_advanced.upgraded_twice": "ilo sona pali wawa (%s, %s)",
"block.computercraft.turtle_normal.upgraded_twice": "ilo sona pali (%s, %s)",
"gui.computercraft.config.turtle": "ilo sona pali",
"item.computercraft.disk": "lipu sona",
"item.computercraft.printed_book": "lipu suli pi ilo sitelen",
"upgrade.computercraft.wireless_modem_advanced.adjective": "toki pi ma End",
"gui.computercraft.tooltip.disk_id": "nanpa pi lipu sona: %s",
"gui.computercraft.config.peripheral": "ijo sona",
"gui.computercraft.config.peripheral.modem_range_during_storm": "suli ken ilo pi ilo toki (sewi ike)",
"argument.computercraft.tracking_field.no_field": "mi sona ala e nimi '%s'",
"argument.computercraft.computer.many_matching": "mi alasa e ilo sona mute pi nimi '%s' (ijo %s)",
"commands.computercraft.desc": "ilo sona la, toki wawa /computercraft li lawa li luka li pakala ala.",
"commands.computercraft.reload.desc": "mi open sin e ante nasin",
"commands.computercraft.reload.synopsis": "mi open sin e ante nasin",
"commands.computercraft.shutdown.desc": "mi pini e ilo sona pi pana sina anu ale. ilo sona la, sina ken pana e nanpa pi ijo (sama 123) anu nanpa (sama #123) anu nimi (sama \"@ilo sona mi\").",
"gui.computercraft.config.term_sizes.pocket_computer.tooltip": "suli pi ilo sitelen pi ilo sona lili.",
"gui.computercraft.config.peripheral.modem_high_altitude_range_during_storm": "suli ken ilo pi ilo toki (sewi mute, sewi ike)",
"gui.computercraft.pocket_computer_overlay": "sina open e ilo sona lili. o luka e nena ESC tawa pini.",
"commands.computercraft.dump.desc": "sona pi ilo sona la, mi pana e ale anu wan. ilo sona la, sina ken pana e nanpa pi ijo (sama 123) anu nanpa (sama #123) anu nimi (sama \"@ilo sona mi\").",
"commands.computercraft.turn_on.desc": "mi open e ilo sona pi pana sina. ilo sona la, sina ken pana e nanpa pi ijo (sama 123) anu nanpa (sama #123) anu nimi (sama \"@ilo sona mi\").",
"commands.computercraft.track.start.stop": "o toki wawa %s tawa ni: sina pini sitelen sona. sina lukin e sona ni",
"commands.computercraft.track.start.desc": "ilo sona la, mi open sitelen sona e tenpo pali e mute toki. mi weka e sitelen sona pini.",
"commands.computercraft.view.desc": "mi open e sitelen pi ilo sona tawa ni: sina lawa weka e ilo sona. taso, sina ken ala open e jo pi ilo sona pali. ilo sona la, sina ken pana e nanpa pi ijo (sama 123) anu nanpa (sama #123).",
"gui.computercraft.config.disable_lua51_features": "ijo pona pi ilo Lua 5.1 li weka"
} }

View File

@ -41,9 +41,6 @@
"commands.computercraft.help.synopsis": "Надає допомогу для конкретних команд", "commands.computercraft.help.synopsis": "Надає допомогу для конкретних команд",
"commands.computercraft.queue.desc": "Надіслати подію computer_command до Командного комп'ютера через додаткові аргументи. В основному це призначено для Картоделів, діє як зручніша для користувача комп'ютерна версія /trigger. Будь-який гравець зможе запустити команду, яка, ймовірно, буде зроблена через події клацання текстового компонента.", "commands.computercraft.queue.desc": "Надіслати подію computer_command до Командного комп'ютера через додаткові аргументи. В основному це призначено для Картоделів, діє як зручніша для користувача комп'ютерна версія /trigger. Будь-який гравець зможе запустити команду, яка, ймовірно, буде зроблена через події клацання текстового компонента.",
"commands.computercraft.queue.synopsis": "Надіслати подію computer_command до Командного комп'ютера", "commands.computercraft.queue.synopsis": "Надіслати подію computer_command до Командного комп'ютера",
"commands.computercraft.reload.desc": "Перезавантажує файл конфігурації ComputerCraft'a",
"commands.computercraft.reload.done": "Конфігурація перезавантажена",
"commands.computercraft.reload.synopsis": "Перезавантажити файл конфігурації ComputerCraft'a",
"commands.computercraft.shutdown.desc": "Завершити роботу перерахованих комп'ютерів або всі, якщо жодного не вказано. Ви можете вказати ідентифікатор екземпляра комп'ютера (наприклад 123), ідентифікатор комп'ютера (наприклад #123) або позначку (наприклад, \"@My Computer\").", "commands.computercraft.shutdown.desc": "Завершити роботу перерахованих комп'ютерів або всі, якщо жодного не вказано. Ви можете вказати ідентифікатор екземпляра комп'ютера (наприклад 123), ідентифікатор комп'ютера (наприклад #123) або позначку (наприклад, \"@My Computer\").",
"commands.computercraft.shutdown.done": "У %s/%s комп'ютерів завершено роботу", "commands.computercraft.shutdown.done": "У %s/%s комп'ютерів завершено роботу",
"commands.computercraft.shutdown.synopsis": "Віддалено завершити роботу комп'ютерів.", "commands.computercraft.shutdown.synopsis": "Віддалено завершити роботу комп'ютерів.",
@ -73,6 +70,28 @@
"commands.computercraft.view.desc": "Відкрити термінал комп'ютера, який дозволяє віддалено керувати комп'ютером. Це не надає доступу до інвентарів черепашок. Ви можете вказати або ідентифікатор екземпляра комп'ютера (наприклад, 123) або ідентифікатор комп'ютера (наприклад, #123).", "commands.computercraft.view.desc": "Відкрити термінал комп'ютера, який дозволяє віддалено керувати комп'ютером. Це не надає доступу до інвентарів черепашок. Ви можете вказати або ідентифікатор екземпляра комп'ютера (наприклад, 123) або ідентифікатор комп'ютера (наприклад, #123).",
"commands.computercraft.view.not_player": "Не можна відкрити термінал для не-гравця", "commands.computercraft.view.not_player": "Не можна відкрити термінал для не-гравця",
"commands.computercraft.view.synopsis": "Переглянути термінал комп'ютера.", "commands.computercraft.view.synopsis": "Переглянути термінал комп'ютера.",
"gui.computercraft.config.command_require_creative": "Командний комп'ютер вимагає режиму творчості",
"gui.computercraft.config.command_require_creative.tooltip": "Для взаємодії з командним комп'ютером, гравець має бути в режимі\nтворчості. Це поведінка скопійована з поведінки за замовчуванням для командних блоків.",
"gui.computercraft.config.computer_space_limit": "Обмеження комп'ютерного простору (в байтах)",
"gui.computercraft.config.computer_space_limit.tooltip": "Обмеження на займаєме місце на диску комп'ютерами та черепахами, в байтах.",
"gui.computercraft.config.default_computer_settings": "Налаштування комп'ютера за замовчуванням",
"gui.computercraft.config.default_computer_settings.tooltip": "Список лашатувань за замовчуванням, розділених комою, що будуть нашалтовані на нових комп'ютерах\nНаприклад: \"shell.autocomplete=false,lua.autocomplete=false,edit.autocomplete=false\"\nвідключить усі автодоповнення.",
"gui.computercraft.config.disable_lua51_features": "Відключити підтримку Lua 5.1",
"gui.computercraft.config.disable_lua51_features.tooltip": "Включить це налаштування, якщо хочете відключити функціональність, пов'язану з Lua 5.1, яка буде вилучен в наступних оновленнях.\nТаким чином ви можете впевнитись, що ваші програми не зламаються від подальших оновлень.",
"gui.computercraft.config.execution": "Виконання",
"gui.computercraft.config.execution.computer_threads": "Потоки для комп'ютерів",
"gui.computercraft.config.execution.computer_threads.tooltip": "Встановлює кількість потоків, на яких запускаються комп'ютери. Більше число\nозначає більшу кількість комп'ютерів, які працюють паралельно, але може призвести до проблем із продуктивністю.\nЗауважте, що деякі модифікації можуть не працювати із кількістю потоків більше за 1. Використовуйте з обережністю.\nОбмеження: > 1",
"gui.computercraft.config.execution.max_main_computer_time": "Обмеження на час, який займає комп'ютер на сервері за один цикл",
"gui.computercraft.config.execution.max_main_computer_time.tooltip": "Бажаний максимальний час, який комп'ютер може працювати за один цикл, в мілісекундах\nЗауважте, що досить ймовірно, що цей ліміт буде порушено, бо немає ніякої можливості\nсправді визначити, скільки комп'ютер займе часу - це значення буде ціллю для верхньої межі середнього часу виконання.\nОбмеження: > 1",
"gui.computercraft.config.execution.max_main_global_time": "Обмеження на час виконання у один серверний цикл",
"gui.computercraft.config.execution.max_main_global_time.tooltip": "Бажаний максимальний час, який витрачається на виконання задач, в мілісекундах\nЗауважте, що досить ймовірно, що цей ліміт буде порушено, бо немає ніякої можливості\nсправді визначити, скільки комп'ютер займе часу - це значення буде ціллю для верхньої межі середнього часу виконання.\nОбмеження: > 1",
"gui.computercraft.config.execution.tooltip": "Контролює те, як працюють комп'ютери. Цей розділ призначений\nдля детального налаштування серверів, і у більшості випадків його не потрібно чіпати.",
"gui.computercraft.config.floppy_space_limit": "Обмеження розміру для дискети (в байтах)",
"gui.computercraft.config.floppy_space_limit.tooltip": "Обмеження на розмір, що займається на диску дискетою, в байтах.",
"gui.computercraft.config.http": "HTTP",
"gui.computercraft.config.http.bandwidth": "Трафік",
"gui.computercraft.config.http.bandwidth.global_download": "Глобальне обмеження на завантаження",
"gui.computercraft.config.http.bandwidth.global_download.tooltip": "Число байтів, які можуть бути завантажені в хвилину. Це обмеження на всі комп'ютери відразу (байти в секунду)\nОбмеження: > 1",
"gui.computercraft.pocket_computer_overlay": "Кишеньковий комп'ютер відкритий. Натисніть ESC, щоб закрити.", "gui.computercraft.pocket_computer_overlay": "Кишеньковий комп'ютер відкритий. Натисніть ESC, щоб закрити.",
"gui.computercraft.tooltip.computer_id": "Ідентифікатор комп'ютера: %s", "gui.computercraft.tooltip.computer_id": "Ідентифікатор комп'ютера: %s",
"gui.computercraft.tooltip.copy": "Скопійовано в Буфер обміну", "gui.computercraft.tooltip.copy": "Скопійовано в Буфер обміну",
@ -99,8 +118,6 @@
"item.computercraft.printed_pages": "Надруковані сторінки", "item.computercraft.printed_pages": "Надруковані сторінки",
"item.computercraft.treasure_disk": "Дискета", "item.computercraft.treasure_disk": "Дискета",
"itemGroup.computercraft": "ComputerCraft", "itemGroup.computercraft": "ComputerCraft",
"tracking_field.computercraft.coroutines_created.name": "Співпрограма створена",
"tracking_field.computercraft.coroutines_dead.name": "Співпрограма видалена",
"tracking_field.computercraft.fs.name": "Операції з файловою системою", "tracking_field.computercraft.fs.name": "Операції з файловою системою",
"tracking_field.computercraft.http_download.name": "HTTP завантаження", "tracking_field.computercraft.http_download.name": "HTTP завантаження",
"tracking_field.computercraft.http_upload.name": "HTTP завантаження", "tracking_field.computercraft.http_upload.name": "HTTP завантаження",
@ -115,27 +132,5 @@
"upgrade.minecraft.diamond_hoe.adjective": "Обробна", "upgrade.minecraft.diamond_hoe.adjective": "Обробна",
"upgrade.minecraft.diamond_pickaxe.adjective": "Добувна", "upgrade.minecraft.diamond_pickaxe.adjective": "Добувна",
"upgrade.minecraft.diamond_shovel.adjective": "Копаюча", "upgrade.minecraft.diamond_shovel.adjective": "Копаюча",
"upgrade.minecraft.diamond_sword.adjective": "Бойова", "upgrade.minecraft.diamond_sword.adjective": "Бойова"
"gui.computercraft.config.computer_space_limit": "Обмеження комп'ютерного простору (в байтах)",
"gui.computercraft.config.default_computer_settings": "Налаштування комп'ютера за замовчуванням",
"gui.computercraft.config.disable_lua51_features": "Відключити підтримку Lua 5.1",
"gui.computercraft.config.execution": "Виконання",
"gui.computercraft.config.execution.computer_threads": "Потоки для комп'ютерів",
"gui.computercraft.config.execution.max_main_computer_time": "Обмеження на час, який займає комп'ютер на сервері за один цикл",
"gui.computercraft.config.execution.max_main_computer_time.tooltip": "Бажаний максимальний час, який комп'ютер може працювати за один цикл, в мілісекундах\nЗауважте, що досить ймовірно, що цей ліміт буде порушено, бо немає ніякої можливості\nсправді визначити, скільки комп'ютер займе часу - це значення буде ціллю для верхньої межі середнього часу виконання.\nОбмеження: > 1",
"gui.computercraft.config.execution.max_main_global_time": "Обмеження на час виконання у один серверний цикл",
"gui.computercraft.config.execution.tooltip": "Контролює те, як працюють комп'ютери. Цей розділ призначений\nдля детального налаштування серверів, і у більшості випадків його не потрібно чіпати.",
"gui.computercraft.config.floppy_space_limit": "Обмеження розміру для дискети (в байтах)",
"gui.computercraft.config.floppy_space_limit.tooltip": "Обмеження на розмір, що займається на диску дискетою, в байтах.",
"gui.computercraft.config.http": "HTTP",
"gui.computercraft.config.http.bandwidth": "Трафік",
"gui.computercraft.config.http.bandwidth.global_download": "Глобальне обмеження на завантаження",
"gui.computercraft.config.command_require_creative": "Командний комп'ютер вимагає режиму творчості",
"gui.computercraft.config.command_require_creative.tooltip": "Для взаємодії з командним комп'ютером, гравець має бути в режимі\nтворчості. Це поведінка скопійована з поведінки за замовчуванням для командних блоків.",
"gui.computercraft.config.computer_space_limit.tooltip": "Обмеження на займаєме місце на диску комп'ютерами та черепахами, в байтах.",
"gui.computercraft.config.default_computer_settings.tooltip": "Список лашатувань за замовчуванням, розділених комою, що будуть нашалтовані на нових комп'ютерах\nНаприклад: \"shell.autocomplete=false,lua.autocomplete=false,edit.autocomplete=false\"\nвідключить усі автодоповнення.",
"gui.computercraft.config.disable_lua51_features.tooltip": "Включить це налаштування, якщо хочете відключити функціональність, пов'язану з Lua 5.1, яка буде вилучен в наступних оновленнях.\nТаким чином ви можете впевнитись, що ваші програми не зламаються від подальших оновлень.",
"gui.computercraft.config.execution.computer_threads.tooltip": "Встановлює кількість потоків, на яких запускаються комп'ютери. Більше число\nозначає більшу кількість комп'ютерів, які працюють паралельно, але може призвести до проблем із продуктивністю.\nЗауважте, що деякі модифікації можуть не працювати із кількістю потоків більше за 1. Використовуйте з обережністю.\nОбмеження: > 1",
"gui.computercraft.config.execution.max_main_global_time.tooltip": "Бажаний максимальний час, який витрачається на виконання задач, в мілісекундах\nЗауважте, що досить ймовірно, що цей ліміт буде порушено, бо немає ніякої можливості\nсправді визначити, скільки комп'ютер займе часу - це значення буде ціллю для верхньої межі середнього часу виконання.\nОбмеження: > 1",
"gui.computercraft.config.http.bandwidth.global_download.tooltip": "Число байтів, які можуть бути завантажені в хвилину. Це обмеження на всі комп'ютери відразу (байти в секунду)\nОбмеження: > 1"
} }

View File

@ -30,8 +30,6 @@
"item.computercraft.printed_page": "Trang in", "item.computercraft.printed_page": "Trang in",
"item.computercraft.treasure_disk": "Đĩa mềm", "item.computercraft.treasure_disk": "Đĩa mềm",
"itemGroup.computercraft": "ComputerCraft", "itemGroup.computercraft": "ComputerCraft",
"tracking_field.computercraft.coroutines_created.name": "Coroutine đã tạo",
"tracking_field.computercraft.coroutines_dead.name": "Coroutine bỏ đi",
"tracking_field.computercraft.http_download.name": "HTTP tải xuống", "tracking_field.computercraft.http_download.name": "HTTP tải xuống",
"tracking_field.computercraft.http_upload.name": "HTTP tải lên", "tracking_field.computercraft.http_upload.name": "HTTP tải lên",
"tracking_field.computercraft.websocket_incoming.name": "Websocket đến", "tracking_field.computercraft.websocket_incoming.name": "Websocket đến",

View File

@ -39,9 +39,6 @@
"commands.computercraft.help.synopsis": "为特定的命令提供帮助", "commands.computercraft.help.synopsis": "为特定的命令提供帮助",
"commands.computercraft.queue.desc": "发送computer_command事件到命令计算机,并传递其他参数. 这主要是为地图制作者设计的, 作为/trigger更加计算机友好的版本. 任何玩家都可以运行命令, 这很可能是通过文本组件的点击事件完成的.", "commands.computercraft.queue.desc": "发送computer_command事件到命令计算机,并传递其他参数. 这主要是为地图制作者设计的, 作为/trigger更加计算机友好的版本. 任何玩家都可以运行命令, 这很可能是通过文本组件的点击事件完成的.",
"commands.computercraft.queue.synopsis": "将computer_command事件发送到命令计算机", "commands.computercraft.queue.synopsis": "将computer_command事件发送到命令计算机",
"commands.computercraft.reload.desc": "重新加载ComputerCraft配置文件",
"commands.computercraft.reload.done": "重新加载配置",
"commands.computercraft.reload.synopsis": "重新加载ComputerCraft配置文件",
"commands.computercraft.shutdown.desc": "关闭列出的计算机或全部计算机(如果未指定). 你可以指定计算机的实例id (例如. 123), 计算机id (例如. #123)或标签(例如. \"@My Computer\").", "commands.computercraft.shutdown.desc": "关闭列出的计算机或全部计算机(如果未指定). 你可以指定计算机的实例id (例如. 123), 计算机id (例如. #123)或标签(例如. \"@My Computer\").",
"commands.computercraft.shutdown.done": "关闭%s/%s计算机", "commands.computercraft.shutdown.done": "关闭%s/%s计算机",
"commands.computercraft.shutdown.synopsis": "远程关闭计算机.", "commands.computercraft.shutdown.synopsis": "远程关闭计算机.",
@ -111,8 +108,6 @@
"item.computercraft.printed_pages": "打印纸", "item.computercraft.printed_pages": "打印纸",
"item.computercraft.treasure_disk": "软盘", "item.computercraft.treasure_disk": "软盘",
"itemGroup.computercraft": "ComputerCraft", "itemGroup.computercraft": "ComputerCraft",
"tracking_field.computercraft.coroutines_created.name": "协同创建",
"tracking_field.computercraft.coroutines_dead.name": "协同处理",
"tracking_field.computercraft.fs.name": "文件系统操作", "tracking_field.computercraft.fs.name": "文件系统操作",
"tracking_field.computercraft.http_download.name": "HTTP下载", "tracking_field.computercraft.http_download.name": "HTTP下载",
"tracking_field.computercraft.http_upload.name": "HTTP上传", "tracking_field.computercraft.http_upload.name": "HTTP上传",

View File

@ -1,16 +1,7 @@
{ {
"parent": "minecraft:block/block", "parent": "minecraft:block/orientable",
"render_type": "cutout", "render_type": "cutout",
"textures": { "computercraft:emissive_texture": "cursor",
"particle": "#front"
},
"display": {
"firstperson_righthand": {
"rotation": [ 0, 135, 0 ],
"translation": [ 0, 0, 0 ],
"scale": [ 0.40, 0.40, 0.40 ]
}
},
"elements": [ "elements": [
{ {
"from": [ 0, 0, 0 ], "from": [ 0, 0, 0 ],

View File

@ -0,0 +1,37 @@
// SPDX-FileCopyrightText: 2023 The CC: Tweaked Developers
//
// SPDX-License-Identifier: MPL-2.0
package dan200.computercraft.shared.util;
import org.junit.jupiter.api.Test;
import java.util.List;
import static org.junit.jupiter.api.Assertions.assertArrayEquals;
import static org.junit.jupiter.api.Assertions.assertEquals;
/**
* A couple of trivial tests for {@link ConsList}, mostly as a quick safety check.
*/
public class ConsListTest {
@Test
public void testGet() {
var list = new ConsList<>(1, List.of(2, 3, 4));
assertEquals(1, list.get(0));
assertEquals(2, list.get(1));
assertEquals(4, list.get(3));
}
@Test
public void testSize() {
var list = new ConsList<>(1, List.of(2, 3, 4));
assertEquals(4, list.size());
}
@Test
public void testIterator() {
var list = new ConsList<>(1, List.of(2, 3, 4));
assertArrayEquals(new Integer[]{ 1, 2, 3, 4 }, list.toArray(Integer[]::new));
}
}

View File

@ -22,6 +22,7 @@ import net.minecraft.world.level.block.RedstoneLampBlock
import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Assertions.assertEquals
import org.junit.jupiter.api.Assertions.assertTrue import org.junit.jupiter.api.Assertions.assertTrue
import org.lwjgl.glfw.GLFW import org.lwjgl.glfw.GLFW
import kotlin.time.Duration.Companion.milliseconds
class Computer_Test { class Computer_Test {
/** /**
@ -71,6 +72,24 @@ class Computer_Test {
thenExecute { context.assertBlockHas(lamp, RedstoneLampBlock.LIT, false, "Lamp should not be lit") } thenExecute { context.assertBlockHas(lamp, RedstoneLampBlock.LIT, false, "Lamp should not be lit") }
} }
/**
* Check computers pick up propagated redstone to surrounding blocks.
*
* @see [#1520](https://github.com/cc-tweaked/CC-Tweaked/issues/1520)
*/
@GameTest
fun Self_output_update(context: GameTestHelper) = context.sequence {
thenOnComputer {
getApi<RedstoneAPI>().setOutput(ComputerSide.BACK, true)
sleep(100.milliseconds)
assertEquals(true, getApi<RedstoneAPI>().getInput(ComputerSide.BACK), "Input should be on")
getApi<RedstoneAPI>().setOutput(ComputerSide.BACK, false)
sleep(100.milliseconds)
assertEquals(false, getApi<RedstoneAPI>().getInput(ComputerSide.BACK), "Input should be off")
}
}
/** /**
* Check computers and turtles expose peripherals. * Check computers and turtles expose peripherals.
*/ */

View File

@ -145,11 +145,31 @@ class Turtle_Test {
*/ */
@GameTest @GameTest
fun Hoe_dirt(helper: GameTestHelper) = helper.sequence { fun Hoe_dirt(helper: GameTestHelper) = helper.sequence {
thenOnComputer { turtle.dig(Optional.empty()).await().assertArrayEquals(true, message = "Dug with hoe") }
thenExecute { helper.assertBlockPresent(Blocks.FARMLAND, BlockPos(1, 2, 1)) }
}
/**
* Checks turtles can hoe dirt with a block gap below them.
*
* @see [#1527](https://github.com/cc-tweaked/CC-Tweaked/issues/1527)
*/
@GameTest
fun Hoe_dirt_below(helper: GameTestHelper) = helper.sequence {
thenOnComputer { turtle.digDown(Optional.empty()).await().assertArrayEquals(true, message = "Dug with hoe") }
thenExecute { helper.assertBlockPresent(Blocks.FARMLAND, BlockPos(1, 1, 1)) }
}
/**
* Checks turtles cannot hoe dirt with a block gap in front of them.
*/
@GameTest
fun Hoe_dirt_distant(helper: GameTestHelper) = helper.sequence {
thenOnComputer { thenOnComputer {
turtle.dig(Optional.empty()).await() turtle.dig(Optional.empty()).await()
.assertArrayEquals(true, message = "Dug with hoe") .assertArrayEquals(false, "Nothing to dig here", message = "Dug with hoe")
} }
thenExecute { helper.assertBlockPresent(Blocks.FARMLAND, BlockPos(1, 2, 1)) } thenExecute { helper.assertBlockPresent(Blocks.DIRT, BlockPos(1, 2, 2)) }
} }
/** /**
@ -603,6 +623,24 @@ class Turtle_Test {
} }
// TODO: Turtle sucking from items // TODO: Turtle sucking from items
/**
* Render turtles as an item.
*/
@ClientGameTest
fun Render_turtle_items(helper: GameTestHelper) = helper.sequence {
thenExecute { helper.positionAtArmorStand() }
thenScreenshot()
}
/**
* Render turtles as a block entity.
*/
@ClientGameTest
fun Render_turtle_blocks(helper: GameTestHelper) = helper.sequence {
thenExecute { helper.positionAtArmorStand() }
thenScreenshot()
}
} }
private val LuaTaskContext.turtle get() = getApi<TurtleAPI>() private val LuaTaskContext.turtle get() = getApi<TurtleAPI>()

View File

@ -0,0 +1,137 @@
{
DataVersion: 3120,
size: [5, 5, 5],
data: [
{pos: [0, 0, 0], state: "minecraft:polished_andesite"},
{pos: [0, 0, 1], state: "minecraft:polished_andesite"},
{pos: [0, 0, 2], state: "minecraft:polished_andesite"},
{pos: [0, 0, 3], state: "minecraft:polished_andesite"},
{pos: [0, 0, 4], state: "minecraft:polished_andesite"},
{pos: [1, 0, 0], state: "minecraft:polished_andesite"},
{pos: [1, 0, 1], state: "minecraft:polished_andesite"},
{pos: [1, 0, 2], state: "minecraft:polished_andesite"},
{pos: [1, 0, 3], state: "minecraft:polished_andesite"},
{pos: [1, 0, 4], state: "minecraft:polished_andesite"},
{pos: [2, 0, 0], state: "minecraft:polished_andesite"},
{pos: [2, 0, 1], state: "minecraft:polished_andesite"},
{pos: [2, 0, 2], state: "minecraft:polished_andesite"},
{pos: [2, 0, 3], state: "minecraft:polished_andesite"},
{pos: [2, 0, 4], state: "minecraft:polished_andesite"},
{pos: [3, 0, 0], state: "minecraft:polished_andesite"},
{pos: [3, 0, 1], state: "minecraft:polished_andesite"},
{pos: [3, 0, 2], state: "minecraft:polished_andesite"},
{pos: [3, 0, 3], state: "minecraft:polished_andesite"},
{pos: [3, 0, 4], state: "minecraft:polished_andesite"},
{pos: [4, 0, 0], state: "minecraft:polished_andesite"},
{pos: [4, 0, 1], state: "minecraft:polished_andesite"},
{pos: [4, 0, 2], state: "minecraft:polished_andesite"},
{pos: [4, 0, 3], state: "minecraft:polished_andesite"},
{pos: [4, 0, 4], state: "minecraft:polished_andesite"},
{pos: [0, 1, 0], state: "minecraft:air"},
{pos: [0, 1, 1], state: "minecraft:air"},
{pos: [0, 1, 2], state: "minecraft:air"},
{pos: [0, 1, 3], state: "minecraft:air"},
{pos: [0, 1, 4], state: "minecraft:air"},
{pos: [1, 1, 0], state: "minecraft:air"},
{pos: [1, 1, 1], state: "minecraft:air"},
{pos: [1, 1, 2], state: "minecraft:air"},
{pos: [1, 1, 3], state: "minecraft:air"},
{pos: [1, 1, 4], state: "minecraft:air"},
{pos: [2, 1, 0], state: "minecraft:air"},
{pos: [2, 1, 1], state: "minecraft:air"},
{pos: [2, 1, 2], state: "computercraft:computer_advanced{facing:north,state:on}", nbt: {ComputerId: 1, Label: "computer_test.self_output_update", On: 1b, id: "computercraft:computer_advanced"}},
{pos: [2, 1, 3], state: "minecraft:polished_andesite"},
{pos: [2, 1, 4], state: "minecraft:air"},
{pos: [3, 1, 0], state: "minecraft:air"},
{pos: [3, 1, 1], state: "minecraft:air"},
{pos: [3, 1, 2], state: "minecraft:air"},
{pos: [3, 1, 3], state: "minecraft:air"},
{pos: [3, 1, 4], state: "minecraft:air"},
{pos: [4, 1, 0], state: "minecraft:air"},
{pos: [4, 1, 1], state: "minecraft:air"},
{pos: [4, 1, 2], state: "minecraft:air"},
{pos: [4, 1, 3], state: "minecraft:air"},
{pos: [4, 1, 4], state: "minecraft:air"},
{pos: [0, 2, 0], state: "minecraft:air"},
{pos: [0, 2, 1], state: "minecraft:air"},
{pos: [0, 2, 2], state: "minecraft:air"},
{pos: [0, 2, 3], state: "minecraft:air"},
{pos: [0, 2, 4], state: "minecraft:air"},
{pos: [1, 2, 0], state: "minecraft:air"},
{pos: [1, 2, 1], state: "minecraft:air"},
{pos: [1, 2, 2], state: "minecraft:air"},
{pos: [1, 2, 3], state: "minecraft:air"},
{pos: [1, 2, 4], state: "minecraft:air"},
{pos: [2, 2, 0], state: "minecraft:air"},
{pos: [2, 2, 1], state: "minecraft:air"},
{pos: [2, 2, 2], state: "minecraft:air"},
{pos: [2, 2, 3], state: "minecraft:air"},
{pos: [2, 2, 4], state: "minecraft:air"},
{pos: [3, 2, 0], state: "minecraft:air"},
{pos: [3, 2, 1], state: "minecraft:air"},
{pos: [3, 2, 2], state: "minecraft:air"},
{pos: [3, 2, 3], state: "minecraft:air"},
{pos: [3, 2, 4], state: "minecraft:air"},
{pos: [4, 2, 0], state: "minecraft:air"},
{pos: [4, 2, 1], state: "minecraft:air"},
{pos: [4, 2, 2], state: "minecraft:air"},
{pos: [4, 2, 3], state: "minecraft:air"},
{pos: [4, 2, 4], state: "minecraft:air"},
{pos: [0, 3, 0], state: "minecraft:air"},
{pos: [0, 3, 1], state: "minecraft:air"},
{pos: [0, 3, 2], state: "minecraft:air"},
{pos: [0, 3, 3], state: "minecraft:air"},
{pos: [0, 3, 4], state: "minecraft:air"},
{pos: [1, 3, 0], state: "minecraft:air"},
{pos: [1, 3, 1], state: "minecraft:air"},
{pos: [1, 3, 2], state: "minecraft:air"},
{pos: [1, 3, 3], state: "minecraft:air"},
{pos: [1, 3, 4], state: "minecraft:air"},
{pos: [2, 3, 0], state: "minecraft:air"},
{pos: [2, 3, 1], state: "minecraft:air"},
{pos: [2, 3, 2], state: "minecraft:air"},
{pos: [2, 3, 3], state: "minecraft:air"},
{pos: [2, 3, 4], state: "minecraft:air"},
{pos: [3, 3, 0], state: "minecraft:air"},
{pos: [3, 3, 1], state: "minecraft:air"},
{pos: [3, 3, 2], state: "minecraft:air"},
{pos: [3, 3, 3], state: "minecraft:air"},
{pos: [3, 3, 4], state: "minecraft:air"},
{pos: [4, 3, 0], state: "minecraft:air"},
{pos: [4, 3, 1], state: "minecraft:air"},
{pos: [4, 3, 2], state: "minecraft:air"},
{pos: [4, 3, 3], state: "minecraft:air"},
{pos: [4, 3, 4], state: "minecraft:air"},
{pos: [0, 4, 0], state: "minecraft:air"},
{pos: [0, 4, 1], state: "minecraft:air"},
{pos: [0, 4, 2], state: "minecraft:air"},
{pos: [0, 4, 3], state: "minecraft:air"},
{pos: [0, 4, 4], state: "minecraft:air"},
{pos: [1, 4, 0], state: "minecraft:air"},
{pos: [1, 4, 1], state: "minecraft:air"},
{pos: [1, 4, 2], state: "minecraft:air"},
{pos: [1, 4, 3], state: "minecraft:air"},
{pos: [1, 4, 4], state: "minecraft:air"},
{pos: [2, 4, 0], state: "minecraft:air"},
{pos: [2, 4, 1], state: "minecraft:air"},
{pos: [2, 4, 2], state: "minecraft:air"},
{pos: [2, 4, 3], state: "minecraft:air"},
{pos: [2, 4, 4], state: "minecraft:air"},
{pos: [3, 4, 0], state: "minecraft:air"},
{pos: [3, 4, 1], state: "minecraft:air"},
{pos: [3, 4, 2], state: "minecraft:air"},
{pos: [3, 4, 3], state: "minecraft:air"},
{pos: [3, 4, 4], state: "minecraft:air"},
{pos: [4, 4, 0], state: "minecraft:air"},
{pos: [4, 4, 1], state: "minecraft:air"},
{pos: [4, 4, 2], state: "minecraft:air"},
{pos: [4, 4, 3], state: "minecraft:air"},
{pos: [4, 4, 4], state: "minecraft:air"}
],
entities: [],
palette: [
"minecraft:polished_andesite",
"minecraft:air",
"computercraft:computer_advanced{facing:north,state:on}"
]
}

View File

@ -0,0 +1,40 @@
{
DataVersion: 2730,
size: [3, 3, 3],
data: [
{pos: [0, 0, 0], state: "minecraft:polished_andesite"},
{pos: [0, 0, 1], state: "minecraft:polished_andesite"},
{pos: [0, 0, 2], state: "minecraft:polished_andesite"},
{pos: [1, 0, 0], state: "minecraft:polished_andesite"},
{pos: [1, 0, 1], state: "minecraft:dirt"},
{pos: [1, 0, 2], state: "minecraft:polished_andesite"},
{pos: [2, 0, 0], state: "minecraft:polished_andesite"},
{pos: [2, 0, 1], state: "minecraft:polished_andesite"},
{pos: [2, 0, 2], state: "minecraft:polished_andesite"},
{pos: [0, 1, 0], state: "minecraft:air"},
{pos: [0, 1, 1], state: "minecraft:air"},
{pos: [0, 1, 2], state: "minecraft:air"},
{pos: [1, 1, 0], state: "minecraft:air"},
{pos: [1, 1, 1], state: "minecraft:air"},
{pos: [1, 1, 2], state: "minecraft:air"},
{pos: [2, 1, 0], state: "minecraft:air"},
{pos: [2, 1, 1], state: "minecraft:air"},
{pos: [2, 1, 2], state: "minecraft:air"},
{pos: [0, 2, 0], state: "minecraft:air"},
{pos: [0, 2, 1], state: "minecraft:air"},
{pos: [0, 2, 2], state: "minecraft:air"},
{pos: [1, 2, 0], state: "minecraft:air"},
{pos: [1, 2, 1], state: "computercraft:turtle_normal{facing:south,waterlogged:false}", nbt: {ComputerId: 1, Fuel: 0, Items: [], Label: "turtle_test.hoe_dirt_below", LeftUpgrade: "minecraft:diamond_hoe", On: 1b, Owner: {LowerId: -6876936588741668278L, Name: "Dev", UpperId: 4039158846114182220L}, Slot: 0, id: "computercraft:turtle_normal"}},
{pos: [1, 2, 2], state: "minecraft:air"},
{pos: [2, 2, 0], state: "minecraft:air"},
{pos: [2, 2, 1], state: "minecraft:air"},
{pos: [2, 2, 2], state: "minecraft:air"}
],
entities: [],
palette: [
"minecraft:polished_andesite",
"minecraft:dirt",
"computercraft:turtle_normal{facing:south,waterlogged:false}",
"minecraft:air"
]
}

View File

@ -0,0 +1,40 @@
{
DataVersion: 2730,
size: [3, 3, 3],
data: [
{pos: [0, 0, 0], state: "minecraft:polished_andesite"},
{pos: [0, 0, 1], state: "minecraft:polished_andesite"},
{pos: [0, 0, 2], state: "minecraft:polished_andesite"},
{pos: [1, 0, 0], state: "minecraft:polished_andesite"},
{pos: [1, 0, 1], state: "minecraft:polished_andesite"},
{pos: [1, 0, 2], state: "minecraft:polished_andesite"},
{pos: [2, 0, 0], state: "minecraft:polished_andesite"},
{pos: [2, 0, 1], state: "minecraft:polished_andesite"},
{pos: [2, 0, 2], state: "minecraft:polished_andesite"},
{pos: [0, 1, 0], state: "minecraft:air"},
{pos: [0, 1, 1], state: "minecraft:air"},
{pos: [0, 1, 2], state: "minecraft:air"},
{pos: [1, 1, 0], state: "computercraft:turtle_normal{facing:south,waterlogged:false}", nbt: {ComputerId: 1, Fuel: 0, Items: [], Label: "turtle_test.hoe_dirt_distant", LeftUpgrade: "minecraft:diamond_hoe", On: 1b, Owner: {LowerId: -6876936588741668278L, Name: "Dev", UpperId: 4039158846114182220L}, Slot: 0, id: "computercraft:turtle_normal"}},
{pos: [1, 1, 1], state: "minecraft:air"},
{pos: [1, 1, 2], state: "minecraft:dirt"},
{pos: [2, 1, 0], state: "minecraft:air"},
{pos: [2, 1, 1], state: "minecraft:air"},
{pos: [2, 1, 2], state: "minecraft:air"},
{pos: [0, 2, 0], state: "minecraft:air"},
{pos: [0, 2, 1], state: "minecraft:air"},
{pos: [0, 2, 2], state: "minecraft:air"},
{pos: [1, 2, 0], state: "minecraft:air"},
{pos: [1, 2, 1], state: "minecraft:air"},
{pos: [1, 2, 2], state: "minecraft:air"},
{pos: [2, 2, 0], state: "minecraft:air"},
{pos: [2, 2, 1], state: "minecraft:air"},
{pos: [2, 2, 2], state: "minecraft:air"}
],
entities: [],
palette: [
"minecraft:polished_andesite",
"minecraft:dirt",
"computercraft:turtle_normal{facing:south,waterlogged:false}",
"minecraft:air"
]
}

View File

@ -0,0 +1,140 @@
{
DataVersion: 3337,
size: [5, 5, 5],
data: [
{pos: [0, 0, 0], state: "minecraft:polished_andesite"},
{pos: [0, 0, 1], state: "minecraft:polished_andesite"},
{pos: [0, 0, 2], state: "minecraft:polished_andesite"},
{pos: [0, 0, 3], state: "minecraft:polished_andesite"},
{pos: [0, 0, 4], state: "minecraft:polished_andesite"},
{pos: [1, 0, 0], state: "minecraft:polished_andesite"},
{pos: [1, 0, 1], state: "minecraft:polished_andesite"},
{pos: [1, 0, 2], state: "minecraft:polished_andesite"},
{pos: [1, 0, 3], state: "minecraft:polished_andesite"},
{pos: [1, 0, 4], state: "minecraft:polished_andesite"},
{pos: [2, 0, 0], state: "minecraft:polished_andesite"},
{pos: [2, 0, 1], state: "minecraft:polished_andesite"},
{pos: [2, 0, 2], state: "minecraft:polished_andesite"},
{pos: [2, 0, 3], state: "minecraft:polished_andesite"},
{pos: [2, 0, 4], state: "minecraft:polished_andesite"},
{pos: [3, 0, 0], state: "minecraft:polished_andesite"},
{pos: [3, 0, 1], state: "minecraft:polished_andesite"},
{pos: [3, 0, 2], state: "minecraft:polished_andesite"},
{pos: [3, 0, 3], state: "minecraft:polished_andesite"},
{pos: [3, 0, 4], state: "minecraft:polished_andesite"},
{pos: [4, 0, 0], state: "minecraft:polished_andesite"},
{pos: [4, 0, 1], state: "minecraft:polished_andesite"},
{pos: [4, 0, 2], state: "minecraft:polished_andesite"},
{pos: [4, 0, 3], state: "minecraft:polished_andesite"},
{pos: [4, 0, 4], state: "minecraft:polished_andesite"},
{pos: [0, 1, 0], state: "minecraft:air"},
{pos: [0, 1, 1], state: "minecraft:air"},
{pos: [0, 1, 2], state: "minecraft:air"},
{pos: [0, 1, 3], state: "minecraft:air"},
{pos: [0, 1, 4], state: "minecraft:air"},
{pos: [1, 1, 0], state: "minecraft:air"},
{pos: [1, 1, 1], state: "minecraft:air"},
{pos: [1, 1, 2], state: "minecraft:air"},
{pos: [1, 1, 3], state: "computercraft:turtle_normal{facing:east,waterlogged:false}", nbt: {ComputerId: 8, Fuel: 0, Items: [], LeftUpgrade: "cctest:netherite_pickaxe", LeftUpgradeNbt: {Tag: {Damage: 0, Enchantments: [{id: "minecraft:efficiency", lvl: 5s}], RepairCost: 1}}, On: 1b, Owner: {LowerId: -7931330074873442406L, Name: "Player848", UpperId: 7430876841693101418L}, Slot: 0, id: "computercraft:turtle_normal"}},
{pos: [1, 1, 4], state: "minecraft:air"},
{pos: [2, 1, 0], state: "minecraft:air"},
{pos: [2, 1, 1], state: "minecraft:air"},
{pos: [2, 1, 2], state: "minecraft:air"},
{pos: [2, 1, 3], state: "minecraft:air"},
{pos: [2, 1, 4], state: "minecraft:air"},
{pos: [3, 1, 0], state: "minecraft:air"},
{pos: [3, 1, 1], state: "minecraft:air"},
{pos: [3, 1, 2], state: "minecraft:air"},
{pos: [3, 1, 3], state: "computercraft:turtle_normal{facing:west,waterlogged:false}", nbt: {ComputerId: 8, Fuel: 0, Items: [], Label: "Dinnerbone", On: 1b, Owner: {LowerId: -7931330074873442406L, Name: "Player848", UpperId: 7430876841693101418L}, RightUpgrade: "minecraft:diamond_pickaxe", RightUpgradeNbt: {Tag: {Damage: 0}}, Slot: 0, id: "computercraft:turtle_normal"}},
{pos: [3, 1, 4], state: "minecraft:air"},
{pos: [4, 1, 0], state: "minecraft:air"},
{pos: [4, 1, 1], state: "minecraft:air"},
{pos: [4, 1, 2], state: "minecraft:air"},
{pos: [4, 1, 3], state: "minecraft:air"},
{pos: [4, 1, 4], state: "minecraft:air"},
{pos: [0, 2, 0], state: "minecraft:air"},
{pos: [0, 2, 1], state: "minecraft:air"},
{pos: [0, 2, 2], state: "minecraft:air"},
{pos: [0, 2, 3], state: "minecraft:air"},
{pos: [0, 2, 4], state: "minecraft:air"},
{pos: [1, 2, 0], state: "minecraft:air"},
{pos: [1, 2, 1], state: "minecraft:air"},
{pos: [1, 2, 2], state: "minecraft:air"},
{pos: [1, 2, 3], state: "minecraft:air"},
{pos: [1, 2, 4], state: "minecraft:air"},
{pos: [2, 2, 0], state: "minecraft:air"},
{pos: [2, 2, 1], state: "minecraft:air"},
{pos: [2, 2, 2], state: "minecraft:air"},
{pos: [2, 2, 3], state: "minecraft:air"},
{pos: [2, 2, 4], state: "minecraft:air"},
{pos: [3, 2, 0], state: "minecraft:air"},
{pos: [3, 2, 1], state: "minecraft:air"},
{pos: [3, 2, 2], state: "minecraft:air"},
{pos: [3, 2, 3], state: "minecraft:air"},
{pos: [3, 2, 4], state: "minecraft:air"},
{pos: [4, 2, 0], state: "minecraft:air"},
{pos: [4, 2, 1], state: "minecraft:air"},
{pos: [4, 2, 2], state: "minecraft:air"},
{pos: [4, 2, 3], state: "minecraft:air"},
{pos: [4, 2, 4], state: "minecraft:air"},
{pos: [0, 3, 0], state: "minecraft:air"},
{pos: [0, 3, 1], state: "minecraft:air"},
{pos: [0, 3, 2], state: "minecraft:air"},
{pos: [0, 3, 3], state: "minecraft:air"},
{pos: [0, 3, 4], state: "minecraft:air"},
{pos: [1, 3, 0], state: "minecraft:air"},
{pos: [1, 3, 1], state: "minecraft:air"},
{pos: [1, 3, 2], state: "minecraft:air"},
{pos: [1, 3, 3], state: "computercraft:turtle_normal{facing:east,waterlogged:false}", nbt: {ComputerId: 8, Fuel: 0, Items: [], Label: "Dinnerbone", LeftUpgrade: "cctest:netherite_pickaxe", LeftUpgradeNbt: {Tag: {Damage: 0, Enchantments: [{id: "minecraft:efficiency", lvl: 5s}], RepairCost: 1}}, On: 1b, Owner: {LowerId: -7931330074873442406L, Name: "Player848", UpperId: 7430876841693101418L}, Slot: 0, id: "computercraft:turtle_normal"}},
{pos: [1, 3, 4], state: "minecraft:air"},
{pos: [2, 3, 0], state: "minecraft:air"},
{pos: [2, 3, 1], state: "minecraft:air"},
{pos: [2, 3, 2], state: "minecraft:air"},
{pos: [2, 3, 3], state: "minecraft:air"},
{pos: [2, 3, 4], state: "minecraft:air"},
{pos: [3, 3, 0], state: "minecraft:air"},
{pos: [3, 3, 1], state: "minecraft:air"},
{pos: [3, 3, 2], state: "minecraft:air"},
{pos: [3, 3, 3], state: "computercraft:turtle_normal{facing:west,waterlogged:false}", nbt: {ComputerId: 8, Fuel: 0, Items: [], On: 1b, Owner: {LowerId: -7931330074873442406L, Name: "Player848", UpperId: 7430876841693101418L}, RightUpgrade: "minecraft:diamond_pickaxe", RightUpgradeNbt: {Tag: {Damage: 0}}, Slot: 0, id: "computercraft:turtle_normal"}},
{pos: [3, 3, 4], state: "minecraft:air"},
{pos: [4, 3, 0], state: "minecraft:air"},
{pos: [4, 3, 1], state: "minecraft:air"},
{pos: [4, 3, 2], state: "minecraft:air"},
{pos: [4, 3, 3], state: "minecraft:air"},
{pos: [4, 3, 4], state: "minecraft:air"},
{pos: [0, 4, 0], state: "minecraft:air"},
{pos: [0, 4, 1], state: "minecraft:air"},
{pos: [0, 4, 2], state: "minecraft:air"},
{pos: [0, 4, 3], state: "minecraft:air"},
{pos: [0, 4, 4], state: "minecraft:air"},
{pos: [1, 4, 0], state: "minecraft:air"},
{pos: [1, 4, 1], state: "minecraft:air"},
{pos: [1, 4, 2], state: "minecraft:air"},
{pos: [1, 4, 3], state: "minecraft:air"},
{pos: [1, 4, 4], state: "minecraft:air"},
{pos: [2, 4, 0], state: "minecraft:air"},
{pos: [2, 4, 1], state: "minecraft:air"},
{pos: [2, 4, 2], state: "minecraft:air"},
{pos: [2, 4, 3], state: "minecraft:air"},
{pos: [2, 4, 4], state: "minecraft:air"},
{pos: [3, 4, 0], state: "minecraft:air"},
{pos: [3, 4, 1], state: "minecraft:air"},
{pos: [3, 4, 2], state: "minecraft:air"},
{pos: [3, 4, 3], state: "minecraft:air"},
{pos: [3, 4, 4], state: "minecraft:air"},
{pos: [4, 4, 0], state: "minecraft:air"},
{pos: [4, 4, 1], state: "minecraft:air"},
{pos: [4, 4, 2], state: "minecraft:air"},
{pos: [4, 4, 3], state: "minecraft:air"},
{pos: [4, 4, 4], state: "minecraft:air"}
],
entities: [
{blockPos: [2, 1, 0], pos: [2.52408694606693d, 1.0d, 0.6487863808268131d], nbt: {AbsorptionAmount: 0.0f, Air: 300s, ArmorItems: [{}, {}, {}, {}], Attributes: [{Base: 0.699999988079071d, Name: "minecraft:generic.movement_speed"}], Brain: {memories: {}}, CustomName: '{"text":"turtle_test.render_turtle_blocks"}', DeathTime: 0s, DisabledSlots: 0, FallDistance: 0.0f, FallFlying: 0b, Fire: -1s, HandItems: [{}, {}], Health: 20.0f, HurtByTimestamp: 0, HurtTime: 0s, Invisible: 1b, Invulnerable: 0b, Marker: 1b, Motion: [0.0d, 0.0d, 0.0d], NoBasePlate: 0b, OnGround: 0b, PortalCooldown: 0, Pos: [124.52408694606693d, -58.0d, 50.64878638082681d], Pose: {}, Rotation: [0.14965993f, 4.066999f], ShowArms: 0b, Small: 0b, UUID: [I; 755114464, 1289439453, -2088751844, 985194758], id: "minecraft:armor_stand"}}
],
palette: [
"minecraft:polished_andesite",
"minecraft:air",
"computercraft:turtle_normal{facing:east,waterlogged:false}",
"computercraft:turtle_normal{facing:west,waterlogged:false}"
]
}

View File

@ -0,0 +1,142 @@
{
DataVersion: 3337,
size: [5, 5, 5],
data: [
{pos: [0, 0, 0], state: "minecraft:polished_andesite"},
{pos: [0, 0, 1], state: "minecraft:polished_andesite"},
{pos: [0, 0, 2], state: "minecraft:polished_andesite"},
{pos: [0, 0, 3], state: "minecraft:polished_andesite"},
{pos: [0, 0, 4], state: "minecraft:polished_andesite"},
{pos: [1, 0, 0], state: "minecraft:polished_andesite"},
{pos: [1, 0, 1], state: "minecraft:polished_andesite"},
{pos: [1, 0, 2], state: "minecraft:polished_andesite"},
{pos: [1, 0, 3], state: "minecraft:polished_andesite"},
{pos: [1, 0, 4], state: "minecraft:polished_andesite"},
{pos: [2, 0, 0], state: "minecraft:polished_andesite"},
{pos: [2, 0, 1], state: "minecraft:polished_andesite"},
{pos: [2, 0, 2], state: "minecraft:polished_andesite"},
{pos: [2, 0, 3], state: "minecraft:polished_andesite"},
{pos: [2, 0, 4], state: "minecraft:polished_andesite"},
{pos: [3, 0, 0], state: "minecraft:polished_andesite"},
{pos: [3, 0, 1], state: "minecraft:polished_andesite"},
{pos: [3, 0, 2], state: "minecraft:polished_andesite"},
{pos: [3, 0, 3], state: "minecraft:polished_andesite"},
{pos: [3, 0, 4], state: "minecraft:polished_andesite"},
{pos: [4, 0, 0], state: "minecraft:polished_andesite"},
{pos: [4, 0, 1], state: "minecraft:polished_andesite"},
{pos: [4, 0, 2], state: "minecraft:polished_andesite"},
{pos: [4, 0, 3], state: "minecraft:polished_andesite"},
{pos: [4, 0, 4], state: "minecraft:polished_andesite"},
{pos: [0, 1, 0], state: "minecraft:air"},
{pos: [0, 1, 1], state: "minecraft:air"},
{pos: [0, 1, 2], state: "minecraft:air"},
{pos: [0, 1, 3], state: "minecraft:air"},
{pos: [0, 1, 4], state: "minecraft:air"},
{pos: [1, 1, 0], state: "minecraft:air"},
{pos: [1, 1, 1], state: "minecraft:air"},
{pos: [1, 1, 2], state: "minecraft:air"},
{pos: [1, 1, 3], state: "minecraft:air"},
{pos: [1, 1, 4], state: "minecraft:air"},
{pos: [2, 1, 0], state: "minecraft:air"},
{pos: [2, 1, 1], state: "minecraft:air"},
{pos: [2, 1, 2], state: "minecraft:air"},
{pos: [2, 1, 3], state: "minecraft:air"},
{pos: [2, 1, 4], state: "minecraft:air"},
{pos: [3, 1, 0], state: "minecraft:air"},
{pos: [3, 1, 1], state: "minecraft:air"},
{pos: [3, 1, 2], state: "minecraft:air"},
{pos: [3, 1, 3], state: "minecraft:air"},
{pos: [3, 1, 4], state: "minecraft:air"},
{pos: [4, 1, 0], state: "minecraft:air"},
{pos: [4, 1, 1], state: "minecraft:air"},
{pos: [4, 1, 2], state: "minecraft:air"},
{pos: [4, 1, 3], state: "minecraft:air"},
{pos: [4, 1, 4], state: "minecraft:air"},
{pos: [0, 2, 0], state: "minecraft:air"},
{pos: [0, 2, 1], state: "minecraft:air"},
{pos: [0, 2, 2], state: "minecraft:air"},
{pos: [0, 2, 3], state: "minecraft:air"},
{pos: [0, 2, 4], state: "minecraft:air"},
{pos: [1, 2, 0], state: "minecraft:air"},
{pos: [1, 2, 1], state: "minecraft:air"},
{pos: [1, 2, 2], state: "minecraft:air"},
{pos: [1, 2, 3], state: "minecraft:air"},
{pos: [1, 2, 4], state: "minecraft:air"},
{pos: [2, 2, 0], state: "minecraft:air"},
{pos: [2, 2, 1], state: "minecraft:air"},
{pos: [2, 2, 2], state: "minecraft:air"},
{pos: [2, 2, 3], state: "minecraft:air"},
{pos: [2, 2, 4], state: "minecraft:air"},
{pos: [3, 2, 0], state: "minecraft:air"},
{pos: [3, 2, 1], state: "minecraft:air"},
{pos: [3, 2, 2], state: "minecraft:air"},
{pos: [3, 2, 3], state: "minecraft:air"},
{pos: [3, 2, 4], state: "minecraft:air"},
{pos: [4, 2, 0], state: "minecraft:air"},
{pos: [4, 2, 1], state: "minecraft:air"},
{pos: [4, 2, 2], state: "minecraft:air"},
{pos: [4, 2, 3], state: "minecraft:air"},
{pos: [4, 2, 4], state: "minecraft:air"},
{pos: [0, 3, 0], state: "minecraft:air"},
{pos: [0, 3, 1], state: "minecraft:air"},
{pos: [0, 3, 2], state: "minecraft:air"},
{pos: [0, 3, 3], state: "minecraft:air"},
{pos: [0, 3, 4], state: "minecraft:air"},
{pos: [1, 3, 0], state: "minecraft:air"},
{pos: [1, 3, 1], state: "minecraft:air"},
{pos: [1, 3, 2], state: "minecraft:air"},
{pos: [1, 3, 3], state: "minecraft:air"},
{pos: [1, 3, 4], state: "minecraft:air"},
{pos: [2, 3, 0], state: "minecraft:air"},
{pos: [2, 3, 1], state: "minecraft:air"},
{pos: [2, 3, 2], state: "minecraft:air"},
{pos: [2, 3, 3], state: "minecraft:air"},
{pos: [2, 3, 4], state: "minecraft:air"},
{pos: [3, 3, 0], state: "minecraft:air"},
{pos: [3, 3, 1], state: "minecraft:air"},
{pos: [3, 3, 2], state: "minecraft:air"},
{pos: [3, 3, 3], state: "minecraft:air"},
{pos: [3, 3, 4], state: "minecraft:air"},
{pos: [4, 3, 0], state: "minecraft:air"},
{pos: [4, 3, 1], state: "minecraft:air"},
{pos: [4, 3, 2], state: "minecraft:air"},
{pos: [4, 3, 3], state: "minecraft:air"},
{pos: [4, 3, 4], state: "minecraft:air"},
{pos: [0, 4, 0], state: "minecraft:air"},
{pos: [0, 4, 1], state: "minecraft:air"},
{pos: [0, 4, 2], state: "minecraft:air"},
{pos: [0, 4, 3], state: "minecraft:air"},
{pos: [0, 4, 4], state: "minecraft:air"},
{pos: [1, 4, 0], state: "minecraft:air"},
{pos: [1, 4, 1], state: "minecraft:air"},
{pos: [1, 4, 2], state: "minecraft:air"},
{pos: [1, 4, 3], state: "minecraft:air"},
{pos: [1, 4, 4], state: "minecraft:air"},
{pos: [2, 4, 0], state: "minecraft:air"},
{pos: [2, 4, 1], state: "minecraft:air"},
{pos: [2, 4, 2], state: "minecraft:air"},
{pos: [2, 4, 3], state: "minecraft:air"},
{pos: [2, 4, 4], state: "minecraft:air"},
{pos: [3, 4, 0], state: "minecraft:air"},
{pos: [3, 4, 1], state: "minecraft:air"},
{pos: [3, 4, 2], state: "minecraft:air"},
{pos: [3, 4, 3], state: "minecraft:air"},
{pos: [3, 4, 4], state: "minecraft:air"},
{pos: [4, 4, 0], state: "minecraft:air"},
{pos: [4, 4, 1], state: "minecraft:air"},
{pos: [4, 4, 2], state: "minecraft:air"},
{pos: [4, 4, 3], state: "minecraft:air"},
{pos: [4, 4, 4], state: "minecraft:air"}
],
entities: [
{blockPos: [2, 1, 0], pos: [2.5d, 1.0d, 0.5d], nbt: {AbsorptionAmount: 0.0f, Air: 300s, ArmorItems: [{}, {}, {}, {}], Attributes: [{Base: 0.699999988079071d, Name: "minecraft:generic.movement_speed"}], Brain: {memories: {}}, CustomName: '{"text":"turtle_test.render_turtle_items"}', DeathTime: 0s, DisabledSlots: 0, FallDistance: 0.0f, FallFlying: 0b, Fire: -1s, HandItems: [{}, {}], Health: 20.0f, HurtByTimestamp: 0, HurtTime: 0s, Invisible: 1b, Invulnerable: 0b, Marker: 1b, Motion: [0.0d, 0.0d, 0.0d], NoBasePlate: 0b, OnGround: 0b, PortalCooldown: 0, Pos: [125.5d, -58.0d, 53.6501934495752d], Pose: {}, Rotation: [0.14965993f, 4.066999f], ShowArms: 0b, Small: 0b, UUID: [I; -1678989666, 1780632657, -1267321893, 665166246], id: "minecraft:armor_stand"}},
{blockPos: [3, 1, 3], pos: [3.5d, 1.5d, 3.5d], nbt: {Air: 300s, FallDistance: 0.0f, Fire: 0s, Invulnerable: 0b, Motion: [0.0d, 0.0d, 0.0d], OnGround: 0b, PortalCooldown: 0, Pos: [126.5d, -57.5d, 56.5d], Rotation: [-90.0f, 0.0f], UUID: [I; 671334450, -268547745, -1360971514, -649716242], billboard: "fixed", glow_color_override: -1, height: 0.0f, id: "minecraft:item_display", interpolation_duration: 0, item: {Count: 1b, id: "computercraft:turtle_normal", tag: {ComputerId: 8, Fuel: 0, Items: [], display: {Name: '{"text":"Dinnerbone"}'}, On: 1b, RightUpgrade: "minecraft:diamond_pickaxe", RightUpgradeNbt: {Tag: {Damage: 0}}}}, item_display: "none", shadow_radius: 0.0f, shadow_strength: 1.0f, transformation: {left_rotation: [0.0f, 0.0f, 0.0f, 1.0f], right_rotation: [0.0f, 0.0f, 0.0f, 1.0f], scale: [1.0f, 1.0f, 1.0f], translation: [0.0f, 0.0f, 0.0f]}, view_range: 1.0f, width: 0.0f}},
{blockPos: [3, 3, 3], pos: [3.5d, 3.5d, 3.5d], nbt: {Air: 300s, FallDistance: 0.0f, Fire: 0s, Invulnerable: 0b, Motion: [0.0d, 0.0d, 0.0d], OnGround: 0b, PortalCooldown: 0, Pos: [126.5d, -57.5d, 56.5d], Rotation: [-90.0f, 0.0f], UUID: [I; 671334422, -268542345, -1362491514, -649716242], billboard: "fixed", glow_color_override: -1, height: 0.0f, id: "minecraft:item_display", interpolation_duration: 0, item: {Count: 1b, id: "computercraft:turtle_normal", tag: {ComputerId: 8, Fuel: 0, Items: [], On: 1b, RightUpgrade: "minecraft:diamond_pickaxe", RightUpgradeNbt: {Tag: {Damage: 0}}}}, item_display: "none", shadow_radius: 0.0f, shadow_strength: 1.0f, transformation: {left_rotation: [0.0f, 0.0f, 0.0f, 1.0f], right_rotation: [0.0f, 0.0f, 0.0f, 1.0f], scale: [1.0f, 1.0f, 1.0f], translation: [0.0f, 0.0f, 0.0f]}, view_range: 1.0f, width: 0.0f}},
{blockPos: [1, 1, 3], pos: [1.5d, 1.5d, 3.5d], nbt: {Air: 300s, FallDistance: 0.0f, Fire: 0s, Invulnerable: 0b, Motion: [0.0d, 0.0d, 0.0d], OnGround: 0b, PortalCooldown: 0, Pos: [126.5d, -57.5d, 56.5d], Rotation: [90.0f, 0.0f], UUID: [I; 625334450, -268647745, -1360971514, -649724242], billboard: "fixed", glow_color_override: -1, height: 0.0f, id: "minecraft:item_display", interpolation_duration: 0, item: {Count: 1b, id: "computercraft:turtle_normal", tag: {ComputerId: 8, Fuel: 0, Items: [], On: 1b, LeftUpgrade: "cctest:netherite_pickaxe", LeftUpgradeNbt: {Tag: {Damage: 0, Enchantments: [{id: "minecraft:efficiency", lvl: 5s}], RepairCost: 1}}}}, item_display: "none", shadow_radius: 0.0f, shadow_strength: 1.0f, transformation: {left_rotation: [0.0f, 0.0f, 0.0f, 1.0f], right_rotation: [0.0f, 0.0f, 0.0f, 1.0f], scale: [1.0f, 1.0f, 1.0f], translation: [0.0f, 0.0f, 0.0f]}, view_range: 1.0f, width: 0.0f}},
{blockPos: [1, 3, 3], pos: [1.5d, 3.5d, 3.5d], nbt: {Air: 300s, FallDistance: 0.0f, Fire: 0s, Invulnerable: 0b, Motion: [0.0d, 0.0d, 0.0d], OnGround: 0b, PortalCooldown: 0, Pos: [126.5d, -57.5d, 56.5d], Rotation: [90.0f, 0.0f], UUID: [I; 675334422, -268542245, -1362491514, -649755242], billboard: "fixed", glow_color_override: -1, height: 0.0f, id: "minecraft:item_display", interpolation_duration: 0, item: {Count: 1b, id: "computercraft:turtle_normal", tag: {ComputerId: 8, Fuel: 0, Items: [], display: {Name: '{"text":"Dinnerbone"}'}, On: 1b, LeftUpgrade: "cctest:netherite_pickaxe", LeftUpgradeNbt: {Tag: {Damage: 0, Enchantments: [{id: "minecraft:efficiency", lvl: 5s}], RepairCost: 1}}}}, item_display: "none", shadow_radius: 0.0f, shadow_strength: 1.0f, transformation: {left_rotation: [0.0f, 0.0f, 0.0f, 1.0f], right_rotation: [0.0f, 0.0f, 0.0f, 1.0f], scale: [1.0f, 1.0f, 1.0f], translation: [0.0f, 0.0f, 0.0f]}, view_range: 1.0f, width: 0.0f}}
],
palette: [
"minecraft:polished_andesite",
"minecraft:air"
]
}

View File

@ -6,40 +6,34 @@ package dan200.computercraft.core.computer;
import dan200.computercraft.api.lua.ILuaAPI; import dan200.computercraft.api.lua.ILuaAPI;
/** import javax.annotation.Nullable;
* A wrapper for {@link ILuaAPI}s which cleans up after a {@link ComputerSystem} when the computer is shutdown.
*/
final class ApiWrapper implements ILuaAPI {
private final ILuaAPI delegate;
private final ComputerSystem system;
ApiWrapper(ILuaAPI delegate, ComputerSystem system) { /**
this.delegate = delegate; * A wrapper for {@link ILuaAPI}s which optionally manages the lifecycle of a {@link ComputerSystem}.
*/
final class ApiWrapper {
private final ILuaAPI api;
private final @Nullable ComputerSystem system;
ApiWrapper(ILuaAPI api, @Nullable ComputerSystem system) {
this.api = api;
this.system = system; this.system = system;
} }
@Override
public String[] getNames() {
return delegate.getNames();
}
@Override
public void startup() { public void startup() {
delegate.startup(); api.startup();
} }
@Override
public void update() { public void update() {
delegate.update(); api.update();
} }
@Override
public void shutdown() { public void shutdown() {
delegate.shutdown(); api.shutdown();
system.unmountAll(); if (system != null) system.unmountAll();
} }
public ILuaAPI getDelegate() { public ILuaAPI api() {
return delegate; return api;
} }
} }

View File

@ -61,7 +61,7 @@ final class ComputerExecutor {
private final Computer computer; private final Computer computer;
private final ComputerEnvironment computerEnvironment; private final ComputerEnvironment computerEnvironment;
private final MetricsObserver metrics; private final MetricsObserver metrics;
private final List<ILuaAPI> apis = new ArrayList<>(); private final List<ApiWrapper> apis = new ArrayList<>();
private final ComputerThread scheduler; private final ComputerThread scheduler;
private final MethodSupplier<LuaMethod> luaMethods; private final MethodSupplier<LuaMethod> luaMethods;
final TimeoutState timeout; final TimeoutState timeout;
@ -177,12 +177,12 @@ final class ComputerExecutor {
var environment = computer.getEnvironment(); var environment = computer.getEnvironment();
// Add all default APIs to the loaded list. // Add all default APIs to the loaded list.
apis.add(new TermAPI(environment)); addApi(new TermAPI(environment));
apis.add(new RedstoneAPI(environment)); addApi(new RedstoneAPI(environment));
apis.add(new FSAPI(environment)); addApi(new FSAPI(environment));
apis.add(new PeripheralAPI(environment, context.peripheralMethods())); addApi(new PeripheralAPI(environment, context.peripheralMethods()));
apis.add(new OSAPI(environment)); addApi(new OSAPI(environment));
if (CoreConfig.httpEnabled) apis.add(new HTTPAPI(environment)); if (CoreConfig.httpEnabled) addApi(new HTTPAPI(environment));
// Load in the externally registered APIs. // Load in the externally registered APIs.
for (var factory : context.apiFactories()) { for (var factory : context.apiFactories()) {
@ -207,7 +207,7 @@ final class ComputerExecutor {
} }
void addApi(ILuaAPI api) { void addApi(ILuaAPI api) {
apis.add(api); apis.add(new ApiWrapper(api, null));
} }
/** /**
@ -385,7 +385,7 @@ final class ComputerExecutor {
try (var bios = biosStream) { try (var bios = biosStream) {
return luaFactory.create(new MachineEnvironment( return luaFactory.create(new MachineEnvironment(
new LuaContext(computer), metrics, timeout, new LuaContext(computer), metrics, timeout,
() -> apis.stream().map(api -> api instanceof ApiWrapper wrapper ? wrapper.getDelegate() : api).iterator(), () -> apis.stream().map(ApiWrapper::api).iterator(),
luaMethods, luaMethods,
computer.getGlobalEnvironment().getHostString() computer.getGlobalEnvironment().getHostString()
), bios); ), bios);

View File

@ -26,7 +26,7 @@ which program to run:
uses the @{shell.path|program path}. This is a colon separated list of uses the @{shell.path|program path}. This is a colon separated list of
directories, each of which is checked to see if it contains the program. directories, each of which is checked to see if it contains the program.
`list` or `list.lua` doesn't exist in `.` (the current directory), so she `list` or `list.lua` doesn't exist in `.` (the current directory), so the
shell now looks in `/rom/programs`, where `list.lua` can be found! shell now looks in `/rom/programs`, where `list.lua` can be found!
3. Finally, the shell reads the file and checks if the file starts with a 3. Finally, the shell reads the file and checks if the file starts with a

View File

@ -4,6 +4,7 @@
package dan200.computercraft.core; package dan200.computercraft.core;
import com.google.common.base.Splitter;
import dan200.computercraft.api.filesystem.WritableMount; import dan200.computercraft.api.filesystem.WritableMount;
import dan200.computercraft.api.lua.ILuaAPI; import dan200.computercraft.api.lua.ILuaAPI;
import dan200.computercraft.api.lua.LuaException; import dan200.computercraft.api.lua.LuaException;
@ -346,10 +347,10 @@ public class ComputerTestDelegate {
var details = (Map<?, ?>) entry.getValue(); var details = (Map<?, ?>) entry.getValue();
var def = (String) details.get("definition"); var def = (String) details.get("definition");
var parts = name.split("\0"); var parts = Splitter.on('\0').splitToList(name);
var builder = root; var builder = root;
for (var i = 0; i < parts.length - 1; i++) builder = builder.get(parts[i]); for (var i = 0; i < parts.size() - 1; i++) builder = builder.get(parts.get(i));
builder.runs(parts[parts.length - 1], def, () -> { builder.runs(parts.get(parts.size() - 1), def, () -> {
// Run it // Run it
lock.lockInterruptibly(); lock.lockInterruptibly();
try { try {

View File

@ -5,8 +5,7 @@
package dan200.computercraft.client; package dan200.computercraft.client;
import dan200.computercraft.api.ComputerCraftAPI; import dan200.computercraft.api.ComputerCraftAPI;
import dan200.computercraft.client.model.EmissiveComputerModel; import dan200.computercraft.client.model.CustomModelLoader;
import dan200.computercraft.client.model.turtle.TurtleModelLoader;
import dan200.computercraft.shared.ModRegistry; import dan200.computercraft.shared.ModRegistry;
import dan200.computercraft.shared.config.ConfigSpec; import dan200.computercraft.shared.config.ConfigSpec;
import dan200.computercraft.shared.network.client.ClientNetworkContext; import dan200.computercraft.shared.network.client.ClientNetworkContext;
@ -15,7 +14,7 @@ import dan200.computercraft.shared.platform.FabricConfigFile;
import dan200.computercraft.shared.platform.NetworkHandler; import dan200.computercraft.shared.platform.NetworkHandler;
import net.fabricmc.fabric.api.blockrenderlayer.v1.BlockRenderLayerMap; import net.fabricmc.fabric.api.blockrenderlayer.v1.BlockRenderLayerMap;
import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents; import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents;
import net.fabricmc.fabric.api.client.model.ModelLoadingRegistry; import net.fabricmc.fabric.api.client.model.loading.v1.PreparableModelLoadingPlugin;
import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking; import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking;
import net.fabricmc.fabric.api.client.rendering.v1.ColorProviderRegistry; import net.fabricmc.fabric.api.client.rendering.v1.ColorProviderRegistry;
import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderEvents; import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderEvents;
@ -40,9 +39,12 @@ public class ComputerCraftClient {
ClientRegistry.registerItemColours(ColorProviderRegistry.ITEM::register); ClientRegistry.registerItemColours(ColorProviderRegistry.ITEM::register);
ClientRegistry.registerMainThread(); ClientRegistry.registerMainThread();
ModelLoadingRegistry.INSTANCE.registerModelProvider((manager, out) -> ClientRegistry.registerExtraModels(out)); PreparableModelLoadingPlugin.register(CustomModelLoader::prepare, (state, context) -> {
ModelLoadingRegistry.INSTANCE.registerResourceProvider(loader -> (path, ctx) -> TurtleModelLoader.load(loader, path)); ClientRegistry.registerExtraModels(context::addModels);
ModelLoadingRegistry.INSTANCE.registerResourceProvider(loader -> (path, ctx) -> EmissiveComputerModel.load(loader, path)); context.resolveModel().register(ctx -> state.loadModel(ctx.id()));
context.modifyModelAfterBake().register((model, ctx) -> model == null ? null : state.wrapModel(ctx, model));
});
BlockRenderLayerMap.INSTANCE.putBlock(ModRegistry.Blocks.COMPUTER_NORMAL.get(), RenderType.cutout()); BlockRenderLayerMap.INSTANCE.putBlock(ModRegistry.Blocks.COMPUTER_NORMAL.get(), RenderType.cutout());
BlockRenderLayerMap.INSTANCE.putBlock(ModRegistry.Blocks.COMPUTER_COMMAND.get(), RenderType.cutout()); BlockRenderLayerMap.INSTANCE.putBlock(ModRegistry.Blocks.COMPUTER_COMMAND.get(), RenderType.cutout());
BlockRenderLayerMap.INSTANCE.putBlock(ModRegistry.Blocks.COMPUTER_ADVANCED.get(), RenderType.cutout()); BlockRenderLayerMap.INSTANCE.putBlock(ModRegistry.Blocks.COMPUTER_ADVANCED.get(), RenderType.cutout());

View File

@ -4,24 +4,33 @@
package dan200.computercraft.client.model; package dan200.computercraft.client.model;
import net.fabricmc.fabric.api.renderer.v1.model.FabricBakedModel;
import net.fabricmc.fabric.api.renderer.v1.model.ForwardingBakedModel;
import net.fabricmc.fabric.api.renderer.v1.render.RenderContext;
import net.minecraft.client.renderer.block.model.BakedQuad; import net.minecraft.client.renderer.block.model.BakedQuad;
import net.minecraft.client.resources.model.BakedModel; import net.minecraft.client.resources.model.BakedModel;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction; import net.minecraft.core.Direction;
import net.minecraft.util.RandomSource; import net.minecraft.util.RandomSource;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.BlockAndTintGetter;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import java.util.*; import java.util.*;
import java.util.function.Supplier;
import java.util.stream.Stream; import java.util.stream.Stream;
/** /**
* A {@link BakedModel} formed from two or more other models stitched together. * A {@link BakedModel} formed from two or more other models stitched together.
*/ */
public class CompositeBakedModel extends CustomBakedModel { public class CompositeBakedModel extends ForwardingBakedModel {
private final boolean isVanillaAdapter;
private final List<BakedModel> models; private final List<BakedModel> models;
public CompositeBakedModel(List<BakedModel> models) { public CompositeBakedModel(List<BakedModel> models) {
super(models.get(0)); wrapped = models.get(0);
isVanillaAdapter = models.stream().allMatch(FabricBakedModel::isVanillaAdapter);
this.models = models; this.models = models;
} }
@ -29,6 +38,11 @@ public class CompositeBakedModel extends CustomBakedModel {
return models.size() == 1 ? models.get(0) : new CompositeBakedModel(models); return models.size() == 1 ? models.get(0) : new CompositeBakedModel(models);
} }
@Override
public boolean isVanillaAdapter() {
return isVanillaAdapter;
}
@Override @Override
public List<BakedQuad> getQuads(@Nullable BlockState blockState, @Nullable Direction face, RandomSource rand) { public List<BakedQuad> getQuads(@Nullable BlockState blockState, @Nullable Direction face, RandomSource rand) {
@SuppressWarnings({ "unchecked", "rawtypes" }) @SuppressWarnings({ "unchecked", "rawtypes" })
@ -39,6 +53,16 @@ public class CompositeBakedModel extends CustomBakedModel {
return new ConcatListView(quads); return new ConcatListView(quads);
} }
@Override
public void emitBlockQuads(BlockAndTintGetter blockView, BlockState state, BlockPos pos, Supplier<RandomSource> randomSupplier, RenderContext context) {
for (var model : models) model.emitBlockQuads(blockView, state, pos, randomSupplier, context);
}
@Override
public void emitItemQuads(ItemStack stack, Supplier<RandomSource> randomSupplier, RenderContext context) {
for (var model : models) model.emitItemQuads(stack, randomSupplier, context);
}
private static final class ConcatListView extends AbstractList<BakedQuad> { private static final class ConcatListView extends AbstractList<BakedQuad> {
private final List<BakedQuad>[] quads; private final List<BakedQuad>[] quads;

View File

@ -1,42 +0,0 @@
// SPDX-FileCopyrightText: 2022 The CC: Tweaked Developers
//
// SPDX-License-Identifier: MPL-2.0
package dan200.computercraft.client.model;
import net.fabricmc.fabric.api.renderer.v1.model.ForwardingBakedModel;
import net.fabricmc.fabric.api.renderer.v1.render.RenderContext;
import net.minecraft.client.renderer.block.model.BakedQuad;
import net.minecraft.client.resources.model.BakedModel;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.util.RandomSource;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.BlockAndTintGetter;
import net.minecraft.world.level.block.state.BlockState;
import javax.annotation.Nullable;
import java.util.List;
import java.util.function.Supplier;
/**
* A subclass of {@link ForwardingBakedModel} which doesn't forward rendering.
*/
public abstract class CustomBakedModel extends ForwardingBakedModel {
public CustomBakedModel(BakedModel wrapped) {
this.wrapped = wrapped;
}
@Override
public abstract List<BakedQuad> getQuads(@Nullable BlockState blockState, @Nullable Direction face, RandomSource rand);
@Override
public final void emitBlockQuads(BlockAndTintGetter blockView, BlockState state, BlockPos pos, Supplier<RandomSource> randomSupplier, RenderContext context) {
context.bakedModelConsumer().accept(this);
}
@Override
public final void emitItemQuads(ItemStack stack, Supplier<RandomSource> randomSupplier, RenderContext context) {
context.bakedModelConsumer().accept(this);
}
}

View File

@ -0,0 +1,127 @@
// SPDX-FileCopyrightText: 2023 The CC: Tweaked Developers
//
// SPDX-License-Identifier: MPL-2.0
package dan200.computercraft.client.model;
import com.google.gson.JsonObject;
import com.google.gson.JsonParseException;
import dan200.computercraft.api.ComputerCraftAPI;
import dan200.computercraft.client.model.turtle.UnbakedTurtleModel;
import dan200.computercraft.mixin.client.BlockModelAccessor;
import net.fabricmc.fabric.api.client.model.loading.v1.ModelModifier;
import net.fabricmc.fabric.api.client.model.loading.v1.PreparableModelLoadingPlugin;
import net.minecraft.client.renderer.block.model.BlockModel;
import net.minecraft.client.resources.model.BakedModel;
import net.minecraft.client.resources.model.UnbakedModel;
import net.minecraft.resources.FileToIdConverter;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.server.packs.resources.Resource;
import net.minecraft.server.packs.resources.ResourceManager;
import net.minecraft.util.GsonHelper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.annotation.Nullable;
import java.io.IOException;
import java.io.Reader;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.Executor;
/**
* Provides custom model loading for various CC models.
* <p>
* This is used from a {@link PreparableModelLoadingPlugin}, which {@linkplain #prepare(ResourceManager, Executor) loads
* data from disk} in parallel with other loader plugins, and then hooks into the model loading pipeline
* ({@link #loadModel(ResourceLocation)}, {@link #wrapModel(ModelModifier.AfterBake.Context, BakedModel)}).
*
* @see EmissiveBakedModel
* @see UnbakedTurtleModel
*/
public final class CustomModelLoader {
private static final Logger LOG = LoggerFactory.getLogger(CustomModelLoader.class);
private static final FileToIdConverter converter = FileToIdConverter.json("models");
private final Map<ResourceLocation, UnbakedModel> models = new HashMap<>();
private final Map<ResourceLocation, String> emissiveModels = new HashMap<>();
private CustomModelLoader() {
}
public static CompletableFuture<CustomModelLoader> prepare(ResourceManager resources, Executor executor) {
return CompletableFuture.supplyAsync(() -> {
var loader = new CustomModelLoader();
for (var resource : resources.listResources("models", x -> x.getNamespace().equals(ComputerCraftAPI.MOD_ID) && x.getPath().endsWith(".json")).entrySet()) {
loader.loadModel(resource.getKey(), resource.getValue());
}
return loader;
}, executor);
}
private void loadModel(ResourceLocation path, Resource resource) {
var id = converter.fileToId(path);
try {
JsonObject model;
try (Reader reader = resource.openAsReader()) {
model = GsonHelper.parse(reader).getAsJsonObject();
}
var loader = GsonHelper.getAsString(model, "loader", null);
if (loader != null) {
var unbaked = switch (loader) {
case ComputerCraftAPI.MOD_ID + ":turtle" -> UnbakedTurtleModel.parse(model);
default -> throw new JsonParseException("Unknown model loader " + loader);
};
models.put(id, unbaked);
}
var emissive = GsonHelper.getAsString(model, "computercraft:emissive_texture", null);
if (emissive != null) emissiveModels.put(id, emissive);
} catch (IllegalArgumentException | IOException | JsonParseException e) {
LOG.error("Couldn't parse model file {} from {}", id, path, e);
}
}
/**
* Load a custom model. This searches for CC models with a custom {@code loader} field.
*
* @param path The path of the model to load.
* @return The unbaked model that has been loaded, or {@code null} if the model should be loaded as a vanilla model.
*/
public @Nullable UnbakedModel loadModel(ResourceLocation path) {
return path.getNamespace().equals(ComputerCraftAPI.MOD_ID) ? models.get(path) : null;
}
/**
* Wrap a baked model.
* <p>
* This just finds models which specify an emissive texture ({@code computercraft:emissive_texture} in the JSON) and
* wraps them in a {@link EmissiveBakedModel}.
*
* @param ctx The current model loading context.
* @param baked The baked model to wrap.
* @return The wrapped model.
*/
public BakedModel wrapModel(ModelModifier.AfterBake.Context ctx, BakedModel baked) {
if (!ctx.id().getNamespace().equals(ComputerCraftAPI.MOD_ID)) return baked;
if (!(ctx.sourceModel() instanceof BlockModel model)) return baked;
var emissive = getEmissive(ctx.id(), model);
return emissive == null ? baked : EmissiveBakedModel.wrap(baked, ctx.textureGetter().apply(model.getMaterial(emissive)));
}
private @Nullable String getEmissive(ResourceLocation id, BlockModel model) {
while (true) {
var emissive = emissiveModels.get(id);
if (emissive != null) return emissive;
id = ((BlockModelAccessor) model).computercraft$getParentLocation();
model = ((BlockModelAccessor) model).computercraft$getParent();
if (id == null || model == null) return null;
}
}
}

View File

@ -0,0 +1,84 @@
// SPDX-FileCopyrightText: 2023 The CC: Tweaked Developers
//
// SPDX-License-Identifier: MPL-2.0
package dan200.computercraft.client.model;
import net.fabricmc.fabric.api.renderer.v1.RendererAccess;
import net.fabricmc.fabric.api.renderer.v1.material.RenderMaterial;
import net.fabricmc.fabric.api.renderer.v1.model.ForwardingBakedModel;
import net.fabricmc.fabric.api.renderer.v1.model.ModelHelper;
import net.fabricmc.fabric.api.renderer.v1.render.RenderContext;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.client.resources.model.BakedModel;
import net.minecraft.core.BlockPos;
import net.minecraft.util.RandomSource;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.BlockAndTintGetter;
import net.minecraft.world.level.block.state.BlockState;
import javax.annotation.Nullable;
import java.util.function.Supplier;
/**
* Wraps an arbitrary {@link BakedModel} to render a single texture as emissive.
* <p>
* While Fabric has a quite advanced rendering extension API (including support for custom materials), but unlike Forge
* it doesn't expose this in the model JSON (though externals mods like <a href="https://github.com/vram-guild/json-model-extensions/">JMX</a>
* do handle this).
* <p>
* Instead, we support emissive quads by injecting a {@linkplain CustomModelLoader custom model loader} which wraps the
* baked model in a {@link EmissiveBakedModel}, which renders specific quads as emissive.
*/
public final class EmissiveBakedModel extends ForwardingBakedModel {
private final TextureAtlasSprite emissiveTexture;
private final RenderMaterial defaultMaterial;
private final RenderMaterial emissiveMaterial;
private EmissiveBakedModel(BakedModel wrapped, TextureAtlasSprite emissiveTexture, RenderMaterial defaultMaterial, RenderMaterial emissiveMaterial) {
this.wrapped = wrapped;
this.emissiveTexture = emissiveTexture;
this.defaultMaterial = defaultMaterial;
this.emissiveMaterial = emissiveMaterial;
}
public static BakedModel wrap(BakedModel model, TextureAtlasSprite emissiveTexture) {
var renderer = RendererAccess.INSTANCE.getRenderer();
return renderer == null ? model : new EmissiveBakedModel(
model,
emissiveTexture,
renderer.materialFinder().find(),
renderer.materialFinder().emissive(true).find()
);
}
@Override
public boolean isVanillaAdapter() {
return false;
}
@Override
public void emitBlockQuads(BlockAndTintGetter blockView, BlockState state, BlockPos pos, Supplier<RandomSource> randomSupplier, RenderContext context) {
emitQuads(context, state, randomSupplier.get());
}
@Override
public void emitItemQuads(ItemStack stack, Supplier<RandomSource> randomSupplier, RenderContext context) {
emitQuads(context, null, randomSupplier.get());
}
private void emitQuads(RenderContext context, @Nullable BlockState state, RandomSource random) {
var emitter = context.getEmitter();
for (var faceIdx = 0; faceIdx <= ModelHelper.NULL_FACE_ID; faceIdx++) {
var cullFace = ModelHelper.faceFromIndex(faceIdx);
var quads = wrapped.getQuads(state, cullFace, random);
var count = quads.size();
for (var i = 0; i < count; i++) {
final var q = quads.get(i);
emitter.fromVanilla(q, q.getSprite() == emissiveTexture ? emissiveMaterial : defaultMaterial, cullFace);
emitter.emit();
}
}
}
}

View File

@ -1,172 +0,0 @@
// SPDX-FileCopyrightText: 2023 The CC: Tweaked Developers
//
// SPDX-License-Identifier: MPL-2.0
package dan200.computercraft.client.model;
import com.google.gson.JsonObject;
import com.mojang.datafixers.util.Either;
import dan200.computercraft.api.ComputerCraftAPI;
import net.fabricmc.fabric.api.client.model.ModelProviderException;
import net.fabricmc.fabric.api.client.model.ModelResourceProvider;
import net.fabricmc.fabric.api.renderer.v1.RendererAccess;
import net.fabricmc.fabric.api.renderer.v1.material.RenderMaterial;
import net.fabricmc.fabric.api.renderer.v1.model.FabricBakedModel;
import net.fabricmc.fabric.api.renderer.v1.model.ForwardingBakedModel;
import net.fabricmc.fabric.api.renderer.v1.model.ModelHelper;
import net.fabricmc.fabric.api.renderer.v1.render.RenderContext;
import net.minecraft.client.renderer.block.model.BlockModel;
import net.minecraft.client.renderer.block.model.ItemTransforms;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.client.resources.model.*;
import net.minecraft.core.BlockPos;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.server.packs.resources.ResourceManager;
import net.minecraft.util.GsonHelper;
import net.minecraft.util.RandomSource;
import net.minecraft.world.inventory.InventoryMenu;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.BlockAndTintGetter;
import net.minecraft.world.level.block.state.BlockState;
import javax.annotation.Nullable;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.function.Function;
import java.util.function.Supplier;
/**
* Wraps a computer's {@link BlockModel}/{@link BakedModel} to render the computer's cursor as an emissive quad.
* <p>
* While Fabric has a quite advanced rendering extension API (including support for custom materials), but unlike Forge
* it doesn't expose this in the model JSON (though externals mods like <a href="https://github.com/vram-guild/json-model-extensions/">JMX</a>
* do handle this).
* <p>
* Instead, we support emissive quads by injecting a custom {@linkplain ModelResourceProvider model loader/provider}
* which targets a hard-coded list of computer models, and wraps the returned model in a custom
* {@linkplain FabricBakedModel} implementation which renders specific quads as emissive.
* <p>
* See also the <code>assets/computercraft/models/block/computer_on.json</code> model, which is the base for all
* emissive computer models.
*/
public final class EmissiveComputerModel {
private static final Set<String> MODELS = Set.of(
"item/computer_advanced",
"block/computer_advanced_on",
"block/computer_advanced_blinking",
"item/computer_command",
"block/computer_command_on",
"block/computer_command_blinking",
"item/computer_normal",
"block/computer_normal_on",
"block/computer_normal_blinking"
);
private EmissiveComputerModel() {
}
public static @Nullable UnbakedModel load(ResourceManager resources, ResourceLocation path) throws ModelProviderException {
if (!path.getNamespace().equals(ComputerCraftAPI.MOD_ID) || !MODELS.contains(path.getPath())) return null;
JsonObject json;
try (var reader = resources.openAsReader(new ResourceLocation(path.getNamespace(), "models/" + path.getPath() + ".json"))) {
json = GsonHelper.parse(reader).getAsJsonObject();
} catch (IOException e) {
throw new ModelProviderException("Failed loading model " + path, e);
}
// Parse a subset of the model JSON
var parent = new ResourceLocation(GsonHelper.getAsString(json, "parent"));
Map<String, Either<Material, String>> textures = new HashMap<>();
if (json.has("textures")) {
var jsonObject = GsonHelper.getAsJsonObject(json, "textures");
for (var entry : jsonObject.entrySet()) {
var texture = entry.getValue().getAsString();
textures.put(entry.getKey(), texture.startsWith("#")
? Either.right(texture.substring(1))
: Either.left(new Material(InventoryMenu.BLOCK_ATLAS, new ResourceLocation(texture)))
);
}
}
return new Unbaked(parent, textures);
}
/**
* An {@link UnbakedModel} which wraps the returned model using {@link Baked}.
* <p>
* This subclasses {@link BlockModel} to allow using these models as a parent of other models.
*/
private static final class Unbaked extends BlockModel {
Unbaked(ResourceLocation parent, Map<String, Either<Material, String>> materials) {
super(parent, List.of(), materials, null, null, ItemTransforms.NO_TRANSFORMS, List.of());
}
@Override
public BakedModel bake(ModelBaker baker, Function<Material, TextureAtlasSprite> spriteGetter, ModelState state, ResourceLocation location) {
var baked = super.bake(baker, spriteGetter, state, location);
if (!hasTexture("cursor")) return baked;
var render = RendererAccess.INSTANCE.getRenderer();
if (render == null) return baked;
return new Baked(
baked,
spriteGetter.apply(getMaterial("cursor")),
render.materialFinder().find(),
render.materialFinder().emissive(0, true).find()
);
}
}
/**
* A {@link FabricBakedModel} which renders quads using the {@code "cursor"} texture as emissive.
*/
private static final class Baked extends ForwardingBakedModel {
private final TextureAtlasSprite cursor;
private final RenderMaterial defaultMaterial;
private final RenderMaterial emissiveMaterial;
Baked(BakedModel wrapped, TextureAtlasSprite cursor, RenderMaterial defaultMaterial, RenderMaterial emissiveMaterial) {
this.wrapped = wrapped;
this.cursor = cursor;
this.defaultMaterial = defaultMaterial;
this.emissiveMaterial = emissiveMaterial;
}
@Override
public boolean isVanillaAdapter() {
return false;
}
@Override
public void emitBlockQuads(BlockAndTintGetter blockView, BlockState state, BlockPos pos, Supplier<RandomSource> randomSupplier, RenderContext context) {
emitQuads(context, state, randomSupplier.get());
}
@Override
public void emitItemQuads(ItemStack stack, Supplier<RandomSource> randomSupplier, RenderContext context) {
emitQuads(context, null, randomSupplier.get());
}
private void emitQuads(RenderContext context, @Nullable BlockState state, RandomSource random) {
var emitter = context.getEmitter();
for (var faceIdx = 0; faceIdx <= ModelHelper.NULL_FACE_ID; faceIdx++) {
var cullFace = ModelHelper.faceFromIndex(faceIdx);
var quads = wrapped.getQuads(state, cullFace, random);
var count = quads.size();
for (var i = 0; i < count; i++) {
final var q = quads.get(i);
emitter.fromVanilla(q, q.getSprite() == cursor ? emissiveMaterial : defaultMaterial, cullFace);
emitter.emit();
}
}
}
}
}

View File

@ -0,0 +1,49 @@
// SPDX-FileCopyrightText: 2023 The CC: Tweaked Developers
//
// SPDX-License-Identifier: MPL-2.0
package dan200.computercraft.client.model;
import com.mojang.math.Transformation;
import dan200.computercraft.client.model.turtle.ModelTransformer;
import net.fabricmc.fabric.api.renderer.v1.mesh.MutableQuadView;
import net.fabricmc.fabric.api.renderer.v1.render.RenderContext;
import net.minecraft.core.Direction;
import org.joml.Vector3f;
/**
* Extends {@link ModelTransformer} to also work as a {@link RenderContext.QuadTransform}.
*/
public class FabricModelTransformer extends ModelTransformer implements RenderContext.QuadTransform {
public FabricModelTransformer(Transformation transformation) {
super(transformation);
}
@Override
public boolean transform(MutableQuadView quad) {
var vec3 = new Vector3f();
for (var i = 0; i < 4; i++) {
quad.copyPos(i, vec3);
transformation.transformPosition(vec3);
quad.pos(i, vec3);
}
if (invert) {
swapQuads(quad, 0, 3);
swapQuads(quad, 1, 2);
}
var face = quad.nominalFace();
if (face != null) quad.nominalFace(Direction.rotate(transformation, face));
return true;
}
private static void swapQuads(MutableQuadView quad, int a, int b) {
float aX = quad.x(a), aY = quad.y(a), aZ = quad.z(a), aU = quad.u(a), aV = quad.v(a);
float bX = quad.x(b), bY = quad.y(b), bZ = quad.z(b), bU = quad.u(b), bV = quad.v(b);
quad.pos(b, aX, aY, aZ).uv(b, aU, aV);
quad.pos(a, bX, bY, bZ).uv(a, bU, bV);
}
}

View File

@ -0,0 +1,79 @@
// SPDX-FileCopyrightText: 2023 The CC: Tweaked Developers
//
// SPDX-License-Identifier: MPL-2.0
package dan200.computercraft.client.model;
import dan200.computercraft.core.util.Nullability;
import net.fabricmc.fabric.api.renderer.v1.Renderer;
import net.fabricmc.fabric.api.renderer.v1.RendererAccess;
import net.fabricmc.fabric.api.renderer.v1.material.RenderMaterial;
import net.fabricmc.fabric.api.renderer.v1.mesh.MutableQuadView;
import net.fabricmc.fabric.api.renderer.v1.model.ForwardingBakedModel;
import net.fabricmc.fabric.api.renderer.v1.render.RenderContext;
import net.fabricmc.fabric.api.util.TriState;
import net.minecraft.client.resources.model.BakedModel;
import net.minecraft.core.BlockPos;
import net.minecraft.util.RandomSource;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.BlockAndTintGetter;
import net.minecraft.world.level.block.state.BlockState;
import javax.annotation.Nullable;
import java.util.function.Supplier;
/**
* A model wrapper which applies a {@link RenderMaterial#glint() glint}/foil to the original model.
*/
public final class FoiledModel extends ForwardingBakedModel implements RenderContext.QuadTransform {
private final @Nullable Renderer renderer = RendererAccess.INSTANCE.getRenderer();
private @Nullable RenderMaterial lastMaterial, lastFoiledMaterial;
public FoiledModel(BakedModel model) {
wrapped = model;
}
@Override
public boolean isVanillaAdapter() {
return false;
}
@Override
public void emitBlockQuads(BlockAndTintGetter blockView, BlockState state, BlockPos pos, Supplier<RandomSource> randomSupplier, RenderContext context) {
context.pushTransform(this);
super.emitBlockQuads(blockView, state, pos, randomSupplier, context);
context.popTransform();
}
@Override
public void emitItemQuads(ItemStack stack, Supplier<RandomSource> randomSupplier, RenderContext context) {
context.pushTransform(this);
super.emitItemQuads(stack, randomSupplier, context);
context.popTransform();
}
@Override
public boolean equals(Object obj) {
return this == obj || (obj instanceof FoiledModel other && wrapped.equals(other.wrapped));
}
@Override
public int hashCode() {
return wrapped.hashCode() ^ 1;
}
@Override
public boolean transform(MutableQuadView quad) {
if (renderer == null) return true;
var material = quad.material();
if (material == lastMaterial) {
quad.material(Nullability.assertNonNull(lastFoiledMaterial));
} else {
lastMaterial = material;
quad.material(lastFoiledMaterial = renderer.materialFinder().copyFrom(material).glint(TriState.TRUE).find());
}
return true;
}
}

View File

@ -6,30 +6,49 @@ package dan200.computercraft.client.model;
import com.mojang.math.Transformation; import com.mojang.math.Transformation;
import dan200.computercraft.client.model.turtle.ModelTransformer; import dan200.computercraft.client.model.turtle.ModelTransformer;
import net.fabricmc.fabric.api.renderer.v1.model.ForwardingBakedModel;
import net.fabricmc.fabric.api.renderer.v1.render.RenderContext;
import net.minecraft.client.renderer.block.model.BakedQuad; import net.minecraft.client.renderer.block.model.BakedQuad;
import net.minecraft.client.resources.model.BakedModel; import net.minecraft.client.resources.model.BakedModel;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction; import net.minecraft.core.Direction;
import net.minecraft.util.RandomSource; import net.minecraft.util.RandomSource;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.BlockAndTintGetter;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import java.util.List; import java.util.List;
import java.util.function.Supplier;
/** /**
* A {@link BakedModel} which applies a transformation matrix to its underlying quads. * A {@link BakedModel} which applies a transformation matrix to its underlying quads.
* *
* @see ModelTransformer * @see ModelTransformer
*/ */
public class TransformedBakedModel extends CustomBakedModel { public class TransformedBakedModel extends ForwardingBakedModel {
private final ModelTransformer transformation; private final FabricModelTransformer transformation;
public TransformedBakedModel(BakedModel model, Transformation transformation) { public TransformedBakedModel(BakedModel model, Transformation transformation) {
super(model); wrapped = model;
this.transformation = new ModelTransformer(transformation); this.transformation = new FabricModelTransformer(transformation);
} }
@Override @Override
public List<BakedQuad> getQuads(@Nullable BlockState blockState, @Nullable Direction face, RandomSource rand) { public List<BakedQuad> getQuads(@Nullable BlockState blockState, @Nullable Direction face, RandomSource rand) {
return transformation.transform(wrapped.getQuads(blockState, face, rand)); return transformation.transform(wrapped.getQuads(blockState, face, rand));
} }
@Override
public final void emitBlockQuads(BlockAndTintGetter blockView, BlockState state, BlockPos pos, Supplier<RandomSource> randomSupplier, RenderContext context) {
super.emitBlockQuads(blockView, state, pos, randomSupplier, context);
context.popTransform();
}
@Override
public final void emitItemQuads(ItemStack stack, Supplier<RandomSource> randomSupplier, RenderContext context) {
context.pushTransform(transformation);
super.emitItemQuads(stack, randomSupplier, context);
context.popTransform();
}
} }

View File

@ -1,82 +0,0 @@
// SPDX-FileCopyrightText: 2022 The CC: Tweaked Developers
//
// SPDX-License-Identifier: MPL-2.0
package dan200.computercraft.client.model.turtle;
import dan200.computercraft.api.ComputerCraftAPI;
import net.fabricmc.fabric.api.client.model.ModelProviderException;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.client.resources.model.*;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.server.packs.resources.ResourceManager;
import net.minecraft.util.GsonHelper;
import javax.annotation.Nullable;
import java.io.IOException;
import java.util.Collection;
import java.util.List;
import java.util.Objects;
import java.util.function.Function;
/**
* A model "loader" (the concept doesn't quite exist in the same way as it does on Forge) for turtle item models.
* <p>
* This reads in the associated model file (typically {@code computercraft:block/turtle_xxx}) and wraps it in a
* {@link TurtleModel}.
*/
public final class TurtleModelLoader {
private static final ResourceLocation COLOUR_TURTLE_MODEL = new ResourceLocation(ComputerCraftAPI.MOD_ID, "block/turtle_colour");
private TurtleModelLoader() {
}
public static @Nullable UnbakedModel load(ResourceManager resources, ResourceLocation path) throws ModelProviderException {
if (!path.getNamespace().equals(ComputerCraftAPI.MOD_ID)) return null;
if (!path.getPath().equals("item/turtle_normal") && !path.getPath().equals("item/turtle_advanced")) {
return null;
}
try (var reader = resources.openAsReader(new ResourceLocation(path.getNamespace(), "models/" + path.getPath() + ".json"))) {
var modelContents = GsonHelper.parse(reader).getAsJsonObject();
var loader = GsonHelper.getAsString(modelContents, "loader", null);
if (!Objects.equals(loader, ComputerCraftAPI.MOD_ID + ":turtle")) return null;
var model = new ResourceLocation(GsonHelper.getAsString(modelContents, "model"));
return new Unbaked(model);
} catch (IOException e) {
throw new ModelProviderException("Failed loading model " + path, e);
}
}
public static final class Unbaked implements UnbakedModel {
private final ResourceLocation model;
private Unbaked(ResourceLocation model) {
this.model = model;
}
@Override
public Collection<ResourceLocation> getDependencies() {
return List.of(model, COLOUR_TURTLE_MODEL);
}
@Override
public void resolveParents(Function<ResourceLocation, UnbakedModel> function) {
function.apply(model).resolveParents(function);
function.apply(COLOUR_TURTLE_MODEL).resolveParents(function);
}
@Override
public BakedModel bake(ModelBaker bakery, Function<Material, TextureAtlasSprite> spriteGetter, ModelState transform, ResourceLocation location) {
var mainModel = bakery.bake(model, transform);
if (mainModel == null) throw new NullPointerException(model + " failed to bake");
var colourModel = bakery.bake(COLOUR_TURTLE_MODEL, transform);
if (colourModel == null) throw new NullPointerException(COLOUR_TURTLE_MODEL + " failed to bake");
return new TurtleModel(mainModel, colourModel);
}
}
}

View File

@ -0,0 +1,59 @@
// SPDX-FileCopyrightText: 2022 The CC: Tweaked Developers
//
// SPDX-License-Identifier: MPL-2.0
package dan200.computercraft.client.model.turtle;
import com.google.gson.JsonObject;
import dan200.computercraft.api.ComputerCraftAPI;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.client.resources.model.*;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.util.GsonHelper;
import java.util.Collection;
import java.util.List;
import java.util.function.Function;
/**
* A {@link UnbakedModel} for {@link TurtleModel}s.
* <p>
* This reads in the associated model file (typically {@code computercraft:block/turtle_xxx}) and wraps it in a
* {@link TurtleModel}.
*/
public final class UnbakedTurtleModel implements UnbakedModel {
private static final ResourceLocation COLOUR_TURTLE_MODEL = new ResourceLocation(ComputerCraftAPI.MOD_ID, "block/turtle_colour");
private final ResourceLocation model;
private UnbakedTurtleModel(ResourceLocation model) {
this.model = model;
}
public static UnbakedModel parse(JsonObject json) {
var model = new ResourceLocation(GsonHelper.getAsString(json, "model"));
return new UnbakedTurtleModel(model);
}
@Override
public Collection<ResourceLocation> getDependencies() {
return List.of(model, COLOUR_TURTLE_MODEL);
}
@Override
public void resolveParents(Function<ResourceLocation, UnbakedModel> function) {
function.apply(model).resolveParents(function);
function.apply(COLOUR_TURTLE_MODEL).resolveParents(function);
}
@Override
public BakedModel bake(ModelBaker bakery, Function<Material, TextureAtlasSprite> spriteGetter, ModelState transform, ResourceLocation location) {
var mainModel = bakery.bake(model, transform);
if (mainModel == null) throw new NullPointerException(model + " failed to bake");
var colourModel = bakery.bake(COLOUR_TURTLE_MODEL, transform);
if (colourModel == null) throw new NullPointerException(COLOUR_TURTLE_MODEL + " failed to bake");
return new TurtleModel(mainModel, colourModel);
}
}

View File

@ -5,17 +5,28 @@
package dan200.computercraft.client.platform; package dan200.computercraft.client.platform;
import com.google.auto.service.AutoService; import com.google.auto.service.AutoService;
import com.mojang.blaze3d.vertex.PoseStack;
import dan200.computercraft.client.model.FoiledModel;
import dan200.computercraft.client.render.ModelRenderer;
import dan200.computercraft.shared.network.NetworkMessage; import dan200.computercraft.shared.network.NetworkMessage;
import dan200.computercraft.shared.network.server.ServerNetworkContext; import dan200.computercraft.shared.network.server.ServerNetworkContext;
import dan200.computercraft.shared.platform.NetworkHandler; import dan200.computercraft.shared.platform.NetworkHandler;
import net.fabricmc.fabric.api.client.model.BakedModelManagerHelper; import net.fabricmc.fabric.api.renderer.v1.model.ModelHelper;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.Sheets;
import net.minecraft.client.renderer.entity.ItemRenderer;
import net.minecraft.client.resources.model.BakedModel; import net.minecraft.client.resources.model.BakedModel;
import net.minecraft.client.resources.model.ModelManager; import net.minecraft.client.resources.model.ModelManager;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import net.minecraft.util.RandomSource;
import javax.annotation.Nullable;
@AutoService(dan200.computercraft.impl.client.ClientPlatformHelper.class) @AutoService(dan200.computercraft.impl.client.ClientPlatformHelper.class)
public class ClientPlatformHelperImpl implements ClientPlatformHelper { public class ClientPlatformHelperImpl implements ClientPlatformHelper {
private static final RandomSource random = RandomSource.create(0);
@Override @Override
public void sendToServer(NetworkMessage<ServerNetworkContext> message) { public void sendToServer(NetworkMessage<ServerNetworkContext> message) {
Minecraft.getInstance().player.connection.send(NetworkHandler.encodeServer(message)); Minecraft.getInstance().player.connection.send(NetworkHandler.encodeServer(message));
@ -23,7 +34,25 @@ public class ClientPlatformHelperImpl implements ClientPlatformHelper {
@Override @Override
public BakedModel getModel(ModelManager manager, ResourceLocation location) { public BakedModel getModel(ModelManager manager, ResourceLocation location) {
var model = BakedModelManagerHelper.getModel(manager, location); var model = manager.getModel(location);
return model == null ? manager.getMissingModel() : model; return model == null ? manager.getMissingModel() : model;
} }
@Override
public BakedModel createdFoiledModel(BakedModel model) {
return new FoiledModel(model);
}
@Override
public void renderBakedModel(PoseStack transform, MultiBufferSource buffers, BakedModel model, int lightmapCoord, int overlayLight, @Nullable int[] tints) {
// Unfortunately we can't call Fabric's emitItemQuads here, as there's no way to obtain a RenderContext via the
// API. Instead, we special case our FoiledModel, and just render everything else normally.
var buffer = ItemRenderer.getFoilBuffer(buffers, Sheets.translucentCullBlockSheet(), true, model instanceof FoiledModel);
for (var faceIdx = 0; faceIdx <= ModelHelper.NULL_FACE_ID; faceIdx++) {
var face = ModelHelper.faceFromIndex(faceIdx);
random.setSeed(42);
ModelRenderer.renderQuads(transform, buffer, model.getQuads(null, face, random), lightmapCoord, overlayLight, tints);
}
}
} }

View File

@ -0,0 +1,23 @@
// SPDX-FileCopyrightText: 2023 The CC: Tweaked Developers
//
// SPDX-License-Identifier: MPL-2.0
package dan200.computercraft.mixin.client;
import net.minecraft.client.renderer.block.model.BlockModel;
import net.minecraft.resources.ResourceLocation;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Accessor;
import javax.annotation.Nullable;
@Mixin(BlockModel.class)
public interface BlockModelAccessor {
@Accessor("parentLocation")
@Nullable
ResourceLocation computercraft$getParentLocation();
@Accessor("parent")
@Nullable
BlockModel computercraft$getParent();
}

View File

@ -7,6 +7,7 @@
"defaultRequire": 1 "defaultRequire": 1
}, },
"client": [ "client": [
"BlockModelAccessor",
"BlockRenderDispatcherMixin", "BlockRenderDispatcherMixin",
"DebugScreenOverlayMixin", "DebugScreenOverlayMixin",
"GameRendererMixin", "GameRendererMixin",

View File

@ -41,9 +41,6 @@
"commands.computercraft.help.synopsis": "Provide help for a specific command", "commands.computercraft.help.synopsis": "Provide help for a specific command",
"commands.computercraft.queue.desc": "Send a computer_command event to a command computer, passing through the additional arguments. This is mostly designed for map makers, acting as a more computer-friendly version of /trigger. Any player can run the command, which would most likely be done through a text component's click event.", "commands.computercraft.queue.desc": "Send a computer_command event to a command computer, passing through the additional arguments. This is mostly designed for map makers, acting as a more computer-friendly version of /trigger. Any player can run the command, which would most likely be done through a text component's click event.",
"commands.computercraft.queue.synopsis": "Send a computer_command event to a command computer", "commands.computercraft.queue.synopsis": "Send a computer_command event to a command computer",
"commands.computercraft.reload.desc": "Reload the ComputerCraft config file",
"commands.computercraft.reload.done": "Reloaded config",
"commands.computercraft.reload.synopsis": "Reload the ComputerCraft config file",
"commands.computercraft.shutdown.desc": "Shutdown the listed computers or all if none are specified. You can specify the computer's instance id (e.g. 123), computer id (e.g #123) or label (e.g. \"@My Computer\").", "commands.computercraft.shutdown.desc": "Shutdown the listed computers or all if none are specified. You can specify the computer's instance id (e.g. 123), computer id (e.g #123) or label (e.g. \"@My Computer\").",
"commands.computercraft.shutdown.done": "Shutdown %s/%s computers", "commands.computercraft.shutdown.done": "Shutdown %s/%s computers",
"commands.computercraft.shutdown.synopsis": "Shutdown computers remotely.", "commands.computercraft.shutdown.synopsis": "Shutdown computers remotely.",

View File

@ -4,6 +4,9 @@
"group": "computercraft:turtle_advanced", "group": "computercraft:turtle_advanced",
"key": {"#": {"item": "minecraft:diamond_axe"}, "T": {"item": "computercraft:turtle_advanced"}}, "key": {"#": {"item": "minecraft:diamond_axe"}, "T": {"item": "computercraft:turtle_advanced"}},
"pattern": ["#T"], "pattern": ["#T"],
"result": {"item": "computercraft:turtle_advanced", "nbt": "{RightUpgrade:\"minecraft:diamond_axe\"}"}, "result": {
"item": "computercraft:turtle_advanced",
"nbt": "{RightUpgrade:\"minecraft:diamond_axe\",RightUpgradeNbt:{Tag:{Damage:0}}}"
},
"show_notification": true "show_notification": true
} }

View File

@ -4,6 +4,9 @@
"group": "computercraft:turtle_advanced", "group": "computercraft:turtle_advanced",
"key": {"#": {"item": "minecraft:diamond_hoe"}, "T": {"item": "computercraft:turtle_advanced"}}, "key": {"#": {"item": "minecraft:diamond_hoe"}, "T": {"item": "computercraft:turtle_advanced"}},
"pattern": ["#T"], "pattern": ["#T"],
"result": {"item": "computercraft:turtle_advanced", "nbt": "{RightUpgrade:\"minecraft:diamond_hoe\"}"}, "result": {
"item": "computercraft:turtle_advanced",
"nbt": "{RightUpgrade:\"minecraft:diamond_hoe\",RightUpgradeNbt:{Tag:{Damage:0}}}"
},
"show_notification": true "show_notification": true
} }

View File

@ -4,6 +4,9 @@
"group": "computercraft:turtle_advanced", "group": "computercraft:turtle_advanced",
"key": {"#": {"item": "minecraft:diamond_pickaxe"}, "T": {"item": "computercraft:turtle_advanced"}}, "key": {"#": {"item": "minecraft:diamond_pickaxe"}, "T": {"item": "computercraft:turtle_advanced"}},
"pattern": ["#T"], "pattern": ["#T"],
"result": {"item": "computercraft:turtle_advanced", "nbt": "{RightUpgrade:\"minecraft:diamond_pickaxe\"}"}, "result": {
"item": "computercraft:turtle_advanced",
"nbt": "{RightUpgrade:\"minecraft:diamond_pickaxe\",RightUpgradeNbt:{Tag:{Damage:0}}}"
},
"show_notification": true "show_notification": true
} }

View File

@ -4,6 +4,9 @@
"group": "computercraft:turtle_advanced", "group": "computercraft:turtle_advanced",
"key": {"#": {"item": "minecraft:diamond_shovel"}, "T": {"item": "computercraft:turtle_advanced"}}, "key": {"#": {"item": "minecraft:diamond_shovel"}, "T": {"item": "computercraft:turtle_advanced"}},
"pattern": ["#T"], "pattern": ["#T"],
"result": {"item": "computercraft:turtle_advanced", "nbt": "{RightUpgrade:\"minecraft:diamond_shovel\"}"}, "result": {
"item": "computercraft:turtle_advanced",
"nbt": "{RightUpgrade:\"minecraft:diamond_shovel\",RightUpgradeNbt:{Tag:{Damage:0}}}"
},
"show_notification": true "show_notification": true
} }

View File

@ -4,6 +4,9 @@
"group": "computercraft:turtle_advanced", "group": "computercraft:turtle_advanced",
"key": {"#": {"item": "minecraft:diamond_sword"}, "T": {"item": "computercraft:turtle_advanced"}}, "key": {"#": {"item": "minecraft:diamond_sword"}, "T": {"item": "computercraft:turtle_advanced"}},
"pattern": ["#T"], "pattern": ["#T"],
"result": {"item": "computercraft:turtle_advanced", "nbt": "{RightUpgrade:\"minecraft:diamond_sword\"}"}, "result": {
"item": "computercraft:turtle_advanced",
"nbt": "{RightUpgrade:\"minecraft:diamond_sword\",RightUpgradeNbt:{Tag:{Damage:0}}}"
},
"show_notification": true "show_notification": true
} }

View File

@ -4,6 +4,9 @@
"group": "computercraft:turtle_normal", "group": "computercraft:turtle_normal",
"key": {"#": {"item": "minecraft:diamond_axe"}, "T": {"item": "computercraft:turtle_normal"}}, "key": {"#": {"item": "minecraft:diamond_axe"}, "T": {"item": "computercraft:turtle_normal"}},
"pattern": ["#T"], "pattern": ["#T"],
"result": {"item": "computercraft:turtle_normal", "nbt": "{RightUpgrade:\"minecraft:diamond_axe\"}"}, "result": {
"item": "computercraft:turtle_normal",
"nbt": "{RightUpgrade:\"minecraft:diamond_axe\",RightUpgradeNbt:{Tag:{Damage:0}}}"
},
"show_notification": true "show_notification": true
} }

View File

@ -4,6 +4,9 @@
"group": "computercraft:turtle_normal", "group": "computercraft:turtle_normal",
"key": {"#": {"item": "minecraft:diamond_hoe"}, "T": {"item": "computercraft:turtle_normal"}}, "key": {"#": {"item": "minecraft:diamond_hoe"}, "T": {"item": "computercraft:turtle_normal"}},
"pattern": ["#T"], "pattern": ["#T"],
"result": {"item": "computercraft:turtle_normal", "nbt": "{RightUpgrade:\"minecraft:diamond_hoe\"}"}, "result": {
"item": "computercraft:turtle_normal",
"nbt": "{RightUpgrade:\"minecraft:diamond_hoe\",RightUpgradeNbt:{Tag:{Damage:0}}}"
},
"show_notification": true "show_notification": true
} }

View File

@ -4,6 +4,9 @@
"group": "computercraft:turtle_normal", "group": "computercraft:turtle_normal",
"key": {"#": {"item": "minecraft:diamond_pickaxe"}, "T": {"item": "computercraft:turtle_normal"}}, "key": {"#": {"item": "minecraft:diamond_pickaxe"}, "T": {"item": "computercraft:turtle_normal"}},
"pattern": ["#T"], "pattern": ["#T"],
"result": {"item": "computercraft:turtle_normal", "nbt": "{RightUpgrade:\"minecraft:diamond_pickaxe\"}"}, "result": {
"item": "computercraft:turtle_normal",
"nbt": "{RightUpgrade:\"minecraft:diamond_pickaxe\",RightUpgradeNbt:{Tag:{Damage:0}}}"
},
"show_notification": true "show_notification": true
} }

View File

@ -4,6 +4,9 @@
"group": "computercraft:turtle_normal", "group": "computercraft:turtle_normal",
"key": {"#": {"item": "minecraft:diamond_shovel"}, "T": {"item": "computercraft:turtle_normal"}}, "key": {"#": {"item": "minecraft:diamond_shovel"}, "T": {"item": "computercraft:turtle_normal"}},
"pattern": ["#T"], "pattern": ["#T"],
"result": {"item": "computercraft:turtle_normal", "nbt": "{RightUpgrade:\"minecraft:diamond_shovel\"}"}, "result": {
"item": "computercraft:turtle_normal",
"nbt": "{RightUpgrade:\"minecraft:diamond_shovel\",RightUpgradeNbt:{Tag:{Damage:0}}}"
},
"show_notification": true "show_notification": true
} }

View File

@ -4,6 +4,9 @@
"group": "computercraft:turtle_normal", "group": "computercraft:turtle_normal",
"key": {"#": {"item": "minecraft:diamond_sword"}, "T": {"item": "computercraft:turtle_normal"}}, "key": {"#": {"item": "minecraft:diamond_sword"}, "T": {"item": "computercraft:turtle_normal"}},
"pattern": ["#T"], "pattern": ["#T"],
"result": {"item": "computercraft:turtle_normal", "nbt": "{RightUpgrade:\"minecraft:diamond_sword\"}"}, "result": {
"item": "computercraft:turtle_normal",
"nbt": "{RightUpgrade:\"minecraft:diamond_sword\",RightUpgradeNbt:{Tag:{Damage:0}}}"
},
"show_notification": true "show_notification": true
} }

View File

@ -62,12 +62,15 @@ public class FabricConfigFile implements ConfigFile {
if (loadConfig()) config.save(); if (loadConfig()) config.save();
} }
@SuppressWarnings("unchecked")
private Stream<ValueImpl<?>> values() {
return (Stream<ValueImpl<?>>) (Stream<?>) entries.stream().filter(ValueImpl.class::isInstance);
}
public synchronized void unload() { public synchronized void unload() {
closeConfig(); closeConfig();
entries.stream().forEach(x -> { values().forEach(ValueImpl::unload);
if (x instanceof ValueImpl<?> value) value.unload();
});
} }
@GuardedBy("this") @GuardedBy("this")
@ -87,14 +90,15 @@ public class FabricConfigFile implements ConfigFile {
config.load(); config.load();
entries.stream().forEach(x -> { // Ensure the config file matches the spec
config.setComment(x.path, x.comment); var isNewFile = config.isEmpty();
if (x instanceof ValueImpl<?> value) value.load(config); entries.stream().forEach(x -> config.setComment(x.path, x.comment));
}); var corrected = isNewFile ? spec.correct(config) : spec.correct(config, (action, entryPath, oldValue, newValue) -> {
var corrected = spec.correct(config, (action, entryPath, oldValue, newValue) -> {
LOG.warn("Incorrect key {} was corrected from {} to {}", String.join(".", entryPath), oldValue, newValue); LOG.warn("Incorrect key {} was corrected from {} to {}", String.join(".", entryPath), oldValue, newValue);
}); });
// And then load the underlying entries.
values().forEach(x -> x.load(config));
onChange.onConfigChanged(config.getNioPath()); onChange.onConfigChanged(config.getNioPath());
return corrected > 0; return corrected > 0;
@ -102,7 +106,7 @@ public class FabricConfigFile implements ConfigFile {
@Override @Override
public Stream<ConfigFile.Entry> entries() { public Stream<ConfigFile.Entry> entries() {
return entries.children().map(x -> (ConfigFile.Entry) x); return entries.stream().map(x -> (ConfigFile.Entry) x);
} }
@Nullable @Nullable
@ -148,7 +152,7 @@ public class FabricConfigFile implements ConfigFile {
public void push(String name) { public void push(String name) {
var path = getFullPath(name); var path = getFullPath(name);
var splitPath = SPLITTER.split(path); var splitPath = SPLITTER.split(path);
entries.setValue(splitPath, new GroupImpl(path, takeComment(), entries.getChild(splitPath))); entries.setValue(splitPath, new GroupImpl(path, takeComment()));
super.push(name); super.push(name);
} }
@ -230,16 +234,8 @@ public class FabricConfigFile implements ConfigFile {
} }
private static final class GroupImpl extends Entry implements Group { private static final class GroupImpl extends Entry implements Group {
private final Trie<String, Entry> children; private GroupImpl(String path, String comment) {
private GroupImpl(String path, String comment, Trie<String, Entry> children) {
super(path, comment); super(path, comment);
this.children = children;
}
@Override
public Stream<ConfigFile.Entry> children() {
return children.children().map(x -> (ConfigFile.Entry) x);
} }
} }

View File

@ -343,9 +343,7 @@ public class PlatformHelperImpl implements PlatformHelper {
) implements RegistryWrappers.RegistryWrapper<T> { ) implements RegistryWrappers.RegistryWrapper<T> {
@Override @Override
public int getId(T object) { public int getId(T object) {
var id = registry.getId(object); return registry.getId(object);
if (id == -1) throw new IllegalArgumentException(object + " was not registered in " + name);
return id;
} }
@Override @Override
@ -369,10 +367,13 @@ public class PlatformHelperImpl implements PlatformHelper {
} }
@Override @Override
public T get(int id) { public @Nullable T byId(int id) {
var object = registry.byId(id); return registry.byId(id);
if (object == null) throw new IllegalArgumentException(id + " was not registered in " + name); }
return object;
@Override
public int size() {
return registry.size();
} }
@Override @Override

View File

@ -50,7 +50,7 @@
], ],
"depends": { "depends": {
"fabricloader": ">=0.14.21", "fabricloader": ">=0.14.21",
"fabric-api": ">=0.83.0", "fabric-api": ">=0.86.1",
"minecraft": ">=1.20.1 <1.21" "minecraft": ">=1.20.1 <1.21"
}, },
"accessWidener": "computercraft.accesswidener" "accessWidener": "computercraft.accesswidener"

View File

@ -0,0 +1,51 @@
// SPDX-FileCopyrightText: 2023 The CC: Tweaked Developers
//
// SPDX-License-Identifier: MPL-2.0
package dan200.computercraft.client.model;
import dan200.computercraft.shared.util.ConsList;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.client.renderer.block.model.BakedQuad;
import net.minecraft.client.resources.model.BakedModel;
import net.minecraft.core.Direction;
import net.minecraft.util.RandomSource;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraftforge.client.model.BakedModelWrapper;
import net.minecraftforge.client.model.data.ModelData;
import org.jetbrains.annotations.Nullable;
import java.util.List;
/**
* A model wrapper which applies a glint/foil to the original model.
*/
public final class FoiledModel extends BakedModelWrapper<BakedModel> {
public FoiledModel(BakedModel model) {
super(model);
}
@Override
public List<BakedQuad> getQuads(@Nullable BlockState state, @Nullable Direction side, RandomSource rand, ModelData extraData, @Nullable RenderType renderType) {
return renderType == RenderType.glint()
? super.getQuads(state, side, rand, extraData, null)
: super.getQuads(state, side, rand, extraData, renderType);
}
@Override
public List<RenderType> getRenderTypes(ItemStack itemStack, boolean fabulous) {
return new ConsList<>(fabulous ? RenderType.glintDirect() : RenderType.glint(), super.getRenderTypes(itemStack, fabulous));
}
@Override
public boolean equals(Object obj) {
return this == obj || (obj instanceof FoiledModel other && originalModel.equals(other.originalModel));
}
@Override
public int hashCode() {
return originalModel.hashCode() ^ 1;
}
}

View File

@ -5,22 +5,53 @@
package dan200.computercraft.client.platform; package dan200.computercraft.client.platform;
import com.google.auto.service.AutoService; import com.google.auto.service.AutoService;
import com.mojang.blaze3d.vertex.PoseStack;
import dan200.computercraft.client.model.FoiledModel;
import dan200.computercraft.client.render.ModelRenderer;
import dan200.computercraft.shared.network.NetworkMessage; import dan200.computercraft.shared.network.NetworkMessage;
import dan200.computercraft.shared.network.server.ServerNetworkContext; import dan200.computercraft.shared.network.server.ServerNetworkContext;
import dan200.computercraft.shared.platform.NetworkHandler; import dan200.computercraft.shared.platform.NetworkHandler;
import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.resources.model.BakedModel; import net.minecraft.client.resources.model.BakedModel;
import net.minecraft.client.resources.model.ModelManager; import net.minecraft.client.resources.model.ModelManager;
import net.minecraft.core.Direction;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import net.minecraft.util.RandomSource;
import net.minecraft.world.item.ItemStack;
import net.minecraftforge.client.model.data.ModelData;
import javax.annotation.Nullable;
import java.util.Arrays;
@AutoService(dan200.computercraft.impl.client.ClientPlatformHelper.class) @AutoService(dan200.computercraft.impl.client.ClientPlatformHelper.class)
public class ClientPlatformHelperImpl implements ClientPlatformHelper { public class ClientPlatformHelperImpl implements ClientPlatformHelper {
private static final RandomSource random = RandomSource.create(0);
private static final Direction[] directions = Arrays.copyOf(Direction.values(), 7);
@Override @Override
public BakedModel getModel(ModelManager manager, ResourceLocation location) { public BakedModel getModel(ModelManager manager, ResourceLocation location) {
return manager.getModel(location); return manager.getModel(location);
} }
@Override
public BakedModel createdFoiledModel(BakedModel model) {
return new FoiledModel(model);
}
@Override @Override
public void sendToServer(NetworkMessage<ServerNetworkContext> message) { public void sendToServer(NetworkMessage<ServerNetworkContext> message) {
NetworkHandler.sendToServer(message); NetworkHandler.sendToServer(message);
} }
@Override
public void renderBakedModel(PoseStack transform, MultiBufferSource buffers, BakedModel model, int lightmapCoord, int overlayLight, @Nullable int[] tints) {
for (var renderType : model.getRenderTypes(ItemStack.EMPTY, true)) {
var buffer = buffers.getBuffer(renderType);
for (var face : directions) {
random.setSeed(42);
var quads = model.getQuads(null, face, random, ModelData.EMPTY, renderType);
ModelRenderer.renderQuads(transform, buffer, quads, lightmapCoord, overlayLight, tints);
}
}
}
} }

View File

@ -41,9 +41,6 @@
"commands.computercraft.help.synopsis": "Provide help for a specific command", "commands.computercraft.help.synopsis": "Provide help for a specific command",
"commands.computercraft.queue.desc": "Send a computer_command event to a command computer, passing through the additional arguments. This is mostly designed for map makers, acting as a more computer-friendly version of /trigger. Any player can run the command, which would most likely be done through a text component's click event.", "commands.computercraft.queue.desc": "Send a computer_command event to a command computer, passing through the additional arguments. This is mostly designed for map makers, acting as a more computer-friendly version of /trigger. Any player can run the command, which would most likely be done through a text component's click event.",
"commands.computercraft.queue.synopsis": "Send a computer_command event to a command computer", "commands.computercraft.queue.synopsis": "Send a computer_command event to a command computer",
"commands.computercraft.reload.desc": "Reload the ComputerCraft config file",
"commands.computercraft.reload.done": "Reloaded config",
"commands.computercraft.reload.synopsis": "Reload the ComputerCraft config file",
"commands.computercraft.shutdown.desc": "Shutdown the listed computers or all if none are specified. You can specify the computer's instance id (e.g. 123), computer id (e.g #123) or label (e.g. \"@My Computer\").", "commands.computercraft.shutdown.desc": "Shutdown the listed computers or all if none are specified. You can specify the computer's instance id (e.g. 123), computer id (e.g #123) or label (e.g. \"@My Computer\").",
"commands.computercraft.shutdown.done": "Shutdown %s/%s computers", "commands.computercraft.shutdown.done": "Shutdown %s/%s computers",
"commands.computercraft.shutdown.synopsis": "Shutdown computers remotely.", "commands.computercraft.shutdown.synopsis": "Shutdown computers remotely.",

View File

@ -4,6 +4,9 @@
"group": "computercraft:turtle_advanced", "group": "computercraft:turtle_advanced",
"key": {"#": {"item": "minecraft:diamond_axe"}, "T": {"item": "computercraft:turtle_advanced"}}, "key": {"#": {"item": "minecraft:diamond_axe"}, "T": {"item": "computercraft:turtle_advanced"}},
"pattern": ["#T"], "pattern": ["#T"],
"result": {"item": "computercraft:turtle_advanced", "nbt": "{RightUpgrade:\"minecraft:diamond_axe\"}"}, "result": {
"item": "computercraft:turtle_advanced",
"nbt": "{RightUpgrade:\"minecraft:diamond_axe\",RightUpgradeNbt:{Tag:{Damage:0}}}"
},
"show_notification": true "show_notification": true
} }

View File

@ -4,6 +4,9 @@
"group": "computercraft:turtle_advanced", "group": "computercraft:turtle_advanced",
"key": {"#": {"item": "minecraft:diamond_hoe"}, "T": {"item": "computercraft:turtle_advanced"}}, "key": {"#": {"item": "minecraft:diamond_hoe"}, "T": {"item": "computercraft:turtle_advanced"}},
"pattern": ["#T"], "pattern": ["#T"],
"result": {"item": "computercraft:turtle_advanced", "nbt": "{RightUpgrade:\"minecraft:diamond_hoe\"}"}, "result": {
"item": "computercraft:turtle_advanced",
"nbt": "{RightUpgrade:\"minecraft:diamond_hoe\",RightUpgradeNbt:{Tag:{Damage:0}}}"
},
"show_notification": true "show_notification": true
} }

View File

@ -4,6 +4,9 @@
"group": "computercraft:turtle_advanced", "group": "computercraft:turtle_advanced",
"key": {"#": {"item": "minecraft:diamond_pickaxe"}, "T": {"item": "computercraft:turtle_advanced"}}, "key": {"#": {"item": "minecraft:diamond_pickaxe"}, "T": {"item": "computercraft:turtle_advanced"}},
"pattern": ["#T"], "pattern": ["#T"],
"result": {"item": "computercraft:turtle_advanced", "nbt": "{RightUpgrade:\"minecraft:diamond_pickaxe\"}"}, "result": {
"item": "computercraft:turtle_advanced",
"nbt": "{RightUpgrade:\"minecraft:diamond_pickaxe\",RightUpgradeNbt:{Tag:{Damage:0}}}"
},
"show_notification": true "show_notification": true
} }

View File

@ -4,6 +4,9 @@
"group": "computercraft:turtle_advanced", "group": "computercraft:turtle_advanced",
"key": {"#": {"item": "minecraft:diamond_shovel"}, "T": {"item": "computercraft:turtle_advanced"}}, "key": {"#": {"item": "minecraft:diamond_shovel"}, "T": {"item": "computercraft:turtle_advanced"}},
"pattern": ["#T"], "pattern": ["#T"],
"result": {"item": "computercraft:turtle_advanced", "nbt": "{RightUpgrade:\"minecraft:diamond_shovel\"}"}, "result": {
"item": "computercraft:turtle_advanced",
"nbt": "{RightUpgrade:\"minecraft:diamond_shovel\",RightUpgradeNbt:{Tag:{Damage:0}}}"
},
"show_notification": true "show_notification": true
} }

View File

@ -4,6 +4,9 @@
"group": "computercraft:turtle_advanced", "group": "computercraft:turtle_advanced",
"key": {"#": {"item": "minecraft:diamond_sword"}, "T": {"item": "computercraft:turtle_advanced"}}, "key": {"#": {"item": "minecraft:diamond_sword"}, "T": {"item": "computercraft:turtle_advanced"}},
"pattern": ["#T"], "pattern": ["#T"],
"result": {"item": "computercraft:turtle_advanced", "nbt": "{RightUpgrade:\"minecraft:diamond_sword\"}"}, "result": {
"item": "computercraft:turtle_advanced",
"nbt": "{RightUpgrade:\"minecraft:diamond_sword\",RightUpgradeNbt:{Tag:{Damage:0}}}"
},
"show_notification": true "show_notification": true
} }

View File

@ -4,6 +4,9 @@
"group": "computercraft:turtle_normal", "group": "computercraft:turtle_normal",
"key": {"#": {"item": "minecraft:diamond_axe"}, "T": {"item": "computercraft:turtle_normal"}}, "key": {"#": {"item": "minecraft:diamond_axe"}, "T": {"item": "computercraft:turtle_normal"}},
"pattern": ["#T"], "pattern": ["#T"],
"result": {"item": "computercraft:turtle_normal", "nbt": "{RightUpgrade:\"minecraft:diamond_axe\"}"}, "result": {
"item": "computercraft:turtle_normal",
"nbt": "{RightUpgrade:\"minecraft:diamond_axe\",RightUpgradeNbt:{Tag:{Damage:0}}}"
},
"show_notification": true "show_notification": true
} }

View File

@ -4,6 +4,9 @@
"group": "computercraft:turtle_normal", "group": "computercraft:turtle_normal",
"key": {"#": {"item": "minecraft:diamond_hoe"}, "T": {"item": "computercraft:turtle_normal"}}, "key": {"#": {"item": "minecraft:diamond_hoe"}, "T": {"item": "computercraft:turtle_normal"}},
"pattern": ["#T"], "pattern": ["#T"],
"result": {"item": "computercraft:turtle_normal", "nbt": "{RightUpgrade:\"minecraft:diamond_hoe\"}"}, "result": {
"item": "computercraft:turtle_normal",
"nbt": "{RightUpgrade:\"minecraft:diamond_hoe\",RightUpgradeNbt:{Tag:{Damage:0}}}"
},
"show_notification": true "show_notification": true
} }

View File

@ -4,6 +4,9 @@
"group": "computercraft:turtle_normal", "group": "computercraft:turtle_normal",
"key": {"#": {"item": "minecraft:diamond_pickaxe"}, "T": {"item": "computercraft:turtle_normal"}}, "key": {"#": {"item": "minecraft:diamond_pickaxe"}, "T": {"item": "computercraft:turtle_normal"}},
"pattern": ["#T"], "pattern": ["#T"],
"result": {"item": "computercraft:turtle_normal", "nbt": "{RightUpgrade:\"minecraft:diamond_pickaxe\"}"}, "result": {
"item": "computercraft:turtle_normal",
"nbt": "{RightUpgrade:\"minecraft:diamond_pickaxe\",RightUpgradeNbt:{Tag:{Damage:0}}}"
},
"show_notification": true "show_notification": true
} }

View File

@ -4,6 +4,9 @@
"group": "computercraft:turtle_normal", "group": "computercraft:turtle_normal",
"key": {"#": {"item": "minecraft:diamond_shovel"}, "T": {"item": "computercraft:turtle_normal"}}, "key": {"#": {"item": "minecraft:diamond_shovel"}, "T": {"item": "computercraft:turtle_normal"}},
"pattern": ["#T"], "pattern": ["#T"],
"result": {"item": "computercraft:turtle_normal", "nbt": "{RightUpgrade:\"minecraft:diamond_shovel\"}"}, "result": {
"item": "computercraft:turtle_normal",
"nbt": "{RightUpgrade:\"minecraft:diamond_shovel\",RightUpgradeNbt:{Tag:{Damage:0}}}"
},
"show_notification": true "show_notification": true
} }

View File

@ -4,6 +4,9 @@
"group": "computercraft:turtle_normal", "group": "computercraft:turtle_normal",
"key": {"#": {"item": "minecraft:diamond_sword"}, "T": {"item": "computercraft:turtle_normal"}}, "key": {"#": {"item": "minecraft:diamond_sword"}, "T": {"item": "computercraft:turtle_normal"}},
"pattern": ["#T"], "pattern": ["#T"],
"result": {"item": "computercraft:turtle_normal", "nbt": "{RightUpgrade:\"minecraft:diamond_sword\"}"}, "result": {
"item": "computercraft:turtle_normal",
"nbt": "{RightUpgrade:\"minecraft:diamond_sword\",RightUpgradeNbt:{Tag:{Damage:0}}}"
},
"show_notification": true "show_notification": true
} }

View File

@ -32,7 +32,7 @@ public final class ForgeConfigFile implements ConfigFile {
@Override @Override
public Stream<Entry> entries() { public Stream<Entry> entries() {
return entries.children(); return entries.stream();
} }
@Nullable @Nullable
@ -68,7 +68,7 @@ public final class ForgeConfigFile implements ConfigFile {
@Override @Override
public void pop() { public void pop() {
var path = new ArrayList<>(groupStack); var path = new ArrayList<>(groupStack);
entries.setValue(path, new GroupImpl(path, entries.getChild(path))); entries.setValue(path, new GroupImpl(path));
builder.pop(); builder.pop();
super.pop(); super.pop();
@ -129,12 +129,10 @@ public final class ForgeConfigFile implements ConfigFile {
private static final class GroupImpl implements ConfigFile.Group { private static final class GroupImpl implements ConfigFile.Group {
private final List<String> path; private final List<String> path;
private final Trie<String, ConfigFile.Entry> entries;
private @Nullable ForgeConfigSpec owner; private @Nullable ForgeConfigSpec owner;
private GroupImpl(List<String> path, Trie<String, ConfigFile.Entry> entries) { private GroupImpl(List<String> path) {
this.path = path; this.path = path;
this.entries = entries;
} }
@Override @Override
@ -148,11 +146,6 @@ public final class ForgeConfigFile implements ConfigFile {
if (owner == null) throw new IllegalStateException("Config has not been built yet"); if (owner == null) throw new IllegalStateException("Config has not been built yet");
return owner.getLevelComment(path); return owner.getLevelComment(path);
} }
@Override
public Stream<Entry> children() {
return entries.children();
}
} }
private static final class ValueImpl<T> implements ConfigFile.Value<T> { private static final class ValueImpl<T> implements ConfigFile.Value<T> {

Some files were not shown because too many files have changed in this diff Show More