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) {
|
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;
|
||||||
|
|||||||
@@ -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());
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user