From ad44107c394b1197fa7a6dac54bde9ae9cb7d45a Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Tue, 15 Oct 2019 23:28:13 +0200 Subject: [PATCH] Re-add the External Storage --- .../refinedstorage/ClientSetup.java | 1 + .../com/raoulvdberge/refinedstorage/RS.java | 16 + .../raoulvdberge/refinedstorage/RSBlocks.java | 4 +- .../refinedstorage/RSContainers.java | 3 +- .../refinedstorage/RSOldConfig.java | 4 - .../raoulvdberge/refinedstorage/RSTiles.java | 6 +- ...ageExternal.java => IExternalStorage.java} | 2 +- .../IExternalStorageProvider.java | 2 +- ...e.java => ExternalStorageNetworkNode.java} | 47 +-- .../apiimpl/network/node/NetworkNode.java | 6 +- .../node/NetworkNodeFluidInterface.java | 10 +- .../network/node/NetworkNodeInterface.java | 10 +- ...alFluid.java => FluidExternalStorage.java} | 8 +- ...id.java => FluidExternalStorageCache.java} | 2 +- ...java => FluidExternalStorageProvider.java} | 8 +- ...rnalItem.java => ItemExternalStorage.java} | 8 +- ...tem.java => ItemExternalStorageCache.java} | 2 +- ....java => ItemExternalStorageProvider.java} | 14 +- .../refinedstorage/block/BaseBlock.java | 22 +- .../refinedstorage/block/CableBlock.java | 20 +- .../block/ExternalStorageBlock.java | 53 ++- .../refinedstorage/block/NodeBlock.java | 20 +- .../refinedstorage/config/ServerConfig.java | 22 ++ .../container/ExternalStorageContainer.java | 4 +- .../refinedstorage/proxy/ProxyClient.java | 11 - .../refinedstorage/proxy/ProxyCommon.java | 3 - .../screen/ExternalStorageScreen.java | 25 ++ .../refinedstorage/tile/ControllerTile.java | 26 +- ...lStorage.java => ExternalStorageTile.java} | 34 +- .../blockstates/external_storage.json | 142 ++++--- .../assets/refinedstorage/lang/en_us.json | 4 +- .../models/block/external_storage.json | 3 + .../models/item/external_storage.json | 363 ++++++++++++++++++ .../recipes/external_storage.json | 9 +- 34 files changed, 718 insertions(+), 196 deletions(-) rename src/main/java/com/raoulvdberge/refinedstorage/api/storage/externalstorage/{IStorageExternal.java => IExternalStorage.java} (94%) rename src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/{NetworkNodeExternalStorage.java => ExternalStorageNetworkNode.java} (87%) rename src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/externalstorage/{StorageExternalFluid.java => FluidExternalStorage.java} (94%) rename src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/externalstorage/{ExternalStorageCacheFluid.java => FluidExternalStorageCache.java} (98%) rename src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/externalstorage/{ExternalStorageProviderFluid.java => FluidExternalStorageProvider.java} (83%) rename src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/externalstorage/{StorageExternalItem.java => ItemExternalStorage.java} (95%) rename src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/externalstorage/{ExternalStorageCacheItem.java => ItemExternalStorageCache.java} (98%) rename src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/externalstorage/{ExternalStorageProviderItem.java => ItemExternalStorageProvider.java} (76%) create mode 100644 src/main/java/com/raoulvdberge/refinedstorage/screen/ExternalStorageScreen.java rename src/main/java/com/raoulvdberge/refinedstorage/tile/{TileExternalStorage.java => ExternalStorageTile.java} (51%) mode change 100755 => 100644 create mode 100644 src/main/resources/assets/refinedstorage/models/item/external_storage.json rename src/main/resources/{assets => data}/refinedstorage/recipes/external_storage.json (67%) diff --git a/src/main/java/com/raoulvdberge/refinedstorage/ClientSetup.java b/src/main/java/com/raoulvdberge/refinedstorage/ClientSetup.java index c08a83d9b..ce0f03691 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/ClientSetup.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/ClientSetup.java @@ -120,6 +120,7 @@ public class ClientSetup { ScreenManager.registerFactory(RSContainers.GRID, new GridScreenFactory()); ScreenManager.registerFactory(RSContainers.STORAGE_BLOCK, StorageBlockScreen::new); ScreenManager.registerFactory(RSContainers.FLUID_STORAGE_BLOCK, FluidStorageBlockScreen::new); + ScreenManager.registerFactory(RSContainers.EXTERNAL_STORAGE, ExternalStorageScreen::new); ClientRegistry.registerKeyBinding(RSKeyBindings.FOCUS_SEARCH_BAR); ClientRegistry.registerKeyBinding(RSKeyBindings.CLEAR_GRID_CRAFTING_MATRIX); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/RS.java b/src/main/java/com/raoulvdberge/refinedstorage/RS.java index 75bab9f5f..546b8c28b 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/RS.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/RS.java @@ -2,10 +2,12 @@ package com.raoulvdberge.refinedstorage; import com.raoulvdberge.refinedstorage.api.network.grid.GridType; import com.raoulvdberge.refinedstorage.api.network.node.INetworkNode; +import com.raoulvdberge.refinedstorage.api.storage.StorageType; import com.raoulvdberge.refinedstorage.apiimpl.API; import com.raoulvdberge.refinedstorage.apiimpl.network.NetworkNodeListener; import com.raoulvdberge.refinedstorage.apiimpl.network.grid.factory.GridBlockGridFactory; import com.raoulvdberge.refinedstorage.apiimpl.network.node.CableNetworkNode; +import com.raoulvdberge.refinedstorage.apiimpl.network.node.ExternalStorageNetworkNode; import com.raoulvdberge.refinedstorage.apiimpl.network.node.GridNetworkNode; import com.raoulvdberge.refinedstorage.apiimpl.network.node.NetworkNode; import com.raoulvdberge.refinedstorage.apiimpl.network.node.diskdrive.DiskDriveNetworkNode; @@ -15,6 +17,8 @@ import com.raoulvdberge.refinedstorage.apiimpl.storage.FluidStorageType; import com.raoulvdberge.refinedstorage.apiimpl.storage.ItemStorageType; import com.raoulvdberge.refinedstorage.apiimpl.storage.disk.factory.FluidStorageDiskFactory; import com.raoulvdberge.refinedstorage.apiimpl.storage.disk.factory.ItemStorageDiskFactory; +import com.raoulvdberge.refinedstorage.apiimpl.storage.externalstorage.FluidExternalStorageProvider; +import com.raoulvdberge.refinedstorage.apiimpl.storage.externalstorage.ItemExternalStorageProvider; import com.raoulvdberge.refinedstorage.block.*; import com.raoulvdberge.refinedstorage.capability.NetworkNodeProxyCapability; import com.raoulvdberge.refinedstorage.config.ClientConfig; @@ -111,8 +115,13 @@ public final class RS { API.instance().getNetworkNodeRegistry().add(FluidStorageNetworkNode.FOUR_THOUSAND_NINETY_SIX_K_FLUID_STORAGE_BLOCK_ID, (tag, world, pos) -> readAndReturn(tag, new FluidStorageNetworkNode(world, pos, FluidStorageType.FOUR_THOUSAND_NINETY_SIX_K))); API.instance().getNetworkNodeRegistry().add(FluidStorageNetworkNode.CREATIVE_FLUID_STORAGE_BLOCK_ID, (tag, world, pos) -> readAndReturn(tag, new FluidStorageNetworkNode(world, pos, FluidStorageType.CREATIVE))); + API.instance().getNetworkNodeRegistry().add(ExternalStorageNetworkNode.ID, (tag, world, pos) -> readAndReturn(tag, new ExternalStorageNetworkNode(world, pos))); + API.instance().getGridManager().add(GridBlockGridFactory.ID, new GridBlockGridFactory()); + API.instance().addExternalStorageProvider(StorageType.ITEM, new ItemExternalStorageProvider()); + API.instance().addExternalStorageProvider(StorageType.FLUID, new FluidExternalStorageProvider()); + LootFunctionManager.registerFunction(new StorageBlockLootFunctionSerializer()); } @@ -147,6 +156,8 @@ public final class RS { for (FluidStorageType type : FluidStorageType.values()) { e.getRegistry().register(new FluidStorageBlock(type)); } + + e.getRegistry().register(new ExternalStorageBlock()); } @SubscribeEvent @@ -171,6 +182,8 @@ public final class RS { e.getRegistry().register(registerTileDataParameters(TileEntityType.Builder.create(() -> new FluidStorageTile(FluidStorageType.THOUSAND_TWENTY_FOUR_K), RSBlocks.THOUSAND_TWENTY_FOUR_K_FLUID_STORAGE_BLOCK).build(null).setRegistryName(RS.ID, "1024k_fluid_storage_block"))); e.getRegistry().register(registerTileDataParameters(TileEntityType.Builder.create(() -> new FluidStorageTile(FluidStorageType.FOUR_THOUSAND_NINETY_SIX_K), RSBlocks.FOUR_THOUSAND_NINETY_SIX_K_FLUID_STORAGE_BLOCK).build(null).setRegistryName(RS.ID, "4096k_fluid_storage_block"))); e.getRegistry().register(registerTileDataParameters(TileEntityType.Builder.create(() -> new FluidStorageTile(FluidStorageType.CREATIVE), RSBlocks.CREATIVE_FLUID_STORAGE_BLOCK).build(null).setRegistryName(RS.ID, "creative_fluid_storage_block"))); + + e.getRegistry().register(registerTileDataParameters(TileEntityType.Builder.create(ExternalStorageTile::new, RSBlocks.EXTERNAL_STORAGE).build(null).setRegistryName(RS.ID, "external_storage"))); } private TileEntityType registerTileDataParameters(TileEntityType t) { @@ -189,6 +202,7 @@ public final class RS { e.getRegistry().register(IForgeContainerType.create(new GridContainerFactory()).setRegistryName(RS.ID, "grid")); e.getRegistry().register(IForgeContainerType.create(new PositionalTileContainerFactory((windowId, inv, tile) -> new StorageContainer(tile, inv.player, windowId))).setRegistryName(RS.ID, "storage_block")); e.getRegistry().register(IForgeContainerType.create(new PositionalTileContainerFactory((windowId, inv, tile) -> new FluidStorageContainer(tile, inv.player, windowId))).setRegistryName(RS.ID, "fluid_storage_block")); + e.getRegistry().register(IForgeContainerType.create(new PositionalTileContainerFactory((windowId, inv, tile) -> new ExternalStorageContainer(tile, inv.player, windowId))).setRegistryName(RS.ID, "external_storage")); } @SubscribeEvent @@ -255,6 +269,8 @@ public final class RS { e.getRegistry().register(new FluidStorageBlockItem(RSBlocks.THOUSAND_TWENTY_FOUR_K_FLUID_STORAGE_BLOCK)); e.getRegistry().register(new FluidStorageBlockItem(RSBlocks.FOUR_THOUSAND_NINETY_SIX_K_FLUID_STORAGE_BLOCK)); e.getRegistry().register(new FluidStorageBlockItem(RSBlocks.CREATIVE_FLUID_STORAGE_BLOCK)); + + e.getRegistry().register(BlockUtils.createBlockItemFor(RSBlocks.EXTERNAL_STORAGE)); } /* TODO diff --git a/src/main/java/com/raoulvdberge/refinedstorage/RSBlocks.java b/src/main/java/com/raoulvdberge/refinedstorage/RSBlocks.java index 4c1ac8288..e75257cc2 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/RSBlocks.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/RSBlocks.java @@ -4,7 +4,6 @@ import com.raoulvdberge.refinedstorage.block.*; import net.minecraftforge.registries.ObjectHolder; public final class RSBlocks { - public static final ExternalStorageBlock EXTERNAL_STORAGE = new ExternalStorageBlock(); public static final BlockImporter IMPORTER = new BlockImporter(); public static final BlockExporter EXPORTER = new BlockExporter(); public static final BlockDetector DETECTOR = new BlockDetector(); @@ -71,6 +70,9 @@ public final class RSBlocks { @ObjectHolder(RS.ID + ":creative_fluid_storage_block") public static final FluidStorageBlock CREATIVE_FLUID_STORAGE_BLOCK = null; + @ObjectHolder(RS.ID + ":external_storage") + public static final ExternalStorageBlock EXTERNAL_STORAGE = null; + public static final BlockStorageMonitor STORAGE_MONITOR = new BlockStorageMonitor(); public static final BlockPortableGrid PORTABLE_GRID = new BlockPortableGrid(); public static final BlockCrafterManager CRAFTER_MANAGER = new BlockCrafterManager(); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/RSContainers.java b/src/main/java/com/raoulvdberge/refinedstorage/RSContainers.java index c24b485ae..090fa1bc5 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/RSContainers.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/RSContainers.java @@ -29,7 +29,8 @@ public final class RSContainers { public static final ContainerType DISK_MANIPULATOR = null; //@ObjectHolder(RS.ID + ":exporter") public static final ContainerType EXPORTER = null; - //@ObjectHolder(RS.ID + ":external_storage") + + @ObjectHolder(RS.ID + ":external_storage") public static final ContainerType EXTERNAL_STORAGE = null; @ObjectHolder(RS.ID + ":filter") diff --git a/src/main/java/com/raoulvdberge/refinedstorage/RSOldConfig.java b/src/main/java/com/raoulvdberge/refinedstorage/RSOldConfig.java index 1902110ee..aa8941be0 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/RSOldConfig.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/RSOldConfig.java @@ -9,8 +9,6 @@ public class RSOldConfig { public int crafterManagerUsage; public int destructorUsage; public int detectorUsage; - public int externalStorageUsage; - public int externalStoragePerStorageUsage; public int exporterUsage; public int importerUsage; public int interfaceUsage; @@ -91,8 +89,6 @@ public class RSOldConfig { crafterManagerUsage = config.getInt("crafterManager", ENERGY, 4, 0, Integer.MAX_VALUE, "The energy used by Crafter Managers"); destructorUsage = config.getInt("destructor", ENERGY, 1, 0, Integer.MAX_VALUE, "The energy used by Destructors"); detectorUsage = config.getInt("detector", ENERGY, 2, 0, Integer.MAX_VALUE, "The energy used by Detectors"); - externalStorageUsage = config.getInt("externalStorage", ENERGY, 0, 0, Integer.MAX_VALUE, "The base energy used by External Storages"); - externalStoragePerStorageUsage = config.getInt("externalStoragePerStorage", ENERGY, 1, 0, Integer.MAX_VALUE, "The additional energy used per connected storage to an External Storage"); exporterUsage = config.getInt("exporter", ENERGY, 1, 0, Integer.MAX_VALUE, "The energy used by Exporters"); importerUsage = config.getInt("importer", ENERGY, 1, 0, Integer.MAX_VALUE, "The energy used by Importers"); interfaceUsage = config.getInt("interface", ENERGY, 3, 0, Integer.MAX_VALUE, "The energy used by Interfaces"); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/RSTiles.java b/src/main/java/com/raoulvdberge/refinedstorage/RSTiles.java index 6c8ddd4b8..ff47af96e 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/RSTiles.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/RSTiles.java @@ -35,8 +35,10 @@ public class RSTiles { public static final TileEntityType DISK_MANIPULATOR = null; //@ObjectHolder(RS.ID + ":exporter") public static final TileEntityType EXPORTER = null; - //@ObjectHolder(RS.ID + ":external_storage") - public static final TileEntityType EXTERNAL_STORAGE = null; + + @ObjectHolder(RS.ID + ":external_storage") + public static final TileEntityType EXTERNAL_STORAGE = null; + //@ObjectHolder(RS.ID + ":fluid_interface") public static final TileEntityType FLUID_INTERFACE = null; diff --git a/src/main/java/com/raoulvdberge/refinedstorage/api/storage/externalstorage/IStorageExternal.java b/src/main/java/com/raoulvdberge/refinedstorage/api/storage/externalstorage/IExternalStorage.java similarity index 94% rename from src/main/java/com/raoulvdberge/refinedstorage/api/storage/externalstorage/IStorageExternal.java rename to src/main/java/com/raoulvdberge/refinedstorage/api/storage/externalstorage/IExternalStorage.java index 2bb5cc87d..cf1489589 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/api/storage/externalstorage/IStorageExternal.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/api/storage/externalstorage/IExternalStorage.java @@ -9,7 +9,7 @@ import com.raoulvdberge.refinedstorage.api.storage.cache.IStorageCache; * * @param */ -public interface IStorageExternal extends IStorage { +public interface IExternalStorage extends IStorage { /** * For storage disks and blocks, the network detects changes and updates the {@link IStorageCache} accordingly. * However, for blocks connected to an external storage the external storage itself is responsible for bookkeeping the changes diff --git a/src/main/java/com/raoulvdberge/refinedstorage/api/storage/externalstorage/IExternalStorageProvider.java b/src/main/java/com/raoulvdberge/refinedstorage/api/storage/externalstorage/IExternalStorageProvider.java index a60660add..bcad4e758 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/api/storage/externalstorage/IExternalStorageProvider.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/api/storage/externalstorage/IExternalStorageProvider.java @@ -26,7 +26,7 @@ public interface IExternalStorageProvider { * @return the external storage handler */ @Nonnull - IStorageExternal provide(IExternalStorageContext context, Supplier tile, Direction direction); + IExternalStorage provide(IExternalStorageContext context, Supplier tile, Direction direction); /** * Returns the priority of this external storage provider. diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeExternalStorage.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/ExternalStorageNetworkNode.java similarity index 87% rename from src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeExternalStorage.java rename to src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/ExternalStorageNetworkNode.java index 85b787594..4375d294f 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeExternalStorage.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/ExternalStorageNetworkNode.java @@ -6,9 +6,9 @@ import com.raoulvdberge.refinedstorage.api.storage.AccessType; import com.raoulvdberge.refinedstorage.api.storage.IStorage; import com.raoulvdberge.refinedstorage.api.storage.IStorageProvider; import com.raoulvdberge.refinedstorage.api.storage.StorageType; +import com.raoulvdberge.refinedstorage.api.storage.externalstorage.IExternalStorage; import com.raoulvdberge.refinedstorage.api.storage.externalstorage.IExternalStorageContext; import com.raoulvdberge.refinedstorage.api.storage.externalstorage.IExternalStorageProvider; -import com.raoulvdberge.refinedstorage.api.storage.externalstorage.IStorageExternal; import com.raoulvdberge.refinedstorage.api.util.IComparer; import com.raoulvdberge.refinedstorage.apiimpl.API; import com.raoulvdberge.refinedstorage.apiimpl.storage.cache.FluidStorageCache; @@ -16,7 +16,7 @@ import com.raoulvdberge.refinedstorage.apiimpl.storage.cache.ItemStorageCache; import com.raoulvdberge.refinedstorage.inventory.fluid.FluidInventory; import com.raoulvdberge.refinedstorage.inventory.item.BaseItemHandler; import com.raoulvdberge.refinedstorage.inventory.listener.NetworkNodeListener; -import com.raoulvdberge.refinedstorage.tile.TileExternalStorage; +import com.raoulvdberge.refinedstorage.tile.ExternalStorageTile; import com.raoulvdberge.refinedstorage.tile.config.*; import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter; import com.raoulvdberge.refinedstorage.util.AccessTypeUtils; @@ -24,6 +24,7 @@ import com.raoulvdberge.refinedstorage.util.StackUtils; import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompoundNBT; import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.Direction; import net.minecraft.util.ResourceLocation; import net.minecraft.util.math.BlockPos; import net.minecraft.util.text.ITextComponent; @@ -35,7 +36,7 @@ import net.minecraftforge.items.IItemHandlerModifiable; import java.util.List; import java.util.concurrent.CopyOnWriteArrayList; -public class NetworkNodeExternalStorage extends NetworkNode implements IStorageProvider, IStorageScreen, IComparable, IWhitelistBlacklist, IPrioritizable, IType, IAccessType, IExternalStorageContext { +public class ExternalStorageNetworkNode extends NetworkNode implements IStorageProvider, IStorageScreen, IComparable, IWhitelistBlacklist, IPrioritizable, IType, IAccessType, IExternalStorageContext { public static final ResourceLocation ID = new ResourceLocation(RS.ID, "external_storage"); private static final String NBT_PRIORITY = "Priority"; @@ -54,16 +55,16 @@ public class NetworkNodeExternalStorage extends NetworkNode implements IStorageP private AccessType accessType = AccessType.INSERT_EXTRACT; private int networkTicks; - private List> itemStorages = new CopyOnWriteArrayList<>(); - private List> fluidStorages = new CopyOnWriteArrayList<>(); + private List> itemStorages = new CopyOnWriteArrayList<>(); + private List> fluidStorages = new CopyOnWriteArrayList<>(); - public NetworkNodeExternalStorage(World world, BlockPos pos) { + public ExternalStorageNetworkNode(World world, BlockPos pos) { super(world, pos); } @Override public int getEnergyUsage() { - return RS.INSTANCE.config.externalStorageUsage + ((itemStorages.size() + fluidStorages.size()) * RS.INSTANCE.config.externalStoragePerStorageUsage); + return RS.SERVER_CONFIG.getExternalStorage().getUsage(); } @Override @@ -84,19 +85,19 @@ public class NetworkNodeExternalStorage extends NetworkNode implements IStorageP return; } - for (IStorageExternal storage : itemStorages) { + for (IExternalStorage storage : itemStorages) { storage.update(network); } - for (IStorageExternal storage : fluidStorages) { + for (IExternalStorage storage : fluidStorages) { storage.update(network); } } } - // @TODO @Override - protected void onDirectionChanged() { - // super.onDirectionChanged(); + @Override + public void onDirectionChanged(Direction direction) { + super.onDirectionChanged(direction); if (network != null) { updateStorage(network); @@ -243,37 +244,37 @@ public class NetworkNodeExternalStorage extends NetworkNode implements IStorageP @Override public TileDataParameter getRedstoneModeParameter() { - return TileExternalStorage.REDSTONE_MODE; + return ExternalStorageTile.REDSTONE_MODE; } @Override public TileDataParameter getCompareParameter() { - return TileExternalStorage.COMPARE; + return ExternalStorageTile.COMPARE; } @Override public TileDataParameter getWhitelistBlacklistParameter() { - return TileExternalStorage.WHITELIST_BLACKLIST; + return ExternalStorageTile.WHITELIST_BLACKLIST; } @Override public TileDataParameter getPriorityParameter() { - return TileExternalStorage.PRIORITY; + return ExternalStorageTile.PRIORITY; } @Override public TileDataParameter getAccessTypeParameter() { - return TileExternalStorage.ACCESS_TYPE; + return ExternalStorageTile.ACCESS_TYPE; } @Override public long getStored() { - return TileExternalStorage.STORED.getValue(); + return ExternalStorageTile.STORED.getValue(); } @Override public long getCapacity() { - return TileExternalStorage.CAPACITY.getValue(); + return ExternalStorageTile.CAPACITY.getValue(); } @Override @@ -305,12 +306,12 @@ public class NetworkNodeExternalStorage extends NetworkNode implements IStorageP @Override public TileDataParameter getTypeParameter() { - return TileExternalStorage.TYPE; + return ExternalStorageTile.TYPE; } @Override public int getType() { - return world.isRemote ? TileExternalStorage.TYPE.getValue() : type; + return world.isRemote ? ExternalStorageTile.TYPE.getValue() : type; } @Override @@ -334,11 +335,11 @@ public class NetworkNodeExternalStorage extends NetworkNode implements IStorageP return fluidFilters; } - public List> getItemStorages() { + public List> getItemStorages() { return itemStorages; } - public List> getFluidStorages() { + public List> getFluidStorages() { return fluidStorages; } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNode.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNode.java index b37d6883b..2096928fb 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNode.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNode.java @@ -38,7 +38,7 @@ public abstract class NetworkNode implements INetworkNode, INetworkNodeVisitor { protected UUID owner; protected String version; - private Direction direction = Direction.NORTH; + private Direction direction; // Disable throttling for the first tick. // This is to make sure couldUpdate is going to be correctly set. @@ -242,6 +242,10 @@ public abstract class NetworkNode implements INetworkNode, INetworkNodeVisitor { return direction; } + public void onDirectionChanged(Direction direction) { + this.direction = direction; + } + @Nullable public IItemHandler getDrops() { return null; diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeFluidInterface.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeFluidInterface.java index c71a80922..64686f7d3 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeFluidInterface.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeFluidInterface.java @@ -5,7 +5,7 @@ import com.raoulvdberge.refinedstorage.api.network.node.INetworkNode; import com.raoulvdberge.refinedstorage.api.util.Action; import com.raoulvdberge.refinedstorage.api.util.IComparer; import com.raoulvdberge.refinedstorage.apiimpl.API; -import com.raoulvdberge.refinedstorage.apiimpl.storage.externalstorage.StorageExternalFluid; +import com.raoulvdberge.refinedstorage.apiimpl.storage.externalstorage.FluidExternalStorage; import com.raoulvdberge.refinedstorage.inventory.fluid.FluidInventory; import com.raoulvdberge.refinedstorage.inventory.fluid.ProxyFluidHandler; import com.raoulvdberge.refinedstorage.inventory.item.BaseItemHandler; @@ -123,7 +123,7 @@ public class NetworkNodeFluidInterface extends NetworkNode { // If we are an interface acting as a storage, we don't want to extract from other interfaces to // avoid stealing from each other. - return !(s instanceof StorageExternalFluid) || !((StorageExternalFluid) s).isConnectedToInterface(); + return !(s instanceof FluidExternalStorage) || !((FluidExternalStorage) s).isConnectedToInterface(); }); if (result != null) { @@ -162,10 +162,10 @@ public class NetworkNodeFluidInterface extends NetworkNode { for (Direction facing : Direction.values()) { INetworkNode facingNode = API.instance().getNetworkNodeManager((ServerWorld) world).getNode(pos.offset(facing)); - if (facingNode instanceof NetworkNodeExternalStorage && + if (facingNode instanceof ExternalStorageNetworkNode && facingNode.canUpdate() && - ((NetworkNodeExternalStorage) facingNode).getDirection() == facing.getOpposite() && - ((NetworkNodeExternalStorage) facingNode).getType() == IType.FLUIDS) { + ((ExternalStorageNetworkNode) facingNode).getDirection() == facing.getOpposite() && + ((ExternalStorageNetworkNode) facingNode).getType() == IType.FLUIDS) { return true; } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeInterface.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeInterface.java index 9b725af4a..b6086e8bb 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeInterface.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeInterface.java @@ -5,7 +5,7 @@ import com.raoulvdberge.refinedstorage.api.network.node.INetworkNode; import com.raoulvdberge.refinedstorage.api.util.Action; import com.raoulvdberge.refinedstorage.api.util.IComparer; import com.raoulvdberge.refinedstorage.apiimpl.API; -import com.raoulvdberge.refinedstorage.apiimpl.storage.externalstorage.StorageExternalItem; +import com.raoulvdberge.refinedstorage.apiimpl.storage.externalstorage.ItemExternalStorage; import com.raoulvdberge.refinedstorage.inventory.item.BaseItemHandler; import com.raoulvdberge.refinedstorage.inventory.item.ProxyItemHandler; import com.raoulvdberge.refinedstorage.inventory.item.UpgradeItemHandler; @@ -105,7 +105,7 @@ public class NetworkNodeInterface extends NetworkNode implements IComparable { // If we are an interface acting as a storage, we don't want to extract from other interfaces to // avoid stealing from each other. - return !(s instanceof StorageExternalItem) || !((StorageExternalItem) s).isConnectedToInterface(); + return !(s instanceof ItemExternalStorage) || !((ItemExternalStorage) s).isConnectedToInterface(); }); if (result != null) { @@ -140,10 +140,10 @@ public class NetworkNodeInterface extends NetworkNode implements IComparable { for (Direction facing : Direction.values()) { INetworkNode facingNode = API.instance().getNetworkNodeManager((ServerWorld) world).getNode(pos.offset(facing)); - if (facingNode instanceof NetworkNodeExternalStorage && + if (facingNode instanceof ExternalStorageNetworkNode && facingNode.canUpdate() && - ((NetworkNodeExternalStorage) facingNode).getDirection() == facing.getOpposite() && - ((NetworkNodeExternalStorage) facingNode).getType() == IType.ITEMS) { + ((ExternalStorageNetworkNode) facingNode).getDirection() == facing.getOpposite() && + ((ExternalStorageNetworkNode) facingNode).getType() == IType.ITEMS) { return true; } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/externalstorage/StorageExternalFluid.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/externalstorage/FluidExternalStorage.java similarity index 94% rename from src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/externalstorage/StorageExternalFluid.java rename to src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/externalstorage/FluidExternalStorage.java index d9c7aee1d..6143d5f4a 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/externalstorage/StorageExternalFluid.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/externalstorage/FluidExternalStorage.java @@ -2,8 +2,8 @@ package com.raoulvdberge.refinedstorage.apiimpl.storage.externalstorage; import com.raoulvdberge.refinedstorage.api.network.INetwork; import com.raoulvdberge.refinedstorage.api.storage.AccessType; +import com.raoulvdberge.refinedstorage.api.storage.externalstorage.IExternalStorage; import com.raoulvdberge.refinedstorage.api.storage.externalstorage.IExternalStorageContext; -import com.raoulvdberge.refinedstorage.api.storage.externalstorage.IStorageExternal; import com.raoulvdberge.refinedstorage.api.util.Action; import com.raoulvdberge.refinedstorage.util.StackUtils; import net.minecraftforge.fluids.FluidStack; @@ -17,13 +17,13 @@ import java.util.Collections; import java.util.List; import java.util.function.Supplier; -public class StorageExternalFluid implements IStorageExternal { +public class FluidExternalStorage implements IExternalStorage { private IExternalStorageContext context; private Supplier handlerSupplier; private boolean connectedToInterface; - private ExternalStorageCacheFluid cache = new ExternalStorageCacheFluid(); + private FluidExternalStorageCache cache = new FluidExternalStorageCache(); - public StorageExternalFluid(IExternalStorageContext context, Supplier handlerSupplier, boolean connectedToInterface) { + public FluidExternalStorage(IExternalStorageContext context, Supplier handlerSupplier, boolean connectedToInterface) { this.context = context; this.handlerSupplier = handlerSupplier; this.connectedToInterface = connectedToInterface; diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/externalstorage/ExternalStorageCacheFluid.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/externalstorage/FluidExternalStorageCache.java similarity index 98% rename from src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/externalstorage/ExternalStorageCacheFluid.java rename to src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/externalstorage/FluidExternalStorageCache.java index f8eda1d9c..2f4fad250 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/externalstorage/ExternalStorageCacheFluid.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/externalstorage/FluidExternalStorageCache.java @@ -10,7 +10,7 @@ import javax.annotation.Nullable; import java.util.ArrayList; import java.util.List; -public class ExternalStorageCacheFluid { +public class FluidExternalStorageCache { private List cache; public void update(INetwork network, @Nullable IFluidHandler handler) { diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/externalstorage/ExternalStorageProviderFluid.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/externalstorage/FluidExternalStorageProvider.java similarity index 83% rename from src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/externalstorage/ExternalStorageProviderFluid.java rename to src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/externalstorage/FluidExternalStorageProvider.java index 48e930229..b30eba540 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/externalstorage/ExternalStorageProviderFluid.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/externalstorage/FluidExternalStorageProvider.java @@ -1,8 +1,8 @@ package com.raoulvdberge.refinedstorage.apiimpl.storage.externalstorage; +import com.raoulvdberge.refinedstorage.api.storage.externalstorage.IExternalStorage; import com.raoulvdberge.refinedstorage.api.storage.externalstorage.IExternalStorageContext; import com.raoulvdberge.refinedstorage.api.storage.externalstorage.IExternalStorageProvider; -import com.raoulvdberge.refinedstorage.api.storage.externalstorage.IStorageExternal; import com.raoulvdberge.refinedstorage.tile.TileFluidInterface; import com.raoulvdberge.refinedstorage.util.WorldUtils; import net.minecraft.tileentity.TileEntity; @@ -12,7 +12,7 @@ import net.minecraftforge.fluids.FluidStack; import javax.annotation.Nonnull; import java.util.function.Supplier; -public class ExternalStorageProviderFluid implements IExternalStorageProvider { +public class FluidExternalStorageProvider implements IExternalStorageProvider { @Override public boolean canProvide(TileEntity tile, Direction direction) { return WorldUtils.getFluidHandler(tile, direction.getOpposite()) != null; @@ -20,8 +20,8 @@ public class ExternalStorageProviderFluid implements IExternalStorageProvider provide(IExternalStorageContext context, Supplier tile, Direction direction) { - return new StorageExternalFluid(context, () -> WorldUtils.getFluidHandler(tile.get(), direction.getOpposite()), tile.get() instanceof TileFluidInterface); + public IExternalStorage provide(IExternalStorageContext context, Supplier tile, Direction direction) { + return new FluidExternalStorage(context, () -> WorldUtils.getFluidHandler(tile.get(), direction.getOpposite()), tile.get() instanceof TileFluidInterface); } @Override diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/externalstorage/StorageExternalItem.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/externalstorage/ItemExternalStorage.java similarity index 95% rename from src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/externalstorage/StorageExternalItem.java rename to src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/externalstorage/ItemExternalStorage.java index f1f5d2449..c628c4a69 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/externalstorage/StorageExternalItem.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/externalstorage/ItemExternalStorage.java @@ -2,8 +2,8 @@ package com.raoulvdberge.refinedstorage.apiimpl.storage.externalstorage; import com.raoulvdberge.refinedstorage.api.network.INetwork; import com.raoulvdberge.refinedstorage.api.storage.AccessType; +import com.raoulvdberge.refinedstorage.api.storage.externalstorage.IExternalStorage; import com.raoulvdberge.refinedstorage.api.storage.externalstorage.IExternalStorageContext; -import com.raoulvdberge.refinedstorage.api.storage.externalstorage.IStorageExternal; import com.raoulvdberge.refinedstorage.api.util.Action; import com.raoulvdberge.refinedstorage.apiimpl.API; import com.raoulvdberge.refinedstorage.util.StackUtils; @@ -19,13 +19,13 @@ import java.util.Collections; import java.util.List; import java.util.function.Supplier; -public class StorageExternalItem implements IStorageExternal { +public class ItemExternalStorage implements IExternalStorage { private IExternalStorageContext context; private Supplier handlerSupplier; private boolean connectedToInterface; - private ExternalStorageCacheItem cache = new ExternalStorageCacheItem(); + private ItemExternalStorageCache cache = new ItemExternalStorageCache(); - public StorageExternalItem(IExternalStorageContext context, Supplier handlerSupplier, boolean connectedToInterface) { + public ItemExternalStorage(IExternalStorageContext context, Supplier handlerSupplier, boolean connectedToInterface) { this.context = context; this.handlerSupplier = handlerSupplier; this.connectedToInterface = connectedToInterface; diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/externalstorage/ExternalStorageCacheItem.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/externalstorage/ItemExternalStorageCache.java similarity index 98% rename from src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/externalstorage/ExternalStorageCacheItem.java rename to src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/externalstorage/ItemExternalStorageCache.java index e3048a3cb..c4c2cae32 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/externalstorage/ExternalStorageCacheItem.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/externalstorage/ItemExternalStorageCache.java @@ -9,7 +9,7 @@ import javax.annotation.Nullable; import java.util.ArrayList; import java.util.List; -public class ExternalStorageCacheItem { +public class ItemExternalStorageCache { private List cache; public void update(INetwork network, @Nullable IItemHandler handler) { diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/externalstorage/ExternalStorageProviderItem.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/externalstorage/ItemExternalStorageProvider.java similarity index 76% rename from src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/externalstorage/ExternalStorageProviderItem.java rename to src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/externalstorage/ItemExternalStorageProvider.java index 30209f781..d13a9bc8a 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/externalstorage/ExternalStorageProviderItem.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/externalstorage/ItemExternalStorageProvider.java @@ -2,9 +2,9 @@ package com.raoulvdberge.refinedstorage.apiimpl.storage.externalstorage; import com.raoulvdberge.refinedstorage.api.network.node.INetworkNodeProxy; import com.raoulvdberge.refinedstorage.api.storage.IStorageProvider; +import com.raoulvdberge.refinedstorage.api.storage.externalstorage.IExternalStorage; import com.raoulvdberge.refinedstorage.api.storage.externalstorage.IExternalStorageContext; import com.raoulvdberge.refinedstorage.api.storage.externalstorage.IExternalStorageProvider; -import com.raoulvdberge.refinedstorage.api.storage.externalstorage.IStorageExternal; import com.raoulvdberge.refinedstorage.capability.NetworkNodeProxyCapability; import com.raoulvdberge.refinedstorage.tile.TileInterface; import com.raoulvdberge.refinedstorage.util.WorldUtils; @@ -15,22 +15,22 @@ import net.minecraft.util.Direction; import javax.annotation.Nonnull; import java.util.function.Supplier; -public class ExternalStorageProviderItem implements IExternalStorageProvider { +public class ItemExternalStorageProvider implements IExternalStorageProvider { @Override public boolean canProvide(TileEntity tile, Direction direction) { INetworkNodeProxy nodeProxy = tile.getCapability(NetworkNodeProxyCapability.NETWORK_NODE_PROXY_CAPABILITY, direction.getOpposite()).orElse(null); - if (!(nodeProxy != null && nodeProxy.getNode() instanceof IStorageProvider)) { // TODO: Correct if still? - return WorldUtils.getItemHandler(tile, direction.getOpposite()) != null; + if (nodeProxy != null && nodeProxy.getNode() instanceof IStorageProvider) { + return false; } - return false; + return WorldUtils.getItemHandler(tile, direction.getOpposite()) != null; } @Nonnull @Override - public IStorageExternal provide(IExternalStorageContext context, Supplier tile, Direction direction) { - return new StorageExternalItem(context, () -> WorldUtils.getItemHandler(tile.get(), direction.getOpposite()), tile.get() instanceof TileInterface); + public IExternalStorage provide(IExternalStorageContext context, Supplier tile, Direction direction) { + return new ItemExternalStorage(context, () -> WorldUtils.getItemHandler(tile.get(), direction.getOpposite()), tile.get() instanceof TileInterface); } @Override diff --git a/src/main/java/com/raoulvdberge/refinedstorage/block/BaseBlock.java b/src/main/java/com/raoulvdberge/refinedstorage/block/BaseBlock.java index 03870828f..90f9dc01c 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/block/BaseBlock.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/block/BaseBlock.java @@ -4,7 +4,10 @@ import com.raoulvdberge.refinedstorage.block.info.BlockDirection; import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.state.StateContainer; +import net.minecraft.util.Direction; import net.minecraft.util.Rotation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; public abstract class BaseBlock extends Block { public BaseBlock(Properties properties) { @@ -20,12 +23,29 @@ public abstract class BaseBlock extends Block { public BlockState rotate(BlockState state, Rotation rot) { BlockDirection dir = getDirection(); if (dir != BlockDirection.NONE) { - return state.with(dir.getProperty(), dir.cycle(state.get(dir.getProperty()))); + Direction newDirection = dir.cycle(state.get(dir.getProperty())); + + return state.with(dir.getProperty(), newDirection); } return super.rotate(state, rot); } + protected void onDirectionChanged(World world, BlockPos pos, Direction newDirection) { + } + + @Override + @SuppressWarnings("deprecation") + public void onReplaced(BlockState state, World world, BlockPos pos, BlockState newState, boolean isMoving) { + super.onReplaced(state, world, pos, newState, isMoving); + + if (getDirection() != BlockDirection.NONE && + state.getBlock() == newState.getBlock() && + state.get(getDirection().getProperty()) != newState.get(getDirection().getProperty())) { + onDirectionChanged(world, pos, newState.get(getDirection().getProperty())); + } + } + @Override protected void fillStateContainer(StateContainer.Builder builder) { super.fillStateContainer(builder); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/block/CableBlock.java b/src/main/java/com/raoulvdberge/refinedstorage/block/CableBlock.java index b147ae984..2df5042ab 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/block/CableBlock.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/block/CableBlock.java @@ -22,12 +22,12 @@ import net.minecraft.world.World; import javax.annotation.Nullable; public class CableBlock extends NodeBlock { - protected static final BooleanProperty NORTH = BooleanProperty.create("north"); - protected static final BooleanProperty EAST = BooleanProperty.create("east"); - protected static final BooleanProperty SOUTH = BooleanProperty.create("south"); - protected static final BooleanProperty WEST = BooleanProperty.create("west"); - protected static final BooleanProperty UP = BooleanProperty.create("up"); - protected static final BooleanProperty DOWN = BooleanProperty.create("down"); + private static final BooleanProperty NORTH = BooleanProperty.create("north"); + private static final BooleanProperty EAST = BooleanProperty.create("east"); + private static final BooleanProperty SOUTH = BooleanProperty.create("south"); + private static final BooleanProperty WEST = BooleanProperty.create("west"); + private static final BooleanProperty UP = BooleanProperty.create("up"); + private static final BooleanProperty DOWN = BooleanProperty.create("down"); private static final VoxelShape SHAPE_CORE = makeCuboidShape(6, 6, 6, 10, 10, 10); private static final VoxelShape SHAPE_NORTH = makeCuboidShape(6, 6, 0, 10, 10, 6); @@ -53,7 +53,7 @@ public class CableBlock extends NodeBlock { public void neighborChanged(BlockState state, World world, BlockPos pos, Block block, BlockPos fromPos, boolean isMoving) { super.neighborChanged(state, world, pos, block, fromPos, isMoving); - world.setBlockState(pos, getState(world, pos)); + world.setBlockState(pos, getState(state, world, pos)); } @Override @@ -91,7 +91,7 @@ public class CableBlock extends NodeBlock { @Nullable @Override public BlockState getStateForPlacement(BlockItemUseContext ctx) { - return getState(ctx.getWorld(), ctx.getPos()); + return getState(getDefaultState(), ctx.getWorld(), ctx.getPos()); } private static boolean hasNode(World world, BlockPos pos, Direction direction) { @@ -103,7 +103,7 @@ public class CableBlock extends NodeBlock { return tile.getCapability(NetworkNodeProxyCapability.NETWORK_NODE_PROXY_CAPABILITY, direction).isPresent(); } - private BlockState getState(World world, BlockPos pos) { + private BlockState getState(BlockState currentState, World world, BlockPos pos) { boolean north = hasNode(world, pos.offset(Direction.NORTH), Direction.SOUTH); boolean east = hasNode(world, pos.offset(Direction.EAST), Direction.WEST); boolean south = hasNode(world, pos.offset(Direction.SOUTH), Direction.NORTH); @@ -111,7 +111,7 @@ public class CableBlock extends NodeBlock { boolean up = hasNode(world, pos.offset(Direction.UP), Direction.DOWN); boolean down = hasNode(world, pos.offset(Direction.DOWN), Direction.UP); - return getDefaultState() + return currentState .with(NORTH, north) .with(EAST, east) .with(SOUTH, south) diff --git a/src/main/java/com/raoulvdberge/refinedstorage/block/ExternalStorageBlock.java b/src/main/java/com/raoulvdberge/refinedstorage/block/ExternalStorageBlock.java index 3b529ce28..8d4b3a6af 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/block/ExternalStorageBlock.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/block/ExternalStorageBlock.java @@ -2,13 +2,28 @@ package com.raoulvdberge.refinedstorage.block; import com.raoulvdberge.refinedstorage.RS; import com.raoulvdberge.refinedstorage.block.info.BlockDirection; +import com.raoulvdberge.refinedstorage.container.ExternalStorageContainer; +import com.raoulvdberge.refinedstorage.container.factory.PositionalTileContainerProvider; +import com.raoulvdberge.refinedstorage.tile.ExternalStorageTile; import com.raoulvdberge.refinedstorage.util.BlockUtils; +import com.raoulvdberge.refinedstorage.util.NetworkUtils; import net.minecraft.block.BlockState; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.entity.player.ServerPlayerEntity; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.Direction; +import net.minecraft.util.Hand; import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.BlockRayTraceResult; import net.minecraft.util.math.shapes.ISelectionContext; import net.minecraft.util.math.shapes.VoxelShape; import net.minecraft.util.math.shapes.VoxelShapes; +import net.minecraft.util.text.TranslationTextComponent; import net.minecraft.world.IBlockReader; +import net.minecraft.world.World; +import net.minecraftforge.fml.network.NetworkHooks; + +import javax.annotation.Nullable; public class ExternalStorageBlock extends CableBlock { private static final VoxelShape HEAD_NORTH = makeCuboidShape(3, 3, 0, 13, 13, 2); @@ -33,33 +48,59 @@ public class ExternalStorageBlock extends CableBlock { public VoxelShape getShape(BlockState state, IBlockReader world, BlockPos pos, ISelectionContext ctx) { VoxelShape shape = super.getShape(state, world, pos, ctx); - if (state.get(NORTH)) { + Direction direction = state.get(getDirection().getProperty()); + + if (direction == Direction.NORTH) { shape = VoxelShapes.or(shape, HEAD_NORTH); } - if (state.get(EAST)) { + if (direction == Direction.EAST) { shape = VoxelShapes.or(shape, HEAD_EAST); } - if (state.get(SOUTH)) { + if (direction == Direction.SOUTH) { shape = VoxelShapes.or(shape, HEAD_SOUTH); } - if (state.get(WEST)) { + if (direction == Direction.WEST) { shape = VoxelShapes.or(shape, HEAD_WEST); } - if (state.get(UP)) { + if (direction == Direction.UP) { shape = VoxelShapes.or(shape, HEAD_UP); } - if (state.get(DOWN)) { + if (direction == Direction.DOWN) { shape = VoxelShapes.or(shape, HEAD_DOWN); } return shape; } + @Nullable + @Override + public TileEntity createTileEntity(BlockState state, IBlockReader world) { + return new ExternalStorageTile(); + } + + @Override + @SuppressWarnings("deprecation") + public boolean onBlockActivated(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand handIn, BlockRayTraceResult hit) { + if (!world.isRemote) { + return NetworkUtils.attemptModify(world, pos, hit.getFace(), player, () -> NetworkHooks.openGui( + (ServerPlayerEntity) player, + new PositionalTileContainerProvider( + new TranslationTextComponent("gui.refinedstorage.external_storage"), + (tile, windowId, inventory, p) -> new ExternalStorageContainer(tile, player, windowId), + pos + ), + pos + )); + } + + return true; + } + /* TODO @Override public boolean onBlockActivated(World world, BlockPos pos, BlockState state, PlayerEntity player, EnumHand hand, Direction side, float hitX, float hitY, float hitZ) { diff --git a/src/main/java/com/raoulvdberge/refinedstorage/block/NodeBlock.java b/src/main/java/com/raoulvdberge/refinedstorage/block/NodeBlock.java index eafea835b..27d55dfae 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/block/NodeBlock.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/block/NodeBlock.java @@ -1,5 +1,8 @@ package com.raoulvdberge.refinedstorage.block; +import com.raoulvdberge.refinedstorage.api.network.node.INetworkNode; +import com.raoulvdberge.refinedstorage.api.network.node.INetworkNodeProxy; +import com.raoulvdberge.refinedstorage.apiimpl.network.node.NetworkNode; import com.raoulvdberge.refinedstorage.tile.NetworkNodeTile; import net.minecraft.block.Block; import net.minecraft.block.BlockState; @@ -8,6 +11,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.state.BooleanProperty; import net.minecraft.state.StateContainer; import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.Direction; import net.minecraft.util.NonNullList; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; @@ -27,6 +31,8 @@ public abstract class NodeBlock extends BaseBlock { @Override @SuppressWarnings("deprecation") public void onReplaced(BlockState state, World worldIn, BlockPos pos, BlockState newState, boolean isMoving) { + super.onReplaced(state, worldIn, pos, newState, isMoving); + if (state.getBlock() != newState.getBlock()) { TileEntity tile = worldIn.getTileEntity(pos); @@ -43,8 +49,20 @@ public abstract class NodeBlock extends BaseBlock { InventoryHelper.dropItems(worldIn, pos, drops); } } + } + } - super.onReplaced(state, worldIn, pos, newState, isMoving); + @Override + protected void onDirectionChanged(World world, BlockPos pos, Direction newDirection) { + super.onDirectionChanged(world, pos, newDirection); + + TileEntity tile = world.getTileEntity(pos); + if (tile instanceof INetworkNodeProxy) { + INetworkNode node = ((INetworkNodeProxy) tile).getNode(); + + if (node instanceof NetworkNode) { + ((NetworkNode) node).onDirectionChanged(newDirection); + } } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/config/ServerConfig.java b/src/main/java/com/raoulvdberge/refinedstorage/config/ServerConfig.java index ffb2710a2..061494a46 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/config/ServerConfig.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/config/ServerConfig.java @@ -12,6 +12,7 @@ public class ServerConfig { private DiskDrive diskDrive; private StorageBlock storageBlock; private FluidStorageBlock fluidStorageBlock; + private ExternalStorage externalStorage; private Upgrades upgrades; public ServerConfig() { @@ -21,6 +22,7 @@ public class ServerConfig { diskDrive = new DiskDrive(); storageBlock = new StorageBlock(); fluidStorageBlock = new FluidStorageBlock(); + externalStorage = new ExternalStorage(); upgrades = new Upgrades(); spec = builder.build(); @@ -54,6 +56,10 @@ public class ServerConfig { return fluidStorageBlock; } + public ExternalStorage getExternalStorage() { + return externalStorage; + } + public ForgeConfigSpec getSpec() { return spec; } @@ -301,4 +307,20 @@ public class ServerConfig { return creativeUsage.get(); } } + + public class ExternalStorage { + private final ForgeConfigSpec.IntValue usage; + + public ExternalStorage() { + builder.push("externalStorage"); + + usage = builder.comment("The energy used by the External Storage").defineInRange("usage", 6, 0, Integer.MAX_VALUE); + + builder.pop(); + } + + public int getUsage() { + return usage.get(); + } + } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/container/ExternalStorageContainer.java b/src/main/java/com/raoulvdberge/refinedstorage/container/ExternalStorageContainer.java index 8c8c13b78..7e91b6c36 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/container/ExternalStorageContainer.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/container/ExternalStorageContainer.java @@ -3,12 +3,12 @@ package com.raoulvdberge.refinedstorage.container; import com.raoulvdberge.refinedstorage.RSContainers; import com.raoulvdberge.refinedstorage.container.slot.filter.FilterSlot; import com.raoulvdberge.refinedstorage.container.slot.filter.FluidFilterSlot; -import com.raoulvdberge.refinedstorage.tile.TileExternalStorage; +import com.raoulvdberge.refinedstorage.tile.ExternalStorageTile; import com.raoulvdberge.refinedstorage.tile.config.IType; import net.minecraft.entity.player.PlayerEntity; public class ExternalStorageContainer extends BaseContainer { - public ExternalStorageContainer(TileExternalStorage externalStorage, PlayerEntity player, int windowId) { + public ExternalStorageContainer(ExternalStorageTile externalStorage, PlayerEntity player, int windowId) { super(RSContainers.EXTERNAL_STORAGE, externalStorage, player, windowId); for (int i = 0; i < 9; ++i) { diff --git a/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyClient.java b/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyClient.java index 3f002b8ad..4b68ac747 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyClient.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyClient.java @@ -55,22 +55,11 @@ public class ProxyClient extends ProxyCommon implements IModelRegistration { public void preInit(FMLPreInitializationEvent e) { super.preInit(e); - MinecraftForge.EVENT_BUS.register(new BlockHighlightListener()); MinecraftForge.EVENT_BUS.register(new KeyInputListener()); } - @Override - public void addModelLoader(Supplier modelLoader) { - ModelLoaderRegistry.registerLoader(modelLoader.get()); - } - @Override public void setTesr(Class tile, TileEntitySpecialRenderer tesr) { ClientRegistry.bindTileEntitySpecialRenderer(tile, tesr); - } - - @Override - public void addItemColor(Item item, IItemColor itemColor) { - itemColors.add(Pair.of(item, itemColor)); // ItemColors is only available in init. }*/ } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyCommon.java b/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyCommon.java index 0bf99f4c8..1f0416c87 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyCommon.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyCommon.java @@ -32,9 +32,6 @@ public class ProxyCommon { API.instance().getReaderWriterHandlerRegistry().add(ReaderWriterHandlerRedstone.ID, tag -> new ReaderWriterHandlerRedstone()); API.instance().getReaderWriterHandlerRegistry().add(ReaderWriterHandlerForgeEnergy.ID, ReaderWriterHandlerForgeEnergy::new); - API.instance().addExternalStorageProvider(StorageType.ITEM, new ExternalStorageProviderItem()); - API.instance().addExternalStorageProvider(StorageType.FLUID, new ExternalStorageProviderFluid()); - IntegrationInventorySorter.register(); } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/screen/ExternalStorageScreen.java b/src/main/java/com/raoulvdberge/refinedstorage/screen/ExternalStorageScreen.java new file mode 100644 index 000000000..c41cdd1be --- /dev/null +++ b/src/main/java/com/raoulvdberge/refinedstorage/screen/ExternalStorageScreen.java @@ -0,0 +1,25 @@ +package com.raoulvdberge.refinedstorage.screen; + +import com.raoulvdberge.refinedstorage.container.ExternalStorageContainer; +import com.raoulvdberge.refinedstorage.tile.ExternalStorageTile; +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.util.text.ITextComponent; + +public class ExternalStorageScreen extends StorageScreen { + public ExternalStorageScreen(ExternalStorageContainer container, PlayerInventory inventory, ITextComponent title) { + super( + container, + inventory, + title, + "gui/storage.png", + ExternalStorageTile.TYPE, + ExternalStorageTile.REDSTONE_MODE, + ExternalStorageTile.COMPARE, + ExternalStorageTile.WHITELIST_BLACKLIST, + ExternalStorageTile.PRIORITY, + ExternalStorageTile.ACCESS_TYPE, + ExternalStorageTile.STORED::getValue, + ExternalStorageTile.CAPACITY::getValue + ); + } +} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/ControllerTile.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/ControllerTile.java index 9839b0cb6..563b98b64 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/tile/ControllerTile.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/ControllerTile.java @@ -18,7 +18,7 @@ import com.raoulvdberge.refinedstorage.api.network.security.ISecurityManager; import com.raoulvdberge.refinedstorage.api.storage.AccessType; import com.raoulvdberge.refinedstorage.api.storage.IStorage; import com.raoulvdberge.refinedstorage.api.storage.cache.IStorageCache; -import com.raoulvdberge.refinedstorage.api.storage.externalstorage.IStorageExternal; +import com.raoulvdberge.refinedstorage.api.storage.externalstorage.IExternalStorage; import com.raoulvdberge.refinedstorage.api.storage.tracker.IStorageTracker; import com.raoulvdberge.refinedstorage.api.util.Action; import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.CraftingManager; @@ -317,8 +317,8 @@ public class ControllerTile extends BaseTile implements ITickableTileEntity, INe if (remainder == null) { // The external storage is responsible for sending changes, we don't need to anymore - if (storage instanceof IStorageExternal && action == Action.PERFORM) { - ((IStorageExternal) storage).update(this); + if (storage instanceof IExternalStorage && action == Action.PERFORM) { + ((IExternalStorage) storage).update(this); insertedExternally += size; } @@ -326,8 +326,8 @@ public class ControllerTile extends BaseTile implements ITickableTileEntity, INe break; } else { // The external storage is responsible for sending changes, we don't need to anymore - if (size != remainder.getCount() && storage instanceof IStorageExternal && action == Action.PERFORM) { - ((IStorageExternal) storage).update(this); + if (size != remainder.getCount() && storage instanceof IExternalStorage && action == Action.PERFORM) { + ((IExternalStorage) storage).update(this); insertedExternally += size - remainder.getCount(); } @@ -361,8 +361,8 @@ public class ControllerTile extends BaseTile implements ITickableTileEntity, INe if (took != null) { // The external storage is responsible for sending changes, we don't need to anymore - if (storage instanceof IStorageExternal && action == Action.PERFORM) { - ((IStorageExternal) storage).update(this); + if (storage instanceof IExternalStorage && action == Action.PERFORM) { + ((IExternalStorage) storage).update(this); extractedExternally += took.getCount(); } @@ -415,8 +415,8 @@ public class ControllerTile extends BaseTile implements ITickableTileEntity, INe if (remainder == null) { // The external storage is responsible for sending changes, we don't need to anymore - if (storage instanceof IStorageExternal && action == Action.PERFORM) { - ((IStorageExternal) storage).update(this); + if (storage instanceof IExternalStorage && action == Action.PERFORM) { + ((IExternalStorage) storage).update(this); insertedExternally += size; } @@ -424,8 +424,8 @@ public class ControllerTile extends BaseTile implements ITickableTileEntity, INe break; } else { // The external storage is responsible for sending changes, we don't need to anymore - if (size != remainder.getAmount() && storage instanceof IStorageExternal && action == Action.PERFORM) { - ((IStorageExternal) storage).update(this); + if (size != remainder.getAmount() && storage instanceof IExternalStorage && action == Action.PERFORM) { + ((IExternalStorage) storage).update(this); insertedExternally += size - remainder.getAmount(); } @@ -459,8 +459,8 @@ public class ControllerTile extends BaseTile implements ITickableTileEntity, INe if (took != null) { // The external storage is responsible for sending changes, we don't need to anymore - if (storage instanceof IStorageExternal && action == Action.PERFORM) { - ((IStorageExternal) storage).update(this); + if (storage instanceof IExternalStorage && action == Action.PERFORM) { + ((IExternalStorage) storage).update(this); extractedExternally += took.getAmount(); } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/TileExternalStorage.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/ExternalStorageTile.java old mode 100755 new mode 100644 similarity index 51% rename from src/main/java/com/raoulvdberge/refinedstorage/tile/TileExternalStorage.java rename to src/main/java/com/raoulvdberge/refinedstorage/tile/ExternalStorageTile.java index 9bff7f2f8..7f02ee9f9 --- a/src/main/java/com/raoulvdberge/refinedstorage/tile/TileExternalStorage.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/ExternalStorageTile.java @@ -2,8 +2,8 @@ package com.raoulvdberge.refinedstorage.tile; import com.raoulvdberge.refinedstorage.RSTiles; import com.raoulvdberge.refinedstorage.api.storage.AccessType; -import com.raoulvdberge.refinedstorage.api.storage.externalstorage.IStorageExternal; -import com.raoulvdberge.refinedstorage.apiimpl.network.node.NetworkNodeExternalStorage; +import com.raoulvdberge.refinedstorage.api.storage.externalstorage.IExternalStorage; +import com.raoulvdberge.refinedstorage.apiimpl.network.node.ExternalStorageNetworkNode; import com.raoulvdberge.refinedstorage.tile.config.*; import com.raoulvdberge.refinedstorage.tile.data.RSSerializers; import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter; @@ -14,40 +14,40 @@ import net.minecraftforge.fluids.FluidStack; import javax.annotation.Nonnull; -public class TileExternalStorage extends NetworkNodeTile { - public static final TileDataParameter PRIORITY = IPrioritizable.createParameter(); - public static final TileDataParameter COMPARE = IComparable.createParameter(); - public static final TileDataParameter WHITELIST_BLACKLIST = IWhitelistBlacklist.createParameter(); - public static final TileDataParameter TYPE = IType.createParameter(); - public static final TileDataParameter ACCESS_TYPE = IAccessType.createParameter(); - public static final TileDataParameter STORED = new TileDataParameter<>(RSSerializers.LONG_SERIALIZER, 0L, t -> { +public class ExternalStorageTile extends NetworkNodeTile { + public static final TileDataParameter PRIORITY = IPrioritizable.createParameter(); + public static final TileDataParameter COMPARE = IComparable.createParameter(); + public static final TileDataParameter WHITELIST_BLACKLIST = IWhitelistBlacklist.createParameter(); + public static final TileDataParameter TYPE = IType.createParameter(); + public static final TileDataParameter ACCESS_TYPE = IAccessType.createParameter(); + public static final TileDataParameter STORED = new TileDataParameter<>(RSSerializers.LONG_SERIALIZER, 0L, t -> { long stored = 0; - for (IStorageExternal storage : t.getNode().getItemStorages()) { + for (IExternalStorage storage : t.getNode().getItemStorages()) { stored += storage.getStored(); } - for (IStorageExternal storage : t.getNode().getFluidStorages()) { + for (IExternalStorage storage : t.getNode().getFluidStorages()) { stored += storage.getStored(); } return stored; }); - public static final TileDataParameter CAPACITY = new TileDataParameter<>(RSSerializers.LONG_SERIALIZER, 0L, t -> { + public static final TileDataParameter CAPACITY = new TileDataParameter<>(RSSerializers.LONG_SERIALIZER, 0L, t -> { long capacity = 0; - for (IStorageExternal storage : t.getNode().getItemStorages()) { + for (IExternalStorage storage : t.getNode().getItemStorages()) { capacity += storage.getCapacity(); } - for (IStorageExternal storage : t.getNode().getFluidStorages()) { + for (IExternalStorage storage : t.getNode().getFluidStorages()) { capacity += storage.getCapacity(); } return capacity; }); - public TileExternalStorage() { + public ExternalStorageTile() { super(RSTiles.EXTERNAL_STORAGE); dataManager.addWatchedParameter(PRIORITY); @@ -61,7 +61,7 @@ public class TileExternalStorage extends NetworkNodeTile