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 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 crash when breaking a Grid, Crafting Monitor, Crafter Manager or Portable Grid when another player is still using it (raoulvdberge)
|
||||
|
||||
### 1.7
|
||||
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.api.network.grid.IGrid;
|
||||
import com.raoulvdberge.refinedstorage.block.CrafterManagerBlock;
|
||||
import com.raoulvdberge.refinedstorage.block.NetworkNodeBlock;
|
||||
import com.raoulvdberge.refinedstorage.tile.CrafterManagerTile;
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.nbt.CompoundNBT;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
@@ -72,6 +74,12 @@ public class CrafterManagerNetworkNode extends NetworkNode {
|
||||
}
|
||||
|
||||
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.api.autocrafting.ICraftingManager;
|
||||
import com.raoulvdberge.refinedstorage.api.autocrafting.task.ICraftingTask;
|
||||
import com.raoulvdberge.refinedstorage.block.CraftingMonitorBlock;
|
||||
import com.raoulvdberge.refinedstorage.block.NetworkNodeBlock;
|
||||
import com.raoulvdberge.refinedstorage.tile.craftingmonitor.CraftingMonitorTile;
|
||||
import com.raoulvdberge.refinedstorage.tile.craftingmonitor.ICraftingMonitor;
|
||||
import com.raoulvdberge.refinedstorage.tile.data.TileDataManager;
|
||||
import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter;
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.entity.player.PlayerEntity;
|
||||
import net.minecraft.entity.player.ServerPlayerEntity;
|
||||
import net.minecraft.nbt.CompoundNBT;
|
||||
@@ -76,7 +78,13 @@ public class CraftingMonitorNetworkNode extends NetworkNode implements ICrafting
|
||||
|
||||
@Override
|
||||
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
|
||||
|
@@ -14,6 +14,7 @@ import com.raoulvdberge.refinedstorage.apiimpl.API;
|
||||
import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.AllowedTagList;
|
||||
import com.raoulvdberge.refinedstorage.apiimpl.storage.cache.listener.FluidGridStorageCacheListener;
|
||||
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.inventory.fluid.FluidInventory;
|
||||
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.util.GridUtils;
|
||||
import com.raoulvdberge.refinedstorage.util.StackUtils;
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.entity.player.PlayerEntity;
|
||||
import net.minecraft.entity.player.ServerPlayerEntity;
|
||||
import net.minecraft.inventory.CraftResultInventory;
|
||||
@@ -405,7 +407,13 @@ public class GridNetworkNode extends NetworkNode implements INetworkAwareGrid, I
|
||||
|
||||
@Override
|
||||
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
|
||||
|
@@ -155,6 +155,15 @@ public abstract class BaseContainer extends Container {
|
||||
|
||||
@Override
|
||||
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;
|
||||
}
|
||||
|
||||
@@ -185,7 +194,7 @@ public abstract class BaseContainer extends Container {
|
||||
public void detectAndSendChanges() {
|
||||
super.detectAndSendChanges();
|
||||
|
||||
if (listener != null) {
|
||||
if (listener != null && isTileStillThere()) {
|
||||
listener.detectAndSendChanges();
|
||||
}
|
||||
|
||||
|
@@ -3,7 +3,9 @@ package com.raoulvdberge.refinedstorage.render.tesr;
|
||||
import com.mojang.blaze3d.platform.GlStateManager;
|
||||
import com.raoulvdberge.refinedstorage.RSBlocks;
|
||||
import com.raoulvdberge.refinedstorage.apiimpl.API;
|
||||
import com.raoulvdberge.refinedstorage.block.StorageMonitorBlock;
|
||||
import com.raoulvdberge.refinedstorage.tile.StorageMonitorTile;
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.renderer.model.IBakedModel;
|
||||
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) {
|
||||
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.util.StackUtils;
|
||||
import com.raoulvdberge.refinedstorage.util.WorldUtils;
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.entity.player.PlayerEntity;
|
||||
import net.minecraft.entity.player.ServerPlayerEntity;
|
||||
import net.minecraft.inventory.CraftResultInventory;
|
||||
@@ -519,7 +520,13 @@ public class PortableGridTile extends BaseTile implements IGrid, IPortableGrid,
|
||||
@Override
|
||||
public boolean isActive() {
|
||||
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() &&
|
||||
|
Reference in New Issue
Block a user