From 7de38369a5dbf1abe106c7f825ed94fde6dab05a Mon Sep 17 00:00:00 2001 From: Unknown Date: Thu, 9 May 2019 23:46:15 +0800 Subject: selection screen --- .../java/me/shedaniel/rei/api/ClientHelper.java | 3 + .../me/shedaniel/rei/client/ClientHelperImpl.java | 4 + .../shedaniel/rei/gui/ContainerScreenOverlay.java | 2 +- .../shedaniel/rei/gui/PreRecipeViewingScreen.java | 127 +++++++++++++++++++++ .../rei/gui/VillagerRecipeViewingScreen.java | 2 + 5 files changed, 137 insertions(+), 1 deletion(-) create mode 100644 src/main/java/me/shedaniel/rei/gui/PreRecipeViewingScreen.java (limited to 'src/main/java/me') diff --git a/src/main/java/me/shedaniel/rei/api/ClientHelper.java b/src/main/java/me/shedaniel/rei/api/ClientHelper.java index ce96836cd..d4648bbaa 100644 --- a/src/main/java/me/shedaniel/rei/api/ClientHelper.java +++ b/src/main/java/me/shedaniel/rei/api/ClientHelper.java @@ -8,6 +8,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.util.Identifier; import java.util.List; +import java.util.Map; public interface ClientHelper extends ClientModInitializer { static ClientHelper getInstance() { @@ -20,6 +21,8 @@ public interface ClientHelper extends ClientModInitializer { List getInventoryItemsTypes(); + void openRecipeViewingScreen(Map> map); + void registerFabricKeyBinds(); boolean tryCheatingStack(ItemStack stack); diff --git a/src/main/java/me/shedaniel/rei/client/ClientHelperImpl.java b/src/main/java/me/shedaniel/rei/client/ClientHelperImpl.java index 5a05f0e74..832375918 100644 --- a/src/main/java/me/shedaniel/rei/client/ClientHelperImpl.java +++ b/src/main/java/me/shedaniel/rei/client/ClientHelperImpl.java @@ -9,6 +9,7 @@ import me.shedaniel.rei.api.ClientHelper; import me.shedaniel.rei.api.RecipeCategory; import me.shedaniel.rei.api.RecipeDisplay; import me.shedaniel.rei.api.RecipeHelper; +import me.shedaniel.rei.gui.PreRecipeViewingScreen; import me.shedaniel.rei.gui.RecipeViewingScreen; import me.shedaniel.rei.gui.VillagerRecipeViewingScreen; import net.fabricmc.fabric.api.client.keybinding.FabricKeyBinding; @@ -189,9 +190,12 @@ public class ClientHelperImpl implements ClientHelper { return map.keySet().size() > 0; } + @Override public void openRecipeViewingScreen(Map> map) { if (RoughlyEnoughItemsCore.getConfigManager().getConfig().screenType == RecipeScreenType.VILLAGER) MinecraftClient.getInstance().openScreen(new VillagerRecipeViewingScreen(map)); + else if (RoughlyEnoughItemsCore.getConfigManager().getConfig().screenType == RecipeScreenType.UNSET) + MinecraftClient.getInstance().openScreen(new PreRecipeViewingScreen(map)); else MinecraftClient.getInstance().openScreen(new RecipeViewingScreen(map)); } diff --git a/src/main/java/me/shedaniel/rei/gui/ContainerScreenOverlay.java b/src/main/java/me/shedaniel/rei/gui/ContainerScreenOverlay.java index df677c13f..71a274151 100644 --- a/src/main/java/me/shedaniel/rei/gui/ContainerScreenOverlay.java +++ b/src/main/java/me/shedaniel/rei/gui/ContainerScreenOverlay.java @@ -35,7 +35,7 @@ import java.util.stream.Collectors; public class ContainerScreenOverlay extends AbstractParentElement implements Drawable { - private static final Identifier CHEST_GUI_TEXTURE = new Identifier("roughlyenoughitems", "textures/gui" + "/recipecontainer.png"); + private static final Identifier CHEST_GUI_TEXTURE = new Identifier("roughlyenoughitems", "textures/gui/recipecontainer.png"); private static final List QUEUED_TOOLTIPS = Lists.newArrayList(); public static String searchTerm = ""; private static int page = 0; diff --git a/src/main/java/me/shedaniel/rei/gui/PreRecipeViewingScreen.java b/src/main/java/me/shedaniel/rei/gui/PreRecipeViewingScreen.java new file mode 100644 index 000000000..699060edb --- /dev/null +++ b/src/main/java/me/shedaniel/rei/gui/PreRecipeViewingScreen.java @@ -0,0 +1,127 @@ +package me.shedaniel.rei.gui; + +import com.google.common.collect.Lists; +import me.shedaniel.rei.RoughlyEnoughItemsCore; +import me.shedaniel.rei.api.ClientHelper; +import me.shedaniel.rei.api.RecipeCategory; +import me.shedaniel.rei.api.RecipeDisplay; +import me.shedaniel.rei.client.RecipeScreenType; +import me.shedaniel.rei.client.ScreenHelper; +import me.shedaniel.rei.gui.widget.ButtonWidget; +import me.shedaniel.rei.gui.widget.HighlightableWidget; +import me.shedaniel.rei.gui.widget.Widget; +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.audio.PositionedSoundInstance; +import net.minecraft.client.gui.Element; +import net.minecraft.client.gui.Screen; +import net.minecraft.client.render.GuiLighting; +import net.minecraft.client.resource.language.I18n; +import net.minecraft.sound.SoundEvents; +import net.minecraft.text.TranslatableTextComponent; +import net.minecraft.util.Identifier; + +import java.awt.*; +import java.util.Collections; +import java.util.List; +import java.util.Map; + +public class PreRecipeViewingScreen extends Screen { + + private static final Identifier IDENTIFIER = new Identifier("roughlyenoughitems", "textures/gui/screenshot.png"); + private final List widgets; + private boolean original; + private Map> map; + + public PreRecipeViewingScreen(Map> map) { + super(new TranslatableTextComponent("text.rei.recipe_screen_type.selection")); + this.widgets = Lists.newArrayList(); + this.original = true; + this.map = map; + } + + @Override + protected void init() { + this.children.clear(); + this.widgets.clear(); + this.widgets.add(new ButtonWidget(width / 2 - 100, height - 40, 200, 20, I18n.translate("text.rei.select")) { + @Override + public void onPressed() { + RoughlyEnoughItemsCore.getConfigManager().getConfig().screenType = original ? RecipeScreenType.ORIGINAL : RecipeScreenType.VILLAGER; + ClientHelper.getInstance().openRecipeViewingScreen(map); + } + }); + this.widgets.add(new ScreenTypeSelection(width / 2 - 200 - 5, height / 2 - 112 / 2 - 10, 0)); + this.widgets.add(new ScreenTypeSelection(width / 2 + 5, height / 2 - 112 / 2 - 10, 112)); + this.children.addAll(widgets); + } + + @Override + public void render(int int_1, int int_2, float float_1) { + this.renderBackground(); + this.drawCenteredString(this.font, this.title.getFormattedText(), this.width / 2, 20, 16777215); + int i = 30; + for(String s : this.font.wrapStringToWidthAsList(I18n.translate("text.rei.recipe_screen_type.selection.sub"), width - 30)) { + this.drawCenteredString(this.font, "ยง7" + s, width / 2, i, -1); + i += 10; + } + super.render(int_1, int_2, float_1); + this.widgets.forEach(widget -> { + GuiLighting.disable(); + widget.render(int_1, int_2, float_1); + }); + } + + @Override + public boolean keyPressed(int int_1, int int_2, int int_3) { + if ((int_1 == 256 || this.minecraft.options.keyInventory.matchesKey(int_1, int_2)) && this.shouldCloseOnEsc()) { + MinecraftClient.getInstance().openScreen(ScreenHelper.getLastContainerScreen()); + ScreenHelper.getLastOverlay().init(); + return true; + } + return super.keyPressed(int_1, int_2, int_3); + } + + public class ScreenTypeSelection extends HighlightableWidget { + + private Rectangle bounds; + private int u, v; + + public ScreenTypeSelection(int x, int y, int v) { + this.bounds = new Rectangle(x - 4, y - 4, 208, 120); + this.u = 0; + this.v = v; + } + + @Override + public Rectangle getBounds() { + return bounds; + } + + @Override + public void render(int i, int i1, float delta) { + MinecraftClient.getInstance().getTextureManager().bindTexture(IDENTIFIER); + blit(bounds.x + 4, bounds.y + 4, u, v, 200, 112); + if (original == (v == 0)) { + fillGradient(bounds.x, bounds.y, bounds.x + bounds.width, bounds.y + 2, 0xFFFFFFFF, 0xFFFFFFFF); + fillGradient(bounds.x, bounds.y + bounds.height - 2, bounds.x + bounds.width, bounds.y + bounds.height, 0xFFFFFFFF, 0xFFFFFFFF); + fillGradient(bounds.x, bounds.y, bounds.x + 2, bounds.y + bounds.height, 0xFFFFFFFF, 0xFFFFFFFF); + fillGradient(bounds.x + bounds.width - 2, bounds.y, bounds.x + bounds.width, bounds.y + bounds.height, 0xFFFFFFFF, 0xFFFFFFFF); + } + } + + @Override + public boolean mouseClicked(double double_1, double double_2, int int_1) { + if (isHighlighted(double_1, double_2)) { + minecraft.getSoundManager().play(PositionedSoundInstance.master(SoundEvents.UI_BUTTON_CLICK, 1.0F)); + original = (v == 0); + return true; + } + return false; + } + + @Override + public List children() { + return Collections.emptyList(); + } + } +} diff --git a/src/main/java/me/shedaniel/rei/gui/VillagerRecipeViewingScreen.java b/src/main/java/me/shedaniel/rei/gui/VillagerRecipeViewingScreen.java index 1263e03c3..5fc3d9cd5 100644 --- a/src/main/java/me/shedaniel/rei/gui/VillagerRecipeViewingScreen.java +++ b/src/main/java/me/shedaniel/rei/gui/VillagerRecipeViewingScreen.java @@ -192,6 +192,8 @@ public class VillagerRecipeViewingScreen extends Screen { GuiLighting.disable(); widget.render(mouseX, mouseY, delta); }); + GuiLighting.disable(); + ScreenHelper.getLastOverlay().render(mouseX, mouseY, delta); GL11.glPushMatrix(); Scissors.begin(); Scissors.scissor(0, scrollListBounds.y + 1, width, scrollListBounds.height - 2); -- cgit