Browse Source

Furnace Recipe + Scrolling in Recipe Window

Unknown 6 năm trước cách đây
mục cha
commit
0b314135a8

+ 1 - 1
build.gradle

@@ -6,7 +6,7 @@ sourceCompatibility = 1.8
 targetCompatibility = 1.8
 
 archivesBaseName = "RoughlyEnoughItems"
-version = "2.0.0.27"
+version = "2.0.0.28"
 
 minecraft {
 }

+ 22 - 3
src/main/java/me/shedaniel/rei/gui/widget/ItemSlotWidget.java

@@ -1,10 +1,10 @@
 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.listeners.IMixinContainerGui;
 import net.minecraft.client.MinecraftClient;
-import net.minecraft.client.gui.ContainerGui;
 import net.minecraft.client.gui.Drawable;
 import net.minecraft.client.render.GuiLighting;
 import net.minecraft.client.render.item.ItemRenderer;
@@ -24,7 +24,7 @@ public class ItemSlotWidget extends Drawable implements HighlightableWidget {
     
     private static final Identifier RECIPE_GUI = new Identifier("roughlyenoughitems", "textures/gui/recipecontainer.png");
     private List<ItemStack> itemList = new LinkedList<>();
-    private boolean drawBackground, showToolTips;
+    private boolean drawBackground, showToolTips, clickToMoreRecipes;
     private int x, y;
     private IMixinContainerGui containerGui;
     
@@ -39,6 +39,12 @@ public class ItemSlotWidget extends Drawable implements HighlightableWidget {
         this.x = x;
         this.y = y;
         this.containerGui = containerGui;
+        this.clickToMoreRecipes = false;
+    }
+    
+    public ItemSlotWidget(int x, int y, List<ItemStack> itemList, boolean drawBackground, boolean showToolTips, IMixinContainerGui containerGui, boolean clickToMoreRecipes) {
+        this(x, y, itemList, drawBackground, showToolTips, containerGui);
+        this.clickToMoreRecipes = clickToMoreRecipes;
     }
     
     public boolean isDrawBackground() {
@@ -93,7 +99,7 @@ public class ItemSlotWidget extends Drawable implements HighlightableWidget {
     protected ItemStack getCurrentStack() {
         if (itemList.size() == 0)
             return new ItemStack(Items.AIR);
-        return itemList.get(MathHelper.clamp((int) (System.currentTimeMillis() / 500) % itemList.size(), 0, itemList.size() - 1));
+        return itemList.get(MathHelper.floor((System.currentTimeMillis() / 500 % (double) itemList.size()) / 1f));
     }
     
     public void setItemList(List<ItemStack> itemList) {
@@ -105,4 +111,17 @@ public class ItemSlotWidget extends Drawable implements HighlightableWidget {
         return new Rectangle(this.x, this.y, 18, 18);
     }
     
+    @Override
+    public boolean onMouseClick(int button, double mouseX, double mouseY) {
+        if (!clickToMoreRecipes)
+            return false;
+        if (getBounds().contains(mouseX, mouseY)) {
+            if (button == 0)
+                return ClientHelper.executeRecipeKeyBind(containerGui.getOverlay(), getCurrentStack().copy(), containerGui);
+            else if (button == 1)
+                return ClientHelper.executeUsageKeyBind(containerGui.getOverlay(), getCurrentStack().copy(), containerGui);
+        }
+        return false;
+    }
+    
 }

+ 15 - 3
src/main/java/me/shedaniel/rei/gui/widget/RecipeViewingWidget.java

@@ -4,6 +4,7 @@ import com.google.common.collect.Lists;
 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.listeners.IMixinContainerGui;
 import net.minecraft.client.MinecraftClient;
@@ -17,10 +18,8 @@ import net.minecraft.util.Identifier;
 import net.minecraft.util.math.MathHelper;
 
 import java.awt.*;
-import java.util.ArrayList;
-import java.util.LinkedList;
+import java.util.*;
 import java.util.List;
-import java.util.Map;
 
 public class RecipeViewingWidget extends Gui {
     
@@ -49,6 +48,7 @@ public class RecipeViewingWidget extends Gui {
         this.bounds = new Rectangle(window.getScaledWidth() / 2 - guiWidth / 2, window.getScaledHeight() / 2 - guiHeight / 2, guiWidth, guiHeight);
         this.categoriesMap = categoriesMap;
         this.categories = new LinkedList<>(categoriesMap.keySet());
+        Collections.reverse(categories);
         this.selectedCategory = categories.get(0);
         this.overlay = overlay;
         this.tabs = new ArrayList<>();
@@ -234,6 +234,18 @@ public class RecipeViewingWidget extends Gui {
         for(GuiEventListener listener : listeners)
             if (listener.mouseScrolled(amount))
                 return true;
+        if (getBounds().contains(ClientHelper.getMouseLocation())) {
+            if (amount > 0 && recipeBack.enabled)
+                recipeBack.onPressed(0, 0, 0);
+            else if (amount < 0 && recipeNext.enabled)
+                recipeNext.onPressed(0, 0, 0);
+        }
+        if ((new Rectangle(bounds.x, bounds.y - 28, bounds.width, 28)).contains(ClientHelper.getMouseLocation())) {
+            if (amount > 0 && categoryBack.enabled)
+                categoryBack.onPressed(0, 0, 0);
+            else if (amount < 0 && categoryNext.enabled)
+                categoryNext.onPressed(0, 0, 0);
+        }
         return super.mouseScrolled(amount);
     }
     

+ 2 - 2
src/main/java/me/shedaniel/rei/plugin/DefaultCraftingCategory.java

@@ -55,7 +55,7 @@ public class DefaultCraftingCategory implements IRecipeCategory<DefaultCraftingD
         List<ItemSlotWidget> slots = Lists.newArrayList();
         for(int y = 0; y < 3; y++)
             for(int x = 0; x < 3; x++)
-                slots.add(new ItemSlotWidget(startPoint.x + 1 + x * 18, startPoint.y + 1 + y * 18, Lists.newArrayList(), true, true, containerGui));
+                slots.add(new ItemSlotWidget(startPoint.x + 1 + x * 18, startPoint.y + 1 + y * 18, Lists.newArrayList(), true, true, containerGui, true));
         for(int i = 0; i < input.size(); i++) {
             if (recipeDisplay instanceof DefaultShapedDisplay) {
                 if (!input.get(i).isEmpty())
@@ -64,7 +64,7 @@ public class DefaultCraftingCategory implements IRecipeCategory<DefaultCraftingD
                 slots.get(i).setItemList(input.get(i));
         }
         widgets.addAll(slots);
-        widgets.add(new ItemSlotWidget(startPoint.x + 95, startPoint.y + 19, recipeDisplay.getOutput(), false, true, containerGui) {
+        widgets.add(new ItemSlotWidget(startPoint.x + 95, startPoint.y + 19, recipeDisplay.getOutput(), false, true, containerGui, true) {
             @Override
             protected String getItemCountOverlay(ItemStack currentStack) {
                 if (currentStack.getAmount() == 1)

+ 33 - 0
src/main/java/me/shedaniel/rei/plugin/DefaultSmeltingCategory.java

@@ -1,13 +1,27 @@
 package me.shedaniel.rei.plugin;
 
+import com.mojang.blaze3d.platform.GlStateManager;
 import me.shedaniel.rei.api.IRecipeCategory;
+import me.shedaniel.rei.gui.widget.IWidget;
+import me.shedaniel.rei.gui.widget.ItemSlotWidget;
+import me.shedaniel.rei.gui.widget.RecipeBaseWidget;
+import me.shedaniel.rei.listeners.IMixinContainerGui;
 import net.minecraft.block.Blocks;
+import net.minecraft.client.MinecraftClient;
+import net.minecraft.client.render.GuiLighting;
 import net.minecraft.client.resource.language.I18n;
 import net.minecraft.item.ItemStack;
 import net.minecraft.util.Identifier;
 
+import java.awt.*;
+import java.util.Arrays;
+import java.util.LinkedList;
+import java.util.List;
+
 public class DefaultSmeltingCategory implements IRecipeCategory<DefaultSmeltingDisplay> {
     
+    private static final Identifier DISPLAY_TEXTURE = new Identifier("roughlyenoughitems", "textures/gui/display.png");
+    
     @Override
     public Identifier getIdentifier() {
         return DefaultPlugin.SMELTING;
@@ -23,4 +37,23 @@ public class DefaultSmeltingCategory implements IRecipeCategory<DefaultSmeltingD
         return I18n.translate("category.rei.smelting");
     }
     
+    @Override
+    public List<IWidget> setupDisplay(IMixinContainerGui containerGui, DefaultSmeltingDisplay recipeDisplay, Rectangle bounds) {
+        Point startPoint = new Point((int) bounds.getCenterX() - 41, (int) bounds.getCenterY() - 27);
+        List<IWidget> widgets = new LinkedList<>(Arrays.asList(new RecipeBaseWidget(bounds) {
+            @Override
+            public void draw(int mouseX, int mouseY, float partialTicks) {
+                super.draw(mouseX, mouseY, partialTicks);
+                GlStateManager.color4f(1.0F, 1.0F, 1.0F, 1.0F);
+                GuiLighting.disable();
+                MinecraftClient.getInstance().getTextureManager().bindTexture(DISPLAY_TEXTURE);
+                drawTexturedRect(startPoint.x, startPoint.y, 0, 54, 82, 54);
+            }
+        }));
+        List<List<ItemStack>> input = recipeDisplay.getInput();
+        widgets.add(new ItemSlotWidget(startPoint.x + 1, startPoint.y + 1, input.get(0), true, true, containerGui, true));
+        widgets.add(new ItemSlotWidget(startPoint.x + 1, startPoint.y + 37, recipeDisplay.getFuel(), true, true, containerGui, true));
+        widgets.add(new ItemSlotWidget(startPoint.x + 61, startPoint.y + 19, recipeDisplay.getOutput(), false, true, containerGui, true));
+        return widgets;
+    }
 }

+ 4 - 3
src/main/java/me/shedaniel/rei/plugin/DefaultSmeltingDisplay.java

@@ -18,16 +18,17 @@ public class DefaultSmeltingDisplay implements IRecipeDisplay<SmeltingRecipe> {
     
     private SmeltingRecipe display;
     private List<List<ItemStack>> input;
-    private List<ItemStack> fuel, output;
+    private List<ItemStack> output;
     
     public DefaultSmeltingDisplay(SmeltingRecipe recipe) {
         this.display = recipe;
-        this.fuel = Lists.newArrayList();
+        List<ItemStack> fuel = Lists.newArrayList();
         this.input = Lists.newArrayList();
         fuel.addAll(FurnaceBlockEntity.createBurnableMap().keySet().stream().map(Item::getDefaultStack).collect(Collectors.toList()));
         recipe.getPreviewInputs().forEach(ingredient -> {
             input.add(Arrays.asList(ingredient.getStackArray()));
         });
+        input.add(fuel);
         this.output = Arrays.asList(recipe.getOutput());
     }
     
@@ -42,7 +43,7 @@ public class DefaultSmeltingDisplay implements IRecipeDisplay<SmeltingRecipe> {
     }
     
     public List<ItemStack> getFuel() {
-        return fuel;
+        return input.get(1);
     }
     
     @Override

+ 1 - 1
src/main/resources/fabric.mod.json

@@ -2,7 +2,7 @@
   "id": "roughlyenoughitems",
   "name": "RoughlyEnoughItems",
   "description": "To allow players to view items and recipes.",
-  "version": "2.0.0.27",
+  "version": "2.0.0.28",
   "side": "client",
   "authors": [
     "Danielshe"