aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorUnknown <shekwancheung0528@gmail.com>2019-01-11 22:24:25 +0800
committerUnknown <shekwancheung0528@gmail.com>2019-01-11 22:24:25 +0800
commitc0dd3fc336fdd0fe3dd9a705c2e8256f72de4869 (patch)
tree4ee208a4619d49b8b2536c36086bef40f323ef09 /src/main/java
parent60bb2d5d0e782400a92ec608a42285bad38ae8fb (diff)
downloadRoughlyEnoughItems-c0dd3fc336fdd0fe3dd9a705c2e8256f72de4869.tar.gz
RoughlyEnoughItems-c0dd3fc336fdd0fe3dd9a705c2e8256f72de4869.tar.bz2
RoughlyEnoughItems-c0dd3fc336fdd0fe3dd9a705c2e8256f72de4869.zip
Fixed Lots of bugs
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/me/shedaniel/rei/client/GuiHelper.java29
-rw-r--r--src/main/java/me/shedaniel/rei/gui/ContainerGuiOverlay.java42
-rw-r--r--src/main/java/me/shedaniel/rei/gui/widget/ItemListOverlay.java11
-rw-r--r--src/main/java/me/shedaniel/rei/gui/widget/ItemSlotWidget.java7
-rw-r--r--src/main/java/me/shedaniel/rei/gui/widget/RecipeViewingWidget.java18
-rw-r--r--src/main/java/me/shedaniel/rei/gui/widget/TabWidget.java3
-rw-r--r--src/main/java/me/shedaniel/rei/gui/widget/TextFieldWidget.java601
-rw-r--r--src/main/java/me/shedaniel/rei/listeners/IMixinContainerGui.java2
-rw-r--r--src/main/java/me/shedaniel/rei/mixin/MixinContainerGui.java20
9 files changed, 677 insertions, 56 deletions
diff --git a/src/main/java/me/shedaniel/rei/client/GuiHelper.java b/src/main/java/me/shedaniel/rei/client/GuiHelper.java
new file mode 100644
index 000000000..09d05ec2c
--- /dev/null
+++ b/src/main/java/me/shedaniel/rei/client/GuiHelper.java
@@ -0,0 +1,29 @@
+package me.shedaniel.rei.client;
+
+import me.shedaniel.rei.gui.ContainerGuiOverlay;
+import me.shedaniel.rei.gui.widget.TextFieldWidget;
+import net.minecraft.client.gui.ContainerGui;
+
+public class GuiHelper {
+
+ private static ContainerGuiOverlay overlay;
+ public static TextFieldWidget searchField;
+
+ public static ContainerGuiOverlay getOverlay(ContainerGui lastGui) {
+ if (overlay == null) {
+ overlay = new ContainerGuiOverlay(lastGui);
+ overlay.onInitialized();
+ }
+ return overlay;
+ }
+
+ public static void setOverlay(ContainerGuiOverlay overlay) {
+ GuiHelper.overlay = overlay;
+ overlay.onInitialized();
+ }
+
+ public static void resetOverlay() {
+ overlay = null;
+ }
+
+}
diff --git a/src/main/java/me/shedaniel/rei/gui/ContainerGuiOverlay.java b/src/main/java/me/shedaniel/rei/gui/ContainerGuiOverlay.java
index 7d8ab36f2..687f43630 100644
--- a/src/main/java/me/shedaniel/rei/gui/ContainerGuiOverlay.java
+++ b/src/main/java/me/shedaniel/rei/gui/ContainerGuiOverlay.java
@@ -1,15 +1,14 @@
package me.shedaniel.rei.gui;
import com.mojang.blaze3d.platform.GlStateManager;
-import me.shedaniel.rei.RoughlyEnoughItemsCore;
import me.shedaniel.rei.client.ClientHelper;
+import me.shedaniel.rei.client.GuiHelper;
import me.shedaniel.rei.gui.widget.*;
import me.shedaniel.rei.listeners.IMixinContainerGui;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.ContainerGui;
import net.minecraft.client.gui.Gui;
import net.minecraft.client.gui.GuiEventListener;
-import net.minecraft.client.gui.widget.TextFieldWidget;
import net.minecraft.client.render.GuiLighting;
import net.minecraft.client.resource.language.I18n;
import net.minecraft.client.util.Window;
@@ -21,16 +20,15 @@ import java.util.List;
public class ContainerGuiOverlay extends Gui {
+ public static String searchTerm = "";
private static int page = 0;
private final List<IWidget> widgets;
private final List<QueuedTooltip> queuedTooltips;
private Rectangle rectangle;
private IMixinContainerGui containerGui;
private Window window;
- private ItemListOverlay itemListOverlay;
+ private static ItemListOverlay itemListOverlay;
private ButtonWidget buttonLeft, buttonRight;
- private TextFieldWidget searchField;
- public static String searchTerm= "";
public ContainerGuiOverlay(ContainerGui containerGui) {
this.queuedTooltips = new ArrayList<>();
@@ -87,17 +85,28 @@ public class ContainerGuiOverlay extends Gui {
super.draw(mouseX, mouseY, partialTicks);
}
});
- Rectangle textFieldArea = getTextFieldArea();
- this.listeners.add(searchField = new TextFieldWidget(-1, MinecraftClient.getInstance().fontRenderer,
- (int) textFieldArea.getX(), (int) textFieldArea.getY(), (int) textFieldArea.getWidth(), (int) textFieldArea.getHeight()) {
- @Override
- public void addText(String string_1) {
- super.addText(string_1);
- searchTerm = this.getText();
- itemListOverlay.updateList(page, searchTerm);
- }
- });
- searchField.setText(searchTerm);
+// Rectangle textFieldArea = getTextFieldArea();
+// this.widgets.add(searchField = new TextFieldWidget(-1, MinecraftClient.getInstance().fontRenderer,
+// (int) textFieldArea.getX(), (int) textFieldArea.getY(), (int) textFieldArea.getWidth(), (int) textFieldArea.getHeight()) {
+// @Override
+// public void addText(String string_1) {
+// super.addText(string_1);
+// searchTerm = this.getText();
+// itemListOverlay.updateList(page, searchTerm);
+// }
+// });
+ if (GuiHelper.searchField == null)
+ GuiHelper.searchField = new TextFieldWidget(0, 0, 0, 0) {
+ @Override
+ public void addText(String string_1) {
+ super.addText(string_1);
+ searchTerm = this.getText();
+ itemListOverlay.updateList(page, searchTerm);
+ }
+ };
+ GuiHelper.searchField.setBounds(getTextFieldArea());
+ this.widgets.add(GuiHelper.searchField);
+ GuiHelper.searchField.setText(searchTerm);
this.listeners.addAll(widgets);
}
@@ -130,7 +139,6 @@ public class ContainerGuiOverlay extends Gui {
queuedTooltips.forEach(queuedTooltip -> containerGui.getContainerGui().drawTooltip(queuedTooltip.text, queuedTooltip.mouse.x, queuedTooltip.mouse.y));
queuedTooltips.clear();
GuiLighting.disable();
- searchField.render(mouseX, mouseY, partialTicks);
}
public void addTooltip(QueuedTooltip queuedTooltip) {
diff --git a/src/main/java/me/shedaniel/rei/gui/widget/ItemListOverlay.java b/src/main/java/me/shedaniel/rei/gui/widget/ItemListOverlay.java
index 0a93990cc..a87775c7d 100644
--- a/src/main/java/me/shedaniel/rei/gui/widget/ItemListOverlay.java
+++ b/src/main/java/me/shedaniel/rei/gui/widget/ItemListOverlay.java
@@ -2,10 +2,7 @@ package me.shedaniel.rei.gui.widget;
import com.google.common.collect.Lists;
import me.shedaniel.rei.RoughlyEnoughItemsCore;
-import me.shedaniel.rei.client.ClientHelper;
-import me.shedaniel.rei.client.REIItemListOrdering;
-import me.shedaniel.rei.client.RecipeHelper;
-import me.shedaniel.rei.client.SearchArgument;
+import me.shedaniel.rei.client.*;
import me.shedaniel.rei.listeners.ClientLoaded;
import me.shedaniel.rei.listeners.IMixinContainerGui;
import net.minecraft.client.MinecraftClient;
@@ -49,7 +46,7 @@ public class ItemListOverlay extends Drawable implements IWidget {
widgets.forEach(widget -> widget.draw(int_1, int_2, float_1));
ClientPlayerEntity player = MinecraftClient.getInstance().player;
if (rectangle.contains(ClientHelper.getMouseLocation()) && ClientHelper.isCheating() && !player.inventory.getCursorStack().isEmpty())
- containerGui.getOverlay().addTooltip(new QueuedTooltip(ClientHelper.getMouseLocation(), Arrays.asList(I18n.translate("text.rei.delete_items"))));
+ GuiHelper.getOverlay(containerGui.getContainerGui()).addTooltip(new QueuedTooltip(ClientHelper.getMouseLocation(), Arrays.asList(I18n.translate("text.rei.delete_items"))));
}
public void updateList(int page, String searchTerm) {
@@ -90,9 +87,9 @@ public class ItemListOverlay extends Drawable implements IWidget {
}
} else {
if (button == 0)
- return ClientHelper.executeRecipeKeyBind(containerGui.getOverlay(), getCurrentStack().copy(), containerGui);
+ return ClientHelper.executeRecipeKeyBind(GuiHelper.getOverlay(containerGui.getContainerGui()), getCurrentStack().copy(), containerGui);
else if (button == 1)
- return ClientHelper.executeUsageKeyBind(containerGui.getOverlay(), getCurrentStack().copy(), containerGui);
+ return ClientHelper.executeUsageKeyBind(GuiHelper.getOverlay(containerGui.getContainerGui()), getCurrentStack().copy(), containerGui);
}
}
return false;
diff --git a/src/main/java/me/shedaniel/rei/gui/widget/ItemSlotWidget.java b/src/main/java/me/shedaniel/rei/gui/widget/ItemSlotWidget.java
index e53dc8cae..f87c5a291 100644
--- a/src/main/java/me/shedaniel/rei/gui/widget/ItemSlotWidget.java
+++ b/src/main/java/me/shedaniel/rei/gui/widget/ItemSlotWidget.java
@@ -3,6 +3,7 @@ package me.shedaniel.rei.gui.widget;
import com.google.common.collect.Lists;
import me.shedaniel.rei.RoughlyEnoughItemsCore;
import me.shedaniel.rei.client.ClientHelper;
+import me.shedaniel.rei.client.GuiHelper;
import me.shedaniel.rei.listeners.IMixinContainerGui;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.Drawable;
@@ -81,7 +82,7 @@ public class ItemSlotWidget extends Drawable implements HighlightableWidget {
protected void drawToolTip(ItemStack itemStack) {
List<String> toolTip = getTooltip(itemStack);
- containerGui.getOverlay().addTooltip(new QueuedTooltip(ClientHelper.getMouseLocation(), toolTip));
+ GuiHelper.getOverlay(containerGui.getContainerGui()).addTooltip(new QueuedTooltip(ClientHelper.getMouseLocation(), toolTip));
}
protected List<String> getTooltip(ItemStack itemStack) {
@@ -120,9 +121,9 @@ public class ItemSlotWidget extends Drawable implements HighlightableWidget {
return false;
if (getBounds().contains(mouseX, mouseY)) {
if (button == 0)
- return ClientHelper.executeRecipeKeyBind(containerGui.getOverlay(), getCurrentStack().copy(), containerGui);
+ return ClientHelper.executeRecipeKeyBind(GuiHelper.getOverlay(containerGui.getContainerGui()), getCurrentStack().copy(), containerGui);
else if (button == 1)
- return ClientHelper.executeUsageKeyBind(containerGui.getOverlay(), getCurrentStack().copy(), containerGui);
+ return ClientHelper.executeUsageKeyBind(GuiHelper.getOverlay(containerGui.getContainerGui()), getCurrentStack().copy(), containerGui);
}
return false;
}
diff --git a/src/main/java/me/shedaniel/rei/gui/widget/RecipeViewingWidget.java b/src/main/java/me/shedaniel/rei/gui/widget/RecipeViewingWidget.java
index 949e4062d..90bde332d 100644
--- a/src/main/java/me/shedaniel/rei/gui/widget/RecipeViewingWidget.java
+++ b/src/main/java/me/shedaniel/rei/gui/widget/RecipeViewingWidget.java
@@ -5,7 +5,7 @@ import com.mojang.blaze3d.platform.GlStateManager;
import me.shedaniel.rei.api.IRecipeCategory;
import me.shedaniel.rei.api.IRecipeDisplay;
import me.shedaniel.rei.client.ClientHelper;
-import me.shedaniel.rei.gui.ContainerGuiOverlay;
+import me.shedaniel.rei.client.GuiHelper;
import me.shedaniel.rei.listeners.IMixinContainerGui;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.audio.PositionedSoundInstance;
@@ -36,7 +36,6 @@ public class RecipeViewingWidget extends Gui {
private List<IRecipeCategory> categories;
private IRecipeCategory selectedCategory;
private IMixinContainerGui parent;
- private ContainerGuiOverlay overlay;
private int page, categoryPages;
private ButtonWidget recipeBack, recipeNext, categoryBack, categoryNext;
@@ -50,7 +49,6 @@ public class RecipeViewingWidget extends Gui {
this.categories = new LinkedList<>(categoriesMap.keySet());
Collections.reverse(categories);
this.selectedCategory = categories.get(0);
- this.overlay = parent.getOverlay();
this.tabs = new ArrayList<>();
}
@@ -58,10 +56,6 @@ public class RecipeViewingWidget extends Gui {
return parent;
}
- public ContainerGuiOverlay getOverlay() {
- return overlay;
- }
-
@Override
public boolean keyPressed(int int_1, int int_2, int int_3) {
if (int_1 == 256 && this.doesEscapeKeyClose()) {
@@ -76,7 +70,7 @@ public class RecipeViewingWidget extends Gui {
@Override
public void onClosed() {
- parent.setOverlay(overlay);
+ GuiHelper.resetOverlay();
}
@Override
@@ -178,10 +172,10 @@ public class RecipeViewingWidget extends Gui {
widgets.addAll(selectedCategory.setupDisplay(getParent(), middleDisplay, new Rectangle((int) getBounds().getCenterX() - 75, getBounds().y + 108, 150, 66)));
}
}
-
- overlay.onInitialized();
+
+ GuiHelper.getOverlay(parent.getContainerGui()).onInitialized();
listeners.addAll(tabs);
- listeners.add(overlay);
+ listeners.add(GuiHelper.getOverlay(parent.getContainerGui()));
listeners.addAll(widgets);
}
@@ -206,7 +200,7 @@ public class RecipeViewingWidget extends Gui {
GlStateManager.color4f(1.0F, 1.0F, 1.0F, 1.0F);
GuiLighting.disable();
tabs.stream().filter(TabWidget::isSelected).forEach(tabWidget -> tabWidget.draw(mouseX, mouseY, partialTicks));
- overlay.render(mouseX, mouseY, partialTicks);
+ GuiHelper.getOverlay(parent.getContainerGui()).render(mouseX, mouseY, partialTicks);
}
@Override
diff --git a/src/main/java/me/shedaniel/rei/gui/widget/TabWidget.java b/src/main/java/me/shedaniel/rei/gui/widget/TabWidget.java
index fc91f6039..30f9d7cda 100644
--- a/src/main/java/me/shedaniel/rei/gui/widget/TabWidget.java
+++ b/src/main/java/me/shedaniel/rei/gui/widget/TabWidget.java
@@ -3,6 +3,7 @@ package me.shedaniel.rei.gui.widget;
import com.google.common.collect.Lists;
import com.mojang.blaze3d.platform.GlStateManager;
import me.shedaniel.rei.client.ClientHelper;
+import me.shedaniel.rei.client.GuiHelper;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.Drawable;
import net.minecraft.client.render.GuiLighting;
@@ -89,7 +90,7 @@ public class TabWidget extends Drawable implements HighlightableWidget {
}
private void drawTooltip() {
- recipeViewingWidget.getParent().getOverlay().addTooltip(new QueuedTooltip(ClientHelper.getMouseLocation(), Arrays.asList(categoryName)));
+ GuiHelper.getOverlay(recipeViewingWidget.getParent().getContainerGui()).addTooltip(new QueuedTooltip(ClientHelper.getMouseLocation(), Arrays.asList(categoryName)));
}
@Override
diff --git a/src/main/java/me/shedaniel/rei/gui/widget/TextFieldWidget.java b/src/main/java/me/shedaniel/rei/gui/widget/TextFieldWidget.java
new file mode 100644
index 000000000..e735293be
--- /dev/null
+++ b/src/main/java/me/shedaniel/rei/gui/widget/TextFieldWidget.java
@@ -0,0 +1,601 @@
+package me.shedaniel.rei.gui.widget;
+
+import com.google.common.base.Predicates;
+import com.mojang.blaze3d.platform.GlStateManager;
+import net.minecraft.SharedConstants;
+import net.minecraft.client.MinecraftClient;
+import net.minecraft.client.font.FontRenderer;
+import net.minecraft.client.gui.Drawable;
+import net.minecraft.client.gui.Gui;
+import net.minecraft.client.render.BufferBuilder;
+import net.minecraft.client.render.Tessellator;
+import net.minecraft.client.render.VertexFormats;
+import net.minecraft.util.math.MathHelper;
+
+import java.awt.*;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.function.BiFunction;
+import java.util.function.Consumer;
+import java.util.function.Predicate;
+
+public class TextFieldWidget extends Drawable implements IWidget {
+
+ private final FontRenderer fontRenderer;
+ private int width;
+ private int height;
+ private int x;
+ private int y;
+ private String text;
+ private int maxLength;
+ private int focusedTicks;
+ private boolean hasBorder;
+ private boolean field_2096;
+ private boolean focused;
+ private boolean editable;
+ private boolean field_17037;
+ private int field_2103;
+ private int cursorMax;
+ private int cursorMin;
+ private int field_2100;
+ private int field_2098;
+ private boolean visible;
+ private String suggestion;
+ private Consumer<String> changedListener;
+ private Predicate<String> textPredicate;
+ private BiFunction<String, Integer, String> field_2099;
+
+ public TextFieldWidget(Rectangle rectangle) {
+ this(rectangle.x, rectangle.y, rectangle.width, rectangle.height);
+ }
+
+ public void setBounds(Rectangle rectangle) {
+ this.x = rectangle.x;
+ this.y = rectangle.y;
+ this.width = rectangle.width;
+ this.height = rectangle.height;
+ }
+
+ public TextFieldWidget(int x, int y, int width, int height) {
+ this.text = "";
+ this.maxLength = 32;
+ this.hasBorder = true;
+ this.field_2096 = true;
+ this.editable = true;
+ this.field_2100 = 14737632;
+ this.field_2098 = 7368816;
+ this.visible = true;
+ this.textPredicate = Predicates.alwaysTrue();
+ this.field_2099 = (string_1, integer_1) -> {
+ return string_1;
+ };
+ this.fontRenderer = MinecraftClient.getInstance().fontRenderer;
+ this.x = x;
+ this.y = y;
+ this.width = width;
+ this.height = height;
+ }
+
+ public void setChangedListener(Consumer<String> biConsumer_1) {
+ this.changedListener = biConsumer_1;
+ }
+
+ public void method_1854(BiFunction<String, Integer, String> biFunction_1) {
+ this.field_2099 = biFunction_1;
+ }
+
+ public void tick() {
+ ++this.focusedTicks;
+ }
+
+ public String getText() {
+ return this.text;
+ }
+
+ public void setText(String string_1) {
+ if (this.textPredicate.test(string_1)) {
+ if (string_1.length() > this.maxLength) {
+ this.text = string_1.substring(0, this.maxLength);
+ } else {
+ this.text = string_1;
+ }
+
+ this.onChanged(string_1);
+ this.method_1872();
+ }
+ }
+
+ public String getSelectedText() {
+ int int_1 = this.cursorMax < this.cursorMin ? this.cursorMax : this.cursorMin;
+ int int_2 = this.cursorMax < this.cursorMin ? this.cursorMin : this.cursorMax;
+ return this.text.substring(int_1, int_2);
+ }
+
+ public void method_1890(Predicate<String> predicate_1) {
+ this.textPredicate = predicate_1;
+ }
+
+ public void addText(String string_1) {
+ String string_2 = "";
+ String string_3 = SharedConstants.stripInvalidChars(string_1);
+ int int_1 = this.cursorMax < this.cursorMin ? this.cursorMax : this.cursorMin;
+ int int_2 = this.cursorMax < this.cursorMin ? this.cursorMin : this.cursorMax;
+ int int_3 = this.maxLength - this.text.length() - (int_1 - int_2);
+ if (!this.text.isEmpty()) {
+ string_2 = string_2 + this.text.substring(0, int_1);
+ }
+
+ int int_5;
+ if (int_3 < string_3.length()) {
+ string_2 = string_2 + string_3.substring(0, int_3);
+ int_5 = int_3;
+ } else {
+ string_2 = string_2 + string_3;
+ int_5 = string_3.length();
+ }
+
+ if (!this.text.isEmpty() && int_2 < this.text.length()) {
+ string_2 = string_2 + this.text.substring(int_2);
+ }
+
+ if (this.textPredicate.test(string_2)) {
+ this.text = string_2;
+ this.setCursor(int_1 + int_5);
+ this.method_1884(this.cursorMax);
+ this.onChanged(this.text);
+ }
+ }
+
+ public void onChanged(String string_1) {
+ if (this.changedListener != null) {
+ this.changedListener.accept(string_1);
+ }
+
+ }
+
+ private void method_16873(int int_1) {
+ if (Gui.isControlPressed()) {
+ this.method_1877(int_1);
+ } else {
+ this.method_1878(int_1);
+ }
+
+ }
+
+ public void method_1877(int int_1) {
+ if (!this.text.isEmpty()) {
+ if (this.cursorMin != this.cursorMax) {
+ this.addText("");
+ } else {
+ this.method_1878(this.method_1853(int_1) - this.cursorMax);
+ }
+ }
+ }
+
+ public void method_1878(int int_1) {
+ if (!this.text.isEmpty()) {
+ if (this.cursorMin != this.cursorMax) {
+ this.addText("");
+ } else {
+ boolean boolean_1 = int_1 < 0;
+ int int_2 = boolean_1 ? this.cursorMax + int_1 : this.cursorMax;
+ int int_3 = boolean_1 ? this.cursorMax : this.cursorMax + int_1;
+ String string_1 = "";
+ if (int_2 >= 0) {
+ string_1 = this.text.substring(0, int_2);
+ }
+
+ if (int_3 < this.text.length()) {
+ string_1 = string_1 + this.text.substring(int_3);
+ }
+
+ if (this.textPredicate.test(string_1)) {
+ this.text = string_1;
+ if (boolean_1) {
+ this.moveCursor(int_1);
+ }
+
+ this.onChanged(this.text);
+ }
+ }
+ }
+ }
+
+ public int method_1853(int int_1) {
+ return this.method_1869(int_1, this.getCursor());
+ }
+
+ public int method_1869(int int_1, int int_2) {
+ return this.method_1864(int_1, int_2, true);
+ }
+
+ public int method_1864(int int_1, int int_2, boolean boolean_1) {
+ int int_3 = int_2;
+ boolean boolean_2 = int_1 < 0;
+ int int_4 = Math.abs(int_1);
+
+ for(int int_5 = 0; int_5 < int_4; ++int_5) {
+ if (!boolean_2) {
+ int int_6 = this.text.length();
+ int_3 = this.text.indexOf(32, int_3);
+ if (int_3 == -1) {
+ int_3 = int_6;
+ } else {
+ while (boolean_1 && int_3 < int_6 && this.text.charAt(int_3) == ' ') {
+ ++int_3;
+ }
+ }
+ } else {
+ while (boolean_1 && int_3 > 0 && this.text.charAt(int_3 - 1) == ' ') {
+ --int_3;
+ }
+
+ while (int_3 > 0 && this.text.charAt(int_3 - 1) != ' ') {
+ --int_3;
+ }
+ }
+ }
+
+ return int_3;
+ }
+
+ public void moveCursor(int int_1) {
+ this.method_1883(this.cursorMax + int_1);
+ }
+
+ public void method_1883(int int_1) {
+ this.setCursor(int_1);
+ if (!this.field_17037) {
+ this.method_1884(this.cursorMax);
+ }
+
+ this.onChanged(this.text);
+ }
+
+ public void method_1870() {
+ this.method_1883(0);
+ }
+
+ public void method_1872() {
+ this.method_1883(this.text.length());
+ }
+
+ public boolean keyPressed(int int_1, int int_2, int int_3) {
+ if (this.isVisible() && this.isFocused()) {
+ this.field_17037 = Gui.isShiftPressed();
+ if (Gui.isSelectAllShortcutPressed(int_1)) {
+ this.method_1872();
+ this.method_1884(0);
+ return true;
+ } else if (Gui.isCopyShortcutPressed(int_1)) {
+ MinecraftClient.getInstance().keyboard.setClipboard(this.getSelectedText());
+ return true;
+ } else if (Gui.isPasteShortcutPressed(int_1)) {
+ if (this.editable) {
+ this.addText(MinecraftClient.getInstance().keyboard.getClipboard());
+ }
+
+ return true;
+ } else if (Gui.isCutShortcutPressed(int_1)) {
+ MinecraftClient.getInstance().keyboard.setClipboard(this.getSelectedText());
+ if (this.editable) {
+ this.addText("");
+ }
+
+ return true;
+ } else {
+ switch (int_1) {
+ case 259:
+ if (this.editable) {
+ this.method_16873(-1);
+ }
+
+ return true;
+ case 260:
+ case 264:
+ case 265:
+ case 266:
+ case 267:
+ default:
+ return int_1 != 256;
+ case 261:
+ if (this.editable) {
+ this.method_16873(1);
+ }
+
+ return true;
+ case 262:
+ if (Gui.isControlPressed()) {
+ this.method_1883(this.method_1853(1));
+ } else {
+ this.moveCursor(1);
+ }
+
+ return true;
+ case 263:
+ if (Gui.isControlPressed()) {
+ this.method_1883(this.method_1853(-1));
+ } else {
+ this.moveCursor(-1);
+ }
+
+ return true;
+ case 268:
+ this.method_1870();
+ return true;
+ case 269:
+ this.method_1872();
+ return true;
+ }
+ }
+ } else {
+ return false;
+ }
+ }
+
+ public boolean charTyped(char char_1, int int_1) {
+ if (this.isVisible() && this.isFocused()) {
+ if (SharedConstants.isValidChar(char_1)) {
+ if (this.editable) {
+ this.addText(Character.toString(char_1));
+ }
+
+ return true;
+ } else {
+ return false;
+ }
+ } else {
+ return false;
+ }
+ }
+
+ @Override
+ public List<IWidget> getListeners() {
+ return new ArrayList<>();
+ }
+
+ public boolean mouseClicked(double double_1, double double_2, int int_1) {
+ if (!this.isVisible()) {
+ return false;
+ } else {
+ boolean boolean_1 = double_1 >= (double) this.x && double_1 < (double) (this.x + this.width) && double_2 >= (double) this.y && double_2 < (double) (this.y + this.height);
+ if (this.field_2096) {
+ this.setFocused(boolean_1);
+ }
+
+ if (this.focused && boolean_1 && int_1 == 0) {
+ int int_2 = MathHelper.floor(double_1) - this.x;
+ if (this.hasBorder) {
+ int_2 -= 4;
+ }
+
+ String string_1 = this.fontRenderer.method_1714(this.text.substring(this.field_2103), this.method_1859());
+ this.method_1883(this.fontRenderer.method_1714(string_1, int_2).length() + this.field_2103);
+ return true;
+ } else {
+ return false;
+ }
+ }
+ }
+
+ public void draw(int int_1, int int_2, float float_1) {
+ if (this.isVisible()) {
+ if (this.hasBorder()) {
+ drawRect(this.x - 1, this.y - 1, this.x + this.width + 1, this.y + this.height + 1, -6250336);
+ drawRect(this.x, this.y, this.x + this.width, this.y + this.height, -16777216);
+ }
+
+ int int_3 = this.editable ? this.field_2100 : this.field_2098;
+ int int_4 = this.cursorMax - this.field_2103;
+ int int_5 = this.cursorMin - this.field_2103;
+ String string_1 = this.fontRenderer.method_1714(this.text.substring(this.field_2103), this.method_1859());
+ boolean boolean_1 = int_4 >= 0 && int_4 <= string_1.length();
+ boolean boolean_2 = this.focused && this.focusedTicks / 6 % 2 == 0 && boolean_1;
+ int int_6 = this.hasBorder ? this.x + 4 : this.x;
+ int int_7 = this.hasBorder ? this.y + (this.height - 8) / 2 : this.y;
+ int int_8 = int_6;
+ if (int_5 > string_1.length()) {
+ int_5 = string_1.length();
+ }
+
+ if (!string_1.isEmpty()) {
+ String string_2 = boolean_1 ? string_1.substring(0, int_4) : string_1;
+ int_8 = this.fontRenderer.drawWithShadow((String) this.field_2099.apply(string_2, this.field_2103), (float) int_6, (float) int_7, int_3);
+ }
+
+ boolean boolean_3 = this.cursorMax < this.text.length() || this.text.length() >= this.getMaxLength();
+ int int_9 = int_8;
+ if (!boolean_1) {
+ int_9 = int_4 > 0 ? int_6 + this.width : int_6;
+ } else if (boolean_3) {
+ int_9 = int_8 - 1;
+ --int_8;
+ }
+
+ if (!string_1.isEmpty() && boolean_1 && int_4 < string_1.length()) {
+ this.fontRenderer.drawWithShadow((String) this.field_2099.apply(string_1.substring(int_4), this.cursorMax), (float) int_8, (float) int_7, int_3);
+ }
+
+ if (!boolean_3 && this.suggestion != null) {
+ this.fontRenderer.drawWithShadow(this.suggestion, (float) (int_9 - 1), (float) int_7, -8355712);
+ }
+
+ int var10002;
+ int var10003;
+ if (boolean_2) {
+ if (boolean_3) {
+ int var10001 = int_7 - 1;
+ var10002 = int_9 + 1;
+ var10003 = int_7 + 1;
+ this.fontRenderer.getClass();
+ Drawable.drawRect(int_9, var10001, var10002, var10003 + 9, -3092272);
+ } else {
+ this.fontRenderer.drawWithShadow("_", (float) int_9, (float) int_7, int_3);
+ }
+ }
+
+ if (int_5 != int_4) {
+ int int_10 = int_6 + this.fontRenderer.getStringWidth(string_1.substring(0, int_5));
+ var10002 = int_7 - 1;
+ var10003 = int_10 - 1;
+ int var10004 = int_7 + 1;
+ this.fontRenderer.getClass();
+ this.method_1886(int_9, var10002, var10003, var10004 + 9);
+ }
+
+ }
+ }
+
+ private void method_1886(int int_1, int int_2, int int_3, int int_4) {
+ int int_6;
+ if (int_1 < int_3) {
+ int_6 = int_1;
+ int_1 = int_3;
+ int_3 = int_6;
+ }
+
+ if (int_2 < int_4) {
+ int_6 = int_2;
+ int_2 = int_4;
+ int_4 = int_6;
+ }
+
+ if (int_3 > this.x + this.width) {
+ int_3 = this.x + this.width;
+ }
+
+ if (int_1 > this.x + this.width) {
+ int_1 = this.x + this.width;
+ }
+
+ Tessellator tessellator_1 = Tessellator.getInstance();
+ BufferBuilder bufferBuilder_1 = tessellator_1.getBufferBuilder();
+ GlStateManager.color4f(0.0F, 0.0F, 255.0F, 255.0F);
+ GlStateManager.disableTexture();
+ GlStateManager.enableColorLogicOp();
+ GlStateManager.logicOp(GlStateManager.LogicOp.OR_REVERSE);
+ bufferBuilder_1.begin(7, VertexFormats.POSITION);
+ bufferBuilder_1.vertex((double) int_1, (double) int_4, 0.0D).next();
+ bufferBuilder_1.vertex((double) int_3, (double) int_4, 0.0D).next();
+ bufferBuilder_1.vertex((double) int_3, (double) int_2, 0.0D).next();
+ bufferBuilder_1.vertex((double) int_1, (double) int_2, 0.0D).next();
+ tessellator_1.draw();
+ GlStateManager.disableColorLogicOp();
+ GlStateManager.enableTexture();
+ }
+
+ public int getMaxLength() {
+ return this.maxLength;
+ }
+
+ public void setMaxLength(int int_1) {
+ this.maxLength = int_1;
+ if (this.text.length() > int_1) {
+ this.text = this.text.substring(0, int_1);
+ this.onChanged(this.text);
+ }
+ }
+
+ public int getCursor() {
+ return this.cursorMax;
+ }
+
+ public void setCursor(int int_1