aboutsummaryrefslogtreecommitdiff
path: root/runtime
diff options
context:
space:
mode:
authorshedaniel <daniel@shedaniel.me>2022-04-16 03:15:46 +0800
committershedaniel <daniel@shedaniel.me>2022-04-16 03:15:46 +0800
commitad476378effa1dfd5fbef9c4d4cb5eadb9954d32 (patch)
tree5a9c0ada8e451b6ce84de8ef4f4520c092f4c680 /runtime
parent8d9d53b65561fedea8f61d194d411565fd89b57e (diff)
downloadRoughlyEnoughItems-ad476378effa1dfd5fbef9c4d4cb5eadb9954d32.tar.gz
RoughlyEnoughItems-ad476378effa1dfd5fbef9c4d4cb5eadb9954d32.tar.bz2
RoughlyEnoughItems-ad476378effa1dfd5fbef9c4d4cb5eadb9954d32.zip
Add shapeless indicator
Diffstat (limited to 'runtime')
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/DelegateWidgetWithTranslate.java86
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/InternalWidgets.java83
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/MergedWidget.java66
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/RendererWrappedWidget.java72
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/VanillaWrappedWidget.java82
-rw-r--r--runtime/src/main/resources/assets/roughlyenoughitems/lang/de_de.json50
-rwxr-xr-xruntime/src/main/resources/assets/roughlyenoughitems/lang/en_us.json3
-rw-r--r--runtime/src/main/resources/assets/roughlyenoughitems/lang/pt_br.json57
-rw-r--r--runtime/src/main/resources/assets/roughlyenoughitems/lang/zh_cn.json4
-rw-r--r--runtime/src/main/resources/assets/roughlyenoughitems/lang/zh_tw.json4
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",