Fixed external storage using an out of date block entity for getting handler

This commit is contained in:
BlueAgent
2022-12-19 22:43:25 +08:00
committed by Raoul
parent 958ab0ceee
commit 606c26c940
3 changed files with 30 additions and 5 deletions

View File

@@ -10,6 +10,7 @@ to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
### Fixed ### Fixed
- Fixed external storage cache being de-synced from the network cache. - Fixed external storage cache being de-synced from the network cache.
- Fixed external storage using an out of date block entity for getting handler.
## [v1.11.2] - 2022-12-17 ## [v1.11.2] - 2022-12-17

View File

@@ -5,7 +5,9 @@ import com.refinedmods.refinedstorage.api.storage.externalstorage.IExternalStora
import com.refinedmods.refinedstorage.api.storage.externalstorage.IExternalStorageProvider; import com.refinedmods.refinedstorage.api.storage.externalstorage.IExternalStorageProvider;
import com.refinedmods.refinedstorage.blockentity.FluidInterfaceBlockEntity; import com.refinedmods.refinedstorage.blockentity.FluidInterfaceBlockEntity;
import com.refinedmods.refinedstorage.util.LevelUtils; import com.refinedmods.refinedstorage.util.LevelUtils;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction; import net.minecraft.core.Direction;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.FluidStack;
@@ -21,11 +23,21 @@ public class FluidExternalStorageProvider implements IExternalStorageProvider<Fl
@Override @Override
public IExternalStorage<FluidStack> provide(IExternalStorageContext context, BlockEntity blockEntity, Direction direction) { public IExternalStorage<FluidStack> provide(IExternalStorageContext context, BlockEntity blockEntity, Direction direction) {
return new FluidExternalStorage(context, () -> { return new FluidExternalStorage(context, () -> {
if (!blockEntity.getLevel().isLoaded(blockEntity.getBlockPos())) { Level level = blockEntity.getLevel();
if (level == null) {
return null; return null;
} }
return LevelUtils.getFluidHandler(blockEntity, direction.getOpposite()); BlockPos blockPos = blockEntity.getBlockPos();
if (!level.isLoaded(blockPos)) {
return null;
}
BlockEntity currentBlockEntity = level.getBlockEntity(blockPos);
return LevelUtils.getFluidHandler(currentBlockEntity, direction.getOpposite());
}, blockEntity instanceof FluidInterfaceBlockEntity); }, blockEntity instanceof FluidInterfaceBlockEntity);
} }

View File

@@ -6,10 +6,12 @@ import com.refinedmods.refinedstorage.api.storage.externalstorage.IExternalStora
import com.refinedmods.refinedstorage.api.storage.externalstorage.IExternalStorageContext; import com.refinedmods.refinedstorage.api.storage.externalstorage.IExternalStorageContext;
import com.refinedmods.refinedstorage.api.storage.externalstorage.IExternalStorageProvider; import com.refinedmods.refinedstorage.api.storage.externalstorage.IExternalStorageProvider;
import com.refinedmods.refinedstorage.blockentity.InterfaceBlockEntity; import com.refinedmods.refinedstorage.blockentity.InterfaceBlockEntity;
import com.refinedmods.refinedstorage.util.NetworkUtils;
import com.refinedmods.refinedstorage.util.LevelUtils; import com.refinedmods.refinedstorage.util.LevelUtils;
import com.refinedmods.refinedstorage.util.NetworkUtils;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction; import net.minecraft.core.Direction;
import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntity;
import javax.annotation.Nonnull; import javax.annotation.Nonnull;
@@ -30,11 +32,21 @@ public class ItemExternalStorageProvider implements IExternalStorageProvider<Ite
@Override @Override
public IExternalStorage<ItemStack> provide(IExternalStorageContext context, BlockEntity blockEntity, Direction direction) { public IExternalStorage<ItemStack> provide(IExternalStorageContext context, BlockEntity blockEntity, Direction direction) {
return new ItemExternalStorage(context, () -> { return new ItemExternalStorage(context, () -> {
if (!blockEntity.getLevel().isLoaded(blockEntity.getBlockPos())) { Level level = blockEntity.getLevel();
if (level == null) {
return null; return null;
} }
return LevelUtils.getItemHandler(blockEntity, direction.getOpposite()); BlockPos blockPos = blockEntity.getBlockPos();
if (!level.isLoaded(blockPos)) {
return null;
}
BlockEntity currentBlockEntity = level.getBlockEntity(blockPos);
return LevelUtils.getItemHandler(currentBlockEntity, direction.getOpposite());
}, blockEntity instanceof InterfaceBlockEntity); }, blockEntity instanceof InterfaceBlockEntity);
} }