Move crafting logic to IGrid
This commit is contained in:
@@ -5,13 +5,10 @@ import com.raoulvdberge.refinedstorage.RSBlocks;
|
||||
import com.raoulvdberge.refinedstorage.RSItems;
|
||||
import com.raoulvdberge.refinedstorage.RSUtils;
|
||||
import com.raoulvdberge.refinedstorage.api.network.INetworkNodeHolder;
|
||||
import com.raoulvdberge.refinedstorage.api.network.grid.IFluidGridHandler;
|
||||
import com.raoulvdberge.refinedstorage.api.network.grid.IItemGridHandler;
|
||||
import com.raoulvdberge.refinedstorage.api.network.security.Permission;
|
||||
import com.raoulvdberge.refinedstorage.apiimpl.API;
|
||||
import com.raoulvdberge.refinedstorage.block.BlockGrid;
|
||||
import com.raoulvdberge.refinedstorage.block.EnumGridType;
|
||||
import com.raoulvdberge.refinedstorage.container.ContainerGrid;
|
||||
import com.raoulvdberge.refinedstorage.gui.grid.GridFilter;
|
||||
import com.raoulvdberge.refinedstorage.gui.grid.GridTab;
|
||||
import com.raoulvdberge.refinedstorage.inventory.ItemHandlerBasic;
|
||||
@@ -30,13 +27,11 @@ import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.item.crafting.CraftingManager;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.util.NonNullList;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraftforge.items.IItemHandler;
|
||||
import net.minecraftforge.items.ItemHandlerHelper;
|
||||
import net.minecraftforge.items.wrapper.CombinedInvWrapper;
|
||||
import net.minecraftforge.items.wrapper.InvWrapper;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@@ -151,12 +146,6 @@ public class NetworkNodeGrid extends NetworkNode implements IGrid {
|
||||
return type == null ? EnumGridType.NORMAL : type;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public BlockPos getNetworkPosition() {
|
||||
return network != null ? network.getPosition() : null;
|
||||
}
|
||||
|
||||
public void onOpened(EntityPlayer player) {
|
||||
if (network != null) {
|
||||
if (getType() == EnumGridType.FLUID) {
|
||||
@@ -167,29 +156,11 @@ public class NetworkNodeGrid extends NetworkNode implements IGrid {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public IItemGridHandler getItemHandler() {
|
||||
return network != null ? network.getItemGridHandler() : null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IFluidGridHandler getFluidHandler() {
|
||||
return network != null ? network.getFluidGridHandler() : null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getGuiTitle() {
|
||||
return getType() == EnumGridType.FLUID ? "gui.refinedstorage:fluid_grid" : "gui.refinedstorage:grid";
|
||||
}
|
||||
|
||||
public InventoryCrafting getMatrix() {
|
||||
return matrix;
|
||||
}
|
||||
|
||||
public InventoryCraftResult getResult() {
|
||||
return result;
|
||||
}
|
||||
|
||||
public IItemHandler getPatterns() {
|
||||
return patterns;
|
||||
}
|
||||
@@ -209,99 +180,24 @@ public class NetworkNodeGrid extends NetworkNode implements IGrid {
|
||||
return tabs;
|
||||
}
|
||||
|
||||
@Override
|
||||
public InventoryCrafting getCraftingMatrix() {
|
||||
return matrix;
|
||||
}
|
||||
|
||||
@Override
|
||||
public InventoryCraftResult getCraftingResult() {
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCraftingMatrixChanged() {
|
||||
markDirty();
|
||||
|
||||
result.setInventorySlotContents(0, CraftingManager.getInstance().findMatchingRecipe(matrix, holder.world()));
|
||||
|
||||
markDirty();
|
||||
}
|
||||
|
||||
public void onCrafted(EntityPlayer player) {
|
||||
NonNullList<ItemStack> remainder = CraftingManager.getInstance().getRemainingItems(matrix, holder.world());
|
||||
|
||||
for (int i = 0; i < matrix.getSizeInventory(); ++i) {
|
||||
ItemStack slot = matrix.getStackInSlot(i);
|
||||
|
||||
if (i < remainder.size() && !remainder.get(i).isEmpty()) {
|
||||
// If there is no space for the remainder, dump it in the player inventory
|
||||
if (!slot.isEmpty() && slot.getCount() > 1) {
|
||||
if (!player.inventory.addItemStackToInventory(remainder.get(i).copy())) {
|
||||
ItemStack remainderStack = network.insertItem(remainder.get(i).copy(), remainder.get(i).getCount(), false);
|
||||
|
||||
if (remainderStack != null) {
|
||||
InventoryHelper.spawnItemStack(player.getEntityWorld(), player.getPosition().getX(), player.getPosition().getY(), player.getPosition().getZ(), remainderStack);
|
||||
}
|
||||
}
|
||||
|
||||
matrix.decrStackSize(i, 1);
|
||||
} else {
|
||||
matrix.setInventorySlotContents(i, remainder.get(i).copy());
|
||||
}
|
||||
} else if (!slot.isEmpty()) {
|
||||
if (slot.getCount() == 1 && network != null) {
|
||||
matrix.setInventorySlotContents(i, RSUtils.getStack(network.extractItem(slot, 1, false)));
|
||||
} else {
|
||||
matrix.decrStackSize(i, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
onCraftingMatrixChanged();
|
||||
}
|
||||
|
||||
public void onCraftedShift(ContainerGrid container, EntityPlayer player) {
|
||||
List<ItemStack> craftedItemsList = new ArrayList<>();
|
||||
int craftedItems = 0;
|
||||
ItemStack crafted = result.getStackInSlot(0);
|
||||
|
||||
while (true) {
|
||||
onCrafted(player);
|
||||
|
||||
craftedItemsList.add(crafted.copy());
|
||||
|
||||
craftedItems += crafted.getCount();
|
||||
|
||||
if (!API.instance().getComparer().isEqual(crafted, result.getStackInSlot(0)) || craftedItems + crafted.getCount() > crafted.getMaxStackSize()) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
for (ItemStack craftedItem : craftedItemsList) {
|
||||
if (!player.inventory.addItemStackToInventory(craftedItem.copy())) {
|
||||
ItemStack remainder = network.insertItem(craftedItem, craftedItem.getCount(), false);
|
||||
if (remainder != null) {
|
||||
InventoryHelper.spawnItemStack(player.getEntityWorld(), player.getPosition().getX(), player.getPosition().getY(), player.getPosition().getZ(), remainder);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
container.sendCraftingSlots();
|
||||
container.detectAndSendChanges();
|
||||
}
|
||||
|
||||
public void onCreatePattern() {
|
||||
if (canCreatePattern()) {
|
||||
patterns.extractItem(0, 1, false);
|
||||
|
||||
ItemStack pattern = new ItemStack(RSItems.PATTERN);
|
||||
|
||||
ItemPattern.setOredict(pattern, oredictPattern);
|
||||
|
||||
for (int i = 0; i < 9; ++i) {
|
||||
ItemStack ingredient = matrix.getStackInSlot(i);
|
||||
|
||||
if (!ingredient.isEmpty()) {
|
||||
ItemPattern.setSlot(pattern, i, ingredient);
|
||||
}
|
||||
}
|
||||
|
||||
patterns.setStackInSlot(1, pattern);
|
||||
}
|
||||
}
|
||||
|
||||
public boolean canCreatePattern() {
|
||||
return !result.getStackInSlot(0).isEmpty() && patterns.getStackInSlot(1).isEmpty() && !patterns.getStackInSlot(0).isEmpty();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRecipeTransfer(EntityPlayer player, ItemStack[][] recipe) {
|
||||
if (network != null && getType() == EnumGridType.CRAFTING && !network.getSecurityManager().hasPermission(Permission.EXTRACT, player)) {
|
||||
return;
|
||||
@@ -385,6 +281,98 @@ public class NetworkNodeGrid extends NetworkNode implements IGrid {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onClosed(EntityPlayer player) {
|
||||
// NO OP
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCrafted(EntityPlayer player) {
|
||||
NonNullList<ItemStack> remainder = CraftingManager.getInstance().getRemainingItems(matrix, holder.world());
|
||||
|
||||
for (int i = 0; i < matrix.getSizeInventory(); ++i) {
|
||||
ItemStack slot = matrix.getStackInSlot(i);
|
||||
|
||||
if (i < remainder.size() && !remainder.get(i).isEmpty()) {
|
||||
// If there is no space for the remainder, dump it in the player inventory
|
||||
if (!slot.isEmpty() && slot.getCount() > 1) {
|
||||
if (!player.inventory.addItemStackToInventory(remainder.get(i).copy())) {
|
||||
ItemStack remainderStack = network == null ? remainder.get(i).copy() : network.insertItem(remainder.get(i).copy(), remainder.get(i).getCount(), false);
|
||||
|
||||
if (remainderStack != null) {
|
||||
InventoryHelper.spawnItemStack(player.getEntityWorld(), player.getPosition().getX(), player.getPosition().getY(), player.getPosition().getZ(), remainderStack);
|
||||
}
|
||||
}
|
||||
|
||||
matrix.decrStackSize(i, 1);
|
||||
} else {
|
||||
matrix.setInventorySlotContents(i, remainder.get(i).copy());
|
||||
}
|
||||
} else if (!slot.isEmpty()) {
|
||||
if (slot.getCount() == 1 && network != null) {
|
||||
matrix.setInventorySlotContents(i, RSUtils.getStack(network.extractItem(slot, 1, false)));
|
||||
} else {
|
||||
matrix.decrStackSize(i, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
onCraftingMatrixChanged();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCraftedShift(EntityPlayer player) {
|
||||
List<ItemStack> craftedItemsList = new ArrayList<>();
|
||||
int craftedItems = 0;
|
||||
ItemStack crafted = result.getStackInSlot(0);
|
||||
|
||||
while (true) {
|
||||
onCrafted(player);
|
||||
|
||||
craftedItemsList.add(crafted.copy());
|
||||
|
||||
craftedItems += crafted.getCount();
|
||||
|
||||
if (!API.instance().getComparer().isEqual(crafted, result.getStackInSlot(0)) || craftedItems + crafted.getCount() > crafted.getMaxStackSize()) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
for (ItemStack craftedItem : craftedItemsList) {
|
||||
if (!player.inventory.addItemStackToInventory(craftedItem.copy())) {
|
||||
ItemStack remainder = network == null ? craftedItem : network.insertItem(craftedItem, craftedItem.getCount(), false);
|
||||
|
||||
if (remainder != null) {
|
||||
InventoryHelper.spawnItemStack(player.getEntityWorld(), player.getPosition().getX(), player.getPosition().getY(), player.getPosition().getZ(), remainder);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void onCreatePattern() {
|
||||
if (canCreatePattern()) {
|
||||
patterns.extractItem(0, 1, false);
|
||||
|
||||
ItemStack pattern = new ItemStack(RSItems.PATTERN);
|
||||
|
||||
ItemPattern.setOredict(pattern, oredictPattern);
|
||||
|
||||
for (int i = 0; i < 9; ++i) {
|
||||
ItemStack ingredient = matrix.getStackInSlot(i);
|
||||
|
||||
if (!ingredient.isEmpty()) {
|
||||
ItemPattern.setSlot(pattern, i, ingredient);
|
||||
}
|
||||
}
|
||||
|
||||
patterns.setStackInSlot(1, pattern);
|
||||
}
|
||||
}
|
||||
|
||||
public boolean canCreatePattern() {
|
||||
return !result.getStackInSlot(0).isEmpty() && patterns.getStackInSlot(1).isEmpty() && !patterns.getStackInSlot(0).isEmpty();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getViewType() {
|
||||
return holder.world().isRemote ? TileGrid.VIEW_TYPE.getValue() : viewType;
|
||||
|
@@ -1,13 +1,14 @@
|
||||
package com.raoulvdberge.refinedstorage.container;
|
||||
|
||||
import com.raoulvdberge.refinedstorage.RSUtils;
|
||||
import com.raoulvdberge.refinedstorage.api.network.grid.IFluidGridHandler;
|
||||
import com.raoulvdberge.refinedstorage.api.network.grid.IItemGridHandler;
|
||||
import com.raoulvdberge.refinedstorage.apiimpl.network.node.NetworkNodeGrid;
|
||||
import com.raoulvdberge.refinedstorage.block.EnumGridType;
|
||||
import com.raoulvdberge.refinedstorage.container.slot.*;
|
||||
import com.raoulvdberge.refinedstorage.gui.grid.IGridDisplay;
|
||||
import com.raoulvdberge.refinedstorage.tile.grid.IGrid;
|
||||
import com.raoulvdberge.refinedstorage.tile.grid.TileGrid;
|
||||
import com.raoulvdberge.refinedstorage.tile.grid.WirelessGrid;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.entity.player.EntityPlayerMP;
|
||||
import net.minecraft.inventory.IContainerListener;
|
||||
@@ -42,13 +43,12 @@ public class ContainerGrid extends ContainerBase {
|
||||
|
||||
addPlayerInventory(8, display.getYPlayerInventory());
|
||||
|
||||
// @todo: move crafting logic to IGrid..
|
||||
if (grid.getType() == EnumGridType.CRAFTING) {
|
||||
int x = 26;
|
||||
int y = headerAndSlots + 4;
|
||||
|
||||
for (int i = 0; i < 9; ++i) {
|
||||
addSlotToContainer(new SlotGridCrafting(((NetworkNodeGrid) grid).getMatrix(), i, x, y));
|
||||
addSlotToContainer(new SlotGridCrafting(grid.getCraftingMatrix(), i, x, y));
|
||||
|
||||
x += 18;
|
||||
|
||||
@@ -64,7 +64,7 @@ public class ContainerGrid extends ContainerBase {
|
||||
int y = headerAndSlots + 4;
|
||||
|
||||
for (int i = 0; i < 9; ++i) {
|
||||
addSlotToContainer(new SlotFilterLegacy(((NetworkNodeGrid) grid).getMatrix(), i, x, y));
|
||||
addSlotToContainer(new SlotFilterLegacy(grid.getCraftingMatrix(), i, x, y));
|
||||
|
||||
x += 18;
|
||||
|
||||
@@ -74,7 +74,7 @@ public class ContainerGrid extends ContainerBase {
|
||||
}
|
||||
}
|
||||
|
||||
addSlotToContainer(patternResultSlot = new SlotDisabled(((NetworkNodeGrid) grid).getResult(), 0, 112 + 4, headerAndSlots + 22));
|
||||
addSlotToContainer(patternResultSlot = new SlotDisabled(grid.getCraftingResult(), 0, 112 + 4, headerAndSlots + 22));
|
||||
|
||||
addSlotToContainer(new SlotItemHandler(((NetworkNodeGrid) grid).getPatterns(), 0, 152, headerAndSlots + 4));
|
||||
addSlotToContainer(new SlotOutput(((NetworkNodeGrid) grid).getPatterns(), 1, 152, headerAndSlots + 40));
|
||||
@@ -111,8 +111,8 @@ public class ContainerGrid extends ContainerBase {
|
||||
public void onContainerClosed(EntityPlayer player) {
|
||||
super.onContainerClosed(player);
|
||||
|
||||
if (!player.getEntityWorld().isRemote && grid instanceof WirelessGrid) {
|
||||
((WirelessGrid) grid).onClose(player);
|
||||
if (!player.getEntityWorld().isRemote) {
|
||||
grid.onClosed(player);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -128,12 +128,18 @@ public class ContainerGrid extends ContainerBase {
|
||||
|
||||
if (slot.getHasStack()) {
|
||||
if (slot == craftingResultSlot) {
|
||||
((NetworkNodeGrid) grid).onCraftedShift(this, player);
|
||||
} else if (slot != patternResultSlot && !(slot instanceof SlotFilterLegacy)) {
|
||||
if (grid.getType() != EnumGridType.FLUID && grid.getItemHandler() != null) {
|
||||
slot.putStack(RSUtils.getStack(grid.getItemHandler().onInsert((EntityPlayerMP) player, slot.getStack())));
|
||||
} else if (grid.getType() == EnumGridType.FLUID && grid.getFluidHandler() != null) {
|
||||
slot.putStack(RSUtils.getStack(grid.getFluidHandler().onInsert((EntityPlayerMP) player, slot.getStack())));
|
||||
grid.onCraftedShift(player);
|
||||
|
||||
sendCraftingSlots();
|
||||
detectAndSendChanges();
|
||||
} else if (slot != patternResultSlot && !(slot instanceof SlotFilterLegacy) && grid.getNetwork() != null) {
|
||||
IItemGridHandler itemHandler = grid.getNetwork().getItemGridHandler();
|
||||
IFluidGridHandler fluidHandler = grid.getNetwork().getFluidGridHandler();
|
||||
|
||||
if (grid.getType() != EnumGridType.FLUID && itemHandler != null) {
|
||||
slot.putStack(RSUtils.getStack(itemHandler.onInsert((EntityPlayerMP) player, slot.getStack())));
|
||||
} else if (grid.getType() == EnumGridType.FLUID && fluidHandler != null) {
|
||||
slot.putStack(RSUtils.getStack(fluidHandler.onInsert((EntityPlayerMP) player, slot.getStack())));
|
||||
}
|
||||
|
||||
detectAndSendChanges();
|
||||
|
@@ -1,7 +1,7 @@
|
||||
package com.raoulvdberge.refinedstorage.container.slot;
|
||||
|
||||
import com.raoulvdberge.refinedstorage.apiimpl.network.node.NetworkNodeGrid;
|
||||
import com.raoulvdberge.refinedstorage.container.ContainerGrid;
|
||||
import com.raoulvdberge.refinedstorage.tile.grid.IGrid;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.inventory.SlotCrafting;
|
||||
import net.minecraft.item.ItemStack;
|
||||
@@ -11,10 +11,10 @@ import javax.annotation.Nonnull;
|
||||
|
||||
public class SlotGridCraftingResult extends SlotCrafting {
|
||||
private ContainerGrid container;
|
||||
private NetworkNodeGrid grid;
|
||||
private IGrid grid;
|
||||
|
||||
public SlotGridCraftingResult(ContainerGrid container, EntityPlayer player, NetworkNodeGrid grid, int id, int x, int y) {
|
||||
super(player, grid.getMatrix(), grid.getResult(), id, x, y);
|
||||
public SlotGridCraftingResult(ContainerGrid container, EntityPlayer player, IGrid grid, int id, int x, int y) {
|
||||
super(player, grid.getCraftingMatrix(), grid.getCraftingResult(), id, x, y);
|
||||
|
||||
this.container = container;
|
||||
this.grid = grid;
|
||||
@@ -23,7 +23,7 @@ public class SlotGridCraftingResult extends SlotCrafting {
|
||||
@Override
|
||||
@Nonnull
|
||||
public ItemStack onTake(EntityPlayer player, @Nonnull ItemStack stack) {
|
||||
FMLCommonHandler.instance().firePlayerCraftingEvent(player, stack, grid.getMatrix());
|
||||
FMLCommonHandler.instance().firePlayerCraftingEvent(player, stack, grid.getCraftingMatrix());
|
||||
|
||||
onCrafting(stack);
|
||||
|
||||
|
@@ -504,7 +504,7 @@ public class GuiGrid extends GuiBase implements IGridDisplay {
|
||||
RS.INSTANCE.network.sendToServer(new MessageGridPatternCreate(gridPos.getX(), gridPos.getY(), gridPos.getZ()));
|
||||
} else if (grid.isActive()) {
|
||||
if (clickedClear) {
|
||||
RS.INSTANCE.network.sendToServer(new MessageGridCraftingClear((NetworkNodeGrid) grid));
|
||||
RS.INSTANCE.network.sendToServer(new MessageGridCraftingClear());
|
||||
}
|
||||
|
||||
ItemStack held = ((ContainerGrid) this.inventorySlots).getPlayer().inventory.getItemStack();
|
||||
|
@@ -2,65 +2,51 @@ package com.raoulvdberge.refinedstorage.network;
|
||||
|
||||
import com.raoulvdberge.refinedstorage.RSUtils;
|
||||
import com.raoulvdberge.refinedstorage.api.network.security.Permission;
|
||||
import com.raoulvdberge.refinedstorage.apiimpl.network.node.NetworkNodeGrid;
|
||||
import com.raoulvdberge.refinedstorage.block.EnumGridType;
|
||||
import com.raoulvdberge.refinedstorage.tile.grid.TileGrid;
|
||||
import com.raoulvdberge.refinedstorage.container.ContainerGrid;
|
||||
import com.raoulvdberge.refinedstorage.tile.grid.IGrid;
|
||||
import io.netty.buffer.ByteBuf;
|
||||
import net.minecraft.entity.player.EntityPlayerMP;
|
||||
import net.minecraft.inventory.Container;
|
||||
import net.minecraft.inventory.InventoryCrafting;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraftforge.fml.common.network.simpleimpl.IMessage;
|
||||
|
||||
public class MessageGridCraftingClear extends MessageHandlerPlayerToServer<MessageGridCraftingClear> implements IMessage {
|
||||
private int x;
|
||||
private int y;
|
||||
private int z;
|
||||
|
||||
public MessageGridCraftingClear() {
|
||||
}
|
||||
|
||||
public MessageGridCraftingClear(NetworkNodeGrid grid) {
|
||||
this.x = grid.getPos().getX();
|
||||
this.y = grid.getPos().getY();
|
||||
this.z = grid.getPos().getZ();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fromBytes(ByteBuf buf) {
|
||||
x = buf.readInt();
|
||||
y = buf.readInt();
|
||||
z = buf.readInt();
|
||||
// NO OP
|
||||
}
|
||||
|
||||
@Override
|
||||
public void toBytes(ByteBuf buf) {
|
||||
buf.writeInt(x);
|
||||
buf.writeInt(y);
|
||||
buf.writeInt(z);
|
||||
// NO OP
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handle(MessageGridCraftingClear message, EntityPlayerMP player) {
|
||||
TileEntity tile = player.getEntityWorld().getTileEntity(new BlockPos(message.x, message.y, message.z));
|
||||
Container container = player.openContainer;
|
||||
|
||||
if (tile instanceof TileGrid) {
|
||||
NetworkNodeGrid grid = ((TileGrid) tile).getNode();
|
||||
if (container instanceof ContainerGrid) {
|
||||
IGrid grid = ((ContainerGrid) container).getGrid();
|
||||
|
||||
if (grid.getNetwork() != null) {
|
||||
if (grid.getType() == EnumGridType.CRAFTING && grid.getNetwork().getSecurityManager().hasPermission(Permission.INSERT, player)) {
|
||||
for (int i = 0; i < grid.getMatrix().getSizeInventory(); ++i) {
|
||||
ItemStack slot = grid.getMatrix().getStackInSlot(i);
|
||||
InventoryCrafting matrix = grid.getCraftingMatrix();
|
||||
|
||||
if (!slot.isEmpty()) {
|
||||
grid.getMatrix().setInventorySlotContents(i, RSUtils.getStack(grid.getNetwork().insertItem(slot, slot.getCount(), false)));
|
||||
}
|
||||
}
|
||||
} else if (grid.getType() == EnumGridType.PATTERN) {
|
||||
for (int i = 0; i < grid.getMatrix().getSizeInventory(); ++i) {
|
||||
grid.getMatrix().setInventorySlotContents(i, ItemStack.EMPTY);
|
||||
if (grid.getType() == EnumGridType.CRAFTING && grid.getNetwork() != null && grid.getNetwork().getSecurityManager().hasPermission(Permission.INSERT, player)) {
|
||||
for (int i = 0; i < matrix.getSizeInventory(); ++i) {
|
||||
ItemStack slot = matrix.getStackInSlot(i);
|
||||
|
||||
if (!slot.isEmpty()) {
|
||||
matrix.setInventorySlotContents(i, RSUtils.getStack(grid.getNetwork().insertItem(slot, slot.getCount(), false)));
|
||||
}
|
||||
}
|
||||
} else if (grid.getType() == EnumGridType.PATTERN) {
|
||||
for (int i = 0; i < matrix.getSizeInventory(); ++i) {
|
||||
matrix.setInventorySlotContents(i, ItemStack.EMPTY);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -1,6 +1,7 @@
|
||||
package com.raoulvdberge.refinedstorage.network;
|
||||
|
||||
import com.raoulvdberge.refinedstorage.container.ContainerGrid;
|
||||
import com.raoulvdberge.refinedstorage.tile.grid.IGrid;
|
||||
import io.netty.buffer.ByteBuf;
|
||||
import net.minecraft.entity.player.EntityPlayerMP;
|
||||
import net.minecraft.inventory.Container;
|
||||
@@ -35,7 +36,11 @@ public class MessageGridCraftingPreview extends MessageHandlerPlayerToServer<Mes
|
||||
Container container = player.openContainer;
|
||||
|
||||
if (container instanceof ContainerGrid) {
|
||||
((ContainerGrid) container).getGrid().getItemHandler().onCraftingPreviewRequested(player, message.hash, message.quantity);
|
||||
IGrid grid = ((ContainerGrid) container).getGrid();
|
||||
|
||||
if (grid.getNetwork() != null) {
|
||||
grid.getNetwork().getItemGridHandler().onCraftingPreviewRequested(player, message.hash, message.quantity);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -1,7 +1,7 @@
|
||||
package com.raoulvdberge.refinedstorage.network;
|
||||
|
||||
import com.raoulvdberge.refinedstorage.api.network.grid.IItemGridHandler;
|
||||
import com.raoulvdberge.refinedstorage.container.ContainerGrid;
|
||||
import com.raoulvdberge.refinedstorage.tile.grid.IGrid;
|
||||
import io.netty.buffer.ByteBuf;
|
||||
import net.minecraft.entity.player.EntityPlayerMP;
|
||||
import net.minecraft.inventory.Container;
|
||||
@@ -38,10 +38,10 @@ public class MessageGridCraftingStart extends MessageHandlerPlayerToServer<Messa
|
||||
Container container = player.openContainer;
|
||||
|
||||
if (container instanceof ContainerGrid) {
|
||||
IItemGridHandler handler = ((ContainerGrid) container).getGrid().getItemHandler();
|
||||
IGrid grid = ((ContainerGrid) container).getGrid();
|
||||
|
||||
if (handler != null) {
|
||||
handler.onCraftingRequested(player, message.stack, message.quantity);
|
||||
if (grid.getNetwork() != null) {
|
||||
grid.getNetwork().getItemGridHandler().onCraftingRequested(player, message.stack, message.quantity);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -1,6 +1,5 @@
|
||||
package com.raoulvdberge.refinedstorage.network;
|
||||
|
||||
import com.raoulvdberge.refinedstorage.apiimpl.network.node.NetworkNodeGrid;
|
||||
import com.raoulvdberge.refinedstorage.block.EnumGridType;
|
||||
import com.raoulvdberge.refinedstorage.container.ContainerGrid;
|
||||
import com.raoulvdberge.refinedstorage.tile.grid.IGrid;
|
||||
@@ -53,7 +52,7 @@ public class MessageGridCraftingTransfer extends MessageHandlerPlayerToServer<Me
|
||||
}
|
||||
}
|
||||
|
||||
((NetworkNodeGrid) grid).onRecipeTransfer(player, actualRecipe);
|
||||
grid.onRecipeTransfer(player, actualRecipe);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -1,7 +1,7 @@
|
||||
package com.raoulvdberge.refinedstorage.network;
|
||||
|
||||
import com.raoulvdberge.refinedstorage.api.network.grid.IFluidGridHandler;
|
||||
import com.raoulvdberge.refinedstorage.container.ContainerGrid;
|
||||
import com.raoulvdberge.refinedstorage.tile.grid.IGrid;
|
||||
import io.netty.buffer.ByteBuf;
|
||||
import net.minecraft.entity.player.EntityPlayerMP;
|
||||
import net.minecraft.inventory.Container;
|
||||
@@ -24,10 +24,10 @@ public class MessageGridFluidInsertHeld extends MessageHandlerPlayerToServer<Mes
|
||||
Container container = player.openContainer;
|
||||
|
||||
if (container instanceof ContainerGrid) {
|
||||
IFluidGridHandler handler = ((ContainerGrid) container).getGrid().getFluidHandler();
|
||||
IGrid grid = ((ContainerGrid) container).getGrid();
|
||||
|
||||
if (handler != null) {
|
||||
handler.onInsertHeldContainer(player);
|
||||
if (grid.getNetwork() != null) {
|
||||
grid.getNetwork().getFluidGridHandler().onInsertHeldContainer(player);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -1,7 +1,7 @@
|
||||
package com.raoulvdberge.refinedstorage.network;
|
||||
|
||||
import com.raoulvdberge.refinedstorage.api.network.grid.IFluidGridHandler;
|
||||
import com.raoulvdberge.refinedstorage.container.ContainerGrid;
|
||||
import com.raoulvdberge.refinedstorage.tile.grid.IGrid;
|
||||
import io.netty.buffer.ByteBuf;
|
||||
import net.minecraft.entity.player.EntityPlayerMP;
|
||||
import net.minecraft.inventory.Container;
|
||||
@@ -36,10 +36,10 @@ public class MessageGridFluidPull extends MessageHandlerPlayerToServer<MessageGr
|
||||
Container container = player.openContainer;
|
||||
|
||||
if (container instanceof ContainerGrid) {
|
||||
IFluidGridHandler handler = ((ContainerGrid) container).getGrid().getFluidHandler();
|
||||
IGrid grid = ((ContainerGrid) container).getGrid();
|
||||
|
||||
if (handler != null) {
|
||||
handler.onExtract(player, message.hash, message.shift);
|
||||
if (grid.getNetwork() != null) {
|
||||
grid.getNetwork().getFluidGridHandler().onExtract(player, message.hash, message.shift);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -1,7 +1,7 @@
|
||||
package com.raoulvdberge.refinedstorage.network;
|
||||
|
||||
import com.raoulvdberge.refinedstorage.api.network.grid.IItemGridHandler;
|
||||
import com.raoulvdberge.refinedstorage.container.ContainerGrid;
|
||||
import com.raoulvdberge.refinedstorage.tile.grid.IGrid;
|
||||
import io.netty.buffer.ByteBuf;
|
||||
import net.minecraft.entity.player.EntityPlayerMP;
|
||||
import net.minecraft.inventory.Container;
|
||||
@@ -32,10 +32,10 @@ public class MessageGridItemInsertHeld extends MessageHandlerPlayerToServer<Mess
|
||||
Container container = player.openContainer;
|
||||
|
||||
if (container instanceof ContainerGrid) {
|
||||
IItemGridHandler handler = ((ContainerGrid) container).getGrid().getItemHandler();
|
||||
IGrid grid = ((ContainerGrid) container).getGrid();
|
||||
|
||||
if (handler != null) {
|
||||
handler.onInsertHeldItem(player, message.single);
|
||||
if (grid.getNetwork() != null) {
|
||||
grid.getNetwork().getItemGridHandler().onInsertHeldItem(player, message.single);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -1,7 +1,7 @@
|
||||
package com.raoulvdberge.refinedstorage.network;
|
||||
|
||||
import com.raoulvdberge.refinedstorage.api.network.grid.IItemGridHandler;
|
||||
import com.raoulvdberge.refinedstorage.container.ContainerGrid;
|
||||
import com.raoulvdberge.refinedstorage.tile.grid.IGrid;
|
||||
import io.netty.buffer.ByteBuf;
|
||||
import net.minecraft.entity.player.EntityPlayerMP;
|
||||
import net.minecraft.inventory.Container;
|
||||
@@ -36,10 +36,10 @@ public class MessageGridItemPull extends MessageHandlerPlayerToServer<MessageGri
|
||||
Container container = player.openContainer;
|
||||
|
||||
if (container instanceof ContainerGrid) {
|
||||
IItemGridHandler handler = ((ContainerGrid) container).getGrid().getItemHandler();
|
||||
IGrid grid = ((ContainerGrid) container).getGrid();
|
||||
|
||||
if (handler != null) {
|
||||
handler.onExtract(player, message.hash, message.flags);
|
||||
if (grid.getNetwork() != null) {
|
||||
grid.getNetwork().getItemGridHandler().onExtract(player, message.hash, message.flags);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -355,7 +355,7 @@ public class TileController extends TileBase implements INetworkMaster, IRedston
|
||||
if (player.openContainer.getClass() == ContainerGrid.class) {
|
||||
IGrid grid = ((ContainerGrid) player.openContainer).getGrid();
|
||||
|
||||
if (pos.equals(grid.getNetworkPosition())) {
|
||||
if (grid.getNetwork() != null && pos.equals(grid.getNetwork().getPosition())) {
|
||||
return Arrays.asList(types).contains(grid.getType());
|
||||
}
|
||||
}
|
||||
|
@@ -1,13 +1,15 @@
|
||||
package com.raoulvdberge.refinedstorage.tile.grid;
|
||||
|
||||
import com.raoulvdberge.refinedstorage.api.network.grid.IFluidGridHandler;
|
||||
import com.raoulvdberge.refinedstorage.api.network.grid.IItemGridHandler;
|
||||
import com.raoulvdberge.refinedstorage.api.network.INetworkMaster;
|
||||
import com.raoulvdberge.refinedstorage.block.EnumGridType;
|
||||
import com.raoulvdberge.refinedstorage.gui.grid.GridFilter;
|
||||
import com.raoulvdberge.refinedstorage.gui.grid.GridTab;
|
||||
import com.raoulvdberge.refinedstorage.inventory.ItemHandlerBasic;
|
||||
import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.inventory.InventoryCraftResult;
|
||||
import net.minecraft.inventory.InventoryCrafting;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.List;
|
||||
@@ -16,11 +18,7 @@ public interface IGrid {
|
||||
EnumGridType getType();
|
||||
|
||||
@Nullable
|
||||
BlockPos getNetworkPosition();
|
||||
|
||||
IItemGridHandler getItemHandler();
|
||||
|
||||
IFluidGridHandler getFluidHandler();
|
||||
INetworkMaster getNetwork();
|
||||
|
||||
String getGuiTitle();
|
||||
|
||||
@@ -52,5 +50,19 @@ public interface IGrid {
|
||||
|
||||
TileDataParameter<Integer> getRedstoneModeConfig();
|
||||
|
||||
InventoryCrafting getCraftingMatrix();
|
||||
|
||||
InventoryCraftResult getCraftingResult();
|
||||
|
||||
void onCraftingMatrixChanged();
|
||||
|
||||
void onCrafted(EntityPlayer player);
|
||||
|
||||
void onCraftedShift(EntityPlayer player);
|
||||
|
||||
void onRecipeTransfer(EntityPlayer player, ItemStack[][] recipe);
|
||||
|
||||
void onClosed(EntityPlayer player);
|
||||
|
||||
boolean isActive();
|
||||
}
|
||||
|
@@ -2,8 +2,7 @@
|
||||
package com.raoulvdberge.refinedstorage.tile.grid;
|
||||
|
||||
import com.raoulvdberge.refinedstorage.RS;
|
||||
import com.raoulvdberge.refinedstorage.api.network.grid.IFluidGridHandler;
|
||||
import com.raoulvdberge.refinedstorage.api.network.grid.IItemGridHandler;
|
||||
import com.raoulvdberge.refinedstorage.api.network.INetworkMaster;
|
||||
import com.raoulvdberge.refinedstorage.block.EnumGridType;
|
||||
import com.raoulvdberge.refinedstorage.gui.grid.GridFilter;
|
||||
import com.raoulvdberge.refinedstorage.gui.grid.GridTab;
|
||||
@@ -11,15 +10,17 @@ import com.raoulvdberge.refinedstorage.gui.grid.GuiGrid;
|
||||
import com.raoulvdberge.refinedstorage.inventory.ItemHandlerBasic;
|
||||
import com.raoulvdberge.refinedstorage.item.ItemWirelessFluidGrid;
|
||||
import com.raoulvdberge.refinedstorage.network.MessageWirelessFluidGridSettingsUpdate;
|
||||
import com.raoulvdberge.refinedstorage.tile.TileController;
|
||||
import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.inventory.InventoryCraftResult;
|
||||
import net.minecraft.inventory.InventoryCrafting;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.common.DimensionManager;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
@@ -54,22 +55,19 @@ public class WirelessFluidGrid implements IGrid {
|
||||
}
|
||||
|
||||
@Override
|
||||
public BlockPos getNetworkPosition() {
|
||||
return controller;
|
||||
}
|
||||
@Nullable
|
||||
public INetworkMaster getNetwork() {
|
||||
World world = DimensionManager.getWorld(controllerDimension);
|
||||
|
||||
if (world != null) {
|
||||
TileEntity tile = world.getTileEntity(controller);
|
||||
|
||||
return tile instanceof INetworkMaster ? (INetworkMaster) tile : null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IItemGridHandler getItemHandler() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IFluidGridHandler getFluidHandler() {
|
||||
TileController controller = getController();
|
||||
|
||||
return controller != null ? controller.getFluidGridHandler() : null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getGuiTitle() {
|
||||
return "gui.refinedstorage:fluid_grid";
|
||||
@@ -155,28 +153,47 @@ public class WirelessFluidGrid implements IGrid {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public InventoryCrafting getCraftingMatrix() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public InventoryCraftResult getCraftingResult() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCraftingMatrixChanged() {
|
||||
// NO OP
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCrafted(EntityPlayer player) {
|
||||
// NO OP
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCraftedShift(EntityPlayer player) {
|
||||
// NO OP
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRecipeTransfer(EntityPlayer player, ItemStack[][] recipe) {
|
||||
// NO OP
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isActive() {
|
||||
return true;
|
||||
}
|
||||
|
||||
public void onClose(EntityPlayer player) {
|
||||
TileController controller = getController();
|
||||
@Override
|
||||
public void onClosed(EntityPlayer player) {
|
||||
INetworkMaster network = getNetwork();
|
||||
|
||||
if (controller != null) {
|
||||
controller.getNetworkItemHandler().onClose(player);
|
||||
if (network != null) {
|
||||
network.getNetworkItemHandler().onClose(player);
|
||||
}
|
||||
}
|
||||
|
||||
private TileController getController() {
|
||||
World world = DimensionManager.getWorld(controllerDimension);
|
||||
|
||||
if (world != null) {
|
||||
TileEntity tile = world.getTileEntity(controller);
|
||||
|
||||
return tile instanceof TileController ? (TileController) tile : null;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
@@ -2,8 +2,7 @@ package com.raoulvdberge.refinedstorage.tile.grid;
|
||||
|
||||
import com.raoulvdberge.refinedstorage.RS;
|
||||
import com.raoulvdberge.refinedstorage.RSUtils;
|
||||
import com.raoulvdberge.refinedstorage.api.network.grid.IFluidGridHandler;
|
||||
import com.raoulvdberge.refinedstorage.api.network.grid.IItemGridHandler;
|
||||
import com.raoulvdberge.refinedstorage.api.network.INetworkMaster;
|
||||
import com.raoulvdberge.refinedstorage.block.EnumGridType;
|
||||
import com.raoulvdberge.refinedstorage.gui.grid.GridFilter;
|
||||
import com.raoulvdberge.refinedstorage.gui.grid.GridTab;
|
||||
@@ -12,9 +11,10 @@ import com.raoulvdberge.refinedstorage.inventory.ItemHandlerBasic;
|
||||
import com.raoulvdberge.refinedstorage.inventory.ItemHandlerGridFilterInGrid;
|
||||
import com.raoulvdberge.refinedstorage.item.ItemWirelessGrid;
|
||||
import com.raoulvdberge.refinedstorage.network.MessageWirelessGridSettingsUpdate;
|
||||
import com.raoulvdberge.refinedstorage.tile.TileController;
|
||||
import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.inventory.InventoryCraftResult;
|
||||
import net.minecraft.inventory.InventoryCrafting;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
@@ -22,6 +22,7 @@ import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.common.DimensionManager;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@@ -81,19 +82,16 @@ public class WirelessGrid implements IGrid {
|
||||
}
|
||||
|
||||
@Override
|
||||
public BlockPos getNetworkPosition() {
|
||||
return controller;
|
||||
}
|
||||
@Nullable
|
||||
public INetworkMaster getNetwork() {
|
||||
World world = DimensionManager.getWorld(controllerDimension);
|
||||
|
||||
@Override
|
||||
public IItemGridHandler getItemHandler() {
|
||||
TileController controller = getController();
|
||||
if (world != null) {
|
||||
TileEntity tile = world.getTileEntity(controller);
|
||||
|
||||
return controller != null ? controller.getItemGridHandler() : null;
|
||||
}
|
||||
return tile instanceof INetworkMaster ? (INetworkMaster) tile : null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IFluidGridHandler getFluidHandler() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -190,28 +188,47 @@ public class WirelessGrid implements IGrid {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public InventoryCrafting getCraftingMatrix() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public InventoryCraftResult getCraftingResult() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCraftingMatrixChanged() {
|
||||
// NO OP
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCrafted(EntityPlayer player) {
|
||||
// NO OP
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCraftedShift(EntityPlayer player) {
|
||||
// NO OP
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRecipeTransfer(EntityPlayer player, ItemStack[][] recipe) {
|
||||
// NO OP
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isActive() {
|
||||
return true;
|
||||
}
|
||||
|
||||
public void onClose(EntityPlayer player) {
|
||||
TileController controller = getController();
|
||||
@Override
|
||||
public void onClosed(EntityPlayer player) {
|
||||
INetworkMaster network = getNetwork();
|
||||
|
||||
if (controller != null) {
|
||||
controller.getNetworkItemHandler().onClose(player);
|
||||
if (network != null) {
|
||||
network.getNetworkItemHandler().onClose(player);
|
||||
}
|
||||
}
|
||||
|
||||
private TileController getController() {
|
||||
World world = DimensionManager.getWorld(controllerDimension);
|
||||
|
||||
if (world != null) {
|
||||
TileEntity tile = world.getTileEntity(controller);
|
||||
|
||||
return tile instanceof TileController ? (TileController) tile : null;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user