diff options
| author | Unknown <shekwancheung0528@gmail.com> | 2019-01-11 18:14:42 +0800 |
|---|---|---|
| committer | Unknown <shekwancheung0528@gmail.com> | 2019-01-11 18:14:42 +0800 |
| commit | 0b314135a82f18fa13ce1bcbe66e45ee5b3236a5 (patch) | |
| tree | e50f48a106d535c418b89ddfc67f2d1f3013be69 /src/main/java | |
| parent | 3dd1ea9403035bdc32612ec66210342b76c48001 (diff) | |
| download | RoughlyEnoughItems-0b314135a82f18fa13ce1bcbe66e45ee5b3236a5.tar.gz RoughlyEnoughItems-0b314135a82f18fa13ce1bcbe66e45ee5b3236a5.tar.bz2 RoughlyEnoughItems-0b314135a82f18fa13ce1bcbe66e45ee5b3236a5.zip | |
Furnace Recipe + Scrolling in Recipe Window
Diffstat (limited to 'src/main/java')
5 files changed, 76 insertions, 11 deletions
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 01eee72b2..a3ed1c4ed 100644 --- a/src/main/java/me/shedaniel/rei/gui/widget/ItemSlotWidget.java +++ b/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; + } + } 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 8b6dca71e..b09afa46d 100644 --- a/src/main/java/me/shedaniel/rei/gui/widget/RecipeViewingWidget.java +++ b/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); } diff --git a/src/main/java/me/shedaniel/rei/plugin/DefaultCraftingCategory.java b/src/main/java/me/shedaniel/rei/plugin/DefaultCraftingCategory.java index 32299c466..ded3e3087 100644 --- a/src/main/java/me/shedaniel/rei/plugin/DefaultCraftingCategory.java +++ b/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) diff --git a/src/main/java/me/shedaniel/rei/plugin/DefaultSmeltingCategory.java b/src/main/java/me/shedaniel/rei/plugin/DefaultSmeltingCategory.java index 8388b9e00..3784a1f8b 100644 --- a/src/main/java/me/shedaniel/rei/plugin/DefaultSmeltingCategory.java +++ b/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; + } } diff --git a/src/main/java/me/shedaniel/rei/plugin/DefaultSmeltingDisplay.java b/src/main/java/me/shedaniel/rei/plugin/DefaultSmeltingDisplay.java index 417bed72f..2b12b7603 100644 --- a/src/main/java/me/shedaniel/rei/plugin/DefaultSmeltingDisplay.java +++ b/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 |
