Unknown 6 yıl önce
ebeveyn
işleme
87330e70a7

+ 1 - 1
build.gradle

@@ -6,7 +6,7 @@ sourceCompatibility = 1.8
 targetCompatibility = 1.8
 
 archivesBaseName = "RoughlyEnoughItems"
-version = "1.5-12"
+version = "1.5-13"
 
 minecraft {
 }

+ 3 - 0
src/main/java/me/shedaniel/gui/ConfigGui.java

@@ -7,6 +7,7 @@ import me.shedaniel.gui.widget.KeyBindButton;
 import net.minecraft.client.MinecraftClient;
 import net.minecraft.client.gui.Gui;
 import net.minecraft.client.gui.widget.ButtonWidget;
+import net.minecraft.client.render.GuiLighting;
 import net.minecraft.client.resource.language.I18n;
 
 import java.io.IOException;
@@ -91,6 +92,7 @@ public class ConfigGui extends Gui {
     
             @Override
             public void draw(int int_1, int int_2, float float_1) {
+                GuiLighting.disable();
                 this.text = I18n.translate("text.rei.list_ordering_button", I18n.translate(Core.config.itemListOrdering.getNameTranslationKey()),
                         I18n.translate(Core.config.isAscending ? "ordering.rei.ascending" : "ordering.rei.descending"));
                 super.draw(int_1, int_2, float_1);
@@ -102,6 +104,7 @@ public class ConfigGui extends Gui {
     public void draw(int mouseX, int mouseY, float partialTicks) {
         drawBackground();
         super.draw(mouseX, mouseY, partialTicks);
+        GuiLighting.disable();
         String text = I18n.translate("key.rei.recipe") + ": ";
         drawString(MinecraftClient.getInstance().fontRenderer, text, parent.width / 2 - 25 - MinecraftClient.getInstance().fontRenderer.getStringWidth(text), 30 + 6, -1);
         text = I18n.translate("key.rei.use") + ": ";

+ 9 - 13
src/main/java/me/shedaniel/gui/GuiItemList.java

@@ -129,7 +129,7 @@ public class GuiItemList extends Drawable {
     }
     
     private void fillSlots() {
-        page = MathHelper.clamp(page, 0, (int) Math.floor(view.size() / displaySlots.size()));
+        page = MathHelper.clamp(page, 0, MathHelper.ceil(view.size() / displaySlots.size()));
         int firstSlot = page * displaySlots.size();
         for(int i = 0; i < displaySlots.size(); i++) {
             if (firstSlot + i < view.size() && firstSlot + i >= 0) {
@@ -184,33 +184,27 @@ public class GuiItemList extends Drawable {
     public void draw() {
         if (!visible)
             return;
-        if (needsResize == true)
-            resize();
-        if (oldGuiLeft != ((IMixinContainerGui) overlayedGui).getGuiLeft())
+        if (needsResize == true || oldGuiLeft != ((IMixinContainerGui) overlayedGui).getGuiLeft())
             resize();
         GlStateManager.pushMatrix();
         updateButtons();
         controls.forEach(Control::draw);
-        String header = String.format("%s/%s", page + 1, ((int) Math.floor(view.size() / displaySlots.size())) + 1);
+        String header = String.format("%s/%s", page + 1, MathHelper.ceil(view.size() / displaySlots.size()) + 1);
         MinecraftClient.getInstance().fontRenderer.drawWithShadow(header, rect.x + (rect.width / 2) - (MinecraftClient.getInstance().fontRenderer.getStringWidth(header) / 2), rect.y + 10, -1);
         GlStateManager.popMatrix();
     }
     
     private void updateButtons() {
-        if (page == 0)
-            buttonLeft.setEnabled(false);
-        else
-            buttonLeft.setEnabled(true);
-        if (displaySlots.size() + displaySlots.size() * page >= view.size())
-            buttonRight.setEnabled(false);
-        else
-            buttonRight.setEnabled(true);
+        buttonLeft.setEnabled(MathHelper.ceil(view.size() / displaySlots.size()) > 1);
+        buttonRight.setEnabled(MathHelper.ceil(view.size() / displaySlots.size()) > 1);
     }
     
     
     public boolean btnRightClicked(int button) {
         if (button == 0) {
             page++;
+            if (page > MathHelper.ceil(view.size() / displaySlots.size()))
+                page = 0;
             fillSlots();
             return true;
         }
@@ -220,6 +214,8 @@ public class GuiItemList extends Drawable {
     public boolean btnLeftClicked(int button) {
         if (button == 0) {
             page--;
+            if (page < 0)
+                page = MathHelper.ceil(view.size() / displaySlots.size());
             fillSlots();
             return true;
         }

+ 1 - 9
src/main/java/me/shedaniel/gui/REIRenderHelper.java

@@ -1,6 +1,5 @@
 package me.shedaniel.gui;
 
-import com.mojang.blaze3d.platform.GlStateManager;
 import me.shedaniel.ClientListener;
 import me.shedaniel.gui.widget.Control;
 import me.shedaniel.gui.widget.IFocusable;
@@ -99,15 +98,8 @@ public class REIRenderHelper {
     
     
     private static void renderTooltips() {
-        GlStateManager.pushMatrix();
-        GlStateManager.enableLighting();
-        for(TooltipData tooltipData : tooltipsToRender) {
-            getOverlayedGui().drawTooltip(tooltipData.text, tooltipData.x, tooltipData.y);
-        }
-        GlStateManager.disableLighting();
+        tooltipsToRender.forEach(tooltipData -> getOverlayedGui().drawTooltip(tooltipData.text, tooltipData.x, tooltipData.y));
         tooltipsToRender.clear();
-        GlStateManager.popMatrix();
-        
     }
     
     public static boolean mouseClick(int x, int y, int button) {

+ 1 - 0
src/main/java/me/shedaniel/gui/RecipeGui.java

@@ -83,6 +83,7 @@ public class RecipeGui extends ContainerGui {
         drawBackground();
         super.draw(mouseX, mouseY, partialTicks);
         int y = (int) ((mainWindow.getScaledHeight() / 2 - this.guiHeight / 2));
+        GuiLighting.disable();
         drawStringCentered(this.fontRenderer, selectedCategory.getDisplayName(), left + guiWidth / 2, y + 11, -1);
         drawStringCentered(this.fontRenderer, String.format("%d/%d", 1 + getCurrentPage(), getTotalPages()), left + guiWidth / 2, y + 34, -1);
         controls.forEach(Control::draw);

+ 8 - 3
src/main/java/me/shedaniel/gui/widget/TextBox.java

@@ -2,6 +2,7 @@ package me.shedaniel.gui.widget;
 
 import me.shedaniel.gui.REIRenderHelper;
 import net.minecraft.client.gui.widget.TextFieldWidget;
+import net.minecraft.client.render.GuiLighting;
 
 import java.awt.*;
 
@@ -30,6 +31,7 @@ public class TextBox extends Control implements IFocusable {
     
     @Override
     public void draw() {
+        GuiLighting.disable();
         textField.render(0, 0, 0);
     }
     
@@ -44,6 +46,11 @@ public class TextBox extends Control implements IFocusable {
     }
     
     protected boolean doMouseClick(int button) {
+        if (button == 1) {
+            textField.setText("");
+            REIRenderHelper.updateSearch();
+            return true;
+        }
         Point mouseLoc = REIRenderHelper.getMouseLoc();
         if (!hasFocus())
             setFocused(true);
@@ -52,10 +59,8 @@ public class TextBox extends Control implements IFocusable {
     
     protected boolean onKeyPressed(int first, int second, int third) {
         boolean handled = textField.keyPressed(first, second, third);
-        if (handled) {
+        if (handled)
             REIRenderHelper.updateSearch();
-        }
-        
         return handled;
     }
     

+ 37 - 1
src/main/java/me/shedaniel/plugin/blastfurnace/VanillaBlastFurnaceCategory.java

@@ -1,12 +1,21 @@
 package me.shedaniel.plugin.blastfurnace;
 
+import me.shedaniel.api.DisplayCategoryCraftable;
 import me.shedaniel.api.IDisplayCategory;
+import me.shedaniel.gui.RecipeGui;
 import me.shedaniel.gui.widget.Control;
 import me.shedaniel.gui.widget.REISlot;
+import me.shedaniel.gui.widget.SmallButton;
 import me.shedaniel.gui.widget.WidgetArrow;
+import me.shedaniel.listenerdefinitions.IMixinRecipeBookGui;
+import me.shedaniel.plugin.smoker.VanillaSmokerRecipe;
 import net.minecraft.block.Blocks;
 import net.minecraft.block.entity.BlastFurnaceBlockEntity;
 import net.minecraft.block.entity.SmokerBlockEntity;
+import net.minecraft.client.MinecraftClient;
+import net.minecraft.client.gui.Gui;
+import net.minecraft.client.gui.container.BlastFurnaceGui;
+import net.minecraft.client.gui.container.SmokerGui;
 import net.minecraft.client.resource.language.I18n;
 import net.minecraft.item.Item;
 import net.minecraft.item.ItemStack;
@@ -16,7 +25,7 @@ import java.util.LinkedList;
 import java.util.List;
 import java.util.stream.Collectors;
 
-public class VanillaBlastFurnaceCategory implements IDisplayCategory<VanillaBlastFurnaceRecipe> {
+public class VanillaBlastFurnaceCategory implements DisplayCategoryCraftable<VanillaBlastFurnaceRecipe> {
     private List<VanillaBlastFurnaceRecipe> recipes;
     
     @Override
@@ -87,4 +96,31 @@ public class VanillaBlastFurnaceCategory implements IDisplayCategory<VanillaBlas
     public ItemStack getCategoryIcon() {
         return new ItemStack(Blocks.BLAST_FURNACE.getItem());
     }
+    
+    @Override
+    public boolean canAutoCraftHere(Class<? extends Gui> guiClass, VanillaBlastFurnaceRecipe recipe) {
+        return guiClass.isAssignableFrom(BlastFurnaceGui.class);
+    }
+    
+    @Override
+    public boolean performAutoCraft(Gui gui, VanillaBlastFurnaceRecipe recipe) {
+        if (!gui.getClass().isAssignableFrom(BlastFurnaceGui.class))
+            return false;
+        ((IMixinRecipeBookGui) (((BlastFurnaceGui) gui).getRecipeBookGui())).getGhostSlots().reset();
+        MinecraftClient.getInstance().interactionManager.clickRecipe(MinecraftClient.getInstance().player.container.syncId, recipe.getRecipe(), Gui.isShiftPressed());
+        return false;
+    }
+    
+    @Override
+    public void registerAutoCraftButton(List<Control> control, RecipeGui recipeGui, Gui parentGui, VanillaBlastFurnaceRecipe recipe, int number) {
+        SmallButton button = new SmallButton(128, 75 + 6 + 26 + number * 75, 10, 10, "+");
+        button.setOnClick(mouse -> {
+            recipeGui.close();
+            MinecraftClient.getInstance().openGui(parentGui);
+            return canAutoCraftHere(parentGui.getClass(), recipe) && performAutoCraft(parentGui, recipe);
+        });
+        button.setEnabled(canAutoCraftHere(parentGui.getClass(), recipe));
+        control.add(button);
+    }
+    
 }

+ 5 - 0
src/main/java/me/shedaniel/plugin/blastfurnace/VanillaBlastFurnaceRecipe.java

@@ -44,4 +44,9 @@ public class VanillaBlastFurnaceRecipe implements IRecipe<ItemStack> {
         input.add(BlastFurnaceBlockEntity.createBurnableMap().keySet().stream().map(Item::getDefaultStack).collect(Collectors.toList()));
         return input;
     }
+    
+    public BlastingRecipe getRecipe() {
+        return recipe;
+    }
+    
 }

+ 1 - 1
src/main/java/me/shedaniel/plugin/crafting/VanillaCraftingCategory.java

@@ -132,6 +132,7 @@ public class VanillaCraftingCategory implements DisplayCategoryCraftable<Vanilla
             ((IMixinRecipeBookGui) (((CraftingTableGui) gui).getRecipeBookGui())).getGhostSlots().reset();
         else if (gui.getClass().isAssignableFrom(PlayerInventoryGui.class))
             ((IMixinRecipeBookGui) (((PlayerInventoryGui) gui).getRecipeBookGui())).getGhostSlots().reset();
+        else return false;
         MinecraftClient.getInstance().interactionManager.clickRecipe(MinecraftClient.getInstance().player.container.syncId, recipe.getRecipe(), Gui.isShiftPressed());
         return true;
     }
@@ -140,7 +141,6 @@ public class VanillaCraftingCategory implements DisplayCategoryCraftable<Vanilla
     public void registerAutoCraftButton(List<Control> control, RecipeGui recipeGui, Gui parentGui, VanillaCraftingRecipe recipe, int number) {
         SmallButton button = new SmallButton(78, 75 + 6 + 36 + number * 75, 10, 10, "+");
         button.setOnClick(mouse -> {
-            System.out.println(parentGui.getClass().getName());
             recipeGui.close();
             MinecraftClient.getInstance().openGui(parentGui);
             return canAutoCraftHere(parentGui.getClass(), recipe) && performAutoCraft(parentGui, recipe);

+ 35 - 2
src/main/java/me/shedaniel/plugin/furnace/VanillaFurnaceCategory.java

@@ -1,11 +1,17 @@
 package me.shedaniel.plugin.furnace;
 
-import me.shedaniel.api.IDisplayCategory;
+import me.shedaniel.api.DisplayCategoryCraftable;
+import me.shedaniel.gui.RecipeGui;
 import me.shedaniel.gui.widget.Control;
 import me.shedaniel.gui.widget.REISlot;
+import me.shedaniel.gui.widget.SmallButton;
 import me.shedaniel.gui.widget.WidgetArrow;
+import me.shedaniel.listenerdefinitions.IMixinRecipeBookGui;
 import net.minecraft.block.Blocks;
 import net.minecraft.block.entity.FurnaceBlockEntity;
+import net.minecraft.client.MinecraftClient;
+import net.minecraft.client.gui.Gui;
+import net.minecraft.client.gui.container.FurnaceGui;
 import net.minecraft.client.resource.language.I18n;
 import net.minecraft.item.Item;
 import net.minecraft.item.ItemStack;
@@ -15,7 +21,7 @@ import java.util.LinkedList;
 import java.util.List;
 import java.util.stream.Collectors;
 
-public class VanillaFurnaceCategory implements IDisplayCategory<VanillaFurnaceRecipe> {
+public class VanillaFurnaceCategory implements DisplayCategoryCraftable<VanillaFurnaceRecipe> {
     private List<VanillaFurnaceRecipe> recipes;
     
     @Override
@@ -86,4 +92,31 @@ public class VanillaFurnaceCategory implements IDisplayCategory<VanillaFurnaceRe
     public ItemStack getCategoryIcon() {
         return new ItemStack(Blocks.FURNACE.getItem());
     }
+    
+    @Override
+    public boolean canAutoCraftHere(Class<? extends Gui> guiClass, VanillaFurnaceRecipe recipe) {
+        return guiClass.isAssignableFrom(FurnaceGui.class);
+    }
+    
+    @Override
+    public boolean performAutoCraft(Gui gui, VanillaFurnaceRecipe recipe) {
+        if (!gui.getClass().isAssignableFrom(FurnaceGui.class))
+            return false;
+        ((IMixinRecipeBookGui) (((FurnaceGui) gui).getRecipeBookGui())).getGhostSlots().reset();
+        MinecraftClient.getInstance().interactionManager.clickRecipe(MinecraftClient.getInstance().player.container.syncId, recipe.getRecipe(), Gui.isShiftPressed());
+        return false;
+    }
+    
+    @Override
+    public void registerAutoCraftButton(List<Control> control, RecipeGui recipeGui, Gui parentGui, VanillaFurnaceRecipe recipe, int number) {
+        SmallButton button = new SmallButton(128, 75 + 6 + 26 + number * 75, 10, 10, "+");
+        button.setOnClick(mouse -> {
+            recipeGui.close();
+            MinecraftClient.getInstance().openGui(parentGui);
+            return canAutoCraftHere(parentGui.getClass(), recipe) && performAutoCraft(parentGui, recipe);
+        });
+        button.setEnabled(canAutoCraftHere(parentGui.getClass(), recipe));
+        control.add(button);
+    }
+    
 }

+ 7 - 0
src/main/java/me/shedaniel/plugin/furnace/VanillaFurnaceRecipe.java

@@ -5,6 +5,7 @@ import net.minecraft.block.entity.FurnaceBlockEntity;
 import net.minecraft.item.Item;
 import net.minecraft.item.ItemStack;
 import net.minecraft.recipe.Ingredient;
+import net.minecraft.recipe.Recipe;
 import net.minecraft.recipe.smelting.SmeltingRecipe;
 
 import java.util.Arrays;
@@ -13,6 +14,7 @@ import java.util.List;
 import java.util.stream.Collectors;
 
 public class VanillaFurnaceRecipe implements IRecipe<ItemStack> {
+    
     private final SmeltingRecipe recipe;
     
     @Override
@@ -41,4 +43,9 @@ public class VanillaFurnaceRecipe implements IRecipe<ItemStack> {
         input.add(FurnaceBlockEntity.createBurnableMap().keySet().stream().map(Item::getDefaultStack).collect(Collectors.toList()));
         return input;
     }
+    
+    public Recipe getRecipe() {
+        return recipe;
+    }
+    
 }

+ 36 - 1
src/main/java/me/shedaniel/plugin/smoker/VanillaSmokerCategory.java

@@ -1,11 +1,19 @@
 package me.shedaniel.plugin.smoker;
 
+import me.shedaniel.api.DisplayCategoryCraftable;
 import me.shedaniel.api.IDisplayCategory;
+import me.shedaniel.gui.RecipeGui;
 import me.shedaniel.gui.widget.Control;
 import me.shedaniel.gui.widget.REISlot;
+import me.shedaniel.gui.widget.SmallButton;
 import me.shedaniel.gui.widget.WidgetArrow;
+import me.shedaniel.listenerdefinitions.IMixinRecipeBookGui;
 import net.minecraft.block.Blocks;
 import net.minecraft.block.entity.SmokerBlockEntity;
+import net.minecraft.client.MinecraftClient;
+import net.minecraft.client.gui.Gui;
+import net.minecraft.client.gui.container.FurnaceGui;
+import net.minecraft.client.gui.container.SmokerGui;
 import net.minecraft.client.resource.language.I18n;
 import net.minecraft.item.Item;
 import net.minecraft.item.ItemStack;
@@ -15,7 +23,7 @@ import java.util.LinkedList;
 import java.util.List;
 import java.util.stream.Collectors;
 
-public class VanillaSmokerCategory implements IDisplayCategory<VanillaSmokerRecipe> {
+public class VanillaSmokerCategory implements DisplayCategoryCraftable<VanillaSmokerRecipe> {
     private List<VanillaSmokerRecipe> recipes;
     
     @Override
@@ -86,4 +94,31 @@ public class VanillaSmokerCategory implements IDisplayCategory<VanillaSmokerReci
     public ItemStack getCategoryIcon() {
         return new ItemStack(Blocks.SMOKER.getItem());
     }
+    
+    @Override
+    public boolean canAutoCraftHere(Class<? extends Gui> guiClass, VanillaSmokerRecipe recipe) {
+        return guiClass.isAssignableFrom(SmokerGui.class);
+    }
+    
+    @Override
+    public boolean performAutoCraft(Gui gui, VanillaSmokerRecipe recipe) {
+        if (!gui.getClass().isAssignableFrom(SmokerGui.class))
+            return false;
+        ((IMixinRecipeBookGui) (((SmokerGui) gui).getRecipeBookGui())).getGhostSlots().reset();
+        MinecraftClient.getInstance().interactionManager.clickRecipe(MinecraftClient.getInstance().player.container.syncId, recipe.getRecipe(), Gui.isShiftPressed());
+        return false;
+    }
+    
+    @Override
+    public void registerAutoCraftButton(List<Control> control, RecipeGui recipeGui, Gui parentGui, VanillaSmokerRecipe recipe, int number) {
+        SmallButton button = new SmallButton(128, 75 + 6 + 26 + number * 75, 10, 10, "+");
+        button.setOnClick(mouse -> {
+            recipeGui.close();
+            MinecraftClient.getInstance().openGui(parentGui);
+            return canAutoCraftHere(parentGui.getClass(), recipe) && performAutoCraft(parentGui, recipe);
+        });
+        button.setEnabled(canAutoCraftHere(parentGui.getClass(), recipe));
+        control.add(button);
+    }
+    
 }

+ 5 - 0
src/main/java/me/shedaniel/plugin/smoker/VanillaSmokerRecipe.java

@@ -41,4 +41,9 @@ public class VanillaSmokerRecipe implements IRecipe<ItemStack> {
         input.add(SmokerBlockEntity.createBurnableMap().keySet().stream().map(Item::getDefaultStack).collect(Collectors.toList()));
         return input;
     }
+    
+    public SmokingRecipe getRecipe() {
+        return recipe;
+    }
+    
 }