diff options
| author | shedaniel <daniel@shedaniel.me> | 2022-04-16 03:15:46 +0800 |
|---|---|---|
| committer | shedaniel <daniel@shedaniel.me> | 2022-04-16 03:15:46 +0800 |
| commit | ad476378effa1dfd5fbef9c4d4cb5eadb9954d32 (patch) | |
| tree | 5a9c0ada8e451b6ce84de8ef4f4520c092f4c680 /runtime | |
| parent | 8d9d53b65561fedea8f61d194d411565fd89b57e (diff) | |
| download | RoughlyEnoughItems-ad476378effa1dfd5fbef9c4d4cb5eadb9954d32.tar.gz RoughlyEnoughItems-ad476378effa1dfd5fbef9c4d4cb5eadb9954d32.tar.bz2 RoughlyEnoughItems-ad476378effa1dfd5fbef9c4d4cb5eadb9954d32.zip | |
Add shapeless indicator
Diffstat (limited to 'runtime')
10 files changed, 448 insertions, 59 deletions
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/DelegateWidgetWithTranslate.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/DelegateWidgetWithTranslate.java new file mode 100644 index 000000000..5867f4232 --- /dev/null +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/DelegateWidgetWithTranslate.java @@ -0,0 +1,86 @@ +/* + * This file is licensed under the MIT License, part of Roughly Enough Items. + * Copyright (c) 2018, 2019, 2020, 2021, 2022 shedaniel + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package me.shedaniel.rei.impl.client.gui.widget; + +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.math.Matrix4f; +import com.mojang.math.Vector4f; +import me.shedaniel.rei.api.client.gui.widgets.DelegateWidget; +import me.shedaniel.rei.api.client.gui.widgets.WidgetWithBounds; + +import java.util.function.Supplier; + +public class DelegateWidgetWithTranslate extends DelegateWidget { + private final Supplier<Matrix4f> translate; + + public DelegateWidgetWithTranslate(WidgetWithBounds widget, Supplier<Matrix4f> translate) { + super(widget); + this.translate = translate; + } + + @Override + public void render(PoseStack poseStack, int i, int j, float f) { + poseStack.pushPose(); + poseStack.last().pose().multiply(translate.get()); + Vector4f mouse = transformMouse(i, j); + super.render(poseStack, (int) mouse.x(), (int) mouse.y(), f); + poseStack.popPose(); + } + + private Vector4f transformMouse(double mouseX, double mouseY) { + Vector4f mouse = new Vector4f((float) mouseX, (float) mouseY, 0, 1); + mouse.transform(translate.get()); + return mouse; + } + + @Override + public boolean containsMouse(double mouseX, double mouseY) { + Vector4f mouse = transformMouse(mouseX, mouseY); + return super.containsMouse(mouse.x(), mouse.y()); + } + + @Override + public boolean mouseClicked(double d, double e, int i) { + Vector4f mouse = transformMouse(d, e); + return super.mouseClicked(mouse.x(), mouse.y(), i); + } + + @Override + public boolean mouseReleased(double d, double e, int i) { + Vector4f mouse = transformMouse(d, e); + return super.mouseReleased(mouse.x(), mouse.y(), i); + } + + @Override + public boolean mouseDragged(double d, double e, int i, double f, double g) { + Vector4f mouse = transformMouse(d, e); + return super.mouseDragged(mouse.x(), mouse.y(), i, f, g); + } + + @Override + public boolean mouseScrolled(double d, double e, double f) { + Vector4f mouse = transformMouse(d, e); + return super.mouseScrolled(mouse.x(), mouse.y(), f); + } +}
\ No newline at end of file diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/InternalWidgets.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/InternalWidgets.java index e39b48fc5..f757bf9ad 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/InternalWidgets.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/InternalWidgets.java @@ -23,13 +23,14 @@ package me.shedaniel.rei.impl.client.gui.widget; -import com.google.common.collect.Lists; import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.math.Matrix4f; import me.shedaniel.math.Point; import me.shedaniel.math.Rectangle; import me.shedaniel.math.impl.PointHelper; import me.shedaniel.rei.api.client.config.ConfigObject; import me.shedaniel.rei.api.client.gui.DrawableConsumer; +import me.shedaniel.rei.api.client.gui.Renderer; import me.shedaniel.rei.api.client.gui.widgets.*; import me.shedaniel.rei.api.client.registry.display.DisplayCategory; import me.shedaniel.rei.api.common.display.Display; @@ -44,12 +45,12 @@ import net.minecraft.client.gui.screens.Screen; import net.minecraft.client.resources.language.I18n; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.FormattedText; +import net.minecraft.network.chat.TranslatableComponent; import net.minecraft.resources.ResourceLocation; import org.jetbrains.annotations.ApiStatus; import java.util.Collection; import java.util.List; -import java.util.Objects; import java.util.function.Supplier; @ApiStatus.Internal @@ -141,34 +142,8 @@ public final class InternalWidgets { return new MergedWidget(widget2, widget1); } - private static class MergedWidget extends Widget { - private final List<Widget> widgets; - - public MergedWidget(Widget widget1, Widget widget2) { - this.widgets = Lists.newArrayList(Objects.requireNonNull(widget1), Objects.requireNonNull(widget2)); - } - - @Override - public void render(PoseStack matrices, int mouseX, int mouseY, float delta) { - for (Widget widget : widgets) { - widget.setZ(getZ()); - widget.render(matrices, mouseX, mouseY, delta); - } - } - - @Override - public List<? extends GuiEventListener> children() { - return widgets; - } - - @Override - public boolean mouseScrolled(double mouseX, double mouseY, double amount) { - for (Widget widget : this.widgets) { - if (widget.mouseScrolled(mouseX, mouseY, amount)) - return true; - } - return false; - } + public static Widget concatWidgets(List<Widget> widgets) { + return new MergedWidget(widgets); } private static class LateRenderableWidget extends DelegateWidget implements LateRenderable { @@ -188,17 +163,33 @@ public final class InternalWidgets { } @Override + public Widget wrapVanillaWidget(GuiEventListener element) { + if (element instanceof Widget) return (Widget) element; + return new VanillaWrappedWidget(element); + } + + @Override + public WidgetWithBounds wrapRenderer(Supplier<Rectangle> bounds, Renderer renderer) { + return new RendererWrappedWidget(renderer, bounds); + } + + @Override + public WidgetWithBounds withTranslate(WidgetWithBounds widget, Supplier<Matrix4f> translate) { + return new DelegateWidgetWithTranslate(widget, translate); + } + + @Override public Widget createDrawableWidget(DrawableConsumer drawable) { return new DrawableWidget(drawable); } @Override - public me.shedaniel.rei.api.client.gui.widgets.Slot createSlot(Point point) { + public Slot createSlot(Point point) { return new EntryWidget(point); } @Override - public me.shedaniel.rei.api.client.gui.widgets.Slot createSlot(Rectangle bounds) { + public Slot createSlot(Rectangle bounds) { return new EntryWidget(bounds); } @@ -236,5 +227,33 @@ public final class InternalWidgets { public DrawableConsumer createFillRectangleConsumer(Rectangle rectangle, int color) { return new FillRectangleDrawableConsumer(rectangle, color); } + + @Override + public Widget createShapelessIcon(Point point) { + int magnification; + double scale = Minecraft.getInstance().getWindow().getGuiScale(); + if (scale >= 1 && scale <= 4 && scale == Math.floor(scale)) { + magnification = (int) scale; + } else if (scale > 4 && scale == Math.floor(scale)) { + magnification = 1; + for (int i = 4; i >= 1; i--) { + if (scale % i == 0) { + magnification = i; + break; + } + } + } else { + magnification = 4; + } + Rectangle bounds = new Rectangle(point.getX() - 9, point.getY() + 1, 8, 8); + Widget widget = Widgets.createTexturedWidget(new ResourceLocation("roughlyenoughitems:textures/gui/shapeless_icon_" + magnification + "x.png"), bounds.getX(), bounds.getY(), 0, 0, bounds.getWidth(), bounds.getHeight(), 1, 1, 1, 1); + return Widgets.withTooltip(Widgets.withBounds(widget, bounds), + new TranslatableComponent("text.rei.shapeless")); + } + + @Override + public Widget concatWidgets(List<Widget> widgets) { + return InternalWidgets.concatWidgets(widgets); + } } } diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/MergedWidget.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/MergedWidget.java new file mode 100644 index 000000000..e419a7db7 --- /dev/null +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/MergedWidget.java @@ -0,0 +1,66 @@ +/* + * This file is licensed under the MIT License, part of Roughly Enough Items. + * Copyright (c) 2018, 2019, 2020, 2021, 2022 shedaniel + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package me.shedaniel.rei.impl.client.gui.widget; + +import com.google.common.collect.Lists; +import com.mojang.blaze3d.vertex.PoseStack; +import me.shedaniel.rei.api.client.gui.widgets.Widget; +import net.minecraft.client.gui.components.events.GuiEventListener; + +import java.util.List; +import java.util.Objects; + +public class MergedWidget extends Widget { + private final List<Widget> widgets; + + public MergedWidget(Widget widget1, Widget widget2) { + this.widgets = Lists.newArrayList(Objects.requireNonNull(widget1), Objects.requireNonNull(widget2)); + } + + public MergedWidget(List<Widget> widgets) { + this.widgets = widgets; + } + + @Override + public void render(PoseStack matrices, int mouseX, int mouseY, float delta) { + for (Widget widget : widgets) { + widget.setZ(getZ()); + widget.render(matrices, mouseX, mouseY, delta); + } + } + + @Override + public List<? extends GuiEventListener> children() { + return widgets; + } + + @Override + public boolean mouseScrolled(double mouseX, double mouseY, double amount) { + for (Widget widget : this.widgets) { + if (widget.mouseScrolled(mouseX, mouseY, amount)) + return true; + } + return false; + } +}
\ No newline at end of file diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/RendererWrappedWidget.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/RendererWrappedWidget.java new file mode 100644 index 000000000..97d9f3e3d --- /dev/null +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/RendererWrappedWidget.java @@ -0,0 +1,72 @@ +/* + * This file is licensed under the MIT License, part of Roughly Enough Items. + * Copyright (c) 2018, 2019, 2020, 2021, 2022 shedaniel + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package me.shedaniel.rei.impl.client.gui.widget; + +import com.mojang.blaze3d.vertex.PoseStack; +import me.shedaniel.math.Rectangle; +import me.shedaniel.rei.api.client.gui.Renderer; +import me.shedaniel.rei.api.client.gui.widgets.WidgetWithBounds; +import net.minecraft.client.gui.components.events.GuiEventListener; + +import java.util.Collections; +import java.util.List; +import java.util.Objects; +import java.util.function.Supplier; + +public class RendererWrappedWidget extends WidgetWithBounds { + private final Renderer renderer; + private final Supplier<Rectangle> bounds; + + public RendererWrappedWidget(Renderer renderer, Supplier<Rectangle> bounds) { + this.renderer = Objects.requireNonNull(renderer); + this.bounds = Objects.requireNonNull(bounds); + } + + @Override + public void render(PoseStack matrices, int mouseX, int mouseY, float delta) { + renderer.render(matrices, getBounds(), mouseX, mouseY, delta); + } + + @Override + public List<? extends GuiEventListener> children() { + if (renderer instanceof GuiEventListener listener) + return Collections.singletonList(listener); + return Collections.emptyList(); + } + + @Override + public void setZ(int z) { + renderer.setZ(z); + } + + @Override + public int getZ() { + return renderer.getZ(); + } + + @Override + public Rectangle getBounds() { + return bounds.get(); + } +}
\ No newline at end of file diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/VanillaWrappedWidget.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/VanillaWrappedWidget.java new file mode 100644 index 000000000..2aacd5e73 --- /dev/null +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/VanillaWrappedWidget.java @@ -0,0 +1,82 @@ +/* + * This file is licensed under the MIT License, part of Roughly Enough Items. + * Copyright (c) 2018, 2019, 2020, 2021, 2022 shedaniel + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package me.shedaniel.rei.impl.client.gui.widget; + +import com.mojang.blaze3d.vertex.PoseStack; +import me.shedaniel.rei.api.client.gui.widgets.Widget; +import net.minecraft.client.gui.GuiComponent; +import net.minecraft.client.gui.components.events.ContainerEventHandler; +import net.minecraft.client.gui.components.events.GuiEventListener; +import org.jetbrains.annotations.Nullable; + +import java.util.Collections; +import java.util.List; +import java.util.Objects; + +public class VanillaWrappedWidget extends Widget { + private GuiEventListener element; + + public VanillaWrappedWidget(GuiEventListener element) { + this.element = Objects.requireNonNull(element); + setFocused(element); + } + + @Override + public void render(PoseStack matrices, int mouseX, int mouseY, float delta) { + if (element instanceof GuiComponent component) + component.setBlitOffset(getZ()); + if (element instanceof net.minecraft.client.gui.components.Widget widget) + widget.render(matrices, mouseX, mouseY, delta); + } + + @Override + public List<? extends GuiEventListener> children() { + return Collections.singletonList(element); + } + + @Nullable + @Override + public GuiEventListener getFocused() { + return element; + } + + @Override + public void setFocused(@Nullable GuiEventListener guiEventListener) { + if (guiEventListener == element) { + super.setFocused(element); + } else if (element instanceof ContainerEventHandler handler) { + handler.setFocused(guiEventListener); + } + } + + @Override + public boolean isDragging() { + return true; + } + + @Override + public boolean containsMouse(double mouseX, double mouseY) { + return element.isMouseOver(mouseX, mouseY); + } +}
\ No newline at end of file diff --git a/runtime/src/main/resources/assets/roughlyenoughitems/lang/de_de.json b/runtime/src/main/resources/assets/roughlyenoughitems/lang/de_de.json index 9ef6b85dd..be57c125f 100644 --- a/runtime/src/main/resources/assets/roughlyenoughitems/lang/de_de.json +++ b/runtime/src/main/resources/assets/roughlyenoughitems/lang/de_de.json @@ -9,10 +9,27 @@ "text.rei.search.field.suggestion": "Suche...", "text.rei.feedback": "Möchtest du dem REI Entwickler dein Feedback geben? %s um dein Feedback einzureichen!", "text.rei.feedback.link": "Klicke hier um das Google-Form zu besuchen", + "text.rei.support.me": "Unterstütze mich, um REI weiter zu verbessern!", + "text.rei.support.me.desc": "Als Patreon Unterstützer von REI kannst du die neueste Version von REI für Minecraft Snapshots verwenden.\nAlternativ kannst du mich auch finanziell unterstützen, indem du einen BisectHosting Server mietst.\n\n%s\n%s", + "text.rei.support.me.patreon": "Spenden auf Patreon", + "text.rei.support.me.bisect": "Code SHEDANIEL auf BisectHosting verwenden", "text.rei.not.fully.initialized": "REI noch nicht vollständig initialisiert!", "text.rei.not.fully.initialized.tooltip": "Fehlende Stufen: %s\nFalls dies nicht weggeht,\nversuche mit den Logs nach Unterstützung zu suchen!", "text.rei.inventory.highlighting.enabled": "Inventarhervorhebung an", "text.rei.inventory.highlighting.enabled.tooltip": "Dies macht Slots, die nicht mit dem\nSuchfilter übereinstimmen grau.\nDoppelklicke die Suchleiste, um diesen Modus an- und auszuschalten.", + "text.rei.caching.search": "REI Caching Suchergebnisse...", + "text.rei.caching.search.step": "Schritt %d/%d (%s%%):", + "text.rei.config.menu.dark_theme": "Dunkles Design", + "text.rei.config.menu.craftable_filter": "Filter für Herstellbare Gegenstände", + "text.rei.config.menu.display": "Anzeigeeinstellungen", + "text.rei.config.menu.display.remove_recipe_book": "Rezeptbuch entfernen", + "text.rei.config.menu.display.left_side_mob_effects": "Linke Seite Mob-Effekte", + "text.rei.config.menu.display.left_side_panel": "Linke Seitenleiste", + "text.rei.config.menu.display.scrolling_side_panel": "Durchscrollbarer Seitenbereich", + "text.rei.config.menu.display.caching_entry_rendering": "Schnelleres Eintrags-Rendering", + "text.rei.config.menu.display.side_search_field": "Suchfeld", + "text.rei.config.menu.display.syntax_highlighting": "Syntax-Hervorhebung", + "text.rei.config.menu.config": "Weitere Optionen...", "category.rei.crafting": "Herstellen", "category.rei.smelting": "Schmelzen", "category.rei.smelting.fuel": "Brennstoff", @@ -39,6 +56,10 @@ "category.rei.beacon_payment": "Leuchtfeuerkosten", "category.rei.tilling": "Aufteilung", "category.rei.pathing": "Pfad", + "category.rei.waxing": "Wachsen", + "category.rei.wax_scraping": "Wachs abscharben", + "category.rei.oxidizing": "Oxidation", + "category.rei.oxidation_scraping": "Oxidationsabakratzung", "category.rei.information": "Information", "text.rei.composting.chance": "§e%d%% Chance", "text.rei.composting.page": "Seite %d", @@ -47,6 +68,7 @@ "text.rei.cheat_items": "[{item_name}] x{item_count} {player_name} gegeben.", "text.rei.failed_cheat_items": "§cItems geben fehlgeschlagen.", "text.rei.too_long_nbt": "§cGegenstand NBT ist zu lang, um im Multiplayer angewendet zu werden.", + "text.rei.tag_match": "Akzeptierter Tag: #%s", "text.rei.performance": "Leistungsanalyse", "ordering.rei.ascending": "Aufsteigend", "ordering.rei.descending": "Absteigend", @@ -54,12 +76,14 @@ "ordering.rei.name": "Name", "ordering.rei.item_groups": "Itemgruppen", "text.auto_craft.move_items": "Items bewegen", + "text.auto_craft.move_items.tooltip": "Strg-Klick zum Verschieben von Elementen", "text.auto_craft.move_items.yog": "Generiert NullPointerException!!", "error.rei.transfer.too_small": "Gegenstände können nicht in ein %dx%d-Raster verschoben werden.", "error.rei.not.on.server": "REI ist nicht auf dem Server installiert.", "error.rei.not.enough.materials": "Nicht genügend Materialien.", "error.rei.internal.error": "Interner Fehler: %s", "error.rei.recipe.not.unlocked": "Rezept nicht im Rezeptbuch freigeschaltet.", + "error.rei.not.supported.move.items": "Verschieben von Elementen wird mit diesem Rezept und diesem Container nicht unterstützt.", "error.rei.no.handlers.applicable": "Keine Handler anwendbar.", "error.rei.multi.errors": "Mehrere Fehler:", "rei.rei.no.slot.in.inv": "Kann keinen Platz für Gegenstand im Inventar finden", @@ -77,7 +101,14 @@ "text.rei.gamemode_button.tooltip.entry": "zu %s wechseln", "text.rei.weather_button.tooltip.dropdown": "Wetter ändern: Auswahl", "text.rei.weather_button.tooltip.entry": "zu %s wechseln", + "text.rei.time_button.tooltip.dropdown": "Wetter ändern: Auswahl", + "text.rei.time_button.tooltip.entry": "zu %s wechseln", + "text.rei.time_button.name.morn": "Morgen", + "text.rei.time_button.name.noon": "Mittag", + "text.rei.time_button.name.evening": "Abend", + "text.rei.time_button.name.night": "Nacht", "text.rei.reload_config": "Plugins neu laden", + "text.rei.reload_search": "Suche neu laden", "text.rei.config.is.reloading": "Plugins werden neu geladen!", "text.rei.enabled": "Ja", "text.rei.disabled": "Nein", @@ -112,8 +143,15 @@ "text.rei.tiny_potato": "Kleine Kartöffelchen", "text.rei.add_favorite_widget": "Hinzufügen...", "text.rei.dispose_here": "Hier verwerfen", + "text.rei.crash.title": "REI ist abgestürzt!", + "text.rei.crash.description": "§cRoughly Enough Items hat gerade einen Absturz während \"%s\" erlebt.\n\n§fDetails des Absturzes werden unten angezeigt. Bitte identifiziere die Modifikation, die den Absturz verursacht hat, und melde sie an den Mod-Autor, neben dem unten angegebenen Absturzprotokoll.\n\nWenn Sie glauben, dass dieser Absturz durch einen Fehler in Roughly Enough Items verursacht wird, melden Sie ihn bitte an unseren Issue-Tracker.\n\n§6Vielen Dank für deine Hilfe!\n", + "text.rei.crash.crash_report": "Absturzbericht öffnen", + "text.rei.changelog.title": "REI Änderungsliste", + "text.rei.changelog.error.missingChangelogFile": "Fehlende Änderungsprotokolldatei!", + "text.rei.changelog.error.failedToReadChangelogFile": "Fehler beim Lesen der Änderungsprotokolldatei!", "favorite.section.gamemode": "Spielmodus", "favorite.section.weather": "Wetter", + "favorite.section.time": "Zeit", "tooltip.rei.fluid_amount": "§7%d Einheit", "tooltip.rei.fluid_amount.forge": "§7%d mB", "tooltip.rei.drag_to_add_favorites": "§7Ziehe dies zu deinen Favoriten!", @@ -130,6 +168,7 @@ "config.roughlyenoughitems.functionality": "Funktionalität", "config.roughlyenoughitems.advanced": "Erweitert", "config.roughlyenoughitems.cheating": "Schummeln:", + "config.roughlyenoughitems.cheating.when_creative": "Im Kreativmodus", "config.roughlyenoughitems.favoritesEnabled": "Favoriten aktiviert:", "config.roughlyenoughitems.keyBindings": "Tastaturbelegungen", "config.roughlyenoughitems.keyBindings.recipeKeybind": "Zeige Rezept:", @@ -169,6 +208,10 @@ "config.roughlyenoughitems.layout.configButtonLocation.upper": "Obere", "config.roughlyenoughitems.layout.configButtonLocation.lower": "Untere", "config.roughlyenoughitems.layout.mergeDisplayUnderOne": "Vereine alle Displays mit demselben Inhalt", + "config.roughlyenoughitems.layout.favoriteAddWidgetMode": "Favoriten Widget-Schaltfläche hinzufügen:", + "config.roughlyenoughitems.layout.favoriteAddWidgetMode.always_invisible": "Immer unsichtbar", + "config.roughlyenoughitems.layout.favoriteAddWidgetMode.auto_hide": "Automatisch ausblenden", + "config.roughlyenoughitems.layout.favoriteAddWidgetMode.always_visible": "Immer sichtbar", "config.roughlyenoughitems.filteredEntries.selectAll": "Alles Auswählen", "config.roughlyenoughitems.filteredEntries.selectNone": "Alle abwählen", "config.roughlyenoughitems.filteredEntries.hide": "Auswahl verstecken", @@ -210,6 +253,9 @@ "config.roughlyenoughitems.disableRecipeBook": "Vanilla Rezeptbuch:", "config.roughlyenoughitems.disableRecipeBook.boolean.true": "§cNein", "config.roughlyenoughitems.disableRecipeBook.boolean.false": "§aJa", + "config.roughlyenoughitems.leftSideMobEffects": "Position der Mob-Effekte:", + "config.roughlyenoughitems.leftSideMobEffects.boolean.true": "Links", + "config.roughlyenoughitems.leftSideMobEffects.boolean.false": "Rechts (Vanilla)", "config.roughlyenoughitems.fixTabCloseContainer": "Korrigier den Vanilla Tab Container (wenn das Rezeptbuch deaktiviert ist):", "config.roughlyenoughitems.lighterButtonHover": "Helles Button-Hovern:", "config.roughlyenoughitems.layout.enableCraftableOnlyButton": "Filter für Herstellbare Gegenstände:", @@ -225,6 +271,8 @@ "config.roughlyenoughitems.layout.entryPanelOrdering": "Reihenfolge der Itemlisten:", "config.roughlyenoughitems.list_ordering_button": "%s [%s]", "config.roughlyenoughitems.miscellaneous.newFastEntryRendering": "Schnelleres Eintrags-Rendering:", + "config.roughlyenoughitems.miscellaneous.cachingFastEntryRendering": "Schnelleres Eintrags-Rendering:", + "config.roughlyenoughitems.miscellaneous.cachingFastEntryRendering.@PrefixText": "Diese Option verbessert die Leistung bei der Darstellung von Einträgen bis zu 5x, mit durchschnittlich 2. x Leistungssteigerung. Dies wird jedoch die Verzauberungsbrille und animierte Texturen zerstören/verbuggen.", "config.roughlyenoughitems.itemCheatingMode": "Anzahl der Gegenstände beim Cheaten:", "config.roughlyenoughitems.itemCheatingMode.rei_like": "Normal", "config.roughlyenoughitems.itemCheatingMode.jei_like": "Umgekehrt", @@ -248,6 +296,8 @@ "config.roughlyenoughitems.syntaxHighlightingMode.plain_underscored": "Normal unterstrichen", "config.roughlyenoughitems.syntaxHighlightingMode.colorful": "Farbig", "config.roughlyenoughitems.syntaxHighlightingMode.colorful_underscored": "Farbig unterstrichen", + "config.roughlyenoughitems.isFocusModeZoomed": "Autofokus-Modus", + "config.roughlyenoughitems.isFocusModeZoomed.boolean.true": "Gezoomt", "config.roughlyenoughitems.filteringScreen": "Benutzerdefinierte Filter", "config.roughlyenoughitems.filteringRulesScreen": "Benutzerdefinierte Filterregeln", "config.roughlyenoughitems.filteringRulesScreen.new": "Filterregel erstellen", diff --git a/runtime/src/main/resources/assets/roughlyenoughitems/lang/en_us.json b/runtime/src/main/resources/assets/roughlyenoughitems/lang/en_us.json index 6f8b677f0..2817ab195 100755 --- a/runtime/src/main/resources/assets/roughlyenoughitems/lang/en_us.json +++ b/runtime/src/main/resources/assets/roughlyenoughitems/lang/en_us.json @@ -70,13 +70,14 @@ "text.rei.too_long_nbt": "§cItem NBT is too long to be applied in multiplayer.", "text.rei.tag_match": "Accepts Tag: #%s", "text.rei.performance": "Performance Analysis", + "text.rei.shapeless": "Shapeless", "ordering.rei.ascending": "Ascending", "ordering.rei.descending": "Descending", "ordering.rei.registry": "Registry", "ordering.rei.name": "Name", "ordering.rei.item_groups": "Item Groups", "text.auto_craft.move_items": "Move Items", - "text.auto_craft.move_items.tooltip": "Ctrl-Click to Move Items", + "text.auto_craft.move_items.tooltip": "Ctrl-Click to Quick Craft", "text.auto_craft.move_items.yog": "Generate NullPointerException!!", "error.rei.transfer.too_small": "Unable to move items to a %dx%d grid.", "error.rei.not.on.server": "REI is not on the server.", diff --git a/runtime/src/main/resources/assets/roughlyenoughitems/lang/pt_br.json b/runtime/src/main/resources/assets/roughlyenoughitems/lang/pt_br.json index 0025052fb..35c9550e8 100644 --- a/runtime/src/main/resources/assets/roughlyenoughitems/lang/pt_br.json +++ b/runtime/src/main/resources/assets/roughlyenoughitems/lang/pt_br.json @@ -7,13 +7,17 @@ "text.rei.cheating_limited_creative_enabled": "§aAtivar trapaças (modo Criativo)", "text.rei.no_permission_cheat": "Você precisa ser um operador para obter itens", "text.rei.search.field.suggestion": "Buscar...", - "text.rei.feedback": "Deseja enviar feedback ao desenvolvedor do REI? %s para enviá-lo!", + "text.rei.feedback": "Deseja enviar um feedback ao desenvolvedor do REI? %s para enviá-lo!", "text.rei.feedback.link": "Acesse o formulário de feedback", + "text.rei.support.me": "Apoie o REI para torná-lo ainda melhor!", + "text.rei.support.me.desc": "Como apoiador do REI no Patreon, você pode baixar a versão mais recente do REI para snapshots.\nVocê também pode me apoiar ao alugar um servidor na BisectHosting.", + "text.rei.support.me.patreon": "Apoie o REI no Patreon", + "text.rei.support.me.bisect": "Use o código SHEDANIEL na BisectHosting", "text.rei.not.fully.initialized": "O REI ainda não está completamente inicializado!", "text.rei.not.fully.initialized.tooltip": "Etapas restantes: %s\nSe isso continuar,\nverifique os registros!\n", "text.rei.inventory.highlighting.enabled": "Destaque de inventário ativado", "text.rei.inventory.highlighting.enabled.tooltip": "Os espaços não encontrados na busca\nficarão da cor cinza.\nClique duas vezes na barra de busca para ativar o modo.", - "text.rei.caching.search": "Memorizando busca...", + "text.rei.caching.search": "Memorizando busca do REI...", "text.rei.caching.search.step": "Passo %d/%d (%s%%):", "text.rei.config.menu.dark_theme": "Tema escuro", "text.rei.config.menu.craftable_filter": "Fabricáveis", @@ -59,8 +63,8 @@ "category.rei.information": "Informações", "text.rei.composting.chance": "§e%d%% de chances", "text.rei.composting.page": "Pág. %d", - "text.rei.config": "Definições", - "text.rei.config_tooltip": "Abrir menu de definições\n§7Shift + clique para alternar o modo trapaça", + "text.rei.config": "Ajustes", + "text.rei.config_tooltip": "Abrir menu de ajustes\n§7Shift + clique para alternar o modo trapaça", "text.rei.cheat_items": "{player_name} recebeu {item_count} unidade(s) de [{item_name}§f].", "text.rei.failed_cheat_items": "§cFalha ao obter itens.", "text.rei.too_long_nbt": "§cO NBT do item é longo demais para ser aplicado ao modo multijogador.", @@ -75,10 +79,10 @@ "text.auto_craft.move_items.tooltip": "Ctrl + clique para mover itens", "text.auto_craft.move_items.yog": "Gerar NullPointerException!", "error.rei.transfer.too_small": "Não é possível mover os itens para uma grade %dx%d.", - "error.rei.not.on.server": "O REI não está disponível no servidor.", + "error.rei.not.on.server": "O REI não está no servidor.", "error.rei.not.enough.materials": "Matéria-prima insuficiente.", "error.rei.internal.error": "Erro interno: %s", - "error.rei.recipe.not.unlocked": "Receita inacessível no livro de receitas.", + "error.rei.recipe.not.unlocked": "Receita inacessível no livro.", "error.rei.not.supported.move.items": "Não é possível mover itens com essa receita e contêiner.", "error.rei.no.handlers.applicable": "Processo indisponível.", "error.rei.multi.errors": "Vários erros:", @@ -97,13 +101,14 @@ "text.rei.gamemode_button.tooltip.entry": "Mudar para %s", "text.rei.weather_button.tooltip.dropdown": "Alterar tempo: Lista", "text.rei.weather_button.tooltip.entry": "Mudar para %s", + "text.rei.time_button.tooltip.entry": "Alterar para %s", "text.rei.time_button.name.morn": "Manhã", "text.rei.time_button.name.noon": "Meio-dia", |
