Start working on recipe transfer handlers in grid..
This commit is contained in:
65
src/main/java/refinedstorage/jei/GridRecipeTransferHandler.java
Executable file
65
src/main/java/refinedstorage/jei/GridRecipeTransferHandler.java
Executable file
@@ -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<? extends Container> 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<Integer, ? extends IGuiIngredient<ItemStack>> inputs = recipeLayout.getItemStacks().getGuiIngredients();
|
||||
|
||||
NBTTagCompound recipe = new NBTTagCompound();
|
||||
|
||||
for (Slot slot : container.inventorySlots) {
|
||||
if (slot.inventory instanceof InventoryCrafting) {
|
||||
IGuiIngredient<ItemStack> ingredient = inputs.get(slot.getSlotIndex() + 1);
|
||||
|
||||
if (ingredient != null) {
|
||||
List<ItemStack> 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;
|
||||
}
|
||||
}
|
||||
@@ -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());
|
||||
|
||||
33
src/main/java/refinedstorage/network/MessageGridCraftingTransfer.java
Executable file
33
src/main/java/refinedstorage/network/MessageGridCraftingTransfer.java
Executable file
@@ -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<MessageGridCraftingTransfer> 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
|
||||
}
|
||||
}
|
||||
@@ -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());
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user