Move crafting logic to IGrid

This commit is contained in:
raoulvdberge
2016-12-28 07:02:41 +01:00
parent dbc1b83d20
commit a06e5313d3
16 changed files with 293 additions and 263 deletions

View File

@@ -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;

View File

@@ -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();

View File

@@ -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);

View File

@@ -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();

View File

@@ -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);
}
}
}
}

View File

@@ -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);
}
}
}
}

View File

@@ -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);
}
}
}

View File

@@ -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);
}
}
}

View File

@@ -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);
}
}
}

View File

@@ -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);
}
}
}

View File

@@ -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);
}
}
}

View File

@@ -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);
}
}
}

View File

@@ -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());
}
}

View File

@@ -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();
}

View File

@@ -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;
}
}

View File

@@ -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;
}
}