aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/me/shedaniel
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/me/shedaniel')
-rw-r--r--src/main/java/me/shedaniel/rei/api/ClientHelper.java2
-rw-r--r--src/main/java/me/shedaniel/rei/api/ConfigObject.java2
-rw-r--r--src/main/java/me/shedaniel/rei/gui/toast/CopyRecipeIdentifierToast.java52
-rw-r--r--src/main/java/me/shedaniel/rei/gui/widget/AutoCraftingButtonWidget.java15
-rw-r--r--src/main/java/me/shedaniel/rei/impl/ClientHelperImpl.java9
-rw-r--r--src/main/java/me/shedaniel/rei/impl/ConfigObjectImpl.java11
6 files changed, 90 insertions, 1 deletions
diff --git a/src/main/java/me/shedaniel/rei/api/ClientHelper.java b/src/main/java/me/shedaniel/rei/api/ClientHelper.java
index 68b8f2e0d..458379457 100644
--- a/src/main/java/me/shedaniel/rei/api/ClientHelper.java
+++ b/src/main/java/me/shedaniel/rei/api/ClientHelper.java
@@ -80,6 +80,8 @@ public interface ClientHelper {
FabricKeyBinding getFocusSearchFieldKeyBinding();
+ FabricKeyBinding getCopyRecipeIdentifierKeyBinding();
+
/**
* Gets the mod from an item
*
diff --git a/src/main/java/me/shedaniel/rei/api/ConfigObject.java b/src/main/java/me/shedaniel/rei/api/ConfigObject.java
index c037b612c..e87662de3 100644
--- a/src/main/java/me/shedaniel/rei/api/ConfigObject.java
+++ b/src/main/java/me/shedaniel/rei/api/ConfigObject.java
@@ -28,6 +28,8 @@ public interface ConfigObject {
boolean isUsingDarkTheme();
+ boolean isToastDisplayedOnCopyIdentifier();
+
boolean doesRenderEntryExtraOverlay();
boolean isEntryListWidgetScrolled();
diff --git a/src/main/java/me/shedaniel/rei/gui/toast/CopyRecipeIdentifierToast.java b/src/main/java/me/shedaniel/rei/gui/toast/CopyRecipeIdentifierToast.java
new file mode 100644
index 000000000..1c42b3e89
--- /dev/null
+++ b/src/main/java/me/shedaniel/rei/gui/toast/CopyRecipeIdentifierToast.java
@@ -0,0 +1,52 @@
+package me.shedaniel.rei.gui.toast;
+
+import com.mojang.blaze3d.platform.GlStateManager;
+import com.mojang.blaze3d.systems.RenderSystem;
+import net.minecraft.client.MinecraftClient;
+import net.minecraft.client.toast.Toast;
+import net.minecraft.client.toast.ToastManager;
+import net.minecraft.util.Identifier;
+
+import javax.annotation.Nullable;
+
+public class CopyRecipeIdentifierToast implements Toast {
+
+ protected static final Identifier TOASTS_TEX = new Identifier("roughlyenoughitems", "textures/gui/toasts.png");
+ private String title;
+ private String subtitle;
+ private long startTime;
+
+ public CopyRecipeIdentifierToast(String title, @Nullable String subtitleNullable) {
+ this.title = title;
+ this.subtitle = subtitleNullable;
+ }
+
+ public static void addToast(String title, @Nullable String subtitleNullable) {
+ MinecraftClient.getInstance().getToastManager().add(new CopyRecipeIdentifierToast(title, subtitleNullable));
+ }
+
+ @Override
+ public Visibility draw(ToastManager toastManager, long var2) {
+ toastManager.getGame().getTextureManager().bindTexture(TOASTS_TEX);
+ RenderSystem.color3f(1.0F, 1.0F, 1.0F);
+ toastManager.blit(0, 0, 0, 0, 160, 32);
+ if (this.subtitle == null) {
+ toastManager.getGame().textRenderer.draw(this.title, 18.0F, 12.0F, 11141120);
+ } else {
+ toastManager.getGame().textRenderer.draw(this.title, 18.0F, 7.0F, 11141120);
+ toastManager.getGame().textRenderer.draw(this.subtitle, 18.0F, 18.0F, -16777216);
+ }
+
+ return var2 - this.startTime < 5000L ? Visibility.SHOW : Visibility.HIDE;
+ }
+
+ @Override
+ public Object getType() {
+ return Type.THIS_IS_SURE_A_TYPE;
+ }
+
+ public enum Type {
+ THIS_IS_SURE_A_TYPE
+ }
+
+}
diff --git a/src/main/java/me/shedaniel/rei/gui/widget/AutoCraftingButtonWidget.java b/src/main/java/me/shedaniel/rei/gui/widget/AutoCraftingButtonWidget.java
index 74ca3d8f9..fbb942235 100644
--- a/src/main/java/me/shedaniel/rei/gui/widget/AutoCraftingButtonWidget.java
+++ b/src/main/java/me/shedaniel/rei/gui/widget/AutoCraftingButtonWidget.java
@@ -10,7 +10,10 @@ import com.mojang.blaze3d.systems.RenderSystem;
import it.unimi.dsi.fastutil.ints.IntList;
import me.shedaniel.math.api.Point;
import me.shedaniel.math.api.Rectangle;
+import me.shedaniel.math.impl.PointHelper;
+import me.shedaniel.rei.RoughlyEnoughItemsCore;
import me.shedaniel.rei.api.*;
+import me.shedaniel.rei.gui.toast.CopyRecipeIdentifierToast;
import me.shedaniel.rei.impl.ScreenHelper;
import net.minecraft.client.gui.screen.ingame.AbstractContainerScreen;
import net.minecraft.client.resource.language.I18n;
@@ -170,4 +173,16 @@ public class AutoCraftingButtonWidget extends ButtonWidget {
}
return Optional.of(str);
}
+
+ @Override
+ public boolean keyPressed(int int_1, int int_2, int int_3) {
+ if (displaySupplier.get().getRecipeLocation().isPresent() && ClientHelper.getInstance().getCopyRecipeIdentifierKeyBinding().matchesKey(int_1, int_2) && containsMouse(PointHelper.fromMouse())) {
+ minecraft.keyboard.setClipboard(displaySupplier.get().getRecipeLocation().get().toString());
+ if (RoughlyEnoughItemsCore.getConfigManager().getConfig().isToastDisplayedOnCopyIdentifier()) {
+ CopyRecipeIdentifierToast.addToast(I18n.translate("msg.rei.copied_recipe_id"), I18n.translate("msg.rei.recipe_id_details", displaySupplier.get().getRecipeLocation().get().toString()));
+ }
+ return true;
+ }
+ return super.keyPressed(int_1, int_2, int_3);
+ }
}
diff --git a/src/main/java/me/shedaniel/rei/impl/ClientHelperImpl.java b/src/main/java/me/shedaniel/rei/impl/ClientHelperImpl.java
index fba9c0e82..748869a3c 100644
--- a/src/main/java/me/shedaniel/rei/impl/ClientHelperImpl.java
+++ b/src/main/java/me/shedaniel/rei/impl/ClientHelperImpl.java
@@ -55,8 +55,9 @@ public class ClientHelperImpl implements ClientHelper, ClientModInitializer {
private final Identifier previousPageKeybind = new Identifier("roughlyenoughitems", "previous_page");
private final Identifier nextPageKeybind = new Identifier("roughlyenoughitems", "next_page");
private final Identifier focusSearchFieldKeybind = new Identifier("roughlyenoughitems", "focus_search");
+ private final Identifier copyRecipeIdentifierKeybind = new Identifier("roughlyenoughitems", "copy_recipe_id");
private final Map<String, String> modNameCache = Maps.newHashMap();
- public FabricKeyBinding recipe, usage, hide, previousPage, nextPage, focusSearchField;
+ public FabricKeyBinding recipe, usage, hide, previousPage, nextPage, focusSearchField, copyRecipeIdentifier;
@Override
public String getFormattedModFromItem(Item item) {
@@ -105,6 +106,11 @@ public class ClientHelperImpl implements ClientHelper, ClientModInitializer {
}
@Override
+ public FabricKeyBinding getCopyRecipeIdentifierKeyBinding() {
+ return copyRecipeIdentifier;
+ }
+
+ @Override
public String getModFromItem(Item item) {
if (item.equals(Items.AIR))
return "";
@@ -265,6 +271,7 @@ public class ClientHelperImpl implements ClientHelper, ClientModInitializer {
KeyBindingRegistryImpl.INSTANCE.register(previousPage = FabricKeyBinding.Builder.create(previousPageKeybind, InputUtil.Type.KEYSYM, -1, category).build());
KeyBindingRegistryImpl.INSTANCE.register(nextPage = FabricKeyBinding.Builder.create(nextPageKeybind, InputUtil.Type.KEYSYM, -1, category).build());
KeyBindingRegistryImpl.INSTANCE.register(focusSearchField = FabricKeyBinding.Builder.create(focusSearchFieldKeybind, InputUtil.Type.KEYSYM, -1, category).build());
+ KeyBindingRegistryImpl.INSTANCE.register(copyRecipeIdentifier = FabricKeyBinding.Builder.create(copyRecipeIdentifierKeybind, InputUtil.Type.KEYSYM, -1, category).build());
}
}
diff --git a/src/main/java/me/shedaniel/rei/impl/ConfigObjectImpl.java b/src/main/java/me/shedaniel/rei/impl/ConfigObjectImpl.java
index 12521e09e..9c56f5b95 100644
--- a/src/main/java/me/shedaniel/rei/impl/ConfigObjectImpl.java
+++ b/src/main/java/me/shedaniel/rei/impl/ConfigObjectImpl.java
@@ -84,6 +84,12 @@ public class ConfigObjectImpl implements ConfigObject {
.withName("enableCraftableOnlyButton")
.build();
+ private ConfigValue<Boolean> toastDisplayedOnCopyIdentifier = ConfigValue.builder(Boolean.class)
+ .withParent(modules)
+ .withDefaultValue(true)
+ .withName("toastDisplayedOnCopyIdentifier")
+ .build();
+
private ConfigValue<String> gamemodeCommand = ConfigValue.builder(String.class)
.withParent(technical)
.withDefaultValue("/gamemode {gamemode}")
@@ -229,6 +235,11 @@ public class ConfigObjectImpl implements ConfigObject {
}
@Override
+ public boolean isToastDisplayedOnCopyIdentifier() {
+ return toastDisplayedOnCopyIdentifier.getValue();
+ }
+
+ @Override
public boolean doesRenderEntryExtraOverlay() {
return renderEntryExtraOverlay.getValue().booleanValue();
}