Fixed crash when breaking a Grid, Crafting Monitor, Crafter Manager or Portable Grid when another player is still using it. Fixes #2353
This commit is contained in:
@@ -11,6 +11,7 @@
|
|||||||
- Fixed delay in block update when placing a cable block (raoulvdberge)
|
- Fixed delay in block update when placing a cable block (raoulvdberge)
|
||||||
- Fixed holder of cable blocks sometimes conflicting with a cable connection while rendering (raoulvdberge)
|
- Fixed holder of cable blocks sometimes conflicting with a cable connection while rendering (raoulvdberge)
|
||||||
- Fixed being able to move wireless items in inventory when using a keybinding to open (raoulvdberge)
|
- Fixed being able to move wireless items in inventory when using a keybinding to open (raoulvdberge)
|
||||||
|
- Fixed crash when breaking a Grid, Crafting Monitor, Crafter Manager or Portable Grid when another player is still using it (raoulvdberge)
|
||||||
|
|
||||||
### 1.7
|
### 1.7
|
||||||
NOTE: This is an alpha release. Bugs may happen. Remember to take backups.
|
NOTE: This is an alpha release. Bugs may happen. Remember to take backups.
|
||||||
|
@@ -2,8 +2,10 @@ package com.raoulvdberge.refinedstorage.apiimpl.network.node;
|
|||||||
|
|
||||||
import com.raoulvdberge.refinedstorage.RS;
|
import com.raoulvdberge.refinedstorage.RS;
|
||||||
import com.raoulvdberge.refinedstorage.api.network.grid.IGrid;
|
import com.raoulvdberge.refinedstorage.api.network.grid.IGrid;
|
||||||
|
import com.raoulvdberge.refinedstorage.block.CrafterManagerBlock;
|
||||||
import com.raoulvdberge.refinedstorage.block.NetworkNodeBlock;
|
import com.raoulvdberge.refinedstorage.block.NetworkNodeBlock;
|
||||||
import com.raoulvdberge.refinedstorage.tile.CrafterManagerTile;
|
import com.raoulvdberge.refinedstorage.tile.CrafterManagerTile;
|
||||||
|
import net.minecraft.block.BlockState;
|
||||||
import net.minecraft.nbt.CompoundNBT;
|
import net.minecraft.nbt.CompoundNBT;
|
||||||
import net.minecraft.util.ResourceLocation;
|
import net.minecraft.util.ResourceLocation;
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
@@ -72,6 +74,12 @@ public class CrafterManagerNetworkNode extends NetworkNode {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public boolean isActive() {
|
public boolean isActive() {
|
||||||
return world.getBlockState(pos).get(NetworkNodeBlock.CONNECTED);
|
BlockState state = world.getBlockState(pos);
|
||||||
|
|
||||||
|
if (state.getBlock() instanceof CrafterManagerBlock) {
|
||||||
|
return state.get(NetworkNodeBlock.CONNECTED);
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -3,11 +3,13 @@ package com.raoulvdberge.refinedstorage.apiimpl.network.node;
|
|||||||
import com.raoulvdberge.refinedstorage.RS;
|
import com.raoulvdberge.refinedstorage.RS;
|
||||||
import com.raoulvdberge.refinedstorage.api.autocrafting.ICraftingManager;
|
import com.raoulvdberge.refinedstorage.api.autocrafting.ICraftingManager;
|
||||||
import com.raoulvdberge.refinedstorage.api.autocrafting.task.ICraftingTask;
|
import com.raoulvdberge.refinedstorage.api.autocrafting.task.ICraftingTask;
|
||||||
|
import com.raoulvdberge.refinedstorage.block.CraftingMonitorBlock;
|
||||||
import com.raoulvdberge.refinedstorage.block.NetworkNodeBlock;
|
import com.raoulvdberge.refinedstorage.block.NetworkNodeBlock;
|
||||||
import com.raoulvdberge.refinedstorage.tile.craftingmonitor.CraftingMonitorTile;
|
import com.raoulvdberge.refinedstorage.tile.craftingmonitor.CraftingMonitorTile;
|
||||||
import com.raoulvdberge.refinedstorage.tile.craftingmonitor.ICraftingMonitor;
|
import com.raoulvdberge.refinedstorage.tile.craftingmonitor.ICraftingMonitor;
|
||||||
import com.raoulvdberge.refinedstorage.tile.data.TileDataManager;
|
import com.raoulvdberge.refinedstorage.tile.data.TileDataManager;
|
||||||
import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter;
|
import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter;
|
||||||
|
import net.minecraft.block.BlockState;
|
||||||
import net.minecraft.entity.player.PlayerEntity;
|
import net.minecraft.entity.player.PlayerEntity;
|
||||||
import net.minecraft.entity.player.ServerPlayerEntity;
|
import net.minecraft.entity.player.ServerPlayerEntity;
|
||||||
import net.minecraft.nbt.CompoundNBT;
|
import net.minecraft.nbt.CompoundNBT;
|
||||||
@@ -76,7 +78,13 @@ public class CraftingMonitorNetworkNode extends NetworkNode implements ICrafting
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isActive() {
|
public boolean isActive() {
|
||||||
return world.getBlockState(pos).get(NetworkNodeBlock.CONNECTED);
|
BlockState state = world.getBlockState(pos);
|
||||||
|
|
||||||
|
if (state.getBlock() instanceof CraftingMonitorBlock) {
|
||||||
|
return state.get(NetworkNodeBlock.CONNECTED);
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@@ -14,6 +14,7 @@ import com.raoulvdberge.refinedstorage.apiimpl.API;
|
|||||||
import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.AllowedTagList;
|
import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.AllowedTagList;
|
||||||
import com.raoulvdberge.refinedstorage.apiimpl.storage.cache.listener.FluidGridStorageCacheListener;
|
import com.raoulvdberge.refinedstorage.apiimpl.storage.cache.listener.FluidGridStorageCacheListener;
|
||||||
import com.raoulvdberge.refinedstorage.apiimpl.storage.cache.listener.ItemGridStorageCacheListener;
|
import com.raoulvdberge.refinedstorage.apiimpl.storage.cache.listener.ItemGridStorageCacheListener;
|
||||||
|
import com.raoulvdberge.refinedstorage.block.GridBlock;
|
||||||
import com.raoulvdberge.refinedstorage.block.NetworkNodeBlock;
|
import com.raoulvdberge.refinedstorage.block.NetworkNodeBlock;
|
||||||
import com.raoulvdberge.refinedstorage.inventory.fluid.FluidInventory;
|
import com.raoulvdberge.refinedstorage.inventory.fluid.FluidInventory;
|
||||||
import com.raoulvdberge.refinedstorage.inventory.item.BaseItemHandler;
|
import com.raoulvdberge.refinedstorage.inventory.item.BaseItemHandler;
|
||||||
@@ -27,6 +28,7 @@ import com.raoulvdberge.refinedstorage.tile.data.TileDataManager;
|
|||||||
import com.raoulvdberge.refinedstorage.tile.grid.GridTile;
|
import com.raoulvdberge.refinedstorage.tile.grid.GridTile;
|
||||||
import com.raoulvdberge.refinedstorage.util.GridUtils;
|
import com.raoulvdberge.refinedstorage.util.GridUtils;
|
||||||
import com.raoulvdberge.refinedstorage.util.StackUtils;
|
import com.raoulvdberge.refinedstorage.util.StackUtils;
|
||||||
|
import net.minecraft.block.BlockState;
|
||||||
import net.minecraft.entity.player.PlayerEntity;
|
import net.minecraft.entity.player.PlayerEntity;
|
||||||
import net.minecraft.entity.player.ServerPlayerEntity;
|
import net.minecraft.entity.player.ServerPlayerEntity;
|
||||||
import net.minecraft.inventory.CraftResultInventory;
|
import net.minecraft.inventory.CraftResultInventory;
|
||||||
@@ -405,7 +407,13 @@ public class GridNetworkNode extends NetworkNode implements INetworkAwareGrid, I
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isActive() {
|
public boolean isActive() {
|
||||||
return world.getBlockState(pos).get(NetworkNodeBlock.CONNECTED);
|
BlockState state = world.getBlockState(pos);
|
||||||
|
|
||||||
|
if (state.getBlock() instanceof GridBlock) {
|
||||||
|
return state.get(NetworkNodeBlock.CONNECTED);
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@@ -155,6 +155,15 @@ public abstract class BaseContainer extends Container {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean canInteractWith(PlayerEntity player) {
|
public boolean canInteractWith(PlayerEntity player) {
|
||||||
|
return isTileStillThere();
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean isTileStillThere() {
|
||||||
|
if (tile != null) {
|
||||||
|
// @Volatile: Logic from LockableLootTileEntity#isUsableByPlayer
|
||||||
|
return tile.getWorld().getTileEntity(tile.getPos()) == tile;
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -185,7 +194,7 @@ public abstract class BaseContainer extends Container {
|
|||||||
public void detectAndSendChanges() {
|
public void detectAndSendChanges() {
|
||||||
super.detectAndSendChanges();
|
super.detectAndSendChanges();
|
||||||
|
|
||||||
if (listener != null) {
|
if (listener != null && isTileStillThere()) {
|
||||||
listener.detectAndSendChanges();
|
listener.detectAndSendChanges();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -3,7 +3,9 @@ package com.raoulvdberge.refinedstorage.render.tesr;
|
|||||||
import com.mojang.blaze3d.platform.GlStateManager;
|
import com.mojang.blaze3d.platform.GlStateManager;
|
||||||
import com.raoulvdberge.refinedstorage.RSBlocks;
|
import com.raoulvdberge.refinedstorage.RSBlocks;
|
||||||
import com.raoulvdberge.refinedstorage.apiimpl.API;
|
import com.raoulvdberge.refinedstorage.apiimpl.API;
|
||||||
|
import com.raoulvdberge.refinedstorage.block.StorageMonitorBlock;
|
||||||
import com.raoulvdberge.refinedstorage.tile.StorageMonitorTile;
|
import com.raoulvdberge.refinedstorage.tile.StorageMonitorTile;
|
||||||
|
import net.minecraft.block.BlockState;
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.client.renderer.model.IBakedModel;
|
import net.minecraft.client.renderer.model.IBakedModel;
|
||||||
import net.minecraft.client.renderer.model.ItemCameraTransforms;
|
import net.minecraft.client.renderer.model.ItemCameraTransforms;
|
||||||
@@ -41,7 +43,12 @@ public class StorageMonitorTileRenderer extends TileEntityRenderer<StorageMonito
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Direction direction = tile.getWorld().getBlockState(tile.getPos()).get(RSBlocks.STORAGE_MONITOR.getDirection().getProperty());
|
Direction direction = Direction.NORTH;
|
||||||
|
|
||||||
|
BlockState state = tile.getWorld().getBlockState(tile.getPos());
|
||||||
|
if (state.getBlock() instanceof StorageMonitorBlock) {
|
||||||
|
direction = state.get(RSBlocks.STORAGE_MONITOR.getDirection().getProperty());
|
||||||
|
}
|
||||||
|
|
||||||
if (direction == Direction.NORTH) {
|
if (direction == Direction.NORTH) {
|
||||||
disX = 0.5F;
|
disX = 0.5F;
|
||||||
|
@@ -47,6 +47,7 @@ import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter;
|
|||||||
import com.raoulvdberge.refinedstorage.tile.grid.GridTile;
|
import com.raoulvdberge.refinedstorage.tile.grid.GridTile;
|
||||||
import com.raoulvdberge.refinedstorage.util.StackUtils;
|
import com.raoulvdberge.refinedstorage.util.StackUtils;
|
||||||
import com.raoulvdberge.refinedstorage.util.WorldUtils;
|
import com.raoulvdberge.refinedstorage.util.WorldUtils;
|
||||||
|
import net.minecraft.block.BlockState;
|
||||||
import net.minecraft.entity.player.PlayerEntity;
|
import net.minecraft.entity.player.PlayerEntity;
|
||||||
import net.minecraft.entity.player.ServerPlayerEntity;
|
import net.minecraft.entity.player.ServerPlayerEntity;
|
||||||
import net.minecraft.inventory.CraftResultInventory;
|
import net.minecraft.inventory.CraftResultInventory;
|
||||||
@@ -519,7 +520,13 @@ public class PortableGridTile extends BaseTile implements IGrid, IPortableGrid,
|
|||||||
@Override
|
@Override
|
||||||
public boolean isActive() {
|
public boolean isActive() {
|
||||||
if (world.isRemote) {
|
if (world.isRemote) {
|
||||||
return world.getBlockState(pos).get(PortableGridBlock.ACTIVE);
|
BlockState state = world.getBlockState(pos);
|
||||||
|
|
||||||
|
if (state.getBlock() instanceof PortableGridBlock) {
|
||||||
|
return state.get(PortableGridBlock.ACTIVE);
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (RS.SERVER_CONFIG.getPortableGrid().getUseEnergy() &&
|
if (RS.SERVER_CONFIG.getPortableGrid().getUseEnergy() &&
|
||||||
|
Reference in New Issue
Block a user