From 04d64fbea9ca35c8c4b0e1e35cd613be943cf429 Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Tue, 31 Jul 2018 20:38:01 +0200 Subject: [PATCH] Fixed crash with Wireless Fluid Grid. Fixes #1928 --- CHANGELOG.md | 3 + .../item/ItemWirelessFluidGrid.java | 8 +++ ...essageWirelessFluidGridSettingsUpdate.java | 13 +++- .../tile/grid/WirelessFluidGrid.java | 61 +++++++++++++++---- 4 files changed, 71 insertions(+), 14 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 916ff7d24..9166136a5 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,8 @@ # Refined Storage Changelog +### 1.6.3 +- Fixed crash with Wireless Fluid Grid (raoulvdberge) + ### 1.6.2 - Fixed Grid searching not working (raoulvdberge) diff --git a/src/main/java/com/raoulvdberge/refinedstorage/item/ItemWirelessFluidGrid.java b/src/main/java/com/raoulvdberge/refinedstorage/item/ItemWirelessFluidGrid.java index 2e86b1f79..1b1ca0161 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/item/ItemWirelessFluidGrid.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/item/ItemWirelessFluidGrid.java @@ -45,6 +45,14 @@ public class ItemWirelessFluidGrid extends ItemNetworkItem { return (stack.hasTagCompound() && stack.getTagCompound().hasKey(NetworkNodeGrid.NBT_SEARCH_BOX_MODE)) ? stack.getTagCompound().getInteger(NetworkNodeGrid.NBT_SEARCH_BOX_MODE) : IGrid.SEARCH_BOX_MODE_NORMAL; } + public static int getTabSelected(ItemStack stack) { + return (stack.hasTagCompound() && stack.getTagCompound().hasKey(NetworkNodeGrid.NBT_TAB_SELECTED)) ? stack.getTagCompound().getInteger(NetworkNodeGrid.NBT_TAB_SELECTED) : -1; + } + + public static int getTabPage(ItemStack stack) { + return (stack.hasTagCompound() && stack.getTagCompound().hasKey(NetworkNodeGrid.NBT_TAB_PAGE)) ? stack.getTagCompound().getInteger(NetworkNodeGrid.NBT_TAB_PAGE) : 0; + } + public static int getSize(ItemStack stack) { return (stack.hasTagCompound() && stack.getTagCompound().hasKey(NetworkNodeGrid.NBT_SIZE)) ? stack.getTagCompound().getInteger(NetworkNodeGrid.NBT_SIZE) : IGrid.SIZE_STRETCH; } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/network/MessageWirelessFluidGridSettingsUpdate.java b/src/main/java/com/raoulvdberge/refinedstorage/network/MessageWirelessFluidGridSettingsUpdate.java index a149de8bd..3969b8eb8 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/network/MessageWirelessFluidGridSettingsUpdate.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/network/MessageWirelessFluidGridSettingsUpdate.java @@ -14,15 +14,19 @@ public class MessageWirelessFluidGridSettingsUpdate extends MessageHandlerPlayer private int sortingType; private int searchBoxMode; private int size; + private int tabSelected; + private int tabPage; public MessageWirelessFluidGridSettingsUpdate() { } - public MessageWirelessFluidGridSettingsUpdate(int sortingDirection, int sortingType, int searchBoxMode, int size) { + public MessageWirelessFluidGridSettingsUpdate(int sortingDirection, int sortingType, int searchBoxMode, int size, int tabSelected, int tabPage) { this.sortingDirection = sortingDirection; this.sortingType = sortingType; this.searchBoxMode = searchBoxMode; this.size = size; + this.tabSelected = tabSelected; + this.tabPage = tabPage; } @Override @@ -31,6 +35,8 @@ public class MessageWirelessFluidGridSettingsUpdate extends MessageHandlerPlayer sortingType = buf.readInt(); searchBoxMode = buf.readInt(); size = buf.readInt(); + tabSelected = buf.readInt(); + tabPage = buf.readInt(); } @Override @@ -39,6 +45,8 @@ public class MessageWirelessFluidGridSettingsUpdate extends MessageHandlerPlayer buf.writeInt(sortingType); buf.writeInt(searchBoxMode); buf.writeInt(size); + buf.writeInt(tabSelected); + buf.writeInt(tabPage); } @Override @@ -64,6 +72,9 @@ public class MessageWirelessFluidGridSettingsUpdate extends MessageHandlerPlayer if (IGrid.isValidSize(message.size)) { stack.getTagCompound().setInteger(NetworkNodeGrid.NBT_SIZE, message.size); } + + stack.getTagCompound().setInteger(NetworkNodeGrid.NBT_TAB_SELECTED, message.tabSelected); + stack.getTagCompound().setInteger(NetworkNodeGrid.NBT_TAB_PAGE, message.tabPage); } } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/grid/WirelessFluidGrid.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/grid/WirelessFluidGrid.java index 65246013d..0d5b1750e 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/tile/grid/WirelessFluidGrid.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/grid/WirelessFluidGrid.java @@ -3,6 +3,7 @@ package com.raoulvdberge.refinedstorage.tile.grid; import com.raoulvdberge.refinedstorage.RS; import com.raoulvdberge.refinedstorage.api.network.INetwork; import com.raoulvdberge.refinedstorage.api.network.grid.GridType; +import com.raoulvdberge.refinedstorage.api.network.grid.IGrid; import com.raoulvdberge.refinedstorage.api.network.grid.IGridNetworkAware; import com.raoulvdberge.refinedstorage.api.network.grid.IGridTab; import com.raoulvdberge.refinedstorage.api.network.grid.handler.IFluidGridHandler; @@ -13,14 +14,17 @@ import com.raoulvdberge.refinedstorage.api.util.IFilter; import com.raoulvdberge.refinedstorage.apiimpl.storage.StorageCacheListenerGridFluid; import com.raoulvdberge.refinedstorage.gui.GuiBase; import com.raoulvdberge.refinedstorage.gui.grid.GuiGrid; +import com.raoulvdberge.refinedstorage.inventory.item.ItemHandlerFilter; import com.raoulvdberge.refinedstorage.item.ItemWirelessFluidGrid; import com.raoulvdberge.refinedstorage.network.MessageWirelessFluidGridSettingsUpdate; +import com.raoulvdberge.refinedstorage.util.StackUtils; import net.minecraft.client.Minecraft; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; 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; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; @@ -28,7 +32,7 @@ import net.minecraftforge.common.DimensionManager; import net.minecraftforge.items.IItemHandlerModifiable; import javax.annotation.Nullable; -import java.util.Collections; +import java.util.ArrayList; import java.util.List; public class WirelessFluidGrid implements IGridNetworkAware { @@ -42,8 +46,25 @@ public class WirelessFluidGrid implements IGridNetworkAware { private int sortingType; private int sortingDirection; private int searchBoxMode; + private int tabSelected; + private int tabPage; private int size; + private List filters = new ArrayList<>(); + private List tabs = new ArrayList<>(); + private ItemHandlerFilter filter = new ItemHandlerFilter(filters, tabs, null) { + @Override + protected void onContentsChanged(int slot) { + super.onContentsChanged(slot); + + if (!stack.hasTagCompound()) { + stack.setTagCompound(new NBTTagCompound()); + } + + StackUtils.writeItems(this, 0, stack.getTagCompound()); + } + }; + public WirelessFluidGrid(int networkDimension, ItemStack stack) { this.networkDimension = networkDimension; this.network = new BlockPos(ItemWirelessFluidGrid.getX(stack), ItemWirelessFluidGrid.getY(stack), ItemWirelessFluidGrid.getZ(stack)); @@ -53,7 +74,13 @@ public class WirelessFluidGrid implements IGridNetworkAware { this.sortingType = ItemWirelessFluidGrid.getSortingType(stack); this.sortingDirection = ItemWirelessFluidGrid.getSortingDirection(stack); this.searchBoxMode = ItemWirelessFluidGrid.getSearchBoxMode(stack); + this.tabSelected = ItemWirelessFluidGrid.getTabSelected(stack); + this.tabPage = ItemWirelessFluidGrid.getTabPage(stack); this.size = ItemWirelessFluidGrid.getSize(stack); + + if (stack.hasTagCompound()) { + StackUtils.readItems(filter, 0, stack.getTagCompound()); + } } public ItemStack getStack() { @@ -133,17 +160,17 @@ public class WirelessFluidGrid implements IGridNetworkAware { @Override public int getTabSelected() { - return 0; + return tabSelected; } @Override public int getTabPage() { - return 0; + return Math.min(tabPage, getTotalTabPages()); } @Override public int getTotalTabPages() { - return 0; + return (int) Math.floor((float) Math.max(0, tabs.size() - 1) / (float) IGrid.TABS_PER_PAGE); } @Override @@ -158,7 +185,7 @@ public class WirelessFluidGrid implements IGridNetworkAware { @Override public void onSortingTypeChanged(int type) { - RS.INSTANCE.network.sendToServer(new MessageWirelessFluidGridSettingsUpdate(getSortingDirection(), type, getSearchBoxMode(), getSize())); + RS.INSTANCE.network.sendToServer(new MessageWirelessFluidGridSettingsUpdate(getSortingDirection(), type, getSearchBoxMode(), getSize(), getTabSelected(), getTabPage())); this.sortingType = type; @@ -167,7 +194,7 @@ public class WirelessFluidGrid implements IGridNetworkAware { @Override public void onSortingDirectionChanged(int direction) { - RS.INSTANCE.network.sendToServer(new MessageWirelessFluidGridSettingsUpdate(direction, getSortingType(), getSearchBoxMode(), getSize())); + RS.INSTANCE.network.sendToServer(new MessageWirelessFluidGridSettingsUpdate(direction, getSortingType(), getSearchBoxMode(), getSize(), getTabSelected(), getTabPage())); this.sortingDirection = direction; @@ -176,14 +203,14 @@ public class WirelessFluidGrid implements IGridNetworkAware { @Override public void onSearchBoxModeChanged(int searchBoxMode) { - RS.INSTANCE.network.sendToServer(new MessageWirelessFluidGridSettingsUpdate(getSortingDirection(), getSortingType(), searchBoxMode, getSize())); + RS.INSTANCE.network.sendToServer(new MessageWirelessFluidGridSettingsUpdate(getSortingDirection(), getSortingType(), searchBoxMode, getSize(), getTabSelected(), getTabPage())); this.searchBoxMode = searchBoxMode; } @Override public void onSizeChanged(int size) { - RS.INSTANCE.network.sendToServer(new MessageWirelessFluidGridSettingsUpdate(getSortingDirection(), getSortingType(), getSearchBoxMode(), size)); + RS.INSTANCE.network.sendToServer(new MessageWirelessFluidGridSettingsUpdate(getSortingDirection(), getSortingType(), getSearchBoxMode(), size, getTabSelected(), getTabPage())); this.size = size; @@ -194,27 +221,35 @@ public class WirelessFluidGrid implements IGridNetworkAware { @Override public void onTabSelectionChanged(int tab) { - // NO OP + this.tabSelected = tab == tabSelected ? -1 : tab; + + RS.INSTANCE.network.sendToServer(new MessageWirelessFluidGridSettingsUpdate(getSortingDirection(), getSortingType(), getSearchBoxMode(), getSize(), tabSelected, getTabPage())); + + GuiBase.executeLater(GuiGrid.class, grid -> grid.getView().sort()); } @Override public void onTabPageChanged(int page) { - // NO OP + if (page >= 0 && page <= getTotalTabPages()) { + RS.INSTANCE.network.sendToServer(new MessageWirelessFluidGridSettingsUpdate(getSortingDirection(), getSortingType(), getSearchBoxMode(), getSize(), getTabSelected(), page)); + + this.tabPage = page; + } } @Override public List getFilters() { - return Collections.emptyList(); + return filters; } @Override public List getTabs() { - return Collections.emptyList(); + return tabs; } @Override public IItemHandlerModifiable getFilter() { - return null; + return filter; } @Override