From 3a13caaf89175e34ab6abfdc856c1e9a8337a7da Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Fri, 25 Oct 2019 14:54:48 +0200 Subject: [PATCH] Re-add the portable grid (item form) --- .../refinedstorage/ClientSetup.java | 29 +++- .../com/raoulvdberge/refinedstorage/RS.java | 11 +- .../raoulvdberge/refinedstorage/RSBlocks.java | 5 +- .../raoulvdberge/refinedstorage/RSItems.java | 5 + .../refinedstorage/RSOldConfig.java | 17 --- .../grid/factory/PortableGridGridFactory.java | 10 +- .../handler/PortableFluidGridHandler.java | 4 +- .../grid/handler/PortableItemGridHandler.java | 6 +- ...PortableFluidGridStorageCacheListener.java | 36 ++--- .../PortableItemGridStorageCacheListener.java | 27 ++-- .../refinedstorage/block/ControllerBlock.java | 2 +- ...rtableGrid.java => PortableGridBlock.java} | 18 ++- .../refinedstorage/config/ServerConfig.java | 46 +++++++ .../item/blockitem/EnergyBlockItem.java | 7 +- .../item/blockitem/ItemBlockPortableGrid.java | 57 -------- .../item/blockitem/PortableGridBlockItem.java | 97 ++++++++++++++ .../network/NetworkHandler.java | 5 + .../grid/PortableGridFluidDeltaMessage.java | 66 +++++++++ .../grid/PortableGridFluidUpdateMessage.java | 62 +++++++++ .../grid/PortableGridItemDeltaMessage.java | 68 ++++++++++ .../grid/PortableGridItemUpdateMessage.java | 62 +++++++++ .../PortableGridSettingsUpdateMessage.java | 100 ++++++++++++++ .../WirelessGridSettingsUpdateMessage.java | 6 +- .../refinedstorage/proxy/ProxyClient.java | 10 -- .../refinedstorage/proxy/ProxyCommon.java | 1 - .../render/model/PortableGridBakedModel.java | 75 +++++++++++ .../model/PortableGridItemBakedModel.java | 71 ++++++++++ .../tile/grid/portable/IPortableGrid.java | 14 +- .../tile/grid/portable/PortableGrid.java | 126 ++++++++++++------ .../grid/portable}/PortableGridDiskState.java | 2 +- .../tile/grid/portable/TilePortableGrid.java | 53 ++++---- .../blockstates/portable_grid.json | 60 --------- .../assets/refinedstorage/lang/en_us.json | 6 +- .../models/block/portable_grid.json | 11 ++ .../models/block/portable_grid_connected.json | 6 + .../block/portable_grid_disconnected.json | 6 + .../models/item/portable_grid.json | 1 - .../refinedstorage/recipes/portable_grid.json | 12 +- 38 files changed, 893 insertions(+), 307 deletions(-) rename src/main/java/com/raoulvdberge/refinedstorage/block/{BlockPortableGrid.java => PortableGridBlock.java} (86%) delete mode 100644 src/main/java/com/raoulvdberge/refinedstorage/item/blockitem/ItemBlockPortableGrid.java create mode 100644 src/main/java/com/raoulvdberge/refinedstorage/item/blockitem/PortableGridBlockItem.java create mode 100644 src/main/java/com/raoulvdberge/refinedstorage/network/grid/PortableGridFluidDeltaMessage.java create mode 100644 src/main/java/com/raoulvdberge/refinedstorage/network/grid/PortableGridFluidUpdateMessage.java create mode 100644 src/main/java/com/raoulvdberge/refinedstorage/network/grid/PortableGridItemDeltaMessage.java create mode 100644 src/main/java/com/raoulvdberge/refinedstorage/network/grid/PortableGridItemUpdateMessage.java create mode 100644 src/main/java/com/raoulvdberge/refinedstorage/network/grid/PortableGridSettingsUpdateMessage.java delete mode 100755 src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyClient.java create mode 100644 src/main/java/com/raoulvdberge/refinedstorage/render/model/PortableGridBakedModel.java create mode 100644 src/main/java/com/raoulvdberge/refinedstorage/render/model/PortableGridItemBakedModel.java rename src/main/java/com/raoulvdberge/refinedstorage/{block/enums => tile/grid/portable}/PortableGridDiskState.java (93%) create mode 100644 src/main/resources/assets/refinedstorage/models/block/portable_grid_connected.json create mode 100644 src/main/resources/assets/refinedstorage/models/block/portable_grid_disconnected.json rename src/main/resources/{assets => data}/refinedstorage/recipes/portable_grid.json (52%) diff --git a/src/main/java/com/raoulvdberge/refinedstorage/ClientSetup.java b/src/main/java/com/raoulvdberge/refinedstorage/ClientSetup.java index 48c00a0fd..560eb1276 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/ClientSetup.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/ClientSetup.java @@ -6,10 +6,7 @@ import com.raoulvdberge.refinedstorage.container.CrafterManagerContainer; import com.raoulvdberge.refinedstorage.container.slot.CrafterManagerSlot; import com.raoulvdberge.refinedstorage.render.BakedModelOverrideRegistry; import com.raoulvdberge.refinedstorage.render.color.PatternItemColor; -import com.raoulvdberge.refinedstorage.render.model.DiskDriveBakedModel; -import com.raoulvdberge.refinedstorage.render.model.DiskManipulatorBakedModel; -import com.raoulvdberge.refinedstorage.render.model.FullbrightBakedModel; -import com.raoulvdberge.refinedstorage.render.model.PatternBakedModel; +import com.raoulvdberge.refinedstorage.render.model.*; import com.raoulvdberge.refinedstorage.render.tesr.StorageMonitorTileRenderer; import com.raoulvdberge.refinedstorage.screen.*; import com.raoulvdberge.refinedstorage.screen.factory.GridScreenFactory; @@ -88,6 +85,23 @@ public class ClientSetup { new ResourceLocation(RS.ID, "block/disks/leds") ).disableCache()); + bakedModelOverrideRegistry.add(new ResourceLocation(RS.ID, "portable_grid"), (base, registry) -> new PortableGridBakedModel( + registry.get(new ResourceLocation(RS.ID + ":block/portable_grid_connected")), + registry.get(new ResourceLocation(RS.ID + ":block/portable_grid_disconnected")), + registry.get(new ResourceLocation(RS.ID + ":block/disks/portable_grid_disk")), + registry.get(new ResourceLocation(RS.ID + ":block/disks/portable_grid_disk_near_capacity")), + registry.get(new ResourceLocation(RS.ID + ":block/disks/portable_grid_disk_full")), + registry.get(new ResourceLocation(RS.ID + ":block/disks/portable_grid_disk_disconnected")) + )); + bakedModelOverrideRegistry.add(new ResourceLocation(RS.ID, "creative_portable_grid"), (base, registry) -> new PortableGridBakedModel( + registry.get(new ResourceLocation(RS.ID + ":block/portable_grid_connected")), + registry.get(new ResourceLocation(RS.ID + ":block/portable_grid_disconnected")), + registry.get(new ResourceLocation(RS.ID + ":block/disks/portable_grid_disk")), + registry.get(new ResourceLocation(RS.ID + ":block/disks/portable_grid_disk_near_capacity")), + registry.get(new ResourceLocation(RS.ID + ":block/disks/portable_grid_disk_full")), + registry.get(new ResourceLocation(RS.ID + ":block/disks/portable_grid_disk_disconnected")) + )); + bakedModelOverrideRegistry.add(new ResourceLocation(RS.ID, "pattern"), (base, registry) -> new PatternBakedModel(base)); ModelLoader.addSpecialModel(new ResourceLocation(RS.ID + ":block/disks/disk")); @@ -98,6 +112,13 @@ public class ClientSetup { ModelLoader.addSpecialModel(new ResourceLocation(RS.ID + ":block/disk_manipulator_disconnected")); ModelLoader.addSpecialModel(new ResourceLocation(RS.ID + ":block/disk_manipulator_connected")); + ModelLoader.addSpecialModel(new ResourceLocation(RS.ID + ":block/portable_grid_connected")); + ModelLoader.addSpecialModel(new ResourceLocation(RS.ID + ":block/portable_grid_disconnected")); + ModelLoader.addSpecialModel(new ResourceLocation(RS.ID + ":block/disks/portable_grid_disk")); + ModelLoader.addSpecialModel(new ResourceLocation(RS.ID + ":block/disks/portable_grid_disk_near_capacity")); + ModelLoader.addSpecialModel(new ResourceLocation(RS.ID + ":block/disks/portable_grid_disk_full")); + ModelLoader.addSpecialModel(new ResourceLocation(RS.ID + ":block/disks/portable_grid_disk_disconnected")); + FMLJavaModLoadingContext.get().getModEventBus().addListener(this::onClientSetup); FMLJavaModLoadingContext.get().getModEventBus().addListener(this::onModelBake); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/RS.java b/src/main/java/com/raoulvdberge/refinedstorage/RS.java index 89ed578a6..e1220093f 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/RS.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/RS.java @@ -8,6 +8,7 @@ import com.raoulvdberge.refinedstorage.apiimpl.API; import com.raoulvdberge.refinedstorage.apiimpl.network.NetworkListener; import com.raoulvdberge.refinedstorage.apiimpl.network.NetworkNodeListener; import com.raoulvdberge.refinedstorage.apiimpl.network.grid.factory.GridBlockGridFactory; +import com.raoulvdberge.refinedstorage.apiimpl.network.grid.factory.PortableGridGridFactory; import com.raoulvdberge.refinedstorage.apiimpl.network.grid.factory.WirelessFluidGridGridFactory; import com.raoulvdberge.refinedstorage.apiimpl.network.grid.factory.WirelessGridGridFactory; import com.raoulvdberge.refinedstorage.apiimpl.network.node.*; @@ -29,10 +30,7 @@ import com.raoulvdberge.refinedstorage.container.*; import com.raoulvdberge.refinedstorage.container.factory.GridContainerFactory; import com.raoulvdberge.refinedstorage.container.factory.PositionalTileContainerFactory; import com.raoulvdberge.refinedstorage.item.*; -import com.raoulvdberge.refinedstorage.item.blockitem.ControllerBlockItem; -import com.raoulvdberge.refinedstorage.item.blockitem.FluidStorageBlockItem; -import com.raoulvdberge.refinedstorage.item.blockitem.StorageBlockItem; -import com.raoulvdberge.refinedstorage.item.blockitem.WirelessTransmitterBlockItem; +import com.raoulvdberge.refinedstorage.item.blockitem.*; import com.raoulvdberge.refinedstorage.item.group.MainItemGroup; import com.raoulvdberge.refinedstorage.loottable.StorageBlockLootFunctionSerializer; import com.raoulvdberge.refinedstorage.network.NetworkHandler; @@ -138,6 +136,7 @@ public final class RS { API.instance().getGridManager().add(GridBlockGridFactory.ID, new GridBlockGridFactory()); API.instance().getGridManager().add(WirelessGridGridFactory.ID, new WirelessGridGridFactory()); API.instance().getGridManager().add(WirelessFluidGridGridFactory.ID, new WirelessFluidGridGridFactory()); + API.instance().getGridManager().add(PortableGridGridFactory.ID, new PortableGridGridFactory()); API.instance().addExternalStorageProvider(StorageType.ITEM, new ItemExternalStorageProvider()); API.instance().addExternalStorageProvider(StorageType.FLUID, new FluidExternalStorageProvider()); @@ -192,6 +191,8 @@ public final class RS { e.getRegistry().register(new ConstructorBlock()); e.getRegistry().register(new DestructorBlock()); e.getRegistry().register(new DiskManipulatorBlock()); + e.getRegistry().register(new PortableGridBlock(PortableGridBlockItem.Type.NORMAL)); + e.getRegistry().register(new PortableGridBlock(PortableGridBlockItem.Type.CREATIVE)); } @SubscribeEvent @@ -307,6 +308,8 @@ public final class RS { e.getRegistry().register(new WrenchItem()); e.getRegistry().register(new PatternItem()); e.getRegistry().register(new FilterItem()); + e.getRegistry().register(new PortableGridBlockItem(PortableGridBlockItem.Type.NORMAL)); + e.getRegistry().register(new PortableGridBlockItem(PortableGridBlockItem.Type.CREATIVE)); e.getRegistry().register(BlockUtils.createBlockItemFor(RSBlocks.QUARTZ_ENRICHED_IRON)); e.getRegistry().register(new ControllerBlockItem(RSBlocks.CONTROLLER)); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/RSBlocks.java b/src/main/java/com/raoulvdberge/refinedstorage/RSBlocks.java index 543e56fd4..cf50323c6 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/RSBlocks.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/RSBlocks.java @@ -74,9 +74,12 @@ public final class RSBlocks { public static final DestructorBlock DESTRUCTOR = null; @ObjectHolder(RS.ID + ":disk_manipulator") public static final DiskManipulatorBlock DISK_MANIPULATOR = null; + @ObjectHolder(RS.ID + ":portable_grid") + public static final PortableGridBlock PORTABLE_GRID = null; + @ObjectHolder(RS.ID + ":creative_portable_grid") + public static final PortableGridBlock CREATIVE_PORTABLE_GRID = null; public static final BlockCraftingMonitor CRAFTING_MONITOR = new BlockCraftingMonitor(); public static final BlockCrafter CRAFTER = new BlockCrafter(); - public static final BlockPortableGrid PORTABLE_GRID = new BlockPortableGrid(); public static final BlockCrafterManager CRAFTER_MANAGER = new BlockCrafterManager(); } \ No newline at end of file diff --git a/src/main/java/com/raoulvdberge/refinedstorage/RSItems.java b/src/main/java/com/raoulvdberge/refinedstorage/RSItems.java index b8ca91f9d..fe375cab3 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/RSItems.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/RSItems.java @@ -1,6 +1,7 @@ package com.raoulvdberge.refinedstorage; import com.raoulvdberge.refinedstorage.item.*; +import com.raoulvdberge.refinedstorage.item.blockitem.PortableGridBlockItem; import net.minecraftforge.registries.ObjectHolder; public final class RSItems { @@ -100,6 +101,10 @@ public final class RSItems { public static final FluidStorageDiskItem FOUR_THOUSAND_NINETY_SIX_K_FLUID_STORAGE_DISK = null; @ObjectHolder(RS.ID + ":creative_fluid_storage_disk") public static final FluidStorageDiskItem CREATIVE_FLUID_STORAGE_DISK = null; + @ObjectHolder(RS.ID + ":portable_grid") + public static final PortableGridBlockItem PORTABLE_GRID = null; + @ObjectHolder(RS.ID + ":creative_portable_grid") + public static final PortableGridBlockItem CREATIVE_PORTABLE_GRID = null; public static final ItemWirelessCraftingMonitor WIRELESS_CRAFTING_MONITOR = null; } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/RSOldConfig.java b/src/main/java/com/raoulvdberge/refinedstorage/RSOldConfig.java index 93d972293..6970e7524 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/RSOldConfig.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/RSOldConfig.java @@ -8,14 +8,6 @@ public class RSOldConfig { public int crafterManagerUsage; //endregion - //region Portable Grid - public boolean portableGridUsesEnergy; - public int portableGridCapacity; - public int portableGridOpenUsage; - public int portableGridExtractUsage; - public int portableGridInsertUsage; - //endregion - //region Wireless Crafting Monitor public boolean wirelessCraftingMonitorUsesEnergy; public int wirelessCraftingMonitorCapacity; @@ -30,7 +22,6 @@ public class RSOldConfig { //region Categories private static final String ENERGY = "energy"; - private static final String PORTABLE_GRID = "portableGrid"; private static final String WIRELESS_CRAFTING_MONITOR = "wirelessCraftingMonitor"; private static final String AUTOCRAFTING = "autocrafting"; //endregion @@ -43,14 +34,6 @@ public class RSOldConfig { crafterManagerUsage = config.getInt("crafterManager", ENERGY, 4, 0, Integer.MAX_VALUE, "The energy used by Crafter Managers"); //endregion - //region Portable Grid - portableGridUsesEnergy = config.getBoolean("usesEnergy", PORTABLE_GRID, true, "Whether the Portable Grid uses energy"); - portableGridCapacity = config.getInt("capacity", PORTABLE_GRID, 3200, 0, Integer.MAX_VALUE, "The energy capacity of the Portable Grid"); - portableGridOpenUsage = config.getInt("open", PORTABLE_GRID, 30, 0, Integer.MAX_VALUE, "The energy used by the Portable Grid to open"); - portableGridInsertUsage = config.getInt("insert", PORTABLE_GRID, 3, 0, Integer.MAX_VALUE, "The energy used by the Portable Grid to insert items"); - portableGridExtractUsage = config.getInt("extract", PORTABLE_GRID, 3, 0, Integer.MAX_VALUE, "The energy used by the Portable Grid to extract items"); - //endregion - //region Wireless Crafting Monitor wirelessCraftingMonitorUsesEnergy = config.getBoolean("usesEnergy", WIRELESS_CRAFTING_MONITOR, true, "Whether the Wireless Crafting Monitor uses energy"); wirelessCraftingMonitorCapacity = config.getInt("capacity", WIRELESS_CRAFTING_MONITOR, 3200, 0, Integer.MAX_VALUE, "The energy capacity of the Wireless Crafting Monitor"); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/factory/PortableGridGridFactory.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/factory/PortableGridGridFactory.java index 9403bb89c..86874a928 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/factory/PortableGridGridFactory.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/factory/PortableGridGridFactory.java @@ -1,5 +1,6 @@ package com.raoulvdberge.refinedstorage.apiimpl.network.grid.factory; +import com.raoulvdberge.refinedstorage.RS; import com.raoulvdberge.refinedstorage.api.network.grid.GridFactoryType; import com.raoulvdberge.refinedstorage.api.network.grid.IGrid; import com.raoulvdberge.refinedstorage.api.network.grid.IGridFactory; @@ -7,16 +8,23 @@ import com.raoulvdberge.refinedstorage.tile.grid.portable.PortableGrid; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ResourceLocation; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import javax.annotation.Nullable; public class PortableGridGridFactory implements IGridFactory { + public static final ResourceLocation ID = new ResourceLocation(RS.ID, "portable_grid_item"); + @Nullable @Override public IGrid createFromStack(PlayerEntity player, ItemStack stack) { - return new PortableGrid(player, stack); + PortableGrid portableGrid = new PortableGrid(player, stack); + + portableGrid.onOpen(); + + return portableGrid; } @Nullable diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/handler/PortableFluidGridHandler.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/handler/PortableFluidGridHandler.java index 028390d24..1fa57be3a 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/handler/PortableFluidGridHandler.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/handler/PortableFluidGridHandler.java @@ -63,7 +63,7 @@ public class PortableFluidGridHandler implements IFluidGridHandler { player.updateHeldItem(); } - portableGrid.drainEnergy(RS.INSTANCE.config.portableGridExtractUsage); + portableGrid.drainEnergy(RS.SERVER_CONFIG.getPortableGrid().getExtractUsage()); }); } } @@ -80,7 +80,7 @@ public class PortableFluidGridHandler implements IFluidGridHandler { portableGrid.getFluidStorage().insert(result.getValue(), result.getValue().getAmount(), Action.PERFORM); - portableGrid.drainEnergy(RS.INSTANCE.config.portableGridInsertUsage); + portableGrid.drainEnergy(RS.SERVER_CONFIG.getPortableGrid().getInsertUsage()); return result.getLeft(); } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/handler/PortableItemGridHandler.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/handler/PortableItemGridHandler.java index 8bb4d4429..bf0bf7cff 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/handler/PortableItemGridHandler.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/handler/PortableItemGridHandler.java @@ -101,7 +101,7 @@ public class PortableItemGridHandler implements IItemGridHandler { player.updateHeldItem(); } - portableGrid.drainEnergy(RS.INSTANCE.config.portableGridExtractUsage); + portableGrid.drainEnergy(RS.SERVER_CONFIG.getPortableGrid().getExtractUsage()); } } @@ -116,7 +116,7 @@ public class PortableItemGridHandler implements IItemGridHandler { ItemStack remainder = portableGrid.getItemStorage().insert(stack, stack.getCount(), Action.PERFORM); - portableGrid.drainEnergy(RS.INSTANCE.config.portableGridInsertUsage); + portableGrid.drainEnergy(RS.SERVER_CONFIG.getPortableGrid().getInsertUsage()); return remainder; } @@ -144,7 +144,7 @@ public class PortableItemGridHandler implements IItemGridHandler { player.updateHeldItem(); - portableGrid.drainEnergy(RS.INSTANCE.config.portableGridInsertUsage); + portableGrid.drainEnergy(RS.SERVER_CONFIG.getPortableGrid().getInsertUsage()); } @Override diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/cache/listener/PortableFluidGridStorageCacheListener.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/cache/listener/PortableFluidGridStorageCacheListener.java index 9c5810211..5222f5279 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/cache/listener/PortableFluidGridStorageCacheListener.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/cache/listener/PortableFluidGridStorageCacheListener.java @@ -1,11 +1,15 @@ package com.raoulvdberge.refinedstorage.apiimpl.storage.cache.listener; +import com.raoulvdberge.refinedstorage.RS; import com.raoulvdberge.refinedstorage.api.storage.cache.IStorageCacheListener; import com.raoulvdberge.refinedstorage.api.util.StackListResult; +import com.raoulvdberge.refinedstorage.network.grid.PortableGridFluidDeltaMessage; +import com.raoulvdberge.refinedstorage.network.grid.PortableGridFluidUpdateMessage; import com.raoulvdberge.refinedstorage.tile.grid.portable.IPortableGrid; import net.minecraft.entity.player.ServerPlayerEntity; import net.minecraftforge.fluids.FluidStack; +import java.util.ArrayList; import java.util.List; public class PortableFluidGridStorageCacheListener implements IStorageCacheListener { @@ -19,25 +23,7 @@ public class PortableFluidGridStorageCacheListener implements IStorageCacheListe @Override public void onAttached() { - /*RS.INSTANCE.network.sendTo(new MessageGridFluidUpdate(buf -> { - int size = portableGrid.getFluidCache().getList().getStacks().size(); - - buf.writeInt(size); - - for (FluidStack stack : portableGrid.getFluidCache().getList().getStacks()) { - StackUtils.writeFluidStackAndHash(buf, stack); - - IStorageTracker.IStorageTrackerEntry entry = portableGrid.getFluidStorageTracker().get(stack); - buf.writeBoolean(entry != null); - if (entry != null) { - buf.writeLong(entry.getTime()); - ByteBufUtils.writeUTF8String(buf, entry.getName()); - } - - buf.writeBoolean(false); - buf.writeBoolean(false); - } - }, false), player); TODO */ + RS.NETWORK_HANDLER.sendTo(player, new PortableGridFluidUpdateMessage(portableGrid)); } @Override @@ -47,17 +33,15 @@ public class PortableFluidGridStorageCacheListener implements IStorageCacheListe @Override public void onChanged(StackListResult delta) { - // TODO RS.INSTANCE.network.sendTo(new MessageGridFluidDelta(null, portableGrid.getFluidStorageTracker(), stack, size), player); + List> deltas = new ArrayList<>(); + deltas.add(delta); + + onChangedBulk(deltas); } @Override public void onChangedBulk(List> storageCacheDeltas) { - /* TODO - for (Pair stack : stacks) { - onChanged(stack.getLeft(), stack.getRight()); - } - - */ + RS.NETWORK_HANDLER.sendTo(player, new PortableGridFluidDeltaMessage(portableGrid, storageCacheDeltas)); } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/cache/listener/PortableItemGridStorageCacheListener.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/cache/listener/PortableItemGridStorageCacheListener.java index 617b436a1..4e3d8419b 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/cache/listener/PortableItemGridStorageCacheListener.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/cache/listener/PortableItemGridStorageCacheListener.java @@ -1,11 +1,15 @@ package com.raoulvdberge.refinedstorage.apiimpl.storage.cache.listener; +import com.raoulvdberge.refinedstorage.RS; import com.raoulvdberge.refinedstorage.api.storage.cache.IStorageCacheListener; import com.raoulvdberge.refinedstorage.api.util.StackListResult; +import com.raoulvdberge.refinedstorage.network.grid.PortableGridItemDeltaMessage; +import com.raoulvdberge.refinedstorage.network.grid.PortableGridItemUpdateMessage; import com.raoulvdberge.refinedstorage.tile.grid.portable.IPortableGrid; import net.minecraft.entity.player.ServerPlayerEntity; import net.minecraft.item.ItemStack; +import java.util.ArrayList; import java.util.List; public class PortableItemGridStorageCacheListener implements IStorageCacheListener { @@ -19,20 +23,7 @@ public class PortableItemGridStorageCacheListener implements IStorageCacheListen @Override public void onAttached() { - /*RS.INSTANCE.network.sendTo(new MessageGridItemUpdate(buf -> { - buf.writeInt(portableGrid.getItemCache().getList().getStacks().size()); - - for (ItemStack stack : portableGrid.getItemCache().getList().getStacks()) { - StackUtils.writeItemStack(buf, stack, null, false); - - IStorageTracker.IStorageTrackerEntry entry = portableGrid.getItemStorageTracker().get(stack); - buf.writeBoolean(entry != null); - if (entry != null) { - buf.writeLong(entry.getTime()); - ByteBufUtils.writeUTF8String(buf, entry.getName()); - } - } - }, false), player); TODO */ + RS.NETWORK_HANDLER.sendTo(player, new PortableGridItemUpdateMessage(portableGrid)); } @Override @@ -42,11 +33,15 @@ public class PortableItemGridStorageCacheListener implements IStorageCacheListen @Override public void onChanged(StackListResult delta) { - // TODO RS.INSTANCE.network.sendTo(new MessageGridItemDelta(null, portableGrid.getItemStorageTracker(), stack, size), player); + List> deltas = new ArrayList<>(); + + deltas.add(delta); + + onChangedBulk(deltas); } @Override public void onChangedBulk(List> storageCacheDeltas) { - // TODO RS.INSTANCE.network.sendTo(new MessageGridItemDelta(null, portableGrid.getItemStorageTracker(), stacks), player); + RS.NETWORK_HANDLER.sendTo(player, new PortableGridItemDeltaMessage(portableGrid, storageCacheDeltas)); } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/block/ControllerBlock.java b/src/main/java/com/raoulvdberge/refinedstorage/block/ControllerBlock.java index 717a9c5a7..ac29a8e1b 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/block/ControllerBlock.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/block/ControllerBlock.java @@ -32,7 +32,7 @@ import net.minecraftforge.fml.network.NetworkHooks; import javax.annotation.Nullable; -public class ControllerBlock extends Block { +public class ControllerBlock extends BaseBlock { public enum EnergyType implements IStringSerializable { OFF("off"), NEARLY_OFF("nearly_off"), diff --git a/src/main/java/com/raoulvdberge/refinedstorage/block/BlockPortableGrid.java b/src/main/java/com/raoulvdberge/refinedstorage/block/PortableGridBlock.java similarity index 86% rename from src/main/java/com/raoulvdberge/refinedstorage/block/BlockPortableGrid.java rename to src/main/java/com/raoulvdberge/refinedstorage/block/PortableGridBlock.java index 9b1a0804b..47ae41b7d 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/block/BlockPortableGrid.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/block/PortableGridBlock.java @@ -1,19 +1,25 @@ package com.raoulvdberge.refinedstorage.block; -import com.raoulvdberge.refinedstorage.block.enums.PortableGridDiskState; +import com.raoulvdberge.refinedstorage.RS; import com.raoulvdberge.refinedstorage.block.enums.PortableGridType; -import com.raoulvdberge.refinedstorage.block.info.BlockInfoBuilder; -import com.raoulvdberge.refinedstorage.tile.grid.portable.TilePortableGrid; +import com.raoulvdberge.refinedstorage.item.blockitem.PortableGridBlockItem; +import com.raoulvdberge.refinedstorage.tile.grid.portable.PortableGridDiskState; +import com.raoulvdberge.refinedstorage.util.BlockUtils; import net.minecraft.state.BooleanProperty; import net.minecraft.state.EnumProperty; -public class BlockPortableGrid extends BlockBase { +public class PortableGridBlock extends BaseBlock { public static final EnumProperty TYPE = EnumProperty.create("type", PortableGridType.class); public static final EnumProperty DISK_STATE = EnumProperty.create("disk_state", PortableGridDiskState.class); public static final BooleanProperty CONNECTED = BooleanProperty.create("connected"); - public BlockPortableGrid() { - super(BlockInfoBuilder.forId("portable_grid").tileEntity(TilePortableGrid::new).create()); + private final PortableGridBlockItem.Type type; + + public PortableGridBlock(PortableGridBlockItem.Type type) { + super(BlockUtils.DEFAULT_ROCK_PROPERTIES); + + this.type = type; + this.setRegistryName(RS.ID, (type == PortableGridBlockItem.Type.CREATIVE ? "creative_" : "") + "portable_grid"); } /* diff --git a/src/main/java/com/raoulvdberge/refinedstorage/config/ServerConfig.java b/src/main/java/com/raoulvdberge/refinedstorage/config/ServerConfig.java index 2a50d2bbc..b763905a6 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/config/ServerConfig.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/config/ServerConfig.java @@ -30,6 +30,7 @@ public class ServerConfig { private Constructor constructor; private Destructor destructor; private DiskManipulator diskManipulator; + private PortableGrid portableGrid; public ServerConfig() { upgrades = new Upgrades(); @@ -56,6 +57,7 @@ public class ServerConfig { constructor = new Constructor(); destructor = new Destructor(); diskManipulator = new DiskManipulator(); + portableGrid = new PortableGrid(); spec = builder.build(); } @@ -156,6 +158,10 @@ public class ServerConfig { return diskManipulator; } + public PortableGrid getPortableGrid() { + return portableGrid; + } + public ForgeConfigSpec getSpec() { return spec; } @@ -694,6 +700,46 @@ public class ServerConfig { } } + public class PortableGrid { + private final ForgeConfigSpec.BooleanValue useEnergy; + private final ForgeConfigSpec.IntValue capacity; + private final ForgeConfigSpec.IntValue openUsage; + private final ForgeConfigSpec.IntValue extractUsage; + private final ForgeConfigSpec.IntValue insertUsage; + + public PortableGrid() { + builder.push("portableGrid"); + + useEnergy = builder.comment("Whether the Portable Grid uses energy").define("useEnergy", true); + capacity = builder.comment("The energy capacity of the Portable Grid").defineInRange("capacity", 3200, 0, Integer.MAX_VALUE); + openUsage = builder.comment("The energy used by the Portable Grid to open").defineInRange("openUsage", 30, 0, Integer.MAX_VALUE); + extractUsage = builder.comment("The energy used by the Portable Grid to extract items or fluids").defineInRange("extractUsage", 5, 0, Integer.MAX_VALUE); + insertUsage = builder.comment("The energy used by the Portable Grid to insert items or fluids").defineInRange("insertUsage", 5, 0, Integer.MAX_VALUE); + + builder.pop(); + } + + public boolean getUseEnergy() { + return useEnergy.get(); + } + + public int getCapacity() { + return capacity.get(); + } + + public int getOpenUsage() { + return openUsage.get(); + } + + public int getExtractUsage() { + return extractUsage.get(); + } + + public int getInsertUsage() { + return insertUsage.get(); + } + } + public class Constructor { private final ForgeConfigSpec.IntValue usage; diff --git a/src/main/java/com/raoulvdberge/refinedstorage/item/blockitem/EnergyBlockItem.java b/src/main/java/com/raoulvdberge/refinedstorage/item/blockitem/EnergyBlockItem.java index 9df795fd3..78aab3eed 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/item/blockitem/EnergyBlockItem.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/item/blockitem/EnergyBlockItem.java @@ -1,9 +1,8 @@ package com.raoulvdberge.refinedstorage.item.blockitem; +import com.raoulvdberge.refinedstorage.block.BaseBlock; import com.raoulvdberge.refinedstorage.item.capabilityprovider.EnergyCapabilityProvider; -import net.minecraft.block.Block; import net.minecraft.client.util.ITooltipFlag; -import net.minecraft.item.BlockItem; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompoundNBT; @@ -21,11 +20,11 @@ import javax.annotation.Nullable; import java.util.List; import java.util.function.Supplier; -public abstract class EnergyBlockItem extends BlockItem { +public abstract class EnergyBlockItem extends BaseBlockItem { private final Supplier energyCapacity; private final boolean creative; - public EnergyBlockItem(Block block, Item.Properties properties, boolean creative, Supplier energyCapacity) { + public EnergyBlockItem(BaseBlock block, Item.Properties properties, boolean creative, Supplier energyCapacity) { super(block, properties); this.creative = creative; diff --git a/src/main/java/com/raoulvdberge/refinedstorage/item/blockitem/ItemBlockPortableGrid.java b/src/main/java/com/raoulvdberge/refinedstorage/item/blockitem/ItemBlockPortableGrid.java deleted file mode 100644 index 26c922b98..000000000 --- a/src/main/java/com/raoulvdberge/refinedstorage/item/blockitem/ItemBlockPortableGrid.java +++ /dev/null @@ -1,57 +0,0 @@ -package com.raoulvdberge.refinedstorage.item.blockitem; - -import com.raoulvdberge.refinedstorage.block.BaseBlock; - -public class ItemBlockPortableGrid extends BaseBlockItem { - public ItemBlockPortableGrid(BaseBlock block, Properties builder) { - super(block, builder); - } -/* TODO - @Override - public ActionResult onItemRightClick(World world, PlayerEntity player, EnumHand hand) { - ItemStack stack = player.getHeldItem(hand); - - if (!world.isRemote) { - API.instance().getGridManager().openGrid(PortableGrid.ID, (ServerPlayerEntity) player, stack); - } - - return ActionResult.newResult(EnumActionResult.SUCCESS, stack); - } - - @Override - public void addInformation(ItemStack stack, @Nullable World world, List tooltip, ITooltipFlag flag) { - super.addInformation(stack, world, tooltip, flag); - - tooltip.add(I18n.format("block.refinedstorage:portable_grid.tooltip")); - } - - @Override - public EnumActionResult onItemUse(PlayerEntity player, World worldIn, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) { - if (!player.isSneaking()) { - return EnumActionResult.FAIL; - } - - return super.onItemUse(player, worldIn, pos, hand, facing, hitX, hitY, hitZ); - } - - @Override - public int getEntityLifespan(ItemStack stack, World world) { - return Integer.MAX_VALUE; - } - - @Override - public boolean shouldCauseReequipAnimation(ItemStack oldStack, ItemStack newStack, boolean slotChanged) { - if (oldStack.getItem() == newStack.getItem()) { - if (ItemWirelessGrid.getSortingDirection(oldStack) == ItemWirelessGrid.getSortingDirection(newStack) && - ItemWirelessGrid.getSortingType(oldStack) == ItemWirelessGrid.getSortingType(newStack) && - ItemWirelessGrid.getSearchBoxMode(oldStack) == ItemWirelessGrid.getSearchBoxMode(newStack) && - ItemWirelessGrid.getTabSelected(oldStack) == ItemWirelessGrid.getTabSelected(newStack) && - ItemWirelessGrid.getTabPage(oldStack) == ItemWirelessGrid.getTabPage(newStack) && - ItemWirelessGrid.getSize(oldStack) == ItemWirelessGrid.getSize(newStack)) { - return false; - } - } - - return super.shouldCauseReequipAnimation(oldStack, newStack, slotChanged); - }*/ -} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/item/blockitem/PortableGridBlockItem.java b/src/main/java/com/raoulvdberge/refinedstorage/item/blockitem/PortableGridBlockItem.java new file mode 100644 index 000000000..24ab4043e --- /dev/null +++ b/src/main/java/com/raoulvdberge/refinedstorage/item/blockitem/PortableGridBlockItem.java @@ -0,0 +1,97 @@ +package com.raoulvdberge.refinedstorage.item.blockitem; + +import com.raoulvdberge.refinedstorage.RS; +import com.raoulvdberge.refinedstorage.RSBlocks; +import com.raoulvdberge.refinedstorage.apiimpl.API; +import com.raoulvdberge.refinedstorage.apiimpl.network.grid.factory.PortableGridGridFactory; +import com.raoulvdberge.refinedstorage.item.WirelessGridItem; +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.entity.player.ServerPlayerEntity; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.item.ItemUseContext; +import net.minecraft.util.ActionResult; +import net.minecraft.util.ActionResultType; +import net.minecraft.util.Hand; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.Style; +import net.minecraft.util.text.TextFormatting; +import net.minecraft.util.text.TranslationTextComponent; +import net.minecraft.world.World; + +import javax.annotation.Nullable; +import java.util.List; + +public class PortableGridBlockItem extends EnergyBlockItem { + public enum Type { + NORMAL, + CREATIVE + } + + private final Type type; + + public PortableGridBlockItem(Type type) { + super( + type == Type.CREATIVE ? RSBlocks.CREATIVE_PORTABLE_GRID : RSBlocks.PORTABLE_GRID, + new Item.Properties().group(RS.MAIN_GROUP).maxStackSize(1), + type == Type.CREATIVE, + () -> RS.SERVER_CONFIG.getPortableGrid().getCapacity() + ); + + this.type = type; + this.setRegistryName(RS.ID, (type == Type.CREATIVE ? "creative_" : "") + "portable_grid"); + } + + public Type getType() { + return type; + } + + @Override + public ActionResult onItemRightClick(World world, PlayerEntity player, Hand hand) { + ItemStack stack = player.getHeldItem(hand); + + if (!world.isRemote) { + API.instance().getGridManager().openGrid(PortableGridGridFactory.ID, (ServerPlayerEntity) player, stack); + } + + return ActionResult.newResult(ActionResultType.SUCCESS, stack); + } + + @Override + public void addInformation(ItemStack stack, @Nullable World world, List tooltip, ITooltipFlag flag) { + super.addInformation(stack, world, tooltip, flag); + + tooltip.add(new TranslationTextComponent("block.refinedstorage.portable_grid.tooltip").setStyle(new Style().setColor(TextFormatting.GRAY))); + } + + @Override + public ActionResultType onItemUse(ItemUseContext context) { + if (!context.getPlayer().isSneaking()) { + return ActionResultType.FAIL; + } + + return super.onItemUse(context); + } + + @Override + public int getEntityLifespan(ItemStack stack, World world) { + return Integer.MAX_VALUE; + } + + @Override + public boolean shouldCauseReequipAnimation(ItemStack oldStack, ItemStack newStack, boolean slotChanged) { + if (oldStack.getItem() == newStack.getItem()) { + if (WirelessGridItem.getSortingDirection(oldStack) == WirelessGridItem.getSortingDirection(newStack) && + WirelessGridItem.getSortingType(oldStack) == WirelessGridItem.getSortingType(newStack) && + WirelessGridItem.getSearchBoxMode(oldStack) == WirelessGridItem.getSearchBoxMode(newStack) && + WirelessGridItem.getTabSelected(oldStack) == WirelessGridItem.getTabSelected(newStack) && + WirelessGridItem.getTabPage(oldStack) == WirelessGridItem.getTabPage(newStack) && + WirelessGridItem.getSize(oldStack) == WirelessGridItem.getSize(newStack)) { + return false; + } + } + + return super.shouldCauseReequipAnimation(oldStack, newStack, slotChanged); + } +} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/network/NetworkHandler.java b/src/main/java/com/raoulvdberge/refinedstorage/network/NetworkHandler.java index 7bdc04a39..baf80e487 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/network/NetworkHandler.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/network/NetworkHandler.java @@ -49,6 +49,11 @@ public class NetworkHandler { handler.registerMessage(id++, WirelessGridSettingsUpdateMessage.class, WirelessGridSettingsUpdateMessage::encode, WirelessGridSettingsUpdateMessage::decode, WirelessGridSettingsUpdateMessage::handle); handler.registerMessage(id++, OpenNetworkItemMessage.class, OpenNetworkItemMessage::encode, OpenNetworkItemMessage::decode, OpenNetworkItemMessage::handle); handler.registerMessage(id++, WirelessFluidGridSettingsUpdateMessage.class, WirelessFluidGridSettingsUpdateMessage::encode, WirelessFluidGridSettingsUpdateMessage::decode, WirelessFluidGridSettingsUpdateMessage::handle); + handler.registerMessage(id++, PortableGridSettingsUpdateMessage.class, PortableGridSettingsUpdateMessage::encode, PortableGridSettingsUpdateMessage::decode, PortableGridSettingsUpdateMessage::handle); + handler.registerMessage(id++, PortableGridItemUpdateMessage.class, PortableGridItemUpdateMessage::encode, PortableGridItemUpdateMessage::decode, PortableGridItemUpdateMessage::handle); + handler.registerMessage(id++, PortableGridItemDeltaMessage.class, PortableGridItemDeltaMessage::encode, PortableGridItemDeltaMessage::decode, PortableGridItemDeltaMessage::handle); + handler.registerMessage(id++, PortableGridFluidUpdateMessage.class, PortableGridFluidUpdateMessage::encode, PortableGridFluidUpdateMessage::decode, PortableGridFluidUpdateMessage::handle); + handler.registerMessage(id++, PortableGridFluidDeltaMessage.class, PortableGridFluidDeltaMessage::encode, PortableGridFluidDeltaMessage::decode, PortableGridFluidDeltaMessage::handle); } public void sendToServer(Object message) { diff --git a/src/main/java/com/raoulvdberge/refinedstorage/network/grid/PortableGridFluidDeltaMessage.java b/src/main/java/com/raoulvdberge/refinedstorage/network/grid/PortableGridFluidDeltaMessage.java new file mode 100644 index 000000000..4fa83b3d5 --- /dev/null +++ b/src/main/java/com/raoulvdberge/refinedstorage/network/grid/PortableGridFluidDeltaMessage.java @@ -0,0 +1,66 @@ +package com.raoulvdberge.refinedstorage.network.grid; + +import com.raoulvdberge.refinedstorage.api.util.StackListResult; +import com.raoulvdberge.refinedstorage.screen.BaseScreen; +import com.raoulvdberge.refinedstorage.screen.grid.GridScreen; +import com.raoulvdberge.refinedstorage.screen.grid.stack.IGridStack; +import com.raoulvdberge.refinedstorage.tile.grid.portable.IPortableGrid; +import com.raoulvdberge.refinedstorage.util.StackUtils; +import net.minecraft.network.PacketBuffer; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fml.network.NetworkEvent; +import org.apache.commons.lang3.tuple.Pair; + +import java.util.LinkedList; +import java.util.List; +import java.util.function.Supplier; + +public class PortableGridFluidDeltaMessage { + private IPortableGrid portableGrid; + private List> deltas; + + private List> clientDeltas; + + public PortableGridFluidDeltaMessage(IPortableGrid portableGrid, List> deltas) { + this.portableGrid = portableGrid; + this.deltas = deltas; + } + + public PortableGridFluidDeltaMessage(List> clientDeltas) { + this.clientDeltas = clientDeltas; + } + + public static PortableGridFluidDeltaMessage decode(PacketBuffer buf) { + int size = buf.readInt(); + + List> clientDeltas = new LinkedList<>(); + + for (int i = 0; i < size; ++i) { + int delta = buf.readInt(); + + clientDeltas.add(Pair.of(StackUtils.readFluidGridStack(buf), delta)); + } + + return new PortableGridFluidDeltaMessage(clientDeltas); + } + + public static void encode(PortableGridFluidDeltaMessage message, PacketBuffer buf) { + buf.writeInt(message.deltas.size()); + + for (StackListResult delta : message.deltas) { + buf.writeInt(delta.getChange()); + + StackUtils.writeFluidGridStack(buf, delta.getStack(), delta.getId(), null, false, message.portableGrid.getFluidStorageTracker().get(delta.getStack())); + } + } + + public static void handle(PortableGridFluidDeltaMessage message, Supplier ctx) { + BaseScreen.executeLater(GridScreen.class, grid -> { + message.clientDeltas.forEach(p -> grid.getView().postChange(p.getLeft(), p.getRight())); + + grid.getView().sort(); + }); + + ctx.get().setPacketHandled(true); + } +} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/network/grid/PortableGridFluidUpdateMessage.java b/src/main/java/com/raoulvdberge/refinedstorage/network/grid/PortableGridFluidUpdateMessage.java new file mode 100644 index 000000000..34d0d5313 --- /dev/null +++ b/src/main/java/com/raoulvdberge/refinedstorage/network/grid/PortableGridFluidUpdateMessage.java @@ -0,0 +1,62 @@ +package com.raoulvdberge.refinedstorage.network.grid; + +import com.raoulvdberge.refinedstorage.api.util.StackListEntry; +import com.raoulvdberge.refinedstorage.screen.BaseScreen; +import com.raoulvdberge.refinedstorage.screen.grid.GridScreen; +import com.raoulvdberge.refinedstorage.screen.grid.stack.IGridStack; +import com.raoulvdberge.refinedstorage.screen.grid.view.FluidGridView; +import com.raoulvdberge.refinedstorage.tile.grid.portable.IPortableGrid; +import com.raoulvdberge.refinedstorage.util.StackUtils; +import net.minecraft.network.PacketBuffer; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fml.network.NetworkEvent; + +import java.util.ArrayList; +import java.util.List; +import java.util.function.Supplier; + +public class PortableGridFluidUpdateMessage { + private IPortableGrid portableGrid; + + private List stacks = new ArrayList<>(); + + public PortableGridFluidUpdateMessage(List stacks) { + this.stacks = stacks; + } + + public PortableGridFluidUpdateMessage(IPortableGrid portableGrid) { + this.portableGrid = portableGrid; + } + + public static PortableGridFluidUpdateMessage decode(PacketBuffer buf) { + int size = buf.readInt(); + + List stacks = new ArrayList<>(); + + for (int i = 0; i < size; ++i) { + stacks.add(StackUtils.readFluidGridStack(buf)); + } + + return new PortableGridFluidUpdateMessage(stacks); + } + + public static void encode(PortableGridFluidUpdateMessage message, PacketBuffer buf) { + int size = message.portableGrid.getFluidCache().getList().getStacks().size(); + + buf.writeInt(size); + + for (StackListEntry stack : message.portableGrid.getFluidCache().getList().getStacks()) { + StackUtils.writeFluidGridStack(buf, stack.getStack(), stack.getId(), null, false, message.portableGrid.getFluidStorageTracker().get(stack.getStack())); + } + } + + public static void handle(PortableGridFluidUpdateMessage message, Supplier ctx) { + BaseScreen.executeLater(GridScreen.class, grid -> { + grid.setView(new FluidGridView(grid, GridScreen.getDefaultSorter(), GridScreen.getSorters())); + grid.getView().setStacks(message.stacks); + grid.getView().sort(); + }); + + ctx.get().setPacketHandled(true); + } +} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/network/grid/PortableGridItemDeltaMessage.java b/src/main/java/com/raoulvdberge/refinedstorage/network/grid/PortableGridItemDeltaMessage.java new file mode 100644 index 000000000..4973f32fc --- /dev/null +++ b/src/main/java/com/raoulvdberge/refinedstorage/network/grid/PortableGridItemDeltaMessage.java @@ -0,0 +1,68 @@ +package com.raoulvdberge.refinedstorage.network.grid; + +import com.raoulvdberge.refinedstorage.api.util.StackListResult; +import com.raoulvdberge.refinedstorage.screen.BaseScreen; +import com.raoulvdberge.refinedstorage.screen.grid.GridScreen; +import com.raoulvdberge.refinedstorage.screen.grid.stack.IGridStack; +import com.raoulvdberge.refinedstorage.tile.grid.portable.IPortableGrid; +import com.raoulvdberge.refinedstorage.util.StackUtils; +import net.minecraft.item.ItemStack; +import net.minecraft.network.PacketBuffer; +import net.minecraftforge.fml.network.NetworkEvent; +import org.apache.commons.lang3.tuple.Pair; + +import javax.annotation.Nullable; +import java.util.LinkedList; +import java.util.List; +import java.util.function.Supplier; + +public class PortableGridItemDeltaMessage { + @Nullable + private IPortableGrid portableGrid; + private List> deltas; + + private List> clientDeltas; + + public PortableGridItemDeltaMessage(IPortableGrid portableGrid, List> deltas) { + this.portableGrid = portableGrid; + this.deltas = deltas; + } + + public PortableGridItemDeltaMessage(List> clientDeltas) { + this.clientDeltas = clientDeltas; + } + + public static PortableGridItemDeltaMessage decode(PacketBuffer buf) { + int size = buf.readInt(); + + List> clientDeltas = new LinkedList<>(); + + for (int i = 0; i < size; ++i) { + int delta = buf.readInt(); + + clientDeltas.add(Pair.of(StackUtils.readItemGridStack(buf), delta)); + } + + return new PortableGridItemDeltaMessage(clientDeltas); + } + + public static void encode(PortableGridItemDeltaMessage message, PacketBuffer buf) { + buf.writeInt(message.deltas.size()); + + for (StackListResult delta : message.deltas) { + buf.writeInt(delta.getChange()); + + StackUtils.writeItemGridStack(buf, delta.getStack(), delta.getId(), null, false, message.portableGrid.getItemStorageTracker().get(delta.getStack())); + } + } + + public static void handle(PortableGridItemDeltaMessage message, Supplier ctx) { + BaseScreen.executeLater(GridScreen.class, grid -> { + message.clientDeltas.forEach(p -> grid.getView().postChange(p.getLeft(), p.getRight())); + + grid.getView().sort(); + }); + + ctx.get().setPacketHandled(true); + } +} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/network/grid/PortableGridItemUpdateMessage.java b/src/main/java/com/raoulvdberge/refinedstorage/network/grid/PortableGridItemUpdateMessage.java new file mode 100644 index 000000000..e5aacecda --- /dev/null +++ b/src/main/java/com/raoulvdberge/refinedstorage/network/grid/PortableGridItemUpdateMessage.java @@ -0,0 +1,62 @@ +package com.raoulvdberge.refinedstorage.network.grid; + +import com.raoulvdberge.refinedstorage.api.util.StackListEntry; +import com.raoulvdberge.refinedstorage.screen.BaseScreen; +import com.raoulvdberge.refinedstorage.screen.grid.GridScreen; +import com.raoulvdberge.refinedstorage.screen.grid.stack.IGridStack; +import com.raoulvdberge.refinedstorage.screen.grid.view.ItemGridView; +import com.raoulvdberge.refinedstorage.tile.grid.portable.IPortableGrid; +import com.raoulvdberge.refinedstorage.util.StackUtils; +import net.minecraft.item.ItemStack; +import net.minecraft.network.PacketBuffer; +import net.minecraftforge.fml.network.NetworkEvent; + +import java.util.ArrayList; +import java.util.List; +import java.util.function.Supplier; + +public class PortableGridItemUpdateMessage { + private IPortableGrid portableGrid; + + private List stacks = new ArrayList<>(); + + public PortableGridItemUpdateMessage(List stacks) { + this.stacks = stacks; + } + + public PortableGridItemUpdateMessage(IPortableGrid portableGrid) { + this.portableGrid = portableGrid; + } + + public static PortableGridItemUpdateMessage decode(PacketBuffer buf) { + int size = buf.readInt(); + + List stacks = new ArrayList<>(); + + for (int i = 0; i < size; ++i) { + stacks.add(StackUtils.readItemGridStack(buf)); + } + + return new PortableGridItemUpdateMessage(stacks); + } + + public static void encode(PortableGridItemUpdateMessage message, PacketBuffer buf) { + int size = message.portableGrid.getItemCache().getList().getStacks().size(); + + buf.writeInt(size); + + for (StackListEntry stack : message.portableGrid.getItemCache().getList().getStacks()) { + StackUtils.writeItemGridStack(buf, stack.getStack(), stack.getId(), null, false, message.portableGrid.getItemStorageTracker().get(stack.getStack())); + } + } + + public static void handle(PortableGridItemUpdateMessage message, Supplier ctx) { + BaseScreen.executeLater(GridScreen.class, grid -> { + grid.setView(new ItemGridView(grid, GridScreen.getDefaultSorter(), GridScreen.getSorters())); + grid.getView().setStacks(message.stacks); + grid.getView().sort(); + }); + + ctx.get().setPacketHandled(true); + } +} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/network/grid/PortableGridSettingsUpdateMessage.java b/src/main/java/com/raoulvdberge/refinedstorage/network/grid/PortableGridSettingsUpdateMessage.java new file mode 100644 index 000000000..2108fdd17 --- /dev/null +++ b/src/main/java/com/raoulvdberge/refinedstorage/network/grid/PortableGridSettingsUpdateMessage.java @@ -0,0 +1,100 @@ +package com.raoulvdberge.refinedstorage.network.grid; + +import com.raoulvdberge.refinedstorage.api.network.grid.IGrid; +import com.raoulvdberge.refinedstorage.apiimpl.network.node.GridNetworkNode; +import com.raoulvdberge.refinedstorage.container.GridContainer; +import com.raoulvdberge.refinedstorage.tile.grid.portable.PortableGrid; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.network.PacketBuffer; +import net.minecraftforge.fml.network.NetworkEvent; + +import java.util.function.Supplier; + +public class PortableGridSettingsUpdateMessage { + private int viewType; + private int sortingDirection; + private int sortingType; + private int searchBoxMode; + private int size; + private int tabSelected; + private int tabPage; + + public PortableGridSettingsUpdateMessage(int viewType, int sortingDirection, int sortingType, int searchBoxMode, int size, int tabSelected, int tabPage) { + this.viewType = viewType; + this.sortingDirection = sortingDirection; + this.sortingType = sortingType; + this.searchBoxMode = searchBoxMode; + this.size = size; + this.tabSelected = tabSelected; + this.tabPage = tabPage; + } + + public static PortableGridSettingsUpdateMessage decode(PacketBuffer buf) { + return new PortableGridSettingsUpdateMessage( + buf.readInt(), + buf.readInt(), + buf.readInt(), + buf.readInt(), + buf.readInt(), + buf.readInt(), + buf.readInt() + ); + } + + public static void encode(PortableGridSettingsUpdateMessage message, PacketBuffer buf) { + buf.writeInt(message.viewType); + buf.writeInt(message.sortingDirection); + buf.writeInt(message.sortingType); + buf.writeInt(message.searchBoxMode); + buf.writeInt(message.size); + buf.writeInt(message.tabSelected); + buf.writeInt(message.tabPage); + } + + public static void handle(PortableGridSettingsUpdateMessage message, Supplier ctx) { + PlayerEntity player = ctx.get().getSender(); + + if (player != null) { + ctx.get().enqueueWork(() -> { + if (player.openContainer instanceof GridContainer) { + IGrid grid = ((GridContainer) player.openContainer).getGrid(); + + if (grid instanceof PortableGrid) { + ItemStack stack = ((PortableGrid) grid).getStack(); + + if (!stack.hasTag()) { + stack.setTag(new CompoundNBT()); + } + + if (IGrid.isValidViewType(message.viewType)) { + stack.getTag().putInt(GridNetworkNode.NBT_VIEW_TYPE, message.viewType); + } + + if (IGrid.isValidSortingDirection(message.sortingDirection)) { + stack.getTag().putInt(GridNetworkNode.NBT_SORTING_DIRECTION, message.sortingDirection); + } + + if (IGrid.isValidSortingType(message.sortingType)) { + stack.getTag().putInt(GridNetworkNode.NBT_SORTING_TYPE, message.sortingType); + } + + if (IGrid.isValidSearchBoxMode(message.searchBoxMode)) { + stack.getTag().putInt(GridNetworkNode.NBT_SEARCH_BOX_MODE, message.searchBoxMode); + } + + if (IGrid.isValidSize(message.size)) { + stack.getTag().putInt(GridNetworkNode.NBT_SIZE, message.size); + } + + stack.getTag().putInt(GridNetworkNode.NBT_TAB_SELECTED, message.tabSelected); + stack.getTag().putInt(GridNetworkNode.NBT_TAB_PAGE, message.tabPage); + } + } + }); + } + + ctx.get().setPacketHandled(true); + } +} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/network/grid/WirelessGridSettingsUpdateMessage.java b/src/main/java/com/raoulvdberge/refinedstorage/network/grid/WirelessGridSettingsUpdateMessage.java index 542b6d74e..b6f41f470 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/network/grid/WirelessGridSettingsUpdateMessage.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/network/grid/WirelessGridSettingsUpdateMessage.java @@ -4,7 +4,6 @@ import com.raoulvdberge.refinedstorage.api.network.grid.IGrid; import com.raoulvdberge.refinedstorage.apiimpl.network.node.GridNetworkNode; import com.raoulvdberge.refinedstorage.container.GridContainer; import com.raoulvdberge.refinedstorage.tile.grid.WirelessGrid; -import com.raoulvdberge.refinedstorage.tile.grid.portable.PortableGrid; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompoundNBT; @@ -62,9 +61,8 @@ public class WirelessGridSettingsUpdateMessage { if (player.openContainer instanceof GridContainer) { IGrid grid = ((GridContainer) player.openContainer).getGrid(); - // TODO Duplicate for portable grid. - if (grid instanceof WirelessGrid || grid instanceof PortableGrid) { - ItemStack stack = grid instanceof WirelessGrid ? ((WirelessGrid) grid).getStack() : ((PortableGrid) grid).getStack(); + if (grid instanceof WirelessGrid) { + ItemStack stack = ((WirelessGrid) grid).getStack(); if (!stack.hasTag()) { stack.setTag(new CompoundNBT()); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyClient.java b/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyClient.java deleted file mode 100755 index 3681c62d5..000000000 --- a/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyClient.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.raoulvdberge.refinedstorage.proxy; - -public class ProxyClient extends ProxyCommon { - /*@Override - public void preInit(FMLPreInitializationEvent e) { - super.preInit(e); - - MinecraftForge.EVENT_BUS.register(new KeyInputListener()); - }*/ -} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyCommon.java b/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyCommon.java index 2ead5d208..6db1ce648 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyCommon.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyCommon.java @@ -8,7 +8,6 @@ public class ProxyCommon { API.deliver(e.getAsmData()); TilePortableGrid.FACTORY_ID = API.instance().getGridManager().add(new GridFactoryPortableGridBlock()); - PortableGrid.ID = API.instance().getGridManager().add(new GridFactoryPortableGrid()); API.instance().getCraftingTaskRegistry().add(CraftingTaskFactory.ID, new CraftingTaskFactory()); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/render/model/PortableGridBakedModel.java b/src/main/java/com/raoulvdberge/refinedstorage/render/model/PortableGridBakedModel.java new file mode 100644 index 000000000..29fa920cc --- /dev/null +++ b/src/main/java/com/raoulvdberge/refinedstorage/render/model/PortableGridBakedModel.java @@ -0,0 +1,75 @@ +package com.raoulvdberge.refinedstorage.render.model; + +import com.raoulvdberge.refinedstorage.tile.grid.portable.PortableGrid; +import net.minecraft.client.renderer.model.IBakedModel; +import net.minecraft.client.renderer.model.ItemOverrideList; +import net.minecraft.entity.LivingEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; + +import javax.annotation.Nullable; + +public class PortableGridBakedModel extends DelegateBakedModel { + private final IBakedModel baseConnected; + private final IBakedModel baseDisconnected; + private final IBakedModel disk; + private final IBakedModel diskNearCapacity; + private final IBakedModel diskFull; + private final IBakedModel diskDisconnected; + + private final CustomItemOverrideList itemOverrideList = new CustomItemOverrideList(); + + public PortableGridBakedModel(IBakedModel baseConnected, + IBakedModel baseDisconnected, + IBakedModel disk, + IBakedModel diskNearCapacity, + IBakedModel diskFull, + IBakedModel diskDisconnected) { + super(baseConnected); + + this.baseConnected = baseConnected; + this.baseDisconnected = baseDisconnected; + this.disk = disk; + this.diskNearCapacity = diskNearCapacity; + this.diskFull = diskFull; + this.diskDisconnected = diskDisconnected; + } + + @Override + public ItemOverrideList getOverrides() { + return itemOverrideList; + } + + private class CustomItemOverrideList extends ItemOverrideList { + @Nullable + @Override + public IBakedModel getModelWithOverrides(IBakedModel model, ItemStack stack, @Nullable World worldIn, @Nullable LivingEntity entityIn) { + PortableGrid portableGrid = new PortableGrid(null, stack); + + IBakedModel myDisk = null; + + switch (portableGrid.getDiskState()) { + case NORMAL: + myDisk = disk; + break; + case NEAR_CAPACITY: + myDisk = diskNearCapacity; + break; + case FULL: + myDisk = diskFull; + break; + case DISCONNECTED: + myDisk = diskDisconnected; + break; + case NONE: + break; + } + + if (portableGrid.isActive()) { + return new PortableGridItemBakedModel(baseConnected, myDisk); + } else { + return new PortableGridItemBakedModel(baseDisconnected, myDisk); + } + } + } +} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/render/model/PortableGridItemBakedModel.java b/src/main/java/com/raoulvdberge/refinedstorage/render/model/PortableGridItemBakedModel.java new file mode 100644 index 000000000..af28f26dd --- /dev/null +++ b/src/main/java/com/raoulvdberge/refinedstorage/render/model/PortableGridItemBakedModel.java @@ -0,0 +1,71 @@ +package com.raoulvdberge.refinedstorage.render.model; + +import net.minecraft.block.BlockState; +import net.minecraft.client.renderer.model.BakedQuad; +import net.minecraft.client.renderer.model.IBakedModel; +import net.minecraft.client.renderer.model.ItemCameraTransforms; +import net.minecraft.client.renderer.model.ItemOverrideList; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.util.Direction; + +import javax.annotation.Nullable; +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + +public class PortableGridItemBakedModel implements IBakedModel { + private final IBakedModel base; + @Nullable + private final IBakedModel disk; + + public PortableGridItemBakedModel(IBakedModel base, @Nullable IBakedModel disk) { + this.base = base; + this.disk = disk; + } + + @Override + public ItemOverrideList getOverrides() { + return ItemOverrideList.EMPTY; + } + + @Override + @SuppressWarnings("deprecation") + public ItemCameraTransforms getItemCameraTransforms() { + return base.getItemCameraTransforms(); + } + + @Override + @SuppressWarnings("deprecation") + public List getQuads(@Nullable BlockState state, @Nullable Direction side, Random rand) { + List quads = new ArrayList<>(); + + quads.addAll(base.getQuads(state, side, rand)); + + if (disk != null) { + quads.addAll(disk.getQuads(state, side, rand)); + } + + return quads; + } + + @Override + public boolean isAmbientOcclusion() { + return base.isAmbientOcclusion(); + } + + @Override + public boolean isGui3d() { + return base.isGui3d(); + } + + @Override + public boolean isBuiltInRenderer() { + return base.isBuiltInRenderer(); + } + + @Override + @SuppressWarnings("deprecation") + public TextureAtlasSprite getParticleTexture() { + return base.getParticleTexture(); + } +} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/grid/portable/IPortableGrid.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/grid/portable/IPortableGrid.java index 19f70886c..cb0665b0f 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/tile/grid/portable/IPortableGrid.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/grid/portable/IPortableGrid.java @@ -11,16 +11,6 @@ import net.minecraftforge.items.IItemHandlerModifiable; import javax.annotation.Nullable; public interface IPortableGrid { - interface IPortableGridRenderInfo { - int getStored(); - - int getCapacity(); - - boolean hasStorage(); - - boolean isActive(); - } - @Nullable IStorageCache getCache(); @@ -54,4 +44,8 @@ public interface IPortableGrid { IStorageTracker getItemStorageTracker(); IStorageTracker getFluidStorageTracker(); + + boolean isActive(); + + PortableGridDiskState getDiskState(); } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/grid/portable/PortableGrid.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/grid/portable/PortableGrid.java index 59452483e..594e574e6 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/tile/grid/portable/PortableGrid.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/grid/portable/PortableGrid.java @@ -14,10 +14,12 @@ import com.raoulvdberge.refinedstorage.api.storage.cache.IStorageCacheListener; import com.raoulvdberge.refinedstorage.api.storage.disk.IStorageDisk; import com.raoulvdberge.refinedstorage.api.storage.disk.IStorageDiskContainerContext; import com.raoulvdberge.refinedstorage.api.storage.disk.IStorageDiskProvider; +import com.raoulvdberge.refinedstorage.api.storage.disk.StorageDiskSyncData; import com.raoulvdberge.refinedstorage.api.util.IFilter; import com.raoulvdberge.refinedstorage.apiimpl.API; import com.raoulvdberge.refinedstorage.apiimpl.network.grid.handler.PortableFluidGridHandler; import com.raoulvdberge.refinedstorage.apiimpl.network.grid.handler.PortableItemGridHandler; +import com.raoulvdberge.refinedstorage.apiimpl.network.node.DiskState; import com.raoulvdberge.refinedstorage.apiimpl.storage.cache.PortableFluidStorageCache; import com.raoulvdberge.refinedstorage.apiimpl.storage.cache.PortableItemStorageCache; import com.raoulvdberge.refinedstorage.apiimpl.storage.cache.listener.PortableFluidGridStorageCacheListener; @@ -29,6 +31,9 @@ import com.raoulvdberge.refinedstorage.apiimpl.storage.tracker.ItemStorageTracke import com.raoulvdberge.refinedstorage.inventory.item.BaseItemHandler; import com.raoulvdberge.refinedstorage.inventory.item.FilterItemHandler; import com.raoulvdberge.refinedstorage.inventory.item.validator.StorageDiskItemValidator; +import com.raoulvdberge.refinedstorage.item.WirelessGridItem; +import com.raoulvdberge.refinedstorage.item.blockitem.PortableGridBlockItem; +import com.raoulvdberge.refinedstorage.network.grid.PortableGridSettingsUpdateMessage; import com.raoulvdberge.refinedstorage.screen.BaseScreen; import com.raoulvdberge.refinedstorage.screen.grid.GridScreen; import com.raoulvdberge.refinedstorage.util.StackUtils; @@ -49,10 +54,9 @@ import net.minecraftforge.items.IItemHandlerModifiable; import javax.annotation.Nullable; import java.util.ArrayList; import java.util.List; +import java.util.UUID; public class PortableGrid implements IGrid, IPortableGrid, IStorageDiskContainerContext { - public static int ID; - static final String NBT_STORAGE_TRACKER = "StorageTracker"; static final String NBT_FLUID_STORAGE_TRACKER = "FluidStorageTracker"; @@ -64,6 +68,7 @@ public class PortableGrid implements IGrid, IPortableGrid, IStorageDiskContainer private PortableItemGridHandler itemHandler = new PortableItemGridHandler(this, this); private PortableFluidGridHandler fluidHandler = new PortableFluidGridHandler(this); + @Nullable private PlayerEntity player; private ItemStack stack; @@ -92,7 +97,7 @@ public class PortableGrid implements IGrid, IPortableGrid, IStorageDiskContainer private BaseItemHandler disk = new BaseItemHandler(1) .addValidator(new StorageDiskItemValidator()) .addListener(((handler, slot, reading) -> { - if (!player.world.isRemote) { + if (player != null && !player.world.isRemote) { ItemStack diskStack = handler.getStackInSlot(slot); if (diskStack.isEmpty()) { @@ -130,18 +135,16 @@ public class PortableGrid implements IGrid, IPortableGrid, IStorageDiskContainer } })); - public PortableGrid(PlayerEntity player, ItemStack stack) { + public PortableGrid(@Nullable PlayerEntity player, ItemStack stack) { this.player = player; this.stack = stack; - if (player != null) { - /* TODO this.sortingType = ItemWirelessGrid.getSortingType(stack); - this.sortingDirection = ItemWirelessGrid.getSortingDirection(stack); - this.searchBoxMode = ItemWirelessGrid.getSearchBoxMode(stack); - this.tabSelected = ItemWirelessGrid.getTabSelected(stack); - this.tabPage = ItemWirelessGrid.getTabPage(stack); - this.size = ItemWirelessGrid.getSize(stack);*/ - } + this.sortingType = WirelessGridItem.getSortingType(stack); + this.sortingDirection = WirelessGridItem.getSortingDirection(stack); + this.searchBoxMode = WirelessGridItem.getSearchBoxMode(stack); + this.tabSelected = WirelessGridItem.getTabSelected(stack); + this.tabPage = WirelessGridItem.getTabPage(stack); + this.size = WirelessGridItem.getSize(stack); if (!stack.hasTag()) { stack.setTag(new CompoundNBT()); @@ -156,10 +159,11 @@ public class PortableGrid implements IGrid, IPortableGrid, IStorageDiskContainer } StackUtils.readItems(disk, 4, stack.getTag()); - StackUtils.readItems(filter, 0, stack.getTag()); + } - drainEnergy(RS.INSTANCE.config.portableGridOpenUsage); + public void onOpen() { + drainEnergy(RS.SERVER_CONFIG.getPortableGrid().getOpenUsage()); } public ItemStack getStack() { @@ -180,21 +184,24 @@ public class PortableGrid implements IGrid, IPortableGrid, IStorageDiskContainer @Override public void drainEnergy(int energy) { - //TODO if (RS.INSTANCE.config.portableGridUsesEnergy && stack.getItemDamage() != ItemBlockPortableGrid.TYPE_CREATIVE) { - IEnergyStorage storage = stack.getCapability(CapabilityEnergy.ENERGY, null).orElse(null); - //} - if (storage != null) { - storage.extractEnergy(energy, false); + if (RS.SERVER_CONFIG.getPortableGrid().getUseEnergy() && ((PortableGridBlockItem) stack.getItem()).getType() != PortableGridBlockItem.Type.CREATIVE) { + IEnergyStorage storage = stack.getCapability(CapabilityEnergy.ENERGY, null).orElse(null); + + if (storage != null) { + storage.extractEnergy(energy, false); + } } } @Override public int getEnergy() { - //TODO if (RS.INSTANCE.config.portableGridUsesEnergy && stack.getItemDamage() != ItemBlockPortableGrid.TYPE_CREATIVE) { - IEnergyStorage storage = stack.getCapability(CapabilityEnergy.ENERGY, null).orElse(null); - // } + if (RS.SERVER_CONFIG.getPortableGrid().getUseEnergy() && ((PortableGridBlockItem) stack.getItem()).getType() != PortableGridBlockItem.Type.CREATIVE) { + IEnergyStorage storage = stack.getCapability(CapabilityEnergy.ENERGY, null).orElse(null); - return storage == null ? RS.INSTANCE.config.portableGridCapacity : storage.getMaxEnergyStored(); + return storage == null ? RS.SERVER_CONFIG.getPortableGrid().getCapacity() : storage.getEnergyStored(); + } + + return RS.SERVER_CONFIG.getPortableGrid().getCapacity(); } @Override @@ -296,7 +303,7 @@ public class PortableGrid implements IGrid, IPortableGrid, IStorageDiskContainer @Override public void onSortingTypeChanged(int type) { - // TODO RS.INSTANCE.network.sendToServer(new MessageGridSettingsUpdate(getViewType(), getSortingDirection(), type, getSearchBoxMode(), getSize(), getTabSelected(), getTabPage())); + RS.NETWORK_HANDLER.sendToServer(new PortableGridSettingsUpdateMessage(getViewType(), getSortingDirection(), type, getSearchBoxMode(), getSize(), getTabSelected(), getTabPage())); this.sortingType = type; @@ -305,7 +312,7 @@ public class PortableGrid implements IGrid, IPortableGrid, IStorageDiskContainer @Override public void onSortingDirectionChanged(int direction) { - // TODO RS.INSTANCE.network.sendToServer(new MessageGridSettingsUpdate(getViewType(), direction, getSortingType(), getSearchBoxMode(), getSize(), getTabSelected(), getTabPage())); + RS.NETWORK_HANDLER.sendToServer(new PortableGridSettingsUpdateMessage(getViewType(), direction, getSortingType(), getSearchBoxMode(), getSize(), getTabSelected(), getTabPage())); this.sortingDirection = direction; @@ -314,27 +321,25 @@ public class PortableGrid implements IGrid, IPortableGrid, IStorageDiskContainer @Override public void onSearchBoxModeChanged(int searchBoxMode) { - // TODO RS.INSTANCE.network.sendToServer(new MessageGridSettingsUpdate(getViewType(), getSortingDirection(), getSortingType(), searchBoxMode, getSize(), getTabSelected(), getTabPage())); + RS.NETWORK_HANDLER.sendToServer(new PortableGridSettingsUpdateMessage(getViewType(), getSortingDirection(), getSortingType(), searchBoxMode, getSize(), getTabSelected(), getTabPage())); this.searchBoxMode = searchBoxMode; } @Override public void onSizeChanged(int size) { - // TODO RS.INSTANCE.network.sendToServer(new MessageGridSettingsUpdate(getViewType(), getSortingDirection(), getSortingType(), getSearchBoxMode(), size, getTabSelected(), getTabPage())); + RS.NETWORK_HANDLER.sendToServer(new PortableGridSettingsUpdateMessage(getViewType(), getSortingDirection(), getSortingType(), getSearchBoxMode(), size, getTabSelected(), getTabPage())); this.size = size; - // TODO if (Minecraft.getMinecraft().currentScreen != null) { - // Minecraft.getMinecraft().currentScreen.initGui(); - //} + BaseScreen.executeLater(GridScreen.class, BaseScreen::init); } @Override public void onTabSelectionChanged(int tab) { this.tabSelected = tab == tabSelected ? -1 : tab; - // TODO RS.INSTANCE.network.sendToServer(new MessageGridSettingsUpdate(getViewType(), getSortingDirection(), getSortingType(), getSearchBoxMode(), getSize(), tabSelected, getTabPage())); + RS.NETWORK_HANDLER.sendToServer(new PortableGridSettingsUpdateMessage(getViewType(), getSortingDirection(), getSortingType(), getSearchBoxMode(), getSize(), tabSelected, getTabPage())); BaseScreen.executeLater(GridScreen.class, grid -> grid.getView().sort()); } @@ -342,7 +347,7 @@ public class PortableGrid implements IGrid, IPortableGrid, IStorageDiskContainer @Override public void onTabPageChanged(int page) { if (page >= 0 && page <= getTotalTabPages()) { - // TODO RS.INSTANCE.network.sendToServer(new MessageGridSettingsUpdate(getViewType(), getSortingDirection(), getSortingType(), getSearchBoxMode(), getSize(), getTabSelected(), page)); + RS.NETWORK_HANDLER.sendToServer(new PortableGridSettingsUpdateMessage(getViewType(), getSortingDirection(), getSortingType(), getSearchBoxMode(), getSize(), getTabSelected(), page)); this.tabPage = page; } @@ -415,17 +420,62 @@ public class PortableGrid implements IGrid, IPortableGrid, IStorageDiskContainer } } + private boolean hasDisk() { + return !disk.getStackInSlot(0).isEmpty(); + } + @Override public boolean isActive() { - // TODO if (RS.INSTANCE.config.portableGridUsesEnergy && stack.getItemDamage() != ItemBlockPortableGrid.TYPE_CREATIVE && stack.getCapability(CapabilityEnergy.ENERGY, null).getEnergyStored() <= RS.INSTANCE.config.portableGridOpenUsage) { - // return false; - //+} - - if (disk.getStackInSlot(0).isEmpty()) { + if (RS.SERVER_CONFIG.getPortableGrid().getUseEnergy() && + ((PortableGridBlockItem) stack.getItem()).getType() != PortableGridBlockItem.Type.CREATIVE && + stack.getCapability(CapabilityEnergy.ENERGY).orElse(null).getEnergyStored() <= RS.SERVER_CONFIG.getPortableGrid().getOpenUsage()) { return false; } - return true; + return hasDisk(); + } + + @Nullable + private UUID getDiskId() { + return !hasDisk() ? null : ((IStorageDiskProvider) disk.getStackInSlot(0).getItem()).getId(disk.getStackInSlot(0)); + } + + private int getStored() { + API.instance().getStorageDiskSync().sendRequest(getDiskId()); + + StorageDiskSyncData data = API.instance().getStorageDiskSync().getData(getDiskId()); + + return data == null ? 0 : data.getStored(); + } + + private int getCapacity() { + API.instance().getStorageDiskSync().sendRequest(getDiskId()); + + StorageDiskSyncData data = API.instance().getStorageDiskSync().getData(getDiskId()); + + return data == null ? 0 : data.getCapacity(); + } + + @Override + public PortableGridDiskState getDiskState() { + if (!hasDisk()) { + return PortableGridDiskState.NONE; + } + + if (!isActive()) { + return PortableGridDiskState.DISCONNECTED; + } + + int stored = getStored(); + int capacity = getCapacity(); + + if (stored == capacity) { + return PortableGridDiskState.FULL; + } else if ((int) ((float) stored / (float) capacity * 100F) >= DiskState.DISK_NEAR_CAPACITY_THRESHOLD) { + return PortableGridDiskState.NEAR_CAPACITY; + } else { + return PortableGridDiskState.NORMAL; + } } @Override diff --git a/src/main/java/com/raoulvdberge/refinedstorage/block/enums/PortableGridDiskState.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/grid/portable/PortableGridDiskState.java similarity index 93% rename from src/main/java/com/raoulvdberge/refinedstorage/block/enums/PortableGridDiskState.java rename to src/main/java/com/raoulvdberge/refinedstorage/tile/grid/portable/PortableGridDiskState.java index 68e3296ae..1c182db54 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/block/enums/PortableGridDiskState.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/grid/portable/PortableGridDiskState.java @@ -1,4 +1,4 @@ -package com.raoulvdberge.refinedstorage.block.enums; +package com.raoulvdberge.refinedstorage.tile.grid.portable; import net.minecraft.util.IStringSerializable; diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/grid/portable/TilePortableGrid.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/grid/portable/TilePortableGrid.java index fe7e91853..7bd55ece2 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/tile/grid/portable/TilePortableGrid.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/grid/portable/TilePortableGrid.java @@ -1,6 +1,5 @@ package com.raoulvdberge.refinedstorage.tile.grid.portable; -import com.raoulvdberge.refinedstorage.RS; import com.raoulvdberge.refinedstorage.RSBlocks; import com.raoulvdberge.refinedstorage.RSTiles; import com.raoulvdberge.refinedstorage.api.network.grid.GridType; @@ -21,7 +20,6 @@ import com.raoulvdberge.refinedstorage.api.util.IFilter; import com.raoulvdberge.refinedstorage.apiimpl.API; import com.raoulvdberge.refinedstorage.apiimpl.network.grid.handler.PortableFluidGridHandler; import com.raoulvdberge.refinedstorage.apiimpl.network.grid.handler.PortableItemGridHandler; -import com.raoulvdberge.refinedstorage.apiimpl.network.node.DiskState; import com.raoulvdberge.refinedstorage.apiimpl.network.node.GridNetworkNode; import com.raoulvdberge.refinedstorage.apiimpl.storage.cache.PortableFluidStorageCache; import com.raoulvdberge.refinedstorage.apiimpl.storage.cache.PortableItemStorageCache; @@ -31,8 +29,7 @@ import com.raoulvdberge.refinedstorage.apiimpl.storage.disk.PortableFluidStorage import com.raoulvdberge.refinedstorage.apiimpl.storage.disk.PortableItemStorageDisk; import com.raoulvdberge.refinedstorage.apiimpl.storage.tracker.FluidStorageTracker; import com.raoulvdberge.refinedstorage.apiimpl.storage.tracker.ItemStorageTracker; -import com.raoulvdberge.refinedstorage.block.BlockPortableGrid; -import com.raoulvdberge.refinedstorage.block.enums.PortableGridDiskState; +import com.raoulvdberge.refinedstorage.block.PortableGridBlock; import com.raoulvdberge.refinedstorage.block.enums.PortableGridType; import com.raoulvdberge.refinedstorage.inventory.item.BaseItemHandler; import com.raoulvdberge.refinedstorage.inventory.item.FilterItemHandler; @@ -76,7 +73,7 @@ import javax.annotation.Nullable; import java.util.ArrayList; import java.util.List; -public class TilePortableGrid extends BaseTile implements IGrid, IPortableGrid, IRedstoneConfigurable, IStorageDiskContainerContext, IPortableGrid.IPortableGridRenderInfo { +public class TilePortableGrid extends BaseTile implements IGrid, IPortableGrid, IRedstoneConfigurable, IStorageDiskContainerContext { public static int FACTORY_ID; public static final TileDataParameter REDSTONE_MODE = RedstoneMode.createParameter(); @@ -217,10 +214,6 @@ public class TilePortableGrid extends BaseTile implements IGrid, IPortableGrid, WorldUtils.updateBlock(world, pos); } - public PortableGridDiskState getDiskState() { - return diskState; - } - public boolean isConnected() { return connected; } @@ -230,7 +223,7 @@ public class TilePortableGrid extends BaseTile implements IGrid, IPortableGrid, BlockState state = world.getBlockState(pos); if (state.getBlock() == RSBlocks.PORTABLE_GRID) { - this.type = state.get(BlockPortableGrid.TYPE); + this.type = state.get(PortableGridBlock.TYPE); } } @@ -271,13 +264,14 @@ public class TilePortableGrid extends BaseTile implements IGrid, IPortableGrid, } } - this.diskState = getDiskState(this); + this.diskState = getDiskState(); markDirty(); } private EnergyStorage recreateEnergyStorage(int energyStored) { - return new EnergyStorage(RS.INSTANCE.config.portableGridCapacity, RS.INSTANCE.config.portableGridCapacity, 0, energyStored); + return null; + // TODO return new EnergyStorage(RS.INSTANCE.config.portableGridCapacity, RS.INSTANCE.config.portableGridCapacity, 0, energyStored); } public ItemStack getAsItem() { @@ -529,9 +523,9 @@ public class TilePortableGrid extends BaseTile implements IGrid, IPortableGrid, public boolean isActive() { int stored = !world.isRemote ? energyStorage.getEnergyStored() : ENERGY_STORED.getValue(); - if (getPortableType() != PortableGridType.CREATIVE && RS.INSTANCE.config.portableGridUsesEnergy && stored <= RS.INSTANCE.config.portableGridOpenUsage) { + /* TODO if (getPortableType() != PortableGridType.CREATIVE && RS.INSTANCE.config.portableGridUsesEnergy && stored <= RS.INSTANCE.config.portableGridOpenUsage) { return false; - } + }*/ if (disk.getStackInSlot(0).isEmpty()) { return false; @@ -556,16 +550,16 @@ public class TilePortableGrid extends BaseTile implements IGrid, IPortableGrid, @Override public void drainEnergy(int energy) { - if (RS.INSTANCE.config.portableGridUsesEnergy && getPortableType() != PortableGridType.CREATIVE && redstoneMode.isEnabled(world, pos)) { + /* TODO if (RS.INSTANCE.config.portableGridUsesEnergy && getPortableType() != PortableGridType.CREATIVE && redstoneMode.isEnabled(world, pos)) { energyStorage.extractEnergy(energy, false); checkIfDiskStateChanged(); - } + }*/ checkIfConnectivityChanged(); } - @Override + /*@Override public int getStored() { return storage != null ? storage.getStored() : 0; } @@ -578,19 +572,19 @@ public class TilePortableGrid extends BaseTile implements IGrid, IPortableGrid, @Override public boolean hasStorage() { return storage != null; - } + }*/ @Override public int getEnergy() { - if (RS.INSTANCE.config.portableGridUsesEnergy && getPortableType() != PortableGridType.CREATIVE) { + /* TODO if (RS.INSTANCE.config.portableGridUsesEnergy && getPortableType() != PortableGridType.CREATIVE) { return energyStorage.getEnergyStored(); - } + }*/ - return energyStorage.getMaxEnergyStored(); + return energyStorage.getEnergyStored(); } private void checkIfDiskStateChanged() { - PortableGridDiskState newDiskState = getDiskState(this); + PortableGridDiskState newDiskState = getDiskState(); if (this.diskState != newDiskState) { this.diskState = newDiskState; @@ -699,7 +693,7 @@ public class TilePortableGrid extends BaseTile implements IGrid, IPortableGrid, this.loadStorage(); this.connected = getEnergy() != 0; - this.diskState = getDiskState(this); + this.diskState = getDiskState(); } @Override @@ -731,7 +725,7 @@ public class TilePortableGrid extends BaseTile implements IGrid, IPortableGrid, } public void onOpened() { - drainEnergy(RS.INSTANCE.config.portableGridOpenUsage); + // TODO drainEnergy(RS.INSTANCE.config.portableGridOpenUsage); } @Override @@ -746,10 +740,11 @@ public class TilePortableGrid extends BaseTile implements IGrid, IPortableGrid, markDirty(); } - public static PortableGridDiskState getDiskState(IPortableGridRenderInfo renderInfo) { - if (!renderInfo.hasStorage()) { - return PortableGridDiskState.NONE; - } + @Override + public PortableGridDiskState getDiskState() { + //if (!renderInfo.hasStorage()) { + return PortableGridDiskState.NONE; + /*} if (!renderInfo.isActive()) { return PortableGridDiskState.DISCONNECTED; @@ -761,7 +756,7 @@ public class TilePortableGrid extends BaseTile implements IGrid, IPortableGrid, return PortableGridDiskState.NEAR_CAPACITY; } else { return PortableGridDiskState.NORMAL; - } + }*/ } @Override diff --git a/src/main/resources/assets/refinedstorage/blockstates/portable_grid.json b/src/main/resources/assets/refinedstorage/blockstates/portable_grid.json index a4d7bc877..7a73a41bf 100644 --- a/src/main/resources/assets/refinedstorage/blockstates/portable_grid.json +++ b/src/main/resources/assets/refinedstorage/blockstates/portable_grid.json @@ -1,62 +1,2 @@ { - "forge_marker": 1, - "defaults": { - "model": "refinedstorage:portable_grid", - "textures": { - "particle": "refinedstorage:blocks/portable_grid_1", - "texture0": "refinedstorage:blocks/portable_grid_1", - "texture2": "refinedstorage:blocks/portable_grid_3", - "texture3": "refinedstorage:blocks/portable_grid_4", - "texture4": "refinedstorage:blocks/portable_grid_5", - "texture5": "refinedstorage:blocks/portable_grid_6", - "texture6": "refinedstorage:blocks/portable_grid_7", - "texture7": "refinedstorage:blocks/portable_grid_8" - }, - "transform": "forge:default-block", - "uvlock": false - }, - "variants": { - "disk_state": { - "normal": { - "submodel": "refinedstorage:disks/portable_grid_disk" - }, - "near_capacity": { - "submodel": "refinedstorage:disks/portable_grid_disk_near_capacity" - }, - "full": { - "submodel": "refinedstorage:disks/portable_grid_disk_full" - }, - "disconnected": { - "submodel": "refinedstorage:disks/portable_grid_disk_disconnected" - }, - "none": { - } - }, - "connected": { - "true": { - "textures": { - "texture1": "refinedstorage:blocks/portable_grid_2" - } - }, - "false": { - "textures": { - "texture1": "refinedstorage:blocks/portable_grid_2_disconnected" - } - } - }, - "direction": { - "north": { - "y": 0 - }, - "east": { - "y": 90 - }, - "south": { - "y": 180 - }, - "west": { - "y": 270 - } - } - } } \ No newline at end of file diff --git a/src/main/resources/assets/refinedstorage/lang/en_us.json b/src/main/resources/assets/refinedstorage/lang/en_us.json index 37bd04bcd..bd81e5d26 100644 --- a/src/main/resources/assets/refinedstorage/lang/en_us.json +++ b/src/main/resources/assets/refinedstorage/lang/en_us.json @@ -217,9 +217,9 @@ "block.refinedstorage.security_manager": "Security Manager", "block.refinedstorage.quartz_enriched_iron_block": "Block of Quartz Enriched Iron", "block.refinedstorage.storage_monitor": "Storage Monitor", - "block.refinedstorage:portable_grid.0": "Portable Grid", - "block.refinedstorage:portable_grid.1": "Creative Portable Grid", - "block.refinedstorage:portable_grid.tooltip": "Sneak to place in the world.", + "block.refinedstorage.portable_grid": "Portable Grid", + "block.refinedstorage.creative_portable_grid": "Creative Portable Grid", + "block.refinedstorage.portable_grid.tooltip": "Sneak to place in the world.", "block.refinedstorage:crafter_manager": "Crafter Manager", "item.refinedstorage.1k_storage_disk": "1k Storage Disk", "item.refinedstorage.4k_storage_disk": "4k Storage Disk", diff --git a/src/main/resources/assets/refinedstorage/models/block/portable_grid.json b/src/main/resources/assets/refinedstorage/models/block/portable_grid.json index 6f31adbd1..10a900ea8 100644 --- a/src/main/resources/assets/refinedstorage/models/block/portable_grid.json +++ b/src/main/resources/assets/refinedstorage/models/block/portable_grid.json @@ -1,4 +1,15 @@ { + "parent": "block/cube", + "textures": { + "particle": "refinedstorage:block/portable_grid_1", + "texture0": "refinedstorage:block/portable_grid_1", + "texture2": "refinedstorage:block/portable_grid_3", + "texture3": "refinedstorage:block/portable_grid_4", + "texture4": "refinedstorage:block/portable_grid_5", + "texture5": "refinedstorage:block/portable_grid_6", + "texture6": "refinedstorage:block/portable_grid_7", + "texture7": "refinedstorage:block/portable_grid_8" + }, "display": { "firstperson_lefthand": { "rotation": [10, 130, 0], diff --git a/src/main/resources/assets/refinedstorage/models/block/portable_grid_connected.json b/src/main/resources/assets/refinedstorage/models/block/portable_grid_connected.json new file mode 100644 index 000000000..413fd3f05 --- /dev/null +++ b/src/main/resources/assets/refinedstorage/models/block/portable_grid_connected.json @@ -0,0 +1,6 @@ +{ + "parent": "refinedstorage:block/portable_grid", + "textures": { + "texture1": "refinedstorage:block/portable_grid_2" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/refinedstorage/models/block/portable_grid_disconnected.json b/src/main/resources/assets/refinedstorage/models/block/portable_grid_disconnected.json new file mode 100644 index 000000000..52e1edce9 --- /dev/null +++ b/src/main/resources/assets/refinedstorage/models/block/portable_grid_disconnected.json @@ -0,0 +1,6 @@ +{ + "parent": "refinedstorage:block/portable_grid", + "textures": { + "texture1": "refinedstorage:block/portable_grid_2_disconnected" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/refinedstorage/models/item/portable_grid.json b/src/main/resources/assets/refinedstorage/models/item/portable_grid.json index b449e1f77..2c63c0851 100644 --- a/src/main/resources/assets/refinedstorage/models/item/portable_grid.json +++ b/src/main/resources/assets/refinedstorage/models/item/portable_grid.json @@ -1,3 +1,2 @@ { - "parent": "item/generated" } diff --git a/src/main/resources/assets/refinedstorage/recipes/portable_grid.json b/src/main/resources/data/refinedstorage/recipes/portable_grid.json similarity index 52% rename from src/main/resources/assets/refinedstorage/recipes/portable_grid.json rename to src/main/resources/data/refinedstorage/recipes/portable_grid.json index ee2f7b21c..41922d6ff 100644 --- a/src/main/resources/assets/refinedstorage/recipes/portable_grid.json +++ b/src/main/resources/data/refinedstorage/recipes/portable_grid.json @@ -10,20 +10,16 @@ "item": "refinedstorage:quartz_enriched_iron" }, "G": { - "item": "refinedstorage:grid", - "data": 0 + "item": "refinedstorage:grid" }, "F": { - "item": "refinedstorage:grid", - "data": 3 + "item": "refinedstorage:fluid_grid" }, "C": { - "item": "refinedstorage:controller", - "data": 0 + "item": "refinedstorage:controller" } }, "result": { - "item": "refinedstorage:portable_grid", - "data": 0 + "item": "refinedstorage:portable_grid" } } \ No newline at end of file