mirror of
https://github.com/GTNewHorizons/NotEnoughEnergistics.git
synced 2026-10-25 20:32:19 +00:00
Universal gui (#53)
Co-authored-by: Kogepan229 <kogepan25629@gmail.com>
This commit is contained in:
1 parent
9c72ef81c3
commit
7ce9086b36
13 files changed
+129
-387
No files matched your search
+3
-3
@@ -1,12 +1,12 @@
|
||||
dependencies {
|
||||
|
||||
api("com.github.GTNewHorizons:Applied-Energistics-2-Unofficial:rv3-beta-687-GTNH:dev")
|
||||
api("com.github.GTNewHorizons:Applied-Energistics-2-Unofficial:rv3-beta-754-GTNH:dev")
|
||||
api("com.github.GTNewHorizons:NotEnoughItems:2.7.87-GTNH:dev")
|
||||
api('com.github.GTNewHorizons:CodeChickenCore:1.4.7:dev')
|
||||
|
||||
implementation("com.github.GTNewHorizons:Baubles-Expanded:2.1.15-GTNH:dev")
|
||||
implementation("com.github.GTNewHorizons:WirelessCraftingTerminal:1.12.7:dev")
|
||||
implementation("com.github.GTNewHorizons:AE2FluidCraft-Rework:1.4.114-gtnh:dev")
|
||||
implementation("com.github.GTNewHorizons:WirelessCraftingTerminal:1.12.10:dev")
|
||||
implementation("com.github.GTNewHorizons:AE2FluidCraft-Rework:1.5.30-gtnh:dev")
|
||||
|
||||
compileOnly("com.github.GTNewHorizons:GT5-Unofficial:5.09.51.458:dev") { transitive = false }
|
||||
compileOnly("com.github.GTNewHorizons:Avaritia:1.75:dev") { transitive = false }
|
||||
|
||||
@@ -20,11 +20,6 @@ import com.github.vfyjxf.nee.nei.NEETerminalBookmarkContainerHandler;
|
||||
import com.github.vfyjxf.nee.processor.IRecipeProcessor;
|
||||
import com.github.vfyjxf.nee.processor.RecipeProcessor;
|
||||
import com.github.vfyjxf.nee.utils.ModIDs;
|
||||
import com.glodblock.github.client.gui.GuiFluidCraftingWireless;
|
||||
import com.glodblock.github.client.gui.GuiFluidPatternExWireless;
|
||||
import com.glodblock.github.client.gui.GuiFluidPatternTerminal;
|
||||
import com.glodblock.github.client.gui.GuiFluidPatternTerminalEx;
|
||||
import com.glodblock.github.client.gui.GuiFluidPatternWireless;
|
||||
|
||||
import appeng.client.gui.implementations.GuiCraftingTerm;
|
||||
import appeng.client.gui.implementations.GuiInterface;
|
||||
@@ -74,8 +69,6 @@ public class NEINeeConfig implements IConfigureNEI {
|
||||
|
||||
installWirelessCraftingTermSupport();
|
||||
|
||||
installFluidPatternTerminalSupport(new HashSet<>(identifiers));
|
||||
|
||||
installThaumicEnergisticsSupport();
|
||||
|
||||
installAvaritiaSupport();
|
||||
@@ -84,43 +77,9 @@ public class NEINeeConfig implements IConfigureNEI {
|
||||
|
||||
installPatternTerminalExSupport(new HashSet<>(identifiers));
|
||||
|
||||
installFluidPatternTerminalExSupport(new HashSet<>(identifiers));
|
||||
|
||||
installlBookmarkContainerHandler();
|
||||
}
|
||||
|
||||
private void installFluidPatternTerminalExSupport(Set<String> identifiers) {
|
||||
if (Loader.isModLoaded(ModIDs.FC)) {
|
||||
identifiers.remove("crafting");
|
||||
identifiers.remove("crafting2x2");
|
||||
for (String ident : identifiers) {
|
||||
API.registerGuiOverlay(GuiFluidPatternTerminalEx.class, ident);
|
||||
API.registerGuiOverlay(GuiFluidPatternExWireless.class, ident);
|
||||
|
||||
API.registerGuiOverlayHandler(
|
||||
GuiFluidPatternTerminalEx.class,
|
||||
NEEPatternTerminalHandler.instance,
|
||||
ident);
|
||||
API.registerGuiOverlayHandler(
|
||||
GuiFluidPatternExWireless.class,
|
||||
NEEPatternTerminalHandler.instance,
|
||||
ident);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void installFluidPatternTerminalSupport(Set<String> identifiers) {
|
||||
if (Loader.isModLoaded(ModIDs.FC)) {
|
||||
for (String ident : identifiers) {
|
||||
API.registerGuiOverlay(GuiFluidPatternTerminal.class, ident);
|
||||
API.registerGuiOverlay(GuiFluidPatternWireless.class, ident);
|
||||
|
||||
API.registerGuiOverlayHandler(GuiFluidPatternTerminal.class, NEEPatternTerminalHandler.instance, ident);
|
||||
API.registerGuiOverlayHandler(GuiFluidPatternWireless.class, NEEPatternTerminalHandler.instance, ident);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void installlBookmarkContainerHandler() {
|
||||
API.registerBookmarkContainerHandler(GuiPatternTerm.class, NEETerminalBookmarkContainerHandler.instance);
|
||||
API.registerBookmarkContainerHandler(GuiPatternTermEx.class, NEETerminalBookmarkContainerHandler.instance);
|
||||
@@ -128,25 +87,6 @@ public class NEINeeConfig implements IConfigureNEI {
|
||||
API.registerBookmarkContainerHandler(GuiMEMonitorable.class, NEETerminalBookmarkContainerHandler.instance);
|
||||
API.registerBookmarkContainerHandler(GuiMEPortableCell.class, NEETerminalBookmarkContainerHandler.instance);
|
||||
|
||||
if (Loader.isModLoaded(ModIDs.FC)) {
|
||||
API.registerBookmarkContainerHandler(
|
||||
GuiFluidPatternWireless.class,
|
||||
NEETerminalBookmarkContainerHandler.instance);
|
||||
API.registerBookmarkContainerHandler(
|
||||
GuiFluidPatternTerminal.class,
|
||||
NEETerminalBookmarkContainerHandler.instance);
|
||||
API.registerBookmarkContainerHandler(
|
||||
GuiFluidPatternTerminalEx.class,
|
||||
NEETerminalBookmarkContainerHandler.instance);
|
||||
API.registerBookmarkContainerHandler(
|
||||
GuiFluidPatternExWireless.class,
|
||||
NEETerminalBookmarkContainerHandler.instance);
|
||||
|
||||
API.registerBookmarkContainerHandler(
|
||||
GuiFluidCraftingWireless.class,
|
||||
NEETerminalBookmarkContainerHandler.instance);
|
||||
}
|
||||
|
||||
if (Loader.isModLoaded(ModIDs.WCT)) {
|
||||
API.registerBookmarkContainerHandler(
|
||||
GuiWirelessCraftingTerminal.class,
|
||||
@@ -214,17 +154,6 @@ public class NEINeeConfig implements IConfigureNEI {
|
||||
API.registerGuiOverlay(GuiCraftingTerm.class, "crafting2x2");
|
||||
API.registerGuiOverlayHandler(GuiCraftingTerm.class, NEECraftingTerminalHandler.instance, "crafting");
|
||||
API.registerGuiOverlayHandler(GuiCraftingTerm.class, NEECraftingTerminalHandler.instance, "crafting2x2");
|
||||
|
||||
if (Loader.isModLoaded(ModIDs.FC)) {
|
||||
API.registerGuiOverlayHandler(
|
||||
GuiFluidCraftingWireless.class,
|
||||
NEECraftingTerminalHandler.instance,
|
||||
"crafting");
|
||||
API.registerGuiOverlayHandler(
|
||||
GuiFluidCraftingWireless.class,
|
||||
NEECraftingTerminalHandler.instance,
|
||||
"crafting2x2");
|
||||
}
|
||||
}
|
||||
|
||||
private void installWirelessCraftingTermSupport() {
|
||||
|
||||
@@ -44,6 +44,7 @@ import appeng.api.networking.ticking.TickRateModulation;
|
||||
import appeng.api.networking.ticking.TickingRequest;
|
||||
import appeng.api.storage.IMEMonitor;
|
||||
import appeng.api.storage.data.IAEItemStack;
|
||||
import appeng.api.storage.data.IAEStack;
|
||||
import appeng.api.storage.data.IItemList;
|
||||
import appeng.api.util.AECableType;
|
||||
import appeng.api.util.DimensionalCoord;
|
||||
@@ -434,9 +435,9 @@ public class TilePatternInterface extends AENetworkInvTile
|
||||
|
||||
for (ICraftingCPU cpu : cpuSet) {
|
||||
if (cpu instanceof CraftingCPUCluster cluster) {
|
||||
final IItemList<IAEItemStack> pendingList = AEApi.instance().storage().createItemList();
|
||||
cluster.getListOfItem(pendingList, CraftingItemList.PENDING);
|
||||
for (IAEItemStack pendingStack : pendingList) {
|
||||
final IItemList<IAEStack<?>> pendingList = AEApi.instance().storage().createAEStackList();
|
||||
cluster.getModernListOfItem(pendingList, CraftingItemList.PENDING);
|
||||
for (IAEStack<?> pendingStack : pendingList) {
|
||||
if (pendingStack.isSameType(result)) {
|
||||
cluster.cancel();
|
||||
break;
|
||||
@@ -667,15 +668,15 @@ public class TilePatternInterface extends AENetworkInvTile
|
||||
try {
|
||||
final ICraftingGrid cg = this.getProxy().getCrafting();
|
||||
final ImmutableSet<ICraftingCPU> cpuSet = cg.getCpus();
|
||||
final IItemList<IAEItemStack> pendingList = AEApi.instance().storage().createItemList();
|
||||
final IItemList<IAEStack<?>> pendingList = AEApi.instance().storage().createAEStackList();
|
||||
|
||||
for (ICraftingCPU cpu : cpuSet) {
|
||||
if (cpu instanceof CraftingCPUCluster cluster) {
|
||||
cluster.getListOfItem(pendingList, CraftingItemList.PENDING);
|
||||
cluster.getModernListOfItem(pendingList, CraftingItemList.PENDING);
|
||||
}
|
||||
}
|
||||
|
||||
for (IAEItemStack pendingStack : pendingList) {
|
||||
for (IAEStack<?> pendingStack : pendingList) {
|
||||
if (pendingStack.isSameType(stack)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -32,16 +32,15 @@ import com.github.vfyjxf.nee.network.NEENetworkHandler;
|
||||
import com.github.vfyjxf.nee.network.packet.PacketSlotStackChange;
|
||||
import com.github.vfyjxf.nee.network.packet.PacketStackCountChange;
|
||||
import com.github.vfyjxf.nee.network.packet.PacketValueConfigServer;
|
||||
import com.github.vfyjxf.nee.utils.GuiUtils;
|
||||
import com.github.vfyjxf.nee.utils.ItemUtils;
|
||||
import com.github.vfyjxf.nee.utils.ModIDs;
|
||||
import com.glodblock.github.client.gui.GuiLevelMaintainer;
|
||||
import com.glodblock.github.client.gui.base.FCGuiEncodeTerminal;
|
||||
import com.glodblock.github.client.gui.container.base.FCContainerEncodeTerminal;
|
||||
|
||||
import appeng.api.events.GuiScrollEvent;
|
||||
import appeng.api.storage.data.IAEStack;
|
||||
import appeng.client.gui.AEBaseGui;
|
||||
import appeng.client.gui.implementations.GuiInterface;
|
||||
import appeng.client.gui.implementations.GuiPatternTerm;
|
||||
import appeng.client.gui.slots.VirtualMEPatternSlot;
|
||||
import appeng.container.AEBaseContainer;
|
||||
import appeng.container.implementations.ContainerPatternTerm;
|
||||
import appeng.container.slot.SlotFake;
|
||||
@@ -97,10 +96,6 @@ public class GuiEventHandler extends INEIGuiAdapter implements IContainerTooltip
|
||||
private boolean isGuiPatternTerm(GuiScreen guiScreen) {
|
||||
if (guiScreen instanceof GuiContainer guiContainer) {
|
||||
|
||||
if (Loader.isModLoaded(ModIDs.FC) && guiContainer instanceof FCGuiEncodeTerminal) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return RecipeInfo.getOverlayHandler(guiContainer, "crafting") instanceof NEEPatternTerminalHandler
|
||||
|| RecipeInfo.getOverlayHandler(guiContainer, "smelting") instanceof NEEPatternTerminalHandler;
|
||||
}
|
||||
@@ -179,8 +174,6 @@ public class GuiEventHandler extends INEIGuiAdapter implements IContainerTooltip
|
||||
|
||||
if (container instanceof ContainerPatternTerm) {
|
||||
return ((ContainerPatternTerm) container).isCraftingMode();
|
||||
} else if (Loader.isModLoaded(ModIDs.FC) && container instanceof FCContainerEncodeTerminal) {
|
||||
return ((FCContainerEncodeTerminal) container).isCraftingMode();
|
||||
}
|
||||
|
||||
return false;
|
||||
@@ -244,16 +237,15 @@ public class GuiEventHandler extends INEIGuiAdapter implements IContainerTooltip
|
||||
@SubscribeEvent
|
||||
public boolean handleMouseWheelInput(GuiScrollEvent event) {
|
||||
Minecraft mc = Minecraft.getMinecraft();
|
||||
Slot currentSlot = getFakeSlotAtPosition((GuiContainer) mc.currentScreen, event.mouseX, event.mouseY);
|
||||
|
||||
if (currentSlot != null) {
|
||||
// try to change current itemstack to next ingredient;
|
||||
if (NEIClientConfig.isKeyHashDown("nee.ingredient") && GuiUtils.isCraftingSlot(currentSlot)) {
|
||||
handleRecipeIngredientChange(event.guiScreen, currentSlot, event.scrollAmount);
|
||||
if (mc.currentScreen instanceof GuiPatternTerm gpt
|
||||
&& gpt.getVirtualMESlotUnderMouse() instanceof VirtualMEPatternSlot slot) {
|
||||
if (NEIClientConfig.isKeyHashDown("nee.ingredient")) {
|
||||
handleRecipeIngredientChange(gpt, slot, event.scrollAmount);
|
||||
return true;
|
||||
} else if (NEIClientConfig.isKeyHashDown("nee.count")) {
|
||||
NEENetworkHandler.getInstance()
|
||||
.sendToServer(new PacketStackCountChange(currentSlot.slotNumber, event.scrollAmount));
|
||||
NEENetworkHandler.getInstance().sendToServer(
|
||||
new PacketStackCountChange(slot.getSlotIndex(), slot.getStorageName(), event.scrollAmount));
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -326,46 +318,39 @@ public class GuiEventHandler extends INEIGuiAdapter implements IContainerTooltip
|
||||
return null;
|
||||
}
|
||||
|
||||
private void handleRecipeIngredientChange(GuiContainer gui, Slot currentSlot, int dWheel) {
|
||||
private void handleRecipeIngredientChange(GuiPatternTerm gui, VirtualMEPatternSlot currentSlot, int dWheel) {
|
||||
final int currentSlotIndex = currentSlot.getSlotIndex();
|
||||
final PositionedStack currentIngredients = NEEPatternTerminalHandler.ingredients
|
||||
.get(INPUT_KEY + currentSlotIndex);
|
||||
|
||||
if (currentIngredients != null && currentIngredients.items.length > 1) {
|
||||
final IAEStack<?> aes = currentSlot.getAEStack();
|
||||
if (aes == null) return;
|
||||
final ItemStack slotStack = aes.getItemStackForNEI();
|
||||
if (slotStack == null) return;
|
||||
final List<Integer> craftingSlots = new ArrayList<>();
|
||||
final List<ItemStack> items = currentIngredients.getFilteredPermutations();
|
||||
final int currentStackIndex = ItemUtils.getPermutationIndex(currentSlot.getStack(), items);
|
||||
final int currentStackIndex = ItemUtils.getPermutationIndex(slotStack, items);
|
||||
final ItemStack nextStack = items.get((items.size() - dWheel + currentStackIndex) % items.size());
|
||||
final ItemStack currentStack = currentIngredients.item;
|
||||
|
||||
if (NEEConfig.allowSynchronousSwitchIngredient) {
|
||||
for (Slot slot : getCraftingSlots(gui)) {
|
||||
for (VirtualMEPatternSlot slot : gui.getCraftingSlots()) {
|
||||
final PositionedStack slotIngredients = NEEPatternTerminalHandler.ingredients
|
||||
.get(INPUT_KEY + slot.getSlotIndex());
|
||||
|
||||
if (slotIngredients != null && slotIngredients.containsWithNBT(nextStack)
|
||||
&& NEIServerUtils.areStacksSameTypeCraftingWithNBT(slotIngredients.item, currentStack)) {
|
||||
slotIngredients.setPermutationToRender(nextStack);
|
||||
craftingSlots.add(slot.slotNumber);
|
||||
craftingSlots.add(slot.getSlotIndex());
|
||||
}
|
||||
}
|
||||
} else {
|
||||
currentIngredients.setPermutationToRender(nextStack);
|
||||
craftingSlots.add(currentSlot.slotNumber);
|
||||
craftingSlots.add(currentSlot.getSlotIndex());
|
||||
}
|
||||
|
||||
NEENetworkHandler.getInstance().sendToServer(new PacketSlotStackChange(nextStack, craftingSlots));
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
private static List<Slot> getCraftingSlots(GuiContainer gui) {
|
||||
List<Slot> craftingSlots = new ArrayList<>();
|
||||
for (Slot slot : (List<Slot>) gui.inventorySlots.inventorySlots) {
|
||||
if (GuiUtils.isCraftingSlot(slot)) {
|
||||
craftingSlots.add(slot);
|
||||
}
|
||||
}
|
||||
return craftingSlots;
|
||||
}
|
||||
}
|
||||
@@ -24,8 +24,6 @@ import com.github.vfyjxf.nee.utils.Ingredient;
|
||||
import com.github.vfyjxf.nee.utils.IngredientTracker;
|
||||
import com.github.vfyjxf.nee.utils.ItemUtils;
|
||||
import com.github.vfyjxf.nee.utils.ModIDs;
|
||||
import com.glodblock.github.client.gui.GuiFluidCraftAmount;
|
||||
import com.glodblock.github.client.gui.base.FCGuiAmount;
|
||||
|
||||
import appeng.api.storage.data.IAEItemStack;
|
||||
import appeng.client.gui.implementations.GuiAmount;
|
||||
@@ -153,9 +151,6 @@ public class NEECraftingPreviewHandler {
|
||||
|
||||
if (this.modID.equals(ModIDs.ThE)) {
|
||||
sendToArcaneCraftingerver(aeItemStack);
|
||||
} else if (this.modID.equals(ModIDs.FC)) {
|
||||
((AEBaseContainer) firstGui.inventorySlots).setTargetStack(aeItemStack);
|
||||
sendToFluidCraftingServer();
|
||||
} else if (this.modID.equals(ModIDs.WCT)) {
|
||||
((AEBaseContainer) firstGui.inventorySlots).setTargetStack(aeItemStack);
|
||||
sendToWirelessCraftingServer();
|
||||
@@ -172,15 +167,6 @@ public class NEECraftingPreviewHandler {
|
||||
.sendAutoCraft(Minecraft.getMinecraft().thePlayer, aeItemStack);
|
||||
}
|
||||
|
||||
@Optional.Method(modid = ModIDs.FC)
|
||||
protected void sendToFluidCraftingServer() {
|
||||
com.glodblock.github.network.CPacketInventoryAction packet = new com.glodblock.github.network.CPacketInventoryAction(
|
||||
InventoryAction.AUTO_CRAFT,
|
||||
0,
|
||||
0L);
|
||||
com.glodblock.github.FluidCraft.proxy.netHandler.sendToServer(packet);
|
||||
}
|
||||
|
||||
@Optional.Method(modid = ModIDs.WCT)
|
||||
protected void sendToWirelessCraftingServer() {
|
||||
net.p455w0rd.wirelesscraftingterminal.core.sync.packets.PacketInventoryAction packet = new net.p455w0rd.wirelesscraftingterminal.core.sync.packets.PacketInventoryAction(
|
||||
@@ -196,8 +182,7 @@ public class NEECraftingPreviewHandler {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!this.isRequesting && (event.gui instanceof GuiCraftAmount
|
||||
|| Loader.isModLoaded(ModIDs.FC) && event.gui instanceof GuiFluidCraftAmount)) {
|
||||
if (!this.isRequesting && event.gui instanceof GuiCraftAmount) {
|
||||
this.isRequesting = true;
|
||||
return;
|
||||
}
|
||||
@@ -298,14 +283,7 @@ public class NEECraftingPreviewHandler {
|
||||
private static int getCraftAmount(GuiContainer screen, GuiButton button) {
|
||||
|
||||
try {
|
||||
if (Loader.isModLoaded(ModIDs.FC) && screen instanceof GuiFluidCraftAmount gui) {
|
||||
|
||||
if (ReflectionHelper.getPrivateValue(FCGuiAmount.class, gui, "submit") == button) {
|
||||
return (int) ReflectionHelper.findMethod(FCGuiAmount.class, gui, new String[] { "getAmount" })
|
||||
.invoke(gui);
|
||||
}
|
||||
|
||||
} else if (screen instanceof GuiCraftAmount gui) {
|
||||
if (screen instanceof GuiCraftAmount gui) {
|
||||
|
||||
if (ReflectionHelper.getPrivateValue(GuiAmount.class, gui, "nextBtn") == button) {
|
||||
return (int) ReflectionHelper.findMethod(GuiAmount.class, gui, new String[] { "getAmount" })
|
||||
|
||||
@@ -20,12 +20,9 @@ import com.github.vfyjxf.nee.network.NEENetworkHandler;
|
||||
import com.github.vfyjxf.nee.network.packet.PacketNEIPatternRecipe;
|
||||
import com.github.vfyjxf.nee.processor.IRecipeProcessor;
|
||||
import com.github.vfyjxf.nee.processor.RecipeProcessor;
|
||||
import com.github.vfyjxf.nee.utils.GuiUtils;
|
||||
import com.github.vfyjxf.nee.utils.Ingredient;
|
||||
import com.github.vfyjxf.nee.utils.IngredientTracker;
|
||||
import com.github.vfyjxf.nee.utils.ItemUtils;
|
||||
import com.github.vfyjxf.nee.utils.ModIDs;
|
||||
import com.glodblock.github.nei.FluidPatternTerminalRecipeTransferHandler;
|
||||
|
||||
import appeng.util.Platform;
|
||||
import codechicken.nei.NEIServerUtils;
|
||||
@@ -36,8 +33,6 @@ import codechicken.nei.recipe.GuiRecipe;
|
||||
import codechicken.nei.recipe.GuiRecipeButton;
|
||||
import codechicken.nei.recipe.IRecipeHandler;
|
||||
import codechicken.nei.recipe.TemplateRecipeHandler;
|
||||
import cpw.mods.fml.common.Loader;
|
||||
import cpw.mods.fml.common.Optional;
|
||||
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
|
||||
|
||||
/**
|
||||
@@ -66,11 +61,6 @@ public class NEEPatternTerminalHandler implements IOverlayHandler {
|
||||
|
||||
NEENetworkHandler.getInstance().sendToServer(packRecipe(handler, recipeIndex, multiplier));
|
||||
|
||||
if (Loader.isModLoaded(ModIDs.FC)
|
||||
&& (GuiUtils.isFluidCraftPatternTermEx(gui) || GuiUtils.isFluidCraftPatternTerm(gui))) {
|
||||
fluidCraftOverlayRecipe(gui, handler, recipeIndex);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -86,11 +76,6 @@ public class NEEPatternTerminalHandler implements IOverlayHandler {
|
||||
return itemPresenceSlots;
|
||||
}
|
||||
|
||||
@Optional.Method(modid = ModIDs.FC)
|
||||
private void fluidCraftOverlayRecipe(GuiContainer firstGui, IRecipeHandler recipe, int recipeIndex) {
|
||||
FluidPatternTerminalRecipeTransferHandler.INSTANCE.overlayRecipe(firstGui, recipe, recipeIndex, true);
|
||||
}
|
||||
|
||||
private PacketNEIPatternRecipe packRecipe(IRecipeHandler recipe, int recipeIndex, int multiplier) {
|
||||
if (isCraftingTableRecipe(recipe)) {
|
||||
return packCraftingTableRecipe(recipe, recipeIndex);
|
||||
|
||||
@@ -1,10 +1,8 @@
|
||||
package com.github.vfyjxf.nee.nei;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import net.minecraft.client.gui.inventory.GuiContainer;
|
||||
import net.minecraft.client.resources.I18n;
|
||||
|
||||
import org.lwjgl.opengl.GL11;
|
||||
|
||||
@@ -20,7 +18,6 @@ import codechicken.nei.recipe.GuiOverlayButton;
|
||||
import codechicken.nei.recipe.GuiRecipe;
|
||||
import codechicken.nei.recipe.GuiRecipeButton;
|
||||
import codechicken.nei.recipe.RecipeHandlerRef;
|
||||
import codechicken.nei.util.NEIMouseUtils;
|
||||
|
||||
public class NEETerminalOverlayButton extends GuiOverlayButton {
|
||||
|
||||
@@ -104,38 +101,6 @@ public class NEETerminalOverlayButton extends GuiOverlayButton {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, String> handleHotkeys(GuiContainer gui, int mousex, int mousey, Map<String, String> hotkeys) {
|
||||
hotkeys = super.handleHotkeys(gui, mousex, mousey, hotkeys);
|
||||
|
||||
if (ingredientsOverlay().stream().allMatch(
|
||||
state -> state.isPresent()
|
||||
|| state instanceof NEEItemOverlayState overlayState && showCraftingHotkeys(overlayState))) {
|
||||
|
||||
if (NEECraftingPreviewHandler.instance
|
||||
.canCraftRecipeResult(gui, this.handlerRef.handler, handlerRef.recipeIndex)) {
|
||||
hotkeys.put(
|
||||
NEIClientConfig.getKeyName("nee.preview", 0, NEIMouseUtils.MOUSE_BTN_LMB),
|
||||
I18n.format("neenergistics.gui.tooltip.crafting.preview.result"));
|
||||
|
||||
hotkeys.put(
|
||||
NEIClientConfig.getKeyName("nee.nopreview", 0, NEIMouseUtils.MOUSE_BTN_LMB),
|
||||
I18n.format("neenergistics.gui.tooltip.crafting.nopreview.result"));
|
||||
} else {
|
||||
hotkeys.put(
|
||||
NEIClientConfig.getKeyName("nee.preview", 0, NEIMouseUtils.MOUSE_BTN_LMB),
|
||||
I18n.format("neenergistics.gui.tooltip.crafting.preview"));
|
||||
|
||||
hotkeys.put(
|
||||
NEIClientConfig.getKeyName("nee.nopreview", 0, NEIMouseUtils.MOUSE_BTN_LMB),
|
||||
I18n.format("neenergistics.gui.tooltip.crafting.nopreview"));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return hotkeys;
|
||||
}
|
||||
|
||||
private static boolean showCraftingHotkeys(NEEItemOverlayState button) {
|
||||
return button.getIngredient().isCraftable() || !button.getIngredient().requiresToCraft();
|
||||
}
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
package com.github.vfyjxf.nee.network.packet;
|
||||
|
||||
import java.util.Objects;
|
||||
import java.util.concurrent.Future;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
@@ -9,17 +8,10 @@ import net.minecraft.entity.player.EntityPlayerMP;
|
||||
import net.minecraft.inventory.Container;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.p455w0rd.wirelesscraftingterminal.common.WCTGuiHandler;
|
||||
import net.p455w0rd.wirelesscraftingterminal.reference.Reference;
|
||||
|
||||
import com.github.vfyjxf.nee.block.tile.TilePatternInterface;
|
||||
import com.github.vfyjxf.nee.utils.GuiUtils;
|
||||
import com.github.vfyjxf.nee.utils.ModIDs;
|
||||
import com.glodblock.github.inventory.InventoryHandler;
|
||||
import com.glodblock.github.inventory.gui.GuiType;
|
||||
import com.glodblock.github.inventory.item.IWirelessTerminal;
|
||||
import com.glodblock.github.util.BlockPos;
|
||||
|
||||
import appeng.api.AEApi;
|
||||
import appeng.api.config.CraftingMode;
|
||||
@@ -248,10 +240,6 @@ public class PacketCraftingRequest implements IMessage {
|
||||
} else if (container instanceof AEBaseContainer baseContainer) {
|
||||
if (Loader.isModLoaded(ModIDs.ThE) && this.modID.equals(ModIDs.ThE)) {
|
||||
openTHContainerCraftConfirm(grid, requireToCraftStack, (IActionHost) baseContainer.getTarget(), player);
|
||||
} else if (Loader.isModLoaded(ModIDs.FC) && this.modID.equals(ModIDs.FC)) {
|
||||
openFCContainerCraftConfirm(baseContainer, grid, requireToCraftStack, player);
|
||||
} else if (Loader.isModLoaded(ModIDs.WCT) && this.modID.equals(ModIDs.WCT)) {
|
||||
openWCTContainerCraftConfirm(baseContainer, grid, requireToCraftStack, player);
|
||||
} else {
|
||||
openAEContainerCraftConfirm(baseContainer, grid, requireToCraftStack, player);
|
||||
}
|
||||
@@ -320,47 +308,4 @@ public class PacketCraftingRequest implements IMessage {
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
@Optional.Method(modid = ModIDs.FC)
|
||||
private void openFCContainerCraftConfirm(AEBaseContainer baseContainer, IGrid grid,
|
||||
IAEItemStack requireToCraftStack, EntityPlayerMP player) {
|
||||
|
||||
openContainerCraftConfirm(grid, requireToCraftStack, player, baseContainer.getActionSource(), job -> {
|
||||
final ContainerOpenContext openContext = baseContainer.getOpenContext();
|
||||
final TileEntity tileEntity = openContext.getTile();
|
||||
|
||||
if (tileEntity != null) {
|
||||
InventoryHandler.openGui(
|
||||
player,
|
||||
player.worldObj,
|
||||
new BlockPos(tileEntity),
|
||||
Objects.requireNonNull(openContext.getSide()),
|
||||
GuiType.FLUID_CRAFTING_CONFIRM);
|
||||
} else if (baseContainer.getTarget() instanceof IWirelessTerminal wireless) {
|
||||
InventoryHandler.openGui(
|
||||
player,
|
||||
player.worldObj,
|
||||
new BlockPos(wireless.getInventorySlot(), 0, 0),
|
||||
Objects.requireNonNull(openContext.getSide()),
|
||||
GuiType.FLUID_CRAFTING_CONFIRM_ITEM);
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
@Optional.Method(modid = ModIDs.WCT)
|
||||
private void openWCTContainerCraftConfirm(AEBaseContainer baseContainer, IGrid grid,
|
||||
IAEItemStack requireToCraftStack, EntityPlayerMP player) {
|
||||
|
||||
openContainerCraftConfirm(grid, requireToCraftStack, player, baseContainer.getActionSource(), job -> {
|
||||
final int x = (int) player.posX;
|
||||
final int y = (int) player.posY;
|
||||
final int z = (int) player.posZ;
|
||||
|
||||
WCTGuiHandler.launchGui(Reference.GUI_CRAFT_CONFIRM, player, player.worldObj, x, y, z);
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -7,28 +7,30 @@ import javax.annotation.Nonnull;
|
||||
|
||||
import net.minecraft.entity.player.EntityPlayerMP;
|
||||
import net.minecraft.inventory.Container;
|
||||
import net.minecraft.inventory.IInventory;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
|
||||
import com.github.vfyjxf.nee.utils.GuiUtils;
|
||||
import com.github.vfyjxf.nee.utils.ItemUtils;
|
||||
import com.github.vfyjxf.nee.utils.ModIDs;
|
||||
import com.glodblock.github.client.gui.container.ContainerFluidPatternTerminal;
|
||||
|
||||
import appeng.api.networking.IGrid;
|
||||
import appeng.api.networking.IGridNode;
|
||||
import appeng.api.networking.security.ISecurityGrid;
|
||||
import appeng.api.networking.storage.IStorageGrid;
|
||||
import appeng.api.storage.StorageName;
|
||||
import appeng.api.storage.data.IAEStack;
|
||||
import appeng.container.AEBaseContainer;
|
||||
import appeng.container.implementations.ContainerPatternTerm;
|
||||
import appeng.helpers.IContainerCraftingPacket;
|
||||
import cpw.mods.fml.common.Loader;
|
||||
import appeng.util.item.AEFluidStack;
|
||||
import appeng.util.item.AEItemStack;
|
||||
import codechicken.nei.recipe.StackInfo;
|
||||
import cpw.mods.fml.common.network.ByteBufUtils;
|
||||
import cpw.mods.fml.common.network.simpleimpl.IMessage;
|
||||
import cpw.mods.fml.common.network.simpleimpl.IMessageHandler;
|
||||
import cpw.mods.fml.common.network.simpleimpl.MessageContext;
|
||||
import io.netty.buffer.ByteBuf;
|
||||
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
|
||||
|
||||
public class PacketNEIPatternRecipe implements IMessage {
|
||||
|
||||
@@ -70,7 +72,7 @@ public class PacketNEIPatternRecipe implements IMessage {
|
||||
|
||||
if (message.input != null && GuiUtils.isPatternContainer(container)
|
||||
&& container instanceof IContainerCraftingPacket) {
|
||||
AEBaseContainer baseContainer = (AEBaseContainer) container;
|
||||
ContainerPatternTerm baseContainer = (ContainerPatternTerm) container;
|
||||
setCraftingRecipe(baseContainer, message.output == null);
|
||||
|
||||
if (message.output == null) {
|
||||
@@ -86,9 +88,7 @@ public class PacketNEIPatternRecipe implements IMessage {
|
||||
private void setCraftingRecipe(AEBaseContainer container, boolean craftingMode) {
|
||||
|
||||
if (container instanceof ContainerPatternTerm cpt) {
|
||||
cpt.getPatternTerminal().setCraftingRecipe(craftingMode);
|
||||
} else if (Loader.isModLoaded(ModIDs.FC) && container instanceof ContainerFluidPatternTerminal cfpt) {
|
||||
cfpt.getPatternTerminal().setCraftingRecipe(craftingMode);
|
||||
cpt.setCraftingMode(craftingMode);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -104,9 +104,8 @@ public class PacketNEIPatternRecipe implements IMessage {
|
||||
return matrix;
|
||||
}
|
||||
|
||||
private void craftingRecipe(AEBaseContainer container, PacketNEIPatternRecipe message) {
|
||||
final IContainerCraftingPacket cct = (IContainerCraftingPacket) container;
|
||||
final IGridNode node = cct.getNetworkNode();
|
||||
private void craftingRecipe(ContainerPatternTerm container, PacketNEIPatternRecipe message) {
|
||||
final IGridNode node = container.getNetworkNode();
|
||||
|
||||
if (node == null) {
|
||||
return;
|
||||
@@ -120,22 +119,22 @@ public class PacketNEIPatternRecipe implements IMessage {
|
||||
|
||||
final IStorageGrid inv = grid.getCache(IStorageGrid.class);
|
||||
final ISecurityGrid security = grid.getCache(ISecurityGrid.class);
|
||||
final IInventory craftMatrix = cct.getInventoryByName("crafting");
|
||||
|
||||
if (inv != null && craftMatrix != null && security != null) {
|
||||
final ItemStack[] recipeInput = getMatrix(message.input, INPUT_KEY, craftMatrix.getSizeInventory());
|
||||
if (inv != null && security != null) {
|
||||
var list = new Int2ObjectOpenHashMap<IAEStack<?>>();
|
||||
final ItemStack[] recipeInput = getMatrix(message.input, INPUT_KEY, 9);
|
||||
|
||||
for (int i = 0; i < recipeInput.length; i++) {
|
||||
craftMatrix.setInventorySlotContents(i, recipeInput[i]);
|
||||
IAEStack<?> aes = AEItemStack.create(recipeInput[i]);
|
||||
list.put(i, aes);
|
||||
}
|
||||
|
||||
container.onCraftMatrixChanged(craftMatrix);
|
||||
container.receiveSlotStacks(StorageName.CRAFTING_INPUT, list);
|
||||
}
|
||||
}
|
||||
|
||||
private void processRecipe(AEBaseContainer container, PacketNEIPatternRecipe message) {
|
||||
final IContainerCraftingPacket cct = (IContainerCraftingPacket) container;
|
||||
final IGridNode node = cct.getNetworkNode();
|
||||
private void processRecipe(ContainerPatternTerm container, PacketNEIPatternRecipe message) {
|
||||
final IGridNode node = container.getNetworkNode();
|
||||
|
||||
if (node == null) {
|
||||
return;
|
||||
@@ -149,26 +148,54 @@ public class PacketNEIPatternRecipe implements IMessage {
|
||||
|
||||
final IStorageGrid inv = grid.getCache(IStorageGrid.class);
|
||||
final ISecurityGrid security = grid.getCache(ISecurityGrid.class);
|
||||
final IInventory craftMatrix = cct.getInventoryByName("crafting");
|
||||
final IInventory outputMatrix = cct.getInventoryByName("output");
|
||||
|
||||
if (inv != null && craftMatrix != null && outputMatrix != null && security != null) {
|
||||
final ItemStack[] recipeInput = getMatrix(message.input, INPUT_KEY, craftMatrix.getSizeInventory());
|
||||
final ItemStack[] recipeOutput = getMatrix(message.output, OUTPUT_KEY, outputMatrix.getSizeInventory());
|
||||
if (inv != null && security != null) {
|
||||
var input = new Int2ObjectOpenHashMap<IAEStack<?>>();
|
||||
var output = new Int2ObjectOpenHashMap<IAEStack<?>>();
|
||||
|
||||
final ItemStack[] recipeInput = getMatrix(
|
||||
message.input,
|
||||
INPUT_KEY,
|
||||
container.getPatternInputsWidth() * container.getPatternInputsHeigh()
|
||||
* container.getPatternInputPages());
|
||||
final ItemStack[] recipeOutput = getMatrix(
|
||||
message.output,
|
||||
OUTPUT_KEY,
|
||||
container.getPatternOutputsWidth() * container.getPatternOutputsHeigh()
|
||||
* container.getPatternOutputPages());
|
||||
|
||||
for (int i = 0; i < recipeInput.length; i++) {
|
||||
craftMatrix.setInventorySlotContents(i, recipeInput[i]);
|
||||
final ItemStack nextStack = recipeInput[i];
|
||||
if (nextStack == null) continue;
|
||||
|
||||
final IAEStack<?> aes;
|
||||
if (StackInfo.itemStackToNBT(nextStack).hasKey("gtFluidName")) {
|
||||
aes = AEFluidStack.create(StackInfo.getFluid(nextStack));
|
||||
} else {
|
||||
aes = AEItemStack.create(nextStack);
|
||||
}
|
||||
|
||||
input.put(i, aes);
|
||||
}
|
||||
|
||||
for (int i = 0; i < recipeOutput.length; i++) {
|
||||
outputMatrix.setInventorySlotContents(i, recipeOutput[i]);
|
||||
final ItemStack nextStack = recipeOutput[i];
|
||||
if (nextStack == null) continue;
|
||||
|
||||
IAEStack<?> aes;
|
||||
if (StackInfo.itemStackToNBT(nextStack).hasKey("gtFluidName")) {
|
||||
aes = AEFluidStack.create(StackInfo.getFluid(nextStack));
|
||||
} else {
|
||||
aes = AEItemStack.create(nextStack);
|
||||
}
|
||||
|
||||
output.put(i, aes);
|
||||
}
|
||||
|
||||
container.onCraftMatrixChanged(craftMatrix);
|
||||
container.onCraftMatrixChanged(outputMatrix);
|
||||
container.clear();
|
||||
container.receiveSlotStacks(StorageName.CRAFTING_INPUT, input);
|
||||
container.receiveSlotStacks(StorageName.CRAFTING_OUTPUT, output);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -3,20 +3,21 @@ package com.github.vfyjxf.nee.network.packet;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import net.minecraft.inventory.Container;
|
||||
import net.minecraft.inventory.Slot;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
import com.github.vfyjxf.nee.utils.GuiUtils;
|
||||
import com.github.vfyjxf.nee.utils.ItemUtils;
|
||||
import com.glodblock.github.common.item.ItemFluidPacket;
|
||||
|
||||
import codechicken.nei.recipe.StackInfo;
|
||||
import appeng.api.storage.StorageName;
|
||||
import appeng.api.storage.data.IAEStack;
|
||||
import appeng.container.implementations.ContainerPatternTerm;
|
||||
import appeng.util.item.AEItemStack;
|
||||
import cpw.mods.fml.common.network.ByteBufUtils;
|
||||
import cpw.mods.fml.common.network.simpleimpl.IMessage;
|
||||
import cpw.mods.fml.common.network.simpleimpl.IMessageHandler;
|
||||
import cpw.mods.fml.common.network.simpleimpl.MessageContext;
|
||||
import io.netty.buffer.ByteBuf;
|
||||
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
|
||||
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
|
||||
|
||||
/**
|
||||
* @author vfyjxf
|
||||
@@ -65,21 +66,14 @@ public class PacketSlotStackChange implements IMessage {
|
||||
|
||||
@Override
|
||||
public IMessage onMessage(PacketSlotStackChange message, MessageContext ctx) {
|
||||
Container container = ctx.getServerHandler().playerEntity.openContainer;
|
||||
ItemStack nextStack = message.getStack();
|
||||
if (nextStack != null) {
|
||||
|
||||
if (GuiUtils.isFluidCraftPatternContainer(container)
|
||||
&& StackInfo.itemStackToNBT(nextStack).hasKey("gtFluidName")) {
|
||||
nextStack = ItemFluidPacket.newStack(StackInfo.getFluid(nextStack));
|
||||
}
|
||||
|
||||
for (Integer craftingSlot : message.getCraftingSlots()) {
|
||||
Slot currentSlot = container.getSlot(craftingSlot);
|
||||
if (currentSlot != null) {
|
||||
currentSlot.putStack(nextStack);
|
||||
}
|
||||
final IAEStack<?> nextStack = AEItemStack.create(message.getStack());
|
||||
if (nextStack != null
|
||||
&& ctx.getServerHandler().playerEntity.openContainer instanceof ContainerPatternTerm cpt) {
|
||||
final Int2ObjectMap<IAEStack<?>> temp = new Int2ObjectOpenHashMap<>();
|
||||
for (int craftingSlot : message.getCraftingSlots()) {
|
||||
temp.put(craftingSlot, nextStack);
|
||||
}
|
||||
cpt.receiveSlotStacks(StorageName.CRAFTING_INPUT, temp);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -2,20 +2,16 @@ package com.github.vfyjxf.nee.network.packet;
|
||||
|
||||
import net.minecraft.entity.player.EntityPlayerMP;
|
||||
import net.minecraft.inventory.Container;
|
||||
import net.minecraft.inventory.Slot;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraftforge.fluids.FluidStack;
|
||||
|
||||
import com.github.vfyjxf.nee.utils.GuiUtils;
|
||||
import com.glodblock.github.common.item.ItemFluidPacket;
|
||||
|
||||
import appeng.container.AEBaseContainer;
|
||||
import appeng.api.storage.StorageName;
|
||||
import appeng.api.storage.data.IAEStack;
|
||||
import appeng.container.implementations.ContainerPatternTerm;
|
||||
import codechicken.nei.recipe.StackInfo;
|
||||
import cpw.mods.fml.common.network.simpleimpl.IMessage;
|
||||
import cpw.mods.fml.common.network.simpleimpl.IMessageHandler;
|
||||
import cpw.mods.fml.common.network.simpleimpl.MessageContext;
|
||||
import io.netty.buffer.ByteBuf;
|
||||
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
|
||||
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
|
||||
|
||||
/**
|
||||
* @author vfyjxf
|
||||
@@ -24,12 +20,14 @@ public class PacketStackCountChange implements IMessage {
|
||||
|
||||
private int slotIndex;
|
||||
private int changeCount;
|
||||
private StorageName sn;
|
||||
|
||||
public PacketStackCountChange() {}
|
||||
|
||||
public PacketStackCountChange(int slotIndex, int changeCount) {
|
||||
public PacketStackCountChange(int slotIndex, StorageName sn, int changeCount) {
|
||||
this.slotIndex = slotIndex;
|
||||
this.changeCount = changeCount;
|
||||
this.sn = sn;
|
||||
}
|
||||
|
||||
public int getSlotIndex() {
|
||||
@@ -40,16 +38,22 @@ public class PacketStackCountChange implements IMessage {
|
||||
return changeCount;
|
||||
}
|
||||
|
||||
public StorageName getStorageName() {
|
||||
return sn;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fromBytes(ByteBuf buf) {
|
||||
this.slotIndex = buf.readInt();
|
||||
this.changeCount = buf.readInt();
|
||||
this.sn = StorageName.values()[buf.readInt()];
|
||||
}
|
||||
|
||||
@Override
|
||||
public void toBytes(ByteBuf buf) {
|
||||
buf.writeInt(this.slotIndex);
|
||||
buf.writeInt(this.changeCount);
|
||||
buf.writeInt(this.sn.ordinal());
|
||||
}
|
||||
|
||||
public static final class Handler implements IMessageHandler<PacketStackCountChange, IMessage> {
|
||||
@@ -58,33 +62,21 @@ public class PacketStackCountChange implements IMessage {
|
||||
public IMessage onMessage(PacketStackCountChange message, MessageContext ctx) {
|
||||
EntityPlayerMP player = ctx.getServerHandler().playerEntity;
|
||||
Container container = player.openContainer;
|
||||
if (container instanceof AEBaseContainer) {
|
||||
handleMessage(message, container);
|
||||
if (container instanceof ContainerPatternTerm cpt && !cpt.isCraftingMode()) {
|
||||
handleMessage(message, cpt);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private void handleMessage(PacketStackCountChange message, Container container) {
|
||||
|
||||
if (container instanceof ContainerPatternTerm && ((ContainerPatternTerm) container).isCraftingMode()) {
|
||||
return;
|
||||
}
|
||||
|
||||
Slot currentSlot = container.getSlot(message.getSlotIndex());
|
||||
|
||||
if (currentSlot.getHasStack()) {
|
||||
ItemStack stack = currentSlot.getStack();
|
||||
|
||||
if (GuiUtils.isFluidCraftPatternContainer(container)
|
||||
&& StackInfo.itemStackToNBT(stack).hasKey("gtFluidName")) {
|
||||
FluidStack fluid = StackInfo.getFluid(stack);
|
||||
fluid.amount = Math.max(1, fluid.amount + message.getChangeCount());
|
||||
currentSlot.putStack(ItemFluidPacket.newStack(fluid));
|
||||
} else {
|
||||
stack = stack.copy();
|
||||
stack.stackSize = Math.max(1, stack.stackSize + message.getChangeCount());
|
||||
currentSlot.putStack(stack);
|
||||
}
|
||||
private void handleMessage(PacketStackCountChange message, ContainerPatternTerm cpt) {
|
||||
final IAEStack<?> aes = cpt.getPatternTerminal().getAEInventoryByName(message.getStorageName())
|
||||
.getAEStackInSlot(message.getSlotIndex());
|
||||
if (aes != null) {
|
||||
final IAEStack<?> newAes = aes.copy();
|
||||
final Int2ObjectMap<IAEStack<?>> temp = new Int2ObjectOpenHashMap<>();
|
||||
newAes.setStackSize(Math.max(1, aes.getStackSize()) + message.getChangeCount());
|
||||
temp.put(message.getSlotIndex(), newAes);
|
||||
cpt.receiveSlotStacks(message.getStorageName(), temp);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,15 +9,11 @@ import java.util.stream.Collectors;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraftforge.fluids.Fluid;
|
||||
import net.minecraftforge.fluids.FluidRegistry;
|
||||
import net.minecraftforge.fluids.FluidStack;
|
||||
|
||||
import com.github.vfyjxf.nee.utils.GuiUtils;
|
||||
import com.glodblock.github.client.gui.GuiFluidPatternTerminalEx;
|
||||
|
||||
import codechicken.nei.PositionedStack;
|
||||
import codechicken.nei.recipe.IRecipeHandler;
|
||||
import gregtech.api.enums.ItemList;
|
||||
@@ -103,39 +99,10 @@ public class GregTech5RecipeProcessor implements IRecipeProcessor {
|
||||
public List<PositionedStack> getRecipeInput(IRecipeHandler recipe, int recipeIndex, String identifier) {
|
||||
List<PositionedStack> recipeInputs = new ArrayList<>();
|
||||
if (canProcessRecipe(recipe)) {
|
||||
if (GuiUtils.isFluidCraftPatternTermEx(Minecraft.getMinecraft().currentScreen)) {
|
||||
boolean priority = ((GuiFluidPatternTerminalEx) Minecraft
|
||||
.getMinecraft().currentScreen).container.prioritize;
|
||||
if (priority) {
|
||||
for (PositionedStack ps : recipe.getIngredientStacks(recipeIndex)) {
|
||||
if (ps != null && getFluidFromDisplayStack(ps.item) != null) {
|
||||
recipeInputs.add(ps);
|
||||
}
|
||||
}
|
||||
for (PositionedStack ps : recipe.getIngredientStacks(recipeIndex)) {
|
||||
if (ps != null && getFluidFromDisplayStack(ps.item) == null) {
|
||||
recipeInputs.add(ps);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
recipeInputs.addAll(recipe.getIngredientStacks(recipeIndex));
|
||||
}
|
||||
} else {
|
||||
recipeInputs.addAll(recipe.getIngredientStacks(recipeIndex));
|
||||
recipeInputs.removeIf(
|
||||
positionedStack -> getFluidFromDisplayStack(positionedStack.items[0]) != null
|
||||
|| positionedStack.item.stackSize == 0);
|
||||
}
|
||||
if (!recipeInputs.isEmpty()) {
|
||||
ItemStack specialItem = recipeInputs.get(recipeInputs.size() - 1).items[0];
|
||||
if ((specialItem.isItemEqual(ItemList.Tool_DataStick.get(1))
|
||||
|| specialItem.isItemEqual(ItemList.Tool_DataOrb.get(1))
|
||||
&& (recipe.getRecipeName().equals("gt.recipe.scanner")
|
||||
|| recipe.getRecipeName().equals("gt.recipe.fakeAssemblylineProcess"))))
|
||||
recipeInputs.remove(recipeInputs.size() - 1);
|
||||
}
|
||||
return recipeInputs;
|
||||
recipeInputs.addAll(recipe.getIngredientStacks(recipeIndex));
|
||||
recipeInputs.removeIf(positionedStack -> positionedStack.item.stackSize == 0);
|
||||
}
|
||||
|
||||
return recipeInputs;
|
||||
}
|
||||
|
||||
@@ -145,7 +112,6 @@ public class GregTech5RecipeProcessor implements IRecipeProcessor {
|
||||
List<PositionedStack> recipeOutputs = new ArrayList<>();
|
||||
if (canProcessRecipe(recipe)) {
|
||||
recipeOutputs.addAll(recipe.getOtherStacks(recipeIndex));
|
||||
recipeOutputs.removeIf(positionedStack -> getFluidFromDisplayStack(positionedStack.items[0]) != null);
|
||||
// remove output if it's chance != 10000
|
||||
recipeOutputs.removeIf(
|
||||
stack -> stack instanceof FixedPositionedStack && !(((FixedPositionedStack) stack).mChance == 10000
|
||||
|
||||
@@ -12,22 +12,15 @@ import net.minecraft.inventory.IInventory;
|
||||
import net.minecraft.inventory.Slot;
|
||||
import net.minecraftforge.common.util.ForgeDirection;
|
||||
|
||||
import com.glodblock.github.client.gui.GuiFluidPatternTerminal;
|
||||
import com.glodblock.github.client.gui.GuiFluidPatternTerminalEx;
|
||||
import com.glodblock.github.client.gui.container.ContainerFluidPatternTerminal;
|
||||
import com.glodblock.github.client.gui.container.ContainerFluidPatternTerminalEx;
|
||||
|
||||
import appeng.api.networking.IGrid;
|
||||
import appeng.api.networking.IGridHost;
|
||||
import appeng.api.networking.IGridNode;
|
||||
import appeng.api.storage.data.IAEItemStack;
|
||||
import appeng.api.storage.data.IItemList;
|
||||
import appeng.client.gui.implementations.GuiPatternTerm;
|
||||
import appeng.client.gui.implementations.GuiPatternTermEx;
|
||||
import appeng.client.me.ItemRepo;
|
||||
import appeng.container.AEBaseContainer;
|
||||
import appeng.container.implementations.ContainerPatternTerm;
|
||||
import appeng.container.implementations.ContainerPatternTermEx;
|
||||
import appeng.helpers.IContainerCraftingPacket;
|
||||
import cpw.mods.fml.common.Loader;
|
||||
import cpw.mods.fml.relauncher.ReflectionHelper;
|
||||
@@ -39,8 +32,6 @@ import thaumicenergistics.common.container.ContainerPartArcaneCraftingTerminal;
|
||||
*/
|
||||
public class GuiUtils {
|
||||
|
||||
private static final boolean isFluidCraftModloaded = Loader.isModLoaded(ModIDs.FC);
|
||||
|
||||
public static boolean isCraftingSlot(Slot slot) {
|
||||
if (slot == null) {
|
||||
return false;
|
||||
@@ -54,28 +45,12 @@ public class GuiUtils {
|
||||
return craftMatrix.equals(slot.inventory);
|
||||
}
|
||||
|
||||
public static boolean isFluidCraftPatternContainer(Container container) {
|
||||
return isFluidCraftModloaded && (container instanceof ContainerFluidPatternTerminal
|
||||
|| container instanceof ContainerFluidPatternTerminalEx);
|
||||
}
|
||||
|
||||
public static boolean isPatternContainer(Container container) {
|
||||
return container instanceof ContainerPatternTerm || container instanceof ContainerPatternTermEx
|
||||
|| isFluidCraftPatternContainer(container);
|
||||
}
|
||||
|
||||
public static boolean isFluidCraftPatternTermEx(GuiScreen guiScreen) {
|
||||
return isFluidCraftModloaded && guiScreen instanceof GuiFluidPatternTerminalEx;
|
||||
}
|
||||
|
||||
public static boolean isFluidCraftPatternTerm(GuiScreen guiScreen) {
|
||||
return isFluidCraftModloaded && guiScreen instanceof GuiFluidPatternTerminal;
|
||||
return container instanceof ContainerPatternTerm;
|
||||
}
|
||||
|
||||
public static boolean isPatternTerm(GuiScreen guiScreen) {
|
||||
return guiScreen instanceof GuiPatternTerm || guiScreen instanceof GuiPatternTermEx
|
||||
|| isFluidCraftModloaded && (guiScreen instanceof GuiFluidPatternTerminal
|
||||
|| guiScreen instanceof GuiFluidPatternTerminalEx);
|
||||
return guiScreen instanceof GuiPatternTerm;
|
||||
}
|
||||
|
||||
public static ItemRepo getItemRepo(GuiContainer termGui) {
|
||||
|
||||
Reference in new issue
Block a user