Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions src/main/java/com/asdflj/ae2thing/api/MouseWheelHandler.java
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
package com.asdflj.ae2thing.api;

import appeng.api.events.GuiScrollEvent;
import codechicken.nei.recipe.GuiRecipe;
import codechicken.nei.recipe.GuiOverlayButton;

@FunctionalInterface
public interface MouseWheelHandler {

boolean handleMouseWheel(GuiScrollEvent event, GuiRecipe<?> recipe);
boolean handleMouseWheel(GuiScrollEvent event, GuiOverlayButton overlayButton);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package com.asdflj.ae2thing.client.event;

import net.minecraftforge.client.event.GuiScreenEvent;

import codechicken.nei.recipe.GuiOverlayButton;

public class GuiOverlayButtonEvent extends GuiScreenEvent {

private final GuiOverlayButton button;

public GuiOverlayButtonEvent(GuiOverlayButton btn) {
super(btn.firstGui);
button = btn;
}

public GuiOverlayButton getButton() {
return button;
}
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package com.asdflj.ae2thing.coremod.mixin.nei;

import net.minecraft.client.gui.inventory.GuiContainer;
import net.minecraftforge.common.MinecraftForge;

import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;

import com.asdflj.ae2thing.client.event.GuiOverlayButtonEvent;

import codechicken.nei.recipe.GuiOverlayButton;
import codechicken.nei.recipe.GuiRecipeButton;
import codechicken.nei.recipe.RecipeHandlerRef;

@Mixin(GuiOverlayButton.class)
public abstract class MixinGuiOverlayButton extends GuiRecipeButton {

@Final
public GuiContainer firstGui;

protected MixinGuiOverlayButton(RecipeHandlerRef point, int x, int y, int buttonId, String label) {
super(point, x, y, buttonId, label);
}

@Inject(method = "mouseReleased", at = @At(value = "TAIL"))
public void mouseReleased(int mouseX, int mouseY, CallbackInfo ci) {
MinecraftForge.EVENT_BUS.post(new GuiOverlayButtonEvent((GuiOverlayButton) ((Object) this)));
}
}
Original file line number Diff line number Diff line change
@@ -1,69 +1,52 @@
package com.asdflj.ae2thing.crossmod.waila;

import java.util.List;
import java.util.Optional;

import net.minecraft.client.gui.GuiButton;
import net.minecraft.client.gui.inventory.GuiContainer;
import net.minecraft.item.ItemStack;

import com.asdflj.ae2thing.client.gui.GuiWirelessDualInterfaceTerminal;
import com.asdflj.ae2thing.proxy.ClientProxy;

import appeng.container.slot.SlotFake;
import appeng.util.Platform;
import codechicken.lib.gui.GuiDraw;
import codechicken.nei.NEIClientConfig;
import codechicken.nei.PositionedStack;
import codechicken.nei.recipe.AcceptsFollowingTooltipLineHandler;
import codechicken.nei.recipe.GuiOverlayButton;
import codechicken.nei.recipe.GuiRecipe;
import codechicken.nei.recipe.RecipeHandlerRef;

public class PatternPermutationToolTip extends mcp.mobius.waila.handlers.nei.TooltipHandlerWaila {

protected AcceptsFollowingTooltipLineHandler acceptsFollowingTooltipLineHandler;

@Override
public List<String> handleItemTooltip(GuiContainer gui, ItemStack itemstack, int arg2, int arg3,
public List<String> handleItemTooltip(GuiContainer gui, ItemStack itemstack, int x, int y,
List<String> currenttip) {
if (NEIClientConfig.showCycledIngredientsTooltip() && gui instanceof GuiWirelessDualInterfaceTerminal
&& gui.theSlot instanceof SlotFake slot
&& slot.getHasStack()
&& ClientProxy.getRecipe() != null) {
GuiRecipe<?> recipe = ClientProxy.getRecipe();
Optional<GuiButton> guiButton = recipe.getOverlayButtons()
.stream()
.findFirst();
if (guiButton.isPresent()) {
PositionedStack currentIngredients = null;
ItemStack slotItem = slot.getStack();
if (slotItem == null) return currenttip;
GuiOverlayButton btn = (GuiOverlayButton) guiButton.get();
List<PositionedStack> list = btn.handlerRef.handler.getIngredientStacks(btn.handlerRef.recipeIndex);
out: for (PositionedStack stack : list) {
for (ItemStack item : stack.items) {
if (Platform.isSameItemPrecise(slotItem, item)) {
currentIngredients = stack;
break out;
}
}

}
if (currentIngredients != null && currentIngredients.items.length > 1
&& currentIngredients.containsWithNBT(slot.getStack())) {
&& ClientProxy.getOverlayButton() != null) {
RecipeHandlerRef ref = ClientProxy.getOverlayButton().handlerRef;
List<PositionedStack> currentIngredients = ref.handler.getIngredientStacks(ref.recipeIndex);
for (PositionedStack positionedStack : currentIngredients) {
if (positionedStack.items.length > 1 && positionedStack.containsWithNBT(slot.getStack())) {
if (this.acceptsFollowingTooltipLineHandler == null
|| this.acceptsFollowingTooltipLineHandler.tooltipGUID != currentIngredients) {
this.acceptsFollowingTooltipLineHandler = AcceptsFollowingTooltipLineHandler.of(
currentIngredients,
currentIngredients.getFilteredPermutations(),
currentIngredients.item);
|| this.acceptsFollowingTooltipLineHandler.tooltipGUID != positionedStack) {
this.acceptsFollowingTooltipLineHandler = AcceptsFollowingTooltipLineHandler
.of(positionedStack, positionedStack.getFilteredPermutations(), positionedStack.item);
}

if (this.acceptsFollowingTooltipLineHandler != null) {
this.acceptsFollowingTooltipLineHandler.setActiveStack(slotItem);
currenttip.add("§x" + GuiDraw.getTipLineId(this.acceptsFollowingTooltipLineHandler));
this.acceptsFollowingTooltipLineHandler.setActiveStack(slot.getStack());
currenttip.add(
GuiDraw.TOOLTIP_HANDLER + GuiDraw.getTipLineId(this.acceptsFollowingTooltipLineHandler));
break;
}
}
}

return currenttip;

}
return currenttip;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,8 @@
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Optional;

import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiButton;
import net.minecraft.client.gui.GuiScreen;
import net.minecraft.client.gui.inventory.GuiContainer;
import net.minecraft.item.ItemStack;
Expand All @@ -22,6 +20,7 @@
import com.asdflj.ae2thing.nei.object.OrderStack;
import com.asdflj.ae2thing.nei.recipes.FluidRecipe;
import com.asdflj.ae2thing.network.CPacketTransferRecipe;
import com.asdflj.ae2thing.proxy.ClientProxy;
import com.asdflj.ae2thing.util.GTUtil;
import com.asdflj.ae2thing.util.ModAndClassUtil;
import com.asdflj.ae2thing.util.PHUtil;
Expand Down Expand Up @@ -61,16 +60,13 @@ private static ItemStack findSameItem(ItemStack[] items, ItemStack item, Constan
}

public PatternTerminalRecipeTransferHandler() {
mouseHandlers.add((event, recipe) -> {
mouseHandlers.add((event, overlayButton) -> {
GuiScreen screen = Minecraft.getMinecraft().currentScreen;
if (screen instanceof AEBaseGui g && recipe != null && GuiScreen.isShiftKeyDown()) {
Optional<GuiButton> guiButton = recipe.getOverlayButtons()
.stream()
.findFirst();
if (guiButton.isPresent() && g.theSlot instanceof SlotFake slot) {
if (screen instanceof AEBaseGui g && overlayButton != null && GuiScreen.isShiftKeyDown()) {
GuiOverlayButton btn = ClientProxy.getOverlayButton();
if (btn != null && g.theSlot instanceof SlotFake slot) {
ItemStack slotItem = slot.getStack();
if (slotItem == null) return false;
GuiOverlayButton btn = (GuiOverlayButton) guiButton.get();

List<PositionedStack> list = btn.handlerRef.handler.getIngredientStacks(btn.handlerRef.recipeIndex);
for (PositionedStack stack : list) {
Expand Down
32 changes: 17 additions & 15 deletions src/main/java/com/asdflj/ae2thing/proxy/ClientProxy.java
Original file line number Diff line number Diff line change
Expand Up @@ -24,18 +24,17 @@
import com.asdflj.ae2thing.api.adapter.terminal.parts.AETerminal;
import com.asdflj.ae2thing.api.adapter.terminal.parts.FCPatternTerminal;
import com.asdflj.ae2thing.client.event.CraftTracking;
import com.asdflj.ae2thing.client.event.GuiOverlayButtonEvent;
import com.asdflj.ae2thing.client.event.NotificationEvent;
import com.asdflj.ae2thing.client.event.OpenTerminalEvent;
import com.asdflj.ae2thing.client.event.UpdateAmountTextEvent;
import com.asdflj.ae2thing.client.gui.BaseMEGui;
import com.asdflj.ae2thing.client.gui.GuiCraftingTerminal;
import com.asdflj.ae2thing.client.gui.GuiInfusionPatternTerminal;
import com.asdflj.ae2thing.client.gui.GuiWirelessDualInterfaceTerminal;
import com.asdflj.ae2thing.client.gui.IGuiMonitorTerminal;
import com.asdflj.ae2thing.client.render.BlockPosHighlighter;
import com.asdflj.ae2thing.client.render.Notification;
import com.asdflj.ae2thing.common.item.ItemPhial;
import com.asdflj.ae2thing.coremod.mixin.nei.AccessorGuiOverlayButton;
import com.asdflj.ae2thing.loader.KeybindLoader;
import com.asdflj.ae2thing.loader.ListenerLoader;
import com.asdflj.ae2thing.loader.RenderLoader;
Expand All @@ -60,6 +59,7 @@
import codechicken.nei.api.API;
import codechicken.nei.recipe.GuiOverlayButton;
import codechicken.nei.recipe.GuiRecipe;
import codechicken.nei.recipe.GuiRecipeButton;
import cpw.mods.fml.common.event.FMLInitializationEvent;
import cpw.mods.fml.common.event.FMLLoadCompleteEvent;
import cpw.mods.fml.common.event.FMLPreInitializationEvent;
Expand All @@ -69,7 +69,7 @@

public class ClientProxy extends CommonProxy {

private static GuiRecipe<?> recipe = null;
private static GuiOverlayButton overlayButton = null;
public static List<MouseWheelHandler> mouseHandlers = new ArrayList<>();

@Override
Expand All @@ -87,8 +87,8 @@ public void onLoadComplete(FMLLoadCompleteEvent event) {
}
}

public static GuiRecipe<?> getRecipe() {
return recipe;
public static GuiOverlayButton getOverlayButton() {
return overlayButton;
}

@Override
Expand Down Expand Up @@ -120,7 +120,7 @@ public void updateCraftAmount(UpdateAmountTextEvent amount) {
public boolean handleMouseWheelInput(GuiScrollEvent event) {
if (mouseHandlers.isEmpty()) return false;
for (MouseWheelHandler handler : mouseHandlers) {
if (handler.handleMouseWheel(event, recipe)) {
if (handler.handleMouseWheel(event, overlayButton)) {
return true;
}
}
Expand Down Expand Up @@ -212,19 +212,21 @@ public void tickEvent(TickEvent.PlayerTickEvent event) {
}

@SubscribeEvent
public void onActionPerformedEventPre(GuiScreenEvent.ActionPerformedEvent.Pre event) {
// nee handler overlayRecipe so i need other way
if (event.button instanceof GuiOverlayButton && event.gui instanceof GuiRecipe<?>g) {
recipe = g;
if (g.getFirstScreen() instanceof IGuiMonitorTerminal
&& event.button instanceof AccessorGuiOverlayButton btn) {
btn.setRequireShiftForOverlayRecipe(false);
public void onActionPerformedEventPost(GuiRecipeButton.UpdateRecipeButtonsEvent.Post event) {
if (!(event.gui instanceof GuiRecipe<?>)) return;
overlayButton = null;
for (GuiRecipeButton btn : event.buttonList) {
if (btn instanceof GuiOverlayButton gob) {
gob.setRequireShiftForOverlayRecipe(false);
}
} else {
recipe = null;
}
}

@SubscribeEvent
public void onActionOverlayButton(GuiOverlayButtonEvent event) {
overlayButton = event.getButton();
}

@SubscribeEvent
public void initGuiEvent(GuiScreenEvent.InitGuiEvent.Post event) {
if (event.gui instanceof BaseMEGui bg) {
Expand Down
20 changes: 10 additions & 10 deletions src/main/resources/mixins.ae2thing.late.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,29 +8,29 @@
"mixins": [
],
"client": [
"ae.AccessorGuiScrollbar",
"ae.MixinAEBaseGui",
"ae.MixinContainerCraftConfirm",
"ae.MixinCraftingCPUCluster",
"ae.MixinGuiCraftAmount",
"ae.MixinGuiCraftConfirm",
"ae.MixinItemRepo",
"ae.MixinGuiCraftAmount",
"ae.MixinTileIOPort",
"br.MixinBRUtil",
"fc.MixinGuiFluidCraftAmount",
"nei.MixinGuiContainerManager",
"nei.MixinGuiOverlayButton",
"nei.MixinIOverlayHandler",
"nei.MixinPanelWidget",
"nei.MixinRecipeItemInputHandler",
"nei.AccessorGuiOverlayButton",
"tc.nei.MixinLoadCraftingRecipes",
"tc.nei.MixinTemplateRecipeHandler",
"wct.MixinRandomUtils",
"ae.AccessorGuiScrollbar",
"ae.MixinCraftingCPUCluster",
"ae.MixinTileIOPort",
"br.MixinBRUtil"
"wct.MixinRandomUtils"
],
"server": [
"wct.MixinRandomUtils",
"ae.MixinTileIOPort",
"ae.MixinContainerCraftConfirm",
"ae.MixinCraftingCPUCluster"
"ae.MixinCraftingCPUCluster",
"ae.MixinTileIOPort",
"wct.MixinRandomUtils"
]
}