diff options
| author | Unknown <shekwancheung0528@gmail.com> | 2019-01-11 22:24:25 +0800 |
|---|---|---|
| committer | Unknown <shekwancheung0528@gmail.com> | 2019-01-11 22:24:25 +0800 |
| commit | c0dd3fc336fdd0fe3dd9a705c2e8256f72de4869 (patch) | |
| tree | 4ee208a4619d49b8b2536c36086bef40f323ef09 /src/main/java | |
| parent | 60bb2d5d0e782400a92ec608a42285bad38ae8fb (diff) | |
| download | RoughlyEnoughItems-c0dd3fc336fdd0fe3dd9a705c2e8256f72de4869.tar.gz RoughlyEnoughItems-c0dd3fc336fdd0fe3dd9a705c2e8256f72de4869.tar.bz2 RoughlyEnoughItems-c0dd3fc336fdd0fe3dd9a705c2e8256f72de4869.zip | |
Fixed Lots of bugs
Diffstat (limited to 'src/main/java')
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 |
