Fix bug where breaking a storage block with a destructor crashes the game
This commit is contained in:
@@ -16,12 +16,25 @@ public class StorageBlockLootFunction implements ILootFunction {
|
||||
public ItemStack apply(ItemStack stack, LootContext lootContext) {
|
||||
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) {
|
||||
StorageNetworkNode removedNode = ((StorageTile) tile).getRemovedNode();
|
||||
if (removedNode == null) {
|
||||
removedNode = ((StorageTile) tile).getNode();
|
||||
}
|
||||
|
||||
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) {
|
||||
FluidStorageNetworkNode removedNode = ((FluidStorageTile) tile).getRemovedNode();
|
||||
if (removedNode == null) {
|
||||
removedNode = ((FluidStorageTile) tile).getNode();
|
||||
}
|
||||
|
||||
stack.setTag(new CompoundNBT());
|
||||
stack.getTag().putUniqueId(FluidStorageNetworkNode.NBT_ID, ((FluidStorageTile) tile).getRemovedNode().getStorageId());
|
||||
stack.getTag().putUniqueId(FluidStorageNetworkNode.NBT_ID, removedNode.getStorageId());
|
||||
}
|
||||
|
||||
return stack;
|
||||
|
||||
@@ -7,8 +7,6 @@ public class ProxyCommon {
|
||||
|
||||
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());
|
||||
PortableGrid.ID = API.instance().getGridManager().add(new GridFactoryPortableGrid());
|
||||
|
||||
|
||||
@@ -38,6 +38,7 @@ import com.raoulvdberge.refinedstorage.inventory.item.BaseItemHandler;
|
||||
import com.raoulvdberge.refinedstorage.inventory.item.FilterItemHandler;
|
||||
import com.raoulvdberge.refinedstorage.inventory.item.validator.StorageDiskItemValidator;
|
||||
import com.raoulvdberge.refinedstorage.inventory.listener.TileInventoryListener;
|
||||
import com.raoulvdberge.refinedstorage.item.WirelessGridItem;
|
||||
import com.raoulvdberge.refinedstorage.screen.BaseScreen;
|
||||
import com.raoulvdberge.refinedstorage.screen.grid.GridScreen;
|
||||
import com.raoulvdberge.refinedstorage.tile.BaseTile;
|
||||
@@ -237,13 +238,13 @@ public class TilePortableGrid extends BaseTile implements IGrid, IPortableGrid,
|
||||
}
|
||||
|
||||
public void onPassItemContext(ItemStack stack) {
|
||||
/* TODO this.sortingType = ItemWirelessGrid.getSortingType(stack);
|
||||
this.sortingDirection = ItemWirelessGrid.getSortingDirection(stack);
|
||||
this.searchBoxMode = ItemWirelessGrid.getSearchBoxMode(stack);
|
||||
this.tabSelected = ItemWirelessGrid.getTabSelected(stack);
|
||||
this.tabPage = ItemWirelessGrid.getTabPage(stack);
|
||||
this.size = ItemWirelessGrid.getSize(stack);
|
||||
*/
|
||||
this.sortingType = WirelessGridItem.getSortingType(stack);
|
||||
this.sortingDirection = WirelessGridItem.getSortingDirection(stack);
|
||||
this.searchBoxMode = WirelessGridItem.getSearchBoxMode(stack);
|
||||
this.tabSelected = WirelessGridItem.getTabSelected(stack);
|
||||
this.tabPage = WirelessGridItem.getTabPage(stack);
|
||||
this.size = WirelessGridItem.getSize(stack);
|
||||
|
||||
IEnergyStorage energyStorage = stack.getCapability(CapabilityEnergy.ENERGY).orElse(null);
|
||||
|
||||
this.energyStorage = recreateEnergyStorage(energyStorage != null ? energyStorage.getEnergyStored() : 0);
|
||||
|
||||
Reference in New Issue
Block a user