This commit is contained in:
asdflj committed 2023-02-05 16:52:16 +08:00
1 parent ba45bd5606
commit d04aac3b29
4 files changed
+105 -55

No files matched your search

@@ -5,6 +5,8 @@ import net.minecraft.item.ItemStack;
import appeng.tile.inventory.BiggerAppEngInventory;
import appeng.util.Platform;
import com.glodblock.github.inventory.gui.GuiType;
public class ItemBiggerAppEngInventory extends BiggerAppEngInventory {
private final ItemStack is;
@@ -20,7 +22,9 @@ public class ItemBiggerAppEngInventory extends BiggerAppEngInventory {
@Override
public void markDirty() {
boolean isCraft = Platform.openNbtData(is).getBoolean("craftingMode");
if (isCraft) {
boolean isCraftingTerm = Platform.openNbtData(is).getString("mode_main")
.equals(GuiType.WIRELESS_CRAFTING_TERMINAL.toString());
if (!isCraftingTerm && isCraft) {
for (int x = 0; x < this.getSizeInventory(); x++) {
final ItemStack is = this.getStackInSlot(x);
if (is != null) {
@@ -10,6 +10,7 @@ import codechicken.nei.recipe.IRecipeHandler;
import codechicken.nei.recipe.TemplateRecipeHandler;
import com.glodblock.github.FluidCraft;
import com.glodblock.github.client.gui.GuiFluidCraftingWireless;
import com.glodblock.github.client.gui.base.FCGuiEncodeTerminal;
import com.glodblock.github.nei.object.OrderStack;
import com.glodblock.github.nei.recipes.FluidRecipe;
@@ -30,8 +31,9 @@ public class FluidPatternTerminalRecipeTransferHandler implements IOverlayHandle
@Override
public void overlayRecipe(GuiContainer firstGui, IRecipeHandler recipe, int recipeIndex, boolean shift) {
if (firstGui instanceof FCGuiEncodeTerminal) {
boolean priority = ((FCGuiEncodeTerminal) firstGui).container.prioritize;
if (firstGui instanceof FCGuiEncodeTerminal || firstGui instanceof GuiFluidCraftingWireless) {
boolean priority = !(firstGui instanceof GuiFluidCraftingWireless)
&& ((FCGuiEncodeTerminal) firstGui).container.prioritize;
List<OrderStack<?>> in = FluidRecipe.getPackageInputs(recipe, recipeIndex, priority);
List<OrderStack<?>> out = FluidRecipe.getPackageOutputs(recipe, recipeIndex, !notUseOther(recipe));
boolean craft = shouldCraft(recipe);
@@ -2,7 +2,6 @@ package com.glodblock.github.network;
import java.util.Objects;
import com.glodblock.github.inventory.gui.PartOrItemGuiFactory;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.Slot;
import net.minecraft.item.ItemStack;
@@ -18,6 +17,7 @@ import com.glodblock.github.client.gui.container.base.FCContainerEncodeTerminal;
import com.glodblock.github.common.item.ItemFluidPacket;
import com.glodblock.github.inventory.InventoryHandler;
import com.glodblock.github.inventory.gui.GuiType;
import com.glodblock.github.inventory.gui.PartOrItemGuiFactory;
import com.glodblock.github.util.BlockPos;
import com.glodblock.github.util.Util;
@@ -70,25 +70,28 @@ public class CPacketPatternValueSet implements IMessage {
final TileEntity te = context.getTile();
if (te != null) {
InventoryHandler.openGui(
player,
player.worldObj,
new BlockPos(te),
Objects.requireNonNull(context.getSide()),
message.originGui);
player,
player.worldObj,
new BlockPos(te),
Objects.requireNonNull(context.getSide()),
message.originGui);
} else if (message.originGui.guiFactory instanceof PartOrItemGuiFactory) {
InventoryHandler.openGui(
player,
player.worldObj,
new BlockPos(player.inventory.currentItem, Util.GuiHelper.encodeType(0, Util.GuiHelper.GuiType.ITEM), 0),
Objects.requireNonNull(context.getSide()),
message.originGui);
player,
player.worldObj,
new BlockPos(
player.inventory.currentItem,
Util.GuiHelper.encodeType(0, Util.GuiHelper.GuiType.ITEM),
0),
Objects.requireNonNull(context.getSide()),
message.originGui);
} else {
InventoryHandler.openGui(
player,
player.worldObj,
new BlockPos(player.inventory.currentItem, 0, 0),
Objects.requireNonNull(context.getSide()),
message.originGui);
player,
player.worldObj,
new BlockPos(player.inventory.currentItem, 0, 0),
Objects.requireNonNull(context.getSide()),
message.originGui);
}
if (player.openContainer instanceof FCContainerEncodeTerminal) {
Slot slot = player.openContainer.getSlot(message.valueIndex);
@@ -12,11 +12,14 @@ import net.minecraft.nbt.NBTTagCompound;
import net.minecraftforge.fluids.FluidStack;
import appeng.api.AEApi;
import appeng.api.config.Actionable;
import appeng.api.config.FuzzyMode;
import appeng.api.storage.ITerminalHost;
import appeng.api.storage.data.IAEItemStack;
import appeng.api.storage.data.IItemList;
import com.glodblock.github.client.gui.container.ContainerCraftingWireless;
import com.glodblock.github.client.gui.container.ContainerItemMonitor;
import com.glodblock.github.client.gui.container.base.FCContainerEncodeTerminal;
import com.glodblock.github.common.item.ItemFluidPacket;
import com.glodblock.github.nei.NEIUtils;
@@ -95,9 +98,8 @@ public class CPacketTransferRecipe implements IMessage {
@SuppressWarnings("unchecked")
public IMessage onMessage(CPacketTransferRecipe message, MessageContext ctx) {
Container c = ctx.getServerHandler().playerEntity.openContainer;
if (c instanceof FCContainerEncodeTerminal) {
FCContainerEncodeTerminal cf = (FCContainerEncodeTerminal) c;
ITerminalHost host = cf.getHost();
if (c instanceof ContainerItemMonitor) {
ITerminalHost host = ((ContainerItemMonitor) c).getHost();
IItemList<IAEItemStack> storageList;
if (host != null) {
storageList = host.getItemInventory().getStorageList();
@@ -105,46 +107,85 @@ public class CPacketTransferRecipe implements IMessage {
storageList = AEApi.instance().storage().createItemList();
}
boolean combine = cf.combine;
cf.getPatternTerminal().setCraftingRecipe(message.isCraft);
IInventory inputSlot = cf.getInventoryByName("crafting");
IInventory outputSlot = cf.getInventoryByName("output");
for (int i = 0; i < inputSlot.getSizeInventory(); i++) {
inputSlot.setInventorySlotContents(i, null);
}
for (int i = 0; i < outputSlot.getSizeInventory(); i++) {
outputSlot.setInventorySlotContents(i, null);
}
if (c instanceof ContainerCraftingWireless && host != null) {
// crafting terminal only
ContainerCraftingWireless cf = (ContainerCraftingWireless) c;
if (!message.isCraft) {
if (combine) {
message.inputs = NEIUtils.compress(message.inputs);
message.outputs = NEIUtils.compress(message.outputs);
IInventory inputSlot = cf.getInventoryByName("crafting");
if (!storageList.isEmpty()) {
int i = 0;
for (OrderStack stack : message.inputs) {
if (inputSlot.getStackInSlot(i) == null) {
ItemStack is = (ItemStack) stack.getStack();
IAEItemStack iaeItemStack = AEApi.instance().storage().createItemStack(is);
IAEItemStack storedItem = storageList.findPrecise(iaeItemStack);
if (storedItem == null) {
for (IAEItemStack tmp : storageList.findFuzzy(iaeItemStack, FuzzyMode.IGNORE_ALL)) {
tmp.setStackSize(is.stackSize);
ItemStack substitute = tmp.getItemStack().copy();
inputSlot.setInventorySlotContents(i, substitute);
host.getItemInventory()
.extractItems(tmp, Actionable.MODULATE, cf.getActionSource());
break;
}
} else {
host.getItemInventory()
.extractItems(iaeItemStack, Actionable.MODULATE, cf.getActionSource());
inputSlot.setInventorySlotContents(i, is);
}
}
i++;
}
}
message.inputs = NEIUtils.clearNull(message.inputs);
message.outputs = NEIUtils.clearNull(message.outputs);
}
// using exists item to fill slot
if (message.shift && !storageList.isEmpty()) {
for (OrderStack stack : message.inputs) {
if (stack.getStack() instanceof FluidStack) continue;
ItemStack is = (ItemStack) stack.getStack();
IAEItemStack iaeItemStack = AEApi.instance().storage().createItemStack(is);
if (storageList.findPrecise(iaeItemStack) == null) {
for (IAEItemStack tmp : storageList.findFuzzy(iaeItemStack, FuzzyMode.IGNORE_ALL)) {
ItemStack substitute = tmp.getItemStack().copy();
substitute.stackSize = is.stackSize;
stack.putStack(substitute);
break;
c.onCraftMatrixChanged(inputSlot);
} else if (c instanceof FCContainerEncodeTerminal) {
// pattern terminal only
FCContainerEncodeTerminal cf = (FCContainerEncodeTerminal) c;
boolean combine = cf.combine;
cf.getPatternTerminal().setCraftingRecipe(message.isCraft);
IInventory inputSlot = cf.getInventoryByName("crafting");
IInventory outputSlot = cf.getInventoryByName("output");
for (int i = 0; i < inputSlot.getSizeInventory(); i++) {
inputSlot.setInventorySlotContents(i, null);
}
for (int i = 0; i < outputSlot.getSizeInventory(); i++) {
outputSlot.setInventorySlotContents(i, null);
}
if (!message.isCraft) {
if (combine) {
message.inputs = NEIUtils.compress(message.inputs);
message.outputs = NEIUtils.compress(message.outputs);
}
message.inputs = NEIUtils.clearNull(message.inputs);
message.outputs = NEIUtils.clearNull(message.outputs);
}
// using exists item to fill slot
if (message.shift && !storageList.isEmpty()) {
for (OrderStack stack : message.inputs) {
if (stack.getStack() instanceof FluidStack) continue;
ItemStack is = (ItemStack) stack.getStack();
IAEItemStack iaeItemStack = AEApi.instance().storage().createItemStack(is);
if (storageList.findPrecise(iaeItemStack) == null) {
for (IAEItemStack tmp : storageList.findFuzzy(iaeItemStack, FuzzyMode.IGNORE_ALL)) {
ItemStack substitute = tmp.getItemStack().copy();
substitute.stackSize = is.stackSize;
stack.putStack(substitute);
break;
}
}
}
}
transferPack(message.inputs, inputSlot);
transferPack(message.outputs, outputSlot);
c.onCraftMatrixChanged(inputSlot);
c.onCraftMatrixChanged(outputSlot);
}
transferPack(message.inputs, inputSlot);
transferPack(message.outputs, outputSlot);
c.onCraftMatrixChanged(inputSlot);
c.onCraftMatrixChanged(outputSlot);
}
return null;
}