Fix bug where breaking a storage block with a destructor crashes the game

This commit is contained in:
raoulvdberge
2019-10-24 22:23:49 +02:00
parent af53fe6005
commit 8e184141ed
3 changed files with 23 additions and 11 deletions

View File

@@ -16,12 +16,25 @@ public class StorageBlockLootFunction implements ILootFunction {
public ItemStack apply(ItemStack stack, LootContext lootContext) { public ItemStack apply(ItemStack stack, LootContext lootContext) {
TileEntity tile = lootContext.get(LootParameters.BLOCK_ENTITY); TileEntity tile = lootContext.get(LootParameters.BLOCK_ENTITY);
// This code needs to work without the node being removed as well.
// For example: the Destructor calls getDrops before the node has been removed.
if (tile instanceof StorageTile) { if (tile instanceof StorageTile) {
StorageNetworkNode removedNode = ((StorageTile) tile).getRemovedNode();
if (removedNode == null) {
removedNode = ((StorageTile) tile).getNode();
}
stack.setTag(new CompoundNBT()); stack.setTag(new CompoundNBT());
stack.getTag().putUniqueId(StorageNetworkNode.NBT_ID, ((StorageTile) tile).getRemovedNode().getStorageId()); stack.getTag().putUniqueId(StorageNetworkNode.NBT_ID, removedNode.getStorageId());
} else if (tile instanceof FluidStorageTile) { } else if (tile instanceof FluidStorageTile) {
FluidStorageNetworkNode removedNode = ((FluidStorageTile) tile).getRemovedNode();
if (removedNode == null) {
removedNode = ((FluidStorageTile) tile).getNode();
}
stack.setTag(new CompoundNBT()); stack.setTag(new CompoundNBT());
stack.getTag().putUniqueId(FluidStorageNetworkNode.NBT_ID, ((FluidStorageTile) tile).getRemovedNode().getStorageId()); stack.getTag().putUniqueId(FluidStorageNetworkNode.NBT_ID, removedNode.getStorageId());
} }
return stack; return stack;

View File

@@ -7,8 +7,6 @@ public class ProxyCommon {
API.deliver(e.getAsmData()); API.deliver(e.getAsmData());
WirelessGrid.ID = API.instance().getGridManager().add(new GridFactoryWirelessGrid());
WirelessFluidGrid.ID = API.instance().getGridManager().add(new GridFactoryWirelessFluidGrid());
TilePortableGrid.FACTORY_ID = API.instance().getGridManager().add(new GridFactoryPortableGridBlock()); TilePortableGrid.FACTORY_ID = API.instance().getGridManager().add(new GridFactoryPortableGridBlock());
PortableGrid.ID = API.instance().getGridManager().add(new GridFactoryPortableGrid()); PortableGrid.ID = API.instance().getGridManager().add(new GridFactoryPortableGrid());

View File

@@ -38,6 +38,7 @@ import com.raoulvdberge.refinedstorage.inventory.item.BaseItemHandler;
import com.raoulvdberge.refinedstorage.inventory.item.FilterItemHandler; import com.raoulvdberge.refinedstorage.inventory.item.FilterItemHandler;
import com.raoulvdberge.refinedstorage.inventory.item.validator.StorageDiskItemValidator; import com.raoulvdberge.refinedstorage.inventory.item.validator.StorageDiskItemValidator;
import com.raoulvdberge.refinedstorage.inventory.listener.TileInventoryListener; import com.raoulvdberge.refinedstorage.inventory.listener.TileInventoryListener;
import com.raoulvdberge.refinedstorage.item.WirelessGridItem;
import com.raoulvdberge.refinedstorage.screen.BaseScreen; import com.raoulvdberge.refinedstorage.screen.BaseScreen;
import com.raoulvdberge.refinedstorage.screen.grid.GridScreen; import com.raoulvdberge.refinedstorage.screen.grid.GridScreen;
import com.raoulvdberge.refinedstorage.tile.BaseTile; import com.raoulvdberge.refinedstorage.tile.BaseTile;
@@ -237,13 +238,13 @@ public class TilePortableGrid extends BaseTile implements IGrid, IPortableGrid,
} }
public void onPassItemContext(ItemStack stack) { public void onPassItemContext(ItemStack stack) {
/* TODO this.sortingType = ItemWirelessGrid.getSortingType(stack); this.sortingType = WirelessGridItem.getSortingType(stack);
this.sortingDirection = ItemWirelessGrid.getSortingDirection(stack); this.sortingDirection = WirelessGridItem.getSortingDirection(stack);
this.searchBoxMode = ItemWirelessGrid.getSearchBoxMode(stack); this.searchBoxMode = WirelessGridItem.getSearchBoxMode(stack);
this.tabSelected = ItemWirelessGrid.getTabSelected(stack); this.tabSelected = WirelessGridItem.getTabSelected(stack);
this.tabPage = ItemWirelessGrid.getTabPage(stack); this.tabPage = WirelessGridItem.getTabPage(stack);
this.size = ItemWirelessGrid.getSize(stack); this.size = WirelessGridItem.getSize(stack);
*/
IEnergyStorage energyStorage = stack.getCapability(CapabilityEnergy.ENERGY).orElse(null); IEnergyStorage energyStorage = stack.getCapability(CapabilityEnergy.ENERGY).orElse(null);
this.energyStorage = recreateEnergyStorage(energyStorage != null ? energyStorage.getEnergyStored() : 0); this.energyStorage = recreateEnergyStorage(energyStorage != null ? energyStorage.getEnergyStored() : 0);