From ccf916d17d0008c5e9762f7b4ddf1b5b3f85be68 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Tue, 29 Mar 2016 13:02:22 +0200 Subject: [PATCH] Start working on recipe transfer handlers in grid.. --- .../jei/GridRecipeTransferHandler.java | 65 +++++++++++++++++++ .../jei/PluginRefinedStorage.java | 3 +- .../network/MessageGridCraftingTransfer.java | 33 ++++++++++ .../refinedstorage/proxy/CommonProxy.java | 1 + .../refinedstorage/util/InventoryUtils.java | 1 - 5 files changed, 101 insertions(+), 2 deletions(-) create mode 100755 src/main/java/refinedstorage/jei/GridRecipeTransferHandler.java create mode 100755 src/main/java/refinedstorage/network/MessageGridCraftingTransfer.java diff --git a/src/main/java/refinedstorage/jei/GridRecipeTransferHandler.java b/src/main/java/refinedstorage/jei/GridRecipeTransferHandler.java new file mode 100755 index 000000000..51ba42c3b --- /dev/null +++ b/src/main/java/refinedstorage/jei/GridRecipeTransferHandler.java @@ -0,0 +1,65 @@ +package refinedstorage.jei; + +import mezz.jei.api.gui.IRecipeLayout; +import mezz.jei.api.recipe.transfer.IRecipeTransferError; +import mezz.jei.api.recipe.transfer.IRecipeTransferHandler; +import mezz.jei.gui.ingredients.IGuiIngredient; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.InventoryCrafting; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import refinedstorage.RefinedStorage; +import refinedstorage.container.ContainerGrid; +import refinedstorage.network.MessageGridCraftingTransfer; + +import java.util.List; +import java.util.Map; + +// Thanks to https://github.com/zerofall/EZStorage/blob/master/src/main/java/com/zerofall/ezstorage/jei/RecipeTransferHandler.java +public class GridRecipeTransferHandler implements IRecipeTransferHandler { + @Override + public Class getContainerClass() { + return ContainerGrid.class; + } + + @Override + public String getRecipeCategoryUid() { + return "minecraft.crafting"; + } + + @Override + public IRecipeTransferError transferRecipe(Container container, IRecipeLayout recipeLayout, EntityPlayer player, boolean maxTransfer, boolean doTransfer) { + if (doTransfer) { + Map> inputs = recipeLayout.getItemStacks().getGuiIngredients(); + + NBTTagCompound recipe = new NBTTagCompound(); + + for (Slot slot : container.inventorySlots) { + if (slot.inventory instanceof InventoryCrafting) { + IGuiIngredient ingredient = inputs.get(slot.getSlotIndex() + 1); + + if (ingredient != null) { + List possibleItems = ingredient.getAllIngredients(); + + NBTTagList tags = new NBTTagList(); + + for (ItemStack stack : possibleItems) { + NBTTagCompound tag = new NBTTagCompound(); + stack.writeToNBT(tag); + tags.appendTag(tag); + } + + recipe.setTag("#" + slot.getSlotIndex(), tags); + } + } + } + + RefinedStorage.NETWORK.sendToServer(new MessageGridCraftingTransfer(recipe)); + } + + return null; + } +} diff --git a/src/main/java/refinedstorage/jei/PluginRefinedStorage.java b/src/main/java/refinedstorage/jei/PluginRefinedStorage.java index 238d00bbd..216a3b9ff 100755 --- a/src/main/java/refinedstorage/jei/PluginRefinedStorage.java +++ b/src/main/java/refinedstorage/jei/PluginRefinedStorage.java @@ -13,7 +13,8 @@ import refinedstorage.tile.TileStorage; public class PluginRefinedStorage extends BlankModPlugin { @Override public void register(IModRegistry registry) { - // @TODO: JEI transfer handler + registry.getRecipeTransferRegistry().addRecipeTransferHandler(new GridRecipeTransferHandler()); + registry.addRecipeCategories(new SoldererRecipeCategory(registry.getJeiHelpers().getGuiHelper())); registry.addRecipeHandlers(new SoldererRecipeHandler()); diff --git a/src/main/java/refinedstorage/network/MessageGridCraftingTransfer.java b/src/main/java/refinedstorage/network/MessageGridCraftingTransfer.java new file mode 100755 index 000000000..2e42339f4 --- /dev/null +++ b/src/main/java/refinedstorage/network/MessageGridCraftingTransfer.java @@ -0,0 +1,33 @@ +package refinedstorage.network; + +import io.netty.buffer.ByteBuf; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.fml.common.network.ByteBufUtils; +import net.minecraftforge.fml.common.network.simpleimpl.IMessage; + +public class MessageGridCraftingTransfer extends MessageHandlerPlayerToServer implements IMessage { + private NBTTagCompound recipe; + + public MessageGridCraftingTransfer() { + } + + public MessageGridCraftingTransfer(NBTTagCompound recipe) { + this.recipe = recipe; + } + + @Override + public void fromBytes(ByteBuf buf) { + recipe = ByteBufUtils.readTag(buf); + } + + @Override + public void toBytes(ByteBuf buf) { + ByteBufUtils.writeTag(buf, recipe); + } + + @Override + public void handle(MessageGridCraftingTransfer message, EntityPlayerMP player) { + // @TODO: Make it do something + } +} diff --git a/src/main/java/refinedstorage/proxy/CommonProxy.java b/src/main/java/refinedstorage/proxy/CommonProxy.java index bf3a3bc8c..45d217346 100755 --- a/src/main/java/refinedstorage/proxy/CommonProxy.java +++ b/src/main/java/refinedstorage/proxy/CommonProxy.java @@ -38,6 +38,7 @@ public class CommonProxy { RefinedStorage.NETWORK.registerMessage(MessagePriorityUpdate.class, MessagePriorityUpdate.class, 10, Side.SERVER); RefinedStorage.NETWORK.registerMessage(MessageGridSortingUpdate.class, MessageGridSortingUpdate.class, 11, Side.SERVER); RefinedStorage.NETWORK.registerMessage(MessageGridCraftingPush.class, MessageGridCraftingPush.class, 12, Side.SERVER); + RefinedStorage.NETWORK.registerMessage(MessageGridCraftingTransfer.class, MessageGridCraftingTransfer.class, 13, Side.SERVER); NetworkRegistry.INSTANCE.registerGuiHandler(RefinedStorage.INSTANCE, new GuiHandler()); diff --git a/src/main/java/refinedstorage/util/InventoryUtils.java b/src/main/java/refinedstorage/util/InventoryUtils.java index 4008b3b9d..1e62fa23f 100755 --- a/src/main/java/refinedstorage/util/InventoryUtils.java +++ b/src/main/java/refinedstorage/util/InventoryUtils.java @@ -144,7 +144,6 @@ public class InventoryUtils { int toGo = stack.stackSize; for (int i = 0; i < inventory.getSizeInventory(); ++i) { - // @TODO: Test this better if (!inventory.isItemValidForSlot(i, stack)) { continue; }