From 48cdabd205bbbdc4917d5d9982bd26fde488d5e9 Mon Sep 17 00:00:00 2001 From: MisterJulsen Date: Sun, 5 May 2024 16:12:19 +0200 Subject: [PATCH 01/38] Ported to 1.19.2 --- .vscode/settings.json | 3 +- build.gradle | 41 +- common/build.gradle | 23 +- .../block/AbstractAdvancedDisplayBlock.java | 4 +- .../de/mrjulsen/crn/client/ClientWrapper.java | 4 +- .../mrjulsen/crn/client/ber/base/BERText.java | 2 +- .../overlay/RouteDetailsOverlayScreen.java | 7 +- .../screen/RouteOverlaySettingsScreen.java | 6 +- .../gui/widgets/ModCommandSuggestions.java | 14 +- .../mrjulsen/crn/client/lang/ELanguage.java | 4 +- .../client/lang/ModTranslatableComponent.java | 370 +++++++++--------- .../crn/event/listeners/JourneyListener.java | 3 +- .../createrailwaysnavigator.accesswidener | 3 +- fabric/build.gradle | 20 +- fabric/src/main/resources/fabric.mod.json | 6 +- forge/build.gradle | 15 +- forge/src/main/resources/META-INF/mods.toml | 15 +- gradle.properties | 23 +- settings.gradle | 3 +- 19 files changed, 281 insertions(+), 285 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index a1deeb97..d7df2409 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,5 +1,4 @@ { - "commentTranslate.hover.enabled": false, "java.compile.nullAnalysis.mode": "disabled", - "java.configuration.updateBuildConfiguration": "automatic" + "commentTranslate.hover.enabled": false } \ No newline at end of file diff --git a/build.gradle b/build.gradle index 4c8760a7..09cfd06c 100644 --- a/build.gradle +++ b/build.gradle @@ -1,6 +1,6 @@ plugins { id "architectury-plugin" version "3.4-SNAPSHOT" - id "dev.architectury.loom" version "1.3-SNAPSHOT" apply false + id "dev.architectury.loom" version "1.5-SNAPSHOT" apply false } architectury { @@ -16,10 +16,10 @@ subprojects { dependencies { minecraft "com.mojang:minecraft:${rootProject.minecraft_version}" - mappings loom.layered() { - officialMojangMappings() - parchment("org.parchmentmc.data:parchment-${rootProject.minecraft_version}:${rootProject.parchmentmc_version}@zip") - } + // The following line declares the mojmap mappings, you may use other mappings as well + mappings loom.officialMojangMappings() + // The following line declares the yarn mappings you may select this one as well. + // mappings "net.fabricmc:yarn:1.18.2+build.4:v2" } } @@ -56,6 +56,27 @@ allprojects { includeGroup "curse.maven" } } + + + maven { // Create Forge and Registrate Forge + url = "https://maven.tterrag.com/" + content { + includeGroup("com.tterrag.registrate") + includeGroup("com.simibubi.create") + } + } + + maven { url = "https://maven.shedaniel.me/" } // Cloth Config, REI + maven { url = "https://maven.blamejared.com/" } // JEI + maven { url = "https://maven.parchmentmc.org" } // Parchment mappings + maven { url = "https://maven.quiltmc.org/repository/release" } // Quilt Mappings + maven { url = "https://api.modrinth.com/maven" } // LazyDFU + maven { url = "https://maven.terraformersmc.com/releases/" } // Mod Menu + maven { url = "https://mvn.devos.one/snapshots/" } // Create, Porting Lib, Forge Tags, Milk Lib, Registrate + maven { url = "https://raw.githubusercontent.com/Fuzss/modresources/main/maven/" } // Forge Config API Port + maven { url = "https://maven.jamieswhiteshirt.com/libs-release" } // Reach Entity Attributes + maven { url = "https://jitpack.io/" } // Mixin Extras, Fabric ASM + maven { url = "https://maven.tterrag.com/" } // Flywheel } tasks.withType(JavaCompile) { @@ -63,7 +84,17 @@ allprojects { options.release = 17 } +publishing { + repositories { + maven { + name "GitHub" + url "file://${System.getProperty('user.home')}/.m2/github/modsrepo/maven" + } + } +} + java { withSourcesJar() + withJavadocJar() } } diff --git a/common/build.gradle b/common/build.gradle index 83568dac..3b9180cc 100644 --- a/common/build.gradle +++ b/common/build.gradle @@ -6,25 +6,14 @@ loom { accessWidenerPath = file("src/main/resources/createrailwaysnavigator.accesswidener") } -repositories { - maven { url = "https://maven.shedaniel.me/" } // Cloth Config, REI - maven { url = "https://maven.blamejared.com/" } // JEI - maven { url = "https://maven.parchmentmc.org" } // Parchment mappings - maven { url = "https://maven.quiltmc.org/repository/release" } // Quilt Mappings - maven { url = "https://api.modrinth.com/maven" } // LazyDFU - maven { url = "https://maven.terraformersmc.com/releases/" } // Mod Menu - maven { url = "https://mvn.devos.one/snapshots/" } // Create, Porting Lib, Forge Tags, Milk Lib, Registrate - maven { url = "https://raw.githubusercontent.com/Fuzss/modresources/main/maven/" } // Forge Config API Port - maven { url = "https://maven.jamieswhiteshirt.com/libs-release" } // Reach Entity Attributes - maven { url = "https://jitpack.io/" } // Mixin Extras, Fabric ASM - maven { url = "https://maven.tterrag.com/" } // Flywheel -} - dependencies { + // We depend on fabric loader here to use the fabric @Environment annotations and get the mixin dependencies + // Do NOT use other classes from fabric loader modImplementation "net.fabricmc:fabric-loader:${rootProject.fabric_loader_version}" - modApi(include("de.mrjulsen.mcdragonlib:dragonlib-fabric:${rootProject.minecraft_version}-${rootProject.dragonlib_version}")) + + modImplementation(include("de.mrjulsen.mcdragonlib:dragonlib-fabric:${rootProject.minecraft_version}-${rootProject.dragonlib_version}")) + modImplementation("com.simibubi.create:create-fabric-${rootProject.minecraft_version}:${rootProject.create_fabric_version}") - modCompileOnly("com.simibubi.create:create-fabric-${rootProject.minecraft_version}:${rootProject.create_fabric_version}") } publishing { @@ -35,6 +24,8 @@ publishing { } } + // See https://docs.gradle.org/current/userguide/publishing_maven.html for information on how to set up publishing. repositories { + // Add repositories to publish to here. } } diff --git a/common/src/main/java/de/mrjulsen/crn/block/AbstractAdvancedDisplayBlock.java b/common/src/main/java/de/mrjulsen/crn/block/AbstractAdvancedDisplayBlock.java index d97bb0be..a24799b2 100644 --- a/common/src/main/java/de/mrjulsen/crn/block/AbstractAdvancedDisplayBlock.java +++ b/common/src/main/java/de/mrjulsen/crn/block/AbstractAdvancedDisplayBlock.java @@ -2,7 +2,6 @@ import java.util.Collection; import java.util.List; -import java.util.Random; import com.simibubi.create.content.equipment.wrench.IWrenchable; import com.simibubi.create.content.kinetics.base.KineticBlockEntity; @@ -23,6 +22,7 @@ import net.minecraft.server.level.ServerLevel; import net.minecraft.sounds.SoundEvents; import net.minecraft.sounds.SoundSource; +import net.minecraft.util.RandomSource; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; import net.minecraft.world.entity.player.Player; @@ -200,7 +200,7 @@ public void updateNeighbours(BlockState pState, Level pLevel, BlockPos pPos) { } @Override - public void tick(BlockState pState, ServerLevel pLevel, BlockPos pPos, Random pRandom) { + public void tick(BlockState pState, ServerLevel pLevel, BlockPos pPos, RandomSource pRandom) { if (pState.getBlock() != this) return; BlockPos belowPos = pPos.relative(Direction.fromAxisAndDirection(getConnectionAxis(pState), AxisDirection.NEGATIVE)); diff --git a/common/src/main/java/de/mrjulsen/crn/client/ClientWrapper.java b/common/src/main/java/de/mrjulsen/crn/client/ClientWrapper.java index 31ac39f1..87b872f4 100644 --- a/common/src/main/java/de/mrjulsen/crn/client/ClientWrapper.java +++ b/common/src/main/java/de/mrjulsen/crn/client/ClientWrapper.java @@ -13,11 +13,11 @@ import de.mrjulsen.crn.data.GlobalSettingsManager; import de.mrjulsen.crn.network.packets.stc.ServerErrorPacket; import de.mrjulsen.mcdragonlib.client.gui.DLScreen; +import de.mrjulsen.mcdragonlib.util.TextUtils; import dev.architectury.networking.NetworkManager.PacketContext; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.components.toasts.SystemToast; import net.minecraft.client.gui.components.toasts.SystemToast.SystemToastIds; -import net.minecraft.network.chat.TextComponent; import net.minecraft.world.level.Level; public class ClientWrapper { @@ -36,7 +36,7 @@ public static void showRouteOverlaySettingsGui(RouteDetailsOverlayScreen overlay } public static void handleErrorMessagePacket(ServerErrorPacket packet, Supplier ctx) { - Minecraft.getInstance().getToasts().addToast(new SystemToast(SystemToastIds.PERIODIC_NOTIFICATION, Constants.TEXT_SERVER_ERROR, new TextComponent(packet.message))); + Minecraft.getInstance().getToasts().addToast(new SystemToast(SystemToastIds.PERIODIC_NOTIFICATION, Constants.TEXT_SERVER_ERROR, TextUtils.text(packet.message))); } public static void showAdvancedDisplaySettingsScreen(AdvancedDisplayBlockEntity blockEntity) { diff --git a/common/src/main/java/de/mrjulsen/crn/client/ber/base/BERText.java b/common/src/main/java/de/mrjulsen/crn/client/ber/base/BERText.java index 6376f0c6..a982c025 100644 --- a/common/src/main/java/de/mrjulsen/crn/client/ber/base/BERText.java +++ b/common/src/main/java/de/mrjulsen/crn/client/ber/base/BERText.java @@ -253,7 +253,7 @@ private void renderTextInBounds(PoseStack pPoseStack, FontUtils fontUtils, Multi for (int i = 0; i < text.getString().length(); i++) { int charCode = text.getString().charAt(i); - GlyphInfo info = fontUtils.fontSet.getGlyphInfo(charCode); + GlyphInfo info = fontUtils.fontSet.getGlyphInfo(charCode, false); float glyphWidth = info.getAdvance(text.getStyle().isBold()); float oldX = newX; newX += glyphWidth; diff --git a/common/src/main/java/de/mrjulsen/crn/client/gui/overlay/RouteDetailsOverlayScreen.java b/common/src/main/java/de/mrjulsen/crn/client/gui/overlay/RouteDetailsOverlayScreen.java index af7e8ebc..eb0eab3f 100644 --- a/common/src/main/java/de/mrjulsen/crn/client/gui/overlay/RouteDetailsOverlayScreen.java +++ b/common/src/main/java/de/mrjulsen/crn/client/gui/overlay/RouteDetailsOverlayScreen.java @@ -7,6 +7,7 @@ import com.mojang.blaze3d.platform.InputConstants; import com.mojang.blaze3d.systems.RenderSystem; +import com.mojang.text2speech.Narrator; import com.simibubi.create.content.trains.station.NoShadowFontWrapper; import com.simibubi.create.foundation.gui.UIRenderHelper; import com.simibubi.create.foundation.utility.animation.LerpedFloat; @@ -52,11 +53,9 @@ import net.minecraft.Util; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.Font; -import net.minecraft.client.gui.chat.NarratorChatListener; import net.minecraft.client.gui.components.MultiLineLabel; import net.minecraft.client.gui.screens.Screen; import net.minecraft.network.chat.Component; -import net.minecraft.network.chat.KeybindComponent; import net.minecraft.network.chat.MutableComponent; import net.minecraft.resources.ResourceLocation; import net.minecraft.util.Mth; @@ -329,7 +328,7 @@ private void journeyInterrupt(JourneyInterruptData data) { private void narratorAnnouncement(String text) { if (ModClientConfig.ROUTE_NARRATOR.get()) { - NarratorChatListener.INSTANCE.narrator.say(text, true); + Narrator.getNarrator().say(text, true); } } @@ -495,7 +494,7 @@ private void renderInternal(Graphics graphics, int x, int y, int width, int heig GuiUtils.drawTexture(GUI, graphics, x, y, GUI_WIDTH, GUI_HEIGHT, 0, getListener().getCurrentState().important() ? 138 : 0, 256, 256); GuiUtils.drawString(graphics, shadowlessFont, x + 6, y + 4, title, 0x4F4F4F, EAlignment.LEFT, false); - GuiUtils.drawString(graphics, shadowlessFont, x + 6, y + GUI_HEIGHT - 2 - shadowlessFont.lineHeight, TextUtils.translate(keyOptionsText, TextUtils.translate(InputConstants.getKey(Minecraft.ON_OSX ? InputConstants.KEY_LWIN : InputConstants.KEY_LCONTROL, 0).getName()).append(" + ").append(new KeybindComponent(keyKeybindOptions)).withStyle(ChatFormatting.BOLD)), 0x4F4F4F, EAlignment.LEFT, false); + GuiUtils.drawString(graphics, shadowlessFont, x + 6, y + GUI_HEIGHT - 2 - shadowlessFont.lineHeight, TextUtils.translate(keyOptionsText, TextUtils.translate(InputConstants.getKey(Minecraft.ON_OSX ? InputConstants.KEY_LWIN : InputConstants.KEY_LCONTROL, 0).getName()).append(" + ").append(TextUtils.keybind(keyKeybindOptions)).withStyle(ChatFormatting.BOLD)), 0x4F4F4F, EAlignment.LEFT, false); String timeString = TimeUtils.parseTime((int)((level.getDayTime() + DragonLib.DAYTIME_SHIFT) % DragonLib.TICKS_PER_DAY), ModClientConfig.TIME_FORMAT.get()); GuiUtils.drawString(graphics, shadowlessFont, x + GUI_WIDTH - 4 - shadowlessFont.width(timeString), y + 4, timeString, 0x4F4F4F, EAlignment.LEFT, false); diff --git a/common/src/main/java/de/mrjulsen/crn/client/gui/screen/RouteOverlaySettingsScreen.java b/common/src/main/java/de/mrjulsen/crn/client/gui/screen/RouteOverlaySettingsScreen.java index e8da0f3b..24df4dac 100644 --- a/common/src/main/java/de/mrjulsen/crn/client/gui/screen/RouteOverlaySettingsScreen.java +++ b/common/src/main/java/de/mrjulsen/crn/client/gui/screen/RouteOverlaySettingsScreen.java @@ -4,6 +4,7 @@ import java.util.List; import java.util.Map; +import com.mojang.text2speech.Narrator; import com.simibubi.create.content.trains.station.NoShadowFontWrapper; import com.simibubi.create.foundation.gui.AllIcons; import com.simibubi.create.foundation.gui.element.GuiGameElement; @@ -37,7 +38,6 @@ import net.minecraft.ChatFormatting; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.Font; -import net.minecraft.client.gui.chat.NarratorChatListener; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.MutableComponent; import net.minecraft.resources.ResourceLocation; @@ -158,9 +158,9 @@ protected void init() { ModClientConfig.ROUTE_NARRATOR.set(!ModClientConfig.ROUTE_NARRATOR.get()); if (ModClientConfig.ROUTE_NARRATOR.get()) { - NarratorChatListener.INSTANCE.narrator.say(narratorOn.getString(), true); + Narrator.getNarrator().say(narratorOn.getString(), true); } else { - NarratorChatListener.INSTANCE.narrator.say(narratorOff.getString(), true); + Narrator.getNarrator().say(narratorOff.getString(), true); } }); buttons.add(soundButton); diff --git a/common/src/main/java/de/mrjulsen/crn/client/gui/widgets/ModCommandSuggestions.java b/common/src/main/java/de/mrjulsen/crn/client/gui/widgets/ModCommandSuggestions.java index 4664093d..6342acfb 100644 --- a/common/src/main/java/de/mrjulsen/crn/client/gui/widgets/ModCommandSuggestions.java +++ b/common/src/main/java/de/mrjulsen/crn/client/gui/widgets/ModCommandSuggestions.java @@ -17,6 +17,10 @@ import com.mojang.brigadier.suggestion.SuggestionsBuilder; import com.mojang.brigadier.tree.CommandNode; import com.mojang.brigadier.tree.LiteralCommandNode; +import com.mojang.text2speech.Narrator; + +import de.mrjulsen.mcdragonlib.util.TextUtils; + import java.util.Collection; import java.util.List; import java.util.Locale; @@ -31,7 +35,6 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.gui.Font; import net.minecraft.client.gui.GuiComponent; -import net.minecraft.client.gui.chat.NarratorChatListener; import net.minecraft.client.gui.components.EditBox; import net.minecraft.client.gui.screens.Screen; import net.minecraft.client.renderer.Rect2i; @@ -40,7 +43,6 @@ import net.minecraft.network.chat.Component; import net.minecraft.network.chat.ComponentUtils; import net.minecraft.network.chat.Style; -import net.minecraft.network.chat.TranslatableComponent; import net.minecraft.util.FormattedCharSequence; import net.minecraft.util.Mth; import net.minecraft.world.phys.Vec2; @@ -210,7 +212,7 @@ private static int getLastWordIndex(String pText) { private static FormattedCharSequence getExceptionMessage(CommandSyntaxException pException) { Component component = ComponentUtils.fromMessage(pException.getRawMessage()); String s = pException.getContext(); - return s == null ? component.getVisualOrderText() : (new TranslatableComponent("command.context.parse_error", component, pException.getCursor(), s)).getVisualOrderText(); + return s == null ? component.getVisualOrderText() : (TextUtils.translate("command.context.parse_error", component, pException.getCursor(), s)).getVisualOrderText(); } private void updateUsageInfo() { @@ -242,7 +244,7 @@ private void updateUsageInfo() { } this.suggestions = null; - if (this.allowSuggestions && this.minecraft.options.autoSuggestions) { + if (this.allowSuggestions && this.minecraft.options.autoSuggestions().get()) { this.showSuggestions(false); } @@ -486,7 +488,7 @@ public void select(int pIndex) { Suggestion suggestion = this.suggestionList.get(this.current); ModCommandSuggestions.this.input.setSuggestion(ModCommandSuggestions.calculateSuggestionSuffix(ModCommandSuggestions.this.input.getValue(), suggestion.apply(this.originalContents))); if (this.lastNarratedEntry != this.current) { - NarratorChatListener.INSTANCE.sayNow(this.getNarrationMessage()); + Narrator.getNarrator().say(this.getNarrationMessage().getString(), true); } } @@ -507,7 +509,7 @@ Component getNarrationMessage() { this.lastNarratedEntry = this.current; Suggestion suggestion = this.suggestionList.get(this.current); Message message = suggestion.getTooltip(); - return message != null ? new TranslatableComponent("narration.suggestion.tooltip", this.current + 1, this.suggestionList.size(), suggestion.getText(), message) : new TranslatableComponent("narration.suggestion", this.current + 1, this.suggestionList.size(), suggestion.getText()); + return message != null ? TextUtils.translate("narration.suggestion.tooltip", this.current + 1, this.suggestionList.size(), suggestion.getText(), message) : TextUtils.translate("narration.suggestion", this.current + 1, this.suggestionList.size(), suggestion.getText()); } public void hide() { diff --git a/common/src/main/java/de/mrjulsen/crn/client/lang/ELanguage.java b/common/src/main/java/de/mrjulsen/crn/client/lang/ELanguage.java index f9882eba..e0de16a8 100644 --- a/common/src/main/java/de/mrjulsen/crn/client/lang/ELanguage.java +++ b/common/src/main/java/de/mrjulsen/crn/client/lang/ELanguage.java @@ -59,11 +59,11 @@ public static ClientLanguage getCurrentClientLanguage() { } public static MutableComponent translate(String key) { - return new ModTranslatableComponent(key); + return MutableComponent.create(new ModTranslatableComponent(key)); } public static MutableComponent translate(String key, Object... args) { - return new ModTranslatableComponent(key, args); + return MutableComponent.create(new ModTranslatableComponent(key, args)); } diff --git a/common/src/main/java/de/mrjulsen/crn/client/lang/ModTranslatableComponent.java b/common/src/main/java/de/mrjulsen/crn/client/lang/ModTranslatableComponent.java index b90f4201..63f2111b 100644 --- a/common/src/main/java/de/mrjulsen/crn/client/lang/ModTranslatableComponent.java +++ b/common/src/main/java/de/mrjulsen/crn/client/lang/ModTranslatableComponent.java @@ -10,204 +10,202 @@ import java.util.function.Consumer; import java.util.regex.Matcher; import java.util.regex.Pattern; + import net.minecraft.commands.CommandSourceStack; import net.minecraft.locale.Language; -import net.minecraft.network.chat.BaseComponent; import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.ComponentContents; import net.minecraft.network.chat.ComponentUtils; -import net.minecraft.network.chat.ContextAwareComponent; import net.minecraft.network.chat.FormattedText; import net.minecraft.network.chat.MutableComponent; import net.minecraft.network.chat.Style; -import net.minecraft.network.chat.TranslatableFormatException; +import net.minecraft.network.chat.contents.TranslatableFormatException; import net.minecraft.world.entity.Entity; import org.jetbrains.annotations.Nullable; @SuppressWarnings("all") -public class ModTranslatableComponent extends BaseComponent implements ContextAwareComponent { - private static final Object[] NO_ARGS = new Object[0]; - private static final FormattedText TEXT_PERCENT = FormattedText.of("%"); - private static final FormattedText TEXT_NULL = FormattedText.of("null"); - private final String key; - private final Object[] args; - @Nullable - private Language decomposedWith; - private List decomposedParts = ImmutableList.of(); - private static final Pattern FORMAT_PATTERN = Pattern.compile("%(?:(\\d+)\\$)?([A-Za-z%]|$)"); - - public ModTranslatableComponent(String key) { - this.key = key; - this.args = NO_ARGS; - } - - public ModTranslatableComponent(String key, Object... args) { - this.key = key; - this.args = args; - } - - private void decompose() { - Language language = ELanguage.getCurrentClientLanguage(); - if (language != this.decomposedWith) { - this.decomposedWith = language; - String string = language.getOrDefault(this.key); - - try { - ImmutableList.Builder builder = ImmutableList.builder(); - Objects.requireNonNull(builder); - this.decomposeTemplate(string, builder::add); - this.decomposedParts = builder.build(); - } catch (TranslatableFormatException var4) { - this.decomposedParts = ImmutableList.of(FormattedText.of(string)); - } - - } - } - - private void decomposeTemplate(String formatTemplate, Consumer consumer) { - Matcher matcher = FORMAT_PATTERN.matcher(formatTemplate); - - int i = 0; +public class ModTranslatableComponent implements ComponentContents { + private static final Object[] NO_ARGS = new Object[0]; + private static final FormattedText TEXT_PERCENT = FormattedText.of("%"); + private static final FormattedText TEXT_NULL = FormattedText.of("null"); + private final String key; + private final Object[] args; + @Nullable + private Language decomposedWith; + private List decomposedParts = ImmutableList.of(); + private static final Pattern FORMAT_PATTERN = Pattern.compile("%(?:(\\d+)\\$)?([A-Za-z%]|$)"); + + public ModTranslatableComponent(String string) { + this.key = string; + this.args = NO_ARGS; + } + + public ModTranslatableComponent(String string, Object... objects) { + this.key = string; + this.args = objects; + } + + private void decompose() { + Language language = Language.getInstance(); + if (language != this.decomposedWith) { + this.decomposedWith = language; + String string = language.getOrDefault(this.key); + + try { + ImmutableList.Builder builder = ImmutableList.builder(); + Objects.requireNonNull(builder); + this.decomposeTemplate(string, builder::add); + this.decomposedParts = builder.build(); + } catch (TranslatableFormatException var4) { + this.decomposedParts = ImmutableList.of(FormattedText.of(string)); + } + + } + } + + private void decomposeTemplate(String string, Consumer consumer) { + Matcher matcher = FORMAT_PATTERN.matcher(string); + + int i = 0; int j; - int l; - for (j = 0; matcher.find(j); j = l) { - int k = matcher.start(); - l = matcher.end(); - String string; - if (k > j) { - string = formatTemplate.substring(j, k); - if (string.indexOf(37) != -1) { - throw new IllegalArgumentException(); - } - - consumer.accept(FormattedText.of(string)); - } - - string = matcher.group(2); - String string2 = formatTemplate.substring(k, l); - if ("%".equals(string) && "%%".equals(string2)) { - consumer.accept(TEXT_PERCENT); - } else { - if (!"s".equals(string)) { - throw new IllegalArgumentException("Unsupported format: '" + string2 + "'"); - } - - String string3 = matcher.group(1); - int m = string3 != null ? Integer.parseInt(string3) - 1 : i++; - if (m < this.args.length) { - consumer.accept(this.getArgument(m)); - } - } - } - - if (j < formatTemplate.length()) { - String string4 = formatTemplate.substring(j); - if (string4.indexOf(37) != -1) { - throw new IllegalArgumentException(); - } - - consumer.accept(FormattedText.of(string4)); - } - } - - private FormattedText getArgument(int index) { - if (index >= this.args.length) { - throw new IllegalArgumentException(this + ", " + index); - } else { - Object object = this.args[index]; - if (object instanceof Component) { - return (Component) object; - } else { - return object == null ? TEXT_NULL : FormattedText.of(object.toString()); - } - } - } - - public ModTranslatableComponent plainCopy() { - return new ModTranslatableComponent(this.key, this.args); - } - - public Optional visitSelf(FormattedText.StyledContentConsumer consumer, Style style) { - this.decompose(); - Iterator var3 = this.decomposedParts.iterator(); - - Optional optional; - do { - if (!var3.hasNext()) { - return Optional.empty(); - } - - FormattedText formattedText = (FormattedText) var3.next(); - optional = formattedText.visit(consumer, style); - } while (!optional.isPresent()); - - return optional; - } - - public Optional visitSelf(FormattedText.ContentConsumer consumer) { - this.decompose(); - Iterator var2 = this.decomposedParts.iterator(); - - Optional optional; - do { - if (!var2.hasNext()) { - return Optional.empty(); - } - - FormattedText formattedText = (FormattedText) var2.next(); - optional = formattedText.visit(consumer); - } while (!optional.isPresent()); - - return optional; - } - - public MutableComponent resolve(@Nullable CommandSourceStack commandSourceStack, @Nullable Entity entity, - int recursionDepth) throws CommandSyntaxException { - Object[] objects = new Object[this.args.length]; - - for (int i = 0; i < objects.length; ++i) { - Object object = this.args[i]; - if (object instanceof Component) { - objects[i] = ComponentUtils.updateForEntity(commandSourceStack, (Component) object, entity, - recursionDepth); - } else { - objects[i] = object; + int l; + for (j = 0; matcher.find(j); j = l) { + int k = matcher.start(); + l = matcher.end(); + String string2; + if (k > j) { + string2 = string.substring(j, k); + if (string2.indexOf(37) != -1) { + throw new IllegalArgumentException(); + } + + consumer.accept(FormattedText.of(string2)); + } + + string2 = matcher.group(2); + String string3 = string.substring(k, l); + if ("%".equals(string2) && "%%".equals(string3)) { + consumer.accept(TEXT_PERCENT); + } else { + if (!"s".equals(string2)) { + throw new IllegalArgumentException("Unsupported format: '" + string3 + "'"); + } + + String string4 = matcher.group(1); + int m = string4 != null ? Integer.parseInt(string4) - 1 : i++; + if (m < this.args.length) { + consumer.accept(this.getArgument(m)); + } + } + } + + if (j < string.length()) { + String string5 = string.substring(j); + if (string5.indexOf(37) != -1) { + throw new IllegalArgumentException(); + } + + consumer.accept(FormattedText.of(string5)); + } + } + + public final FormattedText getArgument(int i) { + if (i >= this.args.length) { + throw new IllegalArgumentException(); + } else { + Object object = this.args[i]; + if (object instanceof Component) { + return (Component)object; + } else { + return object == null ? TEXT_NULL : FormattedText.of(object.toString()); + } + } + } + + public Optional visit(FormattedText.StyledContentConsumer styledContentConsumer, Style style) { + this.decompose(); + Iterator var3 = this.decomposedParts.iterator(); + + Optional optional; + do { + if (!var3.hasNext()) { + return Optional.empty(); + } + + FormattedText formattedText = (FormattedText)var3.next(); + optional = formattedText.visit(styledContentConsumer, style); + } while(!optional.isPresent()); + + return optional; + } + + public Optional visit(FormattedText.ContentConsumer contentConsumer) { + this.decompose(); + Iterator var2 = this.decomposedParts.iterator(); + + Optional optional; + do { + if (!var2.hasNext()) { + return Optional.empty(); + } + + FormattedText formattedText = (FormattedText)var2.next(); + optional = formattedText.visit(contentConsumer); + } while(!optional.isPresent()); + + return optional; + } + + public MutableComponent resolve(@Nullable CommandSourceStack commandSourceStack, @Nullable Entity entity, int i) throws CommandSyntaxException { + Object[] objects = new Object[this.args.length]; + + for(int j = 0; j < objects.length; ++j) { + Object object = this.args[j]; + if (object instanceof Component) { + objects[j] = ComponentUtils.updateForEntity(commandSourceStack, (Component)object, entity, i); + } else { + objects[j] = object; + } + } + + return MutableComponent.create(new ModTranslatableComponent(this.key, objects)); + } + + public boolean equals(Object object) { + if (this == object) { + return true; + } else { + boolean var10000; + if (object instanceof ModTranslatableComponent) { + ModTranslatableComponent ModTranslatableComponent = (ModTranslatableComponent)object; + if (this.key.equals(ModTranslatableComponent.getKey()) && Arrays.equals(this.args, ModTranslatableComponent.getArgs())) { + var10000 = true; + return var10000; } - } - - return new ModTranslatableComponent(this.key, objects); - } - - public boolean equals(Object object) { - if (this == object) { - return true; - } else if (!(object instanceof ModTranslatableComponent)) { - return false; - } else { - ModTranslatableComponent ModTranslatableComponent = (ModTranslatableComponent) object; - return Arrays.equals(this.args, ModTranslatableComponent.args) && this.key.equals(ModTranslatableComponent.key) - && super.equals(object); - } - } - - public int hashCode() { - int i = super.hashCode(); - i = 31 * i + this.key.hashCode(); - i = 31 * i + Arrays.hashCode(this.args); - return i; - } - - public String toString() { - String var10000 = this.key; - return "ModTranslatableComponent{key='" + var10000 + "', args=" + Arrays.toString(this.args) + ", siblings=" - + this.siblings + ", style=" + this.getStyle() + "}"; - } - - public String getKey() { - return this.key; - } - - public Object[] getArgs() { - return this.args; - } + } + + var10000 = false; + return var10000; + } + } + + public int hashCode() { + int i = this.key.hashCode(); + i = 31 * i + Arrays.hashCode(this.args); + return i; + } + + public String toString() { + String var10000 = this.key; + return "translation{key='" + var10000 + "', args=" + Arrays.toString(this.args) + "}"; + } + + public String getKey() { + return this.key; + } + + public Object[] getArgs() { + return this.args; + } } diff --git a/common/src/main/java/de/mrjulsen/crn/event/listeners/JourneyListener.java b/common/src/main/java/de/mrjulsen/crn/event/listeners/JourneyListener.java index 9caa2e72..113ce427 100644 --- a/common/src/main/java/de/mrjulsen/crn/event/listeners/JourneyListener.java +++ b/common/src/main/java/de/mrjulsen/crn/event/listeners/JourneyListener.java @@ -27,7 +27,6 @@ import de.mrjulsen.mcdragonlib.util.TimeUtils; import net.minecraft.client.Minecraft; import net.minecraft.network.chat.Component; -import net.minecraft.network.chat.KeybindComponent; public class JourneyListener { @@ -123,7 +122,7 @@ public JourneyListener start() { TimeUtils.parseTime((int)((currentStation().getEstimatedTimeWithThreshold() + DragonLib.DAYTIME_SHIFT) % DragonLib.TICKS_PER_DAY), ModClientConfig.TIME_FORMAT.get()), currentStation().getInfo().platform() ); - String narratorText = text.getString() + ". " + ELanguage.translate(keyOptionsText, new KeybindComponent(keyKeybindOptions)).getString(); + String narratorText = text.getString() + ". " + ELanguage.translate(keyOptionsText, TextUtils.keybind(keyKeybindOptions)).getString(); onJourneyBegin.values().forEach(x -> { if (x.isPresent()) { diff --git a/common/src/main/resources/createrailwaysnavigator.accesswidener b/common/src/main/resources/createrailwaysnavigator.accesswidener index f8ea90e1..d22c6f26 100644 --- a/common/src/main/resources/createrailwaysnavigator.accesswidener +++ b/common/src/main/resources/createrailwaysnavigator.accesswidener @@ -1,3 +1,2 @@ accessWidener v2 named -accessible class net/minecraft/client/gui/Font$StringRenderOutput -accessible field net/minecraft/client/gui/chat/NarratorChatListener narrator Lcom/mojang/text2speech/Narrator; \ No newline at end of file +accessible class net/minecraft/client/gui/Font$StringRenderOutput \ No newline at end of file diff --git a/fabric/build.gradle b/fabric/build.gradle index 67863973..8da14722 100644 --- a/fabric/build.gradle +++ b/fabric/build.gradle @@ -19,26 +19,11 @@ configurations { developmentFabric.extendsFrom common } -repositories { - maven { url = "https://maven.shedaniel.me/" } // Cloth Config, REI - maven { url = "https://maven.blamejared.com/" } // JEI - maven { url = "https://maven.parchmentmc.org" } // Parchment mappings - maven { url = "https://maven.quiltmc.org/repository/release" } // Quilt Mappings - maven { url = "https://api.modrinth.com/maven" } // LazyDFU - maven { url = "https://maven.terraformersmc.com/releases/" } // Mod Menu - maven { url = "https://mvn.devos.one/snapshots/" } // Create, Porting Lib, Forge Tags, Milk Lib, Registrate - maven { url = "https://raw.githubusercontent.com/Fuzss/modresources/main/maven/" } // Forge Config API Port - maven { url = "https://maven.jamieswhiteshirt.com/libs-release" } // Reach Entity Attributes - maven { url = "https://jitpack.io/" } // Mixin Extras, Fabric ASM - maven { url = "https://maven.tterrag.com/" } // Flywheel -} - dependencies { modImplementation "net.fabricmc:fabric-loader:${rootProject.fabric_loader_version}" modApi "net.fabricmc.fabric-api:fabric-api:${rootProject.fabric_api_version}" - modApi(include("de.mrjulsen.mcdragonlib:dragonlib-fabric:${rootProject.minecraft_version}-${rootProject.dragonlib_version}")) - - // Create - dependencies are added transitively + + modImplementation(include("de.mrjulsen.mcdragonlib:dragonlib-fabric:${rootProject.minecraft_version}-${rootProject.dragonlib_version}")) modImplementation("com.simibubi.create:create-fabric-${rootProject.minecraft_version}:${rootProject.create_fabric_version}") common(project(path: ":common", configuration: "namedElements")) { transitive false } @@ -86,6 +71,7 @@ publishing { } } + // See https://docs.gradle.org/current/userguide/publishing_maven.html for information on how to set up publishing. repositories { } } diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json index 08456ff4..4a6cb64d 100644 --- a/fabric/src/main/resources/fabric.mod.json +++ b/fabric/src/main/resources/fabric.mod.json @@ -26,9 +26,9 @@ ], "depends": { "fabric": "*", - "minecraft": ">=1.18.2", - "architectury": ">=4.11.93", - "dragonlib": "1.18.2-2.1.6", + "minecraft": ">=1.19.2", + "architectury": ">=6.5.85", + "dragonlib": "1.19.2-2.1.6", "create": "*" } } \ No newline at end of file diff --git a/forge/build.gradle b/forge/build.gradle index 3083a40c..0a2838d2 100644 --- a/forge/build.gradle +++ b/forge/build.gradle @@ -27,19 +27,10 @@ configurations { developmentForge.extendsFrom common } -repositories { - maven { // Create Forge and Registrate Forge - url = "https://maven.tterrag.com/" - content { - includeGroup("com.tterrag.registrate") - includeGroup("com.simibubi.create") - } - } -} - dependencies { forge "net.minecraftforge:forge:${rootProject.forge_version}" - modApi(include("de.mrjulsen.mcdragonlib:dragonlib-forge:${rootProject.minecraft_version}-${rootProject.dragonlib_version}")) + + modImplementation(include("de.mrjulsen.mcdragonlib:dragonlib-forge:${rootProject.minecraft_version}-${rootProject.dragonlib_version}")) modImplementation("com.simibubi.create:create-${rootProject.minecraft_version}:${rootProject.create_forge_version}:slim") { transitive = false } modImplementation("com.tterrag.registrate:Registrate:${rootProject.registrate_forge_version}") @@ -90,6 +81,8 @@ publishing { } } + // See https://docs.gradle.org/current/userguide/publishing_maven.html for information on how to set up publishing. repositories { + // Add repositories to publish to here. } } diff --git a/forge/src/main/resources/META-INF/mods.toml b/forge/src/main/resources/META-INF/mods.toml index 4a2b07b2..c773910c 100644 --- a/forge/src/main/resources/META-INF/mods.toml +++ b/forge/src/main/resources/META-INF/mods.toml @@ -1,5 +1,5 @@ modLoader = "javafml" -loaderVersion = "[40,)" +loaderVersion = "[43,)" #issueTrackerURL = "" license = "GNU General Public License v3.0" @@ -19,20 +19,27 @@ logoFile="icon.png" [[dependencies.createrailwaysnavigator]] modId = "forge" mandatory = true -versionRange = "[40,)" +versionRange = "[43,)" ordering = "NONE" side = "BOTH" [[dependencies.createrailwaysnavigator]] modId = "minecraft" mandatory = true -versionRange = "[1.18.2,)" +versionRange = "[1.19.2,)" ordering = "NONE" side = "BOTH" [[dependencies.createrailwaysnavigator]] modId = "architectury" mandatory = true -versionRange = "[4.11.93,)" +versionRange = "[6.5.85,)" +ordering = "AFTER" +side = "BOTH" + +[[dependencies.createrailwaysnavigator]] +modId = "dragonlib" +mandatory = true +versionRange = "[1.19.2-2.1.6,)" ordering = "AFTER" side = "BOTH" \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index bbbee8c8..e3aca12d 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,25 +1,18 @@ org.gradle.jvmargs=-Xmx6G -minecraft_version=1.18.2 +minecraft_version=1.19.2 enabled_platforms=fabric,forge archives_base_name=createrailwaysnavigator mod_version=0.5.0 -maven_group=de.mrjulsen.crn +maven_group=de.mrjulsen.drn -parchmentmc_version=2022.11.06 -architectury_version=4.11.93 dragonlib_version=2.1.6 - -create_fabric_version = 0.5.1-f-build.1333+mc1.18.2 -create_forge_version = 0.5.1.e-318 -registrate_forge_version = MC1.18.2-1.1.3 -flywheel_forge_version = 0.6.10-105 +create_fabric_version = 0.5.1-f-build.1416+mc1.19.2 +create_forge_version = 0.5.1.f-46 +registrate_forge_version = MC1.19-1.1.5 +flywheel_forge_version = 0.6.10-20 fabric_loader_version=0.14.23 -fabric_api_version=0.76.0+1.18.2 - -forge_version=1.18.2-40.2.10 - - - +fabric_api_version=0.76.1+1.19.2 +forge_version=1.19.2-43.3.0 \ No newline at end of file diff --git a/settings.gradle b/settings.gradle index 34e3be87..ccd48de9 100644 --- a/settings.gradle +++ b/settings.gradle @@ -2,8 +2,7 @@ pluginManagement { repositories { maven { url "https://maven.fabricmc.net/" } maven { url "https://maven.architectury.dev/" } - maven { url "https://maven.minecraftforge.net/" } - maven { url "https://maven.parchmentmc.org/"} + maven { url "https://files.minecraftforge.net/maven/" } gradlePluginPortal() } } From 7b628ff084c10a218dea6404ffbf1e4943e7cae3 Mon Sep 17 00:00:00 2001 From: MisterJulsen Date: Sun, 5 May 2024 21:12:38 +0200 Subject: [PATCH 02/38] Ported to 1.20.1 --- .vscode/settings.json | 3 +- common/build.gradle | 2 +- .../mrjulsen/crn/CreateRailwaysNavigator.java | 2 + .../block/AbstractAdvancedDisplayBlock.java | 2 +- .../crn/block/TrainStationClockBlock.java | 2 +- .../ber/AdvancedDisplayRenderInstance.java | 16 ++--- .../client/ber/TrainStationClockRenderer.java | 16 ++--- .../mrjulsen/crn/client/gui/ModGuiIcons.java | 18 +++-- .../crn/client/gui/NavigatorToast.java | 10 +-- .../overlay/RouteDetailsOverlayScreen.java | 6 +- .../gui/screen/AbstractBlacklistScreen.java | 4 +- .../AbstractEntryListSettingsScreen.java | 4 +- .../screen/AdvancedDisplaySettingsScreen.java | 12 ++-- .../gui/screen/CustomIconScreenElement.java | 6 +- .../crn/client/gui/screen/LoadingScreen.java | 2 +- .../client/gui/screen/NavigatorScreen.java | 24 +++---- .../client/gui/screen/RouteDetailsScreen.java | 8 +-- .../screen/RouteOverlaySettingsScreen.java | 8 +-- .../gui/screen/SearchSettingsScreen.java | 18 ++--- .../client/gui/widgets/AliasEntryWidget.java | 31 ++++---- .../crn/client/gui/widgets/ExpandButton.java | 6 +- .../gui/widgets/IEntryListSettingsOption.java | 4 +- .../gui/widgets/ModCommandSuggestions.java | 68 +++++++++--------- .../gui/widgets/RouteEntryOverviewWidget.java | 22 +++--- .../gui/widgets/SettingsOptionWidget.java | 6 +- .../gui/widgets/TrainGroupEntryWidget.java | 22 +++--- .../mrjulsen/crn/client/lang/ELanguage.java | 6 +- .../crn/mixin/MountedStorageManagerMixin.java | 2 +- .../cts/AdvancedDisplayUpdatePacket.java | 2 +- .../packets/cts/NavigationRequestPacket.java | 4 +- .../cts/NearestStationRequestPacket.java | 4 +- .../cts/NextConnectionsRequestPacket.java | 2 +- .../packets/cts/RealtimeRequestPacket.java | 4 +- .../packets/cts/TrainDataRequestPacket.java | 2 +- .../de/mrjulsen/crn/registry/ModBlocks.java | 8 ++- .../crn/registry/ModCreativeModeTab.java | 21 ++++-- .../de/mrjulsen/crn/registry/ModExtras.java | 4 +- .../de/mrjulsen/crn/registry/ModItems.java | 3 +- .../crn/fabric/CRNPlatformSpecificImpl.java | 6 +- fabric/src/main/resources/fabric.mod.json | 6 +- forge/src/main/resources/META-INF/mods.toml | 19 +++-- forge/src/main/resources/icon.png | Bin 45387 -> 0 bytes forge/src/main/resources/pack.mcmeta | 2 +- gradle.properties | 14 ++-- update.json | 4 +- 45 files changed, 235 insertions(+), 200 deletions(-) delete mode 100644 forge/src/main/resources/icon.png diff --git a/.vscode/settings.json b/.vscode/settings.json index d7df2409..5aa26aef 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,4 +1,5 @@ { "java.compile.nullAnalysis.mode": "disabled", - "commentTranslate.hover.enabled": false + "commentTranslate.hover.enabled": false, + "java.configuration.updateBuildConfiguration": "automatic" } \ No newline at end of file diff --git a/common/build.gradle b/common/build.gradle index 3b9180cc..cf067487 100644 --- a/common/build.gradle +++ b/common/build.gradle @@ -12,7 +12,7 @@ dependencies { modImplementation "net.fabricmc:fabric-loader:${rootProject.fabric_loader_version}" modImplementation(include("de.mrjulsen.mcdragonlib:dragonlib-fabric:${rootProject.minecraft_version}-${rootProject.dragonlib_version}")) - modImplementation("com.simibubi.create:create-fabric-${rootProject.minecraft_version}:${rootProject.create_fabric_version}") + modCompileOnly("com.simibubi.create:create-fabric-${rootProject.minecraft_version}:${rootProject.create_fabric_version}") } diff --git a/common/src/main/java/de/mrjulsen/crn/CreateRailwaysNavigator.java b/common/src/main/java/de/mrjulsen/crn/CreateRailwaysNavigator.java index 858a4f19..78b42895 100644 --- a/common/src/main/java/de/mrjulsen/crn/CreateRailwaysNavigator.java +++ b/common/src/main/java/de/mrjulsen/crn/CreateRailwaysNavigator.java @@ -30,6 +30,7 @@ import de.mrjulsen.crn.network.packets.stc.TrainDataResponsePacket; import de.mrjulsen.crn.registry.ModBlockEntities; import de.mrjulsen.crn.registry.ModBlocks; +import de.mrjulsen.crn.registry.ModCreativeModeTab; import de.mrjulsen.crn.registry.ModExtras; import de.mrjulsen.crn.registry.ModItems; import de.mrjulsen.mcdragonlib.net.NetworkManagerBase; @@ -77,6 +78,7 @@ public static void load() {} public static void init() { + ModCreativeModeTab.setup(); ModBlocks.register(); ModItems.register(); ModBlockEntities.register(); diff --git a/common/src/main/java/de/mrjulsen/crn/block/AbstractAdvancedDisplayBlock.java b/common/src/main/java/de/mrjulsen/crn/block/AbstractAdvancedDisplayBlock.java index a24799b2..0abb09c4 100644 --- a/common/src/main/java/de/mrjulsen/crn/block/AbstractAdvancedDisplayBlock.java +++ b/common/src/main/java/de/mrjulsen/crn/block/AbstractAdvancedDisplayBlock.java @@ -296,7 +296,7 @@ public InteractionResult use(BlockState pState, Level pLevel, BlockPos pPos, Pla if (dye != null) { pLevel.playSound(null, pPos, SoundEvents.DYE_USE, SoundSource.BLOCKS, 1.0F, 1.0F); blockEntity.applyToAll(be -> { - be.setColor(dye == DyeColor.ORANGE ? 0xFF9900 : dye.getMaterialColor().col); + be.setColor(dye == DyeColor.ORANGE ? 0xFF9900 : dye.getMapColor().col); be.notifyUpdate(); }); diff --git a/common/src/main/java/de/mrjulsen/crn/block/TrainStationClockBlock.java b/common/src/main/java/de/mrjulsen/crn/block/TrainStationClockBlock.java index 05585d3c..4cb3e840 100644 --- a/common/src/main/java/de/mrjulsen/crn/block/TrainStationClockBlock.java +++ b/common/src/main/java/de/mrjulsen/crn/block/TrainStationClockBlock.java @@ -62,7 +62,7 @@ public InteractionResult use(BlockState pState, Level pLevel, BlockPos pPos, Pla DyeColor dye = dyeItem.getDyeColor(); if (dye != null) { pLevel.playSound(null, pPos, SoundEvents.DYE_USE, SoundSource.BLOCKS, 1.0F, 1.0F); - blockEntity.setColor(dye == DyeColor.ORANGE ? 0xFF9900 : dye.getMaterialColor().col); + blockEntity.setColor(dye == DyeColor.ORANGE ? 0xFF9900 : dye.getMapColor().col); if (pLevel.isClientSide) { blockEntity.getRenderer().update(pLevel, pPos, pState, blockEntity, EUpdateReason.BLOCK_CHANGED); diff --git a/common/src/main/java/de/mrjulsen/crn/client/ber/AdvancedDisplayRenderInstance.java b/common/src/main/java/de/mrjulsen/crn/client/ber/AdvancedDisplayRenderInstance.java index 6c2230f7..1738821d 100644 --- a/common/src/main/java/de/mrjulsen/crn/client/ber/AdvancedDisplayRenderInstance.java +++ b/common/src/main/java/de/mrjulsen/crn/client/ber/AdvancedDisplayRenderInstance.java @@ -8,7 +8,7 @@ import java.util.function.Supplier; import com.mojang.blaze3d.vertex.PoseStack; -import com.mojang.math.Vector3f; +import com.mojang.math.Axis; import de.mrjulsen.crn.block.AbstractAdvancedDisplayBlock; import de.mrjulsen.crn.block.AbstractAdvancedSidedDisplayBlock; @@ -115,9 +115,9 @@ public void render(BlockEntityRendererContext context, AdvancedDisplayBlockEntit pPoseStack.pushPose(); pPoseStack.translate(offset.getFirst(), offset.getSecond(), zOffset.getFirst()); - pPoseStack.mulPose(Vector3f.XP.rotationDegrees(rotation.getFirst())); - pPoseStack.mulPose(Vector3f.YP.rotationDegrees(rotation.getSecond())); - pPoseStack.mulPose(Vector3f.ZP.rotationDegrees(rotation.getThird())); + pPoseStack.mulPose(Axis.XP.rotationDegrees(rotation.getFirst())); + pPoseStack.mulPose(Axis.YP.rotationDegrees(rotation.getSecond())); + pPoseStack.mulPose(Axis.ZP.rotationDegrees(rotation.getThird())); pPoseStack.scale(scale, scale, 1); renderSubtype.renderAdditional(context, pBlockEntity, this, pPartialTicks, pPoseStack, pBufferSource, light, pOverlay, false); labels.forEach(x -> x.render(pPoseStack, pBufferSource, light)); @@ -125,12 +125,12 @@ public void render(BlockEntityRendererContext context, AdvancedDisplayBlockEntit if (!(pBlockEntity.getBlockState().getBlock() instanceof AbstractAdvancedSidedDisplayBlock) || pBlockEntity.getBlockState().getValue(AbstractAdvancedSidedDisplayBlock.SIDE) == ESide.BOTH) { pPoseStack.pushPose(); - pPoseStack.mulPose(Vector3f.YP.rotationDegrees(180)); + pPoseStack.mulPose(Axis.YP.rotationDegrees(180)); pPoseStack.translate(-pBlockEntity.getXSize() * 16, 0, -16); pPoseStack.translate(offset.getFirst(), offset.getSecond(), zOffset.getSecond()); - pPoseStack.mulPose(Vector3f.XP.rotationDegrees(rotation.getFirst())); - pPoseStack.mulPose(Vector3f.YP.rotationDegrees(rotation.getSecond())); - pPoseStack.mulPose(Vector3f.ZP.rotationDegrees(rotation.getThird())); + pPoseStack.mulPose(Axis.XP.rotationDegrees(rotation.getFirst())); + pPoseStack.mulPose(Axis.YP.rotationDegrees(rotation.getSecond())); + pPoseStack.mulPose(Axis.ZP.rotationDegrees(rotation.getThird())); pPoseStack.scale(scale, scale, 1); renderSubtype.renderAdditional(context, pBlockEntity, this, pPartialTicks, pPoseStack, pBufferSource, light, pOverlay, true); labels.forEach(x -> x.render(pPoseStack, pBufferSource, light)); diff --git a/common/src/main/java/de/mrjulsen/crn/client/ber/TrainStationClockRenderer.java b/common/src/main/java/de/mrjulsen/crn/client/ber/TrainStationClockRenderer.java index b5d00876..16c41188 100644 --- a/common/src/main/java/de/mrjulsen/crn/client/ber/TrainStationClockRenderer.java +++ b/common/src/main/java/de/mrjulsen/crn/client/ber/TrainStationClockRenderer.java @@ -1,7 +1,7 @@ package de.mrjulsen.crn.client.ber; import com.mojang.blaze3d.vertex.PoseStack; -import com.mojang.math.Vector3f; +import com.mojang.math.Axis; import de.mrjulsen.crn.CreateRailwaysNavigator; import de.mrjulsen.crn.block.be.TrainStationClockBlockEntity; @@ -32,30 +32,30 @@ public void render(BlockEntityRendererContext context, TrainStationClockBlockEnt context.renderUtils().renderTexture(DIAL_TEXTURE, pBufferSource, pBlockEntity, pPoseStack, !pBlockEntity.isGlowing(), -7, -7, -0.2f, 14, 14, 0, 0, 1, 1, pBlockEntity.getBlockState().getValue(HorizontalDirectionalBlock.FACING), (0xFF << 24) | (pBlockEntity.getColor()), pBlockEntity.isGlowing() ? LightTexture.FULL_BRIGHT : pPackedLight); pPoseStack.pushPose(); - pPoseStack.mulPose(Vector3f.ZP.rotationDegrees(-90 + ModUtils.clockHandDegrees(pBlockEntity.getLevel().getDayTime() + DragonLib.DAYTIME_SHIFT, 12000))); + pPoseStack.mulPose(Axis.ZP.rotationDegrees(-90 + ModUtils.clockHandDegrees(pBlockEntity.getLevel().getDayTime() + DragonLib.DAYTIME_SHIFT, 12000))); context.renderUtils().fillColor(pBufferSource, pBlockEntity, 0xFF191919, pPoseStack, -0.5f, -0.5f, 0, 6, 1, pBlockEntity.getBlockState().getValue(HorizontalDirectionalBlock.FACING), pPackedLight); pPoseStack.popPose(); pPoseStack.pushPose(); - pPoseStack.mulPose(Vector3f.ZP.rotationDegrees(-90 + ModUtils.clockHandDegrees(pBlockEntity.getLevel().getDayTime() + DragonLib.DAYTIME_SHIFT, 1000))); + pPoseStack.mulPose(Axis.ZP.rotationDegrees(-90 + ModUtils.clockHandDegrees(pBlockEntity.getLevel().getDayTime() + DragonLib.DAYTIME_SHIFT, 1000))); context.renderUtils().fillColor(pBufferSource, pBlockEntity, 0xFF222222, pPoseStack, -0.5f, -0.5f, 0.1f, 7, 1, pBlockEntity.getBlockState().getValue(HorizontalDirectionalBlock.FACING), pPackedLight); pPoseStack.popPose(); pPoseStack.translate(0, 0, -z * 2); pPoseStack.pushPose(); - pPoseStack.mulPose(Vector3f.YP.rotationDegrees(180)); + pPoseStack.mulPose(Axis.YP.rotationDegrees(180)); context.renderUtils().renderTexture(DIAL_TEXTURE, pBufferSource, pBlockEntity, pPoseStack, !pBlockEntity.isGlowing(), -7, -7, -0.2f, 14, 14, 0, 0, 1, 1, pBlockEntity.getBlockState().getValue(HorizontalDirectionalBlock.FACING).getOpposite(), (0xFF << 24) | (pBlockEntity.getColor()), pBlockEntity.isGlowing() ? LightTexture.FULL_BRIGHT : pPackedLight); pPoseStack.popPose(); pPoseStack.pushPose(); - pPoseStack.mulPose(Vector3f.ZN.rotationDegrees(-90 + ModUtils.clockHandDegrees(pBlockEntity.getLevel().getDayTime() + DragonLib.DAYTIME_SHIFT, 12000))); - pPoseStack.mulPose(Vector3f.YP.rotationDegrees(180)); + pPoseStack.mulPose(Axis.ZN.rotationDegrees(-90 + ModUtils.clockHandDegrees(pBlockEntity.getLevel().getDayTime() + DragonLib.DAYTIME_SHIFT, 12000))); + pPoseStack.mulPose(Axis.YP.rotationDegrees(180)); context.renderUtils().fillColor(pBufferSource, pBlockEntity, 0xFF191919, pPoseStack, -0.5f, -0.5f, 0, 6, 1, pBlockEntity.getBlockState().getValue(HorizontalDirectionalBlock.FACING), pPackedLight); pPoseStack.popPose(); pPoseStack.pushPose(); - pPoseStack.mulPose(Vector3f.ZN.rotationDegrees(-90 + ModUtils.clockHandDegrees(pBlockEntity.getLevel().getDayTime() + DragonLib.DAYTIME_SHIFT, 1000))); - pPoseStack.mulPose(Vector3f.YP.rotationDegrees(180)); + pPoseStack.mulPose(Axis.ZN.rotationDegrees(-90 + ModUtils.clockHandDegrees(pBlockEntity.getLevel().getDayTime() + DragonLib.DAYTIME_SHIFT, 1000))); + pPoseStack.mulPose(Axis.YP.rotationDegrees(180)); context.renderUtils().fillColor(pBufferSource, pBlockEntity, 0xFF222222, pPoseStack, -0.5f, -0.5f, 0.1f, 7, 1, pBlockEntity.getBlockState().getValue(HorizontalDirectionalBlock.FACING), pPackedLight); pPoseStack.popPose(); } diff --git a/common/src/main/java/de/mrjulsen/crn/client/gui/ModGuiIcons.java b/common/src/main/java/de/mrjulsen/crn/client/gui/ModGuiIcons.java index 002b24c0..c7a94be1 100644 --- a/common/src/main/java/de/mrjulsen/crn/client/gui/ModGuiIcons.java +++ b/common/src/main/java/de/mrjulsen/crn/client/gui/ModGuiIcons.java @@ -7,7 +7,7 @@ import de.mrjulsen.crn.CreateRailwaysNavigator; import de.mrjulsen.mcdragonlib.client.util.Graphics; -import de.mrjulsen.mcdragonlib.client.util.GuiUtils; +import net.minecraft.client.gui.GuiGraphics; import net.minecraft.resources.ResourceLocation; public enum ModGuiIcons { @@ -90,19 +90,29 @@ public AllIcons getAsCreateIcon() { } public void render(Graphics graphics, int x, int y) { - GuiUtils.drawTexture(ModGuiIcons.ICON_LOCATION, graphics, x, y, getU(), getV(), ICON_SIZE, ICON_SIZE); + graphics.graphics().blit(ModGuiIcons.ICON_LOCATION, x, y, getU(), getV(), ICON_SIZE, ICON_SIZE); } public static class ModAllIcons extends AllIcons { + int u, v; + public ModAllIcons(int x, int y) { super(x, y); + this.u = x * ICON_SIZE; + this.v = y * ICON_SIZE; + } + + + + @Override + public void render(GuiGraphics graphics, int x, int y) { + graphics.blit(ICON_LOCATION, x, y, 0, u, v, ICON_SIZE, ICON_SIZE, 256, 256); } @Override public void bind() { RenderSystem.setShaderTexture(0, ICON_LOCATION); - } - + } } } diff --git a/common/src/main/java/de/mrjulsen/crn/client/gui/NavigatorToast.java b/common/src/main/java/de/mrjulsen/crn/client/gui/NavigatorToast.java index 5698e9e8..8800b9b5 100644 --- a/common/src/main/java/de/mrjulsen/crn/client/gui/NavigatorToast.java +++ b/common/src/main/java/de/mrjulsen/crn/client/gui/NavigatorToast.java @@ -6,7 +6,6 @@ import com.google.common.collect.ImmutableList; import com.mojang.blaze3d.systems.RenderSystem; -import com.mojang.blaze3d.vertex.PoseStack; import de.mrjulsen.crn.CreateRailwaysNavigator; import de.mrjulsen.mcdragonlib.client.util.Graphics; @@ -14,6 +13,7 @@ import de.mrjulsen.mcdragonlib.core.EAlignment; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.Font; +import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.components.toasts.Toast; import net.minecraft.client.gui.components.toasts.ToastComponent; import net.minecraft.network.chat.Component; @@ -69,13 +69,13 @@ public int width() { * @param pTimeSinceLastVisible time in milliseconds */ @SuppressWarnings("resource") - public Toast.Visibility render(PoseStack pPoseStack, ToastComponent pToastComponent, long pTimeSinceLastVisible) { + public Toast.Visibility render(GuiGraphics guiGraphics, ToastComponent pToastComponent, long pTimeSinceLastVisible) { if (this.changed) { this.lastChanged = pTimeSinceLastVisible; this.changed = false; } - Graphics graphics = new Graphics(pPoseStack); + Graphics graphics = new Graphics(guiGraphics, guiGraphics.pose()); RenderSystem.setShaderTexture(0, TEXTURE); RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); @@ -97,8 +97,8 @@ public Toast.Visibility render(PoseStack pPoseStack, ToastComponent pToastCompon //pToastComponent.getMinecraft().font.draw(pPoseStack, this.title, 40, 7.0F, -256); for (int i = 0; i < this.messageLines.size(); ++i) { - //GuiUtils.drawString(graphics, pToastComponent.getMinecraft().font, 40, (20 + i * lineHeight), this.messageLines.get(i), -1, EAlignment.LEFT, false); - pToastComponent.getMinecraft().font.draw(pPoseStack, this.messageLines.get(i), 40, (float) (20 + i * lineHeight), -1); + //GuiUtils.drawString(graphics, pToastComponent.getMinecraft().font, 40, 7, title, -256, EAlignment.LEFT, false); + graphics.graphics().drawString(Minecraft.getInstance().font, this.messageLines.get(i), 40, (20 + i * lineHeight), -1, false); } } diff --git a/common/src/main/java/de/mrjulsen/crn/client/gui/overlay/RouteDetailsOverlayScreen.java b/common/src/main/java/de/mrjulsen/crn/client/gui/overlay/RouteDetailsOverlayScreen.java index eb0eab3f..6e7c91cb 100644 --- a/common/src/main/java/de/mrjulsen/crn/client/gui/overlay/RouteDetailsOverlayScreen.java +++ b/common/src/main/java/de/mrjulsen/crn/client/gui/overlay/RouteDetailsOverlayScreen.java @@ -750,7 +750,7 @@ public void renderPageTransfer(Graphics graphics, int x, int y, float alphaPerce y += 5 + ModGuiIcons.ICON_SIZE; // Details - this.messageLabel.renderLeftAligned(graphics.poseStack(), x + 15 + ModGuiIcons.ICON_SIZE, y, 12, 0xDBDBDB | fontAlpha); + this.messageLabel.renderLeftAligned(graphics.graphics(), x + 15 + ModGuiIcons.ICON_SIZE, y, 12, 0xDBDBDB | fontAlpha); } public void renderPageJourneyInterrupted(Graphics graphics, int x, int y, float alphaPercentage, int fontAlpha) { @@ -760,7 +760,7 @@ public void renderPageJourneyInterrupted(Graphics graphics, int x, int y, float y += 5 + ModGuiIcons.ICON_SIZE; // Details - this.messageLabel.renderLeftAligned(graphics.poseStack(), x + 10, y, 10, 0xDBDBDB | fontAlpha); + this.messageLabel.renderLeftAligned(graphics.graphics(), x + 10, y, 10, 0xDBDBDB | fontAlpha); } public void renderPageJourneyCompleted(Graphics graphics, int x, int y, float alphaPercentage, int fontAlpha) { @@ -770,7 +770,7 @@ public void renderPageJourneyCompleted(Graphics graphics, int x, int y, float al y += 5 + ModGuiIcons.ICON_SIZE; // Details - this.messageLabel.renderLeftAligned(graphics.poseStack(), x + 10, y, 10, 0xDBDBDB | fontAlpha); + this.messageLabel.renderLeftAligned(graphics.graphics(), x + 10, y, 10, 0xDBDBDB | fontAlpha); } //#endregion diff --git a/common/src/main/java/de/mrjulsen/crn/client/gui/screen/AbstractBlacklistScreen.java b/common/src/main/java/de/mrjulsen/crn/client/gui/screen/AbstractBlacklistScreen.java index 1230317a..30882bb8 100644 --- a/common/src/main/java/de/mrjulsen/crn/client/gui/screen/AbstractBlacklistScreen.java +++ b/common/src/main/java/de/mrjulsen/crn/client/gui/screen/AbstractBlacklistScreen.java @@ -172,7 +172,7 @@ protected void updateEditorSubwidgets(DLEditBox field) { clearSuggestions(); - suggestions = new ModStationSuggestions(minecraft, this, field, minecraft.font, getViableStations(field), field.getHeight() + 2 + field.y); + suggestions = new ModStationSuggestions(minecraft, this, field, minecraft.font, getViableStations(field), field.getHeight() + 2 + field.getY()); suggestions.setAllowSuggestions(true); suggestions.updateCommandInfo(); } @@ -280,7 +280,7 @@ public void renderFrontLayer(Graphics graphics, int mouseX, int mouseY, float pa if (suggestions != null) { graphics.poseStack().pushPose(); graphics.poseStack().translate(0, 0, 500); - suggestions.render(graphics.poseStack(), mouseX, mouseY); + suggestions.render(graphics.graphics(), mouseX, mouseY); graphics.poseStack().popPose(); } diff --git a/common/src/main/java/de/mrjulsen/crn/client/gui/screen/AbstractEntryListSettingsScreen.java b/common/src/main/java/de/mrjulsen/crn/client/gui/screen/AbstractEntryListSettingsScreen.java index 343f763f..d35e5987 100644 --- a/common/src/main/java/de/mrjulsen/crn/client/gui/screen/AbstractEntryListSettingsScreen.java +++ b/common/src/main/java/de/mrjulsen/crn/client/gui/screen/AbstractEntryListSettingsScreen.java @@ -246,7 +246,7 @@ public void renderMainLayer(Graphics graphics, int pMouseX, int pMouseY, float p widget.setYPos(currentY); widget.calcHeight(); if (currentY < guiTop + AREA_Y + AREA_H - scrollOffset && currentY + widget.getHeight() > guiTop + AREA_Y - scrollOffset) { - widget.render(graphics.poseStack(), pMouseX, (int)(pMouseY - scrollOffset), pPartialTick); + widget.render(graphics.graphics(), pMouseX, (int)(pMouseY - scrollOffset), pPartialTick); } currentY += widget.getHeight() + ENTRY_SPACING; } @@ -280,7 +280,7 @@ public void renderFrontLayer(Graphics graphics, int pMouseX, int pMouseY, float if (pMouseX > guiLeft + AREA_X && pMouseX < guiLeft + AREA_X + AREA_W && pMouseY > guiTop + AREA_Y && pMouseY < guiTop + AREA_Y + AREA_H) { x.renderFrontLayer(graphics, pMouseX, pMouseY, pPartialTicks); } - x.renderSuggestions(graphics.poseStack(), pMouseX, pMouseY, pPartialTicks); + x.renderSuggestions(graphics, pMouseX, pMouseY, pPartialTicks); }); super.renderFrontLayer(graphics, pMouseX, pMouseY, pPartialTicks); diff --git a/common/src/main/java/de/mrjulsen/crn/client/gui/screen/AdvancedDisplaySettingsScreen.java b/common/src/main/java/de/mrjulsen/crn/client/gui/screen/AdvancedDisplaySettingsScreen.java index e4fbd1e4..7401433f 100644 --- a/common/src/main/java/de/mrjulsen/crn/client/gui/screen/AdvancedDisplaySettingsScreen.java +++ b/common/src/main/java/de/mrjulsen/crn/client/gui/screen/AdvancedDisplaySettingsScreen.java @@ -35,7 +35,7 @@ import de.mrjulsen.mcdragonlib.util.TextUtils; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.Font; -import net.minecraft.client.gui.components.Widget; +import net.minecraft.client.gui.components.Renderable; import net.minecraft.client.gui.screens.Screen; import net.minecraft.core.BlockPos; import net.minecraft.network.chat.Component; @@ -180,7 +180,7 @@ public void renderMainLayer(Graphics graphics, int pMouseX, int pMouseY, float p GuiGameElement.of(renderedItem).at(guiLeft + GUI_WIDTH, guiTop + GUI_HEIGHT - 48, -200) .scale(4f) - .render(graphics.poseStack()); + .render(graphics.graphics()); type.getIcon().render(graphics, guiLeft + 22, guiTop + 24); info.getIcon().render(graphics, guiLeft + 22, guiTop + 46); @@ -192,15 +192,15 @@ public void renderMainLayer(Graphics graphics, int pMouseX, int pMouseY, float p @Override public void renderFrontLayer(Graphics graphics, int pMouseX, int pMouseY, float pPartialTick) { super.renderFrontLayer(graphics, pMouseX, pMouseY, pPartialTick); - for (Widget widget : renderables) { + for (Renderable widget : renderables) { if (widget instanceof AbstractSimiWidget simiWidget && simiWidget.isHoveredOrFocused() && simiWidget.visible) { List tooltip = simiWidget.getToolTip(); if (tooltip.isEmpty()) continue; - int ttx = simiWidget.lockedTooltipX == -1 ? pMouseX : simiWidget.lockedTooltipX + simiWidget.x; - int tty = simiWidget.lockedTooltipY == -1 ? pMouseY : simiWidget.lockedTooltipY + simiWidget.y; - renderComponentTooltip(graphics.poseStack(), tooltip, ttx, tty); + int ttx = simiWidget.lockedTooltipX == -1 ? pMouseX : simiWidget.lockedTooltipX + simiWidget.getX(); + int tty = simiWidget.lockedTooltipY == -1 ? pMouseY : simiWidget.lockedTooltipY + simiWidget.getY(); + graphics.graphics().renderComponentTooltip(font, tooltip, ttx, tty); } } } diff --git a/common/src/main/java/de/mrjulsen/crn/client/gui/screen/CustomIconScreenElement.java b/common/src/main/java/de/mrjulsen/crn/client/gui/screen/CustomIconScreenElement.java index 672a5930..75561251 100644 --- a/common/src/main/java/de/mrjulsen/crn/client/gui/screen/CustomIconScreenElement.java +++ b/common/src/main/java/de/mrjulsen/crn/client/gui/screen/CustomIconScreenElement.java @@ -1,10 +1,10 @@ package de.mrjulsen.crn.client.gui.screen; -import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.foundation.gui.element.ScreenElement; import de.mrjulsen.mcdragonlib.client.util.Graphics; import de.mrjulsen.mcdragonlib.client.util.GuiUtils; +import net.minecraft.client.gui.GuiGraphics; import net.minecraft.resources.ResourceLocation; public class CustomIconScreenElement implements ScreenElement { @@ -28,8 +28,8 @@ public CustomIconScreenElement(int u, int v, int uW, int vH, int texW, int texH, } @Override - public void render(PoseStack poseStack, int x, int y) { - GuiUtils.drawTexture(texture, new Graphics(poseStack), x, y, u, v, uW, vH, texW, texH); + public void render(GuiGraphics graphics, int x, int y) { + GuiUtils.drawTexture(texture, new Graphics(graphics, graphics.pose()), x, y, u, v, uW, vH, texW, texH); } } diff --git a/common/src/main/java/de/mrjulsen/crn/client/gui/screen/LoadingScreen.java b/common/src/main/java/de/mrjulsen/crn/client/gui/screen/LoadingScreen.java index d03b0065..002dd35f 100644 --- a/common/src/main/java/de/mrjulsen/crn/client/gui/screen/LoadingScreen.java +++ b/common/src/main/java/de/mrjulsen/crn/client/gui/screen/LoadingScreen.java @@ -40,6 +40,6 @@ public void renderMainLayer(Graphics graphics, int mouseX, int mouseY, float par double offsetY = Math.cos(Math.toRadians(angle)) * 5; GuiUtils.drawString(graphics, font, width / 2, height / 2, title, 0xFFFFFF, EAlignment.CENTER, true); - AllIcons.I_MTD_SCAN.render(graphics.poseStack(), (int)(width / 2 + offsetX), (int)(height / 2 - 50 + offsetY)); + AllIcons.I_MTD_SCAN.render(graphics.graphics(), (int)(width / 2 + offsetX), (int)(height / 2 - 50 + offsetY)); } } diff --git a/common/src/main/java/de/mrjulsen/crn/client/gui/screen/NavigatorScreen.java b/common/src/main/java/de/mrjulsen/crn/client/gui/screen/NavigatorScreen.java index af56db1c..936ab964 100644 --- a/common/src/main/java/de/mrjulsen/crn/client/gui/screen/NavigatorScreen.java +++ b/common/src/main/java/de/mrjulsen/crn/client/gui/screen/NavigatorScreen.java @@ -7,7 +7,6 @@ import org.lwjgl.opengl.GL30; import com.mojang.blaze3d.systems.RenderSystem; -import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.content.trains.station.NoShadowFontWrapper; import com.simibubi.create.foundation.gui.AllIcons; import com.simibubi.create.foundation.utility.animation.LerpedFloat; @@ -43,6 +42,7 @@ import de.mrjulsen.mcdragonlib.util.TimeUtils; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.Font; +import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.components.AbstractWidget; import net.minecraft.client.gui.components.toasts.SystemToast; import net.minecraft.client.gui.components.toasts.SystemToast.SystemToastIds; @@ -291,7 +291,7 @@ public void onClick(double mouseX, double mouseY) { protected void updateEditorSubwidgets(DLEditBox field) { clearSuggestions(); - destinationSuggestions = new ModDestinationSuggestions(this.minecraft, this, field, this.font, getViableStations(field), field.getHeight() + 2 + field.y); + destinationSuggestions = new ModDestinationSuggestions(this.minecraft, this, field, this.font, getViableStations(field), field.getHeight() + 2 + field.getY()); destinationSuggestions.setAllowSuggestions(true); destinationSuggestions.updateCommandInfo(); } @@ -331,7 +331,7 @@ public void tick() { super.tick(); } - protected void startStencil(PoseStack matrixStack, float x, float y, float w, float h) { + protected void startStencil(GuiGraphics graphics, float x, float y, float w, float h) { RenderSystem.clear(GL30.GL_STENCIL_BUFFER_BIT | GL30.GL_DEPTH_BUFFER_BIT, Minecraft.ON_OSX); GL11.glDisable(GL11.GL_STENCIL_TEST); @@ -342,11 +342,11 @@ protected void startStencil(PoseStack matrixStack, float x, float y, float w, fl RenderSystem.stencilMask(0xFF); RenderSystem.stencilFunc(GL11.GL_NEVER, 1, 0xFF); - matrixStack.pushPose(); - matrixStack.translate(x, y, 0); - matrixStack.scale(w, h, 1); - io.github.fabricators_of_create.porting_lib.util.client.GuiUtils.drawGradientRect(matrixStack.last().pose(), -100, 0, 0, 1, 1, 0xff000000, 0xff000000); - matrixStack.popPose(); + graphics.pose().pushPose(); + graphics.pose().translate(x, y, 0); + graphics.pose().scale(w, h, 1); + graphics.fillGradient(0, 0, 1, 1, -100, 0xff000000, 0xff000000); + graphics.pose().popPose(); GL11.glEnable(GL11.GL_STENCIL_TEST); RenderSystem.stencilOp(GL11.GL_KEEP, GL11.GL_KEEP, GL11.GL_KEEP); @@ -378,7 +378,7 @@ public void renderMainLayer(Graphics graphics, int pMouseX, int pMouseY, float p ModGuiIcons.INFO.render(graphics, (int)(guiLeft + GUI_WIDTH / 2 - 8), (int)(guiTop + GUI_HEIGHT / 2)); } else if (routes.length <= 0) { GuiUtils.drawString(graphics, font, guiLeft + GUI_WIDTH / 2, guiTop + 32 + GUI_HEIGHT / 2, noConnectionsText, 0xFFFFFF, EAlignment.CENTER, false); - AllIcons.I_ACTIVE.render(graphics.poseStack(), (int)(guiLeft + GUI_WIDTH / 2 - 8), (int)(guiTop + GUI_HEIGHT / 2)); + AllIcons.I_ACTIVE.render(graphics.graphics(), (int)(guiLeft + GUI_WIDTH / 2 - 8), (int)(guiTop + GUI_HEIGHT / 2)); } else { //GuiUtils.swapAndBlitColor(minecraft.getMainRenderTarget(), GuiUtils.getFramebuffer()); //GuiUtils.startStencil(graphics, guiLeft + AREA_X, guiTop + AREA_Y, AREA_W, AREA_H); @@ -392,7 +392,7 @@ public void renderMainLayer(Graphics graphics, int pMouseX, int pMouseY, float p int start = (int)(Math.abs(scrollOffset + ENTRIES_START_Y_OFFSET) / (ENTRY_SPACING + RouteEntryOverviewWidget.HEIGHT)); int end = Math.min(routesCollection.components.size(), start + 2 + (int)(AREA_H / (ENTRY_SPACING + RouteEntryOverviewWidget.HEIGHT))); for (int i = start; i < end; i++) { - routesCollection.components.get(i).render(graphics.poseStack(), (int)(pMouseX), (int)(pMouseY - scrollOffset), pPartialTick); + routesCollection.components.get(i).render(graphics.graphics(), (int)(pMouseX), (int)(pMouseY - scrollOffset), pPartialTick); } //graphics.poseStack().popPose(); @@ -419,7 +419,7 @@ public void renderMainLayer(Graphics graphics, int pMouseX, int pMouseY, float p double offsetY = Math.cos(Math.toRadians(angle)) * 5; GuiUtils.drawString(graphics, font, guiLeft + GUI_WIDTH / 2, guiTop + 32 + GUI_HEIGHT / 2, searchingText, 0xFFFFFF, EAlignment.CENTER, false); - AllIcons.I_MTD_SCAN.render(graphics.poseStack(), (int)(guiLeft + GUI_WIDTH / 2 - 8 + offsetX), (int)(guiTop + GUI_HEIGHT / 2 + offsetY)); + AllIcons.I_MTD_SCAN.render(graphics.graphics(), (int)(guiLeft + GUI_WIDTH / 2 - 8 + offsetX), (int)(guiTop + GUI_HEIGHT / 2 + offsetY)); } if (switchButtonsArea.isInBounds(pMouseX, pMouseY)) { @@ -432,7 +432,7 @@ public void renderFrontLayer(Graphics graphics, int mouseX, int mouseY, float pa if (destinationSuggestions != null) { graphics.poseStack().pushPose(); graphics.poseStack().translate(0, 0, 500); - destinationSuggestions.render(graphics.poseStack(), mouseX, mouseY); + destinationSuggestions.render(graphics.graphics(), mouseX, mouseY); graphics.poseStack().popPose(); } super.renderFrontLayer(graphics, mouseX, mouseY, partialTicks); diff --git a/common/src/main/java/de/mrjulsen/crn/client/gui/screen/RouteDetailsScreen.java b/common/src/main/java/de/mrjulsen/crn/client/gui/screen/RouteDetailsScreen.java index 8d5bb394..9d8c0f16 100644 --- a/common/src/main/java/de/mrjulsen/crn/client/gui/screen/RouteDetailsScreen.java +++ b/common/src/main/java/de/mrjulsen/crn/client/gui/screen/RouteDetailsScreen.java @@ -223,7 +223,7 @@ private int renderTrainDetails(Graphics graphics, int x, int y, SimpleRoutePart final float mul = 1 / scale; GuiUtils.drawTexture(Constants.GUI_WIDGETS, graphics, x, y, 0, V, ENTRY_WIDTH, HEIGHT); - part.getTrainIcon().render(TrainIconType.ENGINE, graphics.poseStack(), x + ENTRY_DEST_X, y + 7); + part.getTrainIcon().render(TrainIconType.ENGINE, graphics.graphics(), x + ENTRY_DEST_X, y + 7); graphics.poseStack().pushPose(); graphics.poseStack().scale(scale, scale, scale); @@ -398,10 +398,10 @@ public void renderMainLayer(Graphics graphics, int pMouseX, int pMouseY, float p btn.active = part.getStopovers().size() > 0; if (btn.active) { - btn.x = guiLeft + 78; - btn.y = yOffs - 14; + btn.setX(guiLeft + 78); + btn.setY(yOffs - 14); - btn.render(graphics.poseStack(), pMouseX, (int)(pMouseY - scrollOffset), pPartialTick); + btn.render(graphics.graphics(), pMouseX, (int)(pMouseY - scrollOffset), pPartialTick); } if (btn.isExpanded()) { diff --git a/common/src/main/java/de/mrjulsen/crn/client/gui/screen/RouteOverlaySettingsScreen.java b/common/src/main/java/de/mrjulsen/crn/client/gui/screen/RouteOverlaySettingsScreen.java index 24df4dac..05f27649 100644 --- a/common/src/main/java/de/mrjulsen/crn/client/gui/screen/RouteOverlaySettingsScreen.java +++ b/common/src/main/java/de/mrjulsen/crn/client/gui/screen/RouteOverlaySettingsScreen.java @@ -230,7 +230,7 @@ public void renderMainLayer(Graphics graphics, int pMouseX, int pMouseY, float p GuiGameElement.of(renderedItem).at(guiLeft + GUI_WIDTH, guiTop + GUI_HEIGHT - 48, -200) .scale(5) - .render(graphics.poseStack()); + .render(graphics.graphics()); CreateDynamicWidgets.renderTextBox(graphics, guiLeft + 63, guiTop + 23, 43); @@ -246,9 +246,9 @@ public void renderFrontLayer(Graphics graphics, int pMouseX, int pMouseY, float List tooltip = simiWidget.getToolTip(); if (tooltip.isEmpty()) return; - int ttx = simiWidget.lockedTooltipX == -1 ? pMouseX : simiWidget.lockedTooltipX + simiWidget.x; - int tty = simiWidget.lockedTooltipY == -1 ? pMouseY : simiWidget.lockedTooltipY + simiWidget.y; - renderComponentTooltip(graphics.poseStack(), tooltip, ttx, tty); + int ttx = simiWidget.lockedTooltipX == -1 ? pMouseX : simiWidget.lockedTooltipX + simiWidget.getX(); + int tty = simiWidget.lockedTooltipY == -1 ? pMouseY : simiWidget.lockedTooltipY + simiWidget.getY(); + graphics.graphics().renderComponentTooltip(font, tooltip, ttx, tty); } }); super.renderFrontLayer(graphics, pMouseX, pMouseY, pPartialTick); diff --git a/common/src/main/java/de/mrjulsen/crn/client/gui/screen/SearchSettingsScreen.java b/common/src/main/java/de/mrjulsen/crn/client/gui/screen/SearchSettingsScreen.java index d9068104..62cd8615 100644 --- a/common/src/main/java/de/mrjulsen/crn/client/gui/screen/SearchSettingsScreen.java +++ b/common/src/main/java/de/mrjulsen/crn/client/gui/screen/SearchSettingsScreen.java @@ -36,7 +36,7 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.gui.Font; import net.minecraft.client.gui.components.MultiLineLabel; -import net.minecraft.client.gui.components.Widget; +import net.minecraft.client.gui.components.Renderable; import net.minecraft.client.gui.screens.Screen; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.MutableComponent; @@ -186,7 +186,7 @@ private void renderDefaultOptionWidget(Graphics graphics, int x, int y, String t graphics.poseStack().pushPose(); GuiUtils.drawString(graphics, shadowlessFont, x + 25, y + 6, TextUtils.text(text), 0xFFFFFF, EAlignment.LEFT, false); graphics.poseStack().scale(0.75f, 0.75f, 0.75f); - label.renderLeftAligned(graphics.poseStack(), (int)((x + 25) / 0.75f), (int)((y + 19) / 0.75f), 10, 0xDBDBDB); + label.renderLeftAligned(graphics.graphics(), (int)((x + 25) / 0.75f), (int)((y + 19) / 0.75f), 10, 0xDBDBDB); graphics.poseStack().popPose(); } @@ -271,7 +271,7 @@ public void renderMainLayer(Graphics graphics, int pMouseX, int pMouseY, float p CreateDynamicWidgets.renderTextSlotOverlay(graphics, wX + 6, dY + (i * ARRAY_ENTRY_HEIGHT) + 1, 16, ARRAY_ENTRY_HEIGHT - 2); if (ModClientConfig.TRAIN_GROUP_FILTER_BLACKLIST.get().stream().noneMatch(x -> x.equals(group.getGroupName()))) { - AllIcons.I_CONFIRM.render(graphics.poseStack(), wX + 6, dY + (i * ARRAY_ENTRY_HEIGHT) + 2); + AllIcons.I_CONFIRM.render(graphics.graphics(), wX + 6, dY + (i * ARRAY_ENTRY_HEIGHT) + 2); } if (workingArea.isInBounds(pMouseX, pMouseY) && area.isInBounds(pMouseX, pMouseY - scrollOffset)) { @@ -300,7 +300,7 @@ public void renderMainLayer(Graphics graphics, int pMouseX, int pMouseY, float p trainGroupResetButton.setXOffset(wX + defaultWidth - 2 - 32); trainGroupResetButton.setYOffset(wY + defaultDescriptionHeight / 2 - 7); - AllIcons.I_REFRESH.render(graphics.poseStack(), trainGroupResetButton.getX(), trainGroupResetButton.getY()); + AllIcons.I_REFRESH.render(graphics.graphics(), trainGroupResetButton.getX(), trainGroupResetButton.getY()); if (trainGroupsExpanded) { ModGuiIcons.COLLAPSE.render(graphics, trainGroupExpandButton.getX(), trainGroupExpandButton.getY()); } else { @@ -323,7 +323,7 @@ public void renderMainLayer(Graphics graphics, int pMouseX, int pMouseY, float p GuiUtils.fillGradient(graphics, guiLeft + AREA_X, guiTop + AREA_Y + AREA_H - 10, 0, AREA_W, 10, 0x00000000, 0x77000000); // widgets y offset - transferTimeInput.y = (int)(transferTimeInputInitialY + scrollOffset); + transferTimeInput.setY((int)(transferTimeInputInitialY + scrollOffset)); // set scrollbar values maxY = wY - AREA_H; @@ -354,15 +354,15 @@ public void renderFrontLayer(Graphics graphics, int pMouseX, int pMouseY, float GuiUtils.renderTooltipWithOffset(this, trainGroupResetButton, List.of(tooltipTrainGroupsReset), width, graphics, pMouseX, pMouseY, 0, scrollOffset); } - for (Widget widget : renderables) { + for (Renderable widget : renderables) { if (widget instanceof AbstractSimiWidget simiWidget && simiWidget.isHoveredOrFocused() && simiWidget.visible) { List tooltip = simiWidget.getToolTip(); if (tooltip.isEmpty()) continue; - int ttx = simiWidget.lockedTooltipX == -1 ? pMouseX : simiWidget.lockedTooltipX + simiWidget.x; - int tty = simiWidget.lockedTooltipY == -1 ? pMouseY : simiWidget.lockedTooltipY + simiWidget.y; - renderComponentTooltip(graphics.poseStack(), tooltip, ttx, tty); + int ttx = simiWidget.lockedTooltipX == -1 ? pMouseX : simiWidget.lockedTooltipX + simiWidget.getX(); + int tty = simiWidget.lockedTooltipY == -1 ? pMouseY : simiWidget.lockedTooltipY + simiWidget.getY(); + graphics.graphics().renderComponentTooltip(font, tooltip, ttx, tty); } } diff --git a/common/src/main/java/de/mrjulsen/crn/client/gui/widgets/AliasEntryWidget.java b/common/src/main/java/de/mrjulsen/crn/client/gui/widgets/AliasEntryWidget.java index 2fa32994..4f6864b5 100644 --- a/common/src/main/java/de/mrjulsen/crn/client/gui/widgets/AliasEntryWidget.java +++ b/common/src/main/java/de/mrjulsen/crn/client/gui/widgets/AliasEntryWidget.java @@ -5,7 +5,6 @@ import java.util.HashMap; import java.util.Map.Entry; -import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.content.trains.station.NoShadowFontWrapper; import de.mrjulsen.crn.Constants; @@ -159,7 +158,7 @@ public void setYPos(int y) { deleteButton = new GuiAreaDefinition(x + 165, y + 6, 16, 16); expandButton = new GuiAreaDefinition(x + 182, y + 6, 16, 16); addButton = new GuiAreaDefinition(x + 165, y + 26 + (alias.getAllStationNames().size() * STATION_ENTRY_HEIGHT) + 2, 16, 16); - titleBox.y = y + 10; + titleBox.setY(y + 10); initStationDeleteButtons(); } @@ -217,9 +216,9 @@ private void addStation(String name, StationInfo info) { }); newEntryBox.setValue(""); - newEntryBox.setFocus(false); + newEntryBox.setFocused(false); newEntryPlatformBox.setValue(""); - newEntryPlatformBox.setFocus(false); + newEntryPlatformBox.setFocused(false); } private boolean setAliasName(String name) { @@ -273,10 +272,10 @@ private void editStationInfo(String stationName, GuiAreaDefinition buttonArea) { selectedStationName = stationName; editAliasPlatform.setValue(alias.getInfoForStation(selectedStationName).platform()); - editAliasPlatform.x = buttonArea.getLeft() + 1; - editAliasPlatform.y = buttonArea.getTop() + 1; + editAliasPlatform.setX(buttonArea.getLeft() + 1); + editAliasPlatform.setY(buttonArea.getTop() + 1); editAliasPlatform.visible = true; - editAliasPlatform.setFocus(true); + editAliasPlatform.setFocused(true); } @Override @@ -289,8 +288,8 @@ public void renderMainLayer(Graphics graphics, int pMouseX, int pMouseY, float p if (expanded) { Map names = alias.getAllStations(); GuiUtils.drawTexture(GUI_WIDGETS, graphics, x + 25, y + 5, 0, 92, 139, 18); // textbox - newEntryBox.y = y + 26 + (names.size() * STATION_ENTRY_HEIGHT) + 6; - newEntryPlatformBox.y = y + 26 + (names.size() * STATION_ENTRY_HEIGHT) + 6; + newEntryBox.setY(y + 26 + (names.size() * STATION_ENTRY_HEIGHT) + 6); + newEntryPlatformBox.setY(y + 26 + (names.size() * STATION_ENTRY_HEIGHT) + 6); for (int i = 0; i < names.size(); i++) { GuiUtils.drawTexture(GUI_WIDGETS, graphics, x, y + 26 + (i * STATION_ENTRY_HEIGHT), 0, 48, 200, STATION_ENTRY_HEIGHT); @@ -404,12 +403,12 @@ public void renderFrontLayer(Graphics graphics, int mouseX, int mouseY, float pa } @Override - public void renderSuggestions(PoseStack matrixStack, int mouseX, int mouseY, float partialTicks) { + public void renderSuggestions(Graphics graphics, int mouseX, int mouseY, float partialTicks) { if (destinationSuggestions != null) { - matrixStack.pushPose(); - matrixStack.translate(0, -parent.getScrollOffset(partialTicks), 500); - destinationSuggestions.render(matrixStack, mouseX, mouseY + parent.getScrollOffset(partialTicks)); - matrixStack.popPose(); + graphics.poseStack().pushPose(); + graphics.poseStack().translate(0, -parent.getScrollOffset(partialTicks), 500); + destinationSuggestions.render(graphics.graphics(), mouseX, mouseY + parent.getScrollOffset(partialTicks)); + graphics.poseStack().popPose(); } } @@ -435,7 +434,7 @@ public boolean mouseClicked(double pMouseX, double pMouseY, int pButton) { } } - editAliasPlatform.setFocus(false); + editAliasPlatform.setFocused(false); if (deleteButton.isInBounds(pMouseX, pMouseY)) { deleteAlias(); @@ -477,7 +476,7 @@ private void clearSuggestions() { protected void updateEditorSubwidgets(DLEditBox field) { clearSuggestions(); - destinationSuggestions = new ModStationSuggestions(minecraft, parent, field, minecraft.font, getViableStations(field), field.getHeight() + 2 + field.y); + destinationSuggestions = new ModStationSuggestions(minecraft, parent, field, minecraft.font, getViableStations(field), field.getHeight() + 2 + field.getY()); destinationSuggestions.setAllowSuggestions(true); destinationSuggestions.updateCommandInfo(); } diff --git a/common/src/main/java/de/mrjulsen/crn/client/gui/widgets/ExpandButton.java b/common/src/main/java/de/mrjulsen/crn/client/gui/widgets/ExpandButton.java index 2518f7b5..45d74930 100644 --- a/common/src/main/java/de/mrjulsen/crn/client/gui/widgets/ExpandButton.java +++ b/common/src/main/java/de/mrjulsen/crn/client/gui/widgets/ExpandButton.java @@ -45,10 +45,10 @@ public boolean mouseClicked(double pMouseX, double pMouseY, int pButton) { @Override public void renderMainLayer(Graphics graphics, int pMouseX, int pMouseY, float pPartialTick) { if (isMouseOver(pMouseX, pMouseY)) { - GuiUtils.fill(graphics, x, y, width, height, 0x1AFFFFFF); - GuiUtils.drawString(graphics, font, x + width / 2, y + height / 2 - font.lineHeight / 2, expanded ? TextUtils.text(collapseText).withStyle(ChatFormatting.UNDERLINE) : TextUtils.text(expandText).withStyle(ChatFormatting.UNDERLINE), 0xFFFFFF, EAlignment.CENTER, true); + GuiUtils.fill(graphics, getX(), getY(), width, height, 0x1AFFFFFF); + GuiUtils.drawString(graphics, font, getX() + width / 2, getY() + height / 2 - font.lineHeight / 2, expanded ? TextUtils.text(collapseText).withStyle(ChatFormatting.UNDERLINE) : TextUtils.text(expandText).withStyle(ChatFormatting.UNDERLINE), 0xFFFFFF, EAlignment.CENTER, true); } else { - GuiUtils.drawString(graphics, font, x + width / 2, y + height / 2 - font.lineHeight / 2, expanded ? TextUtils.text(collapseText) : TextUtils.text(expandText), 0xFFFFFF, EAlignment.CENTER, true); + GuiUtils.drawString(graphics, font, getX() + width / 2, getY() + height / 2 - font.lineHeight / 2, expanded ? TextUtils.text(collapseText) : TextUtils.text(expandText), 0xFFFFFF, EAlignment.CENTER, true); } } diff --git a/common/src/main/java/de/mrjulsen/crn/client/gui/widgets/IEntryListSettingsOption.java b/common/src/main/java/de/mrjulsen/crn/client/gui/widgets/IEntryListSettingsOption.java index ccc91eab..1d60da4e 100644 --- a/common/src/main/java/de/mrjulsen/crn/client/gui/widgets/IEntryListSettingsOption.java +++ b/common/src/main/java/de/mrjulsen/crn/client/gui/widgets/IEntryListSettingsOption.java @@ -1,12 +1,12 @@ package de.mrjulsen.crn.client.gui.widgets; -import com.mojang.blaze3d.vertex.PoseStack; +import de.mrjulsen.mcdragonlib.client.util.Graphics; public interface IEntryListSettingsOption { void setYPos(int y); void tick(); int calcHeight(); - void renderSuggestions(PoseStack poseStack, int mouseX, int mouseY, float partialTicks); + void renderSuggestions(Graphics graphics, int mouseX, int mouseY, float partialTicks); /** * This method is always called, even if the used clicked outside the working area of the container window. * This additional method should fix the usage of the suggestions popup, which can be rendered outside of the working area. diff --git a/common/src/main/java/de/mrjulsen/crn/client/gui/widgets/ModCommandSuggestions.java b/common/src/main/java/de/mrjulsen/crn/client/gui/widgets/ModCommandSuggestions.java index 6342acfb..7d1e36a6 100644 --- a/common/src/main/java/de/mrjulsen/crn/client/gui/widgets/ModCommandSuggestions.java +++ b/common/src/main/java/de/mrjulsen/crn/client/gui/widgets/ModCommandSuggestions.java @@ -3,7 +3,6 @@ import com.google.common.base.Strings; import com.google.common.collect.ImmutableList; import com.google.common.collect.Lists; -import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.brigadier.CommandDispatcher; import com.mojang.brigadier.Message; import com.mojang.brigadier.ParseResults; @@ -17,7 +16,6 @@ import com.mojang.brigadier.suggestion.SuggestionsBuilder; import com.mojang.brigadier.tree.CommandNode; import com.mojang.brigadier.tree.LiteralCommandNode; -import com.mojang.text2speech.Narrator; import de.mrjulsen.mcdragonlib.util.TextUtils; @@ -34,7 +32,7 @@ import net.minecraft.ChatFormatting; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.Font; -import net.minecraft.client.gui.GuiComponent; +import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.components.EditBox; import net.minecraft.client.gui.screens.Screen; import net.minecraft.client.renderer.Rect2i; @@ -71,7 +69,6 @@ public class ModCommandSuggestions { private CompletableFuture pendingSuggestions; @Nullable protected ModCommandSuggestions.SuggestionsList suggestions; - private boolean allowSuggestions; boolean keepSuggestions; public ModCommandSuggestions(Minecraft pMinecraft, Screen pScreen, EditBox pInput, Font pFont, boolean pCommandsOnly, boolean pOnlyShowIfCursorPastError, int pLineStartOffset, int pSuggestionLineLimit, boolean pAnchorToBottom, int pFillColor) { @@ -89,7 +86,6 @@ public ModCommandSuggestions(Minecraft pMinecraft, Screen pScreen, EditBox pInpu } public void setAllowSuggestions(boolean pAutoSuggest) { - this.allowSuggestions = pAutoSuggest; if (!pAutoSuggest) { this.suggestions = null; } @@ -244,10 +240,6 @@ private void updateUsageInfo() { } this.suggestions = null; - if (this.allowSuggestions && this.minecraft.options.autoSuggestions().get()) { - this.showSuggestions(false); - } - } private void fillNodeUsage(ChatFormatting pFormatting) { @@ -321,22 +313,33 @@ private static FormattedCharSequence formatText(ParseResults pSuggestionList, boolean pNarrateFirstSuggestion) { int i = pXPos - 1; int j = ModCommandSuggestions.this.anchorToBottom ? pYPos - 3 - Math.min(pSuggestionList.size(), ModCommandSuggestions.this.suggestionLineLimit) * 12 : pYPos; this.rect = new Rect2i(i, j, pWidth + 1, Math.min(pSuggestionList.size(), ModCommandSuggestions.this.suggestionLineLimit) * 12); this.originalContents = ModCommandSuggestions.this.input.getValue(); - this.lastNarratedEntry = pNarrateFirstSuggestion ? -1 : 0; this.suggestionList = pSuggestionList; this.select(0); } - public void render(PoseStack pPoseStack, int pMouseX, int pMouseY) { - int i = Math.min(this.suggestionList.size(), ModCommandSuggestions.this.suggestionLineLimit); + public void render(GuiGraphics pGuiGraphics, int pMouseX, int pMouseY) { + int i = Math.min(this.suggestionList.size(), suggestionLineLimit); boolean flag = this.offset > 0; boolean flag1 = this.suggestionList.size() > this.offset + i; boolean flag2 = flag || flag1; @@ -372,12 +373,12 @@ public void render(PoseStack pPoseStack, int pMouseX, int pMouseY) { } if (flag2) { - GuiComponent.fill(pPoseStack, this.rect.getX(), this.rect.getY() - 1, this.rect.getX() + this.rect.getWidth(), this.rect.getY(), ModCommandSuggestions.this.fillColor); - GuiComponent.fill(pPoseStack, this.rect.getX(), this.rect.getY() + this.rect.getHeight(), this.rect.getX() + this.rect.getWidth(), this.rect.getY() + this.rect.getHeight() + 1, ModCommandSuggestions.this.fillColor); + pGuiGraphics.fill(this.rect.getX(), this.rect.getY() - 1, this.rect.getX() + this.rect.getWidth(), this.rect.getY(), fillColor); + pGuiGraphics.fill(this.rect.getX(), this.rect.getY() + this.rect.getHeight(), this.rect.getX() + this.rect.getWidth(), this.rect.getY() + this.rect.getHeight() + 1, fillColor); if (flag) { for(int k = 0; k < this.rect.getWidth(); ++k) { if (k % 2 == 0) { - GuiComponent.fill(pPoseStack, this.rect.getX() + k, this.rect.getY() - 1, this.rect.getX() + k + 1, this.rect.getY(), -1); + pGuiGraphics.fill(this.rect.getX() + k, this.rect.getY() - 1, this.rect.getX() + k + 1, this.rect.getY(), -1); } } } @@ -385,7 +386,7 @@ public void render(PoseStack pPoseStack, int pMouseX, int pMouseY) { if (flag1) { for(int i1 = 0; i1 < this.rect.getWidth(); ++i1) { if (i1 % 2 == 0) { - GuiComponent.fill(pPoseStack, this.rect.getX() + i1, this.rect.getY() + this.rect.getHeight(), this.rect.getX() + i1 + 1, this.rect.getY() + this.rect.getHeight() + 1, -1); + pGuiGraphics.fill(this.rect.getX() + i1, this.rect.getY() + this.rect.getHeight(), this.rect.getX() + i1 + 1, this.rect.getY() + this.rect.getHeight() + 1, -1); } } } @@ -395,7 +396,7 @@ public void render(PoseStack pPoseStack, int pMouseX, int pMouseY) { for(int l = 0; l < i; ++l) { Suggestion suggestion = this.suggestionList.get(l + this.offset); - GuiComponent.fill(pPoseStack, this.rect.getX(), this.rect.getY() + 12 * l, this.rect.getX() + this.rect.getWidth(), this.rect.getY() + 12 * l + 12, ModCommandSuggestions.this.fillColor); + pGuiGraphics.fill(this.rect.getX(), this.rect.getY() + 12 * l, this.rect.getX() + this.rect.getWidth(), this.rect.getY() + 12 * l + 12, fillColor); if (pMouseX > this.rect.getX() && pMouseX < this.rect.getX() + this.rect.getWidth() && pMouseY > this.rect.getY() + 12 * l && pMouseY < this.rect.getY() + 12 * l + 12) { if (flag3) { this.select(l + this.offset); @@ -404,13 +405,13 @@ public void render(PoseStack pPoseStack, int pMouseX, int pMouseY) { flag4 = true; } - ModCommandSuggestions.this.font.drawShadow(pPoseStack, suggestion.getText(), (float)(this.rect.getX() + 1), (float)(this.rect.getY() + 2 + 12 * l), l + this.offset == this.current ? -256 : -5592406); + pGuiGraphics.drawString(font, suggestion.getText(), this.rect.getX() + 1, this.rect.getY() + 2 + 12 * l, l + this.offset == this.current ? -256 : -5592406); } if (flag4) { Message message = this.suggestionList.get(this.current).getTooltip(); if (message != null) { - ModCommandSuggestions.this.screen.renderTooltip(pPoseStack, ComponentUtils.fromMessage(message), pMouseX, pMouseY); + pGuiGraphics.renderTooltip(font, ComponentUtils.fromMessage(message), pMouseX, pMouseY); } } @@ -487,9 +488,7 @@ public void select(int pIndex) { Suggestion suggestion = this.suggestionList.get(this.current); ModCommandSuggestions.this.input.setSuggestion(ModCommandSuggestions.calculateSuggestionSuffix(ModCommandSuggestions.this.input.getValue(), suggestion.apply(this.originalContents))); - if (this.lastNarratedEntry != this.current) { - Narrator.getNarrator().say(this.getNarrationMessage().getString(), true); - } + } @@ -506,7 +505,6 @@ public void useSuggestion() { } Component getNarrationMessage() { - this.lastNarratedEntry = this.current; Suggestion suggestion = this.suggestionList.get(this.current); Message message = suggestion.getTooltip(); return message != null ? TextUtils.translate("narration.suggestion.tooltip", this.current + 1, this.suggestionList.size(), suggestion.getText(), message) : TextUtils.translate("narration.suggestion", this.current + 1, this.suggestionList.size(), suggestion.getText()); diff --git a/common/src/main/java/de/mrjulsen/crn/client/gui/widgets/RouteEntryOverviewWidget.java b/common/src/main/java/de/mrjulsen/crn/client/gui/widgets/RouteEntryOverviewWidget.java index 3a966afa..8e7d96b0 100644 --- a/common/src/main/java/de/mrjulsen/crn/client/gui/widgets/RouteEntryOverviewWidget.java +++ b/common/src/main/java/de/mrjulsen/crn/client/gui/widgets/RouteEntryOverviewWidget.java @@ -74,8 +74,8 @@ public void renderMainLayer(Graphics graphics, int pMouseX, int pMouseY, float p if (!beforeJourney) { color = ColorUtils.applyTint(color, 0x663300); } - CreateDynamicWidgets.renderSingleShadeWidget(graphics, x, y, WIDTH, HEIGHT, color); - CreateDynamicWidgets.renderHorizontalSeparator(graphics, x + 6, y + 22, 188); + CreateDynamicWidgets.renderSingleShadeWidget(graphics, getX(), getY(), WIDTH, HEIGHT, color); + CreateDynamicWidgets.renderHorizontalSeparator(graphics, getX() + 6, getY() + 22, 188); Minecraft minecraft = Minecraft.getInstance(); SimpleRoutePart[] parts = route.getParts().toArray(SimpleRoutePart[]::new); @@ -100,7 +100,7 @@ public void renderMainLayer(Graphics graphics, int pMouseX, int pMouseY, float p float localScale = shadowlessFont.width(line) > WIDTH - 12 ? scale : 1; graphics.poseStack().pushPose(); graphics.poseStack().scale(localScale, 1, 1); - GuiUtils.drawString(graphics, minecraft.font, (int)((x + 6) / localScale), y + 5, line, 0xFFFFFF, EAlignment.LEFT, false); + GuiUtils.drawString(graphics, minecraft.font, (int)((getX() + 6) / localScale), getY() + 5, line, 0xFFFFFF, EAlignment.LEFT, false); graphics.poseStack().popPose(); int routePartWidth = DISPLAY_WIDTH / parts.length; @@ -108,32 +108,32 @@ public void renderMainLayer(Graphics graphics, int pMouseX, int pMouseY, float p int textW = shadowlessFont.width(end); for (int i = 0; i < parts.length; i++) { - GuiUtils.fill(graphics, x + 5 + (i * routePartWidth) + 1, y + 27, routePartWidth - 2, 11, 0xFF393939); + GuiUtils.fill(graphics, getX() + 5 + (i * routePartWidth) + 1, getY() + 27, routePartWidth - 2, 11, 0xFF393939); } graphics.poseStack().pushPose(); graphics.poseStack().scale(scale, scale, scale); if (route.getStartStation().shouldRenderRealtime()) { - GuiUtils.drawString(graphics, shadowlessFont, (int)((x + 6 + shadowlessFont.width(timeStart) * localScale / 2.0f) / scale) - shadowlessFont.width(timeStart) / 2, (int)((y + 15) / scale), TextUtils.text(TimeUtils.parseTime((int)(route.getStartStation().getEstimatedTimeWithThreshold() % 24000 + DragonLib.DAYTIME_SHIFT), ModClientConfig.TIME_FORMAT.get())), route.getStartStation().isDelayed() ? Constants.COLOR_DELAYED : Constants.COLOR_ON_TIME, EAlignment.LEFT, false); + GuiUtils.drawString(graphics, shadowlessFont, (int)((getX() + 6 + shadowlessFont.width(timeStart) * localScale / 2.0f) / scale) - shadowlessFont.width(timeStart) / 2, (int)((getY() + 15) / scale), TextUtils.text(TimeUtils.parseTime((int)(route.getStartStation().getEstimatedTimeWithThreshold() % 24000 + DragonLib.DAYTIME_SHIFT), ModClientConfig.TIME_FORMAT.get())), route.getStartStation().isDelayed() ? Constants.COLOR_DELAYED : Constants.COLOR_ON_TIME, EAlignment.LEFT, false); } if (route.getEndStation().shouldRenderRealtime()) { - GuiUtils.drawString(graphics, shadowlessFont, (int)((x + 6 + shadowlessFont.width(timeEnd) * localScale * 1.5f + (shadowlessFont.width(dash)) * localScale) / scale) - shadowlessFont.width(timeEnd) / 2, (int)((y + 15) / scale), TextUtils.text(TimeUtils.parseTime((int)(route.getEndStation().getEstimatedTimeWithThreshold() % 24000 + DragonLib.DAYTIME_SHIFT), ModClientConfig.TIME_FORMAT.get())), route.getEndStation().isDelayed() ? Constants.COLOR_DELAYED : Constants.COLOR_ON_TIME, EAlignment.LEFT, false); + GuiUtils.drawString(graphics, shadowlessFont, (int)((getX() + 6 + shadowlessFont.width(timeEnd) * localScale * 1.5f + (shadowlessFont.width(dash)) * localScale) / scale) - shadowlessFont.width(timeEnd) / 2, (int)((getY() + 15) / scale), TextUtils.text(TimeUtils.parseTime((int)(route.getEndStation().getEstimatedTimeWithThreshold() % 24000 + DragonLib.DAYTIME_SHIFT), ModClientConfig.TIME_FORMAT.get())), route.getEndStation().isDelayed() ? Constants.COLOR_DELAYED : Constants.COLOR_ON_TIME, EAlignment.LEFT, false); } if (!route.isValid()) { - GuiUtils.drawString(graphics, shadowlessFont, (int)((x + WIDTH - 5) / scale) - shadowlessFont.width(trainCanceled), (int)((y + 15) / scale), trainCanceled, Constants.COLOR_DELAYED, EAlignment.LEFT, false); + GuiUtils.drawString(graphics, shadowlessFont, (int)((getX() + WIDTH - 5) / scale) - shadowlessFont.width(trainCanceled), (int)((getY() + 15) / scale), trainCanceled, Constants.COLOR_DELAYED, EAlignment.LEFT, false); } else if (!beforeJourney) { - GuiUtils.drawString(graphics, shadowlessFont, (int)((x + WIDTH - 5) / scale) - shadowlessFont.width(connectionInPast), (int)((y + 15) / scale), connectionInPast, Constants.COLOR_DELAYED, EAlignment.LEFT, false); + GuiUtils.drawString(graphics, shadowlessFont, (int)((getX() + WIDTH - 5) / scale) - shadowlessFont.width(connectionInPast), (int)((getY() + 15) / scale), connectionInPast, Constants.COLOR_DELAYED, EAlignment.LEFT, false); } for (int i = 0; i < parts.length; i++) { - GuiUtils.drawString(graphics, shadowlessFont, (int)((x + 5 + (i * routePartWidth) + (routePartWidth / 2)) / 0.75f), (int)((y + 30) / 0.75f), TextUtils.text(parts[i].getTrainName()), 0xFFFFFF, EAlignment.CENTER, false); + GuiUtils.drawString(graphics, shadowlessFont, (int)((getX() + 5 + (i * routePartWidth) + (routePartWidth / 2)) / 0.75f), (int)((getY() + 30) / 0.75f), TextUtils.text(parts[i].getTrainName()), 0xFFFFFF, EAlignment.CENTER, false); } - GuiUtils.drawString(graphics, shadowlessFont, (int)((x + 6) / scale), (int)((y + 43) / scale), TextUtils.text(route.getStartStation().getStationName()), 0xDBDBDB, EAlignment.LEFT, false); - GuiUtils.drawString(graphics, shadowlessFont, (int)((x + WIDTH - 6) / scale) - textW, (int)((y + 43) / scale), TextUtils.text(end), 0xDBDBDB, EAlignment.LEFT, false); + GuiUtils.drawString(graphics, shadowlessFont, (int)((getX() + 6) / scale), (int)((getY() + 43) / scale), TextUtils.text(route.getStartStation().getStationName()), 0xDBDBDB, EAlignment.LEFT, false); + GuiUtils.drawString(graphics, shadowlessFont, (int)((getX() + WIDTH - 6) / scale) - textW, (int)((getY() + 43) / scale), TextUtils.text(end), 0xDBDBDB, EAlignment.LEFT, false); graphics.poseStack().popPose(); } diff --git a/common/src/main/java/de/mrjulsen/crn/client/gui/widgets/SettingsOptionWidget.java b/common/src/main/java/de/mrjulsen/crn/client/gui/widgets/SettingsOptionWidget.java index 408a1afe..049db8f6 100644 --- a/common/src/main/java/de/mrjulsen/crn/client/gui/widgets/SettingsOptionWidget.java +++ b/common/src/main/java/de/mrjulsen/crn/client/gui/widgets/SettingsOptionWidget.java @@ -48,11 +48,11 @@ public SettingsOptionWidget(Screen parent, int pX, int pY, Component title, Comp public void renderMainLayer(Graphics graphics, int pMouseX, int pMouseY, float pPartialTick) { float l = isMouseOver(pMouseX, pMouseY) && isHovered ? 0.2f : 0; GuiUtils.setTint(1 + l, 1 + l, 1 + l, 1); - GuiUtils.drawTexture(Constants.GUI_WIDGETS, graphics, x, y, 0, 0, WIDTH, HEIGHT); + GuiUtils.drawTexture(Constants.GUI_WIDGETS, graphics, getX(), getY(), 0, 0, WIDTH, HEIGHT); - GuiUtils.drawString(graphics, shadowlessFont, x + 6, y + 5, getMessage(), 0xFFFFFF, EAlignment.LEFT, false); + GuiUtils.drawString(graphics, shadowlessFont, getX() + 6, getY() + 5, getMessage(), 0xFFFFFF, EAlignment.LEFT, false); graphics.poseStack().scale(0.75f, 0.75f, 0.75f); - this.messageLabel.renderLeftAligned(graphics.poseStack(), (int)((x + 6) / 0.75f), (int)((y + 20) / 0.75f), 10, 0xDBDBDB); + this.messageLabel.renderLeftAligned(graphics.graphics(), (int)((getX() + 6) / 0.75f), (int)((getY() + 20) / 0.75f), 10, 0xDBDBDB); float s = 1 / 0.75f; graphics.poseStack().scale(s, s, s); } diff --git a/common/src/main/java/de/mrjulsen/crn/client/gui/widgets/TrainGroupEntryWidget.java b/common/src/main/java/de/mrjulsen/crn/client/gui/widgets/TrainGroupEntryWidget.java index e0a17fe7..5c9d9172 100644 --- a/common/src/main/java/de/mrjulsen/crn/client/gui/widgets/TrainGroupEntryWidget.java +++ b/common/src/main/java/de/mrjulsen/crn/client/gui/widgets/TrainGroupEntryWidget.java @@ -6,7 +6,6 @@ import java.util.HashMap; import java.util.Map.Entry; import com.mojang.blaze3d.systems.RenderSystem; -import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.content.trains.station.NoShadowFontWrapper; import de.mrjulsen.crn.Constants; @@ -166,7 +165,7 @@ private void addTrain(String name) { }); newEntryBox.setValue(""); - newEntryBox.setFocus(false); + newEntryBox.setFocused(false); } private boolean setGroupName(String name) { @@ -218,18 +217,19 @@ public void setYPos(int y) { deleteButton = new GuiAreaDefinition(x + 165, y + 6, 16, 16); expandButton = new GuiAreaDefinition(x + 182, y + 6, 16, 16); addButton = new GuiAreaDefinition(x + 165, y + 26 + (trainGroup.getTrainNames().size() * STATION_ENTRY_HEIGHT) + 2, 16, 16); - titleBox.y = y + 10; + titleBox.setY(y + 10); initStationDeleteButtons(); } @Override - public void renderSuggestions(PoseStack poseStack, int mouseX, int mouseY, float partialTicks) { + public void renderSuggestions(Graphics graphics, int mouseX, int mouseY, float partialTicks) { if (suggestions != null) { - poseStack.pushPose(); - poseStack.translate(0, -parent.getScrollOffset(partialTicks), 500); - suggestions.render(poseStack, mouseX, mouseY + parent.getScrollOffset(partialTicks)); - poseStack.popPose(); + graphics.poseStack().pushPose(); + graphics.poseStack().translate(0, -parent.getScrollOffset(partialTicks), 500); + suggestions.render(graphics.graphics(), mouseX, mouseY + parent.getScrollOffset(partialTicks)); + graphics.poseStack().popPose(); } + } @Override @@ -243,7 +243,7 @@ public void renderMainLayer(Graphics graphics, int pMouseX, int pMouseY, float p if (expanded) { Set names = trainGroup.getTrainNames(); GuiUtils.drawTexture(GUI_WIDGETS, graphics, x + 25, y + 5, 0, 92, 139, 18); // textbox - newEntryBox.y = y + 26 + (names.size() * STATION_ENTRY_HEIGHT) + 6; + newEntryBox.setY(y + 26 + (names.size() * STATION_ENTRY_HEIGHT) + 6); for (int i = 0; i < names.size(); i++) { GuiUtils.drawTexture(GUI_WIDGETS, graphics, x, y + 26 + (i * STATION_ENTRY_HEIGHT), 0, 48, 200, STATION_ENTRY_HEIGHT); @@ -303,7 +303,7 @@ public void renderFrontLayer(Graphics graphics, int mouseX, int mouseY, float pa if (suggestions != null) { graphics.poseStack().pushPose(); graphics.poseStack().translate(0, -parent.getScrollOffset(partialTicks), 500); - suggestions.render(graphics.poseStack(), mouseX, mouseY + parent.getScrollOffset(partialTicks)); + suggestions.render(graphics.graphics(), mouseX, mouseY + parent.getScrollOffset(partialTicks)); graphics.poseStack().popPose(); } @@ -383,7 +383,7 @@ private void clearSuggestions() { protected void updateEditorSubwidgets(DLEditBox field) { clearSuggestions(); - suggestions = new ModStationSuggestions(minecraft, parent, field, minecraft.font, getViableTrains(field), field.getHeight() + 2 + field.y); + suggestions = new ModStationSuggestions(minecraft, parent, field, minecraft.font, getViableTrains(field), field.getHeight() + 2 + field.getY()); suggestions.setAllowSuggestions(true); suggestions.updateCommandInfo(); } diff --git a/common/src/main/java/de/mrjulsen/crn/client/lang/ELanguage.java b/common/src/main/java/de/mrjulsen/crn/client/lang/ELanguage.java index e0de16a8..ce3bd519 100644 --- a/common/src/main/java/de/mrjulsen/crn/client/lang/ELanguage.java +++ b/common/src/main/java/de/mrjulsen/crn/client/lang/ELanguage.java @@ -47,11 +47,11 @@ public static void updateLanguage(ELanguage lang) { LanguageInfo info = lang == DEFAULT ? null : Minecraft.getInstance().getLanguageManager().getLanguage(lang.getCode()); if (info == null) { - info = Minecraft.getInstance().getLanguageManager().getSelected(); + info = Minecraft.getInstance().getLanguageManager().getLanguage(Minecraft.getInstance().getLanguageManager().getSelected()); } currentLanguage = lang; - currentClientLanguage = ClientLanguage.loadFrom(Minecraft.getInstance().getResourceManager(), List.of(info)); - CreateRailwaysNavigator.LOGGER.info("Updated custom language to: " + (info == null ? null : info.getName())); + currentClientLanguage = ClientLanguage.loadFrom(Minecraft.getInstance().getResourceManager(), List.of(Minecraft.getInstance().getLanguageManager().getSelected()), false); + CreateRailwaysNavigator.LOGGER.info("Updated custom language to: " + (info == null ? null : info.name())); } public static ClientLanguage getCurrentClientLanguage() { diff --git a/common/src/main/java/de/mrjulsen/crn/mixin/MountedStorageManagerMixin.java b/common/src/main/java/de/mrjulsen/crn/mixin/MountedStorageManagerMixin.java index bb359108..2d37d40a 100644 --- a/common/src/main/java/de/mrjulsen/crn/mixin/MountedStorageManagerMixin.java +++ b/common/src/main/java/de/mrjulsen/crn/mixin/MountedStorageManagerMixin.java @@ -25,7 +25,7 @@ public class MountedStorageManagerMixin { for (BlockEntity be : beList) { if (be instanceof IContraptionBlockEntity tile) { - tile.contraptionTick(entity.level, be.getBlockPos(), be.getBlockState(), entity.getContraption()); + tile.contraptionTick(entity.level(), be.getBlockPos(), be.getBlockState(), entity.getContraption()); } } diff --git a/common/src/main/java/de/mrjulsen/crn/network/packets/cts/AdvancedDisplayUpdatePacket.java b/common/src/main/java/de/mrjulsen/crn/network/packets/cts/AdvancedDisplayUpdatePacket.java index ea031060..8daf099d 100644 --- a/common/src/main/java/de/mrjulsen/crn/network/packets/cts/AdvancedDisplayUpdatePacket.java +++ b/common/src/main/java/de/mrjulsen/crn/network/packets/cts/AdvancedDisplayUpdatePacket.java @@ -78,7 +78,7 @@ public void handle(AdvancedDisplayUpdatePacket packet, Supplier c contextSupplier.get().queue(() -> { Player player = contextSupplier.get().getPlayer(); if (player != null) { - Level level = player.getLevel(); + Level level = player.level(); apply(level, packet); } }); diff --git a/common/src/main/java/de/mrjulsen/crn/network/packets/cts/NavigationRequestPacket.java b/common/src/main/java/de/mrjulsen/crn/network/packets/cts/NavigationRequestPacket.java index 5e3b7d4a..7acf9108 100644 --- a/common/src/main/java/de/mrjulsen/crn/network/packets/cts/NavigationRequestPacket.java +++ b/common/src/main/java/de/mrjulsen/crn/network/packets/cts/NavigationRequestPacket.java @@ -60,7 +60,7 @@ public void handle(NavigationRequestPacket packet, Supplier conte contextSupplier.get().queue(() -> { Thread navigationThread = new Thread(() -> { List routes = new ArrayList<>(); - final long updateTime = contextSupplier.get().getPlayer().level.getDayTime(); + final long updateTime = contextSupplier.get().getPlayer().level().getDayTime(); final long startTime = System.currentTimeMillis(); try { @@ -71,7 +71,7 @@ public void handle(NavigationRequestPacket packet, Supplier conte return; } - Graph graph = new Graph(contextSupplier.get().getPlayer().getLevel(), packet.filterSettings); + Graph graph = new Graph(contextSupplier.get().getPlayer().level(), packet.filterSettings); routes.addAll(graph.navigate(startAlias, endAlias, true)); } catch (Exception e) { CreateRailwaysNavigator.LOGGER.error("Navigation error: ", e); diff --git a/common/src/main/java/de/mrjulsen/crn/network/packets/cts/NearestStationRequestPacket.java b/common/src/main/java/de/mrjulsen/crn/network/packets/cts/NearestStationRequestPacket.java index 56c9b980..5a8b553a 100644 --- a/common/src/main/java/de/mrjulsen/crn/network/packets/cts/NearestStationRequestPacket.java +++ b/common/src/main/java/de/mrjulsen/crn/network/packets/cts/NearestStationRequestPacket.java @@ -22,7 +22,7 @@ public class NearestStationRequestPacket implements IPacketBase c Thread navigationThread = new Thread(() -> { NearestTrackStationResult result = NearestTrackStationResult.empty(); try { - result = TrainUtils.getNearestTrackStation(contextSupplier.get().getPlayer().getLevel(), packet.pos); + result = TrainUtils.getNearestTrackStation(contextSupplier.get().getPlayer().level(), packet.pos); } catch (Exception e) { CreateRailwaysNavigator.LOGGER.error("Error while trying to find nearest track station ", e); CreateRailwaysNavigator.net().CHANNEL.sendToPlayer((ServerPlayer)contextSupplier.get().getPlayer(), new ServerErrorPacket(e.getMessage())); diff --git a/common/src/main/java/de/mrjulsen/crn/network/packets/cts/NextConnectionsRequestPacket.java b/common/src/main/java/de/mrjulsen/crn/network/packets/cts/NextConnectionsRequestPacket.java index 9199d9ea..beb6a549 100644 --- a/common/src/main/java/de/mrjulsen/crn/network/packets/cts/NextConnectionsRequestPacket.java +++ b/common/src/main/java/de/mrjulsen/crn/network/packets/cts/NextConnectionsRequestPacket.java @@ -49,7 +49,7 @@ public NextConnectionsRequestPacket decode(FriendlyByteBuf buffer) { public void handle(NextConnectionsRequestPacket packet, Supplier contextSupplier) { contextSupplier.get().queue(() -> { new Thread(() -> { - final long updateTime = contextSupplier.get().getPlayer().getLevel().getDayTime(); + final long updateTime = contextSupplier.get().getPlayer().level().getDayTime(); CreateRailwaysNavigator.net().CHANNEL.sendToPlayer((ServerPlayer)contextSupplier.get().getPlayer(), new NextConnectionsResponsePacket(packet.requestId, TrainUtils.getConnectionsAt(packet.currentStationName, packet.trainId, (int)packet.ticksToNextStop), updateTime)); }, "Connections Loader").run(); }); diff --git a/common/src/main/java/de/mrjulsen/crn/network/packets/cts/RealtimeRequestPacket.java b/common/src/main/java/de/mrjulsen/crn/network/packets/cts/RealtimeRequestPacket.java index f624853a..d23b0b9a 100644 --- a/common/src/main/java/de/mrjulsen/crn/network/packets/cts/RealtimeRequestPacket.java +++ b/common/src/main/java/de/mrjulsen/crn/network/packets/cts/RealtimeRequestPacket.java @@ -52,7 +52,7 @@ public RealtimeRequestPacket decode(FriendlyByteBuf buffer) { @Override public void handle(RealtimeRequestPacket packet, Supplier contextSupplier) { contextSupplier.get().queue(() -> { - final Level level = contextSupplier.get().getPlayer().getLevel(); + final Level level = contextSupplier.get().getPlayer().level(); new Thread(() -> { final long updateTime = level.getDayTime(); Collection predictions = new ArrayList<>(); @@ -61,7 +61,7 @@ public void handle(RealtimeRequestPacket packet, Supplier context return; } - predictions.addAll(TrainUtils.getTrainDeparturePredictions(x, contextSupplier.get().getPlayer().getLevel()).stream().map(a -> a.simplify()).filter(a -> !GlobalSettingsManager.getInstance().getSettingsData().isBlacklisted(a.stationName())).sorted(Comparator.comparingInt(a -> a.departureTicks())).toList()); + predictions.addAll(TrainUtils.getTrainDeparturePredictions(x, contextSupplier.get().getPlayer().level()).stream().map(a -> a.simplify()).filter(a -> !GlobalSettingsManager.getInstance().getSettingsData().isBlacklisted(a.stationName())).sorted(Comparator.comparingInt(a -> a.departureTicks())).toList()); }); CreateRailwaysNavigator.net().CHANNEL.sendToPlayer((ServerPlayer)contextSupplier.get().getPlayer(), (new RealtimeResponsePacket(packet.requestId, predictions, updateTime))); }, "Realtime Provider").run(); diff --git a/common/src/main/java/de/mrjulsen/crn/network/packets/cts/TrainDataRequestPacket.java b/common/src/main/java/de/mrjulsen/crn/network/packets/cts/TrainDataRequestPacket.java index 39535cd9..8fcc04be 100644 --- a/common/src/main/java/de/mrjulsen/crn/network/packets/cts/TrainDataRequestPacket.java +++ b/common/src/main/java/de/mrjulsen/crn/network/packets/cts/TrainDataRequestPacket.java @@ -63,7 +63,7 @@ public TrainDataRequestPacket decode(FriendlyByteBuf buffer) { @Override public void handle(TrainDataRequestPacket packet, Supplier contextSupplier) { contextSupplier.get().queue(() -> { - final Level level = contextSupplier.get().getPlayer().getLevel(); + final Level level = contextSupplier.get().getPlayer().level(); final long updateTime = level.getDayTime(); Train train = TrainUtils.getTrain(packet.trainId); List departurePredictions = new ArrayList<>(); diff --git a/common/src/main/java/de/mrjulsen/crn/registry/ModBlocks.java b/common/src/main/java/de/mrjulsen/crn/registry/ModBlocks.java index 899ca4e5..7e54e5be 100644 --- a/common/src/main/java/de/mrjulsen/crn/registry/ModBlocks.java +++ b/common/src/main/java/de/mrjulsen/crn/registry/ModBlocks.java @@ -27,7 +27,7 @@ public class ModBlocks { static { - CreateRailwaysNavigator.REGISTRATE.creativeModeTab(() -> ModCreativeModeTab.MAIN); + //CreateRailwaysNavigator.REGISTRATE.setCreativeTab(ModCreativeModeTab.MAIN_TAB.getKey()); } public static final BlockEntry ADVANCED_DISPLAY_BLOCK = CreateRailwaysNavigator.REGISTRATE.block("advanced_display_block", AdvancedDisplayBlock::new) @@ -37,6 +37,7 @@ public class ModBlocks { .transform(TagGen.pickaxeOnly()) .onRegister(AllDisplayBehaviours.assignDataBehaviour(new AdvancedDisplayTarget())) .item() + .tab(ModCreativeModeTab.MAIN_TAB.getKey()) .build() .register(); @@ -47,6 +48,7 @@ public class ModBlocks { .transform(TagGen.pickaxeOnly()) .onRegister(AllDisplayBehaviours.assignDataBehaviour(new AdvancedDisplayTarget())) .item() + .tab(ModCreativeModeTab.MAIN_TAB.getKey()) .build() .register(); @@ -57,6 +59,7 @@ public class ModBlocks { .transform(TagGen.pickaxeOnly()) .onRegister(AllDisplayBehaviours.assignDataBehaviour(new AdvancedDisplayTarget())) .item() + .tab(ModCreativeModeTab.MAIN_TAB.getKey()) .build() .register(); @@ -67,6 +70,7 @@ public class ModBlocks { .transform(TagGen.pickaxeOnly()) .onRegister(AllDisplayBehaviours.assignDataBehaviour(new AdvancedDisplayTarget())) .item() + .tab(ModCreativeModeTab.MAIN_TAB.getKey()) .build() .register(); @@ -77,6 +81,7 @@ public class ModBlocks { .transform(TagGen.pickaxeOnly()) .onRegister(AllDisplayBehaviours.assignDataBehaviour(new AdvancedDisplayTarget())) .item() + .tab(ModCreativeModeTab.MAIN_TAB.getKey()) .build() .register(); @@ -85,6 +90,7 @@ public class ModBlocks { .initialProperties(SharedProperties::softMetal) .transform(TagGen.pickaxeOnly()) .item() + .tab(ModCreativeModeTab.MAIN_TAB.getKey()) .build() .register(); diff --git a/common/src/main/java/de/mrjulsen/crn/registry/ModCreativeModeTab.java b/common/src/main/java/de/mrjulsen/crn/registry/ModCreativeModeTab.java index 9fb3d59b..7246a799 100644 --- a/common/src/main/java/de/mrjulsen/crn/registry/ModCreativeModeTab.java +++ b/common/src/main/java/de/mrjulsen/crn/registry/ModCreativeModeTab.java @@ -1,16 +1,27 @@ package de.mrjulsen.crn.registry; import de.mrjulsen.crn.CreateRailwaysNavigator; +import de.mrjulsen.mcdragonlib.util.TextUtils; import dev.architectury.registry.CreativeTabRegistry; -import net.minecraft.resources.ResourceLocation; +import dev.architectury.registry.registries.DeferredRegister; +import dev.architectury.registry.registries.RegistrySupplier; +import net.minecraft.core.registries.Registries; import net.minecraft.world.item.CreativeModeTab; import net.minecraft.world.item.ItemStack; public class ModCreativeModeTab { - public static final CreativeModeTab MAIN = CreativeTabRegistry.create( - new ResourceLocation(CreateRailwaysNavigator.MOD_ID, "tab"), - () -> new ItemStack(ModItems.NAVIGATOR.get()) + + public static final DeferredRegister CREATIVE_MODE_TABS = DeferredRegister.create(CreateRailwaysNavigator.MOD_ID, Registries.CREATIVE_MODE_TAB); + + public static final RegistrySupplier MAIN_TAB = CREATIVE_MODE_TABS.register( + "createrailwaysnavigatortab", // Tab ID + () -> CreativeTabRegistry.create( + TextUtils.translate("itemGroup.createrailwaysnavigator.tab"), // Tab Name + () -> new ItemStack(ModItems.NAVIGATOR.get()) // Icon + ) ); - public static void setup() {} + public static void setup() { + CREATIVE_MODE_TABS.register(); + } } \ No newline at end of file diff --git a/common/src/main/java/de/mrjulsen/crn/registry/ModExtras.java b/common/src/main/java/de/mrjulsen/crn/registry/ModExtras.java index 2f4b5653..3d805d52 100644 --- a/common/src/main/java/de/mrjulsen/crn/registry/ModExtras.java +++ b/common/src/main/java/de/mrjulsen/crn/registry/ModExtras.java @@ -6,7 +6,7 @@ import de.mrjulsen.crn.CreateRailwaysNavigator; import de.mrjulsen.crn.block.display.AdvancedDisplaySource; -import net.minecraft.core.Registry; +import net.minecraft.core.registries.Registries; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Blocks; @@ -26,7 +26,7 @@ public static void register() { maybeRegistered = null; } - Create.REGISTRATE.addRegisterCallback("track_station", Registry.BLOCK_REGISTRY, ModExtras::addDisplaySource); + Create.REGISTRATE.addRegisterCallback("track_station", Registries.BLOCK, ModExtras::addDisplaySource); if (maybeRegistered != null) { addDisplaySource(maybeRegistered); } diff --git a/common/src/main/java/de/mrjulsen/crn/registry/ModItems.java b/common/src/main/java/de/mrjulsen/crn/registry/ModItems.java index def3fb7a..2e906206 100644 --- a/common/src/main/java/de/mrjulsen/crn/registry/ModItems.java +++ b/common/src/main/java/de/mrjulsen/crn/registry/ModItems.java @@ -8,11 +8,12 @@ public class ModItems { static { - CreateRailwaysNavigator.REGISTRATE.creativeModeTab(() -> ModCreativeModeTab.MAIN); + //CreateRailwaysNavigator.REGISTRATE.setCreativeTab(ModCreativeModeTab.MAIN_TAB.getKey()); } public static final ItemEntry NAVIGATOR = CreateRailwaysNavigator.REGISTRATE.item("navigator", NavigatorItem::new) .properties(p -> p.stacksTo(1)) + .tab(ModCreativeModeTab.MAIN_TAB.getKey()) .register(); public static void register() { diff --git a/fabric/src/main/java/de/mrjulsen/crn/fabric/CRNPlatformSpecificImpl.java b/fabric/src/main/java/de/mrjulsen/crn/fabric/CRNPlatformSpecificImpl.java index 71e39255..4000571b 100644 --- a/fabric/src/main/java/de/mrjulsen/crn/fabric/CRNPlatformSpecificImpl.java +++ b/fabric/src/main/java/de/mrjulsen/crn/fabric/CRNPlatformSpecificImpl.java @@ -2,7 +2,6 @@ import net.fabricmc.loader.api.FabricLoader; import net.minecraft.server.MinecraftServer; -import net.minecraftforge.api.ModLoadingContext; import net.minecraftforge.fml.config.ModConfig; import java.nio.file.Path; @@ -13,6 +12,7 @@ import de.mrjulsen.crn.config.ModCommonConfig; import dev.architectury.platform.Platform; import dev.architectury.utils.Env; +import fuzs.forgeconfigapiport.impl.config.ForgeConfigRegistryImpl; import io.github.fabricators_of_create.porting_lib.util.ServerLifecycleHooks; public class CRNPlatformSpecificImpl { @@ -29,8 +29,8 @@ public static MinecraftServer getServer() { public static void registerConfig() { if (Platform.getEnvironment() == Env.CLIENT) { - ModLoadingContext.registerConfig(CreateRailwaysNavigator.MOD_ID, ModConfig.Type.CLIENT, ModClientConfig.SPEC, CreateRailwaysNavigator.MOD_ID + "-client.toml"); + ForgeConfigRegistryImpl.INSTANCE.register(CreateRailwaysNavigator.MOD_ID, ModConfig.Type.CLIENT, ModClientConfig.SPEC, CreateRailwaysNavigator.MOD_ID + "-client.toml"); } - ModLoadingContext.registerConfig(CreateRailwaysNavigator.MOD_ID, ModConfig.Type.COMMON, ModCommonConfig.SPEC, CreateRailwaysNavigator.MOD_ID + "-common.toml"); + ForgeConfigRegistryImpl.INSTANCE.register(CreateRailwaysNavigator.MOD_ID, ModConfig.Type.COMMON, ModCommonConfig.SPEC, CreateRailwaysNavigator.MOD_ID + "-common.toml"); } } diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json index 4a6cb64d..55832bac 100644 --- a/fabric/src/main/resources/fabric.mod.json +++ b/fabric/src/main/resources/fabric.mod.json @@ -26,9 +26,9 @@ ], "depends": { "fabric": "*", - "minecraft": ">=1.19.2", - "architectury": ">=6.5.85", - "dragonlib": "1.19.2-2.1.6", + "minecraft": ">=1.20.1", + "architectury": ">=9.1.12", + "dragonlib": "1.20.1-2.1.6", "create": "*" } } \ No newline at end of file diff --git a/forge/src/main/resources/META-INF/mods.toml b/forge/src/main/resources/META-INF/mods.toml index c773910c..5c312127 100644 --- a/forge/src/main/resources/META-INF/mods.toml +++ b/forge/src/main/resources/META-INF/mods.toml @@ -1,5 +1,5 @@ modLoader = "javafml" -loaderVersion = "[43,)" +loaderVersion = "[47,)" #issueTrackerURL = "" license = "GNU General Public License v3.0" @@ -8,7 +8,7 @@ modId = "createrailwaysnavigator" version = "${version}" displayName = "Create Railways Navigator" authors = "MrJulsen" -updateJSONURL="https://raw.githubusercontent.com/MisterJulsen/Create-Train-Navigator/1.18.2/update.json" +updateJSONURL="https://raw.githubusercontent.com/MisterJulsen/Create-Train-Navigator/1.20.1/update.json" displayURL="https://www.curseforge.com/minecraft/mc-mods/create-railways-navigator" issueTrackerURL="https://github.com/MisterJulsen/Create-Train-Navigator/issues" description = ''' @@ -19,27 +19,34 @@ logoFile="icon.png" [[dependencies.createrailwaysnavigator]] modId = "forge" mandatory = true -versionRange = "[43,)" +versionRange = "[47,)" ordering = "NONE" side = "BOTH" [[dependencies.createrailwaysnavigator]] modId = "minecraft" mandatory = true -versionRange = "[1.19.2,)" +versionRange = "[1.20.1,1.21)" ordering = "NONE" side = "BOTH" [[dependencies.createrailwaysnavigator]] modId = "architectury" mandatory = true -versionRange = "[6.5.85,)" +versionRange = "[9.1.12,)" ordering = "AFTER" side = "BOTH" [[dependencies.createrailwaysnavigator]] modId = "dragonlib" mandatory = true -versionRange = "[1.19.2-2.1.6,)" +versionRange = "[1.20.1-2.1.6,)" +ordering = "AFTER" +side = "BOTH" + +[[dependencies.createrailwaysnavigator]] +modId = "create" +mandatory = true +versionRange = "[0.5.1.f-26,)" ordering = "AFTER" side = "BOTH" \ No newline at end of file diff --git a/forge/src/main/resources/icon.png b/forge/src/main/resources/icon.png deleted file mode 100644 index 32e3e897a800dfa26f83bbb5ce3a9ccdcf3247c5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 45387 zcmeFYbyQrV65SpfOcL)&NEqFp8xI=Jv*Fb`6kRTyA!Gb;Vef#XQ z_jq@VH_p5F+`mqDL)WUB^H(*0Q`YL$T``*K3K*!Qr~m)}LrGCq8vuZLX~F=I5ntX+ z-OH>20RCQoT|-Z8un)DXyNk7*Bb3_H&lO4y^|gB$^j#^=F-l<&ah82gPj7Q2Wf{)cWmJ!f(HU z#c!Oy+O%e(MSH5IBUTpgpSrfT_sg&Eg&y|du121v+cIyTs-B#Jf@lb>?HI%fI=}TH zOnjsH?o*ieJT!Ax-Xk-!e~aETqB$8z*ApW~D)-FW}TGDSt zqqsHQ-oJ!5Sl~nF(B)kd0TB}!!e*N(a*CLAa(xE9O-DFHr}%ajM&QbFH$)vc=wX<1?SrV`8A^xP@I*T!GzCqt{781RG z>-IBm-DatQGc;n@jl3>f_c(}H9}ROyP9Y}cF-@joEqjDXy9)bXMhqABBSkRxU&ms+ zimNIQU5=@l+9PE=HMkV?|}2UQJ`PgV+$l$w;suKDCKM38g_%KVPilh-D%Fpq=hy5_oj zt*A0>VC@g!$Xh6Q&7;Qb4Fwj@z%W1Vfscq2LLppD(AC%|ly?mfXP*11ouvTD{1c6a z-?#Q#-^J`HiX90F9iX&KDlUoCRdvI9L2(0KjMhz4zik}rA|`2f30f}>8&>&dvjVLa zxQk-e@jGWfLrmX;tNS@{v3@`%J3!~*{e6ymq5;!8waW9EZ3-^O;q!*+-3C*35$?$P zUZj({3$Y39zQZV{n?sKY`IMY!ir003w1tN*omNdj8kbsA4 zYwSvF3W!d+)^go$D6Za^6Mi;3-^P;}G6^m~dDsdgOhs^7Rl42g(^*{PR^^EktPM^F zog2apDnpKQ&hcN{t9XTUg@5=#_7F4=3)7E8*x+V3H`5DShf_1#XY$Z$6~OEp4zQ}k zL*i|AE$?P4VKuw`^^m( zmcMc*=#94xGX!8aZeldSg|P9dX?_de%RAflSh(@42o<_X$WfmVwJP`=QintB7V0gR zzyR1mwCJT|o9T`T7@oYuNiUq^hEBC&V!9Q7`1xG7+a6Iu54yzY)>q{RTvIdg0Bssw0CUhAcO#j&g z79EjBN|04nqC1)a=Q_HWLUq-vM0Rt?n?Hnz$vpjapN%$?J$BdKT$T~0gF_aK3uw?! zHhPHEa3w8TCy@o)RS*VuREVbp1$Yz;!cMML>hBhT?|G+L1)y|w9<)b3qO-D|ZKhrv zOird76d-TfT34l`jD(qEk9bY|AJJ25NhtfQy%`MCi3Q+$n3$+an$g%>6j!E%g4FuDaV>hG^o-D6cuTcfHF`Y|kEKDr z^s&`wcLED-D()8Xtu$p{=1e(EVFU}VcBxG4FKc8g=U6Hlv7Dy?;nT3_IF-fpH4iUf zbjs#bGPx-?7Gmb$dk*L2;;%SCncV}Hh_0A!@C`gVTswAJcvBV9mME*?=m$!$Hnp6? zjrjqF9|I^3k=*f4twty{&Cjq^C9eStih8!NgAf5Y%@HA3ph}T-M9fB@s_TRdRVd$& zukdFzdPA2R>%(yThusO=uu|PJrrClBSY}*Sig$} zabkr79fB#&Nz|(auE9niW%Je7G}P3hlGp>MxAQ=D*yvq~L8P~})Hcrangj!w?T*X! z0ZG1J$V6XpopBF;`Q8AKBW=PjD&y42f@9Vg9o!2Vylj>SMs3@{r@)O{jJ@9viC>nZ zR`NCN$=pQ!0xI}EtSW03fKuO#5>gedv^hOUh&vJ*(#1N8Dz zdQu&d>juR-5`G+1u11P5|02d5mP_8h@0J-fYS$8pvkS>{9=O`>wp!O(~BME4E0qCPRY%~|By-pw^w9+AAl%&49^mB;+N%2)Y=T@C><1uq3-Ur})b?Wv7I8paARUh{ZR{2%C$@S|fQ4Lp|*U zOT1Tk%FL}1U!kmoONpcG0jqI_(wLfRVVmi`oQ|VHza&3S;(SS)sU(N_DW@s_U<^MY zNkLR3f@|<51AXl@p$)vR3YGS(=FE~aGT1BIX7|mIT@>w&s=+c#Cb%$>LWwoQ?IP(F;AP4=}Qi9@0$L0G*k z4TA?VR~;SfinSE_tofJnAr9IqcVbL^%@}*Meg*oCR953j~G02sja~o4M>u#+a~ctKD{_oO2dpPBAjzLgl{S6PNE0 zmWBbp3op7_n-6L)s6`Z!b4lMd#cT}N6y1MO%SwYJQ_N7um(I2Gvr(T3!by`TLDDUU zo`XI6xs{X0*n_DZLxRU-R0q<+9(Gd18QSo%o zF{x=nA(-?rx{9;5U&Ss`7c}!>Y&ZE}u~JYQ90Ud^Q$8xQIlbkZ`@ZpRIp%DFpM;Db zL8DqGMcqh@Ylu@>>pdY^5MX&%L|Nu_Ky~nS^kB`LU~Z%H3Vz8#x-q*}4Z@5MGC()p z%T_6Fr7~)3(}}vhOAeZe9KMWtF)(I;n}-CaphdJ>UIg9Edg=hVYn``C4BB z>oXTz|*jlx?D>B|wa01C}x0!OXux=f6L zkXFH{Mm8?DfK>c?FYN@1e zgMYK^m{c@2iHfel8*R4mB!^(@bi-&2^G1GDrt4>OG#M->Bc?e+cjmxrC=j)!(@DS) zhTZKI&9dlS$cUSt1iGV@U&8AQ&nFuUjt+(?Tbx+pqjl z69yM>MAFsLg5KJiX{7y*rhQwB*>F~G#^i(8Fyv;RS@rsTywG}W4a$a80Kd018m3dIE(dNxlfi`Tjp$^zW>R@sd+*qf5mU6V3P}K1#P*!XftlYaZ z#1Ps!b-E)~jDa0YtjuW7n-+LN39p>j`)Kv_NMZJ}T1bI2Cz{v{Bb0rPC7~z>NP--; z!zgsJgOWEM>3gKI0k(c$yI~FK=XBml6PTf`u!g^!mOk$&G_f`L$IPYoVS}n*xc#3Q z9vGWru!55D1hnb~tqz4hg*avY#<57XAhtyy@*#5Oh3e+R3o>#2#`BRLu~J)}s%D#h zkNDP3)f$<=R!!@jD(!(0BO8VIPgrm#Y#1AhM_Apj8d;VQdrKo7qbebX7K^274jRe1 z%6gJ0S(8v(q=|j?q}v#NIT_Yg`NZ+Wv}`a`7`!g1$B9vPJdPrNY)Gn!cwd_p)?YqJ zn3#-dg?S@-kdw!vlC7e=Rpap~s^xBW%UJ9t-cyQPAsh}Xap*=9Sr$7sc&i@Ml^I=J zSQEW`7fHu0t?rv9snct2UMKRt$@{^?%@Bee{RreLr-hOx#thzLGu1sJ#F<7kR3%ztjtB=mS%x4OPm>yJ#(p#FEcd`gv_wQF*@Rfc z@f`_+J_{38@2!{i5N-MgI>gVqeFRA5y7oE230y6t#uS9yZh2~vUW}e~1?)_r!+ghA zi(fZ)v$|oc8N>^-Xx=RWVvX#)5csAneB`nZ(3j~c>G?{#R*f(8#_qUboHPf*K@uI@ z@$+mnXKO3RnM%qlB&m2(_!x0PsfqAEI7ZWA$qx?M)^`mtgW_U;qDTi_1X#J+Sj9on zlNb5g=etLR*3y^bi!C!5R&a)-R=hN8MAAu@or6O=O?#YsRrDr3s=XDU?hojg{XzR- zZ5LG>TZ(o?)kO?N@rFyGI?{0mSC)>8-Tm6t@%8+ODFu_v!KC?0#QCoB^wMMYw)Bj? zpRi9$mM%`4!+DSay%E1T#y6}z8Z&EmL-UvjBUhQPYT8+`5zeP}5n1umLx1EEBhQFk zmZ2n|D4eRBGRVT2EI#$PzP66?xLCZQ4hy(?IQ_I-yk%K)+=fX{k7(B~Pyk$|`+Q1%$8i#2d_D=GjHdhb-l0ZHnm*Zx zu2|B|S@*q;@DHo`2)UC$Z1;xf({1T9@gc|1BxRQ1?RJYNA=?2e_Rp^7d6(cio&&1my~&%9$)BN&^Fw_1&_Fi|Sl{lk2wfu1FfaX~4|&F+%mM*g2A3RVn4Rr+ zTuhto8*hk)N<@CDXnyXr8Nu8j>`wM&p`P(Oyvv7q^`>!&*g?hsYi0XatpMg{3z!PT z;B$R6a<{g=l$D4n;tX^RlEIBwXX)SzNdYES`YuQawXmDe(dhR$S+FwdVtA&^|_1>F=E85I^5PvQqpYYuu6LXZ3AH)Hu7{RZC~lS z4u==tgA}Kjg0?~Sd!n~N=jy5Zo4fEis=ZzEtnnieS&S-Ls7TXW)a5DVD$Wup3lhA4 z42G>nmt=kR(z>oC^(I;UYJ1}&gSt!dajjb`Q;2r4Ag9A?%##X#jMen2SGA=zt_2|J z{fSt+u!k8OyL;tU;W4YuU%kt5&Hb8N3R)xmU%^0aWMnI!lHW!Drr3(_-pt1JsPH$Uj>rmgNN%K|K}Cg?uQhnHMf$Z3)X~I_1e2P6 z?6T)|J4Y*Wsfr-^N~nc&K!0CbsRYZwSlSk7w0+@3J~&hk8@{PEqo<0GvTi}o_bb=H zAZHfr+U`yg{Ez!wCD#X}u&PjHCPNg*mGVTk#Z0UN+aJ{4^8_9tR6}b|1Xq0Z#^_0v z=ya#8L`8J1CtycYCo;WQ4MiQ^HYvThHE)LlodJSLc3&z z)l;nO5m+-}E9MO}NpU9|;2MJQVoB_S)#<+4&mYcN2aO=2Nb%@S$OxCUni8_2c;kG1 zKOZ+EHQ&L45Sf$DifDR3Qg6VJO~6VBHeF8G}Wu*rY0u< z2o|FeRmQ^;87Y#F{V4Ge$Sb&hj79w){1rsu@uNtU{V1ba=4Nezwy`-`=ny2fFx=06 zM<$njVdbi*i;>WU25nnWiMK20%mlO~RM5jdLKa(7^<$i68U9w*b`oDE(qQeus~}5Q zqeRc-ikKOb1C)V#H(e;A^#%$F&|rOy>T&6Ha##g^qJV*3Ixjh8jACPy>?Lz@h-nj1 zeL~8zCD~iSuwzTVWJi2#Re60*@bW8WgFytPhpC{%j{JoA@vhC}8B#%P9?dkaD!RoF zx@t&v+Jw0=GL*Z;S=$9A0?cm&KuGB}@)#VfINy@mR6S#xsBs=TTPxWiDC%S);Q*|p zfnLpbncpo8SGaCbvv=_Lr=!t&iVHD#B%smk zrWY+2@k;0T1MVPzTvoK+9e$YLgD>6YPlf|*m5p-M2(CehXH$<^mA!;v2qCYVj!1>J z^CXXU3ep=`apg3b`g28DjE1NM1o_P^snu8PN3-HvTBD-TbvBaK{Xrjz-vspsh`al= zCSHYP^N?(%GqZgUUE#-jZOG!7l)PHIQtjH7ry;UdvCP-&D8dyJ5}!#AMUkq4vmg$a zaWali%nOzhm=D~!RWlJ8aVEgN1cn>npC%IuZF{TW+u6RMpu{3&-tAr(u4eoe>$Fs@ zR=zQlDM|GaVi}zJHn;`1o#u1pa3(@*g-)f=1Ogg%M`K;$L;_8w))p#lwvtv;8-Em- zp-FF^PRce_YG^MJ7vQYN@(8Q>p`pLWsEgSD_Y7NSu|$f;ok2hoV}SfJiD9)Oswg2= zz4A@a=C%C{D~A7_2D=QH*x*ou@+9cIi+#e~p&jGEiziD>7REBKOJ5H?v!*mtsCWyn{S&!h40vd%uIS1youpMt1G; zf>y|ve3|R^x^TZG7a!?~gt5RAY_v1Ft`B-JKWNpwok{)5AOM4E5i}|N#o&ll>7F(@ zo2kY3(xJm^vH4Wuj@9h|d!3xd(FTgNwfuBH#I5@d{wVEI48~qea~VYo6VsN&{fpJj z(>q6>jmY<4sk=;n;tl041(A<0&*UlK(B_H9&+@JGp04f5Y-G;!#qu)6fM3hEy=Lu0 zW>51En=Ta)L+*vyCND#A!gCV(%J>YI9>ehKy*GgfEWh{qa=U`5Jgo5NHw! znHsJ}sF_!OluAMs2FSe?wT}b_8#ft2)onh}R>N6{mVQef;C>527M(pt2 z!t1aFCu;6iS*p^e@QWoX7b7e92p|@>1&~yIePI;yJE){=o!8EK3;C^6`9`LIXz%qM`~>E2rY}RE1k7Zt z%Yo_)a}i#8&DY(7_QsD@Z%ZvzlLO#9w#QAfXJ*9bc1PpGm>MWB1@-oN8r$~tNX*}6 zj&BLw$}@c*Y>(67(&l8mhxz3RUpE}gV0jKKY-y946jNqjD8Q8+^S~J!3Y*pv4WJnM z-Y8d17+G@UV$kl&BnnFuP|QBC{zUV!$jYYArPfBl^wl_LC6f)aoiK=fL=N3Mpo13+ zt@v>=WKN4Vu8edGi}toX>Z>tchsSicUSmQ$rt&9*ydS;|7Q3p<*RYa+%8I^_FVvL_ zAuUbl^Lp0!&mWNdQprM^d<(M1h2jnkO7_;vMs?eC2}i26^$H;sob|v z<^`%~$I1yq%B2|v-yn}Omz=16g%#-7tiSn+B=A#7WL@m{8mkJnE>lvZ!W#B|Z|D6g zhkuJ6iLm0cJjMJypBVt4iCe^>xItSl&dgF*rcrvmUsXXA@^h%{gNxp0z3ka2G^sCh zp83}q2qib0yn$r`CxJP#ci3cU{^nJ_wuZs1&W1=>kZmo9{(=i(=PRNOWHx#$t$Q8( z5gp9i+9LrUa$My^%^Wm*9lp#_+rdWvpiQgd>}ptaCpkq?^ms7J>1lJhp!ZRwN8Q&D zYeBRMSn--kc^X6;<1-IN_2vN^)2|nw!<7l;r|g|!E{hLqG5Jg%B{3Dl_57Zy zg(Dpp(&eS$>E|CAlOb+-pkJ+JpNl%0qJhBE{PAQ;&n6*~%Vqw?6A*vK_FN8|0YSG+4 zAWq+U&Br2?c8v-k8=X+5=Zk5*6R#n4(tVBC64l(^%V$;idp?mviUSXR38t#NM4ZpF zjpr?N@uzGsCz0xH-q%12jE4e^s{rZtd7ZqjK24{oK^{H%W|kfO{D%tMpc*2E4`iF| zl1X)XxwXkmqEa83B?+joExq-NF>jmQwFN{&6wfOU0FfE0@~gR^nexj}r(V` zZn|?4=oGy{HoX+l8$aip?4R%VJKWc2+AF-yi|-kqx+VJVGQ1>z^{;cN;hy2D zbC;U)J=T>!)=}`eX+O^l7o=}ZTm^s;6rGsw8jP0bi?XzKag0_w^*Jt~iFSsz8azZP|&&s?N3QnsQP%h%1nVTe>5nCRV}`aC3NkN7@zRo-2t3`0O8ciP#%x!1$P@U{+QH@&e+^kXtC^i6 z>Y_OBrlZd3M^97@Pqq8C@P5l{O^p|*>Xgw>q-zB~V2IbLF# z!GAc@Y_3)OZhmeBr4cowX8kp1ku7?=}@i}2cw`o z7#w$jVeX3ctB#nYEtuVT%hk1~Rt+_@#gQ3yJnEXlU+2im;-Qn+9JJP_;f-4rWc8f| zB!=opVv@mKwyXuV=0+>l(=+HtWCL9tsPIKGkgWdn$Kz27%4%bn3$3nLlg&mA`yB60~00-v!ge<8Of~p%auM z826*BlxYj;5QbQq&56%DV+vBVGJuZZMmcTej*l9QI~$x_W?70TNX@BdV6^3>)6|QO zc9#c-MM!&pOESpLeM zkFOfG%vCj99Lp_2m_lySIU$9=*&-3>#<+e|i4EmtDC*`{#4h+=eTTQz%Vo7@zj|9ak0J`|(sOI0 z53;>EUnZP<>+5f1nu2W6f2!`)NRb(r;(&b?a@?E#A>XjGJ(CM6G;;ApL#R2gHm@I67=(vm(F#PmY|DbtXR#1@x>*%q!e6EX1k! zyy*rTR#aiUr{9<7njnHOlAT-lzv?~o$=bkNk+Oo=?45gG&38d#z~z%;9G{&Auv+>Z zzbWg^opXO>Rk{ii{)qAz7c9*}RA8o+9kt24is>@Z^?wakdyWp|AxV0pk~F1E`U!imNNKC3^mU-70Ap~ zr%Mx+_$r8%lRqol+pEH#{|nk<*3cxa`iX@`IBXgNezqV7e7aXAtH(i zX0xJHB%P6^5Ar_?j-ga?t{3a|UTtaFN|mOnERED(^ZjA@>R**08qA#Jc?cs8$}Ot4 zSK}^HCcCh*%9rtcpV9Lx{roCt^4FtaOHXNefPquZnsI5EU{Cg!eEdO=rb8!aI`y|? z=>ptPyn<};^rFeD-8TCZop)-aS3|=e8tk>Y z&KX-*Q808rINl1JL=j0Ag8|e`A&q4f%f%byZfrb-<`_tS# z*bxySStuDQ8HTyV<;{BWM^toby*buTy{U@>sx&#;&MoqfMNfos{wRu$FTTxY4_lmO z9xnMjZJvz)gZeqKv=RgHCu#-x!A)L0A5P2RDH5DT&|yQBa3G*;>;51CAdOok;F0iS zYrVg4A}j;53uctD$GQL;@agliBMyNq1A+5uIUdIxq0c?foM91tBJ{DO!->1Vug(e1sX; zThz;{Q9eN(`*(*+rC3q!+@dEMcIf*bur+LYa5_x=WsZPQ%D&LZdfNvcqo!@+*>sfA zNg9~DOC9|5=OYtSF|SMuK|fZgB5s_I=|#O{Yx~b0G2T`jbVkVt zG556R*Q)-C`CvwXnnxf-AwO(*N<&3Wh&(Gs_w@nawg}U(fwg-vhSN+zh+=6q)Hf%w zJgKIEoRpVSw}grVkb&(w-#NeU$9H5;g3P+FJ^zS@)k*8~cCd>HANT=&eb&vD1kf3C z$5>GaZ>LFncq{CP<6QM)PWH-WugVPw+aC8~zPGwqiT?V>po?z}A?l{#5lO4YY6euhsRPsj$`$0&A@zLoj;TtR}m-b;T176wW z|Il4eF_Xll2?Kb~CjhEdI%2+dS06T($HKa!@&;l;CrwX*x z$clN1EB?q|4z;{J*uY$kTmlYNh)Lt69TjsGZ$rHf8J&Q*B?@Y{O_lia7%WmY9-S-G zQ=wCx&UoJubnpqd5U_QlEJ$W#ZN_)2QyHUj4iV4wqWoD3`u4oEu`vtHWu!-AF>px+ z8>LngPu8}$6NfaO`M zI>CtgcJcgky1K|E);W@C)HHkwkJXoWzRm#Ik+brM>fb({6K#)GXNA7Y>L^1-&&C>h zpKRyDWb@F4&kN6NwY-urJelgt*~w1|Q{3=r(0TYc=NgCdc@&Lj#)4H8W+&fcrS+AM zPDuM3eqQVzCM_#1WYyA3r_>Xu_%*{l&RM&pH`UHiUcuy-lj9|z--uO8S%V3;poEq) zq)f($n1U;szV>AVhp^UIcfK`1HzNL!OZpHntu{LKVP^z2BUVqX%T7I;dF+BBI(_23 z?-57&+~uCZP=C6nZEUHO%?N_*&q1naOHl|3vfPIL`k2116!e=k+_RK!AsuGW8_*%h znN+zryuF(rL%1q~Pc#3rT3Aq~IcQG&4RG|B%XR}J=jQ7T+adNm)Du6F`BIB#kxAgczbJM)`0;~ z9i^1h9F2Jk(z|!TO?s)ui2p}~^JgHmX5WHUlDwC{z5`wWrds4esixd=nm2r15@ zt+lHY5|1p;m6aL3SJw5|q72YIZdB}l6JPYPV|eUUe9M^&9pfbfQ0vS?@vZC#IFFdQ(x#RC~Mz*Y)JFC{m}58 z73XtjSjI_T)Fd6TnCGxP4K5GQ{q-(L04O1S?TRHqGeRWcm7xPRz93cQSNHezTw)D3 zHcQyi`UHsf)x+%Te^y&&n0No4yL^ajxnZ7YHSSf2ht*WHv zi!fAR)BP0rsM4G;AEScNPs9Nye|)_JLH^x`1+M<%}92UA{eCO6q=NdgV z#2s^~IM!3KQh8jhyc+0iye{$$P%;u-7ssM}TlkY19_M@4err(`wtm@zsnu~X;x$enn-cnI!Nx*DxGKV`&HOfk$B-ksAO zB?YM-GPxIdo%X5Dl-6K;%RmUOrD!?Xv3XzZ9n+y!8jYHqT)yUc{vhaVnxpHno+L>gEO#8GfCftohAjq|27!)Vi@VS*@J6Hlxj*8$|4b|TLh{;FI+H$y zx4(^1;|JSod(Hz<{=nN@ApH9zUovTw1mSuDoS`AFvz+(B zUNxx(L=63D1X4B2`T*7F({gz;6CLs*t52fT_^jg9Wn{c_Zr}NWO%W#bD5R4U>&(r# zkxRFUk0?a?8-Y?y6rL0&ykbR)r4mw*^#qqw^xcW^`+aoi2t4M)PELNj%x7C?P8Fsx zW(Feh5doLnH0o67-!RY zKs-Gvms027nU$gIS+rF&+Q5N3@C(#dT;*q338A#Q;p)sa?4{P;rW7Xyv&$W`%W<2- z(Zarg3B?!ZCrW zfL`BI49s@<@4e5>i>rAhY)9m(8--!SD?VC#=7^HHP7%k#pfh{qLANN zSyc&SdXmoSs%MI3=bQFx!uWxYa6}a>l`fo~fN`9s0AexSdXhj{8sc?|3PA{OD-uQI z)i3rx{jN^CCjl<@KAC!kxnR-jXtPLlc-hz%Y9}M3>7lJ4O|2v+!w(YT=jY(&1ikEI z`{4DqO+`iuJF17AG%31(kcB-|mW?0*yRlAjhPg~Gesi9Fnp`?@qtkpoYoMEj{Zb-Zp)t>MVBa8(2S7)zJ_hPulJfT6SWL z5AB8$*$NI0=OzuaDz1a#hT<2ytg8?ApPGhuvuc8i)qQ2Pnm(Mho_)7h=krr(HB*w$ zh|mas&D)lDmQb#s^5E!RF!+(tVM`NG#nFE<$d&kH$xvP#vAgU0wY*ciJLwMBhMh-* zu1=>DE(crcq4k|b8bBP8IAd9X%lx;MT>8V)#|OLml*-X6ZAnN3ypsE`==Yh2pcuC= z5N>V!$*1SzN=m9<85JUrnwPf3pUgIw!ao&&1IUSo7ipF#H$`>ErcVZDvJZx0_m;!< zyac<-Y`-`Ot^yXjNWaiZq^PZtCJju0c&B7m33%Bv{Pj2X4>0>3F7z^M8_?F>yZwHU z5yRQ^Tk|MZ0RY$+b}u^%4b@bIAudjwU@I3(D5tNJ>&wnV067_Fh2Cbf)fz$$4uQ&fL!CY8{uROs@=twNFL%ek%&~%S zK^>t^FQOhVvx5F@N(Ch~&3|hAp}@w@$@MR-7qb6N($miRKgs&Hwf!0S%bb5*$cy?v zasN&FKWzU?_(e)hO<2|i;`L{FO0r_Kf94mqa)H=c3IElE@Coq<3G(rC@K}R*IC%LW z{2X8&kRS&X0^x>Of*=q+DF44eDLH$1f}J7IKTt2=oOUlb);ypW46pzPl-nA}!E4FK z%V7zGaC7j0p+Z9ZP$&p02>BNX4R^bjs02Iy>#F`hS-n8hAFp zi+@l-Ku(^&Df#0V;TLmWs0IIt)E9uiG+wL`mT`xIJzd;&U0fW+X#XsV`j6&6ht*yZ z$_nfWmIZr4UqFG}yuv_UVIH6^2q?@eAPnSZ19A%k|3%)#%Ff#F|4aH$`cRAh?Q}&u zkC*xV{_6TWr*xohe;@sQ=xFy>GEr0il@`Ka$loS-fW4tsf35Qc>+d0mE!f!x`cgms z5wQQ!Z}-0l21`L}Zhl@M9|tdx8}jlGV$A`DLU}m&fIQZ`AR$4JfEC}rqkFhmd-{Og zp;9(4Jic)C5}R*yN+o1v4gNdl|M$K3V&0#ZE=cGlnT206 z|Nla8TJu1l5J5iROYycAe5vK!U=Bec9ta1B4=ltDv4-$+gZ?hW|A)-`&vNz8+!N*c zbGH7EN+Zhk|EfiQ3;fIJ{UvAr?t8gxc)1GU`sZcHKa%-nt^b{mf7HPL&MBy=|7Vi_ z62JdL*ZX?o^*?m|ml*gj3I9)Y{U4(X^*?W9K%HMcefYfGrkEHl(tNqa zfoQ3sAPb-a-~a?xUWe|y^q{yZ8hHQ!Xn24AU;ytw5WjRHc`B*NAsxU|B6A^~pD5`8 z0Mq~_St(uLm7^}dPI?2sZ;xW76&g{zwbMW0cyP&ALow8;Ih+DkS~?G!%$s7(OFHFk^Rdk%^Q1<2 z`d&fL$G~8*yx8TYOYFV)$JLLkW_o7pdVxVb`+haYsfn6Uee*5(d- z{6Z^KPpm|*bOua-x5tL-s-y$zo2Z)+upJ>zy(MRL&Jo=!cAN07yScJN*rHVmhQq$8jGNI z(O-m-@Ic2&-;!-IemE}tEr#B>V3S}sNr`FBMSw@|O|T2wkU)r7;@(nPW#zyIkUm%i z?w41?g1{Q)Lv-(YZ&U9egTDwTAc^G`^-NCTa=ko7T;zyB2G+N`?aCzK%zkseHwS+E zgGi@{(-a*x*(sd(CxVX%iRc3nG%%)~$E_}n`*m=>>Al&(nYhd+6COPXMd!N4&tzE1 zd)L+qnqVK~C(Vkw>dWT~Qy9KYGSnxwvmVpTuxxUt$Swy(K$zokOY9kGhycI`rt<#I zuNx~auKytvT*o^1Q@V+jT|dH}!k!O>(yQ;1v{hTpbwsMBslYVU-AIdtO`a`QTWPC3 zRvYEzS2Cl~mPJ)Fn6||;q@K_7v6sDpsN%)=AK!8Q92nT(rw$*P>;2P*-Te0$KIos>ZJICc_NgUifL$nXCAlE?^}Q3a zzF21i>>wHide>Er9PXnx&7WtHM6LJHHy8?hGF4)|9PmY2+EiV<-~Ulp<_kD*V1n;PPHO`BG}4Ai9F5l?D>Ca`pU4V{;unpVdy{IjdX`}51^!U zcZnd4NY~IMozf@>NK5z7ND5K{!q7-JL(V(*dtJ|m^ZEQ@pB?M0wf8}x$L^<%&k^)m zGJ1P+CPHU!Pam2LwsMbuO1=r~X=$^)xL|M84h0ALc%1Vn_1?IDSZbKJ|E&~rF8KEfzk?+L zlPqY^6ET+|b%hlTPB}R+0*9DK-U7vdnyq^m!Q%d7dkx(ph0^ebdU4_FD9LX)N;EB+ z5=W~iKm60jmvU@NiTyBMhvLIupfhO4^S{ZCsT@%RIkqB_-2KoiZh`znskNu$wg!GD zDI){P^WxH51Qw6<%?&z3J1Z7^E4x2zW^H(0t{P7;Y~`t)OV#d<=dIdgZLn$ql%02} z<)1{uzFT3W@M%j0_ML6_NXjjl?OnB(B(G~tTYso|w?~X&$t^q6t`q3 z^eRpgS201(qsH9uXm!)$soB0ov(u1C8@kox9f}r&zum2OQbs~9^geGr;!}W zuO)~rgo;&!D)zl^XA0jN2#fIUx$Nd**Ca4_O6ZorHxGOrXXajA|E?MTorF&`@Z5(U z!8od1Zf?Oq3>&h$_Ko+b(>)mB5Led%Yvy0Io%V4}OYhl4Do4HLOfy4w3s3Rsnt z!Z#F^%llyfB<^;RR{K3H1%T03AfU8(*d-7D3Nthi@ckGf?-$TJ@jOrQQGNUX1aGJzA&P9^iv=qgxlJQ^$?qNo`tA^@ zdsvtE*t`}2wsl#bl?YM=z6Ivq84NMEPrR%$*f`TcE#)dFx$>crB8YF|0d+-#U12Nk zJdIw;a6Emk_>T@yMMgQXor7t7Y-@Y-=QONSB0mO!tcjC?Y@<5d#>W1&av6L&^}^gh zn>B}<{uBUT^Ea}i9-dzq3$-(!lD}8$g!{vNwMeh>(-=t*JT@91-%bKis8NByCF`aA{t@{vafd% zD^#ieyQWf5d9ESy(WUrIE>Ju${^T)yW3^fg6#&~L@K=LeKRefQHNG<-Bz~)+W(B2F?o+`YJhBJuzxOum2Wf8G0 zzE@Iy=|J-g*k&&`e~NekysD3y_p{9~!;{90{$s>G#5zk3ho);ob4vD5p3a?U?p1g~+N zjclv@6Jb-?|J-f8bo*&Kl}Zn>S>-)Y*=VWdmbCqcIU*u4BnbLn0QRH+DWu7Ew*n>WQL`Ek}6X;0XhmUQ?ar1e#A1)9r)crQO1L4BtFz*`W*}}qD zp>`r)@w)UPlYyDlTU8=9H{oYjJ=6rUrixOzKbzgS_A|>O0t-DZT)O2JOfKlT>G;c5 zrcXipZ3=eneG}`0tMXoh4B&qmL&Yop4WOw4Mh=u{20GE7d2LMV znx{pwW+mMbCyISwdZ?O7V@ORNDCi%efJRHkN}MVH@Eup3m&&cD)I8zXMK=;s%9vjk zc%(LsC7(rv;L7D&CL=<{^6WLDNN{a>u7WvQ2y?!UBPwoSKK8rEo`n==keyoPkZ2a2 z-|apny1Diyfq3fXFdX1q`2n!38)=(%y64<^v`(@|- zDJ;9kF*3dYtOkpLOiudkZbdNthYto$_$l2*7h$9K&gJx);{CYq=`A1I(o$Z%YE#!5 z@4$q+0WCP?s}{V-g6S2$Y{&C*oB|>TdELOq#D6$F;jd$hu@SKpzc8K&<-YU_D4^5n zhO0Y2XwJAM+NmJSX^1|aWPc(oy;L=IOzqs;n`JA_S*iPY_6GB9ag&k_VHw&>ZLY3% zt{^Qbq6#+L)`-Vcc2M#;%0x>wSh&y_(3%CdK8I1#8GC}T(u3AGJou@ckhTWm-pgkN zm=qFzbIF0e6|wc@88~5o@jdANd^31J4*R^SXd5=AYa8fJ2B|D3r|v(G%Em!k{NG^t zyhjU;5NEmR@SY-vmnC|{rb6SRv1dV{SAk7|EXTP~g9DhVY(UjmPL}Mclw(a&rBCt0 zw_HaQ)b`X!ZwN>&hNal71Q)LoqCf6i3;N>DNyv;~KtUBNFEQ6z@mm;|@<{ zKgdvv?{uRp(QUyeN&<$0^T9nqKjWb`Zb&2>bGL7ZrMOT3Ue&rO{1H74TgdYavzVT4 zrrKhs$?Pr#+=L%navpo)PT1EUo-CMlwBQ4U5X(nF-@BxfSJ2cYHbLHjL>*HV5UVUM zBw#^7;yAiwEVctzVfi&x>4J6M4b%PAHPw)tl)i77EdChpH=S>CdB1Np<47svE&+cv zf6&%MSV=klRRx>=V{~!cN7tZxp@1c*1#$NKM@Qz?)}qj!pDXA`x~**V;RF^>1QD+~ zy)1omL=@KUzp*cvT({Obx*8;V=FIvj(Q%=AR?wM2nwIqicGIbIA`VtUf-EsJfY`$E zpT}ihtsiN=q$zpY<&%0mLKT~|3;B252{703;M@lbj+v2SJr=o z$tc&O+lcj-41~<}P;)=1?m-np@Dj;&gl2O)j@C!4gi zd>;dt1H*;n?(s^5=#{zaUHof`CTy)&EsjTPq+4CaiiY97Z@b07-nxbR3!NBkJfN;u z3xu6Spt%ZYAdHj4BET1=dLKZ-rfI4QChDHrm*pmE2~^Rk_a%HkRWioIlp=~BO9)xL z7lWL(i6_y3)?d>y%;4Dy#QOYVdV!6lb{Na|i@H(=4;{6;>6p5|ttw^JOYMKl-m-@s zLZ1G7a3*;s!74kAUGBX(U&Semcn!Pd){glA9uHG zv993$!xCaCN}8$lZ7QarBYS@tPkf!WKdS0rt5^QZi5W9oM0*m8I-()+Aq6C1>Id1*5y!$(X|U36P^~ ztx5zrr^VUU+r}Y%uAk^0+`61UTxBcgxk6|;*S(k+qrgp;7XF?Hz$T9-@c4^&g^Iyj z=tF2s%?evd8zT{MB0=ghQn`--J!FnMHA|UUHF;rA_VUQ{`7eW9{9!cQSDJQYh?3wq z+ryl~RZV=DF-cy^O|k6tjIl+94kbiPnJRZpd5}b0iaY3OCE;;@T6PO1YiERdwK?_F(a~Ky0wj9W0qj#T~ZUvaEwU}dv zo$Go4n_r$N5e39ahsC>0Cg`)S&X9KVV&3smA6kf}*Uug_3) zKJj3g2JPePB;IV=+P@Oi!xx$yXXxkM3-RfD-zN-ZJ{@kw zz94lm{St|W{{mY@(Jm!gdY&oFI0;tBepqc%X_yeE-ulMUUhE|LnaW|@w8hD3&zApM=4R|I0 zw%@wy161%)bUQQ?u>NC*FBI1LRr4ln?+2qJ7oG}3YBxQw|Gg+uhskTRxY80 zX}JsWYVG+IL;&$I_&f!X;ADw@10{ZWW?VQTTmF}_wM!j;hP*Q; z1$q-1)z94dO;L&T1fO=VRzJ9C7_Y`~qcWHtHzEF9hkYX!gR0`J7yD&XrtruyUBBlO z#!}`w?e6a!Mtw@#t+YA71)+k&rKdNq0GsJXG=Va=n(3DK#(?*)q(09#DZ16@`hiIh zZXJk-vM?VHESSKs{b48(d{he} zrN==-xR}cICoa0tcRUSbsf&N=>ABvmYTNn7Jz(>C!(H}?G5N%*Sfr#Pm3&nV>{N;^ zrB)JQF=eJ+eb+-T_ws6Zq|+W zW(06yewE44r7QzRk@s(XVFn&cW)Mg}XN=^|Q;!&Aq|H=>g$iwbu6xsd-`U;c+d%+l zK))v95qZ?uzn5#D-WvSJ6V{kHUYq*@0s*P)KW|0&xe^G5sE`l%a1KAc771@cH2~WR zL|juBQb<4UeoZ=^7aSfygyck$s=kUha944n*o|T@yvZrb9*lAtXpx*lQwj_wcz^>d ziqI^b(0Z{ZXvL(1VXcFAo>dH9Ph}hE2&|f=P}_-(4sNk1yT|_Ad6^!ggar6Q!)exq z^!<7Z@4seOGr60x;Oy#CxAui3CsmzHy5$3kK?l+n4H-5Y!xuB{z%=n}5Ya1V!*zf5 z@4B4Tz(FhSvbNnZjW@M4%FdV(1I${}TmH?vpA?Rx6vKv*g(U0C4yhu$l zs3M@d{%l_Ur+vW2WkNC-QTC!mR7dYmdnyP^C9q&0n2V%Gbmll! z`0p-qw5N1&##LihfUUyI`ptthbX3uO35Lk-i6p_lCYuLr9=GJxIR&82e;)~BCh&SR z=gr~SMsLJUWS9^jJtvxp-M40QFmqK4+zZ-#pX}`{QcIIT+uDTk_ZRJ)M#pq*geX(8 z*Y3rvZZrwCvql1wh4wBoQWKZZK=|R_JH1&XM6rjvR;+z!KzaQ zYJchHc>arbRr}cK#5yS4qW;m!E^tdmtvL_6FG{A4YE=I5d&|~E2Qm#_vs5Vdj)i*N zxdYj=jyT(M>NiaPHsIS};Lrl0Yj!r7cq zNXt<2-=NooX3ftJ8pMR*sxeRo zLa;~tVozTT<2m6vkpzHd^AWReJk_z#0Pi%Z@#)V0wEwjUS~b-?nlBE)K{STFfKpAr z3BPyEQ=Xx`3_bcO*_^vw|0vknJBfBi1OjTG<(fic*Uex>GPswQCFX|%?Orugt^Pvh z-kCdr>D?Bk4~y#l?rW#%%`!Os^;mKENU0fPX@vmSe=Re?DSqbWTCoi4-x&PpmF1p2 zcY7}~8CCN0wh&g&tN||n0k1}}(%tpKjb&k}pdat01hl8IaWju*d*F+!Y&g^E6ZxUK}A1Lgvu7KVoew32Bpx^=D` z^)p0o1R4~m7uFON&ZlEzhH*zrvd@u1)3Bc4pASk()&tQc|1lf`t5<_?&ZRYjPrN3? z03G$PKLnv|*jKZ7Vgh&fi@p=LQ|h2|*I@+Z^oXw->U2lyFfE~{TQmfT5n0i-1xRSmZC9yqjDY+$rb_cq`mOY5-R)G!{4$!E{Q;+J89dH8vKm; zwSO3+7=`y6#@)R#?Zv$jn>OEKWmD}a1=I!p`z~=OKXDpE4L!BVC17AaRt&F6O$vJ2 zoueA)Q_F+i-qm{(}pdgZt=PFl9QP2av-(+~<-6~QAix4do?T9I4KmHD} zLCN#P0%hEH9vT}E)z!BAC8B>&8MPCJTmC*f;Hg zNlnCcz&9ti;=Yy@1~u-+cn4@e3?n`;f(XuDO-Y;bfu5=3jB&%ZsFe8{h5(-cvtJ5Q2iQ{&X?4;2?rv z_s7BO)zC$6|KCV&67OluG86MN#MNRF=1&Nlz$;16b5is2hn4^fKNt6c6?eX^tonJ9 zM{GD53~A|u+WH&xxrch59eZ$)6{2sAntj@@W)o9%n#*mLFJFjHkTGG97%jpvmD3CdfDuQ3x9wX(`FgLv{x zfUg95lEqaQta7>KM0A5)Bq3i5#9jSPVy92WY4c|Wb;4d&+)n%L9_rQB@-<=>htT>p z{ADH4EV#K_D>QBV?%o1e$~~>?cacj>{*vS-U7Gau!14E*O|Pxq>s3v}}6@NfBfGc=dw_l5#ch;JWx09E7$W zDvbLmN(JdZ4}DLA6r;@dSVHNfWI_8%SBII}lyb?ef69&#T}2jGQe0847Xg=rWd(Z9 zAIhEL89C*Ce8^wjO9MkFs2;SKB3d%+nQiXf%@GNvNRP>xaJkTCF6q0b5sk%c58BL+ z4`gT0RMSCjWAn}S7l1jMFq+@h$c8Q1z#>lZsCGN=9K!;U7yqGi$YOR?Ef79-oCBuv z!;~IPgcW~fvCJWm7uf?h$2Zf@Q@-#p%pZCQt`BKR?;m>)`P%mAA9x>@7b`+9(p|A- zCuyG=1Pz}~PW!)U+}XlM81~NUp1HnwbMuOW)@ph$rQWRim~mmNg%L7pfl@LnN>d99 zrSHnyd1Mj=+PV#`$&={{&;Ljs*V`|bn8(vGq>LpNuK^wn*0E6$VG9-l8mAul3^}EHM zXm}^PeEr8C6Q{tNroG#k>FfLJ>Wi+&)?QQljWA5>w=6a#Bz<-BI7`Go$v~tn&oipp z-$mZ?3SO7|DWWOp03c}oo;LjdwA^FS@#A*zJ9B=G+ofl7m9+s=K*^Xw$!_|CiGgLClDrQsg#g z>(gqr2fSFTduGfnR`0X+=g zJa!S)`{+hh$M^CxpTkwBY3eA*!9Vo>kv92#O|mAwBmGm{F&{lfxW zAIX=Bp{BzNF{{z3GAhr7A#%f9_qZK3)4p+1P$OGY!(or%TJwkundGQ|0^RmEmD?Lx z2aZPQ&idju*IZ>fk`QFxZdEBZf?fDPMA{@s`T{AHZes=~WsiE(xD60>e67c`{lyMH^ZJ9Omt@`LZ@I*fzlW0Y z)OYKE1c|^blG7meO>y~vlO(z~&wUKV!y~_=ART5u%JOue(r%%enS#30jQ;1pcTw$) zB{V6U?q2)BOStMnhB$V9Ftr>3V03Dg*&wSUiT{C`VfSQt7we-1{#WPJh3x8xp-n{| z8w=RzqlasjAb51^!@{A*wn}-zGTyHrD%Ng%jI?$jP%JL5$sXsyjk394<-EX1l89ZP zMGYI4Ep~dS0>HmqQzTTeIl%iMI5RR%enz=gCo)3^x=Jpqh*lq}7P=g!NRNphVD9~z z^WP08Tn1GI%w|-11(z^U!(3qmx!AwGGF+ru@>ZYV@o(Jm^y!n35>`6%BvGp}GOp=RWre(UBHKBV?7EP@fkGhGMXXy|}<^&IpB!)X84~vJpFDp|;G5kTmO2hQ3Q{$K+79xaB zGK_~ud%c%oKIexS-gc?XxkKf&M)rg3Cle{n7C@)qoJ@p?R>qgsLJHUc>!O zArT6=@cG91iK+k2WFYHD2xqII~FYl7Uh-vG-gNsxGzHs|{&UegO@Tk(c=L z*8LCc*+J&rUfIb0=^R?_A?)_DRt%yi436zUo^SM4*q>y5O5ko~%|FFk) zg?IeZJz=BzBA~x%y|wiEX=uoLR*QdkOZ5$(YeTParXGpUs67?R3@`}`WOB*}7j&^0 zRY_DxfWNQ8^9}WhH<5#F5`FjV{^0Ymo=RJ5b0ZGPmnnic+WJ^Lv|d*;@_#$)*37NN zO1eb`Ptp{j6u`xm-q^EMo8)wd067~aTNwz8C0q5huedu`Juld?>-MD6W->RcY#zO7 zaYo1QGVi!-#Hdb_4L6Tn`xnU%pw%oG*4CUH2tE&nJPl&=t@>L1J~UqKr11P(c3Twd zrp*E#b$Bvrk?|eeTlF7^zSh*G^pNqOIJ;&gh6cn;>Jf&&To1fi2*AEeawWcf>{nn$ zD+jV*qbMh>Ys*Z~FRm{CowR*5M*J9bk*&f^DFG5<`liuC_NW1|^@y_p+OECAo6AnO za?G^fOKM*V=hS!PtQPkjqg4EvDE$tqkAjO{MQlIebUF z{usemjb!u#Dkqg0uH2tfO}iZD0$%wgVx{+B>$-nc8Wiha4X;0i$kZhHzZl@BS}7B0 zB)0ji0F@R2e5Hn@5w@+OO!sp|LXi@&nol|2jB1)siU+-|4fO5cBWf%a4>t~L6hJ-x z$;5=%??gpgs=iSAQ5O3^#3BkX68!a$-raHYMOKUBe-o2b__Q}!HCAHL;MZ9aBp#g9 zkab)NmLPYt$Ixx8pzEp{X(-}0F?&-slwKlKmJ+CPhM{8O@>LO+lFoi0a6Lgt0-FiZ z*hq`qS3Xao8^_n-35b|aGy4HR#W8B^x28xkACP8|ka>>Kr$kP*vR72kcqk{e#c7nM z0EYV?VZ8>AKU+^BquQVU0^_2aQttudx&*})7=%UQq-4PC-v)2g&m=y8Wp4zXbAC1G z8@b%^re|W2Rz0k@46p5TZ27JyHi}%SOy_TGv&+TNN@cBIIN-^%O+F_840k+k^`@mD zwV_uRNmG8+7GDL~bgX(%kUuR4HK+?mz1a$CN>>=t((}nk&5H$+#r(jOi<55zZi)hO zR|2=G&>cVBDtejJ?OsOOK+@9^vnfF=ywudcG3ueRi~Vfm1dJ!>+m&}l;QiMQY&TVO zlDl^QwFp>y$L>5*qkjB*g4Z%`N*t!{X=QhBQLqs%x-Zu1_%_hog~@u^1u}kF;eBdc z(P*jc)C||DX^}Y{1;06)nuYT8B=hiLBrAm_FE!9z;?(m$%oEWMvXPR--Cg2_a%%z0 zrzo97Y-TzRvI5d;g4%e&OX2o$r%DVfzQt>H(}vY`r8?%R3m{xHGSHxRxFe+i7CmGP zT+DJNX7s1~LQUy;z86O~X3NkVEFs#xX1j#ybJOcNng20RP2Kgz+Atso$|+I z$+%R*2F_lP=;LcaaL8$>z!b%XBvXZApFVMX!senFSyqSE!1~O=){&u+WvgOfJERuf zSyl}{S_2}K>Lf5VoKbbag_{+$3k(gKnXKq%m;o4fk_Yc(YV%QiIZyfz#$w&Umw9M* zXMb{k-3KZn&+h#?3{iV@`_0k8dzYz196<=83?pF=7IpQgn71jN^;AKhs|rirn+I5G zr~!WuD9h|pWNpo^U_O>=U>Xk-GV%le)1`+fnbb!Qi8X8%m?#E+7Hk+g*lVfA<_pa? zX5DH`=k>lN33=HK1v(0`2fqT*!F1W-^X&@I&mAU*R3~o^t+bBoZq1jnXrFRNg8(M@ zMD;pE6%=0qGhQ49v~w-wa@np-+FLqY&9Kdf*wfaq^}#+;c3AakVai1wHz( zpT9iz53p`5nyGGAw3{OI(Gq5z0;_C{b~4~-UqDwr$v>Z1M$sBHSOM!EQq~stK5lDg zt1~+u&Si>(q$SRWO)PlDD)bQAdbPgL=jj@K>za)k_enWA#MOJmrCh5K@pCznw8gDC z1~9Y7?+1K53{Cv5uMG`3k#Oq0;0~*xAbQT7W(dx>vwCQ@&VWSDYKZBC9GdB!M(|cD z+do?F@S3&VGd!30C*cyvO$fOMbL;Z4hs$D*p5LL$}> zt$uXGLaXUO>P*aDpR-jSJ?IsB?~Kme{dHIwdQOqMX;6B~vBU1}SocuVTQ0+B~(Pre#d?UkQu5S(dDY$&xVM)OuAcqA&h4 zR+~V-9uo&Poug24E|72e^<_j%mpyvu_`SMw670iU5P1Qr{(~Z0r4i>Phcgtmy91$At7KTaV>`LM8Zc6TO{NeC|N@ zKtPX;kVnli+INwScIM{~aG4uvQ!kDCB1}S!BhCZh(zj!!zOH)fTgpvWPeH4VsWyyX z04w2JS^BXyzN59o?~8f#Q4$`-GAyxa@-^h7tggoTi?048=Q>bv<4(dQ78_DVHDUj` z;5@9HJ(>0&Xqd4mtmpHY1L-H7{V9%1Q){8KYF@D43jv!4=pWo@p}p+Tk_o>!d-*H} z%KAKMz>1&u*4-vk&{@QBIK`5B?BpbCC$fb$qSU5GiFFO({YFb@Sp^Tn*cjel_eA|X zK){}aGZB2ApwAH6br&$7w?45icgG(00`geW@xsMSPz(2LtJYuog^E2uT4-qLrIwAh z3jDF!rh$4Jh>#U8P#4sUq|{;q5Lu?Z+t$n%4(1yo8%SuPK!2YGt(QiZ@A!f!~yOz-KxhlOjAV4pWLh7mWm7{MZr8Do6v*8ED9TvEV2`GEw9H+jJ|CuW$3pn)jwn`` zYG%jLc7UZOTfz$U6QhTK4m<=lHN?!8pousTV8J-9K`f2+Q<0-ZRr+<5sASCfCcS*^ zW?|~ncWW#UL8$Cc+@&89#wF^+hWNmf-1ARDJ5F*Zz)z_^cCBj2S!k-k&tJ!RL>(~3 zUjBM-3ChWV8g+f~K0;wp&rg2}A!6|L2DI9?FV|0OY?3{#li?0NmNlMro%kl5qT(TL zNki_TH18e3RE@x`1b@Q3%k_D8>lxq=X{a=lHTfB9jGKVtM~{1#Uk<_3%dYOg;jl|r zFr$Z88}qqu#X_n7g*^p;7}d$x06eA$Fl+6fes(#$UhKt3p37lGG?=iYWMfgUSl&t^ zW*A(LlXpl;O-?5cEA%NJqO2T)*WyTM16NiAl#`aap>6Xmq#zxOBmm0+pruW&Z)=Pg z*jah=o9Nwtgt++<6vR;eSQb78QT)|c##|GL<|A~*x)F)k=+U{=|LyXYoI&ECGZVNq z$6jcXl3MtnSXtlvITj|tZ=culjEBSyO}|8mtFwY7)x#tHqN!Bk%xOIGW5Xw@(f5DR z*fLpj72~!&M^NHV@MAT1X!D6g!jh^Xcn3-NAZ?F`;}6nSIo;M-Et~F(uNVu$U>{Zy zU%)AhgFD3F1gIP))U~#kNZwnIcml(ThC{at@bBPOi}Ilr(5v{^7z;Id0UP1~h?@Q- z+1-n}peFMJ{xk@8+b0CF{%FtxM5dP;u|2oODF!2fU#KBEaF=!ZjEgB^^iCqoR#$c3 zS8na-4%Y`awlo`0voxYjW{7Ihm;HmzRtYBNM?Bk{{iC%O$3%lS$JN0PD^iAN#6NZZ^x|G)Al=>FYfXYY#YcTw-zTVonQ)w&DF!IYR792$x zzmI;;T{ZVWgH&gOuVkB9W_4P=<%4utg!rEshkdg;$N8w3V(w(tojc!qrQS}!@UX$~ z?#Q0MkwKd=>f`1?m49E1Y)0Ey3a=bvl@>4Sn%1o-Mgqpv6!kYT<#%6vU&5|FIk1(R z2dl+A1+v$VMMn$`6~kfiqAyxDCteakTK{!sJ2mnM8VZMY*{#aa6PJ?Sx_CW#@v)f- zgDJNK;O4OgcGZgwI7_Opt~x>EW4$Quw!ub!S2Yh}#ggwUh5#6Ofn23>M(m9J)A~ge z-|_q&!mu3#y=?pzT#!4Zs3dPego@CPQlC$89j5LkE6=%4!A)Zkym=TNR~)GHo;##4 z-&~LasS6CHK9fqi4Axu^m1`DqAcPeajTC+U$$POw_JGmMq}^qaL$HADK|5bfnqQ38 zMTnpg>x$)`eHA6-F!>`wuJGNAA%(TXNsvC;QZK_AG9)+RyWF*2z4PLj(B@?h_@eY) zG+8kEYv@C3{zJOl`(uKil3b?WLEGsoxRekrYd86dz<#XnJLr`1&GR@J+<+_3b#X8{ z8i^T-E+^ita31;*AL8=xqYR`Rx?O6Hv^kVGb3G3}@G1lS%2u0vjAHT(aZ3m#db}A1 zliafWi2n8u&eiNaER^K@-xlnfFn?RBMbqqaXcc2D&vXaiIso@-W;+i>CQLZYd&NyO zs}W59EK7HdIlwuIM^LipiDV=R(-o#TBKrN|IhffIPqNJ+59+x{IqU+qexvPFVVVv+ z5;#|LmvJ#2;D6F>WTT_tW9+>Rl=r5GVlw=v7E~4mc;CKxUYg_g=Cgy3*+LK^(rzeC z&%MB$&W8k!0HRwf z@T+>`%x^oV9xg-~w#@xGxYfV~RuZVkbC-!uL^emOO3?tI4Bl~QS~p!VpwBgWciDG1 zLXS(oaJr2BK^0*C?PURDyf=XD{m>dBzUSO)@YZDESv`<}^AO#1o#Elc@QgiGWsJ}& zh$a)K%Ib1j11?^KtVnz)kO~P_t?l7ml*5B#gO_WH zTQkm|A92Z#o(`SfH=zxd~6`*3;W928UfQ||LEe}~Kq;lrqXc8b&+p;kiP z0tb<_-+Z?GK({vn;5J>&(1kVo2MIPdj^HD^D8su{rtp&EoGx|ya>B%UTvetD@fWO7 zI8+-EA}lYM%fxs|>-`iKkZK#Bl5bsBk+v*RcWl5?pIN-x(rTdgt)V!YKy-zlO^W?j zz)09QA2%B_Px-+LdvZ*Z2kZy$VUAl-xhwZYuVYTi!yS|eQp4xhqpkXn4n!kD4kE-} z08|HZV{8#LMt+toE*VMH`NhA%OTt-1tV?rK8Bp!}c{%eEVtsv|wZ{j`^h zKHAGi<{g-f0-FjK0m({{?fyd0;_O&_fzmL`k$ZJkXc-{55+}6v2PkFowbb$xc3Z zYPV%kNs3Ft4@o=hLA}zAtiO|fu9DyJx=dfvwzg?22BnLx_So_o({Zezskjtke+S~x z-qV~+1|=%GKfPxA&YlZ56fCZy+|Nt|XQ*L@;BStKoH9JTDk=Tf@A`15$vOq3Z%BPb zY_sj>{^;cuJW{>b5+_?a;i}TM7k9~$1}KEI_}}nWcY;pIko_;ST7FFCSnCuutsR0y zh`B&wX;>IFM;3FJVj}#;O-$g{SAF!KXWlW#atNv{N8O|Vbfv7vs#{+bmzwlo-Q4R)*yV#@W2M9L{zga@Zyy7}^wP~E0grq4c`G<(@_L25qN zuIR60=WWY+Js|?q98G{t4#*M@rHFvpGtFDF;%s^p`u~nq-pd<-)NIOqAYNic3ftoV zmBdE~V^Nn9h zWTur~O=!4%b{oK$@g|k&;i99^q(BN6p+18ZZ~8>PPZA6a#b1;YL*T}?phXcVE|?dZ zDx&R^0x_r1Qj$_&SW$`q6%#f|`g;m+(1PbeQpVR0+Kcpk#L(XDOVXttTljSS$q(?f zJE1VZ?uQI?sI=;350AS+LVv6AvM?0Ia$lWHjsb3n+I!xymZJuk7QmXGvX=ec#=S*{ zX8$|!RmD0NM@`0^#>uRPYoP_nAM#Pq;Fbo7p(oUa|30@1BB>uKt_w^zp%5^w<161e zwWo)m+RN{fef&oR$f)Zk?{>+xC3o z&(dZb3Mudm(>t$8^d8Ep+jVQ*Uf=^M0gGN^wYbvRK)!nH=>8OQjjc?`4T&?faOQjP zMJ6>k*YRG_k!^o(7VC5%NbcShaaFhdNeo!iJKOWvh=HFvvRlLvK?VB=i??79A!um= zRF&MqcC&Eo1)|wIlBooeL}j_6eHz-;gm0}#^KYdll3O$=8@?d27j@bnZpiG zJDgI^*Bew`f9rH-j&Bi;F7I)g3$Im;l;VSI<^ z;iB!PJ^AOu-^TthS~{yNz`a{o(IKUZ`EZrCu3oCKENdmZ2D9;xl~AHEtI7%O=ZXXm zf%ns>#SWNG&X7dpk6X07@dj}tUMc*-hg;VQ}MFpb+48EC`mPjKOCi#-3br_ar&0If2iO$sH(Ty6=IRf9`mF@R@5yBvu^12we+TE{127E7@ zY=T+Dd+9OU6Ot^N{|@Pm?|76zhtQLZknc>cEyH>_;yz$Q8H&wyGt>=*^MB>~`=)<=8ZhwU_!ryI!1$lv%~^32aP~81 z%DWAc>W(pwNiTF`&MX-*pzvp&D1dZb`!vhoADPxRiKvd!(-+qPhflRD9a=JKI~GJ| zR;7}#Wf5vuh6$;rpEEr);Wk#YuO+B`T)d5v0592mTPM-64go6BOXXhz;XP5su{Ek1wQ`IEUUnaaK9LZ#Y$+#w3t7Spq!2o9M1KhCCl{VX6DpAx_ANvavr!-dk_i=#MV*l!r9 zVb(e+dPZmHn`(?5w=^{)IU3JQJmfu-Wss@IW4?txkZTtE0w0$xoYAs@ovF?KAI7Zv zhgg@x3gP^;t)iB0EEsNtoV)G9Yy6Nh>tkwXVi+jCJQrLnf*Ca6k`K_<=HhJ8s*?t? z1a8dg+;el@OrzgRTc5V@LE?v|KWfoboxJKUjNGwgDSNh%3v-w1EsagI7)(}nle z*uTA;avBO_1O87X98T&hiRKPuB}b^uxN~OYOH6{FtgLMEzrT&-mlZ zlzl3cZsVY*G-y$}x#TMoGfjwQcIfNABBL%kxM*`P zQj)D)?<$e3ts3Z4cE{O-7^LKALXsX=_tnm4WPo6?TE7xoR>8Vg#P8UB z3d(y|;aWdCx{P1J64R*{UlKt21`_w&w)^Q-C6~M-1grzng#^His!WVFJL_0EdNGI& z^uQV0lGimMpbFM4@7gKLw_`4r@L@%gaf#06`_~CRS0s;7*f!{&6~Lm^zSW9QP_hpp zRCkp>{6)*C4s(&;O4ERyR^1!JViu$>l!f5o4|Fjhr+kXp?Li77E!6O{jUPc3z+ff}Y||0ISkILaz_$hLy;?F43B-W8XgR zpG&1=py#}s4-|MdYjW{Ri^>37+iOG}lbv}b#A17qb(n-#vGau%^~vqqz=p3;Vqk9I z1g9gpYpm&mKRi(Nlp~Xr)uA`uvB&;ftJoG0nnU+yAur!!Fb>m0r zbXuhIrx;mRN%^CDy>*%g^L<(y6-g~8M;kL?VO9Qp(BmvRVuu(_4wl6kljc3IMgL#J znkL}4{W03QWynX7i+21}A;8rpvZ1$!+O}TIjS6b!nKb|7R4362P2B6gY+K~UQ z{sPtw!{2Zi#&ggA{#imsdJW}6Ka;|DS%!Zz0Cn&W1_WXe2K28tMNOerjgqu}e1*~+ zGNwnA$`Em!T&mFX7AGKNn`0f5yvXA?w~BSkhkGwGB6GSJi>CyxDcmSR1|k~hChR`GvafZ?8>*v8x93;Ddxg{SnTRzug^(EHrIu1rLGQ;JR|8&1FLaY=gW7 z7e@eSCk3bX1mQ^tDGTM2=6ctJaT3%5D#+a?(MDg~tIBKNDuO4tiHBtXt@=*9k*1YA z!Q$17XEb#NW#K}CGg&uz+rW?Z*9pc~(q7yzVODe8H2PdiKmPQ2XG|8#>^i<%?tj=% z;50HK3mV$J&Qg#6>5aejH9|+QP0>Z2=1jB(Wwv;_DcMhCPu>fbR za2eHyG5aBv*Mi+MHtX{4Ly&cw_H>?r)Rf{FYM8D!pxcd(S!{i^de8iG?hiDct`miU zwrj%(N$Q^Y(k1`nY&;%5>~DQC((Law_*RO$lw5~j#}ElPBwjnRRH)|-YF?sgXXAB z-(!6@O*UHpvp(Oshi2)FgLb_hFtq_izQGkcCt(L+MjVyZWr+k(I#?9yz zfGc`4uMRu^ncbo~4pAxB$?G(q0B}g513ZTD!QIw;1q;Fg6aM@H05uF+z!E8*ZP3DG zsrNE_Kje)5%>b+`6MM&6=krU0GNnNj;2|_Udd$M^qVU$lUGuWv43f* z;B(pNN^CKs0LmAlt|HYWFXESvn^$E<=HyeIlK~WfWr%x^aW+<3z)Uu@tASs;Qf<_( zU~8?^UdyBk>1K?l-v`-NB8ybO!}aF|b+&fK(c_ZYi~)C4ji3a>lmB6?jL}~}mSTpz z9DU~7aQ^ms@8vT67WxZ39&RY>#n4BS2b||Bku?u%Tl2=?%du}5>S^k4hJRTo1@T)* z$2+2#jQqI@FC{GYuNLfMmJFi&lXbtGlf}*Or|70IY3p}&h(cJ3c|%AtjK3Qo7a_y! zaj6tzK$4s0oQOo42|tM?V*<{4p_j0O(t@vF;|o?SZWs>Sb+t=qT(|+tXxzOS44tEn zkcc_`_}9&*%d}bC*$y_1g*GM?6K8$9&wJ=s#chu!y?szWKqo)5-Tq+)753@rZebSiXv)M#krx;1V| z{`Qaz%nNyX^w$j8qKVyOH9c%NUNQ07N*o$xjTsds0`}DE z=g<^-3I0LT0d{S3sFW3@lGXkH@0%QL3KKxszdj?vDPYp(1zdG`iKn0SR;*Hx^wQGz zcs;>#uLV@6f&X zvhdZff(Yj1Ne=$WpWv(xbX<30f^GNQgB}@4Jg2{~z~R678|oJ>1h3DX!<;q!!{^wi2{e}&hYZN3BN|ALE2Gr^gLO5{Q7MHP6Z4>{DQv6ZYIr5C--A6Eo_(t0S z*Sw(2clXq(*JX)-?$XNlK;VOn? zE|rS)kVix8(sc*`u%)bP3O>zwMZq zubJ0NkwLZkN#WK2Tm5Le`ifNX?=*`4k;{|FbI_Kue)dS!d|KdbX)uyMU(75@}`dP`Y9+cN?P+r7X{~486I};ba`sO!;$05G)YKE zUk6~R9J2%_>)Hz_Fc%e1)32GrDhhJdpDDjRi2sYOBVZGx zip2kU;&JJA=&ncGa;4N}2!&amUoXKgx%a8QgTB$$t=3FWxoJaxUk$OE57&7Q+~jCE zQZpYB;m2&3T5^M$fmiP?@q?%8eO3aO=;HS&>u;%EfYj@Fv$LpLE%7>3snm4ii+TtB zKGsyLNcg?u;+m;eJEo52sfv72SbYUbEl)1YmAhP4O<1S>8m0LCO^%kH6F_*KUzea- z&|Nl6jZ_rZURCDc5s%q9SsKJuKG64M_;3kfL@)J#g$Ews2k&|pXq|Y>rq{iWE&uo* zccl;X^;o4i_PNh-;_v=0`5Jwn+M|#5Jk}osm%rtcs=kH-m9k>jWu-Lhf4_pS7ddAk z0+=rA+L4<14|$v_T0yc;LXiZ{o2=-ydGlDftvF-?Jm|=39pr%5SGxc+U2rlwYFJ* zQHuX(I>*poR~kU%`u+~=F^1MbdEy=0O6-_+x`KQXv#K^qP{B^2P?~Q)w1BL07kN+a z<1DoT(qi$V+Y29CG@i~G>vv=Imks z6+Na)dhSTod_>@rfMfFlsx{%38!8+&Lr__7vT76m6e@_d!sn9V=B@M?f4A?A z9;er@r@UiF>sqQ+7LOjay0oSB>(S+MU%UWQt5J`Z^^PCAxJc!uo0>1{&pwNP=1kAx z{C-&drGB0?EPbS3(lAgdUO>^FdCe6r8`e8E>+dW0$aG21^_>6!9EVSNKJNi;O+0B> zK77@L=B8^)-2ZSMuOxu9v{aQ&c5U2br9kPW)%>$msat4r|zwsN*?|b}9 zU*h4{zdoq68$X9qT>XcC$i&rG_b?=A?VI1Xk0*Zq=dDFScD(O>T>sa9-MsftefYzi z{nJ0~i6!nPtmvoJZ!40bG)lFMQ?t)1)gfr9F5o{ls<`@!G9x3__dVn|{I_oUYgYs? z-2L$^Ja1mG?cfcho=S%oU4 zf(*V0AlA&soQ7&D78ebEAf?FMu7DENNobr{q7uHiY9)_n)#a)V!z3|FjQHv4N# z6X-Sqxc15tlk2s0`AP*Jm~wSj!){%V*ek^spnav$Xe*V1p$gYk+daOkgkXY=UOE>7LMv!BUK>QprU0~^B?Zq^OZgcqy zj{r2+K5*Iypgkn$9{iJQHP>EMwif&Vz8PY%tJZZ@&*`$R9;un%5#b+za*`1p9Z}59 z3mYdLUig9%4?kW{wzko#KGI-Sg(y(8m{n_y)(%QJ;J6&$b_12k%MibgQ(Iu;f%{PY zV$Wmue(3^IfQ%YsS6Z`%)o*!=bs^O1;ltJ;M62j#wVKjaeyw`s2&?b8C;2)=D6Lu3 zGa;|geOpGCUz|}+U;ZNe@)*i-sg11#?V^-})(%=nya040M<5m!a^Rt4XOYpyDD_?XYhGufeliisQ0$2UH>ZTwFSKTA{*vT^ZH{?P?|e7a6n&*HV~h&w)VE$SbO{J$)FbDiC_CQ z&i~b4^)AMZ>JdNrlf2+VA8PNo3G@7+`+9oI?d}(SuQ#%m`>wg0bK~o9%cGRaqmW4PHKKJeCY$g` z+n2iE^7$mJV4Su(b5BBn9PWNz6~EAXm1=sTj&^avzNmH34;$fWn-&n&0dlt06N;Oz zt1vcZecySl_{~kO_E(Gm!cgD|;6K^+m&>hk#hW%bTzh3HE$k10-%tRealh^Wzt$zR z4xTIRwk%Ux>`wp3{(Ds_EGh&hX#v)lKSPV?dVdl9Ad;lj)0jL*{y=|;L7}vZhH*hm-7q5?<5oi|sQTyIVK0r-z0_LkIova*L({Js%>3fN`y0_Ns} zTYB9Kf>7YpS(Bgxw4DFe@QOhzjVK2bdH{}gF}j4~)-k?|@m-YTBB<`lglEKKOVtm$ za{n7K{lSAA|Jv7@-*0sDW+tw@vQ4dzo`2olcQbnZ^~JwS%E~v5?IY{gr;ZrRJ^eHb z$Bs3(SD$;Xw=sDR;P=|)PwFQsYJ?gj;Iuq|h7Lg6aJ7ml-1h$V!WWddY+EU90p9&u z@zGvjw^Fb2{dyAaSGT}l&RE~RUqwJ)!f{GXB2Y~d(CuMBfu!Kg8ysGE zbve!THwu1hx~xz2#CZ2gAk&(^20m-sKQ`JL$DCa6aKkmFPG*e&znT4~(!zjJ^PwHL z>2~&O3UJf~?RI!D_Y!7}k5j5WrqB9LS)qY#U%~g-JP1ix+I&fI{z}FAw*5*q`(D%X zw`l-6VK|Vc7m&7SZKbTZ{pJd*SEaiCpAE6bKoP*^lCCSodx6u5u7=wZ1eJnot}HXX z$w?OiiHd*?0nll8yWA3v8~hl-uVsPJ3?}NGBTp5)q`O{*9}5}&wXWqYOTGrf}p~b00C+D0(4{~z;R0$<6#_+ z`H=~}|I)WZeG&0$teHK*RS*6x%G7cJu2)U^{GRjo-_JqEX#!;3ZMQLg#TA($OzxV3 z1>Q5aZy%?>``xBRn|)$5+ zrH28#wz*t&c`42HN5KcSl=a?TVz%eY`zpo9MR+~%vLu!pAJfcUFo?kFRhm0*j!YYl zCIvOTfX2;hWB`f@m46>GCA8z?xISKGoF}HQ#;Y&j)vN5PjB%xMf&Q#lAj|Z=`0;ap z|M$%OeK_gM7)Czv3C4HtPV8LWl0sgxSU7ToWAA%kqN~4B!0-8f<#KfLGLEd@hFhxO zmPT>QBb3}S+AX&<0PTiDfKJ;GV2AZjaR1k@(cE@Zg;f(eO=9}GQv6}B`*F{UcTJb| zf>OK(OKyPc29p~aZO66}SM72WMZmU{%BB|(%>`(o)yl1+s7kZ7?o_hdcDDd4QRr9+7AGVDO)IF%x1g+r4>nhBgG@LzelD&XtN@Xy? zL`kRvh{2H(BBu2qi2t=)M%>XB0h>C?uMK1f081<)YE0@dUh42!*3g>myp3d_Zm+F} z7Qfe4UvwE%C@Po6P;MF5t>Bi*xTO{m1lm(L0uUDf(V5m?YxtpCD_J%EjDp|YQr6$? z2Uh!5$n03%lzhXdfmhpp|JhlC7v?dYIOX%dzrGN>ZtIi{ixp;`86RUje7}zI>-b&` z&#U6qt9bRr=Ks>dc{cw4?VWp!TvvU^KfiMyGyCxFde^UAyYXVju@l>g$;*T!K%%HT zDuGa`sy+m?DvcEW00gRpRFzjN{%F&Jsv-eZgd$qCYG|pTq|ibFq%@(42snwsNx)8Q z@5A=4_q{Xso^$%gxifQTc6N5w@$Sy<-k&tOyX!mS-E+_Pdw%cV)F@#-#>5f3MozQ; z`(L4%IP6LS{WX~Zbut3m-}z2*d-pESK5nLYN)z|YpE<+qH@~^)S}q0rmQ(i=dHMKz z8S2}M@&m*Vx!koA-PVO4pAdp0f|4d$F$1do0I~=H+4`q{6 z&$D<7x&m1ux;Pu=*wUtn<02jNv*jG4x?oy_saLx#ShLA4rQdV*8{c5&D*hhJzNgtZ ze~SUX(LGaJwsXFBPonPU@B#;R-!HwwGVm9s051~vuUV(-UgvYJpX%UaMIgxI2W?IRNNj%JuYg~9mD68RnSYfY0E^q#o$bP# zj_2v!sv7mku)sq>z}Hq9pR3Z$e5h!)7|Wx;or}_45oTtcCh+RHn8%+?MvRr6P^Bgl ziBG^7tkoE!F*?TRl3$>h_yvksQ>3fipyL8km?fB-LdVW`PG$Y+{<|#! z_LT(wiju=JC+x13x_{}wy*zdOJxOM%U(W3>C72cRo#_Sc^Nr84zY;?E+d ze?AoMdsCjlU-R+(hR}OL3Ge6+)znI3(_ak&=nvJ@`J#EBwLA{&sdta-W9f>9_6+#k zaBVVNq{b8wo3^PG%3W$qt%S|BA_xth=Mj58g)onfBeaf^t0N6vRn_OEGW>#4sIL_3_rsd3KOZGtO}_u);P-vF`*^My@Shdo z{i^}~RU?4JAMo<|g1O(qzX0v^NkFg`X6GzNuMZiySZN?q$`Gvh0}|A$1piffSJF{P zc?6-wXqP*nl~3$Ns5nA-5uT3FIza0fykOOmdsd4iR`k9rX!g-6?02s)rZzZY1 zf59S2NV%LKN&v$hx8(TF59TQp-G-}96RshFa#yiR4S}@^KLG1_6_ri^;rwrZ@GO@Z0{i`6F`tE?x_^{ zq(SecfG-PDepUU1pVa?->rEjy-moP2jlgFHa_U>FiAiCVWvFNZV|fVp{YLl2F-%Vz ze)&pNNfj=K$WkCJz0{V;W+2i3Lxsy^tQzd$7!e^LYf z^c1TKtZqCMaMv61gu#+f`>GQDus>AMh9-c71iFmn>%curlE94NnV%Lo@r$TR^;|## zq>_cKOBe!8U$=t9S*Xj7KSuyMjxi>}X!mc{XiVxeN)E`0DMtX-W~g5eQaz|ss@uvZ zPCMm!l`cN%lHPJvU%J6ZD#u@?I{hpG{zLnG?!CLMQDcvid`}7Q?hn=Es;|{rJ*1(c z*<&pK2^?;8pVlyb+3?*b<`^2)H6&0{O)Jp>Qdxsw=<87k24ghVXtdE-9ivT*(Yg`| z&~X*`%h`t(CZ-}Hot^ya1N~G3l7(&M)4(nRJyp(I0lc&G)AoM(v#4Y9r@(*1wE=Ir zGv5sOpI5?L`$KhZ4VP^_A!69p;~`=b z0;mu{Dg0-&uKcWq07}V4mnS2lI79wAR0S$zP(=W$(qX#llvfq|zQ)c^PySg7{6`N4 zyy=d7qi(+Cb5IHQ^@r+(HRj7TB!PmtCz&wR)zFT#@Z!r+bt|#DBtV%A1k1J_H&3lp zEL0)_Yc)n2OyW1F06*1fH_0BY^d&4y41vQd3o0vgcL0g;z~YfBDoWmE_X^ z{5KyCc;oH)r9yoG69VrZ$f?KHa)tc0enh^{<8jO%CH(~38Nw4LB%{sH=vQK(BWdh2bbaZ<~v-RUoG8XqaeZqp5l=mp0b;s004IS$__>5VW7=g zK2M#(q4c^RKIA5)e*b^xnVLzD6-#LYROYlhr;T-^#>##4R1)e_RqB3q>aqK1&lfzC znE>lm8%TTTYc&G*y{fVASpfX1k4%BTr%Q3)U3qp7_{~(97e)Ax2oLY{RZDCrzg3=B zf1vDe(R|53d(ucGXhZ`0_6Fp0iXT2T$H+xf?er;!>(UIK8arG{FD_lvp+#HeRd8B@ z2g=I`U|sV-dPKLRuU7_qfIYiB?zyv#-d@#=Gc6MMxPmY53Y2ZR^=TCuj*K#vk6X(p z8j%3FJb|%s&5wUl;N@51>g-f&5rMv*AmxosDhH`V5~@#oo5H^>`x(b4V+zI01lSN% zAZeXIs=r?h_%+~H0*CfHXJ2PWQxJ+o_>>YpyDLzp1y`j7Nx<-73!iOd4gf@vWpc{$ z!l@$9K3}XFHX=Z8k6$MXD?RnrR*}X6Uz)XyO=JYHL2Q8qKdVg|Y6N_6z59Ov|rJ ztI1Gg#9H2KEnlD}L|Ah0mF)Cl~GDPl{9M`wHez-+U*{o@lca~T0_Fz7E0d~jp!Z@VevhJzvP zZPIKn*$IIUcpi_mino8=5&*!cHWJ6YMTCD)N*bmO$FU=UVgzT-Mx1<6<9n*92e%j@ zT+Rq!gE2yL+kShm;*MML>>2Qy$>}dEt^&X3`#jzXasCZK04Z(YFvvf%L;;btuD#gY zyyfC0!_QyR%*|iTj?Xq8R4qEw7%}yzq;ND9#8VlWI`{2lofO{zypgRYEKmO= z;`CX)nU7M>mttn;GXmHQk_&~ShXSrY5Yn|pn(5k;mLl+w68>bh`u1l8usjk_z^AjlVhx00GaQ2&9u!l1aIdG(y;#3{qnZ1o)zQ!z7h83C-<4ZgKoar4oTJp(?S z9cnoqesEs?Z;SB2N)PJH2;l0HKmhV#T$G@zG27cj8?Y4S4bMIo^U9DV))@h;XX)$^ zjvfrzKN!&2DdfUspZb#mf1XtGMH_LAWTS6_k=WcOA`b$0FMYQof~aU18HsuJM3J#+ z#mt;>1Yonad+R}hKsbCL;JSSQ-Q9||yfj)#J-yL2qzx~l+P2}wlm8j8 zwHXqy1|}yWhRzi^b=q=f*ieis1dz=LX+7~h*msT3;e#PP-HP@$wcOAiz?i_NMfg&G zsOC0$>~zf8a}g(B(wrFqZ7NNJG9Fla$%VqcYkUsw z57^q{PW)vQ@1$-0Z;9}+fl&QoGx`Bn*W^`+W8f2J|GVeh@6%&IkCVz$caBpEjzkpAoZb=Q;VJ;lhMah%${}#ZLP`*uB$Z z-(H`cJACpv$mg#3#4iG0SHdUyL-q4bO{m${g5gMeN~wEsPQp7EU6&LARGfj9>B)$Z zk%$*g#hkq$L@{VLVjv@e*C>5Giv5E=d-{F0bSiS8JMH}|YiMtQCq($PuXt>Suk>bL z-;4mNwSgS)wuA_70=#+zuvmZ5!n|f=w8-#q#Obq!OOr4k3EF1M+^ht?OWfJJ$7f)t zPuCVjE+>QmS9;n5XyDnzyZ`O}P!+P3&Iq6p5rn{R0v`izZi)a>6351A1*0*e7Y(lt zTgIoM7*W->JQF9K?ZWn6kKO$qJGOarcPYX^@B_j3xKhxU&s)lALWO`A*5(Ju6F_t@U&v8~sm zqeJLycQJe4mu7}*E+q!|u?U|R;T!#dn#p!^MgXtPG_dw=;G@>^W}t1^t8CrOLO007 zaA{2Q(&?C?QCEpr+<@c9eb1@wTRIfmwkrC16@6Phwsg7^J`H%eIy-R=cwB@B1%B8c zW+#3|09R2)A|qgL1$iLR40@YcVUdMP?OK&tVr`k6G>l(1j9k!+Uet_D7^Y_}##}XE ztca8%9-aqnIibBx=xi5yx;=Wk6&)Rl&Q2j83ZC!OdEZakx?kPDYfRwZfiL(z&#Z@T zycq$ke=-8qw0&RN6Ff-#wVshFtJ7+0ImSWKo z#ZGgu)l<&^*Z5K?2j(Df*Dw%*(0SQ&fxEiX+5tMBcZoKB3dl;im*+Y4-Ale!YE?9r zOTeQdd>MFhAXD=*0%##J*bV#!E`sm|psPHxT&jVe7HzJ~A?TcpPKziJg*MK#(ApI= z*(7PnTJTh32b(0ra#K^YQ7SpnRpt9t0(x2|fF}k1RfKQ$hw6N`+cE-ZVIt59xCW75 z2l*}FF5G}qSq#XHw1C%Sr`yGer>?m|OZXiuPyl`?@Cfi7-{+Mbp2~u#83C*_GKh@_ z>;`!|t_txuunq86g81V0A83AO%P|p27v>>5exfqlaRIpJ7^{$X=P*#7zHliCgr>gJcsb25>D?5)L8cP zG6KkC1!Pnk&loz4p&jT(xCZFQvdubT=o9F}IUKiI$m1drVR9|Kz7F9}>gxCjhkc?FnIiW#Mt-Qi`Y`g)ZA2Q4q8dpN|jMF0Q*07*qoM6N<$f>1%3 AzW@LL diff --git a/forge/src/main/resources/pack.mcmeta b/forge/src/main/resources/pack.mcmeta index 9252d3db..284e3f33 100644 --- a/forge/src/main/resources/pack.mcmeta +++ b/forge/src/main/resources/pack.mcmeta @@ -1,6 +1,6 @@ { "pack": { "description": "Example Mod", - "pack_format": 8 + "pack_format": 15 } } diff --git a/gradle.properties b/gradle.properties index e3aca12d..998f563b 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,6 +1,6 @@ org.gradle.jvmargs=-Xmx6G -minecraft_version=1.19.2 +minecraft_version=1.20.1 enabled_platforms=fabric,forge archives_base_name=createrailwaysnavigator @@ -8,11 +8,11 @@ mod_version=0.5.0 maven_group=de.mrjulsen.drn dragonlib_version=2.1.6 -create_fabric_version = 0.5.1-f-build.1416+mc1.19.2 -create_forge_version = 0.5.1.f-46 -registrate_forge_version = MC1.19-1.1.5 -flywheel_forge_version = 0.6.10-20 +create_fabric_version = 0.5.1-f-build.1417+mc1.20.1 +create_forge_version = 0.5.1.f-26 +registrate_forge_version = MC1.20-1.3.3 +flywheel_forge_version = 0.6.10-7 fabric_loader_version=0.14.23 -fabric_api_version=0.76.1+1.19.2 -forge_version=1.19.2-43.3.0 \ No newline at end of file +fabric_api_version=0.90.4+1.20.1 +forge_version=1.20.1-47.2.1 \ No newline at end of file diff --git a/update.json b/update.json index 88b24311..ad26dbca 100644 --- a/update.json +++ b/update.json @@ -1,7 +1,7 @@ { "promos": { - "1.18.2-latest": "0.5.0-1.18.2", - "1.18.2-recommended": "0.5.0-1.18.2" + "1.20.1-latest": "0.5.0-1.20.1", + "1.20.1-recommended": "0.5.0-1.20.1" }, "homepage": "https://www.curseforge.com/minecraft/mc-mods/create-railways-navigator" } \ No newline at end of file From 7c085f3a55466c350fe836f75e4a47dd477fdb01 Mon Sep 17 00:00:00 2001 From: MisterJulsen Date: Sun, 5 May 2024 23:29:41 +0200 Subject: [PATCH 03/38] Added Dutch and Polish translation --- README.md | 2 + .../variants/BERTrainDestinationDetailed.java | 2 +- .../mrjulsen/crn/client/lang/ELanguage.java | 3 +- .../createrailwaysnavigator/lang/de_de.json | 1 + .../createrailwaysnavigator/lang/en_us.json | 1 + .../createrailwaysnavigator/lang/nl_nl.json | 244 +++++++++++++++++ .../createrailwaysnavigator/lang/pl_pl.json | 245 ++++++++++++++++++ 7 files changed, 496 insertions(+), 2 deletions(-) create mode 100644 common/src/main/resources/assets/createrailwaysnavigator/lang/nl_nl.json create mode 100644 common/src/main/resources/assets/createrailwaysnavigator/lang/pl_pl.json diff --git a/README.md b/README.md index 90c11e82..4cf7c945 100644 --- a/README.md +++ b/README.md @@ -16,6 +16,8 @@ This mod adds a new item, the Create Railways Navigator, which is inspired by th ## Supported Languages - English (100%) - German (100%) +- Dutch (100%) (by TheSatanicFlame) +- Polish (100%) (by Slasherss) ## **Please note!** To protect your world from damage, you should always create a backup of your world before installing an update of this mod. Alpha versions in particular may contain critical bugs! diff --git a/common/src/main/java/de/mrjulsen/crn/client/ber/variants/BERTrainDestinationDetailed.java b/common/src/main/java/de/mrjulsen/crn/client/ber/variants/BERTrainDestinationDetailed.java index 155bb855..8d3e816a 100644 --- a/common/src/main/java/de/mrjulsen/crn/client/ber/variants/BERTrainDestinationDetailed.java +++ b/common/src/main/java/de/mrjulsen/crn/client/ber/variants/BERTrainDestinationDetailed.java @@ -61,7 +61,7 @@ public void update(Level level, BlockPos pos, BlockState state, AdvancedDisplayB maxWidth = isSingleBlock ? 11.0f : 12.0f; - line = TextUtils.text("via").withStyle(ChatFormatting.ITALIC); + line = TextUtils.translate("gui.createrailwaysnavigator.via").withStyle(ChatFormatting.ITALIC); maxWidth = displayWidth * 16 - 8; maxWidth /= 0.75f; lastLabel = new BERText(parent.getFontUtils(), line, 0) diff --git a/common/src/main/java/de/mrjulsen/crn/client/lang/ELanguage.java b/common/src/main/java/de/mrjulsen/crn/client/lang/ELanguage.java index e0de16a8..ab342a81 100644 --- a/common/src/main/java/de/mrjulsen/crn/client/lang/ELanguage.java +++ b/common/src/main/java/de/mrjulsen/crn/client/lang/ELanguage.java @@ -15,7 +15,8 @@ public enum ELanguage implements StringRepresentable { DEFAULT("defaut", "def"), ENGLISH("english", "en_us"), GERMAN("german", "de_de"), - DUTCH("dutch", "nl_nl"); + DUTCH("dutch", "nl_nl"), + POLISH("polish", "pl_pl"); private String name; private String code; diff --git a/common/src/main/resources/assets/createrailwaysnavigator/lang/de_de.json b/common/src/main/resources/assets/createrailwaysnavigator/lang/de_de.json index 2f4ae7fe..a1e52ebb 100644 --- a/common/src/main/resources/assets/createrailwaysnavigator/lang/de_de.json +++ b/common/src/main/resources/assets/createrailwaysnavigator/lang/de_de.json @@ -68,6 +68,7 @@ "gui.createrailwaysnavigator.common.search": "Suchen", "gui.createrailwaysnavigator.common.auto": "Autom.", "gui.createrailwaysnavigator.common.server_error": "Fehler beim Ausführen der Aufgabe. Schaue in die Serverkonsole.", + "gui.createrailwaysnavigator.via": "über", "gui.createrailwaysnavigator.navigator.title": "Create Railways Navigator", "gui.createrailwaysnavigator.navigator.no_connections": "Keine Verbindungen gefunden.", diff --git a/common/src/main/resources/assets/createrailwaysnavigator/lang/en_us.json b/common/src/main/resources/assets/createrailwaysnavigator/lang/en_us.json index b39de014..58e72518 100644 --- a/common/src/main/resources/assets/createrailwaysnavigator/lang/en_us.json +++ b/common/src/main/resources/assets/createrailwaysnavigator/lang/en_us.json @@ -194,6 +194,7 @@ "gui.createrailwaysnavigator.destination": "Destination", "gui.createrailwaysnavigator.line": "Line", "gui.createrailwaysnavigator.following_trains": "Following trains:", + "gui.createrailwaysnavigator.via": "via", "gui.createrailwaysnavigator.advanced_display_settings.title": "Advanced Display Settings", "gui.createrailwaysnavigator.advanced_display_settings.display_type": "Display Type", diff --git a/common/src/main/resources/assets/createrailwaysnavigator/lang/nl_nl.json b/common/src/main/resources/assets/createrailwaysnavigator/lang/nl_nl.json new file mode 100644 index 00000000..f2d70f02 --- /dev/null +++ b/common/src/main/resources/assets/createrailwaysnavigator/lang/nl_nl.json @@ -0,0 +1,244 @@ +{ + "advancement.createrailwaysnavigator.navigator": "Bedankt voor het reizen", + "advancement.createrailwaysnavigator.navigator.description": "Craft een Navigator om treinverbindingen van het ene treinstation naar het andere te zoeken.", + "advancement.createrailwaysnavigator.advanced_display": "Nog net geen 4k", + "advancement.createrailwaysnavigator.advanced_display.description": "Upgrade je displayborden om meer informatie weer te geven en plaats ze zelfs in je treinen.", + + "itemGroup.createrailwaysnavigator.tab": "Create Railways Navigator", + + "item.createrailwaysnavigator.navigator": "Create Spoorweg Navigator", + "item.createrailwaysnavigator.navigator.tooltip.summary": "De navigator toont de mogelijke _treinverbindingen_ met extra informatie zoals _tussenstops_, _real-time data_ en meer.", + + "block.createrailwaysnavigator.train_station_clock": "Treinstation Klok", + "block.createrailwaysnavigator.advanced_display_block": "Geavanceerd Display Blok", + "block.createrailwaysnavigator.advanced_display_block.tooltip.summary": "Gebruik het op _treinen_, als een _treinbestemmingsdisplay_ of _passagiersinformatiedisplay_, of op _treinstations_ als verbeterde _platformdisplays_ die ook meer informatie tonen dan reguliere displayborden.", + "block.createrailwaysnavigator.advanced_display_block.tooltip.condition1": "Als je R-Clickt met een Wrench", + "block.createrailwaysnavigator.advanced_display_block.tooltip.behaviour1": "Opent een menu om het _display_ te _configureren_.", + "block.createrailwaysnavigator.advanced_display": "Geavanceerd Display", + "block.createrailwaysnavigator.advanced_display.tooltip.summary": "Gebruik het op _treinen_, als een _treinbestemmingsdisplay_ of _passagiersinformatiedisplay_, of op _treinstations_ als verbeterde _platformdisplays_ die ook meer informatie tonen dan reguliere displayborden.", + "block.createrailwaysnavigator.advanced_display.tooltip.condition1": "Als je R-Clickt met een Wrench", + "block.createrailwaysnavigator.advanced_display.tooltip.behaviour1": "Opent een menu om het _display_ te _configureren_.", + "block.createrailwaysnavigator.advanced_display_small": "Klein Geavanceerd Display", + "block.createrailwaysnavigator.advanced_display_small.tooltip.summary": "Gebruik het op _treinen_, als een _treinbestemmingsdisplay_ of _passagiersinformatiedisplay_, of op _treinstations_ als verbeterde _platformdisplays_ die ook meer informatie tonen dan reguliere displayborden.", + "block.createrailwaysnavigator.advanced_display_small.tooltip.condition1": "Als je R-Clickt met een Wrench", + "block.createrailwaysnavigator.advanced_display_small.tooltip.behaviour1": "Opent een menu om het _display_ te _configureren_.", + "block.createrailwaysnavigator.advanced_display_panel": "Geadvanceerd Display Paneel", + "block.createrailwaysnavigator.advanced_display_panel.tooltip.summary": "Gebruik het op _treinen_, als een _treinbestemmingsdisplay_ of _passagiersinformatiedisplay_, of op _treinstations_ als verbeterde _platformdisplays_ die ook meer informatie tonen dan reguliere displayborden.", + "block.createrailwaysnavigator.advanced_display_panel.tooltip.condition1": "Als je R-Clickt met een Wrench", + "block.createrailwaysnavigator.advanced_display_panel.tooltip.behaviour1": "Opent een menu om het _display_ te _configureren_.", + "block.createrailwaysnavigator.advanced_display_sloped": "Schuine Geavanceerde Display", + "block.createrailwaysnavigator.advanced_display_sloped.tooltip.summary": "Gebruik het op _treinen_, als een _treinbestemmingsdisplay_ of _passagiersinformatiedisplay_, of op _treinstations_ als verbeterde _platformdisplays_ die ook meer informatie tonen dan reguliere displayborden.", + "block.createrailwaysnavigator.advanced_display_sloped.tooltip.condition1": "Als je R-Clickt met een Wrench", + "block.createrailwaysnavigator.advanced_display_sloped.tooltip.behaviour1": "Opent een menu om het _display_ te _configureren_.", + + "block.createrailwaysnavigator.advanced_display.ber.not_in_service": "Buiten dienst!", + + "category.createrailwaysnavigator.crn": "Create Railways Navigator", + "key.createrailwaysnavigator.route_overlay_options": "Toon Route Overlay Opties", + + "enum.createrailwaysnavigator.overlay_position": "Display Positie", + "enum.createrailwaysnavigator.overlay_position.info.top_left": "Bovenste Linkerhoek", + "enum.createrailwaysnavigator.overlay_position.info.top_right": "Bovenste Rechterhoek", + "enum.createrailwaysnavigator.overlay_position.info.bottom_left": "Onderste Linkerhoek", + "enum.createrailwaysnavigator.overlay_position.info.bottom_right": "Onderste Rechterhoek", + + "gui.createrailwaysnavigator.loading.title": "Gegevens downloaden van server...", + + "gui.createrailwaysnavigator.overlay_settings.title": "Route Overlay Instellingen", + "gui.createrailwaysnavigator.route_overlay_settings.show_details": "Toon details", + "gui.createrailwaysnavigator.route_overlay_settings.unpin": "Verwijder route overlay", + "gui.createrailwaysnavigator.route_overlay_settings.narrator.on": "Verteller aankondigingen ingeschakeld.", + "gui.createrailwaysnavigator.route_overlay_settings.narrator.off": "Verteller aankondigingen uitgeschakeld.", + "gui.createrailwaysnavigator.route_overlay_settings.notifications.on": "Meldingen ingeschakeld", + "gui.createrailwaysnavigator.route_overlay_settings.notifications.off": "Meldingen uitgeschakeld", + "gui.createrailwaysnavigator.route_overlay_settings.scale": "GUI Schaal", + "gui.createrailwaysnavigator.route_overlay_settings.narrator": "Verteller aankondigingen", + "gui.createrailwaysnavigator.route_overlay_settings.narrator.description": "De verteller kondigt belangrijke gebeurtenissen aan tijdens uw reis, bijv. de volgende stop, wijzigingen, etc.", + "gui.createrailwaysnavigator.route_overlay_settings.notifications": "Meldingen", + "gui.createrailwaysnavigator.route_overlay_settings.notifications.description": "Ontvang toast meldingen over belangrijke gebeurtenissen tijdens uw reis, bijv. de volgende stop, wijzigingen, etc.", + + "gui.createrailwaysnavigator.common.expand": "Toon Details", + "gui.createrailwaysnavigator.common.collapse": "Verberg Details", + "gui.createrailwaysnavigator.common.go_back": "Ga Terug", + "gui.createrailwaysnavigator.common.go_to_top": "Scroll Naar Boven", + "gui.createrailwaysnavigator.common.reset_defaults": "Reset naar standaard", + "gui.createrailwaysnavigator.common.count": "Aantal", + "gui.createrailwaysnavigator.common.true": "Ja", + "gui.createrailwaysnavigator.common.false": "Nee", + "gui.createrailwaysnavigator.common.search": "Zoeken", + "gui.createrailwaysnavigator.common.auto": "Auto", + "gui.createrailwaysnavigator.common.server_error": "Serverfout tijdens het uitvoeren van taak. Kijk console voor details.", + + "gui.createrailwaysnavigator.navigator.title": "Create Railways Navigator", + "gui.createrailwaysnavigator.navigator.no_connections": "Geen verbindingen gevonden.", + "gui.createrailwaysnavigator.navigator.not_searched": "Nog niets gezocht.", + "gui.createrailwaysnavigator.navigator.searching": "Zoeken naar verbindingen...", + "gui.createrailwaysnavigator.navigator.error_title": "Kan niet navigeren!", + "gui.createrailwaysnavigator.navigator.start_end_null": "Start of bestemming is leeg.", + "gui.createrailwaysnavigator.navigator.start_end_equal": "Start en bestemming zijn gelijk.", + "gui.createrailwaysnavigator.navigator.route_entry.connection_in_past": "❌ Verbinding in het verleden", + "gui.createrailwaysnavigator.navigator.route_entry.transfer": "Trans.", + "gui.createrailwaysnavigator.navigator.route_entry.station_start": "van %s", + "gui.createrailwaysnavigator.navigator.global_settings.tooltip": "Globale Instellingen", + "gui.createrailwaysnavigator.navigator.search_settings.tooltip": "Zoekinstellingen", + "gui.createrailwaysnavigator.navigator.search.tooltip": "Zoeken", + "gui.createrailwaysnavigator.navigator.location.tooltip": "Dichtstbijzijnde station vanaf huidige positie", + "gui.createrailwaysnavigator.navigator.switch.tooltip": "Velden wisselen", + + "gui.createrailwaysnavigator.route_details.title": "Route Details", + "gui.createrailwaysnavigator.route_details.departure": "Vertrek in", + "gui.createrailwaysnavigator.route_details.next_transfer_time": "Overstap in", + "gui.createrailwaysnavigator.route_details.transfer": "Overstap", + "gui.createrailwaysnavigator.route_details.save_route": "Verbinding opslaan", + + "gui.createrailwaysnavigator.route_overview.title": "Route Details", + "gui.createrailwaysnavigator.route_overview.journey_begins": "Uw reis begint! %s naar %s, vertrek %s", + "gui.createrailwaysnavigator.route_overview.journey_begins_with_platform": "Uw reis begint! %s naar %s, vertrek %s op platform %s", + "gui.createrailwaysnavigator.route_overview.train_details": "%s naar %s", + "gui.createrailwaysnavigator.route_overview.next_stop": "Volgende stop: %s", + "gui.createrailwaysnavigator.route_overview.transfer": "Wissel naar %s → %s", + "gui.createrailwaysnavigator.route_overview.transfer_with_platform": "Wissel naar %s → %s op platform %s", + "gui.createrailwaysnavigator.route_overview.journey_completed": "Reis voltooid", + "gui.createrailwaysnavigator.route_overview.after_journey": "U heeft %s bereikt. Bedankt voor het reizen en een fijne dag verder.", + "gui.createrailwaysnavigator.route_overview.next_connections": "Volgende verbindingen", + "gui.createrailwaysnavigator.route_overview.schedule_transfer": "Overstap", + "gui.createrailwaysnavigator.route_overview.train_canceled": "Trein geannuleerd", + "gui.createrailwaysnavigator.route_overview.train_cancellation_info": "Informatie over %s", + "gui.createrailwaysnavigator.route_overview.stop_canceled": "❌ Geannuleerd", + "gui.createrailwaysnavigator.route_overview.connection_endangered": "Verbinding in gevaar", + "gui.createrailwaysnavigator.route_overview.connection_missed": "Verbinding gemist", + "gui.createrailwaysnavigator.route_overview.connection_canceled": "Trein geannuleerd", + "gui.createrailwaysnavigator.route_overview.journey_interrupted": "Uw reis naar %s kan niet worden voortgezet.", + "gui.createrailwaysnavigator.route_overview.connection_missed_info": "Door een treinvertraging heeft u uw aansluitende trein gemist. Zoek naar een alternatief in de navigator. Onze excuses voor het ongemak.", + "gui.createrailwaysnavigator.route_overview.train_canceled_info": "Informatie over %s: Deze trein is vandaag geannuleerd! Onze excuses voor het ongemak. Zoek naar een alternatief in de navigator.", + "gui.createrailwaysnavigator.route_overview.train_canceled_title": "Trein is geannuleerd", + "gui.createrailwaysnavigator.route_overview.journey_interrupted_info": "Uw reis naar %s kan niet worden voortgezet. Zoek naar een alternatief in de navigator.", + "gui.createrailwaysnavigator.route_overview.options": "Druk op %s voor opties.", + "gui.createrailwaysnavigator.route_overview.notification.journey_begins.title": "Uw reis naar %s begint!", + "gui.createrailwaysnavigator.route_overview.notification.journey_begins": "%s naar %s, vertrek %s", + "gui.createrailwaysnavigator.route_overview.notification.journey_begins_with_platform": "%s naar %s, vertrek %s vanaf platform %s", + "gui.createrailwaysnavigator.route_overview.notification.platform_changed.title": "Uw platform is veranderd!", + "gui.createrailwaysnavigator.route_overview.notification.platform_changed": "Uw trein in %s vertrekt vandaag vanaf platform %s.", + "gui.createrailwaysnavigator.route_overview.notification.train_delayed.title": "%s: Aankomst %s vertraagd.", + "gui.createrailwaysnavigator.route_overview.notification.train_delayed": "%s in plaats van %s in %s", + "gui.createrailwaysnavigator.route_overview.notification.train_canceled.title": "%s: Trein geannuleerd", + "gui.createrailwaysnavigator.route_overview.notification.train_canceled": "%s naar %s is vandaag geannuleerd.", + "gui.createrailwaysnavigator.route_overview.notification.transfer.title": "Overstap komt eraan", + "gui.createrailwaysnavigator.route_overview.notification.transfer": "Wissel naar %s → %s op platform %s", + "gui.createrailwaysnavigator.route_overview.notification.transfer_with_platform": "Wissel naar %s → %s op platform %s", + "gui.createrailwaysnavigator.route_overview.notification.connection_endangered.title": "Uw verbinding is in gevaar!", + "gui.createrailwaysnavigator.route_overview.notification.connection_endangered": "U zult waarschijnlijk niet in staat zijn om %s naar %s te bereiken.", + "gui.createrailwaysnavigator.route_overview.notification.connection_missed.title": "Gemiste verbinding", + "gui.createrailwaysnavigator.route_overview.notification.connection_missed": "U heeft uw aansluitende trein %s naar %s gemist.", + "gui.createrailwaysnavigator.route_overview.notification.journey_completed.title": "U heeft uw bestemming bereikt!", + "gui.createrailwaysnavigator.route_overview.notification.journey_completed": "Bedankt voor het reizen en een fijne dag", + "gui.createrailwaysnavigator.route_overview.date": "Dag %s, %s", + + "gui.createrailwaysnavigator.global_settings.title": "Globale Instellingen", + "gui.createrailwaysnavigator.global_settings.option.tooltip": "Klik om te bewerken", + "gui.createrailwaysnavigator.global_settings.option_alias.title": "Treinstation Tags", + "gui.createrailwaysnavigator.global_settings.option_alias.description": "Definieer station tags om multi-platform stations (bijv. MijnStation 1, MijnStation 2, ...) als een enkel station (bijv. MijnStation) met aangepaste namen te behandelen.", + "gui.createrailwaysnavigator.global_settings.option_blacklist.title": "Treinstation Zwarte Lijst", + "gui.createrailwaysnavigator.global_settings.option_blacklist.description": "Sluit Spoor Stations uit die niet in de navigatie resultaten mogen verschijnen. Deze stations worden genegeerd bij het genereren van routes.", + "gui.createrailwaysnavigator.global_settings.train_group.title": "Trein Groepen", + "gui.createrailwaysnavigator.global_settings.train_group.description": "Maak treingroepen om alle treinen te organiseren (bijv. regionale diensten, langeafstandsdiensten, ...). Gebruikers kunnen beslissen welke groepen ze willen gebruiken.", + "gui.createrailwaysnavigator.global_settings.train_blacklist.title": "Trein Zwarte Lijst", + "gui.createrailwaysnavigator.global_settings.train_blacklist.description": "Sluit treinen uit, bijv. vrachttreinen, speciale treinen, etc., zodat ze niet worden gebruikt in de routesuggesties.", + + "gui.createrailwaysnavigator.alias_settings.title": "Treinstation Tag Instellingen", + "gui.createrailwaysnavigator.alias_settings.summary": "Bevat %s Spoor Stations", + "gui.createrailwaysnavigator.alias_settings.editor": "Laatst bewerkt door %s op %s", + "gui.createrailwaysnavigator.alias_settings.add.tooltip": "Nieuwe invoer maken", + "gui.createrailwaysnavigator.alias_settings.delete_alias.tooltip": "Tag verwijderen", + "gui.createrailwaysnavigator.alias_settings.delete_station.tooltip": "Station verwijderen", + "gui.createrailwaysnavigator.alias_settings.add_station.tooltip": "Station toevoegen", + "gui.createrailwaysnavigator.alias_settings.hint.station_name": "Spoor Station Naam", + "gui.createrailwaysnavigator.alias_settings.hint.platform": "Platform", + "gui.createrailwaysnavigator.alias_settings.enter_name": "Voer hier de naam in", + + "gui.createrailwaysnavigator.train_group_settings.title": "Trein Groep Instellingen", + "gui.createrailwaysnavigator.train_group_settings.summary": "Bevat %s Treinen", + "gui.createrailwaysnavigator.train_group_settings.editor": "Laatst bewerkt door %s op %s", + "gui.createrailwaysnavigator.train_group_settings.delete_alias.tooltip": "Groep verwijderen", + "gui.createrailwaysnavigator.train_group_settings.delete_station.tooltip": "Trein verwijderen", + "gui.createrailwaysnavigator.train_group_settings.add_station.tooltip": "Trein toevoegen", + + "gui.createrailwaysnavigator.blacklist.title": "Treinstation Zwarte Lijst", + "gui.createrailwaysnavigator.blacklist.add.tooltip": "Toevoegen aan zwarte lijst", + "gui.createrailwaysnavigator.blacklist.delete.tooltip": "Verwijderen van zwarte lijst", + + "gui.createrailwaysnavigator.train_blacklist.title": "Trein Zwarte Lijst", + "gui.createrailwaysnavigator.train_blacklist.add.tooltip": "Toevoegen aan zwarte lijst", + "gui.createrailwaysnavigator.train_blacklist.delete.tooltip": "Verwijderen van zwarte lijst", + + "gui.createrailwaysnavigator.search_settings.title": "Zoekinstellingen", + "gui.createrailwaysnavigator.search_settings.transfer_time": "Minimale Overstaptijd", + "gui.createrailwaysnavigator.search_settings.transfer_time.description": "De minimale tijd die beschikbaar moet zijn om van trein te wisselen. (1u ~ 50 Echte Leven Seconden)", + "gui.createrailwaysnavigator.search_settings.train_groups": "Trein Categorie Filter", + "gui.createrailwaysnavigator.search_settings.train_groups.description": "Bepaal welke treinen van welke treincategorieën u wilt gebruiken.", + "gui.createrailwaysnavigator.search_settings.train_groups.overview": "%s categorieën geselecteerd", + "gui.createrailwaysnavigator.search_settings.train_groups.overview.all": "Alle", + "gui.createrailwaysnavigator.search_settings.train_groups.overview.none": "Geen", + "gui.createrailwaysnavigator.search_settings.train_groups.tooltip.reset": "Filter resetten", + + "gui.createrailwaysnavigator.new_text_entry.add.tooltip": "Toevoegen", + + "gui.createrailwaysnavigator.time": "Tijd: %s", + "gui.createrailwaysnavigator.time.now": "nu", + "gui.createrailwaysnavigator.time_format.dhm": "%s dagen %s uur. %s min.", + "gui.createrailwaysnavigator.time_format.hm": "%s uur. %s min.", + "gui.createrailwaysnavigator.time_format.m": "%s min.", + + "gui.createrailwaysnavigator.platform": "Platform", + "gui.createrailwaysnavigator.departure": "Vertrek", + "gui.createrailwaysnavigator.destination": "Bestemming", + "gui.createrailwaysnavigator.line": "Lijn", + "gui.createrailwaysnavigator.following_trains": "Volgende treinen:", + + "gui.createrailwaysnavigator.advanced_display_settings.title": "Geavanceerde Display Instellingen", + "gui.createrailwaysnavigator.advanced_display_settings.display_type": "Display Type", + "gui.createrailwaysnavigator.advanced_display_settings.display_type.description": "Bepaalt de weergegeven informatie.", + "gui.createrailwaysnavigator.advanced_display_settings.info_type": "Informatie Type", + "gui.createrailwaysnavigator.advanced_display_settings.info_type.description": "Bepaalt hoe gedetailleerd de informatie is.", + "gui.createrailwaysnavigator.advanced_display_settings.double_sided": "Dubbelzijdig", + + "enum.createrailwaysnavigator.display_info_type": "Display Info Type", + "enum.createrailwaysnavigator.display_info_type.description": "Bepaalt hoeveel informatie er op uw displaybord moet worden weergegeven.", + "enum.createrailwaysnavigator.display_info_type.simple": "Eenvoudig", + "enum.createrailwaysnavigator.display_info_type.info.simple": "Het display toont alleen de belangrijkste informatie zonder extra details.", + "enum.createrailwaysnavigator.display_info_type.detailed": "Gedetailleerd", + "enum.createrailwaysnavigator.display_info_type.info.detailed": "De belangrijkste informatie met enkele details wordt getoond, zoals treinsnelheid, tussenstops, etc.", + "enum.createrailwaysnavigator.display_info_type.informative": "Informatief", + "enum.createrailwaysnavigator.display_info_type.info.informative": "Toont alle informatie die interessant zou kunnen zijn en geeft deze weer in een fancy layout. Niet aanbevolen voor kleine displays omdat de tekst erg klein kan worden.", + + "enum.createrailwaysnavigator.display_type": "Display Type", + "enum.createrailwaysnavigator.display_type.description": "Het type van uw display dat afhangt van hun doel.", + "enum.createrailwaysnavigator.display_type.train_destination": "Trein Bestemming", + "enum.createrailwaysnavigator.display_type.info.train_destination": "Bedoeld om buiten treinen te worden gebruikt, omdat het informatie toont over de trein zelf, zoals de naam, bestemming en (indien geselecteerd) tussenstops en andere informatie.", + "enum.createrailwaysnavigator.display_type.passenger_information": "Passagiersinformatie", + "enum.createrailwaysnavigator.display_type.info.passenger_information": "Vertegenwoordigt de displays die in treinen worden gevonden. Deze displays zullen de volgende stop, de uitgangsrichting en (indien geselecteerd) de treinsnelheid en een routeoverzicht tonen.", + "enum.createrailwaysnavigator.display_type.platform": "Platform Display", + "enum.createrailwaysnavigator.display_type.info.platform": "Deze displays moeten worden gebruikt op treinstation platforms en tonen de volgende aankomende treinen met extra details indien geselecteerd. Kan niet worden gebruikt in treinen!", + + "enum.createrailwaysnavigator.side": "Zijde", + "enum.createrailwaysnavigator.side.description": "De zijde van het blok waar de informatie op moet worden gerenderd.", + "enum.createrailwaysnavigator.side.front": "Voorkant", + "enum.createrailwaysnavigator.side.info.front": "De informatie wordt alleen aan de voorkant gerenderd. Dit is het standaard gedrag.", + "enum.createrailwaysnavigator.side.both": "Beide zijden", + "enum.createrailwaysnavigator.side.info.both": "De informatie wordt aan beide zijden gerenderd.", + + "enum.createrailwaysnavigator.time_display": "Tijdweergave", + "enum.createrailwaysnavigator.time_display.description": "Bepaalt hoe de tijd moet worden weergegeven.", + "enum.createrailwaysnavigator.time_display.abs": "ABS", + "enum.createrailwaysnavigator.time_display.info.abs": "ABS (absoluut)", + "enum.createrailwaysnavigator.time_display.eta": "ETA", + "enum.createrailwaysnavigator.time_display.info.eta": "ETA (geschatte aankomsttijd)", + + "create.display_source.advanced_display": "Geavanceerde Displays", + "gui.createrailwaysnavigator.display_source.advanced_display.train_name_width": "Trein Naam Kolom Breedte", + "gui.createrailwaysnavigator.display_source.advanced_display.train_name_width.description": "De breedte van de treinnaamkolom in blok pixels. (Standaard: 16)", + "gui.createrailwaysnavigator.display_source.advanced_display.platform_width": "Platform Kolom Breedte", + "gui.createrailwaysnavigator.display_source.advanced_display.platform_width.description": "De breedte van de platformkolom in blok pixels. (Standaard: Auto)", + + "createrailwaysnavigator.moin": "moin" +} diff --git a/common/src/main/resources/assets/createrailwaysnavigator/lang/pl_pl.json b/common/src/main/resources/assets/createrailwaysnavigator/lang/pl_pl.json new file mode 100644 index 00000000..a106bc16 --- /dev/null +++ b/common/src/main/resources/assets/createrailwaysnavigator/lang/pl_pl.json @@ -0,0 +1,245 @@ +{ + "advancement.createrailwaysnavigator.navigator": "Dziękujemy za podróż", + "advancement.createrailwaysnavigator.navigator.description": "Stwórz Rozkład aby znaleźć połączenie pomiędzy stacjami.", + "advancement.createrailwaysnavigator.advanced_display": "Prawie 4k", + "advancement.createrailwaysnavigator.advanced_display.description": "Ulepsz swoje tablice wyświetlające aby wyświetlać jeszcze więcej informacji i umieszczać je w pociągach.", + + "itemGroup.createrailwaysnavigator,tab": "Create Railways Navigator", + + "item.createrailwaysnavigator.navigator": "Rozkład Kolei Create", + "item.createrailwaysnavigator.navigator.tooltip.summary": "_Rozkład_ wyświetla możliwe _połączenia_ z dodatkowymi informacjami takimi jak _przystanki_, _informacje na żywo_, itp.", + + "block.createrailwaysnavigator.train_station_clock": "Zegar dworcowy", + "block.createrailwaysnavigator.advanced_display_block": "Blok Zaawansowanego Wyświetlacza", + "block.createrailwaysnavigator.advanced_display_block.tooltip.summary": "Używaj na _pociągach_ jako _wyświetlacz celu podróży_ lub _ekranu informacji pasażerskiej_, albo na _stacjach kolejowych_ jako ulepszonych _wyświetlaczy peronowych_ które pokazują więcej informacji niż zwykłe wyświetlacze.", + "block.createrailwaysnavigator.advanced_display_block.tooltip.condition1": "Kliknięcie PPM przy pomocy Klucza", + "block.createrailwaysnavigator.advanced_display_block.tooltip.behaviour1": "Otwórz menu _konfiguracji_ _wyświetlacza_.", + "block.createrailwaysnavigator.advanced_display": "Zaawansowany Wyświetlacz", + "block.createrailwaysnavigator.advanced_display.tooltip.summary": "Używaj na _pociągach_ jako _wyświetlacz celu podróży_ lub _ekranu informacji pasażerskiej_, albo na _stacjach kolejowych_ jako ulepszonych _wyświetlaczy peronowych_ które pokazują więcej informacji niż zwykłe wyświetlacze.", + "block.createrailwaysnavigator.advanced_display.tooltip.condition1": "Kliknięcie PPM przy pomocy Klucza", + "block.createrailwaysnavigator.advanced_display.tooltip.behaviour1": "Otwórz menu _konfiguracji_ _wyświetlacza_.", + "block.createrailwaysnavigator.advanced_display_small": "Mały Zaawansowany Wyświetlacz", + "block.createrailwaysnavigator.advanced_display_small.tooltip.summary": "Używaj na _pociągach_ jako _wyświetlacz celu podróży_ lub _ekranu informacji pasażerskiej_, albo na _stacjach kolejowych_ jako ulepszonych _wyświetlaczy peronowych_ które pokazują więcej informacji niż zwykłe wyświetlacze.", + "block.createrailwaysnavigator.advanced_display_small.tooltip.condition1": "Kliknięcie PPM przy pomocy Klucza", + "block.createrailwaysnavigator.advanced_display_small.tooltip.behaviour1": "Otwórz menu _konfiguracji_ _wyświetlacza_.", + "block.createrailwaysnavigator.advanced_display_panel": "Panel Zaawansowanego Wyświetlacza", + "block.createrailwaysnavigator.advanced_display_panel.tooltip.summary": "Używaj na _pociągach_ jako _wyświetlacz celu podróży_ lub _ekranu informacji pasażerskiej_, albo na _stacjach kolejowych_ jako ulepszonych _wyświetlaczy peronowych_ które pokazują więcej informacji niż zwykłe wyświetlacze.", + "block.createrailwaysnavigator.advanced_display_panel.tooltip.condition1": "Kliknięcie PPM przy pomocy Klucza", + "block.createrailwaysnavigator.advanced_display_panel.tooltip.behaviour1": "Otwórz menu _konfiguracji_ _wyświetlacza_.", + "block.createrailwaysnavigator.advanced_display_sloped": "Pochylony, Zaawansowanego Wyświetlacza", + "block.createrailwaysnavigator.advanced_display_sloped.tooltip.summary": "Używaj na _pociągach_ jako _wyświetlacz celu podróży_ lub _ekranu informacji pasażerskiej_, albo na _stacjach kolejowych_ jako ulepszonych _wyświetlaczy peronowych_ które pokazują więcej informacji niż zwykłe wyświetlacze.", + "block.createrailwaysnavigator.advanced_display_sloped.tooltip.condition1": "Kliknięcie PPM przy pomocy Klucza", + "block.createrailwaysnavigator.advanced_display_sloped.tooltip.behaviour1": "Otwórz menu _konfiguracji_ _wyświetlacza_.", + + "block.createrailwaysnavigator.advanced_display.ber.not_in_service": "Nieczynny!", + + "category.createrailwaysnavigator.crn": "Create Railways Navigator", + "key.createrailwaysnavigator.route_overlay_options": "Pokaż opcje nakładki trasy", + + "enum.createrailwaysnavigator.overlay_position": "Pozycja wyświetlania", + "enum.createrailwaysnavigator.overlay_position.info.top_left": "Lewy górny róg", + "enum.createrailwaysnavigator.overlay_position.info.top_right": "Prawy górny róg", + "enum.createrailwaysnavigator.overlay_position.info.bottom_left": "Dolny lewy róg", + "enum.createrailwaysnavigator.overlay_position.info.bottom_right": "Dolny prawy róg", + + "gui.createrailwaysnavigator.loading.title": "Pobieranie danych z serwera...", + + "gui.createrailwaysnavigator.overlay_settings.title": "Opcje nakładki trasy", + "gui.createrailwaysnavigator.route_overlay_settings.show_details": "Pokaż szczegóły", + "gui.createrailwaysnavigator.route_overlay_settings.unpin": "Usuń nakładkę trasy", + "gui.createrailwaysnavigator.route_overlay_settings.narrator.on": "Narrator włączony.", + "gui.createrailwaysnavigator.route_overlay_settings.narrator.off": "Narrator wyłączony.", + "gui.createrailwaysnavigator.route_overlay_settings.notifications.on": "Powiadomienie włączone", + "gui.createrailwaysnavigator.route_overlay_settings.notifications.off": "Powiadomienie wyłączone", + "gui.createrailwaysnavigator.route_overlay_settings.scale": "Skala nakładki", + "gui.createrailwaysnavigator.route_overlay_settings.narrator": "Narrator", + "gui.createrailwaysnavigator.route_overlay_settings.narrator.description": "Narrator zapowiada wydarzenia na twojej trasie, np. przystanki, przesiadki, itp.", + "gui.createrailwaysnavigator.route_overlay_settings.notifications": "Powiadomienia", + "gui.createrailwaysnavigator.route_overlay_settings.notifications.description": "Otrzymuj powiadomienia o wydarzeniach w podróży, np. przystanki, przesiadki, itp.", + + "gui.createrailwaysnavigator.common.expand": "Pokaż szczegóły", + "gui.createrailwaysnavigator.common.collapse": "Ukryj szczegóły", + "gui.createrailwaysnavigator.common.go_back": "Wstecz", + "gui.createrailwaysnavigator.common.go_to_top": "Przewiń do góry", + "gui.createrailwaysnavigator.common.reset_defaults": "Przywróć domyślne", + "gui.createrailwaysnavigator.common.count": "Ilość", + "gui.createrailwaysnavigator.common.true": "Tak", + "gui.createrailwaysnavigator.common.false": "Nie", + "gui.createrailwaysnavigator.common.search": "Szukaj", + "gui.createrailwaysnavigator.common.auto": "Auto", + "gui.createrailwaysnavigator.common.server_error": "Nastąpił błąd podczas wykonywania zadania. Sprawdź konsolę aby otrzymać szczegóły.", + + "gui.createrailwaysnavigator.navigator.title": "Create Railways Navigator", + "gui.createrailwaysnavigator.navigator.no_connections": "Nie znaleziono połączeń.", + "gui.createrailwaysnavigator.navigator.not_searched": "Jeszcze nic nie wyszukano.", + "gui.createrailwaysnavigator.navigator.searching": "Szukanie połączenia...", + "gui.createrailwaysnavigator.navigator.error_title": "Nie udało się nawigować!", + "gui.createrailwaysnavigator.navigator.start_end_null": "Początek lub cel podróży jest pusty.", + "gui.createrailwaysnavigator.navigator.start_end_equal": "Początek i cel podróży jest identyczny.", + "gui.createrailwaysnavigator.navigator.route_entry.connection_in_past": "❌ Połączenie z przeszłości", + "gui.createrailwaysnavigator.navigator.route_entry.transfer": "Prze.", + "gui.createrailwaysnavigator.navigator.route_entry.station_start": "z %s", + "gui.createrailwaysnavigator.navigator.global_settings.tooltip": "Ustawienia globalne", + "gui.createrailwaysnavigator.navigator.search_settings.tooltip": "Ustawienia wyszukiwania", + "gui.createrailwaysnavigator.navigator.search.tooltip": "Search", + "gui.createrailwaysnavigator.navigator.location.tooltip": "Nearest station from current position", + "gui.createrailwaysnavigator.navigator.switch.tooltip": "Zamień pola", + + "gui.createrailwaysnavigator.route_details.title": "Szczegóły podróży", + "gui.createrailwaysnavigator.route_details.departure": "Odjazd za", + "gui.createrailwaysnavigator.route_details.next_transfer_time": "Transfer in", + "gui.createrailwaysnavigator.route_details.transfer": "Transfer", + "gui.createrailwaysnavigator.route_details.save_route": "Zapisz połączenie", + "gui.createrailwaysnavigator.route_overview.title": "Szczegóły podróży", + "gui.createrailwaysnavigator.route_overview.journey_begins": "Twoja podróż rozpoczyna się! %s do %s, odjazd %s", + "gui.createrailwaysnavigator.route_overview.journey_begins_with_platform": "Twoja podróż rozpoczyna się! %s do %s, odjazd %s na peronie %s", + "gui.createrailwaysnavigator.route_overview.train_details": "%s do %s", + "gui.createrailwaysnavigator.route_overview.train_speed": "%s km/h", + "gui.createrailwaysnavigator.route_overview.next_stop": "Następna stacja: %s", + "gui.createrailwaysnavigator.route_overview.transfer": "Przesiadka do %s → %s", + "gui.createrailwaysnavigator.route_overview.transfer_with_platform": "Przesiadka do %s → %s na peronie %s", + "gui.createrailwaysnavigator.route_overview.journey_completed": "Podróż zakończona", + "gui.createrailwaysnavigator.route_overview.after_journey": "Dotarłeś do %s. Dziękujemy za podróż i życzymy miłego dnia.", + "gui.createrailwaysnavigator.route_overview.next_connections": "Następne połączenia", + "gui.createrailwaysnavigator.route_overview.schedule_transfer": "Przesiadka", + "gui.createrailwaysnavigator.route_overview.train_canceled": "Pociąg odwołany", + "gui.createrailwaysnavigator.route_overview.train_cancellation_info": "Informacja o %s", + "gui.createrailwaysnavigator.route_overview.stop_canceled": "❌ Odwołano", + "gui.createrailwaysnavigator.route_overview.connection_endangered": "Połączenie zagrożone", + "gui.createrailwaysnavigator.route_overview.connection_missed": "Połączenie przegapione", + "gui.createrailwaysnavigator.route_overview.connection_canceled": "Pociąg odwołany", + "gui.createrailwaysnavigator.route_overview.journey_interrupted": "Twoja podróż do %s jest niemożliwa do kontynuowania.", + "gui.createrailwaysnavigator.route_overview.connection_missed_info": "W związku z opóżnieniem pociągu, przegapiłeś połączenie. Wyszukaj inne połączenie w Nawigatorze. Za utrudnienia przepraszamy.", + "gui.createrailwaysnavigator.route_overview.train_canceled_info": "Informacja o %s: Ten pociąg został odwołany! Za utrudnienia przepraszamy. Wyszukaj inne połączenie w Nawigatorze.", + "gui.createrailwaysnavigator.route_overview.train_canceled_title": "Pociąg został odwołany", + "gui.createrailwaysnavigator.route_overview.journey_interrupted_info": "Twoja podróż do %s jest niemożliwa do kontynuowania. Wyszukaj inne połączenie w Nawigatorze.", + "gui.createrailwaysnavigator.route_overview.options": "Wciśnij %s aby zobaczyć opcje.", + "gui.createrailwaysnavigator.route_overview.notification.journey_begins.title": "Twoja podróż do %s rozpoczyna się!", + "gui.createrailwaysnavigator.route_overview.notification.journey_begins": "%s do %s, odjazd %s", + "gui.createrailwaysnavigator.route_overview.notification.journey_begins_with_platform": "%s do %s, odjazd %s z peronu %s", + "gui.createrailwaysnavigator.route_overview.notification.platform_changed.title": "Peron uległ zmianie!", + "gui.createrailwaysnavigator.route_overview.notification.platform_changed": "Twój pociąg w %s wyrusza dzisiaj z peronu %s.", + "gui.createrailwaysnavigator.route_overview.notification.train_delayed.title": "%s: Przyjazd %s opóżniony.", + "gui.createrailwaysnavigator.route_overview.notification.train_delayed": "%s zamiast %s w %s", + "gui.createrailwaysnavigator.route_overview.notification.train_canceled.title": "%s: Pociąg odwołany", + "gui.createrailwaysnavigator.route_overview.notification.train_canceled": "%s do %s został odwołany.", + "gui.createrailwaysnavigator.route_overview.notification.transfer.title": "Nadchodzi przesiadka", + "gui.createrailwaysnavigator.route_overview.notification.transfer": "Przesiadka %s → %s na peronie %s", + "gui.createrailwaysnavigator.route_overview.notification.transfer_with_platform": "Przesiadka %s → %s na peronie %s", + "gui.createrailwaysnavigator.route_overview.notification.connection_endangered.title": "Twoje połączenie jest zagrożone!", + "gui.createrailwaysnavigator.route_overview.notification.connection_endangered": "Prawdopodobnie nie dotrzesz %s do %s.", + "gui.createrailwaysnavigator.route_overview.notification.connection_missed.title": "Przegapione połączenie", + "gui.createrailwaysnavigator.route_overview.notification.connection_missed": "Przegapiłeś swoje połączenie %s do %s.", + "gui.createrailwaysnavigator.route_overview.notification.journey_completed.title": "Dotarłeś do swojego celu!", + "gui.createrailwaysnavigator.route_overview.notification.journey_completed": "Dziękujemy za podróż i życzymy miłego dnia.", + "gui.createrailwaysnavigator.route_overview.date": "Dzień %s, %s", + + "gui.createrailwaysnavigator.global_settings.title": "Ustawienia Globalne", + "gui.createrailwaysnavigator.global_settings.option.tooltip": "Kliknij aby edytować", + "gui.createrailwaysnavigator.global_settings.option_alias.title": "Tagi stacji", + "gui.createrailwaysnavigator.global_settings.option_alias.description": "Zdefiniuj tagi stacji aby traktować wieloperonowe stacje (np. MyStation 1, MyStation 2, ...) jako jedną stację (np. MyStation) z niestandardową nazwą.", + "gui.createrailwaysnavigator.global_settings.option_blacklist.title": "Czarna lista stacji", + "gui.createrailwaysnavigator.global_settings.option_blacklist.description": "Wyklucz stacje aby nie pojawiały się one w wynikach wyszukiwania. Te stacje będą ignorowane podczas generowania wyników.", + "gui.createrailwaysnavigator.global_settings.train_group.title": "Grupy pociągów", + "gui.createrailwaysnavigator.global_settings.train_group.description": "Utwórz grupy pociągów aby podzielić wszystkie pociągi (np. Regio, Krajowy, ...). Użytkownicy mogą decydować którą grupą chcą się poruszać.", + "gui.createrailwaysnavigator.global_settings.train_blacklist.title": "Czarna lista pociągów", + "gui.createrailwaysnavigator.global_settings.train_blacklist.description": "Wyklucz pociągi, np. towarowe, specjalne, itp., aby nie pojawiały się one w wynikach wyszukiwania.", + + "gui.createrailwaysnavigator.alias_settings.title": "Ustawienia tagów stacji", + "gui.createrailwaysnavigator.alias_settings.summary": "Zawiera %s stacji", + "gui.createrailwaysnavigator.alias_settings.editor": "Ostatnio edytowane przez %s o %s", + "gui.createrailwaysnavigator.alias_settings.add.tooltip": "Utwórz nowy wpis", + "gui.createrailwaysnavigator.alias_settings.delete_alias.tooltip": "Usuń tag", + "gui.createrailwaysnavigator.alias_settings.delete_station.tooltip": "Usuń stację", + "gui.createrailwaysnavigator.alias_settings.add_station.tooltip": "Dodaj stację", + "gui.createrailwaysnavigator.alias_settings.hint.station_name": "Nazwa stacji", + "gui.createrailwaysnavigator.alias_settings.hint.platform": "Peron", + "gui.createrailwaysnavigator.alias_settings.enter_name": "Wprowadź nazwę", + + "gui.createrailwaysnavigator.train_group_settings.title": "Ustawienia grupy pociągów", + "gui.createrailwaysnavigator.train_group_settings.summary": "Zawiera %s pociągów", + "gui.createrailwaysnavigator.train_group_settings.editor": "Ostatnio edytowane przez %s o %s", + "gui.createrailwaysnavigator.train_group_settings.delete_alias.tooltip": "Usuń grupę", + "gui.createrailwaysnavigator.train_group_settings.delete_station.tooltip": "Usuń pociąg", + "gui.createrailwaysnavigator.train_group_settings.add_station.tooltip": "Dodaj pociąg", + + "gui.createrailwaysnavigator.blacklist.title": "Czarna lista stacji", + "gui.createrailwaysnavigator.blacklist.add.tooltip": "Dodaj do czarnej listy", + "gui.createrailwaysnavigator.blacklist.delete.tooltip": "Usuń z czarnej listy", + + "gui.createrailwaysnavigator.train_blacklist.title": "Czarna lista pociągów", + "gui.createrailwaysnavigator.train_blacklist.add.tooltip": "Dodaj do czarnej listy", + "gui.createrailwaysnavigator.train_blacklist.delete.tooltip": "Usuń z czarnej listy", + + "gui.createrailwaysnavigator.search_settings.title": "Ustawienia wyszukiwania", + "gui.createrailwaysnavigator.search_settings.transfer_time": "Minimalny czas przesiadki", + "gui.createrailwaysnavigator.search_settings.transfer_time.description": "Minimalny czas który powinien być dostępny aby się przesiąść (1godz. w grze ~ 50 sekund)", + "gui.createrailwaysnavigator.search_settings.train_groups": "Filtr kategorii pociągów", + "gui.createrailwaysnavigator.search_settings.train_groups.description": "Zdecyduj z których kategorii chcesz korzystać.", + "gui.createrailwaysnavigator.search_settings.train_groups.overview": "%s wybranych kategorii", + "gui.createrailwaysnavigator.search_settings.train_groups.overview.all": "Wszystkie", + "gui.createrailwaysnavigator.search_settings.train_groups.overview.none": "Brak", + "gui.createrailwaysnavigator.search_settings.train_groups.tooltip.reset": "Resetuj filtr", + + "gui.createrailwaysnavigator.new_text_entry.add.tooltip": "Dodaj", + + "gui.createrailwaysnavigator.time": "Godzina: %s", + "gui.createrailwaysnavigator.time.now": "teraz", + "gui.createrailwaysnavigator.time_format.dhm": "%s dni %s godz. %s min.", + "gui.createrailwaysnavigator.time_format.hm": "%s godz. %s min.", + "gui.createrailwaysnavigator.time_format.m": "%s min.", + + "gui.createrailwaysnavigator.platform": "Peron", + "gui.createrailwaysnavigator.departure": "Odjazd", + "gui.createrailwaysnavigator.destination": "Stacja docelowa", + "gui.createrailwaysnavigator.line": "Linia", + "gui.createrailwaysnavigator.following_trains": "Następne pociągi:", + "gui.createrailwaysnavigator.via": "przez", + + "gui.createrailwaysnavigator.advanced_display_settings.title": "Ustawienia Zaawansowanego Wyświetlacza", + "gui.createrailwaysnavigator.advanced_display_settings.display_type": "Rodzaj wyświetlacza", + "gui.createrailwaysnavigator.advanced_display_settings.display_type.description": "Decyduje o wyświetlanej informacji.", + "gui.createrailwaysnavigator.advanced_display_settings.info_type": "Rodzaj informacji", + "gui.createrailwaysnavigator.advanced_display_settings.info_type.description": "Określa stopień szczegółowości informacji.", + "gui.createrailwaysnavigator.advanced_display_settings.double_sided": "Dwustronna", + + "enum.createrailwaysnavigator.display_info_type": "Rodzaj informacji", + "enum.createrailwaysnavigator.display_info_type.description": "Decyduje o tym jak dużo informacji powinno być wyświetlanych.", + "enum.createrailwaysnavigator.display_info_type.simple": "Proste", + "enum.createrailwaysnavigator.display_info_type.info.simple": "Pokazuje tylko najważnejsze informacje bez dodatkowych szczegółów.", + "enum.createrailwaysnavigator.display_info_type.detailed": "Złożone", + "enum.createrailwaysnavigator.display_info_type.info.detailed": "Pokazuje tylko najważniejsze informacje takie jak prędkość pociągu, przystanki, itp.", + "enum.createrailwaysnavigator.display_info_type.informative": "Szczegółowe", + "enum.createrailwaysnavigator.display_info_type.info.informative": "Pokazuje wszystkie informacji w ładnym układzie. Nie zalecane dla małych wyświelaczy ponieważ tekst może stać się bardzo mały.", + + "enum.createrailwaysnavigator.display_type": "Typ wyświetlacza", + "enum.createrailwaysnavigator.display_type.description": "Rodzaj wyświetlacza który zależy od jego przeznaczenia.", + "enum.createrailwaysnavigator.display_type.train_destination": "Cel pociągu", + "enum.createrailwaysnavigator.display_type.info.train_destination": "Używany na zewnątrz pociągu w celu pokazywa informacji takich jak nazwa pociągu, jego cel, i (jeśli zaznaczono) przystanków i innych informacji.", + "enum.createrailwaysnavigator.display_type.passenger_information": "Informacja pasażerska", + "enum.createrailwaysnavigator.display_type.info.passenger_information": "Wyświetlacze wewnątrz pociągu. Te wyświetlacze będą pokazywać następny przystanek, kierunek wyjścia i (jeśli zaznaczono) prędkość pociągu i przegląd trasy.", + "enum.createrailwaysnavigator.display_type.platform": "Wyświetlacz peronowy", + "enum.createrailwaysnavigator.display_type.info.platform": "Te wyświetlacze powinny być używane na peronach stacji i pokazywać pociągi i informacje o nich. Nie można używać w pociągach!", + + "enum.createrailwaysnavigator.side": "Strona", + "enum.createrailwaysnavigator.side.description": "Strona bloku po której powinna być wyświetlana treść.", + "enum.createrailwaysnavigator.side.front": "Przód", + "enum.createrailwaysnavigator.side.info.front": "Informacje będą wyświetlane tylko na przedniej stronie. To jest domyślne zachowanie.", + "enum.createrailwaysnavigator.side.both": "Obie strony", + "enum.createrailwaysnavigator.side.info.both": "Informacje będą wyświetlane tylko na obu stronach.", + + "enum.createrailwaysnavigator.time_display": "Wyświetlanie czasu", + "enum.createrailwaysnavigator.time_display.description": "Określa sposób wyświetlania czasu.", + "enum.createrailwaysnavigator.time_display.abs": "ABS", + "enum.createrailwaysnavigator.time_display.info.abs": "ABS (absolutny)", + "enum.createrailwaysnavigator.time_display.eta": "ETA", + "enum.createrailwaysnavigator.time_display.info.eta": "ETA (Przewidywany czas przybycia)", + + "create.display_source.advanced_display": "Zaawansowane Wyświetlacze", + "gui.createrailwaysnavigator.display_source.advanced_display.train_name_width": "Szerokość kolumny nazw pociągów", + "gui.createrailwaysnavigator.display_source.advanced_display.train_name_width.description": "Szerokość kolumny w pixelach blokowych. (Domyślnie: 16)", + "gui.createrailwaysnavigator.display_source.advanced_display.platform_width": "Szerokość kolumny peronu", + "gui.createrailwaysnavigator.display_source.advanced_display.platform_width.description": "Szerokość kolumny w pixelach blokowych. (-1 = Auto, Domyślnie: -1)", + + "createrailwaysnavigator.moin": "moin" + } \ No newline at end of file From 2b0fb5457db32b657cecf357e3161fab5087b5e1 Mon Sep 17 00:00:00 2001 From: MisterJulsen Date: Sun, 5 May 2024 23:43:43 +0200 Subject: [PATCH 04/38] Added Dutch and Polish translation --- README.md | 2 + .../variants/BERTrainDestinationDetailed.java | 2 +- .../mrjulsen/crn/client/lang/ELanguage.java | 3 +- .../createrailwaysnavigator/lang/de_de.json | 1 + .../createrailwaysnavigator/lang/en_us.json | 1 + .../createrailwaysnavigator/lang/nl_nl.json | 244 +++++++++++++++++ .../createrailwaysnavigator/lang/pl_pl.json | 245 ++++++++++++++++++ 7 files changed, 496 insertions(+), 2 deletions(-) create mode 100644 common/src/main/resources/assets/createrailwaysnavigator/lang/nl_nl.json create mode 100644 common/src/main/resources/assets/createrailwaysnavigator/lang/pl_pl.json diff --git a/README.md b/README.md index 90c11e82..4cf7c945 100644 --- a/README.md +++ b/README.md @@ -16,6 +16,8 @@ This mod adds a new item, the Create Railways Navigator, which is inspired by th ## Supported Languages - English (100%) - German (100%) +- Dutch (100%) (by TheSatanicFlame) +- Polish (100%) (by Slasherss) ## **Please note!** To protect your world from damage, you should always create a backup of your world before installing an update of this mod. Alpha versions in particular may contain critical bugs! diff --git a/common/src/main/java/de/mrjulsen/crn/client/ber/variants/BERTrainDestinationDetailed.java b/common/src/main/java/de/mrjulsen/crn/client/ber/variants/BERTrainDestinationDetailed.java index 155bb855..8d3e816a 100644 --- a/common/src/main/java/de/mrjulsen/crn/client/ber/variants/BERTrainDestinationDetailed.java +++ b/common/src/main/java/de/mrjulsen/crn/client/ber/variants/BERTrainDestinationDetailed.java @@ -61,7 +61,7 @@ public void update(Level level, BlockPos pos, BlockState state, AdvancedDisplayB maxWidth = isSingleBlock ? 11.0f : 12.0f; - line = TextUtils.text("via").withStyle(ChatFormatting.ITALIC); + line = TextUtils.translate("gui.createrailwaysnavigator.via").withStyle(ChatFormatting.ITALIC); maxWidth = displayWidth * 16 - 8; maxWidth /= 0.75f; lastLabel = new BERText(parent.getFontUtils(), line, 0) diff --git a/common/src/main/java/de/mrjulsen/crn/client/lang/ELanguage.java b/common/src/main/java/de/mrjulsen/crn/client/lang/ELanguage.java index ce3bd519..ed5fe176 100644 --- a/common/src/main/java/de/mrjulsen/crn/client/lang/ELanguage.java +++ b/common/src/main/java/de/mrjulsen/crn/client/lang/ELanguage.java @@ -15,7 +15,8 @@ public enum ELanguage implements StringRepresentable { DEFAULT("defaut", "def"), ENGLISH("english", "en_us"), GERMAN("german", "de_de"), - DUTCH("dutch", "nl_nl"); + DUTCH("dutch", "nl_nl"), + POLISH("polish", "pl_pl"); private String name; private String code; diff --git a/common/src/main/resources/assets/createrailwaysnavigator/lang/de_de.json b/common/src/main/resources/assets/createrailwaysnavigator/lang/de_de.json index 2f4ae7fe..a1e52ebb 100644 --- a/common/src/main/resources/assets/createrailwaysnavigator/lang/de_de.json +++ b/common/src/main/resources/assets/createrailwaysnavigator/lang/de_de.json @@ -68,6 +68,7 @@ "gui.createrailwaysnavigator.common.search": "Suchen", "gui.createrailwaysnavigator.common.auto": "Autom.", "gui.createrailwaysnavigator.common.server_error": "Fehler beim Ausführen der Aufgabe. Schaue in die Serverkonsole.", + "gui.createrailwaysnavigator.via": "über", "gui.createrailwaysnavigator.navigator.title": "Create Railways Navigator", "gui.createrailwaysnavigator.navigator.no_connections": "Keine Verbindungen gefunden.", diff --git a/common/src/main/resources/assets/createrailwaysnavigator/lang/en_us.json b/common/src/main/resources/assets/createrailwaysnavigator/lang/en_us.json index b39de014..58e72518 100644 --- a/common/src/main/resources/assets/createrailwaysnavigator/lang/en_us.json +++ b/common/src/main/resources/assets/createrailwaysnavigator/lang/en_us.json @@ -194,6 +194,7 @@ "gui.createrailwaysnavigator.destination": "Destination", "gui.createrailwaysnavigator.line": "Line", "gui.createrailwaysnavigator.following_trains": "Following trains:", + "gui.createrailwaysnavigator.via": "via", "gui.createrailwaysnavigator.advanced_display_settings.title": "Advanced Display Settings", "gui.createrailwaysnavigator.advanced_display_settings.display_type": "Display Type", diff --git a/common/src/main/resources/assets/createrailwaysnavigator/lang/nl_nl.json b/common/src/main/resources/assets/createrailwaysnavigator/lang/nl_nl.json new file mode 100644 index 00000000..f2d70f02 --- /dev/null +++ b/common/src/main/resources/assets/createrailwaysnavigator/lang/nl_nl.json @@ -0,0 +1,244 @@ +{ + "advancement.createrailwaysnavigator.navigator": "Bedankt voor het reizen", + "advancement.createrailwaysnavigator.navigator.description": "Craft een Navigator om treinverbindingen van het ene treinstation naar het andere te zoeken.", + "advancement.createrailwaysnavigator.advanced_display": "Nog net geen 4k", + "advancement.createrailwaysnavigator.advanced_display.description": "Upgrade je displayborden om meer informatie weer te geven en plaats ze zelfs in je treinen.", + + "itemGroup.createrailwaysnavigator.tab": "Create Railways Navigator", + + "item.createrailwaysnavigator.navigator": "Create Spoorweg Navigator", + "item.createrailwaysnavigator.navigator.tooltip.summary": "De navigator toont de mogelijke _treinverbindingen_ met extra informatie zoals _tussenstops_, _real-time data_ en meer.", + + "block.createrailwaysnavigator.train_station_clock": "Treinstation Klok", + "block.createrailwaysnavigator.advanced_display_block": "Geavanceerd Display Blok", + "block.createrailwaysnavigator.advanced_display_block.tooltip.summary": "Gebruik het op _treinen_, als een _treinbestemmingsdisplay_ of _passagiersinformatiedisplay_, of op _treinstations_ als verbeterde _platformdisplays_ die ook meer informatie tonen dan reguliere displayborden.", + "block.createrailwaysnavigator.advanced_display_block.tooltip.condition1": "Als je R-Clickt met een Wrench", + "block.createrailwaysnavigator.advanced_display_block.tooltip.behaviour1": "Opent een menu om het _display_ te _configureren_.", + "block.createrailwaysnavigator.advanced_display": "Geavanceerd Display", + "block.createrailwaysnavigator.advanced_display.tooltip.summary": "Gebruik het op _treinen_, als een _treinbestemmingsdisplay_ of _passagiersinformatiedisplay_, of op _treinstations_ als verbeterde _platformdisplays_ die ook meer informatie tonen dan reguliere displayborden.", + "block.createrailwaysnavigator.advanced_display.tooltip.condition1": "Als je R-Clickt met een Wrench", + "block.createrailwaysnavigator.advanced_display.tooltip.behaviour1": "Opent een menu om het _display_ te _configureren_.", + "block.createrailwaysnavigator.advanced_display_small": "Klein Geavanceerd Display", + "block.createrailwaysnavigator.advanced_display_small.tooltip.summary": "Gebruik het op _treinen_, als een _treinbestemmingsdisplay_ of _passagiersinformatiedisplay_, of op _treinstations_ als verbeterde _platformdisplays_ die ook meer informatie tonen dan reguliere displayborden.", + "block.createrailwaysnavigator.advanced_display_small.tooltip.condition1": "Als je R-Clickt met een Wrench", + "block.createrailwaysnavigator.advanced_display_small.tooltip.behaviour1": "Opent een menu om het _display_ te _configureren_.", + "block.createrailwaysnavigator.advanced_display_panel": "Geadvanceerd Display Paneel", + "block.createrailwaysnavigator.advanced_display_panel.tooltip.summary": "Gebruik het op _treinen_, als een _treinbestemmingsdisplay_ of _passagiersinformatiedisplay_, of op _treinstations_ als verbeterde _platformdisplays_ die ook meer informatie tonen dan reguliere displayborden.", + "block.createrailwaysnavigator.advanced_display_panel.tooltip.condition1": "Als je R-Clickt met een Wrench", + "block.createrailwaysnavigator.advanced_display_panel.tooltip.behaviour1": "Opent een menu om het _display_ te _configureren_.", + "block.createrailwaysnavigator.advanced_display_sloped": "Schuine Geavanceerde Display", + "block.createrailwaysnavigator.advanced_display_sloped.tooltip.summary": "Gebruik het op _treinen_, als een _treinbestemmingsdisplay_ of _passagiersinformatiedisplay_, of op _treinstations_ als verbeterde _platformdisplays_ die ook meer informatie tonen dan reguliere displayborden.", + "block.createrailwaysnavigator.advanced_display_sloped.tooltip.condition1": "Als je R-Clickt met een Wrench", + "block.createrailwaysnavigator.advanced_display_sloped.tooltip.behaviour1": "Opent een menu om het _display_ te _configureren_.", + + "block.createrailwaysnavigator.advanced_display.ber.not_in_service": "Buiten dienst!", + + "category.createrailwaysnavigator.crn": "Create Railways Navigator", + "key.createrailwaysnavigator.route_overlay_options": "Toon Route Overlay Opties", + + "enum.createrailwaysnavigator.overlay_position": "Display Positie", + "enum.createrailwaysnavigator.overlay_position.info.top_left": "Bovenste Linkerhoek", + "enum.createrailwaysnavigator.overlay_position.info.top_right": "Bovenste Rechterhoek", + "enum.createrailwaysnavigator.overlay_position.info.bottom_left": "Onderste Linkerhoek", + "enum.createrailwaysnavigator.overlay_position.info.bottom_right": "Onderste Rechterhoek", + + "gui.createrailwaysnavigator.loading.title": "Gegevens downloaden van server...", + + "gui.createrailwaysnavigator.overlay_settings.title": "Route Overlay Instellingen", + "gui.createrailwaysnavigator.route_overlay_settings.show_details": "Toon details", + "gui.createrailwaysnavigator.route_overlay_settings.unpin": "Verwijder route overlay", + "gui.createrailwaysnavigator.route_overlay_settings.narrator.on": "Verteller aankondigingen ingeschakeld.", + "gui.createrailwaysnavigator.route_overlay_settings.narrator.off": "Verteller aankondigingen uitgeschakeld.", + "gui.createrailwaysnavigator.route_overlay_settings.notifications.on": "Meldingen ingeschakeld", + "gui.createrailwaysnavigator.route_overlay_settings.notifications.off": "Meldingen uitgeschakeld", + "gui.createrailwaysnavigator.route_overlay_settings.scale": "GUI Schaal", + "gui.createrailwaysnavigator.route_overlay_settings.narrator": "Verteller aankondigingen", + "gui.createrailwaysnavigator.route_overlay_settings.narrator.description": "De verteller kondigt belangrijke gebeurtenissen aan tijdens uw reis, bijv. de volgende stop, wijzigingen, etc.", + "gui.createrailwaysnavigator.route_overlay_settings.notifications": "Meldingen", + "gui.createrailwaysnavigator.route_overlay_settings.notifications.description": "Ontvang toast meldingen over belangrijke gebeurtenissen tijdens uw reis, bijv. de volgende stop, wijzigingen, etc.", + + "gui.createrailwaysnavigator.common.expand": "Toon Details", + "gui.createrailwaysnavigator.common.collapse": "Verberg Details", + "gui.createrailwaysnavigator.common.go_back": "Ga Terug", + "gui.createrailwaysnavigator.common.go_to_top": "Scroll Naar Boven", + "gui.createrailwaysnavigator.common.reset_defaults": "Reset naar standaard", + "gui.createrailwaysnavigator.common.count": "Aantal", + "gui.createrailwaysnavigator.common.true": "Ja", + "gui.createrailwaysnavigator.common.false": "Nee", + "gui.createrailwaysnavigator.common.search": "Zoeken", + "gui.createrailwaysnavigator.common.auto": "Auto", + "gui.createrailwaysnavigator.common.server_error": "Serverfout tijdens het uitvoeren van taak. Kijk console voor details.", + + "gui.createrailwaysnavigator.navigator.title": "Create Railways Navigator", + "gui.createrailwaysnavigator.navigator.no_connections": "Geen verbindingen gevonden.", + "gui.createrailwaysnavigator.navigator.not_searched": "Nog niets gezocht.", + "gui.createrailwaysnavigator.navigator.searching": "Zoeken naar verbindingen...", + "gui.createrailwaysnavigator.navigator.error_title": "Kan niet navigeren!", + "gui.createrailwaysnavigator.navigator.start_end_null": "Start of bestemming is leeg.", + "gui.createrailwaysnavigator.navigator.start_end_equal": "Start en bestemming zijn gelijk.", + "gui.createrailwaysnavigator.navigator.route_entry.connection_in_past": "❌ Verbinding in het verleden", + "gui.createrailwaysnavigator.navigator.route_entry.transfer": "Trans.", + "gui.createrailwaysnavigator.navigator.route_entry.station_start": "van %s", + "gui.createrailwaysnavigator.navigator.global_settings.tooltip": "Globale Instellingen", + "gui.createrailwaysnavigator.navigator.search_settings.tooltip": "Zoekinstellingen", + "gui.createrailwaysnavigator.navigator.search.tooltip": "Zoeken", + "gui.createrailwaysnavigator.navigator.location.tooltip": "Dichtstbijzijnde station vanaf huidige positie", + "gui.createrailwaysnavigator.navigator.switch.tooltip": "Velden wisselen", + + "gui.createrailwaysnavigator.route_details.title": "Route Details", + "gui.createrailwaysnavigator.route_details.departure": "Vertrek in", + "gui.createrailwaysnavigator.route_details.next_transfer_time": "Overstap in", + "gui.createrailwaysnavigator.route_details.transfer": "Overstap", + "gui.createrailwaysnavigator.route_details.save_route": "Verbinding opslaan", + + "gui.createrailwaysnavigator.route_overview.title": "Route Details", + "gui.createrailwaysnavigator.route_overview.journey_begins": "Uw reis begint! %s naar %s, vertrek %s", + "gui.createrailwaysnavigator.route_overview.journey_begins_with_platform": "Uw reis begint! %s naar %s, vertrek %s op platform %s", + "gui.createrailwaysnavigator.route_overview.train_details": "%s naar %s", + "gui.createrailwaysnavigator.route_overview.next_stop": "Volgende stop: %s", + "gui.createrailwaysnavigator.route_overview.transfer": "Wissel naar %s → %s", + "gui.createrailwaysnavigator.route_overview.transfer_with_platform": "Wissel naar %s → %s op platform %s", + "gui.createrailwaysnavigator.route_overview.journey_completed": "Reis voltooid", + "gui.createrailwaysnavigator.route_overview.after_journey": "U heeft %s bereikt. Bedankt voor het reizen en een fijne dag verder.", + "gui.createrailwaysnavigator.route_overview.next_connections": "Volgende verbindingen", + "gui.createrailwaysnavigator.route_overview.schedule_transfer": "Overstap", + "gui.createrailwaysnavigator.route_overview.train_canceled": "Trein geannuleerd", + "gui.createrailwaysnavigator.route_overview.train_cancellation_info": "Informatie over %s", + "gui.createrailwaysnavigator.route_overview.stop_canceled": "❌ Geannuleerd", + "gui.createrailwaysnavigator.route_overview.connection_endangered": "Verbinding in gevaar", + "gui.createrailwaysnavigator.route_overview.connection_missed": "Verbinding gemist", + "gui.createrailwaysnavigator.route_overview.connection_canceled": "Trein geannuleerd", + "gui.createrailwaysnavigator.route_overview.journey_interrupted": "Uw reis naar %s kan niet worden voortgezet.", + "gui.createrailwaysnavigator.route_overview.connection_missed_info": "Door een treinvertraging heeft u uw aansluitende trein gemist. Zoek naar een alternatief in de navigator. Onze excuses voor het ongemak.", + "gui.createrailwaysnavigator.route_overview.train_canceled_info": "Informatie over %s: Deze trein is vandaag geannuleerd! Onze excuses voor het ongemak. Zoek naar een alternatief in de navigator.", + "gui.createrailwaysnavigator.route_overview.train_canceled_title": "Trein is geannuleerd", + "gui.createrailwaysnavigator.route_overview.journey_interrupted_info": "Uw reis naar %s kan niet worden voortgezet. Zoek naar een alternatief in de navigator.", + "gui.createrailwaysnavigator.route_overview.options": "Druk op %s voor opties.", + "gui.createrailwaysnavigator.route_overview.notification.journey_begins.title": "Uw reis naar %s begint!", + "gui.createrailwaysnavigator.route_overview.notification.journey_begins": "%s naar %s, vertrek %s", + "gui.createrailwaysnavigator.route_overview.notification.journey_begins_with_platform": "%s naar %s, vertrek %s vanaf platform %s", + "gui.createrailwaysnavigator.route_overview.notification.platform_changed.title": "Uw platform is veranderd!", + "gui.createrailwaysnavigator.route_overview.notification.platform_changed": "Uw trein in %s vertrekt vandaag vanaf platform %s.", + "gui.createrailwaysnavigator.route_overview.notification.train_delayed.title": "%s: Aankomst %s vertraagd.", + "gui.createrailwaysnavigator.route_overview.notification.train_delayed": "%s in plaats van %s in %s", + "gui.createrailwaysnavigator.route_overview.notification.train_canceled.title": "%s: Trein geannuleerd", + "gui.createrailwaysnavigator.route_overview.notification.train_canceled": "%s naar %s is vandaag geannuleerd.", + "gui.createrailwaysnavigator.route_overview.notification.transfer.title": "Overstap komt eraan", + "gui.createrailwaysnavigator.route_overview.notification.transfer": "Wissel naar %s → %s op platform %s", + "gui.createrailwaysnavigator.route_overview.notification.transfer_with_platform": "Wissel naar %s → %s op platform %s", + "gui.createrailwaysnavigator.route_overview.notification.connection_endangered.title": "Uw verbinding is in gevaar!", + "gui.createrailwaysnavigator.route_overview.notification.connection_endangered": "U zult waarschijnlijk niet in staat zijn om %s naar %s te bereiken.", + "gui.createrailwaysnavigator.route_overview.notification.connection_missed.title": "Gemiste verbinding", + "gui.createrailwaysnavigator.route_overview.notification.connection_missed": "U heeft uw aansluitende trein %s naar %s gemist.", + "gui.createrailwaysnavigator.route_overview.notification.journey_completed.title": "U heeft uw bestemming bereikt!", + "gui.createrailwaysnavigator.route_overview.notification.journey_completed": "Bedankt voor het reizen en een fijne dag", + "gui.createrailwaysnavigator.route_overview.date": "Dag %s, %s", + + "gui.createrailwaysnavigator.global_settings.title": "Globale Instellingen", + "gui.createrailwaysnavigator.global_settings.option.tooltip": "Klik om te bewerken", + "gui.createrailwaysnavigator.global_settings.option_alias.title": "Treinstation Tags", + "gui.createrailwaysnavigator.global_settings.option_alias.description": "Definieer station tags om multi-platform stations (bijv. MijnStation 1, MijnStation 2, ...) als een enkel station (bijv. MijnStation) met aangepaste namen te behandelen.", + "gui.createrailwaysnavigator.global_settings.option_blacklist.title": "Treinstation Zwarte Lijst", + "gui.createrailwaysnavigator.global_settings.option_blacklist.description": "Sluit Spoor Stations uit die niet in de navigatie resultaten mogen verschijnen. Deze stations worden genegeerd bij het genereren van routes.", + "gui.createrailwaysnavigator.global_settings.train_group.title": "Trein Groepen", + "gui.createrailwaysnavigator.global_settings.train_group.description": "Maak treingroepen om alle treinen te organiseren (bijv. regionale diensten, langeafstandsdiensten, ...). Gebruikers kunnen beslissen welke groepen ze willen gebruiken.", + "gui.createrailwaysnavigator.global_settings.train_blacklist.title": "Trein Zwarte Lijst", + "gui.createrailwaysnavigator.global_settings.train_blacklist.description": "Sluit treinen uit, bijv. vrachttreinen, speciale treinen, etc., zodat ze niet worden gebruikt in de routesuggesties.", + + "gui.createrailwaysnavigator.alias_settings.title": "Treinstation Tag Instellingen", + "gui.createrailwaysnavigator.alias_settings.summary": "Bevat %s Spoor Stations", + "gui.createrailwaysnavigator.alias_settings.editor": "Laatst bewerkt door %s op %s", + "gui.createrailwaysnavigator.alias_settings.add.tooltip": "Nieuwe invoer maken", + "gui.createrailwaysnavigator.alias_settings.delete_alias.tooltip": "Tag verwijderen", + "gui.createrailwaysnavigator.alias_settings.delete_station.tooltip": "Station verwijderen", + "gui.createrailwaysnavigator.alias_settings.add_station.tooltip": "Station toevoegen", + "gui.createrailwaysnavigator.alias_settings.hint.station_name": "Spoor Station Naam", + "gui.createrailwaysnavigator.alias_settings.hint.platform": "Platform", + "gui.createrailwaysnavigator.alias_settings.enter_name": "Voer hier de naam in", + + "gui.createrailwaysnavigator.train_group_settings.title": "Trein Groep Instellingen", + "gui.createrailwaysnavigator.train_group_settings.summary": "Bevat %s Treinen", + "gui.createrailwaysnavigator.train_group_settings.editor": "Laatst bewerkt door %s op %s", + "gui.createrailwaysnavigator.train_group_settings.delete_alias.tooltip": "Groep verwijderen", + "gui.createrailwaysnavigator.train_group_settings.delete_station.tooltip": "Trein verwijderen", + "gui.createrailwaysnavigator.train_group_settings.add_station.tooltip": "Trein toevoegen", + + "gui.createrailwaysnavigator.blacklist.title": "Treinstation Zwarte Lijst", + "gui.createrailwaysnavigator.blacklist.add.tooltip": "Toevoegen aan zwarte lijst", + "gui.createrailwaysnavigator.blacklist.delete.tooltip": "Verwijderen van zwarte lijst", + + "gui.createrailwaysnavigator.train_blacklist.title": "Trein Zwarte Lijst", + "gui.createrailwaysnavigator.train_blacklist.add.tooltip": "Toevoegen aan zwarte lijst", + "gui.createrailwaysnavigator.train_blacklist.delete.tooltip": "Verwijderen van zwarte lijst", + + "gui.createrailwaysnavigator.search_settings.title": "Zoekinstellingen", + "gui.createrailwaysnavigator.search_settings.transfer_time": "Minimale Overstaptijd", + "gui.createrailwaysnavigator.search_settings.transfer_time.description": "De minimale tijd die beschikbaar moet zijn om van trein te wisselen. (1u ~ 50 Echte Leven Seconden)", + "gui.createrailwaysnavigator.search_settings.train_groups": "Trein Categorie Filter", + "gui.createrailwaysnavigator.search_settings.train_groups.description": "Bepaal welke treinen van welke treincategorieën u wilt gebruiken.", + "gui.createrailwaysnavigator.search_settings.train_groups.overview": "%s categorieën geselecteerd", + "gui.createrailwaysnavigator.search_settings.train_groups.overview.all": "Alle", + "gui.createrailwaysnavigator.search_settings.train_groups.overview.none": "Geen", + "gui.createrailwaysnavigator.search_settings.train_groups.tooltip.reset": "Filter resetten", + + "gui.createrailwaysnavigator.new_text_entry.add.tooltip": "Toevoegen", + + "gui.createrailwaysnavigator.time": "Tijd: %s", + "gui.createrailwaysnavigator.time.now": "nu", + "gui.createrailwaysnavigator.time_format.dhm": "%s dagen %s uur. %s min.", + "gui.createrailwaysnavigator.time_format.hm": "%s uur. %s min.", + "gui.createrailwaysnavigator.time_format.m": "%s min.", + + "gui.createrailwaysnavigator.platform": "Platform", + "gui.createrailwaysnavigator.departure": "Vertrek", + "gui.createrailwaysnavigator.destination": "Bestemming", + "gui.createrailwaysnavigator.line": "Lijn", + "gui.createrailwaysnavigator.following_trains": "Volgende treinen:", + + "gui.createrailwaysnavigator.advanced_display_settings.title": "Geavanceerde Display Instellingen", + "gui.createrailwaysnavigator.advanced_display_settings.display_type": "Display Type", + "gui.createrailwaysnavigator.advanced_display_settings.display_type.description": "Bepaalt de weergegeven informatie.", + "gui.createrailwaysnavigator.advanced_display_settings.info_type": "Informatie Type", + "gui.createrailwaysnavigator.advanced_display_settings.info_type.description": "Bepaalt hoe gedetailleerd de informatie is.", + "gui.createrailwaysnavigator.advanced_display_settings.double_sided": "Dubbelzijdig", + + "enum.createrailwaysnavigator.display_info_type": "Display Info Type", + "enum.createrailwaysnavigator.display_info_type.description": "Bepaalt hoeveel informatie er op uw displaybord moet worden weergegeven.", + "enum.createrailwaysnavigator.display_info_type.simple": "Eenvoudig", + "enum.createrailwaysnavigator.display_info_type.info.simple": "Het display toont alleen de belangrijkste informatie zonder extra details.", + "enum.createrailwaysnavigator.display_info_type.detailed": "Gedetailleerd", + "enum.createrailwaysnavigator.display_info_type.info.detailed": "De belangrijkste informatie met enkele details wordt getoond, zoals treinsnelheid, tussenstops, etc.", + "enum.createrailwaysnavigator.display_info_type.informative": "Informatief", + "enum.createrailwaysnavigator.display_info_type.info.informative": "Toont alle informatie die interessant zou kunnen zijn en geeft deze weer in een fancy layout. Niet aanbevolen voor kleine displays omdat de tekst erg klein kan worden.", + + "enum.createrailwaysnavigator.display_type": "Display Type", + "enum.createrailwaysnavigator.display_type.description": "Het type van uw display dat afhangt van hun doel.", + "enum.createrailwaysnavigator.display_type.train_destination": "Trein Bestemming", + "enum.createrailwaysnavigator.display_type.info.train_destination": "Bedoeld om buiten treinen te worden gebruikt, omdat het informatie toont over de trein zelf, zoals de naam, bestemming en (indien geselecteerd) tussenstops en andere informatie.", + "enum.createrailwaysnavigator.display_type.passenger_information": "Passagiersinformatie", + "enum.createrailwaysnavigator.display_type.info.passenger_information": "Vertegenwoordigt de displays die in treinen worden gevonden. Deze displays zullen de volgende stop, de uitgangsrichting en (indien geselecteerd) de treinsnelheid en een routeoverzicht tonen.", + "enum.createrailwaysnavigator.display_type.platform": "Platform Display", + "enum.createrailwaysnavigator.display_type.info.platform": "Deze displays moeten worden gebruikt op treinstation platforms en tonen de volgende aankomende treinen met extra details indien geselecteerd. Kan niet worden gebruikt in treinen!", + + "enum.createrailwaysnavigator.side": "Zijde", + "enum.createrailwaysnavigator.side.description": "De zijde van het blok waar de informatie op moet worden gerenderd.", + "enum.createrailwaysnavigator.side.front": "Voorkant", + "enum.createrailwaysnavigator.side.info.front": "De informatie wordt alleen aan de voorkant gerenderd. Dit is het standaard gedrag.", + "enum.createrailwaysnavigator.side.both": "Beide zijden", + "enum.createrailwaysnavigator.side.info.both": "De informatie wordt aan beide zijden gerenderd.", + + "enum.createrailwaysnavigator.time_display": "Tijdweergave", + "enum.createrailwaysnavigator.time_display.description": "Bepaalt hoe de tijd moet worden weergegeven.", + "enum.createrailwaysnavigator.time_display.abs": "ABS", + "enum.createrailwaysnavigator.time_display.info.abs": "ABS (absoluut)", + "enum.createrailwaysnavigator.time_display.eta": "ETA", + "enum.createrailwaysnavigator.time_display.info.eta": "ETA (geschatte aankomsttijd)", + + "create.display_source.advanced_display": "Geavanceerde Displays", + "gui.createrailwaysnavigator.display_source.advanced_display.train_name_width": "Trein Naam Kolom Breedte", + "gui.createrailwaysnavigator.display_source.advanced_display.train_name_width.description": "De breedte van de treinnaamkolom in blok pixels. (Standaard: 16)", + "gui.createrailwaysnavigator.display_source.advanced_display.platform_width": "Platform Kolom Breedte", + "gui.createrailwaysnavigator.display_source.advanced_display.platform_width.description": "De breedte van de platformkolom in blok pixels. (Standaard: Auto)", + + "createrailwaysnavigator.moin": "moin" +} diff --git a/common/src/main/resources/assets/createrailwaysnavigator/lang/pl_pl.json b/common/src/main/resources/assets/createrailwaysnavigator/lang/pl_pl.json new file mode 100644 index 00000000..a106bc16 --- /dev/null +++ b/common/src/main/resources/assets/createrailwaysnavigator/lang/pl_pl.json @@ -0,0 +1,245 @@ +{ + "advancement.createrailwaysnavigator.navigator": "Dziękujemy za podróż", + "advancement.createrailwaysnavigator.navigator.description": "Stwórz Rozkład aby znaleźć połączenie pomiędzy stacjami.", + "advancement.createrailwaysnavigator.advanced_display": "Prawie 4k", + "advancement.createrailwaysnavigator.advanced_display.description": "Ulepsz swoje tablice wyświetlające aby wyświetlać jeszcze więcej informacji i umieszczać je w pociągach.", + + "itemGroup.createrailwaysnavigator,tab": "Create Railways Navigator", + + "item.createrailwaysnavigator.navigator": "Rozkład Kolei Create", + "item.createrailwaysnavigator.navigator.tooltip.summary": "_Rozkład_ wyświetla możliwe _połączenia_ z dodatkowymi informacjami takimi jak _przystanki_, _informacje na żywo_, itp.", + + "block.createrailwaysnavigator.train_station_clock": "Zegar dworcowy", + "block.createrailwaysnavigator.advanced_display_block": "Blok Zaawansowanego Wyświetlacza", + "block.createrailwaysnavigator.advanced_display_block.tooltip.summary": "Używaj na _pociągach_ jako _wyświetlacz celu podróży_ lub _ekranu informacji pasażerskiej_, albo na _stacjach kolejowych_ jako ulepszonych _wyświetlaczy peronowych_ które pokazują więcej informacji niż zwykłe wyświetlacze.", + "block.createrailwaysnavigator.advanced_display_block.tooltip.condition1": "Kliknięcie PPM przy pomocy Klucza", + "block.createrailwaysnavigator.advanced_display_block.tooltip.behaviour1": "Otwórz menu _konfiguracji_ _wyświetlacza_.", + "block.createrailwaysnavigator.advanced_display": "Zaawansowany Wyświetlacz", + "block.createrailwaysnavigator.advanced_display.tooltip.summary": "Używaj na _pociągach_ jako _wyświetlacz celu podróży_ lub _ekranu informacji pasażerskiej_, albo na _stacjach kolejowych_ jako ulepszonych _wyświetlaczy peronowych_ które pokazują więcej informacji niż zwykłe wyświetlacze.", + "block.createrailwaysnavigator.advanced_display.tooltip.condition1": "Kliknięcie PPM przy pomocy Klucza", + "block.createrailwaysnavigator.advanced_display.tooltip.behaviour1": "Otwórz menu _konfiguracji_ _wyświetlacza_.", + "block.createrailwaysnavigator.advanced_display_small": "Mały Zaawansowany Wyświetlacz", + "block.createrailwaysnavigator.advanced_display_small.tooltip.summary": "Używaj na _pociągach_ jako _wyświetlacz celu podróży_ lub _ekranu informacji pasażerskiej_, albo na _stacjach kolejowych_ jako ulepszonych _wyświetlaczy peronowych_ które pokazują więcej informacji niż zwykłe wyświetlacze.", + "block.createrailwaysnavigator.advanced_display_small.tooltip.condition1": "Kliknięcie PPM przy pomocy Klucza", + "block.createrailwaysnavigator.advanced_display_small.tooltip.behaviour1": "Otwórz menu _konfiguracji_ _wyświetlacza_.", + "block.createrailwaysnavigator.advanced_display_panel": "Panel Zaawansowanego Wyświetlacza", + "block.createrailwaysnavigator.advanced_display_panel.tooltip.summary": "Używaj na _pociągach_ jako _wyświetlacz celu podróży_ lub _ekranu informacji pasażerskiej_, albo na _stacjach kolejowych_ jako ulepszonych _wyświetlaczy peronowych_ które pokazują więcej informacji niż zwykłe wyświetlacze.", + "block.createrailwaysnavigator.advanced_display_panel.tooltip.condition1": "Kliknięcie PPM przy pomocy Klucza", + "block.createrailwaysnavigator.advanced_display_panel.tooltip.behaviour1": "Otwórz menu _konfiguracji_ _wyświetlacza_.", + "block.createrailwaysnavigator.advanced_display_sloped": "Pochylony, Zaawansowanego Wyświetlacza", + "block.createrailwaysnavigator.advanced_display_sloped.tooltip.summary": "Używaj na _pociągach_ jako _wyświetlacz celu podróży_ lub _ekranu informacji pasażerskiej_, albo na _stacjach kolejowych_ jako ulepszonych _wyświetlaczy peronowych_ które pokazują więcej informacji niż zwykłe wyświetlacze.", + "block.createrailwaysnavigator.advanced_display_sloped.tooltip.condition1": "Kliknięcie PPM przy pomocy Klucza", + "block.createrailwaysnavigator.advanced_display_sloped.tooltip.behaviour1": "Otwórz menu _konfiguracji_ _wyświetlacza_.", + + "block.createrailwaysnavigator.advanced_display.ber.not_in_service": "Nieczynny!", + + "category.createrailwaysnavigator.crn": "Create Railways Navigator", + "key.createrailwaysnavigator.route_overlay_options": "Pokaż opcje nakładki trasy", + + "enum.createrailwaysnavigator.overlay_position": "Pozycja wyświetlania", + "enum.createrailwaysnavigator.overlay_position.info.top_left": "Lewy górny róg", + "enum.createrailwaysnavigator.overlay_position.info.top_right": "Prawy górny róg", + "enum.createrailwaysnavigator.overlay_position.info.bottom_left": "Dolny lewy róg", + "enum.createrailwaysnavigator.overlay_position.info.bottom_right": "Dolny prawy róg", + + "gui.createrailwaysnavigator.loading.title": "Pobieranie danych z serwera...", + + "gui.createrailwaysnavigator.overlay_settings.title": "Opcje nakładki trasy", + "gui.createrailwaysnavigator.route_overlay_settings.show_details": "Pokaż szczegóły", + "gui.createrailwaysnavigator.route_overlay_settings.unpin": "Usuń nakładkę trasy", + "gui.createrailwaysnavigator.route_overlay_settings.narrator.on": "Narrator włączony.", + "gui.createrailwaysnavigator.route_overlay_settings.narrator.off": "Narrator wyłączony.", + "gui.createrailwaysnavigator.route_overlay_settings.notifications.on": "Powiadomienie włączone", + "gui.createrailwaysnavigator.route_overlay_settings.notifications.off": "Powiadomienie wyłączone", + "gui.createrailwaysnavigator.route_overlay_settings.scale": "Skala nakładki", + "gui.createrailwaysnavigator.route_overlay_settings.narrator": "Narrator", + "gui.createrailwaysnavigator.route_overlay_settings.narrator.description": "Narrator zapowiada wydarzenia na twojej trasie, np. przystanki, przesiadki, itp.", + "gui.createrailwaysnavigator.route_overlay_settings.notifications": "Powiadomienia", + "gui.createrailwaysnavigator.route_overlay_settings.notifications.description": "Otrzymuj powiadomienia o wydarzeniach w podróży, np. przystanki, przesiadki, itp.", + + "gui.createrailwaysnavigator.common.expand": "Pokaż szczegóły", + "gui.createrailwaysnavigator.common.collapse": "Ukryj szczegóły", + "gui.createrailwaysnavigator.common.go_back": "Wstecz", + "gui.createrailwaysnavigator.common.go_to_top": "Przewiń do góry", + "gui.createrailwaysnavigator.common.reset_defaults": "Przywróć domyślne", + "gui.createrailwaysnavigator.common.count": "Ilość", + "gui.createrailwaysnavigator.common.true": "Tak", + "gui.createrailwaysnavigator.common.false": "Nie", + "gui.createrailwaysnavigator.common.search": "Szukaj", + "gui.createrailwaysnavigator.common.auto": "Auto", + "gui.createrailwaysnavigator.common.server_error": "Nastąpił błąd podczas wykonywania zadania. Sprawdź konsolę aby otrzymać szczegóły.", + + "gui.createrailwaysnavigator.navigator.title": "Create Railways Navigator", + "gui.createrailwaysnavigator.navigator.no_connections": "Nie znaleziono połączeń.", + "gui.createrailwaysnavigator.navigator.not_searched": "Jeszcze nic nie wyszukano.", + "gui.createrailwaysnavigator.navigator.searching": "Szukanie połączenia...", + "gui.createrailwaysnavigator.navigator.error_title": "Nie udało się nawigować!", + "gui.createrailwaysnavigator.navigator.start_end_null": "Początek lub cel podróży jest pusty.", + "gui.createrailwaysnavigator.navigator.start_end_equal": "Początek i cel podróży jest identyczny.", + "gui.createrailwaysnavigator.navigator.route_entry.connection_in_past": "❌ Połączenie z przeszłości", + "gui.createrailwaysnavigator.navigator.route_entry.transfer": "Prze.", + "gui.createrailwaysnavigator.navigator.route_entry.station_start": "z %s", + "gui.createrailwaysnavigator.navigator.global_settings.tooltip": "Ustawienia globalne", + "gui.createrailwaysnavigator.navigator.search_settings.tooltip": "Ustawienia wyszukiwania", + "gui.createrailwaysnavigator.navigator.search.tooltip": "Search", + "gui.createrailwaysnavigator.navigator.location.tooltip": "Nearest station from current position", + "gui.createrailwaysnavigator.navigator.switch.tooltip": "Zamień pola", + + "gui.createrailwaysnavigator.route_details.title": "Szczegóły podróży", + "gui.createrailwaysnavigator.route_details.departure": "Odjazd za", + "gui.createrailwaysnavigator.route_details.next_transfer_time": "Transfer in", + "gui.createrailwaysnavigator.route_details.transfer": "Transfer", + "gui.createrailwaysnavigator.route_details.save_route": "Zapisz połączenie", + "gui.createrailwaysnavigator.route_overview.title": "Szczegóły podróży", + "gui.createrailwaysnavigator.route_overview.journey_begins": "Twoja podróż rozpoczyna się! %s do %s, odjazd %s", + "gui.createrailwaysnavigator.route_overview.journey_begins_with_platform": "Twoja podróż rozpoczyna się! %s do %s, odjazd %s na peronie %s", + "gui.createrailwaysnavigator.route_overview.train_details": "%s do %s", + "gui.createrailwaysnavigator.route_overview.train_speed": "%s km/h", + "gui.createrailwaysnavigator.route_overview.next_stop": "Następna stacja: %s", + "gui.createrailwaysnavigator.route_overview.transfer": "Przesiadka do %s → %s", + "gui.createrailwaysnavigator.route_overview.transfer_with_platform": "Przesiadka do %s → %s na peronie %s", + "gui.createrailwaysnavigator.route_overview.journey_completed": "Podróż zakończona", + "gui.createrailwaysnavigator.route_overview.after_journey": "Dotarłeś do %s. Dziękujemy za podróż i życzymy miłego dnia.", + "gui.createrailwaysnavigator.route_overview.next_connections": "Następne połączenia", + "gui.createrailwaysnavigator.route_overview.schedule_transfer": "Przesiadka", + "gui.createrailwaysnavigator.route_overview.train_canceled": "Pociąg odwołany", + "gui.createrailwaysnavigator.route_overview.train_cancellation_info": "Informacja o %s", + "gui.createrailwaysnavigator.route_overview.stop_canceled": "❌ Odwołano", + "gui.createrailwaysnavigator.route_overview.connection_endangered": "Połączenie zagrożone", + "gui.createrailwaysnavigator.route_overview.connection_missed": "Połączenie przegapione", + "gui.createrailwaysnavigator.route_overview.connection_canceled": "Pociąg odwołany", + "gui.createrailwaysnavigator.route_overview.journey_interrupted": "Twoja podróż do %s jest niemożliwa do kontynuowania.", + "gui.createrailwaysnavigator.route_overview.connection_missed_info": "W związku z opóżnieniem pociągu, przegapiłeś połączenie. Wyszukaj inne połączenie w Nawigatorze. Za utrudnienia przepraszamy.", + "gui.createrailwaysnavigator.route_overview.train_canceled_info": "Informacja o %s: Ten pociąg został odwołany! Za utrudnienia przepraszamy. Wyszukaj inne połączenie w Nawigatorze.", + "gui.createrailwaysnavigator.route_overview.train_canceled_title": "Pociąg został odwołany", + "gui.createrailwaysnavigator.route_overview.journey_interrupted_info": "Twoja podróż do %s jest niemożliwa do kontynuowania. Wyszukaj inne połączenie w Nawigatorze.", + "gui.createrailwaysnavigator.route_overview.options": "Wciśnij %s aby zobaczyć opcje.", + "gui.createrailwaysnavigator.route_overview.notification.journey_begins.title": "Twoja podróż do %s rozpoczyna się!", + "gui.createrailwaysnavigator.route_overview.notification.journey_begins": "%s do %s, odjazd %s", + "gui.createrailwaysnavigator.route_overview.notification.journey_begins_with_platform": "%s do %s, odjazd %s z peronu %s", + "gui.createrailwaysnavigator.route_overview.notification.platform_changed.title": "Peron uległ zmianie!", + "gui.createrailwaysnavigator.route_overview.notification.platform_changed": "Twój pociąg w %s wyrusza dzisiaj z peronu %s.", + "gui.createrailwaysnavigator.route_overview.notification.train_delayed.title": "%s: Przyjazd %s opóżniony.", + "gui.createrailwaysnavigator.route_overview.notification.train_delayed": "%s zamiast %s w %s", + "gui.createrailwaysnavigator.route_overview.notification.train_canceled.title": "%s: Pociąg odwołany", + "gui.createrailwaysnavigator.route_overview.notification.train_canceled": "%s do %s został odwołany.", + "gui.createrailwaysnavigator.route_overview.notification.transfer.title": "Nadchodzi przesiadka", + "gui.createrailwaysnavigator.route_overview.notification.transfer": "Przesiadka %s → %s na peronie %s", + "gui.createrailwaysnavigator.route_overview.notification.transfer_with_platform": "Przesiadka %s → %s na peronie %s", + "gui.createrailwaysnavigator.route_overview.notification.connection_endangered.title": "Twoje połączenie jest zagrożone!", + "gui.createrailwaysnavigator.route_overview.notification.connection_endangered": "Prawdopodobnie nie dotrzesz %s do %s.", + "gui.createrailwaysnavigator.route_overview.notification.connection_missed.title": "Przegapione połączenie", + "gui.createrailwaysnavigator.route_overview.notification.connection_missed": "Przegapiłeś swoje połączenie %s do %s.", + "gui.createrailwaysnavigator.route_overview.notification.journey_completed.title": "Dotarłeś do swojego celu!", + "gui.createrailwaysnavigator.route_overview.notification.journey_completed": "Dziękujemy za podróż i życzymy miłego dnia.", + "gui.createrailwaysnavigator.route_overview.date": "Dzień %s, %s", + + "gui.createrailwaysnavigator.global_settings.title": "Ustawienia Globalne", + "gui.createrailwaysnavigator.global_settings.option.tooltip": "Kliknij aby edytować", + "gui.createrailwaysnavigator.global_settings.option_alias.title": "Tagi stacji", + "gui.createrailwaysnavigator.global_settings.option_alias.description": "Zdefiniuj tagi stacji aby traktować wieloperonowe stacje (np. MyStation 1, MyStation 2, ...) jako jedną stację (np. MyStation) z niestandardową nazwą.", + "gui.createrailwaysnavigator.global_settings.option_blacklist.title": "Czarna lista stacji", + "gui.createrailwaysnavigator.global_settings.option_blacklist.description": "Wyklucz stacje aby nie pojawiały się one w wynikach wyszukiwania. Te stacje będą ignorowane podczas generowania wyników.", + "gui.createrailwaysnavigator.global_settings.train_group.title": "Grupy pociągów", + "gui.createrailwaysnavigator.global_settings.train_group.description": "Utwórz grupy pociągów aby podzielić wszystkie pociągi (np. Regio, Krajowy, ...). Użytkownicy mogą decydować którą grupą chcą się poruszać.", + "gui.createrailwaysnavigator.global_settings.train_blacklist.title": "Czarna lista pociągów", + "gui.createrailwaysnavigator.global_settings.train_blacklist.description": "Wyklucz pociągi, np. towarowe, specjalne, itp., aby nie pojawiały się one w wynikach wyszukiwania.", + + "gui.createrailwaysnavigator.alias_settings.title": "Ustawienia tagów stacji", + "gui.createrailwaysnavigator.alias_settings.summary": "Zawiera %s stacji", + "gui.createrailwaysnavigator.alias_settings.editor": "Ostatnio edytowane przez %s o %s", + "gui.createrailwaysnavigator.alias_settings.add.tooltip": "Utwórz nowy wpis", + "gui.createrailwaysnavigator.alias_settings.delete_alias.tooltip": "Usuń tag", + "gui.createrailwaysnavigator.alias_settings.delete_station.tooltip": "Usuń stację", + "gui.createrailwaysnavigator.alias_settings.add_station.tooltip": "Dodaj stację", + "gui.createrailwaysnavigator.alias_settings.hint.station_name": "Nazwa stacji", + "gui.createrailwaysnavigator.alias_settings.hint.platform": "Peron", + "gui.createrailwaysnavigator.alias_settings.enter_name": "Wprowadź nazwę", + + "gui.createrailwaysnavigator.train_group_settings.title": "Ustawienia grupy pociągów", + "gui.createrailwaysnavigator.train_group_settings.summary": "Zawiera %s pociągów", + "gui.createrailwaysnavigator.train_group_settings.editor": "Ostatnio edytowane przez %s o %s", + "gui.createrailwaysnavigator.train_group_settings.delete_alias.tooltip": "Usuń grupę", + "gui.createrailwaysnavigator.train_group_settings.delete_station.tooltip": "Usuń pociąg", + "gui.createrailwaysnavigator.train_group_settings.add_station.tooltip": "Dodaj pociąg", + + "gui.createrailwaysnavigator.blacklist.title": "Czarna lista stacji", + "gui.createrailwaysnavigator.blacklist.add.tooltip": "Dodaj do czarnej listy", + "gui.createrailwaysnavigator.blacklist.delete.tooltip": "Usuń z czarnej listy", + + "gui.createrailwaysnavigator.train_blacklist.title": "Czarna lista pociągów", + "gui.createrailwaysnavigator.train_blacklist.add.tooltip": "Dodaj do czarnej listy", + "gui.createrailwaysnavigator.train_blacklist.delete.tooltip": "Usuń z czarnej listy", + + "gui.createrailwaysnavigator.search_settings.title": "Ustawienia wyszukiwania", + "gui.createrailwaysnavigator.search_settings.transfer_time": "Minimalny czas przesiadki", + "gui.createrailwaysnavigator.search_settings.transfer_time.description": "Minimalny czas który powinien być dostępny aby się przesiąść (1godz. w grze ~ 50 sekund)", + "gui.createrailwaysnavigator.search_settings.train_groups": "Filtr kategorii pociągów", + "gui.createrailwaysnavigator.search_settings.train_groups.description": "Zdecyduj z których kategorii chcesz korzystać.", + "gui.createrailwaysnavigator.search_settings.train_groups.overview": "%s wybranych kategorii", + "gui.createrailwaysnavigator.search_settings.train_groups.overview.all": "Wszystkie", + "gui.createrailwaysnavigator.search_settings.train_groups.overview.none": "Brak", + "gui.createrailwaysnavigator.search_settings.train_groups.tooltip.reset": "Resetuj filtr", + + "gui.createrailwaysnavigator.new_text_entry.add.tooltip": "Dodaj", + + "gui.createrailwaysnavigator.time": "Godzina: %s", + "gui.createrailwaysnavigator.time.now": "teraz", + "gui.createrailwaysnavigator.time_format.dhm": "%s dni %s godz. %s min.", + "gui.createrailwaysnavigator.time_format.hm": "%s godz. %s min.", + "gui.createrailwaysnavigator.time_format.m": "%s min.", + + "gui.createrailwaysnavigator.platform": "Peron", + "gui.createrailwaysnavigator.departure": "Odjazd", + "gui.createrailwaysnavigator.destination": "Stacja docelowa", + "gui.createrailwaysnavigator.line": "Linia", + "gui.createrailwaysnavigator.following_trains": "Następne pociągi:", + "gui.createrailwaysnavigator.via": "przez", + + "gui.createrailwaysnavigator.advanced_display_settings.title": "Ustawienia Zaawansowanego Wyświetlacza", + "gui.createrailwaysnavigator.advanced_display_settings.display_type": "Rodzaj wyświetlacza", + "gui.createrailwaysnavigator.advanced_display_settings.display_type.description": "Decyduje o wyświetlanej informacji.", + "gui.createrailwaysnavigator.advanced_display_settings.info_type": "Rodzaj informacji", + "gui.createrailwaysnavigator.advanced_display_settings.info_type.description": "Określa stopień szczegółowości informacji.", + "gui.createrailwaysnavigator.advanced_display_settings.double_sided": "Dwustronna", + + "enum.createrailwaysnavigator.display_info_type": "Rodzaj informacji", + "enum.createrailwaysnavigator.display_info_type.description": "Decyduje o tym jak dużo informacji powinno być wyświetlanych.", + "enum.createrailwaysnavigator.display_info_type.simple": "Proste", + "enum.createrailwaysnavigator.display_info_type.info.simple": "Pokazuje tylko najważnejsze informacje bez dodatkowych szczegółów.", + "enum.createrailwaysnavigator.display_info_type.detailed": "Złożone", + "enum.createrailwaysnavigator.display_info_type.info.detailed": "Pokazuje tylko najważniejsze informacje takie jak prędkość pociągu, przystanki, itp.", + "enum.createrailwaysnavigator.display_info_type.informative": "Szczegółowe", + "enum.createrailwaysnavigator.display_info_type.info.informative": "Pokazuje wszystkie informacji w ładnym układzie. Nie zalecane dla małych wyświelaczy ponieważ tekst może stać się bardzo mały.", + + "enum.createrailwaysnavigator.display_type": "Typ wyświetlacza", + "enum.createrailwaysnavigator.display_type.description": "Rodzaj wyświetlacza który zależy od jego przeznaczenia.", + "enum.createrailwaysnavigator.display_type.train_destination": "Cel pociągu", + "enum.createrailwaysnavigator.display_type.info.train_destination": "Używany na zewnątrz pociągu w celu pokazywa informacji takich jak nazwa pociągu, jego cel, i (jeśli zaznaczono) przystanków i innych informacji.", + "enum.createrailwaysnavigator.display_type.passenger_information": "Informacja pasażerska", + "enum.createrailwaysnavigator.display_type.info.passenger_information": "Wyświetlacze wewnątrz pociągu. Te wyświetlacze będą pokazywać następny przystanek, kierunek wyjścia i (jeśli zaznaczono) prędkość pociągu i przegląd trasy.", + "enum.createrailwaysnavigator.display_type.platform": "Wyświetlacz peronowy", + "enum.createrailwaysnavigator.display_type.info.platform": "Te wyświetlacze powinny być używane na peronach stacji i pokazywać pociągi i informacje o nich. Nie można używać w pociągach!", + + "enum.createrailwaysnavigator.side": "Strona", + "enum.createrailwaysnavigator.side.description": "Strona bloku po której powinna być wyświetlana treść.", + "enum.createrailwaysnavigator.side.front": "Przód", + "enum.createrailwaysnavigator.side.info.front": "Informacje będą wyświetlane tylko na przedniej stronie. To jest domyślne zachowanie.", + "enum.createrailwaysnavigator.side.both": "Obie strony", + "enum.createrailwaysnavigator.side.info.both": "Informacje będą wyświetlane tylko na obu stronach.", + + "enum.createrailwaysnavigator.time_display": "Wyświetlanie czasu", + "enum.createrailwaysnavigator.time_display.description": "Określa sposób wyświetlania czasu.", + "enum.createrailwaysnavigator.time_display.abs": "ABS", + "enum.createrailwaysnavigator.time_display.info.abs": "ABS (absolutny)", + "enum.createrailwaysnavigator.time_display.eta": "ETA", + "enum.createrailwaysnavigator.time_display.info.eta": "ETA (Przewidywany czas przybycia)", + + "create.display_source.advanced_display": "Zaawansowane Wyświetlacze", + "gui.createrailwaysnavigator.display_source.advanced_display.train_name_width": "Szerokość kolumny nazw pociągów", + "gui.createrailwaysnavigator.display_source.advanced_display.train_name_width.description": "Szerokość kolumny w pixelach blokowych. (Domyślnie: 16)", + "gui.createrailwaysnavigator.display_source.advanced_display.platform_width": "Szerokość kolumny peronu", + "gui.createrailwaysnavigator.display_source.advanced_display.platform_width.description": "Szerokość kolumny w pixelach blokowych. (-1 = Auto, Domyślnie: -1)", + + "createrailwaysnavigator.moin": "moin" + } \ No newline at end of file From 2ffcd2a6519cefd3cf387de94393a8a6e0d84e75 Mon Sep 17 00:00:00 2001 From: MisterJulsen Date: Tue, 7 May 2024 17:41:10 +0200 Subject: [PATCH 05/38] Updated DragonLib --- .vscode/settings.json | 3 ++- .../client/gui/widgets/DLCreateIconButton.java | 10 ++++++++++ .../client/gui/widgets/DLCreateIndicator.java | 10 ++++++++++ .../crn/client/gui/widgets/DLCreateLabel.java | 10 ++++++++++ .../widgets/DLCreateSelectionScrollInput.java | 10 ++++++++++ .../gui/widgets/ModCommandSuggestions.java | 3 +-- fabric/src/main/resources/fabric.mod.json | 2 +- forge/src/main/resources/META-INF/mods.toml | 2 +- forge/src/main/resources/icon.png | Bin 45387 -> 0 bytes gradle.properties | 4 ++-- 10 files changed, 47 insertions(+), 7 deletions(-) delete mode 100644 forge/src/main/resources/icon.png diff --git a/.vscode/settings.json b/.vscode/settings.json index d7df2409..5aa26aef 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,4 +1,5 @@ { "java.compile.nullAnalysis.mode": "disabled", - "commentTranslate.hover.enabled": false + "commentTranslate.hover.enabled": false, + "java.configuration.updateBuildConfiguration": "automatic" } \ No newline at end of file diff --git a/common/src/main/java/de/mrjulsen/crn/client/gui/widgets/DLCreateIconButton.java b/common/src/main/java/de/mrjulsen/crn/client/gui/widgets/DLCreateIconButton.java index 15f7df95..581f8e59 100644 --- a/common/src/main/java/de/mrjulsen/crn/client/gui/widgets/DLCreateIconButton.java +++ b/common/src/main/java/de/mrjulsen/crn/client/gui/widgets/DLCreateIconButton.java @@ -38,5 +38,15 @@ public boolean isMouseSelected() { public void setMouseSelected(boolean selected) { this.mouseSelected = selected; } + + @Override + public int getX() { + return x; + } + + @Override + public int getY() { + return y; + } } diff --git a/common/src/main/java/de/mrjulsen/crn/client/gui/widgets/DLCreateIndicator.java b/common/src/main/java/de/mrjulsen/crn/client/gui/widgets/DLCreateIndicator.java index bec1d5c8..64f58646 100644 --- a/common/src/main/java/de/mrjulsen/crn/client/gui/widgets/DLCreateIndicator.java +++ b/common/src/main/java/de/mrjulsen/crn/client/gui/widgets/DLCreateIndicator.java @@ -34,5 +34,15 @@ public boolean isMouseSelected() { public void setMouseSelected(boolean selected) { this.mouseSelected = selected; } + + @Override + public int getX() { + return x; + } + + @Override + public int getY() { + return y; + } } diff --git a/common/src/main/java/de/mrjulsen/crn/client/gui/widgets/DLCreateLabel.java b/common/src/main/java/de/mrjulsen/crn/client/gui/widgets/DLCreateLabel.java index a9ece070..67c7f151 100644 --- a/common/src/main/java/de/mrjulsen/crn/client/gui/widgets/DLCreateLabel.java +++ b/common/src/main/java/de/mrjulsen/crn/client/gui/widgets/DLCreateLabel.java @@ -33,6 +33,16 @@ public boolean isMouseSelected() { @Override public void setMouseSelected(boolean selected) { this.mouseSelected = selected; + } + + @Override + public int getX() { + return x; + } + + @Override + public int getY() { + return y; } } diff --git a/common/src/main/java/de/mrjulsen/crn/client/gui/widgets/DLCreateSelectionScrollInput.java b/common/src/main/java/de/mrjulsen/crn/client/gui/widgets/DLCreateSelectionScrollInput.java index 99e35a73..aa80452d 100644 --- a/common/src/main/java/de/mrjulsen/crn/client/gui/widgets/DLCreateSelectionScrollInput.java +++ b/common/src/main/java/de/mrjulsen/crn/client/gui/widgets/DLCreateSelectionScrollInput.java @@ -32,6 +32,16 @@ public boolean isMouseSelected() { @Override public void setMouseSelected(boolean selected) { this.mouseSelected = selected; + } + + @Override + public int getX() { + return x; + } + + @Override + public int getY() { + return y; } } diff --git a/common/src/main/java/de/mrjulsen/crn/client/gui/widgets/ModCommandSuggestions.java b/common/src/main/java/de/mrjulsen/crn/client/gui/widgets/ModCommandSuggestions.java index 6342acfb..6f022c99 100644 --- a/common/src/main/java/de/mrjulsen/crn/client/gui/widgets/ModCommandSuggestions.java +++ b/common/src/main/java/de/mrjulsen/crn/client/gui/widgets/ModCommandSuggestions.java @@ -17,7 +17,6 @@ import com.mojang.brigadier.suggestion.SuggestionsBuilder; import com.mojang.brigadier.tree.CommandNode; import com.mojang.brigadier.tree.LiteralCommandNode; -import com.mojang.text2speech.Narrator; import de.mrjulsen.mcdragonlib.util.TextUtils; @@ -488,7 +487,7 @@ public void select(int pIndex) { Suggestion suggestion = this.suggestionList.get(this.current); ModCommandSuggestions.this.input.setSuggestion(ModCommandSuggestions.calculateSuggestionSuffix(ModCommandSuggestions.this.input.getValue(), suggestion.apply(this.originalContents))); if (this.lastNarratedEntry != this.current) { - Narrator.getNarrator().say(this.getNarrationMessage().getString(), true); + //Narrator.getNarrator().say(this.getNarrationMessage().getString(), true); } } diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json index 4a6cb64d..207a7e64 100644 --- a/fabric/src/main/resources/fabric.mod.json +++ b/fabric/src/main/resources/fabric.mod.json @@ -28,7 +28,7 @@ "fabric": "*", "minecraft": ">=1.19.2", "architectury": ">=6.5.85", - "dragonlib": "1.19.2-2.1.6", + "dragonlib": ">=1.19.2-2.1.8", "create": "*" } } \ No newline at end of file diff --git a/forge/src/main/resources/META-INF/mods.toml b/forge/src/main/resources/META-INF/mods.toml index c773910c..9f1846d3 100644 --- a/forge/src/main/resources/META-INF/mods.toml +++ b/forge/src/main/resources/META-INF/mods.toml @@ -40,6 +40,6 @@ side = "BOTH" [[dependencies.createrailwaysnavigator]] modId = "dragonlib" mandatory = true -versionRange = "[1.19.2-2.1.6,)" +versionRange = "[1.19.2-2.1.8,)" ordering = "AFTER" side = "BOTH" \ No newline at end of file diff --git a/forge/src/main/resources/icon.png b/forge/src/main/resources/icon.png deleted file mode 100644 index 32e3e897a800dfa26f83bbb5ce3a9ccdcf3247c5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 45387 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 AzW@LL diff --git a/gradle.properties b/gradle.properties index e3aca12d..7eac6ee7 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,10 +4,10 @@ minecraft_version=1.19.2 enabled_platforms=fabric,forge archives_base_name=createrailwaysnavigator -mod_version=0.5.0 +mod_version=0.5.0-beta-1.19.2 maven_group=de.mrjulsen.drn -dragonlib_version=2.1.6 +dragonlib_version=2.1.8 create_fabric_version = 0.5.1-f-build.1416+mc1.19.2 create_forge_version = 0.5.1.f-46 registrate_forge_version = MC1.19-1.1.5 From e64a2178b7af3846ebe4d81fbedccae149a1d97c Mon Sep 17 00:00:00 2001 From: MisterJulsen Date: Tue, 7 May 2024 18:00:56 +0200 Subject: [PATCH 06/38] Updated mappings --- build.gradle | 8 +++++--- gradle.properties | 4 +++- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/build.gradle b/build.gradle index 09cfd06c..78bad6b9 100644 --- a/build.gradle +++ b/build.gradle @@ -17,9 +17,11 @@ subprojects { dependencies { minecraft "com.mojang:minecraft:${rootProject.minecraft_version}" // The following line declares the mojmap mappings, you may use other mappings as well - mappings loom.officialMojangMappings() - // The following line declares the yarn mappings you may select this one as well. - // mappings "net.fabricmc:yarn:1.18.2+build.4:v2" + + mappings loom.layered() { + officialMojangMappings() + parchment("org.parchmentmc.data:parchment-${rootProject.minecraft_version}:${rootProject.parchment_version}@zip") + } } } diff --git a/gradle.properties b/gradle.properties index 7eac6ee7..e89473b9 100644 --- a/gradle.properties +++ b/gradle.properties @@ -15,4 +15,6 @@ flywheel_forge_version = 0.6.10-20 fabric_loader_version=0.14.23 fabric_api_version=0.76.1+1.19.2 -forge_version=1.19.2-43.3.0 \ No newline at end of file +forge_version=1.19.2-43.3.0 + +parchment_version=2022.11.27 \ No newline at end of file From 804a22c9afa21b507f512a341ee587b61973f4a2 Mon Sep 17 00:00:00 2001 From: MisterJulsen Date: Tue, 7 May 2024 18:02:57 +0200 Subject: [PATCH 07/38] Updated version --- forge/src/main/resources/META-INF/mods.toml | 2 +- update.json | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/forge/src/main/resources/META-INF/mods.toml b/forge/src/main/resources/META-INF/mods.toml index 9f1846d3..872b5bea 100644 --- a/forge/src/main/resources/META-INF/mods.toml +++ b/forge/src/main/resources/META-INF/mods.toml @@ -8,7 +8,7 @@ modId = "createrailwaysnavigator" version = "${version}" displayName = "Create Railways Navigator" authors = "MrJulsen" -updateJSONURL="https://raw.githubusercontent.com/MisterJulsen/Create-Train-Navigator/1.18.2/update.json" +updateJSONURL="https://raw.githubusercontent.com/MisterJulsen/Create-Train-Navigator/1.19.2/update.json" displayURL="https://www.curseforge.com/minecraft/mc-mods/create-railways-navigator" issueTrackerURL="https://github.com/MisterJulsen/Create-Train-Navigator/issues" description = ''' diff --git a/update.json b/update.json index 88b24311..830ad89c 100644 --- a/update.json +++ b/update.json @@ -1,7 +1,7 @@ { "promos": { - "1.18.2-latest": "0.5.0-1.18.2", - "1.18.2-recommended": "0.5.0-1.18.2" + "1.19.2-latest": "0.5.0-1.19.2", + "1.19.2-recommended": "0.5.0-1.19.2" }, "homepage": "https://www.curseforge.com/minecraft/mc-mods/create-railways-navigator" } \ No newline at end of file From 8adc667c8e96ccd4464687c88a00e66027c86d90 Mon Sep 17 00:00:00 2001 From: MisterJulsen Date: Tue, 7 May 2024 18:05:01 +0200 Subject: [PATCH 08/38] Fixed project setup --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index e89473b9..8c817cf2 100644 --- a/gradle.properties +++ b/gradle.properties @@ -5,7 +5,7 @@ enabled_platforms=fabric,forge archives_base_name=createrailwaysnavigator mod_version=0.5.0-beta-1.19.2 -maven_group=de.mrjulsen.drn +maven_group=de.mrjulsen.crn dragonlib_version=2.1.8 create_fabric_version = 0.5.1-f-build.1416+mc1.19.2 From 8a3c61a040b3599cfbaf5679c1ac4862dfebba4f Mon Sep 17 00:00:00 2001 From: MisterJulsen Date: Tue, 7 May 2024 18:05:52 +0200 Subject: [PATCH 09/38] Updated mappings --- build.gradle | 8 +++++--- gradle.properties | 10 ++++++---- settings.gradle | 1 + 3 files changed, 12 insertions(+), 7 deletions(-) diff --git a/build.gradle b/build.gradle index 09cfd06c..f9865149 100644 --- a/build.gradle +++ b/build.gradle @@ -17,9 +17,11 @@ subprojects { dependencies { minecraft "com.mojang:minecraft:${rootProject.minecraft_version}" // The following line declares the mojmap mappings, you may use other mappings as well - mappings loom.officialMojangMappings() - // The following line declares the yarn mappings you may select this one as well. - // mappings "net.fabricmc:yarn:1.18.2+build.4:v2" + + mappings loom.layered() { + officialMojangMappings() + parchment("org.parchmentmc.data:parchment-${rootProject.minecraft_version}:${rootProject.parchment_version}@zip") + } } } diff --git a/gradle.properties b/gradle.properties index 998f563b..705cf963 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,10 +4,10 @@ minecraft_version=1.20.1 enabled_platforms=fabric,forge archives_base_name=createrailwaysnavigator -mod_version=0.5.0 -maven_group=de.mrjulsen.drn +mod_version=0.5.0-beta-1.20.1 +maven_group=de.mrjulsen.crn -dragonlib_version=2.1.6 +dragonlib_version=2.1.8 create_fabric_version = 0.5.1-f-build.1417+mc1.20.1 create_forge_version = 0.5.1.f-26 registrate_forge_version = MC1.20-1.3.3 @@ -15,4 +15,6 @@ flywheel_forge_version = 0.6.10-7 fabric_loader_version=0.14.23 fabric_api_version=0.90.4+1.20.1 -forge_version=1.20.1-47.2.1 \ No newline at end of file +forge_version=1.20.1-47.2.1 + +parchment_version=2023.09.03 \ No newline at end of file diff --git a/settings.gradle b/settings.gradle index ccd48de9..2b69abf5 100644 --- a/settings.gradle +++ b/settings.gradle @@ -3,6 +3,7 @@ pluginManagement { maven { url "https://maven.fabricmc.net/" } maven { url "https://maven.architectury.dev/" } maven { url "https://files.minecraftforge.net/maven/" } + maven { url "https://maven.parchmentmc.org/"} gradlePluginPortal() } } From c5e5ee7139b181bb78b2fe75f5545f27173d97f0 Mon Sep 17 00:00:00 2001 From: MisterJulsen Date: Tue, 7 May 2024 18:06:41 +0200 Subject: [PATCH 10/38] Added Create as dependency --- forge/src/main/resources/META-INF/mods.toml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/forge/src/main/resources/META-INF/mods.toml b/forge/src/main/resources/META-INF/mods.toml index 872b5bea..9945e11a 100644 --- a/forge/src/main/resources/META-INF/mods.toml +++ b/forge/src/main/resources/META-INF/mods.toml @@ -42,4 +42,11 @@ modId = "dragonlib" mandatory = true versionRange = "[1.19.2-2.1.8,)" ordering = "AFTER" +side = "BOTH" + +[[dependencies.createrailwaysnavigator]] +modId = "create" +mandatory = true +versionRange = "[0.5.1.f-46,)" +ordering = "AFTER" side = "BOTH" \ No newline at end of file From 1727963a43d8481931621640937990c05d41693e Mon Sep 17 00:00:00 2001 From: MisterJulsen Date: Tue, 7 May 2024 18:13:06 +0200 Subject: [PATCH 11/38] Fixed tooltip stays visible in route settings --- .../crn/client/gui/screen/RouteOverlaySettingsScreen.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/src/main/java/de/mrjulsen/crn/client/gui/screen/RouteOverlaySettingsScreen.java b/common/src/main/java/de/mrjulsen/crn/client/gui/screen/RouteOverlaySettingsScreen.java index 05f27649..f39d3d78 100644 --- a/common/src/main/java/de/mrjulsen/crn/client/gui/screen/RouteOverlaySettingsScreen.java +++ b/common/src/main/java/de/mrjulsen/crn/client/gui/screen/RouteOverlaySettingsScreen.java @@ -242,7 +242,7 @@ public void renderMainLayer(Graphics graphics, int pMouseX, int pMouseY, float p @Override public void renderFrontLayer(Graphics graphics, int pMouseX, int pMouseY, float pPartialTick) { buttons.performForEach(widget -> { - if (widget instanceof AbstractSimiWidget simiWidget && simiWidget.isHoveredOrFocused()) { + if (widget instanceof AbstractSimiWidget simiWidget && simiWidget.isHovered()) { List tooltip = simiWidget.getToolTip(); if (tooltip.isEmpty()) return; From 18dd2836a3ecfb0b71cfa7005f4eacbc651e0be0 Mon Sep 17 00:00:00 2001 From: MisterJulsen Date: Tue, 7 May 2024 18:17:44 +0200 Subject: [PATCH 12/38] Fixed rendering --- .../crn/client/gui/overlay/RouteDetailsOverlayScreen.java | 2 ++ .../mrjulsen/crn/client/gui/widgets/SettingsOptionWidget.java | 1 + 2 files changed, 3 insertions(+) diff --git a/common/src/main/java/de/mrjulsen/crn/client/gui/overlay/RouteDetailsOverlayScreen.java b/common/src/main/java/de/mrjulsen/crn/client/gui/overlay/RouteDetailsOverlayScreen.java index 6e7c91cb..22a712c2 100644 --- a/common/src/main/java/de/mrjulsen/crn/client/gui/overlay/RouteDetailsOverlayScreen.java +++ b/common/src/main/java/de/mrjulsen/crn/client/gui/overlay/RouteDetailsOverlayScreen.java @@ -481,6 +481,8 @@ public void render(Graphics graphics, float partialTicks, int width, int height) graphics.poseStack().popPose(); tickSlidingText(2 * Minecraft.getInstance().getDeltaFrameTime()); + + GuiUtils.setTint(1, 1, 1, 1); } private void renderInternal(Graphics graphics, int x, int y, int width, int height, float partialTicks) { diff --git a/common/src/main/java/de/mrjulsen/crn/client/gui/widgets/SettingsOptionWidget.java b/common/src/main/java/de/mrjulsen/crn/client/gui/widgets/SettingsOptionWidget.java index 049db8f6..62e6cb87 100644 --- a/common/src/main/java/de/mrjulsen/crn/client/gui/widgets/SettingsOptionWidget.java +++ b/common/src/main/java/de/mrjulsen/crn/client/gui/widgets/SettingsOptionWidget.java @@ -55,6 +55,7 @@ public void renderMainLayer(Graphics graphics, int pMouseX, int pMouseY, float p this.messageLabel.renderLeftAligned(graphics.graphics(), (int)((getX() + 6) / 0.75f), (int)((getY() + 20) / 0.75f), 10, 0xDBDBDB); float s = 1 / 0.75f; graphics.poseStack().scale(s, s, s); + GuiUtils.setTint(1, 1, 1, 1); } @Override From a8b42d44ef7f3582ea1983548197a8661fc5fe59 Mon Sep 17 00:00:00 2001 From: MisterJulsen Date: Tue, 7 May 2024 18:17:50 +0200 Subject: [PATCH 13/38] Fixed dependencies --- fabric/src/main/resources/fabric.mod.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json index 55832bac..7261f9b4 100644 --- a/fabric/src/main/resources/fabric.mod.json +++ b/fabric/src/main/resources/fabric.mod.json @@ -28,7 +28,7 @@ "fabric": "*", "minecraft": ">=1.20.1", "architectury": ">=9.1.12", - "dragonlib": "1.20.1-2.1.6", + "dragonlib": ">=1.20.1-2.1.6", "create": "*" } } \ No newline at end of file From 82f923bffb17882e69c503109a50c62614a40b10 Mon Sep 17 00:00:00 2001 From: MisterJulsen Date: Tue, 7 May 2024 23:55:58 +0200 Subject: [PATCH 14/38] Updated dependencies --- forge/src/main/resources/META-INF/mods.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/forge/src/main/resources/META-INF/mods.toml b/forge/src/main/resources/META-INF/mods.toml index 9945e11a..6beb93e6 100644 --- a/forge/src/main/resources/META-INF/mods.toml +++ b/forge/src/main/resources/META-INF/mods.toml @@ -47,6 +47,6 @@ side = "BOTH" [[dependencies.createrailwaysnavigator]] modId = "create" mandatory = true -versionRange = "[0.5.1.f-46,)" +versionRange = "[0.5.1.f,)" ordering = "AFTER" side = "BOTH" \ No newline at end of file From a73036eb8e390f7cb0903adb2adcb367a62421f7 Mon Sep 17 00:00:00 2001 From: MisterJulsen Date: Wed, 8 May 2024 00:07:22 +0200 Subject: [PATCH 15/38] Updated Version --- gradle.properties | 2 +- update.json | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/gradle.properties b/gradle.properties index 8c817cf2..49c6a835 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,7 +4,7 @@ minecraft_version=1.19.2 enabled_platforms=fabric,forge archives_base_name=createrailwaysnavigator -mod_version=0.5.0-beta-1.19.2 +mod_version=0.5.1-beta-1.19.2 maven_group=de.mrjulsen.crn dragonlib_version=2.1.8 diff --git a/update.json b/update.json index 830ad89c..bf40caf2 100644 --- a/update.json +++ b/update.json @@ -1,7 +1,7 @@ { "promos": { - "1.19.2-latest": "0.5.0-1.19.2", - "1.19.2-recommended": "0.5.0-1.19.2" + "1.19.2-latest": "0.5.1-1.19.2", + "1.19.2-recommended": "0.5.1-1.19.2" }, "homepage": "https://www.curseforge.com/minecraft/mc-mods/create-railways-navigator" } \ No newline at end of file From b4a71025e5016203e199beb9080a23b088fabaaf Mon Sep 17 00:00:00 2001 From: MisterJulsen Date: Wed, 8 May 2024 00:09:18 +0200 Subject: [PATCH 16/38] Updated dependencies --- forge/src/main/resources/META-INF/mods.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/forge/src/main/resources/META-INF/mods.toml b/forge/src/main/resources/META-INF/mods.toml index 5c312127..e0c0c4d6 100644 --- a/forge/src/main/resources/META-INF/mods.toml +++ b/forge/src/main/resources/META-INF/mods.toml @@ -47,6 +47,6 @@ side = "BOTH" [[dependencies.createrailwaysnavigator]] modId = "create" mandatory = true -versionRange = "[0.5.1.f-26,)" +versionRange = "[0.5.1.f,)" ordering = "AFTER" side = "BOTH" \ No newline at end of file From e8a9a5dab6289ef70504eddd0b1871c7fb87524a Mon Sep 17 00:00:00 2001 From: MisterJulsen Date: Wed, 8 May 2024 00:28:18 +0200 Subject: [PATCH 17/38] Updated version --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 705cf963..53f8aa6e 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,7 +4,7 @@ minecraft_version=1.20.1 enabled_platforms=fabric,forge archives_base_name=createrailwaysnavigator -mod_version=0.5.0-beta-1.20.1 +mod_version=0.5.1-beta-1.20.1 maven_group=de.mrjulsen.crn dragonlib_version=2.1.8 From 4bb2982080dd0e5d01834a930d50a550ac934cb8 Mon Sep 17 00:00:00 2001 From: MisterJulsen Date: Wed, 8 May 2024 00:29:59 +0200 Subject: [PATCH 18/38] removed unused print --- .../java/de/mrjulsen/crn/event/listeners/JourneyListener.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/common/src/main/java/de/mrjulsen/crn/event/listeners/JourneyListener.java b/common/src/main/java/de/mrjulsen/crn/event/listeners/JourneyListener.java index 113ce427..6c3d59c4 100644 --- a/common/src/main/java/de/mrjulsen/crn/event/listeners/JourneyListener.java +++ b/common/src/main/java/de/mrjulsen/crn/event/listeners/JourneyListener.java @@ -348,9 +348,7 @@ private void requestRealtimeData() { } } } - - System.out.println((!currentState.isWaitingForNextTrainToDepart() || currentState == State.BEFORE_JOURNEY || currentState == State.WHILE_TRANSFER) + ", " + currentStation().shouldRenderRealtime() + ", " + isStationValidForShedule(currentTrainSchedule, currentStation().getTrain().trainId(), stationIndex) + ", " + (time >= currentStation().getEstimatedTime())); - + if (((!currentState.isWaitingForNextTrainToDepart() || currentState == State.BEFORE_JOURNEY || currentState == State.WHILE_TRANSFER) && currentStation().shouldRenderRealtime()) && isStationValidForShedule(currentTrainSchedule, currentStation().getTrain().trainId(), stationIndex) && time >= currentStation().getEstimatedTime()) { if (currentStation().getTag() == StationTag.PART_END) { From 90635ae7edb83054a1919c04e5a616ad6b194878 Mon Sep 17 00:00:00 2001 From: MisterJulsen Date: Wed, 8 May 2024 00:34:12 +0200 Subject: [PATCH 19/38] Removed unused print --- .../java/de/mrjulsen/crn/event/listeners/JourneyListener.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/common/src/main/java/de/mrjulsen/crn/event/listeners/JourneyListener.java b/common/src/main/java/de/mrjulsen/crn/event/listeners/JourneyListener.java index 113ce427..6c3d59c4 100644 --- a/common/src/main/java/de/mrjulsen/crn/event/listeners/JourneyListener.java +++ b/common/src/main/java/de/mrjulsen/crn/event/listeners/JourneyListener.java @@ -348,9 +348,7 @@ private void requestRealtimeData() { } } } - - System.out.println((!currentState.isWaitingForNextTrainToDepart() || currentState == State.BEFORE_JOURNEY || currentState == State.WHILE_TRANSFER) + ", " + currentStation().shouldRenderRealtime() + ", " + isStationValidForShedule(currentTrainSchedule, currentStation().getTrain().trainId(), stationIndex) + ", " + (time >= currentStation().getEstimatedTime())); - + if (((!currentState.isWaitingForNextTrainToDepart() || currentState == State.BEFORE_JOURNEY || currentState == State.WHILE_TRANSFER) && currentStation().shouldRenderRealtime()) && isStationValidForShedule(currentTrainSchedule, currentStation().getTrain().trainId(), stationIndex) && time >= currentStation().getEstimatedTime()) { if (currentStation().getTag() == StationTag.PART_END) { From 69c2b515140977464483c7264fb9145133fce481 Mon Sep 17 00:00:00 2001 From: MrJulsen <82165334+MisterJulsen@users.noreply.github.com> Date: Wed, 8 May 2024 12:09:03 +0200 Subject: [PATCH 20/38] Update README.md --- README.md | 3 --- 1 file changed, 3 deletions(-) diff --git a/README.md b/README.md index 4cf7c945..1245c648 100644 --- a/README.md +++ b/README.md @@ -22,9 +22,6 @@ This mod adds a new item, the Create Railways Navigator, which is inspired by th ## **Please note!** To protect your world from damage, you should always create a backup of your world before installing an update of this mod. Alpha versions in particular may contain critical bugs! -## **Supported Versions** -A **fabric** version of this mod is currently **not planned** and the mod is mainly ported to **newer versions**. Please don't ask when the update for version X will come out as I don't know myself. The update will come when I have time for it and it's ready. - ## **Dependencies** This mod uses **DragonLib** as a library mod that contains useful code shared accross all my mods. DragonLib is embedded in all builds of Create Railways Navigator since version `0.2.0-beta-1.18.2`, so you don't need to install DragonLib manually. If you are developer and are interested in this library you can find more information about it on [GitHub](https://github.com/MisterJulsen/MC-DragonLib "DragonLib on GitHub"). From d483661caa8dc7bfb1454aff3af3c437625ffaba Mon Sep 17 00:00:00 2001 From: MrJulsen <82165334+MisterJulsen@users.noreply.github.com> Date: Wed, 8 May 2024 12:09:16 +0200 Subject: [PATCH 21/38] Update README.md --- README.md | 3 --- 1 file changed, 3 deletions(-) diff --git a/README.md b/README.md index 4cf7c945..1245c648 100644 --- a/README.md +++ b/README.md @@ -22,9 +22,6 @@ This mod adds a new item, the Create Railways Navigator, which is inspired by th ## **Please note!** To protect your world from damage, you should always create a backup of your world before installing an update of this mod. Alpha versions in particular may contain critical bugs! -## **Supported Versions** -A **fabric** version of this mod is currently **not planned** and the mod is mainly ported to **newer versions**. Please don't ask when the update for version X will come out as I don't know myself. The update will come when I have time for it and it's ready. - ## **Dependencies** This mod uses **DragonLib** as a library mod that contains useful code shared accross all my mods. DragonLib is embedded in all builds of Create Railways Navigator since version `0.2.0-beta-1.18.2`, so you don't need to install DragonLib manually. If you are developer and are interested in this library you can find more information about it on [GitHub](https://github.com/MisterJulsen/MC-DragonLib "DragonLib on GitHub"). From b28bc849af0041f0ac4ba7e27633c28198741885 Mon Sep 17 00:00:00 2001 From: MisterJulsen Date: Wed, 8 May 2024 18:34:53 +0200 Subject: [PATCH 22/38] Updated version --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 49c6a835..36570a85 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,7 +4,7 @@ minecraft_version=1.19.2 enabled_platforms=fabric,forge archives_base_name=createrailwaysnavigator -mod_version=0.5.1-beta-1.19.2 +mod_version=0.5.2-beta-1.19.2 maven_group=de.mrjulsen.crn dragonlib_version=2.1.8 From b67c900526a06c5ec7b76e7e0d6ae680739749c3 Mon Sep 17 00:00:00 2001 From: MisterJulsen Date: Thu, 9 May 2024 10:43:13 +0200 Subject: [PATCH 23/38] Updated jar name --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 78bad6b9..8310e899 100644 --- a/build.gradle +++ b/build.gradle @@ -34,7 +34,7 @@ allprojects { archivesName = rootProject.archives_base_name } - version = rootProject.mod_version + version = "${rootProject.mod_version}-${project.name}" group = rootProject.maven_group repositories { From dd7eea740264e38329cfe8b2fa9e965ee1eabae4 Mon Sep 17 00:00:00 2001 From: MisterJulsen Date: Thu, 9 May 2024 10:49:38 +0200 Subject: [PATCH 24/38] Updated custom translatable component --- .../mrjulsen/crn/client/lang/ELanguage.java | 4 +- .../client/lang/ModTranslatableComponent.java | 126 +++++++++--------- 2 files changed, 66 insertions(+), 64 deletions(-) diff --git a/common/src/main/java/de/mrjulsen/crn/client/lang/ELanguage.java b/common/src/main/java/de/mrjulsen/crn/client/lang/ELanguage.java index e4360210..c4d931c1 100644 --- a/common/src/main/java/de/mrjulsen/crn/client/lang/ELanguage.java +++ b/common/src/main/java/de/mrjulsen/crn/client/lang/ELanguage.java @@ -37,7 +37,7 @@ public static ELanguage getByCode(String code) { public static MutableComponent translate(String key) { if (Platform.getEnv() == EnvType.CLIENT) { - return MutableComponent.create(new ModTranslatableComponent(key)); + return MutableComponent.create(new ModTranslatableComponent(key, (String)null, ModTranslatableComponent.NO_ARGS)); } else { return TextUtils.translate(key); } @@ -45,7 +45,7 @@ public static MutableComponent translate(String key) { public static MutableComponent translate(String key, Object... args) { if (Platform.getEnv() == EnvType.CLIENT) { - return MutableComponent.create(new ModTranslatableComponent(key, args)); + return MutableComponent.create(new ModTranslatableComponent(key, (String)null, args)); } else { return TextUtils.translate(key, args); } diff --git a/common/src/main/java/de/mrjulsen/crn/client/lang/ModTranslatableComponent.java b/common/src/main/java/de/mrjulsen/crn/client/lang/ModTranslatableComponent.java index 15787b4c..69a4ed58 100644 --- a/common/src/main/java/de/mrjulsen/crn/client/lang/ModTranslatableComponent.java +++ b/common/src/main/java/de/mrjulsen/crn/client/lang/ModTranslatableComponent.java @@ -28,31 +28,29 @@ @SuppressWarnings("all") public class ModTranslatableComponent implements ComponentContents { - private static final Object[] NO_ARGS = new Object[0]; + public static final Object[] NO_ARGS = new Object[0]; private static final FormattedText TEXT_PERCENT = FormattedText.of("%"); private static final FormattedText TEXT_NULL = FormattedText.of("null"); private final String key; + @Nullable + private final String fallback; private final Object[] args; @Nullable private Language decomposedWith; private List decomposedParts = ImmutableList.of(); private static final Pattern FORMAT_PATTERN = Pattern.compile("%(?:(\\d+)\\$)?([A-Za-z%]|$)"); - public ModTranslatableComponent(String string) { - this.key = string; - this.args = NO_ARGS; - } - - public ModTranslatableComponent(String string, Object... objects) { - this.key = string; - this.args = objects; + public ModTranslatableComponent(String key, @Nullable String fallback, Object[] args) { + this.key = key; + this.fallback = fallback; + this.args = args; } private void decompose() { Language language = ClientWrapper.getCurrentClientLanguage(); if (language != this.decomposedWith) { this.decomposedWith = language; - String string = language.getOrDefault(this.key); + String string = this.fallback != null ? language.getOrDefault(this.key, this.fallback) : language.getOrDefault(this.key); try { ImmutableList.Builder builder = ImmutableList.builder(); @@ -66,63 +64,61 @@ private void decompose() { } } - private void decomposeTemplate(String string, Consumer consumer) { - Matcher matcher = FORMAT_PATTERN.matcher(string); + private void decomposeTemplate(String formatTemplate, Consumer consumer) { + Matcher matcher = FORMAT_PATTERN.matcher(formatTemplate); int i = 0; - int j; + int j; int l; - for (j = 0; matcher.find(j); j = l) { - int k = matcher.start(); - l = matcher.end(); - String string2; - if (k > j) { - string2 = string.substring(j, k); - if (string2.indexOf(37) != -1) { - throw new IllegalArgumentException(); - } - - consumer.accept(FormattedText.of(string2)); - } - - string2 = matcher.group(2); - String string3 = string.substring(k, l); - if ("%".equals(string2) && "%%".equals(string3)) { - consumer.accept(TEXT_PERCENT); - } else { - if (!"s".equals(string2)) { - throw new IllegalArgumentException("Unsupported format: '" + string3 + "'"); - } - - String string4 = matcher.group(1); - int m = string4 != null ? Integer.parseInt(string4) - 1 : i++; - if (m < this.args.length) { - consumer.accept(this.getArgument(m)); - } - } + for(j = 0; matcher.find(j); j = l) { + int k = matcher.start(); + l = matcher.end(); + String string; + if (k > j) { + string = formatTemplate.substring(j, k); + if (string.indexOf(37) != -1) { + throw new IllegalArgumentException(); + } + + consumer.accept(FormattedText.of(string)); + } + + string = matcher.group(2); + String string2 = formatTemplate.substring(k, l); + if ("%".equals(string) && "%%".equals(string2)) { + consumer.accept(TEXT_PERCENT); + } else { + if (!"s".equals(string)) { + throw new IllegalArgumentException("Unsupported format: '" + string2 + "'"); + } + + String string3 = matcher.group(1); + int m = string3 != null ? Integer.parseInt(string3) - 1 : i++; + consumer.accept(this.getArgument(m)); + } } - if (j < string.length()) { - String string5 = string.substring(j); - if (string5.indexOf(37) != -1) { - throw new IllegalArgumentException(); - } + if (j < formatTemplate.length()) { + String string4 = formatTemplate.substring(j); + if (string4.indexOf(37) != -1) { + throw new IllegalArgumentException(); + } - consumer.accept(FormattedText.of(string5)); + consumer.accept(FormattedText.of(string4)); } } - public final FormattedText getArgument(int i) { - if (i >= this.args.length) { - throw new IllegalArgumentException(); - } else { - Object object = this.args[i]; + public final FormattedText getArgument(int index) { + if (index >= 0 && index < this.args.length) { + Object object = this.args[index]; if (object instanceof Component) { return (Component)object; } else { return object == null ? TEXT_NULL : FormattedText.of(object.toString()); } + } else { + throw new IllegalArgumentException(this.toString()); } } @@ -160,19 +156,19 @@ public Optional visit(FormattedText.ContentConsumer contentConsumer) { return optional; } - public MutableComponent resolve(@Nullable CommandSourceStack commandSourceStack, @Nullable Entity entity, int i) throws CommandSyntaxException { + public MutableComponent resolve(@Nullable CommandSourceStack nbtPathPattern, @Nullable Entity entity, int recursionDepth) throws CommandSyntaxException { Object[] objects = new Object[this.args.length]; - for(int j = 0; j < objects.length; ++j) { - Object object = this.args[j]; + for(int i = 0; i < objects.length; ++i) { + Object object = this.args[i]; if (object instanceof Component) { - objects[j] = ComponentUtils.updateForEntity(commandSourceStack, (Component)object, entity, i); + objects[i] = ComponentUtils.updateForEntity(nbtPathPattern, (Component)object, entity, recursionDepth); } else { - objects[j] = object; + objects[i] = object; } } - return MutableComponent.create(new ModTranslatableComponent(this.key, objects)); + return MutableComponent.create(new ModTranslatableComponent(this.key, this.fallback, objects)); } public boolean equals(Object object) { @@ -181,8 +177,8 @@ public boolean equals(Object object) { } else { boolean var10000; if (object instanceof ModTranslatableComponent) { - ModTranslatableComponent ModTranslatableComponent = (ModTranslatableComponent)object; - if (this.key.equals(ModTranslatableComponent.getKey()) && Arrays.equals(this.args, ModTranslatableComponent.getArgs())) { + ModTranslatableComponent translatableContents = (ModTranslatableComponent)object; + if (Objects.equals(this.key, translatableContents.key) && Objects.equals(this.fallback, translatableContents.fallback) && Arrays.equals(this.args, translatableContents.args)) { var10000 = true; return var10000; } @@ -194,20 +190,26 @@ public boolean equals(Object object) { } public int hashCode() { - int i = this.key.hashCode(); + int i = Objects.hashCode(this.key); + i = 31 * i + Objects.hashCode(this.fallback); i = 31 * i + Arrays.hashCode(this.args); return i; } public String toString() { String var10000 = this.key; - return "translation{key='" + var10000 + "', args=" + Arrays.toString(this.args) + "}"; + return "translation{key='" + var10000 + "'" + (this.fallback != null ? ", fallback='" + this.fallback + "'" : "") + ", args=" + Arrays.toString(this.args) + "}"; } public String getKey() { return this.key; } + @Nullable + public String getFallback() { + return this.fallback; + } + public Object[] getArgs() { return this.args; } From f276a3435494fd475adb18ee27a7a11c7ddf5a84 Mon Sep 17 00:00:00 2001 From: MisterJulsen Date: Thu, 9 May 2024 11:04:47 +0200 Subject: [PATCH 25/38] Updated jar version --- build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index f9865149..35a8b71c 100644 --- a/build.gradle +++ b/build.gradle @@ -33,8 +33,8 @@ allprojects { base { archivesName = rootProject.archives_base_name } - - version = rootProject.mod_version + + version = "${rootProject.mod_version}-${project.name}" group = rootProject.maven_group repositories { From 8d6a9b94ea74aa7986718439985beba1506485c6 Mon Sep 17 00:00:00 2001 From: MisterJulsen Date: Thu, 9 May 2024 11:05:15 +0200 Subject: [PATCH 26/38] Updated version --- gradle.properties | 2 +- update.json | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/gradle.properties b/gradle.properties index 53f8aa6e..99069004 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,7 +4,7 @@ minecraft_version=1.20.1 enabled_platforms=fabric,forge archives_base_name=createrailwaysnavigator -mod_version=0.5.1-beta-1.20.1 +mod_version=0.5.2-beta-1.20.1 maven_group=de.mrjulsen.crn dragonlib_version=2.1.8 diff --git a/update.json b/update.json index 1aafef32..566b7ce0 100644 --- a/update.json +++ b/update.json @@ -1,7 +1,7 @@ { "promos": { - "1.20.1-latest": "0.5.1-1.20.1", - "1.20.1-recommended": "0.5.1-1.20.1" + "1.20.1-latest": "0.5.2-1.20.1", + "1.20.1-recommended": "0.5.2-1.20.1" }, "homepage": "https://www.curseforge.com/minecraft/mc-mods/create-railways-navigator" } \ No newline at end of file From dfa9df0d192cc728902416f58e087c62fd8b070e Mon Sep 17 00:00:00 2001 From: Solomon Cammack Date: Sat, 18 May 2024 22:40:55 +0100 Subject: [PATCH 27/38] Add half panel display --- .../block/AdvancedDisplayHalfPanelBlock.java | 224 +++++++++++++ .../crn/registry/ModBlockEntities.java | 1 + .../de/mrjulsen/crn/registry/ModBlocks.java | 18 +- .../mrjulsen/crn/registry/ModDisplayTags.java | 1 + .../advanced_display_half_panel.json | 303 ++++++++++++++++++ .../createrailwaysnavigator/lang/en_us.json | 6 +- .../advanced_display_half_panel_cen_cen.json | 61 ++++ .../advanced_display_half_panel_cen_neg.json | 61 ++++ .../advanced_display_half_panel_cen_pos.json | 61 ++++ ...ced_display_half_panel_double_cen_cen.json | 61 ++++ ...ced_display_half_panel_double_cen_neg.json | 61 ++++ ...ced_display_half_panel_double_cen_pos.json | 61 ++++ ...ced_display_half_panel_double_neg_cen.json | 61 ++++ ...ced_display_half_panel_double_neg_neg.json | 61 ++++ ...ced_display_half_panel_double_neg_pos.json | 61 ++++ ...ced_display_half_panel_double_pos_cen.json | 61 ++++ ...ced_display_half_panel_double_pos_neg.json | 61 ++++ ...ced_display_half_panel_double_pos_pos.json | 61 ++++ .../advanced_display_half_panel_neg_cen.json | 61 ++++ .../advanced_display_half_panel_neg_neg.json | 61 ++++ .../advanced_display_half_panel_neg_pos.json | 61 ++++ .../advanced_display_half_panel_pos_cen.json | 61 ++++ .../advanced_display_half_panel_pos_neg.json | 61 ++++ .../advanced_display_half_panel_pos_pos.json | 61 ++++ .../item/advanced_display_half_panel.json | 3 + .../textures/block/advanced_display_back.png | Bin 5088 -> 2374 bytes .../advanced_display_half_panel_connected.png | Bin 0 -> 5134 bytes .../blocks/advanced_display_half_panel.json | 20 ++ .../tags/blocks/advanced_displays.json | 1 + .../tags/items/advanced_displays.json | 1 + .../tags/blocks/mineable/pickaxe.json | 1 + .../recipes/advanced_display_half_panel.json | 15 + 32 files changed, 1685 insertions(+), 7 deletions(-) create mode 100644 common/src/main/java/de/mrjulsen/crn/block/AdvancedDisplayHalfPanelBlock.java create mode 100644 common/src/main/resources/assets/createrailwaysnavigator/blockstates/advanced_display_half_panel.json create mode 100644 common/src/main/resources/assets/createrailwaysnavigator/models/block/advanced_display_half_panel_cen_cen.json create mode 100644 common/src/main/resources/assets/createrailwaysnavigator/models/block/advanced_display_half_panel_cen_neg.json create mode 100644 common/src/main/resources/assets/createrailwaysnavigator/models/block/advanced_display_half_panel_cen_pos.json create mode 100644 common/src/main/resources/assets/createrailwaysnavigator/models/block/advanced_display_half_panel_double_cen_cen.json create mode 100644 common/src/main/resources/assets/createrailwaysnavigator/models/block/advanced_display_half_panel_double_cen_neg.json create mode 100644 common/src/main/resources/assets/createrailwaysnavigator/models/block/advanced_display_half_panel_double_cen_pos.json create mode 100644 common/src/main/resources/assets/createrailwaysnavigator/models/block/advanced_display_half_panel_double_neg_cen.json create mode 100644 common/src/main/resources/assets/createrailwaysnavigator/models/block/advanced_display_half_panel_double_neg_neg.json create mode 100644 common/src/main/resources/assets/createrailwaysnavigator/models/block/advanced_display_half_panel_double_neg_pos.json create mode 100644 common/src/main/resources/assets/createrailwaysnavigator/models/block/advanced_display_half_panel_double_pos_cen.json create mode 100644 common/src/main/resources/assets/createrailwaysnavigator/models/block/advanced_display_half_panel_double_pos_neg.json create mode 100644 common/src/main/resources/assets/createrailwaysnavigator/models/block/advanced_display_half_panel_double_pos_pos.json create mode 100644 common/src/main/resources/assets/createrailwaysnavigator/models/block/advanced_display_half_panel_neg_cen.json create mode 100644 common/src/main/resources/assets/createrailwaysnavigator/models/block/advanced_display_half_panel_neg_neg.json create mode 100644 common/src/main/resources/assets/createrailwaysnavigator/models/block/advanced_display_half_panel_neg_pos.json create mode 100644 common/src/main/resources/assets/createrailwaysnavigator/models/block/advanced_display_half_panel_pos_cen.json create mode 100644 common/src/main/resources/assets/createrailwaysnavigator/models/block/advanced_display_half_panel_pos_neg.json create mode 100644 common/src/main/resources/assets/createrailwaysnavigator/models/block/advanced_display_half_panel_pos_pos.json create mode 100644 common/src/main/resources/assets/createrailwaysnavigator/models/item/advanced_display_half_panel.json create mode 100644 common/src/main/resources/assets/createrailwaysnavigator/textures/block/advanced_display_half_panel_connected.png create mode 100644 common/src/main/resources/data/createrailwaysnavigator/loot_tables/blocks/advanced_display_half_panel.json create mode 100644 fabric/src/main/resources/data/createrailwaysnavigator/recipes/advanced_display_half_panel.json diff --git a/common/src/main/java/de/mrjulsen/crn/block/AdvancedDisplayHalfPanelBlock.java b/common/src/main/java/de/mrjulsen/crn/block/AdvancedDisplayHalfPanelBlock.java new file mode 100644 index 00000000..c93c46b9 --- /dev/null +++ b/common/src/main/java/de/mrjulsen/crn/block/AdvancedDisplayHalfPanelBlock.java @@ -0,0 +1,224 @@ +package de.mrjulsen.crn.block; + +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.Objects; + +import de.mrjulsen.crn.data.EBlockAlignment; +import de.mrjulsen.mcdragonlib.data.Pair; +import de.mrjulsen.mcdragonlib.data.Tripple; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.core.Direction.Axis; +import net.minecraft.core.Direction.AxisDirection; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.StateDefinition.Builder; +import net.minecraft.world.level.block.state.properties.EnumProperty; +import net.minecraft.world.level.block.state.properties.Property; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.VoxelShape; + +public class AdvancedDisplayHalfPanelBlock extends AbstractAdvancedSidedDisplayBlock { + + public static final EnumProperty Y_ALIGN = EnumProperty.create("y_alignment", EBlockAlignment.class); + public static final EnumProperty Z_ALIGN = EnumProperty.create("z_alignment", EBlockAlignment.class); + + private static final Map SHAPES = Map.ofEntries( + Map.entry(new ShapeKey(Direction.SOUTH, EBlockAlignment.NEGATIVE, EBlockAlignment.NEGATIVE), Block.box(0 , 0 , 13, 16, 8 , 16)), + Map.entry(new ShapeKey(Direction.NORTH, EBlockAlignment.NEGATIVE, EBlockAlignment.NEGATIVE), Block.box(0 , 0 , 0 , 16, 8 , 3 )), + Map.entry(new ShapeKey(Direction.EAST, EBlockAlignment.NEGATIVE, EBlockAlignment.NEGATIVE), Block.box(13, 0 , 0 , 16, 8 , 16)), + Map.entry(new ShapeKey(Direction.WEST, EBlockAlignment.NEGATIVE, EBlockAlignment.NEGATIVE), Block.box(0 , 0 , 0 , 3 , 8 , 16)), + + Map.entry(new ShapeKey(Direction.SOUTH, EBlockAlignment.CENTER, EBlockAlignment.NEGATIVE), Block.box(0 , 4 , 13, 16, 12, 16)), + Map.entry(new ShapeKey(Direction.NORTH, EBlockAlignment.CENTER, EBlockAlignment.NEGATIVE), Block.box(0 , 4 , 0 , 16, 8 , 3 )), + Map.entry(new ShapeKey(Direction.EAST, EBlockAlignment.CENTER, EBlockAlignment.NEGATIVE), Block.box(13, 4 , 0 , 16, 12, 16)), + Map.entry(new ShapeKey(Direction.WEST, EBlockAlignment.CENTER, EBlockAlignment.NEGATIVE), Block.box(0 , 4 , 0 , 3 , 12, 16)), + + Map.entry(new ShapeKey(Direction.SOUTH, EBlockAlignment.POSITIVE, EBlockAlignment.NEGATIVE), Block.box(0 , 8 , 13, 16, 16, 16)), + Map.entry(new ShapeKey(Direction.NORTH, EBlockAlignment.POSITIVE, EBlockAlignment.NEGATIVE), Block.box(0 , 8 , 0 , 16, 16, 3 )), + Map.entry(new ShapeKey(Direction.EAST, EBlockAlignment.POSITIVE, EBlockAlignment.NEGATIVE), Block.box(13, 8 , 0 , 16, 16, 16)), + Map.entry(new ShapeKey(Direction.WEST, EBlockAlignment.POSITIVE, EBlockAlignment.NEGATIVE), Block.box(0 , 8 , 0 , 3 , 16, 16)), + + + + Map.entry(new ShapeKey(Direction.SOUTH, EBlockAlignment.NEGATIVE, EBlockAlignment.CENTER), Block.box(0 , 0 , 6.5, 16, 8, 9.5)), + Map.entry(new ShapeKey(Direction.NORTH, EBlockAlignment.NEGATIVE, EBlockAlignment.CENTER), Block.box(0 , 0 , 6.5, 16, 8, 9.5)), + Map.entry(new ShapeKey(Direction.EAST, EBlockAlignment.NEGATIVE, EBlockAlignment.CENTER), Block.box(6.5, 0 , 0 , 9.5, 8 , 16)), + Map.entry(new ShapeKey(Direction.WEST, EBlockAlignment.NEGATIVE, EBlockAlignment.CENTER), Block.box(6.5, 0 , 0 , 9.5, 8 , 16)), + + Map.entry(new ShapeKey(Direction.SOUTH, EBlockAlignment.CENTER, EBlockAlignment.CENTER), Block.box(0 , 4 , 6.5, 16, 12, 9.5)), + Map.entry(new ShapeKey(Direction.NORTH, EBlockAlignment.CENTER, EBlockAlignment.CENTER), Block.box(0 , 4 , 6.5, 16, 12, 9.5)), + Map.entry(new ShapeKey(Direction.EAST, EBlockAlignment.CENTER, EBlockAlignment.CENTER), Block.box(6.5, 4 , 0 , 9.5, 12 , 16)), + Map.entry(new ShapeKey(Direction.WEST, EBlockAlignment.CENTER, EBlockAlignment.CENTER), Block.box(6.5, 4 , 0 , 9.5, 12 , 16)), + + Map.entry(new ShapeKey(Direction.SOUTH, EBlockAlignment.POSITIVE, EBlockAlignment.CENTER), Block.box(0 , 8 , 6.5, 16, 16, 9.5)), + Map.entry(new ShapeKey(Direction.NORTH, EBlockAlignment.POSITIVE, EBlockAlignment.CENTER), Block.box(0 , 8 , 6.5, 16, 16, 9.5)), + Map.entry(new ShapeKey(Direction.EAST, EBlockAlignment.POSITIVE, EBlockAlignment.CENTER), Block.box(6.5, 8 , 0 , 9.5, 16 , 16)), + Map.entry(new ShapeKey(Direction.WEST, EBlockAlignment.POSITIVE, EBlockAlignment.CENTER), Block.box(6.5, 8 , 0 , 9.5, 16 , 16)), + + + + Map.entry(new ShapeKey(Direction.SOUTH, EBlockAlignment.NEGATIVE, EBlockAlignment.POSITIVE), Block.box(0 , 0 , 0 , 16, 8 , 3 )), + Map.entry(new ShapeKey(Direction.NORTH, EBlockAlignment.NEGATIVE, EBlockAlignment.POSITIVE), Block.box(0 , 0 , 13, 16, 8 , 16)), + Map.entry(new ShapeKey(Direction.EAST, EBlockAlignment.NEGATIVE, EBlockAlignment.POSITIVE), Block.box(0 , 0 , 0 , 3 , 8 , 16)), + Map.entry(new ShapeKey(Direction.WEST, EBlockAlignment.NEGATIVE, EBlockAlignment.POSITIVE), Block.box(13, 0 , 0 , 16, 8 , 16)), + + Map.entry(new ShapeKey(Direction.SOUTH, EBlockAlignment.CENTER, EBlockAlignment.POSITIVE), Block.box(0 , 4 , 0 , 16, 12 , 3 )), + Map.entry(new ShapeKey(Direction.NORTH, EBlockAlignment.CENTER, EBlockAlignment.POSITIVE), Block.box(0 , 4 , 13, 16, 12 , 16)), + Map.entry(new ShapeKey(Direction.EAST, EBlockAlignment.CENTER, EBlockAlignment.POSITIVE), Block.box(0 , 4 , 0 , 3 , 12 , 16)), + Map.entry(new ShapeKey(Direction.WEST, EBlockAlignment.CENTER, EBlockAlignment.POSITIVE), Block.box(13, 4 , 0 , 16, 12 , 16)), + + Map.entry(new ShapeKey(Direction.SOUTH, EBlockAlignment.POSITIVE, EBlockAlignment.POSITIVE), Block.box(0 , 8 , 0 , 16, 16 , 3 )), + Map.entry(new ShapeKey(Direction.NORTH, EBlockAlignment.POSITIVE, EBlockAlignment.POSITIVE), Block.box(0 , 8 , 13, 16, 16 , 16)), + Map.entry(new ShapeKey(Direction.EAST, EBlockAlignment.POSITIVE, EBlockAlignment.POSITIVE), Block.box(0 , 8 , 0 , 3 , 16 , 16)), + Map.entry(new ShapeKey(Direction.WEST, EBlockAlignment.POSITIVE, EBlockAlignment.POSITIVE), Block.box(13, 8 , 0 , 16, 16 , 16)) + ); + + public AdvancedDisplayHalfPanelBlock(Properties properties) { + super(properties); + registerDefaultState(defaultBlockState() + .setValue(Y_ALIGN, EBlockAlignment.CENTER) + .setValue(Z_ALIGN, EBlockAlignment.CENTER) + ); + } + + @Override + public Collection> getExcludedProperties() { + return List.of(Y_ALIGN, Z_ALIGN); + } + + @Override + public VoxelShape getShape(BlockState pState, BlockGetter pLevel, BlockPos pPos, CollisionContext pContext) { + return SHAPES.get(new ShapeKey(pState.getValue(FACING), pState.getValue(Y_ALIGN), pState.getValue(Z_ALIGN))); + } + + @Override + public BlockState getStateForPlacement(BlockPlaceContext pContext) { + BlockState stateForPlacement = super.getStateForPlacement(pContext); + Direction direction = pContext.getClickedFace(); + Direction looking = pContext.getHorizontalDirection(); + Axis axis = looking.getAxis(); + AxisDirection axisDirection = looking.getAxisDirection(); + + double xzPos = 0.5f; + if (axis == Axis.X) { + xzPos = pContext.getClickLocation().x - pContext.getClickedPos().getX(); + } else if (axis == Axis.Z) { + xzPos = pContext.getClickLocation().z - pContext.getClickedPos().getZ(); + } + + EBlockAlignment yAlign = EBlockAlignment.CENTER; + EBlockAlignment zAlign = EBlockAlignment.CENTER; + + if (direction == Direction.UP || (pContext.getClickLocation().y - pContext.getClickedPos().getY() < 0.33333333D)) { + yAlign = EBlockAlignment.NEGATIVE; + } else if (direction == Direction.DOWN || (pContext.getClickLocation().y - pContext.getClickedPos().getY() > 0.66666666D)) { + yAlign = EBlockAlignment.POSITIVE; + } + + if (direction == pContext.getPlayer().getDirection().getOpposite() || (axisDirection == AxisDirection.POSITIVE ? xzPos > 0.66666666D : xzPos < 0.33333333D)) { + zAlign = EBlockAlignment.POSITIVE; + } else if (direction == pContext.getPlayer().getDirection() || (axisDirection == AxisDirection.POSITIVE ? xzPos < 0.33333333D : xzPos > 0.66666666D)) { + zAlign = EBlockAlignment.NEGATIVE; + } + + return stateForPlacement + .setValue(Y_ALIGN, yAlign) + .setValue(Z_ALIGN, zAlign); + } + + @Override + public boolean canConnectWithBlock(BlockGetter level, BlockPos selfPos, BlockPos otherPos) { + return super.canConnectWithBlock(level, selfPos, otherPos) && + level.getBlockState(selfPos).getValue(Y_ALIGN) == level.getBlockState(otherPos).getValue(Y_ALIGN) && + level.getBlockState(selfPos).getValue(Z_ALIGN) == level.getBlockState(otherPos).getValue(Z_ALIGN); + } + + @Override + protected void createBlockStateDefinition(Builder pBuilder) { + super.createBlockStateDefinition(pBuilder.add(Y_ALIGN, Z_ALIGN)); + } + + @Override + public Pair getRenderAspectRatio(Level level, BlockState blockState, BlockPos pos) { + return Pair.of(1.0F, 0.5F); + } + + @Override + public Pair getRenderOffset(Level level, BlockState blockState, BlockPos pos) { + float y; + switch (blockState.getValue(Y_ALIGN)) { + case NEGATIVE: + y = 8.0f; + break; + case POSITIVE: + y = 0.0f; + break; + default: + y = 4.0f; + break; + } + return Pair.of(0.0f, y); + } + + @Override + public Pair getRenderZOffset(Level level, BlockState blockState, BlockPos pos) { + float z1; + float z2; + switch (blockState.getValue(Z_ALIGN)) { + case NEGATIVE: + z1 = 16.05f; + z2 = 3.05f; + break; + case POSITIVE: + z1 = 3.05f; + z2 = 13.05f; + break; + default: + z1 = 9.55f; + z2 = 9.55f; + break; + } + return Pair.of(z1, z2); + } + + @Override + public Tripple getRenderRotation(Level level, BlockState blockState, BlockPos pos) { + return Tripple.of(0.0F, 0.0F, 0.0F); + } + + @Override + public boolean isSingleLined() { + return false; + } + + private static final class ShapeKey { + private final Direction facing; + private final EBlockAlignment yAlign; + private final EBlockAlignment zAlign; + + public ShapeKey(Direction facing, EBlockAlignment yAlign, EBlockAlignment zAlign) { + this.facing = facing; + this.yAlign = yAlign; + this.zAlign = zAlign; + } + + @Override + public boolean equals(Object o) { + if (o instanceof ShapeKey other) { + return facing == other.facing && yAlign == other.yAlign && zAlign == other.zAlign; + } + return false; + } + + @Override + public int hashCode() { + return Objects.hash(facing, yAlign, zAlign); + } + } +} diff --git a/common/src/main/java/de/mrjulsen/crn/registry/ModBlockEntities.java b/common/src/main/java/de/mrjulsen/crn/registry/ModBlockEntities.java index c7de1e8a..70bdd6e3 100644 --- a/common/src/main/java/de/mrjulsen/crn/registry/ModBlockEntities.java +++ b/common/src/main/java/de/mrjulsen/crn/registry/ModBlockEntities.java @@ -15,6 +15,7 @@ public class ModBlockEntities { ModBlocks.ADVANCED_DISPLAY, ModBlocks.ADVANCED_DISPLAY_BLOCK, ModBlocks.ADVANCED_DISPLAY_PANEL, + ModBlocks.ADVANCED_DISPLAY_HALF_PANEL, ModBlocks.ADVANCED_DISPLAY_SMALL, ModBlocks.ADVANCED_DISPLAY_SLOPED ) diff --git a/common/src/main/java/de/mrjulsen/crn/registry/ModBlocks.java b/common/src/main/java/de/mrjulsen/crn/registry/ModBlocks.java index 7e54e5be..b2584176 100644 --- a/common/src/main/java/de/mrjulsen/crn/registry/ModBlocks.java +++ b/common/src/main/java/de/mrjulsen/crn/registry/ModBlocks.java @@ -10,12 +10,7 @@ import com.tterrag.registrate.util.nullness.NonNullConsumer; import de.mrjulsen.crn.CreateRailwaysNavigator; -import de.mrjulsen.crn.block.AdvancedDisplayBlock; -import de.mrjulsen.crn.block.AdvancedDisplayBoardBlock; -import de.mrjulsen.crn.block.AdvancedDisplayPanelBlock; -import de.mrjulsen.crn.block.AdvancedDisplaySlopedBlock; -import de.mrjulsen.crn.block.AdvancedDisplaySmallBlock; -import de.mrjulsen.crn.block.TrainStationClockBlock; +import de.mrjulsen.crn.block.*; import de.mrjulsen.crn.block.connected.AdvancedDisplayCTBehaviour; import de.mrjulsen.crn.block.connected.AdvancedDisplaySmallCTBehaviour; import de.mrjulsen.crn.block.display.AdvancedDisplayTarget; @@ -74,6 +69,17 @@ public class ModBlocks { .build() .register(); + public static final BlockEntry ADVANCED_DISPLAY_HALF_PANEL = CreateRailwaysNavigator.REGISTRATE.block("advanced_display_half_panel", AdvancedDisplayHalfPanelBlock::new) + .onRegister(connectedTextures(() -> new AdvancedDisplaySmallCTBehaviour(ClientWrapper.CT_HORIZONTAL_ADVANCED_DISPLAY_SMALL, ClientWrapper.CT_ADVANCED_DISPLAY_SMALL))) + .addLayer(() -> RenderType::cutout) + .initialProperties(SharedProperties::softMetal) + .transform(TagGen.pickaxeOnly()) + .onRegister(AllDisplayBehaviours.assignDataBehaviour(new AdvancedDisplayTarget())) + .item() + .tab(ModCreativeModeTab.MAIN_TAB.getKey()) + .build() + .register(); + public static final BlockEntry ADVANCED_DISPLAY_SLOPED = CreateRailwaysNavigator.REGISTRATE.block("advanced_display_sloped", AdvancedDisplaySlopedBlock::new) .onRegister(connectedTextures(() -> new AdvancedDisplaySmallCTBehaviour(ClientWrapper.CT_HORIZONTAL_ADVANCED_DISPLAY_SMALL, ClientWrapper.CT_ADVANCED_DISPLAY_SMALL))) .addLayer(() -> RenderType::cutout) diff --git a/common/src/main/java/de/mrjulsen/crn/registry/ModDisplayTags.java b/common/src/main/java/de/mrjulsen/crn/registry/ModDisplayTags.java index 37dfa462..eb394a07 100644 --- a/common/src/main/java/de/mrjulsen/crn/registry/ModDisplayTags.java +++ b/common/src/main/java/de/mrjulsen/crn/registry/ModDisplayTags.java @@ -9,6 +9,7 @@ public static void register() { .add(ModBlocks.ADVANCED_DISPLAY) .add(ModBlocks.ADVANCED_DISPLAY_BLOCK) .add(ModBlocks.ADVANCED_DISPLAY_PANEL) + .add(ModBlocks.ADVANCED_DISPLAY_HALF_PANEL) .add(ModBlocks.ADVANCED_DISPLAY_SMALL) ; } diff --git a/common/src/main/resources/assets/createrailwaysnavigator/blockstates/advanced_display_half_panel.json b/common/src/main/resources/assets/createrailwaysnavigator/blockstates/advanced_display_half_panel.json new file mode 100644 index 00000000..a405e0ad --- /dev/null +++ b/common/src/main/resources/assets/createrailwaysnavigator/blockstates/advanced_display_half_panel.json @@ -0,0 +1,303 @@ +{ + "variants": { + "side=front,facing=north,y_alignment=negative,z_alignment=negative": { + "model": "createrailwaysnavigator:block/advanced_display_half_panel_neg_neg" + }, + "side=front,facing=east,y_alignment=negative,z_alignment=negative": { + "model": "createrailwaysnavigator:block/advanced_display_half_panel_neg_neg", + "y": 90 + }, + "side=front,facing=south,y_alignment=negative,z_alignment=negative": { + "model": "createrailwaysnavigator:block/advanced_display_half_panel_neg_neg", + "y": 180 + }, + "side=front,facing=west,y_alignment=negative,z_alignment=negative": { + "model": "createrailwaysnavigator:block/advanced_display_half_panel_neg_neg", + "y": 270 + }, + + "side=front,facing=north,y_alignment=center,z_alignment=negative": { + "model": "createrailwaysnavigator:block/advanced_display_half_panel_cen_neg" + }, + "side=front,facing=east,y_alignment=center,z_alignment=negative": { + "model": "createrailwaysnavigator:block/advanced_display_half_panel_cen_neg", + "y": 90 + }, + "side=front,facing=south,y_alignment=center,z_alignment=negative": { + "model": "createrailwaysnavigator:block/advanced_display_half_panel_cen_neg", + "y": 180 + }, + "side=front,facing=west,y_alignment=center,z_alignment=negative": { + "model": "createrailwaysnavigator:block/advanced_display_half_panel_cen_neg", + "y": 270 + }, + + "side=front,facing=north,y_alignment=positive,z_alignment=negative": { + "model": "createrailwaysnavigator:block/advanced_display_half_panel_pos_neg" + }, + "side=front,facing=east,y_alignment=positive,z_alignment=negative": { + "model": "createrailwaysnavigator:block/advanced_display_half_panel_pos_neg", + "y": 90 + }, + "side=front,facing=south,y_alignment=positive,z_alignment=negative": { + "model": "createrailwaysnavigator:block/advanced_display_half_panel_pos_neg", + "y": 180 + }, + "side=front,facing=west,y_alignment=positive,z_alignment=negative": { + "model": "createrailwaysnavigator:block/advanced_display_half_panel_pos_neg", + "y": 270 + }, + + + + "side=front,facing=north,y_alignment=negative,z_alignment=center": { + "model": "createrailwaysnavigator:block/advanced_display_half_panel_neg_cen" + }, + "side=front,facing=east,y_alignment=negative,z_alignment=center": { + "model": "createrailwaysnavigator:block/advanced_display_half_panel_neg_cen", + "y": 90 + }, + "side=front,facing=south,y_alignment=negative,z_alignment=center": { + "model": "createrailwaysnavigator:block/advanced_display_half_panel_neg_cen", + "y": 180 + }, + "side=front,facing=west,y_alignment=negative,z_alignment=center": { + "model": "createrailwaysnavigator:block/advanced_display_half_panel_neg_cen", + "y": 270 + }, + + "side=front,facing=north,y_alignment=center,z_alignment=center": { + "model": "createrailwaysnavigator:block/advanced_display_half_panel_cen_cen" + }, + "side=front,facing=east,y_alignment=center,z_alignment=center": { + "model": "createrailwaysnavigator:block/advanced_display_half_panel_cen_cen", + "y": 90 + }, + "side=front,facing=south,y_alignment=center,z_alignment=center": { + "model": "createrailwaysnavigator:block/advanced_display_half_panel_cen_cen", + "y": 180 + }, + "side=front,facing=west,y_alignment=center,z_alignment=center": { + "model": "createrailwaysnavigator:block/advanced_display_half_panel_cen_cen", + "y": 270 + }, + + "side=front,facing=north,y_alignment=positive,z_alignment=center": { + "model": "createrailwaysnavigator:block/advanced_display_half_panel_pos_cen" + }, + "side=front,facing=east,y_alignment=positive,z_alignment=center": { + "model": "createrailwaysnavigator:block/advanced_display_half_panel_pos_cen", + "y": 90 + }, + "side=front,facing=south,y_alignment=positive,z_alignment=center": { + "model": "createrailwaysnavigator:block/advanced_display_half_panel_pos_cen", + "y": 180 + }, + "side=front,facing=west,y_alignment=positive,z_alignment=center": { + "model": "createrailwaysnavigator:block/advanced_display_half_panel_pos_cen", + "y": 270 + }, + + + + "side=front,facing=north,y_alignment=negative,z_alignment=positive": { + "model": "createrailwaysnavigator:block/advanced_display_half_panel_neg_pos" + }, + "side=front,facing=east,y_alignment=negative,z_alignment=positive": { + "model": "createrailwaysnavigator:block/advanced_display_half_panel_neg_pos", + "y": 90 + }, + "side=front,facing=south,y_alignment=negative,z_alignment=positive": { + "model": "createrailwaysnavigator:block/advanced_display_half_panel_neg_pos", + "y": 180 + }, + "side=front,facing=west,y_alignment=negative,z_alignment=positive": { + "model": "createrailwaysnavigator:block/advanced_display_half_panel_neg_pos", + "y": 270 + }, + + "side=front,facing=north,y_alignment=center,z_alignment=positive": { + "model": "createrailwaysnavigator:block/advanced_display_half_panel_cen_pos" + }, + "side=front,facing=east,y_alignment=center,z_alignment=positive": { + "model": "createrailwaysnavigator:block/advanced_display_half_panel_cen_pos", + "y": 90 + }, + "side=front,facing=south,y_alignment=center,z_alignment=positive": { + "model": "createrailwaysnavigator:block/advanced_display_half_panel_cen_pos", + "y": 180 + }, + "side=front,facing=west,y_alignment=center,z_alignment=positive": { + "model": "createrailwaysnavigator:block/advanced_display_half_panel_cen_pos", + "y": 270 + }, + + "side=front,facing=north,y_alignment=positive,z_alignment=positive": { + "model": "createrailwaysnavigator:block/advanced_display_half_panel_pos_pos" + }, + "side=front,facing=east,y_alignment=positive,z_alignment=positive": { + "model": "createrailwaysnavigator:block/advanced_display_half_panel_pos_pos", + "y": 90 + }, + "side=front,facing=south,y_alignment=positive,z_alignment=positive": { + "model": "createrailwaysnavigator:block/advanced_display_half_panel_pos_pos", + "y": 180 + }, + "side=front,facing=west,y_alignment=positive,z_alignment=positive": { + "model": "createrailwaysnavigator:block/advanced_display_half_panel_pos_pos", + "y": 270 + }, + + + + + + "side=both,facing=north,y_alignment=negative,z_alignment=negative": { + "model": "createrailwaysnavigator:block/advanced_display_half_panel_double_neg_neg" + }, + "side=both,facing=east,y_alignment=negative,z_alignment=negative": { + "model": "createrailwaysnavigator:block/advanced_display_half_panel_double_neg_neg", + "y": 90 + }, + "side=both,facing=south,y_alignment=negative,z_alignment=negative": { + "model": "createrailwaysnavigator:block/advanced_display_half_panel_double_neg_neg", + "y": 180 + }, + "side=both,facing=west,y_alignment=negative,z_alignment=negative": { + "model": "createrailwaysnavigator:block/advanced_display_half_panel_double_neg_neg", + "y": 270 + }, + + "side=both,facing=north,y_alignment=center,z_alignment=negative": { + "model": "createrailwaysnavigator:block/advanced_display_half_panel_double_cen_neg" + }, + "side=both,facing=east,y_alignment=center,z_alignment=negative": { + "model": "createrailwaysnavigator:block/advanced_display_half_panel_double_cen_neg", + "y": 90 + }, + "side=both,facing=south,y_alignment=center,z_alignment=negative": { + "model": "createrailwaysnavigator:block/advanced_display_half_panel_double_cen_neg", + "y": 180 + }, + "side=both,facing=west,y_alignment=center,z_alignment=negative": { + "model": "createrailwaysnavigator:block/advanced_display_half_panel_double_cen_neg", + "y": 270 + }, + + "side=both,facing=north,y_alignment=positive,z_alignment=negative": { + "model": "createrailwaysnavigator:block/advanced_display_half_panel_double_pos_neg" + }, + "side=both,facing=east,y_alignment=positive,z_alignment=negative": { + "model": "createrailwaysnavigator:block/advanced_display_half_panel_double_pos_neg", + "y": 90 + }, + "side=both,facing=south,y_alignment=positive,z_alignment=negative": { + "model": "createrailwaysnavigator:block/advanced_display_half_panel_double_pos_neg", + "y": 180 + }, + "side=both,facing=west,y_alignment=positive,z_alignment=negative": { + "model": "createrailwaysnavigator:block/advanced_display_half_panel_double_pos_neg", + "y": 270 + }, + + + + "side=both,facing=north,y_alignment=negative,z_alignment=center": { + "model": "createrailwaysnavigator:block/advanced_display_half_panel_double_neg_cen" + }, + "side=both,facing=east,y_alignment=negative,z_alignment=center": { + "model": "createrailwaysnavigator:block/advanced_display_half_panel_double_neg_cen", + "y": 90 + }, + "side=both,facing=south,y_alignment=negative,z_alignment=center": { + "model": "createrailwaysnavigator:block/advanced_display_half_panel_double_neg_cen", + "y": 180 + }, + "side=both,facing=west,y_alignment=negative,z_alignment=center": { + "model": "createrailwaysnavigator:block/advanced_display_half_panel_double_neg_cen", + "y": 270 + }, + + "side=both,facing=north,y_alignment=center,z_alignment=center": { + "model": "createrailwaysnavigator:block/advanced_display_half_panel_double_cen_cen" + }, + "side=both,facing=east,y_alignment=center,z_alignment=center": { + "model": "createrailwaysnavigator:block/advanced_display_half_panel_double_cen_cen", + "y": 90 + }, + "side=both,facing=south,y_alignment=center,z_alignment=center": { + "model": "createrailwaysnavigator:block/advanced_display_half_panel_double_cen_cen", + "y": 180 + }, + "side=both,facing=west,y_alignment=center,z_alignment=center": { + "model": "createrailwaysnavigator:block/advanced_display_half_panel_double_cen_cen", + "y": 270 + }, + + "side=both,facing=north,y_alignment=positive,z_alignment=center": { + "model": "createrailwaysnavigator:block/advanced_display_half_panel_double_pos_cen" + }, + "side=both,facing=east,y_alignment=positive,z_alignment=center": { + "model": "createrailwaysnavigator:block/advanced_display_half_panel_double_pos_cen", + "y": 90 + }, + "side=both,facing=south,y_alignment=positive,z_alignment=center": { + "model": "createrailwaysnavigator:block/advanced_display_half_panel_double_pos_cen", + "y": 180 + }, + "side=both,facing=west,y_alignment=positive,z_alignment=center": { + "model": "createrailwaysnavigator:block/advanced_display_half_panel_double_pos_cen", + "y": 270 + }, + + + + "side=both,facing=north,y_alignment=negative,z_alignment=positive": { + "model": "createrailwaysnavigator:block/advanced_display_half_panel_double_neg_pos" + }, + "side=both,facing=east,y_alignment=negative,z_alignment=positive": { + "model": "createrailwaysnavigator:block/advanced_display_half_panel_double_neg_pos", + "y": 90 + }, + "side=both,facing=south,y_alignment=negative,z_alignment=positive": { + "model": "createrailwaysnavigator:block/advanced_display_half_panel_double_neg_pos", + "y": 180 + }, + "side=both,facing=west,y_alignment=negative,z_alignment=positive": { + "model": "createrailwaysnavigator:block/advanced_display_half_panel_double_neg_pos", + "y": 270 + }, + + "side=both,facing=north,y_alignment=center,z_alignment=positive": { + "model": "createrailwaysnavigator:block/advanced_display_half_panel_double_cen_pos" + }, + "side=both,facing=east,y_alignment=center,z_alignment=positive": { + "model": "createrailwaysnavigator:block/advanced_display_half_panel_double_cen_pos", + "y": 90 + }, + "side=both,facing=south,y_alignment=center,z_alignment=positive": { + "model": "createrailwaysnavigator:block/advanced_display_half_panel_double_cen_pos", + "y": 180 + }, + "side=both,facing=west,y_alignment=center,z_alignment=positive": { + "model": "createrailwaysnavigator:block/advanced_display_half_panel_double_cen_pos", + "y": 270 + }, + + "side=both,facing=north,y_alignment=positive,z_alignment=positive": { + "model": "createrailwaysnavigator:block/advanced_display_half_panel_double_pos_pos" + }, + "side=both,facing=east,y_alignment=positive,z_alignment=positive": { + "model": "createrailwaysnavigator:block/advanced_display_half_panel_double_pos_pos", + "y": 90 + }, + "side=both,facing=south,y_alignment=positive,z_alignment=positive": { + "model": "createrailwaysnavigator:block/advanced_display_half_panel_double_pos_pos", + "y": 180 + }, + "side=both,facing=west,y_alignment=positive,z_alignment=positive": { + "model": "createrailwaysnavigator:block/advanced_display_half_panel_double_pos_pos", + "y": 270 + } + } +} \ No newline at end of file diff --git a/common/src/main/resources/assets/createrailwaysnavigator/lang/en_us.json b/common/src/main/resources/assets/createrailwaysnavigator/lang/en_us.json index 58e72518..5f6fd02b 100644 --- a/common/src/main/resources/assets/createrailwaysnavigator/lang/en_us.json +++ b/common/src/main/resources/assets/createrailwaysnavigator/lang/en_us.json @@ -25,7 +25,11 @@ "block.createrailwaysnavigator.advanced_display_panel": "Advanced Display Panel", "block.createrailwaysnavigator.advanced_display_panel.tooltip.summary": "Use it on _trains_, as a _train destination display_ or _passenger information display_, or at _train stations_ as improved _platform displays_ which also shows more information than regular display boards.", "block.createrailwaysnavigator.advanced_display_panel.tooltip.condition1": "When R-Clicked using a Wrench", - "block.createrailwaysnavigator.advanced_display_panel.tooltip.behaviour1": "Open a menu to _configure_ the _display_.", + "block.createrailwaysnavigator.advanced_display_panel.tooltip.behaviour1": "Open a menu to _configure_ the _display_.", + "block.createrailwaysnavigator.advanced_display_half_panel": "Advanced Display Half Panel", + "block.createrailwaysnavigator.advanced_display_half_panel.tooltip.summary": "Use it on _trains_, as a _train destination display_ or _passenger information display_, or at _train stations_ as improved _platform displays_ which also shows more information than regular display boards.", + "block.createrailwaysnavigator.advanced_display_half_panel.tooltip.condition1": "When R-Clicked using a Wrench", + "block.createrailwaysnavigator.advanced_display_half_panel.tooltip.behaviour1": "Open a menu to _configure_ the _display_.", "block.createrailwaysnavigator.advanced_display_sloped": "Sloped Advanced Display", "block.createrailwaysnavigator.advanced_display_sloped.tooltip.summary": "Use it on _trains_, as a _train destination display_ or _passenger information display_, or at _train stations_ as improved _platform displays_ which also shows more information than regular display boards.", "block.createrailwaysnavigator.advanced_display_sloped.tooltip.condition1": "When R-Clicked using a Wrench", diff --git a/common/src/main/resources/assets/createrailwaysnavigator/models/block/advanced_display_half_panel_cen_cen.json b/common/src/main/resources/assets/createrailwaysnavigator/models/block/advanced_display_half_panel_cen_cen.json new file mode 100644 index 00000000..0a84f892 --- /dev/null +++ b/common/src/main/resources/assets/createrailwaysnavigator/models/block/advanced_display_half_panel_cen_cen.json @@ -0,0 +1,61 @@ +{ + "credit": "Made with Blockbench", + "texture_size": [64, 64], + "textures": { + "2": "createrailwaysnavigator:block/advanced_display_back", + "3": "createrailwaysnavigator:block/advanced_display_small", + "particle": "createrailwaysnavigator:block/advanced_display" + }, + "elements": [ + { + "from": [0, 4, 6.5], + "to": [16, 12, 9.5], + "faces": { + "north": {"uv": [0, 0, 16, 8], "texture": "#3"}, + "east": {"uv": [13, 8, 14.5, 12], "texture": "#2", "cullface": "east"}, + "south": {"uv": [0, 8, 8, 12], "texture": "#2", "cullface": "south"}, + "west": {"uv": [14.5, 8, 13, 12], "texture": "#2", "cullface": "west"}, + "up": {"uv": [13, 0, 14.5, 8], "rotation": 90, "texture": "#2"}, + "down": {"uv": [13, 0, 14.5, 8], "rotation": 90, "texture": "#2", "cullface": "down"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "thirdperson_lefthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson_righthand": { + "rotation": [0, 45, 0], + "translation": [-1.5, 0, 0], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_lefthand": { + "rotation": [0, 45, 0], + "translation": [-1.5, 0, 0], + "scale": [0.4, 0.4, 0.4] + }, + "ground": { + "translation": [0, 3, -1], + "scale": [0.25, 0.25, 0.25] + }, + "gui": { + "rotation": [30, 225, 0], + "translation": [1.75, 1, 0], + "scale": [0.625, 0.625, 0.625] + }, + "head": { + "translation": [0, 0, -8] + }, + "fixed": { + "translation": [0, 0, -0.75], + "scale": [0.5, 0.5, 0.5] + } + } +} \ No newline at end of file diff --git a/common/src/main/resources/assets/createrailwaysnavigator/models/block/advanced_display_half_panel_cen_neg.json b/common/src/main/resources/assets/createrailwaysnavigator/models/block/advanced_display_half_panel_cen_neg.json new file mode 100644 index 00000000..fcaa1bda --- /dev/null +++ b/common/src/main/resources/assets/createrailwaysnavigator/models/block/advanced_display_half_panel_cen_neg.json @@ -0,0 +1,61 @@ +{ + "credit": "Made with Blockbench", + "texture_size": [64, 64], + "textures": { + "2": "createrailwaysnavigator:block/advanced_display_back", + "3": "createrailwaysnavigator:block/advanced_display_small", + "particle": "createrailwaysnavigator:block/advanced_display" + }, + "elements": [ + { + "from": [0, 4, 0], + "to": [16, 12, 3], + "faces": { + "north": {"uv": [0, 0, 16, 8], "texture": "#3"}, + "east": {"uv": [13, 8, 14.5, 12], "texture": "#2", "cullface": "east"}, + "south": {"uv": [0, 8, 8, 12], "texture": "#2", "cullface": "south"}, + "west": {"uv": [14.5, 8, 13, 12], "texture": "#2", "cullface": "west"}, + "up": {"uv": [13, 0, 14.5, 8], "rotation": 90, "texture": "#2"}, + "down": {"uv": [13, 0, 14.5, 8], "rotation": 90, "texture": "#2", "cullface": "down"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "thirdperson_lefthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson_righthand": { + "rotation": [0, 45, 0], + "translation": [-1.5, 0, 0], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_lefthand": { + "rotation": [0, 45, 0], + "translation": [-1.5, 0, 0], + "scale": [0.4, 0.4, 0.4] + }, + "ground": { + "translation": [0, 3, -1], + "scale": [0.25, 0.25, 0.25] + }, + "gui": { + "rotation": [30, 225, 0], + "translation": [1.75, 1, 0], + "scale": [0.625, 0.625, 0.625] + }, + "head": { + "translation": [0, 0, -8] + }, + "fixed": { + "translation": [0, 0, -0.75], + "scale": [0.5, 0.5, 0.5] + } + } +} \ No newline at end of file diff --git a/common/src/main/resources/assets/createrailwaysnavigator/models/block/advanced_display_half_panel_cen_pos.json b/common/src/main/resources/assets/createrailwaysnavigator/models/block/advanced_display_half_panel_cen_pos.json new file mode 100644 index 00000000..0236a56c --- /dev/null +++ b/common/src/main/resources/assets/createrailwaysnavigator/models/block/advanced_display_half_panel_cen_pos.json @@ -0,0 +1,61 @@ +{ + "credit": "Made with Blockbench", + "texture_size": [64, 64], + "textures": { + "2": "createrailwaysnavigator:block/advanced_display_back", + "3": "createrailwaysnavigator:block/advanced_display_small", + "particle": "createrailwaysnavigator:block/advanced_display" + }, + "elements": [ + { + "from": [0, 4, 13], + "to": [16, 12, 16], + "faces": { + "north": {"uv": [0, 0, 16, 8], "texture": "#3"}, + "east": {"uv": [13, 8, 14.5, 12], "texture": "#2", "cullface": "east"}, + "south": {"uv": [0, 8, 8, 12], "texture": "#2", "cullface": "south"}, + "west": {"uv": [14.5, 8, 13, 12], "texture": "#2", "cullface": "west"}, + "up": {"uv": [13, 0, 14.5, 8], "rotation": 90, "texture": "#2"}, + "down": {"uv": [13, 0, 14.5, 8], "rotation": 90, "texture": "#2", "cullface": "down"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "thirdperson_lefthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson_righthand": { + "rotation": [0, 45, 0], + "translation": [-1.5, 0, 0], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_lefthand": { + "rotation": [0, 45, 0], + "translation": [-1.5, 0, 0], + "scale": [0.4, 0.4, 0.4] + }, + "ground": { + "translation": [0, 3, -1], + "scale": [0.25, 0.25, 0.25] + }, + "gui": { + "rotation": [30, 225, 0], + "translation": [1.75, 1, 0], + "scale": [0.625, 0.625, 0.625] + }, + "head": { + "translation": [0, 0, -8] + }, + "fixed": { + "translation": [0, 0, -0.75], + "scale": [0.5, 0.5, 0.5] + } + } +} \ No newline at end of file diff --git a/common/src/main/resources/assets/createrailwaysnavigator/models/block/advanced_display_half_panel_double_cen_cen.json b/common/src/main/resources/assets/createrailwaysnavigator/models/block/advanced_display_half_panel_double_cen_cen.json new file mode 100644 index 00000000..29a07ba8 --- /dev/null +++ b/common/src/main/resources/assets/createrailwaysnavigator/models/block/advanced_display_half_panel_double_cen_cen.json @@ -0,0 +1,61 @@ +{ + "credit": "Made with Blockbench", + "texture_size": [64, 64], + "textures": { + "2": "createrailwaysnavigator:block/advanced_display_back", + "3": "createrailwaysnavigator:block/advanced_display_small", + "particle": "createrailwaysnavigator:block/advanced_display" + }, + "elements": [ + { + "from": [0, 4, 6.5], + "to": [16, 12, 9.5], + "faces": { + "north": {"uv": [0, 0, 16, 8], "texture": "#3"}, + "east": {"uv": [13, 8, 14.5, 12], "texture": "#2", "cullface": "east"}, + "south": {"uv": [0, 0, 16, 8], "texture": "#3", "cullface": "south"}, + "west": {"uv": [14.5, 8, 13, 12], "texture": "#2", "cullface": "west"}, + "up": {"uv": [13, 0, 14.5, 8], "rotation": 90, "texture": "#2"}, + "down": {"uv": [13, 0, 14.5, 8], "rotation": 90, "texture": "#2", "cullface": "down"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "thirdperson_lefthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson_righthand": { + "rotation": [0, 45, 0], + "translation": [-1.5, 0, 0], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_lefthand": { + "rotation": [0, 45, 0], + "translation": [-1.5, 0, 0], + "scale": [0.4, 0.4, 0.4] + }, + "ground": { + "translation": [0, 3, -1], + "scale": [0.25, 0.25, 0.25] + }, + "gui": { + "rotation": [30, 225, 0], + "translation": [1.75, 1, 0], + "scale": [0.625, 0.625, 0.625] + }, + "head": { + "translation": [0, 0, -8] + }, + "fixed": { + "translation": [0, 0, -0.75], + "scale": [0.5, 0.5, 0.5] + } + } +} \ No newline at end of file diff --git a/common/src/main/resources/assets/createrailwaysnavigator/models/block/advanced_display_half_panel_double_cen_neg.json b/common/src/main/resources/assets/createrailwaysnavigator/models/block/advanced_display_half_panel_double_cen_neg.json new file mode 100644 index 00000000..b3b784d7 --- /dev/null +++ b/common/src/main/resources/assets/createrailwaysnavigator/models/block/advanced_display_half_panel_double_cen_neg.json @@ -0,0 +1,61 @@ +{ + "credit": "Made with Blockbench", + "texture_size": [64, 64], + "textures": { + "2": "createrailwaysnavigator:block/advanced_display_back", + "3": "createrailwaysnavigator:block/advanced_display_small", + "particle": "createrailwaysnavigator:block/advanced_display" + }, + "elements": [ + { + "from": [0, 4, 0], + "to": [16, 12, 3], + "faces": { + "north": {"uv": [0, 0, 16, 8], "texture": "#3"}, + "east": {"uv": [13, 8, 14.5, 12], "texture": "#2", "cullface": "east"}, + "south": {"uv": [0, 0, 16, 8], "texture": "#3", "cullface": "south"}, + "west": {"uv": [14.5, 8, 13, 12], "texture": "#2", "cullface": "west"}, + "up": {"uv": [13, 0, 14.5, 8], "rotation": 90, "texture": "#2"}, + "down": {"uv": [13, 0, 14.5, 8], "rotation": 90, "texture": "#2", "cullface": "down"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "thirdperson_lefthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson_righthand": { + "rotation": [0, 45, 0], + "translation": [-1.5, 0, 0], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_lefthand": { + "rotation": [0, 45, 0], + "translation": [-1.5, 0, 0], + "scale": [0.4, 0.4, 0.4] + }, + "ground": { + "translation": [0, 3, -1], + "scale": [0.25, 0.25, 0.25] + }, + "gui": { + "rotation": [30, 225, 0], + "translation": [1.75, 1, 0], + "scale": [0.625, 0.625, 0.625] + }, + "head": { + "translation": [0, 0, -8] + }, + "fixed": { + "translation": [0, 0, -0.75], + "scale": [0.5, 0.5, 0.5] + } + } +} \ No newline at end of file diff --git a/common/src/main/resources/assets/createrailwaysnavigator/models/block/advanced_display_half_panel_double_cen_pos.json b/common/src/main/resources/assets/createrailwaysnavigator/models/block/advanced_display_half_panel_double_cen_pos.json new file mode 100644 index 00000000..047f02c3 --- /dev/null +++ b/common/src/main/resources/assets/createrailwaysnavigator/models/block/advanced_display_half_panel_double_cen_pos.json @@ -0,0 +1,61 @@ +{ + "credit": "Made with Blockbench", + "texture_size": [64, 64], + "textures": { + "2": "createrailwaysnavigator:block/advanced_display_back", + "3": "createrailwaysnavigator:block/advanced_display_small", + "particle": "createrailwaysnavigator:block/advanced_display" + }, + "elements": [ + { + "from": [0, 4, 13], + "to": [16, 12, 16], + "faces": { + "north": {"uv": [0, 0, 16, 8], "texture": "#3"}, + "east": {"uv": [13, 8, 14.5, 12], "texture": "#2", "cullface": "east"}, + "south": {"uv": [0, 0, 16, 8], "texture": "#3", "cullface": "south"}, + "west": {"uv": [14.5, 8, 13, 12], "texture": "#2", "cullface": "west"}, + "up": {"uv": [13, 0, 14.5, 8], "rotation": 90, "texture": "#2"}, + "down": {"uv": [13, 0, 14.5, 8], "rotation": 90, "texture": "#2", "cullface": "down"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "thirdperson_lefthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson_righthand": { + "rotation": [0, 45, 0], + "translation": [-1.5, 0, 0], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_lefthand": { + "rotation": [0, 45, 0], + "translation": [-1.5, 0, 0], + "scale": [0.4, 0.4, 0.4] + }, + "ground": { + "translation": [0, 3, -1], + "scale": [0.25, 0.25, 0.25] + }, + "gui": { + "rotation": [30, 225, 0], + "translation": [1.75, 1, 0], + "scale": [0.625, 0.625, 0.625] + }, + "head": { + "translation": [0, 0, -8] + }, + "fixed": { + "translation": [0, 0, -0.75], + "scale": [0.5, 0.5, 0.5] + } + } +} \ No newline at end of file diff --git a/common/src/main/resources/assets/createrailwaysnavigator/models/block/advanced_display_half_panel_double_neg_cen.json b/common/src/main/resources/assets/createrailwaysnavigator/models/block/advanced_display_half_panel_double_neg_cen.json new file mode 100644 index 00000000..067a2ca3 --- /dev/null +++ b/common/src/main/resources/assets/createrailwaysnavigator/models/block/advanced_display_half_panel_double_neg_cen.json @@ -0,0 +1,61 @@ +{ + "credit": "Made with Blockbench", + "texture_size": [64, 64], + "textures": { + "2": "createrailwaysnavigator:block/advanced_display_back", + "3": "createrailwaysnavigator:block/advanced_display_small", + "particle": "createrailwaysnavigator:block/advanced_display" + }, + "elements": [ + { + "from": [0, 0, 6.5], + "to": [16, 8, 9.5], + "faces": { + "north": {"uv": [0, 0, 16, 8], "texture": "#3"}, + "east": {"uv": [13, 8, 14.5, 12], "texture": "#2", "cullface": "east"}, + "south": {"uv": [0, 0, 16, 8], "texture": "#3", "cullface": "south"}, + "west": {"uv": [14.5, 8, 13, 12], "texture": "#2", "cullface": "west"}, + "up": {"uv": [13, 0, 14.5, 8], "rotation": 90, "texture": "#2"}, + "down": {"uv": [13, 0, 14.5, 8], "rotation": 90, "texture": "#2", "cullface": "down"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "thirdperson_lefthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson_righthand": { + "rotation": [0, 45, 0], + "translation": [-1.5, 0, 0], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_lefthand": { + "rotation": [0, 45, 0], + "translation": [-1.5, 0, 0], + "scale": [0.4, 0.4, 0.4] + }, + "ground": { + "translation": [0, 3, -1], + "scale": [0.25, 0.25, 0.25] + }, + "gui": { + "rotation": [30, 225, 0], + "translation": [1.75, 1, 0], + "scale": [0.625, 0.625, 0.625] + }, + "head": { + "translation": [0, 0, -8] + }, + "fixed": { + "translation": [0, 0, -0.75], + "scale": [0.5, 0.5, 0.5] + } + } +} \ No newline at end of file diff --git a/common/src/main/resources/assets/createrailwaysnavigator/models/block/advanced_display_half_panel_double_neg_neg.json b/common/src/main/resources/assets/createrailwaysnavigator/models/block/advanced_display_half_panel_double_neg_neg.json new file mode 100644 index 00000000..7f1fba1a --- /dev/null +++ b/common/src/main/resources/assets/createrailwaysnavigator/models/block/advanced_display_half_panel_double_neg_neg.json @@ -0,0 +1,61 @@ +{ + "credit": "Made with Blockbench", + "texture_size": [64, 64], + "textures": { + "2": "createrailwaysnavigator:block/advanced_display_back", + "3": "createrailwaysnavigator:block/advanced_display_small", + "particle": "createrailwaysnavigator:block/advanced_display" + }, + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 8, 3], + "faces": { + "north": {"uv": [0, 0, 16, 8], "texture": "#3"}, + "east": {"uv": [13, 8, 14.5, 12], "texture": "#2", "cullface": "east"}, + "south": {"uv": [0, 0, 16, 8], "texture": "#3", "cullface": "south"}, + "west": {"uv": [14.5, 8, 13, 12], "texture": "#2", "cullface": "west"}, + "up": {"uv": [13, 0, 14.5, 8], "rotation": 90, "texture": "#2"}, + "down": {"uv": [13, 0, 14.5, 8], "rotation": 90, "texture": "#2", "cullface": "down"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "thirdperson_lefthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson_righthand": { + "rotation": [0, 45, 0], + "translation": [-1.5, 0, 0], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_lefthand": { + "rotation": [0, 45, 0], + "translation": [-1.5, 0, 0], + "scale": [0.4, 0.4, 0.4] + }, + "ground": { + "translation": [0, 3, -1], + "scale": [0.25, 0.25, 0.25] + }, + "gui": { + "rotation": [30, 225, 0], + "translation": [1.75, 1, 0], + "scale": [0.625, 0.625, 0.625] + }, + "head": { + "translation": [0, 0, -8] + }, + "fixed": { + "translation": [0, 0, -0.75], + "scale": [0.5, 0.5, 0.5] + } + } +} \ No newline at end of file diff --git a/common/src/main/resources/assets/createrailwaysnavigator/models/block/advanced_display_half_panel_double_neg_pos.json b/common/src/main/resources/assets/createrailwaysnavigator/models/block/advanced_display_half_panel_double_neg_pos.json new file mode 100644 index 00000000..0fd706c7 --- /dev/null +++ b/common/src/main/resources/assets/createrailwaysnavigator/models/block/advanced_display_half_panel_double_neg_pos.json @@ -0,0 +1,61 @@ +{ + "credit": "Made with Blockbench", + "texture_size": [64, 64], + "textures": { + "2": "createrailwaysnavigator:block/advanced_display_back", + "3": "createrailwaysnavigator:block/advanced_display_small", + "particle": "createrailwaysnavigator:block/advanced_display" + }, + "elements": [ + { + "from": [0, 0, 13], + "to": [16, 8, 16], + "faces": { + "north": {"uv": [0, 0, 16, 8], "texture": "#3"}, + "east": {"uv": [13, 8, 14.5, 12], "texture": "#2", "cullface": "east"}, + "south": {"uv": [0, 0, 16, 8], "texture": "#3", "cullface": "south"}, + "west": {"uv": [14.5, 8, 13, 12], "texture": "#2", "cullface": "west"}, + "up": {"uv": [13, 0, 14.5, 8], "rotation": 90, "texture": "#2"}, + "down": {"uv": [13, 0, 14.5, 8], "rotation": 90, "texture": "#2", "cullface": "down"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "thirdperson_lefthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson_righthand": { + "rotation": [0, 45, 0], + "translation": [-1.5, 0, 0], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_lefthand": { + "rotation": [0, 45, 0], + "translation": [-1.5, 0, 0], + "scale": [0.4, 0.4, 0.4] + }, + "ground": { + "translation": [0, 3, -1], + "scale": [0.25, 0.25, 0.25] + }, + "gui": { + "rotation": [30, 225, 0], + "translation": [1.75, 1, 0], + "scale": [0.625, 0.625, 0.625] + }, + "head": { + "translation": [0, 0, -8] + }, + "fixed": { + "translation": [0, 0, -0.75], + "scale": [0.5, 0.5, 0.5] + } + } +} \ No newline at end of file diff --git a/common/src/main/resources/assets/createrailwaysnavigator/models/block/advanced_display_half_panel_double_pos_cen.json b/common/src/main/resources/assets/createrailwaysnavigator/models/block/advanced_display_half_panel_double_pos_cen.json new file mode 100644 index 00000000..55b4de20 --- /dev/null +++ b/common/src/main/resources/assets/createrailwaysnavigator/models/block/advanced_display_half_panel_double_pos_cen.json @@ -0,0 +1,61 @@ +{ + "credit": "Made with Blockbench", + "texture_size": [64, 64], + "textures": { + "2": "createrailwaysnavigator:block/advanced_display_back", + "3": "createrailwaysnavigator:block/advanced_display_small", + "particle": "createrailwaysnavigator:block/advanced_display" + }, + "elements": [ + { + "from": [0, 8, 6.5], + "to": [16, 16, 9.5], + "faces": { + "north": {"uv": [0, 0, 16, 8], "texture": "#3"}, + "east": {"uv": [13, 8, 14.5, 12], "texture": "#2", "cullface": "east"}, + "south": {"uv": [0, 0, 16, 8], "texture": "#3", "cullface": "south"}, + "west": {"uv": [14.5, 8, 13, 12], "texture": "#2", "cullface": "west"}, + "up": {"uv": [13, 0, 14.5, 8], "rotation": 90, "texture": "#2"}, + "down": {"uv": [13, 0, 14.5, 8], "rotation": 90, "texture": "#2", "cullface": "down"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "thirdperson_lefthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson_righthand": { + "rotation": [0, 45, 0], + "translation": [-1.5, 0, 0], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_lefthand": { + "rotation": [0, 45, 0], + "translation": [-1.5, 0, 0], + "scale": [0.4, 0.4, 0.4] + }, + "ground": { + "translation": [0, 3, -1], + "scale": [0.25, 0.25, 0.25] + }, + "gui": { + "rotation": [30, 225, 0], + "translation": [1.75, 1, 0], + "scale": [0.625, 0.625, 0.625] + }, + "head": { + "translation": [0, 0, -8] + }, + "fixed": { + "translation": [0, 0, -0.75], + "scale": [0.5, 0.5, 0.5] + } + } +} \ No newline at end of file diff --git a/common/src/main/resources/assets/createrailwaysnavigator/models/block/advanced_display_half_panel_double_pos_neg.json b/common/src/main/resources/assets/createrailwaysnavigator/models/block/advanced_display_half_panel_double_pos_neg.json new file mode 100644 index 00000000..705a87a2 --- /dev/null +++ b/common/src/main/resources/assets/createrailwaysnavigator/models/block/advanced_display_half_panel_double_pos_neg.json @@ -0,0 +1,61 @@ +{ + "credit": "Made with Blockbench", + "texture_size": [64, 64], + "textures": { + "2": "createrailwaysnavigator:block/advanced_display_back", + "3": "createrailwaysnavigator:block/advanced_display_small", + "particle": "createrailwaysnavigator:block/advanced_display" + }, + "elements": [ + { + "from": [0, 8, 0], + "to": [16, 16, 3], + "faces": { + "north": {"uv": [0, 0, 16, 8], "texture": "#3"}, + "east": {"uv": [13, 8, 14.5, 12], "texture": "#2", "cullface": "east"}, + "south": {"uv": [0, 0, 16, 8], "texture": "#3", "cullface": "south"}, + "west": {"uv": [14.5, 8, 13, 12], "texture": "#2", "cullface": "west"}, + "up": {"uv": [13, 0, 14.5, 8], "rotation": 90, "texture": "#2"}, + "down": {"uv": [13, 0, 14.5, 8], "rotation": 90, "texture": "#2", "cullface": "down"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "thirdperson_lefthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson_righthand": { + "rotation": [0, 45, 0], + "translation": [-1.5, 0, 0], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_lefthand": { + "rotation": [0, 45, 0], + "translation": [-1.5, 0, 0], + "scale": [0.4, 0.4, 0.4] + }, + "ground": { + "translation": [0, 3, -1], + "scale": [0.25, 0.25, 0.25] + }, + "gui": { + "rotation": [30, 225, 0], + "translation": [1.75, 1, 0], + "scale": [0.625, 0.625, 0.625] + }, + "head": { + "translation": [0, 0, -8] + }, + "fixed": { + "translation": [0, 0, -0.75], + "scale": [0.5, 0.5, 0.5] + } + } +} \ No newline at end of file diff --git a/common/src/main/resources/assets/createrailwaysnavigator/models/block/advanced_display_half_panel_double_pos_pos.json b/common/src/main/resources/assets/createrailwaysnavigator/models/block/advanced_display_half_panel_double_pos_pos.json new file mode 100644 index 00000000..665b098c --- /dev/null +++ b/common/src/main/resources/assets/createrailwaysnavigator/models/block/advanced_display_half_panel_double_pos_pos.json @@ -0,0 +1,61 @@ +{ + "credit": "Made with Blockbench", + "texture_size": [64, 64], + "textures": { + "2": "createrailwaysnavigator:block/advanced_display_back", + "3": "createrailwaysnavigator:block/advanced_display_small", + "particle": "createrailwaysnavigator:block/advanced_display" + }, + "elements": [ + { + "from": [0, 8, 13], + "to": [16, 16, 16], + "faces": { + "north": {"uv": [0, 0, 16, 8], "texture": "#3"}, + "east": {"uv": [13, 8, 14.5, 12], "texture": "#2", "cullface": "east"}, + "south": {"uv": [0, 0, 16, 8], "texture": "#3", "cullface": "south"}, + "west": {"uv": [14.5, 8, 13, 12], "texture": "#2", "cullface": "west"}, + "up": {"uv": [13, 0, 14.5, 8], "rotation": 90, "texture": "#2"}, + "down": {"uv": [13, 0, 14.5, 8], "rotation": 90, "texture": "#2", "cullface": "down"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "thirdperson_lefthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson_righthand": { + "rotation": [0, 45, 0], + "translation": [-1.5, 0, 0], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_lefthand": { + "rotation": [0, 45, 0], + "translation": [-1.5, 0, 0], + "scale": [0.4, 0.4, 0.4] + }, + "ground": { + "translation": [0, 3, -1], + "scale": [0.25, 0.25, 0.25] + }, + "gui": { + "rotation": [30, 225, 0], + "translation": [1.75, 1, 0], + "scale": [0.625, 0.625, 0.625] + }, + "head": { + "translation": [0, 0, -8] + }, + "fixed": { + "translation": [0, 0, -0.75], + "scale": [0.5, 0.5, 0.5] + } + } +} \ No newline at end of file diff --git a/common/src/main/resources/assets/createrailwaysnavigator/models/block/advanced_display_half_panel_neg_cen.json b/common/src/main/resources/assets/createrailwaysnavigator/models/block/advanced_display_half_panel_neg_cen.json new file mode 100644 index 00000000..cd5d0169 --- /dev/null +++ b/common/src/main/resources/assets/createrailwaysnavigator/models/block/advanced_display_half_panel_neg_cen.json @@ -0,0 +1,61 @@ +{ + "credit": "Made with Blockbench", + "texture_size": [64, 64], + "textures": { + "2": "createrailwaysnavigator:block/advanced_display_back", + "3": "createrailwaysnavigator:block/advanced_display_small", + "particle": "createrailwaysnavigator:block/advanced_display" + }, + "elements": [ + { + "from": [0, 0, 6.5], + "to": [16, 8, 9.5], + "faces": { + "north": {"uv": [0, 0, 16, 8], "texture": "#3"}, + "east": {"uv": [13, 8, 14.5, 12], "texture": "#2", "cullface": "east"}, + "south": {"uv": [0, 8, 8, 12], "texture": "#2", "cullface": "south"}, + "west": {"uv": [14.5, 8, 13, 12], "texture": "#2", "cullface": "west"}, + "up": {"uv": [13, 0, 14.5, 8], "rotation": 90, "texture": "#2"}, + "down": {"uv": [13, 0, 14.5, 8], "rotation": 90, "texture": "#2", "cullface": "down"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "thirdperson_lefthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson_righthand": { + "rotation": [0, 45, 0], + "translation": [-1.5, 0, 0], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_lefthand": { + "rotation": [0, 45, 0], + "translation": [-1.5, 0, 0], + "scale": [0.4, 0.4, 0.4] + }, + "ground": { + "translation": [0, 3, -1], + "scale": [0.25, 0.25, 0.25] + }, + "gui": { + "rotation": [30, 225, 0], + "translation": [1.75, 1, 0], + "scale": [0.625, 0.625, 0.625] + }, + "head": { + "translation": [0, 0, -8] + }, + "fixed": { + "translation": [0, 0, -0.75], + "scale": [0.5, 0.5, 0.5] + } + } +} \ No newline at end of file diff --git a/common/src/main/resources/assets/createrailwaysnavigator/models/block/advanced_display_half_panel_neg_neg.json b/common/src/main/resources/assets/createrailwaysnavigator/models/block/advanced_display_half_panel_neg_neg.json new file mode 100644 index 00000000..949021b4 --- /dev/null +++ b/common/src/main/resources/assets/createrailwaysnavigator/models/block/advanced_display_half_panel_neg_neg.json @@ -0,0 +1,61 @@ +{ + "credit": "Made with Blockbench", + "texture_size": [64, 64], + "textures": { + "2": "createrailwaysnavigator:block/advanced_display_back", + "3": "createrailwaysnavigator:block/advanced_display_small", + "particle": "createrailwaysnavigator:block/advanced_display" + }, + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 8, 3], + "faces": { + "north": {"uv": [0, 0, 16, 8], "texture": "#3"}, + "east": {"uv": [13, 8, 14.5, 12], "texture": "#2", "cullface": "east"}, + "south": {"uv": [0, 8, 8, 12], "texture": "#2", "cullface": "south"}, + "west": {"uv": [14.5, 8, 13, 12], "texture": "#2", "cullface": "west"}, + "up": {"uv": [13, 0, 14.5, 8], "rotation": 90, "texture": "#2"}, + "down": {"uv": [13, 0, 14.5, 8], "rotation": 90, "texture": "#2", "cullface": "down"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "thirdperson_lefthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson_righthand": { + "rotation": [0, 45, 0], + "translation": [-1.5, 0, 0], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_lefthand": { + "rotation": [0, 45, 0], + "translation": [-1.5, 0, 0], + "scale": [0.4, 0.4, 0.4] + }, + "ground": { + "translation": [0, 3, -1], + "scale": [0.25, 0.25, 0.25] + }, + "gui": { + "rotation": [30, 225, 0], + "translation": [1.75, 1, 0], + "scale": [0.625, 0.625, 0.625] + }, + "head": { + "translation": [0, 0, -8] + }, + "fixed": { + "translation": [0, 0, -0.75], + "scale": [0.5, 0.5, 0.5] + } + } +} \ No newline at end of file diff --git a/common/src/main/resources/assets/createrailwaysnavigator/models/block/advanced_display_half_panel_neg_pos.json b/common/src/main/resources/assets/createrailwaysnavigator/models/block/advanced_display_half_panel_neg_pos.json new file mode 100644 index 00000000..bdfe2032 --- /dev/null +++ b/common/src/main/resources/assets/createrailwaysnavigator/models/block/advanced_display_half_panel_neg_pos.json @@ -0,0 +1,61 @@ +{ + "credit": "Made with Blockbench", + "texture_size": [64, 64], + "textures": { + "2": "createrailwaysnavigator:block/advanced_display_back", + "3": "createrailwaysnavigator:block/advanced_display_small", + "particle": "createrailwaysnavigator:block/advanced_display" + }, + "elements": [ + { + "from": [0, 0, 13], + "to": [16, 8, 16], + "faces": { + "north": {"uv": [0, 0, 16, 8], "texture": "#3"}, + "east": {"uv": [13, 8, 14.5, 12], "texture": "#2", "cullface": "east"}, + "south": {"uv": [0, 8, 8, 12], "texture": "#2", "cullface": "south"}, + "west": {"uv": [14.5, 8, 13, 12], "texture": "#2", "cullface": "west"}, + "up": {"uv": [13, 0, 14.5, 8], "rotation": 90, "texture": "#2"}, + "down": {"uv": [13, 0, 14.5, 8], "rotation": 90, "texture": "#2", "cullface": "down"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "thirdperson_lefthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson_righthand": { + "rotation": [0, 45, 0], + "translation": [-1.5, 0, 0], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_lefthand": { + "rotation": [0, 45, 0], + "translation": [-1.5, 0, 0], + "scale": [0.4, 0.4, 0.4] + }, + "ground": { + "translation": [0, 3, -1], + "scale": [0.25, 0.25, 0.25] + }, + "gui": { + "rotation": [30, 225, 0], + "translation": [1.75, 1, 0], + "scale": [0.625, 0.625, 0.625] + }, + "head": { + "translation": [0, 0, -8] + }, + "fixed": { + "translation": [0, 0, -0.75], + "scale": [0.5, 0.5, 0.5] + } + } +} \ No newline at end of file diff --git a/common/src/main/resources/assets/createrailwaysnavigator/models/block/advanced_display_half_panel_pos_cen.json b/common/src/main/resources/assets/createrailwaysnavigator/models/block/advanced_display_half_panel_pos_cen.json new file mode 100644 index 00000000..903787e0 --- /dev/null +++ b/common/src/main/resources/assets/createrailwaysnavigator/models/block/advanced_display_half_panel_pos_cen.json @@ -0,0 +1,61 @@ +{ + "credit": "Made with Blockbench", + "texture_size": [64, 64], + "textures": { + "2": "createrailwaysnavigator:block/advanced_display_back", + "3": "createrailwaysnavigator:block/advanced_display_small", + "particle": "createrailwaysnavigator:block/advanced_display" + }, + "elements": [ + { + "from": [0, 8, 6.5], + "to": [16, 16, 9.5], + "faces": { + "north": {"uv": [0, 0, 16, 8], "texture": "#3"}, + "east": {"uv": [13, 8, 14.5, 12], "texture": "#2", "cullface": "east"}, + "south": {"uv": [0, 8, 8, 12], "texture": "#2", "cullface": "south"}, + "west": {"uv": [14.5, 8, 13, 12], "texture": "#2", "cullface": "west"}, + "up": {"uv": [13, 0, 14.5, 8], "rotation": 90, "texture": "#2"}, + "down": {"uv": [13, 0, 14.5, 8], "rotation": 90, "texture": "#2", "cullface": "down"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "thirdperson_lefthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson_righthand": { + "rotation": [0, 45, 0], + "translation": [-1.5, 0, 0], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_lefthand": { + "rotation": [0, 45, 0], + "translation": [-1.5, 0, 0], + "scale": [0.4, 0.4, 0.4] + }, + "ground": { + "translation": [0, 3, -1], + "scale": [0.25, 0.25, 0.25] + }, + "gui": { + "rotation": [30, 225, 0], + "translation": [1.75, 1, 0], + "scale": [0.625, 0.625, 0.625] + }, + "head": { + "translation": [0, 0, -8] + }, + "fixed": { + "translation": [0, 0, -0.75], + "scale": [0.5, 0.5, 0.5] + } + } +} \ No newline at end of file diff --git a/common/src/main/resources/assets/createrailwaysnavigator/models/block/advanced_display_half_panel_pos_neg.json b/common/src/main/resources/assets/createrailwaysnavigator/models/block/advanced_display_half_panel_pos_neg.json new file mode 100644 index 00000000..74561ab5 --- /dev/null +++ b/common/src/main/resources/assets/createrailwaysnavigator/models/block/advanced_display_half_panel_pos_neg.json @@ -0,0 +1,61 @@ +{ + "credit": "Made with Blockbench", + "texture_size": [64, 64], + "textures": { + "2": "createrailwaysnavigator:block/advanced_display_back", + "3": "createrailwaysnavigator:block/advanced_display_small", + "particle": "createrailwaysnavigator:block/advanced_display" + }, + "elements": [ + { + "from": [0, 8, 0], + "to": [16, 16, 3], + "faces": { + "north": {"uv": [0, 0, 16, 8], "texture": "#3"}, + "east": {"uv": [13, 8, 14.5, 12], "texture": "#2", "cullface": "east"}, + "south": {"uv": [0, 8, 8, 12], "texture": "#2", "cullface": "south"}, + "west": {"uv": [14.5, 8, 13, 12], "texture": "#2", "cullface": "west"}, + "up": {"uv": [13, 0, 14.5, 8], "rotation": 90, "texture": "#2"}, + "down": {"uv": [13, 0, 14.5, 8], "rotation": 90, "texture": "#2", "cullface": "down"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "thirdperson_lefthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson_righthand": { + "rotation": [0, 45, 0], + "translation": [-1.5, 0, 0], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_lefthand": { + "rotation": [0, 45, 0], + "translation": [-1.5, 0, 0], + "scale": [0.4, 0.4, 0.4] + }, + "ground": { + "translation": [0, 3, -1], + "scale": [0.25, 0.25, 0.25] + }, + "gui": { + "rotation": [30, 225, 0], + "translation": [1.75, 1, 0], + "scale": [0.625, 0.625, 0.625] + }, + "head": { + "translation": [0, 0, -8] + }, + "fixed": { + "translation": [0, 0, -0.75], + "scale": [0.5, 0.5, 0.5] + } + } +} \ No newline at end of file diff --git a/common/src/main/resources/assets/createrailwaysnavigator/models/block/advanced_display_half_panel_pos_pos.json b/common/src/main/resources/assets/createrailwaysnavigator/models/block/advanced_display_half_panel_pos_pos.json new file mode 100644 index 00000000..ffbb04ce --- /dev/null +++ b/common/src/main/resources/assets/createrailwaysnavigator/models/block/advanced_display_half_panel_pos_pos.json @@ -0,0 +1,61 @@ +{ + "credit": "Made with Blockbench", + "texture_size": [64, 64], + "textures": { + "2": "createrailwaysnavigator:block/advanced_display_back", + "3": "createrailwaysnavigator:block/advanced_display_small", + "particle": "createrailwaysnavigator:block/advanced_display" + }, + "elements": [ + { + "from": [0, 8, 13], + "to": [16, 16, 16], + "faces": { + "north": {"uv": [0, 0, 16, 8], "texture": "#3"}, + "east": {"uv": [13, 8, 14.5, 12], "texture": "#2", "cullface": "east"}, + "south": {"uv": [0, 8, 8, 12], "texture": "#2", "cullface": "south"}, + "west": {"uv": [14.5, 8, 13, 12], "texture": "#2", "cullface": "west"}, + "up": {"uv": [13, 0, 14.5, 8], "rotation": 90, "texture": "#2"}, + "down": {"uv": [13, 0, 14.5, 8], "rotation": 90, "texture": "#2", "cullface": "down"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "thirdperson_lefthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson_righthand": { + "rotation": [0, 45, 0], + "translation": [-1.5, 0, 0], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_lefthand": { + "rotation": [0, 45, 0], + "translation": [-1.5, 0, 0], + "scale": [0.4, 0.4, 0.4] + }, + "ground": { + "translation": [0, 3, -1], + "scale": [0.25, 0.25, 0.25] + }, + "gui": { + "rotation": [30, 225, 0], + "translation": [1.75, 1, 0], + "scale": [0.625, 0.625, 0.625] + }, + "head": { + "translation": [0, 0, -8] + }, + "fixed": { + "translation": [0, 0, -0.75], + "scale": [0.5, 0.5, 0.5] + } + } +} \ No newline at end of file diff --git a/common/src/main/resources/assets/createrailwaysnavigator/models/item/advanced_display_half_panel.json b/common/src/main/resources/assets/createrailwaysnavigator/models/item/advanced_display_half_panel.json new file mode 100644 index 00000000..7ac35311 --- /dev/null +++ b/common/src/main/resources/assets/createrailwaysnavigator/models/item/advanced_display_half_panel.json @@ -0,0 +1,3 @@ +{ + "parent": "createrailwaysnavigator:block/advanced_display_half_panel_cen_cen" +} \ No newline at end of file diff --git a/common/src/main/resources/assets/createrailwaysnavigator/textures/block/advanced_display_back.png b/common/src/main/resources/assets/createrailwaysnavigator/textures/block/advanced_display_back.png index 07681a5d6eab52988fc1de9732710b0fe6092d4a..7cce07363dc8876c8e258d749f693741314901d9 100644 GIT binary patch delta 1303 zcmaE$eoSbBWIZzj1B1(wu44=gjE$Mj&HWI);6n1Mx$5IzV4lW_(3ek6YdWyT-?y^XG9}L^@A!84hbat+84y)q_hK<`c z1Z@$F{C|^0sD*=%=kv$3d&$puS@?>VJ-yc7kSac>LTA<4v-SEJ3&opSI1OEv=k5Br za^^=C)8o%&OSAUA4UYVizeOc@9cSsR4;?ehxelE^t_awnoq2PT{0!~FppUzfw8KqKe-F{m z@w>U%*lYSt#~#jQGu#f>FF3(v$@S%AR`(;J>3=hL>vzAOFE(9qov2S?&&ICScfSMc zKkSY+x4jVWmDT5Tc=PkU<<1$>`?lM>e|_TfzJA3YEYr)5?yurFEWao}bjv#CjJpk= zS9hhoIdD{Mi|w;g_wP#=oN=(?&0qe>_p`vh#$`u?@}JiFy;D?-^^H4x&+bb`ic0m$ zW4onSSO5Opb6@_V{KNM}mv3B*dH{?TtpJ}8*MQ)_gyi^)oD2t7=UGeUZaKJP#pc!h z(G8yrOBUJm2@C#!%~ZiGxPI6>J1I_jLno3N;1>Zto(~IQ}ap^OTbcwN|U|V zWF}{_=}w->rjr74CkWV77%-NJ3D-oJ@t{64$a4 ztHfl8(Zz{nsVPcO!Q_m@y!6x*TP1y^$vW%~lLI-lCO2}3c^HHk8Ce;aSs9uuDdzev!iA(ITXS#6-RY6~c9i>V@wsg`3rptRJG-X(lgqtn43o}2ucz;N05@AZ-HUDVqubo;ACo3&sK# zPcF9g(F@Acr)zq}X=p2i@iEqJ@vHWjBKpIlDC)4^+n7B8c|vPsnAp|yr|9~)1qO4s zFMHS;^g!aRUiHW5dIyC-t{-YTm;Nt2ud(k!MAP1_<&UGBv*+uJ|MDm(mlFy7^Sm-( z&gX|V8cIKEZyN-suOojaVdc_%^`H$|Ea|%3v@dYr~ OFnGH9xvX2!Cnl^i4u2`Gx_I3gpk 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 NWoSgmp`hg4{{Vo Date: Sat, 18 May 2024 23:45:59 +0100 Subject: [PATCH 28/38] Fix positive double sided display z-offset --- .../de/mrjulsen/crn/block/AdvancedDisplayHalfPanelBlock.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/src/main/java/de/mrjulsen/crn/block/AdvancedDisplayHalfPanelBlock.java b/common/src/main/java/de/mrjulsen/crn/block/AdvancedDisplayHalfPanelBlock.java index c93c46b9..793c41b8 100644 --- a/common/src/main/java/de/mrjulsen/crn/block/AdvancedDisplayHalfPanelBlock.java +++ b/common/src/main/java/de/mrjulsen/crn/block/AdvancedDisplayHalfPanelBlock.java @@ -177,7 +177,7 @@ public Pair getRenderZOffset(Level level, BlockState blockState, B break; case POSITIVE: z1 = 3.05f; - z2 = 13.05f; + z2 = 16.05f; break; default: z1 = 9.55f; From 11627ac60df1d8214d1038d38f3caeec70544291 Mon Sep 17 00:00:00 2001 From: MrJulsen <82165334+MisterJulsen@users.noreply.github.com> Date: Wed, 22 May 2024 13:16:13 +0200 Subject: [PATCH 29/38] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 1245c648..1e10552b 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ # Create Railways Navigator (Minecraft Create Mod Addon) -![Logo](https://github.com/MisterJulsen/Create-Train-Navigator/blob/1.18.2-Multiloader/icon_256px.png) +![Logo](https://github.com/MisterJulsen/Create-Train-Navigator/blob/1.20.1/icon_256px.png) Get a list possible train connections in your world from one station to another using the Create Railways Navigator. From 048d80533af2e87506138d53d6339a98dde3682a Mon Sep 17 00:00:00 2001 From: 1437_Dreamurr <49484357+iaddda@users.noreply.github.com> Date: Wed, 22 May 2024 22:45:43 +0800 Subject: [PATCH 30/38] Update zh_cn.json --- .../createrailwaysnavigator/lang/zh_cn.json | 306 +++++++++--------- 1 file changed, 152 insertions(+), 154 deletions(-) diff --git a/common/src/main/resources/assets/createrailwaysnavigator/lang/zh_cn.json b/common/src/main/resources/assets/createrailwaysnavigator/lang/zh_cn.json index fa94bbae..06a2ab67 100644 --- a/common/src/main/resources/assets/createrailwaysnavigator/lang/zh_cn.json +++ b/common/src/main/resources/assets/createrailwaysnavigator/lang/zh_cn.json @@ -1,47 +1,47 @@ { "advancement.createrailwaysnavigator.navigator": "感谢您的乘坐", - "advancement.createrailwaysnavigator.navigator.description": "制造一个导航仪以搜寻路线.", + "advancement.createrailwaysnavigator.navigator.description": "制作一个导航仪,用于搜索从一个车站到另一个车站的列车路线。", "advancement.createrailwaysnavigator.advanced_display": "还不够清晰", - "advancement.createrailwaysnavigator.advanced_display.description": "升级你的信息牌以展示更多信息,你甚至可以把它放在火车上!", + "advancement.createrailwaysnavigator.advanced_display.description": "升级您的显示器以显示更多信息,甚至可以将它们放置在您的列车上。", "itemGroup.createrailwaysnavigator.tab": "机械动力:铁路导航", - "item.createrailwaysnavigator.navigator": "机械动力:铁路导航", - "item.createrailwaysnavigator.navigator.tooltip.summary": "_导航仪_ 显示 可能的 _火车线路_ 提供更多功能如 _经停站_, _实时信息_ 以及更多。", + "item.createrailwaysnavigator.navigator": "铁路导航仪", + "item.createrailwaysnavigator.navigator.tooltip.summary": "_导航仪_可以显示可能的_列车路线_,以及_经停站_、_实时信息_等。", "block.createrailwaysnavigator.train_station_clock": "车站时钟", - "block.createrailwaysnavigator.advanced_display_block": "高级展示方块", - "block.createrailwaysnavigator.advanced_display_block.tooltip.summary": "使用在 _火车上_, 可以展示 _列车终点站_ 或 _乘客信息_, 也可以放置在 _火车站_ 当作 _信息展示平台_, 拥有比普通展示牌更强大的功能。 ", - "block.createrailwaysnavigator.advanced_display_block.tooltip.condition1": "使用扳手右键时", - "block.createrailwaysnavigator.advanced_display_block.tooltip.behaviour1": "打开配置菜单", - "block.createrailwaysnavigator.advanced_display": "高级展示牌", - "block.createrailwaysnavigator.advanced_display.tooltip.summary": "使用在 _火车上_, 可以展示 _列车终点站_ 或 _乘客信息_, 也可以放置在 _火车站_ 当作 _信息展示平台_, 拥有比普通展示牌更强大的功能。", - "block.createrailwaysnavigator.advanced_display.tooltip.condition1": "使用扳手右键时", - "block.createrailwaysnavigator.advanced_display.tooltip.behaviour1": "打开配置菜单", - "block.createrailwaysnavigator.advanced_display_small": "小型高级展示牌", - "block.createrailwaysnavigator.advanced_display_small.tooltip.summary": "使用在 _火车上_, 可以展示 _列车终点站_ 或 _乘客信息_, 也可以放置在 _火车站_ 当作 _信息展示平台_, 拥有比普通展示牌更强大的功能。", - "block.createrailwaysnavigator.advanced_display_small.tooltip.condition1": "使用扳手右键时", - "block.createrailwaysnavigator.advanced_display_small.tooltip.behaviour1": "打开配置菜单", + "block.createrailwaysnavigator.advanced_display_block": "高级显示器方块", + "block.createrailwaysnavigator.advanced_display_block.tooltip.summary": "使用在_列车上_,可以展示_列车目的地_或_乘客信息_, 也可以放置在_车站_当作_站台显示器_, 比普通显示器显示更多信息。", + "block.createrailwaysnavigator.advanced_display_block.tooltip.condition1": "用扳手右击时", + "block.createrailwaysnavigator.advanced_display_block.tooltip.behaviour1": "打开菜单以_配置_显示器。", + "block.createrailwaysnavigator.advanced_display": "高级显示器", + "block.createrailwaysnavigator.advanced_display.tooltip.summary": "使用在_列车上_,可以展示_列车目的地_或_乘客信息_, 也可以放置在_车站_当作_站台显示器_, 比普通显示器显示更多信息。", + "block.createrailwaysnavigator.advanced_display.tooltip.condition1": "用扳手右击时", + "block.createrailwaysnavigator.advanced_display.tooltip.behaviour1": "打开菜单以_配置_显示器。", + "block.createrailwaysnavigator.advanced_display_small": "小型高级显示器", + "block.createrailwaysnavigator.advanced_display_small.tooltip.summary": "使用在_列车上_,可以展示_列车目的地_或_乘客信息_, 也可以放置在_车站_当作_站台显示器_, 比普通显示器显示更多信息。", + "block.createrailwaysnavigator.advanced_display_small.tooltip.condition1": "用扳手右击时", + "block.createrailwaysnavigator.advanced_display_small.tooltip.behaviour1": "打开菜单以_配置_显示器。", "block.createrailwaysnavigator.advanced_display_panel": "高级显示面板", - "block.createrailwaysnavigator.advanced_display_panel.tooltip.summary": "使用在 _火车上_, 可以展示 _列车终点站_ 或 _乘客信息_, 也可以放置在 _火车站_ 当作 _信息展示平台_, 拥有比普通展示牌更强大的功能。", - "block.createrailwaysnavigator.advanced_display_panel.tooltip.condition1": "使用扳手右键时", - "block.createrailwaysnavigator.advanced_display_panel.tooltip.behaviour1": "打开配置菜单", - "block.createrailwaysnavigator.advanced_display_half_panel": "先进的半显示面板", - "block.createrailwaysnavigator.advanced_display_half_panel.tooltip.summary": "使用在 _火车上_, 可以展示 _列车终点站_ 或 _乘客信息_, 也可以放置在 _火车站_ 当作 _信息展示平台_, 拥有比普通展示牌更强大的功能。", - "block.createrailwaysnavigator.advanced_display_half_panel.tooltip.condition1": "使用扳手右键时", - "block.createrailwaysnavigator.advanced_display_half_panel.tooltip.behaviour1": "打开配置菜单", - "block.createrailwaysnavigator.advanced_display_sloped": "倾斜式高级显示器", - "block.createrailwaysnavigator.advanced_display_sloped.tooltip.summary": "使用在 _火车上_, 可以展示 _列车终点站_ 或 _乘客信息_, 也可以放置在 _火车站_ 当作 _信息展示平台_, 拥有比普通展示牌更强大的功能。", - "block.createrailwaysnavigator.advanced_display_sloped.tooltip.condition1": "使用扳手右键时", - "block.createrailwaysnavigator.advanced_display_sloped.tooltip.behaviour1": "打开配置菜单.", - - "block.createrailwaysnavigator.advanced_display.ber.not_in_service": "线路不可用", + "block.createrailwaysnavigator.advanced_display_panel.tooltip.summary": "使用在_列车上_,可以展示_列车目的地_或_乘客信息_, 也可以放置在_车站_当作_站台显示器_, 比普通显示器显示更多信息。", + "block.createrailwaysnavigator.advanced_display_panel.tooltip.condition1": "用扳手右击时", + "block.createrailwaysnavigator.advanced_display_panel.tooltip.behaviour1": "打开菜单以_配置_显示器。", + "block.createrailwaysnavigator.advanced_display_half_panel": "高级半显示面板", + "block.createrailwaysnavigator.advanced_display_half_panel.tooltip.summary": "使用在_列车上_,可以展示_列车目的地_或_乘客信息_, 也可以放置在_车站_当作_站台显示器_, 比普通显示器显示更多信息。", + "block.createrailwaysnavigator.advanced_display_half_panel.tooltip.condition1": "用扳手右击时", + "block.createrailwaysnavigator.advanced_display_half_panel.tooltip.behaviour1": "打开菜单以_配置_显示器。", + "block.createrailwaysnavigator.advanced_display_sloped": "斜面高级显示器", + "block.createrailwaysnavigator.advanced_display_sloped.tooltip.summary": "使用在_列车上_,可以展示_列车目的地_或_乘客信息_, 也可以放置在_车站_当作_站台显示器_, 比普通显示器显示更多信息。", + "block.createrailwaysnavigator.advanced_display_sloped.tooltip.condition1": "用扳手右击时", + "block.createrailwaysnavigator.advanced_display_sloped.tooltip.behaviour1": "打开菜单以_配置_显示器。", + + "block.createrailwaysnavigator.advanced_display.ber.not_in_service": "未启用", "block.createrailwaysnavigator.advanced_display.ber.shunting_trip": "调车行程", "category.createrailwaysnavigator.crn": "机械动力:铁路导航", "key.createrailwaysnavigator.route_overlay_options": "显示路线覆盖选项", - "enum.createrailwaysnavigator.overlay_position": "展示位置", + "enum.createrailwaysnavigator.overlay_position": "显示位置", "enum.createrailwaysnavigator.overlay_position.info.top_left": "左上角", "enum.createrailwaysnavigator.overlay_position.info.top_right": "右上角", "enum.createrailwaysnavigator.overlay_position.info.bottom_left": "左下角", @@ -50,22 +50,22 @@ "gui.createrailwaysnavigator.loading.title": "正在从服务器下载数据...", "gui.createrailwaysnavigator.overlay_settings.title": "路线覆盖设置", - "gui.createrailwaysnavigator.route_overlay_settings.show_details": "展示详细信息", + "gui.createrailwaysnavigator.route_overlay_settings.show_details": "显示详细信息", "gui.createrailwaysnavigator.route_overlay_settings.unpin": "移除路线覆盖", - "gui.createrailwaysnavigator.route_overlay_settings.narrator.on": "讲述人通知开启.", - "gui.createrailwaysnavigator.route_overlay_settings.narrator.off": "讲述人通知关闭.", + "gui.createrailwaysnavigator.route_overlay_settings.narrator.on": "讲述人通知开启", + "gui.createrailwaysnavigator.route_overlay_settings.narrator.off": "讲述人通知关闭", "gui.createrailwaysnavigator.route_overlay_settings.notifications.on": "开启通知", "gui.createrailwaysnavigator.route_overlay_settings.notifications.off": "关闭通知", "gui.createrailwaysnavigator.route_overlay_settings.scale": "GUI 大小", "gui.createrailwaysnavigator.route_overlay_settings.narrator": "讲述人通知", - "gui.createrailwaysnavigator.route_overlay_settings.narrator.description": "讲述人会播报旅程中的信息,例如下一个车站,换乘", + "gui.createrailwaysnavigator.route_overlay_settings.narrator.description": "讲述人会播报您旅途中的重要事件,例如下一站、换乘等。", "gui.createrailwaysnavigator.route_overlay_settings.notifications": "通知", - "gui.createrailwaysnavigator.route_overlay_settings.notifications.description": "通知旅程中的信息,例如下一个车站,换乘", + "gui.createrailwaysnavigator.route_overlay_settings.notifications.description": "在旅途中接收关于重要事件的弹窗通知,例如下一站、换乘等。", - "gui.createrailwaysnavigator.common.expand": "显示细节", - "gui.createrailwaysnavigator.common.collapse": "隐藏细节", + "gui.createrailwaysnavigator.common.expand": "显示详情", + "gui.createrailwaysnavigator.common.collapse": "隐藏详情", "gui.createrailwaysnavigator.common.go_back": "返回", - "gui.createrailwaysnavigator.common.go_to_top": "滚动至顶部", + "gui.createrailwaysnavigator.common.go_to_top": "滚动到顶部", "gui.createrailwaysnavigator.common.reset_defaults": "恢复初始设定", "gui.createrailwaysnavigator.common.count": "数量", "gui.createrailwaysnavigator.common.true": "是", @@ -75,176 +75,174 @@ "gui.createrailwaysnavigator.common.server_error": "执行任务时出现问题,请查看控制台以获取更多信息。", "gui.createrailwaysnavigator.navigator.title": "机械动力:铁路导航", - "gui.createrailwaysnavigator.navigator.no_connections": "没有可用线路", - "gui.createrailwaysnavigator.navigator.not_searched": "没有搜索结果", - "gui.createrailwaysnavigator.navigator.searching": "正在搜索...", - "gui.createrailwaysnavigator.navigator.error_title": "无法导航!", - "gui.createrailwaysnavigator.navigator.start_end_null": "起点或终点为空.", - "gui.createrailwaysnavigator.navigator.start_end_equal": "起点或终点不能相同.", - "gui.createrailwaysnavigator.navigator.route_entry.connection_in_past": "❌ 线路已过期", - "gui.createrailwaysnavigator.navigator.route_entry.transfer": "换乘.", - "gui.createrailwaysnavigator.navigator.route_entry.station_start": "从 %s", - "gui.createrailwaysnavigator.navigator.global_settings.tooltip": "通用设置", + "gui.createrailwaysnavigator.navigator.no_connections": "未找到路线。", + "gui.createrailwaysnavigator.navigator.not_searched": "尚未搜索。", + "gui.createrailwaysnavigator.navigator.searching": "正在搜索路线...", + "gui.createrailwaysnavigator.navigator.error_title": "无法导航!", + "gui.createrailwaysnavigator.navigator.start_end_null": "起点或终点为空。", + "gui.createrailwaysnavigator.navigator.start_end_equal": "起点和终点相同。", + "gui.createrailwaysnavigator.navigator.route_entry.connection_in_past": "❌ 过去的车次", + "gui.createrailwaysnavigator.navigator.route_entry.transfer": "换乘", + "gui.createrailwaysnavigator.navigator.route_entry.station_start": "从%s出发", + "gui.createrailwaysnavigator.navigator.global_settings.tooltip": "全局设置", "gui.createrailwaysnavigator.navigator.search_settings.tooltip": "搜索设置", "gui.createrailwaysnavigator.navigator.search.tooltip": "搜索", - "gui.createrailwaysnavigator.navigator.location.tooltip": "自动查找最近车站", + "gui.createrailwaysnavigator.navigator.location.tooltip": "定位最近的车站", "gui.createrailwaysnavigator.navigator.switch.tooltip": "交换地点", "gui.createrailwaysnavigator.route_details.title": "路线详情", - "gui.createrailwaysnavigator.route_details.departure": "出发自", - "gui.createrailwaysnavigator.route_details.next_transfer_time": "换乘于", + "gui.createrailwaysnavigator.route_details.departure": "出发时间", + "gui.createrailwaysnavigator.route_details.next_transfer_time": "换乘时间", "gui.createrailwaysnavigator.route_details.transfer": "换乘", - "gui.createrailwaysnavigator.route_details.save_route": "保存线路", + "gui.createrailwaysnavigator.route_details.save_route": "保存路线", "gui.createrailwaysnavigator.route_overview.title": "路线详情", - "gui.createrailwaysnavigator.route_overview.journey_begins": "列车出发! %s 至 %s, 起始于 %s", - "gui.createrailwaysnavigator.route_overview.journey_begins_with_platform": "列车出发! %s 至 %s, 起始于 %s 站台 %s", - "gui.createrailwaysnavigator.route_overview.train_details": "%s 至 %s", - "gui.createrailwaysnavigator.route_overview.next_stop": "下一站: %s", - "gui.createrailwaysnavigator.route_overview.transfer": "换乘 %s → %s", - "gui.createrailwaysnavigator.route_overview.transfer_with_platform": "换乘 %s → %s 在站台 %s", - "gui.createrailwaysnavigator.route_overview.journey_completed": "旅程结束", - "gui.createrailwaysnavigator.route_overview.after_journey": "您已到达 %s. 感谢您的乘坐,祝您有美好的一天.", - "gui.createrailwaysnavigator.route_overview.next_connections": "下一站", + "gui.createrailwaysnavigator.route_overview.journey_begins": "您的旅程开始了!%s到%s,出发时间%s", + "gui.createrailwaysnavigator.route_overview.journey_begins_with_platform": "您的旅程开始了!%s到%s,出发时间%s,在%s站台乘车", + "gui.createrailwaysnavigator.route_overview.train_details": "%s到%s", + "gui.createrailwaysnavigator.route_overview.next_stop": "下一站:%s", + "gui.createrailwaysnavigator.route_overview.transfer": "换乘%s→%s", + "gui.createrailwaysnavigator.route_overview.transfer_with_platform": "换乘%s→%s,在%s站台乘车", + "gui.createrailwaysnavigator.route_overview.journey_completed": "旅程完成", + "gui.createrailwaysnavigator.route_overview.after_journey": "您已抵达%s。感谢您的乘坐,祝您旅途愉快。", + "gui.createrailwaysnavigator.route_overview.next_connections": "下一车次", "gui.createrailwaysnavigator.route_overview.schedule_transfer": "换乘", - "gui.createrailwaysnavigator.route_overview.train_canceled": "列车已取消", - "gui.createrailwaysnavigator.route_overview.train_cancellation_info": "取消信息 %s", - "gui.createrailwaysnavigator.route_overview.stop_canceled": "❌ 取消", - "gui.createrailwaysnavigator.route_overview.connection_endangered": "不安全的线路", - "gui.createrailwaysnavigator.route_overview.connection_missed": "线路消失", - "gui.createrailwaysnavigator.route_overview.connection_canceled": "列车取消", - "gui.createrailwaysnavigator.route_overview.journey_interrupted": "您前往 %s 的旅程已中断。", - "gui.createrailwaysnavigator.route_overview.connection_missed_info": "由于列车延迟导致您无法换乘,请打开导航仪搜索更多线路。对于带来的不便我们深感歉意。", - "gui.createrailwaysnavigator.route_overview.train_canceled_info": "车次: %s: 车次已取消,请打开导航仪搜索更多线路。对于带来的不便我们深感歉意。", - "gui.createrailwaysnavigator.route_overview.train_canceled_title": "车次已取消", - "gui.createrailwaysnavigator.route_overview.journey_interrupted_info": "前往 %s 的旅程已中断。 请打开导航仪搜索更多线路", - "gui.createrailwaysnavigator.route_overview.options": "按 %s 展示选项.", - "gui.createrailwaysnavigator.route_overview.notification.journey_begins.title": "正在前往 %s!", - "gui.createrailwaysnavigator.route_overview.notification.journey_begins": "%s 至 %s, 起始于 %s", - "gui.createrailwaysnavigator.route_overview.notification.journey_begins_with_platform": "%s 至 %s, 起始于 %s 站台 %s", - "gui.createrailwaysnavigator.route_overview.notification.platform_changed.title": "您已切换站台!", - "gui.createrailwaysnavigator.route_overview.notification.platform_changed": "列车 %s 今日从站台 %s 离开.", - "gui.createrailwaysnavigator.route_overview.notification.train_delayed.title": "%s: 延迟抵达 %s", - "gui.createrailwaysnavigator.route_overview.notification.train_delayed": "推迟至 %s 原定 %s 抵达 %s", - "gui.createrailwaysnavigator.route_overview.notification.train_canceled.title": "%s: 车次取消", - "gui.createrailwaysnavigator.route_overview.notification.train_canceled": "今日原定从 %s 至 %s 的车次已经取消", - "gui.createrailwaysnavigator.route_overview.notification.transfer.title": "换乘列车即将到来", - "gui.createrailwaysnavigator.route_overview.notification.transfer": "换乘 %s → %s 于站台 %s", - "gui.createrailwaysnavigator.route_overview.notification.transfer_with_platform": "换乘 %s → %s 于站台 %s", - "gui.createrailwaysnavigator.route_overview.notification.connection_endangered.title": "不安全的线路!", - "gui.createrailwaysnavigator.route_overview.notification.connection_endangered": "您可能不会从 %s 抵达 %s.", - "gui.createrailwaysnavigator.route_overview.notification.connection_missed.title": "缺失线路", - "gui.createrailwaysnavigator.route_overview.notification.connection_missed": "从 %s 到 %s 线路已缺失", - "gui.createrailwaysnavigator.route_overview.notification.journey_completed.title": "您已抵达目的地!", - "gui.createrailwaysnavigator.route_overview.notification.journey_completed": "感谢您的乘坐,祝您有美好的一天", - "gui.createrailwaysnavigator.route_overview.date": "日期: %s, %s", + "gui.createrailwaysnavigator.route_overview.train_canceled": "车次取消", + "gui.createrailwaysnavigator.route_overview.train_cancellation_info": "关于%s的信息", + "gui.createrailwaysnavigator.route_overview.stop_canceled": "❌ 已取消", + "gui.createrailwaysnavigator.route_overview.connection_endangered": "换乘受阻", + "gui.createrailwaysnavigator.route_overview.connection_missed": "错过换乘", + "gui.createrailwaysnavigator.route_overview.connection_canceled": "车次取消", + "gui.createrailwaysnavigator.route_overview.journey_interrupted": "您前往%s的旅程无法继续。", + "gui.createrailwaysnavigator.route_overview.connection_missed_info": "由于列车延误,您错过了换乘列车。请在导航仪中搜索替代路线。对于给您造成的不便,我们深表歉意。", + "gui.createrailwaysnavigator.route_overview.train_canceled_info": "关于%s的信息:该车次已取消!对于给您造成的不便,我们深表歉意。请在导航仪中搜索替代路线。", + "gui.createrailwaysnavigator.route_overview.train_canceled_title": "车次取消", + "gui.createrailwaysnavigator.route_overview.journey_interrupted_info": "您前往%s的旅程无法继续。请在导航仪中搜索替代路线。", + "gui.createrailwaysnavigator.route_overview.options": "按%s键查看选项。", + "gui.createrailwaysnavigator.route_overview.notification.journey_begins.title": "您前往%s的旅程开始了!", + "gui.createrailwaysnavigator.route_overview.notification.journey_begins": "%s到%s,出发时间%s", + "gui.createrailwaysnavigator.route_overview.notification.journey_begins_with_platform": "%s到%s,出发时间%s,在%s站台乘车", + "gui.createrailwaysnavigator.route_overview.notification.platform_changed.title": "站台已变更!", + "gui.createrailwaysnavigator.route_overview.notification.platform_changed": "您在%s的列车将从%s号站台出发。", + "gui.createrailwaysnavigator.route_overview.notification.train_delayed.title": "%s:延误%s", + "gui.createrailwaysnavigator.route_overview.notification.train_delayed": "原定%2$s,现将于%1$s抵达%3$s", + "gui.createrailwaysnavigator.route_overview.notification.train_canceled.title": "%s:列车取消", + "gui.createrailwaysnavigator.route_overview.notification.train_canceled": "前往%2$s的%1$s已取消。", + "gui.createrailwaysnavigator.route_overview.notification.transfer.title": "即将换乘", + "gui.createrailwaysnavigator.route_overview.notification.transfer": "换乘%s→%s,在%s站台乘车", + "gui.createrailwaysnavigator.route_overview.notification.transfer_with_platform": "换乘%s→%s,在%s站台乘车", + "gui.createrailwaysnavigator.route_overview.notification.connection_endangered.title": "换乘受阻!", + "gui.createrailwaysnavigator.route_overview.notification.connection_endangered": "您可能无法赶上前往%2$s的%1$s。", + "gui.createrailwaysnavigator.route_overview.notification.connection_missed.title": "错过换乘", + "gui.createrailwaysnavigator.route_overview.notification.connection_missed": "您错过了前往%2$s的%1$s。", + "gui.createrailwaysnavigator.route_overview.notification.journey_completed.title": "您已抵达目的地!", + "gui.createrailwaysnavigator.route_overview.notification.journey_completed": "感谢您的乘坐,祝您旅途愉快", + "gui.createrailwaysnavigator.route_overview.date": "第%s天,%s", "gui.createrailwaysnavigator.global_settings.title": "全局设定", "gui.createrailwaysnavigator.global_settings.option.tooltip": "点击编辑", - "gui.createrailwaysnavigator.global_settings.option_alias.title": "列车站标签", + "gui.createrailwaysnavigator.global_settings.option_alias.title": "车站标签", "gui.createrailwaysnavigator.global_settings.option_alias.description": "对于多站台的车站,您可以建立标签 (例如 MyStation 1, MyStation 2, ...) 以把它们归于一个车站下 (例如 MyStation)。", "gui.createrailwaysnavigator.global_settings.option_blacklist.title": "车站黑名单", - "gui.createrailwaysnavigator.global_settings.option_blacklist.description": "黑名单中的车站将不会再搜索选项中出现.", - "gui.createrailwaysnavigator.global_settings.train_group.title": "列车组", - "gui.createrailwaysnavigator.global_settings.train_group.description": "将列车加入列车组以方便管理,用户可以选择列车组.", - "gui.createrailwaysnavigator.global_settings.train_blacklist.title": "火车黑名单", - "gui.createrailwaysnavigator.global_settings.train_blacklist.description": "黑名单中的火车将不会显示", - - "gui.createrailwaysnavigator.alias_settings.title": "列车站标签设定", - "gui.createrailwaysnavigator.alias_settings.summary": "包含 %s 个车站", - "gui.createrailwaysnavigator.alias_settings.editor": "最后由 %s 在 %s 编辑", - "gui.createrailwaysnavigator.alias_settings.add.tooltip": "加入新的入口", + "gui.createrailwaysnavigator.global_settings.option_blacklist.description": "排除导航结果中不应出现的车站。生成路线时将忽略这些车站。", + "gui.createrailwaysnavigator.global_settings.train_group.title": "列车分类", + "gui.createrailwaysnavigator.global_settings.train_group.description": "将列车加入列车分类(例如,区域服务、长途服务等)以方便管理,乘客可以决定要使用哪些列车分类。", + "gui.createrailwaysnavigator.global_settings.train_blacklist.title": "列车黑名单", + "gui.createrailwaysnavigator.global_settings.train_blacklist.description": "排除列车,例如货运列车、专列等,以便在路线建议中不显示它们。", + + "gui.createrailwaysnavigator.alias_settings.title": "车站标签设定", + "gui.createrailwaysnavigator.alias_settings.summary": "包含%s个车站", + "gui.createrailwaysnavigator.alias_settings.editor": "最后编辑者:%s,于%s", + "gui.createrailwaysnavigator.alias_settings.add.tooltip": "创建新条目", "gui.createrailwaysnavigator.alias_settings.delete_alias.tooltip": "删除标签", "gui.createrailwaysnavigator.alias_settings.delete_station.tooltip": "移除车站", "gui.createrailwaysnavigator.alias_settings.add_station.tooltip": "添加车站", "gui.createrailwaysnavigator.alias_settings.hint.station_name": "车站名称", "gui.createrailwaysnavigator.alias_settings.hint.platform": "站台", - "gui.createrailwaysnavigator.alias_settings.enter_name": "在此输入名字", - - "gui.createrailwaysnavigator.train_group_settings.title": "列车组设置", - "gui.createrailwaysnavigator.train_group_settings.summary": "包含 %s 辆列车", - "gui.createrailwaysnavigator.train_group_settings.editor": "最后由 %s 在 %s 编辑", - "gui.createrailwaysnavigator.train_group_settings.delete_alias.tooltip": "删除列车组", + "gui.createrailwaysnavigator.alias_settings.enter_name": "在此输入名称", + "gui.createrailwaysnavigator.train_group_settings.title": "列车分类设置", + "gui.createrailwaysnavigator.train_group_settings.summary": "包含%s辆列车", + "gui.createrailwaysnavigator.train_group_settings.editor": "最后编辑者:%s,%s", + "gui.createrailwaysnavigator.train_group_settings.delete_alias.tooltip": "删除分类", "gui.createrailwaysnavigator.train_group_settings.delete_station.tooltip": "移除列车", "gui.createrailwaysnavigator.train_group_settings.add_station.tooltip": "添加列车", - "gui.createrailwaysnavigator.blacklist.title": "列车站黑名单", + "gui.createrailwaysnavigator.blacklist.title": "车站黑名单", "gui.createrailwaysnavigator.blacklist.add.tooltip": "加入黑名单", "gui.createrailwaysnavigator.blacklist.delete.tooltip": "移除黑名单", - + "gui.createrailwaysnavigator.train_blacklist.title": "列车黑名单", "gui.createrailwaysnavigator.train_blacklist.add.tooltip": "加入黑名单", "gui.createrailwaysnavigator.train_blacklist.delete.tooltip": "移除黑名单", - + "gui.createrailwaysnavigator.search_settings.title": "搜索设定", "gui.createrailwaysnavigator.search_settings.transfer_time": "最短换乘时间", - "gui.createrailwaysnavigator.search_settings.transfer_time.description": "最短的需要换乘的时间. (一小时对应现实50秒)", + "gui.createrailwaysnavigator.search_settings.transfer_time.description": "换乘需要的最短可用时间。(1 小时 ≈ 50 秒现实时间)", "gui.createrailwaysnavigator.search_settings.train_groups": "列车过滤器", - "gui.createrailwaysnavigator.search_settings.train_groups.description": "决定想使用的列车", - "gui.createrailwaysnavigator.search_settings.train_groups.overview": "%s 个筛选项已选择", + "gui.createrailwaysnavigator.search_settings.train_groups.description": "决定想使用的列车类别。", + "gui.createrailwaysnavigator.search_settings.train_groups.overview": "%s类别选择中", "gui.createrailwaysnavigator.search_settings.train_groups.overview.all": "全部", - "gui.createrailwaysnavigator.search_settings.train_groups.overview.none": "全部否", + "gui.createrailwaysnavigator.search_settings.train_groups.overview.none": "无", "gui.createrailwaysnavigator.search_settings.train_groups.tooltip.reset": "重置筛选项", "gui.createrailwaysnavigator.new_text_entry.add.tooltip": "添加", - "gui.createrailwaysnavigator.time": "时间: %s", - "gui.createrailwaysnavigator.time.now": "现在时间是:", - "gui.createrailwaysnavigator.time_format.dhm": "%s 日 %s 时. %s 分.", - "gui.createrailwaysnavigator.time_format.hm": "%s 时. %s 分.", - "gui.createrailwaysnavigator.time_format.m": "%s 分.", - + "gui.createrailwaysnavigator.time": "时间:%s", + "gui.createrailwaysnavigator.time.now": "现在", + "gui.createrailwaysnavigator.time_format.dhm": "%s天%s小时%s分钟", + "gui.createrailwaysnavigator.time_format.hm": "%s小时%s分钟", + "gui.createrailwaysnavigator.time_format.m": "%s分钟", + "gui.createrailwaysnavigator.platform": "站台", - "gui.createrailwaysnavigator.departure": "离开", - "gui.createrailwaysnavigator.destination": "终点站", - "gui.createrailwaysnavigator.line": "线路", - "gui.createrailwaysnavigator.following_trains": "下一趟列车:", + "gui.createrailwaysnavigator.departure": "出发", + "gui.createrailwaysnavigator.destination": "目的地", + "gui.createrailwaysnavigator.line": "路线", + "gui.createrailwaysnavigator.following_trains": "后续车次:", "gui.createrailwaysnavigator.via": "经停", - "gui.createrailwaysnavigator.advanced_display_settings.title": "高级展示设置", - "gui.createrailwaysnavigator.advanced_display_settings.display_type": "展示类型", - "gui.createrailwaysnavigator.advanced_display_settings.display_type.description": "选择展示的信息", + "gui.createrailwaysnavigator.advanced_display_settings.title": "高级显示设置", + "gui.createrailwaysnavigator.advanced_display_settings.display_type": "显示器类型", + "gui.createrailwaysnavigator.advanced_display_settings.display_type.description": "决定显示的信息。", "gui.createrailwaysnavigator.advanced_display_settings.info_type": "信息类型", - "gui.createrailwaysnavigator.advanced_display_settings.info_type.description": "展示信息的详细程度", + "gui.createrailwaysnavigator.advanced_display_settings.info_type.description": "决定信息的详细程度。", "gui.createrailwaysnavigator.advanced_display_settings.double_sided": "双面显示", - "enum.createrailwaysnavigator.display_info_type": "展示类型", - "enum.createrailwaysnavigator.display_info_type.description": "展示信息的详细程度", + "enum.createrailwaysnavigator.display_info_type": "信息类型", + "enum.createrailwaysnavigator.display_info_type.description": "决定显示器上应显示多少信息。", "enum.createrailwaysnavigator.display_info_type.simple": "简洁", - "enum.createrailwaysnavigator.display_info_type.info.simple": "只展示最重要的部分", + "enum.createrailwaysnavigator.display_info_type.info.simple": "只展示最重要的部分,不显示其它细节。", "enum.createrailwaysnavigator.display_info_type.detailed": "详细", - "enum.createrailwaysnavigator.display_info_type.info.detailed": "将展示更多细节,例如火车速度", + "enum.createrailwaysnavigator.display_info_type.info.detailed": "将展示更多细节,例如列车速度、经停站等。", "enum.createrailwaysnavigator.display_info_type.informative": "全部展示", - "enum.createrailwaysnavigator.display_info_type.info.informative": "展示全部信息,不建议在小型展示牌上使用", - - "enum.createrailwaysnavigator.display_type": "展示类型", - "enum.createrailwaysnavigator.display_type.description": "选择展示的信息", + "enum.createrailwaysnavigator.display_info_type.info.informative": "以花哨的布局显示所有信息。不建议在小型显示器上使用,因为文字可能会变得非常小。", + "enum.createrailwaysnavigator.display_type": "显示器类型", + "enum.createrailwaysnavigator.display_type.description": "决定显示器的类型,由其用途决定。", "enum.createrailwaysnavigator.display_type.train_destination": "列车终点站", - "enum.createrailwaysnavigator.display_type.info.train_destination": "在列车外显示列车的详细信息,如终点站,经停站等", + "enum.createrailwaysnavigator.display_type.info.train_destination": "适用于列车外部,显示有关列车本身的信息,例如名称、终点站和(如果选择)经停站以及其他信息。", "enum.createrailwaysnavigator.display_type.passenger_information": "乘客信息", - "enum.createrailwaysnavigator.display_type.info.passenger_information": "在列车内部使用,展示路程信息", - "enum.createrailwaysnavigator.display_type.platform": "站台信息", - "enum.createrailwaysnavigator.display_type.info.platform": "在车站使用,可显示下一趟列车。无法在列车内部使用", + "enum.createrailwaysnavigator.display_type.info.passenger_information": "代表适用于列车内部的显示器。这种显示器将显示下一站、开门方向以及(如果选择)列车速度和路线概览。", + "enum.createrailwaysnavigator.display_type.platform": "站台显示", + "enum.createrailwaysnavigator.display_type.info.platform": "这种显示应在车站站台上使用,显示后续车次以及(如果选择)其他详细信息。不能在列车上使用!", "enum.createrailwaysnavigator.side": "显示方向", - "enum.createrailwaysnavigator.side.description": "显示信息的面", + "enum.createrailwaysnavigator.side.description": "决定信息应呈现在方块的哪一面。", "enum.createrailwaysnavigator.side.front": "正面", - "enum.createrailwaysnavigator.side.info.front": "(默认)只会在正面显示信息", - "enum.createrailwaysnavigator.side.both": "正反两面", - "enum.createrailwaysnavigator.side.info.both": "信息在两面都会显示", - + "enum.createrailwaysnavigator.side.info.front": "信息将仅在正面显示(默认行为)。", + "enum.createrailwaysnavigator.side.both": "双面", + "enum.createrailwaysnavigator.side.info.both": "信息将在双面显示。", + "enum.createrailwaysnavigator.time_display": "时间显示", - "enum.createrailwaysnavigator.time_display.description": "改变时间展示的方式", + "enum.createrailwaysnavigator.time_display.description": "决定时间的显示方式。", "enum.createrailwaysnavigator.time_display.abs": "ABS", - "enum.createrailwaysnavigator.time_display.info.abs": "ABS (绝对时间)", + "enum.createrailwaysnavigator.time_display.info.abs": "ABS(绝对时间、absolute)", "enum.createrailwaysnavigator.time_display.eta": "ETA", - "enum.createrailwaysnavigator.time_display.info.eta": "ETA (预计到达时间)", + "enum.createrailwaysnavigator.time_display.info.eta": "ETA(预计到达时间、estimated time of arrival)", "create.display_source.advanced_display": "高级显示", - "gui.createrailwaysnavigator.display_source.advanced_display.train_name_width": "列车名宽度", - "gui.createrailwaysnavigator.display_source.advanced_display.train_name_width.description": "以像素为单位 (默认: 16)", - "gui.createrailwaysnavigator.display_source.advanced_display.platform_width": "站台名宽度", - "gui.createrailwaysnavigator.display_source.advanced_display.platform_width.description": "以像素为单位 (默认: Auto)", + "gui.createrailwaysnavigator.display_source.advanced_display.train_name_width": "列车名称列宽", + "gui.createrailwaysnavigator.display_source.advanced_display.train_name_width.description": "以像素为单位。(默认:16)", + "gui.createrailwaysnavigator.display_source.advanced_display.platform_width": "站台列宽", + "gui.createrailwaysnavigator.display_source.advanced_display.platform_width.description": "以方块像素为单位。(默认:自动)", "createrailwaysnavigator.moin": "moin" } From 21e67d1f3ffa1dbcebc81edeb625c0badcf85b16 Mon Sep 17 00:00:00 2001 From: Albertosaurio65 Date: Sun, 2 Jun 2024 20:00:40 +0200 Subject: [PATCH 31/38] Create es_es.json --- .../createrailwaysnavigator/lang/es_es.json | 250 ++++++++++++++++++ 1 file changed, 250 insertions(+) create mode 100644 common/src/main/resources/assets/createrailwaysnavigator/lang/es_es.json diff --git a/common/src/main/resources/assets/createrailwaysnavigator/lang/es_es.json b/common/src/main/resources/assets/createrailwaysnavigator/lang/es_es.json new file mode 100644 index 00000000..958d9d1c --- /dev/null +++ b/common/src/main/resources/assets/createrailwaysnavigator/lang/es_es.json @@ -0,0 +1,250 @@ +{ + "advancement.createrailwaysnavigator.navigator": "Gracias por viajar", + "advancement.createrailwaysnavigator.navigator.description": "Crea un navegador para buscar conexiones de tren de una estación de tren a otra.", + "advancement.createrailwaysnavigator.advanced_display": "No del todo 4k", + "advancement.createrailwaysnavigator.advanced_display.description": "Actualiza tus paneles de visualización para mostrar más información e incluso colócalos en tus trenes.", + + "itemGroup.createrailwaysnavigator.tab": "Create Railways Navigator", + + "item.createrailwaysnavigator.navigator": "Navegador de ferrocarriles", + "item.createrailwaysnavigator.navigator.tooltip.summary": "El _navegador_ muestra posibles _conexiones de trenes_ con información adicional como _escalas_, _datos en tiempo real_ y más.", + + "block.createrailwaysnavigator.train_station_clock": "Reloj de estación de tren", + "block.createrailwaysnavigator.advanced_display_block": "Bloque de pantalla avanzada", + "block.createrailwaysnavigator.advanced_display_block.tooltip.summary": "Úsalo en _trenes_, como _pantalla de destino del tren_ o _pantalla de información para pasajeros_, o en _estaciones de tren_ como pantallas de _plataforma mejoradas_ que también muestran más información que los tableros de pantalla regulares.", + "block.createrailwaysnavigator.advanced_display_block.tooltip.condition1": "Al hacer clic derecho con una llave inglesa", + "block.createrailwaysnavigator.advanced_display_block.tooltip.behaviour1": "Abre un menú para _configurar_ la _pantalla_.", + "block.createrailwaysnavigator.advanced_display": "Tablero de pantalla avanzada", + "block.createrailwaysnavigator.advanced_display.tooltip.summary": "Úsalo en _trenes_, como _pantalla de destino del tren_ o _pantalla de información para pasajeros_, o en _estaciones de tren_ como pantallas de _plataforma mejoradas_ que también muestran más información que los tableros de pantalla regulares.", + "block.createrailwaysnavigator.advanced_display.tooltip.condition1": "Al hacer clic derecho con una llave inglesa", + "block.createrailwaysnavigator.advanced_display.tooltip.behaviour1": "Abre un menú para _configurar_ la _pantalla_.", + "block.createrailwaysnavigator.advanced_display_small": "Pantalla avanzada pequeña", + "block.createrailwaysnavigator.advanced_display_small.tooltip.summary": "Úsalo en _trenes_, como _pantalla de destino del tren_ o _pantalla de información para pasajeros_, o en _estaciones de tren_ como pantallas de _plataforma mejoradas_ que también muestran más información que los tableros de pantalla regulares.", + "block.createrailwaysnavigator.advanced_display_small.tooltip.condition1": "Al hacer clic derecho con una llave inglesa", + "block.createrailwaysnavigator.advanced_display_small.tooltip.behaviour1": "Abre un menú para _configurar_ la _pantalla_.", + "block.createrailwaysnavigator.advanced_display_panel": "Panel de pantalla avanzada", + "block.createrailwaysnavigator.advanced_display_panel.tooltip.summary": "Úsalo en _trenes_, como _pantalla de destino del tren_ o _pantalla de información para pasajeros_, o en _estaciones de tren_ como pantallas de _plataforma mejoradas_ que también muestran más información que los tableros de pantalla regulares.", + "block.createrailwaysnavigator.advanced_display_panel.tooltip.condition1": "Al hacer clic derecho con una llave inglesa", + "block.createrailwaysnavigator.advanced_display_panel.tooltip.behaviour1": "Abre un menú para _configurar_ la _pantalla_.", + "block.createrailwaysnavigator.advanced_display_half_panel": "Medio panel de pantalla avanzada", + "block.createrailwaysnavigator.advanced_display_half_panel.tooltip.summary": "Úsalo en _trenes_, como _pantalla de destino del tren_ o _pantalla de información para pasajeros_, o en _estaciones de tren_ como pantallas de _plataforma mejoradas_ que también muestran más información que los tableros de pantalla regulares.", + "block.createrailwaysnavigator.advanced_display_half_panel.tooltip.condition1": "Al hacer clic derecho con una llave inglesa", + "block.createrailwaysnavigator.advanced_display_half_panel.tooltip.behaviour1": "Abre un menú para _configurar_ la _pantalla_.", + "block.createrailwaysnavigator.advanced_display_sloped": "Pantalla avanzada inclinada", + "block.createrailwaysnavigator.advanced_display_sloped.tooltip.summary": "Úsalo en _trenes_, como _pantalla de destino del tren_ o _pantalla de información para pasajeros_, o en _estaciones de tren_ como pantallas de _plataforma mejoradas_ que también muestran más información que los tableros de pantalla regulares.", + "block.createrailwaysnavigator.advanced_display_sloped.tooltip.condition1": "Al hacer clic derecho con una llave inglesa", + "block.createrailwaysnavigator.advanced_display_sloped.tooltip.behaviour1": "Abre un menú para _configurar_ la _pantalla_.", + + "block.createrailwaysnavigator.advanced_display.ber.not_in_service": "¡Fuera de servicio!", + "block.createrailwaysnavigator.advanced_display.ber.shunting_trip": "viaje sin pasajeros", + + "category.createrailwaysnavigator.crn": "Navegador de ferrocarriles", + "key.createrailwaysnavigator.route_overlay_options": "Mostrar opciones de superposición de ruta", + + "enum.createrailwaysnavigator.overlay_position": "Posición de la pantalla", + "enum.createrailwaysnavigator.overlay_position.info.top_left": "Esquina superior izquierda", + "enum.createrailwaysnavigator.overlay_position.info.top_right": "Esquina superior derecha", + "enum.createrailwaysnavigator.overlay_position.info.bottom_left": "Esquina inferior izquierda", + "enum.createrailwaysnavigator.overlay_position.info.bottom_right": "Esquina inferior derecha", + + "gui.createrailwaysnavigator.loading.title": "Descargando datos del servidor...", + + "gui.createrailwaysnavigator.overlay_settings.title": "Configuración de superposición de ruta", + "gui.createrailwaysnavigator.route_overlay_settings.show_details": "Mostrar detalles", + "gui.createrailwaysnavigator.route_overlay_settings.unpin": "Eliminar superposición de ruta", + "gui.createrailwaysnavigator.route_overlay_settings.narrator.on": "Anuncios del narrador activados.", + "gui.createrailwaysnavigator.route_overlay_settings.narrator.off": "Anuncios del narrador desactivados.", + "gui.createrailwaysnavigator.route_overlay_settings.notifications.on": "Notificaciones activadas", + "gui.createrailwaysnavigator.route_overlay_settings.notifications.off": "Notificaciones desactivadas", + "gui.createrailwaysnavigator.route_overlay_settings.scale": "Escala de la interfaz", + "gui.createrailwaysnavigator.route_overlay_settings.narrator": "Anuncios del narrador", + "gui.createrailwaysnavigator.route_overlay_settings.narrator.description": "El narrador anuncia eventos importantes en tu viaje, por ejemplo, la próxima parada, cambios, etc.", + "gui.createrailwaysnavigator.route_overlay_settings.notifications": "Notificaciones", + "gui.createrailwaysnavigator.route_overlay_settings.notifications.description": "Recibe notificaciones emergentes sobre eventos importantes en tu viaje, por ejemplo, la próxima parada, cambios, etc.", + + "gui.createrailwaysnavigator.common.expand": "Mostrar detalles", + "gui.createrailwaysnavigator.common.collapse": "Ocultar detalles", + "gui.createrailwaysnavigator.common.go_back": "Volver", + "gui.createrailwaysnavigator.common.go_to_top": "Desplazarse arriba", + "gui.createrailwaysnavigator.common.reset_defaults": "Restablecer a los valores predeterminados", + "gui.createrailwaysnavigator.common.count": "Cantidad", + "gui.createrailwaysnavigator.common.true": "Sí", + "gui.createrailwaysnavigator.common.false": "No", + "gui.createrailwaysnavigator.common.search": "Buscar", + "gui.createrailwaysnavigator.common.auto": "Automático", + "gui.createrailwaysnavigator.common.server_error": "Error del servidor al ejecutar la tarea. Mira la consola para más detalles.", + + "gui.createrailwaysnavigator.navigator.title": "Navegador de ferrocarriles", + "gui.createrailwaysnavigator.navigator.no_connections": "No se encontraron conexiones.", + "gui.createrailwaysnavigator.navigator.not_searched": "Aún no se ha buscado nada.", + "gui.createrailwaysnavigator.navigator.searching": "Buscando conexiones...", + "gui.createrailwaysnavigator.navigator.error_title": "¡No se puede navegar!", + "gui.createrailwaysnavigator.navigator.start_end_null": "El inicio o el destino están vacíos.", + "gui.createrailwaysnavigator.navigator.start_end_equal": "El inicio y el destino son iguales.", + "gui.createrailwaysnavigator.navigator.route_entry.connection_in_past": "❌ Conexión en el pasado", + "gui.createrailwaysnavigator.navigator.route_entry.transfer": "Transbordo", + "gui.createrailwaysnavigator.navigator.route_entry.station_start": "desde %s", + "gui.createrailwaysnavigator.navigator.global_settings.tooltip": "Configuración global", + "gui.createrailwaysnavigator.navigator.search_settings.tooltip": "Configuración de búsqueda", + "gui.createrailwaysnavigator.navigator.search.tooltip": "Buscar", + "gui.createrailwaysnavigator.navigator.location.tooltip": "Estación más cercana desde la posición actual", + "gui.createrailwaysnavigator.navigator.switch.tooltip": "Cambiar campos", + + "gui.createrailwaysnavigator.route_details.title": "Detalles de la ruta", + "gui.createrailwaysnavigator.route_details.departure": "Salida en", + "gui.createrailwaysnavigator.route_details.next_transfer_time": "Transbordo en", + "gui.createrailwaysnavigator.route_details.transfer": "Transbordo", + "gui.createrailwaysnavigator.route_details.save_route": "Guardar conexión", + + "gui.createrailwaysnavigator.route_overview.title": "Detalles de la ruta", + "gui.createrailwaysnavigator.route_overview.journey_begins": "¡Tu viaje comienza! %s a %s, salida %s", + "gui.createrailwaysnavigator.route_overview.journey_begins_with_platform": "¡Tu viaje comienza! %s a %s, salida %s en el andén %s", + "gui.createrailwaysnavigator.route_overview.train_details": "%s a %s", + "gui.createrailwaysnavigator.route_overview.next_stop": "Próxima parada: %s", + "gui.createrailwaysnavigator.route_overview.transfer": "Transbordo a %s → %s", + "gui.createrailwaysnavigator.route_overview.transfer_with_platform": "Transbordo a %s → %s en el andén %s", + "gui.createrailwaysnavigator.route_overview.journey_completed": "Viaje completado", + "gui.createrailwaysnavigator.route_overview.after_journey": "Has llegado a %s. Gracias por viajar y que tengas un buen día.", + "gui.createrailwaysnavigator.route_overview.next_connections": "Próximas conexiones", + "gui.createrailwaysnavigator.route_overview.schedule_transfer": "Transbordo", + "gui.createrailwaysnavigator.route_overview.train_canceled": "Tren cancelado", + "gui.createrailwaysnavigator.route_overview.train_cancellation_info": "Información sobre %s", + "gui.createrailwaysnavigator.route_overview.stop_canceled": "❌ Cancelado", + "gui.createrailwaysnavigator.route_overview.connection_endangered": "Conexión en peligro", + "gui.createrailwaysnavigator.route_overview.connection_missed": "Conexión perdida", + "gui.createrailwaysnavigator.route_overview.connection_canceled": "Tren cancelado", + "gui.createrailwaysnavigator.route_overview.journey_interrupted": "Tu viaje a %s no puede continuar.", + "gui.createrailwaysnavigator.route_overview.connection_missed_info": "Debido a un retraso del tren, has perdido la conexión del tren. Busca una alternativa en el navegador. Pedimos disculpas por las molestias.", + "gui.createrailwaysnavigator.route_overview.train_canceled_info": "Información sobre %s: ¡Este tren está cancelado hoy! Pedimos disculpas por las molestias. Busca una alternativa en el navegador.", + "gui.createrailwaysnavigator.route_overview.train_canceled_title": "El tren ha sido cancelado", + "gui.createrailwaysnavigator.route_overview.journey_interrupted_info": "Tu viaje a %s no puede continuar. Busca una alternativa en el navegador.", + "gui.createrailwaysnavigator.route_overview.options": "Pulsa %s para opciones.", + "gui.createrailwaysnavigator.route_overview.notification.journey_begins.title": "¡Tu viaje a %s comienza!", + "gui.createrailwaysnavigator.route_overview.notification.journey_begins": "%s a %s, salida %s", + "gui.createrailwaysnavigator.route_overview.notification.journey_begins_with_platform": "%s a %s, salida %s desde el andén %s", + "gui.createrailwaysnavigator.route_overview.notification.platform_changed.title": "¡Tu andén ha cambiado!", + "gui.createrailwaysnavigator.route_overview.notification.platform_changed": "Tu tren en %s sale hoy desde el andén %s.", + "gui.createrailwaysnavigator.route_overview.notification.train_delayed.title": "%s: Llegada %s retrasada.", + "gui.createrailwaysnavigator.route_overview.notification.train_delayed": "%s en lugar de %s en %s", + "gui.createrailwaysnavigator.route_overview.notification.train_canceled.title": "%s: Tren cancelado", + "gui.createrailwaysnavigator.route_overview.notification.train_canceled": "%s a %s está cancelado hoy.", + "gui.createrailwaysnavigator.route_overview.notification.transfer.title": "Transbordo próximo", + "gui.createrailwaysnavigator.route_overview.notification.transfer": "Cambio a %s → %s en el andén %s", + "gui.createrailwaysnavigator.route_overview.notification.transfer_with_platform": "Cambio a %s → %s en el andén %s", + "gui.createrailwaysnavigator.route_overview.notification.connection_endangered.title": "¡Tu conexión está en peligro!", + "gui.createrailwaysnavigator.route_overview.notification.connection_endangered": "Probablemente no podrás llegar a %s a %s.", + "gui.createrailwaysnavigator.route_overview.notification.connection_missed.title": "Conexión perdida", + "gui.createrailwaysnavigator.route_overview.notification.connection_missed": "Has perdido tu tren de conexión %s a %s.", + "gui.createrailwaysnavigator.route_overview.notification.journey_completed.title": "¡Has llegado a tu destino!", + "gui.createrailwaysnavigator.route_overview.notification.journey_completed": "Gracias por viajar y que tengas un buen día", + "gui.createrailwaysnavigator.route_overview.date": "Día %s, %s", + + "gui.createrailwaysnavigator.global_settings.title": "Configuración global", + "gui.createrailwaysnavigator.global_settings.option.tooltip": "Haz clic para editar", + "gui.createrailwaysnavigator.global_settings.option_alias.title": "Etiquetas de estaciones de tren", + "gui.createrailwaysnavigator.global_settings.option_alias.description": "Define etiquetas de estaciones para tratar estaciones con múltiples andenes (por ejemplo, MiEstación 1, MiEstación 2, ...) como una sola estación (por ejemplo, MiEstación) con nombres personalizados.", + "gui.createrailwaysnavigator.global_settings.option_blacklist.title": "Lista negra de estaciones de tren", + "gui.createrailwaysnavigator.global_settings.option_blacklist.description": "Excluir estaciones de tren que no deberían aparecer en los resultados de navegación. Estas estaciones serán ignoradas al generar rutas.", + "gui.createrailwaysnavigator.global_settings.train_group.title": "Grupos de trenes", + "gui.createrailwaysnavigator.global_settings.train_group.description": "Crear grupos de trenes para organizar todos los trenes (por ejemplo, servicios regionales, servicios de larga distancia, ...). Los usuarios pueden decidir qué grupos quieren usar.", + "gui.createrailwaysnavigator.global_settings.train_blacklist.title": "Lista negra de trenes", + "gui.createrailwaysnavigator.global_settings.train_blacklist.description": "Excluir trenes, por ejemplo, trenes de carga, trenes especiales, etc., para que no se utilicen en las sugerencias de rutas.", + + "gui.createrailwaysnavigator.alias_settings.title": "Configuración de etiquetas de estaciones de tren", + "gui.createrailwaysnavigator.alias_settings.summary": "Contiene %s estaciones de tren", + "gui.createrailwaysnavigator.alias_settings.editor": "Última edición por %s el %s", + "gui.createrailwaysnavigator.alias_settings.add.tooltip": "Crear nueva entrada", + "gui.createrailwaysnavigator.alias_settings.delete_alias.tooltip": "Eliminar etiqueta", + "gui.createrailwaysnavigator.alias_settings.delete_station.tooltip": "Eliminar estación", + "gui.createrailwaysnavigator.alias_settings.add_station.tooltip": "Agregar estación", + "gui.createrailwaysnavigator.alias_settings.hint.station_name": "Nombre de la estación de tren", + "gui.createrailwaysnavigator.alias_settings.hint.platform": "Andén", + "gui.createrailwaysnavigator.alias_settings.enter_name": "Introduce el nombre aquí", + + "gui.createrailwaysnavigator.train_group_settings.title": "Configuración de grupos de trenes", + "gui.createrailwaysnavigator.train_group_settings.summary": "Contiene %s trenes", + "gui.createrailwaysnavigator.train_group_settings.editor": "Última edición por %s el %s", + "gui.createrailwaysnavigator.train_group_settings.delete_alias.tooltip": "Eliminar grupo", + "gui.createrailwaysnavigator.train_group_settings.delete_station.tooltip": "Eliminar tren", + "gui.createrailwaysnavigator.train_group_settings.add_station.tooltip": "Agregar tren", + + "gui.createrailwaysnavigator.blacklist.title": "Lista negra de estaciones de tren", + "gui.createrailwaysnavigator.blacklist.add.tooltip": "Agregar a la lista negra", + "gui.createrailwaysnavigator.blacklist.delete.tooltip": "Eliminar de la lista negra", + + "gui.createrailwaysnavigator.train_blacklist.title": "Lista negra de trenes", + "gui.createrailwaysnavigator.train_blacklist.add.tooltip": "Agregar a la lista negra", + "gui.createrailwaysnavigator.train_blacklist.delete.tooltip": "Eliminar de la lista negra", + + "gui.createrailwaysnavigator.search_settings.title": "Configuración de búsqueda", + "gui.createrailwaysnavigator.search_settings.transfer_time": "Tiempo mínimo de transbordo", + "gui.createrailwaysnavigator.search_settings.transfer_time.description": "El tiempo mínimo que debería estar disponible para cambiar de tren. (1h ~ 50 segundos en tiempo real)", + "gui.createrailwaysnavigator.search_settings.train_groups": "Filtro de categoría de trenes", + "gui.createrailwaysnavigator.search_settings.train_groups.description": "Decide qué trenes de qué categorías de trenes quieres utilizar.", + "gui.createrailwaysnavigator.search_settings.train_groups.overview": "%s categorías seleccionadas", + "gui.createrailwaysnavigator.search_settings.train_groups.overview.all": "Todos", + "gui.createrailwaysnavigator.search_settings.train_groups.overview.none": "Ninguno", + "gui.createrailwaysnavigator.search_settings.train_groups.tooltip.reset": "Restablecer filtro", + + "gui.createrailwaysnavigator.new_text_entry.add.tooltip": "Agregar", + + "gui.createrailwaysnavigator.time": "Hora: %s", + "gui.createrailwaysnavigator.time.now": "ahora", + "gui.createrailwaysnavigator.time_format.dhm": "%s días %s h. %s min.", + "gui.createrailwaysnavigator.time_format.hm": "%s h. %s min.", + "gui.createrailwaysnavigator.time_format.m": "%s min.", + + "gui.createrailwaysnavigator.platform": "Andén", + "gui.createrailwaysnavigator.departure": "Salida", + "gui.createrailwaysnavigator.destination": "Destino", + "gui.createrailwaysnavigator.line": "Línea", + "gui.createrailwaysnavigator.following_trains": "Trenes siguientes:", + "gui.createrailwaysnavigator.via": "a través de", + + "gui.createrailwaysnavigator.advanced_display_settings.title": "Configuración avanzada de la pantalla", + "gui.createrailwaysnavigator.advanced_display_settings.display_type": "Tipo de pantalla", + "gui.createrailwaysnavigator.advanced_display_settings.display_type.description": "Determina la información mostrada.", + "gui.createrailwaysnavigator.advanced_display_settings.info_type": "Tipo de información", + "gui.createrailwaysnavigator.advanced_display_settings.info_type.description": "Determina el detalle de la información.", + "gui.createrailwaysnavigator.advanced_display_settings.double_sided": "Doble cara", + + "enum.createrailwaysnavigator.display_info_type": "Tipo de información de la pantalla", + "enum.createrailwaysnavigator.display_info_type.description": "Determina cuánta información se debe mostrar en tu pantalla de visualización.", + "enum.createrailwaysnavigator.display_info_type.simple": "Simple", + "enum.createrailwaysnavigator.display_info_type.info.simple": "La pantalla solo mostrará la información más importante sin detalles adicionales.", + "enum.createrailwaysnavigator.display_info_type.detailed": "Detallado", + "enum.createrailwaysnavigator.display_info_type.info.detailed": "Se mostrará la información más importante con algunos detalles, como la velocidad del tren, las paradas intermedias, etc.", + "enum.createrailwaysnavigator.display_info_type.informative": "Informativo", + "enum.createrailwaysnavigator.display_info_type.info.informative": "Muestra toda la información que podría ser interesante y la presenta en un diseño elegante. No se recomienda para pantallas pequeñas, ya que el texto podría ser muy pequeño.", + + "enum.createrailwaysnavigator.display_type": "Tipo de pantalla", + "enum.createrailwaysnavigator.display_type.description": "El tipo de pantalla depende de su propósito.", + "enum.createrailwaysnavigator.display_type.train_destination": "Destino del tren", + "enum.createrailwaysnavigator.display_type.info.train_destination": "Destinado a ser utilizado fuera de los trenes, muestra información sobre el propio tren, como el nombre, el destino y (si se selecciona) las paradas intermedias y otra información.", + "enum.createrailwaysnavigator.display_type.passenger_information": "Información para pasajeros", + "enum.createrailwaysnavigator.display_type.info.passenger_information": "Representa las pantallas que se encuentran dentro de los trenes. Estas pantallas mostrarán la próxima parada, la dirección de salida y (si se selecciona) la velocidad del tren y una vista general de la ruta.", + "enum.createrailwaysnavigator.display_type.platform": "Pantalla de plataforma", + "enum.createrailwaysnavigator.display_type.info.platform": "Estas pantallas deben usarse en las plataformas de las estaciones de tren y muestran los próximos trenes que llegan con detalles adicionales si se seleccionan. ¡No se pueden usar en los trenes!", + + "enum.createrailwaysnavigator.side": "Lado", + "enum.createrailwaysnavigator.side.description": "El lado del bloque donde se debe renderizar la información.", + "enum.createrailwaysnavigator.side.front": "Lado frontal", + "enum.createrailwaysnavigator.side.info.front": "La información solo se renderizará en el lado frontal. Este es el comportamiento predeterminado.", + "enum.createrailwaysnavigator.side.both": "Ambos lados", + "enum.createrailwaysnavigator.side.info.both": "La información se renderizará en ambos lados.", + + "enum.createrailwaysnavigator.time_display": "Visualización del tTiempo", + "enum.createrailwaysnavigator.time_display.description": "Determina cómo se debe mostrar el tiempo.", + "enum.createrailwaysnavigator.time_display.abs": "ABS", + "enum.createrailwaysnavigator.time_display.info.abs": "ABS (absoluto)", + "enum.createrailwaysnavigator.time_display.eta": "ETA", + "enum.createrailwaysnavigator.time_display.info.eta": "ETA (tiempo estimado de llegada)", + + "create.display_source.advanced_display": "Pantallas avanzadas", + "gui.createrailwaysnavigator.display_source.advanced_display.train_name_width": "Ancho de columna del nombre del tren", + "gui.createrailwaysnavigator.display_source.advanced_display.train_name_width.description": "en píxeles de bloque. (Por defecto: 16)", + "gui.createrailwaysnavigator.display_source.advanced_display.platform_width": "Ancho de columna de plataforma", + "gui.createrailwaysnavigator.display_source.advanced_display.platform_width.description": "en píxeles de bloque. (Por defecto: Automático)", + + "createrailwaysnavigator.moin": "moin" +} From defad6261844d481e1722098f2a83893dc04b949 Mon Sep 17 00:00:00 2001 From: Albertosaurio65 Date: Sun, 2 Jun 2024 22:16:28 +0200 Subject: [PATCH 32/38] Update es_es.json --- .../resources/assets/createrailwaysnavigator/lang/es_es.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/src/main/resources/assets/createrailwaysnavigator/lang/es_es.json b/common/src/main/resources/assets/createrailwaysnavigator/lang/es_es.json index 958d9d1c..bbd4eacf 100644 --- a/common/src/main/resources/assets/createrailwaysnavigator/lang/es_es.json +++ b/common/src/main/resources/assets/createrailwaysnavigator/lang/es_es.json @@ -233,7 +233,7 @@ "enum.createrailwaysnavigator.side.both": "Ambos lados", "enum.createrailwaysnavigator.side.info.both": "La información se renderizará en ambos lados.", - "enum.createrailwaysnavigator.time_display": "Visualización del tTiempo", + "enum.createrailwaysnavigator.time_display": "Visualización del tiempo", "enum.createrailwaysnavigator.time_display.description": "Determina cómo se debe mostrar el tiempo.", "enum.createrailwaysnavigator.time_display.abs": "ABS", "enum.createrailwaysnavigator.time_display.info.abs": "ABS (absoluto)", From d061d804aea31715f4db102077e9ca9185cbe12a Mon Sep 17 00:00:00 2001 From: VGamerGroup <109788628+VGamerGroup@users.noreply.github.com> Date: Thu, 13 Jun 2024 22:58:56 +0300 Subject: [PATCH 33/38] add ru_ru.json --- .../createrailwaysnavigator/lang/ru_ru.json | 252 ++++++++++++++++++ 1 file changed, 252 insertions(+) create mode 100644 common/src/main/resources/assets/createrailwaysnavigator/lang/ru_ru.json diff --git a/common/src/main/resources/assets/createrailwaysnavigator/lang/ru_ru.json b/common/src/main/resources/assets/createrailwaysnavigator/lang/ru_ru.json new file mode 100644 index 00000000..fbd6779e --- /dev/null +++ b/common/src/main/resources/assets/createrailwaysnavigator/lang/ru_ru.json @@ -0,0 +1,252 @@ +{ + "advancement.createrailwaysnavigator.navigator": "Спасибо за поездку!", + "advancement.createrailwaysnavigator.navigator.description": "Создайте навигатор для поиска маршрутов следования поездов.", + "advancement.createrailwaysnavigator.advanced_display": "Не совсем 4k...", + "advancement.createrailwaysnavigator.advanced_display.description": "Обновите свои механические табло, чтобы на них отображалось больше информации, и даже разместите их в своих поездах.", + + "itemGroup.createrailwaysnavigator.tab": "Create: Навигатор железных дорог", + + "item.createrailwaysnavigator.navigator": "Железнодорожный навигатор", + "item.createrailwaysnavigator.navigator.tooltip.summary": "_Навигатор_ показывает возможные _пересадки к поездам_ и дополнительную информацию, такую как _остановки_, _данные в реальном времени_ и многое другое.", + + "block.createrailwaysnavigator.train_station_clock": "Станционные часы", + "block.createrailwaysnavigator.advanced_display_block": "Блок улучшенного механического табло", + "block.createrailwaysnavigator.advanced_display_block.tooltip.summary": "Используйте в _поездах_ в качестве _табло пункта назначения поезда_ или _табло информации для пассажиров_, а на станциях - в качестве _дисплея платформы,_ которые также отображают больше информации, чем обычные табло.", + "block.createrailwaysnavigator.advanced_display_block.tooltip.condition1": "ПКМ с гаячным ключом", + "block.createrailwaysnavigator.advanced_display_block.tooltip.behaviour1": "Открывает меню для _настройки дисплея._", + "block.createrailwaysnavigator.advanced_display": "Улучшенное механическое табло", + "block.createrailwaysnavigator.advanced_display.tooltip.summary": "Используйте в _поездах_ в качестве _табло пункта назначения поезда_ или _табло информации для пассажиров_, а на станциях - в качестве _дисплея платформы,_ которые также отображают больше информации, чем обычные табло.", + "block.createrailwaysnavigator.advanced_display.tooltip.condition1": "ПКМ с гаячным ключом", + "block.createrailwaysnavigator.advanced_display.tooltip.behaviour1": "Открывает меню для _настройки дисплея._", + "block.createrailwaysnavigator.advanced_display_small": "Малое улучшенное механическое табло", + "block.createrailwaysnavigator.advanced_display_small.tooltip.summary": "Используйте в _поездах_ в качестве _табло пункта назначения поезда_ или _табло информации для пассажиров_, а на станциях - в качестве _дисплея платформы,_ которые также отображают больше информации, чем обычные табло.", + "block.createrailwaysnavigator.advanced_display_small.tooltip.condition1": "ПКМ с гаячным ключом", + "block.createrailwaysnavigator.advanced_display_small.tooltip.behaviour1": "Открывает меню для _настройки дисплея._", + "block.createrailwaysnavigator.advanced_display_panel": "Панель улучшенного механического табло", + "block.createrailwaysnavigator.advanced_display_panel.tooltip.summary": "Используйте в _поездах_ в качестве _табло пункта назначения поезда_ или _табло информации для пассажиров_, а на станциях - в качестве _дисплея платформы,_ которые также отображают больше информации, чем обычные табло.", + "block.createrailwaysnavigator.advanced_display_panel.tooltip.condition1": "ПКМ с гаячным ключом", + "block.createrailwaysnavigator.advanced_display_panel.tooltip.behaviour1": "Открывает меню для _настройки дисплея._", + "block.createrailwaysnavigator.advanced_display_half_panel": "Полупанель улучшенного механического табло", + "block.createrailwaysnavigator.advanced_display_half_panel.tooltip.summary": "Используйте в _поездах_ в качестве _табло пункта назначения поезда_ или _табло информации для пассажиров_, а на станциях - в качестве _дисплея платформы,_ которые также отображают больше информации, чем обычные табло.", + "block.createrailwaysnavigator.advanced_display_half_panel.tooltip.condition1": "ПКМ с гаячным ключом", + "block.createrailwaysnavigator.advanced_display_half_panel.tooltip.behaviour1": "Открывает меню для _настройки дисплея._", + "block.createrailwaysnavigator.advanced_display_sloped": "Наклонное улучшенное механическое табло", + "block.createrailwaysnavigator.advanced_display_sloped.tooltip.summary": "Используйте в _поездах_ в качестве _табло пункта назначения поезда_ или _табло информации для пассажиров_, а на станциях - в качестве _дисплея платформы,_ которые также отображают больше информации, чем обычные табло.", + "block.createrailwaysnavigator.advanced_display_sloped.tooltip.condition1": "ПКМ с гаячным ключом", + "block.createrailwaysnavigator.advanced_display_sloped.tooltip.behaviour1": "Открывает меню для _настройки дисплея._", + + "block.createrailwaysnavigator.advanced_display.ber.not_in_service": "Вышел из строя!", + "block.createrailwaysnavigator.advanced_display.ber.shunting_trip": "Поездка без пассажиров", + + "category.createrailwaysnavigator.crn": "Create: Навигатор железных дорог", + "key.createrailwaysnavigator.route_overlay_options": "Показать параметры наложения маршрута", + + "enum.createrailwaysnavigator.overlay_position": "Позиция наложения", + "enum.createrailwaysnavigator.overlay_position.info.top_left": "Левый верхний угол", + "enum.createrailwaysnavigator.overlay_position.info.top_right": "Правый верхний угол", + "enum.createrailwaysnavigator.overlay_position.info.bottom_left": "Левый нижний угол", + "enum.createrailwaysnavigator.overlay_position.info.bottom_right": "Правый нижний угол", + + "gui.createrailwaysnavigator.loading.title": "Загрузка данных с сервера...", + + "gui.createrailwaysnavigator.overlay_settings.title": "Настройки наложения маршрута", + "gui.createrailwaysnavigator.route_overlay_settings.show_details": "Показать детали", + "gui.createrailwaysnavigator.route_overlay_settings.unpin": "Удалить наложение маршрута", + "gui.createrailwaysnavigator.route_overlay_settings.narrator.on": "Объявления диктора включены.", + "gui.createrailwaysnavigator.route_overlay_settings.narrator.off": "Объявления диктора выключены.", + "gui.createrailwaysnavigator.route_overlay_settings.notifications.on": "Уведомления включены", + "gui.createrailwaysnavigator.route_overlay_settings.notifications.off": "Уведомления выключены", + "gui.createrailwaysnavigator.route_overlay_settings.scale": "Масштаб наложения", + "gui.createrailwaysnavigator.route_overlay_settings.narrator": "Объявления диктора", + "gui.createrailwaysnavigator.route_overlay_settings.narrator.description": "Диктор объявляет о важных событиях в вашем путешествии, например, о следующей остановке, пересадках и т.д.", + "gui.createrailwaysnavigator.route_overlay_settings.notifications": "Уведомления", + "gui.createrailwaysnavigator.route_overlay_settings.notifications.description": "Получайте мгновенные уведомления о важных событиях в вашем путешествии, например, о следующей остановке, пересадках и т.д.", + + "gui.createrailwaysnavigator.common.expand": "Показать детали", + "gui.createrailwaysnavigator.common.collapse": "Скрыть детали", + "gui.createrailwaysnavigator.common.go_back": "Вернуться", + "gui.createrailwaysnavigator.common.go_to_top": "Прокрутить к началу", + "gui.createrailwaysnavigator.common.reset_defaults": "Сбросить по умолчанию", + "gui.createrailwaysnavigator.common.count": "Количество", + "gui.createrailwaysnavigator.common.true": "Да", + "gui.createrailwaysnavigator.common.false": "Нет", + "gui.createrailwaysnavigator.common.search": "Поиск", + "gui.createrailwaysnavigator.common.auto": "Авто", + "gui.createrailwaysnavigator.common.server_error": "Ошибка сервера при выполнении задачи. Подробности смотрите в консоли.", + + "gui.createrailwaysnavigator.navigator.title": "Железнодорожный навигатор", + "gui.createrailwaysnavigator.navigator.no_connections": "Никаких маршрутов не найдено.", + "gui.createrailwaysnavigator.navigator.not_searched": "Пока ничего не найдено.", + "gui.createrailwaysnavigator.navigator.searching": "Поиск маршрутов", + "gui.createrailwaysnavigator.navigator.error_title": "Не удаётся сориентироваться!", + "gui.createrailwaysnavigator.navigator.start_end_null": "Начальная точка или пункт назначения пусты.", + "gui.createrailwaysnavigator.navigator.start_end_equal": "Начало и пункт назначения одинаковы.", + "gui.createrailwaysnavigator.navigator.route_entry.connection_in_past": "❌ Связь в прошлом", + "gui.createrailwaysnavigator.navigator.route_entry.transfer": "Поезда.", + "gui.createrailwaysnavigator.navigator.route_entry.station_start": "от %s", + "gui.createrailwaysnavigator.navigator.global_settings.tooltip": "Глобальные настройки", + "gui.createrailwaysnavigator.navigator.search_settings.tooltip": "Поиск настроек", + "gui.createrailwaysnavigator.navigator.search.tooltip": "Поиск", + "gui.createrailwaysnavigator.navigator.location.tooltip": "Ближайшая станция", + "gui.createrailwaysnavigator.navigator.switch.tooltip": "Переключить поля", + + "gui.createrailwaysnavigator.route_details.title": "Детали маршрута", + "gui.createrailwaysnavigator.route_details.departure": "Отправление через", + "gui.createrailwaysnavigator.route_details.next_transfer_time": "Пересадка на", + "gui.createrailwaysnavigator.route_details.transfer": "Пересадка", + "gui.createrailwaysnavigator.route_details.save_route": "Сохранить соединение", + + "gui.createrailwaysnavigator.route_overview.title": "Детали маршрута", + "gui.createrailwaysnavigator.route_overview.journey_begins": "Ваше поездка начинается! %s в сторону %s, отправление в %s", + "gui.createrailwaysnavigator.route_overview.journey_begins_with_platform": "Ваша поездка начинается! %s в сторону %s, отправление в %s на платформе %s", + "gui.createrailwaysnavigator.route_overview.train_details": "%s в сторону %s", + "gui.createrailwaysnavigator.route_overview.next_stop": "Следующая остановка: %s", + "gui.createrailwaysnavigator.route_overview.transfer": "Пересесть с %s на %s", + "gui.createrailwaysnavigator.route_overview.transfer_with_platform": "Пересядте с %s на %s на платформе %s", + "gui.createrailwaysnavigator.route_overview.journey_completed": "Поездка окончена", + "gui.createrailwaysnavigator.route_overview.after_journey": "Вы достигли станции %s. Спасибо за поездку.", + "gui.createrailwaysnavigator.route_overview.next_connections": "Пересадки на", + "gui.createrailwaysnavigator.route_overview.schedule_transfer": "Пересадка", + "gui.createrailwaysnavigator.route_overview.train_canceled": "Поезд отменён", + "gui.createrailwaysnavigator.route_overview.train_cancellation_info": "Информация о %s", + "gui.createrailwaysnavigator.route_overview.stop_canceled": "❌ отменено", + "gui.createrailwaysnavigator.route_overview.connection_endangered": "Соединение под угрозой", + "gui.createrailwaysnavigator.route_overview.connection_missed": "Соединение потеряно", + "gui.createrailwaysnavigator.route_overview.connection_canceled": "Поезд отменён", + "gui.createrailwaysnavigator.route_overview.journey_interrupted": "Ваша поездка к %s не может быть продолжена.", + "gui.createrailwaysnavigator.route_overview.connection_missed_info": "Из-за задержки поезда вы опоздали на стыковочный поезд. Найдите альтернативный вариант в навигаторе. Приносим извинения за доставленные неудобства.", + "gui.createrailwaysnavigator.route_overview.train_canceled_info": "Информация о %s: Этот поезд сегодня отменен! Приносим извинения за доставленные неудобства. Найдите альтернативный вариант в навигаторе.", + "gui.createrailwaysnavigator.route_overview.train_canceled_title": "Поезд был отменен", + "gui.createrailwaysnavigator.route_overview.journey_interrupted_info": "Вашу поездку к %s невозможно продолжить. Выполните поиск альтернативного маршрута в навигаторе.", + "gui.createrailwaysnavigator.route_overview.options": "Нажмите %s для опций", + "gui.createrailwaysnavigator.route_overview.notification.journey_begins.title": "Ваша поездка к %s начинается!", + "gui.createrailwaysnavigator.route_overview.notification.journey_begins": "%s в сторону %s, отправление в %s", + "gui.createrailwaysnavigator.route_overview.notification.journey_begins_with_platform": "%s в сторону %s, отпрвление %s от платформы %s", + "gui.createrailwaysnavigator.route_overview.notification.platform_changed.title": "Ваша платформа изменилась!", + "gui.createrailwaysnavigator.route_overview.notification.platform_changed": "Ваш поезд в %s отходит от платформы %s сегодня.", + "gui.createrailwaysnavigator.route_overview.notification.train_delayed.title": "%s: прибытие %s задержка.", + "gui.createrailwaysnavigator.route_overview.notification.train_delayed": "%s вместо %s на %s", + "gui.createrailwaysnavigator.route_overview.notification.train_canceled.title": "%s: Поезд отменён", + "gui.createrailwaysnavigator.route_overview.notification.train_canceled": "%s в сторону %s отменён сегодня.", + "gui.createrailwaysnavigator.route_overview.notification.transfer.title": "Пересадка скоро", + "gui.createrailwaysnavigator.route_overview.notification.transfer": "Изменить %s → %s на платформе %s", + "gui.createrailwaysnavigator.route_overview.notification.transfer_with_platform": "Изменить %s → %s на платформе %s", + "gui.createrailwaysnavigator.route_overview.notification.connection_endangered.title": "Ваше соединение находится под угрозой!", + "gui.createrailwaysnavigator.route_overview.notification.connection_endangered": "Вероятно, Вы не сможете добраться из %s в %s.", + "gui.createrailwaysnavigator.route_overview.notification.connection_missed.title": "Пропущенное соединение", + "gui.createrailwaysnavigator.route_overview.notification.connection_missed": "Вы опоздали на свой стыковочный поезд %s в сторону %s.", + "gui.createrailwaysnavigator.route_overview.notification.journey_completed.title": "Вы достигли места назначения!", + "gui.createrailwaysnavigator.route_overview.notification.journey_completed": "Спасибо за поездку", + "gui.createrailwaysnavigator.route_overview.date": "День %s, %s", + + "gui.createrailwaysnavigator.global_settings.title": "Глобальные настройки", + "gui.createrailwaysnavigator.global_settings.option.tooltip": "Нажмите, чтобы изменить", + "gui.createrailwaysnavigator.global_settings.option_alias.title": "Теги станции", + "gui.createrailwaysnavigator.global_settings.option_alias.description": "Нужны для объединения многоплатформенных станций в единую с пользовательским именем для навигатора. (Нужно для создания ТПУ)", + "gui.createrailwaysnavigator.global_settings.option_blacklist.title": "Чёрный список станций", + "gui.createrailwaysnavigator.global_settings.option_blacklist.description": "Исключите станции из результатов навигации. Они будут игнорироваться при создании маршрутов.", + "gui.createrailwaysnavigator.global_settings.train_group.title": "Группы поездов", + "gui.createrailwaysnavigator.global_settings.train_group.description": "Проведите классификацию поездов (например, региональные, междугородние и т.д.). Игроки могут сами выбирать группы.", + "gui.createrailwaysnavigator.global_settings.train_blacklist.title": "Чёрный список поездов", + "gui.createrailwaysnavigator.global_settings.train_blacklist.description": "Исключите поезда, например, грузовые, специальные и т.д., чтобы они не использовались в предложениях по маршруту.", + + "gui.createrailwaysnavigator.alias_settings.title": "Настройки тегов станций", + "gui.createrailwaysnavigator.alias_settings.summary": "Количество станций: %s", + "gui.createrailwaysnavigator.alias_settings.editor": "Изменён %s в %s", + "gui.createrailwaysnavigator.alias_settings.add.tooltip": "Создать новую запись", + "gui.createrailwaysnavigator.alias_settings.delete_alias.tooltip": "Удалить тег", + "gui.createrailwaysnavigator.alias_settings.delete_station.tooltip": "Удалить станцию", + "gui.createrailwaysnavigator.alias_settings.add_station.tooltip": "Добавить станцию", + "gui.createrailwaysnavigator.alias_settings.hint.station_name": "Имя станции", + "gui.createrailwaysnavigator.alias_settings.hint.platform": "Платформа", + "gui.createrailwaysnavigator.alias_settings.enter_name": "Ввести имя здесь", + + "gui.createrailwaysnavigator.train_group_settings.title": "Найстройки групп поездов", + "gui.createrailwaysnavigator.train_group_settings.summary": "Включает %s Tпоездов", + "gui.createrailwaysnavigator.train_group_settings.editor": "Изменено %s в %s", + "gui.createrailwaysnavigator.train_group_settings.delete_alias.tooltip": "Удалить группу", + "gui.createrailwaysnavigator.train_group_settings.delete_station.tooltip": "Удалить поезд", + "gui.createrailwaysnavigator.train_group_settings.add_station.tooltip": "Добавить поезд", + + "gui.createrailwaysnavigator.blacklist.title": "Чёрный список станций", + "gui.createrailwaysnavigator.blacklist.add.tooltip": "Добавить в ЧС", + "gui.createrailwaysnavigator.blacklist.delete.tooltip": "Удалить из ЧС", + + "gui.createrailwaysnavigator.train_blacklist.title": "Чёрный список поездов", + "gui.createrailwaysnavigator.train_blacklist.add.tooltip": "Добавить в ЧС", + "gui.createrailwaysnavigator.train_blacklist.delete.tooltip": "Удалить из ЧС", + + "gui.createrailwaysnavigator.search_settings.title": "Поиск настроек", + "gui.createrailwaysnavigator.search_settings.transfer_time": "Минимальное время пересадки", + "gui.createrailwaysnavigator.search_settings.transfer_time.description": "Минимальное время для пересадки на поезд. (1h ~ 50 реальных секунд)", + "gui.createrailwaysnavigator.search_settings.train_groups": "Фильтер категории поезда", + "gui.createrailwaysnavigator.search_settings.train_groups.description": "Какой категории поездов Вы хотите воспользоваться.", + "gui.createrailwaysnavigator.search_settings.train_groups.overview": "%s", + "gui.createrailwaysnavigator.search_settings.train_groups.overview.all": "Выбраны все категории", + "gui.createrailwaysnavigator.search_settings.train_groups.overview.none": "Ни одна из категорий не выбрана", + "gui.createrailwaysnavigator.search_settings.train_groups.tooltip.reset": "Сбросить фильтры", + + "gui.createrailwaysnavigator.new_text_entry.add.tooltip": "Добавить", + + "gui.createrailwaysnavigator.time": "Время: %s", + "gui.createrailwaysnavigator.time.now": "0 сек", + "gui.createrailwaysnavigator.time_format.dhm": "%s дней %s часов %s мин.", + "gui.createrailwaysnavigator.time_format.hm": "%s часов. %s мин.", + "gui.createrailwaysnavigator.time_format.m": "%s мин.", + + "gui.createrailwaysnavigator.platform": "Платформа", + "gui.createrailwaysnavigator.departure": "Отправление", + "gui.createrailwaysnavigator.destination": "Пункт назначения", + "gui.createrailwaysnavigator.line": "Линия", + "gui.createrailwaysnavigator.following_trains": "Следующие поезда:", + "gui.createrailwaysnavigator.via": "к станции", + + "gui.createrailwaysnavigator.advanced_display_settings.title": "Настройки улучшенного дисплея", + "gui.createrailwaysnavigator.advanced_display_settings.display_type": "Тип дисплея", + "gui.createrailwaysnavigator.advanced_display_settings.display_type.description": "Определяет отображаемую информацию.", + "gui.createrailwaysnavigator.advanced_display_settings.info_type": "Тип информации", + "gui.createrailwaysnavigator.advanced_display_settings.info_type.description": "Определяет, насколько подробной является информация.", + "gui.createrailwaysnavigator.advanced_display_settings.double_sided": "Двухсторонний", + + "enum.createrailwaysnavigator.display_info_type": "Тип информации дисплея", + "enum.createrailwaysnavigator.display_info_type.description": "Определяет, какой объем информации должен отображаться на вашем дисплее.", + "enum.createrailwaysnavigator.display_info_type.simple": "Простой", + "enum.createrailwaysnavigator.display_info_type.info.simple": "На дисплее будет отображаться только самая важная информация без каких-либо дополнительных подробностей.", + "enum.createrailwaysnavigator.display_info_type.detailed": "Подробный", + "enum.createrailwaysnavigator.display_info_type.info.detailed": "Будет показана наиболее важная информация с некоторыми подробностями, такими как скорость поезда, остановки в пути и т.д.", + "enum.createrailwaysnavigator.display_info_type.informative": "Информативный", + "enum.createrailwaysnavigator.display_info_type.info.informative": "Отображает всю информацию, которая может быть интересна, и представляет ее в необычном формате. Не рекомендуется для небольших дисплеев, так как текст может стать очень мелким.", + + "enum.createrailwaysnavigator.display_type": "Тип дисплея", + "enum.createrailwaysnavigator.display_type.description": "Тип вашего дисплея зависит от его назначения.", + "enum.createrailwaysnavigator.display_type.train_destination": "Табло пункта назначения поезда", + "enum.createrailwaysnavigator.display_type.info.train_destination": "Предназначен для использования вне поездов, поскольку он отображает информацию о самом поезде, такую как название, пункт назначения и (если выбрано) промежуточные остановки, а также другую информацию.", + "enum.createrailwaysnavigator.display_type.passenger_information": "Информатор для пассажиров", + "enum.createrailwaysnavigator.display_type.info.passenger_information": "Отображает дисплеи, расположенные внутри поездов. На этих дисплеях будут отображаться следующая остановка, направление выхода и (если выбрано) скорость движения поезда, а также обзор маршрута.", + "enum.createrailwaysnavigator.display_type.platform": "Дисплей платформы", + "enum.createrailwaysnavigator.display_type.info.platform": "Эти дисплеи следует использовать на платформах железнодорожных вокзалов, и на них отображаются следующие поезда с дополнительной информацией, если они выбраны. Нельзя использовать в поездах!", + + "enum.createrailwaysnavigator.side": "Сторона", + "enum.createrailwaysnavigator.side.description": "Сторона блока, на которой должна отображаться информация.", + "enum.createrailwaysnavigator.side.front": "Лицевая сторона", + "enum.createrailwaysnavigator.side.info.front": "Информация будет отображаться только на лицевой стороне. Это поведение по умолчанию.", + "enum.createrailwaysnavigator.side.both": "Обе стороны", + "enum.createrailwaysnavigator.side.info.both": "Информация будет отображаться с обеих сторон.", + + "enum.createrailwaysnavigator.time_display": "Отображение времени", + "enum.createrailwaysnavigator.time_display.description": "Определяет, как должно отображаться время.", + "enum.createrailwaysnavigator.time_display.abs": "АБС", + "enum.createrailwaysnavigator.time_display.info.abs": "АБС (Абсолютное)", + "enum.createrailwaysnavigator.time_display.eta": "ПВП", + "enum.createrailwaysnavigator.time_display.info.eta": "ПВП (Предполагаемое время прибытия)", + + "create.display_source.advanced_display": "Улучшенные дисплеи", + "gui.createrailwaysnavigator.display_source.advanced_display.train_name_width": "Ширина столбца с названием поезда", + "gui.createrailwaysnavigator.display_source.advanced_display.train_name_width.description": "в пикселях блока. (По умолчанию: 16)", + "gui.createrailwaysnavigator.display_source.advanced_display.platform_width": "Ширина колонны платформы", + "gui.createrailwaysnavigator.display_source.advanced_display.platform_width.description": "в пикселях блока. (По умолчанию: Авто)", + + "createrailwaysnavigator.moin": "moin", + + "_": "Над переводом работал VGamerGroup" +} \ No newline at end of file From 312fb47ee1d74642bce107492686725fbb885b76 Mon Sep 17 00:00:00 2001 From: GeoffreyGx Date: Wed, 10 Jul 2024 20:57:26 +0200 Subject: [PATCH 34/38] Added french translation --- .../createrailwaysnavigator/lang/fr_fr.json | 250 ++++++++++++++++++ 1 file changed, 250 insertions(+) create mode 100644 common/src/main/resources/assets/createrailwaysnavigator/lang/fr_fr.json diff --git a/common/src/main/resources/assets/createrailwaysnavigator/lang/fr_fr.json b/common/src/main/resources/assets/createrailwaysnavigator/lang/fr_fr.json new file mode 100644 index 00000000..4f4f4958 --- /dev/null +++ b/common/src/main/resources/assets/createrailwaysnavigator/lang/fr_fr.json @@ -0,0 +1,250 @@ +{ + "advancement.createrailwaysnavigator.navigator": "Merci d'avoir voyagé", + "advancement.createrailwaysnavigator.navigator.description": "Crafter un Navigateur pour trouver une connection entre une station et une autre.", + "advancement.createrailwaysnavigator.advanced_display": "Pas vraiment 4k", + "advancement.createrailwaysnavigator.advanced_display.description": "Améliorer vos tableaux d'affichage pour afficher plus d'information et même les placer dans vos trains.", + + "itemGroup.createrailwaysnavigator.tab": "Create Railways Navigator", + + "item.createrailwaysnavigator.navigator": "Create Navigateur Ferroviaire", + "item.createrailwaysnavigator.navigator.tooltip.summary": "Le _navigateur_ montre les _correspondances_ possibles avec des informations supplémentaires comme les _escales_, des _informations en temps réel_ et plus encore.", + + "block.createrailwaysnavigator.train_station_clock": "Horloge de Gare", + "block.createrailwaysnavigator.advanced_display_block": "Bloc d'Affichage Avancé", + "block.createrailwaysnavigator.advanced_display_block.tooltip.summary": "Utiliser le sur des _trains_, comme _affichage de la destination_ ou _affichage pour les passagers_, ou dans des _stations de trains_ comme des _affichage de quai_ amélioré qui montre plus d'informations que des tableaux d'affichage classique.", + "block.createrailwaysnavigator.advanced_display_block.tooltip.condition1": "Quand click-droit en utilisant une clé", + "block.createrailwaysnavigator.advanced_display_block.tooltip.behaviour1": "Ouvre un menu pour _configurer_ l'_affichage_.", + "block.createrailwaysnavigator.advanced_display": "Tableau d'Affichage Avancé", + "block.createrailwaysnavigator.advanced_display.tooltip.summary": "Utiliser le sur des _trains_, comme _affichage de la destination_ ou _affichage pour les passagers_, ou dans des _stations de trains_ comme des _affichage de quai_ amélioré qui montre plus d'informations que des tableaux d'affichage classique.", + "block.createrailwaysnavigator.advanced_display.tooltip.condition1": "Quand click-droit en utilisant une clé", + "block.createrailwaysnavigator.advanced_display.tooltip.behaviour1": "Ouvre un menu pour _configurer_ l'_affichage_.", + "block.createrailwaysnavigator.advanced_display_small": "Petit Écran Avancé", + "block.createrailwaysnavigator.advanced_display_small.tooltip.summary": "Utiliser le sur des _trains_, comme _affichage de la destination_ ou _affichage pour les passagers_, ou dans des _stations de trains_ comme des _affichage de quai_ amélioré qui montre plus d'informations que des tableaux d'affichage classique.", + "block.createrailwaysnavigator.advanced_display_small.tooltip.condition1": "Quand click-droit en utilisant une clé", + "block.createrailwaysnavigator.advanced_display_small.tooltip.behaviour1": "Ouvre un menu pour _configurer_ l'_affichage_.", + "block.createrailwaysnavigator.advanced_display_panel": "Panneau d'Affichage Avancé", + "block.createrailwaysnavigator.advanced_display_panel.tooltip.summary": "Utiliser le sur des _trains_, comme _affichage de la destination_ ou _affichage pour les passagers_, ou dans des _stations de trains_ comme des _affichage de quai_ amélioré qui montre plus d'informations que des tableaux d'affichage classique.", + "block.createrailwaysnavigator.advanced_display_panel.tooltip.condition1": "Quand click-droit en utilisant une clé", + "block.createrailwaysnavigator.advanced_display_panel.tooltip.behaviour1": "Ouvre un menu pour _configurer_ l'_affichage_.", + "block.createrailwaysnavigator.advanced_display_half_panel": "Demi-Panneau d'Affichage Avancé", + "block.createrailwaysnavigator.advanced_display_half_panel.tooltip.summary": "Utiliser le sur des _trains_, comme _affichage de la destination_ ou _affichage pour les passagers_, ou dans des _stations de trains_ comme des _affichage de quai_ amélioré qui montre plus d'informations que des tableaux d'affichage classique.", + "block.createrailwaysnavigator.advanced_display_half_panel.tooltip.condition1": "Quand click-droit en utilisant une clé", + "block.createrailwaysnavigator.advanced_display_half_panel.tooltip.behaviour1": "Ouvre un menu pour _configurer_ l'_affichage_.", + "block.createrailwaysnavigator.advanced_display_sloped": "Affichage Incliné Avancé", + "block.createrailwaysnavigator.advanced_display_sloped.tooltip.summary": "Utiliser le sur des _trains_, comme _affichage de la destination_ ou _affichage pour les passagers_, ou dans des _stations de trains_ comme des _affichage de quai_ amélioré qui montre plus d'informations que des tableaux d'affichage classique.", + "block.createrailwaysnavigator.advanced_display_sloped.tooltip.condition1": "Quand click-droit en utilisant une clé", + "block.createrailwaysnavigator.advanced_display_sloped.tooltip.behaviour1": "Ouvre un menu pour _configurer_ l'_affichage_.", + + "block.createrailwaysnavigator.advanced_display.ber.not_in_service": "Hors service!", + "block.createrailwaysnavigator.advanced_display.ber.shunting_trip": "train non-passagers", + + "category.createrailwaysnavigator.crn": "Create Railways Navigator", + "key.createrailwaysnavigator.route_overlay_options": "Afficher les Options de l'Overlay d'Itinéraire", + + "enum.createrailwaysnavigator.overlay_position": "Position de l'Affichage", + "enum.createrailwaysnavigator.overlay_position.info.top_left": "Coin Supérieur Gauche", + "enum.createrailwaysnavigator.overlay_position.info.top_right": "Coin Supérieur Droit", + "enum.createrailwaysnavigator.overlay_position.info.bottom_left": "Coin Inférieur Gauche", + "enum.createrailwaysnavigator.overlay_position.info.bottom_right": "Coin Inférieur Droit", + + "gui.createrailwaysnavigator.loading.title": "Téléchargement des données du serveur...", + + "gui.createrailwaysnavigator.overlay_settings.title": "Paramètres de l'Overlay d'Itinéraire", + "gui.createrailwaysnavigator.route_overlay_settings.show_details": "Afficher les détails", + "gui.createrailwaysnavigator.route_overlay_settings.unpin": "Enlever l'overlay d'itinéraire", + "gui.createrailwaysnavigator.route_overlay_settings.narrator.on": "Annonces du narrateur activées.", + "gui.createrailwaysnavigator.route_overlay_settings.narrator.off": "Annonces du narrateur désactivées.", + "gui.createrailwaysnavigator.route_overlay_settings.notifications.on": "Notifications activées", + "gui.createrailwaysnavigator.route_overlay_settings.notifications.off": "Notifications désactivées", + "gui.createrailwaysnavigator.route_overlay_settings.scale": "Taille de l'interface", + "gui.createrailwaysnavigator.route_overlay_settings.narrator": "Annonces du narrateur", + "gui.createrailwaysnavigator.route_overlay_settings.narrator.description": "Le Narrateur annonce des évènements importants sur votre trajet, ex. le prochain arrêt, des changements, etc.", + "gui.createrailwaysnavigator.route_overlay_settings.notifications": "Notifications", + "gui.createrailwaysnavigator.route_overlay_settings.notifications.description": "Obtenez des notifications en pop-up à propos d'évènements importants sur votre trajet, ex. le prochain arrêt, des changements, etc.", + + "gui.createrailwaysnavigator.common.expand": "Afficher les détails", + "gui.createrailwaysnavigator.common.collapse": "Cacher les détails", + "gui.createrailwaysnavigator.common.go_back": "Retour", + "gui.createrailwaysnavigator.common.go_to_top": "Aller en haut", + "gui.createrailwaysnavigator.common.reset_defaults": "Réinitialiser aux valeurs par défaut", + "gui.createrailwaysnavigator.common.count": "Compte", + "gui.createrailwaysnavigator.common.true": "Oui", + "gui.createrailwaysnavigator.common.false": "Non", + "gui.createrailwaysnavigator.common.search": "Rechercher", + "gui.createrailwaysnavigator.common.auto": "Auto", + "gui.createrailwaysnavigator.common.server_error": "Erreur serveur lors de l'éxecution de la tâche. Regarder la console pour en savoir plus.", + + "gui.createrailwaysnavigator.navigator.title": "Create Railways Navigator", + "gui.createrailwaysnavigator.navigator.no_connections": "Aucun trajet trouvé.", + "gui.createrailwaysnavigator.navigator.not_searched": "Rien n'a été recherché.", + "gui.createrailwaysnavigator.navigator.searching": "Recherche d'un trajet...", + "gui.createrailwaysnavigator.navigator.error_title": "Impossible de naviguer!", + "gui.createrailwaysnavigator.navigator.start_end_null": "Le départ ou la destination est vide.", + "gui.createrailwaysnavigator.navigator.start_end_equal": "Le départ et la destination sont égals.", + "gui.createrailwaysnavigator.navigator.route_entry.connection_in_past": "❌ Trajet dans le passé", + "gui.createrailwaysnavigator.navigator.route_entry.transfer": "Connec.", + "gui.createrailwaysnavigator.navigator.route_entry.station_start": "à partir de %s", + "gui.createrailwaysnavigator.navigator.global_settings.tooltip": "Paramètres globaux", + "gui.createrailwaysnavigator.navigator.search_settings.tooltip": "Paramètres de recherche", + "gui.createrailwaysnavigator.navigator.search.tooltip": "Recherche", + "gui.createrailwaysnavigator.navigator.location.tooltip": "Gare la plus proche de votre position", + "gui.createrailwaysnavigator.navigator.switch.tooltip": "Inverser le point de départ et la destination", + + "gui.createrailwaysnavigator.route_details.title": "Détail du trajet", + "gui.createrailwaysnavigator.route_details.departure": "Départ dans", + "gui.createrailwaysnavigator.route_details.next_transfer_time": "Correspondance dans", + "gui.createrailwaysnavigator.route_details.transfer": "Correspondance", + "gui.createrailwaysnavigator.route_details.save_route": "Enregistrer le trajet", + + "gui.createrailwaysnavigator.route_overview.title": "Détail du trajet", + "gui.createrailwaysnavigator.route_overview.journey_begins": "Votre trajet commence! %s à %s, départ %s", + "gui.createrailwaysnavigator.route_overview.journey_begins_with_platform": "Votre trajet commence! %s à %s, départ %s sur le quai %s", + "gui.createrailwaysnavigator.route_overview.train_details": "%s à %s", + "gui.createrailwaysnavigator.route_overview.next_stop": "Prochain arrêt: %s", + "gui.createrailwaysnavigator.route_overview.transfer": "Correspondance entre %s → %s", + "gui.createrailwaysnavigator.route_overview.transfer_with_platform": "Correspondance entre %s → %s sur le quai %s", + "gui.createrailwaysnavigator.route_overview.journey_completed": "Trajet terminé!", + "gui.createrailwaysnavigator.route_overview.after_journey": "Vous êtes arrivés à %s. Merci d'avoir voyagé et passez une bonne journée.", + "gui.createrailwaysnavigator.route_overview.next_connections": "Prochains trajets", + "gui.createrailwaysnavigator.route_overview.schedule_transfer": "Correspondance", + "gui.createrailwaysnavigator.route_overview.train_canceled": "Train Annulé", + "gui.createrailwaysnavigator.route_overview.train_cancellation_info": "Information à propos de %s", + "gui.createrailwaysnavigator.route_overview.stop_canceled": "❌ Annulé", + "gui.createrailwaysnavigator.route_overview.connection_endangered": "Correspondance en danger", + "gui.createrailwaysnavigator.route_overview.connection_missed": "Correspondance manqué", + "gui.createrailwaysnavigator.route_overview.connection_canceled": "Train annulé", + "gui.createrailwaysnavigator.route_overview.journey_interrupted": "Votre trajet vers %s ne peut se poursuivre.", + "gui.createrailwaysnavigator.route_overview.connection_missed_info": "A cause d'un retard, vous avez manqué votre correspondace. Rechercher une alternative dans le Navigateur. Nous nous excusons pour le dérangement.", + "gui.createrailwaysnavigator.route_overview.train_canceled_info": "Information à propos de %s: Ce train a été annulé pour aujourd'hui! Nous nous excusons pour le dérangement. Rechercher une alternative dans le Navigateur.", + "gui.createrailwaysnavigator.route_overview.train_canceled_title": "Le train a été annulé", + "gui.createrailwaysnavigator.route_overview.journey_interrupted_info": "Votre trajet vers %s ne peut pas se poursuivre. Rechercher une alternative dans le Navigateur.", + "gui.createrailwaysnavigator.route_overview.options": "Appuyer sur %s pour les options.", + "gui.createrailwaysnavigator.route_overview.notification.journey_begins.title": "Votre trajet vers %s commence!", + "gui.createrailwaysnavigator.route_overview.notification.journey_begins": "%s vers %s, départ %s", + "gui.createrailwaysnavigator.route_overview.notification.journey_begins_with_platform": "%s vers %s, départ %s depuis le quai %s", + "gui.createrailwaysnavigator.route_overview.notification.platform_changed.title": "Votre quai a changé!", + "gui.createrailwaysnavigator.route_overview.notification.platform_changed": "Votre train dans %s part du quai %s aujourd'hui.", + "gui.createrailwaysnavigator.route_overview.notification.train_delayed.title": "%s: Départ %s retardé.", + "gui.createrailwaysnavigator.route_overview.notification.train_delayed": "%s au lieu de %s dans %s", + "gui.createrailwaysnavigator.route_overview.notification.train_canceled.title": "%s: Train annulé", + "gui.createrailwaysnavigator.route_overview.notification.train_canceled": "%s vers %s est annulé aujourd'hui.", + "gui.createrailwaysnavigator.route_overview.notification.transfer.title": "Votre correspondance est en approche", + "gui.createrailwaysnavigator.route_overview.notification.transfer": "Correspondance entre %s → %s sur le quai %s", + "gui.createrailwaysnavigator.route_overview.notification.transfer_with_platform": "Correspondance entre %s → %s sur le quai %s", + "gui.createrailwaysnavigator.route_overview.notification.connection_endangered.title": "Votre correspondance est en danger!", + "gui.createrailwaysnavigator.route_overview.notification.connection_endangered": "Vous ne pourrez probablement pas atteindre %s vers %s.", + "gui.createrailwaysnavigator.route_overview.notification.connection_missed.title": "Correspondance manquée", + "gui.createrailwaysnavigator.route_overview.notification.connection_missed": "Vous avez manqué votre correspondace %s vers %s.", + "gui.createrailwaysnavigator.route_overview.notification.journey_completed.title": "Vous avez atteint votre destination !", + "gui.createrailwaysnavigator.route_overview.notification.journey_completed": "Merci d'avoir voyagé et passez une bonne journée", + "gui.createrailwaysnavigator.route_overview.date": "Jour %s, %s", + + "gui.createrailwaysnavigator.global_settings.title": "Paramètres globaux", + "gui.createrailwaysnavigator.global_settings.option.tooltip": "Cliquez ici pour modifier", + "gui.createrailwaysnavigator.global_settings.option_alias.title": "Balises de Gare", + "gui.createrailwaysnavigator.global_settings.option_alias.description": "Définissez des balises de gares pour traîter une gare à multiples quais (ex. MaGare 1, MaGare 2) comme une seule gare (e.g. MaGare) avec un nom personnalisé.", + "gui.createrailwaysnavigator.global_settings.option_blacklist.title": "Liste Noire de Gare", + "gui.createrailwaysnavigator.global_settings.option_blacklist.description": "Exclure les gares qui ne devrait pas apparaître dans les résultats de navigations. Ces gares seront ignorés lors de la génération d'itinéraire.", + "gui.createrailwaysnavigator.global_settings.train_group.title": "Groupes de Train", + "gui.createrailwaysnavigator.global_settings.train_group.description": "Créez des groupes de trains pour les organiser (ex. services régionaux, services longue distance, ...). Les utilisateurs peuvent décider quel groupes ils souhaitent utiliser.", + "gui.createrailwaysnavigator.global_settings.train_blacklist.title": "Liste Noire de Train", + "gui.createrailwaysnavigator.global_settings.train_blacklist.description": "Exclure des trains, ex. trains de marchandises, trains spéciaux, etc., de manière à ce qu'ils ne puissent être utilisé dans des itinéraires.", + + "gui.createrailwaysnavigator.alias_settings.title": "Paramètres des Balises de Gares", + "gui.createrailwaysnavigator.alias_settings.summary": "Contient %s Gares", + "gui.createrailwaysnavigator.alias_settings.editor": "Modifié par %s le %s", + "gui.createrailwaysnavigator.alias_settings.add.tooltip": "Créer une nouvelle entrée", + "gui.createrailwaysnavigator.alias_settings.delete_alias.tooltip": "Supprimer la Balise", + "gui.createrailwaysnavigator.alias_settings.delete_station.tooltip": "Retirer une Gare", + "gui.createrailwaysnavigator.alias_settings.add_station.tooltip": "Ajouter une Gare", + "gui.createrailwaysnavigator.alias_settings.hint.station_name": "Track Station Name", + "gui.createrailwaysnavigator.alias_settings.hint.platform": "Quai", + "gui.createrailwaysnavigator.alias_settings.enter_name": "Entrer un nom ici", + + "gui.createrailwaysnavigator.train_group_settings.title": "Paramètres des Groupes de Trains", + "gui.createrailwaysnavigator.train_group_settings.summary": "Contient %s Trains", + "gui.createrailwaysnavigator.train_group_settings.editor": "Modifié par %s le %s", + "gui.createrailwaysnavigator.train_group_settings.delete_alias.tooltip": "Supprimer le Groupe", + "gui.createrailwaysnavigator.train_group_settings.delete_station.tooltip": "Retirer le Train", + "gui.createrailwaysnavigator.train_group_settings.add_station.tooltip": "Ajouter un Train", + + "gui.createrailwaysnavigator.blacklist.title": "Liste noire des Gares", + "gui.createrailwaysnavigator.blacklist.add.tooltip": "Ajouter à la liste noire", + "gui.createrailwaysnavigator.blacklist.delete.tooltip": "Retirer de la liste noire", + + "gui.createrailwaysnavigator.train_blacklist.title": "Liste noire des Trains", + "gui.createrailwaysnavigator.train_blacklist.add.tooltip": "Ajouter à la liste noire", + "gui.createrailwaysnavigator.train_blacklist.delete.tooltip": "Retirer de la liste noire", + + "gui.createrailwaysnavigator.search_settings.title": "Paramètres de recherche", + "gui.createrailwaysnavigator.search_settings.transfer_time": "Temps de Correspondance Minimum", + "gui.createrailwaysnavigator.search_settings.transfer_time.description": "Le temps minimum qui devrait être disponible pour changer de train. (1h ~ 50 Secondes réelles)", + "gui.createrailwaysnavigator.search_settings.train_groups": "Filtre de Catégorie de Train", + "gui.createrailwaysnavigator.search_settings.train_groups.description": "Décidez quels trains et quelles catégories de trains vous souhaitez utiliser.", + "gui.createrailwaysnavigator.search_settings.train_groups.overview": "%s catégories séléctionés", + "gui.createrailwaysnavigator.search_settings.train_groups.overview.all": "Tous", + "gui.createrailwaysnavigator.search_settings.train_groups.overview.none": "Aucun", + "gui.createrailwaysnavigator.search_settings.train_groups.tooltip.reset": "Réinitialiser les filtres", + + "gui.createrailwaysnavigator.new_text_entry.add.tooltip": "Ajouter", + + "gui.createrailwaysnavigator.time": "Temps: %s", + "gui.createrailwaysnavigator.time.now": "maintenant", + "gui.createrailwaysnavigator.time_format.dhm": "%s jours %s h. %s m.", + "gui.createrailwaysnavigator.time_format.hm": "%s h. %s min.", + "gui.createrailwaysnavigator.time_format.m": "%s m.", + + "gui.createrailwaysnavigator.platform": "Quai", + "gui.createrailwaysnavigator.departure": "Départ", + "gui.createrailwaysnavigator.destination": "Destination", + "gui.createrailwaysnavigator.line": "Ligne", + "gui.createrailwaysnavigator.following_trains": "Trains suivants:", + "gui.createrailwaysnavigator.via": "via", + + "gui.createrailwaysnavigator.advanced_display_settings.title": "Paramètres des Affichages Avancés", + "gui.createrailwaysnavigator.advanced_display_settings.display_type": "Type d'Affichage", + "gui.createrailwaysnavigator.advanced_display_settings.display_type.description": "Détermine les informations affichés.", + "gui.createrailwaysnavigator.advanced_display_settings.info_type": "Type d'Information", + "gui.createrailwaysnavigator.advanced_display_settings.info_type.description": "Détermine le degré de détail des informations.", + "gui.createrailwaysnavigator.advanced_display_settings.double_sided": "Double-face", + + "enum.createrailwaysnavigator.display_info_type": "Type d'Affiche d'Information", + "enum.createrailwaysnavigator.display_info_type.description": "Détermine combien d'informations devraient être affichés sur votre tableau d'affichage.", + "enum.createrailwaysnavigator.display_info_type.simple": "Simple", + "enum.createrailwaysnavigator.display_info_type.info.simple": "L'écran va seulement afficher les informations les plus importantes sans détails supplémentaires.", + "enum.createrailwaysnavigator.display_info_type.detailed": "Détaillé", + "enum.createrailwaysnavigator.display_info_type.info.detailed": "Les informations les plus importantes avec quelques détails seront affichés, comme la vitesse du trains, les escales, etc.", + "enum.createrailwaysnavigator.display_info_type.informative": "Informatif", + "enum.createrailwaysnavigator.display_info_type.info.informative": "Affiche toutes les informations qui pourraient être intéressantes et les affiches dans une disposition agréable. Déconseillé pour les petits petits affichages car le texte peu devenir très petit.", + + "enum.createrailwaysnavigator.display_type": "Type d'Affichage", + "enum.createrailwaysnavigator.display_type.description": "Le type d'affiche en fonction de son objectif.", + "enum.createrailwaysnavigator.display_type.train_destination": "Destination du Train", + "enum.createrailwaysnavigator.display_type.info.train_destination": "Destiné à être utilisé en dehors des trains car il affiche des informations sur le train lui-même, comme le nom, la destinations et (si séléctionés) les escales.", + "enum.createrailwaysnavigator.display_type.passenger_information": "Informations pour les passagers", + "enum.createrailwaysnavigator.display_type.info.passenger_information": "Représentes les écrans présents à l'interieur des trains. Ces écrans afficheront les prochains arrêts, la direction de la sortie et (si séléctionés) la vitesse du train et une vue d'ensemble de la route", + "enum.createrailwaysnavigator.display_type.platform": "Affichage de quai", + "enum.createrailwaysnavigator.display_type.info.platform": "Ces écrans doivent être utilisés sur les quais des gares et montre les prochains trains arrivant avec quelques détails en plus si séléctionés. Ne peut pas être utilisés à l'intérieur des trains!", + + "enum.createrailwaysnavigator.side": "Face", + "enum.createrailwaysnavigator.side.description": "La face du bloc où les informations devraient être affichés.", + "enum.createrailwaysnavigator.side.front": "Face avant", + "enum.createrailwaysnavigator.side.info.front": "Les informations seront affichés uniquement sur la face avant du bloc. C'est le comportement par défaut.", + "enum.createrailwaysnavigator.side.both": "Toutes les faces", + "enum.createrailwaysnavigator.side.info.both": "Les informations seront affichés sur toutes les faces.", + + "enum.createrailwaysnavigator.time_display": "Affichage des horaires", + "enum.createrailwaysnavigator.time_display.description": "Détermines comment les horaires devraient être affichés", + "enum.createrailwaysnavigator.time_display.abs": "ABS", + "enum.createrailwaysnavigator.time_display.info.abs": "ABS (absolu)", + "enum.createrailwaysnavigator.time_display.eta": "ETA", + "enum.createrailwaysnavigator.time_display.info.eta": "ETA (estimation du temps d'arrivée)", + + "create.display_source.advanced_display": "Affichage Avancé", + "gui.createrailwaysnavigator.display_source.advanced_display.train_name_width": "Largeur de la colonne du nom du train", + "gui.createrailwaysnavigator.display_source.advanced_display.train_name_width.description": "en pixels bloc. (Defaut: 16)", + "gui.createrailwaysnavigator.display_source.advanced_display.platform_width": "Largeur de la colonne du quai", + "gui.createrailwaysnavigator.display_source.advanced_display.platform_width.description": "en pixel bloc. (Defaut: Auto)", + + "createrailwaysnavigator.moin": "moin" +} From b98fb926ca23710ea9ca9138d44638a428682861 Mon Sep 17 00:00:00 2001 From: GeoffreyGx Date: Thu, 11 Jul 2024 21:08:51 +0200 Subject: [PATCH 35/38] Corrected typos --- .../createrailwaysnavigator/lang/fr_fr.json | 68 +++++++++---------- 1 file changed, 34 insertions(+), 34 deletions(-) diff --git a/common/src/main/resources/assets/createrailwaysnavigator/lang/fr_fr.json b/common/src/main/resources/assets/createrailwaysnavigator/lang/fr_fr.json index 4f4f4958..64825278 100644 --- a/common/src/main/resources/assets/createrailwaysnavigator/lang/fr_fr.json +++ b/common/src/main/resources/assets/createrailwaysnavigator/lang/fr_fr.json @@ -11,32 +11,32 @@ "block.createrailwaysnavigator.train_station_clock": "Horloge de Gare", "block.createrailwaysnavigator.advanced_display_block": "Bloc d'Affichage Avancé", - "block.createrailwaysnavigator.advanced_display_block.tooltip.summary": "Utiliser le sur des _trains_, comme _affichage de la destination_ ou _affichage pour les passagers_, ou dans des _stations de trains_ comme des _affichage de quai_ amélioré qui montre plus d'informations que des tableaux d'affichage classique.", + "block.createrailwaysnavigator.advanced_display_block.tooltip.summary": "Utilisez-le sur des _trains_, comme _affichage de la destination_ ou _affichage pour les passagers_, ou dans des _stations de trains_ comme des _affichage de quai_ amélioré qui montre plus d'informations que des tableaux d'affichage classique.", "block.createrailwaysnavigator.advanced_display_block.tooltip.condition1": "Quand click-droit en utilisant une clé", "block.createrailwaysnavigator.advanced_display_block.tooltip.behaviour1": "Ouvre un menu pour _configurer_ l'_affichage_.", "block.createrailwaysnavigator.advanced_display": "Tableau d'Affichage Avancé", - "block.createrailwaysnavigator.advanced_display.tooltip.summary": "Utiliser le sur des _trains_, comme _affichage de la destination_ ou _affichage pour les passagers_, ou dans des _stations de trains_ comme des _affichage de quai_ amélioré qui montre plus d'informations que des tableaux d'affichage classique.", + "block.createrailwaysnavigator.advanced_display.tooltip.summary": "Utilisez-le sur des _trains_, comme _affichage de la destination_ ou _affichage pour les passagers_, ou dans des _stations de trains_ comme des _affichage de quai_ amélioré qui montre plus d'informations que des tableaux d'affichage classique.", "block.createrailwaysnavigator.advanced_display.tooltip.condition1": "Quand click-droit en utilisant une clé", "block.createrailwaysnavigator.advanced_display.tooltip.behaviour1": "Ouvre un menu pour _configurer_ l'_affichage_.", - "block.createrailwaysnavigator.advanced_display_small": "Petit Écran Avancé", - "block.createrailwaysnavigator.advanced_display_small.tooltip.summary": "Utiliser le sur des _trains_, comme _affichage de la destination_ ou _affichage pour les passagers_, ou dans des _stations de trains_ comme des _affichage de quai_ amélioré qui montre plus d'informations que des tableaux d'affichage classique.", + "block.createrailwaysnavigator.advanced_display_small": "Petit Tableau d'Affichage Avancé", + "block.createrailwaysnavigator.advanced_display_small.tooltip.summary": "Utilisez-le sur des _trains_, comme _affichage de la destination_ ou _affichage pour les passagers_, ou dans des _stations de trains_ comme des _affichage de quai_ amélioré qui montre plus d'informations que des tableaux d'affichage classique.", "block.createrailwaysnavigator.advanced_display_small.tooltip.condition1": "Quand click-droit en utilisant une clé", "block.createrailwaysnavigator.advanced_display_small.tooltip.behaviour1": "Ouvre un menu pour _configurer_ l'_affichage_.", "block.createrailwaysnavigator.advanced_display_panel": "Panneau d'Affichage Avancé", - "block.createrailwaysnavigator.advanced_display_panel.tooltip.summary": "Utiliser le sur des _trains_, comme _affichage de la destination_ ou _affichage pour les passagers_, ou dans des _stations de trains_ comme des _affichage de quai_ amélioré qui montre plus d'informations que des tableaux d'affichage classique.", + "block.createrailwaysnavigator.advanced_display_panel.tooltip.summary": "Utilisez-le sur des _trains_, comme _affichage de la destination_ ou _affichage pour les passagers_, ou dans des _stations de trains_ comme des _affichage de quai_ amélioré qui montre plus d'informations que des tableaux d'affichage classique.", "block.createrailwaysnavigator.advanced_display_panel.tooltip.condition1": "Quand click-droit en utilisant une clé", "block.createrailwaysnavigator.advanced_display_panel.tooltip.behaviour1": "Ouvre un menu pour _configurer_ l'_affichage_.", "block.createrailwaysnavigator.advanced_display_half_panel": "Demi-Panneau d'Affichage Avancé", - "block.createrailwaysnavigator.advanced_display_half_panel.tooltip.summary": "Utiliser le sur des _trains_, comme _affichage de la destination_ ou _affichage pour les passagers_, ou dans des _stations de trains_ comme des _affichage de quai_ amélioré qui montre plus d'informations que des tableaux d'affichage classique.", + "block.createrailwaysnavigator.advanced_display_half_panel.tooltip.summary": "Utilisez-le sur des _trains_, comme _affichage de la destination_ ou _affichage pour les passagers_, ou dans des _stations de trains_ comme des _affichage de quai_ amélioré qui montre plus d'informations que des tableaux d'affichage classique.", "block.createrailwaysnavigator.advanced_display_half_panel.tooltip.condition1": "Quand click-droit en utilisant une clé", "block.createrailwaysnavigator.advanced_display_half_panel.tooltip.behaviour1": "Ouvre un menu pour _configurer_ l'_affichage_.", "block.createrailwaysnavigator.advanced_display_sloped": "Affichage Incliné Avancé", - "block.createrailwaysnavigator.advanced_display_sloped.tooltip.summary": "Utiliser le sur des _trains_, comme _affichage de la destination_ ou _affichage pour les passagers_, ou dans des _stations de trains_ comme des _affichage de quai_ amélioré qui montre plus d'informations que des tableaux d'affichage classique.", + "block.createrailwaysnavigator.advanced_display_sloped.tooltip.summary": "Utilisez-le sur des _trains_, comme _affichage de la destination_ ou _affichage pour les passagers_, ou dans des _stations de trains_ comme des _affichage de quai_ amélioré qui montre plus d'informations que des tableaux d'affichage classique.", "block.createrailwaysnavigator.advanced_display_sloped.tooltip.condition1": "Quand click-droit en utilisant une clé", "block.createrailwaysnavigator.advanced_display_sloped.tooltip.behaviour1": "Ouvre un menu pour _configurer_ l'_affichage_.", "block.createrailwaysnavigator.advanced_display.ber.not_in_service": "Hors service!", - "block.createrailwaysnavigator.advanced_display.ber.shunting_trip": "train non-passagers", + "block.createrailwaysnavigator.advanced_display.ber.shunting_trip": "train sans passagers", "category.createrailwaysnavigator.crn": "Create Railways Navigator", "key.createrailwaysnavigator.route_overlay_options": "Afficher les Options de l'Overlay d'Itinéraire", @@ -58,9 +58,9 @@ "gui.createrailwaysnavigator.route_overlay_settings.notifications.off": "Notifications désactivées", "gui.createrailwaysnavigator.route_overlay_settings.scale": "Taille de l'interface", "gui.createrailwaysnavigator.route_overlay_settings.narrator": "Annonces du narrateur", - "gui.createrailwaysnavigator.route_overlay_settings.narrator.description": "Le Narrateur annonce des évènements importants sur votre trajet, ex. le prochain arrêt, des changements, etc.", + "gui.createrailwaysnavigator.route_overlay_settings.narrator.description": "Le Narrateur annonce des évènements importants pendant votre voyage, ex. le prochain arrêt, des changements, etc.", "gui.createrailwaysnavigator.route_overlay_settings.notifications": "Notifications", - "gui.createrailwaysnavigator.route_overlay_settings.notifications.description": "Obtenez des notifications en pop-up à propos d'évènements importants sur votre trajet, ex. le prochain arrêt, des changements, etc.", + "gui.createrailwaysnavigator.route_overlay_settings.notifications.description": "Recevez des notifications pop-up sur les évènements importants de votre voyage, ex. le prochain arrêt, des changements, etc.", "gui.createrailwaysnavigator.common.expand": "Afficher les détails", "gui.createrailwaysnavigator.common.collapse": "Cacher les détails", @@ -75,14 +75,14 @@ "gui.createrailwaysnavigator.common.server_error": "Erreur serveur lors de l'éxecution de la tâche. Regarder la console pour en savoir plus.", "gui.createrailwaysnavigator.navigator.title": "Create Railways Navigator", - "gui.createrailwaysnavigator.navigator.no_connections": "Aucun trajet trouvé.", - "gui.createrailwaysnavigator.navigator.not_searched": "Rien n'a été recherché.", - "gui.createrailwaysnavigator.navigator.searching": "Recherche d'un trajet...", + "gui.createrailwaysnavigator.navigator.no_connections": "Aucun itinéraire trouvé.", + "gui.createrailwaysnavigator.navigator.not_searched": "Rien n'a encore été recherché.", + "gui.createrailwaysnavigator.navigator.searching": "Recherche d'un itinéraire...", "gui.createrailwaysnavigator.navigator.error_title": "Impossible de naviguer!", "gui.createrailwaysnavigator.navigator.start_end_null": "Le départ ou la destination est vide.", - "gui.createrailwaysnavigator.navigator.start_end_equal": "Le départ et la destination sont égals.", - "gui.createrailwaysnavigator.navigator.route_entry.connection_in_past": "❌ Trajet dans le passé", - "gui.createrailwaysnavigator.navigator.route_entry.transfer": "Connec.", + "gui.createrailwaysnavigator.navigator.start_end_equal": "Le départ et la destination sont égaux.", + "gui.createrailwaysnavigator.navigator.route_entry.connection_in_past": "❌ Itinéraire dans le passé", + "gui.createrailwaysnavigator.navigator.route_entry.transfer": "Corresp.", "gui.createrailwaysnavigator.navigator.route_entry.station_start": "à partir de %s", "gui.createrailwaysnavigator.navigator.global_settings.tooltip": "Paramètres globaux", "gui.createrailwaysnavigator.navigator.search_settings.tooltip": "Paramètres de recherche", @@ -90,22 +90,22 @@ "gui.createrailwaysnavigator.navigator.location.tooltip": "Gare la plus proche de votre position", "gui.createrailwaysnavigator.navigator.switch.tooltip": "Inverser le point de départ et la destination", - "gui.createrailwaysnavigator.route_details.title": "Détail du trajet", + "gui.createrailwaysnavigator.route_details.title": "Détail de l'itinéraire", "gui.createrailwaysnavigator.route_details.departure": "Départ dans", "gui.createrailwaysnavigator.route_details.next_transfer_time": "Correspondance dans", "gui.createrailwaysnavigator.route_details.transfer": "Correspondance", - "gui.createrailwaysnavigator.route_details.save_route": "Enregistrer le trajet", + "gui.createrailwaysnavigator.route_details.save_route": "Enregistrer l'itinéraire'", - "gui.createrailwaysnavigator.route_overview.title": "Détail du trajet", - "gui.createrailwaysnavigator.route_overview.journey_begins": "Votre trajet commence! %s à %s, départ %s", - "gui.createrailwaysnavigator.route_overview.journey_begins_with_platform": "Votre trajet commence! %s à %s, départ %s sur le quai %s", + "gui.createrailwaysnavigator.route_overview.title": "Détail de l'itinéraire", + "gui.createrailwaysnavigator.route_overview.journey_begins": "Votre voyage commence! %s à %s, départ %s", + "gui.createrailwaysnavigator.route_overview.journey_begins_with_platform": "Votre voyage commence! %s à %s, départ %s sur la voie %s", "gui.createrailwaysnavigator.route_overview.train_details": "%s à %s", "gui.createrailwaysnavigator.route_overview.next_stop": "Prochain arrêt: %s", "gui.createrailwaysnavigator.route_overview.transfer": "Correspondance entre %s → %s", - "gui.createrailwaysnavigator.route_overview.transfer_with_platform": "Correspondance entre %s → %s sur le quai %s", - "gui.createrailwaysnavigator.route_overview.journey_completed": "Trajet terminé!", + "gui.createrailwaysnavigator.route_overview.transfer_with_platform": "Correspondance entre %s → %s sur la voie %s", + "gui.createrailwaysnavigator.route_overview.journey_completed": "Voyage terminé!", "gui.createrailwaysnavigator.route_overview.after_journey": "Vous êtes arrivés à %s. Merci d'avoir voyagé et passez une bonne journée.", - "gui.createrailwaysnavigator.route_overview.next_connections": "Prochains trajets", + "gui.createrailwaysnavigator.route_overview.next_connections": "Prochaines correspondances", "gui.createrailwaysnavigator.route_overview.schedule_transfer": "Correspondance", "gui.createrailwaysnavigator.route_overview.train_canceled": "Train Annulé", "gui.createrailwaysnavigator.route_overview.train_cancellation_info": "Information à propos de %s", @@ -113,24 +113,24 @@ "gui.createrailwaysnavigator.route_overview.connection_endangered": "Correspondance en danger", "gui.createrailwaysnavigator.route_overview.connection_missed": "Correspondance manqué", "gui.createrailwaysnavigator.route_overview.connection_canceled": "Train annulé", - "gui.createrailwaysnavigator.route_overview.journey_interrupted": "Votre trajet vers %s ne peut se poursuivre.", + "gui.createrailwaysnavigator.route_overview.journey_interrupted": "Votre voyage vers %s ne peut se poursuivre.", "gui.createrailwaysnavigator.route_overview.connection_missed_info": "A cause d'un retard, vous avez manqué votre correspondace. Rechercher une alternative dans le Navigateur. Nous nous excusons pour le dérangement.", "gui.createrailwaysnavigator.route_overview.train_canceled_info": "Information à propos de %s: Ce train a été annulé pour aujourd'hui! Nous nous excusons pour le dérangement. Rechercher une alternative dans le Navigateur.", "gui.createrailwaysnavigator.route_overview.train_canceled_title": "Le train a été annulé", - "gui.createrailwaysnavigator.route_overview.journey_interrupted_info": "Votre trajet vers %s ne peut pas se poursuivre. Rechercher une alternative dans le Navigateur.", + "gui.createrailwaysnavigator.route_overview.journey_interrupted_info": "Votre voyage vers %s ne peut pas se poursuivre. Rechercher une alternative dans le Navigateur.", "gui.createrailwaysnavigator.route_overview.options": "Appuyer sur %s pour les options.", - "gui.createrailwaysnavigator.route_overview.notification.journey_begins.title": "Votre trajet vers %s commence!", + "gui.createrailwaysnavigator.route_overview.notification.journey_begins.title": "Votre voyage vers %s commence!", "gui.createrailwaysnavigator.route_overview.notification.journey_begins": "%s vers %s, départ %s", - "gui.createrailwaysnavigator.route_overview.notification.journey_begins_with_platform": "%s vers %s, départ %s depuis le quai %s", - "gui.createrailwaysnavigator.route_overview.notification.platform_changed.title": "Votre quai a changé!", - "gui.createrailwaysnavigator.route_overview.notification.platform_changed": "Votre train dans %s part du quai %s aujourd'hui.", + "gui.createrailwaysnavigator.route_overview.notification.journey_begins_with_platform": "%s vers %s, départ %s depuis la voie %s", + "gui.createrailwaysnavigator.route_overview.notification.platform_changed.title": "Votre voie a changé!", + "gui.createrailwaysnavigator.route_overview.notification.platform_changed": "Votre train dans %s part de la voie %s aujourd'hui.", "gui.createrailwaysnavigator.route_overview.notification.train_delayed.title": "%s: Départ %s retardé.", "gui.createrailwaysnavigator.route_overview.notification.train_delayed": "%s au lieu de %s dans %s", "gui.createrailwaysnavigator.route_overview.notification.train_canceled.title": "%s: Train annulé", "gui.createrailwaysnavigator.route_overview.notification.train_canceled": "%s vers %s est annulé aujourd'hui.", "gui.createrailwaysnavigator.route_overview.notification.transfer.title": "Votre correspondance est en approche", - "gui.createrailwaysnavigator.route_overview.notification.transfer": "Correspondance entre %s → %s sur le quai %s", - "gui.createrailwaysnavigator.route_overview.notification.transfer_with_platform": "Correspondance entre %s → %s sur le quai %s", + "gui.createrailwaysnavigator.route_overview.notification.transfer": "Correspondance entre %s → %s sur la voie %s", + "gui.createrailwaysnavigator.route_overview.notification.transfer_with_platform": "Correspondance entre %s → %s sur la voie %s", "gui.createrailwaysnavigator.route_overview.notification.connection_endangered.title": "Votre correspondance est en danger!", "gui.createrailwaysnavigator.route_overview.notification.connection_endangered": "Vous ne pourrez probablement pas atteindre %s vers %s.", "gui.createrailwaysnavigator.route_overview.notification.connection_missed.title": "Correspondance manquée", @@ -157,7 +157,7 @@ "gui.createrailwaysnavigator.alias_settings.delete_alias.tooltip": "Supprimer la Balise", "gui.createrailwaysnavigator.alias_settings.delete_station.tooltip": "Retirer une Gare", "gui.createrailwaysnavigator.alias_settings.add_station.tooltip": "Ajouter une Gare", - "gui.createrailwaysnavigator.alias_settings.hint.station_name": "Track Station Name", + "gui.createrailwaysnavigator.alias_settings.hint.station_name": "Nom de la Station", "gui.createrailwaysnavigator.alias_settings.hint.platform": "Quai", "gui.createrailwaysnavigator.alias_settings.enter_name": "Entrer un nom ici", @@ -194,7 +194,7 @@ "gui.createrailwaysnavigator.time_format.hm": "%s h. %s min.", "gui.createrailwaysnavigator.time_format.m": "%s m.", - "gui.createrailwaysnavigator.platform": "Quai", + "gui.createrailwaysnavigator.platform": "Voie", "gui.createrailwaysnavigator.departure": "Départ", "gui.createrailwaysnavigator.destination": "Destination", "gui.createrailwaysnavigator.line": "Ligne", From 469adb5a4aedfe189cbfca1df2106850f3884fb4 Mon Sep 17 00:00:00 2001 From: GeoffreyGx Date: Thu, 11 Jul 2024 21:09:06 +0200 Subject: [PATCH 36/38] Added french to README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 1e10552b..fa3dc64f 100644 --- a/README.md +++ b/README.md @@ -18,6 +18,7 @@ This mod adds a new item, the Create Railways Navigator, which is inspired by th - German (100%) - Dutch (100%) (by TheSatanicFlame) - Polish (100%) (by Slasherss) +- French (100%) (by GeoffreyGx) ## **Please note!** To protect your world from damage, you should always create a backup of your world before installing an update of this mod. Alpha versions in particular may contain critical bugs! From 0cb54f6b524d76c0af5c7a5fa2c78490fa5a1e40 Mon Sep 17 00:00:00 2001 From: GeoffreyGx Date: Thu, 11 Jul 2024 21:13:52 +0200 Subject: [PATCH 37/38] Fixed another typo --- .../resources/assets/createrailwaysnavigator/lang/fr_fr.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/src/main/resources/assets/createrailwaysnavigator/lang/fr_fr.json b/common/src/main/resources/assets/createrailwaysnavigator/lang/fr_fr.json index 64825278..df6b757d 100644 --- a/common/src/main/resources/assets/createrailwaysnavigator/lang/fr_fr.json +++ b/common/src/main/resources/assets/createrailwaysnavigator/lang/fr_fr.json @@ -118,7 +118,7 @@ "gui.createrailwaysnavigator.route_overview.train_canceled_info": "Information à propos de %s: Ce train a été annulé pour aujourd'hui! Nous nous excusons pour le dérangement. Rechercher une alternative dans le Navigateur.", "gui.createrailwaysnavigator.route_overview.train_canceled_title": "Le train a été annulé", "gui.createrailwaysnavigator.route_overview.journey_interrupted_info": "Votre voyage vers %s ne peut pas se poursuivre. Rechercher une alternative dans le Navigateur.", - "gui.createrailwaysnavigator.route_overview.options": "Appuyer sur %s pour les options.", + "gui.createrailwaysnavigator.route_overview.options": "Appuyer sur %s pour voir les options.", "gui.createrailwaysnavigator.route_overview.notification.journey_begins.title": "Votre voyage vers %s commence!", "gui.createrailwaysnavigator.route_overview.notification.journey_begins": "%s vers %s, départ %s", "gui.createrailwaysnavigator.route_overview.notification.journey_begins_with_platform": "%s vers %s, départ %s depuis la voie %s", From e391f4c2a7f9046d954f53d18e96bbbc4b8d28f1 Mon Sep 17 00:00:00 2001 From: GeoffreyGx Date: Thu, 11 Jul 2024 21:51:49 +0200 Subject: [PATCH 38/38] Fixed another typo --- .../resources/assets/createrailwaysnavigator/lang/fr_fr.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/common/src/main/resources/assets/createrailwaysnavigator/lang/fr_fr.json b/common/src/main/resources/assets/createrailwaysnavigator/lang/fr_fr.json index df6b757d..0954f8ab 100644 --- a/common/src/main/resources/assets/createrailwaysnavigator/lang/fr_fr.json +++ b/common/src/main/resources/assets/createrailwaysnavigator/lang/fr_fr.json @@ -146,7 +146,7 @@ "gui.createrailwaysnavigator.global_settings.option_blacklist.title": "Liste Noire de Gare", "gui.createrailwaysnavigator.global_settings.option_blacklist.description": "Exclure les gares qui ne devrait pas apparaître dans les résultats de navigations. Ces gares seront ignorés lors de la génération d'itinéraire.", "gui.createrailwaysnavigator.global_settings.train_group.title": "Groupes de Train", - "gui.createrailwaysnavigator.global_settings.train_group.description": "Créez des groupes de trains pour les organiser (ex. services régionaux, services longue distance, ...). Les utilisateurs peuvent décider quel groupes ils souhaitent utiliser.", + "gui.createrailwaysnavigator.global_settings.train_group.description": "Créez des groupes de trains pour les organiser (ex. services régionaux, services longue distance, ...). Les utilisateurs peuvent décider quels groupes ils souhaitent utiliser.", "gui.createrailwaysnavigator.global_settings.train_blacklist.title": "Liste Noire de Train", "gui.createrailwaysnavigator.global_settings.train_blacklist.description": "Exclure des trains, ex. trains de marchandises, trains spéciaux, etc., de manière à ce qu'ils ne puissent être utilisé dans des itinéraires.", @@ -178,7 +178,7 @@ "gui.createrailwaysnavigator.search_settings.title": "Paramètres de recherche", "gui.createrailwaysnavigator.search_settings.transfer_time": "Temps de Correspondance Minimum", - "gui.createrailwaysnavigator.search_settings.transfer_time.description": "Le temps minimum qui devrait être disponible pour changer de train. (1h ~ 50 Secondes réelles)", + "gui.createrailwaysnavigator.search_settings.transfer_time.description": "Le temps minimum qui devrait être disponible pour changer de train. (1h ~ 50 secondes réelles)", "gui.createrailwaysnavigator.search_settings.train_groups": "Filtre de Catégorie de Train", "gui.createrailwaysnavigator.search_settings.train_groups.description": "Décidez quels trains et quelles catégories de trains vous souhaitez utiliser.", "gui.createrailwaysnavigator.search_settings.train_groups.overview": "%s catégories séléctionés",