aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/me/shedaniel/rei/gui
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/me/shedaniel/rei/gui')
-rw-r--r--src/main/java/me/shedaniel/rei/gui/ContainerScreenOverlay.java58
-rw-r--r--src/main/java/me/shedaniel/rei/gui/config/ConfigEntry.java70
-rw-r--r--src/main/java/me/shedaniel/rei/gui/config/ConfigEntryListWidget.java35
-rw-r--r--src/main/java/me/shedaniel/rei/gui/config/ConfigScreen.java207
-rw-r--r--src/main/java/me/shedaniel/rei/gui/credits/CreditsEntry.java22
-rw-r--r--src/main/java/me/shedaniel/rei/gui/credits/CreditsEntryListWidget.java35
-rw-r--r--src/main/java/me/shedaniel/rei/gui/credits/CreditsScreen.java64
-rw-r--r--src/main/java/me/shedaniel/rei/gui/widget/ButtonWidget.java42
-rw-r--r--src/main/java/me/shedaniel/rei/gui/widget/ConfigWidget.java177
-rw-r--r--src/main/java/me/shedaniel/rei/gui/widget/CraftableToggleButtonWidget.java9
-rw-r--r--src/main/java/me/shedaniel/rei/gui/widget/ItemListOverlay.java35
-rw-r--r--src/main/java/me/shedaniel/rei/gui/widget/ItemSlotWidget.java35
-rw-r--r--src/main/java/me/shedaniel/rei/gui/widget/RecipeViewingWidgetScreen.java3
-rw-r--r--src/main/java/me/shedaniel/rei/gui/widget/SpeedCraftingButtonWidget.java1
14 files changed, 526 insertions, 267 deletions
diff --git a/src/main/java/me/shedaniel/rei/gui/ContainerScreenOverlay.java b/src/main/java/me/shedaniel/rei/gui/ContainerScreenOverlay.java
index eb1daa9a4..41700f7c1 100644
--- a/src/main/java/me/shedaniel/rei/gui/ContainerScreenOverlay.java
+++ b/src/main/java/me/shedaniel/rei/gui/ContainerScreenOverlay.java
@@ -5,11 +5,12 @@ 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.credits.CreditsScreen;
import me.shedaniel.rei.gui.widget.*;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.ContainerScreen;
+import net.minecraft.client.gui.DrawableContainer;
import net.minecraft.client.gui.GuiEventListener;
-import net.minecraft.client.gui.Screen;
import net.minecraft.client.render.GuiLighting;
import net.minecraft.client.resource.language.I18n;
import net.minecraft.client.util.Window;
@@ -22,7 +23,7 @@ import java.util.LinkedList;
import java.util.List;
import java.util.stream.Collectors;
-public class ContainerScreenOverlay extends Screen {
+public class ContainerScreenOverlay extends DrawableContainer {
private static final List<QueuedTooltip> QUEUED_TOOLTIPS = Lists.newArrayList();
public static String searchTerm = "";
@@ -80,7 +81,13 @@ public class ContainerScreenOverlay extends Screen {
ClientHelper.openConfigWindow(GuiHelper.getLastContainerScreen());
}
});
- this.widgets.add(new LabelWidget(rectangle.x + (rectangle.width / 2), rectangle.y + 10, "") {
+ widgets.add(new ButtonWidget(RoughlyEnoughItemsCore.getConfigHelper().isMirrorItemPanel() ? window.getScaledWidth() - 50 : 10, window.getScaledHeight() - 30, 40, 20, I18n.translate("text.rei.credits")) {
+ @Override
+ public void onPressed(int button, double mouseX, double mouseY) {
+ MinecraftClient.getInstance().openScreen(new CreditsScreen(GuiHelper.getLastContainerScreen()));
+ }
+ });
+ widgets.add(new LabelWidget(rectangle.x + (rectangle.width / 2), rectangle.y + 10, "") {
@Override
public void draw(int mouseX, int mouseY, float partialTicks) {
page = MathHelper.clamp(page, 0, getTotalPage());
@@ -101,7 +108,7 @@ public class ContainerScreenOverlay extends Screen {
};
GuiHelper.searchField.setChangedListener(s -> {
searchTerm = s;
- itemListOverlay.updateList(page, searchTerm);
+ itemListOverlay.updateList(getItemListArea(), page, searchTerm);
});
GuiHelper.searchField.setBounds(getTextFieldArea());
this.widgets.add(GuiHelper.searchField);
@@ -111,12 +118,11 @@ public class ContainerScreenOverlay extends Screen {
@Override
public void onPressed(int button, double mouseX, double mouseY) {
RoughlyEnoughItemsCore.getConfigHelper().toggleCraftableOnly();
- itemListOverlay.updateList(page, searchTerm);
+ itemListOverlay.updateList(getItemListArea(), page, searchTerm);
}
});
this.itemListOverlay.updateList(getItemListArea(), page, searchTerm);
- this.listeners.addAll(widgets);
}
private Rectangle getTextFieldArea() {
@@ -127,7 +133,7 @@ public class ContainerScreenOverlay extends Screen {
RecipeViewingWidgetScreen widget = (RecipeViewingWidgetScreen) MinecraftClient.getInstance().currentScreen;
return new Rectangle(widget.getBounds().x, window.getScaledHeight() - 22, widget.getBounds().width - widthRemoved, 18);
}
- return new Rectangle(GuiHelper.getLastMixinContainerScreen().getContainerLeft(), window.getScaledHeight() - 22, GuiHelper.getLastMixinContainerScreen().getContainerWidth() - widthRemoved, 18);
+ return new Rectangle(GuiHelper.getLastMixinContainerScreen().rei_getContainerLeft(), window.getScaledHeight() - 22, GuiHelper.getLastMixinContainerScreen().rei_getContainerWidth() - widthRemoved, 18);
}
private Rectangle getCraftableToggleArea() {
@@ -149,13 +155,13 @@ public class ContainerScreenOverlay extends Screen {
return rectangle;
}
- public void render(int mouseX, int mouseY, float partialTicks) {
+ public void drawOverlay(int mouseX, int mouseY, float partialTicks) {
List<ItemStack> currentStacks = ClientHelper.getInventoryItemsTypes();
if (getLeft() != lastLeft)
onInitialized();
else if (RoughlyEnoughItemsCore.getConfigHelper().craftableOnly() && (!hasSameListContent(new LinkedList<>(GuiHelper.inventoryStacks), currentStacks) || (currentStacks.size() != GuiHelper.inventoryStacks.size()))) {
GuiHelper.inventoryStacks = ClientHelper.getInventoryItemsTypes();
- itemListOverlay.updateList(page, searchTerm);
+ itemListOverlay.updateList(getItemListArea(), page, searchTerm);
}
GlStateManager.color4f(1.0F, 1.0F, 1.0F, 1.0F);
GuiLighting.disable();
@@ -185,7 +191,6 @@ public class ContainerScreenOverlay extends Screen {
QUEUED_TOOLTIPS.add(queuedTooltip);
}
- @Override
public void draw(int int_1, int int_2, float float_1) {
if (!GuiHelper.isOverlayVisible())
return;
@@ -194,14 +199,11 @@ public class ContainerScreenOverlay extends Screen {
widget.draw(int_1, int_2, float_1);
});
GuiLighting.disable();
- itemListOverlay.draw(int_1, int_2, float_1);
- GuiLighting.disable();
- super.draw(int_1, int_2, float_1);
}
private Rectangle calculateBoundary() {
if (!RoughlyEnoughItemsCore.getConfigHelper().isMirrorItemPanel()) {
- int startX = GuiHelper.getLastMixinContainerScreen().getContainerLeft() + GuiHelper.getLastMixinContainerScreen().getContainerWidth() + 10;
+ int startX = GuiHelper.getLastMixinContainerScreen().rei_getContainerLeft() + GuiHelper.getLastMixinContainerScreen().rei_getContainerWidth() + 10;
int width = window.getScaledWidth() - startX;
if (MinecraftClient.getInstance().currentScreen instanceof RecipeViewingWidgetScreen) {
RecipeViewingWidgetScreen widget = (RecipeViewingWidgetScreen) MinecraftClient.getInstance().currentScreen;
@@ -210,12 +212,7 @@ public class ContainerScreenOverlay extends Screen {
}
return new Rectangle(startX, 0, width, window.getScaledHeight());
}
- int width = GuiHelper.getLastMixinContainerScreen().getContainerLeft() - 6;
- if (MinecraftClient.getInstance().currentScreen instanceof RecipeViewingWidgetScreen) {
- RecipeViewingWidgetScreen widget = (RecipeViewingWidgetScreen) MinecraftClient.getInstance().currentScreen;
- width = widget.getBounds().x - 6;
- }
- return new Rectangle(4, 0, width, window.getScaledHeight());
+ return new Rectangle(4, 0, getLeft() - 6, window.getScaledHeight());
}
private int getLeft() {
@@ -223,7 +220,9 @@ public class ContainerScreenOverlay extends Screen {
RecipeViewingWidgetScreen widget = (RecipeViewingWidgetScreen) MinecraftClient.getInstance().currentScreen;
return widget.getBounds().x;
}
- return GuiHelper.getLastMixinContainerScreen().getContainerLeft();
+ if (MinecraftClient.getInstance().player.getRecipeBook().isGuiOpen())
+ return GuiHelper.getLastMixinContainerScreen().rei_getContainerLeft() - 147 - 30;
+ return GuiHelper.getLastMixinContainerScreen().rei_getContainerLeft();
}
private int getTotalPage() {
@@ -251,15 +250,15 @@ public class ContainerScreenOverlay extends Screen {
@Override
public boolean keyPressed(int int_1, int int_2, int int_3) {
+ for(GuiEventListener listener : widgets)
+ if (listener.keyPressed(int_1, int_2, int_3))
+ return true;
if (ClientHelper.HIDE.matchesKey(int_1, int_2)) {
GuiHelper.toggleOverlayVisible();
return true;
}
if (!GuiHelper.isOverlayVisible())
return false;
- for(GuiEventListener listener : listeners)
- if (listener.keyPressed(int_1, int_2, int_3))
- return true;
Point point = ClientHelper.getMouseLocation();
ItemStack itemStack = null;
for(IWidget widget : itemListOverlay.getListeners())
@@ -276,8 +275,8 @@ public class ContainerScreenOverlay extends Screen {
}
}
if (itemStack == null && MinecraftClient.getInstance().currentScreen instanceof ContainerScreen)
- if (GuiHelper.getLastMixinContainerScreen().getHoveredSlot() != null)
- itemStack = GuiHelper.getLastMixinContainerScreen().getHoveredSlot().getStack();
+ if (GuiHelper.getLastMixinContainerScreen().rei_getHoveredSlot() != null)
+ itemStack = GuiHelper.getLastMixinContainerScreen().rei_getHoveredSlot().getStack();
if (itemStack != null && !itemStack.isEmpty()) {
if (ClientHelper.RECIPE.matchesKey(int_1, int_2))
return ClientHelper.executeRecipeKeyBind(this, itemStack);
@@ -291,13 +290,18 @@ public class ContainerScreenOverlay extends Screen {
public boolean charTyped(char char_1, int int_1) {
if (!GuiHelper.isOverlayVisible())
return false;
- for(GuiEventListener listener : listeners)
+ for(GuiEventListener listener : getEntries())
if (listener.charTyped(char_1, int_1))
return true;
return super.charTyped(char_1, int_1);
}
@Override
+ protected List<? extends GuiEventListener> getEntries() {
+ return widgets;
+ }
+
+ @Override
public boolean mouseClicked(double double_1, double double_2, int int_1) {
if (!GuiHelper.isOverlayVisible())
return false;
diff --git a/src/main/java/me/shedaniel/rei/gui/config/ConfigEntry.java b/src/main/java/me/shedaniel/rei/gui/config/ConfigEntry.java
new file mode 100644
index 000000000..013dd9cbe
--- /dev/null
+++ b/src/main/java/me/shedaniel/rei/gui/config/ConfigEntry.java
@@ -0,0 +1,70 @@
+package me.shedaniel.rei.gui.config;
+
+import me.shedaniel.rei.client.ClientHelper;
+import me.shedaniel.rei.gui.widget.ButtonWidget;
+import net.minecraft.client.MinecraftClient;
+import net.minecraft.client.audio.PositionedSoundInstance;
+import net.minecraft.client.gui.widget.EntryListWidget;
+import net.minecraft.client.util.Window;
+import net.minecraft.sound.SoundEvents;
+import net.minecraft.text.TextComponent;
+
+import java.awt.*;
+
+public class ConfigEntry extends EntryListWidget.Entry<ConfigEntry> {
+
+ private TextComponent nameComponent;
+ private ConfigEntryButtonProvider buttonProvider;
+ private ButtonWidget buttonWidget;
+
+ public ConfigEntry(TextComponent nameComponent, ConfigEntryButtonProvider buttonProvider) {
+ this.nameComponent = nameComponent;
+ this.buttonProvider = buttonProvider;
+ this.buttonWidget = new ButtonWidget(0, 0, 150, 20, "") {
+ @Override
+ public boolean onMouseClick(int button, double mouseX, double mouseY) {
+ if (getBounds().contains(mouseX, mouseY) && enabled)
+ if (buttonProvider.onPressed(button, mouseX, mouseY)) {
+ MinecraftClient.getInstance().getSoundLoader().play(PositionedSoundInstance.master(SoundEvents.UI_BUTTON_CLICK, 1.0F));
+ return true;
+ }
+ return false;
+ }
+
+ @Override
+ public void onPressed(int button, double mouseX, double mouseY) {}
+ };
+ }
+
+ @Override
+ public void draw(int entryWidth, int height, int i3, int i4, boolean isSelected, float delta) {
+ int x = getX();
+ int y = getY();
+ Window window = MinecraftClient.getInstance().window;
+ Point mouse = ClientHelper.getMouseLocation();
+ MinecraftClient.getInstance().fontRenderer.drawWithShadow(nameComponent.getFormattedText(), x + 5, y + 5, -1);
+ this.buttonWidget.text = buttonProvider.getText();
+ this.buttonWidget.getBounds().setLocation(window.getScaledWidth() - 190, y + 2);
+ buttonProvider.draw(buttonWidget, mouse, delta);
+ }
+
+ @Override
+ public boolean mouseClicked(double double_1, double double_2, int int_1) {
+ if (buttonWidget.mouseClicked(double_1, double_2, int_1))
+ return true;
+ return false;
+ }
+
+ interface ConfigEntryButtonProvider {
+
+ public boolean onPressed(int button, double mouseX, double mouseY);
+
+ public String getText();
+
+ default public void draw(ButtonWidget button, Point mouse, float delta) {
+ button.draw(mouse.x, mouse.y, delta);
+ }
+
+ }
+
+}
diff --git a/src/main/java/me/shedaniel/rei/gui/config/ConfigEntryListWidget.java b/src/main/java/me/shedaniel/rei/gui/config/ConfigEntryListWidget.java
new file mode 100644
index 000000000..ee74cc568
--- /dev/null
+++ b/src/main/java/me/shedaniel/rei/gui/config/ConfigEntryListWidget.java
@@ -0,0 +1,35 @@
+package me.shedaniel.rei.gui.config;
+
+import net.minecraft.client.MinecraftClient;
+import net.minecraft.client.gui.widget.EntryListWidget;
+
+public class ConfigEntryListWidget extends EntryListWidget<ConfigEntry> {
+
+ public ConfigEntryListWidget(MinecraftClient client, int width, int height, int startY, int endY, int entryHeight) {
+ super(client, width, height, startY, endY, entryHeight);
+ method_1943(false); //toggleShowSelection
+ }
+
+ public void configClearEntries() {
+ clearEntries();
+ }
+
+ private ConfigEntry getEntry(int int_1) {
+ return this.getEntries().get(int_1);
+ }
+
+ public void configAddEntry(ConfigEntry entry) {
+ addEntry(entry);
+ }
+
+ @Override
+ public int getEntryWidth() {
+ return width - 80;
+ }
+
+ @Override
+ protected int getScrollbarPosition() {
+ return width - 40;
+ }
+
+}
diff --git a/src/main/java/me/shedaniel/rei/gui/config/ConfigScreen.java b/src/main/java/me/shedaniel/rei/gui/config/ConfigScreen.java
new file mode 100644
index 000000000..65007b2f5
--- /dev/null
+++ b/src/main/java/me/shedaniel/rei/gui/config/ConfigScreen.java
@@ -0,0 +1,207 @@
+package me.shedaniel.rei.gui.config;
+
+import me.shedaniel.rei.RoughlyEnoughItemsCore;
+import me.shedaniel.rei.client.GuiHelper;
+import me.shedaniel.rei.client.REIItemListOrdering;
+import net.minecraft.client.MinecraftClient;
+import net.minecraft.client.gui.GuiEventListener;
+import net.minecraft.client.gui.Screen;
+import net.minecraft.client.gui.widget.ButtonWidget;
+import net.minecraft.client.render.GuiLighting;
+import net.minecraft.client.resource.language.I18n;
+import net.minecraft.text.TranslatableTextComponent;
+
+import java.awt.*;
+import java.io.IOException;
+import java.util.Arrays;
+
+public class ConfigScreen extends Screen {
+
+ private Screen parent;
+ private ConfigEntryListWidget entryListWidget;
+
+ public ConfigScreen(Screen parent) {
+ this.parent = parent;
+ }
+
+ @Override
+ public boolean keyPressed(int int_1, int int_2, int int_3) {
+ if (int_1 == 256 && this.doesEscapeKeyClose()) {
+ MinecraftClient.getInstance().openScreen(parent);
+ GuiHelper.getLastOverlay().onInitialized();
+ return true;
+ } else {
+ return super.keyPressed(int_1, int_2, int_3);
+ }
+ }
+
+ @Override
+ protected void onInitialized() {
+ listeners.add(entryListWidget = new ConfigEntryListWidget(client, width, height, 32, height - 32, 24));
+ entryListWidget.configClearEntries();
+ entryListWidget.configAddEntry(new ConfigEntry(new TranslatableTextComponent("text.rei.side_searchbox"), new ConfigEntry.ConfigEntryButtonProvider() {
+ @Override
+ public boolean onPressed(int button, double mouseX, double mouseY) {
+ if (button == 0)
+ RoughlyEnoughItemsCore.getConfigHelper().setSideSearchField(!RoughlyEnoughItemsCore.getConfigHelper().sideSearchField());
+ try {
+ RoughlyEnoughItemsCore.getConfigHelper().saveConfig();
+ } catch (IOException e) {
+ e.printStackTrace();
+ return false;
+ }
+ return true;
+ }
+
+ @Override
+ public String getText() {
+ return getTrueFalseText(RoughlyEnoughItemsCore.getConfigHelper().sideSearchField());
+ }
+ }));
+ entryListWidget.configAddEntry(new ConfigEntry(new TranslatableTextComponent("text.rei.enable_craftable_only"), new ConfigEntry.ConfigEntryButtonProvider() {
+ @Override
+ public boolean onPressed(int button, double mouseX, double mouseY) {
+ if (button == 0)
+ RoughlyEnoughItemsCore.getConfigHelper().setShowCraftableOnlyButton(!RoughlyEnoughItemsCore.getConfigHelper().showCraftableOnlyButton());
+ try {
+ RoughlyEnoughItemsCore.getConfigHelper().saveConfig();
+ } catch (IOException e) {
+ e.printStackTrace();
+ return false;
+ }
+ return true;
+ }
+
+ @Override
+ public String getText() {
+ return getTrueFalseText(RoughlyEnoughItemsCore.getConfigHelper().showCraftableOnlyButton());
+ }
+ }));
+ entryListWidget.configAddEntry(new ConfigEntry(new TranslatableTextComponent("text.rei.list_ordering"), new ConfigEntry.ConfigEntryButtonProvider() {
+ @Override
+ public boolean onPressed(int button, double mouseX, double mouseY) {
+ int index = Arrays.asList(REIItemListOrdering.values()).indexOf(RoughlyEnoughItemsCore.getConfigHelper().getItemListOrdering()) + 1;
+ if (index >= REIItemListOrdering.values().length) {
+ index = 0;
+ RoughlyEnoughItemsCore.getConfigHelper().setAscending(!RoughlyEnoughItemsCore.getConfigHelper().isAscending());
+ }
+ RoughlyEnoughItemsCore.getConfigHelper().setItemListOrdering(REIItemListOrdering.values()[index]);
+ try {
+ RoughlyEnoughItemsCore.getConfigHelper().saveConfig();
+ } catch (IOException e) {
+ e.printStackTrace();
+ return false;
+ }
+ return true;
+ }
+
+ @Override
+ public String getText() {
+ return I18n.translate("text.rei.list_ordering_button", I18n.translate(RoughlyEnoughItemsCore.getConfigHelper().getItemListOrdering().getNameTranslationKey()), I18n.translate(RoughlyEnoughItemsCore.getConfigHelper().isAscending() ? "ordering.rei.ascending" : "ordering.rei.descending"));
+ }
+ }));
+ entryListWidget.configAddEntry(new ConfigEntry(new TranslatableTextComponent("text.rei.mirror_rei"), new ConfigEntry.ConfigEntryButtonProvider() {
+ @Override
+ public boolean onPressed(int button, double mouseX, double mouseY) {
+ if (button == 0)
+ RoughlyEnoughItemsCore.getConfigHelper().setMirrorItemPanel(!RoughlyEnoughItemsCore.getConfigHelper().isMirrorItemPanel());
+ try {
+ RoughlyEnoughItemsCore.getConfigHelper().saveConfig();
+ } catch (IOException e) {
+ e.printStackTrace();
+ return false;
+ }
+ return true;
+ }
+
+ @Override
+ public String getText() {
+ return getTrueFalseText(RoughlyEnoughItemsCore.getConfigHelper().isMirrorItemPanel());
+ }
+ }));
+ entryListWidget.configAddEntry(new ConfigEntry(new TranslatableTextComponent("text.rei.check_updates"), new ConfigEntry.ConfigEntryButtonProvider() {
+ @Override
+ public boolean onPressed(int button, double mouseX, double mouseY) {
+ if (button == 0)
+ RoughlyEnoughItemsCore.getConfigHelper().setCheckUpdates(!RoughlyEnoughItemsCore.getConfigHelper().checkUpdates());
+ try {
+ RoughlyEnoughItemsCore.getConfigHelper().saveConfig();
+ } catch (IOException e) {
+ e.printStackTrace();
+ return false;
+ }
+ return true;
+ }
+
+ @Override
+ public String getText() {
+ return getTrueFalseText(RoughlyEnoughItemsCore.getConfigHelper().checkUpdates());
+ }
+ }));
+ entryListWidget.configAddEntry(new ConfigEntry(new TranslatableTextComponent("text.rei.load_default_plugin"), new ConfigEntry.ConfigEntryButtonProvider() {
+ @Override
+ public boolean onPressed(int button, double mouseX, double mouseY) {
+ if (button == 0)
+ RoughlyEnoughItemsCore.getConfigHelper().setLoadingDefaultPlugin(!RoughlyEnoughItemsCore.getConfigHelper().isLoadingDefaultPlugin());
+ try {
+ RoughlyEnoughItemsCore.getConfigHelper().saveConfig();
+ } catch (IOException e) {
+ e.printStackTrace();
+ return false;
+ }
+ return true;
+ }
+
+ @Override
+ public String getText() {
+ return getTrueFalseText(RoughlyEnoughItemsCore.getConfigHelper().isLoadingDefaultPlugin());
+ }
+
+ @Override
+ public void draw(me.shedaniel.rei.gui.widget.ButtonWidget button, Point mouse, float delta) {
+ button.draw(mouse.x, mouse.y, delta);
+ if (button.getBounds().contains(mouse)) {
+ GuiLighting.disable();
+ drawTooltip(Arrays.asList(I18n.translate("text.rei.load_default_plugin.restart_tooltip").split("\n")), mouse.x, mouse.y);
+ GuiLighting.disable();
+ }
+ }
+ }));
+ addButton(new ButtonWidget(0, width / 2 - 100, height - 26, I18n.translate("gui.done")) {
+ @Override
+ public void onPressed(double double_1, double double_2) {
+ try {
+ RoughlyEnoughItemsCore.getConfigHelper().saveConfig();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ ConfigScreen.this.client.openScreen(parent);
+ GuiHelper.getLastOverlay().onInitialized();
+ }
+ });
+ super.onInitialized();
+ }
+
+ private String getTrueFalseText(boolean showCraftableOnlyButton) {
+ return String.format("%s%b", showCraftableOnlyButton ? "§a" : "§c", showCraftableOnlyButton);
+ }
+
+ @Override
+ public void draw(int int_1, int int_2, float float_1) {
+ this.drawTextureBackground(0);
+ this.entryListWidget.draw(int_1, int_2, float_1);
+ this.drawStringCentered(this.fontRenderer, I18n.translate("text.rei.config"), this.width / 2, 16, 16777215);
+ super.draw(int_1, int_2, float_1);
+ }
+
+ @Override
+ public boolean isPauseScreen() {
+ return false;
+ }
+
+ @Override
+ public GuiEventListener getFocused() {
+ return entryListWidget;
+ }
+
+}
diff --git a/src/main/java/me/shedaniel/rei/gui/credits/CreditsEntry.java b/src/main/java/me/shedaniel/rei/gui/credits/CreditsEntry.java
new file mode 100644
index 000000000..65f7a3fd5
--- /dev/null
+++ b/src/main/java/me/shedaniel/rei/gui/credits/CreditsEntry.java
@@ -0,0 +1,22 @@
+package me.shedaniel.rei.gui.credits;
+
+import net.minecraft.client.MinecraftClient;
+import net.minecraft.client.gui.widget.EntryListWidget;
+import net.minecraft.text.TextComponent;
+
+public class CreditsEntry extends EntryListWidget.Entry<CreditsEntry> {
+
+ private TextComponent textComponent;
+
+ public CreditsEntry(TextComponent textComponent) {
+ this.textComponent = textComponent;
+ }
+
+ @Override
+ public void draw(int entryWidth, int height, int i3, int i4, boolean isSelected, float delta) {
+ int x = getX();
+ int y = getY();
+ MinecraftClient.getInstance().fontRenderer.drawWithShadow(textComponent.getFormattedText(), x + 5, y + 5, -1);
+ }
+
+}
diff --git a/src/main/java/me/shedaniel/rei/gui/credits/CreditsEntryListWidget.java b/src/main/java/me/shedaniel/rei/gui/credits/CreditsEntryListWidget.java
new file mode 100644
index 000000000..81f48c40c
--- /dev/null
+++ b/src/main/java/me/shedaniel/rei/gui/credits/CreditsEntryListWidget.java
@@ -0,0 +1,35 @@
+package me.shedaniel.rei.gui.credits;
+
+import net.minecraft.client.MinecraftClient;
+import net.minecraft.client.gui.widget.EntryListWidget;
+
+public class CreditsEntryListWidget extends EntryListWidget<CreditsEntry> {
+
+ public CreditsEntryListWidget(MinecraftClient client, int width, int height, int startY, int endY, int entryHeight) {
+ super(client, width, height, startY, endY, entryHeight);
+ method_1943(false); //toggleShowSelection
+ }
+
+ public void creditsClearEntries() {
+ clearEntries();
+ }
+
+ private CreditsEntry getEntry(int int_1) {
+ return this.getEntries().get(int_1);
+ }
+
+ public void creditsAddEntry(CreditsEntry entry) {
+ addEntry(entry);
+ }
+
+ @Override
+ public int getEntryWidth() {
+ return width - 80;
+ }
+
+ @Override
+ protected int getScrollbarPosition() {
+ return width - 40;
+ }
+
+}
diff --git a/src/main/java/me/shedaniel/rei/gui/credits/CreditsScreen.java b/src/main/java/me/shedaniel/rei/gui/credits/CreditsScreen.java
new file mode 100644
index 000000000..ed0464e07
--- /dev/null
+++ b/src/main/java/me/shedaniel/rei/gui/credits/CreditsScreen.java
@@ -0,0 +1,64 @@
+package me.shedaniel.rei.gui.credits;
+
+import me.shedaniel.rei.client.GuiHelper;
+import net.minecraft.client.gui.ContainerScreen;
+import net.minecraft.client.gui.GuiEventListener;
+import net.minecraft.client.gui.Screen;
+import net.minecraft.client.gui.widget.ButtonWidget;
+import net.minecraft.client.resource.language.I18n;
+import net.minecraft.text.StringTextComponent;
+
+public class CreditsScreen extends Screen {
+
+ private ContainerScreen parent;
+ private CreditsEntryListWidget entryListWidget;
+
+ public CreditsScreen(ContainerScreen parent) {
+ this.parent = parent;
+ }
+
+ @Override
+ public boolean keyPressed(int int_1, int int_2, int int_3) {
+ if (int_1 == 256 && this.doesEscapeKeyClose()) {
+ this.client.openScreen(parent);
+ GuiHelper.getLastOverlay().onInitialized();
+ return true;
+ }
+ return super.keyPressed(int_1, int_2, int_3);
+ }
+
+ @Override
+ protected void onInitialized() {
+ listeners.add(entryListWidget = new CreditsEntryListWidget(client, width, height, 32, height - 32, 12));
+ entryListWidget.creditsClearEntries();
+ for(String line : I18n.translate("text.rei.credit.text").split("\n"))
+ entryListWidget.creditsAddEntry(new CreditsEntry(new StringTextComponent(line)));
+ entryListWidget.creditsAddEntry(new CreditsEntry(new StringTextComponent("")));
+ addButton(new ButtonWidget(0, width / 2 - 100, height - 26, I18n.translate("gui.done")) {
+ @Override
+ public void onPressed(double double_1, double double_2) {
+ CreditsScreen.this.client.openScreen(parent);
+ GuiHelper.getLastOverlay().onInitialized();
+ }
+ });
+ }
+
+ @Override
+ public void draw(int int_1, int int_2, float float_1) {
+ this.drawTextureBackground(0);
+ this.entryListWidget.draw(int_1, int_2, float_1);
+ this.drawStringCentered(this.fontRenderer, I18n.translate("text.rei.credits"), this.width / 2, 16, 16777215);
+ super.draw(int_1, int_2, float_1);
+ }
+
+ @Override
+ public boolean isPauseScreen() {
+ return false;
+ }
+
+ @Override
+ public GuiEventListener getFocused() {
+ return entryListWidget;
+ }
+
+}
diff --git a/src/main/java/me/shedaniel/rei/gui/widget/ButtonWidget.java b/src/main/java/me/shedaniel/rei/gui/widget/ButtonWidget.java
index 96fbc54b3..eb6584798 100644
--- a/src/main/java/me/shedaniel/rei/gui/widget/ButtonWidget.java
+++ b/src/main/java/me/shedaniel/rei/gui/widget/ButtonWidget.java
@@ -16,32 +16,22 @@ import java.util.List;
public abstract class ButtonWidget extends Drawable implements IWidget {
protected static final Identifier WIDGET_TEX = new Identifier("textures/gui/widgets.png");
- public int x;
- public int y;
public String text;
public boolean enabled;
public boolean visible;
- protected int width;
- protected int height;
protected boolean hovered;
private boolean pressed;
private Rectangle bounds;
public ButtonWidget(Rectangle rectangle, String text) {
- this(rectangle.x, rectangle.y, rectangle.width, rectangle.height, text);
- }
-
- public ButtonWidget(int x, int y, int width, int height, String text) {
- this.width = 200;
- this.height = 20;
+ this.bounds = rectangle;
this.enabled = true;
this.visible = true;
- this.x = x;
- this.y = y;
- this.width = width;
- this.height = height;
this.text = text;
- this.bounds = new Rectangle(x, this.y, this.width, this.height);
+ }
+
+ public ButtonWidget(int x, int y, int width, int height, String text) {
+ this(new Rectangle(x, y, width, height), text);
}
public Rectangle getBounds() {
@@ -66,8 +56,8 @@ public abstract class ButtonWidget extends Drawable implements IWidget {
@Override
public void draw(int mouseX, int mouseY, float partialTicks) {
-
if (this.visible) {
+ int x = bounds.x, y = bounds.y, width = bounds.width, height = bounds.height;
MinecraftClient minecraftClient_1 = MinecraftClient.getInstance();
FontRenderer fontRenderer_1 = minecraftClient_1.fontRenderer;
minecraftClient_1.getTextureManager().bindTexture(WIDGET_TEX);
@@ -78,18 +68,18 @@ public abstract class ButtonWidget extends Drawable implements IWidget {
GlStateManager.blendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO);
GlStateManager.blendFunc(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA);
//Four Corners
- this.drawTexturedRect(this.x, this.y, 0, 46 + textureOffset * 20, 4, 4);
- this.drawTexturedRect(this.x + this.width - 4, this.y, 196, 46 + textureOffset * 20, 4, 4);
- this.drawTexturedRect(this.x, this.y + this.height - 4, 0, 62 + textureOffset * 20, 4, 4);
- this.drawTexturedRect(this.x + this.width - 4, this.y + this.height - 4, 196, 62 + textureOffset * 20, 4, 4);
+ this.drawTexturedRect(x, y, 0, 46 + textureOffset * 20, 4, 4);
+ this.drawTexturedRect(x + width - 4, y, 196, 46 + textureOffset * 20, 4, 4);
+ this.drawTexturedRect(x, y + height - 4, 0, 62 + textureOffset * 20, 4, 4);
+ this.drawTexturedRect(x + width - 4, y + height - 4, 196, 62 + textureOffset * 20, 4, 4);
//Sides
- this.drawTexturedRect(this.x + 4, this.y, 4, 46 + textureOffset * 20, this.width - 8, 4);
- this.drawTexturedRect(this.x + 4, this.y + this.height - 4, 4, 62 + textureOffset * 20, this.width - 8, 4);
+ this.drawTexturedRect(x + 4, y, 4, 46 + textureOffset * 20, width - 8, 4);
+ this.drawTexturedRect(x + 4, y + height - 4, 4, 62 + textureOffset * 20, width - 8, 4);
- for(int i = this.y + 4; i < this.y + this.height - 4; i += 4) {
- this.drawTexturedRect(this.x, i, 0, 50 + textureOffset * 20, this.width / 2, MathHelper.clamp(this.y + this.height - 4 - i, 0, 4));
- this.drawTexturedRect(this.x + this.width / 2, i, 200 - this.width / 2, 50 + textureOffset * 20, this.width / 2, MathHelper.clamp(this.y + this.height - 4 - i, 0, 4));
+ for(int i = y + 4; i < y + height - 4; i += 4) {
+ this.drawTexturedRect(x, i, 0, 50 + textureOffset * 20, width / 2, MathHelper.clamp(y + height - 4 - i, 0, 4));
+ this.drawTexturedRect(x + width / 2, i, 200 - width / 2, 50 + textureOffset * 20, width / 2, MathHelper.clamp(y + height - 4 - i, 0, 4));
}
int colour = 14737632;
@@ -99,7 +89,7 @@ public abstract class ButtonWidget extends Drawable implements IWidget {
colour = 16777120;
}
- this.drawStringCentered(fontRenderer_1, this.text, this.x + this.width / 2, this.y + (this.height - 8) / 2, colour);
+ this.drawStringCentered(fontRenderer_1, this.text, x + width / 2, y + (height - 8) / 2, colour);
}
}
diff --git a/src/main/java/me/shedaniel/rei/gui/widget/ConfigWidget.java b/src/main/java/me/shedaniel/rei/gui/widget/ConfigWidget.java
deleted file mode